:root{box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);--paper:#eef1f6;--panel:#ffffff;--ink:#1b2029;--ink-soft:#5c6675;--ink-faint:#8b95a4;--rule:#d3dae4;--rule-soft:#e4e9f0;--ran:#a8660a;--ran-bg:#fdf1dd;--ran-line:#e8c48a;--skip:#78838f;--skip-bg:#eef1f4;--skip-line:#d6dce3;--dom:#0a7a5f;--dom-bg:#dff3ec;--dom-line:#8ccdb9;--gone:#b23a2c;--gone-bg:#fbe6e3;--gone-line:#eaaaa1;--warn:#b4530a;--warn-bg:#fdeada;--warn-line:#eeb87f;--wait:#4a5bb8;--wait-bg:#e6eaf9;--wait-line:#a8b4e6;--focus:#2b5fd9}*,*:before,*:after{box-sizing:inherit}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--paper:#12151b;--panel:#191d25;--ink:#e6eaf1;--ink-soft:#a3adbc;--ink-faint:#737f8f;--rule:#2d3441;--rule-soft:#232935;--ran:#e8b160;--ran-bg:#33260f;--ran-line:#6d5423;--skip:#8e99a7;--skip-bg:#20252e;--skip-line:#333b47;--dom:#5fc9a8;--dom-bg:#11322a;--dom-line:#2a5f4f;--gone:#e88f81;--gone-bg:#3a1e1a;--gone-line:#6d3a32;--warn:#eda062;--warn-bg:#382312;--warn-line:#71482a;--wait:#93a3ef;--wait-bg:#1c2140;--wait-line:#3d4785;--focus:#7ba1f5}}:root[data-theme=dark]{--paper:#12151b;--panel:#191d25;--ink:#e6eaf1;--ink-soft:#a3adbc;--ink-faint:#737f8f;--rule:#2d3441;--rule-soft:#232935;--ran:#e8b160;--ran-bg:#33260f;--ran-line:#6d5423;--skip:#8e99a7;--skip-bg:#20252e;--skip-line:#333b47;--dom:#5fc9a8;--dom-bg:#11322a;--dom-line:#2a5f4f;--gone:#e88f81;--gone-bg:#3a1e1a;--gone-line:#6d3a32;--warn:#eda062;--warn-bg:#382312;--warn-line:#71482a;--wait:#93a3ef;--wait-bg:#1c2140;--wait-line:#3d4785;--focus:#7ba1f5}html{height:100%;scroll-padding-top:env(safe-area-inset-top,0px)}body{margin:0;min-height:100%;background:var(--paper);color:var(--ink);font-family:IBM Plex Sans,system-ui,-apple-system,Segoe UI,sans-serif;font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}.wrap{max-width:880px;margin:0 auto;padding:20px 16px 56px}h1{font-size:19px;font-weight:600;letter-spacing:-.015em;margin:0}.sub{color:var(--ink-soft);font-size:14px;margin:2px 0 18px;max-width:56ch}.topnav{display:flex;gap:0;border-bottom:1px solid var(--rule);margin:0 0 18px}.navlink{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;font:inherit;font-size:14.5px;font-weight:500;color:var(--ink-faint);padding:8px 2px;margin-right:22px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.navlink:hover{color:var(--ink-soft)}.navlink[aria-current=true]{color:var(--ink);font-weight:600;border-bottom-color:var(--ran)}.navlink:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.navcount{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--ink-faint);margin-left:6px;font-weight:400}.menu{border:1px solid var(--rule);border-radius:11px;overflow:hidden;background:var(--panel);margin-bottom:22px}.sec-head{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;font:inherit;color:var(--ink);cursor:pointer;padding:12px 14px;display:flex;align-items:center;gap:10px;text-align:left;border-bottom:1px solid var(--rule)}.menu>div:last-child .sec-head{border-bottom:0}.menu>div:last-child .sec-head[aria-expanded=true]{border-bottom:1px solid var(--rule)}.sec-head:hover{background:var(--rule-soft)}.sec-head:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.caret{font-size:9px;color:var(--ink-faint);width:10px;flex:0 0 auto;transition:transform .18s ease}.sec-head[aria-expanded=true] .caret{transform:rotate(90deg)}.sec-name{font-size:14.5px;font-weight:600;flex:1 1 auto;min-width:0}.sec-blurb{display:block;font-size:12px;font-weight:400;color:var(--ink-faint);margin-top:1px;line-height:1.4}.sec-count{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);flex:0 0 auto}.sec-count.full{color:var(--dom)}.sec-body{display:none}.sec-body.open{display:block}.lesson{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;font:inherit;color:var(--ink);cursor:pointer;padding:9px 14px 9px 34px;display:flex;align-items:center;gap:10px;text-align:left;border-bottom:1px solid var(--rule-soft)}.sec-body .lesson:last-child{border-bottom:0}.lesson:hover{background:var(--rule-soft)}.lesson[aria-current=true]{background:var(--ran-bg)}.lesson:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.l-n{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);flex:0 0 auto;min-width:14px}.lesson[aria-current=true] .l-n{color:var(--ran);font-weight:600}.l-t{font-size:13.5px;flex:1 1 auto;min-width:0;line-height:1.4}.lesson[aria-current=true] .l-t{font-weight:600}.l-done{color:var(--dom);font-size:13px;flex:0 0 auto;visibility:hidden}.lesson.done .l-done{visibility:visible}.lesson-title{font-size:17.5px;font-weight:600;letter-spacing:-.012em;margin:0 0 3px}.lesson-meta{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);margin:0 0 14px}.source{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:14px 16px;margin-bottom:12px;overflow-x:auto}.source pre{margin:0;font-family:IBM Plex Mono,monospace;font-size:12.5px;line-height:1.75;color:var(--ink-soft);white-space:pre}.stage{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:18px 16px;margin-bottom:14px;overflow-x:auto}.stage-head{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);margin:0 0 14px}.tree{min-width:min-content}.node{margin:0 0 7px}.node-row{display:inline-flex;align-items:center;gap:9px;border:1px solid var(--skip-line);background:var(--skip-bg);border-radius:7px;padding:7px 11px;transition:background .22s ease,border-color .22s ease}.node-name{font-family:IBM Plex Mono,monospace;font-size:13.5px;font-weight:500;white-space:nowrap}.node-props{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);white-space:nowrap}.node-tag{font-size:10.5px;font-weight:600;padding:1px 6px;border-radius:20px;white-space:nowrap;border:1px solid currentColor}.kids{margin:7px 0 0 16px;padding-left:13px;border-left:1px solid var(--rule)}.s-idle .node-tag{display:none}.s-ran .node-row{border-color:var(--ran-line);background:var(--ran-bg)}.s-ran .node-tag{color:var(--ran)}.s-dom .node-row{border-color:var(--dom-line);background:var(--dom-bg)}.s-dom .node-tag{color:var(--dom)}.s-skip .node-row{opacity:.66}.s-skip .node-tag{color:var(--skip)}.s-gone .node-row{border-color:var(--gone-line);background:var(--gone-bg)}.s-gone .node-tag{color:var(--gone)}.s-warn .node-row{border-color:var(--warn-line);background:var(--warn-bg)}.s-warn .node-tag{color:var(--warn)}.grid{display:grid;gap:14px;grid-template-columns:1fr}@media (min-width:640px){.grid.c2{grid-template-columns:1fr 1fr}.grid.c3{grid-template-columns:1fr 1fr 1fr}}.box{border:1px solid var(--rule);border-radius:9px;overflow:hidden;min-width:0}.box-head{padding:8px 11px;border-bottom:1px solid var(--rule);background:var(--rule-soft);font-family:IBM Plex Mono,monospace;font-size:11.5px;font-weight:500}.box-head em{font-style:normal;color:var(--ink-faint);font-weight:400}.item{display:flex;align-items:baseline;gap:8px;padding:7px 11px;border-bottom:1px solid var(--rule-soft);flex-wrap:wrap;transition:background .22s ease}.item:last-child{border-bottom:0}.item-label{font-family:IBM Plex Mono,monospace;font-size:12.5px;font-weight:500;min-width:0;overflow-wrap:anywhere}.item-note{font-size:11px;color:var(--ink-faint);margin-left:auto;white-space:nowrap}.empty{padding:9px 11px;color:var(--ink-faint);font-size:12px;font-style:italic}.i-ran{background:var(--ran-bg)}.i-ran .item-note{color:var(--ran)}.i-dom{background:var(--dom-bg)}.i-dom .item-note{color:var(--dom)}.i-gone{background:var(--gone-bg);opacity:.7}.i-gone .item-note{color:var(--gone)}.i-warn{background:var(--warn-bg)}.i-warn .item-note{color:var(--warn)}.i-wait{background:var(--wait-bg)}.i-wait .item-note{color:var(--wait)}.i-skip{opacity:.6}.row{display:flex;align-items:center;gap:9px;padding:8px 11px;border-bottom:1px solid var(--rule-soft);flex-wrap:wrap;transition:background .22s ease}.row:last-child{border-bottom:0}.row-key{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--ink-faint);flex:0 0 auto;min-width:44px}.row-name{font-size:13.5px;font-weight:600;flex:0 0 auto;min-width:52px}.row-input{font-family:IBM Plex Mono,monospace;font-size:11.5px;border:1px solid var(--rule);border-radius:5px;padding:2px 7px;background:var(--paper);color:var(--ink-soft);flex:1 1 auto;min-width:90px}.r-ran{background:var(--ran-bg)}.r-gone{background:var(--gone-bg);opacity:.7}.r-dom{background:var(--dom-bg)}.r-warn{background:var(--warn-bg)}.r-warn .row-input{border-color:var(--warn-line);color:var(--warn);font-weight:500}.rail{display:flex;margin-bottom:14px;border:1px solid var(--rule);border-radius:9px;overflow:hidden;background:var(--panel)}.rail-step{flex:1 1 0;padding:7px 4px;text-align:center;font-size:10.5px;font-weight:500;color:var(--ink-faint);border-right:1px solid var(--rule-soft);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color .2s,background .2s}.rail-step:last-child{border-right:0}.rail-step.on{background:var(--ran-bg);color:var(--ran);font-weight:600}.rail-step.done{color:var(--ink-soft)}.controls{display:flex;gap:9px;align-items:center;margin-bottom:16px}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;font:inherit;font-size:14px;font-weight:500;border:1px solid var(--rule);background:var(--panel);color:var(--ink);border-radius:8px;padding:9px 15px;cursor:pointer;flex:0 0 auto;transition:border-color .15s}.btn:hover:not(:disabled){border-color:var(--ink-faint)}.btn:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.btn:disabled{opacity:.4;cursor:default}.btn-go{background:var(--ink);color:var(--paper);border-color:var(--ink);flex:1 1 auto}.btn-go:hover:not(:disabled){opacity:.87}.counter{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--ink-faint)}.note{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:16px;margin-bottom:14px}.note h2{font-size:15.5px;font-weight:600;margin:0 0 7px;letter-spacing:-.01em}.note p{margin:0 0 10px;font-size:14.5px;color:var(--ink-soft);max-width:66ch}.note p:last-child{margin-bottom:0}.note code{font-family:IBM Plex Mono,monospace;font-size:.88em;background:var(--rule-soft);padding:1px 5px;border-radius:4px;color:var(--ink)}.gotcha{border-left:3px solid var(--warn);background:var(--warn-bg);padding:10px 13px;border-radius:0 7px 7px 0;margin-top:12px}.gotcha p{color:var(--ink);font-size:14px;margin:0;max-width:64ch}.legend{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:18px}.key{display:inline-flex;align-items:center;gap:6px;font-size:12px;border:1px solid var(--rule);border-radius:20px;padding:3px 10px;color:var(--ink-soft);background:var(--panel)}.swatch{width:9px;height:9px;border-radius:2px;border:1px solid;flex:0 0 auto}.sw-ran{background:var(--ran-bg);border-color:var(--ran-line)}.sw-dom{background:var(--dom-bg);border-color:var(--dom-line)}.sw-wait{background:var(--wait-bg);border-color:var(--wait-line)}.sw-warn{background:var(--warn-bg);border-color:var(--warn-line)}.practice{border:1px solid var(--rule);border-radius:12px;background:var(--panel);margin-bottom:18px;overflow:hidden}.ptabs{display:flex;border-bottom:1px solid var(--rule)}.ptab{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;font:inherit;font-size:13px;font-weight:500;color:var(--ink-faint);padding:10px 15px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.ptab:hover{color:var(--ink-soft)}.ptab[aria-selected=true]{color:var(--ink);font-weight:600;border-bottom-color:var(--ran)}.ptab:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.ppanel{padding:14px 15px;display:none}.ppanel.on{display:block}.phint{font-size:12.5px;color:var(--ink-faint);margin:0 0 10px}#editor{width:100%;min-height:130px;resize:vertical;box-sizing:border-box;font-family:IBM Plex Mono,monospace;font-size:12.5px;line-height:1.7;background:var(--paper);color:var(--ink);border:1px solid var(--rule);border-radius:8px;padding:11px 12px;-moz-tab-size:2;tab-size:2}#editor:focus{outline:2px solid var(--focus);outline-offset:-1px}.prow{display:flex;gap:9px;margin:10px 0 0}.prow .btn{padding:7px 14px;font-size:13.5px}.prow .btn-go{flex:0 0 auto;min-width:92px}.outwrap{margin-top:12px}.outlabel{font-family:IBM Plex Mono,monospace;font-size:10.5px;color:var(--ink-faint);margin:0 0 5px;letter-spacing:.03em}.console{border:1px solid var(--rule);border-radius:8px;background:var(--paper);min-height:44px;max-height:230px;overflow:auto;padding:7px 0}.cline{font-family:IBM Plex Mono,monospace;font-size:12px;line-height:1.6;padding:1px 12px;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink)}.cline.c-error{color:var(--gone);background:var(--gone-bg)}.cline.c-warn{color:var(--warn)}.cline.c-info{color:var(--ink-faint);font-style:italic}.qprompt{font-size:14.5px;font-weight:600;margin:0 0 10px}.qcode{font-family:IBM Plex Mono,monospace;font-size:12.5px;line-height:1.7;background:var(--paper);border:1px solid var(--rule);border-radius:8px;padding:11px 12px;margin:0 0 12px;white-space:pre;overflow-x:auto;color:var(--ink-soft)}.qhead{display:flex;align-items:center;gap:10px;margin:0 0 10px}.qcount{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--ink-faint);margin-left:auto;white-space:nowrap}.qdots{display:flex;gap:5px}.qdot{width:7px;height:7px;border-radius:50%;border:1px solid var(--rule);background:transparent}.qdot.now{border-color:var(--ran);box-shadow:0 0 0 2px var(--ran-bg),0 0 0 3px var(--ran)}.qdot.now:not(.ok):not(.no){background:var(--ran)}.qdot.ok{background:var(--dom);border-color:var(--dom)}.qdot.no{background:var(--gone);border-color:var(--gone)}.qinstr{font-size:12.5px;color:var(--ink-faint);margin:0 0 9px}.qopts{display:flex;flex-direction:column;gap:7px}.qmark{flex:0 0 auto;width:15px;height:15px;border-radius:50%;border:1.5px solid var(--ink-faint);display:inline-flex;align-items:center;justify-content:center;font-size:10px;line-height:1;margin-top:1px;transition:border-color .15s,background .15s,color .15s}.qopt:hover:not(:disabled) .qmark{border-color:var(--ink)}.qopt.right .qmark{border-color:var(--dom);background:var(--dom);color:#fff}.qopt.wrong .qmark{border-color:var(--gone);background:var(--gone);color:#fff}.qtext{flex:1 1 auto;min-width:0}.qnav{display:flex;gap:9px;margin-top:12px}.qnav .btn{padding:7px 14px;font-size:13px}.qopt{-webkit-appearance:none;-moz-appearance:none;appearance:none;text-align:left;font:inherit;font-family:IBM Plex Mono,monospace;font-size:12.5px;border:1px solid var(--rule);background:var(--paper);color:var(--ink);border-radius:8px;padding:9px 12px;cursor:pointer;transition:border-color .15s,background .15s;display:flex;gap:10px;align-items:flex-start}.qopt:hover:not(:disabled){border-color:var(--ink-faint)}.qopt:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.qopt:disabled{cursor:default}.qopt.right{border-color:var(--dom-line);background:var(--dom-bg);color:var(--dom);font-weight:600}.qopt.wrong{border-color:var(--gone-line);background:var(--gone-bg);color:var(--gone)}.qwhy{margin:12px 0 0;padding:10px 13px;border-left:3px solid var(--dom);background:var(--dom-bg);border-radius:0 7px 7px 0;font-size:14px;color:var(--ink)}.qwhy p{margin:0;max-width:64ch}.qagain{margin-top:10px}.qpick{font-family:IBM Plex Mono,monospace;font-size:10.5px;color:var(--ink-faint);letter-spacing:.03em;text-transform:uppercase;margin:0 0 8px}.playhead{margin:0 0 4px;font-size:17.5px;font-weight:600;letter-spacing:-.012em}.playsub{color:var(--ink-soft);font-size:14px;margin:0 0 16px;max-width:62ch}.chiprow{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 14px;align-items:center}.chiplabel{font-family:IBM Plex Mono,monospace;font-size:10.5px;color:var(--ink-faint);letter-spacing:.03em;margin-right:3px}.chip{-webkit-appearance:none;-moz-appearance:none;appearance:none;font:inherit;font-size:12.5px;border:1px solid var(--rule);background:var(--panel);color:var(--ink-soft);border-radius:20px;padding:4px 12px;cursor:pointer;transition:border-color .15s,color .15s;display:inline-flex;align-items:center;gap:6px}.chip:hover{border-color:var(--ink-faint);color:var(--ink)}.chip:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.chip .x{color:var(--ink-faint);font-size:14px;line-height:1;padding:0 1px}.chip .x:hover{color:var(--gone)}#playEditor{width:100%;min-height:300px;resize:vertical;box-sizing:border-box;font-family:IBM Plex Mono,monospace;font-size:13px;line-height:1.75;background:var(--panel);color:var(--ink);border:1px solid var(--rule);border-radius:10px;padding:14px 15px;-moz-tab-size:2;tab-size:2}#playEditor:focus{outline:2px solid var(--focus);outline-offset:-1px}.playbar{display:flex;gap:9px;margin:11px 0 0;flex-wrap:wrap;align-items:center}.playbar .btn{padding:8px 15px;font-size:13.5px}.savebox{display:flex;gap:7px;margin-left:auto;flex:1 1 200px;min-width:190px}.savebox input{flex:1 1 auto;min-width:0;font:inherit;font-size:13px;border:1px solid var(--rule);border-radius:8px;padding:7px 11px;background:var(--panel);color:var(--ink)}.savebox input:focus{outline:2px solid var(--focus);outline-offset:-1px}#playOut{max-height:320px;margin-top:6px}.playnote{font-size:12.5px;color:var(--ink-faint);margin:14px 0 0;max-width:62ch}.jump{display:flex;gap:9px;margin-bottom:22px}.jump .btn{flex:1 1 0;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}footer{border-top:1px solid var(--rule);padding-top:16px;color:var(--ink-faint);font-size:13px;max-width:66ch}footer p{margin:0 0 8px}footer code{font-family:IBM Plex Mono,monospace;font-size:.9em}.reset{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:none;font:inherit;font-size:13px;color:var(--ink-faint);text-decoration:underline;cursor:pointer;padding:0}.reset:hover{color:var(--ink-soft)}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
