Просмотр исходного кода

Remove genek-paper-2-all

Made-with: Cursor
zhxd 2 месяцев назад
Родитель
Сommit
3cdfd6f745

+ 0 - 307
genek-paper-2-all/SKILL.md

@@ -1,307 +0,0 @@
----
-name: genek-paper-2-all
-description: 从论文生成 HTML 海报和 PPTX 的统一 pipeline。海报使用原图,PPT 使用拆分后的 panel 图。当用户提及"论文转海报"、"论文转PPT"、"学术海报"、"论文转网页"时使用此技能。
----
-
-# Paper2All 统一 Pipeline
-
-从单篇论文生成两种展示格式,**内容一致**。图片策略:**海报(HTML)使用原图**(`figures/fig{N}.png`),**PPT 使用拆分后的 panel 图**(`figures/panels/`)。
-
-网页展示统一采用 poster 布局(三列 Grid + 交互组件),不再单独生成 slides 页面。
-
-## 适用边界(职责分层)
-
-- `genek-paper-2-all` 只定义 **What**(内容结构、映射规则、命名规范、验收门禁)
-- `pptx` skill 负责 **How**(具体排版渲染与 PPT 文件生成)
-- `genek-paper-2-all` 不重复实现 `pptx` 内部逻辑,只通过契约调用
-
-## 目录结构(按论文隔离)
-
-每篇论文以 **第一作者姓氏 + 年份** 命名独立子目录(与 `genek-extract-figures`、`genek-split-figures` 约定一致):
-
-```
-papers/
-└── {Author}{Year}/                          (如 Li2022、Zhang2023)
-    ├── paper.pdf
-    ├── figures/
-    │   ├── fig1.png ... figN.png            (原图,genek-extract-figures)
-    │   └── panels/
-    │       ├── fig1_A.png                   (拆分后的 panel)
-    │       ├── fig1_BC.png
-    │       └── ...
-    ├── poster.html                          (网页海报,唯一的 HTML 输出)
-    ├── create_pptx.js
-    └── presentation.pptx
-```
-
-## 最小可执行流程(MVP)
-
-本节是执行入口。满足前置条件后,按 S0-S6 顺序执行。
-
-| 步骤 | 目标 | 输入 | 输出 | 成功判据 |
-|------|------|------|------|----------|
-| **S0** | 建立论文目录 | `paper.pdf` | `papers/{Author}{Year}/` | 目录结构正确 |
-| **S1** | 抽取结构化内容 | `paper.pdf` | 标题/作者/Background/Design/Methods/Results/Conclusions | 字段齐全,无空段 |
-| **S2** | 提取原图 | `paper.pdf` | `figures/fig1..figN.png` | 图片数与主图数一致 |
-| **S3** | 拆分 panel | `figures/figN.png` | `figures/panels/fig{N}_{group}.png` | 每个 Result 有对应 panel |
-| **S4** | 生成海报 | 结构化内容 + 原图 | `poster.html` | 页面可打开,图文完整 |
-| **S5** | 生成 PPT | 结构化内容 + panel 图 | `presentation.pptx` | 可打开,页序与映射一致 |
-| **S6** | QA 门禁 | 两种输出 | 通过/不通过 | 满足本文件 QA Gate |
-
-失败策略:
-- S2 失败:回退到 `genek-extract-figures` 的备选路径
-- S3 失败:允许人工校正 panel 分组后重跑
-- S5 失败:返回到 PPT 契约检查,定位为“输入缺失”或“渲染失败”
-
-## 五步通用流程
-
-| 步骤 | 内容 | 依赖 |
-|------|------|------|
-| **S1** | 阅读论文,提取结构化内容(标题/作者/项目设计/Introduction/Methods/Results/Conclusions) | — |
-| **S2** | 提取 Figure 原图 → `figures/fig1.png` … | `genek-extract-figures` |
-| **S3** | 对每张 Figure 拆分 panel → `figures/panels/fig{N}_{panels}.png` | `genek-split-figures` |
-| **S4** | 用同一份内容生成 poster.html(原图)和 presentation.pptx(panel 图) | 见 [poster-components](references/poster-components.md)、`pptx` skill |
-| **S5** | 本地预览,检查图片、交互、双语、两格式内容一致 | — |
-
-## PPT 调用契约(核心)
-
-本节是 `genek-paper-2-all` 与 `pptx` skill 的接口定义。`pptx` 侧实现可变化,但契约必须稳定。
-
-### 0) 内容源契约(必须遵守)
-
-- `presentation.pptx` 的文本内容以 `poster.html` 为唯一事实来源(SSOT)
-- 禁止 PPT 与 poster 出现语义漂移:标题、关键发现、结论必须一一可追溯
-- 建议先从 poster 抽取结构化字段,再交给 `pptx` skill 渲染
-
-### 1) 固定输入契约
-
-- 论文目录:`papers/{Author}{Year}/`
-- panel 输入:`papers/{Author}{Year}/figures/panels/*.png`
-- 命名格式:`fig{N}_{GROUP}.png`,例如 `fig3_A.png`、`fig3_BC.png`
-- 结构化内容必须包含:
-  - `title`, `authors`, `affiliation`
-  - `background`, `study_design`, `methods`, `results[]`, `conclusions[]`
-  - `results[]` 中每项需含 `result_id`, `headline`, `key_points`, `source_figure`
-
-### 2) 固定输出契约
-
-- 产物:`papers/{Author}{Year}/presentation.pptx`
-- 平台兼容产物(macOS 默认启用):
-  - `papers/{Author}{Year}/presentation_keynote_compatible.pptx`
-  - 若 Keynote 仍存在导入问题,额外导出 `papers/{Author}{Year}/presentation_keynote_compatible.ppt`
-- 页序:
-  1. Title
-  2. Background
-  3. Study Design
-  4. Methods
-  5. Result Panels(1 panel = 1 页)
-  6. Conclusion
-  7. End / Acknowledgment(可与 Conclusion 合并)
-
-### 3) panel -> slide 映射规则
-
-- 规则:**1 张 panel 图 = 1 张 Result 幻灯片**
-- 排序:先按 `figN` 数字升序,再按 `GROUP` 字典序(A < B < BC < DEFG)
-- 推荐标题:`Result {k}: {headline}`,副标题显示来源 `Figure {N} / Panel {GROUP}`
-- 详细解读要求(每张子图必须具备):
-  1. **What is shown**:该子图展示了什么数据/现象
-  2. **Evidence**:关键数值、统计关系或对照结果
-  3. **Biological interpretation**:生物学含义或机制推断
-  4. **Cross-species implication**:跨物种比较下的意义
-  5. **Take-home message**:一句话结论
-- 若 `results[]` 条目数与 panel 数不一致,按以下优先级处理:
-  1. 若 panel 更多:允许复用同一 `headline`,但必须在 notes 标注“same finding, different panel”
-  2. 若 panel 更少:阻断交付,返回“不通过(输入不完整)”
-
-### 4) 双语契约
-
-- 默认模式:英文正文 + 中文 speaker notes
-- 可选模式:双语双套 slides(EN 全套后接 ZH 全套)
-- 必填规则:
-  - 每页必须有英文可读正文
-  - 中文 notes 不得为空(若开启默认模式)
-
-### 5) 错误与降级契约
-
-- 缺失 panel 文件:禁止“空白页占位”,直接 fail-fast
-- panel 文件损坏:跳过该文件并计入错误,最终判定不通过
-- 渲染后页数不一致:按 Gate 判定不通过,不可直接交付
-- macOS 导出策略:
-  - 先生成标准 `presentation.pptx`
-  - 默认执行一次兼容中转导出,生成 `presentation_keynote_compatible.pptx`
-  - 若兼容版仍不可用,再降级导出 `presentation_keynote_compatible.ppt`
-
-### Panel 命名规范
-
-拆分结果统一命名:
-
-- 单 panel:`fig1_A.png`
-- 多 panel 合并为一组:`fig1_BC.png`、`fig1_DEFG.png`
-
-### 图片使用规则与 Result 对应关系
-
-| 格式 | 使用图片 | 路径 | Result 对应 |
-|------|---------|------|------------|
-| poster.html | **原图** | `figures/fig{N}.png` | **1 张原图 = 1 个 Result 卡片** |
-| presentation.pptx | **panel 图** | `figures/panels/fig{N}_{panels}.png` | **1 张子图 = 1 页 PPT** |
-
-**海报**:每个 Result 卡片对应论文的一张完整 Figure 原图。Result 数量 = 论文主图数量(通常 4–7 张)。海报空间充裕,用原图展示完整 Figure 更直观。
-
-**PPT**:每页 PPT 对应一张拆分后的 panel 子图,逐张讲解。一张 Figure 可能拆分为多个 panel,因此 PPT 页数通常多于海报 Result 卡片数。PPT 按 panel 粒度展开,便于口头演讲时逐步讲解。
-
-### 项目设计(Study Design)
-
-从论文 Methods/Results 中提取实验设计信息,以**表格 + 关键统计数字**呈现。两种格式均需包含。
-
-常见字段(按论文实际内容选取,不同领域可增减):
-
-| 字段 | 适用场景 | 示例 |
-|------|---------|------|
-| 物种 (Species) | 动物/植物/微生物研究 | Human, Mouse, Chicken 等 |
-| 样本类型 (Sample) | 所有实验研究 | Fibroblast cell lines, Tumor tissue, Serum |
-| 样本数量 (Replicates) | 所有实验研究 | 1–5 replicates per species |
-| 患者/个体 (Cohort) | 临床/群体研究 | 500 patients, 1200 healthy controls |
-| 实验技术 (Technology) | 所有组学研究 | Hi-C, RNA-seq, ATAC-seq, WGS |
-| 测序平台 (Platform) | 测序类研究 | Illumina HiSeq X Ten |
-| 测序量 (Sequencing depth) | 测序类研究 | ~230M contacts per library |
-| 分辨率 (Resolution) | 组学数据分析 | 20 kb, single-cell |
-| 参考基因组 (Reference) | 基因组学研究 | GRCh38, GRCm38 等 |
-| 时间点 (Timepoints) | 纵向/发育研究 | E8.5, E10.5, E14.5, P0, Adult |
-| 处理条件 (Treatment) | 干预/药物研究 | Control vs. Drug (10 μM, 48h) |
-
-如论文涉及多物种/多样本,优先提取为一张汇总表。
-
-#### 多物种研究的进化关系要求
-
-当论文涉及 **≥3 个物种的跨物种比较** 时,Study Design 中必须包含:
-
-1. **简易系统发育树(cladogram)**:用 CSS 组件展示物种间拓扑关系(不需要标注分化时间)
-2. **类群分组着色**:用颜色区分主要分类群,如哺乳类/鸟类/鱼类、或脊椎/无脊椎
-3. **外群标识**:明确标出外群物种
-
-组件实现见 [poster-components.md → Cladogram](references/poster-components.md)。
-
-不涉及跨物种比较的论文(如单物种研究、临床队列研究)不需要 cladogram。
-
-## 海报布局规则
-
-### 三列 Grid 布局原则
-
-海报采用 48in 宽、3 列 grid。各区域固定分配:
-
-```
-         Col 1                Col 2                    Col 3
-Header   ──────────────────── 全宽 ─────────────────────
-Row 1    Background           Study Design (跨 2–3 列)
-Row 2    Methods              Result 1                 Result 2
-Row 3    Conclusions          Result 3                 Result 4
-Row 4                         Result 5                 Result 6
-Footer   ──────────────────── 全宽 ─────────────────────
-```
-
-**第 1 行 = 概览行**:Background(Col 1)和 Study Design(Col 2–3)并排,让读者一眼获得研究背景与实验设计全貌。Study Design 跨 2 列以容纳表格和 cladogram。
-
-**第 1 列 Row 2 = Methods**:紧接 Background 下方,使用**分阶段流程图(Pipeline)**替代文字。分 3 个视觉阶段:Stage 1(实验,深色渐变)→ Stage 2(数据处理,浅灰 + tool-tag 标签)→ Stage 3(多维分析,白底蓝边分组框 + 2×N 分析卡片网格)。每步必须标注所使用的**软件工具名称**(如 HiC-Pro、Juicer、cooltools、FitHiC 等),便于读者复现。详见 [poster-components.md → 分阶段流程图](references/poster-components.md)。
-
-**第 1 列 Row 3 = Conclusions**:紧接 Methods 下方,深色渐变背景 + 编号列表,作为第 1 列的视觉终点。
-
-**第 2–3 列 = Result 区域**:从 Row 2 开始,严格按 **从左到右、从上到下** 排列。Result 数量不同时调整行数:
-- 2 个 Result → 1 行 × 2 列
-- 3–4 个 → 2 行 × 2 列(奇数时最后一行只占 1 格)
-- 5–6 个 → 3 行 × 2 列
-- ≥7 个 → 考虑合并相近的 Result
-
-### 视觉风格
-
-- 现代交互风
-- 每个 Result 使用**独立 accent 色**作为顶部边框,通过颜色区分不同发现
-- Result 卡片带**编号圆标**(绝对定位),引导阅读顺序
-- 关键 Figure **默认展开**(`<details open>`),次要 Figure 折叠
-- Conclusions 位于 Col 1 底部,使用**深色渐变背景 + 编号列表**,作为第 1 列视觉终点
-- Footer 包含:数据可用性、致谢/资助、通讯作者联系方式
-
-## 两格式内容映射
-
-同一内容在不同格式中的呈现方式:
-
-| 内容 | poster.html | presentation.pptx |
-|------|-------------|--------------------|
-| 标题/作者/单位 | Header 区域 | Title slide |
-| Background | Row 1 Col 1,含 finding-card 高亮研究空白 | 1–2 张幻灯片 |
-| 项目设计 | Row 1 Col 2–3,Stat box + 表格(多物种时含 cladogram) | 1 张表格幻灯片 |
-| Methods | Row 2 Col 1,分阶段流程图(每步标注软件工具名) | 1–2 张幻灯片 |
-| 每个 Result | 编号圆标 + Finding card + **1 张原图**(折叠/展开);1 原图 = 1 卡片 | 每 panel 子图 1 页;1 子图 = 1 页 PPT |
-| Conclusions | Row 3 Col 1,深色渐变背景,编号列表 | Summary slide |
-| Figure 图片 | **原图** `figures/fig{N}.png`,折叠 + Lightbox | **panel 图** `figures/panels/`,逐张插入 |
-| Footer | 数据可用性 / 致谢 / 联系方式 | 末页幻灯片 |
-
-## 双语要求
-
-两种格式均需支持中英文:
-
-- **poster.html**:`data-lang="en"` / `data-lang="zh"` 标记文本,右上角语言切换按钮,默认英文。
-- **presentation.pptx**:在 speaker notes 中放中文翻译,或按需生成两套 slide(先英文再中文)。
-
-## 依赖 skill
-
-- **图片提取**:`genek-extract-figures` → 原图到 `figures/`
-- **Panel 拆分**:`genek-split-figures` → 子图到 `figures/panels/`
-- **PPT 生成**:`pptx` skill(pptxgenjs)→ 生成 .pptx
-
-## 组件与参考
-
-- 海报布局与交互组件 → [references/poster-components.md](references/poster-components.md)
-- PPT 调用手册(参数、重试、问题排查)→ [references/pptx-playbook.md](references/pptx-playbook.md)
-- 统一 QA 门禁清单 → [references/qa-checklists.md](references/qa-checklists.md)
-
-## QA 门禁(交付前必须通过)
-
-满足以下全部条件才可交付:
-
-1) 资产完整性
-- `figures/fig{N}.png` 连续且可读
-- `figures/panels/*.png` 存在且非空
-- 不存在临时/验证残留文件(如 `*_verify.png`)
-
-2) 内容完整性
-- `poster.html` 含 Background / Study Design / Methods / Results / Conclusions / Footer
-- `presentation.pptx` 含 Title / Background / Design / Methods / Result / Conclusion
-- 每个 Result 页至少包含:标题、图、详细解读(建议 4-5 条)
-
-3) 一致性校验
-- 海报 `Result` 卡片与 PPT `Result` 页语义对齐
-- PPT Result 页数 = panel 图数量
-- 编号顺序一致,不跳号
-- 每页可追溯到 poster 对应 Result(标题或备注中标记来源)
-
-4) 版式质量底线
-- 无明显文本溢出/重叠
-- 无占位符残留(如 lorem/xxxx/template text)
-- 无空白结果页、无破图
-
-5) 交付清单
-- 必交付:`poster.html` + `presentation.pptx`
-- macOS 必交付:`poster.html` + `presentation.pptx` + `presentation_keynote_compatible.pptx`
-
-## Li2022 文档级回归模板(示例)
-
-用于验证规范可执行,不要求改动任何其他 skill。
-
-### 输入
-
-- `papers/Li2022/paper.pdf`
-- `papers/Li2022/figures/fig1.png` ... `fig6.png`
-- `papers/Li2022/figures/panels/*.png`(若缺失,先完成 panel 拆分)
-
-### 预期输出
-
-- `papers/Li2022/poster.html`
-- `papers/Li2022/presentation.pptx`
-
-### 抽样验收(最小)
-
-- 随机检查 3 张 Result 幻灯片:
-  - 图像来源是否与 panel 文件一致
-  - 标题与要点是否对应同一发现
-  - 是否存在截断/重叠/空白
-- 若任一项失败,判定回归未通过,需回到契约或 QA Gate 处理

