project-design
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseProject Design Skill
项目设计技能
Generate production-grade, visually distinctive web interfaces. Every page must look like it was designed by a professional — not generated by AI.
生成生产级、视觉独特的Web界面。每一页都必须看起来像是专业设计师的作品——而非AI生成。
When to Use
使用场景
This skill applies whenever you generate HTML/CSS/JS for any visual web output — dashboards, landing pages, web apps, tools, portfolios, or any other page type.
当你为任何可视化Web输出(仪表盘、着陆页、Web应用、工具、作品集或其他类型页面)生成HTML/CSS/JS时,都适用本技能。
Reference Files
参考文件
| File | Read When |
|---|---|
| references/aesthetics.md | Building a color palette, choosing typography, designing layout — the methodology for making design decisions |
| references/components.md | Building UI components — navigation, cards, tables, buttons, forms, hero sections, CTAs |
| references/animations.md | Adding motion — scroll reveals, hover effects, modals, drawers, page load sequences |
| references/charts.md | Creating charts — Chart.js/ECharts setup, chart type selection, mock data generation, dashboard layouts |
| 文件 | 阅读时机 |
|---|---|
| references/aesthetics.md | 构建调色板、选择排版、设计布局时——设计决策的方法论 |
| references/components.md | 构建UI组件时——导航栏、卡片、表格、按钮、表单、Hero区域、CTA |
| references/animations.md | 添加动效时——滚动显示、悬停效果、模态框、侧边栏、页面加载序列 |
| references/charts.md | 创建图表时——Chart.js/ECharts配置、图表类型选择、模拟数据生成、仪表盘布局 |
Priority Override: User Settings Come First
优先级覆盖:用户设置优先
If the user (or the brief) explicitly specifies any design preference, that preference overrides the corresponding Design Dial result. The priority order is:
- User-specified settings (highest priority) — explicit requests like "use dark mode", "make it blue", "use Playfair Display font", "I want a minimalist style"
- Design Read inference — signals inferred from the brief content and context
- Design Dials (lowest priority) — time-based random selection, used only for dimensions the user didn't specify
How this works in practice:
- User says "build me a dark portfolio" → Surface is locked to dark, skip the Surface dial. Other dials (Accent, Typography, Family) still spin randomly.
- User says "use green and serif font" → Accent is locked to Green, Typography is locked to Serif. Surface and Family still spin randomly.
- User says nothing about design → all 4 dials spin randomly (the default behavior).
- User says "make it look like Apple's website" → this is a complete design direction. Skip all dials, infer the aesthetic from the reference.
Never argue with the user's taste. If they want purple gradient on a cream background, do it well. Document the user override in the Design Dials output line:
Design Dials: Surface=USER(Dark) · Accent=3(Orange, #e87040) · Type=USER(Serif) · Family=2(Editorial) → Playfair Display
如果用户(或需求 brief)明确指定任何设计偏好,该偏好优先于对应的Design Dial结果。优先级顺序为:
- 用户指定设置(最高优先级)——明确要求,如“使用深色模式”“做成蓝色”“使用Playfair Display字体”“我想要极简风格”
- Design Read推断——从brief内容和语境中提取的信号
- Design Dials(最低优先级)——基于时间的随机选择,仅用于用户未指定的维度
实际应用方式:
- 用户说“帮我做一个深色作品集”→ Surface锁定为深色,跳过Surface拨盘。其他拨盘(Accent、Typography、Family)仍随机选择。
- 用户说“使用绿色和衬线字体”→ Accent锁定为绿色,Typography锁定为衬线体。Surface和Family仍随机选择。
- 用户未提及设计→ 所有4个拨盘随机选择(默认行为)。
- 用户说“做成苹果官网的风格”→ 这是完整的设计方向。跳过所有拨盘,从参考中推断美学风格。
永远不要质疑用户的审美。 如果他们想要奶油色背景配紫色渐变,也要出色完成。在Design Dials输出行中记录用户覆盖:
Design Dials: Surface=USER(Dark) · Accent=3(Orange, #e87040) · Type=USER(Serif) · Family=2(Editorial) → Playfair Display
Step 0: Design Read (MANDATORY)
步骤0:Design Read(必填)
Before writing ANY code, silently analyze the brief and output a single-line Design Read:
Design Read: [page type] · [audience] · [atmosphere word] · [aesthetic family] · [light/dark/tinted]
How to infer each signal:
| Signal | Source | Example |
|---|---|---|
| Page type | Explicit in brief or inferred from content | SaaS dashboard, editorial blog, dev tool, portfolio |
| Audience | Who will use this? | Enterprise buyers, indie developers, Gen-Z consumers |
| Atmosphere | One word capturing the emotional register | Clinical, playful, austere, warm, raw, luxurious |
| Aesthetic family | The design tradition this belongs to | Swiss/International, Neo-brutalist, Editorial, Soft-tech, Industrial |
| Surface | Light, dark, or tinted background | Dark with blue tint, warm off-white, pure white |
The Design Read anchors every subsequent decision. If two choices conflict, the Design Read wins.
在编写任何代码之前,先静默分析brief并输出单行Design Read:
Design Read: [页面类型] · [受众] · [氛围词汇] · [美学流派] · [浅色/深色/ tinted]
如何推断每个信号:
| 信号 | 来源 | 示例 |
|---|---|---|
| 页面类型 | brief中明确说明或从内容推断 | SaaS仪表盘、编辑博客、开发工具、作品集 |
| 受众 | 目标使用者 | 企业采购者、独立开发者、Z世代消费者 |
| 氛围 | 捕捉情感基调的单个词汇 | 严谨、活泼、朴素、温暖、粗犷、奢华 |
| 美学流派 | 所属的设计传统 | 瑞士/国际主义、新粗野主义、编辑风格、软科技、工业风 |
| Surface | 浅色、深色或带色调的背景 | 带蓝色调的深色、暖调米白、纯白 |
Design Read是后续所有决策的锚点。如果两个选择冲突,以Design Read为准。
Step 0.5: Scene Sentence (MANDATORY for dark/tinted surfaces)
步骤0.5:Scene Sentence(深色/tinted背景必填)
If your Surface dial (Step 1) selects a dark or tinted direction (indices 5 or 6), you MUST write a Scene Sentence before choosing any colors. This anchors the dark palette to a physical environment instead of defaulting to generic blue-black.
Scene: [who] is using this [where], under [what lighting], in [what mood]
Examples:
- "A portfolio manager reviewing positions on a matte-black standing desk, single desk lamp, focused and alert"
- "A music producer in a dimly lit studio with purple LED strips, creative and immersed"
- "A researcher in a university library at dusk, warm overhead lights, contemplative"
- "A bartender checking inventory on a tablet behind a walnut bar, amber pendant lights, unhurried"
- "An architect reviewing blueprints in a concrete loft, overcast daylight through floor-to-ceiling windows, precise"
The Scene Sentence determines your dark surface tint:
- Studio with purple LEDs → deep purple tint, not blue-black
- Library at dusk → warm charcoal, not blue-black
- Standing desk with desk lamp → neutral near-black with warm accent
- Walnut bar with amber lights → warm brown-black
- Concrete loft with daylight → cool gray, not blue-black
BANNED default scene: "a developer's monitor in a dark room" — this is the AI default scene that produces the same blue-black every time. Be specific and varied.
See references/aesthetics.md § Dark Surface Tint Guide for the full scene-to-tint mapping table.
如果你的Surface拨盘(步骤1)选择了深色或tinted方向(索引5或6),在选择任何颜色之前,你必须编写一个Scene Sentence。这会将深色调色板锚定到物理环境,而非默认的通用蓝黑色。
Scene: [谁] 在[哪里] 使用这个[产品],在[何种光线]下,处于[何种情绪]
示例:
- “一位投资组合经理在哑光黑色站立桌前查看仓位,只有一盏台灯,专注且警觉”
- “一位音乐制作人在装有紫色LED灯带的昏暗工作室里,富有创造力且沉浸其中”
- “一位研究者在黄昏时分的大学图书馆里,暖色调顶灯,沉思状态”
- “一位调酒师在胡桃木吧台后用平板盘点库存,琥珀色吊灯,从容不迫”
- “一位建筑师在混凝土阁楼里查看蓝图,阴天的日光透过落地窗,精准细致”
Scene Sentence决定深色背景色调:
- 带紫色LED的工作室→深紫色调,而非蓝黑色
- 黄昏时分的图书馆→暖木炭色,而非蓝黑色
- 带台灯的站立桌→中性近黑色配暖色调强调色
- 带琥珀灯的胡桃木吧台→暖棕黑色
- 带日光的混凝土阁楼→冷灰色,而非蓝黑色
禁用默认场景:“黑暗房间里的开发者显示器”——这是AI默认场景,每次都会生成相同的蓝黑色。请具体且多样化。
查看references/aesthetics.md § Dark Surface Tint Guide获取完整的场景到色调映射表。
Step 1: Spin the Design Dials (MANDATORY)
步骤1:转动Design Dials(必填)
You have no memory of previous generations and WILL converge on the same dark-blue-card layout every time if left unchecked. To prevent this, you MUST spin four independent dials before writing any code. These dials constrain your direction but leave you full creative freedom within that direction.
你没有之前生成内容的记忆,如果不加以约束,每次都会收敛到相同的深蓝色卡片布局。为避免这种情况,在编写任何代码之前,你必须转动四个独立的拨盘。这些拨盘会限制你的方向,但在该方向内你拥有完全的创作自由。
How to Spin
转动方式
Take the current UTC time and compute four indices:
dial_A = UTC_minute mod 8 → Surface
dial_B = (UTC_minute + 3) mod 7 → Accent Hue
dial_C = (UTC_hour) mod 6 → Typography
dial_D = (UTC_hour + UTC_minute) mod 12 → Aesthetic Family获取当前UTC时间并计算四个索引:
dial_A = UTC_minute mod 8 → Surface
dial_B = (UTC_minute + 3) mod 7 → Accent Hue
dial_C = (UTC_hour) mod 6 → Typography
dial_D = (UTC_hour + UTC_minute) mod 12 → Aesthetic FamilyDial A: Surface (mod 8)
拨盘A:Surface(mod 8)
| Index | Direction | Description |
|---|---|---|
| 0 | Warm Light | Off-white with warm undertone (cream-adjacent but NOT generic cream — add personality). Light cards, dark text. |
| 1 | Cool Light | White or blue-tinted white. Crisp, clinical, airy. Think Arctic, not generic. |
| 2 | Pure White | Clean |
| 3 | Tinted Light | Light background with a subtle color tint — pale sage, lavender wash, soft peach, ice blue. Not white, not cream. |
| 4 | Light with Color Pop | White/light base with one bold colored section or element (colored hero, colored sidebar, colored footer). Mostly light. |
| 5 | Tinted Dark | Dark background with a NON-BLUE tint — try deep green, wine, charcoal-brown, dark purple, or slate-olive. NOT the |
| 6 | Neutral Dark | True dark — near-black with NO color tint. Pure |
| 7 | Mixed | Light header/hero + dark content area, or alternating light/dark sections. Two-tone page. |
| 索引 | 方向 | 描述 |
|---|---|---|
| 0 | 暖浅色 | 带暖调的米白色(接近奶油色但非通用奶油色——添加个性)。浅色卡片,深色文字。 |
| 1 | 冷浅色 | 白色或带蓝色调的白色。清爽、严谨、通透。参考北极风格,而非通用风格。 |
| 2 | 纯白 | 干净的 |
| 3 | Tinted浅色 | 带微妙色调的浅色背景——浅鼠尾草绿、淡薰衣草色、柔桃色、冰蓝色。不是白色,也不是奶油色。 |
| 4 | 带色彩亮点的浅色 | 白色/浅色基底配一个醒目的彩色区域或元素(彩色Hero、彩色侧边栏、彩色页脚)。整体以浅色为主。 |
| 5 | Tinted深色 | 带非蓝色调的深色背景——尝试深绿色、酒红色、炭棕色、深紫色或石板橄榄色。不要使用AI总是选择的 |
| 6 | 中性深色 | 纯深色——接近黑色且无色调。纯 |
| 7 | 混合色 | 浅色页眉/Hero + 深色内容区域,或交替的浅色/深色区块。双色页面。 |
Dial B: Accent Hue (mod 7)
拨盘B:Accent Hue(mod 7)
| Index | Hue Family | Suggested Range (pick your own specific shade) |
|---|---|---|
| 0 | Warm Red | Vermillion, terracotta, rust, brick — NOT generic |
| 1 | Gold / Amber | Marigold, honey, saffron, brass — warm and rich |
| 2 | Green | Sage, olive, emerald, lime, mint — pick one, NOT teal |
| 3 | Orange / Coral | Tangerine, peach, salmon, burnt orange |
| 4 | Pink / Magenta | Rose, fuchsia, hot pink, dusty pink — bold or muted |
| 5 | Violet / Purple | Lavender, grape, plum, electric purple — own it fully |
| 6 | Cool Blue | Cobalt, cerulean, sky, steel — but NOT the generic |
| 索引 | 色调类别 | 建议范围(选择你自己的特定色调) |
|---|---|---|
| 0 | 暖红色 | 朱红、赤陶色、铁锈红、砖红——不要使用通用的 |
| 1 | 金色/琥珀色 | 金盏花黄、蜂蜜色、藏红花色、黄铜色——温暖浓郁 |
| 2 | 绿色 | 鼠尾草绿、橄榄绿、祖母绿、酸橙绿、薄荷绿——选其一,不要使用蓝绿色 |
| 3 | 橙色/珊瑚色 | 橘色、桃色、三文鱼色、焦橙色 |
| 4 | 粉色/品红色 | 玫瑰粉、 fuchsia、亮粉色、灰粉色——大胆或柔和 |
| 5 | 紫罗兰色/紫色 | 薰衣草色、葡萄紫、李子色、电光紫——完全驾驭它 |
| 6 | 冷蓝色 | 钴蓝、天蓝色、天空蓝、钢蓝——但不要使用通用的 |
Dial C: Typography (mod 6)
拨盘C:Typography(mod 6)
| Index | Mood | Example Fonts (pick ONE — these are suggestions, not the only options) |
|---|---|---|
| 0 | Serif | Libre Baskerville, Newsreader, Lora, Playfair Display, Cormorant Garamond, Source Serif 4 |
| 1 | Geometric Sans | Instrument Sans, Geist, Sora, Urbanist, Figtree, Albert Sans |
| 2 | Humanist Sans | IBM Plex Sans, Nunito Sans, Atkinson Hyperlegible, Lexend |
| 3 | Monospace | JetBrains Mono, Space Mono, IBM Plex Mono, Fira Code |
| 4 | Display / Decorative | Fraunces, Bricolage Grotesque, Clash Display, Cabinet Grotesk |
| 5 | Slab / Mechanical | Roboto Slab, Zilla Slab, Bitter, Arvo |
| 索引 | 风格 | 示例字体(选一个——这些是建议,不是唯一选项) |
|---|---|---|
| 0 | 衬线体 | Libre Baskerville、Newsreader、Lora、Playfair Display、Cormorant Garamond、Source Serif 4 |
| 1 | 几何无衬线体 | Instrument Sans、Geist、Sora、Urbanist、Figtree、Albert Sans |
| 2 | 人文无衬线体 | IBM Plex Sans、Nunito Sans、Atkinson Hyperlegible、Lexend |
| 3 | 等宽体 | JetBrains Mono、Space Mono、IBM Plex Mono、Fira Code |
| 4 | 展示/装饰性字体 | Fraunces、Bricolage Grotesque、Clash Display、Cabinet Grotesk |
| 5 | 粗衬线/机械风格 | Roboto Slab、Zilla Slab、Bitter、Arvo |
Dial D: Aesthetic Family (mod 12)
拨盘D:Aesthetic Family(mod 12)
| Index | Family | Surface Tendency | Typography | Accent Style | Layout |
|---|---|---|---|---|---|
| 0 | Swiss/International | Pure white or light gray | Geometric sans | Single saturated, sparse | 12-col grid, strict alignment |
| 1 | Neo-brutalist | White or bright color | System mono or bold sans | Black + one loud color | Broken grid, thick borders |
| 2 | Editorial/Magazine | Off-white (not cream) | Serif display + sans body | Muted, editorial | Asymmetric, generous whitespace |
| 3 | Soft-tech | Tinted light | Rounded sans | Pastel gradient | Rounded cards, soft shadows |
| 4 | Industrial/Utilitarian | Near-black or concrete gray | Monospace | Single neon or warning | Dense grid, no decoration |
| 5 | Art Deco/Geometric | Deep color (navy, forest) | Display serif or geometric sans | Gold, brass | Symmetric, geometric patterns |
| 6 | Organic/Natural | Earth tones | Humanist sans | Warm, natural | Flowing, irregular shapes |
| 7 | Retro-futuristic | Dark with color tint | Display sans or pixel font | Neon, holographic | Asymmetric, layered |
| 8 | Minimalist/Zen | Pure white, max whitespace | Thin sans (weight 300-400) | Single muted tone, barely there | Extreme whitespace, few elements |
| 9 | Data-dense/Mission Control | Dark or neutral | Monospace + condensed sans | Status colors (green/amber/red) | Multi-panel, dense grid, no wasted space |
| 10 | Playful/Toy-like | Bright, saturated background | Rounded/bouncy sans | Multiple bold colors | Irregular, overlapping, rotated elements |
| 11 | Luxury/Refined | Deep black or dark color | Thin serif or elegant sans | Metallic (gold, silver, copper) | Generous spacing, minimal elements, large type |
Note: The Aesthetic Family is a tendency, not a hard constraint. It guides your overall design language but the Surface/Accent/Typography dials take precedence for their specific dimensions. Use the family to inform layout decisions, spacing rhythm, border treatments, and overall visual language.
| 索引 | 流派 | Surface倾向 | 排版 | 强调色风格 | 布局 |
|---|---|---|---|---|---|
| 0 | 瑞士/国际主义 | 纯白或浅灰 | 几何无衬线体 | 单一饱和色,稀疏使用 | 12列网格,严格对齐 |
| 1 | 新粗野主义 | 白色或亮色 | 系统等宽体或粗体无衬线体 | 黑色+一种鲜艳色彩 | 不规则网格,粗边框 |
| 2 | 编辑/杂志风格 | 米白色(非奶油色) | 衬线展示字体+无衬线正文字体 | 柔和、编辑风格 | 不对称,充足留白 |
| 3 | 软科技 | Tinted浅色 | 圆角无衬线体 | 渐变色 pastel | 圆角卡片,柔和阴影 |
| 4 | 工业/实用主义 | 近黑色或混凝土灰 | 等宽体 | 单一霓虹色或警示色 | 密集网格,无装饰 |
| 5 | 装饰艺术/几何风格 | 深色(海军蓝、森林绿) | 展示衬线体或几何无衬线体 | 金色、黄铜色 | 对称,几何图案 |
| 6 | 有机/自然风格 | 大地色调 | 人文无衬线体 | 温暖、自然色调 | 流畅、不规则形状 |
| 7 | 复古未来主义 | 带色调的深色 | 展示无衬线体或像素字体 | 霓虹色、全息色 | 不对称,分层布局 |
| 8 | 极简/禅意风格 | 纯白,最大化留白 | 细体无衬线体(字重300-400) | 单一柔和色调,几乎不可见 | 极致留白,少量元素 |
| 9 | 数据密集/任务控制 | 深色或中性色 | 等宽体+压缩无衬线体 | 状态色(绿/琥珀/红) | 多面板,密集网格,无浪费空间 |
| 10 | 活泼/玩具风格 | 明亮、饱和背景 | 圆角/弹跳感无衬线体 | 多种鲜艳色彩 | 不规则、重叠、旋转元素 |
| 11 | 奢华/精致风格 | 纯黑或深色 | 细衬线体或优雅无衬线体 | 金属色(金、银、铜) | 充足间距,少量元素,大字体 |
注意:Aesthetic Family是一种倾向,而非硬性约束。它指导你的整体设计语言,但Surface/Accent/Typography拨盘在各自特定维度上具有优先权。使用流派来指导布局决策、间距节奏、边框处理和整体视觉语言。
Output Your Spin
输出你的拨盘结果
Before writing any code, output:
Design Dials: Surface=index · Accent=index · Type=index · Family=index → [specific font choice]
Example:
Design Dials: Surface=2(Tinted Dark, wine) · Accent=1(Gold, #d4a030) · Type=0(Serif) · Family=5(Art Deco/Geometric) → Libre Baskerville
在编写任何代码之前,输出:
Design Dials: Surface=索引 · Accent=索引 · Type=索引 · Family=索引 → [特定字体选择]
示例:
Design Dials: Surface=2(Tinted Dark, wine) · Accent=1(Gold, #d4a030) · Type=0(Serif) · Family=5(Art Deco/Geometric) → Libre Baskerville
Rules
规则
- Follow your dials. Do not override them because another combination "feels safer".
- Creative freedom within the direction. The dials set the direction (e.g., "warm light surface + gold accent + serif font + Art Deco family"), but you choose the specific shades, spacing, layout, animations, and component styles.
- Layout is NOT dialed — choose the best layout for the content type (sidebar for dashboards, full-width for landing pages, bento for multi-metric views, etc.). The Aesthetic Family informs layout style (e.g., strict grid vs broken grid) but not layout type.
- The dials produce 8×7×6×12 = 4032 combinations. This is intentional — enough variety that consecutive generations will look dramatically different.
- A crypto dashboard on a warm light surface with serif font in an Organic/Natural family is intentionally unconventional — that's the point. Lean into it.
- 遵循拨盘结果。不要因为另一种组合“感觉更安全”就覆盖它们。
- 方向内的创作自由。拨盘设定方向(例如“暖浅色背景+金色强调色+衬线字体+装饰艺术流派”),但你可以选择具体的色调、间距、布局、动画和组件样式。
- 布局不由拨盘决定——为内容类型选择最佳布局(仪表盘用侧边栏,着陆页用全屏,多指标视图用bento布局等)。Aesthetic Family指导布局风格(例如严格网格vs不规则网格),但不指导布局类型。
- 拨盘可产生8×7×6×12 = 4032种组合。这是有意设计的——足够多样,连续生成的内容会截然不同。
- 暖浅色背景+衬线字体+有机/自然流派的加密仪表盘是有意打破常规的——这正是关键所在。大胆尝试。
Step 2: Build with Craft
步骤2:精心构建
Implement working HTML/CSS/JS that is:
- Production-grade: Clean, semantic HTML. Well-organized CSS with custom properties. Functional JS.
- Visually striking: A clear aesthetic point-of-view, not a generic template.
- Cohesive: Every element — typography, color, spacing, motion — serves the same design direction.
- Responsive: Works at 375px mobile width. Stacks gracefully.
实现可投入生产的HTML/CSS/JS,要求:
- 生产级:干净、语义化的HTML。组织良好的CSS,使用自定义属性。功能完善的JS。
- 视觉冲击力:清晰的美学视角,而非通用模板。
- 一致性:每个元素——排版、颜色、间距、动效——都服务于相同的设计方向。
- 响应式:在375px移动端宽度下正常工作。优雅堆叠。
Required Elements (not a template — implement fresh each time)
必填元素(不是模板——每次都重新实现)
Every generated page must include:
- Proper ,
DOCTYPE,charsetmetaviewport - Google Fonts loaded via with
<link>preconnect - All colors defined as semantic CSS custom properties in
:root - A media query that disables animations
prefers-reduced-motion - Box-sizing reset and font-smoothing
- An entrance animation strategy (choose ONE per project, vary across projects):
- Scroll reveal — IntersectionObserver triggers fade/slide on viewport entry
- Page-load stagger — elements animate in sequence on initial load, no scroll dependency
- State-driven transitions — elements transition between states (collapsed→expanded, hidden→visible) driven by user interaction, not scroll position
- Light/Dark theme toggle (MANDATORY) — every page must support both light and dark themes with a toggle button:
- Define all colors as CSS custom properties in (light theme) and
:root(dark theme)[data-theme="dark"] - Add a toggle button (sun/moon icon) in the page header or navigation
- Detect system preference via as the initial default
prefers-color-scheme: dark - Store user preference in so it persists across page reloads
localStorage - The Surface dial determines the default/primary theme direction, but the other theme must also be fully designed
- See the Theme Support section below for implementation details
- Define all colors as CSS custom properties in
Do NOT copy a fixed HTML skeleton. Structure the document to match the content.
每个生成的页面必须包含:
- 正确的、
DOCTYPE、charset元标签viewport - 通过加载Google Fonts,并添加
<link>preconnect - 所有颜色在中定义为语义化CSS自定义属性
:root - 一个媒体查询,用于禁用动画
prefers-reduced-motion - 盒模型重置和字体平滑
- 入场动画策略(每个项目选一种,项目间轮换):
- 滚动显示——IntersectionObserver触发元素进入视口时的淡入/滑动效果
- 页面加载 stagger——元素在初始加载时按顺序动画入场,不依赖滚动
- 状态驱动过渡——元素在状态间过渡(折叠→展开,隐藏→可见),由用户交互驱动,而非滚动位置
- 浅色/深色主题切换器(必填)——每个页面必须支持浅色和深色主题,带切换按钮:
- 在(浅色主题)和
:root(深色主题)中定义所有颜色为CSS自定义属性[data-theme="dark"] - 在页面页眉或导航中添加切换按钮(太阳/月亮图标)
- 通过检测系统偏好作为初始默认值
prefers-color-scheme: dark - 将用户偏好存储在中,以便在页面重新加载时保持
localStorage - Surface拨盘决定默认/主要主题方向,但另一种主题也必须完全设计
- 查看下方的主题支持部分获取实现细节
- 在
不要复制固定的HTML骨架。根据内容结构文档。
Design Rules
设计规则
Typography
排版
- Load fonts via Google Fonts (or CDN for fonts not on Google Fonts). Always load 2+ weights.
<link> - NEVER use these as primary font — they are AI defaults or AI anti-default defaults:
- AI defaults: Inter, Roboto, Arial, Open Sans, Helvetica
- AI anti-defaults (the fonts AI picks when told to avoid the defaults): Space Grotesk, DM Sans, Outfit, Plus Jakarta Sans, Manrope
- AI favorite serifs (banned as default): Fraunces, Instrument Serif — the two LLM-favorite display serifs
- If a Style Preset specifies a font, use that font. The preset fonts are chosen to be distinctive and varied.
- Serif discipline: Serif is discouraged as the default for any project. "It feels creative/premium/editorial" is NOT a reason to reach for serif — this is the most common AI tell. Serif is acceptable ONLY when: (a) the brand brief literally names a serif font, OR (b) the aesthetic family is genuinely editorial/luxury/publication AND you can articulate why this specific serif fits this specific brand. For everything else, default to sans-serif display fonts.
- Max 2 font families per page. One well-tuned family with weight contrast usually beats two competing typefaces.
- Body: 16px minimum, line-height 1.4-1.6 (real-world range: Apple 1.47, Stripe 1.4, Notion 1.55), max-width 65ch. Some brands add subtle positive body tracking: IBM +0.16px, ElevenLabs +0.15-0.18px — a precision detail that separates professional from generic.
- Headings: Use for responsive sizing. Use negative letter-spacing on display text — 85% of major brands use negative tracking on display sizes (Apple -0.28px, Vercel -2.4px, Linear -3px, Stripe -1.4px, Intercom -2.0px, Miro -2.0px, MiniMax -2.0px, Revolut -2.72px@136px). AI tends to skip letter-spacing entirely. Exception: SpaceX uses +1.6px positive tracking for an engineered/industrial feel.
clamp() - Font weight variety: Don't default to 600-700 for all headings. Across 73 major brands, display weight 400-500 is the most common range (~45%). IBM and ElevenLabs use 300 (ultra-light), Shopify uses 330, Ferrari uses 500, Runway uses 400. Only ~15% of brands use 700+ for display. Consider lighter weights (300-500) for a more refined, editorial feel.
- Single-font discipline: ~40% of major brands use ONE font family across the entire site (different weights for hierarchy). HashiCorp, MongoDB, Miro, NVIDIA, Vodafone, Renault, Lamborghini all use a single proprietary sans. Don't assume you need two font families — one well-tuned family with weight contrast often beats two competing typefaces.
- See references/aesthetics.md § Real-World Typography References for exact values from 15+ major brands.
- 通过Google Fonts 加载字体(或CDN加载不在Google Fonts上的字体)。始终加载2种以上字重。
<link> - 绝对不要将这些作为主字体——它们是AI默认或AI反默认的默认字体:
- AI默认:Inter、Roboto、Arial、Open Sans、Helvetica
- AI反默认(当被告知避免默认时AI选择的字体):Space Grotesk、DM Sans、Outfit、Plus Jakarta Sans、Manrope
- AI偏好衬线体(默认禁用):Fraunces、Instrument Serif——LLM最爱的两种展示衬线体
- 如果Style Preset指定了字体,使用该字体。预设字体经过选择,具有独特性和多样性。
- 衬线体原则:衬线体不建议作为任何项目的默认字体。“它感觉有创意/高端/编辑风格”不是选择衬线体的理由——这是AI最常见的特征。仅在以下情况下可接受衬线体:(a) 品牌brief明确指定衬线字体,OR (b) 美学流派确实是编辑/奢华/出版物风格,且你能说明为什么这种特定衬线体适合该特定品牌。其他所有情况,默认使用无衬线展示字体。
- 每页最多2种字体家族。一个调整良好的家族(带字重对比)通常优于两种竞争字体。
- 正文:最小16px,行高1.4-1.6(实际范围:Apple 1.47,Stripe 1.4,Notion 1.55),最大宽度65ch。一些品牌会为正文添加微妙的正字距:IBM +0.16px,ElevenLabs +0.15-0.18px——这是区分专业和通用的细节。
- 标题:使用实现响应式大小。展示文本使用负字距——85%的主流品牌在展示尺寸上使用负字距(Apple -0.28px,Vercel -2.4px,Linear -3px,Stripe -1.4px,Intercom -2.0px,Miro -2.0px,MiniMax -2.0px,Revolut -2.72px@136px)。AI往往完全忽略字距。例外:SpaceX使用+1.6px正字距,营造工程/工业感。
clamp() - 字体字重多样性:不要默认所有标题都用600-700字重。在73个主流品牌中,展示字重400-500是最常见的范围(约45%)。IBM和ElevenLabs使用300(超轻),Shopify使用330,Ferrari使用500,Runway使用400。只有约15%的品牌使用700+字重用于展示。考虑使用更轻的字重(300-500),营造更精致、编辑风格的感觉。
- 单字体原则:约40%的主流品牌在整个网站使用一种字体家族(不同字重用于层级)。HashiCorp、MongoDB、Miro、NVIDIA、Vodafone、Renault、Lamborghini都使用单一专有无衬线体。不要假设你需要两种字体家族——一个调整良好的家族(带字重对比)通常优于两种竞争字体。
- 查看references/aesthetics.md § Real-World Typography References获取15+主流品牌的精确值。
Color
颜色
- Define ALL colors as semantic CSS custom properties in . Name them to reflect purpose, not appearance (e.g., "surface", "emphasis", not "light-gray").
:root - Build your palette from scratch — see references/aesthetics.md for the method.
- Body text contrast ≥ 4.5:1. Large text ≥ 3:1.
- ONE accent color per page, used consistently everywhere. Black CTA trend: ~25% of major brands (Expo, Intercom, Lovable, MiniMax, Miro, Ollama, Shopify) use pure black as their primary CTA color — a confident, editorial choice that works on both light and dark surfaces.
- BANNED by default: purple/violet gradients, generic blue (), AI purple (
#3b82f6,#8b5cf6), AI purple-500 (#6366f1). Exemption: if the Design Read explicitly demands one of these (e.g., a brand whose identity IS purple), document the justification in a comment and verify contrast.#a855f7 - BANNED dark surfaces: The blue-black range (
#0a-#0f,#0a0e1a,#0d1117,#0f172a,#111827). These are THE AI dark mode default. Use the Scene Sentence and Dark Surface Tint Guide to choose a non-blue dark surface.#1e1b4b - BANNED warm neutrals as default background: cream, beige, sand, linen, ivory, champagne — any warm neutral with low saturation (HSL hue 30-60, saturation < 15%). Specific banned hex values: ,
#f5f1ea,#f7f5f1,#fbf8f1,#efeae0,#ece6db,#faf7f1. These are the 2025-2026 AI default. Exemption: use them ONLY when the Design Read explicitly calls for warmth (e.g., bakery, wellness, artisan) AND you can articulate why no other surface works.#e8dfcb - BANNED premium accents: brass/clay/oxblood family (,
#b08947,#b6553a,#9a2436,#9c6e2a,#bc7c3a) and espresso text (#7d5621,#1a1714,#1a1814). These are the AI "premium-consumer" defaults. Alternatives for premium-consumer briefs (rotate, do not reuse):#1b1814- Cold Luxury: silver-grey + chrome + smoke (think Tesla, Apple Watch)
- Forest: deep green + bone + amber accent (think Filson, Patagonia)
- Black and Tan: true off-black + warm tan, sharp contrast, no beige
- Cobalt + Cream: saturated blue against a single neutral, no brass
- Terracotta + Slate: warm rust against cool grey, no brass
- Olive + Brick + Paper: muted olive plus brick-red accent
- Pure monochrome + pop: off-white + off-black + one bright accent (electric blue, emerald, hot pink)
- WATCH for anti-default defaults: Teal/emerald has become the new AI purple (the go-to when told to avoid blue/purple). Warm amber/gold is becoming the "sophisticated alternative". Be aware and vary further.
- 所有颜色在中定义为语义化CSS自定义属性。命名反映用途,而非外观(例如“surface”“emphasis”,而非“light-gray”)。
:root - 从头开始构建调色板——查看references/aesthetics.md获取方法。
- 正文文本对比度≥4.5:1。大文本≥3:1。
- 每页一种强调色,始终一致使用。黑色CTA趋势:约25%的主流品牌(Expo、Intercom、Lovable、MiniMax、Miro、Ollama、Shopify)使用纯黑色作为主要CTA颜色——这是一种自信、编辑风格的选择,在浅色和深色背景上都适用。
- 默认禁用:紫色/紫罗兰渐变、通用蓝色()、AI紫色(
#3b82f6、#8b5cf6)、AI purple-500(#6366f1)。例外:如果Design Read明确要求其中一种(例如品牌标识就是紫色),在注释中记录理由并验证对比度。#a855f7 - 禁用深色背景:蓝黑色范围(
#0a-#0f、#0a0e1a、#0d1117、#0f172a、#111827)。这些是AI深色模式的默认值。使用Scene Sentence和Dark Surface Tint Guide选择非蓝色深色背景。#1e1b4b - 默认禁用暖中性背景:奶油色、米色、沙色、亚麻色、象牙色、香槟色——任何低饱和度的暖中性色(HSL色相30-60,饱和度<15%)。特定禁用十六进制值:、
#f5f1ea、#f7f5f1、#fbf8f1、#efeae0、#ece6db、#faf7f1。这些是2025-2026年的AI默认值。例外:仅当Design Read明确要求温暖感(例如面包店、健康、手工制品)且你能说明为什么没有其他背景适用时才使用。#e8dfcb - 禁用高端强调色:黄铜/黏土/牛血色系(、
#b08947、#b6553a、#9a2436、#9c6e2a、#bc7c3a)和浓缩咖啡色文本(#7d5621、#1a1714、#1a1814)。这些是AI“高端消费者”默认值。高端消费者brief的替代方案(轮换使用,不要重复):#1b1814- 冷奢华:银灰色+铬色+烟色(参考Tesla、Apple Watch)
- 森林风:深绿色+骨色+琥珀色强调色(参考Filson、Patagonia)
- 黑棕配色:纯近黑色+暖棕褐色,高对比度,无米色
- 钴蓝+奶油色:饱和蓝色搭配单一中性色,无黄铜色
- 赤陶色+石板灰:暖铁锈色搭配冷灰色,无黄铜色
- 橄榄绿+砖红+纸色:柔和橄榄绿搭配砖红色强调色
- 纯单色+亮点:米白色+近黑色+一种亮色强调色(电光蓝、祖母绿、亮粉色)
- 注意反默认的默认值:蓝绿色/祖母绿已成为新的AI紫色(当被告知避免蓝色/紫色时的首选)。暖琥珀色/金色正成为“精致替代方案”。注意并进一步多样化。
Layout
布局
- Use CSS Grid for 2D layouts, Flexbox for 1D.
- Spacing system: multiples of 4px (8, 12, 16, 24, 32, 48, 64). Section spacing: real brands use 80-120px between major sections (96px is the most common across 73 brands). Hero sections often use 120px+. AI tends to under-space sections at 48-64px.
- Container: between 1100-1400px (vary it), centered with auto margins and horizontal padding.
max-width - Use not
min-height: 100dvh.100vh - Mobile: everything stacks to single column below 768px.
- Section-Layout-Repetition Ban: No two consecutive sections may use the same layout family (e.g., two centered text blocks, two zigzag image-text pairs). Audit your sections top-to-bottom. A page with 8 sections must use at least 4 different layout families.
- Eyebrow Restraint: Eyebrow labels (small uppercase text above headings) — maximum 1 per 3 sections. If every section has an eyebrow, none stands out.
- Zigzag Cap: Maximum 2 consecutive alternating image-text sections. After 2, break with a different layout entirely.
- Split-Header Ban: The pattern "left big headline + right small explainer paragraph" as a section header is banned as default. If you need both a headline and an explainer, stack them vertically (headline on top, body below, max-width 65ch).
- Bento Background Diversity: Bento and feature-grid sections cannot be all white-on-white cards with text inside. At least 2-3 cells in any multi-cell grid need real visual variation: a real image, a brand-appropriate gradient, a pattern, or a tinted background.
- Content Density: Default content shape per section: short headline (≤ 8 words) + short sub-paragraph (≤ 25 words) + one visual asset OR one CTA. Anything more must be justified by the section's job.
- 使用CSS Grid实现2D布局,Flexbox实现1D布局。
- 间距系统:4px的倍数(8、12、16、24、32、48、64)。区块间距:主流品牌在主要区块间使用80-120px(96px在73个品牌中最常见)。Hero区块通常使用120px+。AI往往区块间距不足,为48-64px。
- 容器:在1100-1400px之间(变化),通过自动边距和水平内边距居中。
max-width - 使用而非
min-height: 100dvh。100vh - 移动端:768px以下所有内容堆叠为单列。
- 区块布局重复禁令:连续两个区块不得使用相同的布局类型(例如两个居中文本块、两个交替的图文对)。从上到下审核你的区块。一个有8个区块的页面必须使用至少4种不同的布局类型。
- 眉题限制:眉题(标题上方的小大写文本)——每3个区块最多1个。如果每个区块都有眉题,就没有突出的了。
- 交替布局上限:最多连续2个交替的图文区块。2个之后,完全改用不同的布局。
- 拆分页眉禁令:“左侧大标题+右侧小解释段落”作为区块页眉的模式默认禁用。如果需要标题和解释,垂直堆叠(标题在上,正文在下,最大宽度65ch)。
- Bento背景多样性:Bento和功能网格区块不能全是白卡白字。任何多单元格网格中至少2-3个单元格需要真实的视觉变化:真实图像、品牌适配渐变、图案或带色调的背景。
- 内容密度:每个区块的默认内容形式:短标题(≤8字)+短副标题(≤25字)+一个视觉资产OR一个CTA。更多内容必须由区块的用途证明其合理性。
Hero Section Discipline
Hero区块原则
- Viewport fit: Hero should fill the viewport on load but not force scrolling to see the first CTA. Test at 768px height.
- Stack discipline: Maximum 4 text elements in the hero stack (e.g., eyebrow + heading + subheading + CTA). More than 4 creates visual noise.
- Top padding cap: Hero top padding should not exceed 20vh. Excessive top padding pushes content below the fold.
- Anti-center bias: Not every hero needs to be centered. Consider left-aligned, split-screen, or asymmetric layouts based on the Design Read.
- 视口适配:Hero在加载时应填满视口,但不要强制滚动才能看到第一个CTA。在768px高度下测试。
- 堆叠原则:Hero堆叠中最多4个文本元素(例如眉题+标题+副标题+CTA)。超过4个会造成视觉噪音。
- 顶部内边距上限:Hero顶部内边距不应超过20vh。过多的顶部内边距会将内容推到折叠下方。
- 反居中偏见:不是每个Hero都需要居中。根据Design Read考虑左对齐、分屏或不对称布局。
CTA Discipline
CTA原则
- No duplicate intent: The same page must not have two CTAs with the same intent (e.g., two "Get Started" buttons in different sections). Each CTA should have a distinct purpose.
- Button contrast check: Primary CTA must have ≥ 4.5:1 contrast ratio between button text and button background.
- Button text wrapping ban: CTA text must never wrap to two lines. If it does, shorten the text or increase button width.
- One primary per viewport: Only one primary-styled button should be visible at any scroll position.
- 无重复意图:同一页面不得有两个意图相同的CTA(例如不同区块的两个“开始使用”按钮)。每个CTA应有明确的目的。
- 按钮对比度检查:主要CTA的按钮文本和按钮背景之间必须有≥4.5:1的对比度。
- 按钮文本换行禁令:CTA文本不得换行到两行。如果换行,缩短文本或增加按钮宽度。
- 每个视口一个主要按钮:任何滚动位置只能看到一个主要样式的按钮。
Components
组件
- See references/components.md for detailed patterns.
- Cards: max 16px (never 24px+). The most common card radius across 73 major brands is 12px (~35%), followed by 16px (~20%). Meta's 32px and Mastercard's 40px are rare exceptions for hero-level showcase cards, not standard content cards. Subtle border or shadow, not both.
border-radius - Buttons: Clear hover state + active press ().
scale(0.97-0.98) - Tables: Use for number columns.
font-variant-numeric: tabular-nums - Status: Always use color + icon/text, never color alone.
- Loading: Skeleton placeholders, not spinners.
- Empty states: Helpful message + action button, never blank.
- 查看references/components.md获取详细模式。
- 卡片:最大16px(绝对不要24px+)。在73个主流品牌中,最常见的卡片圆角是12px(约35%),其次是16px(约20%)。Meta的32px和Mastercard的40px是Hero级展示卡片的罕见例外,不是标准内容卡片。微妙边框或阴影,不要同时使用两者。
border-radius - 按钮:清晰的悬停状态+按下状态()。
scale(0.97-0.98) - 表格:数字列使用。
font-variant-numeric: tabular-nums - 状态:始终使用颜色+图标/文本,不要仅用颜色。
- 加载:骨架占位符,不要加载 spinner。
- 空状态:有用的消息+操作按钮,不要空白。
Animation
动画
- Only animate and
transform. Never animate layout properties.opacity - No . Specify exact properties.
transition: all - No or default
linear. Use custom cubic-bezier curves — but choose different curves for different projects.ease-in-out - Choose an entrance animation strategy from the three options in Required Elements #6. Do NOT default to IntersectionObserver every time.
- Respect .
prefers-reduced-motion: reduce - See references/animations.md for timing guidelines.
- 仅动画和
transform。永远不要动画布局属性。opacity - 不要使用。指定确切属性。
transition: all - 不要使用或默认的
linear。使用自定义cubic-bezier曲线——但不同项目选择不同的曲线。ease-in-out - 从必填元素#6的三个选项中选择入场动画策略。不要每次都默认使用IntersectionObserver。
- 尊重。
prefers-reduced-motion: reduce - 查看references/animations.md获取时间指南。
Charts
图表
- Use Chart.js or ECharts via CDN.
- Match chart type to data: trends → line, comparison → bar, proportion → donut.
- Use your page's color palette for chart colors — never library defaults.
- Always include: axis labels, tooltips, legend.
- See references/charts.md for setup guidelines.
- 通过CDN使用Chart.js或ECharts。
- 图表类型匹配数据:趋势→折线图,对比→柱状图,比例→环形图。
- 使用页面的调色板作为图表颜色——不要使用库默认值。
- 始终包含:轴标签、工具提示、图例。
- 查看references/charts.md获取设置指南。
Icons
图标
- Use inline SVG or a CDN icon library. Recommended libraries (priority order): Phosphor, Lucide, Heroicons, Tabler, Radix Icons, Solar (via Iconify).
- One icon family per project. Consistent stroke width (standardize globally, e.g., 1.5 or 2.0).
- Never use emoji as structural icons.
- Never hand-roll SVG icons — if a glyph is missing from your chosen library, install a second library or use a simple geometric shape. Hand-drawn SVG paths are consistently low quality.
- 使用内联SVG或CDN图标库。推荐库(优先级顺序):Phosphor、Lucide、Heroicons、Tabler、Radix Icons、Solar(通过Iconify)。
- 每个项目一种图标家族。一致的描边宽度(全局标准化,例如1.5或2.0)。
- 永远不要使用emoji作为结构图标。
- 永远不要手动绘制SVG图标——如果所选库缺少某个字形,安装第二个库或使用简单的几何形状。手动绘制的SVG路径质量始终很低。
Image & Visual Asset Strategy
图像与视觉资产策略
Priority order for visual assets:
- Image-generation tool first — If ANY image-gen tool is available in the environment (, MCP image tool, etc.), use it to create section-specific assets: hero photography, product shots, texture backgrounds. Generate at the right aspect ratio for the section.
generate_image - Real web images second — Use for placeholder photography (seed should describe the section, e.g.
https://picsum.photos/seed/{descriptive-seed}/{w}/{h}). Or use Unsplash/Pexels direct URLs.crypto-dashboard-hero - Last resort: tell the user — If neither is possible, leave clearly-labeled placeholder slots () and note what images are needed.
<!-- TODO: hero product photo, 1600x900 -->
Rules:
- Always include text on all images. Decorative images use
alt.alt="" - Never fake screenshots: Do not build div-based fake app screenshots, fake browser chrome, or fake terminal windows as hero images. This is the #1 AI design tell. If a screenshot is needed, use a real image or skip the preview entirely.
- Decorative images: Use CSS gradients, SVG patterns, or abstract shapes — not stock photos of people pointing at screens.
- Logo placeholders for social proof: For "Trusted by / Used by" logo walls, use real SVG logos from Simple Icons CDN () or generate simple monogram SVGs. Do NOT use plain text wordmarks (
https://cdn.simpleicons.org/{slug}/{color}styled in a row). Logo wall = logos only, no industry/category labels below each logo.<span>Acme Co</span> - No pills/labels overlaid on images: No overlays on photos with tags like "Brand · 02" or "Field notes". Let the image speak alone, or add a caption below (outside the image).
<span> - No photo-credit captions as decoration: Strings like "Field study no. 12 · Ines Caetano" under stock images are pretentious. Photo credit only for real photographers being credited.
- Hero needs a real visual: Text + gradient blob is not a hero — it's a placeholder. Even minimalist sites need at least 2-3 real images.
视觉资产优先级顺序:
- 优先使用图像生成工具——如果环境中有任何图像生成工具(、MCP图像工具等),使用它创建区块特定资产:Hero照片、产品图、纹理背景。生成适合区块的宽高比。
generate_image - 其次使用真实Web图像——使用作为占位符照片(种子应描述区块,例如
https://picsum.photos/seed/{描述性种子}/{w}/{h})。或使用Unsplash/Pexels直接URL。crypto-dashboard-hero - 最后选择:告知用户——如果以上都不可行,留下清晰标记的占位符()并注明需要的图像。
<!-- TODO: hero product photo, 1600x900 -->
规则:
- 始终为所有图像添加文本。装饰性图像使用
alt。alt="" - 永远不要伪造截图:不要构建基于div的假应用截图、假浏览器边框或假终端窗口作为Hero图像。这是AI设计最明显的特征。如果需要截图,使用真实图像或完全跳过预览。
- 装饰性图像:使用CSS渐变、SVG图案或抽象形状——不要使用指向屏幕的人物库存照片。
- 社交证明的Logo占位符:对于“受信任/被使用”的Logo墙,使用Simple Icons CDN的真实SVG Logo()或生成简单的字母组合SVG。不要使用纯文本字标(
https://cdn.simpleicons.org/{slug}/{color}排成一行)。Logo墙=仅Logo,每个Logo下方无行业/类别标签。<span>Acme Co</span> - 不要在图像上叠加标签/标记:不要在照片上叠加标签,如“Brand · 02”或“Field notes”。让图像自己说话,或在下方添加说明(图像外部)。
<span> - 不要将照片信用说明作为装饰:库存图像下方的“Field study no. 12 · Ines Caetano”这类字符串很做作。仅在为真实摄影师署名时添加照片信用。
- Hero需要真实视觉元素:文本+渐变 blob不是Hero——是占位符。即使是极简网站也需要至少2-3张真实图像。
Mock Data
模拟数据
- Use plausible numbers with natural variance (not round numbers).
- Use real-world labels (actual names, realistic dates).
- Time series: 7-30 data points with natural fluctuation.
- 使用合理的数字,带有自然变化(不要整数字)。
- 使用真实世界的标签(实际名称、真实日期)。
- 时间序列:7-30个数据点,带有自然波动。
Accessibility (CRITICAL)
无障碍(至关重要)
- Contrast: Body text ≥ 4.5:1, large text ≥ 3:1, UI components ≥ 3:1 against adjacent colors.
- Focus states: All interactive elements must have visible focus rings (2-4px outline). Never remove without providing an alternative.
outline - Alt text: All meaningful images must have descriptive text. Decorative images use
alt.alt="" - Heading hierarchy: Use sequential →
h1, no level skipping. Oneh6per page.h1 - Color not only: Never convey information by color alone. Always pair with icon, text, or pattern.
- Keyboard navigation: Tab order must match visual order. All interactive elements reachable via keyboard.
- Aria labels: Icon-only buttons must have . Form inputs must have associated
aria-label.<label> - Skip link: Include a "Skip to main content" link as the first focusable element.
- Reduced motion: Respect — disable or simplify all animations.
prefers-reduced-motion: reduce
- 对比度:正文文本≥4.5:1,大文本≥3:1,UI组件与相邻颜色≥3:1。
- 焦点状态:所有交互元素必须有可见的焦点环(2-4px轮廓)。永远不要移除而不提供替代方案。
outline - Alt文本:所有有意义的图像必须有描述性文本。装饰性图像使用
alt。alt="" - 标题层级:使用连续的→
h1,不要跳过层级。每页一个h6。h1 - 不要仅用颜色:永远不要仅通过颜色传达信息。始终搭配图标、文本或图案。
- 键盘导航:Tab顺序必须匹配视觉顺序。所有交互元素可通过键盘访问。
- Aria标签:仅图标按钮必须有。表单输入必须有相关联的
aria-label。<label> - 跳转链接:在第一个可聚焦元素中包含“跳转到主要内容”链接。
- 减少动效:尊重——禁用或简化所有动画。
prefers-reduced-motion: reduce
Forms & Feedback
表单与反馈
- Visible labels: Every input must have a visible , not just a placeholder.
<label> - Error placement: Show error messages directly below the related field, not only at the top of the form.
- Required indicators: Mark required fields with an asterisk or "(required)" text.
- Submit feedback: Show loading state on submit, then success or error state.
- Empty states: When no data exists, show a helpful message + action button, never a blank area.
- Confirmation dialogs: Confirm before destructive actions (delete, reset, clear all).
- Input types: Use semantic attributes (
type,email,tel,number) to trigger correct mobile keyboards.url - Error clarity: Error messages must state the cause and how to fix it (not just "Invalid input").
- 可见标签:每个输入必须有可见的,不要仅用占位符。
<label> - 错误位置:错误消息直接显示在相关字段下方,不要仅在表单顶部显示。
- 必填标记:用星号或“(必填)”文本标记必填字段。
- 提交反馈:提交时显示加载状态,然后显示成功或错误状态。
- 空状态:当没有数据时,显示有用的消息+操作按钮,不要空白区域。
- 确认对话框:执行破坏性操作(删除、重置、清除全部)前确认。
- 输入类型:使用语义化属性(
type、email、tel、number)触发正确的移动键盘。url - 错误清晰度:错误消息必须说明原因和修复方法(不要仅说“无效输入”)。
Interaction States
交互状态
- Hover feedback: All clickable elements must have a visible hover state (color change, underline, or subtle transform).
- Active/press feedback: Buttons should scale slightly on press () for tactile feel.
scale(0.97-0.98) - Disabled states: Disabled elements use reduced opacity (0.4-0.5) + +
cursor: not-allowed.pointer-events: none - Loading states: Use skeleton placeholders for content loading, spinner only for actions. Show loading feedback for any operation > 300ms.
- Touch targets: All interactive elements must be at least 44×44px on mobile. Use padding to expand hit area if the visual element is smaller.
- 悬停反馈:所有可点击元素必须有可见的悬停状态(颜色变化、下划线或微妙变换)。
- 激活/按下反馈:按钮按下时应略微缩放(),提供触觉反馈。
scale(0.97-0.98) - 禁用状态:禁用元素使用降低的透明度(0.4-0.5)++
cursor: not-allowed。pointer-events: none - 加载状态:内容加载使用骨架占位符,仅操作使用spinner。任何超过300ms的操作都显示加载反馈。
- 触摸目标:移动端所有交互元素必须至少44×44px。如果视觉元素较小,使用内边距扩展点击区域。
Copy Rules (Text Content)
文案规则(文本内容)
AI-generated text is one of the most obvious tells. Apply these rules to ALL visible text:
AI生成的文本是最明显的特征之一。将这些规则应用于所有可见文本:
Banned Patterns
禁用模式
- No em-dashes () anywhere. Use commas, periods, or semicolons instead. Em-dashes are the #1 LLM text signature. This is a zero-tolerance rule — not "use sparingly", but zero.
— - No en-dashes () as separators. Date ranges use hyphens (
–). Number ranges use hyphens (2018-2026).€40-80k - No marketing buzzwords: "Revolutionize", "Supercharge", "Unleash", "Seamlessly", "Cutting-edge", "Next-generation", "Game-changing", "Empower", "Elevate", "Transform your workflow". Write like a human, not a press release.
- No aphoristic cadence: Avoid short, punchy, parallel sentence structures that read like motivational posters. ("Simple. Fast. Powerful." / "Built for speed. Designed for scale.")
- No numbered section markers: Don't label sections "01", "02", "03" unless the content is genuinely sequential (like steps in a process). No "00/INDEX", "001/Capabilities" style eyebrows.
- No decoration text strips: Don't add scrolling marquees or repeated text strips that say things like "INNOVATION · DESIGN · EXCELLENCE" or "BRAND · MOTION · SPATIAL".
- No version labels in hero: "V0.6", "BETA", "INVITE-ONLY PREVIEW" — banned unless the brief is explicitly about a product launch.
- No scroll cues: "Scroll", "↓ scroll", "Scroll to explore", animated mouse-wheel icons — banned. Users know how to scroll.
- No locale/weather strips: "LIS 14:23 · 18°C" in headers/footers — banned unless the brief is genuinely about a place or timezone-distributed studio.
- No fake-precise numbers: Numbers like ,
92%,4.1×must come from real data or be explicitly labeled as mock. Don't fake engineering precision.48k - One copy register per page: Don't mix technical mono ("47 tasks · 0.6 ctx-switches/day"), editorial prose, and marketing punch in the same composition.
- Quotes ≤ 3 lines: Testimonial quotes must fit in a glance. Attribution: name + role + (optionally) company. Never name only ("- Sarah").
- 任何地方都不要使用破折号()。改用逗号、句号或分号。破折号是LLM文本最显著的特征。这是零容忍规则——不是“谨慎使用”,而是完全禁用。
— - 不要使用短破折号()作为分隔符。日期范围使用连字符(
–)。数字范围使用连字符(2018-2026)。€40-80k - 不要使用营销 buzzwords:“Revolutionize”“Supercharge”“Unleash”“Seamlessly”“Cutting-edge”“Next-generation”“Game-changing”“Empower”“Elevate”“Transform your workflow”。像人类一样写作,不要像新闻稿。
- 不要使用格言式节奏:避免简短、有力、平行的句子结构,读起来像励志海报。(“Simple. Fast. Powerful.” / “Built for speed. Designed for scale.”)
- 不要使用编号区块标记:不要给区块标记“01”“02”“03”,除非内容确实是顺序的(例如流程步骤)。不要使用“00/INDEX”“001/Capabilities”风格的眉题。
- 不要使用装饰文本条:不要添加滚动跑马灯或重复文本条,如“INNOVATION · DESIGN · EXCELLENCE”或“BRAND · MOTION · SPATIAL”。
- 不要在Hero中使用版本标签:“V0.6”“BETA”“INVITE-ONLY PREVIEW”——禁用,除非brief明确是关于产品发布的。
- 不要使用滚动提示:“Scroll”“↓ scroll”“Scroll to explore”、动画鼠标滚轮图标——禁用。用户知道如何滚动。
- 不要使用地区/天气条:页眉/页脚中的“LIS 14:23 · 18°C”——禁用,除非brief确实是关于某个地点或时区分布的工作室。
- 不要使用虚假精确数字:像、
92%、4.1×这样的数字必须来自真实数据或明确标记为模拟。不要伪造工程精度。48k - 每页一种文案风格:不要在同一作品中混合技术术语(“47 tasks · 0.6 ctx-switches/day”)、编辑散文和营销口号。
- 引用≤3行:推荐引用必须一眼看完。署名:姓名+职位+(可选)公司。不要仅署名(“- Sarah”)。
Copy Self-Audit
文案自我审核
Before delivering, read every visible string on the page and ask:
- Would a human copywriter write this? Or does it sound like ChatGPT?
- Is this specific to the product, or could it apply to any product in the category?
- Does the heading actually say something, or is it a vague platitude?
- Are there any grammatically broken phrases or AI-hallucinated wordplay?
- Does any string read like "an LLM trying to sound thoughtful"? (passive-aggressive humility, fake-craftsman labels, mock-poetic micro-meta)
交付前,阅读页面上的每一个可见字符串并问自己:
- 人类文案师会这么写吗?还是听起来像ChatGPT?
- 这是产品特有的,还是适用于该类别的任何产品?
- 标题真的说明了什么,还是模糊的陈词滥调?
- 有没有语法错误的短语或AI幻觉的文字游戏?
- 有没有字符串读起来像“LLM试图显得有思想”?(被动攻击性谦逊、虚假工匠标签、伪诗意微元)
Theme Support (Light / Dark — MANDATORY)
主题支持(浅色/深色——必填)
Every generated page MUST include a light/dark theme toggle. This is not optional. Users expect to be able to switch themes on any modern website.
每个生成的页面必须包含浅色/深色主题切换器。这不是可选的。用户期望在任何现代网站上都能切换主题。
Default Behavior (Light/Dark Toggle)
默认行为(浅色/深色切换器)
The Surface dial determines which theme is the primary (shown on first load if no system preference), but both themes must be fully implemented:
- CSS custom properties for all colors — define all colors as in
--var(light) and:root(dark).[data-theme="dark"] - Toggle UI — add a simple toggle button (sun/moon icon) in the header/nav. Store preference in .
localStorage - System preference detection — use as the initial default if no stored preference.
prefers-color-scheme: dark - Both themes must be fully designed — not just "invert the colors". Each theme needs its own surface hierarchy, contrast verification, and accent adjustment.
Surface拨盘决定哪个主题是主要主题(如果没有系统偏好,首次加载时显示),但两个主题都必须完全实现:
- 所有颜色使用CSS自定义属性——在(浅色)和
:root(深色)中定义所有颜色为[data-theme="dark"]。--var - 切换UI——在页眉/导航中添加简单的切换按钮(太阳/月亮图标)。将偏好存储在中。
localStorage - 系统偏好检测——如果没有存储偏好,使用作为初始默认值。
prefers-color-scheme: dark - 两个主题都必须完全设计——不是“反转颜色”而已。每个主题需要自己的背景层级、对比度验证和强调色调整。
Dark Mode Design Rules
深色模式设计规则
When designing the dark variant (which every page needs for its dark theme):
- Scene sentence: Write a Scene Sentence (see Step 0.5) to anchor the dark palette. Do NOT default to blue-black.
- Surface hierarchy: Dark backgrounds need MORE levels of elevation than light (at least 4 distinct surface levels).
- Contrast independence: Verify contrast ratios independently for dark mode — don't assume light-mode-passing colors work on dark surfaces.
- Accent adjustment: Accent colors often need to be lighter/more saturated on dark backgrounds to maintain the same visual weight.
- Token strategy: Use the same CSS custom property names with different values:
css
:root {
--surface-primary: #fafafa;
--surface-elevated: #ffffff;
--text-primary: #1a1a1a;
--accent: #d4a030;
}
[data-theme="dark"] {
--surface-primary: #1a1816; /* from Scene Sentence */
--surface-elevated: #242220;
--text-primary: #e8e4e0;
--accent: #e8b84a; /* lighter for dark bg */
}- Toggle implementation:
js
// Detect system preference, respect stored preference
const stored = localStorage.getItem('theme');
const prefersDark = matchMedia('(prefers-color-scheme: dark)').matches;
document.documentElement.dataset.theme = stored || (prefersDark ? 'dark' : 'light');
// Toggle handler
function toggleTheme() {
const current = document.documentElement.dataset.theme;
const next = current === 'dark' ? 'light' : 'dark';
document.documentElement.dataset.theme = next;
localStorage.setItem('theme', next);
}设计深色变体(每个页面都需要用于深色主题)时:
- Scene sentence:编写Scene Sentence(查看步骤0.5)锚定深色调色板。不要默认使用蓝黑色。
- 背景层级:深色背景需要比浅色更多的层级(至少4个不同的背景层级)。
- 独立对比度:独立验证深色模式的对比度——不要假设浅色模式通过的颜色在深色背景上也适用。
- 强调色调整:强调色在深色背景上通常需要更浅/更饱和,以保持相同的视觉权重。
- 令牌策略:使用相同的CSS自定义属性名称,不同的值:
css
:root {
--surface-primary: #fafafa;
--surface-elevated: #ffffff;
--text-primary: #1a1a1a;
--accent: #d4a030;
}
[data-theme="dark"] {
--surface-primary: #1a1816; /* from Scene Sentence */
--surface-elevated: #242220;
--text-primary: #e8e4e0;
--accent: #e8b84a; /* lighter for dark bg */
}- 切换实现:
js
// Detect system preference, respect stored preference
const stored = localStorage.getItem('theme');
const prefersDark = matchMedia('(prefers-color-scheme: dark)').matches;
document.documentElement.dataset.theme = stored || (prefersDark ? 'dark' : 'light');
// Toggle handler
function toggleTheme() {
const current = document.documentElement.dataset.theme;
const next = current === 'dark' ? 'light' : 'dark';
document.documentElement.dataset.theme = next;
localStorage.setItem('theme', next);
}Anti-Patterns (NEVER DO THESE)
反模式(绝对不要做这些)
- ❌ Inter, Roboto, Arial as primary font
- ❌ Purple/violet gradient backgrounds as default (exemption: brand-mandated, documented)
- ❌ Cream/beige/sand as default background (exemption: Design Read explicitly demands warmth with articulated rationale)
- ❌ Blue-black dark surfaces (,
#0a0e1a,#0d1117,#0f172a) — use Scene Sentence to anchor a non-blue tint#111827 - ❌ Centered hero + three equal feature cards (the #1 AI layout)
- ❌ Same-sized card grid repeated endlessly
- ❌ on cards
border-radius: 24px+ - ❌ or
transition: alleasinglinear - ❌ Emoji as navigation/action icons
- ❌ Gradient text () — use solid colors for text
background-clip: text - ❌ Gray text below 4.5:1 contrast ratio
- ❌ for full-height sections (use
100vh)100dvh - ❌ Horizontal scroll on mobile
- ❌ Em-dashes in any visible text
- ❌ Marketing buzzwords in headings
- ❌ Numbered section markers ("01", "02", "03")
- ❌ Div-based fake screenshots or browser chrome
- ❌ Eyebrow label on every section
- ❌ More than 2 consecutive zigzag layouts
- ❌ Same layout family in consecutive sections
- ❌ Two CTAs with the same intent on one page
- ❌ Copying the same design you generated last time
- ❌ 将Inter、Roboto、Arial作为主字体
- ❌ 默认使用紫色/紫罗兰渐变背景(例外:品牌要求,有文档记录)
- ❌ 默认使用奶油色/米色/沙色背景(例外:Design Read明确要求温暖感,有明确理由)
- ❌ 使用蓝黑色深色背景(、
#0a0e1a、#0d1117、#0f172a)——使用Scene Sentence锚定非蓝色色调#111827 - ❌ 居中Hero + 三个相等的功能卡片(#1 AI布局)
- ❌ 重复相同大小的卡片网格
- ❌ 卡片使用
border-radius: 24px+ - ❌ 使用或
transition: all缓动linear - ❌ 使用emoji作为导航/操作图标
- ❌ 使用渐变文本()——文本使用纯色
background-clip: text - ❌ 灰色文本对比度低于4.5:1
- ❌ 全高区块使用(使用
100vh)100dvh - ❌ 移动端水平滚动
- ❌ 任何可见文本中使用破折号
- ❌ 标题中使用营销buzzwords
- ❌ 使用编号区块标记(“01”“02”“03”)
- ❌ 使用基于div的假截图或浏览器边框
- ❌ 每个区块都有眉题
- ❌ 连续超过2个交替布局
- ❌ 连续区块使用相同布局类型
- ❌ 同一页面有两个意图相同的CTA
- ❌ 复制你上次生成的相同设计
Claude-Specific Defects (known failure modes)
Claude特定缺陷(已知失败模式)
These are patterns Claude specifically tends to produce. Watch for and avoid them:
- border + box-shadow combo — Claude likes to add both a 1px border AND a large box-shadow to the same element, creating a "ghost card" effect. Rule: choose one or the other, never both on the same element.
- border-radius inflation — Claude tends to use 24px-40px border-radius on cards. Rule: cards max 16px; pill shapes only for tags/badges/buttons.
- Hand-drawn SVG illustrations — Claude will attempt to hand-draw SVG illustrations as decoration. The quality is consistently poor. Rule: use icon libraries (Lucide, Phosphor, Heroicons) or CSS-based decorative elements, never hand-drawn SVGs.
- Repeating-linear-gradient stripes — Claude likes to add diagonal stripe patterns via on
repeating-linear-gradientor section backgrounds. Rule: banned. Use other surface treatments from references/aesthetics.md.body::before - Gradient text on headings — Claude frequently applies + gradient to large headings. Rule: banned. Use solid colors for all text.
background-clip: text - Deep blue-black default — When asked for dark mode, Claude almost always picks the blue-black range. Rule: must use Scene Sentence to anchor a specific, non-blue dark tint.
#0a-#0f
这些是Claude特别容易产生的模式。注意并避免:
- border + box-shadow组合——Claude喜欢在同一元素上同时添加1px边框和大box-shadow,创建“幽灵卡片”效果。规则:选其一,不要在同一元素上同时使用两者。
- border-radius膨胀——Claude倾向于在卡片上使用24px-40px的border-radius。规则:卡片最大16px;药丸形状仅用于标签/徽章/按钮。
- 手绘SVG插图——Claude会尝试手绘SVG插图作为装饰。质量始终很低。规则:使用图标库(Lucide、Phosphor、Heroicons)或基于CSS的装饰元素,永远不要手绘SVG。
- repeating-linear-gradient条纹——Claude喜欢在或区块背景上通过
body::before添加对角条纹图案。规则:禁用。使用references/aesthetics.md中的其他背景处理方式。repeating-linear-gradient - 标题渐变文本——Claude经常对大标题应用+渐变。规则:禁用。所有文本使用纯色。
background-clip: text - 深蓝黑色默认值——当要求深色模式时,Claude几乎总是选择蓝黑色范围。规则:必须使用Scene Sentence锚定特定的非蓝色深色色调。
#0a-#0f
The AI Slop Test (Two Layers)
AI劣质产物测试(两层)
Before delivering, run both layers:
交付前,运行两层测试:
Layer 0: Production-Test Tells (73-Brand Benchmark)
第0层:生产测试特征(73品牌基准)
These are the specific measurable differences between AI-generated UI and real production websites, derived from analyzing 73 major brand design systems:
| Tell | AI Default | Real Brand Range | Fix |
|---|---|---|---|
| Display weight | 600-700 | 300-500 (45% of brands) | Try 400-500 for display; 300 for editorial |
| Display letter-spacing | 0 (none) | -0.28px to -3px (85% negative) | Add |
| Body letter-spacing | 0 | 0 to +0.24px (IBM +0.16px, Revolut +0.24px) | Consider subtle positive tracking on body |
| Card border-radius | 24px+ | 12px (35%), 16px (20%) | Cap at 16px for cards |
| Button shape | 8-12px radius | 9999px pill (40%) or 0-8px (30%) | Commit to pill OR sharp, avoid the middle |
| Section spacing | 48-64px | 80-120px (96px most common) | Use 96px between major sections |
| Shadow strategy | box-shadow on cards | Hairline border or surface-lift (60%) | Prefer 1px border over drop shadow |
| CTA color | Blue #3b82f6 | Black (25%), brand-specific (30%) | Try black pill CTA |
| Canvas warmth | Same cream every time | Each brand's warm-white is unique | Vary the warm-white hue per project |
| Font families | 2 families | 1 family (40% of brands) | Consider single-family with weight contrast |
这些是AI生成UI与真实生产网站之间的具体可衡量差异,来自对73个主流品牌设计系统的分析:
| 特征 | AI默认 | 真实品牌范围 | 修复方法 |
|---|---|---|---|
| 展示字重 | 600-700 | 300-500(45%的品牌) | 尝试展示字重400-500;编辑风格用300 |
| 展示字距 | 0(无) | -0.28px到-3px(85%为负) | 展示文本添加 |
| 正文字距 | 0 | 0到+0.24px(IBM +0.16px,Revolut +0.24px) | 考虑为正文添加微妙的正字距 |
| 卡片border-radius | 24px+ | 12px(35%),16px(20%) | 卡片最大16px |
| 按钮形状 | 8-12px圆角 | 9999px药丸(40%)或0-8px(30%) | 坚持药丸或尖锐形状,避免中间值 |
| 区块间距 | 48-64px | 80-120px(96px最常见) | 主要区块间使用96px |
| 阴影策略 | 卡片使用box-shadow | 细边框或背景提升(60%) | 优先使用1px边框而非投影 |
| CTA颜色 | 蓝色#3b82f6 | 黑色(25%),品牌特定色(30%) | 尝试黑色药丸CTA |
| 画布暖色调 | 每次都是相同的奶油色 | 每个品牌的暖白色都独特 | 每个项目改变暖白色色相 |
| 字体家族 | 2种 | 1种(40%的品牌) | 考虑单一家族带字重对比 |
Layer 1: First-Order Check
第1层:一阶检查
- Could someone tell this was AI-generated? If yes → the design lacks a distinctive point-of-view. Redesign.
- Could someone guess the topic just from the color scheme? If yes → the palette is too cliché (blue for finance, green for health). Find a less obvious choice.
- Does every section look the same? If yes → vary the layout rhythm. Mix card sizes, alternate text/image placement, break the grid.
- Is this the same design you made last time? If yes → change at least the font, color palette, and layout structure.
- 有人能看出这是AI生成的吗? 如果是→设计缺乏独特视角。重新设计。
- 有人能仅从配色方案猜出主题吗? 如果是→调色板太老套(金融用蓝色,健康用绿色)。找一个不那么明显的选择。
- 每个区块看起来都一样吗? 如果是→改变布局节奏。混合卡片大小,交替文本/图像位置,打破网格。
- 这和你上次做的设计一样吗? 如果是→至少改变字体、调色板和布局结构。
Layer 2: Second-Order Check (Anti-Anti-Default)
第2层:二阶检查(反反默认)
The first layer catches obvious AI defaults. This layer catches the defaults you reach for when avoiding the obvious defaults — the "anti-default defaults" that shift over time.
- Is your "alternative" choice actually the most common alternative? When you avoid one cliché, you often land on the next most popular option. Ask: "If 100 AI agents all avoided the obvious default, what would most of them pick instead?" — then pick something else.
- Can someone guess your aesthetic family from the page type alone? (e.g., "developer tool = dark mode + monospace + green accent", "fintech = navy + white + clean sans") If yes → subvert the expectation.
- Are you using the same "safe alternative" font/color/layout you used last time? The anti-default becomes the new default through repetition. Track what you've used recently and deliberately avoid it.
- Does your design feel like it belongs to a recognizable "AI aesthetic school"? (e.g., "the Linear clone", "the Vercel look", "the Stripe style") If it clearly belongs to one school → mix in elements from a different tradition.
第一层捕捉明显的AI默认值。这一层捕捉你在避免明显默认值时选择的默认值——随时间变化的“反默认默认值”。
- 你的“替代”选择实际上是最常见的替代方案吗? 当你避免一个陈词滥调时,你往往会落到下一个最流行的选项。问自己:“如果100个AI代理都避免明显的默认值,大多数会选什么?”——然后选别的。
- 有人能仅从页面类型猜出你的美学流派吗?(例如“开发工具=深色模式+等宽体+绿色强调色”,“金融科技=海军蓝+白色+干净无衬线体”)如果是→打破预期。
- 你在使用和上次相同的“安全替代”字体/颜色/布局吗? 反默认值通过重复会成为新的默认值。记录你最近使用的内容,故意避免。
- 你的设计看起来属于可识别的“AI美学流派”吗?(例如“Linear克隆”“Vercel风格”“Stripe风格”)如果明显属于某一流派→混合不同传统的元素。
Refinement Pass (MANDATORY)
优化环节(必填)
After completing the initial build, take a second pass to refine and polish. Do NOT add more elements — instead, make what exists more cohesive and crisp. This is inspired by the canvas-design skill's principle: "The user already said it isn't perfect enough. It must be pristine."
During the refinement pass, ask:
- Spacing consistency: Are all margins and paddings following the spacing system? Any awkward gaps?
- Color harmony: Does every color on the page serve the same design direction? Any rogue shades?
- Typography rhythm: Are heading sizes, weights, and letter-spacing consistent across sections?
- Component polish: Do all buttons have hover + active states? Do all cards have consistent border-radius?
- Copy quality: Re-read every visible string. Any AI-sounding phrases? Any em-dashes that slipped through?
- Dark mode parity: Switch to the other theme. Does it look equally polished, or is one theme clearly an afterthought?
- Mobile check: Does everything stack cleanly at 375px? Any horizontal overflow?
The instinct to add more is wrong. If something feels incomplete, the fix is usually better spacing, better contrast, or better typography — not another gradient, another animation, or another section.
完成初始构建后,进行第二次优化和打磨。不要添加更多元素——相反,让现有元素更一致、更清晰。这灵感来自canvas-design技能的原则:“用户已经说过它不够完美。它必须无瑕。”
优化环节中,问自己:
- 间距一致性:所有边距和内边距都遵循间距系统吗?有没有尴尬的间隙?
- 色彩和谐:页面上的每一种颜色都服务于相同的设计方向吗?有没有不合适的色调?
- 排版节奏:各区块的标题大小、字重和字距一致吗?
- 组件打磨:所有按钮都有悬停+激活状态吗?所有卡片的border-radius一致吗?
- 文案质量:重新阅读每一个可见字符串。有没有AI风格的短语?有没有漏掉的破折号?
- 深色模式 parity:切换到另一个主题。它看起来同样精致,还是一个主题明显是事后添加的?
- 移动端检查:375px下所有内容都干净堆叠吗?有没有水平溢出?
添加更多元素的本能是错误的。 如果感觉不完整,修复方法通常是更好的间距、更好的对比度或更好的排版——不是另一个渐变、另一个动画或另一个区块。
Pre-Delivery Checklist
交付前检查清单
Run every item. Each must pass mechanically — no subjective judgment.
运行每一项。每一项都必须通过机械检查——不要主观判断。
Design Dials & Design Read
Design Dials & Design Read
- Design Dials line is present (Surface + Accent + Typography + Aesthetic Family indices and choices)
- Design Read line is present (page type · audience · atmosphere · aesthetic family · surface)
- Surface character matches the dialed direction (light/dark/tinted as specified)
- Accent hue matches the dialed hue family
- Font matches the dialed typography mood
- Aesthetic Family influence is visible in layout style and visual language
- 存在Design Dials行(Surface + Accent + Typography + Aesthetic Family索引和选择)
- 存在Design Read行(页面类型 · 受众 · 氛围 · 美学流派 · 背景)
- 背景特征与拨盘方向匹配(指定的浅色/深色/tinted)
- 强调色色调与拨盘色调类别匹配
- 字体与拨盘排版风格匹配
- 美学流派的影响在布局风格和视觉语言中可见
Scene Sentence (dark/tinted surfaces only)
Scene Sentence(仅深色/tinted背景)
- Scene Sentence is present (for Surface indices 5 or 6)
- Scene is NOT "a developer's monitor in a dark room" or equivalent generic scene
- Dark surface tint matches the scene environment (not default blue-black)
- 存在Scene Sentence(Surface索引5或6时)
- Scene不是“黑暗房间里的开发者显示器”或类似通用场景
- 深色背景色调与场景环境匹配(不是默认蓝黑色)
Typography
排版
- Font loaded via Google Fonts (or CDN) with 2+ weights
- Primary font matches the dialed typography mood
- Primary font is NOT Inter / Roboto / Arial / Open Sans / Helvetica / Space Grotesk / DM Sans / Plus Jakarta Sans / Manrope
- Body text ≥ 16px with line-height 1.5-1.6
- Headings use for responsive sizing
clamp() - Max 2 font families used
- 通过Google Fonts(或CDN)加载字体,带2+字重
- 主字体与拨盘排版风格匹配
- 主字体不是Inter / Roboto / Arial / Open Sans / Helvetica / Space Grotesk / DM Sans / Plus Jakarta Sans / Manrope
- 正文文本≥16px,行高1.5-1.6
- 标题使用实现响应式大小
clamp() - 最多使用2种字体家族
Color & Surface
颜色与背景
- All colors defined as CSS custom properties in
:root - Custom property names are semantic (not )
--light-gray - Accent color is not generic blue () or AI purple (
#3b82f6,#8b5cf6,#6366f1)#a855f7 - Background is not cream/beige/sand (,
#f5f1ea,#f7f5f1, etc.) unless Design Read demands it#fbf8f1 - Background is not blue-black (,
#0a0e1a,#0d1117,#0f172a) — verify hex value#111827 - Accent is not brass/clay/oxblood (,
#b08947,#b6553a) unless Design Read demands it#9a2436 - Body text contrast ≥ 4.5:1 verified
- Large text contrast ≥ 3:1 verified
- CTA button text/background contrast ≥ 4.5:1
- 所有颜色在中定义为CSS自定义属性
:root - 自定义属性名称是语义化的(不是)
--light-gray - 强调色不是通用蓝色()或AI紫色(
#3b82f6、#8b5cf6、#6366f1)#a855f7 - 背景不是奶油色/米色/沙色(、
#f5f1ea、#f7f5f1等),除非Design Read要求#fbf8f1 - 背景不是蓝黑色(、
#0a0e1a、#0d1117、#0f172a)——验证十六进制值#111827 - 强调色不是黄铜/黏土/牛血色(、
#b08947、#b6553a),除非Design Read要求#9a2436 - 正文文本对比度≥4.5:1已验证
- 大文本对比度≥3:1已验证
- CTA按钮文本/背景对比度≥4.5:1
Layout
布局
- No two consecutive sections share the same layout family
- Eyebrow count ≤ ceil(sectionCount / 3)
- No more than 2 consecutive zigzag alternations
- Hero fits viewport at 768px height without scrolling to see CTA
- Hero has ≤ 4 text elements in its stack
- Container max-width is set and content is centered
- 连续两个区块不使用相同布局类型
- 眉题数量≤ceil(区块数 / 3)
- 连续交替布局不超过2个
- Hero在768px高度下适配视口,无需滚动即可看到CTA
- Hero堆叠中≤4个文本元素
- 设置了容器max-width,内容居中
Copy
文案
- Zero em-dashes () in any visible text
— - Zero marketing buzzwords in headings
- No aphoristic parallel sentence structures
- No numbered section markers (unless genuinely sequential)
- No decoration text strips or meaningless marquees (e.g., "BRAND · MOTION · SPATIAL")
- No version labels in hero (e.g., "v2.0", "Beta") unless brief explicitly demands it
- No scroll cues (e.g., "Scroll ↓", arrow-down indicators)
- Every heading says something specific (not a vague platitude)
- 任何可见文本中无破折号()
— - 标题中无营销buzzwords
- 无格言式平行句子结构
- 无编号区块标记(除非确实是顺序的)
- 无装饰文本条或无意义跑马灯(例如“BRAND · MOTION · SPATIAL”)
- Hero中无版本标签(例如“v2.0”“Beta”),除非brief明确要求
- 无滚动提示(例如“Scroll ↓”、向下箭头指示器)
- 每个标题都有具体内容(不是模糊的陈词滥调)
CTA & Buttons
CTA & 按钮
- No two CTAs share the same intent text
- CTA text does not wrap to two lines
- Only one primary button visible per viewport
- All buttons have hover + active states
- 没有两个CTA使用相同的意图文本
- CTA文本不换行到两行
- 每个视口仅可见一个主要按钮
- 所有按钮都有悬停+激活状态
Claude-Specific Defects
Claude特定缺陷
- No border + box-shadow combo on the same element (choose one)
- No border-radius > 16px on cards (pill shapes only for tags/badges/buttons)
- No hand-drawn SVG illustrations
- No repeating-linear-gradient stripe backgrounds
- No gradient text ()
background-clip: text - Dark surface is NOT in the blue-black range (Scene Sentence must anchor the tint)
#0a-#0f
- 同一元素上无border + box-shadow组合(选其一)
- 卡片无border-radius >16px(药丸形状仅用于标签/徽章/按钮)
- 无手绘SVG插图
- 无repeating-linear-gradient条纹背景
- 无渐变文本()
background-clip: text - 深色背景不在蓝黑色范围内(Scene Sentence必须锚定色调)
#0a-#0f
Technical
技术
- media query present
prefers-reduced-motion - Entrance animation strategy present (scroll reveal / page-load stagger / state-driven — one of three)
- No anywhere
transition: all - No easing on UI elements
linear - No (use
100vh)100dvh - No horizontal scroll at 375px width
- All images have text (decorative images use
alt)alt="" - Focus states visible for keyboard navigation
- No div-based fake screenshots or browser chrome
- 存在媒体查询
prefers-reduced-motion - 存在入场动画策略(滚动显示 / 页面加载 stagger / 状态驱动——三者之一)
- 任何地方都无
transition: all - UI元素无缓动
linear - 无(使用
100vh)100dvh - 375px宽度下无水平滚动
- 所有图像都有文本(装饰性图像使用
alt)alt="" - 键盘导航的焦点状态可见
- 无基于div的假截图或浏览器边框
Theme Toggle
主题切换器
- Light/dark theme toggle button is present (sun/moon icon in header/nav)
- All colors use CSS custom properties (no hardcoded hex in component styles)
- selector defines dark theme values
[data-theme="dark"] - detected for initial theme if no stored preference
prefers-color-scheme: dark - Theme preference stored in
localStorage - Both light and dark themes have verified contrast ratios (≥ 4.5:1 body text)
- Dark theme is NOT just "inverted colors" — it has its own designed surface hierarchy
- 存在浅色/深色主题切换按钮(页眉/导航中的太阳/月亮图标)
- 所有颜色使用CSS自定义属性(组件样式中无硬编码十六进制值)
- 选择器定义了深色主题值
[data-theme="dark"] - 如果没有存储偏好,检测作为初始主题
prefers-color-scheme: dark - 主题偏好存储在中
localStorage - 浅色和深色主题都已验证对比度(正文文本≥4.5:1)
- 深色主题不是“反转颜色”——它有自己设计的背景层级
Accessibility
无障碍
- Heading hierarchy is sequential (h1 → h2 → h3, no skipping levels)
- One per page
h1 - Icon-only buttons have
aria-label - Form inputs have associated elements
<label> - Color is never the only indicator (always paired with icon/text/pattern)
- Interactive elements are reachable via keyboard (tab order matches visual order)
- Touch targets ≥ 44×44px on mobile
- 标题层级是连续的(h1 → h2 → h3,不跳过层级)
- 每页一个
h1 - 仅图标按钮有
aria-label - 表单输入有相关联的元素
<label> - 颜色永远不是唯一的指示器(始终搭配图标/文本/图案)
- 交互元素可通过键盘访问(Tab顺序匹配视觉顺序)
- 移动端触摸目标≥44×44px
Forms & Interaction (if applicable)
表单与交互(如适用)
- Every input has a visible label (not placeholder-only)
- Error messages appear below the related field
- Required fields are marked
- Disabled elements have reduced opacity +
cursor: not-allowed - All clickable elements have visible hover state
- Buttons have active/press state ()
scale(0.97-0.98)
- 每个输入都有可见标签(不是仅占位符)
- 错误消息显示在相关字段下方
- 必填字段已标记
- 禁用元素有降低的透明度 +
cursor: not-allowed - 所有可点击元素都有可见悬停状态
- 按钮有激活/按下状态()
scale(0.97-0.98)
Anti-Slop (Layer 2)
反劣质产物(第2层)
- Design follows the dialed directions — not your "safe default"
- Aesthetic family cannot be guessed from page type alone (e.g., crypto ≠ always dark)
- Design does not clearly belong to one recognizable "AI aesthetic school" (the Linear clone, the Vercel look, etc.)
- Surface is NOT dark-blue-black (range with blue hue) unless the dial explicitly selected it
#07-#0f - Font is NOT Inter, Plus Jakarta Sans, Space Grotesk, DM Sans, or Manrope
- 设计遵循拨盘方向——不是你的“安全默认值”
- 无法仅从页面类型猜出美学流派(例如加密≠总是深色)
- 设计明显不属于某一可识别的“AI美学流派”(Linear克隆、Vercel风格等)
- 背景不是深蓝黑色(范围带蓝色调),除非拨盘明确选择
#07-#0f - 字体不是Inter、Plus Jakarta Sans、Space Grotesk、DM Sans或Manrope