/* ═══════════════════════════════════════════════════════════════════════
   base.css — typographic baseline for the EigenFlow design system
   ────────────────────────────────────────────────────────────────────────
   Loaded right after tokens.css. Enforces the three type roles and tabular
   figures app-wide. Deliberately conservative: it sets font ROLES and number
   rendering only — it does NOT touch page backgrounds, colours, or layout, so
   it can be linked into the large dashboards without regressions.
   ═══════════════════════════════════════════════════════════════════════ */

/* Body / form controls speak in the UI sans. */
body,
input, button, textarea, select {
  font-family: var(--font-sans);
}

/* Display voice — page + card titles and KPI figures, tight optical spacing.
   No serif: a serious financial product uses one headline voice everywhere. */
h1, h2,
.page-title, .panel-title, .kpi-value, .ef-kpi {
  font-family: var(--font-display);
  letter-spacing: -0.02em;
}

/* Code voice — the ONLY place monospace belongs: genuine code / JSON / raw
   IDs. Everything else speaks Inter. */
code, pre, kbd, samp {
  font-family: var(--font-code);
}

/* Eyebrows, micro-labels, table-ids, timestamps and counts read in the UI
   sans. Uppercase + letter-spacing already set them apart — a monospace face
   made them look like a data terminal, not an institutional product. */
.mono, .eyebrow, .table-id, .timestamp, .nav-count {
  font-family: var(--font-sans);
}

/* Tabular figures — the single biggest "is this a real product" tell.
   Digits align into columns across KPIs, tables and mono labels. */
.kpi-value, .ef-kpi, .nav-count, .table-number, .timestamp,
.mono, code, pre,
table, td, th,
input[type="number"] {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}
