:root{--bg:#f7f1e5;--bg-panel:#fffaf0;--ink:#46403a;--ink-dim:#7a6a55;--line:#e4d7c0;--line-dark:#d3c3a6;--orange:#e0913e;--green:#7fa470;--blue:#7d9cc0;--red:#c9705f;--pink:#d494a8;--teal:#6fae9c;--orange-text:#9b5c1a;--green-text:#537545;--blue-text:#4e6f94;--pink-text:#9d566d;--red-text:#ac4e3e;--px:4px;--ease-out:cubic-bezier(.16, 1, .3, 1);--dur-tap:.12s;--dur-state:.24s;--dur-scene:.48s;--dur-focal:.7s}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:ui-monospace,Cascadia Mono,Microsoft YaHei,monospace;line-height:1.9;overflow-x:hidden}body:after{content:"";pointer-events:none;z-index:999;background:repeating-linear-gradient(0deg,#0000 0 3px,#46403a06 3px 6px);position:fixed;inset:0}::selection{background:var(--orange);color:#fff}section{max-width:860px;margin:0 auto;padding:96px 24px}h2.sec-title{color:var(--orange-text);letter-spacing:.1em;margin-bottom:8px;font-size:1.4rem}h2.sec-title:before{content:"▚ ";color:var(--green-text)}.sec-sub{color:var(--ink-dim);margin-bottom:40px;font-size:.85rem}.panel{background:var(--bg-panel);border:var(--px) solid var(--line);box-shadow:var(--px) var(--px) 0 var(--line-dark);padding:24px}.draft-chip{color:#fff;background:var(--pink-text);letter-spacing:.1em;margin-bottom:12px;padding:1px 8px;font-size:.68rem;display:inline-block}#title-screen{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:18px;max-width:none;min-height:100svh;display:flex}#title-screen h1{color:var(--ink);text-shadow:var(--px) var(--px) 0 var(--orange);letter-spacing:.12em;font-size:clamp(2.2rem,7vw,4rem)}#title-screen .tagline{color:var(--ink);font-size:1.02rem}#title-screen .tagline .hl{color:var(--orange-text)}.tags{flex-wrap:wrap;justify-content:center;gap:8px 12px;max-width:640px;display:flex}.tags a{color:var(--ink-dim);border:2px solid var(--line);background:var(--bg-panel);transition:color var(--dur-tap) steps(2), background-color var(--dur-tap) steps(2), border-color var(--dur-tap) steps(2), transform var(--dur-tap) steps(2);padding:2px 10px;font-size:.78rem;text-decoration:none}.tags a:hover{color:#fff;background:var(--green);border-color:var(--green)}.tags a.past{color:var(--ink-dim);text-decoration:line-through;text-decoration-color:var(--orange);background:0 0;border-style:dashed;text-decoration-thickness:2px}.tags a.past:hover{color:#fff;background:var(--ink-dim);border-color:var(--ink-dim);text-decoration-color:#fff}.tags a.now{color:var(--ink);border-color:var(--green);box-shadow:2px 2px 0 var(--green)}.press-start{color:var(--orange-text);cursor:pointer;background:0 0;border:none;margin-top:24px;font-family:inherit;font-size:1rem;animation:1.2s steps(2,end) infinite blink}@keyframes blink{50%{opacity:0}}.hint{color:var(--ink-dim);font-size:.75rem}#intro p{margin-bottom:1.2em}#intro .kw{color:var(--orange-text)}.curve-wrap{margin:36px 0 8px}.curve-wrap svg{width:100%;height:auto;display:block}.curve-note{color:var(--ink-dim);text-align:right;margin-top:4px;font-size:.72rem}.act-banner{background:var(--orange);color:#332a1e;letter-spacing:.12em;box-shadow:var(--px) var(--px) 0 var(--line-dark);margin:64px 0 8px;padding:4px 16px;font-size:.9rem;display:inline-block}.act-sub{color:var(--ink-dim);margin-bottom:24px;font-size:.75rem}.chapter{opacity:.3;filter:grayscale();transition:opacity var(--dur-scene) var(--ease-out), filter var(--dur-scene) var(--ease-out), transform var(--dur-scene) var(--ease-out);grid-template-columns:56px 1fr;gap:20px;margin:48px 0;display:grid;transform:translateY(14px)}.chapter.lit{opacity:1;filter:none;transform:none}.chapter .node{border:var(--px) solid var(--line-dark);background:var(--bg-panel);justify-content:center;align-items:center;width:40px;height:40px;font-size:1.1rem;display:flex}.chapter.lit .node{border-color:var(--green);box-shadow:2px 2px 0 var(--green)}.chapter .rail{background:var(--line);width:4px;min-height:40px;margin:6px auto 0}.chapter-head .tag{color:var(--orange-text);letter-spacing:.15em;font-size:.7rem}.chapter-head .tag.side{color:var(--blue-text)}.chapter.is-side{margin-left:30px}.chapter.is-side .node{border-style:dashed;border-color:var(--blue);width:34px;height:34px;font-size:.95rem}.chapter.is-side.lit .node{border-color:var(--blue);box-shadow:2px 2px 0 var(--blue)}.chapter.is-side .rail{border-left:4px dashed var(--line);background:0 0;width:0}.chapter.is-side .chapter-head h3{color:#5f5850;font-size:1.02rem}.chapter.is-side p{font-size:.85rem}.side-badge{letter-spacing:.12em;color:#fff;background:var(--blue-text);vertical-align:middle;margin-left:8px;padding:0 6px;font-size:.6rem;display:inline-block}.chapter-head h3{color:var(--ink);margin:2px 0;font-size:1.15rem}.chapter-head .meta{color:var(--ink-dim);margin-bottom:10px;font-size:.78rem}.chapter p{color:#6b6256;margin-bottom:.4em;font-size:.9rem}.chapter .peak{color:var(--orange-text)}.tags-past{margin-top:20px}.tags-now{margin-top:10px}.tags-past a.past{color:var(--ink-dim);text-decoration:line-through;text-decoration-color:var(--orange);border:2px dashed var(--line-dark);background:0 0;text-decoration-thickness:2px}.tags-now a.now{color:var(--ink);border:2px solid var(--green);box-shadow:2px 2px 0 var(--green);background:var(--bg-panel)}.skill-list{display:none}.starmap{border:var(--px) solid var(--line);box-shadow:var(--px) var(--px) 0 var(--line-dark);background:radial-gradient(60% 55%,#fffdf7 0%,#fdf6e6 60%,#f4ecd9 100%);margin-top:20px;position:relative}.starmap svg{width:100%;height:auto;display:block}.snode{cursor:help;transition:r .12s,opacity .2s}.snode.lit:hover,.snode.learning:hover,.snode.locked:hover{opacity:1}.snode.lit:hover{r:9}.snode.locked:hover{opacity:1}.star-tip{z-index:30;pointer-events:none;will-change:transform;background:var(--ink);color:#f7f1e5;border:2px solid var(--c,var(--orange));max-width:220px;animation:tip-in var(--dur-tap) var(--ease-out);padding:7px 10px;font-size:.74rem;line-height:1.6;position:fixed;top:0;left:0;box-shadow:3px 3px #00000026}.star-tip b{color:#fff}.tree-legend2{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:8px 16px;margin-top:6px;font-size:.78rem;display:flex}.tree-legend2 .lg{align-items:center;gap:6px;display:inline-flex}.tree-legend2 .lg:before{content:"";border-radius:50%;width:11px;height:11px;display:inline-block}.tree-legend2 .lg.lit:before{background:var(--blue)}.tree-legend2 .lg.learning:before{background:var(--bg-panel);border:2px dashed var(--pink)}.tree-legend2 .lg.locked:before{background:var(--bg-panel);border:1.5px solid var(--line-dark)}.tree-legend2 .lg-note{color:var(--ink-dim);opacity:.8}.sl-branch{border:var(--px) solid var(--line);box-shadow:var(--px) var(--px) 0 var(--line-dark);background:var(--bg-panel);--bc:var(--ink);--bct:var(--ink);margin-top:18px;padding:12px 13px 14px}.sl-tech{--bc:var(--blue);--bct:var(--blue-text)}.sl-craft{--bc:var(--pink);--bct:var(--pink-text)}.sl-biz{--bc:var(--orange);--bct:var(--orange-text)}.sl-head{border-bottom:2px solid var(--line);justify-content:space-between;align-items:baseline;margin-bottom:10px;padding-bottom:7px;display:flex}.sl-head .sl-name{color:var(--bct);font-size:1.05rem}.sl-head .sl-cnt{color:var(--ink-dim);font-size:.72rem}.sl-sub{grid-template-columns:62px 1fr;align-items:start;gap:8px;margin:9px 0;display:grid}.sl-subname{color:var(--ink-dim);padding-top:3px;font-size:.74rem}.sl-chips{flex-wrap:wrap;gap:5px;display:flex}.sl-chip{border:1.5px solid var(--bc);border-radius:2px;padding:1px 8px;font-size:.74rem;line-height:1.5}.sl-chip.lit{background:var(--bct);color:#fff;border-color:var(--bct)}.sl-chip.learning{color:var(--bct);background:0 0;border-style:dashed}.sl-chip.locked{color:var(--ink-dim);border-color:var(--line-dark);opacity:.55}#map .map-grid{justify-content:center;gap:2px;margin:32px 0 20px;display:grid}#map .cell{background:#efe7d6;width:16px;height:16px}#map .cell.land{background:var(--line-dark)}#map .cell.lit-R{background:var(--green)}#map .cell.lit-E{background:var(--blue)}#map .cell.lit-N{background:var(--orange)}#map .cell.lit-A{background:var(--pink)}#map .cell.lit-O{background:var(--teal)}#map .cell:hover{outline:2px solid var(--ink);cursor:crosshair}.map-stats{text-align:center;color:var(--ink-dim);margin-bottom:24px;font-size:.85rem}.map-stats b{color:var(--green-text)}.legend{flex-wrap:wrap;justify-content:center;gap:10px 18px;display:flex}.legend .item{color:var(--ink-dim);cursor:default;align-items:center;gap:6px;font-size:.8rem;display:inline-flex}.legend .sw{background:var(--line-dark);width:12px;height:12px;display:inline-block}.legend .item.v{color:var(--ink)}.china-bar{margin-top:36px}.china-bar .row{color:var(--ink-dim);justify-content:space-between;margin-bottom:6px;font-size:.8rem;display:flex}.china-bar .row b{color:var(--orange-text)}.china-track{border:3px solid var(--line-dark);background:var(--bg-panel);height:14px;padding:2px}.china-fill{background:repeating-linear-gradient(90deg, var(--orange) 0 8px, #eaa95c 8px 16px);height:100%}.china-note{color:var(--ink-dim);margin-top:10px;font-size:.78rem}.china-note .lock{color:var(--red-text)}#map-tip{text-align:center;min-height:2.2em;color:var(--green-text);margin-top:14px;font-size:.85rem}#inventory .grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px;display:grid}.slot{border:var(--px) solid var(--line);background:var(--bg-panel);box-shadow:var(--px) var(--px) 0 var(--line-dark);padding:18px;transition:border-color .2s,transform .2s steps(2,end)}.slot:hover{border-color:var(--green)}.slot .icon{font-size:1.6rem}.slot .kind{color:var(--orange-text);letter-spacing:.1em;margin-top:6px;font-size:.68rem}.slot h3{margin:2px 0 8px;font-size:1rem}.slot p{color:#6b6256;font-size:.8rem;line-height:1.7}.slot a{color:var(--green-text);font-size:.78rem;text-decoration:none}.slot a:hover{text-decoration:underline}.slot .todo{color:var(--ink-dim);font-size:.78rem}#links ul{list-style:none}#links li{border-bottom:2px dashed var(--line-dark);align-items:center;gap:14px;padding:14px 4px;font-size:.92rem;display:flex}#links .dot{background:var(--green);width:10px;height:10px}#links .dot.off{background:var(--line-dark)}#links a{color:var(--ink);text-decoration:none}#links a:hover{color:var(--orange-text)}#links .tag{color:var(--ink-dim);margin-left:auto;font-size:.72rem}footer{text-align:center;color:var(--ink-dim);padding:60px 20px 80px;font-size:.72rem}footer .c{color:var(--orange-text)}@media (width<=720px){.starmap{display:none}.skill-list{display:block}}@media (width<=560px){section{padding:clamp(48px,12vw,64px) 16px}#map{overflow-x:auto}.map-grid{min-width:max-content}#map .cell{width:11px;height:11px}.chapter{grid-template-columns:40px 1fr;gap:11px}.chapter.is-side{margin-left:12px}.sl-sub{grid-template-columns:1fr;gap:3px}.sl-subname{padding-top:0}}a:focus-visible,button:focus-visible{outline:3px solid var(--orange);outline-offset:2px}.press-start:hover,.press-start:focus-visible{opacity:1;animation-play-state:paused;transform:translateY(-2px)}.curve-wrap.curve-anim path{stroke-dasharray:1;stroke-dashoffset:1px}.curve-wrap.curve-anim circle,.curve-wrap.curve-anim text{opacity:0}.curve-wrap.curve-anim.drawn path{stroke-dashoffset:0;transition:stroke-dashoffset var(--dur-focal) var(--ease-out) .1s}.curve-wrap.curve-anim.drawn circle,.curve-wrap.curve-anim.drawn text{opacity:1;transition:opacity var(--dur-state) var(--ease-out) .58s}@keyframes tip-in{0%{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.curve-wrap.curve-anim path{stroke-dashoffset:0}.curve-wrap.curve-anim circle,.curve-wrap.curve-anim text{opacity:1}.chapter{transform:none}}@media (hover:hover) and (pointer:fine){.tags a:hover{transform:translateY(-2px)}.slot:hover{transform:translate(-2px,-2px)}}.press-start:active{transform:translateY(2px)}.tags a:active{transform:translateY(1px)}.curve-wrap a circle{transition:r var(--dur-tap) var(--ease-out)}.curve-wrap a:hover circle,.curve-wrap a:focus-visible circle{r:9}.china-fill{transform-origin:0;transform:scaleX(0)}.china-bar.charged .china-fill{transition:transform .6s steps(12,end);transform:scaleX(1)}@media (prefers-reduced-motion:reduce){.china-fill{transform:scaleX(1)}}.china-bar:not(.js) .china-fill{transform:scaleX(1)}
