/* 自托管字体（去掉第三方 render-blocking 样式表）
 *
 * 现状问题：以下页面原先用 fonts.googleapis.com + api.fontshare.com 的 <link rel="stylesheet">，
 *   仅 Google 那份 CSS 就有 469 KB（gzip 122 KB），其中 404 条 @font-face 来自 Noto Sans SC
 *   的 unicode-range 分片。样式表在关键路径上，会阻塞首绘约 2 秒；国内网络下更久。
 *
 * 现在的做法：用 fontTools pyftsubset 把官方字体按本站实际用到的字符集裁剪后自托管。
 *   - 保留全部 OpenType 特性（--layout-features=*）、保留 hinting，字形轮廓与线上完全一致；
 *   - 每个字体族的字重集合与各页原先 css2 请求逐一对应，不改动字重的「就近吸附」结果；
 *   - 因此视觉表现不变，只是不再依赖外部 CDN。
 *
 * 字符覆盖已逐码位校验：站点全部 1328 个字符中，线上由 webfont 渲染的 1325 个全部覆盖，
 * 剩余 3 个（U+2301 / U+25A6 / U+3400）线上同样无字形、走系统字体，行为一致。
 * ← → ↗ ◎ 这 4 个字形不在 Noto Sans SC 的 chinese-simplified 子集里，
 * 单独从 Google 对应分片裁出并以精确 unicode-range 声明，避免渲染回归。
 */

/* 主站页面：apply / creator-lab / portal / program / schedule */

/* Noto Sans SC 补充字形：← → ↗ ◎ */
@font-face{font-family:"Noto Sans SC";font-style:normal;font-weight:400;font-display:swap;src:url("assets/fonts/noto-sans-sc-ext-400.woff2") format("woff2");unicode-range:U+2190,U+2192,U+2197,U+25CE}
@font-face{font-family:"Noto Sans SC";font-style:normal;font-weight:500;font-display:swap;src:url("assets/fonts/noto-sans-sc-ext-500.woff2") format("woff2");unicode-range:U+2190,U+2192,U+2197,U+25CE}
@font-face{font-family:"Noto Sans SC";font-style:normal;font-weight:700;font-display:swap;src:url("assets/fonts/noto-sans-sc-ext-700.woff2") format("woff2");unicode-range:U+2190,U+2192,U+2197,U+25CE}
@font-face{font-family:"Noto Sans SC";font-style:normal;font-weight:900;font-display:swap;src:url("assets/fonts/noto-sans-sc-ext-900.woff2") format("woff2");unicode-range:U+2190,U+2192,U+2197,U+25CE}

/* Noto Sans SC —— CJK 主体 */
@font-face{font-family:"Noto Sans SC";font-style:normal;font-weight:400;font-display:swap;src:url("assets/fonts/noto-sans-sc-400.woff2") format("woff2")}
@font-face{font-family:"Noto Sans SC";font-style:normal;font-weight:500;font-display:swap;src:url("assets/fonts/noto-sans-sc-500.woff2") format("woff2")}
@font-face{font-family:"Noto Sans SC";font-style:normal;font-weight:700;font-display:swap;src:url("assets/fonts/noto-sans-sc-700.woff2") format("woff2")}
@font-face{font-family:"Noto Sans SC";font-style:normal;font-weight:900;font-display:swap;src:url("assets/fonts/noto-sans-sc-900.woff2") format("woff2")}

/* Inter */
@font-face{font-family:"Inter";font-style:normal;font-weight:400;font-display:swap;src:url("assets/fonts/inter-400.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:500;font-display:swap;src:url("assets/fonts/inter-500.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:600;font-display:swap;src:url("assets/fonts/inter-600.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:700;font-display:swap;src:url("assets/fonts/inter-700.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:800;font-display:swap;src:url("assets/fonts/inter-800.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:900;font-display:swap;src:url("assets/fonts/inter-900.woff2") format("woff2")}

/* JetBrains Mono */
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400;font-display:swap;src:url("assets/fonts/jetbrains-mono-400.woff2") format("woff2")}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:500;font-display:swap;src:url("assets/fonts/jetbrains-mono-500.woff2") format("woff2")}

/* Clash Display */
@font-face{font-family:"Clash Display";font-style:normal;font-weight:600;font-display:swap;src:url("assets/fonts/clash-display-600.woff2") format("woff2")}
@font-face{font-family:"Clash Display";font-style:normal;font-weight:700;font-display:swap;src:url("assets/fonts/clash-display-700.woff2") format("woff2")}