+ 0 - 776
genek-paper-2-all/references/poster-components.md

@@ -1,776 +0,0 @@
-# HTML 海报可复用组件库
-
-## CSS 变量(配色方案)
-
-基础色板,根据论文或机构风格调整:
-
-```css
-:root {
-  --primary: #1B3A4B;
-  --secondary: #065A82;
-  --accent: #00A7E1;
-  --warm: #E8927C;
-  --gold: #D4A574;
-  --bg-light: #F4F7F9;
-  --bg-cream: #FAFBFC;
-  --text-dark: #1A1A2E;
-  --text-muted: #5A6B7D;
-}
-```
-
-### Result 独立 accent 色
-
-每个 Result 使用不同的 accent 色作为顶部边框和编号圆标背景,帮助读者区分不同发现。按论文主题选色,例如:
-
-```css
-:root {
-  --r1-color: #1B3A4B;
-  --r2-color: #065A82;
-  --r3-color: #2E8B57;
-  --r4-color: #00A7E1;
-  --r5-color: #D4A574;
-  --r6-color: #E8927C;
-}
-.result-1 { border-top-color: var(--r1-color); }
-.result-2 { border-top-color: var(--r2-color); }
-/* ... */
-```
-
----
-
-## 三列 Grid 布局
-
-```css
-.poster { width: 48in; background: var(--bg-cream); }
-
-.content {
-  display: grid;
-  grid-template-columns: 1fr 1fr 1fr;
-  gap: 0.3in;
-  padding: 0.45in 0.55in;
-}
-```
-
-### 标准布局(6 个 Result 示例)
-
-第 1 列 = 叙事列,第 2–3 列 = Result + Conclusions。
-
-```css
-.background    { grid-column: 1; grid-row: 1; }
-.study-design  { grid-column: 1; grid-row: 2; }
-.methods       { grid-column: 1; grid-row: 3; }
-
-.result-1      { grid-column: 2; grid-row: 1; }
-.result-2      { grid-column: 3; grid-row: 1; }
-.result-3      { grid-column: 2; grid-row: 2; }
-.result-4      { grid-column: 3; grid-row: 2; }
-.result-5      { grid-column: 2; grid-row: 3; }
-.result-6      { grid-column: 3; grid-row: 3; }
-
-.conclusions   { grid-column: 2 / 4; grid-row: 4; }
-```
-
-Result 数量不同时调整行数,保持从左到右、从上到下排列:
-
-```css
-/* 4 个 Result */
-.result-1 { grid-column: 2; grid-row: 1; }
-.result-2 { grid-column: 3; grid-row: 1; }
-.result-3 { grid-column: 2; grid-row: 2; }
-.result-4 { grid-column: 3; grid-row: 2; }
-.conclusions { grid-column: 2 / 4; grid-row: 3; }
-
-/* 3 个 Result(最后行只占 1 格) */
-.result-1 { grid-column: 2; grid-row: 1; }
-.result-2 { grid-column: 3; grid-row: 1; }
-.result-3 { grid-column: 2; grid-row: 2; }
-.conclusions { grid-column: 2 / 4; grid-row: 3; }
-```
-
----
-
-## Section 基础样式
-
-```css
-.section {
-  background: white;
-  border-radius: 0.08in;
-  padding: 0.3in;
-  position: relative;
-  box-shadow: 0 2px 10px rgba(0,0,0,0.04);
-  border: 1px solid rgba(0,0,0,0.05);
-  border-top: 4px solid var(--accent);
-}
-.section-title {
-  font-family: 'Playfair Display', serif;
-  font-size: 0.28in; font-weight: 700;
-  color: var(--primary);
-  margin-bottom: 0.18in; padding-bottom: 0.08in;
-  border-bottom: 3px solid var(--accent);
-  display: inline-block;
-}
-.section p, .section li {
-  font-size: 0.17in; line-height: 1.6; color: var(--text-dark);
-}
-```
-
----
-
-## Result 编号圆标
-
-每个 Result section 带有绝对定位的编号圆标,引导阅读顺序:
-
-```css
-.result-number {
-  position: absolute;
-  top: -0.18in; left: 0.2in;
-  width: 0.4in; height: 0.4in;
-  border-radius: 50%;
-  display: flex; align-items: center; justify-content: center;
-  font-family: 'Playfair Display', serif;
-  font-size: 0.22in; font-weight: 900;
-  color: white;
-  box-shadow: 0 2px 8px rgba(0,0,0,0.15);
-  z-index: 2;
-}
-```
-
-HTML:
-
-```html
-<div class="section result-1" style="border-top-color: var(--r1-color)">
-  <div class="result-number" style="background: var(--r1-color)">1</div>
-  <h2 class="section-title">Result 标题</h2>
-  ...
-</div>
-```
-
----
-
-## Conclusions 深色样式
-
-Conclusions 跨第 2–3 列,使用深色渐变背景作为视觉终点:
-
-```css
-.conclusions {
-  grid-column: 2 / 4;
-  background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
-  color: white;
-  border-top: none;
-}
-.conclusions .section-title {
-  color: white;
-  border-bottom-color: var(--gold);
-}
-
-.concl-item {
-  display: flex; align-items: flex-start;
-  gap: 0.12in; margin-bottom: 0.12in;
-  padding: 0.1in;
-  background: rgba(255,255,255,0.06);
-  border-radius: 0.05in;
-  border-left: 3px solid var(--gold);
-}
-.concl-num {
-  font-family: 'Playfair Display', serif;
-  font-size: 0.28in; font-weight: 900;
-  color: var(--accent); flex-shrink: 0;
-  width: 0.35in; text-align: center;
-}
-.concl-text {
-  font-size: 0.16in; line-height: 1.55;
-  color: rgba(255,255,255,0.92);
-}
-```
-
-HTML:
-
-```html
-<div class="section conclusions">
-  <h2 class="section-title">Conclusions</h2>
-  <div class="concl-item">
-    <div class="concl-num">1</div>
-    <div class="concl-text">结论内容...</div>
-  </div>
-  <div class="concl-item">
-    <div class="concl-num">2</div>
-    <div class="concl-text">结论内容...</div>
-  </div>
-</div>
-```
-
----
-
-## Stat Box
-
-用于 Study Design 区域展示关键数字:
-
-```css
-.stat-row { display: flex; gap: 0.15in; flex-wrap: wrap; }
-.stat-box {
-  flex: 1; min-width: 1in;
-  background: var(--bg-light); border-radius: 0.06in;
-  padding: 0.14in; text-align: center;
-  border-left: 3px solid var(--accent);
-}
-.stat-box .number {
-  font-family: 'Playfair Display', serif;
-  font-size: 0.34in; font-weight: 900;
-  color: var(--secondary); display: block;
-}
-.stat-box .label {
-  font-size: 0.12in; color: var(--text-muted);
-  text-transform: uppercase; letter-spacing: 1px;
-}
-```
-
----
-
-## Finding Card
-
-```css
-.finding-card {
-  background: var(--bg-light); border-radius: 0.06in;
-  padding: 0.15in; margin: 0.1in 0;
-  border-left: 4px solid var(--accent);
-}
-.finding-card.important {
-  border-left-color: var(--warm);
-  background: #FFF8F5;
-}
-```
-
----
-
-## Cladogram(多物种系统发育树)
-
-仅用于涉及 ≥3 物种跨物种比较的论文。纯 CSS 实现,展示拓扑关系和类群分组,不标注分化时间。
-
-```css
-.cladogram {
-  padding: 0.15in;
-  background: var(--bg-light);
-  border-radius: 0.06in;
-  margin: 0.1in 0;
-  font-size: 0.12in;
-}
-.clade-group {
-  border-left: 2px solid var(--secondary);
-  margin-left: 0.15in;
-  padding-left: 0.15in;
-  padding-top: 0.04in;
-  padding-bottom: 0.04in;
-}
-.clade-label {
-  font-weight: 700;
-  color: var(--secondary);
-  font-size: 0.13in;
-  margin-bottom: 0.04in;
-}
-.clade-species {
-  display: flex; flex-wrap: wrap; gap: 0.06in;
-  margin: 0.04in 0;
-}
-.species-tag {
-  display: inline-flex; align-items: center; gap: 0.04in;
-  background: white; border-radius: 0.03in;
-  padding: 0.03in 0.08in;
-  font-size: 0.11in; font-weight: 600;
-  border: 1px solid #D8DEE4;
-}
-.species-tag .sp-dot {
-  width: 0.08in; height: 0.08in;
-  border-radius: 50%;
-}
-.outgroup-tag {
-  background: #FFF8F0;
-  border-color: var(--warm);
-}
-```
-
-HTML 示例(12 物种比较基因组学):
-
-```html
-<div class="cladogram">
-  <!-- 外群 -->
-  <div style="margin-bottom:0.06in">
-    <span class="species-tag outgroup-tag">
-      <span class="sp-dot" style="background:var(--green-a)"></span> Zebrafish
-    </span>
-    <span style="font-size:0.1in; color:var(--text-muted); margin-left:0.06in">distant outgroup</span>
-  </div>
-  <div style="margin-bottom:0.08in">
-    <span class="species-tag outgroup-tag">
-      <span class="sp-dot" style="background:var(--warm)"></span> Chicken
-    </span>
-    <span style="font-size:0.1in; color:var(--text-muted); margin-left:0.06in">close outgroup</span>
-  </div>
-  <!-- 哺乳类 -->
-  <div class="clade-group">
-    <div class="clade-label">Mammals</div>
-    <div class="clade-group">
-      <div class="clade-label">Euarchontoglires</div>
-      <div class="clade-species">
-        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Human</span>
-        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Rhesus</span>
-        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Mouse</span>
-        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Rat</span>
-        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Rabbit</span>
-      </div>
-    </div>
-    <div class="clade-group">
-      <div class="clade-label">Laurasiatheria</div>
-      <div class="clade-species">
-        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Cow</span>
-        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Sheep</span>
-        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Pig</span>
-        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Cat</span>
-        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Dog</span>
-      </div>
-    </div>
-  </div>
-</div>
-```
-
-此组件的结构可适配各类物种分组:植物(单子叶/双子叶)、微生物(革兰氏阳性/阴性)等,只需调整 clade-label 和颜色。
-
----
-
-## 分阶段流程图(Pipeline)
-
-采用 3 阶段分层设计,避免反复的分支箭头。每个阶段有独立视觉风格:
-
-- **Stage 1(实验)**:深色渐变背景,用 `→` 串联实验步骤
-- **Stage 2(数据处理)**:浅灰背景,tool-tag 标签展示软件工具
-- **Stage 3(多维分析)**:白底蓝边分组框,内含 2×N 网格的分析卡片
-
-```
-┌─────────────────────────────┐
-│ Stage 1 — Experiment        │  ← 深色渐变 (stage-exp)
-│ 实验步骤 → 用箭头串联       │
-└──────────────┬──────────────┘
-               ▼
-┌─────────────────────────────┐
-│ Stage 2 — Data Processing   │  ← 浅灰背景 (stage-proc)
-│ 处理步骤 + tool-tag 标签     │
-└──────────────┬──────────────┘
-               ▼
-┌─ Stage 3 — Analysis ────────┐  ← 白底蓝边 (stage-analysis)
-│ ┌─────────┐ ┌─────────┐    │
-│ │ Card 1  │ │ Card 2  │    │  ← analysis-card 网格
-│ ├─────────┤ ├─────────┤    │     每张卡片不同色彩左边框
-│ │ Card 3  │ │ Card 4  │    │
-│ ├─────────┤ ├─────────┤    │
-│ │ Card 5  │ │ Card 6  │    │
-│ └─────────┘ └─────────┘    │
-└──────────────────────────────┘
-```
-
-### CSS
-
-```css
-.pipeline {
-  display: flex; flex-direction: column;
-  gap: 0; margin: 0.1in 0;
-}
-.pipeline-stage {
-  position: relative;
-  padding: 0.14in;
-  border-radius: 0.06in;
-  margin-bottom: 0;
-}
-.pipeline-stage.stage-exp {
-  background: linear-gradient(135deg, var(--secondary), var(--primary));
-  color: white;
-}
-.pipeline-stage.stage-proc {
-  background: var(--bg-light);
-  border: 1.5px solid #D0D7DE;
-}
-.pipeline-stage.stage-analysis {
-  background: white;
-  border: 2px solid var(--secondary);
-}
-.stage-label {
-  font-size: 0.1in; font-weight: 700;
-  text-transform: uppercase; letter-spacing: 1.5px;
-  margin-bottom: 0.08in; opacity: 0.7;
-}
-.stage-exp .stage-label { color: rgba(255,255,255,0.7); }
-.stage-proc .stage-label { color: var(--text-muted); }
-.stage-analysis .stage-label { color: var(--secondary); }
-.stage-title {
-  font-family: 'Playfair Display', serif;
-  font-size: 0.2in; font-weight: 700;
-  margin-bottom: 0.04in;
-}
-.stage-exp .stage-title { color: white; }
-.stage-proc .stage-title { color: var(--primary); }
-.stage-detail {
-  font-size: 0.12in; opacity: 0.8; line-height: 1.5;
-}
-.stage-exp .stage-detail { color: rgba(255,255,255,0.8); }
-.stage-proc .stage-detail { color: var(--text-muted); }
-.stage-tools {
-  display: inline-flex; flex-wrap: wrap; gap: 0.04in;
-  margin-top: 0.05in;
-}
-.tool-tag {
-  display: inline-block;
-  font-size: 0.1in; font-weight: 600;
-  padding: 0.02in 0.07in;
-  border-radius: 3px;
-  letter-spacing: 0.3px;
-}
-.stage-exp .tool-tag {
-  background: rgba(255,255,255,0.18); color: white;
-}
-.stage-proc .tool-tag {
-  background: white; color: var(--secondary);
-  border: 1px solid #D0D7DE;
-}
-
-/* 阶段间连接线 */
-.pipeline-connector {
-  display: flex; justify-content: center;
-  padding: 0.04in 0;
-}
-.pipeline-connector .conn-line {
-  width: 2px; height: 0.14in;
-  background: var(--secondary);
-  position: relative;
-}
-.pipeline-connector .conn-line::after {
-  content: ''; position: absolute;
-  bottom: -4px; left: -3.5px;
-  border-left: 4.5px solid transparent;
-  border-right: 4.5px solid transparent;
-  border-top: 5px solid var(--secondary);
-}
-
-/* 分析卡片网格 */
-.analysis-grid {
-  display: grid;
-  grid-template-columns: 1fr 1fr;
-  gap: 0.08in;
-}
-.analysis-card {
-  background: var(--bg-light);
-  border-radius: 0.05in;
-  padding: 0.1in;
-  border-left: 3px solid var(--accent);
-}
-.analysis-card .ac-name {
-  font-size: 0.13in; font-weight: 700;
-  color: var(--primary); margin-bottom: 0.03in;
-}
-.analysis-card .ac-tools {
-  font-size: 0.1in; color: var(--text-muted);
-  line-height: 1.4;
-}
-```
-
-### HTML 示例
-
-```html
-<div class="pipeline">
-  <!-- Stage 1: Experiment -->
-  <div class="pipeline-stage stage-exp">
-    <div class="stage-label">Stage 1 — Experiment</div>
-    <div class="stage-title">Dilution Hi-C + RNA-seq</div>
-    <div class="stage-detail">Formaldehyde crosslinking &#x2192; HindIII digestion &#x2192; Biotin ligation &#x2192; Sequencing</div>
-  </div>
-
-  <div class="pipeline-connector"><div class="conn-line"></div></div>
-
-  <!-- Stage 2: Data Processing -->
-  <div class="pipeline-stage stage-proc">
-    <div class="stage-label">Stage 2 — Data Processing</div>
-    <div class="stage-title">Mapping &#x2192; Filtering &#x2192; Normalization</div>
-    <div class="stage-tools">
-      <span class="tool-tag">Bowtie2</span>
-      <span class="tool-tag">Hiclib</span>
-      <span class="tool-tag">ICE</span>
-    </div>
-  </div>
-
-  <div class="pipeline-connector"><div class="conn-line"></div></div>
-
-  <!-- Stage 3: Multi-dimensional Analysis -->
-  <div class="pipeline-stage stage-analysis">
-    <div class="stage-label">Stage 3 — Multi-dimensional Analysis</div>
-    <div class="analysis-grid">
-      <div class="analysis-card">
-        <div class="ac-name">A/B Compartments</div>
-        <div class="ac-tools">PCA, AB index, Phylo-HMGP</div>
-      </div>
-      <div class="analysis-card">
-        <div class="ac-name">TAD Calling</div>
-        <div class="ac-tools">DomainCaller (DI + HMM)</div>
-      </div>
-      <!-- 按需添加更多 analysis-card -->
-    </div>
-  </div>
-</div>
-```
-
-分析卡片数量按论文实际分析维度调整(常见 4–6 张),每张卡片可通过 `border-left-color` 赋予独立色彩以区分不同分析类型。
-
----
-
-## 折叠图表
-
-海报使用 **原图**(`figures/fig{N}.png`)。关键 Figure 用 `<details open>` 默认展开,次要 Figure 折叠。
-
-```css
-details.fig-collapse {
-  margin-top: 0.12in;
-  border: 1px solid #D8DEE4;
-  border-radius: 0.06in;
-  overflow: hidden;
-}
-details.fig-collapse summary {
-  background: var(--bg-light);
-  padding: 0.1in 0.14in;
-  font-weight: 700; font-size: 0.14in;
-  color: var(--secondary);
-  cursor: pointer;
-  display: flex; align-items: center; gap: 0.08in;
-  list-style: none;
-}
-details.fig-collapse summary::-webkit-details-marker { display: none; }
-details.fig-collapse summary::before {
-  content: '\25B8'; font-size: 0.16in;
-  color: var(--accent);
-  transition: transform 0.2s;
-  display: inline-block;
-}
-details.fig-collapse[open] summary::before {
-  transform: rotate(90deg);
-}
-
-.fig-image-container {
-  text-align: center; margin: 0.08in 0;
-  border: 1px solid #E0E4E8; border-radius: 0.04in;
-  overflow: hidden;
-}
-.fig-image-container img {
-  max-width: 100%; height: auto;
-  display: block; margin: 0 auto;
-  cursor: zoom-in;
-  transition: opacity 0.2s;
-}
-.fig-image-container img:hover { opacity: 0.85; }
-.fig-caption {
-  font-size: 0.12in; color: var(--text-muted);
-  padding: 0.06in; background: var(--bg-light);
-  text-align: left; line-height: 1.5;
-}
-```
-
-```html
-<!-- 关键 Figure:默认展开 -->
-<details class="fig-collapse" open>
-  <summary>Figure 1 &#x2014; 标题</summary>
-  <div class="fig-content">
-    <div class="fig-image-container">
-      <img src="figures/fig1.png" alt="Figure 1">
-      <div class="fig-caption">图注</div>
-    </div>
-  </div>
-</details>
-
-<!-- 次要 Figure:折叠 -->
-<details class="fig-collapse">
-  <summary>Figure 2 &#x2014; 标题</summary>
-  ...
-</details>
-```
-
----
-
-## Lightbox 放大查看
-
-```html
-<div class="lightbox-overlay" id="lightbox">
-  <img id="lightbox-img" src="" alt="">
-</div>
-```
-
-```css
-.lightbox-overlay {
-  display: none; position: fixed;
-  top: 0; left: 0; width: 100%; height: 100%;
-  background: rgba(0,0,0,0.88);
-  z-index: 9999;
-  justify-content: center; align-items: center;
-  cursor: zoom-out;
-}
-.lightbox-overlay.active { display: flex; }
-.lightbox-overlay img {
-  max-width: 92%; max-height: 92%;
-  object-fit: contain; border-radius: 4px;
-  box-shadow: 0 8px 40px rgba(0,0,0,0.5);
-}
-```
-
-```javascript
-(function(){
-  var overlay = document.getElementById('lightbox');
-  var lbImg = document.getElementById('lightbox-img');
-  document.querySelectorAll('.fig-image-container img').forEach(function(img){
-    img.addEventListener('click', function(){
-      lbImg.src = this.src;
-      lbImg.alt = this.alt;
-      overlay.classList.add('active');
-    });
-  });
-  overlay.addEventListener('click', function(){ overlay.classList.remove('active'); });
-  document.addEventListener('keydown', function(e){
-    if(e.key === 'Escape') overlay.classList.remove('active');
-  });
-})();
-```
-
----
-
-## Footer
-
-```css
-.footer {
-  background: var(--primary);
-  padding: 0.25in 0.55in;
-  display: grid;
-  grid-template-columns: 1.5fr 1fr 1fr;
-  gap: 0.4in;
-  color: rgba(255,255,255,0.8);
-  font-size: 0.13in;
-  line-height: 1.6;
-}
-.footer strong {
-  color: var(--gold);
-  font-size: 0.14in;
-  letter-spacing: 1px;
-  text-transform: uppercase;
-}
-.footer a { color: var(--accent); text-decoration: none; }
-```
-
-```html
-<div class="footer">
-  <div>
-    <strong data-lang="en">Acknowledgments</strong>
-    <p data-lang="en">资助信息...</p>
-  </div>
-  <div>
-    <strong data-lang="en">Data Availability</strong>
-    <p data-lang="en">数据/代码链接...</p>
-  </div>
-  <div>
-    <strong data-lang="en">Contact</strong>
-    <p data-lang="en">通讯作者 email...</p>
-  </div>
-</div>
-```
-
----
-
-## 中英文双语切换
-
-### 按钮样式
-
-```css
-.lang-switch {
-  position: fixed;
-  top: 0.2in; right: 0.3in;
-  z-index: 100;
-  display: flex; gap: 0;
-  background: rgba(255,255,255,0.97);
-  border-radius: 6px;
-  box-shadow: 0 2px 16px rgba(0,0,0,0.18);
-  overflow: hidden;
-  border: 1px solid #D0D7DE;
-}
-.lang-btn {
-  border: none; background: transparent;
-  padding: 8px 18px;
-  font-size: 15px; font-weight: 700;
-  color: var(--text-muted);
-  cursor: pointer;
-  transition: all 0.2s;
-}
-.lang-btn:hover { color: var(--secondary); background: var(--bg-light); }
-.lang-btn.active {
-  background: var(--secondary);
-  color: white;
-}
-```
-
-### HTML 标记
-
-```html
-<div class="lang-switch">
-  <button class="lang-btn active" data-target="en">EN</button>
-  <button class="lang-btn" data-target="zh">中文</button>
-</div>
-
-<!-- 需要翻译的元素加 data-lang -->
-<h2 data-lang="en">Introduction</h2>
-<h2 data-lang="zh">研究背景</h2>
-```
-
-无需双语标记的元素:数字/统计值、图片、DOI、作者姓名。
-
-### JS 切换逻辑
-
-```javascript
-(function(){
-  var btns = document.querySelectorAll('.lang-btn');
-  btns.forEach(function(btn){
-    btn.addEventListener('click', function(){
-      var lang = this.dataset.target;
-      document.querySelectorAll('[data-lang]').forEach(function(el){
-        el.style.display = el.dataset.lang === lang ? '' : 'none';
-      });
-      btns.forEach(function(b){ b.classList.remove('active'); });
-      this.classList.add('active');
-    });
-  });
-  document.querySelectorAll('[data-lang="zh"]').forEach(function(el){
-    el.style.display = 'none';
-  });
-})();
-```
-
----
-
-## 打印与预览
-
-```css
-@media print {
-  body { background: white; padding: 0; }
-  .poster { box-shadow: none; }
-  details.fig-collapse[open] { break-inside: avoid; }
-  .lang-switch { display: none; }
-  -webkit-print-color-adjust: exact;
-  print-color-adjust: exact;
-}
-```
-
-```bash
-python3 -m http.server 8765
-# 访问 http://localhost:8765/papers/{Author}{Year}/poster.html
-```
-
----
-
-## 特殊字符速查
-
-| 字符 | HTML 实体 | CSS content | 用途 |
-|------|----------|-------------|------|
-| ▸ | `&#x25B8;` | `\25B8` | 折叠箭头 |
-| → | `&#x2192;` | `\2192` | 右箭头 |
-| — | `&#x2014;` | `\2014` | 破折号 |
-| × | `&times;` | - | 乘号 |
-| ≥ | `&ge;` | - | 大于等于 |
-| ≤ | `&le;` | - | 小于等于 |

