/* ============================================================
   Dr. Abbas — Command Center
   styles.css — all app CSS
   ============================================================ */

/* ── GOOGLE FONTS (loaded via index.html link tag) ──────── */

/* ── CSS VARIABLES ──────────────────────────────────────── */
/* ============================================================
   MedPREP Design Token System v1.0
   Approved by Muhammad Abbas — 12 June 2026
   Designer: MedPREP Expert + Design Architect
   Do not hardcode any values outside this block.
   All components reference tokens only.
   ============================================================ */

:root {

  /* ── SURFACES ─────────────────────────────────────────── */
  --color-bg-base:        #121212;
  --color-bg-elevated:    #181818;
  --color-bg-overlay:     #202020;
  --color-bg-subtle:      #262626;

  /* ── BORDERS ──────────────────────────────────────────── */
  --color-border-default: #2D2D2D;
  --color-border-strong:  #3A3A3A;
  --color-border-focus:   #D4AF37;

  /* ── TEXT ─────────────────────────────────────────────── */
  --color-text-primary:   #F2F2F2;
  --color-text-secondary: #B8B8B8;
  --color-text-tertiary:  #7A7A7A;

  /* ── ACCENT ───────────────────────────────────────────── */
  --color-accent:         #D4AF37;
  --color-accent-hover:   #B89941;
  --color-accent-dim:     rgba(212,175,55,0.12);

  /* ── ACHIEVEMENT ──────────────────────────────────────── */
  --color-achievement:     #D4AF37;
  --color-achievement-dim: rgba(212,175,55,0.12);

  /* ── SEMANTIC — CORRECT ───────────────────────────────── */
  --color-success:         #4CC38A;
  --color-success-dim:     rgba(76,195,138,0.12);

  /* ── SEMANTIC — WRONG ─────────────────────────────────── */
  --color-danger:          #E15A5A;
  --color-danger-dim:      rgba(225,90,90,0.12);

  /* ── SEMANTIC — WARNING ───────────────────────────────── */
  --color-warning:         #E0B844;
  --color-warning-dim:     rgba(224,180,76,0.12);

  /* ── SEMANTIC — INFO ──────────────────────────────────── */
  --color-info:            #6FA8DC;
  --color-info-dim:        rgba(111,168,220,0.12);

  /* ── TYPOGRAPHY ───────────────────────────────────────── */
  --font-display: 'Newsreader', Georgia, serif;
  --font-body:    'Source Sans 3', -apple-system, sans-serif;
  --font-mono:    'DM Mono', 'Courier New', monospace;

  /* ── TYPE SCALE ───────────────────────────────────────── */
  --text-xs:   11px;
  --text-sm:   13px;
  --text-base: 15px;
  --text-md:   17px;
  --text-lg:   20px;
  --text-xl:   24px;
  --text-2xl:  30px;

  /* ── FONT WEIGHTS ─────────────────────────────────────── */
  --weight-normal:   400;
  --weight-medium:   500;
  --weight-semibold: 600;
  --weight-bold:     700;

  /* ── SPACING ──────────────────────────────────────────── */
  --space-1:   4px;
  --space-2:   8px;
  --space-3:   12px;
  --space-4:   16px;
  --space-6:   24px;
  --space-8:   32px;
  --space-12:  48px;
  --space-16:  64px;

  /* ── BORDER RADIUS ────────────────────────────────────── */
  --r-xs:   4px;
  --r-sm:   6px;
  --r-md:   10px;
  --r-lg:   14px;
  --r-pill: 100px;

  /* ── LAYOUT ───────────────────────────────────────────── */
  --sidebar-width:        240px;
  --content-max-width:    1200px;
  --main-padding-mobile:  16px;
  --main-padding-tablet:  28px;
  --main-padding-desktop: 40px;

  /* ── MOTION ───────────────────────────────────────────── */
  --transition-fast:   0.15s cubic-bezier(0.4, 0, 0.2, 1);
  --transition-normal: 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  --transition-slow:   0.40s cubic-bezier(0.4, 0, 0.2, 1);

}

/* ── RESPONSIVE TYPE SCALE ────────────────────────────────── */
@media (min-width: 768px) {
  :root {
    --text-base: 16px;
    --text-lg:   24px;
    --text-xl:   28px;
    --text-2xl:  36px;
  }
}

@media (min-width: 1280px) {
  :root {
    --text-lg:   28px;
    --text-xl:   32px;
    --text-2xl:  42px;
  }
}

/* ── LEGACY TOKEN BRIDGE ──────────────────────────────────────
   Temporary aliases — old names → new tokens.
   Remove each line as its component is migrated.
   Target: fully removed within 4 refactor sessions.
────────────────────────────────────────────────────────────── */
:root {
  --bg:           var(--color-bg-base);
  --bg2:          var(--color-bg-elevated);
  --bg3:          var(--color-bg-overlay);
  --bg4:          var(--color-bg-subtle);
  --border:       var(--color-border-default);
  --border2:      var(--color-border-strong);
  --border3:      var(--color-border-focus);
  --text:         var(--color-text-primary);
  --text2:        var(--color-text-secondary);
  --text3:        var(--color-text-tertiary);
  --accent:       var(--color-accent);
  --accent2:      var(--color-accent-hover);
  --accent3:      var(--color-accent-dim);
  --accent-glow:  var(--color-accent-dim);
  --green:        var(--color-success);
  --green2:       var(--color-success-dim);
  --green-bg:     var(--color-success-dim);
  --red:          var(--color-danger);
  --red2:         var(--color-danger-dim);
  --red-bg:       var(--color-danger-dim);
  --amber:        var(--color-warning);
  --amber-bg:     var(--color-warning-dim);
  --blue:         var(--color-info);
  --blue2:        var(--color-info-dim);
  --cyan:         var(--color-info);
  --cyan-bg:      var(--color-info-dim);
  --teal:         var(--color-info);
  --purple:       #A78BFA;
  --purple2:      rgba(167,139,250,0.1);
  --purple-bg:    rgba(167,139,250,0.1);
  --font-d:       var(--font-display);
  --font-b:       var(--font-body);
  --font-m:       var(--font-mono);
  --r:            var(--r-md);
}

/* ============================================================
   TOKEN SUPPLEMENT — Track 2
   Additive only — zero existing tokens modified.
   All values align with Token System v1.0 direction:
   charcoal surfaces, gold accent, Newsreader/Source Sans 3.
   Approved by Abbas — 18 June 2026
   ============================================================ */
:root {

  /* ── NAV SURFACE ──────────────────────────────────────────
     One step above --color-bg-base (#121212).
     Used exclusively for bottom nav + sidebar backgrounds.
     Approved by Senior Design Architect — Deep Graphite.
  ───────────────────────────────────────────────────────── */
  --color-bg-nav:           #1a1a1a;

  /* ── ACCENT VARIANTS ──────────────────────────────────────
     --color-accent-subtle : same intent as --color-accent-dim
       (already in v1.0) — explicit alias for Track 2 specs.
     --color-border-accent  : gold-tinted border for scope pill,
       active states, ghost buttons.
  ───────────────────────────────────────────────────────── */
  --color-accent-subtle:    rgba(212, 175, 55, 0.12);  /* = --color-accent-dim */
  --color-border-accent:    rgba(212, 175, 55, 0.35);

  /* ── BORDER VARIANTS ──────────────────────────────────────
     --color-border-subtle : barely-there separator.
       Lighter than --color-border-default (#2D2D2D).
       Used for subject row dividers, scope pill bar edge.
  ───────────────────────────────────────────────────────── */
  --color-border-subtle:    rgba(255, 255, 255, 0.05);

  /* ── TEXT INVERSE ─────────────────────────────────────────
     Dark text for rendering on gold (--color-accent) surfaces.
     CTA button label, primary button text.
  ───────────────────────────────────────────────────────── */
  --color-text-inverse:     #121212;

  /* ── MOTION — SPLIT TOKENS ────────────────────────────────
     v1.0 embeds duration + easing in --transition-* shorthands.
     Track 2 specs use split tokens for composing transitions
     on multiple properties (e.g. color + background together).
     Values extracted directly from v1.0 shorthands.
  ───────────────────────────────────────────────────────── */
  --duration-fast:          120ms;
  --duration-base:          200ms;
  --duration-slow:          320ms;
  --ease-default:           cubic-bezier(0.4, 0, 0.2, 1);
  --ease-out:               cubic-bezier(0, 0, 0.2, 1);
  --ease-spring:            cubic-bezier(0.34, 1.56, 0.64, 1);

  /* ── GAP SEMANTIC ALIASES ─────────────────────────────────
     Named gaps for component internal spacing.
     All alias existing --space-* tokens.
  ───────────────────────────────────────────────────────── */
  --gap-xs:                 var(--space-2);   /*  8px — tight internal gaps */
  --gap-sm:                 var(--space-3);   /* 12px — component internal */
  --gap-md:                 var(--space-4);   /* 16px — between related items */
  --gap-lg:                 var(--space-6);   /* 24px — between sections */
  --gap-xl:                 var(--space-8);   /* 32px — major section breaks */

  /* ── PADDING SEMANTIC ALIASES ─────────────────────────────
     Named padding for screen and card contexts.
     --pad-screen aliases --main-padding-mobile at mobile base.
     Responsive overrides in media query block below.
  ───────────────────────────────────────────────────────── */
  --pad-screen:             var(--space-4);   /* 16px — horizontal screen padding */
  --pad-card:               var(--space-4);   /* 16px — card internal padding */
  --pad-card-lg:            var(--space-6);   /* 24px — large card internal padding */

  /* ── LETTER SPACING ───────────────────────────────────────
     Used by mono labels, uppercase tags, display text.
  ───────────────────────────────────────────────────────── */
  --tracking-tight:         -0.02em;  /* large display numbers */
  --tracking-normal:         0em;
  --tracking-wide:           0.06em;  /* uppercase UI labels */
  --tracking-widest:         0.10em;  /* micro uppercase tags, nav labels */

  /* ── RADIUS SUPPLEMENT ────────────────────────────────────
     --r-full : semantic alias of --r-pill (100px).
       Used wherever spec says "fully rounded" — pills,
       avatar circles, badge chips, scope pill.
     --r-xl   : large cards, bottom sheets, hero panels.
       Sits between --r-lg (14px) and --r-full.
  ───────────────────────────────────────────────────────── */
  --r-full:                 var(--r-pill);    /* 100px — fully rounded */
  --r-xl:                   20px;             /* hero cards, bottom sheets */

  /* ── ELEVATION / SHADOW ───────────────────────────────────
     Flat design system — shadows are functional, not decorative.
     --shadow-focus : keyboard and tap focus ring (gold glow).
     --shadow-sheet : bottom sheet lift from page surface.
  ───────────────────────────────────────────────────────── */
  --shadow-focus:           0 0 0 2px rgba(212, 175, 55, 0.45);
  --shadow-sheet:           0 -4px 24px rgba(0, 0, 0, 0.4);

  /* ── READINESS RING ───────────────────────────────────────
     SVG ring dimensions per breakpoint.
     Stroke width shared across all sizes.
  ───────────────────────────────────────────────────────── */
  --ring-size-mobile:       160px;
  --ring-size-tablet:       200px;
  --ring-size-desktop:      220px;
  --ring-stroke:            10px;

  /* ── LINE HEIGHT ALIASES ──────────────────────────────────
     Complement the v1.0 line-height: 1.6 on body.
  ───────────────────────────────────────────────────────── */
  --leading-tight:          1.2;   /* headings, display text */
  --leading-normal:         1.5;   /* standard body */
  --leading-loose:          1.7;   /* long-form reading */

  /* ── WEIGHT ALIAS ─────────────────────────────────────────
     v1.0 uses --weight-normal/medium/semibold/bold.
     --weight-regular added as explicit alias of --weight-normal
     for Track 2 specs that use this name.
  ───────────────────────────────────────────────────────── */
  --weight-regular:         var(--weight-normal);   /* 400 */

}

/* ── RESPONSIVE PAD-SCREEN OVERRIDE ──────────────────────────
   Matches --main-padding-* breakpoints from v1.0.
   --pad-screen scales up at tablet and desktop.
────────────────────────────────────────────────────────────── */
@media (min-width: 768px) {
  :root {
    --pad-screen: var(--space-6);   /* 24px at tablet */
  }
}

@media (min-width: 1280px) {
  :root {
    --pad-screen: var(--space-8);   /* 32px at desktop */
  }
}

/* ── RESET ──────────────────────────────────────────────── */
* { box-sizing: border-box; margin: 0; padding: 0; }

body {
  background: var(--color-bg-base);
  color: var(--color-text-primary);
  font-family: var(--font-body);
  min-height: 100vh;
  font-size: var(--text-base);
  line-height: 1.6;
}

/* ── SIDEBAR ─────────────────────────────────────────────── */
#sidebar {
  position: fixed; left: 0; top: 0; bottom: 0; width: 240px;
  background: var(--bg2);
  border-right: 1px solid var(--border);
  display: flex; flex-direction: column;
  z-index: 150;
  transition: transform 0.26s cubic-bezier(0.4,0,0.2,1);
}

#sidebar-overlay {
  display: none; position: fixed; inset: 0;
  background: rgba(0,0,0,0.55); z-index: 140;
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
}
#sidebar-overlay.open { display: block; }

#sidebar-toggle {
  display: none;
  position: fixed; top: 13px; left: 14px; z-index: 200;
  background: var(--bg2); border: 1px solid var(--border2);
  border-radius: 8px; padding: 8px 10px;
  cursor: pointer; color: var(--text);
  align-items: center; gap: 6px;
  font-family: var(--font-mono); font-size: 11px;
  transition: all 0.15s; line-height: 1;
}
#sidebar-toggle:hover { background: var(--bg3); border-color: var(--accent); color: var(--accent); }
#sidebar-toggle svg { display: block; }

.logo {
  padding: 24px 20px 20px;
  border-bottom: 1px solid var(--border);
}
.logo-name {
  font-family: var(--font-display);
  font-weight: 700; font-size: 16px;
  color: var(--accent);
  letter-spacing: -0.02em;
}
.logo-sub {
  font-family: var(--font-mono);
  font-size: 9px; color: var(--text3);
  letter-spacing: 0.12em; text-transform: uppercase;
  margin-top: 3px;
}
.logo-bar {
  height: 2px;
  background: linear-gradient(90deg, var(--accent), transparent);
  margin-top: 14px; border-radius: 1px;
}

nav { padding: 12px 0; flex: 1; overflow-y: auto; }

.nav-section {
  font-family: var(--font-mono);
  font-size: 9px; color: var(--text3);
  letter-spacing: 0.1em; text-transform: uppercase;
  padding: 10px 20px 4px;
}

nav a {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 20px;
  color: var(--text2); text-decoration: none;
  font-size: 13px; font-weight: 400;
  transition: all 0.15s; cursor: pointer;
  border-left: 2px solid transparent;
  position: relative;
}
nav a:hover { color: var(--text); background: var(--bg3); }
nav a.active {
  color: var(--accent);
  border-left-color: var(--accent);
  background: var(--accent3);
  font-weight: 500;
}
nav a .icon { width: 18px; text-align: center; font-size: 13px; opacity: 0.8; }
nav a.active .icon { opacity: 1; }

.sidebar-footer {
  padding: 14px 16px;
  border-top: 1px solid var(--border);
  background: var(--bg);
}
.sidebar-date {
  font-family: var(--font-mono);
  font-size: 10px; color: var(--text3);
  margin-bottom: 10px;
  letter-spacing: 0.04em;
}
.backup-btn {
  display: flex; align-items: center; gap: 7px;
  width: 100%; padding: 7px 10px; border-radius: 6px;
  font-size: 11px; font-family: var(--font-mono);
  cursor: pointer; border: 1px solid var(--border);
  background: transparent; color: var(--text2);
  transition: all 0.15s; margin-bottom: 5px;
  letter-spacing: 0.02em;
}
.backup-btn:hover { border-color: var(--border2); color: var(--text); background: var(--bg3); }
.backup-btn.export { color: var(--accent); border-color: var(--color-accent-dim); }
.backup-btn.export:hover { background: var(--accent3); }

@keyframes storage-pulse { 0%,100%{opacity:1} 50%{opacity:0.5} }
@keyframes spin { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }

/* ── MAIN — mobile-first three-tier rewrite ──────────────────
   Previously: desktop-first calc(100% - 240px) with no mobile
   width fix — caused #main to render at 150px on 390px viewport.
   Now: mobile gets full width, desktop gets sidebar offset.
   #main is legacy pages only. #page-home uses .t2-page.

   Option 3 rewrite — 22 Jun 2026:
   Removed padding: 36px 40px from desktop rule entirely.
   Each page manages its own internal padding.
   This eliminates the #page-mcq negative-margin cancel hack.
   Breakpoint lowered 961px → 768px to match all other
   tablet/desktop breakpoints and prevent layout collapse
   when DevTools is docked right (viewport < 961px).
──────────────────────────────────────────────────────────── */
#main {
  width: 100%;
  margin-left: 0;
  padding: 0 0 70px 0;
  max-width: 100%;
  min-width: 0;
  box-sizing: border-box;
  overflow-x: hidden;
}

/* ── RESPONSIVE ──────────────────────────────────────────── */
@media (max-width: 767px) {
  #sidebar { transform: translateX(-100%); }
  #sidebar.open { transform: translateX(0); box-shadow: 4px 0 40px rgba(0,0,0,0.45); }
  #sidebar-toggle { display: flex; }
  .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr !important; }
  .page-header h1 { font-size: 21px; }
  .countdown-num { font-size: 34px; }
  .kbd-hint { left: 16px; bottom: 16px; }
}
@media (max-width: 600px) {
  .card { padding: 16px; }
  .stat-card { padding: 14px; }
  .stat-value { font-size: 24px; }
  .pomo-widget { margin: 0; }
}
/* Tablet/desktop — sidebar visible, offset #main.
   No padding — each page manages its own internal padding. */
@media (min-width: 768px) {
  #main {
    margin-left: var(--sidebar-width);
    width: calc(100% - var(--sidebar-width));
  }
}

