/* WordVerse 首页 v2u —— 视觉变量（唯一换肤入口；色值以 pm/V2U-VISUAL.md §1 为准，2026-10-29 17:10 落值）
 * 结构写在 style.css 末尾「v2 首页结构」块，只读这里的变量；动效变量与规则在 motion.css（流光）。
 *
 * 色板（每主题 9 个色角色 + 2 个按钮状态派生；focus 复用 btn）
 *   面 2 档：--wv-bg 页面 #FFFFFF / --wv-surface 卡片·输入框·分段底 #F7F7F6（深 #0E0F0F / #161817）
 *   字 3 档：--wv-text-1 #111413 / --wv-text-2 #4B504D / --wv-text-3 #686D6A（深 #EDEEED / #B5BAB7 / #8C918E）
 *   线 1 档：--wv-line #E4E5E3（深 #2A2D2B），--wv-border = 1px solid line（唯一描边，hairline）
 *   主按钮：--wv-btn #111413 + --wv-on-btn #FFFFFF，hover #2A2E2C（深 #F2F3F2 + #111413，hover #D9DBDA）
 *   生词墨绿：--wv-green #3A7562（深 #7DBBA2）+ --wv-green-tint #EBF3EF（深 #1B2A24）
 *   首页禁红（V31 / M11，衡舟 17:36）：提示行 .is-error 用 --wv-text-2，不用红。--wv-danger 仅保留给非首页旧页面（经 --v2-danger 引用），首页任何选择器不得引用
 * 生词绿允许出现的选择器白名单（其余任何选择器引用 --wv-green / --v2-word* 即违规）：
 *   .v2-pv-en mark / .v2-fv-line mark（故事生词：字色 + 1.5px 下划线，hover/当前词加 tint 浅底）
 *   .v2-pv-word（生词标签 lantern / harbor / whisper，同一生词样式）
 *   .v2-pv-pop-word（释义条里的词）、#page-home .word-crystal .wc-word（输入后的词标签）
 *   连线 / 光点 / 光标 / 焦点环 / 进度 / 阴影 一律中性（--wv-line / --wv-text-3 / --wv-focus）。
 * 圆角 3 档：--wv-r-card 20 / --wv-r-ctl 12 / --wv-r-pill 999；阴影 1 套 --wv-shadow（首屏输入卡、故事卡、浮层）。
 * 纸张颗粒保留（TigerBoss），opacity .015（≤1.5%）；故事卡叠卡边只 1 层。
 * 前身 v2t 快照：dev/v2t-baseline/wordverse-server/v2-theme.css；中性占位备份：dev/tools-wv/v2-theme.neutral.css */
