:root{--bg-primary: #0a0e17;--bg-secondary: #111827;--bg-tertiary: #1a2236;--bg-card: #151d30;--bg-card-hover: #1c2742;--bg-input: #0d1321;--border: #1e2d4a;--border-light: #2a3a5c;--text-primary: #e8edf5;--text-secondary: #8b9cc0;--text-muted: #5a6b8a;--accent: #06b6d4;--accent-hover: #22d3ee;--accent-dim: #0891b2;--accent-glow: rgba(6, 182, 212, .15);--accent-glow-strong: rgba(6, 182, 212, .3);--error: #ef4444;--error-dim: #991b1b;--warning: #f59e0b;--success: #22c55e;--info: #3b82f6;--xp-gold: #fbbf24;--streak-fire: #f97316;--level-blue: #60a5fa;--track-scala: #de3423;--track-fp: #8b5cf6;--track-ce: #06b6d4;--track-fs2: #10b981;--track-backend: #3b82f6;--track-capstone: #f59e0b;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-xl: 24px;--shadow-sm: 0 1px 3px rgba(0,0,0,.3);--shadow-md: 0 4px 12px rgba(0,0,0,.4);--shadow-lg: 0 8px 32px rgba(0,0,0,.5);--transition: .15s ease}*{margin:0;padding:0;box-sizing:border-box}html{font-size:16px;-webkit-font-smoothing:antialiased}body{font-family:var(--font-sans);background:var(--bg-primary);color:var(--text-primary);line-height:1.5;min-height:100vh;overflow-x:hidden}#app{min-height:100vh}a{color:var(--accent);text-decoration:none;transition:color var(--transition)}a:hover{color:var(--accent-hover)}input,textarea,select{font-family:var(--font-sans);font-size:.9375rem;background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-primary);padding:.75rem 1rem;width:100%;transition:border-color var(--transition),box-shadow var(--transition);outline:none}input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}textarea{resize:vertical;min-height:100px}button,.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-family:var(--font-sans);font-size:.9375rem;font-weight:600;padding:.75rem 1.5rem;border:none;border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition);outline:none;text-decoration:none;line-height:1}.btn-primary{background:var(--accent);color:var(--bg-primary)}.btn-primary:hover{background:var(--accent-hover);box-shadow:0 0 20px var(--accent-glow-strong);transform:translateY(-1px)}.btn-secondary{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border)}.btn-secondary:hover{background:var(--bg-card-hover);border-color:var(--border-light)}.btn-ghost{background:transparent;color:var(--text-secondary);padding:.5rem 1rem}.btn-ghost:hover{color:var(--text-primary);background:var(--bg-tertiary)}.btn-lg{padding:1rem 2rem;font-size:1.0625rem;border-radius:var(--radius-lg)}.btn:disabled,.btn-disabled{opacity:.5;cursor:not-allowed;transform:none!important;box-shadow:none!important}.container{max-width:1200px;margin:0 auto;padding:0 1.5rem}.container-sm{max-width:800px;margin:0 auto;padding:0 1.5rem}.nav{position:sticky;top:0;z-index:100;background:#0a0e17d9;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--border);padding:0 1.5rem}.nav-inner{max-width:1200px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;height:64px}.nav-brand{display:flex;align-items:center;gap:.75rem;font-size:1.25rem;font-weight:700;color:var(--text-primary);cursor:pointer}.nav-brand-icon{width:32px;height:32px;border-radius:var(--radius-sm);background:linear-gradient(135deg,var(--accent),var(--accent-dim));display:flex;align-items:center;justify-content:center;font-size:1rem;font-weight:800;color:var(--bg-primary)}.nav-links{display:flex;gap:.25rem;align-items:center}.nav-link{padding:.5rem 1rem;border-radius:var(--radius-sm);color:var(--text-secondary);font-weight:500;font-size:.9375rem;cursor:pointer;transition:all var(--transition)}.nav-link:hover{color:var(--text-primary);background:var(--bg-tertiary)}.nav-link-active{color:var(--accent)!important}.nav-right{display:flex;align-items:center;gap:.75rem}.nav-xp{display:flex;align-items:center;gap:.5rem;background:var(--bg-tertiary);border-radius:var(--radius-lg);padding:.375rem .875rem;font-weight:600;font-size:.875rem}.nav-xp-icon{color:var(--xp-gold)}.nav-avatar{width:36px;height:36px;border-radius:50%;background:var(--accent-dim);display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--bg-primary);font-size:.875rem;cursor:pointer}.mobile-menu-btn{display:none;background:none;border:none;color:var(--text-secondary);font-size:1.5rem;cursor:pointer;padding:.25rem}.mobile-menu{display:none;flex-direction:column;gap:.25rem;padding:1rem 1.5rem;border-top:1px solid var(--border);background:var(--bg-secondary)}.mobile-menu-open{display:flex}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem;transition:all var(--transition)}.card:hover{border-color:var(--border-light);box-shadow:var(--shadow-md)}.card-glow:hover{border-color:var(--accent-dim);box-shadow:0 0 24px var(--accent-glow)}.badge{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:600;letter-spacing:.02em}.badge-beginner{background:#22c55e26;color:#4ade80}.badge-intermediate{background:#f59e0b26;color:#fbbf24}.badge-advanced{background:#ef444426;color:#f87171}.badge-accent{background:var(--accent-glow);color:var(--accent)}.progress-bar{width:100%;height:6px;border-radius:3px;background:var(--bg-input);overflow:hidden}.progress-fill{height:100%;border-radius:3px;background:linear-gradient(90deg,var(--accent-dim),var(--accent));transition:width .5s ease}.track-scala{--track-color: var(--track-scala)}.track-fp{--track-color: var(--track-fp)}.track-ce{--track-color: var(--track-ce)}.track-fs2{--track-color: var(--track-fs2)}.track-backend{--track-color: var(--track-backend)}.track-capstone{--track-color: var(--track-capstone)}.track-icon{width:48px;height:48px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;font-size:1.25rem;background:#0000004d;border:1px solid var(--track-color);color:var(--track-color)}.code-editor{font-family:var(--font-mono);font-size:.875rem;line-height:1.7;background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-md);padding:1rem;color:var(--accent);min-height:300px;-moz-tab-size:2;tab-size:2;white-space:pre;overflow:auto}.code-output{font-family:var(--font-mono);font-size:.8125rem;line-height:1.6;background:#050810;border:1px solid var(--border);border-radius:var(--radius-md);padding:1rem;color:var(--text-secondary);white-space:pre-wrap;max-height:200px;overflow-y:auto}.code-output-pass{border-color:var(--success)}.code-output-fail{border-color:var(--error)}.lesson-content{max-width:720px;font-size:1.125rem;line-height:1.8;color:var(--text-secondary);letter-spacing:-.003em}.lesson-content h2{font-size:1.75rem;font-weight:700;margin:2.5rem 0 1rem;color:var(--text-primary);letter-spacing:-.01em;line-height:1.3}.lesson-content h3{font-size:1.375rem;font-weight:600;margin:2rem 0 .75rem;color:var(--text-primary);letter-spacing:-.005em;line-height:1.35}.lesson-content h4{font-size:1.125rem;font-weight:600;margin:1.5rem 0 .5rem;color:var(--text-primary);line-height:1.4}.lesson-content p{margin:0 0 1.25rem;color:#c0c9db;line-height:1.8}.lesson-content strong{color:var(--text-primary);font-weight:600}.lesson-content em{font-style:italic;color:#b8c3d6}.lesson-content .lesson-ul{margin:0 0 1.25rem;padding-left:1.5rem;list-style:none}.lesson-content .lesson-li{margin:.5rem 0;color:#c0c9db;line-height:1.75;position:relative;padding-left:.25rem}.lesson-content .lesson-li:before{content:"";position:absolute;left:-1rem;top:.65rem;width:5px;height:5px;border-radius:50%;background:var(--accent)}.lesson-content .lesson-ol{margin:0 0 1.25rem;padding-left:1.75rem;counter-reset:ol-counter;list-style:none}.lesson-content .lesson-ol-item{margin:.5rem 0;color:#c0c9db;line-height:1.75;position:relative;counter-increment:ol-counter}.lesson-content .lesson-ol-item:before{content:counter(ol-counter) ".";position:absolute;left:-1.5rem;font-weight:600;color:var(--accent);font-size:.9375rem}.lesson-content code{font-family:var(--font-mono);font-size:.875em;background:#06b6d414;padding:.15em .4em;border-radius:4px;color:var(--accent);border:1px solid rgba(6,182,212,.12)}.code-block{margin:1.75rem 0;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.code-block-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;background:#0c1220;border-bottom:1px solid var(--border)}.code-block-lang{font-family:var(--font-mono);font-size:.75rem;font-weight:500;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.code-block-copy{font-family:var(--font-mono);font-size:.75rem;font-weight:500;color:var(--text-muted);background:none;border:1px solid var(--border);padding:.2rem .6rem;border-radius:4px;cursor:pointer;transition:all var(--transition)}.code-block-copy:hover{color:var(--text-primary);border-color:var(--border-light);background:var(--bg-tertiary)}.lesson-content .code-block pre{margin:0;padding:1.25rem;background:#080d18;border:none;border-radius:0;overflow-x:auto}.lesson-content .code-block pre code{background:none;padding:0;font-size:.875rem;line-height:1.75;color:#c8d3e5}.callout{margin:1.5rem 0;padding:1rem 1.25rem;border-radius:var(--radius-md);border-left:4px solid}.callout-label{font-weight:700;font-size:.8125rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.375rem}.callout-body{font-size:.9375rem;line-height:1.7;color:#b8c3d6}.callout-note{background:#3b82f614;border-color:#3b82f6}.callout-note .callout-label{color:#60a5fa}.callout-tip{background:#06b6d414;border-color:var(--accent)}.callout-tip .callout-label{color:var(--accent)}.callout-warning{background:#f59e0b14;border-color:#f59e0b}.callout-warning .callout-label{color:#fbbf24}.callout-concept{background:#8b5cf614;border-color:#8b5cf6}.callout-concept .callout-label{color:#a78bfa}.lesson-image{margin:2rem 0;text-align:center}.lesson-img{max-width:100%;border-radius:var(--radius-md);border:1px solid var(--border)}.lesson-caption{margin-top:.5rem;font-size:.875rem;color:var(--text-muted);font-style:italic}.lesson-video{margin:2rem 0;position:relative;padding-bottom:56.25%;border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--border)}.lesson-video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.lesson-hr{border:none;border-top:1px solid var(--border);margin:2.5rem 0}.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:1.5rem}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5rem}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:.5rem}.gap-2{gap:1rem}.gap-3{gap:1.5rem}.gap-4{gap:2rem}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mt-3{margin-top:1.5rem}.mt-4{margin-top:2rem}.mt-6{margin-top:3rem}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.mb-3{margin-bottom:1.5rem}.mb-4{margin-bottom:2rem}.p-2{padding:1rem}.p-3{padding:1.5rem}.p-4{padding:2rem}.text-sm{font-size:.875rem}.text-xs{font-size:.75rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:2rem}.text-4xl{font-size:2.5rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.font-medium{font-weight:500}.text-center{text-align:center}.text-accent{color:var(--accent)}.text-secondary{color:var(--text-secondary)}.text-muted{color:var(--text-muted)}.text-gold{color:var(--xp-gold)}.text-success{color:var(--success)}.text-error{color:var(--error)}.hero{min-height:85vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:4rem 1.5rem;position:relative;overflow:hidden}.hero:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(circle at 50% 50%,var(--accent-glow) 0%,transparent 50%);opacity:.5}.hero-content{position:relative;z-index:1;max-width:720px}.hero-title{font-size:3.5rem;font-weight:800;line-height:1.1;letter-spacing:-.02em;margin-bottom:1.5rem}.hero-title-accent{color:var(--accent)}.hero-subtitle{font-size:1.25rem;color:var(--text-secondary);line-height:1.6;margin-bottom:2.5rem;max-width:560px;margin-inline:auto}.hero-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.features-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2rem;padding:4rem 0;max-width:1000px;margin:0 auto}.feature-card{text-align:center;padding:2rem}.feature-icon{width:56px;height:56px;border-radius:var(--radius-lg);display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;font-size:1.5rem;background:var(--accent-glow);border:1px solid var(--accent-dim);color:var(--accent)}.feature-title{font-size:1.125rem;font-weight:600;margin-bottom:.5rem}.feature-desc{font-size:.9375rem;color:var(--text-secondary);line-height:1.6}.dash-grid{display:grid;grid-template-columns:280px 1fr;gap:2rem;padding:2rem 0}.dash-sidebar{display:flex;flex-direction:column;gap:1.5rem}.dash-main{display:flex;flex-direction:column;gap:2rem}.stat-card{display:flex;align-items:center;gap:1rem;padding:1rem 1.25rem;border-radius:var(--radius-md);background:var(--bg-card);border:1px solid var(--border)}.stat-icon{width:40px;height:40px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:1.125rem}.stat-icon-xp{background:#fbbf2426;color:var(--xp-gold)}.stat-icon-level{background:#60a5fa26;color:var(--level-blue)}.stat-icon-streak{background:#f9731626;color:var(--streak-fire)}.stat-value{font-size:1.25rem;font-weight:700}.stat-label{font-size:.8125rem;color:var(--text-muted)}.leaderboard-table{width:100%;border-collapse:collapse}.leaderboard-table th{text-align:left;padding:.75rem 1rem;font-size:.8125rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border)}.leaderboard-table td{padding:.875rem 1rem;border-bottom:1px solid var(--border)}.leaderboard-table tr:hover td{background:var(--bg-tertiary)}.rank-1{color:#fbbf24;font-weight:700}.rank-2{color:#9ca3af;font-weight:600}.rank-3{color:#d97706;font-weight:600}.achievement-card{display:flex;align-items:center;gap:1rem;padding:1rem 1.25rem}.achievement-icon{width:48px;height:48px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;font-size:1.25rem;background:var(--bg-tertiary);border:2px solid var(--border);flex-shrink:0}.achievement-earned .achievement-icon{border-color:var(--accent);background:var(--accent-glow);color:var(--accent)}.achievement-locked{opacity:.5}.achievement-name{font-weight:600;font-size:.9375rem}.achievement-desc{font-size:.8125rem;color:var(--text-muted)}.achievement-bonus{font-size:.75rem;color:var(--xp-gold);font-weight:600}.auth-container{min-height:calc(100vh - 64px);display:flex;align-items:center;justify-content:center;padding:2rem 1.5rem}.auth-card{width:100%;max-width:420px;padding:2.5rem}.auth-title{font-size:1.5rem;font-weight:700;margin-bottom:.5rem;text-align:center}.auth-subtitle{font-size:.9375rem;color:var(--text-secondary);text-align:center;margin-bottom:2rem}.auth-error{background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:var(--radius-md);padding:.75rem 1rem;color:var(--error);font-size:.875rem;margin-bottom:1rem}.form-group{margin-bottom:1.25rem}.form-label{display:block;font-size:.875rem;font-weight:500;margin-bottom:.375rem;color:var(--text-secondary)}.lesson-grid{display:grid;grid-template-columns:1fr 1fr;gap:2rem;padding:2rem 0;min-height:calc(100vh - 64px);align-items:start}.lesson-sidebar{display:flex;flex-direction:column;gap:1rem;overflow-y:auto;max-height:calc(100vh - 100px);padding-right:1rem;padding-bottom:2rem}.lesson-editor-area{display:flex;flex-direction:column;gap:1rem;position:sticky;top:80px}@media(max-width:1024px){.grid-3{grid-template-columns:repeat(2,1fr)}.dash-grid,.lesson-grid{grid-template-columns:1fr}.lesson-sidebar{max-height:none}}@media(max-width:768px){.grid-2,.grid-3,.grid-4,.features-grid{grid-template-columns:1fr}.hero-title{font-size:2.25rem}.hero-subtitle{font-size:1.0625rem}.nav-links{display:none}.mobile-menu-btn{display:block}.nav-xp{display:none}}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:fadeIn .3s ease forwards}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.pulse{animation:pulse 2s ease-in-out infinite}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{background:linear-gradient(90deg,var(--bg-tertiary) 25%,var(--bg-card-hover) 50%,var(--bg-tertiary) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:var(--radius-sm);height:1rem;margin:.5rem 0}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--border-light);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.hidden{display:none!important}.breadcrumb{display:flex;align-items:center;gap:.5rem;font-size:.875rem;margin-bottom:1.5rem;color:var(--text-muted)}.breadcrumb-link{color:var(--accent);cursor:pointer;transition:color var(--transition)}.breadcrumb-link:hover{color:var(--accent-hover)}.breadcrumb-sep{color:var(--text-muted)}.breadcrumb-current{color:var(--text-secondary);font-weight:500}.course-header{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:2rem 2.5rem;margin-bottom:1.5rem;border-left:4px solid var(--track-color, var(--accent))}.course-title{font-size:2rem;font-weight:800;margin:.5rem 0;letter-spacing:-.01em}.course-desc{color:var(--text-secondary);font-size:1.0625rem;line-height:1.6;margin-top:.5rem}.course-progress{margin-top:1.25rem}.lessons-list{display:flex;flex-direction:column;gap:.5rem}.lesson-row{display:flex;align-items:center;gap:1rem;padding:1rem 1.25rem;border-radius:var(--radius-md);background:var(--bg-card);border:1px solid var(--border);transition:all var(--transition);cursor:pointer}.lesson-row:hover{border-color:var(--border-light);background:var(--bg-card-hover)}.lesson-row-done{opacity:.85}.lesson-num{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.875rem;flex-shrink:0;background:var(--bg-tertiary);border:1px solid var(--border);color:var(--text-secondary)}.lesson-num-done{background:var(--accent-glow);border-color:var(--accent);color:var(--accent)}.lesson-row-info{flex:1;min-width:0}.lesson-row-title{font-weight:600;font-size:.9375rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-row-meta{display:flex;gap:.75rem;margin-top:.25rem;font-size:.8125rem}.lesson-type-badge{display:inline-flex;padding:.125rem .5rem;border-radius:9999px;font-size:.75rem;font-weight:600;text-transform:capitalize}.lesson-type-reading{background:#3b82f626;color:#60a5fa}.lesson-type-exercise{background:#06b6d426;color:var(--accent)}.lesson-type-project{background:#fbbf2426;color:#fbbf24}.lesson-xp{color:var(--xp-gold);font-weight:600}.lesson-row-action{flex-shrink:0}.lesson-page{display:grid;grid-template-columns:195px 1fr;min-height:calc(100vh - 64px);background:var(--bg-primary)}.lesson-page-3col{grid-template-columns:195px 1fr 560px}.lesson-sidebar-toc{position:sticky;top:64px;height:calc(100vh - 64px);overflow-y:auto;padding:1.5rem 1rem;border-right:1px solid var(--border);background:var(--bg-secondary);display:flex;flex-direction:column;gap:.75rem}.lesson-course-link{margin-bottom:.5rem}.toc-title{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);padding:0 .5rem;margin-bottom:.25rem}.toc-list{display:flex;flex-direction:column;gap:.125rem}.toc-item{display:flex;align-items:center;gap:.5rem;padding:.5rem .625rem;border-radius:var(--radius-sm);font-size:.8125rem;color:var(--text-secondary);cursor:pointer;transition:all var(--transition);line-height:1.3}.toc-item:hover{background:var(--bg-tertiary);color:var(--text-primary)}.toc-item-active{background:var(--accent-glow);color:var(--accent);font-weight:600}.toc-item-done .toc-check{color:var(--accent)}.toc-check{font-size:.75rem;flex-shrink:0;width:1rem;text-align:center}.toc-label{flex:1;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lesson-main{max-width:760px;margin:0 auto;padding:2.5rem 2.5rem 4rem;width:100%}.lesson-header{margin-bottom:2rem;padding-bottom:1.5rem;border-bottom:1px solid var(--border)}.lesson-title{font-size:1.875rem;font-weight:800;line-height:1.2;letter-spacing:-.02em;margin:.5rem 0}.lesson-subtitle{font-size:1rem;color:var(--text-secondary);line-height:1.6;margin-top:.5rem}.lesson-content-area{margin-bottom:2rem}.lesson-article{line-height:1.8;color:var(--text-secondary)}.lesson-h1{font-size:1.5rem;font-weight:800;margin:2.25rem 0 .875rem;color:var(--text-primary);letter-spacing:-.01em;line-height:1.25}.lesson-h2{font-size:1.25rem;font-weight:700;margin:1.875rem 0 .625rem;color:var(--text-primary);letter-spacing:-.01em;line-height:1.3}.lesson-h3{font-size:1.0625rem;font-weight:700;margin:1.375rem 0 .5rem;color:var(--text-primary);line-height:1.35}.lesson-h4{font-size:.9375rem;font-weight:600;margin:1.125rem 0 .375rem;color:var(--text-primary);line-height:1.4}.lesson-p{margin:0 0 1.125rem;font-size:.9375rem;line-height:1.75;color:var(--text-secondary)}.lesson-hr{border:none;height:1px;background:var(--border);margin:1.75rem 0}.lesson-ul,.lesson-ol{margin:0 0 1.125rem;padding-left:1.75rem}.lesson-li{margin:.3rem 0;font-size:.9375rem;line-height:1.65;color:var(--text-secondary)}.lesson-li::marker{color:var(--accent)}.lesson-strong{font-weight:700;color:var(--text-primary)}.lesson-em{font-style:italic}.lesson-inline-code{font-family:var(--font-mono);font-size:.9em;background:var(--bg-tertiary);color:var(--accent);padding:.15rem .4rem;border-radius:4px;border:1px solid var(--border)}.lesson-link{color:var(--accent);text-decoration:underline;text-underline-offset:2px;transition:color var(--transition)}.lesson-link:hover{color:var(--accent-hover)}.lesson-code-block{margin:1.5rem 0;border-radius:var(--radius-md);border:1px solid var(--border);overflow:hidden;background:#0d1117}.lesson-code-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;background:#ffffff0a;border-bottom:1px solid var(--border);font-size:.8125rem}.lesson-code-lang{color:var(--text-muted);font-weight:500;text-transform:uppercase;letter-spacing:.04em;font-size:.75rem}.lesson-code-copy{background:transparent;border:1px solid var(--border);color:var(--text-muted);font-size:.75rem;padding:.2rem .6rem;border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition);font-family:var(--font-sans)}.lesson-code-copy:hover{border-color:var(--accent);color:var(--accent)}.lesson-pre{margin:0;padding:1.25rem 1.5rem;overflow-x:auto;font-size:.875rem;line-height:1.7;-moz-tab-size:2;tab-size:2}.lesson-pre code{font-family:var(--font-mono);background:none;padding:0;border:none;color:#c9d1d9}.sc-keyword{color:#ff7b72;font-weight:500}.sc-string{color:#a5d6ff}.sc-comment{color:#8b949e;font-style:italic}.sc-type{color:#ffa657}.sc-number{color:#79c0ff}.lesson-blockquote{margin:1.25rem 0;padding:1rem 1.5rem;border-left:3px solid var(--border-light);background:var(--bg-tertiary);border-radius:0 var(--radius-md) var(--radius-md) 0;font-style:italic;color:var(--text-secondary)}.lesson-callout{margin:1.5rem 0;padding:1rem 1.25rem;border-radius:var(--radius-md);border-left:4px solid;font-size:.9375rem;line-height:1.6}.lesson-callout-header{display:flex;align-items:center;gap:.5rem;font-weight:700;margin-bottom:.5rem;font-size:.875rem;text-transform:uppercase;letter-spacing:.04em}.lesson-callout-icon{font-size:1rem}.lesson-callout p{margin:.25rem 0}.lesson-callout-tip{border-color:#22c55e;background:#22c55e14;color:#86efac}.lesson-callout-tip .lesson-callout-header{color:#4ade80}.lesson-callout-note{border-color:#3b82f6;background:#3b82f614;color:#93c5fd}.lesson-callout-note .lesson-callout-header{color:#60a5fa}.lesson-callout-warning{border-color:#f59e0b;background:#f59e0b14;color:#fde68a}.lesson-callout-warning .lesson-callout-header{color:#fbbf24}.lesson-callout-important{border-color:#ef4444;background:#ef444414;color:#fca5a5}.lesson-callout-important .lesson-callout-header{color:#f87171}.lesson-callout-concept{border-color:var(--accent);background:var(--accent-glow);color:var(--text-primary)}.lesson-callout-concept .lesson-callout-header{color:var(--accent)}.lesson-callout-success{border-color:var(--accent);background:var(--accent-glow);color:var(--text-primary)}.lesson-callout-success .lesson-callout-header{color:var(--accent)}.lesson-figure{margin:2rem 0;text-align:center}.lesson-img{max-width:100%;height:auto;border-radius:var(--radius-md);border:1px solid var(--border);box-shadow:var(--shadow-md)}.lesson-figcaption{margin-top:.75rem;font-size:.875rem;color:var(--text-muted);font-style:italic}.lesson-video-wrapper{margin:2rem 0;border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--border);background:#000;aspect-ratio:16/9}.lesson-video{width:100%;height:100%;border:none}.lesson-exercises{margin:2.5rem 0}.exercise-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem;margin-bottom:1rem;transition:all var(--transition)}.exercise-card:hover{border-color:var(--accent-dim);box-shadow:var(--shadow-md)}.exercise-card-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.exercise-card-title{font-size:1.125rem;font-weight:600;margin-bottom:.375rem}.exercise-card-desc{font-size:.9375rem;color:var(--text-secondary);margin-bottom:1rem;line-height:1.6}.lesson-complete-bar{margin:2rem 0;padding:1.5rem;text-align:center;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg)}.lesson-complete-done{font-size:1.125rem;font-weight:600;color:var(--accent);padding:.75rem}.lesson-nav-bar{display:flex;justify-content:space-between;align-items:center;padding:1.5rem 0;margin-top:1rem;border-top:1px solid var(--border)}.exercise-page{display:grid;grid-template-columns:1fr 1fr;min-height:calc(100vh - 64px)}.exercise-panel{padding:2rem;overflow-y:auto;border-right:1px solid var(--border);background:var(--bg-secondary);max-height:calc(100vh - 64px)}.exercise-panel-header{margin-bottom:1rem}.exercise-meta{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem;font-size:.875rem}.exercise-count{color:var(--text-muted);font-weight:500}.exercise-title{font-size:1.5rem;font-weight:700;margin-bottom:.5rem}.exercise-desc{color:var(--text-secondary);line-height:1.7;margin-bottom:1.5rem;font-size:1rem}.exercise-hints{margin-top:1.5rem;border-top:1px solid var(--border);padding-top:1rem}.exercise-hints-title{font-size:.875rem;font-weight:600;color:var(--text-muted);margin-bottom:.75rem;text-transform:uppercase;letter-spacing:.04em}.hint-details{margin-bottom:.5rem;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.hint-summary{padding:.625rem .875rem;cursor:pointer;font-size:.875rem;font-weight:500;color:var(--text-secondary);background:var(--bg-card);list-style:none;display:flex;align-items:center}.hint-summary:before{content:"▸ ";color:var(--text-muted)}.hint-details[open] .hint-summary:before{content:"▾ "}.hint-body{padding:.75rem 1rem;font-size:.875rem;line-height:1.6;color:var(--text-secondary);background:var(--bg-tertiary)}.exercise-editor-panel{display:flex;flex-direction:column;background:#0d1117;max-height:calc(100vh - 64px)}.editor-tabs{display:flex;gap:0;border-bottom:1px solid var(--border);background:#ffffff05}.editor-tab{padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;background:transparent;border:none;color:var(--text-muted);cursor:pointer;border-bottom:2px solid transparent;transition:all var(--transition);font-family:var(--font-sans)}.editor-tab:hover{color:var(--text-secondary)}.editor-tab-active{color:var(--accent);border-bottom-color:var(--accent)}.editor-wrapper{display:flex;flex:1;min-height:300px;overflow:auto;font-family:var(--font-mono);font-size:.875rem;line-height:1.7}.editor-line-nums{padding:1rem .75rem;text-align:right;color:var(--text-muted);-webkit-user-select:none;user-select:none;background:#ffffff05;border-right:1px solid var(--border);min-width:3rem;font-variant-numeric:tabular-nums}.editor-line-nums span{display:block}.editor-textarea{flex:1;padding:1rem;background:transparent;border:none;color:#c9d1d9;font-family:var(--font-mono);font-size:.875rem;line-height:1.7;-moz-tab-size:2;tab-size:2;resize:none;outline:none;white-space:pre;overflow-wrap:normal;overflow-x:auto;width:100%}.test-panel{padding:1rem;overflow:auto;flex:1}.test-code{font-family:var(--font-mono);font-size:.8125rem;line-height:1.6;color:#8b949e;white-space:pre}.editor-action-bar{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;padding:.75rem 1rem;border-top:1px solid var(--border);background:#ffffff05}.editor-output{border-top:1px solid var(--border);padding:1rem;font-family:var(--font-mono);font-size:.8125rem;line-height:1.5;max-height:200px;overflow-y:auto}.output-pass{background:#22c55e0f;border-top-color:var(--success)}.output-fail{background:#ef44440f;border-top-color:var(--error)}.output-status{display:flex;align-items:center;justify-content:space-between;font-weight:600;margin-bottom:.5rem}.output-xp{color:var(--xp-gold);font-weight:700}.output-text{white-space:pre-wrap;color:var(--text-secondary);margin:.5rem 0;font-size:.8125rem}.output-hint{font-size:.8125rem;color:var(--text-muted);margin-top:.5rem;font-family:var(--font-sans)}.proj-panel{position:sticky;top:64px;height:calc(100vh - 64px);display:flex;flex-direction:column;border-left:1px solid var(--border);background:#0d1117;overflow:hidden}.proj-header{display:flex;align-items:flex-start;gap:.75rem;padding:1rem 1rem .75rem;border-bottom:1px solid var(--border);background:#ffffff05}.proj-header-icon{width:36px;height:36px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:.9rem;font-weight:700;font-family:var(--font-mono);background:var(--accent-glow);color:var(--accent);flex-shrink:0;border:1px solid var(--accent-dim)}.proj-header-meta{flex:1;min-width:0}.proj-header-name{font-size:.875rem;font-weight:700;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.proj-header-desc{font-size:.75rem;color:var(--text-muted);margin-top:.125rem;line-height:1.4}.proj-stack{display:flex;flex-wrap:wrap;gap:.375rem;padding:.625rem 1rem;border-bottom:1px solid var(--border)}.proj-stack-badge{font-size:.6875rem;font-weight:600;padding:.2rem .5rem;border-radius:9999px;background:#ffffff0f;color:var(--text-secondary);border:1px solid var(--border);font-family:var(--font-mono)}.proj-body{display:flex;flex-direction:column;flex:1;min-height:0}.proj-explorer{border-bottom:1px solid var(--border);overflow-y:auto;max-height:30%;min-height:100px;background:#ffffff03}.proj-explorer-label{font-size:.6875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);padding:.625rem 1rem .375rem}.proj-tree-ul{list-style:none;margin:0;padding:0}.proj-tree-row{display:flex;align-items:center;gap:.375rem;padding:.3rem .75rem;cursor:pointer;font-size:.8125rem;transition:background var(--transition);white-space:nowrap;overflow:hidden}.proj-tree-row:hover{background:#ffffff0d}.proj-tree-row-file.proj-active{background:#06b6d41f;color:var(--accent)}.proj-tree-row-dir{color:var(--text-secondary)}.proj-tree-row-file{color:#c9d1d9}.proj-tree-arrow{font-size:.625rem;color:var(--text-muted);width:12px;flex-shrink:0}.proj-tree-dir-icon{font-size:.875rem;flex-shrink:0}.proj-tree-file-icon{font-size:.6875rem;font-family:var(--font-mono);color:var(--accent-dim);flex-shrink:0;width:16px;text-align:center}.proj-tree-label{overflow:hidden;text-overflow:ellipsis}.proj-code-view{flex:1;overflow-y:auto;display:flex;flex-direction:column}.proj-code-pathbar{display:flex;align-items:center;gap:.25rem;flex-wrap:nowrap;padding:.5rem .75rem;background:#ffffff0a;border-bottom:1px solid var(--border);font-family:var(--font-mono);font-size:.75rem;color:var(--text-muted);overflow:hidden;position:sticky;top:0;z-index:2}.proj-path-seg{color:var(--text-muted)}.proj-path-sep{color:var(--border-light)}.proj-path-current{color:var(--text-secondary);font-weight:600}.proj-code-pathbar .lesson-code-copy{margin-left:auto;flex-shrink:0}.proj-file-desc{font-size:.8125rem;color:var(--text-muted);line-height:1.5;padding:.625rem 1rem;border-bottom:1px solid var(--border);background:#ffffff05;font-family:var(--font-sans)}.proj-code-pre{margin:0;padding:1rem;font-family:var(--font-mono);font-size:.7rem;line-height:1.6;overflow-x:auto;flex:1;-moz-tab-size:2;tab-size:2}.proj-code-pre code{font-family:inherit;background:none;padding:0;border:none;color:#c9d1d9}.proj-pathbar-left{display:flex;align-items:center;gap:.25rem;overflow:hidden;min-width:0;flex:1}.proj-line-count{color:var(--text-muted);font-size:.6875rem;margin-left:.5rem;flex-shrink:0;opacity:.7}.proj-code-wrap{display:flex;flex:1;overflow:auto}.proj-line-nums{display:flex;flex-direction:column;padding:1rem .5rem 1rem .75rem;text-align:right;font-family:var(--font-mono);font-size:.7rem;line-height:1.6;color:var(--text-muted);opacity:.4;-webkit-user-select:none;user-select:none;flex-shrink:0;border-right:1px solid var(--border)}.proj-code-wrap .proj-code-pre{flex:1}@media(max-width:1600px){.lesson-page-3col{grid-template-columns:195px 1fr 500px}}@media(max-width:1400px){.lesson-page-3col{grid-template-columns:195px 1fr 460px}}@media(max-width:1200px){.lesson-page-3col{grid-template-columns:175px 1fr 400px}}@media(max-width:1024px){.lesson-page,.lesson-page-3col{grid-template-columns:1fr}.lesson-sidebar-toc{position:static;height:auto;border-right:none;border-bottom:1px solid var(--border);padding:1rem 1.5rem;max-height:200px}.lesson-main{padding:2rem 1.5rem 3rem;max-width:100%}.proj-panel{position:static;height:auto;border-left:none;border-top:1px solid var(--border);max-height:600px}.exercise-page{grid-template-columns:1fr}.exercise-panel{max-height:none;border-right:none;border-bottom:1px solid var(--border)}.exercise-editor-panel{max-height:none;min-height:500px}}@media(max-width:768px){.lesson-title{font-size:1.75rem}.lesson-main{padding:1.5rem 1rem 2.5rem}.lesson-p{font-size:1rem}.lesson-h1{font-size:1.5rem}.lesson-h2{font-size:1.25rem}.course-header{padding:1.25rem}.course-title{font-size:1.5rem}}
