/* Central de Controle — ops.digupdog.com. One bold element (the live status band); everything else quiet. */
:root{
  --ink:#0E1A2B; --ink-2:#1B2A40; --ink-soft:#8FA3BF; --on-ink:#F2F6FB;
  --canvas:#EDF1F5; --surface:#FFFFFF; --sunk:#F5F7FA; --text:#132033; --text-2:#55657A; --rule:#DCE3EB; --rule-strong:#C5D0DC;
  --ok:#0F8B8D; --ok-tint:#E2F3F2; --warn:#B7791F; --warn-tint:#FBF0DE; --bad:#C2412D; --bad-tint:#FBE7E3; --run:#3355D1; --run-tint:#E6EBFB; --idle:#7A879A; --idle-tint:#EEF1F5;
  --r-lg:14px; --r-md:10px; --r-sm:6px;
  --font:"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"SF Pro Text",Roboto,"Helvetica Neue",Arial,sans-serif;
  --font-display:"Segoe UI Variable Display","Segoe UI",system-ui,-apple-system,"SF Pro Display",Roboto,sans-serif;
  --font-mono:"Cascadia Mono","SF Mono",ui-monospace,Consolas,monospace;
}
@media (prefers-color-scheme:dark){:root{
  --canvas:#0B121C; --surface:#121C29; --sunk:#0F1824; --text:#E4EBF3; --text-2:#93A3B8; --rule:#1F2C3D; --rule-strong:#2A3A4F;
  --ok:#3CC4C0; --ok-tint:#0F2A2D; --warn:#E5A84B; --warn-tint:#2C2214; --bad:#F07D69; --bad-tint:#2E1915; --run:#89A3FF; --run-tint:#18213D; --idle:#8391A5; --idle-tint:#18212D;
}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--canvas);color:var(--text);font:15px/1.5 var(--font);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}
button{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--run);outline-offset:2px;border-radius:4px}
a{color:var(--run)}