/* ── PAGES ───────────────────────────────────────────────── */
.page { display: none; }
.page.active:not(#page-notes) { display: block; } 
/* ── KMU DASHBOARD: HERO ─────────────────────────────────── */
.kmu-hero {
  position: relative; z-index: 1;
  padding: 48px 40px 36px;
  border-bottom: 1px solid rgba(201,168,76,.18);
  display: flex; align-items: flex-start;
  justify-content: space-between; gap: 20px; flex-wrap: wrap;
}
.kmu-hero-kmu {
  font-family: var(--font-mono);
  font-size: 10px; letter-spacing: 4px;
  text-transform: uppercase; color: #c9a84c; opacity: .7;
  margin-bottom: 10px;
}
.kmu-hero-title {
  font-family: 'Playfair Display', serif;
  font-size: clamp(28px, 4vw, 48px); font-weight: 900;
  line-height: 1.1; color: #fff; margin-bottom: 6px;
}
.kmu-hero-title span { color: #c9a84c; }
.kmu-hero-sub { font-size: 13px; color: rgba(232,234,240,.5); }
.kmu-hero-right {
  display: flex; flex-direction: column;
  align-items: flex-end; gap: 10px;
}
.kmu-hero-stats { display: flex; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.kmu-stat-pill {
  background: rgba(201,168,76,.15);
  border: 1px solid rgba(201,168,76,.18);
  border-radius: 100px; padding: 6px 14px;
  font-size: 11px; font-weight: 600;
  color: #c9a84c; letter-spacing: .5px;
}
.kmu-master-progress { width: 240px; }
.kmu-mp-label {
  display: flex; justify-content: space-between;
  font-size: 10px; color: rgba(232,234,240,.5); margin-bottom: 5px;
}
.kmu-mp-label strong { color: #c9a84c; font-size: 12px; }
.kmu-mp-track {
  height: 6px; background: rgba(255,255,255,.08);
  border-radius: 3px; overflow: hidden;
}
.kmu-mp-fill {
  height: 100%;
  background: linear-gradient(90deg, #c9a84c, #f5d87e);
  border-radius: 3px; transition: width .6s ease; width: 0%;
}

/* ── KMU DASHBOARD: PAPER TABS ───────────────────────────── */
.kmu-tabs-wrap {
  position: relative; z-index: 1;
  padding: 20px 40px 0;
  display: flex; gap: 4px;
  border-bottom: 1px solid rgba(201,168,76,.18);
  overflow-x: auto;
}
.kmu-tab {
  padding: 10px 22px 12px;
  font-size: 11px; font-weight: 700;
  letter-spacing: 1.5px; text-transform: uppercase;
  color: rgba(232,234,240,.5);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  transition: color .2s, border-color .2s;
  background: none;
  border-top: none; border-left: none; border-right: none;
  font-family: var(--font-body);
}
.kmu-tab:hover { color: #c9a84c; }
.kmu-tab.active { color: #c9a84c; border-bottom-color: #c9a84c; }

/* ── KMU DASHBOARD: PANELS ───────────────────────────────── */
.kmu-panels { position: relative; z-index: 1; padding: 32px 40px 60px; }
.kmu-panel { display: none; animation: fadeUp .35s ease both; }
.kmu-panel.active { display: block; }
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: translateY(0); }
}
.kmu-paper-header { margin-bottom: 28px; }
.kmu-paper-label {
  font-family: var(--font-mono);
  font-size: 9px; letter-spacing: 3px;
  text-transform: uppercase; color: #c9a84c; opacity: .6; margin-bottom: 4px;
}
.kmu-paper-name {
  font-family: 'Playfair Display', serif;
  font-size: 26px; font-weight: 700; color: #fff;
}
.kmu-paper-meta { font-size: 12px; color: rgba(232,234,240,.5); margin-top: 4px; }

/* ── KMU SUBJECT CARDS GRID ──────────────────────────────── */
.kmu-cards-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 16px;
}
.kmu-subject-card {
  background: #111e35;
  border: 1px solid rgba(201,168,76,.18);
  border-radius: 12px; padding: 22px 24px 18px;
  cursor: pointer; text-decoration: none; display: block;
  position: relative; overflow: hidden;
  transition: transform .2s, box-shadow .2s, border-color .2s;
}
.kmu-subject-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 40px rgba(0,0,0,.3);
  border-color: rgba(201,168,76,.4);
}
.kmu-subject-card::before {
  content: ''; position: absolute;
  top: 0; left: 0; right: 0; height: 3px;
  border-radius: 12px 12px 0 0;
}
/* Card colour variants */
.kmu-card-path::before { background: #9b2335; }
.kmu-card-path { background: linear-gradient(135deg, #111e35, rgba(155,35,53,.07)); }
.kmu-card-pha::before  { background: #5b2d8e; }
.kmu-card-pha  { background: linear-gradient(135deg, #111e35, rgba(91,45,142,.07)); }
.kmu-card-for::before  { background: #7a4a1e; }
.kmu-card-for  { background: linear-gradient(135deg, #111e35, rgba(122,74,30,.07)); }
.kmu-card-com::before  { background: #3a5e28; }
.kmu-card-com  { background: linear-gradient(135deg, #111e35, rgba(58,94,40,.07)); }
.kmu-card-med::before  { background: #1a3a6b; }
.kmu-card-med  { background: linear-gradient(135deg, #111e35, rgba(26,58,107,.07)); }
.kmu-card-surg::before { background: #0d4025; }
.kmu-card-surg { background: linear-gradient(135deg, #111e35, rgba(13,64,37,.07)); }
.kmu-card-gyn::before  { background: #7b1050; }
.kmu-card-gyn  { background: linear-gradient(135deg, #111e35, rgba(123,16,80,.07)); }
.kmu-card-ent::before  { background: #0a4040; }
.kmu-card-ent  { background: linear-gradient(135deg, #111e35, rgba(10,64,64,.07)); }
.kmu-card-eye::before  { background: #1a3a6b; }
.kmu-card-eye  { background: linear-gradient(135deg, #111e35, rgba(26,58,107,.07)); }
.kmu-card-min::before  { background: #4a3a1e; }
.kmu-card-min  { background: linear-gradient(135deg, #111e35, rgba(74,58,30,.07)); }

.kmu-card-top {
  display: flex; align-items: flex-start;
  justify-content: space-between; gap: 10px; margin-bottom: 14px;
}
.kmu-card-icon { font-size: 24px; line-height: 1; }
.kmu-card-badge {
  font-size: 9px; font-weight: 700;
  letter-spacing: 1.5px; text-transform: uppercase;
  padding: 3px 9px; border-radius: 100px; border: 1px solid;
}
.kmu-badge-path { color: #e87a8a; border-color: rgba(155,35,53,.4); background: rgba(155,35,53,.15); }
.kmu-badge-pha  { color: #b090e0; border-color: rgba(91,45,142,.4);  background: rgba(91,45,142,.15); }
.kmu-badge-for  { color: #d4a070; border-color: rgba(122,74,30,.4);  background: rgba(122,74,30,.15); }
.kmu-badge-com  { color: #80c060; border-color: rgba(58,94,40,.4);   background: rgba(58,94,40,.15); }
.kmu-badge-med  { color: #70a0e0; border-color: rgba(26,58,107,.4);  background: rgba(26,58,107,.15); }
.kmu-badge-surg { color: #60c090; border-color: rgba(13,64,37,.4);   background: rgba(13,64,37,.15); }
.kmu-badge-gyn  { color: #e070b0; border-color: rgba(123,16,80,.4);  background: rgba(123,16,80,.15); }
.kmu-badge-ent  { color: #60c0c0; border-color: rgba(10,64,64,.4);   background: rgba(10,64,64,.15); }
.kmu-badge-eye  { color: #80b0f0; border-color: rgba(26,58,107,.4);  background: rgba(26,58,107,.15); }
.kmu-badge-min  { color: #c0a070; border-color: rgba(74,58,30,.4);   background: rgba(74,58,30,.15); }

.kmu-card-subject { font-size: 17px; font-weight: 700; color: #fff; margin-bottom: 3px; line-height: 1.2; }
.kmu-card-module  { font-size: 11px; color: rgba(232,234,240,.5); margin-bottom: 14px; }

.kmu-card-progress { display: flex; align-items: center; gap: 10px; }
.kmu-prog-bar-wrap { flex: 1; }
.kmu-prog-bar-track {
  height: 4px; background: rgba(255,255,255,.08);
  border-radius: 2px; overflow: hidden; margin-bottom: 4px;
}
.kmu-prog-bar-fill { height: 100%; border-radius: 2px; transition: width .6s ease; width: 0%; }
.kmu-fill-path { background: #9b2335; }
.kmu-fill-pha  { background: #5b2d8e; }
.kmu-fill-for  { background: #7a4a1e; }
.kmu-fill-com  { background: #3a5e28; }
.kmu-fill-med  { background: #1a3a6b; }
.kmu-fill-surg { background: #0d4025; }
.kmu-fill-gyn  { background: #7b1050; }
.kmu-fill-ent  { background: #0a4040; }
.kmu-fill-eye  { background: #1a3a6b; }
.kmu-fill-min  { background: #4a3a1e; }

.kmu-prog-label { font-size: 10px; color: rgba(232,234,240,.5); font-family: var(--font-mono); }
.kmu-prog-pct   { font-size: 13px; font-weight: 700; font-family: var(--font-mono); color: #c9a84c; min-width: 38px; text-align: right; }

.kmu-card-footer {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: 14px; padding-top: 12px;
  border-top: 1px solid rgba(255,255,255,.06);
}
.kmu-card-mcqs { font-size: 10px; color: rgba(232,234,240,.5); font-family: var(--font-mono); }
.kmu-card-mcqs strong { color: #c9a84c; }
.kmu-card-open {
  font-size: 10px; font-weight: 700;
  letter-spacing: 1px; text-transform: uppercase;
  color: #c9a84c; opacity: .6; transition: opacity .2s;
}
.kmu-subject-card:hover .kmu-card-open { opacity: 1; }

/* KMU dashboard footer */
.kmu-dash-footer {
  position: relative; z-index: 1; text-align: center;
  padding: 20px; border-top: 1px solid rgba(201,168,76,.18);
  font-size: 11px; color: rgba(232,234,240,.5);
}
.kmu-dash-footer strong { color: #c9a84c; }

/* Responsive */
@media (max-width: 768px) {
  .kmu-hero { padding: 28px 20px 24px; flex-direction: column; }
  .kmu-hero-right { align-items: flex-start; }
  .kmu-master-progress { width: 100%; }
  .kmu-tabs-wrap { padding: 12px 20px 0; }
  .kmu-panels { padding: 20px 16px 40px; }
  .kmu-cards-grid { grid-template-columns: 1fr; }
}

@keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }

/* ── PAGE HEADER ─────────────────────────────────────────── */
.page-header { margin-bottom: 32px; padding-bottom: 20px; border-bottom: 1px solid var(--border); }
.page-header h1 {
  font-family: var(--font-display);
  font-size: 26px; font-weight: 700;
  color: var(--text); letter-spacing: -0.03em;
}
.page-header h1 span { color: var(--accent); }
.page-header p { color: var(--text2); font-size: 13px; margin-top: 5px; }

/* ── CARDS ───────────────────────────────────────────────── */
.card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 12px; padding: 24px;
  transition: border-color 0.15s;
}
.card:hover { border-color: var(--border2); }
.card-header {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 20px;
}
.card-header h2 {
  font-family: var(--font-display);
  font-size: 13px; font-weight: 600;
  color: var(--text2); letter-spacing: 0.06em;
  text-transform: uppercase;
}

/* ── BADGES ──────────────────────────────────────────────── */
.badge {
  font-size: 11px; padding: 3px 10px; border-radius: 4px;
  font-family: var(--font-mono); font-weight: 500;
}
.badge-green  { background: var(--green2);  color: var(--green); }
.badge-amber  { background: var(--accent3); color: var(--accent); }
.badge-blue   { background: var(--blue2);   color: var(--blue); }
.badge-red    { background: var(--red2);    color: var(--red); }
.badge-purple { background: var(--purple2); color: var(--purple); }

/* ── GRIDS ───────────────────────────────────────────────── */
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }

/* ── STAT CARDS ──────────────────────────────────────────── */
.stat-card {
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 10px; padding: 20px;
  position: relative; overflow: hidden;
  transition: all 0.2s;
}
.stat-card::before {
  content: ''; position: absolute;
  top: 0; left: 0; right: 0; height: 2px;
  background: linear-gradient(90deg, var(--accent), transparent);
  opacity: 0; transition: opacity 0.2s;
}
.stat-card:hover { border-color: var(--border3); }
.stat-card:hover::before { opacity: 1; }
.stat-label {
  font-size: 10px; color: var(--text3);
  font-family: var(--font-mono);
  text-transform: uppercase; letter-spacing: 0.1em;
  margin-bottom: 10px;
}
.stat-value {
  font-family: var(--font-display);
  font-size: 30px; font-weight: 700;
  color: var(--text); letter-spacing: -0.03em;
  line-height: 1;
}
.stat-sub { font-size: 11px; color: var(--text2); margin-top: 6px; }

/* ── PROGRESS ────────────────────────────────────────────── */
.progress-track {
  height: 3px; background: var(--bg);
  border-radius: 2px; margin-top: 10px;
  overflow: hidden;
}
.progress-fill {
  height: 3px; border-radius: 2px;
  background: var(--accent);
  transition: width 0.5s cubic-bezier(0.4,0,0.2,1);
}
.progress-fill.green  { background: var(--green); }
.progress-fill.amber  { background: var(--accent); }
.progress-fill.teal   { background: var(--teal); }
.progress-fill.purple { background: var(--purple); }

/* ── TASK ROW ────────────────────────────────────────────── */
.task-row {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 0; border-bottom: 1px solid var(--border);
}
.task-row:last-child { border-bottom: none; }
.task-check {
  width: 18px; height: 18px; border-radius: 4px;
  border: 1px solid var(--border2);
  background: transparent; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; transition: all 0.15s;
}
.task-check:hover { border-color: var(--accent); }
.task-check.done { background: var(--accent); border-color: var(--accent); }
.task-check.done::after { content: '✓'; font-size: 11px; color: #fff; font-weight: 700; }
.task-text { flex: 1; font-size: 13px; color: var(--text); }
.task-text.done { text-decoration: line-through; color: var(--text3); }

/* ── INPUTS ──────────────────────────────────────────────── */
input[type="text"], input[type="date"], input[type="number"], select, textarea {
  background: var(--bg3); border: 1px solid var(--border);
  border-radius: 8px; color: var(--text);
  font-family: var(--font-body); font-size: 13px;
  padding: 9px 12px; outline: none; width: 100%;
  transition: border-color 0.15s;
}
input:focus, select:focus, textarea:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--color-accent-dim);
}
textarea { resize: vertical; min-height: 80px; }
label {
  font-size: 11px; color: var(--text3);
  font-family: var(--font-mono);
  text-transform: uppercase; letter-spacing: 0.06em;
  display: block; margin-bottom: 6px;
}
.form-group { margin-bottom: 16px; }

/* ── BUTTONS ─────────────────────────────────────────────── */
.btn {
  background: var(--accent); color: #fff;
  border: none; border-radius: 7px;
  padding: 9px 20px; font-size: 13px;
  font-family: var(--font-body); font-weight: 600;
  cursor: pointer; transition: all 0.15s;
  letter-spacing: 0.01em;
}
.btn:hover { background: var(--accent2); transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn-ghost {
  background: transparent; color: var(--text2);
  border: 1px solid var(--border); border-radius: 7px;
  padding: 8px 16px; font-size: 12px; cursor: pointer;
  font-family: var(--font-body); transition: all 0.15s;
}
.btn-ghost:hover { border-color: var(--border2); color: var(--text); background: var(--bg3); }
.btn-danger {
  background: var(--red2); color: var(--red);
  border: 1px solid rgba(239,68,68,0.2);
  border-radius: 5px; padding: 4px 10px;
  font-size: 11px; cursor: pointer;
  transition: all 0.15s;
}
.btn-danger:hover { background: rgba(239,68,68,0.2); }
.btn-sm { padding: 6px 14px; font-size: 12px; }

/* ── COUNTDOWN ───────────────────────────────────────────── */
.countdown-wrap { display: flex; gap: 24px; justify-content: center; margin: 24px 0; }
.countdown-unit { text-align: center; }
.countdown-num {
  font-family: var(--font-display);
  font-size: 44px; font-weight: 700;
  color: var(--accent); line-height: 1;
  letter-spacing: -0.04em;
}
.countdown-label {
  font-size: 9px; color: var(--text3);
  font-family: var(--font-mono);
  text-transform: uppercase; letter-spacing: 0.1em;
  margin-top: 6px;
}
.countdown-sep {
  font-family: var(--font-display);
  font-size: 36px; color: var(--text3);
  align-self: flex-start; margin-top: 4px;
}

/* ── QUOTE CARD ──────────────────────────────────────────── */
.quote-card {
  background: linear-gradient(135deg, var(--color-accent-dim), transparent);
  border: 1px solid var(--color-accent-dim);
  border-radius: 12px; padding: 24px;
  position: relative; overflow: hidden;
}
.quote-card::before {
  content: '"';
  position: absolute; top: -10px; left: 16px;
  font-family: var(--font-display);
  font-size: 80px; color: var(--accent);
  opacity: 0.08; line-height: 1;
}
.quote-text {
  font-family: var(--font-display);
  font-size: 15px; font-weight: 500;
  line-height: 1.65; color: var(--text);
  position: relative;
}
.quote-author {
  font-size: 11px; color: var(--accent);
  font-family: var(--font-mono);
  margin-top: 12px; opacity: 0.8;
}

/* ── TIMELINE ────────────────────────────────────────────── */
.timeline-item { display: flex; gap: 14px; padding: 10px 0; }
.timeline-dot {
  width: 10px; height: 10px; border-radius: 50%;
  border: 2px solid var(--accent);
  background: var(--bg2); flex-shrink: 0; margin-top: 4px;
}
.timeline-dot.done { background: var(--green); border-color: var(--green); }
.timeline-title { font-size: 13px; color: var(--text); font-weight: 500; }
.timeline-meta {
  font-size: 11px; color: var(--text3);
  font-family: var(--font-mono); margin-top: 2px;
}

/* ── TABLE ───────────────────────────────────────────────── */
.data-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.data-table th {
  text-align: left; padding: 10px 14px;
  font-size: 10px; color: var(--text3);
  font-family: var(--font-mono);
  text-transform: uppercase; letter-spacing: 0.08em;
  border-bottom: 1px solid var(--border); font-weight: 500;
}
.data-table td {
  padding: 11px 14px; border-bottom: 1px solid var(--border);
  color: var(--text2); vertical-align: top;
}
.data-table tr:last-child td { border-bottom: none; }
.data-table tr:hover td { background: var(--bg3); color: var(--text); }

/* ── MODAL ───────────────────────────────────────────────── */
.modal-overlay {
  display: none; position: fixed; inset: 0;
  background: rgba(0,0,0,0.65);
  backdrop-filter: blur(4px);
  z-index: 200; align-items: center; justify-content: center;
}
.modal-overlay.open { display: flex; }
.modal {
  background: var(--bg2); border: 1px solid var(--border2);
  border-radius: 14px; padding: 28px; width: 500px;
  max-height: 80vh; overflow-y: auto;
  box-shadow: 0 24px 64px rgba(0,0,0,0.5);
}
.modal h3 {
  font-family: var(--font-display);
  font-size: 17px; font-weight: 600;
  margin-bottom: 20px; color: var(--text);
  letter-spacing: -0.02em;
}
.modal-footer { display: flex; justify-content: flex-end; gap: 10px; margin-top: 20px; }

/* ── SCROLLBAR ───────────────────────────────────────────── */
::-webkit-scrollbar { width: 4px; height: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--bg4); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: var(--text3); }

/* ── TOAST ───────────────────────────────────────────────── */
#toast {
  position: fixed; bottom: 28px; right: 28px;
  background: var(--bg3); border: 1px solid var(--border3);
  color: var(--accent); padding: 11px 20px;
  border-radius: 8px; font-size: 13px;
  font-family: var(--font-mono);
  opacity: 0; transition: opacity 0.25s;
  z-index: 300; pointer-events: none;
  box-shadow: 0 8px 24px rgba(0,0,0,0.4);
}
#toast.show { opacity: 1; }

/* ── UTILS ───────────────────────────────────────────────── */
hr { border: none; border-top: 1px solid var(--border); margin: 20px 0; }
select option { background: var(--bg2); }
.flex { display: flex; }
.flex-between { display: flex; justify-content: space-between; align-items: center; }
.flex-gap { display: flex; gap: 10px; align-items: center; }
.mt-2 { margin-top: 8px; }
.mt-3 { margin-top: 12px; }
.mt-4 { margin-top: 18px; }
.text-sm { font-size: 12px; }
.text-xs { font-size: 11px; color: var(--text3); font-family: var(--font-mono); }
.color-green  { color: var(--green); }
.color-amber  { color: var(--accent); }
.color-red    { color: var(--red); }
.color-blue   { color: var(--blue); }
.color-accent { color: var(--accent); }
.section-gap  { margin-bottom: 24px; }
.empty-state  { text-align: center; padding: 40px; color: var(--text3); font-size: 13px; font-family: var(--font-mono); }

/* ── MCQ APP CONTAINER ───────────────────────────────────── */
/* ── MCQ-APP TOKEN SCOPE — Sprint 12A ───────────────────────────
   Old hardcoded hex values replaced with Design Token System v1.0.
   Legacy shorthand aliases (--bg, --accent, etc.) are preserved
   here so all existing MCQ component CSS continues to work via
   the legacy bridge. Full component migration in a future sprint.
────────────────────────────────────────────────────────────── */
.mcq-app {
  /* Surface */
  --bg:  var(--color-bg-base);
  --bg2: var(--color-bg-elevated);
  --bg3: var(--color-bg-overlay);
  --bg4: var(--color-bg-subtle);
  /* Borders */
  --border:  var(--color-border-default);
  --border2: var(--color-border-strong);
  --border3: var(--color-border-focus);
  /* Text */
  --text:  var(--color-text-primary);
  --text2: var(--color-text-secondary);
  --text3: var(--color-text-tertiary);
  /* Accent — now MedPREP gold, not old blue */
  --accent:      var(--color-accent);
  --accent2:     var(--color-accent-hover);
  --accent-glow: var(--color-accent-dim);
  /* Semantic */
  --green:    var(--color-success);
  --green-bg: var(--color-success-dim);
  --red:      var(--color-danger);
  --red-bg:   var(--color-danger-dim);
  --amber:    var(--color-warning);
  --amber-bg: var(--color-warning-dim);
  --cyan:     var(--color-info);
  --cyan-bg:  var(--color-info-dim);
  /* Typography — now Newsreader / Source Sans 3 / DM Mono */
  --font-d: var(--font-display);
  --font-b: var(--font-body);
  --font-m: var(--font-mono);
  /* Radius */
  --r:    var(--r-md);
  --r-sm: var(--r-sm);
}
.mcq-app .app { display:flex; flex-direction:column; min-height:60vh; width:100%; overflow-x:hidden; }
.mcq-app main { flex:1; padding:0; max-width:100%; width:100%; overflow-x:hidden; }

/* ── MCQ TAB-PILL BAR ────────────────────────────────────── */
.mcq-tab-bar {
  display:flex; align-items:center; gap:4px;
  margin-bottom:28px;
  background:var(--bg2);
  border:1px solid var(--border);
  border-radius:10px;
  padding:5px;
  flex-wrap:wrap;
}
.mcq-tab-bar .nav-tab {
  font-size:12px; font-weight:500;
  padding:7px 14px; border-radius:7px;
  border:none; background:transparent;
  color:var(--text2); cursor:pointer;
  transition:all .18s; white-space:nowrap;
  font-family:var(--font-body);
  display:flex; align-items:center; gap:5px;
}
.mcq-tab-bar .nav-tab.active {
  background:var(--color-accent); color:var(--color-bg-base);
  box-shadow:0 2px 8px var(--color-accent-dim);
}
.mcq-tab-bar .nav-tab:hover:not(.active) { color:var(--text); background:var(--bg3); }
.mcq-app .screen { display:none; padding:0; } /* pad-screen removed — each screen manages its own padding */
.mcq-app .screen.active { display:block; }

/* ── MCQ SHARED CARD OVERRIDES ───────────────────────────── */
.card { background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);padding:18px; }
.card-sm { background:var(--bg3);border:1px solid var(--border);border-radius:var(--r-sm);padding:14px; }

/* ── MCQ DASHBOARD STATS ─────────────────────────────────── */
.dg { font-family:var(--font-d);font-size:20px;font-weight:700;letter-spacing:-0.03em;margin-bottom:4px; }
.dg span { color:var(--accent); }
.ds { font-size:12px;color:var(--text2);margin-bottom:16px; }
.sec { font-family:var(--font-d);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:var(--text3);margin-bottom:8px;margin-top:16px; }
.stat-grid { display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:16px; }
.stat-box { background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);padding:14px;text-align:center;position:relative;overflow:hidden; }
.stat-box::before { content:'';position:absolute;top:0;left:0;right:0;height:2px; }
.sb-a::before { background:var(--accent); }
.sb-d::before { background:var(--amber); }
.sb-s::before { background:var(--green); }
.sb-c::before { background:var(--cyan); }
.sv { font-family:var(--font-d);font-size:24px;font-weight:700;letter-spacing:-0.02em; }
.sk { font-size:10px;color:var(--text2);margin-top:3px;text-transform:uppercase;letter-spacing:0.05em; }

/* ── PAPER CARDS ─────────────────────────────────────────── */
.paper-grid { display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:12px; }
.paper-card { background:var(--bg3);border:1px solid var(--border);border-radius:var(--r-sm);padding:12px;cursor:pointer;transition:all .2s;position:relative; }
.paper-card:hover,.paper-card.selected { border-color:var(--accent);background:var(--accent-glow); }
.pn { font-family:var(--font-d);font-size:13px;font-weight:700; }
.pm { font-size:11px;color:var(--text2);margin-top:2px; }
.pc { font-size:10px;font-family:var(--font-m);color:var(--accent);margin-top:5px; }
.pbadge { position:absolute;top:8px;right:8px;font-size:9px;padding:2px 7px;border-radius:20px;background:var(--accent);color:#fff;font-weight:600; }

/* ── MCQ BUTTONS ─────────────────────────────────────────── */
.btn { display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:var(--font-b);font-size:13px;font-weight:600;padding:10px 20px;border-radius:var(--r-sm);border:none;cursor:pointer;transition:all .2s;width:100%; }
.btn-p { background:var(--accent);color:#fff; }
.btn-p:hover { background:var(--accent2);transform:translateY(-1px); }
.btn-p:disabled { background:var(--border2);color:var(--text3);cursor:not-allowed;transform:none; }
.btn-s { background:var(--bg3);color:var(--text);border:1px solid var(--border2); }
.btn-s:hover { border-color:var(--accent);color:var(--accent); }
.btn-d { background:var(--red-bg);color:var(--red);border:1px solid var(--color-danger-dim); }
.btn-d:hover { background:var(--color-danger-dim); }
.btn-g { background:var(--cyan-bg);color:var(--cyan);border:1px solid rgba(34,211,238,0.2); }
.btn-g:hover { background:rgba(34,211,238,0.2); }
.btn-sm { padding:6px 12px;font-size:11px;width:auto; }

/* ── FILTER PILLS ────────────────────────────────────────── */
.filter-row { display:flex;gap:5px;flex-wrap:wrap;margin-bottom:10px; }
.fp { font-size:11px;padding:5px 12px;border-radius:20px;border:1px solid var(--border2);background:var(--bg3);color:var(--text2);cursor:pointer;transition:all .2s;font-weight:500; }
.fp.active { border-color:var(--accent);background:var(--accent-glow);color:var(--accent); }
.tracker-bar { background:var(--bg3);border:1px solid var(--border);border-radius:var(--r-sm);padding:12px;margin-bottom:8px; }
.tb-track { height:5px;background:var(--bg2);border-radius:3px;overflow:hidden;margin-top:6px; }
.tb-fill { height:5px;border-radius:3px;background:var(--accent);transition:width .5s; }

/* ── QUESTION AREA ───────────────────────────────────────── */
/* ── HUD — Q-counter · streak · flag count · timer ──────────
   4-item header per locked Sprint 3 spec. Counter pinned left,
   timer pinned right (margin-left:auto); streak + flag-count
   sit between. flag-count hidden via inline style when 0.
   .q-streak was previously unstyled despite being set by JS —
   fixed here as part of the 4-item HUD rebuild. ─────────── */
.q-header {
  display:flex;align-items:center;gap:var(--space-3);
  margin-bottom:var(--space-3);flex-wrap:nowrap;
}
.q-counter {
  font-family:var(--font-mono);font-size:var(--text-xs);
  color:var(--color-text-secondary);white-space:nowrap;
}
.q-streak {
  font-family:var(--font-mono);font-size:var(--text-xs);
  color:var(--color-text-tertiary);white-space:nowrap;
  transition:color var(--transition-fast);
}
.q-streak.hot  { color:var(--color-warning); }
.q-streak.fire { color:var(--color-danger);font-weight:var(--weight-semibold); }
.q-flag-count {
  font-family:var(--font-mono);font-size:var(--text-xs);
  color:var(--color-warning);white-space:nowrap;
}
.q-timer {
  font-family:var(--font-mono);font-size:var(--text-sm);
  color:var(--color-accent);font-weight:var(--weight-medium);
  margin-left:auto;white-space:nowrap;
}
.q-timer.warn   { color:var(--color-warning); }
.q-timer.danger { color:var(--color-danger); }
.q-tags { display:flex;gap:5px;margin-bottom:8px;flex-wrap:wrap; }
.qt { font-size:10px;padding:2px 7px;border-radius:4px;font-family:var(--font-m);font-weight:500; }
.qt-p { background:var(--accent-glow);color:var(--accent); }
.qt-s { background:var(--purple-bg);color:var(--purple); }
.qt-d { background:var(--amber-bg);color:var(--amber); }
.qt-new { background:var(--green-bg);color:var(--green); }
.progress-wrap { height:3px;background:var(--bg3);border-radius:2px;margin-bottom:16px;overflow:hidden; }
.progress-fill { height:3px;background:var(--accent);border-radius:2px;transition:width .4s ease; }
.q-stem { font-size:15px;line-height:1.7;color:var(--text);margin-bottom:16px; }
.options { display:flex;flex-direction:column;gap:7px;margin-bottom:14px; }
.opt { display:flex;align-items:flex-start;gap:10px;padding:11px 14px;border:1px solid var(--border2);border-radius:var(--r-sm);cursor:pointer;transition:all .15s;background:var(--bg3); }
.opt:hover:not(.locked) { border-color:var(--accent);background:var(--accent-glow); }
.ol { font-family:var(--font-m);font-size:11px;font-weight:500;background:var(--bg2);border:1px solid var(--border2);border-radius:4px;padding:2px 6px;flex-shrink:0;color:var(--text2);margin-top:1px; }
.ot { font-size:13px;line-height:1.5;color:var(--text); }
.opt.correct { border-color:var(--green);background:var(--green-bg); }
.opt.correct .ol { background:var(--green-bg);border-color:var(--green);color:var(--green); }
.opt.correct .ot { color:var(--green); }
.opt.wrong { border-color:var(--red);background:var(--red-bg); }
.opt.wrong .ol { background:var(--red-bg);border-color:var(--red);color:var(--red); }
.opt.wrong .ot { color:var(--red); }
.opt.locked { cursor:default; }

/* ── OPTION STATES 4 & 5 — selected (pre-submit) + eliminated (long-press)
   Combined with existing default/correct/wrong/locked above = the full
   5-state set confirmed in Design Token System v1.0. ─────────────── */
.opt.selected {
  border-color:var(--color-accent);
  background:var(--color-accent-dim);
}
.opt.selected .ol {
  background:var(--color-accent-dim);border-color:var(--color-accent);
  color:var(--color-accent);
}
.opt.selected .ot { color:var(--color-text-primary); }

.opt.eliminated {
  opacity:.45;cursor:default;
  background:var(--color-bg-subtle);
}
.opt.eliminated .ot {
  text-decoration:line-through;color:var(--color-text-tertiary);
}
.opt.eliminated .ol { color:var(--color-text-tertiary); }
.opt.eliminated:hover {
  border-color:var(--color-border-default);
  background:var(--color-bg-subtle);
}

/* After lock, dim non-relevant options so correct/wrong stand out */
.opt.locked:not(.correct):not(.wrong) { opacity:.55; }
.explain { background:var(--bg3);border-radius:var(--r-sm);padding:14px;margin-bottom:12px;font-size:13px;line-height:1.7;color:var(--text2);display:none; }
.explain.show { display:block; }
.explain strong { color:var(--text);font-weight:700; }

/* ── RICH EXPLANATION RENDERER ───────────────────────────── */
.expl-wrap { display:flex;flex-direction:column;gap:0; }
.expl-status-bar { display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border2); }
.expl-chosen-row { display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px; }
.expl-chosen-box { border-radius:7px;padding:10px; }
.expl-chosen-box .ecb-label { font-size:9px;font-family:var(--font-m);font-weight:700;letter-spacing:.07em;margin-bottom:5px; }
.expl-chosen-box .ecb-text { font-size:12px;line-height:1.4; }
.expl-body { font-size:13px;line-height:1.75;color:var(--text2); }
.expl-body p { margin:0 0 8px; }
.expl-body ul,.expl-body ol { margin:6px 0 10px;padding-left:18px; }
.expl-body li { margin-bottom:4px;font-size:13px;line-height:1.6;color:var(--text2); }
.expl-body strong,.expl-body b { color:var(--text);font-weight:700; }
.expl-body em,.expl-body i { color:var(--teal);font-style:normal;font-weight:500; }
.expl-pearl { background:var(--color-accent-dim);border-left:3px solid var(--accent);border-radius:0 var(--r-sm) var(--r-sm) 0;padding:10px 12px;margin:8px 0;font-size:12px;color:var(--text);line-height:1.6; }
.expl-pearl::before { content:'💡 ';font-size:13px; }
.expl-hy { background:var(--color-warning-dim);color:var(--amber);border-radius:3px;padding:1px 5px;font-weight:600;font-size:12.5px; }
.expl-danger { color:var(--red);font-weight:600;text-decoration:line-through;opacity:.85; }
.expl-drug { color:var(--purple);font-weight:600; }
.expl-table { width:100%;border-collapse:collapse;margin:10px 0;font-size:12px; }
.expl-table th { background:var(--bg4);color:var(--accent);font-family:var(--font-m);font-size:10px;text-transform:uppercase;letter-spacing:.06em;padding:7px 10px;text-align:left;border:1px solid var(--border2); }
.expl-table td { padding:7px 10px;border:1px solid var(--border2);color:var(--text2);line-height:1.5;vertical-align:top; }
.expl-table tr:nth-child(even) td { background:rgba(255,255,255,0.02); }
.expl-tabs { display:flex;gap:4px;margin-bottom:12px;flex-wrap:wrap; }
.expl-tab { padding:5px 11px;border-radius:var(--r-sm);font-size:11px;font-family:var(--font-m);font-weight:600;cursor:pointer;border:1px solid var(--border2);background:var(--bg4);color:var(--text3);transition:all .15s;letter-spacing:.04em; }
.expl-tab:hover { border-color:var(--accent);color:var(--accent); }
.expl-tab.active-correct { background:var(--color-success-dim);border-color:var(--color-border-focus);color:var(--green); }
.expl-tab.active-wrong { background:var(--color-danger-dim);border-color:var(--color-border-focus);color:var(--red); }
.expl-tab.active-neutral { background:var(--accent3);border-color:var(--border3);color:var(--accent); }
.expl-tab-body { display:none;font-size:12.5px;line-height:1.7;color:var(--text2);padding:10px 12px;background:var(--bg4);border-radius:var(--r-sm);border:1px solid var(--border2); }
.expl-tab-body.show { display:block; }
.expl-note-row { margin-top:12px;padding-top:10px;border-top:1px solid var(--border2); }
.expl-note-input { width:100%;background:var(--bg4);border:1px solid var(--border2);border-radius:var(--r-sm);padding:8px 10px;font-size:12px;color:var(--text);font-family:var(--font-b);resize:vertical;min-height:54px;box-sizing:border-box;transition:border-color .15s; }
.expl-note-input:focus { outline:none;border-color:var(--accent); }
.expl-note-input::placeholder { color:var(--text3); }
.expl-note-saved { font-size:10px;color:var(--green);font-family:var(--font-m);margin-top:4px;opacity:0;transition:opacity .3s; }
.expl-note-saved.show { opacity:1; }
.qt-topic { background:var(--color-accent-dim);color:var(--accent);border:1px solid var(--color-border-focus); }
.topic-stat { display:inline-flex;align-items:center;gap:5px;font-size:11px;font-family:var(--font-m); }
.topic-stat-val { font-weight:700;color:var(--text); }

/* ── HIGHLIGHT TOOLBAR ───────────────────────────────────── */
.expl-highlight-bar { display:flex;align-items:center;gap:5px;padding:7px 10px;background:var(--bg4);border-radius:var(--r-sm);border:1px solid var(--border2);margin-bottom:8px;flex-wrap:wrap; }
.expl-highlight-bar-label { font-size:9px;font-family:var(--font-m);color:var(--text3);letter-spacing:.06em;text-transform:uppercase;margin-right:2px; }
.hl-btn { width:20px;height:20px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:transform .12s,border-color .12s;flex-shrink:0; }
.hl-btn:hover { transform:scale(1.2); }
.hl-btn.active-hl { border-color:var(--text)!important;transform:scale(1.15); }
.hl-btn-erase { font-size:11px;padding:2px 8px;border-radius:10px;border:1px solid var(--border2);background:var(--bg3);color:var(--text3);cursor:pointer;font-family:var(--font-m);transition:all .12s; }
.hl-btn-erase:hover { border-color:var(--red);color:var(--red); }
.hl-count { font-size:9px;color:var(--text3);font-family:var(--font-m);margin-left:auto; }
.hl-y { background:var(--color-border-focus);border-radius:2px;padding:0 1px; }
.hl-g { background:var(--color-success-dim);border-radius:2px;padding:0 1px; }
.hl-b { background:var(--color-border-focus);border-radius:2px;padding:0 1px; }
.hl-r { background:var(--color-danger-dim);border-radius:2px;padding:0 1px; }

/* ── QUESTION IMAGE ──────────────────────────────────────── */
.q-image-wrap { margin-bottom:12px;text-align:center; }
.q-image { max-width:100%;max-height:320px;border-radius:var(--r-sm);border:1px solid var(--border2);object-fit:contain;cursor:pointer;transition:opacity .2s; }
.q-image:hover { opacity:.88; }
.q-image-label { font-size:9px;font-family:var(--font-m);color:var(--text3);letter-spacing:.06em;text-transform:uppercase;margin-bottom:5px; }
.img-preview { max-width:100%;max-height:160px;border-radius:var(--r-sm);border:1px solid var(--border2);margin-top:6px;object-fit:contain;display:none; }
.img-input-wrap { display:flex;flex-direction:column;gap:4px; }

/* ── CREATOR / ADMIN ─────────────────────────────────────── */
.creator-only { display:none!important; }
.creator-mode .creator-only { display:inline-flex!important; }
.creator-mode .nav-tab.creator-only { display:flex!important; }
/* Dropdown items are div elements — need block/flex not inline-flex */
.creator-mode .ph-avatar-dropdown-item.creator-only { display:block!important; }
.creator-mode .ph-avatar-dropdown-divider.creator-only { display:block!important; }
/* ph-top-icon-btn is already inline-flex via .ph-top-icon-btn rule */
.admin-badge { position:fixed;bottom:72px;right:12px;z-index:999;background:var(--amber);color:#000;font-size:9px;font-weight:800;font-family:var(--font-m);letter-spacing:.08em;padding:4px 10px;border-radius:20px;cursor:pointer;box-shadow:0 2px 10px rgba(0,0,0,.4);text-transform:uppercase;user-select:none; }
.admin-unlock-overlay { position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:10000;display:flex;align-items:center;justify-content:center; }
.admin-unlock-box { background:var(--bg3);border:1px solid var(--border2);border-radius:var(--r);padding:28px 24px;width:290px;text-align:center; }
.admin-unlock-box h3 { margin:0 0 4px;font-size:16px;color:var(--text); }
.admin-unlock-box p { font-size:11px;color:var(--text3);margin:0 0 16px;font-family:var(--font-m); }
.admin-pin-input { width:100%;background:var(--bg2);border:1px solid var(--border2);border-radius:var(--r-sm);color:var(--text);font-family:var(--font-m);font-size:20px;text-align:center;padding:10px;letter-spacing:.3em;outline:none;box-sizing:border-box;margin-bottom:10px; }
.admin-pin-input:focus { border-color:var(--accent); }
.admin-pin-error { font-size:11px;color:var(--red);font-family:var(--font-m);min-height:16px;margin-bottom:8px; }

/* ── CREATE TEST SCREEN ──────────────────────────────────── */
.ct-section { background:var(--bg3);border-radius:var(--r);padding:10px 12px;margin-bottom:8px;border:1px solid var(--border2); }
.ct-section-title { font-size:10px;font-family:var(--font-m);font-weight:700;color:var(--text);letter-spacing:.05em;text-transform:uppercase;margin-bottom:8px; }
.ct-radio-group { display:flex;flex-direction:column;gap:6px; }
.ct-radio { display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:var(--r-sm);border:1px solid var(--border2);cursor:pointer;background:var(--bg4);transition:border-color .15s,background .15s;user-select:none; }
.ct-radio:hover { border-color:var(--accent); }
.ct-radio.active { border-color:var(--accent);background:var(--accent3); }
.ct-radio-dot { width:14px;height:14px;border-radius:50%;border:2px solid var(--border2);flex-shrink:0;position:relative;transition:border-color .15s; }
.ct-radio.active .ct-radio-dot { border-color:var(--accent); }
.ct-radio.active .ct-radio-dot::after { content:'';position:absolute;inset:2px;background:var(--accent);border-radius:50%; }
.ct-radio-label { font-size:12px;font-weight:600;color:var(--text); }
.ct-radio-sub { font-size:10px;color:var(--text3);font-family:var(--font-m); }
.ct-chip-group { display:flex;gap:6px;flex-wrap:wrap; }
.ct-chip { padding:7px 14px;border-radius:20px;border:1px solid var(--border2);background:var(--bg4);color:var(--text2);font-size:12px;font-family:var(--font-m);font-weight:600;cursor:pointer;transition:all .15s; }
.ct-chip:hover { border-color:var(--accent);color:var(--accent); }
.ct-chip.active { background:var(--accent);border-color:var(--accent);color:#fff; }
.ct-check-grid { display:grid;grid-template-columns:1fr 1fr;gap:6px; }
.ct-check { display:flex;align-items:flex-start;gap:8px;padding:9px 10px;border-radius:var(--r-sm);border:1px solid var(--border2);background:var(--bg4);cursor:pointer;transition:border-color .15s,background .15s;user-select:none; }
.ct-check:hover { border-color:var(--accent); }
.ct-check.active { border-color:var(--accent);background:var(--accent3); }
.ct-check-box { width:15px;height:15px;border-radius:3px;border:2px solid var(--border2);flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all .15s;font-size:9px;margin-top:1px; }
.ct-check.active .ct-check-box { background:var(--accent);border-color:var(--accent);color:#fff; }
.ct-check-label { font-size:11px;color:var(--text2);font-family:var(--font-m);font-weight:600;line-height:1.3; }
.ct-check-count { font-size:9px;color:var(--text3);font-family:var(--font-m);margin-top:1px; }
.ct-count-preset { padding:5px 12px;border-radius:12px;border:1px solid var(--border2);background:var(--bg4);color:var(--text2);font-size:11px;font-family:var(--font-m);cursor:pointer;transition:all .15s; }
.ct-count-preset:hover { border-color:var(--accent);color:var(--accent); }
.ct-avail-badge { font-size:10px;font-family:var(--font-m);font-weight:700;padding:3px 9px;border-radius:10px;background:var(--color-success-dim);color:var(--green); }
.ct-avail-badge.zero { background:var(--color-danger-dim);color:var(--red); }
.ct-link-btn { background:none;border:none;color:var(--accent);font-size:11px;font-family:var(--font-m);cursor:pointer;padding:0;font-weight:600; }
.ct-link-btn:hover { text-decoration:underline; }
.ct-preset-card { display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border-radius:var(--r-sm);border:1px solid var(--border2);background:var(--bg4);margin-bottom:6px; }
.ct-preset-name { font-size:12px;font-weight:600;color:var(--text);margin-bottom:2px; }
.ct-preset-meta { font-size:10px;color:var(--text3);font-family:var(--font-m); }

/* ── CT BOTTOM BAR (BUG FIX: only shows on create-test screen) */
.ct-bottom-bar {
  position:fixed;bottom:0;left:240px;right:0;
  background:var(--bg2);border-top:1px solid var(--border2);
  padding:10px 20px;
  display:none;          /* hidden by default — JS adds .ct-bar-visible */
  align-items:center;gap:12px;z-index:200;
}
.ct-bar-visible { display:flex !important; }
@media(max-width:960px) { .ct-bottom-bar { left:0;bottom:0;padding:10px 14px; } }

#screen-create-test { padding-bottom:80px;overflow-y:visible;width:100%;box-sizing:border-box; }
#ct-qmode-group,#ct-tmode-group { display:grid;gap:6px; }
#ct-qmode-group { grid-template-columns:1fr 1fr; }
#ct-tmode-group { grid-template-columns:repeat(3,1fr); }

@media (max-width:600px) {
  .mcq-app .screen.active { overflow-y:auto;-webkit-overflow-scrolling:touch; }
  #screen-create-test { padding-bottom:100px; }
  #screen-create-test .ct-section { padding:7px 9px;margin-bottom:5px; }
  #screen-create-test .ct-section-title { margin-bottom:5px;font-size:9px; }
  #screen-create-test .ct-radio { padding:6px 8px;gap:6px; }
  #screen-create-test .ct-radio-label { font-size:11px; }
  #screen-create-test .ct-radio-sub { font-size:9px;line-height:1.25; }
  #screen-create-test .ct-radio-dot { width:12px;height:12px; }
  #ct-qmode-group,#ct-tmode-group { gap:5px; }
  #ct-tmode-group { grid-template-columns:1fr 1fr; }
  #screen-create-test .ct-chip { padding:5px 10px;font-size:11px; }
  #screen-create-test .ct-check { padding:6px 8px; }
  #screen-create-test .sec { margin-top:8px;margin-bottom:6px; }
  .ct-bottom-bar { padding:7px 10px;gap:8px; }
}

.ct-dashboard-card { background:linear-gradient(135deg,var(--accent3),var(--color-accent-dim));border:1px solid var(--color-border-focus);border-radius:var(--r);padding:14px;cursor:pointer;transition:all .2s;margin-bottom:10px;display:flex;align-items:center;gap:12px; }
.ct-dashboard-card:hover { border-color:var(--accent);background:var(--accent3); }
.flag-row { display:flex;align-items:center;gap:8px;margin-bottom:10px; }
.flag-indicator { font-size:11px;padding:3px 10px;border-radius:20px;background:var(--amber-bg);color:var(--amber);font-weight:500;display:none; }
.flag-indicator.show { display:inline-block; }
.q-actions { display:flex;gap:7px;flex-wrap:wrap; }

/* ── SCRATCHPAD DRAWER ────────────────────────────────────────
   Bottom sheet, toggled via .open class (3D wires toggleScratchpad()).
   Position/background/padding set inline in index.html per Token
   System v1.0 — this just handles the slide transform + open state. */
.scratchpad-drawer {
  transform:translateY(100%);
  transition:transform var(--transition-normal);
}
.scratchpad-drawer.open {
  display:block !important;
  transform:translateY(0);
}
.scratchpad-textarea:focus { outline:none;border-color:var(--color-accent); }

/* ════════════════════════════════════════════════════════════
   MODE SELECTION OVERLAY — Sprint 4B
   Bottom sheet (mobile) / centred modal (≥768px).

   Closed state = opacity:0 + visibility:hidden + pointer-events:none
   (NOT display:none — display:none cannot transition). The inline
   style="display:none" in the 4A markup is the initial-paint guard
   only.

   CONTRACT for openModeSelect()/closeModeSelect() — Sprint 4C:
     open  → el.style.display = 'flex';
             requestAnimationFrame(() => el.classList.add('open'));
     close → el.classList.remove('open');
             setTimeout(() => el.style.display = 'none', 250);
             // 250ms matches --transition-normal
   ════════════════════════════════════════════════════════════ */
.mode-select-overlay {
  position:fixed;inset:0;z-index:1100;
  display:flex;align-items:flex-end;justify-content:center;
  background:rgba(0,0,0,0.6);
  backdrop-filter:blur(4px);
  opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity var(--transition-normal),visibility var(--transition-normal);
}
.mode-select-overlay.open {
  opacity:1;visibility:visible;pointer-events:auto;
}

.mode-select-sheet {
  width:100%;max-height:85vh;
  overflow-y:auto;-webkit-overflow-scrolling:touch;
  background:var(--color-bg-overlay);
  border:1px solid var(--color-border-default);
  border-radius:var(--r-lg) var(--r-lg) 0 0;
  padding:var(--space-4);
  box-shadow:0 -8px 32px rgba(0,0,0,0.4);
  transform:translateY(100%);
  transition:transform var(--transition-normal);
}
.mode-select-overlay.open .mode-select-sheet { transform:translateY(0); }

.mode-select-handle {
  width:36px;height:4px;
  background:var(--color-border-strong);
  border-radius:var(--r-pill);
  margin:0 auto var(--space-3);
}

.mode-select-header {
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:var(--space-3);
}
.mode-select-title {
  font-family:var(--font-display);font-size:var(--text-md);
  font-weight:var(--weight-semibold);color:var(--color-text-primary);
}
.mode-select-close {
  background:none;border:none;color:var(--color-text-tertiary);
  font-size:18px;line-height:1;cursor:pointer;padding:var(--space-1);
}

@media (min-width:768px) {
  .mode-select-overlay { align-items:center; }
  .mode-select-sheet {
    width:480px;max-width:calc(100% - var(--space-8));
    max-height:80vh;
    border-radius:var(--r-lg);
    box-shadow:0 24px 64px rgba(0,0,0,0.5);
    transform:translateY(16px) scale(0.98);
  }
  .mode-select-overlay.open .mode-select-sheet { transform:translateY(0) scale(1); }
  .mode-select-handle { display:none; }
}

/* ── MODE CARDS — 2-col grid: Tutor/Exam/Quick 10/Spaced Review ── */
.mode-card-grid {
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:var(--space-2);margin-bottom:var(--space-2);
}
.mode-card {
  position:relative;
  background:var(--color-bg-elevated);
  border:1px solid var(--color-border-default);
  border-radius:var(--r-md);
  padding:var(--space-3);
  min-height:88px;
  display:flex;flex-direction:column;
  cursor:pointer;
  transition:border-color var(--transition-fast),background var(--transition-fast);
}
.mode-card:hover, .mode-card:active {
  border-color:var(--color-accent);
  background:var(--color-accent-dim);
}
.mode-card-icon { font-size:20px;line-height:1;margin-bottom:var(--space-2); }
.mode-card-title {
  font-family:var(--font-body);font-size:var(--text-sm);
  font-weight:var(--weight-semibold);color:var(--color-text-primary);
  margin-bottom:var(--space-1);
}
.mode-card-desc {
  font-family:var(--font-mono);font-size:var(--text-xs);
  color:var(--color-text-tertiary);line-height:1.4;margin-top:auto;
}

/* Live stat badge — Spaced Review due count. Hidden via inline
   style when 0, per locked spec ("badge = signal, not decoration"). */
.mode-card-badge {
  position:absolute;top:var(--space-2);right:var(--space-2);
  font-family:var(--font-mono);font-size:9px;font-weight:var(--weight-semibold);
  padding:2px var(--space-2);border-radius:var(--r-pill);
}
.mode-card-badge.due {
  background:var(--color-warning-dim);
  color:var(--color-warning);
  border:1px solid var(--color-warning);
}

/* ── WEAK AREAS — full-width, live stat line needs horizontal room ── */
.mode-card-full {
  background:var(--color-bg-elevated);
  border:1px solid var(--color-border-default);
  border-radius:var(--r-md);
  padding:var(--space-3) var(--space-4);
  margin-bottom:var(--space-2);
  cursor:pointer;
  transition:border-color var(--transition-fast),background var(--transition-fast);
}
.mode-card-full:hover, .mode-card-full:active {
  border-color:var(--color-accent);
  background:var(--color-accent-dim);
}
.mode-card-full-top {
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:var(--space-1);
}
.mode-card-full-left { display:flex;align-items:center;gap:var(--space-2); }
.mode-card-full-icon { font-size:20px; }
.mode-card-full-title {
  font-family:var(--font-body);font-size:var(--text-sm);
  font-weight:var(--weight-semibold);color:var(--color-text-primary);
}
.mode-card-full-chevron { font-size:16px;color:var(--color-text-tertiary); }
.mode-card-full-desc {
  font-family:var(--font-mono);font-size:var(--text-xs);
  color:var(--color-text-tertiary);line-height:1.4;
}
.mode-card-full-stat {
  font-family:var(--font-mono);font-size:var(--text-xs);
  color:var(--color-warning);margin-top:var(--space-1);
}

/* ── DIVIDER — "or configure manually" ─────────────────────────── */
.mode-select-divider {
  display:flex;align-items:center;gap:var(--space-2);
  margin:var(--space-3) 0;
}
.mode-select-divider-line { flex:1;height:1px;background:var(--color-border-default); }
.mode-select-divider-label {
  font-family:var(--font-mono);font-size:9px;
  color:var(--color-text-tertiary);text-transform:uppercase;
  letter-spacing:0.08em;white-space:nowrap;
}

/* ── CUSTOM BLOCK — full-width, gold icon signals power-user path ── */
.mode-card-custom {
  background:var(--color-bg-elevated);
  border:1px solid var(--color-border-default);
  border-radius:var(--r-md);
  padding:var(--space-3) var(--space-4);
  margin-bottom:var(--space-2);
  display:flex;align-items:center;justify-content:space-between;
  cursor:pointer;
  transition:border-color var(--transition-fast),background var(--transition-fast);
}
.mode-card-custom:hover, .mode-card-custom:active {
  border-color:var(--color-accent);
  background:var(--color-accent-dim);
}
.mode-card-custom-left { display:flex;align-items:center;gap:var(--space-3); }
.mode-card-custom-icon { font-size:22px;color:var(--color-accent); }
.mode-card-custom-title {
  font-family:var(--font-body);font-size:var(--text-sm);
  font-weight:var(--weight-semibold);color:var(--color-text-primary);
  margin-bottom:2px;
}
.mode-card-custom-desc {
  font-family:var(--font-mono);font-size:var(--text-xs);
  color:var(--color-text-tertiary);
}
.mode-card-custom-chevron { font-size:18px;color:var(--color-text-tertiary);flex-shrink:0; }

/* ── RESULTS ─────────────────────────────────────────────── */
.result-ring-wrap { display:flex;justify-content:center;margin:16px 0; }
.result-ring { width:90px;height:90px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-direction:column;border:3px solid var(--accent);background:var(--accent-glow); }
.rp { font-family:var(--font-d);font-size:24px;font-weight:700;color:var(--accent); }
.rl { font-size:10px;color:var(--text2); }
.result-grid { display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-bottom:16px; }
.result-box { padding:10px;background:var(--bg3);border-radius:var(--r-sm);text-align:center;border:1px solid var(--border); }
.rn { font-family:var(--font-d);font-size:20px;font-weight:700; }
.rk { font-size:10px;color:var(--text2);margin-top:2px; }
.breakdown { display:flex;flex-direction:column;gap:5px;margin-bottom:16px; }
.bk-row { display:flex;align-items:center;gap:8px;padding:9px 12px;background:var(--bg3);border-radius:var(--r-sm);border:1px solid var(--border); }
.bk-num { font-family:var(--font-m);font-size:10px;color:var(--text3);width:20px;flex-shrink:0; }
.bk-text { flex:1;font-size:12px;color:var(--text2); }
.bk-badge { font-size:10px;padding:2px 7px;border-radius:4px;font-weight:600;flex-shrink:0; }
.bk-c { background:var(--green-bg);color:var(--green); }
.bk-w { background:var(--red-bg);color:var(--red); }
.bk-f { background:var(--amber-bg);color:var(--amber); }
.review-list { display:flex;flex-direction:column;gap:6px; }
.review-item { display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--r-sm);gap:10px; }
.review-q { font-size:12px;color:var(--text);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.due-now { background:var(--amber-bg);color:var(--amber);font-size:10px;padding:2px 7px;border-radius:4px;flex-shrink:0; }
.due-soon { background:var(--bg2);color:var(--text3);font-size:10px;padding:2px 7px;border-radius:4px;flex-shrink:0; }

/* ── CROSSOVER TOPICS (HIGH YIELD) ──────────────────────── */
.hy-paper-tabs { display:flex; gap:8px; margin-bottom:20px; }
.hy-paper-tab {
  flex:1; padding:14px 10px; border-radius:10px; border:2px solid var(--border);
  background:transparent; color:var(--text3); font-size:13px; font-weight:700;
  cursor:pointer; transition:all .2s; font-family:var(--font-d);
  display:flex; flex-direction:column; align-items:center; gap:4px;
}
.hy-paper-tab .tab-paper { font-size:18px; letter-spacing:-0.02em; }
.hy-paper-tab .tab-sub   { font-size:9px; font-family:var(--font-m); letter-spacing:0.06em; text-transform:uppercase; opacity:0.7; }
.hy-paper-tab .tab-count { font-size:11px; font-family:var(--font-m); }
.hy-paper-tab:hover      { border-color:var(--border2); color:var(--text2); background:var(--bg3); }
.hy-paper-tab.active-J   { border-color:#818cf8; background:rgba(129,140,248,0.1); color:#818cf8; }
.hy-paper-tab.active-K   { border-color:#3ecf8e; background:rgba(62,207,142,0.1); color:#3ecf8e; }
.hy-paper-tab.active-L   { border-color:#f59e0b; background:rgba(245,158,11,0.1); color:#f59e0b; }
.hy-concept-card { background:var(--bg2); border-radius:12px; border:1px solid var(--border); margin-bottom:12px; overflow:hidden; transition:border-color .2s; }
.hy-concept-card:hover { border-color:var(--border2); }
.hy-concept-header { display:flex; align-items:center; gap:12px; padding:14px 16px; cursor:pointer; border-bottom:1px solid transparent; transition:border-color .2s; }
.hy-concept-card.open .hy-concept-header { border-bottom-color:var(--border); }
.hy-concept-dot { width:10px; height:10px; border-radius:50%; flex-shrink:0; }
.hy-concept-label { font-size:13px; font-weight:700; color:var(--text); flex:1; }
.hy-concept-meta  { font-size:10px; color:var(--text3); font-family:var(--font-m); }
.hy-concept-status { font-size:10px; font-weight:600; padding:3px 10px; border-radius:20px; flex-shrink:0; }
.hy-concept-status.covered { background:var(--green-bg); color:var(--green); }
.hy-concept-status.pending { background:var(--amber-bg); color:var(--amber); }
.hy-concept-chevron { font-size:11px; color:var(--text3); transition:transform .2s; }
.hy-concept-card.open .hy-concept-chevron { transform:rotate(180deg); }
.hy-concept-body { display:none; padding:12px; }
.hy-concept-card.open .hy-concept-body { display:block; }
.hy-subject-block { background:var(--bg3); border:1px solid var(--border); border-radius:8px; margin-bottom:8px; overflow:hidden; }
.hy-subject-header { display:flex; align-items:center; gap:8px; padding:8px 12px; background:var(--bg3); border-bottom:1px solid var(--border); }
.hy-subject-dot { width:6px; height:6px; border-radius:50%; flex-shrink:0; }
.hy-subject-name { font-size:11px; font-weight:600; color:var(--text); flex:1; }
.hy-subject-tag  { font-size:9px; color:var(--text3); font-family:var(--font-m); }
.hy-topic-row { padding:10px 12px; border-bottom:1px solid var(--border); transition:background .15s; }
.hy-topic-row:last-child { border-bottom:none; }
.hy-topic-row:hover { background:rgba(255,255,255,0.02); }
.hy-topic-text  { font-size:11px; color:var(--text); line-height:1.6; margin-bottom:6px; }
.hy-topic-ch    { font-size:9px; color:var(--text3); font-family:var(--font-m); margin-bottom:8px; }
.hy-rev-row     { display:flex; align-items:center; gap:8px; }
.hy-rev-btn { width:26px; height:26px; border-radius:5px; cursor:pointer; border:1px solid var(--border2); background:var(--bg4); display:flex; align-items:center; justify-content:center; font-size:10px; font-family:var(--font-m); font-weight:700; color:var(--text3); transition:all .15s; }
.hy-rev-btn:hover { border-color:var(--accent); color:var(--accent); }
.hy-rev-btn.done  { border-color:transparent; color:white; }
.hy-rev-status    { font-size:10px; font-family:var(--font-m); }

/* ── SRS / SM-2 REVIEW ───────────────────────────────────── */
.srs-stats-grid { display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:16px; }
.srs-stat { background:var(--bg3);border:1px solid var(--border);border-radius:var(--r-sm);padding:12px;text-align:center; }
.srs-stat-val { font-family:var(--font-d);font-size:22px;font-weight:700;letter-spacing:-0.02em; }
.srs-stat-lbl { font-size:10px;color:var(--text3);margin-top:2px;font-family:var(--font-m); }
.srs-start-card { background:linear-gradient(135deg,var(--color-accent-dim),var(--color-accent-dim));border:1px solid var(--color-border-focus);border-radius:var(--r);padding:20px;margin-bottom:16px;display:flex;align-items:center;justify-content:space-between;gap:16px; }
.srs-start-info { flex:1; }
.srs-start-title { font-family:var(--font-d);font-size:16px;font-weight:700;margin-bottom:4px; }
.srs-start-sub { font-size:12px;color:var(--text2);line-height:1.5; }
.srs-queue-header { display:flex;align-items:center;justify-content:space-between;margin-bottom:10px; }
.srs-queue-title { font-family:var(--font-m);font-size:10px;text-transform:uppercase;letter-spacing:0.08em;color:var(--text3); }
.srs-filter-tabs { display:flex;gap:4px; }
.srs-filter-tab { font-size:10px;padding:3px 8px;border-radius:4px;border:1px solid var(--border2);background:transparent;color:var(--text3);cursor:pointer;font-family:var(--font-m);transition:all .15s; }
.srs-filter-tab.active { background:var(--accent3);color:var(--accent);border-color:var(--color-border-focus); }
.srs-card { background:var(--bg3);border:1px solid var(--border);border-radius:var(--r-sm);padding:12px 14px;display:grid;align-items:center;gap:8px;grid-template-columns:1fr auto auto auto;margin-bottom:6px;transition:border-color .15s; }
.srs-card:hover { border-color:var(--border2); }
.srs-card-stem { font-size:12px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.srs-card-sub { font-size:10px;color:var(--text3);margin-top:2px;font-family:var(--font-m); }
.srs-interval { font-family:var(--font-m);font-size:10px;color:var(--text3);white-space:nowrap; }
.srs-ef { font-family:var(--font-m);font-size:10px;color:var(--text3);white-space:nowrap; }
.srs-due-badge { font-size:10px;padding:3px 8px;border-radius:4px;white-space:nowrap;flex-shrink:0; }
.srs-due-badge.overdue { background:var(--red-bg);color:var(--red); }
.srs-due-badge.today   { background:var(--amber-bg);color:var(--amber); }
.srs-due-badge.soon    { background:var(--green-bg);color:var(--green); }
.srs-due-badge.later   { background:var(--bg2);color:var(--text3); }
.srs-empty { text-align:center;padding:40px 20px;color:var(--text3); }
.srs-mastered-bar { background:var(--green-bg);border:1px solid var(--color-success-dim);border-radius:var(--r-sm);padding:10px 14px;display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;font-size:12px; }
.srs-forecast { display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:16px; }
.srs-forecast-day { background:var(--bg3);border:1px solid var(--border);border-radius:5px;padding:6px 4px;text-align:center; }
.srs-forecast-label { font-size:9px;color:var(--text3);font-family:var(--font-m); }
.srs-forecast-count { font-family:var(--font-d);font-size:16px;font-weight:700;color:var(--accent);margin:2px 0; }
.srs-forecast-count.zero { color:var(--text3);font-size:13px; }
.srs-forecast-day.today-day { border-color:var(--accent);background:var(--accent3); }

/* ── KNOWLEDGE GAPS TABLE ────────────────────────────────── */
.gap-table { width:100%;border-collapse:collapse;font-size:12px;margin-bottom:16px; }
.gap-table th { font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.06em;color:var(--text3);padding:8px 10px;text-align:left;border-bottom:1px solid var(--border);background:var(--bg3); }
.gap-table td { padding:10px;border-bottom:1px solid var(--border);color:var(--text2);vertical-align:top;line-height:1.5; }
.gap-table tr:last-child td { border-bottom:none; }
.gap-table td:first-child { color:var(--text);font-weight:500;width:30%; }
.gap-table td:nth-child(2) { color:var(--red);width:30%; }
.gap-table td:nth-child(3) { width:40%; }

/* ── HEATMAP ─────────────────────────────────────────────── */
.heatmap { display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-bottom:16px; }
.hm-cell { padding:12px;border-radius:var(--r-sm);text-align:center;border:1px solid transparent; }
.hm-sub { font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;margin-bottom:3px; }
.hm-pct { font-family:var(--font-d);font-size:18px;font-weight:700; }
.hm-cnt { font-size:9px;margin-top:2px;opacity:0.7; }
.hm-green { background:var(--color-success-dim);border-color:var(--color-success-dim);color:var(--green); }
.hm-amber { background:var(--color-warning-dim);border-color:var(--color-warning-dim);color:var(--amber); }
.hm-red   { background:var(--color-danger-dim);border-color:var(--color-danger-dim);color:var(--red); }
.hm-gray  { background:var(--bg3);border-color:var(--border);color:var(--text3); }

/* ── ADD QUESTION FORM ───────────────────────────────────── */
.add-form { display:flex;flex-direction:column;gap:12px; }
.fg { display:flex;flex-direction:column;gap:5px; }
.fl { font-size:10px;text-transform:uppercase;letter-spacing:0.06em;color:var(--text3);font-weight:600; }
.fi,.fsel,.fta { background:var(--bg3);border:1px solid var(--border2);border-radius:var(--r-sm);color:var(--text);font-family:var(--font-b);font-size:13px;padding:9px 11px;transition:border .2s;outline:none;width:100%; }
.fi:focus,.fsel:focus,.fta:focus { border-color:var(--accent); }
.fta { resize:vertical;min-height:72px;line-height:1.6; }
.fsel option { background:var(--bg2); }
.opts-grid { display:grid;grid-template-columns:1fr 1fr;gap:7px; }
.correct-row { display:flex;gap:7px; }
.cb { flex:1;padding:8px;border-radius:var(--r-sm);border:1px solid var(--border2);background:var(--bg3);color:var(--text2);cursor:pointer;font-size:13px;font-weight:500;transition:all .2s; }
.cb.selected { border-color:var(--green);background:var(--green-bg);color:var(--green); }
.add-ok { background:var(--green-bg);border:1px solid var(--color-border-focus);border-radius:var(--r-sm);padding:10px;font-size:12px;color:var(--green);text-align:center;display:none; }
.add-ok.show { display:block; }
.bank-pills { display:flex;flex-wrap:wrap;gap:5px;margin-bottom:12px; }
.bank-pill { font-size:10px;padding:3px 9px;border-radius:20px;background:var(--bg3);border:1px solid var(--border2);color:var(--text2);font-family:var(--font-m); }
.bank-pill span { color:var(--accent); }
.divider { border:none;border-top:1px solid var(--border);margin:16px 0; }
.gap { height:8px; }
.gap-lg { height:16px; }
.empty { text-align:center;padding:40px 20px;color:var(--text3); }
.empty-icon { font-size:32px;margin-bottom:10px; }
.empty-title { font-family:var(--font-d);font-size:14px;font-weight:600;color:var(--text2);margin-bottom:5px; }
.empty-sub { font-size:11px;line-height:1.6; }
.toast { position:fixed;bottom:20px;right:20px;background:var(--bg2);border:1px solid var(--border2);border-radius:var(--r-sm);padding:10px 16px;font-size:12px;color:var(--text);z-index:999;transform:translateY(80px);opacity:0;transition:all .3s;max-width:280px; }
.toast.show { transform:translateY(0);opacity:1; }
.toast.success { border-color:var(--color-border-focus);background:var(--green-bg);color:var(--green); }
.toast.error { border-color:var(--color-border-focus);color:var(--red); }
.nav-dot { display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--amber);margin-left:3px;vertical-align:middle; }

/* ── Q TIMER ANIMATION ───────────────────────────────────── */
.q-timer.paused { color:var(--amber);animation:pulse-amber 1.5s ease-in-out infinite; }
@keyframes pulse-amber { 0%,100%{opacity:1}50%{opacity:0.4} }
#pause-btn.resuming { background:var(--amber-bg);color:var(--amber);border-color:var(--color-border-focus); }

/* ── PROMPT LIBRARY ──────────────────────────────────────── */
.prompt-paper-tabs { display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px; }
.prompt-paper-tab { padding:6px 14px;border-radius:20px;font-size:11px;font-family:var(--font-mono);font-weight:600;border:1px solid var(--border2);background:transparent;color:var(--text3);cursor:pointer;transition:all .15s;letter-spacing:.04em; }
.prompt-paper-tab.active { background:var(--accent3);color:var(--accent);border-color:var(--color-border-focus); }
.prompt-card { background:var(--bg3);border:1px solid var(--border);border-radius:10px;margin-bottom:10px;overflow:hidden;transition:border-color .15s; }
.prompt-card:hover { border-color:var(--border2); }
.prompt-card-header { display:flex;align-items:center;justify-content:space-between;padding:12px 14px;gap:10px; }
.prompt-subj-name { font-size:13px;font-weight:600;color:var(--text);flex:1; }
.prompt-subj-meta { font-size:10px;color:var(--text3);font-family:var(--font-mono); }
.prompt-copy-btn { padding:6px 14px;border-radius:6px;font-size:11px;font-family:var(--font-mono);font-weight:600;border:1px solid var(--color-border-focus);background:var(--accent3);color:var(--accent);cursor:pointer;transition:all .15s;white-space:nowrap;flex-shrink:0; }
.prompt-copy-btn:hover { background:var(--accent);color:#fff; }
.prompt-copy-btn.copied { background:var(--green-bg);color:var(--green);border-color:var(--color-border-focus); }
.prompt-preview { padding:0 14px 12px;font-size:10px;color:var(--text3);font-family:var(--font-mono);line-height:1.6;background:var(--bg2);border-top:1px solid var(--border);white-space:pre-wrap;word-break:break-word;display:none;padding-top:10px; }
.prompt-card.expanded .prompt-preview { display:block; }
.prompt-workflow { background:linear-gradient(135deg, var(--color-accent-dim), transparent);border:1px solid var(--color-accent-dim);border-radius:10px;padding:16px;margin-bottom:16px; }
.prompt-step { display:flex;align-items:flex-start;gap:10px;margin-bottom:10px; }
.prompt-step:last-child { margin-bottom:0; }
.prompt-step-num { width:22px;height:22px;border-radius:50%;background:var(--accent);color:#fff;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:var(--font-mono); }
.prompt-step-text { font-size:12px;color:var(--text2);line-height:1.5;padding-top:2px; }
.prompt-step-text strong { color:var(--text); }

/* ── POMODORO WIDGET ─────────────────────────────────────── */
.pomo-widget { margin:0 0 10px 0;padding:10px;background:var(--bg3);border:1px solid var(--border);border-radius:8px; }
.pomo-header { display:flex;justify-content:space-between;align-items:center;margin-bottom:8px; }
.pomo-label { font-family:var(--font-mono);font-size:9px;color:var(--text3);text-transform:uppercase;letter-spacing:0.06em; }
.pomo-mode-badge { font-family:var(--font-mono);font-size:9px;padding:2px 6px;border-radius:3px;background:var(--accent3);color:var(--accent); }
.pomo-mode-badge.break { background:var(--green-bg);color:var(--green); }
.pomo-mode-badge.long  { background:var(--purple-bg);color:var(--purple); }
.pomo-display { font-family:var(--font-mono);font-size:28px;font-weight:500;color:var(--text);text-align:center;letter-spacing:0.06em;margin:4px 0 8px;transition:color 0.3s; }
.pomo-display.running { color:var(--accent); }
.pomo-display.break   { color:var(--green); }
.pomo-display.alert   { color:var(--red); }
.pomo-track { height:3px;background:var(--bg4);border-radius:2px;overflow:hidden;margin-bottom:8px; }
.pomo-fill { height:100%;border-radius:2px;background:var(--accent);transition:width 1s linear,background 0.3s; }
.pomo-fill.break { background:var(--green); }
.pomo-controls { display:flex;gap:5px; }
.pomo-btn { flex:1;padding:5px 4px;border-radius:5px;border:1px solid var(--border2);background:var(--bg4);color:var(--text2);font-size:10px;font-family:var(--font-mono);cursor:pointer;transition:all 0.15s;letter-spacing:0.02em; }
.pomo-btn:hover  { background:var(--bg2);color:var(--text); }
.pomo-btn.start  { background:var(--accent3);color:var(--accent);border-color:var(--color-border-focus); }
.pomo-btn.start:hover { background:var(--accent);color:#fff; }
.pomo-btn.pause  { background:var(--amber-bg);color:var(--amber);border-color:var(--color-border-focus); }
.pomo-sessions   { font-family:var(--font-mono);font-size:9px;color:var(--text3);text-align:center;margin-top:5px; }

/* ── KEYBOARD SHORTCUT HINT ──────────────────────────────── */
.kbd-hint {
  position:fixed;bottom:20px;left:256px;
  background:var(--bg2);border:1px solid var(--border2);
  border-radius:6px;padding:6px 10px;
  font-family:var(--font-mono);font-size:10px;
  color:var(--text3);z-index:500;
  opacity:0;transition:opacity 0.3s;
  pointer-events:none;
}
.kbd-hint.show { opacity:1; }
kbd {
  background:var(--bg3);border:1px solid var(--border2);
  border-radius:3px;padding:1px 5px;
  font-family:var(--font-mono);font-size:9px;
  color:var(--text2);
}

/* ── FIREBASE AUTH GATE — Premium Redesign ───────────────── */
#auth-gate {
  display: none;
  position: fixed; inset: 0;
  background: #080b14;            /* fallback; canvas draws real bg */
  z-index: 9999;
  align-items: center; justify-content: center;
  flex-direction: column;
  font-family: var(--font-body);
  overflow: hidden;
}
#auth-gate.show { display: flex; }

/* Full-screen animated background canvas */
#auth-bg-canvas {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  display: block;
  pointer-events: none;
  z-index: 0;
}

/* Glassmorphism card */
.auth-card {
  position: relative;
  z-index: 1;
  background: rgba(16, 20, 34, 0.72);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(212, 175, 55, 0.3);
  border-radius: 20px;
  padding: 48px 40px;
  max-width: 400px; width: 90%;
  text-align: center;
  box-shadow:
    0 25px 60px rgba(0, 0, 0, 0.55),
    0 0 0 1px rgba(255,255,255,0.04) inset,
    0 1px 0 rgba(255,255,255,0.06) inset;
}

/* Logo wrap */
.auth-logo-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin-bottom: 0;
}

/* Logo image — lighten blend removes black background */
.auth-main-logo {
  width: 100%;
  max-width: 180px;
  height: auto;
  object-fit: contain;
  display: block;
  margin: 0 auto;
  mix-blend-mode: lighten;
  filter: drop-shadow(0 0 20px rgba(212, 175, 55, 0.32));
}

/* Tagline */
.auth-tagline {
  font-family: var(--font-display, 'Newsreader', Georgia, serif);
  font-size: 14px;
  font-weight: 400;
  font-style: italic;
  color: rgba(212, 175, 55, 0.85);
  letter-spacing: 0.5px;
  text-align: center;
  margin: 12px 0 0;
  line-height: 1.5;
}

/* Gold divider line */
.auth-divider {
  width: 48px;
  height: 1px;
  background: linear-gradient(90deg,
    transparent,
    rgba(212,175,55,0.5),
    transparent);
  margin: 28px auto;
}

/* Heading */
.auth-title {
  font-size: 22px;
  font-weight: 600;
  color: #ffffff;
  margin-bottom: 10px;
  letter-spacing: -0.01em;
}

/* Description */
.auth-desc {
  font-size: 13px;
  color: rgba(255,255,255,0.45);
  margin-bottom: 32px;
  line-height: 1.6;
  letter-spacing: 0.01em;
}

/* Google sign-in button */
.auth-google-btn {
  display: flex; align-items: center; justify-content: center;
  gap: 12px; width: 100%;
  height: 52px;
  padding: 0 20px;
  background: #ffffff;
  color: #1a1a1a;
  border: 1px solid transparent;
  border-radius: 12px;
  font-size: 15px; font-weight: 500;
  cursor: pointer;
  transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease;
  font-family: var(--font-body);
  box-shadow: 0 2px 16px rgba(0,0,0,0.3);
  position: relative;
  overflow: hidden;
}
.auth-google-btn::before {
  content: '';
  position: absolute; inset: 0;
  border-radius: 12px;
  background: linear-gradient(135deg, rgba(212,175,55,0.06), transparent);
  opacity: 0;
  transition: opacity 0.2s;
}
.auth-google-btn:hover {
  border-color: rgba(212, 175, 55, 0.5);
  box-shadow: 0 4px 24px rgba(0,0,0,0.35), 0 0 0 3px rgba(212,175,55,0.1);
  transform: translateY(-1px);
}
.auth-google-btn:hover::before { opacity: 1; }
.auth-google-btn:active { transform: translateY(0); box-shadow: 0 2px 8px rgba(0,0,0,0.3); }
.auth-google-btn svg { flex-shrink: 0; }

/* Status text (JS-controlled) */
.auth-status {
  margin-top: 18px;
  font-size: 11px;
  color: rgba(212, 175, 55, 0.6);
  font-family: var(--font-mono);
  min-height: 16px;
  letter-spacing: 0.05em;
}

/* Legacy unused selectors kept so no JS breaks */
.auth-logo { display: none; }
.auth-sub  { display: none; }

/* ════════════════════════════════════════════════════════════
   ONBOARDING SYSTEM — Welcome → Program → Year → University →
   Optional Profile → Display Name → Dashboard (+ Waitlist exit)
   Mirrors the auth-gate glassmorphism aesthetic exactly.
   ════════════════════════════════════════════════════════════ */
#onboarding-gate {
  display: none;
  position: fixed; inset: 0;
  background: #080b14;
  z-index: 9998; /* one below #auth-gate so sign-out mid-onboarding still surfaces auth-gate on top if both briefly show */
  align-items: center; justify-content: center;
  flex-direction: column;
  font-family: var(--font-body);
  overflow: hidden;
}
#onboarding-gate.show { display: flex; }

#ob-bg-canvas {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  display: block;
  pointer-events: none;
  z-index: 0;
}

/* Glassmorphism card — same recipe as .auth-card */
.ob-card {
  position: relative;
  z-index: 1;
  background: rgba(16, 20, 34, 0.72);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(212, 175, 55, 0.3);
  border-radius: 20px;
  padding: 44px 40px 40px;
  max-width: 440px; width: 90%;
  max-height: 88vh;
  overflow-y: auto;
  text-align: center;
  box-shadow:
    0 25px 60px rgba(0, 0, 0, 0.55),
    0 0 0 1px rgba(255,255,255,0.04) inset,
    0 1px 0 rgba(255,255,255,0.06) inset;
}

/* Back button */
.ob-back {
  position: absolute;
  top: 18px; left: 18px;
  width: 34px; height: 34px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(255,255,255,0.08);
  color: rgba(255,255,255,0.55);
  cursor: pointer;
  font-size: 15px;
  transition: all 0.15s ease;
  z-index: 2;
}
.ob-back:hover { background: rgba(212,175,55,0.12); border-color: rgba(212,175,55,0.4); color: var(--accent); }

/* Progress indicator */
.ob-progress { margin: 6px 0 28px; padding-top: 14px; }
.ob-progress-bar {
  width: 100%; height: 4px;
  background: rgba(255,255,255,0.08);
  border-radius: 100px;
  overflow: hidden;
}
.ob-progress-fill {
  height: 100%; width: 0%;
  background: linear-gradient(90deg, var(--accent2), var(--accent));
  border-radius: 100px;
  transition: width 0.4s cubic-bezier(0.4,0,0.2,1);
}
.ob-progress-label {
  margin-top: 8px;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(212, 175, 55, 0.6);
}

/* Screens — only .active is shown, with a soft fade/slide-in */
.ob-screen {
  display: none;
  flex-direction: column;
  align-items: center;
}
.ob-screen.active {
  display: flex;
  animation: obScreenIn 0.38s cubic-bezier(0.4,0,0.2,1);
}
@keyframes obScreenIn {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Welcome screen logo */
.ob-logo-wrap { margin-bottom: 4px; }
.ob-logo {
  width: 100%; max-width: 150px; height: auto;
  object-fit: contain; display: block; margin: 0 auto;
  mix-blend-mode: lighten;
  filter: drop-shadow(0 0 20px rgba(212, 175, 55, 0.32));
}

.ob-eyebrow {
  font-family: var(--font-mono);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: rgba(212, 175, 55, 0.65);
  margin-bottom: 10px;
}

.ob-h1 {
  font-family: var(--font-display);
  font-size: 26px;
  font-weight: 600;
  color: #ffffff;
  letter-spacing: -0.01em;
  margin: 4px 0 14px;
  line-height: 1.25;
}

.ob-h2 {
  font-family: var(--font-display);
  font-size: 21px;
  font-weight: 600;
  color: #ffffff;
  letter-spacing: -0.01em;
  margin: 0 0 24px;
  line-height: 1.3;
}

.ob-sub {
  font-size: 13.5px;
  color: rgba(255,255,255,0.5);
  line-height: 1.65;
  letter-spacing: 0.01em;
  margin: 0 0 28px;
  max-width: 320px;
}

.ob-optional-tag {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text3);
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: 100px;
  padding: 3px 9px;
  margin-left: 8px;
  vertical-align: middle;
}

.ob-label {
  display: block;
  width: 100%;
  text-align: left;
  font-family: var(--font-mono);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--text3);
  margin-bottom: 9px;
}

.ob-hint {
  font-size: 11.5px;
  color: rgba(255,255,255,0.4);
  margin: 12px 0 26px;
  line-height: 1.6;
}

/* Pill grid — Program / Year / Gender */
.ob-pill-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
  width: 100%;
  margin-bottom: 28px;
}
.ob-pill-grid-2 { grid-template-columns: repeat(2, 1fr); }
.ob-pill-grid-5 { grid-template-columns: repeat(5, 1fr); gap: 7px; }

.ob-pill {
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: 12px;
  color: rgba(255,255,255,0.65);
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  padding: 15px 10px;
  cursor: pointer;
  transition: all 0.18s ease;
  letter-spacing: 0.01em;
}
.ob-pill-grid-5 .ob-pill { padding: 13px 4px; font-size: 13px; }
.ob-pill:hover {
  border-color: rgba(212,175,55,0.45);
  background: rgba(212,175,55,0.06);
  color: #fff;
}
.ob-pill.selected {
  background: linear-gradient(135deg, var(--accent), var(--accent2));
  border-color: var(--accent);
  color: #1a1306;
  box-shadow: 0 4px 18px rgba(212,175,55,0.28);
}

/* Inputs / select — onboarding-scoped so global form styles stay untouched */
.ob-select, .ob-input {
  width: 100%;
  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: 11px;
  color: var(--text);
  font-family: var(--font-body);
  font-size: 14px;
  padding: 13px 14px;
  outline: none;
  transition: border-color 0.15s, box-shadow 0.15s;
  margin-bottom: 24px;
  -webkit-appearance: none;
  appearance: none;
}
.ob-select {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'><path d='M1 1l6 6 6-6' stroke='%23D4AF37' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  background-repeat: no-repeat;
  background-position: right 14px center;
  padding-right: 36px;
  text-align: left;
}
.ob-select option { background: #161a28; color: var(--text); }
.ob-input::placeholder { color: rgba(255,255,255,0.3); }
.ob-input:focus, .ob-select:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(212,175,55,0.12);
}
.ob-input-error { border-color: var(--color-danger) !important; }

/* Buttons */
.ob-btn-primary {
  width: 100%;
  background: linear-gradient(135deg, var(--accent), var(--accent2));
  color: #1a1306;
  border: none;
  border-radius: 12px;
  height: 50px;
  font-family: var(--font-body);
  font-size: 14.5px;
  font-weight: 700;
  letter-spacing: 0.01em;
  cursor: pointer;
  transition: all 0.18s ease;
  box-shadow: 0 6px 20px rgba(212,175,55,0.22);
}
.ob-btn-primary:hover:not(:disabled) { transform: translateY(-1px); box-shadow: 0 8px 26px rgba(212,175,55,0.32); }
.ob-btn-primary:active:not(:disabled) { transform: translateY(0); }
.ob-btn-primary:disabled {
  background: rgba(255,255,255,0.08);
  color: rgba(255,255,255,0.3);
  cursor: not-allowed;
  box-shadow: none;
}

.ob-btn-secondary {
  width: 100%;
  background: transparent;
  color: rgba(255,255,255,0.7);
  border: 1px solid rgba(255,255,255,0.16);
  border-radius: 12px;
  height: 48px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.18s ease;
  margin-top: 14px;
}
.ob-btn-secondary:hover { border-color: rgba(212,175,55,0.5); color: var(--accent); background: rgba(212,175,55,0.06); }

.ob-skip-link {
  display: block;
  width: 100%;
  background: none;
  border: none;
  color: rgba(255,255,255,0.4);
  font-family: var(--font-body);
  font-size: 12.5px;
  text-decoration: underline;
  text-decoration-color: transparent;
  cursor: pointer;
  margin-top: 14px;
  padding: 4px;
  transition: color 0.15s;
}
.ob-skip-link:hover { color: rgba(255,255,255,0.7); text-decoration-color: rgba(255,255,255,0.4); }

/* Waitlist — read-only chips for fields already collected earlier */
.ob-readonly-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: 10px;
  padding: 11px 14px;
  margin-bottom: 12px;
}
.ob-readonly-label {
  font-family: var(--font-mono);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--text3);
}
.ob-readonly-value {
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
}

.ob-success-icon {
  width: 56px; height: 56px;
  border-radius: 50%;
  background: rgba(76,195,138,0.12);
  color: var(--color-success);
  border: 1px solid rgba(76,195,138,0.35);
  display: flex; align-items: center; justify-content: center;
  font-size: 26px;
  margin: 4px auto 18px;
}

#ob-waitlist-form, #ob-waitlist-success {
  display: flex; flex-direction: column; align-items: center; width: 100%;
}

/* ── WELCOME MOMENT — full-screen 2s fade before Dashboard ───── */
#ob-welcome-moment {
  display: none;
  position: fixed; inset: 0;
  z-index: 10000;
  align-items: center; justify-content: center;
  background: radial-gradient(circle at 50% 38%, rgba(212,175,55,0.10), transparent 60%), #06080f;
  opacity: 0;
  transition: opacity 0.35s ease;
}
#ob-welcome-moment.show { opacity: 1; }
.ob-welcome-moment-inner { text-align: center; padding: 0 28px; }
.ob-welcome-moment-line1 {
  font-family: var(--font-display);
  font-size: 28px;
  font-weight: 600;
  color: #ffffff;
  letter-spacing: -0.01em;
  line-height: 1.4;
}
.ob-welcome-moment-line2 {
  font-family: var(--font-display);
  font-style: italic;
  font-size: 16px;
  color: rgba(212, 175, 55, 0.85);
  margin-top: 10px;
  letter-spacing: 0.01em;
}

/* ── ONBOARDING: Responsive ──────────────────────────────── */
@media (max-width: 480px) {
  .ob-card {
    padding: 36px 24px 32px;
    border-radius: 16px;
  }
  .ob-logo { max-width: 120px; }
  .ob-h1 { font-size: 22px; }
  .ob-h2 { font-size: 18px; }
  .ob-pill-grid-5 { gap: 5px; }
  .ob-pill-grid-5 .ob-pill { padding: 11px 2px; font-size: 12px; }
  .ob-welcome-moment-line1 { font-size: 21px; }
  .ob-welcome-moment-line2 { font-size: 14px; }
}

@media (max-width: 360px) {
  .ob-card { padding: 30px 18px 26px; }
  .ob-pill-grid-5 .ob-pill { font-size: 11px; padding: 10px 2px; }
}

/* ── FIREBASE SYNC BADGE (sidebar) ──────────────────────── */
#fb-sync-badge {
  display:flex;align-items:center;gap:6px;
  padding:6px 12px;margin:0 8px 8px;
  border-radius:6px;font-size:10px;
  font-family:var(--font-mono);
  background:var(--bg3);color:var(--text3);
  border:1px solid var(--border);
  cursor:default;transition:all .2s;
}
#fb-sync-badge.synced  { color:var(--green);border-color:var(--color-success-dim);background:var(--color-success-dim); }
#fb-sync-badge.syncing { color:var(--amber);border-color:var(--color-warning-dim);background:var(--color-warning-dim); }
#fb-sync-badge.error   { color:var(--red);border-color:var(--color-danger-dim);background:var(--color-danger-dim); }
/* ============================================================
   NOTES MODULE — styles to append to styles.css
   R3 · Dr. Abbas Command Center
   ============================================================ */

/* ── PAGE: NOTES ─────────────────────────────────────────── */
#page-notes {
  padding: 0;
  flex-direction: column;
  min-height: 100vh;
}

#page-notes.active {
  display: flex;
}
/* ── NOTES PAGE HEADER ───────────────────────────────────── */
.n-page-header {
  padding: 32px 40px 20px;
  border-bottom: 1px solid rgba(201,168,76,.18);
  background: #0d1829;
}
.n-page-header h1 {
  font-family: 'Playfair Display', serif;
  font-size: 22px; font-weight: 700;
  color: #fff; margin-bottom: 4px;
}
.n-page-header p {
  font-size: 12px; color: rgba(232,234,240,.5);
  font-family: var(--font-body);
}

/* ── SUBJECT GRID ────────────────────────────────────────── */
#n-grid-view { padding: 28px 40px; background: #0d1829; min-height: 100%; }

.n-paper-group { margin-bottom: 28px; }
.n-paper-label {
  font-family: var(--font-body);
  font-size: 10px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.1em;
  margin-bottom: 10px; color: #c9a84c;
}
.n-subj-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 10px;
}
.n-subj-card {
  background: #111e35;
  border: 1px solid rgba(201,168,76,.18);
  border-radius: 10px;
  padding: 18px 20px;
  cursor: pointer;
  transition: all 0.2s;
  position: relative;
  border-left: 3px solid var(--subj-color, #c9a84c);
  display: flex; flex-direction: column; gap: 3px;
}
.n-subj-card:hover {
  background: #1a2a44;
  border-color: rgba(201,168,76,.4);
  transform: translateY(-2px);
  box-shadow: 0 8px 30px rgba(0,0,0,.3);
}
.n-subj-name {
  font-size: 14px; font-weight: 700; color: #fff;
}
.n-subj-paper {
  font-size: 10px; color: rgba(232,234,240,.5);
  font-family: var(--font-body);
}
.n-subj-arrow {
  position: absolute; right: 14px; top: 50%;
  transform: translateY(-50%);
  font-size: 20px; color: #c9a84c; opacity: 0.6;
}
.n-subj-card:hover .n-subj-arrow { opacity: 1; }

/* ── VIEWER LAYOUT ───────────────────────────────────────── */
#n-viewer-view {
  display: none;
  flex-direction: row;
  height: 100vh;
  background: #f0f2f8;
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  z-index: 700;
}
#n-viewer-view.viewer-open {
  display: flex !important;
  pointer-events: all;
}

/* ── LOADING OVERLAY ─────────────────────────────────────── */
#n-loading {
  display: none;
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  z-index: 9999;
  background: rgba(0,0,0,.5);
  align-items: center;
  justify-content: center;
}

/* ── NOTES TOPBAR ────────────────────────────────────────── */
#n-topbar {
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 48px;
  background: #0d1829;
  display: flex; align-items: center; justify-content: space-between;
  justify-content: space-between;
  align-items: center;
  padding: 0 16px;
  padding: 0 20px;
  z-index: 601;
  border-bottom: 2px solid #c9a84c;
  flex-shrink: 0;
  pointer-events: none;
}

/* Re-enable clicks only on actual buttons inside topbar */
#n-topbar button,
#n-topbar a,
#n-topbar input {
  pointer-events: all;
}
.n-ntb-left { display: flex; align-items: center; gap: 12px; flex: 1; }
.n-ntb-title {
  font-size: 12px; font-weight: 700;
  color: #c9a84c; letter-spacing: 1px;
  text-transform: uppercase;
}
.n-ntb-btns { display: flex; gap: 6px; }
.n-ntb-btn {
  padding: 5px 11px; border-radius: 4px;
  font-size: 11px; font-weight: 600;
  cursor: pointer;
  border: 1px solid rgba(201,168,76,.4);
  background: rgba(255,255,255,.07);
  color: rgba(255,255,255,.85);
  transition: background .15s, color .15s;
  font-family: var(--font-body);
}
.n-ntb-btn:hover { background: #c9a84c; color: #0d1829; }

/* ── NOTES SIDEBAR ───────────────────────────────────────── */
#n-sidebar {
  width: 260px; min-width: 260px;
  background: #0d1829;
  border-right: 2px solid #c9a84c;
  display: flex; flex-direction: column;
  position: absolute;
  top: 48px; left: 0; bottom: 0;
  overflow: visible;
  z-index: 998;
  transition: transform 0.25s ease;
}

/* TOC hidden state */
#n-sidebar.toc-hidden {
  transform: translateX(-260px);
  pointer-events: none;
}

/* When TOC hidden, note area expands */
#n-viewer-view.toc-hidden #n-note-area {
  margin-left: 0 !important;
}

.n-sidebar-head {
  padding: 14px 16px 10px;
  border-bottom: 1px solid rgba(201,168,76,.3);
  flex-shrink: 0;
}
.n-back-btn {
  padding: 5px 14px; border-radius: 4px;
  font-size: 11px; font-weight: 700;
  cursor: pointer;
  border: 1px solid rgba(201,168,76,.5);
  background: rgba(201,168,76,.12);
  color: #c9a84c; letter-spacing: .5px;
  transition: all .2s;
  font-family: var(--font-body);
  margin-bottom: 10px;
  display: inline-block;
}
.n-back-btn:hover { background: #c9a84c; color: #0d1829; }

#n-sidebar-title {
  font-size: 11px; font-weight: 800;
  letter-spacing: 2px; text-transform: uppercase;
  color: #c9a84c; margin-bottom: 2px;
}
#n-sidebar-meta {
  font-size: 10px; color: rgba(255,255,255,.5);
  margin-top: 2px;
}

/* Search box */
#n-search {
  display: block;
  width: calc(100% - 24px);
  margin: 10px 12px 8px;
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(201,168,76,.4);
  border-radius: 5px;
  color: #fff; font-size: 12px;
  padding: 7px 10px; outline: none;
  transition: border .2s;
  flex-shrink: 0;
}
#n-search:focus { border-color: #c9a84c; background: rgba(255,255,255,.12); }
#n-search::placeholder { color: rgba(255,255,255,.35); }

/* TOC */
#n-toc {
  flex: 1; overflow-y: auto;
  padding: 4px 0 8px;
}
#n-toc::-webkit-scrollbar { width: 4px; }
#n-toc::-webkit-scrollbar-thumb { background: rgba(201,168,76,.35); border-radius: 2px; }

.n-toc-theme {
  font-size: 9px; font-weight: 700;
  letter-spacing: 2px; text-transform: uppercase;
  color: #c9a84c;
  padding: 10px 14px 4px;
  border-top: 1px solid rgba(201,168,76,.2);
  margin-top: 4px;
}
.n-toc-theme:first-child { border-top: none; margin-top: 0; }

.n-toc-item {
  display: flex; align-items: flex-start; gap: 6px;
  padding: 5px 14px 5px 12px;
  cursor: pointer;
  color: rgba(255,255,255,.7);
  font-size: 11px; line-height: 1.35;
  border-left: 2px solid transparent;
  transition: background .15s;
  text-decoration: none;
}
.n-toc-item:hover { background: rgba(255,255,255,.07); color: #fff; }
.n-toc-item.active {
  background: rgba(201,168,76,.15);
  border-left-color: #c9a84c;
  color: #c9a84c;
}
.n-toc-item.done { color: rgba(255,255,255,.5); }
.n-toc-num {
  font-size: 9px; font-weight: 700;
  color: #c9a84c; opacity: .7;
  flex-shrink: 0; padding-top: 1px;
  min-width: 28px;
}
.n-toc-title { flex: 1; }
.n-toc-item.active .n-toc-title { color: #c9a84c; }
.n-toc-check {
  flex-shrink: 0; font-size: 12px;
  color: #4caf50; opacity: 0;
  transition: opacity .2s;
}
.n-toc-item.done .n-toc-check { opacity: 1; }

/* Progress bar (bottom of sidebar) */
.n-progress-bar {
  flex-shrink: 0;
  padding: 10px 14px 12px;
  border-top: 1px solid rgba(201,168,76,.25);
  background: rgba(0,0,0,.15);
}
#n-progress-text {
  font-size: 9.5px; color: rgba(255,255,255,.5);
  display: flex; justify-content: space-between;
  margin-bottom: 5px;
}
.n-progress-track {
  height: 5px; background: rgba(255,255,255,.1);
  border-radius: 3px; overflow: hidden;
}
#n-progress-fill {
  height: 100%; border-radius: 3px;
  background: #c9a84c;
  transition: width .4s ease; width: 0%;
}

/* ── NOTE CONTENT AREA ───────────────────────────────────── */
#n-note-area {
  flex: 1;
  overflow-y: auto;
  padding: 20px 40px 60px;
  background: #f0f2f8;
  color: #1a1a2e;
  margin-left: 260px;
  margin-top: 48px;
  display: flex;
  flex-direction: column;
  transition: margin-left 0.25s ease;
}

/* When TOC is hidden, expand note area to full width */
#n-viewer-view.toc-hidden #n-note-area {
  margin-left: 0;
}

.n-note-wrapper { max-width: 980px; margin: 0 auto; }

/* Note actions bar */
.n-note-actions {
  padding: 8px 0 0;
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 8px;
}
.n-revised-btn {
  padding: 5px 14px; border-radius: 4px;
  font-size: 11px; font-weight: 700;
  cursor: pointer;
  border: 1px solid rgba(201,168,76,.5);
  background: rgba(201,168,76,.08);
  color: rgba(201,168,76,.9);
  letter-spacing: .5px;
  transition: all .2s;
  font-family: var(--font-body);
}
.n-revised-btn:hover { background: rgba(201,168,76,.2); }
.n-revised-btn.done { background: #1a4d2a; border-color: #4caf50; color: #81c784; }
.n-action-btn {
  padding: 5px 11px; border-radius: 4px;
  font-size: 11px; font-weight: 600;
  cursor: pointer;
  border: 1px solid rgba(201,168,76,.4);
  background: rgba(255,255,255,.07);
  color: rgba(255,255,255,.85);
  transition: all .15s;
  font-family: var(--font-body);
  background: rgba(13,24,41,.8);
  color: rgba(255,255,255,.7);
}
.n-action-btn:hover { background: #c9a84c; color: #0d1829; }

/* ── INLINE CONTENTEDITABLE EDITING ─────────────────── */
.n-note-content.n-editing {
  outline: 2px solid var(--amber);
  outline-offset: 4px;
  border-radius: var(--r);
  cursor: text;
}
.n-note-content.n-editing * { cursor: text; }
.n-inline-save-btn {
  background: var(--amber) !important;
  color: #0d1829 !important;
  font-weight: 700 !important;
  border-color: var(--amber) !important;
}
.n-inline-save-btn:hover { background: #e09520 !important; }
.n-inline-cancel-btn {
  border-color: var(--red) !important;
  color: var(--red) !important;
}
.n-inline-cancel-btn:hover {
  background: var(--red) !important;
  color: #fff !important;
}

/* ── TOC ADMIN: DRAG + RENAME ────────────────────────── */
.n-toc-item.n-toc-admin { gap: 4px; }

.n-toc-drag-handle {
  cursor: grab;
  color: var(--text3);
  font-size: 14px;
  padding: 0 2px;
  flex-shrink: 0;
  opacity: 0;
  transition: opacity .15s;
}
.n-toc-item.n-toc-admin:hover .n-toc-drag-handle { opacity: 1; }
.n-toc-item.n-toc-dragging { opacity: .4; }
.n-toc-item.n-toc-drag-over { border-top: 2px solid var(--amber); }

.n-toc-icons {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.n-toc-edit-icon {
  font-size: 11px;
  cursor: pointer;
  opacity: 0;
  transition: opacity .15s;
  flex-shrink: 0;
}
.n-toc-item.n-toc-admin:hover .n-toc-edit-icon { opacity: 1; }

.n-toc-rename-input {
  background: var(--bg4);
  border: 1px solid var(--amber);
  border-radius: var(--r-sm);
  color: var(--text);
  font-size: 12px;
  font-family: var(--font-b);
  padding: 2px 6px;
  width: 100%;
  outline: none;
}

/* Search highlight */
.n-sh {
  background: #ffe066;
  color: #000;
  border-radius: 2px;
  padding: 0 1px;
}

/* Loading overlay */
#n-loading {
  display: none;
  position: fixed; inset: 0; z-index: 800;
  background: rgba(10,12,16,0.75);
  align-items: center; justify-content: center;
  flex-direction: column; gap: 12px;
  backdrop-filter: blur(4px);
}
#n-loading span {
  font-family: var(--font-body);
  font-size: 11px; color: rgba(255,255,255,.6);
}

/* ── NOTE CARD STYLES (exact KMU dashboard match) ────────── */
.n-note-content {
  font-family: var(--font-body);
  font-size: var(--note-font-size, 16px);
}

/* The white note card */
.n-note-content.note,
.n-note-wrapper .note {
  background: #fff;
  max-width: 980px;
  margin: 30px auto;
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 3px 20px rgba(26,39,68,.12);
}

/* Navy note header */
.n-note-content .note-head,
.note-head {
  background: #0d1829 !important;
  padding: 26px 34px 22px !important;
  border-bottom: 3px solid #c9a84c !important;
  border-radius: 0 !important;
  margin-bottom: 0 !important;
}
.n-note-content .note-num,
.note-num {
  font-size: 10px !important;
  letter-spacing: 3px !important;
  text-transform: uppercase !important;
  color: #c9a84c !important;
  margin-bottom: 5px !important;
  font-family: var(--font-body) !important;
}
.n-note-content .note-title,
.note-title {
  font-size: 22px !important;
  font-weight: 700 !important;
  color: #fff !important;
  margin-bottom: 14px !important;
  line-height: 1.3 !important;
  font-family: 'Playfair Display', serif !important;
}

/* Learning objectives bar */
.lo-bar {
  background: rgba(255,255,255,.07);
  border-radius: 6px; padding: 10px 14px; margin-bottom: 12px;
}
.lo-label {
  font-size: 9px; letter-spacing: 2.5px;
  text-transform: uppercase; color: #c9a84c;
  display: block; margin-bottom: 5px;
}
.lo-text { color: rgba(255,255,255,.85); font-size: 12px; line-height: 1.7; }
.lo-text li { margin-bottom: 3px; list-style: none; padding-left: 14px; position: relative; }
.lo-text li::before { content: "→"; position: absolute; left: 0; color: #c9a84c; font-size: 10px; }

/* Badges */
.badges { display: flex; flex-wrap: wrap; gap: 6px; }
.badge {
  font-size: 10px; font-weight: 700;
  letter-spacing: 1.5px; text-transform: uppercase;
  padding: 3px 10px; border-radius: 3px; border: 1px solid;
}
.b-path { background: #fff5f5; color: #7b1c1c; border-color: #f5c0c0; }
.b-pha  { background: #f7f0ff; color: #3d0f6b; border-color: #ccaaf0; }
.b-surg { background: #f0faf5; color: #0d4025; border-color: #a8dcc0; }
.b-med  { background: #f0f5ff; color: #0f2d6b; border-color: #b8cef5; }
.b-com  { background: #f8faf0; color: #3d4d00; border-color: #ccd8a0; }
.b-for  { background: #fdf6f0; color: #6b3300; border-color: #e8c9a0; }
.b-ent  { background: #f0fafa; color: #0a4040; border-color: #9ed4d4; }
.b-subj { background: #f0f5ff; color: #0f2d6b; border-color: #b8cef5; }

/* Note body */
.n-note-content .note-body,
.note-body { padding: 30px 34px; }

/* Hook (clinical intro box) */
.hook {
  background: linear-gradient(135deg, #f0fafa, #e6f5f5);
  border-left: 4px solid #c9a84c;
  border-radius: 0 6px 6px 0;
  padding: 12px 16px; margin-bottom: 22px;
  font-size: 13px; color: #0a2a2a;
}
.hook strong { color: #0d1829; }

/* Section wrapper */
.n-note-content .section,
.section {
  margin-bottom: 28px;
  background: #fff;
}

/* Section title (collapsible header) */
.n-note-content .sec-title,
.sec-title {
  font-size: 10.5px !important;
  font-weight: 700 !important;
  letter-spacing: 2.5px !important;
  text-transform: uppercase !important;
  color: #fff !important;
  background: #0d1829 !important;
  padding: 6px 14px !important;
  display: inline-block !important;
  border-radius: 4px !important;
  margin-bottom: 13px !important;
  cursor: pointer !important;
  user-select: none !important;
}

/* Sub-titles */
.n-note-content .sub-title,
.n-note-content .sub-title-subj,
.sub-title, .sub-title-subj {
  font-size: 14px !important;
  font-weight: 700 !important;
  color: #0d1829 !important;
  border-left: 4px solid #c9a84c !important;
  padding-left: 10px !important;
  margin: 18px 0 9px !important;
  text-transform: none !important;
  letter-spacing: normal !important;
  font-family: var(--font-body) !important;
}
.sub-title-ent {
  color: #0a4040 !important; border-color: #9ed4d4 !important;
}

/* Tables */
.n-note-content table, table {
  width: 100%; border-collapse: collapse;
  margin-bottom: 12px; font-size: 13px;
}
.n-note-content thead tr, thead tr {
  background: #0d1829; color: #fff;
}
.n-note-content thead th, thead th {
  padding: 9px 12px; text-align: left;
  font-size: 11.5px; font-weight: 600;
  letter-spacing: .4px;
}
.n-note-content tbody tr:nth-child(even), tbody tr:nth-child(even) {
  background: #f5f7ff;
}
.n-note-content tbody tr:hover, tbody tr:hover { background: #eef0f8; }
.n-note-content td, td {
  padding: 8px 12px;
  border-bottom: 1px solid #dde1ec;
  vertical-align: top;
}
.n-note-content td:first-child, td:first-child {
  font-weight: 600; color: #0d1829; min-width: 150px;
}

/* Colored table headers */
.th-ent thead tr { background: #0a4040; }
.th-path thead tr { background: #7b1c1c; }
.th-surg thead tr { background: #0d4025; }
.th-pha thead tr { background: #3d0f6b; }

/* Lists */
.n-note-content ul, ul { list-style: none; margin: 4px 0 6px 4px; }
.n-note-content ul li, ul li {
  padding: 2px 0 2px 18px; position: relative;
  font-size: 13px; color: #1a1a2e; margin-bottom: 3px; line-height: 1.6;
}
.n-note-content ul li::before, ul li::before {
  content: "▸"; position: absolute; left: 0;
  color: #c9a84c; font-size: 10px; top: 4px;
}
.n-note-content ul li strong, ul li strong { color: #0d1829; }

/* Alert boxes */
.n-note-content .alert, .alert {
  padding: 11px 15px;
  border-left: 4px solid;
  border-radius: 0 5px 5px 0;
  margin: 10px 0; font-size: 13px;
}
.a-key  { border-color: #c9a84c; background: #fffbef; color: #5a4200; }
.a-trap { border-color: #c0392b; background: #fff5f5; color: #7b1818; }
.a-info { border-color: #0a4040; background: #f0fafa; color: #0a4040; }
.a-warn { border-color: #d35400; background: #fef9f0; color: #7a3000; }
.a-label {
  font-size: 9.5px; font-weight: 700;
  letter-spacing: 2px; text-transform: uppercase;
  display: block; margin-bottom: 3px;
}

/* High-yield box */
.n-note-content .hy, .hy {
  background: #0d1829 !important;
  border-radius: 8px !important;
  padding: 20px 24px !important;
  margin-top: 22px !important;
  border: none !important;
}
.hy-title {
  font-size: 10.5px; font-weight: 700;
  letter-spacing: 2.5px; text-transform: uppercase;
  color: #c9a84c; margin-bottom: 13px;
}
.hy ul li { color: rgba(255,255,255,.88) !important; font-size: 13px; }
.hy ul li::before { color: #c9a84c !important; }
.hy ul li strong { color: #f5d87e !important; }

/* Gold point box */
.n-note-content .gold-point, .gold-point {
  background: linear-gradient(135deg, #0d1829, #0a2a2a);
  border-radius: 8px; padding: 16px 22px;
  margin-top: 16px; border: 1px solid #c9a84c;
}
.gp-label {
  font-size: 9px; font-weight: 700;
  letter-spacing: 2.5px; text-transform: uppercase;
  color: #c9a84c; margin-bottom: 6px; display: block;
}
.gp-text { color: #fff; font-size: 13.5px; line-height: 1.6; font-weight: 500; }

/* Mnemonic */
.n-note-content .mnemonic, .mnemonic {
  background: linear-gradient(135deg, #fffdf0, #fff9e0) !important;
  border: 1px solid #e8cc6a !important;
  border-radius: 6px !important;
  padding: 12px 16px !important;
  margin: 10px 0 !important;
  color: #5a4200 !important;
}
.mnemonic-title {
  font-size: 10px; font-weight: 700;
  letter-spacing: 2px; text-transform: uppercase;
  color: #7a5a00; margin-bottom: 6px;
}

/* Hook */
.n-note-content .hook, .hook {
  background: linear-gradient(135deg, #f0fafa, #e6f5f5) !important;
  border-left: 4px solid #c9a84c !important;
  border-radius: 0 6px 6px 0 !important;
  color: #0a2a2a !important;
}

/* Theme divider banner */
.n-note-content .theme-div, .theme-div {
  background: linear-gradient(135deg, #0d1829 0%, #0a3030 100%) !important;
  max-width: 980px;
  margin: 40px auto 0 !important;
  border-radius: 10px 10px 0 0 !important;
  padding: 30px 34px !important;
  border-bottom: 4px solid #c9a84c !important;
  color: #c9a84c !important;
  font-family: var(--font-body) !important;
}
.theme-label {
  font-size: 10px; letter-spacing: 3px;
  text-transform: uppercase; color: #c9a84c; margin-bottom: 6px;
}
.theme-title { font-size: 30px; font-weight: 700; color: #fff; }
.theme-title span { color: #f5d87e; }
.theme-sub { font-size: 14px; color: rgba(255,255,255,.5); margin-top: 8px; }
.theme-meta { display: flex; gap: 20px; margin-top: 14px; flex-wrap: wrap; }
.theme-meta-item {
  background: rgba(255,255,255,.08);
  border-radius: 5px; padding: 6px 14px;
}
.theme-meta-item span {
  font-size: 10px; letter-spacing: 1.5px;
  text-transform: uppercase; color: #c9a84c;
  display: block; margin-bottom: 2px;
}
.theme-meta-item strong { color: #fff; font-size: 13px; }

/* Collapsible toggle arrow */
.ti { display: inline-block; margin-left: 7px; font-size: 12px; transition: transform .25s; }
.sec-content {
  max-height: 20000px; opacity: 1; overflow: hidden;
  transition: max-height 0.3s ease, opacity 0.25s;
  padding-top: 10px;
}
.sec-content.collapsed { max-height: 0 !important; opacity: 0; padding-top: 0; pointer-events: none; }
.sec-title.collapsed .ti { transform: rotate(-90deg); }

/* Divider line */
.divider {
  height: 2px;
  background: linear-gradient(to right, #c9a84c, transparent);
  margin: 8px 0 18px;
}

/* Two / three column grids */
.two-col   { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.three-col { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 14px; }
@media(max-width:700px) { .two-col, .three-col { grid-template-columns: 1fr; } }

/* Mini card (ENT/Eye) */
.mini-card { background: #f0fafa; border: 1px solid #9ed4d4; border-radius: 6px; padding: 12px 14px; }
.mini-card-title {
  font-size: 11px; font-weight: 700;
  letter-spacing: 1.5px; text-transform: uppercase;
  color: #0a4040; margin-bottom: 7px;
}

/* Search highlight */
.n-sh { background: #ffe066; color: #000; border-radius: 2px; padding: 0 1px; }
.n-sh.current { background: #ff9800; box-shadow: 0 0 0 2px #ff9800; }

/* ── DARK MODE (viewer) ──────────────────────────────────── */
body.dark #n-note-area { background: #0d1117; color: #e6edf3; }
body.dark .n-note-wrapper .note { background: #161b22; }
body.dark .note-head { background: #0d1f3c !important; }
body.dark thead tr { background: #0d1f3c !important; }
body.dark tbody tr:nth-child(even) { background: #1c2128; }
body.dark tbody tr:hover { background: #21262d; }
body.dark td { border-color: #30363d; }
body.dark td:first-child { color: #58a6ff; }
body.dark .sub-title, body.dark .sub-title-subj { color: #58a6ff !important; }
body.dark .a-key  { background: #2d2500 !important; color: #ffd54f !important; }
body.dark .a-trap { background: #2d0e0e !important; color: #ef9a9a !important; }
body.dark .a-info { background: #0d1f3c !important; color: #9ed4d4 !important; }
body.dark .a-warn { background: #2d1a00 !important; color: #ffb74d !important; }
body.dark .mnemonic { background: #2d2500 !important; border-color: #7a5a00 !important; }
body.dark .mnemonic-title { color: #ffd54f !important; }
body.dark .hook { background: #0d2a2a !important; color: #9ed4d4 !important; }
body.dark .hook strong { color: #c8d8f0 !important; }
body.dark .sec-title { background: #0d1f3c !important; }
body.dark .gold-point { background: linear-gradient(135deg,#0d1f3c,#0a2a2a) !important; }
body.dark .mini-card { background: #0d2a2a !important; border-color: #1a4040 !important; }
body.dark .n-revised-btn.done { background: #1a3d20 !important; }

/* ── LOADING ─────────────────────────────────────────────── */
#n-loading {
  display: none;
  position: fixed; inset: 0; z-index: 800;
  background: rgba(10,12,16,0.75);
  align-items: center; justify-content: center;
  flex-direction: column; gap: 12px;
  backdrop-filter: blur(4px);
}
#n-loading span { font-family: var(--font-body); font-size: 11px; color: rgba(255,255,255,.6); }

/* ── PRINT ───────────────────────────────────────────────── */
@media print {
  #n-sidebar, .n-note-actions, #n-loading { display: none !important; }
  #n-note-area { margin-left: 0 !important; margin-top: 0 !important; padding: 4px !important; }
  #n-viewer-view { height: auto !important; overflow: visible !important; display: block !important; }
  .sec-content { max-height: 20000px !important; opacity: 1 !important; padding-top: 10px !important; }
  .hy, .gold-point, .note-head, .theme-div, thead tr { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .note { page-break-inside: avoid; box-shadow: none; max-width: 100%; }
}

/* ── RESPONSIVE ──────────────────────────────────────────── */
@media (max-width: 900px) {
  #n-sidebar { width: 220px; min-width: 220px; }
  #n-note-area { margin-left: 220px; }
  #n-grid-view { padding: 16px 18px; }
  .n-subj-grid { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
}
@media (max-width: 640px) {
  #n-viewer-view { flex-direction: column; }
  #n-sidebar { display: none !important; }
  #n-note-area { margin-left: 0; margin-top: 0; padding: 14px; }
  #n-topbar { display: flex !important; position: fixed; top: 0; left: 0; right: 0; z-index: 900; }
}

/* ============================================================
   NEW DESIGN SYSTEM — Phase 2 additions
   ============================================================ */

/* ── PROGRESS RING (circular donut) ─────────────────────── */
.ring-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.ring-wrap svg { transform: rotate(-90deg); }
.ring-bg  { fill: none; stroke: var(--bg4); }
.ring-fill {
  fill: none;
  stroke: var(--accent);
  stroke-linecap: round;
  transition: stroke-dashoffset 0.8s cubic-bezier(0.4,0,0.2,1);
}
.ring-fill.green  { stroke: var(--green); }
.ring-fill.red    { stroke: var(--red); }
.ring-fill.purple { stroke: #A78BFA; }
.ring-center {
  position: absolute;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}
.ring-pct {
  font-family: var(--font-d);
  font-size: 22px;
  font-weight: 800;
  color: var(--text);
  line-height: 1;
}
.ring-label {
  font-size: 9px;
  color: var(--text3);
  font-family: var(--font-m);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-top: 2px;
}

/* ── STAT PILL ROW ───────────────────────────────────────── */
.stat-pill-row {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
  margin-bottom: 20px;
}
.stat-pill {
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 16px 14px;
  position: relative;
  overflow: hidden;
}
.stat-pill::after {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: var(--accent);
  border-radius: 10px 10px 0 0;
}
.stat-pill.green::after { background: var(--green); }
.stat-pill.red::after   { background: var(--red); }
.stat-pill.purple::after { background: #A78BFA; }
.stat-pill-label {
  font-size: 10px;
  color: var(--text3);
  font-family: var(--font-m);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: 8px;
}
.stat-pill-value {
  font-family: var(--font-d);
  font-size: 28px;
  font-weight: 800;
  color: var(--text);
  letter-spacing: -0.03em;
  line-height: 1;
}
.stat-pill-sub {
  font-size: 11px;
  color: var(--text2);
  margin-top: 5px;
}
@media (max-width: 700px) {
  .stat-pill-row { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 400px) {
  .stat-pill-row { grid-template-columns: 1fr; }
}

/* ── SUBJECT PROGRESS ROW ────────────────────────────────── */
.subj-progress-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.subj-progress-row:last-child { border-bottom: none; }
.subj-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}
.subj-name {
  flex: 1;
  font-size: 12px;
  color: var(--text);
  font-weight: 500;
}
.subj-bar-wrap {
  width: 100px;
  height: 5px;
  background: var(--bg4);
  border-radius: 3px;
  overflow: hidden;
  flex-shrink: 0;
}
.subj-bar-fill {
  height: 100%;
  border-radius: 3px;
  background: var(--accent);
  transition: width 0.6s ease;
}
.subj-pct {
  font-size: 11px;
  font-weight: 700;
  font-family: var(--font-m);
  color: var(--accent);
  min-width: 35px;
  text-align: right;
  flex-shrink: 0;
}

/* ── COUNTDOWN TIMER BOX ─────────────────────────────────── */
.countdown-box {
  display: flex;
  gap: 6px;
  align-items: center;
  justify-content: center;
  background: var(--bg3);
  border: 1px solid var(--border2);
  border-radius: 10px;
  padding: 16px;
}
.cd-unit {
  text-align: center;
  min-width: 52px;
  background: var(--bg4);
  border-radius: 8px;
  padding: 10px 8px;
}
.cd-num {
  font-family: var(--font-d);
  font-size: 28px;
  font-weight: 800;
  color: var(--accent);
  line-height: 1;
}
.cd-label {
  font-size: 9px;
  color: var(--text3);
  font-family: var(--font-m);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-top: 4px;
}
.cd-sep {
  font-family: var(--font-d);
  font-size: 22px;
  color: var(--text3);
  margin-bottom: 10px;
}

/* ── ACHIEVEMENT BADGE ───────────────────────────────────── */
.achievement-grid {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}
.achievement-badge {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px 14px;
  min-width: 80px;
  transition: border-color 0.2s;
}
.achievement-badge:hover { border-color: var(--accent); }
.achievement-icon { font-size: 24px; }
.achievement-name {
  font-size: 9px;
  color: var(--text3);
  font-family: var(--font-m);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  text-align: center;
}
.achievement-badge.earned { border-color: rgba(201,168,76,0.4); background: rgba(201,168,76,0.06); }
.achievement-badge.earned .achievement-icon { filter: none; }
.achievement-badge:not(.earned) { opacity: 0.35; }

/* ── MOBILE BOTTOM NAV ───────────────────────────────────── */
#mobile-bottom-nav {
  display: none;
  position: fixed;
  bottom: 0; left: 0; right: 0;
  background: var(--bg2);
  border-top: 1px solid var(--border);
  z-index: 300;
  padding: 6px 0 env(safe-area-inset-bottom, 6px);
}
.mbn-inner {
  display: flex;
  align-items: center;
  justify-content: space-around;
  width: 100%;
  margin: 0 auto;
  overflow: hidden;
}
.mbn-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 5px 4px;
  cursor: pointer;
  border: none;
  background: none;
  color: var(--text3);
  font-size: 8px;
  font-family: var(--font-m);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  transition: color 0.15s;
  flex: 1;
  min-width: 0;
  overflow: hidden;
}
.mbn-item.active { color: var(--accent); }
.mbn-icon { font-size: 18px; line-height: 1; }

@media (max-width: 768px) {
  #mobile-bottom-nav { display: block; }
  #main { padding-bottom: 70px; overflow-x: hidden; }
  .page { overflow-x: hidden; max-width: 100vw; }
}
@media (min-width: 769px) {
  #mobile-bottom-nav { display: none !important; }
}

/* ── SETTINGS TOGGLE ─────────────────────────────────────── */
.setting-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 0;
  border-bottom: 1px solid var(--border);
}
.setting-row:last-child { border-bottom: none; }
.setting-info { flex: 1; }
.setting-name { font-size: 13px; color: var(--text); font-weight: 500; }
.setting-desc { font-size: 11px; color: var(--text3); margin-top: 2px; }
.toggle-wrap {
  width: 44px; height: 24px;
  background: var(--bg4);
  border-radius: 12px;
  border: 1px solid var(--border2);
  cursor: pointer;
  position: relative;
  transition: background 0.2s;
  flex-shrink: 0;
}
.toggle-wrap.on { background: var(--accent); border-color: var(--accent); }
.toggle-knob {
  position: absolute;
  top: 2px; left: 2px;
  width: 18px; height: 18px;
  background: #fff;
  border-radius: 50%;
  transition: left 0.2s;
}
.toggle-wrap.on .toggle-knob { left: 22px; }

/* ── CALENDAR (Planner) ──────────────────────────────────── */
.cal-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 3px;
  margin-bottom: 12px;
}
.cal-day-header {
  text-align: center;
  font-size: 9px;
  color: var(--text3);
  font-family: var(--font-m);
  text-transform: uppercase;
  padding: 4px 0 6px;
}
.cal-day {
  text-align: center;
  padding: 6px 4px;
  border-radius: 6px;
  font-size: 12px;
  font-family: var(--font-m);
  color: var(--text2);
  cursor: pointer;
  transition: all 0.15s;
  aspect-ratio: 1;
  display: flex;
  align-items: center;
  justify-content: center;
}
.cal-day:hover { background: var(--bg3); color: var(--text); }
.cal-day.today { background: var(--accent); color: #000; font-weight: 700; }
.cal-day.has-task { position: relative; }
.cal-day.has-task::after {
  content: '';
  position: absolute;
  bottom: 3px;
  width: 4px; height: 4px;
  background: var(--green);
  border-radius: 50%;
}
.cal-day.empty { color: var(--text3); opacity: 0.3; cursor: default; }

/* ── RECALL CARD STAGES ──────────────────────────────────── */
.recall-stages {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  margin-bottom: 16px;
}
.recall-stage {
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 12px 10px;
  text-align: center;
}
.rs-icon { font-size: 20px; margin-bottom: 5px; }
.rs-count {
  font-family: var(--font-d);
  font-size: 20px;
  font-weight: 700;
  color: var(--text);
  line-height: 1;
}
.rs-label {
  font-size: 10px;
  color: var(--text3);
  font-family: var(--font-m);
  margin-top: 3px;
}
.rs-learning  { border-color: var(--color-border-focus); }
.rs-young     { border-color: var(--color-border-focus); }
.rs-mature    { border-color: var(--color-border-focus); }
.rs-mastered  { border-color: rgba(167,139,250,0.3); }

/* ── COVERAGE BAR CARD ───────────────────────────────────── */
.coverage-subject-card {
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 12px 14px;
  margin-bottom: 8px;
}
.csc-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}
.csc-name { font-size: 13px; font-weight: 600; color: var(--text); }
.csc-pct  { font-size: 12px; font-weight: 700; font-family: var(--font-m); color: var(--accent); }
.csc-bar {
  height: 6px;
  background: var(--bg4);
  border-radius: 3px;
  overflow: hidden;
}
.csc-fill {
  height: 100%;
  border-radius: 3px;
  background: var(--accent);
  transition: width 0.6s ease;
}
.csc-fill.green  { background: var(--green); }
.csc-fill.amber  { background: var(--amber); }
.csc-fill.red    { background: var(--red); }

/* ── UPCOMING TEST CARD ──────────────────────────────────── */
.upcoming-test-card {
  background: linear-gradient(135deg, rgba(201,168,76,0.08), rgba(201,168,76,0.02));
  border: 1px solid rgba(201,168,76,0.3);
  border-radius: 12px;
  padding: 20px;
  margin-bottom: 16px;
}
.utc-label {
  font-size: 10px;
  color: var(--accent);
  font-family: var(--font-m);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 8px;
}
.utc-name {
  font-family: var(--font-d);
  font-size: 20px;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 4px;
}
.utc-date { font-size: 12px; color: var(--text3); margin-bottom: 16px; }

/* ── PLAN TASK ROW (Planner) ─────────────────────────────── */
.plan-task {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 14px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 8px;
  margin-bottom: 6px;
  transition: border-color 0.15s;
}
.plan-task:hover { border-color: var(--border2); }
.plan-task-subject {
  width: 4px;
  height: 36px;
  border-radius: 2px;
  flex-shrink: 0;
}
.plan-task-name { flex: 1; font-size: 13px; color: var(--text); font-weight: 500; }
.plan-task-time {
  font-size: 11px;
  color: var(--text3);
  font-family: var(--font-m);
  flex-shrink: 0;
}
.plan-task-btn {
  padding: 4px 12px;
  border-radius: 5px;
  font-size: 11px;
  font-family: var(--font-m);
  border: 1px solid var(--border2);
  background: var(--accent3);
  color: var(--accent);
  cursor: pointer;
  transition: all 0.15s;
  flex-shrink: 0;
}
.plan-task-btn:hover { background: var(--accent); color: #000; }

/* ── PROFILE INSIGHT ROW ─────────────────────────────────── */
.insight-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.insight-row:last-child { border-bottom: none; }
.insight-label { font-size: 12px; color: var(--text2); }
.insight-value { font-size: 13px; font-weight: 700; font-family: var(--font-m); color: var(--text); }

/* ── ACTIVITY SPARKLINE ──────────────────────────────────── */
.sparkline-row {
  display: flex;
  align-items: flex-end;
  gap: 3px;
  height: 40px;
  margin-bottom: 6px;
}
.spark-bar {
  flex: 1;
  border-radius: 2px 2px 0 0;
  background: var(--accent);
  opacity: 0.5;
  min-height: 3px;
  transition: all 0.3s;
}
.spark-bar:hover { opacity: 1; }
.sparkline-labels {
  display: flex;
  justify-content: space-between;
  font-size: 9px;
  color: var(--text3);
  font-family: var(--font-m);
}
@media (max-width: 768px) {
  #n-viewer-view {
    flex-direction: column;
    left: 0 !important;
  }
  #n-note-area {
    margin-left: 0 !important;
    width: 100% !important;
    max-width: 100vw !important;
    padding-top: 48px;
    overflow-x: hidden;
    box-sizing: border-box;
  }
  #n-viewer-view #n-sidebar {
    display: none !important;
  }
  #n-topbar {
    display: flex !important;
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 900;
  }
  .n-note-content {
    overflow-x: hidden !important;
    word-break: break-word !important;
    max-width: 100% !important;
    padding: 12px 16px !important;
    box-sizing: border-box !important;
  }
  .n-note-content table {
    display: block;
    overflow-x: auto;
    max-width: 100%;
    font-size: 11px;
  }
  .n-note-content * {
    max-width: 100% !important;
    box-sizing: border-box !important;
  }
}
/* ============================================================
   ANNOTATION SYSTEM — P1/P2/P3/P4
   ============================================================ */

/* ── TOPBAR ANNOTATION BUTTONS ──────────────────────────── */
.n-ntb-divider {
  width: 1px;
  height: 16px;
  background: rgba(201,168,76,.25);
  margin: 0 4px;
  align-self: center;
}

.n-ntb-ann {
  font-size: 10px !important;
  padding: 4px 10px !important;
  opacity: .75;
  transition: all .15s;
}

/* Block-level highlights for cross-element selections */
.ann-block-hl { border-radius: 3px; cursor: pointer; }
.ann-block-hl.red    { border-left: 4px solid #ef4444 !important; background: rgba(239,68,68,0.12) !important; }
.ann-block-hl.yellow { border-left: 4px solid #eab308 !important; background: rgba(234,179,8,0.12)  !important; }
.ann-block-hl.green  { border-left: 4px solid #22c55e !important; background: rgba(34,197,94,0.12)  !important; }

@media (min-width: 769px) {
  #fab-highlight-btn,
  #fab-note-btn,
  #fab-flag-btn {
    display: none !important;
  }
}

.n-ntb-ann:hover {
  opacity: 1;
  background: rgba(201,168,76,.15) !important;
  border-color: rgba(201,168,76,.4) !important;
  color: #c9a84c !important;
}

.n-ntb-ann.active {
  background: var(--color-warning-dim) !important;
  border-color: var(--color-warning) !important;
  color: var(--color-warning) !important;
  opacity: 1;
}


/* ── ANNOTATION POPUP (near selection) ───────────────────── */
#n-ann-popup {
  position: fixed;
  z-index: 1080;
  background: #0d1829;
  border: 1px solid rgba(201,168,76,.4);
  border-radius: 8px;
  padding: 6px 8px;
  display: flex;
  gap: 4px;
  box-shadow: 0 4px 20px rgba(0,0,0,.6);
  pointer-events: all;
  max-width: calc(100vw - 16px);
  flex-wrap: wrap;
}

.n-ann-btn {
  width: 44px;
  height: 44px;
  border-radius: 8px;
  border: 1px solid rgba(255,255,255,.1);
  background: rgba(255,255,255,.05);
  cursor: pointer;
  font-size: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all .15s;
  touch-action: manipulation;
}

.n-ann-btn:hover { background: rgba(255,255,255,.12); transform: scale(1.1); }
.ann-close { font-size: 13px; color: rgba(255,255,255,.4); }
.ann-close:hover { color: var(--color-danger); background: var(--color-danger-dim); }

/* Optimistic "saving…" state — subtle pulse so it's clear it's not final yet,
   without blocking the student from reading the highlighted text */
.ann-pending { animation: ann-pending-pulse 1s ease-in-out infinite; cursor: wait; }
@keyframes ann-pending-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .55; } }

@media (max-width: 480px) {
  .n-ann-btn { width: 48px; height: 48px; font-size: 18px; }
  #n-ann-popup { gap: 6px; padding: 8px; }
}

/* ── STICKY NOTE MODAL ────────────────────────────────────── */
#n-note-modal {
  position: fixed;
  inset: 0;
  z-index: 1090;
  background: rgba(0,0,0,.6);
  backdrop-filter: blur(4px);
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: all;
}

#n-note-modal-box {
  background: #111e35;
  border: 1px solid rgba(201,168,76,.35);
  border-radius: 12px;
  padding: 24px;
  width: 440px;
  max-width: 90vw;
  box-shadow: 0 16px 48px rgba(0,0,0,.6);
}

#n-note-modal-title {
  font-size: 13px;
  font-weight: 800;
  color: #c9a84c;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  margin-bottom: 12px;
  font-family: var(--font-body);
}

#n-note-modal-anchor {
  font-size: 11px;
  color: rgba(232,234,240,.5);
  font-style: italic;
  margin-bottom: 14px;
  padding: 8px 12px;
  background: rgba(255,255,255,.04);
  border-radius: 6px;
  border-left: 3px solid rgba(201,168,76,.4);
  font-family: var(--font-body);
  max-height: 60px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#n-note-modal-input {
  width: 100%;
  min-height: 100px;
  background: rgba(255,255,255,.05);
  border: 1px solid rgba(201,168,76,.3);
  border-radius: 8px;
  padding: 10px 12px;
  color: var(--color-text-primary);
  font-size: 13px;
  font-family: var(--font-body);
  resize: vertical;
  outline: none;
  box-sizing: border-box;
  transition: border-color .2s;
}

#n-note-modal-input:focus {
  border-color: rgba(201,168,76,.7);
}

#n-note-modal-btns {
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  margin-top: 14px;
}

.n-modal-cancel {
  padding: 8px 18px;
  border-radius: 6px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid rgba(255,255,255,.15);
  background: transparent;
  color: rgba(232,234,240,.6);
  font-family: var(--font-body);
  transition: all .15s;
}

.n-modal-cancel:hover { background: rgba(255,255,255,.07); color: var(--color-text-primary); }

.n-modal-save {
  padding: 8px 18px;
  border-radius: 6px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
  border: 1px solid #c9a84c;
  background: rgba(201,168,76,.15);
  color: #c9a84c;
  font-family: var(--font-body);
  transition: all .15s;
}

.n-modal-save:hover { background: #c9a84c; color: #0d1829; }

/* ── ANNOTATION HIGHLIGHTS (applied over note content) ───── */
.ann-hl {
  border-radius: 2px;
  padding: 1px 2px;
  cursor: pointer;
  transition: opacity .15s;
  position: relative;
}

.ann-hl:hover { opacity: .75; }

.ann-hl.red    { background: var(--color-danger);   border-bottom: 2px solid var(--color-danger); color: var(--color-bg-base); }
.ann-hl.yellow { background: var(--color-warning);  border-bottom: 2px solid var(--color-warning); color: var(--color-bg-base); }
.ann-hl.green  { background: var(--color-success);  border-bottom: 2px solid var(--color-success); color: var(--color-bg-base); }

/* 🚩 Flag — distinct from highlight colors, uses the accent gold so it
   reads as "marked for review" rather than "important content" */
.ann-flag {
  background: transparent;
  border-bottom: 2px dashed var(--color-accent);
  color: inherit;
  cursor: pointer;
  position: relative;
  padding-right: 2px;
}
.ann-flag::after {
  content: '🚩';
  font-size: .75em;
  margin-left: 2px;
  vertical-align: super;
}
.ann-flag:hover { background: var(--color-accent-dim); }

/* ── STICKY NOTE ICON (inline beside anchored text) ──────── */
.ann-sticky-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  background: var(--color-warning);
  border-radius: 3px;
  font-size: 9px;
  cursor: pointer;
  margin-left: 3px;
  vertical-align: middle;
  transition: transform .15s;
  position: relative;
}

.ann-sticky-icon:hover { transform: scale(1.2); }

/* ── FLAG MARKER ─────────────────────────────────────────── */
.ann-flag-mark {
  display: inline-flex;
  align-items: center;
  font-size: 11px;
  margin-left: 3px;
  cursor: pointer;
  vertical-align: middle;
  opacity: .8;
  transition: opacity .15s;
}

.ann-flag-mark:hover { opacity: 1; }

/* ── HIGH-YIELD MODE ─────────────────────────────────────── */
/* Only filters a note's content if that note ACTUALLY contains at
/* High-Yield Mode removed for this version — revisit in a future release */

/* ── ADMIN PANEL ─────────────────────────────────────────── */
#n-admin-modal,
#n-admin-add-modal {
  position: fixed;
  inset: 0;
  z-index: 1100;
  background: rgba(0,0,0,.7);
  backdrop-filter: blur(6px);
  display: none;
  align-items: center;
  justify-content: center;
  pointer-events: all;
}

#n-admin-modal.open,
#n-admin-add-modal.open {
  display: flex;
}

#n-admin-modal-box {
  background: #111e35;
  border: 1px solid rgba(201,168,76,.4);
  border-radius: 14px;
  width: 820px;
  max-width: 95vw;
  max-height: 90vh;
  display: flex;
  flex-direction: column;
  box-shadow: 0 24px 64px rgba(0,0,0,.7);
  overflow: hidden;
}

#n-admin-add-box {
  background: #111e35;
  border: 1px solid rgba(201,168,76,.4);
  border-radius: 14px;
  width: 460px;
  max-width: 95vw;
  padding: 28px;
  box-shadow: 0 24px 64px rgba(0,0,0,.7);
}

#n-admin-modal-header {
  padding: 18px 24px 14px;
  border-bottom: 1px solid rgba(201,168,76,.2);
  flex-shrink: 0;
}

#n-admin-modal-title {
  font-size: 13px;
  font-weight: 800;
  color: #c9a84c;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  font-family: var(--font-body);
}

#n-admin-modal-meta {
  font-size: 11px;
  color: rgba(232,234,240,.5);
  margin-top: 4px;
  font-family: var(--font-body);
}

#n-admin-editor-wrap {
  flex: 1;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 0;
}

#n-admin-quill {
  flex: 1;
  overflow-y: auto;
  font-size: 13px;
  font-family: var(--font-body);
  background: #fff;
  min-height: 400px;
}

.ql-toolbar {
  background: #1a2a44 !important;
  border-color: rgba(201,168,76,.3) !important;
  flex-shrink: 0;
}

.ql-toolbar button,
.ql-toolbar .ql-picker-label {
  color: rgba(232,234,240,.8) !important;
  filter: invert(1);
}

.ql-container {
  border-color: rgba(201,168,76,.2) !important;
}

#n-admin-modal-btns,
#n-admin-add-btns {
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  padding: 14px 24px;
  border-top: 1px solid rgba(201,168,76,.15);
  flex-shrink: 0;
}

.n-admin-btn-cancel {
  padding: 9px 20px;
  border-radius: 6px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid rgba(255,255,255,.15);
  background: transparent;
  color: rgba(232,234,240,.6);
  font-family: var(--font-body);
  transition: all .15s;
}

.n-admin-btn-cancel:hover { background: rgba(255,255,255,.07); color: var(--color-text-primary); }

.n-admin-btn-save {
  padding: 9px 20px;
  border-radius: 6px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
  border: 1px solid #c9a84c;
  background: rgba(201,168,76,.2);
  color: #c9a84c;
  font-family: var(--font-body);
  transition: all .15s;
}

.n-admin-btn-save:hover { background: #c9a84c; color: #0d1829; }

.n-admin-edit-btn { color: #c9a84c !important; border-color: rgba(201,168,76,.4) !important; }
.n-admin-del-btn  { color: var(--color-danger) !important; border-color: var(--color-border-focus) !important; }
.n-admin-edit-btn:hover { background: rgba(201,168,76,.15) !important; }
.n-admin-del-btn:hover  { background: var(--color-danger-dim) !important; }

.n-admin-field {
  margin-bottom: 14px;
}

.n-admin-field label {
  display: block;
  font-size: 10px;
  font-weight: 700;
  color: rgba(232,234,240,.5);
  letter-spacing: 1px;
  text-transform: uppercase;
  margin-bottom: 6px;
  font-family: var(--font-body);
}

.n-admin-field input {
  width: 100%;
  background: rgba(255,255,255,.05);
  border: 1px solid rgba(201,168,76,.3);
  border-radius: 6px;
  padding: 9px 12px;
  color: var(--color-text-primary);
  font-size: 13px;
  font-family: var(--font-body);
  outline: none;
  box-sizing: border-box;
  transition: border-color .2s;
}

.n-admin-field input:focus { border-color: rgba(201,168,76,.7); }
/* ── NEW SCHEMA OPTION TABS ────────────────────────── */
.expl-opt-tab { background:transparent;border:1px solid var(--border2);border-radius:6px;padding:5px 12px;font-size:11px;font-family:var(--font-m);cursor:pointer;transition:all .15s; }
.expl-opt-tab.active-opt { background:var(--bg3);font-weight:700; }
/* ============================================================
   MCQ APP — DESKTOP & TABLET LAYOUT — Sprint 12A
   Responsive layout upgrade for the MCQ inner shell.
   Token-mapped throughout. No hardcoded hex.

   Mobile  (<768px):  single column, tab-bar at top as pills
   Tablet  (≥768px):  centred content, max-width 680px, tab-bar
                       becomes a compact horizontal strip pinned
                       to top (sticky) with more breathing room
   Desktop (≥1280px): two-column — left sidebar (nav) + right
                       content column with max-width reading cap
   ============================================================ */

/* ── TABLET — 768px+ ─────────────────────────────────────────
   Content centres and caps at a readable width.
   Tab bar becomes sticky top strip with token spacing.
─────────────────────────────────────────────────────────── */
@media (min-width: 768px) {

  .mcq-app {
    min-height: 100vh;
  }

  .mcq-app .app {
    width: 100%;          /* Removed 720px cap — reading cap now on specific screens only */
    padding: 0;           /* Removed tablet padding — #page-mcq fix cancels #main padding; .app children manage own padding */
    box-sizing: border-box;
  }

  .mcq-app main {
    padding-top: var(--space-4);
  }

  /* Tab bar — sticky top, slight elevation */
  .mcq-tab-bar {
    position: sticky;
    top: 0;
    z-index: 20;
    background: var(--color-bg-base);
    border-radius: var(--r-md);
    border: 1px solid var(--color-border-default);
    margin-bottom: var(--space-6);
    gap: var(--space-1);
    padding: var(--space-1);
    box-shadow: 0 2px 16px rgba(0,0,0,0.3);
  }

  .mcq-tab-bar .nav-tab {
    flex: 1;
    justify-content: center;
    font-size: var(--text-xs);
    padding: var(--space-2) var(--space-3);
    border-radius: var(--r-sm);
    font-family: var(--font-mono);
    letter-spacing: 0.04em;
  }

  /* Screen content gets more vertical space */
  .mcq-app .screen.active {
    padding-bottom: var(--space-12);
  }

  /* Practice screen — wider option buttons */
  .option-btn {
    padding: var(--space-3) var(--space-4);
  }

  /* Session HUD — spread out on wider screens */
  .session-hud {
    padding: var(--space-2) var(--space-6);
  }

  /* Page header hidden on tablet+ — nav tab context is enough */
  .mcq-app .page-header {
    display: none;
  }
}

/* ── DESKTOP — 1280px+ ───────────────────────────────────────
   Two-column layout.
   Left: fixed-width sidebar with vertical nav tabs.
   Right: content column with reading-width cap.
─────────────────────────────────────────────────────────── */
@media (min-width: 1280px) {

  .mcq-app .app {
    width: 100%;
    padding: 0;
    box-sizing: border-box;
    /* Removed 2-column grid — mcq-tab-bar is hidden at this breakpoint
       so the 240px first column was an empty ghost creating a 271px
       dead space gap. .app is now a simple block. */
    display: block;
  }

  .mcq-app main {
    max-width: 100%;
    padding-top: var(--space-8);
  }

  /* Tab bar — left column, vertical sidebar */
  .mcq-tab-bar {
    grid-column: 1;
    position: sticky;
    top: var(--space-8);
    z-index: 20;
    /* Vertical layout */
    flex-direction: column;
    align-items: stretch;
    gap: var(--space-1);
    padding: var(--space-3);
    margin-bottom: 0;
    border-radius: var(--r-lg);
    border: 1px solid var(--color-border-default);
    background: var(--color-bg-elevated);
    box-shadow: none;
    /* Fix sticky from tablet override */
    margin-top: var(--space-8);
  }

  /* Sidebar nav tabs — full width, left-aligned */
  .mcq-tab-bar .nav-tab {
    flex: none;
    width: 100%;
    justify-content: flex-start;
    padding: var(--space-3) var(--space-4);
    font-size: var(--text-sm);
    border-radius: var(--r-sm);
    letter-spacing: 0;
    gap: var(--space-3);
  }

  /* Sidebar brand label */
  .mcq-tab-bar::before {
    content: 'MedPREP';
    display: block;
    font-family: var(--font-display);
    font-size: var(--text-sm);
    font-weight: var(--weight-bold);
    color: var(--color-accent);
    padding: var(--space-2) var(--space-4) var(--space-3);
    border-bottom: 1px solid var(--color-border-default);
    margin-bottom: var(--space-2);
    letter-spacing: 0.02em;
  }

  /* Active tab on desktop — left accent bar instead of full fill */
  .mcq-tab-bar .nav-tab.active {
    background: var(--color-accent-dim);
    color: var(--color-accent);
    box-shadow: none;
    font-weight: var(--weight-semibold);
    position: relative;
  }
  .mcq-tab-bar .nav-tab.active::before {
    content: '';
    position: absolute;
    left: 0; top: 20%; bottom: 20%;
    width: 3px;
    background: var(--color-accent);
    border-radius: var(--r-pill);
  }

  /* Practice screen — generous padding on desktop */
  .option-btn {
    padding: var(--space-4) var(--space-6);
  }

  /* Session HUD pinned left edge at sidebar width */
  .session-hud {
    padding-left: calc(var(--sidebar-width) + var(--space-8) + var(--main-padding-desktop));
  }

  /* Scratchpad drawer max-width matches content */
  .scratchpad-drawer {
    max-width: calc(760px + var(--sidebar-width) + var(--space-8) + var(--space-8));
    margin: 0 auto;
  }
}

/* ── DESKTOP KEYBOARD HINT STRIP ─────────────────────────────
   Visible only on desktop (≥1280px) in the practice screen.
   Shows A–E, Enter, N, F, ? shortcut hints below options.
   Injected by JS (Sprint 12B) — CSS only defines appearance.
─────────────────────────────────────────────────────────── */
.keyboard-hint-strip {
  display: none; /* hidden on mobile/tablet */
}
@media (min-width: 1280px) {
  .keyboard-hint-strip {
    display: flex;
    gap: var(--space-3);
    flex-wrap: wrap;
    padding: var(--space-3) 0 var(--space-1);
    border-top: 1px solid var(--color-border-default);
    margin-top: var(--space-4);
  }
  .kb-hint {
    display: flex;
    align-items: center;
    gap: var(--space-1);
    font-family: var(--font-mono);
    font-size: 10px;
    color: var(--color-text-tertiary);
  }
  .kb-key {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 5px;
    background: var(--color-bg-subtle);
    border: 1px solid var(--color-border-strong);
    border-radius: var(--r-xs);
    font-family: var(--font-mono);
    font-size: 9px;
    font-weight: var(--weight-medium);
    color: var(--color-text-secondary);
    line-height: 1;
  }
}

/* ── KEY PRESS FLASH ─────────────────────────────────────────
   Option button flashes briefly when selected via keyboard.
   JS adds .kb-flash class, removes after 150ms.
─────────────────────────────────────────────────────────── */
.option-btn.kb-flash {
  background: var(--color-accent-dim) !important;
  border-color: var(--color-accent) !important;
  transition: background 0ms, border-color 0ms !important;
}

/* ── KEYBOARD CHEAT-SHEET OVERLAY ────────────────────────────
   Fullscreen overlay triggered by ? key (Sprint 12B).
   Hidden by default. JS toggles .open class.
─────────────────────────────────────────────────────────── */
.kb-cheatsheet-overlay {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(0,0,0,0.7);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  align-items: center;
  justify-content: center;
  padding: var(--space-4);
}
.kb-cheatsheet-overlay.open {
  display: flex;
}
.kb-cheatsheet-panel {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--r-lg);
  padding: var(--space-6);
  width: 100%;
  max-width: 400px;
  max-height: 85vh;
  overflow-y: auto;
}
.kb-cheatsheet-title {
  font-family: var(--font-display);
  font-size: var(--text-md);
  font-weight: var(--weight-bold);
  color: var(--color-text-primary);
  margin-bottom: var(--space-4);
}
.kb-cheatsheet-group {
  margin-bottom: var(--space-4);
}
.kb-cheatsheet-group-label {
  font-family: var(--font-mono);
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--color-text-tertiary);
  margin-bottom: var(--space-2);
}
.kb-cheatsheet-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-2) 0;
  border-top: 1px solid var(--color-border-default);
}
.kb-cheatsheet-row:first-child { border-top: none; }
.kb-cheatsheet-action {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
}
.kb-cheatsheet-keys {
  display: flex;
  gap: var(--space-1);
  align-items: center;
}
.kb-cheatsheet-close {
  display: block;
  width: 100%;
  margin-top: var(--space-4);
  height: 40px;
  background: var(--color-bg-subtle);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-sm);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  cursor: pointer;
  transition: background var(--transition-fast);
}
.kb-cheatsheet-close:hover {
  background: var(--color-bg-overlay);
  color: var(--color-text-primary);
}

/* ── END SPRINT 12A ─────────────────────────────────────────── */

/* ============================================================
   ANALYTICS DASHBOARD — Sprint 10B
   All classes token-mapped. No hardcoded hex.
   Spec source: Senior Design Architect, Abbas-approved.
   Token corrections applied (3 issues flagged + resolved):
     --color-background-primary  → --color-bg-base
     --color-background-secondary → --color-bg-elevated
     --color-border-tertiary     → --color-border-default
     --border-radius-md          → --r-md
     #D4AF37                     → var(--color-accent)
   ============================================================ */

/* ── SCREEN SHELL ────────────────────────────────────────────
   Full-height scrollable column.
   Header sticks top, body scrolls.
─────────────────────────────────────────────────────────── */
#screen-analytics {
  display: none; /* hidden until JS adds .active — was display:flex which overrode .screen{display:none} causing ghost render */
  flex-direction: column;
  height: 100%;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 80px;
  background: var(--color-bg-base);
}
#screen-analytics.active {
  display: flex;
}

/* ── HEADER ──────────────────────────────────────────────────
   56px sticky top bar. Back ← / title / spacer.
─────────────────────────────────────────────────────────── */
.analytics-header {
  display: flex;
  align-items: center;
  height: 56px;
  padding: 0 var(--space-4);
  border-bottom: 1px solid var(--color-border-default);
  position: sticky;
  top: 0;
  background: var(--color-bg-base);
  z-index: 10;
  flex-shrink: 0;
}

.analytics-header-back {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  cursor: pointer;
  color: var(--color-text-secondary);
  font-size: 20px;
  background: none;
  border: none;
  border-radius: var(--r-sm);
  transition: color var(--transition-fast);
  flex-shrink: 0;
}
.analytics-header-back:hover { color: var(--color-text-primary); }

.analytics-header-title {
  flex: 1;
  text-align: center;
  font-family: var(--font-display);
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  line-height: 1;
}

.analytics-header-spacer {
  width: 36px;
  flex-shrink: 0;
}

/* ── BODY CONTAINER ──────────────────────────────────────────
   Wraps all sections below the header.
─────────────────────────────────────────────────────────── */
.analytics-body {
  flex: 1;
}

/* ── SNAPSHOT GRID — 2×2 stat cards ─────────────────────────
   Total Qs / Overall Accuracy / Streak / Avg Time
─────────────────────────────────────────────────────────── */
.analytics-snapshot-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-3);
  padding: var(--space-6) var(--space-4) 0;
}

.analytics-stat-card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
  padding: var(--space-4);
}

.analytics-stat-label {
  font-family: var(--font-mono);
  font-size: 9px;
  font-weight: var(--weight-medium);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-text-tertiary);
  margin: 0 0 var(--space-2);
}

.analytics-stat-value {
  font-family: var(--font-display);
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  color: var(--color-text-primary);
  margin: 0;
  line-height: 1;
  letter-spacing: -0.02em;
}

/* ── SECTION WRAPPER ─────────────────────────────────────────
   Used for each chart/table group.
─────────────────────────────────────────────────────────── */
.analytics-section {
  padding: var(--space-6) var(--space-4) 0;
}

.analytics-section-label {
  font-family: var(--font-mono);
  font-size: 9px;
  font-weight: var(--weight-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  margin: 0 0 var(--space-3);
}

/* ── CHART CONTAINERS ────────────────────────────────────────
   Canvas sizes set via inline style by renderAnalytics():
     Subject bar  → height: (subjectCount * 36 + 80)px
     Difficulty   → height: 180px fixed
     Line chart   → height: 150px fixed
─────────────────────────────────────────────────────────── */
.analytics-chart-container {
  position: relative;
  width: 100%;
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
  padding: var(--space-3);
  box-sizing: border-box;
}

/* ── PAPER RANKED LIST ───────────────────────────────────────
   Sorted descending by accuracy. Progress bar per paper.
─────────────────────────────────────────────────────────── */
.analytics-paper-list {
  list-style: none;
  margin: 0;
  padding: 0;
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
  overflow: hidden;
}

.analytics-paper-row {
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--color-border-default);
}
.analytics-paper-row:last-child { border-bottom: none; }

.analytics-paper-row-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--space-2);
}

.analytics-paper-name {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.analytics-paper-meta {
  font-family: var(--font-mono);
  font-size: 9px;
  color: var(--color-text-tertiary);
}

.analytics-paper-pct {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  color: var(--color-text-secondary);
  flex-shrink: 0;
}

.analytics-paper-bar-track {
  height: 3px;
  background: var(--color-bg-subtle);
  border-radius: var(--r-pill);
  overflow: hidden;
}

.analytics-paper-bar-fill {
  height: 100%;
  border-radius: var(--r-pill);
  background: var(--color-accent);
  transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Accuracy-based fill colour override — applied via inline style
   in renderAnalytics() using JS for the correct token-resolved value */
.analytics-paper-bar-fill.strong { background: var(--color-success); }
.analytics-paper-bar-fill.weak   { background: var(--color-danger);  }

/* ── EMPTY STATE ─────────────────────────────────────────────
   Shown when state.sessions.length === 0.
   Centred column — icon / headline / sub / CTA.
─────────────────────────────────────────────────────────── */
.analytics-empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 64px var(--space-8);
  gap: var(--space-3);
  min-height: 60vh;
}

.analytics-empty-icon {
  font-size: 48px;
  color: var(--color-text-tertiary);
  margin-bottom: var(--space-2);
  line-height: 1;
}

.analytics-empty-headline {
  font-family: var(--font-display);
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  margin: 0;
}

.analytics-empty-sub {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  line-height: 1.7;
  margin: 0;
  max-width: 280px;
}

.analytics-empty-cta {
  margin-top: var(--space-2);
  padding: var(--space-2) var(--space-6);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: 0.06em;
  color: var(--color-accent);
  border: 1px solid var(--color-accent);
  border-radius: var(--r-pill);
  background: transparent;
  cursor: pointer;
  transition:
    background var(--transition-fast),
    color var(--transition-fast);
}
.analytics-empty-cta:hover {
  background: var(--color-accent-dim);
}

/* ── CHART LOADING STATE ─────────────────────────────────────
   Shown while Chart.js CDN is loading. Replaced by canvas
   once Chart is available.
─────────────────────────────────────────────────────────── */
.analytics-chart-loading {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-8);
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--color-text-tertiary);
  letter-spacing: 0.06em;
}

/* ── RESPONSIVE — tablet/desktop ─────────────────────────────
   Snapshot grid goes 4-col on wider screens.
   Section padding increases for breathing room.
─────────────────────────────────────────────────────────── */
@media (min-width: 768px) {
  .analytics-snapshot-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    padding: var(--space-6) var(--space-6) 0;
  }
  .analytics-section {
    padding: var(--space-6) var(--space-6) 0;
  }
  .analytics-header {
    padding: 0 var(--space-6);
  }
}

/* ── END SPRINT 10B ─────────────────────────────────────────── */

/* ============================================================
   TRACK 2 — OUTER SHELL CSS
   Sprint T2-S2 | 18 June 2026
   Token System v1.0 — zero hardcoded hex values.
   Covers: bottom nav, sidebar, page containers,
           home screen (ring, snapshot, subject list, CTA),
           scope pill bar.
   ============================================================ */

/* ── T2 PAGE CONTAINERS ───────────────────────────────────────
   Track 2 pages use .t2-page to avoid conflict with existing
   .page rules. Existing pages keep .page — they still work.
   New pages (#page-home) use .t2-page class.
   During T2-S3 we add .t2-page to new HTML elements only.
────────────────────────────────────────────────────────────── */
/* FIX 2: .t2-page — document-root scroll architecture.
   No internal scroll container. Height driven by content.
   Horizontal bleed clipped at this level. */
.t2-page {
  display: none;
  flex-direction: column;
  align-items: stretch;
  width: 100%;
  max-width: 100%;
  height: auto;
  min-height: auto;
  overflow: visible;
  overflow-x: hidden;
  background: var(--color-bg-base);
  padding-bottom: calc(56px + env(safe-area-inset-bottom));
  box-sizing: border-box;
}

.t2-page.active {
  display: flex;
}

/* Desktop/tablet: offset for fixed sidebar, no bottom-nav padding */
@media (min-width: 768px) {
  .t2-page {
    padding-bottom: 0;
    margin-left: var(--sidebar-width); /* 240px */
    width: calc(100% - var(--sidebar-width));
    max-width: calc(100% - var(--sidebar-width));
  }
}

/* ── BOTTOM NAV ───────────────────────────────────────────────
   Mobile only (< 768px). Fixed thumb-zone navigation.
   5 tabs: Home · Practice · Syllabus · Notes · Profile
────────────────────────────────────────────────────────────── */
.t2-bottom-nav {
  display: none; /* shown via media query below */
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 56px;
  background: var(--color-bg-nav);
  border-top: 0.5px solid var(--color-border-default);
  z-index: 200;
  padding-bottom: env(safe-area-inset-bottom);
  align-items: stretch;
}

@media (max-width: 767px) {
  .t2-bottom-nav {
    display: flex;
  }
}

/* ── BOTTOM NAV TAB ───────────────────────────────────────── */
.t2-nav-tab {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  cursor: pointer;
  color: var(--color-text-tertiary);
  transition: color var(--duration-fast) var(--ease-out);
  -webkit-tap-highlight-color: transparent;
  min-height: 44px; /* minimum tap target */
  border: none;
  background: none;
  position: relative;
  padding: 0;
}

.t2-nav-tab.active {
  color: var(--color-accent);
}

.t2-nav-icon {
  font-size: 22px;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
}

.t2-nav-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-widest);
  text-transform: uppercase;
  line-height: 1;
}

/* ── NAV BADGE (Practice tab — due reviews count) ─────────── */
.t2-nav-badge {
  position: absolute;
  top: 6px;
  right: calc(50% - 20px);
  min-width: 16px;
  height: 16px;
  background: var(--color-danger);
  color: var(--color-text-primary);
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: var(--weight-bold);
  border-radius: var(--r-full);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 var(--space-1);
  line-height: 1;
  pointer-events: none;
}

.t2-nav-badge[data-count="0"],
.t2-nav-badge:empty {
  display: none;
}

/* ── SIDEBAR (768px+) ─────────────────────────────────────────
   Fixed left column. Replaces existing #sidebar on desktop.
   Hidden on mobile.
────────────────────────────────────────────────────────────── */
.t2-sidebar {
  display: none; /* shown via media query */
  flex-direction: column;
  position: fixed;
  left: 0;
  top: 0;
  bottom: 0;
  width: var(--sidebar-width); /* 240px */
  background: var(--color-bg-nav);
  border-right: 0.5px solid var(--color-border-default);
  z-index: 200;
  padding: var(--space-6) 0;
}

@media (min-width: 768px) {
  .t2-sidebar {
    display: flex;
  }
}

/* Wordmark — text only until logo is designed */
.t2-sidebar-wordmark {
  font-family: var(--font-display);
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  color: var(--color-accent);
  padding: 0 var(--space-4) var(--space-6);
  letter-spacing: var(--tracking-tight);
  line-height: var(--leading-tight);
  flex-shrink: 0;
}

/* Primary nav items */
.t2-sidebar-nav {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: 0 var(--space-3);
  flex: 1;
  overflow-y: auto;
}

.t2-sidebar-item {
  display: flex;
  align-items: center;
  gap: var(--gap-sm);
  height: 48px;
  padding: 0 var(--space-3);
  border-radius: var(--r-sm);
  cursor: pointer;
  color: var(--color-text-secondary);
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
  transition:
    color var(--duration-fast) var(--ease-out),
    background var(--duration-fast) var(--ease-out);
  -webkit-tap-highlight-color: transparent;
  border: none;
  background: none;
  width: 100%;
  text-align: left;
}

.t2-sidebar-item:hover {
  color: var(--color-text-primary);
  background: var(--color-bg-elevated);
}

.t2-sidebar-item.active {
  color: var(--color-accent);
  background: var(--color-accent-subtle);
}

.t2-sidebar-icon {
  font-size: 20px;
  line-height: 1;
  flex-shrink: 0;
  display: flex;
  align-items: center;
}

/* Secondary nav (Settings, Logout) — below spacer */
.t2-sidebar-secondary {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: var(--space-4) var(--space-3) 0;
  border-top: 0.5px solid var(--color-border-default);
  margin-top: var(--space-4);
  flex-shrink: 0;
}

.t2-sidebar-secondary .t2-sidebar-item {
  color: var(--color-text-tertiary);
  font-size: var(--text-sm);
}

.t2-sidebar-secondary .t2-sidebar-item:hover {
  color: var(--color-text-secondary);
  background: var(--color-bg-elevated);
}

/* ── HOME SCREEN — READINESS RING ─────────────────────────────
   SVG ring. CSS-animated. Score-range colored.
   Animation triggered by JS setting stroke-dashoffset.
────────────────────────────────────────────────────────────── */
.home-ring-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: var(--space-5) var(--pad-screen) var(--space-3);
}

.home-ring-svg {
  width: var(--ring-size-mobile);
  height: var(--ring-size-mobile);
  overflow: visible;
}

@media (min-width: 768px) {
  .home-ring-svg {
    width: var(--ring-size-tablet);
    height: var(--ring-size-tablet);
  }
}

@media (min-width: 1280px) {
  .home-ring-svg {
    width: var(--ring-size-desktop);
    height: var(--ring-size-desktop);
  }
}

/* SVG circle elements — styled via class on the SVG element */
.home-ring-track {
  fill: none;
  stroke: var(--color-border-strong);
  stroke-width: var(--ring-stroke);
}

.home-ring-fill {
  fill: none;
  stroke-width: var(--ring-stroke);
  stroke-linecap: round;
  transform: rotate(-90deg);
  transform-origin: 50% 50%;
  transition: stroke-dashoffset var(--duration-slow) var(--ease-out);
}

/* Score range color classes — applied by JS */
.home-ring-fill.ring-danger  { stroke: var(--color-danger); }
.home-ring-fill.ring-warning { stroke: var(--color-warning); }
.home-ring-fill.ring-success { stroke: var(--color-success); }

/* Center text rendered as SVG <text> elements */
.home-ring-value {
  font-family: var(--font-body);
  font-size: var(--text-2xl);
  font-weight: var(--weight-bold);
  fill: var(--color-text-primary);
  text-anchor: middle;
  dominant-baseline: central;
}

/* Label below ring — HTML element, not SVG */
.home-ring-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-widest);
  text-transform: uppercase;
  color: var(--color-text-secondary);
  margin-top: var(--space-3);
  text-align: center;
}

/* ── HOME SCREEN — TODAY'S SNAPSHOT ───────────────────────────
   3-stat horizontal strip. Equal columns.
   No icons — label + value only (360px constraint).
────────────────────────────────────────────────────────────── */
.home-snapshot {
  display: flex;
  gap: var(--gap-sm);
  padding: 0 var(--pad-screen) var(--space-6);
}

.home-snapshot-stat {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-1);
  background: var(--color-bg-elevated);
  border-radius: var(--r-md);
  padding: var(--pad-card);
}

.home-snapshot-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-widest);
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  text-align: center;
  line-height: var(--leading-tight);
}

.home-snapshot-value {
  font-size: var(--text-xl);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  line-height: var(--leading-tight);
}

/* ── HOME SCREEN — SUBJECT PROGRESS LIST ──────────────────────
   Vertical list — scales to all 23 subjects.
   Only subjects with answered questions render.
   5 shown on load, "See all" link below.
────────────────────────────────────────────────────────────── */
.home-subject-section {
  padding: 0 var(--pad-screen) var(--space-4);
}

.home-section-title {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-widest);
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  margin-bottom: var(--space-3);
}

.home-subject-list {
  display: flex;
  flex-direction: column;
}

.home-subject-row {
  display: flex;
  flex-direction: column;
  padding: var(--space-3) 0;
  border-bottom: 0.5px solid var(--color-border-subtle);
  gap: var(--space-2);
}

.home-subject-row:last-child {
  border-bottom: none;
}

.home-subject-row-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.home-subject-name {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: var(--tracking-wide);
}

.home-subject-pct {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

/* Progress bar */
.home-subject-bar-track {
  height: 3px;
  background: var(--color-border-default);
  border-radius: var(--r-full);
  overflow: hidden;
}

.home-subject-bar-fill {
  height: 100%;
  border-radius: var(--r-full);
  transition: width var(--duration-slow) var(--ease-out);
  width: 0%; /* JS sets actual width */
}

/* Fill color classes — applied by JS based on score range */
.home-subject-bar-fill.bar-danger  { background: var(--color-danger); }
.home-subject-bar-fill.bar-warning { background: var(--color-warning); }
.home-subject-bar-fill.bar-success { background: var(--color-success); }

/* "See all" / "Show less" toggle link */
.home-see-all {
  display: block;
  text-align: center;
  padding: var(--space-4) 0 0;
  font-size: var(--text-sm);
  font-family: var(--font-body);
  color: var(--color-accent);
  cursor: pointer;
  background: none;
  border: none;
  width: 100%;
  -webkit-tap-highlight-color: transparent;
}

.home-see-all:hover {
  color: var(--color-accent-hover);
}

/* Hidden subject rows (beyond first 5) */
.home-subject-row.t2-hidden {
  display: none;
}

/* ── HOME SCREEN — CONTINUE STUDYING CTA ──────────────────────
   Full-width primary action button.
   Gold background, dark inverse text.
────────────────────────────────────────────────────────────── */
.home-cta-section {
  padding: var(--space-2) var(--pad-screen) var(--space-8);
}

.home-cta {
  display: block;
  width: 100%;
  padding: var(--space-4);
  background: var(--color-accent);
  color: var(--color-text-inverse);
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  text-align: center;
  border-radius: var(--r-sm);
  border: none;
  cursor: pointer;
  transition:
    opacity var(--duration-fast) var(--ease-out),
    transform var(--duration-fast) var(--ease-out);
  -webkit-tap-highlight-color: transparent;
  line-height: var(--leading-tight);
}

.home-cta:hover {
  opacity: 0.92;
}

.home-cta:active {
  opacity: 0.88;
  transform: scale(0.98);
}

/* ── SCOPE PILL BAR ───────────────────────────────────────────
   Lives inside #page-practice (or #page-mcq during transition).
   Sticky top — stays visible as user scrolls practice content.
────────────────────────────────────────────────────────────── */
.scope-pill-bar {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--color-bg-base);
  padding: var(--space-3) var(--pad-screen);
  border-bottom: 0.5px solid var(--color-border-subtle);
}

.scope-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--gap-xs);
  background: var(--color-accent-subtle);
  border: 1px solid var(--color-border-accent);
  border-radius: var(--r-full);
  color: var(--color-accent);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  padding: var(--space-2) var(--space-4);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition:
    background var(--duration-fast) var(--ease-out),
    border-color var(--duration-fast) var(--ease-out);
  border: none;
  background: none;
}

.scope-pill:hover {
  background: rgba(212, 175, 55, 0.18);
}

/* Chevron icon inside scope pill */
.scope-pill-chevron {
  font-size: 10px;
  opacity: 0.7;
  transition: transform var(--duration-fast) var(--ease-out);
}

.scope-pill.open .scope-pill-chevron {
  transform: rotate(180deg);
}

/* ── END TRACK 2 — T2-S2 ──────────────────────────────────── */

/* ============================================================
   TRACK 2 — HOME SCREEN MISSING SECTIONS CSS
   T2-S6a | 18 June 2026
   Sections: Mission · Cards Due · Countdown · Achievements
   All tokens reference v1.0 — zero hardcoded hex.
   ============================================================ */

/* ── SHARED CARD BASE ─────────────────────────────────────────
   Used by Mission, Cards Due, Countdown, Achievements.
────────────────────────────────────────────────────────────── */
.home-section-card {
  margin: 0 var(--pad-screen) var(--gap-md);
  background: var(--color-bg-nav);
  border: 0.5px solid var(--color-border-default);
  border-radius: var(--r-md);
  padding: var(--pad-card);
}

.home-section-card-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-widest);
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  margin-bottom: var(--space-2);
}

/* ── MISSION ──────────────────────────────────────────────── */
.home-mission-text {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  margin-bottom: var(--space-1);
  line-height: var(--leading-tight);
}

.home-mission-sub {
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
}

/* ── CARDS DUE ────────────────────────────────────────────── */
.home-cards-due-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.home-cards-due-count {
  font-size: var(--text-2xl);
  font-weight: var(--weight-bold);
  line-height: var(--leading-tight);
}

.home-cards-due-count.has-due { color: var(--color-accent); }
.home-cards-due-count.no-due  { color: var(--color-text-tertiary); }

.home-cards-due-btn {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  color: var(--color-accent);
  border: 1px solid var(--color-border-accent);
  border-radius: var(--r-sm);
  padding: var(--space-2) var(--space-3);
  cursor: pointer;
  background: transparent;
  -webkit-tap-highlight-color: transparent;
  transition: opacity var(--duration-fast) var(--ease-out);
}

.home-cards-due-btn:active { opacity: 0.75; }

.home-cards-due-btn.all-clear {
  color: var(--color-text-tertiary);
  border-color: transparent;
  cursor: default;
}

/* ── COUNTDOWN ────────────────────────────────────────────── */
.home-countdown-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.home-countdown-label-stack {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.home-countdown-exam-name {
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
}

.home-countdown-set-date {
  font-size: var(--text-sm);
  color: var(--color-accent);
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
  font-family: var(--font-body);
  -webkit-tap-highlight-color: transparent;
}

.home-countdown-days {
  font-size: var(--text-2xl);
  font-weight: var(--weight-bold);
  line-height: var(--leading-tight);
}

.home-countdown-days.safe    { color: var(--color-text-primary); }
.home-countdown-days.warning { color: var(--color-warning); }
.home-countdown-days.danger  { color: var(--color-danger); }

/* ── ACHIEVEMENTS ─────────────────────────────────────────── */
.home-achievement-row {
  display: flex;
  align-items: center;
  gap: var(--gap-sm);
  margin-bottom: var(--space-3);
}

.home-achievement-icon {
  font-size: 24px;
  color: var(--color-accent);
  flex-shrink: 0;
  line-height: 1;
}

.home-achievement-name {
  flex: 1;
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.home-achievement-date {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}

.home-achievement-view-all {
  font-size: var(--text-sm);
  color: var(--color-accent);
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
  font-family: var(--font-body);
  -webkit-tap-highlight-color: transparent;
  display: block;
}

.home-section-empty {
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  text-align: center;
  padding: var(--space-2) 0;
}

/* ── END T2-S6a ───────────────────────────────────────────── */

/* ============================================================
   TRACK 2 — THREE-TIER HOME LAYOUT
   Senior Design Architect spec | 18 June 2026
   Mobile:  single column scroll
   Tablet:  768–1279px — two column grid
   Desktop: 1280px+ — three column dashboard

   ARCHITECTURE: #page-home is the scroll container.
   .home-inner is the layout container (grid/flex).
   This separation prevents sidebar offset conflicts.
   ============================================================ */

/* ── #page-home — content container only ─────────────────────
   FIX: removed min-height:100vh (blank space) and overflow-y:auto
   (nested scroll). Document root handles scrolling. Height = content.
────────────────────────────────────────────────────────────── */
#page-home {
  box-sizing: border-box;
  /* width: 100% removed — was an ID-specificity override that always beat
     .t2-page's `width: calc(100% - var(--sidebar-width))` at >=768px,
     causing #page-home to stay full-width and get clipped by
     #app-wrapper's overflow-x:hidden on the right edge. */
  overflow: visible;
  overflow-x: hidden;
  height: auto;
  min-height: auto;
  background: var(--color-bg-base);
}

/* FIX 1: app-wrapper — clip horizontal bleed, do not force vertical height */
#app-wrapper {
  overflow-x: hidden;
  overflow-y: visible;
  height: auto;
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
}

/* ── .home-inner — MOBILE layout ─────────────────────────────
   Single column. Padding applied here, not on #page-home.
────────────────────────────────────────────────────────────── */
.home-inner {
  box-sizing: border-box;
  width: 100%;
  padding: var(--space-5) var(--space-4) 24px; /* FIX 3: was space-8 (32px) — excess bottom space */
  display: flex;
  flex-direction: column;
  gap: var(--gap-md);
}

/* Remove margin from section cards — gap handles spacing */
.home-inner .home-section-card {
  margin: 0;
}

.home-inner .home-subject-section {
  padding-left: 0;
  padding-right: 0;
}

.home-inner .home-cta-section {
  padding-left: 0;
  padding-right: 0;
}

.home-inner .home-snapshot {
  padding-left: 0;
  padding-right: 0;
}

/* FIX 5: Tablet/desktop .home-inner breakpoint overrides removed.
   Single source of truth: #page-home .home-inner in the overflow fix block below. */

/* ── END THREE-TIER HOME LAYOUT ───────────────────────────── */

/* ============================================================
   HOME SCREEN REDESIGN — Track 2 Visual Overhaul
   Matches mockup: Mobile (Image 1) · Desktop (Image 2) · Tablet (Image 3)
   Appended below all existing CSS — zero existing rules touched.
   ============================================================ */

/* ── SIDEBAR DAILY GOAL WIDGET ─────────────────────────────── */
.t2-sidebar-daily-goal {
  margin: 0 var(--space-3) var(--space-4);
  padding: var(--space-3) var(--space-4);
  background: var(--color-bg-overlay);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
}

.t2-dg-label {
  font-family: var(--font-mono);
  font-size: 9px;
  font-weight: 600;
  color: var(--color-text-tertiary);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-bottom: 6px;
}

.t2-dg-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 6px;
}

.t2-dg-count {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  font-weight: var(--weight-medium);
}

.t2-dg-pct {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--color-accent);
  font-weight: var(--weight-bold);
}

.t2-dg-track {
  height: 4px;
  background: var(--color-bg-subtle);
  border-radius: 2px;
  overflow: hidden;
}

.t2-dg-fill {
  height: 100%;
  background: var(--color-accent);
  border-radius: 2px;
  transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}

/* ── DESKTOP TOP HEADER BAR ────────────────────────────────── */
.home-header-bar {
  display: flex; /* FIX: header is used at all breakpoints, not just tablet+ — it was incorrectly hidden by default with no mobile-specific header to replace it */
  align-items: center;
  justify-content: space-between;
  height: 60px;
  padding: 0 var(--main-padding-tablet);
  background: var(--color-bg-nav);
  border-bottom: 1px solid var(--color-border-default);
  position: sticky;
  top: 0;
  z-index: 100;
  flex-shrink: 0;
  width: 100%;           /* FIX: claim full container width */
  box-sizing: border-box; /* FIX: padding does not cause overflow */
  overflow: hidden;       /* FIX: clip anything that would push right edge */
}

@media (min-width: 768px) {
  .home-header-bar {
    display: flex;
    padding: 0 var(--main-padding-tablet);
  }
}

@media (min-width: 1200px) {
  .home-header-bar {
    padding: 0 var(--main-padding-desktop);
  }
}

.home-header-left {
  display: flex;
  align-items: baseline;
  gap: 10px;
}

.home-header-wordmark {
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: var(--weight-bold);
  color: var(--color-text-primary);
  letter-spacing: -0.02em;
}

.home-header-wordmark span {
  color: var(--color-accent);
}

.home-header-sub {
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 600;
  color: var(--color-accent);
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.home-header-right {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-shrink: 0;    /* FIX: don't compress buttons */
  min-width: 0;
}

.home-header-icon-btn {
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  border-radius: var(--r-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  transition: color var(--transition-fast), background var(--transition-fast);
}

.home-header-icon-btn:hover {
  color: var(--color-text-primary);
  background: var(--color-bg-elevated);
}

.home-header-bell-wrap {
  position: relative;
}

.home-header-bell-badge {
  position: absolute;
  top: 2px;
  right: 2px;
  min-width: 16px;
  height: 16px;
  background: var(--color-accent);
  color: #121212;
  font-family: var(--font-mono);
  font-size: 9px;
  font-weight: 700;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 3px;
  pointer-events: none;
}

.home-header-user {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 10px 4px 4px;
  border-radius: var(--r-md);
  cursor: pointer;
  border: 1px solid var(--color-border-default);
  background: var(--color-bg-elevated);
  transition: border-color var(--transition-fast);
  margin-left: var(--space-2);
}

.home-header-user:hover {
  border-color: var(--color-border-strong);
}

.home-header-avatar {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--color-accent);
  color: #121212;
  font-family: var(--font-mono);
  font-size: 12px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1.5px solid var(--color-accent);
  flex-shrink: 0;
}

.home-header-username {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

/* ── HOME INNER WRAPPER ────────────────────────────────────── */
#page-home .home-inner {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 16px var(--main-padding-mobile) 24px;
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
}

@media (min-width: 768px) {
  #page-home .home-inner {
    padding: 24px var(--main-padding-tablet) 32px;
    gap: 18px;
    margin: 0;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
  }
}

@media (min-width: 1200px) {
  #page-home .home-inner {
    padding: 28px var(--main-padding-desktop) 40px;
    gap: 20px;
    margin: 0;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
  }
}

/* ── SECTION LABEL (shared) ────────────────────────────────── */
.home-section-label {
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 600;
  color: var(--color-text-tertiary);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  display: block;
  margin-bottom: 14px;
}

/* ── BASE CARD ─────────────────────────────────────────────── */
.home-card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: 16px;
  padding: 20px;
}

/* ── STATS BAR ─────────────────────────────────────────────── */
.home-statsbar {
  display: flex;
  align-items: center;
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: 14px;
  overflow: hidden;
}

.home-statsbar-cell {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 20px;
}

.home-statsbar-divider {
  width: 1px;
  height: 40px;
  background: var(--color-border-default);
  flex-shrink: 0;
}

.home-statsbar-icon {
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-bg-overlay);
  border-radius: var(--r-sm);
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}

.home-statsbar-icon--gold {
  color: var(--color-accent);
  background: var(--color-accent-dim);
}

.home-statsbar-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.home-statsbar-label {
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 500;
  color: var(--color-text-tertiary);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  line-height: 1;
}

.home-statsbar-value {
  font-family: var(--font-display);
  font-size: 24px;
  font-weight: 700;
  color: var(--color-text-primary);
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.home-statsbar-value--gold {
  color: var(--color-accent);
}

/* ── HERO ROW (Ring + Mission) ─────────────────────────────── */
.home-hero-row {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

@media (min-width: 768px) {
  .home-hero-row {
    flex-direction: column;
    gap: 16px;
  }

  .home-hero-card,
  .home-mission-card {
    width: 100%;
    min-width: 0;
  }
}

/* Ring Card */
.home-hero-card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: 16px;
  padding: 24px 28px;     /* FIX: more breathing room left & right */
  display: flex;
  align-items: center;
  gap: 28px;              /* FIX: more gap so ring doesn't crowd text */
}

.home-hero-ring-wrap {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Override old ring SVG size for new home */
#page-home .home-ring-svg {
  width: 150px;   /* FIX: was 120px — larger ring, more visual presence */
  height: 150px;
}

/* Ring geometry — new values for r=52 */
#page-home .home-ring-track {
  fill: none;
  stroke: var(--color-bg-subtle);
  stroke-width: 10;   /* FIX: slightly thicker to match larger ring */
}

#page-home .home-ring-fill {
  fill: none;
  stroke-width: 10;   /* FIX: match track */
  stroke-linecap: round;
  transform: rotate(-90deg);
  transform-origin: 60px 60px;
  transition: stroke-dashoffset 1s cubic-bezier(0.4, 0, 0.2, 1),
              stroke 0.4s ease;
}

#page-home .home-ring-value {
  font-family: var(--font-display);
  font-size: 22px;
  font-weight: 700;
  fill: var(--color-text-primary);
  text-anchor: middle;
  dominant-baseline: middle;
}

#page-home .home-ring-sub {
  font-family: var(--font-mono);
  font-size: 8px;
  font-weight: 600;
  fill: var(--color-text-tertiary);
  text-anchor: middle;
  letter-spacing: 0.1em;
}

.home-hero-content {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.home-hero-motivational {
  font-family: var(--font-display);
  font-size: 18px;
  font-weight: 700;
  color: var(--color-accent);
  line-height: 1.2;
}

.home-hero-sub {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  line-height: 1.5;
  margin-bottom: 4px;
}

.home-hero-cta {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 44px;
  background: var(--color-accent);
  color: #121212;
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: var(--weight-bold);
  border: none;
  border-radius: 10px;
  cursor: pointer;
  transition: background var(--transition-fast), transform var(--transition-fast);
  -webkit-tap-highlight-color: transparent;
  width: 100%;
  letter-spacing: 0.01em;
}

.home-hero-cta:hover {
  background: var(--color-accent-hover);
}

.home-hero-cta:active {
  transform: scale(0.98);
}

/* Mission Card */
.home-mission-card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: 16px;
  padding: 20px;
  display: flex;
  align-items: flex-start;
  gap: 16px;
  position: relative;
  overflow: hidden;
}

.home-mission-content {
  flex: 1;
  min-width: 0;
}

.home-mission-label {
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 600;
  color: var(--color-accent);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-bottom: 8px;
  display: block;
}

.home-mission-title {
  font-family: var(--font-display);
  font-size: 18px;
  font-weight: 700;
  color: var(--color-text-primary);
  line-height: 1.3;
  margin-bottom: 6px;
}

.home-mission-meta {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  margin-bottom: 14px;
}

.home-mission-details-btn {
  display: inline-flex;
  align-items: center;
  height: 36px;
  padding: 0 16px;
  background: transparent;
  border: 1px solid var(--color-border-strong);
  border-radius: 8px;
  color: var(--color-text-primary);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  cursor: pointer;
  transition: border-color var(--transition-fast), background var(--transition-fast);
  -webkit-tap-highlight-color: transparent;
}

.home-mission-details-btn:hover {
  border-color: var(--color-accent);
  background: var(--color-accent-dim);
  color: var(--color-accent);
}

.home-mission-illustration {
  flex-shrink: 0;
  opacity: 0.9;
}

/* ── PAPER PROGRESS CARD ───────────────────────────────────── */
.home-paper-card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: 16px;
  padding: 20px;
}

.home-paper-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 20px;
}

.home-paper-header .home-section-label {
  margin-bottom: 0;
}

.home-viewall-btn {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-accent);
  background: transparent;
  border: none;
  cursor: pointer;
  padding: 0;
  transition: opacity var(--transition-fast);
}

.home-viewall-btn:hover {
  opacity: 0.75;
}

.home-paper-rings {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 8px;
}

.home-paper-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  flex: 1;
  min-width: 0;
}

.home-paper-svg {
  width: 100%;
  max-width: 72px;
  height: auto;
  overflow: visible;
}

.home-paper-track {
  fill: none;
  stroke: var(--color-bg-subtle);
  stroke-width: 5;
}

.home-paper-fill {
  fill: none;
  stroke-width: 5;
  stroke-linecap: round;
  transform: rotate(-90deg);
  transform-origin: 40px 40px;
  transition: stroke-dashoffset 1s cubic-bezier(0.4, 0, 0.2, 1);
}

.home-paper-pct {
  font-family: var(--font-display);
  font-size: 14px;
  font-weight: 700;
  fill: var(--color-text-primary);
  text-anchor: middle;
  dominant-baseline: middle;
}

.home-paper-badge {
  font-family: var(--font-mono);
  font-size: 9px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 4px;
  letter-spacing: 0.04em;
}

.home-paper-badge--J  { background: rgba(129,140,248,0.18); color: #818cf8; }
.home-paper-badge--K  { background: rgba(96,165,250,0.18);  color: #60a5fa; }
.home-paper-badge--L  { background: rgba(76,195,138,0.18);  color: #4CC38A; }
.home-paper-badge--M1 { background: rgba(212,175,55,0.18);  color: #D4AF37; }
.home-paper-badge--M2 { background: rgba(192,132,252,0.18); color: #c084fc; }

.home-paper-name {
  font-family: var(--font-body);
  font-size: 10px;
  color: var(--color-text-secondary);
  text-align: center;
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

.home-paper-count {
  font-family: var(--font-mono);
  font-size: 9px;
  color: var(--color-text-tertiary);
  text-align: center;
}

/* ── THREE COLUMN ROW ──────────────────────────────────────── */
.home-three-col {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

@media (min-width: 768px) {
  .home-three-col {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: auto;
    gap: 16px;
    align-items: stretch;
  }

  .home-cards-due-card { grid-column: 1; grid-row: 1; }
  .home-rec-card       { grid-column: 2; grid-row: 1; }
  .home-streak-card    { grid-column: 3; grid-row: 1; }
}

@media (min-width: 1200px) {
  .home-three-col {
    gap: 20px;
  }
}

.home-three-col .home-card {
  min-width: 0; /* prevent any card overflowing its grid cell */
}

/* Cards Due Card */
.home-cards-due-card {
  display: flex;
  flex-direction: column;
}

.home-due-body {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
  flex: 1;
}

.home-due-left {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

/* Override old .home-cards-due-count for new layout */
#page-home .home-cards-due-count {
  font-family: var(--font-display);
  font-size: 48px;
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.02em;
}

#page-home .home-cards-due-count.has-due { color: var(--color-accent); }
#page-home .home-cards-due-count.no-due  { color: var(--color-text-tertiary); }

.home-due-sub {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
}

.home-due-illustration {
  opacity: 0.85;
}

/* Override old .home-cards-due-btn for new layout */
#page-home .home-cards-due-btn {
  width: 100%;
  height: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: 1px solid var(--color-accent);
  border-radius: 8px;
  color: var(--color-accent);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  cursor: pointer;
  transition: background var(--transition-fast);
  -webkit-tap-highlight-color: transparent;
}

#page-home .home-cards-due-btn:hover {
  background: var(--color-accent-dim);
}

#page-home .home-cards-due-btn.all-clear {
  border-color: var(--color-border-default);
  color: var(--color-text-tertiary);
}

#page-home .home-cards-due-btn.all-clear:hover {
  background: var(--color-bg-overlay);
}

/* Recommended Card */
.home-rec-card {
  display: flex;
  flex-direction: column;
}

.home-rec-subject {
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: 700;
  color: var(--color-text-primary);
  line-height: 1.2;
  margin-bottom: 4px;
}

.home-rec-sub {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  margin-bottom: 14px;
}

.home-rec-body {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
  flex: 1;
}

/* Mini accuracy ring */
.home-rec-ring-wrap {
  flex-shrink: 0;
}

.home-rec-ring-svg {
  width: 64px;
  height: 64px;
}

.home-rec-ring-track {
  fill: none;
  stroke: var(--color-bg-subtle);
  stroke-width: 5;
}

.home-rec-ring-fill {
  fill: none;
  stroke-width: 5;
  stroke-linecap: round;
  stroke: var(--color-danger);
  transform: rotate(-90deg);
  transform-origin: 32px 32px;
  transition: stroke-dashoffset 1s cubic-bezier(0.4, 0, 0.2, 1),
              stroke 0.4s ease;
}

.home-rec-ring-value {
  font-family: var(--font-display);
  font-size: 13px;
  font-weight: 700;
  fill: var(--color-text-primary);
  text-anchor: middle;
  dominant-baseline: middle;
}

.home-rec-ring-label {
  font-family: var(--font-mono);
  font-size: 7px;
  fill: var(--color-text-tertiary);
  text-anchor: middle;
  letter-spacing: 0.06em;
}

/* Sparkline */
.home-rec-sparkline-wrap {
  flex: 1;
  height: 56px;
  min-width: 0;
}

.home-rec-sparkline {
  width: 100%;
  height: 100%;
  overflow: visible;
}

.home-rec-btn {
  width: 100%;
  height: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-accent);
  border: none;
  border-radius: 8px;
  color: #121212;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  cursor: pointer;
  transition: background var(--transition-fast), transform var(--transition-fast);
  -webkit-tap-highlight-color: transparent;
}

.home-rec-btn:hover  { background: var(--color-accent-hover); }
.home-rec-btn:active { transform: scale(0.98); }

/* Study Streak Card */
.home-streak-card {
  display: flex;
  flex-direction: column;
}

.home-streak-count-row {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-bottom: 4px;
}

.home-streak-number {
  font-family: var(--font-display);
  font-size: 36px;
  font-weight: 700;
  color: var(--color-accent);
  line-height: 1;
  letter-spacing: -0.02em;
}

.home-streak-days-label {
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: 600;
  color: var(--color-text-primary);
}

.home-streak-sub {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  margin-bottom: 16px;
}

.home-streak-dots {
  display: flex;
  gap: 6px;
  margin-bottom: 6px;
}

.home-streak-dot {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 700;
  flex-shrink: 0;
  transition: background var(--transition-fast);
}

.home-streak-dot--done {
  background: var(--color-accent);
  color: #121212;
}

.home-streak-dot--today {
  background: transparent;
  border: 2px solid var(--color-accent);
  color: var(--color-accent);
}

.home-streak-dot--future {
  background: var(--color-bg-subtle);
  color: var(--color-text-tertiary);
  border: 1.5px solid var(--color-border-default);
}

/* Checkmark inside dot */
.home-streak-dot--done::after {
  content: '✓';
  font-size: 13px;
  font-weight: 700;
}

.home-streak-day-labels {
  display: flex;
  gap: 6px;
}

.home-streak-day-labels span {
  width: 32px;
  text-align: center;
  font-family: var(--font-mono);
  font-size: 9px;
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}

/* ── BOTTOM ROW (desktop/tablet only) ──────────────────────── */
.home-bottom-row {
  display: none;
}

@media (min-width: 768px) {
  .home-bottom-row {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: auto;
    gap: 16px;
    align-items: stretch;
    padding-bottom: 0;
  }

  .home-bottom-row .home-activity-card { grid-column: 1; grid-row: 1; }
  .home-bottom-row .home-weekly-card   { grid-column: 2; grid-row: 1; }
  .home-bottom-row .home-weakest-card  { grid-column: 3; grid-row: 1; }

  .home-bottom-row .home-card {
    min-width: 0;
    display: flex;
    flex-direction: column;
  }
}

@media (min-width: 1200px) {
  .home-bottom-row {
    gap: 20px;
  }
}

/* Recent Activity */

.home-activity-list {
  display: flex;
  flex-direction: column;
  gap: 0;
}

.home-activity-empty {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
  text-align: center;
  padding: 20px 0;
}

.home-activity-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 0;
  border-bottom: 1px solid var(--color-border-default);
}

.home-activity-row:last-child {
  border-bottom: none;
  padding-bottom: 0;
}

.home-activity-icon {
  width: 36px;
  height: 36px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-mono);
  font-size: 13px;
  font-weight: 700;
  color: #121212;
  flex-shrink: 0;
}

.home-activity-info {
  flex: 1;
  min-width: 0;
}

.home-activity-title {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  color: var(--color-text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.3;
}

.home-activity-score {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-text-secondary);
  margin-top: 2px;
}

.home-activity-score--good   { color: var(--color-success); }
.home-activity-score--ok     { color: var(--color-warning); }
.home-activity-score--weak   { color: var(--color-danger);  }

.home-activity-time {
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}

/* Weekly Progress */

.home-weekly-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
}

.home-weekly-header .home-section-label {
  margin-bottom: 0;
}

.home-weekly-select {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-text-secondary);
  background: var(--color-bg-overlay);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-sm);
  padding: 4px 8px;
  cursor: pointer;
  outline: none;
  appearance: none;
  -webkit-appearance: none;
}

.home-weekly-chart-wrap {
  position: relative;
  height: 160px;
}

/* Weakest Topics */

.home-weakest-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 14px;
}

.home-weakest-header .home-section-label {
  margin-bottom: 0;
}

.home-weakest-list {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.home-weakest-row {
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.home-weakest-row-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.home-weakest-name {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  font-weight: var(--weight-medium);
}

.home-weakest-pct {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
}

.home-weakest-pct--danger  { color: var(--color-danger);  }
.home-weakest-pct--warning { color: var(--color-warning); }
.home-weakest-pct--success { color: var(--color-success); }

.home-weakest-bar-track {
  height: 3px;
  background: var(--color-bg-subtle);
  border-radius: 2px;
  overflow: hidden;
}

.home-weakest-bar-fill {
  height: 100%;
  border-radius: 2px;
  transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

.home-weakest-bar-fill--danger  { background: var(--color-danger);  }
.home-weakest-bar-fill--warning { background: var(--color-warning); }
.home-weakest-bar-fill--success { background: var(--color-success); }

/* ── MOBILE BELL ICON (fixed top-right) ────────────────────── */
.home-mobile-bell {
  display: flex;
  position: fixed;
  top: 16px;
  right: 16px;
  z-index: 150;
  width: 38px;
  height: 38px;
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: 50%;
  align-items: center;
  justify-content: center;
  color: var(--color-text-secondary);
  cursor: pointer;
}

@media (min-width: 768px) {
  .home-mobile-bell { display: none; }
}

/* ── RESPONSIVE TWEAKS ─────────────────────────────────────── */

/* Stats bar — compress on very small screens */
@media (max-width: 380px) {
  .home-statsbar-cell {
    padding: 14px 12px;
    gap: 8px;
  }
  .home-statsbar-value {
    font-size: 20px;
  }
  .home-statsbar-icon {
    width: 30px;
    height: 30px;
  }
}

/* Paper rings — allow scroll on very small screens */
@media (max-width: 380px) {
  .home-paper-rings {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    gap: 4px;
  }
  .home-paper-rings::-webkit-scrollbar { display: none; }
  .home-paper-item { min-width: 56px; }
}

/* Streak dots — compress on small screens */
@media (max-width: 380px) {
  .home-streak-dot,
  .home-streak-day-labels span {
    width: 28px;
  }
  .home-streak-dots { gap: 4px; }
  .home-streak-day-labels { gap: 4px; }
}

/* Three-col and bottom-row responsive rules are defined above — no duplicates needed */

/* ── END HOME SCREEN REDESIGN ──────────────────────────────── */

/* ── OLD SIDEBAR SUPPRESSION ───────────────────────────────────
   Old #sidebar, #sidebar-toggle, #sidebar-overlay completely
   removed from HTML. These rules are a safety net in case
   any legacy CSS elsewhere tries to show them.
─────────────────────────────────────────────────────────────── */
#sidebar,
#sidebar-toggle,
#sidebar-overlay {
  display: none !important;
  visibility: hidden !important;
  pointer-events: none !important;
  opacity: 0 !important;
}

/* ── END OLD SIDEBAR SUPPRESSION ────────────────────────────── */


/* ============================================================
   OVERFLOW FIX — No Horizontal Scroll, No Excess Vertical Scroll
   Approved 19 June 2026
   Root causes addressed:
   1. #page-home min-height:100vh creates blank space below content
   2. #app-wrapper overflow:visible allows horizontal child bleed
   3. Grid children missing min-width:0 — can escape container
   4. home-paper-card needs overflow:hidden to clip ring scroll
   5. home-inner padding-bottom conflicts with parent min-height
   6. .t2-page min-height:100vh + height:100vh conflict
   ============================================================ */

/* ── 1. BODY & HTML — baseline containment ─────────────────────
   Prevent any element from creating a wider scrollable area
   than the viewport. This is the top-level safety net.
────────────────────────────────────────────────────────────── */
html, body {
  overflow-x: hidden;
  max-width: 100%;
}

/* ── 2. APP-WRAPPER — contain children horizontally ───────────
   Previous: overflow:visible — allowed children to bleed right.
   Fix: clip horizontal overflow at the wrapper level.
   Keep height:auto so content determines vertical height.
────────────────────────────────────────────────────────────── */
#app-wrapper {
  overflow-x: hidden;    /* clip horizontal bleed */
  overflow-y: visible;   /* vertical still managed by .t2-page */
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  /* Remove min-height:100vh — .t2-page handles height */
  min-height: unset;
  height: auto;
}

/* ── 3. .t2-page — single scroll container, no double height ──
   Previous: min-height:100vh AND height:100vh — they conflict.
   Fix: height:100vh (exact viewport) is correct. Remove
   min-height:100vh which fights it and creates extra space.
   overflow-x:hidden already set — reinforced here.
────────────────────────────────────────────────────────────── */
/* .t2-page override removed — canonical rule above is now the single source of truth */

/* ── 4. #page-home — no artificial height inflation ───────────
   Previous: min-height:100vh forces page to be at least full
   viewport even when content is shorter → blank scroll space.
   Fix: let content determine height. .t2-page is the 100vh box.
────────────────────────────────────────────────────────────── */
#page-home {
  min-height: unset;      /* remove 100vh floor — content sets height */
  overflow-x: hidden;     /* clip any child that bleeds right */
  max-width: 100%;
  box-sizing: border-box;
}

/* ── 5. HOME-INNER — tight padding, no excess bottom space ────
   padding-bottom at 40px desktop was fine, but combined with
   parent min-height:100vh created blank area below last row.
   With min-height removed from parents, reduce to 24px bottom
   padding on all breakpoints (matches spec bottom breathing room).
────────────────────────────────────────────────────────────── */
#page-home .home-inner {
  max-width: 100%;
  box-sizing: border-box;
  overflow-x: hidden;
  padding-bottom: 24px;   /* consistent, no excess bottom space */
}

@media (min-width: 768px) {
  #page-home .home-inner {
    padding-bottom: 24px;
  }
}

@media (min-width: 1280px) {
  #page-home .home-inner {
    padding-bottom: 28px;  /* slight extra room at desktop */
  }
}

/* ── 6. HOME-BOTTOM-ROW — last child, no extra bottom margin ──
   Final section in the dashboard. Must not have margin-bottom.
────────────────────────────────────────────────────────────── */
#page-home .home-bottom-row {
  margin-bottom: 0;
}

/* Mobile: three-col is the last visible row */
#page-home .home-three-col {
  margin-bottom: 0;
}

/* ── 7. ALL HOME GRID CONTAINERS — enforce min-width:0 ────────
   CSS grid children default to min-width:auto which can be
   larger than their column. min-width:0 forces them to shrink.
   This is the most common cause of grid overflow.
────────────────────────────────────────────────────────────── */
#page-home .home-statsbar,
#page-home .home-hero-row,
#page-home .home-hero-card,
#page-home .home-mission-card,
#page-home .home-paper-card,
#page-home .home-three-col,
#page-home .home-bottom-row,
#page-home .home-card,
#page-home .home-cards-due-card,
#page-home .home-rec-card,
#page-home .home-streak-card,
#page-home .home-activity-card,
#page-home .home-weekly-card,
#page-home .home-weakest-card {
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}

/* ── 8. PAPER CARD — clip the horizontal ring scroll ──────────
   .home-paper-rings has overflow-x:auto for mobile scroll.
   Its parent .home-paper-card must clip via overflow:hidden
   so the scrollable child doesn't expand the card beyond 100%.
────────────────────────────────────────────────────────────── */
#page-home .home-paper-card {
  overflow: hidden;   /* clip .home-paper-rings horizontal scroll */
}

/* Paper rings scroll container — constrained to card width */
#page-home .home-paper-rings {
  max-width: 100%;
  box-sizing: border-box;
}

/* ── 9. STATSBAR CELLS — prevent cell padding from overflowing ─
   3 cells × padding each — ensure total stays within container.
────────────────────────────────────────────────────────────── */
#page-home .home-statsbar-cell {
  min-width: 0;
  flex: 1;
  box-sizing: border-box;
}

/* ── 10. HERO CONTENT TEXT — prevent long words overflowing ───
   User names, mission titles, motivational text can be long.
────────────────────────────────────────────────────────────── */
#page-home .home-hero-content,
#page-home .home-mission-content {
  min-width: 0;
  overflow: hidden;
}

#page-home .home-hero-motivational,
#page-home .home-mission-title,
#page-home .home-hero-sub,
#page-home .home-mission-meta {
  overflow-wrap: break-word;
  word-break: break-word;
}

/* ── 11. HEADER BAR — contained to page width ─────────────────
   Now visible on mobile — must not exceed viewport.
────────────────────────────────────────────────────────────── */
#page-home .home-header-bar {
  max-width: 100%;
  box-sizing: border-box;
  overflow: hidden;
}

/* ── END OVERFLOW FIX ──────────────────────────────────────── */

/* ============================================================
   MCQ: Practice Hub — 5-Zone Layout
   Tokens only — no hardcoded hex values.
   Inline <style> block in index.html can be removed once
   this block is confirmed live.
   ============================================================ */

/* ZONE 1: Resume Banner */
.ph-resume-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin:0 0 var(--space-3);padding:var(--space-3) var(--space-4);background:var(--color-bg-elevated);border-radius:var(--r-md);border-left:3px solid var(--color-accent);border-top:1px solid var(--color-border-default);border-right:1px solid var(--color-border-default);border-bottom:1px solid var(--color-border-default)}
.ph-resume-left{display:flex;flex-direction:column;gap:2px}
.ph-resume-mode{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--color-text-primary);font-family:var(--font-body)}
.ph-resume-meta{font-size:var(--text-xs);color:var(--color-text-tertiary);font-family:var(--font-body)}
.ph-resume-actions{display:flex;gap:var(--space-2);align-items:center;flex-shrink:0}
.ph-resume-cta{font-size:var(--text-xs);font-weight:var(--weight-bold);color:var(--color-accent);background:none;border:none;cursor:pointer;font-family:var(--font-body);white-space:nowrap;padding:0}
.ph-resume-discard{font-size:var(--text-xs);color:var(--color-text-tertiary);background:none;border:none;cursor:pointer;font-family:var(--font-body);padding:2px 4px}

/* ZONE 2: Quick-launch chips */
.ph-quick-row{display:flex;gap:var(--space-3);margin-bottom:var(--space-3)}
.ph-chip{flex:1;display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);background:var(--color-bg-elevated);border:1px solid var(--color-border-default);border-radius:var(--r-md);cursor:pointer;transition:border-color var(--transition-fast);-webkit-tap-highlight-color:transparent}
.ph-chip:active{border-color:var(--color-accent);transform:scale(0.97)}
.ph-chip-icon{font-size:18px;line-height:1}
.ph-chip-label{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--color-text-primary);font-family:var(--font-body)}
.ph-chip-sub{font-size:10px;color:var(--color-text-tertiary);font-family:var(--font-body)}

/* ZONE 3: 360° View */
.ph-360-wrap{margin-bottom:var(--space-3);padding:var(--space-3) var(--space-4);background:var(--color-accent-dim);border:1px solid rgba(212,175,55,0.18);border-radius:var(--r-md)}
.ph-360-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-2)}
.ph-360-title{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--color-text-primary);font-family:var(--font-body)}
.ph-360-scope{font-size:10px;color:var(--color-accent);font-family:var(--font-mono);background:var(--color-bg-elevated);border:1px solid var(--color-border-default);border-radius:var(--r-pill);padding:2px 8px}
.ph-360-input{width:100%;padding:var(--space-2) var(--space-3);background:var(--color-bg-base);border:1px solid var(--color-border-default);border-radius:var(--r-sm);color:var(--color-text-primary);font-size:var(--text-sm);font-family:var(--font-body);outline:none;transition:border-color var(--transition-fast);appearance:none;-webkit-appearance:none;box-sizing:border-box}
.ph-360-input:focus{border-color:var(--color-accent)}
.ph-360-results{margin-top:var(--space-2);display:flex;flex-direction:column;gap:var(--space-2)}
.ph-360-result{padding:var(--space-2) var(--space-3);background:var(--color-bg-elevated);border:1px solid var(--color-border-default);border-radius:var(--r-sm);cursor:pointer;transition:border-color var(--transition-fast)}
.ph-360-result:active{border-color:var(--color-accent)}
.ph-360-topic{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--color-text-primary);font-family:var(--font-body);margin-bottom:var(--space-1)}
.ph-360-lenses{display:flex;flex-wrap:wrap;gap:var(--space-1)}
.ph-360-lens{font-size:10px;color:var(--color-text-tertiary);background:var(--color-bg-base);border:1px solid var(--color-border-default);border-radius:var(--r-xs);padding:2px 6px;font-family:var(--font-body)}
.ph-360-lens b{color:var(--color-accent);font-weight:var(--weight-semibold)}

/* ZONE 4: Exam Mode entry */
.ph-exam-entry{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-3);padding:var(--space-3) var(--space-4);background:var(--color-bg-elevated);border:1px solid var(--color-border-default);border-radius:var(--r-md);cursor:pointer;transition:border-color var(--transition-fast);-webkit-tap-highlight-color:transparent}
.ph-exam-entry:active{border-color:var(--color-info)}
.ph-exam-tag{font-size:10px;font-weight:var(--weight-semibold);color:var(--color-info);letter-spacing:0.06em;text-transform:uppercase;font-family:var(--font-body);margin-bottom:var(--space-1)}
.ph-exam-title{font-size:var(--text-base);font-weight:var(--weight-bold);color:var(--color-text-primary);font-family:var(--font-body)}
.ph-exam-meta{font-size:var(--text-xs);color:var(--color-text-tertiary);font-family:var(--font-body);margin-top:2px}
.ph-exam-arrow{font-size:var(--text-base);color:var(--color-info);font-family:var(--font-body);flex-shrink:0}

/* ZONE 5: Session Creator */
.ph-creator{padding:var(--space-4);background:var(--color-bg-elevated);border:1px solid var(--color-border-default);border-radius:var(--r-md);margin-bottom:var(--space-6)}
.ph-creator-label{font-size:10px;font-weight:var(--weight-semibold);letter-spacing:0.08em;text-transform:uppercase;color:var(--color-text-tertiary);font-family:var(--font-body);margin-bottom:var(--space-3)}
.ph-field-label{font-size:10px;font-weight:var(--weight-medium);letter-spacing:0.06em;text-transform:uppercase;color:var(--color-text-tertiary);font-family:var(--font-body);margin-top:var(--space-3);margin-bottom:var(--space-2)}
.ph-optional{font-size:9px;color:var(--color-text-tertiary);text-transform:none;letter-spacing:0;margin-left:4px}
.ph-pill-row{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ph-pill{padding:var(--space-1) var(--space-3);background:var(--color-bg-base);border:1px solid var(--color-border-default);border-radius:var(--r-pill);font-size:var(--text-xs);color:var(--color-text-tertiary);font-family:var(--font-body);cursor:pointer;transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent;white-space:nowrap}
.ph-pill.active{background:var(--color-accent-dim);border-color:var(--color-accent);color:var(--color-accent);font-weight:var(--weight-semibold)}
.ph-pill-completion{font-size:9px;opacity:0.65;margin-left:3px}
.ph-seg{display:flex;background:var(--color-bg-base);border:1px solid var(--color-border-default);border-radius:var(--r-sm);overflow:hidden}
.ph-seg-opt{flex:1;padding:var(--space-2) 0;font-size:var(--text-xs);text-align:center;color:var(--color-text-tertiary);background:none;border:none;cursor:pointer;font-family:var(--font-body);transition:all var(--transition-fast);border-right:1px solid var(--color-border-default)}
.ph-seg-opt:last-child{border-right:none}
.ph-seg-opt.active{background:var(--color-accent);color:var(--color-bg-base);font-weight:var(--weight-bold)}
.ph-custom-input{width:100%;margin-top:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--color-bg-base);border:1px solid var(--color-border-default);border-radius:var(--r-sm);color:var(--color-text-primary);font-size:var(--text-sm);font-family:var(--font-mono);outline:none;transition:border-color var(--transition-fast);box-sizing:border-box}
.ph-custom-input:focus{border-color:var(--color-accent)}

/* Bottom sheet animation */
@keyframes slideUp{from{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}

/* ============================================================
   MCQ: Bottom Sheets — shared base + per-sheet styles
   ============================================================ */

/* Shared overlay */
.mcq-sheet-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.55);z-index:100;display:none;opacity:0;transition:opacity var(--transition-normal)}
.mcq-sheet-overlay.open{display:block;opacity:1}

/* Shared sheet base */
/* z-index:301 — must clear #mobile-bottom-nav (z-index:300) or the nav's
   5 tabs render on top of the sheet's bottom content on mobile.
   Bottom padding adds 70px (matches #main{padding-bottom:70px}, the value
   the rest of the app already uses for the same nav) on top of the
   safe-area inset, so the action button isn't hidden behind the nav. */
.mcq-sheet{position:fixed;left:0;right:0;bottom:0;background:var(--color-bg-elevated);border-radius:var(--r-lg) var(--r-lg) 0 0;border-top:1px solid var(--color-border-default);z-index:301;padding:0 0 calc(env(safe-area-inset-bottom,0px) + 70px + var(--space-4));transform:translateY(100%);transition:transform var(--transition-normal),opacity var(--transition-normal);max-height:92vh;overflow-y:auto;-webkit-overflow-scrolling:touch;display:none;opacity:0}
.mcq-sheet.open{transform:translateY(0);display:block;opacity:1}
.mcq-sheet-close{position:absolute;top:var(--space-3);right:var(--space-3);width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--color-bg-subtle);border:none;border-radius:var(--r-full);color:var(--color-text-secondary);font-size:14px;line-height:1;cursor:pointer;z-index:1;transition:background var(--transition-fast)}
.mcq-sheet-close:active{background:var(--color-border-default)}
.mcq-sheet-handle{width:36px;height:3px;background:var(--color-border-strong);border-radius:var(--r-pill);margin:var(--space-3) auto var(--space-4)}
.mcq-sheet-eyebrow{font-size:9px;font-weight:var(--weight-semibold);letter-spacing:0.08em;text-transform:uppercase;padding:0 var(--space-4);margin-bottom:var(--space-1);display:block}
.mcq-sheet-title{font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--color-text-primary);font-family:var(--font-body);padding:0 var(--space-4);margin-bottom:2px}
.mcq-sheet-sub{font-size:var(--text-xs);color:var(--color-text-tertiary);font-family:var(--font-body);padding:0 var(--space-4);margin-bottom:var(--space-3)}
.mcq-sheet-label{font-size:9px;font-weight:var(--weight-medium);letter-spacing:0.08em;text-transform:uppercase;color:var(--color-text-tertiary);font-family:var(--font-body);padding:0 var(--space-4);margin-top:var(--space-3);margin-bottom:var(--space-2);display:block}
.mcq-sheet-divider{height:1px;background:var(--color-border-default);margin:var(--space-3) var(--space-4)}

/* Exam Mode sheet */
.ph-exam-sheet .mcq-sheet-eyebrow{color:var(--color-info)}
.ph-exam-sheet-start{display:block;margin:var(--space-4) var(--space-4) 0;padding:var(--space-3) 0;background:var(--color-info);color:var(--color-bg-base);font-size:var(--text-sm);font-weight:var(--weight-bold);font-family:var(--font-body);border:none;border-radius:var(--r-md);cursor:pointer;text-align:center;width:calc(100% - var(--space-8));transition:opacity var(--transition-fast)}
.ph-exam-sheet-start:active{opacity:0.85}
.ph-exam-bp-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-1) var(--space-4);border-bottom:1px solid var(--color-bg-subtle)}
.ph-exam-bp-row:last-child{border-bottom:none}
.ph-exam-bp-subject{font-size:var(--text-xs);color:var(--color-text-secondary);font-family:var(--font-body)}
.ph-exam-bp-count{font-size:var(--text-xs);color:var(--color-text-tertiary);font-family:var(--font-mono)}

/* 360° Drill sheet */
.ph-360-lens-pills{display:flex;flex-wrap:wrap;gap:var(--space-2);padding:0 var(--space-4)}
.ph-360-lens-pill{font-size:var(--text-xs);padding:var(--space-1) var(--space-3);border-radius:var(--r-pill);border:1px solid var(--color-border-default);color:var(--color-text-tertiary);background:var(--color-bg-base);cursor:pointer;font-family:var(--font-body);transition:all var(--transition-fast)}
.ph-360-lens-pill.active{background:var(--color-accent-dim);border-color:var(--color-accent);color:var(--color-accent);font-weight:var(--weight-semibold)}
.ph-360-lens-pill.all-lenses{background:rgba(212,175,55,0.15);border-color:var(--color-accent);color:var(--color-accent);font-weight:var(--weight-bold)}
.ph-360-context-line{margin:var(--space-2) var(--space-4);font-size:var(--text-xs);color:var(--color-text-tertiary);background:var(--color-bg-subtle);border-radius:var(--r-sm);padding:var(--space-2) var(--space-3);line-height:1.6;font-family:var(--font-body)}
.ph-360-context-line .lens-name{color:var(--color-accent);font-weight:var(--weight-semibold)}
.ph-360-drill-start{display:block;margin:var(--space-4) var(--space-4) 0;padding:var(--space-3) 0;background:var(--color-accent);color:var(--color-bg-base);font-size:var(--text-sm);font-weight:var(--weight-bold);font-family:var(--font-body);border:none;border-radius:var(--r-md);cursor:pointer;text-align:center;width:calc(100% - var(--space-8));transition:opacity var(--transition-fast)}
.ph-360-drill-start:active{opacity:0.85}

/* Weak Areas sheet */
.ph-weak-sheet .mcq-sheet-eyebrow{color:var(--color-danger)}
.ph-weak-summary{margin:0 var(--space-4) var(--space-3);background:rgba(225,90,90,0.06);border:1px solid rgba(225,90,90,0.18);border-radius:var(--r-md);padding:var(--space-3)}
.ph-weak-summary-label{font-size:9px;font-weight:var(--weight-semibold);color:var(--color-danger);letter-spacing:0.06em;text-transform:uppercase;margin-bottom:var(--space-2);font-family:var(--font-body)}
.ph-weak-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-1)}
.ph-weak-row:last-of-type{margin-bottom:0}
.ph-weak-subject-name{font-size:var(--text-xs);color:var(--color-text-primary);font-family:var(--font-body)}
.ph-weak-bar-wrap{display:flex;align-items:center;gap:var(--space-2)}
.ph-weak-bar-track{width:60px;height:3px;background:var(--color-bg-subtle);border-radius:var(--r-pill);overflow:hidden}
.ph-weak-bar-fill{height:100%;border-radius:var(--r-pill);transition:width var(--transition-slow)}
.ph-weak-pct{font-size:10px;font-family:var(--font-mono);font-weight:var(--weight-semibold)}
.ph-weak-hint{font-size:9px;color:var(--color-text-tertiary);margin-top:var(--space-2);font-family:var(--font-body)}
.ph-weak-start{display:block;margin:var(--space-4) var(--space-4) 0;padding:var(--space-3) 0;background:var(--color-danger);color:#fff;font-size:var(--text-sm);font-weight:var(--weight-bold);font-family:var(--font-body);border:none;border-radius:var(--r-md);cursor:pointer;text-align:center;width:calc(100% - var(--space-8));transition:opacity var(--transition-fast)}
.ph-weak-start:active{opacity:0.85}
.ph-weak-start:disabled{opacity:0.35;pointer-events:none}

/* Tablet 768px+ — sheets become centred modals
   NOTE: #ph-exam-sheet / #ph-360-drill-sheet / #ph-weak-sheet are DOM
   siblings of #mcq-sheet-overlay, not children of it (openSheet() in
   mcq-ui.js toggles classes on both but never reparents). On mobile this
   is masked because position:fixed ignores document flow either way —
   but flex centring on the overlay (align-items/justify-content) has
   nothing inside it to centre. Centring the sheet on itself via fixed
   positioning sidesteps the parent/child requirement entirely. */
@media (min-width:768px){
  .mcq-sheet-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.55);z-index:100;
    display:none;opacity:0;transition:opacity var(--transition-normal)}
  .mcq-sheet-overlay.open{display:block;opacity:1}
  .mcq-sheet{position:fixed;top:50%;left:50%;right:auto;bottom:auto;
    transform:translate(-50%,-50%) scale(0.96);
    max-width:480px;width:calc(100% - var(--space-8));
    border-radius:var(--r-lg);border:1px solid var(--color-border-default);
    max-height:80vh;padding-bottom:var(--space-4);
    display:none;opacity:0;transition:opacity var(--transition-normal),transform var(--transition-normal)}
  .mcq-sheet.open{display:block;opacity:1;transform:translate(-50%,-50%) scale(1)}
}

/* ════════════════════════════════════════════════════════════
   LEADERBOARD SCREEN
   ════════════════════════════════════════════════════════════ */
.lb-shell{padding:var(--space-4);font-family:var(--font-body)}

.lb-state-msg{text-align:center;font-size:var(--text-sm);color:var(--color-text-tertiary);padding:var(--space-8)}
.lb-state-error{color:var(--color-danger)}

/* ── Rows ──────────────────────────────────────────────────── */
.lb-row{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-4);border-bottom:1px solid var(--color-border-default)}
.lb-row:last-child{border-bottom:none}
.lb-rank{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-text-tertiary);width:28px;flex-shrink:0}
.lb-name{font-family:var(--font-body);font-size:var(--text-sm);color:var(--color-text-primary);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lb-score{font-family:var(--font-mono);font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--color-text-primary)}

