/* ═══════════════════════════════════════════════════════════════════════════
   OfflineQuiz UI — the app shell, home, practice, database, settings and
   plugins pages. Loaded after style.css. Everything is built on the theme
   variables (--bg, --bg-secondary, --text, --accent …) so installed themes
   recolor it; the few extra tokens below derive from them. html[data-scheme]
   (dark | light) is set by app.js from the active background's luminance.
   ═══════════════════════════════════════════════════════════════════════════ */

@font-face { font-family: "JetBrains Mono"; src: url("fonts/JetBrainsMono-Regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: "JetBrains Mono"; src: url("fonts/JetBrainsMono-Medium.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: "JetBrains Mono"; src: url("fonts/JetBrainsMono-Bold.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; }
@font-face { font-family: "JetBrains Mono"; src: url("fonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); font-weight: 800; font-style: normal; font-display: swap; }

:root {
  --font: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
  --font-mono: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
  --strong: #f0f6fc;
  --muted: var(--text-secondary);
  --line: var(--border);
  --line-soft: var(--border-light);
  --line-strong: color-mix(in srgb, var(--border) 62%, var(--text-secondary));
  --surface: var(--bg-secondary);
  --surface-2: var(--bg-tertiary);
  --raised: var(--border-light);
  --sunken: color-mix(in srgb, var(--bg) 45%, #000);
  --accent-strong: color-mix(in srgb, var(--accent) 76%, #000);
  --on-accent: #fff;
  --go: var(--green);
  --go-strong: color-mix(in srgb, var(--green) 70%, #000);
  --r-sm: var(--radius, 6px);
  --r: calc(var(--radius, 6px) + 2px);
  --r-lg: calc(var(--radius, 6px) * 2);
  --shadow: 0 16px 40px rgba(0, 0, 0, 0.5);
  --gutter: 24px;
  --page-w: 1240px;
  --practice-w: 1640px;
  --topbar-h: 56px;
  --drawer-w: 440px;
  --ease-out: cubic-bezier(0.2, 0.8, 0.2, 1);
}
html[data-scheme="light"] {
  --strong: color-mix(in srgb, var(--text) 78%, #000);
  --sunken: var(--bg);
  --line-strong: color-mix(in srgb, var(--border) 72%, #000);
  --shadow: 0 14px 36px rgba(15, 23, 42, 0.16);
}

body { font-family: var(--font); }
.num { font-variant-numeric: tabular-nums; }
.spacer { flex: 1 1 auto; }
.eyebrow { font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); font-weight: 500; }
::selection { background: color-mix(in srgb, var(--accent) 35%, transparent); }
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-thumb { background: var(--line); border-radius: 5px; border: 2px solid transparent; background-clip: padding-box; }
*::-webkit-scrollbar-thumb:hover { background: var(--line-strong); border: 2px solid transparent; background-clip: padding-box; }
*::-webkit-scrollbar-track { background: transparent; }

/* ── App frame ── */
#app { height: 100vh; }
.screen { height: auto; flex: 1 1 auto; min-height: 0; }

/* ── Buttons ── */
.btn {
  height: 36px; min-height: 36px; padding: 0 14px; gap: 8px;
  border: 1px solid var(--line); border-radius: var(--r);
  background: var(--surface); color: var(--text);
  font-family: var(--font); font-size: 13px; font-weight: 500; line-height: 1;
  transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
}
.btn:hover { background: var(--raised); border-color: var(--line-strong); color: var(--strong); }
.btn:disabled, .btn[disabled] { opacity: 0.45; cursor: default; }
.btn:disabled:hover { background: var(--surface); border-color: var(--line); color: var(--text); }
.btn svg { flex: 0 0 auto; }
.btn-sm { height: 30px; min-height: 30px; padding: 0 10px; font-size: 12px; }
.btn-md { height: 48px; min-height: 48px; }
.btn-lg { height: 56px; min-height: 56px; font-size: 15px; font-weight: 700; color: var(--strong); background: var(--raised); }
.btn-lg:hover { border-color: var(--accent); }
.btn-icon { width: 36px; padding: 0; }
.btn-icon.btn-sm { width: 30px; }
.btn-primary { background: var(--accent-strong); border-color: var(--accent-strong); color: var(--on-accent); font-weight: 700; }
.btn-primary:hover { background: var(--accent); border-color: var(--accent); color: var(--on-accent); opacity: 1; }
.btn-primary:disabled:hover { background: var(--accent-strong); border-color: var(--accent-strong); color: var(--on-accent); }
.btn-go { background: var(--go-strong); border-color: var(--go-strong); color: #fff; font-weight: 700; }
.btn-go:hover { background: var(--go); border-color: var(--go); color: #fff; }
.btn-ghost { background: transparent; border-color: transparent; color: var(--muted); }
.btn-ghost:hover { background: var(--raised); border-color: transparent; color: var(--strong); }
.btn-full { width: 100%; }
.btn .key, .top-bar .key { color: var(--muted); font-weight: 500; font-size: 11px; }
.btn-num { margin-left: 2px; color: var(--muted); font-weight: 500; }
:where(.top-bar-right, .row2, .hcard, .fp-foot, .db-toolbar, .qrow, .modal-foot, .foot-left, .foot-right, .set-actions, .pager, .cp-head, .tabs-row, .mp-lobby, .ext-row, .ext-tabs, .theme-foot, .confirm-actions, .room-head, .rhead, .review-menu-actions, .db-pkt-view) .btn + .btn { margin-left: 0; }
.btn-full + .btn-full { margin-top: 0; }

/* ── Inputs ── */
.mode-input, .db-input, .ext-setting-input, .rv-filterbar select, .rv-filterbar input {
  height: 36px; padding: 0 12px; border: 1px solid var(--line); border-radius: var(--r);
  background: var(--sunken); color: var(--strong); font-family: var(--font); font-size: 13px;
}
.mode-input:focus, .db-input:focus, .ext-setting-input:focus { outline: none; border-color: var(--accent); }
input::placeholder { color: color-mix(in srgb, var(--muted) 80%, transparent); }
input[type="checkbox"] { accent-color: var(--accent-strong); width: 16px; height: 16px; margin: 0; flex: 0 0 auto; cursor: pointer; }
/* checkboxes drawn in the palette (the OS box was a white square on dark themes) */
input[type="checkbox"]:not(.switch, .switch-input) {
  appearance: none; -webkit-appearance: none; position: relative; display: inline-grid; place-content: center;
  width: 18px; height: 18px; margin: 0; flex: 0 0 auto; cursor: pointer;
  border: 1.5px solid var(--line-strong); border-radius: 5px; background: var(--sunken);
  transition: background 140ms ease, border-color 140ms ease, box-shadow 140ms ease;
}
input[type="checkbox"]:not(.switch, .switch-input)::after {
  content: ""; width: 12px; height: 12px; background: var(--on-accent);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5' fill='none' stroke='black' stroke-width='3.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5' fill='none' stroke='black' stroke-width='3.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
  transform: scale(0); transition: transform 150ms var(--ease-out);
}
input[type="checkbox"]:not(.switch, .switch-input):hover { border-color: var(--accent); }
input[type="checkbox"]:not(.switch, .switch-input):checked { background: var(--accent-strong); border-color: var(--accent-strong); }
input[type="checkbox"]:not(.switch, .switch-input):checked::after { transform: scale(1); }
input[type="checkbox"]:not(.switch, .switch-input):indeterminate { border-color: var(--accent); }
input[type="checkbox"]:not(.switch, .switch-input):indeterminate::after { width: 8px; height: 2px; -webkit-mask: none; mask: none; background: var(--accent); border-radius: 1px; transform: scale(1); }
input[type="checkbox"]:not(.switch, .switch-input):disabled { opacity: 0.45; cursor: default; }
input[type="checkbox"]:not(.switch, .switch-input):focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.ext-switch input[type="checkbox"] { width: 0; height: 0; border: 0; opacity: 0; }
input[type="checkbox"].switch, .switch-input {
  appearance: none; -webkit-appearance: none; position: relative; flex: 0 0 auto;
  width: 42px; height: 24px; border-radius: 12px; background: var(--line); border: 0; cursor: pointer; transition: background 140ms ease;
}
input[type="checkbox"].switch::after, .switch-input::after {
  content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: #fff; transition: transform 140ms ease;
}
input[type="checkbox"].switch:checked, .switch-input:checked { background: var(--accent-strong); }
input[type="checkbox"].switch:checked::after, .switch-input:checked::after { transform: translateX(18px); }
.checkbox-row { gap: 10px; min-height: 30px; font-size: 13px; color: var(--text); }
.checkbox-row-wrap { gap: 6px; }

/* QBSelect, matching the buttons */
.qb-select-trigger {
  height: 36px; padding: 0 12px; gap: 10px; border: 1px solid var(--line); border-radius: var(--r);
  background: var(--surface); color: var(--text); font-family: var(--font); font-size: 13px;
}
.qb-select-trigger:hover { border-color: var(--line-strong); }
.qb-select-popup { border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); box-shadow: var(--shadow); padding: 6px; }
.qb-select-item { border-radius: var(--r-sm); padding: 7px 10px; font-size: 13px; }
.qb-select-item.active { background: var(--raised); color: var(--strong); }

/* Range sliders: a thin neutral track, the filled part in the accent (--pct, kept
   by app.js), and a plain white knob — no glow, no ring */
input[type="range"] {
  -webkit-appearance: none; appearance: none; height: 18px; margin: 0; padding: 0; border: 0; border-radius: 0;
  background: transparent; cursor: pointer; accent-color: var(--accent-strong); outline: none;
}
input[type="range"]::-webkit-slider-runnable-track {
  height: 4px; border-radius: 2px; border: 0;
  background: linear-gradient(to right, var(--accent) 0 var(--pct, 0%), var(--line) var(--pct, 0%) 100%);
}
input[type="range"]::-moz-range-track { height: 4px; border-radius: 2px; border: 0; background: var(--line); }
input[type="range"]::-moz-range-progress { height: 4px; border-radius: 2px; background: var(--accent); }
input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none; width: 16px; height: 16px; margin-top: -6px; border: 0; border-radius: 50%;
  background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45), 0 0 0 0.5px rgba(0, 0, 0, 0.25); cursor: pointer;
  transition: transform 120ms ease;
}
input[type="range"]::-moz-range-thumb { width: 16px; height: 16px; border: 0; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45); cursor: pointer; }
input[type="range"]:hover::-webkit-slider-thumb { transform: scale(1.12); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45), 0 0 0 0.5px rgba(0, 0, 0, 0.25); }
input[type="range"]:active::-webkit-slider-thumb { transform: scale(1.06); }
input[type="range"]:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 45%, transparent), 0 1px 3px rgba(0, 0, 0, 0.45); }
/* two-knob ranges (years, review age): same look; the fill is its own element */
.dual-range { height: 18px; }
.dual-range-track { height: 4px; border: 0; border-radius: 2px; background: var(--line); }
.dual-range-fill { top: 0; bottom: 0; border-radius: 2px; background: var(--accent); box-shadow: none; }
.dual-range input[type="range"] { height: 18px; }
.dual-range input[type="range"]::-webkit-slider-runnable-track { height: 18px; background: transparent; }
.dual-range input[type="range"]::-webkit-slider-thumb { margin-top: 1px; border: 0; background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45), 0 0 0 0.5px rgba(0, 0, 0, 0.25); }
.dual-range input[type="range"]::-moz-range-thumb { border: 0; background: #fff; }
.dual-range input[type="range"]::-moz-range-progress { background: transparent; }

/* ── Info dots ── */
.qb-info { width: 16px; height: 16px; font-size: 10px; border-color: var(--line-strong); color: var(--muted); font-weight: 700; text-transform: none; letter-spacing: 0; }

/* ═══ App top bar ═══ */
.app-topbar {
  position: relative; z-index: 40; flex: 0 0 auto;
  display: flex; align-items: center; gap: 8px; height: 56px; padding: 0 var(--gutter);
  border-bottom: 1px solid var(--line-soft); background: color-mix(in srgb, var(--bg) 92%, transparent);
}
.app-topbar .brand {
  display: inline-flex; align-items: baseline; height: 40px; padding: 0 8px 0 0; border: 0; background: none; cursor: pointer;
  color: var(--strong); font-family: var(--font); font-weight: 800; font-size: 16px; letter-spacing: -0.02em; line-height: 40px;
}
.app-topbar .brand span { color: var(--accent); }
.tb-crumb { display: flex; align-items: center; gap: 8px; min-width: 0; color: var(--muted); }
.tb-crumb[hidden] { display: none; }
.tb-crumb b { color: var(--strong); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tb-right { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.tb-pill {
  display: inline-flex; align-items: center; gap: 8px; height: 36px; padding: 0 12px;
  border: 1px solid var(--line); border-radius: 18px; background: var(--surface); color: var(--text);
  font-family: var(--font); font-size: 13px; cursor: pointer; white-space: nowrap;
}
.tb-pill[hidden] { display: none; }
.tb-pill:hover { border-color: var(--line-strong); color: var(--strong); }
.tb-pill.tb-streak { color: var(--yellow); }
.tb-icon { color: var(--muted); }
.tb-link { height: 36px; padding: 0 12px 0 10px; gap: 8px; color: var(--muted); font-weight: 500; }
.tb-link:hover { color: var(--strong); }
.tb-link[aria-pressed="true"] { background: var(--raised); color: var(--strong); }
.tb-profile {
  display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; margin-left: 4px; padding: 0;
  border: 0; border-radius: 50%; background: transparent; cursor: pointer;
}
.tb-profile .avatar, .tbm-head .avatar {
  width: 30px; height: 30px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; flex: none;
  background: var(--accent-strong); color: var(--on-accent); font-weight: 800; font-size: 13px; transition: box-shadow 140ms ease;
}
.tb-profile:hover .avatar, .tb-profile[aria-expanded="true"] .avatar { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 38%, transparent); }
.tb-menu { top: calc(100% + 8px); min-width: 240px; transform-origin: top right; }
.tbm-head { display: flex; align-items: center; gap: 10px; padding: 8px 10px 12px; margin-bottom: 4px; border-bottom: 1px solid var(--line-soft); }
.tbm-head .avatar { width: 34px; height: 34px; font-size: 14px; }
.tbm-who { min-width: 0; }
.tbm-who b { display: block; color: var(--strong); font-size: 13.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pop-item svg { flex: none; color: var(--muted); }
.pop-item:hover svg { color: var(--strong); }
.pop-item:disabled, .pop-item:disabled:hover { opacity: 0.55; cursor: default; background: transparent; color: var(--text); }
.pop-item .soon { margin-left: auto; padding: 2px 7px; border: 1px solid var(--line); border-radius: 9px; color: var(--muted); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; }
@media (max-width: 760px) { .tb-pill .lbl { display: none; } .tb-pill { padding: 0 10px; } .tb-crumb { display: none; } .tb-link span { display: none; } .tb-link { width: 36px; padding: 0; justify-content: center; } }

/* ═══ Page heads (each screen's .top-bar) ═══ */
.top-bar {
  width: 100%; max-width: var(--page-w); margin: 0 auto; padding: 20px var(--gutter) 14px;
  background: transparent; border: 0; min-height: 0; flex: 0 0 auto; flex-wrap: wrap; gap: 12px;
}
.top-bar-title { font-size: 20px; font-weight: 700; color: var(--strong); letter-spacing: -0.01em; text-transform: none; }
.top-bar-right { gap: 8px; flex-wrap: wrap; }
.top-bar .pill { height: 30px; padding: 0 12px; border-radius: 15px; font-size: 12px; }
.ext-page-body { padding: 0 var(--gutter) 40px; max-width: var(--page-w); width: 100%; margin: 0 auto; }

/* ═══ Home ═══ */
#title-screen.home { position: relative; overflow: hidden; display: flex !important; flex-direction: column; }
#title-screen.home:not(.active) { display: none !important; }
.home-bg {
  position: absolute; inset: -40px -20px 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 22px; padding: 0 12px; pointer-events: none; filter: blur(0.5px);
}
.home-track { display: flex; flex-direction: column; gap: 22px; animation: home-rise var(--dur, 100s) linear infinite; will-change: transform; }
@keyframes home-rise { from { transform: translateY(0); } to { transform: translateY(-50%); } }
.home-bgq {
  padding: 18px; border: 1px solid var(--line-soft); border-radius: var(--r-lg);
  background: color-mix(in srgb, var(--surface) 55%, transparent);
  font-size: 13px; line-height: 1.7; color: var(--muted); overflow-wrap: anywhere;
}
.home-bgq b { color: var(--text); font-weight: 700; }
.home-bgq .pm { color: var(--power-mark, var(--yellow)); font-weight: 800; }
.home-bgq .bz { font-weight: 800; }
.home-bgq .bz.b1 { color: var(--accent); }
.home-bgq .bz.b2 { color: var(--buzz-mark-other, #ff8c42); }
.home-bgq .bz.b3 { color: var(--buzz-mark-self, #36f9c3); }
.home-bgq .ans { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--line-soft); font-size: 11px; letter-spacing: 0.06em; color: var(--muted); }
.home-bgq .ans strong { color: var(--green); letter-spacing: 0; font-size: 13px; text-decoration: underline; text-underline-offset: 3px; }
.home-veil { position: absolute; inset: 0; pointer-events: none; background: radial-gradient(ellipse 70% 55% at 50% 32%, color-mix(in srgb, var(--bg) 92%, transparent), color-mix(in srgb, var(--bg) 80%, transparent)); }
.home-inner {
  position: relative; z-index: 1; flex: 1 1 auto; min-height: 0; overflow-y: auto; width: 100%;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: clamp(26px, 5vh, 44px); padding: clamp(24px, 6vh, 72px) var(--gutter) 40px;
}
.home .hero { display: flex; flex-direction: column; align-items: center; gap: 12px; text-align: center; text-shadow: 0 0 24px var(--bg), 0 0 12px var(--bg), 0 2px 4px var(--bg); }
.home .wordmark { margin: 0; display: flex; align-items: center; font-family: var(--font); font-size: clamp(44px, 7vw, 80px); font-weight: 800; letter-spacing: -0.045em; line-height: 1; color: var(--strong); }
.home .wordmark span { color: var(--accent); }
.home .wordmark .caret { display: inline-block; width: 0.5em; height: 0.82em; margin-left: 0.08em; background: var(--accent); animation: blink 1.1s steps(1) infinite; }
.home .greet { margin: 0; min-height: 24px; font-size: 16px; color: var(--muted); }
.home .greet b { color: var(--text); font-weight: 500; }
.home-cards { width: 100%; max-width: 1000px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; align-items: stretch; }
.hcard {
  display: flex; flex-direction: column; gap: 12px; padding: 24px; border: 1px solid var(--line); border-radius: var(--r-lg);
  background: var(--surface); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
}
html[data-scheme="light"] .hcard { box-shadow: 0 10px 30px rgba(15, 23, 42, 0.08); }
.hcard h2 { margin: 0 0 4px; display: flex; align-items: center; gap: 10px; font-size: 18px; color: var(--strong); }
.hcard h2 svg { color: var(--accent); }
.hcard .btn { width: 100%; }
.hcard > .btn:last-child, .hcard > .row2:last-child { margin-top: auto; }
.row2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
@media (max-width: 760px) { .home-cards { grid-template-columns: minmax(0, 1fr); } .home-bg { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (prefers-reduced-motion: reduce) { .home-track, .home .wordmark .caret { animation: none; } }

/* ═══ Practice ═══ */
#practice-screen { overflow-y: auto; }
#practice-screen .practice-layout {
  display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 36px; align-items: start;
  width: 100%; max-width: var(--practice-w); margin: 0 auto; padding: 0 clamp(20px, 3vw, 48px) 48px; overflow: visible; flex: 1 0 auto;
}
#practice-screen > .top-bar { max-width: var(--practice-w); padding-left: clamp(20px, 3vw, 48px); padding-right: clamp(20px, 3vw, 48px); }
#practice-screen .question-area { padding: 0; overflow: visible; min-height: min(560px, calc(100vh - 220px)); gap: 20px; }
#practice-screen .question-placeholder { min-height: min(520px, calc(100vh - 230px)); }
#practice-screen .question-text { font-size: 17.5px; line-height: 1.85; max-width: 110ch; }
/* the question block takes its own height: stretched, it pushed the bonus parts and the buzz
   timer to the bottom of the (now taller) area */
#practice-screen .question-content { flex: 0 0 auto; }
#practice-screen .bonus-part { padding: 16px 20px; }
#practice-screen .bonus-part-text { font-size: 16.5px; line-height: 1.8; color: var(--text); }
#practice-screen .bonus-answer-input { font-size: 16px; }
#practice-screen .practice-side {
  width: auto; border: 0; background: transparent; padding: 0; justify-content: flex-start; gap: 18px;
  position: sticky; top: 0;
}
@media (max-width: 960px) { #practice-screen .practice-layout { grid-template-columns: minmax(0, 1fr); } #practice-screen .practice-side { position: static; } }
.side-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.practice-side .stat-item { height: auto; min-height: 62px; padding: 10px 6px; background: var(--surface); border: 1px solid var(--line-soft); border-radius: var(--r); gap: 2px; }
.practice-side .stat-value { font-size: 18px; color: var(--strong); line-height: 1.2; }
.practice-side .stat-label { font-size: 10px; letter-spacing: 0.06em; margin: 0; color: var(--muted); }
.practice-side .stat-detail { font-size: 10px; }
.practice-side .stat-score { grid-column: span 2; }
.practice-side .stat-heard { grid-column: span 2; }
.practice-side .stat-score .stat-value { color: var(--accent); }
.practice-side .stat-pwr { color: var(--yellow); }
.practice-side .stat-neg { color: var(--red); }
.side-hist { display: flex; flex-direction: column; gap: 8px; }
.session-mini { display: flex; flex-direction: column; gap: 6px; }
.session-mini:empty::before { content: "—"; color: var(--muted); font-size: 12px; padding: 4px 2px; }
.sm-row {
  display: flex; align-items: center; gap: 10px; padding: 9px 12px; border: 1px solid var(--line-soft); border-radius: var(--r);
  background: var(--surface); cursor: pointer; font-size: 13px; text-align: left; color: var(--text); font-family: var(--font); width: 100%;
}
.sm-row:hover { border-color: var(--line-strong); }
.sm-row .dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; }
.sm-row .a { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--strong); }
.sm-row b { font-variant-numeric: tabular-nums; }
.practice-side .history-panel { border: 0; padding: 0; background: none; margin: 0; }
.practice-side .history-panel .btn { width: 100%; }

/* question area (practice + plugin pages that reuse it) */
.question-placeholder { gap: 12px; min-height: 360px; border: 0; border-radius: var(--r-lg); color: var(--muted); }
.question-content { gap: 14px; }
.question-meta { justify-content: flex-start; gap: 8px; font-size: 12px; color: var(--muted); }
.question-meta span { height: 26px; border-radius: 13px; padding: 0 10px; border-color: var(--line-soft); }
.question-meta .star-btn { width: 26px; height: 26px; }
.question-meta .q-num { border: 0; padding: 0; height: auto; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; }
.question-text { font-size: 16px; line-height: 1.8; color: var(--text); max-width: 80ch; }
.buzz-area { border-top: 0; padding: 12px 16px; border: 1px solid var(--accent); border-radius: var(--r-lg); background: var(--sunken); max-width: 720px; }
.buzz-prompt input { font-size: 17px; color: var(--strong); }
.result-area { gap: 14px; padding-top: 4px; }
.result-banner {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px 16px; padding: 12px 16px; font-size: 16px; font-weight: 800;
  border: 1px solid currentColor; border-radius: var(--r-lg); background: color-mix(in srgb, currentColor 12%, transparent);
}
.result-banner.correct { color: var(--green); }
.result-banner.power { color: var(--yellow); }
.result-banner.incorrect { color: var(--red); }
.result-banner.dead { color: var(--muted); }
.result-answer { font-size: 14px; line-height: 1.7; color: var(--text); }
.result-answer strong { color: var(--strong); }
.result-answer .actual { color: var(--strong); font-weight: 500; }
.result-answer .actual u, .result-answer .actual b { color: var(--strong); }
.result-tags:empty { display: none; }
.result-tags { padding-top: 14px; border-top: 1px solid var(--line-soft); }
.bonus-parts { gap: 12px; }
.bonus-part { padding: 14px 16px; border: 1px solid var(--line-soft); border-radius: var(--r-lg); background: var(--surface); }
.bonus-part-header { font-size: 11px; letter-spacing: 0.08em; color: var(--muted); }

/* ── Setup drawer (the real #filters-panel while it sits on the practice screen
      or a multiplayer room). No transform on it: #cat-ovl inside is position:fixed. */
.fp-head, .fp-foot { display: none; }
.drawer-backdrop { position: fixed; inset: 0; z-index: 58; background: rgba(1, 4, 9, 0.6); }
.drawer-backdrop[hidden] { display: none; }
:is(#practice-screen, .mp-room) .filters-panel {
  position: fixed; z-index: 45; top: var(--topbar-h); bottom: 0; right: calc(-1 * var(--drawer-w) - 40px); width: min(var(--drawer-w), 100vw) !important; flex: none !important;
  display: flex; flex-direction: column; gap: 0; padding: 0; overflow: hidden;
  border: 0; border-left: 1px solid var(--line); border-radius: 0; margin: 0; background: var(--bg); box-shadow: -16px 0 36px rgba(0, 0, 0, 0.22);
  visibility: hidden; transition: right 280ms var(--ease-out), visibility 0s linear 280ms;
}
:is(#practice-screen, .mp-room) .filters-panel.open { right: 0; visibility: visible; transition: right 280ms var(--ease-out), visibility 0s; }
/* the open setup panel sits BESIDE the page and pushes it left: practice (and a
   multiplayer room) keeps running next to it, hotkeys included */
#app > .screen { transition: margin-right 280ms var(--ease-out); }
#app > .screen:has(.filters-panel.open) { margin-right: min(var(--drawer-w), 100vw); }
@media (max-width: 900px) { #app > .screen:has(.filters-panel.open) { margin-right: 0; } }
@media (max-width: 1560px) { #practice-screen:has(.filters-panel.open) .practice-layout { grid-template-columns: minmax(0, 1fr); } #practice-screen:has(.filters-panel.open) .practice-side { position: static; } #practice-screen:has(.filters-panel.open) .question-area { min-height: 340px; } }
@media (max-width: 1400px) { .screen:has(.mp-room .filters-panel.open) .mp-layout { grid-template-columns: minmax(0, 1fr); } }
.drawer-backdrop { display: none !important; }
#btn-open-setup[aria-expanded="true"], #mp-roomset[aria-expanded="true"] { background: var(--raised); border-color: var(--line-strong); color: var(--strong); }
:is(#practice-screen, .mp-room) .filters-panel::before, :is(#practice-screen, .mp-room) .filters-panel::after { display: none; }
:is(#practice-screen, .mp-room) .filters-panel .fp-head {
  display: flex; align-items: center; gap: 12px; flex: 0 0 auto; height: 54px; padding: 0 12px 0 20px; border-bottom: 1px solid var(--line-soft);
}
:is(#practice-screen, .mp-room) .filters-panel .fp-title { margin: 0; flex: 1; font-size: 16px; color: var(--strong); }
:is(#practice-screen, .mp-room) .filters-panel .fp-foot {
  display: flex; align-items: center; gap: 10px; flex: 0 0 auto; padding: 12px 16px; border-top: 1px solid var(--line-soft); order: 99;
}
.fp-count { color: var(--muted); font-size: 13px; flex: 1; }
.fp-start { height: 44px; padding: 0 24px; }
:is(#practice-screen, .mp-room) .filters-panel > .filter-section { flex: 0 0 auto; padding: 0 20px; margin-top: 20px; }
:is(#practice-screen, .mp-room) .filters-panel > .fp-head + .filter-section { margin-top: 18px; }
:is(#practice-screen, .mp-room) .filters-panel { overflow-y: auto; }
:is(#practice-screen, .mp-room) .filters-panel .fp-head { position: sticky; top: 0; z-index: 2; background: var(--bg); }
:is(#practice-screen, .mp-room) .filters-panel .fp-foot { position: sticky; bottom: 0; z-index: 2; background: var(--bg); margin-top: auto; }
:is(#practice-screen, .mp-room) .filters-panel .fp-foot { margin-top: 22px; }
.fp-legacy-start { display: none !important; }

/* sections inside the panel (drawer and borrowed column alike) */
.filters-panel { gap: 18px; }
.filters-panel .filter-label {
  display: flex; align-items: center; gap: 6px; margin-bottom: 8px;
  font-size: 11px; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted);
}
.filters-panel .filter-label .range-values { margin-left: auto; text-transform: none; letter-spacing: 0; font-size: 12px; color: var(--strong); }
.filters-panel .mode-input { width: 100%; }
.filters-panel .mode-field { margin-top: 10px; font-size: 12px; gap: 6px; }
.cat-open-btn { justify-content: space-between; height: 40px; text-align: left; }
.cat-open-btn .cat-sum { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--strong); }
.cat-open-btn .cat-chev { color: var(--muted); }
.fp-checks { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 14px; }
.filters-panel:not(.open) .fp-checks { grid-template-columns: minmax(0, 1fr); }
:is(#practice-screen, .mp-room) .filters-panel .fp-checks { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.fp-checks .checkbox-row { font-size: 12.5px; }
#sec-timing .slider-group { display: grid; grid-template-columns: 112px minmax(0, 1fr) 52px; align-items: center; gap: 10px; margin-top: 6px; }
#sec-timing .sg-label { font-size: 12px; color: var(--text); display: inline-flex; align-items: center; gap: 4px; }
#sec-timing .slider-group[style*="none"] { display: none !important; }
.filters-panel .filter-section.filter-disabled { opacity: 0.45; }

/* difficulty: 0–10 toggles (the checkboxes stay real, just visually hidden) */
#difficulty-filters.diff-checks, .diff-toggles {
  display: inline-flex; flex-wrap: wrap; align-items: center; gap: 2px; max-width: 100%;
  padding: 4px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface);
}
#difficulty-filters .diff-row, .diff-toggles label {
  position: relative; display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 28px; padding: 0; gap: 0;
  border-radius: 5px; color: var(--muted); font-size: 12.5px; cursor: pointer; background: transparent;
}
#difficulty-filters .diff-row:hover, .diff-toggles label:hover { background: var(--raised); color: var(--strong); }
#difficulty-filters .diff-row input, .diff-toggles input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
#difficulty-filters .diff-row:has(input:checked), .diff-toggles label:has(input:checked) { background: var(--accent-strong); color: var(--on-accent); font-weight: 700; }
#difficulty-filters .diff-row:has(input:focus-visible), .diff-toggles label:has(input:focus-visible) { outline: 2px solid var(--accent); outline-offset: 1px; }
#difficulty-filters .diff-row input:checked + span { color: inherit; font-weight: 700; }

/* ═══ Chips, tags, badges ═══ */
.badge {
  display: inline-flex; align-items: center; gap: 6px; max-width: 100%; min-width: 0; height: 26px; padding: 0 10px;
  border-radius: 13px; font-weight: 700; font-size: 12px; white-space: nowrap; line-height: 1;
}
.badge .t, .qtag .t { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.badge[hidden] { display: none !important; }   /* .badge's display would otherwise beat [hidden] (the MP "You host" badge) */
.badge .dot, .qtag .dot { width: 7px; height: 7px; border-radius: 50%; flex: 0 0 auto; background: var(--c, var(--muted)); }
.cat-badge { background: color-mix(in srgb, var(--c) 16%, transparent); color: var(--c); }
html[data-scheme="light"] .cat-badge { color: color-mix(in srgb, var(--c) 58%, #000); }
.year-badge { background: var(--raised); color: var(--strong); box-shadow: inset 0 0 0 1px var(--line-strong); font-variant-numeric: tabular-nums; }
.diff-badge { background: transparent; color: var(--muted); box-shadow: inset 0 0 0 1px var(--line); font-weight: 500; }
.qtag {
  display: inline-flex; align-items: center; gap: 6px; max-width: 100%; min-width: 0; height: 26px; padding: 0 9px;
  border: 1px solid var(--line); border-radius: 13px; background: transparent; color: var(--text);
  font-family: var(--font); font-size: 12px; white-space: nowrap; cursor: pointer; line-height: 1;
}
.qtag:hover { border-color: var(--muted); color: var(--strong); }
.qtag .dot { width: 6px; height: 6px; }
.qmeta-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.qmeta-row .src { color: var(--muted); font-size: 12px; }
.vsep { width: 1px; height: 18px; background: var(--line); flex: 0 0 auto; }
.chip {
  display: inline-flex; align-items: center; gap: 8px; height: 32px; padding: 0 12px; border: 1px solid var(--line); border-radius: 16px;
  background: var(--surface); color: var(--text); font-family: var(--font); font-size: 12.5px; white-space: nowrap; cursor: pointer;
}
.chip:hover { border-color: var(--line-strong); color: var(--strong); }
.chip.on { background: color-mix(in srgb, var(--accent) 15%, transparent); border-color: var(--accent); color: var(--strong); }
.chip .n { color: var(--muted); font-variant-numeric: tabular-nums; }
.chip .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--c, var(--muted)); }

/* chip field: the search bar and the practice Tags box */
.cfield {
  position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-height: 56px; padding: 8px 8px 8px 14px;
  border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--sunken); cursor: text;
}
.cfield:has(.cinput:focus, .composer-in:focus) { border-color: var(--accent); }
.cfield.small { min-height: 46px; padding: 6px 6px 6px 10px; border-radius: var(--r); }
.cfield > svg { flex: 0 0 auto; color: var(--muted); }
.cfield .cinput { flex: 1 1 160px; min-width: 110px; height: 36px; border: 0; outline: 0; background: transparent; color: var(--strong); font-family: var(--font); font-size: 15px; padding: 0; }
.cfield.small .cinput { font-size: 13px; height: 32px; }
.chips-holder { display: contents; }
.qchip { --c: var(--accent); display: inline-flex; align-items: center; height: 30px; max-width: 100%; border: 1px solid var(--c); border-radius: 15px; background: color-mix(in srgb, var(--c) 14%, transparent); color: var(--c); }
html[data-scheme="light"] .qchip { color: color-mix(in srgb, var(--c) 60%, #000); }
.qchip.ex { border-style: dashed; background: color-mix(in srgb, var(--c) 5%, transparent); }
.qchip-main { display: inline-flex; align-items: center; gap: 6px; min-width: 0; height: 28px; padding: 0 4px 0 11px; border: 0; background: transparent; color: inherit; font-family: var(--font); font-size: 12.5px; cursor: pointer; }
.qchip-fam { opacity: 0.85; font-size: 11px; }
.qchip-val { color: var(--strong); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.qchip.ex .qchip-val { text-decoration: line-through; text-decoration-thickness: 1px; }
.qchip-x { width: 26px; height: 28px; padding: 0; border: 0; background: transparent; color: inherit; opacity: 0.8; font-size: 15px; line-height: 1; cursor: pointer; }
.qchip-x:hover { opacity: 1; }
.composer { display: inline-flex; align-items: center; gap: 4px; height: 30px; padding: 0 12px; border: 1.5px dashed var(--accent); border-radius: 15px; background: color-mix(in srgb, var(--accent) 12%, transparent); color: var(--accent); font-size: 13px; }
.composer input { width: 10ch; min-width: 4ch; border: 0; outline: 0; background: transparent; color: var(--strong); padding: 0; font-family: var(--font); font-size: 13px; }
.sugg { position: absolute; top: calc(100% + 6px); left: 0; z-index: 30; width: min(460px, 100%); padding: 6px; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); box-shadow: var(--shadow); cursor: default; }
.cfield.small .sugg { position: static; flex: 1 1 100%; width: auto; margin: 2px 0 0; box-shadow: none; border-color: var(--line-soft); }
.sugg-head { display: flex; justify-content: space-between; gap: 12px; padding: 4px 10px 8px; color: var(--muted); font-size: 11.5px; white-space: nowrap; }
.sugg-head .sh-l { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.sugg-item { display: flex; align-items: center; gap: 10px; width: 100%; height: 36px; padding: 0 10px; border: 0; border-radius: var(--r-sm); background: transparent; color: var(--text); font-family: var(--font); font-size: 13px; text-align: left; cursor: pointer; }
.sugg-item:hover, .sugg-item.hi { background: var(--raised); color: var(--strong); }
.sugg-item .f { flex: 0 0 76px; font-size: 10.5px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--c, var(--muted)); }
.sugg-item .v { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--strong); }
.sugg-item .c { color: var(--muted); font-variant-numeric: tabular-nums; }
.sugg-empty { padding: 10px; color: var(--muted); font-size: 13px; }

/* ═══ Popovers & menus ═══ */
.pop-wrap { position: relative; display: inline-flex; }
.pop { position: absolute; top: calc(100% + 6px); z-index: 45; min-width: 220px; padding: 6px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); box-shadow: var(--shadow); }
.pop[hidden] { display: none; }
.pop.right { right: 0; } .pop.left { left: 0; }
.pop-item { display: flex; align-items: center; gap: 10px; width: 100%; height: 38px; padding: 0 10px; border: 0; border-radius: var(--r-sm); background: transparent; color: var(--text); font-family: var(--font); font-size: 13px; text-align: left; text-decoration: none; cursor: pointer; white-space: nowrap; }
.pop-item:hover, .pop-item.hi { background: var(--raised); color: var(--strong); }

/* ═══ Modals (settings, categories, review, history …) ═══ */
.settings-ovl, .qb-overlay.app-ovl { background: color-mix(in srgb, #010409 72%, transparent); z-index: 70; }
.settings-modal {
  display: flex; flex-direction: column; padding: 0; overflow: hidden;
  border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--bg); box-shadow: var(--shadow);
}
.modal-head { display: flex; align-items: center; gap: 12px; flex: 0 0 auto; height: 60px; padding: 0 12px 0 20px; border-bottom: 1px solid var(--line-soft); }
.modal-head h2 { margin: 0; font-size: 16px; color: var(--strong); }
.modal-foot { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; padding: 12px 16px; border-top: 1px solid var(--line-soft); }

/* settings */
.set-modal { width: min(1000px, calc(96vw / var(--ui-zoom, 1))); height: min(720px, calc(92vh / var(--ui-zoom, 1))); max-height: none; }
.set-layout { flex: 1 1 auto; min-height: 0; display: flex; }
.set-nav { flex: 0 0 220px; display: flex; flex-direction: column; gap: 2px; padding: 12px 10px; border-right: 1px solid var(--line-soft); overflow-y: auto; }
.set-nav-btn { height: 40px; padding: 0 12px; border: 0; border-radius: var(--r-sm); background: transparent; color: var(--muted); text-align: left; white-space: nowrap; font-family: var(--font); font-size: 13px; cursor: pointer; }
.set-nav-btn:hover { color: var(--strong); background: var(--surface); }
.set-nav-btn[aria-current="true"] { background: var(--raised); color: var(--strong); font-weight: 700; }
.set-nav-btn[hidden] { display: none; }
.set-body { flex: 1; min-width: 0; overflow-y: auto; padding: 20px 26px 28px; }
.set-pane { display: none; }
.set-pane.on { display: block; }
.set-pane h3 { margin: 0 0 8px; font-size: 18px; color: var(--strong); }
.set-pane .setting-row { display: flex; align-items: center; gap: 10px 16px; min-height: 54px; padding: 8px 0; margin: 0; border: 0; border-bottom: 1px solid var(--line-soft); border-radius: 0; background: transparent; justify-content: flex-start; }
.set-pane .setting-row + .setting-row { margin-top: 0; }
.set-pane .setting-label { flex: 0 0 240px; display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); }
.set-pane .setting-row > :not(.setting-label) { margin-left: 0; }
.set-pane .setting-row .slider-group { flex: 1; min-width: 0; }
.set-pane .setting-row .slider-group input[type="range"] { flex: 1; }
.set-pane .setting-row .qb-select, .set-pane .setting-row > select, .set-pane .setting-row > .mode-input { min-width: 200px; }
.set-pane .setting-row-wrap { flex-wrap: wrap; align-items: flex-start; padding: 14px 0; }
.set-pane .setting-subhead { margin: 18px 0 2px; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); font-weight: 500; }
.set-pane .stats-section { border: 0; background: transparent; padding: 0; margin: 0; box-shadow: none; }
.set-pane .setting-row input[type="checkbox"].switch { width: 42px; height: 24px; }
.set-status { font-size: 12px; color: var(--muted); padding: 6px 0; }
.set-status:empty { display: none; }
.set-theme-name { flex: 1; color: var(--strong); }
.set-name-input { width: 260px; }
.set-actions { display: inline-flex; gap: 8px; }
.tag-fam-chips, .tag-where { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.tag-where { gap: 0 20px; }
.tag-fam-chips .chip.on { background: color-mix(in srgb, var(--c) 14%, transparent); border-color: var(--c); }
#hotkey-table .stats-table td, #hotkey-table .stats-table th { padding: 8px 10px; }
@media (max-width: 760px) { .set-layout { flex-direction: column; } .set-nav { flex: none; flex-direction: row; overflow-x: auto; border-right: 0; border-bottom: 1px solid var(--line-soft); padding: 8px; } .set-nav-btn { flex: none; } .set-pane .setting-label { flex: 1 1 100%; } }

/* ═══ Category picker (two panes) ═══ */
.cat-modal { width: min(1100px, calc(96vw / var(--ui-zoom, 1))); height: min(740px, calc(92vh / var(--ui-zoom, 1))); max-height: none; padding: 0; }
.cat-picker { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
.cp-body { flex: 1 1 auto; min-height: 0; display: flex; }
.cp-left { flex: 0 0 300px; display: flex; flex-direction: column; gap: 1px; padding: 8px 10px; border-right: 1px solid var(--line-soft); overflow-y: auto; }
.cp-left.weights { flex-basis: 340px; }
.cp-left.weights .tile-n { display: none; }
.cp-tile { display: flex; align-items: center; gap: 10px; flex: none; padding: 3px 10px; border: 1px solid transparent; border-radius: var(--r); }
.cp-tile:hover { background: var(--surface); }
.cp-tile.focus { background: var(--surface); border-color: var(--line); }
.cp-tile-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 5px; padding: 4px 0; border: 0; background: transparent; text-align: left; cursor: pointer; font-family: var(--font); color: var(--text); }
.cp-tile-top { display: flex; align-items: center; gap: 8px; width: 100%; }
.cp-tile-name { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--strong); font-size: 13px; }
.cp-tile .dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; }
.tile-n { color: var(--muted); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.cp-share { display: block; width: 100%; height: 3px; border-radius: 2px; background: var(--raised); overflow: hidden; }
.cp-share span { display: block; height: 100%; }
.cp-box { flex: 0 0 auto; width: 22px; height: 22px; padding: 0; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--line-strong); border-radius: 5px; background: transparent; cursor: pointer; color: #fff; }
.cp-box.on { background: var(--accent-strong); border-color: var(--accent-strong); }
.cp-box.partial { background: color-mix(in srgb, var(--accent) 15%, transparent); border-color: var(--accent); }
.cp-box.partial::after { content: ""; width: 10px; height: 3px; border-radius: 2px; background: var(--accent); }
.cp-stepper { display: inline-flex; align-items: center; gap: 2px; flex: 0 0 auto; }
.cp-stepper button { width: 24px; height: 26px; padding: 0; border: 1px solid var(--line); border-radius: 5px; background: var(--surface); color: var(--text); cursor: pointer; font-family: var(--font); }
.cp-stepper button:hover { border-color: var(--line-strong); color: var(--strong); }
.cp-stepper span { min-width: 38px; text-align: center; color: var(--yellow); font-size: 12px; font-variant-numeric: tabular-nums; }
.cp-right { flex: 1; min-width: 0; min-height: 0; display: flex; flex-direction: column; }
.cp-head { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; padding: 14px 20px 12px; border-bottom: 1px solid var(--line-soft); }
.cp-title { flex: 1; min-width: 0; }
.cp-title h3 { margin: 0; font-size: 18px; color: var(--strong); }
.cp-title p { margin: 2px 0 0; color: var(--muted); font-size: 12px; }
.cp-find { position: relative; width: 240px; }
.cp-find .field { display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 12px; border: 1px solid var(--line); border-radius: var(--r); background: var(--sunken); color: var(--muted); }
.cp-find .field:focus-within { border-color: var(--accent); }
.cp-find input { flex: 1; min-width: 0; width: 100%; border: 0; outline: 0; background: transparent; color: var(--strong); font-family: var(--font); font-size: 13px; }
.cp-find-pop { position: absolute; top: calc(100% + 6px); right: 0; z-index: 30; width: min(380px, 80vw); max-height: 420px; overflow-y: auto; padding: 6px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); box-shadow: var(--shadow); }
.cp-hit { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; width: 100%; padding: 8px 10px; border: 0; border-radius: var(--r-sm); background: transparent; text-align: left; cursor: pointer; font-family: var(--font); color: var(--text); }
.cp-hit:hover, .cp-hit.hi { background: var(--raised); }
.cp-hit .r1 { display: flex; gap: 8px; width: 100%; }
.cp-hit .r1 b { flex: 1; color: var(--strong); font-weight: 500; font-size: 13px; }
.cp-hit .r2 { color: var(--muted); font-size: 11px; }
.cp-scroll { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 4px 20px 20px; }
.cp-sec { padding: 14px 0; border-bottom: 1px solid var(--line-soft); }
.cp-sec:last-child { border-bottom: 0; }
.cp-sec-head { display: flex; align-items: center; gap: 10px; min-height: 32px; }
.cp-sec-name { font-weight: 700; color: var(--strong); font-size: 13.5px; }
.cp-sec-name.hl { color: var(--yellow); }
.cp-sec-n { color: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums; }
.cp-pills { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0 0 32px; }
.cp-pillgrp { display: inline-flex; max-width: 100%; min-width: 0; }
.cp-pill { display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 100%; height: 32px; padding: 0 12px; border: 1px solid var(--line); border-radius: 16px; background: var(--surface); color: var(--text); white-space: nowrap; cursor: pointer; font-family: var(--font); font-size: 12.5px; }
.cp-pill:hover { border-color: var(--accent); }
.cp-pill.on { background: color-mix(in srgb, var(--accent) 15%, transparent); border-color: var(--accent); color: var(--strong); }
.cp-pill.partial { border-style: dashed; border-color: var(--accent); }
.cp-pill.hl { box-shadow: 0 0 0 2px var(--yellow); }
.cp-pill .t { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.cp-pill .n { color: var(--muted); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.cp-pill svg { color: var(--accent); flex: 0 0 auto; }
.cp-pill.has-more { border-radius: 16px 0 0 16px; }
.cp-more { flex: none; height: 32px; padding: 0 10px; border: 1px solid var(--line); border-left: 0; border-radius: 0 16px 16px 0; background: var(--raised); color: var(--muted); font-size: 12px; cursor: pointer; font-family: var(--font); }
.cp-more:hover { color: var(--strong); }
.cp-more.open { background: var(--accent-strong); border-color: var(--accent-strong); color: var(--on-accent); }
.cp-sub { margin: 10px 0 0 32px; padding: 12px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); }
.cp-sub .cp-pills { margin: 0; }
.cp-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; margin-bottom: 10px; color: var(--muted); }
.cp-crumbs button { height: 28px; padding: 0 6px; border: 0; border-radius: 5px; background: transparent; color: var(--accent); cursor: pointer; font-family: var(--font); font-size: 12.5px; }
.cp-crumbs button:hover { background: var(--raised); }
.cp-crumbs button[aria-current="true"] { color: var(--strong); }
.cp-foot { display: flex; flex-wrap: nowrap; align-items: center; gap: 8px; flex: 0 0 auto; padding: 12px 16px; border-top: 1px solid var(--line-soft); }
.foot-left { flex: 1 1 0; min-width: 0; display: flex; align-items: center; gap: 8px; overflow-x: auto; scrollbar-width: none; }
.foot-left::-webkit-scrollbar { display: none; }
.foot-left .chip { flex: none; }
.foot-right { flex: none; display: flex; align-items: center; gap: 8px; margin-left: auto; }
.cp-weights-lbl { display: inline-flex; align-items: center; gap: 10px; margin-right: 6px; white-space: nowrap; font-size: 13px; cursor: pointer; }
.cp-preset-x { margin-left: 2px; color: var(--muted); }
.cp-preset-x:hover { color: var(--red); }
.cp-empty { padding: 30px 10px; color: var(--muted); text-align: center; }
@media (max-width: 760px) {
  .cp-body { flex-direction: column; }
  .cp-left { flex: none; flex-direction: row; gap: 6px; overflow-x: auto; border-right: 0; border-bottom: 1px solid var(--line-soft); padding: 8px; }
  .cp-left .cp-tile { flex: 0 0 200px; }
  .cp-find { width: 100%; }
  .cp-pills, .cp-sub { margin-left: 0; }
  .cp-foot { flex-wrap: wrap; } .foot-left, .foot-right { flex: 1 1 100%; }
}

/* ═══ Question database ═══ */
#database-screen { overflow: hidden; }
.db-tabs {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px; width: 100%; max-width: var(--page-w); margin: 0 auto;
  padding: 0 var(--gutter) 14px; background: transparent; border: 0; flex: 0 0 auto;
}
.db-tab { height: 36px; padding: 0 14px; margin: 0; border: 0; border-radius: var(--r-sm); background: transparent; color: var(--muted); font-family: var(--font); font-size: 13px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; }
.db-tab:hover { color: var(--strong); background: var(--surface); }
.db-tab.active { background: var(--raised); color: var(--strong); font-weight: 700; border: 0; }
.db-plugtools[hidden] { display: none; }
.db-content { flex: 1 1 auto; min-height: 0; overflow-y: auto; display: block; }
.db-page { width: 100%; max-width: var(--page-w); margin: 0 auto; padding: 0 var(--gutter) 64px; }
.db-searchbar { margin-bottom: 0; }
.sbar-right { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-left: auto; }
.seg { display: inline-flex; padding: 3px; gap: 2px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); }
.seg button { height: 30px; padding: 0 12px; border: 0; border-radius: var(--r-sm); background: transparent; color: var(--muted); font-family: var(--font); font-size: 12.5px; cursor: pointer; }
.seg button:hover { color: var(--strong); }
.seg button[aria-pressed="true"] { background: var(--raised); color: var(--strong); font-weight: 700; }
.qrow { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 12px; }
.qrow .btn .accent-val, .accent-val { color: var(--accent); max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.count-badge { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 10px; background: var(--accent-strong); color: var(--on-accent); font-size: 11px; display: inline-flex; align-items: center; justify-content: center; }
.count-badge:empty { display: none; }
.drawer-panel { margin-top: 12px; padding: 18px; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px 20px; }
.drawer-panel[hidden] { display: none; }
.drawer-panel .f { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.drawer-panel .f > span { color: var(--muted); font-size: 12px; }
.drawer-panel .f .mode-input, .drawer-panel .f .qb-select { width: 100%; }
.drawer-panel .checks { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 2px 24px; }
@media (max-width: 900px) { .drawer-panel { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.years-pop { padding: 12px; width: 280px; }
.years-pop form { display: flex; flex-direction: column; gap: 10px; }
.years-pop .yrow { display: flex; gap: 8px; }
.ifield { display: flex; align-items: center; gap: 8px; min-width: 0; flex: 1; height: 36px; padding: 0 10px; border: 1px solid var(--line); border-radius: var(--r); background: var(--sunken); }
.ifield:focus-within { border-color: var(--accent); }
.ifield > span { color: var(--muted); font-size: 12px; }
.ifield input { flex: 1; width: 100%; min-width: 0; border: 0; outline: 0; background: transparent; color: var(--strong); font-family: var(--font); font-size: 13px; }
.rhead { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 22px 0 12px; }
.rhead .total { color: var(--strong); font-weight: 700; }
.results { display: flex; flex-direction: column; gap: 10px; }
.rfoot { display: flex; justify-content: center; margin-top: 18px; }
.db-empty { padding: 40px 20px; border: 1px dashed var(--line); border-radius: var(--r-lg); text-align: center; color: var(--muted); }
mark.db-hl { background: color-mix(in srgb, var(--yellow) 22%, transparent); color: var(--strong); border-radius: 3px; padding: 0 2px; font-weight: inherit; }

/* pager: page strip (wheel scrolls it sideways) + "Page n of N" jump */
.pager { display: flex; align-items: center; gap: 6px; }
.pager-strip {
  --fl: 0px; --fr: 0px; position: relative; display: flex; gap: 4px; width: min(320px, 36vw); overflow-x: auto; padding: 4px 2px;
  scrollbar-width: none; scroll-behavior: smooth; overscroll-behavior-x: contain;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 var(--fl), #000 calc(100% - var(--fr)), transparent);
  mask-image: linear-gradient(90deg, transparent, #000 var(--fl), #000 calc(100% - var(--fr)), transparent);
}
.pager-strip::-webkit-scrollbar { display: none; }
.pager-strip.fade-l { --fl: 18px; } .pager-strip.fade-r { --fr: 18px; }
.pager-strip button { flex: none; min-width: 36px; height: 32px; padding: 0 6px; border: 1px solid transparent; border-radius: var(--r-sm); background: transparent; color: var(--text); font-family: var(--font); font-size: 13px; cursor: pointer; }
.pager-strip button:hover { background: var(--raised); }
.pager-strip button[aria-current="page"] { background: var(--accent-strong); border-color: var(--accent); color: var(--on-accent); font-weight: 700; }
.jump { width: 300px; padding: 12px; }
.jump form { display: flex; gap: 8px; margin-bottom: 10px; }
.jump-grid { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 4px; max-height: 176px; overflow-y: auto; }
.jump-grid button { height: 32px; padding: 0; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--bg); color: var(--text); font-size: 12px; font-family: var(--font); cursor: pointer; }
.jump-grid button:hover { border-color: var(--accent); }
.jump-grid button[aria-current="page"] { background: var(--accent-strong); border-color: var(--accent); color: var(--on-accent); }
@media (max-width: 700px) { .pager-strip { display: none; } }

/* lists (sets, packets, frequency, plugins manage) */
.list { border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); overflow: hidden; }
.list-row { display: flex; align-items: center; gap: 14px; min-height: 52px; padding: 0 16px; border-bottom: 1px solid var(--line-soft); color: var(--text); text-decoration: none; }
.list-row:last-child { border-bottom: 0; }
.list-row.clickable { cursor: pointer; }
.list-row.clickable:hover { background: var(--surface-2); }
.list-row .lr-name { flex: 1; min-width: 0; color: var(--strong); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.list-row .lr-diff { flex: 0 0 190px; color: var(--muted); font-size: 13px; }
.list-row .lr-std { flex: 0 0 112px; display: flex; justify-content: flex-end; }
.list-row .lr-std .qtag { cursor: default; }
.list-row .lr-rank { flex: 0 0 32px; color: var(--muted); font-variant-numeric: tabular-nums; }
.list-row .lr-ans { flex: 0 1 300px; min-width: 0; color: var(--strong); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.list-row .lr-ans:hover { color: var(--accent); text-decoration: underline; }
.freq-bar { flex: 1; min-width: 40px; height: 6px; border-radius: 3px; background: var(--raised); overflow: hidden; }
.freq-bar span { display: block; height: 100%; background: var(--accent); }
.list-row .lr-count { flex: 0 0 64px; text-align: right; font-variant-numeric: tabular-nums; }
@media (max-width: 640px) { .list-row .lr-diff { display: none; } .list-row .lr-std { flex: 0 0 auto; } }
.db-toolbar { padding: 0; margin: 0 0 14px; background: transparent; border: 0 !important; gap: 8px; align-items: center; }
.db-crumb { padding: 0; margin: 0 0 14px; background: transparent; border: 0; font-size: 14px; gap: 8px; }
.db-crumb strong { color: var(--strong); }
.ext-link { background: none; border: 0; color: var(--accent); cursor: pointer; font-family: var(--font); font-size: inherit; padding: 0; }
.db-section-label { padding: 18px 0 8px; font-size: 11px; letter-spacing: 0.08em; color: var(--muted); }
.db-count { padding: 0; }

/* ═══ Question cards (search, starred, history, review, packets) ═══ */
.qcard { padding: 16px 18px; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); }
.qcard + .qcard { margin-top: 0; }
.qcard-head { display: flex; align-items: flex-start; gap: 10px; min-width: 0; }
.qcard-chev { margin-top: 6px; }
.qcard-title { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 12px; }
.qcard-ans { min-width: 0; font-size: 15px; font-weight: 700; color: var(--strong); overflow-wrap: anywhere; }
.qcard-ans u, .qcard-ans b { color: var(--strong); }
.qcard-kind { flex: none; font-size: 10.5px; letter-spacing: 0.08em; color: var(--muted); text-transform: uppercase; }
.qcard-meta { font-size: 11.5px; color: var(--muted); gap: 6px; }
.qcard-meta span { border-color: var(--line-soft); }
.qcard-side { gap: 8px; margin-left: auto; }
.qcard-answer { margin: 8px 0 0; font-size: 13px; color: var(--text); }
.qcard .ans { color: var(--strong); }
.qcard-body { margin: 10px 0 0; }
.qcard-text { font-size: 13.5px; line-height: 1.7; color: var(--text); }
.qcard-part { font-size: 13.5px; line-height: 1.7; }
.qcard-foot { color: var(--muted); font-size: 12px; }
.qcard-tags { margin-top: 12px; }
.qcard.compact .qcard-tags { display: none; }
.qcard.compact { padding: 12px 16px; }
.qcard.compact:hover { background: var(--surface-2); }
.qcard .qb-star, .qcard .star-toggle { font-size: 17px; }

/* ═══ Plugins page ═══ */
.extensions-container { width: 100%; max-width: var(--page-w); margin: 0 auto; padding: 0 var(--gutter) 64px; overflow: visible; }
#extensions-screen { overflow-y: auto; }
.ext-tabs { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-bottom: 18px; }
.ext-tabs .db-tab { flex: none; }
.ext-tabs .ext-bulk { margin-left: auto; display: inline-flex; gap: 8px; }
.pgroup { margin-bottom: 28px; }
.pgroup h2 { margin: 0 0 12px; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); font-weight: 500; }
.pgrid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
@media (max-width: 1100px) { .pgrid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 860px) { .pgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.ptile { display: flex; align-items: center; gap: 14px; min-height: 76px; padding: 14px 16px; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); color: var(--text); text-align: left; cursor: pointer; font-family: var(--font); }
.ptile:hover { border-color: var(--accent); background: var(--surface-2); }
.ptile b { display: block; color: var(--strong); font-size: 13.5px; line-height: 1.35; }
.ptile small { color: var(--muted); font-size: 11.5px; }
.picon { flex: none; width: 42px; height: 42px; border-radius: 10px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--line); background: var(--bg); font-weight: 800; font-size: 13px; color: var(--c, var(--accent)); }
.ext-empty-state { padding: 34px 20px; border: 1px dashed var(--line); border-radius: var(--r-lg); color: var(--muted); text-align: center; }
.ext-dropzone { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 12px; min-height: 88px; padding: 16px; border: 2px dashed var(--line); border-radius: var(--r-lg); background: transparent; color: var(--muted); text-align: center; }
.ext-dropzone .ext-drop-icon { margin: 0; }
.ext-dropzone.dragging { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, transparent); }
.ext-drop-error { flex-basis: 100%; }
.ext-list { margin-top: 16px; display: block; }
.ext-row { display: flex; align-items: center; gap: 14px; min-height: 58px; padding: 10px 16px; border-bottom: 1px solid var(--line-soft); }
.ext-row:last-child { border-bottom: 0; }
.ext-row .picon { width: 36px; height: 36px; }
.ext-row .er-name { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.ext-row .er-name b { color: var(--strong); font-weight: 500; display: inline-flex; align-items: center; gap: 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ext-row .er-name small { color: var(--muted); font-size: 11.5px; }
.ext-row .er-ver { flex: 0 0 80px; color: var(--muted); font-size: 12.5px; font-variant-numeric: tabular-nums; }
.ext-row .er-grp { flex: 0 0 80px; color: var(--muted); font-size: 12px; }
.ext-row .ext-remove { width: 30px; height: 30px; border-radius: var(--r-sm); border: 1px solid transparent; background: transparent; color: var(--muted); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; }
.ext-row .ext-remove:hover { color: var(--red); border-color: var(--red); }
.ext-row-settings { padding: 10px 16px 14px 66px; border-bottom: 1px solid var(--line-soft); background: var(--bg); }
.ext-row-settings:last-child { border-bottom: 0; }
@media (max-width: 640px) { .ext-row .er-grp { display: none; } .ext-row .er-ver { flex: 0 0 auto; } }
.theme-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
.theme-card { border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); overflow: hidden; }
.theme-card.on { border-color: var(--go); }
.theme-prev { height: 116px; padding: 16px; display: flex; flex-direction: column; gap: 10px; }
.theme-prev i { display: block; border-radius: 4px; }
.theme-foot { display: flex; align-items: center; gap: 8px; padding: 12px 14px; }
.theme-foot b { flex: 1; min-width: 0; color: var(--strong); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.theme-foot .btn.in-use { border-color: var(--go-strong); color: var(--go); background: color-mix(in srgb, var(--green) 12%, transparent); }
.ext-switch { width: 42px; height: 24px; }
.ext-slider { border-radius: 12px; background: var(--line); border: 0; }
.ext-slider::before { width: 18px; height: 18px; left: 3px; background: #fff; }
.ext-switch input:checked + .ext-slider { background: var(--accent-strong); border: 0; }
.ext-switch input:checked + .ext-slider::before { transform: translate(18px, -50%); background: #fff; }
.ext-settings-group-title { font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); font-weight: 500; }

/* ═══ Overlays reused from before (review, history, confirm, hotkey sheet) ═══ */
.hotkey-sheet, .review-viewer, .confirm-overlay { background: color-mix(in srgb, #010409 72%, transparent); }
.hotkey-sheet-box, .review-viewer-box, .confirm-box { border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--bg); box-shadow: var(--shadow); }
.hotkey-sheet-title { font-size: 12px; letter-spacing: 0.08em; color: var(--muted); }
.save-menu, .qb-ctx-menu { border-radius: var(--r); border-color: var(--line); background: var(--surface); box-shadow: var(--shadow); }

/* ═══ Stats / profile pages: same page frame ═══ */
.stats-container, .player-container { width: 100%; max-width: var(--page-w); margin: 0 auto; padding: 0 var(--gutter) 64px; }
.stats-section { border-color: var(--line); border-radius: var(--r-lg); background: var(--surface); }
.stats-section-title { color: var(--muted); font-weight: 500; letter-spacing: 0.08em; font-size: 11px; text-transform: uppercase; }
.stat-card { background: var(--bg); border: 1px solid var(--line-soft); border-radius: var(--r); }
.stat-card-value { color: var(--strong); }

/* ═══ Setup overlay (first launch) ═══ */
.setup-box { border-radius: var(--r-lg); border-color: var(--line); background: var(--bg); box-shadow: var(--shadow); }
.setup-title { color: var(--strong); letter-spacing: -0.01em; font-size: 20px; text-transform: none; }
.setup-field input { height: 40px; border-radius: var(--r); background: var(--sunken); }

/* the old CRT wipe stays, but quieter */
#crt-overlay.wipe::after { opacity: 0.35; }

/* ── result rows (practice) ── */
.ra-row { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; margin: 2px 0; }
.ra-k { flex: 0 0 96px; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.qcard-answer .ra-k { flex: none; margin-right: 6px; }
.ra-you.ok { color: var(--green); }
.ra-you.bad { color: var(--red); }
.ra-over { color: var(--yellow); font-size: 12px; }
.ra-keys { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: 12px; }
.ra-keys kbd { font-size: 11px; }
.ra-cel { color: var(--muted); font-size: 13px; }
.result-unsure { margin-left: 0; }

/* question meta: badges, not the old bordered spans */
.question-meta > span { height: 26px; }
.question-meta .badge { border: 0; padding: 0 10px; }
.question-meta .badge > span { display: inline; height: auto; padding: 0; border: 0; border-radius: 0; }
.question-meta .badge > .dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; }
.question-meta .year-badge { border: 0; }
.question-meta .q-num { border: 0; padding: 0; margin-right: 4px; color: var(--muted); }
.question-meta .q-spacer { flex: 1; border: 0; padding: 0; }
.question-meta .qb-info { height: 16px; width: 16px; padding: 0; }
.diff-toggles .dt-lbl { color: var(--muted); padding: 0 8px 0 6px; font-size: 12.5px; }
.pop.up { top: auto; bottom: calc(100% + 6px); }
.qcard-meta { gap: 6px; align-items: center; }
.qcard-meta .badge { height: 24px; }

/* ═══ Multiplayer (built in) ═══ */
.ext-page-body.mp-flush { padding: 0 var(--gutter) 40px; max-width: var(--page-w); margin: 0 auto; width: 100%; display: block; }
.mp-lobby { display: flex; flex-direction: column; align-items: stretch; gap: 24px; max-width: 980px; margin: 8px auto 0; }
.mp-who { align-self: center; display: inline-flex; align-items: center; gap: 12px; padding: 8px 18px 8px 8px; border: 1px solid var(--line); border-radius: 30px; background: var(--surface); cursor: text; }
.mp-who .avatar { width: 40px; height: 40px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--accent-strong); color: var(--on-accent); font-weight: 800; font-size: 15px; }
.mp-who-txt { display: flex; flex-direction: column; gap: 1px; }
.mp-who-txt .eyebrow { font-size: 10px; }
.mp-who input { width: 200px; border: 0; outline: 0; background: transparent; color: var(--strong); font-family: var(--font); font-weight: 700; font-size: 15px; padding: 0; }
.mp-card { display: flex; flex-direction: column; gap: 14px; padding: 24px; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); min-height: 270px; }
.mp-card h2 { margin: 0; display: flex; align-items: center; gap: 8px; font-size: 18px; color: var(--strong); }
.mp-card .btn-lg { width: 100%; }
.mp-card .btn-lg:disabled { opacity: 0.5; }
.mp-field { display: flex; flex-direction: column; gap: 8px; color: var(--muted); font-size: 13px; }
.code-input { width: 100%; height: 64px; padding: 0 18px; border: 1px solid var(--line); border-radius: var(--r); background: var(--sunken); color: var(--strong); font-family: var(--font); font-size: 28px; font-weight: 800; letter-spacing: 0.3em; text-transform: uppercase; }
.code-input::placeholder { letter-spacing: 0.3em; color: color-mix(in srgb, var(--muted) 45%, transparent); }
.code-input:focus { border-color: var(--go); outline: 0; }
.mp-status { min-height: 18px; text-align: center; color: var(--muted); font-size: 13px; }
.mp-status:empty { display: none; }
.mp-recent h2 { margin: 0 0 10px; }
.mp-recent-row { width: 100%; border: 0; border-bottom: 1px solid var(--line-soft); background: transparent; font-family: var(--font); font-size: 13px; text-align: left; }
.mp-rcode { flex: 0 0 90px; color: var(--strong); letter-spacing: 0.25em; }
.mp-rwho { flex: 1; min-width: 0; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mp-rwhen { color: var(--muted); }
.mp-rjoin { color: var(--go); }
#ext-page-multiplayer-lobby.mp-in-room > .top-bar { display: none; }
.mp-room { display: flex; flex-direction: column; gap: 14px; }
.room-head { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; padding-top: 18px; }
.mp-leave-btn { margin-left: -12px; padding: 0 12px 0 8px; }
.rh-lbl { color: var(--muted); }
.rh-code { color: var(--strong); letter-spacing: 0.3em; font-size: 16px; }
.rh-host { background: color-mix(in srgb, var(--green) 14%, transparent); color: var(--green); }
.rh-spec { background: var(--raised); color: var(--muted); }
.rh-q { color: var(--muted); }
.mp-layout { display: grid !important; grid-template-columns: minmax(0, 1fr) 340px; gap: 28px; align-items: start; overflow: visible !important; }
@media (max-width: 960px) { .mp-layout { grid-template-columns: minmax(0, 1fr); } }
.mp-layout .question-area { padding: 0; overflow: visible; gap: 18px; min-height: 360px; }
.room-q { font-size: 17px; line-height: 1.85; color: var(--strong); }
.mp-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; }
.mp-actions:not(:has(> :not([hidden]))) { display: none; }
.buzz-btn { height: 64px; min-width: 240px; padding: 0 28px; border: 0; border-radius: var(--r-lg); background: var(--go-strong); color: #fff; font-family: var(--font); font-weight: 800; font-size: 20px; letter-spacing: 0.12em; box-shadow: inset 0 -4px 0 rgba(0, 0, 0, 0.35); cursor: pointer; }
.buzz-btn:hover { background: var(--go); }
.buzz-btn:disabled { opacity: 0.5; cursor: default; }
.buzz-btn[hidden], .mp-actions [hidden] { display: none; }
.mp-next-btn { height: 48px; padding: 0 24px; font-size: 15px; }
.mp-pause-btn { height: 48px; }
.mp-panel { border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); overflow: hidden; position: sticky; top: 0; }
.panel-tabs { display: flex; gap: 4px; padding: 8px; border-bottom: 1px solid var(--line-soft); }
.panel-tabs button { position: relative; flex: 1; height: 36px; border: 0; border-radius: var(--r-sm); background: transparent; color: var(--muted); font-family: var(--font); font-size: 13px; cursor: pointer; }
.panel-tabs button:hover { color: var(--strong); }
.panel-tabs button[aria-selected="true"] { background: var(--raised); color: var(--strong); font-weight: 700; }
.unread { position: absolute; top: 7px; right: calc(50% - 30px); width: 9px; height: 9px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 3px var(--surface); }
.unread[hidden] { display: none; }
.mp-panel .panel-body { padding: 12px; height: 440px; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
.mp-panel .panel-body[hidden] { display: none; }
.mp-panel .panel-chat { padding: 0; gap: 0; overflow: hidden; }
.mp-scores { display: flex; flex-direction: column; gap: 8px; }
.mp-player { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--line-soft); border-radius: var(--r); background: var(--bg); }
.mp-player .avatar { flex: none; width: 36px; height: 36px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; color: #fff; font-weight: 800; font-size: 14px; }
.mp-player .nm { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.mp-player .nm b { color: var(--strong); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mp-player .nm span { color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mp-player .sc { color: var(--strong); font-weight: 800; font-size: 18px; }
.mp-player.mp-you { border-color: color-mix(in srgb, var(--accent) 45%, transparent); }
.mp-player.mp-off { opacity: 0.5; }
.mp-team-row { display: flex; justify-content: space-between; padding: 6px 2px 2px; font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); border: 0; }
.mp-team-row strong { color: var(--strong); }
.mp-chat { flex: 1; min-height: 0; overflow-y: auto; padding: 12px; display: flex; flex-direction: column; gap: 8px; background: transparent; border: 0; border-radius: 0; }
.mp-chat-msg { line-height: 1.5; font-size: 13px; overflow-wrap: anywhere; }
.mp-chat-msg strong { color: var(--accent); }
.mp-chat-sys { color: var(--muted); font-size: 12px; font-style: normal; }
.mp-chatrow { display: flex; gap: 8px; padding: 10px 12px; border-top: 1px solid var(--line-soft); }
.mp-chatrow .mode-input { flex: 1; min-width: 0; height: 36px; }
#mp-chat-scope { flex: 0 0 auto; min-width: 46px; height: 36px; }
#mp-chat-scope.mp-scope-team { color: var(--accent); }
.mp-chat-teamtag { font-size: 9px; font-weight: 700; letter-spacing: 0.5px; color: var(--accent); border: 1px solid var(--accent); border-radius: 4px; padding: 0 3px; }
.mp-log { display: flex; flex-direction: column; gap: 8px; max-height: none; }
.mp-logrow { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--line-soft); border-radius: var(--r); background: var(--bg); }
.mp-logrow .nm { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.mp-logrow .nm b { color: var(--strong); font-weight: 500; }
.mp-logrow .nm span { color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mp-log-empty { padding: 6px 2px; font-size: 13px; }
.mp-history { border: 0; padding: 0; background: none; }
.mp-timer-bar { height: 5px; border-radius: 3px; background: var(--raised); border: 0; overflow: hidden; margin-top: 6px; }
.mp-timer-bar > div { height: 100%; background: var(--accent); transition: width 0.12s linear; }
.mp-live { color: var(--text); word-break: break-word; overflow-wrap: anywhere; }
.mp-live:not(:empty)::after { content: "\258E"; color: var(--accent); animation: blink 1s steps(1) infinite; }
.mp-power-mark { color: var(--power-mark, var(--yellow)); font-weight: 700; }
.mp-bonus { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; border-top: 1px solid var(--line-soft); padding-top: 10px; }
.mp-bpart { display: flex; flex-direction: column; gap: 6px; }
.mp-disconnect { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0.55); z-index: 50; }
.mp-disc-box { background: var(--surface); border: 1px solid var(--red); border-radius: var(--r-lg); padding: 22px; text-align: center; display: flex; flex-direction: column; gap: 12px; max-width: 340px; }
.mp-disc-title { font-size: 15px; font-weight: 700; color: var(--red); }
.mp-disc-actions { display: flex; gap: 10px; justify-content: center; }
.mp-off { opacity: 0.5; }
.mp-save { cursor: pointer; color: var(--muted); font-size: 18px; margin-left: 4px; display: inline-flex; align-items: center; justify-content: center; line-height: 1; width: 20px; height: 20px; vertical-align: middle; }
.mp-save:hover { color: var(--accent); }
.mp-avatar { display: inline-block; max-width: 72px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; font-size: 11px; opacity: 0.85; margin-right: 3px; }
.mp-borrowed .filter-section:has(#panel-buzz-timer), .mp-borrowed #sec-timing .slider-group:has(#panel-buzz-timer), .mp-borrowed #sec-timing .slider-group:has(#panel-buzz-window), .mp-borrowed #sec-timing .slider-group:has(#panel-bonus-timer) { display: none; }
.mp-borrowed label:has(#filter-starred), .mp-borrowed label:has(#opt-allow-rebuzzes), .mp-borrowed label:has(#opt-stop-on-power), .mp-borrowed label:has(#opt-allow-skips) { display: none; }
.mp-borrowed #ext-practice-section { display: none; }
.mp-borrowed .fp-count { visibility: hidden; }
.mp-borrowed .mp-injected .slider-group { display: grid; grid-template-columns: 112px minmax(0, 1fr) 52px; align-items: center; gap: 10px; margin-top: 6px; }
.mp-borrowed .mp-injected .slider-group > span:first-child { font-size: 12px; min-width: 0 !important; }
.mp-borrowed .mp-injected .mode-field { margin-top: 10px; }
.mp-borrowed .mp-injected .mode-input { width: 100%; }
#mp-chat-scope:disabled, #mp-chat-scope:disabled:hover { opacity: 0.45; cursor: default; background: transparent; color: var(--muted); }
#title-screen #title-art, #title-screen #title-streak, #title-screen #title-status { display: none !important; }

/* ── pass 2 fixes ── */
#difficulty-filters.diff-checks { flex-direction: row; }
.fp-checks, .filters-panel:not(.open) .fp-checks, :is(#practice-screen, .mp-room) .filters-panel .fp-checks { grid-template-columns: minmax(0, 1fr); }
.practice-side .stat-score, .practice-side .stat-heard { grid-column: auto; }
.practice-side .stat-cel { grid-column: span 2; }
.history-panel .btn, #btn-history-open, #mp-history-open { gap: 0; }
.result-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 2px; }
.result-actions[hidden] { display: none; }
.result-actions .btn-primary { height: 44px; padding: 0 22px; }
.settings-modal:focus, .cat-modal:focus, .set-modal:focus { outline: none; }
.db-page .search-results { padding: 0; overflow: visible; flex: none; }
.db-page .db-browse { padding: 0; overflow: visible; flex: none; }
.db-page .db-row { padding: 0 16px; justify-content: flex-start; }
.qcard .qcard-chev { display: none; }
.qcard-head { cursor: pointer; }
.qb-select[data-for="db-search-type"] { width: 196px; }
.qb-select[data-for="freq-cat"], .qb-select[data-for="freq-alt"], .qb-select[data-for="freq-deep"] { width: 200px; }
.qb-select[data-for="freq-sub"] { width: 220px; }
.qb-select[data-for="freq-type"] { width: 190px; }
.qb-select[data-for="freq-limit"] { width: 120px; }
.qb-select[data-for="db-sort"] { width: 160px; }
.rv-diff-grid { gap: 2px; padding: 4px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); flex: 0 1 auto; flex-wrap: wrap; }
.rv-diff-chip { position: relative; display: inline-flex; align-items: center; justify-content: center; min-width: 30px; height: 28px; padding: 0 4px; border: 0; border-radius: 5px; background: transparent; color: var(--muted); font-size: 12.5px; cursor: pointer; }
.rv-diff-chip input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.rv-diff-chip:hover { background: var(--raised); color: var(--strong); }
.rv-diff-chip:has(input:checked) { background: var(--accent-strong); color: var(--on-accent); font-weight: 700; border: 0; }

/* ── 2026-10 pass 3 ── */
/* category, difficulty and year wait until the question has been read */
.question-meta .qm-info { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 8px; min-width: 0; height: auto; padding: 0; border: 0; border-radius: 0; background: none; transition: opacity 260ms ease, display 260ms allow-discrete; }
.question-meta.qm-reading .qm-info { display: none; opacity: 0; }
@starting-style { .question-meta:not(.qm-reading) .qm-info { opacity: 0; } }
/* page numbers: four digits get a smaller font so they fit the boxes */
.jump-grid button.d4 { font-size: 10.5px; letter-spacing: -0.03em; }
.pager-strip button.d4 { font-size: 12px; padding: 0 4px; }
/* search: sections render as they arrive; a cached page shows at once */
.db-sec { display: contents; }
.db-sec-wait { display: block; }
.search-results.db-loading { opacity: 0.6; transition: opacity 120ms ease; }
.search-results > .qcard, .db-sec > .qcard { content-visibility: auto; contain-intrinsic-size: auto 220px; }
.db-browse > .list-row { content-visibility: auto; contain-intrinsic-size: auto 52px; }
.sbar-right { cursor: default; }
/* frequency */
.freq-toolbar { margin-top: 0; }
.qb-select[data-for="freq-type"] { width: auto; }
.freq-list .list-row .lr-rank { flex: 0 0 46px; }
/* multiplayer lobby: one card — a code joins that room, an empty box makes one */
.mp-join-card { width: 100%; max-width: 520px; align-self: center; min-height: 0; }
.mp-join-card .btn-lg { margin-top: 6px; }
.mp-field > span { display: inline-flex; align-items: center; gap: 6px; }
/* confirm dialog */
.confirm-box { min-width: 340px; padding: 22px 22px 18px; gap: 10px; }
.confirm-title { font-size: 16px; font-weight: 700; color: var(--strong); }
.confirm-msg { font-size: 15px; font-weight: 700; color: var(--strong); }
.confirm-detail { color: var(--muted); font-size: 13px; }
.confirm-actions { margin-top: 10px; }
.btn-danger { background: color-mix(in srgb, var(--red) 82%, #000); border-color: color-mix(in srgb, var(--red) 82%, #000); color: #fff; font-weight: 700; }
.btn-danger:hover { background: var(--red); border-color: var(--red); color: #fff; }

/* ═══ Motion: everything that opens or closes animates ═══ */
@media (prefers-reduced-motion: no-preference) {
  /* screens fade in */
  #app > .screen.active { animation: qb-screen-in 200ms var(--ease-out); }
  /* popovers, dropdowns, menus, tag suggestions */
  .pop, .qb-select-popup, .sugg, .qb-ctx-menu, .save-menu {
    transition: opacity 150ms ease, transform 170ms var(--ease-out), display 170ms allow-discrete, overlay 170ms allow-discrete;
  }
  .pop[hidden], .qb-select-popup[hidden], .sugg[hidden] { display: none; opacity: 0; transform: translateY(-6px) scale(0.98); }
  .pop.up[hidden], .qb-select.up .qb-select-popup[hidden] { transform: translateY(6px) scale(0.98); }
  @starting-style {
    .pop:not([hidden]), .qb-select-popup:not([hidden]), .sugg:not([hidden]), .save-menu { opacity: 0; transform: translateY(-6px) scale(0.98); }
    .pop.up:not([hidden]), .qb-select.up .qb-select-popup:not([hidden]) { opacity: 0; transform: translateY(6px) scale(0.98); }
  }
  .tb-menu { transform-origin: top right; }
  /* modals: the backdrop fades, the window rises */
  .qb-overlay, .confirm-overlay, .review-viewer, .hotkey-sheet, .setup-overlay, .drawer-backdrop {
    transition: opacity 190ms ease, display 190ms allow-discrete, overlay 190ms allow-discrete;
  }
  .qb-overlay.hidden, .setup-overlay.hidden, .drawer-backdrop[hidden] { opacity: 0; }
  @starting-style {
    .qb-overlay:not(.hidden), .confirm-overlay, .review-viewer, .hotkey-sheet, .setup-overlay:not(.hidden), .drawer-backdrop:not([hidden]) { opacity: 0; }
  }
  :is(.qb-overlay, .confirm-overlay, .review-viewer, .hotkey-sheet, .setup-overlay) > :is(.settings-modal, .confirm-box, .review-viewer-box, .hotkey-sheet-box, .setup-box, div:only-child) {
    transition: transform 240ms var(--ease-out), opacity 200ms ease;
  }
  :is(.qb-overlay.hidden, .setup-overlay.hidden) > :is(.settings-modal, .setup-box) { transform: translateY(10px) scale(0.97); opacity: 0; }
  @starting-style {
    :is(.qb-overlay:not(.hidden), .confirm-overlay, .review-viewer, .hotkey-sheet, .setup-overlay:not(.hidden)) > :is(.settings-modal, .confirm-box, .review-viewer-box, .hotkey-sheet-box, .setup-box, div:only-child) { transform: translateY(10px) scale(0.97); opacity: 0; }
  }
  /* overlays and menus that are removed on close play this first (animateRemove) */
  .qb-leaving { animation: qb-fade-out 170ms ease forwards; }
  .qb-leaving > :is(.settings-modal, .confirm-box, .review-viewer-box, .hotkey-sheet-box, div:only-child) { animation: qb-sink 170ms ease forwards; }
  /* in-page drawers (Database filters) */
  .drawer-panel { transition: opacity 180ms ease, transform 200ms var(--ease-out), display 200ms allow-discrete; }
  .drawer-panel[hidden] { display: none; opacity: 0; transform: translateY(-6px); }
  @starting-style { .drawer-panel:not([hidden]) { opacity: 0; transform: translateY(-6px); } }
  /* collapsible sections (stats, plugins) */
  .qb-coll > .qb-coll-body { transition: opacity 180ms ease, display 180ms allow-discrete; }
  .qb-coll.qb-collapsed > .qb-coll-body { opacity: 0; }
  @starting-style { .qb-coll:not(.qb-collapsed) > .qb-coll-body { opacity: 0; } }
  .collapse-chevron { transition: transform 180ms var(--ease-out); }
  /* result, answer box and placeholders appear rather than pop */
  .result-area:not(.hidden), .buzz-area:not(.hidden) { animation: qb-rise 200ms var(--ease-out); }
  .cp-sub, .cp-find-pop { animation: qb-rise 160ms var(--ease-out); }
  #qb-tooltip { transition: opacity 120ms ease; }
}
/* opacity only: a transform would re-anchor the fixed drawers inside the screen */
@keyframes qb-screen-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes qb-rise { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes qb-fade-out { from { opacity: 1; } to { opacity: 0; } }
@keyframes qb-sink { from { opacity: 1; transform: none; } to { opacity: 0; transform: translateY(8px) scale(0.97); } }
@media (prefers-reduced-motion: reduce) { .filters-panel, #app > .screen { transition: none !important; } }

/* ── 2026-10 pass 4 ── */
/* star and save (+) buttons: centred SVG marks instead of the thin, off-centre
   ☆ / + glyphs. The glyph stays in the DOM (code still toggles it); the mask
   follows .on. */
.star-btn, .qb-star, .star-toggle, .mp-save {
  display: inline-flex; align-items: center; justify-content: center; position: relative;
  font-size: 0 !important; line-height: 0 !important; color: var(--muted); cursor: pointer;
}
.star-btn::before, .qb-star::before, .star-toggle::before, .mp-save::before {
  content: ""; display: block; width: 15px; height: 15px; background: currentColor;
  -webkit-mask: var(--ico) center / contain no-repeat; mask: var(--ico) center / contain no-repeat;
}
.star-btn:not(.save-plus), .qb-star, .star-toggle {
  --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 3.2l2.62 5.3 5.85.86-4.23 4.12 1 5.83L12 16.56l-5.24 2.75 1-5.83-4.23-4.12 5.85-.86z' fill='none' stroke='black' stroke-width='2.3' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.star-btn.on:not(.save-plus), .qb-star.on, .star-toggle.on {
  --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 3.2l2.62 5.3 5.85.86-4.23 4.12 1 5.83L12 16.56l-5.24 2.75 1-5.83-4.23-4.12 5.85-.86z' fill='black' stroke='black' stroke-width='2.3' stroke-linejoin='round'/%3E%3C/svg%3E");
  color: var(--yellow);
}
.save-plus, .mp-save {
  --ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 5v14M5 12h14' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round'/%3E%3C/svg%3E");
}
.star-btn:hover, .qb-star:hover, .star-toggle:hover, .mp-save:hover { color: var(--strong); }
.star-btn.on:not(.save-plus):hover, .qb-star.on:hover, .star-toggle.on:hover { color: var(--yellow); }
.qcard .qb-star, .qcard .star-btn, .qcard .star-toggle { width: 30px; height: 30px; border-radius: 50%; opacity: 1; }
.qcard .qb-star::before, .qcard .star-btn::before, .qcard .star-toggle::before { width: 16px; height: 16px; }
.qcard .qb-star:hover, .qcard .star-btn:hover, .qcard .star-toggle:hover { background: var(--raised); }
.question-meta .star-btn { width: 30px; height: 30px; border-radius: 50%; }
/* lists clip their rows, so a hovered row never covers the rounded corners */
.list, .db-page .list.db-browse, .ext-list { overflow: clip; }
/* Plugins → Manage: one compact row per plugin (the old card styles stacked
   everything vertically) */
.ext-list .ext-row.ext-card {
  flex-direction: row; align-items: center; gap: 14px; min-height: 58px; padding: 10px 16px; margin: 0;
  border: 0; border-bottom: 1px solid var(--line-soft); border-radius: 0; background: transparent; box-shadow: none; text-align: left;
}
.ext-list .ext-row.ext-card:hover { background: var(--surface-2); }
.ext-list .ext-row.ext-card.active { border-color: var(--line-soft); box-shadow: none; }
.ext-list .ext-row.ext-card:last-child { border-bottom: 0; }
.ext-list { display: block; gap: 0; }
.ext-row .er-name { align-items: flex-start; text-align: left; }
.ext-row .ext-switch { flex: none; margin: 0; }
.ext-row-settings { padding: 12px 16px 16px 66px; }

/* the category launcher (CategoryButton) wherever it sits */
.btn.cat-launch { flex: none; max-width: 100%; }
.btn.cat-launch .accent-val { max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rv-filterbar .btn.cat-launch, .db-toolbar .btn.cat-launch { height: 36px; }
/* Review: a modal — what's due, the filters as rows, the actions in the footer */
.review-ovl { position: fixed; inset: 0; z-index: 70; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, #010409 72%, transparent); }
.rv-modal { width: min(1100px, calc(96vw / var(--ui-zoom, 1))); height: min(740px, calc(92vh / var(--ui-zoom, 1))); max-height: none; }
.rv-modal .modal-head .rv-due { color: var(--muted); font-size: 13px; }
.rv-cols { flex: 1 1 auto; min-height: 0; display: flex; }
.rv-body { flex: 1 1 auto; min-width: 0; padding: 14px 28px 16px; overflow-y: auto; }
.rv-side { flex: 0 0 360px; display: flex; flex-direction: column; gap: 10px; min-height: 0; padding: 22px 24px; border-left: 1px solid var(--line-soft); background: var(--surface); overflow-y: auto; }
.rv-total { display: flex; align-items: baseline; gap: 10px; }
.rv-total b { font-size: 40px; line-height: 1; font-weight: 800; color: var(--strong); letter-spacing: -0.02em; }
.rv-total span { color: var(--muted); font-size: 13px; }
.rv-split { color: var(--text); font-size: 13px; }
.rv-side-h { margin-top: 14px; }
.rv-bars { display: flex; flex-direction: column; gap: 4px; }
.rv-bar { display: grid; grid-template-columns: 10px minmax(0, 1fr) 90px 34px; align-items: center; gap: 10px; width: 100%; padding: 7px 8px; border: 1px solid transparent; border-radius: var(--r-sm); background: transparent; color: var(--text); font-family: var(--font); font-size: 12.5px; text-align: left; cursor: pointer; }
.rv-bar:hover:not(:disabled) { background: var(--raised); }
.rv-bar.on { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, transparent); }
.rv-bar:disabled { cursor: default; }
.rv-bar .dot { width: 8px; height: 8px; border-radius: 50%; }
.rv-bar-n { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--strong); }
.rv-bar-t { height: 6px; border-radius: 3px; background: var(--line-soft); overflow: hidden; }
.rv-bar-t i { display: block; height: 100%; border-radius: 3px; opacity: 0.85; }
.rv-bar-c { text-align: right; color: var(--muted); }
.rv-empty { color: var(--muted); font-size: 13px; padding: 8px 0; }
.rv-f { display: grid; grid-template-columns: 120px minmax(0, 1fr) auto; align-items: center; gap: 16px; min-height: 64px; padding: 8px 0; border-bottom: 1px solid var(--line-soft); }
.rv-f:last-child { border-bottom: 0; }
.rv-f > :nth-child(2):last-child { grid-column: 2 / span 2; justify-self: start; }
.rv-k { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: 12.5px; }
.rv-f .rv-dual { min-width: 0; margin: 0; }
.rv-range { min-width: 82px; text-align: right; color: var(--strong); font-size: 12.5px; }
.rv-f .diff-toggles { flex-wrap: wrap; }
.rv-foot { flex-wrap: wrap; gap: 8px; }
.rv-count { color: var(--muted); font-size: 12.5px; margin-right: 4px; }
.rv-danger:hover { color: var(--red); }
#rv-play { min-width: 150px; }
@media (max-width: 860px) { .rv-cols { flex-direction: column; overflow-y: auto; } .rv-side { flex: none; border-left: 0; border-top: 1px solid var(--line-soft); } .rv-body { overflow: visible; } }
@media (max-width: 620px) { .rv-f { grid-template-columns: minmax(0, 1fr); gap: 6px; } .rv-f > :nth-child(2):last-child { grid-column: auto; } }

/* ── 2026-10 pass 5 ── */
/* toggle chips keep their real checkbox, hidden (the palette checkbox style
   must not give it a size, or it pushes the number off-centre) */
.diff-toggles input[type="checkbox"], #difficulty-filters .diff-row input[type="checkbox"], .rv-diff-chip input[type="checkbox"] {
  position: absolute; width: 1px; height: 1px; min-width: 0; margin: 0; padding: 0; border: 0; opacity: 0; pointer-events: none;
}
.diff-toggles label > span, #difficulty-filters .diff-row > span { display: block; width: 100%; text-align: center; font-variant-numeric: tabular-nums; }
/* a category picker opened from another window (Review, history…) sits above it */
.cat-ovl { z-index: 90; }


/* ── locked for the required question database (app.js lockForDbUpdate) ──
   Settings stays open on Updates with only the download in it. */
body.db-locked #set-nav .set-nav-btn:not([data-sec="updates"]) { display: none; }
body.db-locked #settings-modal .settings-ovl-close { display: none; }
body.db-locked #ovl-updates > :not(.db-lock):not(.db-lock-retry):not(#update-status) { display: none; }
body.db-locked #update-status:empty { display: none; }
body.db-locked .app-topbar { pointer-events: none; }
.db-lock { display: flex; align-items: flex-start; gap: 16px; padding: 4px 0 18px; }
.db-lock-ic { flex: none; width: 48px; height: 48px; border-radius: 12px; display: inline-flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--accent) 14%, transparent); color: var(--accent); }
.db-lock-txt h3 { margin: 2px 0 6px; font-size: 18px; color: var(--strong); }
.db-lock-txt p { margin: 0; color: var(--muted); font-size: 13px; line-height: 1.6; }
body.db-locked #update-status { padding: 12px 0 4px; font-size: 13px; color: var(--text); }
body.db-locked #update-status .upd-bar { height: 8px; }
.db-lock-retry { padding-top: 14px; }
.db-lock-retry[hidden] { display: none; }

/* ═══ Website (onlinequiz.net: html.web, set by server.js) ═══
   The only visible differences from the app: the home Download box, the
   Download page, the Plugins file button instead of drop zones, and no
   Settings → Updates (there is nothing to update in a browser). */
html:not(.web) .web-only { display: none !important; }
html.web .set-nav-btn[data-sec="updates"], html.web #ovl-updates { display: none !important; }
.home-dl { width: 100%; max-width: 1000px; flex-direction: row; align-items: center; gap: 28px; }
.home-dl-text { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 8px; }
.home-dl-text p { margin: 0; font-size: 14px; line-height: 1.65; color: var(--muted); }
.hcard.home-dl > .btn { width: auto; flex: 0 0 auto; margin-top: 0; padding: 0 24px; }
@media (max-width: 760px) { .home-dl { flex-direction: column; align-items: stretch; gap: 16px; } .hcard.home-dl > .btn { width: 100%; } }
#download-screen { overflow-y: auto; }
.download-container { width: 100%; max-width: var(--page-w); margin: 0 auto; padding: 0 var(--gutter) 64px; }
.dl-page { max-width: 900px; display: flex; flex-direction: column; gap: 20px; }
.dl-card { display: flex; align-items: center; gap: 18px; padding: 24px; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); }
.dl-ico { width: 56px; height: 56px; flex: 0 0 auto; display: grid; place-items: center; border-radius: 14px; color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); }
.dl-main { flex: 1 1 auto; min-width: 0; }
.dl-main h2 { margin: 0 0 6px; font-size: 20px; color: var(--strong); }
.dl-meta { font-size: 13px; line-height: 1.6; color: var(--muted); }
.dl-meta .dot-sep { margin: 0 8px; opacity: 0.6; }
.dl-btn { flex: 0 0 auto; text-decoration: none; }
.dl-steps { padding: 20px 24px; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--surface); }
.dl-steps h3 { margin: 0 0 12px; font-size: 11px; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.dl-steps ol { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 8px; font-size: 14px; line-height: 1.6; color: var(--text); }
.dl-steps b { color: var(--strong); font-weight: 600; }
@media (max-width: 640px) { .dl-card { flex-wrap: wrap; } .dl-btn { width: 100%; } }
.ext-import { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.dl-btns { display: flex; flex-direction: column; gap: 8px; flex: 0 0 auto; align-items: stretch; }
.dl-btns { min-width: 240px; }
.dl-btns .btn { width: 100%; margin: 0; justify-content: flex-start; gap: 8px; }
.dl-size { margin-left: auto; padding-left: 14px; font-weight: 400; opacity: 0.75; font-size: 12px; }
.dl-card:not(.dl-mine) .dl-ico { color: var(--muted); background: var(--raised); }
