返回技能市场
开发运维 安全

design-taste-frontend

@admin/design-taste-frontend

Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check.

admin 热度 309v0.0.1

tasteskill: 反粗制滥造前端 Skill

落地页、作品集和重新设计。不适用于仪表盘、数据表或多步骤产品 UI。
以下每条规则都取决于具体情境。没有任何规则会自动触发。先阅读需求说明,然后只采用适用的内容。

---

0. 需求简报推断(先读懂情境,再做其他事)

在接触代码或调整旋钮之前,先推断用户真正想要什么。大多数 LLM 设计输出之所以糟糕,是因为模型没有判断具体情境,而是直接套用默认审美。

0.A 先读取这些信号

  1. 页面类型 - 落地页(SaaS / 面向消费者 / 机构 / 活动)、作品集(开发者 / 设计师 / 创意工作室)、重新设计(保留现状还是全面改造)、编辑型页面 / 博客。
  2. 用户使用的氛围词 - "极简"、"平静"、"Linear 风格"、"Awwwards"、"粗野主义"、"高端消费"、"苹果风"、"活泼"、"严肃的 B2B"、"编辑风"、"机构风"、"玻璃质感"、"暗黑科技风"。
  3. 参考信号 - 用户链接的 URL、粘贴的截图、提到的产品以及与之竞争的品牌。
  4. 受众 - 是 B2B 采购评审组、注重设计的消费者,还是快速浏览作品集的招聘人员。审美方向由受众决定,而不是由你的个人品味决定。
  5. 已有的品牌资产 - 标志、颜色、字体和摄影素材。对于重新设计,这些是起点素材,不是可选输入(见第 11 节)。
  6. 隐性约束 - 以无障碍为首要考量的受众、公共部门、受监管行业、以信任为先的商业场景、儿童产品。这些约束的优先级高于审美偏好。

0.B 生成前输出一行"设计解读"

编写任何代码前,用一行说明:"我将其理解为:\<page kind>,面向 \<audience>,采用 \<vibe> 语言,倾向于 \<design system or aesthetic family>。"

示例解读:

  • *"我将其理解为:面向技术买家的 B2B SaaS 落地页,采用 Linear 风格的极简语言,倾向于 Tailwind 工具类 + Geist + 克制的动效。"*
  • *"我将其理解为:面向招聘经理的独立设计师作品集,采用编辑风 / 动态排版语言,倾向于原生 CSS + 滚动驱动动画 + 自定义字体排印。"*
  • *"我将其理解为:公共部门服务网站的重新设计,采用信任优先的语言,倾向于 GOV.UK Frontend 或 USWDS。"*

0.C 如果需求说明含糊不清,只问一个问题,不要猜测

只问一个澄清问题 - 禁止一次抛出多个问题 - 并且仅在设计解读确实存在分歧时提问。示例:*"它应该更接近 Linear 式的简洁风格,还是 Awwwards 式的实验风格?"*

如果能根据上下文有把握地推断,不要提问。直接说明设计解读并继续。

0.D 反默认套路准则

不要默认采用:AI 紫色渐变、深色网格背景上的居中首屏、三个等大的功能卡片、所有内容都套用通用玻璃拟态、到处使用无限循环微动画、Inter + slate-900。这些是 LLM 的默认套路。应根据设计解读,有意识地跳出这些套路。

---

1. 三项调节参数(核心配置)

完成设计解读后,设置三个旋钮。下文的每项布局、动效和密度决策均由这些旋钮控制。

  • DESIGN_VARIANCE: 8 - 1 = 完全对称,10 = 艺术化混乱
  • MOTION_INTENSITY: 6 - 1 = 静态,10 = 电影感 / 物理效果
  • VISUAL_DENSITY: 4 - 1 = 艺术画廊 / 疏朗,10 = 驾驶舱 / 数据密集

基线: 8 / 6 / 4。除非设计解读要求覆盖这些值,否则使用这些值。不要让用户编辑此文件 - 覆盖设置应通过对话完成。

1.A 旋钮推断(设计解读 → 旋钮值)

| 信号 | VARIANCE | 动效 | 密度 | |---|---|---|---| | "minimalist / clean / calm / editorial / Linear-style" | 5-6 | 3-4 | 2-3 | | "premium consumer / Apple-y / luxury / brand" | 7-8 | 5-7 | 3-4 | | "playful / wild / Dribbble / Awwwards / experimental / agency" | 9-10 | 8-10 | 3-4 | | "landing page / portfolio / marketing site (default)" | 7-9 | 6-8 | 3-5 | | "trust-first / public-sector / regulated / accessibility-critical" | 3-4 | 2-3 | 4-5 | | "重新设计 - 保留现状" | 与现有值一致 | +1 | 与现有值一致 | | "重新设计 - 全面改造" | +2 | +2 | 与现有值一致 |

1.B 使用场景预设

| 使用场景 | VARIANCE | 动效 | 密度 | |---|---|---|---| | Landing (SaaS, mainstream) | 7 | 6 | 4 | | Landing (Agency / creative) | 9 | 8 | 3 | | 落地页(高端消费类) | 7 | 6 | 3 | | Portfolio (Designer / studio) | 8 | 7 | 3 | | 作品集(开发者) | 6 | 5 | 4 | | Editorial / Blog | 6 | 4 | 3 | | 公共部门服务 | 3 | 2 | 5 | | 重新设计 - 保留现状 | 匹配 | match+1 | 匹配 | | 重新设计 - 全面改造 | +2 | +2 | 匹配 |

1.C 旋钮如何驱动输出

将这些值(或用户覆盖后的值)用作全局变量。本文各处的交叉引用均指这些确切的变量名 - 不得自行创建 LAYOUT_VARIANCEANIM_LEVEL 之类的别名。

---

2. 需求简报 → 设计系统 MAP

确定设计解读(第 0 节)和旋钮值(第 1 节)后,选择合适的基础方案。对于已有官方软件包的内容,不要自行编写 CSS。不要把一种审美趋势冒充为官方系统。

2.A 何时采用真正的设计系统(使用官方软件包)

