/* BNC Classic · self-hosted fonts. Loaded from this origin, so no third party can hold up the first paint.
 *  - Archivo (variable: wght 100–900, wdth 62–125): headlines, big figures, the countdown. Google Fonts "latin" subset.
 *  - BNCS Display SC = Noto Sans SC 900 (OFL), only the characters a heavy heading can show: every zh string that feeds a
 *    display heading (h1, section h2 incl. 怎么玩 / 推广工具 / 常见问题 / 术语, step and card titles, glossary terms, § titles,
 *    FOMO and dialog titles, 燃烧凭单, the hero cards, poster text, tab labels) plus what a live probe of the page finds
 *    (234 characters, 35 KB). A locally installed Noto Sans SC Black is preferred when present.
 *    When a heading's text changes, regenerate: node artifacts/site-review/final/fonts/display-chars.mjs, then
 *    python artifacts/site-review/final/fonts/fetch_display_sc.py (keeps every character the old subset had).
 *  - IBM Plex Sans (variable) for UI and every figure (tabular), IBM Plex Mono for hashes and codes.
 *  - Noto Sans SC (body CJK) still comes from Google Fonts without blocking the first paint (index.html); the system CJK font
 *    (PingFang SC / Microsoft YaHei / Noto Sans CJK) is used until, or unless, it arrives.
 *  - The *Fallback faces are local fonts scaled toward the web fonts' metrics, so the swap barely moves the layout. */
@font-face {
  font-family: "Archivo"; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: swap;
  src: url(fonts/archivo.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: "BNCS Display SC"; font-style: normal; font-weight: 700 900; font-display: swap;
  src: local("Noto Sans SC Black"), local("NotoSansSC-Black"), local("Noto Sans CJK SC Black"), local("NotoSansCJKsc-Black"),
       url(fonts/noto-sans-sc-900-display.woff2) format("woff2");
}
@font-face {
  font-family: "IBM Plex Sans"; font-style: normal; font-weight: 100 700; font-display: swap;
  src: url(fonts/plex-sans.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: "IBM Plex Mono"; font-style: normal; font-weight: 400; font-display: swap;
  src: url(fonts/plex-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: "IBM Plex Mono"; font-style: normal; font-weight: 500; font-display: swap;
  src: url(fonts/plex-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;
}

/* metric-matched local fallbacks (used while the web fonts load, and for the few symbols they lack) */
@font-face { font-family: "Archivo Fallback"; src: local("Arial Bold"), local("Arial-BoldMT"), local("Arial"); size-adjust: 104%; ascent-override: 84.4%; descent-override: 20.2%; line-gap-override: 0%; }
@font-face { font-family: "Plex Sans Fallback"; src: local("Arial"), local("ArialMT"); size-adjust: 101.21%; ascent-override: 101.27%; descent-override: 27.17%; line-gap-override: 0%; }
@font-face { font-family: "Plex Mono Fallback"; src: local("Consolas"); size-adjust: 109.13%; ascent-override: 93.92%; descent-override: 25.2%; line-gap-override: 0%; }
@font-face { font-family: "Plex Mono Fallback 2"; src: local("Courier New"), local("CourierNewPSMT"); size-adjust: 99.98%; ascent-override: 102.52%; descent-override: 27.5%; line-gap-override: 0%; }