+ 0 - 100
genek-paper-2-all/references/pptx-playbook.md

@@ -1,100 +0,0 @@
-# PPTX 生成操作手册(Paper2All)
-
-本手册用于 `genek-paper-2-all` 调用 `pptx` skill 时的最小执行标准。  
-注意:本手册只定义论文场景规则,不覆盖 `pptx` skill 的通用排版细节。
-
-## 1. 参数约定
-
-建议统一使用以下参数:
-
-| 参数 | 必填 | 默认值 | 说明 |
-|------|------|--------|------|
-| `AUTHOR_YEAR` | 是 | - | 例如 `Li2022` |
-| `LANG_MODE` | 否 | `en_notes_zh` | `en_notes_zh` 或 `dual_slides` |
-| `THEME` | 否 | `scientific_clean` | 与论文主题一致的配色 |
-| `PANEL_SORT` | 否 | `fig_then_group` | `figN` 升序,再 `GROUP` 升序 |
-| `NOTES_MODE` | 否 | `required_zh` | `required_zh` / `optional_zh` |
-
-## 2. 生成前检查(Preflight)
-
-必须全部通过再进入 PPT 生成:
-
-1. 目录存在:`papers/{AUTHOR_YEAR}/`
-2. panel 目录存在:`papers/{AUTHOR_YEAR}/figures/panels/`
-3. panel 命名合法:`fig{N}_{GROUP}.png`
-4. 结构化内容齐全:`title/authors/background/study_design/methods/results/conclusions`
-5. `results` 至少 1 条,且每条有 `headline` 和 `key_points`
-
-## 3. 生成规则(最小)
-
-固定页序建议:
-
-1. Title
-2. Background
-3. Study Design
-4. Methods
-5. Result slides(每张 panel 一页)
-6. Conclusion
-7. End / Acknowledgment
-
-Result 页要求:
-
-- 每页绑定唯一 panel 文件
-- 页标题必须可追溯:`Result {k}` + `Figure {N}/Panel {GROUP}`
-- 每页 2-3 条要点(避免整段长文本)
-
-## 4. 失败重试策略
-
-### A. panel 缺失或不合法
-
-- 行为:立即停止(fail-fast)
-- 处理:回到 panel 拆分流程,修复后重试
-
-### B. 页数与 panel 数不一致
-
-- 行为:判定失败,不交付
-- 处理:检查排序和过滤逻辑,确保 1:1 映射
-
-### C. 中文 notes 缺失(默认模式)
-
-- 行为:判定失败
-- 处理:补齐对应页 notes 后重试导出
-
-## 5. 常见问题速查
-
-| 问题 | 根因 | 修复动作 |
-|------|------|----------|
-| panel 顺序错乱 | 文件排序规则未统一 | 强制 `fig_then_group` 排序 |
-| 图片拉伸 | 未保持纵横比 | 统一等比缩放,保留白边 |
-| 文本溢出 | 单页信息过多 | 压缩要点到 2-3 条,长句拆分 |
-| notes 缺中文 | 仅填英文正文 | 增加中文 notes 校验步骤 |
-| 空白结果页 | panel 路径引用失败 | 检查路径和文件存在性 |
-
-## 6. 最小调用示例(伪流程)
-
-1) 从 `papers/{AUTHOR_YEAR}/figures/panels/` 收集并排序 panel 列表  
-2) 组装幻灯片数据:`meta + sections + result_panels`  
-3) 调用 `pptx` skill 生成 `presentation.pptx`  
-4) 执行 QA:页数、映射、可读性、notes 完整性  
-5) 通过后与 `poster.html` 一并交付
-
-## 7. macOS 兼容导出(默认)
-
-当运行环境为 macOS 时,默认执行兼容导出,减少 Keynote 打开失败风险。
-
-### 标准流程
-
-1. 先生成标准文件:`presentation.pptx`  
-2. 使用 LibreOffice/soffice 进行兼容中转,输出:`presentation_keynote_compatible.pptx`  
-3. 若仍不兼容,再导出:`presentation_keynote_compatible.ppt`
-
-### 建议命令(示例)
-
-```bash
-soffice --headless --convert-to ppt --outdir "papers/${AUTHOR_YEAR}" "papers/${AUTHOR_YEAR}/presentation.pptx"
-soffice --headless --convert-to pptx --outdir "papers/${AUTHOR_YEAR}" "papers/${AUTHOR_YEAR}/presentation_keynote_compatible.ppt"
-```
-
-说明:
-- 兼容中转后务必保留原始 `presentation.pptx`,避免信息丢失
-- 交付时优先提供 `presentation_keynote_compatible.pptx`

