SIGN IN SIGN UP

支持英文片(lang: 'zh' | 'en')

原来的视觉体系写死了中文假设:标题按 scaleX .85 压窄、居中文字预扣 CJK 基线、
字幕单行 nowrap(英文一块 8 个词就 1300px 出画两头被裁)、进度条章名与章节卡标题按中文字数排。

- config.ts 新增 lang;common/lib.tsx 派生 SQUEEZE(中 .85 / 英 1)与 TEXT_DY(−2 / 0),
  ui.tsx CText 的 dy 默认改取 TEXT_DY,片头/章节卡改用 SQUEEZE
- 新增 common/textfit.ts:按字体实测 em 宽(fontTools 量 Noto/Audiowide/Orbitron/Exo 2)
  估宽 + 自适应字号,纯函数不测 DOM,渲染保持确定性
- 字幕:超宽先缩到 34px,连 34px 都装不下就折两行向上生长(可读,且会被 QC 判缺陷),不再裁切
- 进度条章名按槽宽自适应、章节卡标题与片头大字同样兜底;title.rest / chapterTech 留空即不渲染
- tts_build.py:检测解说词语言 → 选引擎(zh→edge / en→kokoro),与 config.lang 不一致时告警;
  逐块体检字幕长度预算(中 16 字 / 英 48 字符)并列出超预算的块;英文按词计量语速
- 文档:narration-storyboard §2.5 英文写法与篇幅档、style-guide §3.1 英文排版、
  构建/QC 协议与 prompt 模板补英文条目、SKILL 确认点 1 改为「时长与语言」、README 双语更新

实测:英文测试片(3 章 7 句)跑通 tts_build → tsc → 渲帧核对片头/章节卡/字幕/进度条;
中文路径按构造无回归(16 字块 528px 远小于 1160px,取值与改动前一致)。
kokoro 引擎本机未安装,英文配音走 edge en-US 验证的是同一条时间轴管线。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
V
Vincent Wei committed
9e4110b128d07de0590d800945984cedbe54ab9e
Parent: eb52d27