/* ============================================================================
   UNIFIED TYPOGRAPHY UTILITIES  (T16.22)
   ----------------------------------------------------------------------------
   Atomic + composite type utilities so cards/sections stop hard-coding font-size
   literals (18px / 1.125rem / 1.25rem per card — AUDIT §9 #7, DS D8). Token-pure:
   every value references a design token via var().

   T1.7 decision: heading font stays Inter (--font-family-heading already equals
   the body stack), so these utilities introduce NO visual change — they only give
   the existing hardcoded sizes a named, tokenized home. Inert until markup adopts
   the classes (per-card adoption is the migration phases), so loading them ahead
   carries no visual risk.
   ========================================================================== */

/* ── Atomic: font-size ────────────────────────────────────────────────────── */
.fs-2xs { font-size: var(--font-size-2xs); }
.fs-xs  { font-size: var(--font-size-xs); }
.fs-sm  { font-size: var(--font-size-sm); }
.fs-base{ font-size: var(--font-size-base); }
.fs-lg  { font-size: var(--font-size-lg); }
.fs-xl  { font-size: var(--font-size-xl); }
.fs-2xl { font-size: var(--font-size-2xl); }
.fs-3xl { font-size: var(--font-size-3xl); }
.fs-4xl { font-size: var(--font-size-4xl); }
.fs-5xl { font-size: var(--font-size-5xl); }
.fs-6xl { font-size: var(--font-size-6xl); }

/* ── Atomic: font-weight ──────────────────────────────────────────────────── */
.fw-light     { font-weight: var(--font-weight-light); }
.fw-normal    { font-weight: var(--font-weight-normal); }
.fw-medium    { font-weight: var(--font-weight-medium); }
.fw-semibold  { font-weight: var(--font-weight-semibold); }
.fw-bold      { font-weight: var(--font-weight-bold); }
.fw-extrabold { font-weight: var(--font-weight-extrabold); }
.fw-black     { font-weight: var(--font-weight-black); }

/* ── Atomic: line-height ──────────────────────────────────────────────────── */
.lh-tight   { line-height: var(--line-height-tight); }
.lh-snug    { line-height: var(--line-height-snug); }
.lh-normal  { line-height: var(--line-height-normal); }
.lh-relaxed { line-height: var(--line-height-relaxed); }
.lh-loose   { line-height: var(--line-height-loose); }

/* ── Composites (semantic roles) ──────────────────────────────────────────── */
/* Hero/section display heading. */
.t-display {
  font-family: var(--font-family-heading);
  font-size: var(--font-size-5xl);
  font-weight: var(--font-weight-bold);
  line-height: var(--line-height-tight);
}

/* Large block/section title. */
.t-title-lg {
  font-family: var(--font-family-heading);
  font-size: var(--font-size-2xl);
  font-weight: var(--font-weight-bold);
  line-height: var(--line-height-snug);
}

/* Card / list-item title — replaces the per-card 18px / 1.125rem literals. */
.t-title {
  font-family: var(--font-family-heading);
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-bold);
  line-height: var(--line-height-snug);
}

/* Small uppercase label above a title. */
.t-eyebrow {
  font-family: var(--font-family-heading);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-normal);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

/* Default body copy. */
.t-body {
  font-family: var(--font-family-body);
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-normal);
  line-height: var(--line-height-normal);
}

/* Secondary/meta caption text. */
.t-caption {
  font-family: var(--font-family-body);
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-normal);
  line-height: var(--line-height-normal);
}
