{"id":"0693a7f3-f1cc-4a3d-9284-456e47ce06dc","entityType":"agent","slug":"clawhub-kaisersong-kai-slide-creator","name":"Slide Creator","canonicalUrl":"https://www.xpersona.co/agent/clawhub-kaisersong-kai-slide-creator","canonicalPath":"/agent/clawhub-kaisersong-kai-slide-creator","generatedAt":"2026-10-09T19:00:35.169Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T14:10:46.728Z","emptyReason":null},"description":"生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。 Skill: Slide Creator Owner: kaisersong Summary: 生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。 Tags: latest:2.27.0 Version history: v2.27.0 | 2026-05-17T10:06:32.131Z | user Add captured-run skill eval baselines, comparator tooling, preset release gate integration, and bilingual eval documentation. v2.24.3 | 2026-04-30T14:46:21.287Z | auto kai-slide-creator 2.24.3 - 新增支持 CLI/交互式链路下 eval 评测产出（deck 质量 JSON","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.5K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17e36cy6y9drqxrb49xdqh05d83hqde:kai-slide-creator","sourceUrl":"https://clawhub.ai/kaisersong/kai-slide-creator","homepage":"https://clawhub.ai/kaisersong/skills/kai-slide-creator","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/kaisersong/kai-slide-creator","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/kaisersong/skills/kai-slide-creator","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":54,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。 Skill: Slide Creator Owner: kaisersong Summary: 生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T14:10:46.728Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T14:10:46.728Z","emptyReason":null},"stars":null,"forks":null,"downloads":2510,"packageName":null,"latestVersion":"2.27.0","tractionLabel":"2.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T14:10:46.728Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T14:10:46.728Z","lastCrawledAt":"2026-10-09T14:10:46.728Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T14:10:46.728Z","lastVerifiedAt":null,"highlights":[{"version":"2.27.0","createdAt":"2026-05-17T10:06:32.131Z","changelog":"Add captured-run skill eval baselines, comparator tooling, preset release gate integration, and bilingual eval documentation.","fileCount":294,"zipByteSize":1141887},{"version":"2.24.3","createdAt":"2026-04-30T14:46:21.287Z","changelog":"kai-slide-creator 2.24.3 - 新增支持 CLI/交互式链路下 `eval` 评测产出（deck 质量 JSON），用户可通过 `--eval`/`--eval-out` 显式请求 - `--generate` 路由若显式要求 `eval`，会同步输出单 deck 评测 JSON，包括 style_score、quality gates、hard failures 与关键 diagnostics - 文档 (`SKILL.md`、README) 补充评测产物说明和生成链路 - 新增 2 个中文风格 demo 示例文件 - 其它小幅修正与增强","fileCount":227,"zipByteSize":1040441},{"version":"2.24.2","createdAt":"2026-04-29T07:52:56.422Z","changelog":"Enterprise Dark / Chinese Chan brand-mark and watermark gate hardening.","fileCount":225,"zipByteSize":1008459},{"version":"2.24.0","createdAt":"2026-04-28T11:46:35.171Z","changelog":"- Major update: Restructured style/preset management and recommendation system. - Added support tier definitions and usage rules for presets. - Centralized style reference files and updated instructions for built-in and custom themes. - Improved style recommendation table for typical use cases. - Removed legacy demos, config, and obsolete scripts/files. - Refined documentation for clarity and accuracy, emphasizing preferred style handling and validation flow.","fileCount":59,"zipByteSize":290897},{"version":"2.23.1","createdAt":"2026-04-25T16:49:13.964Z","changelog":"Enterprise Dark runtime stability patch: fixed shared js-engine reveal toggling, hid default editing chrome, injected real watermark version/preset metadata, stabilized one-gesture-per-page pagination, and corrected Enterprise Dark narrative cover, split-title clipping, layout rhythm, and subtle grid overlay behavior.","fileCount":213,"zipByteSize":939500},{"version":"2.22.0","createdAt":"2026-04-24T17:46:24.414Z","changelog":"Style reference rollout and strict gate hardening","fileCount":147,"zipByteSize":811973},{"version":"2.21.0","createdAt":"2026-04-24T11:52:29.342Z","changelog":"kai-slide-creator 2.21.0 - 新增 PLANNING.md，支持额外派生规划视图（仅用户显式请求时） - 新增 demos/slide-creator-intro.html 示例文件 - 优化和更新多语言文档（README.md, README.zh-CN.md 等） - 多个 demo 文件和 references 文档细节更新 - 测试脚本和校验流程改进","fileCount":140,"zipByteSize":790079},{"version":"2.20.0","createdAt":"2026-04-21T06:47:17.518Z","changelog":"fix: wheel deltaX support, boundary deadlock, editable filter, deltaMode normalization, touch axis ratio; feat: CSS/animation integrity checks (1.7/1.8), REQUIRED BLOCK markers, template搬运 rule 12","fileCount":138,"zipByteSize":770264}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17e36cy6y9drqxrb49xdqh05d83hqde:kai-slide-creator","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T19:00:35.165Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kaisersong-kai-slide-creator/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T14:10:46.728Z","emptyReason":null},"readme":"Skill: Slide Creator\n\nOwner: kaisersong\n\nSummary: 生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。\n\nTags: latest:2.27.0\n\nVersion history:\n\nv2.27.0 | 2026-05-17T10:06:32.131Z | user\n\nAdd captured-run skill eval baselines, comparator tooling, preset release gate integration, and bilingual eval documentation.\n\nv2.24.3 | 2026-04-30T14:46:21.287Z | auto\n\nkai-slide-creator 2.24.3\n\n- 新增支持 CLI/交互式链路下 `eval` 评测产出（deck 质量 JSON），用户可通过 `--eval`/`--eval-out` 显式请求\n- `--generate` 路由若显式要求 `eval`，会同步输出单 deck 评测 JSON，包括 style_score、quality gates、hard failures 与关键 diagnostics\n- 文档 (`SKILL.md`、README) 补充评测产物说明和生成链路\n- 新增 2 个中文风格 demo 示例文件\n- 其它小幅修正与增强\n\nv2.24.2 | 2026-04-29T07:52:56.422Z | user\n\nEnterprise Dark / Chinese Chan brand-mark and watermark gate hardening.\n\nv2.24.0 | 2026-04-28T11:46:35.171Z | auto\n\n- Major update: Restructured style/preset management and recommendation system.\n- Added support tier definitions and usage rules for presets.\n- Centralized style reference files and updated instructions for built-in and custom themes.\n- Improved style recommendation table for typical use cases.\n- Removed legacy demos, config, and obsolete scripts/files.\n- Refined documentation for clarity and accuracy, emphasizing preferred style handling and validation flow.\n\nv2.23.1 | 2026-04-25T16:49:13.964Z | user\n\nEnterprise Dark runtime stability patch: fixed shared js-engine reveal toggling, hid default editing chrome, injected real watermark version/preset metadata, stabilized one-gesture-per-page pagination, and corrected Enterprise Dark narrative cover, split-title clipping, layout rhythm, and subtle grid overlay behavior.\n\nv2.22.0 | 2026-04-24T17:46:24.414Z | user\n\nStyle reference rollout and strict gate hardening\n\nv2.21.0 | 2026-04-24T11:52:29.342Z | auto\n\nkai-slide-creator 2.21.0\n\n- 新增 PLANNING.md，支持额外派生规划视图（仅用户显式请求时）\n- 新增 demos/slide-creator-intro.html 示例文件\n- 优化和更新多语言文档（README.md, README.zh-CN.md 等）\n- 多个 demo 文件和 references 文档细节更新\n- 测试脚本和校验流程改进\n\nv2.20.0 | 2026-04-21T06:47:17.518Z | user\n\nfix: wheel deltaX support, boundary deadlock, editable filter, deltaMode normalization, touch axis ratio; feat: CSS/animation integrity checks (1.7/1.8), REQUIRED BLOCK markers, template搬运 rule 12\n\nv2.19.0 | 2026-04-21T02:04:28.768Z | user\n\nIR-first release: BRIEF-first workflow, late-context eval fixtures, updated design philosophy docs, and stronger regression coverage.\n\nv2.18.1 | 2026-04-20T15:51:50.297Z | user\n\nfix: Paper & Ink style reference restored; .slide-content wrapper for centering\n\nv2.18.0 | 2026-04-17T13:48:12.220Z | user\n\nJS engine extraction (html-template.md 557->222 lines); Style signature injection expanded to require all CSS classes from Typography/Components sections; Neon-cyber glow effects clarified; Style consistency audit tool\n\nv2.17.0 | 2026-04-15T13:04:20.887Z | user\n\nStyle reference system overhaul + Bold Signal contrast fix. Complete 14 style reference files. Add Rule 27 card text contrast check. Rebuild 12 demo files with scroll-snap architecture.\n\nv2.16.0 | 2026-04-14T14:55:46.152Z | auto\n\n- 新增多组测试与备份 demo 文件，增强样例覆盖及回归保障\n- 更新现有所有风格演示 demo，细化中英文双版本覆盖\n- 移除部分过时的 regenerated 测试文件，简化代码仓库\n- 增加自动化生成和渲染测试脚本（如 test_generate_rendering.py）\n- 丰富 PLANNING.md 规划示例，提升任务起稿易用性\n\nv2.15.0 | 2026-04-13T17:22:13.334Z | user\n\nComplete style reference system (21/21 presets), fix present mode JS, watermark only on last slide, add TestPresentMode/TestWatermark tests\n\nv2.13.0 | 2026-04-13T02:21:54.774Z | user\n\nfix: enforce style adherence — template placeholders, Step 1.5 extraction, generation contract rule 4\n\nv2.12.0 | 2026-04-11T09:46:25.992Z | user\n\nExpand pre-write validation to 16 checks; add component richness mandate; Blue Sky template gets content-type → component map; watermark as fixed HTML element\n\nv2.11.0 | 2026-04-11T07:45:45.405Z | user\n\nEmbed 7 hard rules in SKILL.md (content density, column balance, title wrap, forbidden titles, no 3+ same-layout, 3-concept rule, 90/8/2 color). Add heading quality rules with forbidden list and positive templates. Add Phase 3 Step 7: pre-write validation with 8 search-based checks in ALL modes (Auto, Polish, --generate).\n\nv2.10.0 | 2026-04-09T14:14:34.724Z | auto\n\n**kai-slide-creator 2.10.0 features a major documentation streamlining and simplified user experience:**\n\n- Documentation fully rewritten and condensed, now primarily in Chinese with streamlined instructions and quickstart usage.\n- Removed old roadmap and specification documents to reduce clutter.\n- Updated and merged planning depth and command routing details for better clarity.\n- Added mempalace.yaml; revised and translated README files.\n- Skill description now highlights core features, supported scenarios, and installation steps more concisely.\n\nv2.9.0 | 2026-04-06T09:32:26.728Z | user\n\nContent Review System: 16 checkpoints with 3 rule types (hard/context-aware/advisory); Phase 3.5 Review auto-runs in Polish mode; --review command for on-demand diagnosis\n\nv2.7.1 | 2026-04-06T05:19:31.150Z | user\n\nAdded a zero-dependency doc contract checker to keep SKILL.md, README.md, and workflow docs aligned, and wired it into the regression test runner.\n\nv2.7.0 | 2026-04-04T03:18:36.988Z | user\n\nAdded enhancement-mode guardrails, clarified default-on optional editing, and bundled cloudhub/kingdee brand theme examples.\n\nv2.6.1 | 2026-03-24T09:19:22.273Z | auto\n\n**Design quality rules are now enforced during slide generation.**\n\n- Added `references/design-quality.md` with detailed design quality guidelines and self-checks.\n- `--generate` and interactive Phase 3 now require loading `references/design-quality.md` to improve output density, layout, and anti-slop checks.\n- Command routing and documentation updated to reflect the new design quality review step.\n- New theme (\"kingdee\") files added.\n- Documentation refreshed and clarified across major README and reference files.\n\nv2.5.3 | 2026-03-20T08:27:15.132Z | user\n\n强制要求所有生成路径包含播放模式和编辑模式；修复内容+风格直接提供时绕过 html-template.md 的路由漏洞\n\nv2.3.1 | 2026-03-18T04:47:17.963Z | auto\n\n- Improved and clarified skill description for broader use cases, including support for both English and Chinese and various workflows (from scratch, notes, or files).\n- Added new documentation files: PRODUCT.md and TODO.md.\n- Introduced initial tests and validation scripts for demo quality and code verification.\n- Updated sample workflow and export instructions, emphasizing that PPTX/PNG export is handled by kai-html-export.\n- Expanded README and documentation coverage for usage examples and details.\n\nv2.1.0 | 2026-03-16T23:24:52.057Z | user\n\nDecouple PPTX/PNG export to kai-html-export skill. kai-slide-creator now focuses solely on HTML presentation creation — lighter deps (only Pillow), no playwright or python-pptx required.\n\nv2.0.2 | 2026-03-16T22:51:11.212Z | user\n\nInitial publish under new slug kai-slide-creator.\n\nArchive index:\n\nArchive v2.27.0: 294 files, 1141887 bytes\n\nFiles: _config.yml (307b), check-doc-sync.py (5618b), demos/aurora-mesh-en.html (40681b), demos/aurora-mesh-zh.html (43371b), demos/blue-sky-en.html (37435b), demos/blue-sky-zh.html (62450b), demos/bold-signal-en.html (38005b), demos/bold-signal-zh.html (56155b), demos/chinese-chan-en.html (32254b), demos/chinese-chan-zh.html (32888b), demos/creative-voltage-en.html (35884b), demos/creative-voltage-zh.html (44971b), demos/dark-botanical-en.html (42880b), demos/dark-botanical-zh.html (41978b), demos/data-story-en.html (42780b), demos/data-story-zh.html (48716b), demos/electric-studio-en.html (42774b), demos/electric-studio-zh.html (43918b), demos/enterprise-dark-en.html (43173b), demos/enterprise-dark-zh.html (49285b), demos/glassmorphism-en.html (43152b), demos/glassmorphism-zh.html (54163b), demos/mode-paths/auto-BRIEF.json (3502b), demos/mode-paths/auto-PLANNING.md (2871b), demos/mode-paths/intent-broker-auto-BRIEF.json (3764b), demos/mode-paths/intent-broker-auto-PLANNING.md (4108b), demos/mode-paths/intent-broker-auto.html (40523b), demos/mode-paths/intent-broker-polish-BRIEF.json (5011b), demos/mode-paths/intent-broker-polish-PLANNING.md (6265b), demos/mode-paths/intent-broker-polish.html (42301b), demos/mode-paths/polish-BRIEF.json (4945b), demos/mode-paths/polish-PLANNING.md (5850b), demos/modern-newspaper-en.html (42561b), demos/modern-newspaper-zh.html (52206b), demos/neo-brutalism-en.html (38857b), demos/neo-brutalism-zh.html (49076b), demos/neo-retro-dev-en.html (41923b), demos/neo-retro-dev-zh.html (56215b), demos/neon-cyber-en.html (42281b), demos/neon-cyber-zh.html (58816b), demos/notebook-tabs-en.html (42041b), demos/notebook-tabs-zh.html (70226b), demos/paper-ink-en.html (47866b), demos/paper-ink-zh.html (54438b), demos/pastel-geometry-en.html (41921b), demos/pastel-geometry-zh.html (56646b), demos/slide-creator-intro.html (57872b), demos/split-pastel-en.html (41849b), demos/split-pastel-zh.html (47936b), demos/strategy-consulting-en.html (38824b), demos/strategy-consulting-zh.html (38489b), demos/swiss-modern-en.html (42105b), demos/swiss-modern-zh.html (63817b), demos/terminal-green-en.html (33780b), demos/terminal-green-zh.html (43027b), demos/vintage-editorial-en.html (42429b), demos/vintage-editorial-zh.html (43565b), evals/baselines/2026-05-17/live-codex/explicit-generate.json (23798b), evals/baselines/2026-05-17/live-codex/explicit-generate/brief.json (8130b), evals/baselines/2026-05-17/live-codex/explicit-generate/deck.html (45341b), evals/baselines/2026-05-17/live-codex/explicit-generate/style-rubric.json (1427b), evals/baselines/2026-05-17/live-codex/explicit-generate/trace.normalized.json (19875b), evals/baselines/2026-05-17/preset-surface-phase1/core-blue-sky-render/deck.html (49169b), evals/baselines/2026-05-17/preset-surface-phase1/core-blue-sky-render/packet.json (1217b), evals/baselines/2026-05-17/preset-surface-phase1/core-blue-sky-render/quality-report.json (1472b), evals/baselines/2026-05-17/preset-surface-phase1/core-blue-sky-render/title-browser-report.json (6559b), evals/baselines/2026-05-17/preset-surface-phase1/core-data-story-render/deck.html (49512b), evals/baselines/2026-05-17/preset-surface-phase1/core-data-story-render/packet.json (1495b), evals/baselines/2026-05-17/preset-surface-phase1/core-data-story-render/quality-report.json (1472b), evals/baselines/2026-05-17/preset-surface-phase1/core-data-story-render/title-browser-report.json (7226b), evals/baselines/2026-05-17/preset-surface-phase1/core-enterprise-dark-render/deck.html (56674b), evals/baselines/2026-05-17/preset-surface-phase1/core-enterprise-dark-render/packet.json (1446b), evals/baselines/2026-05-17/preset-surface-phase1/core-enterprise-dark-render/quality-report.json (1479b), evals/baselines/2026-05-17/preset-surface-phase1/core-enterprise-dark-render/title-browser-report.json (6867b), evals/baselines/2026-05-17/preset-surface-phase1/core-swiss-modern-render/deck.html (50008b), evals/baselines/2026-05-17/preset-surface-phase1/core-swiss-modern-render/packet.json (1429b), evals/baselines/2026-05-17/preset-surface-phase1/core-swiss-modern-render/quality-report.json (1479b), evals/baselines/2026-05-17/preset-surface-phase1/core-swiss-modern-render/title-browser-report.json (6464b), evals/baselines/2026-05-17/preset-surface-phase1/report.json (134528b), evals/baselines/2026-05-17/preset-surface-phase1/skill-evals.json (9886b)\n\nFile v2.27.0:SKILL.md\n\n---\nname: kai-slide-creator\ndescription: 生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。\nversion: 2.27.0\nmetadata: {\"openclaw\":{\"emoji\":\"🎞\",\"os\":[\"darwin\",\"linux\",\"windows\"],\"homepage\":\"https://github.com/kaisersong/slide-creator\",\"requires\":{\"bins\":[\"python3\"]},\"install\":[]}}\n---\n\n# kai-slide-creator\n\n生成零依赖 HTML 演示文稿，纯浏览器运行。主路径是 IR-first：`user prompt → BRIEF.json → HTML → validate`。\n\n## 安装\n\n**Claude Code:** 告诉 Claude「安装 https://github.com/kaisersong/slide-creator」  \n**OpenClaw:** `clawhub install kai-slide-creator`\n\n## 使用方式\n\n`/slide-creator ...` 是 Claude/OpenClaw 的 slash 技能调用，不是 bash 命令。\n\n**规划深度：**\n- `自动` (Auto) — 快速出稿，约 3-6 分钟\n- `精修` (Polish) — 深度规划，约 8-15 分钟，自动执行 Review\n\n**内容类型 → 风格推荐：**\n\n| 内容类型 | 推荐风格 |\n|---|---|\n| 数据报告 / KPI 看板 | Data Story、Enterprise Dark、Swiss Modern |\n| 商业路演 / VC Deck | Bold Signal、Aurora Mesh、Enterprise Dark |\n| 产品发布 / SaaS | Blud Sky、Aurora Mesh、Glassmorphism、Electric Studio |\n| 开发工具 / API 文档 | Terminal Green、Neon Cyber、Neo-Retro Dev Deck |\n| 研究 / 思想领导力 | Modern Newspaper、Paper & Ink、Swiss Modern |\n| 创意 / 个人品牌 | Vintage Editorial、Split Pastel、Neo-Brutalism |\n| 哲学 / 思想 | Chinese chan|\n| 咨询报告 / 战略方案 | Strategy Consulting、Enterprise Dark、Swiss Modern |\n\n\n## 命令路由\n\n`自动` (Auto) — 快速出稿 | `精修` (Polish) — 深度规划，自动执行 Review\n\n| 命令 | 加载内容 | 行为 |\n|------|----------|------|\n| `--plan [prompt]` | `references/brief-template.json`；如用户指定了 custom theme，同步加载 `themes/<name>/reference.md` | 创建 `BRIEF.json`；仅在用户明确要求时额外派生 `PLANNING.md` |\n| `--generate` | SKILL.md + 已选风格文件（内置 `references/*.md` / `blue-sky-starter.html`；自定义 `themes/<name>/reference.md`）+ composition 源 + `references/title-quality.md` + `references/html-template.md` + `references/js-engine.md` + `references/base-css.md` + `references/impeccable-anti-patterns.md` | 从 `BRIEF.json` 生成 HTML，并执行写入前门禁；如用户显式要求 `eval`，同步产出单 deck 评测 JSON |\n| `--review [file.html]` | `references/review-checklist.md` + 目标 HTML | 执行 17 项检查点 → 确认窗口 → 修复/报告 |\n| 无 flag (交互式) | `references/workflow.md` + 其他按需 | 遵循 Phase 0-5 |\n| 直接给内容 + 风格 | 同 `--generate` | 先落一个有效 `BRIEF.json`，再走同一个 deterministic renderer 与 strict 写入前门禁；禁止手拼最终 HTML |\n\n**渐进式披露：** 每个命令只加载所需文件。`--plan` 只提炼 IR，不接触 CSS。\n\n## 核心规则（按优先级）\n\n1. **风格强制**\n   所有颜色、字体、组件、背景、动画、图表色、signature elements 都**必须且只能**来自选中的风格文件。模板里的 `[from style file]` 和示例值只是占位，禁止直接使用。  \n   默认推荐面第一阶段聚焦 4 个 production presets：`Swiss Modern / Enterprise Dark / Data Story / Blue Sky`；**但用户显式指定任意当前 preset 时，必须保留该选择**。support tier 只影响默认推荐优先级，不影响显式指定。\n   Custom theme（`themes/<name>/reference.md`）与内置 preset 同等对待。`BRIEF.json` 的 `style.preset` 支持三种值：内置 preset 名、custom theme 文件夹名、或 `themes/<name>/reference.md` 路径。代码层会自动归一化解析。  \n   **Swiss Modern 额外要求 canonical export path**：面板保持 `.slide` direct child，token 保持 `--bg/--text/--red`，使用 canonical 类（`.left-panel/.right-panel/.stat-row/.cta-block`），并写入 `data-export-role`；不得生成 `.left-col/.right-col` 或 `--bg-primary/--accent` 这类兼容别名。\n\n2. **叙事弧线**\n   先锁内容结构，再锁 composition route。每页都要有明确 page role、不同布局意图和足够的信息推进；不要先拼播放/编辑壳子，再回头补故事。内部 route 名称属于实现细节，不要挤占用户入口层。\n\n3. **标题质量**\n   标题必须是断言式，禁止 Overview / Introduction / Summary / 结论 / 概览 这类通用标签。多行标题必须平衡，不能出现孤儿行、塌陷中间行或靠过窄 measure 硬挤换行。规则和示例只看 `references/title-quality.md`。\n\n4. **运行时与壳子基线**\n   非 Blue Sky 风格必须走共享壳子：`body[data-preset]`、`scroll-snap`、`SlidePresentation`、`PresentMode`、首屏 `.visible` 修复、`data-notes`、shell markers。Blue Sky 是唯一允许保留自身 `#stage/#track` 架构的 preset。\n\n5. **可降级功能**\n   播放模式、编辑模式、水印都默认开启，但优先级低于风格、叙事和标题。  \n   - 播放模式：默认开启  \n   - 编辑模式：默认开启，**可省略编辑模式**，尤其在用户明确说不要或 existing HTML/导入场景受约束时  \n   - 水印：默认保留，但必须是 JS 注入到最后一页，`position: absolute`，禁止 `position: fixed`\n\n详见 `references/html-template.md`。生成任何 HTML 前必读此文件。\n\n**Direct-route guard:** 无论是 `--generate` 还是“直接给内容 + 风格”，都必须先 materialize 一个有效 `BRIEF.json`，再通过 `render_from_brief()` 同一路径渲染，并在写出最终文件前通过 `python3 scripts/validate_html.py \"$TMP_HTML\" --strict`。禁止在交互式路径里绕过 BRIEF 直接手写最终 HTML。\n\n**Optional eval artifact:** 当用户显式要求 `eval` / `评测` 时，生成链路应在 strict gate 通过后额外写出单 deck 评测 JSON。原始 CLI 对应 `--eval`（默认写同名 `.eval.json`）或 `--eval-out <path>`；评测至少包含 `style_score (= style_signature_coverage)`、quality gates、hard failures 与关键 diagnostics。\n\n## Pre-Write Validation Pipeline（写入前门禁）\n\n组装完整 HTML 后，先写入临时文件，再运行：\n\n\n任一失败都算生成失败，必须修复或重生直到通过。\n\n**核心门禁顺序：**\n\n1. **风格强制 / canonical export**\n   选中风格的 Signature Elements、Typography、Components、Background 必须完整注入；不得遗漏 checklist 项。Blue Sky 例外：使用 `blue-sky-starter.html` 基底。\n\n2. **叙事弧线 / composition route**\n   页数、page roles、composition route 必须完整；连续两页不得使用相同布局；每页至少使用 2-3 种组件类型，不得只用 `.g` + `.bl` 堆砌。单页列表项 ≤ 5 条；标题 + 正文段落 + 列表三者不得同时出现在同一页（内容过多时拆页）。\n\n3. **标题质量**\n   标题规则见 `references/title-quality.md`。\n\n4. **架构隔离 / runtime**\n   非 Blue Sky 风格必须使用 `scroll-snap-type: y mandatory` + `SlidePresentation`。`#stage/#track`/`translateX` 只允许 Blue Sky。\n\n5. **Preset metadata / shell markers**\n   `body[data-preset]` 必须存在且非占位；写出 `id=\"slide-N\"`、`#brand-mark`、`.nav-dots`、`.progress-bar`、`.slide-num-label`、`data-export-role`。\n\n6. **对比度 / token 使用**\n   文字对比必须正确；浅底不用浅字，深底不用深字；优先用风格 token，不要发明局部颜色。\n\n7. **字体 / CJK**\n   Google Fonts 合并为单一链接；`<style>` 开头要有 `body { background-color: ... }` 回退；CJK 页面追加对应 `Noto Sans SC/JP/KR`。\n\n8. **CSS 工程**\n   布局、背景、间距通过 CSS 选择器定义；inline `style=\"\"` ≤ 5 处，目标 0。\n\n9. **低级错误与模板完整性**\n   禁止 U+FE0F。Blue Sky 模板路径还要检查 REQUIRED BLOCK、`@keyframes`、以及 `go()` 返回 boolean。\n\n> 更多视觉和内容规则在 `--review` / Phase 3.5 Review 中执行。完整反模式映射表见 `references/impeccable-anti-patterns.md`。\n\n## 风格参考\n\n只读取已选风格的文件：\n\n- **内置预设**：完整列表、风格说明和选择建议都在 `references/style-index.md`\n- **支持层级**：默认推荐面与 support tier 定义在 `references/preset-support-tiers.json`\n- **内置风格文件位置**：统一在 `references/` 下；Blue Sky 例外，使用 `references/blue-sky-starter.html`\n- **自定义主题**：`themes/<name>/reference.md`\n\n- 风格选择器：`references/style-index.md`\n- 视口与共享 CSS：`references/base-css.md`\n- 设计质量基线：`references/design-quality.md`\n- 标题规则：`references/title-quality.md`\n- 反模式：`references/impeccable-anti-patterns.md`\n\n- `BRIEF.json` 已存在 → 直接读取并作为真相源\n- 只有在用户明确要求人工审阅时才派生 `PLANNING.md`\n- 现有 HTML 增强遵循 `references/workflow.md` 的 Enhancement Mode\n\n## 相关技能\n\n- **kai-html-export** — 导出 PPT（图片模式或 Native 模式）\n\nFile v2.27.0:evals/baselines/2026-05-17/README.md\n\n# Slide-Creator Eval Baseline — 2026-05-17\n\nThis directory captures the current green eval baseline after adding captured-run\nskill evals and fixing current demo fixture gates.\n\n## Test Baseline\n\nCommand:\n\n```bash\npython3 -m pytest tests/ -q\n```\n\nResult:\n\n```text\n2260 passed, 132 skipped in 37.25s\n```\n\n## Captured-Run Skill Eval Baseline\n\nFile: `skill-evals/skill-evals.json`\n\nCommand:\n\n```bash\npython3 scripts/run-skill-evals.py \\\n  --runner fixture \\\n  --artifact-dir /private/tmp/slide-skill-eval-runs-rubric \\\n  --format json \\\n  --json-out /private/tmp/slide-skill-evals-rubric.json\n```\n\nSummary:\n\n| Metric | Value |\n|---|---:|\n| Total cases | 6 |\n| Passed | 6 |\n| Failed | 0 |\n| Incomplete | 0 |\n| Average score | 100.00 |\n| Outcome avg | 25.00 |\n| Process avg | 25.00 |\n| Style avg | 25.00 |\n| Efficiency avg | 25.00 |\n\nCase scores:\n\n| Case | Total | Outcome | Process | Style | Efficiency |\n|---|---:|---:|---:|---:|---:|\n| explicit-generate | 100 | 25 | 25 | 25 | 25 |\n| implicit-exec-update | 100 | 25 | 25 | 25 | 25 |\n| contextual-product-launch | 100 | 25 | 25 | 25 | 25 |\n| boundary-report-to-deck | 100 | 25 | 25 | 25 | 25 |\n| negative-report | 100 | 25 | 25 | 25 | 25 |\n| negative-html-export | 100 | 25 | 25 | 25 | 25 |\n\nPositive fixture cases use checked-in `*-style-rubric.json` files so a missing\nstyle rubric now marks the case `eval_complete: false` and fails the eval.\n\n## Live Codex Captured-Run Baseline\n\nFile: `live-codex/explicit-generate.json`\n\nArtifacts: `live-codex/explicit-generate/`\n\nCommand:\n\n```bash\npython3 scripts/run-skill-evals.py \\\n  --runner codex \\\n  --case-id explicit-generate \\\n  --run-live \\\n  --artifact-dir .tmp-run/skill-live-codex \\\n  --format json \\\n  --json-out /private/tmp/slide-skill-live-codex-explicit.json\n```\n\nThe live run produced `deck.html`, `brief.json`, raw trace, and normalized\ntrace. It was then rescored with an external `style-rubric.json` artifact.\n\nSummary:\n\n| Metric | Value |\n|---|---:|\n| Total cases | 1 |\n| Passed | 1 |\n| Failed | 0 |\n| Incomplete | 0 |\n| Average score | 89.00 |\n| Outcome avg | 25.00 |\n| Process avg | 25.00 |\n| Style avg | 24.00 |\n| Efficiency avg | 15.00 |\n| Shell commands | 35 |\n| Input tokens | 1,216,207 |\n| Output tokens | 10,285 |\n| Wall time | 221,990 ms |\n\nCase scores:\n\n| Case | Total | Outcome | Process | Style | Efficiency | Failures |\n|---|---:|---:|---:|---:|---:|---|\n| explicit-generate | 89 | 25 | 25 | 24 | 15 | `efficiency.shell_command_count_over_budget`, `efficiency.input_tokens_over_budget` |\n\n## Preset Surface Release Gate Baseline\n\nDirectory: `preset-surface-phase1/`\n\nThis directory is a reusable `--baseline-dir` for non-regression comparison.\nIt includes each case's `deck.html`, `packet.json`, `quality-report.json`, and\nbrowser title report where applicable.\n\nCommand:\n\n```bash\npython3 scripts/preset_release_gate.py \\\n  --output-dir /private/tmp/slide-preset-release-gate \\\n  --report-path /private/tmp/slide-preset-release-gate/report.json \\\n  --summary-md /private/tmp/slide-preset-release-gate/summary.md \\\n  --include-skill-evals \\\n  --skill-evals-runner fixture \\\n  --skill-evals-json-out /private/tmp/slide-preset-release-gate/skill-evals.json\n```\n\nSummary:\n\n| Metric | Value |\n|---|---:|\n| Pass count | 6 |\n| Fail count | 0 |\n| Best case | support-blue-sky-fixture |\n| Best overall | 1.00 |\n| HTML fixture pass/fail | 2 / 0 |\n| Render pass/fail | 4 / 0 |\n\nCase scores:\n\n| Case | Route | Compression | Render | Efficiency |\n|---|---:|---:|---:|---:|\n| support-blue-sky-fixture | 1.00 | 1.00 | 1.00 | 1.00 |\n| core-blue-sky-render | 1.00 | 1.00 | 1.00 | 1.00 |\n| support-paper-ink-fixture | 1.00 | 1.00 | 1.00 | 1.00 |\n| core-enterprise-dark-render | 1.00 | 1.00 | 1.00 | 1.00 |\n| core-swiss-modern-render | 1.00 | 1.00 | 1.00 | 1.00 |\n| core-data-story-render | 1.00 | 1.00 | 1.00 | 1.00 |\n\n## Future Comparison\n\nRun the future candidate against this baseline:\n\n```bash\npython3 scripts/preset_release_gate.py \\\n  --output-dir /private/tmp/slide-preset-release-gate-candidate \\\n  --baseline-dir evals/baselines/2026-05-17/preset-surface-phase1 \\\n  --require-baseline \\\n  --report-path /private/tmp/slide-preset-release-gate-candidate/report.json \\\n  --summary-md /private/tmp/slide-preset-release-gate-candidate/summary.md \\\n  --include-skill-evals \\\n  --skill-evals-runner fixture \\\n  --skill-evals-json-out /private/tmp/slide-preset-release-gate-candidate/skill-evals.json\n```\n\nBecause the command above passes `--baseline-dir\nevals/baselines/2026-05-17/preset-surface-phase1`, the release gate also\ncompares the new captured-run `skill-evals.json` against\n`preset-surface-phase1/skill-evals.json` automatically and fails on pass,\ncompleteness, total-score, or category-score regressions.\n\nFor standalone captured-run score comparison, run:\n\n```bash\npython3 scripts/compare-skill-eval-baseline.py \\\n  --old evals/baselines/2026-05-17/skill-evals/skill-evals.json \\\n  --new /path/to/candidate/skill-evals.json \\\n  --format json\n```\n\nFile v2.27.0:evals/late-context/core-md-guard/README.md\n\n# Core-MD Guard Late-Context Eval Notes\n\nUse these cases to measure whether guard hardening improved real late-context reliability.\n\nPrimary goals:\n\n- catch omitted shared runtime on non-Blue-Sky decks\n- prevent `data-preset` omission from bypassing strict validate\n- preserve the Blue Sky control path\n- confirm style-heavy presets still retain signature layers under long context\n\nSuggested before/after metrics:\n\n- guard catch rate\n- false-positive rate\n- late-context contract pass rate\n- failure localization quality\n\nCase IDs live in `../cases/` and are listed in `../manifest.json`.\n\nFile v2.27.0:evals/late-context/low-context-safe-generate/README.md\n\n# Low-Context-Safe Generate Eval Notes\n\nUse these cases to prove the optimization improves robustness without flattening rich-context output.\n\nThis eval layer should answer two questions:\n\n1. Does the pipeline stay stable when context is noisy or scarce?\n2. Does the pipeline avoid making strong-context decks bland in order to get that stability?\n\nRecommended protocol:\n\n- compare current pipeline as control vs low-context-safe pipeline as treatment\n- use the same case set, same model, and same settings\n- run low-context buckets at least 5 times each\n- run rich-context benchmarks at least 3 times each\n\nRecommended buckets:\n\n- same-BRIEF parity pair\n- sparse-BRIEF fallback\n- invalid BRIEF fail-closed\n- high-context rich benchmark\n- core runtime/style guard cases from `core-md-guard/`\n\nRecommended diagnostics:\n\n- `quality_tier`\n- `strict_pass_first_try`\n- `repair_rounds`\n- `route_drift`\n- `layout_variety`\n- `avg_component_kinds_per_slide`\n- `style_signature_coverage`\n- `chrome_leak`\n- `content_occlusion_risk`\n- `numeric_faithfulness`\n- `source_fact_coverage`\n- `narrative_role_coverage`\n- `minimal_slide_ratio`\n- `max_minimal_slide_run`\n- `latency_ms.packet`\n- `latency_ms.assemble`\n- `latency_ms.validate`\n\nRecommended executable entrypoint:\n\n- `python3 scripts/eval-quality.py <deck.html> --brief <BRIEF.json> --source <source.md>`\n\nThis quality layer exists because a deck can pass `strict validate` and still fail the user:\n\n- runtime chrome leaks into the slide surface\n- fixed panels occlude body copy\n- chart values are invented instead of sourced\n- narrative rhythm collapses into repeated title-only scaffolds\n\nSuccess should be judged by both:\n\n- stronger low-context stability\n- no meaningful regression on rich-context benchmark cases\n\nFile v2.27.0:evals/preset-surface-phase1/README.md\n\n# Preset Surface Phase 1 Eval\n\nThis suite exists to prove two things after preset-surface optimization:\n\n1. The default quality investment in the core presets actually improved output quality.\n2. Narrowing the recommendation surface did not silently break the visible support surface.\n\n## Buckets\n\n- `core-enterprise-dark-render`\n- `core-swiss-modern-render`\n- `core-data-story-render`\n\nThese are the **deterministic-core** cases. They render from the current code path and are the real uplift benchmark set.\n\n- `support-blue-sky-fixture`\n- `support-paper-ink-fixture`\n\nThese are the **support-surface-smoke** cases. Blue Sky and Paper & Ink are still evaluated from known-good HTML fixtures because the deterministic BRIEF renderer currently only supports `Swiss Modern / Enterprise Dark / Data Story`.\n\n## Why Blue Sky Is Fixture-Only\n\n`render_from_brief()` in [scripts/low_context.py](/Users/song/projects/slide-creator/scripts/low_context.py) currently raises for non-deterministic presets outside the core three. Blue Sky remains a special starter path, so it should stay in support-surface smoke until a deterministic renderer exists.\n\n## Why Paper & Ink Is Fixture-Only\n\n`Paper & Ink` is now back in the green support-surface suite, but still as a fixture case rather than a deterministic render case.\n\n- `demos/paper-ink-zh.html` now passes `python3 tests/validate.py --strict`\n- the representative editorial fixture now carries the current shared runtime, watermark injection, and title-balance fixes\n- the preset still does not have a deterministic BRIEF renderer, so it remains support-surface smoke rather than core-render benchmark coverage\n\n## Recommended Workflow\n\nBaseline run:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-baseline\n```\n\nCandidate run with non-regression comparison:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-candidate \\\n  --baseline-dir /tmp/preset-surface-baseline\n```\n\nDirect suite run with browser-title QA:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-candidate \\\n  --baseline-dir /tmp/preset-surface-baseline \\\n  --browser-titles\n```\n\n`browser-title-composition` is now a required title gate for every phase-1 case, so browser-backed title QA is part of the formal green path rather than an optional diagnostic.\n\nRelease gate wrapper:\n\n```bash\npython3 scripts/preset_release_gate.py \\\n  --output-dir /tmp/preset-surface-gate \\\n  --baseline-dir /tmp/preset-surface-baseline \\\n  --require-baseline\n```\n\nThe release gate wrapper auto-enables browser title QA whenever the suite manifest contains `required_title_gates`, so the wrapper command above is sufficient for the formal phase-1 gate.\n\n## What Counts As Quality Uplift\n\nFor the deterministic-core cases:\n\n- strict validate still passes\n- `chrome-hidden-by-default` and `no-content-occlusion-risk` stay green\n- `layout_variety`, `component_diversity`, and `style_signature_coverage` do not regress materially\n- `minimal_slide_ratio` does not drift upward beyond the configured threshold\n- Data Story keeps `numeric_faithfulness >= 0.95`\n\nFor the support-surface smoke cases:\n\n- the preset still renders as the named preset\n- preset-specific architecture and runtime markers are still present\n- the surface stays usable enough for contract validation\n- Paper & Ink now proves editorial support-surface health without pretending it already has deterministic BRIEF rendering\n\nFile v2.27.0:README.md\n\n# slide-creator\n\n> You have great content — but great content deserves a great presentation. AI can generate slides, but the results are inconsistent and re-rolling gets old fast. Slide-Creator gives you stable, polished output every time: pick a style that fits your audience, and let the model handle the rest. Go grab a coffee.\n>\n> **[See the guide as a report →](https://kaisersong.github.io/slide-creator/demos/blue-sky-en.html)** — this document was generated by slide-creator itself.\n\nA skill for [Claude Code](https://claude.ai/claude-code) and [OpenClaw](https://openclaw.ai) that generates stunning, zero-dependency HTML presentations.\n\nEnglish | [简体中文](README.zh-CN.md)\n\n---\n\n## Live Demo\n\nSee what slide-creator produces — open directly in your browser:\n\n- [slide-creator intro (English)](https://kaisersong.github.io/slide-creator/demos/blue-sky-en.html)\n- [slide-creator 介绍（中文）](https://kaisersong.github.io/slide-creator/demos/blue-sky-zh.html)\n\nClick any screenshot below to open the live demo (same content, different styles):\n\n<table>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/blue-sky-en.html\"><img src=\"demos/screenshots/blue-sky.png\" width=\"240\" alt=\"Blue Sky\"/></a><br/><b>Blue Sky</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/bold-signal-en.html\"><img src=\"demos/screenshots/bold-signal.png\" width=\"240\" alt=\"Bold Signal\"/></a><br/><b>Bold Signal</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/electric-studio-en.html\"><img src=\"demos/screenshots/electric-studio.png\" width=\"240\" alt=\"Electric Studio\"/></a><br/><b>Electric Studio</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/creative-voltage-en.html\"><img src=\"demos/screenshots/creative-voltage.png\" width=\"240\" alt=\"Creative Voltage\"/></a><br/><b>Creative Voltage</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/dark-botanical-en.html\"><img src=\"demos/screenshots/dark-botanical.png\" width=\"240\" alt=\"Dark Botanical\"/></a><br/><b>Dark Botanical</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/notebook-tabs-en.html\"><img src=\"demos/screenshots/notebook-tabs.png\" width=\"240\" alt=\"Notebook Tabs\"/></a><br/><b>Notebook Tabs</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/pastel-geometry-en.html\"><img src=\"demos/screenshots/pastel-geometry.png\" width=\"240\" alt=\"Pastel Geometry\"/></a><br/><b>Pastel Geometry</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/split-pastel-en.html\"><img src=\"demos/screenshots/split-pastel.png\" width=\"240\" alt=\"Split Pastel\"/></a><br/><b>Split Pastel</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/vintage-editorial-en.html\"><img src=\"demos/screenshots/vintage-editorial.png\" width=\"240\" alt=\"Vintage Editorial\"/></a><br/><b>Vintage Editorial</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/neon-cyber-en.html\"><img src=\"demos/screenshots/neon-cyber.png\" width=\"240\" alt=\"Neon Cyber\"/></a><br/><b>Neon Cyber</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/terminal-green-en.html\"><img src=\"demos/screenshots/terminal-green.png\" width=\"240\" alt=\"Terminal Green\"/></a><br/><b>Terminal Green</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/swiss-modern-en.html\"><img src=\"demos/screenshots/swiss-modern.png\" width=\"240\" alt=\"Swiss Modern\"/></a><br/><b>Swiss Modern</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/paper-ink-en.html\"><img src=\"demos/screenshots/paper-ink.png\" width=\"240\" alt=\"Paper & Ink\"/></a><br/><b>Paper & Ink</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/aurora-mesh-en.html\"><img src=\"demos/screenshots/aurora-mesh.png\" width=\"240\" alt=\"Aurora Mesh\"/></a><br/><b>Aurora Mesh</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/enterprise-dark-en.html\"><img src=\"demos/screenshots/enterprise-dark.png\" width=\"240\" alt=\"Enterprise Dark\"/></a><br/><b>Enterprise Dark</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/glassmorphism-en.html\"><img src=\"demos/screenshots/glassmorphism.png\" width=\"240\" alt=\"Glassmorphism\"/></a><br/><b>Glassmorphism</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/neo-brutalism-en.html\"><img src=\"demos/screenshots/neo-brutalism.png\" width=\"240\" alt=\"Neo-Brutalism\"/></a><br/><b>Neo-Brutalism</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/chinese-chan-en.html\"><img src=\"demos/screenshots/chinese-chan.png\" width=\"240\" alt=\"Chinese Chan\"/></a><br/><b>Chinese Chan</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/data-story-en.html\"><img src=\"demos/screenshots/data-story.png\" width=\"240\" alt=\"Data Story\"/></a><br/><b>Data Story</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/modern-newspaper-en.html\"><img src=\"demos/screenshots/modern-newspaper.png\" width=\"240\" alt=\"Modern Newspaper\"/></a><br/><b>Modern Newspaper</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/neo-retro-dev-en.html\"><img src=\"demos/screenshots/neo-retro-dev.png\" width=\"240\" alt=\"Neo-Retro Dev Deck\"/></a><br/><b>Neo-Retro Dev Deck</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/strategy-consulting-en.html\"><img src=\"demos/screenshots/strategy-consulting.png\" width=\"240\" alt=\"Strategy Consulting\"/></a><br/><b>Strategy Consulting</b></td>\n</tr>\n</table>\n\n---\n\n## Design Philosophy: Build for the Real Last Mile\n\nslide-creator is built around one observation: people usually spend a long time generating or discussing content first, then ask for slides at the very end. That is the worst possible moment to depend on raw conversation context. The model is already overloaded, style signals are diluted, and hard constraints get dropped.\n\nThe design philosophy of slide-creator is to protect that last mile.\n\n### 1. IR-first workflow, planning is optional\n\nThe main workflow is now explicitly **IR-first workflow**:\n\n```\nuser prompt → BRIEF.json → HTML → validate → eval\n```\n\n`--plan` exists to distill a durable `BRIEF.json`, not to force a human review step every time. `PLANNING.md` is optional, a human-readable view when someone explicitly wants to inspect structure before rendering.\n\nThis matters because the generator should not carry the full chat history into the render step. `--generate` should execute against a small, hard truth source, not against a messy, late-stage conversation.\n\nThe same rule applies to direct prompt generation. \"Give content + preset and generate now\" is still an IR-first path: materialize `BRIEF.json`, render through the deterministic renderer, then pass the strict pre-write validator before writing the final HTML.\n\n### 2. Public modes stay simple, internal pipeline stays strict\n\nUsers should not need to think in six internal phases. The public mental model is deliberately small:\n\n- **Auto** for fast first draft\n- **Polish** for the quality-locked path\n\nInternally, the pipeline is stricter than the UI suggests. The real path is style discovery, BRIEF distillation, rendering, validation, and review. Simpler UX outside, stronger contract inside.\n\nThis is why the README and the skill keep talking about Auto / Polish, while the repo still maintains explicit routing, review logic, and eval infrastructure.\n\n### 3. Progressive disclosure for model context\n\nA skill file loads into model context on every invocation. That means context is a product surface, not an implementation detail.\n\nslide-creator keeps `SKILL.md` as a thin router and pushes detail into references so each path loads only what it needs:\n\n```\n--plan        → references/brief-template.json only\n--generate    → references/html-template.md + references/js-engine.md + one style file + base-css.md\ninteractive   → references/workflow.md\nstyle picker  → references/style-index.md\n```\n\nThe goal is not elegance for its own sake. It is to reduce context pressure so the model does not forget the important parts right before it renders.\n\n### 4. Show, don't tell, for visual choices\n\nMost users cannot reliably describe a visual direction in abstract language. They can react to concrete options immediately.\n\nThat is why slide-creator treats style selection as a preview problem, not a questionnaire problem. Show three strong directions. Let the user point. Then write the decision into `BRIEF.json`.\n\nThis is also why style choice belongs before rendering. If style remains a vague instruction until the HTML step, it is too late.\n\n### 5. Zero-dependency runtime is part of the product\n\nThe output is not a screenshot, and not a build artifact that still needs another toolchain. The output is a browser-native deck with:\n\n- viewport-fitted slides\n- presenter mode\n- **Default-on** inline editing\n- keyboard navigation\n- self-contained runtime\n\nThe zero-dependency requirement forces discipline. If a deck only works after a bundler, remote font fetch, or extra runtime glue, the product has already missed its point.\n\n### 6. Validate before trust\n\nThe system should catch failure before the user opens a broken deck.\n\nThat is why slide-creator is moving quality checks earlier:\n\n- `--plan` creates a structured `BRIEF.json`\n- `--generate` renders from the IR instead of from the whole conversation\n- `validate-brief.py` checks the brief contract\n- `scripts/validate_html.py --strict` checks the runtime contract\n- evals score route / compression / render / efficiency\n\nThe important design idea here is not \"more tests\". It is **better failure localization**. If a result is bad, we want to know whether the mistake happened in routing, compression, rendering, or polish. That feedback then improves the skill itself.\n\n**Validation positioning: pre-write gate, not optional review**\n\nvalidate.py should run inside `--generate`, but after rendering and before the final file is accepted. The right sequence is: assemble HTML → write temp file → run `python3 scripts/validate_html.py \"$TMP_HTML\" --strict` → fix/regenerate until pass → write final output. If you also want a single-deck eval artifact, add `--eval` or `--eval-out report.json` after the strict gate passes.\n\nThis keeps validation out of planning and composition, but inside delivery:\n- No extra planning step → no extra LLM cognitive load during ideation\n- No extra style-file reads beyond the existing generation inputs\n- Hard failures stop bad output before handoff\n- Warnings can still feed polish / retry policy without pretending the deck is already valid\n\n**Captured-run skill evals**\n\n`scripts/run_evals.py` checks committed BRIEF/HTML artifacts and deterministic renderer behavior. It is a regression gate, not a full skill eval.\n\nFor OpenAI-style captured-run skill evals, use:\n\n```bash\npython3 scripts/run-skill-evals.py --runner codex --run-live --format json --json-out .tmp-run/skill-evals/results.json\n```\n\nThis runs the prompt set in `evals/slide-skill-prompts.csv` through the selected runner, stores raw and normalized traces under `evals/artifacts/current/skill-runs/`, and scores each case across four categories:\n\n- Outcome: deck task completion and valid HTML artifacts.\n- Process: skill routing, BRIEF/materialization evidence, reference loading, and strict validation evidence from normalized runner metrics.\n- Style: preset fit, slide rhythm, content fidelity, and structured rubric grading for positive captured-run cases.\n- Efficiency: command count, repeated failures, token budgets, and wall-clock budget.\n\nThe live eval architecture is deliberately split into three roles:\n\n- Supervisor: selects cases, launches isolated workers, captures traces, writes baselines, and compares regressions.\n- Generate Worker: one fresh isolated worker per case; reads `SKILL.md`, a small reference set, writes `BRIEF.json`, renders HTML, and runs strict validation.\n- Style Judge: a separate grader that produces `style-rubric.json`; the generator does not self-grade style.\n\nAll generation-worker shell commands and tokens count toward Efficiency. Subagents/fresh workers are for context isolation, not for hiding cost. The live worker prompt forbids broad repo searches, previous eval traces, existing decks, `tests/`, `demos/`, `evals/baselines/`, CLI discovery, Python introspection, symlinks, and writes outside the per-case artifact directory.\n\nUse fixture mode for deterministic local tests:\n\n```bash\npython3 scripts/run-skill-evals.py --runner fixture --case-id explicit-generate --normalized-trace tests/fixtures/skill-evals/explicit-generate-normalized.json --format json\n```\n\n`scripts/preset_release_gate.py` keeps captured-run evals optional. Add `--include-skill-evals` for deterministic release checks, or let `--runner codex --run-live` run only during a manual evaluation pass. Positive fixture cases use checked-in `tests/fixtures/skill-evals/*-style-rubric.json`; if a positive case has no rubric, the harness marks it `eval_complete: false` and fails the eval instead of hiding the gap behind a green score.\n\nWhen `--baseline-dir` contains `skill-evals.json`, the release gate automatically compares the new captured-run result against that baseline and fails on pass, completeness, total score, or category regressions. You can also run the comparator directly:\n\n```bash\npython3 scripts/compare-skill-eval-baseline.py \\\n  --old evals/baselines/2026-05-17/skill-evals/skill-evals.json \\\n  --new /path/to/candidate/skill-evals.json \\\n  --format json\n```\n\nBefore adding any new check, verify: does this check belong in the deterministic runtime gate? If it requires subjective taste judgment rather than contract validation, it should stay in review/eval instead of strict validate.\n\n**Contract alignment: validators must match generation contracts**\n\nvalidate.py checks must align with actual contracts in SKILL.md / html-template.md / js-engine.md. For example:\n- Check hotzone → must use `.edit-hotzone` (class) not `id=\"hotzone\"`\n- Check preset metadata → generated decks must emit a real `body[data-preset]`, not omit it or leave the template placeholder\n- Check external links → must allow Google Fonts (explicitly required by html-template.md)\n- Check watermark → must verify JS injection logic (not hardcoded position)\n\nContract alignment isn't about doc syncing; it's about script validation: every validate.py change should run against demos to ensure checks match actual generation output.\n\n### 7. Against slide slop, visual and semantic\n\nMost AI slide failures are not dramatic. They are mediocre. Sparse pages, repeated layouts, weak titles, and generic structure. That is what makes decks feel machine-made.\n\nslide-creator treats this as a design problem and a content problem:\n\n- visual density must be intentional\n- layout rhythm must change\n- titles should carry judgments when the content type calls for it\n- numbers should surface early when the material has them\n- jargon should be translated for the audience\n\nThe point is not to make every deck look busy. It is to avoid accidental emptiness and accidental vagueness.\n\n### 8. Extensible themes, but with a contract\n\nCustom themes are supported, but they are not prompt soup. The contract is explicit:\n\n- create `themes/your-theme/`\n- add `reference.md` for the design language\n- optionally add `starter.html` for complex systems\n\nThis makes themes composable and reviewable. A theme is not just \"use our brand colors\". It is a reusable rendering contract.\n\n### 9. Content-type routing is a quality feature\n\n22 presets are useful only if the system helps users start in the right neighborhood.\n\nThat is why slide-creator routes by content type:\n\n```\nData report / KPI dashboard → Data Story, Enterprise Dark, Swiss Modern\nBusiness pitch / VC deck    → Bold Signal, Aurora Mesh, Enterprise Dark\nDeveloper tool / API docs   → Terminal Green, Neon Cyber, Neo-Retro Dev Deck\nConsulting / strategy       → Strategy Consulting, Enterprise Dark, Swiss Modern\n```\n\nGood defaults reduce rework. In practice, that means fewer bad first drafts, fewer style resets, and less wasted context.\n\nPhase 1 recommendation surface is intentionally narrower than the full preset library:\n\n- `Swiss Modern`\n- `Enterprise Dark`\n- `Data Story`\n- `Blue Sky`\n\nThis does **not** remove the other presets. Explicit preset selection still wins; the narrower surface only affects defaults and recommendation priority.\n\n---\n\n## Install\n\n### Claude Code\n\nTell Claude: \"Install https://github.com/kaisersong/slide-creator\"\n\nOr manually:\n```bash\ngit clone https://github.com/kaisersong/slide-creator ~/.claude/skills/slide-creator\n```\n\nRestart Claude Code. Use as `/slide-creator`.\n\n### OpenClaw\n\n```bash\n# Via ClawHub (recommended)\nclawhub install kai-slide-creator\n\n# Or manually\ngit clone https://github.com/kaisersong/slide-creator ~/.openclaw/skills/slide-creator\n```\n\n> ClawHub page: https://clawhub.ai/skills/kai-slide-creator\n\n---\n\n## Usage\n\n### Commands\n\n```\n/slide-creator --plan       # Analyze content + resources/, create BRIEF.json\n/slide-creator --generate   # Generate HTML from BRIEF.json\n/slide-creator --review     # Diagnose and fix content quality issues\n/slide-creator              # Start from scratch (interactive style discovery)\n/kai-html-export            # Export to PPTX or PNG (separate skill)\n```\n\n### Bare Sandbox Fallback\n\n`/slide-creator ...` is a Claude/OpenClaw slash-skill call, not a raw bash or python command.\n\nIf you are in a bare sandbox or external agent runner:\n\n```bash\npython3 main.py --validate-brief --brief BRIEF.json\npython3 main.py --generate --brief BRIEF.json --output presentation.html\npython3 main.py --generate --brief BRIEF.json --output presentation.html --eval\n```\n\nBuilt-in presets still load from `references/` / `references/style-index.md`; `themes/<name>/reference.md` is only for custom themes.\n\n### Planning Depths\n\n- **Auto** — fast draft; skips Phase 3.5 Review\n- **Polish** — deeper path; auto-runs Phase 3.5 Review\n\nSame content switching between Auto/Polish should keep the same preset unless user explicitly requests a style change.\n\n### Typical Workflows\n\n**Interactive creation:**\n1. Run `/slide-creator`, answer four questions (purpose, length, content, images)\n2. See 3 style previews, pick one\n3. Generate full deck, open in browser\n\n**IR-first workflow (complex content):**\n1. Put assets in `resources/` folder\n2. Run `/slide-creator --plan \"My AI startup pitch deck\"`\n3. Inspect `BRIEF.json`; only ask for `PLANNING.md` if a human review view is needed\n4. Run `/slide-creator --generate`\n\n**PPT conversion:**\n1. Put `.pptx` file in current directory\n2. Run `/slide-creator` — skill auto-detects and extracts content\n\n### Review Mode\n\n```\n/slide-creator --review presentation.html\n```\n\n**Behavior:**\n1. Load `references/review-checklist.md`\n2. Execute 16 checkpoints (6 auto-detect + 10 AI-advised)\n3. Show results: ✅ passed / 🔧 auto-fixable / ⚠️ needs confirmation / ❌ needs judgment\n4. User chooses: [Auto-fix all] / [Confirm each] / [Skip]\n5. Output fixed HTML + diagnostic report\n\n**Polish mode:** Phase 3.5 Review runs automatically after generation.\n**Auto mode:** Skips Phase 3.5.\n\n### Timing\n\nExpected end-to-end:\n\n- **Auto:** ~3–6 minutes\n- **Polish:** ~8–15 minutes\n\nTracked segments: `plan`, `generate`, `validate`, `polish`, `total`\n\n---\n\n## Features\n\n### Core\n\n- **IR-first workflow** — `--plan` distills `BRIEF.json`, `--generate` renders from the IR\n- **Two planning depths** — Auto for speed, Polish for narrative and visual locking\n- **Content Review System** — 16 checkpoints: `--review` for on-demand diagnosis; Polish auto-runs review; three rule types (hard/context-aware/advisory)\n- **22 design presets** — each with named layout variations\n- **Content-type routing** — auto-suggests best style for pitch decks, dev tools, data reports\n- **Style discovery** — generate 3 visual previews before committing\n- **Inline SVG diagrams** — flowcharts, timelines, bar charts, comparison grids, org charts — no external libs\n- **Blue Sky starter template** — complete boilerplate so models never mis-implement the visual system\n\n### Interaction\n\n- **Play Mode** — Press `F5` or click ▶ (bottom-right) for fullscreen; slides scale to any screen; controls auto-hide; `Esc` to exit\n- **Presenter Mode** — Press `P` for synced speaker window: notes, timer, slide counter, prev/next nav; height auto-adapts\n- **Notes editing panel** — In edit mode (`E`), notes bar at bottom; click title bar to collapse/expand; edits sync live\n- **Inline editing** — Default-on browser editing; edit text in-browser, `Ctrl+S` to save\n- **Viewport fitting** — Every slide fits 100vh exactly, no scrolling\n\n### Output\n\n- **Custom theme system** — Drop `reference.md` in `themes/your-theme/` to add preset; `starter.html` optional for complex systems\n- **Template export chrome switch** — Set `data-export-progress=\"false\"` on `<body>` to hide progress bar and nav dots\n- **Image pipeline** — Auto-evaluate and process assets (Pillow)\n- **PPT import** — Convert `.pptx` to web presentations\n- **PPTX / PNG export** — via [kai-html-export](https://github.com/kaisersong/kai-html-export)\n- **Bilingual** — Chinese / English support\n\n---\n\n## Design Presets\n\n| Preset | Vibe | Best For |\n|--------|------|----------|\n| **Bold Signal** | Confident, high-impact | Pitch decks, keynotes |\n| **Electric Studio** | Clean, professional | Agency presentations |\n| **Creative Voltage** | Energetic, retro-modern | Creative pitches |\n| **Dark Botanical** | Elegant, sophisticated | Premium brands |\n| **Blue Sky** | Airy, enterprise SaaS | Product launches, tech decks |\n| **Notebook Tabs** | Editorial, organized | Reports, reviews |\n| **Pastel Geometry** | Friendly, approachable | Product overviews |\n| **Split Pastel** | Playful, modern | Creative agencies |\n| **Vintage Editorial** | Witty, personality-driven | Personal brands |\n| **Neon Cyber** | Futuristic, techy | Tech startups |\n| **Terminal Green** | Developer-focused | Dev tools, APIs |\n| **Swiss Modern** | Minimal, precise | Corporate, data |\n| **Paper & Ink** | Literary, thoughtful | Storytelling |\n| **Aurora Mesh** | Vibrant, premium SaaS | Product launches, VC pitch |\n| **Enterprise Dark** | Authoritative, data-driven | B2B, investor decks, strategy |\n| **Glassmorphism** | Light, translucent, modern | Consumer tech, brand launches |\n| **Neo-Brutalism** | Bold, uncompromising | Indie dev, creative manifesto |\n| **Chinese Chan** | Still, contemplative | Design philosophy, brand, culture |\n| **Data Story** | Clear, precise, persuasive | Business review, KPI, analytics |\n| **Modern Newspaper** | Punchy, authoritative, editorial | Business reports, thought leadership |\n| **Neo-Retro Dev Deck** | Opinionated, technical, handmade | Dev tool launches, API docs, hackathons |\n| **Strategy Consulting** | Structured, authoritative, clean | Consulting reports, strategy decks, due diligence |\n\n### Blue Sky\n\nLight sky-blue gradient (`#f0f9ff → #e0f2fe`) with floating glassmorphism cards and animated ambient orbs. Inspired by a real enterprise AI pitch deck (CloudHub V12 MVP). Feels like a high-altitude clear day: open, confident, premium.\n\nSignature elements: grainy noise texture overlay · 3 animated blur orbs repositioning per slide · glassmorphism cards with `backdrop-filter: blur(24px)` · 40px tech grid with radial mask · spring-physics horizontal transitions · cloud hero effect on title slides.\n\n**Why Blue Sky is the starter template:** It demonstrates all 10 signature visual elements pre-built. Models only fill in content — no risk of mis-implementing the design system. This pattern (`reference.md` + `starter.html`) is reusable for any complex theme.\n\n---\n\n## Creating Custom Themes\n\n1. Create `themes/your-theme/` directory\n2. Write `reference.md` describing:\n   - Colors (primary, accent, neutrals)\n   - Typography (fonts, weights, sizes)\n   - Layout patterns (cards, grids, full-bleed)\n   - Component classes (if custom CSS needed)\n3. Optionally add `starter.html` for complex visual systems (animated backgrounds, custom JS)\n\nYour theme appears as \"Custom: your-theme\" in the style picker.\n\n**Example brand themes bundled:** `themes/cloudhub/` and `themes/kingdee/`\n\n---\n\n## Brand Style Migration\n\nMigrate existing `.pptx` to custom brand design — get pixel-perfect archive + editable version.\n\n```bash\n# Step 1 — re-style\n/slide-creator --plan \"migrate company-deck.pptx to our brand style\"\n/slide-creator --generate  # → branded-deck.html\n\n# Step 2 — export both modes\n/kai-html-export branded-deck.html              # pixel-perfect\n/kai-html-export --pptx --mode native branded-deck.html  # editable\n```\n\n---\n\n## Requirements\n\nslide-creator has **no external dependencies**. Python 3 is optional for image evaluation — no packages required.\n\nFor PPTX/PNG export: `clawhub install kai-html-export` or `pip install playwright python-pptx`\n\n---\n\n## Output\n\n- `presentation.html` — single-file, zero dependencies, runs in browser\n- `PRESENTATION_SCRIPT.md` — speaker notes (auto-generated if ≥8 slides)\n\n---\n\n## Compatibility\n\n| Platform | Version | Install path |\n|---------|---------|-------------|\n| Claude Code | any | `~/.claude/skills/slide-creator/` |\n| OpenClaw | ≥ 0.9 | `~/.openclaw/skills/slide-creator/` |\n\n---\n\n## Version History\n\n**v2.27.0** — Captured-run eval architecture release: added OpenAI-style skill eval prompts, normalized trace scoring, fixture style rubrics, live Codex baselines, regression comparison, and optional release-gate integration. README and design docs now document the Supervisor / Generate Worker / Style Judge split, context isolation rules, and token accounting policy so live eval cost remains visible instead of hidden by subagents.\n\n**v2.26.0** — Blue Sky deterministic renderer and custom theme release: Blue Sky now renders through the canonical BRIEF pipeline with strict validation coverage, custom themes resolve correctly in both source and plugin layouts, and private Kingdee / Cloudhub theme assets were cleaned up, compressed, and locked with regression tests.\n\n**v2.25.0** — Strategy Consulting preset: new consulting-style design with 12 canonical layouts (exec summary, before/after, three things, funnel, framework matrix, quote + evidence, driver breakdown, etc.), white-background navy-accent visual language inspired by MBB slide decks. Preset count now 22.\n\n**v2.24.3** — Single-deck eval and production verification release: `--generate` / `render-from-brief` can now emit per-deck eval JSON via `--eval` or `--eval-out`, Data Story chart routing/label logic now fails closed on weak numeric signals instead of drawing fake charts, and production demo fixtures were revalidated and resynced to the current watermark version so core preset verification remains green.\n\n**v2.24.2** — Enterprise Dark / Chinese Chan chrome hardening: validator now rejects hidden-brand regressions for presets that must suppress `#brand-mark`, and watermark checks now fail stale version/preset strings so non-canonical shell output cannot pass `--strict` with leaked skill names or outdated credits.\n\n**v2.24.1** — Direct-route contract and pre-write gate fix: forced direct prompt generation back through `BRIEF.json -> render_from_brief()`, made both CLI render entrypoints run `scripts/validate_html.py --strict` before writing output, and tightened the SKILL/workflow/doc contracts plus regression tests so non-canonical Chinese Chan HTML can no longer slip through a current-version generation path.\n\n**v2.24.0** — Core preset hardening and quality-gate release: added preset support tiers plus manifest-driven eval/release-gate tooling, upgraded low-context BRIEF semantics and preset usage rules, repaired Chinese Chan formal contracts and production/shared runtime drift, modernized family demo runtimes, moved the canonical HTML validator to `scripts/validate_html.py` with a compatibility wrapper, and tightened Swiss Modern/shared shell chrome so nav dots and page-number treatments render correctly across presets.\n\n**v2.23.2** — Sandbox entrypoint and skill-surface patch: added root `main.py` plus `slide-creator` wrapper for bare-sandbox BRIEF validation/rendering, made `--plan` fail with a clear slash-skill boundary instead of a misleading runtime error, restored `SKILL.md`'s user-facing style recommendation surface, and clarified that built-in presets live under `references/` while `themes/<name>/reference.md` is only for custom themes.\n\n**v2.23.1** — Enterprise Dark runtime stability patch: fixed shared js-engine active-slide reveal toggling, hid editing chrome by default, replaced unresolved watermark tokens with real version/preset metadata, stabilized one-gesture-per-page wheel pagination for scroll-snap decks, and corrected Enterprise Dark narrative cover routing, split-title clipping, governance/table rhythm, and subtle grid overlay balance.\n\n**v2.23.0** — Title composition and low-context quality release: added a preset-aware title profile registry plus browser-level title QA, expanded low-context diagnostics/eval buckets for quality uplift checks, hardened strict gates around shared runtime and `body[data-preset]`, and reordered `SKILL.md` so style enforcement, narrative arc, and title quality take priority over degradable playback/edit/watermark features.\n\n**v2.22.0** — Style reference rollout and strict quality gate hardening: all presets now pass style-reference audit, Swiss Modern plus Enterprise Dark / Data Story / Glassmorphism / Chinese Chan gain explicit canonical export contracts and user-content routing, `tests/validate.py --strict` is documented and tested as the `--generate` pre-write gate, and new regression coverage locks CSS variable resolution, layout variety, and priority preset contract checks.\n\n**v2.19.0** — IR-first release: `BRIEF.json` becomes the primary truth source, `PLANNING.md` is optional human view, late-context eval fixtures added under `evals/generated-decks/`, README design philosophy rewritten around prompt → BRIEF → HTML → validate → eval, and stronger regression coverage added for the new contract.\n\n**v2.18.1** — Paper & Ink style fix: restored correct editorial style reference (Cormorant Garamond headlines, Source Serif 4 body, crimson ornamental rules, drop caps); added `.slide-content` wrapper to slide HTML structure for proper vertical centering; Chinese text font fallback now uses system serif (宋体) instead of Noto Sans SC.\n\n**v2.18.0** — JS engine extraction (html-template.md 557→222 lines); style signature injection expanded to require all CSS classes from Typography/Components sections; neon-cyber glow effects clarified; style consistency audit tool (`tests/audit_style_consistency.py`).\n\n**v2.17.0** — Style reference system overhaul; contrast fix for light backgrounds; glassmorphism text theme mapping.\n\n**v2.12.0**\n\n**v2.11.0** — Hard rules embedded in SKILL.md; `--generate` flow restructured with explicit validation.\n\n**v2.9.0** — Content Review System: 16 checkpoints (6 auto-detectable, 10 AI-advised); Phase 3.5 Review in Polish mode; `--review` command for on-demand diagnosis; three rule types (hard/context-aware/advisory).\n\n**v2.8.0** — Simplified planning depths (Auto / Polish); bilingual naming; timing guidance; preset-lock across depths; checked-in demo paths; regression coverage.\n\n**v2.7.1** — Zero-dependency `check-doc-sync.py` contract checker for SKILL.md/README/workflow.md sync; regression test integration.\n\n**v2.7.0** — Enhancement Mode guardrails for editing existing HTML decks; inline editing default-on but optional; bundled brand theme examples (`themes/cloudhub/`, `themes/kingdee/`).\n\n**v2.6.1** — Brand Style Migration workflow documentation.\n\n**v2.6.0** — Design Quality Baseline (`references/design-quality.md`): minimum 65% fill, multi-column balance, 90/8/2 color law, no 3 consecutive bullet slides, content-tone color calibration, pre-output self-check. Fixed aurora-mesh Inter font contradiction (Space Grotesk + DM Sans).\n\n**v2.5.0** — 21 presets with Blue Sky starter template; Show Don't Tell style discovery.\n\n**v2.0.0** — Two-stage workflow (`--plan` / `--generate`); inline editing; presenter mode.\n\n**v1.0.0** — Initial release with 10 presets.\n\nFile v2.27.0:tests/fixtures/skill-evals/README.md\n\n# Captured Runner Trace Fixtures\n\nThe raw Codex JSONL fixtures in this directory were captured from real\n`codex exec --json` runs before the adapter parser was implemented.\n\nObserved event shape:\n\n- Top-level lifecycle events include `thread.started`, `turn.started`, and `turn.completed`.\n- Tool calls appear as `item.started` / `item.completed` events whose nested `item.type` is `command_execution`.\n- Shell commands are stored at `item.command`; completed command events include `item.exit_code`.\n- Token usage appears on `turn.completed` as `usage.input_tokens` and `usage.output_tokens`.\n- File reads and writes are not guaranteed in these minimal traces; the adapter must degrade to warnings or partial metrics when fields are absent.\n\nFile v2.27.0:themes/README.md\n\n# Custom Themes\n\nDrop a folder here to add your own design preset to slide-creator.\n\n## Structure\n\n```\nthemes/\n  your-theme-name/\n    reference.md      ← required: style description Claude reads\n    starter.html      ← optional: pre-built boilerplate (like blue-sky-starter.html)\n```\n\n## reference.md format\n\nFollow the same format as the built-in references (e.g. `references/chinese-chan.md`):\n\n```markdown\n# Your Theme Name — Style Reference\n\nOne-sentence description. Inspired by / aesthetic / mood.\n\n---\n\n## Colors\n\n```css\n:root {\n    --bg:      #...;\n    --text:    #...;\n    --accent:  #...;\n}\n```\n\n## Typography\n...\n\n## Layout\n...\n\n## Best For\nUse cases, audience, occasion.\n```\n\n## starter.html (optional)\n\nIf your theme has complex visual elements (animated backgrounds, special layout systems),\nprovide a starter HTML file. Claude will read it and use it as the base instead of\nbuilding from scratch. See `references/blue-sky-starter.html` for an example.\n\n## Example\n\n`_example-coral-dawn/` — a complete sample theme you can copy and adapt.\nDirectories starting with `_` are ignored by slide-creator and will not appear in the preset picker.\n\nAlso see:\n- `references/chinese-chan.md` — a built-in reference in the same format\n- `references/blue-sky-starter.html` — a full starter template\n\n## Sharing themes\n\nTo share a theme with others, publish the folder as a git repo. Users clone it into their\n`themes/` directory:\n\n```bash\ngit clone https://github.com/yourname/slide-creator-theme-yourtheme \\\n  ~/.claude/skills/slide-creator/themes/yourtheme\n```\n\nFile v2.27.0:_meta.json\n\n{\n  \"ownerId\": \"kn7bjv9d2ccsjqk1m4edthgtgx82fem8\",\n  \"slug\": \"kai-slide-creator\",\n  \"version\": \"2.27.0\",\n  \"publishedAt\": 1779012392131\n}\n\nFile v2.27.0:references/aurora-mesh.md\n\n# Aurora Mesh — Style Reference\n\nInspired by Linear.app, Vercel, and Stripe marketing pages. Animated multi-layer radial-gradient background creates a slowly drifting aurora effect on deep space black.\n\n---\n\n## Colors\n\n```css\n:root {\n    --bg-primary:   #0a0a1a;\n    --accent:       #00f5c4;                   /* cyan-green emphasis */\n    --text-primary: #ffffff;\n    --text-body:    rgba(255,255,255,0.70);\n    --text-muted:   rgba(255,255,255,0.45);\n    --card-bg:      rgba(255,255,255,0.05);\n    --card-border:  rgba(255,255,255,0.10);\n    --divider:      rgba(255,255,255,0.15);\n}\n```\n\n---\n\n## Background\n\n```css\nbody {\n    background-color: #0a0a1a;\n    background-image:\n        radial-gradient(ellipse at 20% 50%, rgba(120,40,200,0.40) 0%, transparent 60%),\n        radial-gradient(ellipse at 80% 20%, rgba(0,180,255,0.30) 0%, transparent 50%),\n        radial-gradient(ellipse at 60% 80%, rgba(0,255,180,0.20) 0%, transparent 50%);\n    animation: auroraDrift 20s ease-in-out infinite alternate;\n}\n\n@keyframes auroraDrift {\n    0%   { background-position: 0%   50%; }\n    33%  { background-position: 50%  20%; }\n    66%  { background-position: 80%  80%; }\n    100% { background-position: 100% 50%; }\n}\n```\n\n---\n\n## Typography\n\n```css\n/* Title — use a distinctive display font, NOT Inter (banned as display typeface) */\n@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&display=swap');\nfont-family: \"Space Grotesk\", \"PingFang SC\", \"Noto Sans CJK SC\", \"Microsoft YaHei\", sans-serif;\nfont-weight: 700;\nletter-spacing: -0.03em;\ncolor: #ffffff;\n\n/* Body */\n@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500&display=swap');\nfont-family: \"DM Sans\", \"PingFang SC\", system-ui, sans-serif;\nfont-weight: 400;\ncolor: rgba(255,255,255,0.70);\nline-height: 1.7;\n```\n\n---\n\n## Card Component\n\n```css\n/* Content card — subtle glass, doesn't compete with background aurora */\n.aurora-card {\n    background: rgba(255,255,255,0.05);\n    backdrop-filter: blur(12px);\n    -webkit-backdrop-filter: blur(12px);\n    border: 1px solid rgba(255,255,255,0.10);\n    border-radius: 16px;\n    padding: clamp(1.2rem, 2.5vw, 2rem);\n}\n\n/* Accent line / divider */\n.aurora-divider {\n    height: 1px;\n    background: rgba(255,255,255,0.15);\n    margin: clamp(1rem, 2vw, 1.5rem) 0;\n}\n\n/* Accent text */\n.aurora-accent {\n    color: #00f5c4;\n    font-weight: 600;\n}\n\n/* Pill badge */\n.aurora-badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 4px 14px;\n    background: rgba(0,245,196,0.12);\n    border: 1px solid rgba(0,245,196,0.30);\n    border-radius: 9999px;\n    font-size: clamp(0.65rem, 1vw, 0.75rem);\n    font-weight: 600;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: #00f5c4;\n}\n```\n\n---\n\n## Layout\n\nCentered single-column layout. No side panels. Content sits in centered cards over the full-bleed animated background.\n\n```css\n.aurora-slide {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: clamp(2rem, 5vw, 5rem);\n    text-align: center;        /* title slides */\n}\n\n/* Content slides: left-aligned inside centered container */\n.aurora-content {\n    width: 100%;\n    max-width: min(90vw, 800px);\n    text-align: left;\n}\n\n/* Headline sizing */\n.aurora-title {\n    font-size: clamp(2.5rem, 7vw, 6rem);\n    font-weight: 700;\n    letter-spacing: -0.02em;\n    line-height: 1.05;\n    color: #ffffff;\n}\n\n.aurora-subtitle {\n    font-size: clamp(1rem, 2vw, 1.4rem);\n    color: rgba(255,255,255,0.70);\n    margin-top: 1rem;\n    line-height: 1.6;\n}\n```\n\n---\n\n## Named Layout Variations\n\n### 1. Aurora Hero (全屏宣告)\n\nFull-bleed animated aurora background. Centered white headline in Space Grotesk, `clamp(2.5rem, 7vw, 6rem)`, weight 700, negative letter-spacing. Subtitle in `rgba(255,255,255,0.70)`. Optional accent line `.aurora-divider` below. No card on hero — text sits directly on gradient.\n\n```html\n<section class=\"slide aurora-slide\">\n    <h1 class=\"aurora-title\">Big Statement</h1>\n    <p class=\"aurora-subtitle\">Supporting line</p>\n</section>\n```\n\n### 2. Aurora Card (功能亮点)\n\nCentered frosted glass card on animated background. Card uses `backdrop-filter: blur(12px)`, `rgba(255,255,255,0.05)` background, `1px solid rgba(255,255,255,0.10)` border, `16px` border-radius. Content inside: title, body, optional badge.\n\n```html\n<section class=\"slide aurora-slide\">\n    <div class=\"aurora-content\">\n        <div class=\"aurora-card\">\n            <h2>Feature Name</h2>\n            <p>1-2 line description</p>\n            <span class=\"aurora-badge\">Badge</span>\n        </div>\n    </div>\n</section>\n```\n\n### 3. Aurora Stat (大数字强调)\n\nLarge gradient text number centered on slide. Use `-webkit-background-clip: text` with aurora gradient for hero numbers. Label below in muted text. Optional vertical divider.\n\n```html\n<section class=\"slide aurora-slide\">\n    <div class=\"aurora-stat\" style=\"-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-image:linear-gradient(135deg,#00f5c4,#00b4ff);font-size:clamp(3rem,10vw,8rem);font-weight:700;\">97%</div>\n    <p class=\"aurora-subtitle\">Metric label</p>\n</section>\n```\n\n### 4. Aurora Split (分屏对比)\n\nTwo frosted glass cards side by side on animated background. `display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem;`. Each card has its own content. Left panel = View A, right panel = View B.\n\n```html\n<section class=\"slide aurora-slide\">\n    <div class=\"aurora-content\" style=\"display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;\">\n        <div class=\"aurora-card\"><h3>View A</h3><p>Content</p></div>\n        <div class=\"aurora-card\"><h3>View B</h3><p>Content</p></div>\n    </div>\n</section>\n```\n\n### 5. Aurora Trio (多选项对比)\n\nThree glass cards in a row. `grid-template-columns: repeat(3, 1fr)`. Active card has stronger border: `border-color: rgba(0,245,196,0.40)` and slightly more opaque background: `rgba(255,255,255,0.08)`. Each card: number + name + descriptor.\n\n```html\n<section class=\"slide aurora-slide\">\n    <div class=\"aurora-content\" style=\"display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;\">\n        <div class=\"aurora-card active\">01 Active</div>\n        <div class=\"aurora-card\">02 Option</div>\n        <div class=\"aurora-card\">03 Option</div>\n    </div>\n</section>\n```\n\n### 6. Aurora Timeline (流程步骤)\n\nHorizontal step sequence with frosted glass cards as step markers. Active step: full accent border. Completed: outlined. Future: lower opacity. Track line: `2px solid rgba(0,245,196,0.3)`. Arrows between steps in accent color.\n\n---\n\n## Signature Elements\n\n### CSS Overlays\n- `body`: Mesh gradient 背景 — 3-4 个 `radial-gradient` 椭圆叠加，色标包括 `rgba(120,40,200,0.40)` / `rgba(0,180,255,0.30)` / `rgba(0,255,180,0.20)`，`background-size: 200% 200%`\n\n### Animations\n- `@keyframes auroraDrift`: 极光漂移 — `0% { background-position: 0% 50%; } 50% { background-position: 100% 20%; } 100% { background-position: 50% 100%; }`，`20s ease-in-out infinite alternate`，应用于 `body`\n\n### Required CSS Classes\n- `.aurora-card`: 毛玻璃卡片 — `background: rgba(255,255,255,0.05); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid var(--card-border); border-radius: 16px; padding: clamp(20px, 3vw, 36px)`\n- `.aurora-slide`: 极光幻灯片容器 — `display: flex; flex-direction: column; align-items: center; justify-content: center; padding: clamp(2rem, 5vw, 5rem)`\n- `.aurora-content`: 内容容器 — `width: 100%; max-width: min(90vw, 800px)`\n- `.aurora-title`: 标题 — `font-size: clamp(2.5rem, 7vw, 6rem); font-weight: 700; letter-spacing: -0.03em; color: #ffffff`\n- `.aurora-subtitle`: 副标题 — `font-size: clamp(1rem, 2vw, 1.4rem); color: rgba(255,255,255,0.70)`\n- `.aurora-divider`: 分隔线 — `height: 1px; background: rgba(0,245,196,0.3); border: none; margin: 16px 0`\n- `.aurora-accent` / `.aurora-emphasis`: 强调文字 — `color: #00f5c4; font-weight: 500/600`\n- `.aurora-badge`: 徽章 — `display: inline-flex; padding: 4px 14px; background: rgba(0,245,196,0.12); border: 1px solid rgba(0,245,196,0.30); border-radius: 9999px; color: #00f5c4; font-size: clamp(0.65rem, 1vw, 0.75rem); text-transform: uppercase; letter-spacing: 0.12em`\n- `.pill`: 同 `.aurora-badge` 的别名\n- `.aurora-stat`: 渐变数字 — 使用 `-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-image: linear-gradient(135deg, #00f5c4, #00b4ff)`\n- `.reveal`: 淡入动画 — `opacity: 0; transform: translateY(20px); transition: opacity 0.7s cubic-bezier(0.16,1,0.3,1), transform 0.7s cubic-bezier(0.16,1,0.3,1)`\n\n### Allowed Components\n- Audit coverage: .app\n\n### Background Rule\n`.slide` 不设 `background`，完全透出 `body` 上的 mesh gradient。`body` 使用 `background-color: #0a0a1a` + 多层 `radial-gradient` + `auroraDrift` 动画。所有幻灯片共享同一动态背景。\n\n### Style-Specific Rules\n- 卡片必须使用 `backdrop-filter: blur(12px)` 实现毛玻璃效果\n- 不使用 Google Fonts 以外的字体（标题用 Space Grotesk，正文用 DM Sans）\n- 强调色 `#00f5c4`（青绿）用于徽章、分隔线、数字\n- 所有变体均为深色背景，不使用白色背景\n- 卡片 `border-radius: 16px`，边框 `1px solid rgba(255,255,255,0.10)`\n- 英雄页（hero）文字直接放在渐变上，不用卡片包裹\n- 激活卡片使用更强边框 `border-color: rgba(0,245,196,0.40)` + 更高不透明度背景 `rgba(255,255,255,0.08)`\n\n### Signature Checklist\n- [ ] body mesh gradient（3-4 个 radial-gradient，可见色彩混合）\n- [ ] @keyframes auroraDrift（20s 循环，可见运动）\n- [ ] .aurora-card 毛玻璃卡片（backdrop-filter: blur(12px)）\n- [ ] .aurora-slide 居中容器\n- [ ] .aurora-title 白色大标题（letter-spacing: -0.03em）\n- [ ] .aurora-badge 青绿徽章（rgba(0,245,196,0.12) 背景）\n- [ ] .aurora-divider 青绿分隔线\n- [ ] .aurora-stat 渐变文字数字（background-clip: text）\n- [ ] 青绿色 #00f5c4 至少一处使用\n- [ ] 无白色背景变体\n- [ ] reveal 动画使用 cubic-bezier(0.16,1,0.3,1)\n\n---\n\n## Components\n\n```css\n/* Light glassmorphism card */\n.aurora-card {\n    background: rgba(255,255,255,0.05);\n    backdrop-filter: blur(12px);\n    -webkit-backdrop-filter: blur(12px);\n    border: 1px solid rgba(255,255,255,0.1);\n    border-radius: 12px;\n    padding: clamp(16px, 2.5vw, 24px);\n}\n\n/* Accent divider line */\n.aurora-divider {\n    height: 1px;\n    background: rgba(0,245,196,0.3);\n    border: none;\n    margin: 16px 0;\n}\n\n/* Emphasis text */\n.aurora-emphasis {\n    color: #00f5c4;\n    font-weight: 500;\n}\n```\n\n---\n\n## Animation\n\n```css\n/* Entrance: elements fade+rise with stagger */\n.reveal {\n    opacity: 0;\n    transform: translateY(20px);\n    transition: opacity 0.7s cubic-bezier(0.16,1,0.3,1),\n                transform 0.7s cubic-bezier(0.16,1,0.3,1);\n}\n.slide.visible .reveal { opacity: 1; transform: translateY(0); }\n.reveal:nth-child(1) { transition-delay: 0.05s; }\n.reveal:nth-child(2) { transition-delay: 0.15s; }\n.reveal:nth-child(3) { transition-delay: 0.25s; }\n.reveal:nth-child(4) { transition-delay: 0.35s; }\n```\n\n---\n\n## Style Preview Checklist\n\nWhen generating a preview for style selection, the preview MUST show:\n- [ ] Animated aurora gradient background (visible motion within 3 seconds)\n- [ ] Cyan-green `#00f5c4` accent on at least one element\n- [ ] Subtle card with `backdrop-filter: blur(12px)`\n- [ ] White headline with `letter-spacing: -0.02em`\n\n---\n\n## Best For\n\nProduct launches · VC pitch decks · SaaS marketing · AI / tech trend reports · Anything that should feel \"Linear / Vercel-level\" polished\n\nFile v2.27.0:references/base-css.md\n\n# Base CSS Reference\n\nRead this file during Phase 3 generation for all non-Blue-Sky styles.\nContains: required viewport CSS, content density limits, and CSS gotchas.\n\n---\n\n## ⚠ Viewport Fitting (Non-Negotiable)\n\nEvery slide must equal exactly one viewport height. No scrolling within slides, ever.\n\n### Required Base CSS (Include in ALL Presentations)\n\n```css\n/* ===========================================\n   VIEWPORT FITTING: MANDATORY\n   =========================================== */\n\nhtml {\n    height: 100%;\n    overflow-x: hidden;\n    scroll-snap-type: y mandatory;\n    /* scroll-behavior intentionally omitted — JS scrollIntoView({behavior:'smooth'}) handles animation;\n       CSS scroll-behavior + JS smooth scroll = double animation = jitter */\n}\n\n/* Each slide = exact viewport height */\n.slide {\n    width: 100vw;\n    height: 100vh;\n    height: 100dvh; /* Dynamic viewport for mobile */\n    overflow: hidden; /* CRITICAL: No overflow ever */\n    scroll-snap-align: start;\n    display: flex;\n    flex-direction: column;\n    position: relative;\n}\n\n.slide-content {\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    max-height: 100%;\n    overflow: hidden;\n    padding: var(--slide-padding);\n}\n\n/* ALL sizes use clamp() - scales with viewport */\n:root {\n    --title-size: clamp(1.5rem, 5vw, 4rem);\n    --h2-size: clamp(1.25rem, 3.5vw, 2.5rem);\n    --body-size: clamp(0.75rem, 1.5vw, 1.125rem);\n    --small-size: clamp(0.65rem, 1vw, 0.875rem);\n    --slide-padding: clamp(1rem, 4vw, 4rem);\n    --content-gap: clamp(0.5rem, 2vw, 2rem);\n}\n\n.card, .container {\n    max-width: min(90vw, 1000px);\n    max-height: min(80vh, 700px);\n}\n\nimg {\n    max-width: 100%;\n    max-height: min(50vh, 400px);\n    object-fit: contain;\n}\n\n.grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr));\n    gap: clamp(0.5rem, 1.5vw, 1rem);\n}\n\n/* Responsive breakpoints - height-based */\n@media (max-height: 700px) {\n    :root {\n        --slide-padding: clamp(0.75rem, 3vw, 2rem);\n        --content-gap: clamp(0.4rem, 1.5vw, 1rem);\n        --title-size: clamp(1.25rem, 4.5vw, 2.5rem);\n    }\n}\n\n@media (max-height: 600px) {\n    :root {\n        --slide-padding: clamp(0.5rem, 2.5vw, 1.5rem);\n        --title-size: clamp(1.1rem, 4vw, 2rem);\n        --body-size: clamp(0.7rem, 1.2vw, 0.95rem);\n    }\n    .nav-dots, .keyboard-hint, .decorative { display: none; }\n}\n\n@media (max-height: 500px) {\n    :root {\n        --slide-padding: clamp(0.4rem, 2vw, 1rem);\n        --title-size: clamp(1rem, 3.5vw, 1.5rem);\n        --body-size: clamp(0.65rem, 1vw, 0.85rem);\n    }\n}\n\n@media (max-width: 600px) {\n    .grid { grid-template-columns: 1fr; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n    *, *::before, *::after {\n        animation-duration: 0.01ms !important;\n        transition-duration: 0.2s !important;\n    }\n}\n```\n\n### Content Density Limits\n\n| Slide Type | Maximum |\n|------------|---------|\n| Title slide | 1 heading + 1 subtitle |\n| Content slide | 1 heading + 4-6 bullets |\n| Feature grid | 1 heading + 6 cards max (2×3 or 3×2) |\n| Code slide | 1 heading + 8-10 lines |\n| Quote slide | 1 quote (3 lines max) + attribution |\n| Image slide | 1 heading + 1 image (max 60vh height) |\n\nWhen in doubt → split the slide.\n\n---\n\n## DO NOT USE (Generic AI Patterns)\n\n**Fonts:** Inter, Roboto, Arial, system fonts as display typeface\n\n**Colors:** `#6366f1` (generic indigo), purple gradients on white\n\n**Layouts:** Everything centered, generic hero sections, identical card grids\n\n**Decorations:** Realistic illustrations, gratuitous glassmorphism, drop shadows without purpose\n\n---\n\n## CSS Gotchas\n\n### Negating CSS Functions\n\n**WRONG — silently ignored by browsers:**\n```css\nright: -clamp(28px, 3.5vw, 44px);   /* ❌ Invalid! */\nmargin-left: -min(10vw, 100px);      /* ❌ Invalid! */\n```\n\n**CORRECT — wrap in `calc()`:**\n```css\nright: calc(-1 * clamp(28px, 3.5vw, 44px));  /* ✅ */\nmargin-left: calc(-1 * min(10vw, 100px));     /* ✅ */\n```\n\nCSS does not allow a leading `-` before `clamp()`, `min()`, `max()`. The browser silently discards the declaration with no console error — the element simply appears in the wrong position.\n\n### Content Overflow\n\n1. Check slide has `overflow: hidden`\n2. Reduce content — split into multiple slides\n3. Ensure all fonts use `clamp()` not fixed `px`/`rem`\n4. Check images have `max-height: min(50vh, 400px)`\n\n### Viewport Checklist\n\n- [ ] Every `.slide` has `height: 100vh; height: 100dvh; overflow: hidden;`\n- [ ] All font sizes use `clamp(min, preferred, max)`\n- [ ] No negated CSS functions (use `calc(-1 * clamp(...))`)\n- [ ] Breakpoints at 700px, 600px, 500px heights\n- [ ] Images have `max-height` constraints\n- [ ] Content respects density limits\n\n---\n\n## Universal UI Elements (Mandatory for ALL Styles)\n\nThese elements MUST appear in every generated HTML, regardless of whether the style file explicitly defines them. Style files may override colors/positions but cannot omit them.\n\n### Brand Mark\n\nFixed identifier in top-left corner. Always visible (z-index: 1000).\n\n```css\n#brand-mark {\n    position: fixed;\n    top: 20px;\n    left: 28px;\n    font-weight: 800;\n    font-size: 15px;\n    z-index: 1000;\n    /* color and font-family from style file's accent color and display font */\n}\n```\n\n```html\n<span id=\"brand-mark\">slide-creator</span>\n```\n\n### Slide Number Label\n\nPage indicator, bottom-right of each slide. Two variants for light/dark backgrounds.\n\n```css\n.slide-num-label {\n    position: absolute;\n    bottom: 28px;\n    right: 36px;\n    font-size: 11px;\n    font-weight: 500;\n    color: rgba(0,0,0,0.18);\n}\n.slide-num-label.light { color: rgba(255,255,255,0.2); }\n```\n\n### Navigation Dots\n\nRight-side dot navigation. Active dot scaled up.\n\n```css\n.nav-dots {\n    position: fixed; right: 1.5rem; top: 50%; transform: translateY(-50%);\n    display: flex; flex-direction: column; gap: 8px; z-index: 100;\n}\n.nav-dots button {\n    width: 8px; height: 8px; border-radius: 50%; border: none; cursor: pointer;\n    transition: all 0.3s;\n}\n```\n\n### Progress Bar\n\nTop-edge progress indicator. Color from style accent.\n\n```css\n.progress-bar {\n    position: fixed; top: 0; left: 0; height: 3px;\n    background: var(--accent); width: 0%; z-index: 100; transition: width 0.3s ease;\n}\n```\n\n### Per-Slide CSS Pattern\n\nEach slide MUST have `id=\"slide-N\"` (1-indexed). Layout direction, panel backgrounds, and slide-specific overrides go in `<style>` via `#slide-N` selectors — never inline.\n\n```css\n/* Per-slide layout */\n#slide-1 { flex-direction: row; }\n#slide-1 .left-panel { background: #fff; }\n#slide-1 .slide-num-label { color: rgba(255,255,255,0.12); }\n\n#slide-2 { flex-direction: column; }\n#slide-2 .top-panel { background: #fff; }\n```\n\n```html\n<section class=\"slide\" id=\"slide-1\" data-notes=\"...\">\n    <div class=\"left-panel\">...</div>\n    <div class=\"right-panel\">...</div>\n</section>\n```\n\nFile v2.27.0:references/bold-signal.md\n\n# Bold Signal — Style Reference\n\nConfident, bold, modern, high-impact. Dark canvas with colored card focal points.\n\n---\n\n## Colors\n\n```css\n:root {\n    --bg-primary: #1a1a1a;\n    --bg-gradient: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 50%, #1a1a1a 100%);\n    --card-bg: #FF5722;\n    --text-primary: #ffffff;\n    --text-on-card: #ffffff;\n}\n```\n\n---\n\n## Background\n\n```css\nbody {\n    background: var(--bg-gradient);\n    font-family: \"Space Grotesk\", -apple-system, sans-serif;\n}\n\n/* Ghost section number as texture */\n.bold-ghost-number {\n    position: absolute;\n    font-size: clamp(6rem, 12vw, 10rem);\n    font-family: \"Archivo Black\", sans-serif;\n    color: var(--card-bg);\n    opacity: 0.08;\n    pointer-events: none;\n    user-select: none;\n}\n```\n\n---\n\n## Typography\n\n```css\n/* Display */\n@import url('https://fonts.googleapis.com/css2?family=Archivo+Black&display=swap');\n@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500&display=swap');\n\n.bold-title {\n    font-family: \"Archivo Black\", sans-serif;\n    font-size: clamp(32px, 6vw, 72px);\n    font-weight: 900;\n    color: var(--text-primary);\n    line-height: 1.0;\n    letter-spacing: -0.02em;\n}\n\n.bold-body {\n    font-family: \"Space Grotesk\", sans-serif;\n    font-size: clamp(14px, 1.5vw, 18px);\n    font-weight: 400;\n    color: rgba(255,255,255,0.6);\n    line-height: 1.6;\n}\n\n.bold-label {\n    font-size: clamp(10px, 1.1vw, 12px);\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.12em;\n    color: rgba(255,255,255,0.4);\n}\n\n/* Bullet marker */\n.bold-bullet { color: var(--card-bg); }\n```\n\n---\n\n## Components\n\n```css\n/* Hero card — colored focal point */\n.bold-hero-card {\n    background: var(--card-bg);\n    border-radius: 8px;\n    padding: clamp(24px, 4vw, 48px);\n    color: var(--text-on-card);\n}\n\n/* Section number badge */\n.bold-section-num {\n    font-family: \"Archivo Black\", sans-serif;\n    font-size: clamp(14px, 1.8vw, 20px);\n    color: var(--card-bg);\n    opacity: 0.9;\n}\n\n/* Bullet point with card-colored marker */\n.bold-bullet::before {\n    content: '▸';\n    color: var(--card-bg);\n    margin-right: 0.5em;\n}\n\n/* Timeline step */\n.bold-step {\n    border: 2px solid var(--card-bg);\n    border-radius: 4px;\n    padding: 8px 16px;\n    text-align: center;\n    font-size: clamp(12px, 1.3vw, 16px);\n}\n.bold-step.active {\n    background: var(--card-bg);\n    color: var(--text-on-card);\n}\n```\n\n---\n\n## Named Layout Variations\n\n### 1. Hero Card\n\nLarge colored card (`--card-bg`) occupies 60% of width, centered vertically, anchored left. Card: section number `01` small top-left, headline 2–3 lines. Dark background outside card. Ghost section number in 10rem at 8% opacity as texture. Nav breadcrumbs top-right.\n\n### 2. Manifesto Statement\n\n`01` in 8rem `Archivo Black` top-left, card color. Below: 2-line statement in 3rem. Right half: supporting 3-line body paragraph in muted white `rgba(255,255,255,0.6)`. Bottom-left: next section teaser in 0.75rem mono.\n\n### 3. Feature Trio\n\nThree full-width horizontal rows, shorter height than a normal card. Active/highlighted row: full `--card-bg` color. Other rows: 20% opacity, outlined. Each row: number left, feature name center-left in 1.3rem, 1-line descriptor right.\n\n### 4. Stat + Story\n\nLeft 40%: single large number `5rem` in `--card-bg` color, label below in 0.75rem uppercase. `1px` vertical rule (card color). Right 55%: 3-line supporting paragraph + 2–3 bullet points with card-colored ▸ markers.\n\n### 5. Timeline Track\n\nHorizontal numbered steps `01 → 02 → 03 → 04`. Active step: full colored card above the track line. Completed steps: full opacity outlined. Future steps: 30% opacity outlined. Track line: `2px --card-bg`.\n\n### 6. Quote Block\n\nFull-width colored card (`--card-bg` background). Large `\"` in near-black at top-left, barely visible (8% opacity). Quote in `Archivo Black` 2rem, dark text. Attribution bottom-right: `—Name, Role` in small body.\n\n### 7. Split Evidence\n\nLeft 42%: section number in 3rem + headline in 2rem + 1-line sub. `1px` vertical rule (card color). Right 53%: 4–5 bullet list, each bullet: card-colored ▸ + bold lead word + 1-line description.\n\n---\n\n## Signature Elements\n\n### CSS Overlays\n- `.slide::after`: 半透明网格叠加 — `background-image: linear-gradient(rgba(255,87,34,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,87,34,0.04) 1px, transparent 1px); background-size: 60px 60px; pointer-events: none; z-index: 0`\n- `#slide-8::after`: CTA 页禁用网格 — `display: none;`（全橙色背景页不需要网格）\n\n### Animations\n- 无 `@keyframes`，全部使用 CSS transitions\n- `.reveal`: 入场动画 — `opacity: 0; transform: translateY(28px); transition: opacity 0.5s ease-out, transform 0.5s ease-out;`；`.slide.visible .reveal` 触发恢复\n- Stagger delays: `.slide.visible .reveal:nth-child(1-4)` — `0.05s, 0.15s, 0.25s, 0.35s`\n\n### Required CSS Classes\n- `.slide-num`: 幽灵章节号 — `position: absolute; font-family: 'Archivo Black'; font-size: 120px; color: #FF5722; opacity: 0.12; z-index: 1; pointer-events: none`\n- `.breadcrumb`: 顶部导航面包屑 — `position: absolute; top: 36px; right: 56px; font-size: 12px; font-weight: 600; letter-spacing: 0.15em; color: rgba(255,255,255,0.3); text-transform: uppercase`\n- `.corner-accent`: 左上角强调条 — `position: absolute; top: 0; left: 0; width: 100px; height: 3px; background: #FF5722`\n- `.big-num-bg`: 背景装饰大字 — `position: absolute; font-family: 'Archivo Black'; font-size: 38vw; color: rgba(255,87,34,0.04); pointer-events: none`\n- `.badge`: 实心底色标签 — `background: #FF5722; color: #fff; font-family: 'Archivo Black'; padding: 9px 20px; font-size: 13px`\n- `.badge.outline`: 描边标签 — `background: transparent; border: 1.5px solid rgba(255,87,34,0.4); color: rgba(255,255,255,0.55)`\n- `.hero-card`: 主强调卡片 — `background: #FF5722; padding: 52px 56px; color: #fff; position: relative; z-index: 2`\n- `.deco-text`: CTA 页装饰文字 — `position: absolute; right: -40px; bottom: -60px; font-family: 'Archivo Black'; font-size: 36vw; color: rgba(255,255,255,0.06); pointer-events: none`\n- `.dot` / `.dot.active`: 导航圆点 — 默认 `rgba(255,87,34,0.3)` + `1px solid rgba(255,87,34,0.5)`；激活 `background: #FF5722; transform: scale(1.4)`\n\n### Allowed Components\n- Audit coverage: .bold-body .bold-bullet .bold-ghost-number .bold-hero-card .bold-label .bold-section-num .bold-step .bold-title\n\n### Background Rule\n`.slide` 必须设置 `background: #1a1a1a`（纯色，非渐变）。body 设置 `background: #1a1a1a`。网格叠加通过 `.slide::after` 伪元素实现。CTA 页（`#slide-8`）使用 `background: #FF5722` 并禁用 `::after`。\n\n### Style-Specific Rules\n- 所有章节号使用 Archivo Black 字体，大尺寸半透明作为纹理\n- 导航面包屑固定于右上角，使用 rgba 透明度区分活跃状态\n- 彩色卡片 `#FF5722` 作为唯一强调色，不引入其他颜色\n- 装饰文字（`.big-num-bg`, `.deco-text`）使用超大字号 + 极低透明度\n\n### Signature Checklist\n- [ ] `.slide::after` 网格叠加（rgba(255,87,34,0.04)，60px 间距）\n- [ ] `.slide-num` 幽灵章节号（Archivo Black, 120px, opacity 0.12）\n- [ ] `.breadcrumb` 顶部导航面包屑\n- [ ] `.hero-card` 彩色主卡片（#FF5722）\n- [ ] `.badge` + `.badge.outline` 标签系统\n- [ ] `.corner-accent` 左上角强调条\n- [ ] `.big-num-bg` / `.deco-text` 背景装饰文字\n- [ ] `.dot` 导航圆点（橙色 + 激活缩放）\n- [ ] `.reveal` 入场动画（translateY 28px，stagger 0.05s-0.35s）\n- [ ] CTA 页 `background: #FF5722` 且 `::after { display: none }`\n\n---\n\n## Animation\n\n```css\n.reveal {\n    opacity: 0;\n    transform: translateY(24px);\n    transition: opacity 0.6s cubic-bezier(0.16,1,0.3,1),\n                transform 0.6s cubic-bezier(0.16,1,0.3,1);\n}\n.reveal.visible { opacity: 1; transform: translateY(0); }\n.reveal:nth-child(1) { transition-delay: 0.08s; }\n.reveal:nth-child(2) { transition-delay: 0.18s; }\n.reveal:nth-child(3) { transition-delay: 0.28s; }\n```\n\n---\n\n## Style Preview Checklist\n\n- [ ] Dark gradient background `#1a1a1a → #2d2d2d`\n- [ ] Colored card (`--card-bg`) as focal point\n- [ ] Large section number (01, 02, etc.) visible\n- [ ] Ghost section number at 8% opacity as texture\n- [ ] At least one named layout pattern used\n- [ ] No pure black background — using `#1a1a1a`\n\n---\n\n## Best For\n\nPitch decks · Keynotes · Product launches · High-impact presentations · Brand statements · Investor pitches\n\nArchive v2.24.3: 227 files, 1040441 bytes\n\nFiles: _config.yml (307b), check-doc-sync.py (5618b), demos/ai-era-meaning-of-work-chinese-chan-zh.html (42347b), demos/ai-native-org-transformation-guide-zh.html (68232b), demos/ai-native-work-hub-blue-sky-zh.html (58268b), demos/ai-native-work-hub-data-story-zh.html (53323b), demos/ai-native-work-hub-enterprise-dark-zh.html (64027b), demos/ai-native-work-hub-swiss-modern-zh.html (53482b), demos/aurora-mesh-en.html (40681b), demos/aurora-mesh-zh.html (43375b), demos/blue-sky-en.html (37435b), demos/blue-sky-zh.html (62128b), demos/bold-signal-en.html (38005b), demos/bold-signal-zh.html (56155b), demos/chinese-chan-en.html (32254b), demos/chinese-chan-zh.html (32888b), demos/creative-voltage-en.html (35884b), demos/creative-voltage-zh.html (44971b), demos/dark-botanical-en.html (42880b), demos/dark-botanical-zh.html (41978b), demos/data-story-en.html (42780b), demos/data-story-zh.html (48716b), demos/electric-studio-en.html (42774b), demos/electric-studio-zh.html (43918b), demos/enterprise-dark-en.html (43173b), demos/enterprise-dark-zh.html (49285b), demos/glassmorphism-en.html (43152b), demos/glassmorphism-zh.html (54167b), demos/life-meaning-chinese-chan-regenerated-zh.html (43477b), demos/mode-paths/auto-BRIEF.json (3502b), demos/mode-paths/auto-PLANNING.md (2871b), demos/mode-paths/intent-broker-auto-BRIEF.json (3764b), demos/mode-paths/intent-broker-auto-PLANNING.md (4108b), demos/mode-paths/intent-broker-auto.html (40523b), demos/mode-paths/intent-broker-polish-BRIEF.json (5011b), demos/mode-paths/intent-broker-polish-PLANNING.md (6265b), demos/mode-paths/intent-broker-polish.html (42301b), demos/mode-paths/polish-BRIEF.json (4945b), demos/mode-paths/polish-PLANNING.md (5850b), demos/modern-newspaper-en.html (42561b), demos/modern-newspaper-zh.html (52210b), demos/neo-brutalism-en.html (38857b), demos/neo-brutalism-zh.html (49076b), demos/neo-retro-dev-en.html (41923b), demos/neo-retro-dev-zh.html (56220b), demos/neon-cyber-en.html (42281b), demos/neon-cyber-zh.html (58820b), demos/notebook-tabs-en.html (42041b), demos/notebook-tabs-zh.html (70230b), demos/org-phase-change-ai-native-org-swiss-modern-zh.html (55805b), demos/paper-ink-en.html (47866b), demos/paper-ink-zh.html (54438b), demos/pastel-geometry-en.html (41921b), demos/pastel-geometry-zh.html (56646b), demos/report-salesforce-ai-evolution-data-story-zh.html (52767b), demos/slide-creator-intro.html (57872b), demos/split-pastel-en.html (41849b), demos/split-pastel-zh.html (47936b), demos/swiss-modern-en.html (41800b), demos/swiss-modern-zh.html (63817b), demos/terminal-green-en.html (33780b), demos/terminal-green-zh.html (43031b), demos/vintage-editorial-en.html (42429b), demos/vintage-editorial-zh.html (43569b), evals/failure-map.md (1257b), evals/late-context/cases/lc-001-basic-late-trigger/context.json (548b), evals/late-context/cases/lc-001-basic-late-trigger/expectations.json (334b), evals/late-context/cases/lc-001-basic-late-trigger/expected-brief.json (270b), evals/late-context/cases/lc-002-style-switch-near-end/context.json (465b), evals/late-context/cases/lc-002-style-switch-near-end/expectations.json (254b), evals/late-context/cases/lc-002-style-switch-near-end/expected-brief.json (141b), evals/late-context/cases/lc-003-report-request-negative/context.json (340b), evals/late-context/cases/lc-003-report-request-negative/expectations.json (110b), evals/late-context/cases/lc-003-report-request-negative/expected-brief.json (33b), evals/late-context/cases/lc-004-core-runtime-guard/context.json (658b), evals/late-context/cases/lc-004-core-runtime-guard/expectations.json (337b), evals/late-context/cases/lc-004-core-runtime-guard/expected-brief.json (268b), evals/late-context/cases/lc-005-preset-metadata-bypass/context.json (594b), evals/late-context/cases/lc-005-preset-metadata-bypass/expectations.json (421b), evals/late-context/cases/lc-005-preset-metadata-bypass/expected-brief.json (286b)\n\nFile v2.24.3:SKILL.md\n\n---\nname: kai-slide-creator\ndescription: 生成HTML演示文稿/幻灯片 — 21 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。\nversion: 2.24.3\nmetadata: {\"openclaw\":{\"emoji\":\"🎞\",\"os\":[\"darwin\",\"linux\",\"windows\"],\"homepage\":\"https://github.com/kaisersong/slide-creator\",\"requires\":{\"bins\":[\"python3\"]},\"install\":[]}}\n---\n\n# kai-slide-creator\n\n生成零依赖 HTML 演示文稿，纯浏览器运行。主路径是 IR-first：`user prompt → BRIEF.json → HTML → validate`。\n\n## 安装\n\n**Claude Code:** 告诉 Claude「安装 https://github.com/kaisersong/slide-creator」  \n**OpenClaw:** `clawhub install kai-slide-creator`\n\n## 使用方式\n\n`/slide-creator ...` 是 Claude/OpenClaw 的 slash 技能调用，不是 bash 命令。\n\n**规划深度：**\n- `自动` (Auto) — 快速出稿，约 3-6 分钟\n- `精修` (Polish) — 深度规划，约 8-15 分钟，自动执行 Review\n\n**内容类型 → 风格推荐：**\n\n| 内容类型 | 推荐风格 |\n|---|---|\n| 数据报告 / KPI 看板 | Data Story、Enterprise Dark、Swiss Modern |\n| 商业路演 / VC Deck | Bold Signal、Aurora Mesh、Enterprise Dark |\n| 产品发布 / SaaS | Blud Sky、Aurora Mesh、Glassmorphism、Electric Studio |\n| 开发工具 / API 文档 | Terminal Green、Neon Cyber、Neo-Retro Dev Deck |\n| 研究 / 思想领导力 | Modern Newspaper、Paper & Ink、Swiss Modern |\n| 创意 / 个人品牌 | Vintage Editorial、Split Pastel、Neo-Brutalism |\n| 哲学 / 思想 | Chinese chan|\n\n\n## 命令路由\n\n`自动` (Auto) — 快速出稿 | `精修` (Polish) — 深度规划，自动执行 Review\n\n| 命令 | 加载内容 | 行为 |\n|------|----------|------|\n| `--plan [prompt]` | `references/brief-template.json` | 创建 `BRIEF.json`；仅在用户明确要求时额外派生 `PLANNING.md` |\n| `--generate` | SKILL.md + 已选风格文件（内置 `references/*.md` / `blue-sky-starter.html`；自定义 `themes/<name>/reference.md`）+ composition 源 + `references/title-quality.md` + `references/html-template.md` + `references/js-engine.md` + `references/base-css.md` + `references/impeccable-anti-patterns.md` | 从 `BRIEF.json` 生成 HTML，并执行写入前门禁；如用户显式要求 `eval`，同步产出单 deck 评测 JSON |\n| `--review [file.html]` | `references/review-checklist.md` + 目标 HTML | 执行 17 项检查点 → 确认窗口 → 修复/报告 |\n| 无 flag (交互式) | `references/workflow.md` + 其他按需 | 遵循 Phase 0-5 |\n| 直接给内容 + 风格 | 同 `--generate` | 先落一个有效 `BRIEF.json`，再走同一个 deterministic renderer 与 strict 写入前门禁；禁止手拼最终 HTML |\n\n**渐进式披露：** 每个命令只加载所需文件。`--plan` 只提炼 IR，不接触 CSS。\n\n## 核心规则（按优先级）\n\n1. **风格强制**\n   所有颜色、字体、组件、背景、动画、图表色、signature elements 都**必须且只能**来自选中的风格文件。模板里的 `[from style file]` 和示例值只是占位，禁止直接使用。  \n   默认推荐面第一阶段聚焦 4 个 production presets：`Swiss Modern / Enterprise Dark / Data Story / Blue Sky`；**但用户显式指定任意当前 preset 时，必须保留该选择**。support tier 只影响默认推荐优先级，不影响显式指定。  \n   **Swiss Modern 额外要求 canonical export path**：面板保持 `.slide` direct child，token 保持 `--bg/--text/--red`，使用 canonical 类（`.left-panel/.right-panel/.stat-row/.cta-block`），并写入 `data-export-role`；不得生成 `.left-col/.right-col` 或 `--bg-primary/--accent` 这类兼容别名。\n\n2. **叙事弧线**\n   先锁内容结构，再锁 composition route。每页都要有明确 page role、不同布局意图和足够的信息推进；不要先拼播放/编辑壳子，再回头补故事。内部 route 名称属于实现细节，不要挤占用户入口层。\n\n3. **标题质量**\n   标题必须是断言式，禁止 Overview / Introduction / Summary / 结论 / 概览 这类通用标签。多行标题必须平衡，不能出现孤儿行、塌陷中间行或靠过窄 measure 硬挤换行。规则和示例只看 `references/title-quality.md`。\n\n4. **运行时与壳子基线**\n   非 Blue Sky 风格必须走共享壳子：`body[data-preset]`、`scroll-snap`、`SlidePresentation`、`PresentMode`、首屏 `.visible` 修复、`data-notes`、shell markers。Blue Sky 是唯一允许保留自身 `#stage/#track` 架构的 preset。\n\n5. **可降级功能**\n   播放模式、编辑模式、水印都默认开启，但优先级低于风格、叙事和标题。  \n   - 播放模式：默认开启  \n   - 编辑模式：默认开启，**可省略编辑模式**，尤其在用户明确说不要或 existing HTML/导入场景受约束时  \n   - 水印：默认保留，但必须是 JS 注入到最后一页，`position: absolute`，禁止 `position: fixed`\n\n详见 `references/html-template.md`。生成任何 HTML 前必读此文件。\n\n**Direct-route guard:** 无论是 `--generate` 还是“直接给内容 + 风格”，都必须先 materialize 一个有效 `BRIEF.json`，再通过 `render_from_brief()` 同一路径渲染，并在写出最终文件前通过 `python3 scripts/validate_html.py \"$TMP_HTML\" --strict`。禁止在交互式路径里绕过 BRIEF 直接手写最终 HTML。\n\n**Optional eval artifact:** 当用户显式要求 `eval` / `评测` 时，生成链路应在 strict gate 通过后额外写出单 deck 评测 JSON。原始 CLI 对应 `--eval`（默认写同名 `.eval.json`）或 `--eval-out <path>`；评测至少包含 `style_score (= style_signature_coverage)`、quality gates、hard failures 与关键 diagnostics。\n\n## Pre-Write Validation Pipeline（写入前门禁）\n\n组装完整 HTML 后，先写入临时文件，再运行：\n\n\n任一失败都算生成失败，必须修复或重生直到通过。\n\n**核心门禁顺序：**\n\n1. **风格强制 / canonical export**\n   选中风格的 Signature Elements、Typography、Components、Background 必须完整注入；不得遗漏 checklist 项。Blue Sky 例外：使用 `blue-sky-starter.html` 基底。\n\n2. **叙事弧线 / composition route**\n   页数、page roles、composition route 必须完整；连续两页不得使用相同布局；每页至少使用 2-3 种组件类型，不得只用 `.g` + `.bl` 堆砌。\n\n3. **标题质量**\n   标题必须断言式；禁止通用标签；多行标题不得有孤儿行、塌陷中间行或浏览器自然换行失衡。规则只认 `references/title-quality.md`。\n\n4. **架构隔离 / runtime**\n   非 Blue Sky 风格必须使用 `scroll-snap-type: y mandatory` + `SlidePresentation`。`#stage/#track`/`translateX` 只允许 Blue Sky。\n\n5. **Preset metadata / shell markers**\n   `body[data-preset]` 必须存在且非占位；写出 `id=\"slide-N\"`、`#brand-mark`、`.nav-dots`、`.progress-bar`、`.slide-num-label`、`data-export-role`。\n\n6. **对比度 / token 使用**\n   文字对比必须正确；浅底不用浅字，深底不用深字；优先用风格 token，不要发明局部颜色。\n\n7. **字体 / CJK**\n   Google Fonts 合并为单一链接；`<style>` 开头要有 `body { background-color: ... }` 回退；CJK 页面追加对应 `Noto Sans SC/JP/KR`。\n\n8. **CSS 工程**\n   布局、背景、间距通过 CSS 选择器定义；inline `style=\"\"` ≤ 5 处，目标 0。\n\n9. **低级错误与模板完整性**\n   禁止 U+FE0F。Blue Sky 模板路径还要检查 REQUIRED BLOCK、`@keyframes`、以及 `go()` 返回 boolean。\n\n> 更多视觉和内容规则在 `--review` / Phase 3.5 Review 中执行。完整反模式映射表见 `references/impeccable-anti-patterns.md`。\n\n## 风格参考\n\n只读取已选风格的文件：\n\n- **内置预设**：完整列表、风格说明和选择建议都在 `references/style-index.md`\n- **支持层级**：默认推荐面与 support tier 定义在 `references/preset-support-tiers.json`\n- **内置风格文件位置**：统一在 `references/` 下；Blue Sky 例外，使用 `references/blue-sky-starter.html`\n- **自定义主题**：`themes/<name>/reference.md`\n\n- 风格选择器：`references/style-index.md`\n- 视口与共享 CSS：`references/base-css.md`\n- 设计质量基线：`references/design-quality.md`\n- 标题规则：`references/title-quality.md`\n- 反模式：`references/impeccable-anti-patterns.md`\n\n\n```\n\n- `BRIEF.json` 已存在 → 直接读取并作为真相源\n- 只有在用户明确要求人工审阅时才派生 `PLANNING.md`\n- 现有 HTML 增强遵循 `references/workflow.md` 的 Enhancement Mode\n\n## 相关技能\n\n- **kai-html-export** — 导出 PPT（图片模式或 Native 模式）\n\nFile v2.24.3:evals/late-context/core-md-guard/README.md\n\n# Core-MD Guard Late-Context Eval Notes\n\nUse these cases to measure whether guard hardening improved real late-context reliability.\n\nPrimary goals:\n\n- catch omitted shared runtime on non-Blue-Sky decks\n- prevent `data-preset` omission from bypassing strict validate\n- preserve the Blue Sky control path\n- confirm style-heavy presets still retain signature layers under long context\n\nSuggested before/after metrics:\n\n- guard catch rate\n- false-positive rate\n- late-context contract pass rate\n- failure localization quality\n\nCase IDs live in `../cases/` and are listed in `../manifest.json`.\n\nFile v2.24.3:evals/late-context/low-context-safe-generate/README.md\n\n# Low-Context-Safe Generate Eval Notes\n\nUse these cases to prove the optimization improves robustness without flattening rich-context output.\n\nThis eval layer should answer two questions:\n\n1. Does the pipeline stay stable when context is noisy or scarce?\n2. Does the pipeline avoid making strong-context decks bland in order to get that stability?\n\nRecommended protocol:\n\n- compare current pipeline as control vs low-context-safe pipeline as treatment\n- use the same case set, same model, and same settings\n- run low-context buckets at least 5 times each\n- run rich-context benchmarks at least 3 times each\n\nRecommended buckets:\n\n- same-BRIEF parity pair\n- sparse-BRIEF fallback\n- invalid BRIEF fail-closed\n- high-context rich benchmark\n- core runtime/style guard cases from `core-md-guard/`\n\nRecommended diagnostics:\n\n- `quality_tier`\n- `strict_pass_first_try`\n- `repair_rounds`\n- `route_drift`\n- `layout_variety`\n- `avg_component_kinds_per_slide`\n- `style_signature_coverage`\n- `chrome_leak`\n- `content_occlusion_risk`\n- `numeric_faithfulness`\n- `source_fact_coverage`\n- `narrative_role_coverage`\n- `minimal_slide_ratio`\n- `max_minimal_slide_run`\n- `latency_ms.packet`\n- `latency_ms.assemble`\n- `latency_ms.validate`\n\nRecommended executable entrypoint:\n\n- `python3 scripts/eval-quality.py <deck.html> --brief <BRIEF.json> --source <source.md>`\n\nThis quality layer exists because a deck can pass `strict validate` and still fail the user:\n\n- runtime chrome leaks into the slide surface\n- fixed panels occlude body copy\n- chart values are invented instead of sourced\n- narrative rhythm collapses into repeated title-only scaffolds\n\nSuccess should be judged by both:\n\n- stronger low-context stability\n- no meaningful regression on rich-context benchmark cases\n\nFile v2.24.3:evals/preset-surface-phase1/README.md\n\n# Preset Surface Phase 1 Eval\n\nThis suite exists to prove two things after preset-surface optimization:\n\n1. The default quality investment in the core presets actually improved output quality.\n2. Narrowing the recommendation surface did not silently break the visible support surface.\n\n## Buckets\n\n- `core-enterprise-dark-render`\n- `core-swiss-modern-render`\n- `core-data-story-render`\n\nThese are the **deterministic-core** cases. They render from the current code path and are the real uplift benchmark set.\n\n- `support-blue-sky-fixture`\n- `support-paper-ink-fixture`\n\nThese are the **support-surface-smoke** cases. Blue Sky and Paper & Ink are still evaluated from known-good HTML fixtures because the deterministic BRIEF renderer currently only supports `Swiss Modern / Enterprise Dark / Data Story`.\n\n## Why Blue Sky Is Fixture-Only\n\n`render_from_brief()` in [scripts/low_context.py](/Users/song/projects/slide-creator/scripts/low_context.py) currently raises for non-deterministic presets outside the core three. Blue Sky remains a special starter path, so it should stay in support-surface smoke until a deterministic renderer exists.\n\n## Why Paper & Ink Is Fixture-Only\n\n`Paper & Ink` is now back in the green support-surface suite, but still as a fixture case rather than a deterministic render case.\n\n- `demos/paper-ink-zh.html` now passes `python3 tests/validate.py --strict`\n- the representative editorial fixture now carries the current shared runtime, watermark injection, and title-balance fixes\n- the preset still does not have a deterministic BRIEF renderer, so it remains support-surface smoke rather than core-render benchmark coverage\n\n## Recommended Workflow\n\nBaseline run:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-baseline\n```\n\nCandidate run with non-regression comparison:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-candidate \\\n  --baseline-dir /tmp/preset-surface-baseline\n```\n\nDirect suite run with browser-title QA:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-candidate \\\n  --baseline-dir /tmp/preset-surface-baseline \\\n  --browser-titles\n```\n\n`browser-title-composition` is now a required title gate for every phase-1 case, so browser-backed title QA is part of the formal green path rather than an optional diagnostic.\n\nRelease gate wrapper:\n\n```bash\npython3 scripts/preset_release_gate.py \\\n  --output-dir /tmp/preset-surface-gate \\\n  --baseline-dir /tmp/preset-surface-baseline \\\n  --require-baseline\n```\n\nThe release gate wrapper auto-enables browser title QA whenever the suite manifest contains `required_title_gates`, so the wrapper command above is sufficient for the formal phase-1 gate.\n\n## What Counts As Quality Uplift\n\nFor the deterministic-core cases:\n\n- strict validate still passes\n- `chrome-hidden-by-default` and `no-content-occlusion-risk` stay green\n- `layout_variety`, `component_diversity`, and `style_signature_coverage` do not regress materially\n- `minimal_slide_ratio` does not drift upward beyond the configured threshold\n- Data Story keeps `numeric_faithfulness >= 0.95`\n\nFor the support-surface smoke cases:\n\n- the preset still renders as the named preset\n- preset-specific architecture and runtime markers are still present\n- the surface stays usable enough for contract validation\n- Paper & Ink now proves editorial support-surface health without pretending it already has deterministic BRIEF rendering\n\nFile v2.24.3:README.md\n\n# slide-creator\n\n> You have great content — but great content deserves a great presentation. AI can generate slides, but the results are inconsistent and re-rolling gets old fast. Slide-Creator gives you stable, polished output every time: pick a style that fits your audience, and let the model handle the rest. Go grab a coffee.\n>\n> **[See the guide as a report →](https://kaisersong.github.io/slide-creator/demos/blue-sky-en.html)** — this document was generated by slide-creator itself.\n\nA skill for [Claude Code](https://claude.ai/claude-code) and [OpenClaw](https://openclaw.ai) that generates stunning, zero-dependency HTML presentations.\n\nEnglish | [简体中文](README.zh-CN.md)\n\n---\n\n## Live Demo\n\nSee what slide-creator produces — open directly in your browser:\n\n- [slide-creator intro (English)](https://kaisersong.github.io/slide-creator/demos/blue-sky-en.html)\n- [slide-creator 介绍（中文）](https://kaisersong.github.io/slide-creator/demos/blue-sky-zh.html)\n\nClick any screenshot below to open the live demo (same content, different styles):\n\n<table>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/blue-sky-en.html\"><img src=\"demos/screenshots/blue-sky.png\" width=\"240\" alt=\"Blue Sky\"/></a><br/><b>Blue Sky</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/bold-signal-en.html\"><img src=\"demos/screenshots/bold-signal.png\" width=\"240\" alt=\"Bold Signal\"/></a><br/><b>Bold Signal</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/electric-studio-en.html\"><img src=\"demos/screenshots/electric-studio.png\" width=\"240\" alt=\"Electric Studio\"/></a><br/><b>Electric Studio</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/creative-voltage-en.html\"><img src=\"demos/screenshots/creative-voltage.png\" width=\"240\" alt=\"Creative Voltage\"/></a><br/><b>Creative Voltage</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/dark-botanical-en.html\"><img src=\"demos/screenshots/dark-botanical.png\" width=\"240\" alt=\"Dark Botanical\"/></a><br/><b>Dark Botanical</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/notebook-tabs-en.html\"><img src=\"demos/screenshots/notebook-tabs.png\" width=\"240\" alt=\"Notebook Tabs\"/></a><br/><b>Notebook Tabs</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/pastel-geometry-en.html\"><img src=\"demos/screenshots/pastel-geometry.png\" width=\"240\" alt=\"Pastel Geometry\"/></a><br/><b>Pastel Geometry</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/split-pastel-en.html\"><img src=\"demos/screenshots/split-pastel.png\" width=\"240\" alt=\"Split Pastel\"/></a><br/><b>Split Pastel</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/vintage-editorial-en.html\"><img src=\"demos/screenshots/vintage-editorial.png\" width=\"240\" alt=\"Vintage Editorial\"/></a><br/><b>Vintage Editorial</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/neon-cyber-en.html\"><img src=\"demos/screenshots/neon-cyber.png\" width=\"240\" alt=\"Neon Cyber\"/></a><br/><b>Neon Cyber</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/terminal-green-en.html\"><img src=\"demos/screenshots/terminal-green.png\" width=\"240\" alt=\"Terminal Green\"/></a><br/><b>Terminal Green</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/swiss-modern-en.html\"><img src=\"demos/screenshots/swiss-modern.png\" width=\"240\" alt=\"Swiss Modern\"/></a><br/><b>Swiss Modern</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/paper-ink-en.html\"><img src=\"demos/screenshots/paper-ink.png\" width=\"240\" alt=\"Paper & Ink\"/></a><br/><b>Paper & Ink</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/aurora-mesh-en.html\"><img src=\"demos/screenshots/aurora-mesh.png\" width=\"240\" alt=\"Aurora Mesh\"/></a><br/><b>Aurora Mesh</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/enterprise-dark-en.html\"><img src=\"demos/screenshots/enterprise-dark.png\" width=\"240\" alt=\"Enterprise Dark\"/></a><br/><b>Enterprise Dark</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/glassmorphism-en.html\"><img src=\"demos/screenshots/glassmorphism.png\" width=\"240\" alt=\"Glassmorphism\"/></a><br/><b>Glassmorphism</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/neo-brutalism-en.html\"><img src=\"demos/screenshots/neo-brutalism.png\" width=\"240\" alt=\"Neo-Brutalism\"/></a><br/><b>Neo-Brutalism</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/chinese-chan-en.html\"><img src=\"demos/screenshots/chinese-chan.png\" width=\"240\" alt=\"Chinese Chan\"/></a><br/><b>Chinese Chan</b></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/data-story-en.html\"><img src=\"demos/screenshots/data-story.png\" width=\"240\" alt=\"Data Story\"/></a><br/><b>Data Story</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/modern-newspaper-en.html\"><img src=\"demos/screenshots/modern-newspaper.png\" width=\"240\" alt=\"Modern Newspaper\"/></a><br/><b>Modern Newspaper</b></td>\n<td align=\"center\"><a href=\"https://kaisersong.github.io/slide-creator/demos/neo-retro-dev-en.html\"><img src=\"demos/screenshots/neo-retro-dev.png\" width=\"240\" alt=\"Neo-Retro Dev Deck\"/></a><br/><b>Neo-Retro Dev Deck</b></td>\n</tr>\n</table>\n\n---\n\n## Design Philosophy: Build for the Real Last Mile\n\nslide-creator is built around one observation: people usually spend a long time generating or discussing content first, then ask for slides at the very end. That is the worst possible moment to depend on raw conversation context. The model is already overloaded, style signals are diluted, and hard constraints get dropped.\n\nThe design philosophy of slide-creator is to protect that last mile.\n\n### 1. IR-first workflow, planning is optional\n\nThe main workflow is now explicitly **IR-first workflow**:\n\n```\nuser prompt → BRIEF.json → HTML → validate → eval\n```\n\n`--plan` exists to distill a durable `BRIEF.json`, not to force a human review step every time. `PLANNING.md` is optional, a human-readable view when someone explicitly wants to inspect structure before rendering.\n\nThis matters because the generator should not carry the full chat history into the render step. `--generate` should execute against a small, hard truth source, not against a messy, late-stage conversation.\n\nThe same rule applies to direct prompt generation. \"Give content + preset and generate now\" is still an IR-first path: materialize `BRIEF.json`, render through the deterministic renderer, then pass the strict pre-write validator before writing the final HTML.\n\n### 2. Public modes stay simple, internal pipeline stays strict\n\nUsers should not need to think in six internal phases. The public mental model is deliberately small:\n\n- **Auto** for fast first draft\n- **Polish** for the quality-locked path\n\nInternally, the pipeline is stricter than the UI suggests. The real path is style discovery, BRIEF distillation, rendering, validation, and review. Simpler UX outside, stronger contract inside.\n\nThis is why the README and the skill keep talking about Auto / Polish, while the repo still maintains explicit routing, review logic, and eval infrastructure.\n\n### 3. Progressive disclosure for model context\n\nA skill file loads into model context on every invocation. That means context is a product surface, not an implementation detail.\n\nslide-creator keeps `SKILL.md` as a thin router and pushes detail into references so each path loads only what it needs:\n\n```\n--plan        → references/brief-template.json only\n--generate    → references/html-template.md + references/js-engine.md + one style file + base-css.md\ninteractive   → references/workflow.md\nstyle picker  → references/style-index.md\n```\n\nThe goal is not elegance for its own sake. It is to reduce context pressure so the model does not forget the important parts right before it renders.\n\n### 4. Show, don't tell, for visual choices\n\nMost users cannot reliably describe a visual direction in abstract language. They can react to concrete options immediately.\n\nThat is why slide-creator treats style selection as a preview problem, not a questionnaire problem. Show three strong directions. Let the user point. Then write the decision into `BRIEF.json`.\n\nThis is also why style choice belongs before rendering. If style remains a vague instruction until the HTML step, it is too late.\n\n### 5. Zero-dependency runtime is part of the product\n\nThe output is not a screenshot, and not a build artifact that still needs another toolchain. The output is a browser-native deck with:\n\n- viewport-fitted slides\n- presenter mode\n- **Default-on** inline editing\n- keyboard navigation\n- self-contained runtime\n\nThe zero-dependency requirement forces discipline. If a deck only works after a bundler, remote font fetch, or extra runtime glue, the product has already missed its point.\n\n### 6. Validate before trust\n\nThe system should catch failure before the user opens a broken deck.\n\nThat is why slide-creator is moving quality checks earlier:\n\n- `--plan` creates a structured `BRIEF.json`\n- `--generate` renders from the IR instead of from the whole conversation\n- `validate-brief.py` checks the brief contract\n- `scripts/validate_html.py --strict` checks the runtime contract\n- evals score route / compression / render / efficiency\n\nThe important design idea here is not \"more tests\". It is **better failure localization**. If a result is bad, we want to know whether the mistake happened in routing, compression, rendering, or polish. That feedback then improves the skill itself.\n\n**Validation positioning: pre-write gate, not optional review**\n\nvalidate.py should run inside `--generate`, but after rendering and before the final file is accepted. The right sequence is: assemble HTML → write temp file → run `python3 scripts/validate_html.py \"$TMP_HTML\" --strict` → fix/regenerate until pass → write final output. If you also want a single-deck eval artifact, add `--eval` or `--eval-out report.json` after the strict gate passes.\n\nThis keeps validation out of planning and composition, but inside delivery:\n- No extra planning step → no extra LLM cognitive load during ideation\n- No extra style-file reads beyond the existing generation inputs\n- Hard failures stop bad output before handoff\n- Warnings can still feed polish / retry policy without pretending the deck is already valid\n\nBefore adding any new check, verify: does this check belong in the deterministic runtime gate? If it requires subjective taste judgment rather than contract validation, it should stay in review/eval instead of strict validate.\n\n**Contract alignment: validators must match generation contracts**\n\nvalidate.py checks must align with actual contracts in SKILL.md / html-template.md / js-engine.md. For example:\n- Check hotzone → must use `.edit-hotzone` (class) not `id=\"hotzone\"`\n- Check preset metadata → generated decks must emit a real `body[data-preset]`, not omit it or leave the template placeholder\n- Check external links → must allow Google Fonts (explicitly required by html-template.md)\n- Check watermark → must verify JS injection logic (not hardcoded position)\n\nContract alignment isn't about doc syncing; it's about script validation: every validate.py change should run against demos to ensure checks match actual generation output.\n\n### 7. Against slide slop, visual and semantic\n\nMost AI slide failures are not dramatic. They are mediocre. Sparse pages, repeated layouts, weak titles, and generic structure. That is what makes decks feel machine-made.\n\nslide-creator treats this as a design problem and a content problem:\n\n- visual density must be intentional\n- layout rhythm must change\n- titles should carry judgments when the content type calls for it\n- numbers should surface early when the material has them\n- jargon should be translated for the audience\n\nThe point is not to make every deck look busy. It is to avoid accidental emptiness and accidental vagueness.\n\n### 8. Extensible themes, but with a contract\n\nCustom themes are supported, but they are not prompt soup. The contract is explicit:\n\n- create `themes/your-theme/`\n- add `reference.md` for the design language\n- optionally add `starter.html` for complex systems\n\nThis makes themes composable and reviewable. A theme is not just \"use our brand colors\". It is a reusable rendering contract.\n\n### 9. Content-type routing is a quality feature\n\n21 presets are useful only if the system helps users start in the right neighborhood.\n\nThat is why slide-creator routes by content type:\n\n```\nData report / KPI dashboard → Data Story, Enterprise Dark, Swiss Modern\nBusiness pitch / VC deck    → Bold Signal, Aurora Mesh, Enterprise Dark\nDeveloper tool / API docs   → Terminal Green, Neon Cyber, Neo-Retro Dev Deck\n```\n\nGood defaults reduce rework. In practice, that means fewer bad first drafts, fewer style resets, and less wasted context.\n\nPhase 1 recommendation surface is intentionally narrower than the full preset library:\n\n- `Swiss Modern`\n- `Enterprise Dark`\n- `Data Story`\n- `Blue Sky`\n\nThis does **not** remove the other presets. Explicit preset selection still wins; the narrower surface only affects defaults and recommendation priority.\n\n---\n\n## Install\n\n### Claude Code\n\nTell Claude: \"Install https://github.com/kaisersong/slide-creator\"\n\nOr manually:\n```bash\ngit clone https://github.com/kaisersong/slide-creator ~/.claude/skills/slide-creator\n```\n\nRestart Claude Code. Use as `/slide-creator`.\n\n### OpenClaw\n\n```bash\n# Via ClawHub (recommended)\nclawhub install kai-slide-creator\n\n# Or manually\ngit clone https://github.com/kaisersong/slide-creator ~/.openclaw/skills/slide-creator\n```\n\n> ClawHub page: https://clawhub.ai/skills/kai-slide-creator\n\n---\n\n## Usage\n\n### Commands\n\n```\n/slide-creator --plan       # Analyze content + resources/, create BRIEF.json\n/slide-creator --generate   # Generate HTML from BRIEF.json\n/slide-creator --review     # Diagnose and fix content quality issues\n/slide-creator              # Start from scratch (interactive style discovery)\n/kai-html-export            # Export to PPTX or PNG (separate skill)\n```\n\n### Bare Sandbox Fallback\n\n`/slide-creator ...` is a Claude/OpenClaw slash-skill call, not a raw bash or python command.\n\nIf you are in a bare sandbox or external agent runner:\n\n```bash\npython3 main.py --validate-brief --brief BRIEF.json\npython3 main.py --generate --brief BRIEF.json --output presentation.html\npython3 main.py --generate --brief BRIEF.json --output presentation.html --eval\n```\n\nBuilt-in presets still load from `references/` / `references/style-index.md`; `themes/<name>/reference.md` is only for custom themes.\n\n### Planning Depths\n\n- **Auto** — fast draft; skips Phase 3.5 Review\n- **Polish** — deeper path; auto-runs Phase 3.5 Review\n\nSame content switching between Auto/Polish should keep the same preset unless user explicitly requests a style change.\n\n### Typical Workflows\n\n**Interactive creation:**\n1. Run `/slide-creator`, answer four questions (purpose, length, content, images)\n2. See 3 style previews, pick one\n3. Generate full deck, open in browser\n\n**IR-first workflow (complex content):**\n1. Put assets in `resources/` folder\n2. Run `/slide-creator --plan \"My AI startup pitch deck\"`\n3. Inspect `BRIEF.json`; only ask for `PLANNING.md` if a human review view is needed\n4. Run `/slide-creator --generate`\n\n**PPT conversion:**\n1. Put `.pptx` file in current directory\n2. Run `/slide-creator` — skill auto-detects and extracts content\n\n### Review Mode\n\n```\n/slide-creator --review presentation.html\n```\n\n**Behavior:**\n1. Load `references/review-checklist.md`\n2. Execute 16 checkpoints (6 auto-detect + 10 AI-advised)\n3. Show results: ✅ passed / 🔧 auto-fixable / ⚠️ needs confirmation / ❌ needs judgment\n4. User chooses: [Auto-fix all] / [Confirm each] / [Skip]\n5. Output fixed HTML + diagnostic report\n\n**Polish mode:** Phase 3.5 Review runs automatically after generation.\n**Auto mode:** Skips Phase 3.5.\n\n### Timing\n\nExpected end-to-end:\n\n- **Auto:** ~3–6 minutes\n- **Polish:** ~8–15 minutes\n\nTracked segments: `plan`, `generate`, `validate`, `polish`, `total`\n\n---\n\n## Features\n\n### Core\n\n- **IR-first workflow** — `--plan` distills `BRIEF.json`, `--generate` renders from the IR\n- **Two planning depths** — Auto for speed, Polish for narrative and visual locking\n- **Content Review System** — 16 checkpoints: `--review` for on-demand diagnosis; Polish auto-runs review; three rule types (hard/context-aware/advisory)\n- **21 design presets** — each with named layout variations\n- **Content-type routing** — auto-suggests best style for pitch decks, dev tools, data reports\n- **Style discovery** — generate 3 visual previews before committing\n- **Inline SVG diagrams** — flowcharts, timelines, bar charts, comparison grids, org charts — no external libs\n- **Blue Sky starter template** — complete boilerplate so models never mis-implement the visual system\n\n### Interaction\n\n- **Play Mode** — Press `F5` or click ▶ (bottom-right) for fullscreen; slides scale to any screen; controls auto-hide; `Esc` to exit\n- **Presenter Mode** — Press `P` for synced speaker window: notes, timer, slide counter, prev/next nav; height auto-adapts\n- **Notes editing panel** — In edit mode (`E`), notes bar at bottom; click title bar to collapse/expand; edits sync live\n- **Inline editing** — Default-on browser editing; edit text in-browser, `Ctrl+S` to save\n- **Viewport fitting** — Every slide fits 100vh exactly, no scrolling\n\n### Output\n\n- **Custom theme system** — Drop `reference.md` in `themes/your-theme/` to add preset; `starter.html` optional for complex systems\n- **Template export chrome switch** — Set `data-export-progress=\"false\"` on `<body>` to hide progress bar and nav dots\n- **Image pipeline** — Auto-evaluate and process assets (Pillow)\n- **PPT import** — Convert `.pptx` to web presentations\n- **PPTX / PNG export** — via [kai-html-export](https://github.com/kaisersong/kai-html-export)\n- **Bilingual** — Chinese / English support\n\n---\n\n## Design Presets\n\n| Preset | Vibe | Best For |\n|--------|------|----------|\n| **Bold Signal** | Confident, high-impact | Pitch decks, keynotes |\n| **Electric Studio** | Clean, professional | Agency presentations |\n| **Creative Voltage** | Energetic, retro-modern | Creative pitches |\n| **Dark Botanical** | Elegant, sophisticated | Premium brands |\n| **Blue Sky** | Airy, enterprise SaaS | Product launches, tech decks |\n| **Notebook Tabs** | Editorial, organized | Reports, reviews |\n| **Pastel Geometry** | Friendly, approachable | Product overviews |\n| **Split Pastel** | Playful, modern | Creative agencies |\n| **Vintage Editorial** | Witty, personality-driven | Personal brands |\n| **Neon Cyber** | Futuristic, techy | Tech startups |\n| **Terminal Green** | Developer-focused | Dev tools, APIs |\n| **Swiss Modern** | Minimal, precise | Corporate, data |\n| **Paper & Ink** | Literary, thoughtful | Storytelling |\n| **Aurora Mesh** | Vibrant, premium SaaS | Product launches, VC pitch |\n| **Enterprise Dark** | Authoritative, data-driven | B2B, investor decks, strategy |\n| **Glassmorphism** | Light, translucent, modern | Consumer tech, brand launches |\n| **Neo-Brutalism** | Bold, uncompromising | Indie dev, creative manifesto |\n| **Chinese Chan** | Still, contemplative | Design philosophy, brand, culture |\n| **Data Story** | Clear, precise, persuasive | Business review, KPI, analytics |\n| **Modern Newspaper** | Punchy, authoritative, editorial | Business reports, thought leadership |\n| **Neo-Retro Dev Deck** | Opinionated, technical, handmade | Dev tool launches, API docs, hackathons |\n\n### Blue Sky\n\nLight sky-blue gradient (`#f0f9ff → #e0f2fe`) with floating glassmorphism cards and animated ambient orbs. Inspired by a real enterprise AI pitch deck (CloudHub V12 MVP). Feels like a high-altitude clear day: open, confident, premium.\n\nSignature elements: grainy noise texture overlay · 3 animated blur orbs repositioning per slide · glassmorphism cards with `backdrop-filter: blur(24px)` · 40px tech grid with radial mask · spring-physics horizontal transitions · cloud hero effect on title slides.\n\n**Why Blue Sky is the starter template:** It demonstrates all 10 signature visual elements pre-built. Models only fill in content — no risk of mis-implementing the design system. This pattern (`reference.md` + `starter.html`) is reusable for any complex theme.\n\n---\n\n## Creating Custom Themes\n\n1. Create `themes/your-theme/` directory\n2. Write `reference.md` describing:\n   - Colors (primary, accent, neutrals)\n   - Typography (fonts, weights, sizes)\n   - Layout patterns (cards, grids, full-bleed)\n   - Component classes (if custom CSS needed)\n3. Optionally add `starter.html` for complex visual systems (animated backgrounds, custom JS)\n\nYour theme appears as \"Custom: your-theme\" in the style picker.\n\n**Example brand themes bundled:** `themes/cloudhub/` and `themes/kingdee/`\n\n---\n\n## Brand Style Migration\n\nMigrate existing `.pptx` to custom brand design — get pixel-perfect archive + editable version.\n\n```bash\n# Step 1 — re-style\n/slide-creator --plan \"migrate company-deck.pptx to our brand style\"\n/slide-creator --generate  # → branded-deck.html\n\n# Step 2 — export both modes\n/kai-html-export branded-deck.html              # pixel-perfect\n/kai-html-export --pptx --mode native branded-deck.html  # editable\n```\n\n---\n\n## Requirements\n\nslide-creator has **no external dependencies**. Python 3 is optional for image evaluation — no packages required.\n\nFor PPTX/PNG export: `clawhub install kai-html-export` or `pip install playwright python-pptx`\n\n---\n\n## Output\n\n- `presentation.html` — single-file, zero dependencies, runs in browser\n- `PRESENTATION_SCRIPT.md` — speaker notes (auto-generated if ≥8 slides)\n\n---\n\n## Compatibility\n\n| Platform | Version | Install path |\n|---------|---------|-------------|\n| Claude Code | any | `~/.claude/skills/slide-creator/` |\n| OpenClaw | ≥ 0.9 | `~/.openclaw/skills/slide-creator/` |\n\n---\n\n## Version History\n\n**v2.24.3** — Single-deck eval and production verification release: `--generate` / `render-from-brief` can now emit per-deck eval JSON via `--eval` or `--eval-out`, Data Story chart routing/label logic now fails closed on weak numeric signals instead of drawing fake charts, and production demo fixtures were revalidated and resynced to the current watermark version so core preset verification remains green.\n\n**v2.24.2** — Enterprise Dark / Chinese Chan chrome hardening: validator now rejects hidden-brand regressions for presets that must suppress `#brand-mark`, and watermark checks now fail stale version/preset strings so non-canonical shell output cannot pass `--strict` with leaked skill names or outdated credits.\n\n**v2.24.1** — Direct-route contract and pre-write gate fix: forced direct prompt generation back through `BRIEF.json -> render_from_brief()`, made both CLI render entrypoints run `scripts/validate_html.py --strict` before writing output, and tightened the SKILL/workflow/doc contracts plus regression tests so non-canonical Chinese Chan HTML can no longer slip through a current-version generation path.\n\n**v2.24.0** — Core preset hardening and quality-gate release: added preset support tiers plus manifest-driven eval/release-gate tooling, upgraded low-context BRIEF semantics and preset usage rules, repaired Chinese Chan formal contracts and production/shared runtime drift, modernized family demo runtimes, moved the canonical HTML validator to `scripts/validate_html.py` with a compatibility wrapper, and tightened Swiss Modern/shared shell chrome so nav dots and page-number treatments render correctly across presets.\n\n**v2.23.2** — Sandbox entrypoint and skill-surface patch: added root `main.py` plus `slide-creator` wrapper for bare-sandbox BRIEF validation/rendering, made `--plan` fail with a clear slash-skill boundary instead of a misleading runtime error, restored `SKILL.md`'s user-facing style recommendation surface, and clarified that built-in presets live under `references/` while `themes/<name>/reference.md` is only for custom themes.\n\n**v2.23.1** — Enterprise Dark runtime stability patch: fixed shared js-engine active-slide reveal toggling, hid editing chrome by default, replaced unresolved watermark tokens with real version/preset metadata, stabilized one-gesture-per-page wheel pagination for scroll-snap decks, and corrected Enterprise Dark narrative cover routing, split-title clipping, governance/table rhythm, and subtle grid overlay balance.\n\n**v2.23.0** — Title composition and low-context quality release: added a preset-aware title profile registry plus browser-level title QA, expanded low-context diagnostics/eval buckets for quality uplift checks, hardened strict gates around shared runtime and `body[data-preset]`, and reordered `SKILL.md` so style enforcement, narrative arc, and title quality take priority over degradable playback/edit/watermark features.\n\n**v2.22.0** — Style reference rollout and strict quality gate hardening: all presets now pass style-reference audit, Swiss Modern plus Enterprise Dark / Data Story / Glassmorphism / Chinese Chan gain explicit canonical export contracts and user-content routing, `tests/validate.py --strict` is documented and tested as the `--generate` pre-write gate, and new regression coverage locks CSS variable resolution, layout variety, and priority preset contract checks.\n\n**v2.19.0** — IR-first release: `BRIEF.json` becomes the primary truth source, `PLANNING.md` is optional human view, late-context eval fixtures added under `evals/generated-decks/`, README design philosophy rewritten around prompt → BRIEF → HTML → validate → eval, and stronger regression coverage added for the new contract.\n\n**v2.18.1** — Paper & Ink style fix: restored correct editorial style reference (Cormorant Garamond headlines, Source Serif 4 body, crimson ornamental rules, drop caps); added `.slide-content` wrapper to slide HTML structure for proper vertical centering; Chinese text font fallback now uses system serif (宋体) instead of Noto Sans SC.\n\n**v2.18.0** — JS engine extraction (html-template.md 557→222 lines); style signature injection expanded to require all CSS classes from Typography/Components sections; neon-cyber glow effects clarified; style consistency audit tool (`tests/audit_style_consistency.py`).\n\n**v2.17.0** — Style reference system overhaul; contrast fix for light backgrounds; glassmorphism text theme mapping.\n\n**v2.12.0**\n\n**v2.11.0** — Hard rules embedded in SKILL.md; `--generate` flow restructured with explicit validation.\n\n**v2.9.0** — Content Review System: 16 checkpoints (6 auto-detectable, 10 AI-advised); Phase 3.5 Review in Polish mode; `--review` command for on-demand diagnosis; three rule types (hard/context-aware/advisory).\n\n**v2.8.0** — Simplified planning depths (Auto / Polish); bilingual naming; timing guidance; preset-lock across depths; checked-in demo paths; regression coverage.\n\n**v2.7.1** — Zero-dependency `check-doc-sync.py` contract checker for SKILL.md/README/workflow.md sync; regression test integration.\n\n**v2.7.0** — Enhancement Mode guardrails for editing existing HTML decks; inline editing default-on but optional; bundled brand theme examples (`themes/cloudhub/`, `themes/kingdee/`).\n\n**v2.6.1** — Brand Style Migration workflow documentation.\n\n**v2.6.0** — Design Quality Baseline (`references/design-quality.md`): minimum 65% fill, multi-column balance, 90/8/2 color law, no 3 consecutive bullet slides, content-tone color calibration, pre-output self-check. Fixed aurora-mesh Inter font contradiction (Space Grotesk + DM Sans).\n\n**v2.5.0** — 21 presets with Blue Sky starter template; Show Don't Tell style discovery.\n\n**v2.0.0** — Two-stage workflow (`--plan` / `--generate`); inline editing; presenter mode.\n\n**v1.0.0** — Initial release with 10 presets.\n\nFile v2.24.3:themes/README.md\n\n# Custom Themes\n\nDrop a folder here to add your own design preset to slide-creator.\n\n## Structure\n\n```\nthemes/\n  your-theme-name/\n    reference.md      ← required: style description Claude reads\n    starter.html      ← optional: pre-built boilerplate (like blue-sky-starter.html)\n```\n\n## reference.md format\n\nFollow the same format as the built-in references (e.g. `references/chinese-chan.md`):\n\n```markdown\n# Your Theme Name — Style Reference\n\nOne-sentence description. Inspired by / aesthetic / mood.\n\n---\n\n## Colors\n\n```css\n:root {\n    --bg:      #...;\n    --text:    #...;\n    --accent:  #...;\n}\n```\n\n## Typography\n...\n\n## Layout\n...\n\n## Best For\nUse cases, audience, occasion.\n```\n\n## starter.html (optional)\n\nIf your theme has complex visual elements (animated backgrounds, special layout systems),\nprovide a starter HTML file. Claude will read it and use it as the base instead of\nbuilding from scratch. See `references/blue-sky-starter.html` for an example.\n\n## Example\n\n`_example-coral-dawn/` — a complete sample theme you can copy and adapt.\nDirectories starting with `_` are ignored by slide-creator and will not appear in the preset picker.\n\nAlso see:\n- `references/chinese-chan.md` — a built-in reference in the same format\n- `references/blue-sky-starter.html` — a full starter template\n\n## Sharing themes\n\nTo share a theme with others, publish the folder as a git repo. Users clone it into their\n`themes/` directory:\n\n```bash\ngit clone https://github.com/yourname/slide-creator-theme-yourtheme \\\n  ~/.claude/skills/slide-creator/themes/yourtheme\n```\n\nFile v2.24.3:_meta.json\n\n{\n  \"ownerId\": \"kn7bjv9d2ccsjqk1m4edthgtgx82fem8\",\n  \"slug\": \"kai-slide-creator\",\n  \"version\": \"2.24.3\",\n  \"publishedAt\": 1777560381287\n}\n\nFile v2.24.3:references/aurora-mesh.md\n\n# Aurora Mesh — Style Reference\n\nInspired by Linear.app, Vercel, and Stripe marketing pages. Animated multi-layer radial-gradient background creates a slowly drifting aurora effect on deep space black.\n\n---\n\n## Colors\n\n```css\n:root {\n    --bg-primary:   #0a0a1a;\n    --accent:       #00f5c4;                   /* cyan-green emphasis */\n    --text-primary: #ffffff;\n    --text-body:    rgba(255,255,255,0.70);\n    --text-muted:   rgba(255,255,255,0.45);\n    --card-bg:      rgba(255,255,255,0.05);\n    --card-border:  rgba(255,255,255,0.10);\n    --divider:      rgba(255,255,255,0.15);\n}\n```\n\n---\n\n## Background\n\n```css\nbody {\n    background-color: #0a0a1a;\n    background-image:\n        radial-gradient(ellipse at 20% 50%, rgba(120,40,200,0.40) 0%, transparent 60%),\n        radial-gradient(ellipse at 80% 20%, rgba(0,180,255,0.30) 0%, transparent 50%),\n        radial-gradient(ellipse at 60% 80%, rgba(0,255,180,0.20) 0%, transparent 50%);\n    animation: auroraDrift 20s ease-in-out infinite alternate;\n}\n\n@keyframes auroraDrift {\n    0%   { background-position: 0%   50%; }\n    33%  { background-position: 50%  20%; }\n    66%  { background-position: 80%  80%; }\n    100% { background-position: 100% 50%; }\n}\n```\n\n---\n\n## Typography\n\n```css\n/* Title — use a distinctive display font, NOT Inter (banned as display typeface) */\n@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&display=swap');\nfont-family: \"Space Grotesk\", \"PingFang SC\", \"Noto Sans CJK SC\", \"Microsoft YaHei\", sans-serif;\nfont-weight: 700;\nletter-spacing: -0.03em;\ncolor: #ffffff;\n\n/* Body */\n@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500&display=swap');\nfont-family: \"DM Sans\", \"PingFang SC\", system-ui, sans-serif;\nfont-weight: 400;\ncolor: rgba(255,255,255,0.70);\nline-height: 1.7;\n```\n\n---\n\n## Card Component\n\n```css\n/* Content card — subtle glass, doesn't compete with background aurora */\n.aurora-card {\n    background: rgba(255,255,255,0.05);\n    backdrop-filter: blur(12px);\n    -webkit-backdrop-filter: blur(12px);\n    border: 1px solid rgba(255,255,255,0.10);\n    border-radius: 16px;\n    padding: clamp(1.2rem, 2.5vw, 2rem);\n}\n\n/* Accent line / divider */\n.aurora-divider {\n    height: 1px;\n    background: rgba(255,255,255,0.15);\n    margin: clamp(1rem, 2vw, 1.5rem) 0;\n}\n\n/* Accent text */\n.aurora-accent {\n    color: #00f5c4;\n    font-weight: 600;\n}\n\n/* Pill badge */\n.aurora-badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 4px 14px;\n    background: rgba(0,245,196,0.12);\n    border: 1px solid rgba(0,245,196,0.30);\n    border-radius: 9999px;\n    font-size: clamp(0.65rem, 1vw, 0.75rem);\n    font-weight: 600;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: #00f5c4;\n}\n```\n\n---\n\n## Layout\n\nCentered single-column layout. No side panels. Content sits in centered cards over the full-bleed animated background.\n\n```css\n.aurora-slide {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: clamp(2rem, 5vw, 5rem);\n    text-align: center;        /* title slides */\n}\n\n/* Content slides: left-aligned inside centered container */\n.aurora-content {\n    width: 100%;\n    max-width: min(90vw, 800px);\n    text-align: left;\n}\n\n/* Headline sizing */\n.aurora-title {\n    font-size: clamp(2.5rem, 7vw, 6rem);\n    font-weight: 700;\n    letter-spacing: -0.02em;\n    line-height: 1.05;\n    color: #ffffff;\n}\n\n.aurora-subtitle {\n    font-size: clamp(1rem, 2vw, 1.4rem);\n    color: rgba(255,255,255,0.70);\n    margin-top: 1rem;\n    line-height: 1.6;\n}\n```\n\n---\n\n## Named Layout Variations\n\n### 1. Aurora Hero (全屏宣告)\n\nFull-bleed animated aurora background. Centered white headline in Space Grotesk, `clamp(2.5rem, 7vw, 6rem)`, weight 700, negative letter-spacing. Subtitle in `rgba(255,255,255,0.70)`. Optional accent line `.aurora-divider` below. No card on hero — text sits directly on gradient.\n\n```html\n<section class=\"slide aurora-slide\">\n    <h1 class=\"aurora-title\">Big Statement</h1>\n    <p class=\"aurora-subtitle\">Supporting line</p>\n</section>\n```\n\n### 2. Aurora Card (功能亮点)\n\nCentered frosted glass card on animated background. Card uses `backdrop-filter: blur(12px)`, `rgba(255,255,255,0.05)` background, `1px solid rgba(255,255,255,0.10)` border, `16px` border-radius. Content inside: title, body, optional badge.\n\n```html\n<section class=\"slide aurora-slide\">\n    <div class=\"aurora-content\">\n        <div class=\"aurora-card\">\n            <h2>Feature Name</h2>\n            <p>1-2 line description</p>\n            <span class=\"aurora-badge\">Badge</span>\n        </div>\n    </div>\n</section>\n```\n\n### 3. Aurora Stat (大数字强调)\n\nLarge gradient text number centered on slide. Use `-webkit-background-clip: text` with aurora gradient for hero numbers. Label below in muted text. Optional vertical divider.\n\n```html\n<section class=\"slide aurora-slide\">\n    <div class=\"aurora-stat\" style=\"-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-image:linear-gradient(135deg,#00f5c4,#00b4ff);font-size:clamp(3rem,10vw,8rem);font-weight:700;\">97%</div>\n    <p class=\"aurora-subtitle\">Metric label</p>\n</section>\n```\n\n### 4. Aurora Split (分屏对比)\n\nTwo frosted glass cards side by side on animated background. `display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem;`. Each card has its own content. Left panel = View A, right panel = View B.\n\n```html\n<section class=\"slide aurora-slide\">\n    <div class=\"aurora-content\" style=\"display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;\">\n        <div class=\"aurora-card\"><h3>View A</h3><p>Content</p></div>\n        <div class=\"aurora-card\"><h3>View B</h3><p>Content</p></div>\n    </div>\n</section>\n```\n\n### 5. Aurora Trio (多选项对比)\n\nThree glass cards in a row. `grid-template-columns: repeat(3, 1fr)`. Active card has stronger border: `border-color: rgba(0,245,196,0.40)` and slightly more opaque background: `rgba(255,255,255,0.08)`. Each card: number + name + descriptor.\n\n```html\n<section class=\"slide aurora-slide\">\n    <div class=\"aurora-content\" style=\"display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;\">\n        <div class=\"aurora-card active\">01 Active</div>\n        <div class=\"aurora-card\">02 Option</div>\n        <div class=\"aurora-card\">03 Option</div>\n    </div>\n</section>\n```\n\n### 6. Aurora Timeline (流程步骤)\n\nHorizontal step sequence with frosted glass cards as step markers. Active step: full accent border. Completed: outlined. Future: lower opacity. Track line: `2px solid rgba(0,245,196,0.3)`. Arrows between steps in accent color.\n\n---\n\n## Signature Elements\n\n### CSS Overlays\n- `body`: Mesh gradient 背景 — 3-4 个 `radial-gradient` 椭圆叠加，色标包括 `rgba(120,40,200,0.40)` / `rgba(0,180,255,0.30)` / `rgba(0,255,180,0.20)`，`background-size: 200% 200%`\n\n### Animations\n- `@keyframes auroraDrift`: 极光漂移 — `0% { background-position: 0% 50%; } 50% { background-position: 100% 20%; } 100% { background-position: 50% 100%; }`，`20s ease-in-out infinite alternate`，应用于 `body`\n\n### Required CSS Classes\n- `.aurora-card`: 毛玻璃卡片 — `background: rgba(255,255,255,0.05); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid var(--card-border); border-radius: 16px; padding: clamp(20px, 3vw, 36px)`\n- `.aurora-slide`: 极光幻灯片容器 — `display: flex; flex-direction: column; align-items: center; justify-content: center; padding: clamp(2rem, 5vw, 5rem)`\n- `.aurora-content`: 内容容器 — `width: 100%; max-width: min(90vw, 800px)`\n- `.aurora-title`: 标题 — `font-size: clamp(2.5rem, 7vw, 6rem); font-weight: 700; letter-spacing: -0.03em; color: #ffffff`\n- `.aurora-subtitle`: 副标题 — `font-size: clamp(1rem, 2vw, 1.4rem); color: rgba(255,255,255,0.70)`\n- `.aurora-divider`: 分隔线 — `height: 1px; background: rgba(0,245,196,0.3); border: none; margin: 16px 0`\n- `.aurora-accent` / `.aurora-emphasis`: 强调文字 — `color: #00f5c4; font-weight: 500/600`\n- `.aurora-badge`: 徽章 — `display: inline-flex; padding: 4px 14px; background: rgba(0,245,196,0.12); border: 1px solid rgba(0,245,196,0.30); border-radius: 9999px; color: #00f5c4; font-size: clamp(0.65rem, 1vw, 0.75rem); text-transform: uppercase; letter-spacing: 0.12em`\n- `.pill`: 同 `.aurora-badge` 的别名\n- `.aurora-stat`: 渐变数字 — 使用 `-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-image: linear-gradient(135deg, #00f5c4, #00b4ff)`\n- `.reveal`: 淡入动画 — `opacity: 0; transform: translateY(20px); transition: opacity 0.7s cubic-bezier(0.16,1,0.3,1), transform 0.7s cubic-bezier(0.16,1,0.3,1)`\n\n### Allowed Components\n- Audit coverage: .app\n\n### Background Rule\n`.slide` 不设 `background`，完全透出 `body` 上的 mesh gradient。`body` 使用 `background-color: #0a0a1a` + 多层 `radial-gradient` + `auroraDrift` 动画。所有幻灯片共享同一动态背景。\n\n### Style-Specific Rules\n- 卡片必须使用 `backdrop-filter: blur(12px)` 实现毛玻璃效果\n- 不使用 Google Fonts 以外的字体（标题用 Space Grotesk，正文用 DM Sans）\n- 强调色 `#00f5c4`（青绿）用于徽章、分隔线、数字\n- 所有变体均为深色背景，不使用白色背景\n- 卡片 `border-radius: 16px`，边框 `1px solid rgba(255,255,255,0.10)`\n- 英雄页（hero）文字直接放在渐变上，不用卡片包裹\n- 激活卡片使用更强边框 `border-color: rgba(0,245,196,0.40)` + 更高不透明度背景 `rgba(255,255,255,0.08)`\n\n### Signature Checklist\n- [ ] body mesh gradient（3-4 个 radial-gradient，可见色彩混合）\n- [ ] @keyframes auroraDrift（20s 循环，可见运动）\n- [ ] .aurora-card 毛玻璃卡片（backdrop-filter: blur(12px)）\n- [ ] .aurora-slide 居中容器\n- [ ] .aurora-title 白色大标题（letter-spacing: -0.03em）\n- [ ] .aurora-badge 青绿徽章（rgba(0,245,196,0.12) 背景）\n- [ ] .aurora-divider 青绿分隔线\n- [ ] .aurora-stat 渐变文字数字（background-clip: text）\n- [ ] 青绿色 #00f5c4 至少一处使用\n- [ ] 无白色背景变体\n- [ ] reveal 动画使用 cubic-bezier(0.16,1,0.3,1)\n\n---\n\n## Components\n\n```css\n/* Light glassmorphism card */\n.aurora-card {\n    background: rgba(255,255,255,0.05);\n    backdrop-filter: blur(12px);\n    -webkit-backdrop-filter: blur(12px);\n    border: 1px solid rgba(255,255,255,0.1);\n    border-radius: 12px;\n    padding: clamp(16px, 2.5vw, 24px);\n}\n\n/* Accent divider line */\n.aurora-divider {\n    height: 1px;\n    background: rgba(0,245,196,0.3);\n    border: none;\n    margin: 16px 0;\n}\n\n/* Emphasis text */\n.aurora-emphasis {\n    color: #00f5c4;\n    font-weight: 500;\n}\n```\n\n---\n\n## Animation\n\n```css\n/* Entrance: elements fade+rise with stagger */\n.reveal {\n    opacity: 0;\n    transform: translateY(20px);\n    transition: opacity 0.7s cubic-bezier(0.16,1,0.3,1),\n                transform 0.7s cubic-bezier(0.16,1,0.3,1);\n}\n.slide.visible .reveal { opacity: 1; transform: translateY(0); }\n.reveal:nth-child(1) { transition-delay: 0.05s; }\n.reveal:nth-child(2) { transition-delay: 0.15s; }\n.reveal:nth-child(3) { transition-delay: 0.25s; }\n.reveal:nth-child(4) { transition-delay: 0.35s; }\n```\n\n---\n\n## Style Preview Checklist\n\nWhen generating a preview for style selection, the preview MUST show:\n- [ ] Animated aurora gradient background (visible motion within 3 seconds)\n- [ ] Cyan-green `#00f5c4` accent on at least one element\n- [ ] Subtle card with `backdrop-filter: blur(12px)`\n- [ ] White headline with `letter-spacing: -0.02em`\n\n---\n\n## Best For\n\nProduct launches · VC pitch decks · SaaS marketing · AI / tech trend reports · Anything that should feel \"Linear / Vercel-level\" polished\n\nFile v2.24.3:references/base-css.md\n\n# Base CSS Reference\n\nRead this file during Phase 3 generation for all non-Blue-Sky styles.\nContains: required viewport CSS, content density limits, and CSS gotchas.\n\n---\n\n## ⚠ Viewport Fitting (Non-Negotiable)\n\nEvery slide must equal exactly one viewport height. No scrolling within slides, ever.\n\n### Required Base CSS (Include in ALL Presentations)\n\n```css\n/* ===========================================\n   VIEWPORT FITTING: MANDATORY\n   =========================================== */\n\nhtml {\n    height: 100%;\n    overflow-x: hidden;\n    scroll-snap-type: y mandatory;\n    /* scroll-behavior intentionally omitted — JS scrollIntoView({behavior:'smooth'}) handles animation;\n       CSS scroll-behavior + JS smooth scroll = double animation = jitter */\n}\n\n/* Each slide = exact viewport height */\n.slide {\n    width: 100vw;\n    height: 100vh;\n    height: 100dvh; /* Dynamic viewport for mobile */\n    overflow: hidden; /* CRITICAL: No overflow ever */\n    scroll-snap-align: start;\n    display: flex;\n    flex-direction: column;\n    position: relative;\n}\n\n.slide-content {\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    max-height: 100%;\n    overflow: hidden;\n    padding: var(--slide-padding);\n}\n\n/* ALL sizes use clamp() - scales with viewport */\n:root {\n    --title-size: clamp(1.5rem, 5vw, 4rem);\n    --h2-size: clamp(1.25rem, 3.5vw, 2.5rem);\n    --body-size: clamp(0.75rem, 1.5vw, 1.125rem);\n    --small-size: clamp(0.65rem, 1vw, 0.875rem);\n    --slide-padding: clamp(1rem, 4vw, 4rem);\n    --content-gap: clamp(0.5rem, 2vw, 2rem);\n}\n\n.card, .container {\n    max-width: min(90vw, 1000px);\n    max-height: min(80vh, 700px);\n}\n\nimg {\n    max-width: 100%;\n    max-height: min(50vh, 400px);\n    object-fit: contain;\n}\n\n.grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr));\n    gap: clamp(0.5rem, 1.5vw, 1rem);\n}\n\n/* Responsive breakpoints - height-based */\n@media (max-height: 700px) {\n    :root {\n        --slide-padding: clamp(0.75rem, 3vw, 2rem);\n        --content-gap: clamp(0.4rem, 1.5vw, 1rem);\n        --title-size: clamp(1.25rem, 4.5vw, 2.5rem);\n    }\n}\n\n@media (max-height: 600px) {\n    :root {\n        --slide-padding: clamp(0.5rem, 2.5vw, 1.5rem);\n        --title-size: clamp(1.1rem, 4vw, 2rem);\n        --body-size: clamp(0.7rem, 1.2vw, 0.95rem);\n    }\n    .nav-dots, .keyboard-hint, .decorative { display: none; }\n}\n\n@media (max-height: 500px) {\n    :root {\n        --slide-padding: clamp(0.4rem, 2vw, 1rem);\n        --title-size: clamp(1rem, 3.5vw, 1.5rem);\n        --body-size: clamp(0.65rem, 1vw, 0.85rem);\n    }\n}\n\n@media (max-width: 600px) {\n    .grid { grid-template-columns: 1fr; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n    *, *::before, *::after {\n        animation-duration: 0.01ms !important;\n        transition-duration: 0.2s !important;\n    }\n}\n```\n\n### Content Density Limits\n\n| Slide Type | Maximum |\n|------------|---------|\n| Title slide | 1 heading + 1 subtitle |\n| Content slide | 1 heading + 4-6 bullets |\n| Feature grid | 1 heading + 6 cards max (2×3 or 3×2) |\n| Code slide | 1 heading + 8-10 lines |\n| Quote slide | 1 quote (3 lines max) + attribution |\n| Image slide | 1 heading + 1 image (max 60vh height) |\n\nWhen in doubt → split the slide.\n\n---\n\n## DO NOT USE (Generic AI Patterns)\n\n**Fonts:** Inter, Roboto, Arial, system fonts as display typeface\n\n**Colors:** `#6366f1` (generic indigo), purple gradients on white\n\n**Layouts:** Everything centered, generic hero sections, identical card grids\n\n**Decorations:** Realistic illustrations, gratuitous glassmorphism, drop shadows without purpose\n\n---\n\n## CSS Gotchas\n\n### Negating CSS Functions\n\n**WRONG — silently ignored by browsers:**\n```css\nright: -clamp(28px, 3.5vw, 44px);   /* ❌ Invalid! */\nmargin-left: -min(10vw, 100px);      /* ❌ Invalid! */\n```\n\n**CORRECT — wrap in `calc()`:**\n```css\nright: calc(-1 * clamp(28px, 3.5vw, 44px));  /* ✅ */\nmargin-left: calc(-1 * min(10vw, 100px));     /* ✅ */\n```\n\nCSS does not allow a leading `-` before `clamp()`, `min()`, `max()`. The browser silently discards the declaration with no console error — the element simply appears in the wrong position.\n\n### Content Overflow\n\n1. Check slide has `overflow: hidden`\n2. Reduce content — split into multiple slides\n3. Ensure all fonts use `clamp()` not fixed `px`/`rem`\n4. Check images have `max-height: min(50vh, 400px)`\n\n### Viewport Checklist\n\n- [ ] Every `.slide` has `height: 100vh; height: 100dvh; overflow: hidden;`\n- [ ] All font sizes use `clamp(min, preferred, max)`\n- [ ] No negated CSS functions (use `calc(-1 * clamp(...))`)\n- [ ] Breakpoints at 700px, 600px, 500px heights\n- [ ] Images have `max-height` constraints\n- [ ] Content respects density limits\n\n---\n\n## Universal UI Elements (Mandatory for ALL Styles)\n\nThese elements MUST appear in every generated HTML, regardless of whether the style file explicitly defines them. Style files may override colors/positions but cannot omit them.\n\n### Brand Mark\n\nFixed identifier in top-left corner. Always visible (z-index: 1000).\n\n```css\n#brand-mark {\n    position: fixed;\n    top: 20px;\n    left: 28px;\n    font-weight: 800;\n    font-size: 15px;\n    z-index: 1000;\n    /* color and font-family from style file's accent color and display font */\n}\n```\n\n```html\n<span id=\"brand-mark\">slide-creator</span>\n```\n\n### Slide Number Label\n\nPage indicator, bottom-right of each slide. Two variants for light/dark backgrounds.\n\n```css\n.slide-num-label {\n    position: absolute;\n    bottom: 28px;\n    right: 36px;\n    font-size: 11px;\n    font-weight: 500;\n    color: rgba(0,0,0,0.18);\n}\n.slide-num-label.light { color: rgba(255,255,255,0.2); }\n```\n\n### Navigation Dots\n\nRight-side dot navigation. Active dot scaled up.\n\n```css\n.nav-dots {\n    position: fixed; right: 1.5rem; top: 50%; transform: translateY(-50%);\n    display: flex; flex-direction: column; gap: 8px; z-index: 100;\n}\n.nav-dots button {\n    width: 8px; height: 8px; border-radius: 50%; border: none; cursor: pointer;\n    transition: all 0.3s;\n}\n```\n\n### Progress Bar\n\nTop-edge progress indicator. Color from style accent.\n\n```css\n.progress-bar {\n    position: fixed; top: 0; left: 0; height: 3px;\n    background: var(--accent); width: 0%; z-index: 100; transition: width 0.3s ease;\n}\n```\n\n### Per-Slide CSS Pattern\n\nEach slide MUST have `id=\"slide-N\"` (1-indexed). Layout direction, panel backgrounds, and slide-specific overrides go in `<style>` via `#slide-N` selectors — never inline.\n\n```css\n/* Per-slide layout */\n#slide-1 { flex-direction: row; }\n#slide-1 .left-panel { background: #fff; }\n#slide-1 .slide-num-label { color: rgba(255,255,255,0.12); }\n\n#slide-2 { flex-direction: column; }\n#slide-2 .top-panel { background: #fff; }\n```\n\n```html\n<section class=\"slide\" id=\"slide-1\" data-notes=\"...\">\n    <div class=\"left-panel\">...</div>\n    <div class=\"right-panel\">...</div>\n</section>\n```\n\nFile v2.24.3:references/bold-signal.md\n\n# Bold Signal — Style Reference\n\nConfident, bold, modern, high-impact. Dark canvas with colored card focal points.\n\n---\n\n## Colors\n\n```css\n:root {\n    --bg-primary: #1a1a1a;\n    --bg-gradient: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 50%, #1a1a1a 100%);\n    --card-bg: #FF5722;\n    --text-primary: #ffffff;\n    --text-on-card: #ffffff;\n}\n```\n\n---\n\n## Background\n\n```css\nbody {\n    background: var(--bg-gradient);\n    font-family: \"Space Grotesk\", -apple-system, sans-serif;\n}\n\n/* Ghost section number as texture */\n.bold-ghost-number {\n    position: absolute;\n    font-size: clamp(6rem, 12vw, 10rem);\n    font-family: \"Archivo Black\", sans-serif;\n    color: var(--card-bg);\n    opacity: 0.08;\n    pointer-events: none;\n    user-select: none;\n}\n```\n\n---\n\n## Typography\n\n```css\n/* Display */\n@import url('https://fonts.googleapis.com/css2?family=Archivo+Black&display=swap');\n@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500&display=swap');\n\n.bold-title {\n    font-family: \"Archivo Black\", sans-serif;\n    font-size: clamp(32px, 6vw, 72px);\n    font-weight: 900;\n    color: var(--text-primary);\n    line-height: 1.0;\n    letter-spacing: -0.02em;\n}\n\n.bold-body {\n    font-family: \"Space Grotesk\", sans-serif;\n    font-size: clamp(14px, 1.5vw, 18px);\n    font-weight: 400;\n    color: rgba(255,255,255,0.6);\n    line-height: 1.6;\n}\n\n.bold-label {\n    font-size: clamp(10px, 1.1vw, 12px);\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.12em;\n    color: rgba(255,255,255,0.4);\n}\n\n/* Bullet marker */\n.bold-bullet { color: var(--card-bg); }\n```\n\n---\n\n## Components\n\n```css\n/* Hero card — colored focal point */\n.bold-hero-card {\n    background: var(--card-bg);\n    border-radius: 8px;\n    padding: clamp(24px, 4vw, 48px);\n    color: var(--text-on-card);\n}\n\n/* Section number badge */\n.bold-section-num {\n    font-family: \"Archivo Black\", sans-serif;\n    font-size: clamp(14px, 1.8vw, 20px);\n    color: var(--card-bg);\n    opacity: 0.9;\n}\n\n/* Bullet point with card-colored marker */\n.bold-bullet::before {\n    content: '▸';\n    color: var(--card-bg);\n    margin-right: 0.5em;\n}\n\n/* Timeline step */\n.bold-step {\n    border: 2px solid var(--card-bg);\n    border-radius: 4px;\n    padding: 8px 16px;\n    text-align: center;\n    font-size: clamp(12px, 1.3vw, 16px);\n}\n.bold-step.active {\n    background: var(--card-bg);\n    color: var(--text-on-card);\n}\n```\n\n---\n\n## Named Layout Variations\n\n### 1. Hero Card\n\nLarge colored card (`--card-bg`) occupies 60% of width, centered vertically, anchored left. Card: section number `01` small top-left, headline 2–3 lines. \n\nArchive v2.24.2: 225 files, 1008459 bytes\n\nFiles: _config.yml (307b), check-doc-sync.py (5618b), demos/ai-native-org-transformation-guide-zh.html (68232b), demos/ai-native-work-hub-blue-sky-zh.html (58268b), demos/ai-native-work-hub-data-story-zh.html (53323b), demos/ai-native-work-hub-enterprise-dark-zh.html (64027b), demos/ai-native-work-hub-swiss-modern-zh.html (53482b), demos/aurora-mesh-en.html (40681b), demos/aurora-mesh-zh.html (43375b), demos/blue-sky-en.html (37435b), demos/blue-sky-zh.html (62128b), demos/bold-signal-en.html (38005b), demos/bold-signal-zh.html (56155b), demos/chinese-chan-en.html (32254b), demos/chinese-chan-zh.html (32888b), demos/creative-voltage-en.html (35884b), demos/creative-voltage-zh.html (44971b), demos/dark-botanical-en.html (42880b), demos/dark-botanical-zh.html (41978b), demos/data-story-en.html (42780b), demos/data-story-zh.html (48716b), demos/electric-studio-en.html (42774b), demos/electric-studio-zh.html (43918b), demos/enterprise-dark-en.html (43173b), demos/enterprise-dark-zh.html (49285b), demos/glassmorphism-en.html (43152b), demos/glassmorphism-zh.html (54167b), demos/life-meaning-chinese-chan-regenerated-zh.html (43477b), demos/mode-paths/auto-BRIEF.json (3502b), demos/mode-paths/auto-PLANNING.md (2871b), demos/mode-paths/intent-broker-auto-BRIEF.json (3764b), demos/mode-paths/intent-broker-auto-PLANNING.md (4108b), demos/mode-paths/intent-broker-auto.html (40523b), demos/mode-paths/intent-broker-polish-BRIEF.json (5011b), demos/mode-paths/intent-broker-polish-PLANNING.md (6265b), demos/mode-paths/intent-broker-polish.html (42301b), demos/mode-paths/polish-BRIEF.json (4945b), demos/mode-paths/polish-PLANNING.md (5850b), demos/modern-newspaper-en.html (42561b), demos/modern-newspaper-zh.html (52210b), demos/neo-brutalism-en.html (38857b), demos/neo-brutalism-zh.html (49076b), demos/neo-retro-dev-en.html (41923b), demos/neo-retro-dev-zh.html (56220b), demos/neon-cyber-en.html (42281b), demos/neon-cyber-zh.html (58820b), demos/notebook-tabs-en.html (42041b), demos/notebook-tabs-zh.html (70230b), demos/org-phase-change-ai-native-org-swiss-modern-zh.html (55805b), demos/paper-ink-en.html (47866b), demos/paper-ink-zh.html (54438b), demos/pastel-geometry-en.html (41921b), demos/pastel-geometry-zh.html (56646b), demos/slide-creator-intro.html (57872b), demos/split-pastel-en.html (41849b), demos/split-pastel-zh.html (47936b), demos/swiss-modern-en.html (41800b), demos/swiss-modern-zh.html (63817b), demos/terminal-green-en.html (33780b), demos/terminal-green-zh.html (43031b), demos/vintage-editorial-en.html (42429b), demos/vintage-editorial-zh.html (43569b), evals/failure-map.md (1257b), evals/late-context/cases/lc-001-basic-late-trigger/context.json (548b), evals/late-context/cases/lc-001-basic-late-trigger/expectations.json (334b), evals/late-context/cases/lc-001-basic-late-trigger/expected-brief.json (270b), evals/late-context/cases/lc-002-style-switch-near-end/context.json (465b), evals/late-context/cases/lc-002-style-switch-near-end/expectations.json (254b), evals/late-context/cases/lc-002-style-switch-near-end/expected-brief.json (141b), evals/late-context/cases/lc-003-report-request-negative/context.json (340b), evals/late-context/cases/lc-003-report-request-negative/expectations.json (110b), evals/late-context/cases/lc-003-report-request-negative/expected-brief.json (33b), evals/late-context/cases/lc-004-core-runtime-guard/context.json (658b), evals/late-context/cases/lc-004-core-runtime-guard/expectations.json (337b), evals/late-context/cases/lc-004-core-runtime-guard/expected-brief.json (268b), evals/late-context/cases/lc-005-preset-metadata-bypass/context.json (594b), evals/late-context/cases/lc-005-preset-metadata-bypass/expectations.json (421b), evals/lat...","readmeExcerpt":"Skill: Slide Creator Owner: kaisersong Summary: 生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。 Tags: latest:2.27.0 Version history: v2.27.0 | 2026-05-17T10:06:32.131Z | user Add captured-run skill eval baselines, comparator tooling, preset release gate integration, and bilingual eval documentation. v2.24.3 | 2026-04-30T14:46:21.287Z | auto kai-slide-creator 2.24.3 - 新增支持 CLI/交互式链路下 eval 评测产出（deck 质量 JSON","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"python3 -m pytest tests/ -q"},{"language":"text","snippet":"2260 passed, 132 skipped in 37.25s"},{"language":"bash","snippet":"python3 scripts/run-skill-evals.py \\\n  --runner fixture \\\n  --artifact-dir /private/tmp/slide-skill-eval-runs-rubric \\\n  --format json \\\n  --json-out /private/tmp/slide-skill-evals-rubric.json"},{"language":"bash","snippet":"python3 scripts/run-skill-evals.py \\\n  --runner codex \\\n  --case-id explicit-generate \\\n  --run-live \\\n  --artifact-dir .tmp-run/skill-live-codex \\\n  --format json \\\n  --json-out /private/tmp/slide-skill-live-codex-explicit.json"},{"language":"bash","snippet":"python3 scripts/preset_release_gate.py \\\n  --output-dir /private/tmp/slide-preset-release-gate \\\n  --report-path /private/tmp/slide-preset-release-gate/report.json \\\n  --summary-md /private/tmp/slide-preset-release-gate/summary.md \\\n  --include-skill-evals \\\n  --skill-evals-runner fixture \\\n  --skill-evals-json-out /private/tmp/slide-preset-release-gate/skill-evals.json"},{"language":"bash","snippet":"python3 scripts/preset_release_gate.py \\\n  --output-dir /private/tmp/slide-preset-release-gate-candidate \\\n  --baseline-dir evals/baselines/2026-05-17/preset-surface-phase1 \\\n  --require-baseline \\\n  --report-path /private/tmp/slide-preset-release-gate-candidate/report.json \\\n  --summary-md /private/tmp/slide-preset-release-gate-candidate/summary.md \\\n  --include-skill-evals \\\n  --skill-evals-runner fixture \\\n  --skill-evals-json-out /private/tmp/slide-preset-release-gate-candidate/skill-evals.json"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: kai-slide-creator\ndescription: 生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。\nversion: 2.27.0\nmetadata: {\"openclaw\":{\"emoji\":\"🎞\",\"os\":[\"darwin\",\"linux\",\"windows\"],\"homepage\":\"https://github.com/kaisersong/slide-creator\",\"requires\":{\"bins\":[\"python3\"]},\"install\":[]}}\n---\n\n# kai-slide-creator\n\n生成零依赖 HTML 演示文稿，纯浏览器运行。主路径是 IR-first：`user prompt → BRIEF.json → HTML → validate`。\n\n## 安装\n\n**Claude Code:** 告诉 Claude「安装 https://github.com/kaisersong/slide-creator」  \n**OpenClaw:** `clawhub install kai-slide-creator`\n\n## 使用方式\n\n`/slide-creator ...` 是 Claude/OpenClaw 的 slash 技能调用，不是 bash 命令。\n\n**规划深度：**\n- `自动` (Auto) — 快速出稿，约 3-6 分钟\n- `精修` (Polish) — 深度规划，约 8-15 分钟，自动执行 Review\n\n**内容类型 → 风格推荐：**\n\n| 内容类型 | 推荐风格 |\n|---|---|\n| 数据报告 / KPI 看板 | Data Story、Enterprise Dark、Swiss Modern |\n| 商业路演 / VC Deck | Bold Signal、Aurora Mesh、Enterprise Dark |\n| 产品发布 / SaaS | Blud Sky、Aurora Mesh、Glassmorphism、Electric Studio |\n| 开发工具 / API 文档 | Terminal Green、Neon Cyber、Neo-Retro Dev Deck |\n| 研究 / 思想领导力 | Modern Newspaper、Paper & Ink、Swiss Modern |\n| 创意 / 个人品牌 | Vintage Editorial、Split Pastel、Neo-Brutalism |\n| 哲学 / 思想 | Chinese chan|\n| 咨询报告 / 战略方案 | Strategy Consulting、Enterprise Dark、Swiss Modern |\n\n\n## 命令路由\n\n`自动` (Auto) — 快速出稿 | `精修` (Polish) — 深度规划，自动执行 Review\n\n| 命令 | 加载内容 | 行为 |\n|------|----------|------|\n| `--plan [prompt]` | `references/brief-template.json`；如用户指定了 custom theme，同步加载 `themes/<name>/reference.md` | 创建 `BRIEF.json`；仅在用户明确要求时额外派生 `PLANNING.md` |\n| `--generate` | SKILL.md + 已选风格文件（内置 `references/*.md` / `blue-sky-starter.html`；自定义 `themes/<name>/reference.md`）+ composition 源 + `references/title-quality.md` + `references/html-template.md` + `references/js-engine.md` + `references/base-css.md` + `references/impeccable-anti-patterns.md` | 从 `BRIEF.json` 生成 HTML，并执行写入前门禁；如用户显式要求 `eval`，同步产出单 deck 评测 JSON |\n| `--review [file.html]` | `references/review-checklist.md` + 目标 HTML | 执行 17 项检查点 → 确认窗口 → 修复/报告 |\n| 无 flag (交互式) | `references/workflow.md` + 其他按需 | 遵循 Phase 0-5 |\n| 直接给内容 + 风格 | 同 `--generate` | 先落一个有效 `BRIEF.json`，再走同一个 deterministic renderer 与 strict 写入前门禁；禁止手拼最终 HTML |\n\n**渐进式披露：** 每个命令只加载所需文件。`--plan` 只提炼 IR，不接触 CSS。\n\n## 核心规则（按优先级）\n\n1. **风格强制**\n   所有颜色、字体、组件、背景、动画、图表色、signature elements 都**必须且只能**来自选中的风格文件。模板里的 `[from style file]` 和示例值只是占位，禁止直接使用。  \n   默认推荐面第一阶段聚焦 4 个 production presets：`Swiss Modern / Enterprise Dark / Data Story / Blue Sky`；**但用户显式指定任意当前 preset 时，必须保留该选择**。support tier 只影响默认推荐优先级，不影响显式指定。\n   Custom theme（`themes/<name>/reference.md`）与内置 preset 同等对待。`BRIEF.json` 的 `style.preset` 支持三种值：内置 preset 名、custom theme 文件夹名、或 `themes/<name>/reference.md` 路径。代码层会自动归一化解析。  \n   **Swiss Modern 额外要求 canonical export path**：面板保持 `.slide` direct child，token 保持 `--bg/--text/--red`，使用 canonical 类（`.left-panel/.right-panel/.stat-row/.cta-block`），并写入 `data-export-role`；不得生成 `.left-col/.right-col` 或 `--bg-primary/--accent` 这类兼容别名。\n\n2. **叙事弧线**\n   先锁内容结构，再锁 composition route。每页都要有明确 page role、不同布局意图和足够的信息推进；不要先拼播放/编辑壳子，再回头补故事。内部 route 名称属于实现"},{"path":"evals/baselines/2026-05-17/README.md","content":"# Slide-Creator Eval Baseline — 2026-05-17\n\nThis directory captures the current green eval baseline after adding captured-run\nskill evals and fixing current demo fixture gates.\n\n## Test Baseline\n\nCommand:\n\n```bash\npython3 -m pytest tests/ -q\n```\n\nResult:\n\n```text\n2260 passed, 132 skipped in 37.25s\n```\n\n## Captured-Run Skill Eval Baseline\n\nFile: `skill-evals/skill-evals.json`\n\nCommand:\n\n```bash\npython3 scripts/run-skill-evals.py \\\n  --runner fixture \\\n  --artifact-dir /private/tmp/slide-skill-eval-runs-rubric \\\n  --format json \\\n  --json-out /private/tmp/slide-skill-evals-rubric.json\n```\n\nSummary:\n\n| Metric | Value |\n|---|---:|\n| Total cases | 6 |\n| Passed | 6 |\n| Failed | 0 |\n| Incomplete | 0 |\n| Average score | 100.00 |\n| Outcome avg | 25.00 |\n| Process avg | 25.00 |\n| Style avg | 25.00 |\n| Efficiency avg | 25.00 |\n\nCase scores:\n\n| Case | Total | Outcome | Process | Style | Efficiency |\n|---|---:|---:|---:|---:|---:|\n| explicit-generate | 100 | 25 | 25 | 25 | 25 |\n| implicit-exec-update | 100 | 25 | 25 | 25 | 25 |\n| contextual-product-launch | 100 | 25 | 25 | 25 | 25 |\n| boundary-report-to-deck | 100 | 25 | 25 | 25 | 25 |\n| negative-report | 100 | 25 | 25 | 25 | 25 |\n| negative-html-export | 100 | 25 | 25 | 25 | 25 |\n\nPositive fixture cases use checked-in `*-style-rubric.json` files so a missing\nstyle rubric now marks the case `eval_complete: false` and fails the eval.\n\n## Live Codex Captured-Run Baseline\n\nFile: `live-codex/explicit-generate.json`\n\nArtifacts: `live-codex/explicit-generate/`\n\nCommand:\n\n```bash\npython3 scripts/run-skill-evals.py \\\n  --runner codex \\\n  --case-id explicit-generate \\\n  --run-live \\\n  --artifact-dir .tmp-run/skill-live-codex \\\n  --format json \\\n  --json-out /private/tmp/slide-skill-live-codex-explicit.json\n```\n\nThe live run produced `deck.html`, `brief.json`, raw trace, and normalized\ntrace. It was then rescored with an external `style-rubric.json` artifact.\n\nSummary:\n\n| Metric | Value |\n|---|---:|\n| Total cases | 1 |\n| Passed | 1 |\n| Failed | 0 |\n| Incomplete | 0 |\n| Average score | 89.00 |\n| Outcome avg | 25.00 |\n| Process avg | 25.00 |\n| Style avg | 24.00 |\n| Efficiency avg | 15.00 |\n| Shell commands | 35 |\n| Input tokens | 1,216,207 |\n| Output tokens | 10,285 |\n| Wall time | 221,990 ms |\n\nCase scores:\n\n| Case | Total | Outcome | Process | Style | Efficiency | Failures |\n|---|---:|---:|---:|---:|---:|---|\n| explicit-generate | 89 | 25 | 25 | 24 | 15 | `efficiency.shell_command_count_over_budget`, `efficiency.input_tokens_over_budget` |\n\n## Preset Surface Release Gate Baseline\n\nDirectory: `preset-surface-phase1/`\n\nThis directory is a reusable `--baseline-dir` for non-regression comparison.\nIt includes each case's `deck.html`, `packet.json`, `quality-report.json`, and\nbrowser title report where applicable.\n\nCommand:\n\n```bash\npython3 scripts/preset_release_gate.py \\\n  --output-dir /private/tmp/slide-preset-release-gate \\\n  --report-path /private/tmp/slide-preset-release-gate/report.json \\\n  --summary-md /private/tmp/s"},{"path":"evals/late-context/core-md-guard/README.md","content":"# Core-MD Guard Late-Context Eval Notes\n\nUse these cases to measure whether guard hardening improved real late-context reliability.\n\nPrimary goals:\n\n- catch omitted shared runtime on non-Blue-Sky decks\n- prevent `data-preset` omission from bypassing strict validate\n- preserve the Blue Sky control path\n- confirm style-heavy presets still retain signature layers under long context\n\nSuggested before/after metrics:\n\n- guard catch rate\n- false-positive rate\n- late-context contract pass rate\n- failure localization quality\n\nCase IDs live in `../cases/` and are listed in `../manifest.json`."},{"path":"evals/late-context/low-context-safe-generate/README.md","content":"# Low-Context-Safe Generate Eval Notes\n\nUse these cases to prove the optimization improves robustness without flattening rich-context output.\n\nThis eval layer should answer two questions:\n\n1. Does the pipeline stay stable when context is noisy or scarce?\n2. Does the pipeline avoid making strong-context decks bland in order to get that stability?\n\nRecommended protocol:\n\n- compare current pipeline as control vs low-context-safe pipeline as treatment\n- use the same case set, same model, and same settings\n- run low-context buckets at least 5 times each\n- run rich-context benchmarks at least 3 times each\n\nRecommended buckets:\n\n- same-BRIEF parity pair\n- sparse-BRIEF fallback\n- invalid BRIEF fail-closed\n- high-context rich benchmark\n- core runtime/style guard cases from `core-md-guard/`\n\nRecommended diagnostics:\n\n- `quality_tier`\n- `strict_pass_first_try`\n- `repair_rounds`\n- `route_drift`\n- `layout_variety`\n- `avg_component_kinds_per_slide`\n- `style_signature_coverage`\n- `chrome_leak`\n- `content_occlusion_risk`\n- `numeric_faithfulness`\n- `source_fact_coverage`\n- `narrative_role_coverage`\n- `minimal_slide_ratio`\n- `max_minimal_slide_run`\n- `latency_ms.packet`\n- `latency_ms.assemble`\n- `latency_ms.validate`\n\nRecommended executable entrypoint:\n\n- `python3 scripts/eval-quality.py <deck.html> --brief <BRIEF.json> --source <source.md>`\n\nThis quality layer exists because a deck can pass `strict validate` and still fail the user:\n\n- runtime chrome leaks into the slide surface\n- fixed panels occlude body copy\n- chart values are invented instead of sourced\n- narrative rhythm collapses into repeated title-only scaffolds\n\nSuccess should be judged by both:\n\n- stronger low-context stability\n- no meaningful regression on rich-context benchmark cases"},{"path":"evals/preset-surface-phase1/README.md","content":"# Preset Surface Phase 1 Eval\n\nThis suite exists to prove two things after preset-surface optimization:\n\n1. The default quality investment in the core presets actually improved output quality.\n2. Narrowing the recommendation surface did not silently break the visible support surface.\n\n## Buckets\n\n- `core-enterprise-dark-render`\n- `core-swiss-modern-render`\n- `core-data-story-render`\n\nThese are the **deterministic-core** cases. They render from the current code path and are the real uplift benchmark set.\n\n- `support-blue-sky-fixture`\n- `support-paper-ink-fixture`\n\nThese are the **support-surface-smoke** cases. Blue Sky and Paper & Ink are still evaluated from known-good HTML fixtures because the deterministic BRIEF renderer currently only supports `Swiss Modern / Enterprise Dark / Data Story`.\n\n## Why Blue Sky Is Fixture-Only\n\n`render_from_brief()` in [scripts/low_context.py](/Users/song/projects/slide-creator/scripts/low_context.py) currently raises for non-deterministic presets outside the core three. Blue Sky remains a special starter path, so it should stay in support-surface smoke until a deterministic renderer exists.\n\n## Why Paper & Ink Is Fixture-Only\n\n`Paper & Ink` is now back in the green support-surface suite, but still as a fixture case rather than a deterministic render case.\n\n- `demos/paper-ink-zh.html` now passes `python3 tests/validate.py --strict`\n- the representative editorial fixture now carries the current shared runtime, watermark injection, and title-balance fixes\n- the preset still does not have a deterministic BRIEF renderer, so it remains support-surface smoke rather than core-render benchmark coverage\n\n## Recommended Workflow\n\nBaseline run:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-baseline\n```\n\nCandidate run with non-regression comparison:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-candidate \\\n  --baseline-dir /tmp/preset-surface-baseline\n```\n\nDirect suite run with browser-title QA:\n\n```bash\npython3 scripts/run_evals.py \\\n  evals/preset-surface-phase1/manifest.json \\\n  --output-dir /tmp/preset-surface-candidate \\\n  --baseline-dir /tmp/preset-surface-baseline \\\n  --browser-titles\n```\n\n`browser-title-composition` is now a required title gate for every phase-1 case, so browser-backed title QA is part of the formal green path rather than an optional diagnostic.\n\nRelease gate wrapper:\n\n```bash\npython3 scripts/preset_release_gate.py \\\n  --output-dir /tmp/preset-surface-gate \\\n  --baseline-dir /tmp/preset-surface-baseline \\\n  --require-baseline\n```\n\nThe release gate wrapper auto-enables browser title QA whenever the suite manifest contains `required_title_gates`, so the wrapper command above is sufficient for the formal phase-1 gate.\n\n## What Counts As Quality Uplift\n\nFor the deterministic-core cases:\n\n- strict validate still passes\n- `chrome-hidden-by-default` and `no-cont"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。 Skill: Slide Creator Owner: kaisersong Summary: 生成HTML演示文稿/幻灯片 — 22 种风格模版，播放/演讲者模式。适用于路演、产品发布、技术分享、方案宣讲等场景。 Tags: latest:2.27.0 Version history: v2.27.0 | 2026-05-17T10:06:32.131Z | user Add captured-run skill eval baselines, comparator tooling, preset release gate integration, and bilingual eval documentation. v2.24.3 | 2026-04-30T14:46:21.287Z | auto kai-slide-creator 2.24.3 - 新增支持 CLI/交互式链路下 eval 评测产出（deck 质量 JSON","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1293,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T14:10:46.728Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T14:10:46.728Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T19:00:35.169Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}