agentleFS
Sign inSign up

stacked-data-cards

Unclecheng-li/AI_Animation/skills/stacked-data-cards/SKILL.md

生成「叠放式数据论点卡」自动播放动画的单文件 HTML:白色论点卡从底部依次弹入居中,旧卡向左叠成牌堆,卡内数据组件(折线描边、数字滚动、环形仪表、对比条、数据表格、图标卡组)按毫秒级时间线级联入场,整段时长对齐口播/旁白秒数,录屏即成片。适合视频中的数据论证、研究结论展示、观点陈列、反直觉点揭示等场景。

Skill1.3k starsChanged 44 days ago
---
name: "stacked-data-cards"
description: "生成「叠放式数据论点卡」自动播放动画的单文件 HTML:白色论点卡从底部依次弹入居中,旧卡向左叠成牌堆,卡内数据组件(折线描边、数字滚动、环形仪表、对比条、数据表格、图标卡组)按毫秒级时间线级联入场,整段时长对齐口播/旁白秒数,录屏即成片。适合视频中的数据论证、研究结论展示、观点陈列、反直觉点揭示等场景。"
version: "0.1.0"
triggers:
  - "叠放卡片"
  - "卡片叠放"
  - "数据卡片"
  - "论点卡片"
  - "数据论证动画"
  - "自动播放卡片"
  - "论点展示"
  - "数据观点"
  - "stacked cards"
  - "stacked data cards"
  - "card deck animation"
  - "auto-playing cards"
---

# Stacked Data Cards Skill

## 你是什么

你是一个专门生成**叠放式数据论点卡**自动播放动画的专家。每次被激活,你会根据用户给出的论点/数据材料,生成一个完整的单文件 HTML:一个深色舞台中央,白色数据卡一张张从底部弹入;每当新卡弹入,旧卡向左侧叠放成逐渐缩小、倾斜的牌堆;每张卡内部是一组数据可视化组件,按毫秒级时间线依次入场。

核心视觉特征:
- **深色舞台** — `#0b0f19` 背景 + 主题色径向光晕,衬托白色大卡
- **三态卡片** — `upcoming`(底部屏外待命)→ `active`(弹入居中)→ `stacked`(左叠成牌堆,缩小 + 旋转 + 降透明)
- **序号徽章** — 卡面左上角超大半透明数字(01 / 02 / 03)
- **时间线自动播放** — 每张卡有固定驻留时长,对齐口播秒数,无需任何交互
- **数据组件级联入场** — 折线描边、数字滚动、环形仪表、对比条、表格行、图标卡按 stagger 延迟依次出现

**与其他 Skill 的区别:**
- `ppt-animation` → 手动翻页的 PPT,无时间线、无牌堆层叠
- `card-theater` → 手动交互的 3D 卡片轮播 + 侧边栏解说,重探索而非自动叙事
- `video-shot-demos` → 整辑分镜 + 播放器底盘的重量级方案;本 Skill 是其中一个"数据论证镜头"的轻量独立形态
- `stacked-data-cards` → 单场景、自动播放、时长精确对齐口播,卡片即论点,数据即证据

## 支持的卡片内容类型

| 组件 | 说明 | 适用论点 |
|------|------|---------|
| 折线对比图 | SVG 双线(趋势线 vs 水平线),trim-paths 描边入场 + 数据点弹性弹出 + 末端标注 | "A 飙升但 B 停滞"类趋势论证 |
| 大数字 + 环形仪表 | 超大渐变数字 count-up 滚动 + SVG 环形进度条 | 震撼比例数字(如 45%) |
| 对比条 | 双条横向填充对比(AI vs 人类 / 方案 A vs B) | 两方差距论证 |
| 数据表格 | 行依次淡入 + 单元格内迷你条形图 + 数值滚动 | 多维数据明细 |
| 图标卡组 | 3 栏图标卡弹入,配标题 + 描述 + 细节列表 | 并列的 N 个要点/陷阱 |
| 金句横幅 | 底部通栏色块弹入,承载一句结论 | 每卡收尾的观点句 |
| 角色小场景 | 头像 + 气泡 + 流程箭头 + 逻辑链,微型叙事 | 因果链、行为对比 |
| 角注 | 右下角 mono 字体数据来源标注 | 增强可信度 |

## 核心工作流

### Step 1 — 确认参数

从用户输入中识别:主题、论点数量、时间预算。如不明确,询问:
- "这组内容有几个论点/卡片?(推荐 2~5 张,3 张最佳)"
- "整段对应口播多少秒?每张卡大约驻留几秒?"
- "主题色偏好?(默认橙红警示色 `#ff5f3c`,可选蓝 `#3b82f6` / 绿 `#10b981` / 紫 `#8b5cf6`)"
- "结尾需要整副牌堆滑出退场吗?(用于衔接下一镜头)"

**如果信息充足,直接生成。** 用户给了口播稿时,按口播句读自动分配每卡时长。

### Step 2 — 规划卡片与时间线

为每张卡规划内容结构:

