[teamai] Push 87 resource(s) from XingfenD

This commit is contained in:
2026-09-10 16:10:45 +08:00
parent 425c9c078a
commit 65c04def51
1314 changed files with 211681 additions and 0 deletions
@@ -0,0 +1,224 @@
# 章节开发指引(每章开发必读)
---
## 这是视频,不是 PPT
正在做的是**视频网页** —— 讲者点击 + 口播 + 录屏发出去给观众看。
判断每一步做对没有,标准非常朴素:
- **不像 PPT** —— 观众感觉是在看视频,不是在看翻页幻灯(页面中不得包含页眉页脚,突出主视觉元素)
- **看起来舒服** —— 配色、字体、节奏都让人放松,不得出现大量的纯文字、不得出现字体太小的文字
- **有视觉冲击** —— 画面在演事情,不只是文字堆砌,不得一次性全部罗列所有元素,关键元素随进度逐步推进展现
---
## 必须用 CSS / SVG / Canvas / JS 大胆绘制视觉演示
> **这是底线。**
>
> 每一章都至少要有 1~2 处"动起来的图 / 演示元素"。
> **整章只有纯文字 = 验收不过 = 回去重做。**
视频感最强的来源 —— 用户**看见**了被讲解的东西在屏幕上演给他看:
- 数字在递增 / 横条在生长 / 排名在交换
- 流程节点依次点亮 / 连线自绘
- 对比被一刀切开 / 聚光灯扫过 / 形状在变形
- 粒子聚拢成形 / 噪声背景流动 / 字符雨下落
- 模拟终端交互
- 模拟 AI 对话窗口
- 模拟文件目录树
**怎么组合发挥都行 —— 但每章必须用,不允许整章纯文字。**
---
## 逐步揭示,禁止一次全展示
整页内容由**全局 `step` 计数器**驱动 —— 点击空白处或按 → 键推进
一步。设计每一步时心里要默念:**这一步演什么,下一步演什么**。
**最重要的一条**:
> 当口播在说"第一是 X、第二是 Y、第三是 Z"这种**清单 / 列表**时,
> **严禁**一个 step 把 X / Y / Z 全部 stagger 上来。
正确做法:
- 一项 = 一个 step
- X 只在它自己的 step 里独自亮起
- 讲到 Y 时,X 灰化保留作上下文 + Y 亮起
- 讲到 Z 时,X / Y 都灰化 + Z 亮起
**判断标准**:讲者会一个一个念出来吗?会 → 必须逐个揭示。
---
## 内容取舍:抓重点,不要原文搬运
视频是**音 + 画**:
- **口播**负责把信息线性讲清楚
- **画面**负责把节拍重点放大、节奏感拉出来
每个 step 屏幕上只挂这个节拍**最值得放大的 1~3 个东西** —— 一个
hero 标语 / 一个数字 / 一组对比 + 必要的视觉演示。
不要试图把原文每个字都搬上去。那是论文阅读,不是视频。
---
## 双源:节奏跟口播稿,细节回原文章
> **节奏 / 顺序 / 节拍切分** 跟 **`script.md` 口播稿** —— **关键顺序不能乱**。
> **画面细节 / 数据 / 引用 / 案例** 回 **`article.md` 原文章**抽。
`outline.md` 已经在每章首段抽了「信息池」做参考。但**实现章节时
也必须回去翻 `article.md` 本章对应段落** —— 那里有比口播稿多得多的
细节(具体数字、引用原话、案例维度、出处时间)。把这些挂到画面上,
让**画面信息密度 > 口播信息密度**。
> **如果你只用了口播稿的内容做章节** —— 屏幕等于把口播打字打了一遍
> —— 那就是 PPT,不是视频。
>
> 章节实现一定要回原始文章抽细节,不要嫌麻烦。
---
## 字体 / 配色 / 动画 / 留白 —— 视频演示基本审美
视频观众离屏幕远、注意力浮动,所以:
- **字号要大** —— hero 文字至少 80px 起,远观也能看清
- **留白要多** —— 舞台四边都要让出大留白,画面不要塞满
- **配色要舒服** —— **颜色和字体家族必须用主题 token**(保证换主题不破);
字号 / 间距 / 时长这些章节按内容自由发挥(详见下方「代码层最小约束」)
- **动画要舒服 + 炫酷** —— 出现得干净利落,停下来不抢戏;炫酷靠
**设计巧思**(内容驱动的演示动画),不靠**速度暴力**或**密集闪烁**
---
## 避免 AI 味
AI 生成的网页有几种共有的"视觉指纹",**全部不要**:
- 紫粉 / 蓝紫对角渐变背景
- 圆角卡片 + 彩色左边框装饰
- 渐变按钮 + 大圆角药丸
- emoji 当图标用
- 假数据 / 假 logo / 假"X 万用户"
- 整章 N 步用同一种入场动画(全场 fade / 全场 blur)
- 每步都挂 ken burns / 光晕呼吸 / 持续闪烁
- 每屏右下角都挂 mono 角标 / 序号
缺的东西**承认缺** —— 用 placeholder 占位卡(一张写着"image · 16:9
描述"的卡片,按真实比例留位)。**不要**用 emoji 凑、不要找无关图凑、
不要编数字。**没有就承认没有**,比 fake 强一百倍。
---
## 框架已经搭好的部分(理解就好,不需重写)
- **16:9 固定舞台**:内容设计在 1920×1080 上,外层 transform scale
缩到任何视口,外围 letterbox 留黑 —— **没有响应式断点**
- **舞台居中 + 大留白**:上下左右四边都让出至少 80px 的安全区
- **隐形进度条**:屏幕底部默认完全透明,鼠标悬到底部边缘才出现,
支持点击跳转章节(录屏时摄像头看不到任何 chrome 控件)
- **全局 step 驱动**:点击舞台空白处 / 键盘 ←/→ 推进;章节是 `step`
的纯函数,没有定时器、没有命令式状态
---
## 代码层最小约束
不能踩的红线,其它怎么写都行:
### 必须用 token(换主题不破的底线)
- **颜色**:`--shell` / `--surface` / `--surface-2` / `--surface-3` /
`--text` / `--text-2` / `--text-mute` / `--text-faint` / `--rule` /
`--accent` / `--accent-soft` / `--accent-glow` ——
**禁硬编码 hex / rgb / 颜色名**
- **字体家族**:`--font-display-cn` / `--font-display-en` / `--font-body`
/ `--font-mono` —— **禁硬编码字体名**
- **主题性格签名**通过 primitive class 自动接入,**不要在章节 CSS 里
重定义它们**:
- `.hero-num`(hero 数字风格 —— 主题决定衬线 / 等宽 / 粗黑)
- `.rule`(分割线 —— 主题决定 1px 实线 / 4px 实线 / 2px 虚线)
- `.card`(卡片 —— 主题决定圆角 + 阴影性格)
- `.stage-frame`(舞台底色 / 圆角 / 阴影 / 装饰图案 / vignette
全自动,章节什么都不用做)
### 可硬编码 / 可 token,按内容自由(解锁章节自由设计)
- **字号**:想要 80px 就写 80px,想用 `var(--t-h1)` 也行
- **间距 / padding / margin**:按画面节奏写具体值
- **动画时长 / 缓动 / keyframe**:按动画意图写具体值
(**节奏气质**参考 `theme.json` 的 `mood` —— 慢主题别写 200ms 的快动画)
- **边框宽度 / 非性格圆角 / 字距**:随手写
- **gap / grid 布局尺寸**:按画面构图写
### 其它工程红线
- 不用 `setTimeout` / `setInterval` 驱动动画 —— 用 CSS keyframes
- 章节内的可交互元素(按钮 / 自定义控件)加 `data-no-advance`,
否则点了会被舞台误推进 step
- 章节代码物理隔离:每章独立文件夹、独立 CSS 类前缀,不跨章 import
- **每章必须有 `narrations.ts`**(与 `<Chapter>.tsx` 同目录):
- 数组长度 **=** 章节代码里 `if (step === N)` 出现的最大 N + 1
- 每个元素 = 一个 string,该 step 要播的口播文本(来自 `script.md`
对应段,**语义一致**——可微调标点 / 断句以适配 TTS,但不能漏关键短语)
- 完全无音频的过场 step 用空串 `""`,Auto 模式会按字数估时撑过
- 这是**音频合成 + Auto 模式自动推进的唯一真相源**,写错或漏写
会让录屏对不上嘴
- **动画时长必须 ≤ 该 step 的口播时长**——Auto 模式严格按音频结束推进,
没有"等动画跑完"的兜底。动画太长 → 三选一:**写更长口播 / 拆 step
/ 调动画速度**。详细机制见 [`AUDIO.md`](AUDIO.md)
---
## 完工自检(写完每章**强制**执行,不可跳过)
> ⚠️ **硬性流程**:章节实现完成后**必须**走完下面的自检 → 修复 → 汇报
> 三步。**禁止**"实现完成 → 直接汇报给用户"。
>
> **执行方式**(按能力降级):
>
> 1. **优先 Agent Teams**:开一个独立的 reviewer agent,传入本章代码路径
> + 本文件 Part「完工自检」清单,让它**逐项核查 + 出结论**(哪几条
> pass / 哪几条 fail + 证据)。
> 2. **其次 subAgent**:当前 agent 没有 Teams 能力但能开 subagent,用 subagent
> 走同样的流程。
> 3. **都没有**:当前 agent 自己**严格逐项**核查,不允许目测一遍就放行。
>
> **拿到自检结论后**:先按 fail 项**改完代码**,然后再向用户汇报"做完
> 了 + 自检结论 + 改了什么"。**直接拿原始结论汇报但不修复 = 违规**。
写完一章 + 在浏览器点完一遍后逐项过:
- [ ] **每章至少 1~2 处 CSS / SVG / Canvas / JS 视觉演示** —— 没有 = 回去补
- [ ] **不同 step 的主导动作不一样** —— 全章一种动画 = 回去重做
- [ ] 字号大、留白舒服、配色舒服
- [ ] 清单 / 列表逐个揭示,**1 项 = 1 step**
- [ ] 画面信息比口播稿多(回了原文章抽细节挂上来)
- [ ] 没有紫粉渐变 / 圆角彩色边框 / emoji / 假数据 / 假 logo
- [ ] 缺的素材用 placeholder,不是 fake
- [ ] **颜色和字体家族全部走 token**(无硬编码 hex / 字体名);hero 数字
/ 卡片 / 分割线 / 舞台用 primitive class 接入主题性格 —— 这两条不
达标 = 换主题就破
- [ ] 章节交付时**主动告诉用户**:"本章还缺这些素材"
- [ ] 禁止出现小号字体,大量纯文字(出现后必须回去改)
- [ ] 禁止出现任何形式的页眉页脚,仅展示关键内容(出现后必须回去改)
- [ ] **`npx tsc --noEmit` 通过** —— 不通过禁止汇报"做完了"
- [ ] 章节代码物理隔离:独立 CSS 类前缀(`.cd-` / `.mg-` / ...),
未跨章 import,未修改 `chapters.ts` 之外的共享文件
- [ ] **`narrations.ts` 存在**且 `narrations.length` === 章节代码里
`if (step === N)` 用到的最大 N + 1(不一致 = Auto 模式录屏会错位)
- [ ] **每条 narration 文本与 `script.md` 对应段落语义一致**(关键短语 /
数字 / 引用全部保留,可为 TTS 微调标点断句)—— 录屏画外音应当能被
观众听成同一段稿子
- [ ] **每个 step 的视觉动画时长 ≤ 口播时长**(口播 `字数 ÷ 4` ≈ 秒数)——
超出会被 Auto 模式当场切断,动画演到一半就跳下一步
任一未过 → 回去改。**不要**"先放着以后修"。