/*
 * Self-hosted font declarations (DS-006, design-system assumptions).
 *
 * Afacad Flux carries Latin display, Noto Sans TC/Noto Sans carry bilingual
 * reading text, IBM Plex Mono is reserved for operational metadata. Every
 * src below is a real woff2 binary in apps/web/src/public/fonts, served by
 * the public router from /fonts as font/woff2 (contract pinned by
 * fonts/manifest.ts + tests/e2e/public/shell/fonts.test.ts; provenance and
 * pinned sources in fonts/PROVENANCE.md). No page calls Google Fonts.
 *
 * Weight declarations mirror the binaries' actual axes: the three variable
 * faces declare their full wght range, the static IBM Plex Mono declares 400
 * and 600 (the M11-B2 frozen target loads both mono weights).
 * The unicode-range values are verbatim from the subset producers (gstatic
 * latin subsets; the TC blocks from shipped-characters.ts), so glyph routing
 * never selects a face that lacks the codepoint: CJK renders from the TC
 * subset, latin/punctuation falls through the --font-* stacks to the latin
 * subsets. `font-display: swap` keeps text visible while fonts load.
 */

@font-face {
  font-family: "Afacad Flux";
  src: url("/fonts/afacad-flux-latin.woff2") format("woff2");
  font-weight: 100 1000;
  font-style: normal;
  font-display: swap;
  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: "Noto Sans TC";
  src: url("/fonts/noto-sans-tc-var.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+2E80-2EFF, U+3000-303F, U+31C0-31EF, U+3400-4DBF,
    U+4E00-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}

@font-face {
  font-family: "Noto Sans";
  src: url("/fonts/noto-sans-latin-var.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  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: "IBM Plex Mono";
  src: url("/fonts/ibm-plex-mono-latin-regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  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: "IBM Plex Mono";
  src: url("/fonts/ibm-plex-mono-latin-semibold.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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;
}
