:root{--bg:#f3f1ec;--bg-panel:#faf9f6;--bg-code:#1e2420;--ink:#1c1f1d;--ink-soft:#5c645e;--line:#d9d4c8;--accent:#0d6e5f;--accent-soft:#d8efe9;--warn:#8a4b12;--warn-bg:#f6ead8;--fail:#9b2c2c;--fail-bg:#f8e4e4;--pass:#1f6b3a;--pass-bg:#def0e4;--mono:"IBM Plex Mono", ui-monospace, monospace;--sans:"Outfit", system-ui, sans-serif;--radius:10px;color:var(--ink);background:var(--bg);font-family:var(--sans);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body,#root{height:100%;min-height:100%;margin:0}body{background:radial-gradient(1200px 600px at 10% -10%, #e7efe9 0%, transparent 55%), radial-gradient(900px 500px at 100% 0%, #ebe4d6 0%, transparent 50%), var(--bg)}button,textarea{font:inherit}button{cursor:pointer}code,pre{font-family:var(--mono)}.app{grid-template-columns:280px 1fr;height:100%;min-height:100vh;animation:.42s ease-out app-in;display:grid}@keyframes app-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.sidebar{border-right:1px solid var(--line);background:color-mix(in srgb, var(--bg-panel) 88%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);flex-direction:column;min-height:100vh;display:flex;overflow:hidden}.brand{border-bottom:1px solid var(--line);padding:1.35rem 1.25rem 1rem}.brand h1{letter-spacing:-.03em;margin:0;font-size:1.35rem;font-weight:700}.brand p{color:var(--ink-soft);margin:.35rem 0 0;font-size:.88rem;line-height:1.35}.progress-bar{background:var(--line);border-radius:999px;height:4px;margin-top:.85rem;overflow:hidden}.progress-bar>span{background:var(--accent);height:100%;transition:width .28s;display:block}.progress-meta{color:var(--ink-soft);font-size:.78rem;font-family:var(--mono);margin-top:.4rem}.nav{flex:1;padding:.75rem .65rem 1.5rem;overflow:auto}.track-label{letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin:.9rem .55rem .35rem;font-size:.72rem;font-weight:600}.nav-item{text-align:left;width:100%;color:var(--ink);background:0 0;border:0;border-radius:8px;grid-template-columns:1fr auto;gap:.25rem .5rem;padding:.55rem .65rem;transition:background .16s,transform .16s;display:grid}.nav-item:hover{background:color-mix(in srgb, var(--accent-soft) 70%, transparent)}.nav-item.active{background:var(--accent-soft);color:var(--accent)}.nav-item .title{font-size:.92rem;font-weight:500}.nav-item .meta{color:var(--ink-soft);font-size:.72rem;font-family:var(--mono)}.nav-item .status{background:var(--line);border-radius:50%;grid-area:1/2/span 2;align-self:center;width:8px;height:8px}.nav-item .status.done{background:var(--accent)}.nav-item .status.started{background:#c4a35a}.sidebar-foot{border-top:1px solid var(--line);flex-direction:column;gap:.5rem;padding:.85rem 1rem 1.1rem;display:flex}.sidebar-foot .notice{color:var(--warn);background:var(--warn-bg);border-radius:8px;padding:.55rem .65rem;font-size:.75rem;line-height:1.35}.linkish{color:var(--ink-soft);text-align:left;text-underline-offset:2px;background:0 0;border:0;padding:0;font-size:.8rem;text-decoration:underline}.main{grid-template-rows:auto 1fr;min-width:0;min-height:100vh;display:grid}.topbar{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--bg-panel) 75%, transparent);justify-content:space-between;align-items:center;gap:1rem;padding:.95rem 1.35rem;display:flex}.topbar h2{letter-spacing:-.02em;margin:0;font-size:1.15rem}.topbar .track-pill{font-family:var(--mono);color:var(--accent);font-size:.75rem}.runtime{font-family:var(--mono);color:var(--ink-soft);font-size:.78rem}.runtime.ready{color:var(--pass)}.workspace{grid-template-columns:minmax(280px,.95fr) minmax(360px,1.15fr);height:calc(100vh - 61px);min-height:0;display:grid}.panel{min-height:0;overflow:auto}.concept{border-right:1px solid var(--line);padding:1.25rem 1.35rem 2rem;animation:.32s panel-in}@keyframes panel-in{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:none}}.concept .lead{margin:0 0 1rem;font-size:1rem;line-height:1.55}.cheat{color:#1a1d1b;border:1px solid var(--line);border-radius:var(--radius);background:#fbfaf7;margin:0 0 1.25rem;padding:.95rem 1.05rem;font-size:.92rem;line-height:1.65;overflow-x:auto}.cheat .label{color:var(--ink-soft);letter-spacing:.06em;text-transform:uppercase;margin-bottom:.45rem;font-size:.72rem;display:block}.actions-row{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.btn{border:1px solid var(--line);background:var(--bg-panel);color:var(--ink);border-radius:8px;padding:.45rem .8rem;font-size:.88rem;font-weight:500;transition:background .15s,border-color .15s,transform .12s}.btn:hover:not(:disabled){border-color:color-mix(in srgb, var(--accent) 45%, var(--line));transform:translateY(-1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.ghost{background:0 0}.hint-box,.solution-box{border-radius:var(--radius);margin-top:.75rem;padding:.85rem 1rem;font-size:.9rem;line-height:1.45}.hint-box{background:var(--warn-bg);color:var(--warn)}.solution-box{background:#e8eee9}.solution-box pre{white-space:pre-wrap;margin:.5rem 0 0;font-size:.92rem;line-height:1.55}.editor-pane{background:#fbfaf7;grid-template-rows:1fr minmax(160px,32%);min-height:0;display:grid}.editor-wrap{border-bottom:1px solid var(--line);min-height:0;overflow:hidden}.editor-wrap .cm-editor{height:100%}.editor-wrap .cm-scroller{font-family:var(--mono)!important}.output{color:#1a1d1b;font-family:var(--mono);background:#f3f1ec;padding:.95rem 1.1rem 1.2rem;font-size:.88rem;line-height:1.55;overflow:auto}.output-head{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.06em;justify-content:space-between;align-items:center;margin-bottom:.55rem;font-size:.72rem;display:flex}.badge{letter-spacing:.04em;border-radius:999px;padding:.2rem .45rem;font-size:.72rem}.badge.pass{background:var(--pass-bg);color:var(--pass)}.badge.fail{background:var(--fail-bg);color:var(--fail)}.badge.idle{color:var(--ink-soft);background:#e2ddd2}.output pre{white-space:pre-wrap;word-break:break-word;margin:0}.flash-pass .editor-wrap{box-shadow:inset 0 0 0 2px color-mix(in srgb, var(--pass) 65%, transparent)}.flash-fail .editor-wrap{box-shadow:inset 0 0 0 2px color-mix(in srgb, var(--fail) 65%, transparent)}@media (width<=980px){.app{grid-template-columns:1fr}.sidebar{min-height:auto;max-height:40vh}.workspace{grid-template-columns:1fr;height:auto}.concept{border-right:0;border-bottom:1px solid var(--line)}.editor-pane{min-height:70vh}}