.lb-row.own{background:var(--color-bg-subtle);border-left:3px solid var(--color-accent)}
.lb-row.own .lb-name{color:var(--color-accent)}
.lb-row.own .lb-score{color:var(--color-accent)}

.lb-row.gold .lb-name{color:var(--color-accent);font-weight:var(--weight-bold)}
.lb-row.gold .lb-score{color:var(--color-accent)}
.lb-row.silver .lb-name{color:var(--color-text-secondary)}
.lb-row.bronze .lb-name{color:var(--color-text-secondary)}

.lb-row.dashed{border:1px dashed var(--color-border-default);border-radius:var(--r-sm);margin:var(--space-3) var(--space-4) 0;padding:var(--space-2) var(--space-3)}

/* ── Top 3 podium panel ───────────────────────────────────── */
.lb-top3-panel{display:flex;gap:var(--space-2);padding:var(--space-3) var(--space-4);margin-bottom:var(--space-3)}
.lb-top3-panel.hidden{display:none !important}

.lb-top3-card{flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--space-3) var(--space-2);background:var(--color-bg-elevated);border:1px solid var(--color-border-default);border-radius:var(--r-md)}
.lb-top3-card.gold{background:var(--color-accent-dim);border-color:var(--color-accent)}
.lb-top3-card.silver{background:var(--color-bg-subtle)}
.lb-top3-card.bronze{background:var(--color-bg-subtle)}

