:root {
  /* Surfaces */
  --bg: #f8f9fb;
  --bg-subtle: #f1f3f6;
  --surface: #ffffff;
  --surface-hover: #fafbfc;
  --surface-dark: #111827;
  --surface-dark-hover: #1f2937;

  /* Ink */
  --ink: #111827;
  --ink-secondary: #4b5563;
  --ink-tertiary: #9ca3af;
  --ink-inverse: #f9fafb;
  --ink-inverse-secondary: rgba(255, 255, 255, 0.7);

  /* Borders */
  --border: #e5e7eb;
  --border-hover: #d1d5db;
  --border-focus: #5da9e9;

  /* Accent — warm coral */
  --accent: #e07a4f;
  --accent-hover: #c96a42;
  --accent-soft: rgba(224, 122, 79, 0.1);
  --accent-border: rgba(224, 122, 79, 0.25);

  /* Indigo — primary actions */
  --primary: #5da9e9;
  --primary-hover: #3e8fd0;
  --primary-soft: rgba(93, 169, 233, 0.08);

  /* Semantic */
  --success: #059669;
  --success-soft: rgba(5, 150, 105, 0.08);
  --warn: #d97706;
  --warn-soft: rgba(217, 119, 6, 0.08);
  --danger: #dc2626;
  --danger-hover: #b91c1c;
  --danger-soft: rgba(220, 38, 38, 0.08);
  --teal: #0d9488;
  --teal-soft: rgba(13, 148, 136, 0.08);

  /* Shadows */
  --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
  --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
  --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.07), 0 2px 4px -2px rgba(0, 0, 0, 0.05);
  --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -4px rgba(0, 0, 0, 0.05);
  --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.08), 0 8px 10px -6px rgba(0, 0, 0, 0.04);

  /* Radii */
  --radius-sm: 8px;
  --radius-md: 12px;
  --radius-lg: 16px;
  --radius-xl: 20px;

  /* Timing
     ------
     `--ease` is the default. `--ease-spring` overshoots, used for
     press feedback and translate-on-hover. `--ease-out-soft` is the
     gentle deceleration the AI sheen and sparkle glow run on.
     Any new animation must pick from these — no inline cubic-bezier
     or hardcoded ms in the rest of the codebase (enforced by
     `cicd lint-css`). */
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
  --ease-out-soft: cubic-bezier(0.22, 1, 0.36, 1);
  --duration-zero: 0.01ms; /* prefers-reduced-motion override */
  --duration-instant: 0.10s;
  --duration-fast: 0.15s;
  --duration-normal: 0.25s;
  --duration-slow: 0.4s;
  --duration-sheen: 0.86s;
  --duration-loop: 1.4s;
  --duration-spin: 0.6s;
  --duration-progress: 8s; /* simulated page-progress bar */
  --duration-pulse: 2s; /* slow ambient pulse on dots/sse indicator */
  --duration-pulse-dots: 1.1s; /* AI search dots typing pulse */
  --duration-stagger-step: 0.03s; /* per-row stagger for grid/list reveals */
  --ease-progress: cubic-bezier(0.1, 0.6, 0.2, 1);
  --ease-drawer: cubic-bezier(0.32, 0.72, 0, 1); /* mobile drawer slide */

  /* Icon button geometry — every round icon button picks size and
     radius from these so a single edit reshapes the whole panel. */
  --icon-btn-size: 36px;
  --icon-btn-size-sm: 32px;
  --icon-btn-radius: 999px;

  /* Interaction primitives — shared press and lift transforms so
     every interactive element flexes the same way. */
  --press: scale(0.96);
  --lift: translateY(-1px);

  /* Focus ring — never browser default. */
  --focus-ring: 2px solid var(--primary);
  --focus-ring-offset: 2px;

  /* Sidebar */
  --sidebar-width: 280px;
}

/* --- Reset & base -------------------------------------------------- */
