@font-face{font-family:Martian Mono;src:url(/assets/MartianMono-latin-var-1TqSgyfh.woff2)format("woff2");font-weight:100 800;font-stretch:75% 112.5%;font-display:swap}:root{--si-ground:#0d0f12;--si-raised:#12161b;--si-substrate:#1a1c20;--si-silicon:#8e949c;--si-oxide:#5b6572;--si-nitride:#d9d2c3;--si-text:#e8e3d8;--si-text-dim:#9a968d;--si-text-faint:#8a867e;--hairline:#8e949c4d;--hairline-strong:#d9d2c34d;--paper:#f4f1ea;--paper-sunk:#ebe6db;--ink:#1b1d21;--ink-dim:#54575d;--ink-faint:#6b6d72;--paper-hairline:#5b65724d;--h:#e0894d;--s:#6aa9e0;--w:#e0678a;--tool:#b9b2a3;--h-ink:#9c4a12;--s-ink:#235f97;--w-ink:#a3284f;--tool-ink:#54575d;--m0:0;--m1:.25;--m2:.5;--m3:.8;--m4:1;--destructive:#d8574a;--cjk:"PingFang TC", "Noto Sans CJK TC", "Microsoft JhengHei", sans-serif;--mono:"Martian Mono", ui-monospace, "SF Mono", Menlo, monospace;--serif:ui-serif, "New York", Georgia, serif;--sans-en:ui-sans-serif, -apple-system, "Segoe UI", system-ui, sans-serif;--fs-body:15px;--fs-1:calc(var(--fs-body) * 1.25);--fs-2:calc(var(--fs-body) * 1.5625);--fs-3:calc(var(--fs-body) * 1.953);--fs-4:calc(var(--fs-body) * 2.441);--fs-sm:calc(var(--fs-body) / 1.25);--fs-xs:max(10.5px, calc(var(--fs-body) / 1.5625));--lh-zh:1.75;--lh-en:1.55;--radius-control:2px;--gutter:16px;--panel-w:360px;--header-h:52px;--ease:cubic-bezier(.65, 0, .35, 1);--zoom-ms:.6s;--light-ms:.9s}@media (min-width:900px){:root{--fs-body:17px;--gutter:24px;--header-h:56px}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background:var(--si-ground)}body{background-color:var(--si-ground);min-height:100dvh;color:var(--si-text);font-family:var(--cjk);font-size:var(--fs-body);font-synthesis:none;-webkit-font-smoothing:antialiased;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.85 0 0 0 0 0.82 0 0 0 0 0.76 0 0 0 0.035 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");margin:0;line-height:1.6}:lang(en) body,body:lang(en){font-family:var(--sans-en)}#root{min-height:100dvh}a{color:inherit}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--si-nitride);outline-offset:2px}[data-theme=paper] :focus-visible{outline-color:var(--ink)}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:.06em}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.skip-link{left:var(--gutter);z-index:100;background:var(--si-nitride);color:var(--si-ground);border-radius:var(--radius-control);padding:10px 14px;text-decoration:none;position:absolute;top:-100px}.skip-link:focus{top:8px}.btn{appearance:none;border:1px solid var(--hairline-strong);border-radius:var(--radius-control);min-height:44px;color:var(--si-text);letter-spacing:.06em;cursor:pointer;white-space:nowrap;background:0 0;justify-content:center;align-items:center;gap:10px;padding:0 18px;font-weight:600;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--si-nitride)}.btn[disabled]{cursor:default;opacity:.45}.btn-primary{background:var(--si-nitride);border-color:var(--si-nitride);color:var(--si-ground)}.btn-quiet{color:var(--si-text-dim);border-color:#0000;padding:0 10px;font-weight:500}.btn-quiet:hover{color:var(--si-text);text-underline-offset:4px;border-color:#0000;text-decoration:underline}[data-theme=paper] .btn{color:var(--ink);border-color:var(--paper-hairline)}[data-theme=paper] .btn:hover{border-color:var(--ink)}[data-theme=paper] .btn-primary{background:var(--ink);border-color:var(--ink);color:var(--paper)}[data-theme=paper] .btn-quiet{color:var(--ink-dim);border-color:#0000}[data-theme=paper] .btn-quiet:hover{color:var(--ink)}.btn-destructive{border-color:var(--destructive);color:var(--destructive)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important}}.app{flex-direction:column;min-height:100dvh;display:flex}main{flex-direction:column;flex:1;min-height:0;display:flex}main:focus{outline:none}.app-header{z-index:20;height:var(--header-h);padding:0 var(--gutter);border-bottom:1px solid var(--hairline);background:var(--si-ground);align-items:center;gap:16px;display:flex;position:sticky;top:0}.wordmark{white-space:nowrap;align-self:center;align-items:baseline;gap:10px;min-height:44px;padding-top:11px;text-decoration:none;display:flex}.wordmark b{letter-spacing:.08em;font-size:17px;font-weight:600}:lang(en) .wordmark b{letter-spacing:.01em;font-size:15px}.wordmark span{color:var(--si-text-dim);text-transform:uppercase;letter-spacing:.14em;font-size:10.5px}.crumbs{min-width:0;color:var(--si-text-dim);align-items:center;gap:6px;font-size:13px;display:flex;overflow:hidden}.crumbs a,.crumbs button{all:unset;cursor:pointer;white-space:nowrap;padding:4px 2px}.crumbs a:hover,.crumbs button:hover,.crumbs a:focus-visible,.crumbs button:focus-visible{color:var(--si-text);text-underline-offset:4px;text-decoration:underline}.crumbs a:focus-visible,.crumbs button:focus-visible{outline:2px solid var(--si-nitride);outline-offset:2px}.crumbs .sep{color:var(--si-text-faint)}.crumbs .here{color:var(--si-text);white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.spacer{flex:1}.header-nav{align-items:center;gap:8px;display:flex}.header-link{min-height:44px;color:var(--si-text-dim);white-space:nowrap;align-items:center;padding:0 8px;font-size:13px;text-decoration:none;display:inline-flex}.header-link:hover{color:var(--si-text);text-underline-offset:4px;text-decoration:underline}.lang{border:1px solid var(--hairline-strong);border-radius:var(--radius-control);display:flex}.lang button{all:unset;cursor:pointer;min-width:36px;min-height:34px;font:500 11px var(--mono);color:var(--si-text-dim);place-items:center;display:grid}.lang button[aria-pressed=true]{color:var(--si-ground);background:var(--si-nitride)}.lang button:focus-visible{outline:2px solid var(--si-nitride);outline-offset:2px}@media (max-width:699px){.app-header{height:auto;min-height:var(--header-h);flex-wrap:wrap;gap:0 8px}.app-header .wordmark{min-height:var(--header-h);align-items:center;padding-top:0}.crumbs{flex:1 0 100%;order:10;margin:-6px 0 8px;font-size:12.5px}.header-nav{min-height:var(--header-h)}}@media (max-width:379px){.wordmark b{letter-spacing:.04em;font-size:15px}:lang(en) .wordmark b{white-space:normal;max-width:8.5em;font-size:13px;line-height:1.15;display:block}.header-link{padding:0 4px}}[data-theme=paper]{background:var(--paper);color:var(--ink)}[data-theme=paper] .app-header{background:var(--paper);border-bottom-color:var(--paper-hairline)}[data-theme=paper] .wordmark span,[data-theme=paper] .crumbs,[data-theme=paper] .header-link,[data-theme=paper] .lang button{color:var(--ink-dim)}[data-theme=paper] .crumbs .here,[data-theme=paper] .crumbs a:hover,[data-theme=paper] .header-link:hover{color:var(--ink)}[data-theme=paper] .crumbs .sep{color:var(--ink-faint)}[data-theme=paper] .lang{border-color:var(--paper-hairline)}[data-theme=paper] .lang button[aria-pressed=true]{background:var(--ink);color:var(--paper)}[data-theme=paper] .crumbs a:focus-visible,[data-theme=paper] .lang button:focus-visible{outline-color:var(--ink)}.page-status{margin:48px var(--gutter);font-size:var(--fs-xs);color:var(--si-text-dim);letter-spacing:.12em}[data-theme=paper] .page-status{color:var(--ink-dim)}.route-home{height:100dvh;overflow:hidden}.home{grid-template-columns:minmax(0, 1fr) var(--panel-w);flex:1;min-height:0;display:grid}.map-wrap{grid-template-rows:minmax(0,1fr) auto;min-width:0;min-height:0;display:grid;position:relative}.map-stage{min-height:0;position:relative}.map-stage:after{content:"";pointer-events:none;background-image:inherit;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.85 0 0 0 0 0.82 0 0 0 0 0.76 0 0 0 0.04 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");position:absolute;inset:0}.map-stage svg.map{position:absolute;inset:0}.map-status{left:var(--gutter);font-size:var(--fs-xs);color:var(--si-text-dim);margin:0;position:absolute;bottom:12px}.map-status.error{font-family:inherit;font-size:var(--fs-sm);color:var(--si-text);max-width:36em}.map-bar{min-height:38px;padding:8px var(--gutter);border-top:1px solid var(--hairline);flex-wrap:wrap;align-items:center;gap:6px 16px;display:flex}.legend{color:var(--si-text-dim);flex-wrap:wrap;gap:4px 16px;margin:0;padding:0;font-size:10.5px;list-style:none;display:flex}.legend i{vertical-align:middle;background:var(--c);width:18px;height:2px;margin-right:6px;display:inline-block}.zoom-hint{color:var(--si-text-faint);white-space:nowrap;margin:0 0 0 auto;font-size:10.5px}.hint-touch{display:none}@media (hover:none){.hint-keys{display:none}.hint-touch{display:inline}}.sheet{border-left:1px solid var(--hairline);background:var(--si-ground);flex-direction:column;min-height:0;display:flex}.sheet-body{overscroll-behavior:contain;min-height:0;overflow:auto}.grabber,.sheet-legend{display:none}.today{padding:20px var(--gutter) 24px}.today h2{letter-spacing:.12em;margin:0 0 4px;font-size:13px;font-weight:600}.meta{color:var(--si-text-dim);margin:0;font-size:10.5px}.today-empty{color:var(--si-text-dim);font-size:var(--fs-sm);margin:16px 0 0}.queue{margin:16px 0 0;padding:0;list-style:none}.queue li{border-top:1px solid var(--hairline)}.queue li:last-child{border-bottom:1px solid var(--hairline)}.queue-item{grid-template-columns:3px minmax(0,1fr) auto;align-items:start;gap:14px;padding:14px 0;text-decoration:none;display:grid}.queue-item:hover .q-title{text-underline-offset:4px;text-decoration:underline}.queue-item:focus-visible{outline-offset:-2px}.swatch{background:var(--c);align-self:stretch;width:3px}.queue-body{flex-direction:column;min-width:0;display:flex}.q-kind{color:var(--si-text-dim);letter-spacing:.1em;font-size:10px}.q-title{margin-top:3px;font-size:14.5px;line-height:1.5}.q-time{color:var(--si-text-dim);white-space:nowrap;padding-top:1px;font-size:11px}.start{letter-spacing:.12em;width:100%;min-height:48px;margin-top:18px}.detail{padding:20px var(--gutter) 22px;border-bottom:1px solid var(--hairline)}.detail-head{justify-content:space-between;align-items:center;gap:12px;margin:-10px 0 0;display:flex}.detail-kind{color:var(--c);letter-spacing:.12em;margin:0;font-size:12px;font-weight:600}.detail-close{min-height:40px;margin-right:-10px;font-size:12px}.detail-title{font-size:var(--fs-1);margin:2px 0;font-weight:600;line-height:1.35}.detail-secondary{color:var(--si-text-dim);letter-spacing:.03em;margin:0;font-size:11px}.detail-rows{grid-template-columns:auto minmax(0,1fr);gap:7px 16px;margin:16px 0 0;font-size:13px;display:grid}.detail-rows dt{font:400 10.5px var(--mono);color:var(--si-text-dim);letter-spacing:.08em;padding-top:2px}.detail-rows dd{margin:0}.strand-code{color:var(--c);font-size:11px}.detail-action{width:100%;margin-top:18px}.detail-note{color:var(--si-text-dim);margin:16px 0 0;font-size:13px}.meter{color:var(--c);gap:3px;margin-top:5px;display:flex}.meter span{opacity:.9;border:1px solid;width:22px;height:6px}.meter span.on{background:currentColor}@media (max-width:899px){.home{grid-template-columns:minmax(0,1fr)}.wordmark span{display:none}.map-wrap{grid-template-rows:minmax(0,1fr);padding-bottom:96px}.map-bar{display:none}.sheet-legend{padding:0 var(--gutter) 24px;display:block}.sheet-legend .legend{border-top:1px solid var(--hairline);flex-direction:column;gap:8px;padding-top:16px}.sheet{z-index:30;height:calc(100dvh - var(--header-h) - 8px);border-left:0;border-top:1px solid var(--hairline-strong);transition:transform .35s var(--ease);padding-bottom:env(safe-area-inset-bottom);position:fixed;bottom:0;left:0;right:0}.sheet.detent-peek{transform:translateY(calc(100% - 96px))}.sheet.detent-half{transform:translateY(50%)}.sheet.detent-full{transform:none}.sheet.dragging{transition:none}.grabber{all:unset;cursor:grab;touch-action:none;flex:none;width:100%;height:28px;position:relative}.grabber:after{content:"";background:var(--si-text-faint);width:36px;height:3px;margin-left:-18px;position:absolute;top:12px;left:50%}.grabber:focus-visible{outline:2px solid var(--si-nitride);outline-offset:-4px}.today{padding-top:0}.detail{padding-top:6px}.detail-head{margin-top:0}}.course-page,.me-page,.message{width:100%;max-width:880px;padding:40px var(--gutter) 64px;margin:0 auto}.course-strand{color:var(--si-text-dim);letter-spacing:.12em;margin:0 0 14px;font-size:11px}.strand-pill{border:1px solid var(--c);color:var(--c);border-radius:999px;padding:3px 10px;display:inline-block}.course-head h1,.me-page h1,.message h1{font-size:var(--fs-4);letter-spacing:.04em;text-wrap:balance;margin:0;font-weight:600;line-height:1.2}:lang(en) .course-head h1,:lang(en) .me-page h1,:lang(en) .message h1{letter-spacing:-.01em}.course-head h1:focus,.me-page h1:focus,.message h1:focus{outline:none}.course-secondary{color:var(--si-text-dim);margin:8px 0 0;font-size:12px}.course-facts{border-top:1px solid var(--hairline);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:0;margin:32px 0 0;display:grid}.course-facts>div{border-bottom:1px solid var(--hairline);padding:12px 16px 12px 0}.course-facts dt{color:var(--si-text-dim);letter-spacing:.1em;font-size:10.5px}.course-facts dd{font-size:var(--fs-sm);color:var(--si-text);margin:4px 0 0}.unit{margin-top:48px}.unit h2{font-size:var(--fs-2);align-items:baseline;gap:14px;margin:0 0 12px;font-weight:600;line-height:1.3;display:flex}.unit-no{color:var(--c);letter-spacing:.12em;font-size:12px}.lesson-list{border-top:1px solid var(--hairline);margin:0;padding:0;list-style:none}.lesson-list li{border-bottom:1px solid var(--hairline)}.lesson-row{grid-template-columns:16px 44px minmax(0,1fr) auto auto;align-items:center;gap:14px;min-height:60px;padding:10px 4px 10px 14px;text-decoration:none;display:grid}.lesson-row:hover .lesson-title{text-underline-offset:4px;text-decoration:underline}.lesson-row:focus-visible{outline-offset:-2px}.is-next .lesson-row{box-shadow:inset 3px 0 0 var(--c)}.lesson-mark .ring{fill:var(--si-ground);stroke:var(--c);stroke-width:1.4px}.lesson-mark .fill{fill:var(--c)}.lesson-mark svg{display:block}.lesson-code{color:var(--si-text-dim);font-size:11px}.lesson-title{font-size:var(--fs-body);line-height:1.45}.next-tag{color:var(--c);letter-spacing:.12em;white-space:nowrap;margin-left:10px;font-size:10px}.lesson-state{color:var(--si-text-dim);white-space:nowrap;font-size:12.5px}.lesson-min{color:var(--si-text-dim);white-space:nowrap;text-align:right;min-width:44px;font-size:11px}.course-foot{margin:40px 0 0}.course-foot .btn-quiet{padding-left:0}@media (max-width:599px){.course-page,.me-page,.message{padding-top:28px}.lesson-row{grid-template-columns:16px minmax(0,1fr) auto;grid-template-areas:"mark code min""mark title title""mark state state";gap:2px 12px;padding:12px 2px 12px 12px}.lesson-mark{grid-area:mark;align-self:start;padding-top:4px}.lesson-code{grid-area:code}.lesson-title{grid-area:title}.lesson-state{white-space:normal;grid-area:state}.lesson-min{grid-area:min}}.me-page section{border-top:1px solid var(--hairline);margin-top:36px;padding-top:16px}.me-page h2{color:var(--si-text-dim);letter-spacing:.14em;margin:0 0 12px;font-size:11px;font-weight:500}.me-page p{max-width:38em;margin:0 0 14px;line-height:1.7}.me-page .dim,.dim{color:var(--si-text-dim)}.me-page .btn+.me-facts,.me-page p+.me-facts{margin-top:20px}.me-page .btn-quiet{padding-left:0}.me-facts{margin:0}.me-facts dt{color:var(--si-text-dim);letter-spacing:.08em;font-size:11px}.me-facts dd{overflow-wrap:anywhere;margin:4px 0 0;font-size:13px}.radio-row{flex-wrap:wrap;gap:10px;display:flex}.radio{border:1px solid var(--hairline-strong);border-radius:var(--radius-control);cursor:pointer;align-items:center;gap:10px;min-height:44px;padding:0 16px 0 12px;display:inline-flex}.radio:has(input:checked){border-color:var(--si-nitride)}.radio input{accent-color:var(--si-nitride);width:16px;height:16px;margin:0}.message p{color:var(--si-text-dim);max-width:36em;margin:16px 0 28px}svg.map{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;width:100%;height:100%;min-height:0;display:block}svg.map path,svg.map line{vector-effect:non-scaling-stroke}svg.map.xfade{animation:.28s ease-out map-xfade}@keyframes map-xfade{0%{opacity:.25}to{opacity:1}}.st-H{--c:var(--h)}.st-S{--c:var(--s)}.st-W{--c:var(--w)}.st-T{--c:var(--tool)}.stratum-rule{stroke:#d9d2c31a;stroke-width:1px}.stratum-code{font:500 10px var(--mono);fill:var(--si-text-faint);letter-spacing:.16em}.stratum-name{font:600 13px var(--cjk);fill:var(--si-text-dim);letter-spacing:.1em}:lang(en) .stratum-name{font-family:var(--sans-en);letter-spacing:.04em;font-size:12px}.strand-halo{fill:none;stroke:var(--c);stroke-width:10px;opacity:.16}.strand-line{fill:none;stroke:var(--c);stroke-width:1.6px;opacity:.85}.strand-current{fill:none;stroke:#fff4e6;stroke-width:2.2px;stroke-linecap:round;opacity:.5;stroke-dasharray:2 118;animation:6s linear infinite current}@keyframes current{to{stroke-dashoffset:-240px}}.tool-row{stroke:var(--tool);stroke-width:1px;opacity:.35}.root{fill:none;stroke:var(--c);stroke-width:1px;stroke-dasharray:1 4;opacity:0;transition:opacity .25s}.root.on{opacity:.8}.junction-mark{fill:none;stroke:var(--si-nitride);stroke-width:1px;opacity:.6}.junction-label{font:600 9.5px var(--mono);fill:var(--si-nitride);letter-spacing:.2em;text-transform:uppercase}.strands,.courses,.junctions,.roots,.units{transition:opacity .5s var(--ease)}.map .dim,.units.behind{opacity:.16;pointer-events:none}.layer-in{animation:layer-in .5s var(--ease) both}@keyframes layer-in{0%{opacity:0}}.node{cursor:pointer;outline:none}.node.inert{cursor:default}.node .hit{fill:#0000}.node .ring{fill:var(--si-ground);stroke:var(--c);stroke-width:1.4px}.node .fill{fill:var(--c)}.node .bloom{fill:var(--c);opacity:.5}.node .focus-ring{fill:none;stroke:var(--si-nitride);stroke-width:1px;stroke-dasharray:2 3;opacity:0;transition:opacity .15s}.node:focus-visible .focus-ring,.node:hover .focus-ring,.node.selected .focus-ring{opacity:1}.node:focus-visible .focus-ring{stroke-width:1.5px;stroke-dasharray:none}.node-label{font:500 12.5px var(--cjk);fill:var(--si-text);paint-order:stroke;stroke:var(--si-ground);stroke-width:4px;stroke-linejoin:round}:lang(en) .node-label{font-family:var(--sans-en);font-size:12px}.node-label.tool-label{font-size:11px}.node-sub{font:400 9px var(--mono);fill:var(--si-text-faint);letter-spacing:.08em;paint-order:stroke;stroke:var(--si-ground);stroke-width:3px}.node.unavailable .ring{stroke-opacity:.45}.node.unavailable .node-label{fill:var(--si-text-faint)}.node.live .node-label{font-weight:600}.node.live.tool .ring{stroke-width:1.8px}.node.label-hidden .node-label,.node.label-hidden .node-sub{visibility:hidden}svg.map[data-lod=far] .node:not(.live) .tool-label,svg.map[data-lod=far] .node-sub:not(.sub-always),svg.map[data-lod=far] .junction-label,svg.map[data-lod=mid] .node-sub:not(.sub-always){display:none}.unit-spine{fill:none;stroke:var(--c);stroke-width:1.2px;opacity:.6}.units .node-label,.lessons .node-label{font-size:13px}@media (prefers-reduced-motion:reduce){.strand-current{opacity:0;animation:none}}
