[hidden]{display:none!important}
:root{
--bg:#F1EFEA;--surface:#FAF9F6;--surface2:#EAE8E2;--ink:#1C2630;--muted:#4A5A68;--line:#D8D5CD;
--pri:#C2410C;--pri-d:#8A2E08;--amber:#C2410C;--amber-d:#8A2E08;--ok:#0F766E;--ok-d:#0A534D;--bad:#B42318;--bad-d:#7F1A11;
--okbg:#DDF1EE;--badbg:#FBE5E2;--lock:#D8D5CD;--lock-d:#B3AFA5;--term:#0C1116;--termink:#C8E1D2;--tape:#111820;--tapeink:#FFFFFF;
--mat:linear-gradient(transparent 23px,rgba(14,26,36,.03) 24px) 0 0/100% 24px;
color-scheme:light}
html{height:100%}body{min-height:100%}
body{background:var(--bg);color:var(--ink);font:15px/1.5 "Atkinson Hyperlegible Next",system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-tap-highlight-color:transparent}
.disp{font-family:"Atkinson Hyperlegible Next","Atkinson Hyperlegible Next",system-ui,sans-serif;letter-spacing:.03em}
.mono{font-family:"JetBrains Mono",ui-monospace,Consolas,monospace}
button{font:inherit;color:inherit;cursor:pointer}
button:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--pri);outline-offset:2px}
.wrap{max-width:600px;margin:0 auto;padding-inline:16px}
.tape{display:inline-block;background:var(--tape);color:var(--tapeink);font:600 13px/1 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:0;text-transform:none;padding:5px 9px 4px;border-radius:2px}
/* top bar */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:6;background:var(--surface);border-bottom:1px solid var(--line)}
.top .wrap{display:flex;align-items:center;gap:12px;padding-block:9px}
.seg{display:flex;border:1.5px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface)}
.seg button{border:0;background:none;padding:5px 10px;font:600 14px "JetBrains Mono",monospace;color:var(--muted)}
.seg button+button{border-left:1.5px solid var(--line)}
.seg button[aria-pressed="true"]{background:var(--ink);color:var(--surface)}
/*old*/.stat{display:flex;align-items:center;gap:5px;font:600 18px "Atkinson Hyperlegible Next",sans-serif;font-variant-numeric:tabular-nums}
.stat svg{width:19px;height:19px}
.stat small{font:500 10px "JetBrains Mono",monospace;color:var(--muted);letter-spacing:0}
.spacer{flex:1}
.ring{width:28px;height:28px}
/* tabs */
.tabs{position:fixed;left:0;right:0;bottom:0;z-index:6;background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom,0px)}
.tabs .wrap{display:grid;grid-template-columns:repeat(5,1fr);gap:2px;padding-block:5px}
.tabs button{border:0;background:none;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0;border-radius:3px;font:600 12.5px "Atkinson Hyperlegible Next",sans-serif;letter-spacing:0;text-transform:none;color:var(--muted);position:relative;min-height:44px}
.tabs button svg{width:21px;height:21px}
.tabs button[aria-current="page"]{color:var(--pri)}
.tabs button[aria-current="page"]::after{content:"";position:absolute;top:-7px;left:25%;right:25%;height:3px;background:var(--pri)}
.badge{position:absolute;top:1px;right:calc(50% - 24px);background:var(--bad);color:#fff;border-radius:2px;font:600 10px "JetBrains Mono",monospace;min-width:16px;height:16px;line-height:16px;padding:0 3px}
main{padding-bottom:96px}
/* path: a vertical cable run with jacks on it */
.brand{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:20px 0 4px}
.brand b{font:600 26px/1.1 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:-.01em}
.unit{margin-top:22px}
.startcap{display:flex;justify-content:center;padding:14px 0 6px}
.ubanner{display:grid;grid-template-columns:8px 1fr auto;background:var(--surface);border:2px solid var(--ink);border-radius:3px;overflow:hidden}
.ubanner::before{content:"";background:var(--uc)}
.ubanner>div{padding:10px 12px}
.ubanner .eb{font:600 11px "JetBrains Mono",monospace;letter-spacing:0;color:var(--muted);text-transform:none}
.ubanner h2{margin:3px 0 0;font:600 20px/1.2 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:-.01em;text-wrap:balance}
.ubanner .w{font:600 26px/1 "Atkinson Hyperlegible Next",sans-serif;text-align:right;white-space:nowrap;border-left:2px solid var(--ink);display:flex;flex-direction:column;justify-content:center}
.ubanner .w small{display:block;font:500 9.5px "JetBrains Mono",monospace;letter-spacing:0;color:var(--muted);margin-top:3px}
.path{position:relative;display:flex;flex-direction:column;gap:14px;padding:22px 0 8px}
.path::before{content:"";position:absolute;left:50%;top:0;bottom:0;width:6px;margin-left:-3px;background:var(--uc);opacity:.35;border-radius:3px}
.nodewrap{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:14px;position:relative}
.nodewrap .side{display:flex;flex-direction:column;gap:3px}
.nodewrap .side.l{align-items:flex-end;text-align:right}
.nodewrap .side.r{align-items:flex-start;text-align:left}
.node{position:relative;width:62px;height:58px;border:2.5px solid var(--ink);border-radius:5px;background:var(--uc);color:#fff;display:grid;place-items:center;clip-path:polygon(0 0,100% 0,100% 78%,74% 78%,74% 100%,26% 100%,26% 78%,0 78%);padding-bottom:10px;box-sizing:border-box;transition:transform .08s}
.node:active{transform:scale(.95)}
.node svg{width:24px;height:24px}
.node.locked{background:var(--surface2);color:var(--muted)}
.node.lab{clip-path:none;border-radius:50%;width:56px;height:56px;padding-bottom:0;background:var(--surface);color:var(--uc);border-color:var(--uc);border-width:3px}
.jackw{position:relative;display:inline-block}
.pled{position:absolute;top:-5px;right:-5px;width:11px;height:11px;border-radius:50%;border:2px solid var(--bg);background:var(--lock);z-index:1}
.pled.go{background:#2DBE6C}
.pled.blink{background:var(--pri);animation:blink 1s steps(2,start) infinite}
@keyframes blink{to{visibility:hidden}}
.nlabel{font-size:13px;font-weight:500;line-height:1.25;max-width:150px}
.nlabel.dim{color:var(--muted)}
.grade{display:inline-block;font:600 11px/1 "JetBrains Mono",monospace;padding:3px 5px;border-radius:2px;border:1.5px solid currentColor}
.grade.g3{color:var(--ok)}.grade.g2{color:var(--pri)}.grade.g1{color:var(--muted)}
.tip{font:600 11px/1 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:0;background:var(--pri);color:#fff;padding:4px 7px 3px;border-radius:2px}
/* cards / generic */
.h1{font:600 26px/1.15 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:-.01em;margin:22px 0 6px;text-wrap:balance}
.sub{color:var(--muted);margin:0 0 16px}
.card{background:var(--surface);border:0;box-shadow:0 0 0 1px var(--line);border-radius:10px;padding:16px}
.grid{display:grid;gap:10px}
.labcard{display:flex;gap:14px;align-items:center;text-align:left;background:var(--surface);border:0;box-shadow:0 0 0 1px var(--line);border-radius:10px;padding:12px;width:100%}
.labcard:hover{background:var(--surface2)}
.labcard .ic{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;background:var(--uc);color:#fff;flex:none}
.labcard .ic svg{width:24px;height:24px}
.labcard b{display:block;font:500 16px "Atkinson Hyperlegible Next",sans-serif}
.labcard span{color:var(--muted);font-size:13px}
.labcard .done{margin-left:auto;flex:none}
.btn{border:2px solid var(--pri);border-radius:12px;padding:12px 18px;font:600 18px "Atkinson Hyperlegible Next",sans-serif;letter-spacing:0;text-transform:none;background:var(--pri);color:#fff;min-height:48px}
.btn:hover:not(:disabled){filter:brightness(1.08)}
.btn:active:not(:disabled){filter:brightness(.9)}
.btn:disabled{background:transparent;border-color:var(--line);color:var(--muted);cursor:not-allowed}
.btn.ok{background:var(--ok);border-color:var(--ok)}
.btn.bad{background:var(--bad);border-color:var(--bad)}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--ink)}
.btn.wide{width:100%}
.row{display:flex;gap:10px;flex-wrap:wrap}
/* stage */
#stage{position:fixed;inset:0;z-index:20;background:var(--bg);display:flex;flex-direction:column;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
.shead{display:flex;align-items:center;gap:12px;padding:12px 16px;max-width:680px;width:100%;margin:0 auto;box-sizing:border-box}
.xbtn{border:0;background:none;padding:6px;border-radius:3px;color:var(--muted);display:grid;min-width:44px;min-height:44px;place-items:center}
.xbtn svg{width:24px;height:24px}
.pbar{flex:1;height:12px;border-radius:99px;overflow:hidden;background:var(--line)}
.pbar i{display:block;height:100%;background:var(--ok);border-radius:99px;transition:width .35s}
.hearts{display:flex;align-items:center;gap:3px}
.hearts i{width:7px;height:18px;border-radius:1px;background:var(--ok)}
.hearts i.off{background:var(--lock)}
.hearts span{font:500 10px "JetBrains Mono",monospace;color:var(--muted);letter-spacing:0;margin-left:4px}
.sbody{flex:1;overflow-y:auto;overscroll-behavior:contain}
.sbody .wrap{padding-block:8px 24px;max-width:680px}
.qtag{font:500 11px "JetBrains Mono",monospace;letter-spacing:0;text-transform:none;color:var(--muted);margin:6px 0}
.qtext{font:500 21px/1.3 "Atkinson Hyperlegible Next",sans-serif;margin:0 0 18px;text-wrap:balance}
.ticket{background:var(--surface);border:1.5px solid var(--line);border-left:5px solid var(--pri);border-radius:12px;padding:10px 14px;margin-bottom:12px;font-size:14.5px}
.ticket .tno{font:600 11px "JetBrains Mono",monospace;color:var(--pri);letter-spacing:0;display:block;margin-bottom:3px}
.opts{display:grid;gap:8px}
.opt{display:flex;gap:12px;align-items:center;text-align:left;width:100%;background:var(--surface);border:2px solid var(--line);border-radius:12px;padding:12px 14px;font-size:15.5px;line-height:1.35;min-height:52px}
.opt:hover:not(:disabled){border-color:var(--muted)}
.opt .k{flex:none;width:24px;height:24px;border:1.5px solid var(--muted);border-radius:2px;display:grid;place-items:center;font:600 12px "JetBrains Mono",monospace;color:var(--muted)}
.opt[aria-pressed="true"]{border-color:var(--pri);background:color-mix(in srgb,var(--pri) 8%,var(--surface))}
.opt[aria-pressed="true"] .k{border-color:var(--pri);background:var(--pri);color:#fff}
.opt.right{border-color:var(--ok);background:var(--okbg)}
.opt.wrong{border-color:var(--bad);background:var(--badbg)}
.opt:disabled{cursor:default}
.tinput{width:100%;box-sizing:border-box;font:500 18px "JetBrains Mono",monospace;padding:14px;border-radius:12px;border:2px solid var(--ink);background:var(--term);color:#E6F2EA;caret-color:#7FD1A4}
.tinput::placeholder{color:#6B7C88}
.tinput:focus{border-color:var(--pri);outline:none}
.mgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.mcol{display:grid;gap:8px;align-content:start}
.tile{background:var(--surface);border:2px solid var(--line);border-radius:12px;padding:12px 10px;font-size:14.5px;font-weight:500;min-height:52px;text-align:center;line-height:1.25}
.tile[aria-pressed="true"]{border-color:var(--pri);background:color-mix(in srgb,var(--pri) 8%,var(--surface))}
.tile.matched{opacity:.4;border-color:var(--ok);cursor:default}
.tile.shake{animation:shake .35s;border-color:var(--bad)}
@keyframes shake{25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
.slots{min-height:64px;border:2px dashed var(--line);border-radius:3px;display:flex;flex-direction:column;gap:6px;padding:8px;margin-bottom:14px}
.slots .tile{text-align:left;display:flex;gap:10px;align-items:center;min-height:0}
.slots .tile .n{font:600 12px "JetBrains Mono",monospace;color:var(--pri);flex:none}
.bank{display:flex;flex-wrap:wrap;gap:8px}
.bank .tile{flex:1 1 45%;min-height:0}
.bank .tile.used{visibility:hidden}
.empty{color:var(--muted);font-size:13.5px;padding:10px 2px}
/* resolve bar */
.sfoot{border-top:1px solid var(--line);background:var(--surface)}
.sfoot .wrap{max-width:680px;padding-block:14px;display:flex;flex-direction:column;gap:10px}
.sfoot.right{background:var(--okbg);border-top-color:var(--ok)}
.sfoot.wrong{background:var(--badbg);border-top-color:var(--bad)}
.fbh{font:600 24px/1 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:0;text-transform:none;display:flex;align-items:center;gap:10px}
.fbh .stamp{border:2.5px solid currentColor;padding:4px 8px 2px;border-radius:2px;transform:rotate(-3deg)}
.fbh small{font:500 12px "JetBrains Mono",monospace;letter-spacing:0;text-transform:none;opacity:.85}
.sfoot.right .fbh{color:var(--ok)}
.sfoot.wrong .fbh{color:var(--bad)}
.fbx{font-size:14.5px;margin:0;max-width:65ch}
.fba{font-weight:500}
/* results */
.res{text-align:center;padding-top:30px}
.res .big{font:600 30px/1.15 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:-.01em;margin:12px 0 4px;text-wrap:balance}
.stampbig{width:112px;height:112px;margin:0 auto;border:4px solid var(--c,var(--pri));color:var(--c,var(--pri));border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;transform:rotate(-8deg)}
.stampbig b{font:600 54px/1 "Atkinson Hyperlegible Next",sans-serif}
.stampbig span{font:600 10px "JetBrains Mono",monospace;letter-spacing:0}
.tiles3{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin:22px 0;border:0;box-shadow:0 0 0 1px var(--line);border-radius:10px;background:var(--surface);overflow:hidden}
.rt+.rt{border-left:1px solid var(--line)}
.rt b{display:block;font:600 10.5px "JetBrains Mono",monospace;letter-spacing:0;color:var(--muted);padding:8px 4px 0;text-transform:none}
.rt span{display:block;font:600 26px "Atkinson Hyperlegible Next",sans-serif;padding:2px 4px 10px;font-variant-numeric:tabular-nums;color:var(--c)}
.medal{width:96px;height:96px;margin:0 auto}
/* stats */
.dbar{display:grid;grid-template-columns:1fr auto;gap:4px 10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}
.dbar:last-child{border-bottom:0}
.dbar .nm{font-weight:500;font-size:14px}
.dbar .pc{font:600 13px "JetBrains Mono",monospace;font-variant-numeric:tabular-nums}
.dbar .tr{grid-column:1/-1;height:8px;background:var(--surface2);border:1px solid var(--line)}
.dbar .tr i{display:block;height:100%;background:var(--uc)}
.dbar .meta{grid-column:1/-1;font-size:12px;color:var(--muted)}
.kpis{display:grid;grid-template-columns:repeat(2,1fr);gap:0;border:0;box-shadow:0 0 0 1px var(--line);border-radius:10px;background:var(--surface);overflow:hidden}
.kpi{padding:10px 14px}
.kpi:nth-child(even){border-left:1px solid var(--line)}
.kpi:nth-child(n+3){border-top:1px solid var(--line)}
.kpi b{display:block;font:600 30px/1.05 "Atkinson Hyperlegible Next",sans-serif;font-variant-numeric:tabular-nums}
.kpi span{font:500 10.5px "JetBrains Mono",monospace;color:var(--muted);letter-spacing:0}
.gauge{display:flex;align-items:center;gap:16px}
.gauge svg{width:110px;height:110px;flex:none}
.note{font-size:12.5px;color:var(--muted)}
.chip{display:inline-block;font:600 11px "JetBrains Mono",monospace;letter-spacing:0;padding:2px 6px;border-radius:2px;border:1.5px solid var(--line);color:var(--muted);text-transform:none}
.sync{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:4px}
.sync svg{width:16px;height:16px}
/* ===== labs ===== */
.labhead{font:600 20px/1.2 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:-.01em;margin:4px 0 2px}
.labtip{color:var(--muted);font-size:14px;margin:0 0 14px;max-width:65ch}
/* rj45 */
.rjwrap{display:grid;gap:14px}
.rjsvg{width:100%;max-width:420px;margin:0 auto;display:block}
.rjsvg .pin{cursor:pointer}
.wbank{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.wchip{border:2px solid var(--line);border-radius:4px;background:var(--surface);padding:6px;display:flex;flex-direction:column;align-items:center;gap:4px;font-size:11.5px;font-weight:500;line-height:1.15;text-align:center}
.wchip .sw{width:100%;height:18px;border-radius:5px}
.wchip.used{opacity:.25;pointer-events:none}
.tester{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;background:#1D262D;border-radius:4px;padding:12px;color:#9FB0BA;font:500 11px "JetBrains Mono",monospace}
.tester .col{display:flex;flex-direction:column;gap:5px;align-items:center}
.led{width:14px;height:14px;border-radius:50%;background:#34424C;box-shadow:inset 0 -2px 0 rgba(0,0,0,.3)}
.led.on{background:#3DDC84;box-shadow:0 0 10px #3DDC84}
.led.err{background:#FF5A52;box-shadow:0 0 10px #FF5A52}
.refbox{display:flex;gap:3px;justify-content:center;margin-top:4px}
.refbox i{width:22px;height:40px;border-radius:3px;border:1px solid rgba(0,0,0,.15)}
/* patch */
.patch{position:relative;user-select:none;touch-action:none;display:flex;flex-direction:column;justify-content:space-between;gap:120px;padding:4px 0 8px}
.prow{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;position:relative;z-index:2}
.plug{background:var(--surface);border:2px solid var(--line);border-radius:4px;padding:10px 6px;text-align:center;font-weight:500;font-size:13.5px;line-height:1.2;min-height:48px;display:flex;align-items:center;justify-content:center;position:relative}
.plug.top{font:600 16px "Atkinson Hyperlegible Next",sans-serif;border-bottom-width:6px}
.plug.bot{border-top-width:6px}
.plug .jack{position:absolute;left:50%;width:18px;height:18px;margin-left:-9px;border-radius:50%;background:var(--pc,var(--lock));border:3px solid var(--surface);box-shadow:0 0 0 2px var(--line)}
.plug.top .jack{bottom:-14px}
.plug.bot .jack{top:-14px}
.plug.on{border-color:var(--pc)}
.plug.sel{outline:3px solid var(--pc);outline-offset:2px}
.plug.shake{animation:shake .35s;border-color:var(--bad)}
.cables{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none;overflow:visible}
.cables path{fill:none;stroke-linecap:round}
/* pc build */
.pcsvg{width:100%;max-width:440px;margin:0 auto;display:block;touch-action:manipulation}
.pcslot{cursor:pointer}
.parts{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.part{border:2px solid var(--line);border-radius:4px;background:var(--surface);padding:10px;font-weight:500;font-size:13.5px;text-align:left;display:flex;align-items:center;gap:8px}
.part[aria-pressed="true"]{border-color:var(--pri);background:color-mix(in srgb,var(--pri) 9%,var(--surface))}
.part.placed{opacity:.3;pointer-events:none;text-decoration:line-through}
.toast{border-radius:4px;padding:10px 14px;font-size:14px;background:var(--surface2);border:1px solid var(--line)}
.toast.ok{background:var(--okbg);border-color:transparent}
.toast.bad{background:var(--badbg);border-color:transparent}
.post{background:#0B1F6B;color:#E6E9F5;font:13px/1.5 "JetBrains Mono",monospace;border-radius:4px;padding:14px;white-space:pre-wrap}
/* terminal */
.term{background:var(--term);color:var(--termink);border-radius:4px;overflow:hidden;border:1px solid #000}
.term .tbar{background:#1A232B;color:#8FA3AF;font:500 12px "JetBrains Mono",monospace;padding:8px 12px;display:flex;gap:6px;align-items:center}
.term .tbar i{width:10px;height:10px;border-radius:50%;background:#3A4751}
.term pre{margin:0;padding:12px;font:13px/1.45 "JetBrains Mono",monospace;white-space:pre-wrap;word-break:break-word;height:300px;overflow-y:auto}
.term .in{display:flex;gap:8px;align-items:center;padding:0 12px 12px;font:13px "JetBrains Mono",monospace}
.term .in span{color:#7FD1A4;flex:none;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.term .in input{flex:1;min-width:0;background:transparent;border:0;color:#fff;font:inherit;caret-color:#7FD1A4}
.term .in input:focus{outline:none}
.mission{display:flex;gap:10px;align-items:flex-start}
.mission .num{flex:none;width:30px;height:30px;border-radius:10px;background:var(--pri);color:#fff;display:grid;place-items:center;font:600 13px "Atkinson Hyperlegible Next",sans-serif}
.mlist{display:flex;gap:4px;flex-wrap:wrap;margin-top:8px}
.mlist i{width:18px;height:6px;border-radius:9px;background:var(--lock)}
.mlist i.d{background:var(--ok)}
.mlist i.c{background:var(--pri)}
.hint{font:13px "JetBrains Mono",monospace;background:var(--surface2);border:1px dashed var(--line);padding:6px 10px;border-radius:8px;display:inline-block}
.linkbtn{border:0;background:none;color:var(--pri);font-weight:500;padding:0;font-size:13.5px;text-decoration:underline;text-underline-offset:3px}
/* ticket sim */
.tkact{display:grid;gap:8px}
.tkbtn{display:flex;align-items:center;gap:10px;text-align:left;width:100%;border:2px solid var(--line);border-radius:4px;background:var(--surface);padding:10px 12px;font-weight:500;font-size:14px}
.tkbtn svg{width:18px;height:18px;flex:none;color:var(--muted)}
.tkbtn.ran{border-bottom-width:2px;background:var(--surface2)}
.finding{margin:-2px 0 4px 12px;padding:8px 12px;border-left:3px solid var(--pri);background:var(--surface);border-radius:0 10px 10px 0;font:12.5px/1.45 "JetBrains Mono",monospace;white-space:pre-wrap}
.clock{font:600 14px "Atkinson Hyperlegible Next",sans-serif;color:var(--muted);font-variant-numeric:tabular-nums}
.sech{font:600 12px "Atkinson Hyperlegible Next",sans-serif;letter-spacing:0;text-transform:none;color:var(--muted);margin:18px 0 8px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media (max-width:420px){.qtext{font-size:19px}.ubanner h2{font-size:19px}.patch{gap:100px}.plug{font-size:12px;padding:8px 4px}.plug.top{font-size:14px}}
/* map: themed zones along a cable trail */
.trail{position:relative;margin:8px -16px 0}
.bcable{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}
.zone{position:absolute;left:10px;right:10px;border-radius:22px;background:color-mix(in srgb,var(--uc) 9%,var(--bg));border:1.5px solid color-mix(in srgb,var(--uc) 22%,transparent);overflow:hidden;z-index:0}
.zone::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 1px 1px,color-mix(in srgb,var(--uc) 22%,transparent) 1px,transparent 1.6px) 0 0/16px 16px;opacity:.55}
.zart{position:absolute;width:132px;color:var(--uc);opacity:.22}
.zart.r{right:12px;top:22%}.zart.l{left:12px;top:58%}
.zart.small{width:84px;opacity:.2}
.zsign{position:absolute;left:24px;right:24px;transform:translateY(-50%);z-index:3;display:flex;align-items:center;gap:12px;background:var(--surface);border-radius:10px;padding:10px 12px;box-shadow:0 1px 0 color-mix(in srgb,var(--uc) 30%,transparent),0 6px 16px rgba(28,38,48,.08)}
.zsign .zn{flex:none;width:40px;height:40px;border-radius:11px;background:var(--uc);color:#fff;display:grid;place-items:center;font:600 22px/1 "Atkinson Hyperlegible Next",sans-serif}
.zsign .zt{flex:1;min-width:0}
.zsign b{display:block;font:600 17px/1.2 "Atkinson Hyperlegible Next","Atkinson Hyperlegible Next",sans-serif}
.zsign .zt span{font-size:12.5px;color:var(--muted)}
.zsign .zok{flex:none;width:28px;height:28px;border-radius:50%;background:var(--ok);color:#fff;display:grid;place-items:center}
.zsign .zok svg{width:16px;height:16px}
.btile{position:absolute;transform:translate(-50%,-50%) rotate(var(--r));z-index:2;width:58px;height:58px;border-radius:16px;border:0;background:var(--uc);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:0;box-shadow:0 4px 0 color-mix(in srgb,var(--uc) 70%,#000),0 8px 14px rgba(28,38,48,.12);transition:transform .12s}
.btile:hover{transform:translate(-50%,-52%) rotate(var(--r))}
.btile:active{transform:translate(-50%,-46%)}
.btile .bn{font:600 24px/1 "Atkinson Hyperlegible Next",sans-serif}
.btile .bi svg{width:18px;height:18px}
.btile.mile{width:66px;height:66px;border-radius:12px}
.btile.mile .bn{font-size:28px}
.btile.done{background:var(--surface);color:var(--uc);box-shadow:inset 0 0 0 3px var(--uc),0 4px 0 color-mix(in srgb,var(--uc) 40%,var(--line))}
.btile.locked{background:var(--surface);color:var(--muted);box-shadow:inset 0 0 0 2px var(--line),0 3px 0 var(--line)}
.btile.locked .bn{font-size:20px}
.btile.lab{width:50px;height:50px;border-radius:50%;background:var(--surface);color:var(--uc);box-shadow:inset 0 0 0 3px var(--uc),0 3px 0 color-mix(in srgb,var(--uc) 40%,var(--line))}
.btile.lab.done{background:var(--uc);color:#fff}
.btile.quiz{width:84px;height:66px;border-radius:10px;background:var(--ink);color:#fff;box-shadow:0 4px 0 #000,0 8px 16px rgba(28,38,48,.18)}
.btile.quiz .bi svg{width:20px;height:20px;color:var(--uc)}
.btile.quiz .ql{font:600 12px/1 "Atkinson Hyperlegible Next",sans-serif;letter-spacing:0;text-transform:none;margin-top:3px}
.btile.quiz.locked{background:var(--surface);color:var(--muted);box-shadow:inset 0 0 0 2px var(--line),0 3px 0 var(--line)}
.btile.quiz.locked .bi svg{color:var(--muted)}
.btile.quiz.done{background:var(--ok);box-shadow:0 4px 0 var(--ok-d)}
.btile.quiz.done .bi svg{color:#fff}
.btile.exam{width:86px;height:86px;border-radius:50%;background:var(--ink);color:#fff;box-shadow:0 5px 0 #000,0 10px 18px rgba(28,38,48,.2)}
.btile.exam .bi svg{width:34px;height:34px}
.btile .bg{position:absolute;bottom:-7px;right:-7px;font:600 11px/1 "Atkinson Hyperlegible Next",sans-serif;background:var(--surface);color:var(--ok);border-radius:8px;padding:3px 5px;box-shadow:0 1px 3px rgba(0,0,0,.15)}
.btile.sel{outline:3px solid var(--ink);outline-offset:4px}
.you{position:absolute;transform:translate(-50%,-50%);z-index:4;width:34px;height:34px;border-radius:50%;background:var(--av);color:#fff;border:3px solid var(--surface);box-shadow:0 3px 8px rgba(0,0,0,.2);display:grid;place-items:center;font:600 12px/1 "Atkinson Hyperlegible Next",sans-serif;animation:bob 1.6s ease-in-out infinite;pointer-events:none}
.you::after{content:"";position:absolute;bottom:-8px;left:50%;margin-left:-5px;border:5px solid transparent;border-top-color:var(--surface)}
@keyframes bob{50%{transform:translate(-50%,-62%)}}
.pill{display:inline-block;font:600 12px/1 "Atkinson Hyperlegible Next",sans-serif;padding:5px 9px;border-radius:99px;background:var(--pri);color:#fff}
.pill.ok{background:var(--ok)}
.pill.mute{background:var(--surface2);color:var(--muted)}
.stepcard{position:sticky;bottom:calc(76px + env(safe-area-inset-bottom,0px));z-index:5;box-shadow:0 -2px 0 color-mix(in srgb,var(--uc) 60%,transparent),0 10px 30px rgba(28,38,48,.16);margin-top:12px;background:var(--surface);border:0;border-radius:12px;padding:12px 14px;display:flex;flex-direction:column;gap:6px}
.stepcard .sn{font:600 19px/1.25 "Atkinson Hyperlegible Next",sans-serif}
.stepcard .btn{margin-top:4px}
/* settings */
.avatar{flex:none;width:30px;height:30px;border-radius:50%;border:2px solid var(--ink);background:var(--av);color:#fff;font:600 12px/1 "JetBrains Mono",monospace;display:grid;place-items:center;padding:0}
.avatar[aria-current="page"]{outline:3px solid var(--pri);outline-offset:2px}
.avatar.big{width:44px;height:44px;font-size:15px}
.slist{display:flex;flex-direction:column;border:0;box-shadow:0 0 0 1px var(--line);border-radius:10px;background:var(--surface);overflow:hidden;margin-top:12px}
.sitem{display:flex;align-items:center;gap:12px;text-align:left;border:0;background:none;padding:14px;min-height:60px}
.sitem+.sitem{border-top:1.5px solid var(--line)}
.sitem:hover{background:var(--surface2)}
.sitem .si{width:34px;height:34px;border-radius:3px;background:var(--surface2);display:grid;place-items:center;flex:none;color:var(--ink)}
.sitem .si svg{width:18px;height:18px}
.sitem b{display:block;font-size:15px}
.sitem span span{font-size:12.5px;color:var(--muted)}
.sitem>span:nth-child(2){flex:1}
.chev{width:18px;height:18px;color:var(--muted)}
.backbtn{display:inline-flex;align-items:center;gap:4px;border:0;background:none;color:var(--pri);font-weight:500;padding:14px 0 0;min-height:44px}
.backbtn svg{width:18px;height:18px}
.spanel{background:var(--surface);border:0;box-shadow:0 0 0 1px var(--line);border-radius:10px;padding:6px 14px 14px}
.srow{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.srow:last-of-type{border-bottom:0}
.srow .sl{font-weight:500;font-size:14.5px}
.srow .note{margin-top:2px;max-width:40ch}
.sc{display:flex;align-items:center}
.sinput{font:500 15px "Atkinson Hyperlegible Next",sans-serif;padding:9px 10px;border:1.5px solid var(--line);border-radius:3px;background:var(--bg);color:var(--ink);min-height:40px;box-sizing:border-box}
.sinput:focus{outline:none;border-color:var(--pri)}
.switch{position:relative;width:46px;height:26px;border-radius:13px;border:2px solid var(--ink);background:var(--lock);padding:0;flex:none}
.switch i{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--surface);border:1.5px solid var(--ink);transition:left .12s}
.switch[aria-checked="true"]{background:var(--ok)}
.switch[aria-checked="true"] i{left:22px}
.switch:disabled{opacity:.45;cursor:not-allowed}
.avrow{display:flex;gap:8px}
.avc{width:30px;height:30px;border-radius:50%;background:var(--av);border:2px solid var(--surface);box-shadow:0 0 0 1.5px var(--line);padding:0}
.avc[aria-pressed="true"]{box-shadow:0 0 0 3px var(--ink)}
.plan{display:flex;justify-content:space-between;align-items:center;gap:12px;border:1.5px solid var(--line);border-radius:4px;padding:12px;margin-top:10px}
.plan b{display:block;font-size:16px;margin:4px 0 2px}
.plan .note{display:block}
.plan.cur{border-color:var(--ink);border-width:2px}
.plan.best{border-color:var(--pri);border-width:2px}
.plan .pp{font:600 26px/1 "Atkinson Hyperlegible Next",sans-serif;white-space:nowrap}
.plan .pp small{font:500 12px "Atkinson Hyperlegible Next",sans-serif;color:var(--muted)}
.spanel>.btn{margin-top:12px}
.btn.sm{font-size:14px;padding:6px 10px;min-height:36px;letter-spacing:0}
.rm *{animation:none!important;transition:none!important}
.srow{display:grid;grid-template-columns:minmax(0,1fr) auto;flex-wrap:nowrap}
.sc{justify-content:flex-end;flex-wrap:wrap;gap:6px}
.spanel .row .sinput{min-width:0}
.top .wrap{gap:8px}
.seg button{padding:5px 8px}
@media (max-width:430px){.stat small{display:none}.stat{font-size:17px}}

.tabs .wrap{grid-template-columns:repeat(6,1fr);gap:0}
.tabs button{font-size:11.5px;letter-spacing:.03em}
@media (max-width:380px){.tabs button{font-size:10.5px;letter-spacing:0}}

/* header */
.top .wrap{padding-block:8px}
.seg button{font:600 13px "Atkinson Hyperlegible Next",sans-serif;padding:6px 12px}
.hchip{display:inline-flex;align-items:center;gap:5px;background:var(--surface2);border-radius:99px;padding:5px 10px 5px 8px;font-variant-numeric:tabular-nums}
.hchip svg{width:17px;height:17px}
.hchip b{font:600 15px/1 "Atkinson Hyperlegible Next",sans-serif}
.hchip small{font:400 12px/1 "Atkinson Hyperlegible Next",sans-serif;color:var(--muted)}
.hchip.off b{color:var(--muted)}
.goalbar{display:none}
.goalbar i{display:block;height:100%;background:var(--pri);border-radius:0 99px 99px 0;transition:width .4s}
.goalbar i.full{background:var(--ok)}
@media (max-width:380px){.hchip small{display:none}.seg button{padding:6px 9px}}
/* default game piece */
.token{--tc:#5B6B77;flex:none;display:grid;place-items:center;width:40px;height:40px;border-radius:50%;color:#fff;background:radial-gradient(circle at 35% 30%,color-mix(in srgb,var(--tc) 50%,#fff),var(--tc) 58%,color-mix(in srgb,var(--tc) 70%,#000));box-shadow:inset 0 -3px 0 rgba(0,0,0,.25),inset 0 2px 0 rgba(255,255,255,.35),0 4px 10px rgba(0,0,0,.25);border:2px solid #fff}
.token svg{width:22px;height:22px;filter:drop-shadow(0 1px 0 rgba(0,0,0,.3))}
.you{width:auto;height:auto;background:none;border:0;box-shadow:none}
.you::after{display:none}
.you .token{position:relative}
.you .token::after{content:"";position:absolute;bottom:-9px;left:50%;margin-left:-6px;border:6px solid transparent;border-top-color:#fff}

.token.sm{width:32px;height:32px;border-width:2px}.token.sm svg{width:17px;height:17px}
.token.xl{width:84px;height:84px;border-width:4px}.token.xl svg{width:44px;height:44px}
.hpiece{border:0;background:none;padding:0;border-radius:50%;display:grid}
.phero{display:flex;gap:16px;align-items:center;margin-top:20px;background:var(--surface);border-radius:12px;padding:16px;box-shadow:0 0 0 1px var(--line)}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.pcard{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;background:var(--surface);border-radius:16px;padding:14px 10px;box-shadow:0 0 0 1px var(--line)}
.pcard b{font-size:15px}
.pcard .note{font-size:12px;line-height:1.35;flex:1}
.pcard.on{box-shadow:0 0 0 2.5px var(--ok)}
.pcard.lockd .token{filter:grayscale(1);opacity:.45}
.pbarm{width:80%;height:6px;border-radius:99px;background:var(--line);overflow:hidden}
.pbarm i{display:block;height:100%;background:var(--pri)}
#modal{position:fixed;inset:0;z-index:40;background:rgba(20,24,28,.55);display:grid;place-items:center;padding:16px}
#modal[hidden]{display:none!important}
.mcard{position:relative;width:min(360px,100%);background:var(--surface);border-radius:22px;padding:28px 22px 22px;text-align:center;box-shadow:0 20px 50px rgba(0,0,0,.3);overflow:hidden;animation:pop .35s cubic-bezier(.2,1.4,.4,1)}
.mcard .token{margin:0 auto}
.mcard h2{font:600 26px/1.1 "Atkinson Hyperlegible Next",sans-serif;margin:4px 0 6px}
.mcard .perk{background:var(--okbg);color:var(--ok-d);font-weight:600;border-radius:12px;padding:10px 12px;margin:0 0 16px}
.confetti{position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle,#1B6E4F 2px,transparent 2.5px) 10px 12px/46px 38px,radial-gradient(circle,#2451B7 2px,transparent 2.5px) 30px 24px/52px 44px,radial-gradient(circle,#0F766E 2px,transparent 2.5px) 4px 30px/40px 50px;opacity:.35;mask-image:linear-gradient(#000,transparent 55%)}
@keyframes pop{from{transform:scale(.85);opacity:0}}
.seg button{white-space:nowrap}
.hchip{white-space:nowrap}
@media (max-width:430px){.hchip small{display:none}.hchip{padding:5px 9px 5px 7px}.seg button{padding:6px 9px}.top .wrap{gap:6px}}

/* course picker */
.hsep{width:1px;height:28px;background:var(--line);margin:0 6px 0 4px}
.cwrap{position:relative;min-width:0}
.course{display:flex;align-items:center;gap:8px;border:1.5px solid var(--line);background:var(--surface);border-radius:12px;padding:5px 10px 5px 12px;text-align:left;min-height:42px;max-width:100%}
.course:hover{border-color:var(--muted)}
.course span{display:flex;flex-direction:column;min-width:0}
.course small{font:600 10.5px/1.1 "Atkinson Hyperlegible Next",sans-serif;color:var(--muted);letter-spacing:0;text-transform:none}
.course b{font:600 14px/1.2 "Atkinson Hyperlegible Next",sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.course svg{width:16px;height:16px;flex:none;color:var(--muted)}
.course[aria-expanded="true"] svg{transform:rotate(180deg)}
.cmenu{position:absolute;top:calc(100% + 8px);left:0;width:min(330px,calc(100vw - 32px));background:var(--surface);border-radius:16px;box-shadow:0 14px 40px rgba(28,38,48,.2),0 0 0 1px var(--line);padding:8px;z-index:30;animation:pop .18s ease-out}
.cmh{font:600 11px "Atkinson Hyperlegible Next",sans-serif;letter-spacing:0;text-transform:none;color:var(--muted);padding:8px 8px 4px}
.citem{display:flex;align-items:center;gap:10px;width:100%;border:0;background:none;text-align:left;padding:8px;border-radius:10px;min-height:48px}
.citem:hover:not(.soon){background:var(--surface2)}
.citem.on{background:color-mix(in srgb,var(--pri) 8%,var(--surface))}
.citem svg{width:18px;height:18px;color:var(--pri);flex:none}
.citem .cb{flex:none;width:34px;height:34px;border-radius:10px;background:var(--pri);color:#fff;display:grid;place-items:center;font:600 13px "Atkinson Hyperlegible Next",sans-serif}
.citem .ct{flex:1;min-width:0;display:flex;flex-direction:column}
.citem .ct b{font-size:14px}
.citem .ct span{font-size:12px;color:var(--muted)}
.citem.soon{opacity:.55;cursor:not-allowed}
.citem.soon .cb{background:var(--lock);color:var(--muted)}
@media (max-width:430px){.course small{display:none}.course b{font-size:13px}.hsep{margin:0 2px}}
@media (max-width:430px){.cmenu{position:fixed;left:16px;right:16px;width:auto;top:calc(62px + env(safe-area-inset-top,0px));max-height:calc(100vh - 160px);overflow-y:auto}}

/* header stats */
.hwrap{position:relative;display:flex;align-items:center;gap:8px}
.hchip{border:0;cursor:pointer}
.hchip.streak svg{color:var(--pri)}
.hchip.streak.off svg{color:var(--muted)}
.hring{position:relative;width:40px;height:40px;border:0;background:none;padding:0;display:grid;place-items:center;cursor:pointer}
.hring svg{position:absolute;inset:0;width:100%;height:100%}
.hring span{position:relative;font:600 11.5px/1 "Atkinson Hyperlegible Next",sans-serif;font-variant-numeric:tabular-nums}
.hring span svg{position:static;width:16px;height:16px;color:var(--ok)}
.hpop{position:absolute;top:calc(100% + 10px);right:0;width:260px;background:var(--surface);border-radius:10px;padding:14px;box-shadow:0 14px 40px rgba(28,38,48,.2),0 0 0 1px var(--line);z-index:30;animation:pop .18s ease-out}
.hpop>b{display:block;font-size:15px;margin-bottom:6px}
.hpop p{margin:8px 0;font-size:13.5px;color:var(--muted);line-height:1.45}
.hpr{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding-top:8px;font-size:13.5px}
.pbarm.wide{width:100%}
@media (max-width:430px){.hpop{position:fixed;left:16px;right:16px;width:auto;top:calc(62px + env(safe-area-inset-top,0px))}}
/* ===== de-template pass: flat, editorial, one accent ===== */
:root{--bg:#F4F3EF;--surface:#FBFAF7;--surface2:#ECEAE4;--ink:#1A2027;--muted:#56606B;--line:#DDDAD2;
--pri:#1B6E4F;--pri-d:#12513A;--amber:#B7791F;--amber-d:#8A5A12;--ok:#1B6E4F;--ok-d:#12513A;--okbg:#E3F0EA;--lock-d:#A9A59B}
.disp{letter-spacing:0;font-variant-numeric:tabular-nums}
.card,.labcard{box-shadow:none;border:1px solid var(--line);border-radius:10px}
.labcard .ic{border-radius:8px}
.btn{border-radius:10px;font-size:16px;font-weight:600;min-height:48px}
.pill{border-radius:6px;font-weight:600}
.chip{border-radius:4px}
.sech{font-size:13px;color:var(--ink);margin:22px 0 8px}
.tabs button{font-size:11.5px;font-weight:500}
.tabs button[aria-current="page"]{color:var(--ink)}
.tabs button[aria-current="page"]::after{background:var(--ink);height:2px;top:-6px;left:30%;right:30%}
.brand{margin:22px 0 2px}.brand b{font-size:24px}
.hello{margin:0 0 4px;color:var(--muted)}
/* header */
.hchip{background:none;padding:5px 6px}
.course{border-radius:8px;border-width:1px}
.course small{letter-spacing:0}
/* map: sections as hairline chapters, stops on a line */
.zone{background:none;border:0;border-top:1px solid var(--line);border-radius:0;left:16px;right:16px;overflow:visible}
.zone::after{display:none}
.zart{display:none}
.zsign{background:var(--bg);box-shadow:none;border-radius:0;left:16px;right:16px;padding:6px 0;gap:14px}
.zsign .zn{background:none;color:var(--uc);width:auto;height:auto;border-radius:0;font:600 34px/1 "Atkinson Hyperlegible Next",sans-serif;min-width:26px}
.zsign b{font-size:18px}
.zsign .zok{width:24px;height:24px}
.btile{--r:0deg;width:46px;height:46px;border-radius:50%;background:var(--surface);color:var(--uc);box-shadow:inset 0 0 0 2px var(--uc);transition:box-shadow .15s}
.btile:hover{transform:translate(-50%,-50%);box-shadow:inset 0 0 0 3px var(--uc)}
.btile:active{transform:translate(-50%,-50%) scale(.96)}
.btile .bn{font:600 17px/1 "Atkinson Hyperlegible Next",sans-serif;font-variant-numeric:tabular-nums}
.btile.mile{width:46px;height:46px;border-radius:50%}.btile.mile .bn{font-size:17px}
.btile.done{background:var(--uc);color:#fff;box-shadow:none}
.btile.cur{width:56px;height:56px;background:var(--uc);color:#fff;box-shadow:0 0 0 5px var(--bg),0 0 0 7px var(--uc)}
.btile.cur .bn{font-size:20px}
.btile.locked{background:var(--bg);color:var(--lock-d);box-shadow:inset 0 0 0 1.5px var(--line)}
.btile.locked .bn{font-size:16px}.btile.locked .bi{display:none}
.btile.lab{width:40px;height:40px;border-radius:9px;background:var(--surface);box-shadow:inset 0 0 0 2px var(--uc)}
.btile.lab .bi svg{width:18px;height:18px}
.btile.lab.done{background:var(--uc);color:#fff;box-shadow:none}
.btile.quiz{width:auto;height:38px;padding:0 12px;border-radius:8px;flex-direction:row;gap:6px;background:var(--surface);color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--ink)}
.btile.quiz .bi svg{width:16px;height:16px;color:var(--ink)}
.btile.quiz .ql{font:600 13px/1 "Atkinson Hyperlegible Next",sans-serif;margin:0}
.btile.quiz.locked{background:var(--bg);color:var(--muted);box-shadow:inset 0 0 0 1.5px var(--line)}
.btile.quiz.locked .bi{display:inline}.btile.quiz.locked .bi svg{color:var(--muted)}
.btile.quiz.done{background:var(--ok);color:#fff;box-shadow:none}.btile.quiz.done .bi svg{color:#fff}
.btile.exam{width:64px;height:64px;background:var(--ink);color:#fff;box-shadow:none}
.btile.exam .bi svg{width:26px;height:26px}
.btile .bg{box-shadow:none;border:1px solid var(--line);border-radius:4px;bottom:-6px;right:-10px;font-size:11px}
.btile.sel:not(.cur){outline:2px solid var(--ink);outline-offset:3px}
.btile.cur.sel{outline:0}
.you .token{box-shadow:0 1px 2px rgba(0,0,0,.2)}
/* step card */
.stepcard{box-shadow:0 -12px 24px -18px rgba(26,32,39,.25);border:1px solid var(--line);border-radius:12px}
.stat-t{font-size:13px;font-weight:600;color:var(--muted)}
.stat-t.cur{color:var(--pri)}.stat-t.ok{color:var(--ok)}
.kpis{box-shadow:none;border:1px solid var(--line);border-radius:10px}
.kpi span{font:400 13px "Atkinson Hyperlegible Next",sans-serif}
.dbar .tr{border:0;border-radius:2px;height:6px}.dbar .tr i{border-radius:2px}
.dbar .nm{font-weight:600}
.labcard .ic{background:none;color:var(--uc);box-shadow:inset 0 0 0 1.5px var(--line);width:44px;height:44px}
.chip{font:500 12px "Atkinson Hyperlegible Next",sans-serif;border:0;padding:0;color:var(--muted)}
.confx{position:fixed;inset:0;width:100vw;height:100vh;pointer-events:none;z-index:50}
.res{padding-top:44px}
.stampbig{transform:none;border-width:3px;width:104px;height:104px}
.stampbig b{font-size:48px}
.stampbig span{font:600 12px "Atkinson Hyperlegible Next",sans-serif;margin-top:2px}
.rt b{font:500 12.5px "Atkinson Hyperlegible Next",sans-serif;padding-top:10px}
.sbody .wrap.res{padding-top:44px}
.dchips{display:flex;flex-wrap:wrap;gap:8px}
.dchip{border:1.5px solid var(--line);background:var(--surface);border-radius:8px;padding:10px 13px;min-height:44px;font-weight:600;font-size:14px;text-align:left}
.dchip:hover:not(:disabled){border-color:var(--muted)}
.dchip[aria-pressed="true"]{border-color:var(--ink);background:var(--surface2)}
.dchip.right{border-color:var(--ok);background:var(--okbg);color:var(--ok-d)}
.dchip.wrong{border-color:var(--bad);background:var(--badbg);color:var(--bad-d)}
.dchip:disabled{cursor:default}
.why{font-size:13.5px;margin:8px 0 0;color:var(--muted)}.why.ok{color:var(--ok-d)}.why.bad{color:var(--bad-d)}
.ticket{border-left-width:1.5px}
.fbh svg{width:24px;height:24px;flex:none}
.labcard.soon{opacity:.62;cursor:default;background:transparent;box-shadow:0 0 0 1px var(--line) inset;border-style:dashed}
.labcard.soon:hover{background:transparent}
.labcard.soon .ic{color:var(--muted)}
.soontag{display:inline-block;font:600 12px "Atkinson Hyperlegible Next",sans-serif;color:var(--muted);border:1px solid var(--line);border-radius:6px;padding:3px 7px;white-space:nowrap}
.sech.soonh{display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:var(--muted)}

/* ---------- softer weights (Sep 23, 2026): Atkinson Hyperlegible Next, one step lighter everywhere ---------- */
b,strong,h1,h2,h3,h4,th{font-weight:600}
.note a{color:var(--pri);text-decoration:underline;text-underline-offset:2px}
.nudge{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;justify-content:space-between;border-top:1px solid var(--line);margin-top:12px;padding-top:10px}
.nudge .row{gap:10px;align-items:center;flex-wrap:nowrap}
.nudgex{background:none;border:0;padding:6px 2px;color:var(--muted);font:500 13px "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;text-decoration:underline;text-underline-offset:2px;cursor:pointer}

/* ---------- brand refit (Sep 23, 2026): logo kit, ink #141B2D + amber #F5A524 (brand/COLORS.txt) ----------
   Ink replaces green as the one UI accent. Amber is the logo's "path": progress fills, the hours ring,
   and the finished trail. Amber is never text on light backgrounds (about 2:1 contrast). Green stays "correct". */
:root{--ink:#141B2D;--pri:#141B2D;--pri-d:#070B16;--acc:#F5A524;--acc-d:#D98A0B}
.pbar i,.pbarm i{background:var(--acc)}
.hlogo{border:0;background:none;padding:0;display:grid;place-items:center;width:32px;height:32px;flex:none;cursor:pointer;margin-right:6px}
.hlogo svg{width:32px;height:32px}
@media (max-width:380px){.hlogo{display:none}}

/* ---------- desktop board (Sep 23, 2026): 960px+ gets a full-width header with the full logo, and the Path
   becomes a wide board with bigger stops and the step card docked on the right. Phones are unchanged. ---------- */
.hlogofull{display:none;border:0;background:none;padding:0;flex:none;cursor:pointer;margin-right:14px}
.hlogofull svg{display:block;height:30px;width:auto}
@media (min-width:960px){
 .wrap{max-width:760px}
 .top .wrap{max-width:1200px;padding-inline:32px}
 .hlogo{display:none}
 .hlogofull{display:block}
 main.v-learn .wrap{max-width:1200px;padding-inline:32px}
 .learn{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:48px;align-items:start}
 .learn .stepcard{position:sticky;top:92px;bottom:auto;margin-top:88px;padding:18px 20px;gap:8px}
 .learn .stepcard .sn{font-size:22px}
 .brand b{font-size:30px}
 .zsign .zn{font-size:44px;min-width:34px}
 .zsign b{font-size:21px}
 .btile,.btile.mile{width:60px;height:60px}
 .btile .bn,.btile.mile .bn{font-size:21px}
 .btile.cur{width:74px;height:74px;box-shadow:0 0 0 6px var(--bg),0 0 0 9px var(--uc)}
 .btile.cur .bn{font-size:26px}
 .btile.locked .bn{font-size:19px}
 .btile.lab{width:52px;height:52px;border-radius:11px}
 .btile.lab .bi svg{width:22px;height:22px}
 .btile.quiz,.btile.quiz.cur{width:auto;height:46px;padding:0 16px}
 .btile.quiz .ql{font-size:15px}
 .btile.quiz .bi svg{width:19px;height:19px}
 .btile.exam{width:84px;height:84px}
 .btile.exam .bi svg{width:32px;height:32px}
 .btile .bg{font-size:12px}
 .you .token{width:48px;height:48px}
}
@media (max-width:380px){.hlogofull+.hsep{display:none}}
/* header game piece (moved to the right, Sep 23, 2026): bigger so the keycap reads crisply */
.hpiece .token.sm{width:40px;height:40px}
.hpiece .token.sm svg{width:23px;height:23px}
@media (max-width:430px){.hpiece .token.sm{width:36px;height:36px}.hpiece .token.sm svg{width:21px;height:21px}}
/* grades as stars, finished steps as a check (Sep 23, 2026) */
.grade{display:inline-flex;gap:1px;align-items:center;border:0;padding:0;vertical-align:middle}
.grade svg{width:15px;height:15px}
.btile .bg{display:grid;place-items:center;width:20px;height:20px;padding:0;color:var(--ok)}
.btile .bg svg{width:13px;height:13px;stroke-width:3}
.stampbig b.stamps{display:flex;gap:2px;font-size:0}
.stampbig b.stamps svg{width:26px;height:26px}
.stampbig b svg{width:44px;height:44px}
.labcard{box-sizing:border-box}

/* ---------- ink framing (Sep 23, 2026): the page read as a sea of white, so the header bar and the
   "Up next" card are solid ink. The board stays light. Not a dark theme: popovers and pages stay light. ---------- */
.top{background:var(--ink);border-bottom-color:var(--ink);color:#fff}
.top .cmenu,.top .hpop{color:var(--ink)}
.top .hsep{background:rgba(255,255,255,.18)}
.top .course{background:transparent;border-color:rgba(255,255,255,.24);color:#fff}
.top .course:hover{border-color:rgba(255,255,255,.5)}
.top .course small{color:rgba(255,255,255,.62)}
.top .course>svg{color:rgba(255,255,255,.7)}
.top .hchip{color:#fff}
.top .hchip b{color:#fff}
.top .hchip small{color:rgba(255,255,255,.62)}
.top .hchip.streak:not(.off) svg{stroke:var(--acc)}
.top .hchip.streak:not(.off) svg circle{fill:var(--acc)}
.top .hchip.off b,.top .hchip.off svg{color:rgba(255,255,255,.45);stroke:rgba(255,255,255,.45)}
.top .hchip.off svg circle{fill:rgba(255,255,255,.45)}
.top .hring>svg circle:first-child{stroke:rgba(255,255,255,.18)}
.top .hring>span{color:#fff}
.top button:focus-visible{outline-color:var(--acc)}
.stepcard{background:var(--ink);color:#fff;border-color:var(--ink)}
.stepcard .note{color:rgba(255,255,255,.66)}
.stepcard .note b{color:#fff!important}
.stepcard .stat-t{color:rgba(255,255,255,.66)}.stepcard .stat-t.ok{color:#7FD1A4}
.stepcard .grade svg path[fill="var(--line)"]{fill:rgba(255,255,255,.22)}
.stepcard .btn:not(.ghost):not(:disabled){background:var(--acc);border-color:var(--acc);color:var(--ink)}
.stepcard .btn:disabled{border-color:rgba(255,255,255,.2);color:rgba(255,255,255,.5)}
.stepcard .btn.ghost{color:#fff;border-color:rgba(255,255,255,.55)}
.stepcard .nudge{border-top-color:rgba(255,255,255,.14)}
.stepcard .nudgex{color:rgba(255,255,255,.66)}
.stepcard button:focus-visible{outline-color:var(--acc)}
/* header "Sign in" (web, signed out); phones use the Up next card's sign-in line instead */
.hsign{flex:none;border:1px solid rgba(255,255,255,.5);background:transparent;color:#fff;border-radius:8px;padding:7px 14px;font:600 14px "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;min-height:36px;margin-right:6px}
.hsign:hover{border-color:#fff;background:rgba(255,255,255,.08)}
@media (max-width:640px){.hsign{display:none}}
/* finished stops are outlines (Sep 23, 2026): the current step is the only solid stop on the board */
.btile.done,.btile.lab.done{background:var(--surface);color:var(--uc);box-shadow:inset 0 0 0 2.5px var(--uc)}

/* ---------- sign-in screen (web, signed out; Sep 23, 2026): ink panel with the pitch + a focused form ---------- */
.auth{display:grid;grid-template-columns:1fr;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--surface);margin-top:14px}
@media (min-width:720px){.auth{grid-template-columns:5fr 6fr}}
.auth-hero{background:var(--ink);color:#fff;padding:26px 24px;display:flex;flex-direction:column;gap:14px}
.auth-hero .mk{width:44px;height:44px}
.auth-hero h2{font:600 26px/1.18 "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;letter-spacing:-.01em;margin:4px 0 2px}
.auth-hero ul{list-style:none;padding:0;margin:0;display:grid;gap:11px}
.auth-hero li{display:flex;gap:10px;font-size:15px;line-height:1.4;color:rgba(255,255,255,.84)}
.auth-hero li svg{flex:none;width:18px;height:18px;color:var(--acc);margin-top:2px;stroke-width:2.6}
.auth-form{padding:26px 24px;display:flex;flex-direction:column;gap:12px}
.gbtn{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;min-height:52px;border:1px solid #747775;border-radius:10px;background:#fff;color:#1F1F1F;font:600 16px "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;cursor:pointer}
.gbtn:hover{background:#F2F2F2}
.gbtn svg{width:20px;height:20px;flex:none}
.auth-or{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:13px;margin:6px 0 2px}
.auth-or::before,.auth-or::after{content:"";flex:1;height:1px;background:var(--line)}
.auth-l{font-weight:600;font-size:14px;margin-bottom:-4px}
.auth-in{width:100%;min-height:50px;font-size:16px;border-radius:10px;border-width:1px;background:#fff}
.auth-form .btn{min-height:52px}
.auth-msg{margin:0}
.auth-legal{margin:6px 0 0;padding-top:14px;border-top:1px solid var(--line)}
@media (min-width:720px){.auth-hero,.auth-form{padding:34px 32px}.auth-hero h2{font-size:30px}}
/* signed-in account screen, same two-panel card */
.acct-id{display:flex;flex-direction:column;gap:2px;padding:14px 0;border-top:1px solid rgba(255,255,255,.14);border-bottom:1px solid rgba(255,255,255,.14)}
.acct-id span{font-size:13px;color:rgba(255,255,255,.62)}
.acct-id b{font-size:17px;font-weight:600;word-break:break-all;color:#fff}
.acct-sync{display:flex;gap:10px;font-size:14.5px;line-height:1.4;color:rgba(255,255,255,.75)}
.acct-sync svg{flex:none;width:18px;height:18px;color:var(--acc);stroke-width:2.6;margin-top:1px}
.acct-sync.on{color:#fff}
.acct-sync.err{color:#FFB4A8}
.acct-h{font-weight:600;font-size:14px}
.acct-h2{margin-top:10px;padding-top:16px;border-top:1px solid var(--line)}
/* compact header up to 640px (large phones were getting the desktop labels and a clipped course name) */
@media (max-width:640px){.hchip small{display:none}.top .wrap{gap:6px}.hsep{margin:0 2px}}
.course b i{font-style:normal}
/* phones: always show the full course name (CompTIA A+ / Core 1 · 220-1201); make room by tightening the right side */
@media (max-width:430px){
 .course small{display:block}
 .course{padding:4px 8px 4px 10px;gap:6px}
 .top .wrap{gap:5px}
 .hwrap{gap:4px}
 .top .hchip{padding:4px 2px}
 .hring{width:36px;height:36px}
 .hpiece .token.sm{width:32px;height:32px}.hpiece .token.sm svg{width:19px;height:19px}
 .hlogo{margin-right:2px}
}
@media (max-width:340px){.course b{font-size:12px}.course small{font-size:10px}.hchip b{font-size:13px}}
/* "Report this question" (web): link under Continue + a bottom sheet (centered on desktop) */
.rqlink{display:block;margin:2px auto 0;background:none;border:0;padding:6px 4px;font:500 13.5px "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;color:var(--muted);text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.rqlink.done{text-decoration:none;text-align:center}
.rq{position:fixed;inset:0;z-index:30;background:rgba(20,27,45,.5);display:flex;align-items:flex-end;justify-content:center}
.rqs{background:var(--surface);width:min(560px,100%);border-radius:16px 16px 0 0;padding:18px 20px calc(20px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:10px}
.rqh{display:flex;align-items:center;justify-content:space-between}
.rqh b{font-size:18px;font-weight:600}
.rqh .xbtn{min-width:40px;min-height:40px}
.rqr{display:flex;flex-wrap:wrap;gap:8px}
.rqs textarea{width:100%;resize:vertical;font-size:15px}
@media (min-width:640px){.rq{align-items:center}.rqs{border-radius:14px;padding:22px 24px}}

/* ---------- study guides (Sep 24, 2026): read before a lesson's questions ---------- */
.acts{display:grid;grid-template-columns:auto 1fr;gap:8px;margin-top:4px}
.acts .btn{margin-top:0}
.guide{max-width:720px;padding-bottom:40px}
.guide .gh{font:600 30px/1.15 "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;letter-spacing:-.01em;margin:4px 0 10px}
.glead{font-size:18px;line-height:1.55;color:var(--muted);margin:0 0 8px}
.gsec{padding-top:22px;margin-top:22px;border-top:1px solid var(--line)}
.gsec h2,.gtips h2{font:600 19px/1.3 "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;margin:0 0 10px}
.gsec p,.gsec li{font-size:16px;line-height:1.6}
.gsec p{margin:0 0 10px}
.gsec ul{margin:0 0 10px;padding-left:20px}.gsec li{margin:4px 0}
.gt{width:100%;border-collapse:separate;border-spacing:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface);font-size:14.5px;line-height:1.45}
.gt th{text-align:left;font-weight:600;background:var(--surface2);padding:10px 12px}
.gt td{padding:10px 12px;border-top:1px solid var(--line);vertical-align:top}
.gt td:first-child{font-weight:600;white-space:nowrap}
@media (max-width:560px){.gt{font-size:13.5px}.gt th,.gt td{padding:8px 9px}.gt td:first-child{white-space:normal}}
.gterms{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:0}
.gterms div{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.gterms dt{font:700 14px "JetBrains Mono",monospace}
.gterms dd{margin:2px 0 0;font-size:14.5px;color:var(--muted);line-height:1.4}
@media (max-width:560px){.gterms{grid-template-columns:1fr}}
.gtips{margin-top:26px;background:var(--ink);color:#fff;border-radius:12px;padding:18px 20px}
.gtips ul{margin:0;padding:0;list-style:none;display:grid;gap:10px}
.gtips li{position:relative;padding-left:22px;font-size:15.5px;line-height:1.5;color:rgba(255,255,255,.9)}
.gtips li::before{content:"";position:absolute;left:2px;top:.55em;width:9px;height:9px;border-radius:50%;background:var(--acc)}
.sfoot .btn[data-act="lesson"]{background:var(--acc);border-color:var(--acc);color:var(--ink)}
.gticket{margin:6px 0 16px;font-size:16px;line-height:1.5}
.gcheck{margin-top:22px;border:1px solid var(--line);border-left:4px solid var(--acc);border-radius:10px;background:var(--surface);padding:0}
.gcheck summary{list-style:none;cursor:pointer;padding:14px 16px;font-size:16px;line-height:1.45;font-weight:500}
.gcheck summary::-webkit-details-marker{display:none}
.gcheck summary span{display:block;font:700 12px "JetBrains Mono",monospace;color:var(--muted);margin-bottom:4px}
.gcheck summary em{display:block;font-style:normal;font-size:13.5px;color:var(--muted);margin-top:6px;text-decoration:underline;text-underline-offset:2px}
.gcheck[open] summary em{display:none}
.gcheck p{margin:0;padding:0 16px 14px;font-size:16px;line-height:1.5;font-weight:600}
.gcheck p::before{content:"Answer: ";color:var(--muted);font-weight:500}
.gout{margin:24px 0 0;padding-top:20px;border-top:1px solid var(--line);font-size:17px;line-height:1.55;font-weight:500}

/* ---------- Desktop board extras (Sep 24, 2026, Johnny's picks from the dead-space mockups):
   stop names beside the path and a dot grid (1100px+), and the route rail on the left (1360px+). Phones are unchanged. ---------- */
.blab,.rail{display:none}
@media (min-width:1100px){
 .trail{background-image:radial-gradient(circle,color-mix(in srgb,var(--ink) 11%,transparent) 1.1px,transparent 1.6px);background-size:26px 26px;background-position:13px 13px}
 .blab{display:block;position:absolute;z-index:1;transform:translate(52px,-50%);width:max-content;max-width:180px;padding:2px 0;border:0;background:none;text-align:left;font:inherit;font-size:13.5px;line-height:1.3;color:var(--ink);cursor:pointer}
 .blab.l{transform:translate(calc(-100% - 44px),-50%);text-align:right}
 .blab.cur{transform:translate(64px,-50%)}
 .blab.cur.l{transform:translate(calc(-100% - 64px),-50%)}
 .blab b{display:block;font-weight:500}
 .blab.cur b{font-weight:600;font-size:14.5px}
 .blab.lock b{color:var(--muted);font-weight:400}
 .blab .mm{display:flex;gap:2px;align-items:center;margin-top:3px;font-size:12px;color:var(--muted)}
 .blab.l .mm{justify-content:flex-end}
 .blab .mm svg{width:13px;height:13px}
 .blab .up{display:inline-block;margin-bottom:3px;padding:1px 6px;border-radius:5px;background:var(--acc);color:var(--ink);font-size:11px;font-weight:600}
 .blab:hover b{text-decoration:underline;text-underline-offset:3px}
}
@media (min-width:1360px){
 .learn{grid-template-columns:220px minmax(0,1fr) 360px;gap:44px}
 .rail{display:block;position:sticky;top:92px;align-self:start;margin-top:88px}
 .rail .rhd{margin-bottom:12px}
 .rail .rhd b{display:block;font-size:15px;font-weight:600;color:var(--ink)}
 .rail .rhd span{font-size:12.5px;color:var(--muted)}
 .rdom{display:grid;grid-template-columns:28px 1fr;gap:4px 10px;align-items:center;width:calc(100% + 20px);margin:0 -10px;padding:10px;border:0;border-radius:10px;background:none;text-align:left;font:inherit;color:var(--ink);cursor:pointer}
 .rdom:hover{background:color-mix(in srgb,var(--ink) 4%,transparent)}
 .rdom.now{background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
 .rdom .ch{grid-row:span 2;width:28px;height:28px;border-radius:8px;background:var(--uc);color:#fff;font-size:13px;font-weight:600;display:grid;place-items:center}
 .rdom b{font-size:13.5px;font-weight:500;line-height:1.25}
 .rdom .sub{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted)}
 .rdom .bar{grid-column:2;height:4px;border-radius:2px;background:var(--line);overflow:hidden}
 .rdom .bar i{display:block;height:100%;background:var(--uc)}
 /* map key card (Sep 24, 2026): mini copies of the real stops, hints on hover */
 .rleg{margin-top:18px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px 16px 15px 12px}
 .rleg .rlt{display:block;margin:0 0 12px 2px;font-size:12.5px;font-weight:600;color:var(--ink)}
 .rleg .rlg{display:grid;grid-template-columns:auto auto;justify-content:space-between;gap:12px 8px}
 .rleg .ri{position:relative;display:flex;align-items:center;gap:10px;font-size:12.5px;font-weight:500;line-height:1.2;color:var(--ink);white-space:nowrap;cursor:default}
 .rleg .sw{flex:none;position:relative;width:26px;height:26px;display:grid;place-items:center}
 .rleg .st{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--surface);box-shadow:inset 0 0 0 1.5px var(--ink);color:var(--ink);font-size:10px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums}
 .rleg .st svg{width:11px;height:11px}
 .rleg .st.cur{width:18px;height:18px;background:var(--ink);color:#fff;box-shadow:0 0 0 2px var(--surface),0 0 0 3.5px var(--ink)}
 .rleg .st.lock{box-shadow:inset 0 0 0 1.5px var(--line);color:var(--lock-d)}
 .rleg .st.lab{border-radius:6px}
 .rleg .st.cp{width:24px;height:17px;border-radius:5px}
 .rleg .st.cp svg{width:10px;height:10px}
 .rleg .bd{position:absolute;right:-1px;bottom:0;width:11px;height:11px;border-radius:3px;background:var(--surface);box-shadow:0 0 0 1px var(--line);color:var(--ok);display:grid;place-items:center}
 .rleg .bd svg{width:8px;height:8px;stroke-width:3.4}
 .rleg .ri::before,.rleg .ri::after{position:absolute;z-index:5;opacity:0;transform:translateY(3px);transition:opacity .12s,transform .12s;pointer-events:none}
 .rleg .ri::after{content:attr(data-h);left:-4px;bottom:calc(100% + 6px);padding:4px 7px;border-radius:5px;background:var(--ink);color:#fff;font-size:11px;font-weight:500;line-height:1.2}
 .rleg .ri::before{content:"";left:9px;bottom:calc(100% + 2px);border:4px solid transparent;border-bottom:0;border-top-color:var(--ink)}
 .rleg .ri:nth-child(even)::after{left:auto;right:-4px}
 .rleg .ri:hover::before,.rleg .ri:hover::after{opacity:1;transform:none}
}
@media (min-width:1600px){.top .wrap,main.v-learn .wrap{max-width:1440px}}
/* ---------- Up next card, route strip (Sep 24, 2026): Johnny picked B from ../previews/card-tokens/ ---------- */
.stepcard .sct{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:13px;color:rgba(255,255,255,.62)}
.stepcard .sct b{color:#fff;font-weight:600}
.sroute{display:flex;align-items:center;height:20px;margin:2px 0 4px}
.sroute i{flex:1;min-width:4px;height:3px;background:rgba(255,255,255,.14)}
.sroute i.on{background:var(--acc)}
.sroute s{flex:none;width:11px;height:11px;border-radius:50%;box-shadow:inset 0 0 0 2px rgba(255,255,255,.3)}
.sroute s.lab{border-radius:3px}
.sroute s.quiz{width:18px;border-radius:3px}
.sroute s.on{background:var(--acc);box-shadow:none}
.sroute s.sel:not(.cur){box-shadow:0 0 0 2px var(--ink),0 0 0 3.5px #fff}
.sroute s.cur{width:17px;height:17px;box-shadow:inset 0 0 0 3px var(--acc),0 0 0 4px rgba(245,165,36,.2)}
.sroute s.quiz.cur{width:24px;border-radius:4px}
.stepcard .btn{display:flex;align-items:center;justify-content:center;gap:10px;border-radius:8px}
.stepcard .btn svg{width:18px;height:18px;stroke-width:2.2}
.acts2{display:flex;align-items:center;gap:16px;margin-top:4px}
.acts2 .btn{flex:1;margin-top:0}
.sguide{flex:none;display:flex;align-items:center;gap:7px;min-height:48px;padding:0 2px;border:0;background:none;color:#fff;font:500 15px "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;cursor:pointer}
.sguide svg{width:18px;height:18px}
.sguide span{color:rgba(255,255,255,.55);font-weight:400}
.sguide:hover{text-decoration:underline;text-underline-offset:3px;text-decoration-color:rgba(255,255,255,.35)}
.sguide:focus-visible{outline:2px solid var(--acc);outline-offset:2px;border-radius:4px}
@media (min-width:960px){.learn .stepcard{gap:10px}.learn .stepcard .sn{margin-top:2px}}
/* ---------- game pieces (Sep 24, 2026): board-game counters, rarity bezels, the collection book ---------- */
/* Counters: flat color with a solid darker edge, no gloss (tok-2). Tiers add a bezel: copper, gold, reeded amber. */
.token{--ed:color-mix(in srgb,var(--tc) 62%,#000);--eh:3px;position:relative;overflow:visible;background:var(--tc);border:0;box-shadow:0 var(--eh) 0 var(--ed)}
.token.xl{--eh:6px}.token.lg{width:64px;height:64px;--eh:4px}
.token.sm,.top .token,.you .token{--eh:2px}
.token .face{position:absolute;inset:0;display:grid;place-items:center;border-radius:50%;background:var(--tc);color:#fff;overflow:hidden}
.token:is(.t2,.t3,.t4,.es) .face{inset:7.5%}
.token.t2{background:#C98452;--ed:#8A5230}
.token.t3{background:#D9AC4B;--ed:#94701F}
.token.t4{background:repeating-conic-gradient(#F5A524 0 5deg,#DD8F17 5deg 10deg);--ed:#9E620C}
.token.es{background:#141B2D;--ed:#000}.token.es .face{box-shadow:inset 0 0 0 1.5px #FFB840}
.token .pat{position:absolute;inset:0;width:100%;height:100%;opacity:.16}
.token>.face>svg.g{width:56%;height:56%;filter:none;stroke-width:1.8}
.token>.face>svg.mk{width:66%;height:66%}
.token.lock{background:#DDD9D0;--ed:#CBC6BB}.token.lock .face{background:var(--surface2);color:#B3AFA5;box-shadow:none}
.token.t1.lock{background:var(--surface2);--ed:#D2CEC5}
/* Founder No. 001: the only hexagon */
.token.one{background:none;box-shadow:none;border-radius:0}
.token.one>svg.one{display:block;width:100%;height:auto;overflow:visible}
/* rarity meter: more bars, rarer piece */
.tier{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:500;color:var(--muted);white-space:nowrap}
.tier small{font-size:11.5px;font-weight:400}.tier small::before{content:"· "}
.tier .bars{display:inline-flex;align-items:flex-end;gap:1.5px;height:10px}
.tier .bars i{display:block;width:2.5px;border-radius:.5px;background:var(--line)}
.tier .bars i:nth-child(1){height:4px}.tier .bars i:nth-child(2){height:6px}.tier .bars i:nth-child(3){height:8px}.tier .bars i:nth-child(4){height:10px}
.tier .bars i.on{background:var(--ink)}.tier.t4 .bars i.on{background:#D98A0F}
.tier .esm{width:7px;height:7px;border-radius:1.5px;transform:rotate(45deg);background:#141B2D;box-shadow:0 0 0 1.5px #FFB840;margin:0 1px}
.tier .hexm{width:10px;height:11px;background:#D9AC4B;clip-path:polygon(50% 0,93% 25%,93% 75%,50% 100%,7% 75%,7% 25%)}
.tier.one{color:#8A6414;font-weight:600}
/* collection book */
.bmain{display:flex;align-items:center;gap:16px;padding:16px;margin-bottom:12px}
.bmain b{display:block;font-size:18px;font-weight:600;margin:1px 0}
.bmain>div>.note{display:block;font-size:13px}
.pno{display:block;font:600 13px "JetBrains Mono",monospace;color:#8A6414;margin:2px 0 4px}
.bsum{padding:16px;margin-bottom:12px}
.bsum .bn{font-size:22px;font-weight:600}.bsum .bn small{font-size:14px;font-weight:400;color:var(--muted)}
.bsum .mbar{margin:10px 0 12px}
.bsum .tl{display:flex;flex-wrap:wrap;gap:6px 18px}
.tcnt{display:inline-flex;align-items:center;gap:6px}.tcnt>span:last-child{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.bsum .nine{margin:14px 0 0;padding-top:12px;border-top:1px solid var(--line);font-size:13px;line-height:1.5}
.bsum .nine b{color:var(--ink);font-weight:600}
.bsign{margin:0 0 12px}
.mbar{display:block;height:6px;border-radius:3px;background:var(--line);overflow:hidden}.mbar i{display:block;height:100%;background:var(--acc)}
.bset{padding:16px;margin-bottom:12px}
.bsh{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.bset h2{font-size:16px;font-weight:600;margin:0}
.bdone{display:inline-flex;align-items:center;gap:4px;color:var(--ok);font-weight:500;font-size:13px}.bdone svg{width:14px;height:14px}
.bsd{margin:2px 0 12px;font-size:13px}
.bgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.bit{display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0;padding:12px 6px 10px;border:0;border-radius:8px;background:none;font:inherit;color:var(--ink);text-align:center;cursor:pointer}
.bit:hover{background:color-mix(in srgb,var(--ink) 4%,transparent)}
.bit:focus-visible{outline:2px solid var(--ink);outline-offset:0}
.bit.eq{box-shadow:inset 0 0 0 1.5px var(--ink)}
.bit.one{box-shadow:inset 0 0 0 1px #E3CF9A;background:#FBF6EA}
.bit>.token{margin-bottom:4px}
.bit b{font-size:14px;font-weight:500}
.bit.lk b{color:var(--muted)}
.bit .ln{font-size:12px;color:var(--muted);line-height:1.3}
.bit .mbar{width:70%;height:4px;margin-top:2px}
@media (max-width:600px){.bgrid{grid-template-columns:repeat(2,1fr)}}
/* piece popups: a new piece, or one opened from the book */
.pmodal{border-radius:14px;padding:30px 24px 22px}
.pmodal>.token{margin:4px auto 18px}
.pmodal .pnew{font-size:13px;font-weight:600;margin-bottom:14px}
.pmodal h2{margin:8px 0 4px}
.pmodal .pno{margin:0 0 6px}
.pmodal .pl{color:var(--muted);font-size:14px;margin:0 0 4px}
.pmodal .pk{font-size:14px;margin:10px 0 0}.pmodal .pk b{font-weight:600}
.pmodal .qt{font-size:14px;margin:14px 0 0;padding-top:14px;border-top:1px solid var(--line)}
.pmodal .padd{display:flex;align-items:center;justify-content:center;gap:8px;margin:16px 0 18px;font-size:13.5px;color:var(--muted)}.pmodal .padd svg{width:18px;height:18px;flex:none}
.pmodal .btn{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:18px;border-radius:8px}.pmodal .padd+.btn{margin-top:0}
.pmodal .btn svg{width:18px;height:18px}
.plink{display:block;margin:12px auto 0;padding:6px 8px;background:none;border:0;color:var(--muted);font:500 14px "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.pmodal>.token.one{width:132px;height:auto;margin:0 auto 14px}
.bit>.token.one{width:64px;height:auto}
.pmodal{min-width:0;max-width:100%;box-sizing:border-box}
.pmodal .btn{white-space:normal;text-align:center}
.pmodal .padd{flex-wrap:nowrap;text-align:left}
/* results screen: a bonus find (drop) and the milestone you're closest to */
.res .find{display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:center;text-align:left;padding:16px;margin:0 0 10px;animation:pop .35s cubic-bezier(.2,1.4,.4,1)}
.find .fk{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:2px}.find .fk b{font-size:12.5px;font-weight:600}
.find h3{font-size:17px;font-weight:600;margin:0}
.find p{margin:3px 0 0;font-size:13px;color:var(--muted);line-height:1.4}
.flink{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:4px 0;border:0;background:none;color:var(--ink);font:500 13.5px "Atkinson Hyperlegible Next","Atkinson Hyperlegible",sans-serif;text-decoration:underline;text-underline-offset:3px;cursor:pointer}.flink svg{width:16px;height:16px}
.res .near{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;text-align:left;padding:12px 16px;margin:0 0 18px}
.near b{display:block;font-size:14px;font-weight:500}.near .mbar{margin-top:6px}.near .n{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
@media (prefers-reduced-motion:reduce){.res .find{animation:none}}
/* a locked Beta Founder is a grey silhouette like every other locked piece (the mark's own colors are for owners) */
.token.lock svg.mk path,.token.lock svg.mk circle{stroke:currentColor}
.token.lock svg.mk circle[fill="#FFB840"]{fill:currentColor}
