--- name: design-system description: 令牌架构、组件规范和幻灯片生成。三层令牌(原始→语义→组件)、CSS变量、间距/排版比例、组件规范、战略性幻灯片创建。用于设计令牌、系统设计、品牌合规演示文稿。 argument-hint: "[组件或令牌]" license: MIT metadata: author: claudekit version: "1.0.0" --- # 设计系统 令牌架构、组件规范、系统设计、幻灯片生成。 ## 何时使用 - 设计令牌创建 - 组件状态定义 - CSS变量系统 - 间距/排版比例 - 设计到代码的交接 - Tailwind主题配置 - **幻灯片/演示文稿生成** ## 令牌架构 加载:`references/token-architecture.md` ### 三层结构 ``` 原始(原始值) ↓ 语义(用途别名) ↓ 组件(组件特定) ``` **示例:** ```css /* 原始 */ --color-blue-600: #2563EB; /* 语义 */ --color-primary: var(--color-blue-600); /* 组件 */ --button-bg: var(--color-primary); ``` ## 快速开始 **生成令牌:** ```bash node scripts/generate-tokens.cjs --config tokens.json -o tokens.css ``` **验证使用:** ```bash node scripts/validate-tokens.cjs --dir src/ ``` ## 参考 | 主题 | 文件 | |------|------| | 令牌架构 | `references/token-architecture.md` | | 原始令牌 | `references/primitive-tokens.md` | | 语义令牌 | `references/semantic-tokens.md` | | 组件令牌 | `references/component-tokens.md` | | 组件规范 | `references/component-specs.md` | | 状态和变体 | `references/states-and-variants.md` | | Tailwind集成 | `references/tailwind-integration.md` | ## 组件规范模式 | 属性 | 默认 | 悬停 | 激活 | 禁用 | |------|------|------|------|------| | 背景 | primary | primary-dark | primary-darker | muted | | 文本 | white | white | white | muted-fg | | 边框 | none | none | none | muted-border | | 阴影 | sm | md | none | none | ## 脚本 | 脚本 | 用途 | |------|------| | `generate-tokens.cjs` | 从JSON令牌配置生成CSS | | `validate-tokens.cjs` | 检查代码中的硬编码值 | | `search-slides.py` | BM25搜索 + 上下文推荐 | | `slide-token-validator.py` | 验证幻灯片HTML的令牌合规性 | | `fetch-background.py` | 从Pexels/Unsplash获取图像 | ## 模板 | 模板 | 用途 | |------|------| | `design-tokens-starter.json` | 具有三层结构的入门JSON | ## 集成 **与品牌:** 从品牌颜色/排版中提取原始值 **与ui-styling:** 组件令牌 → Tailwind配置 **技能依赖:** brand、ui-styling **主要代理:** ui-ux-designer、frontend-developer ## 幻灯片系统 使用设计令牌 + Chart.js + 上下文决策系统的品牌合规演示文稿。 ### 事实来源 | 文件 | 用途 | |------|------| | `docs/brand-guidelines.md` | 品牌标识、声音、颜色 | | `assets/design-tokens.json` | 令牌定义(原始→语义→组件) | | `assets/design-tokens.css` | CSS变量(在幻灯片中导入) | | `assets/css/slide-animations.css` | CSS动画库 | ### 幻灯片搜索(BM25) ```bash # 基本搜索(自动检测域) python scripts/search-slides.py "investor pitch" # 域特定搜索 python scripts/search-slides.py "problem agitation" -d copy python scripts/search-slides.py "revenue growth" -d chart # 上下文搜索(高级系统) python scripts/search-slides.py "problem slide" --context --position 2 --total 9 python scripts/search-slides.py "cta" --context --position 9 --prev-emotion frustration ``` ### 决策系统CSV | 文件 | 用途 | |------|------| | `data/slide-strategies.csv` | 15种幻灯片结构 + 情感弧线 + 火花线节拍 | | `data/slide-layouts.csv` | 25种布局 + 组件变体 + 动画 | | `data/slide-layout-logic.csv` | 目标 → 布局 + break_pattern标志 | | `data/slide-typography.csv` | 内容类型 → 排版比例 | | `data/slide-color-logic.csv` | 情感 → 颜色处理 | | `data/slide-backgrounds.csv` | 幻灯片类型 → 图像类别(Pexels/Unsplash) | | `data/slide-copy.csv` | 25种文案公式(PAS、AIDA、FAB) | | `data/slide-charts.csv` | 25种图表类型,带有Chart.js配置 | ### 上下文决策流程 ``` 1. 解析目标/上下文 ↓ 2. 搜索slide-strategies.csv → 获取策略 + 情感节拍 ↓ 3. 对于每张幻灯片: a. 查询slide-layout-logic.csv → 布局 + break_pattern b. 查询slide-typography.csv → 类型比例 c. 查询slide-color-logic.csv → 颜色处理 d. 查询slide-backgrounds.csv → 如有需要的图像 e. 应用slide-animations.css中的动画类 ↓ 4. 生成带有设计令牌的HTML ↓ 5. 使用slide-token-validator.py验证 ``` ### 模式打破(Duarte火花线) 高级幻灯片交替使用情感以提高参与度: ``` "现状"(挫折) ↔ "可能的未来"(希望) ``` 系统在1/3和2/3位置计算模式打破。 ### 幻灯片要求 **所有幻灯片必须:** 1. 导入`assets/design-tokens.css` - 单一事实来源 2. 使用CSS变量:`var(--color-primary)`、`var(--slide-bg)`等 3. 使用Chart.js创建图表(不是仅CSS的条形图) 4. 包含导航(键盘箭头、点击、进度条) 5. 内容居中对齐 6. 专注于说服/转化 ### Chart.js集成 ```html ``` ### 令牌合规性 ```css /* 正确 - 使用令牌 */ background: var(--slide-bg); color: var(--color-primary); font-family: var(--typography-font-heading); /* 错误 - 硬编码 */ background: #0D0D0D; color: #FF6B6B; font-family: 'Space Grotesk'; ``` ### 参考实现 包含所有功能的工作示例: ``` assets/designs/slides/claudekit-pitch-251223.html ``` ### 命令 ```bash /slides:create "10-slide investor pitch for ClaudeKit Marketing" ``` ## 最佳实践 1. 永远不要在组件中使用原始十六进制值 - 始终引用令牌 2. 语义层启用主题切换(明/暗) 3. 组件令牌启用每个组件的自定义 4. 使用HSL格式进行不透明度控制 5. 记录每个令牌的用途 6. **幻灯片必须导入design-tokens.css并仅使用var()**