| 需求说明解读为… | 采用 | 原因 | |---|---|---| | Microsoft / 企业级 SaaS / 仪表盘 | @fluentui/react-components@fluentui/web-components | 官方 Fluent UI、Microsoft 设计令牌,已完成无障碍适配 | | Google 风格的 UI、Material 风格产品 | @material/web + Material 3 设计令牌 | 官方方案,支持通过 Material 主题系统进行主题定制 | | IBM 风格的 B2B / 企业分析 | @carbon/react + @carbon/styles | 官方 Carbon,成熟的数据密度设计模式 | | Shopify 应用界面 | polaris.js 网页组件 / Polaris React | Shopify 管理后台 UI 的强制要求 | | Atlassian / Jira 风格产品 | @atlaskit/* + @atlaskit/tokens | 官方 Atlassian DS | | GitHub 风格的开发工具 / 社区页面 | @primer/css@primer/react-brand | 官方 Primer;面向营销的品牌变体 | | UK 公共部门服务 | govuk-frontend | 法律 / 监管层面要求采用 | | US public-sector / trust-first | uswds | 同上 | | 面向本地企业 / 代理机构的快速 MVP | Bootstrap 5.3 | Boring, fast, works | | 现代化无障碍 React 基础方案 | @radix-ui/themes | 原语 + 精心打磨的主题 | | 组件由你掌控的现代 SaaS | shadcn/ui (npx shadcn@latest add ...) | 代码由你掌控,易于定制;不得以默认状态交付 | | 基于 Tailwind 的现代 SaaS / AI 营销 | Tailwind v4 工具类 + dark: 变体 | 独立开发者 + 小型团队构建项目的默认选择 |

诚信原则:如果根据需求简述判断应采用上述某一系统,请安装并使用官方软件包。不得手动重建其 CSS。不得导入某个系统的设计令牌后又覆盖其中的 90%。

每个项目仅使用一个系统。不得在同一组件树中混用 Fluent React 和 Carbon。不得将 shadcn/ui 组件导入 Material 3 应用。

2.B 当需求简述描述的是美学风格,而非系统时

对于这些方向,不存在单一的官方软件包。请使用原生 CSS + Tailwind + 持续维护的组件库进行构建。在代码注释中,应如实说明哪些内容是借鉴的灵感,哪些是官方素材。

| 美学风格 | 如实的实现方式 | |---|---| | 玻璃拟态 / “磨砂玻璃” | backdrop-filter、分层边框、高光叠加层。为 prefers-reduced-transparency 提供纯色填充回退方案。 | | Bento (Apple-style tile grids) | 使用单元格尺寸混合的 CSS 网格。没有任何单一库独占这一模式。 | | 粗野主义 | 原生 CSS、等宽字体、原始边框。无需库。 | | Editorial / magazine | 衬线字体、非对称网格、充足留白。无需库。 | | 暗黑科技 / 黑客风格 | 等宽字体 + 霓虹强调色、终端视觉元素。无需库。 | | 极光 / 网格渐变 | SVG 或分层径向渐变。无需库。 | | 动态排版 | 原生 CSS 动画、滚动驱动动画,滚动劫持使用 GSAP。无需库。 | | Apple 液态玻璃 | Apple 仅为 Apple 平台提供相关文档。不存在官方 liquid-glass.css网页端实现是使用 backdrop-filter + 分层边框 + 高光构建的近似方案。应明确标注为近似实现。 |

---

3. 默认架构与约定

除非设计解读选择了真正的设计系统(第 2.A 节),否则默认如下:

3.A 技术栈

  • 框架:React 或 Next.js。默认使用服务器组件(RSC)。
  • RSC 安全性:全局状态仅适用于客户端组件。在 Next.js 中,使用一个 "use client" 组件封装状态提供器。
  • 交互隔离:任何使用 Motion、滚动监听器或指针物理效果的组件都必须是独立的叶子组件,并在顶部放置 'use client'。服务端组件仅渲染静态布局。
  • 样式:Tailwind v4(默认)。仅当现有项目有此要求时才使用 Tailwind v3。
  • 对于 v4:不得在 postcss.config.js 中使用 tailwindcss 插件。请使用 @tailwindcss/postcss 或 Vite 插件。
  • 动画:Motion(以前称为 Framer Motion 的库)。从 motion/react 导入(import { motion } from "motion/react")。framer-motion 软件包仍可作为旧版别名使用,新代码优先使用 motion/react
  • 字体:始终使用 next/font(Next.js),或通过 @font-face + font-display: swap 自托管。生产环境中禁止通过 <link> 链接 Google 字体。

3.B 状态

  • 对于隔离的 UI,使用本地 useState / useReducer
  • 全局状态只能用于避免深层属性逐级传递 - 可使用 Zustand、Jotai 或 React 上下文。
  • 禁止使用 useState 跟踪由用户输入驱动的连续值(鼠标位置、滚动进度、指针物理效果、磁性悬停)。请使用 Motion 的 useMotionValue / useTransform / useScrolluseState 会在每次变化时重新渲染 React 树,导致移动端性能崩溃。

3.C 图标

  • 允许使用的库(按优先级排序): @phosphor-icons/reacthugeicons-react@radix-ui/react-icons@tabler/icons-react
  • 不建议使用: lucide-react。仅当用户明确要求使用,或项目已依赖该库时,才可接受。
  • 禁止手工绘制 SVG 图标。 如果缺少某个字形,请安装另一个库或使用基础图元组合,禁止从头绘制图标路径。
  • 每个项目只使用一个图标系列。 不得在同一组件树中混用 Phosphor 和 Lucide。
  • 在全局统一 strokeWidth(例如 1.52.0)。

3.D 表情符号策略

默认不建议在代码、标记和可见文本中使用表情符号。请用图标库中的字形替换符号。覆盖规则: 仅当用户明确要求俏皮 / 聊天风格 / 原生社交平台氛围时,才允许使用表情符号;即便如此,也应有目的地少量使用。

3.E 响应式与布局机制

  • 统一断点(sm 640md 768lg 1024xl 12802xl 1536)。
  • 使用 max-w-[1400px] mx-automax-w-7xl 约束页面布局。
  • 视口稳定性: 全高首屏区块禁止使用 h-screen。必须始终使用 min-h-[100dvh],以防止由 iOS Safari 地址栏引起的移动端布局跳动。
  • 网格优先于弹性盒计算: 禁止使用复杂的弹性盒百分比计算(w-[calc(33%-1rem)])。必须始终使用 CSS 网格(grid grid-cols-1 md:grid-cols-3 gap-6)。

3.F 依赖项验证(强制要求)

在导入任何 3rd 方库之前,请检查 package.json。如果缺少该软件包,请先输出安装命令。禁止假定库已存在。

---

4. 设计工程指令(偏差修正)

大模型往往默认套用陈词滥调。应主动覆盖这些默认倾向。每条规则都有根据上下文调整的覆盖路径。

4.1 排版

  • 展示字体 / 标题: 默认为 text-4xl md:text-6xl tracking-tighter leading-none
  • 正文 / 段落: 默认为 text-base text-gray-600 leading-relaxed max-w-[65ch]
  • 无衬线字体选择:
  • 不建议作为默认选择: Inter。应优先选择 GeistOutfitCabinet GroteskSatoshi,或符合品牌气质的衬线字体。
  • 覆盖规则: 当用户明确要求中性 / 标准 / Linear 风格的观感,或简报所描述的是公共部门 / 无障碍优先的网站时,可使用 Inter。
  • 应了解的字体搭配: Geist + Geist MonoSatoshi + JetBrains MonoCabinet Grotesk + Inter TightGT America + IBM Plex Mono
  • 衬线字体规范(强烈不建议作为默认选项):
  • 衬线字体非常不建议作为任何项目的默认字体。“有创意感 / 高端感 / 编辑感”并不是选择衬线字体的理由。agent 默认认为“创意类简报 = 衬线字体”的思维模式,是生产测试轮次中最常被验证的 AI 痕迹。
  • 仅当以下任一条件明确成立时,才可使用衬线字体:
  • 品牌简报明确点名某款衬线字体,或者
  • 美学风格确实属于编辑 / 奢华 / 出版物 / 手稿 / 传统 / 复古类型,并且你能说明这款特定衬线字体为何适合这个特定品牌
  • 对于其他所有情形(创意机构、设计工作室、现代品牌、高端消费品、作品集、生活方式类),默认使用无衬线展示字体(Geist Display、ABC Diatype、Söhne Breit、Cabinet Grotesk Display、Migra Sans、GT Walsheim、Inter Display、PP Neue Montreal)。无衬线展示字体并不“无聊”;它们成为默认选择的原因,与黑色成为时尚界默认色的原因相同。
  • 强调规则(相关):当你想强调标题中的某个词时(例如动态呈现“和 spatial 设计”),请使用同一字体的斜体或粗体。不得仅为增加视觉趣味而在无衬线标题中随意插入一个衬线词,反之亦然。混用字体家族来强调内容是业余做法。在同一字体家族中使用斜体或粗体才是正确做法。
  • 明确禁止作为默认选项:FrauncesInstrument_Serif(LLM 最偏爱的两款展示衬线字体)。
  • 如果有充分理由使用衬线字体(根据上述规则,这种情况很少见),请从以下列表中轮换选用,禁止在连续项目中重复使用同一款衬线字体:PP Editorial New、GT Sectra Display、Cardinal Grotesque、Reckless Neue、Tiempos Headline、Recoleta、Cormorant Garamond、Playfair Display、EB Garamond、IvyPresto、Migra、Editorial Old、Saol Display、Söhne Breit Kursiv、Domaine Display、Canela、Schnyder、Tobias、NB Architekt、ITC Galliard。
  • 斜体下伸部留白(强制要求):展示字体使用斜体时,如果单词包含带下伸部的字母(y g j p q),leading-[1]leading-none 会裁切下伸部。至少使用 leading-[1.1],并在包裹元素上增加 pb-1mb-1 作为预留空间。发布前检查展示标题中的每个斜体词。

4.2 色彩校准

  • 强调色最多 1 种。默认饱和度低于 80%。
  • LILA 规则: 不建议默认采用“AI 紫色 / 蓝色辉光”美学。不要自动添加紫色按钮辉光,也不要随意使用霓虹渐变。使用中性色基底(锌灰 / 板岩灰 / 石灰色),并搭配单一的高对比度强调色(祖母绿、电光蓝、深玫红、焦橙等)。
  • 覆盖规则: 如果品牌或简报明确要求使用紫色 / 紫罗兰色 / 淡紫色,就充分采用。但要有明确意图地落实:使用一致的调色板、协调的中性色和克制的渐变。不要采用千篇一律、粗制滥造的 AI 渐变。
  • 每个项目只使用一套调色板。 不得在同一项目中混用暖灰色和冷灰色。
  • 颜色一致性锁定(强制要求):为页面选定强调色后,必须在整个页面中使用该颜色。暖灰色网站不应在第 7 个区块中突然出现蓝色 CTA。使用玫瑰色强调色的网站也不应在页脚出现青绿色状态徽章。选定一种强调色后将其锁定,并在发布前检查每个组件。
  • 高端消费品配色禁令(强制要求,第二常见的 AI 痕迹):
  • 对于高端消费品简报(厨具、健康产品、手工艺品、奢侈品、传统工艺品、DTC 家居用品等),LLM 的默认选择是暖米色/奶油色 + 黄铜色/陶土色/牛血红/赭色 + 浓缩咖啡色/墨色的深色文本。具体而言,以下十六进制色值系列禁止用作默认背景色和强调色:
  • 背景色:#f5f1ea#f7f5f1#fbf8f1#efeae0#ece6db#faf7f1#e8dfcb(均为“暖纸色 / 奶油色 / 粉笔色 / 骨白色”)
  • 强调色:#b08947#b6553a#9a2436#9c6e2a#bc7c3a#7d5621(均为“黄铜色 / 陶土色 / 牛血红 / 赭色”)
  • 文本颜色:#1a1714#1a1814#1b1814(均为“浓缩咖啡色 / 暖调近黑色”)
  • 禁止将这套配色作为高端消费品需求简报的默认选择。你以往交付的每个高端消费品网站都使用了这套完全相同的配色。品牌会因此失去辨识度。
  • 默认替代方案(轮换使用,禁止重复使用):
  • 冷调奢华:银灰色 + 铬色 + 烟灰色(想想 Tesla 和去掉皮革元素的 Apple Watch Hermes)
  • 森林:深绿色 + 骨白色 + 琥珀色强调色(想想 Filson 和 Patagonia 的高端风格)
  • 黑色与棕褐色:纯正的近黑色 + 暖棕褐色,对比鲜明,不使用米色
  • 钴蓝 + 奶油色:饱和蓝色搭配单一中性色,不使用黄铜色
  • 陶土色 + 石板灰:暖锈色搭配冷灰色,不使用黄铜色
  • 橄榄色 + 砖红色 + 纸白色:低饱和橄榄色加砖红色强调色
  • 纯单色 + 单一高饱和亮点:灰白色 + 近黑色 + 一种明亮强调色(电光蓝、祖母绿、亮粉色等)
  • 配色轮换规则:如果你生成的上一个高端消费品项目使用了米色+黄铜色系列,本项目就必须使用不同的配色系列。不得连续两次交付相同的暖调手作配色。
  • 例外:仅在以下情况下可接受米色+黄铜色+浓缩咖啡色配色:品牌需求明确指定了这些颜色;或者品牌识别确实属于复古 / 手工艺 / 暖调手作风格,且你能清楚说明这套特定配色为何适合这个特定品牌。禁止仅因“这是厨具需求”就默认采用这套配色。

4.3 布局多样化

  • 反居中偏置:DESIGN_VARIANCE > 4 时,应避免使用居中的首屏 / H1 区块。强制采用“分屏”(50/50)、“内容左对齐 / 素材右对齐”、“非对称留白”或滚动固定结构。
  • 例外:对于编辑式 / 宣言式 / 发布公告类需求,如果核心信息本身就是设计,居中的首屏区也可以使用。

4.4 材质感、阴影与卡片

  • 仅当卡片的抬升效果能够传达真实的层级关系时才使用卡片。否则,使用 border-tdivide-y 或留白进行分组。
  • 使用阴影时,应使其带有背景色相。浅色背景上不得使用纯黑色投影。
  • VISUAL_DENSITY > 7 时,禁止使用通用卡片容器。数据指标应置于简洁布局中,并保留呼吸空间。
  • 形状一致性锁定(强制要求):为页面选择一种圆角尺度并始终坚持。选项包括:全直角(圆角半径 0)、全柔和(圆角半径 12-16px)、全胶囊形(交互元素采用完全圆角)。只有存在成文规则(例如“按钮为全胶囊形、卡片为 16px、输入框为 8px”)且处处遵循时,才允许混用体系。方正布局中出现圆角按钮,或胶囊按钮页面中出现直角卡片,都属于有缺陷的设计。

4.5 交互式 UI 状态

大模型往往默认“仅实现静态成功状态”。始终实现完整的状态周期:

  • 加载状态:使用形状与最终布局相匹配的骨架式加载器。避免使用通用圆形加载指示器。
  • 空状态:精心构图,并说明如何填充内容。
  • 错误状态:提示应清晰,并采用行内呈现(表单)或上下文呈现(浮层通知仅用于瞬时错误)。
  • 触感反馈::active 状态下,使用 -translate-y-[1px]scale-[0.98] 模拟实体按压效果。
  • 按钮对比度检查(强制要求,无障碍):发布任何按钮前,确认按钮文字在按钮背景上清晰可读。白色按钮 + 白色文字、带有 text-white 标签的 bg-white CTA、无边框且直接置于页面背景上的透明按钮 → 均禁止使用。检查每个 CTA:对比度至少达到 WCAG AA 标准(正文为 4.5:1,大号文本为 3:1,字号 18px 及以上)。同一规则也适用于照片背景上的幽灵按钮(使用背板、遮罩或描边)。
  • CTA 按钮换行禁令(强制要求):桌面端按钮文字必须保持单行。如果“查看精选作品”之类的标签换成 2 行或 3 行,说明按钮设计有缺陷。可通过以下任一方式修复:缩短标签(主要 CTA 最多 3 个单词,最好为 1-2 个),或加宽按钮(不得人为限制 CTA 的 max-width)。桌面端出现换行的 CTA 属于预检失败。
  • 禁止重复 CTA 意图(强制要求):同一页面上出现两个意图相同的 CTA 即为预检失败。相同意图的示例:“取得联系” + “联系我们” + “聊一聊” + “启动项目” + “开始合作” + “主动联系” = 均属于“联系”意图 → 选择一个标签,并在整个页面(导航、首屏、页脚)统一使用。“免费试用” + “开始使用” + “免费注册”同理(均属于“注册”意图),“查看作品” + “查看精选作品” + “浏览项目”也同理(均属于“作品集”意图)。每种意图只使用一个标签。
  • 表单对比度检查(强制要求,无障碍):表单输入框、占位文本、焦点环、辅助文本和错误文本相对于区块背景的对比度均须达到 WCAG AA 标准。近白色表单上的浅色占位文本、白色页面区块中的白色表单,以及对比度低于 4.5:1 的表单标签 → 均禁止使用。发布前检查每个表单。

4.6 数据与表单模式

  • 标签置于输入框上方。辅助文本可选,但需保留在标记中。错误文本置于输入框下方。输入块统一使用 gap-2
  • 任何时候都不得将占位符用作标签。

4.7 布局规范(硬性规则。违反其中任何一条都等于交付有缺陷的成果)

  • 首屏区必须完整容纳在初始视口内。桌面端标题最多 2 行,副文案最多 20 个词且最多 3-4 行,无需滚动即可看到 CTA。如果文案过长:减小字号或删减文案。如果无法用 20 个词的副文案说明价值主张,问题在于价值主张不清晰,而不是规则过严。禁止让首屏区溢出,迫使用户滚动才能找到 CTA。
  • 首屏字号规范。字号和图像尺寸必须*统筹*规划。如果首屏素材较大且标题超过 6 个词,起始字号不得设为 text-7xl/text-8xl。合理的默认范围:大多数首屏区使用 text-4xl md:text-5xl lg:text-6xl;只有标题为 3-5 个词时,才使用 text-6xl md:text-7xl。首屏标题排成 4 行始终是字号错误,绝不是文案长度问题。
  • 首屏顶部内边距上限(强制要求):桌面端首屏顶部内边距最大为 pt-24(≈6rem)。超过此值会使首屏内容悬在视口中部,看起来像布局错误,而非有意留白。如果首屏需要更多呼吸空间,请增大字号或素材尺寸,而不是顶部内边距。
  • 首屏堆叠规范(最多 4 个文本元素)。首屏用于呈现单一重点,而不是功能列表。允许使用的文本元素总计最多 4 个:
  1. 眉题(小号全大写标签)或品牌条,也可以两者都不用 - 只能选择零个或一个
  2. 标题(最多 2 行,见上文)
  3. 辅助文案(最多 20 个单词,最多 4 行)
  4. 行动号召(1 个主要项 + 最多 1 个次要项)
  • 首屏中禁止出现:CTA 下方的小号标语(“支持 GitHub、GitLab 和自托管 Git”)、信任背书微型条(“以下工程团队正在使用……”)、价格预告(“个人用户免费,团队版每位用户 $10”)、功能项目符号列表、社会认同头像行。这些内容都应移至首屏正下方各自的专属区块。
  • 如果同一首屏区中既有眉题,又有行动号召下方的标语,就删掉标语。如果既有品牌条,又有标语,也删掉标语。每个首屏区最多只能有一个小型文本元素。
  • “由以下企业使用” / “受以下企业信赖”徽标墙应放在首屏下方,绝不能置于首屏内。首屏用于呈现价值主张和主要 CTA。徽标墙是紧接其下的独立区块。不要把信任徽标硬塞进首屏文案所在的同一行弹性布局中。
  • 桌面端导航栏必须以单行呈现。如果导航项在 lg(1024px)下无法全部容纳,应缩短标签、移除次要项,或改用汉堡菜单。桌面端出现两行导航即属于设计缺陷。
  • 导航栏高度上限:桌面端最高 80px,默认为 64-72px。不得使用占据视口 15% 的超大“创意机构”式导航栏。
  • 便当式网格必须富有节奏变化,而不能单侧重复。不得连续堆叠 6 个左图 / 右文布局行。应使构图多样化:穿插全宽功能行,使用非对称图块尺寸和纵向分隔。
  • Bento 单元格数量规则(强制要求):Bento 网格的单元格数量必须与内容数量完全一致。3 个项目 → 3 个单元格(按 1+2、2+1 或非对称三格拆分)。5 个项目 → 5 个单元格(2+3、3+2、首屏+4 等)。如果网格中间或末尾有空单元格,说明规划有误。请重新调整网格结构,不要放入空白图块。
  • 分区布局重复禁令。某个分区一旦使用一种布局类型(例如 3 列图片卡片、全宽引言、图文分栏),该类型在整个页面中最多只能出现一次。“精选委托作品”的布局不得与“我们的服务”雷同。包含 8 个分区的落地页必须使用至少 4 种不同的布局类型。
  • 之字形交替布局上限(强制要求)。先“左图 + 右文”、再“左文 + 右图”的之字形交替布局很俗套。采用这种图文拆分模式的连续区块最多为 2 个。连续图文拆分中的 3rd 区块会导致预检失败。可用全宽区块、垂直堆叠区块、Bento 网格、跑马灯或其他布局类型来打破这种模式。
  • 眉题标签克制(强制要求,生产测试中被违反次数排名第 1 的规则)。 “眉题标签”是位于分区标题上方的小号大写宽字距标签(例如 FOUR COLORWAYSSELECTED WORKTHE HARDWAREGit-native task management)。典型的 CSS 特征为:text-[11px] uppercase tracking-[0.18em]font-mono text-[10.5px] uppercase tracking-[0.22em]。每个由 AI 构建的网站都会在每个分区标题上方放置眉题标签,形成千篇一律的模板化节奏。硬性规则:
  • 每 3 个区块最多使用 1 个眉题。首屏区块计为 1 个区块。因此,有 9 个区块的页面最多可使用 3 个眉题。
  • 如果区块 A 使用了眉题,接下来的 2 个区块均不得使用眉题。
  • 预检是机械式检查:统计所有区块组件中 uppercase tracking 的出现次数(或标题上方类似的小型大写等宽字体标签)。如果数量 > ceil(sectionCount / 3),则输出不合格。
  • 眉题的替代做法:将其完全删除。仅使用标题就足够。如果需要对区块分类,该区块在页面上的位置本身已起到分类作用,无需标签。
  • 拆分式标题禁令(强制要求)。 将“左侧大标题 + 右侧小段说明文字”用作分区标题的模式(左侧跨 7 或 8 列,右侧跨 4 或 5 列,并在右栏悬置一小段正文)默认禁止使用。每个分区应仅传达一条聚焦的信息。如果确实同时需要标题和说明段落,请将二者垂直堆叠(标题在上,正文在下,最大宽度为 65ch)。仅当存在真正的构图理由时才采用拆分式标题模式(例如右栏承载视觉或交互元素,而不只是填充文字)。
  • 便当盒式网格背景多样性(强制要求)。便当盒式网格和功能网格区块不得是 6 张置于白色背景上、内部仅有文字的白色卡片。任何多单元格网格中,至少需要有 2-3 个单元格具备真正的视觉变化:真实图像、适合品牌的渐变(而非 AI 紫色)、图案或带色调的背景。即使页面其余部分表现出色,奶油色背景上的奶油色便当盒式网格若内部仅有文字排版,也会显得是乏味的 AI 默认样式。
  • 必须为每个区块明确指定移动端折叠方式。对于每个多列布局,都必须在同一组件中声明 < 768px 的回退布局。不得想当然地认为“它自然会正常工作,Tailwind 会处理好”。

4.8 图像与视觉素材策略

落地页和作品集是视觉产品。仅含文本并用 div 制作伪截图的页面粗制滥造。

视觉素材的优先顺序:

  1. 优先使用图像生成工具。只要环境中有任何图像生成工具可用(generate_image、MCP 图像工具、集成于 IDE 的生成工具、OpenAI 图像工具等),就必须使用它为各区块创建专用素材:首屏摄影图、产品照片、纹理背景和氛围图。按适合该区块的宽高比生成。不得因为手写 CSS 看起来更快而跳过此步骤。
  2. 其次使用真实网络图片。没有生成工具可用时,使用真实摄影图片来源。可接受的默认选项:
  • https://picsum.photos/seed/{descriptive-seed}/{w}/{h} 用作摄影占位图(seed 应描述对应区块,例如 marrow-cookware-kitchen
  • 简要说明中提供的真实图库图片或品牌 URL
  • 若明确允许,可使用开放许可来源(通过直接 URL 使用 Unsplash,或使用 Pexels)
  1. 最后的办法:告知用户。 如果两种方式都不可行,不得使用手工制作的 SVG 插图或基于 div 的“虚假截图”来填满页面。应改为留下标签清晰的占位区(<!-- TODO: hero product photo, 1600x1200 -->),并在回复末尾写明:*“此页面的以下位置需要真实图片:\[位置列表\]。请生成或提供这些图片。”*

即使是极简主义网站也需要真实图片。 纯文本页面不是极简主义,而是未完成的作品。即使是编辑风格的 Linear 式网站,也至少需要 2-3 张真实图片(首屏主视觉、一张产品/生活方式照片和一张辅助图片)。如果简要说明要求克制的风格,请生成黑白极简摄影图片;不要仅因档位较低就完全省略图片。

使用真实公司徽标提供信任背书。 当简要说明要求加入“受……信赖 / 已被……采用 / 客户”徽标墙时,不得默认使用纯文本字标(将 <span>Acme Co</span> 排成一行)。请使用真实的 SVG 徽标:

  • 来源:Simple Iconshttps://cdn.simpleicons.org/{slug}/ffffff 可用于任意颜色,也可使用 simple-icons npm 包)。覆盖大多数知名品牌。
  • 备选:devicon,用于技术栈徽标(@svgr/cli 或 CDN)。
  • 虚构了品牌名称?那也要设计一个 SVG 标志。 生成一个与页面风格匹配的简单字母组合标志(圆圈中的单个字母、双字母连字或抽象字形),并以内联 <svg> 的形式呈现。为虚构品牌名称使用纯文本字标会显得普通。
  • 始终确保徽标在浅色和深色模式下均能正确呈现(深色底白色、浅色底黑色,或使用单色主题变量)。
  • 仅徽标规则(强制要求): 徽标墙 = 只有徽标,不含其他内容。不得在每个徽标下方显示行业 / 类别标签(例如不得在 Vercel 下方添加 hosting,不得在 Stripe 下方添加 payments,也不得在 Cloudflare 下方添加 infra)。徽标本身就是可信度的体现,标签并不会提供用户尚不了解的信息。可选项:将品牌名称作为供屏幕阅读器使用的替代文本,也可添加指向品牌网站的链接。仅此而已。

手工制作的插图:

  • 库中的 SVG 图标:可以使用(参见第 3.C 节)。
  • 手工制作的装饰性 SVG(自定义插图、徽标、标志):强烈不建议使用,且不得作为默认选择。仅在以下情况下可以接受:
  • 简要说明明确提出这一要求(“为我绘制一个 SVG 徽标”)
  • 它是一个单一、简单的几何标志(正方形、圆形或使用展示字体的字标)
  • 你对输出质量有信心

禁止使用基于 div 的虚假截图。 使用 <div> 矩形、虚假任务列表、虚假仪表板和虚假终端窗口渲染的“手工搭建产品预览”是明显的 AI 痕迹。如果需要展示产品:

  • 如果有真实截图的 URL,则使用它
  • 使用图片工具生成一张
  • 使用真实的组件预览(页面内实际 UI 的微型版本)
  • 或者完全省略预览,改用编辑风格的摄影图片

Hero 区域需要真实的视觉素材。 文本 + 渐变色块并不能构成 Hero,它只是占位内容。

4.9 内容密度

落地页靠第一印象取胜,而不是靠用户通篇阅读。大刀阔斧地删减。

  • 每个区块的默认内容结构: 简短标题(≤ 8 个词)+ 简短副段落(≤ 25 个词)+ 一项视觉素材或一个 CTA。如需增加内容,必须根据该区块的职责说明其必要性。
  • 不要设置堆砌数据的区块。 一张 20 行的出版物表格、一份 30 行的奖项列表,或营销页面上的巨型定价矩阵,都是错误的布局。请改用:
  • 最重要的 3-5 项内容 + “查看完整列表”链接
  • 使用跑马灯 / 轮播展示更多内容
  • 如果数据本身就是产品,则应使用完全独立的页面
  • 长列表需要改用其他 UI 组件,而不是单纯加长列表。 默认采用带项目符号的 <ul> / divide-y 行,是偷懒的选择。如果项目数 > 5,请改用以下方案之一:
  • 将项目分组后采用 2 列布局
  • 卡片网格,每个项目包含图片 + 标签
  • 如果项目可分类,则使用标签页 / 折叠面板
  • 支持水平滚动吸附的胶囊项
  • 对于需要展现广度的列表(客户评价、徽标、能力项),使用轮播
  • 用跑马灯展示“大量无需逐项关注的内容”
  • 一份包含 10 行且每行下方都有细分隔线的规格表,是最糟糕的默认方案。可将各行归入 2-3 个分组并只使用少量分隔线,或者改用每项规格一张卡片的布局。

  • 规格表尤其如此(Marrow 炊具模式)。 对于炊具 / 硬件 / 服装 / 手工制品类需求,逐行使用 border-b 的冗长产品规格表是 AI 默认套路。禁止使用。具体替代方案如下:
  • 2 列卡片网格: 每项规格单独使用一张卡片,包含规格名称、规格值(以大号数字展示),以及一行阐明“为何重要”的正文。桌面端按 2 列排列,移动端按 1 列排列。
  • 支持滚动吸附的水平胶囊项: 每项规格对应一个胶囊项,用户可以轻扫浏览。
  • 分组区块: 将 10 项规格分为 3 个逻辑组(例如“材质”“烹饪”“保修”),每组只使用一条柔和的分隔线和一个分组标题。
  • 重点项与其余项: 将 3-4 项主打规格以大型展示磁贴呈现,其余规格收起到“查看完整规格”的可展开区域中。
  • 交付前文案自查(强制要求): 在宣布任何任务完成之前,重新检查页面上的每一个可见字符串(标题、副标题、眉题标签、按钮标签、正文文案、说明文字、替代文本、页脚文本、错误消息)。标记所有存在以下问题的字符串:
  • 语法不通(“在它的过去免费”、“两个方案,但其中一个是诚实的”,以及脱离语境的“把它摆到桌面上”)
  • 指代不清(缺少前文语境却写“我们计划继续保持这样”)
  • 听起来像 AI 幻觉(讨巧但错误的文字游戏、牵强且无法成立的比喻、“优雅的虚无”之类的措辞)
  • 读起来像是 LLM 在刻意显得深思熟虑(隐含攻击性的谦逊、伪工匠式标签、故作诗意的微型元信息)
  • 重写每个被标记的字符串。如果不确定某个字符串是否表意清楚,就将其替换为直白、实用的句子。由 AI 生成的俏皮文案比平淡文案更糟糕。

  • 伪精确数字会被标记。 诸如 92%4.1×48k5.8 mm13.4 lb 这类数字,要么:
  • 来自真实数据(需求简述、品牌指南、公开指标)- 可以接受
  • 被明确标注为模拟内容(<!-- mock -->、“示例”、“样例数据”)- 可以接受
  • 是 AI 为营造美感而杜撰的规格 - 禁止。不得伪造品牌未宣称的工程精度。
  • 每个页面只使用一种文案语体。 除非品牌语气明确要求,否则不要在同一构图中混用技术型等宽文本(“47 个任务 · 每天 0.6 次上下文切换”)、编辑风格的叙述文案和有冲击力的营销文案。

4.10 引语与客户评价

  • 引语正文最多 3 行。严禁达到 6 行。如果原始引语更长 → 将其删减。落地页中的引语是摘录,不是完整评价。
  • 对于字号很小的文本(如页脚样式的客户评价),行数上限可以略微放宽。原则是:“一眼就能看完。”
  • 不得在引语文本中使用长破折号作为设计修饰(长停顿、动态长破折号、长破折号项目符号)。参见第 9.G 节 - 完全禁止使用长破折号。
  • 署名:姓名 + 职位 +(可选)公司。不得只写姓名(“- Sarah”)。
  • 引号:使用真正的排版引号( " " ),或者完全不使用。不得使用直式 ASCII 引号( " )。

4.11 页面主题锁定(浅色/深色模式一致性)

整个页面只能采用一种主题。各区段不得反转主题。

  • 如果页面采用深色模式,所有区段都必须采用深色模式。不得在深色区段之间夹入采用暖纸色的浅色模式区段(反之亦然)。不得让用户在滚动到页面中途时感觉进入了另一个网站。
  • 例外情况:如果需求简述明确要求采用“色块叙事”或“滚动时切换主题”手法,并且这是有意为之的构图(仅进行一次带有强烈过渡效果的完整主题切换,而非随机交替),则每个页面可以使用一次。
  • 默认行为:在页面级别选择浅色、深色或自动模式(prefers-color-scheme),并将其锁定。同一主题色系内,区段级背景使用不同深浅没有问题(bg-zinc-950bg-zinc-900 相邻);但在采用 bg-zinc-950 的页面中途改用 bg-amber-50,就是设计错误。
  • 使用内置主题功能的设计系统时(Radix Themes、搭配 <Theme> 的 shadcn/ui),只在 layout.tsx 或页面根节点设置一次主题。不得让各个区段单独覆盖主题。

---

5. 基于上下文的主动应用

这些是工具,而不是默认设置。仅在设计判断要求使用时采用。这些都不会自动触发。

  • 液态玻璃 / 玻璃拟态:适用于高端消费品、接近 Apple 设计语言、奢侈品牌或媒体叠加的氛围。不适用于仪表盘、公共部门或“乏味的 B2B”场景。使用时,不应只使用 backdrop-blur:添加一条 1px 的内边框(border-white/10)和细微的内阴影(shadow-[inset_0_1px_0_rgba(255,255,255,0.1)]),以营造实体边缘的折射效果。在 prefers-reduced-transparency 条件下提供纯色填充回退方案。
  • 磁性微物理效果:MOTION_INTENSITY > 5 且简报呈现高端 / 趣味 / 设计机构风格时使用。只能在 React 渲染周期之外使用 Motion 的 useMotionValue / useTransform 实现。禁止使用 useState。参见第 3.B 节。
  • 持续微交互(脉冲、打字机、漂浮、流光、轮播):在 MOTION_INTENSITY > 5 且动效确实有助于该区段时使用(状态指示器、实时信息流、AI 感)。并非每张卡片都需要无限循环。如果区段仅用于传达信息,就保持静态。应用弹簧物理效果(type: "spring", stiffness: 100, damping: 20),不得使用线性缓动。
  • “声称有动效,就要展示动效。”如果 MOTION_INTENSITY > 4,页面必须真正呈现动效:至少包括首屏主视觉的入场过渡、关键区段的滚动显现,以及行动号召按钮的悬停物理效果。声称采用 MOTION_INTENSITY: 7 的静态页面是有缺陷的。反之,如果无法在现有工作范围内交付可正常运行的动效,就将档位降至 3,并交付一个干净利落的静态页面。不得只做一半而留下会出错的动效(被截断的 ScrollTriggers、跳动的入场动画、缺少清理函数)。
  • 动画必须有明确动机(强制要求)。 添加任何动画前,先问:“这个动画传达了什么?”有效答案包括:层级(将注意力引向正确的对象)、叙事(按符合叙事逻辑的顺序呈现内容)、反馈(响应用户操作)、状态过渡(表明某些内容发生了变化)。无效答案:“看起来很酷”。仅仅因为 GSAP 可用就到处使用 GSAP,是业余做法。每个 ScrollTrigger、每个跑马灯、每个固定分区都需要理由。如果无法用一句话说明理由,就删掉该动画。
  • 每页最多一个跑马灯(强制要求)。 横向滚动文字跑马灯(“徽标无尽滚动”“宣言横向滚动”“动态文字带”)每页最多只能使用一次。同一页面使用两个或更多跑马灯,会显得像偷懒的填充内容。选择一个跑马灯确实能为内容服务的分区;其他分区应采用不同布局。
  • GSAP 粘性堆叠模式(使用滚动堆叠时)。 “滚动卡片堆叠”必须是真正的粘性堆叠,而不是依次显现的列表。标准代码骨架见下文第 5.A 节。常见故障:触发器在滚动到一半时触发,而不是在视口顶部固定。修复方法:使用 start: "top top",而不是 start: "top center""top 80%"
  • GSAP 横向平移模式(使用横向滚动劫持时)。参见下文第 5.B 节的规范骨架。常见错误:动画在该区段固定之前就开始,因此用户会看到一张只显示了一半的幻灯片。修复方法相同:使用 start: "top top",固定外层容器,并让内层轨道与滚动进度同步。

5.A 粘性堆叠 - 规范骨架

"use client";
import { useRef, useEffect } from "react";
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
import { useReducedMotion } from "motion/react";

gsap.registerPlugin(ScrollTrigger);

export function StickyStack({ cards }: { cards: React.ReactNode[] }) {
  const ref = useRef<HTMLDivElement>(null);
  const reduce = useReducedMotion();

  useEffect(() => {
    if (reduce || !ref.current) return;
    const ctx = gsap.context(() => {
      const cardEls = gsap.utils.toArray<HTMLElement>(".stack-card");
      cardEls.forEach((card, i) => {
        if (i === cardEls.length - 1) return;
        ScrollTrigger.create({
          trigger: card,
          start: "top top",                              // pin at viewport top
          endTrigger: cardEls[cardEls.length - 1],
          end: "top top",
          pin: true,
          pinSpacing: false,
        });
        gsap.to(card, {
          scale: 0.92,
          opacity: 0.55,
          ease: "none",
          scrollTrigger: {
            trigger: cardEls[i + 1],
            start: "top bottom",
            end: "top top",
            scrub: true,
          },
        });
      });
    }, ref);
    return () => ctx.revert();
  }, [reduce]);

  return (
    <div ref={ref} className="relative">
      {cards.map((card, i) => (
        <div
          key={i}
          className="stack-card sticky top-0 min-h-[100dvh] flex items-center justify-center"
        >
          {card}
        </div>
      ))}
    </div>
  );
}

关键点:start: "top top"pin: true;除最后一张卡片外,每张卡片都被固定;缩放 / 不透明度变换由下一张卡片的滚动触发器驱动(因此下一张卡片进入时,前一张卡片会缩小)。

5.B 横向平移 - 规范骨架

"use client";
import { useRef, useEffect } from "react";
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
import { useReducedMotion } from "motion/react";

gsap.registerPlugin(ScrollTrigger);

export function HorizontalPan({ children }: { children: React.ReactNode }) {
  const wrap = useRef<HTMLDivElement>(null);
  const track = useRef<HTMLDivElement>(null);
  const reduce = useReducedMotion();

  useEffect(() => {
    if (reduce || !wrap.current || !track.current) return;
    const ctx = gsap.context(() => {
      const distance = track.current!.scrollWidth - window.innerWidth;
      gsap.to(track.current, {
        x: -distance,
        ease: "none",
        scrollTrigger: {
          trigger: wrap.current,
          start: "top top",                              // pin starts when section top hits viewport top
          end: () => `+=${distance}`,                    // scroll distance = track width minus viewport
          pin: true,
          scrub: 1,
          invalidateOnRefresh: true,
        },
      });
    }, wrap);
    return () => ctx.revert();
  }, [reduce]);

  return (
    <section ref={wrap} className="relative overflow-hidden">
      <div ref={track} className="flex h-[100dvh] items-center">
        {children}
      </div>
    </section>
  );
}

关键点:start: "top top"pin: trueend: "+=${distance}"(滚动长度 = 所需的横向移动距离)、scrub: 1。外层容器会被固定,用户纵向滚动时,内层轨道会横向滑动。

5.C 滚动显现交错 - 规范骨架(更轻量的替代方案)

对于简单的“元素进入视口时出现”效果(无需固定),优先使用 Motion 的 whileInView 而不是 GSAP,前者更轻量,也不需要 ScrollTrigger:

"use client";
import { motion, useReducedMotion } from "motion/react";

export function RevealStagger({ items }: { items: string[] }) {
  const reduce = useReducedMotion();
  return (
    <ul className="grid gap-6">
      {items.map((item, i) => (
        <motion.li
          key={item}
          initial={reduce ? false : { opacity: 0, y: 24 }}
          whileInView={{ opacity: 1, y: 0 }}
          viewport={{ once: true, amount: 0.3 }}
          transition={{
            duration: 0.6,
            delay: i * 0.06,
            ease: [0.16, 1, 0.3, 1],
          }}
        >
          {item}
        </motion.li>
      ))}
    </ul>
  );
}

将其用于:功能列表、用户评价网格、徽标墙,以及任何只需“滚动进入视口时显示”的内容。将 GSAP 留给实际的固定/滚动同步工作。

5.D 禁止的动画模式

  • 禁止使用 window.addEventListener("scroll", ...)。该代码会在每个滚动帧运行,容易出现卡顿,且不支持批处理。改用 Motion 的 useScroll()、GSAP 的 ScrollTrigger、IntersectionObserver,或 CSS 的 scroll-driven animationsanimation-timeline: view())。
  • 在 React 状态中使用 window.scrollY 自定义计算滚动进度。原因相同。每帧都会重新渲染。
  • 会修改 React 状态的 requestAnimationFrame 循环。 改用运动值(useMotionValue + useTransform)。
  • 布局过渡: 对于可见状态变化(重新排序列表、展开模态框、路由之间的共享元素),使用 Motion 的 layoutlayoutId 属性。不要为了“保险起见”给静态内容套用 layout 属性,这会增加测量工作量。
  • 交错编排: 对于顺序至关重要的内容揭示,使用 staggerChildren(Motion)或 CSS 级联(animation-delay: calc(var(--index) * 100ms))。使用 staggerChildren 时,父级(variants)和子级必须处于同一个客户端组件树中。

---

6. 性能与可访问性防护规则

6.A 硬件加速

  • 只能为 transformopacity 添加动画。禁止为 topleftwidthheight 添加动画。
  • 谨慎使用 will-change: transform,且仅用于实际会执行动画的元素。

6.B 减少动态效果(强制要求)

  • MOTION_INTENSITY > 3 时,任何动态效果都必须遵循 prefers-reduced-motion 这一要求不容妥协。
  • 在 Motion 中:使用 useReducedMotion() 进行封装,并降级为静态效果。
  • 在 CSS 中:仅在 @media (prefers-reduced-motion: no-preference) 条件下启用动画,或在 @media (prefers-reduced-motion: reduce) 中提供禁用动画的覆盖代码块。
  • 在减少动态效果模式下,无限循环、视差、滚动劫持和磁性物理效果必须降级为静态/即时效果。

6.C 暗色模式(任何面向消费者的页面均强制要求)

  • 设计时应从一开始就兼顾两种模式。未经用户明确指示,禁止交付仅支持浅色或仅支持暗色的版本。
  • 使用 Tailwind 的 dark: 变体或 CSS 变量来定义令牌。每个项目只选择一种策略。
  • 不要在此规定具体的暗色模式配色。 由需求说明决定。在两种模式下保持视觉层级和品牌识别度,并确保对比度达到 WCAG AA(正文达到 AAA)。
  • 遵循 prefers-color-scheme: dark。除非品牌方坚持采用单一模式,否则默认遵循系统偏好。

6.D 核心 Web 指标目标

  • LCP < 2.5s。首屏主视觉图像必须使用 next/image priority 或进行预加载。
  • INP < 200ms。将繁重任务移出主线程。
  • CLS < 0.1。为图像、字体和嵌入内容预留空间。
  • 在宣布页面完成前运行 Lighthouse。

6.E DOM 开销

  • 颗粒 / 噪点滤镜只能应用于固定定位且设置了 pointer-events-none 的伪元素(例如 fixed inset-0 z-[60] pointer-events-none)。严禁应用于滚动容器;持续的 GPU 重绘会严重损害移动端 FPS。
  • 注意打包体积。Motion 的体积并不小。Three.js 的体积很大。对所有非首屏内容进行懒加载。

6.F z-index 使用约束

严禁随意滥用 z-50z-10。仅将 z-index 用于系统级层级上下文(粘性导航栏、模态框、覆盖层、颗粒效果层)。在项目常量文件中记录 z-index 层级体系。

---

7. 参数档位定义(技术参考)

DESIGN_VARIANCE(级别 1-10)

  • 1-3(可预测): 对称的 CSS 网格(12 列、相等的 fr 单元)、一致的内边距和居中对齐。
  • 4-7(偏移): 通过 margin-top: -2rem 形成重叠、采用不同的图像宽高比(4:3 与 16:9 相邻),并在居中对齐的数据上方使用左对齐标题。
  • 8-10(非对称): 瀑布流布局、采用分数单位的 CSS 网格(grid-template-columns: 2fr 1fr 1fr)、大面积空白区域(padding-left: 20vw)。
  • 移动端覆盖规则: 对于 4-10 级,在 md: 及以上断点启用的非对称布局,在视口宽度为 < 768px 时必须折叠为严格的单列布局(w-fullpx-4py-8)。

MOTION_INTENSITY(级别 1-10)

  • 1-3(静态): 不使用自动动画。仅使用 CSS 的 :hover:active 状态。prefers-reduced-motion 本来就是默认模式。
  • 4-7(流畅的 CSS): transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1)。载入动画采用 animation-delay 级联。重点使用 transformopacity
  • 8-10(高级动画编排): 复杂的滚动触发式显现动画、视差效果和滚动驱动动画(CSS animation-timeline 或 GSAP ScrollTrigger)。使用 Motion 钩子。严禁使用 window.addEventListener('scroll'),这是硬性禁令,并非“建议避免”。有关允许的替代方案,请参阅第 5.D 节。

VISUAL_DENSITY(级别 1-10)

  • 1-3(艺术画廊): 大量留白。区块间距巨大(py-32py-48)。高端、简洁。
  • 4-7(日常应用): 标准 Web 应用间距(py-16py-24)。
  • 8-10(驾驶舱): 内边距紧凑。不使用卡片框;通过 1px 线条分隔数据。强制要求:所有数字均使用 font-mono

---

8. 深色模式协议

默认采用双模式。除非需求是模拟印刷品的编辑类设计,否则不得假定只需浅色模式。

8.A 令牌策略(选择一种并坚持使用)

  • Tailwind dark: 变体(工具类优先项目的默认选择):每个颜色工具类均与对应的深色变体配对(bg-white dark:bg-zinc-950text-gray-900 dark:text-gray-100)。
  • CSS 变量(适用于 shadcn/ui、Radix Themes 或支持主题配置的组件库):定义语义令牌(--surface--surface-elevated--text-primary--accent),并在 [data-theme="dark"]@media (prefers-color-scheme: dark) 下切换值。

8.B 此处不指定具体颜色

由需求简述和品牌决定。此 skill 仅强制执行以下内容:

  • 对比度 - 正文文本最低达到 WCAG AA,首屏文案以 AAA 为目标。
  • 层级一致性 - 浅色模式下有效的视觉层级在深色模式下也必须有效。如果 CTA 在浅色模式下醒目,在深色模式下也必须醒目。
  • 品牌保真度 - 主品牌色必须保持可辨识性。不得通过降低品牌色饱和度来适配深色模式。
  • 不得使用纯 #000000 和纯 #ffffff - 使用非纯黑色(zinc-950、近黑色暖灰)和非纯白色。纯色值会破坏层次感。

8.C 默认模式

除非品牌坚持采用特定模式,否则应遵循 prefers-color-scheme。如果任一模式无法保留关键品牌表达,则添加手动切换开关。

8.D 完成前在两种模式下测试

开发期间以两种模式打开页面。不得交付只在一种模式下查看过的页面。

---

9. AI 痕迹(禁止模式)

除非需求简述明确要求,否则应避免这些典型特征。

9.A 视觉与 CSS

  • 不得使用霓虹效果 / 外发光作为默认方案。改用内边框或带有细微色调的阴影。
  • 不得使用纯黑色(#000000)。 改用非纯黑色、zinc-950 或炭灰色。
  • 不得使用过度饱和的强调色。 降低饱和度,使其与中性色融合。
  • 不得过度使用渐变文字来呈现大标题。
  • 不得使用自定义鼠标光标。 这种做法已过时,且不利于无障碍和性能。

9.B 字体排印

  • 避免将 Inter 作为默认字体。 参见第 4.1 节。另有例外规则。
  • 不得使用只会显得喧闹的超大 H1 标题。 应通过字重 + 颜色控制层级,而不是单纯放大尺寸。
  • 衬线体限制: 衬线体适用于编辑型 / 奢华 / 出版类设计,不适用于仪表盘。

9.C 布局与间距

  • 数学意义上完美的内边距和外边距。不得出现因间距别扭而显得悬空的元素。
  • 不得使用 3 列等规格功能卡片。 禁止使用这种通用的“横向排列三个相同卡片”功能行。改用 2 列之字形布局、非对称网格、滚动固定布局或横向滚动方案。

9.D 内容与数据(“无名氏”效应)

  • 不得使用通用姓名。 “约翰·多伊”、“莎拉·陈”、“杰克·苏” → 使用富有创意、真实可信且符合当地文化的姓名。
  • 不得使用通用头像。 不得使用 SVG “蛋形”头像或 Lucide 用户图标 → 使用可信的照片占位图或有针对性的样式设计。
  • 禁止使用虚假完美数字。 避免使用 99.99%50%1234567。应使用自然、不规则的数据(47.2%+1 (312) 847-1928)。
  • 禁止使用粗制滥造的初创公司品牌名称。 “Acme”“Nexus”“SmartFlow”“Cloudly” → 应结合具体情境,构思听起来真实且有质感的名称。
  • 禁止使用空泛动词。 “提升”“无缝”“释放”“下一代”“彻底变革” → 只使用含义具体的动词。

9.E 外部资源与组件

  • 禁止手工绘制 SVG 图标。 使用 Phosphor / HugeIcons / Radix / Tabler。仅当用户明确要求时才可使用 Lucide。
  • 强烈不建议默认使用手工绘制的装饰性 SVG(见第 4.8 节)。
  • 禁止使用基于 div 的虚假截图。 禁止用 <div> 矩形构建虚假的产品 UI 来模拟截图。请使用真实图像、生成图像,或省略预览。
  • 禁止使用失效的 Unsplash 链接。 使用 https://picsum.photos/seed/{descriptive-string}/{w}/{h}、生成的照片占位图或实际资源。
  • shadcn/ui 自定义: 允许使用,但禁止保持默认状态。应根据项目的美学风格自定义圆角、颜色、阴影和字体排印。
  • 生产就绪的整洁度: 代码在视觉上应简洁、令人印象深刻,并经过细致打磨。

9.F 生产测试中的典型破绽(明令禁止)

这些模式源自对 LLM 生成落地页的真实测试。当模型试图让页面“看起来经过设计”时,往往会默认采用这些典型特征。除非简报明确要求其中某种模式,否则必须将其视为硬性禁令。

首屏与页面顶部

  • 禁止在首屏区域中使用版本标签。 禁止将 V0.6v2.0BETAINVITE-ONLY PREVIEWEARLY ACCESSALPHA 用作默认眉题。只有当简报明确涉及产品发布或预览状态时才可使用。
  • 禁止使用“品牌 · 编号 01”这类次级眉题。 省略“Marrow · 编号 01 · 6 夸脱款”这类微型元信息行。

区块编号与微型标签

  • 禁止使用带区块编号的眉题。 00 / INDEX001 · Capabilities002 · Featured commission06 · how it works05 · The honest table 均禁止使用。眉题应以直白语言说明主题,而不是编号。
  • 禁止在图像或 Bento 磁贴上使用 01 / 4 这类分页编号。 如果用户自己能数清,就不需要这种标签。
  • 禁止使用 Scroll · 001 Capabilities 这类滚动提示。 使用简单箭头或“滚动”即可;不要添加区块编号前缀。
  • 禁止将“作品索引,2018 - 2026”这类范围标签用作眉题。只需说明该区块的内容。

分隔符与圆点

  • 间隔号(·)需限量使用。 元数据条带中每行最多使用 1 个。禁止将其作为所有内容的默认分隔符(“foo · bar · baz · qux · quux”)。如需一套分隔方式,优先使用换行、细分隔线或分栏。
  • 禁止给每个列表项、导航项或徽章都添加装饰性彩色状态圆点。 默认禁止在“Q4 仅剩一个名额”前、每个导航链接前或每个任务行前放置彩色圆点。仅当圆点传达真实的语义状态(服务器状态、可用性标记)时才可使用,并且应克制使用。

长破折号与排版花饰

  • 禁止将长破折号()用作设计元素,也禁止在其他任何位置使用。 完整且不可妥协的禁令参见下文第 9.G 节。禁止在标题、眉题、胶囊元素、正文、引文、署名、说明文字、按钮文本和替代文本中使用长破折号字符。请使用普通连字符(-)。
  • 禁止将通过 <br> 断行并设为斜体的标题默认用作“设计手法”。 例如“走过三十\<br\>*年。*”这样的拆分。标题首先应自然流畅,只有需求明确要求时才可使用此类巧思。
  • 禁止使用垂直旋转文字(将“作品索引,2018 - 2026”旋转 90°)。这是设计机构作品集的陈词滥调。仅当简报明确要求设计机构 / Awwwards / 实验性风格,并且这种做法确有构图作用时才可使用。
  • 禁止将十字准线 / 发丝细线网格用作装饰。 禁止仅为让页面“显得经过设计”而绘制纵横线。仅当这些线条用于组织真实内容时才可使用。

虚假产品预览

  • 禁止在首屏主视觉区中使用基于 div 构建的虚假产品 UI(由带样式的 div 构建的虚假任务列表、虚假终端或虚假仪表板)。这是排名 #1 的 LLM 设计破绽。请使用真实截图、生成的图像或真实组件预览,也可以完全不使用预览。
  • 禁止在虚假截图中添加虚假版本页脚(“v0.6.2-rc.1”“上次同步:4s 前 · main”)。这毫无作用,而且会明显暴露出 AI 痕迹。

营销文案破绽

  • 禁止使用“低调地用于” / “低调地受到信赖” 这类社会认同标题。使用自然的表达:“受到信赖”“已在以下企业中使用”“客户包括”;如果徽标本身足以说明问题,也可以完全省略标题。
  • 禁止在引文、博客或侧边栏区域使用“来自一线” / “一线笔记” / “目前在工作台上” / “在我们的桌上” / “零散印版”这类诗意标签。 这会显得是在刻意营造工匠腔调。请使用简单实用的标签(“用户评价”“最新文章”“当前工作”),也可以省略标签。
  • 禁止在正文中使用“我们尊重法国同行”这类 假装谦逊的行业指涉。故作可爱,而且很有 AI 味。
  • 禁止在页眉/页脚中使用天气 / 地域信息条(“LIS 14:23 · 18°C”),除非需求明确涉及某个地点 / 跨时区分布的工作室。
  • 禁止在眉题下方添加微型元信息句。 在区域标题下方放置类似 *“其中每一项都是我们今天已经交付的功能,而不是路线图中的承诺。我们会有意让这份列表保持精简。”* 的句子会造成冗余。眉题 + 标题 + 正文就足够了。
  • 禁止使用通用步骤标签。 “阶段 1 / 阶段 2 / 阶段 3”“步骤 1 / 步骤 2 / 步骤 3”“阶段 01 / 阶段 02 / 阶段 03”“第一轮 / 第二轮 / 第三轮”。禁止使用。应直接以实际步骤内容作为标签。如果必须体现进度,请直接使用动词/名词(“安装”“配置”“发布”),而不是“阶段 1:安装”。

胶囊元素、标签和版本戳

  • 禁止在图像上叠加胶囊、标签或标记。 禁止使用叠加在照片上的 <span>,并在其中放置类似 Brand · 02PLATE · BRANDField notes - journal 的标签。要么让图像自行传达信息,要么直接在图像下方(图像外)添加说明文字。
  • 禁止将摄影署名用作装饰性说明文字。 在图库/picsum 图像下方放置 Field study no. 12 · Ines CaetanoPlate 03 · House archiveFrame XII · 35mm 之类的文字显得矫饰。只有在为真实照片的实际摄影师署名(且已获许可)时,才允许使用摄影署名。否则,应省略说明文字,或使用单行功能性说明文字(“鼠尾草绿的 6 夸脱款。”)。
  • 禁止在营销页面中使用版本信息页脚。 v1.4.2Build 0048last sync 4s ago · main 之类的页脚文字是 CLI / 开发工具的固定元素,不是落地页内容。营销页、落地页和作品集页面中禁止使用。
  • 禁止将“800 个名额中已预订 412 个”式实时库存计数器用作装饰。 仅当需求说明明确涉及限量发售候补名单,且有真实数据时才允许使用。

装饰性文字条带

  • 禁止在 Hero 区域底部放置装饰性文字条带。BRAND. MOTION. SPATIAL.TYPE / FORM / MOTIONDESIGN · BUILD · SHIPESTD. 2018 · LISBON · BRAND. MOTION. SPATIAL. 之类的内容作为横跨 Hero 区域底部的小号等宽全大写文字条带,是设计机构作品集的俗套设计。默认禁止使用。只有当该条带包含真实且可导航的链接(吸底导航),或真实的状态信息(Cookie 横幅、文档站点上的构建信息)时才允许使用。
  • 禁止在分区标题的右上角放置悬浮辅助文本。 典型模式是:分区有一个大号左对齐标题;在同一分区标题区域的右上角,悬浮着一小段说明文字,与其他任何内容都没有清晰的对齐关系。这种悬浮文本就是典型的 AI 痕迹。要么将辅助文本直接放在标题下方,要么构建简洁的 2 栏式标题区域(左侧:标题,右侧:对齐的正文),不要在角落放置一小段文字。

列表、分隔线和评分

  • 禁止在长列表/规格表的每一行同时使用 border-t + border-b 二选一(各行之间使用下边框,或在整组上方使用上边框),并尽量少用。包含 10 行且每行下方都有细线的规格表,是最偷懒的布局。替代的 UI 组件请参见第 4.9 节。
  • 禁止使用带填充背景轨道的评分条/进度条作为对比视觉元素。 如果需要展示“X 与 Y 的比值”对比,请优先使用数字 + 小图标,或不带背景轨道的微型行内条形图。在大面积填充的 bg-zinc-200 轨道上再叠加部分填充,是落地页上多余的仪表盘式 UI 元素。

地区信息、时间和滚动提示

  • 对于 99% 的需求说明,禁止使用地区/城市名称/时间/天气信息条。 Hero 区域中的“里斯本,与创始人合作”、页脚中的“1200-690 里斯本,葡萄牙”、导航中的“里斯本 14:23 · 18°C”,都是设计机构作品集常见的装饰性 AI 痕迹。仅在以下情况下允许使用:需求说明明确描述了工作涉及多个时区的全球分布式工作室,或以旅行为主题的品牌,或现实中的实体场所。页脚中仅提及一次联系地址没有问题;营造氛围的地区信息条则不允许。
  • 禁止使用滚动提示。 Scroll↓ scrollScroll to exploreScroll to walk through it、动态鼠标滚轮图标均禁止使用。如果用户还没有滚动页面,他们看到的就是 Hero 区域。他们知道如何滚动页面。视口底部无需标签。
  • 默认情况下,装饰性状态圆点数量必须为零。 导航项、列表行、徽章或状态标签前的彩色圆点都是典型的 AI 痕迹。仅当用于传达真实语义状态(实际服务器状态的实时指示器、实时可用性标志)时才允许使用,且每个页面分区最多使用一个。

9.G 长破折号禁令(最常被违反的一项识别特征规则)

严禁使用长破折号()。 它是 LLM 标志性的文风依赖手段,也是生产测试中排名第 1 的视觉破绽。不存在“有限使用”的例外,不存在“符合自然语言使用频率”的例外,也不存在“正文中可以使用”的例外。一概没有。

  • 禁止在标题中使用。 请改用句号或逗号。
  • 禁止在眉题 / 标签 / 胶囊 / 按钮文本 / 图片说明 / 导航项中使用。 请改用换行、分栏或细分隔线。
  • 禁止在正文中使用。 请重构句子:拆成两个用句号结尾的句子,或使用逗号、括号或冒号。
  • 禁止在引语署名中使用。 请使用两侧带空格的普通连字符( - ),或换行后以较细字重显示姓名。
  • 以短破折号形式()用作分隔符时也禁止使用。 日期范围(2018-2026)使用连字符。数字范围(€40-80k)使用连字符。

页面上唯一允许使用的横线字符是:

  • 普通连字符 -(用于复合词、范围和标记中的分隔线)
  • 数学中的负号(-5°C

只要输出中任何用户可见的位置出现一个 ,输出就无法通过交付前检查,必须重写。

这条规则必须严格遵守。以往,当长破折号限制被表述为“尽量少用”时,agent 会忽略该限制。此处的措辞是非此即彼的:长破折号数量为零。

---

10. 参考词汇(Agent 应了解的模式名称)

这是词汇表,不是库。agent 应了解这些模式名称,以便讨论这些模式、在设计时将其纳入考虑,并在设计解读需要时采用它们。实现和代码草图位于区块库(第 12 节),该库将迭代补充内容。

首屏范式

  • 非对称分屏首屏 - 文本位于一侧,素材位于另一侧,并留出充足的空白。
  • 社论宣言式首屏 - 使用大号文字,不使用素材,整体近似海报。
  • 视频 / 媒体蒙版首屏 - 文字以镂空蒙版形式叠加在视频背景上。
  • 动态排版首屏 - 以动画排版作为主要视觉元素。
  • 幕布揭示式首屏 - 滚动时,首屏各部分像幕布一样展开。
  • 滚动固定式首屏 - 首屏保持固定,内容从其后方滚动。

导航与菜单

  • Mac OS 程序坞放大效果 - 边缘导航,图标在悬停时平滑缩放。
  • 磁吸按钮 - 向光标方向吸附。
  • 黏性菜单 - 子项像黏稠液体一样分离。
  • 灵动岛 - 用于显示状态 / 提醒的可变形胶囊组件。
  • 上下文径向菜单 - 在点击位置展开的环形菜单。
  • 悬浮快速操作菜单 - FAB 以弹性动画展开成弧形排列的次级操作。
  • 大型菜单展现 - 全屏下拉菜单,内容交错淡入。

布局与网格

  • Bento 网格 - 非对称图块分组(Apple 控制中心)。
  • 瀑布流布局 - 错落排列的网格,无固定行高。
  • 色彩网格 - 边框 / 图块带有细微的动态渐变。
  • 分屏滚动 - 两个半屏朝相反方向滑动。
  • 粘性堆叠区块 - 滚动时固定并堆叠的区块。

卡片与容器

  • 视差倾斜卡片 - 跟踪鼠标坐标的 3D 倾斜效果。
  • 聚光边框卡片 - 边框在光标下方亮起。
  • 玻璃拟态面板 - 带内部折射效果的磨砂玻璃。
  • 全息箔卡片 - 悬停时产生虹彩变换。
  • Tinder 滑动卡片堆 - 具有实体感的卡片堆,可滑动移除。
  • 变形模态框 - 按钮展开成自身对应的对话框。

滚动动画

  • 粘性滚动堆叠 - 卡片保持固定并像实体一样堆叠。
  • 水平滚动接管 - 垂直滚动 → 水平平移。
  • 机车式 / 序列滚动 - 视频 / 3D 序列与滚动条联动。
  • 缩放视差 - 中央背景图像随滚动缩放。
  • 滚动进度路径 - 随滚动绘制 SVG 线条。
  • 液态滑动过渡 - 如黏性液体般的页面过渡。

画廊与媒体

  • 穹顶画廊 - 3D 全景画廊。
  • 封面流轮播 - 边缘倾斜的 3D 轮播。
  • 拖拽平移网格 - 无边界的可拖动画布。
  • 手风琴图片滑块 - 狭窄条带在悬停时展开。
  • 悬停图片轨迹 - 鼠标移动时留下不断弹出的图片轨迹。
  • 故障效果图像 - 悬停时发生 RGB 通道偏移。

排版与文本

  • 动态跑马灯 - 随滚动反向移动的无限循环文本带。
  • 文本遮罩显现 - 将巨型文字作为透视视频的透明窗口。
  • 文本乱序效果 - 加载 / 悬停时进行《黑客帝国》风格的解码。
  • 环形文本路径 - 文本沿旋转的圆周弯曲排列。
  • 渐变描边动画 - 带有流动渐变的描边文字。
  • 动态排版网格 - 字母会避开光标。

微交互与效果

  • 粒子爆炸按钮 - 成功时,CTA 碎裂成粒子。
  • 液态下拉刷新 - 重新加载指示器如同分离的液滴。
  • 骨架屏微光 - 占位区域上掠过移动的反光。
  • 感知悬停方向的按钮 - 填充效果从光标进入的准确一侧展开。
  • 点击涟漪效果 - 波纹从点击坐标处扩散。
  • SVG 线条绘制动画 - 矢量图形实时自行绘制。
  • 网格渐变背景 - 有机形态的熔岩灯状色块。
  • 镜头模糊景深 - 模糊背景 UI,以突出前景操作。

动画库选型

  • Motion (motion/react) - 是 UI / Bento / 状态变化动画的默认选择。
  • GSAP + ScrollTrigger - 用于整页滚动叙事和滚动劫持。将其隔离到专用叶子组件中,并通过 useEffect 执行清理。
  • Three.js / WebGL - 用于画布背景和 3D 场景。采用相同的隔离规则。
  • 禁止在同一组件树中混用 GSAP / Three.js 与 Motion。 它们会争用相同的帧。

---

11. 重设计规范

此 skill 可处理全新构建和重新设计。错误识别模式是导致重新设计输出不佳的最大单一原因。

11.A 检测模式(第一步操作)

  • 全新构建 - 没有现有站点,或已批准全面改造。采用第 1 节的档位基线。
  • 重新设计 - 保留 - 在不破坏品牌的前提下进行现代化改造。先审计,提取品牌设计变量,再逐步演进。
  • 重新设计 - 全面改造 - 基于现有内容采用新的视觉语言。视觉层面按全新构建处理;保留内容和 IA。

如果含义不明确,只问一次:*“此次重新设计应保留现有品牌,还是从视觉上完全重新开始?”*

11.B 动手前先审计

在提出更改建议前,记录当前状态:

  • 品牌设计变量 - 主色 / 强调色、字体组合、徽标处理方式、圆角。
  • 信息架构——页面树、主导航、关键转化路径。
  • 内容区块——有哪些内容、哪些发挥作用、哪些只是填充。
  • 需保留的模式——标志性交互、可辨识的首屏、文案语气。
  • 需淘汰的模式——AI 粗制内容的痕迹、损坏的布局、失效链接、泛用图库图片、性能陷阱。
  • 现有网站的参数判断——推断当前的 DESIGN_VARIANCE / MOTION_INTENSITY / VISUAL_DENSITY。这是起点,并非基线。
  • SEO 基线——当前有排名的页面、元标题、结构化数据、OG 卡片。SEO 迁移是重设计的第 1 大风险。

11.C 保留规则

  • 除非用户提出要求,禁止改变信息架构。保持页面 slug、锚点 ID、主导航标签稳定,以维护 SEO 和用户的操作习惯。
  • 应用第 4.2 节前,先提取品牌色。原本使用紫色的品牌继续使用紫色——应用 LILA 规则的覆盖条件。
  • 除非用户要求重写,否则保留文案语气。视觉现代化 ≠ 内容重写。
  • 保留现有无障碍成果。禁止让焦点状态、替代文本、键盘导航或对比度退步。
  • 尊重现有分析事件。禁止重命名下游追踪所依赖的按钮、表单字段和区块 ID。

11.D 现代化调整手段(按优先级排序)

按顺序应用——需求简报得到满足时即停止:

  1. 更新字体排印——单位风险下视觉提升最大。
  2. 间距与节奏——增加区块内边距,修正纵向节奏。
  3. 重新校准色彩——降低饱和度、统一中性色、保留品牌强调色。
  4. 动效层——为现有组件添加符合 MOTION_INTENSITY 的微交互。
  5. 重组首屏与关键区块——使用第 10 节的表达方式重构转化漏斗顶部。
  6. 整体替换区块——仅在现有区块无法挽救时采用。

11.E 决策树:定向演进与全面重设计

  • IA、内容和 SEO 均良好 → 定向演进(调整手段 1-4)。以约 40% 的风险获得约 70% 的价值。
  • 视觉问题属于结构性问题(IA 损坏、缺少设计系统、移动端损坏)→ 在严格保留内容的前提下全面重设计
  • 品牌本身正在改变 → 从零开始

11.F 禁止擅自改变的内容

未经用户明确批准,禁止修改:

  • URL 结构 / 路由 slug。
  • 主导航标签。
  • 表单字段名称或顺序(会导致分析统计和自动填充失效)。
  • 品牌徽标或文字标识。
  • 现有法律 / 同意授权 / Cookie 文案。

---

12. 区块库(约定 - 实现将在此迭代落地)

参考词汇(第 10 节)为模式命名。区块库使用实际属性、实际动效规范和实际代码草图来实现这些模式。

状态: 此处已定义结构规范。区块将迭代添加。不得脱离此结构规范自行创建新区块。

12.A 文件位置

skills/taste-skill/blocks/
  hero/
    asymmetric-split.md
    editorial-manifesto.md
    kinetic-type.md
    ...
  feature/
    bento-grid.md
    sticky-scroll-stack.md
    zig-zag.md
    ...
  social-proof/
  pricing/
  cta/
  footer/
  navigation/
  portfolio/
  transition/

12.B 必需的前置元数据

---
name: asymmetric-split-hero
category: hero
dial_compatibility:
  variance: [6, 10]
  motion: [3, 10]
  density: [2, 5]
when_to_use: "Landing pages with one strong asset and one strong message. Default hero for SaaS, agency, premium consumer."
not_for: "Editorial / manifesto launches where the message IS the design."
stack: ["react", "next", "tailwind", "motion"]
---

12.C 必需的正文部分

  1. 视觉草图 - 简短的 ASCII 或布局描述。
  2. 属性 API - 组件接口。
  3. 代码草图 - 最小可运行实现(默认使用服务器组件,动效使用客户端孤岛)。
  4. 移动端回退方案 - 明确说明适用于 < 768px 的折叠规则。
  5. 动效变体 - MOTION_INTENSITY 的每个区间(1-3、4-7、8-10)各提供一个变体。明确说明减少动态效果时的回退方案。
  6. 深色模式说明 - 此区块专用的令牌策略。
  7. 反模式 - 此区块常见的出错方式。
  8. 参考资料 - 生产环境中真实示例的链接。

12.D 区块库规范

  • 每个文件一个区块。不得创建多区块文件。
  • 每个区块都必须可独立运行(将其放入页面即可渲染)。
  • 每个区块都必须通过交付前检查(第 14 节)。
  • 依赖第 2.A 节中设计系统的区块存放在 blocks/<category>/<name>--<system>.md 下(例如 feature/bento-grid--material.md)。

---

13. 不适用范围

此 skill 不适用于:

  • 仪表盘 / 高密度产品 UI / 管理面板(使用第 2.A 节中的 Fluent、Carbon、Atlassian 或 Polaris)。
  • 数据表格(使用 TanStack Table 或 AG Grid)。
  • 多步骤表单 / 向导(使用表单专用模式;此 skill 并不能改善它们)。
  • 代码编辑器(使用 Monaco / CodeMirror 及其官方外观样式)。
  • 原生移动应用(直接使用 Apple HIG / Material)。
  • 实时协作界面(在线状态、光标、OT 感知 - 属于不同类别的问题)。

如果需求属于上述任一类型,请明确说明,指出合适的工具,并且仅将此 skill 中与营销页面 / 关于页面 / 落地页面相关的部分应用于适用的界面。

---

14. 最终交付前检查

请在输出代码前执行此检查矩阵。这是最后一道检查。

此项并非可选。必须逐一检查所有复选框。任何一项未通过,输出即未完成。

  • [ ] 是否已声明需求推断(第 0.B 节中的单行说明)?
  • [ ] 旋钮值是否已明确给出并根据需求说明了依据,而非不作说明地使用基准值?
  • [ ] 是否已在适用时从第 2 节中选择设计系统,否则是否如实标注了美学风格?
  • [ ] 是否已识别重新设计模式并完成审查(如适用,参见第 11 节)?
  • [ ] 页面任何位置都禁止出现长破折号()。包括标题、眉题、胶囊标签、正文、引文、署名、说明文字、按钮和替代文本。一处也不允许。(第 9.G 节——必须严格遵守。)
  • [ ] 页面主题锁定:整个页面是否仅使用一个主题(浅色、深色或自动)?任何区段都不得在页面中途切换为反色模式(第 4.11 节)。
  • [ ] 颜色一致性锁定:所有区段是否统一使用同一种强调色(第 4.2 节)?
  • [ ] 形状一致性锁定:是否始终采用同一套圆角体系(第 4.4 节)?
  • [ ] 按钮对比度检查:每个 CTA 的文字在其背景上是否都清晰可读(不得出现白底白字,达到 WCAG AA 的 4.5:1 对比度)?
  • [ ] CTA 按钮换行:桌面端的 CTA 标签是否均未换成 2 行或更多行?
  • [ ] 表单对比度检查:相对于区段背景,表单输入框、占位文本、焦点环和标签是否全部符合 WCAG AA 标准?
  • [ ] 衬线字体规范:如果使用衬线字体,是否未使用 Fraunces 或 Instrument_Serif(若使用,是否有明确的品牌理由)?是否与上一个项目使用了不同的衬线字体?
  • [ ] 高端消费品牌配色检查:如果需求属于高端消费品牌(厨具 / 健康生活 / 手工艺 / 奢侈品),配色是否未采用 AI 默认的米色+黄铜色+牛血红+意式浓缩咖啡色系?是否与上一个高端消费品牌项目采用了不同色系?
  • [ ] 斜体下伸部留白:每个包含 y g j p q 的斜体单词是否至少使用 leading-[1.1],并预留 pb-1
  • [ ] 首屏适配视口:标题是否不超过 2 行,副文案不超过 20 个词且不超过 4 行,无需滚动即可看到 CTA,字体大小是否结合图像进行了规划?
  • [ ] 首屏顶部内边距:桌面端是否最大为 pt-24,且首屏内容未悬在视口中部?
  • [ ] 首屏堆叠规范:首屏是否最多包含 4 个文本元素(眉题或品牌条、标题、副文案、行动号召按钮)?行动号召按钮下方是否没有微型标语,首屏中是否没有信任背书微型条?
  • [ ] 眉题标签计数(机械检查):统计所有组件中分区标题上方使用 uppercase tracking 的微型标签实例。数量是否 ≤ ceil(sectionCount / 3)?首屏主视觉区计为 1 个分区。
  • [ ] 禁止左右拆分标题:区块标题是否未采用“左侧大标题 + 右侧小段说明”的模式(应改用纵向堆叠)?
  • [ ] 之字形交替上限:是否未连续出现 3 个或更多采用相同图文分栏布局的区块?
  • [ ] 禁止重复的 CTA 意图:是否不存在意图相同的两个 CTA(页面同时出现“联系我们” + “聊一聊” = 不通过)?
  • [ ] 标志墙 = 仅有标志:是否未在标志下方印上行业 / 类别标签?
  • [ ] 便当格背景多样性:是否至少有 2-3 个便当格单元具有实际视觉差异(图像、渐变、图案),而非全都是置于白色背景上的纯文字白色卡片?
  • [ ] “客户包括 / 深受信赖”徽标墙是否位于首屏主视觉区下方而非其中,使用真实的 SVG 徽标(Simple Icons / devicon)或生成的 SVG 图形标记,而不是纯文本字标?
  • [ ] 文案自检:是否重新阅读了每一处可见文字,未交付语法错误或 AI 幻觉产生的短语(如“free on its past”这种)?
  • [ ] 动效有明确目的:是否每个动画都能用一句话说明理由(层级 / 叙事 / 反馈 / 状态转换),没有为炫技而使用 GSAP?
  • [ ] 每页最多一条跑马灯:同一页面是否未出现两条横向跑马灯?
  • [ ] 桌面端导航保持单行,高度 ≤ 80px?
  • [ ] 区块布局重复性检查:是否没有两个区块使用相同布局类型(8 个区块中至少有 4 种不同类型)?
  • [ ] 便当格兼具节奏与精确单元数(N 个项目 → N 个单元,中间和末尾均无空单元)?
  • [ ] 长列表使用正确的 UI 组件(项目数 > 5 时不使用默认的 <ul> 配合 divide-y——其他方案见第 4.9 节)?
  • [ ] 使用真实图片(先使用生成工具,再用 Picsum-seed,最后使用明确的占位槽位)——禁止用 div 伪造截图,禁止手写装饰性 SVG,禁止纯文本极简主义?
  • [ ] 禁止在图片上叠加胶囊标签或说明标签(禁止 Plate · Brand,禁止 Field notes - journal)?
  • [ ] 禁止用图片署名作为装饰Field study no. 12 · Ines Caetano)?
  • [ ] 营销页面禁止出现版本页脚v1.4.2Build 0048)?
  • [ ] 禁止在眉题下放微型元说明句(“这些都是我们今天提供的功能……”)?
  • [ ] 禁止在首屏底部放装饰性文字条BRAND. MOTION. SPATIAL.)?
  • [ ] 区块标题中禁止出现悬浮在右上角的辅助文字
  • [ ] 比较图形中禁止使用带填充背景轨道的评分条或进度条
  • [ ] 禁止出现地区 / 城市名称 / 时间 / 天气条,除非需求简报确实涉及全球分布或侧重特定地点?
  • [ ] 禁止出现滚动提示Scroll↓ scrollScroll to explore)?
  • [ ] 首屏主视觉区中没有版本标签(V0.6、BETA、仅限受邀),除非简报针对产品发布?
  • [ ] 无章节编号式眉题00 / INDEX001 · Capabilities06 · how it works)?
  • [ ] 无装饰性圆点(默认零个,仅用于真实语义状态)?
  • [ ] 未在长列表/规格表的每一行同时使用 border-t + border-b
  • [ ] 内容密度合理:没有 20 行数据表,没有缺乏依据的伪精确规格参数,子段落默认不超过 25 个词?
  • [ ] 引用正文不超过 3 行,署名规范(不使用长破折号)?
  • [ ] 宣称有动效 = 实际呈现动效:如果 MOTION_INTENSITY > 4,页面确实有动画,而不只是声称有动效?
  • [ ] GSAP 粘性堆叠/水平平移是否按照第 5.A / 5.B 节的规范骨架实现(start: "top top"pin: true、正确的滚动同步)?
  • [ ] 禁止使用 window.addEventListener('scroll') - 仅使用 Motion useScroll() / ScrollTrigger / IntersectionObserver / CSS 滚动驱动动画?
  • [ ] 减弱动效是否覆盖 MOTION_INTENSITY > 3 时的所有动效?
  • [ ] 深色模式令牌已定义,并在明暗两种模式下完成测试?
  • [ ] 移动端折叠是否针对高差异度布局明确设置(w-fullpx-4max-w-7xl mx-auto)?
  • [ ] 视口稳定性:使用 min-h-[100dvh],且绝不使用 h-screen
  • [ ] useEffect 动画具有严格的清理函数?
  • [ ] 空状态 / 加载状态 / 错误状态均已提供?
  • [ ] 省略卡片,尽可能改用间距?
  • [ ] 图标仅来自允许的库(Phosphor / HugeIcons / Radix / Tabler),且没有手工编写的 SVG 路径?
  • [ ] Motion已隔离在客户端叶子组件中,顶部声明了 'use client',并已进行记忆化处理?
  • [ ] 无第 9 节所列的 AI 痕迹(将 Inter 用作默认字体、AI 紫色、三张等尺寸卡片、Jane Doe、Acme、“已悄然用于”)?
  • [ ] 核心网页指标是否可合理达标(LCP < 2.5s,INP < 200ms,CLS < 0.1)?
  • [ ] 每个项目仅使用一个设计系统(不混用 Material + shadcn)?

只要有一个复选框无法如实勾选,页面就尚未完成。交付前必须将其修复。

---

附录 - 基于真实来源的参考资料

以下各节是内置的参考内容。它们为 agent 提供第 2 节提到的每个设计系统的真实安装命令、权威文档链接和可实际运行的入门代码片段。请据此让决策建立在生产现实之上,而非训练数据的虚构内容。

附录 A - 各设计系统的安装命令

# Material Web (Material 3)
npm install @material/web

# Fluent UI React (v9)
npm install @fluentui/react-components

# Fluent UI Web Components (framework-free)
npm install @fluentui/web-components @fluentui/tokens

# IBM Carbon
npm install @carbon/react @carbon/styles

# Radix Themes
npm install @radix-ui/themes

# shadcn/ui (open code, owned components)
npx shadcn@latest init
npx shadcn@latest add button card badge separator input

# Primer CSS (GitHub product/devtool UI)
npm install --save @primer/css

# Primer Brand (GitHub marketing UI)
npm install @primer/react-brand

# GOV.UK Frontend
npm install govuk-frontend

# USWDS (US Web Design System)
npm install uswds

# Atlassian Design System (Atlaskit)
yarn add @atlaskit/css-reset @atlaskit/tokens @atlaskit/button @atlaskit/badge @atlaskit/section-message @atlaskit/card

# Bootstrap 5.3
npm install bootstrap

# Shopify Polaris Web Components (Shopify apps only)
# Add this to your app HTML head:
#   <meta name="shopify-api-key" content="%SHOPIFY_API_KEY%" />
#   <script src="https://cdn.shopify.com/shopifycloud/polaris.js"></script>

附录 B - 权威来源(重新实现前请先阅读)

Material Web

  • https://github.com/material-components/material-web
  • https://material-web.dev/theming/material-theming/
  • https://m3.material.io/develop/web

Fluent UI

  • https://fluent2.microsoft.design/get-started/develop
  • https://fluent2.microsoft.design/components/web/react/
  • https://github.com/microsoft/fluentui
  • https://learn.microsoft.com/en-us/fluent-ui/web-components/

Carbon

  • https://carbondesignsystem.com/
  • https://github.com/carbon-design-system/carbon
  • https://carbondesignsystem.com/developing/react-tutorial/overview/
  • https://carbondesignsystem.com/developing/web-components-tutorial/overview/

Shopify Polaris

  • https://shopify.dev/docs/api/app-home/web-components
  • https://github.com/Shopify/polaris-react
  • https://polaris-react.shopify.com/components

Atlassian

  • https://atlassian.design/get-started/develop
  • https://atlassian.design/components/button/examples
  • https://atlaskit.atlassian.com/packages/design-system/button/example/disabled
  • https://atlassian.design/tokens/design-tokens

Primer

  • https://primer.style/
  • https://github.com/primer/css
  • https://github.com/primer/brand

GOV.UK

  • https://design-system.service.gov.uk/components/button/
  • https://design-system.service.gov.uk/styles/layout/
  • https://github.com/alphagov/govuk-frontend

USWDS

  • https://designsystem.digital.gov/documentation/developers/
  • https://designsystem.digital.gov/components/button/
  • https://designsystem.digital.gov/components/card/
  • https://github.com/uswds/uswds

Bootstrap

  • https://getbootstrap.com/docs/5.3/layout/grid/
  • https://getbootstrap.com/docs/5.3/components/card/

Tailwind

  • https://tailwindcss.com/docs/dark-mode
  • https://tailwindcss.com/blog/tailwindcss-v4

Radix

  • https://www.radix-ui.com/themes/docs/components/theme
  • https://www.radix-ui.com/themes/docs/components/card
  • https://github.com/radix-ui/themes

shadcn/ui

  • https://ui.shadcn.com/docs
  • https://ui.shadcn.com/docs/components/card
  • https://github.com/shadcn-ui/ui

原生 CSS / W3C 标准

  • https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/backdrop-filter
  • https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-color-scheme
  • https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-reduced-motion
  • https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Grid_layout
  • https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Scroll-driven_animations
  • https://drafts.csswg.org/scroll-animations-1/

Apple Liquid Glass(仅限 Apple 平台)

  • https://developer.apple.com/design/human-interface-guidelines/materials
  • https://developer.apple.com/documentation/TechnologyOverviews/liquid-glass
  • https://developer.apple.com/documentation/TechnologyOverviews/adopting-liquid-glass
  • https://developer.apple.com/documentation/SwiftUI/Material

---

附录 C - Apple Liquid Glass:如实说明的 Web 近似实现

不得将任意 CSS 代码片段视为 Apple 官方的 Liquid Glass。

官方内容

Apple 在面向 Apple 平台的人机界面指南和开发者文档中介绍了 Liquid Glass。它是一种广泛用于 Apple 平台 UI 的动态材质。Apple 的原生实现属于 Apple 平台的 APIs 和系统组件,并非公开的 Web CSS 软件包

相关官方文档:

  • Apple 人机界面指南 → 材质
  • Apple 开发者文档 → Liquid Glass
  • Apple 开发者文档 → 采用 Liquid Glass
  • SwiftUI → Material

非官方内容

Apple 并未为普通网站提供 liquid-glass.css

Web 近似实现可以使用:

  • backdrop-filter
  • 透明背景
  • 分层边框
  • 高光叠加层
  • gradients
  • motion
  • 高对比度回退方案

但这只是 Web 玻璃拟态 / 毛玻璃近似实现,并非 Apple 官方的 Liquid Glass。请在注释中将其明确标注为近似实现。

更安全的 Web 近似实现骨架

.liquid-glass-web-approx {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: 999px;
  border: 1px solid rgb(255 255 255 / .32);
  background:
    linear-gradient(135deg, rgb(255 255 255 / .30), rgb(255 255 255 / .08)),
    rgb(255 255 255 / .12);
  backdrop-filter: blur(24px) saturate(180%) contrast(1.05);
  -webkit-backdrop-filter: blur(24px) saturate(180%) contrast(1.05);
  box-shadow:
    inset 0 1px 0 rgb(255 255 255 / .48),
    inset 0 -1px 0 rgb(255 255 255 / .12),
    0 18px 60px rgb(0 0 0 / .18);
}

.liquid-glass-web-approx::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  background:
    radial-gradient(circle at 20% 0%, rgb(255 255 255 / .55), transparent 34%),
    linear-gradient(90deg, rgb(255 255 255 / .18), transparent 42%, rgb(255 255 255 / .14));
  pointer-events: none;
}

.liquid-glass-web-approx::after {
  content: "";
  position: absolute;
  inset: 1px;
  border-radius: inherit;
  border: 1px solid rgb(255 255 255 / .14);
  pointer-events: none;
}

@media (prefers-color-scheme: dark) {
  .liquid-glass-web-approx {
    border-color: rgb(255 255 255 / .18);
    background:
      linear-gradient(135deg, rgb(255 255 255 / .16), rgb(255 255 255 / .04)),
      rgb(15 23 42 / .42);
    box-shadow:
      inset 0 1px 0 rgb(255 255 255 / .22),
      0 18px 60px rgb(0 0 0 / .42);
  }
}

@media (prefers-reduced-transparency: reduce) {
  .liquid-glass-web-approx {
    background: rgb(255 255 255 / .96);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
  }
}

重要: prefers-reduced-transparency 的浏览器支持情况不一致,请进行测试。即使没有模糊效果,也要始终提供足够的对比度。

---

附录结束。 上述安装命令是现实依据。Apple Liquid Glass 骨架是明确标注的近似实现,并非 Apple 发布的软件包。有关各设计系统的权威文档,请查阅对应系统的官方文档(链接见第 2 节和附录 B)。

qianwen skills install @admin/design-taste-frontend