:root{--bg:#070a10;--bg-1:#0c1119;--bg-2:#121a25;--line:#1c2634;--line-2:#2a3849;--fg:#e3e9f2;--fg-2:#a9b6c8;--dim:#6b7a8f;--accent:#4da3ff;--accent-2:#8ec5ff;--steel:#6f8fb3;--ok:#4fd1a0;--warn:#f2b84b;--err:#ff5c6c;--relay:#7c9cff;--sun:#b9cde6;--station:#5b7ea6;--mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--sans:"Zen Dots", "Chakra Petch", system-ui, sans-serif;--r:6px;--t:.18s cubic-bezier(.2,.7,.2,1)}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--fg);font:13px/1.45 var(--mono);margin:0;overflow:hidden}button,select{font:inherit;color:inherit}.tnum{font-variant-numeric:tabular-nums}.dim{color:var(--dim)}.ic{flex:none;width:16px;height:16px}.app{grid-template:"top top top"56px"left stage right"1fr"bottom bottom bottom"232px/300px 1fr 340px;height:100dvh;display:grid}.topbar{background:var(--bg-1);border-bottom:1px solid var(--line);grid-area:top;align-items:center;gap:24px;padding:0 16px;display:flex}.brand{color:var(--accent);align-items:center;gap:10px;display:flex}.brand-name{font:400 14px/1 var(--sans);letter-spacing:.06em}.brand-sub{font:400 8.5px/1 var(--sans);letter-spacing:.08em;color:var(--dim)}.clock .lbl{font:400 8px/1 var(--sans);letter-spacing:.06em;color:var(--dim);margin-bottom:3px}.clock .big{font:600 18px/1 var(--mono);color:var(--fg)}.kpis{gap:18px;margin-left:auto;display:flex}.kpi{flex-direction:column;gap:3px;min-width:56px;display:flex}.kpi .lbl{font:400 8px/1 var(--sans);letter-spacing:.06em;color:var(--dim)}.kpi .val{font:600 15px/1 var(--mono)}.kpi .val.ok{color:var(--ok)}.kpi .val.warn{color:var(--warn)}.kpi .val.err{color:var(--err)}.kpi .val.accent{color:var(--accent)}.controls{align-items:center;gap:10px;display:flex}.ctl{font:400 9px/1 var(--sans);letter-spacing:.04em;color:var(--dim);align-items:center;gap:6px;display:flex}select{background:var(--bg-2);border:1px solid var(--line-2);border-radius:var(--r);font-family:var(--mono);min-height:32px;padding:6px 8px;font-size:12px}button{border-radius:var(--r);border:1px solid var(--line-2);background:var(--bg-2);cursor:pointer;min-height:32px;font:400 9.5px/1 var(--sans);letter-spacing:.03em;transition:background var(--t), border-color var(--t), transform .12s ease;align-items:center;gap:6px;padding:0 12px;display:inline-flex}button:hover{border-color:var(--accent)}button:active{transform:scale(.97)}button:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button.primary{background:var(--accent);color:#041018;border-color:#0000}button.toggle[aria-pressed=true]{border-color:var(--relay);color:var(--relay)}button.toggle[aria-pressed=false]{color:var(--dim)}.conn{font:500 10px/1 var(--mono);letter-spacing:.1em;border:1px solid var(--line-2);color:var(--dim);border-radius:4px;padding:5px 8px}.conn.up{color:var(--ok);border-color:#1e4a35}.conn.down{color:var(--err);border-color:#4a1e24}.col{background:var(--bg-1);flex-direction:column;min-height:0;display:flex}.col.left{border-right:1px solid var(--line);grid-area:left}.col.right{border-left:1px solid var(--line);grid-area:right}.col-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;padding:10px 14px 8px;display:flex}h2{font:400 9.5px/1 var(--sans);letter-spacing:.06em;color:var(--fg-2);margin:0}.scroll{scrollbar-width:thin;scrollbar-color:var(--line-2) transparent;flex:1;min-height:0;overflow:auto}.node{border-bottom:1px solid var(--line);cursor:pointer;transition:background var(--t);grid-template-columns:1fr auto;gap:4px 10px;padding:10px 14px;display:grid}.node:hover{background:var(--bg-2)}.node.sel{box-shadow:inset 3px 0 0 var(--accent);background:#0d1a26}.node .name{font:600 12px/1.2 var(--mono);color:var(--fg);align-items:center;gap:6px;display:flex}.node .name .id{color:var(--dim);font-weight:400}.node .state{font:400 8.5px/1 var(--sans);letter-spacing:.02em;border:1px solid var(--line-2);color:var(--fg-2);border-radius:4px;align-items:center;gap:5px;padding:4px 7px;display:inline-flex}.state.running{color:var(--ok);border-color:#1e4a35}.state.link{color:var(--accent);border-color:#1b4257}.state.relay{color:var(--relay);border-color:#3d2a55}.state.degraded{color:var(--err);border-color:#4a1e24}.node .meta{font:500 10.5px/1.2 var(--mono);grid-column:1/-1;grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.node .meta div{flex-direction:column;gap:2px;display:flex}.node .meta .k{color:var(--dim);letter-spacing:.1em;font-size:9px}.node .meta .v{color:var(--fg)}.node .meta .v.warn{color:var(--warn)}.node .meta .v.err{color:var(--err)}.node .spark{grid-column:1/-1;grid-template-columns:1fr 64px;align-items:center;gap:8px;display:grid}.node svg.sl{width:100%;height:26px;display:block}.dose{background:var(--line);border-radius:2px;height:4px;overflow:hidden}.dose>i{background:var(--fg-2);height:100%;display:block}.dose>i.warn{background:var(--warn)}.dose>i.err{background:var(--err)}.stage{background:radial-gradient(ellipse at center, #0d1626 0%, var(--bg) 70%);grid-area:stage;min-width:0;min-height:0;position:relative}#globe{position:absolute;inset:0}.legend{font:400 8.5px/1 var(--sans);letter-spacing:.02em;color:var(--fg-2);border-radius:var(--r);border:1px solid var(--line);background:#05080dcc;flex-wrap:wrap;gap:6px 12px;padding:8px 10px;display:flex;position:absolute;bottom:10px;left:12px}.legend i{vertical-align:-1px;border-radius:50%;width:8px;height:8px;margin-right:5px;display:inline-block}.focus{border:1px solid var(--line-2);border-radius:var(--r);font:500 11px/1.5 var(--mono);background:#05080dd9;max-width:300px;padding:10px 12px;position:absolute;top:12px;left:12px}.focus b{color:var(--accent)}.focus button{min-height:28px;margin-top:6px;padding:0 8px;font-size:10px}.job{border-bottom:1px solid var(--line);gap:6px;padding:10px 14px;display:grid}.job .head{justify-content:space-between;align-items:center;gap:8px;display:flex}.job .id{font:600 12px/1.2 var(--mono)}.job .type{color:var(--dim);margin-left:6px;font-weight:400}.badge{font:400 8.5px/1 var(--sans);letter-spacing:.02em;border:1px solid var(--line-2);color:var(--fg-2);white-space:nowrap;border-radius:4px;align-items:center;gap:5px;padding:4px 7px;display:inline-flex}.badge:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.badge.running,.badge.complete{color:var(--ok);border-color:#1e4a35}.badge.uplinking,.badge.downlinking,.badge.staged{color:var(--accent);border-color:#1b4257}.badge.awaiting-power,.badge.awaiting-thermal,.badge.checkpointed,.badge.resuming{color:var(--warn);border-color:#4a3a1a}.badge.failed-seu,.badge.failed-deadline,.badge.node-degraded{color:var(--err);border-color:#4a1e24}.badge.offloaded-to-ground{color:var(--relay);border-color:#3d2a55}.badge.queued{color:var(--fg-2)}.job .sub{font:500 10.5px/1.3 var(--mono);color:var(--dim);flex-wrap:wrap;gap:10px;display:flex}.job .sub b{color:var(--fg-2);font-weight:500}.job .sub .late{color:var(--err)}.bar{background:var(--line);border-radius:3px;height:5px;overflow:hidden}.bar>i{background:var(--accent);height:100%;transition:width .6s linear;display:block}.bar>i.ok{background:var(--ok)}.bar>i.warn{background:var(--warn)}.job .actions{justify-content:flex-end;gap:6px;display:flex}.job .actions button{min-height:26px;padding:0 8px;font-size:10px}.job .actions button.danger{color:var(--err);border-color:#4a1e24}.job .actions button.danger.confirm{background:#3a0f16}.job.terminal{opacity:.6}.empty{color:var(--dim);font:500 11px/1.5 var(--mono);text-align:center;padding:24px 14px}.bottom{border-top:1px solid var(--line);background:var(--bg-1);grid-area:bottom;grid-template-columns:1fr 420px;min-height:0;display:grid}.timeline-wrap{border-right:1px solid var(--line);flex-direction:column;min-width:0;display:flex}.timeline{width:100%;min-height:0;font-family:var(--mono);flex:1;display:block}.timeline .row-bg{fill:#0000;cursor:pointer}.timeline .row-bg:hover{fill:#ffffff08}.timeline .row-bg.sel{fill:#3ec6ff14}.timeline .lbl{fill:var(--fg-2);font-size:10px}.timeline .tick{fill:var(--dim);font-size:9px}.timeline .grid{stroke:var(--line);stroke-width:1px}.timeline .ecl{fill:#ffffff10}.timeline .con{fill:var(--accent);opacity:.85}.timeline .now{stroke:var(--err);stroke-width:1.5px}.ticker-wrap{flex-direction:column;min-height:0;display:flex}.log{font:500 10.5px/1.5 var(--mono);padding:4px 0}.log div{border-bottom:1px solid var(--line);grid-template-columns:62px 1fr;gap:8px;padding:3px 14px;animation:.22s ease-out in;display:grid}.log .t{color:var(--dim)}.log .to{font-weight:600}.log .to.ok{color:var(--ok)}.log .to.warn{color:var(--warn)}.log .to.err{color:var(--err)}.log .to.accent{color:var(--accent)}.log .to.relay{color:var(--relay)}.log .why{color:var(--dim)}@keyframes in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}@media (width<=1280px){.app{grid-template-columns:260px 1fr 300px}.bottom{grid-template-columns:1fr 340px}.kpis{gap:12px}}@media (width<=1024px){.app{grid-template:"top""stage"60vh"left""right""bottom"/1fr;height:auto}html,body{overflow:auto}.col{max-height:50vh}.bottom{grid-template-columns:1fr}.kpis{display:none}}
