/* Huddle design tokens — the one copy every Huddle app pastes in verbatim (1 Nov 2026).
   Apps: Huddle (app.huddle.dental), Finance Huddle / Practice Books (finance.huddle.dental), HR Huddle (hr.huddle.dental),
   Huddle Voice (voice.huddle.dental), Call Score (callscore.huddle.dental). The spec is docs/HUDDLE-DESIGN-SYSTEM.md.
   Three blocks: light on :root; dark when the system prefers it and the page has not chosen light; dark again when the page
   chose it — so a toggle wins both ways. Each app may override ONE token, --accent (and its -ink/-soft pair), on <html class="app-…">. */
:root { color-scheme: light;
  /* neutrals — the blue-grey Huddle set (not warm grey) */
  --bg:#f4f8fb; --card:#ffffff; --ink:#11263a; --muted:#55697b; --faint:#8a9cab; --line:#dce6ee; --line-strong:#c5d4e0; --row-hover:#f5f9fc; --row-alt:#f1f6fa;
  /* the accent — active nav, links, the one primary button; never a status colour */
  --accent:#0b78c2; --accent-ink:#0a5d97; --accent-soft:#e1f0fb; --accent-soft-2:#eef6fc; --on-accent:#ffffff;
  /* status — on marks, pills and stripes only, never on row or cell backgrounds */
  --good:#1f7a4d; --good-bg:#e2f2e9; --warn-ink:#a56d0a; --warn:#fbefd6; --bad:#b93a2e; --bad-bg:#fbeae7; --info-bg:#e1f0fb; --lock:#8a9cab; --lock-bg:#eef2f6;
  /* chart series — categorical, kept apart from status: s1 = this practice / the main series, s2 = comparison, s3/s4 = more; --median = the network median line (dashed) */
  --s1:#1f8fd6; --s2:#e8795a; --s3:#1f7a4d; --s4:#6d5bd0; --median:#8a9cab;
  /* chrome */
  --side:#ffffff; --side-ink:#55697b; --side-active:#e1f0fb; --side-ink-active:#0b78c2;
  --band:#e4f2fc;   /* the light-blue top band of apps that use top tabs instead of a sidebar (Call Score) */
  --tip-bg:#11263a; --tip-ink:#ffffff;
  --shadow:0 1px 2px rgba(17,38,58,.05), 0 6px 18px rgba(17,38,58,.05);
  /* brand lockup (one logo for every app, from Huddle Voice): the orange tile gradient; "Huddle" in Bricolage 800 + the product name in --brand-name. No Baloo 2, no lowercase wordmark. */
  --mark-grad:linear-gradient(135deg,#ffb547,#ff8a5c); --brand-name:#1f8fd6;
  /* type */
  --sans:"Public Sans", "Segoe UI", system-ui, -apple-system, sans-serif;
  --display:"Bricolage Grotesque", "Public Sans", "Segoe UI", system-ui, sans-serif;
  --fs-title:24px; --fs-card:18px; --fs-body:14px; --fs-data:13px; --fs-head:12px; --fs-eyebrow:11px; --fs-figure:28px;
  /* shape and rhythm (8-pt) */
  --r:12px; --r-sm:8px; --pad-card:20px; --gap-section:32px; --row-h:40px; --side-w:224px; --content-max:1200px; --drawer-w:560px; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { color-scheme: dark;
  --bg:#0b141b; --card:#121e28; --ink:#e4edf3; --muted:#96a9b8; --faint:#6f8494; --line:#233544; --line-strong:#34495b; --row-hover:#1b2e3e; --row-alt:#172735;
  --accent:#5cb6ef; --accent-ink:#8fd0f7; --accent-soft:#11293b; --accent-soft-2:#0f2231; --on-accent:#06192a;
  --good:#4cc97e; --good-bg:rgba(76,201,126,.14); --warn-ink:#f5c451; --warn:rgba(250,178,25,.16); --bad:#f07a70; --bad-bg:rgba(240,122,112,.14); --info-bg:#11293b; --lock:#8a9cab; --lock-bg:#1b2630;
  --s1:#5cb6ef; --s2:#f0957a; --s3:#4cc97e; --s4:#a28df0; --median:#96a9b8;
  --side:#121e28; --side-ink:#96a9b8; --side-active:#11293b; --side-ink-active:#8fd0f7; --band:#0f2231;
  --tip-bg:#e4edf3; --tip-ink:#0b141b;
  --shadow:0 1px 2px rgba(0,0,0,.3), 0 10px 30px rgba(0,0,0,.3); } }
:root[data-theme="dark"] { color-scheme: dark;
  --bg:#0b141b; --card:#121e28; --ink:#e4edf3; --muted:#96a9b8; --faint:#6f8494; --line:#233544; --line-strong:#34495b; --row-hover:#1b2e3e; --row-alt:#172735;
  --accent:#5cb6ef; --accent-ink:#8fd0f7; --accent-soft:#11293b; --accent-soft-2:#0f2231; --on-accent:#06192a;
  --good:#4cc97e; --good-bg:rgba(76,201,126,.14); --warn-ink:#f5c451; --warn:rgba(250,178,25,.16); --bad:#f07a70; --bad-bg:rgba(240,122,112,.14); --info-bg:#11293b; --lock:#8a9cab; --lock-bg:#1b2630;
  --s1:#5cb6ef; --s2:#f0957a; --s3:#4cc97e; --s4:#a28df0; --median:#96a9b8;
  --side:#121e28; --side-ink:#96a9b8; --side-active:#11293b; --side-ink-active:#8fd0f7; --band:#0f2231;
  --tip-bg:#e4edf3; --tip-ink:#0b141b;
  --shadow:0 1px 2px rgba(0,0,0,.3), 0 10px 30px rgba(0,0,0,.3); }
/* per-app accent (the only per-app difference). Huddle, Finance Huddle, Huddle Voice and Call Score all use the Huddle blue above.
   HR Huddle keeps its navy accent and its orange brand gradient (logo mark, Guide button, Next ring, active tab — nowhere else). */
html.app-hr { --accent:#22395e; --accent-ink:#1a2c49; --accent-soft:#e8edf5; --side-ink-active:#22395e; --side-active:#e8edf5; --brand:linear-gradient(135deg,#ff8a5c,#ffb547); }
/* schedule and roster surfaces only (HR Huddle's Board, Huddle's Roster): one colour per office and per role, so six offices can be scanned by colour.
   Everywhere else a practice is a grey chip. */
:root { --office-EON:#2a78d6; --office-NWK:#eb6834; --office-NEO:#1baf7a; --office-BLM:#eda100; --office-BEL:#e87ba4; --office-TLP:#6250d6; --role-front:#1e88c9; --role-assistant:#4a9b2f; }
/* base rules every app inherits */
body { margin:0; background:var(--bg); color:var(--ink); font:var(--fs-body)/1.5 var(--sans); font-variant-numeric:tabular-nums; -webkit-font-smoothing:antialiased; }
h1, .h1 { font:600 var(--fs-title)/1.2 var(--display); letter-spacing:-.01em; margin:0; }
h2, h3, .card > h3 { font:600 var(--fs-card)/1.3 var(--display); margin:0; }
.eyebrow { font:600 var(--fs-eyebrow)/1 var(--sans); letter-spacing:.06em; text-transform:uppercase; color:var(--muted); }   /* the only uppercase text */
th, .th, .col-head { font:600 var(--fs-head)/1.3 var(--sans); text-transform:none; letter-spacing:0; color:var(--muted); }
td, .td { font-size:var(--fs-data); }
.num { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.neg { color:var(--bad); }   /* "−$2,147" on operational screens; accounting statements keep (2,147) in ink */
