/* Body + UI + structural voice all use 35-FTR (the brandguide sans). The Karla
   bake-off is closed (2026-06-09); its @font-face now lives in type-bakeoff.css. */

/* Brand fonts — self-hosted .woff2.
   Per CLAUDE.md §5, only the weights we actually use are loaded. */

@font-face {
    font-family: "35-FTR";
    src: url("../fonts/35-FTR Regular.woff2") format("woff2");
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: "35-FTR";
    src: url("../fonts/35-FTR Medium.woff2") format("woff2");
    font-weight: 500;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: "35-FTR";
    src: url("../fonts/35-FTR Bold.woff2") format("woff2");
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

/* The third voice (structural) uses these heavier weights. */
@font-face {
    font-family: "35-FTR";
    src: url("../fonts/35-FTR Extra Bold.woff2") format("woff2");
    font-weight: 800;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: "35-FTR";
    src: url("../fonts/35-FTR Black.woff2") format("woff2");
    font-weight: 900;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: "Poppins";
    src: url("../fonts/Poppins-SemiBold.woff2") format("woff2");
    font-weight: 600;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: "Poppins";
    src: url("../fonts/Poppins-Bold.woff2") format("woff2");
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

/* =================================================================
   THE STRUCTURAL VOICE — the third type voice, formalised.
   35-FTR at extra-bold/black: the system's spine. Use for level
   NUMERALS, structural LABELS, wayfinding and NAMES — sparingly.
   It is NOT a headline voice (that's the Iowan display serif) and
   must never be bolted into the hero as a heavy block (that derailed
   the home hero). Three sanctioned roles:
     The structural voice lives in the COMPONENTS that use it —
     .level-circle, .section-num (__digit / __label), .spec-row__label,
     .tint-field cite — each built on --font-structure (see components.css).
     The old generic .structure-numeral/.structure-label/.structure-meta
     classes were unused in production and were removed in the 2026-06-09
     design-system consolidation. Re-add only if a component ever needs the
     bare voice without its own context.
   ================================================================= */

body {
    font-family: var(--font-text);
    font-size: var(--text-base);
    line-height: var(--lh-body);
    font-weight: 400;
}

/* .eyebrow is defined in components.css (the active, warmer accent-link version).
   Its duplicate here was shadowed and was removed (2026-06-09 consolidation). */

/* HEADER SYSTEM — the canonical heading hierarchy (single source, here).
   H1 hero = .quiet-headline · H2 section = .section-title ·
   H3 subhead = .quiet-subhead · card heading = .card-title (components.css).
   .eyebrow is a kicker, NOT a heading. One H1 per page; never skip a level. */
.quiet-headline {
    font-family: var(--font-display);
    font-size: var(--text-hero);
    font-weight: 400;
    line-height: var(--lh-display);
    letter-spacing: -0.01em;
    color: var(--ink-deep);
}

.section-title {
    font-family: var(--font-display);
    font-size: clamp(var(--text-xl), 3.5vw, var(--text-3xl));
    font-weight: 400;
    line-height: var(--lh-display);
    letter-spacing: -0.005em;
    color: var(--ink-deep);
}

.section-sub {
    font-family: var(--font-text);
    font-size: var(--text-lg);
    color: var(--ink-muted);
    line-height: var(--lh-body);
}

/* Subhead — h3-level heading used inside a section, between section-title
   and body copy. Smaller than section-title, larger than body. */
.quiet-subhead {
    font-family: var(--font-display);
    font-size: var(--text-xl);
    font-weight: 400;
    line-height: var(--lh-heading);
    color: var(--ink);
    margin-top: var(--space-6);
    margin-bottom: var(--space-2);
}

/* Event date stamp — prominent date in event-page heroes. Sits between
   eyebrow and the body of the hero. Display-typed so it reads as a
   typographic anchor, not as metadata. */
.event-date {
    font-family: var(--font-display);
    font-size: clamp(var(--text-xl), 3vw, var(--text-2xl));
    font-weight: 400;
    color: var(--ink);
    line-height: var(--lh-heading);
    letter-spacing: 0.01em;
    margin: var(--space-2) 0 var(--space-3);
}

/* .lede is defined in components.css (the active version, --text-base / --ink).
   Its duplicate here was shadowed and was removed (2026-06-09 consolidation). */

.quiet-list,
.quiet-link-list {
    font-family: var(--font-text);
    font-size: var(--text-base);
    line-height: var(--lh-body);
    color: var(--ink);
}

.credibility {
    font-family: var(--font-text);
    font-style: italic;
    font-size: var(--text-lg);
    color: var(--ink-muted);
    line-height: var(--lh-caption);
    text-align: center;
}

.safety-line {
    font-size: var(--text-sm);
    color: var(--ink-muted);
    line-height: var(--lh-caption);
}

.centred { text-align: center; }

/* Brand signature: gradient text. Apply to key phrases. */
.accent-gradient {
    background: var(--gradient-action);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
}
