*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-primary: #4f46e5;--color-primary-dark: #4338ca;--color-primary-soft: #eef2ff;--color-secondary: #64748b;--color-success: #16a34a;--color-success-soft: #dcfce7;--color-danger: #dc2626;--color-danger-soft: #fee2e2;--color-warning: #d97706;--color-warning-soft: #fef3c7;--color-bg: #f6f7fb;--color-surface: #ffffff;--color-text: #0f172a;--color-text-light: #64748b;--color-border: #e5e8f0;--gradient-primary: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);--radius: 10px;--radius-lg: 16px;--shadow: 0 1px 2px rgba(15, 23, 42, .05), 0 1px 6px rgba(15, 23, 42, .05);--shadow-md: 0 4px 12px rgba(15, 23, 42, .08), 0 2px 4px rgba(15, 23, 42, .04);--shadow-lg: 0 12px 32px rgba(15, 23, 42, .12), 0 4px 8px rgba(15, 23, 42, .05);--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--max-width: 1200px}html{font-size:16px}body{font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);line-height:1.6;min-height:100vh;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}#app{min-height:100vh}h1,h2,h3,h4{letter-spacing:-.022em;line-height:1.25;font-weight:700;color:var(--color-text)}::selection{background:var(--color-primary-soft);color:var(--color-primary-dark)}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button,.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.55rem 1.1rem;border:none;border-radius:var(--radius);font-size:.875rem;font-weight:600;font-family:inherit;cursor:pointer;transition:background .18s,color .18s,box-shadow .18s,transform .12s,opacity .18s,border-color .18s}.btn:active{transform:translateY(1px)}a.btn:hover{text-decoration:none}.btn-primary{background:var(--gradient-primary);color:#fff;box-shadow:0 2px 8px #4f46e559}.btn-primary:hover{box-shadow:0 4px 14px #4f46e573;filter:brightness(1.06)}.btn-secondary{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border);box-shadow:var(--shadow)}.btn-secondary:hover{border-color:#cbd5e1;background:#f8fafc}.btn-danger{background:var(--color-danger);color:#fff;box-shadow:0 2px 8px #dc26264d}.btn-danger:hover{filter:brightness(1.08)}.btn-success{background:var(--color-success);color:#fff;box-shadow:0 2px 8px #16a34a4d}.btn-success:hover{filter:brightness(1.08)}.btn-accent{background:var(--color-warning);color:#fff;box-shadow:0 2px 8px #d977064d}.btn-accent:hover{filter:brightness(1.08)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.btn-sm{padding:.3rem .65rem;font-size:.75rem}input,select,textarea{width:100%;padding:.55rem .8rem;border:1px solid var(--color-border);border-radius:var(--radius);font-size:.875rem;font-family:inherit;background:var(--color-surface);color:var(--color-text);transition:border-color .15s,box-shadow .15s}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #4f46e51f}label{display:block;font-size:.875rem;font-weight:500;margin-bottom:.25rem}.form-group{margin-bottom:1rem}.container{max-width:var(--max-width);margin:0 auto;padding:1rem}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:1.5rem;transition:box-shadow .2s,transform .2s,border-color .2s}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.25rem}.navbar{background:#ffffffd9;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--color-border);padding:.7rem 1rem;position:sticky;top:0;z-index:100}.navbar-inner{max-width:var(--max-width);margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:1rem}.navbar-brand{display:inline-flex;align-items:center;gap:.5rem;font-weight:800;font-size:1.15rem;letter-spacing:-.02em;background:var(--gradient-primary);-webkit-background-clip:text;background-clip:text;color:transparent;white-space:nowrap}.navbar-brand:hover{text-decoration:none}.navbar-logo{width:26px;height:26px;border-radius:8px;background:var(--gradient-primary);color:#fff;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 2px 6px #4f46e559}.navbar-title{font-size:.875rem;color:var(--color-text-light);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.navbar-title a{color:var(--color-primary);text-decoration:none}.navbar-title a:hover{text-decoration:underline}.nav-breadcrumb-sep{color:var(--color-text-lighter);margin:0 .25rem}.navbar-links{display:flex;align-items:center;gap:.25rem;list-style:none}.navbar-links a:not(.btn){color:var(--color-text-light);font-size:.875rem;font-weight:600;padding:.35rem .75rem;border-radius:8px;transition:color .15s,background .15s}.navbar-links a:not(.btn):hover{color:var(--color-primary);background:var(--color-primary-soft);text-decoration:none}.navbar-links a.active{color:var(--color-primary);background:var(--color-primary-soft)}.navbar-links .navbar-logout:hover{color:var(--color-danger);background:var(--color-danger-soft)}.toast-container{position:fixed;top:1rem;right:1rem;z-index:1000;display:flex;flex-direction:column;gap:.5rem}.toast{padding:.75rem 1rem;border-radius:12px;background:var(--color-surface);color:var(--color-text);font-size:.875rem;font-weight:500;border:1px solid var(--color-border);border-left-width:4px;box-shadow:var(--shadow-lg);animation:slideIn .3s cubic-bezier(.21,1.02,.73,1);max-width:350px}.toast-success{border-left-color:var(--color-success)}.toast-error{border-left-color:var(--color-danger)}.toast-info{border-left-color:var(--color-primary)}@keyframes slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.loader{display:flex;justify-content:center;padding:2.5rem}.spinner{width:2.25rem;height:2.25rem;border:3px solid var(--color-primary-soft);border-top-color:var(--color-primary);border-radius:50%;animation:spin .7s cubic-bezier(.5,.15,.5,.85) infinite}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:200;padding:1rem;animation:fadeIn .15s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal{background:var(--color-surface);border-radius:var(--radius-lg);padding:1.5rem;width:100%;max-width:500px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg);animation:modalIn .22s cubic-bezier(.21,1.02,.73,1)}@keyframes modalIn{0%{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.modal-header h2{font-size:1.125rem}.modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--color-text-light);padding:0}table{width:100%;border-collapse:collapse}th,td{padding:.75rem;text-align:left;border-bottom:1px solid var(--color-border);font-size:.875rem}th{font-weight:600;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-light);background:transparent}tbody tr{transition:background .12s}tbody tr:hover{background:#f8fafc}tbody tr:last-child td{border-bottom:none}.timer{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--color-surface);border:2px solid var(--color-primary);border-radius:var(--radius);font-weight:700;font-size:1.125rem;font-variant-numeric:tabular-nums}.timer.warning{border-color:var(--color-warning);color:var(--color-warning)}.timer.danger,.timer-expired{border-color:var(--color-danger);color:var(--color-danger)}.badge{display:inline-block;padding:.15rem .6rem;border-radius:9999px;font-size:.72rem;font-weight:600;letter-spacing:.01em}.badge-primary{background:var(--color-primary-soft);color:var(--color-primary)}.badge-success{background:var(--color-success-soft);color:#15803d}.badge-danger{background:var(--color-danger-soft);color:var(--color-danger)}.badge-warning{background:var(--color-warning-soft);color:#b45309}.text-center{text-align:center}.text-light{color:var(--color-text-light)}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mt-3{margin-top:1.5rem}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.flex{display:flex}.flex-between{display:flex;justify-content:space-between;align-items:center}.gap-1{gap:.5rem}.gap-2{gap:1rem}.docs-page{max-width:800px;margin:0 auto;padding:1rem 1.5rem 3rem}.docs-page h1{font-size:1.75rem;margin-bottom:1.5rem;color:var(--color-text)}.docs-page h2{font-size:1.375rem;margin:2.5rem 0 1rem;color:var(--color-text);padding-bottom:.5rem;border-bottom:1px solid var(--color-border)}.docs-page h3{font-size:1.125rem;margin:1.75rem 0 .75rem;color:var(--color-text)}.docs-page p{margin-bottom:1rem;color:var(--color-text)}.docs-page ul,.docs-page ol{margin-bottom:1rem;padding-left:1.5rem}.docs-page li{margin-bottom:.5rem;color:var(--color-text)}.docs-page blockquote{background:#eff6ff;border-left:4px solid var(--color-primary);padding:1rem 1.25rem;border-radius:0 8px 8px 0;margin:1rem 0}.docs-page blockquote p{margin-bottom:0}.docs-page blockquote strong{color:var(--color-primary)}.docs-page .docs-code{margin:1.5rem 0 2rem;border-radius:12px;overflow:hidden;box-shadow:0 10px 30px #0003;background:#0d1117;border:1px solid #30363d}.docs-page .docs-code-header{background:#161b22;padding:.75rem 1.25rem;font-size:.8rem;font-weight:600;color:#8b949e;font-family:SF Mono,Monaco,Consolas,monospace;display:flex;align-items:center;gap:.75rem;border-bottom:1px solid #30363d}.docs-page .docs-code-header:after{content:"";width:10px;height:10px;background:#ff5f56;border-radius:50%;margin-left:auto;box-shadow:18px 0 #ffbd2e,36px 0 #27c93f;margin-right:40px}.docs-page .docs-code-header .docs-filename{color:#c9d1d9}.docs-page .docs-code pre{margin:0;padding:1.25rem;background:transparent;box-shadow:none;border-radius:0}.docs-page .docs-code code{color:#e6edf3;display:block;min-height:1.2em;text-align:left}.docs-page pre:not(.docs-code pre){background:#0d1117;color:#e6edf3;border-radius:12px;padding:1.25rem;margin:1.5rem 0 2rem;box-shadow:0 10px 30px #0003;border:1px solid #30363d;text-align:left}.docs-page pre code{text-align:left}.docs-page code:not(pre code){background:#f1f5f9;color:#eb5757;padding:.2rem .4rem;border-radius:6px;font-size:.9em;font-family:SF Mono,Monaco,Consolas,monospace;border:1px solid #e1e4e8}.docs-page table{width:100%;border-collapse:separate;border-spacing:0;margin:1.5rem 0 2rem;font-size:.9rem;background:var(--color-surface);border-radius:12px;overflow:hidden;box-shadow:0 4px 15px #0000000d;border:1px solid var(--color-border)}.docs-page th{background:#f8fafc;padding:1rem;text-align:left;font-weight:600;color:var(--color-text);border-bottom:2px solid var(--color-border)}.docs-page td{padding:1rem;border-bottom:1px solid var(--color-border);color:var(--color-text);vertical-align:top}.docs-page tr:last-child td{border-bottom:none}.docs-page tr:hover td{background:#fcfdfe}.docs-page hr{border:none;border-top:1px solid var(--color-border);margin:2.5rem 0}.docs-page strong{color:var(--color-text)}.lesson-content{max-width:800px;margin:1rem auto;line-height:1.8}.lesson-content h1{font-size:1.75rem;margin:2rem 0 1rem}.lesson-content h2{font-size:1.375rem;margin:1.75rem 0 .75rem}.lesson-content h3{font-size:1.125rem;margin:1.5rem 0 .5rem}.lesson-content p{margin-bottom:1rem}.lesson-content ul,.lesson-content ol{margin-bottom:1rem;padding-left:1.5rem}.lesson-content li{margin-bottom:.4rem}.lesson-content blockquote{border-left:4px solid var(--color-primary);padding:.75rem 1rem;margin:1rem 0;background:#eff6ff;border-radius:0 var(--radius) var(--radius) 0}.lesson-content .box-formulachiave,.lesson-content .box-attenzione,.lesson-content .box-riepilogo,.lesson-content .box-nota,.lesson-content .box-definizione,.lesson-content .box-teorema,.lesson-content .box-principio{padding:1rem 1.25rem;margin:1.25rem 0;border-radius:var(--radius);border-left:4px solid}.lesson-content .box-formulachiave{background:#eff6ff;border-color:#3b82f6}.lesson-content .box-attenzione{background:#fef2f2;border-color:#ef4444}.lesson-content .box-riepilogo{background:#f0fdf4;border-color:#22c55e}.lesson-content .box-nota{background:#faf5ff;border-color:#a855f7}.lesson-content .box-definizione,.lesson-content .box-teorema,.lesson-content .box-principio{background:#f8fafc;border-color:#64748b}.lesson-content .box-title{font-weight:700;font-size:.85rem;text-transform:uppercase;letter-spacing:.04em;margin-bottom:.5rem}.lesson-content .box-formulachiave .box-title{color:#1d4ed8}.lesson-content .box-attenzione .box-title{color:#dc2626}.lesson-content .box-riepilogo .box-title{color:#16a34a}.lesson-content .box-nota .box-title{color:#9333ea}.lesson-content .box-definizione .box-title,.lesson-content .box-teorema .box-title,.lesson-content .box-principio .box-title{color:#475569}.lesson-content pre{background:#1e293b;color:#e2e8f0;padding:1rem;border-radius:var(--radius);overflow-x:auto;margin:1rem 0}.lesson-content code:not(pre code){background:#f1f5f9;padding:.15rem .35rem;border-radius:4px;font-size:.9em}.lesson-content img{max-width:100%;height:auto;display:block;margin:1.5rem auto}.equation-anchor{display:block;position:relative}a.eq-ref{color:var(--primary);text-decoration:none}a.eq-ref:hover{text-decoration:underline}.tikz-figure{display:flex;justify-content:center;margin:1.5rem 0}.tikz-figure svg{max-width:100%;height:auto}.tikz-error{color:var(--color-danger);font-style:italic;text-align:center;padding:1rem}.lesson-content pre,.lesson-content .katex-display,.lab-panel-body pre{scrollbar-width:none}.lesson-content pre::-webkit-scrollbar,.lesson-content .katex-display::-webkit-scrollbar,.lab-panel-body pre::-webkit-scrollbar{display:none}.lesson-content .katex-display{overflow-x:auto;overflow-y:hidden;padding:.5rem 1rem}.lesson-locked{opacity:.6;cursor:not-allowed}.lock-icon{font-size:.875rem;margin-right:.25rem}@media(max-width:768px){.docs-page{padding:1rem}.docs-page h2{font-size:1.25rem}.docs-page pre,.docs-page .docs-code{margin:.75rem -.5rem 1rem;border-radius:0}.docs-page table{font-size:.8125rem}.docs-page th,.docs-page td{padding:.5rem}}.exercise-page{min-height:100vh;background:var(--color-bg)}.exercise-header{position:sticky;top:0;z-index:50;background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:.625rem 1rem}.exercise-header-inner{max-width:800px;margin:0 auto;display:flex;align-items:center;gap:.75rem}.paper-zoom-wrapper{position:relative;overflow-x:hidden;overflow-x:clip}.exercise-body{position:relative;max-width:800px;margin:0 auto;padding:1.5rem 1rem 4rem;background:var(--color-surface);box-shadow:0 1px 8px #0000000f;min-height:calc(100vh - 56px);transform-origin:top center}.exercise-content{font-size:.95rem;line-height:1.7}.exercise-content h1{font-size:1.75rem;margin:2rem 0 1rem}.exercise-content h2{font-size:1.375rem;margin:1.75rem 0 .75rem}.exercise-content h3{font-size:1.125rem;margin:1.5rem 0 .5rem}.exercise-content p{margin:.5rem 0}.exercise-content .katex-display{margin:.75rem 0}.exercise-workspace{margin-top:1.5rem;min-height:500px;background:var(--color-surface);border-radius:var(--radius);border:1px dashed var(--color-border);position:relative}.exercise-workspace-label{position:absolute;top:.5rem;left:.75rem;font-size:.75rem;font-weight:600;color:var(--color-text-light);opacity:.6;pointer-events:none}.quiz-numerical-input{width:100%;max-width:300px;padding:.5rem .75rem;border:1px solid var(--color-border);border-radius:var(--radius);font-size:1rem;background:var(--color-bg);color:var(--color-text);outline:none;transition:border-color .15s}.quiz-numerical-input:focus,.quiz-numerical-input.keypad-target{border-color:var(--color-primary);box-shadow:0 0 0 2px #2563eb26}.quiz-blank-select{display:inline;padding:.15rem .4rem;border:1px solid var(--color-border);border-radius:var(--radius);font-size:.95rem;background:var(--color-bg);color:var(--color-text);cursor:pointer;outline:none;margin:0 .15rem}.quiz-blank-select:focus{border-color:var(--color-primary)}.quiz-fill-text{font-size:.95rem;line-height:2}.quiz-progress{display:flex;align-items:center;gap:0;margin-bottom:1.25rem;padding:.5rem 0}.step-container{display:flex;align-items:center;flex:1}.step{display:flex;flex-direction:column;align-items:center;position:relative;flex:1}.step-bubble{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700;border:2px solid var(--color-border);color:var(--color-text-light);background:var(--color-bg);transition:all .3s ease;z-index:1;position:relative}.step.completed .step-bubble{background:var(--color-success);border-color:var(--color-success);color:#fff}.step.active .step-bubble{background:var(--color-primary);border-color:var(--color-primary);color:#fff;box-shadow:0 0 0 4px #4f46e526}.step.wrong .step-bubble{background:var(--color-danger);border-color:var(--color-danger);color:#fff}.step.answered .step-bubble{background:var(--color-warning);border-color:var(--color-warning);color:#fff}.step{cursor:pointer}.step-line{flex:1;height:3px;background:var(--color-border);margin:0 -1px;transition:background .3s ease;min-width:12px}.step.completed+.step-line{background:var(--color-success)}.step.active+.step-line{background:linear-gradient(90deg,var(--color-primary) 50%,var(--color-border) 50%)}.quiz-progress-label{font-size:.8rem;color:var(--color-text-light);white-space:nowrap;margin-left:1rem;min-width:8rem;text-align:right}.quiz-question-card{background:var(--color-surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.5rem;margin-bottom:1rem}.quiz-question-header{display:flex;align-items:flex-start;gap:1rem;margin-bottom:.75rem}.quiz-question-number{width:36px;height:36px;border-radius:50%;background:var(--color-primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.9rem;font-weight:700;flex-shrink:0;margin-top:.15rem}.quiz-question-text{flex:1;font-size:1rem;line-height:1.6}.quiz-question-text strong{font-weight:600}.quiz-points-badge{font-size:.7rem;color:var(--color-text-light);background:var(--color-bg);padding:.2rem .6rem;border-radius:999px;white-space:nowrap;border:1px solid var(--color-border);flex-shrink:0;align-self:flex-start;margin-top:.15rem}.quiz-card-divider{height:1px;background:var(--color-border);margin:.75rem 0}.quiz-option-label{display:flex;align-items:center;gap:.6rem;padding:.5rem .75rem;margin:.15rem 0;border-radius:var(--radius);cursor:pointer;transition:background .15s;border:1px solid transparent}.quiz-option-label:hover{background:var(--color-bg)}.quiz-option-label input[type=radio],.quiz-option-label input[type=checkbox]{width:18px;height:18px;accent-color:var(--color-primary);cursor:pointer;flex-shrink:0}.quiz-option-text{font-size:.95rem;line-height:1.4}.quiz-nav-bar{display:flex;align-items:center;gap:.5rem;margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--color-border);flex-wrap:wrap}.quiz-nav-bar .btn{font-size:.85rem;padding:.45rem .9rem}.quiz-nav-spacer{flex:1}.quiz-verify-feedback{margin-top:.75rem;padding:.75rem 1rem;border-radius:var(--radius);border-left:4px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;gap:.5rem;animation:quizFadeIn .3s ease}.quiz-verify-feedback.correct{background:#f0fdf4;border-left-color:var(--color-success)}.quiz-verify-feedback.wrong{background:#fef2f2;border-left-color:var(--color-danger)}.quiz-feedback-label{font-weight:600;font-size:.9rem}.quiz-feedback-label .icon{margin-right:.35rem}.quiz-verify-feedback.correct .quiz-feedback-label{color:var(--color-success)}.quiz-verify-feedback.wrong .quiz-feedback-label{color:var(--color-danger)}.quiz-feedback-pill{font-size:.75rem;font-weight:600;padding:.15rem .6rem;border-radius:999px;background:var(--color-bg);border:1px solid var(--color-border)}.quiz-verify-feedback.correct .quiz-feedback-pill{background:#dcfce7;color:var(--color-success);border-color:#bbf7d0}.quiz-verify-feedback.wrong .quiz-feedback-pill{background:#fee2e2;color:var(--color-danger);border-color:#fecaca}.quiz-verify-feedback.pending{background:var(--color-bg);border-left-color:var(--color-border)}.quiz-verify-feedback.pending .quiz-feedback-label{color:var(--color-text-light)}.result-answers{margin-top:.65rem;display:flex;flex-direction:column;gap:.35rem}.result-answer-row{display:flex;gap:.5rem;align-items:baseline;font-size:.9rem}.result-answer-label{font-weight:600;color:var(--color-text-light);white-space:nowrap}.result-unanswered{color:var(--color-danger);font-style:italic}.result-sub-table{width:100%;margin-top:.65rem;border-collapse:collapse;font-size:.85rem}.result-sub-table th{text-align:left;padding:.35rem .6rem;color:var(--color-text-light);font-size:.75rem;text-transform:uppercase;letter-spacing:.03em;border-bottom:1px solid var(--color-border)}.result-sub-table td{padding:.4rem .6rem;border-bottom:1px solid var(--color-border)}.quiz-solution-banner{margin-top:.75rem;padding:.75rem 1rem;border-radius:var(--radius);border:1px solid #fecaca;background:#fff5f5;font-size:.85rem;color:var(--color-text-light);animation:quizFadeIn .3s ease}.quiz-card-wrapper{transition:opacity .25s ease,transform .25s ease}.quiz-card-exit-left{opacity:0;transform:translate(-30px)}.quiz-card-exit-right,.quiz-card-enter{opacity:0;transform:translate(30px)}.quiz-card-enter-active{opacity:1;transform:translate(0);transition:opacity .25s ease,transform .25s ease}.quiz-card-enter-from-left{opacity:0;transform:translate(-30px)}@keyframes quizFadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.quiz-review-card{background:var(--color-surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem 1.25rem;margin-bottom:.75rem;border-left:4px solid var(--color-success)}.quiz-review-card.unanswered{border-left-color:var(--color-warning)}.quiz-review-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem}.quiz-review-qtitle{font-weight:600;font-size:.9rem;flex:1}.quiz-review-points{font-size:.75rem;color:var(--color-text-light);white-space:nowrap}.quiz-review-answer{font-size:.85rem;color:var(--color-text-light);margin-bottom:.5rem}.quiz-review-unanswered-warning{font-size:.8rem;color:var(--color-warning);font-weight:600}.quiz-submitted-score{text-align:center;padding:2rem 1rem}.quiz-score-circle{width:100px;height:100px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:2rem;font-weight:700;margin-bottom:.75rem;border:4px solid var(--color-success);color:var(--color-success);background:#f0fdf4}.quiz-score-circle.low{border-color:var(--color-danger);color:var(--color-danger);background:#fef2f2}.quiz-score-circle.medium{border-color:var(--color-warning);color:var(--color-warning);background:#fffbeb}.exercise-panel{background:var(--color-surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem}.exercise-problem{font-size:.95rem;line-height:1.7;margin-bottom:1rem}.exercise-problem .katex-display{margin:.75rem 0}.exercise-data-table{width:100%;font-size:.85rem;border-collapse:collapse;margin-top:.5rem}.exercise-data-table th{background:var(--color-bg);padding:.5rem .75rem;text-align:left;font-size:.75rem;font-weight:600;color:var(--color-text-light);border-bottom:1px solid var(--color-border)}.exercise-data-table td{padding:.4rem .75rem;border-bottom:1px solid var(--color-border)}.exercise-solution{background:#f0fdf4;border:1px solid #bbf7d0;border-radius:var(--radius);padding:1rem;margin-top:1rem}.exercise-solution h4{font-size:.875rem;color:var(--color-success);margin-bottom:.5rem}.solution-latex{font-size:1.1rem}.sub-question-answer-inline{margin-top:.75rem;display:flex;align-items:flex-end;gap:.75rem}.sub-question-answer-inline .math-input-container{flex:1;background:transparent;border-radius:0;box-shadow:none;padding:0}.sub-question-answer-inline .validate-point-btn{flex-shrink:0;align-self:flex-end;margin-bottom:0}.sub-question-item .feedback-panel{margin-top:.75rem}.math-input-container{background:var(--color-surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem}.math-input-container label{display:block;font-size:.875rem;font-weight:600;margin-bottom:.5rem;color:var(--color-text)}.answer-math-field{width:100%;min-height:56px;border:2px solid var(--color-border);border-radius:var(--radius);font-size:1.1rem;padding:.5rem;background:#fff}.answer-math-field:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 3px #4f46e51a}.feedback-panel{margin-top:1rem;background:var(--color-surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem}.feedback-overall{display:flex;align-items:center;gap:.75rem;font-size:1.125rem;font-weight:700;padding:.75rem;border-radius:var(--radius);margin-bottom:.75rem}.feedback-correct{background:#f0fdf4;color:var(--color-success)}.feedback-incorrect{background:#fef2f2;color:var(--color-danger)}.feedback-icon-lg{font-size:1.5rem}.feedback-checks{display:flex;flex-direction:column;gap:.35rem}.feedback-check{display:flex;align-items:center;gap:.5rem;font-size:.875rem;padding:.35rem .5rem;border-radius:4px}.feedback-pass{background:#f0fdf4;color:var(--color-success)}.feedback-fail{background:#fef2f2;color:var(--color-danger)}.feedback-icon{font-size:.8rem}.feedback-message{font-size:.85rem;line-height:1.4;padding:.5rem;background:var(--color-bg);border-radius:4px}.symbol-mapping-table{width:100%;border-collapse:collapse;margin-top:.5rem}.symbol-mapping-table th{background:var(--color-bg);padding:.5rem;text-align:left;font-size:.75rem;font-weight:600;color:var(--color-text-light);border-bottom:1px solid var(--color-border)}.symbol-mapping-table td{padding:.5rem;border-bottom:1px solid var(--color-border);vertical-align:middle}.symbol-unknown{color:var(--color-danger);font-weight:700;font-size:1.1rem}.symbol-options{display:flex;flex-wrap:wrap;gap:.35rem}.symbol-option{font-size:.8rem}.calculator-container{display:flex;flex-direction:column;gap:.75rem}.calc-math-field{width:100%;min-height:48px;border:2px solid var(--color-border);border-radius:var(--radius);font-size:1rem;padding:.5rem;background:#fff}.calculator-result{min-height:2rem;padding:.5rem;background:var(--color-bg);border-radius:var(--radius);font-size:1.1rem;text-align:center}.calculator-actions{display:flex;gap:.5rem}.calculator-actions .btn{flex:1}math-field{--keyboard-background: var(--color-surface);--keyboard-button-background: var(--color-bg);--keyboard-button-text: var(--color-text);--keyboard-button-hover-background: #e2e8f0;--keyboard-button-active-background: var(--color-primary);--keyboard-button-active-text: #fff}.sub-questions-list{margin-top:1rem;border-top:1px solid var(--color-border);padding-top:.75rem}.sub-question-item{padding:.5rem .75rem;margin-bottom:.75rem;background:var(--color-bg);border-radius:6px;border-left:3px solid var(--color-primary)}.sub-question-header{margin-bottom:.25rem}.sub-question-label{font-weight:700;font-size:.85rem;color:var(--color-primary)}.sub-question-text{font-size:.875rem;line-height:1.5;color:var(--color-text);margin-bottom:.75rem}.sub-question-card{background:var(--color-bg);border-radius:8px;border:1px solid var(--color-border);margin-bottom:.5rem;overflow:hidden}.sub-question-card .toggle-card{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}.sub-question-card .toggle-card:hover{background:#00000008}.sub-question-arrow{font-size:.7rem;color:var(--color-text-light);flex-shrink:0;width:1rem;text-align:center}.sub-question-preview{font-size:.8rem;color:var(--color-text-light);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.sub-question-body{max-height:0;overflow:hidden;transition:max-height .35s ease;border-top:1px solid var(--color-border)}.sub-question-body.open{max-height:2000px}.sub-question-body .sub-question-inner{padding:.75rem}.answer-fields{display:flex;flex-direction:column;gap:.75rem;margin-bottom:.75rem}.answer-fields .math-input-container{padding:.75rem}.math-input-label{display:block;font-size:.8rem;font-weight:600;margin-bottom:.35rem;color:var(--color-text)}.feedback-section{padding:.35rem .5rem;border-radius:4px;margin-top:.25rem}.feedback-section-header{display:flex;align-items:center;gap:.35rem;font-size:.85rem}.feedback-section.feedback-pass{background:transparent}.feedback-section.feedback-fail{background:#ef44440f}.feedback-details{display:flex;flex-direction:column;gap:.25rem}.sub-results-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.sub-result-item{padding:.5rem .75rem;border-radius:6px;font-size:.85rem}.sub-result-item.feedback-pass{background:#f0fdf4;border-left:3px solid var(--color-success)}.sub-result-item.feedback-fail{background:#fef2f2;border-left:3px solid var(--color-danger)}.sub-result-header{display:flex;align-items:center;gap:.35rem;margin-bottom:.25rem}.sub-result-checks{display:flex;flex-wrap:wrap;gap:.15rem;margin-left:1.5rem}.lesson-page{min-height:100vh;background:var(--color-bg)}.lesson-header{position:sticky;top:0;z-index:50;background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:.625rem 1rem}.lesson-header-inner{max-width:800px;margin:0 auto;display:flex;align-items:center;gap:.75rem}.lesson-back-btn{background:none;border:none;padding:.35rem;color:var(--color-text-light);cursor:pointer;border-radius:6px;display:flex;align-items:center}.lesson-back-btn:hover{background:var(--color-bg);color:var(--color-text)}.lesson-header-text{flex:1;min-width:0;display:flex;align-items:center;gap:.6rem}.lesson-header-module{flex-shrink:0;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-primary);background:var(--color-primary-soft);padding:.2rem .6rem;border-radius:9999px;white-space:nowrap}.lesson-header-title{font-size:1.2rem;font-weight:700;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-body{position:relative;max-width:800px;margin:0 auto;padding:1.5rem 1rem 4rem;background:var(--color-surface);box-shadow:0 1px 8px #0000000f;min-height:calc(100vh - 56px);transform-origin:top center}.lesson-body-lab{max-width:100%;padding:0;min-height:0;box-shadow:none;background:none}.notes-writing{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.notes-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none;touch-action:none;transition:opacity .25s ease}.notes-overlay.notes-overlay-hidden{opacity:0}.latex-smallcaps{font-variant:small-caps}.notes-update-warning{position:fixed;top:4.5rem;left:50%;transform:translate(-50%);z-index:250;max-width:min(640px,calc(100vw - 2rem));display:flex;align-items:flex-start;gap:.75rem;padding:.75rem 1rem;border-radius:var(--radius);border:1px solid var(--color-warning, #f59e0b);background:#fffbeb;color:#92400e;font-size:.85rem;line-height:1.4;box-shadow:var(--shadow-lg, 0 10px 25px rgba(0,0,0,.15));animation:quizFadeIn .3s ease}.notes-update-warning-close{flex:0 0 auto;border:none;background:none;color:inherit;font-size:1.1rem;line-height:1;cursor:pointer;padding:0 .15rem}.numeric-keypad{position:fixed;top:0;left:0;display:flex;flex-wrap:wrap;justify-content:center;gap:4px;max-width:min(96vw,520px);padding:6px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:14px;box-shadow:var(--shadow-md);z-index:300;opacity:0;pointer-events:none;transition:opacity .12s;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;touch-action:none}.numeric-keypad.visible{opacity:1;pointer-events:auto}.numeric-keypad-key{min-width:44px;height:44px;padding:0 .6rem;border:1px solid var(--color-border);border-radius:8px;background:var(--color-bg);color:var(--color-text);font-size:1.05rem;font-weight:600;cursor:pointer;touch-action:none}.numeric-keypad-key:active,.numeric-keypad-key.pressed{background:var(--color-border)}.numeric-keypad-done{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.notes-fab{position:fixed;bottom:1.5rem;right:1.5rem;z-index:60;width:52px;height:52px;border-radius:50%;background:var(--color-surface);color:var(--color-text-light);border:1px solid var(--color-border);box-shadow:var(--shadow-md);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.notes-fab:hover{background:var(--color-bg);color:var(--color-text);box-shadow:0 6px 16px #0000001f}.notes-fab.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary-dark)}.notes-toolbar{position:fixed;bottom:1.5rem;right:5.5rem;z-index:62;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;box-shadow:0 8px 24px #0000001f;padding:.5rem;display:flex;flex-direction:column;align-items:center;gap:.25rem;opacity:0;pointer-events:none;transform:translateY(8px) scale(.95);transition:all .2s ease}.notes-toolbar.visible{opacity:1;pointer-events:all;transform:translateY(0) scale(1)}.notes-toolbar-group{display:flex;flex-direction:column;gap:.2rem}.notes-toolbar-sep{width:70%;height:1px;background:var(--color-border);margin:.15rem 0}.notes-toolbar .notes-selection-actions{display:none}.notes-toolbar.select-mode div.notes-selection-actions{display:flex}.notes-toolbar.select-mode span.notes-selection-actions{display:block}.notes-toolbar .notes-tool:disabled{opacity:.35;cursor:default}.notes-marquee{fill:#2563eb14;stroke:#2563eb;stroke-width:1;stroke-dasharray:4 3}.notes-selection-box{fill:#2563eb0a;stroke:#2563eb;stroke-width:1.5;stroke-dasharray:6 4;rx:4}.notes-tool{width:36px;height:36px;border-radius:8px;background:none;border:none;color:var(--color-text-light);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s;padding:0}.notes-tool:hover{background:var(--color-bg);color:var(--color-text)}.notes-tool.active{background:var(--color-primary);color:#fff}.notes-colors{align-items:center}.notes-color-btn{width:22px;height:22px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:all .15s;padding:0;margin:2px auto}.notes-color-btn:hover{transform:scale(1.15)}.notes-color-btn.active{border-color:var(--color-primary);box-shadow:0 0 0 2px #4f46e54d}.notes-status{position:fixed;bottom:1.5rem;right:5.5rem;z-index:60;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;padding:.35rem .75rem;font-size:.75rem;color:var(--color-text-light);box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:opacity .3s}.notes-status.visible{opacity:1}.notes-status.saved{color:var(--color-success)}.notes-status.error{color:var(--color-danger)}@media(max-width:768px){.lesson-body{padding:1rem .75rem 4rem}.notes-fab{bottom:1rem;right:1rem;width:48px;height:48px}.notes-toolbar{bottom:1rem;right:4.5rem}.notes-status{bottom:1rem;right:4.75rem}.exercise-body{padding:1rem .75rem 4rem}.sub-question-answer-inline{flex-direction:column;align-items:stretch}.sub-question-answer-inline .validate-point-btn{align-self:flex-start}}.exercise-draft-badge{display:inline-block;padding:.1rem .5rem;background:#fef3c7;color:#92400e;border-radius:9999px;font-size:.7rem;font-weight:600;margin-left:.5rem;vertical-align:middle}[data-paper-bg=squared] .exercise-body,[data-paper-bg=squared] .lesson-body{background-image:linear-gradient(rgba(148,163,184,.15) 1px,transparent 1px),linear-gradient(90deg,rgba(148,163,184,.15) 1px,transparent 1px);background-size:24px 24px;background-color:var(--color-surface)}[data-paper-bg=lined] .exercise-body,[data-paper-bg=lined] .lesson-body{background-image:linear-gradient(rgba(148,163,184,.2) 1px,transparent 1px);background-size:100% 28px;background-color:var(--color-surface)}.notes-toolbar-tools{display:flex;flex-direction:column;align-items:center;gap:.25rem}.notes-toolbar-tools.hidden{display:none}.notes-toolbar-settings{display:none;flex-direction:column;gap:.3rem}.notes-toolbar-settings.visible{display:flex}.notes-settings-section{display:flex;flex-direction:column;gap:.3rem}.notes-settings-title{font-size:.65rem;font-weight:600;color:var(--color-text-light);text-transform:uppercase;letter-spacing:.03em}.notes-bg-options{display:flex;gap:.3rem}.notes-bg-btn{width:32px;height:28px;border-radius:6px;border:2px solid var(--color-border);cursor:pointer;padding:0;overflow:hidden;transition:border-color .15s}.notes-bg-btn:hover{border-color:var(--color-secondary)}.notes-bg-btn.active{border-color:var(--color-primary)}.notes-bg-preview{display:block;width:100%;height:100%}.notes-bg-preview-plain{background:#fff}.notes-bg-preview-squared{background-color:#fff;background-image:linear-gradient(rgba(148,163,184,.25) 1px,transparent 1px),linear-gradient(90deg,rgba(148,163,184,.25) 1px,transparent 1px);background-size:5px 5px}.notes-bg-preview-lined{background-color:#fff;background-image:linear-gradient(rgba(148,163,184,.3) 1px,transparent 1px);background-size:100% 7px}.notes-zoom-row{display:flex;align-items:center;gap:.35rem}.notes-zoom-slider{width:80px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:3px;background:var(--color-border);border-radius:2px;outline:none}.notes-zoom-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:2px solid #fff;box-shadow:0 1px 3px #0003}.notes-zoom-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:2px solid #fff;box-shadow:0 1px 3px #0003}.notes-zoom-value{font-size:.65rem;font-weight:600;color:var(--color-text-light);min-width:3ch;text-align:right}.notes-fit-width-btn{width:100%;padding:.25rem 0;background:none;border:1px solid var(--color-border);border-radius:4px;color:var(--color-text-light);font-size:.65rem;cursor:pointer;transition:all .15s}.notes-fit-width-btn:hover{background:var(--color-bg);color:var(--color-text);border-color:var(--color-secondary)}.calc-fab{position:fixed;bottom:5.5rem;right:1.5rem;z-index:60;width:52px;height:52px;border-radius:50%;background:var(--color-surface);color:var(--color-text-light);border:1px solid var(--color-border);box-shadow:var(--shadow-md);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.calc-fab:hover{background:var(--color-bg);color:var(--color-text);box-shadow:0 6px 16px #0000001f}.calc-fab.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary-dark)}.calc-panel{position:fixed;right:9.5rem;bottom:8rem;z-index:61;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;box-shadow:0 8px 24px #0000001f;width:280px;opacity:0;pointer-events:none;visibility:hidden;transform:translateY(8px) scale(.95);transition:opacity .2s ease,transform .2s ease,visibility 0s linear .2s;overflow:hidden}.calc-panel.visible{opacity:1;pointer-events:all;visibility:visible;transform:translateY(0) scale(1);transition:opacity .2s ease,transform .2s ease}.calc-panel.dragging{-webkit-user-select:none;user-select:none;cursor:grabbing;transition:none}.calc-titlebar{display:flex;align-items:center;padding:.5rem .75rem;background:var(--color-bg);border-bottom:1px solid var(--color-border);cursor:grab;gap:.5rem}.calc-titlebar:active{cursor:grabbing}.calc-title{font-size:.8rem;font-weight:600;color:var(--color-text);flex:1}.calc-mode-btn{font-size:.65rem;padding:.2rem .5rem;border-radius:4px;background:var(--color-bg);border:1px solid var(--color-border);color:var(--color-text-light);cursor:pointer;transition:all .15s;white-space:nowrap}.calc-mode-btn:hover{background:var(--color-border);color:var(--color-text)}.calc-close-btn{width:24px;height:24px;border-radius:4px;background:none;border:none;color:var(--color-text-light);font-size:1.1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;padding:0;line-height:1}.calc-close-btn:hover{background:var(--color-danger);color:#fff}.calc-body{padding:.5rem;display:flex;flex-direction:column;gap:.5rem}.calc-display{display:flex;flex-direction:column;gap:.25rem}.calc-math-field{width:100%;min-height:40px;border:2px solid var(--color-border);border-radius:6px;font-size:1rem;padding:.3rem .5rem;background:#fff}.calc-math-field:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 2px #4f46e526}.calc-result{min-height:1.6rem;padding:.3rem .5rem;background:var(--color-bg);border-radius:6px;font-size:.95rem;color:var(--color-text);text-align:right;font-family:Courier New,monospace;display:flex;align-items:center;justify-content:flex-end}.calc-buttons{display:grid;grid-template-columns:repeat(4,1fr);gap:.3rem}.calc-sci-buttons{display:grid;grid-template-columns:repeat(5,1fr);gap:.3rem;padding-top:.3rem;border-top:1px solid var(--color-border)}.calc-btn{height:38px;border-radius:6px;background:var(--color-bg);border:1px solid var(--color-border);color:var(--color-text);font-size:.85rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .1s;padding:0;font-family:inherit}.calc-btn:hover{background:#e2e8f0;border-color:#cbd5e1}.calc-btn:active{transform:scale(.95);background:#cbd5e1}.calc-btn-op{background:var(--color-primary);border-color:var(--color-primary-dark);color:#fff}.calc-btn-op:hover{background:var(--color-primary-dark);border-color:#1e40af}.calc-btn-op:active{background:#1e40af}.calc-btn-func{background:#f1f5f9;color:var(--color-text-light);font-size:.8rem}.calc-btn-func:hover{background:#e2e8f0;color:var(--color-text)}.calc-btn-eval{grid-column:1 / -1;height:42px;background:var(--color-primary);border-color:var(--color-primary-dark);color:#fff;font-size:1.1rem;font-weight:700}.calc-btn-eval:hover{background:var(--color-primary-dark);border-color:#1e40af}.calc-btn-eval:active{background:#1e40af}.calc-btn-sci{font-size:.78rem;background:#f8fafc}.calc-panel.scientific{width:360px}.calc-panel.scientific .calc-buttons{grid-template-columns:repeat(4,1fr)}@media(max-width:768px){.calc-fab{bottom:4.8rem;right:1rem;width:48px;height:48px}.calc-panel{right:1rem;bottom:7rem;width:260px}.calc-panel.scientific{width:300px}.calc-btn{height:34px;font-size:.8rem}.calc-btn-eval{height:38px}}.code-question{display:flex;flex-direction:column;gap:.6rem}.code-signature{background:#0f172a;color:#e2e8f0;border-radius:6px;padding:.5rem .75rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem;overflow-x:auto}.code-signature code{color:#7dd3fc}.code-meta{display:flex;flex-wrap:wrap;gap:.75rem;font-size:.78rem;color:var(--color-text-light)}.code-meta-item{white-space:nowrap}.code-editor-host{border:1px solid var(--color-border, #cbd5e1);border-radius:8px;overflow:hidden}.code-editor-host .cm-editor{max-height:460px;font-size:.9rem}.code-editor-host .cm-scroller{overflow:auto}.code-actions{display:flex;align-items:center;gap:.75rem}.code-run-status{font-size:.8rem;color:var(--color-text-light)}.code-test-results{display:flex;flex-direction:column;gap:.35rem}.code-result-summary{font-weight:600;font-size:.9rem;padding:.4rem .6rem;border-radius:6px}.code-result-summary.correct{background:#dcfce7;color:#166534}.code-result-summary.wrong{background:#fee2e2;color:#991b1b}.code-test-row{display:flex;align-items:baseline;gap:.5rem;flex-wrap:wrap;padding:.3rem .5rem;border-radius:6px;border:1px solid var(--color-border, #e2e8f0);font-size:.85rem}.code-test-row.passed{border-left:3px solid #16a34a}.code-test-row.failed{border-left:3px solid #dc2626}.code-test-badge{font-weight:700}.code-test-row.passed .code-test-badge{color:#16a34a}.code-test-row.failed .code-test-badge{color:#dc2626}.code-test-name{font-family:ui-monospace,Menlo,Consolas,monospace}.code-test-hidden{font-size:.75rem;color:var(--color-text-light);font-style:italic}.code-test-io,.code-compile-error{width:100%;margin:.25rem 0 0;background:#0f172a;color:#e2e8f0;border-radius:6px;padding:.5rem .6rem;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.8rem;white-space:pre-wrap;overflow-x:auto}.code-compile-error{color:#fca5a5}.lab-workspace{display:flex;height:calc(100vh - 56px);max-width:100%;overflow:hidden}.lab-workspace.lab-split-horizontal{flex-direction:row}.lab-workspace.lab-split-vertical{flex-direction:column}.lab-panel{display:flex;flex-direction:column;overflow:hidden;background:var(--color-surface);position:relative;min-width:280px}.lab-split-vertical>.lab-panel{min-width:0;min-height:120px}.lab-panel-header{display:flex;align-items:center;justify-content:space-between;padding:.3rem .75rem;border-bottom:1px solid var(--color-border);background:#f1f5f9;flex-shrink:0}.lab-panel-title{font-size:.8rem;font-weight:600;color:var(--color-text-light);text-transform:uppercase;letter-spacing:.04em}.lab-panel-actions{display:flex;gap:.25rem}.lab-panel-btn{width:28px;height:28px;border:none;background:none;color:var(--color-text-light);cursor:pointer;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:all .15s}.lab-panel-btn:hover{background:var(--color-border);color:var(--color-text)}.lab-panel-minimized .lab-panel-body{display:none}.lab-panel-minimized .lab-panel-header{height:100%;padding:.35rem 0;flex-direction:column-reverse;justify-content:flex-end;gap:.5rem;border-bottom:0}.lab-panel-minimized .lab-panel-title{writing-mode:vertical-rl;transform:rotate(180deg);padding:.25rem 0}.lab-panel-minimized .lab-orientation-btn{display:none}.lab-split-vertical .lab-panel-minimized .lab-panel-header{width:100%;flex-direction:row;padding:.25rem .5rem}.lab-split-vertical .lab-panel-minimized .lab-panel-title{writing-mode:horizontal-tb;transform:none}.lab-panel-body{flex:1;overflow-y:auto;overflow-x:hidden;position:relative;padding:1.5rem 1rem 4rem;min-height:0}.lab-panel-body img,.lab-panel-body pre,.lab-panel-body code,.lab-panel-body svg{max-width:100%}.lab-panel-body pre{overflow-x:auto}.lab-workspace.lab-split-horizontal .lab-panel-body{max-width:100%}.lab-workspace.lab-split-vertical .lab-panel-body{max-height:100%}.lab-panel-instructions .lab-panel-body{background:var(--color-surface)}.lab-panel-workspace .lab-panel-body{background:#0f172a;padding:0}.lab-divider{flex-shrink:0;background:var(--color-border);transition:background .15s;z-index:5}.lab-split-horizontal>.lab-divider{width:6px;cursor:col-resize}.lab-split-vertical>.lab-divider{height:6px;cursor:row-resize}.lab-divider:hover,.lab-divider-active{background:var(--color-primary)}.lab-examples,.lab-requirements{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--color-border)}.lab-examples h3,.lab-requirements h3{font-size:.95rem;font-weight:600;margin-bottom:.5rem;color:var(--color-text)}.lab-examples pre{background:#f1f5f9;border:1px solid var(--color-border);border-radius:6px;padding:.75rem 1rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem;overflow-x:auto;white-space:pre-wrap;color:var(--color-text)}.lab-requirements p{font-size:.92rem;color:var(--color-text-light);line-height:1.6}.c-workspace{display:flex;flex-direction:column;height:100%}.c-editor-container{flex:1;overflow:hidden;border-bottom:1px solid #1e293b}.c-editor-container .cm-editor{height:100%;font-size:.88rem}.c-editor-container .cm-scroller{overflow:auto}.c-controls{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:#1e293b;border-bottom:1px solid #334155;flex-shrink:0}.c-args-input{flex:1;padding:.35rem .6rem;border:1px solid #334155;border-radius:4px;font-size:.82rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:#0f172a;color:#e2e8f0;outline:none}.c-args-input:focus{border-color:var(--color-primary)}.c-args-input::placeholder{color:#64748b}.c-editor-status{display:flex;justify-content:space-between;align-items:center;padding:.2rem .75rem;background:#1e293b;border-top:1px solid #334155;font-size:.68rem;color:#64748b;flex-shrink:0}.c-char-over{color:#f87171;font-weight:600}.c-save-error{color:#f87171}.c-terminal{flex-shrink:0;max-height:45%;overflow-y:auto;background:#0f172a;border-top:2px solid #334155}.c-terminal-output{padding:.75rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem;line-height:1.5;color:#e2e8f0}.c-terminal-placeholder{color:#64748b;font-style:italic}.c-terminal-body{margin:0;white-space:pre-wrap;word-break:break-all}.c-terminal-stderr{color:#fca5a5}.c-terminal-error-msg{color:#f87171;font-weight:600;margin-bottom:.35rem}.c-terminal-status{margin-top:.4rem;padding-top:.4rem;border-top:1px solid #334155;font-size:.72rem;color:#94a3b8}.c-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:c-spin .6s linear infinite}@keyframes c-spin{to{transform:rotate(360deg)}}.c-terminal-validation .c-terminal-output{padding:0}.c-val-section{padding:.6rem .75rem;border-bottom:1px solid #334155}.c-val-section:last-child{border-bottom:none}.c-val-header{font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.35rem;color:#94a3b8}.c-val-header-ok{color:#4ade80}.c-val-header-fail{color:#f87171}.c-val-row{display:flex;align-items:center;gap:.5rem;font-size:.78rem;padding:.25rem 0}.c-val-row-ok .c-val-icon{color:#4ade80}.c-val-row-fail .c-val-icon{color:#f87171}.c-val-icon{flex-shrink:0;width:1.2em;font-weight:700}.c-val-label{flex:1;color:#e2e8f0;min-width:0}.c-val-label code{font-size:.75rem;background:#ffffff14;padding:.1em .35em;border-radius:3px}.c-val-score{flex-shrink:0;font-variant-numeric:tabular-nums;font-weight:600;color:#94a3b8}.c-val-score-total{font-size:1rem;color:#e2e8f0}.c-val-error-msg{margin:.3rem 0 0;padding:.4rem .5rem;background:#f871711a;border-left:3px solid #f87171;font-size:.72rem;white-space:pre-wrap;color:#fca5a5;border-radius:0 3px 3px 0}.c-val-detail{margin-left:1.7em;margin-bottom:.25rem;font-size:.7rem;color:#fca5a5;white-space:pre-wrap;word-break:break-all}.c-val-total{background:#ffffff0a;border-top:2px solid #475569}.c-val-saved{margin-top:.3rem;font-size:.65rem;color:#64748b;font-style:italic}.fs-workspace{display:flex;flex-direction:column;height:100%;min-height:0;color:#e2e8f0;background:#0b1220}.fs-toolbar{display:flex;align-items:center;gap:.5rem;padding:.5rem .65rem;border-bottom:1px solid #263449;background:#111c2e;flex-shrink:0}.fs-args{flex:1;min-width:110px}.fs-explorer-toggle{display:none;border:1px solid #334155;border-radius:5px;color:#cbd5e1;background:#172033;height:30px;width:32px}.fs-main{display:flex;flex:1;min-height:0}.fs-explorer{width:230px;flex:0 0 230px;overflow:auto;border-right:1px solid #263449;background:#0f1828}.fs-explorer-heading{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;padding:.5rem .65rem;background:#111c2e;color:#94a3b8;font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.fs-explorer-heading button{display:none;border:0;background:none;color:#94a3b8;font-size:1.15rem}.fs-tree-group{padding:.35rem 0 .5rem}.fs-tree-group+.fs-tree-group{border-top:1px solid rgba(51,65,85,.55)}.fs-tree-group-title{display:flex;align-items:center;gap:.4rem;padding:.35rem .65rem;color:#7f91aa;font-size:.64rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.fs-temp-badge{color:#64748b;font-size:.56rem;font-weight:500}.fs-tree-empty{padding:.4rem .65rem .6rem;color:#64748b;font-size:.68rem;line-height:1.4}.fs-file-row{width:100%;display:grid;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:.35rem;padding:.28rem .45rem .28rem calc(.65rem + var(--depth, 0) * .8rem);border:0;color:#cbd5e1;background:transparent;font:inherit;font-size:.72rem;text-align:left;cursor:pointer}.fs-file-row:hover,.fs-file-row:focus-visible{background:#1b2940;outline:none}.fs-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fs-file-icon{color:#94a3b8;font-size:.66rem;text-align:center}.fs-c-dot{color:#7dd3fc;font-weight:800}.fs-file-badge{padding:.05rem .25rem;border-radius:3px;color:#64748b;background:#64748b1f;font-size:.53rem}.fs-write{color:#93c5fd;background:#3b82f624}.fs-generated{color:#86efac;background:#22c55e1f}.fs-modified{color:#fde68a;background:#eab3081f}.fs-folder>summary{padding:.27rem .65rem .27rem calc(.65rem + var(--depth, 0) * .8rem);color:#a8b6ca;font-size:.7rem;cursor:pointer;list-style:none}.fs-folder>summary::-webkit-details-marker{display:none}.fs-editor-pane{display:flex;flex:1;min-width:0;min-height:0;flex-direction:column}.fs-tabbar{height:34px;display:flex;border-bottom:1px solid #263449;background:#111827;flex-shrink:0}.fs-tab{max-width:60%;padding:0 .75rem;border:0;border-right:1px solid #263449;color:#94a3b8;background:#111827;font-size:.7rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fs-tab-active{color:#e2e8f0;background:#0f172a;box-shadow:inset 0 2px #6366f1}.fs-editable-badge{margin-left:.35rem;color:#64748b;font-size:.57rem}.fs-view-stack{position:relative;flex:1;min-height:0;overflow:hidden}.fs-source-editor,.fs-preview,.fs-readonly-editor,.fs-source-editor .cm-editor,.fs-readonly-editor .cm-editor{height:100%}.fs-source-editor .cm-scroller,.fs-readonly-editor .cm-scroller{overflow:auto}.fs-preview{overflow:auto;background:#0f172a}.fs-status{padding-inline:.65rem}.fs-ephemeral-note{margin-left:auto;color:#64748b}.fs-image-preview{min-height:100%;display:grid;place-items:center;align-content:center;gap:1rem;padding:1.5rem}.fs-image-preview img{max-width:100%;max-height:55vh;object-fit:contain;border-radius:6px;background:repeating-conic-gradient(#e2e8f0 0,#e2e8f0 25%,#cbd5e1 0,#cbd5e1 50%) 0/16px 16px}.fs-image-preview p,.fs-binary-preview p{color:#94a3b8;font-size:.75rem}.fs-binary-preview{display:grid;justify-items:center;align-content:center;min-height:100%;padding:2rem;text-align:center}.fs-binary-icon{display:grid;place-items:center;width:54px;height:54px;margin-bottom:1rem;border:1px solid #475569;border-radius:10px;color:#94a3b8;font-family:monospace}.fs-console{flex:0 0 180px;min-height:0;border-radius:0;border-top:1px solid #334155}.fs-console-header{width:100%;height:32px;display:flex;align-items:center;gap:.75rem;padding:0 .65rem;border:0;border-bottom:1px solid #263449;color:#cbd5e1;background:#111c2e;font-size:.7rem;text-align:left}.fs-console-header #fs-console-summary{flex:1;color:#64748b}.fs-console .c-terminal-output{height:calc(100% - 32px);overflow:auto}.fs-console-collapsed{flex-basis:32px}.fs-console-collapsed .c-terminal-output{display:none}.fs-console-collapsed .fs-chevron{transform:rotate(90deg)}@media(max-width:768px){.fs-toolbar{flex-wrap:wrap}.fs-explorer-toggle{display:block}.fs-args{order:4;flex-basis:100%}.fs-explorer{position:absolute;inset:0 auto 0 0;z-index:20;width:min(82vw,280px);transform:translate(-105%);box-shadow:12px 0 28px #00000059;transition:transform .18s ease}.fs-explorer-open{transform:translate(0)}.fs-explorer-heading button{display:block}.fs-main{position:relative;min-height:520px}.fs-console{flex-basis:160px}.fs-ephemeral-note,.fs-editable-badge{display:none}}.notes-in-panel .notes-fab{position:absolute;bottom:.5rem;right:.5rem}.notes-in-panel .notes-toolbar{position:absolute;bottom:.5rem;right:4.5rem}.notes-in-panel .notes-status{position:absolute;bottom:.25rem;left:.5rem}.notes-in-panel .calc-fab{position:absolute;bottom:5rem;right:.5rem}.notes-in-panel .calc-panel{position:absolute}@media(max-width:768px){.lab-workspace{flex-direction:column!important;height:auto;min-height:100vh}.lab-workspace .lab-divider{width:100%;height:6px;cursor:row-resize}.lab-panel{min-width:0}.lab-panel-instructions{min-height:100px}.lab-panel-workspace{min-height:200px}.lab-panel-body{padding:1rem .75rem 2rem}}.lesson-content figure,.exercise-content figure{margin:2rem auto;text-align:center}.lesson-content figure pre,.lesson-content figure .sourceCode,.lesson-content figure .docs-code,.exercise-content figure pre,.exercise-content figure .sourceCode,.exercise-content figure .docs-code{text-align:left}.lesson-content figure figure,.exercise-content figure figure{margin:0 auto}.lesson-content figcaption,.exercise-content figcaption{margin:.75rem auto 0;max-width:88%;font-size:.875rem;line-height:1.55;color:var(--color-text-light);text-align:center}.lesson-content table caption,.exercise-content table caption{caption-side:bottom;padding:.75rem 1rem .25rem;font-size:.875rem;line-height:1.55;color:var(--color-text-light);text-align:center}.caption-label{font-weight:700;color:var(--color-text)}.lesson-content table.content-table{margin:1.75rem auto}pre code.sourceCode{white-space:pre}pre code.sourceCode>span{display:inline}code.sourceCode a{text-decoration:none}pre code .kw,pre code .cf{color:#c678dd}pre code .dt{color:#e5c07b}pre code .dv,pre code .bn,pre code .fl{color:#d19a66}pre code .st,pre code .vs{color:#98c379}pre code .ch,pre code .sc,pre code .ss{color:#56b6c2}pre code .co,pre code .do,pre code .an,pre code .cv,pre code .in{color:#8b95a7;font-style:italic}pre code .op{color:#abb2bf}pre code .pp{color:#e06c75}pre code .im{color:#98c379}pre code .fu{color:#61afef}pre code .va{color:#e06c75}pre code .cn{color:#d19a66}pre code .bu,pre code .ex{color:#61afef}pre code .al,pre code .er,pre code .wa{color:#f87171}pre.has-copy-btn{position:relative}.code-copy-btn{position:absolute;top:.45rem;right:.45rem;width:28px;height:28px;padding:0;border-radius:6px;border:1px solid rgba(148,163,184,.35);background:#1e293b99;color:#94a3b8;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.55;transition:all .15s}pre:hover .code-copy-btn{opacity:1}.code-copy-btn:hover{color:#e2e8f0;background:#334155d9}.code-copy-btn.copied{color:#4ade80;border-color:#4ade80;opacity:1}.lab-examples .code-copy-btn{background:#ffffffb3;color:var(--color-text-light)}.lab-examples .code-copy-btn:hover{color:var(--color-text);background:#fff}.snippet-runner{margin:-.5rem 0 1.25rem}.lesson-content .sourceCode+.snippet-runner,.lesson-content pre+.snippet-runner{margin-top:-.5rem}.snippet-runner-bar{display:flex;align-items:center;gap:.6rem}.snippet-run-btn{gap:.35rem}.snippet-run-status{font-size:.8rem;color:var(--color-text-light)}.snippet-output{margin-top:.5rem;background:#0f172a;border:1px solid #334155;border-radius:var(--radius);padding:.6rem .75rem;font-size:.8rem}.snippet-output-block{margin:0;padding:0;background:transparent;color:#e2e8f0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;word-break:break-word}.snippet-output-stderr{color:#fca5a5}.snippet-output-title{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;margin-bottom:.35rem}.snippet-output-err-title{color:#f87171}.snippet-output-meta{margin-top:.4rem;padding-top:.4rem;border-top:1px solid #334155;font-size:.72rem;color:#94a3b8}.lab-examples pre code .kw,.lab-examples pre code .cf{color:#a626a4}.lab-examples pre code .dt{color:#c18401}.lab-examples pre code .dv,.lab-examples pre code .bn,.lab-examples pre code .fl{color:#986801}.lab-examples pre code .st,.lab-examples pre code .vs{color:#50a14f}.lab-examples pre code .ch,.lab-examples pre code .sc,.lab-examples pre code .ss{color:#0184bc}.lab-examples pre code .co,.lab-examples pre code .do{color:#8a919c}.lab-examples pre code .op{color:#383a42}.lab-examples pre code .pp{color:#ca1243}.lab-examples pre code .im{color:#50a14f}.lab-examples pre code .fu{color:#4078f2}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin:1.25rem 0 1.75rem}.page-title{font-size:1.7rem;font-weight:800}.page-subtitle{color:var(--color-text-light);font-size:.95rem;margin-top:.2rem;max-width:60ch}.page-header-badge{margin-top:.5rem;text-transform:capitalize}.section-title{font-size:1.15rem;font-weight:700;margin-bottom:.9rem;display:flex;align-items:center;gap:.6rem}.section-title:before{content:"";width:4px;height:1.1em;border-radius:2px;background:var(--gradient-primary)}.hero{position:relative;overflow:hidden;padding:4.5rem 1.5rem 4rem}.hero:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(600px 300px at 15% 0%,rgba(79,70,229,.12),transparent 70%),radial-gradient(600px 300px at 85% 10%,rgba(124,58,237,.1),transparent 70%);pointer-events:none}.hero-inner{position:relative;max-width:720px;margin:0 auto;text-align:center}.hero-eyebrow{display:inline-block;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--color-primary);background:var(--color-primary-soft);border:1px solid #e0e7ff;padding:.3rem .9rem;border-radius:9999px;margin-bottom:1.25rem}.hero-title{font-size:clamp(2.2rem,6vw,3.4rem);font-weight:800;line-height:1.12;letter-spacing:-.03em}.hero-title-accent{background:var(--gradient-primary);-webkit-background-clip:text;background-clip:text;color:transparent}.hero-subtitle{margin:1.25rem auto 0;max-width:54ch;font-size:1.05rem;color:var(--color-text-light)}.hero-actions{display:flex;justify-content:center;gap:.75rem;margin-top:2rem}.hero-cta{padding:.7rem 1.6rem;font-size:.95rem;border-radius:12px}.hero-features{position:relative;max-width:var(--max-width);margin:4rem auto 0;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1.25rem}.hero-feature{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:1.5rem;transition:box-shadow .2s,transform .2s}.hero-feature:hover{transform:translateY(-3px);box-shadow:var(--shadow-md)}.hero-feature-icon{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:12px;margin-bottom:.9rem}.hero-feature h3{font-size:1rem;margin-bottom:.35rem}.hero-feature p{font-size:.875rem;color:var(--color-text-light);line-height:1.55}.auth-page{display:flex;justify-content:center;padding:3.5rem 1rem 4rem;background:radial-gradient(520px 260px at 50% 0%,rgba(79,70,229,.1),transparent 70%)}.auth-card{width:100%;max-width:410px;padding:2.25rem 2rem}.auth-title{font-size:1.5rem;font-weight:800;text-align:center}.auth-subtitle{text-align:center;color:var(--color-text-light);font-size:.9rem;margin:.3rem 0 1.5rem}.auth-submit{width:100%;padding:.65rem 1rem;font-size:.95rem;margin-top:.35rem}.auth-alt{font-size:.875rem}.course-card{position:relative;display:flex;flex-direction:column;cursor:pointer;overflow:hidden;padding:1.5rem 1.5rem 1.1rem}.course-card:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:var(--gradient-primary);opacity:0;transition:opacity .2s}.course-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:#dfe3f4}.course-card:hover:before{opacity:1}.course-card-title{font-size:1.05rem;margin-bottom:.4rem}.course-card-desc{font-size:.875rem;color:var(--color-text-light);line-height:1.55;flex:1}.course-card-footer{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-top:1.1rem;padding-top:.85rem;border-top:1px solid var(--color-border)}.course-price{font-size:1.05rem;font-weight:800;color:var(--color-text);font-variant-numeric:tabular-nums}.module-card{padding:1.25rem 1.5rem}.module-card-header{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem}.module-number{flex-shrink:0;width:30px;height:30px;border-radius:9px;background:var(--gradient-primary);color:#fff;font-size:.85rem;font-weight:700;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #4f46e54d}.module-card-title{font-size:1.05rem}.lesson-list{list-style:none;display:flex;flex-direction:column}.lesson-row{display:flex;align-items:center;gap:.65rem;padding:.55rem .6rem;border-radius:10px;transition:background .12s}.lesson-row:hover{background:#f6f7fb}.lesson-row+.lesson-row{border-top:1px solid #f0f2f8}.lesson-row-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:9px;background:var(--color-primary-soft);color:var(--color-primary)}.lesson-row-locked .lesson-row-icon{background:#f1f5f9;color:var(--color-text-light)}.lesson-row-title{flex:1;min-width:0;font-size:.9rem;font-weight:500;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a.lesson-row-title:hover{color:var(--color-primary);text-decoration:none}.lesson-row-meta{font-size:.78rem;color:var(--color-text-light);white-space:nowrap}.lesson-row.lesson-locked,.lesson-row-locked{opacity:.75;cursor:not-allowed}@media(max-width:640px){.page-header{flex-direction:column;align-items:flex-start;gap:.5rem}.hero{padding-top:3rem}.hero-actions{flex-direction:column;align-items:stretch;max-width:300px;margin-left:auto;margin-right:auto}}.app-loading{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--color-bg)}.app-loading-inner{text-align:center}.app-loading-inner p{margin-top:1rem;color:var(--color-text-light);font-size:.9375rem}.spinner{width:40px;height:40px;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto}@keyframes spin{to{transform:rotate(360deg)}}.grade-badge{font-variant-numeric:tabular-nums}.grade-high{background:var(--color-success-soft);color:#15803d}.grade-mid{background:var(--color-warning-soft);color:#b45309}.grade-low{background:var(--color-danger-soft);color:var(--color-danger)}.grade-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem;margin-bottom:1.5rem}.grade-summary-card{background:var(--color-surface, #fff);border:1px solid var(--color-border);border-radius:12px;padding:1rem 1.25rem}.grade-summary-label{font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-light)}.grade-summary-value{font-size:1.6rem;font-weight:700;font-variant-numeric:tabular-nums;margin-top:.25rem}.grade-summary-value.grade-high{background:none;color:#15803d}.grade-summary-value.grade-mid{background:none;color:#b45309}.grade-summary-value.grade-low{background:none;color:var(--color-danger)}.progress-track{width:100%;height:8px;background:var(--color-border);border-radius:9999px;overflow:hidden}.progress-fill{height:100%;background:var(--color-primary);border-radius:9999px;transition:width .3s ease}.progress-fill.progress-complete{background:var(--color-success)}.student-progress-card{margin-bottom:1rem}.student-progress-card>summary{display:flex;align-items:center;gap:1rem;cursor:pointer;list-style:none;flex-wrap:wrap}.student-progress-card>summary::-webkit-details-marker{display:none}.student-progress-name{font-weight:600;min-width:12rem}.student-progress-track{flex:1;min-width:8rem}.student-progress-track .progress-track{display:block}.student-progress-meta{font-size:.85rem;color:var(--color-text-light);font-variant-numeric:tabular-nums;white-space:nowrap}.grades-table-wrap{overflow-x:auto}.grades-table-wrap table{width:100%}.grades-table-wrap td,.grades-table-wrap th{white-space:nowrap}.grades-table-wrap td:first-child,.grades-table-wrap th:first-child{white-space:normal}
