Files
market/skills/guizang-ppt/references/swiss-layout-lock.md
Yige b15fce19bf feat: add guizang-ppt market skill (vendored from op7418, AGPL-3.0) (#20)
## 概述 / Summary

新增市场技能 **`guizang-ppt`**(归藏网页 PPT),vendored 自上游开源项目
[op7418/guizang-ppt-skill](https://github.com/op7418/guizang-ppt-skill)。

Add a new **market skill** `guizang-ppt` — generates single-file HTML
horizontal-swipe slide decks (web PPT) in two visual systems (editorial
"magazine × e-ink" / "Swiss International"). Vendored from the upstream
open-source project.

## 变更内容 / Changes

- `skills/guizang-ppt/`:SKILL.md(DesireCore frontmatter 覆盖层 +
上游正文)、`references/`(10)、`assets/`(2 模板 + motion.min.js + 9 张
webp)、`scripts/validate-swiss-deck.mjs`、`LICENSE`(AGPL-3.0)、`NOTICE.md`(署名与合规)
- `skills/guizang-ppt/_desirecore/`:DesireCore 维护态(不随上游覆盖)
- `frontmatter.yaml`:市场 frontmatter 覆盖层(i18n: zh-CN 源 + en-US 显示串,body
暂回退中文,留给 CI 翻译)
  - `upstream.json`:上游溯源(commit `014c572`、AGPL-3.0、作者 歸藏/op7418)
- `scripts/vendor/guizang-ppt.mjs`:可复用的 vendor 更新脚本(`--src <本地路径>` 或
`--ref <tag>`)
- `manifest.json`:`version` → `1.2.3`,`stats.totalSkills` → 25

## 定位 / Positioning

- **仅市场可选安装**:未加入 `builtin-skills.json`,不随客户端开机自动安装;用户在市场按需安装。
- 分类 `creative`;与已有 `pptx`(生成 .pptx 文件)区分:本技能生成 **HTML deck**。

## 许可与署名 / License & Attribution

上游为 **AGPL-3.0**。本技能保留原 `LICENSE` 与作者署名(`NOTICE.md` + `metadata.author`
+ `market.maintainer`),作为聚合内容分发。

## 校验 / Validation

- `python3 scripts/i18n/validate-i18n.py skills/guizang-ppt` → `OK: no
i18n issues found.`

## 手动更新流程 / Manual update

上游发版时:`node scripts/vendor/guizang-ppt.mjs --ref <tag>` → 核对 diff → 必要时
bump `_desirecore/frontmatter.yaml#version` 与 `manifest.json` → 提交。

---
🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-04 11:04:05 +08:00

5.9 KiB
Raw Blame History

Swiss Layout Lock

本文件是瑞士主题的硬约束。它的目的不是增加灵感,而是防止生成时“看起来像 Swiss,但已经脱离原始模板”。

Golden Source

原始参考文件:

/Users/guohao/Documents/op7418的仓库/项目/Thin-Harness-Fat-Skills/ppt/index.html

瑞士主题生成时,除用户明确要求实验版式外,只能从下面登记的 22 个版式中选择。新增首页/尾页可以使用 Skill 里的 IKB ASCII 版本,但正文页必须来自这 22 个版式。

生成前硬规则

  1. 每个正文页都必须先选一个登记版式,并在 <section> 上写 data-layout="Sxx"
  2. 不允许临时发明 P23/P24 这类未出现在原始 22P 的正文结构。需要图片时,优先使用 S22 Image Hero;多图时使用 S15/S16 的原始网格骨架做图片格改造,不要发明新的证据墙。唯一登记的交互扩展是 S08 + Swiss Map Component,详见 references/swiss-map-component.md
  3. 顶部中文标题默认左对齐并贴近左上内容轴。除原始 S03/S09/S10 这种 statement/split 版式外,不要把大标题放到页面水平中心。
  4. SVG 只能负责几何线条、圆、箭头、路径。不要在 SVG 里写可见文字;所有文字标签用 HTML 放在网格、卡片或 caption 里。
  5. 图片槽位和图片生成比例必须绑定。先确定版式和槽位,再生成图片。

登记版式

ID 原始页 名称 必须保留的骨架 图片规则
S01 01 Index Cover 三行 cover-row,左大编号,右大标题
S02 02 Vertical Timeline + KPI 顶部左对齐标题,中部 .timeline-v,底部 .kpi-row-4
S03 03 Split Statement .slide.split 双半屏,左巨字,右灰底解释
S04 04 Six Cells 顶部左对齐标题,下方 .sub-grid-3-2 六卡 可把卡片内部换成小图标,不放大图
S05 05 Three Layers 顶部左对齐标题,下方 .stack-row 三大块
S06 06 KPI Tower 左标题+右说明,下方不等高 KPI 塔
S07 07 Horizontal Bar 左对齐标题,横向条形图
S08 08 Duo Compare .duo-compare 两列 + 中线 无;地点/路线内容可使用 S08 + Swiss Map Component 替换右侧插槽
S09 09 Dot Matrix Statement 大号 statement + 点阵装饰
S10 10 Split Closing .slide.split 左巨字右列表
S11 11 Horizontal Timeline 原始 grid-template-columns:auto 1fr 头部 + .timeline-h
S12 12 Manifesto + Ink Banner 大字 statement + 底部通栏 ink 条
S13 13 Three Forces 左 ink hero 块 + 右 3 张卡
S14 14 Loop Form 左 4 步列表 + 右几何 loop SVG 禁止文字,标签改 HTML
S15 15 Matrix + Hero Stat 顶部左对齐标题,中段 6×2 矩阵,底部巨数 多图可改造矩阵格,同组统一 21:9
S16 16 Multi-card Brief 顶部左对齐标题,下方 3×2 微卡 多图可改造卡片内容,同组统一 21:9
S17 17 System Diagram 顶部左小标题+右段落,中部几何系统图,底部三列解释 SVG 禁止文字,标签改 HTML
S18 18 Why Now 三列递进 + 底部巨数
S19 19 Four Cards 顶部蓝线 + 四列均分
S20 20 Stacked KPI Ledger 纵向账单式巨数
S21 21 Tech Spec Sheet 大标题 + 三 KPI + 右下竖线矩阵
S22 22 Image Hero 顶部全宽图 + 左上白块标题 + 下方三列 KPI 主图按 21:9 生成,关键主体放中央安全区

登记扩展组件

S08 + Swiss Map Component

  • 使用场景:地理、历史、城市路线、门店/校区/事件点位、人物住所关系。
  • 版式身份:仍是 data-layout="S08",不是新正文页。
  • 页面结构:顶部左对齐标题 + 左侧关系/说明卡片 + 右侧 MapLibre 地图卡片。
  • 标记结构:点 + 连线 + HTML 卡片;SVG 只画 fallback 关系线,不写文字。
  • 交互控制:右上角必须有 + / - / DRAG;默认禁用滚轮缩放和拖动,避免触发 PPT 翻页。
  • 详细代码和数据契约见 references/swiss-map-component.md

图片槽位规则

S22 · Hero Strip

  • 生成比例: 21:9
  • 图片用途:实拍场景、产品场景、UI 情景图。
  • 生成提示词必须包含: 21:9 ultra-wide strip, subject centered in the safe middle area, no title, no footer, no page chrome, no logo, no border.
  • HTML 容器必须使用原始 S22 的顶部全宽图骨架;不要改成普通居中大图。
  • 照片用 object-fit:cover;object-position:center 35%。如果是人像/会议场景,不要用 top center
  • 信息图/UI 截图如果放 S22,必须重新生成接近 21:9,并用 object-fit:contain 或保证核心内容在中央 70% 安全区。

S15/S16 · Multi Image Grid

  • 生成比例:统一 21:9 或统一 16:10,不要混用。
  • 同一组图片必须同高、同宽、同一容器背景。
  • 图片格必须吸附原始卡片网格,不要让图片自己决定宽高。
  • 如果图片是按槽位重新生成的 s15-grid-21x9 / s16-brief-21x9,容器必须用 .frame-img.r-21x9 铺满槽位,不要再加 .fit-contain,也不要用固定 height:18vh 这类短槽把长图缩小。
  • .fit-contain 只用于必须保留原始比例的用户截图或文字密集图片;一旦决定重生成图片,就应该按槽位比例重生成并铺满。
  • 如果原始截图比例不可控,先按 references/screenshot-framing.md 做程序化比例适配;只有长截图、极窄截图或信息需要重构时,才用 GPT-M 2.0 重生成“截图再设计”。

禁止清单

  • 禁止 text-align:center 用在顶部中文大标题。
  • 禁止将顶部标题写进右侧 7.8fr 栏,造成视觉居中。
  • 禁止未登记正文页:例如临时 Swiss Image SplitEvidence Grid、三圆图自绘页。
  • 禁止图片容器灰底包白底信息图。
  • 禁止 SVG 中出现 <text> 作为可见标签。
  • 禁止图片默认 object-position:top center 用于照片。