.lb-top3-medal{font-size:var(--text-xl);margin-bottom:var(--space-1);line-height:1}
.lb-top3-name{font-family:var(--font-body);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--color-text-primary);margin-bottom:2px}
.lb-top3-score{font-family:var(--font-mono);font-size:10px;color:var(--color-text-tertiary)}

/* ── Own rank pinned wrapper ──────────────────────────────── */
.lb-own-rank-wrap{border-top:1px solid var(--color-border-default);margin-top:var(--space-3);padding-top:var(--space-3)}

/* ============================================================
   PRACTICE HUB v2 — Full Three-Device Layout
   Appended to styles.css — Sprint 7 / Track 2
   Tokens: Design Token System v1.0 only. No hardcoded hex.
   Append point: line 6606 (after leaderboard block)
   ============================================================ */

/* ─────────────────────────────────────────
   MOBILE SUB-TAB STRIP
   Gives mobile access to Review / Leaderboard / STATS
   without touching bottom nav. Hidden on tablet/desktop —
   replaced by ph-top-bar.
   ───────────────────────────────────────── */
#ph-sub-tab-strip {
  display: flex;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  background: var(--color-bg-elevated);
  border-bottom: 1px solid var(--color-border-default);
  flex-shrink: 0;
}
#ph-sub-tab-strip::-webkit-scrollbar {
  display: none;
}
.ph-sub-tab {
  display: flex;
  align-items: center;
  padding: 0 var(--space-4);
  height: 40px;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  font-family: var(--font-body);
  color: var(--color-text-tertiary);
  border: none;
  background: none;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  cursor: pointer;
  flex-shrink: 0;
  transition: color var(--transition-fast);
}
.ph-sub-tab.active {
  color: var(--color-text-primary);
  border-bottom-color: var(--color-accent);
}
@media (min-width: 768px) {
  #ph-sub-tab-strip {
    display: none;
  }
}

