/* Paper Studio — Dashboard theme (2026-09)
   1) 44px grid on content canvas only; frosted glass cards
   2) Fixed grouped collapsible sidebar
   3) One accent; rest B/W/gray
   4) Dark luminance layers; striped badges; empty zones = flat no-grid
*/
:root{
  --dash-bg-0:#0a0c0f;
  --dash-bg-1:#10141a;
  --dash-bg-2:#161c24;
  --dash-bg-3:#1e2630;
  --dash-bg-4:#283240;
  --dash-ink:#f3f5f7;
  --dash-muted:#8b95a1;
  --dash-faint:#9aa3ad;
  --dash-line:rgba(255,255,255,.08);
  --dash-line-strong:rgba(255,255,255,.14);
  --dash-glass:rgba(22,28,36,.82);
  --dash-glass-2:rgba(30,38,48,.88);
  --dash-glass-border:rgba(255,255,255,.14);
  --dash-accent:#2ef2c0;
  --dash-accent-ink:#04150f;
  --dash-accent-soft:rgba(46,242,192,.16);
  --dash-danger:#ff6b6b;
  --dash-grid:44px;
  --dash-grid-line:rgba(255,255,255,.045);
  --dash-sidebar:64px;
  --dash-radius:16px;
  --dash-radius-sm:10px;
  --dash-blur:18px;
  --dash-shadow:0 18px 48px rgba(0,0,0,.35);

  /* bridge legacy tokens used in workbench/student */
  --bg:var(--dash-bg-0);
  --paper:var(--dash-bg-2);
  --chrome:var(--dash-bg-1);
  --ink:var(--dash-ink);
  --muted:var(--dash-muted);
  --line:var(--dash-line-strong);
  --line-soft:var(--dash-line);
  --blue:var(--dash-accent);
  --blue-hover:#5affd0;
  --blue-press:#1bcf9f;
  --blue-soft:var(--dash-accent-soft);
  --teal:var(--dash-accent);
  --red:var(--dash-danger);
  --red-soft:rgba(255,107,107,.12);
  --green:var(--dash-accent);
  --green-soft:var(--dash-accent-soft);
  --amber:#c8c8c8;
  --amber-soft:rgba(255,255,255,.06);
  --shadow:var(--dash-shadow);
  --shadow-soft:0 8px 24px rgba(0,0,0,.25);
  --radius:var(--dash-radius);
  --radius-sm:var(--dash-radius-sm);
  --radius-pill:999px;
}

html[data-ps-theme="dark"]{/* same as :root dark defaults */}

/* Light theme — same structure, inverted luminance; one accent */
html[data-ps-theme="light"]{
  --dash-bg-0:#eef1f4;
  --dash-bg-1:#f7f8fa;
  --dash-bg-2:#ffffff;
  --dash-bg-3:#e8ecf1;
  --dash-bg-4:#dce2ea;
  --dash-ink:#15202b;
  --dash-muted:#5b6b76;
  --dash-faint:#7a8792;
  --dash-line:rgba(21,48,64,.10);
  --dash-line-strong:rgba(21,48,64,.16);
  --dash-glass:rgba(255,255,255,.78);
  --dash-glass-2:rgba(255,255,255,.92);
  --dash-glass-border:rgba(21,48,64,.12);
  --dash-accent:#0d9f7c;
  --dash-accent-ink:#ffffff;
  --dash-accent-soft:rgba(13,159,124,.14);
  --dash-danger:#b42318;
  --dash-grid-line:rgba(21,48,64,.07);
  --dash-shadow:0 18px 48px rgba(21,48,64,.10);
  --dash-shadow-soft:0 8px 24px rgba(21,48,64,.06);

  --bg:var(--dash-bg-0);
  --paper:var(--dash-bg-2);
  --chrome:var(--dash-bg-1);
  --ink:var(--dash-ink);
  --muted:var(--dash-muted);
  --line:var(--dash-line-strong);
  --line-soft:var(--dash-line);
  --blue:var(--dash-accent);
  --blue-hover:#0b8a6b;
  --blue-press:#09755c;
  --blue-soft:var(--dash-accent-soft);
  --teal:var(--dash-accent);
  --red:var(--dash-danger);
  --red-soft:rgba(180,35,24,.10);
  --green:var(--dash-accent);
  --green-soft:var(--dash-accent-soft);
  --amber:#945a00;
  --amber-soft:rgba(148,90,0,.10);
  --shadow:var(--dash-shadow);
  --shadow-soft:var(--dash-shadow-soft);
}
html[data-ps-theme="light"] body.dash-app{
  background:var(--dash-bg-0);
  color:var(--dash-ink);
}
/* Theme toggle chip */
.dash-theme-toggle{
  display:inline-flex;align-items:center;gap:0;
  border:1px solid var(--dash-line-strong);
  border-radius:999px;overflow:hidden;
  background:var(--dash-bg-0);
  flex-shrink:0;
}
.dash-theme-toggle button{
  appearance:none;border:0;background:transparent;
  color:var(--dash-muted);font:inherit;font-size:.72rem;font-weight:700;
  padding:5px 9px;cursor:pointer;letter-spacing:.02em;
}
.dash-theme-toggle button[aria-pressed="true"]{
  background:var(--dash-accent);
  color:var(--dash-accent-ink);
}
.dash-brand{gap:8px;flex-wrap:wrap}
.dash-brand-tools{display:flex;align-items:center;gap:6px;margin-left:auto}


html,body{height:100%;}
body.dash-app{
  margin:0;
  background:var(--dash-bg-0);
  color:var(--dash-ink);
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"PingFang SC","Noto Sans SC",sans-serif;
  -webkit-font-smoothing:antialiased;
}

/* App frame: sidebar | main */
.dash-frame{
  display:grid;
  grid-template-columns:var(--dash-sidebar) minmax(0,1fr);
  min-height:100dvh;
  background:var(--dash-bg-0);
}
@media (max-width:960px){
  .dash-frame{grid-template-columns:1fr}
  .dash-sidebar{position:sticky;top:0;z-index:40;max-height:none}
}

/* Sidebar — flat dark, NO grid */
.dash-sidebar{
  background:var(--dash-bg-1);
  border-right:1px solid var(--dash-line);
  display:flex;
  flex-direction:column;
  min-height:100dvh;
  padding:16px 12px 20px;
  gap:8px;
}
.dash-brand{
  display:flex;align-items:center;justify-content:space-between;
  padding:8px 10px 14px;border-bottom:1px solid var(--dash-line);margin-bottom:6px;
}
.dash-brand-title{font-weight:750;letter-spacing:.02em;font-size:1.05rem}
.dash-brand-title span{color:var(--dash-accent)}
.dash-side-group{margin-top:6px}
.dash-side-group>summary{
  list-style:none;cursor:pointer;user-select:none;
  display:flex;align-items:center;justify-content:space-between;
  padding:8px 10px;border-radius:8px;color:var(--dash-faint);
  font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
}
.dash-side-group>summary::-webkit-details-marker{display:none}
.dash-side-group>summary::after{content:"▾";opacity:.55;font-size:.75rem}
.dash-side-group:not([open])>summary::after{content:"▸"}
.dash-side-group .dash-nav{display:flex;flex-direction:column;gap:2px;padding:0 2px 6px}
.dash-nav button,.dash-nav a.dash-nav-btn{
  appearance:none;border:0;background:transparent;color:var(--dash-muted);
  text-align:left;padding:9px 12px;border-radius:10px;font:inherit;font-size:.92rem;
  cursor:pointer;text-decoration:none;display:block;
}
.dash-nav button:hover,.dash-nav a.dash-nav-btn:hover{background:rgba(255,255,255,.04);color:var(--dash-ink)}
.dash-nav button[aria-current="true"],.dash-nav a.dash-nav-btn[aria-current="true"]{
  background:var(--dash-accent-soft);color:var(--dash-accent);font-weight:650;
}
.dash-side-foot{margin-top:auto;padding-top:12px;border-top:1px solid var(--dash-line);display:flex;flex-direction:column;gap:8px}
.dash-account-chip{
  padding:10px 12px;border-radius:12px;background:var(--dash-bg-2);
  border:1px solid var(--dash-line);font-size:.85rem;
}
.dash-account-chip strong{display:block;color:var(--dash-ink);font-size:.9rem;margin-bottom:2px}
.dash-account-chip small{color:var(--dash-muted)}

/* Main canvas — HAS 44px grid */
.dash-main{
  min-width:0;min-height:100dvh;
  background:
    linear-gradient(var(--dash-grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--dash-grid-line) 1px, transparent 1px),
    var(--dash-bg-0);
  background-size:var(--dash-grid) var(--dash-grid), var(--dash-grid) var(--dash-grid), auto;
  background-position:0 0, 0 0, 0 0;
  display:flex;flex-direction:column;
}
.dash-main-top{
  display:flex;align-items:center;justify-content:flex-end;gap:10px;
  padding:12px 18px;background:var(--dash-bg-1);
  border-bottom:1px solid var(--dash-line);
  /* empty/chrome strip: no grid — solid layer above grid via background */
  position:sticky;top:0;z-index:20;
}
.dash-main-body{flex:1;min-height:0;padding:18px 18px 32px}

/* Glass cards */
.dash-card,
.dash-app .library,
.dash-app .library-item,
.dash-app .page-panel,
.dash-app .student-task-panel,
.dash-app .student-join-panel,
.dash-app .account-card,
.dash-app .usage-board,
.dash-app .studio-gate,
.dash-app .studio-wizard-main,
.dash-app .studio-wizard-side,
.dash-app .simple-workspace,
.dash-app .manual-workspace,
.dash-app .paper-side-card,
.dash-app .inspector,
.dash-app .candidate-rail,
.dash-app .auth-shell,
.dash-app .role-choice-shell,
.dash-app dialog,
.dash-app .modal,
.dash-app .publish-dialog,
.dash-app .switch-dialog{
  background:var(--dash-glass)!important;
  backdrop-filter:blur(var(--dash-blur)) saturate(1.2);
  -webkit-backdrop-filter:blur(var(--dash-blur)) saturate(1.2);
  border:1px solid var(--dash-glass-border)!important;
  border-radius:var(--dash-radius)!important;
  box-shadow:var(--dash-shadow);
  color:var(--dash-ink);
}

/* Striped badge on content tops */
.dash-badge-stripe,
.dash-app .badge.ok,
.dash-app .section-title,
.dash-app .page-head,
.dash-app .studio-gate-head,
.dash-app .simple-top,
.dash-app .inspector-head,
.dash-app .paper-toolbar{
  background:
    repeating-linear-gradient(
      -45deg,
      rgba(255,255,255,.04) 0 6px,
      rgba(255,255,255,.01) 6px 12px
    ),
    var(--dash-bg-2)!important;
  border-color:var(--dash-line)!important;
}

/* Typography / muted */
.dash-app .mode-note,
.dash-app .command-hint,
.dash-app small,
.dash-app .muted{color:var(--dash-muted)!important}
.dash-app h1,.dash-app h2,.dash-app .paper-title,.dash-app .brand{color:var(--dash-ink)!important}

/* Single accent — buttons & key values only */
.dash-app button.primary,
.dash-app .primary,
.dash-app .gate-go,
.dash-app .chip[aria-pressed="true"],
.dash-app .minute-tick.on,
.dash-app .studio-step.on,
.dash-app .studio-size-card[aria-pressed="true"]{
  background:var(--dash-accent)!important;
  color:var(--dash-accent-ink)!important;
  border-color:var(--dash-accent)!important;
  font-weight:700;
}
.dash-app button.primary:hover,
.dash-app .primary:hover{filter:brightness(1.06)}
.dash-app button.secondary,
.dash-app .secondary,
.dash-app .chip,
.dash-app .class-filters button{
  background:rgba(255,255,255,.04)!important;
  color:var(--dash-ink)!important;
  border:1px solid var(--dash-line-strong)!important;
}
.dash-app .class-filters button[aria-pressed="true"]{
  background:var(--dash-accent)!important;
  color:var(--dash-accent-ink)!important;
  border-color:var(--dash-accent)!important;
}
.dash-app .class-member{background:transparent!important;border-color:var(--dash-line)!important;color:var(--dash-ink)}
.dash-app .quiet.danger,
.dash-app .danger,
.dash-app button.danger{color:var(--dash-danger)!important}
.dash-app .stats strong,
.dash-app .paper-draft-stats b,
.dash-app .usage-pill strong,
.dash-app .strategy-summary b{
  color:var(--dash-accent)!important;
}

/* Forms on dark */
.dash-app input,
.dash-app select,
.dash-app textarea{
  background:var(--dash-bg-0)!important;
  color:var(--dash-ink)!important;
  border:1px solid var(--dash-line-strong)!important;
  border-radius:var(--dash-radius-sm)!important;
}
.dash-app input:focus,
.dash-app select:focus,
.dash-app textarea:focus{
  outline:2px solid var(--dash-accent-soft);
  border-color:var(--dash-accent)!important;
}

/* Hide legacy topbar when dash shell is active */
.dash-app .dash-frame header.topbar{display:none!important}

/* Status toast */
.dash-app #status{
  position:fixed;right:18px;bottom:18px;z-index:90;
  max-width:360px;padding:10px 14px;border-radius:12px;
  background:var(--dash-bg-3);border:1px solid var(--dash-line-strong);
  color:var(--dash-ink);box-shadow:var(--dash-shadow);
}
.dash-app #status:empty{display:none}

/* Workspace internals sit on glass */
.dash-app .smart-grid,
.dash-app .simple-grid,
.dash-app .workspace{
  background:transparent!important;
  border:0!important;
}
.dash-app .manual-filter-bar,
.dash-app .studio-scope-bar,
.dash-app .studio-top{
  background:var(--dash-bg-2)!important;
  border-bottom:1px solid var(--dash-line)!important;
  backdrop-filter:none;
}
.dash-app .stage,
.dash-app .simple-stage,
.dash-app .paper-wrap{
  background:transparent!important;
}
.dash-app .paper-question,
.dash-app .library-item,
.dash-app .studio-gate-card{
  background:var(--dash-glass-2)!important;
  border:1px solid var(--dash-glass-border)!important;
}
.dash-app .image-frame{
  background:#fff!important; /* keep exam paper readable */
  border-radius:8px;
}

/* Guest / lang */
.dash-lang{display:flex;gap:4px}
.dash-lang button{
  border:1px solid var(--dash-line);background:transparent;color:var(--dash-muted);
  border-radius:8px;padding:4px 8px;cursor:pointer;font:inherit;font-size:.8rem;
}
.dash-lang button[aria-current="true"]{color:var(--dash-accent);border-color:var(--dash-accent);background:var(--dash-accent-soft)}

/* Empty main zones without grid: use overlay panels */
.dash-empty-flat{
  background:var(--dash-bg-1)!important;
  background-image:none!important;
}


