设计简报
Design Brief Skill — 在设计启动前,用一页可导出的 HTML 文档完成目标、用户、策略、标准、约束的一次性对齐。
能力矩阵
本 Skill 的三种运行模式,可单独运行也可叠加。最常见路径:链式模式(从 Frame / Scope / Audit 来)。
| 模式 | 触发条件 | 产出特征 |
|---|---|---|
| 🟢 独立模式 | 无前序上下文,直接调用 | 引导式追问 7 字段 → 完整 HTML |
| 🔵 链式模式 | 检测到 `spark-output/context/frame | scope |
| 🟣 增强模式 | 项目同目录有 SparkDesign 组件库标识(未来) | HTML 内策略维度引用真实组件名 |
Brief 的产出形态在三种模式下完全一致(双通道:
spark-output/context/brief.json+ 完整 HTML),区别只在"提问多少 / 字段从哪里来"。
输入要求
| 输入项 | 必填? | 来源优先级 | 缺失时行为 |
|---|---|---|---|
project_name |
✅ | 链式 frame / scope > 用户输入 | Phase 3 追问 |
project_type + project_subtype |
✅ | 用户输入(Phase 1 六大类选择) | 进入 Phase 1 引导 |
business_context |
✅ | 链式 frame.persona.situation / scope.background > 用户输入 | Phase 3 追问 |
business_goal |
✅ | 链式 frame.business_angle / scope.business_goal > 用户输入 | Phase 3 追问 |
user |
✅ | 链式 frame.persona / scope.target_users > 用户输入 | Phase 3 追问 |
strategy_dimensions |
✅ | Phase 4 勾选 + Phase 4.5 AI 草拟 + Phase 4.6 追问被否决项 | 按项目类型默认勾选 3 项 |
design_criteria |
✅ | 用户输入(Phase 3 追问) | Phase 3 追问 |
constraints |
⭕ | 链式 scope.constraints > 用户输入 | 标注"未提供",不阻断 |
out_of_scope |
⭕ | 用户输入 | 标注"未提供",不阻断 |
style / ratio / scale |
⭕ | 按项目类型自动匹配(Phase 6.3) | 取默认值(chalk / 16-9 / md) |
信息完整度判断:必填项任一缺失 → 进入 Phase 3 引导追问;仅可选项缺失 → 直接生成 HTML 并在卡片内标注"待补充"。
Chain Context
上游读取(Phase 0.5 执行)
Step 1 · 扫描上下文来源(按顺序,找到任一即读取):
- 会话内 marker:
<!-- spark-context:frame -->/scope/audit/journey/hmw - 项目文件:
spark-output/context/frame.json/scope.json/audit.json/journey.json/hmw.json - 都没有 → 跳过 Phase 0.5,按无上下文流程执行
Step 2 · 字段映射 checklist(找到上下文时,按下表逐项映射并预填 Brief 字段):
来自 frame(最常见,无 PRD 场景)
| Brief 字段 | ← Frame 字段 | 处理方式 |
|---|---|---|
project_name |
frame.project_name |
直接沿用 |
business_context |
frame.persona.situation |
部分填入(再让用户补"为什么现在做"等业务背景) |
business_goal(候选) |
frame.business_angle.strategic_intent(growth/retention/defensive) |
转为业务目标候选项让用户确认 |
user(4 条以内) |
frame.persona.description + frame.persona.goal |
合成 4 条短描述(每条 ≤ 25 字) |
strategy_dimensions(候选维度) |
frame.opportunities(每条机会点) |
转为 Phase 4 维度勾选的候选项 |
strategy_dimensions[*].thesis(方向锚点) |
frame.lean_direction.one_liner |
作为策略思路的方向锚点 |
| 假设标记(Phase 5 草图预览显式标出) | frame.critical_assumption |
在 Brief 末尾用 ⚠️ 显式标记 |
constraints(候选) |
frame.competitive_landscape 中竞品已踩的坑 |
转为本设计的约束候选 |
来自 scope(有 PRD 场景)
| Brief 字段 | ← Scope 字段 | 处理方式 |
|---|---|---|
project_name |
scope.project_name |
直接沿用 |
business_context |
scope.background |
直接沿用 |
business_goal |
scope.business_goal |
直接沿用 |
constraints |
scope.constraints + scope.gaps |
scope 标的 gaps 作为待补充的约束 |
user(候选) |
scope.target_users |
转为 user 候选项让用户精简到 4 条以内 |
来自 audit(改版场景)
| Brief 字段 | ← Audit 字段 | 处理方式 |
|---|---|---|
strategy_dimensions(候选) |
audit.opportunities(改版机会点聚类) |
转为本次改版的策略候选维度 |
constraints(候选) |
audit.findings(blocker / major 项) |
转为"v2 必须改"约束 |
| 假设标记 | audit.findings 中 severity=high 的项 |
显式标记为"v2 必须验证修复" |
来自 journey / hmw(增量来源)
journey.stages[*].opportunities→ 补充strategy_dimensions候选journey.key_moments[type=dropout-risk]→ 加入business_goal强化("降低 X stage 流失")hmw.cards→ 作为strategy_dimensions[].tactics的灵感源(不直接转,作为讨论起点)
Step 3 · 告知用户沿用情况(必做):
读到上下文后必须明确告诉用户:
"已读到 [N 个] 上游 Skill 上下文:[列出 frame/scope/audit/...]。已自动预填以下字段,跳过对应提问:
- project_name = [...]
- business_context = [...]
- user = [...] ... 接下来从 [第一个未自动预填的字段,按 Phase 3 依赖顺序] 开始问你。"
Phase 3 提问顺序原则:跳过已被上游字段预填的字段,从下一个未填字段按 Phase 3 定义的依赖顺序开始问(完整依赖顺序 + 字数约束见下方 Phase 3 章节,不在此重复以避免漂移)。
下游输出(Phase 7 执行)
完成 Brief 内容后,同时做两件事:
会话内输出:
<!-- spark-context:brief --> { ...JSON(schema 见 frontmatter)... } <!-- /spark-context:brief -->写入项目文件:
spark-output/context/brief.json(目录不存在时先创建)
下游可消费 Skill:Stories / Sitemap / Journey / Flow Web / Flow Mobile / Landing / Campaign / Chart / Edge / Motion / Check / Access / Metric / QA / PRD / Pitch / Retro。
字段流向下游
Brief 是链路锚点,下游消费量最大(13 个 Skill)。字段映射:
brief.project_name→ 全部 13 下游 Skill 的项目识别字段brief.user→ Stories / Journey 的 persona 输入;PRD 的 Personas 段brief.business_goal→ Pitch 的 The Bet / Why Now;PRD 的 Goals & Success Metrics;Metric 的 NSM 推导锚点brief.strategy_dimensions[]→ Stories 的 acceptance_criteria 候选;Flow Web/Mobile 的 IA 决策依据;Check 的"策略一致性"走查项;PRD 的 Solution & Feature Scope 输入brief.design_criteria.quantitative→ Metric 的 Driver / Counter Metrics 候选;QA 的还原度容差基线brief.design_criteria.qualitative→ Check 的走查标准;Access 的合规目标基线brief.constraints→ Sitemap / Flow Web/Mobile / Edge 的设计边界;PRD 的 Constraints & Risksbrief.project_type/brief.project_subtype→ Flow Web/Mobile 的 scenario 选型路由
⛔ 核心原则(全局硬约束,违反即判定任务失败)
- 本 Skill 的视觉产物唯一来源是
prototype/brief.html。 它不是"参考",而是必须被完整克隆并在其上做字段替换的源文件。 - 禁止自写 HTML 结构、CSS 样式、JS 逻辑。 包括但不限于:自定义配色 / 字体 / 圆角 / 阴影 / 间距、引入 Tailwind / Bootstrap / 任何 UI 框架、"简化版"或"更干净的版本"。
- 禁止凭记忆重建模板。 每次执行 Phase 6 都必须实际读取本 Skill 目录下的
prototype/brief.html(结构)+prototype/brief-themes.css(样式),以这两个文件的当前实际内容为唯一基线。 - 路径解析优先级(依次尝试,找到即用,不要凭印象编造路径):
- 相对本 SKILL.md 的相对路径
prototype/brief.html - 用文件搜索工具(glob / find / grep_search / list_dir 等任一可用工具)按文件名
brief.html在 skill 安装目录下定位——常见位置含~/.qoderwork/skills/brief/prototype/brief.html、.claude/skills/brief/prototype/brief.html、<repo>/2-Define/Brief/prototype/brief.html、<plugin-pack>/skills/brief/prototype/brief.html等,但不要硬编码——按文件名搜索更可靠 - 让用户提供绝对路径
- 相对本 SKILL.md 的相对路径
- 三次定位都失败才停止。 单次 read_file 失败不算"无法读取"——必须先尝试搜索;连续三次定位失败才告知用户"模板缺失",不得降级、不得即兴生成替代 HTML。
触发条件
以下任意一种情况触发本 Skill:
- 用户说"帮我写设计简报 / Design Brief / 项目对齐文档"
- 用户说"启动一个设计项目"、"开始设计前先对齐方向"
- 用户使用
/设计简报指令 - 前序 Skill(Scope、Journey、HMW)完成后,用户希望沉淀为一页文档
独立能力(无需连接器)
本 Skill 在完全离线、无任何连接器的场景下即可完整交付,所有方法论与输出形态不依赖外部系统:
- 一页纸 HTML 完整生成:目标 / 用户 / 策略 / 标准 / 约束七字段引导式追问 → Phase 4/4.5/4.6 策略维度勾选与 AI 草拟 → 完整 HTML 输出
- 链式上下文双通道:写入
spark-output/context/brief.json+ 会话内 marker block,下游 14 个 Skill 可直接读取(无需连接器) - HTML 一键导出 PNG:本地浏览器即可完成,无需云服务
- 三种运行模式自适应:独立模式(无前序)/ 链式模式(读本地 spark-output)/ 增强模式(识别 SparkDesign 组件标识)全部本地化运行
- 六大项目类型差异化模板:B2C / B2B / Tool / Content / 营销活动 / 平台型差异化策略库内置在 Skill 内
红线:缺连接器时 绝不 abort,所有引导式追问与 HTML 生成路径必须照常完成。
增强能力(连接器加持)
接入以下连接器后,可减少手动粘贴、提高对齐效率。所有连接器均为可选,未装时按"降级路径"列的方式回落。
| 连接器 | 阶段 | 增强能力 | 降级路径 |
|---|---|---|---|
| Figma | Phase 0.5 上游读取 | 直接抓取项目相关 frame / moodboard / 早期 sketch 作为 business_context 与策略维度的视觉佐证;HTML 内"参考视觉"区块嵌入 frame 缩略图 + 深链 |
未装时让用户手动粘贴 Figma 链接或截图描述,HTML 内退化为纯文字引用 |
| Notion / 飞书文档 | Phase 7 输出后 | Brief HTML 一键写入团队 wiki 指定空间,自动生成项目锚点页(下游 Skill 通过 wiki 链接反查 Brief);并搜索 wiki 历史 Brief 作为同类项目参考 | 未装时输出本地 spark-output/brief/{project}.html,提示用户手动上传至团队 wiki |
| Linear / Jira | Phase 0.5 上游读取 | 若 business_context 与某个 Epic / Project 绑定,可拉取 Epic 描述 / 关联 issue 数量 / 当前 sprint 作为业务背景的补充事实 |
未装时让用户在 Phase 3 追问中手动描述"业务背景与现状",不影响 Brief 主体 |
| GitHub | Phase 4.5 策略维度 AI 草拟 | 检测项目代码仓库的 package.json / 技术栈,让策略维度的"技术约束"与"组件复用策略"更贴合实际工程现状 | 未装时按用户描述的技术栈生成通用策略,准确度略降但不阻断 |
接入触发:用户首次调用 /设计简报 时,Skill 主动检测已认证的连接器并显示「已检测到:Figma / Notion,将自动启用增强模式」提示,用户可在该次会话中选择关闭。
字段流向变化:
- 启用 Figma →
chain.schema新增可选字段reference_visuals: array<{frame_url, thumbnail, description}>,下游 Flow Web/Mobile / Pitch 可直接复用 - 启用 Notion / 飞书 →
chain.schema新增可选字段wiki_page_url: string,下游 Skill 在生成自己的文档时可在底部引用 Brief wiki 链接 - 启用 Linear / Jira →
chain.schema新增可选字段source_epic: {id, url, title},PRD / Stories 下游读取后可自动关联同一 Epic
所有新增字段都是 可选,未启用连接器时字段缺省,下游 Skill 必须能容忍缺省。
执行流程(Route B)
按以下 8 个阶段顺序执行。每个阶段完成后再进入下一阶段,不得跳跃。
Phase 0 — 触发识别
确认触发来源(自然语言 / 指令)。无需向用户确认,直接进入 Phase 0.5。
Phase 0.5 — 上下文检查
检查当前会话是否已有前序 Skill 输出的项目上下文(Scope 输出、PRD 摘要、Journey 结论等)。
- 有上下文:提取可复用字段(项目名称、项目类型、业务目标、用户),预填入对应模块,告知用户:"我从上下文中提取了以下信息,可以直接沿用或修改。" 然后进入 Phase 1。
- 无上下文:直接进入 Phase 1。
Phase 1 — 项目类型选择
向用户提问,确认项目所属大类与子类型。若用户描述已足够清晰,可直接判断,无需再问。
六大类及子类型:
| 大类 | 子类型 |
|---|---|
| 产品设计 | 全新产品 / 产品迭代 / 产品改版 |
| 营销与传播 | 营销设计 / 会议与活动 / 线下物料 / 视频设计 |
| 品牌设计 | 全新品牌 / 品牌升级 |
| 研究与评估 | 用户研究 / 设计走查 / 设计咨询 |
| 系统与资产 | 设计系统与规范 |
| 特殊介质 | 硬件设计 / 互动设计 |
| 管理类 | 设计项目管理 / 组织管理 |
用户不确定时,AI 根据描述直接判断并告知选择理由,用户确认后继续。
Phase 2 — 文档判断
询问用户是否有已有文档(PRD、需求文档、Research 报告等):
- 路径 A(有文档):读取文档,提炼关键信息填入各模块,告知"以下字段信息不足,需要补充:[缺失列表]",逐一追问缺失项。
- 路径 B(无文档):展示空白模板结构,进入逐字段追问模式。
Phase 3 — 内容填写
按依赖优先顺序逐字段追问,不得按字段编号顺序(背景决定目标,目标决定用户,用户决定策略):
业务背景 → 业务目标 → 用户 → 设计策略 → 设计标准 → 边界约束 → 不做什么
追问规则:
- 每次只问一个字段。
- 每个问题附带 AI 推荐答案,格式:
> 推荐:[AI 建议内容],用户可直接采纳、修改或否定。 - 若用户已在上文提及相关信息,不重复追问,直接沿用并告知。
各字段字数上限(HTML 卡片容量约束,生成时严格遵守):
| 字段 | 格式 | 上限 |
|---|---|---|
| 业务背景 | 连续段落 | ≤ 100 字 |
| 业务目标 | 列表 | ≤ 4 条,每条 ≤ 22 字 |
| 用户 | 列表 | ≤ 4 条,每条 ≤ 25 字 |
| 设计策略 | 2–3 列维度(三段式) | 每列:标题 ≤ 10 字 + 主张 ≤ 22 字 + 手法 2–3 条(每条 ≤ 16 字)+ 依据(可选)≤ 25 字 |
| 设计标准 | 带标签列表 | ≤ 4 条,每条 ≤ 22 字(行首带 定量 / 定性 pill,对应 data-kind="quant" / "qual") |
| 边界约束 | 列表 | ≤ 5 条,每条 ≤ 22 字 |
| 不做什么 | 列表 | ≤ 5 条,每条 ≤ 22 字 |
超出上限时,AI 应主动精简,优先删去冗余修饰词,保留关键数字与动词。
专属字段追问(Phase 1 确定类型后激活,在标准字段完成后追问):
见下方「字段结构」章节中各类型的专属必填字段。
Phase 4 — 设计策略维度选择
根据项目类型,展示过滤后的设计策略维度供用户勾选。
管理类例外:不展示策略维度,改为填写"执行路径"(本周期的核心行动路线)。
过滤规则:
| 维度 | 产品设计 | 营销与传播 | 品牌设计 | 研究与评估 | 系统与资产 | 特殊介质 |
|---|---|---|---|---|---|---|
| 信息架构 IA | ✓ | — | — | — | ✓ | ✓ |
| 交互设计 | ✓ | — | — | — | ✓ | ✓ |
| 视觉设计 | ✓ | ✓ | ✓ | — | ✓ | ✓ |
| 内容设计 | ✓ | ✓ | ✓ | ✓ | — | — |
| 情感化设计 | ✓ | ✓ | ✓ | — | — | ✓ |
| 用户引导 | ✓ | — | — | ✓ | ✓ | ✓ |
| 多端适配 | ✓ | ✓ | — | ✓ | ✓ | — |
| 数据可视化 | ✓ | — | — | ✓ | — | — |
| 动效设计 | ✓ | ✓ | ✓ | — | — | ✓ |
| 无障碍设计 | ✓ | — | — | ✓ | ✓ | ✓ |
用户勾选维度后,进入 Phase 4.5(AI 先写策略草稿),而非立即走追问。
Phase 4.5 — 设计策略草稿(AI 先行)
在走结构化追问前,AI 先基于 业务背景 / 业务目标 / 用户 三项输入,为每个勾选的维度自动生成一份 三段式草稿,交给设计师批改而非从零写起。
草稿结构(每个维度一份):
[维度名]
主张 · [一句判断,≤ 22 字]
手法 · [动作 1,≤ 16 字]
· [动作 2,≤ 16 字]
· [动作 3,≤ 16 字](可缺省)
依据 · [对应业务目标 / 用户痛点,≤ 25 字]
输出样例(以"交互设计"为例,假设业务目标含"跳出率↓20%"):
交互设计
主张 · 结算压缩到 3 步,错误校验前置
手法 · 地址 / 支付合并一屏
· 字段实时校验
· 进度条常驻顶部
依据 · 对应 B2(跳出率↓20%);用户低容忍繁琐
处理规则:
- 每个维度以卡片形式并排展示,设计师逐条处理。
- 每份草稿提供三种操作:
✓ 采纳/✎ 改写/✗ 否决后进入手写追问。 - 全部确认后,进入 Phase 5;仅被
✗ 否决的维度才走 Phase 4.6 的追问式填写。
Phase 4.6 — 三段式结构化追问(仅处理 Phase 4.5 被否决的维度)
对被否决的维度,改问结构化三连问(不再使用开放式的"你打算从哪个角度切入"):
Q1 · 主张|[维度名] 上你打算用什么方式推动目标?(≤ 22 字)
> 推荐:[AI 建议]
> 可选角度(选 1–2 或自提):[子问题池抽取 2–3 条]
Q2 · 手法|具体落到 2–3 个可执行动作是什么?(每条 ≤ 16 字)
> 推荐:① [建议 1] ② [建议 2] ③ [建议 3]
Q3 · 依据|这条策略对应哪个业务目标或用户痛点?(≤ 25 字,可跳过)
> 推荐:对应 [业务目标编号];源自用户 [痛点关键词]
子问题池(AI 追问时从对应维度抽取 2–3 条作为启发,按"切面"分组):
| 维度 | 子问题池(按切面分组) |
|---|---|
| 信息架构 IA | 结构:层级深度?分类心智?核心任务是否前置?导航:导航模型(全局 / 侧栏 / 抽屉)?跨层级路径?组织:内容聚类依据?搜索 vs 浏览?标签 / 筛选策略? |
| 交互设计 | 路径:核心任务闭环?步骤数压缩?分支收敛?反馈:进度感知?成功 / 失败态?关键节点反馈形式?异常:错误前置校验?恢复路径?空 / 加载 / 离线态?输入:表单策略?手势 / 快捷?键盘可达性? |
| 视觉设计 | 调性:关键词 3–5 个?品牌延展度?层级:对比度策略?字阶?色彩优先级?媒介:图像 vs 插画?图标语言?留白哲学? |
| 内容设计 | 语气:人格画像?称呼策略?长短文平衡?结构:标题 / 正文 / 微文案句式?信息密度?本地化:多语言?文化敏感度?合规话术? |
| 情感化设计 | 高峰:成就节点?惊喜时刻?仪式感设计?低谷:失败 / 错误 / 空态的安抚?人格:品牌口吻?角色化?声音 / 音效? |
| 用户引导 | 首程:Onboarding 节奏?价值前置?跳过策略?关键节点:功能点引?Coachmark?渐进披露?空状态:无数据 / 无权限 / 新用户?引导 CTA? |
| 多端适配 | 主端判定:主端?次端?响应式 vs 分平台?断点:断点策略?栅格?容器查询?差异:可触达性差异?手势差异?输入方式差异?一致性:跨端资产复用?交互隐喻对齐? |
| 数据可视化 | 主看板:3 个主指标?时间粒度?对比维度?钻取:下钻路径?筛选联动?上下文保留?可读:图表类型选型?色彩编码?异常告警?可操作:导出?订阅?分享?标注? |
| 动效设计 | 进出:页面 / 组件进出节奏?层级叙事?状态:切换 / 加载 / 反馈动效?时长与缓动?品牌:动效人格?signature 动作?克制:动效可关?性能预算?晕动症兼容? |
| 无障碍设计 | 对比:文本 / 图标对比度?色盲模拟?操作:键盘全流程?焦点顺序?Tab trap?辅助:读屏语义?alt / aria?实时区?动效:prefers-reduced-motion?可关闭? |
Phase 5 — 完整性校验 + 草图预览
所有字段填写完成后:
- 检查 7 个通用模块是否均有实质内容(非空、非"待定")。
- 以提示卡片列出缺陷:
⚠ [字段名]:内容过于模糊,建议补充 [具体建议] - 输出带视觉结构的文字草图预览(用 Markdown 表格或代码块模拟 Bento 布局),让用户确认信息密度与结构。
- 用户可对话修改任意字段后再生成 HTML。
草图预览示例(横版默认布局,用代码块 ASCII 模拟 Bento 网格):
┌──────────────────────────────────┬────────────────┬────────────────┐
│ 业务背景 Business Context │ 业务目标 Goal │ 用户 User │
│ 平台成熟期,GMV 增速趋缓,购物车 │ · 购物车转化 │ · 25–40 女性 │
│ 放弃率高于行业 12pp,Q2 增长专项 │ 45%→58% │ · 移动端为主 │
│ 聚焦购物车到支付转化路径。 │ · 跳出率↓20% │ · 月购 3 次+ │
│ │ · 支付率↑8% │ · 低容忍繁琐 │
├──────────────────────────────────┴────────────────┼────────────────┤
│ 设计策略 Design Strategy │ 设计标准 │
│ ┌─ IA ─────────┬─ 交互 ─────────┬─ 情感化 ────────┐│ Design Criteria│
│ │ 主张:核心操 │ 主张:结算压 │ 主张:支付动效 ││ · 步骤≤3 [定量]│
│ │ 作提至首屏 │ 缩到 3 步 │ + 加购确认 ││ · 完成率>88% │
│ │ 手法: │ 手法: │ 手法: ││ · 感知清晰[定性]│
│ │ · 精简层级 │ · 合并结算屏 │ · 支付成功动效 ││ │
│ │ · 去冗余跳转 │ · 实时校验 │ · 加购即时反馈 ││ │
│ │ 依据:B2 │ · 进度常驻 │ 依据:B4 客诉↓ ││ │
│ └──────────────┴───────────────┴────────────────┘│ │
├──────────────────────────────────┬────────────────┴────────────────┤
│ 边界约束 Constraints │ 不做什么 Out of Scope │
│ · 8 周内上线 │ · 商品详情页不改 │
│ · 支付模块不可改动 │ · 会员积分不重设 │
│ · 遵守 DS v2.3 │ · PC 端不覆盖 │
│ · 2 名设计师 │ · 推荐算法不调 │
└──────────────────────────────────┴────────────────────────────────┘
或 Markdown 表格版(信息密度更高、便于对话中快速修订):
| 模块 | 内容摘要 |
|---|---|
| 业务背景 | 平台成熟期,GMV 增速趋缓;购物车放弃率高于行业 12pp,Q2 增长专项。 |
| 业务目标 | 购物车转化 45%→58%;跳出率↓20%;支付率↑8%;流程客诉↓30%。 |
| 用户 | 25–40 岁城市女性;移动端为主;月购 3 次+;对繁琐流程低容忍。 |
| 设计策略 | IA|主张:核心操作提至首屏 · 手法:精简层级 / 去冗余跳转 · 依据:B2交互|主张:结算压缩 3 步 · 手法:合并结算屏 / 实时校验 / 进度常驻 情感化|主张:支付动效 + 加购确认 · 手法:成功动效 / 即时反馈 · 依据:B4 |
| 设计标准 | 步骤≤3(定量);完成率>88%(定量);流程感知清晰(定性);无卡点(定性) |
| 边界约束 | 8 周上线;支付模块不可改;遵守 DS v2.3;2 名设计师。 |
| 不做什么 | 商品详情页不改;会员积分不重设;PC 端不覆盖;推荐算法不调。 |
两种格式任选其一输出,推荐 ASCII 版(更接近最终视觉)。
Phase 6 — 视觉输出
生成完整 HTML 文件(基于 prototype/brief.html 模板)。
6.0 ⛔ 绝对禁止(任一违反即视为生成失败,必须重做)
- ❌ 从零编写任何
<style>内容或新增内联style="..." - ❌ 引入 Tailwind、Bootstrap、DaisyUI、shadcn、任何 CDN 样式表或 UI 框架
- ❌ 自行定义颜色、字体、圆角、阴影、间距、栅格等视觉 token
- ❌ 删除、替换、"简化"工具栏、主题切换器、字号控件、导出按钮
- ❌ 修改
<style>内任何 CSS 变量、data-theme规则、.brief-canvasgrid 布局 - ❌ 修改
<script>内任何 JS(主题切换 / 布局切换 / 字号缩放 /fitCards/ topbar 可编辑bindEditable/modern-screenshot导出) - ❌ 以"更现代"、"更简洁"、"移动端优化"为由重写模板
- ❌ 生成一个只有 100–300 行的"轻量版" HTML(合并后的完整文件约 1500 行——结构 ~500 行 + 样式 ~1040 行,成品行数不得低于原型 95%)
- ❌ 删除或改写
.topbar-title-wrap/.topbar-meta-wrap容器、.topbar-title-edit/.topbar-meta-edit铅笔按钮、body.is-exporting相关规则(这是 topbar 文案可编辑功能的必需 DOM / CSS) - ❌ 删除或修改
modern-screenshot脚本引用(当前用 jsDelivr CDN,保证导出 PNG 可用;不得改成不可达的本地路径、不得删除此行)
6.1 ✅ 生成步骤(必须严格按序执行)
Step 1 · 读取模板结构(强制)
读取本 Skill 目录下的 prototype/brief.html(结构文件,约 500 行),以其实际内容作为唯一基线。禁止凭记忆或凭 SKILL.md 里的片段推断模板结构。
v0.5.9 变更:模板已拆分为结构(
brief.html~500 行)+ 样式(brief-themes.css~1040 行,含 9 套主题 CSS 变量)。Step 1 只读结构文件,大幅降低 context 占用。
路径解析协议(依次尝试,禁止凭印象编造路径——尤其禁止编造仓库结构路径如 3-Ideate/Brief/...、SparkSkillHub/2-Define/... 等,AI 既不知道用户从哪安装、也不知道平台的实际安装目录):
- 首选:用相对本 SKILL.md 的相对路径
prototype/brief.html直接read_file(多数 IDE / Agent 平台支持以 SKILL.md 同目录为基准) - 失败则搜索:调用文件搜索工具按文件名
brief.html定位,候选位置含但不限于:~/.qoderwork/skills/brief/prototype/brief.html(QoderWork 安装目录).claude/skills/brief/prototype/brief.html(Claude Code 安装目录)<product-design-pack>/skills/brief/prototype/brief.html(解压套件)<repo>/2-Define/Brief/prototype/brief.html(开发仓库源码)
- 再失败则问用户:"请告诉我你电脑上
brief.html的绝对路径,或确认 Brief Skill 是否完整安装" - 三轮全失败才停止——单轮失败不要立即停止,更不要"降级输出 markdown 版本"——只有定位真的不可能时才告知模板缺失
若读取失败 → 立即停止 → 告知用户"无法访问原型模板,本次不生成 HTML" → 不得即兴兜底。
Step 1.5 · 读取样式文件(强制)
读取与 brief.html 同目录下的 prototype/brief-themes.css(~1040 行,含 9 套主题的 CSS 变量 + 布局样式 + 打印媒体查询)。路径定位策略与 Step 1 一致(同目录下的 brief-themes.css)。
为什么单独读取:CSS 文件内容是静态的,不需要做字段替换,在 context 窗口紧张时可以推迟到 Step 2 之前再读取,减少中间步骤的 context 占用。
Step 2 · 全文克隆(合并结构 + 样式)
将 prototype/brief.html 的结构 + prototype/brief-themes.css 的样式合并为一个自包含的单 HTML 文件,写入目标文件(默认路径 spark-output/brief/[项目名].html,目录不存在时先创建,由用户确认)。
合并方法:在输出 HTML 中,将 <style></style> 替换为 <style>\n{brief-themes.css 全部内容}\n</style>,并删除 <link rel="stylesheet" href="brief-themes.css"> 行(输出文件必须自包含,不依赖外部 CSS 文件)。
合并后的新文件应与原型的视觉效果完全等价。
⛔ 克隆后编辑约束:Write 工具写出的新文件,必须先 Read 再 Edit。不能直接对刚 Write / Bash cp 生成的文件执行 Edit——Edit 工具要求该文件在当前会话内曾被 Read 过。推荐流程:① 用 Write 一次性写出完整替换后的 HTML(最可靠);② 或 Write 克隆 → Read 目标文件 → 逐字段 Edit 替换。禁止跳过 Read 直接 Edit,否则会触发 "File has not been read yet" 错误。
Step 2.1 · 依赖说明(无需额外拷贝)
HTML 里 modern-screenshot 通过 jsDelivr CDN 引用(https://cdn.jsdelivr.net/npm/modern-screenshot@4/dist/index.js),生成目标文件时不需要再同步拷贝任何 js 文件。只要用户打开 HTML 时能联网,"导出 PNG"即可工作。若用户需要离线使用,再另行下载 UMD 文件并将 src 改回相对路径。
Step 3 · 仅替换以下字段(表格列出的是唯一允许修改的位置,其余一行都不得改动):
| 位置 | 原始内容(示例) | 替换为 |
|---|---|---|
<title> |
Design Brief — 购物车流程改版 |
Design Brief — [项目名称] |
.topbar-title-wrap > .topbar-title 文本节点 |
购物车流程改版 |
[项目名称](仅替换文本,保留外层 wrap + 铅笔按钮 DOM) |
.topbar-meta-wrap > .topbar-meta 文本节点 |
产品迭代 · 2026-04-29 |
[子类型] · [YYYY-MM-DD](仅替换文本,保留外层 wrap + 铅笔按钮 DOM) |
<body data-theme="..."> |
data-theme="chalk" |
按 6.3 默认风格规则替换 |
7 张 .card 的 .card-body 内文本节点(<ul><li> 或段落 <p>) |
购物车案例文案 | Phase 3 收集到的 7 个字段内容 |
.hint副标题不替换:每张卡片第二行<p class="hint">...</p>是字段含义的固定释义(如「当前业务处于什么阶段,触发本次设计的原因」),必须保持与模板逐字一致。只替换.hint之后的正文<p>/<ul class="list">/.s-grid内容。 设计标准 list 结构强约束:每条必须是<li><span class="tag" data-kind="quant|qual">定量|定性</span><span class="text">...</span></li>,tag 放行首(pill 胶囊形态),不是行尾纯文字。
Step 4 · 严格保留清单(一行都不能改)
<head>内全部<link>(字体 preconnect + Google Fonts url)<style>标签内全部 CSS(9 套主题变量 + 布局 + 字号体系 + 卡片样式 + topbar 可编辑态样式 +body.is-exporting规则).toolbar-left/.toolbar-right的 HTML 结构与控件 id(#themeSelect/#accentPicker/ 布局按钮组 / 字号按钮组 / 打印按钮 /#exportBtn).topbar-title-wrap/.topbar-meta-wrap容器 + 两个.topbar-*-edit铅笔按钮(含 SVG)<script>标签内全部 JS(主题切换、data-ratio切换、data-scale切换、fitCards、bindEditabletopbar 可编辑 IIFE、modern-screenshot导出——必须使用domToBlob+URL.createObjectURL+isInIframe()环境检测分流(独立浏览器走directDownload,iframe 预览态走showExportModal浮层,浮层内必须用FileReader.readAsDataURL(blob)把预览图src切换成 base64 data URL,并用<a class="export-preview-link" href="${dataUrl}" download>包裹<img>——这是 sandbox iframe 下 Mac Option + 点击 / Windows 右键「图片另存为」能工作的唯一条件),不得回退到domToPng+ data URL 的一次性下载,不得在浮层内添加下载按钮 / 复制到剪贴板 / 新窗口打开 等动作按钮(sandbox 已实测全部拦截,是无效噪音))<script src="https://cdn.jsdelivr.net/npm/modern-screenshot@4/dist/index.js"></script>引用一行(jsDelivr CDN,不得改成不可达的本地路径,不得删除此行).brief-canvas内 7 张卡片的 DOM 顺序、class 名、每张卡片的 SVG line icon(stroke-width="1.5"/stroke-linecap="round"/stroke-linejoin="round"全部保留)
Step 5 · 交付前自检(每项必须勾上,未全部通过则回到 Step 1 重做)
- 文件行数 ≥ 原型行数的 95%(原型约 1555 行,成品 ≥ 1475 行)
-
<style>块完整保留,未被精简 -
#themeSelect、#accentPicker、#exportBtn三个核心控件 id 均存在 -
.topbar-title-edit、.topbar-meta-edit两个铅笔按钮存在且可聚焦 - 文件含
<script src="https://cdn.jsdelivr.net/npm/modern-screenshot@4/dist/index.js"></script>的 jsDelivr CDN 引用 - 导出逻辑包含
isInIframe()/directDownload()/showExportModal()三个函数,及.export-modal-*/.export-preview-link相关 CSS -
showExportModal内使用FileReader.readAsDataURL(blob)把预览图src切换成 base64 data URL,并用<a class="export-preview-link" download>包裹<img>(sandbox iframe 下 Mac Option + 点击 / Windows 右键另存的唯一条件) - 浮层内未出现「下载到本地 / 复制到剪贴板 / 新窗口打开」等动作按钮(sandbox 已实测全拦,是无效噪音);浮层文案含「强烈推荐系统浏览器打开」+ Mac / Windows 分平台操作说明
-
<body>属性齐备:data-theme/data-ratio="16-9"(横版默认)/data-scale="md"(中号默认)三者均存在 -
<body data-theme="...">已按 6.3 规则设置为匹配项目类型的风格 - 7 张卡片的顺序、class、SVG icon 与原型一致
- 设计标准每个
<li>均以<span class="tag" data-kind="quant|qual">开头(行首 pill) - 未引入任何 Tailwind / Bootstrap / 外部 CSS 框架
- 未出现任何"自定义"颜色/字号/阴影/圆角(所有视觉 token 均来自原型 CSS 变量)
- 视觉验证:如平台支持
present_files或浏览器预览,展示 HTML 给用户确认(重点检查:策略维度卡片数量与网格匹配、文字未溢出)。不支持预览时提示用户手动在浏览器打开检查。
6.2 生成时必须同步替换的字段
- HTML
<title>标签 → 替换为项目名称(例:"Design Brief — [项目名称]") .topbar-title文本 → 替换为项目名称.topbar-meta文本 → 替换为"[项目子类型] · [生成日期 YYYY-MM-DD]"(例:产品迭代 · 2026-04-29)- 7 个
.card内容 → 按 Phase 3 收集的字段填入 <body>的data-theme→ 设为本项目匹配的默认风格(见下方风格规则)
6.3 默认风格规则(根据项目类型自动匹配)
| 项目类型 | 默认风格 | 备选推荐 |
|---|---|---|
| 产品设计(迭代 / 改版) | Chalk | Script、Slate |
| 产品设计(全新产品) | Script | Chalk、Parchment |
| 营销与传播 | Frame | Noir、Onyx |
| 品牌设计 | Noir | Parchment、Script |
| 研究与评估 | Slate | Parchment、Stone |
| 系统与资产 | Stone | Chalk、Slate |
| 特殊介质 | Frame | Noir、Terminal |
| 管理类 | Slate | Chalk、Stone |
生成后告知用户:"已用 [风格名] 风格生成(完全基于 prototype/brief.html 模板克隆,仅替换文字字段),可在底部工具栏切换主题 / 自定义主题色 / 切换布局(横版 / 竖版 / 方版)/ 调整整体字号,满意后打印或导出 PNG。"
Phase 7 — 保存项目上下文(双通道输出)
按 chain-protocol.md 第 2.1 节的双通道规则同时输出:
按 chain-protocol.md §2.1 v1.1 智能适配规则:
Step 1 — 写盘到 spark-output/context/brief.json(必做,主持久化通道;目录不存在先创建)。
⛔ JSON 安全(详见 chain-protocol.md §2.1.2):写入前必须检查所有字符串值中的引号字符。用户原文中的中文弯引号 ""(U+201C/U+201D)必须替换为 「」,否则会被存储为 ASCII " 破坏 JSON 结构,导致下游全链路(Dashboard 更新 + 下游 Skill 读取)解析失败。写盘后用 python3 -c "import json; json.load(open('spark-output/context/brief.json'))" 自检。
写入以下完整 JSON:
{
"skill": "brief",
"generated_at": "<ISO8601 当前时间>",
"project_name": "",
"project_type": "",
"project_subtype": "",
"business_context": "",
"business_goal": [],
"user": [],
"strategy_dimensions": [
{
"dimension": "",
"thesis": "",
"tactics": [],
"rationale": ""
}
],
"design_criteria": { "quantitative": [], "qualitative": [] },
"constraints": [],
"out_of_scope": [],
"style": "",
"ratio": "16-9",
"scale": "md"
}
Step 2 — chat 输出紧凑 marker(必做,⛔ 不要在 chat 内重复输出 Step 1 的完整 JSON):
<!-- spark-context:brief ref="spark-output/context/brief.json" -->
Brief 已保存:project=[project_name],project_type=[type/subtype],persona=[user 第一条简述],[N] 个 strategy_dimensions
<!-- /spark-context:brief -->
降级 fallback:若 Step 1 写盘失败(chat-only 平台),输出完整 JSON marker(无 ref 属性,marker 之间放裸 JSON)作为唯一持久化通道。
更新链路面板(必做,失败不阻断)
协议依据:chain-protocol.md §九「面板自动生成约定」。本步在 Handoff 之前执行;告知用户的提示必须作为独立段落输出,禁止折叠进 Handoff 末尾、禁止静默跳过。
- 找模板:定位
_shared/dashboard-template.html(依次:相对套件根 →glob dashboard-template.html搜套件安装目录 → 三轮都失败时,用独立段落醒目告知用户:⚠️ 链路面板模板未找到(套件安装可能不完整,建议重装)。本 Skill 已正常完成,下游链路不受影响。然后跳过本步、继续 Handoff,不阻断 Skill 完成)。 - 聚合 STATE:扫
spark-output/context/*.json,聚合为{"project":"<brief.project_name 或 frame.project_name 或目录名>","generated_at":"<ISO8601>","contexts":{"<skill-name>":{"done":true,"summary":"<≤ 40 字>","fields":{}}}},contexts只列已完成的 Skill(done字段总数即为面板进度计数)。 - 克隆模板到
spark-output/dashboard.html(覆盖),用正则/\/\*__SPARK_STATE_INJECT__\*\/null/替换为/*__SPARK_STATE_INJECT__*/<JSON.stringify(STATE)>。 - 独立段落告知用户(强提示,单独成段,与 Handoff 之间空一行;根据
Object.keys(STATE.contexts).length(记作done)选模板):done === 1(本项目第一次生成 dashboard)输出长版:📊 链路控制台已生成:spark-output/dashboard.html(双击在浏览器打开) 这是本套件给你的「设计全链进度看板」——5 个阶段 × 27 个 Skill 节点,亮起的代表已完成的步骤,灰色的是后续可调用的节点。每跑完一个 Skill 都会自动更新,建议钉在浏览器一个标签页里随时回看,能看清「现在在哪一步、下游还差什么、链路是否健康」。done > 1(后续更新)输出短版:📊 链路面板已更新 · 进度 [done]/27 · spark-output/dashboard.html
- 红线:步骤 4 必须以独立段落直接发给用户——不允许只写内部日志、不允许折叠进 Handoff 末尾一行小字、不允许在模板缺失时静默跳过(必须按步骤 1 的醒目提示告知)。
Handoff 提示(必输出)
协议:按
_shared/next-skill.md三层结构模板输出;前 5 候选由_shared/skill-graph.json的依赖图算法实时算(done ⊆ ready,按 next_hint.preferred → alternatives → 同阶段 → anchor → fan-out 排序),优先建议从_shared/skill-graph.json#skills[id="brief"].next_hint读取。
首行模板:✅ 设计简报 已完成,business_goal + 5 维 strategy_dimensions + 9 项 design_criteria 已沉淀。
本 Skill 的 next_hint(来自 skill-graph.json,不可在此 SKILL.md 内硬编码覆盖):
- preferred:
/journey - 优先理由:用户视角可视化(含情感曲线 + dropout-risk 标注)通常是 Brief 之后最有价值的一步——把抽象策略变成可视的体验断点。
- alternatives:
/stories(想直接做工程拆解走结构化路径) ·/pitch(需要先对齐决策者再执行) ·/sitemap(已确定走 IA 优先路径) - emoji:🎨
红线:
- ❌ 禁止在本段硬编码候选清单(如「进入 Stories / Journey / Sitemap」)——所有候选必须由算法实时生成
- ❌ 禁止按「文档类 / 视觉类 / 决策类」再分类候选(v0.5.5 起,分类已折叠进 next_hint.alternatives)
- ❌ 禁止与「更新链路面板」段合并——两段必须各自独立成段,中间空一行
- ❌ 禁止漏第 2 行候选清单——即使候选只有 1 个、或为空(终端节点)也要写出来
字段结构(Route A)
通用模块(7 个,所有类型必填)
| # | 模块 | 英文标题 | 说明 |
|---|---|---|---|
| 1 | 业务背景 | Business Context | 当前业务处于什么阶段,触发本次设计的原因 |
| 2 | 业务目标 | Business Goal | 本次设计要推动哪些可量化的业务结果(KPI) |
| 3 | 用户 | User | 主要受众是谁,核心使用场景是什么 |
| 4 | 设计策略 | Design Strategy | 从哪些维度切入,用什么设计方法应对目标 |
| 5 | 设计标准 | Design Criteria | 体验层面的完成判断(单列列表,每条行首带 定量 / 定性 pill 标签,data-kind="quant" 用 accent 染色,"qual" 用中性描边) |
| 6 | 边界约束 | Constraints | 时间、技术、资源、规范等硬性限制 |
| 7 | 不做什么 | Out of Scope | 本次明确排除的内容,防止范围蔓延 |
字段区分说明:
- 业务目标 = 业务 KPI(转化率、留存率等可量化结果)
- 设计标准 = 体验层面的判断依据(任务完成率、SUS 评分等),单列混合列表,每条用行首 pill 标注定量 / 定性
各类型专属字段
产品设计 — 全新产品
| 专属必填 | 专属可选 |
|---|---|
| 业务指标、技术栈 | 参考方向、排斥方向 |
产品设计 — 产品迭代
| 专属必填 | 专属可选 |
|---|---|
| 上下文输入(已有研究 / 历史版本结论)、受影响已有模块、业务指标、技术栈 | 参考方向、排斥方向 |
产品设计 — 产品改版
| 专属必填 | 专属可选 |
|---|---|
| 上下文输入、改版范围、保留元素、业务指标、技术栈 | 参考方向、排斥方向 |
营销与传播 — 营销设计
| 专属必填 | 专属可选 |
|---|---|
| 投放平台、核心卖点、上线时间、传播目标 | 参考方向、排斥方向 |
营销与传播 — 会议与活动
| 专属必填 | 专属可选 |
|---|---|
| 活动时间地点、签到 / 互动形式、传播目标 | 参考方向、排斥方向 |
营销与传播 — 线下物料
| 专属必填 | 专属可选 |
|---|---|
| 物料尺寸规格、印刷工艺限制 | 参考方向、排斥方向 |
营销与传播 — 视频设计
| 专属必填 | 专属可选 |
|---|---|
| 时长、画幅比例、配乐方向 | 参考方向、排斥方向 |
品牌设计 — 全新品牌
| 专属必填 | 专属可选 |
|---|---|
| 调性关键词(3–5个)、交付物范围 | 参考方向、排斥方向 |
品牌设计 — 品牌升级
| 专属必填 | 专属可选 |
|---|---|
| 调性关键词、保留元素 vs 可变元素 | 参考方向、排斥方向 |
研究与评估 — 用户研究
| 专属必填 |
|---|
| 研究方法、样本量、研究问题、结论交付形式 |
研究与评估 — 设计走查
| 专属必填 |
|---|
| 评估框架、走查范围、结论交付形式 |
研究与评估 — 设计咨询
| 专属必填 |
|---|
| 咨询聚焦点、决策方、结论交付形式 |
系统与资产 — 设计系统与规范
| 专属必填 | 专属可选 |
|---|---|
| 覆盖范围、与现有系统关系、首批组件优先级、使用者 | Token 层级设计需求 |
特殊介质 — 硬件设计
| 专属必填 |
|---|
| 硬件规格、使用环境、材料 / 工艺限制 |
特殊介质 — 互动设计
| 专属必填 |
|---|
| 交互模态、技术平台 |
管理类
| 专属必填 | 专属可选 |
|---|---|
| 时间周期、关联 OKR、核心目标、优先级排期、成功标准 | 资源分配、主要 Stakeholder |
| 执行路径(替代"设计策略") | — |
视觉输出规格(Route C)
Bento 布局
关于"布局"而非"比例": 工具栏提供"横版 / 竖版 / 方版"三套布局模板(底层
data-ratio仍为16-9 / 4-3 / 1-1,仅切换 grid 排版)。画布宽度固定 1280px、高度完全跟内容,不再强制锁定画幅比例 —— 所见即所导。
横版(默认,data-ratio="16-9") — 4 列 × 3 行,适合 Keynote / 幻灯片:
[业务背景 ×2列] [业务目标 ×1列] [用户 ×1列]
[设计策略 ×3列] [设计标准 ×1列]
[边界约束 ×2列] [不做什么 ×2列]
方版(data-ratio="1-1") — 3 列 × 4 行,顶部通栏 + 底部对半,适合社媒分享:
[业务背景 ×3列 顶部通栏]
[业务目标 ×1] [用户 ×1] [设计标准 ×1]
[设计策略 ×3列]
[边界约束 ×1.5列] [不做什么 ×1.5列]
实现用 6 列子网格:业务背景 / 设计策略各 span 6,业务目标 / 用户 / 设计标准各 span 2,边界约束 / 不做什么各 span 3。
竖版(data-ratio="4-3") — 3 列 × 4 行,底部对半,适合 A4 / 文档:
[业务背景 ×1.5列] [业务目标 ×1.5列]
[用户 ×1] [设计策略 ×2列 × 跨2行]
[设计标准 ×1]
[不做什么 ×1.5列] [边界约束 ×1.5列]
实现用 6 列子网格:业务背景 / 业务目标 / 不做什么 / 边界约束各 span 3,用户 / 设计标准各 span 2,设计策略 span 4 列 × 2 行。
风格体系
HTML 内嵌所有风格的 CSS 变量,通过 data-theme 属性切换,无需重新加载。
已实现的 9 个风格(工具栏下拉完整可用):
| 名称 | 原型参照 | 背景 | 字体 | 调性 |
|---|---|---|---|---|
| Chalk | cursor | 浅灰 #dcdcda | Inter | 干净·开发·极简 |
| Parchment | claude | 暖米 #d4cfc7 | Cormorant Garamond | 温润·人文·AI |
| Script | elevenlabs | 暖白 #e2e2de | EB Garamond | 精致·编辑·衬线 |
| Noir | bugatti | 纯黑 #0a0a0a | Cormorant Garamond | 极奢·戏剧·衬线 |
| Frame | runwayml | 极深灰 #060606 | DM Sans + DM Mono | 创意·暗调·AI |
| Onyx | shopify | 纯黑 #000000 | Inter + JetBrains Mono | 干净·暗色·商业 |
| Stone | neutral | 浅灰 #dcdcdc | DM Mono | 中性·冷静·工程 |
| Slate | stripe | 冷白 #e8edf3 | Inter | 精准·企业·金融 |
| Terminal | xai | 深灰 #131518 | JetBrains Mono | 终端·极客·低调 |
原规划中的 Paper(mintlify)、Pulse(verge)、Blueprint / Signal / Canvas / Void / Ink 均已从工具栏移除,不再作为默认或扩展风格。Paper / Pulse 待 CSS 补齐后再考虑加回。
HTML 工具栏规格
工具栏位于 Brief Canvas 下方,左右两组:
[主题 ▾] [🎨 accent] | [布局 横版 | 竖版 | 方版] | [字号 小 | 中 | 大] [打印 / PDF] [导出 PNG]
左侧控件(.toolbar-left):
- 主题下拉:
<select id="themeSelect">,选中即时切换data-theme,无动画延迟。 - 主题色自定义:
<input type="color" id="accentPicker">圆形色板,实时覆盖--accent;切换主题时自动回填该主题的默认 accent。 - 布局按钮组:
横版 / 竖版 / 方版三按钮(底层仍切换data-ratio),默认激活 横版。激活态反色(background: var(--text); color: var(--brief-bg))。画布高度完全跟内容走,不再强制锁定比例 —— 所见即所导。 - 字号按钮组:
小 / 中 / 大三按钮,切换data-scale(对应--size-mult= 1 / 1.2 / 1.45),所有字号 token 等比缩放,默认激活 中。
每次任一切换后都会调用 fitCards() 重新检测卡片内容是否溢出。
右侧控件(.toolbar-right):
打印 / PDF:调用
window.print(),@media print隐藏工具栏。导出 PNG:调用
modern-screenshot(jsDelivr CDN 加载)的domToBlob(#brief-canvas, { scale: 2, backgroundColor: 页面背景色, type: 'image/png' })生成 Blob。根据运行环境自动分流:独立浏览器(
window.top === window):用URL.createObjectURL+ 临时挂 DOM 的<a>一键下载,按钮显示"已保存 ✓"。iframe 预览态(qoderwork 对话卡片、Notion embed 等,sandbox 同时拦截了
<a>.click()/clipboard.write/window.open,实测三条路径全无效):弹出.export-modal浮层,浮层内仅保留<a class="export-preview-link" href="<data-url>" download>包裹的预览图,不得添加任何动作按钮(都是无效噪音)。文案给用户两条路径:- 强烈推荐:在系统浏览器(Chrome / Safari / Edge)中打开此 HTML ——一键下载,无需额外操作,是最可靠路径;
- 若必须在预览态导出,在预览图上:Mac 用 Option + 点击触发下载弹窗;Windows 用右键 → 图片另存为…。
实现要点:先用
URL.createObjectURL(blob)兜底previewImg.src和.export-preview-link[href],再异步new FileReader().readAsDataURL(blob),onload里把两者切换成data:image/png;base64,...(blob URL 会被 sandbox 判为跨源导致右键菜单置灰 / Option 点击失效)。
按钮保留 loading 态("生成中…")+ 成功反馈("已保存 ✓" / "请在浮层点图保存 →")+ 防抖。导出开始会给
<body>加is-exporting类名,临时隐藏 topbar 铅笔按钮,避免 wrap 压缩导致文字折行。浮层关闭或 8 秒后revokeObjectURL释放。
字体加载
<!-- Google Fonts 优先,系统字体回退;仅加载 9 套主题实际使用的字族 -->
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600
&family=DM+Mono:wght@300;400;500
&family=DM+Sans:wght@300;400;500
&family=EB+Garamond:wght@400;500
&family=Inter:wght@300;400;500;600;700
&family=JetBrains+Mono:wght@400;500
&family=Noto+Sans+SC:wght@400;500;600
&display=swap" rel="stylesheet">
离线时回退:-apple-system, 'PingFang SC', sans-serif(无衬线)/ Georgia, serif(衬线)。
输出物
本 Skill 产出一个完整可运行的 HTML 文件(prototype/brief.html),包含:
- 顶部项目信息栏(项目名称、类型、日期 + 右侧 "DESIGN BRIEF" brand 标识),标题与元信息支持 hover 铅笔按钮 → 点击即编辑(刷新恢复 AI 默认值;导出 PNG 时自动隐藏铅笔防折行)
- Bento 布局的 7 模块 Brief Canvas(每模块配 SVG line icon)
- 底部工具栏(主题下拉 + 主题色自定义 + 布局切换 + 字号缩放 + 打印 / 导出)
- 所有已实现风格的 CSS 变量(9 套,通过
data-theme切换) modern-screenshot导出逻辑:domToBlob+URL.createObjectURL+ iframe 检测分流(独立浏览器一键下载;iframe 预览态弹浮层提供「下载 / 剪贴板 / 新窗口 / 图片右键另存」四条兜底路径),含 loading 态 + 防抖 + 成功反馈 +is-exporting防折行- 卡片内容自适应缩放(
fitCards:溢出时逐级降低字号至 9px 下限)
HTML 中不依赖外部框架,仅依赖:
- Google Fonts(远程 CSS,需联网加载字体,不联网则自动回退到系统字体)
modern-screenshotUMD(通过 jsDelivr CDN 加载,用于"导出 PNG")
原方案曾用同目录
./modern-screenshot.umd.js本地引用,但在 qoderwork 等工作流中生成 HTML 时不会自动同步拷贝二进制文件,导致"导出 PNG"报modernScreenshot is not defined。现统一改为 CDN,生成后无需任何附加文件即可使用。
质量规范
本章节是 Skill 完成度的高层判定标准,与 Phase 6 内部的执行级约束互补。Phase 6 是"该怎么做",本章节是"做对了没有"。
🚫 红线规则(违反即任务失败,无降级空间)
- 视觉产物必须基于
prototype/brief.html克隆——不得自写 HTML / CSS / JS,不得引入任何 UI 框架(详见 Phase 6.0) - 必须输出双通道:
spark-output/context/brief.json写盘 + chat 内紧凑 marker(含ref=属性) - 必须按 chain-protocol §2.1 v1.1.1 执行顺序:先写盘 → 自检行 → 渲染报告 → marker → handoff,不得颠倒
- 7 张卡片的 DOM 顺序、class 名、SVG line icon 必须与原型逐字一致
- 设计标准每条必须以
<span class="tag" data-kind="quant|qual">行首 pill 开头,不得放行尾纯文字 - 三轮路径定位都失败才停止——单次 read_file 失败必须先用文件搜索工具定位(详见 Phase 6 路径解析协议),不得凭印象编造仓库结构路径,也不得直接降级输出 markdown 版本
⚠️ 反模式(常见错误,需主动规避)
- ❌ 把"业务目标"和"设计标准"混为一谈——前者是业务 KPI(如"转化率提升 8%"),后者是体验判断依据(如"任务完成率 > 88%")
- ❌ 按字段编号顺序追问(1→2→3...)——必须按依赖顺序:业务背景 → 业务目标 → 用户 → 设计策略 → 设计标准 → 边界约束 → 不做什么
- ❌ 在 Phase 4 跳过 Phase 4.5 直接走 4.6 追问——草稿在前(AI 先写),追问只处理被否决的维度
- ❌ 在 chat 内重复输出完整 JSON——应只输出紧凑 marker(≤ 80 字摘要),完整 JSON 写盘到文件
- ❌ 凭记忆重建 HTML 模板——必须每次 read_file 实际读取
prototype/brief.html - ❌ 删除或"简化"工具栏控件、topbar 铅笔按钮、modern-screenshot 导出逻辑——它们是产物功能完整性的必需 D
…(truncated)