+ 0 - 57
genek-paper-2-all/references/qa-checklists.md

@@ -1,57 +0,0 @@
-# Paper2All QA 门禁清单
-
-交付前,按以下清单逐项核对。任一硬门禁失败即不允许交付。
-
-## A. 资产门禁(Hard Gate)
-
-- [ ] `paper.pdf` 存在于 `papers/{AuthorYear}/`
-- [ ] `figures/fig{N}.png` 连续、无缺号、可打开
-- [ ] `figures/panels/*.png` 存在且文件非空
-- [ ] 无临时残留:`tmp-*`、`page-*`、`*_verify.png`
-
-## B. 内容门禁(Hard Gate)
-
-- [ ] `poster.html` 包含:Background / Study Design / Methods / Results / Conclusions / Footer
-- [ ] `presentation.pptx` 包含:Title / Background / Study Design / Methods / Result / Conclusion
-- [ ] 每个 Result 幻灯片包含:标题 + 图 + 2-3 条要点
-- [ ] 无占位文本(例如 lorem、xxxx、template)
-
-## C. 一致性门禁(Hard Gate)
-
-- [ ] PPT Result 页数 = panel 文件数
-- [ ] Result 页编号连续且与 panel 顺序一致
-- [ ] 海报与 PPT 的 Result 语义一致(同编号表达同发现)
-- [ ] Figure/Panel 溯源信息可追踪(至少在标题或备注中体现)
-
-## D. 双语门禁(Conditional Gate)
-
-默认模式 `en_notes_zh`:
-- [ ] 所有页面英文正文可读
-- [ ] 所有页面中文 notes 非空
-
-双套模式 `dual_slides`:
-- [ ] EN 套与 ZH 套页数一致
-- [ ] 同页内容语义一致,无遗漏
-
-## E. 视觉门禁(Soft Gate,建议全通过)
-
-- [ ] 无明显文字溢出/重叠
-- [ ] 图片未被拉伸变形
-- [ ] 字体大小在可读范围(正文建议 >= 14pt)
-- [ ] 关键信息未被页脚或图形遮挡
-
-## F. 交付清单(Hard Gate)
-
-- [ ] `poster.html`
-- [ ] `presentation.pptx`
-- [ ] macOS 环境下额外交付 `presentation_keynote_compatible.pptx`
-
----
-
-## Li2022 抽样验收模板
-
-最小抽样策略:
-
-1. 随机抽查 3 页 Result 幻灯片  
-2. 每页检查 3 项:图像来源、要点对应性、版式可读性  
-3. 任意一页任一项失败,判定整体验收未通过