/* Student learning center */
.dash-app .content,
.dash-app .summary,
.dash-app .topic-row,
.dash-app .practice-shell,
.dash-app .wrong-card,
.dash-app .task-card,
.dash-app .progress-card,
.dash-app .guest-preview-note{
  background:var(--dash-glass)!important;
  backdrop-filter:blur(var(--dash-blur)) saturate(1.2);
  -webkit-backdrop-filter:blur(var(--dash-blur)) saturate(1.2);
  border:1px solid var(--dash-glass-border)!important;
  border-radius:var(--dash-radius)!important;
  box-shadow:var(--dash-shadow);
  color:var(--dash-ink);
}
.dash-app .metric strong,
.dash-app .summary .metric strong{color:var(--dash-accent)!important}
.dash-app .eyebrow,
.dash-app .page-title + .lede,
.dash-app .chapter{color:var(--dash-muted)!important}
.dash-app .page-title{color:var(--dash-ink)!important}
.dash-app .status.mastered,
.dash-app .status.needs_review{border-color:var(--dash-line-strong)}
.dash-app .dash-main-top .scope{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.dash-app .dash-main-top h1,
.dash-main-top h1,
.dash-main-top--scope h1{
  display:block!important;visibility:visible!important;opacity:1!important;
  margin:0;flex:none;margin-right:auto;
  font-size:1rem;font-weight:700;line-height:1.3;
  color:var(--dash-ink)!important;
  max-width:min(48vw,420px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  height:auto!important;max-height:none!important;
}
.dash-app a.dash-nav-btn{color:inherit}

/* Index / legacy landing when dash-app without full shell */
.dash-app > .app{
  background:var(--dash-bg-0);
  color:var(--dash-ink);
  min-height:100dvh;
}
.dash-app > .app .topbar{
  background:var(--dash-bg-1)!important;
  border-bottom:1px solid var(--dash-line)!important;
  color:var(--dash-ink);
}
.dash-app > .app .panel,
.dash-app > .app .card,
.dash-app > .app .workspace,
.dash-app > .app .side,
.dash-app > .app .main-pane{
  background:var(--dash-glass)!important;
  backdrop-filter:blur(var(--dash-blur));
  border:1px solid var(--dash-glass-border)!important;
  color:var(--dash-ink);
}

/* CONTRAST FIX: kill leftover light panels */
.dash-app .scope-chip-row .scope-menu>summary,
.dash-app .top-year-menu>summary,
.dash-app .scope-menu>summary,
.dash-app .studio-size-card,
.dash-app .topic-tree,
.dash-app .topic-tree-wide,
.dash-app .topics-pop .topic-tree,
.dash-app .topics-pop .topic-tree-wide,
.dash-app .topic-drawer .topic-tree,
.dash-app .topic-drawer-body,
.dash-app select,
.dash-app input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
.dash-app textarea,
.dash-app .field input,
.dash-app .field select,
.dash-app .search input,
.dash-app .manual-filter-bar input,
.dash-app .studio-scope-bar select,
.dash-app .year-menu-pop,
.dash-app .scope-menu-pop,
.dash-app .scope-option-list,
.dash-app .candidate-list,
.dash-app .paper-list,
.dash-app .library-list{
  background:var(--dash-bg-0)!important;
  color:var(--dash-ink)!important;
  border-color:var(--dash-line-strong)!important;
  box-shadow:none!important;
}

/* Scope dropdown triggers + pops: soft radius matching cards/buttons (not sharp rects) */
.dash-app .scope-chip-row .scope-menu>summary,
.dash-app .top-year-menu>summary,
.dash-app .scope-menu>summary,
.dash-app .wizard-scope-chrome .scope-menu>summary,
.dash-app .studio-scope-chrome .scope-menu>summary,
.dash-app .studio-primary-filters .scope-menu>summary{
  border-radius:12px!important;
}
.dash-app .year-menu-pop,
.dash-app .scope-menu-pop,
.dash-app .scope-option-list{
  border-radius:12px!important;
}

.dash-app .scope-chip-row .scope-menu>summary .label,
.dash-app .top-year-menu>summary .label,
.dash-app .scope-chip-row .scope-menu>summary .scope-meta,
.dash-app .scope-chip-row .filter-cap,
.dash-app .field label,
.dash-app .label{
  color:var(--dash-muted)!important;
}

.dash-app .scope-chip-row .scope-menu>summary strong,
.dash-app .top-year-menu>summary strong,
.dash-app .topic-tree,
.dash-app .topic-tree label,
.dash-app .topic-tree .topic-item,
.dash-app .topic-tree .topic-row,
.dash-app .topic-item,
.dash-app .topic-row,
.dash-app .topic-tree span,
.dash-app .topic-tree strong,
.dash-app .scope-option,
.dash-app .scope-option-list button,
.dash-app .year-menu-pop button,
.dash-app .scope-menu-pop button,
.dash-app .studio-size-card,
.dash-app .studio-size-card strong,
.dash-app .studio-size-card span{
  color:var(--dash-ink)!important;
}

.dash-app .topic-tree label:hover,
.dash-app .topic-item:hover,
.dash-app .scope-option:hover,
.dash-app .scope-option-list button:hover,
.dash-app .year-menu-pop button:hover{
  background:rgba(255,255,255,.06)!important;
  color:var(--dash-ink)!important;
}

.dash-app .topic-tree label:has(input:checked),
.dash-app .topic-item:has(input:checked),
.dash-app .scope-option[aria-current="true"],
.dash-app .scope-option.is-on,
.dash-app .scope-option.on,
.dash-app .scope-option:hover,
.dash-app .scope-option:focus{
  background:var(--dash-accent-soft)!important;
  border-color:var(--dash-accent)!important;
  color:var(--dash-ink)!important;
}
.dash-app .scope-option.on *,
.dash-app .scope-option:hover *{
  color:var(--dash-ink)!important;
}
/* Soft tokens must stay dark even if page :root redefines light blues */
.dash-app{
  --blue-soft:var(--dash-accent-soft)!important;
  --green-soft:var(--dash-accent-soft)!important;
  --amber-soft:rgba(255,255,255,.06)!important;
  --red-soft:rgba(255,107,107,.12)!important;
  --paper:var(--dash-bg-2)!important;
  --bg:var(--dash-bg-0)!important;
  --ink:var(--dash-ink)!important;
  --muted:var(--dash-muted)!important;
  --line:var(--dash-line-strong)!important;
  --line-soft:var(--dash-line)!important;
  --blue:var(--dash-accent)!important;
}

/* Native <select> option menus (where browser allows) */
.dash-app option{
  background:var(--dash-bg-1);
  color:var(--dash-ink);
}

/* Step pills: keep accent only when on */
.dash-app .studio-step{
  background:transparent!important;
  color:var(--dash-muted)!important;
  border-color:var(--dash-line-strong)!important;
}
.dash-app .studio-step.on{
  background:var(--dash-accent)!important;
  color:var(--dash-accent-ink)!important;
  border-color:var(--dash-accent)!important;
}
.dash-app .studio-step.done{
  color:var(--dash-accent)!important;
  border-color:var(--dash-accent)!important;
  background:transparent!important;
}

/* Size cards shouldn't stay white */
.dash-app .studio-size-card[aria-pressed="true"]{
  background:var(--dash-accent-soft)!important;
  border-color:var(--dash-accent)!important;
}

/* Reduce grid noise behind dense text lists */
.dash-app .topic-tree,
.dash-app .topic-tree-wide,
.dash-app .scope-option-list,
.dash-app .candidate-list{
  backdrop-filter:none;
  background:var(--dash-bg-1)!important;
}

/* Sidebar group titles a bit brighter */
.dash-app .dash-side-group>summary{
  color:var(--dash-muted)!important;
}

/* Placeholder text */
.dash-app ::placeholder{color:var(--dash-faint)!important;opacity:1}

/* Floating / inverted chips that used background:var(--ink)+color:#fff */
.dash-app .group-feedback-launcher,
.dash-app button.group-feedback-launcher{
  position:static;
  right:auto;
  bottom:auto;
  z-index:auto;
  min-height:34px;
  padding:0 10px;
  background:var(--dash-bg-3)!important;
  color:var(--dash-ink)!important;
  border:1px solid var(--dash-line-strong)!important;
  box-shadow:none!important;
  transform:none;
}
.dash-app .group-feedback-launcher:hover{
  background:var(--dash-bg-4)!important;
  color:var(--dash-ink)!important;
  transform:none;
  box-shadow:none;
}
.dash-app .group-feedback-launcher svg{stroke:currentColor;color:var(--dash-accent)}

/* Multi-line action buttons: allow wrap + padding */
.dash-app .paper-action-stack .primary,
.dash-app .paper-action-stack .secondary{
  min-height:44px!important;
  height:auto!important;
  padding:10px 14px!important;
  white-space:normal!important;
  line-height:1.35!important;
  text-align:center;
}

/* Inspector / rails still hardcoded light glass */
.dash-app .inspector,
.dash-app .candidate-rail,
.dash-app .rail,
.dash-app .smart-workspace .inspector,
.dash-app .smart-workspace .candidate-rail,
.dash-app .smart-grid>.inspector,
.dash-app .manual-grid>.inspector,
.dash-app .manual-grid>.candidate-rail{
  background:var(--dash-bg-2)!important;
  color:var(--dash-ink)!important;
  border-color:var(--dash-line)!important;
}
.dash-app .feedback-avatar{
  background:var(--dash-bg-3)!important;
  color:var(--dash-ink)!important;
}
.dash-app .feedback-summary{
  background:var(--dash-bg-2)!important;
  border-color:var(--dash-line)!important;
  color:var(--dash-muted)!important;
}


/* Guest home: top nav instead of left sidebar */
.dash-frame--guest{
  grid-template-columns:1fr;
  grid-template-rows:auto minmax(0,1fr);
}
.dash-frame--guest > .dash-topbar{
  grid-column:1;
  grid-row:1;
}
.dash-frame--guest > .dash-main{
  grid-column:1;
  grid-row:2;
  min-height:0;
}
.dash-topbar{
  display:flex;
  align-items:center;
  gap:14px;
  flex-wrap:wrap;
  padding:12px 18px;
  background:var(--dash-bg-1);
  border-bottom:1px solid var(--dash-line);
  position:sticky;
  top:0;
  z-index:30;
}
.dash-topbar .dash-brand{
  border:0;margin:0;padding:0;
}
.dash-topbar .dash-nav-row{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  align-items:center;
  gap:4px;
  padding:0;
}
.dash-topbar .dash-nav-row button{
  white-space:nowrap;
}
.dash-topbar-actions{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  margin-left:auto;
}
.dash-topbar-actions .mode-note{
  max-width:18ch;
  font-size:.78rem;
}
.dash-main-top[hidden]{display:none!important}
@media (max-width:720px){
  .dash-topbar{padding:10px 12px;gap:10px}
  .dash-topbar-actions{width:100%;margin-left:0;justify-content:flex-end}
}

/* Guest topbar: compact icon toggles */
.dash-theme-toggle button{
  min-width:34px;font-size:1rem;line-height:1;padding:6px 10px;
}
.dash-lang-toggle{
  appearance:none;border:1px solid var(--dash-line-strong);
  background:var(--dash-bg-0);color:var(--dash-ink);
  border-radius:999px;min-height:32px;min-width:42px;
  padding:5px 12px;font:inherit;font-size:.78rem;font-weight:750;
  cursor:pointer;letter-spacing:.02em;
}
.dash-lang-toggle:hover{border-color:var(--dash-accent);color:var(--dash-accent)}
.dash-app .lang-switch{display:none} /* old dual chip if any leftover */

/* Intro page: theme tokens + balanced type */
.dash-app .intro-desk{
  background:transparent!important;
  padding-top:12px!important;
}
.dash-app .intro-open h1{
  font-size:clamp(28px,3.1vw,40px)!important;
  font-weight:720!important;
  letter-spacing:-.035em!important;
  line-height:1.12!important;
  white-space:normal!important;
  color:var(--dash-ink)!important;
}
.dash-app .intro-open p{
  font-size:16px!important;
  color:var(--dash-muted)!important;
}
.dash-app .intro-roles{
  border-top-color:var(--dash-ink)!important;
}
.dash-app .intro-role{
  border-bottom-color:var(--dash-line)!important;
}
.dash-app .intro-role h2{
  font-size:13px!important;
  color:var(--dash-muted)!important;
  letter-spacing:.04em;
  text-transform:none;
}
.dash-app .intro-role p{
  font-size:15px!important;
  font-weight:650!important;
  color:var(--dash-ink)!important;
}
.dash-app .intro-role .role-detail,
.dash-app .intro-close p{
  font-size:13px!important;
  color:var(--dash-muted)!important;
}
.dash-app .intro-drift .board,
.dash-app .intro-drift.neural-ready .intro-neural-subject{
  color:var(--dash-ink)!important;
  font-size:clamp(13px,1.25vw,16px)!important;
  font-weight:700!important;
}
.dash-app .intro-drift .sub,
.dash-app .intro-drift .code{
  color:var(--dash-muted)!important;
  font-size:12px!important;
}
.dash-app .intro-drift.neural-ready .intro-neural-subjects::before{
  border-color:rgba(13,159,124,.28)!important;
  background:radial-gradient(circle at 38% 34%,var(--dash-accent-soft),transparent 68%)!important;
}
html[data-ps-theme="dark"] .dash-app .intro-drift.neural-ready .intro-neural-subjects::before{
  border-color:rgba(46,242,192,.22)!important;
}
.dash-app .intro-pager{display:none!important}

/* Guest intro: alternate ground pattern */
.dash-frame--guest .dash-main{
  /* soft dot field instead of square graph paper */
  background-color:var(--dash-bg-0);
  background-image:
    radial-gradient(circle at center, var(--dash-grid-line) 1.1px, transparent 1.25px);
  background-size:28px 28px;
  background-position:0 0;
}
html[data-ps-theme="light"] .dash-frame--guest .dash-main{
  background-image:
    radial-gradient(circle at center, rgba(21,48,64,.11) 1.15px, transparent 1.3px);
}
html[data-ps-theme="dark"] .dash-frame--guest .dash-main{
  background-image:
    radial-gradient(circle at center, rgba(255,255,255,.09) 1.15px, transparent 1.3px);
}

/* Intro earth orb: subject labels sit on globe */
.dash-app .intro-drift.neural-ready .intro-neural-subjects::before{
  border-color:rgba(80,170,230,.22)!important;
  background:transparent!important;
  box-shadow:inset 0 0 40px rgba(30,120,200,.08);
}
.dash-app .intro-drift.neural-ready .intro-neural-subject{
  color:var(--dash-ink)!important;
  text-shadow:0 1px 2px rgba(0,0,0,.12);
}
html[data-ps-theme="dark"] .dash-app .intro-drift.neural-ready .intro-neural-subject{
  text-shadow:0 1px 3px rgba(0,0,0,.55);
}

/* Intro: Earth wireframe + Get started + ZH/EN type */
.dash-app .intro-drift.neural-ready{
  /* keep original ball size; clarity comes from stroke contrast */
  --orb-size:min(78vw,380px)!important;
  width:min(470px,100%)!important;
  min-height:430px!important;
}
@media (max-width:720px){
  .dash-app .intro-drift.neural-ready{
    --orb-size:min(82vw,330px)!important;
    min-height:370px!important;
  }
}
.dash-app .intro-drift.neural-ready .intro-neural-subjects::before{
  opacity:.35!important;
  border-width:1px!important;
  background:transparent!important;
}
.dash-app .intro-drift.neural-ready .intro-neural-subject{
  opacity:.72!important;
  font-size:clamp(11px,1.05vw,14px)!important;
}
.dash-app .intro-close{
  display:flex!important;
  flex-direction:column!important;
  align-items:flex-start!important;
  gap:14px!important;
  margin-top:8px;
}
.dash-app .intro-cta-note{
  margin:0!important;
  max-width:28em;
  color:var(--dash-muted)!important;
  font-size:14px!important;
  line-height:1.5!important;
}
.dash-app .intro-get-started{
  min-height:48px!important;
  padding:0 26px!important;
  font-size:1.02rem!important;
  font-weight:750!important;
  border-radius:999px!important;
  letter-spacing:.02em;
  box-shadow:0 10px 28px rgba(13,159,124,.28);
}
.dash-app .intro-open.is-zh h1{
  font-size:clamp(30px,3.4vw,44px)!important;
  font-weight:740!important;
  letter-spacing:.01em!important;
  line-height:1.18!important;
  max-width:9em;
}

.dash-app .intro-open .intro-lead{
  margin-top:12px!important;
  font-size:16px!important;
  line-height:1.55!important;
  color:var(--dash-muted)!important;
  max-width:32em;
}
.dash-app .intro-open.is-en .intro-lead{
  letter-spacing:-.01em;
  max-width:28em;
}
.dash-app .intro-open.is-zh .intro-lead{
  letter-spacing:.02em;
}
.dash-app .intro-get-started{
  /* EN slightly wider tracking */
}
.dash-app .intro-desk[data-lang="en"] .intro-get-started{
  letter-spacing:.04em;
  font-size:1rem!important;
}
.dash-app .intro-desk[data-lang="zh"] .intro-get-started{
  letter-spacing:.12em;
  padding:0 30px!important;
}

/* Earth canvas must be fully visible (was opacity .78 + faint fill) */
.dash-app .intro-neural-canvas,
.dash-app .intro-drift.neural-ready .intro-neural-canvas{
  opacity:1!important;
  z-index:1!important;
}
.dash-app .intro-drift.neural-ready .intro-neural-subjects{
  z-index:2!important;
}
.dash-app .intro-drift.neural-ready .intro-neural-subjects::before{
  /* earth rim drawn on canvas; keep CSS ring off so it does not look like an empty circle */
  opacity:0!important;
  border:0!important;
  background:none!important;
  box-shadow:none!important;
}

/* Subject labels on Earth: light fill + dark halo for contrast */
.dash-app .intro-drift.neural-ready .intro-neural-subject{
  color:#f7fcff!important;
  opacity:1!important;
  font-size:clamp(12px,1.2vw,15px)!important;
  font-weight:750!important;
  letter-spacing:-.02em;
  text-shadow:
    0 0 2px rgba(0,20,40,.95),
    0 1px 2px rgba(0,0,0,.85),
    0 0 8px rgba(0,40,80,.55),
    1px 0 0 rgba(0,20,40,.55),
    -1px 0 0 rgba(0,20,40,.55),
    0 1px 0 rgba(0,20,40,.55),
    0 -1px 0 rgba(0,20,40,.55)!important;
}
html[data-ps-theme="dark"] .dash-app .intro-drift.neural-ready .intro-neural-subject,
html[data-ps-theme="light"] .dash-app .intro-drift.neural-ready .intro-neural-subject{
  color:#f7fcff!important;
}
.dash-app .intro-neural-caption{
  color:var(--dash-muted)!important;
}

.dash-app .intro-drift.neural-ready .intro-neural-canvas{
  filter:none!important;
  image-rendering:auto;
}

/* Intro title: exactly 2 lines (EN was wrapping to 4 inside 17em) */
.dash-app .intro-open{
  max-width:none!important;
}
.dash-app .intro-open.is-en{
  max-width:min(34rem,100%)!important;
}
.dash-app .intro-open.is-zh{
  max-width:min(12em,100%)!important;
}
.dash-app .intro-open h1{
  white-space:normal!important;
  max-width:none!important;
}
.dash-app .intro-open .intro-h1-line{
  display:block;
  white-space:nowrap!important;
}
.dash-app .intro-open.is-en h1{
  font-size:clamp(28px,3.2vw,42px)!important;
  line-height:1.2!important;
  max-width:none!important;
}
.dash-app .intro-open.is-zh h1{
  font-size:clamp(30px,3.4vw,44px)!important;
  line-height:1.22!important;
}
@media (max-width:720px){
  .dash-app .intro-open .intro-h1-line{
    white-space:normal!important; /* allow wrap on very narrow phones */
  }
}

/* Expandable side nav (logged-in) — follows light/dark tokens */
.dash-frame{
  grid-template-columns:64px minmax(0,1fr)!important;
}
.dash-frame.is-side-anim{transition:grid-template-columns .18s ease}
.dash-frame:has(.dash-side[data-expanded="true"]){
  grid-template-columns:228px minmax(0,1fr)!important;
}
.dash-frame--guest{
  grid-template-columns:1fr!important;
}
.dash-side{
  width:64px;
  background:var(--dash-bg-1);
  border-right:1px solid var(--dash-line);
  display:flex;flex-direction:column;
  min-height:100dvh;padding:10px 8px 12px;gap:10px;
  position:relative;z-index:40;
  color:var(--dash-ink);
  transition:background .18s ease, color .18s ease;
  overflow:visible;
}
.dash-side[data-expanded="true"]{width:228px}
.dash-side.is-side-anim{transition:width .18s ease, background .18s ease, color .18s ease}
.dash-side-top{
  display:flex;align-items:center;justify-content:center;gap:8px;
  padding:4px 0 10px;border-bottom:1px solid var(--dash-line);
}
/* Collapsed: stack logo above toggle so the icon is not clipped */
.dash-side:not([data-expanded="true"]) .dash-side-top{
  flex-direction:column;align-items:center;gap:6px;
}
.dash-side:not([data-expanded="true"]) .dash-side-brand{
  flex:none;justify-content:center;width:auto;min-width:0;
}
.dash-side:not([data-expanded="true"]) .dash-side-toggle{
  min-width:28px;width:28px;height:28px;padding:0;font-size:.9rem;
}
.dash-side[data-expanded="true"] .dash-side-top{justify-content:space-between;padding-left:4px;padding-right:4px}
.dash-side-brand{
  display:flex;align-items:center;gap:8px;min-width:0;flex:1;
}
.dash-side-logo{
  width:40px;height:40px;border-radius:11px;
  object-fit:contain;flex:none;display:block;
  background:transparent;
}
.dash-side:not([data-expanded="true"]) .dash-side-logo{
  width:44px;height:44px;border-radius:12px;
}
.dash-brand{
  display:flex;align-items:center;gap:12px;
}
.dash-brand-logo{
  width:48px;height:48px;border-radius:12px;object-fit:contain;flex:none;
  background:transparent;
}
.dash-brand-title{font-size:1.15rem}


.dash-side-brand-text{
  display:none;
  font-weight:750;font-size:.98rem;letter-spacing:.01em;
  color:var(--dash-ink);white-space:nowrap;line-height:1.1;
}
.dash-side-brand-text em{
  font-style:normal;color:var(--dash-accent);font-weight:800;
}
.dash-side[data-expanded="true"] .dash-side-brand-text{display:inline}
.dash-side:not([data-expanded="true"]) .dash-side-brand-text{display:none}

.dash-side-toggle{
  min-width:34px;height:34px;padding:0 8px;
  border-radius:10px;border:1px solid var(--dash-line);
  background:var(--dash-bg-2);color:var(--dash-ink);
  display:inline-grid;place-items:center;cursor:pointer;font:inherit;font-size:1.05rem;
}
.dash-side-toggle:hover{border-color:var(--dash-line-strong);background:var(--dash-bg-3)}
.dash-side-nav{display:flex;flex-direction:column;gap:4px;flex:1}
.dash-side-item{
  appearance:none;border:0;background:transparent;color:var(--dash-muted);
  display:flex;align-items:center;gap:10px;
  padding:10px 8px;border-radius:12px;cursor:pointer;
  font:inherit;font-size:.92rem;width:100%;text-align:left;
}
.dash-side-item svg{width:22px;height:22px;flex:none;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.dash-side-item .dash-side-label{display:none;white-space:nowrap}
.dash-side[data-expanded="true"] .dash-side-item .dash-side-label{display:inline}
.dash-side-item:hover{background:var(--dash-bg-3);color:var(--dash-ink)}
.dash-side-item[aria-current="true"]{
  background:var(--dash-accent-soft);color:var(--dash-accent);
}
.dash-side-item.danger{color:var(--dash-danger)}
.dash-side-foot{margin-top:auto;padding-top:8px;border-top:1px solid var(--dash-line)}

/* Main top chrome: account + theme + lang above workbench */
.dash-main{display:flex;flex-direction:column}
.dash-main-top{
  display:flex;align-items:center;justify-content:flex-end;gap:12px;
  padding:12px 18px;background:var(--dash-bg-1);
  border-bottom:1px solid var(--dash-line);
  position:sticky;top:0;z-index:20;
}
.dash-main-account{
  appearance:none;border:1px solid var(--dash-line);background:var(--dash-bg-2);
  color:var(--dash-ink);border-radius:12px;cursor:pointer;
  display:flex;align-items:center;gap:10px;
  padding:8px 12px;margin-right:auto;font:inherit;text-align:left;
}
.dash-main-account svg{width:18px;height:18px;flex:none;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.85}
.dash-main-account-text{display:flex;flex-direction:column;gap:1px;min-width:0;line-height:1.2}
.dash-main-account-text strong{
  font-size:.88rem;font-weight:650;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:min(42vw,280px);
}
.dash-main-account-text small{font-size:.72rem;opacity:.65;font-weight:500}
.dash-main-account:hover,
.dash-main-account[aria-current="true"]{
  border-color:color-mix(in srgb, var(--dash-accent) 45%, var(--dash-line));
  background:color-mix(in srgb, var(--dash-accent) 12%, var(--dash-bg-2));
}
.dash-main-top-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dash-main-top-tools .dash-lang-toggle{
  min-width:34px;height:34px;padding:0 10px;
  border-radius:10px;
}


/* Student main-top: account + title + scope + tools */
.dash-main-top{
  justify-content:flex-start;
  flex-wrap:wrap;
}
.dash-main-account{margin-right:0}
.dash-main-top-tools{margin-left:auto}
.dash-main-account-guest{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;
  padding:6px 10px;border:1px solid var(--dash-line);border-radius:12px;
  background:var(--dash-bg-2);color:var(--dash-ink);
}
.dash-main-account-guest strong{font-size:.88rem}
.dash-main-account-guest small{font-size:.72rem;opacity:.65}
.dash-main-account-actions{display:inline-flex;gap:6px;margin-left:4px}
.dash-side-nav a.dash-side-item{text-decoration:none;color:inherit}



/* Student top-right: account + theme/lang/fs + logout */
.dash-main-top--scope{
  justify-content:flex-start;
  align-items:center;
  gap:12px;
  flex-wrap:wrap;
}
.dash-main-top--scope h1{margin:0;flex:none}
.dash-main-top--scope .scope{flex:1 1 auto;min-width:0}
.dash-main-top-right{
  margin-left:auto;
  display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px 10px;
}
.dash-top-user{
  display:flex;align-items:center;gap:8px;
  padding:6px 10px;border-radius:12px;
  background:var(--dash-bg-2);border:1px solid var(--dash-line);
  color:var(--dash-ink);max-width:min(42vw,260px);
}
.dash-top-user .dash-main-account-text{display:flex;flex-direction:column;gap:1px;min-width:0;line-height:1.15}
.dash-top-user .dash-main-account-text strong{
  font-size:.82rem;font-weight:650;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px;
}
.dash-top-user .dash-main-account-text small{font-size:.7rem;opacity:.65}
.dash-top-user.is-guest{max-width:none}
.dash-main-top-right .dash-side-tool-row{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px;justify-content:flex-end;
}
.dash-top-logout{
  appearance:none;border:1px solid var(--dash-line);background:var(--dash-bg-2);
  color:var(--dash-danger);border-radius:12px;cursor:pointer;
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 10px;font:inherit;font-size:.86rem;
}
.dash-top-logout svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.dash-top-logout:hover{background:color-mix(in srgb, var(--dash-danger) 10%, var(--dash-bg-2))}

.dash-side-avatar{
  width:28px;height:28px;border-radius:9px;flex:none;
  display:grid;place-items:center;
  background:var(--dash-accent-soft);color:var(--dash-accent);
  font-weight:750;font-size:.85rem;
}
.dash-side-tool-row .dash-lang-toggle,
.dash-fs-toggle{
  min-width:34px;height:34px;padding:0 8px;
  border-radius:10px;border:1px solid var(--dash-line);
  background:var(--dash-bg-2);color:var(--dash-ink);
  display:inline-grid;place-items:center;cursor:pointer;font:inherit;
}
.dash-fs-toggle svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.dash-fs-toggle[aria-pressed="true"]{
  background:var(--dash-accent-soft);color:var(--dash-accent);border-color:transparent;
}


/* Account abbreviation + logout popover (top-right) */
.dash-account-menu{position:relative;flex:none}
.dash-account-abbr{
  width:36px;height:36px;border-radius:11px;border:1px solid var(--dash-line);
  background:var(--dash-accent-soft);color:var(--dash-accent);
  font-weight:750;font-size:.95rem;cursor:pointer;
  display:grid;place-items:center;padding:0;
}
.dash-account-abbr:hover,.dash-account-abbr[aria-expanded="true"]{
  border-color:color-mix(in srgb, var(--dash-accent) 40%, var(--dash-line));
}
.dash-account-pop{
  position:absolute;right:0;top:calc(100% + 8px);
  min-width:220px;padding:8px;
  background:var(--dash-bg-2);border:1px solid var(--dash-line);
  border-radius:14px;box-shadow:var(--dash-shadow-soft,0 12px 28px rgba(0,0,0,.12));
  z-index:60;display:flex;flex-direction:column;gap:4px;
}
.dash-account-pop[hidden]{display:none!important}
.dash-account-pop-head{
  display:flex;flex-direction:column;gap:2px;
  padding:8px 10px 10px;border-bottom:1px solid var(--dash-line);margin-bottom:4px;
}
.dash-account-pop-head strong{
  font-size:.86rem;font-weight:650;color:var(--dash-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px;
}
.dash-account-pop-head small{font-size:.72rem;color:var(--dash-muted)}
.dash-account-pop-item{
  appearance:none;border:0;background:transparent;color:var(--dash-ink);
  display:flex;align-items:center;gap:8px;width:100%;
  padding:10px 10px;border-radius:10px;cursor:pointer;font:inherit;font-size:.9rem;text-align:left;
}
.dash-account-pop-item svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.dash-account-pop-item:hover{background:var(--dash-bg-3)}
.dash-account-pop-item.danger{color:var(--dash-danger)}
.dash-account-pop-item.primary{background:var(--dash-accent-soft);color:var(--dash-accent);justify-content:center;font-weight:650}

/* hide old wide sidebar remnants */
.dash-sidebar{display:none!important}

/* Content desks. Sidebar and top bar are unchanged. */
.dash-app .dash-main{background:var(--dash-bg-0);background-image:none;height:100%;min-height:0;overflow:hidden}
.dash-app .dash-frame{height:100dvh;overflow:hidden}
.dash-app .dash-main-body{padding:0;min-height:0;overflow:auto;scrollbar-gutter:stable;background:var(--dash-bg-0);background-image:none;display:flex;flex-direction:column}
.dash-app .dash-main-body>.content,
.dash-app .dash-main-body>main.content,
.dash-app .dash-main-body>.library,
.dash-app .dash-main-body>main.library,
.dash-app .dash-main-body>.student-hub,
.dash-app .dash-main-body>main.student-hub,
.dash-app .dash-main-body>.feedback-page{width:min(1040px,calc(100% - 48px));margin:28px auto 56px;padding:0;flex:none;background:transparent!important;border:0!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;border-radius:0!important}
.dash-app .page-head,
.dash-app .student-hub-head,
.dash-app .studio-gate-head,
.dash-app .section-title,
.dash-app .simple-top,
.dash-app .paper-toolbar,
.dash-app .inspector-head,
.dash-app .commandbar{background:transparent!important;background-image:none!important;box-shadow:none!important}
.dash-app .page-head,
.dash-app .student-hub-head{border:0!important;border-radius:0!important;padding:0!important;margin:0 0 14px;display:flex;align-items:center;justify-content:space-between;gap:16px}
.dash-app .page-head h1,
.dash-app .page-title,
.dash-app .student-hub-head h1,
.dash-app .library>h1{margin:0 0 8px;max-width:22ch}
.dash-app .page-head p,
.dash-app .lede,
.dash-app .student-hub-head p{margin:0;max-width:62ch;line-height:1.55}
.dash-app .content>.eyebrow{display:none}
.dash-app .section-head{display:flex;align-items:end;justify-content:space-between;gap:16px;margin:28px 0 10px}
.dash-app .section-head h2{margin:0;font-size:16px;letter-spacing:-.02em}
.dash-app .section-head p{margin:4px 0 0;font-size:13px}
.dash-app .summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:22px 0 4px!important;background:transparent!important;border:0!important;border-top:1px solid var(--dash-line)!important;border-bottom:1px solid var(--dash-line)!important;border-radius:0!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
.dash-app .metric{padding:16px 18px 16px 0;border-right:1px solid var(--dash-line)}
.dash-app .metric:last-child{border-right:0}
.dash-app .metric strong{font-variant-numeric:tabular-nums;letter-spacing:-.03em}
.dash-app .path,
.dash-app .list,
.dash-app .library-list,
.dash-app .feedback-list{background:var(--dash-bg-1)!important;border:1px solid var(--dash-line)!important;border-radius:12px!important;overflow:hidden;box-shadow:none!important}
.dash-app .path .topic-row,
.dash-app .list .list-row,
.dash-app .library-list .library-item,
.dash-app .feedback-list .feedback-row,
.dash-app .student-task-row,
.dash-app .rail .queue-row{background:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:none!important;border:0!important;border-radius:0!important;border-bottom:1px solid var(--dash-line)!important}
.dash-app .path .topic-row:last-child,
.dash-app .list .list-row:last-child,
.dash-app .library-list .library-item:last-child,
.dash-app .feedback-list .feedback-row:last-child,
.dash-app .student-task-row:last-child,
.dash-app .rail .queue-row:last-child{border-bottom:0!important}
.dash-app .library-list .library-item,
.dash-app .feedback-list .feedback-row{display:flex;align-items:center;gap:16px;width:100%;padding:14px 16px;text-align:left}
.dash-app .chapter{background:var(--dash-bg-2)!important;color:var(--dash-muted)!important;border:0!important;border-bottom:1px solid var(--dash-line)!important;border-radius:0!important;padding:18px 18px 8px!important;box-shadow:none!important}
.dash-app .path .topic-row,
.dash-app .list .list-row:has(button),
.dash-app .library-list .library-item:is(button),
.dash-app .library-list .library-item:has([data-open-draft]),
.dash-app .student-task-row,
.dash-app .rail .queue-row,
.dash-app .studio-gate-card{cursor:pointer}
.dash-app .path .topic-row:hover,
.dash-app .list .list-row:hover,
.dash-app .library-list .library-item:hover,
.dash-app .feedback-list .feedback-row:hover,
.dash-app .student-task-row:hover,
.dash-app .rail .queue-row:hover{background:color-mix(in srgb, var(--dash-accent) 10%, transparent)!important}
.dash-app .path .topic-row.current{background:var(--dash-accent-soft)!important}
.dash-app .dash-main-body button:active:not(:disabled),
.dash-app .studio-gate-card:active{transform:scale(.985)}
.dash-app .dash-main-body button:focus-visible,
.dash-app .studio-gate-card:focus-visible{outline:2px solid var(--dash-accent);outline-offset:2px}
.dash-app .library-toolbar,
.dash-app .feedback-summary{margin:18px 0 12px}
.dash-app .join-grid,
.dash-app .page-panel,
.dash-app .account-card,
.dash-app .usage-board,
.dash-app .student-join-panel,
.dash-app .student-task-panel{background:var(--dash-bg-1)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:none!important;border:1px solid var(--dash-line)!important;border-radius:12px!important}
.dash-app .account-card{padding:16px 18px;margin:18px 0}
/* My papers filter bar: workbench.html paints it translucent white, which
   turns into a light slab in dark mode. */
.dash-app .library-toolbar{background:var(--dash-bg-1)!important;border-color:var(--dash-line)!important}
/* Account page: the usage board is a card too, so give its pills room, and
   keep the section heading and the empty request list off the card edges. */
.dash-app .usage-board{padding:12px;margin:0 0 22px}
.dash-app .usage-board+.section-title{margin:0 0 10px}
.dash-app .page-panel+.library-list{margin-top:14px}
.dash-app .page-panel+.library-list>.mode-note:only-child{margin:0;padding:14px 18px}
.dash-app .student-task-panel,
.dash-app .student-join-panel{padding:16px 18px}
.dash-app .join-grid{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:end;width:100%;max-width:none;margin:0 0 4px;padding:16px 18px;box-sizing:border-box}
.dash-app .join-grid .field{min-width:0}
.dash-app .join-grid .primary{min-width:96px;align-self:end}
.dash-app .content>.join-grid+.section-head,
.dash-app .join-grid+.section-head{margin-top:28px}
.dash-app .student-hub-grid{gap:20px;margin-top:20px}
.dash-app .guest-preview-note,
.dash-app .empty,
.dash-app .library-empty{background:var(--dash-bg-1)!important;backdrop-filter:none!important;box-shadow:none!important;border:1px dashed var(--dash-line-strong)!important;border-radius:12px!important}
.dash-app .list>.empty,
.dash-app .path>.empty,
.dash-app .library-list>.library-empty,
.dash-app .feedback-list>.library-empty{border:0!important;border-radius:0!important;background:transparent!important}
.dash-app .dash-main-body:has(.simple-workspace),
.dash-app .dash-main-body:has(.manual-workspace),
.dash-app .dash-main-body:has(.studio-wizard),
.dash-app .dash-main-body:has(.workspace){overflow:hidden}
.dash-app .simple-workspace,
.dash-app .manual-workspace,
.dash-app .workspace{flex:1;min-height:0;margin:0;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
.dash-app .simple-top,
.dash-app .commandbar{padding:12px 16px;border-bottom:1px solid var(--dash-line)!important;background:var(--dash-bg-1)!important}
.dash-app .simple-stage,
.dash-app main.stage,
.dash-app .stage{background:var(--dash-bg-0)!important}
.dash-app .paper-question{background:#fff!important;color:#1d1d1f!important;border:1px solid rgba(0,0,0,.08)!important;border-radius:12px!important;box-shadow:0 14px 36px rgba(0,0,0,.28)!important;backdrop-filter:none!important}
.dash-app .paper-question .paper-q-title,
.dash-app .paper-question .paper-q-title span,
.dash-app .paper-question .order{color:#1d1d1f!important}
.dash-app .paper-question small,
.dash-app .paper-question .stage-meta{color:#5c6570!important}
.dash-app .studio-gate{width:min(760px,calc(100% - 48px));margin:28px auto 48px;padding:0;background:transparent!important;border:0!important;box-shadow:none!important;backdrop-filter:none!important}
.dash-app .studio-gate-lead{margin:0 0 16px;max-width:62ch;color:var(--dash-muted)!important;line-height:1.55}
.dash-app .studio-gate-list{display:flex;flex-direction:column;border:1px solid var(--dash-line);border-radius:14px;background:var(--dash-bg-1)!important;overflow:hidden}
.dash-app .studio-gate-row{display:flex;align-items:center;gap:18px;width:100%;margin:0;padding:18px 18px;border:0;border-radius:0;border-bottom:1px solid var(--dash-line);background:transparent!important;box-shadow:none!important;text-align:left;color:inherit;cursor:pointer}
.dash-app .studio-gate-row:last-child{border-bottom:0}
.dash-app .studio-gate-row:hover{background:var(--dash-bg-2)!important}
.dash-app .studio-gate-row:active{transform:none}
.dash-app .studio-gate-copy{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.dash-app .studio-gate-title{display:flex;align-items:center;justify-content:space-between;gap:16px}
.dash-app .studio-gate-copy strong{font-size:1.05rem;letter-spacing:-.02em}
.dash-app .studio-gate-copy>span:not(.studio-gate-title){color:var(--dash-muted);line-height:1.45}
.dash-app .studio-gate-row .gate-go{flex:none;margin:0;padding:6px 12px;border-radius:8px;font-size:13px;line-height:1.2;font-weight:650;white-space:nowrap}
.dash-app .studio-gate-recent{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;padding:14px 16px;border:1px solid var(--dash-line);border-radius:14px;background:var(--dash-bg-1)!important}
.dash-app .studio-gate-foot{margin-top:14px}
.dash-app .studio-gate-foot .secondary{background:transparent!important}
.dash-app .studio-wizard{width:min(1080px,100%);margin:0 auto;background:transparent}
.dash-app .studio-wizard-main,
.dash-app .studio-wizard-side{background:var(--dash-bg-1)!important;backdrop-filter:none!important;box-shadow:none!important}
.dash-app .practice-shell{min-height:100dvh;background:var(--dash-bg-0)!important;color:var(--dash-ink)!important;border:0!important;border-radius:0!important;box-shadow:none!important;backdrop-filter:none!important}
.dash-app .practice-shell .paper,
.dash-app .practice-shell .question-image{background:#fff!important}
@media (max-width:800px){
  .dash-app .dash-main-body>.content,
  .dash-app .dash-main-body>main.content,
  .dash-app .dash-main-body>.library,
  .dash-app .dash-main-body>main.library,
  .dash-app .dash-main-body>.student-hub,
  .dash-app .dash-main-body>main.student-hub{width:calc(100% - 28px);margin:18px auto 40px}
  .dash-app .summary{grid-template-columns:1fr 1fr}
  .dash-app .metric:nth-child(2){border-right:0}
  .dash-app .studio-gate{width:calc(100% - 28px);margin-top:20px}
}

/* Paper Studio logo — theme swap; sized to not overlap wordmark */
.ps-logo--dark{display:none!important}
html[data-ps-theme="dark"] .ps-logo--light{display:none!important}
html[data-ps-theme="dark"] .ps-logo--dark{display:block!important}
html[data-ps-theme="light"] .ps-logo--light{display:block!important}
html[data-ps-theme="light"] .ps-logo--dark{display:none!important}

.dash-side-brand{display:flex;align-items:center;gap:10px;min-width:0;flex:1}
.dash-side-logo{
  width:36px;height:36px;border-radius:10px;
  object-fit:contain;flex:none;display:block;background:transparent;padding:0;box-shadow:none;transform:none;
}
.dash-side:not([data-expanded="true"]) .dash-side-logo{
  width:40px;height:40px;border-radius:11px;
}
.dash-brand{display:flex;align-items:center;gap:12px;overflow:visible}
.dash-brand-logo{
  width:40px;height:40px;border-radius:11px;
  object-fit:contain;flex:none;display:block;background:transparent;padding:0;box-shadow:none;transform:none;
}
.dash-brand-title{font-size:1.15rem;font-weight:750;line-height:1.2}
.brand-mark-img{
  width:36px;height:36px;border-radius:10px;object-fit:contain;flex:none;display:block;
  background:transparent;padding:0;box-shadow:none;transform:none;
}

.dash-side{width:64px}
.dash-side[data-expanded="true"]{width:228px!important;overflow:hidden}
.dash-frame{grid-template-columns:64px minmax(0,1fr)}
.dash-frame:has(.dash-side[data-expanded="true"]){grid-template-columns:228px minmax(0,1fr)!important}
.dash-frame--guest{grid-template-columns:1fr!important}
.dash-side[data-expanded="true"] .dash-side-top{
  flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;
}
.dash-side[data-expanded="true"] .dash-side-brand{flex:1;min-width:0;overflow:hidden}
.dash-side[data-expanded="true"] .dash-side-brand-text{
  display:inline;overflow:hidden;text-overflow:ellipsis;min-width:0;
}
.dash-side[data-expanded="true"] .dash-side-item{overflow:hidden}
.dash-side[data-expanded="true"] .dash-side-label{
  display:inline;min-width:0;overflow:hidden;text-overflow:ellipsis;
}

/* Wizard fills the desk: chapter list scrolls, the next step stays in view. */
.dash-app .dash-main-body:has(.studio-wizard){
  display:flex;
  flex-direction:column;
  overflow:hidden;
}
.dash-app .studio-wizard{
  flex:1;
  min-height:0;
  width:100%;
  max-width:none;
  margin:0;
  padding:16px 20px 76px;
  gap:12px;
  overflow:hidden;
}
.dash-app .studio-wizard-top{flex:none}
.dash-app .studio-wizard-body{
  flex:1;
  min-height:0;
  align-items:stretch;
  overflow:hidden;
  grid-template-columns:248px minmax(0,1fr);
  grid-template-rows:minmax(0,1fr);
}
/* Step 「范围」 omits .studio-wizard-side — don't leave main crushed in 248px first track */
.dash-app .studio-wizard-body:not(:has(.studio-wizard-side)){
  grid-template-columns:minmax(0,1fr);
}
.dash-app .studio-wizard-side,
.dash-app .studio-wizard-main{
  min-height:0;
  height:100%;
}
.dash-app .studio-wizard-side{overflow:auto}
.dash-app .studio-wizard-side .scope-menu-pop,
.dash-app .studio-wizard-side .year-menu-pop{
  position:static;
  top:auto;
  left:auto;
  width:100%;
  max-height:none;
  margin-top:8px;
  box-shadow:none;
}
.dash-app .studio-wizard-main{
  display:flex;
  flex-direction:column;
  /* auto — allow scroll when scope chrome + syllabus min-heights exceed desk; never clip 大纲 to 0 */
  overflow:auto;
  padding:16px 16px 12px;
}
.dash-app .studio-wizard-main>.section-title,
.dash-app .studio-wizard-main>.mode-note,
.dash-app .studio-wizard-main>.wizard-scope-chrome,
.dash-app .studio-wizard-main>.wizard-scope-split,
.dash-app .studio-wizard-main>.studio-size-cards,
.dash-app .studio-wizard-main>.studio-time,
.dash-app .studio-wizard-main>.studio-more{flex:none}
.dash-app .studio-wizard-main>.wizard-scope-split{
  flex:1 1 auto;
  min-height:0; /* participate in desk height so syllabus can nest-scroll */
  display:flex;
  flex-direction:column;
  gap:14px;
}
.dash-app .studio-wizard-main:has(.studio-time){overflow:auto}
/* Desktop nested scroll: syllabus clips; topic-tree MUST shrink (min-height:0) to form a scrollport */
.dash-app .studio-wizard .syllabus-inline.topics-pop{
  flex:1 1 auto; /* allow shrink into desk — shrink:0 + overflow:hidden clipped 大纲 with no scroll */
  min-height:0; /* critical flex/grid default min-height:auto blocks nested overflow:auto */
  display:flex!important;
  flex-direction:column;
  overflow:hidden;
}
.dash-app .studio-wizard .topics-pop-head{flex:none;margin-bottom:8px}
.dash-app .studio-wizard .topic-tree,
.dash-app .studio-wizard .topic-tree-wide{
  flex:1 1 auto; /* allow shrink into syllabus box */
  min-height:0; /* critical — without this, used height = content and overflow:auto never activates */
  max-height:none!important; /* parent height constrains; do not fight with a second max-height */
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  box-shadow:none!important;
}
.dash-app .studio-wizard .topic-tree label,
.dash-app .studio-wizard .topic-row{
  border-radius:0;
  border-color:transparent;
}
.dash-app .studio-wizard .topic-tree label:has(input:checked),
.dash-app .studio-wizard .topic-item:has(input:checked){
  background:transparent!important;
  border-color:transparent!important;
  box-shadow:none!important;
}
.dash-app .studio-wizard .topic-row[style*="--topic-depth:0"]{background:var(--dash-bg-2)!important}
.dash-app .studio-wizard .topic-row:has(input:checked){background:var(--dash-accent-soft)!important;box-shadow:none!important}
.dash-app .studio-wizard-actions{
  flex:none;
  /* not auto — auto steals free-space from syllabus/topic-tree on desktop */
  margin-top:16px;
  padding-top:12px;
  border-top:1px solid var(--dash-line);
}
.dash-app .code-row{display:flex;gap:8px;align-items:center}
.dash-app .code-row input{flex:1;min-width:0}
.dash-app .code-row .secondary{flex:none;min-height:40px;min-width:7.5em}
.dash-app .code-row button:disabled{opacity:1;cursor:default;background:var(--dash-bg-2)!important;color:var(--dash-muted)!important;border-color:var(--dash-line)!important}
.dash-app .auth-inline-error{color:var(--dash-danger)!important;margin:8px 0 0}
.dash-app .account-block{margin-top:28px}
.dash-app .account-block h2{margin:0 0 8px;font-size:1.05rem;letter-spacing:-.02em}
.dash-app .account-form{display:grid;gap:8px;max-width:520px}
.dash-app .account-form input{height:44px;border:1px solid var(--dash-line);border-radius:10px;background:var(--dash-bg-0);color:inherit;padding:0 12px}
.dash-app .account-form .primary{justify-self:start;min-height:40px;margin-top:4px}
.dash-app .sub-list{border:1px solid var(--dash-line);border-radius:14px;background:var(--dash-bg-1);overflow:hidden}
.dash-app .sub-row{display:flex;align-items:center;gap:16px;padding:14px 16px;border-bottom:1px solid var(--dash-line)}
.dash-app .sub-row:last-child{border-bottom:0}
.dash-app .sub-row .grow{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.dash-app .sub-row .grow span{color:var(--dash-muted)}
.dash-app .sub-boards{display:flex;flex-wrap:wrap;gap:8px}
.dash-app .subscribe-page .sub-list{margin-top:16px}
.dash-app .data-page{display:flex;flex-direction:column;gap:16px}
.dash-app .data-table-wrap{margin-top:4px;border:1px solid var(--dash-line);border-radius:14px;background:var(--dash-bg-1);overflow:auto}
.dash-app .data-table{width:100%;border-collapse:collapse;font-size:13.5px}
.dash-app .data-table th,
.dash-app .data-table td{padding:14px 16px;text-align:left;border-bottom:1px solid var(--dash-line);vertical-align:middle}
.dash-app .data-table th{font-size:12px;font-weight:700;letter-spacing:.02em;color:var(--dash-muted);background:color-mix(in srgb,var(--dash-ink,#15202b) 4%,transparent);white-space:nowrap}
.dash-app .data-table tbody tr:last-child td{border-bottom:0}
.dash-app .data-table tbody tr:hover{background:color-mix(in srgb,var(--dash-accent,#0d9f7c) 6%,transparent)}
.dash-app .data-table .data-subject{font-weight:650;color:var(--dash-ink)}
.dash-app .data-table .data-code,
.dash-app .data-table .data-price,
.dash-app .data-table .data-expire{font-variant-numeric:tabular-nums;white-space:nowrap}
.dash-app .data-table .data-code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;color:var(--dash-muted)}
.dash-app .data-progress{display:inline-flex;align-items:center;min-height:26px;padding:0 10px;border-radius:999px;background:color-mix(in srgb,#5b9fd4 18%,transparent);color:#2a6ea8;font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap}
html[data-theme="dark"] .dash-app .data-progress,
.dash-app[data-theme="dark"] .data-progress{background:rgba(91,159,212,.22);color:#9ec9ef}
.dash-app .data-actions{display:inline-flex;flex-wrap:wrap;gap:8px;align-items:center}
.dash-app .data-btn{min-height:34px;padding:0 14px;border:0;border-radius:999px;font-weight:700;font-size:12.5px;cursor:pointer;white-space:nowrap}
.dash-app .data-btn:active{transform:scale(.98)}
.dash-app .data-btn:focus-visible{outline:2px solid var(--dash-accent);outline-offset:2px}
.dash-app .data-btn-sub{background:#1f9d63;color:#fff}
.dash-app .data-btn-sub:hover{filter:brightness(1.06)}
.dash-app .data-btn-voucher{background:#e8a317;color:#1a1200}
.dash-app .data-btn-voucher:hover{filter:brightness(1.05)}
.dash-app .data-badge{display:inline-flex;align-items:center;min-height:28px;padding:0 12px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.02em}
.dash-app .data-badge-active{background:color-mix(in srgb,var(--dash-accent,#0d9f7c) 16%,transparent);color:var(--dash-accent,#0d9f7c)}
@media(max-width:860px){
  .dash-app .data-table th:nth-child(3),
  .dash-app .data-table td:nth-child(3),
  .dash-app .data-table th:nth-child(5),
  .dash-app .data-table td:nth-child(5){display:none}
}

.dash-app .sub-boards button{min-height:40px;padding:0 16px;border:1px solid var(--dash-line);border-radius:999px;background:var(--dash-bg-1);color:inherit;font-weight:650}
.dash-app .sub-boards button:hover{background:var(--dash-bg-2)}
.dash-app .sub-boards button[aria-selected="true"]{background:var(--dash-accent);color:var(--dash-accent-ink);border-color:transparent}
.dash-app .sub-boards button:active{transform:scale(.98)}
.dash-app .sub-boards button:focus-visible{outline:2px solid var(--dash-accent);outline-offset:2px}
.dash-app .pay-desk{display:flex;flex-direction:column;align-items:flex-start;gap:14px;width:min(560px,calc(100% - 48px))}
.dash-app .pay-desk h1{margin:0;font-size:1.7rem;letter-spacing:-.03em}
.dash-app .pay-price{margin:0;font-size:2rem;font-weight:680;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.dash-app .pay-price small{margin-left:6px;font-size:.95rem;font-weight:600;color:var(--dash-muted)}
.dash-app .pay-code{display:flex;align-items:center;gap:10px;min-height:52px;padding:0 14px;border:1px solid var(--dash-line);border-radius:12px;background:var(--dash-bg-1)}
.dash-app .pay-code span{color:var(--dash-muted)}
.dash-app .pay-code strong{font-size:1.15rem;letter-spacing:.04em;font-variant-numeric:tabular-nums}
.dash-app .pay-desk .pay-qr{width:min(280px,100%);background:#fff;border:1px solid var(--dash-line)}
.dash-app .pay-desk .mode-note{margin:0;max-width:52ch}






.dash-app .entry-meta{color:var(--dash-muted)}



































.dash-app .entry-name{display:block;font-weight:650}
.dash-app .entry-meta{display:block;margin-top:2px;font-size:12px}
















.dash-app .pay-qr{overflow:hidden;border-radius:12px;background:#1677ff}
.dash-app .pay-qr img{display:block;width:100%;height:auto}








/* Student feedback: write on the left, recent notes on the right. */
.dash-app .stu-feedback-grid{
  display:grid;
  grid-template-columns:minmax(0,1.15fr) minmax(280px,.85fr);
  gap:32px 40px;
  align-items:start;
}
.dash-app .stu-feedback-head{margin:0 0 16px}
.dash-app .stu-feedback-head h2{margin:0;font-size:1.15rem;font-weight:680;letter-spacing:-.02em}
.dash-app .stu-feedback-head p{margin:6px 0 0;max-width:42ch;color:var(--dash-muted);line-height:1.5}
.dash-app .stu-feedback-form{display:grid;gap:6px}
.dash-app .stu-feedback-form label{margin-top:10px;font-size:12px;font-weight:650;color:var(--dash-muted)}
.dash-app .stu-feedback-form input,
.dash-app .stu-feedback-form textarea{
  width:100%;
  border:1px solid var(--dash-line-strong);
  border-radius:10px;
  background:var(--dash-bg-2);
  color:var(--dash-ink);
  font:inherit;
  caret-color:var(--dash-ink);
}
.dash-app .stu-feedback-form input{height:44px;padding:0 12px}
.dash-app .stu-feedback-form textarea{min-height:168px;padding:12px;line-height:1.55;resize:vertical}
.dash-app .stu-feedback-form input::placeholder,
.dash-app .stu-feedback-form textarea::placeholder{color:var(--dash-muted);opacity:1}
.dash-app .stu-feedback-form input:focus,
.dash-app .stu-feedback-form textarea:focus{outline:none;border-color:var(--dash-accent);box-shadow:0 0 0 3px var(--dash-accent-soft)}
.dash-app .stu-feedback-actions{display:flex;justify-content:flex-end;margin-top:14px}
.dash-app .stu-feedback-board .feedback-list{min-height:0}
.dash-app .feedback-list .stu-fb-row{display:grid;align-items:start;gap:4px}
.dash-app .feedback-list .stu-fb-row h3{margin:0;font-size:14px;font-weight:650;letter-spacing:-.02em;line-height:1.35}
.dash-app .feedback-list .stu-fb-row p{
  margin:0;color:var(--dash-muted);font-size:13px;line-height:1.45;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.dash-app .stu-fb-meta{display:flex;flex-wrap:wrap;gap:8px 12px;margin-top:2px;color:var(--dash-muted);font-size:12px}
.dash-app .feedback-list>.library-empty{margin:0;padding:28px 16px;text-align:center;color:var(--dash-muted)}
@media(max-width:860px){
  .dash-app .stu-feedback-grid{grid-template-columns:1fr;gap:28px}
  .dash-app .stu-feedback-actions{justify-content:stretch}
  .dash-app .stu-feedback-actions .primary{width:100%}
}

/* Grading desk: queue + student working | official answer */
.dash-app .dash-grade-who{
  min-width:0;
  color:var(--dash-muted);
  font-size:.86rem;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.dash-app .workspace.grade-desk{
  display:grid;
  grid-template-columns:248px minmax(0,1fr);
  /* Bound the single row — without this, row sizes to content, ancestors clip, panes never scroll */
  grid-template-rows:minmax(0,1fr);
  flex:1;
  height:100%;
  min-height:0;
  overflow:hidden;
}
.dash-app .workspace.grade-desk[data-queue="closed"]{grid-template-columns:56px minmax(0,1fr)}
.dash-app .workspace.grade-desk.is-queue-anim{transition:grid-template-columns .18s ease}
.dash-app .grade-desk>.rail{
  overflow:auto;
  padding:14px 12px;
  border-right:1px solid var(--dash-line);
  background:var(--dash-bg-1);
}
.dash-app .grade-desk .section-title{display:flex;align-items:center;justify-content:space-between;color:var(--dash-ink);gap:8px}
.dash-app .grade-desk .queue-tools{display:inline-flex;align-items:center;gap:4px;flex:none}
.dash-app .grade-queue-toggle{
  width:28px;height:28px;padding:0;border-radius:8px;
  border:1px solid var(--dash-line);background:var(--dash-bg-2);color:var(--dash-ink);
  display:grid;place-items:center;cursor:pointer;font:inherit;line-height:1;flex:none;
}
.dash-app .grade-queue-toggle:hover{background:var(--dash-bg-3)}
.dash-app .grade-desk .queue-mark{display:none}
.dash-app .grade-desk[data-queue="closed"] .queue-heading,
.dash-app .grade-desk[data-queue="closed"] #clear-grading-task,
.dash-app .grade-desk[data-queue="closed"] .queue-copy,
.dash-app .grade-desk[data-queue="closed"] .mode-note{display:none}
.dash-app .grade-desk[data-queue="closed"]>.rail{padding:10px 6px;overflow-x:hidden}
.dash-app .grade-desk[data-queue="closed"] .section-title{justify-content:center;margin-bottom:8px}
.dash-app .grade-desk[data-queue="closed"] .queue-row{justify-content:center;padding:4px 0}
.dash-app .grade-desk[data-queue="closed"] .queue-mark{
  display:grid;place-items:center;
  width:32px;height:32px;border-radius:9px;
  background:var(--dash-bg-3);color:var(--dash-ink);
  font-size:13px;font-weight:700;
}
.dash-app .grade-desk[data-queue="closed"] .queue-row[aria-current="true"] .queue-mark{
  background:var(--dash-accent-soft);color:var(--dash-accent);
}
.dash-app .grade-desk .section-title small{font-variant-numeric:tabular-nums}
.dash-app .grade-desk .queue-row{
  display:flex;
  width:100%;
  text-align:left;
  padding:10px;
  border:0;
  border-radius:10px;
  background:transparent;
  color:var(--dash-ink);
}
.dash-app .grade-desk .queue-row[aria-current="true"],
.dash-app .grade-desk .queue-row:hover{background:var(--dash-accent-soft)}
.dash-app .grade-desk .queue-copy{display:flex;flex-direction:column;gap:2px;min-width:0}
.dash-app .grade-desk .queue-copy strong{font-size:13px;font-weight:650}
.dash-app .grade-desk .queue-copy small{
  color:var(--dash-muted);
  font-size:12px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.dash-app .grade-desk>.stage{
  display:flex;
  flex-direction:column;
  min-width:0;
  min-height:0;
  padding:0;
  overflow:hidden;
  background:var(--dash-bg-0);
}
.dash-app .grade-desk .grade-empty{flex:1;min-height:0}
.dash-app .grade-desk .empty-stage{color:var(--dash-muted)}
.dash-app .grade-desk .empty-stage strong{color:var(--dash-ink)}
/* Stage flex children: toolbar stays put; compare fills remainder so .split-scroll scrolls */
.dash-app .grade-toolbar{flex:none;min-width:0}
.dash-app .grade-panel-compare{
  flex:1;
  min-height:0;
  display:flex;
  flex-direction:column;
  overflow:hidden;
}
.dash-app .grade-panel-compare>.grade-split{flex:1;min-height:0}
.dash-app .grade-tools{
  display:flex;
  align-items:center;
  gap:12px;
  padding:8px 12px;
  border-bottom:1px solid var(--dash-line);
  background:var(--dash-bg-1);
  flex-wrap:wrap;
}
.dash-app .grade-qindex{display:flex;gap:4px;overflow:auto;flex:1;min-width:120px}
.dash-app .grade-qindex button{
  min-width:44px;
  height:32px;
  padding:0 8px;
  border-radius:8px;
  border:1px solid transparent;
  background:transparent;
  color:var(--dash-ink);
  font-weight:650;
  font-variant-numeric:tabular-nums;
}
.dash-app .grade-qindex button[aria-current="true"]{background:var(--dash-accent-soft);color:var(--dash-accent)}
.dash-app .grade-mark{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dash-app .grade-score{
  display:inline-flex;
  align-items:center;
  gap:6px;
  color:var(--dash-muted);
  font-size:12px;
  font-weight:650;
}
.dash-app .grade-score input,
.dash-app .grade-mark input[type="text"]{
  height:32px;
  border:1px solid var(--dash-line-strong);
  border-radius:8px;
  background:var(--dash-bg-2);
  color:var(--dash-ink);
  padding:0 8px;
  font:inherit;
  font-variant-numeric:tabular-nums;
  caret-color:var(--dash-ink);
}
.dash-app .grade-score input{width:72px}
.dash-app .grade-mark input[type="text"]{width:min(240px,28vw)}
.dash-app .grade-score span{color:var(--dash-ink);font-variant-numeric:tabular-nums}
.dash-app .grade-score input:focus,
.dash-app .grade-mark input[type="text"]:focus{
  outline:none;
  border-color:var(--dash-accent);
  box-shadow:0 0 0 3px var(--dash-accent-soft);
}
.dash-app .grade-split{
  --split:46;
  flex:1;
  min-height:0;
  display:grid;
  grid-template-columns:minmax(220px,calc(var(--split) * 1%)) 14px minmax(220px,1fr);
  background:var(--dash-bg-0);
}
.dash-app .grade-pane{
  min-width:0;
  min-height:0;
  display:flex;
  flex-direction:column;
  margin:12px;
  background:#fff;
  color:#1d1d1f;
  border:1px solid #dedee2;
  box-shadow:0 10px 28px rgba(20,24,34,.08);
  overflow:hidden;
}
.dash-app .grade-split>.grade-pane:first-child{margin-right:0}
.dash-app .grade-split>.grade-pane:last-child{margin-left:0}
.dash-app .grade-pane .split-bar{
  display:flex;
  align-items:center;
  gap:8px;
  min-height:44px;
  padding:6px 10px;
  border-bottom:1px solid #ececef;
  background:#fafafd;
  color:#1d1d1f;
}
.dash-app .grade-pane .split-bar h3{margin:0;flex:1;min-width:0;font-size:13px;font-weight:700;letter-spacing:-.01em}
.dash-app .grade-pane .zoom-tools{display:inline-flex;align-items:center;gap:2px}
.dash-app .grade-pane .zoom-tools button{
  min-width:32px;
  height:28px;
  padding:0 8px;
  border-radius:7px;
  border:1px solid rgba(60,60,67,.16);
  background:#fff;
  color:#1d1d1f;
  font-variant-numeric:tabular-nums;
}
.dash-app .grade-pane .split-scroll{flex:1;min-height:0;overflow:auto;padding:12px;background:#fff}
.dash-app .grade-pane .split-zoom{min-width:100%}
.dash-app .grade-pane .answer-image,
.dash-app .grade-pane .question-image{width:100%;max-width:none;height:auto;display:block}
.dash-app .grade-pane .image-frame{min-height:0;background:#fff}
.dash-app .grade-pane .layer-key{margin-top:8px;color:#6e6e73}
.dash-app .grade-mc{margin:10px 0 0;color:#3a3a3c;font-size:13px}
.dash-app .grade-split .split-handle{
  border:0;
  padding:0;
  margin:0;
  background:transparent;
  cursor:col-resize;
  touch-action:none;
  position:relative;
}
.dash-app .grade-split .split-handle::before{
  content:"";
  position:absolute;
  left:5px;
  top:24px;
  bottom:24px;
  width:4px;
  border-radius:4px;
  background:#c8c8ce;
}
.dash-app .grade-split .split-handle:hover::before,
.dash-app .grade-split .split-handle:focus-visible::before{background:var(--dash-accent)}
.dash-app .grade-desk button:focus-visible{outline:2px solid var(--dash-accent);outline-offset:2px}
.dash-app .grade-pane .split-scroll{scrollbar-color:rgba(60,60,67,.35) transparent}
@media(max-width:900px){
  .dash-app .dash-main-body:has(.workspace.grade-desk){overflow:auto}
  .dash-app .workspace.grade-desk{display:flex;flex-direction:column;height:auto;overflow:visible}
  .dash-app .grade-desk>.rail{max-height:240px;flex:none;border-right:0;border-bottom:1px solid var(--dash-line)}
  .dash-app .workspace.grade-desk[data-queue="closed"]{display:flex}
  .dash-app .grade-desk[data-queue="closed"]>.rail{
    max-height:none;display:flex;flex-direction:row;align-items:center;gap:6px;overflow:auto;padding:8px;
  }
  .dash-app .grade-desk[data-queue="closed"] .section-title{margin:0;width:auto}
  .dash-app .grade-desk[data-queue="closed"] .queue-list{display:flex;flex-direction:row;gap:4px}
  .dash-app .grade-desk>.stage{overflow:visible;min-height:70vh}
  .dash-app .grade-split{display:block;height:auto}
  .dash-app .grade-split .split-handle{display:none}
  .dash-app .grade-pane{min-height:70vh;margin:10px}
  .dash-app .grade-mark input[type="text"]{width:min(100%,240px)}
  .dash-app .grade-pane .zoom-tools button{min-width:44px;height:36px}
}
@media(prefers-reduced-motion:reduce){
  .dash-app .grade-desk .queue-row,
  .dash-app .workspace.grade-desk.is-queue-anim{transition:none}
}
.dash-app .grade-pane .mc-result{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0 0 12px;padding:10px 12px;border-radius:8px;border:1px solid #b9dccb;background:#e8f6ee;color:#0d5c39}
.dash-app .grade-pane .mc-result.bad{border-color:#ecc4be;background:#fdeceb;color:#812018}
.dash-app .grade-pane .mc-result strong{font-size:15px}
.dash-app .grade-pane .mc-result span{font-size:13px}
.dash-app .grade-qindex button.is-right{box-shadow:inset 0 -2px 0 #1f7a4d}
.dash-app .grade-qindex button.is-wrong{box-shadow:inset 0 -2px 0 #b42318}


/* ============================================================
   Mobile / iPad adaptation + performance (2026-09)
   Breakpoints: phone ≤480 · phablet ≤720 · iPad port ≤900 · iPad land ≤1100
   ============================================================ */

/* Safe-area + touch basics (all viewports) */
.dash-app{
  padding-left:env(safe-area-inset-left,0);
  padding-right:env(safe-area-inset-right,0);
}
.dash-main-top,
.dash-topbar,
.dash-side{
  padding-left:max(8px,env(safe-area-inset-left,0px));
  padding-right:max(8px,env(safe-area-inset-right,0px));
}
.dash-main-body{
  padding-bottom:env(safe-area-inset-bottom,0);
}
.dash-app button,
.dash-app .primary,
.dash-app .secondary,
.dash-app .dash-side-item,
.dash-app .dash-side-toggle,
.dash-app .dash-fs-toggle,
.dash-app .dash-lang-toggle,
.dash-app .dash-theme-toggle button,
.dash-app .dash-account-abbr,
.dash-app a.dash-nav-btn{
  touch-action:manipulation;
  -webkit-tap-highlight-color:transparent;
}
.dash-app img.question-image,
.dash-app img.answer-image,
.dash-app .paper-question img,
.dash-app .split-zoom img{
  max-width:100%;
  height:auto;
}
.dash-app .queue-list .queue-row,
.dash-app .candidate-list .candidate,
.dash-app .library-list .library-item,
.dash-app .feedback-list > *{
  content-visibility:auto;
  contain-intrinsic-size:auto 64px;
}

/* Mobile menu button + scrim (hidden on desktop) */
.dash-mobile-menu{
  display:none;
  appearance:none;border:1px solid var(--dash-line);background:var(--dash-bg-2);
  color:var(--dash-ink);border-radius:12px;cursor:pointer;
  width:44px;height:44px;min-width:44px;padding:0;
  place-items:center;flex:none;font:inherit;font-size:1.25rem;line-height:1;
}
.dash-mobile-menu:hover{background:var(--dash-bg-3)}
.dash-side-scrim{
  display:none;position:fixed;inset:0;z-index:55;
  background:rgba(0,0,0,.42);border:0;padding:0;margin:0;cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}

/* ---- ≤1100: iPad landscape & below — overlay drawer ---- */
@media (max-width:1100px){
  .dash-frame:not(.dash-frame--guest){
    grid-template-columns:1fr!important;
  }
  .dash-frame:not(.dash-frame--guest):has(.dash-side[data-expanded="true"]){
    grid-template-columns:1fr!important;
  }
  .dash-mobile-menu{display:inline-grid}
  .dash-side-scrim{
    display:block;opacity:0;pointer-events:none;
    transition:opacity .18s ease;
  }
  .dash-frame:has(.dash-side[data-expanded="true"]) .dash-side-scrim{
    opacity:1;pointer-events:auto;
  }
  .dash-side{
    position:fixed!important;
    left:0;top:0;bottom:0;
    width:min(280px,86vw)!important;
    max-width:280px;
    min-height:100dvh;
    z-index:60;
    transform:translateX(-105%);
    transition:transform .2s ease, background .18s ease;
    box-shadow:none;
    padding-top:max(10px,env(safe-area-inset-top,0px));
    padding-bottom:max(12px,env(safe-area-inset-bottom,0px));
    overflow:auto;
    -webkit-overflow-scrolling:touch;
  }
  .dash-side.is-side-anim{transition:transform .2s ease, background .18s ease}
  .dash-side[data-expanded="true"]{
    transform:translateX(0);
    width:min(280px,86vw)!important;
    box-shadow:12px 0 40px rgba(0,0,0,.28);
  }
  /* Drawer always shows labels when open */
  .dash-side[data-expanded="true"] .dash-side-brand-text{display:inline}
  .dash-side[data-expanded="true"] .dash-side-item .dash-side-label{display:inline}
  .dash-side[data-expanded="true"] .dash-side-top{
    flex-direction:row;align-items:center;justify-content:space-between;
  }
  .dash-side-item{
    min-height:44px;padding:12px 12px;
  }
  .dash-side-toggle{min-width:44px;height:44px}
  .dash-main{min-width:0;width:100%}
  .dash-main-top{
    padding:10px 12px;
    padding-top:max(10px,env(safe-area-inset-top,0px));
    gap:8px;
  }
  .dash-main-top h1{font-size:.95rem;max-width:42vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dash-main-top .scope{width:100%;order:3}
  .dash-main-top .scope select{min-height:40px;flex:1;min-width:0}
  .dash-top-user{max-width:min(36vw,160px)}
  /* Wizard: document-flow scroll on tablet/phone — avoid flex-crushing topic-tree */
  .dash-app .dash-main-body:has(.studio-wizard){
    overflow:auto;
    -webkit-overflow-scrolling:touch;
  }
  .dash-app .studio-wizard{
    flex:1 0 auto;
    min-height:auto;
    height:auto;
    overflow:visible;
    padding:12px 12px 64px;
  }
  .dash-app .studio-wizard-body{
    grid-template-columns:1fr!important;
    grid-template-rows:auto;
    flex:none;
    min-height:0;
    height:auto;
    overflow:visible;
  }
  .dash-app .studio-wizard-side,
  .dash-app .studio-wizard-main{
    height:auto!important;
    max-height:none!important;
    min-height:0;
  }
  .dash-app .studio-wizard-main{
    overflow:visible!important;
  }
  .dash-app .studio-size-cards{grid-template-columns:1fr}
  .dash-app .scope-chip-row{flex-wrap:wrap;gap:8px}
  .dash-app .scope-chip-row .scope-menu{flex:1 1 calc(50% - 8px);max-width:none}
  .dash-app .manual-filter-main{grid-template-columns:1fr 1fr}
  .dash-app .manual-grid,
  .dash-app .smart-grid{
    display:flex!important;flex-direction:column;height:auto;min-height:0;overflow:visible;
  }
  .dash-app .manual-grid>.candidate-rail,
  .dash-app .smart-grid>.candidate-rail{max-height:240px;overflow:auto;-webkit-overflow-scrolling:touch}
  .dash-app .manual-grid>.stage,
  .dash-app .smart-grid>.stage{min-height:50vh;overflow:visible}
  .dash-app .grade-split{
    grid-template-columns:minmax(180px,calc(var(--split,46) * 1%)) 18px minmax(180px,1fr);
  }
  .dash-app .grade-split .split-handle{min-width:18px}
  .dash-app .grade-split .split-handle::before{left:7px;width:4px}
  .dash-app .account-form,.dash-app .stu-feedback-form{max-width:none}
  .dash-app .dash-main-body>.feedback-page,.dash-app .dash-main-body>.content,.dash-app .dash-main-body>main.content,.dash-app .dash-main-body>.library,.dash-app .dash-main-body>main.library,.dash-app .dash-main-body>.student-hub,.dash-app .dash-main-body>main.student-hub{
    width:calc(100% - 24px);margin:16px auto 40px;
  }
  .dash-app .auth-dialog,.dash-app .confirm-dialog,.dash-app .feedback-dialog,.dash-app .modal-backdrop,.dash-app .dialog-backdrop{
    padding:max(12px,env(safe-area-inset-top,0px)) 12px max(12px,env(safe-area-inset-bottom,0px));
    align-items:end;
  }
  .dash-app .auth-shell,.dash-app .role-choice-shell,.dash-app .feedback-card,.dash-app .confirm-card,.dash-app .modal,.dash-app .dialog{
    width:100%;
    max-height:min(88dvh,calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px) - 24px));
    overflow:auto;
    -webkit-overflow-scrolling:touch;
  }
}

/* ---- ≤900: iPad portrait / large phone — stack grade + feedback ---- */
@media (max-width:900px){
  .dash-app .workspace.grade-desk{display:flex;flex-direction:column;height:auto;overflow:visible}
  .dash-app .grade-desk>.rail{max-height:200px;flex:none;border-right:0;border-bottom:1px solid var(--dash-line)}
  .dash-app .grade-desk>.stage{overflow:visible;min-height:60vh}
  .dash-app .grade-split{
    display:flex;flex-direction:column;height:auto;
    grid-template-columns:none;
  }
  .dash-app .grade-split .split-handle{display:none}
  .dash-app .grade-pane{min-height:55vh;margin:10px;flex:none}
  .dash-app .grade-pane .zoom-tools button{min-width:44px;height:36px}
  .dash-app .stu-feedback-grid{grid-template-columns:1fr;gap:24px}
  .dash-app .summary{grid-template-columns:1fr 1fr}
  .dash-app .sub-row{flex-wrap:wrap}
  .dash-app .pay-desk{width:calc(100% - 24px)}
  .dash-app .intro-spread{grid-template-columns:1fr!important;gap:24px}
  .dash-app .intro-drift.neural-ready{
    --orb-size:min(78vw,300px)!important;
    min-height:340px!important;
  }
}

/* ---- ≤720: phablet ---- */
@media (max-width:720px){
  .dash-topbar{padding:10px 12px;gap:8px}
  .dash-topbar .dash-nav-row{width:100%;overflow:auto;-webkit-overflow-scrolling:touch}
  .dash-topbar-actions{width:100%;margin-left:0;justify-content:flex-end}
  .dash-app .intro-open h1{font-size:clamp(26px,7vw,34px)!important}
  .dash-app .intro-role{grid-template-columns:56px minmax(0,1fr)!important}
  .dash-app .intro-close{flex-direction:column;align-items:stretch;gap:10px}
  .dash-app .intro-close .primary,
  .dash-app .intro-close .secondary{width:100%;min-height:44px;justify-content:center}
  .dash-app .studio-gate-cards{grid-template-columns:1fr}
  .dash-app .studio-steps{gap:6px}
  .dash-app .studio-step{padding:8px 10px;min-height:36px}
  
  
  
  .dash-app .code-row{flex-wrap:wrap}
  .dash-app .code-row .secondary{width:100%}
  .dash-main-top-right{width:100%;justify-content:flex-end}
  .dash-app .manual-filter-main{grid-template-columns:1fr}
  .dash-app .manual-filter-main .filter-run,
  .dash-app .manual-filter-main .secondary{grid-column:1/-1}
}

/* ---- ≤480: phone ---- */
@media (max-width:480px){
  .dash-side{width:min(92vw,300px)!important}
  .dash-side[data-expanded="true"]{width:min(92vw,300px)!important}
  .dash-app .summary{grid-template-columns:1fr 1fr}
  .dash-app .metric{padding:12px}
  .dash-app .metric strong{font-size:1.15rem}
  .dash-app .grade-tools{padding:8px;gap:8px}
  .dash-app .grade-mark{width:100%}
  .dash-app .grade-mark input[type="text"]{width:100%;max-width:none}
  .dash-app .grade-qindex button{min-width:44px;height:36px}
  .dash-app .dash-main-body>.content,.dash-app .dash-main-body>main.content{width:calc(100% - 16px);margin:12px auto 32px}
  .dash-brand-title{font-size:1rem}
  .dash-app .intro-drift.neural-ready{
    --orb-size:min(88vw,260px)!important;
    min-height:300px!important;
  }
}

/* ---- Performance: kill heavy blur / shadows on narrow & touch ---- */
@media (max-width:900px),(hover:none),(pointer:coarse){
  :root{--dash-blur:0px;--dash-shadow:0 4px 16px rgba(0,0,0,.18);--dash-shadow-soft:0 2px 8px rgba(0,0,0,.12)}
  .dash-app .student-task-panel,
  .dash-app .student-join-panel,
  .dash-app .account-card,
  .dash-app .usage-board,
  .dash-app .studio-gate,
  .dash-app .studio-wizard-main,
  .dash-app .studio-wizard-side,
  .dash-app .simple-workspace,
  .dash-app .manual-workspace,
  .dash-app .paper-side-card,
  .dash-app .inspector,
  .dash-app .candidate-rail,
  .dash-app .auth-shell,
  .dash-app .role-choice-shell,
  .dash-app dialog,
  .dash-app .modal,
  .dash-app .publish-dialog,
  .dash-app .switch-dialog,
  .dash-app .content,
  .dash-app .summary,
  .dash-app .topic-row,
  .dash-app .practice-shell,
  .dash-app .wrong-card,
  .dash-app .task-card,
  .dash-app .progress-card,
  .dash-app .guest-preview-note,
  .dash-app > .app .panel,
  .dash-app > .app .card,
  .dash-app > .app .workspace,
  .dash-app > .app .side,
  .dash-app > .app .main-pane,
  .dash-app .topbar,
  .dash-app .commandbar,
  .dash-app .manual-filter-bar,
  .dash-app .studio-scope-bar,
  .dash-app .studio-top,
  .dash-app .modal-backdrop,
  .dash-app .dialog-backdrop{
    backdrop-filter:none!important;
    -webkit-backdrop-filter:none!important;
    background:var(--dash-bg-1)!important;
  }
  .dash-app .paper-question{box-shadow:0 4px 14px rgba(0,0,0,.18)!important}
  .dash-app .grade-pane{box-shadow:0 4px 12px rgba(20,24,34,.06)!important}
  /* Pause costly intro orb CSS animations on touch / narrow */
  .dash-app .intro-drift.neural-ready .intro-neural-subjects::before,
  .dash-app .intro-neural-subject,
  .dash-app .intro-drift span{
    animation:none!important;
    will-change:auto!important;
  }
}
@media (max-width:900px){
  .dash-app .intro-neural-canvas{opacity:.9}
}

/* Prefer reduced motion globally for dash chrome */
@media (prefers-reduced-motion:reduce){
  .dash-side,
  .dash-side-scrim,
  .dash-frame.is-side-anim,
  .dash-side.is-side-anim{transition:none!important}
}



/* Desktop: keep Q-index + score on one toolbar row */
@media (min-width:901px){
  .dash-app .grade-toolbar{
    display:flex;flex-wrap:wrap;align-items:center;gap:8px;
    padding:10px 12px;border-bottom:1px solid var(--dash-line);
    background:var(--dash-bg-1);
  }
  .dash-app .grade-toolbar .grade-panel-chrome{flex:1;min-width:160px}
  .dash-app .grade-toolbar .grade-panel-score{flex:none}
  .dash-app .grade-toolbar .grade-tools{padding:0;border:0;margin:0}
  .dash-app .grade-toolbar .grade-mark,
  .dash-app .grade-toolbar .grade-sticky-mark{
    position:static;box-shadow:none;border:0;padding:0;width:auto;
    display:flex;flex-wrap:wrap;gap:8px;align-items:center;
  }
  .dash-app .grade-pane .zoom-toggle{display:none}
  .dash-app .grade-pane .zoom-tools{display:inline-flex}
}
@media (max-width:900px){
  .dash-app .grade-toolbar{display:contents}
}

/* ============================================================
   Dense UI relief — studio / grading panels (2026-09)
   Phone ≤900: one primary panel · iPad ≤1100: preview + one
   Desktop ≥1101: largely unchanged; tool rows may wrap
   ============================================================ */

.dash-app .mobile-panel-tabs{display:none}
.dash-app .studio-sticky-actions{display:none}
.dash-app .studio-scope-chrome{flex:0 0 auto;overflow:visible!important}
/* Keep 考试局/科目 above mobile tabs despite .studio-scope-bar{order:1} */
.dash-app .manual-workspace > .studio-scope-chrome,
.dash-app .smart-workspace > .studio-scope-chrome{order:0!important}
.dash-app .smart-workspace > .mobile-panel-tabs{order:0}
.dash-app .smart-workspace > .studio-panel-filters,
.dash-app .smart-workspace > .studio-filter-extras{order:1}

.dash-app .studio-filter-extras{flex:0 0 auto}

.dash-app .grade-queue-open-bar{display:none}
.dash-app .grade-pane .zoom-toggle{display:none}

/* Desktop: allow top tool rows to wrap with breathing room */
@media (min-width:1101px){
  .dash-app .scope-chip-row,
  .dash-app .manual-filter-main,
  .dash-app .simple-top-actions,
  .dash-app .paper-toolbar,
  .dash-app .grade-tools,
  .dash-app .grade-mark{
    flex-wrap:wrap;
    gap:12px;
  }
  .dash-app .studio-filter-more{
    margin-top:10px;
    border-top:1px solid var(--dash-line);
    padding-top:10px;
  }
  .dash-app .studio-filter-more>summary{
    cursor:pointer;
    color:var(--dash-accent);
    font-weight:650;
    font-size:13px;
    width:max-content;
    list-style:none;
  }
  .dash-app .studio-filter-more>summary::-webkit-details-marker{display:none}
  .dash-app .studio-filter-more-body{
    display:flex;flex-wrap:wrap;gap:12px;margin-top:12px;align-items:stretch;
  }
}

/* ---- ≤1100: iPad land & below — section gaps + dual-panel option ---- */
@media (max-width:1100px){
  /* Scope (考试局/科目) sticky only as workspace top chrome — NOT wizard step-1 inline chrome */
  .dash-app .smart-workspace > .studio-scope-chrome,
  .dash-app .manual-workspace > .studio-scope-chrome{
    display:block!important;
    position:sticky;top:0;z-index:16;
    padding:10px 12px!important;
    margin:0;
    background:var(--dash-bg-1);
    border-bottom:1px solid var(--dash-line);
    overflow:visible!important;
    pointer-events:auto;
  }
  .dash-app .studio-scope-chrome .scope-chip-row{
    display:flex!important;flex-wrap:wrap;gap:8px;align-items:stretch;
    overflow:visible!important;
  }
  .dash-app .studio-scope-chrome .scope-menu{
    flex:1 1 calc(50% - 8px);min-width:140px;max-width:none;
    position:relative;z-index:1;
  }
  .dash-app .studio-scope-chrome .scope-menu[open]{z-index:90}
  .dash-app .studio-scope-chrome .scope-menu-pop,
  .dash-app .studio-scope-chrome .year-menu-pop{
    z-index:95!important;
    max-height:min(60vh,420px);overflow:auto;
    -webkit-overflow-scrolling:touch;
  }
  .dash-app .studio-scope-chrome .scope-menu>summary{
    min-height:44px;padding:8px 28px 8px 12px;
    touch-action:manipulation;
  }
  .dash-app .studio-scope-chrome .scope-option{
    min-height:44px;padding:10px 12px;touch-action:manipulation;
  }
  .dash-app .mobile-panel-tabs{
    display:flex;gap:6px;flex-wrap:wrap;
    padding:10px 12px;margin:0;
    border-bottom:1px solid var(--dash-line);
    background:var(--dash-bg-1);
    /* Sit under sticky scope chrome; do not cover 考试局/科目 */
    position:relative;top:auto;z-index:11;
  }
  .dash-app .mobile-panel-tabs button{
    flex:1 1 auto;min-height:40px;min-width:0;
    padding:0 12px;border-radius:10px;
    border:1px solid var(--dash-line);background:var(--dash-bg-2);
    color:var(--dash-muted);font-weight:600;font-size:13px;
  }
  .dash-app .mobile-panel-tabs button[aria-selected="true"]{
    background:var(--dash-accent-soft);color:var(--dash-accent);border-color:transparent;
  }

  .dash-app .smart-workspace,
  .dash-app .manual-workspace{
    display:flex;flex-direction:column;gap:0;min-height:0;
    overflow:visible;
  }
  .dash-app .studio-top,
  .dash-app .manual-filter-bar,
  .dash-app .studio-scope-bar{
    padding:12px 14px!important;
  }
  /* Filter extras stay in the filters panel; scope chrome is outside panels */
  .dash-app .studio-filter-extras{
    padding:8px 12px 4px!important;
    background:var(--dash-bg-1);
  }
  .dash-app .studio-primary-filters,
  .dash-app .studio-filter-more-body{
    display:flex;flex-wrap:wrap;gap:12px!important;align-items:stretch;
  }
  .dash-app .studio-filter-more{
    margin-top:12px;padding-top:12px;border-top:1px solid var(--dash-line);
  }
  .dash-app .studio-filter-more>summary{
    cursor:pointer;color:var(--dash-accent);font-weight:650;font-size:13px;
    list-style:none;min-height:40px;display:inline-flex;align-items:center;
  }
  .dash-app .studio-filter-more>summary::-webkit-details-marker{display:none}
  .dash-app .studio-filter-more-body{margin-top:12px}

  .dash-app .candidate-list{gap:10px!important;padding:4px 0 20px}
  .dash-app .candidate-row{gap:10px;margin-bottom:8px;align-items:center}
  .dash-app .candidate-row .candidate{padding:12px 12px;min-height:52px}
  .dash-app .candidate-use{min-height:40px;padding:0 12px}

  .dash-app .studio-sticky-actions{
    display:flex;flex-wrap:wrap;gap:10px;
    position:sticky;bottom:0;z-index:11;
    padding:10px 12px calc(10px + env(safe-area-inset-bottom,0px));
    background:var(--dash-bg-1);border-top:1px solid var(--dash-line);
    box-shadow:0 -6px 18px rgba(0,0,0,.06);
  }
  .dash-app .studio-sticky-actions .secondary,
  .dash-app .studio-sticky-actions .primary{
    flex:1 1 calc(50% - 10px);min-height:44px;justify-content:center;
  }
  /* Prefer sticky actions on narrow; de-emphasize duplicated inspector stack */
  .dash-app .smart-workspace .paper-action-stack{display:none}
  .dash-app .smart-workspace .paper-toolbar #smart-reshuffle{display:none}

  /* iPad dual: keep preview + selected secondary */
  .dash-app .smart-workspace .studio-panel{display:none}
  .dash-app .smart-workspace[data-studio-panel="filters"] .studio-panel-filters,
  .dash-app .smart-workspace[data-studio-panel="filters"] .studio-panel-preview,
  .dash-app .smart-workspace[data-studio-panel="candidates"] .studio-panel-candidates,
  .dash-app .smart-workspace[data-studio-panel="candidates"] .studio-panel-preview,
  .dash-app .smart-workspace[data-studio-panel="preview"] .studio-panel-preview{
    display:block;
  }
  .dash-app .smart-workspace > .studio-scope-chrome{display:block!important}

  .dash-app .smart-workspace .smart-grid{
    display:flex!important;flex-direction:column;gap:16px;
    padding:12px;height:auto;overflow:visible;
  }
  .dash-app .smart-workspace .candidate-rail{
    max-height:none;border:1px solid var(--dash-line);border-radius:12px;
    padding:14px;background:var(--dash-bg-1);
  }
  .dash-app .smart-workspace .stage{
    min-height:50vh;border:1px solid var(--dash-line);border-radius:12px;
    padding:14px;background:var(--dash-bg-1);
  }
  .dash-app .smart-workspace .inspector{
    position:static!important;transform:none!important;width:auto!important;
    max-width:none;box-shadow:none!important;
    border:1px solid var(--dash-line);border-radius:12px;padding:14px;
  }

  /* Wizard: one step visible, big actions */
  .dash-app .studio-wizard{padding:12px 12px 72px;gap:16px}
  .dash-app .studio-wizard-body{gap:16px}
  .dash-app .studio-wizard[data-step] .studio-step:not(.on){display:none}
  .dash-app .studio-wizard .studio-steps{gap:0}
  .dash-app .studio-wizard .studio-step.on{
    display:inline-flex;min-height:40px;padding:8px 14px;font-size:14px;
  }
  .dash-app .studio-wizard-side{
    border:1px solid var(--dash-line);border-radius:12px;padding:14px;margin-bottom:4px;
  }
  .dash-app .studio-wizard-actions{
    display:flex;flex-wrap:wrap;gap:12px;
    flex:none;
    margin-top:16px; /* not auto — auto steals flex free-space away from topic-tree */
    position:sticky;bottom:0;z-index:5;
    padding:12px 0 calc(8px + env(safe-area-inset-bottom,0px));
    background:linear-gradient(180deg,transparent,var(--dash-bg-1) 28%);
  }
  .dash-app .studio-wizard-actions .primary,
  .dash-app .studio-wizard-actions .secondary{
    flex:1 1 140px;min-height:48px;font-size:15px;justify-content:center;
  }

  /* Grading */
  .dash-app .grade-desk{gap:0}
  .dash-app .grade-qindex{gap:8px;padding:8px 2px 10px}
  .dash-app .grade-qindex button{min-width:44px;min-height:40px;padding:0 12px;border-radius:10px}
  .dash-app .grade-pane .zoom-toggle{
    display:inline-flex;align-items:center;justify-content:center;
    min-width:36px;height:32px;border-radius:8px;margin-left:auto;
  }
  .dash-app .grade-pane .zoom-tools{display:none}
  .dash-app .grade-pane.zoom-open .zoom-tools{display:inline-flex}
  .dash-app .grade-pane.zoom-open .zoom-toggle{color:var(--dash-accent)}
}


/* Grade tabs only on phone; iPad keeps spaced stack */
@media (min-width:901px) and (max-width:1100px){
  .dash-app .grade-panel-tabs{display:none}
  .dash-app .grade-queue-open-bar{display:none}
  .dash-app .workspace.grade-desk{gap:16px}
  .dash-app .grade-desk>.rail{
    max-height:280px;border:1px solid var(--dash-line);border-radius:12px;margin:12px 12px 0;padding:12px;
  }
  .dash-app .grade-desk>.stage{padding:0 12px 16px}
  .dash-app .grade-tools{gap:12px;padding:12px;flex-wrap:wrap}
  .dash-app .grade-split{gap:16px;padding:0 0 12px}
  .dash-app .grade-pane{min-height:40vh;margin:0 0 12px}
}
/* ---- ≤900: phone — single primary panel ---- */
@media (max-width:900px){
  .dash-app .smart-workspace[data-studio-panel="filters"] .studio-panel-preview,
  .dash-app .smart-workspace[data-studio-panel="candidates"] .studio-panel-preview{
    display:none!important;
  }
  .dash-app .smart-workspace > .studio-scope-chrome{display:block!important;position:sticky;top:0;z-index:16}

  .dash-app .smart-workspace[data-studio-panel="filters"] .studio-panel-filters{display:block}
  .dash-app .smart-workspace[data-studio-panel="candidates"] .studio-panel-candidates{display:block}
  .dash-app .smart-workspace[data-studio-panel="preview"] .studio-panel-preview{display:block}
  .dash-app .smart-workspace .studio-sticky-actions{display:flex}
  .dash-app .smart-workspace[data-studio-panel="filters"] .studio-sticky-actions,
  .dash-app .smart-workspace[data-studio-panel="candidates"] .studio-sticky-actions{display:none}

  /* Hide wizard side chrome on phone — board/subject live in step-1 .wizard-scope-chrome */
  .dash-app .studio-wizard-side{display:none}

  .dash-app .workspace.grade-desk{
    display:flex;flex-direction:column;height:auto;min-height:0;overflow:visible;gap:0;
  }
  .dash-app .grade-desk>.rail,
  .dash-app .grade-desk>.stage{max-height:none;border:0;min-height:0}
  .dash-app .grade-queue-open-bar{
    display:block;position:sticky;bottom:0;z-index:10;
    padding:12px;padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));
    background:var(--dash-bg-1);border-top:1px solid var(--dash-line);
  }
  .dash-app .grade-queue-open-bar .primary{width:100%;min-height:48px}

  /* Panel visibility */
  .dash-app .grade-desk .grade-panel-queue,
  .dash-app .grade-desk .grade-panel-score,
  .dash-app .grade-desk .grade-panel-compare,
  .dash-app .grade-desk .grade-panel-chrome{display:none}
  .dash-app .grade-desk[data-grade-panel="queue"] .grade-panel-queue{display:block}
  .dash-app .grade-desk[data-grade-panel="queue"] .grade-panel-stage{display:none}
  .dash-app .grade-desk[data-grade-panel="compare"] .grade-panel-stage{display:block}
  .dash-app .grade-desk[data-grade-panel="compare"] .grade-panel-chrome{display:block}
  .dash-app .grade-desk[data-grade-panel="compare"] .grade-panel-compare{display:block}
  .dash-app .grade-desk[data-grade-panel="compare"] .grade-panel-score{display:none}
  .dash-app .grade-desk[data-grade-panel="score"] .grade-panel-stage{display:block}
  .dash-app .grade-desk[data-grade-panel="score"] .grade-panel-chrome{display:block}
  .dash-app .grade-desk[data-grade-panel="score"] .grade-panel-score{display:block}
  .dash-app .grade-desk[data-grade-panel="score"] .grade-panel-compare{display:none}

  /* Queue as full-screen list (not skinny column) */
  .dash-app .grade-desk[data-grade-panel="queue"]>.rail{
    max-height:none;flex:1;min-height:70vh;padding:14px 12px 80px;
    border-right:0;border-bottom:0;
  }
  .dash-app .grade-desk .grade-queue-toggle{display:none}
  .dash-app .grade-desk .queue-list{display:flex;flex-direction:column;gap:8px}
  .dash-app .grade-desk .queue-row{
    min-height:56px;padding:12px 14px;border-radius:12px;border:1px solid var(--dash-line);
  }

  .dash-app .grade-split{
    display:flex;flex-direction:column;gap:16px;height:auto;padding:12px;
  }
  .dash-app .grade-split .split-handle{display:none}
  .dash-app .grade-pane{
    min-height:40vh;margin:0;flex:none;
    border:1px solid var(--dash-line);border-radius:12px;overflow:hidden;
  }
  .dash-app .grade-pane .split-bar{
    padding:10px 12px;gap:8px;border-bottom:1px solid var(--dash-line);
  }

  .dash-app .grade-panel-score{padding:0 0 8px}
  .dash-app .grade-tools{
    display:flex;flex-direction:column;gap:12px;padding:12px;
    border-bottom:1px solid var(--dash-line);
  }
  .dash-app .grade-sticky-mark,
  .dash-app .grade-mark{
    position:sticky;bottom:0;z-index:11;
    display:flex;flex-wrap:wrap;gap:10px;align-items:center;
    width:100%;padding:12px;
    padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));
    background:var(--dash-bg-1);border-top:1px solid var(--dash-line);
    box-shadow:0 -6px 18px rgba(0,0,0,.06);
  }
  .dash-app .grade-mark .grade-score,
  .dash-app .grade-mark input[type="text"],
  .dash-app .grade-mark input[type="number"],
  .dash-app .grade-mark #q-feedback{
    flex:1 1 100%;max-width:none;width:100%;min-height:44px;
  }
  .dash-app .grade-mark .secondary,
  .dash-app .grade-mark .primary{
    flex:1 1 calc(50% - 10px);min-height:44px;justify-content:center;
  }

  .dash-app .simple-top{
    flex-wrap:wrap;gap:12px;padding:12px;align-items:stretch;
  }
  .dash-app .simple-top-actions{
    width:100%;justify-content:stretch;gap:10px;
  }
  .dash-app .simple-top-actions .secondary,
  .dash-app .simple-top-actions .primary{
    flex:1 1 calc(50% - 10px);min-height:44px;
  }
}

/* Phone tighter */
@media (max-width:480px){
  .dash-app .mobile-panel-tabs button{font-size:12px;padding:0 8px}
  .dash-app .studio-sticky-actions .secondary,
  .dash-app .studio-sticky-actions .primary{flex:1 1 100%}
}

/* Mobile scope menus: above sticky bars, not clipped by workspace */
@media (max-width:1100px){
  .dash-app .manual-workspace.smart-workspace,
  .dash-app .studio-scope-chrome,
  .dash-app .studio-scope-chrome .scope-chip-row{
    overflow:visible!important;
  }
  .dash-app .studio-scope-chrome .scope-menu[open]{z-index:100}
  .dash-app .studio-sticky-actions{z-index:11}

  /* Wizard step 「范围」: chrome in document flow above syllabus (not sticky overlay) */
  .dash-app .wizard-scope-chrome,
  .dash-app .studio-wizard-main .wizard-scope-chrome,
  .dash-app .studio-wizard-main .wizard-scope-chrome.studio-scope-chrome{
    display:block!important;
    position:static!important;
    top:auto!important;
    z-index:auto;
    flex:none;
    margin:0 0 14px;
    padding:12px;
    border:1px solid var(--dash-line);
    border-radius:12px;
    background:var(--dash-bg-1);
    border-bottom:1px solid var(--dash-line);
    overflow:visible!important;
    pointer-events:auto;
  }
  .dash-app .wizard-scope-chrome .scope-chip-row{
    display:flex!important;
    flex-wrap:wrap;
    gap:10px;
    overflow:visible!important;
  }
  .dash-app .wizard-scope-chrome .scope-menu{
    flex:1 1 calc(50% - 10px);
    min-width:140px;
    max-width:none;
    position:relative;
    z-index:1;
  }
  .dash-app .wizard-scope-chrome .scope-menu>summary{
    min-height:44px;
    padding:8px 28px 8px 12px;
    border-radius:12px;
    display:flex;
    flex-direction:column;
    justify-content:center;
    gap:2px;
    touch-action:manipulation;
  }
  .dash-app .wizard-scope-chrome .scope-menu[open]{z-index:90}
  .dash-app .wizard-scope-chrome .scope-menu-pop,
  .dash-app .wizard-scope-chrome .year-menu-pop{
    z-index:95;
    max-height:min(50vh,360px);
    overflow:auto;
    -webkit-overflow-scrolling:touch;
  }
  .dash-app .wizard-scope-chrome .scope-option{
    min-height:44px;
    padding:10px 12px;
    display:flex;
    align-items:center;
    touch-action:manipulation;
  }
  .dash-app .studio-wizard-main .wizard-scope-chrome{
    margin-bottom:16px;
  }
  /* Syllabus/topic-tree on tablet/phone: document-flow page scroll; tree also scrollable if constrained */
  .dash-app .studio-wizard .syllabus-inline.topics-pop{
    position:relative;
    z-index:0;
    flex:1 1 auto;
    min-height:max(200px,42vh);
    max-height:none;
    overflow:visible!important; /* let dash-main-body scroll the full 大纲 */
    display:flex!important;
    flex-direction:column;
  }
  .dash-app .studio-wizard .topics-pop-head{
    position:relative;
    z-index:1;
    flex:none;
    background:var(--dash-bg-1);
  }
  .dash-app .studio-wizard .topic-tree,
  .dash-app .studio-wizard .topic-tree-wide{
    flex:1 1 auto;
    min-height:max(200px,40vh);
    /* Cap so touch/wheel can scroll the list even when outer page scroll is awkward */
    max-height:min(60vh,520px)!important;
    overflow:auto;
    -webkit-overflow-scrolling:touch;
    overscroll-behavior:contain;
    padding-bottom:calc(12px + env(safe-area-inset-bottom,0px))!important;
  }
  .dash-app .studio-wizard-actions{
    z-index:5;
    flex:none;
    margin-top:16px;
  }
}

/* Always show wizard inline scope chrome (desktop too — step 1 injects it); normal flow, not sticky */
.dash-app .wizard-scope-chrome{
  display:block;
  position:static;
  z-index:auto;
  flex:none;
  margin:0 0 12px;
  padding:10px 12px;
  border:1px solid var(--dash-line, var(--line));
  border-radius:12px;
  background:var(--dash-bg-1, var(--paper));
  overflow:visible;
}
.dash-app .wizard-scope-chrome .scope-chip-row{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  align-items:stretch;
}
.dash-app .wizard-scope-chrome .scope-menu{
  flex:1 1 140px;
  min-width:120px;
  max-width:220px;
}
.dash-app .wizard-scope-chrome .scope-menu>summary{
  min-height:44px;
}
.dash-app .scope-menu.scope-locked>summary{
  opacity:.72;
  cursor:default;
  pointer-events:none;
}
.dash-app .scope-menu.scope-locked{
  opacity:.9;
}

/* Wizard step 「范围」: 考试局 chips ‖ 大纲/章节 — side-by-side on laptop/desktop */
@media (min-width:901px){
  .dash-app .studio-wizard-main>.wizard-scope-split{
    display:grid;
    grid-template-columns:minmax(200px,260px) minmax(0,1fr);
    gap:16px;
    align-items:stretch;
    flex:1 1 auto;
    min-height:0; /* fill desk; floor via grid stretch + syllabus scrollport */
    height:100%;
  }
  .dash-app .wizard-scope-split > .wizard-scope-chrome{
    margin:0;
    align-self:start;
    height:auto;
    max-height:none;
    overflow:visible; /* keep board/subject/year pops unclipped */
  }
  .dash-app .wizard-scope-split > .wizard-scope-chrome .scope-chip-row{
    display:flex;
    flex-direction:column;
    flex-wrap:nowrap;
    gap:8px;
    align-items:stretch;
  }
  .dash-app .wizard-scope-split > .wizard-scope-chrome .scope-menu{
    flex:none;
    width:100%;
    max-width:none;
    min-width:0;
  }
  .dash-app .wizard-scope-split > .syllabus-inline.topics-pop{
    margin:0;
    min-height:0; /* stretch with grid row; do not force content-sized height */
    height:100%;
    max-height:100%;
    border:1px solid var(--dash-line, var(--line));
    border-radius:12px;
    background:var(--dash-bg-1, var(--paper));
    padding:12px;
    overflow:hidden; /* scrollport owned by .topic-tree */
    display:flex!important;
    flex-direction:column;
  }
  .dash-app .wizard-scope-split > .syllabus-inline.topics-pop .topic-tree,
  .dash-app .wizard-scope-split > .syllabus-inline.topics-pop .topic-tree-wide{
    flex:1 1 auto;
    min-height:0; /* form scrollport inside side-by-side pane */
    /* safety ceiling if flex height chain fails — still overrides workbench max-height:none path */
    max-height:min(calc(100dvh - 220px),680px)!important;
    overflow:auto;
    -webkit-overflow-scrolling:touch;
    overscroll-behavior:contain;
  }
}

/* Phone: keep stack (chips above list); usable syllabus height already set ≤1100 */
@media (max-width:900px){
  .dash-app .studio-wizard-main>.wizard-scope-split{
    display:flex;
    flex-direction:column;
    gap:14px;
    flex:1 0 auto;
    min-height:0;
  }
  .dash-app .wizard-scope-split > .wizard-scope-chrome{margin:0 0 0}
  .dash-app .wizard-scope-split > .syllabus-inline.topics-pop{margin:0}
}


/* Ink toolbars — top collapsible plate (v3) */
.ink-toolbar{
  --ink-plate-dur:var(--ps-motion-dur,200ms);
  --ink-plate-ease:var(--ps-motion-ease,cubic-bezier(.22,.7,.2,1));
  display:flex;flex-direction:column;align-items:stretch;gap:0;
  margin:0 0 10px;padding:0;
  border-radius:var(--dash-radius-sm,12px);
  background:var(--dash-glass-2,var(--dash-bg-3,rgba(30,38,48,.92)));
  border:1px solid var(--dash-glass-border,var(--dash-line,rgba(255,255,255,.1)));
  box-shadow:var(--dash-shadow-soft,0 8px 24px rgba(0,0,0,.16));
  overflow:clip;
  overflow-anchor:none;
  backdrop-filter:blur(var(--dash-blur,12px)) saturate(140%);
  -webkit-backdrop-filter:blur(var(--dash-blur,12px)) saturate(140%);
  position:sticky;top:0;z-index:6;
  transition:
    border-radius var(--ink-plate-dur) var(--ink-plate-ease),
    box-shadow var(--ink-plate-dur) var(--ink-plate-ease),
    background-color var(--ink-plate-dur) ease,
    width var(--ink-plate-dur) var(--ink-plate-ease);
}
.ink-toolbar[hidden]{display:none!important}
.ink-toolbar .ink-chrome{
  display:flex;align-items:flex-start;gap:2px;padding:4px 6px 4px 4px;min-width:0;
}
.ink-toolbar .ink-collapse{
  --ink-btn:36px;
  width:var(--ink-btn);height:var(--ink-btn);min-width:var(--ink-btn);min-height:var(--ink-btn);
  padding:0;border-radius:10px;border:1px solid transparent;
  background:transparent;color:var(--dash-muted,#8b95a1);
  display:inline-flex;align-items:center;justify-content:center;gap:4px;
  cursor:pointer;touch-action:manipulation;flex:none;
  transition:background .14s ease,color .14s ease,border-color .14s ease,transform .1s ease,min-width var(--ink-plate-dur) var(--ink-plate-ease),width var(--ink-plate-dur) var(--ink-plate-ease),padding var(--ink-plate-dur) var(--ink-plate-ease);
}
.ink-toolbar .ink-collapse svg{width:16px;height:16px;display:block;pointer-events:none;transition:transform var(--ink-plate-dur) var(--ink-plate-ease)}
.ink-toolbar .ink-collapse .ink-collapse-label{
  display:none;font-size:12px;font-weight:650;white-space:nowrap;color:inherit;
}
.ink-toolbar .ink-collapse:hover{
  background:rgba(255,255,255,.06);color:var(--dash-accent,#2ef2c0);
}
.ink-toolbar .ink-collapse:active{transform:scale(.92)}
.ink-toolbar .ink-plate{
  display:grid;grid-template-rows:1fr;min-width:0;flex:1;
  opacity:1;transform:translateY(0);
  transition:
    grid-template-rows var(--ink-plate-dur) var(--ink-plate-ease),
    opacity var(--ink-plate-dur) var(--ink-plate-ease),
    transform var(--ink-plate-dur) var(--ink-plate-ease);
}
.ink-toolbar .ink-plate-inner{overflow:hidden;min-height:0;min-width:0}
.ink-toolbar .ink-legend{
  display:flex;gap:10px;flex-wrap:wrap;align-items:center;
  padding:4px 10px 2px;color:var(--dash-muted,#8b95a1);font-size:11px;
}
.ink-toolbar .ink-legend span{display:inline-flex;align-items:center;gap:4px}
.ink-toolbar .ink-legend .dot{width:8px;height:8px;border-radius:50%;background:var(--blue,var(--dash-accent,#2ef2c0));flex:none}
.ink-toolbar .ink-legend .dot.teacher{background:var(--red,var(--dash-danger,#ff6b6b))}
.ink-toolbar .ink-legend .dot.correction{background:var(--green,var(--dash-accent,#2ef2c0))}
.ink-toolbar .ink-primary{
  display:flex;flex-wrap:nowrap;align-items:center;gap:2px;
  padding:2px 4px 6px;overflow-x:auto;-webkit-overflow-scrolling:touch;
  scrollbar-width:none;
}
.ink-toolbar .ink-primary::-webkit-scrollbar{display:none}
.ink-toolbar .ink-sep{
  width:1px;height:20px;margin:0 4px;flex:none;
  background:var(--dash-line-strong,rgba(255,255,255,.14));
}
.ink-toolbar .ink-icon{
  --ink-btn:36px;
  width:var(--ink-btn);height:var(--ink-btn);min-width:var(--ink-btn);min-height:var(--ink-btn);
  padding:0;border-radius:10px;
  border:1px solid transparent;
  background:transparent;color:var(--dash-ink,#f3f5f7);
  display:inline-grid;place-items:center;
  cursor:pointer;touch-action:manipulation;
  transition:background .14s ease,color .14s ease,border-color .14s ease,transform .1s ease;
}
.ink-toolbar .ink-icon svg{width:18px;height:18px;display:block;pointer-events:none}
.ink-toolbar .ink-icon:hover{
  background:rgba(255,255,255,.06);
  color:var(--dash-accent,#2ef2c0);
}
.ink-toolbar .ink-icon:active{transform:scale(.92)}
.ink-toolbar .ink-icon[aria-pressed="true"],
.ink-toolbar .ink-icon.is-active{
  background:var(--dash-accent-soft,rgba(46,242,192,.16));
  border-color:rgba(46,242,192,.35);
  color:var(--dash-accent,#2ef2c0);
  box-shadow:inset 0 0 0 1px rgba(46,242,192,.2);
}
.ink-toolbar .ink-icon.ink-danger{color:var(--dash-danger,#ff6b6b)}
.ink-toolbar .ink-icon.ink-danger:hover,
.ink-toolbar .ink-icon.ink-danger[aria-pressed="true"]{
  background:rgba(255,107,107,.12);border-color:rgba(255,107,107,.35);color:#ff8a8a;
}
.ink-toolbar .ink-stamps{
  display:inline-flex;align-items:center;gap:1px;margin-left:2px;opacity:.78;
}
.ink-toolbar .ink-stamps .ink-icon{
  --ink-btn:32px;border-radius:8px;font-size:14px;font-weight:700;
}
.ink-toolbar .ink-tray{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;
  padding:8px 12px 10px;
  border-top:1px solid var(--dash-line, rgba(255,255,255,.08));
  background:rgba(0,0,0,.14);
}
.ink-toolbar .ink-tray[hidden]{display:none!important}
.ink-toolbar .ink-tray-label{
  font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--dash-muted,#8b95a1);margin-right:2px;
}
.ink-toolbar .ink-swatches{display:inline-flex;align-items:center;gap:6px}
.ink-toolbar button.ink-swatch{
  width:22px;height:22px;min-width:22px;min-height:22px;padding:0;border-radius:50%;
  border:2px solid transparent;background:transparent;cursor:pointer;touch-action:manipulation;
  position:relative;transition:transform .12s ease,box-shadow .12s ease;
}
.ink-toolbar button.ink-swatch::before{
  content:"";display:block;width:14px;height:14px;margin:2px auto;border-radius:50%;
  background:var(--c,#fff);box-shadow:0 0 0 1px rgba(0,0,0,.28);
}
.ink-toolbar button.ink-swatch:hover{transform:scale(1.08)}
.ink-toolbar button.ink-swatch.is-active,
.ink-toolbar button.ink-swatch[aria-pressed="true"]{
  border-color:var(--dash-accent,#2ef2c0);
  box-shadow:0 0 0 2px rgba(46,242,192,.22);
}
.ink-toolbar .ink-widths{display:inline-flex;align-items:center;gap:4px}
.ink-toolbar button.ink-width{
  width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border-radius:9px;
  border:1px solid transparent;background:transparent;color:var(--dash-ink,#f3f5f7);
  display:inline-grid;place-items:center;cursor:pointer;touch-action:manipulation;
}
.ink-toolbar button.ink-width i{
  display:block;border-radius:50%;background:currentColor;opacity:.85;
}
.ink-toolbar button.ink-width[data-ink-width="2"] i{width:6px;height:6px}
.ink-toolbar button.ink-width[data-ink-width="3"] i{width:10px;height:10px}
.ink-toolbar button.ink-width[data-ink-width="5"] i{width:14px;height:14px}
.ink-toolbar button.ink-width:hover{background:rgba(255,255,255,.06);color:var(--dash-accent,#2ef2c0)}
.ink-toolbar button.ink-width.is-active,
.ink-toolbar button.ink-width[aria-pressed="true"]{
  background:var(--dash-accent-soft,rgba(46,242,192,.16));
  border-color:rgba(46,242,192,.35);color:var(--dash-accent,#2ef2c0);
}
.ink-toolbar[data-ink-mode="eraser"] .ink-swatches{opacity:.35;pointer-events:none}
.ink-toolbar .ink-hint{
  font-size:10px;color:var(--dash-muted,#8b95a1);margin-left:auto;padding-left:8px;
  white-space:nowrap;align-self:center;
}
.ink-toolbar .ink-text-panel{
  padding:8px 10px 10px;border-top:1px solid var(--dash-line, rgba(255,255,255,.08));
  background:rgba(0,0,0,.1);
}
.ink-toolbar .ink-text-panel[hidden]{display:none!important}
.ink-toolbar .ink-text-panel textarea{
  width:100%;min-height:72px;resize:vertical;box-sizing:border-box;
  border-radius:10px;border:1px solid var(--dash-line-strong,rgba(255,255,255,.14));
  background:var(--dash-bg-1,#10141a);color:var(--dash-ink,#f3f5f7);
  padding:10px;font:inherit;font-size:14px;line-height:1.45;
}
/* Collapsed chip */
.ink-toolbar.is-collapsed{
  width:auto;align-self:flex-start;border-radius:999px;
  box-shadow:0 4px 14px rgba(0,0,0,.14);
}
.ink-toolbar.is-collapsed .ink-chrome{padding:2px}
.ink-toolbar.is-collapsed .ink-collapse{
  width:auto;min-width:var(--ink-btn);padding:0 12px 0 8px;border-radius:999px;
  color:var(--dash-ink,#f3f5f7);
  background:var(--dash-accent-soft,rgba(46,242,192,.12));
  border-color:rgba(46,242,192,.28);
}
.ink-toolbar.is-collapsed .ink-collapse .ink-collapse-label{display:inline}
.ink-toolbar.is-collapsed .ink-collapse svg{transform:rotate(-90deg)}
.ink-toolbar.is-collapsed .ink-plate{
  grid-template-rows:0fr;opacity:0;transform:translateY(-6px);pointer-events:none;
}
/* legacy details text box (fallback) */
.ink-text-box{margin-top:10px;border:1px solid var(--dash-line,rgba(255,255,255,.1));border-radius:12px;padding:8px 10px;background:var(--dash-bg-2,rgba(22,28,36,.7))}
.ink-text-box summary{cursor:pointer;font-weight:650;font-size:13px;color:var(--dash-ink,#f3f5f7);min-height:36px;display:flex;align-items:center}
.ink-text-box textarea{
  width:100%;margin-top:8px;min-height:72px;resize:vertical;box-sizing:border-box;
  border-radius:10px;border:1px solid var(--dash-line-strong,rgba(255,255,255,.14));
  background:var(--dash-bg-1,#10141a);color:var(--dash-ink,#f3f5f7);
  padding:10px;font:inherit;font-size:14px;line-height:1.45;
}
.dash-app .grade-pane .ink-toolbar{margin:0 0 10px}
.dash-app .grade-pane .layer-key{margin-top:8px;color:var(--dash-muted,#8b95a1)}
/* Student practice — light chrome matching paper UI */
.practice-shell .ink-toolbar,
.student-layout .ink-toolbar{
  background:var(--dash-glass-2,rgba(255,255,255,.92));
  border-color:var(--dash-glass-border,rgba(21,48,64,.12));
  box-shadow:var(--dash-shadow-soft,0 6px 18px rgba(20,24,34,.06));
}
.practice-shell .ink-toolbar .ink-icon,
.student-layout .ink-toolbar .ink-icon,
.practice-shell .ink-toolbar .ink-collapse,
.student-layout .ink-toolbar .ink-collapse{color:#15202b}
.practice-shell .ink-toolbar .ink-icon:hover,
.student-layout .ink-toolbar .ink-icon:hover,
.practice-shell .ink-toolbar .ink-collapse:hover,
.student-layout .ink-toolbar .ink-collapse:hover{
  background:rgba(13,159,124,.08);color:#0d9f7c;
}
.practice-shell .ink-toolbar .ink-icon[aria-pressed="true"],
.practice-shell .ink-toolbar .ink-icon.is-active,
.student-layout .ink-toolbar .ink-icon[aria-pressed="true"],
.student-layout .ink-toolbar .ink-icon.is-active{
  background:rgba(13,159,124,.12);border-color:rgba(13,159,124,.35);color:#0d9f7c;
  box-shadow:inset 0 0 0 1px rgba(13,159,124,.15);
}
.practice-shell .ink-toolbar .ink-sep,
.student-layout .ink-toolbar .ink-sep{background:rgba(21,48,64,.12)}
.practice-shell .ink-toolbar .ink-tray,
.student-layout .ink-toolbar .ink-tray{background:rgba(21,48,64,.03);border-top-color:rgba(21,48,64,.08)}
.practice-shell .ink-toolbar .ink-tray-label,
.student-layout .ink-toolbar .ink-tray-label,
.practice-shell .ink-toolbar .ink-legend,
.student-layout .ink-toolbar .ink-legend{color:#5b6b76}
.practice-shell .ink-toolbar button.ink-width,
.student-layout .ink-toolbar button.ink-width{color:#15202b}
.practice-shell .ink-toolbar button.ink-width:hover,
.practice-shell .ink-toolbar button.ink-width.is-active,
.student-layout .ink-toolbar button.ink-width:hover,
.student-layout .ink-toolbar button.ink-width.is-active{
  color:#0d9f7c;background:rgba(13,159,124,.1);border-color:rgba(13,159,124,.3);
}
.practice-shell .ink-toolbar button.ink-swatch.is-active,
.student-layout .ink-toolbar button.ink-swatch.is-active{border-color:#0d9f7c;box-shadow:0 0 0 2px rgba(13,159,124,.18)}
.practice-shell .ink-toolbar .ink-hint,
.student-layout .ink-toolbar .ink-hint{color:#5b6b76}
.practice-shell .ink-toolbar .ink-text-panel,
.student-layout .ink-toolbar .ink-text-panel{background:rgba(21,48,64,.03);border-top-color:rgba(21,48,64,.08)}
.practice-shell .ink-toolbar .ink-text-panel textarea,
.student-layout .ink-toolbar .ink-text-panel textarea{
  background:#f7f8fa;color:#15202b;border-color:rgba(21,48,64,.14);
}
.practice-shell .ink-toolbar.is-collapsed .ink-collapse,
.student-layout .ink-toolbar.is-collapsed .ink-collapse{
  background:rgba(13,159,124,.12);border-color:rgba(13,159,124,.28);color:#0d9f7c;
}
.practice-shell .ink-text-box{background:#fff;border-color:rgba(21,48,64,.12)}
.practice-shell .ink-text-box summary{color:#15202b}
.practice-shell .ink-text-box textarea{background:#f7f8fa;color:#15202b;border-color:rgba(21,48,64,.14)}
.ink-toolbar .ink-icon.has-text{position:relative}
.ink-toolbar .ink-icon.has-text::after{
  content:"";position:absolute;top:7px;right:7px;width:6px;height:6px;border-radius:50%;
  background:var(--dash-accent,#2ef2c0);box-shadow:0 0 0 2px rgba(0,0,0,.25);
}
.practice-shell .ink-toolbar .ink-icon.has-text::after,
.student-layout .ink-toolbar .ink-icon.has-text::after{background:#0d9f7c;box-shadow:0 0 0 2px #fff}
.ink-canvas.is-eraser,.answer-canvas.is-eraser{
  cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='7.5' fill='none' stroke='%2315202b' stroke-width='1.6'/%3E%3Ccircle cx='12' cy='12' r='2' fill='%2315202b'/%3E%3C/svg%3E") 12 12, cell;
}
.ink-canvas.is-stamp,.answer-canvas.is-stamp{cursor:copy}
.ink-canvas.is-text,.answer-canvas.is-text{cursor:text}
@media (prefers-reduced-motion:reduce){
  .ink-toolbar,
  .ink-toolbar .ink-plate,
  .ink-toolbar .ink-collapse,
  .ink-toolbar .ink-collapse svg{transition:none!important}
}
/* Tablet / coarse pointer — 44px touch targets */
@media (pointer:coarse),(max-width:900px){
  .ink-toolbar .ink-icon,
  .ink-toolbar .ink-collapse{--ink-btn:44px;border-radius:12px}
  .ink-toolbar .ink-stamps .ink-icon{--ink-btn:40px}
  .ink-toolbar button.ink-width{width:40px;height:40px;min-width:40px;min-height:40px}
  .ink-toolbar button.ink-swatch{width:28px;height:28px;min-width:28px;min-height:28px}
  .ink-toolbar button.ink-swatch::before{width:16px;height:16px;margin:4px auto}
}


/* ============================================================
   Motion polish — Phases A–E (2026-09)
   ~180–200ms · transform/opacity preferred on mobile · reduced-motion safe
   ============================================================ */
:root{
  --ps-motion-dur:200ms;
  --ps-motion-ease:cubic-bezier(.22,.7,.2,1);
}

/* ---------- Phase A + C: compact expand / reverse retract ---------- */
/* Desktop: width + grid columns; labels fade; icons stay fixed size */
.dash-frame.is-side-anim{
  transition:grid-template-columns var(--ps-motion-dur) var(--ps-motion-ease);
}
.dash-side.is-side-anim{
  transition:width var(--ps-motion-dur) var(--ps-motion-ease),
             background var(--ps-motion-dur) ease,
             color var(--ps-motion-dur) ease;
}
.dash-side-item svg{
  width:22px;height:22px;flex:none;
  transition:none; /* icons stay visually stable */
}
/* Labels: opacity/max-width instead of display toggling so expand/retract can fade */
.dash-side-item .dash-side-label{
  display:inline-block!important;
  max-width:0;
  opacity:0;
  overflow:hidden;
  white-space:nowrap;
  vertical-align:middle;
  pointer-events:none;
  transition:opacity var(--ps-motion-dur) var(--ps-motion-ease),
             max-width var(--ps-motion-dur) var(--ps-motion-ease);
}
.dash-side:not([data-expanded="true"]) .dash-side-item{gap:0;justify-content:center}
.dash-side[data-expanded="true"] .dash-side-item{gap:10px;justify-content:flex-start}
.dash-side[data-expanded="true"] .dash-side-item .dash-side-label{
  max-width:148px;
  opacity:1;
  pointer-events:auto;
  min-width:0;
  text-overflow:ellipsis;
  overflow:hidden;
}
.dash-side-brand-text{
  display:inline-block!important;
  max-width:0;
  opacity:0;
  overflow:hidden;
  white-space:nowrap;
  vertical-align:middle;
  transition:opacity var(--ps-motion-dur) var(--ps-motion-ease),
             max-width var(--ps-motion-dur) var(--ps-motion-ease);
}
.dash-side:not([data-expanded="true"]) .dash-side-brand-text{max-width:0;opacity:0}
.dash-side[data-expanded="true"] .dash-side-brand-text{
  max-width:160px;opacity:1;
  text-overflow:ellipsis;overflow:hidden;min-width:0;
}

/* Mobile ≤1100: drawer uses transform only — never animate desktop grid width */
@media (max-width:1100px){
  .dash-frame.is-side-anim{transition:none!important}
  .dash-side{
    transition:transform var(--ps-motion-dur) var(--ps-motion-ease),
               background .18s ease,
               box-shadow var(--ps-motion-dur) ease;
  }
  .dash-side.is-side-anim{
    transition:transform var(--ps-motion-dur) var(--ps-motion-ease),
               background .18s ease,
               box-shadow var(--ps-motion-dur) ease;
  }
  .dash-side-scrim{
    transition:opacity var(--ps-motion-dur) var(--ps-motion-ease);
  }
  /* Drawer open always shows labels (no width collapse dance) */
  .dash-side[data-expanded="true"] .dash-side-item .dash-side-label,
  .dash-side[data-expanded="true"] .dash-side-brand-text{
    max-width:180px;opacity:1;transition:none;
  }
  .dash-side:not([data-expanded="true"]) .dash-side-item .dash-side-label,
  .dash-side:not([data-expanded="true"]) .dash-side-brand-text{
    max-width:0;opacity:0;transition:none;
  }
}

/* ---------- Phase B: content reflow (studio + grade) ---------- */
@media (min-width:1101px){
  .dash-app .workspace.grade-desk.is-queue-anim{
    transition:grid-template-columns var(--ps-motion-dur) var(--ps-motion-ease);
  }
  .dash-frame.is-side-anim .dash-main,
  .dash-frame.is-side-anim .dash-main-body,
  .dash-frame.is-side-anim .smart-workspace,
  .dash-frame.is-side-anim .smart-grid,
  .dash-frame.is-side-anim .manual-grid,
  .dash-frame.is-side-anim .grade-desk{
    /* reflow with sidebar; keep paint stable to avoid image flash */
    overflow-anchor:none;
  }
  .dash-frame.is-side-anim .dash-main-body img.question-image,
  .dash-frame.is-side-anim .dash-main-body img.answer-image,
  .dash-frame.is-side-anim .dash-main-body .paper-question img{
    /* avoid decode/flash during column resize */
    content-visibility:visible;
  }
}
/* Mobile single-panel: fade active panel; avoid height:auto anim on large surfaces */
@media (max-width:900px){
  .dash-app .smart-workspace.is-panel-anim .studio-panel,
  .dash-app .grade-desk.is-panel-anim .grade-panel{
    transition:opacity var(--ps-motion-dur) var(--ps-motion-ease);
  }
  .dash-app .smart-workspace .studio-panel,
  .dash-app .grade-desk .grade-panel-queue,
  .dash-app .grade-desk .grade-panel-compare,
  .dash-app .grade-desk .grade-panel-score,
  .dash-app .grade-desk .grade-panel-chrome{
    /* display still gated by data-*-panel; opacity softens the switch when anim class present */
  }
  .dash-app .smart-workspace.is-panel-anim[data-studio-panel] .studio-panel,
  .dash-app .grade-desk.is-panel-anim .grade-panel{
    opacity:1;
  }
}

/* ---------- Phase D: Dot→capsule + corner morph ---------- */
.dash-app .badge,
.dash-app .status,
.dash-app .usage-pill,
.dash-app .queue-mark{
  transition:
    padding var(--ps-motion-dur) var(--ps-motion-ease),
    border-radius var(--ps-motion-dur) var(--ps-motion-ease),
    max-width var(--ps-motion-dur) var(--ps-motion-ease),
    background-color var(--ps-motion-dur) ease,
    color var(--ps-motion-dur) ease,
    box-shadow var(--ps-motion-dur) var(--ps-motion-ease),
    opacity var(--ps-motion-dur) ease;
}
/* Queue closed: compact avatar "dot"; open: mark yields to full copy (handled by display rules) */
.dash-app .grade-desk .queue-mark{
  transition:
    width var(--ps-motion-dur) var(--ps-motion-ease),
    height var(--ps-motion-dur) var(--ps-motion-ease),
    border-radius var(--ps-motion-dur) var(--ps-motion-ease),
    background-color var(--ps-motion-dur) ease,
    color var(--ps-motion-dur) ease,
    opacity var(--ps-motion-dur) ease;
}
.dash-app .grade-desk[data-queue="closed"] .queue-mark{
  border-radius:999px; /* capsule/dot morph */
}
.dash-app .grade-desk.is-queue-anim .queue-copy{
  transition:opacity var(--ps-motion-dur) ease;
}
.dash-app .grade-desk[data-queue="closed"].is-queue-anim .queue-copy{opacity:0}
.dash-app .grade-desk[data-queue="open"].is-queue-anim .queue-mark{opacity:.35}

/* Corner morph: card ↔ selected / list density — radius + shadow only */
.dash-app .candidate,
.dash-app .queue-row,
.dash-app .library-item,
.dash-app .paper-question,
.dash-app .feedback-row,
.dash-app .simple-qrow{
  transition:
    border-radius var(--ps-motion-dur) var(--ps-motion-ease),
    box-shadow var(--ps-motion-dur) var(--ps-motion-ease),
    border-color var(--ps-motion-dur) ease,
    background-color var(--ps-motion-dur) ease;
}
.dash-app .candidate[aria-current="true"],
.dash-app .queue-row[aria-current="true"],
.dash-app .paper-question[aria-current="true"],
.dash-app .simple-qrow[aria-current="true"],
.dash-app .dash-side-item[aria-current="true"]{
  /* slightly tighter radius when selected reads as "pressed card" */
  border-radius:14px;
}

/* Paper Studio: assembled-question drag lift / gap */
.dash-app .simple-qrow .order{
  display:inline-flex!important;
  align-items:center;
  justify-content:center;
  width:28px;height:28px;
  color:var(--muted,#6b7280);
  cursor:grab;
  touch-action:none;
}
.dash-app .simple-qrow.dragging,
.dash-app .paper-question.dragging{
  opacity:1!important;
  background:var(--paper,#fff);
  border-color:#9ec9e4!important;
  box-shadow:0 12px 28px rgba(15,23,42,.18),0 2px 8px rgba(15,23,42,.1)!important;
  z-index:40;
}
.dash-app .simple-qlist.drag-active,
.dash-app .paper-stack.drag-active{cursor:grabbing}
.dash-app .drag-gap-slot{
  box-sizing:border-box;
  border:2px dashed #7eb6ff;
  border-radius:12px;
  background:rgba(23,110,166,.07);
  margin:4px 2px;
  pointer-events:none;
}
@media (prefers-reduced-motion:reduce){
  .dash-app .simple-qrow.dragging,
  .dash-app .paper-question.dragging{transform:none!important;box-shadow:0 4px 12px rgba(15,23,42,.14)!important}
  .dash-app .simple-qlist.drag-active .simple-qrow:not(.dragging),
  .dash-app .paper-stack.drag-active .paper-question:not(.dragging){transition:none!important}
}

/* ---------- Phase E: sparse size morph (current item only) ---------- */
.dash-app .candidate[aria-current="true"],
.dash-app .queue-row[aria-current="true"],
.dash-app .simple-qrow[aria-current="true"]{
  padding-top:calc(10px + 2px);
  padding-bottom:calc(10px + 2px);
  transition:
    border-radius var(--ps-motion-dur) var(--ps-motion-ease),
    box-shadow var(--ps-motion-dur) var(--ps-motion-ease),
    border-color var(--ps-motion-dur) ease,
    background-color var(--ps-motion-dur) ease,
    padding var(--ps-motion-dur) var(--ps-motion-ease);
}
/* Avoid scale() on paper-question / image hosts — protects scroll restore + no image flash */
.dash-app .paper-question[aria-current="true"]{
  box-shadow:0 0 0 1px rgba(37,99,235,.28), 0 6px 18px rgba(15,23,42,.06);
}

/* ---------- Reduced motion: state still updates, motion off ---------- */
@media (prefers-reduced-motion:reduce){
  .dash-frame.is-side-anim,
  .dash-side,
  .dash-side.is-side-anim,
  .dash-side-scrim,
  .dash-side-item .dash-side-label,
  .dash-side-brand-text,
  .dash-app .workspace.grade-desk.is-queue-anim,
  .dash-app .badge,
  .dash-app .status,
  .dash-app .usage-pill,
  .dash-app .queue-mark,
  .dash-app .candidate,
  .dash-app .queue-row,
  .dash-app .library-item,
  .dash-app .paper-question,
  .dash-app .feedback-row,
  .dash-app .simple-qrow,
  .dash-app .smart-workspace.is-panel-anim .studio-panel,
  .dash-app .grade-desk.is-panel-anim .grade-panel{
    transition:none!important;
  }
  .dash-app .candidate[aria-current="true"],
  .dash-app .queue-row[aria-current="true"],
  .dash-app .simple-qrow[aria-current="true"]{
    padding-top:10px;padding-bottom:10px;
  }
}

/* Narrow screens: one page scroll instead of two stacked scroll panes.
   The split grid gave the question preview ~260px and let the paper panel
   sit over it; stack them at natural height and scroll the workspace. */
@media (max-width:980px){
  .dash-app .dash-main-body:has(.simple-workspace){overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
  .dash-app .simple-workspace{flex:none;min-height:auto}
  .dash-app .simple-grid{flex:none;min-height:auto;grid-template-rows:auto auto}
  .dash-app .simple-stage{overflow:visible;max-height:none;min-height:0}
  .dash-app .simple-side{position:static;max-height:none;overflow:visible}
}

/* ===== Admin users (密度 / 科目 chips) — scoped under .admin-users ===== */
.admin-users{
  --admin-pad:12px 14px;
  --admin-gap:10px;
  --admin-chip-bg:color-mix(in srgb, var(--dash-accent, #0d9f7c) 12%, transparent);
  --admin-chip-ink:var(--dash-ink, var(--ink));
  --admin-self-bg:color-mix(in srgb, var(--dash-accent, #0d9f7c) 10%, var(--dash-bg-1, var(--paper, #fff)));
  --admin-self-line:color-mix(in srgb, var(--dash-accent, #0d9f7c) 34%, var(--dash-line, var(--line)));
  --admin-card-bg:var(--dash-bg-1, var(--paper, #fff));
  --admin-card-line:var(--dash-line, var(--line));
  --admin-radius:var(--dash-radius, 12px);
}
.admin-users .page-head{margin-bottom:12px}
.admin-users .admin-panel{
  background:var(--admin-card-bg);
  border:1px solid var(--admin-card-line);
  border-radius:var(--admin-radius);
  padding:12px 14px;
  margin-bottom:14px;
  box-shadow:none;
}
.admin-users .admin-panel-head{
  display:flex;align-items:baseline;gap:8px;margin-bottom:10px;
}
.admin-users .admin-panel-title{
  font-size:13px;font-weight:700;letter-spacing:-.01em;color:var(--dash-ink, var(--ink));
}
.admin-users .admin-panel-count{
  font-size:12px;font-weight:650;color:var(--dash-muted, var(--muted));
  font-variant-numeric:tabular-nums;
}
.admin-users .admin-req-list,
.admin-users .admin-user-list{
  display:flex;flex-direction:column;gap:8px;
  background:transparent!important;border:0!important;box-shadow:none!important;
  border-radius:0!important;overflow:visible!important;
}
.admin-users .admin-req-card,
.admin-users .admin-user-card{
  display:flex;flex-direction:column;gap:8px;
  padding:var(--admin-pad);
  background:var(--admin-card-bg);
  border:1px solid var(--admin-card-line);
  border-radius:var(--admin-radius);
  box-shadow:none;
  min-width:0;
}
.admin-users .admin-req-card{
  flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;
}
.admin-users .admin-user-card.is-self{
  background:var(--admin-self-bg);
  border-color:var(--admin-self-line);
  box-shadow:inset 3px 0 0 var(--dash-accent, #0d9f7c);
}
.admin-users .admin-user-card.is-disabled{opacity:.78}
.admin-users .admin-user-top{
  display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;
}
.admin-users .admin-user-id{min-width:0;flex:1 1 220px}
.admin-users .admin-user-email{
  display:block;font-size:14px;font-weight:700;letter-spacing:-.02em;
  color:var(--dash-ink, var(--ink));line-height:1.3;word-break:break-word;
}
.admin-users .admin-user-meta{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:5px;
}
.admin-users .admin-pill{
  display:inline-flex;align-items:center;height:22px;padding:0 8px;
  border-radius:999px;font-size:11px;font-weight:650;letter-spacing:-.01em;
  background:color-mix(in srgb, var(--dash-ink, #15202b) 6%, transparent);
  color:var(--dash-muted, var(--muted));
  border:1px solid color-mix(in srgb, var(--dash-ink, #15202b) 8%, transparent);
}
.admin-users .admin-pill.is-ok{
  background:var(--dash-accent-soft, rgba(13,159,124,.14));
  color:var(--dash-accent, #0d9f7c);
  border-color:transparent;
}
.admin-users .admin-pill.is-warn{
  background:color-mix(in srgb, var(--dash-danger, #b42318) 12%, transparent);
  color:var(--dash-danger, #b42318);
  border-color:transparent;
}
.admin-users .admin-pill.is-self-tag{
  background:var(--dash-accent, #0d9f7c);
  color:var(--dash-accent-ink, #fff);
  border-color:transparent;
}
.admin-users .admin-pill.admin-user-no{
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-variant-numeric:tabular-nums;
  letter-spacing:.02em;user-select:all;
}
.admin-users .admin-expiry{
  font-size:12px;color:var(--dash-muted, var(--muted));
  font-variant-numeric:tabular-nums;
}
.admin-users .admin-user-actions,
.admin-users .admin-req-actions{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px;
  flex:0 1 auto;justify-content:flex-end;
}
.admin-users .admin-user-actions select{
  min-height:36px;max-width:min(220px,100%);
  border-radius:10px;padding:0 10px;
  background:var(--dash-bg-2, var(--paper, #fff));
  border:1px solid var(--admin-card-line);
  color:var(--dash-ink, var(--ink));
  font:inherit;font-size:12.5px;
}
.admin-users .admin-user-actions > button,
.admin-users .admin-req-actions > button,
.admin-users .page-head-actions > button{
  min-height:36px;padding:0 12px;font-size:12.5px;border-radius:10px;
}
.admin-users .admin-danger,
.admin-users button.admin-danger{
  color:var(--dash-danger, var(--red, #b42318))!important;
  border-color:color-mix(in srgb, var(--dash-danger, #b42318) 28%, var(--admin-card-line))!important;
}
.admin-users .admin-danger:hover,
.admin-users button.admin-danger:hover{
  background:color-mix(in srgb, var(--dash-danger, #b42318) 10%, transparent)!important;
}
.admin-users .admin-user-ents{
  display:flex;align-items:flex-start;gap:8px;min-width:0;
  padding-top:2px;
}
.admin-users .admin-ents-label{
  flex:none;margin-top:3px;
  font-size:11px;font-weight:700;letter-spacing:.02em;
  color:var(--dash-muted, var(--muted));
}
.admin-users .admin-chips{
  display:flex;flex-wrap:wrap;gap:5px;min-width:0;flex:1;
  align-items:center;
}
.admin-users .admin-chip{
  display:inline-flex;align-items:center;height:24px;padding:0 8px;
  border-radius:8px;font-size:11.5px;font-weight:650;font-variant-numeric:tabular-nums;
  letter-spacing:-.01em;
  background:var(--admin-chip-bg);
  color:var(--admin-chip-ink);
  border:1px solid color-mix(in srgb, var(--dash-accent, #0d9f7c) 18%, transparent);
  line-height:1;
}
.admin-users .admin-chip-empty{
  font-size:12px;color:var(--dash-muted, var(--muted));
}
.admin-users .admin-chip-more{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:28px;min-width:36px;padding:0 8px;
  border-radius:8px;font:inherit;font-size:11.5px;font-weight:700;
  cursor:pointer;
  color:var(--dash-accent, #0d9f7c);
  background:transparent;
  border:1px dashed color-mix(in srgb, var(--dash-accent, #0d9f7c) 40%, transparent);
}
.admin-users .admin-chip-more:hover{background:var(--admin-chip-bg)}
.admin-users .admin-empty{margin:4px 0 0}
.admin-users .admin-req-main{min-width:0;flex:1}
.admin-users .admin-req-main strong{display:block;font-size:13.5px;font-weight:700}
.admin-users .admin-req-main small{display:block;margin-top:3px;font-size:12px;color:var(--dash-muted, var(--muted));line-height:1.4}
.admin-users .admin-search{display:block;margin:0 0 12px}
.admin-users .admin-search input{
  width:min(420px,100%);min-height:40px;padding:0 12px;border-radius:10px;
  border:1px solid var(--admin-card-line);background:var(--admin-card-bg);color:inherit;font:inherit;font-size:14px;
}
.admin-users .admin-board-tabs{display:flex;flex-wrap:wrap;gap:6px}
.admin-users .admin-board-tabs button{
  min-height:32px;padding:0 10px;border-radius:999px;border:1px solid var(--admin-card-line);
  background:transparent;color:inherit;font:inherit;font-size:12px;font-weight:650;cursor:pointer;
  display:inline-flex;align-items:center;gap:6px;
}
.admin-users .admin-board-tabs button span{font-variant-numeric:tabular-nums;opacity:.75}
.admin-users .admin-board-tabs button[aria-selected="true"]{
  background:var(--dash-accent, #0d9f7c);color:var(--dash-accent-ink, #fff);border-color:transparent;
}
.admin-users .admin-board-tabs button:focus-visible{outline:2px solid var(--dash-accent, #0d9f7c);outline-offset:2px}
.admin-users .admin-ent-list{display:flex;flex-direction:column;gap:6px}
.admin-users .admin-ent-row{
  display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  padding:8px 10px;border-radius:10px;
  background:color-mix(in srgb, var(--dash-ink, #15202b) 4%, transparent);
}
.admin-users .admin-ent-copy{min-width:0;display:flex;flex-direction:column;gap:2px}
.admin-users .admin-ent-copy strong{font-size:13px;font-weight:700}
.admin-users .admin-ent-copy span{font-size:12px;color:var(--dash-muted, var(--muted))}
.admin-users .admin-ent-actions,
.admin-users .admin-grant-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.admin-users .admin-grant-bar select,
.admin-users .admin-ent-actions select,
.admin-users .admin-req-actions select{
  min-height:36px;border-radius:10px;padding:0 10px;font:inherit;font-size:12.5px;
  background:var(--dash-bg-2, var(--paper, #fff));border:1px solid var(--admin-card-line);color:inherit;
}
.admin-users .admin-grant-bar select:first-child{flex:1 1 180px;max-width:100%}
.admin-users .admin-ent-actions > button,
.admin-users .admin-grant-bar > button{min-height:36px;padding:0 12px;font-size:12.5px;border-radius:10px}

@media (max-width:720px){
  .admin-users .admin-user-top{flex-direction:column}
  .admin-users .admin-user-actions,
  .admin-users .admin-req-actions{justify-content:stretch;width:100%}
  .admin-users .admin-user-actions select,
  .admin-users .admin-user-actions > button,
  .admin-users .admin-req-actions > button,
  .admin-users .admin-ent-actions > button,
  .admin-users .admin-grant-bar > button,
  .admin-users .admin-grant-bar select,
  .admin-users .page-head-actions > button{
    min-height:44px;flex:1 1 calc(50% - 6px);
  }
  .admin-users .admin-user-actions select,
  .admin-users .admin-grant-bar select:first-child{flex:1 1 100%;max-width:none}
  .admin-users .admin-chip-more{min-height:44px;min-width:44px}
}

/* Theme toggle: same compact pill as the guest homepage everywhere (studio + student top bars). */
.dash-app .dash-theme-toggle{height:34px;box-sizing:border-box}
.dash-app .dash-theme-toggle button{
  min-width:34px;height:100%;padding:0 10px;margin:0;
  border:0;border-radius:0;box-shadow:none;
  background:transparent;color:var(--dash-muted);
  font-size:1rem;line-height:1;display:inline-grid;place-items:center;
}
.dash-app .dash-theme-toggle button[aria-pressed="true"]{
  background:var(--dash-accent);color:var(--dash-accent-ink);
}

/* Collapsed marking queue: avatars only. The auto-marked group becomes a thin divider,
   auto-marked students get a soft green avatar, the open submission gets a ring. */
.dash-app .grade-desk[data-queue="closed"] .queue-row{border:0;background:transparent;box-shadow:none}
.dash-app .grade-desk[data-queue="closed"] .rail .queue-row{border-bottom:0!important}
.dash-app .grade-desk[data-queue="closed"] .queue-group > *{display:none}
.dash-app .grade-desk[data-queue="closed"] .queue-mark{flex:none;width:34px;height:34px;border-radius:999px;font-size:13px}
.dash-app .grade-desk[data-queue="closed"] .queue-row-auto .queue-mark{
  background:color-mix(in srgb, var(--dash-accent) 14%, var(--dash-bg-2));
  color:var(--dash-accent);
}
.dash-app .grade-desk[data-queue="closed"] .queue-row[aria-current="true"] .queue-mark{
  box-shadow:0 0 0 2px var(--dash-accent);
}
@media (min-width:901px){
  .dash-app .workspace.grade-desk[data-queue="closed"]{grid-template-columns:64px minmax(0,1fr)}
  .dash-app .grade-desk[data-queue="closed"] > .rail{
    margin:12px 0 0 8px;padding:8px 0;scrollbar-gutter:auto;scrollbar-width:none;
  }
  .dash-app .grade-desk[data-queue="closed"] > .rail::-webkit-scrollbar{display:none}
  .dash-app .grade-desk[data-queue="closed"] .queue-row{width:100%;min-height:0;padding:3px 0;justify-content:center}
  .dash-app .grade-desk[data-queue="closed"] .queue-group{height:0;margin:10px 14px;padding:0;overflow:hidden;border-top:1px solid var(--dash-line)}
  .dash-app .grade-desk[data-queue="closed"] .grade-queue-open-bar{display:none}
}
@media (max-width:900px){
  /* Horizontal strip: the group divider turns vertical. */
  .dash-app .grade-desk[data-queue="closed"] .queue-list{align-items:center}
  .dash-app .grade-desk[data-queue="closed"] .queue-row{width:auto;flex:none;padding:2px 3px}
  .dash-app .grade-desk[data-queue="closed"] .queue-group{flex:none;width:0;height:24px;margin:0 6px;padding:0;overflow:hidden;border-left:1px solid var(--dash-line)}
}

/* Home globe on touch devices: the canvas already animates at ~30fps; drop the
   full-size breathing overlay that repaints on top of it every frame. */
@media (max-width:900px),(hover:none),(pointer:coarse){
  .intro-drift.neural-ready .intro-neural-subjects::before{animation:none;}
  .intro-drift.neural-ready .intro-neural-subject{will-change:auto;}
}

/* Admin: closed accounts and the reason dialog */
.admin-users .admin-user-card.is-closed{opacity:.62}
.admin-users .admin-user-card.is-closed .admin-user-email{font-weight:600;color:var(--dash-muted, var(--muted))}
.reason-dialog .confirm-card{display:grid;gap:14px;width:min(440px,100%)}
.reason-dialog h2{margin:0;font-size:18px}
.reason-dialog p{margin:0;color:var(--dash-muted, var(--muted));font-size:14px;line-height:1.55}
.reason-chips{display:flex;flex-wrap:wrap;gap:8px}
.reason-chips button{min-height:32px;padding:0 12px;border-radius:999px;font-size:13px}
.reason-chips button[aria-pressed="true"]{background:var(--dash-accent-soft, rgba(13,159,124,.14));color:var(--dash-accent, #0d9f7c);border-color:var(--dash-accent, #0d9f7c)}
.reason-field{display:grid;gap:6px;font-size:13px;color:var(--dash-muted, var(--muted))}
.reason-field input{min-height:40px;padding:0 12px;border-radius:10px;border:1px solid var(--line-soft, #d9dee5);font:inherit;font-size:15px;color:inherit;background:var(--paper, #fff)}
.reason-dialog .confirm-actions{display:flex;justify-content:flex-end;gap:8px}
.reason-dialog button.admin-danger-fill{background:var(--dash-danger, #b42318)!important;border-color:var(--dash-danger, #b42318)!important;color:#fff!important;box-shadow:none!important}

/* Admin: user detail drawer */
.admin-drawer-backdrop{position:fixed;inset:0;z-index:70;background:rgba(15,23,42,.36);display:flex;justify-content:flex-end}
.admin-drawer{width:min(560px,100%);height:100%;background:var(--paper, #fff);box-shadow:-18px 0 48px rgba(15,23,42,.18);display:flex;flex-direction:column;min-height:0}
.admin-drawer-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:20px 20px 14px;border-bottom:1px solid var(--line-soft, #e4e7ec)}
.admin-drawer-head h2{margin:0 0 8px;font-size:18px;word-break:break-all}
.admin-drawer-head .admin-user-meta{display:flex;flex-wrap:wrap;gap:6px}
.admin-drawer .admin-pill{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:999px;font-size:11px;font-weight:650;white-space:nowrap;background:color-mix(in srgb, var(--dash-ink, #15202b) 6%, transparent);color:var(--dash-muted, var(--muted))}
.admin-drawer .admin-pill.is-ok{background:var(--dash-accent-soft, rgba(13,159,124,.14));color:var(--dash-accent, #0d9f7c)}
.admin-drawer .admin-pill.is-warn{background:color-mix(in srgb, var(--dash-danger, #b42318) 12%, transparent);color:var(--dash-danger, #b42318)}
.admin-drawer .admin-pill.admin-user-no{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;user-select:all}
.admin-drawer-body{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:16px 20px 32px;display:grid;gap:22px;align-content:start}
.admin-drawer-body h3{margin:0 0 8px;font-size:13px;font-weight:700;color:var(--dash-muted, var(--muted));letter-spacing:.02em}
.drawer-facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 16px;margin:0}
.drawer-facts dt{font-size:12px;color:var(--dash-muted, var(--muted))}
.drawer-facts dd{margin:2px 0 0;font-size:14px;font-variant-numeric:tabular-nums}
.admin-drawer textarea{width:100%;box-sizing:border-box;padding:10px 12px;border-radius:10px;border:1px solid var(--line-soft, #d9dee5);font:inherit;font-size:14px;resize:vertical;background:var(--paper, #fff);color:inherit;margin-bottom:8px}
.drawer-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.drawer-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;background:color-mix(in srgb, var(--dash-ink, #15202b) 3%, transparent)}
.drawer-row.is-live{background:var(--dash-accent-soft, rgba(13,159,124,.1))}
.drawer-row > div:first-child{min-width:0;display:grid;gap:2px}
.drawer-row strong{font-size:14px}
.drawer-row small{font-size:12px;color:var(--dash-muted, var(--muted));font-variant-numeric:tabular-nums}
.drawer-actions{display:flex;gap:6px;flex-shrink:0}
.drawer-actions button{min-height:30px;padding:0 10px;font-size:12.5px;border-radius:8px}
.drawer-log{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;padding:6px 0;border-bottom:1px solid var(--line-soft, #eef0f3);font-size:13px}
.drawer-log time{color:var(--dash-muted, var(--muted));font-variant-numeric:tabular-nums;font-size:12px}
.drawer-log small{grid-column:2;color:var(--dash-muted, var(--muted));font-size:12px}
.reason-dialog select{min-height:40px;padding:0 10px;border-radius:10px;border:1px solid var(--line-soft, #d9dee5);font:inherit;font-size:15px;background:var(--paper, #fff);color:inherit}
.form-dialog-error{color:var(--dash-danger, #b42318)!important;font-size:13px!important}
.admin-users .admin-req-main small{display:block}
@media (max-width:600px){.drawer-row{flex-direction:column;align-items:stretch}.drawer-actions{justify-content:flex-end}}


/* ===== Export audit (admin) — scoped under .audit-page ===== */
.audit-page .audit-filter-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  gap:10px 12px;
  align-items:end;
}
.audit-page .audit-filter-grid label{
  display:grid;gap:4px;font-size:12px;font-weight:650;color:var(--dash-muted,var(--muted));
}
.audit-page .audit-filter-grid input,
.audit-page .audit-filter-grid select{
  min-height:34px;padding:0 10px;border-radius:8px;
  border:1px solid var(--dash-line,var(--line));
  background:var(--dash-bg-1,var(--paper,#fff));
  color:var(--dash-ink,var(--ink));font-size:13px;
}
.audit-page .audit-filter-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.audit-page .audit-table-wrap{overflow:auto;border:1px solid var(--admin-card-line,var(--line));border-radius:10px}
.audit-page .audit-table{width:100%;border-collapse:collapse;font-size:13px}
.audit-page .audit-table th,
.audit-page .audit-table td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--dash-line,var(--line-soft));vertical-align:top}
.audit-page .audit-table th{font-size:11px;font-weight:700;color:var(--dash-muted,var(--muted));letter-spacing:.02em;white-space:nowrap;background:color-mix(in srgb,var(--dash-ink,#15202b) 4%,transparent)}
.audit-page .audit-table tr.audit-row:hover{background:color-mix(in srgb,var(--dash-accent,#0d9f7c) 6%,transparent)}
.audit-page .audit-table tr.is-open{background:color-mix(in srgb,var(--dash-accent,#0d9f7c) 8%,transparent)}
.audit-page .audit-table .num{font-variant-numeric:tabular-nums;text-align:right}
.audit-page .audit-ts,.audit-page .audit-ip,.audit-page .audit-paper{font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;color:var(--dash-muted,var(--muted))}
.audit-page .audit-user-btn{padding:0;border:0;background:none;color:var(--dash-accent,#0d9f7c);font-weight:650;cursor:pointer;text-align:left}
.audit-page .audit-user-btn:hover{text-decoration:underline}
.audit-page .audit-detail{display:grid;gap:8px;padding:4px 2px 8px;font-size:12px}
.audit-page .audit-detail code{display:block;margin-top:2px;padding:8px 10px;border-radius:8px;background:color-mix(in srgb,var(--dash-ink,#15202b) 5%,transparent);white-space:pre-wrap;word-break:break-all;line-height:1.45}
.audit-page .audit-pager{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}
.audit-page .audit-coverage-stats{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:8px;font-size:13px;color:var(--dash-muted,var(--muted))}
.audit-page .audit-coverage-stats strong{color:var(--dash-ink,var(--ink));font-variant-numeric:tabular-nums}
.audit-page .audit-coverage-ids{display:block;padding:8px 10px;border-radius:8px;background:color-mix(in srgb,var(--dash-ink,#15202b) 5%,transparent);font-size:12px;line-height:1.45;word-break:break-all}
@media (max-width:720px){
  .audit-page .audit-table th:nth-child(n+6),
  .audit-page .audit-table td:nth-child(n+6){display:none}
  .audit-page .audit-table th:last-child,
  .audit-page .audit-table td:last-child{display:table-cell}
}

/* Sign-up consent: terms/privacy agreement, age confirmation for students. */
.auth-trial-note{margin:4px 0 10px;font-size:13px;color:var(--dash-accent)}
.auth-consent{display:grid;gap:8px;margin:4px 0 6px}
.auth-check{display:flex;align-items:center;gap:8px;font-size:13px;line-height:1.5;color:var(--dash-muted);cursor:pointer}
.auth-check[hidden]{display:none}
.auth-check input{flex:none;width:16px;height:16px;margin:0;accent-color:var(--dash-accent)}
.auth-check a{color:var(--dash-accent);text-decoration:none}
.auth-check a:hover{text-decoration:underline}
.account-close p{margin:4px 0 10px}

/* Data page without prices: bank fill per subject and the viewer's own access. */
.data-summary{margin:0 0 10px;font-size:13px;color:var(--dash-muted);font-variant-numeric:tabular-nums}
.data-table-plain .data-qual{color:var(--dash-muted);white-space:nowrap}
.data-bank{min-width:190px}
.data-bank-bar{height:6px;margin:0 0 5px;border-radius:999px;background:var(--dash-bg-3);overflow:hidden}
.data-bank-bar i{display:block;height:100%;border-radius:inherit;background:var(--dash-accent)}
.data-bank span{font-size:12.5px;color:var(--dash-muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.data-table-plain tr.is-mine .data-subject{font-weight:700}
.data-table-plain tr.is-mine .data-expire{color:var(--dash-accent);font-weight:600}
