/* Google Fonts (SIL Open Font License 1.1), self-hosted: Noto Serif Display, Oswald, Share Tech Mono */
@font-face {
  font-family: 'Noto Serif Display';
  font-style: normal;
  font-weight: 700 900;
  font-stretch: 62.5% 100%;
  font-display: swap;
  src: url(./fonts/NotoSerifDisplay-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Oswald';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url(./fonts/Oswald-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Share Tech Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./fonts/ShareTechMono-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root{
  color-scheme: dark;
  --ground:#020100;
  --panel:rgba(3,1,0,.78);
  --panel-solid:#070300;
  --line:#3a1a05;
  --line-hi:#7a3a0a;
  --ink:#ffe3c4;
  --dim:#c07a3a;
  --faint:#7a4418;
  --ice:#ff8a1f;
  --amber:#ffd23a;
  --coral:#ff2b2b;
  --mint:#3dff6e;
  --violet:#35d8ff;
  --display:"Michroma","Eurostile","Arial Black",system-ui,sans-serif;
  --body:"Instrument Sans","Segoe UI",system-ui,sans-serif;
  --mono:"JetBrains Mono","SFMono-Regular",Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0;background:var(--ground);color:var(--ink);overflow:hidden;font:15px/1.5 var(--body)}
#gl{position:fixed;inset:0;width:100%;height:100%;display:block;outline:none}
#ss{position:fixed;inset:0;width:100%;height:100%;display:block;z-index:1;pointer-events:none;opacity:0;transition:opacity .45s}
#ss.on{opacity:1}
body.ss-on .hint,body.ss-on .telemetry{display:none}
.hud{position:fixed;inset:0;pointer-events:none;z-index:2}
.hud *{pointer-events:auto}
.hud .pass,.hud .pass *{pointer-events:none}

/* ---------- top bar */
.top{position:absolute;left:0;right:0;top:0;display:flex;align-items:center;gap:20px;padding:calc(14px + env(safe-area-inset-top,0px)) 22px 0}
.mark{font:10px/1 var(--display);letter-spacing:.28em;color:var(--dim);white-space:nowrap}
.mark b{color:var(--ink);font-weight:400}
.ticks{flex:1;display:flex;gap:4px;justify-content:center;min-width:0}
.tick{appearance:none;border:0;background:none;padding:8px 0;cursor:pointer;flex:0 1 54px;display:flex;flex-direction:column;gap:6px;align-items:stretch;color:var(--faint);font:9px/1 var(--mono);letter-spacing:.08em;text-align:left}
.tick i{display:block;height:2px;background:var(--line-hi);border-radius:1px;transition:background .3s, box-shadow .3s}
.tick span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.tick.on i{background:var(--ice);box-shadow:0 0 10px var(--ice)}
.tick.on{color:var(--ink)}
.tick.done i{background:#8a4210}
.tick:focus-visible{outline:1px solid var(--ice);outline-offset:2px}
.badge{font:10px/1 var(--mono);color:var(--dim);border:1px solid var(--line);padding:6px 8px;border-radius:3px;white-space:nowrap}
.badge b{color:var(--mint);font-weight:500}

/* ---------- story panel */
.panel{position:absolute;left:22px;top:84px;width:min(390px,calc(100vw - 44px));max-height:calc(100% - 300px);overflow:auto;
  background:var(--panel);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2);
  border:1px solid var(--line);padding:20px 22px 18px;
  clip-path:polygon(0 0,calc(100% - 16px) 0,100% 16px,100% 100%,16px 100%,0 calc(100% - 16px));
  transition:opacity .35s, transform .35s}
.panel.tall{max-height:calc(100% - 120px)}
.panel.hide{opacity:0;transform:translateX(-12px);pointer-events:none}
.kicker{font:10px/1.2 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--ice);display:flex;gap:10px;align-items:center}
.kicker .n{color:var(--dim)}
.panel h1,.panel h2{font-family:var(--display);font-weight:400;letter-spacing:.02em;margin:12px 0 10px;text-wrap:balance;line-height:1.25}
.panel h1{font-size:25px}
.panel h2{font-size:19px}
.panel p{margin:0 0 10px;color:#f3cfa6;max-width:62ch}
.panel p b{color:var(--ink);font-weight:600}
.panel .src{font:10.5px/1.5 var(--mono);color:var(--faint);margin-top:12px;border-top:1px solid var(--line);padding-top:10px;word-break:break-word}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);margin:14px 0 6px}
.stat{background:var(--panel-solid);padding:9px 10px 8px}
.stat .v{font:500 17px/1.1 var(--mono);font-variant-numeric:tabular-nums;color:var(--ink);white-space:nowrap}
.stat .k{font:9.5px/1.3 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--dim);margin-top:4px}
.v.ice{color:var(--ice)}.v.mint{color:var(--mint)}.v.coral{color:var(--coral)}.v.amber{color:var(--amber)}.v.violet{color:var(--violet)}
.pill{display:inline-block;font:10px/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;padding:4px 7px;border-radius:2px;border:1px solid currentColor;vertical-align:middle}
.pill.exact{color:var(--mint)}.pill.approx{color:var(--amber)}.pill.base{color:var(--dim)}.pill.rej{color:var(--coral)}
.steps{display:flex;gap:5px;margin-top:14px}
.steps i{flex:1;height:2px;background:var(--line-hi)}
.steps i.on{background:var(--ice)}
ul.tight{margin:6px 0 10px;padding-left:18px;color:#f3cfa6}
ul.tight li{margin:3px 0}
.key{font:10px/1 var(--mono);border:1px solid var(--line-hi);border-bottom-width:2px;padding:3px 5px;border-radius:3px;color:var(--ink)}

/* ---------- dock (bottom instrument) */
.dock{position:absolute;left:22px;right:22px;bottom:calc(18px + env(safe-area-inset-bottom,0px));
  background:var(--panel);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--line);padding:12px 16px 12px;
  transition:opacity .35s, transform .35s}
