:root{--bg:#f5f2ed;--bg-soft:#ebe7e0;--surface:#fff;--surface-2:#faf8f4;--surface-muted:#faf8f4;--ink:#1a1816;--ink-soft:#4a4742;--muted:#847f78;--hairline:#e2dcd2;--hairline-2:#cfc8bc;--text:#1a1816;--text-muted:#847f78;--line:#e2dcd2;--line-strong:#cfc8bc;--accent:oklch(64% .16 35);--accent-soft:oklch(94% .04 35);--warn:oklch(70% .14 70);--good:oklch(60% .13 145);--streak-fg:oklch(58% .12 70);--streak-bg:oklch(96% .04 75);--streak-bd:oklch(86% .09 75);--paper-light:#fff;--paper-mid:#efe8da;--paper-deep:#c9bca4;--err-0:oklch(64% .16 35);--err-1:oklch(70% .14 70);--err-2:oklch(58% .13 250);--err-3:oklch(60% .13 145);--err-4:oklch(55% .13 310);--shadow-sm:0 1px 0 #14120f0a, 0 8px 24px -16px #14120f1f;--shadow-md:0 1px 0 #14120f0f, 0 18px 40px -22px #14120f2e;--radius:14px;--radius-sm:10px;--font-display:"Inter Tight", "Inter", system-ui, sans-serif;--font-ui:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--focus:#29252424;--danger:#b42318;--danger-soft:#fff1f1;font-family:var(--font-ui);color:var(--text)}[data-theme=dark]{--bg:#0f1012;--bg-soft:#15171a;--surface:#181a1d;--surface-2:#1d1f23;--surface-muted:#1d1f23;--ink:#f1ede5;--ink-soft:#c8c2b6;--muted:#8e8a82;--hairline:#2a2c30;--hairline-2:#3a3d42;--text:#f1ede5;--text-muted:#8e8a82;--line:#2a2c30;--line-strong:#3a3d42;--accent:oklch(72% .16 35);--accent-soft:oklch(28% .06 35);--warn:oklch(78% .14 70);--good:oklch(70% .13 145);--streak-fg:oklch(82% .13 75);--streak-bg:oklch(24% .05 75);--streak-bd:oklch(40% .08 75);--paper-light:#2c2922;--paper-mid:#423d31;--paper-deep:#5e5640;--err-0:oklch(72% .16 35);--err-1:oklch(78% .14 70);--err-2:oklch(70% .13 250);--err-3:oklch(72% .13 145);--err-4:oklch(67% .13 310);--shadow-sm:0 1px 0 #0006, 0 8px 24px -16px #0009;--shadow-md:0 1px 0 #00000080, 0 24px 60px -28px #000000d9;--focus:#ffffff24;--danger:#ff7a7a;--danger-soft:#341818}*{box-sizing:border-box}html,body,#root{background:var(--bg)}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:14.5px;line-height:1.45}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.01em}.mono{font-family:var(--font-mono);font-feature-settings:"tnum"}.app-shell{max-width:1240px;margin:0 auto;padding:28px 28px 60px}.topbar{border-bottom:1px solid var(--hairline);grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:24px;margin-bottom:22px;padding-bottom:22px;display:grid}.brand{align-items:flex-start;gap:14px;display:flex}.brand-mark{background:var(--surface);border:1px solid var(--hairline);border-radius:12px;flex:none;place-items:center;width:44px;height:44px;display:grid}.brand-mark .brand-ring{fill:var(--accent-soft);stroke:var(--accent);stroke-width:1.2px}.brand-mark .brand-curve{fill:none;stroke:var(--ink);stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round}.brand-mark .brand-dot{fill:var(--accent)}.brand h1{letter-spacing:-.025em;margin:2px 0 0;font-size:28px;font-weight:700;line-height:1}.topbar-subtitle{color:var(--muted);margin:8px 0 0;font-size:13.5px}.topbar-right,.topbar-meta{justify-items:end;gap:10px;display:grid}.topbar-chips{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.topbar-actions{align-items:center;gap:8px;display:inline-flex}.bookmark-topbar-button{border:1px solid var(--line);background:var(--surface);width:40px;height:40px;color:var(--text);cursor:pointer;border-radius:10px;justify-content:center;align-items:center;display:inline-flex;position:relative}.bookmark-topbar-button svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.bookmark-topbar-button:hover{border-color:var(--line-strong)}.bookmark-topbar-button.active{background:color-mix(in srgb, var(--surface) 72%, #fde68a 28%);border-color:#f59e0b}.bookmark-topbar-badge{color:#fff;text-align:center;background:#f59e0b;border-radius:999px;min-width:20px;height:20px;padding:0 5px;font-size:.68rem;font-weight:800;line-height:20px;position:absolute;top:-5px;right:-5px;box-shadow:0 4px 12px #0000002e}.stats{flex-wrap:wrap;justify-content:flex-end;gap:8px;font-weight:700;display:flex}.stats span{border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:7px 12px}.streak-badge{color:var(--streak-fg);border-color:var(--streak-bd);background:var(--streak-bg);font-weight:700}.streak-badge.streak-at-risk{animation:2s ease-in-out infinite streak-pulse}@keyframes streak-pulse{0%,to{opacity:1}50%{opacity:.7}}.chip{border:1px solid var(--hairline);background:var(--surface);color:var(--ink-soft);border-radius:999px;align-items:center;gap:6px;padding:5px 10px;font-size:12.5px;display:inline-flex}.chip strong{color:var(--ink);font-weight:600}.chip-streak{color:var(--streak-fg);border-color:var(--streak-bd);background:var(--streak-bg);font-weight:600}.chip-streak svg{color:var(--streak-fg)}.icon-btn{border:1px solid var(--hairline);background:var(--surface);width:36px;height:36px;color:var(--ink);cursor:pointer;border-radius:10px;place-items:center;transition:border-color .15s,background .15s;display:inline-grid;position:relative}.icon-btn:hover{border-color:var(--hairline-2);background:var(--surface-2)}.icon-btn .badge{background:var(--accent);color:#fff;font-family:var(--font-mono);border:2px solid var(--bg);border-radius:999px;place-items:center;min-width:18px;height:18px;padding:0 4px;font-size:10px;font-weight:700;display:grid;position:absolute;top:-5px;right:-5px}.seg{border:1px solid var(--hairline);background:var(--surface);border-radius:10px;padding:2px;display:inline-flex}.seg-btn{color:var(--muted);cursor:pointer;font-size:12.5px;font-weight:600;font-family:var(--font-ui);background:0 0;border:0;border-radius:7px;align-items:center;gap:6px;padding:5px 10px;display:inline-flex}.seg-btn.on{background:var(--ink);color:var(--bg)}.seg-btn:not(.on):hover{color:var(--ink)}.seg-label{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-size:10.5px;font-weight:700}.seg-group,.course-select{align-items:center;gap:8px;display:inline-flex}.course-select select{border:1px solid var(--hairline);background:var(--surface);height:36px;color:var(--ink);font:inherit;appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--ink-soft) 50%), linear-gradient(135deg, var(--ink-soft) 50%, transparent 50%);cursor:pointer;background-position:calc(100% - 14px),calc(100% - 9px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;border-radius:10px;padding:0 28px 0 10px}.auth-shell{place-items:center;min-height:100vh;padding:20px 12px;display:grid}.auth-card{width:min(460px,100%)}.auth-card h1{margin:0;font-size:clamp(2rem,6vw,2.8rem)}.auth-card h2{margin:14px 0 10px;font-size:1.2rem}.auth-form{gap:10px;display:grid}.google-auth{margin-top:14px}.google-placeholder{width:min(320px,100%)}.auth-divider{text-align:center;margin:12px 0;position:relative}.auth-divider:before{content:"";border-top:1px solid var(--line);position:absolute;top:50%;left:0;right:0}.auth-divider span{background:var(--surface);color:var(--text-muted);padding:0 10px;font-size:.86rem;position:relative}.auth-mode-text{color:var(--text-muted);margin:14px 0 0}.auth-resend-row{margin-top:10px}.mode-link{color:var(--text);cursor:pointer;background:0 0;border:0;padding:0;font-weight:700;text-decoration:underline}.theme-switcher{letter-spacing:.03em;text-transform:uppercase;color:var(--text-muted);align-items:center;gap:8px;font-size:.82rem;font-weight:700;display:inline-flex}.theme-switcher select{border-radius:8px;min-width:96px;padding:7px 10px}.topbar-signout{border:1px solid var(--hairline);background:var(--surface);color:var(--ink);cursor:pointer;height:36px;font-size:13px;font-weight:600;font-family:var(--font-ui);border-radius:10px;align-items:center;padding:7px 14px;transition:border-color .15s;display:inline-flex}.topbar-signout:hover{border-color:var(--hairline-2)}.panel{border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow-sm);border-radius:14px;margin-bottom:14px;padding:16px}.nav-strip{background:var(--surface-2);border:1px solid var(--hairline);border-radius:var(--radius);grid-auto-columns:1fr;grid-auto-flow:column;gap:8px;margin-bottom:22px;padding:8px;display:grid}.nav-tile{color:var(--ink);cursor:pointer;font-size:14px;font-weight:600;font-family:var(--font-ui);background:0 0;border:1px solid #0000;border-radius:10px;justify-content:center;align-items:center;gap:10px;padding:14px 12px;transition:all .15s;display:flex;position:relative}.nav-glyph{color:var(--muted);place-items:center;transition:color .15s;display:inline-grid}.nav-tile:hover{background:var(--surface);border-color:var(--hairline)}.nav-tile:hover .nav-glyph{color:var(--ink)}.nav-tile.active{background:var(--surface);border-color:var(--ink);box-shadow:var(--shadow-sm)}.nav-tile.active .nav-glyph{color:var(--accent)}.nav-dot{background:var(--accent);border-radius:1px;width:18px;height:2px;position:absolute;bottom:6px}:root[data-theme=dark] .token,:root[data-theme=dark] .option{background:#21262e;border-color:#47505f}:root[data-theme=dark] .token:hover,:root[data-theme=dark] .option:hover{border-color:#7f8da3}:root[data-theme=dark] .streak-badge{color:#fbbf24;background:#1c1209;border-color:#78350f}:root[data-theme=dark] .streak-badge.streak-at-risk{color:#f87171;background:#1c0a0a;border-color:#7f1d1d}:root[data-theme=dark] .token.selected,:root[data-theme=dark] .option.selected{color:#f4f8ff;background:#2f4057;border-color:#8ab4f8;box-shadow:inset 0 0 0 1px #8ab4f83d}:root[data-theme=dark] .token.next-hint{border-color:#8ab4f8;outline-color:#8ab4f859}:root[data-theme=dark] .option-key{color:#8a9ab5;background:#2a3141;border-color:#3a4455}:root[data-theme=dark] .feedback.success{color:#7ec87e;background:#1a2e1a;border-color:#3a6b3a}:root[data-theme=dark] .flashcard strong{color:var(--text)}:root[data-theme=dark] .option.correct-answer{color:#7ec87e;background:#1a2e1a;border-color:#4a9b4a}:root[data-theme=dark] .puzzle-slot{background:#21262e;border-color:#47505f}:root[data-theme=dark] .puzzle-slot.filled{background:#22c55e1f;border-color:#22c55ea6}:root[data-theme=dark] .puzzle-pool{background:linear-gradient(135deg,#f4f4f314,#0000 55%),#1a212a}:root[data-theme=dark] .option.matched{background:#1b222b;border-color:#64748b;box-shadow:inset 0 0 0 1px #94a3b82e}:root[data-theme=dark] .primary-button{color:#1f1f1f;background:linear-gradient(#f4f4f3 0%,#dad9d6 100%);box-shadow:0 8px 18px #00000059}:root[data-theme=dark] .primary-button:hover:not(:disabled){color:#111;background:linear-gradient(#fff 0%,#ecebe9 100%);box-shadow:0 11px 22px #0000006b}.category-list{gap:10px;display:grid}.category-row{gap:10px;padding:13px;display:grid}.category-row-main{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.category-row-progress{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;display:grid}.mini-meter{background:#dfddd9;border-radius:999px;height:8px;overflow:hidden}.mini-meter>div{background:linear-gradient(90deg,#57534e 0%,#292524 100%);height:100%}.category-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px;display:grid}.compact-grid{margin-top:12px}.category-card{border:1px solid var(--line);background:var(--surface);border-radius:12px;flex-direction:column;justify-content:space-between;gap:12px;padding:13px;display:flex}.category-card h3{margin:0 0 8px}.category-card p{color:var(--text-muted);margin:3px 0}.category-card.locked{background:var(--surface-muted);border-style:dashed}.lock-note{color:var(--text-muted);font-size:.9rem}.quick-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.quick-strip>div{border:1px solid var(--line);background:var(--surface);border-radius:11px;gap:4px;padding:11px;display:grid}.quick-strip span{color:var(--text-muted)}.settings-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;display:grid}label{color:var(--text);gap:6px;font-size:.93rem;font-weight:700;display:grid}.wide-label{grid-column:1/-1}.field-label{color:var(--text-muted,var(--text));margin-bottom:6px;font-size:.85rem;font-weight:600;display:block}.field-optional{opacity:.6;font-size:.8em;font-weight:400}.exercise-type-picker{flex-wrap:wrap;gap:6px;margin-bottom:6px;display:flex}.exercise-type-btn{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;border-radius:999px;padding:6px 14px;font-size:.85rem;transition:background .15s,border-color .15s,color .15s}.exercise-type-btn:hover{border-color:var(--accent);color:var(--accent)}.exercise-type-btn.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.contribute-mode-selector{gap:8px;margin-bottom:16px;display:flex}.contribute-mode-btn{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;border-radius:999px;padding:8px 20px;font-size:.9rem;transition:background .15s,border-color .15s,color .15s}.contribute-mode-btn:hover{border-color:var(--accent);color:var(--accent)}.contribute-mode-btn.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.contribute-submit-row{align-items:center;display:flex}.contribute-submit-row .primary-button{align-self:flex-start;width:auto}.toggle-label{grid-column:1/-1;align-items:center;gap:10px;display:flex}.toggle-label input{width:18px;height:18px}select,input,textarea,button{font:inherit}select,input,textarea{border:1px solid var(--line-strong);color:var(--text);background:var(--surface);border-radius:10px;padding:10px 11px;transition:border-color .2s,box-shadow .2s}select:focus,input:focus,textarea:focus{box-shadow:0 0 0 4px var(--focus);border-color:#292524;outline:none}textarea{resize:vertical;min-height:110px}.setup-preview{border:1px solid var(--line);background:var(--surface-muted);border-radius:12px;margin-top:12px;padding:12px}.setup-preview h3{margin:0 0 8px}.setup-preview p{color:var(--text-muted);margin:3px 0}.share-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.share-icon-button{justify-content:center;align-items:center;gap:8px;min-height:40px;padding:8px 12px;display:inline-flex}.share-icon-button svg{fill:currentColor;flex-shrink:0;width:18px;height:18px}.daily-panel,.hero-card,.quick-strip{background:var(--surface-muted)}.daily-headline{justify-content:space-between;align-items:center;gap:12px;display:flex}.daily-headline h2{margin:0;font-size:1.12rem}.daily-goal-bar{background:#dfddd9;border-radius:999px;height:10px;margin-top:12px;overflow:hidden}.daily-goal-bar>div{background:linear-gradient(90deg,#000 0%,#555 100%);height:100%}.status{border:1px solid var(--line);background:var(--surface-muted);border-radius:11px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:14px;padding:12px 14px;display:flex}.bookmarks-panel{margin-top:12px}.bookmarks-header{justify-content:space-between;align-items:flex-end;gap:10px;margin-bottom:12px;display:flex}.bookmarks-header h2{margin:4px 0 0}.bookmarks-header-right{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:inline-flex}.bookmarks-count{border:1px solid var(--line);color:var(--text-muted);border-radius:999px;padding:7px 12px;font-size:.86rem;font-weight:700}.bookmarks-speed{text-transform:none;letter-spacing:0}.bookmarks-speed select{min-width:86px}.bookmarks-list{gap:10px;display:grid}.bookmarks-item{border:1px solid var(--line);background:var(--surface-muted);border-radius:12px;padding:12px}.bookmarks-item-meta{color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;justify-content:space-between;gap:8px;font-size:.78rem;font-weight:700;display:flex}.bookmarks-prompt{margin:10px 0 0;font-weight:700}.bookmarks-answer{color:var(--text-muted);margin:8px 0 0}.bookmarks-answer-row{justify-content:space-between;align-items:flex-start;gap:10px;margin-top:8px;display:flex}.bookmarks-answer-row .bookmarks-answer{margin:0}.bookmarks-listen-button{flex-shrink:0}.bookmarks-item-actions{margin-top:10px}.app-footer{text-align:center;letter-spacing:.05em;text-transform:uppercase;color:var(--text-muted);margin:24px 0 8px;font-size:.75rem}.hero-card{grid-template-columns:1.25fr 1fr;align-items:center;gap:16px;display:grid}.eyebrow{text-transform:uppercase;letter-spacing:.1em;color:var(--text-muted);margin:0 0 8px;font-size:.72rem;font-weight:800}.hero-copy h2{margin:0;line-height:1.2}.hero-copy p{color:var(--text-muted);margin:10px 0}.hero-art{object-fit:contain;width:100%;max-height:260px;display:block}.hero-actions{flex-wrap:wrap;gap:9px;margin-top:10px;display:flex}.categories .subtitle,.settings-panel .subtitle,.stats-panel .subtitle{color:var(--text-muted);margin-top:2px}.section-heading{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;display:flex}.section-heading h2{margin:0}.category-totals{text-align:right;justify-items:end;gap:4px;display:grid}.category-totals span{color:var(--text-muted)}.learning-focus{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:12px;display:grid}.focus-card,.spotlight-card,.category-row{border:1px solid var(--line);background:var(--surface);border-radius:12px}.focus-card{background:radial-gradient(circle at top right, #57534e14, transparent 34%), var(--surface);align-content:start;gap:12px;padding:16px;display:grid}.focus-card h3,.spotlight-card h3,.category-row h3{margin:0 0 6px}.focus-card p,.spotlight-card p,.category-row p{color:var(--text-muted);margin:0}.focus-metrics,.spotlight-meta,.category-row-badges{flex-wrap:wrap;gap:8px;display:flex}.focus-metrics span,.spotlight-meta span,.category-row-badges span{border:1px solid var(--line);background:var(--surface-muted);color:var(--text);border-radius:999px;padding:6px 10px;font-size:.88rem}.focus-note{font-size:.95rem}.spotlight-grid{gap:10px;display:grid}.spotlight-card{gap:10px;padding:13px;display:grid}.spotlight-card.locked,.category-row.locked{background:var(--surface-muted);border-style:dashed}.learn{gap:22px;display:grid}.learn-hero{background:radial-gradient(circle at 92% 8%, var(--accent-soft), transparent 38%), var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow-md);grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);align-items:center;gap:36px;padding:26px 26px 22px;display:grid;position:relative;overflow:hidden}.learn-hero:before{content:"";background:repeating-linear-gradient(180deg, var(--hairline) 0 1px, transparent 1px 36px);opacity:.4;pointer-events:none;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#0000 0%,#000 30% 70%,#0000 100%);mask-image:linear-gradient(#0000 0%,#000 30% 70%,#0000 100%)}.learn-hero>*{position:relative}.learn-kicker{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:14px;font-size:11px;font-weight:700}.learn-kicker.accent{color:var(--accent)}.learn-hero-title{font-family:var(--font-display);letter-spacing:-.025em;color:var(--ink-soft);margin:0 0 14px;font-size:clamp(28px,3.5vw,46px);font-weight:500;line-height:1.06}.learn-hero-title .ink-bold{color:var(--ink);font-weight:700}.learn-hero-emph{color:var(--ink);font-style:italic;font-weight:600;display:inline-block;position:relative}.learn-hero-emph:after{content:"";background:var(--accent);opacity:.18;z-index:-1;border-radius:2px;height:8px;position:absolute;bottom:4px;left:-2px;right:-2px}.learn-hero-sub{color:var(--ink-soft);max-width:520px;margin:0 0 18px;font-size:15px}.learn-hero-actions{flex-wrap:wrap;gap:8px;margin-bottom:24px;display:flex}.learn-hero-meta{border-top:1px dashed var(--hairline);grid-template-columns:1.5fr 1fr .8fr;gap:18px;max-width:540px;padding-top:18px;display:grid}.learn-meta-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:8px;font-size:10.5px;font-weight:700;display:block}.learn-meta-bar-row{align-items:center;gap:10px;font-size:12.5px;display:flex}.learn-meta-bar{background:var(--hairline);border-radius:3px;flex:1;height:6px;overflow:hidden}.learn-meta-bar-fill{background:var(--ink);border-radius:3px;height:100%}.learn-meta-streak{color:var(--streak-fg);align-items:center;gap:6px;font-size:14px;font-weight:600;display:inline-flex}.learn-meta-xp{color:var(--good);font-size:14px;font-weight:600}.learn-hero-art{place-items:center;display:grid}.mascot{width:100%;max-width:360px;height:auto}.recommended-card{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow-sm);grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);align-items:center;gap:36px;padding:28px;display:grid;position:relative;overflow:hidden}.recommended-card:before{content:"";background:var(--accent);width:4px;position:absolute;top:0;bottom:0;left:0}.recommended-title{letter-spacing:-.02em;margin:0 0 8px;font-size:28px;font-weight:600}.recommended-desc{color:var(--ink-soft);margin:0 0 18px;font-size:15px}.recommended-stats{border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);grid-template-columns:repeat(4,auto);gap:28px;margin-bottom:22px;padding:14px 0;display:grid}.rec-stat-num{font-family:var(--font-display);letter-spacing:-.02em;font-size:22px;font-weight:600}.rec-stat-num small{color:var(--muted);font-size:13px;font-weight:500}.rec-stat-lbl{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:2px;font-size:10.5px;font-weight:700}.recommended-visual{justify-items:center;gap:12px;display:grid}.ring svg{display:block}.ring-num{fill:var(--ink);letter-spacing:-.02em;font-size:26px;font-weight:600;font-family:var(--font-mono)}.ring-pct{fill:var(--muted);font-size:14px}.ring-lbl{fill:var(--muted);text-transform:uppercase;letter-spacing:.12em;font-size:9.5px;font-family:var(--font-ui);font-weight:700}.cat-section{gap:14px;display:grid}.cat-section-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;display:flex}.cat-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;display:grid}.cat-card{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow-sm);grid-template-rows:auto auto 1fr auto auto;gap:10px;padding:18px;transition:transform .15s,border-color .15s;display:grid}.cat-card:hover{border-color:var(--hairline-2);transform:translateY(-2px)}.cat-card.cat-locked{opacity:.7}.cat-card-head{justify-content:space-between;align-items:center;display:flex}.cat-status{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);align-items:center;gap:4px;font-size:10.5px;font-weight:700;display:inline-flex}.cat-status.status-mastered{color:var(--good)}.cat-status.status-new{color:var(--accent)}.cat-status.status-in-progress{font-family:var(--font-mono);letter-spacing:0;text-transform:none}.cat-level-pill{font-size:11px;font-family:var(--font-mono);border:1px solid var(--hairline);background:var(--surface-2);color:var(--ink-soft);border-radius:4px;padding:2px 8px;font-weight:600}.cat-name{letter-spacing:-.01em;margin:0;font-size:17px;font-weight:600}.cat-desc{color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:13px;line-height:1.5;display:-webkit-box;overflow:hidden}.cat-progress-track{background:var(--hairline);border-radius:2px;height:4px;overflow:hidden}.cat-progress-fill{border-radius:2px;height:100%}.cat-progress-meta{justify-content:space-between;font-size:11.5px;display:flex}.cat-btn{width:100%}.cat-lock-notice{color:var(--muted);align-items:center;gap:6px;padding:6px 0;font-size:12px;display:inline-flex}.tone-high{background:var(--good)}.tone-mid{background:var(--ink)}.tone-low{background:var(--warn)}.tone-none{background:var(--accent)}.btn-primary-lg{background:var(--ink);color:var(--bg);border:1px solid var(--ink);cursor:pointer;height:44px;font-size:14px;font-weight:600;font-family:var(--font-ui);border-radius:10px;align-items:center;gap:6px;padding:0 18px;transition:background .15s;display:inline-flex}.btn-primary-lg:hover{background:var(--ink-soft);border-color:var(--ink-soft)}.btn-outline-lg{background:var(--surface);color:var(--ink);border:1px solid var(--hairline);cursor:pointer;height:44px;font-size:14px;font-weight:600;font-family:var(--font-ui);border-radius:10px;align-items:center;gap:6px;padding:0 18px;transition:border-color .15s;display:inline-flex}.btn-outline-lg:hover{border-color:var(--hairline-2)}.btn-ghost-lg{color:var(--ink);cursor:pointer;height:44px;font-size:14px;font-weight:600;font-family:var(--font-ui);background:0 0;border:1px solid #0000;border-radius:10px;align-items:center;gap:6px;padding:0 14px;transition:color .15s;display:inline-flex}.btn-ghost-lg:hover{color:var(--accent)}.btn-wide{justify-content:center;width:100%}.chart-title{text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);margin-bottom:14px;font-size:.8rem;font-weight:700}.chart-wrap{height:190px;position:relative}.stat-card{border:1px solid var(--line);background:var(--surface);border-radius:12px;padding:12px}.stat-card h3{color:var(--text-muted);margin:0 0 6px;font-size:.95rem}.stat-card strong{letter-spacing:-.02em;color:var(--text);font-size:1.72rem}.stat-meter{background:#dfddd9;border-radius:999px;height:8px;margin-top:7px;overflow:hidden}.stat-meter>div{background:linear-gradient(90deg,#57534e 0%,#292524 100%);height:100%}.stat-card p{color:var(--text-muted);margin:7px 0 0}.stats-chart-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:10px;display:grid}.stats-chart-wrap{border:1px solid var(--line);background:var(--surface);border-radius:12px;height:220px;padding:10px}:root[data-theme=dark] .stats-chart-wrap{background:#1f242d}.stats-bottom-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.mastery-list{gap:8px;display:grid}.mastery-row{grid-template-columns:130px minmax(0,1fr) 45px;align-items:center;gap:8px;display:grid}.mastery-label{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:.85rem;font-weight:700;overflow:hidden}.mastery-bar-wrap{background:#dfddd9;border-radius:999px;height:8px;overflow:hidden}.mastery-bar{background:linear-gradient(90deg,#57534e 0%,#292524 100%);border-radius:999px;height:100%}.mastery-pct{text-align:right;font-size:.8rem;font-weight:700}.weak-list{gap:8px;display:grid}.weak-row{border:1px solid var(--line);background:var(--surface-muted);border-radius:10px;justify-content:space-between;align-items:center;padding:8px 10px;font-size:.84rem;display:flex}.weak-row-left{font-weight:600}.weak-row-right{color:#b42318;font-size:.75rem;font-weight:700}:root[data-theme=dark] .weak-row-right{color:#f87171}.bottom-grid{grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;display:grid}.weekly-wrap{flex-direction:column;gap:10px;display:flex}.weekly-leading{color:var(--text-muted);font-size:.82rem}.weekly-leading strong{color:var(--text);letter-spacing:-.02em;font-size:1.6rem;font-weight:800;display:block}.weekly-bar-outer{background:#efefee;border-radius:99px;height:12px;overflow:hidden}:root[data-theme=dark] .weekly-bar-outer{background:#2c313a}.weekly-bar-inner{background:linear-gradient(90deg,#292524,#66635f);border-radius:99px;height:100%;transition:width .8s cubic-bezier(.4,0,.2,1)}:root[data-theme=dark] .weekly-bar-inner{background:linear-gradient(90deg,#93c5fd,#e2e8f0)}.weekly-meta{color:var(--text-muted);justify-content:space-between;font-size:.78rem;display:flex}.weekly-meta strong{color:var(--text)}.error-pill-list{flex-wrap:wrap;gap:7px;margin-top:10px;display:flex}.error-pill{background:var(--surface-muted);border:1px solid var(--line);border-radius:8px;align-items:center;gap:6px;padding:6px 10px;font-size:.78rem;display:flex}.error-pill-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.error-pill-label{color:var(--text);font-weight:600}.error-pill-count{color:var(--text-muted)}.lang-row{border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:10px 0;font-size:.82rem;display:flex}.lang-row:last-child{border-bottom:none}.lang-name{flex:1;font-weight:700}.lang-xp{color:#2563eb;font-weight:700}:root[data-theme=dark] .lang-xp{color:#93c5fd}.lang-streak{color:var(--text-muted)}.category-table-wrap{overflow-x:auto}.category-table{border-collapse:separate;border-spacing:0;border:1px solid var(--line);border-radius:12px;width:100%;min-width:520px;overflow:hidden}.category-table th,.category-table td{border-bottom:1px solid var(--line);text-align:left;padding:10px 12px}.category-table tr:last-child td{border-bottom:0}.category-table th{color:var(--text-muted);background:var(--surface-muted)}.primary-button,.ghost-button,.speak-button,.option,.token{transition:border-color .2s,background-color .2s,color .2s,box-shadow .2s,transform .2s}.primary-button,.ghost-button{cursor:pointer;border:1px solid #0000;border-radius:10px;padding:10px 16px;font-weight:700}.primary-button{color:#fff;background:linear-gradient(#57534e 0%,#44403c 100%);box-shadow:0 8px 18px #29252438}.primary-button:hover:not(:disabled){background:linear-gradient(#3b3734 0%,#292524 100%);transform:translateY(-1px);box-shadow:0 11px 22px #29252447}.primary-button:disabled{opacity:.52;cursor:not-allowed;box-shadow:none}.ghost-button{border-color:var(--line-strong);background:var(--surface);color:var(--text)}.ghost-button:hover:not(:disabled){color:#fff;background:#262e39;border-color:#646464}.ghost-button:disabled{opacity:.52;cursor:not-allowed}.ghost-button.recording-active{color:#c0392b;opacity:1;cursor:default;border-color:#c0392b;animation:1.2s ease-in-out infinite recording-pulse}@keyframes recording-pulse{0%,to{opacity:1}50%{opacity:.55}}.lesson-player{box-shadow:var(--shadow-md)}.lesson-player .lesson-header{align-items:center;gap:10px;margin-bottom:12px;display:flex}.challenge-badges{flex-wrap:wrap;gap:8px;margin-bottom:10px;font-weight:700;display:flex}.challenge-badges span{background:var(--surface-muted);border:1px solid var(--line);color:var(--text);border-radius:999px;padding:5px 10px}.session-xp-tally{font-variant-numeric:tabular-nums;margin-left:auto;color:#b45309!important;background:#fffbeb!important;border-color:#fcd34d!important}:root[data-theme=dark] .session-xp-tally{color:#fbbf24!important;background:#1c1209!important;border-color:#78350f!important}.speed-picker{background:var(--surface);border:1px solid var(--hairline);border-radius:6px;align-items:center;gap:2px;padding:2px;display:flex}.speed-btn{font-size:10px;font-family:var(--font-mono);color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 6px;font-weight:500;line-height:1.4;transition:background .1s,color .1s}.speed-btn:hover{background:var(--hairline);color:var(--ink)}.speed-btn.active,:root[data-theme=dark] .speed-btn.active{background:var(--ink);color:var(--bg)}.meter{background:#dfddd9;border-radius:999px;flex:1;height:10px;overflow:hidden}.meter>div{background:linear-gradient(90deg,#000 0%,#555 100%);height:100%}.question-body{animation:.18s ease-out question-enter}@keyframes question-enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.options{gap:8px;margin:12px 0;display:grid}.option-row{grid-template-columns:1fr auto;align-items:stretch;gap:8px;display:grid}.option{border:1px solid var(--line-strong);text-align:left;background:var(--surface);color:var(--text);cursor:pointer;border-radius:10px;padding:12px}.option:hover{border-color:#292524}.option.selected{background:var(--surface-muted);border-color:#292524}.option.matched{background:var(--surface-muted);border-color:#9ca3af;box-shadow:inset 0 0 0 1px #2925240f}.option:disabled{opacity:.62;cursor:not-allowed}.speak-button{border:1px solid var(--line-strong);background:var(--surface);cursor:pointer;color:var(--text);border-radius:10px;padding:0 12px;font-weight:700}.speak-button:hover:not(:disabled){color:#fff;background:#262e39;border-color:#646464}.speak-button:disabled{opacity:.52;cursor:not-allowed}.speech-error{color:var(--danger);margin:6px 0 0;font-size:.9rem}.hint-chip,.cultural-note{background:var(--surface-muted);border:1px solid var(--line);color:var(--text-muted);border-radius:999px;align-items:center;padding:6px 10px;font-size:.88rem;display:inline-flex}.exercise-image{border:1px solid var(--line);background:var(--surface-muted);border-radius:14px;width:min(100%,320px);margin:8px 0 10px}.flashcard-shell,.pronunciation-shell,.matching-grid{margin:12px 0}.pronunciation-target{border:1px solid var(--line);background:var(--surface-muted);border-radius:12px;margin:6px 0 10px;padding:10px 12px;font-weight:600}.flashcard{border:1px solid var(--line-strong);background:linear-gradient(135deg, #57534e14, transparent 50%), var(--surface-muted);text-align:left;cursor:pointer;border-radius:18px;gap:10px;width:min(100%,420px);min-height:170px;padding:18px;display:grid}.flashcard strong{font-size:1.4rem}.flashcard span{color:var(--text-muted)}.flashcard-listen-row{justify-content:center;margin-top:10px;display:flex}.matching-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.matching-shell{margin:12px 0}.matching-instructions{color:var(--text-muted);margin:0 0 6px}.matching-hint{margin:0 0 10px;font-weight:600}.matching-puzzle{gap:12px;display:grid}.puzzle-board{gap:10px;display:grid}.puzzle-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:stretch;gap:12px;display:grid}.puzzle-piece{border:1px solid var(--line-strong);background:var(--surface);color:var(--text);-webkit-user-select:none;user-select:none;border-radius:14px;padding:12px;font-weight:650}.puzzle-prompt{cursor:default}.puzzle-answer{cursor:grab}.puzzle-answer:active{cursor:grabbing;transform:scale(.99)}.practice-words .practice-word{cursor:pointer}.practice-words .practice-word.filled{color:#2c5f2d;background:#f0f9f0;border-color:#9bcf9d}.practice-words .practice-word.selected{border-color:#94b9ff;box-shadow:0 0 0 2px #78a0ff33}.practice-words-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:10px;display:grid}.practice-words-column{gap:10px;display:grid}.practice-word-match{color:#2c5f2d;margin-left:auto;font-weight:800}.puzzle-slot{border:2px dashed var(--line-strong);background:var(--surface-muted);border-radius:14px;justify-content:space-between;align-items:center;gap:10px;min-height:54px;padding:10px;display:flex}.puzzle-slot.filled{background:#f0f9f0;border-style:solid;border-color:#9bcf9d}.puzzle-placeholder{color:var(--text-muted);font-weight:600}.puzzle-clear{border-radius:12px;padding:8px 10px}.puzzle-pool{border:1px solid var(--line-strong);background:linear-gradient(135deg, #57534e14, transparent 55%), var(--surface-muted);border-radius:16px;flex-wrap:wrap;align-content:flex-start;gap:10px;min-height:72px;padding:12px;display:flex}.puzzle-pool-empty{color:var(--text-muted);font-weight:650}@media (width<=700px){.puzzle-row{grid-template-columns:1fr}}.matching-column{gap:8px;display:grid}.build-hints{flex-wrap:wrap;gap:8px;margin:10px 0 6px;display:flex}.source-text-hints{flex-wrap:wrap;gap:4px 6px;margin:4px 0;font-size:1.15rem;font-weight:600;line-height:1.8;display:flex}.source-text-hint-label{color:var(--text-muted);margin-bottom:12px;font-size:.78rem;font-style:italic;display:block}.hover-word{border-radius:4px;padding:1px 3px;transition:background .15s;position:relative}.hover-word--has-hint{cursor:help}.hover-word--has-hint.hover-word--grammar-hint{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-color:var(--text-muted);text-decoration-color:var(--text-muted);text-underline-offset:4px}.hover-word--has-hint.hover-word--glossary-hint{text-decoration:underline;-webkit-text-decoration-color:var(--accent,#7c6af5);text-decoration-color:var(--accent,#7c6af5);text-underline-offset:4px}.hover-word--has-hint:hover{background:var(--surface-muted)}.hover-word-tip{white-space:normal;text-align:center;pointer-events:none;z-index:20;width:max-content;max-width:260px;box-shadow:var(--shadow-md);border-radius:6px;padding:5px 11px;font-size:.82rem;font-weight:500;animation:.12s tooltip-in;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)}.hover-word-tip--grammar{background:var(--ink);color:var(--surface)}.hover-word-tip--glossary{background:var(--accent,#7c6af5);color:#fff}.hover-word-tip:after{content:"";border:5px solid #0000;position:absolute;top:100%;left:50%;transform:translate(-50%)}.hover-word-tip--grammar:after{border-top-color:var(--ink)}.hover-word-tip--glossary:after{border-top-color:var(--accent,#7c6af5)}@keyframes tooltip-in{0%{opacity:0;transform:translate(-50%)translateY(3px)}to{opacity:1;transform:translate(-50%)translateY(0)}}.cloze-translation{color:var(--text-muted);margin:4px 0 8px;font-size:.92rem;font-style:italic}.cloze-prompt{color:var(--text-primary);margin:6px 0 10px;font-size:1rem;line-height:1.5}.cloze-prompt .source-text-hints{margin:0;font-size:1rem;font-weight:400;line-height:1.5}.build-target{border:1px dashed var(--line-strong);background:var(--surface-muted);border-radius:10px;min-height:56px;margin:10px 0;padding:10px;font-weight:600}.built-words{flex-wrap:wrap;gap:8px;display:flex}.built-word-chip{border:1px solid var(--line-strong);background:var(--surface);cursor:grab;-webkit-user-select:none;user-select:none;border-radius:999px;align-items:center;padding:8px 12px;display:inline-flex}.built-word-chip:hover{background:var(--surface-muted);border-color:#5a616b}.built-word-chip:active{cursor:grabbing;transform:scale(.99)}.built-word-chip[draggable=true]{touch-action:none}.tokens{flex-wrap:wrap;gap:8px;margin:10px 0 14px;display:flex}.token{border:1px solid var(--line-strong);background:var(--surface);color:var(--text);cursor:pointer;border-radius:999px;padding:8px 11px}.token:hover{border-color:#292524}.token.selected{background:var(--surface-muted);border-color:#292524}.token.next-hint{outline-offset:1px;border-color:#4f91d6;outline:2px solid #4f91d666;animation:1.2s ease-in-out infinite pulse-hint}@keyframes pulse-hint{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}.option-key{border:1px solid var(--line-strong);background:var(--surface-muted);width:20px;height:20px;color:var(--text-muted);vertical-align:middle;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;margin-right:8px;font-size:.72rem;font-weight:700;line-height:1;display:inline-flex}.option.selected .option-key{border-color:#292524}.feedback{background:var(--danger-soft);color:var(--danger);border:1px solid #efc4c4;border-radius:10px;gap:4px;margin:8px 0 12px;padding:10px 12px;display:grid}.feedback.success{color:#225526;background:#f0f9f0;border-color:#8fc58f}.bookmark-btn{color:var(--text-muted,#888);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;margin-left:2px;padding:3px 5px;transition:color .15s,background .15s;display:inline-flex}.bookmark-btn:hover{color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, transparent)}.bookmark-btn.bookmarked{color:#b45309;background:#fffbeb;border-color:#fcd34d}:root[data-theme=dark] .bookmark-btn.bookmarked{color:#fbbf24;background:#1c1209;border-color:#78350f}.feedback span{font-size:.92rem}.expected-option{margin-top:6px;font-size:.92rem}.option.correct-answer{color:#225526;background:#f0f9f0;border-color:#8fc58f;margin-top:6px}.expected-words{flex-wrap:wrap;gap:6px;margin-top:6px;display:flex}.expected-word{border:1px solid var(--line-strong);background:var(--surface-muted);border-radius:999px;padding:5px 9px;font-size:.88rem}.expected-word.matched{color:#225526;background:#f0f9f0;border-color:#9bcf9d}.expected-word.missing{color:#8f2d2d;background:#fff4f4;border-color:#f1c2c2}:root[data-theme=dark] .expected-word{color:#e6ebf3;background:#2a313c;border-color:#5a667b}:root[data-theme=dark] .expected-word.matched{color:#d7f8e4;background:#173a2a;border-color:#6ecf96}:root[data-theme=dark] .expected-word.missing{color:#ffd8d8;background:#472426;border-color:#e08f8f}@media (width<=860px){.hero-card{grid-template-columns:1fr}.hero-art{max-height:220px}.learning-focus{grid-template-columns:1fr}}@media (width<=720px){.app-shell{padding:18px 12px 28px}.topbar{flex-direction:column}.topbar-meta{justify-items:start;width:100%}.stats{justify-content:flex-start}.nav-strip{grid-template-columns:repeat(3,1fr);grid-auto-flow:row}.quick-strip,.option-row,.matching-grid,.stats-chart-grid,.stats-bottom-grid,.charts-grid,.kpi-row,.bottom-grid{grid-template-columns:1fr}.bookmarks-answer-row{flex-direction:column;align-items:stretch}.bookmarks-listen-button{align-self:flex-start}.bookmarks-header-right{justify-content:flex-start}.section-heading,.category-row-main{flex-direction:column}.category-totals{text-align:left;justify-items:start}}.speed-match{flex-direction:column;gap:16px;display:flex}.speed-match-header{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.speed-match-status{text-align:center;color:var(--text-muted);flex-direction:column;align-items:center;gap:12px;padding:24px 0;display:flex}.speed-match-intro{text-align:center;flex-direction:column;align-items:center;gap:12px;max-width:460px;margin:0 auto;display:flex}.speed-match-best{color:var(--text-muted)}.speed-match-newbest{color:var(--accent,#2f9e44);font-size:1.1rem;font-weight:700}.speed-match-final{font-size:1.05rem}.speed-match-actions{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.speed-match-stats{font-variant-numeric:tabular-nums;justify-content:space-between;gap:12px;font-weight:600;display:flex}.speed-match-timer{align-items:center;gap:12px;display:flex}.speed-match-meter{height:14px}.speed-match-meter>div{transition:width 1s linear}.speed-match-seconds{font-variant-numeric:tabular-nums;text-align:right;min-width:64px;font-weight:600}.speed-match-board{grid-template-columns:1fr 1fr;gap:12px;display:grid}.speed-match-column{flex-direction:column;gap:10px;display:flex}.speed-match-card{border:1px solid var(--line);background:var(--surface);color:var(--text);cursor:pointer;border-radius:12px;padding:14px 12px;font-size:1rem;font-weight:600;transition:transform 80ms,border-color .12s,background .12s,opacity .2s}.speed-match-card:hover:not(:disabled){border-color:var(--text)}.speed-match-card.selected{border-color:var(--text);background:var(--surface-muted);transform:scale(1.02)}.speed-match-card.matched{opacity:0;pointer-events:none;visibility:hidden}.speed-match-card.wrong{border-color:#e03131;animation:.35s speed-match-shake}@keyframes speed-match-shake{0%,to{transform:translate(0)}25%{transform:translate(-6px)}75%{transform:translate(6px)}}.speed-match-break{text-align:center;color:var(--text-muted);flex-direction:column;align-items:center;gap:8px;padding:32px 0;display:flex}.speed-match-break-count{color:var(--text);margin:0;font-size:3rem;font-weight:800}.sr{--sr-serif:"Iowan Old Style", Georgia, "Times New Roman", serif;--sr-amber:var(--streak-fg);--sr-calm:var(--accent);max-width:720px;margin:0 auto;padding-bottom:75px}.sr-topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.sr-levels{background:var(--surface);border:1px solid var(--line);border-radius:999px;gap:4px;padding:3px;display:flex}.sr-level{appearance:none;cursor:pointer;font:inherit;letter-spacing:.04em;color:var(--ink-soft);background:0 0;border:0;border-radius:999px;padding:5px 12px;font-size:12.5px;font-weight:600;transition:color .15s,background .15s}.sr-level[aria-pressed=true]{background:var(--surface-2);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}.sr-level:disabled{opacity:.4;cursor:default}.sr-library{flex-wrap:wrap;gap:8px;margin:0 0 18px;padding:0;list-style:none;display:flex}.sr-lib-item{appearance:none;cursor:pointer;font:inherit;text-align:left;background:var(--surface);border:1px solid var(--line);min-width:150px;color:var(--ink);border-radius:12px;flex-direction:column;gap:2px;padding:8px 12px;transition:border-color .15s,background .15s;display:flex}.sr-lib-item:hover{border-color:var(--accent)}.sr-lib-item.active{background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--accent)}.sr-lib-title{font-size:14px;font-weight:600}.sr-lib-sub{color:var(--muted);font-size:12.5px}.sr-lib-check{color:var(--accent);align-self:flex-start;place-items:center;display:inline-grid}.sr-lib-item.done .sr-lib-title{color:var(--ink-soft)}.sr-head{border-bottom:1px solid var(--line);margin-bottom:24px;padding:8px 0 18px}.sr-eyebrow{letter-spacing:.16em;text-transform:uppercase;color:var(--accent);align-items:center;gap:10px;margin:0 0 10px;font-size:12px;font-weight:600;display:flex}.sr-eyebrow .sr-dot{background:var(--muted);border-radius:50%;width:4px;height:4px}.sr-title{font-family:var(--sr-serif);margin:0 0 6px;font-size:33px;font-weight:600;line-height:1.12}.sr-subtitle{font-family:var(--sr-serif);color:var(--ink-soft);margin:0;font-size:17px;font-style:italic}.sr-story{font-family:var(--sr-serif);font-size:21px;line-height:1.9}.sr-sent{margin:0 0 8px;padding-right:32px;position:relative}.sr-sent.sr-break{margin-top:22px}.sr-sent-en{font-family:var(--font-ui);color:var(--muted);margin-top:2px;font-size:14.5px;line-height:1.5;display:block}.sr-spk{opacity:0;appearance:none;cursor:pointer;color:var(--muted);background:0 0;border:0;border-radius:6px;place-items:center;width:26px;height:26px;transition:opacity .15s,color .15s;display:grid;position:absolute;top:6px;right:0}.sr-sent:hover .sr-spk,.sr-sent:focus-within .sr-spk{opacity:1}.sr-spk:hover{color:var(--sr-calm)}.sr-spk:disabled{opacity:0}.sr-word{appearance:none;cursor:pointer;font:inherit;color:inherit;line-height:inherit;background:0 0;border:0;border-radius:3px;padding:0;transition:background .15s,box-shadow .15s,color .15s}.sr-word.gloss{box-shadow:inset 0 -1.5px 0 0 color-mix(in srgb, var(--sr-calm) 55%, transparent)}.sr-word.grammar{border-bottom:1.5px dotted var(--sr-amber)}.sr-word:hover{background:color-mix(in srgb, var(--sr-calm) 16%, transparent)}.sr-word.saved{color:var(--sr-amber);box-shadow:inset 0 -1.5px 0 0 var(--sr-amber)}.sr-word.active{background:color-mix(in srgb, var(--sr-amber) 22%, transparent);box-shadow:inset 0 -1.5px 0 0 var(--sr-amber)}.sr-note{border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);margin:28px 0 8px;padding:18px 20px;position:relative;overflow:hidden}.sr-note:before{content:"";background:var(--accent);width:3px;position:absolute;top:0;bottom:0;left:0}.sr-note-label{letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:8px;font-size:11.5px;font-weight:600}.sr-note-term{font-family:var(--sr-serif);margin:0 0 4px;font-size:18px;font-weight:600}.sr-note-body{color:var(--ink-soft);margin:0;font-size:14.5px;line-height:1.6}.sr-text-btn{appearance:none;cursor:pointer;font-family:var(--font-ui);color:var(--ink-soft);background:0 0;border:0;border-bottom:1px solid #0000;align-items:center;gap:7px;padding:6px 2px;font-size:13.5px;font-weight:500;transition:color .15s,border-color .15s;display:flex}.sr-text-btn:hover{color:var(--ink)}.sr-text-btn[aria-pressed=true]{color:var(--sr-calm);border-color:color-mix(in srgb, var(--sr-calm) 50%, transparent)}.sr-drawer-wrap{z-index:40;pointer-events:none;justify-content:center;display:flex;position:fixed;bottom:0;left:0;right:0}.sr-drawer{pointer-events:auto;background:var(--surface);border:1px solid var(--line);width:100%;max-width:720px;box-shadow:var(--shadow-md);border-radius:18px;margin:0 16px 16px;padding:18px 20px 16px;transition:transform .26s cubic-bezier(.22,1,.36,1);transform:translateY(140%)}.sr-drawer.open{transform:translateY(0)}.sr-drawer-top{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.sr-drawer-word{font-family:var(--sr-serif);align-items:center;gap:12px;font-size:27px;font-weight:600;line-height:1.1;display:flex}.sr-drawer-gloss{color:var(--ink);margin:10px 0 2px;font-size:17px;font-weight:500}.sr-drawer-pos{color:var(--muted);font-size:13px}.sr-drawer-grammar{border-radius:var(--radius-sm);background:var(--surface-2);color:var(--ink-soft);border-left:2px solid var(--sr-amber);margin-top:12px;padding:10px 12px;font-size:13.5px;line-height:1.5}.sr-drawer-actions{gap:10px;margin-top:16px;display:flex}.sr-icon-btn{appearance:none;cursor:pointer;border:1px solid var(--line);background:var(--surface);width:34px;height:34px;color:var(--ink-soft);border-radius:999px;place-items:center;transition:color .15s,border-color .15s;display:grid}.sr-icon-btn:hover{color:var(--ink);border-color:var(--muted)}.sr-icon-btn:disabled{opacity:.4;cursor:default}.sr-action{appearance:none;cursor:pointer;font-family:var(--font-ui);border-radius:var(--radius-sm);border:1px solid var(--line);color:var(--ink);background:0 0;align-items:center;gap:8px;padding:10px 16px;font-size:13.5px;font-weight:600;transition:background .15s,border-color .15s,color .15s;display:flex}.sr-action.primary{background:var(--accent);border-color:var(--accent);color:#fff}.sr-action.saved{border-color:var(--sr-amber);color:var(--sr-amber);background:0 0}.sr-footer{z-index:30;border-top:1px solid var(--line);background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);position:fixed;bottom:0;left:0;right:0}.sr-footer-inner{justify-content:space-between;align-items:center;gap:16px;max-width:720px;margin:0 auto;padding:12px 20px;display:flex}.sr-footer-controls{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.sr-counts{color:var(--ink-soft);align-items:center;gap:18px;font-size:13px;display:flex}@media (width<=560px){.sr-counts{display:none}}.sr-counts b{color:var(--ink);font-weight:600}.sr-counts .sr-glow b{color:var(--sr-amber)}.sr-finish{appearance:none;cursor:pointer;font-family:var(--font-ui);border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface);color:var(--ink);align-items:center;gap:8px;padding:10px 18px;font-size:13.5px;font-weight:600;transition:border-color .15s;display:flex}.sr-finish:hover{border-color:var(--sr-calm)}.sr-modal-scrim{z-index:50;background:#08090d8c;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.sr-modal{background:var(--surface);border:1px solid var(--line);width:100%;max-width:440px;box-shadow:var(--shadow-md);border-radius:20px;padding:28px 26px 24px}.sr-modal-spark{background:var(--accent-soft);width:46px;height:46px;color:var(--accent);border-radius:13px;place-items:center;margin-bottom:16px;display:grid}.sr-modal h3{font-family:var(--sr-serif);margin:0 0 6px;font-size:24px;font-weight:600}.sr-modal p{color:var(--ink-soft);margin:0 0 18px;font-size:14.5px;line-height:1.55}.sr-chiprow{flex-wrap:wrap;gap:8px;margin-bottom:22px;display:flex}.sr-chip{font-family:var(--sr-serif);background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:5px 12px;font-size:15px}.sr-chip.none{color:var(--muted);font-family:var(--font-ui);font-size:13.5px}.sr-modal-actions{gap:10px;display:flex}.sr-empty{color:var(--ink-soft);padding:40px 0}.sr-modal-score{font-family:var(--font-ui);color:var(--ink-soft);margin:0 0 6px;font-size:14px}.sr-modal-score b{color:var(--ink);font-weight:700}.sr-modal-xp{color:var(--accent);background:var(--accent-soft);border-radius:999px;align-items:center;gap:6px;margin:0 0 14px;padding:5px 12px;font-size:14px;font-weight:700;display:inline-flex}.sr-modal-xp.muted{color:var(--muted);background:var(--surface-2);font-weight:600}.sr-sent.playing{background:var(--accent-soft);box-shadow:-10px 0 0 var(--accent-soft), 10px 0 0 var(--accent-soft);border-radius:4px;transition:background .2s}.sr-lib-tags{align-items:center;gap:6px;display:inline-flex}.sr-lib-tag{letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:var(--accent-soft);border-radius:999px;padding:2px 7px;font-size:10.5px;font-weight:700}.sr-lib-progress{background:var(--line);border-radius:999px;height:3px;margin-top:8px;display:block;overflow:hidden}.sr-lib-progress>span{background:var(--sr-amber);border-radius:999px;height:100%;display:block}.sr-quiz{max-width:640px;margin:8px auto 96px}.sr-quiz-title{font-family:var(--sr-serif);margin:0 0 4px;font-size:24px;font-weight:600}.sr-quiz-sub{color:var(--ink-soft);margin:0 0 22px;font-size:14px}.sr-quiz-q{margin-bottom:24px}.sr-quiz-stem{margin:0 0 12px;font-size:16px;font-weight:600}.sr-quiz-stem.target{font-family:var(--sr-serif);font-weight:500}.sr-quiz-options{gap:10px;display:grid}.sr-quiz-option{appearance:none;cursor:pointer;text-align:left;font-family:var(--font-ui);border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface);color:var(--ink);padding:12px 16px;font-size:14.5px;transition:border-color .15s,background .15s}.sr-quiz-option.target{font-family:var(--sr-serif)}.sr-quiz-option:hover:not(:disabled){border-color:var(--sr-calm)}.sr-quiz-option.selected{border-color:var(--accent);background:var(--accent-soft)}.sr-quiz-option.correct{border-color:var(--good);background:color-mix(in srgb, var(--good) 14%, transparent)}.sr-quiz-option.wrong{border-color:var(--warn);background:color-mix(in srgb, var(--warn) 14%, transparent)}.sr-quiz-option:disabled{cursor:default}.sr-quiz-explain{color:var(--ink-soft);border-left:2px solid var(--sr-amber);background:var(--surface-2);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin:10px 0 0;padding:10px 14px;font-size:13.5px}.reading-stats-grid{grid-template-columns:repeat(4,1fr);gap:14px;display:grid}.reading-stat{flex-direction:column;gap:2px;display:flex}.reading-stat-num{font-size:26px;font-weight:700;line-height:1.1}.reading-stat-label{color:var(--muted);font-size:12px}.reading-tags{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.reading-tag{background:var(--surface-2);border:1px solid var(--line);color:var(--ink-soft);border-radius:999px;padding:4px 10px;font-size:12px}.reading-tag.level{color:var(--accent);background:var(--accent-soft);border-color:#0000;font-weight:700}.reading-rec-card{border:1px solid var(--line);background:var(--surface);border-radius:18px;margin-bottom:22px;padding:22px 24px}.reading-rec-meta{align-items:center;gap:12px;margin:14px 0 18px;display:flex}.reading-rec-count{color:var(--muted);font-size:13px}@media (width<=560px){.sr-title{font-size:27px}.sr-story{font-size:19px;line-height:1.85}.reading-stats-grid{grid-template-columns:repeat(2,1fr)}}@media (prefers-reduced-motion:reduce){.sr-drawer,.sr-sent.playing{transition:none}}.admin-tabs{gap:4px;margin-bottom:16px;display:flex}.admin-tab-btn{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;opacity:.65;border-bottom:none;border-radius:6px 6px 0 0;padding:8px 20px;font-size:.9rem}.admin-tab-btn.active{background:var(--bg,#fff);opacity:1;border-bottom:2px solid var(--accent);font-weight:600}.contribution-list{gap:12px;display:grid}.contribution-card{gap:10px;display:grid}.contribution-type-badge{letter-spacing:.02em;border-radius:999px;flex-shrink:0;padding:2px 8px;font-size:.75rem;font-weight:600;display:inline-block}.contribution-type-badge.type-idea{color:#1a56a8;background:#e8f0fe}.contribution-type-badge.type-exercise{color:#1d6d35;background:#e6f4ea}[data-theme=dark] .contribution-type-badge.type-idea{color:#7eb4f5;background:#1a2d4a}[data-theme=dark] .contribution-type-badge.type-exercise{color:#5db87a;background:#162a1e}.contribution-status{text-transform:capitalize;background:var(--surface);border-radius:999px;padding:6px 10px;font-size:.82rem}.contribution-status.status-pending{color:#8a5a00}.contribution-status.status-approved{color:#1d6d35}.contribution-status.status-rejected{color:#9a3030}.contribution-status.status-changes_requested{color:#5a3d8a}.reviewer-feedback{background:var(--surface);border-left:3px solid var(--accent);border-radius:4px;padding:8px 12px;font-size:.9rem}.reviewer-comment-form{gap:10px;display:grid}.reviewer-comment-form textarea{box-sizing:border-box;border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);resize:vertical;border-radius:6px;padding:8px;font-size:.9rem}.batch-toolbar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:8px;padding:10px 0;display:flex}.batch-select-all{cursor:pointer;align-items:center;gap:6px;font-size:.9rem;display:flex}.batch-actions{flex-wrap:wrap;flex:1;align-items:center;gap:8px;display:flex}.batch-comment-input{border:1px solid var(--border);background:var(--surface);min-width:180px;color:var(--text);border-radius:6px;flex:1;padding:6px 10px;font-size:.9rem}.word-cache-panel{max-width:640px}.word-cache-panel ul{margin:8px 0 16px;padding-left:20px;line-height:1.8}.rebuild-confirm{border:1px solid var(--border);background:var(--surface);border-radius:8px;max-width:480px;padding:16px}.rebuild-confirm p{margin:0 0 12px}.rebuild-confirm-actions{gap:10px;display:flex}.rebuild-success{color:#1d6d35;margin:12px 0;font-weight:600}.rebuild-error{color:#9a3030;margin:12px 0;font-weight:600}[data-theme=dark] .rebuild-success{color:#5db87a}[data-theme=dark] .rebuild-error{color:#e08080}.stats-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin-bottom:12px;display:grid}.stats-root{color:var(--text);background:0 0;padding-bottom:8px}.stats-header{border-bottom:1px solid var(--line);margin-bottom:20px;padding:0 0 20px}.stats-header h2{letter-spacing:-.02em;margin:0;font-size:1.35rem;font-weight:800}.stats-header p{color:var(--text-muted);margin-top:3px;font-size:.85rem}.kpi-row{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:16px;display:grid}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:14px 16px;box-shadow:0 6px 16px #1414140d}.kpi-label{text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);margin-bottom:6px;font-size:.72rem;font-weight:700}.kpi-value{letter-spacing:-.03em;font-size:1.9rem;font-weight:800;line-height:1}.kpi-value.green{color:#16a34a}.kpi-value.blue{color:#2563eb}.kpi-value.amber{color:#d97706}:root[data-theme=dark] .kpi-value.green{color:#4ade80}:root[data-theme=dark] .kpi-value.blue{color:#93c5fd}:root[data-theme=dark] .kpi-value.amber{color:#fbbf24}.kpi-sub{color:var(--text-muted);margin-top:4px;font-size:.75rem}.charts-grid{grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;display:grid}.chart-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px;box-shadow:0 6px 16px #1414140d}:root[data-theme=dark] .chart-card{background:#1f242d}.chart-card-spacing{margin-bottom:12px}.stats-redesign{gap:22px;display:grid}.stats-hero{border-bottom:1px solid var(--hairline);grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);align-items:start;gap:36px;padding:8px 4px 22px;display:grid}.stats-hero-title{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink-soft);margin:0;font-size:clamp(26px,3vw,42px);font-weight:500;line-height:1.1}.stats-hero-title .ink{color:var(--ink);font-weight:600}.num-display{font-family:var(--font-mono);color:var(--ink);letter-spacing:-.01em;margin-left:6px;margin-right:6px;font-weight:600;display:inline-block}.stats-hero-sub{color:var(--muted);margin:16px 0 0;font-size:13.5px}.activity-grid-wrap{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm);gap:10px;padding:16px;display:grid}.activity-head{color:var(--muted);font-size:11.5px}.activity-outer{flex-direction:column;gap:2px;width:fit-content;margin-left:auto;display:flex}.activity-month-row{align-items:end;gap:2px;height:16px;margin-bottom:2px;display:flex}.activity-dow-spacer{flex-shrink:0;width:28px}.activity-month-cell{width:13px;color:var(--muted);white-space:nowrap;letter-spacing:.02em;flex-shrink:0;font-size:9px;font-weight:700;overflow:visible}.activity-day-row{align-items:center;gap:2px;display:flex}.activity-dow-label{width:28px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;text-align:right;flex-shrink:0;padding-right:5px;font-size:9px;font-weight:700}.act-cell{background:var(--hairline);cursor:default;will-change:transform;border-radius:2px;flex-shrink:0;width:13px;height:13px;transition:transform .12s;display:block}.act-cell:hover{transform:scale(1.45)}.act-cell.empty{pointer-events:none;background:0 0}.act-cell.tone-0{background:color-mix(in srgb, var(--hairline), transparent 30%)}.act-cell.tone-1{background:color-mix(in srgb, var(--accent) 18%, var(--hairline))}.act-cell.tone-2{background:color-mix(in srgb, var(--accent) 42%, var(--hairline))}.act-cell.tone-3{background:color-mix(in srgb, var(--accent) 70%, var(--hairline))}.act-cell.tone-4{background:var(--accent)}.activity-footer{border-top:1px dashed var(--hairline);justify-content:space-between;align-items:center;padding-top:8px;display:flex}.activity-tip{color:var(--ink-soft);min-height:1.6em;font-size:12px}.activity-legend{color:var(--muted);flex-shrink:0;align-items:center;gap:3px;font-size:10.5px;display:inline-flex}.kpi-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.kpi-card{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow-sm);gap:10px;padding:16px 18px;display:grid}.kpi-card-label{text-transform:uppercase;letter-spacing:.1em;color:var(--muted);font-size:11px;font-weight:700}.kpi-card-value{align-items:baseline;gap:4px;display:flex}.kpi-card-num{font-family:var(--font-mono);letter-spacing:-.03em;color:var(--ink);font-size:38px;font-weight:600;line-height:1}.kpi-card-unit{color:var(--muted);font-family:var(--font-mono);font-size:16px;font-weight:500}.kpi-card-foot{justify-content:space-between;align-items:center;gap:12px;display:flex}.kpi-delta{color:var(--muted);font-size:11.5px;font-weight:600}.kpi-delta.delta-up{color:var(--good)}.kpi-delta.delta-down{color:var(--accent)}.kpi-spark{width:120px;height:32px;display:block}.chart-card-new{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:18px}.chart-card-new-head{border-bottom:1px solid var(--hairline);justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;padding-bottom:12px;display:flex}.chart-card-title{letter-spacing:-.015em;margin:0;font-size:16px;font-weight:600}.chart-card-sub{color:var(--muted);margin-top:2px;font-size:11.5px}.chart-card-meta{color:var(--muted);font-size:12.5px;font-family:var(--font-mono)}.charts-2col{grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;display:grid}.chart-svg-wrap{width:100%}.chart-tick{fill:var(--muted);font-size:9.5px;font-family:var(--font-mono)}.chart-num{fill:var(--ink-soft);font-size:10px;font-family:var(--font-mono)}.xp-tooltip{background:var(--surface-raised,var(--surface));border:1px solid var(--hairline);pointer-events:none;white-space:nowrap;z-index:10;border-radius:6px;flex-direction:column;align-items:center;gap:1px;padding:5px 9px;display:flex;position:absolute;transform:translate(-50%,calc(-100% - 10px));box-shadow:0 2px 8px #0000001f}.xp-tooltip-xp{color:var(--accent);font-size:12px;font-weight:600;font-family:var(--font-mono)}.xp-tooltip-date{color:var(--muted);font-size:10px}.goal-rail{background:var(--hairline);border-radius:3px;height:6px;margin-top:8px;position:relative}.goal-fill{background:var(--ink);border-radius:3px;height:100%}.goal-tick{background:var(--bg);width:1px;position:absolute;top:-2px;bottom:-2px}.goal-meta{color:var(--muted);justify-content:space-between;margin-top:6px;font-size:11.5px;display:flex}.rail-list{gap:8px;display:grid}.rail-row{grid-template-columns:200px minmax(0,1fr) 56px;align-items:center;gap:14px;padding:6px 0;display:grid}.rail-label{color:var(--ink);font-size:13px}.rail-track{background:var(--hairline);border-radius:4px;height:8px;position:relative}.rail-fill{border-radius:4px;height:100%;transition:width .4s}.rail-high{background:var(--good)}.rail-mid{background:var(--ink)}.rail-low{background:var(--warn)}.rail-none{background:var(--accent)}.rail-mark{background:var(--ink);opacity:.35;width:1px;position:absolute;top:-3px;bottom:-3px}.rail-num{text-align:right;color:var(--ink);font-size:13px;font-family:var(--font-mono)}.rail-num small{color:var(--muted);margin-left:1px}.rail-legend{border-top:1px dashed var(--hairline);color:var(--muted);flex-wrap:wrap;gap:14px;margin-top:14px;padding-top:14px;font-size:11.5px;display:flex}.rail-legend .rail-dot{vertical-align:middle;border-radius:50%;width:8px;height:8px;margin-right:6px;display:inline-block}.errors-layout{grid-template-columns:160px 1fr;align-items:center;gap:22px;display:grid}.donut-num{fill:var(--ink);font-size:22px;font-weight:600;font-family:var(--font-mono)}.donut-sub{fill:var(--muted);text-transform:uppercase;letter-spacing:.12em;font-size:9.5px}.errors-list-new{gap:8px;margin:0;padding:0;list-style:none;display:grid}.errors-list-new li{grid-template-columns:10px 1fr 100px 36px 36px;align-items:center;gap:10px;padding:4px 0;font-size:13px;display:grid}.err-dot{border-radius:2px;width:10px;height:10px}.err-bar{background:var(--hairline);border-radius:3px;height:6px;overflow:hidden}.err-bar-fill{height:100%}.err-count{text-align:right;font-family:var(--font-mono)}.err-pct{text-align:right;font-size:11.5px;font-family:var(--font-mono);color:var(--muted)}.weak-list-new{gap:6px;margin:0;padding:0;list-style:none;display:grid}.weak-row-new{border-bottom:1px dashed var(--hairline);grid-template-columns:28px minmax(0,1fr) 120px 44px;align-items:center;gap:12px;padding:8px 0;display:grid}.weak-row-new:last-child{border-bottom:0}.weak-rank{color:var(--muted);font-size:11px;font-family:var(--font-mono)}.weak-label{font-size:13.5px}.weak-bar-new{background:var(--hairline);border-radius:3px;height:6px;overflow:hidden}.weak-bar-fill-new{background:var(--accent);border-radius:3px;height:100%}.weak-pct-new{text-align:right;color:var(--ink);font-size:12.5px;font-family:var(--font-mono)}.lang-table-new{gap:0;display:grid}.lang-row-new{border-bottom:1px solid var(--hairline);grid-template-columns:minmax(0,2fr) 60px 100px 80px 80px;align-items:center;gap:12px;padding:12px 4px;font-size:13.5px;display:grid}.lang-row-new:last-child{border-bottom:0}.lang-head-row{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding-top:4px;font-size:11px;font-weight:700}.lang-row-new.active-lang{background:var(--surface-2);border-radius:8px;padding-left:10px;padding-right:10px}.lang-name-new{font-weight:600}.lang-pill{text-transform:uppercase;letter-spacing:.06em;color:var(--accent);background:var(--accent-soft);border-radius:999px;margin-left:8px;padding:2px 8px;font-size:10.5px;font-style:normal;font-weight:700;display:inline-block}.cat-detail-table{border-collapse:collapse;width:100%;font-size:13.5px}.cat-detail-table th,.cat-detail-table td{text-align:left;border-bottom:1px solid var(--hairline);padding:12px 8px}.cat-detail-table th{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);border-bottom:1px solid var(--hairline-2);font-size:11px;font-weight:700}.cat-detail-table tbody tr:hover{background:var(--surface-2)}.cell-bar{grid-template-columns:minmax(0,1fr) 44px;align-items:center;gap:10px;max-width:280px;display:grid}.cell-bar-track{background:var(--hairline);border-radius:3px;height:6px;overflow:hidden}.cell-bar-fill{background:var(--ink);border-radius:3px;height:100%}.lvl-pill{font-family:var(--font-mono);border:1px solid var(--hairline);background:var(--surface-2);color:var(--ink-soft);border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}:root{--cov-red-bg:#fee2e2;--cov-red-fg:#991b1b;--cov-red-dot:#f87171;--cov-yellow-bg:#fef9c3;--cov-yellow-fg:#713f12;--cov-yellow-dot:#facc15;--cov-green-bg:#dcfce7;--cov-green-dot:#4ade80}[data-theme=dark]{--cov-red-bg:oklch(22% .07 20);--cov-red-fg:oklch(72% .18 22);--cov-red-dot:oklch(60% .18 22);--cov-yellow-bg:oklch(22% .06 75);--cov-yellow-fg:oklch(78% .14 72);--cov-yellow-dot:oklch(75% .16 72);--cov-green-bg:oklch(22% .06 145);--cov-green-dot:oklch(68% .15 145)}.content-stats-page{padding-bottom:40px}.stats-subtitle{color:var(--muted);margin-top:4px;margin-bottom:16px;font-size:13.5px}.coverage-summary{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:20px;display:flex}.summary-chip{border-radius:999px;padding:4px 12px;font-size:12px;font-weight:600}.chip-red{background:var(--cov-red-bg);color:var(--cov-red-fg)}.chip-yellow{background:var(--cov-yellow-bg);color:var(--cov-yellow-fg)}.chip-legend{background:var(--surface-2);color:var(--ink-soft);align-items:center;gap:10px;display:flex}.legend-dot{border-radius:3px;width:10px;height:10px;margin-right:3px;display:inline-block}.dot-red{background:var(--cov-red-dot)}.dot-yellow{background:var(--cov-yellow-dot)}.dot-green{background:var(--cov-green-dot)}.coverage-grid-wrap{overflow-x:auto}.coverage-table{border-collapse:collapse;width:100%;min-width:700px;font-size:12.5px}.coverage-table th,.coverage-table td{border:1px solid var(--hairline);text-align:left;vertical-align:top;padding:6px 10px}.coverage-table thead th{text-transform:uppercase;letter-spacing:.07em;color:var(--muted);background:var(--surface-2);white-space:nowrap;font-size:11px;font-weight:700}.cat-header{min-width:130px}.lang-header{text-align:center;min-width:110px}.cat-label{white-space:nowrap;color:var(--ink-soft);font-size:12.5px;font-weight:600}.foot-label{font-weight:700}.coverage-cell{cursor:pointer;transition:background .15s}.coverage-cell:hover{filter:brightness(1.07)}[data-theme=dark] .coverage-cell:hover{filter:brightness(1.18)}.cell-red{background:var(--cov-red-bg);color:var(--ink)}.cell-yellow{background:var(--cov-yellow-bg);color:var(--ink)}.cell-green{background:var(--cov-green-bg);color:var(--ink)}.cell-empty{background:var(--surface-2);color:var(--muted);text-align:center}.cell-levels{font-family:var(--font-mono);color:var(--ink);flex-wrap:wrap;gap:6px;font-size:11px;display:flex}.cell-total{color:var(--muted);font-size:11px;font-family:var(--font-mono);margin-top:2px}.coverage-cell.expanded{outline:2px solid var(--accent);outline-offset:-2px}.type-breakdown{flex-wrap:wrap;gap:4px;margin-top:6px;display:flex}.type-chip{background:color-mix(in srgb, var(--ink) 10%, transparent);color:var(--ink-soft);white-space:nowrap;font-size:10px;font-family:var(--font-mono);border-radius:4px;padding:1px 5px}.foot-total{font-weight:700;font-family:var(--font-mono);background:var(--surface-2);color:var(--ink)}.cov-legend{flex-wrap:wrap;gap:12px;margin-top:10px;display:flex}.cov-legend-item{color:var(--muted);align-items:center;gap:5px;font-size:11.5px;display:flex}.cov-legend-item i{border-radius:2px;flex-shrink:0;width:10px;height:10px;display:inline-block}.app-footer{text-align:center;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:10.5px;font-family:var(--font-mono);margin-top:40px}.achievement-toast{background:var(--surface);border:1px solid var(--accent);box-shadow:0 4px 16px color-mix(in srgb, var(--accent) 20%, transparent);border-radius:10px;margin:0 0 8px;padding:14px 16px;animation:.3s achievement-slide-in}@keyframes achievement-slide-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.achievement-toast-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.achievement-toast-title{text-transform:uppercase;letter-spacing:.1em;color:var(--accent);font-size:12px;font-weight:700;font-family:var(--font-mono)}.achievement-toast-close{color:var(--muted);padding:2px 4px;line-height:1}.achievement-toast-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.achievement-toast-item{color:var(--accent);align-items:center;gap:10px;display:flex}.achievement-toast-item>span{flex-direction:column;gap:1px;display:flex}.achievement-toast-item strong{color:var(--ink);font-size:13.5px}.achievement-toast-desc{color:var(--ink-soft);font-size:12px}.achievements-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;display:grid}.achievement-badge{background:var(--surface-2);border:1px solid var(--hairline);border-radius:8px;align-items:flex-start;gap:12px;padding:12px;display:flex}.achievement-badge-icon{color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;display:flex}.achievement-badge-body{flex-direction:column;gap:2px;min-width:0;display:flex}.achievement-badge-name{color:var(--ink);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:700;overflow:hidden}.achievement-badge-desc{color:var(--ink-soft);font-size:11.5px;line-height:1.4}.achievement-badge-date{color:var(--muted);margin-top:2px;font-size:11px}@media (width<=900px){.learn-hero{grid-template-columns:1fr}.learn-hero-meta{grid-template-columns:1fr 1fr}.recommended-card{grid-template-columns:1fr}.recommended-stats{grid-template-columns:repeat(2,1fr);gap:16px}.stats-hero{grid-template-columns:1fr;gap:22px}.kpi-grid{grid-template-columns:1fr 1fr}.charts-2col,.errors-layout{grid-template-columns:1fr}.rail-row{grid-template-columns:1fr minmax(0,1fr) 56px}.lang-row-new{grid-template-columns:1fr 60px 80px 60px}.lang-row-new>:nth-child(5){display:none}}@media (width<=760px){.app-shell{padding:16px 14px 48px}.topbar{grid-template-columns:1fr;gap:16px;margin-bottom:16px;padding-bottom:16px}.topbar-subtitle{display:none}.topbar-meta{justify-items:stretch;gap:12px}.topbar-chips{justify-content:flex-start}.topbar-actions{flex-wrap:wrap;gap:8px;width:100%}.course-select{flex:160px}.course-select select{flex:1;width:100%}.nav-strip{grid-template-columns:repeat(3,1fr);grid-auto-flow:row;gap:6px;margin-bottom:16px}.nav-tile{flex-direction:column;gap:6px;padding:12px 6px;font-size:12.5px}.nav-dot{display:none}}@media (width<=420px){.brand h1{font-size:23px}.brand-mark{width:40px;height:40px}.topbar-actions{gap:6px}.seg-label{display:none}}
