/* ==========================================================================
   全站字体（唯一来源）
   --------------------------------------------------------------------------
   这个文件是字体相关的唯一事实来源，只放三样东西：
     · 自托管字体的 @font-face（Geist 正文 / JetBrains Mono 数据）
     · 三个字体栈 token：--ob-font / --ob-mono / --ob-emoji
     · 关于中文回退的说明（下面这段注释）
   每一个 <head> 都要在其它样式表之前引它——现在有四处：
     partials/shell_head.ejs（新外壳）、partials/header.ejs（旧外壳 /studio）、
     auth.ejs（登录注册页）、以及以后新增的外壳。
   页面级 CSS 一律写 var(--ob-font) / var(--ob-mono) / var(--ob-emoji)，
   不要再写裸字体栈（历史上散落过三份不同的等宽栈 + 一份不带 Geist 的系统栈，就是这么漂开的）。

   中文回退必须显式写全（踩过）：Geist 与 JetBrains Mono 都只有拉丁字形，
   中文字符会顺着字体栈往后找第一个有中文字形的字体。正文栈一直有 CJK 回退，
   等宽栈原来没有——于是等宽标签里的中文会落到 generic monospace，
   Windows 上那是宋体（衬线、字重字宽都不对），跟周围的雅黑明显不是一套字。
   现在两个栈共用同一批 CJK 回退：macOS → PingFang SC，Windows → Microsoft YaHei，
   Linux → Noto Sans SC（部分发行版只认旧名 Noto Sans CJK SC，两个都写上）。
   ========================================================================== */

@font-face {
  font-family: 'Geist';
  src: url('/fonts/geist-latin.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrains-mono-latin.woff2') format('woff2');
  font-weight: 100 800;
  font-style: normal;
  font-display: swap;
}

:root {
  /* 正文：拉丁与数字走 Geist，中文走系统 CJK */
  --ob-font: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans SC', 'Noto Sans CJK SC', sans-serif;
  /* 数据 / 状态 / 元信息（等宽）：拉丁与数字走 JetBrains Mono，中文接同一批 CJK */
  --ob-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', 'Noto Sans CJK SC', monospace;
  /* 表情（表情面板与表情按钮）：避免部分 Windows 环境把 emoji 回退成黑白字形 */
  --ob-emoji: 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji', sans-serif;
}
