:root{--bg: #0e0f14;--panel: #161922;--panel-2: #1e222d;--border: #272c39;--text: #e8eaf1;--muted: #98a2b6;--accent: #5b8cff;--accent-press: #4b78f0;--accent-2: #7b6bff;--accent-grad: linear-gradient(135deg, #5b8cff 0%, #7b6bff 100%);--accent-soft: color-mix(in srgb, var(--accent) 14%, var(--panel));--gold: #e0a94a;--pass: #45c785;--fail: #ff6b6b;--r-sm: 8px;--r-md: 12px;--r-lg: 16px;--pill: 999px;--shadow: 0 16px 40px -16px rgba(0, 0, 0, .65);--font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono: "SF Mono", "Fira Code", "JetBrains Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.55}code,pre{font-family:var(--mono)}.app{display:grid;grid-template-columns:270px 1fr;min-height:100vh}.sidebar{background:var(--panel);border-right:1px solid var(--border);padding:18px 14px;position:sticky;top:0;height:100vh;overflow-y:auto}.logo{background:none;border:none;color:var(--text);font-size:20px;font-weight:700;letter-spacing:-.02em;cursor:pointer;padding:4px 6px 16px}.lang-group{margin-bottom:4px}.lang-header{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:none;border:none;color:var(--text);padding:9px 6px;border-radius:7px;cursor:pointer;font-size:15px;font-weight:600}.lang-header:hover,.lang-header.open{background:var(--panel-2)}.lang-header .chev{width:12px;color:var(--muted);font-size:11px}.lang-name{flex:1}.lang-progress{font-size:12px;color:var(--muted);font-weight:500}.lang-body{padding:2px 0 8px 6px}.stage-group{margin:6px 0}.stage-label{text-transform:uppercase;font-size:10px;letter-spacing:.08em;color:var(--muted);padding:4px 6px 2px}.skill-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:none;border:none;color:var(--text);padding:7px 8px;border-radius:7px;cursor:pointer;font-size:13.5px}.skill-item:hover{background:var(--panel-2)}.skill-item.active{background:var(--panel-2);box-shadow:inset 2px 0 0 var(--accent)}.skill-status{width:14px;color:var(--muted)}.skill-item.status-completed .skill-status{color:var(--pass)}.skill-title{flex:1}.skill-proj{font-size:9px;color:#d6a64c;text-transform:uppercase;letter-spacing:.05em;border:1px solid #5a4a26;border-radius:99px;padding:1px 6px}.attempt-feedback{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:#1f1a12;border:1px solid #5a4a26;border-left:3px solid #d6a64c;border-radius:8px;padding:10px 14px;margin:4px 0 10px}.attempt-msg{font-size:14px}.attempt-msg strong{color:#e8b85c}.main{padding:36px 44px;max-width:880px}.home h2{font-size:28px;margin:0 0 8px}.home-sub{color:var(--muted);max-width:560px}.home-progress{margin:22px 0;font-size:18px}.home-progress strong{color:var(--accent)}.home-hint{color:var(--muted);font-size:13px;margin-top:18px;max-width:560px}.lesson-header{display:flex;align-items:baseline;gap:12px}.lesson-header h2{margin:4px 0 0;font-size:24px}.lesson-stage{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--accent);border:1px solid var(--border);border-radius:99px;padding:2px 9px}.concept{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:4px 20px;margin:18px 0}.concept pre{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px 14px;overflow-x:auto}.concept code{background:var(--bg);padding:1px 5px;border-radius:4px;font-size:13px}.concept pre code{background:none;padding:0}.task-callout{background:color-mix(in srgb,var(--accent) 9%,var(--panel));border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px;padding:12px 18px;margin:18px 0}.task-label{text-transform:uppercase;letter-spacing:.08em;font-size:11.5px;font-weight:700;color:var(--accent);margin-bottom:2px}.task-body>:first-child{margin-top:0}.task-body>:last-child{margin-bottom:0}.task-body code{background:var(--bg);padding:1px 5px;border-radius:4px;font-size:13px}.task-body pre{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px 14px;overflow-x:auto}.concept table,.reflect table,.deeper-body table,.hint table{border-collapse:collapse;margin:14px 0;font-size:13.5px;display:block;overflow-x:auto;max-width:100%}.concept th,.concept td,.reflect th,.reflect td,.deeper-body th,.deeper-body td,.hint th,.hint td{border:1px solid var(--border);padding:6px 12px;text-align:left}.concept th,.reflect th,.deeper-body th,.hint th{background:var(--panel-2);font-weight:600}.concept tr:nth-child(2n) td,.reflect tr:nth-child(2n) td,.deeper-body tr:nth-child(2n) td{background:#ffffff05}.reflect pre,.deeper-body pre,.hint pre{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px 14px;overflow-x:auto}.reflect code,.deeper-body code,.hint code{background:var(--bg);padding:1px 5px;border-radius:4px;font-size:13px}.reflect pre code,.deeper-body pre code,.hint pre code{background:none;padding:0}.concept ul,.concept ol,.reflect ul,.reflect ol,.deeper-body ul,.deeper-body ol,.hint ul,.hint ol{padding-left:22px}.concept li,.reflect li,.deeper-body li,.hint li{margin:3px 0}.concept blockquote,.reflect blockquote,.deeper-body blockquote{border-left:3px solid var(--border);margin:12px 0;padding:2px 14px;color:var(--muted)}.editor,.multifile{border:1px solid var(--border);border-radius:10px;overflow:hidden}.multifile .editor{border:none;border-radius:0}.file-tabs{display:flex;gap:2px;background:var(--panel);border-bottom:1px solid var(--border);overflow-x:auto}.file-tab{background:none;border:none;color:var(--muted);padding:9px 14px;font-family:var(--mono);font-size:13px;cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent}.file-tab:hover{color:var(--text)}.file-tab.active{color:var(--text);background:var(--bg);border-bottom-color:var(--accent)}.solution-file{margin-bottom:12px}.solution-file-name{font-family:var(--mono);font-size:12px;color:var(--accent);margin-bottom:4px}.lesson-actions{display:flex;gap:10px;margin:16px 0;flex-wrap:wrap}.btn{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:var(--r-sm);padding:9px 16px;font-size:14px;font-weight:600;cursor:pointer;transition:border-color .12s ease,background .12s ease,transform .12s ease,filter .12s ease}.btn:hover:not(:disabled){border-color:var(--muted)}.btn:disabled{opacity:.55;cursor:default}.btn.primary{background:var(--accent-grad);border-color:transparent;color:#fff}.btn.primary:hover:not(:disabled){filter:brightness(1.08)}.btn.ghost{background:none}.btn.ghost:hover:not(:disabled){background:var(--panel-2)}.test-panel{margin:14px 0}.test-summary{font-weight:700;margin-bottom:10px}.test-list{list-style:none;padding:0;margin:0}.test{display:flex;align-items:baseline;gap:8px;padding:6px 10px;border-radius:7px;margin-bottom:4px;background:var(--panel);border:1px solid var(--border)}.test-mark{font-weight:700}.test.pass .test-mark{color:var(--pass)}.test.fail .test-mark{color:var(--fail)}.test-detail{color:var(--muted);font-size:13px}.test-detail code{background:var(--bg);padding:1px 5px;border-radius:4px}.output-block{margin-top:12px}.output-label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:4px}.output-block pre{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:12px 14px;margin:0;overflow-x:auto;white-space:pre-wrap}.output-block.error pre{border-color:var(--fail);color:#ffb3b3}.reflect{margin-top:20px;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:4px 20px}.reflect.success{border-color:var(--pass)}.reflect h3{margin:16px 0 8px}.reflect h4{margin:18px 0 6px;font-size:15px;color:var(--accent)}.solution{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px 14px;overflow-x:auto}.hints{margin:4px 0 8px}.hint{background:#1a1f2b;border:1px solid var(--border);border-left:3px solid #d6a64c;border-radius:6px;padding:2px 14px;margin-bottom:8px}.hint-label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#d6a64c;margin-top:10px}.hint p{margin:4px 0 10px}.deeper{margin-top:22px;border-top:1px solid var(--border);padding-top:10px}.deeper-toggle{background:none;border:none;color:var(--accent);font-size:14px;font-weight:600;cursor:pointer;padding:4px 0}.deeper-body{color:var(--text)}.deeper-body a{color:var(--accent)}.lesson-stage.project{color:#d6a64c;border-color:#5a4a26}.rubric{margin:14px 0}.rubric-summary{font-weight:700;margin-bottom:10px}.rubric-item{display:flex;gap:10px;padding:10px 12px;border-radius:8px;margin-bottom:6px;background:var(--panel);border:1px solid var(--border)}.rubric-item.pass{border-color:var(--pass)}.rubric-mark{font-weight:700;font-size:16px;line-height:1.4}.rubric-item.pass .rubric-mark{color:var(--pass)}.rubric-item.fail .rubric-mark{color:var(--muted)}.rubric-body{flex:1}.rubric-name{font-weight:600}.rubric-fails{margin:6px 0 0;padding-left:16px;color:var(--muted);font-size:13px}.rubric-fails code{background:var(--bg);padding:1px 5px;border-radius:4px}.loading-screen{display:flex;align-items:center;justify-content:center;height:100vh;color:var(--muted)}.auth-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px}.auth-card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:36px 32px;width:100%;max-width:380px}.auth-logo{font-size:22px;font-weight:700;letter-spacing:-.02em;margin-bottom:22px}.auth-card h2{margin:0 0 6px;font-size:22px}.auth-sub{color:var(--muted);margin:0 0 20px;font-size:14px}.auth-input{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:11px 13px;color:var(--text);font-size:15px}.auth-form .btn{width:100%}.auth-note{color:var(--muted);font-size:12px;margin-top:16px;line-height:1.5}.auth-error{color:var(--fail);font-size:13px;margin-top:14px}.account{margin:4px 0 14px;padding-bottom:14px;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:8px}.account-email{font-size:12px;color:var(--muted);word-break:break-all}.btn.small{padding:6px 12px;font-size:13px;align-self:flex-start}.account .btn.small{align-self:stretch;text-align:center}.account .save-cta{background:var(--accent);color:#fff;border-color:var(--accent);font-weight:600}.account .save-cta:hover{background:var(--accent-press)}.install-btn{border:1px solid var(--accent);color:var(--accent)}.install-hint{display:block;margin-top:2px;font-size:11px;color:var(--muted);line-height:1.4}.nudge{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;background:color-mix(in srgb,var(--accent) 12%,var(--panel));border:1px solid var(--accent);border-radius:12px;padding:14px 18px;margin:0 0 22px}.nudge-body{font-size:14px}.nudge-body strong{color:var(--text)}.nudge-actions{display:flex;gap:8px;flex-shrink:0}.code-textarea{width:100%;background:var(--bg);color:var(--text);font-family:var(--mono);font-size:14px;line-height:1.55;border:1px solid var(--border);border-radius:var(--r-md);padding:12px 14px;resize:vertical;white-space:pre;overflow:auto;-moz-tab-size:2;tab-size:2}.mobile-topbar,.nav-backdrop{display:none}@media (max-width: 720px){.app{grid-template-columns:1fr}.main{padding:18px 15px;min-width:0}.mobile-topbar{display:flex;align-items:center;gap:12px;position:sticky;top:0;z-index:30;background:var(--panel);border-bottom:1px solid var(--border);padding:10px 14px}.nav-toggle{display:inline-flex;flex-direction:column;gap:4px;background:none;border:none;cursor:pointer;padding:6px}.nav-toggle span{width:22px;height:2px;background:var(--text);border-radius:2px}.mobile-title{font-weight:800;font-size:18px;background:var(--accent-grad);-webkit-background-clip:text;background-clip:text;color:transparent}.sidebar{position:fixed;top:0;left:0;height:100vh;width:84%;max-width:300px;transform:translate(-100%);transition:transform .2s ease;z-index:50;box-shadow:var(--shadow)}.app.nav-open .sidebar{transform:translate(0)}.app.nav-open .nav-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;z-index:40}.concept,.reflect,.deeper-body,.hint{overflow-x:auto}.main,.lesson{max-width:100%}.terminal{height:300px}.landing-main{padding:28px 18px 56px}.landing-hero{font-size:clamp(28px,9vw,40px)}.code-textarea,.term-input,.auth-input,.term-body{font-size:16px}}.auth-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0009;display:flex;align-items:center;justify-content:center;padding:20px}.auth-overlay .auth-card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:28px;width:100%;max-width:380px;box-shadow:0 20px 60px #00000080}.auth-card .auth-logo{font-weight:700;font-size:20px;color:var(--accent);margin-bottom:6px}.auth-card h2{margin:4px 0}.auth-sub{color:#9aa3b2;font-size:13.5px;margin:0 0 16px}.oauth-row{display:flex;flex-direction:column;gap:8px}.oauth-btn{width:100%;text-align:center;text-decoration:none}.auth-divider{display:flex;align-items:center;gap:10px;color:#6b7280;font-size:12px;margin:14px 0}.auth-divider:before,.auth-divider:after{content:"";flex:1;height:1px;background:var(--border)}.auth-form{display:flex;flex-direction:column;gap:10px}.auth-input{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px 12px;color:inherit;font-size:14px}.auth-input:focus{outline:none;border-color:var(--accent)}.auth-error{color:#ff6b6b;font-size:13px;margin:10px 0 0}.auth-toggle{font-size:13px;color:#9aa3b2;margin:14px 0 6px}.linklike{background:none;border:none;color:var(--accent);cursor:pointer;padding:0;font:inherit}.auth-guest{width:100%}.install-btn{margin-top:6px}.install-hint{display:block;margin-top:8px;font-size:11.5px;color:var(--muted);line-height:1.4}.landing{max-width:740px}.landing-hero{font-size:34px;margin:4px 0 10px;letter-spacing:-.02em}.landing-sub{color:var(--muted);font-size:16px;max-width:620px;margin:0 0 22px;line-height:1.6}.landing-prompt{font-weight:600;margin:0 0 14px}.lang-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}.lang-card{text-align:left;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 16px;cursor:pointer;display:flex;flex-direction:column;gap:3px;color:var(--text);transition:border-color .12s ease,transform .12s ease}.lang-card:hover{border-color:var(--accent);transform:translateY(-2px)}.lang-card-count{color:var(--accent);font-size:11.5px;margin-top:4px}.landing-browse{margin-top:22px;font-size:14px}.landing-top{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-bottom:16px}.landing-signin{padding:6px 18px}.landing-page{min-height:100vh;display:flex;flex-direction:column;background:radial-gradient(1100px 520px at 50% -8%,color-mix(in srgb,var(--accent) 12%,transparent),transparent 60%),var(--bg)}.landing-nav{display:flex;align-items:center;justify-content:space-between;padding:20px 28px;flex-wrap:wrap;gap:12px}.landing-logo{font-weight:800;font-size:20px;letter-spacing:-.02em;background:var(--accent-grad);-webkit-background-clip:text;background-clip:text;color:transparent}.landing-nav-right{display:flex;align-items:center;gap:10px}.landing-top-text{color:var(--muted);font-size:13.5px}.landing-main{flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;width:100%;max-width:820px;margin:0 auto;padding:48px 24px 72px}.landing-badge{font-size:12.5px;color:var(--muted);border:1px solid var(--border);border-radius:var(--pill);padding:5px 14px;margin-bottom:24px;background:var(--panel)}.landing-hero{font-size:clamp(34px,6.5vw,54px);line-height:1.04;letter-spacing:-.03em;font-weight:800;margin:0 0 16px}.landing-sub{color:var(--muted);font-size:17px;line-height:1.6;max-width:560px;margin:0 0 36px}.landing-pick{font-size:12px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:14px}.lang-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(178px,1fr));gap:12px;width:100%;max-width:720px}.lang-card{text-align:left;background:var(--panel);border:1px solid var(--border);border-radius:var(--r-md);padding:16px 18px;cursor:pointer;display:flex;flex-direction:column;gap:3px;color:var(--text);transition:border-color .14s ease,transform .14s ease,box-shadow .14s ease}.lang-card:hover{border-color:var(--accent);transform:translateY(-3px);box-shadow:var(--shadow)}.lang-card-name{font-weight:700;font-size:15px}.lang-card-blurb{color:var(--muted);font-size:12.5px}.lang-card-count{color:var(--accent);font-size:11.5px;margin-top:6px;font-weight:600}.lang-more{margin-top:28px;display:flex;flex-direction:column;align-items:center;gap:12px}.lang-more-label{font-size:11.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.chip{background:var(--panel);border:1px solid var(--border);border-radius:var(--pill);padding:7px 14px;font-size:13px;color:var(--text);cursor:pointer;transition:border-color .12s ease,color .12s ease}.chip:hover{border-color:var(--accent);color:var(--accent)}.landing-browse{margin-top:32px;font-size:14px}.logo{background:var(--accent-grad);-webkit-background-clip:text;background-clip:text;color:transparent}.lang-cards,.chips{animation:rise .25s ease both}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.nudge{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 22%,var(--panel)),color-mix(in srgb,var(--accent-2) 20%,var(--panel)));border:1px solid color-mix(in srgb,var(--accent) 50%,var(--border));border-radius:var(--r-md);padding:18px 22px;margin:0 0 26px;box-shadow:var(--shadow);animation:nudge-in .35s cubic-bezier(.2,.8,.2,1) both}.nudge-title{font-size:17px;font-weight:700;color:var(--text)}.nudge-text{color:color-mix(in srgb,var(--text) 76%,transparent);font-size:14px;margin-top:3px}.nudge-actions{display:flex;gap:8px;flex-shrink:0;align-items:center}@keyframes nudge-in{0%{opacity:0;transform:translateY(-8px) scale(.99)}to{opacity:1;transform:none}}.file-ro{color:var(--muted);font-size:11px;margin-left:6px}.error-explain{background:color-mix(in srgb,var(--fail) 10%,var(--panel));border:1px solid color-mix(in srgb,var(--fail) 45%,var(--border));border-left:3px solid var(--fail);border-radius:var(--r-md);padding:12px 16px;margin:4px 0 12px}.error-explain-head{display:flex;align-items:center;gap:10px}.error-explain-badge{text-transform:uppercase;font-size:10.5px;letter-spacing:.08em;font-weight:700;color:var(--fail);border:1px solid color-mix(in srgb,var(--fail) 45%,var(--border));border-radius:var(--pill);padding:2px 9px}.error-explain-title{font-weight:700;font-size:15px}.error-explain-detail{color:color-mix(in srgb,var(--text) 82%,transparent);font-size:13.5px;margin:8px 0}.error-explain-raw{background:var(--bg);border:1px solid var(--border);border-radius:var(--r-sm);padding:8px 10px;margin:0;font-size:12px;color:#ffb3b3;overflow-x:auto;white-space:pre-wrap}.logic-explain{background:var(--accent-soft);border:1px solid color-mix(in srgb,var(--accent) 38%,var(--border));border-left:3px solid var(--accent);border-radius:var(--r-md);padding:12px 16px;margin:4px 0 12px}.logic-explain-title{font-weight:700;font-size:15px}.logic-explain-detail{color:color-mix(in srgb,var(--text) 82%,transparent);font-size:13.5px;margin:8px 0 0}.logic-explain-detail code{background:var(--bg);padding:1px 6px;border-radius:4px;font-size:12.5px}.terminal{background:#0b0d12;border:1px solid var(--border);border-radius:var(--r-md);height:340px;overflow:hidden;font-family:var(--mono);font-size:13px;cursor:text}.term-body{height:100%;overflow-y:auto;padding:12px 14px}.term-line{white-space:pre-wrap;line-height:1.5}.term-cmd{color:var(--text)}.term-out{color:#cbd3e1}.term-err{color:#ff9b9b}.term-inputline{display:flex;gap:8px;align-items:baseline}.term-prompt{color:var(--accent);white-space:nowrap}.term-input{flex:1;background:none;border:none;color:var(--text);font:inherit;outline:none;padding:0}.auth-forgot{font-size:13px;margin:8px 0 0}.reset-main{max-width:440px}.reset-title{font-size:28px;margin:10px 0 18px;letter-spacing:-.02em}.reset-form{width:100%;max-width:360px}