/* ─────────────────────────────────────────
   TOP BAR — tablet/desktop only
   Replaces mcq-tab-bar at 768px+.
   Promotes sub-navigation to chrome level.

   position: fixed (not sticky).
   #ph-top-bar is nested 5 levels deep —
   sticky top:0 pins to scroll ancestor
   not the viewport, causing a gap.
   fixed top:0 pins to real viewport top.
   left: var(--sidebar-width) avoids sidebar.
   #screen-practice-hub gets padding-top:48px
   to compensate for bar leaving flow.
   ───────────────────────────────────────── */
#ph-top-bar {
  display: none;
}
@media (min-width: 768px) {
  #ph-top-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 48px;
    padding: 0 var(--space-4);
    background: var(--color-bg-elevated);
    border-bottom: 1px solid var(--color-border-default);
    position: fixed;
    top: 0;
    left: var(--sidebar-width);
    right: 0;
    z-index: 50;
    flex-shrink: 0;
  }
  /* screen-practice-hub gets padding-top to clear the fixed ph-top-bar.
     Other MCQ sub-screens (leaderboard, performance, analytics, review)
     handle their own padding-top in the leaderboard/review/analytics block
     further below — their padding shorthand has been converted to explicit
     sides so padding-top: 48px is not reset. */
  #screen-practice-hub {
    padding-top: 48px;
  }
}
@media (min-width: 1280px) {
  #ph-top-bar {
    padding: 0 var(--space-6);
  }
}