:root {
  /* ===== v2u token（命名同 V2U-VISUAL.md §1.3） ===== */
  --wv-bg: #FFFFFF; --wv-surface: #F7F7F6; --wv-line: #E4E5E3;
  --wv-text-1: #111413; --wv-text-2: #4B504D; --wv-text-3: #686D6A;
  --wv-text3: var(--wv-text-3);               /* 别名（衡舟口径） */
  --wv-btn: #111413; --wv-btn-hover: #2A2E2C; --wv-on-btn: #FFFFFF;
  --wv-green: #3A7562; --wv-green-tint: #EBF3EF; --wv-danger: #B3362C; --wv-focus: #111413;
  --wv-halo: rgba(17, 20, 19, .07);            /* v2u R2 A2 输入卡聚焦淡外光环 */
  --wv-r-card: 20px; --wv-r-ctl: 12px; --wv-r-pill: 999px;
  --wv-shadow: 0 1px 2px rgba(17, 20, 19, .04), 0 8px 24px rgba(17, 20, 19, .06);
  --wv-border: 1px solid var(--wv-line);
  --wv-ring: 0 0 0 2px var(--wv-bg), 0 0 0 4px var(--wv-focus);
  /* 别名（VISUAL 第 3 版 17:10，不新增色值） */
  --wv-card: var(--wv-bg);                    /* 故事卡面：浅色纯白；深色映射 surface */
  --wv-dot: var(--wv-text-3);                 /* 连线光点色 */
  --wv-dot-opacity: .35;                      /* 光点渲染不透明度上限 */
  --wv-grain: #111413; --wv-grain-opacity: .015;
  --wv-input-h: 56px; --wv-input-pad: 5px; --wv-btn-h: 44px;   /* 同心 pill：外框 56 = 1 描边 + 5 内边距 + 44 按钮 + 5 + 1 */

  /* ===== 以下 v2 旧变量名全部映射到 v2u token（style.css 只读这些名字） ===== */
  --v2-page-bg: var(--wv-bg);
  --v2-card-bg: var(--wv-surface);
  --v2-text-1: var(--wv-text-1);
  --v2-text-2: var(--wv-text-2);
  --v2-text-3: var(--wv-text-3);
  --v2-line: var(--wv-line);
  --v2-ui-strong: var(--wv-btn);
  --v2-ui-on-strong: var(--wv-on-btn);
  --v2-ui-hover: var(--wv-btn-hover);
  --v2-ui-tint: rgba(17, 20, 19, .05);        /* 中性浅底（文字按钮 hover） */
  --v2-danger: var(--wv-danger);
  /* —— 生词（唯一彩色） —— */
  --v2-word: var(--wv-green);
  --v2-word-tint: var(--wv-green-tint);
  /* —— 连线 / 光点：中性（实现与动画归 motion.css） —— */
  --v2-thread: var(--wv-line);
  --v2-thread-on: var(--wv-text-3);
  --v2-flow-dot: color-mix(in srgb, var(--wv-dot) calc(var(--wv-dot-opacity) * 100%), transparent);   /* 光点色已含 ≤.35 不透明度：motion.css 关键帧峰值 opacity 1 时实际渲染仍 ≤.35 */

  /* —— 标题字体 —— */
  --v2-hero-font: var(--font-ui);
  --v2-hero-size: 72px;
  --v2-hero-size-tablet: 56px;
  --v2-hero-size-mobile: 44px;
  --v2-hero-weight: 800;
  --v2-hero-tracking: -0.02em;
  --v2-hero-leading: 1.08;
  --v2-hero-color: var(--v2-text-1);
  --v2-h2-size: 32px;
  --v2-h2-weight: 800;
  --v2-h2-tracking: -0.025em;
  --v2-mono-font: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;

  /* —— 第二行：衬线斜体，中性墨色（不再用绿渐变 / 墨线收笔） —— */
  --v2-accent-font: 'Noto Serif SC', 'Noto Serif CJK SC', 'Source Han Serif SC', 'Songti SC', STSong, Georgia, serif;
  --v2-accent-style: italic;
  --v2-accent-weight: 600;
  --v2-accent-display: block;
  --v2-accent-tracking: -0.01em;
  --v2-accent-gap: 4px;
  --v2-accent-line: none;
  --v2-accent-line-h: 0px;
  --v2-accent-text-color: var(--v2-text-1);
  --v2-accent-text-fill: none;
  --v2-accent-text-clip: currentColor;

  /* —— 背景：纯中性页面底 + 几乎不可见的颗粒（opacity .015） —— */
  --v2-ambient: linear-gradient(var(--v2-page-bg), var(--v2-page-bg));
  --v2-ambient-preview: none;
  --v2-ambient-preview-size: 100% 100%;
  --v2-ambient-preview-mask: none;
  --v2-bg-grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .6 .1'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)' opacity='.015'/%3E%3C/svg%3E");
  --v2-bg-grain-size: 180px 180px;
  --v2-ambient-size: 100% 100%;
  --v2-bg-texture: none;
  --v2-bg-texture-size: auto;
  --v2-ambient-mask: none;
  --v2-texture-mask: none;

  /* —— 表面（全部映射到两层中性底） —— */
  --v2-surface-page: var(--v2-page-bg);
  --v2-surface-card: var(--v2-card-bg);
  --v2-surface-input: var(--v2-card-bg);
  --v2-surface-raised: var(--v2-card-bg);
  --v2-surface-sunken: var(--v2-page-bg);
  --v2-surface-tag: var(--v2-page-bg);
  --v2-surface-icon: var(--v2-page-bg);
  --v2-surface-gloss: var(--v2-page-bg);
  --v2-surface-paper: var(--v2-card-bg);
  --v2-edge: var(--v2-line);
  --v2-card-border: var(--v2-line);
  --v2-paper-edge: var(--v2-line);
  --v2-nav-line: var(--v2-line);
  --v2-rule: var(--v2-line);
  --v2-rule-strong: var(--v2-line);
  --icon-accent: transparent;
  --v2-stat-num: var(--v2-text-1);
  --v2-label-font: var(--font-ui);
  --v2-label-size: 13px;
  --v2-sub-size: 18px;
  --v2-sub-measure: 24em;
  --v2-sub-color: var(--v2-text-2);
  --v2-input-h: var(--wv-input-h);
  --v2-gen-w: 128px;
  --v2-input-inset: 6px;                      /* 按钮距外缘 = 1 描边 + 5 内边距 */

  /* —— 主视觉 —— */
  --v2-pv-offset: 8px;
  --v2-tag-size: 15px;
  --v2-tag-weight: 600;
  --v2-tag-color: var(--v2-text-1);
  --v2-tag-bg: var(--v2-card-bg);
  --v2-word-on: var(--v2-word);
  --v2-mark-tint: var(--v2-word-tint);
  --v2-paper-peek: 8px;                       /* 唯一一层叠卡边露出量（VISUAL §1.3.3：下移 8、左右内收 16） */

  /* —— 特性区：不再用底板，直接两层中性 —— */
  --v2-feat-section-bg: transparent;
  --v2-feat-section-edge: none;
  --v2-feat-section-radius: var(--v2-radius-card);
  --v2-feat-section-pad: 0;
  --v2-feat-section-pad-mobile: 0;

  /* —— 唯一一种阴影（静 / 悬停两档），唯一描边见 --v2-line —— */
  --v2-shadow: var(--wv-shadow);
  --v2-shadow-hover: var(--wv-shadow);         /* 只有一套阴影：hover 只上浮，不加深（V2U-VISUAL §1.3.1） */
  --v2-shadow-card: var(--v2-shadow);
  --v2-shadow-card-hover: var(--v2-shadow-hover);
  --v2-shadow-hero-card: var(--v2-shadow);
  --v2-shadow-hero-card-hover: var(--v2-shadow-hover);
  --v2-shadow-thumb: none;
  --v2-shadow-tag: none;
  --v2-shadow-pill: none;
  --v2-shadow-track: none;
  --v2-paper-stack: none;                     /* v2u 叠卡边改为 .v2-preview::after 单层伪元素（不再用阴影错位叠层） */
  --v2-glass-bg: rgba(255, 255, 255, .86);
  --v2-glass-blur: 16px;
  --v2-glass-saturate: 140%;

  /* —— 主按钮：近黑实色，无渐变、无辉光 —— */
  --v2-btn-bg: var(--v2-ui-strong);
  --v2-btn-fg: var(--v2-ui-on-strong);
  --v2-btn-shadow: none;
  --v2-btn-shadow-flat: none;
  --v2-btn-shadow-active: none;
  --v2-btn-hover-filter: none;
  --v2-btn-active-filter: none;
  --v2-btn-press-shift: 0px;
  --v2-btn-sheen: rgba(255, 255, 255, .105);  /* hover 叠层：#111413 上 ≈ --wv-btn-hover #2A2E2C */

  /* —— 聚焦（中性） —— */
  --v2-ring: var(--wv-focus);                 /* 焦点环 2px 近黑（--wv-ring），不用绿 */
  --v2-ring-width: 2px;
  --v2-progress-fill: var(--v2-ui-strong);

  /* —— 动效变量（缓动/时长/光点/光标）已移到 motion.css 顶部 —— */

  /* —— 圆角：卡 20 / 控件 12 / 胶囊 999（一套） —— */
  --v2-radius-card: var(--wv-r-card);
  --v2-radius-control: var(--wv-r-ctl);
  --v2-radius-pill: var(--wv-r-pill);
  --v2-radius-seg-item: 999px;
  --v2-radius-chip: 999px;
  --v2-radius-mark: 999px;
}
[data-theme="dark"] {
  --wv-card: var(--wv-surface); --wv-grain: #EDEEED;
  --wv-bg: #0E0F0F; --wv-surface: #161817; --wv-line: #2A2D2B;
  --wv-text-1: #EDEEED; --wv-text-2: #B5BAB7; --wv-text-3: #8C918E;
  --wv-btn: #F2F3F2; --wv-btn-hover: #D9DBDA; --wv-on-btn: #111413;
  --wv-green: #7DBBA2; --wv-green-tint: #1B2A24; --wv-danger: #F0796E; --wv-focus: #F2F3F2;
  --wv-halo: rgba(242, 243, 242, .09);
  --wv-shadow: 0 1px 2px rgba(0, 0, 0, .30), 0 8px 24px rgba(0, 0, 0, .28);
  --v2-ui-tint: rgba(237, 238, 237, .06);
  --v2-bg-grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .6 .1'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)' opacity='.015'/%3E%3C/svg%3E");
  --v2-glass-bg: rgba(14, 15, 15, .86);
  --v2-btn-sheen: rgba(0, 0, 0, .10);          /* #F2F3F2 上 ≈ --wv-btn-hover #D9DBDA */
}