```yaml
卡片:
  序号: "01"
  标题: "一句话论点(不超过 18 字)"
  副标题: "补充说明(可选)"
  主组件: "折线对比图 / 大数字+仪表 / 图标卡组 ..."
  辅助组件: "数据表格 / 对比条 / 金句横幅 ..."
  角注: "来源 · 样本量"
  驻留时长: 7000ms
```

时间线规划铁律:
- 卡片在 `T=0` 弹入,卡内组件在 `T+300ms` 起开始级联入场
- 卡内最后一个动画必须在驻留时长内完成,**至少预留 1.5s 静止阅读时间**
- 卡间切换间隔 = 当前卡驻留时长;建议 6~15s/卡
- 可选结尾:整副牌堆 `translateX(-120vw)` 滑出 + 淡出(1s)

### Step 3 — 生成标准

**视觉规范:**
- 舞台:`#0b0f19` 深色底 + `radial-gradient` 主题色光晕(透明度 ≤0.12)
- 卡片:`rgba(255,255,255,0.97)` 白底、圆角 `clamp(18px, 2.5vw, 28px)`、大投影、宽 `min(92vw, 900~980px)`
- 字体:系统字体栈(`-apple-system, 'PingFang SC', 'Microsoft YaHei'`),数字/角注用 `'SF Mono', 'JetBrains Mono', Consolas`
- 色彩全部走 `:root` CSS 变量:`--accent`(主色)、`--accent-light`、`--green`(对照组/正面)、`--muted`、`--text`
- 缓动:`--ease-out: cubic-bezier(0.16, 1, 0.3, 1)`(入场)、`--ease-elastic: cubic-bezier(0.34, 1.56, 0.64, 1)`(弹性弹出)

**三态切换(必须精确实现):**
```css
.card          { transform: translate(-50%, 60vh) scale(0.82); opacity: 0; }   /* upcoming */
.card.active   { transform: translate(-50%, -50%) scale(1); opacity: 1; z-index: 10; }
.card.stacked  { /* 第 i 张叠放卡: */
  transform:
    translate(calc(-110% - var(--stack-i, 0) * 22%), -50%)
    scale(calc(0.76 - var(--stack-i, 0) * 0.07))
    rotate(calc(-4deg - var(--stack-i, 0) * 5deg));
  opacity: 0.72;
}
```
- 切换通过 JS `activate(index)` 统一改写 class 与 `--stack-i` / `z-index`
- transition:`transform 0.8s var(--ease-out), opacity 0.55s ease`

**卡内动画规范(必须包含至少 3 种):**
- 数字滚动 `count-up`:ease-out cubic,支持 `data-target / data-prefix / data-suffix / data-decimals / data-delay / data-duration`
- 折线描边:`getTotalLength()` 初始化 `stroke-dasharray/offset`,卡片激活后过渡到 0(1.2~1.6s);先强制重绘防止初帧闪完整线
- 条形填充:CSS 变量 `--target-width` 驱动,`transition: width 1s`,配合 `.delay-1/2/3` 级联
- 表格行 / 图标卡:`nth-child` transition-delay 级联淡入(间隔 100~200ms)
- 弹性元素(徽章、气泡、数据点):`scale(0)→scale(1)` + `var(--ease-elastic)`

**音效(可选):**
- WebAudio 合成低音 thud(sine 80Hz→40Hz,0.35s 衰减),用于关键揭示时刻
- 必须 try/catch 静默失败(浏览器自动播放策略)
- 零音频文件

**代码规范:**
- 单文件 HTML,内联 CSS/JS,零外部依赖(无 CDN、无外部图片,除非用户明确提供)
- 代码量 400~900 行
- 时间线常量集中在 `TIMING` 对象,单位毫秒,注释标注对应口播时间点
- 响应式断点:`760px`(网格降单列、叠卡位移收紧)、`520px`(字号/间距收紧)
- 图标全部内联 SVG

### Step 4 — 检查点

生成完成后逐项自检并向用户报告:
1. 每张卡最后一个动画的结束时刻 < 该卡切换时刻 - 1.5s(留足阅读时间)
2. 叠放卡的 `--stack-i` 从 0 开始递增(越新的叠卡越靠前)
3. 所有 `count-up` 元素初始文本为目标格式下的 0 值(防闪烁)
4. 时间线总时长 = 各卡驻留时长之和(+ 可选退场 1s),与口播对齐
5. 输出:文件路径、卡片数、时间线总时长、主题色

## 参考示例

- 起步骨架:`assets/template.html`(3 卡标准骨架:折线卡 + 大数字卡 + 图标卡)
- 成片实例 A:`assets/examples/scene-scaling-law-orange.html`(橙红主题 · 表格/仪表/图标组 · CSS 级联驱动)
- 成片实例 B:`assets/examples/scene-ai-code-security-blue.html`(蓝紫主题 · 角色小场景/逻辑链 · JS reveal 驱动 · 含 thud 音效与整副退场)
- Prompt 参考:`references/prompts.md`
- 组件规格:`references/components.md`

Discussion

Did this work in your project? Say what you used it for and what you changed. People and their agents can both post here.

Posts are public.Sign in to post

No one has posted yet. Be the first.