info-funnel
A 3-6 stage decreasing funnel highlighting conversion rates, qualification ratios, and traffic drop-offs. Vertical layout suitable for IG Stories / Xiaohongshu.
1How It Works & Mechanism
The funnel shape is calculated rather than drawn: each section is a div cut into a trapezoid using CSS clip-path polygon, with a lateral shrink amount = 50% × (1 - bottom_width_ratio).
- clip-path 的左右收缩量 = 50% × `(1 - bottom_width_ratio)`, 累计每段比上一段窄
Data formatting is a hard constraint: top tier = 100% baseline, stage conversion rate = current stage / previous stage, cumulative = final stage / top stage, half-width comma thousands separators, percentages rounded to 1 decimal place.
- 每阶转化率 = `当前段 / 上一段`
Pick one of three themes without mixing: klein-blue (default) / sunset-amber / deep-forest; the example uses the full default klein-blue color ramp.
--kb-6: #002FA7;
Strictest output contract in the batch: single-file HTML, inline CSS, no JS, no external CDN / icon libraries / font files, and Inter font is banned.
输出**单文件 HTML**, inline CSS, **不写 JS**(静态图)。**不外链 CDN / 图标库 / 字体文件**。
The template itself is the prompt: the SKILL.md body is read by the loader, assembled with the shared preamble and user content, and passed to the local agent CLI for execution.
prompt = assemblePrompt({ body: skill.body, content, format });
The skill directory is a plain-text asset: the loader reads SKILL.md from disk, and no executable code inside the directory is loaded.
const raw = safeRead(path.join(dir, "SKILL.md"));
The shared preamble is injected before the template, giving highest priority to the rule: 'Templates only define layout/style/palette/typography/component library; quantity is determined by user content.'
【内容驱动数量 — 最高优先级, 覆盖模板里的任何数字】
The shared preamble is injected before the template, giving highest priority to the rule: 'Templates only define layout/style/palette/typography/component library; quantity is determined by user content.'
- **禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何 \`.html\` 文件里。前端直接捕获你的 stdout 文本, 文件落盘由前端负责。
The skill directory is a plain-text asset: the loader reads SKILL.md from disk, and no executable code inside the directory is loaded.
const exampleHtml = safeRead(path.join(dir, "example.html"));
2Core Capabilities
4Recommended Governance & Evidence
- SKILL.md: Pure prompt instructions and rule text; no script execution or external impact
5Second-Pass Verification
- [ok] 外链普查(正文禁 vs 示例) — example.html 零 http(s) 命中,正文「不外链 CDN / 图标库 / 字体文件」成立;字体栈为 PingFang SC / Heiti SC / Helvetica Neue,无 Inter(正文点名禁用)。
- [discrepancy] 共享前言 vs 本模板正文冲突 — 宿主壳 shared.ts 前言要求「在 <head> 中通过 CDN 引入 Tailwind v3 Play (https://cdn.tailwindcss.com) 与所需的 Google Fonts」,与本模板正文「不外链 CDN / 图标库 / 字体文件」直接冲突;该示例选择服从模板正文(零外链)。模型实际服从哪一条取决于权重,用户若要求绝对离线应在内容里重申。
- [ok] clip-path 数值核算 — 正文 5 阶宽度表 100→86→72→58→44→30%,与示例 `.stage[data-i="1"]`…`[data-i="5"]` 的 polygon 逐段一致(93/7 即剩 86%,86/14 即剩 72%,依此类推)。
- [ok] 数据核算(example.md ↔ example.html) — 18.5% = 18,500/100,000、33.5% ≈ 6,200/18,500、23.4% = 1,450/6,200、63.4% = 920/1,450;footer 累计 0.92% = 920/100,000,与正文「累计转化率 = 末段 / 顶段」一致。
- [ok] 字号/样式锁死项抽查 — 示例命中 `aspect-ratio: 9 / 16`(正文锁 9:16 容器)与两处 `font-variant-numeric: tabular-nums`(正文要求数字必须等宽)。
- [ok] 目录资产面普查 — glob 全量:SKILL.md、example.html、example.md;无 scripts/、无 references/、无数据文件、无包管理器清单。
- [ok] 可执行代码普查 — example.html 内 <script> 计数 = 0,fetch/XMLHttpRequest/WebSocket 命中 0;SKILL.md 全篇无脚本或可执行代码。
- [ok] 外链端点普查 — 目录内 URL:https://github.com/JimLiu/baoyu-skills、https://github.com/JimLiu/baoyu-skills#baoyu-infographic(皆为 example.html 产物示例或 frontmatter 出处标注;正文未要求运行期外发)
6Verdict & Scenarios
3b1b1c41295766e9…