:root{--bg:#fff;--bg-2:#f6f7f9;--bg-3:#eceef2;--fg:#1c1e24;--fg-2:#5b6170;--border:#d9dce3;--accent:#2f6fed;--accent-fg:#fff;--pass:#1d8a4e;--pass-bg:#e6f6ec;--fail:#c93c3c;--fail-bg:#fbeaea;--warn:#b7791f;--mono:ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--sans:system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, sans-serif;--sidebar-w:280px;--topbar-h:48px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#15171c;--bg-2:#1c1f26;--bg-3:#262a33;--fg:#e6e8ee;--fg-2:#9aa1b2;--border:#2f343f;--accent:#6c9cff;--accent-fg:#0d1117;--pass:#4cc38a;--pass-bg:#163123;--fail:#ff7b7b;--fail-bg:#3a1f22;--warn:#e0b35a}}:root[data-theme=dark]{--bg:#15171c;--bg-2:#1c1f26;--bg-3:#262a33;--fg:#e6e8ee;--fg-2:#9aa1b2;--border:#2f343f;--accent:#6c9cff;--accent-fg:#0d1117;--pass:#4cc38a;--pass-bg:#163123;--fail:#ff7b7b;--fail-bg:#3a1f22;--warn:#e0b35a}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--sans);color:var(--fg);background:var(--bg);font-size:16px;line-height:1.55}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}code,pre{font-family:var(--mono);font-size:.92em}button{font:inherit;color:inherit;background:var(--bg-3);border:1px solid var(--border);cursor:pointer;border-radius:6px;padding:6px 12px}button:hover{filter:brightness(1.05)}button:disabled{opacity:.55;cursor:default}button.primary{background:var(--accent);color:var(--accent-fg);border-color:#0000;font-weight:600}button.danger{background:var(--fail);color:#fff;border-color:#0000}button.linkish{color:var(--accent);background:0 0;border:none;padding:4px 6px}button.linkish:hover{text-decoration:underline}.muted{color:var(--fg-2)}.hint-key{color:var(--fg-2);margin-left:auto;font-size:.8em}.app{min-height:100%}.topbar{height:var(--topbar-h);background:var(--bg-2);border-bottom:1px solid var(--border);z-index:20;align-items:center;gap:12px;padding:0 16px;display:flex;position:fixed;top:0;left:0;right:0}.brand{color:var(--fg);white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-weight:700;overflow:hidden}.menu{padding:4px 10px;display:none}.runner-pill{border:1px solid var(--border);color:var(--fg-2);background:var(--bg);white-space:nowrap;border-radius:999px;flex-shrink:0;margin-left:auto;padding:2px 10px;font-size:.8em}.runner-pill.ready{color:var(--pass);border-color:var(--pass)}.runner-pill.running{color:var(--accent);border-color:var(--accent)}.runner-pill.error{color:var(--fail);border-color:var(--fail)}.sidebar{top:var(--topbar-h);width:var(--sidebar-w);background:var(--bg-2);border-right:1px solid var(--border);padding:12px 8px 24px;font-size:.93em;position:fixed;bottom:0;left:0;overflow-y:auto}.nav-root{margin:0;padding:0;list-style:none}.nav-root ul{margin:0;padding:0 0 0 14px;list-style:none}.nav-extra{border-top:1px solid var(--border);margin-top:16px;padding-top:12px}.nav-row{border-radius:6px;align-items:center;gap:4px;padding:3px 6px;display:flex}.nav-row.current{background:var(--bg-3)}.nav-row a{color:var(--fg);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.nav-row.current a{font-weight:600}.disclosure{width:20px;color:var(--fg-2);background:0 0;border:none;padding:0 4px}.disclosure-spacer{width:20px;display:inline-block}.page-status{color:var(--fg-2);font-size:.8em}.page-status.done{color:var(--pass)}.page-status.partial{color:var(--warn)}.main{padding:calc(var(--topbar-h) + 24px) 32px 64px calc(var(--sidebar-w) + 32px)}.page{max-width:820px;margin:0 auto}.page-wide{max-width:1400px}.boot{text-align:center;padding:80px 24px}@media (width<=900px){.menu{flex-shrink:0;display:inline-block}.topbar{gap:8px;padding:0 12px}.sidebar{z-index:30;transition:transform .15s;transform:translate(-100%)}.drawer-open .sidebar{transform:none}.scrim{inset:var(--topbar-h) 0 0 0;z-index:25;background:#0000004d;position:fixed}.main{padding:calc(var(--topbar-h) + 16px) 16px 48px 16px}}.markdown h1{margin:0 0 .6em;font-size:1.9em;line-height:1.2}.markdown h2{margin:1.6em 0 .5em;font-size:1.4em}.markdown h3{margin:1.4em 0 .4em;font-size:1.15em}.markdown p,.markdown ul,.markdown ol{margin:.7em 0}.markdown li{margin:.25em 0}.markdown code{background:var(--bg-3);border-radius:4px;padding:1px 5px}.markdown pre code,.exercise pre code{background:0 0;padding:0}pre.static{background:var(--bg-2);border:1px solid var(--border);border-radius:8px;margin:.8em 0;padding:12px 14px;overflow-x:auto}.markdown table{border-collapse:collapse;margin:1em 0}.markdown th,.markdown td{border:1px solid var(--border);text-align:left;padding:6px 10px}.markdown blockquote{border-left:3px solid var(--border);color:var(--fg-2);margin:1em 0;padding:.2em 1em}.crumbs{color:var(--fg-2);margin-bottom:12px;font-size:.9em}.resume{background:var(--bg-2);border:1px solid var(--border);border-radius:8px;margin:0 0 20px;padding:10px 14px}.pager{border-top:1px solid var(--border);justify-content:space-between;gap:16px;margin-top:48px;padding-top:16px;display:flex}.editor .cm-editor{border:1px solid var(--border);background:var(--bg);border-radius:8px}.editor .cm-editor.cm-focused{outline:2px solid var(--accent);outline-offset:-1px}.editor .cm-scroller{overflow:auto}.editor .cm-gutters{background:var(--bg-2);border-right:1px solid var(--border);color:var(--fg-2)}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}.play{margin:1em 0}.play-result{margin-top:8px}.output{background:var(--bg-2);border:1px solid var(--border);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:320px;margin:8px 0 0;padding:10px 14px;overflow:auto}.output .stderr{color:var(--fail)}.error{margin-top:8px}.error-summary{color:var(--fail);background:var(--fail-bg);border-radius:8px;padding:8px 12px}.traceback{background:var(--bg-2);border:1px solid var(--border);white-space:pre-wrap;border-radius:8px;margin:6px 0 0;padding:10px 14px;font-size:.85em}.exercise{border:1px solid var(--border);background:var(--bg-2);border-radius:10px;gap:16px;margin:1.6em 0;padding:16px;display:grid}.exercise.stacked{grid-template-columns:1fr}.exercise.split{grid-template-columns:minmax(280px,5fr) minmax(320px,7fr);align-items:start}@media (width<=1100px){.exercise.split{grid-template-columns:1fr}}.exercise .editor .cm-editor{background:var(--bg)}.exercise-header{flex-wrap:wrap;align-items:baseline;gap:12px;display:flex}.exercise-header h3{margin:0;font-size:1.2em}.exercise.split .exercise-header h3{font-size:1.6em}.exercise-statement .markdown h1{display:none}.exercise-statement pre.static{white-space:pre-wrap;word-break:break-word}.exercise-statement .markdown>:first-child{margin-top:0}.hints,.approach{margin-top:12px}.hints h4,.approach h4{color:var(--fg-2);text-transform:uppercase;letter-spacing:.04em;margin:.6em 0 .3em;font-size:.95em}.hints ol{margin:.3em 0;padding-left:1.4em}.hints .markdown p{margin:0}.approach-body{margin-top:8px}.status-pill{border:1px solid var(--border);color:var(--fg-2);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:.75em}.status-pill.solved{color:var(--pass);border-color:var(--pass);background:var(--pass-bg)}.status-pill.in-progress{color:var(--warn);border-color:var(--warn)}.results{border:1px solid var(--border);border-radius:8px;margin-top:10px;overflow:hidden}.results-banner{padding:8px 12px;font-weight:600}.results.pass .results-banner{background:var(--pass-bg);color:var(--pass)}.results.fail .results-banner{background:var(--fail-bg);color:var(--fail)}.results.neutral .results-banner{background:var(--bg-3)}.cases{background:var(--bg);margin:0;padding:4px 0;list-style:none}.case{border-top:1px solid var(--border);gap:10px;padding:6px 12px;display:flex}.case:first-child{border-top:none}.case-icon{text-align:center;width:1.2em;font-weight:700}.case.pass .case-icon{color:var(--pass)}.case.fail .case-icon,.case.error .case-icon{color:var(--fail)}.case-body{flex:1;min-width:0}.case-detail{margin-top:2px;font-size:.9em}.case-detail .label{width:5em;color:var(--fg-2);display:inline-block}.case-detail code{background:var(--bg-3);word-break:break-all;border-radius:4px;padding:1px 5px}.results .output,.results .error{margin:8px 12px 10px}.problems-table{border-collapse:collapse;width:100%}.problems-table th,.problems-table td{text-align:left;border-bottom:1px solid var(--border);padding:8px 10px}.search{margin:0 6px 12px;position:relative}.search-input{width:100%;font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--fg);border-radius:8px;padding:7px 10px;font-size:.93em}.search-input:focus{outline:2px solid var(--accent);outline-offset:-1px}.search-results{z-index:40;background:var(--bg);border:1px solid var(--border);border-radius:8px;max-height:60vh;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 8px 24px #0000002e}.search-hit{color:var(--fg);border-top:1px solid var(--border);padding:8px 10px;display:block}.search-hit:first-child{border-top:none}.search-hit:hover,.search-hit.active{background:var(--bg-3);text-decoration:none}.search-hit-title{align-items:baseline;gap:8px;font-weight:600;display:flex}.search-kind{color:var(--fg-2);font-size:.75em;font-weight:400}.search-snippet{color:var(--fg-2);margin-top:2px;font-size:.82em;line-height:1.35}.search-empty{padding:10px;font-size:.9em}.tutor{margin-top:10px}.tutor-bar{margin-top:0}.tutor-panel{margin-top:8px}.tutor-panel p{margin:0 0 8px;font-size:.9em}.tutor-text{white-space:pre-wrap;width:100%;font-family:var(--mono);border:1px solid var(--border);background:var(--bg);color:var(--fg);resize:vertical;border-radius:8px;padding:10px;font-size:.8em;line-height:1.4}.theme-btn{background:var(--bg);padding:2px 8px;font-size:1em;line-height:1}.theme-options{flex-wrap:wrap;gap:12px;margin:8px 0 16px;display:flex}.theme-options label{align-items:center;gap:6px;display:flex}.hint-actions{flex-wrap:wrap;gap:12px;display:flex}
