:root{color-scheme:dark;--bg:#10141a;--panel:#191f28;--ink:#f0f2f5;--sub:#b0bac8;--line:#364150;--orange:#ffaf70;--cyan:#7bdded;--code:#101923;--danger:#ffafb6;font-family:Segoe UI,Arial,sans-serif;font-size:16px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink)}button,a,input,textarea{font:inherit}button,a{touch-action:manipulation}button{border:1px solid transparent;background:var(--orange);color:#192028;border-radius:7px;padding:10px 17px;font-weight:600;cursor:pointer;min-height:42px}button:hover{filter:brightness(1.09)}button:disabled{opacity:.45;cursor:default}button.quiet{background:transparent;color:var(--ink);border-color:var(--line)}button:focus-visible,a:focus-visible,textarea:focus-visible{outline:3px solid var(--cyan);outline-offset:3px}button.small{font-size:.86rem;padding:7px 11px;min-height:36px}a{color:var(--cyan)}[hidden]{display:none!important}.topbar{display:flex;align-items:center;gap:28px;min-height:78px;padding:18px 4vw;border-bottom:1px solid var(--line)}.brand{font-weight:800;font-size:1.28rem;letter-spacing:.08em;text-decoration:none;color:var(--ink)}.brand span{color:var(--orange);margin:0 5px}.course{font-size:.78rem;letter-spacing:.12em;color:var(--sub)}.course span{padding:0 10px}.top-actions{margin-left:auto;display:flex;align-items:center;gap:12px}.top-actions button{font-size:.82rem}#runtime{font-size:.8rem;color:var(--sub);margin-right:6px;display:flex;align-items:center;gap:8px}#runtime i{width:7px;height:7px;border-radius:50%;background:var(--orange)}#runtime.ready i{background:var(--cyan)}#runtime.error{color:var(--danger)}#chapters{display:flex;gap:6px;padding:15px 4vw;flex-wrap:wrap}#chapters button{color:var(--sub);background:transparent;font-size:.82rem;padding:7px 13px;border-radius:5px;min-height:36px}#chapters button.active{background:var(--panel);color:var(--ink)}#chapters button span{color:var(--orange);font-size:.75rem;margin-right:8px}#stage{padding:12px 4vw 24px;min-height:calc(100vh - 213px)}.eyebrow{color:var(--orange);font-size:.8rem;letter-spacing:.15em;text-transform:uppercase;font-weight:600;margin:0 0 16px}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(2.8rem,4.8vw,5.2rem);line-height:1.04;letter-spacing:-.045em;font-weight:650;margin-bottom:24px}h1 em{font-style:normal;color:var(--orange)}h2{font-size:clamp(1.9rem,3vw,3rem);letter-spacing:-.035em;line-height:1.1;margin-bottom:14px}h3{font-size:1.1rem}.lede{font-size:clamp(1.05rem,1.5vw,1.4rem);line-height:1.55;color:var(--sub);max-width:580px}.intro{display:grid;grid-template-columns:1.1fr 1fr;gap:5vw;align-items:center;min-height:530px}.intro .caption{font-size:.95rem;color:var(--sub);line-height:1.65}.prompt{margin-top:35px;font-size:1.15rem;line-height:1.65;border-left:3px solid var(--orange);padding-left:20px;max-width:520px}.diagram{width:100%;max-height:490px;overflow:visible}.diagram text{font-family:Segoe UI,Arial,sans-serif;fill:var(--sub);font-size:16px}.diagram .strong{fill:var(--ink);font-weight:600}.lesson-header{display:flex;justify-content:space-between;align-items:start;gap:22px;margin-bottom:22px}.lesson-header .lede{font-size:1.04rem;margin:0;max-width:760px}.workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px;align-items:start}.code-panel{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--code)}.panel-bar{padding:13px 18px;display:flex;align-items:center;justify-content:space-between;gap:14px;border-bottom:1px solid var(--line)}.panel-bar label{font-size:.85rem;letter-spacing:.04em;color:var(--sub)}.editor{width:100%;border:0;resize:vertical;outline-offset:-4px;display:block;background:var(--code);color:#d8edf2;tab-size:4;padding:22px;font:clamp(.94rem,1.28vw,1.18rem)/1.65 Consolas,'Cascadia Code',monospace;min-height:315px;white-space:pre;overflow:auto;scrollbar-color:#475367 transparent}.run-bar{padding:12px 17px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;border-top:1px solid var(--line)}.run-hint{font-size:.78rem;color:var(--sub);flex:1;min-width:170px}.result-panel{min-width:0}.result-label{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--sub);font-size:.85rem;margin:0 0 15px}.empty{min-height:325px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:14px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:28px 10px}.empty .symbol{font-size:3.8rem;color:var(--orange);letter-spacing:-.07em;line-height:1.1}.empty h3{font-size:1.4rem;line-height:1.3;max-width:430px;margin:0}.empty p{color:var(--sub);font-size:1rem;line-height:1.55;max-width:430px;margin:0}.terminal{padding:16px 20px;background:var(--panel);border-radius:8px;white-space:pre-wrap;word-break:break-word;color:var(--cyan);font:clamp(.95rem,1.3vw,1.2rem)/1.65 Consolas,monospace;margin:14px 0}.terminal.error{color:var(--danger);font-size:.9rem;max-height:380px;overflow:auto}.plot{display:block;width:100%;height:auto;border-radius:5px}.plot-preview{width:100%;display:block}.metrics{display:flex;gap:20px;flex-wrap:wrap;padding:19px 0;border-top:1px solid var(--line);margin-top:16px}.metric{flex:1;min-width:125px}.metric small{font-size:.8rem;display:block;color:var(--sub);margin-bottom:7px}.metric strong{font-size:1.6rem;letter-spacing:-.025em;font-weight:500}.metric span{font-size:.85rem;color:var(--sub)}.takeaway{padding:15px 0 0;font-size:1.02rem;line-height:1.6;color:var(--sub)}.takeaway strong{color:var(--ink)}details{padding:17px 0;font-size:.9rem;color:var(--sub)}summary{cursor:pointer;color:var(--ink)}details pre{overflow:auto;font:1rem/1.6 Consolas,monospace;padding:12px 0;color:var(--cyan)}.footer{display:flex;align-items:center;gap:20px;padding:16px 4vw;border-top:1px solid var(--line)}.footer>div{display:flex;gap:10px;margin-left:auto}.footer>span{font-size:.8rem;color:var(--sub)}.keys span{margin:0 8px}#position{color:var(--orange);min-width:70px}.challenge{display:grid;grid-template-columns:1fr 1fr;gap:5vw;align-items:center;padding:28px 0;min-height:490px}.challenge ol{padding:0;list-style:none;counter-reset:step}.challenge li{counter-increment:step;padding:22px 0;border-top:1px solid var(--line);font-size:1.22rem;line-height:1.5}.challenge li:before{content:'0' counter(step);color:var(--orange);margin-right:20px;font-size:.9rem}code{font-family:Consolas,monospace;color:var(--cyan)}.action-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}dialog{max-width:760px;width:calc(100% - 32px);max-height:85vh;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:12px;padding:32px;line-height:1.65}dialog::backdrop{background:#000b}dialog>button{float:right}dialog pre{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--cyan);font-size:.92rem}dialog h2{font-size:1.8rem}.notice{color:var(--danger);font-size:1rem}.zoom-figure{background:var(--panel);padding:20px;border-radius:10px}.force-equation{font-size:clamp(1.55rem,2.6vw,2.6rem);letter-spacing:-.035em;margin:28px 0;color:var(--orange)}.force-caption{color:var(--sub);font-size:1.05rem;line-height:1.65}.success-label{color:var(--cyan)}.warning-label{color:var(--orange)}
@media(min-width:1500px){#stage{max-width:1680px;margin:auto}.editor{font-size:1.3rem}.lede{font-size:1.5rem}}
@media(max-width:1000px){.topbar{gap:18px}.course{display:none}.top-actions{gap:7px}.workspace{gap:18px}.editor{padding:15px}.keys{display:none}.intro{min-height:480px}.diagram{max-height:410px}}
@media(max-width:720px){.topbar{flex-wrap:wrap;padding:16px 20px;gap:12px}.top-actions{margin:0;width:100%;flex-wrap:wrap}#runtime{margin-right:auto}.top-actions button{padding:8px 10px}#chapters{padding:12px 16px;gap:0}#chapters button{padding:7px 8px;font-size:.75rem}#chapters button span{margin-right:5px}#stage{padding:14px 20px}.intro,.workspace,.challenge{grid-template-columns:1fr;gap:24px;min-height:0}h1{font-size:3rem}.intro .diagram{max-height:350px}.prompt{margin-top:24px}.lesson-header{flex-direction:column;gap:12px}.lesson-header h2{font-size:2rem}.editor{font-size:1rem;min-height:300px}.footer{padding:14px 20px}.footer button{padding:9px 13px}.empty{min-height:240px}.metric strong{font-size:1.4rem}.metrics{gap:12px}.metric{min-width:100px}.challenge{padding:12px 0}.challenge li{font-size:1.1rem}}
.brand-block{flex-shrink:0}.author{margin:6px 0 0;font-size:.875rem;color:var(--sub);letter-spacing:0;line-height:1.4}
.state-map{display:grid;grid-template-columns:minmax(0,1fr) 160px minmax(0,1fr);align-items:center;gap:24px;padding:24px 32px;background:var(--panel);border-radius:10px;margin-bottom:28px}.map-label{font-size:.8rem;letter-spacing:.12em;color:var(--sub);margin:0 0 13px}.vector{display:flex;align-items:center;justify-content:space-between;gap:16px;max-width:350px}.vector>span{font-size:3.6rem;color:var(--sub);font-weight:300}.vector>div{text-align:center}.vector strong{display:block;font:2rem Consolas,monospace;color:var(--orange)}.vector small{display:block;margin-top:6px;color:var(--sub);font-size:.85rem;white-space:nowrap}.state-map>div:last-child .vector strong{color:var(--cyan)}.map-link{color:var(--sub);font-size:.85rem;line-height:1.5;text-align:center}.map-link span{display:block;color:var(--cyan);font-size:2rem}.explain-grid{display:grid;grid-template-columns:1fr 1fr;gap:40px}.explanation h3{font-size:1.2rem;margin-bottom:12px;letter-spacing:-.015em}.explanation p{line-height:1.6}.explain-grid p{font-size:1rem;color:var(--sub);margin-bottom:14px}.explanation strong{color:var(--ink)}.explanation .model-note{font-size:.875rem;color:var(--sub);line-height:1.6}.rhs-example{padding:16px 20px;background:var(--code);border-radius:8px;overflow:auto;font:1rem/1.7 Consolas,monospace;margin:15px 0}.solver-story{border-top:1px solid var(--line);padding-top:22px;margin-top:12px}.solver-story ol{list-style:none;padding:0;display:grid;grid-template-columns:1fr 1.35fr 1fr;gap:30px;counter-reset:solver;margin:18px 0}.solver-story li{counter-increment:solver;font-size:.95rem;color:var(--sub);line-height:1.65}.solver-story li>strong{display:block;margin-bottom:9px;font-size:1rem}.solver-story li>strong:before{content:counter(solver) ' / ';color:var(--orange)}.solver-story li>span{display:block}.solver-story a{white-space:nowrap;margin-left:8px}
@media(max-width:1000px){.state-map{grid-template-columns:minmax(0,1fr) 110px minmax(0,1fr);gap:15px;padding:20px}.explain-grid{gap:26px}.solver-story ol{gap:20px}.vector{gap:8px}.vector small{font-size:.8rem}}
@media(max-width:720px){.author{font-size:.875rem}.state-map{grid-template-columns:1fr;gap:10px}.state-map>div{max-width:100%}.vector{max-width:330px}.map-link{text-align:left;margin:0;font-size:.8rem}.map-link span{display:inline-block;transform:rotate(90deg);margin-left:16px}.map-link br{display:none}.explain-grid,.solver-story ol{grid-template-columns:1fr;gap:16px}.solver-story{margin-top:0}.solver-story a{display:inline-block;margin-left:0}.rhs-example{font-size:.9rem;padding:13px}.explanation .lesson-header h2{font-size:2.1rem}}
.manual-modes{display:flex;gap:10px;margin:0 0 22px;flex-wrap:wrap}.manual-modes button{background:transparent;color:var(--sub);border-color:var(--line)}.manual-modes button[aria-pressed="true"]{background:var(--panel);color:var(--orange);border-color:var(--orange)}.euler-updates{border-top:1px solid var(--line);padding:18px 0 10px;margin-bottom:14px}.euler-updates>div{display:flex;gap:17px;align-items:center;margin:12px 0}.euler-updates>div>span{color:var(--orange);font-size:.9rem}.euler-updates>div>code{font-size:clamp(.95rem,1.55vw,1.4rem);overflow-wrap:anywhere}.euler-updates>p:last-child{font-size:1rem;line-height:1.65;color:var(--sub);margin:20px 0 0}.euler-updates strong{color:var(--ink)}.manual-empty{color:var(--sub);line-height:1.6;border-bottom:1px solid var(--line);padding:8px 0 22px}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
.course-home-link{font-size:.875rem;text-underline-offset:4px;white-space:nowrap}.question-page{max-width:1080px;margin:0 auto;padding:8px 0 24px}.question-page .lede{max-width:850px}.question-convention,.question-source{color:var(--sub);font-size:.875rem;line-height:1.6}.question-parts{margin:26px 0}.question-part{display:grid;grid-template-columns:48px minmax(0,1fr);gap:16px;border-top:1px solid var(--line);padding:24px 0}.part-letter{color:var(--orange);font-size:1.3rem}.question-part h3{font-size:1.15rem;margin:0 0 10px}.question-part p{line-height:1.65;margin:0;max-width:850px}.question-formula{font:clamp(1.05rem,2vw,1.5rem)/1.9 Consolas,monospace;color:var(--cyan);white-space:pre-wrap;overflow-wrap:anywhere;margin:16px 0}.question-note{color:var(--sub)}.course-shell{max-width:1100px;margin:auto;padding:44px 4vw}.course-shell h1{font-size:clamp(2.3rem,5vw,4rem)}.course-shell>.lede{max-width:700px}.tutorial-list{margin:36px 0}.tutorial-link{display:block;color:var(--ink);text-decoration:none;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:28px 0}.tutorial-link:hover h2{color:var(--cyan)}.tutorial-link h2{font-size:clamp(1.6rem,3vw,2.2rem);margin-bottom:14px}.tutorial-link p{color:var(--sub);line-height:1.65;max-width:740px;margin-bottom:20px}.tutorial-link .open-lesson{color:var(--orange);font-weight:600}.course-footnote{color:var(--sub);line-height:1.65;font-size:.95rem;max-width:760px}
@media(max-width:720px){.question-part{grid-template-columns:32px minmax(0,1fr);gap:10px}.course-shell{padding:30px 20px}.question-formula{font-size:1rem}.course-home-link{margin-left:auto}}
.intro-problem{grid-column:1/-1;border-top:1px solid var(--line);padding:30px 0 8px;margin-top:4px}.intro-problem h2{font-size:clamp(1.65rem,2.5vw,2.3rem)}.intro-problem p,.intro-problem li{font-size:1.02rem;line-height:1.7;max-width:1050px}.intro-problem ol{padding-left:26px;display:grid;grid-template-columns:1fr 1fr;column-gap:48px;row-gap:18px;margin:24px 0}.intro-problem li{padding-left:6px}.intro-problem li::marker{color:var(--orange);font-weight:600}.intro-problem .problem-scope{color:var(--cyan)}.intro-problem .problem-source{font-size:.875rem;color:var(--sub)}.setup-physics{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.2fr);gap:36px;margin:0 0 30px;padding:24px;border:1px solid var(--line);border-radius:12px;background:var(--panel)}.setup-physics h3{font-size:1.25rem}.setup-physics p{font-size:1rem;line-height:1.65;color:var(--sub);margin-bottom:12px}.setup-equation{font:clamp(1.15rem,1.8vw,1.7rem)/1.7 Consolas,monospace;color:var(--orange);margin:8px 0 18px;overflow-wrap:anywhere}.parameter-table-wrap{min-width:0}.parameter-table{width:100%;border-collapse:collapse;font-size:.93rem;line-height:1.5;text-align:left}.parameter-table caption{text-align:left;font-size:1rem;font-weight:600;margin-bottom:14px}.parameter-table th,.parameter-table td{vertical-align:top;padding:10px 9px;border-bottom:1px solid var(--line)}.parameter-table thead th{font-size:.875rem;color:var(--sub)}.parameter-table tbody th{font-weight:400}.parameter-table td:last-child{color:var(--sub)}.setup-physics .parameter-note{margin:14px 0 0;font-size:.875rem}.simulation-open{font-size:.9rem;line-height:1.6;white-space:nowrap}.simulation-note{color:var(--sub);line-height:1.6}.simulation-frame{display:block;width:100%;height:1300px;border:0;background:var(--bg);margin:26px 0 0}.simulation-page .lesson-header .lede{max-width:900px}
@media(max-width:900px){.setup-physics{grid-template-columns:1fr;gap:18px;padding:20px}.intro-problem ol{grid-template-columns:1fr;gap:16px}.parameter-table{font-size:.875rem}.parameter-table th,.parameter-table td{padding:9px 5px}.simulation-page .lesson-header{flex-direction:column}.simulation-open{white-space:normal}}
