/* BBS Dashboards: design tokens.
 *
 * Neutral-first: roughly 90% of every screen is greyscale, and colour is spent
 * only where it carries meaning. Brand green (#0FBF0E) is too saturated to
 * encode data legibly, so it is confined to small identity accents and a
 * separate, contrast-checked data accent does the charting work.
 *
 * The full categorical/sequential chart palette lands with the charts
 * themselves and must clear the dataviz palette validator in light and dark
 * before shipping.
 */

:root {
  /* Surfaces */
  --bg:            #FAFAF9;
  --card:          #FFFFFF;
  --border:        #E7E5E4;
  --border-strong: #D6D3D1;
  --gridline:      #F0EFED;

  /* Ink: three levels, every one of them legible.
   * Measured against --card: 17.5:1, 7.6:1, 4.8:1. The old subtle step was
   * #A8A29E, which is 2.5:1 on white, under the 3:1 floor for even a
   * graphical element, let alone the 13px labels it was being used for. */
  --ink:        #1C1917;
  --ink-muted:  #57534E;
  --ink-subtle: #78716C;
  --ink-invert: #FAFAF9;

  /* Semantic: meaning only, never decoration */
  --good: #15803D;
  --bad:  #B91C1C;
  --warn: #B45309;
  --good-wash: #F0FDF4;
  --bad-wash:  #FEF2F2;
  --warn-wash: #FFFBEB;

  /* Single data accent (contrast-checked against --card) */
  --accent:      #0E7490;
  --accent-wash: #ECFEFF;

  /* Brand: identity accents only, never a data encoding */
  --brand: #0FBF0E;

  /* Type */
  --font-sans: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;

  --fs-hero:  2.25rem;  /* 36px */
  --fs-kpi:   2rem;     /* 32px */
  --fs-h2:    1.125rem; /* 18px */
  --fs-body:  0.875rem; /* 14px */
  --fs-label: 0.8125rem;/* 13px */
  --fs-micro: 0.75rem;  /* 12px */

  /* 4px spacing scale */
  --s1: 4px;  --s2: 8px;  --s3: 12px; --s4: 16px;
  --s5: 20px; --s6: 24px; --s8: 32px; --s10: 40px; --s12: 48px;

  --radius: 8px;
  --radius-sm: 6px;
  --shadow-card: 0 1px 2px rgba(28, 25, 23, 0.04);
  --maxw: 1280px;

  --motion: 180ms cubic-bezier(0.2, 0, 0, 1);
}

/* Waiting-room wall display. Its own validated token set rather than a
 * filter or opacity trick over the light theme. A 20-foot read has different
 * contrast requirements than a desk monitor. */
[data-theme="tv"] {
  --bg:            #0C0A09;
  --card:          #1C1917;
  --border:        #292524;
  --border-strong: #44403C;
  --gridline:      #292524;

  /* 18.9:1, 7.8:1, 5.2:1 against the TV surfaces. A wall display is read at
   * twenty feet by someone not trying to read it. */
  --ink:        #FAFAF9;
  --ink-muted:  #A8A29E;
  --ink-subtle: #928B85;
  --ink-invert: #1C1917;

  --good: #4ADE80;
  --bad:  #F87171;
  --warn: #FBBF24;
  --good-wash: #14261B;
  --bad-wash:  #2A1515;
  --warn-wash: #2A2010;

  --accent:      #22D3EE;
  --accent-wash: #0E2A31;

  --shadow-card: none;
}

@media (prefers-reduced-motion: reduce) {
  :root { --motion: 1ms; }
}