/* Hide old mcq-tab-bar — replaced by ph-sub-tab-strip (mobile)
   and ph-top-bar (tablet+). Hidden at all sizes. */
.mcq-tab-bar {
  display: none !important;
}

/* ─────────────────────────────────────────
   TOP BAR TABS
   ───────────────────────────────────────── */
.ph-top-tabs {
  display: flex;
  align-items: stretch;
  height: 100%;
  gap: 0;
}
.ph-top-tab {
  display: flex;
  align-items: center;
  padding: 0 var(--space-3);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  font-family: var(--font-body);
  color: var(--color-text-tertiary);
  border: none;
  background: none;
  cursor: pointer;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  transition: color var(--transition-fast), border-color var(--transition-fast);
}
@media (min-width: 1280px) {
  .ph-top-tab {
    padding: 0 var(--space-4);
  }
}
.ph-top-tab:hover {
  color: var(--color-text-secondary);
}
.ph-top-tab.active {
  color: var(--color-text-primary);
  border-bottom-color: var(--color-accent);
}

/* ─────────────────────────────────────────
   TOP BAR ICONS — bell + avatar
   ───────────────────────────────────────── */
.ph-top-icons {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-shrink: 0;
}
.ph-top-icon-btn {
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: none;
  border: none;
  border-radius: var(--r-sm);
  color: var(--color-text-tertiary);
  font-size: 16px;
  opacity: 0.4;
  cursor: default;
  position: relative;
}
.ph-top-icon-btn:hover::after {
  content: "Coming soon";
  position: absolute;
  top: 38px;
  right: 0;
  background: var(--color-bg-overlay);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-xs);
  padding: 4px 8px;
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  font-family: var(--font-body);
  white-space: nowrap;
  z-index: 100;
  pointer-events: none;
}
.ph-top-avatar {
  width: 28px;
  height: 28px;
  border-radius: var(--r-pill);
  background: var(--color-accent-dim);
  border: 1px solid var(--color-accent);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  color: var(--color-accent);
  font-family: var(--font-body);
  cursor: pointer;
  flex-shrink: 0;
  position: relative;
}

