design-taste-frontend
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesetasteskill: Anti-Slop Frontend Skill
品味技能:反模板化前端技能
Landing pages, portfolios, and redesigns. Not dashboards, not data tables, not multi-step product UI. Every rule below is contextual. None of it fires automatically. First read the brief, then pull only what fits.
适用于着陆页、作品集和重设计场景。不适用于仪表盘、数据表、多步骤产品UI。 以下所有规则均为上下文相关,不会自动触发。先阅读需求brief,再选用符合场景的规则。
0. BRIEF INFERENCE (Read the Room Before Anything Else)
0. 需求推断(先读懂需求场景)
Before touching code or tweaking dials, infer what the user actually wants. Most LLM design output is bad because the model jumps to a default aesthetic instead of reading the room.
在编写代码或调整参数之前,先推断用户的真实需求。大多数LLM生成的设计效果不佳,是因为模型直接跳转到默认审美,而没有读懂需求场景。
0.A Read these signals first
0.A 首先读取这些信号
- Page kind - landing (SaaS / consumer / agency / event), portfolio (dev / designer / creative studio), redesign (preserve vs overhaul), editorial / blog.
- Vibe words the user used - "minimalist", "calm", "Linear-style", "Awwwards", "brutalist", "premium consumer", "Apple-y", "playful", "serious B2B", "editorial", "agency-y", "glassy", "dark tech".
- Reference signals - URLs they linked, screenshots they pasted, products they named, brands they're competing with.
- Audience - B2B procurement panel vs. design-conscious consumer vs. recruiter scanning a portfolio. The audience picks the aesthetic, not your taste.
- Brand assets that already exist - logo, color, type, photography. For redesigns, these are starting material, not optional input (see Section 11).
- Quiet constraints - accessibility-first audiences, public-sector, regulated industries, trust-first commerce, kids' products. These constraints OVERRIDE aesthetic preference.
- 页面类型 - 着陆页(SaaS/消费级/代理机构/活动)、作品集(开发者/设计师/创意工作室)、重设计(保留风格vs彻底改版)、社论/博客。
- 用户使用的风格词汇 - "极简主义"、"沉稳"、"Linear风格"、"Awwwards级"、"粗野主义"、"高端消费级"、"苹果风"、"活泼"、"严肃B2B"、"社论风"、"代理机构风"、"玻璃态"、"暗黑科技风"。
- 参考信号 - 用户链接的URL、粘贴的截图、提及的产品、竞品品牌。
- 目标受众 - B2B采购团队vs注重设计的消费者vs浏览作品集的招聘人员。受众决定审美,而非你的个人喜好。
- 已有的品牌资产 - Logo、配色、字体、摄影素材。对于重设计,这些是起始素材,而非可选输入(见第11节)。
- 隐性约束 - 优先考虑无障碍的受众、公共部门、受监管行业、信任优先的电商、儿童产品。这些约束优先级高于审美偏好。
0.B Output a one-line "Design Read" before generating
0.B 生成前输出一行「设计解读」
Before any code, state in one line: "Reading this as: <page kind> for <audience>, with a <vibe> language, leaning toward <design system or aesthetic family>."
Example reads:
- "Reading this as: B2B SaaS landing for technical buyers, with a Linear-style minimalist language, leaning toward Tailwind utilities + Geist + restrained motion."
- "Reading this as: solo designer portfolio for hiring managers, with an editorial / kinetic-type language, leaning toward native CSS + scroll-driven animation + custom typography."
- "Reading this as: redesign of a public-sector service site, with a trust-first language, leaning toward GOV.UK Frontend or USWDS."
在编写任何代码之前,用一句话声明:「解读为:<页面类型>,面向<受众>,采用<风格>语言,倾向于<设计系统或审美体系>。」
示例解读:
- 「解读为:面向技术买家的B2B SaaS着陆页,采用Linear风格的极简语言,倾向于Tailwind工具类 + Geist +克制的动效。」
- 「解读为:面向招聘经理的独立设计师作品集,采用社论/动态字体语言,倾向于原生CSS + 滚动驱动动画 + 自定义排版。」
- 「解读为:公共部门服务网站的重设计,采用信任优先的语言,倾向于GOV.UK Frontend或USWDS。」
0.C If the brief is ambiguous, ask one question, do not guess
0.C 若需求模糊,只提一个问题,不要猜测
Ask exactly one clarifying question - never a multi-question dump - and only when the design read genuinely diverges. Example: "Should this feel closer to Linear-clean or Awwwards-experimental?"
If you can confidently infer from context, do not ask. Just declare the design read and proceed.
只提一个澄清问题——绝不要一次性提多个问题——仅当设计解读存在明显分歧时提问。示例:「这个设计应该更贴近Linear的简洁风格还是Awwwards的实验风格?」
如果能从上下文自信推断,不要提问,直接声明设计解读并继续。
0.D Anti-Default Discipline
0.D 反默认原则
Do not default to: AI-purple gradients, centered hero over dark mesh, three equal feature cards, generic glassmorphism on everything, infinite-loop micro-animations everywhere, Inter + slate-900. These are the LLM defaults. Reach past them deliberately based on the design read.
不要默认使用:AI紫色渐变、深色网格背景上的居中Hero、三个均等的功能卡片、全局通用玻璃态、随处可见的无限循环微动画、Inter字体 + slate-900配色。这些是LLM的默认选项,要根据设计解读刻意避开。
1. THE THREE DIALS (Core Configuration)
1. 三大调节参数(核心配置)
After the design read, set three dials. Every layout, motion, and density decision below is gated by these.
- - 1 = Perfect Symmetry, 10 = Artsy Chaos
DESIGN_VARIANCE: 8 - - 1 = Static, 10 = Cinematic / Physics
MOTION_INTENSITY: 6 - - 1 = Art Gallery / Airy, 10 = Cockpit / Packed Data
VISUAL_DENSITY: 4
Baseline: . Use these unless the design read overrides them. Do not ask the user to edit this file - overrides happen conversationally.
8 / 6 / 4完成设计解读后,设置三个调节参数。以下所有布局、动效、密度决策均受这些参数控制。
- - 1 = 完美对称,10 = 艺术化混沌
DESIGN_VARIANCE: 8 - - 1 = 静态,10 = 电影级/物理动效
MOTION_INTENSITY: 6 - - 1 = 艺术画廊/宽松,10 = 驾驶舱/密集数据
VISUAL_DENSITY: 4
基准值: 。除非设计解读覆盖,否则使用这些值。不要让用户编辑此文件——通过对话调整参数。
8 / 6 / 41.A Dial Inference (design read → dial values)
1.A 参数推断(设计解读 → 参数值)
| Signal | VARIANCE | MOTION | DENSITY |
|---|---|---|---|
| "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 |
| "redesign - preserve" | match existing | +1 | match existing |
| "redesign - overhaul" | +2 | +2 | match existing |
| 信号 | 设计方差 | 动效强度 | 视觉密度 |
|---|---|---|---|
| "极简/简洁/沉稳/社论/Linear风格" | 5-6 | 3-4 | 2-3 |
| "高端消费级/苹果风/奢华/品牌向" | 7-8 | 5-7 | 3-4 |
| "活泼/大胆/Dribbble/Awwwards/实验/代理机构" | 9-10 | 8-10 | 3-4 |
| "着陆页/作品集/营销站点(默认)" | 7-9 | 6-8 | 3-5 |
| "信任优先/公共部门/受监管/无障碍优先" | 3-4 | 2-3 | 4-5 |
| "重设计 - 保留风格" | 匹配现有值 | +1 | 匹配现有值 |
| "重设计 - 彻底改版" | +2 | +2 | 匹配现有值 |
1.B Use-Case Presets
1.B 场景预设
| Use case | VARIANCE | MOTION | DENSITY |
|---|---|---|---|
| Landing (SaaS, mainstream) | 7 | 6 | 4 |
| Landing (Agency / creative) | 9 | 8 | 3 |
| Landing (Premium consumer) | 7 | 6 | 3 |
| Portfolio (Designer / studio) | 8 | 7 | 3 |
| Portfolio (Developer) | 6 | 5 | 4 |
| Editorial / Blog | 6 | 4 | 3 |
| Public-sector service | 3 | 2 | 5 |
| Redesign - preserve | match | match+1 | match |
| Redesign - overhaul | +2 | +2 | match |
| 场景 | 设计方差 | 动效强度 | 视觉密度 |
|---|---|---|---|
| 着陆页(SaaS,主流) | 7 | 6 | 4 |
| 着陆页(代理机构/创意) | 9 | 8 | 3 |
| 着陆页(高端消费级) | 7 | 6 | 3 |
| 作品集(设计师/工作室) | 8 | 7 | 3 |
| 作品集(开发者) | 6 | 5 | 4 |
| 社论/博客 | 6 | 4 | 3 |
| 公共部门服务 | 3 | 2 | 5 |
| 重设计 - 保留风格 | 匹配现有值 | 匹配值+1 | 匹配现有值 |
| 重设计 - 彻底改版 | +2 | +2 | 匹配现有值 |
1.C How the Dials Drive Output
1.C 参数如何驱动输出
Use these (or user-overridden values) as global variables. Cross-references throughout this document refer to these exact variable names - never invent aliases like or .
LAYOUT_VARIANCEANIM_LEVEL将这些值(或用户调整后的值)作为全局变量使用。本文档中所有交叉引用均指向这些精确变量名——绝不要发明别名,如或。
LAYOUT_VARIANCEANIM_LEVEL2. BRIEF → DESIGN SYSTEM MAP
2. 需求 → 设计系统映射
Once you have the design read (Section 0) and dials (Section 1), pick the right foundation. Do not invent CSS for things that have an official package. Do not pretend an aesthetic trend is an official system.
完成设计解读(第0节)和参数设置(第1节)后,选择合适的基础框架。不要为已有官方包的功能自行编写CSS,不要将审美趋势伪装成官方系统。
2.A When to reach for a real design system (use official packages)
2.A 何时选用真实设计系统(使用官方包)
| Brief reads as… | Reach for | Why |
|---|---|---|
| Microsoft / enterprise SaaS / dashboards | | Official Fluent UI, Microsoft tokens, accessibility done |
| Google-ish UI, Material-flavored product | | Official, theme-able via Material Theming |
| IBM-style B2B / enterprise analytics | | Official Carbon, mature data-density patterns |
| Shopify app surfaces | | Required for Shopify admin UI |
| Atlassian / Jira-style product | | Official Atlassian DS |
| GitHub-style devtool / community page | | Official Primer; Brand variant for marketing |
| Public-sector UK service | | Legally / regulatorily expected |
| US public-sector / trust-first | | Same |
| Fast local-business / agency MVP | Bootstrap 5.3 | Boring, fast, works |
| Modern accessible React foundation | | Primitives + polished theme |
| Modern SaaS where you own the components | shadcn/ui ( | You own the code, easy to customise; never ship default state |
| Tailwind-based modern SaaS / AI marketing | Tailwind v4 utilities + | Default for indie + small team builds |
Honesty rule: if the brief reads as one of the systems above, install and use the official package. Do not recreate its CSS by hand. Do not import a system's tokens but then override 90% of them.
One system per project. Do not mix Fluent React with Carbon in the same tree. Do not import shadcn/ui components into a Material 3 app.
| 需求解读为… | 选用 | 原因 |
|---|---|---|
| 微软/企业级SaaS/仪表盘 | | 官方Fluent UI,微软设计令牌,无障碍已实现 |
| 谷歌风格UI、Material风格产品 | | 官方支持,可通过Material主题定制 |
| IBM风格B2B/企业级分析 | | 官方Carbon,成熟的数据密度模式 |
| Shopify应用界面 | | Shopify管理UI必备 |
| Atlassian/Jira风格产品 | | 官方Atlassian设计系统 |
| GitHub风格开发工具/社区页面 | | 官方Primer;品牌变体用于营销场景 |
| 英国公共部门服务 | | 符合法律/监管要求 |
| 美国公共部门/信任优先 | | 同上 |
| 快速本地业务/代理机构MVP | Bootstrap 5.3 | 稳定、快速、实用 |
| 现代无障碍React基础框架 | | 基础组件 + 精致主题 |
| 自主掌控组件的现代SaaS | shadcn/ui ( | 自主掌控代码,易于定制;绝不交付默认状态 |
| 基于Tailwind的现代SaaS/AI营销 | Tailwind v4工具类 + | 独立开发者和小团队构建的默认选择 |
诚信规则: 如果需求解读符合上述某一系统,安装并使用官方包。不要手动复刻其CSS,不要导入系统令牌后又覆盖90%的样式。
每个项目只用一个系统。不要在同一项目中混合使用Fluent React和Carbon,不要在Material 3应用中导入shadcn/ui组件。
2.B When the brief is an aesthetic, not a system
2.B 当需求是审美风格而非特定系统时
For these directions, there is no single official package. Build with native CSS + Tailwind + a maintained component library. Be honest in code comments about what is borrowed inspiration vs. official material.
| Aesthetic | Honest implementation |
|---|---|
| Glassmorphism / "frosted glass" | |
| Bento (Apple-style tile grids) | CSS Grid with mixed cell sizes. No single library owns this. |
| Brutalism | Native CSS, monospace, raw borders. No library. |
| Editorial / magazine | Serif type, asymmetric grid, generous whitespace. No library. |
| Dark tech / hacker | Mono + accent neon, terminal motifs. No library. |
| Aurora / mesh gradients | SVG or layered radial gradients. No library. |
| Kinetic typography | Native CSS animations, scroll-driven animations, GSAP for hijacks. No library. |
| Apple Liquid Glass | Apple documents this for Apple platforms only. There is no official |
对于这些方向,没有单一官方包。使用原生CSS + Tailwind + 维护良好的组件库构建。在代码注释中明确说明哪些是借鉴的灵感,哪些是官方素材。
| 审美风格 | 诚信实现方式 |
|---|---|
| 玻璃态/「毛玻璃」 | |
| Bento(苹果风格瓷砖网格) | 单元格大小混合的CSS Grid。没有单一库独占此模式。 |
| 粗野主义 | 原生CSS、等宽字体、原生边框。无需库。 |
| 社论/杂志风 | 衬线字体、不对称网格、充足留白。无需库。 |
| 暗黑科技/黑客风 | 单色 + 霓虹强调色、终端元素。无需库。 |
| 极光/网格渐变 | SVG或分层径向渐变。无需库。 |
| 动态排版 | 原生CSS动画、滚动驱动动画、GSAP用于自定义滚动。无需库。 |
| 苹果液态玻璃 | 苹果仅为苹果平台文档化此风格。没有官方的 |
3. DEFAULT ARCHITECTURE & CONVENTIONS
3. 默认架构与约定
Unless the design read picks a real design system (Section 2.A), these are the defaults:
除非设计解读选用真实设计系统(第2.A节),否则使用以下默认设置:
3.A Stack
3.A 技术栈
- Framework: React or Next.js. Default to Server Components (RSC).
- RSC SAFETY: Global state works ONLY in Client Components. In Next.js, wrap providers in a component.
"use client" - INTERACTIVITY ISOLATION: Any component using Motion, scroll listeners, or pointer physics MUST be an isolated leaf with at the top. Server Components render static layouts only.
'use client'
- RSC SAFETY: Global state works ONLY in Client Components. In Next.js, wrap providers in a
- Styling: Tailwind v4 (default). Tailwind v3 only if the existing project demands it.
- For v4: do NOT use plugin in
tailwindcss. Usepostcss.config.jsor the Vite plugin.@tailwindcss/postcss
- For v4: do NOT use
- Animation: Motion (the library formerly known as Framer Motion). Import from (
motion/react). Theimport { motion } from "motion/react"package still works as a legacy alias - preferframer-motionin new code.motion/react - Fonts: Always use (Next.js) or self-host with
next/font+@font-face. Never link Google Fonts viafont-display: swapin production.<link>
- 框架: React或Next.js。默认使用Server Components(RSC)。
- RSC安全: 全局状态仅在Client Components中生效。在Next.js中,将提供者包裹在组件中。
"use client" - 交互隔离: 任何使用Motion、滚动监听或指针物理效果的组件必须是独立的叶子组件,并在顶部添加。Server Components仅渲染静态布局。
'use client'
- RSC安全: 全局状态仅在Client Components中生效。在Next.js中,将提供者包裹在
- 样式: Tailwind v4(默认)。仅当现有项目要求时使用Tailwind v3。
- 对于v4:不要在中使用
postcss.config.js插件。使用tailwindcss或Vite插件。@tailwindcss/postcss
- 对于v4:不要在
- 动画: Motion(原Framer Motion库)。从导入(
motion/react)。import { motion } from "motion/react"包仍可作为别名使用——新项目中优先使用framer-motion。motion/react - 字体: 始终使用(Next.js)或通过
next/font+@font-face自托管。生产环境中绝不通过font-display: swap引入Google Fonts。<link>
3.B State
3.B 状态管理
- Local /
useStatefor isolated UI.useReducer - Global state ONLY for deep prop-drilling avoidance - Zustand, Jotai, or React context.
- NEVER use to track continuous values driven by user input (mouse position, scroll progress, pointer physics, magnetic hover). Use Motion's
useState/useMotionValue/useTransform.useScrollre-renders the React tree on every change and collapses on mobile.useState
- 局部/
useState用于隔离UI状态。useReducer - 全局状态仅用于避免深层属性透传——使用Zustand、Jotai或React context。
- 绝不使用跟踪由用户输入驱动的连续值(鼠标位置、滚动进度、指针物理效果、磁吸悬停)。使用Motion的
useState/useMotionValue/useTransform。useScroll会在每次变化时重新渲染React树,在移动端会导致卡顿。useState
3.C Icons
3.C 图标
- Allowed libraries (priority order): ,
@phosphor-icons/react,hugeicons-react,@radix-ui/react-icons.@tabler/icons-react - Discouraged: . Acceptable only when the user explicitly asks for it or the project already depends on it.
lucide-react - NEVER hand-roll SVG icons. If a glyph is missing, install a second library or compose from primitives - do not draw icon paths from scratch.
- One family per project. Do not mix Phosphor with Lucide in the same component tree.
- Standardize globally (e.g.
strokeWidthor1.5).2.0
- 允许的库(优先级顺序): 、
@phosphor-icons/react、hugeicons-react、@radix-ui/react-icons。@tabler/icons-react - 不推荐: 。仅当用户明确要求或项目已依赖时使用。
lucide-react - 绝不手动绘制SVG图标。如果缺少某个图标,安装第二个库或用基础元素组合——不要从头绘制图标路径。
- 每个项目只用一个图标家族。不要在同一组件树中混合使用Phosphor和Lucide。
- 全局标准化(例如
strokeWidth或1.5)。2.0
3.D Emoji Policy
3.D Emoji规则
Discouraged by default in code, markup, and visible text. Replace symbols with icon-library glyphs. Override: allow emojis only when the user explicitly asks for a playful / chat-style / social-native vibe - and even then use them sparingly with intent.
默认不鼓励在代码、标记和可见文本中使用Emoji。用图标库的图标替换符号。例外: 仅当用户明确要求活泼/聊天/社交原生风格时允许使用,且需谨慎、有意图地使用。
3.E Responsiveness & Layout Mechanics
3.E 响应式与布局机制
- Standardize breakpoints (,
sm 640,md 768,lg 1024,xl 1280).2xl 1536 - Contain page layouts using or
max-w-[1400px] mx-auto.max-w-7xl - Viewport Stability: NEVER use for full-height Hero sections. ALWAYS use
h-screento prevent layout jumping on mobile (iOS Safari address bar).min-h-[100dvh] - Grid over Flex-Math: NEVER use complex flexbox percentage math (). ALWAYS use CSS Grid (
w-[calc(33%-1rem)]).grid grid-cols-1 md:grid-cols-3 gap-6
- 标准化断点(、
sm 640、md 768、lg 1024、xl 1280)。2xl 1536 - 使用或
max-w-[1400px] mx-auto约束页面布局。max-w-7xl - 视口稳定性: 绝不使用实现全屏Hero区域。始终使用
h-screen,避免移动端布局跳动(iOS Safari地址栏问题)。min-h-[100dvh] - 优先使用Grid而非Flex计算: 绝不使用复杂的flexbox百分比计算()。始终使用CSS Grid(
w-[calc(33%-1rem)])。grid grid-cols-1 md:grid-cols-3 gap-6
3.F Dependency Verification (mandatory)
3.F 依赖验证(强制要求)
Before importing ANY 3rd-party library, check . If the package is missing, output the install command first. Never assume a library exists.
package.json在导入任何第三方库之前,检查。如果包不存在,先输出安装命令。绝不假设库已存在。
package.json4. DESIGN ENGINEERING DIRECTIVES (Bias Correction)
4. 设计工程指令(偏差修正)
LLMs default to clichés. Override these defaults proactively. Each rule has a context-aware override path.
LLM默认会使用陈词滥调。需主动覆盖这些默认行为。每条规则都有上下文相关的例外路径。
4.1 Typography
4.1 排版
-
Display / Headlines: Default.
text-4xl md:text-6xl tracking-tighter leading-none -
Body / Paragraphs: Default.
text-base text-gray-600 leading-relaxed max-w-[65ch] -
Sans font choice:
- Discouraged as default: . Pick
Inter,Geist,Outfit,Cabinet Grotesk, or a brand-appropriate serif first.Satoshi - Override: Inter is acceptable when the user explicitly asks for a neutral / standard / Linear-style feel, or when the brief is a public-sector / accessibility-first site.
- Discouraged as default:
-
Pairings to know:+
Geist,Geist Mono+Satoshi,JetBrains Mono+Cabinet Grotesk,Inter Tight+GT America.IBM Plex Mono -
SERIF DISCIPLINE (VERY DISCOURAGED AS DEFAULT):
- Serif is very discouraged as the default font for any project. "It feels creative / premium / editorial" is NOT a reason to reach for serif. The agent's default mental model that "creative brief = serif" is the single most-tested AI tell in production rounds.
- Serif is only acceptable when ONE of these is explicitly true:
- The brand brief literally names a serif font, OR
- The aesthetic family is genuinely editorial / luxury / publication / manuscript / heritage / vintage AND you can articulate why this specific serif fits this specific brand
- For everything else (creative agency, design studio, modern brand, premium consumer, portfolio, lifestyle), default sans-serif display (Geist Display, ABC Diatype, Söhne Breit, Cabinet Grotesk Display, Migra Sans, GT Walsheim, Inter Display, PP Neue Montreal). Sans display fonts are not "boring" — they are the default for the same reason black is the default in fashion.
- EMPHASIS RULE (related): When you want to emphasize a word within a headline (the kinetic "and design" type move), use italic or bold of the SAME font. Do NOT inject a random serif word into a sans headline (or vice versa) just to add visual interest. Mixed-family emphasis is amateur. Italic/bold emphasis in the same family is the right move.
spatial - Specifically BANNED as defaults: and
Fraunces(the two LLM-favorite display serifs).Instrument_Serif - If a serif is justified (rare, per the above), rotate from this pool, do NOT reuse the same serif across consecutive projects: 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.
-
ITALIC DESCENDER CLEARANCE (mandatory): When italic is used in display type and the word contains a descender letter (),
y g j p qorleading-[1]will clip the descender. Useleading-noneminimum and addleading-[1.1]orpb-1reserve on the wrapping element. Audit every italic word in display headlines before shipping.mb-1
-
标题/大标题: 默认。
text-4xl md:text-6xl tracking-tighter leading-none -
正文/段落: 默认。
text-base text-gray-600 leading-relaxed max-w-[65ch] -
无衬线字体选择:
- 默认不推荐: 。优先选择
Inter、Geist、Outfit、Cabinet Grotesk或品牌适配的衬线字体。Satoshi - 例外: 当用户明确要求中性/标准/Linear风格,或需求是公共部门/无障碍优先站点时,可使用Inter。
- 默认不推荐:
-
推荐搭配:+
Geist、Geist Mono+Satoshi、JetBrains Mono+Cabinet Grotesk、Inter Tight+GT America。IBM Plex Mono -
衬线字体规则(默认强烈不推荐):
- 衬线字体默认强烈不推荐用于任何项目。“它感觉有创意/高端/社论风”不是使用衬线字体的理由。Agent默认认为“创意需求=衬线字体”是生产环境中最容易识别的AI特征。
- 仅当以下任一情况明确成立时,才允许使用衬线字体:
- 品牌brief明确指定衬线字体,OR
- 审美体系确实是社论/奢华/出版物/手稿/传统/复古风格,且你能说明为何此特定衬线字体适合该品牌
- 对于其他所有场景(创意代理、设计工作室、现代品牌、高端消费级、作品集、生活方式),默认使用无衬线标题字体(Geist Display、ABC Diatype、Söhne Breit、Cabinet Grotesk Display、Migra Sans、GT Walsheim、Inter Display、PP Neue Montreal)。无衬线标题字体并不“无聊”——就像黑色是时尚的默认色一样,它们是设计的默认选择。
- 强调规则(相关): 当需要在标题中强调某个词(如动态排版中的“and design”)时,使用同一字体的斜体或粗体。不要为了增加视觉趣味,在无衬线标题中随机插入衬线词(反之亦然)。跨字体家族强调是业余做法。同一字体家族内的斜体/粗体强调才是正确选择。
spatial - 明确禁止作为默认: 和
Fraunces(LLM最爱的两种标题衬线字体)。Instrument_Serif - 若确实需要使用衬线字体(根据上述规则,很少见),从以下库中轮换使用,不要在连续项目中重复使用同一衬线字体: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-1预留空间。交付前检查所有标题中的斜体单词。mb-1
4.2 Color Calibration
4.2 色彩校准
-
Max 1 accent color. Saturation < 80% by default.
-
THE LILA RULE: The "AI Purple / Blue glow" aesthetic is discouraged as a default. No automatic purple button glows, no random neon gradients. Use neutral bases (Zinc / Slate / Stone) with high-contrast singular accents (Emerald, Electric Blue, Deep Rose, Burnt Orange, etc.).
-
Override: if the brand or brief explicitly asks for purple / violet / lila, embrace it. But execute with intent: consistent palette, harmonised neutrals, restrained gradients. Not generic AI gradient slop.
-
One palette per project. Do not fluctuate between warm and cool grays within the same project.
-
COLOR CONSISTENCY LOCK (mandatory): Once an accent color is chosen for a page, it is used on the WHOLE page. A warm-grey site does not suddenly get a blue CTA in section 7. A rose-accented site does not get a teal status badge in the footer. Pick one accent, lock it, audit every component before shipping.
-
PREMIUM-CONSUMER PALETTE BAN (mandatory, second-most-recurring AI-tell):
- For premium-consumer briefs (cookware, wellness, artisan, luxury, heritage craft, DTC home goods, etc.) the LLM default is warm beige/cream + brass/clay/oxblood/ochre + espresso/ink dark text. Concretely banned hex families as default backgrounds and accents:
- Backgrounds: ,
#f5f1ea,#f7f5f1,#fbf8f1,#efeae0,#ece6db,#faf7f1(all "warm paper / cream / chalk / bone")#e8dfcb - Accents: ,
#b08947,#b6553a,#9a2436,#9c6e2a,#bc7c3a(all "brass / clay / oxblood / ochre")#7d5621 - Text: ,
#1a1714,#1a1814(all "espresso / warm near-black")#1b1814
- Backgrounds:
- This palette is BANNED as the default reach for premium-consumer briefs. Every premium-consumer site you have ever shipped uses this exact palette. The brand becomes invisible.
- Default alternatives (rotate, do not reuse):
- Cold Luxury: silver-grey + chrome + smoke (think Tesla, Apple Watch Hermes-without-the-leather)
- Forest: deep green + bone + amber accent (think Filson, Patagonia premium)
- 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 + single saturated pop: off-white + off-black + one bright accent (electric blue, emerald, hot pink, etc.)
- Palette-rotation rule: if the previous premium-consumer project you generated used the beige+brass family, this one MUST use a different family. Do not ship the same warm-craft palette twice in a row.
- Override: the beige+brass+espresso palette is acceptable ONLY when the brand brief explicitly names those colors, or when the brand identity is genuinely vintage / artisan / warm-craft AND you can articulate why this specific palette fits this specific brand. Default-reaching for it because "this is a cookware brief" is banned.
- For premium-consumer briefs (cookware, wellness, artisan, luxury, heritage craft, DTC home goods, etc.) the LLM default is warm beige/cream + brass/clay/oxblood/ochre + espresso/ink dark text. Concretely banned hex families as default backgrounds and accents:
-
最多使用1种强调色。默认饱和度<80%。
-
紫色规则: “AI紫/蓝发光”审美默认不推荐。不要自动添加紫色按钮发光效果,不要使用随机霓虹渐变。使用中性底色(Zinc/Slate/Stone)搭配高对比度的单一强调色(祖母绿、电光蓝、深玫瑰红、焦橙色等)。
-
例外: 如果品牌或需求明确要求紫色/紫罗兰色,可使用,但需有意图地执行:一致的调色板、协调的中性色、克制的渐变。不要使用通用的AI渐变模板。
-
每个项目只用一个调色板。不要在同一项目中混用暖灰和冷灰。
-
色彩一致性锁定(强制要求): 为页面选择强调色后,需在整个页面中使用。暖灰色站点不要在第7节突然出现蓝色CTA,玫瑰色强调的站点不要在页脚出现蓝绿色状态徽章。选择一种强调色,锁定它,交付前检查每个组件。
-
高端消费级调色板禁令(强制要求,第二常见的AI特征):
- 对于高端消费级需求(炊具、健康、手工制品、奢华、传统工艺、DTC家居用品等),LLM默认使用暖米色/奶油色 + 黄铜/黏土/暗红棕/赭石色 + 浓咖啡/墨黑色文本。明确禁止以下十六进制家族作为默认背景和强调色:
- 背景:、
#f5f1ea、#f7f5f1、#fbf8f1、#efeae0、#ece6db、#faf7f1(所有“暖纸/奶油/粉笔/骨色”)#e8dfcb - 强调色:、
#b08947、#b6553a、#9a2436、#9c6e2a、#bc7c3a(所有“黄铜/黏土/暗红棕/赭石色”)#7d5621 - 文本:、
#1a1714、#1a1814(所有“浓咖啡/暖近黑色”)#1b1814
- 背景:
- 此调色板禁止作为高端消费级需求的默认选择。你交付的每个高端消费级站点都使用此精确调色板,会导致品牌失去辨识度。
- 默认替代方案(轮换使用,不要重复):
- 冷奢华: 银灰 + 铬色 + 烟色(参考特斯拉、无皮革版Apple Watch Hermès)
- 森林风: 深绿 + 骨色 + 琥珀色强调(参考Filson、高端Patagonia)
- 黑棕配色: 纯米黑 + 暖棕,高对比度,无米色
- 钴蓝+奶油: 饱和蓝搭配单一中性色,无黄铜色
- 赤陶+石板灰: 暖锈色搭配冷灰色,无黄铜色
- 橄榄+砖红+纸色: 柔和橄榄色搭配砖红色强调
- 纯单色+单一饱和亮点: 米白 + 米黑 + 一个亮色强调(电光蓝、祖母绿、亮粉等)
- 调色板轮换规则: 如果上一个高端消费级项目使用了米色+黄铜色家族,本次必须使用不同的家族。不要连续交付相同的暖工艺调色板。
- 例外: 仅当品牌brief明确指定这些颜色,或品牌定位确实是复古/手工/暖工艺风格且你能说明为何此特定调色板适合该品牌时,才允许使用米色+黄铜+浓咖啡调色板。仅因“这是炊具需求”就默认使用此调色板是禁止的。
- 对于高端消费级需求(炊具、健康、手工制品、奢华、传统工艺、DTC家居用品等),LLM默认使用暖米色/奶油色 + 黄铜/黏土/暗红棕/赭石色 + 浓咖啡/墨黑色文本。明确禁止以下十六进制家族作为默认背景和强调色:
4.3 Layout Diversification
4.3 布局多样化
- ANTI-CENTER BIAS: Centered Hero / H1 sections are avoided when . Force "Split Screen" (50/50), "Left-aligned content / right-aligned asset", "Asymmetric white-space", or scroll-pinned structures.
DESIGN_VARIANCE > 4 - Override: centered hero is OK for editorial / manifesto / launch-announcement briefs where the message itself is the design.
- 反居中偏差: 当时,避免使用居中Hero/H1区域。强制使用“分屏”(50/50)、“左对齐内容/右对齐资产”、“不对称留白”或滚动固定结构。
DESIGN_VARIANCE > 4 - 例外: 对于社论/宣言/发布公告需求,当信息本身就是设计时,居中Hero是可以的。
4.4 Materiality, Shadows, Cards
4.4 材质、阴影、卡片
- Use cards ONLY when elevation communicates real hierarchy. Otherwise group with ,
border-t, or negative space.divide-y - When a shadow is used, tint it to the background hue. No pure-black drop shadows on light backgrounds.
- For : generic card containers are banned. Data metrics breathe in plain layout.
VISUAL_DENSITY > 7 - SHAPE CONSISTENCY LOCK (mandatory): Pick ONE corner-radius scale for the page and stick to it. Options: all-sharp (radius 0), all-soft (radius 12-16px), all-pill (full radius for interactive). Mixed systems are allowed only when there is a documented rule (e.g. "buttons are full-pill, cards are 16px, inputs are 8px") and that rule is followed everywhere. Round buttons in a square layout, or square cards on a pill-button page, is broken design.
- 仅当层级需要通过 elevation 体现时使用卡片。否则使用、
border-t或留白分组。divide-y - 使用阴影时,将阴影色调与背景色相匹配。浅色背景上不要使用纯黑色投影。
- 当时:禁止使用通用卡片容器。数据指标在简洁布局中展示。
VISUAL_DENSITY > 7 - 形状一致性锁定(强制要求): 为页面选择一种圆角比例并坚持使用。选项:全尖锐(半径0)、全柔和(半径12-16px)、全胶囊(交互元素全圆角)。仅当有明确规则(如“按钮是全胶囊,卡片是16px,输入框是8px”)且全局遵循时,才允许混合系统。方形布局中的圆角按钮,或胶囊按钮页面中的方形卡片,都是设计失误。
4.5 Interactive UI States
4.5 交互UI状态
LLMs default to "static successful state only." Always implement full cycles:
- Loading: Skeletal loaders matching the final layout's shape. Avoid generic circular spinners.
- Empty States: Beautifully composed; indicate how to populate.
- Error States: Clear, inline (forms), or contextual (toasts only for transient).
- Tactile Feedback: On , use
:activeor-translate-y-[1px]to simulate a physical push.scale-[0.98] - BUTTON CONTRAST CHECK (mandatory, a11y): Before shipping any button, verify the button text is readable against the button background. White button + white text, CTA with
bg-whitelabel, transparent button against the page background with no border → all banned. Audit every CTA: contrast ratio WCAG AA min (4.5:1 for body, 3:1 for large text 18px+). Same rule applies to ghost buttons over photographic backgrounds (use a backdrop, scrim, or stroke).text-white - CTA BUTTON WRAP BAN (mandatory): Button text MUST fit on one line at desktop. If a label like "VIEW SELECTED WORK" wraps to 2 or 3 lines, the button is broken. Fix by EITHER shortening the label (3 words max for primary CTAs, ideally 1-2) OR widening the button (do not artificially constrain on CTAs). Wrapped CTAs at desktop are a Pre-Flight Fail.
max-width - NO DUPLICATE CTA INTENT (mandatory): Two CTAs with the same intent on one page is a Pre-Flight Fail. Examples of same intent: "Get in touch" + "Contact us" + "Let's talk" + "Start a project" + "Start something" + "Reach out" = all "contact" intent → pick ONE label and use it everywhere on the page (nav, hero, footer). Same for "Try free" + "Get started" + "Sign up free" (all "signup" intent) and "View work" + "See selected work" + "Browse projects" (all "portfolio" intent). One label per intent.
- FORM CONTRAST CHECK (mandatory, a11y): Form inputs, placeholder text, focus rings, helper text, and error text all pass WCAG AA contrast against the section background. Light placeholders on a near-white form, white form on white page section, form labels grayer than 4.5:1 contrast → all banned. Audit every form before shipping.
LLM默认只输出“静态成功状态”。始终实现完整的状态周期:
- 加载状态: 与最终布局形状匹配的骨架加载器。避免使用通用圆形加载器。
- 空状态: 精心设计;说明如何填充内容。
- 错误状态: 清晰、内联(表单)或上下文相关(仅短暂提示使用toast)。
- 触觉反馈: 在状态下,使用
:active或-translate-y-[1px]模拟物理按压效果。scale-[0.98] - 按钮对比度检查(强制要求,无障碍): 交付任何按钮前,验证按钮文本在按钮背景上的可读性。白色按钮+白色文本、CTA搭配
bg-white标签、透明按钮在页面背景上无边框 → 均禁止。检查每个CTA:对比度符合WCAG AA最低要求(正文4.5:1,大文本18px+为3:1)。此规则同样适用于背景照片上的幽灵按钮(使用背景遮罩、蒙层或描边)。text-white - CTA按钮换行禁令(强制要求): 桌面端按钮文本必须在一行内显示。如果“VIEW SELECTED WORK”这样的标签换行成2或3行,按钮设计失误。修复方式:要么缩短标签(主CTA最多3个词,理想为1-2个),要么加宽按钮(不要人为限制CTA的)。桌面端CTA换行属于预发布失败。
max-width - 无重复CTA意图(强制要求): 同一页面上两个意图相同的CTA属于预发布失败。意图相同的示例:“Get in touch” + “Contact us” + “Let's talk” + “Start a project” + “Start something” + “Reach out” = 均为“联系”意图 → 选择一个标签并在页面各处(导航、Hero、页脚)使用。“Try free” + “Get started” + “Sign up free”(均为“注册”意图)和“View work” + “See selected work” + “Browse projects”(均为“作品集”意图)同理。每个意图对应一个标签。
- 表单对比度检查(强制要求,无障碍): 表单输入框、占位符文本、焦点环、辅助文本、错误文本与区域背景的对比度均需通过WCAG AA标准。浅色占位符在近白色表单上、白色表单在白色页面区域、表单标签对比度低于4.5:1 → 均禁止。交付前检查每个表单。
4.6 Data & Form Patterns
4.6 数据与表单模式
- Label ABOVE input. Helper text optional but present in markup. Error text BELOW input. Standard for input blocks.
gap-2 - No placeholder-as-label. Ever.
- 标签位于输入框上方。辅助文本可选但需在标记中存在。错误文本位于输入框下方。输入块默认使用。
gap-2 - 绝不使用占位符作为标签。永远不要。
4.7 Layout Discipline (Hard Rules. Failing any of these is shipping broken work)
4.7 布局规则(硬性规则,违反任何一条均为交付不合格)
- Hero MUST fit in the initial viewport. Headline max 2 lines on desktop, subtext max 20 words AND max 3-4 lines, CTAs visible without scroll. If the copy is too long: reduce font scale OR cut copy. If you cannot describe the value-prop in 20 words of subtext, the value-prop is unclear, not the rule too tight. Never let the hero overflow and force scroll to find the CTA.
- Hero font-scale discipline. Plan font size and image size together. If the hero asset is large and the headline is more than 6 words, do not start at . Default sensible range:
text-7xl/text-8xlfor most heroes;text-4xl md:text-5xl lg:text-6xlonly when the headline is 3-5 words. A 4-line hero headline is always a font-size error, never a copy-length error.text-6xl md:text-7xl - HERO TOP PADDING CAP (mandatory): Hero top padding max (≈6rem) at desktop. More than that means the hero content floats halfway down the viewport and reads as a layout bug, not as intentional space. If your hero needs more breathing room, increase font scale or asset size, not top padding.
pt-24 - HERO STACK DISCIPLINE (max 4 text elements). The hero is a single moment, not a feature list. Allowed text elements, max 4 in total:
- Eyebrow (small uppercase label) OR brand strip OR neither - pick zero or one
- Headline (max 2 lines, see above)
- Subtext (max 20 words, max 4 lines)
- CTAs (1 primary + max 1 secondary)
- BANNED in the hero: tiny tagline below CTAs ("Works with GitHub, GitLab, and self-hosted Git"), trust micro-strip ("Used by engineering teams at..."), pricing teaser ("Free for solo, $10/user for teams"), feature bullet list, social-proof avatar row. All of those move to dedicated sections directly below the hero.
- If you have an eyebrow AND a tagline below CTAs in the same hero, drop the tagline. If you have a brand strip AND a tagline, drop the tagline. One small text element per hero, max.
- "Used by" / "Trusted by" logo wall belongs UNDER the hero, never inside it. The hero is for the value prop and primary CTA. The logo wall is a separate section directly below. Do not stuff trust logos into the same flex row as the hero copy.
- Navigation MUST render on a single line on desktop. If items don't fit at (1024px), condense labels, drop secondary items, or move to a hamburger. A two-line nav at desktop is broken design.
lg - Navigation height cap: 80px max desktop, default 64-72px. No huge "agency" nav bars that eat 15% of the viewport.
- Bento grids MUST have rhythm, not one-sided repetition. Do not stack 6 left-image / right-text rows. Vary the composition: alternate full-width feature rows, asymmetric tile sizes, vertical breaks.
- BENTO CELL COUNT RULE (mandatory): A bento grid has EXACTLY as many cells as you have content for. 3 items → 3 cells (1+2 split, or 2+1, or asymmetric trio). 5 items → 5 cells (2+3, 3+2, hero+4, etc.). If your grid has an empty cell in the middle or at the end, you planned wrong. Re-shape the grid; do not paste a blank tile.
- Section-Layout-Repetition Ban. Once you use a layout family for a section (e.g., 3-column-image-cards, full-width-quote, split-text-image), that family can appear at most ONCE on the page. "Selected commissions" must not look like "What we do." A landing page with 8 sections must use at least 4 different layout families.
- ZIGZAG ALTERNATION CAP (mandatory). Alternating "left-image + right-text" then "left-text + right-image" zigzag layout = banal. Max 2 sections in a row with this image+text-split pattern. The 3rd consecutive image+text split is a Pre-Flight Fail. Break the pattern with a full-width section, a vertical-stack section, a bento grid, a marquee, or a different layout family.
- EYEBROW RESTRAINT (mandatory, the #1 violated rule in production tests). An "eyebrow" is the small uppercase wide-tracking label sitting above a section headline (e.g. ,
FOUR COLORWAYS,SELECTED WORK,THE HARDWARE). Typical CSS signature:Git-native task management,text-[11px] uppercase tracking-[0.18em]. Every AI-built site puts an eyebrow above EVERY section header, producing the same templated rhythm. Hard rule:font-mono text-[10.5px] uppercase tracking-[0.22em]- Maximum 1 eyebrow per 3 sections. Hero counts as 1. So a page with 9 sections may use at most 3 eyebrows total.
- If section A has an eyebrow, the next 2 sections cannot have one.
- Pre-Flight Check is mechanical: count instances of (or similar small-caps mono labels above headlines) across all section components. If count > ceil(sectionCount / 3), the output fails.
uppercase tracking - What to do instead of an eyebrow: drop it entirely. The headline alone is enough. If you need to categorize a section, the section's location on the page already categorizes it; no label needed.
- SPLIT-HEADER BAN (mandatory). The pattern "left big headline + right small explainer paragraph" as a section header (left col-span-7/8, right col-span-4/5 with a small body paragraph floating in the right column) is banned as default. Sections should have ONE focused message. If you genuinely need both a headline and an explainer paragraph, stack them vertically (headline on top, body below, max-width 65ch). Reach for the split-header pattern only when there is a real compositional reason (e.g., the right column carries a visual or interactive element, not just filler text).
- Bento Background Diversity (mandatory). Bento and feature-grid sections cannot be 6 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 (not AI-purple), a pattern, a tinted background. A cream-on-cream bento with only typography inside reads as boring AI default, even when the rest of the page is good.
- Mobile collapse must be explicit per section. For every multi-column layout, declare the fallback in the same component. No "it'll work, Tailwind handles it" assumptions.
< 768px
- Hero必须在初始视口内完整显示。桌面端标题最多2行,副标题最多20个单词且最多3-4行,CTA无需滚动即可看到。如果文案太长:缩小字体比例或删减文案。如果无法用20个单词以内的副标题描述价值主张,说明价值主张不清晰,而非规则太严格。绝不要让Hero溢出并强制用户滚动寻找CTA。
- Hero字体比例规则。同时规划字体大小和图片大小。如果Hero资产很大且标题超过6个词,不要从开始。默认合理范围:大多数Hero使用
text-7xl/text-8xl;仅当标题为3-5个词时使用text-4xl md:text-5xl lg:text-6xl。4行的Hero标题永远是字体大小错误,而非文案长度错误。text-6xl md:text-7xl - Hero顶部内边距上限(强制要求): 桌面端Hero顶部内边距最大为(≈6rem)。超过此值会导致Hero内容漂浮在视口中间,被视为布局bug,而非有意留白。如果Hero需要更多呼吸空间,增大字体比例或资产大小,而非顶部内边距。
pt-24 - Hero内容层级规则(最多4个文本元素)。Hero是一个单一的视觉焦点,而非功能列表。允许的文本元素,最多4个:
- 眉题(小型大写标签)或品牌条,或两者都不选 → 选0或1个
- 标题(最多2行,见上述规则)
- 副标题(最多20个单词,最多4行)
- CTA(1个主CTA + 最多1个次CTA)
- Hero中禁止的元素: CTAs下方的小标语(“Works with GitHub, GitLab, and self-hosted Git”)、信任微条(“Used by engineering teams at...”)、价格预告(“Free for solo, $10/user for teams”)、功能项目符号列表、社交证明头像行。所有这些元素应移至Hero正下方的专门区域。
- 如果Hero中同时有眉题和CTAs下方的标语,删除标语。如果有品牌条和标语,删除标语。每个Hero最多一个小型文本元素。
- “Used by”/“Trusted by” Logo墙必须位于Hero下方,绝不要放在Hero内部。Hero用于展示价值主张和主CTA。Logo墙是Hero正下方的独立区域。不要将信任Logo塞进与Hero文案同一行的flex布局中。
- 导航在桌面端必须显示为单行。如果在(1024px)尺寸下内容放不下,缩短标签、移除次要项或改用汉堡菜单。桌面端两行导航属于设计失误。
lg - 导航高度上限: 桌面端最大80px,默认64-72px。不要使用占据视口15%的巨型“代理机构”导航栏。
- Bento网格必须有节奏,而非单边重复。不要堆叠6行左图/右文的布局。改变布局:交替使用全宽功能行、不对称瓷砖大小、垂直分隔。
- Bento单元格数量规则(强制要求): Bento网格的单元格数量必须与内容数量完全一致。3个内容项→3个单元格(1+2分割、2+1分割或不对称 trio)。5个内容项→5个单元格(2+3、3+2、Hero+4等)。如果网格中间或末尾有空单元格,说明规划失误。重新调整网格形状;不要粘贴空白瓷砖。
- 区域布局重复禁令。一旦为某个区域使用了一种布局类型(如3列图片卡片、全宽引用、分栏图文),该类型在页面中最多出现一次。“Selected commissions”区域不能与“What we do”区域看起来一样。一个有8个区域的着陆页必须使用至少4种不同的布局类型。
- Z字形交替上限(强制要求)。交替使用“左图+右文”然后“左文+右图”的Z字形布局=平庸。连续最多2个区域使用此图文分割模式。第3个连续的图文分割区域属于预发布失败。用全宽区域、垂直堆叠区域、Bento网格、滚动字幕或其他布局类型打破模式。
- 眉题克制(强制要求,生产测试中最常违反的规则)。“眉题”是位于区域标题上方的小型大写宽间距标签(如、
FOUR COLORWAYS、SELECTED WORK、THE HARDWARE)。典型CSS特征:Git-native task management、text-[11px] uppercase tracking-[0.18em]。每个AI构建的站点都会在每个区域标题上方添加眉题,产生相同的模板化节奏。硬性规则:font-mono text-[10.5px] uppercase tracking-[0.22em]- 每3个区域最多1个眉题。Hero算1个区域。因此有9个区域的页面最多使用3个眉题。
- 如果区域A有眉题,接下来2个区域不能有眉题。
- 预发布检查是机械性的: 统计所有区域组件中(或类似小型大写等宽标签位于标题上方)的实例数量。如果数量>ceil(区域数量/3),输出不合格。
uppercase tracking - 替代眉题的方案: 完全删除。仅标题就足够了。如果需要对区域进行分类,区域在页面上的位置已经完成了分类;不需要标签。
- 分栏标题禁令(强制要求)。“左大标题+右小解释段落”作为区域标题的模式(左列占7/8,右列占4/5,小正文段落漂浮在右列)默认禁止。区域应有一个聚焦的信息。如果确实需要标题和解释段落,垂直堆叠(标题在上,正文在下,最大宽度65ch)。仅当有真正的构图需求(如右列承载视觉或交互元素,而非填充文本)时,才使用分栏标题模式。
- Bento背景多样性(强制要求)。Bento和功能网格区域不能是6个白卡白字的卡片。任何多单元格网格中至少2-3个单元格需要真实视觉变化:真实图片、品牌适配的渐变(非AI紫色)、图案、 tinted背景。全奶油色的Bento仅包含排版,即使页面其他部分很好,也会显得是无聊的AI默认产物。
- 移动端折叠必须按区域明确声明。对于每个多列布局,在同一组件中声明的降级方案。不要假设“Tailwind会处理好”。
< 768px
4.8 Image & Visual Asset Strategy
4.8 图片与视觉资产策略
Landing pages and portfolios are visual products. Text-only pages with fake-screenshot divs are slop.
Priority order for visual assets:
- Image-generation tool first. If ANY image-gen tool is available in the environment (, MCP image tool, IDE-integrated gen, OpenAI image tools, etc.) you MUST use it to create section-specific assets: hero photography, product shots, texture backgrounds, mood images. Generate at the right aspect ratio for the section. Do not skip this step because hand-rolled CSS feels faster.
generate_image - Real web images second. When no gen tool is available, use real photography sources. Acceptable defaults:
- for placeholder photography (seed should describe the section, e.g.
https://picsum.photos/seed/{descriptive-seed}/{w}/{h})marrow-cookware-kitchen - Actual stock or brand URLs when the brief provides them
- Open-license sources (Unsplash via direct URL, Pexels) if explicitly allowed
- Last resort: tell the user. If neither is possible, do NOT fill the page with hand-rolled SVG illustrations or div-based "fake screenshots." Instead, leave clearly-labeled placeholder slots () and at the end of the response say: "This page needs real images at: [list of placements]. Please generate or provide them."
<!-- TODO: hero product photo, 1600x1200 -->
Even minimalist sites need real images. A pure-text page is not minimalism. It is incomplete work. Even an editorial Linear-style site needs at least 2-3 real images (hero, one product/lifestyle shot, one supporting image). Generate B&W minimalist photography if the brief is restrained; do not skip images entirely because the dial is low.
Real company logos for social proof. When the brief calls for a "Trusted by / Used by / Customers" logo wall, do NOT default to plain text wordmarks ( styled in a row). Use real SVG logos:
<span>Acme Co</span>- Source: Simple Icons (for any color, or
https://cdn.simpleicons.org/{slug}/ffffffnpm package). Covers most known brands.simple-icons - Alternative: devicon for tech-stack logos (or CDN).
@svgr/cli - Make-up the brand name? Then make-up an SVG mark too. Generate a simple monogram (one letter in a circle, two-letter ligature, abstract glyph) rendered as an inline matching the page style. Plain text wordmarks for invented brand names look generic.
<svg> - Always ensure logos render in both light and dark mode (white-on-dark, black-on-light, or single-color theme variable).
- LOGO-ONLY rule (mandatory): logo wall = logos and nothing else. Do NOT print industry / category labels below each logo (no +
Vercelunderneath, nohosting+Stripe, nopayments+Cloudflare). The logo is the credibility, the label adds nothing the user does not already know. Optional: brand name as alt-text for screen readers, optional link to the brand's site. That is it.infra
Hand-rolled illustrations:
- SVG icons from libraries: fine (see Section 3.C).
- Hand-rolled decorative SVGs (custom illustrations, logos, marks): strongly discouraged, never as default. Acceptable only when:
- The brief explicitly calls for it ("draw me an SVG logo")
- It's a single, simple geometric mark (a square, a circle, a wordmark in display type)
- You're confident in the output quality
Div-based fake screenshots are banned. A "hand-built product preview" rendered with rectangles, fake task lists, fake dashboards, fake terminal windows is a Tell. If you need to show a product:
<div>- Use a real screenshot URL if one exists
- Generate one via image tool
- Use a real component preview (an actual mini-version of the UI inside the page)
- Or skip the preview entirely and use editorial photography
Hero needs a real visual. Text + gradient blob is not a hero - it's a placeholder.
着陆页和作品集是视觉产品。仅包含文本和假截图div的页面是不合格的。
视觉资产优先级顺序:
- 优先使用图像生成工具。如果环境中存在任何图像生成工具(、MCP图像工具、IDE集成生成工具、OpenAI图像工具等),必须使用它创建区域特定的资产:Hero照片、产品图、纹理背景、氛围图。生成符合区域宽高比的图像。不要因为手动编写CSS感觉更快而跳过此步骤。
generate_image - 其次使用真实Web图像。当没有生成工具可用时,使用真实摄影资源。可接受的默认选择:
- 作为占位符照片(种子应描述区域,如
https://picsum.photos/seed/{描述性种子}/{宽}/{高})marrow-cookware-kitchen - 需求提供的实际素材或品牌URL
- 明确允许的开源资源(直接URL的Unsplash、Pexels)
- 最后选择:告知用户。如果以上两种方式都不可行,不要用手动编写的SVG插图或基于div的“假截图”填充页面。相反,留下清晰标记的占位符(),并在响应末尾说明:“此页面需要在以下位置添加真实图片:[位置列表]。请生成或提供这些图片。”
<!-- TODO: hero product photo, 1600x1200 -->
即使极简站点也需要真实图片。纯文本页面不是极简主义,是未完成的工作。即使是社论风格的Linear站点也需要至少2-3张真实图片(Hero、一张产品/生活方式图、一张辅助图片)。如果需求是克制风格,生成黑白极简照片;不要因为参数低就完全跳过图片。
社交证明使用真实公司Logo。当需求要求“Trusted by/Used by/Customers”Logo墙时,不要默认使用纯文本字标(排成一行)。使用真实SVG Logo:
<span>Acme Co</span>- 来源:Simple Icons(可指定任意颜色,或
https://cdn.simpleicons.org/{slug}/ffffffnpm包)。覆盖大多数知名品牌。simple-icons - 替代:devicon用于技术栈Logo(或CDN)。
@svgr/cli - 如果是虚构品牌名称?那么也要虚构SVG标记。生成一个简单的字母组合(圆圈中的单个字母、两个字母的连字、抽象符号),作为内联渲染,匹配页面风格。虚构品牌名称的纯文本字标看起来很通用。
<svg> - 始终确保Logo在浅色和深色模式下都能正常显示(深色背景上白色、浅色背景上黑色,或单色主题变量)。
- 仅Logo规则(强制要求): Logo墙=仅Logo,无其他内容。不要在每个Logo下方打印行业/类别标签(不要在下方添加
Vercel,hosting下方添加Stripe,payments下方添加Cloudflare)。Logo本身就是可信度的体现,标签添加的信息用户已经知道。可选:为屏幕阅读器添加品牌名称作为alt文本,可选链接到品牌站点。仅此而已。infra
手动绘制插图:
- 来自库的SVG图标:可以(见第3.C节)。
- 手动绘制的装饰性SVG(自定义插图、Logo、标记):强烈不推荐,绝不要作为默认选择。仅当以下情况时可接受:
- 需求明确要求(“为我绘制一个SVG Logo”)
- 是单一、简单的几何标记(正方形、圆形、标题字体的字标)
- 你对输出质量有信心
基于div的假截图禁止使用。用矩形、假任务列表、假仪表盘、假终端窗口渲染的“手工产品预览”是AI特征。如果需要展示产品:
<div>- 使用真实截图URL(如果存在)
- 通过图像工具生成
- 使用真实组件预览(页面内的实际迷你版UI)
- 或完全跳过预览,使用社论照片
Hero需要真实视觉元素。文本+渐变 blob不是Hero——是占位符。
4.9 Content Density
4.9 内容密度
Landing pages live on the first impression, not the full read. Cut ruthlessly.
-
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.
-
No data-dump sections. A 20-row publication table, a 30-row award list, a giant pricing matrix on a marketing page = wrong layout. Use:
- Top 3-5 highlights + "View full list" link
- Marquee / carousel for breadth
- Different page entirely if the data is the product
-
Long lists need a different UI component, not a longer list. Defaultwith bullets /
<ul>rows is the lazy choice. If you have > 5 items, reach for one of these instead:divide-y- 2-column split with grouped items
- Card grid with image + label per item
- Tabs / accordion if items are categorisable
- Horizontal scroll-snap pills
- Carousel for breadth-heavy lists (testimonials, logos, capabilities)
- Marquee for "lots-of-things-that-don't-need-individual-attention" A spec sheet with 10 rows + a hairline under every row is the WORST default. Either group rows into 2-3 chunks with sparse dividers, or move to a card-per-spec layout.
-
Spec sheets specifically (the Marrow-cookware pattern). A long product specification table withon every row is the AI default for cookware / hardware / apparel / artisan-goods briefs. Banned. Concrete alternatives:
border-b- 2-col card grid: each spec gets its own card with the spec name, the value (large display number), and a one-line "why it matters" body. Cards arranged 2-col on desktop, 1-col mobile.
- Scroll-snap horizontal pills: each spec is a pill, user can flick through.
- Grouped chunks: group 10 specs into 3 logical clusters (e.g. "Materials", "Cooking", "Warranty"), each cluster gets ONE soft divider and a cluster heading.
- Featured-vs-rest: 3-4 hero specs visualised as large display tiles, the rest collapsed under a "View full specifications" disclosure.
-
COPY SELF-AUDIT (mandatory before ship): Before declaring any task done, re-read every visible string on the page (headlines, subheads, eyebrows, button labels, body copy, captions, alt text, footer text, error messages). Flag any string that is:
- Grammatically broken ("free on its past", "two plans but one is honest", "to put it on the table" out of context)
- Has unclear referents ("we plan to stay that way" without prior context)
- Sounds like AI hallucination (cute-but-wrong wordplay, forced metaphors that don't track, "elegant nothing" phrases)
- Reads like an LLM trying to sound thoughtful (passive-aggressive humility, fake-craftsman labels, mock-poetic micro-meta) Rewrite every flagged string. If unsure whether a string makes sense, replace it with a plain functional sentence. AI-generated cute copy is worse than boring copy.
-
Fake-precise numbers are flagged. Numbers like,
92%,4.1×,48k,5.8 mmeither:13.4 lb- Come from real data (brief, brand guidelines, public metrics) - fine
- Are explicitly labeled as mock (, "example", "sample data") - fine
<!-- mock --> - Are AI-invented spec aesthetics - banned. Don't fake engineering precision the brand doesn't claim.
-
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 unless the brand voice explicitly calls for it.
着陆页依赖第一印象,而非完整阅读。要无情地删减内容。
-
每个区域默认内容结构: 短标题(≤8个词)+ 短副标题(≤25个词)+ 一个视觉资产或一个CTA。更多内容必须由区域的用途证明其合理性。
-
无数据转储区域。营销页面上的20行发布表、30行奖项列表、巨型定价矩阵=错误布局。使用:
- 前3-5个亮点+“查看完整列表”链接
- 滚动字幕/轮播展示广度
- 如果数据是产品本身,使用单独的页面
-
长列表需要不同的UI组件,而非更长的列表。默认的带项目符号/
<ul>行是懒惰的选择。如果有>5个项,改用以下方式之一:divide-y- 2列分割,分组展示项
- 卡片网格,每个项带图片+标签
- 如果项可分类,使用标签页/手风琴
- 水平滚动快照药丸
- 轮播展示广度大的列表( testimonial、Logo、能力)
- 滚动字幕展示“不需要单独关注的大量内容” 带10行+每行下划线的规格表是最差的默认选择。要么将行分组为2-3个块,使用稀疏分隔线,要么改用每个规格一张卡片的布局。
-
专门针对规格表(Marrow炊具模式)。每行带的长产品规格表是AI针对炊具/硬件/服装/手工制品需求的默认选择。禁止使用。具体替代方案:
border-b- 2列卡片网格: 每个规格有自己的卡片,包含规格名称、值(大显示数字)和一行“重要性说明”正文。桌面端2列,移动端1列。
- 滚动快照水平药丸: 每个规格是一个药丸,用户可以滑动浏览。
- 分组块: 将10个规格分为3个逻辑组(如“材质”、“烹饪”、“保修”),每个组有一个软分隔线和组标题。
- 重点vs其余: 3-4个核心规格可视化成大显示瓷砖,其余规格折叠在“查看完整规格”披露下方。
-
文案自我审计(交付前强制要求): 在宣布任务完成前,重新阅读页面上的每个可见字符串(标题、副标题、眉题、按钮标签、正文、说明、alt文本、页脚文本、错误消息)。标记以下字符串:
- 语法错误(“free on its past”、“two plans but one is honest”、“to put it on the table”上下文无关)
- 指代不清(“we plan to stay that way”无前置上下文)
- AI幻觉特征(可爱但错误的文字游戏、不连贯的强制隐喻、“优雅的空洞”短语)
- LLM试图显得有思想的语气(被动攻击性谦逊、虚假工匠标签、伪诗意微元叙述) 重写每个标记的字符串。如果不确定字符串是否有意义,替换为简洁的功能性句子。AI生成的可爱文案比无聊文案更糟糕。
-
虚假精确数字需标记。像、
92%、4.1×、48k、5.8 mm这样的数字要么:13.4 lb- 来自真实数据(需求、品牌指南、公开指标)——可以
- 明确标记为模拟(、“example”、“sample data”)——可以
<!-- mock --> - AI虚构的规格美学——禁止。不要伪造品牌未声明的工程精度。
-
每个页面只用一种文案风格。不要在同一布局中混用技术等宽字体(“47 tasks · 0.6 ctx-switches/day”)、社论散文和营销口号,除非品牌语气明确要求。
4.10 Quotes & Testimonials
4.10 引用与Testimonial
- Max 3 lines of quote body. Never 6. If the original quote is longer → cut it. A landing-page quote is a snippet, not the full review.
- For very small font sizes (e.g. footer-style testimonials), the line cap can stretch slightly. Spirit: "fits in a glance."
- No em-dashes inside the quote text as design flourish (long pauses, kinetic em-dashes, em-dash-bullets). See Section 9.G - em-dash is completely banned.
- Attribution: name + role + (optionally) company. Never name only ("- Sarah").
- Quote marks: use real typographic quotes ( " " ) or none at all. Not straight ASCII ( " ).
- 引用正文最多3行。绝不要6行。如果原始引用更长→删减。着陆页引用是片段,而非完整评论。
- 对于非常小的字体(如页脚风格的testimonial),行数限制可略微放宽。原则:“一眼就能看完”。
- 引用文本中禁止使用破折号作为设计装饰(长停顿、动态破折号、破折号项目符号)。见第9.G节——破折号完全禁止。
- 署名:姓名+职位+(可选)公司。绝不要仅姓名(“- Sarah”)。
- 引号:使用真实的印刷引号( " " )或不使用。不要使用直ASCII引号( " )。
4.11 Page Theme Lock (Light / Dark Mode Consistency)
4.11 页面主题锁定(浅色/深色模式一致性)
The page has ONE theme. Sections do not invert.
- If the page is dark mode, ALL sections are dark mode. No light-mode-warm-paper section sandwiched between dark sections (or vice versa). The user must not feel they walked into a different website mid-scroll.
- The exception: if the brief explicitly calls for a "Color Block Story" or "Theme Switch on Scroll" device AND that is a deliberate composition (one full theme switch with a strong transition, not random alternation), it is allowed once per page.
- Default behaviour: pick light, dark, or auto () at the page level and lock it. Section-level background tints within the same theme family are fine (
prefers-color-schemenext tobg-zinc-950); flipping tobg-zinc-900in the middle of abg-amber-50page is broken.bg-zinc-950 - When using a design system with built-in theming (Radix Themes, shadcn/ui with ), set the theme ONCE in
<Theme>or the page root. Do not let individual sections override.layout.tsx
页面只有一个主题。区域不要切换主题。
- 如果页面是深色模式,所有区域都是深色模式。不要在深色区域之间插入浅色暖纸区域(反之亦然)。用户在滚动过程中不应感觉进入了不同的网站。
- 例外:如果需求明确要求“色块故事”或“滚动切换主题”效果,且这是刻意的构图(一次完整的主题切换,带强烈过渡,而非随机交替),每页最多允许一次。
- 默认行为:在页面级别选择浅色、深色或自动()并锁定。同一主题家族内的区域背景色调是可以的(
prefers-color-scheme旁边是bg-zinc-950);在bg-zinc-900页面中间切换到bg-zinc-950属于设计失误。bg-amber-50 - 当使用内置主题的设计系统(Radix Themes、带的shadcn/ui)时,在
<Theme>或页面根节点中设置一次主题。不要让单个区域覆盖。layout.tsx
5. CONTEXT-AWARE PROACTIVITY
5. 上下文感知的主动设计
These are tools, not defaults. Use them when the design read calls for them. None of these fire automatically.
- Liquid Glass / Glassmorphism: Appropriate for premium consumer, Apple-adjacent, luxury brand, or media-overlay vibes. Inappropriate for dashboards, public-sector, or "boring B2B." When used, go beyond : add a 1px inner border (
backdrop-blur) and a subtle inner shadow (border-white/10) for physical edge refraction. Provide a solid-fill fallback undershadow-[inset_0_1px_0_rgba(255,255,255,0.1)].prefers-reduced-transparency - Magnetic Micro-physics: Use when AND the brief reads premium / playful / agency. Implement EXCLUSIVELY with Motion's
MOTION_INTENSITY > 5/useMotionValueoutside the React render cycle. NeveruseTransform. See Section 3.B.useState - Perpetual Micro-Interactions (Pulse, Typewriter, Float, Shimmer, Carousel): Use when AND the section actively benefits from motion (status indicators, live feeds, AI-feel). Not every card needs an infinite loop. If a section is informational, leave it still. Apply Spring Physics (
MOTION_INTENSITY > 5) - no linear easing.type: "spring", stiffness: 100, damping: 20 - "Motion claimed, motion shown." If , the page must actually move: entry transitions on hero, scroll-reveal on key sections, hover physics on CTAs, at minimum. A static page that claims
MOTION_INTENSITY > 4is broken. Conversely, if you cannot ship working motion in the available scope, drop the dial to 3 and ship a clean static page. Never half-build motion that breaks (cut-off ScrollTriggers, jumpy enters, missing cleanups).MOTION_INTENSITY: 7 - MOTION MUST BE MOTIVATED (mandatory). Before adding any animation, ask: "what does this animation communicate?" Valid answers: hierarchy (drawing attention to the right thing), storytelling (revealing content in sequence that matches a narrative), feedback (acknowledging a user action), state transition (showing something changed). Invalid answer: "it looked cool". GSAP everywhere because GSAP is available is amateur. Each ScrollTrigger, each marquee, each pinned section needs a reason. If you cannot articulate the reason in one sentence, drop the animation.
- MARQUEE MAX-ONE-PER-PAGE (mandatory). Horizontal scrolling text marquees ("logos endlessly scrolling", "manifesto scrolling sideways", "kinetic word strip") are appropriate at most ONCE per page. Two or more marquees on the same page reads as lazy filler. Pick the one section where the marquee actually serves the content; the others get a different layout.
- GSAP Sticky-Stack Pattern (when scroll-stack is used). A "card stack on scroll" must be a REAL sticky-stack, not a sequential reveal list. See Section 5.A below for the canonical code skeleton. Common failure: trigger fires halfway through scroll instead of pinning at viewport top. Fix: not
start: "top top"orstart: "top center"."top 80%" - GSAP Horizontal-Pan Pattern (when horizontal scroll-hijack is used). See Section 5.B below for the canonical skeleton. Common failure: animation starts before the section is pinned, so the user sees half a slide. Same fix: , pin the wrapper, scrub the inner track.
start: "top top"
这些是工具,而非默认选项。仅当设计解读需要时使用。所有这些都不会自动触发。
- 液态玻璃/玻璃态: 适用于高端消费级、苹果相关、奢华品牌或媒体覆盖风格。不适用于仪表盘、公共部门或“乏味B2B”。使用时,不要仅停留在:添加1px内边框(
backdrop-blur)和微妙内阴影(border-white/10)模拟物理边缘折射。为shadow-[inset_0_1px_0_rgba(255,255,255,0.1)]提供纯色填充降级方案。prefers-reduced-transparency - 磁吸微物理效果: 当且需求解读为高端/活泼/代理机构时使用。仅在React渲染周期外使用Motion的
MOTION_INTENSITY > 5/useMotionValue实现。绝不使用useTransform。见第3.B节。useState - 永久微交互(脉冲、打字机、浮动、微光、轮播):当且区域确实能从动效中受益(状态指示器、实时 feed、AI风格)时使用。不是每个卡片都需要无限循环。如果区域是信息性的,保持静态。应用Spring物理(
MOTION_INTENSITY > 5)——不要使用线性缓动。type: "spring", stiffness: 100, damping: 20 - “动效声明=动效实现”。如果,页面必须实际动起来:Hero进入过渡、关键区域滚动显示、CTA悬停物理效果,至少这些。声称
MOTION_INTENSITY > 4但静态的页面属于设计失误。反之,如果在可用范围内无法交付正常工作的动效,将参数降至3并交付干净的静态页面。绝不交付半完成的、有问题的动效(截断的ScrollTriggers、跳跃的进入动画、缺失的清理)。MOTION_INTENSITY: 7 - 动效必须有动机(强制要求)。添加任何动画前,问自己:“这个动画传达了什么?”有效答案:层级(将注意力吸引到正确的内容)、叙事(按顺序揭示内容,匹配叙事)、反馈(响应用户操作)、状态过渡(展示内容变化)。无效答案:“看起来很酷”。因为GSAP可用就到处使用GSAP是业余做法。每个ScrollTrigger、每个滚动字幕、每个固定区域都需要理由。如果无法用一句话说明理由,删除动画。
- 每页最多一个滚动字幕(强制要求)。水平滚动文本字幕(“Logo无限滚动”、“宣言横向滚动”、“动态文字条”)每页最多使用一次。同一页面上两个或更多滚动字幕会显得是懒惰的填充内容。选择一个滚动字幕真正服务于内容的区域;其他区域使用不同布局。
- GSAP粘性堆叠模式(使用滚动堆叠时)。“滚动卡片堆叠”必须是真正的粘性堆叠,而非顺序展示列表。见下文第5.A节的标准代码骨架。常见错误:触发器在滚动中途触发,而非固定在视口顶部。修复:而非
start: "top top"或start: "top center"。"top 80%" - GSAP水平平移模式(使用水平滚动劫持时)。见下文第5.B节的标准代码骨架。常见错误:动画在区域固定前开始,导致用户看到半张幻灯片。同样修复:,固定容器,滚动内部轨道。
start: "top top"
5.A Sticky-Stack - Canonical Skeleton
5.A 粘性堆叠 - 标准代码骨架
tsx
"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>
);
}Critical points: , , every card except the last is pinned, the scale/opacity transform is driven by the NEXT card's scroll trigger (so previous card shrinks as next one arrives).
start: "top top"pin: truetsx
"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", // 固定在视口顶部
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: true5.B Horizontal-Pan - Canonical Skeleton
5.B 水平平移 - 标准代码骨架
tsx
"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>
);
}Critical points: , , (scroll length = horizontal travel needed), . The wrapper is pinned, the inner track slides horizontally as the user scrolls vertically.
start: "top top"pin: trueend: "+=${distance}"scrub: 1tsx
"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", // 当区域顶部到达视口顶部时开始固定
end: () => `+=${distance}`, // 滚动距离=轨道宽度减去视口宽度
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: 15.C Scroll-Reveal Stagger - Canonical Skeleton (lighter alternative)
5.C 滚动显示交错 - 标准代码骨架(轻量替代方案)
For simple "items appear as they enter viewport" (no pinning), prefer Motion's over GSAP - lighter, no ScrollTrigger needed:
whileInViewtsx
"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>
);
}Use this for: feature lists, testimonial grids, logo walls, anything that just needs "enter on scroll." Save GSAP for actual pin/scrub work.
对于简单的“元素进入视口时出现”(无固定),优先使用Motion的而非GSAP——更轻量,无需ScrollTrigger:
whileInViewtsx
"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>
);
}用于:功能列表、testimonial网格、Logo墙、任何只需要“滚动进入”的内容。将GSAP留给实际的固定/滚动控制工作。
5.D Forbidden Animation Patterns
5.D 禁止的动画模式
- is banned. It runs on every scroll frame, jank-prone, no batching. Use Motion's
window.addEventListener("scroll", ...), GSAP'suseScroll(), IntersectionObserver, or CSSScrollTrigger(scroll-driven animations).animation-timeline: view() - Custom scroll progress calculations using in React state. Same reason. Re-renders on every frame.
window.scrollY - loops that touch React state. Use motion values (
requestAnimationFrame+useMotionValue) instead.useTransform - Layout Transitions: Use Motion's and
layoutprops for visible state changes (re-ordering lists, expanding modals, shared elements between routes). Do not wrap static content inlayoutIdprops "for safety" - it costs measurement work.layout - Staggered Orchestration: Use (Motion) or CSS cascade (
staggerChildren) for reveal moments where sequence matters. Foranimation-delay: calc(var(--index) * 100ms), parent (staggerChildren) and children MUST share the same Client Component tree.variants
- 禁止使用。它在每个滚动帧运行,容易卡顿,无批处理。使用Motion的
window.addEventListener("scroll", ...)、GSAP的useScroll()、IntersectionObserver或CSS滚动驱动动画(ScrollTrigger)。animation-timeline: view() - 在React状态中使用计算自定义滚动进度。原因同上。每次变化都会重新渲染。
window.scrollY - 循环修改React状态。改用运动值(
requestAnimationFrame+useMotionValue)。useTransform - 布局过渡: 使用Motion的和
layout属性处理可见状态变化(列表重排、模态框展开、路由间共享元素)。不要为了“安全”将静态内容包裹在layoutId属性中——这会增加测量开销。layout - 交错编排: 使用(Motion)或CSS级联(
staggerChildren)处理序列重要的展示时刻。对于animation-delay: calc(var(--index) * 100ms),父组件(staggerChildren)和子组件必须共享同一Client Component树。variants
6. PERFORMANCE & ACCESSIBILITY GUARDRAILS
6. 性能与无障碍防护措施
6.A Hardware Acceleration
6.A 硬件加速
- Animate ONLY and
transform. Never animateopacity,top,left,width.height - Use sparingly - only on elements that will actually animate.
will-change: transform
- 仅对和
transform设置动画。绝不对opacity、top、left、width设置动画。height - 谨慎使用——仅对实际会动画的元素使用。
will-change: transform
6.B Reduced Motion (mandatory)
6.B 减少动效(强制要求)
- Any motion above MUST honor
MOTION_INTENSITY > 3. This is non-negotiable.prefers-reduced-motion - In Motion: wrap with and degrade to static.
useReducedMotion() - In CSS: gate animations behind or provide an override block under
@media (prefers-reduced-motion: no-preference)that disables.@media (prefers-reduced-motion: reduce) - Infinite loops, parallax, scroll-hijack, and magnetic physics MUST collapse to static / instant under reduced motion.
- 任何的动效必须尊重
MOTION_INTENSITY > 3。这是不可协商的。prefers-reduced-motion - 在Motion中:用包裹并降级为静态。
useReducedMotion() - 在CSS中:将动画放在中,或在
@media (prefers-reduced-motion: no-preference)下提供禁用动画的覆盖块。@media (prefers-reduced-motion: reduce) - 无限循环、视差、滚动劫持和磁吸物理效果在减少动效模式下必须降级为静态/即时效果。
6.C Dark Mode (mandatory for any consumer-facing page)
6.C 深色模式(面向消费者的页面强制要求)
- Design for both modes from the start. Never ship light-only or dark-only without explicit user instruction.
- Use Tailwind variant OR CSS variables for tokens. Pick one strategy per project.
dark: - Do not prescribe specific dark-mode colors here. The brief decides. Maintain visual hierarchy, brand identity, and WCAG AA contrast (AAA for body) across both modes.
- Respect . Default to system preference unless the brand insists on one mode.
prefers-color-scheme: dark
- 从一开始就为两种模式设计。除非用户明确指示,否则绝不交付仅浅色或仅深色模式。
- 使用Tailwind 变体或CSS变量作为令牌。每个项目选择一种策略。
dark: - 此处不指定具体深色模式颜色。由需求决定。在两种模式下保持视觉层级、品牌标识和WCAG AA对比度(正文为AAA)。
- 尊重。除非品牌坚持单一模式,否则默认遵循系统偏好。
prefers-color-scheme: dark
6.D Core Web Vitals Targets
6.D 核心Web指标目标
- LCP < 2.5s. Hero image must be or preloaded.
next/image priority - INP < 200ms. Heavy work off main thread.
- CLS < 0.1. Reserve space for images, fonts, embeds.
- Run Lighthouse before declaring a page done.
- LCP < 2.5s。Hero图片必须设置或预加载。
next/image priority - INP < 200ms。繁重工作移至主线程外。
- CLS < 0.1。为图片、字体、嵌入内容预留空间。
- 宣布页面完成前运行Lighthouse。
6.E DOM Cost
6.E DOM开销
- Apply grain / noise filters EXCLUSIVELY to fixed, pseudo-elements (e.g.,
pointer-events-none). NEVER on scrolling containers - continuous GPU repaints destroy mobile FPS.fixed inset-0 z-[60] pointer-events-none - Be aware of bundle size. Motion is not tiny. Three.js is large. Lazy-load anything that's not above-the-fold.
- 仅对固定的、的伪元素(如
pointer-events-none)应用颗粒/噪点滤镜。绝不对滚动容器应用——持续GPU重绘会破坏移动端FPS。fixed inset-0 z-[60] pointer-events-none - 注意包大小。Motion并不小。Three.js很大。延迟加载所有非首屏内容。
6.F Z-Index Restraint
6.F Z-Index克制
NEVER spam arbitrary or . Use z-index strictly for systemic layer contexts (sticky navbars, modals, overlays, grain). Document the z-index scale in a project constants file.
z-50z-10绝不随意使用或。仅将z-index用于系统层上下文(粘性导航栏、模态框、覆盖层、颗粒效果)。在项目常量文件中记录z-index层级。
z-50z-107. DIAL DEFINITIONS (Technical Reference)
7. 参数定义(技术参考)
DESIGN_VARIANCE (Level 1-10)
DESIGN_VARIANCE(1-10级)
- 1-3 (Predictable): Symmetrical CSS Grid (12-col, equal fr-units), equal paddings, centered alignment.
- 4-7 (Offset): overlaps, varied image aspect ratios (4:3 next to 16:9), left-aligned headers over center-aligned data.
margin-top: -2rem - 8-10 (Asymmetric): Masonry layouts, CSS Grid with fractional units (), massive empty zones (
grid-template-columns: 2fr 1fr 1fr).padding-left: 20vw - MOBILE OVERRIDE: For levels 4-10, asymmetric layouts above MUST collapse to strict single-column (
md:,w-full,px-4) on viewportspy-8.< 768px
- 1-3(可预测): 对称CSS Grid(12列,均等fr单位)、均等内边距、居中对齐。
- 4-7(偏移): 重叠、不同图片宽高比(4:3旁边是16:9)、左对齐标题搭配居中数据。
margin-top: -2rem - 8-10(不对称): 瀑布流布局、带分数单位的CSS Grid()、大量空白区域(
grid-template-columns: 2fr 1fr 1fr)。padding-left: 20vw - 移动端例外: 对于4-10级,以上的不对称布局在
md:视口必须折叠为严格的单列(< 768px、w-full、px-4)。py-8
MOTION_INTENSITY (Level 1-10)
MOTION_INTENSITY(1-10级)
- 1-3 (Static): No automatic animations. CSS and
:hoverstates only.:activeis the default mode anyway.prefers-reduced-motion - 4-7 (Fluid CSS): .
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1)cascades for load-ins. Focus onanimation-delayandtransform.opacity - 8-10 (Advanced Choreography): Complex scroll-triggered reveals, parallax, scroll-driven animation (CSS or GSAP ScrollTrigger). Use Motion hooks. NEVER use
animation-timeline- it is a hard ban, not a "prefer-not." See Section 5.D for the allowed alternatives.window.addEventListener('scroll')
- 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和transform。opacity - 8-10(高级编排): 复杂滚动触发展示、视差、滚动驱动动画(CSS 或GSAP ScrollTrigger)。使用Motion钩子。绝不使用
animation-timeline——这是硬性禁令,而非“不推荐”。见第5.D节的允许替代方案。window.addEventListener('scroll')
VISUAL_DENSITY (Level 1-10)
VISUAL_DENSITY(1-10级)
- 1-3 (Art Gallery): Lots of white space. Huge section gaps (to
py-32). Expensive, clean.py-48 - 4-7 (Daily App): Standard web app spacing (to
py-16).py-24 - 8-10 (Cockpit): Tight paddings. No card boxes; 1px lines separate data. Mandatory: for all numbers.
font-mono
- 1-3(艺术画廊): 大量留白。区域间距很大(到
py-32)。高端、简洁。py-48 - 4-7(日常应用): 标准Web应用间距(到
py-16)。py-24 - 8-10(驾驶舱): 紧凑内边距。无卡片框;1px线条分隔数据。强制要求:所有数字使用。
font-mono
8. DARK MODE PROTOCOL
8. 深色模式协议
Dual-mode by default. Never assume light-only unless the brief is print-emulating editorial.
默认双模式。除非需求是模拟印刷的社论风格,否则绝不假设仅浅色模式。
8.A Token Strategy (pick one, stick to it)
8.A 令牌策略(选一种,坚持使用)
- Tailwind variant (default for utility-first projects): every color utility paired with its dark variant (
dark:,bg-white dark:bg-zinc-950).text-gray-900 dark:text-gray-100 - CSS variables (for shadcn/ui, Radix Themes, or component libraries with theming): define semantic tokens (,
--surface,--surface-elevated,--text-primary) and swap values under--accentor[data-theme="dark"].@media (prefers-color-scheme: dark)
- Tailwind 变体(实用优先项目默认):每个颜色工具类搭配深色变体(
dark:、bg-white dark:bg-zinc-950)。text-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 Do Not Prescribe Specific Colors Here
8.B 此处不指定具体颜色
The brief and brand decide. This skill enforces only:
- Contrast - WCAG AA minimum for body text, AAA target for hero copy.
- Hierarchy parity - visual hierarchy that works in light must work in dark. If a CTA pops in light, it pops in dark.
- Brand fidelity - primary brand color stays recognisable. Don't desaturate the brand into a dark mode.
- No pure and no pure
#000000- use off-black (zinc-950, near-black warm gray) and off-white. Pure values kill depth.#ffffff
由需求和品牌决定。本技能仅强制执行:
- 对比度 - 正文文本WCAG AA最低要求,Hero文本AAA目标。
- 层级一致性 - 浅色模式下有效的视觉层级在深色模式下也必须有效。如果CTA在浅色模式下突出,在深色模式下也必须突出。
- 品牌保真度 - 主品牌颜色保持可识别性。不要为了深色模式降低品牌饱和度。
- 不要使用纯和纯
#000000- 使用米黑(zinc-950、暖近黑)和米白。纯值会失去深度。#ffffff
8.C Default Mode
8.C 默认模式
Respect unless the brand insists. Add a manual toggle if either mode would lose key brand expression.
prefers-color-scheme除非品牌坚持,否则尊重。如果任一模式会丢失关键品牌表达,添加手动切换按钮。
prefers-color-scheme8.D Test in Both Modes Before Finishing
8.D 完成前在两种模式下测试
Open the page in both modes during development. Do not ship a page you've only seen in one mode.
开发过程中在两种模式下打开页面。绝不交付仅在一种模式下查看过的页面。
9. AI TELLS (Forbidden Patterns)
9. AI特征(禁止模式)
Avoid these signatures unless the brief explicitly asks for them.
除非需求明确要求,否则避免这些特征。
9.A Visual & CSS
9.A 视觉与CSS
- NO neon / outer glows by default. Use inner borders or subtle tinted shadows.
- NO pure black (). Off-black, zinc-950, or charcoal.
#000000 - NO oversaturated accents. Desaturate to blend with neutrals.
- NO excessive gradient text for large headers.
- NO custom mouse cursors. Outdated, accessibility-hostile, perf-hostile.
- 默认禁止霓虹/外发光。使用内边框或微妙的 tinted阴影。
- 禁止纯黑色()。使用米黑、zinc-950或炭黑色。
#000000 - 禁止过度饱和的强调色。降低饱和度以融入中性色。
- 禁止大标题使用过多渐变文本。
- 禁止自定义鼠标光标。过时、无障碍不友好、性能不友好。
9.B Typography
9.B 排版
- AVOID Inter as default. See Section 4.1. Override path exists.
- NO oversized H1s that just scream. Control hierarchy with weight + color, not raw scale.
- Serif constraints: Serif for editorial / luxury / publication. Not for dashboards.
- 默认避免使用Inter。见第4.1节。存在例外路径。
- 禁止过大的H1。通过字重+颜色控制层级,而非单纯缩放。
- 衬线字体约束: 衬线字体用于社论/奢华/出版物。不用于仪表盘。
9.C Layout & Spacing
9.C 布局与间距
- Mathematically perfect padding and margins. No floating elements with awkward gaps.
- NO 3-column equal feature cards. The generic "three identical cards horizontally" feature row is banned. Use 2-column zig-zag, asymmetric grid, scroll-pinned, or horizontal-scroll alternative.
- 数学上完美的内边距和外边距。不要有带尴尬间距的浮动元素。
- 禁止3列均等功能卡片。通用的“三个相同水平卡片”功能行禁止使用。使用2列Z字形、不对称网格、滚动固定或水平滚动替代方案。
9.D Content & Data ("Jane Doe" Effect)
9.D 内容与数据(“Jane Doe”效应)
- NO generic names. "John Doe", "Sarah Chan", "Jack Su" → use creative, realistic, locale-appropriate names.
- NO generic avatars. No SVG "egg" or Lucide user icons → use believable photo placeholders or specific styling.
- NO fake-perfect numbers. Avoid ,
99.99%,50%. Use organic, messy data (1234567,47.2%).+1 (312) 847-1928 - NO startup-slop brand names. "Acme", "Nexus", "SmartFlow", "Cloudly" → invent contextual, premium names that sound real.
- NO filler verbs. "Elevate", "Seamless", "Unleash", "Next-Gen", "Revolutionize" → concrete verbs only.
- 禁止通用名称。“John Doe”、“Sarah Chan”、“Jack Su”→使用有创意、真实、符合地域的名称。
- 禁止通用头像。不要使用SVG“鸡蛋”或Lucide用户图标→使用可信的照片占位符或特定样式。
- 禁止虚假完美数字。避免、
99.99%、50%。使用自然、不规整的数据(1234567、47.2%)。+1 (312) 847-1928 - 禁止初创公司模板化品牌名称。“Acme”、“Nexus”、“SmartFlow”、“Cloudly”→发明符合上下文、高端、听起来真实的名称。
- 禁止填充动词。“Elevate”、“Seamless”、“Unleash”、“Next-Gen”、“Revolutionize”→仅使用具体动词。
9.E External Resources & Components
9.E 外部资源与组件
- NO hand-rolled SVG icons. Use Phosphor / HugeIcons / Radix / Tabler. Lucide on explicit request only.
- Hand-rolled decorative SVGs strongly discouraged as default (see Section 4.8).
- NO div-based fake screenshots. Never build a fake product UI out of rectangles to simulate a screenshot. Use real images, generated images, or skip the preview.
<div> - NO broken Unsplash links. Use , or generated photo placeholders, or actual assets.
https://picsum.photos/seed/{descriptive-string}/{w}/{h} - shadcn/ui customization: Allowed, but NEVER in default state. Customize radii, colors, shadows, typography to the project aesthetic.
- Production-Ready Cleanliness: Code visually clean, memorable, meticulously refined.
- 禁止手动绘制SVG图标。使用Phosphor/HugeIcons/Radix/Tabler。仅当用户明确要求时使用Lucide。
- 默认强烈不推荐手动绘制装饰性SVG(见第4.8节)。
- 禁止基于div的假截图。绝不要用矩形构建假产品UI来模拟截图。使用真实图片、生成图片或跳过预览。
<div> - 禁止无效的Unsplash链接。使用、生成的照片占位符或实际资产。
https://picsum.photos/seed/{描述性字符串}/{宽}/{高} - shadcn/ui自定义: 允许,但绝不使用默认状态。根据项目审美自定义圆角、颜色、阴影、排版。
- 生产就绪整洁度: 代码视觉整洁、易记、精心优化。
9.F Production-Test Tells (banned outright)
9.F 生产测试特征(完全禁止)
These patterns came out of real LLM-generated landing-page tests. They are the signatures the model defaults to when it tries to "look designed." Treat them as hard bans unless the brief explicitly calls for one.
Hero & top-of-page
- NO version labels in the hero. ,
V0.6,v2.0,BETA,INVITE-ONLY PREVIEW,EARLY ACCESS- banned as default eyebrows. Only acceptable when the brief is explicitly about a product launch / preview status.ALPHA - NO "Brand · No. 01"-style sub-eyebrows. "Marrow · No. 01 · The 6-quart" type micro-meta lines. Skip them.
Section numbering & micro-labels
- NO section-number eyebrows. ,
00 / INDEX,001 · Capabilities,002 · Featured commission,06 · how it works- banned. Eyebrows should name the topic in plain language, not enumerate.05 · The honest table - NO -style pagination on images or bento tiles. If the user can count, they don't need the label.
01 / 4 - NO -style scroll cues. A simple arrow or "Scroll" is enough; no section-number prefix.
Scroll · 001 Capabilities - NO "Index of Work, 2018 - 2026"-style range labels as eyebrows. Just say what the section is.
Separators & dots
- The middle-dot () is rationed. Maximum 1 per line in metadata strips. Do NOT use it as the default separator for everything ("foo · bar · baz · qux · quux"). If you need a separator family, prefer line breaks, hairlines, or columns.
· - NO decorative colored status dots on every list/nav/badge. A colored dot before "ONE Q4 SLOT OPEN" or before every nav link, or every task row - banned by default. Acceptable only when the dot conveys actual semantic state (a server status, an availability flag) and is used sparingly.
Em-dashes & typography flourishes
- NO em-dash () as a design element OR anywhere else. See Section 9.G below for the complete, non-negotiable ban. The em-dash character is forbidden in headlines, eyebrows, pills, body copy, quotes, attribution, captions, button text, and alt text. Use the regular hyphen (
—).- - NO -broken-and-italicized headlines as a default "design move." "for thirty<br>years." type splits. Headlines should read naturally first, get clever only when the brief demands it.
<br> - NO vertical rotated text ("INDEX OF WORK, 2018 - 2026" rotated 90°). Agency-portfolio cliché. Use it only when the brief is explicitly agency / Awwwards / experimental AND it serves a real composition purpose.
- NO crosshair / hairline grid lines as decoration. Vertical and horizontal lines drawn just to make the page "feel designed" - banned. Use them only when they organize real content.
Fake product previews
- NO div-based fake product UI in the hero (fake task list, fake terminal, fake dashboard built from styled divs). It is the #1 LLM-design Tell. Use a real screenshot, a generated image, a real component preview, or none at all.
- NO fake version footers ("v0.6.2-rc.1", "last sync 4s ago · main") inside fake screenshots. Adds nothing, screams AI.
Marketing-copy Tells
- NO "Quietly in use at" / "Quietly trusted by" social-proof headers. Use natural language: "Trusted by", "Used at", "Customers include", or skip the heading entirely if the logos speak.
- NO "From the field" / "Field notes" / "Currently on the bench" / "On our desks" / "Loose plates" style poetic labels on quote, blog, or sidebar sections. Reads as performative-craftsman. Use plain functional labels ("Testimonials", "Latest writing", "Now working on") or skip the label.
- NO "We respect the French ones"-style mock-humble industry-references in body copy. Cute and AI-y.
- NO weather / locale strips ("LIS 14:23 · 18°C") in headers/footers unless the brief is explicitly about a place / time-zone-distributed studio.
- NO micro-meta-sentences under eyebrows. Sentences like "Each of these is a feature we ship today, not a roadmap promise. The list will stay short on purpose." sitting under a section heading are clutter. Eyebrow + Headline + Body is enough.
- NO generic step labels. "Stage 1 / Stage 2 / Stage 3", "Step 1 / Step 2 / Step 3", "Phase 01 / Phase 02 / Phase 03", "Pass One / Pass Two / Pass Three". Banned. The actual step content is the label. If you must show progression, use the verb-noun directly ("Install", "Configure", "Ship") not "Stage 1: Install".
Pills, labels and version stamps
- NO pills/labels/tags overlaid on images. No overlays on photos with tags like
<span>,Brand · 02,PLATE · BRAND. Either let the image speak alone, or add a caption directly below (outside the image).Field notes - journal - NO photo-credit captions as decoration. Strings like ,
Field study no. 12 · Ines Caetano,Plate 03 · House archiveunder stock/picsum images are pretentious. Photo credit is allowed ONLY when there is a real photographer being credited for a real photo (with permission). Otherwise: skip the caption or use a one-line functional caption ("The 6-quart, in Sage.").Frame XII · 35mm - NO version footers on marketing pages. Footer strings like ,
v1.4.2,Build 0048are CLI / devtool fixtures, not landing-page content. Banned on marketing/landing/portfolio pages.last sync 4s ago · main - NO "Reservation 412 of 800"-style live-stock counters as decoration. Only if the brief is explicitly a limited-run waitlist with real data.
Decoration text strips
- NO decoration text strip at hero bottom. Patterns like ,
BRAND. MOTION. SPATIAL.,TYPE / FORM / MOTION,DESIGN · BUILD · SHIPas a small mono-caps strip across the bottom of the hero are an agency-portfolio cliché. Banned by default. Only acceptable when the strip carries real, navigable links (sticky bottom nav) or real status info (cookie banner, build info on a docs site).ESTD. 2018 · LISBON · BRAND. MOTION. SPATIAL. - NO floating top-right sub-text in section headings. Pattern: section has a giant left-aligned headline; in the top-right corner of the same section header there is a small explainer paragraph floating with no clear alignment to anything else. That floater is the Tell. Either put the sub-text directly under the headline, or build a clean 2-column header (left: headline, right: aligned body), but not a tiny corner paragraph.
Lists, dividers and scoring
- NO +
border-ton every row of a long list / spec table. Pick one (bottom-border between rows OR top-border above the group) and use it sparsely. A 10-row spec table with hairlines under each row is the laziest layout - see Section 4.9 for alternative UI components.border-b - NO scoring/progress bars with filled background tracks as comparison visuals. If you need to show "X out of Y" comparisons, prefer a number + small icon, or a tiny inline bar WITHOUT a background track. Big filled tracks with a partial fill on top are dashboard-UI clutter on a landing page.
bg-zinc-200
Locale, time, scroll cues
- Locale / city-name / time / weather strips are banned for 99% of briefs. "Lisbon, working with founders" in the hero, "1200-690 Lisbon, Portugal" in the footer, "Lisbon 14:23 · 18°C" in the nav. These are agency-portfolio decoration tells. Allowed ONLY when: the brief explicitly describes a globally-distributed studio with timezone-relevant work, OR a travel-focused brand, OR a real-world physical venue. A single contact-address mention in the footer is fine; an atmospheric locale strip is not.
- Scroll cues are banned. ,
Scroll,↓ scroll,Scroll to explore, animated mouse-wheel icons. If the user has not scrolled yet, they are looking at the hero. They know what scroll is. The bottom of the viewport does not need a label.Scroll to walk through it - ZERO decorative status dots by default. A coloured dot before nav items, before list rows, before badges, before status labels is a Tell. Only acceptable when conveying real semantic state (a live indicator on actual server status, a live availability flag) and limited to one per page section.
这些模式来自真实LLM生成着陆页的测试。它们是模型试图“看起来有设计感”时的默认特征。除非需求明确要求,否则将其视为硬性禁令。
Hero与页面顶部
- 禁止Hero中的版本标签。、
V0.6、v2.0、BETA、INVITE-ONLY PREVIEW、EARLY ACCESS——默认禁止作为眉题。仅当需求明确是产品发布/预览状态时可接受。ALPHA - 禁止“Brand · No. 01”风格的子眉题。“Marrow · No. 01 · The 6-quart”类型的微元行。跳过它们。
区域编号与微标签
- 禁止区域编号眉题。、
00 / INDEX、001 · Capabilities、002 · Featured commission、06 · how it works——禁止。眉题应使用平实语言命名主题,而非编号。05 · The honest table - 禁止图片或Bento瓷砖上的风格分页标签。如果用户能计数,不需要标签。
01 / 4 - 禁止风格的滚动提示。简单箭头或“Scroll”就足够了;不需要区域编号前缀。
Scroll · 001 Capabilities - 禁止“Index of Work, 2018 - 2026”风格的范围标签作为眉题。直接说明区域内容即可。
分隔符与点
- 中间点()限量使用。元数据行中每行最多1个。不要将其作为所有内容的默认分隔符(“foo · bar · baz · qux · quux”)。如果需要分隔符系列,优先使用换行、细线条或列。
· - 禁止每个列表/导航/徽章上的装饰性彩色状态点。“ONE Q4 SLOT OPEN”前、每个导航链接前、每个任务行前的彩色点——默认禁止。仅当点传达实际语义状态(服务器状态、可用性标志)且谨慎使用时可接受。
破折号与排版装饰
- 禁止使用破折号()作为设计元素或任何其他用途。见下文第9.G节的完全、不可协商禁令。破折号字符禁止出现在标题、眉题、药丸、正文、引用、署名、说明、按钮文本和alt文本中。使用普通连字符(
—)。- - 禁止默认使用拆分并斜体化标题的“设计手法”。“for thirty<br>years.”类型的拆分。标题应首先自然可读,仅当需求要求时才做创意处理。
<br> - 禁止垂直旋转文本(“INDEX OF WORK, 2018 - 2026”旋转90°)。代理机构作品集陈词滥调。仅当需求明确是代理机构/Awwwards/实验风格且服务于真实构图目的时使用。
- 禁止装饰性十字准线/细网格线。仅为了让页面“看起来有设计感”而绘制的垂直和水平线——禁止。仅当它们组织真实内容时使用。
假产品预览
- 禁止Hero中基于div的假产品UI(假任务列表、假终端、用样式化div构建的假仪表盘)。这是#1 LLM设计特征。使用真实截图、生成图片、真实组件预览或完全跳过。
- 禁止假截图中的假版本页脚(“v0.6.2-rc.1”、“last sync 4s ago · main”)。毫无意义,暴露AI生成特征。
营销文案特征
- 禁止“Quietly in use at”/“Quietly trusted by”社交证明标题。使用自然语言:“Trusted by”、“Used at”、“Customers include”,或如果Logo足够有说服力,完全跳过标题。
- 禁止“From the field”/“Field notes”/“Currently on the bench”/“On our desks”/“Loose plates”风格的诗意标签用于引用、博客或侧边栏区域。听起来像刻意的工匠风格。使用平实的功能性标签(“Testimonials”、“Latest writing”、“Now working on”)或跳过标签。
- 禁止“We respect the French ones”风格的假谦逊行业引用正文。可爱但充满AI特征。
- 禁止页眉/页脚中的天气/区域条(“LIS 14:23 · 18°C”),除非需求明确是地域/时区分布的工作室。
- 禁止眉题下的微元句子。像*“Each of these is a feature we ship today, not a roadmap promise. The list will stay short on purpose.”*这样的句子位于区域标题下方,属于杂乱内容。眉题+标题+正文就足够了。
- 禁止通用步骤标签。“Stage 1 / Stage 2 / Stage 3”、“Step 1 / Step 2 / Step 3”、“Phase 01 / Phase 02 / Phase 03”、“Pass One / Pass Two / Pass Three”——禁止。实际步骤内容就是标签。如果必须展示进度,直接使用动词-名词(“Install”、“Configure”、“Ship”)而非“Stage 1: Install”。
药丸、标签和版本戳
- 禁止图片上覆盖药丸/标签/标签。不要在照片上叠加标签,如
<span>、Brand · 02、PLATE · BRAND。要么让图片单独展示,要么在图片正下方添加说明(图片外部)。Field notes - journal - 禁止将照片署名作为装饰。像、
Field study no. 12 · Ines Caetano、Plate 03 · House archive这样的字符串放在stock/picsum图片下方,显得做作。仅当真实照片有真实摄影师署名(获得许可)时允许添加照片署名。否则:跳过说明或使用单行功能性说明(“The 6-quart, in Sage.”)。Frame XII · 35mm - 禁止营销页面上的版本页脚。页脚字符串如、
v1.4.2、Build 0048是CLI/开发工具的内容,不是着陆页内容。禁止在营销/着陆/作品集页面使用。last sync 4s ago · main - 禁止装饰性实时库存计数器,如“Reservation 412 of 800”。仅当需求明确是有限名额等待列表且有真实数据时可接受。
装饰文本条
- 禁止Hero底部的装饰文本条。像、
BRAND. MOTION. SPATIAL.、TYPE / FORM / MOTION、DESIGN · BUILD · SHIP这样的小型等宽大写条横跨Hero底部,是代理机构作品集陈词滥调。默认禁止。仅当条带包含真实、可导航的链接(粘性底部导航)或真实状态信息(Cookie横幅、文档站点的构建信息)时可接受。ESTD. 2018 · LISBON · BRAND. MOTION. SPATIAL. - 禁止区域标题右上角的浮动子文本。模式:区域有一个巨大的左对齐标题;同一区域标题的右上角有一个小解释段落,无明确对齐。这个浮动文本是AI特征。要么将子文本直接放在标题下方,要么构建整洁的2列标题(左:标题,右:对齐正文),不要使用角落的小段落。
列表、分隔符和评分
- 禁止长列表/规格表的每行都使用+
border-t。选一种(行之间的下边框或组上方的上边框)并谨慎使用。10行的规格表每行都有细线条,是最懒惰的布局——见第4.9节的替代UI组件。border-b - 禁止使用带填充背景轨道的评分/进度条作为对比视觉。如果需要展示“X out of Y”对比,优先使用数字+小图标,或不带背景轨道的小型内联条。大型填充轨道搭配部分填充,在着陆页上属于仪表盘UI杂乱内容。
bg-zinc-200
区域、时间、滚动提示
- 区域/城市名称/时间/天气条99%的需求禁止使用。Hero中的“Lisbon, working with founders”、页脚中的“1200-690 Lisbon, Portugal”、导航中的“Lisbon 14:23 · 18°C”。这些是代理机构作品集装饰特征。仅当以下情况时允许:需求明确描述全球分布的工作室且时区相关工作,或旅游品牌,或真实物理场所。页脚中提及单个联系地址是可以的;氛围区域条不行。
- 禁止滚动提示。、
Scroll、↓ scroll、Scroll to explore、动画鼠标滚轮图标。如果用户还没滚动,他们正在看Hero。他们知道如何滚动。视口底部不需要标签。Scroll to walk through it - 默认禁止装饰性状态点。导航项前、列表行前、徽章前、状态标签前的彩色点是AI特征。仅当传达真实语义状态(实际服务器状态的实时指示器、实时可用性标志)且每页区域最多一个时可接受。
9.G EM-DASH BAN (the single most-violated Tell)
9.G 破折号禁令(最常违反的特征)
Em-dash () is COMPLETELY banned. It is the LLM's signature stylistic crutch and it is the #1 visual Tell in production tests. There is no "limited use" allowance, no "natural language frequency" allowance, no "in body copy is fine" allowance. None.
—- Banned in headlines. Use a period or a comma.
- Banned in eyebrows / labels / pills / button text / image captions / nav items. Replace with line breaks, columns, or hairlines.
- Banned in body copy. Restructure the sentence: two sentences with a period, OR a comma, OR parentheses, OR a colon.
- Banned in quote attribution. Use a normal hyphen with spaces () or a line break + smaller-weight name.
- - Banned in en-dash form too () when used as a separator. Date ranges (
–) use a hyphen. Number ranges (2018-2026) use a hyphen.€40-80k
The ONLY permitted dash characters on the page are:
- Regular hyphen (for compound words, ranges, line dividers in markup)
- - Minus sign in math ()
-5°C
If your output contains a single or anywhere visible to the user, the output fails the Pre-Flight Check and must be rewritten.
—–This rule is non-negotiable. The agent has historically ignored em-dash limits when phrased as "use sparingly." The phrasing here is binary: zero em-dashes.
破折号()完全禁止。它是LLM标志性的风格拐杖,是生产测试中#1视觉特征。没有“限量使用”许可,没有“自然语言频率”许可,没有“正文使用没问题”许可。完全没有。
—- 标题中禁止使用。使用句号或逗号。
- 眉题/标签/药丸/按钮文本/图片说明/导航项中禁止使用。用换行、列或细线条替换。
- 正文中禁止使用。重构句子:两个句子用句号,或逗号,或括号,或冒号。
- 引用署名中禁止使用。使用带空格的普通连字符()或换行+小字重名称。
- - 连字符形式()用作分隔符时也禁止。日期范围(
–)使用连字符。数字范围(2018-2026)使用连字符。€40-80k
页面上唯一允许的破折号字符是:
- 普通连字符(用于复合词、范围、标记中的行分隔符)
- - 数学中的减号()
-5°C
如果你的输出中任何用户可见的位置包含一个或,输出未通过预发布检查,必须重写。
—–此规则不可协商。Agent过去在规则表述为“谨慎使用”时会忽略破折号限制。此处表述为二元规则:零破折号。
10. REFERENCE VOCABULARY (Pattern Names the Agent Should Know)
10. 参考词汇(Agent应了解的模式名称)
This is a vocabulary, not a library. The agent should KNOW these pattern names to communicate about them, design with them in mind, and reach for them when the design read calls for them. Implementations and code sketches live in the Block Library (Section 12), which is populated iteratively.
这是词汇表,而非库。Agent应了解这些模式名称,以便沟通、设计,并在设计解读需要时选用。实现和代码示例位于块库(第12节),会迭代填充。
Hero Paradigms
Hero范式
- Asymmetric Split Hero - Text on one side, asset on the other, generous white space.
- Editorial Manifesto Hero - Large type, no asset, almost-poster.
- Video / Media Mask Hero - Type cut out as mask over video background.
- Kinetic-Type Hero - Animated typography as the primary visual.
- Curtain-Reveal Hero - Hero parts on scroll like a curtain.
- Scroll-Pinned Hero - Hero stays pinned while content scrolls behind.
- 不对称分屏Hero - 一侧文本,一侧资产,充足留白。
- 社论宣言Hero - 大字体,无资产,近乎海报。
- 视频/媒体遮罩Hero - 文本作为遮罩裁剪在视频背景上。
- 动态排版Hero - 动画排版作为主要视觉元素。
- 幕布式展示Hero - Hero部分随滚动像幕布一样展开。
- 滚动固定Hero - Hero保持固定,内容在后方滚动。
Navigation & Menus
导航与菜单
- Mac OS Dock Magnification - Edge nav, icons scale fluidly on hover.
- Magnetic Button - Pulls toward cursor.
- Gooey Menu - Sub-items detach like viscous liquid.
- Dynamic Island - Morphing pill for status / alerts.
- Contextual Radial Menu - Circular menu expanding at click point.
- Floating Speed Dial - FAB springing into curved secondary actions.
- Mega Menu Reveal - Full-screen dropdown, stagger-fade content.
- Mac OS Dock放大 - 边缘导航,图标悬停时流畅缩放。
- 磁吸按钮 - 向光标方向拉动。
- 粘性菜单 - 子项像粘性液体一样分离。
- 灵动岛 - 用于状态/警报的变形药丸。
- 上下文径向菜单 - 在点击点展开的圆形菜单。
- 浮动快速拨号 - FAB弹出弧形二级操作。
- 巨型菜单展示 - 全屏下拉菜单,交错淡入内容。
Layout & Grids
布局与网格
- Bento Grid - Asymmetric tile grouping (Apple Control Center).
- Masonry Layout - Staggered grid, no fixed row height.
- Chroma Grid - Borders / tiles with subtle animating gradients.
- Split-Screen Scroll - Two halves sliding in opposite directions.
- Sticky-Stack Sections - Sections that pin and stack on scroll.
- Bento网格 - 不对称瓷砖分组(苹果控制中心风格)。
- 瀑布流布局 - 交错网格,无固定行高。
- 彩色网格 - 边框/瓷砖带微妙动画渐变。
- 分屏滚动 - 两半向相反方向滑动。
- 粘性堆叠区域 - 区域在滚动时固定并堆叠。
Cards & Containers
卡片与容器
- Parallax Tilt Card - 3D tilt tracking mouse coordinates.
- Spotlight Border Card - Borders illuminate under cursor.
- Glassmorphism Panel - Frosted glass with inner refraction.
- Holographic Foil Card - Iridescent rainbow shift on hover.
- Tinder Swipe Stack - Physical card stack, swipe-away.
- Morphing Modal - Button expands into its own dialog.
- 视差倾斜卡片 - 3D倾斜跟踪鼠标坐标。
- 聚光灯边框卡片 - 边框在光标下发光。
- 玻璃态面板 - 毛玻璃带内部折射。
- 全息烫金卡片 - 悬停时彩虹色渐变偏移。
- Tinder滑动堆叠 - 物理卡片堆叠,可滑动移除。
- 变形模态框 - 按钮展开为自己的对话框。
Scroll Animations
滚动动画
- Sticky Scroll Stack - Cards stick and physically stack.
- Horizontal Scroll Hijack - Vertical scroll → horizontal pan.
- Locomotive / Sequence Scroll - Video / 3D sequence tied to scrollbar.
- Zoom Parallax - Central background image zooming on scroll.
- Scroll Progress Path - SVG line drawing along scroll.
- Liquid Swipe Transition - Page transition like viscous liquid.
- 粘性滚动堆叠 - 卡片固定并物理堆叠。
- 水平滚动劫持 - 垂直滚动→水平平移。
- Locomotive/序列滚动 - 视频/3D序列与滚动条绑定。
- 缩放视差 - 中央背景图片滚动时缩放。
- 滚动进度路径 - SVG线条随滚动绘制。
- 液态滑动过渡 - 页面过渡像粘性液体。
Galleries & Media
画廊与媒体
- Dome Gallery - 3D panoramic gallery.
- Coverflow Carousel - 3D carousel with angled edges.
- Drag-to-Pan Grid - Boundless draggable canvas.
- Accordion Image Slider - Narrow strips expanding on hover.
- Hover Image Trail - Mouse leaves popping image trail.
- Glitch Effect Image - RGB-channel shift on hover.
- 穹顶画廊 - 3D全景画廊。
- Coverflow轮播 - 带倾斜边缘的3D轮播。
- 拖拽平移网格 - 无边框可拖拽画布。
- 手风琴图片滑块 - 窄条悬停时展开。
- 悬停图片轨迹 - 鼠标移动时留下弹出图片轨迹。
- ** glitch效果图片** - 悬停时RGB通道偏移。
Typography & Text
排版与文本
- Kinetic Marquee - Endless text bands reversing on scroll.
- Text Mask Reveal - Massive type as transparent window to video.
- Text Scramble Effect - Matrix-style decoding on load / hover.
- Circular Text Path - Text curving along spinning circle.
- Gradient Stroke Animation - Outlined text with running gradient.
- Kinetic Typography Grid - Letters dodging the cursor.
- 动态滚动字幕 - 无限文本条滚动时反向。
- 文本遮罩展示 - 大字体作为透明窗口显示视频。
- 文本打乱效果 - 加载/悬停时矩阵风格解码。
- 圆形文本路径 - 文本沿旋转圆形弯曲。
- 渐变描边动画 - 轮廓文本带流动渐变。
- 动态排版网格 - 字母躲避光标。
Micro-Interactions & Effects
微交互与效果
- Particle Explosion Button - CTA shatters into particles on success.
- Liquid Pull-to-Refresh - Reload indicator like detaching droplets.
- Skeleton Shimmer - Shifting light reflection across placeholders.
- Directional Hover-Aware Button - Fill enters from cursor's exact side.
- Ripple Click Effect - Wave from click coordinates.
- Animated SVG Line Drawing - Vectors drawing themselves in real time.
- Mesh Gradient Background - Organic lava-lamp blobs.
- Lens Blur Depth - Background UI blurred to focus foreground action.
- 粒子爆炸按钮 - CTA成功时碎成粒子。
- 液态下拉刷新 - 重新加载指示器像分离的液滴。
- 骨架微光 - 占位符上的移动光反射。
- 方向感知悬停按钮 - 填充从光标精确方向进入。
- 涟漪点击效果 - 从点击坐标扩散的波浪。
- 动画SVG线条绘制 - 矢量实时绘制自身。
- 网格渐变背景 - 有机熔岩灯状 blob。
- 镜头模糊景深 - 背景UI模糊以聚焦前景操作。
Animation Library Choice
动画库选择
- Motion () - default for UI / Bento / state-change motion.
motion/react - GSAP + ScrollTrigger - for full-page scrolltelling and scroll hijacks. Isolate in dedicated leaf components with cleanup.
useEffect - Three.js / WebGL - for canvas backgrounds and 3D scenes. Same isolation rule.
- NEVER mix GSAP / Three.js with Motion in the same component tree. They fight over the same frames.
- Motion () - UI/Bento/状态变化动效的默认选择。
motion/react - GSAP + ScrollTrigger - 用于全页滚动叙事和滚动劫持。在专用叶子组件中隔离,使用清理。
useEffect - Three.js / WebGL - 用于画布背景和3D场景。同样遵循隔离规则。
- 绝不在同一组件树中混合GSAP/Three.js与Motion。它们会争夺同一帧。
11. REDESIGN PROTOCOL
11. 重设计协议
This skill handles greenfield builds AND redesigns. Misclassifying the mode is the single biggest source of bad redesign output.
本技能处理全新构建和重设计。错误分类模式是重设计输出不佳的最大原因。
11.A Detect the Mode (first action)
11.A 检测模式(第一步)
- Greenfield - no existing site, or full overhaul approved. Dial baseline from Section 1.
- Redesign - Preserve - modernise without breaking the brand. Audit first, extract brand tokens, evolve gradually.
- Redesign - Overhaul - new visual language on top of existing content. Treat as greenfield for visuals; preserve content and IA.
If ambiguous, ask once: "Should this redesign preserve the existing brand, or are we starting visually from scratch?"
- 全新构建 - 无现有站点,或已批准彻底改版。使用第1节的基准参数。
- 重设计 - 保留风格 - 现代化但不破坏品牌。先审计,提取品牌令牌,逐步演进。
- 重设计 - 彻底改版 - 在现有内容上使用新视觉语言。视觉上视为全新构建;保留内容和信息架构。
如果模糊,只问一次:“此重设计应保留现有品牌,还是视觉上从头开始?”
11.B Audit Before Touching
11.B 审计后再动手
Document the current state before proposing changes:
- Brand tokens - primary / accent colors, type stack, logo treatment, radii.
- Information architecture - page tree, primary nav, key conversion paths.
- Content blocks - what exists, what's doing work, what's filler.
- Patterns to preserve - signature interactions, recognisable hero, copy voice.
- Patterns to retire - AI-slop tells, broken layouts, dead links, generic stock imagery, perf traps.
- Dial reading of the existing site - infer current /
DESIGN_VARIANCE/MOTION_INTENSITY. That's your starting point, not the baseline.VISUAL_DENSITY - SEO baseline - current ranking pages, meta titles, structured data, OG cards. SEO migration is the #1 redesign risk.
在提出更改前记录当前状态:
- 品牌令牌 - 主色/强调色、字体栈、Logo处理、圆角。
- 信息架构 - 页面树、主导航、关键转化路径。
- 内容块 - 现有内容、有效内容、填充内容。
- 需保留的模式 - 标志性交互、可识别的Hero、文案语气。
- 需淘汰的模式 - AI模板化特征、错误布局、死链接、通用库存图片、性能陷阱。
- 现有站点的参数解读 - 推断当前/
DESIGN_VARIANCE/MOTION_INTENSITY。这是你的起点,而非基准值。VISUAL_DENSITY - SEO基准 - 当前排名页面、元标题、结构化数据、OG卡片。SEO迁移是重设计的#1风险。
11.C Preservation Rules
11.C 保留规则
- Do not change information architecture unless asked. Keep page slugs, anchor IDs, primary nav labels stable for SEO and muscle memory.
- Extract brand colors before applying Section 4.2. A brand that is already purple stays purple - apply the LILA RULE's override.
- Preserve copy voice unless asked for a rewrite. Visual modernisation ≠ content rewrite.
- Honor existing accessibility wins. Do not regress focus states, alt text, keyboard nav, contrast.
- Respect existing analytics events. Do not rename buttons, form fields, section IDs that downstream tracking depends on.
- 除非要求,否则不要更改信息架构。保持页面slug、锚点ID、主导航标签稳定,以利于SEO和用户肌肉记忆。
- 应用第4.2节前提取品牌颜色。已使用紫色的品牌保持紫色——应用紫色规则的例外。
- 除非要求重写,否则保留文案语气。视觉现代化≠内容重写。
- 尊重现有无障碍成果。不要倒退焦点状态、alt文本、键盘导航、对比度。
- 尊重现有分析事件。不要重命名下游跟踪依赖的按钮、表单字段、区域ID。
11.D Modernisation Levers (priority order)
11.D 现代化杠杆(优先级顺序)
Apply in order - stop when the brief is satisfied:
- Typography refresh - biggest visual lift per unit of risk.
- Spacing & rhythm - increase section padding, fix vertical rhythm.
- Color recalibration - desaturate, unify neutrals, keep brand accent.
- Motion layer - add -appropriate micro-interactions to existing components.
MOTION_INTENSITY - Hero & key-section recomposition - restructure top-of-funnel using Section 10 vocabulary.
- Full block replacement - only when the existing block is unsalvageable.
按顺序应用——满足需求时停止:
- 排版刷新 - 每单位风险带来最大视觉提升。
- 间距与节奏 - 增加区域内边距,修复垂直节奏。
- 色彩校准 - 降低饱和度,统一中性色,保留品牌强调色。
- 动效层 - 为现有组件添加适配的微交互。
MOTION_INTENSITY - Hero与关键区域重构 - 使用第10节词汇表重新构建漏斗顶部。
- 完整块替换 - 仅当现有块无法挽救时使用。
11.E Decision Tree: Targeted Evolution vs Full Redesign
11.E 决策树:针对性演进vs彻底重设计
- IA, content, and SEO sound → targeted evolution (Levers 1-4). ~70% of value at ~40% of risk.
- Visual debt is structural (broken IA, no design system, broken mobile) → full redesign with strict content preservation.
- Brand itself is changing → greenfield.
- 信息架构、内容和SEO良好 → 针对性演进(杠杆1-4)。约70%价值,约40%风险。
- 视觉债务结构性(错误信息架构、无设计系统、移动端错误) → 彻底重设计,严格保留内容。
- 品牌本身正在变化 → 全新构建。
11.F What Never Changes Silently
11.F 绝不静默更改的内容
Never modify without explicit user approval:
- URL structure / route slugs.
- Primary nav labels.
- Form field names or order (breaks analytics + autofill).
- Brand logo or wordmark.
- Existing legal / consent / cookie copy.
未经用户明确批准,绝不修改:
- URL结构/路由slug。
- 主导航标签。
- 表单字段名称或顺序(破坏分析+自动填充)。
- 品牌Logo或字标。
- 现有法律/同意/Cookie文案。
12. THE BLOCK LIBRARY (Contract - Implementations Land Here Iteratively)
12. 块库(契约 - 实现迭代添加于此)
The Reference Vocabulary (Section 10) names patterns. The Block Library implements them with real props, real motion specs, and real code sketches.
Status: schema defined here. Blocks will be added iteratively. Do not freelance new blocks without following this schema.
参考词汇表(第10节)命名模式。块库用真实props、真实动效规格和真实代码示例实现这些模式。
状态: 此处定义 schema。块会迭代添加。不要不遵循此schema自行创建新块。
12.A File Location
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/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 Required Frontmatter
12.B 必填前置元数据
yaml
---
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"]
---yaml
---
name: asymmetric-split-hero
category: hero
dial_compatibility:
variance: [6, 10]
motion: [3, 10]
density: [2, 5]
when_to_use: "适用于有一个强资产和一个强信息的着陆页。SaaS、代理机构、高端消费级的默认Hero。"
not_for: "信息本身就是设计的社论/宣言发布场景。"
stack: ["react", "next", "tailwind", "motion"]
---12.C Required Body Sections
12.C 必填正文部分
- Visual sketch - short ASCII or description of the layout.
- Props API - the component's interface.
- Code sketch - minimal working implementation (Server Component default, Client island for motion).
- Mobile fallback - explicit collapse rules for .
< 768px - Motion variants - one variant per band (1-3, 4-7, 8-10). Reduced-motion fallback explicit.
MOTION_INTENSITY - Dark-mode notes - token strategy specific to this block.
- Anti-patterns - common ways this block goes wrong.
- References - links to real examples in production.
- 视觉草图 - 简短ASCII或布局描述。
- Props API - 组件接口。
- 代码示例 - 最小可工作实现(默认Server Component,动效使用Client island)。
- 移动端降级 - 的明确折叠规则。
< 768px - 动效变体 - 每个区间(1-3、4-7、8-10)对应一个变体。明确减少动效降级方案。
MOTION_INTENSITY - 深色模式说明 - 此块特定的令牌策略。
- 反模式 - 此块常见的错误用法。
- 参考 - 生产环境中的真实示例链接。
12.D Block-Library Discipline
12.D 块库规则
- One block per file. No multi-block files.
- Every block must work standalone (drop it into a page, it renders).
- Every block must pass the Pre-Flight Check (Section 14).
- Blocks that depend on a design system from Section 2.A live under (e.g.
blocks/<category>/<name>--<system>.md).feature/bento-grid--material.md
- 每个文件一个块。不要多块文件。
- 每个块必须可独立工作(放入页面即可渲染)。
- 每个块必须通过预发布检查(第14节)。
- 依赖第2.A节设计系统的块放在下(如
blocks/<category>/<name>--<system>.md)。feature/bento-grid--material.md
13. OUT OF SCOPE
13. 超出范围
This skill is NOT for:
- Dashboards / dense product UI / admin panels (use Fluent, Carbon, Atlassian, or Polaris from Section 2.A).
- Data tables (use TanStack Table or AG Grid).
- Multi-step forms / wizards (use Form-specific patterns; this skill won't make them better).
- Code editors (use Monaco / CodeMirror with their official skinning).
- Native mobile (use Apple HIG / Material directly).
- Realtime collab UIs (presence, cursors, OT-aware - different problem class).
If the brief is one of the above, say so explicitly, point to the right tool, and only apply this skill's marketing-page / about-page / landing-page parts to the surfaces where they apply.
本技能不适用于:
- 仪表盘/密集产品UI/管理面板(使用第2.A节的Fluent、Carbon、Atlassian或Polaris)。
- 数据表(使用TanStack Table或AG Grid)。
- 多步骤表单/向导(使用表单特定模式;本技能无法优化它们)。
- 代码编辑器(使用Monaco/CodeMirror官方皮肤)。
- 原生移动端(直接使用Apple HIG/Material)。
- 实时协作UI(在线状态、光标、OT感知 - 不同问题类别)。
如果需求属于上述任一情况,明确说明,指向正确工具,仅将本技能的营销页面/关于页面/着陆页部分应用于适用的界面。
14. FINAL PRE-FLIGHT CHECK
14. 最终预发布检查
Run this matrix before outputting code. This is the last filter.
THIS IS NOT OPTIONAL. Run every box. If any box fails, the output is not done.
- Brief inference declared (Section 0.B one-liner)?
- Dial values explicit and reasoned from the brief, not silently using baseline?
- Design system chosen from Section 2 if applicable, or aesthetic labeled honestly?
- Redesign mode detected and audit performed (if applicable, Section 11)?
- ZERO em-dashes () anywhere on the page. Headlines, eyebrows, pills, body, quotes, attribution, captions, buttons, alt text. Zero. (Section 9.G - non-negotiable.)
— - Page Theme Lock: ONE theme (light, dark, or auto) for the whole page. No section flips to inverted mode mid-page (Section 4.11)?
- Color Consistency Lock: one accent color used identically across all sections (Section 4.2)?
- Shape Consistency Lock: one corner-radius system applied consistently (Section 4.4)?
- Button Contrast Check: every CTA text is readable against its background (no white-on-white, WCAG AA 4.5:1)?
- CTA Button Wrap: no CTA label wraps to 2+ lines at desktop?
- Form Contrast Check: form inputs, placeholders, focus rings, labels all pass WCAG AA against the section background?
- Serif discipline: if a serif is used, it is NOT Fraunces or Instrument_Serif (or it is, with explicit brand justification)? Different serif from your previous project?
- Premium-consumer palette check: if the brief is premium-consumer (cookware / wellness / artisan / luxury), the palette is NOT the AI-default beige+brass+oxblood+espresso family? Different family from your previous premium-consumer project?
- Italic descender clearance: every italic word with has
y g j p qmin +leading-[1.1]reserve?pb-1 - Hero fits the viewport: headline ≤ 2 lines, subtext ≤ 20 words AND ≤ 4 lines, CTA visible without scroll, font scale planned around image?
- Hero top padding: max at desktop, hero content does not float halfway down the viewport?
pt-24 - Hero stack discipline: max 4 text elements in hero (eyebrow OR brand strip, headline, subtext, CTAs)? No tiny tagline below CTAs, no trust micro-strip in hero?
- EYEBROW COUNT (mechanical): count instances of micro-labels above section headlines across all components. Count ≤ ceil(sectionCount / 3)? Hero counts as 1.
uppercase tracking - Split-Header Ban: no "left big headline + right small explainer paragraph" pattern as a section header (vertical stack instead)?
- Zigzag Alternation Cap: no 3+ consecutive sections with the same image+text-split layout?
- No Duplicate CTA Intent: no two CTAs with the same intent ("Get in touch" + "Let's talk" both on page = Fail)?
- Logo wall = logo only: no industry / category labels printed below logos?
- Bento Background Diversity: at least 2-3 bento cells have real visual variation (image, gradient, pattern), not all white-on-white text cards?
- "Used by / Trusted by" logo wall lives UNDER the hero, not inside it, uses REAL SVG logos (Simple Icons / devicon) or generated SVG marks, NOT plain text wordmarks?
- Copy Self-Audit: every visible string re-read, no grammatically-broken or AI-hallucinated phrases ("free on its past" type) shipped?
- Motion motivated: every animation can be justified in one sentence (hierarchy / storytelling / feedback / state transition), no GSAP-for-show?
- Marquee max-one-per-page: no two horizontal marquees on the same page?
- Navigation on ONE line at desktop, height ≤ 80px?
- Section-Layout-Repetition check: no two sections share the same layout family (at least 4 different families across 8 sections)?
- Bento has rhythm AND exact cell count (N items → N cells, no empty cells in middle or at end)?
- Long lists use the right UI component (not default with
<ul>for > 5 items - see Section 4.9 alternatives)?divide-y - Real images used (gen-tool first, then Picsum-seed, then explicit placeholder slots) - NO div-based fake screenshots, NO hand-rolled decorative SVGs, NO pure-text minimalism?
- No pills/labels overlaid on images (no , no
Plate · Brand)?Field notes - journal - No photo-credit captions as decoration ()?
Field study no. 12 · Ines Caetano - No version footers (,
v1.4.2) on marketing pages?Build 0048 - No micro-meta-sentences under eyebrows ("Each of these is a feature we ship today...")?
- No decoration text strip at hero bottom ()?
BRAND. MOTION. SPATIAL. - No floating top-right sub-text in section headings?
- No scoring/progress bars with filled background tracks as comparison visuals?
- No locale / city-name / time / weather strips unless brief is genuinely globally-distributed or place-focused?
- No scroll cues (,
Scroll,↓ scroll)?Scroll to explore - No version labels in hero (V0.6, BETA, INVITE-ONLY) unless the brief is a launch?
- No section-numbering eyebrows (,
00 / INDEX,001 · Capabilities)?06 · how it works - No decorative dots (zero by default, only for real semantic state)?
- No +
border-ton every row of long lists / spec tables?border-b - Content density sane: no 20-row data tables, no fake-precise specs without justification, ≤ 25-word sub-paragraphs by default?
- Quotes ≤ 3 lines of body, attribution clean (no em-dash)?
- Motion claimed = motion shown: if , page actually animates, not just claimed?
MOTION_INTENSITY > 4 - GSAP sticky-stack / horizontal-pan implemented per Section 5.A / 5.B canonical skeleton (,
start: "top top", correct scrub)?pin: true - No - using Motion
window.addEventListener('scroll')/ ScrollTrigger / IntersectionObserver / CSS scroll-driven animations only?useScroll() - Reduced motion wrapped for everything ?
MOTION_INTENSITY > 3 - Dark mode tokens defined and tested in both modes?
- Mobile collapse explicit (,
w-full,px-4) for high-variance layouts?max-w-7xl mx-auto - Viewport stability: , never
min-h-[100dvh]?h-screen - animations have strict cleanup functions?
useEffect - Empty / loading / error states provided?
- Cards omitted in favor of spacing where possible?
- Icons from an allowed library only (Phosphor / HugeIcons / Radix / Tabler), no hand-rolled SVG paths?
- Motion isolated in client-leaf components with at the top, memoized?
'use client' - No AI Tells from Section 9 (Inter as default, AI-purple, three-equal cards, Jane Doe, Acme, "Quietly in use at")?
- Core Web Vitals plausibly hit (LCP < 2.5s, INP < 200ms, CLS < 0.1)?
- One design system per project (no Material + shadcn mixed)?
If a single checkbox cannot be honestly ticked, the page is not done. Fix it before delivering.
输出代码前运行此检查矩阵。这是最后一道过滤。
这不是可选的。检查每个项。如果任何项失败,输出未完成。
- 需求推断已声明(第0.B节的一句话)?
- 参数值明确且由需求推导,而非静默使用基准值?
- 设计系统已从第2节选择(如适用),或审美已诚实标注?
- 重设计模式已检测并完成审计(如适用,第11节)?
- 页面上无破折号()。标题、眉题、药丸、正文、引用、署名、说明、按钮、alt文本。零破折号。(第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 - Hero在视口内完整显示:标题≤2行,副标题≤20个单词且≤4行,CTA无需滚动即可看到,字体比例与图片匹配?
- Hero顶部内边距:桌面端最大,Hero内容不漂浮在视口中间?
pt-24 - Hero内容层级规则:Hero中最多4个文本元素(眉题或品牌条、标题、副标题、CTAs)?CTAs下方无小标语,Hero中无信任微条?
- 眉题数量(机械性检查):统计所有区域组件中微标签位于标题上方的实例数量。数量≤ceil(区域数量/3)?Hero算1个区域。
uppercase tracking - 无分栏标题:无“左大标题+右小解释段落”作为区域标题(改用垂直堆叠)?
- Z字形交替上限:无3+连续区域使用相同图文分割布局?
- 无重复CTA意图:无两个意图相同的CTA(“Get in touch”+“Let's talk”同时在页面上=失败)?
- Logo墙仅含Logo:Logo下方无行业/类别标签?
- Bento背景多样性:至少2-3个Bento单元格有真实视觉变化(图片、渐变、图案),不是全白卡白字?
- “Used by/Trusted by”Logo墙位于Hero下方,而非内部,使用真实SVG Logo(Simple Icons/devicon)或生成的SVG标记,而非纯文本字标?
- 文案自我审计:重新阅读每个可见字符串,无语法错误或AI幻觉短语(如“free on its past”类型)交付?
- 动效有动机:每个动画能用一句话说明理由(层级/叙事/反馈/状态过渡),无为了使用GSAP而使用?
- 每页最多一个滚动字幕:同一页面无两个水平滚动字幕?
- 导航桌面端单行显示,高度≤80px?
- 区域布局重复检查:无两个区域使用相同布局类型(8个区域至少4种不同类型)?
- Bento有节奏且单元格数量精确(N个内容项→N个单元格,中间或末尾无空单元格)?
- 长列表使用正确UI组件(>5个项时不使用默认带
<ul>- 见第4.9节替代方案)?divide-y - 使用真实图片(优先生成工具,然后Picsum种子,然后明确占位符) - 无基于div的假截图,无手动绘制装饰性SVG,无纯文本极简主义?
- 图片上无药丸/标签覆盖(无、无
Plate · Brand)?Field notes - journal - 无装饰性照片署名()?
Field study no. 12 · Ines Caetano - 营销页面无版本页脚(、
v1.4.2)?Build 0048 - 眉题下无微元句子(“Each of these is a feature we ship today...”)?
- Hero底部无装饰文本条()?
BRAND. MOTION. SPATIAL. - 区域标题右上角无浮动子文本?
- 无带填充背景轨道的评分/进度条作为对比视觉?
- 无区域/城市名称/时间/天气条,除非需求确实是全球分布或地点聚焦?
- 无滚动提示(、
Scroll、↓ scroll)?Scroll to explore - Hero中无版本标签(V0.6、BETA、INVITE-ONLY),除非需求是发布?
- 无区域编号眉题(、
00 / INDEX、001 · Capabilities)?06 · how it works - 无装饰性点(默认零,仅用于真实语义状态)?
- 长列表/规格表每行无+
border-t?border-b - 内容密度合理:无20行数据表,无无理由的虚假精确规格,副标题默认≤25个单词?
- 引用正文≤3行,署名简洁(无破折号)?
- 动效声明=动效实现:如果,页面实际动画,而非仅声明?
MOTION_INTENSITY > 4 - GSAP粘性堆叠/水平平移按第5.A/5.B节标准代码骨架实现(、
start: "top top"、正确滚动控制)?pin: true - 无- 仅使用Motion
window.addEventListener('scroll')/ScrollTrigger/IntersectionObserver/CSS滚动驱动动画?useScroll() - 所有的动效都包裹了减少动效处理?
MOTION_INTENSITY > 3 - 深色模式令牌已定义并在两种模式下测试?
- 高方差布局的移动端折叠明确声明(、
w-full、px-4)?max-w-7xl mx-auto - 视口稳定:,绝不使用
min-h-[100dvh]?h-screen - 动画有严格的清理函数?
useEffect - 提供空/加载/错误状态?
- 尽可能用间距替代卡片?
- 图标仅来自允许的库(Phosphor/HugeIcons/Radix/Tabler),无手动绘制SVG路径?
- 动效隔离在顶部带的客户端叶子组件中,已 memoize?
'use client' - 无第9节的AI特征(默认Inter、AI紫色、三个均等卡片、Jane Doe、Acme、“Quietly in use at”)?
- 核心Web指标 plausibly达标(LCP <2.5s,INP <200ms,CLS <0.1)?
- 每个项目一个设计系统(无Material+shadcn混合)?
如果有一个复选框无法诚实勾选,页面未完成。交付前修复。
APPENDICES - Real Source-Backed Reference Material
附录 - 真实来源支持的参考资料
The sections below are vendored reference content. They give the agent real install commands, real canonical doc links, and real working starter snippets for each design system named in Section 2. Use them to ground decisions in production reality, not training-data fiction.
以下部分是引入的参考内容。它们为Agent提供真实安装命令、真实标准文档链接和每个第2节命名设计系统的真实工作启动代码片段。用它们将决策基于生产现实,而非训练数据虚构。
Appendix A - Install Commands per Design System
附录A - 各设计系统安装命令
bash
undefinedbash
undefinedMaterial Web (Material 3)
Material Web(Material 3)
npm install @material/web
npm install @material/web
Fluent UI React (v9)
Fluent UI React(v9)
npm install @fluentui/react-components
npm install @fluentui/react-components
Fluent UI Web Components (framework-free)
Fluent UI Web Components(无框架)
npm install @fluentui/web-components @fluentui/tokens
npm install @fluentui/web-components @fluentui/tokens
IBM Carbon
IBM Carbon
npm install @carbon/react @carbon/styles
npm install @carbon/react @carbon/styles
Radix Themes
Radix Themes
npm install @radix-ui/themes
npm install @radix-ui/themes
shadcn/ui (open code, owned components)
shadcn/ui(开源代码,自主组件)
npx shadcn@latest init
npx shadcn@latest add button card badge separator input
npx shadcn@latest init
npx shadcn@latest add button card badge separator input
Primer CSS (GitHub product/devtool UI)
Primer CSS(GitHub产品/开发工具UI)
npm install --save @primer/css
npm install --save @primer/css
Primer Brand (GitHub marketing UI)
Primer Brand(GitHub营销UI)
npm install @primer/react-brand
npm install @primer/react-brand
GOV.UK Frontend
GOV.UK Frontend
npm install govuk-frontend
npm install govuk-frontend
USWDS (US Web Design System)
USWDS(美国Web设计系统)
npm install uswds
npm install uswds
Atlassian Design System (Atlaskit)
Atlassian设计系统(Atlaskit)
yarn add @atlaskit/css-reset @atlaskit/tokens @atlaskit/button @atlaskit/badge @atlaskit/section-message @atlaskit/card
yarn add @atlaskit/css-reset @atlaskit/tokens @atlaskit/button @atlaskit/badge @atlaskit/section-message @atlaskit/card
Bootstrap 5.3
Bootstrap 5.3
npm install bootstrap
npm install bootstrap
Shopify Polaris Web Components (Shopify apps only)
Shopify Polaris Web Components(仅Shopify应用)
Add this to your app HTML head:
在应用HTML头部添加:
<meta name="shopify-api-key" content="%SHOPIFY_API_KEY%" />
<meta name="shopify-api-key" content="%SHOPIFY_API_KEY%" />
<script src="https://cdn.shopify.com/shopifycloud/polaris.js"></script>
<script src="https://cdn.shopify.com/shopifycloud/polaris.js"></script>
undefinedundefinedAppendix B - Canonical Sources (read these before reinventing)
附录B - 标准来源( reinvent前阅读)
Material Web
Material Web
Fluent UI
Fluent UI
Carbon
Carbon
Shopify Polaris
Shopify Polaris
Atlassian
Atlassian
Primer
Primer
GOV.UK
GOV.UK
USWDS
USWDS
Bootstrap
Bootstrap
Tailwind
Tailwind
Radix
Radix
shadcn/ui
shadcn/ui
Native CSS / W3C standards
原生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/
- 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 platforms only)
Apple液态玻璃(仅苹果平台)
Appendix C - Apple Liquid Glass: Honest Web Approximation
附录C - Apple液态玻璃:诚实的Web近似实现
Do not treat random CSS snippets as official Apple Liquid Glass.
不要将随机CSS片段视为官方Apple液态玻璃。
What is official
什么是官方的
Apple documents Liquid Glass inside Apple's Human Interface Guidelines and Developer Documentation for Apple platforms. It is a dynamic material used across Apple platform UI. Apple's native implementation belongs to Apple platform APIs and system components, not a public web CSS package.
Relevant official docs:
- Apple Human Interface Guidelines → Materials
- Apple Developer Documentation → Liquid Glass
- Apple Developer Documentation → Adopting Liquid Glass
- SwiftUI → Material
Apple在Apple人机界面指南和开发者文档中为苹果平台文档化了液态玻璃。它是苹果平台UI中使用的动态材质。Apple的原生实现属于苹果平台API和系统组件,不是公共Web CSS包。
相关官方文档:
- Apple人机界面指南 → 材质
- Apple开发者文档 → 液态玻璃
- Apple开发者文档 → 采用液态玻璃
- SwiftUI → Material
What is NOT official
什么不是官方的
There is no from Apple for normal websites.
liquid-glass.cssA web approximation can use:
backdrop-filter- transparent backgrounds
- layered borders
- highlight overlays
- gradients
- motion
- strong contrast fallbacks
But that is web glassmorphism / frosted-glass approximation, not official Apple Liquid Glass. Label it as such in comments.
没有苹果为普通网站提供的。
liquid-glass.cssWeb近似实现可使用:
backdrop-filter- 透明背景
- 分层边框
- 高亮覆盖层
- 渐变
- 动效
- 高对比度降级方案
但这是Web玻璃态/毛玻璃近似实现,而非官方Apple液态玻璃。在注释中明确标注。
Safer web approximation skeleton
更安全的Web近似实现骨架
css
.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;
}
}Important: has uneven browser support; test it. Always provide enough contrast even without blur.
prefers-reduced-transparencyEnd of appendices. Install commands above are reality anchors. The Apple Liquid Glass skeleton is a labeled approximation, not an Apple-issued package. For canonical docs per design system, consult the system's official docs (links in Section 2 plus Appendix B).
css
.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液态玻璃骨架是标注的近似实现,而非苹果发布的包。每个设计系统的标准文档,参考第2节链接加附录B。",