:root{--bg:#0b0f19;--surface:#131926;--surface-2:#1b2333;--border:#273043;--text:#e8edf7;--text-dim:#97a3bb;--text-faint:#64708a;--accent:#6d8dff;--accent-soft:#6d8dff22;--good:#34d399;--good-soft:#34d39922;--bad:#f87171;--bad-soft:#f8717122;--warn:#fbbf24;--warn-soft:#fbbf2422;--radius:12px;--radius-sm:8px;--shadow:0 8px 28px #00000059;--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root[data-theme=light]{--bg:#f5f7fb;--surface:#fff;--surface-2:#eef2f9;--border:#dce3ef;--text:#161d2b;--text-dim:#55637d;--text-faint:#8593ac;--accent:#3b5bdb;--accent-soft:#3b5bdb14;--good:#059669;--good-soft:#05966914;--bad:#dc2626;--bad-soft:#dc262614;--warn:#b45309;--warn-soft:#b4530914;--shadow:0 6px 20px #141e3c14;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:15px;line-height:1.6}h1,h2,h3,h4{letter-spacing:-.01em;margin:0;font-weight:650;line-height:1.25}h1{overflow-wrap:break-word;font-size:1.6rem}h2{font-size:1.15rem}h3{font-size:1rem}p{margin:0 0 .85em}p:last-child{margin-bottom:0}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;cursor:pointer}.app{grid-template-columns:232px 1fr;min-height:100vh;display:grid}.sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;gap:4px;height:100vh;padding:20px 14px;display:flex;position:sticky;top:0;overflow-y:auto}.brand{align-items:center;gap:10px;padding:0 8px 18px;display:flex}.brand-mark{background:linear-gradient(135deg, var(--accent), #a855f7);color:#fff;border-radius:9px;flex-shrink:0;place-items:center;width:32px;height:32px;font-size:13px;font-weight:800;display:grid}.brand-name{letter-spacing:-.02em;font-size:15px;font-weight:700}.brand-sub{color:var(--text-faint);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.nav-item{border-radius:var(--radius-sm);color:var(--text-dim);align-items:center;gap:10px;padding:8px 10px;font-size:14px;font-weight:500;transition:background .12s,color .12s;display:flex}.nav-item:hover{background:var(--surface-2);color:var(--text);text-decoration:none}.nav-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.nav-icon{text-align:center;flex-shrink:0;width:17px}.nav-badge{background:var(--accent);color:#fff;border-radius:999px;margin-left:auto;padding:1px 6px;font-size:10px;font-weight:700}.nav-section{text-transform:uppercase;letter-spacing:.09em;color:var(--text-faint);padding:16px 10px 6px;font-size:10.5px;font-weight:700}.main{width:100%;min-width:0;max-width:1100px;padding:28px 32px 64px}.page-head{margin-bottom:22px}.page-head p{color:var(--text-dim);margin:6px 0 0}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px}.card-tight{padding:14px}.grid{gap:14px;display:grid}.grid-2{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.grid-3{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}.grid-4{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.row{align-items:center;gap:10px;display:flex}.row-between{justify-content:space-between;align-items:center;gap:10px;display:flex}.wrap{flex-wrap:wrap}.spacer{flex:1}.btn{border:1px solid var(--border);background:var(--surface-2);color:var(--text);border-radius:var(--radius-sm);padding:8px 14px;font-size:14px;font-weight:550;transition:background .12s,border-color .12s,opacity .12s}.btn:hover:not(:disabled){border-color:var(--accent)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){filter:brightness(1.08)}.btn-ghost{background:0 0}.btn-sm{padding:5px 10px;font-size:13px}.btn-lg{padding:11px 20px;font-size:15px}.btn-danger{color:var(--bad);border-color:var(--bad-soft)}.chip{background:var(--surface-2);color:var(--text-dim);border:1px solid var(--border);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:3px 9px;font-size:11.5px;font-weight:600;display:inline-flex}.chip-good{background:var(--good-soft);color:var(--good);border-color:#0000}.chip-bad{background:var(--bad-soft);color:var(--bad);border-color:#0000}.chip-warn{background:var(--warn-soft);color:var(--warn);border-color:#0000}.chip-accent{background:var(--accent-soft);color:var(--accent);border-color:#0000}.chip-btn{cursor:pointer;transition:border-color .12s}.chip-btn:hover{border-color:var(--accent)}.chip-btn.on{background:var(--accent);color:#fff;border-color:var(--accent)}.stat-label{text-transform:uppercase;letter-spacing:.07em;color:var(--text-faint);font-size:11px;font-weight:650}.stat-value{letter-spacing:-.02em;margin-top:3px;font-size:1.7rem;font-weight:700;line-height:1.15}.stat-note{color:var(--text-dim);margin-top:2px;font-size:12px}.bar{background:var(--surface-2);border-radius:99px;height:6px;overflow:hidden}.bar>span{background:var(--accent);border-radius:99px;height:100%;transition:width .3s;display:block}.muted{color:var(--text-dim)}.faint{color:var(--text-faint)}.small{font-size:12.5px}.mono{font-family:var(--mono)}.center{text-align:center}.empty{text-align:center;color:var(--text-dim);padding:44px 20px}.empty-icon{opacity:.6;margin-bottom:10px;font-size:30px}.spinner{border:2.5px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:26px;height:26px;margin:0 auto;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.note-body{font-size:15px;line-height:1.72}.note-body h3{color:var(--accent);margin:26px 0 10px;font-size:1.02rem}.note-body h3:first-child{margin-top:0}.note-body ul,.note-body ol{margin:0 0 14px;padding-left:22px}.note-body li{margin-bottom:5px}.formula{background:var(--surface-2);border-left:3px solid var(--accent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-family:var(--mono);margin:0 0 14px;padding:12px 16px;font-size:14.5px;overflow-x:auto}.formula-caption{color:var(--text-dim);margin-top:6px;font-family:Inter,sans-serif;font-size:12.5px}.callout{border-radius:var(--radius-sm);border-left:3px solid;margin:0 0 14px;padding:12px 14px;font-size:14px}.callout-title{text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;font-size:12px;font-weight:700}.callout-exam{background:var(--accent-soft);border-color:var(--accent)}.callout-exam .callout-title{color:var(--accent)}.callout-trap{background:var(--bad-soft);border-color:var(--bad)}.callout-trap .callout-title{color:var(--bad)}.callout-mnemonic{background:var(--warn-soft);border-color:var(--warn)}.callout-mnemonic .callout-title{color:var(--warn)}.table-wrap{border:1px solid var(--border);border-radius:var(--radius-sm);margin:0 0 14px;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:13.5px}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:8px 12px}th{background:var(--surface-2);white-space:nowrap;font-size:12.5px;font-weight:650}tr:last-child td{border-bottom:none}.table-caption{color:var(--text-dim);margin-top:-8px;margin-bottom:14px;font-size:12.5px}.level-tabs{background:var(--surface-2);border-radius:var(--radius-sm);gap:3px;padding:3px;display:inline-flex}.level-tab{color:var(--text-dim);background:0 0;border:none;border-radius:6px;padding:6px 14px;font-size:13.5px;font-weight:600}.level-tab.active{background:var(--surface);color:var(--text);box-shadow:var(--shadow)}.quiz-shell{max-width:780px;margin:0 auto}.quiz-bar{z-index:10;background:var(--bg);border-bottom:1px solid var(--border);margin-bottom:22px;padding:12px 0 14px;position:sticky;top:0}.timer{font-family:var(--mono);letter-spacing:.02em;font-size:16px;font-weight:700}.timer.urgent{color:var(--bad)}.q-stem{margin-bottom:18px;font-size:16.5px;font-weight:500;line-height:1.65}.options{flex-direction:column;gap:9px;display:flex}.option{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);text-align:left;color:var(--text);align-items:flex-start;gap:11px;width:100%;padding:12px 14px;font-size:14.5px;line-height:1.55;transition:border-color .12s,background .12s;display:flex}.option:hover:not(:disabled){border-color:var(--accent)}.option.selected{border-color:var(--accent);background:var(--accent-soft)}.option.correct{border-color:var(--good);background:var(--good-soft)}.option.wrong{border-color:var(--bad);background:var(--bad-soft)}.option:disabled{cursor:default}.option-key{background:var(--surface-2);border-radius:6px;flex-shrink:0;place-items:center;width:22px;height:22px;margin-top:1px;font-size:12px;font-weight:700;display:grid}.option.selected .option-key{background:var(--accent);color:#fff}.option.correct .option-key{background:var(--good);color:#fff}.option.wrong .option-key{background:var(--bad);color:#fff}.explanation{border-radius:var(--radius-sm);background:var(--surface-2);border-left:3px solid var(--accent);margin-top:16px;padding:14px 16px;font-size:14px;line-height:1.65}.explanation-head{text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-bottom:5px;font-size:11.5px;font-weight:700}.palette{grid-template-columns:repeat(auto-fill,minmax(34px,1fr));gap:6px;display:grid}.palette-cell{aspect-ratio:1;border:1px solid var(--border);background:var(--surface);color:var(--text-dim);border-radius:6px;place-items:center;font-size:12px;font-weight:650;display:grid}.palette-cell.answered{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.palette-cell.flagged{background:var(--warn-soft);border-color:var(--warn);color:var(--warn)}.palette-cell.current{outline:2px solid var(--accent);outline-offset:1px}.flashcard{text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;flex-direction:column;justify-content:center;align-items:center;min-height:260px;padding:34px 28px;font-size:18px;line-height:1.6;display:flex}.flashcard-side{text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint);margin-bottom:14px;font-size:11px;font-weight:700}.grade-row{grid-template-columns:repeat(4,1fr);gap:8px;margin-top:14px;display:grid}.heatmap{grid-template-columns:repeat(auto-fill,minmax(13px,1fr));gap:3px;display:grid}.heat-cell{aspect-ratio:1;background:var(--surface-2);border-radius:3px}.spark{align-items:flex-end;gap:2px;height:44px;display:flex}.spark>span{background:var(--accent);opacity:.85;border-radius:2px 2px 0 0;flex:1;min-height:2px}.hbar-row{grid-template-columns:1fr 46px;align-items:center;gap:10px;padding:7px 0;display:grid}.hbar-label{font-size:13.5px}.hbar-track{background:var(--surface-2);border-radius:99px;height:5px;margin-top:5px;overflow:hidden}.hbar-fill{border-radius:99px;height:100%}.modal-backdrop{z-index:100;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#04070eb8;place-items:center;padding:20px;display:grid;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);width:100%;max-width:620px;margin:auto;padding:26px}.modal-badge{background:var(--warn-soft);color:var(--warn);letter-spacing:.05em;text-transform:uppercase;border-radius:999px;margin-bottom:14px;padding:4px 10px;font-size:11.5px;font-weight:700;display:inline-block}.disclaimer-list{color:var(--text-dim);margin:0 0 16px;padding-left:20px;font-size:14px;line-height:1.62}.disclaimer-list li{margin-bottom:10px}.disclaimer-list li::marker{color:var(--warn);font-weight:700}.ai-notice{background:var(--warn-soft);border:1px solid #0000;border-left:3px solid var(--warn);border-radius:var(--radius-sm);color:var(--text-dim);align-items:flex-start;gap:9px;margin-bottom:14px;padding:9px 12px;font-size:12.5px;line-height:1.55;display:flex}.ai-notice-dot{background:var(--warn);color:#fff;letter-spacing:.05em;border-radius:4px;flex-shrink:0;margin-top:1px;padding:2px 5px;font-size:9.5px;font-weight:800}.app-footer{border-top:1px solid var(--border);color:var(--text-faint);margin-top:40px;padding-top:16px;font-size:12px;line-height:1.6}.login-shell{background:radial-gradient(1100px 520px at 50% -10%, var(--accent-soft), transparent 70%), var(--bg);place-items:center;min-height:100vh;padding:24px 16px;display:grid}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);width:100%;max-width:440px;padding:28px}.login-brand{border-bottom:1px solid var(--border);align-items:center;gap:11px;margin-bottom:20px;padding-bottom:20px;display:flex}.login-note{border-top:1px solid var(--border);color:var(--text-faint);margin:20px 0 0;padding-top:16px;font-size:12px;line-height:1.6}.profile-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;display:grid}.profile-tile{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text);flex-direction:column;align-items:center;gap:5px;padding:18px 10px;transition:border-color .12s,transform .12s;display:flex}.profile-tile:hover{border-color:var(--accent);transform:translateY(-1px)}.profile-tile-add{color:var(--text-dim);background:0 0;border-style:dashed}.profile-avatar{font-size:26px;line-height:1}.profile-name{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:14px;font-weight:600;overflow:hidden}.field-label{text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);margin-bottom:6px;font-size:11.5px;font-weight:650;display:block}.field{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);width:100%;color:var(--text);font:inherit;padding:10px 12px;font-size:15px}.field:focus{border-color:var(--accent);outline:none}.field:disabled{opacity:.55}.field-error{color:var(--bad);margin-top:6px;font-size:12.5px}.avatar-row{flex-wrap:wrap;gap:6px;display:flex}.avatar-btn{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);place-items:center;width:38px;height:38px;font-size:19px;transition:border-color .12s;display:grid}.avatar-btn:hover{border-color:var(--accent)}.avatar-btn.on{border-color:var(--accent);background:var(--accent-soft)}.profile-chip{border-top:1px solid var(--border);align-items:center;gap:9px;margin-top:auto;padding:14px 10px 8px;display:flex}.pull-row{align-items:flex-start;gap:10px;padding:5px 0;font-size:14px;line-height:1.5;display:flex}.pull-label{text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;width:118px;padding-top:3px;font-size:11px;font-weight:700}.pull-label-bad{color:var(--bad)}.pull-label-good{color:var(--good)}@media (width<=560px){.pull-row{flex-direction:column;gap:2px}.pull-label{width:auto}}.ref-subject{margin-bottom:28px}.ref-subject-head{border-bottom:2px solid var(--border);margin-bottom:14px;padding-bottom:8px}.ref-topic{border-left:2px solid var(--border);margin-bottom:18px;padding-left:14px}.ref-topic h3{color:var(--accent);margin-bottom:10px;font-size:.98rem}.ref-topic-link{color:inherit}.print-only{display:none}@media print{.sidebar,.no-print,.app-footer,.modal-backdrop{display:none!important}.print-only,.app{display:block}.main{max-width:none;padding:0}body{color:#000;background:#fff;font-size:10.5pt}.print-head{border:1px solid #999;margin-bottom:12pt;padding:6pt 8pt;font-size:8.5pt}.ref-subject{break-inside:auto;margin-bottom:16pt}.ref-subject-head{break-after:avoid;border-bottom:1.5pt solid #000}.ref-topic{break-inside:avoid;border-left:1pt solid #bbb;margin-bottom:10pt}.ref-topic h3{color:#000;break-after:avoid}.formula,.callout{break-inside:avoid;border:1pt solid #bbb;border-left-width:3pt;margin-bottom:6pt;padding:5pt 7pt;background:0 0!important}.callout-title{color:#000!important}.chip{border:1pt solid #999;color:#000!important;background:0 0!important}a{color:#000;text-decoration:none}@page{margin:14mm}}@media (width<=900px){.app{grid-template-columns:minmax(0,1fr)}.sidebar{border-right:none;border-bottom:1px solid var(--border);flex-direction:row;align-items:center;min-width:0;height:auto;padding:10px 12px;position:static;overflow-x:auto}.brand,.nav-section{display:none}.nav-item{white-space:nowrap}.main{padding:20px 16px 56px}}.buddy{z-index:90;pointer-events:none;flex-direction:column;align-items:flex-end;gap:8px;display:flex;position:fixed;bottom:16px;right:18px}.buddy>*{pointer-events:auto}.main{padding-bottom:104px}:is(body:has(.quiz-shell) .buddy,body:has(.modal-backdrop) .buddy){display:none}.buddy-parrot{border:1px solid var(--border);background:var(--surface);width:64px;height:64px;box-shadow:var(--shadow);cursor:pointer;border-radius:50%;place-items:center;padding:0;animation:3.2s ease-in-out infinite buddy-bob;display:grid}.buddy-parrot:hover,.buddy-parrot:focus-visible{border-color:var(--accent)}.buddy-parrot.talking svg{animation:.6s ease-in-out 2 buddy-tilt}@keyframes buddy-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes buddy-tilt{0%,to{transform:rotate(0)}50%{transform:rotate(-8deg)}}@media (prefers-reduced-motion:reduce){.buddy-parrot,.buddy-parrot.talking svg{animation:none}}.buddy-bubble{background:var(--surface);border:1px solid var(--accent);border-radius:var(--radius);width:min(330px,100vw - 32px);box-shadow:var(--shadow);padding:14px 16px 12px;animation:.18s ease-out buddy-pop;position:relative}.buddy-bubble:after{content:"";background:var(--surface);border-right:1px solid var(--accent);border-bottom:1px solid var(--accent);width:12px;height:12px;position:absolute;bottom:-7px;right:26px;transform:rotate(45deg)}@keyframes buddy-pop{0%{opacity:0;transform:translateY(6px)scale(.97)}to{opacity:1;transform:none}}.buddy-name{color:var(--good);margin-bottom:4px;font-size:12px;font-weight:650}.buddy-text{margin:0 0 10px;padding-right:14px;font-size:14px;line-height:1.55}.buddy-go{margin-bottom:10px}.buddy-x{color:var(--text-faint);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:20px;line-height:1;position:absolute;top:6px;right:8px}.buddy-x:hover{color:var(--text)}.buddy-foot{justify-content:space-between;align-items:center;gap:8px;display:flex}.buddy-dots{gap:5px;display:flex}.buddy-dots span{background:var(--border);border-radius:50%;width:6px;height:6px}.buddy-dots span.on{background:var(--accent)}.buddy-quiet{border-top:1px solid var(--border);color:var(--text-faint);cursor:pointer;align-items:flex-start;gap:6px;margin-top:10px;padding-top:8px;font-size:12px;display:flex}@media (width<=560px){.buddy{bottom:12px;right:12px}.buddy-parrot{width:54px;height:54px}.buddy-parrot svg{width:46px;height:46px}}@media print{.buddy{display:none}}