.dock.hide{opacity:0;transform:translateY(14px);pointer-events:none}
.dock .dh{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:8px}
.dock .dt{font:10px/1.2 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.dock .dt b{color:var(--ink);font-weight:500}
.dock .sp{flex:1}
.seg{display:inline-flex;border:1px solid var(--line-hi)}
.seg button{appearance:none;border:0;background:none;color:var(--dim);font:11px/1 var(--mono);padding:7px 10px;cursor:pointer}
.seg button.on{background:#2a1200;color:var(--ink)}
.seg button:focus-visible{outline:1px solid var(--ice)}
.seg button .sw{display:inline-block;width:8px;height:8px;margin-right:6px;vertical-align:-1px}
.legend{display:flex;flex-wrap:wrap;gap:4px 14px;font:10px/1.2 var(--mono);color:var(--dim)}
.legend span::before{content:"";display:inline-block;width:9px;height:9px;margin-right:6px;vertical-align:-1px;background:var(--c)}
canvas.gantt{display:block;width:100%;height:190px}
.dock-note{font:10px/1.4 var(--mono);color:var(--faint);margin-top:6px}

/* chain */
.chain{display:flex;align-items:stretch;gap:0;overflow-x:auto}
.node{flex:1 0 140px;padding:10px 12px;border:1px solid var(--line);background:rgba(8,3,0,.6);position:relative}
.node .nt{font:11px/1.2 var(--display);letter-spacing:.06em}
.node .nd{font:11.5px/1.4 var(--body);color:var(--dim);margin-top:6px}
.node.core{border-color:var(--ice);box-shadow:inset 0 0 24px rgba(255,138,31,.12)}
.node.core .nt{color:var(--ice)}
.wire{flex:0 0 38px;align-self:center;height:2px;background:repeating-linear-gradient(90deg,var(--ice) 0 6px,transparent 6px 12px);background-size:24px 2px;animation:flow 1s linear infinite;opacity:.7}
@keyframes flow{to{background-position:24px 0}}

/* op strip */
.ops{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px}
.op{flex:0 0 auto;border:1px solid var(--line);padding:8px 10px;min-width:92px;background:rgba(8,3,0,.6);transition:border-color .3s, background .3s}
.op .on{font:11px/1.2 var(--display);letter-spacing:.04em}
.op .os{font:10.5px/1.3 var(--mono);color:var(--dim);margin-top:5px;white-space:nowrap}
.op.lit{border-color:var(--ice);background:rgba(60,25,0,.6)}
.op.skip{opacity:.45}
.op.mm .on{color:var(--amber)}
.op.at .on{color:var(--ice)}

/* scores */
.scores{display:grid;grid-template-columns:minmax(120px,190px) 1fr 56px 56px;gap:5px 12px;align-items:center;font:11.5px/1.2 var(--mono)}
.scores .hd{color:var(--faint);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase}
.scores .ph{color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scores .ph.best{color:var(--ink)}
.scores .bar{height:8px;background:#1a0a00;position:relative}
.scores .bar i{position:absolute;left:0;top:0;bottom:0;background:var(--faint);transition:width 1.2s cubic-bezier(.2,.8,.2,1)}
.scores .bar.best i{background:var(--mint);box-shadow:0 0 12px var(--mint)}
.scores .num{text-align:right;font-variant-numeric:tabular-nums;color:var(--dim)}
.scores .num.best{color:var(--mint)}

/* race */
.race{display:grid;gap:14px}
.lane{display:grid;grid-template-columns:150px 1fr 150px;gap:16px;align-items:center}
.lane .ln{font:11px/1.3 var(--display);letter-spacing:.05em}
.lane .ln small{display:block;font:10px/1.3 var(--mono);color:var(--dim);letter-spacing:0;margin-top:3px}
.track{height:26px;border:1px solid var(--line-hi);position:relative;background:repeating-linear-gradient(90deg,transparent 0 calc(10% - 1px),var(--line) calc(10% - 1px) 10%)}
.track .fill{position:absolute;left:0;top:0;bottom:0;width:0}
.lane.a .fill{background:linear-gradient(90deg,rgba(255,43,43,.25),rgba(255,43,43,.8));box-shadow:0 0 18px rgba(255,43,43,.4)}
.lane.b .fill{background:linear-gradient(90deg,rgba(61,255,110,.25),rgba(61,255,110,.85));box-shadow:0 0 18px rgba(61,255,110,.45)}
.track .blk{position:absolute;top:100%;font:9px/1.6 var(--mono);color:var(--faint);transform:translateX(-50%)}
.timer{font:500 26px/1 var(--mono);font-variant-numeric:tabular-nums;text-align:right}
.lane.a .timer{color:var(--coral)} .lane.b .timer{color:var(--mint)}
.timer small{display:block;font-size:10px;color:var(--dim);margin-top:4px;letter-spacing:.04em}

/* timeline chart */
svg.chart{display:block;width:100%;height:230px;overflow:visible}
svg.chart text{font-family:var(--mono);fill:var(--dim)}

/* bottleneck */
.bn{display:grid;grid-template-columns:1.6fr 1fr;gap:22px}
.stack{height:30px;display:flex;border:1px solid var(--line-hi);position:relative}
.stack div{height:100%;position:relative}
.stack div span{position:absolute;left:6px;top:50%;transform:translateY(-50%);font:10px/1 var(--mono);color:#020100;white-space:nowrap;overflow:hidden;max-width:calc(100% - 8px)}
.axis{position:relative;height:36px;font:10px/1.2 var(--mono);color:var(--dim)}
.axis .m{position:absolute;top:0;transform:translateX(-50%);text-align:center;white-space:nowrap}
.axis .m::before{content:"";display:block;width:1px;height:8px;background:var(--line-hi);margin:0 auto 4px}
.axis .m.goal{color:var(--amber)} .axis .m.goal::before{background:var(--amber);height:44px;margin-top:-38px}
.cpi{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
.cpi div{background:var(--panel-solid);padding:9px 10px}
.cpi .v{font:500 18px/1 var(--mono)}
.cpi .k{font:9.5px/1.3 var(--mono);color:var(--dim);text-transform:uppercase;letter-spacing:.06em;margin-top:5px}

/* 3D labels */
#tags{position:fixed;inset:0;pointer-events:none;z-index:1;overflow:hidden}
.tag{position:absolute;left:0;top:0;will-change:transform;transition:opacity .4s}
.tag .dot{position:absolute;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border:1px solid var(--ice);background:rgba(255,138,31,.25);transform:rotate(45deg)}
.tag .txt{position:absolute;left:10px;bottom:10px;white-space:nowrap;padding:5px 8px 5px 9px;border-left:1px solid var(--ice);background:rgba(3,1,0,.72);font:11px/1.25 var(--display);letter-spacing:.05em;color:var(--ink)}
.tag .txt small{display:block;font:10px/1.35 var(--mono);color:var(--dim);letter-spacing:0;margin-top:3px}
.tag.l .txt{left:auto;right:10px;border-left:0;border-right:1px solid var(--ice);text-align:right}
.tag.amber .dot,.tag.amber .txt{border-color:var(--amber)} .tag.amber .dot{background:rgba(255,210,58,.25)}
.tag.violet .dot,.tag.violet .txt{border-color:var(--violet)} .tag.violet .dot{background:rgba(53,216,255,.25)}
.tag.mint .dot,.tag.mint .txt{border-color:var(--mint)} .tag.mint .dot{background:rgba(61,255,110,.25)}
.tag.dimtag .txt{color:var(--dim)} .tag.dimtag .dot,.tag.dimtag .txt{border-color:var(--faint)}

/* nav + hints */
.nav{position:absolute;right:22px;top:84px;display:flex;gap:6px}
.nav button{appearance:none;width:38px;height:38px;border:1px solid var(--line-hi);background:var(--panel);color:var(--ink);font:14px/1 var(--mono);cursor:pointer}
.nav button:hover{border-color:var(--ice);color:var(--ice)}
.nav button:focus-visible{outline:1px solid var(--ice);outline-offset:2px}
.hint{position:absolute;right:22px;top:132px;font:10px/1.8 var(--mono);color:var(--faint);text-align:right}
.ctl{position:absolute;right:112px;top:84px;display:flex;gap:6px}
.ctl button{height:38px}
.ctl button,.dh .spd button{appearance:none;background:var(--panel);border:1px solid var(--line-hi);color:var(--dim);font:11px/1 var(--mono);letter-spacing:.06em;padding:8px 10px;cursor:pointer}
.ctl button:hover,.dh .spd button:hover{color:var(--ink);border-color:var(--ice)}
.ctl button[aria-pressed="true"],.dh .spd button.on{background:var(--ice);border-color:var(--ice);color:var(--ground)}
.ctl button:focus-visible,.dh .spd button:focus-visible{outline:1px solid var(--ice);outline-offset:2px}
.dh .spd{display:inline-flex}.dh .spd button + button{border-left:0}
.autobar{position:absolute;left:0;right:0;top:0;height:2px;opacity:0;transition:opacity .3s}
.autobar.on{opacity:1}.autobar i{display:block;height:100%;width:0;background:var(--amber);box-shadow:0 0 8px var(--amber)}
.err{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);max-width:520px;padding:20px;border:1px solid var(--coral);background:var(--panel-solid);font:12px/1.5 var(--mono);color:var(--coral);z-index:9;display:none;white-space:pre-wrap}
.boot{position:fixed;inset:0;display:grid;place-items:center;z-index:8;background:var(--ground);transition:opacity .8s}
.boot div{font:10px/1 var(--display);letter-spacing:.4em;color:var(--dim)}
.boot.gone{opacity:0;pointer-events:none}

/* ---- phones: drawing on top, one fixed sheet (story or data) above a control bar */
.mbar{display:none}
@media (max-width:760px){
  .ticks .tick span{display:none}
  .top{padding:calc(10px + env(safe-area-inset-top,0px)) 12px 0;gap:10px}
  .badge,.hint,.mark,.nav,.ctl{display:none}
  .autobar{top:auto;bottom:calc(56px + env(safe-area-inset-bottom,0px));z-index:4}
  .mbar #mauto{width:44px;flex:0 0 auto;font-size:14px}
  .mbar #mauto[aria-pressed="true"]{background:var(--amber);border-color:var(--amber);color:var(--ground)}
  .hud .panel,.hud .dock{left:0;right:0;width:auto;top:auto;bottom:calc(56px + env(safe-area-inset-bottom,0px));height:40vh;height:40svh;max-height:none;overflow:auto;-webkit-overflow-scrolling:touch;border-left:0;border-right:0;border-bottom:0;clip-path:none;transform:none}
  .hud .panel{padding:16px 16px 18px}
  .hud .panel.hide{opacity:0;pointer-events:none}
  .hud .dock{padding:12px 14px;opacity:0;pointer-events:none}
  body.m-data .hud .dock:not(.hide){opacity:1;pointer-events:auto}
  body.m-data .hud .panel{opacity:0;pointer-events:none}
  .mbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:3;height:calc(56px + env(safe-area-inset-bottom,0px));padding:0 8px env(safe-area-inset-bottom,0px);align-items:center;gap:8px;background:var(--panel-solid);border-top:1px solid var(--line-hi)}
  .mbar button{appearance:none;background:none;border:1px solid var(--line-hi);color:var(--ink);font:12px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;height:40px;border-radius:0;padding:0 10px;touch-action:manipulation}
  .mbar #mprev,.mbar #mnext{width:52px;font-size:20px;flex:0 0 auto}
  .mtabs{flex:1;display:flex}
  .mtabs button{flex:1}
  .mtabs button + button{border-left:0}
  .mtabs button.on{background:var(--ice);color:var(--ground);border-color:var(--ice)}
  .mtabs button:disabled{opacity:.3}
  .mtabs button.pulse:not(.on){border-color:var(--ice);color:var(--ice)}
  .mcount{font:11px/1 var(--mono);color:var(--dim);min-width:44px;text-align:center}
  .panel h1{font-size:28px}.panel h2{font-size:22px}
  .stats{grid-template-columns:repeat(3,minmax(0,1fr))}
  .stat .v{font-size:15px}
  .lane{grid-template-columns:1fr;gap:6px}
  .timer{text-align:left}
  .bn{grid-template-columns:1fr}
  canvas.gantt{height:140px} canvas.gantt.sm{height:92px}
  .g2{grid-template-columns:64px 1fr}
  .rt span{min-width:0;font-size:10px}
  .scores{grid-template-columns:minmax(0,1fr) 70px 44px 44px;gap:5px 8px;font-size:10.5px}
  .card{gap:12px}.vis img{height:84px}
  .kv{grid-template-columns:max-content minmax(0,1fr);gap:5px 12px;font-size:11.5px}
  .tag .txt{font-size:10px;padding:3px 6px}.tag .txt small{display:none}
}
}

/* walkthrough card */
.wt{display:grid;grid-template-columns:210px 1fr;gap:22px;align-items:start}
.rail{list-style:none;margin:0;padding:0;font:10.5px/1.25 var(--mono);color:var(--faint);display:grid;gap:2px}
.rail li{padding:2px 0 2px 10px;border-left:2px solid var(--line)}
.rail li.done{color:var(--dim);border-color:#8a4210}
.rail li.on{color:var(--ink);border-color:var(--ice)}
.card{display:flex;gap:22px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap}
.card .ct{font:13px/1.2 var(--display);letter-spacing:.04em;color:var(--ice);margin-bottom:10px}
.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 18px;font:12.5px/1.35 var(--mono)}
.kv .k{color:var(--dim);text-transform:uppercase;font-size:10px;letter-spacing:.08em;padding-top:2px}
.kv .v{color:var(--ink)}
.vis img{height:118px;max-width:100%;image-rendering:pixelated;border:1px solid var(--line-hi);display:block}
.chips{display:flex;flex-wrap:wrap;gap:5px;max-width:420px}
.chip{border:1px solid var(--line-hi);padding:5px 8px;font:12px/1.2 var(--mono);text-align:center;color:var(--ink)}
.chip small{display:block;color:var(--mint);font-size:10.5px;margin-top:3px}
.mini{display:grid;gap:4px;font:12px/1.2 var(--mono);min-width:200px}
.mini div{display:flex;justify-content:space-between;gap:20px;color:var(--dim);border-bottom:1px solid var(--line);padding-bottom:3px}
.mini div.best{color:var(--mint)}
.nm{margin-top:14px;border-top:1px solid var(--line);padding-top:10px}
.nm-t{font:10px/1.2 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin-bottom:6px}
.nm svg{display:block;width:100%;height:auto;overflow:visible}
.nm text{font-family:var(--mono);font-size:7.5px;fill:var(--dim);text-anchor:middle}
.nm text.sub{font-size:7px;fill:var(--faint)}
.nm .nm-l{font-size:7.5px;letter-spacing:.1em;fill:var(--faint);text-anchor:start}
.nm .nm-cap{font-size:9px;fill:var(--ink);text-anchor:start}
.nm .nm-w{stroke:var(--line-hi);fill:none;stroke-width:1}
.nm-n rect{fill:none;stroke:var(--line-hi);stroke-width:1}
.nm-n.on rect{fill:var(--ice);stroke:var(--ice)} .nm-n.on text{fill:var(--ground)}
.nm-n.a rect{fill:var(--coral);stroke:var(--coral)} .nm-n.a text{fill:var(--ground)}
.nm-n.b rect{fill:var(--mint);stroke:var(--mint)} .nm-n.b text{fill:var(--ground)}
.nm-n.a.b rect{fill:var(--amber);stroke:var(--amber)}
.nm-m{font-size:9px!important;font-weight:700;opacity:0;transition:opacity .15s}
.nm-m.a{fill:var(--coral)!important} .nm-m.b{fill:var(--mint)!important}
/* journey */
.rej{border:1px solid rgba(255,43,43,.45);padding:8px 10px;margin:10px 0 4px;display:grid;gap:5px;font:11.5px/1.35 var(--mono);color:#f3cfa6}
.rej .rh{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--coral)}
.rej div{display:flex;gap:8px;align-items:baseline}
.rej b{margin-left:auto;color:var(--coral);font-weight:500;font-variant-numeric:tabular-nums}
.stamp{font:9px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--coral);border:1px solid var(--coral);padding:2px 4px;flex:0 0 auto}
.jr{display:grid;grid-template-columns:1fr 1.25fr;gap:24px}
.jr svg.chart{height:196px}
canvas.gantt.sm{height:104px}
.g2{display:grid;grid-template-columns:90px 1fr;gap:6px 10px;align-items:center}
.g2l{font:10px/1.2 var(--display);letter-spacing:.05em}
.g2l.rtl{font:9px/1 var(--mono);color:var(--faint);letter-spacing:.06em;text-transform:uppercase}
.rt{display:flex;align-items:center;gap:12px;margin:-2px 0 6px}
.rtt{flex:1;height:8px;border:1px solid var(--line-hi);position:relative}
.rtt i{position:absolute;left:0;top:0;bottom:0;width:0}
.rt.a i{background:var(--coral);box-shadow:0 0 10px var(--coral)}
.rt.b i{background:var(--mint);box-shadow:0 0 10px var(--mint)}
.rt span{font:12px/1 var(--mono);font-variant-numeric:tabular-nums;min-width:150px;text-align:right}
.rt.a span{color:var(--coral)} .rt.b span{color:var(--mint)}
.dock.real .rtt{visibility:hidden}
.metrics{display:flex;flex-wrap:wrap;gap:1px;background:var(--line);border:1px solid var(--line);margin-top:8px}
.metrics .mt{flex:1 1 120px;background:var(--panel-solid);padding:7px 10px}
.mt .k{font:9.5px/1.2 var(--mono);color:var(--dim);text-transform:uppercase;letter-spacing:.06em}
.mt .v{font:500 14px/1.3 var(--mono);margin-top:4px;white-space:nowrap}
.mt s{color:var(--faint);font-weight:400}
.mt b{color:var(--mint);font-weight:500}
.tag.coral .dot,.tag.coral .txt{border-color:var(--coral)} .tag.coral .dot{background:rgba(255,43,43,.25)}
@media (max-width:760px){ .wt,.jr{grid-template-columns:1fr} .rail{display:none} .g2{grid-template-columns:1fr} }
@media (prefers-reduced-motion:reduce){ .wire{animation:none} }

/* ================= retro-future terminal theme (appended over the base CSS) ================= */
:root{--display:"Noto Serif Display","Times New Roman",serif;--body:"Oswald","Arial Narrow",sans-serif;--mono:"Share Tech Mono",Consolas,monospace}
html,body{font:15px/1.5 var(--body);letter-spacing:.015em}
.mark{font:700 12px/1 var(--body);letter-spacing:.32em;color:var(--ice);text-shadow:0 0 8px rgba(255,138,31,.6)}
.mark b{color:var(--ink)}
.tick{font:500 9.5px/1 var(--body);letter-spacing:.12em;text-transform:uppercase}
.tick i{height:6px;border:1px solid var(--line-hi);background:transparent;border-radius:0}
.tick.on i{background:var(--ice);box-shadow:0 0 12px var(--ice)}
.tick.done i{background:var(--line-hi)}
.badge{font-family:var(--mono);border-color:var(--ice);color:var(--ice);border-radius:0}
.panel{backdrop-filter:none;-webkit-backdrop-filter:none;clip-path:none;background:rgba(3,1,0,.88);border:1px solid var(--ice);box-shadow:0 0 22px rgba(255,138,31,.12) inset;padding-top:28px}
.panel::before{content:"";position:absolute;left:0;right:0;top:0;height:9px;background:repeating-linear-gradient(-45deg,var(--ice) 0 7px,transparent 7px 14px);opacity:.9}
.kicker{display:inline-flex;background:var(--ice);color:#000;padding:4px 9px;font:600 11px/1.2 var(--body);letter-spacing:.2em}
.kicker .n{color:#000;opacity:.65}
.panel h1,.panel h2{font-family:var(--display);font-stretch:62.5%;font-weight:900;letter-spacing:0;color:#fff1e2;text-shadow:0 0 14px rgba(255,170,90,.35);line-height:1.02;margin:14px 0 12px}
.panel h1{font-size:50px}
.panel h2{font-size:33px}
.panel p{color:#f3cfa6;font-weight:300;font-size:15.5px}
.panel p b{color:var(--ice);font-weight:500}
.panel .src{font-family:var(--mono);border-top:1px dashed var(--line-hi)}
.stats{background:var(--line-hi);border-color:var(--ice)}
.stat{background:#030100}
.stat .v{font-family:var(--mono);font-size:21px;font-weight:400;text-shadow:0 0 9px currentColor}
.stat .k,.kv .k,.mt .k,.cpi .k,.dt,.legend,.scores .hd,.rej .rh{font-family:var(--body);letter-spacing:.16em;text-transform:uppercase}
.dock{backdrop-filter:none;-webkit-backdrop-filter:none;background:rgba(3,1,0,.9);border:1px solid var(--ice);padding-left:24px}
.dock::before{content:"";position:absolute;left:-1px;top:-1px;bottom:-1px;width:8px;background:repeating-linear-gradient(-45deg,var(--ice) 0 5px,#000 5px 10px)}
.dock .dt b{color:var(--ice)}
.tag .txt{font:500 12px/1.2 var(--body);letter-spacing:.13em;text-transform:uppercase;background:rgba(0,0,0,.82);text-shadow:0 0 6px rgba(255,138,31,.5)}
.tag .txt small{font-family:var(--mono);letter-spacing:.02em;text-transform:none}
.tag .dot{transform:none;border-radius:0}
.nav button{background:#000;border-color:var(--ice);color:var(--ice);font-family:var(--mono);border-radius:0}
.key{font-family:var(--mono);border-color:var(--ice);color:var(--ice);border-radius:0}
.hint{font-family:var(--mono)}
.pill{border-width:2px;font:700 11px/1 var(--body);letter-spacing:.22em;padding:6px 10px;border-radius:0}
.pill.exact{color:var(--mint);box-shadow:0 0 14px rgba(61,255,110,.35) inset;text-shadow:0 0 6px currentColor}
.pill.approx{color:var(--amber);box-shadow:0 0 14px rgba(255,210,58,.3) inset}
.pill.base{color:var(--coral)}
.stamp{font:700 10px/1 var(--body);letter-spacing:.18em;border-width:2px;padding:3px 5px;transform:rotate(-2deg);text-shadow:0 0 6px currentColor}
.rej{border-color:var(--coral);background:rgba(255,43,43,.05)}
.node{background:#030100;border-color:var(--line-hi)}
.node .nt,.op .on,.g2l,.lane .ln,.card .ct{font-family:var(--body);font-weight:600;letter-spacing:.14em;text-transform:uppercase}
.timer{font-family:var(--mono);text-shadow:0 0 10px currentColor}
.cpi .v,.mt .v{font-family:var(--mono)}
.scores,.kv,.mini,.rail,.chip{font-family:var(--mono)}
.boot div{font:600 12px/1 var(--body);letter-spacing:.5em;color:var(--ice)}
/* CRT glass over the HUD (the 3D view gets its own shader) */
.crt{position:fixed;inset:0;pointer-events:none;z-index:6;background:repeating-linear-gradient(0deg,rgba(0,0,0,.28) 0 1px,transparent 1px 3px);animation:flick .16s steps(2) infinite}
.crt::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 60%,rgba(0,0,0,.55) 100%)}
@keyframes flick{50%{opacity:.93}}
/* chapter title card */
.title-card{position:fixed;inset:0;z-index:7;background:#000;display:flex;flex-direction:column;justify-content:center;padding:0 9vw;opacity:0;pointer-events:none;transition:opacity .22s}
.title-card.on{opacity:1}
.title-card .ep{font:600 14px/1 var(--body);letter-spacing:.55em;color:var(--ice);margin-bottom:22px;text-shadow:0 0 10px rgba(255,138,31,.7)}
.title-card .tl{font-family:var(--display);font-stretch:62.5%;font-weight:900;font-size:clamp(56px,11vw,156px);line-height:.9;color:#fff3e6;text-shadow:0 0 20px rgba(255,200,150,.22)}
.title-card .sub{margin-top:26px;font:400 14px/1.4 var(--mono);color:var(--dim);letter-spacing:.08em}
/* live telemetry */
.telemetry{position:absolute;right:22px;top:200px;width:236px;font:10px/1.45 var(--mono);color:var(--mint);white-space:pre;text-shadow:0 0 6px rgba(61,255,110,.5);opacity:.7;pointer-events:none;border-top:1px solid rgba(61,255,110,.35);padding-top:6px}
@media (max-width:760px){.telemetry{display:none}.panel h1{font-size:36px}.panel h2{font-size:26px}}
@media (prefers-reduced-motion:reduce){.crt{animation:none}}

.hud .pass a.backlink{pointer-events:auto}
.backlink{font:600 11px/1 var(--body);letter-spacing:.2em;text-transform:uppercase;color:var(--ice);border:1px solid var(--line-hi);padding:7px 10px;white-space:nowrap}
.backlink:hover{border-color:var(--ice)}
