/* ============================================================================
 * 自托管 Web Font —— 让「网页版 / 手机版」字形一致（客户 2026-09-20 意见）
 * ----------------------------------------------------------------------------
 * 客户原话：「网页版和手机版的字体字号不一样，网页版要跟手机版字体统一」。
 *
 * 根因不是 CSS 写错：`--font` 里原本**全是系统字体**，一个 web font 都没有。
 *   系统      中文命中                西文命中
 *   macOS     Kaiti SC（楷体）         Times New Roman
 *   Windows   KaiTi（楷体）            Times New Roman
 *   iPhone    STKaiti                  Times New Roman
 *   Android   ✗ 无楷体 → 回落 serif 的宋体    ✗ 常无 Times → 回落 serif
 * 同一份 CSS 在不同设备落到完全不同的字形（安卓最明显）—— 这就是差异来源。
 * 修法 = **把字形随站点下发**，不再依赖访客装了什么字体。
 *
 * 选型（客户确认：维持「中文楷体 + 西文 Times New Roman」的原设计意图）
 *   中文  LXGW WenKai 霞鹜文楷 v1.522 —— SIL OFL 1.1，可商用、可随项目分发。
 *        楷体骨架（基于 Klee One），与 Kaiti SC / KaiTi 同族观感。
 *   西文  Tinos —— Apache License 2.0，**与 Times New Roman 度量兼容**
 *        （逐字宽度与字距一致 → 换字后排版不跑版），字形几乎一致。
 *   ⚠️ 原版 Times New Roman(Monotype) 与苹果/微软楷体都是**商业字体，不能随站点分发**，
 *      所以用上面两个开源等效字体替代 —— 这正是客户选的那一项。
 *   ⚠️ 下载字体源文件：见 scripts/build-font-subset.py 头部（含镜像地址）。
 *
 * ── 为什么是「按站点用字裁剪的子集」，而不是整套字库、也不是 97 个分片 ──────────
 * 中文整套字库 25MB；官方分片方案（97 片 × 两字重）实测首屏要下
 *   zh 1.75MB / ja 3.9MB —— 对一个刚做完图片加载优化的站太重了。
 * 现在按**站点真实用字**（三语 i18n + 全部商品/分类/配置文案，共 1705 字符）裁剪：
 *   lxgwwenkai-regular.woff2  264KB    ← 常规字重
 *   lxgwwenkai-medium.woff2   263KB    ← 加粗字重（700/800 落到这一档）
 *   tinos/*.woff2             184KB    ← 但英文页面只会取 latin 那 2 个（34KB）
 * 首屏实际下载 ≈ 560KB，且永久缓存（文件名不带 hash 也不会变内容）。
 *
 * 下面的 unicode-range 是**大块**声明（不是逐码位，省掉 20KB CSS）：
 * 英文访客/纯英文页面因为没有任何 CJK 字符命中这些块 → **完全不下载中文那 527KB**。
 *
 * 🔴 新增了子集里没有的字（比如上架新商品用了生僻字）会回落成系统字体，
 *    表现为「大部分字是楷体、个别字不是」。修法：重跑 `scripts/build-font-subset.py`。
 * 🚫 别把 url() 改成相对路径：`/fonts/...` 指向 public/ 原样产物；
 *    改成相对路径会被 Vite 当模块资源重新哈希。
 * 🚫 别把 --font 里的 'Tinos' / 'LXGW WenKai' 删掉或排到系统字体之后 —— 又退回各显各的。
 * ========================================================================== */

/* ---------- 1) Tinos：西文 / 数字（等价 Times New Roman） ---------- */
@font-face { font-family: 'Tinos'; font-style: normal; font-weight: 400;
  font-display: swap; src: url('/fonts/tinos/tinos-400-latin.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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Tinos'; font-style: normal; font-weight: 700;
  font-display: swap; src: url('/fonts/tinos/tinos-700-latin.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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Tinos'; font-style: italic; font-weight: 400;
  font-display: swap; src: url('/fonts/tinos/tinos-400-italic-latin.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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Tinos'; font-style: normal; font-weight: 400;
  font-display: swap; src: url('/fonts/tinos/tinos-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Tinos'; font-style: normal; font-weight: 700;
  font-display: swap; src: url('/fonts/tinos/tinos-700-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Tinos'; font-style: italic; font-weight: 400;
  font-display: swap; src: url('/fonts/tinos/tinos-400-italic-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }

/* ---------- 2) LXGW WenKai 霞鹜文楷：中文 / 日文（等价楷体） ----------
   Medium 占 700 档：站点里 font-weight 600/700/800 都会落到它，
   所以加粗标题不会变成浏览器伪加粗（伪加粗在楷体上会糊成一团）。
   Regular 占 400 档；font-weight 500 的元素按 CSS 匹配规则落到 Regular。 */
@font-face {
  font-family: 'LXGW WenKai';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/lxgw-wenkai/lxgwwenkai-regular.woff2') format('woff2');
  unicode-range: U+2000-206F,
               U+3000-303F,
               U+3040-30FF,
               U+4E00-9FFF,
               U+FF00-FFEF;
}
@font-face {
  font-family: 'LXGW WenKai';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/lxgw-wenkai/lxgwwenkai-medium.woff2') format('woff2');
  unicode-range: U+2000-206F,
               U+3000-303F,
               U+3040-30FF,
               U+4E00-9FFF,
               U+FF00-FFEF;
}
