@font-face{font-family:"Instrument Serif";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/instrument-serif-latin-400-normal-DnYpCC2O.woff2) format("woff2"),url(/assets/instrument-serif-latin-400-normal-BVbkICAY.woff) format("woff")}@font-face{font-family:"Instrument Serif";font-style:italic;font-display:swap;font-weight:400;src:url(/assets/instrument-serif-latin-400-italic-DKMiL14s.woff2) format("woff2"),url(/assets/instrument-serif-latin-400-italic-u__WvvIK.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff) format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff) format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff) format("woff")}@font-face{font-family:Caveat;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/caveat-latin-700-normal-D8_1Nw6V.woff2) format("woff2"),url(/assets/caveat-latin-700-normal-cPyBTTZN.woff) format("woff")}:root{--paper: #f3efe4;--sheet: #fbf9f2;--card: #fffdf8;--ink: #1f2a37;--ink-2: #3a4553;--muted: #655e50;--faint: #a39c8b;--rule: #d8d0bc;--rule-2: #e6dfcd;--grid: rgba(31, 42, 55, .055);--accent: #0a2540;--accent-ink: #fbf9f2;--pen: #1d4e89;--pen-local: #9a3412;--hl: rgba(247, 177, 37, .55);--hl-soft: rgba(247, 177, 37, .28);--gold: #f7b125;--gold-ink: #85651a;--margin: rgba(196, 74, 58, .38);--danger: #b4321f;--danger-soft: rgba(180, 50, 31, .1);--ok: #1d6b43;--ok-soft: rgba(29, 107, 67, .12);--leak: #b45309;--leak-soft: rgba(180, 83, 9, .1);--serif: "Instrument Serif", Georgia, "Times New Roman", serif;--sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace;--hand: "Caveat", "Segoe Print", cursive;color-scheme:light}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--paper: #14171c;--sheet: #191d23;--card: #1e232a;--ink: #e8e2d3;--ink-2: #cfc8b8;--muted: #a39c8b;--faint: #6d675b;--rule: #2f353e;--rule-2: #262b33;--grid: rgba(232, 226, 211, .05);--accent: #e8e2d3;--accent-ink: #14171c;--pen: #8cb4ff;--pen-local: #f0a47a;--hl: rgba(247, 177, 37, .36);--hl-soft: rgba(247, 177, 37, .18);--gold-ink: #e5b451;--margin: rgba(240, 120, 100, .32);--danger: #ff8a75;--danger-soft: rgba(255, 138, 117, .12);--ok: #6fd39b;--ok-soft: rgba(111, 211, 155, .12);--leak: #f0a35c;--leak-soft: rgba(240, 163, 92, .12);color-scheme:dark}}:root[data-theme=dark]{--paper: #14171c;--sheet: #191d23;--card: #1e232a;--ink: #e8e2d3;--ink-2: #cfc8b8;--muted: #a39c8b;--faint: #6d675b;--rule: #2f353e;--rule-2: #262b33;--grid: rgba(232, 226, 211, .05);--accent: #e8e2d3;--accent-ink: #14171c;--pen: #8cb4ff;--pen-local: #f0a47a;--hl: rgba(247, 177, 37, .36);--hl-soft: rgba(247, 177, 37, .18);--gold-ink: #e5b451;--margin: rgba(240, 120, 100, .32);--danger: #ff8a75;--danger-soft: rgba(255, 138, 117, .12);--ok: #6fd39b;--ok-soft: rgba(111, 211, 155, .12);--leak: #f0a35c;--leak-soft: rgba(240, 163, 92, .12);color-scheme:dark}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.55 var(--sans);-webkit-font-smoothing:antialiased}a{color:var(--ink);text-decoration-thickness:1px;text-underline-offset:3px}a:hover{color:var(--pen)}code,pre,kbd,input,select{font-variant-ligatures:none}code,pre,kbd{font-family:var(--mono);font-size:.92em}button,input,select{font:inherit;color:inherit}h1,h2,h3{margin:0;font-weight:400;line-height:1.1}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.muted{color:var(--muted)}.small{font-size:.86rem}.pad{padding:18px}.row{display:flex;align-items:center}.row.space{justify-content:space-between}.row.wrap{flex-wrap:wrap}.gap{gap:10px}.ok{color:var(--ok)}.bad{color:var(--danger)}.hl,.op.on,.chip.on,.variants a.on,.tabs button.on{background-image:linear-gradient(transparent 56%,var(--hl) 56%,var(--hl) 92%,transparent 92%)}#root{min-height:100vh;display:flex;flex-direction:column}main{width:100%;max-width:1320px;margin:0 auto;padding:0 24px 48px}.site-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px max(24px,calc((100vw - 1320px)/2 + 24px));border-bottom:1px solid var(--rule);background:var(--paper);position:sticky;top:0;z-index:20}.brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--ink)}.brand img{display:block}.brand-name{font-family:var(--serif);font-size:27px;line-height:1;letter-spacing:-.01em}.brand-tag{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-left:4px}.header-tools{display:flex;align-items:center;gap:8px}.site-footer{margin-top:auto;padding:36px 24px 44px;border-top:1px solid var(--rule);text-align:center;font-size:.88rem;color:var(--ink-2)}.site-footer p{margin:5px 0}.wordmark{height:auto;margin-bottom:10px}.wm-for-dark{display:none}:root[data-theme=dark] .wm-for-dark{display:inline}:root[data-theme=dark] .wm-for-light{display:none}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .wm-for-dark{display:inline}:root:not([data-theme=light]) .wm-for-light{display:none}}.btn{min-height:40px;border:1px solid var(--rule);background:transparent;border-radius:3px;padding:7px 14px;cursor:pointer;white-space:nowrap;color:var(--ink)}.btn:hover:not(:disabled){border-color:var(--ink-2)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}.btn.primary:hover:not(:disabled){filter:brightness(1.15)}.btn.ghost{background:transparent}.icon{display:inline-grid;place-items:center;width:40px;height:40px;border:1px solid var(--rule);border-radius:3px;background:transparent;cursor:pointer;padding:0;color:var(--ink)}.icon svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.icon:disabled{opacity:.3;cursor:not-allowed}.icon.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.icon.primary svg path{fill:currentColor}.icon[aria-pressed=true]{background:var(--hl-soft);border-color:var(--ink-2)}.seg{display:inline-flex;font-family:var(--mono);font-size:13px}.seg button{border:0;background:transparent;padding:6px 7px;cursor:pointer;color:var(--muted)}.seg button+button:before{content:"/";color:var(--faint);margin-right:7px}.seg button.on{color:var(--ink);font-weight:600}.chip{border:0;background:transparent;padding:2px 3px;font-size:.92rem;cursor:pointer;color:var(--muted);text-decoration:none;white-space:nowrap}.chip:hover{color:var(--ink)}.chip.on{color:var(--ink);font-weight:600}.chip.link{padding:0;font-family:var(--mono);font-size:.86rem;color:var(--ink);text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:4px}.chip.link:hover{text-decoration-color:var(--gold)}.chip.subtle{color:var(--muted)}input[type=number],input:not([type]),select{border:1px solid var(--rule);border-radius:3px;background:var(--card);padding:6px 10px;min-height:40px;font-family:var(--mono);font-size:14px}input[type=number]{width:88px}input.char{width:56px;text-align:center;text-transform:uppercase}input:focus-visible,select:focus-visible,button:focus-visible,[tabindex]:focus-visible,a:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:7px;font-size:.88rem;color:var(--ink-2);cursor:pointer;min-height:32px}.toggle input{width:16px;height:16px;accent-color:var(--accent)}.home{max-width:860px}.hero{padding:64px 0 34px}.eyebrow{margin:0 0 10px;font-family:var(--mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink)}.hero h1{font-family:var(--serif);font-size:88px;line-height:.95;letter-spacing:-.03em}.hero .lead{font-family:var(--serif);font-style:italic;font-size:30px;line-height:1.2;margin:14px 0 12px;color:var(--ink)}.hero .muted{max-width:58ch;margin:0}.home h2{font-family:var(--mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink);margin:26px 0 8px}.modules{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}.module{display:flex;gap:22px;padding:16px 2px 15px;border-bottom:1px solid var(--rule);align-items:baseline}.mnum{font-family:var(--serif);font-size:30px;line-height:1;color:var(--faint);width:2ch;flex:none}.mbody{flex:1;min-width:0}.mtitle{font-family:var(--serif);font-size:25px;line-height:1.15;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.mlinks{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:6px;align-items:baseline}.module.now .mnum{color:var(--ink)}.module.now .mtitle span:first-child,.module.now .mtitle{background:none}.module.assessment .mtitle{font-style:italic}.module.intro .mtitle,.module.assignment .mtitle{color:var(--muted)}.badge-now{font-family:var(--hand);font-size:22px;font-weight:700;color:var(--pen-local);transform:rotate(-3deg);display:inline-block}.topic-head{padding:30px 0 4px}.crumb{margin:0 0 6px;font-family:var(--mono);font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--gold-ink)}.crumb a{color:var(--gold-ink);text-decoration:none}.crumb a:hover{text-decoration:underline}.topic-head h1{font-family:var(--serif);font-size:58px;line-height:1;letter-spacing:-.02em}.blurb{color:var(--ink-2);max-width:74ch;margin:12px 0 0}.variants{display:flex;flex-wrap:wrap;gap:4px 18px;margin-top:14px;font-family:var(--mono);font-size:13.5px}.variants a{text-decoration:none;color:var(--muted);padding:0 2px}.variants a.on{color:var(--ink);font-weight:600}.tabs{display:flex;gap:28px;border-bottom:1px solid var(--rule);margin:22px 0;overflow-x:auto}.tabs button{border:0;background:transparent;padding:10px 2px;cursor:pointer;color:var(--muted);white-space:nowrap;font-size:15px;background-image:none}.tabs button.on{color:var(--ink);font-weight:600;box-shadow:inset 0 -2px 0 var(--ink);background-image:none}.panel{background:var(--sheet);border:1px solid var(--rule);border-radius:3px}.panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:12px 16px 8px}.panel-head h3{font-family:var(--serif);font-size:23px}.panel-head.sub{border-top:1px solid var(--rule-2);padding-top:14px}.playground{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:26px;align-items:start}.pg-main,.pg-side{display:flex;flex-direction:column;gap:22px;min-width:0}.pg-side{position:sticky;top:78px}.ops-panel{padding:14px 18px;display:flex;flex-direction:column;gap:12px}.ops-panel>.row:first-child .muted{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase}.ops{display:flex;flex-wrap:wrap;gap:4px 16px}.op{font-family:var(--mono);font-size:14px;border:0;background-color:transparent;padding:3px 2px;cursor:pointer;color:var(--muted)}.op:hover:not(:disabled){color:var(--ink)}.op.on{color:var(--ink);font-weight:600}.op:disabled{opacity:.35;cursor:not-allowed}.args{align-items:flex-end;gap:12px}.arg{display:flex;flex-direction:column;gap:4px;font-size:.8rem;color:var(--muted)}.arg>span{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.run{margin-left:auto}.tools{border-top:1px solid var(--rule-2);padding-top:12px;gap:10px 16px}.stage{overflow:hidden}.stage .canvas-wrap{background-color:var(--sheet);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:24px 24px;border-bottom:1px solid var(--rule-2)}.stage.has-error{border-color:var(--danger)}.bug-banner{margin:0;padding:10px 18px;border-bottom:1px solid var(--rule-2);font-family:var(--hand);font-size:22px;font-weight:700;color:var(--leak)}.note{margin:14px 22px 4px;min-height:1.3em;font-family:var(--serif);font-style:italic;font-size:25px;line-height:1.25}.note.error{color:var(--danger)}.explain{margin:10px 22px 12px;padding:12px 16px;background:var(--card);border:1px solid var(--rule);border-radius:3px}.explain strong{font-family:var(--hand);font-size:22px;color:var(--leak)}.explain p{margin:4px 0 0}.canvas-wrap{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.canvas{display:block;margin:0 auto}.canvas text{font-family:var(--mono);font-size:15px;fill:var(--ink);font-variant-ligatures:none}.node .frame{fill:var(--card)}.node .frame-outline{fill:none;stroke:var(--ink);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.node .cell .mark{fill:var(--hl)}.node .sep,.node .slash,.node .strike,.node .crossout path,.label .strike,.node .outline,.edge{fill:none;stroke-linecap:round}.node .strike,.label .strike{stroke:var(--danger);stroke-width:1.6}.node .crossout path{stroke:var(--danger);stroke-width:1.8}.node .cell.kind-head text{font-size:11px;fill:var(--muted)}.node .cell.kind-garbage text{fill:var(--faint)}.node .cell.dim text{fill:var(--faint)}.node .sep{stroke:var(--ink);stroke-width:1;opacity:.8}.node .slash{stroke:var(--faint);stroke-width:1.3}.node text.addr{font-size:10px;fill:var(--muted)}.node .overline,.node .caption{font-size:10.5px;fill:var(--muted)}.node .badge{font-family:var(--hand);font-size:18px;font-weight:700}.node.tone-lost .frame-outline{stroke:var(--leak);stroke-dasharray:5 3}.node.tone-lost .frame{fill:var(--leak-soft)}.node.tone-lost .badge{fill:var(--leak)}.node.tone-freed .frame-outline{stroke:var(--faint);stroke-dasharray:3 3}.node.tone-freed .frame{fill:var(--sheet)}.node.tone-freed text{fill:var(--muted)}.node.tone-freed .badge{fill:var(--danger)}.node.tone-dim .frame-outline{stroke:var(--rule)}.node.tone-ghost .frame-outline{stroke:var(--rule);stroke-dasharray:4 3}.node.tone-ghost .frame{fill:transparent}.node.circle .fill{fill:var(--card)}.node.circle .outline{stroke:var(--ink);stroke-width:1.6}.node.circle text{font-weight:600}.node.circle.tone-visited .fill{fill:var(--hl)}.edge{stroke:var(--ink-2);stroke-width:1.6;opacity:.45}.arrow path{fill:none;stroke:var(--ink);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.arrow polygon,.arrow circle{fill:var(--ink)}.arrow.tone-changed path{stroke:var(--gold-ink);stroke-width:2.4}.arrow.tone-changed polygon,.arrow.tone-changed circle{fill:var(--gold-ink)}.arrow.tone-lost path{stroke:var(--leak);stroke-dasharray:5 3}.arrow.tone-lost polygon,.arrow.tone-lost circle{fill:var(--leak)}.arrow.tone-dangling path{stroke:var(--danger);stroke-dasharray:3 3}.arrow.tone-dangling polygon,.arrow.tone-dangling circle{fill:var(--danger)}.arrow.tone-faint path{stroke:var(--faint);stroke-dasharray:4 4}.arrow.tone-faint polygon{fill:var(--faint)}.label text{font-family:var(--hand);font-size:23px;font-weight:700;fill:var(--pen)}.label .label-back{fill:var(--sheet);opacity:.8}.label .label-mark{fill:transparent}.label.tone-local text{fill:var(--pen-local)}.label.tone-changed .label-mark{fill:var(--hl)}.label-arrow path{stroke:var(--pen);stroke-width:1.4}.label-arrow polygon{fill:var(--pen)}.label.tone-local .label-arrow path{stroke:var(--pen-local)}.label.tone-local .label-arrow polygon{fill:var(--pen-local)}.label.tone-changed .label-arrow path{stroke:var(--pen)}.steplog{margin:6px 22px 12px;border:1px solid var(--rule-2);border-radius:3px;background:var(--card)}.steplog-head{padding:6px 12px;font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--rule-2)}.steplog ol{list-style:none;margin:0;padding:4px 0;max-height:150px;overflow-y:auto;scroll-behavior:smooth}.steplog li button{width:100%;display:grid;grid-template-columns:3.4ch minmax(0,1fr) auto;gap:12px;align-items:baseline;border:0;background:transparent;padding:2px 12px;text-align:left;cursor:pointer;font-family:var(--mono);font-size:12.5px;color:var(--muted)}.steplog li button:hover{background:var(--hl-soft)}.steplog .n{text-align:right;color:var(--faint)}.steplog .t{white-space:pre;overflow:hidden;text-overflow:ellipsis;font-size:inherit}.steplog .r{white-space:nowrap}.steplog .r.true{color:var(--ok)}.steplog .r.false{color:var(--danger)}.steplog .r.bad{color:var(--danger);font-weight:600}.steplog .lostmark{color:var(--leak);font-style:normal}.steplog li.current button{color:var(--ink);background-image:linear-gradient(90deg,var(--hl-soft),transparent)}.steplog li.current .n{color:var(--gold-ink);font-weight:600}.stepbar{display:flex;align-items:center;gap:10px;padding:12px 18px;border-top:1px solid var(--rule-2);flex-wrap:wrap}.stepbar-buttons{display:flex;gap:6px}.ticks{flex:1;min-width:120px;display:flex;gap:3px;align-items:center}.ticks button{flex:1;height:14px;padding:0;border:0;cursor:pointer;background:linear-gradient(transparent 5px,var(--rule) 5px,var(--rule) 9px,transparent 9px)}.ticks button.done{background:linear-gradient(transparent 5px,var(--ink) 5px,var(--ink) 9px,transparent 9px)}.ticks button.now{background:linear-gradient(transparent 3px,var(--gold) 3px,var(--gold) 11px,transparent 11px)}.scrub{flex:1;min-width:120px;accent-color:var(--ink)}.stepcount{font-family:var(--mono);font-size:12.5px;color:var(--muted);white-space:nowrap}.speed select{min-height:36px;padding:3px 6px}.code-panel{overflow:hidden;background:var(--card)}.code-scroll{max-height:460px;overflow:auto}.code{list-style:none;margin:0;padding:4px 0 14px;font-family:var(--mono);font-size:13px;line-height:1.85;font-variant-ligatures:none;background-image:linear-gradient(90deg,transparent calc(3ch + 20px),var(--margin) calc(3ch + 20px),var(--margin) calc(3ch + 21px),transparent calc(3ch + 21px))}.code li{display:flex;gap:22px;padding:0 14px 0 0;white-space:pre}.code .ln{color:var(--faint);width:calc(3ch + 8px);text-align:right;flex:none;-webkit-user-select:none;user-select:none}.code code{font-size:inherit}.code li.active code{background-image:linear-gradient(transparent 14%,var(--hl) 14%,var(--hl) 90%,transparent 90%)}.code li.active .ln{color:var(--ink);font-weight:600}.code li.active.error code{background-image:linear-gradient(transparent 14%,var(--danger-soft) 14%,var(--danger-soft) 90%,transparent 90%)}.code li.active.error .ln{color:var(--danger)}.code.clickable li{cursor:pointer}.code.clickable li:hover code{background-image:linear-gradient(transparent 14%,var(--hl-soft) 14%,var(--hl-soft) 90%,transparent 90%)}.code li.hit code,.code li.answer code{background-image:linear-gradient(transparent 14%,var(--ok-soft) 14%,var(--ok-soft) 90%,transparent 90%)}.code li.miss code{background-image:linear-gradient(transparent 14%,var(--danger-soft) 14%,var(--danger-soft) 90%,transparent 90%)}.code li.answer .ln,.code li.hit .ln{color:var(--ok);font-weight:600}.tk-kw{font-weight:600}.tk-lit,.tk-num{color:var(--pen)}.tk-str{color:var(--ok)}.tk-op{color:var(--pen-local)}.vars{padding:4px 16px 14px;font-family:var(--mono);font-size:13px;display:grid;gap:12px}.frame-name{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink);margin-bottom:4px}.vars dl{margin:0;display:grid;gap:3px}.vars dl>div{display:flex;gap:8px;align-items:baseline;padding:0 2px}.vars dt{flex:1;display:flex;gap:8px;align-items:baseline;color:var(--ink-2);min-width:0}.vars dt:after{content:"";flex:1;border-bottom:1px dotted var(--rule);min-width:12px;transform:translateY(-3px)}.vars dd{margin:0;text-align:right;overflow-wrap:anywhere;max-width:70%}.vars dl>div.changed dd,.vars .changed{background-image:linear-gradient(transparent 50%,var(--hl) 50%,var(--hl) 92%,transparent 92%)}.alias{color:var(--pen-local);margin-left:2px}.ptr{color:var(--pen)}.callstack{margin:0;padding:4px 16px 14px 38px;font-family:var(--mono);font-size:12.5px}.callstack li{padding:1px 0;color:var(--muted)}.callstack li.top{color:var(--ink);font-weight:600}.output{margin:0;padding:4px 16px 16px;font-size:13.5px;min-height:2.4em;white-space:pre-wrap}.adt{display:grid;gap:18px;max-width:920px}.adt .panel{background:var(--card)}.adt .code-scroll{max-height:none}.practice{display:grid;gap:16px;max-width:940px}.drill-tabs{display:flex;flex-wrap:wrap;gap:4px 20px;align-items:baseline}.drill-tabs .chip{font-size:15px}.score{margin-left:auto;font-family:var(--hand);font-size:22px;font-weight:700;color:var(--pen)}.drill{padding:22px 24px;display:flex;flex-direction:column;gap:16px}.drill p{margin:0}.drill>p:first-child,.drill>.row:first-child>p{font-family:var(--serif);font-size:24px;line-height:1.25}.drill .q{font-family:var(--serif);font-size:26px;line-height:1.25}.static-canvas{margin:0;border:1px solid var(--rule-2);border-radius:3px;padding:6px 0 2px;background-color:var(--sheet);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:24px 24px}.static-canvas figcaption{padding:2px 12px 0;font-family:var(--hand);font-size:21px;font-weight:700;color:var(--pen)}.oplist{margin:0;padding-left:26px;font-family:var(--mono);line-height:1.9}.opline code{font-size:1rem}.answer{display:flex;flex-direction:column;gap:6px}.answer input{width:100%}.predict-grid{display:flex;flex-wrap:wrap;gap:16px}.predict-grid .arg code{color:var(--ink);font-size:.95rem;text-transform:none;letter-spacing:0}.predict-grid .arg.ok select,.predict-grid .arg.ok input{border-color:var(--ok);background:var(--ok-soft)}.predict-grid .arg.bad select,.predict-grid .arg.bad input{border-color:var(--danger);background:var(--danger-soft)}.parsons{list-style:none;margin:0;padding:0;display:grid;gap:6px}.parsons li{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid var(--rule);border-radius:3px;padding:4px 4px 4px 14px;background:var(--card)}.parsons li code{white-space:pre;overflow-x:auto;font-size:14px}.parsons .row{gap:4px}.replay{width:100%;border:1px solid var(--rule-2);border-radius:3px;padding:8px;display:grid;gap:8px;background:var(--sheet)}.mcq{display:grid;gap:8px}.mcq-opt{text-align:left;border:1px solid var(--rule);background:var(--card);border-radius:3px;padding:12px 14px;cursor:pointer;min-height:48px}.mcq-opt:hover:not(:disabled){border-color:var(--ink-2)}.mcq-opt.ok{border-color:var(--ok);background:var(--ok-soft)}.mcq-opt.bad{border-color:var(--danger);background:var(--danger-soft)}.mcq-opt:disabled{cursor:default}.explain-text{color:var(--ink-2)}@media (max-width: 1080px){.playground{grid-template-columns:1fr}.pg-side{position:static}.code-scroll{max-height:380px}}@media (max-width: 640px){body{font-size:14.5px}main{padding:0 16px 40px}.site-header{padding:10px 16px}.brand-tag{display:none}.hero{padding:40px 0 22px}.hero h1{font-size:64px}.hero .lead{font-size:25px}.mtitle{font-size:21px}.mnum{font-size:24px}.module{gap:14px}.topic-head h1{font-size:42px}.run{margin-left:0;width:100%}.note{font-size:21px;margin:12px 16px 4px}.steplog{margin:6px 12px 10px}.stepbar{padding:10px 12px}.drill{padding:18px 16px}.drill>p:first-child,.drill>.row:first-child>p{font-size:21px}.code{font-size:12.5px}}.projector body{font-size:19px}.projector main{max-width:none}.projector .playground{grid-template-columns:minmax(0,1fr) 470px}.projector .code{font-size:16px}.projector .note{font-size:32px}.projector .vars,.projector .steplog li button{font-size:15px}@media (prefers-reduced-motion: reduce){*{transition:none!important;scroll-behavior:auto!important}}