+ 0 - 337
genek-paper-2-all/references/slides-components.md

@@ -1,337 +0,0 @@
-# 网页版 PPT 可复用组件库
-
-与海报、PPTX 共用同一份内容和 **拆分后的 panel 图**(`figures/panels/`)。图片路径相对 `slides.html` 所在目录(即论文子目录)。
-
----
-
-## 整体结构
-
-每页一个 `<section class="slide">`,全屏一页(100vw × 100vh),左右键翻页。
-
-```html
-<div class="slides-root">
-  <div class="lang-switch">...</div>
-  <div class="slide-nav">
-    <button class="nav-btn prev" aria-label="上一页">&#x25C0;</button>
-    <span class="slide-counter"><span id="current">1</span> / <span id="total">N</span></span>
-    <button class="nav-btn next" aria-label="下一页">&#x25B6;</button>
-  </div>
-
-  <div class="slides-container">
-    <section class="slide" data-slide="1">...</section>
-    <section class="slide" data-slide="2">...</section>
-    ...
-  </div>
-
-  <div class="lightbox-overlay" id="lightbox">...</div>
-</div>
-```
-
-```css
-:root {
-  --primary: #1B3A4B;
-  --secondary: #065A82;
-  --accent: #00A7E1;
-  --bg-light: #F4F7F9;
-  --text-dark: #1A1A2E;
-  --text-muted: #5A6B7D;
-}
-
-.slides-root {
-  position: relative;
-  width: 100vw;
-  min-height: 100vh;
-  overflow: hidden;
-}
-
-.slide {
-  width: 100vw;
-  height: 100vh;
-  box-sizing: border-box;
-  padding: 1.5rem 2.5rem;
-  display: none;
-  flex-direction: column;
-  justify-content: center;
-}
-.slide.active {
-  display: flex;
-}
-```
-
----
-
-## 左右键盘翻页 + 页码
-
-```javascript
-(function(){
-  var slides = document.querySelectorAll('.slide');
-  var total = slides.length;
-  var current = 0;
-  var currentEl = document.getElementById('current');
-  var totalEl = document.getElementById('total');
-  if (totalEl) totalEl.textContent = total;
-
-  function show(i) {
-    i = Math.max(0, Math.min(i, total - 1));
-    current = i;
-    slides.forEach(function(s, j){ s.classList.toggle('active', j === i); });
-    if (currentEl) currentEl.textContent = i + 1;
-  }
-
-  document.addEventListener('keydown', function(e){
-    if (e.key === 'ArrowLeft') { show(current - 1); e.preventDefault(); }
-    if (e.key === 'ArrowRight') { show(current + 1); e.preventDefault(); }
-  });
-
-  document.querySelectorAll('.nav-btn.prev').forEach(function(btn){
-    btn.addEventListener('click', function(){ show(current - 1); });
-  });
-  document.querySelectorAll('.nav-btn.next').forEach(function(btn){
-    btn.addEventListener('click', function(){ show(current + 1); });
-  });
-
-  show(0);
-})();
-```
-
-```css
-.slide-nav {
-  position: fixed;
-  bottom: 1rem;
-  left: 50%;
-  transform: translateX(-50%);
-  z-index: 50;
-  display: flex;
-  align-items: center;
-  gap: 1rem;
-  background: rgba(255,255,255,0.95);
-  padding: 0.35rem 0.75rem;
-  border-radius: 0.25rem;
-  box-shadow: 0 2px 12px rgba(0,0,0,0.15);
-}
-.nav-btn {
-  border: none;
-  background: transparent;
-  font-size: 1.25rem;
-  cursor: pointer;
-  color: var(--secondary);
-}
-.nav-btn:hover { opacity: 0.8; }
-.slide-counter {
-  font-size: 0.9rem;
-  color: var(--text-muted);
-}
-```
-
----
-
-## 全屏(F 键)
-
-```javascript
-document.addEventListener('keydown', function(e){
-  if (e.key === 'f' || e.key === 'F') {
-    if (!document.fullscreenElement) {
-      document.documentElement.requestFullscreen().catch(function(){});
-    } else {
-      document.exitFullscreen();
-    }
-    e.preventDefault();
-  }
-});
-```
-
----
-
-## Panel 展示与 Lightbox
-
-每页内嵌 panel 图,不折叠;点击图片放大,与海报共用 Lightbox 逻辑。
-
-```html
-<div class="slide-fig">
-  <div class="fig-image-container">
-    <img src="figures/panels/fig1_A.png" alt="Figure 1A">
-  </div>
-  <div class="fig-caption" data-lang="en">Caption.</div>
-  <div class="fig-caption" data-lang="zh">图注。</div>
-</div>
-```
-
-```css
-.slide-fig {
-  text-align: center;
-  margin: 0.5rem 0;
-}
-.slide-fig .fig-image-container {
-  max-width: 85%;
-  margin: 0 auto;
-  border: 1px solid #E0E4E8;
-  border-radius: 0.25rem;
-  overflow: hidden;
-}
-.slide-fig .fig-image-container img {
-  width: 100%;
-  height: auto;
-  cursor: zoom-in;
-}
-.slide-fig .fig-caption {
-  font-size: 0.85rem;
-  color: var(--text-muted);
-  margin-top: 0.35rem;
-}
-```
-
-Lightbox 的 HTML/CSS/JS 与 [poster-components.md](poster-components.md) 中一致,选择器仍为 `.fig-image-container img`。
-
----
-
-## 双语切换
-
-与海报相同:`data-lang="en"` / `data-lang="zh"`,右上角 `.lang-switch`,默认英文。
-
-```css
-.lang-switch {
-  position: fixed;
-  top: 0.75rem;
-  right: 1rem;
-  z-index: 100;
-  display: flex;
-  gap: 2px;
-  background: rgba(255,255,255,0.95);
-  border-radius: 0.25rem;
-  box-shadow: 0 2px 12px rgba(0,0,0,0.15);
-  border: 1px solid #D8DEE4;
-}
-.lang-btn {
-  border: none;
-  background: transparent;
-  padding: 0.35rem 0.75rem;
-  font-size: 0.9rem;
-  font-weight: 700;
-  color: var(--text-muted);
-  cursor: pointer;
-}
-.lang-btn:hover { color: var(--secondary); }
-.lang-btn.active { background: var(--secondary); color: white; }
-```
-
-JS 切换逻辑与 poster-components 中相同(根据 `data-lang` 显示/隐藏)。
-
----
-
-## Slide 类型模板
-
-### Title slide
-
-```html
-<section class="slide slide-title" data-slide="1">
-  <h1 class="title" data-lang="en">Paper Title</h1>
-  <h1 class="title" data-lang="zh">论文标题</h1>
-  <p class="authors">Author A, Author B</p>
-  <p class="affiliation">Affiliation</p>
-</section>
-```
-
-```css
-.slide-title {
-  text-align: center;
-  justify-content: center;
-}
-.slide-title .title { font-size: 2rem; margin-bottom: 0.5rem; }
-.slide-title .authors { font-size: 1.1rem; color: var(--text-muted); }
-.slide-title .affiliation { font-size: 0.95rem; color: var(--text-muted); }
-```
-
-### Content slide(文字 + panel)
-
-```html
-<section class="slide" data-slide="2">
-  <h2 data-lang="en">Introduction</h2>
-  <h2 data-lang="zh">研究背景</h2>
-  <p data-lang="en">...</p>
-  <p data-lang="zh">...</p>
-  <div class="slide-fig">
-    <div class="fig-image-container">
-      <img src="figures/panels/fig1_A.png" alt="Figure 1A">
-    </div>
-    <div class="fig-caption" data-lang="en">Caption.</div>
-    <div class="fig-caption" data-lang="zh">图注。</div>
-  </div>
-</section>
-```
-
-### Figure slide(全幅 panel + 图注)
-
-```html
-<section class="slide slide-figure" data-slide="3">
-  <div class="slide-fig">
-    <div class="fig-image-container">
-      <img src="figures/panels/fig1_BC.png" alt="Figure 1B-C">
-    </div>
-    <div class="fig-caption" data-lang="en">Caption.</div>
-    <div class="fig-caption" data-lang="zh">图注。</div>
-  </div>
-</section>
-```
-
-```css
-.slide-figure .slide-fig { flex: 1; display: flex; flex-direction: column; justify-content: center; }
-.slide-figure .fig-image-container { max-width: 90%; }
-```
-
-### Summary slide(编号结论)
-
-```html
-<section class="slide slide-summary" data-slide="N">
-  <h2 data-lang="en">Conclusions</h2>
-  <h2 data-lang="zh">结论</h2>
-  <ol class="concl-list">
-    <li>
-      <span data-lang="en">First conclusion.</span>
-      <span data-lang="zh">结论一。</span>
-    </li>
-    <li>
-      <span data-lang="en">Second conclusion.</span>
-      <span data-lang="zh">结论二。</span>
-    </li>
-  </ol>
-</section>
-```
-
-```css
-.slide-summary .concl-list { font-size: 1.1rem; line-height: 1.6; }
-```
-
----
-
-## 打印
-
-每张 slide 一页,隐藏导航与语言切换。
-
-```css
-@media print {
-  .lang-switch,
-  .slide-nav {
-    display: none !important;
-  }
-  .slides-root { overflow: visible; }
-  .slide {
-    display: flex !important;
-    height: auto;
-    min-height: 100vh;
-    page-break-after: always;
-  }
-  .slide:last-child { page-break-after: auto; }
-}
-```
-
----
-
-## 预览
-
-在论文子目录下启动本地服务,例如:
-
-```bash
-cd papers/paper-short-name
-python3 -m http.server 8765
-# 打开 http://localhost:8765/slides.html
-```