/* ╔══════════════════════════════════════════════════════════════════╗
   ║ MAINTAINED IN: Crossroads Mobile (sub-system)                    ║
   ║   /projects/484415d2-0683-464f-a0e6-9ee245850d99                 ║
   ║   Owner: the LT-Mobile product maintainer (you).                 ║
   ║   Mirror only — edit in the DS project then resync this file.    ║
   ╚══════════════════════════════════════════════════════════════════╝ */
/* ========================================================================
   2026-06-10 RESYNC — §4 sweep: heading ladder re-anchored at h1 = 30
   ------------------------------------------------------------------------
   Type is TAG-DRIVEN. Pick the semantic element; the type comes for free.
   The `.t-*` utility ladder is RETIRED — THREE tagless roles remain:
   `.eyebrow`, `.card-title`, `.metadata`.

     <h1>        30 · tight · 300         page title  (Journey-700 ink)
     <h2>        28 · tight · 300         hero / page title
     <h3>        24 · tight · 300         section heading
     <h4>        21 · tight · 300         drawer / sheet / dialog title
     <h5>        18 · tight · 300         app-bar / compact title
     <h6>        16 · tight · 300
     <p> / base  14 · loose · 500         body (document base)
     <small>     12 · tight · 500 · --c-neutral-600   secondary (block)
     .eyebrow    12 · tight · 700 · 0.4 · UPPERCASE · --c-neutral-600
     .card-title 16 · tight · 500
     .metadata   12 · tight · 500 · --c-neutral-500 · icon + label row

   HEADING SIZES are a mobile-local scale anchored at h1 = 30
   (30 / 28 / 24 / 21 / 18 / 16 — off the CDS --fs grid by design; the
   off-grid 30 + 21 steps are literal px). Body / small / eyebrow / card-title
   sizes use CDS --fs-* tokens. LINE-HEIGHTS are CDS ratio tokens
   (--lh-tight 1.2 for headings + UI labels, --lh-loose 1.5 for body).

   Rules: odd weights only (300 / 500 / 700) · body default 500 ·
   ALL headings 300 Light (the mobile signature; web DS is 700 Bold).
   INK: only <h1> carries baked ink (Journey-700); h2–h6 pin to neutral-700
   (overriding the parent CDS bare-tag Foundation-500). Screens may override
   `color` inline for a specific surface (e.g. a heading on a dark hero).

   SCOPING: the DS reference scopes these to `main`; this PRODUCT mirror
   applies them as bare-tag globals (no `main` scope) — intentional.
   ------------------------------------------------------------------------
   HISTORY:
     §4 (2026-06-10 resync) re-anchored the heading ladder to h1 = 30
        (30 / 28 / 24 / 21 / 18 / 16), moved line-heights onto the CDS ratio
        tokens (--lh-tight / --lh-loose), dropped heading + card-title
        letter-spacing, bumped `.eyebrow` to 700, added the `.metadata` role.
     §3 (2026-06-02) unified tag defaults + `.t-h*` onto the token ladder and
        set the 500 body default — the step that made `.t-*` redundant.
     §1/§2 (2026-06-01) renumbered the heading ladder; retired `.t-display`,
        `.t-label`, `.t-meta`.
   ======================================================================== */

/* ── Base text = Body (14 · loose · 500) ──────────────────────────────────
   Set on the document so any unclassed text renders as body. Phone-frame
   content and harness chrome both inherit this unless they opt into a tag
   or role below. */
body {
  font-family: var(--font-sans);
  font-size: var(--fs-14);
  line-height: var(--lh-loose);
  font-weight: var(--fw-medium);
  color: var(--c-neutral-900);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* ── Headings — size follows the tag, ALL weight 300 (light) ──────────────
   Mobile headings are 300 Light (the web DS uses 700 Bold). The off-grid 30
   and 21 steps are literal px (no --fs token by design).
   INK: only <h1> carries baked ink (Journey-700); h2–h6 pin to neutral-700. */
h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-sans);
  font-weight: var(--fw-light);
  color: var(--c-neutral-700);
  margin: 0;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
h1 { font-size: 30px; line-height: var(--lh-tight); color: var(--c-journey-700); }
h2 { font-size: 28px; line-height: var(--lh-tight); }
h3 { font-size: 24px; line-height: var(--lh-tight); }
h4 { font-size: 21px; line-height: var(--lh-tight); }
h5 { font-size: 18px; line-height: var(--lh-tight); }
h6 { font-size: var(--fs-16); line-height: var(--lh-tight); }

/* ── Body ─────────────────────────────────────────────────────────────── */
p {
  font-family: var(--font-sans);
  font-size: var(--fs-14);
  line-height: var(--lh-loose);
  font-weight: var(--fw-medium);
  margin: 0;
}

/* ── Secondary / caption ──────────────────────────────────────────────────
   <small> carries the muted tone directly (--c-neutral-600 — WCAG AA on
   white). Block by default (captions were block <div>s); call sites may
   override `color` inline. */
small {
  display: block;
  font-family: var(--font-sans);
  font-size: var(--fs-12);
  line-height: var(--lh-tight);
  font-weight: var(--fw-medium);
  color: var(--c-neutral-600);
}

/* ── Tagless roles (the three) ────────────────────────────────────────────
   No semantic HTML tag exists for these, so they remain named role classes. */
.eyebrow {
  font-family: var(--font-sans);
  font-size: var(--fs-12);
  line-height: var(--lh-tight);
  font-weight: var(--fw-bold);              /* 700 */
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--c-neutral-600);              /* muted label ink */
  margin: 0;
}
.card-title {
  font-family: var(--font-sans);
  font-size: var(--fs-16);
  line-height: var(--lh-tight);
  font-weight: var(--fw-medium);            /* 500 */
  margin: 0;
}

/* Metadata row — leading icon + label, for an item's location / date /
   facility lines (e.g. AssignmentCard). Icon + label share neutral-500 body
   ink via currentColor; label is 12 / 500. */
.metadata {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-sans);
  font-size: var(--fs-12);
  line-height: var(--lh-tight);
  font-weight: var(--fw-medium);            /* 500 */
  color: var(--c-neutral-500);
  margin: 0;
}
.metadata > i,
.metadata > svg {
  font-size: var(--fs-12);
  width: 14px;                              /* steady label start across stacked rows */
  text-align: center;
  flex-shrink: 0;
  color: inherit;                           /* icon tone follows the label */
}

/* ────────────────────────────────────────────────────────────────────
   Reduced motion (WCAG 2.3.3)
   ──────────────────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ────────────────────────────────────────────────────────────────────
   Keyboard focus indication (WCAG 2.4.7)
   ──────────────────────────────────────────────────────────────────── */
:where(button, a, [role="button"], [role="tab"], [tabindex], input, select, textarea):focus-visible {
  outline: 2px solid var(--c-journey-500);
  outline-offset: 2px;
  border-radius: inherit;
}
