/* ===========================================================================
 * GeoTrack 自托管字体 (self-hosted fonts)
 *
 * 为什么自托管: Google Fonts (fonts.gstatic.com / fonts.googleapis.com) 在国内
 * 被墙, 会导致首屏字体加载失败 → 全站回退 system-ui。改为把 woff2 放进
 * public/fonts/, 线上经本站同源 /fonts/*.woff2 提供, 不依赖任何外部 CDN。
 *
 * 字体来源: @fontsource 预构建 woff2 (jsDelivr CDN 下载, 与 Google Fonts 同源数据)。
 * 覆盖 v52-tokens.ts FONTS 用到的全部族名与字重:
 *   - Sora           400 / 500 / 600 / 700   (display 标题)
 *   - Outfit         300 / 400 / 500 / 600   (body 正文)
 *   - JetBrains Mono 400 / 500 / 600         (mono 数字/等宽)
 *   - Noto Sans SC   400 / 500 / 600 / 700   (中文兜底; chinese-simplified 子集)
 *
 * 族名 (font-family) 与 v52-tokens.ts 完全一致, 故令牌无需改动 —— 此处提供同名
 * @font-face 即可让全站生效。font-display:swap 避免 FOIT(不可见文字闪烁)。
 * =========================================================================== */

/* ---------- Sora (标题 / display) ---------- */
@font-face {
  font-family: 'Sora';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/sora-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Sora';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/sora-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Sora';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/sora-latin-600-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Sora';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/sora-latin-700-normal.woff2') format('woff2');
}

/* ---------- Outfit (正文 / body) ---------- */
@font-face {
  font-family: 'Outfit';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('/fonts/outfit-latin-300-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Outfit';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/outfit-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Outfit';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/outfit-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Outfit';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/outfit-latin-600-normal.woff2') format('woff2');
}

/* ---------- JetBrains Mono (数字 / 等宽 / mono) ---------- */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/jetbrains-mono-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/jetbrains-mono-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/jetbrains-mono-latin-600-normal.woff2') format('woff2');
}

/* ---------- Noto Sans SC (中文兜底 / chinese-simplified 子集) ----------
 * unicode-range 限定到该字体实际包含的 CJK 及相邻区块 (基础拉丁 / 拉丁补充 /
 * 通用标点 / CJK 偏旁部首 / CJK 符号与标点 / 平假名 / 片假名 / 注音 / CJK 统一表意
 * 文字 / 兼容表意文字 / CJK 兼容形式 / 小写变体 / 全角与半角形式 / 杂项符号)。
 * 仅当页面出现这些字符时浏览器才下载 (~1.1MB) 的 SC 字体 —— 纯英文页面零开销。
 */
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/noto-sans-sc-chinese-simplified-400-normal.woff2') format('woff2');
  unicode-range: U+0020-00FF, U+0100-017F, U+0300-036F, U+2000-206F, U+20AC, U+2122, U+2190-21FF, U+2200-22FF, U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3040-309F, U+30A0-30FF, U+3100-312F, U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FE50-FE6F, U+FF00-FFEF;
}
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/noto-sans-sc-chinese-simplified-500-normal.woff2') format('woff2');
  unicode-range: U+0020-00FF, U+0100-017F, U+0300-036F, U+2000-206F, U+20AC, U+2122, U+2190-21FF, U+2200-22FF, U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3040-309F, U+30A0-30FF, U+3100-312F, U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FE50-FE6F, U+FF00-FFEF;
}
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/noto-sans-sc-chinese-simplified-600-normal.woff2') format('woff2');
  unicode-range: U+0020-00FF, U+0100-017F, U+0300-036F, U+2000-206F, U+20AC, U+2122, U+2190-21FF, U+2200-22FF, U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3040-309F, U+30A0-30FF, U+3100-312F, U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FE50-FE6F, U+FF00-FFEF;
}
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/noto-sans-sc-chinese-simplified-700-normal.woff2') format('woff2');
  unicode-range: U+0020-00FF, U+0100-017F, U+0300-036F, U+2000-206F, U+20AC, U+2122, U+2190-21FF, U+2200-22FF, U+2E80-2EFF, U+2F00-2FDF, U+3000-303F, U+3040-309F, U+30A0-30FF, U+3100-312F, U+3200-32FF, U+3300-33FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FE50-FE6F, U+FF00-FFEF;
}