/* §3.2 / M07 输入框自绘光标显隐（静态规则，墨川）：与原生 caret-color 由同一条件 :focus:placeholder-shown 同帧切换，
 * 无过渡；任何时刻只有一个光标。闪烁动画归 motion.css（流光），只应挂在同一条件下。 */
#page-home .input-wrapper { position: relative; }
#page-home .wv-input-caret { display: none; position: absolute; left: 17px; top: 50%; width: 2px; height: 18px; margin-top: -9px; background: var(--wv-text-1); pointer-events: none; transition: none; }
#page-home .home-input:focus:placeholder-shown { caret-color: transparent; }
/* s16c 衡舟 05:30（墨川）：B 版（html[data-wv-layout="b"]）editorial-b.css:200 隐藏了自绘 .wv-input-caret，原生 caret 又被上一行与 motion.css:122 设透明 → 空 + 聚焦时无光标。
 * B 下恢复原生 caret。特异性 (2,4,1) > motion.css:122 `#page-home #word-input:focus:placeholder-shown` (2,2,0)，不用 !important；非 B（无该属性）行为不变。
 * 按衡舟 05:39：统一用站内已有 var(--wv-text-1)，不新增 --t1（随浅/深主题变，不写死颜色）。 */
html[data-wv-layout="b"] #page-home #word-input.home-input:focus:placeholder-shown { caret-color: var(--wv-text-1); }
#page-home .input-wrapper:has(> .home-input:focus:placeholder-shown) > .wv-input-caret { display: block; }
@media (max-width: 767px) { #page-home .wv-input-caret { left: 13px; height: 16px; margin-top: -8px; } }

/* ================= §13 导出弹窗文字状态（墨川 17:45；只做状态修复，不推新风格；app.js 不改）================= */
#export-modal .wv-progress-bar { display: none; }                                                     /* 无真实进度：不显示进度轨 */
#export-modal-btn { display: inline-grid !important; grid-template-areas: "s"; place-items: center; }  /* 覆盖 app.js inline display:none/inline-block：按钮一直在 */
#export-modal-btn.loading { pointer-events: none; }                                                   /* 进行中「正在导出…」不可点；js/v2u-export-state.js 另挡键盘 */

/* ================= CLS（衡舟 17:37 硬性要求 CLS=0；只改 v2-theme.css / index.html）================= */
/* ① 换页：导航条几何全站统一为首页值（高 64 / 移动 56，内宽 1040 / 左右 32 / 移动 16），切故事页不再 64→56 跳 8px、品牌不横移 */
:root { --nav-h: 64px; }
.nav { height: var(--nav-h); }
.nav-inner { max-width: 1040px; padding: 0 32px; }
@media (max-width: 767px) { :root { --nav-h: 56px; } .nav { height: var(--nav-h); } .nav-inner { padding: 0 16px; } }
/*    导航内部盒子也统一成首页几何（视觉不变）：tab 行 44 高垂直居中，下划线仍贴导航底；更多按钮容器固定 40 高 */
body:not([data-page="home"]) .nav-links { height: 44px; align-self: center; }
body:not([data-page="home"]) .nav-tab { height: 44px; }
/* v2u R2 C12 导航统一：下划线定位改由 style.css `body[data-page] .nav-tab.active::after`（bottom:2px）全站统一；原：body:not([data-page="home"]) .nav-tab.active::after { bottom: calc((44px - var(--nav-h)) / 2); } */
.nav-more { height: 40px; }
/* ② 输入词块托盘：始终占一行（空时 visibility:hidden），输入第一个词不再把预览推下 28px */
#page-home #word-crystals-tray { display: flex !important; min-height: 32px; }
#page-home #word-crystals-tray:empty { visibility: hidden; }
/* ③ 生成中：取消按钮与状态行脱离文档流，不撑高输入卡、不横推「随机来一组」 */
#page-home #v2u-input-foot { position: relative; }
#page-home #cancel-btn { position: absolute; top: 0; left: 50%; margin-left: 64px; min-height: 44px; height: 44px; padding: 0 12px; }
#page-home .home-input-form { position: relative; }
#page-home .casting-bar { position: absolute; left: 0; right: 0; top: 100%; margin: 8px 0 0; }
/* ④ 字体换装（font-display:swap）回退度量对齐：Noto Sans/Serif SC 走 Google Fonts 异步加载，加载前的系统回退字体行高/基线不同 → 冷启动 .v2-grad +4px、故事页英文段落换行跳动。
 *    实测（Chromium canvas fontBoundingBox，100px）：Noto Sans SC 116/29，Noto Serif SC 115/29（与本机 Noto Sans/Serif CJK SC 字宽一致 770/780），系统 serif 89/22、DejaVu 93/24。
 *    做法：回退 @font-face 用 local() 指向各平台中文系统字，ascent/descent/line-gap 覆盖成 Noto 的值；字宽中文一律 1em，size-adjust 100%。 */
@font-face { font-family: "WV Sans SC Fallback"; font-weight: 100 450; src: local("PingFang SC"), local("PingFangSC-Regular"), local("Microsoft YaHei"), local("Noto Sans CJK SC"), local("NotoSansCJKsc-Regular"), local("Source Han Sans SC"), local("HarmonyOS Sans SC"), local("WenQuanYi Micro Hei");
  size-adjust: 100%; ascent-override: 116%; descent-override: 29%; line-gap-override: 0%; }
@font-face { font-family: "WV Sans SC Fallback"; font-weight: 451 900; src: local("PingFangSC-Semibold"), local("Microsoft YaHei Bold"), local("Noto Sans CJK SC Bold"), local("NotoSansCJKsc-Bold"), local("Source Han Sans SC Bold"), local("WenQuanYi Micro Hei");
  size-adjust: 99.6%; ascent-override: 116.5%; descent-override: 29.1%; line-gap-override: 0%; }   /* 800 中文字宽：首页标题「把生词」Noto Sans SC 164 / CJK Bold 167（×101.4 前 98.2%）→ 99.6%；度量 ÷0.996 */
@font-face { font-family: "WV Serif SC Fallback"; font-weight: 100 450; src: local("Noto Serif CJK SC"), local("NotoSerifCJKsc-Regular"), local("Source Han Serif SC"), local("Songti SC"), local("STSong"), local("SimSun");
  size-adjust: 100%; ascent-override: 115%; descent-override: 29%; line-gap-override: 0%; }
@font-face { font-family: "WV Serif SC Fallback"; font-weight: 451 900; src: local("Noto Serif CJK SC Bold"), local("NotoSerifCJKsc-Bold"), local("Source Han Serif SC Bold"), local("STSongti-SC-Bold"), local("Songti SC Bold"), local("SimSun");
  size-adjust: 98%; ascent-override: 117.3%; descent-override: 29.6%; line-gap-override: 0%; }      /* 600 字宽：Noto Serif SC 1118 / CJK Bold 1141 → 98%；度量 ÷0.98 */
:root { --font-read: 'Iowan Old Style', 'Charter', 'Georgia', 'Noto Serif SC', 'WV Serif SC Fallback', 'Source Han Serif SC', 'Songti SC', 'STSong', serif; }
body[data-page="home"] { --wv-font-ui: "Inter", "Noto Sans SC", "WV Sans SC Fallback", system-ui, sans-serif; }
/* v2u R2 D13（鉴心）：滚动条出现不再横移导航 */
html { scrollbar-gutter: stable; }
/* v2u R2 D14：Inter / Fraunces 正体在本文件重声明为 font-display: optional（同描述符后声明者生效；fonts/fonts.css 不动），配合 index.html preload → 冷启动无字体换装位移 */
/* s15（墨川）：字体去重。Inter-400/500/600.woff2 是同一个可变字体文件（wght 100–900，md5 260c81a4…），Fraunces-400/500/600/700 也是同一个文件（opsz+wght，md5 069cb90e…），
   旧写法按字重各引一个 URL → 同一文件下载 2–3 次（守望实测 164,464 B）。改为每个字族一条 @font-face + font-weight 范围（= 旧各条字重的并集），只引 -400 文件；
   渲染不变：可变字体按 font-weight 取 wght 轴值，范围内各字重与旧写法同值。fonts/fonts.css 不再引用，其中 Fraunces 斜体 / JetBrains Mono 原样并入此处（font-display: swap 不变）。 */
@font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 400 700; font-display: optional; src: url(fonts/Fraunces-400.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+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 400 600; font-display: optional; src: url(fonts/Inter-400.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+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Fraunces'; font-style: italic; font-weight: 400; font-display: swap; src: url(fonts/Fraunces-400italic.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+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'JetBrains Mono'; font-style: italic; font-weight: 400; font-display: swap; src: url(fonts/JetBrainsMono-400italic.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+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 400 500; font-display: swap; src: url(fonts/JetBrainsMono-400.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+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
/* s15：font-synthesis（衡舟 s15 工程项 2）——见下 */
/* s15：none 会让无真粗体的 CJK 回退字体（如 Linux/Android 上 WenQuanYi/Noto Regular）失去伪粗体（难度「探险者」、阅读工具栏等可见变细），
   按衡舟“可见变化则先报告”原则，暂只关闭伪斜体/伪小型大写，保留 weight 合成；改为 none 需衡舟确认。证据 dev/evidence-s15-synth-*. */
html { font-synthesis: weight; }
