/*
 * Self-hosted Codex type system — no third-party font requests at runtime
 * (closes F-04: Google Fonts IP leak / GDPR, EU-hosted community).
 *
 * Four families (D3 · Open Hand re-brand, 2026-06-16): Hanken Grotesk
 * (heading/wordmark, weights 400–800; 800 = wordmark) · Source Sans 3 (body
 * prose) · JetBrains Mono (dates, tags, captions, eyebrows, → links) · Caveat
 * (rare hand annotation). All vendored as Latin-subset woff2 in assets/fonts/
 * (from @fontsource, OFL-1.1) with font-display:swap and unicode-range.
 *
 * Each family also ships a metric-matched "<Family> Fallback" face
 * (size-adjust / ascent-override / descent-override computed with Capsize
 * against Arial / Courier New) so the system fallback occupies the same box
 * before the webfont loads → zero swap-CLS (DESIGN-SPEC §4.2). The fallback
 * names are wired into --font-* in codex.css.
 *
 * B0 NOTE: these families are LOADED here but not yet APPLIED to any surface —
 * the per-surface B-waves opt in. Glyph coverage is the Latin subset; B-waves
 * that use ❦ (U+2766) or → (U+2192) in these faces must verify the glyph is in
 * the subset/file or supply it inline.
 *
 * @package plectra-theme
 */

/* Latin subset shared by every real face (matches @fontsource latin). */
/* U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
   U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
   U+2212, U+2215, U+FEFF, U+FFFD */

/* ───────────────────────── Hanken Grotesk (heading / wordmark) ───────────────────────── */
@font-face {
    font-family: 'Hanken Grotesk';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('../fonts/hanken-grotesk-400.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Hanken Grotesk';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url('../fonts/hanken-grotesk-500.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Hanken Grotesk';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('../fonts/hanken-grotesk-600.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Hanken Grotesk';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('../fonts/hanken-grotesk-700.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Hanken Grotesk';
    font-style: normal;
    font-weight: 800;
    font-display: swap;
    src: url('../fonts/hanken-grotesk-800.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* Capsize metric-matched fallback (Hanken vs Arial; computed from the woff2
   metrics: xWidthAvg 457/1000 vs Arial 904/2048). Zero swap-CLS (DESIGN-SPEC §4.2). */
@font-face {
    font-family: 'Hanken Grotesk Fallback';
    src: local('Arial');
    ascent-override: 96.5878%;
    descent-override: 29.2661%;
    size-adjust: 103.5327%;
}

/* ───────────────────────── Source Sans 3 (body) ───────────────────────── */
@font-face {
    font-family: 'Source Sans 3';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('../fonts/source-sans-3-400.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Source Sans 3';
    font-style: italic;
    font-weight: 400;
    font-display: swap;
    src: url('../fonts/source-sans-3-400-italic.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Source Sans 3';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('../fonts/source-sans-3-600.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Source Sans 3 Fallback';
    src: local('Arial');
    ascent-override: 109.2105%;
    descent-override: 42.6604%;
    size-adjust: 93.7639%;
}

/* ───────────────────────── JetBrains Mono (mono / captions / eyebrows) ───────────────────────── */
@font-face {
    font-family: 'JetBrains Mono';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('../fonts/jetbrains-mono-400.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'JetBrains Mono';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url('../fonts/jetbrains-mono-500.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'JetBrains Mono Fallback';
    src: local('Courier New');
    ascent-override: 102.0166%;
    descent-override: 30.0049%;
    size-adjust: 99.9837%;
}

/* ───────────────────────── Caveat (hand annotation) ───────────────────────── */
@font-face {
    font-family: 'Caveat';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('../fonts/caveat-400.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Caveat';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('../fonts/caveat-600.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Caveat Fallback';
    src: local('Arial');
    ascent-override: 124.7722%;
    descent-override: 38.9913%;
    size-adjust: 76.9402%;
}
