:root{--bg:#fbfbf9;--surface:#fff;--surface-2:#f2f2ef;--ink:#101010;--muted:#46464a;--faint:#6d6d70;--accent:#0645ad;--accent-bg:#eef1f8;--ok:#0a6b2d;--ok-bg:#eaf3ec;--warn:#a33000;--hair:#1111111f;--rule:#11111147;--sans:-apple-system, "SF Pro Text", Inter, "Segoe UI", system-ui, sans-serif;--font-mono:ui-monospace, "SF Mono", "SFMono-Regular", Menlo, Consolas, monospace;font-family:var(--sans);font-size:16px}:root[data-theme=dark]{--bg:#131313;--surface:#1c1c1c;--surface-2:#272727;--ink:#ececea;--muted:#b6b6b1;--faint:#9c9c97;--accent:#8ab2ee;--accent-bg:#1f2a3d;--ok:#79c48c;--ok-bg:#1e2b21;--warn:#e6957a;--hair:#ffffff21;--rule:#ffffff4d}*{box-sizing:border-box}[hidden]{display:none!important}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;flex-direction:column;display:flex}.topbar{background:var(--surface);border-bottom:1px solid var(--rule);flex-wrap:wrap;align-items:center;gap:6px 12px;padding:10px 20px;display:flex}.brand{font-size:17px;font-weight:700}.crumb{color:var(--muted);font-size:13px}.spacer{flex:1}.ghost-btn{font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:0;padding:7px 12px;font-size:13px}.ghost-btn:hover{background:var(--surface-2);color:var(--ink)}.seg{border:1px solid var(--rule);display:inline-flex;overflow:hidden}.seg button{font:inherit;border:none;border-right:1px solid var(--rule);color:var(--muted);cursor:pointer;background:0 0;padding:5px 11px;font-size:12px}.seg button:last-child{border-right:none}.seg button:hover{color:var(--ink);background:var(--surface-2)}.seg button.active{background:var(--ink);color:var(--surface)}.layout{flex:1;grid-template-columns:264px 1fr;min-height:0;display:grid}.layout>*{min-height:0;overflow:auto}.rail{background:var(--surface);border-right:1px solid var(--rule);padding:16px 0 40px}.rail-sec{padding:0 16px 14px}.rail-h{letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin:0 0 8px;font-size:11px}.rail-link{width:100%;font:inherit;text-align:left;color:var(--ink);cursor:pointer;background:0 0;border:none;align-items:baseline;gap:8px;padding:6px 8px;font-size:13px;display:flex}.rail-link:hover{background:var(--surface-2)}.rail-link .n{font-family:var(--font-mono);color:var(--faint);width:12px;font-size:11px}.rail-link .pct{font-family:var(--font-mono);color:var(--faint);margin-left:auto;font-size:11px}.rail-sec.totals{border-top:1px solid var(--hair);padding-top:14px}.meter{background:var(--surface-2);border:1px solid var(--hair);height:4px}.meter i{background:var(--ok);height:100%;display:block}.tot-line{color:var(--muted);justify-content:space-between;margin:8px 0 6px;font-size:12px;display:flex}.tot-line b{font-family:var(--font-mono);color:var(--ink);font-weight:600}.map{max-width:1080px;padding:24px 32px 120px}.intro{border:1px solid var(--rule);background:var(--surface);margin-bottom:28px;padding:16px 18px}.intro h2{margin:0 0 6px;font-size:15px}.intro p{color:var(--muted);margin:0;font-size:13px;line-height:1.55}.axes{border:1px solid var(--rule);background:var(--surface);grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:0;margin-bottom:36px;display:grid}.axis{border-right:1px solid var(--hair);padding:14px 16px}.axis:last-child{border-right:none}.axis h3{margin:0 0 6px;font-size:13px}.axis p{color:var(--muted);margin:0 0 6px;font-size:12.5px;line-height:1.5}.axis .ex{font-family:var(--font-mono);color:var(--faint);font-size:11px;line-height:1.5}.layer{padding-bottom:26px;padding-left:28px;position:relative}.layer:before{content:"";border-left:1px solid var(--hair);position:absolute;top:8px;bottom:0;left:8px}.layer:last-child:before{height:26px;bottom:auto}.layer-h{z-index:4;background:var(--bg);border-bottom:1px solid var(--hair);align-items:center;gap:10px;margin-bottom:3px;padding:8px 0 6px;display:flex;position:sticky;top:0}.layer-h:before{content:"";background:var(--surface);border:1px solid var(--rule);width:9px;height:9px;position:absolute;top:14px;left:-24px}.layer-h .num{font-family:var(--font-mono);color:var(--faint);font-size:11px}.layer-h h2{margin:0;font-size:15px}.layer-h .count{font-family:var(--font-mono);color:var(--faint);margin-left:auto;font-size:11px}.layer-sub{color:var(--muted);margin:8px 0 12px;font-size:12.5px}.nodes{grid-template-columns:repeat(auto-fill,minmax(228px,1fr));gap:-1px 0;display:grid}.node{text-align:left;font:inherit;background:var(--surface);border:1px solid var(--hair);cursor:pointer;margin:0 -1px -1px 0;padding:9px 11px 9px 13px;position:relative}.node:hover{border-color:var(--rule);z-index:2}.node.sel{border-color:var(--accent);z-index:3}.node:before{content:"";background:0 0;width:3px;position:absolute;top:-1px;bottom:-1px;left:0}.node.st-learning:before{background:var(--accent)}.node.st-known:before{background:var(--ok)}.node.st-known{background:var(--ok-bg)}.node .ua{font-size:13px;line-height:1.35;display:block}.node .en{font-family:var(--font-mono);color:var(--faint);margin-top:3px;font-size:10.5px;display:block}.node .tier{align-items:flex-end;gap:1.5px;height:8px;display:flex;position:absolute;top:10px;right:9px}.node .tier i{background:var(--hair);width:2px;display:block}.node .tier i:first-child{height:3px}.node .tier i:nth-child(2){height:5.5px}.node .tier i:nth-child(3){height:8px}.node .tier i.on{background:var(--faint)}.node.core .ua:after{content:"◆";color:var(--accent);vertical-align:super;margin-left:4px;font-size:8px}.node.dim{opacity:.3}.legend{color:var(--faint);flex-wrap:wrap;gap:16px;margin-bottom:22px;font-size:11.5px;display:flex}.legend span{align-items:center;gap:5px;display:inline-flex}.legend i{border:1px solid var(--hair);width:9px;height:9px;display:inline-block}.legend i.k{background:var(--ok);border-color:var(--ok)}.legend i.l{background:var(--accent);border-color:var(--accent)}.glyph{color:var(--muted);flex:none;display:inline-flex}.glyph svg{width:18px;height:18px;display:block}.glyph.sm svg{width:14px;height:14px}.glyph.big svg{width:30px;height:30px}.glyph.big{color:var(--ink);margin-bottom:8px}.glyph.earned{color:var(--ok)}.axis .glyph.big{display:block}.badge-grid{grid-template-columns:1fr 1fr;display:grid}.badge{font:inherit;cursor:pointer;border:1px solid var(--hair);color:var(--faint);background:0 0;align-items:center;gap:6px;min-width:0;margin:0 -1px -1px 0;padding:6px 7px;display:flex}.badge:hover{border-color:var(--rule)}.badge .glyph svg{width:15px;height:15px}.badge .bt{text-align:left;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;line-height:1.2;overflow:hidden}.badge.on{color:var(--ok);background:var(--ok-bg);border-color:var(--ok);z-index:1}.badge.on .glyph{color:var(--ok)}.rail-sec.badges,.rail-sec.io{border-top:1px solid var(--hair);padding-top:14px}.rail-sec.io{flex-wrap:wrap;gap:2px;display:flex}.rail-sec.io .ghost-btn{padding:5px 8px;font-size:12px}.rail-link,.layer-h{align-items:center}.layer-tools{align-items:center;gap:6px;margin-left:auto;display:flex}.mini{font:inherit;border:1px solid var(--hair);color:var(--muted);cursor:pointer;background:0 0;padding:3px 8px;font-size:11px}.mini:hover{border-color:var(--rule);color:var(--ink)}.mini.done{color:var(--ok);border-color:var(--ok);background:var(--ok-bg)}.sheet-actions{gap:6px;margin-top:16px;display:flex}.quiz-card p.q{margin:4px 0 16px;font-size:17px;line-height:1.45}p.why{color:var(--muted);border-left:2px solid var(--hair);margin-top:12px;padding-left:10px;font-size:12.5px;line-height:1.55}.opts{flex-direction:column;display:flex}.opt{font:inherit;text-align:left;border:1px solid var(--hair);color:var(--ink);cursor:pointer;background:0 0;margin-bottom:-1px;padding:9px 11px;font-size:13.5px;line-height:1.4}.opt:not(:disabled):hover{border-color:var(--rule);z-index:1;position:relative}.opt.right{border-color:var(--ok);background:var(--ok-bg);color:var(--ok);z-index:2;position:relative}.opt.wrong{border-color:var(--warn);color:var(--warn);z-index:2;position:relative}.opt:disabled{cursor:default}@media (width<=900px){.layout,.layout.drawer-open{display:block}.layout>*{overflow:visible}.rail{border-right:none;border-bottom:1px solid var(--rule);padding-bottom:16px}.drawer{border-left:none;border-top:1px solid var(--rule)}.main{padding:18px 16px 60px}.topbar{gap:8px;padding:10px 16px}.crumb{flex-basis:100%}.layer-h{top:-1px}.nodes{grid-template-columns:1fr}}.main{max-width:1080px;padding:24px 32px 120px}.layout.drawer-open{grid-template-columns:264px 1fr 420px}.rail-link .rl-t{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.node.deep .en:after{content:" ●";color:var(--accent)}.intro.ok{border-color:var(--ok);background:var(--ok-bg)}.test-list{border:1px solid var(--rule);background:var(--surface);margin-top:22px}.test-card{border-bottom:1px solid var(--hair);align-items:center;gap:12px;padding:12px 16px;display:flex}.test-card:last-child{border-bottom:none}.test-card.done{background:var(--ok-bg)}.test-card.done .glyph{color:var(--ok)}.tc-txt{flex:1;min-width:0}.tc-txt h3{margin:0 0 2px;font-size:14px}.tc-txt p{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:12px;overflow:hidden}.tc-meta{align-items:center;gap:10px;display:flex}.tc-meta .sc{font-family:var(--font-mono);color:var(--faint);font-size:12px}.quiz-bar{align-items:center;gap:12px;margin-bottom:18px;display:flex}.qb-title{font-size:14px;font-weight:600}.qb-n{font-family:var(--font-mono);color:var(--faint);margin-left:auto;font-size:12px}.quiz-card{border:1px solid var(--rule);background:var(--surface);max-width:640px;padding:20px 22px}.review-h h3{margin:22px 0 8px;font-size:13px}.review{border:1px solid var(--hair);background:var(--surface);margin-bottom:-1px;padding:12px 14px}.review.ok{opacity:.6}.review .rq{margin:0 0 6px;font-size:13.5px}.review .ra{color:var(--ok);margin:0 0 2px;font-size:12.5px}.review .ra.wrong{color:var(--warn)}.review .why{margin-top:6px}.ego{border:1px solid var(--hair);background:var(--surface);padding:4px 4px 0}svg.egograph{width:100%;height:auto;display:block}.eedge{stroke:var(--hair);stroke-width:1px}.enode circle{fill:var(--surface);stroke:var(--rule);stroke-width:1.2px;cursor:pointer}.enode.st-learning circle{fill:var(--accent-bg);stroke:var(--accent)}.enode.st-known circle{fill:var(--ok-bg);stroke:var(--ok)}.enode.center circle{stroke:var(--ink);stroke-width:2px;cursor:default}.enum{font-family:var(--font-mono);fill:var(--faint);pointer-events:none;font-size:9px}.elabel{font-family:var(--sans);fill:var(--muted);pointer-events:none;font-size:10.5px}.enode:hover circle{stroke:var(--accent)}.enode:hover .elabel{fill:var(--ink)}.ego-note{color:var(--faint);margin:0;padding:0 6px 5px;font-size:10.5px}.rel button.axis-chip{color:var(--faint)}.lmeter{background:var(--hair);width:46px;height:3px;display:inline-block}.lmeter i{background:var(--ok);height:100%;display:block}.rail-link.here{background:var(--surface-2)}.rail-link.here .rl-t{font-weight:600}.rail-link{position:relative}.rail-link.here:before{content:"";background:var(--ink);width:2px;position:absolute;top:3px;bottom:3px;left:0}.node{transition:background .1s,border-color .1s}.node:hover{background:var(--surface-2)}.node.st-known:hover{background:var(--ok-bg)}.node.sel{border-color:var(--accent);background:var(--accent-bg)}.node.sel:before{background:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.node:focus-visible{z-index:4}.axis{transition:background .12s}.axis:hover{background:var(--surface-2)}.test-card{transition:background .12s}.test-card:not(.done):hover{background:var(--surface-2)}.opt{transition:border-color .1s,background .1s}.opt:not(:disabled):hover{background:var(--surface-2)}a.src{transition:background .1s}a.src:hover{background:var(--surface-2)}.badge{transition:background .1s}.badge:not(.on):hover{background:var(--surface-2)}.drawer{scroll-behavior:smooth}button.rail-h{width:100%;font:inherit;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:2px 0 8px;font-size:11px;display:flex}button.rail-h:hover{color:var(--ink)}button.rail-h .chev{width:8px;font-size:9px}.empty{border:1px dashed var(--hair);color:var(--faint);flex-wrap:wrap;align-items:center;gap:12px;padding:12px 14px;font-size:12.5px;display:flex}.layer-h.full .glyph{color:var(--ok)}.layer-h.full{border-bottom-color:var(--ok)}.layer.full:before{border-left-color:var(--ok)}.drawer-head{z-index:3;background:var(--surface);border-bottom:1px solid var(--hair);margin-top:-18px;padding-top:18px;padding-bottom:14px;position:sticky;top:-18px}.drawer-head .en-t{margin-bottom:12px}.drawer-head .state-row{margin-top:0}.drawer h4:first-of-type{margin-top:16px}.pdef{display:none}@media print{:root{--bg:#fff;--surface:#fff;--surface-2:#fff;--ink:#000}.topbar,.rail,.drawer,.layer-tools,.legend,.intro,.empty{display:none!important}.layout,.layout.drawer-open{display:block}.layout>*{overflow:visible}body{background:#fff}.main{max-width:none;padding:0}.axes{break-inside:avoid;border-color:#000}.layer{break-inside:auto;padding-left:0}.layer:before{display:none}.layer-h{break-after:avoid;border-bottom:1px solid #000;padding:12px 0 4px;position:static}.layer-h:before{display:none}.nodes{grid-template-columns:1fr 1fr}.node{break-inside:avoid;border-color:#bbb;padding:6px 8px;background:0 0!important}.node:before,.node .tier{display:none}.node .ua{font-size:11pt;font-weight:600}.node .en{font-size:8pt}.pdef{margin-top:3px;font-size:9.5pt;line-height:1.35;display:block}a[href]:after{content:""}}.scrim{display:none}@media (width<=1279px){.layout.drawer-open{grid-template-columns:264px 1fr}.drawer{z-index:30;border-left:1px solid var(--rule);width:min(420px,100%);position:fixed;top:0;bottom:0;right:0;overflow:auto}.scrim{z-index:29;background:#11111147;display:block;position:fixed;inset:0}:root[data-theme=dark] .scrim{background:#00000080}.drawer-head{top:0}}@media (width<=900px){.layout.drawer-open{display:block}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}.search{align-items:center;display:inline-flex;position:relative}.search input{font:inherit;border:1px solid var(--rule);background:var(--surface);width:190px;color:var(--ink);appearance:none;border-radius:0;padding:5px 26px 5px 9px;font-size:13px}.search input::placeholder{color:var(--faint)}.search input:focus{border-color:var(--accent);outline:none}.search .shortcut{pointer-events:none;font-family:var(--font-mono);color:var(--faint);border:1px solid var(--hair);padding:0 4px;font-size:10px;line-height:14px;position:absolute;right:7px}.search input:focus+.shortcut,.search input:not(:placeholder-shown)+.shortcut{display:none}.search input::-webkit-search-cancel-button{-webkit-appearance:none}.result-line{color:var(--muted);border-bottom:1px solid var(--hair);align-items:center;gap:12px;margin-bottom:18px;padding-bottom:12px;font-size:12.5px;display:flex}@media (width<=900px){.search{flex-basis:100%}.search input{width:100%}}@media print{.result-line{display:none}}.main.view-graph{max-width:none}.graph-wrap{border:1px solid var(--rule);background:var(--surface);margin:22px 0 14px;padding:10px}svg.radial{width:100%;height:auto;max-height:84vh;margin:0 auto;display:block}.band{fill:none;stroke:var(--rule);stroke-width:3px}.band-n{font-family:var(--font-mono);fill:var(--faint);font-size:12px}.chord{fill:none;stroke:var(--ink);stroke-width:.7px;opacity:.13}.chord.cross{opacity:.2}.chord.dim{opacity:.03}.chord.hot{stroke:var(--accent);stroke-width:1.4px;opacity:1}.rnode circle{fill:var(--surface);stroke:var(--rule);stroke-width:1.2px}.rnode .hit{fill:#0000;stroke:none;cursor:pointer}.rnode.st-learning circle{fill:var(--accent);stroke:var(--accent)}.rnode.st-known circle{fill:var(--ok);stroke:var(--ok)}.rnode.core circle{r:4.6;stroke-width:1.8px}.rnode.sel circle{stroke:var(--accent);stroke-width:2.4px}.rlabel{font-family:var(--sans);fill:var(--muted);pointer-events:none;font-size:10.5px}.rnode.dim{opacity:.18}.rnode:hover .rlabel,.rnode.sel .rlabel{fill:var(--ink);font-weight:600}.rnode:hover circle{stroke:var(--accent)}@media (width<=900px){svg.radial{max-height:none}.rlabel{font-size:13px}}@media print{.graph-wrap{break-inside:avoid}}.main.view-node{max-width:1180px}.np-bar{align-items:center;gap:14px;margin-bottom:22px;display:flex}.crumb-link{font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:none;align-items:center;gap:6px;padding:0;font-size:12.5px;display:inline-flex}.crumb-link:hover{color:var(--ink)}.np{border:1px solid var(--rule);background:var(--surface)}.np-head{border-bottom:1px solid var(--hair);padding:26px 30px 20px}.np-head h1{letter-spacing:-.01em;margin:0 0 6px;font-size:30px;line-height:1.15}.np-meta{font-family:var(--font-mono);color:var(--faint);margin:0 0 18px;font-size:12px}.np-head .state-row{max-width:420px;margin:0}.np-body{grid-template-columns:minmax(0,1fr) 320px;display:grid}.np-col{border-right:1px solid var(--hair);min-width:0;padding:22px 30px 30px}.np-side{min-width:0;padding:22px 24px 30px}.np h4{letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin:22px 0 6px;font-size:11px;font-weight:600}.np-col>h4:first-child,.np-side>h4:first-child{margin-top:0}.np p{max-width:68ch;margin:0;font-size:15px;line-height:1.65}.np p.lead{font-size:17px;line-height:1.55}.np .check p{font-size:14.5px}.np .soon{border-left:2px solid var(--hair);color:var(--faint);margin-top:24px;padding:2px 0 2px 12px;font-size:13px;line-height:1.55}.np-nav{border-top:1px solid var(--hair);grid-template-columns:1fr 1fr;display:grid}.np-navbtn{font:inherit;text-align:left;cursor:pointer;border:none;border-right:1px solid var(--hair);background:0 0;flex-direction:column;gap:3px;min-width:0;padding:14px 22px;display:flex}.np-navbtn:last-child{text-align:right;border-right:none;align-items:flex-end}.np-navbtn:hover{background:var(--surface-2)}.np-navbtn.off{opacity:.35;cursor:default}.np-navbtn .l{color:var(--faint);letter-spacing:.06em;text-transform:uppercase;font-size:11px}.np-navbtn .t{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:14px;overflow:hidden}@media (width<=1000px){.np-body{grid-template-columns:1fr}.np-col{border-right:none;border-bottom:1px solid var(--hair)}.np-head{padding:20px 20px 16px}.np-head h1{font-size:24px}.np-col,.np-side{padding:18px 20px 24px}}@media print{.np-bar,.np-nav,.np-side,.state-row{display:none!important}.np{border:none}}.state-row{display:flex}.state-row button{font:inherit;border:1px solid var(--rule);color:var(--muted);cursor:pointer;background:0 0;border-right:none;flex:1;padding:8px 0;font-size:13px}.state-row button:last-child{border-right:1px solid var(--rule)}.state-row button:hover{background:var(--surface-2);color:var(--ink)}.state-row button.on{background:var(--ink);color:var(--surface);border-color:var(--ink)}.check{border:1px solid var(--accent);background:var(--accent-bg);padding:14px 16px}.check p{margin:0 0 12px}.sources{flex-direction:column;display:flex}a.src{border:1px solid var(--hair);color:var(--ink);margin-bottom:-1px;padding:9px 11px;text-decoration:none;transition:background .1s;display:block}a.src:hover{background:var(--surface-2);border-color:var(--rule);z-index:1;position:relative}a.src .st{color:var(--accent);font-size:13px;display:block}a.src .sn{color:var(--muted);margin-top:2px;font-size:12px;line-height:1.45;display:block}a.src .sh{font-family:var(--font-mono);color:var(--faint);margin-top:3px;font-size:10.5px;display:block}.rel{flex-wrap:wrap;gap:6px;display:flex}.rel button{font:inherit;border:1px solid var(--hair);color:var(--accent);cursor:pointer;background:0 0;padding:5px 9px;font-size:12.5px}.rel button:hover{border-color:var(--rule);background:var(--surface-2)}.rel button.axis-chip{color:var(--faint);cursor:default}.xp{max-width:68ch}.xp p{margin:0 0 14px}.xp h5{color:var(--ink);margin:24px 0 8px;font-size:15px;font-weight:600}.xp-list{margin:0 0 14px;padding-left:20px}.xp-list li{margin-bottom:5px;font-size:15px;line-height:1.6}.xp-note{border-left:2px solid var(--accent);background:var(--accent-bg);margin:0 0 16px;padding:10px 14px;font-size:14px;line-height:1.6}.xp-ex{font-family:var(--font-mono);border:1px solid var(--hair);color:var(--muted);white-space:pre-wrap;margin:0 0 16px;padding:10px 12px;font-size:12.5px;line-height:1.6}.xp-cmp{border:1px solid var(--hair);grid-template-columns:1fr 1fr;margin:0 0 16px;font-size:14px;line-height:1.55;display:grid}.xp-cmp>div{border-right:1px solid var(--hair);border-bottom:1px solid var(--hair);padding:8px 11px}.xp-cmp>div:nth-child(2n){border-right:none}.xp-cmp>.xh{letter-spacing:.06em;text-transform:uppercase;color:var(--faint);background:var(--surface-2);font-size:11px}
