/*
 * fonts.css — 字体分层加载（本地优先，绝不挂 CDN）。
 *
 * 分两层，兼顾「秒开」与「全字库显示能力」：
 * 1. UI 图标：内联 SVG（src/ui/icons.js，官方 Material Symbols Rounded path，Apache-2.0）。
 * 零请求、零闪烁、可换色。不再依赖图标字体 woff2（已移除 5.3MB 全字库死重）。
 * 2. 内容区（输入/输出）：天珩 Unicode 全字库，按 Unicode 平面（0/1/2/其余）分 4 片
 * unicode-range 让浏览器只在页面真出现某平面字符时才下载那一片 ttf。
 * 顶栏「字库」面板可主动预载 / 查看各平面加载状态（见 src/ui/fontLoader.js）。
 *
 * 内容区字体文件放 public/fonts/th/（天珩子集 woff2，本机切分）。
 * 天珩全字库来源：http://cheonhyeong.com/index.html（沈天珩「全字堂」，覆盖全 Unicode）。
 * 许可：天珩说明第六条「请勿用于商业用途」——本工具开源非商用，纯本地引用开源字库，合规。
 *
 * 双层加载（MT8），首屏轻 + 最终全：
 * 1. 首屏：本文件只挂 th-ctf-subset.woff2（约 1.52 MB，14594 字形）——扫全项目源码 + i18n
 * + GB2312 全集 + ASCII/标点合成，覆盖全部 CTF 编码表（社会主义核心价值观/佛曰/玛卡巴卡/
 * 天干地支/百家姓/六十四卦/当铺 等）零缺失。首屏只下这一片，秒开。
 * 2. 后台：页面渲染完后 fontLoader.js 的 preloadAllPlanes 趁空闲逐个把天珩全量 4 平面
 * woff2（共约 31 MB，ttf 无损转码砍 64%）拉进 document.fonts，补齐子集外冷僻字。
 * 全量随发行版打包、本地加载、零外发、不阻塞 UI。
 * 子集未命中且全量尚未加载完的瞬间，系统 CJK 字体顶上（font-display: swap），绝不白屏。
 */

/* ============ UI 图标（内联 SVG 容器） ============ */
/* icons.js 把 <svg> 注入 .msym；此处只管容器尺寸与居中，SVG 用 currentColor 继承文字色。 */
.msym {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.25em;
  height: 1.25em;
  line-height: 1;
  user-select: none;
  flex: none;
}
.msym > svg { width: 1em; height: 1em; display: block; }

/* ============ 天珩 CTF 常用字子集（内容区专用，单文件 woff2） ============ */
/*
 * 只随包一个子集 woff2（th-ctf-subset.woff2，约 1.52 MB）：覆盖全项目用到的字 + GB2312
 * 全集 + ASCII/标点 + 全部 CTF 编码表生僻字。不写 unicode-range（全码位优先命中此族）；
 * 子集里没有的字自动回退到下方 --font-content 里的系统 CJK 字体，绝不白屏。
 * font-display: swap —— 字体到位前系统字体顶上，到了再换。
 */
@font-face {
  font-family: "Cheonhyeong";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../../public/fonts/th/th-ctf-subset.woff2") format("woff2");
}

/* ============ 天珩组合用附加符号（MT78 疑因 B 修复，2026-08-23） ============ */
/*
 * 恒烈报的真 bug：`u̲n̲d̲e̲r̲l̲i̲n̲e̲d̲`（每字母后跟 U+0332 COMBINING LOW LINE）下划线断续错位。
 *
 * 根因（真浏览器像素实测 + fontTools 双证）：原首屏子集的 cmap 对 U+0300–U+036F 覆盖 **0/112**。
 * Chromium 按**字素簇整簇**选字体 —— 一个簇的基字与组合符必须由**同一个 face** 覆盖，
 * 缺一个就整簇（连基字一起）掉到系统回退字体。CDP CSS.getPlatformFontsForNode 实测：
 *   修复前 `u̲n̲d̲e̲r̲l̲i̲n̲e̲d̲` 20 字形全部 Segoe UI（天珩一个都没用上）→ 下划线断 6 段、缝隙 40 设备像素。
 *
 * ⛔ 走过的弯路，别重犯：**另挂一片带 unicode-range 的组合符 face 无效**。
 * 那样基字在 A 片、组合符在 B 片，仍然没有任何单一 face 覆盖整簇 → 照样全部掉回退字体。
 *
 * 已采取的修法：把 320 个组合符**并进首屏子集本体**（工具/_mt78_build_combining.py 从天珩源
 * TH-Tshyn-P0.ttf 切片，工具/_mt78_merge_subset.py merge 进 th-ctf-subset.woff2）。
 * 结果：cmap 14710 → 15017（丢失 0），字形 14594 → 14905，1.52 MB → 1.53 MB（+7.8 KB），
 * GDEF 里 U+0332 类别 3（mark）与 GSUB ccmp 均保住。所以这里**不需要**第二条 @font-face。
 * 旧档备份在 资料/字库/备份/th-ctf-subset.woff2.bak。回归脚本：工具/rt_browser_uv_grapheme.mjs。
 */

/*
 * 内容区用这个字体族：先天珩子集（命中即用），子集外的字回退系统 CJK 字体。
 * UI 外壳不用它，保证秒开。
 */
:root {
  --font-content: "Cheonhyeong", "Microsoft YaHei", "PingFang SC", system-ui, sans-serif;
 /* 天珩全字库靠 OpenType 组合特性拼字：ccmp 组合分解、calt 上下文替换、liga 连字。
     不开则堆叠/连字规则失效（一键解码框显示不对）。内容区统一引用此变量。 */
  --font-features: "ccmp" 1, "calt" 1, "liga" 1;
}