/* ---------- band (the one bold element) ---------- */
.band{background:var(--ink);color:var(--on-ink);position:relative}
.bar{max-width:1120px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 24px;padding-top:max(14px,env(safe-area-inset-top))}
.brand{display:flex;align-items:center;gap:10px;font-weight:600;font-size:15px;letter-spacing:.01em}
.mark{width:22px;height:22px;border-radius:6px;background:conic-gradient(from 210deg,var(--ok) 0 33%,var(--run) 0 66%,#E5A84B 0);box-shadow:inset 0 0 0 5px var(--ink)}
.bar-right{display:flex;align-items:center;gap:14px}
.live{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft);white-space:nowrap}
.live-dot{width:8px;height:8px;border-radius:50%;background:var(--ink-soft);position:relative}
.live.on .live-dot{background:#3CC4C0}
.live.on .live-dot::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid #3CC4C0;opacity:0;animation:pulse 2.4s ease-out infinite}
.live.down .live-dot{background:#F07D69}
@keyframes pulse{0%{transform:scale(.6);opacity:.8}100%{transform:scale(1.8);opacity:0}}
@media (prefers-reduced-motion:reduce){.live.on .live-dot::after{animation:none}}
.lang{display:flex;background:var(--ink-2);border-radius:8px;padding:3px;gap:2px}
.lang button{border:0;background:transparent;color:var(--ink-soft);font-weight:700;font-size:12.5px;letter-spacing:.04em;padding:6px 11px;border-radius:6px;cursor:pointer}
.lang button[aria-pressed="true"]{background:var(--on-ink);color:var(--ink)}
.logout{margin:0}
.logout button{border:1px solid #2C3D57;background:transparent;color:var(--on-ink);border-radius:8px;padding:6px 12px;font-size:13px;cursor:pointer}
.logout button:hover{border-color:var(--ink-soft)}

.hero{max-width:1120px;margin:0 auto;padding:22px 24px 26px}
.hero h1{font-family:var(--font-display);font-weight:650;font-size:clamp(28px,4.4vw,44px);line-height:1.08;letter-spacing:-.02em;margin:0;max-width:22ch}
.hero h1 .tone-ok{color:#5ED6CF}.hero h1 .tone-warn{color:#F3BE69}.hero h1 .tone-bad{color:#FF9A87}
.subline{margin:10px 0 0;color:var(--ink-soft);font-size:15px;max-width:70ch}
.rail{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:22px;border-top:1px solid #22344D}
.rail a{display:block;padding:14px 16px 2px 0;color:inherit;text-decoration:none;border-right:1px solid #22344D;margin-right:16px}
.rail a:last-child{border-right:0;margin-right:0}
.rail .n{display:block;font-family:var(--font-display);font-size:28px;font-weight:600;line-height:1.1;letter-spacing:-.01em}
.rail .n small{font-size:16px;color:var(--ink-soft);font-weight:500}
.rail .l{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-soft);margin-top:4px}
.rail .sw{width:8px;height:8px;border-radius:2px;flex:none}
.rail a:hover .n{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}

.tabs{max-width:1120px;margin:0 auto;display:flex;gap:4px;padding:0 20px}
.tabs a{display:flex;align-items:center;gap:8px;padding:12px 14px 13px;color:var(--ink-soft);text-decoration:none;font-weight:600;font-size:14px;border-bottom:2px solid transparent;white-space:nowrap}
.tabs a:hover{color:var(--on-ink)}
.tabs a[aria-current="page"]{color:var(--on-ink);border-bottom-color:#5ED6CF}
.tabs .badge{font-size:11.5px;font-weight:700;background:var(--ink-2);color:var(--on-ink);border-radius:999px;padding:1px 7px;min-width:20px;text-align:center}
.tabs .badge.alert{background:#F3BE69;color:var(--ink)}
.ico{width:16px;height:16px;display:none;background:currentColor;-webkit-mask:var(--m) center/contain no-repeat;mask:var(--m) center/contain no-repeat}
.ico-overview{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cpath d='M3 12h4l3-8 4 16 3-8h4'/%3E%3C/svg%3E")}
.ico-fleet{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Crect x='3' y='4' width='18' height='12' rx='2'/%3E%3Cpath d='M8 20h8M12 16v4'/%3E%3C/svg%3E")}
.ico-pipeline{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Ccircle cx='5' cy='12' r='2.5'/%3E%3Ccircle cx='12' cy='12' r='2.5'/%3E%3Ccircle cx='19' cy='12' r='2.5'/%3E%3Cpath d='M7.5 12h2M14.5 12h2'/%3E%3C/svg%3E")}
.ico-results{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cpath d='M6 3h9l4 4v14H6z'/%3E%3Cpath d='M9 13l2 2 4-4'/%3E%3C/svg%3E")}

/* ---------- page ---------- */
.page{max-width:1120px;margin:0 auto;padding:28px 24px 64px}
.view{display:none}.view.on{display:block}
.sec{margin:0 0 34px}
.sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0 0 12px}
.sec-head h2{font-family:var(--font-display);font-size:18px;font-weight:650;letter-spacing:-.005em;margin:0}
.sec-head .aside{font-size:13px;color:var(--text-2)}
.cols{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:28px;align-items:start}

.panel{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-lg);overflow:hidden}
.row{display:flex;gap:14px;align-items:flex-start;padding:14px 18px;border-top:1px solid var(--rule)}
.row:first-child{border-top:0}
.row .grow{flex:1;min-width:0}
.row .t{font-weight:600;overflow-wrap:anywhere}
.row .d{font-size:13.5px;color:var(--text-2);margin-top:2px;overflow-wrap:anywhere}
.row .when{font-size:13px;color:var(--text-2);white-space:nowrap}
.flag{width:4px;align-self:stretch;border-radius:2px;flex:none}
.calm{display:flex;gap:12px;align-items:center;padding:18px;color:var(--text-2)}
.calm .check{width:28px;height:28px;border-radius:50%;background:var(--ok-tint);flex:none;position:relative}
.calm .check::after{content:"";position:absolute;left:10px;top:6px;width:6px;height:11px;border:solid var(--ok);border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}
.calm b{color:var(--text);display:block}

/* status chip */
.chip{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:650;padding:3px 10px 3px 8px;border-radius:999px;white-space:nowrap;line-height:1.4}
.chip::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.c-ok{background:var(--ok-tint);color:var(--ok)}.c-warn{background:var(--warn-tint);color:var(--warn)}.c-bad{background:var(--bad-tint);color:var(--bad)}.c-run{background:var(--run-tint);color:var(--run)}.c-idle{background:var(--idle-tint);color:var(--idle)}
.bg-ok{background:var(--ok)}.bg-warn{background:var(--warn)}.bg-bad{background:var(--bad)}.bg-run{background:var(--run)}.bg-idle{background:var(--idle)}

/* machines */
.machines{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}
.machine{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-lg);padding:18px 20px}
.machine-top{display:flex;align-items:center;justify-content:space-between;gap:12px}
.machine h3{margin:0;font-family:var(--font-display);font-size:20px;font-weight:650;text-transform:capitalize;letter-spacing:-.01em}
.machine .seen{font-size:13.5px;color:var(--text-2);margin-top:2px}
.fresh{margin:16px 0 4px}
.fresh-track{position:relative;height:6px;border-radius:3px;background:linear-gradient(90deg,var(--ok-tint) 0 33.3%,var(--warn-tint) 33.3% 100%)}
.fresh-fill{position:absolute;left:0;top:0;bottom:0;border-radius:3px}
.fresh-tick{position:absolute;top:-3px;width:2px;height:12px;background:var(--rule-strong)}
.fresh-scale{display:flex;justify-content:space-between;font-size:11.5px;color:var(--text-2);margin-top:6px}
.facts{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;margin:16px 0 0;font-size:14px}
.facts dt{color:var(--text-2)}
.facts dd{margin:0;overflow-wrap:anywhere}
.code{font-family:var(--font-mono);font-size:12.5px;background:var(--sunk);border:1px solid var(--rule);padding:1px 6px;border-radius:5px}
.dim{color:var(--text-2)}
.mini-machine{display:flex;align-items:center;gap:12px}
.mini-machine .nm{font-weight:650;text-transform:capitalize}

/* bus table */
.bus{width:100%;border-collapse:collapse;font-size:14px}
.bus th,.bus td{text-align:left;padding:11px 18px;border-top:1px solid var(--rule);vertical-align:top}
.bus thead th{border-top:0;font-size:12.5px;color:var(--text-2);font-weight:600;background:var(--sunk)}
.bus td.num{font-weight:650}
.scroll-x{overflow-x:auto}
.foot-note{font-size:13px;color:var(--text-2);margin:10px 2px 0}

/* pipeline */
.seg{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.seg button{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--rule-strong);background:var(--surface);border-radius:999px;padding:7px 14px;font-size:13.5px;font-weight:600;cursor:pointer;color:var(--text-2)}
.seg button .k{font-weight:700;color:var(--text)}
.seg button[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--on-ink)}
.seg button[aria-pressed="true"] .k{color:var(--on-ink)}
@media (prefers-color-scheme:dark){.seg button[aria-pressed="true"]{background:var(--on-ink);border-color:var(--on-ink);color:var(--ink)}.seg button[aria-pressed="true"] .k{color:var(--ink)}}
.strip{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-md);margin:0 0 10px;overflow:hidden}
.strip>summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 18px;padding:16px 18px;align-items:center}
.strip>summary::-webkit-details-marker{display:none}
.strip>summary:hover{background:var(--sunk)}
.strip .t{font-weight:650;font-size:15.5px;overflow-wrap:anywhere}
.strip .d{font-size:13.5px;color:var(--text-2);margin-top:3px}
.strip .r{font-size:14px;margin-top:8px;color:var(--text);max-width:80ch}
.track{display:flex;align-items:center;gap:0;margin-top:12px;max-width:440px}
.track .node{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--text-2);white-space:nowrap}
.track .node i{width:10px;height:10px;border-radius:50%;border:2px solid var(--rule-strong);background:var(--surface);flex:none}
.track .line{flex:1;height:2px;background:var(--rule-strong);margin:0 8px;min-width:14px}
.track .node.done i{background:var(--ok);border-color:var(--ok)}
.track .node.now i{background:var(--run);border-color:var(--run);box-shadow:0 0 0 4px var(--run-tint)}
.track .node.now{color:var(--text)}
.track .node.end-ok i{background:var(--ok);border-color:var(--ok);box-shadow:0 0 0 4px var(--ok-tint)}
.track .node.end-ok{color:var(--ok)}
.track .node.end-bad i{background:var(--bad);border-color:var(--bad);box-shadow:0 0 0 4px var(--bad-tint)}
.track .node.end-bad{color:var(--bad)}
.track .line.done{background:var(--ok)}
.detail{border-top:1px solid var(--rule);padding:16px 18px 18px;background:var(--sunk)}
.detail h4{font-size:13px;font-weight:650;color:var(--text-2);margin:0 0 10px}
.timeline{list-style:none;margin:0 0 18px;padding:0}
.timeline li{position:relative;padding:0 0 12px 22px;font-size:14px}
.timeline li::before{content:"";position:absolute;left:4px;top:7px;width:8px;height:8px;border-radius:50%;background:var(--surface);border:2px solid var(--run)}
.timeline li::after{content:"";position:absolute;left:8px;top:19px;bottom:0;width:2px;background:var(--rule)}
.timeline li:last-child::after{display:none}
.timeline .tm{display:block;font-size:12.5px;color:var(--text-2)}
.doc{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-md);padding:18px 20px;font-size:14.5px;line-height:1.6;max-height:70vh;overflow:auto;overflow-wrap:anywhere}
.doc>:first-child{margin-top:0}
.doc h2,.doc h3,.doc h4,.doc h5{font-family:var(--font-display);margin:18px 0 6px;line-height:1.3}
.doc h2{font-size:18px}.doc h3{font-size:16px}.doc h4,.doc h5{font-size:15px}
.doc p{margin:8px 0;max-width:78ch}
.doc ul{margin:8px 0;padding-left:22px}.doc li{margin:3px 0}
.doc code{font-family:var(--font-mono);font-size:12.5px;background:var(--sunk);padding:1px 5px;border-radius:4px}
.doc pre{font-family:var(--font-mono);font-size:12.5px;line-height:1.5;white-space:pre-wrap;margin:6px 0;background:var(--sunk);padding:2px 8px;border-radius:4px}
.meta-line{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;color:var(--text-2);margin:0 0 12px}
.empty{background:var(--surface);border:1px dashed var(--rule-strong);border-radius:var(--r-lg);padding:32px 22px;text-align:center;color:var(--text-2)}
.empty b{display:block;color:var(--text);font-size:15.5px;margin-bottom:4px}

/* ---------- login ---------- */
body.login{background:var(--ink);color:var(--on-ink);min-height:100vh;display:grid;place-items:center;padding:20px}
.login-wrap{width:100%;max-width:400px}
.login-brand{display:flex;align-items:center;gap:10px;color:var(--ink-soft);font-size:13.5px;margin-bottom:18px}
.login-brand .lang-link{margin-left:auto;color:var(--on-ink);font-weight:600;text-decoration:none;border:1px solid #2C3D57;border-radius:8px;padding:5px 11px}
.login-card{background:var(--surface);color:var(--text);border-radius:16px;padding:30px 28px;display:flex;flex-direction:column;box-shadow:0 30px 60px -30px rgba(0,0,0,.6)}
.login-card h1{font-family:var(--font-display);font-size:26px;font-weight:650;letter-spacing:-.015em;margin:0}
.login-sub{color:var(--text-2);margin:6px 0 22px;font-size:14.5px}
.login-card label{font-size:13.5px;font-weight:600;margin-bottom:6px}
.login-card input{font:inherit;font-size:16px;padding:12px 14px;border:1px solid var(--rule-strong);border-radius:10px;background:var(--sunk);color:var(--text)}
.login-card input:focus{outline:2px solid var(--run);outline-offset:0;border-color:transparent}
.login-card button{margin-top:16px;font-weight:650;font-size:15px;padding:12px;border:0;border-radius:10px;background:var(--ink);color:var(--on-ink);cursor:pointer}
@media (prefers-color-scheme:dark){.login-card button{background:var(--run);color:#0B121C}}
.login-err{background:var(--bad-tint);color:var(--bad);border-radius:8px;padding:9px 12px;font-size:14px;margin:0 0 14px}

/* ---------- responsive ---------- */
@media (max-width:860px){.cols{grid-template-columns:1fr}}
@media (max-width:720px){
  .bar{padding:12px 16px;padding-top:max(12px,env(safe-area-inset-top))}
  .brand span:last-child{display:none}
  .live #live-txt{display:none}
  .hero{padding:12px 16px 20px}
  .subline{font-size:14px}
  .rail{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rail a{padding:12px 12px 10px 0;margin-right:12px}
  .rail a:nth-child(2){border-right:0;margin-right:0}
  .rail a:nth-child(n+3){border-top:1px solid #22344D}
  .rail .n{font-size:24px}
  .page{padding:20px 16px calc(92px + env(safe-area-inset-bottom))}
  .tabs{position:fixed;left:0;right:0;bottom:0;z-index:20;background:var(--ink);padding:4px 6px calc(4px + env(safe-area-inset-bottom));gap:0;border-top:1px solid #22344D;max-width:none}
  .tabs a{flex:1;flex-direction:column;gap:3px;font-size:11.5px;padding:8px 2px 6px;border-bottom:0;border-top:2px solid transparent;position:relative}
  .tabs a[aria-current="page"]{border-top-color:#5ED6CF;border-bottom-color:transparent}
  .tabs .ico{display:block;width:20px;height:20px}
  .tabs .badge{position:absolute;top:3px;left:calc(50% + 6px);font-size:10.5px;padding:0 5px;min-width:16px}
  .row{padding:13px 14px}
  .machine{padding:16px}
  .machines{grid-template-columns:1fr}
  .strip>summary{grid-template-columns:1fr;padding:14px}
  .strip>summary .chip{justify-self:start;grid-row:1}
  .detail{padding:14px}
  .doc{padding:14px}
  .bus th,.bus td{padding:10px 12px}
  .bus .path{display:none}
}
a.row{color:inherit;text-decoration:none}
a.row:hover{background:var(--sunk)}
/* services per machine */
.svc-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:20px 0 8px;padding-top:16px;border-top:1px solid var(--rule)}
.svc-head h4{margin:0;font-size:14px;font-weight:650}
.svc-head .dim{font-size:12.5px}
.svc-none{font-size:13.5px;margin:0}
.svc{list-style:none;margin:0;padding:0}
.svc li{display:flex;gap:11px;align-items:flex-start;padding:9px 0;border-top:1px solid var(--rule)}
.svc li:first-child{border-top:0}
.svc-dot{width:9px;height:9px;border-radius:50%;flex:none;margin-top:6px}
.svc-line{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.svc-name{font-weight:600;font-size:14px}
.svc-ver{font-family:var(--font-mono);font-size:12px;color:var(--text-2)}
.svc-state{margin-left:auto;font-size:11.5px;font-weight:700;padding:1px 8px;border-radius:999px}
.svc-det{font-size:12.5px;color:var(--text-2);margin-top:2px;overflow-wrap:anywhere}
.svc-mini{display:inline-flex;gap:4px;margin-left:4px}
.svc-mini .svc-dot{margin-top:0;width:7px;height:7px}
.svc .grow{flex:1;min-width:0}

/* ---------- board (shared state) ---------- */
.board-meta{font-size:13.5px;color:var(--text-2);margin:0 0 18px}
.projs{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px}
.proj{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-lg);padding:18px 20px}
.proj-top{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.proj h3{margin:0;font-family:var(--font-display);font-size:19px;font-weight:650;letter-spacing:-.01em}
.owner{font-family:var(--font-mono);font-size:12px;background:var(--sunk);border:1px solid var(--rule);border-radius:999px;padding:2px 10px;color:var(--text-2)}
.proj-step{margin:8px 0 14px;font-size:14px;color:var(--text);max-width:70ch}
.pbar{height:6px;border-radius:3px;background:var(--idle-tint);overflow:hidden}
.pbar-fill{display:block;height:100%;width:0;background:var(--ok);border-radius:3px;transition:width .4s ease}
@media (prefers-reduced-motion:reduce){.pbar-fill{transition:none}}
.pbar-note{font-size:12.5px;color:var(--text-2);margin:6px 0 4px}
.proj-cols{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:12px}
.proj-cols h4{margin:0 0 6px;font-size:13px;font-weight:650;color:var(--text-2)}
.checks{list-style:none;margin:0;padding:0}
.checks li{position:relative;padding:3px 0 3px 20px;font-size:13.5px;line-height:1.45;overflow-wrap:anywhere}
.checks li::before{content:"";position:absolute;left:2px;top:8px;width:9px;height:9px;border-radius:50%;box-sizing:border-box}
.checks li.done::before{background:var(--ok)}
.checks li.todo::before{border:2px solid var(--rule-strong)}
.more summary{cursor:pointer;font-size:13px;color:var(--run);font-weight:600;padding:4px 0;list-style:none}
.more summary::-webkit-details-marker{display:none}
.board-none{font-size:13.5px;margin:0}

/* ---------- 3D catalog ---------- */
.cat-toolbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
.cat-toolbar .seg{margin:0}
.search{flex:1 1 280px;display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--rule-strong);border-radius:12px;padding:0 14px}
.search:focus-within{border-color:var(--run);box-shadow:0 0 0 3px var(--run-tint)}
.search input{flex:1;border:0;background:transparent;font:inherit;font-size:15px;color:var(--text);padding:11px 0;outline:none;min-width:0}
.search-ico{width:16px;height:16px;flex:none;background:var(--text-2);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-4-4'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-4-4'/%3E%3C/svg%3E") center/contain no-repeat}
.cat-meta{font-size:13px;color:var(--text-2);margin:10px 0 14px}
.cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px}
.cat-card{display:flex;flex-direction:column;text-align:left;background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-lg);padding:0;overflow:hidden;cursor:pointer;color:inherit;font:inherit}
.cat-card:hover{border-color:var(--rule-strong)}
.cat-card.is-pending{cursor:default;border-style:dashed}
.cat-media{position:relative;aspect-ratio:4/3;background:radial-gradient(120% 90% at 50% 20%,var(--surface) 0%,var(--sunk) 70%);display:grid;place-items:center;border-bottom:1px solid var(--rule)}
.cat-media img{width:100%;height:100%;object-fit:contain}
.cat-media model-viewer{position:absolute;inset:0;width:100%;height:100%;background:transparent;pointer-events:none}
.empty-media{background:repeating-linear-gradient(135deg,var(--sunk) 0 10px,var(--surface) 10px 20px)}
.cube{width:42px;height:42px;opacity:.55;background:var(--text-2);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4'%3E%3Cpath d='M12 2l9 5v10l-9 5-9-5V7z'/%3E%3Cpath d='M12 12l9-5M12 12v10M12 12L3 7'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4'%3E%3Cpath d='M12 2l9 5v10l-9 5-9-5V7z'/%3E%3Cpath d='M12 12l9-5M12 12v10M12 12L3 7'/%3E%3C/svg%3E") center/contain no-repeat}
.cat-body{padding:12px 14px 14px;display:flex;flex-direction:column;gap:3px}
.cat-name{font-weight:650;font-size:15px;overflow-wrap:anywhere}
.cat-sub{font-size:12.5px;color:var(--text-2)}
.cat-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.tag{font-size:11.5px;font-weight:650;border-radius:999px;padding:3px 9px;border:1px solid var(--rule-strong);color:var(--text-2)}
.tag-ba{border-color:var(--run);color:var(--run)}
.tag-test{border-style:dashed}
.cat-empty{grid-column:1/-1}

/* viewer (modal) */
body.modal-open{overflow:hidden}
.viewer{position:fixed;inset:0;z-index:50;background:rgba(8,14,22,.62);display:grid;place-items:center;padding:24px}
.viewer[hidden]{display:none}
.viewer-panel{background:var(--surface);color:var(--text);border-radius:18px;width:min(980px,100%);max-height:calc(100vh - 48px);overflow:auto;padding:20px 22px 22px;box-shadow:0 40px 80px -30px rgba(0,0,0,.55)}
.viewer-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}
.viewer-head h2{margin:0;font-family:var(--font-display);font-size:22px;font-weight:650;letter-spacing:-.01em}
.viewer-actions{display:flex;align-items:center;gap:10px}
.btn-close,.btn{border:1px solid var(--rule-strong);background:var(--surface);color:var(--text);border-radius:10px;padding:8px 14px;font-size:13.5px;font-weight:600;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center}
.btn:hover,.btn-close:hover{border-color:var(--text-2)}
.ba-seg{margin:14px 0 0}
.stage{margin-top:14px;height:min(58vh,520px);border-radius:14px;background:radial-gradient(120% 100% at 50% 15%,#FFFFFF 0%,#E6EBF1 75%);overflow:hidden;display:grid;place-items:center}
@media (prefers-color-scheme:dark){.stage{background:radial-gradient(120% 100% at 50% 15%,#22303F 0%,#111A26 75%)}}
.stage model-viewer{width:100%;height:100%;background:transparent}
.stage-img{max-width:100%;max-height:100%;object-fit:contain}
.viewer-hint{font-size:12.5px;margin:8px 0 0}

/* live map */
.map-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.map-bar p{margin:0;font-size:13.5px}
.map-actions{display:flex;gap:8px}
.map-actions.center{justify-content:center;margin-top:16px}
.map-frame{border:1px solid var(--rule);border-radius:var(--r-lg);overflow:hidden;background:var(--sunk);height:calc(100vh - 230px);min-height:420px}
.map-frame iframe{width:100%;height:100%;border:0;display:block}
.map-empty{padding:48px 24px;max-width:640px;margin:0 auto}
.globe{display:block;width:44px;height:44px;margin:0 auto 14px;opacity:.6;background:var(--text-2);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M3 12h18M12 3c2.5 2.7 3.8 5.7 3.8 9s-1.3 6.3-3.8 9c-2.5-2.7-3.8-5.7-3.8-9S9.5 5.7 12 3z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M3 12h18M12 3c2.5 2.7 3.8 5.7 3.8 9s-1.3 6.3-3.8 9c-2.5-2.7-3.8-5.7-3.8-9S9.5 5.7 12 3z'/%3E%3C/svg%3E") center/contain no-repeat}

/* 7 tabs: scrollable strip; on phones it sticks to the top instead of the old bottom bar */
.tabs{overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
@media (max-width:720px){
  .tabs{position:static;padding:0 8px;gap:2px;border-top:1px solid #22344D;max-width:none}
  .tabs a{flex:none;flex-direction:row;font-size:13.5px;padding:12px 12px 11px;border-top:0;border-bottom:2px solid transparent}
  .tabs a[aria-current="page"]{border-top-color:transparent;border-bottom-color:#5ED6CF}
  .tabs .badge{position:static;font-size:11px;padding:0 6px}
  .page{padding:20px 16px calc(28px + env(safe-area-inset-bottom))}
  .proj-cols{grid-template-columns:1fr}
  .projs{grid-template-columns:1fr}
  .cat-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .cat-body{padding:10px 11px 12px}
  .cat-name{font-size:14px}
  .viewer{padding:0;place-items:end stretch}
  .viewer-panel{border-radius:18px 18px 0 0;max-height:94vh;padding:16px}
  .stage{height:46vh}
  .map-frame{height:calc(100vh - 170px);min-height:360px}
}

.tabs-wrap{position:sticky;top:0;z-index:20;background:var(--ink)}

/* ---------- catalog: full list ---------- */
.cat-cats{margin:14px 0 8px}
#cat-seg{margin:0 0 4px}
.cat-h{font-family:var(--font-display);font-size:20px;font-weight:650;letter-spacing:-.01em;margin:26px 0 10px}
.cat-h:first-child{margin-top:8px}
.cat-block{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-lg);overflow:hidden}
.cat-sec{font-size:12.5px;font-weight:650;color:var(--text-2);background:var(--sunk);padding:8px 16px;border-top:1px solid var(--rule)}
.cat-sec:first-child{border-top:0}
.cat-row{display:flex;align-items:center;gap:14px;padding:10px 16px;border-top:1px solid var(--rule);cursor:pointer}
.cat-sec+.cat-row{border-top:1px solid var(--rule)}
.cat-row:hover{background:var(--sunk)}
.cat-row:focus-visible{outline:2px solid var(--run);outline-offset:-2px}
.cat-row .grow{flex:1;min-width:0}
.cr-name{font-weight:600;font-size:14.5px;overflow-wrap:anywhere}
.cr-meta{font-size:12.5px;color:var(--text-2);margin-top:1px;overflow-wrap:anywhere}
.spr-thumb{width:56px;height:56px;flex:none;border-radius:10px;background-color:var(--sunk);background-repeat:no-repeat;background-size:3200% 100%;border:1px solid var(--rule)}
.row-ico{width:56px;height:56px;flex:none;border-radius:10px;border:1px solid var(--rule);background:var(--sunk);position:relative}
.row-ico::after{content:"";position:absolute;inset:16px;background:var(--text-2);opacity:.5;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6'%3E%3Cpath d='M12 2l9 5v10l-9 5-9-5V7z'/%3E%3Cpath d='M12 12l9-5M12 12v10M12 12L3 7'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.6'%3E%3Cpath d='M12 2l9 5v10l-9 5-9-5V7z'/%3E%3Cpath d='M12 12l9-5M12 12v10M12 12L3 7'/%3E%3C/svg%3E") center/contain no-repeat}
.row-ico.ico-3d{background:var(--run-tint);border-color:transparent}
.row-ico.ico-3d::after{background:var(--run);opacity:.9}
.row-ico.ico-none{background:repeating-linear-gradient(135deg,var(--sunk) 0 6px,var(--surface) 6px 12px)}
.ref-link{font-size:12.5px;font-weight:600;color:var(--run);text-decoration:none;white-space:nowrap;padding:4px 6px}
.ref-link:hover{text-decoration:underline}
.more-wrap{display:flex;justify-content:center;margin:18px 0 6px}

/* ---------- review modal ---------- */
.viewer-panel.review{width:min(1180px,100%)}
.review-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}
.pane{min-width:0}
.pane-head{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:34px;margin-bottom:8px}
.pane-head h4,.sub-h{margin:0;font-size:13.5px;font-weight:650;color:var(--text-2)}
.sub-h{margin:20px 0 8px}
.review .stage{margin-top:0;height:min(48vh,440px)}
.ref-stage{background:var(--sunk)}
.ref-stage img{width:100%;height:100%;object-fit:contain}
.seg.mini{margin:0;gap:4px;align-items:center}
.seg.mini button{padding:5px 11px;font-size:12.5px}
.seg.mini .dim{font-size:12.5px;margin-right:4px}
.elev{margin-top:10px}
.turn{position:relative;width:100%;height:100%;cursor:grab;touch-action:pan-y;user-select:none}
.turn:active{cursor:grabbing}
.turn-l{position:absolute;inset:6%;background-repeat:no-repeat;background-size:3200% 100%;pointer-events:none}
.none-model{display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;padding:20px;max-width:300px}
.none-model .cube{margin-bottom:6px}
.review-cols{display:grid;grid-template-columns:1.2fr 1fr;gap:28px;margin-top:6px}
.getright{font-size:14px;line-height:1.6;margin:0;max-width:72ch}
.refs{margin:0;padding-left:18px;font-size:13.5px}
.refs li{margin:3px 0;overflow-wrap:anywhere}
.fb textarea{width:100%;font:inherit;font-size:14.5px;line-height:1.5;padding:11px 12px;border:1px solid var(--rule-strong);border-radius:10px;background:var(--sunk);color:var(--text);resize:vertical;min-height:96px}
.fb textarea:focus{outline:2px solid var(--run);outline-offset:0;border-color:transparent}
.fb-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.btn.primary{background:var(--ink);border-color:var(--ink);color:var(--on-ink)}
@media (prefers-color-scheme:dark){.btn.primary{background:var(--run);border-color:var(--run);color:#0B121C}}
.btn:disabled{opacity:.55;cursor:progress}
.fb-auto{display:flex;gap:12px;align-items:center;margin-top:12px;padding:12px;border:1px dashed var(--rule-strong);border-radius:10px}
.fb-auto p{margin:0;font-size:12.5px}
.btn.auto{border-color:var(--run);color:var(--run);white-space:nowrap}
.fb-msg{font-size:13.5px;margin:10px 0 0;min-height:1.2em}
.fb-msg.ok{color:var(--ok)}.fb-msg.err{color:var(--bad)}
.fb-hist{list-style:none;margin:0;padding:0;font-size:13.5px}
.fb-hist li{padding:7px 0;border-top:1px solid var(--rule)}
.fb-hist li:first-child{border-top:0}
.fb-hist .tag{margin-right:4px}
@media (max-width:860px){
  .review-grid,.review-cols{grid-template-columns:1fr}
  .review .stage{height:38vh}
}
@media (max-width:720px){
  .cat-row{padding:10px 12px;gap:10px}
  .spr-thumb,.row-ico{width:44px;height:44px}
  .row-ico::after{inset:12px}
  .ref-link{display:none}
  .cat-h{font-size:18px}
  .fb-auto{flex-direction:column;align-items:flex-start}
}