/* ─────────────────────────────────────────
   AVATAR DROPDOWN
   Houses Profile / Settings / Add Qs / Sign Out
   ───────────────────────────────────────── */
.ph-avatar-dropdown {
  position: absolute;
  top: 36px;
  right: 0;
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
  padding: var(--space-1) 0;
  min-width: 160px;
  z-index: 200;
  display: none;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
}
.ph-avatar-dropdown.open {
  display: block;
}
.ph-avatar-dropdown-item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-4);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  font-family: var(--font-body);
  cursor: pointer;
  transition: background var(--transition-fast), color var(--transition-fast);
}
.ph-avatar-dropdown-item:hover {
  background: var(--color-bg-subtle);
  color: var(--color-text-primary);
}
.ph-avatar-dropdown-divider {
  height: 1px;
  background: var(--color-border-default);
  margin: var(--space-1) 0;
}

/* ─────────────────────────────────────────
   TWO-COLUMN CONTENT GRID
   60/40 split — reactive info left,
   intentional config right.
   Stacked on mobile.
   ───────────────────────────────────────── */
/* ─────────────────────────────────────────
   CONTENT GRID — mobile-first three-tier
   Mobile + tablet (<1024px): single column.
   At 768px with 240px sidebar only 524px
   content width is available — 0.667fr gives
   190px right column, too narrow for Build
   Your Session. Measured: 22 Jun 2026.
   Large tablet / desktop (1024px+): two cols.
   At 1024px content width ~784px giving
   ~319px right column — confirmed usable.
   ───────────────────────────────────────── */
