:root {
  --bg-primary: #faf9f6;
  --bg-secondary: #f5f3ee;
  --bg-card: #ffffff;
  --bg-card-hover: #f5f3ee;
  --bg-input: #f5f3ee;
  --accent: #506d48;
  --accent-hover: #41573b;
  --accent-dim: #e4ebe0;
  /* Soft green for selected sidebar items — dark text/icons stay readable on it. */
  --accent-soft: #E8EFE6;
  --accent-fg: #ffffff;
  --primary: var(--accent);
  /* Structural gradient tokens consumed by css/main.css (merged v2.3.1): .btn-primary,
     .nav-link.active, the page-header rule and the card/section top bar. CentralizeTV greens only:
     the upstream violet (#8b5cf6) / blue (#3b82f6) release palette is deliberately not used. */
  --accent-2: #41573b;
  --accent-3: #82a077;
  --grad-accent: linear-gradient(135deg, var(--accent), var(--accent-2));
  --grad-bar: linear-gradient(90deg, var(--accent-2), var(--accent-3));
  --text-primary: #1c1a16;
  --text-secondary: #5d594f;
  --text-muted: #7d786c;
  --success: #5a8a5f;
  --success-dim: rgba(90, 138, 95, 0.12);
  --danger: #a94a3c;
  --danger-dim: rgba(169, 74, 60, 0.12);
  --warning: #b07a2b;
  --warning-dim: rgba(176, 122, 43, 0.12);
  --border: #e7e3da;
  --border-light: #d2cdbf;
  --radius: 8px;
  --radius-lg: 12px;
  --shadow: 0 4px 12px -2px rgba(20, 18, 14, 0.06), 0 2px 4px -1px rgba(20, 18, 14, 0.04);
  --shadow-sm: 0 1px 2px 0 rgba(20, 18, 14, 0.05), 0 1px 1px 0 rgba(20, 18, 14, 0.03);
  --sidebar-width: 220px;
  --transition: 200ms cubic-bezier(0.2, 0, 0, 1);
  /* Aliases for names some views use (drop indicators, the slide editor) that were never defined, so
     their outlines and fields fell back to nothing. They follow the brand tokens above. */
  --surface: var(--bg-input);
  --text: var(--text-primary);
  --radius-md: var(--radius);
  color-scheme: light;
}

/* Sage dark — drawn separately (not inverted). Selected via data-theme from
   the existing white-label bg luminance / prefers-color-scheme (brand-prime). */
[data-theme="dark"] {
  --bg-primary: #161510;
  --bg-secondary: #272620;
  --bg-card: #1d1c17;
  --bg-card-hover: #272620;
  --bg-input: #272620;
  --accent: #82a077;
  --accent-hover: #a4ba9a;
  --accent-dim: rgba(130, 160, 119, 0.16);
  --accent-soft: rgba(130, 160, 119, 0.22);
  --accent-fg: #161510;
  --primary: var(--accent);
  --text-primary: #f5f4ef;
  --text-secondary: #8e8b7f;
  /* Was #605e54 (~2.3–2.8:1). Kept just under --text-secondary for hierarchy;
     ≥4.5:1 on --bg-primary/--bg-card, ~4.2:1 on --bg-input. */
  --text-muted: #8a877b;
  --success: #82a077;
  --success-dim: rgba(130, 160, 119, 0.18);
  --danger: #c87263;
  --danger-dim: rgba(200, 114, 99, 0.18);
  --warning: #d09455;
  --warning-dim: rgba(208, 148, 85, 0.18);
  --border: #33312a;
  --border-light: #444239;
  --shadow: 0 4px 12px -2px rgba(0, 0, 0, 0.45), 0 2px 4px -1px rgba(0, 0, 0, 0.30);
  --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.40), 0 1px 1px 0 rgba(0, 0, 0, 0.20);
  color-scheme: dark;
}
