/* v3 unified-app web fonts — @font-face per NATIVE family name.
   The RNW app sets fontFamily to the per-weight family names the native side
   registers via expo-font ("Involve-Medium", "Venryn Sans", …), so the web
   faces must carry those exact names — unlike the retired apps/web, which
   used one "Involve" family with weight variants (see fonts.css).
   WOFF2 only: the source TTFs carry TrueType hinting bytecode that
   DirectWrite (Windows) executes into a broken Cyrillic "е"; the WOFF2s are
   built with hinting stripped (tools/strip-hinting.py). Served from the
   public root via scripts/sync-public.mjs.
   font-weight: 100 900 on every face: without a descriptor a face defaults to
   weight 400, so a computed font-weight >= 600 (core .font-semibold/.font-bold
   also emit font-weight next to the family swap) triggers synthetic bold on
   top of the already-bold glyphs — iPhone Safari fake-bolds far heavier than
   Chrome. The full range matches any requested weight to the single face. */
@font-face {
  font-family: "Involve-Regular";
  src: url("/fonts/Involve-Regular.woff2?v=1") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}
@font-face {
  font-family: "Involve-Medium";
  src: url("/fonts/Involve-Medium.woff2?v=1") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}
@font-face {
  font-family: "Involve-SemiBold";
  src: url("/fonts/Involve-SemiBold.woff2?v=1") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}
@font-face {
  font-family: "Involve-Bold";
  src: url("/fonts/Involve-Bold.woff2?v=1") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}
@font-face {
  font-family: "Venryn Sans";
  src: url("/fonts/VenrynSans-Medium.woff2?v=1") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}
/* Desktop-web compatibility face. The native font map intentionally binds
   `Venryn Sans` to Medium, while the canonical v2 web family selects Regular
   for an unweighted `font-ven` span. Components that reproduce that mixed-font
   desktop typography opt into this separate face explicitly; mobile/native
   keep the native Medium registration unchanged. */
@font-face {
  font-family: "Venryn Sans Regular";
  src: url("/fonts/VenrynSans-Regular.woff2?v=1") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Venryn Sans SemiBold";
  src: url("/fonts/VenrynSans-SemiBold.woff2?v=1") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}

/* ── CJK coverage (Chinese locale) ────────────────────────────────────────────
   Involve and Venryn Sans carry no CJK glyphs. Without these rules the browser
   still renders 中文 — it falls back per glyph to its own default UI font — but
   the result is an arbitrary face that matches nothing else on the page.

   Each rule re-declares an EXISTING family name and restricts itself to the CJK
   unicode ranges, so it never touches Latin or Cyrillic text: within one family,
   the browser picks the face whose unicode-range covers the character. `local()`
   only, no downloads — a full Noto Sans SC weight is several MB, while every
   target platform already ships a good Simplified-Chinese UI face (PingFang SC
   on Apple, Microsoft YaHei on Windows, Noto Sans CJK SC on Android/Linux).
   Listed Apple-first because that is where the mismatch is most visible.

   Ranges: CJK Unified Ideographs + Ext-A, the two CJK punctuation blocks (、。
   「」，full-width forms), and Bopomofo/radicals that show up in fallback text. */
@font-face {
  font-family: "Involve-Regular";
  src: local("PingFang SC"), local("Microsoft YaHei"), local("Noto Sans CJK SC"),
    local("Noto Sans SC"), local("Heiti SC"), local("SimHei");
  font-weight: 100 900;
  font-display: swap;
  unicode-range: U+2E80-303F, U+3200-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: "Involve-Medium";
  src: local("PingFang SC"), local("Microsoft YaHei"), local("Noto Sans CJK SC"),
    local("Noto Sans SC"), local("Heiti SC"), local("SimHei");
  font-weight: 100 900;
  font-display: swap;
  unicode-range: U+2E80-303F, U+3200-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: "Involve-SemiBold";
  src: local("PingFang SC Semibold"), local("PingFang SC"), local("Microsoft YaHei"),
    local("Noto Sans CJK SC"), local("Noto Sans SC"), local("Heiti SC"), local("SimHei");
  font-weight: 100 900;
  font-display: swap;
  unicode-range: U+2E80-303F, U+3200-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: "Involve-Bold";
  src: local("PingFang SC Semibold"), local("PingFang SC"), local("Microsoft YaHei"),
    local("Noto Sans CJK SC"), local("Noto Sans SC"), local("Heiti SC"), local("SimHei");
  font-weight: 100 900;
  font-display: swap;
  unicode-range: U+2E80-303F, U+3200-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
/* Venryn Sans is the tabular-numeric face used for amounts and dates. Digits
   stay in Venryn (outside these ranges); only a CJK unit or label that lands in
   a Venryn run — «10万», «3天» — picks up the system face. */
@font-face {
  font-family: "Venryn Sans";
  src: local("PingFang SC"), local("Microsoft YaHei"), local("Noto Sans CJK SC"),
    local("Noto Sans SC"), local("Heiti SC"), local("SimHei");
  font-weight: 100 900;
  font-display: swap;
  unicode-range: U+2E80-303F, U+3200-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: "Venryn Sans Regular";
  src: local("PingFang SC"), local("Microsoft YaHei"), local("Noto Sans CJK SC"),
    local("Noto Sans SC"), local("Heiti SC"), local("SimHei");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+2E80-303F, U+3200-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
@font-face {
  font-family: "Venryn Sans SemiBold";
  src: local("PingFang SC Semibold"), local("PingFang SC"), local("Microsoft YaHei"),
    local("Noto Sans CJK SC"), local("Noto Sans SC"), local("Heiti SC"), local("SimHei");
  font-weight: 100 900;
  font-display: swap;
  unicode-range: U+2E80-303F, U+3200-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF;
}