#ph-content-grid {
  display: block;
  padding: var(--space-4);
  box-sizing: border-box;
}
@media (min-width: 1024px) {
  #ph-content-grid {
    display: grid;
    grid-template-columns: 1fr 0.667fr;
    gap: var(--space-4);
    align-items: start;
  }
}
@media (min-width: 1280px) {
  #ph-content-grid {
    gap: var(--space-6);
    padding: var(--space-6);
  }
}

/* ─────────────────────────────────────────
   LEFT + RIGHT COLUMN WRAPPERS
   ───────────────────────────────────────── */
#ph-col-left {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
#ph-col-right {
  display: flex;
  flex-direction: column;
}
@media (min-width: 1280px) {
  #ph-col-left {
    gap: var(--space-4);
  }
}

/* ─────────────────────────────────────────
   RESUME STRIP — mobile compact (hidden tablet+)
   Full card treatment not needed when
   screen real estate is scarce.
   ───────────────────────────────────────── */
#ph-resume-strip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: 10px var(--space-3);
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-left: 3px solid var(--color-accent);
  border-radius: var(--r-md);
}
@media (min-width: 768px) {
  #ph-resume-strip {
    display: none;
  }
}
.ph-resume-strip-eyebrow {
  font-size: 9px;
  font-weight: var(--weight-semibold);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-accent);
  font-family: var(--font-body);
  margin-bottom: 2px;
}
.ph-resume-strip-meta {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  font-family: var(--font-body);
}
.ph-resume-strip-btn {
  flex-shrink: 0;
  padding: 7px var(--space-3);
  background: var(--color-accent);
  color: var(--color-bg-base);
  border: none;
  border-radius: var(--r-sm);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  font-family: var(--font-body);
  cursor: pointer;
  white-space: nowrap;
}

/* ─────────────────────────────────────────
   RESUME CARD — tablet/desktop full treatment
   Progress bar + full CTA surfaces highest-
   priority action prominently.
   ───────────────────────────────────────── */
#ph-resume-card {
  display: none;
}
@media (min-width: 768px) {
  #ph-resume-card {
    display: block;
    background: var(--color-bg-elevated);
    border: 1px solid var(--color-border-default);
    border-left: 3px solid var(--color-accent);
    border-radius: var(--r-md);
    padding: var(--space-4);
  }
}
.ph-resume-eyebrow {
  font-size: 9px;
  font-weight: var(--weight-semibold);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-accent);
  font-family: var(--font-body);
  margin-bottom: var(--space-1);
}
.ph-resume-session-meta {
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  font-family: var(--font-body);
  margin-bottom: var(--space-3);
}
.ph-resume-progress-wrap {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
}
.ph-resume-progress-track {
  flex: 1;
  height: 4px;
  background: var(--color-bg-subtle);
  border-radius: var(--r-pill);
  overflow: hidden;
}
.ph-resume-progress-fill {
  height: 100%;
  background: var(--color-accent);
  border-radius: var(--r-pill);
  transition: width var(--transition-slow);
}
.ph-resume-progress-pct {
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}
.ph-resume-full-cta {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  width: 100%;
  height: 40px;
  background: var(--color-accent);
  color: var(--color-bg-base);
  border: none;
  border-radius: var(--r-md);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  font-family: var(--font-body);
  cursor: pointer;
  transition: opacity var(--transition-fast);
}
.ph-resume-full-cta:active {
  opacity: 0.85;
}
.ph-resume-full-cta:disabled,
.ph-resume-strip-btn:disabled {
  opacity: 0.35;
  cursor: not-allowed;
  pointer-events: none;
  background: var(--color-bg-elevated);
  color: var(--color-text-tertiary);
  border: 1px solid var(--color-border-default);
}
/* Card dimmed when no active session — border loses accent colour */
.ph-resume-card--inactive {
  border-left-color: var(--color-border-default) !important;
  opacity: 0.55;
}
.ph-resume-card--inactive .ph-resume-eyebrow {
  color: var(--color-text-tertiary);
}
.ph-resume-card--inactive .ph-resume-progress-fill {
  background: var(--color-text-tertiary);
}
/* Strip inactive — mirror card's muted state */
#ph-resume-strip.ph-strip--inactive {
  border-left-color: var(--color-border-default);
  opacity: 0.55;
}

/* ─────────────────────────────────────────
   QUICK ACTION CARDS — tablet/desktop 3-col
   Hidden on mobile (ph-quick-chips used instead).
   ───────────────────────────────────────── */
#ph-quick-cards {
  display: none;
}
@media (min-width: 768px) {
  #ph-quick-cards {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--space-2);
  }
}
@media (min-width: 1280px) {
  #ph-quick-cards {
    gap: var(--space-3);
  }
}
.ph-quick-card {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: 10px var(--space-2);
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
  cursor: pointer;
  transition: border-color var(--transition-fast);
  -webkit-tap-highlight-color: transparent;
}
@media (min-width: 1280px) {
  .ph-quick-card {
    gap: var(--space-3);
    padding: var(--space-3);
  }
}
.ph-quick-card:active {
  border-color: var(--color-accent);
}
.ph-qc-icon {
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-sm);
  font-size: 15px;
  flex-shrink: 0;
}
.ph-qc-icon.srs  { background: var(--color-accent-dim);  color: var(--color-accent); }
.ph-qc-icon.weak { background: var(--color-danger-dim);  color: var(--color-danger); }
.ph-qc-icon.exam { background: var(--color-info-dim);    color: var(--color-info);   }
.ph-qc-label {
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  color: var(--color-text-primary);
  font-family: var(--font-body);
  line-height: 1.2;
}
.ph-qc-sub {
  font-size: 10px;
  color: var(--color-text-tertiary);
  font-family: var(--font-body);
  margin-top: 2px;
}

/* ─────────────────────────────────────────
   MOBILE QUICK CHIPS — 2-col grid
   Uses existing .ph-chip class (line 6437).
   Hidden on tablet/desktop — quick cards used instead.
   ───────────────────────────────────────── */
#ph-quick-chips {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-2);
}
@media (min-width: 768px) {
  #ph-quick-chips {
    display: none;
  }
}

/* ─────────────────────────────────────────
   EXAM MODE CARD — mobile only
   On mobile exam mode is a dedicated entry card.
   On tablet/desktop it becomes one of the three
   quick cards.
   ───────────────────────────────────────── */
#ph-exam-card-mobile {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-3) var(--space-4);
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-left: 3px solid var(--color-info);
  border-radius: var(--r-md);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
@media (min-width: 768px) {
  #ph-exam-card-mobile {
    display: none;
  }
}

/* ─────────────────────────────────────────
   TOPIC SEARCH CARD
   Gold left-bar = user-initiated discovery.
   Scope badge preserves paper context.
   ───────────────────────────────────────── */
#ph-360-view-card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-left: 3px solid var(--color-accent);
  border-radius: var(--r-md);
  padding: var(--space-4);
}
.ph-topic-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--space-3);
}
.ph-topic-title {
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  color: var(--color-text-primary);
  font-family: var(--font-body);
}
.ph-topic-scope {
  font-size: 9px;
  color: var(--color-accent);
  font-family: var(--font-mono);
  background: var(--color-bg-subtle);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-pill);
  padding: 2px var(--space-2);
}
.ph-topic-input {
  width: 100%;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-base);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-sm);
  color: var(--color-text-tertiary);
  font-size: var(--text-sm);
  font-family: var(--font-body);
  outline: none;
  box-sizing: border-box;
  transition: border-color var(--transition-fast);
}
.ph-topic-input:focus {
  border-color: var(--color-accent);
  color: var(--color-text-primary);
}
.ph-popular-label {
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  font-family: var(--font-body);
  margin-top: var(--space-3);
  margin-bottom: var(--space-2);
}
.ph-popular-chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}
.ph-popular-chip {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  background: var(--color-bg-base);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-pill);
  padding: 4px var(--space-3);
  cursor: pointer;
  font-family: var(--font-body);
  transition: border-color var(--transition-fast), color var(--transition-fast);
}
.ph-popular-chip:hover {
  border-color: var(--color-accent);
  color: var(--color-accent);
}

/* ─────────────────────────────────────────
   SESSION SUMMARY CARD — desktop only
   Dropped on tablet to save right-column
   scroll length. Desktop left column has
   enough vertical space.
   ───────────────────────────────────────── */
#ph-session-summary {
  display: none;
}
@media (min-width: 1280px) {
  #ph-session-summary {
    display: block;
    background: var(--color-bg-elevated);
    border: 1px solid var(--color-border-default);
    border-radius: var(--r-md);
    padding: var(--space-3) var(--space-4);
  }
}
.ph-summary-tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-bottom: var(--space-2);
}
.ph-summary-tag {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  font-family: var(--font-body);
}
.ph-summary-link {
  font-size: var(--text-xs);
  color: var(--color-accent);
  font-family: var(--font-body);
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
}

/* ─────────────────────────────────────────
   STATS BAR
   4-stat persistent performance snapshot.
   Day Streak = 30-Q daily goal (confirmed).
   ───────────────────────────────────────── */
#ph-stats-bar {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
  padding: var(--space-3) var(--space-4);
  display: flex;
  align-items: center;
}
.ph-stat {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 1;
}
.ph-stat + .ph-stat {
  border-left: 1px solid var(--color-border-default);
  padding-left: var(--space-3);
}
@media (min-width: 1280px) {
  .ph-stat + .ph-stat {
    padding-left: var(--space-4);
  }
}
.ph-stat-value {
  font-size: var(--text-lg);
  font-weight: var(--weight-bold);
  color: var(--color-text-primary);
  font-family: var(--font-mono);
  line-height: 1;
}
@media (min-width: 768px) {
  .ph-stat-value {
    font-size: var(--text-xl);
  }
}
.ph-stat-value.positive {
  color: var(--color-success);
}
.ph-stat-label {
  font-size: 9px;
  color: var(--color-text-tertiary);
  font-family: var(--font-body);
  margin-top: 2px;
}

/* ─────────────────────────────────────────
   BUILD YOUR SESSION PANEL — tablet/desktop
   Sticky right panel keeps CTA in view
   while user scrolls left column.
   Hidden on mobile — ph-creator-mobile used.
   ───────────────────────────────────────── */
#ph-build-panel {
  display: none;
}
@media (min-width: 768px) {
  #ph-build-panel {
    display: block;
    background: var(--color-bg-elevated);
    border: 1px solid var(--color-border-default);
    border-radius: var(--r-md);
    padding: var(--space-4);
    position: sticky;
    top: 60px;
  }
}
.ph-build-title {
  font-size: var(--text-base);
  font-weight: var(--weight-semibold);
  color: var(--color-text-primary);
  font-family: var(--font-body);
  margin-bottom: var(--space-4);
  padding-bottom: var(--space-3);
  border-bottom: 1px solid var(--color-border-default);
}
.ph-build-lbl {
  font-size: 9px;
  font-weight: var(--weight-semibold);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  font-family: var(--font-body);
  margin-bottom: var(--space-1);
}
.ph-build-2col {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
}
.ph-build-field {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}
.ph-build-select-wrap {
  position: relative;
}
.ph-build-select {
  width: 100%;
  padding: var(--space-2) var(--space-6) var(--space-2) var(--space-3);
  background: var(--color-bg-base);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-sm);
  color: var(--color-text-primary);
  font-size: var(--text-sm);
  font-family: var(--font-body);
  outline: none;
  appearance: none;
  -webkit-appearance: none;
  cursor: pointer;
  box-sizing: border-box;
  transition: border-color var(--transition-fast);
}
.ph-build-select:focus {
  border-color: var(--color-accent);
}
.ph-build-select-wrap::after {
  content: "▾";
  position: absolute;
  right: var(--space-3);
  top: 50%;
  transform: translateY(-50%);
  font-size: 10px;
  color: var(--color-text-tertiary);
  pointer-events: none;
}
.ph-build-row {
  margin-bottom: var(--space-3);
}
.ph-build-stepper {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-top: var(--space-1);
}
.ph-stepper-btn {
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-bg-subtle);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-pill);
  color: var(--color-text-primary);
  font-size: var(--text-base);
  cursor: pointer;
  flex-shrink: 0;
  font-family: var(--font-body);
  transition: background var(--transition-fast);
}
.ph-stepper-btn:hover {
  background: var(--color-bg-overlay);
}
.ph-stepper-count {
  font-size: var(--text-lg);
  font-weight: var(--weight-bold);
  font-family: var(--font-mono);
  color: var(--color-text-primary);
  min-width: 40px;
  text-align: center;
}
.ph-more-filters-btn {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  font-family: var(--font-body);
  background: none;
  border: none;
  cursor: pointer;
  padding: var(--space-2) 0;
  width: 100%;
  transition: color var(--transition-fast);
}
.ph-more-filters-btn:hover {
  color: var(--color-text-secondary);
}
.ph-more-filters-body {
  display: none;
  margin-top: var(--space-2);
}
.ph-more-filters-body.open {
  display: block;
}

/* ─────────────────────────────────────────
   START SESSION BUTTON — build panel
   Disabled by default; enabled via .enabled
   class toggle in JS once paper is selected.
   ───────────────────────────────────────── */
#ph-panel-start-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  width: 100%;
  height: 48px;
  margin-top: var(--space-4);
  background: var(--color-accent);
  color: var(--color-bg-base);
  border: none;
  border-radius: var(--r-md);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  font-family: var(--font-body);
  cursor: pointer;
  opacity: 0.35;
  pointer-events: none;
  transition: opacity var(--transition-fast);
}
#ph-panel-start-btn.enabled {
  opacity: 1;
  pointer-events: auto;
}

/* ─────────────────────────────────────────
   MOBILE SESSION CREATOR
   Pills + segs. Wraps existing creator.
   Hidden on tablet/desktop — build panel used.
   ───────────────────────────────────────── */
#ph-creator-mobile {
  display: block;
}
@media (min-width: 768px) {
  #ph-creator-mobile {
    display: none;
  }
}
.ph-creator-eyebrow {
  font-size: 9px;
  font-weight: var(--weight-semibold);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--color-accent);
  font-family: var(--font-body);
  border-left: 3px solid var(--color-accent);
  padding-left: var(--space-3);
  margin-bottom: var(--space-4);
}

/* ============================================================
   READING COLUMN CAP — Focused screens only
   Applied 22 Jun 2026 — responsive layout fix.

   Background: .mcq-app .app previously had global max-width
   caps (720px tablet / 1200px desktop) that compressed ALL
   screens — dashboards, analytics, leaderboard — into a
   reading-column width. This was wrong architecture.

   Fix: caps removed from .mcq-app .app entirely.
   Reading cap now lives ONLY on the 3 screens where a
   focused reading column is genuine UX:
     - screen-practice    (question stem + options)
     - screen-results     (session end summary)
     - screen-custom-block (focused config form)

   All other screens (hub, leaderboard, review, analytics,
   performance, weak, add) now fill available width naturally.
   ============================================================ */

/* ── TABLET: reading cap on focused screens only ─────────── */
@media (min-width: 768px) {
  #screen-practice,
  #screen-results,
  #screen-custom-block {
    max-width: 720px;
    margin: 0 auto;
    padding: 0 var(--main-padding-tablet);
    box-sizing: border-box;
  }
}

/* ── DESKTOP: reading cap on focused screens only ────────── */
@media (min-width: 1280px) {
  #screen-practice,
  #screen-results,
  #screen-custom-block {
    max-width: 760px;
    margin: 0 auto;
    padding: 0 var(--main-padding-desktop);
    box-sizing: border-box;
  }
}

/* ── MOBILE: remove double-padding on dashboard screens ──── */
/* .mcq-app .screen padding is now 0 (edit above).           */
/* Each screen manages its own internal padding.             */
/* Focused screens get explicit padding at their content     */
/* level to maintain breathing room on narrow viewports.     */
@media (max-width: 767px) {
  #screen-practice,
  #screen-results,
  #screen-custom-block {
    padding: 0 var(--main-padding-mobile);
    box-sizing: border-box;
  }
}

/* ── PRACTICE HUB: restore tablet padding in grid ───────── */
/* ph-content-grid already has padding: var(--space-4) base. */
/* At tablet, restore padding since .app no longer pads.     */
@media (min-width: 768px) {
  #ph-content-grid {
    padding: var(--space-4);
  }
}

/* ── LEADERBOARD, REVIEW, ANALYTICS, PERFORMANCE ─────────── */
/* These screens now fill the full content column.           */
/* Add comfortable internal padding so content isn't flush   */
/* against the sidebar gap edge.                             */
#screen-leaderboard,
#screen-review,
#screen-analytics,
#screen-performance,
#screen-weak,
#screen-add {
  padding: 0 var(--space-4);
  box-sizing: border-box;
}
@media (min-width: 768px) {
  #screen-leaderboard,
  #screen-review,
  #screen-analytics,
  #screen-performance,
  #screen-weak,
  #screen-add {
    /* padding shorthand would reset padding-top to 0 and hide content
       under the fixed ph-top-bar — use explicit sides instead */
    padding-top: 48px;
    padding-right: var(--space-6);
    padding-bottom: 0;
    padding-left: var(--space-6);
  }
}
@media (min-width: 1280px) {
  #screen-leaderboard,
  #screen-review,
  #screen-analytics,
  #screen-performance,
  #screen-weak,
  #screen-add {
    padding-top: 48px;
    padding-right: var(--space-8);
    padding-bottom: 0;
    padding-left: var(--space-8);
  }
}

/* ── PAGE-MCQ ─────────────────────────────────────────────────
   #main no longer has desktop padding (removed Option 3).
   No cancel hack needed. #page-mcq fills #main naturally.
   22 Jun 2026.
────────────────────────────────────────────────────────────── */
#page-mcq {
  box-sizing: border-box;
  width: 100%;
}

/* ============================================================
   MEDPREP BRANDING — Sidebar, Header & Auth Responsive
   ============================================================ */

/* ── T2 SIDEBAR: Icon beside wordmark ───────────────────── */
.t2-sidebar-wordmark {
  display: flex;
  align-items: center;
  gap: 10px;
}

.t2-sidebar-icon-img {
  width: 32px;
  height: 32px;
  object-fit: contain;
  flex-shrink: 0;
  border-radius: 6px;
}

/* ── HOME HEADER BAR: Icon beside wordmark ──────────────── */
.home-header-icon {
  width: 32px;
  height: 32px;
  object-fit: contain;
  flex-shrink: 0;
  border-radius: 6px;
  margin-right: 2px;
}

.home-header-left {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ── AUTH GATE: Responsive ───────────────────────────────── */
@media (max-width: 480px) {
  .auth-card {
    padding: 32px 24px;
    border-radius: 16px;
  }
  .auth-main-logo {
    max-width: 140px;
  }
  .auth-title {
    font-size: 19px;
  }
  .auth-tagline {
    font-size: 12px;
  }
  .auth-google-btn {
    height: 48px;
    font-size: 14px;
  }
}

@media (max-width: 360px) {
  .auth-main-logo  { max-width: 120px; }
  .auth-tagline    { font-size: 11px; }
  .home-header-icon { width: 26px; height: 26px; }
}
/* ============================================================
   SYLLABUS DASHBOARD — syl-* components
   Sprint S-B | Matches Practice page card system
   Paste this at the bottom of styles.css
   ============================================================ */

/* ── Outer wrapper ─────────────────────────────────────────── */
.syl-dashboard {
  padding: 24px;
  max-width: 900px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 24px;
}

/* ── Paper strip (Active paper + pills) ────────────────────── */
.syl-paper-strip {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: 12px;
  padding: 20px 24px;
}

.syl-active-label {
  font-size: var(--text-xs);
  font-family: var(--font-body);
  color: var(--color-text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: 4px;
}

.syl-active-name {
  font-size: var(--text-lg);
  font-family: var(--font-display);
  color: var(--color-text-primary);
  font-weight: 600;
  margin-bottom: 14px;
}

.syl-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.syl-paper-pill {
  font-size: var(--text-sm);
  font-family: var(--font-body);
  font-weight: 600;
  padding: 5px 14px;
  border-radius: 20px;
  border: 1px solid var(--color-border-strong);
  background: var(--color-bg-overlay);
  color: var(--color-text-secondary);
  cursor: pointer;
  transition: all 0.2s;
}

.syl-paper-pill:hover {
  border-color: var(--color-accent);
  color: var(--color-accent);
}

/* ── Section wrapper ───────────────────────────────────────── */
.syl-section {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: 12px;
  padding: 20px 24px;
}

.syl-section-header {
  font-size: var(--text-sm);
  font-family: var(--font-body);
  font-weight: 700;
  color: var(--color-text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: 16px;
}

.syl-empty {
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
  padding: 16px 0;
}

/* ── Subject rows (Topics section) ────────────────────────── */
.syl-subjects-list {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.syl-subject-row {
  border-radius: 8px;
  overflow: hidden;
  border: 1px solid transparent;
  transition: border-color 0.2s;
}

.syl-subject-row:hover {
  border-color: var(--color-border-default);
}

.syl-subject-header {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 11px 14px;
  cursor: pointer;
  background: var(--color-bg-overlay);
  border-radius: 8px;
  transition: background 0.2s;
  user-select: none;
}

.syl-subject-header:hover {
  background: var(--color-bg-subtle);
}

.syl-subject-name {
  font-size: var(--text-base);
  font-family: var(--font-body);
  font-weight: 600;
  color: var(--color-text-primary);
  flex: 1;
  min-width: 0;
}

.syl-subject-bar-wrap {
  width: 80px;
  height: 4px;
  background: var(--color-bg-subtle);
  border-radius: 2px;
  overflow: hidden;
  flex-shrink: 0;
}

.syl-subject-bar-fill {
  height: 100%;
  border-radius: 2px;
  transition: width 0.6s ease;
}

.syl-subject-pct {
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  font-weight: 700;
  min-width: 34px;
  text-align: right;
  flex-shrink: 0;
}

.syl-subject-chevron {
  font-size: 18px;
  color: var(--color-text-tertiary);
  transition: transform 0.2s ease;
  flex-shrink: 0;
  line-height: 1;
}

/* ── Subject body (expanded topics) ───────────────────────── */
.syl-subject-body {
  background: var(--color-bg-base);
  border-top: 1px solid var(--color-border-default);
  padding: 4px 0 8px;
}

.syl-topic-list {
  display: flex;
  flex-direction: column;
}

.syl-topic-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 9px 14px;
  border-bottom: 1px solid rgba(255,255,255,0.04);
  transition: background 0.15s;
}

.syl-topic-row:last-child {
  border-bottom: none;
}

.syl-topic-row:hover {
  background: var(--color-bg-overlay);
}

.syl-topic-text {
  font-size: var(--text-sm);
  font-family: var(--font-body);
  flex: 1;
  min-width: 0;
  line-height: 1.4;
}

.syl-topic-controls {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}

/* ── Revision boxes ────────────────────────────────────────── */
.syl-rev-boxes {
  display: flex;
  gap: 4px;
}

.syl-rev-box {
  width: 22px;
  height: 22px;
  border-radius: 4px;
  border: 1px solid var(--color-border-strong);
  background: var(--color-bg-subtle);
  color: var(--color-text-tertiary);
  font-size: 10px;
  font-family: var(--font-mono);
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all 0.15s;
  user-select: none;
}

.syl-rev-box:hover {
  border-color: var(--color-accent);
  color: var(--color-accent);
}

.syl-rev-box.done {
  color: #fff;
}

/* ── Confidence stars ──────────────────────────────────────── */
.syl-conf-stars {
  display: flex;
  gap: 2px;
}

.syl-star {
  font-size: 14px;
  cursor: pointer;
  transition: transform 0.1s;
  user-select: none;
  line-height: 1;
}

.syl-star:hover {
  transform: scale(1.3);
}

/* ── 360° VIEW PREVIEW — DASHBOARD ──────────────────────── */
/* Sprint S-C — replaces stub                                 */
.syl-360-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--space-3);
  margin-bottom: var(--space-2);
}
.syl-360-grid.single {
  grid-template-columns: 1fr;
}
.syl-360-card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
  padding: var(--space-3);
  border-left-width: 3px;
  border-left-style: solid;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.syl-360-card-title {
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  color: var(--color-text-primary);
  line-height: 1.5;
}
.syl-360-card-meta {
  font-size: 10px;
  color: var(--color-text-tertiary);
  font-family: var(--font-mono);
}
.syl-360-card-fraction {
  font-size: 10px;
  font-family: var(--font-mono);
  color: var(--color-text-tertiary);
}
.syl-360-bar-wrap {
  height: 3px;
  background: var(--color-bg-subtle);
  border-radius: var(--r-pill);
  overflow: hidden;
}
.syl-360-bar-fill {
  height: 100%;
  border-radius: var(--r-pill);
  transition: width var(--transition-slow);
}
.syl-360-badge {
  display: inline-block;
  font-size: 10px;
  font-family: var(--font-mono);
  font-weight: var(--weight-bold);
  padding: 2px var(--space-2);
  border-radius: var(--r-pill);
  border: 1px solid;
  align-self: flex-start;
}
.syl-360-badge.done {
  color: var(--color-success);
  border-color: var(--color-success);
  background: var(--color-success-dim);
}
.syl-360-badge.in-progress {
  color: var(--color-warning);
  border-color: var(--color-warning);
  background: var(--color-warning-dim);
}
.syl-see-all {
  display: block;
  text-align: right;
  font-size: var(--text-xs);
  color: var(--color-accent);
  font-family: var(--font-mono);
  cursor: pointer;
  padding: var(--space-1) 0;
  -webkit-tap-highlight-color: transparent;
}
.syl-see-all:hover { opacity: 0.8; }

.syl-see-all-btn-wrap {
  display: flex;
  justify-content: center;
  padding: var(--space-3) 0 var(--space-1);
}
.syl-see-all-btn {
  background: transparent;
  border: 1.5px solid;
  border-radius: var(--r-pill);
  font-size: var(--text-sm);
  font-family: var(--font-mono);
  font-weight: var(--weight-bold);
  letter-spacing: 0.04em;
  padding: var(--space-2) var(--space-6);
  cursor: pointer;
  transition: opacity var(--transition-fast), background var(--transition-fast);
  -webkit-tap-highlight-color: transparent;
  min-height: 44px;
}
.syl-see-all-btn:hover {
  opacity: 0.75;
}

/* ── Readiness grid ────────────────────────────────────────── */
.syl-readiness-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: 12px;
}

.syl-readiness-card {
  background: var(--color-bg-overlay);
  border: 1px solid var(--color-border-default);
  border-radius: 10px;
  padding: 14px 16px;
  transition: border-color 0.2s;
}

.syl-readiness-card:hover {
  border-color: var(--color-border-strong);
}

.syl-readiness-subj-name {
  font-size: var(--text-xs);
  font-weight: 700;
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.syl-readiness-stats {
  display: flex;
  justify-content: space-between;
  gap: 6px;
}

.syl-readiness-stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  flex: 1;
}

.syl-readiness-val {
  font-size: var(--text-base);
  font-family: var(--font-mono);
  font-weight: 700;
  color: var(--color-text-primary);
  line-height: 1;
}

.syl-readiness-label {
  font-size: 10px;
  color: var(--color-text-tertiary);
  text-align: center;
}

/* ── Mobile responsive ─────────────────────────────────────── */
@media (max-width: 600px) {
  .syl-dashboard {
    padding: 14px;
    gap: 14px;
  }

  .syl-paper-strip,
  .syl-section {
    padding: 14px 16px;
  }

  .syl-subject-bar-wrap {
    width: 50px;
  }

  .syl-topic-row {
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
  }

  .syl-topic-controls {
    width: 100%;
    justify-content: space-between;
  }

  .syl-readiness-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .syl-360-grid {
    grid-template-columns: 1fr;
  }

  .syl-rev-box {
    width: 20px;
    height: 20px;
    font-size: 9px;
  }
}

/* ── Tablet (601px – 1024px) ───────────────────────────────── */
@media (min-width: 601px) and (max-width: 1024px) {
  .syl-dashboard {
    padding: 20px;
    gap: 20px;
  }

  .syl-readiness-grid {
    grid-template-columns: repeat(3, 1fr);
  }

  .syl-360-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .syl-subject-bar-wrap {
    width: 100px;
  }
}

/* ── Desktop (1025px+) ─────────────────────────────────────── */
@media (min-width: 1025px) {
  .syl-dashboard {
    padding: 28px 32px;
    gap: 28px;
    max-width: 960px;
  }

  .syl-readiness-grid {
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  }

  .syl-360-grid {
    grid-template-columns: repeat(3, 1fr);
  }

  .syl-subject-bar-wrap {
    width: 120px;
  }

  .syl-subject-name {
    font-size: var(--text-md);
  }

  .syl-topic-text {
    font-size: var(--text-base);
  }

  .syl-rev-box {
    width: 24px;
    height: 24px;
    font-size: 11px;
  }

  .syl-star {
    font-size: 16px;
  }
}
/* ── SYL-ROOT CONTAINER ──────────────────────────────────────
   Ensures render root fills t2-page flex container so
   media queries fire correctly at tablet and desktop.
────────────────────────────────────────────────────────────── */
#syl-root {
  width: 100%;
  min-width: 0;
  flex: 1;
}

/* ── PAGE-SYLLABUS + PAGE-360VIEW OFFSET FIX ────────────────
   Both pages are t2-page inside #main which already gets
   margin-left:240px at ≥768px. t2-page adds another 240px —
   double offset. Override to zero for these pages only.
────────────────────────────────────────────────────────────── */
@media (min-width: 768px) {
  #page-syllabus,
  #page-360view {
    margin-left: 0;
    width: 100%;
    max-width: 100%;
  }
  #view360-root {
    width: 100%;
    min-width: 0;
    flex: 1;
  }
}

/* ============================================================
   360° VIEW — FULL SUB-PAGE — Sprint S-C
   Designer: Senior Design Architect · Date: 27 June 2026
   Zero hardcoded hex. All tokens from v1.0 + supplement.
   Mobile-first. 360px base.
   ============================================================ */

.view360-page {
  width: 100%;
  box-sizing: border-box;
}
.view360-back-bar {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-4) var(--space-4) var(--space-2);
}
.view360-back-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  min-width: 44px;
  background: none;
  border: none;
  color: var(--color-text-secondary);
  font-size: var(--text-lg);
  cursor: pointer;
  border-radius: var(--r-sm);
  transition: color var(--transition-fast);
  -webkit-tap-highlight-color: transparent;
  margin-left: calc(var(--space-2) * -1);
}
.view360-back-btn:hover { color: var(--color-text-primary); }
.view360-title {
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  color: var(--color-text-primary);
  font-family: var(--font-display);
  line-height: 1.25;
}
.view360-pills-wrap {
  padding: var(--space-2) var(--space-4) var(--space-3);
}
.view360-subheader {
  padding: 0 var(--space-4) var(--space-3);
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  color: var(--color-text-tertiary);
  letter-spacing: 0.06em;
}
.view360-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: 0 var(--space-4) var(--space-8);
}
.view360-card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-default);
  border-radius: var(--r-md);
  padding: var(--space-3) var(--space-4);
  border-left-width: 3px;
  border-left-style: solid;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.view360-card-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-3);
}
.view360-card-title {
  font-size: var(--text-base);
  font-weight: var(--weight-semibold);
  color: var(--color-text-primary);
  flex: 1;
  min-width: 0;
  line-height: 1.4;
}
.view360-card-fraction {
  font-size: var(--text-sm);
  font-family: var(--font-mono);
  font-weight: var(--weight-bold);
  flex-shrink: 0;
  line-height: 1.25;
}
.view360-tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
}
.view360-tag {
  font-size: 10px;
  font-family: var(--font-mono);
  padding: 2px var(--space-2);
  border-radius: var(--r-pill);
  background: var(--color-bg-subtle);
  color: var(--color-text-secondary);
  border: 1px solid var(--color-border-default);
  white-space: nowrap;
}
.view360-bar-wrap {
  height: 4px;
  background: var(--color-bg-subtle);
  border-radius: var(--r-pill);
  overflow: hidden;
}
.view360-bar-fill {
  height: 100%;
  border-radius: var(--r-pill);
  transition: width var(--transition-slow);
}

/* ── TABLET (≥ 768px) ────────────────────────────────────── */
@media (min-width: 768px) {
  .view360-list,
  .view360-back-bar,
  .view360-pills-wrap,
  .view360-subheader {
    max-width: 100%;
    width: 100%;
    margin-left: 0;
    margin-right: 0;
  }
}

/* ── DESKTOP (≥ 1280px) ──────────────────────────────────── */
@media (min-width: 1280px) {
  .view360-page { padding: var(--space-4) var(--space-8); }
  .view360-list {
    max-width: 100%;
    margin: 0;
  }
  .view360-back-bar,
  .view360-pills-wrap,
  .view360-subheader {
    max-width: 100%;
    margin-left: 0;
    margin-right: 0;
  }
}
