finesse-ui
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesefinesse — Technically Spectacular · Soul-Distinct · Never Cheap
finesse — 技术惊艳 · 风格独特 · 绝不廉价
finesse builds two kinds of interface and routes by register (§0):
- brand — design IS the product: landing pages, brand sites, launches, portfolios, hero pages. Optimize for spectacle + soul + first impression — a real visual engine, an opinionated personality.
- product — design SERVES the product: dashboards, admin panels, analytics, data tables, app shells, settings. Optimize for clarity + density + usability — and still never cheap.
The through-line is identical: high craft, zero AI-slop. What applies to both is the universal craft floor (tinted neutrals, no/#fff, translucent/hairline borders, tinted shadows, contrast floors), the cheapness blacklist (§6), and the pre-flight (§8). What forks is the substrate above that floor and the middle: brand lays the §3 brand substrate (#000— grain, vignette, display type) and reaches for a hero engine (§4); product lays its own substrate (design-dna.md§0 — surfaces, cards, KPI tiles, density) and reaches for a component system + data viz. A dashboard is a different design language, not a brand page with charts — it does not inherit grain / vignette / giant hero type / dark-default / a hero engine.product-ui.mdTwo more registers sit alongside them, and they work differently from each other. commerce (PDP/PLP/cart/checkout) is a hybrid — route it to brand or product by what the specific page is doing. h5 (phone-only screens: app UI, 活动页, mobile PDP, report H5) is a container: it fixes the frame, the safe areas, the thumb hierarchy, and the OS furniture, then wraps one of the other three for the content grammar underneath. A mobile PDP is+h5; an app dashboard screen iscommerce+h5. h5 never replaces a content register — it wraps one.productEvery rule below is contextual. Nothing fires automatically. Read the brief, set the register, then pull only what fits. A skill that produces the same page for every brief has failed.
finesse 构建两类界面,并按注册类型(§0)分路由处理:
- 品牌类 — 设计即产品:落地页、品牌官网、发布页、作品集、首屏Hero页面。优化方向为视觉特效+风格内核+第一印象——搭载真实视觉引擎,具备鲜明个性。
- 产品类 — 设计服务于产品:仪表盘、管理面板、分析界面、数据表、应用壳、设置页。优化方向为清晰度+信息密度+可用性——同时保持绝不廉价的质感。
贯穿始终的核心原则是:精湛工艺,零AI粗糙产物。两类界面通用的规则包括通用工艺底线(带色调的中性色、禁用纯/#fff、半透明细边框、带色调阴影、对比度底线)、廉价设计黑名单(§6)和预检查(§8)。差异点在于底线之上的底层框架:品牌类采用§3品牌底层框架(#000——纹理、暗角、展示型字体),并搭配首屏引擎(§4);产品类采用专属底层框架(design-dna.md§0——高级表面/卡片、KPI tiles、信息密度),并搭配组件系统+数据可视化。仪表盘采用独立设计语言,而非带图表的品牌页面——它不会继承纹理/暗角/超大首屏字体/深色默认主题/首屏引擎。product-ui.md另外还有两类注册类型,彼此运作方式不同。电商类(商品详情页/列表页/购物车/结算页)是混合类型——根据具体页面的功能,路由到品牌类或产品类。H5类(仅手机端页面:应用UI、活动页、移动端商品详情页、报告H5)是容器类型:它固定帧尺寸、安全区域、拇指操作层级和系统组件,再包裹另外三类界面作为内容。移动端商品详情页是+h5;应用仪表盘页面是commerce+h5。H5不会替代内容注册类型,仅作为容器包裹。product以下所有规则均上下文相关,不会自动触发。先阅读需求brief,设置注册类型,再选用适配的规则。如果一个工具对所有需求都生成相同页面,那它已经失效。
How to use this skill
如何使用本技能
- Check the scope before anything else. If the brief is a single element — a button, an input, a card, a modal, a toast — go to and follow it instead; steps 1–6 below are page apparatus and are wrong for one component. Detection and the ambiguity question live in that file.
references/component-scope.md - Run §0 Brand Read — read (the rotation memory,
.finesse/log.json§4), then infer register (brand vs product) + soul before touching code. Output the Design Read: the coordinate line, a plaindivergence.mdline the user can actually veto, theYou'll see:line naming every slot a picture would carry and where it would come from, its two most likely objections, and the rotation as a sentence (§0.B). Before writing thatImages:line, check this session's actual tool list — an image-gen tool, an MCP image tool, a network fetch, or none — because it decides what you can honestly offer (Images:§1), and prove the one you're about to name actually runs here before naming it (§1.1 — listed is not usable; a generator with no credential is not Path A). Offer it and wait; never generate or download off your own inference.asset-sourcing.md - Set the §1 Three Dials (SOUL · SPECTACLE · DENSITY). Product register pins SPECTACLE low, DENSITY high.
- Lay the substrate — the right one for the register. All share the universal craft floor (tinted neutrals, no /
#fff, translucent/hairline borders, tinted shadows, contrast floors —#000§1). Above that floor the substrate forks:references/design-dna.md- brand → the §3 brand substrate (): grain, vignette,
references/design-dna.mddisplay type, dark-default, layered hero depth.clamp() - product → the product substrate (§0): premium surfaces/cards, KPI tiles, floating panels, fixed type scale, feedback-only motion. Never pour grain / vignette / giant hero type / dark-default / a hero engine into a dashboard — that's brand grammar, not product grammar.
references/product-ui.md - h5 → the frame comes first (§1): the viewport contract, the locked
references/h5-mobile.md+ scrollingbody, the 560px desktop phone frame, then the safe-area math (§2). Only after the frame is standing do you lay the substrate of the register it wraps.#app
- brand → the §3 brand substrate (
- Then the paths fork further:
- brand → pick a §2 Soul () and build one §4 Hero Engine (
references/style-personas.md).references/hero-engines.md - product → pick a palette from first (the neutral ramp is 80% of the pixels; skipping this step is how every dashboard comes out blue). Then split by the page's job:
references/product-palettes.md- pages you read — dashboards, analytics, monitoring → (density, tables, charts, interaction states). Before writing, open the closest dashboard in
references/product-ui.md(index:examples/) to seeexamples/EXAMPLES.md§0 applied in shipped code — lift patterns, not whole files.product-ui.md - pages you operate — publish/create wizards, merchant & admin consoles, config, settings, review queues → on top of
references/workflow-ui.md(workflow shell, numbered sections, radio-card choices, live preview, pre-submit check, derived totals, draft/commit). There is no form-workflow page inproduct-ui.md— build from the reference, and do not force-fit a dashboard example onto a form.examples/ - pages you delegate on — AI 工作台, agent consoles, copilot UI, anything where something other than the user does work over a duration → on top of
references/ai-console.md(three tenses on one screen, the run stream, nine run states, a resident stop, the in-stream approval card, cost as a receipt). Openproduct-ui.md. A dashboard fails by being unreadable and a console by being unfinishable; this one fails by being untrustworthy, and none of the dashboard parts address that.examples/relay-agent-console.html
- pages you read — dashboards, analytics, monitoring →
- h5 → pick one of the six morphologies (§4: app shell · paged deck · snap narrative · commerce stack · longform site · ambient screen), then load the content register it wraps and follow that bullet above. Build the native furniture from
h5-mobile.md§5 rather than inventing it — a TabBar is a convention, not a design opportunity.h5-mobile.md
- brand → pick a §2 Soul (
- Assemble the skeleton — again, the right one for the register. brand → pick one of the four §5 brand skeletons (landing · portfolio · lookbook · studio) by what the page has to do. product → the skeleton is the shell morphology in §1 (sidebar · floating panel · bento · triptych …), not §5. h5 → the skeleton is the frame (§1) plus the chosen morphology (§4); §5's brand skeletons and
product-ui.md§1's desktop shells are both wrong inside 390px. Motion-motivated only, in all three.product-ui.md - Run the §6 Cheapness Blacklist (), the mobile floor (
references/anti-cheap.md), and §8 Pre-Flight (references/mobile-floor.md) before shipping. h5 builds runreferences/preflight.md§9–§10 instead of the mobile floor — the notch/frame/scroll/touch gates, which are a different set of failures from "a desktop page reaching a phone". Then record the build — append toh5-mobile.mdand stamp the CSS (.finesse/log.json§4.3). An unrecorded build is one the next run will collide with.divergence.md
The files are the deep material. Load the one you need for the current phase — do not inline all of them.
references/*.md| Reference | When to load |
|---|---|
| Before the Brand Read, when the brief is one element, not a page — a button, an input, a card, a modal. Routes to the component flow: keeps the register + craft floor + existing tokens, skips the skeleton / hero engine / rotation, and enforces the one gate that decides whether a component is well-made — all eight states shipped, plus a preview file that makes them visible instead of claimed |
| At §0, before the Design Read — the anti-sameness layer. Load it when output keeps converging, when the user says "feels generic / like every other AI site", or before any soul decision: the five-axis composition method (compose a soul, don't select one from a list), the anti-default two-altitude check, the die roll that breaks the model's argmax, and the assert-then-confirm direction proposal. §4 is the memory — |
| Laying the brand substrate (grain, vignette, display type, color tokens, palette families). Product/dashboard inherits only its universal craft floor (§1: tinted neutrals, translucent borders, contrast floors) — the surfaces/cards/type/motion of a dashboard come from |
| Brief asks for a light/dark toggle or multiple swappable named themes — the token-role and hardcoded-color pitfalls of a runtime palette switch (not the single-locked-palette default) |
| Any brief that mentions motion — 动效 · 炫酷 · "make it move" · "有动画" — and every |
| Building the hero engine (brand register); also covers a secondary motion vocabulary (split-char reveal, magnetic buttons, curtain wipe, scan-line, per-card fly-in) for non-hero moments elsewhere on the page — the decision layer (which engine). Scope note: these are the two heaviest routes (R4 GSAP · R5 Canvas/WebGL) of the six in |
| The brand implementation layer — what |
| The page only ever lives on a phone — H5 / 移动端页面 / 活动页 / 小程序页 / app UI 原型 / mobile PDP / 报告 H5. The fourth register, and a container one: it fixes the frame and wraps another register for content. Carries the viewport contract, the locked- |
| Any build that will be seen on a phone — i.e. nearly all of them. The six mechanical causes of a broken phone layout, with the fix for each: |
| Adding a 3D moment — CSS tilt/flip/coverflow/depth-parallax or Three.js model/displacement |
| Picking a soul (brand register) |
| Persona picked but you want a wider menu of proven techniques for that soul, or the brief doesn't fit any of the 10 personas cleanly |
| Any time you are writing text the user reads — the §0.B Design Read, |
| Before any delivery — cheapness scan |
| Dashboard / admin / data app — pages you read (product register) |
| Pages you operate (product register): publish/create wizards, merchant & admin consoles, config, settings, review queues — the workflow shell, numbered section cards, radio-card choices, live-preview aside, pre-submit check, derived budget panels, draft/commit |
| Something other than the user is doing the work, and the page's job is to make that trustworthy — AI 工作台 / agent console / 智能体控制台 / copilot UI / 值守台. A capability layer, not a page type: decide 后台 vs 工作台 first (§1's resolver), pick the body, then stack this on — it fails by being untrustworthy rather than unreadable or unfinishable, and that failure can land on any of them. Carries the four questions it must answer continuously, the three tenses on one screen (queue · live run · history), the run stream that replaces the chart as the centrepiece, the nine run states that |
| Any product-register page — the color layer |
| The positive-reference corpus — 22 real shipped pages (9 brand + 8 dashboards + 1 AI console + 4 H5) with a per-file "what to study" table. Open the closest one before building, especially for dashboards and phone shells (lift patterns, not whole files) |
| Chart-heavy product UI beyond the starter table — full 25-type selection matrix, a11y grade + mandatory fallback, library picks (the decision layer) |
| Any hand-built dashboard chart in a single self-contained file (mandatory for bars — the barcode-chart trap) — the no-library implementation layer: the value→height rule, |
| Product detail page (PDP), listing/category page (PLP), cart, checkout — commerce register |
| At §0.B, as soon as the page has anywhere a picture would carry it — a hero, a gallery, an H5 cover or scene, a PDP shot, even a dashboard's empty state or avatar row. Not a category checklist and not a delivery-time scan: the paths (generate · real stock · generative placeholder) and the ask-first gate on all of them only work if they fire before the layout is written. Carries the session-capability check that decides which path you can honestly offer, and the rule that naming images is an offer the user answers — never a licence to generate or download |
| Final checklist before saying "done" |
| Multi-page projects — token consistency |
| Upgrading an existing page — audit-first protocol |
| Read-only diagnostic — cheapness + spectacle + preflight scan |
| New project — write |
| Existing codebase — extract |
- 首先检查范围。如果需求是单个元素——按钮、输入框、卡片、弹窗、提示框——请前往并遵循其流程;以下步骤1-6针对完整页面流程,不适用于单个组件。范围判断和歧义处理见该文件。
references/component-scope.md - 执行**§0 品牌需求解读**——读取(风格轮换记录,
.finesse/log.json§4),然后推断注册类型(品牌类vs产品类)+风格内核,再开始编写代码。输出需求解读结果:坐标信息、用户可直接否决的「预期效果」描述、「图片」说明(列出所有需要图片的位置及来源)、最可能的两个异议,以及风格轮换说明(§0.B)。在编写「图片」说明前,检查当前会话的实际工具列表——是否有图像生成工具、MCP图像工具、网络获取工具,或者没有——这决定了你能真实提供的方案(divergence.md§1),并且在命名前确认该工具确实可用(§1.1——列出不代表可用;无凭证的生成工具无法作为首选方案)。提出方案后等待用户确认;切勿自行推断并生成或下载资源。asset-sourcing.md - 设置**§1 三个调节旋钮**(SOUL · SPECTACLE · DENSITY)。产品类注册类型固定SPECTACLE为低、DENSITY为高。
- 搭建底层框架——对应注册类型的正确框架。所有界面均共享通用工艺底线(带色调的中性色、禁用纯/
#fff、半透明细边框、带色调阴影、对比度底线——#000§1)。底线之上的框架分为两类:references/design-dna.md- 品牌类 → §3 品牌底层框架():纹理、暗角、
references/design-dna.md展示型字体、深色默认主题、分层首屏深度。clamp() - 产品类 → 产品底层框架(§0):高级表面/卡片、KPI tiles、浮动面板、固定字体比例、仅反馈型动效。切勿将纹理/暗角/超大首屏字体/深色默认主题/首屏引擎应用到仪表盘——这些是品牌类设计语法,而非产品类。
references/product-ui.md - H5类 → 先搭建框架(§1):视口约定、锁定
references/h5-mobile.md+滚动body、560px桌面端手机帧,然后进行安全区域计算(§2)。框架搭建完成后,再为其包裹的注册类型搭建对应的底层框架。#app
- 品牌类 → §3 品牌底层框架(
- 然后进一步分支处理:
- 品牌类 → 选择**§2 风格内核**()并构建一个§4 首屏引擎(
references/style-personas.md)。references/hero-engines.md - 产品类 → 首先从选择调色板(中性色阶占80%像素;跳过此步骤会导致所有仪表盘都默认使用蓝色)。然后根据页面功能拆分:
references/product-palettes.md- 浏览型页面 ——仪表盘、分析界面、监控界面 → (信息密度、表格、图表、交互状态)。编写前,打开
references/product-ui.md中最接近的示例(索引:examples/),查看examples/EXAMPLES.md§0在实际代码中的应用——借鉴模式,而非直接复制文件。product-ui.md - 操作型页面 ——发布/创建向导、商家与管理控制台、配置页、设置页、审核队列 → 在基础上叠加
product-ui.md(工作流框架、编号章节、单选卡片选项、实时预览、提交前检查、派生总计、草稿/提交)。references/workflow-ui.md中没有表单工作流页面示例——请参考文档构建,切勿强行套用仪表盘示例到表单页面。examples/ - 委托型页面 ——AI 工作台、Agent控制台、Copilot UI、任何由用户之外的主体执行持续任务的页面 → 在基础上叠加
product-ui.md(单屏展示三种时态、运行流、九种运行状态、常驻停止控件、流内审核卡片、成本回执)。打开references/ai-console.md。仪表盘的失败点是可读性差,控制台的失败点是无法完成操作;此类页面的失败点是不可信,仪表盘的任何组件都无法解决这一问题。examples/relay-agent-console.html
- 浏览型页面 ——仪表盘、分析界面、监控界面 →
- H5类 → 选择六种形态之一(§4:应用壳 · 分页卡片 · 滚动叙事 · 电商堆叠 · 长内容站点 · 氛围单屏),然后加载其包裹的内容注册类型并遵循上述对应分支。从
h5-mobile.md§5构建原生组件,而非自行设计——TabBar是约定俗成的组件,而非设计创新点。h5-mobile.md
- 品牌类 → 选择**§2 风格内核**(
- 组装页面骨架——对应注册类型的正确骨架。品牌类 → 根据页面功能选择四种**§5 品牌骨架之一(落地页 · 作品集 · 画册 · 工作室)。产品类 → 骨架为§1中的壳形态**(侧边栏 · 浮动面板 · 网格布局 · 三联布局…),而非§5的品牌骨架。H5类 → 骨架为框架(§1)加所选形态(§4);§5的品牌骨架和
product-ui.md§1的桌面端壳均不适用于390px宽度。所有三类骨架均仅由动效驱动。product-ui.md - 交付前执行**§6 廉价设计黑名单**()、移动端适配底线(
references/anti-cheap.md)和**§8 预检查**(references/mobile-floor.md)。H5类构建需执行references/preflight.md§9–§10,替代移动端适配底线——包括刘海/帧/滚动/触摸检查,这些是与「桌面页面适配手机」不同的故障场景。然后记录构建信息——追加到h5-mobile.md并在CSS中添加标记(.finesse/log.json§4.3)。未记录的构建会导致下一次构建出现风格冲突。divergence.md
references/*.md| 参考文档 | 加载时机 |
|---|---|
| 在品牌需求解读前,当需求为单个元素而非页面时——按钮、输入框、卡片、弹窗。路由到组件流程:保留注册类型+工艺底线+现有令牌,跳过骨架/首屏引擎/风格轮换,强制执行判断组件质量的核心规则——交付所有八种状态,并提供预览文件展示这些状态 |
| 在§0、需求解读前——反同质化层。当输出持续趋同、用户反馈「感觉通用/和其他AI生成的页面一样」,或在任何风格内核决策前加载:五轴组合法(构建风格内核,而非从列表选择)、反默认双维度检查、打破模型最优解的随机选择,以及先断言再确认的方向提案。§4是记录模块—— |
| 搭建品牌类底层框架(纹理、暗角、展示型字体、颜色令牌、调色板系列)。产品/仪表盘仅继承其通用工艺底线(§1:带色调的中性色、半透明边框、对比度底线)——仪表盘的表面/卡片/字体/动效来自 |
| 需求要求明暗切换或多个可切换的命名主题——运行时调色板切换的令牌角色和硬编码颜色陷阱(区别于单锁定调色板的默认情况) |
| 任何提及动效的需求——动效 · 炫酷 · "make it move" · "有动画"——以及所有品牌类构建。引擎之上的动效层:两个无人区分的轴(效果展示内容 vs 路径实现方式)、六种实现路径及其权重、静态形态和故障模式(CSS · 原生滚动驱动 · View Transitions/WAAPI · GSAP · Canvas/WebGL · 零依赖CSS 3D空间)、十大类动效目录含约80种变体及每类的「粗糙版」、效果→路径映射表避免模型为实现几行代码加载60KB资源,以及四节拍表替代「单个首屏引擎+通用淡入」。在 |
| 构建首屏引擎(品牌类注册类型);同时涵盖非首屏场景的二级动效词汇(字符拆分展示、磁吸按钮、幕布擦除、扫描线、单卡片飞入)——决策层(选择引擎)。范围说明:这些是 |
| 品牌类实现层——相当于 |
| 页面仅在手机端运行——H5 / 移动端页面 / 活动页 / 小程序页 / app UI原型 / 移动端商品详情页 / 报告H5。第四种注册类型,容器类型:固定帧尺寸并包裹另一注册类型作为内容。包含视口约定、反转其他所有注册类型的锁定 |
| 任何会在手机端展示的构建——即几乎所有构建。手机端布局崩溃的六种机械原因及修复方案: |
| 添加3D效果——CSS倾斜/翻转/封面流/深度视差或Three.js模型/置换 |
| 选择风格内核(品牌类注册类型) |
| 已选择角色,但想要该风格下更多成熟技术,或需求无法完美匹配10种角色时 |
| 任何编写用户可读文本的场景——§0.B需求解读、 |
| 任何交付前——廉价设计扫描 |
| 仪表盘 / 管理后台 / 数据应用——浏览型页面(产品类注册类型) |
| 操作型页面(产品类注册类型):发布/创建向导、商家与管理控制台、配置页、设置页、审核队列——工作流框架、编号章节卡片、单选卡片选项、实时预览侧边栏、提交前检查、派生预算面板、草稿/提交 |
| 用户之外的主体执行任务,页面需确保可信度——AI 工作台 / Agent控制台 / 智能体控制台 / Copilot UI / 值守台。能力层,而非页面类型:先判断后台vs工作台(§1解析器),选择载体,再叠加此层——失败点是不可信而非可读性差或无法完成操作,浏览/操作型页面的组件无法解决此问题。包含需持续回答的四个问题、单屏三种时态(队列 · 实时运行 · 历史)、运行流替代图表作为核心、九种运行状态( |
| 任何产品类注册类型页面—— |
| 正例参考库——22个已交付的真实页面(9个品牌类 + 8个仪表盘 + 1个AI控制台 + 4个H5),每个文件含「学习要点」表。构建前打开最接近的示例,尤其是仪表盘和手机壳(借鉴模式,而非复制文件) |
| 图表密集的产品UI,超出基础表格范围——完整25种类型选择矩阵、无障碍等级+强制降级、库选择(决策层) |
| 任何单文件手写仪表盘图表(条形图必填——避免条形码陷阱)——无库实现层:值→高度规则、 |
| 商品详情页(PDP)、列表/分类页(PLP)、购物车、结算页——电商类注册类型 |
| 在§0.B,页面确定图片位置后立即加载——首屏、画廊、H5封面或场景、商品详情页图片,甚至仪表盘空状态或头像行。不是分类清单或交付时间扫描:路径(生成 · 真实素材 · 生成占位符)及所有路径的先询问规则仅在布局编写前触发才有效。包含会话能力检查,决定可真实提供的路径,以及命名图片是向用户提案而非自行生成或下载的规则 |
| 交付前最终检查清单 |
| 多页面项目——令牌一致性 |
| 升级现有页面——先审核再重构的协议 |
| 只读诊断——廉价设计+特效实现+预检查扫描 |
| 新项目——编写 |
| 现有代码库——从真实代码中提取 |
Commands
命令
finesse runs as a full build by default, but supports verb commands for targeted iteration on an existing page — so you don't re-run the whole Brand Read for a single complaint. Each command loads one reference and does one job.
| Command | Category | Does | Reference |
|---|---|---|---|
| Build | The full flow: Brand Read → Dials → substrate → engine → assemble (the default) | all |
| Setup | New project: write | |
| Setup | Existing codebase: extract the built design system into | |
| Evaluate | Read-only diagnostic: run the cheapness blacklist + spectacle-shown + pre-flight, output a findings list. Changes nothing. | |
| Refine | Raise SPECTACLE +2, upgrade the engine (e.g. Canvas → Three.js) | |
| Refine | Lower SPECTACLE −2, step down to GSAP / CSS-only; calm an overloaded page | |
| Refine | Re-pick the persona / soul when this page is the wrong vibe | |
| Refine | Every page comes out the same. The systemic fix, not the per-page one: recompose the soul from the five orthogonal axes, run the two-altitude anti-default check, roll against the model's argmax, and check the used-list. Use when the user says "feels generic / like every other AI site / 每次都差不多" | |
| Enhance | Re-cut the page's beat sheet — motion only, soul and substrate untouched. Not just the hero: pick the families (§2), take the cheapest route each (§3), hold the budget (one heavy beat, four total, no two from one family), compose every still. Swapping the hero engine is one case of this, not the whole command | |
| Enhance | Add one 3D moment — CSS pseudo-3D (tilt · flip · coverflow · depth-parallax) or Three.js (model viewer · image displacement) | |
| Enhance | Adjust DENSITY ± — add/remove content, tune information-per-viewport | |
| Iterate | Upgrade an existing page, audit-first; never full-rebuild for one complaint | |
finesse默认以完整构建运行,但支持动词命令对现有页面进行针对性迭代——无需为单个反馈重新执行完整的品牌需求解读。每个命令加载一个参考文档并完成一项任务。
| 命令 | 分类 | 功能 | 参考文档 |
|---|---|---|---|
| 构建 | 完整流程:品牌需求解读 → 调节旋钮 → 底层框架 → 引擎 → 组装(默认命令) | 所有 |
| 初始化 | 新项目:编写 | |
| 初始化 | 现有代码库:提取已构建的设计系统到 | |
| 评估 | 只读诊断:执行廉价设计黑名单+特效实现+预检查,输出结果列表。不修改任何内容 | |
| 优化 | 提高SPECTACLE +2,升级引擎(如Canvas → Three.js) | |
| 优化 | 降低SPECTACLE −2,降级到GSAP / 纯CSS;简化过载页面 | |
| 优化 | 重新选择角色/风格内核,当当前页面风格不符时 | |
| 优化 | 所有页面都一样。系统性修复,而非单页面修复:从五个正交轴重构风格内核,执行双维度反默认检查,打破模型最优解,检查已用列表。当用户反馈「感觉通用/和其他AI生成的页面一样/每次都差不多」时使用 | |
| 增强 | 重新编排页面四节拍表——仅修改动效,保留风格内核和底层框架。不仅限于首屏:选择动效类别(§2),为每个动效选择最轻量化路径(§3),控制预算(一个重量级节拍,共四个,同一类别不超过两个),构建所有静态帧。更换首屏引擎是此命令的一种场景,而非全部 | |
| 增强 | 添加一个3D效果——CSS伪3D(倾斜 · 翻转 · 封面流 · 深度视差)或Three.js(模型查看器 · 图片置换) | |
| 增强 | 调整DENSITY ± ——添加/移除内容,优化每视口信息密度 | |
| 迭代 | 升级现有页面,先审核再重构;切勿因单个反馈重新完整构建 | |
Routing rules
路由规则
- First word matches a command → load that command's reference and follow it. Everything after the command name is the target. Lay the §3 substrate and run the relevant §6/§8 checks, but skip the parts of §0–§5 that don't apply to that single action (e.g. doesn't re-pick a soul).
quieter - First word doesn't match, but intent clearly maps to one command ("too plain / boring" → ; "too flashy" →
bolder; "wrong vibe for this page" →quieter; "feels generic / every page looks the same / 每次都差不多" →soul; "make it pop" →diverge; "动效 / 炫酷 / 加点动画 / 让它动起来 / 太静了" →animate(loadanimatefirst — these words select nothing on their own, so §4's beat sheet is what turns them into a decision the user can veto); "add depth / make it 3D / tilt / parallax" →motion.md; "too sparse / too dense" →depth; "improve / fix this page" →densify) → route to that command and proceed as if invoked. If two fit, ask once which.redesign - No argument at all (bare ) → the user is asking "what should I do here?" Don't dump the static menu. Read a few cheap signals and lead with the 2-3 highest-value commands, each with a one-line reason, then offer the full table as fallback. Never auto-run — recommend, the user confirms. Signal → pick:
/finesse- no and there's real code/pages → lead with
PRODUCT.md(capture what's built) and/ordocument(write the brief). Brand-new empty project →inittheninit.craft - exists, has built pages, never audited → lead with
PRODUCT.md(read-only health check).audit <surface> - git working tree points at one page/file → scope or
auditto those files, naming them.redesign - a recent found P0/P1 → lead with
audit(fix the backlog) or the specific refine verb the findings point to (gradient-text/eyebrows →redesign/quieter; flat motion →soul).animate - nothing built yet, clear brief → . Keep it to 2-3 pointed picks with the exact command to type. The menu is the fallback, not the lede.
craft
- no
- A target but no command, building something new → check the scope, then the surface. If the brief names a single element (a button, an input, a card, a modal), route to — the page flow's skeleton, engine, and rotation are all wrong for one component, and the thing that actually decides its quality (all eight states shipped) isn't checked anywhere in the page flow. If the brief names a phone-only page (H5 / 移动端页面 / 活动页 / 小程序页 / app 原型), load
references/component-scope.mdfirst and build the frame before anything else — a page assembled desktop-first and then squeezed into 406px is the failure mode that file exists to prevent. Otherwise run the fullreferences/h5-mobile.mdflow (§0 → §8) — the default for "build me a landing page / dashboard".craft - is read-only. It only reports findings; it never edits code. Every other command is allowed to modify the target.
audit
Auto-trigger is unchanged: finesse still activates from natural language via its. Commands are an added precision entry-point (description), not a replacement — both routes lead to the same references./finesse quieter page.html
After any command that modified the page, run the relevant §8 Pre-Flight gates before declaring done.
- 第一个单词匹配命令 → 加载该命令的参考文档并执行。命令名后的内容为目标。应用**§3底层框架并执行相关§6/§8检查**,但跳过§0–§5中与单个操作无关的部分(如无需重新选择风格内核)。
quieter - 第一个单词不匹配,但意图明确对应某个命令("太普通/无聊" → ;"太花哨" →
bolder;"当前页面风格不对" →quieter;"感觉通用/所有页面都一样/每次都差不多" →soul;"让它更醒目" →diverge;"动效 / 炫酷 / 加点动画 / 让它动起来 / 太静了" →animate(先加载animate——这些词汇无法明确指向具体效果,§4的四节拍表将其转化为用户可否决的决策);"添加深度/做成3D/倾斜/视差" →motion.md;"太稀疏/太拥挤" →depth;"改进/修复此页面" →densify)→ 路由到该命令并执行。如果两个命令都适配,询问一次选择哪个。redesign - 无参数(仅)→ 用户询问*"我该做什么?"*。不要输出静态菜单。读取少量关键信号,优先推荐2-3个最高价值的命令,每个配一句理由,再提供完整菜单作为备选。切勿自动运行——仅推荐,由用户确认。信号→选择:
/finesse- **无**且存在真实代码/页面 → 优先推荐
PRODUCT.md(捕获已构建内容)和/或document(编写需求)。全新空项目 →init然后init。craft - 存在,已构建页面,从未审核 → 优先推荐
PRODUCT.md(只读健康检查)。audit <surface> - git工作区指向单个页面/文件 → 将或
audit范围限定为这些文件,明确命名。redesign - 最近发现P0/P1问题 → 优先推荐
audit(修复问题)或 findings指向的具体优化命令(渐变文本/小标题 →redesign/quieter;平淡动效 →soul)。animate - 未构建任何内容,需求明确 → 。 仅推荐2-3个具体命令及输入格式。菜单作为备选,而非首选。
craft
- **无
- 有目标但无命令,构建新内容 → 先检查范围,再检查载体。如果需求是单个元素(按钮、输入框、卡片、弹窗),路由到——页面流程的骨架、引擎和风格轮换均不适用于单个组件,决定组件质量的核心规则(交付所有八种状态)未在页面流程中检查。如果需求是仅手机端页面(H5 / 移动端页面 / 活动页 / 小程序页 / app原型),**先加载
references/component-scope.md**并搭建框架——先按桌面端构建再压缩到406px是此文件要避免的失败模式。否则执行完整references/h5-mobile.md流程(§0 → §8)——默认适用于「构建落地页/仪表盘」。craft - 是只读命令。仅报告结果;不修改代码。其他命令均可修改目标。
audit
自动触发规则不变:finesse仍通过中的自然语言触发。命令是新增的精准入口(description),而非替代——两种路由均指向相同参考文档。/finesse quieter page.html
任何修改页面的命令执行后,需执行相关**§8预检查**再宣布完成。
0. BRAND READ (Before Anything Else)
0. 品牌需求解读(首要步骤)
Most AI design output is bad because the model jumps to a default aesthetic instead of reading the brief. Don't.
大多数AI设计输出质量差,因为模型直接使用默认美学风格而非读取需求。切勿如此。
0.A Determine the Register (this forks every later decision)
0.A 确定注册类型(决定后续所有分支)
Ask the surface question first: does this page have a desktop form at all? If the answer is no — it's an H5 / 移动端页面 / 活动页 / 小程序页 / app 原型, opened from a chat message or a QR code, looked at in a phone mock — then the register is h5, and it is a container: go to, build the frame, then come back here and pick the content register underneath it. h5 wraps one of the three below; it never replaces one. The one-question tiebreak when the brief just says "手机端的页面" is inreferences/h5-mobile.md§0: "这个页面只在手机上打开,还是电脑上也要好看?" — "both" means it's a brand/product page withh5-mobile.mdapplied, and building a phone frame for it would be wrong.mobile-floor.md
Ask the same question for 「工作台」, and ask it before anything else. 「工作台」 and 「后台」 are two different products, and defaulting the former to the latter is the most likely mis-build in this skill. Ask what it revolves around — 一批业务对象 → 后台; 他自己反复在做的一件事 → 工作台 — never how many people use it. Only then does the screen matter, and only to pick the workbench's body (desktop shell vsmorph A.1); an agent doing the work is a capability layer on top (h5-mobile.md), not a third species. Full resolver under §1's dials table.ai-console.md
- brand — design IS the product: landing page, brand site, launch, portfolio, campaign, hero page. Be bold, opinionated, spectacular. Goes the soul + hero-engine route (§2, §4).
- product — design SERVES the product: dashboard, admin, analytics, data table, app shell, settings, tool. Optimize for clarity, density, usability. Goes the component-system route (). Still never cheap — it inherits the universal craft floor (§3's last three bullets) + the cheapness blacklist (§6), and builds on the product substrate (
references/product-ui.md§0), not the brand substrate's grain/vignette/hero-type/dark-default.product-ui.md- Split it once more — but the first split is 后台 vs 工作台, not a list of page jobs. Ask what it revolves around: a batch of business objects → 后台; one thing he does over and over → 工作台 (full resolver under §1's dials table — it is the most consequential fork in this skill and the easiest to get wrong).
- 后台 splits by job into read and operate. A dashboard you read fails by being unreadable — , unchanged. A page whose primary action is a consequential commit (发布 / 上线 / 提交 / 保存配置 — a merchant publishing a campaign, an admin configuring a rule) is one you operate, and it fails by being unfinishable: load
product-ui.mdon top. Login forms and search filters don't count;references/workflow-ui.md§4 covers those.product-ui.md - 工作台 splits by body, not by job — desktop keeps 's shell at A.1's density and soul; phone goes to
product-ui.mdmorph A.1. Same species either way.h5-mobile.md - Then, orthogonal to all of the above: does something other than the user do the work over a duration? An agent runs multi-step tasks, output streams in, a run can fail halfway, there's a queue → layer on top of whatever you already picked (its §8 is the desktop shell, §9 the phone form). It fails by being untrustworthy — you can't tell what it's doing, why, what it cost, or how to stop it — and none of the read/operate parts address that. This is a capability, not a category: a workbench without an agent doesn't need it, and a back-office that grows one doesn't become a workbench. A chatbot with no tools, no queue and no artifacts isn't one either; a dashboard about model spend is a dashboard.
references/ai-console.md
- 后台 splits by job into read and operate. A dashboard you read fails by being unreadable —
- Color is not optional here. Pick from before writing CSS. "Dashboard" predicts blue; the product predicts a color.
references/product-palettes.md
- Split it once more — but the first split is 后台 vs 工作台, not a list of page jobs. Ask what it revolves around: a batch of business objects → 后台; one thing he does over and over → 工作台 (full resolver under §1's dials table — it is the most consequential fork in this skill and the easiest to get wrong).
- commerce — a third, hybrid case: product detail pages (PDP), category/listing pages (PLP), cart, checkout. It doesn't cleanly fit either bucket above, so don't force it — route by which job the specific page is doing:
- A PDP selling one hero item (a single SKU, a launch, a flagship product) leans brand: pick a soul (§2), but keep DENSITY up for specs/reviews/trust signals — see for the PDP skeleton.
references/commerce-ui.md - A PLP / marketplace with many SKUs (filters, sort, grid of many products) leans product: DENSITY high, SPECTACLE low, same as a dashboard — see for grid/filter patterns plus
references/product-ui.mdfor commerce-specific rules (price/CTA placement, cart, checkout, dark-pattern bans).references/commerce-ui.md - When unsure which it is, ask: "is this page trying to sell the vibe of one product, or help someone compare/filter many?"
- A PDP selling one hero item (a single SKU, a launch, a flagship product) leans brand: pick a soul (§2), but keep DENSITY up for specs/reviews/trust signals — see
Read project memory first — all three files, they answer different questions.
| File | Answers | Written by |
|---|---|---|
| What must stay the same? — register, users, brand personality, locked dials, anti-references. Overrides your guesses. | |
| What is already built? — locked palette / type / substrate, so this page matches its siblings. | |
| What must change? — the last 20 builds' five-axis coordinates. The rotation memory. | every completed build (§8) |
The first two lock consistency; the third forces difference. They are opposite goals and deliberately live in separate files — see §4. If is absent, grep the codebase for a CSS stamp and infer one entry from it; if neither exists, this is the first run and there is no rotation constraint.
divergence.md.finesse/log.json/* finesse ·- No , multi-page or repeat project, thin brief → offer to run
PRODUCT.mdfirst (oneinitkeeps every later page consistent). Don't force it on a one-off page.PRODUCT.md - Existing codebase, no → offer
design-model.yamlto capture what's there before adding to it.document - If memory exists but the new request contradicts it, surface the conflict — don't silently override the lock.
首先问载体问题:此页面是否有桌面端形态? 如果没有——是H5 / 移动端页面 / 活动页 / 小程序页 / app原型,从聊天消息或二维码打开,仅在手机端查看——则注册类型为h5,属于容器类型:前往搭建框架,再返回此处选择其包裹的内容注册类型。H5包裹以下三类之一;不会替代任何一类。当需求仅为「手机端页面」时,references/h5-mobile.md§0提供判断标准:"这个页面只在手机上打开,还是电脑上也要好看?" ——"两者都要"意味着是品牌/产品页面并应用h5-mobile.md,为其构建手机帧是错误的。mobile-floor.md
对于「工作台」,首先问同样的问题。 「工作台」和「后台」是两种不同产品,默认将前者归为后者是本技能最可能的错误构建。询问其核心运转对象——一批业务对象 → 后台; 用户反复执行的单一任务 → 工作台——切勿根据用户数量判断。之后才考虑屏幕尺寸,仅用于选择工作台载体(桌面壳vs形态A.1);Agent执行任务是能力层(叠加h5-mobile.md),而非第三种类型。完整解析器见§1调节旋钮表。ai-console.md
- 品牌类 — 设计即产品:落地页、品牌官网、发布页、作品集、营销活动页、首屏Hero页面。风格大胆、鲜明、惊艳。采用风格内核+首屏引擎路径(§2, §4)。
- 产品类 — 设计服务于产品:仪表盘、管理后台、分析界面、数据表、应用壳、设置页、工具。优化方向为清晰度、信息密度、可用性。采用组件系统路径()。仍保持绝不廉价的质感——继承通用工艺底线(§3最后三点)+廉价设计黑名单(§6),基于产品底层框架(
references/product-ui.md§0)构建,而非品牌底层框架的纹理/暗角/首屏字体/深色默认主题。product-ui.md- 进一步拆分——但首先拆分后台vs工作台,而非按页面功能列表。 询问核心运转对象:一批业务对象 → 后台;用户反复执行的单一任务 → 工作台(完整解析器见§1调节旋钮表——这是本技能最关键的分支,也最容易出错)。
- 后台按功能拆分为浏览型和操作型。浏览型仪表盘失败点是可读性差——使用,无需修改。主要操作为重要提交(发布 / 上线 / 提交 / 保存配置——如商家发布营销活动、管理员配置规则)的页面是操作型,失败点是无法完成操作:叠加
product-ui.md。登录表单和搜索过滤器不属于此类;references/workflow-ui.md§4覆盖这些场景。product-ui.md - 工作台按载体拆分,而非功能——桌面端保留的壳及A.1的密度和风格;手机端使用
product-ui.md形态A.1。两种载体属于同一类型。h5-mobile.md - 然后,与上述所有正交:是否有用户之外的主体执行持续任务? Agent运行多步任务、输出流式更新、任务可能中途失败、存在队列 → 在已选框架上叠加(§8为桌面壳,§9为手机形态)。失败点是不可信——用户无法判断其正在做什么、原因、成本或如何停止,浏览/操作型组件无法解决此问题。这是能力,而非类别:无Agent的工作台无需此层;添加Agent的后台不会变成工作台。无工具、无队列、无产物的聊天机器人不属于此类;关于模型成本的仪表盘仍属于仪表盘。
references/ai-console.md
- 后台按功能拆分为浏览型和操作型。浏览型仪表盘失败点是可读性差——使用
- 颜色选择不可省略。编写CSS前从选择。"仪表盘"默认对应蓝色;产品决定配色。
references/product-palettes.md
- 进一步拆分——但首先拆分后台vs工作台,而非按页面功能列表。 询问核心运转对象:一批业务对象 → 后台;用户反复执行的单一任务 → 工作台(完整解析器见§1调节旋钮表——这是本技能最关键的分支,也最容易出错)。
- 电商类 — 第三种混合类型:商品详情页(PDP)、分类/列表页(PLP)、购物车、结算页。无法完美归入上述两类,切勿强行归类——根据具体页面功能路由:
- 销售单一核心商品的PDP(单个SKU、发布页、旗舰产品)偏向品牌类:选择风格内核(§2),但保持高信息密度用于规格/评论/信任信号——见的PDP骨架。
references/commerce-ui.md - 多SKU的PLP / marketplace(筛选、排序、多商品网格)偏向产品类:高信息密度、低特效,与仪表盘一致——见的网格/筛选模式+
references/product-ui.md的电商特定规则(价格/CTA位置、购物车、结算页、反暗黑模式)。references/commerce-ui.md - 不确定时询问:"此页面是要传递单个产品的风格,还是帮助用户对比/筛选多个产品?"
- 销售单一核心商品的PDP(单个SKU、发布页、旗舰产品)偏向品牌类:选择风格内核(§2),但保持高信息密度用于规格/评论/信任信号——见
首先读取项目记录——三个文件,回答不同问题。
| 文件 | 回答问题 | 编写者 |
|---|---|---|
| 哪些内容必须保持一致? ——注册类型、用户、品牌个性、锁定旋钮、反参考。优先于你的猜测 | |
| 已构建了什么? ——锁定调色板 / 字体 / 底层框架,确保此页面与其他页面一致。 | |
| 哪些内容必须改变? ——最近20次构建的五轴坐标。风格轮换记录。 | 每次完成的构建(§8) |
前两个确保一致性;第三个强制差异性。它们是相反的目标,故意存放在不同文件中——见 §4。如果不存在,在代码库中搜索 CSS标记并推断一条记录;如果两者都不存在,这是首次构建,无风格轮换限制。
divergence.md.finesse/log.json/* finesse ·- 无,多页面或重复项目,需求模糊 → 提议先执行
PRODUCT.md(一个init确保后续所有页面一致)。单页面项目无需强制。PRODUCT.md - 现有代码库,无→ 提议执行
design-model.yaml捕获现有内容,再进行添加。document - 如果记录存在但新需求与之冲突,告知用户冲突——切勿静默覆盖锁定内容。
0.B Output a "Design Read" before generating — assert a direction, don't poll for one
0.B 生成前输出「需求解读结果」——明确方向,而非征求意见
Name the rejected default first (§0.D), then the direction — then say what the page will look like in words the user can picture, and give them two concrete ways to object:
Lazy default (rejected): {the obvious aesthetic for this category}
Design Read: {industry} · {soul in 2-3 words} · register={brand|product} · SPECTACLE={n} ·
layout={dominant layout family} · engine={type}
You'll see: {what appears on screen, in plain observable terms — color, motion, type size, structure}
Motion: {the beat sheet — one plain-language line per beat, plus the still. Omit only if
the page genuinely doesn't move. Route names never appear here — motion.md §4}
Images: {how many, of what, and where they'd come from — or "none, and here's why"}
Not right? Most likely one of these: ① {the most probable objection} ② {the second}
Rotation: {plain sentence — which recent direction this deliberately avoids}Example:
Lazy default (rejected): dark page, violet glow, floating 3D render, three feature cards.
Design Read: deep-space astronomy · cinematic + reverent · register=brand · SPECTACLE=8 ·
layout=full-page engine + scrimmed sections · engine=Three.js particle galaxy
You'll see: a near-black page with slow-drifting star dust behind everything, a very large
headline sitting on top of it, and the galaxy rotating as you scroll.
Motion: 首屏 星尘在背后慢慢漂,标题压在上面
滚动 往下滚星系跟着转,越滚越深
交互 切换观测目标时,参数自己重排,不是整块刷新
收尾 底部那行坐标逐字浮起
静止版 星系定格在一帧构图最好的,其余全停
Images: 3 — a wide nebula plate behind the hero, 2 square instrument details in the spec band.
I can generate them here (they'd share one cold-blue grade); say the word and I'll
list the shots before spending anything. Or the page ships engine-only, no photography.
Not right? Most likely one of these: ① you don't want a moving background
② near-black is too heavy and you want this light.
Rotation: deliberately steering clear of the last three builds (machined metal / paper press /
phosphor terminal) — this one is water and drift.You'll see:Design Read:SPECTACLE=8scrimmed sectionsThree.js particle galaxyreferences/plain-words.mdMotion:Not right?R6animation-timelineView Transitionsplain-words.mdreferences/motion.mdImages:asset-sourcing.mdreferences/asset-sourcing.mdNaming the slots is an offer, never a green light. Ask, then wait — do not generate and do not download. This line exists so the user learns the option is on the table; it is not permission to spend his generation budget or to pull assets off the open network because you inferred he'd want it. Both are actions with real cost and real provenance consequences, and the only thing that authorizes either is the user answering yes. The failure this prevents is the mirror of the silent-gradient one: a page where four images appeared, billed and un-asked-for, because the model decided the brief implied them. State the count and the source, stop, and let him answer — same gate§2/§3 puts on both paths, just moved to where it's still free.asset-sourcing.md
If the page genuinely wants no photography (a phosphor-terminal build, a pure-type brutalist page), write and one clause of why; that is a decision the user can veto too, and stating it is not optional.
noneNot right?The rotation line is not optional, and it is not decoration. Rotation you perform in your head is indistinguishable — afterwards, to you and to the user — from rotation you merely narrated. Writing it down before any code exists is what makes a bad rotation catchable while it's still free to fix. Write it as a sentence, not as axis letters: is unfalsifiable to the user — they can't tell what E is, so they can't object that they actually wanted machined metal. The five-axis coordinates still get recorded, in and the CSS stamp (§8.0), which is where an audit reads them from. Threshold and format: §4.4. Omit the line only on the first build of a project (no log, no stamp) — and say that's why.
differs on E + C + A (3/5 ✓).finesse/log.jsondivergence.mdSTOP after the Design Read. Do not generate any code yet. Wait for confirmation or redirect.
Assert, don't poll. State the direction you're going and invite a veto. Do not hand the user a three-option menu of adjectives — nobody can choose a design from words they can't see, so they'll pick the first one and you'll have learned nothing. A menu is theater when the answer is already clear. Note that + is not a menu: it asserts one direction and pre-names its two most likely failure modes, which is what makes the veto usable instead of ceremonial.
You'll see:Not right?When the user can't evaluate the assertion at all, that's Mode 2. If the brief carried no directional information — only undirected praise-words ("好看", "高级", "有质感", "premium", "clean"), or an explicit "I can't really say" — thenwill get a rubber-stamp no matter how plainly it's written, because the user has no basis for comparison. Build three real variants instead (You'll see:§7 Mode 2 + the squint test). Undirected adjectives are as strong a fork signal as a genuinely ambiguous brief.divergence.md
The exception — when the brief genuinely forks (a "premium" brand that could be austere-Nordic or maximal-baroque; a personal site that could be a portfolio or a manifesto): don't describe the options, build them. Three low-fidelity but real, screenshot-able pages, each moving on a different axis, then let the user look. See §7 — including the squint test that stops the three variants from collapsing into one.
references/divergence.mdIf output keeps coming out samey across projects, the fix is not a better adjective in this line — it's(compose the soul from five axes instead of picking from a list; roll a die to break the model's default; keep a used-list so "don't repeat" can actually fire).references/divergence.md
首先列出被否决的默认方案(§0.D),然后说明方向——再用用户可想象的语言描述页面效果,并给出两个具体异议选项:
惰性默认方案(已否决):{此类别的明显美学风格}
需求解读结果:{行业} · {2-3个词描述风格内核} · register={brand|product} · SPECTACLE={n} ·
layout={主导布局类型} · engine={引擎类型}
预期效果:{屏幕上呈现的内容,用可观察的直白语言描述——颜色、动效、字体大小、结构}
动效:{四节拍表——每节拍一句直白描述,加静态帧。仅当页面完全无动效时省略。路径名称绝不展示在此处——motion.md §4}
图片:{数量、内容、来源——或"无图片,原因如下"}
不符合预期?最可能的两个原因:① {最可能的异议} ② {第二个可能的异议}
风格轮换:{直白句子——此构建刻意避免的最近方向}示例:
惰性默认方案(已否决):深色页面、紫色光晕、悬浮3D渲染、三个功能卡片。
需求解读结果:深空天文 · 电影感+庄重感 · register=brand · SPECTACLE=8 ·
layout=全屏引擎+带遮罩章节 · engine=Three.js粒子星系
预期效果:近乎黑色的页面,背后有缓慢漂移的星尘,超大标题叠加其上,滚动时星系随之旋转。
动效:首屏 星尘在背后缓慢漂移,标题叠加其上
滚动 向下滚动时星系跟随旋转,越滚越深
交互 切换观测目标时,参数自动重排,而非整块刷新
收尾 底部坐标逐字浮现
静态版 星系定格在构图最佳的一帧,其余全停
图片:3张——首屏背后的宽幅星云图、规格栏中的2张方形仪器细节图。
我可在此生成(统一冷蓝色调);告知我即可列出具体图片,再进行生成。或者页面仅使用引擎,无图片。
不符合预期?最可能的两个原因:① 你不想要动态背景
② 近乎黑色太厚重,想要浅色风格。
风格轮换:刻意避开最近三次构建(机械金属 / 印刷纸张 / 荧光终端)——本次采用水与漂移风格。「预期效果」是用户实际会回应的内容。「需求解读结果」是你的坐标——、、是非设计师无法想象、无法排序、因此无法否决的内容。只有一个选项的检查不是有效检查。描述实际渲染效果:颜色、是否有动效、字体大小、结构。无行话——若术语不可避免,参考。
SPECTACLE=8带遮罩章节Three.js粒子星系references/plain-words.md「动效」在此处是因为「炫酷」和「好看」无法明确指向具体效果。 这些词汇会让所有模型给出相同答案——WebGL粒子首屏+淡入章节,因此包含这些词汇的需求不是动效决策,而是空白需求。不要让用户更具体描述;他们没有相关词汇,询问只会得到「就是要好看那种」的回复。 用具体场景断言四节拍表,每节拍一句,两个「不符合预期?」选项需是结构上不同的节拍——「你想要可拖拽旋转的,而非自动前进的」只需一个词即可回答。覆盖整个页面,而非仅首屏:单个炫酷节拍+三个通用淡入章节的页面正是此内容要打破的模式。路径名称是内部词汇(、、)——用户看场景,你保留坐标()。静态帧也需包含在此处:这是用户可否决的节拍,而非最后添加的备选方案。完整方法见 §4。
R6animation-timelineView Transitionsplain-words.mdreferences/motion.md「图片」在此处是因为用户无法要求他们不知道你能提供的内容。 所有注册类型都有图片可提升页面效果的位置——品牌首屏、商品详情页画廊、H5封面或场景,甚至仪表盘空状态或头像行——默认失败是静默的:页面在需要图片的位置使用渐变,无人提及「图片」。因此在需求解读结果中列出图片位置,在任何代码编写前,无论注册类型和类别。 统计数量,描述每张内容,说明当前会话的来源——这意味着需先检查实际工具列表(图像生成工具→可提议生成;仅网络获取→真实素材;无工具→说明)并确认工具可用后再命名( §1.1)。是所有路径的协议,其授权规则仍然有效——此内容确保协议在早期触发,此时用户同意的成本最低。如果命名的路径后来不可用,§1.2说明降级到下一个可行路径并告知用户——切勿从生成直接降级到手绘占位符。
asset-sourcing.mdreferences/asset-sourcing.md列出图片位置是提案,而非许可。询问后等待——切勿生成或下载。 此内容让用户知道有此选项;并非允许你消耗其生成预算或从公开网络获取资源,因为你推断他们需要。两者都有真实成本和来源问题,只有用户同意才能执行。此内容避免的失败是静默渐变的镜像:页面出现四张未询问、已计费的图片,因为模型推断需求隐含这些图片。说明数量和来源后停止,等待用户回复——与§2/§3对所有路径的检查相同,只是提前到免费阶段。asset-sourcing.md
如果页面确实不需要图片(荧光终端风格、纯字体极简页面),写「无图片」并说明原因;这也是用户可否决的决策,必须明确说明。
「不符合预期?」必须列出真实分支,而非邀请开放式反馈。「告诉我你的想法」不会得到有效回复。两个具体、可能、互不相同的异议让用户有明确指向,每个异议都需是你会真正修改的内容——通常是主题和动效,因为这是页面的两个核心决策。
风格轮换内容不可省略,也不是装饰。 你脑海中的风格轮换无法与仅口头描述的风格轮换区分——对用户和你来说都是如此。在编写任何代码前写下它,可在成本低廉时发现错误的风格轮换。用句子描述,而非轴字母: 对用户来说无法验证——他们不知道E是什么,因此无法反对你避开了机械金属风格。五轴坐标仍需记录在和CSS标记中(§8.0),供审核读取。阈值和格式: §4.4。仅在项目首次构建时省略(无日志、无标记)——并说明原因。
differs on E + C + A (3/5 ✓).finesse/log.jsondivergence.md输出需求解读结果后停止。切勿生成任何代码。 等待确认或修改方向。
明确方向,而非征求意见。 说明你要走的方向并邀请用户否决。切勿给用户三个形容词选项菜单——没人能从无法看到的文字中选择设计,因此他们会选第一个,你无法得到有效信息。当答案明确时,菜单只是形式主义。注意「预期效果」+「不符合预期?」不是菜单:它断言一个方向并预先列出最可能的两个失败模式,这让否决有效而非仪式化。
当用户完全无法评估断言时,进入模式2。 如果需求无方向信息——只有无指向的赞美词("好看"、"高级"、"有质感"、"premium"、"clean"),或明确表示「我无法描述」——则无论「预期效果」写得多么直白,用户都会默认同意,因为他们没有比较基准。此时构建三个真实变体(§7模式2+眯眼测试)。无指向的形容词与真正模糊的需求一样,是强分支信号。divergence.md
例外——当需求真正模糊时(「高级」品牌可能是北欧极简风格或巴洛克繁复风格;个人站点可能是作品集或宣言):不要描述选项,构建它们。三个低保真但真实、可截图的页面,每个在不同轴上变化,再让用户选择。见 §7——包括眯眼测试避免三个变体趋同。
references/divergence.md如果跨项目输出持续趋同,修复方法不是在此内容中使用更好的形容词——而是(从五个轴构建风格内核,而非从列表选择;随机选择打破模型默认;保留已用列表让「不重复」真正生效)。references/divergence.md
0.C If the brief is ambiguous, ask ONE question — do not guess blind
0.C 如果需求模糊,问一个明确的问题——切勿盲目猜测
One sharp question beats five rounds of wrong defaults. Ask the thing that most changes the output: "Is this meant to feel restrained-editorial or maximal-spectacle?" / "What should a visitor remember 10 seconds after leaving?" Then commit. Wait for the answer before proceeding.
一个尖锐的问题胜过五轮错误的默认方案。问最能改变输出的问题:"它应该是克制编辑风格还是极致炫酷风格?" / "访客离开10秒后应该记住什么?" 然后执行。等待回复后再继续。
0.C.1 Say it in words the user can act on
0.C.1 用用户可执行的语言表述
finesse's vocabulary is internal. , , , , , , all earn their place in the reasoning and none of them are answerable by the person reading. They leak out in exactly three places, and all three are places where the user is supposed to decide something:
registerSPECTACLEgrainscrimeyebrowhairlinelayout family| Where | What breaks without a gloss |
|---|---|
| §0.B Design Read | the confirmation gate — he can only say "go ahead" |
| he can't tell which finding to fix first |
the memory-lock notice ( | he doesn't know what got locked, or how to unlock it |
The rule: first time a term appears in user-facing text, follow it with a one-clause gloss in observable terms; after that use it bare. Table of glosses, plus the internal terms that must never reach a user at all: . This applies to output only — reason in whatever vocabulary you like.
references/plain-words.mdfinesse的词汇是内部词汇。、、、、、、在内部推理中有用,但对用户来说无法理解。它们仅在三个地方泄露,而这三个地方都是用户需要决策的场景:
registerSPECTACLEgrainscrimeyebrowhairlinelayout family| 场景 | 无解释会导致什么问题 |
|---|---|
| §0.B 需求解读结果 | 确认检查无效——用户无法说「继续」 |
| 用户无法判断优先修复哪个问题 |
记录锁定通知( | 用户不知道锁定了什么,或如何解锁 |
规则:用户可见文本中首次出现术语时,跟随一句可观察的单句解释;之后可直接使用术语。 解释表及绝对不能展示给用户的内部术语:。此规则仅适用于输出——内部推理可使用任何词汇。
references/plain-words.md0.D Anti-Default Discipline
0.D 反默认原则
Name the lazy default for this brief, then beat it. "Coffee brand → the default is warm-beige + brass serif. I'm rejecting that for {x}." The single most-tested AI tell is reaching for the obvious aesthetic of the category. (Reflex-reject lists live in .)
references/anti-cheap.md列出此需求的惰性默认方案,然后打破它。"咖啡品牌→默认是暖米色+黄铜衬线字体。我否决此方案,采用{x}。" AI最明显的特征就是使用类别的默认美学风格。(反射式否决列表见。)
references/anti-cheap.md0.E Quick-Start Dial Mapping
0.E 快速调节旋钮映射
If the brief contains these cues, use these presets as a starting point before refining in §1:
| User says | SOUL | SPECTACLE | DENSITY |
|---|---|---|---|
| "premium", "luxury", "high-end" | 8 | 5 | 3 |
| "minimal", "clean", "understated" | 6 | 3 | 3 |
| "bold", "striking", "impactful" | 7 | 7 | 4 |
| "editorial", "magazine", "publication" | 8 | 4 | 6 |
| "tech", "AI", "SaaS" marketing | 6 | 7 | 5 |
| "corporate", "B2B", "enterprise" | 4 | 3 | 6 |
| "playful", "vibrant", "creative" | 7 | 6 | 5 |
| "data-heavy", "dashboard", "analytics" | 4 | 2 | 9 |
| "商家后台", "管理后台", "admin console", "back-office" | 5 | 2 | 7 |
| "工作台" 裸词,没有别的线索 | — | — | — ← 不套用任何一行,先问它围着什么转(下方解析器) |
| 工作台 · 电脑上开 — "工作台", "值守台", "控制台", "专属工作台" | 6 | 2 | 6–7 |
| 工作台 · 手机上开 — "每日工作台", "打卡页", "记录页", "daily desk" (h5 · morph A.1) | 6 | 2 | 4–5 |
| ↳ 叠加项:有 agent 替他跑活 — "AI 工作台", "agent console", "智能体控制台", "copilot UI" | — | — | +1 ← 不换行,在上面两行之上加 |
| "发布/创建流程", "wizard", "publish flow", "配置", "settings" | 4 | 1 | 7 |
| "landing page" (no other cues) | 7 | 6 | 4 |
| "portfolio" | 8 | 6 | 3 |
| "product page", "PDP", "product detail" | 6 | 4 | 6 |
| "商品列表", "PLP", "category page", "marketplace" | 3 | 2 | 8 |
| "app 原型", "app screen", "移动端 app UI" (h5 · morph A) | 6 | 3 | 6–8 |
| "活动页", "H5 营销页", "campaign H5" (h5 · morph B) | 8 | 6 | 3–4 |
| "报告 H5", "年度报告", "data report H5" (h5 · morph C) | 8 | 6 | 5 |
| "移动端商详", "mobile PDP" (h5 · morph D) | 6 | 3 | 8 |
| "手机官网", "mobile site" (h5 · morph E) | 7 | 5 | 6 |
| "天气/海报类单屏", "ambient screen" (h5 · morph F) | 9 | 7–8 | 2–3 |
Override these immediately if the brief provides stronger or contradicting signals. The h5 rows set the dials for the morphology ( §0); the wrapped content register may adjust them.
h5-mobile.md后台 vs 工作台 — one fork, then two modifiers
「工作台」 and 「后台」 are the two things, and they are not the same product. Everything else people say — 个人工作台 · AI 工作台 · 每日工作台 · 值守台 · 控制台 — is one of these two wearing a modifier. Resolve it in three steps, in order:① 围着什么转 — this is the fork, and the only one:
后台 back-office 工作台 workbench 围着什么转 一批业务对象 — N 个客户 · 订单 · 设备 · 工单 · 学员 他自己反复在做的一件事 — 记账 · 训练 · 带娃 · 写作 · 值守 · 处理异常单 为什么打开 有活要处理:来单了、告警了、该出报表了 到点了,回来看一眼 · 记一笔 · 收个尾 数据谁写 系统、对接、别人 他自己,几秒钟,成本必须接近零 性格 中性是义务 — 它活在别人的品牌里,旁边还有十一个工具 必须有 — 这是他的台子,中性的没有第二次打开的理由 建法 (+product-ui.md如果主动作是提交/发布)workflow-ui.md下面第 ② 步选载体 ② 在哪开 — 这只决定载体,不换物种。 工作台是一个东西、两副身体:
载体 壳 例子 电脑上开 的 shell,但带 A.1 的性格和克制的密度 —— 不是一个塞满图表的 dashboardproduct-ui.mdexamples/relay-agent-console.html手机上开 morph A.1,锁定手机框 + TabBar,DENSITY 4–5h5-mobile.md ·examples/h5-fern-meal-desk.htmlh5-peach-daily-desk.html③ 有没有东西替他干活 — 这是能力层,跟①②正交。 如果有 agent 在跑、输出是流式的、跑一半会失败、有队列 —— 叠加的机械层(运行流 · 九个运行状态 · 常驻停止 · 流内审批卡 · 成本回执)。它不是第三个物种,是工作台可以带的一种能力,桌面和手机两副身体都能带(ai-console.md§8 是桌面壳,§9 是手机形态)。一个没有 agent 的工作台不用加这层;一个后台接了 agent 也不会因此变成工作台。ai-console.md两个不是判据的东西,别拿它们当判据。 人数:一家人共用的记账台、一个小组共用的值守台,都是工作台;一个人独用的进销存,仍然是后台。屏幕:它只在第 ② 步决定长什么样,从来不决定这是什么。When the brief is just 「工作台」 with nothing else, that word has no dials row — ask, don't guess. One question resolves ①, and ②③ usually fall out of his answer:这个台子主要围着什么转? 一批客户/订单/设备这类东西 · 你自己反复在做的一件事(记账、值守、带娃…)Defaulting 「工作台」 to a back-office is the single most likely mis-build in this skill, and it is invisible when it happens — the page comes out competent, dense, neutral and correct, and it is the wrong product. That's why the row above is blank rather than helpful: a dials preset for a word this overloaded would be a guess wearing a table's clothes.
如果需求包含以下线索,使用这些预设作为起始点,再在§1中优化:
| 用户表述 | SOUL | SPECTACLE | DENSITY |
|---|---|---|---|
| "premium"、"luxury"、"high-end" | 8 | 5 | 3 |
| "minimal"、"clean"、"understated" | 6 | 3 | 3 |
| "bold"、"striking"、"impactful" | 7 | 7 | 4 |
| "editorial"、"magazine"、"publication" | 8 | 4 | 6 |
| "tech"、"AI"、"SaaS"营销 | 6 | 7 | 5 |
| "corporate"、"B2B"、"enterprise" | 4 | 3 | 6 |
| "playful"、"vibrant"、"creative" | 7 | 6 | 5 |
| "data-heavy"、"dashboard"、"analytics" | 4 | 2 | 9 |
| "商家后台"、"管理后台"、"admin console"、"back-office" | 5 | 2 | 7 |
| 「工作台」裸词,无其他线索 | — | — | — ← 不套用任何一行,先问它围绕什么转(下方解析器) |
| 工作台 · 电脑端打开 — "工作台"、"值守台"、"控制台"、"专属工作台" | 6 | 2 | 6–7 |
| 工作台 · 手机端打开 — "每日工作台"、"打卡页"、"记录页"、"daily desk" (h5 · morph A.1) | 6 | 2 | 4–5 |
| ↳ 叠加项:有Agent替用户执行任务 — "AI 工作台"、"agent console"、"智能体控制台"、"copilot UI" | — | — | +1 ← 不换行,在上述两行之上叠加 |
| "发布/创建流程"、"wizard"、"publish flow"、"配置"、"settings" | 4 | 1 | 7 |
| "landing page"(无其他线索) | 7 | 6 | 4 |
| "portfolio" | 8 | 6 | 3 |
| "product page"、"PDP"、"product detail" | 6 | 4 | 6 |
| "商品列表"、"PLP"、"category page"、"marketplace" | 3 | 2 | 8 |
| "app 原型"、"app screen"、"移动端 app UI" (h5 · morph A) | 6 | 3 | 6–8 |
| "活动页"、"H5 营销页"、"campaign H5" (h5 · morph B) | 8 | 6 | 3–4 |
| "报告 H5"、"年度报告"、"data report H5" (h5 · morph C) | 8 | 6 | 5 |
| "移动端商详"、"mobile PDP" (h5 · morph D) | 6 | 3 | 8 |
| "手机官网"、"mobile site" (h5 · morph E) | 7 | 5 | 6 |
| "天气/海报类单屏"、"ambient screen" (h5 · morph F) | 9 | 7–8 | 2–3 |
如果需求提供更强或矛盾的信号,立即覆盖这些预设。H5行设置形态的旋钮( §0);包裹的内容注册类型可能会调整它们。
h5-mobile.md后台 vs 工作台 — 一个分支,两个修饰符
「工作台」和「后台」是两种不同产品。其他表述——个人工作台 · AI工作台 · 每日工作台 · 值守台 · 控制台——都是这两种的修饰版。分三步解析,按顺序:① 核心运转对象 — 这是唯一分支:
后台 back-office 工作台 workbench 核心运转对象 一批业务对象 — N个客户 · 订单 · 设备 · 工单 · 学员 用户反复执行的单一任务 — 记账 · 训练 · 带娃 · 写作 · 值守 · 处理异常单 打开原因 有任务要处理:新订单、告警、需出报表 到点查看 · 记录 · 收尾 数据录入者 系统、对接方、他人 用户自己,几秒完成,成本接近零 风格 中性是义务 — 它在他人品牌体系中,旁边还有其他工具 必须有个性 — 这是用户的专属台子,中性风格不会被二次打开 构建方式 (+product-ui.md如果主动作是提交/发布)workflow-ui.md下面第②步选载体 ② 打开载体 — 仅决定形态,不改变类型。工作台是一种产品,两种形态:
载体 壳 示例 电脑端打开 的壳,但采用A.1的风格和克制的密度 —— 不是塞满图表的仪表盘product-ui.mdexamples/relay-agent-console.html手机端打开 形态 A.1,锁定手机帧 + TabBar,DENSITY 4–5h5-mobile.md ·examples/h5-fern-meal-desk.htmlh5-peach-daily-desk.html③ 是否有主体替用户执行任务 — 这是能力层,与①②正交。如果有Agent运行任务、输出流式更新、任务可能中途失败、存在队列 —— 叠加的机械层(运行流 · 九种运行状态 · 常驻停止 · 流内审核卡 · 成本回执)。它不是第三种类型,是工作台可具备的能力,桌面和手机形态都可搭载(ai-console.md§8是桌面壳,§9是手机形态)。无Agent的工作台无需此层;添加Agent的后台不会变成工作台。ai-console.md两个非判断标准,切勿使用。用户数量:一家人共用的记账台、小组共用的值守台,都是工作台;个人独用的进销存,仍是后台。屏幕尺寸:仅在第②步决定形态,绝不决定类型。当需求仅为「工作台」无其他线索时,此词无旋钮映射 — 询问,切勿猜测。一个问题即可解析①,②③通常可从回答中得出:这个台子主要围绕什么运转? 一批客户/订单/设备这类对象 · 你自己反复执行的单一任务(记账、值守、带娃…)默认将「工作台」归为后台是本技能最可能的错误构建,且发生时不可见——页面看起来合格、密集、中性、正确,但却是错误的产品。这就是为什么上面的行是空白而非提供预设:对一个含义过载的词提供预设只是伪装成表格的猜测。
1. THE THREE DIALS
1. 三个调节旋钮
Set these explicitly from the Design Read. They drive everything downstream.
| Dial | 1–3 | 4–6 | 7–10 |
|---|---|---|---|
| SOUL — how opinionated / branded the personality is | neutral, safe, system-default | a clear vibe | unmistakable, one-of-a-kind identity |
| SPECTACLE — how technically-ambitious the visual engine is (finesse's signature dial) | static + CSS only | GSAP scroll, Canvas 2D accents | Three.js / GLSL / WebGL-FBO hero, generative, scroll-pinned cinema |
| DENSITY — information per viewport | airy, one idea per screen | balanced | editorial, data-rich |
根据需求解读结果明确设置这些旋钮。它们驱动所有下游决策。
| 旋钮 | 1–3 | 4–6 | 7–10 |
|---|---|---|---|
| SOUL — 个性的鲜明/品牌化程度 | 中性、安全、系统默认 | 风格明确 | 辨识度极高、独一无二的身份 |
| SPECTACLE — 视觉引擎的技术野心程度 (finesse的标志性旋钮) | 静态+纯CSS | GSAP滚动、Canvas 2D点缀 | Three.js / GLSL / WebGL-FBO首屏、生成式、滚动固定电影感 |
| DENSITY — 每视口信息密度 | 宽松,每屏一个核心信息 | 平衡 | 编辑风格、数据密集 |
1.A Dial inference (Design Read → values)
1.A 旋钮推断(需求解读结果→数值)
- Astronomy / music / game / crypto / fashion-tech → SPECTACLE 7–10 (the genre rewards a real engine).
- Law / finance / healthcare / B2B SaaS marketing → SPECTACLE 3–5 (craft over fireworks; one restrained motion moment).
- Heritage / luxury / editorial / publication → SOUL 8–10, SPECTACLE 4–6 (the type and substrate carry it, not WebGL).
- Any product register (dashboard / admin / analytics / app) → SPECTACLE 1–4, DENSITY 6–9 — clarity beats fireworks. Skip §2/§4 and go to .
references/product-ui.md - h5 → the dials follow the morphology, not the industry (§0.E's h5 rows). SPECTACLE is spent very differently here: there is no hero engine, and the budget goes to transitions and furniture (a FLIP zoom, a fanning card stack, a scene crossfade) rather than a WebGL canvas. An H5 page at SPECTACLE 8 is one where moving between states is spectacular; §4's engine table mostly doesn't apply.
- 天文 / 音乐 / 游戏 / 加密货币 / 时尚科技 → SPECTACLE 7–10(这类场景适合真实引擎)。
- 法律 / 金融 / 医疗 / B2B SaaS营销 → SPECTACLE 3–5(工艺优先于特效;一个克制的动效场景)。
- 传统 / 奢侈品 / 编辑 / 出版 → SOUL 8–10, SPECTACLE 4–6(字体和底层框架承载风格,而非WebGL)。
- 任何产品类注册类型(仪表盘 / 管理后台 / 分析界面 / 应用) → SPECTACLE 1–4, DENSITY 6–9 — 清晰度优先于特效。跳过§2/§4,前往。
references/product-ui.md - H5类 → 旋钮跟随形态,而非行业(§0.E的H5行)。SPECTACLE的使用方式完全不同:无首屏引擎,预算用于转场和组件(FLIP缩放、扇形卡片堆叠、场景淡入淡出)而非WebGL画布。SPECTACLE 8的H5页面是状态切换惊艳的页面;§4的引擎表大多不适用。
1.B "Spectacle claimed, spectacle shown" (mandatory)
1.B "特效声明,特效落地"(强制规则)
If , the page MUST actually contain a working visual engine (a real Three.js/Canvas/GLSL/scroll-pinned moment), degrade gracefully, and hold 60fps on a mid-range device. A page that claims SPECTACLE 8 but ships a gradient blob is broken. If you cannot ship working spectacle in scope, drop the dial to 4 and ship an impeccably-crafted static page instead. Never half-build an engine that janks or cuts off.
SPECTACLE ≥ 7如果,页面必须实际包含可运行的视觉引擎(真实Three.js/Canvas/GLSL/滚动固定场景),优雅降级,并在中端设备上保持60fps。声明SPECTACLE 8但仅交付渐变背景的页面是不合格的。如果无法在范围内交付可运行的特效,将旋钮降到4,交付工艺精湛的静态页面。切勿构建卡顿或中断的半成品引擎。
SPECTACLE ≥ 72. PICK A SOUL (Industry → Persona) · brand register
2. 选择风格内核(行业→角色) · 品牌类注册类型
Product register: soul still matters (brand accent, one type system, the substrate), but skip the spectacle personas below — go to. The rest of §2 and §4 are for brand.references/product-ui.md
finesse's job is soul diversity: the same method must yield visually unrelated pages for different briefs.
Compose the soul — don't select it from a list. A closed table of ten personas yields ten pages; a model picking from ten options lands on the same two or three every time, weighted by what it has seen most.§3 gives the fix: draw one value each on five orthogonal axes — palette structure · type relationship · dominant layout family · engine · material/metaphor — and let the combination be the soul. Five axes with a handful of values each is thousands of combinations, not ten. The persona table below is the set of combinations already validated — calibration, not the ballot.references/divergence.md
Reach into for the industry→persona map (palette family, type pairing, hero-engine fit, signature effect). Examples of the range you must be able to hit:
references/style-personas.md- Cinematic tech (cyan/magenta, Inter + JetBrains Mono, Three.js particles) — astronomy, AI, crypto.
- Phosphor terminal (single neon-green, mono-forward, Canvas data viz) — quant/fintech, security.
- Editorial publication (cream/ink, Playfair + Spectral, GSAP scroll-reveal, grayscale photography) — magazines, film, journals.
- Warm heritage (amber/copper/ember, Fraunces/EB Garamond, Canvas fire/particles) — whisky, coffee, craft.
- Brutal typographic (bone/black + one hot accent, Anton/Bebas, mix-blend-mode) — fashion week, music, culture.
- Quiet luxury minimal (off-white/forest, Raleway 100–900, CSS-only mask/parallax) — architecture, hotels, fragrance.
Rules:
- One soul per page. Don't fluctuate warm and cool greys, or swap accent colors mid-scroll. Lock it (see §3, color lock).
- Rotate, don't repeat — and make it executable. "Don't reuse the last brief's lane" is a rule you cannot follow from memory: you have none across sessions. It has never once fired. Give it teeth: keep the used-list in §4 (a table of the last N builds' axis coordinates), read it before you draw, and require the new page to differ on ≥3 of the 5 axes. Saturated lanes (editorial-typographic, beige-brass craft, AI-purple-glow) are banned as defaults — earn them or avoid them (
references/divergence.md).references/anti-cheap.md - Break the tie with a die, not with willpower. When two directions are equally defensible, the model will silently take the one it has seen most. Roll for it (§6) — and if you override the roll, write down why. An unexamined default is the whole disease.
divergence.md
Once a persona is picked,has a wider bench of real pages per persona (48 beyond the 5 inreferences/inspiration-catalog.md) — technique notes, not files, for when you want a second reference point beyond the persona table's single description.examples/
产品类注册类型: 风格内核仍然重要(品牌强调色、统一字体系统、底层框架),但跳过以下特效角色——前往。§2和§4的其余内容仅适用于品牌类。references/product-ui.md
finesse的目标是风格多样性:相同方法需为不同需求生成视觉差异大的页面。
构建风格内核——而非从列表选择。固定的十个角色列表只能生成十个页面;模型从十个选项中选择时,会偏向它见过最多的两三个。§3提供解决方案:从五个正交轴分别选取一个值——调色板结构 · 字体关系 · 主导布局类型 · 引擎 · 材质/隐喻——让组合成为风格内核。五个轴各有几个值,可产生数千种组合,而非十种。下面的角色表是已验证的组合——校准工具,而非选项列表。references/divergence.md
从获取行业→角色映射(调色板系列、字体配对、首屏引擎适配、标志性效果)。你必须能实现的风格范围示例:
references/style-personas.md- 电影感科技(青/洋红、Inter + JetBrains Mono、Three.js粒子)——天文、AI、加密货币。
- 荧光终端(单一霓虹绿、单向前字体、Canvas数据可视化)——量化/金融科技、安全。
- 编辑出版(米白/墨黑、Playfair + Spectral、GSAP滚动展示、灰度摄影)——杂志、电影、期刊。
- 温暖传统(琥珀/铜/炭灰、Fraunces/EB Garamond、Canvas火焰/粒子)——威士忌、咖啡、手工艺。
- 极简排版(骨白/纯黑+一个亮色强调、Anton/Bebas、mix-blend-mode)——时装周、音乐、文化。
- 低调奢华极简(米白/森林绿、Raleway 100–900、纯CSS遮罩/视差)——建筑、酒店、香水。
规则:
- 每页一个风格内核。不要在滚动中切换冷暖灰色,或中途更换强调色。锁定风格(见§3,颜色锁定)。
- 轮换,不重复——并确保可执行。"不要重复上次需求的风格"是你无法凭记忆遵循的规则:跨会话无记忆。从未生效过。赋予其可执行性:在§4保留已用列表(最近N次构建的轴坐标表),选择前读取,要求新页面在**≥3个轴上与之前不同。饱和风格(编辑排版、米白黄铜手工艺、AI紫色光晕)作为默认方案**被禁止——需主动选择或避免(
references/divergence.md)。references/anti-cheap.md - 用随机选择打破平局,而非意志力。当两个方向同样合理时,模型会默默选择它见过最多的方向。随机选择(§6)——如果覆盖随机结果,写下原因。未审视的默认方案是问题根源。
divergence.md
选择角色后,提供每个角色的更多真实页面示例(references/inspiration-catalog.md之外的48个)——技术笔记,而非文件,当你需要角色表单个描述之外的第二个参考点时使用。examples/
3. THE PREMIUM SUBSTRATE (Why It Reads as Expensive)
3. 高级底层框架(为何看起来昂贵)
The difference between a cheap page and an expensive one is mostly a thin physical layer, applied consistently. Full recipes and exact values in . The non-negotiables below are the brand substrate.
references/design-dna.mdRegister note. The last three bullets — translucent borders, no pure/#fff, color lock — are the universal craft floor: they hold for product/dashboard too. The first four — grain, vignette,#000type tension, layered hero z-index — are brand-only; a dashboard replaces them with the product substrate inclamp()§0 (premium surfaces/cards, KPI tiles, fixed type scale, feedback motion). Don't apply brand grain/vignette/giant-type to a dashboard.references/product-ui.md
- Grain — a fixed SVG noise layer at
feTurbulence. Static, but kills the flat "vector slop" look. (Light pages too, lower opacity.)opacity .025–.05 - Vignette — a radial-gradient darken on dark heroes to create an optical focal point.
- Type tension — display headings at with negative tracking (
clamp()) and-.02 to -.045em; extreme weight contrast against a light body (e.g. 900 against 300). Tight, large, confident.line-height .86–.95- Conditional — all-caps display is the exception, and it is not a rare one. is correct for mixed case, where descenders (g, y, p) hold consecutive lines apart. All-caps has no descenders: cap-tops sit at the top of the line box, so at
.86–.95the caps of line 2 collide with the baseline and commas of line 1 and the two lines fuse into one band of ink. On a wide screen the headline sits on one line and you never see it; on a phone it wraps and the collision is guaranteed. This hits the brutal-typographic souls in §2 (Anton, Bebas) hardest — condensed faces have the tallest caps relative to their em box. So: whenever.86is on display type, thetext-transform: uppercasefloor isline-height, recommended1.0. Raise the leading or drop the uppercase — one or the other, not a compromise at1.02–1.08. Full reasoning:.98M6.references/mobile-floor.md
- Conditional — all-caps display is the exception, and it is not a rare one.
- Layered z-index — engine(0) · grain(1) · vignette · content(5). Depth, not flatness.
- Translucent borders — on dark,
rgba(255,255,255,.07–.22)on light. Never a hardrgba(0,0,0,.06–.08)line.#333 - No pure /
#fff. Tint every neutral a few points toward the brand hue.#000 - Color lock (mandatory): once an accent is chosen, it owns the whole page. No surprise teal badge on a rose page. Audit every component before shipping. If the brief actually asks for a swappable/multi-theme experience instead of one locked palette, see — the token-role and hardcoded-color pitfalls there are different from a single-palette build.
references/theming.md
Internally reason in OKLCH for palettes (perceptual consistency, easy light/dark pairing), even if you emit hex. Design light and dark together; test contrast in each — never just invert.
廉价页面和高级页面的差异主要在于一层薄的物理层,需一致应用。完整方案和精确值见。以下非 negotiable 规则是品牌类底层框架。
references/design-dna.md注册类型说明。最后三点——半透明边框、禁用纯/#fff、颜色锁定——是通用工艺底线:同样适用于产品/仪表盘。前四点——纹理、暗角、#000字体张力、分层首屏z-index——是品牌类专属;仪表盘用clamp()§0的产品底层框架替代(高级表面/卡片、KPI tiles、固定字体比例、反馈动效)。切勿将品牌类纹理/暗角/超大字体应用到仪表盘。references/product-ui.md
- 纹理 — 固定SVG 噪点层,
feTurbulence。静态,但消除扁平的"矢量粗糙感"。(浅色页面降低不透明度。)opacity .025–.05 - 暗角 — 深色首屏的径向渐变暗化,创造视觉焦点。
- 字体张力 — 展示型标题使用,负字距(
clamp()),-.02 to -.045em;与轻量正文字体形成极端字重对比(如900 vs 300)。紧凑、大尺寸、自信。line-height .86–.95- 条件规则——全大写展示型字体是例外,且并不罕见。适用于大小写混合字体,其中下行字母(g, y, p)分隔行。全大写无下行字母:大写字母顶部位于行框顶部,因此
.86–.95时第二行的大写字母会与第一行的基线和逗号碰撞,两行融合成一团墨迹。宽屏上单行标题不会出现此问题;手机端换行时必然碰撞。这对§2中的极简排版风格(Anton, Bebas)影响最大—— condensed字体的大写字母相对于em框最高。因此:当展示型字体使用.86时,text-transform: uppercase底线为line-height,推荐1.0。增加行高或取消大写——二选一,不要妥协到1.02–1.08。完整原因见.98M6。references/mobile-floor.md
- 条件规则——全大写展示型字体是例外,且并不罕见。
- 分层z-index — 引擎(0) · 纹理(1) · 暗角 · 内容(5)。有深度,非扁平。
- 半透明边框 — 深色背景用,浅色背景用
rgba(255,255,255,.07–.22)。切勿使用生硬的rgba(0,0,0,.06–.08)线条。#333 - 禁用纯/
#fff。所有中性色都向品牌色调偏移几个百分点。#000 - 颜色锁定(强制规则):选择强调色后,它贯穿整个页面。玫瑰色页面上不要出现意外的蓝绿色徽章。交付前审核每个组件。如果需求实际要求可切换/多主题体验而非单锁定调色板,见——运行时调色板切换的令牌角色和硬编码颜色陷阱与单调色板构建不同。
references/theming.md
内部调色板使用OKLCH(感知一致性、明暗配对简单),即使输出hex。同时设计明暗主题;测试每种主题的对比度——切勿仅反转。
4. THE HERO ENGINE (finesse's Differentiator) · brand register
4. 首屏引擎(finesse的差异化优势) · 品牌类注册类型
Product register: no hero engine — reach for a data-viz + component system instead (). This section is for brand.references/product-ui.md
A finesse page earns its name with one technically-spectacular moment — usually the hero. Not five. One, done at 100%. Pick the engine that fits the soul; full mount/render/scroll skeletons + reduced-motion fallbacks live in .
references/hero-engines.mdReadbefore this table, not after. These five engines are the heavy end of six routes; the table below answers which engine, that file answers whether this page needs one at all — and for most beats the answer is no. Its effect→route lookup routes the majority of motion briefs to CSS, native scroll-driven animation or View Transitions at zero bundle cost, and its beat sheet covers the other three-quarters of the page that this section has never had a vocabulary for. One heavy beat per page still holds — that rule survives intact asreferences/motion.md§4's budget. What changes is that the rest of the page stops defaulting to fade-up.motion.md
| Engine | Use when | Cost |
|---|---|---|
| Three.js + GLSL | 3D depth, particle systems (galaxies, networks, DNA), metaballs, bloom | heavy; lazy-load |
| Canvas 2D | particles, fields, real-time data (K-lines, waveforms, fire), flow | light; DPR-adapt for retina |
| WebGL FBO shader | fluid (Navier-Stokes), reaction-diffusion, ray-marching, iridescence | heavy; one fullscreen quad, multi-pass |
| GSAP ScrollTrigger | scroll-pinned story, horizontal pan, parallax, reveal stagger | medium; the single most reusable engine |
| CSS-only | dual-layer mask, 3D transforms, variable-font morph, scroll-driven | free; no JS, best perf |
Component-level 3D ≠ hero engine. The table above is for the one full-bleed hero moment. For reusable, in-page 3D — pointer-tilt cards, flip cards, coverflow, depth-parallax layers, or a Three.js product/model viewer — reach for(thereferences/3d-effects.mdcommand). Default to its CSS tier; it ships in any page at zero cost and rarely janks. One 3D moment per page still applies: don't stack a hero engine and a tilt grid and a coverflow.depth
Engine discipline (mandatory):
- Progressive enhancement. The page must be readable and complete with the engine removed. The engine is a fixed background or a hero accent, never load-bearing for content.
- 60fps or simplify. Animate only /
transform. Test on a mid-range device, not your machine. Below ~50fps, cut particle count or resolution.opacity - is mandatory — freeze the engine to a still frame (or hide it and show a composed static hero). Never ship motion with no fallback.
prefers-reduced-motion - Motivated motion only. Every ScrollTrigger / marquee / pinned section needs a one-sentence reason (hierarchy, storytelling, feedback, state). "It looked cool" is not a reason. Max one marquee per page.
产品类注册类型: 无首屏引擎——使用数据可视化+组件系统替代()。本节仅适用于品牌类。references/product-ui.md
finesse页面凭借一个技术惊艳的场景脱颖而出——通常是首屏。不是五个。一个场景做到100%完美。选择适配风格内核的引擎;完整挂载/渲染/滚动骨架+减少动效降级方案见。
references/hero-engines.md先读,再读此表。这五个引擎是六种路径的重量级端;下表回答「用哪个引擎」,references/motion.md回答「此页面是否需要引擎」——大多数场景答案是否。其效果→路径映射表将大多数动效需求路由到CSS、原生滚动驱动动画或View Transitions,零打包成本,其四节拍表覆盖了本节从未涉及的页面其他四分之三内容。每页一个重量级节拍的规则仍然有效——作为motion.md§4的预算规则保留。变化在于页面其他部分不再默认使用淡入。motion.md
| 引擎 | 使用场景 | 成本 |
|---|---|---|
| Three.js + GLSL | 3D深度、粒子系统(星系、网络、DNA)、 metaballs、 bloom | 重;懒加载 |
| Canvas 2D | 粒子、场、实时数据(K线、波形、火焰)、流 | 轻;适配DPR支持视网膜屏 |
| WebGL FBO shader | 流体(Navier-Stokes)、反应扩散、光线追踪、彩虹色 | 重;单个全屏四边形,多通道 |
| GSAP ScrollTrigger | 滚动固定叙事、水平平移、视差、 stagger展示 | 中;最可复用的引擎 |
| 纯CSS | 双层遮罩、3D变换、可变字体变形、滚动驱动 | 免费;无JS,性能最佳 |
组件级3D ≠ 首屏引擎。上表针对单个全屏首屏场景。对于可复用的页内3D——指针倾斜卡片、翻转卡片、封面流、深度视差层,或Three.js产品/模型查看器——使用(references/3d-effects.md命令)。默认使用CSS层;零成本交付,极少卡顿。每页一个3D场景的规则仍然适用:不要同时叠加首屏引擎和倾斜网格和封面流。depth
引擎原则(强制规则):
- 渐进增强。移除引擎后页面仍需可读且完整。引擎是固定背景或首屏点缀,绝非内容的承载层。
- 60fps或简化。仅动画/
transform。在中端设备测试,而非你的机器。低于~50fps时,减少粒子数量或分辨率。opacity - 是强制规则——将引擎冻结到静态帧(或隐藏引擎,展示合成静态首屏)。切勿交付无降级方案的动效。
prefers-reduced-motion - 仅必要动效。每个ScrollTrigger / 跑马灯 / 固定章节都需要一句理由(层级、叙事、反馈、状态)。"看起来酷"不是理由。每页最多一个跑马灯。
5. PAGE SKELETON — four brand skeletons, not one
5. 页面骨架 — 四种品牌骨架,而非一种
A single canonical sequence is itself a source of sameness. If every brand page is, then every brand page is the same page, no matter how well the colors were chosen. A landing page argues; a portfolio proves; a lookbook seduces; a studio site demonstrates. Those are four different arguments, so they are four different structures. Pick by what the page has to do, then diverge inside it (HERO → MARQUEE → MANIFESTO → GRID → CTA → FOOTER§3, axis C).references/divergence.md
单一标准序列本身就是同质化的来源。如果每个品牌页面都是,那么每个品牌页面都是相同的,无论配色多么出色。落地页用于论证;作品集用于证明;画册用于吸引;工作室站点用于展示能力。这些是四种不同的论证,因此是四种不同的结构。根据页面功能选择,再在内部差异化(HERO → MARQUEE → MANIFESTO → GRID → CTA → FOOTER§3,轴C)。references/divergence.md
5.A Landing / launch — a thing exists, and it must be understood
5.A 落地页 / 发布页 — 产品存在,需让用户理解
HERO (the engine moment) → SPEC BAND (4-col hairline, real numbers) →
THE ARGUMENT (exploded view · demo · full-page engine — SHOW the thing working) →
ASYMMETRIC PRODUCT GRID (1.4fr 1fr — never 4 identical cards) →
TECH / DEPTH (dark-panel inversion, numbered only if the numbering means something) →
CTA (oversized) → FOOTERThe load-bearing section is the argument — an exploded-view scrub, a live console, a working demo ( §5.B). A landing page that only asserts quality and never shows it is a brochure. If the product is physical or layered, take it apart on scroll.
page-crafting.mdHERO(引擎场景) → 规格栏(4列细边框,真实数据) →
论证区(拆解视图 · 演示 · 全屏引擎——展示产品运行) →
非对称产品网格(1.4fr 1fr — 切勿4个相同卡片) →
技术/深度区(深色面板反转,仅当编号有意义时使用编号) →
CTA(超大尺寸) → 页脚承载核心信息的区域是论证区——拆解视图scrub、实时控制台、可运行演示( §5.B)。仅断言质量而不展示的落地页只是宣传册。如果产品是实体或分层结构,滚动时将其拆解展示。
page-crafting.md5.B Portfolio / personal — the work is the argument; you are not
5.B 作品集 / 个人站点 — 作品是论证;你不是
INTRO (a full-bleed image or a statement — not a headshot-and-tagline) →
THE WORK (filmstrip accordion · generative grid · list-rows with thumbnails) →
MANIFESTO (one statement, one column) → CAPABILITIES (list, not cards) →
SELECTED DETAIL (one project, deep) → CONTACT (oversized type) → FOOTERRules that are specific to a personal site, and that AI gets wrong every time:
- The work comes before the words. An "About me" section above the first project is a résumé, not a portfolio.
- A grid of 6 identical project cards is the failure mode. Reach for a list with rows (+ a small thumbnail), a hover-expand filmstrip (
64px 1fr auto 90px§3), or a generative split grid (§8). The layout should already say what kind of designer you are.page-crafting.md - No "skills" bar charts. A percentage on "creativity" is the single cheapest thing a personal page can contain.
- One project shown deeply beats six shown shallowly.
引言(全屏图片或声明——不是头像+标签) →
作品区(胶片条手风琴 · 生成式网格 · 带缩略图的列表行) →
宣言(单句声明,单列) → 能力(列表,非卡片) →
精选细节(单个项目,深度展示) → 联系方式(超大字体) → 页脚个人站点的特定规则,AI每次都会出错:
- 作品先于文字。第一个项目上方的「关于我」部分是简历,而非作品集。
- 6个相同项目网格是失败模式。使用带行的列表(+ 小缩略图)、悬停展开胶片条(
64px 1fr auto 90px§3),或生成式拆分网格(§8)。布局本身应说明你是哪种设计师。page-crafting.md - 无「技能」条形图。「创造力」百分比是个人页面最廉价的内容。
- 一个项目深度展示胜过六个浅展示。
5.C Lookbook / collection — the mood is the product
5.C 画册 / 系列 — 氛围是产品
HERO (split: type | image, ragged) → BRAND STATEMENT (dark inversion, one quote, 100vh) →
HORIZONTAL LOOKBOOK (pinned track, ragged heights, bottom-aligned) →
MATERIALS (clip-path wipe cards) → COLLECTION (gap:2px grid — a spread, not a card wall) →
ATELIER (1fr 1fr, image + CTA) → FOOTERLight/dark alternation is the structure here, which forces a nav that adapts to what's under it ( §4 — scroll-spy, not ). Density comes from rhythm (ragged heights, tight gutters), not from adding sections. Hierarchy is carried by an opacity ladder on 3-4 tokens, not by more colors.
page-crafting.mdmix-blend-modeHERO(拆分:文字 | 图片,不规则边缘) → 品牌声明(深色反转,单句引用,100vh) →
水平画册(固定轨道,不规则高度,底部对齐) →
材质区(clip-path擦除卡片) → 系列区(gap:2px网格——跨页,而非卡片墙) →
工作室区(1fr 1fr,图片+CTA) → 页脚明暗交替是此处的结构,这要求导航适配下方内容( §4——滚动监听,而非)。密度来自节奏(不规则高度、紧凑 gutter),而非添加章节。层级由3-4个令牌的不透明度阶梯承载,而非更多颜色。
page-crafting.mdmix-blend-mode5.D Agency / studio — the capability is the product
5.D 代理/工作室站点 — 能力是产品
HERO (composition — geometric collage · type-as-image · CSS-only) →
PROOF BAND (stats with real provenance) → CRAFT (split, one idea) →
SERVICES (≤4, and they must differ from each other visually) →
DARK INVERSION (offers · bento · a change of key) →
TESTIMONIAL RAIL (scroll-snap, autoplay off on interaction) → CTA → FOOTERThe trap: services as four identical icon-cards — icon, title, two lines, ×4. That is the #1 tell (), and it's endemic to agency pages. If four services must appear, make the cards structurally different (varying spans, one with an image, one with a number), or use a numbered list with real typographic weight instead.
anti-cheap.mdHERO(构图——几何拼贴 · 文字即图像 · 纯CSS) →
证明栏(带真实来源的数据) → 工艺区(拆分,单个创意) →
服务(≤4个,且视觉上彼此不同) →
深色反转区(报价 · 网格布局 · 风格转变) →
推荐语轨道(滚动吸附,交互时停止自动播放) → CTA → 页脚陷阱:四个相同图标卡片的服务区——图标、标题、两行文字×4。这是最明显的AI特征(),在代理站点中普遍存在。如果必须展示四个服务,让卡片结构不同(不同跨度、一个带图片、一个带数字),或使用带真实字重的编号列表替代。
anti-cheap.mdRules that hold across all four
所有四种骨架的通用规则
- Nav: single line, ≤80px. Over alternating light/dark sections use a scroll-spy class toggle (§4).
page-crafting.mdonly over high-contrast imagery — it goes muddy over mid-tones.mix-blend-mode: difference - Layout diversification: once a layout family is used (3-col cards, full-width quote, split image+text), it appears at most once more. Max 2 consecutive image+text zigzags. A page with 8 sections uses ≥4 layout families — count them before shipping.
- Eyebrow restraint: the tiny-uppercase-tracked label above every headline is the #1 AI tell. Max 1 eyebrow per 3 sections — , counted, not felt. Usually the headline alone is enough.
≤ ceil(sections / 3) - Theme lock: one theme per page — except where the skeleton above calls for a deliberate dark inversion (5.C, 5.D), which is a structural device, not a drift.
- Numbering () must be motivated by the material — film frame codes, plate numbers, movement parts. As default architecture it is a tell.
01 · 02 · 03
- 导航: 单行,≤80px。交替明暗章节上使用滚动监听类切换(§4)。
page-crafting.md仅在高对比度图像上使用——中色调上会变得模糊。mix-blend-mode: difference - 布局多样化: 使用一种布局类型(3列卡片、全宽引用、图片+文字拆分)后,最多再出现一次。最多2个连续的图片+文字交替。8个章节的页面需使用≥4种布局类型——交付前统计。
- 小标题克制: 每个标题上方的小号大写字距标签是最明显的AI特征。最多每3个章节一个小标题——,精确统计,而非感觉。通常标题本身足够。
≤ ceil(章节数 / 3) - 主题锁定: 每页一个主题——除非骨架明确要求故意深色反转(5.C, 5.D),这是结构手段,而非风格漂移。
- 编号()需由内容驱动——电影帧编码、印版编号、运动部件。作为默认架构是AI特征。
01 · 02 · 03
6. THE CHEAPNESS BLACKLIST
6. 廉价设计黑名单
Before declaring done, scan against — the merged anti-slop list (AI tells + absolute bans + reflex-reject fonts/palettes/aesthetics). The headline offenders:
references/anti-cheap.md- em-dashes in copy as a flourish — banned outright (the single most-violated tell).
- gradient text, default glassmorphism, side-stripe card borders, AI-purple glow.
- eyebrow on every section, numbered markers as default architecture.
01 · 02 · 03 - identical card grids (icon + title + text × 6), div-based fake screenshots / fake dashboards.
- fake-precise numbers (,
92%) with no real source.4.1× - default-category palette (beige+brass for craft, purple-glow for AI/SaaS) — name it, reject it.
- /
Inter/Frauncesas unexamined defaults — fine if chosen with a reason, a tell if reached for blindly.Instrument Serif - zero imagery in a slot the page actually has for one — hero, gallery, PDP shot, H5 cover/scene, empty state. Judged off the skeleton, not the industry; that's a bug, not minimalism. Its mirror fails too: images that appeared without the user saying yes (§0).
asset-sourcing.md
交付前,对照扫描——合并的反粗糙列表(AI特征+绝对禁止+反射式否决字体/调色板/美学风格)。主要违规项:
references/anti-cheap.md- 文案中用em-dashes作为装饰——绝对禁止(最常违反的特征)。
- 渐变文本、默认玻璃态、侧边条纹卡片边框、AI紫色光晕。
- 每个章节都有小标题、默认架构使用编号标记。
01 · 02 · 03 - 相同卡片网格(图标+标题+文字×6)、div模拟的假截图/假仪表盘。
- 虚假精确数字(、
92%)无真实来源。4.1× - 默认类别调色板(手工艺用米色+黄铜,AI/SaaS用紫色光晕)——列出并否决。
- /
Inter/Fraunces作为未审视的默认字体——有理由选择时没问题,盲目选择是AI特征。Instrument Serif - 页面有图片位置但无图片——首屏、画廊、商品详情页图片、H5封面/场景、空状态。根据骨架判断,而非行业;这是bug,不是极简主义。镜像失败:未询问用户就添加图片(§0)。
asset-sourcing.md
7. PERFORMANCE & ACCESSIBILITY GUARDRAILS
7. 性能与无障碍防护规则
- Animate /
transformonly; neveropacity.top/left/width/heightsparingly.will-change - : stop canvas loops, freeze grain, swap to static. Mandatory on every animated page — no exceptions, decorative motion included. A page that animates without a reduced-motion terminal state is shipping broken.
prefers-reduced-motion- Capability-probe pattern (the ship-ready shape): read the probes once at the top — — then branch per effect:
const RM = matchMedia('(prefers-reduced-motion:reduce)').matches; const FINE = matchMedia('(hover:hover) and (pointer:fine)').matches;. Gate pointer-dependent motion (magnetic buttons, cursor followers, hover accordions) behindif (RM) <set final state> else <animate>so it never fires on touch. Pair with the CSS backstopFINE. Every hand-built chart draw-in ships its terminal state the same way (@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}§6).chart-crafting.md
- Capability-probe pattern (the ship-ready shape): read the probes once at the top —
- Color contrast WCAG AA: body ≥ 4.5:1, large text ≥ 3:1. Includes buttons over photos (add scrim/stroke), placeholders, focus rings.
- Visible focus states on every interactive element. Nav and CTAs reachable by keyboard.
- Core Web Vitals: lazy-load heavy engines, over
min-h-dvhon mobile, responsive images (WebP/AVIF), CLS < 0.1.100vh - Mobile collapse declared explicitly per multi-column section. Touch targets ≥ 44px.
- h5 register: the six rules below are about a desktop page surviving a phone. A phone-only page has a different gate list — notch / frame / scroll-container / touch / SE-height / ambient-motion — in §10. M1/M4/M6 still hold inside the frame; M2 and M5 largely evaporate (one column, one bottom bar).
references/h5-mobile.md - The mobile floor — six hard rules, full reasoning in . Test at 320 · 375 · 414 · 768, not by dragging a desktop window until it looks off. M1
references/mobile-floor.mdon bothoverflow-x: clipandhtml— neverbody, which makes a scroll container and silently kills every sticky descendant. M2 image-bearing grid tracks arehidden, never bareminmax(0,1fr)(whose1frminimum is the image's intrinsic width); flex children getauto. M3 clickable text never wraps at any width — shorten the label first,min-width: 0second. M4 display headings carrynowrap. M5 exactly one sticky atoverflow-wrap: anywhere; min-width: 0; others offset bytop: 0, with--nav-habove--z-nav. M6 all-caps display type has a--z-stickyfloor ofline-height(see §3).1.0catches M1/M2/M5/M6 mechanically; M3 and M4 need a rendered page at 320px.scripts/detect.mjs
- 仅动画/
transform;切勿动画opacity。谨慎使用top/left/width/height。will-change - :停止Canvas循环、冻结纹理、切换到静态。每个动画页面都必须遵循——无例外,装饰性动效也不例外。无减少动效终端状态的页面是不合格的。
prefers-reduced-motion- 能力探测模式(可交付形态): 顶部读取一次探测结果————然后按效果分支:
const RM = matchMedia('(prefers-reduced-motion:reduce)').matches; const FINE = matchMedia('(hover:hover) and (pointer:fine)').matches;。将依赖指针的动效(磁吸按钮、光标跟随、悬停手风琴)置于if (RM) <设置终端状态> else <动画>之后,避免在触摸设备触发。搭配CSS兜底FINE。每个手写图表绘制都需以相同方式交付终端状态(@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}§6)。chart-crafting.md
- 能力探测模式(可交付形态): 顶部读取一次探测结果——
- 颜色对比度符合WCAG AA:正文≥4.5:1,大文本≥3:1。包括图片上的按钮(添加遮罩/描边)、占位符、焦点环。
- 每个交互元素都有可见的焦点状态。导航和CTA可通过键盘访问。
- Core Web Vitals:懒加载重引擎,移动端用替代
min-h-dvh,响应式图片(WebP/AVIF),CLS < 0.1。100vh - 多列章节明确声明移动端折叠。触摸目标≥44px。
- H5类注册类型: 以下六条规则针对桌面页面适配手机。仅手机端页面有不同的检查列表——刘海 / 帧 / 滚动容器 / 触摸 / SE高度 / 氛围动效——见§10。M1/M4/M6在帧内仍然适用;M2和M5基本无需考虑(单列、一个底部栏)。
references/h5-mobile.md - 移动端适配底线——六条硬规则,完整原因见。在320 · 375 · 414 · 768分辨率测试,而非拖拽桌面窗口直到看起来不对。M1
references/mobile-floor.md和html都使用body——切勿用overflow-x: clip,这会创建滚动容器并静默破坏所有粘性后代。M2 含图片网格轨道使用hidden,切勿用裸minmax(0,1fr)(其1fr最小值是图片固有宽度);flex子元素使用auto。M3 可点击文本在任何宽度下都不换行——先缩短标签,再用min-width: 0。M4 展示型标题使用nowrap。M5 仅一个元素粘性定位在overflow-wrap: anywhere; min-width: 0;其他元素偏移top: 0,--nav-h高于--z-nav。M6 全大写展示型字体行高底线为--z-sticky(见§3)。1.0可自动检测M1/M2/M5/M6;M3和M4需在320px渲染页面检查。scripts/detect.mjs
8. PRE-FLIGHT CHECK
8. 预检查
Run the full checklist in before saying "done." It merges the substrate check, the cheapness scan, the spectacle-claimed verification, the mobile floor, and the a11y gates. If any hard rule fails, it is shipping broken work — fix before delivery.
references/preflight.mdGate 1 runs first and takes ten seconds: does the page actually render? Every local / / must resolve to a file that exists, and the detector must have been found and run. This is not pedantry — a to a stylesheet that was never written renders as unstyled serif text, and every other check in the file passes on it, because there is no grain to be missing and no to be banned in a file that doesn't exist. It is also how a truncated build ships: HTML written, run ended before the CSS, dutifully recording a page that isn't on screen. Gate 1 has the detector-resolution snippet — the detector lives with the skill, not in the user's project, so a hard-coded path silently fails everywhere except a vendored copy.
hrefsrcurl()<link>#fff.finesse/log.jsonpreflight.mdskills/finesse-ui/…交付前运行中的完整检查清单。它合并了底层框架检查、廉价设计扫描、特效落地验证、移动端适配底线和无障碍规则。任何硬规则失败,都属于不合格交付——修复后再交付。
references/preflight.md检查1最先执行,耗时十秒:页面是否真正渲染? 所有本地 / / 都必须指向存在的文件,且检测器必须被找到并运行。这不是吹毛求疵——指向未编写样式表的会渲染为无样式衬线文本,文件中其他所有检查都会通过,因为不存在纹理缺失或禁用的问题。这也是截断构建交付的方式:HTML已编写,构建在CSS完成前终止,记录了一个不存在的页面。检查1有检测器解析代码片段——检测器随技能提供,而非用户项目,因此硬编码的路径在非 vendored 副本中会静默失败。
hrefsrcurl()<link>#fff.finesse/log.jsonpreflight.mdskills/finesse-ui/…8.0 Record the build (after Pre-Flight passes, before you say "done")
8.0 记录构建信息(预检查通过后,交付前)
Two writes. They cost about thirty seconds and they are the only reason the next run can rotate off this one.
- Stamp the CSS. The first non-empty line of the page's stylesheet (or the top of the inline ) carries the five-axis coordinates:
<style>h5 builds add the morphology —css/* finesse · register=brand · A=mono+acid-lime · B=900/300 · C=pinned-h-track * D=GSAP-scrub · E=machined-metal · SOUL=8 SPECTACLE=7 DENSITY=4 */(register=h5 · morph=A-app-shell · …§11). Rotation applies to the soul axes and the morphology, never to the furniture: every app's TabBar should look like every other app's TabBar, the same carve-outh5-mobile.md§0 makes for dashboard navigation.divergence.md - Append to — prepend the entry to the array, trim to the last 20. Schema in
.finesse/log.json§4.1. Create the directory and file if they don't exist.divergence.md
Component-scope builds do neither of these — they use the component stamp and are never logged ( §5). Components don't rotate; a project's buttons should look like siblings.
component-scope.md两次写入。耗时约三十秒,但这是下一次构建能避开本次风格的唯一原因。
- CSS标记。页面样式表的第一个非空行(或内联顶部)包含五轴坐标:
<style>H5类构建添加形态 —css/* finesse · register=brand · A=mono+acid-lime · B=900/300 · C=pinned-h-track * D=GSAP-scrub · E=machined-metal · SOUL=8 SPECTACLE=7 DENSITY=4 */(register=h5 · morph=A-app-shell · …§11)。风格轮换适用于风格内核轴和形态,不适用于组件:每个应用的TabBar应与其他应用的TabBar一致,与h5-mobile.md§0对仪表盘导航的例外相同。divergence.md - 追加到— 将条目添加到数组开头,保留最近20条。 schema见
.finesse/log.json§4.1。如果目录和文件不存在,创建它们。divergence.md
组件范围构建无需执行上述操作——使用组件标记,从不记录( §5)。组件无需风格轮换;项目中的按钮应彼此一致。
component-scope.md8.A POST-DELIVERY ITERATION GUIDE
8.A 交付后迭代指南
After the user receives the initial output, map their feedback to the correct targeted fix. Never rebuild from scratch for a single complaint — identify the dial or module responsible and adjust only that. The Command column is the verb to route through (see ); if the user typed the command, you're already there.
## Commands| User says | Command | Action |
|---|---|---|
| "too plain / boring" | | Raise SPECTACLE +2; consider upgrading the engine type (e.g. Canvas → Three.js) |
| "too flashy / overwhelming" | | Lower SPECTACLE −2; simplify or swap to Engine D (GSAP) or E (CSS-only) |
| "wrong vibe / feels off" | | Re-run §2 with a different persona from |
| "too much whitespace" | | Raise DENSITY +2; add one content section |
| "too cluttered" | | Lower DENSITY −2; cut a section, increase section padding |
| "more personality / bolder" | | Raise SOUL +2; push color commitment level up one step in |
| "feels generic / like every other AI site" | | Systemic, not per-page. Recompose the soul from the five axes ( |
| "every page you make looks the same" | | Same as above. Then write the used-list ( |
| "change the colors" | | Re-run color strategy in |
| "different animation" | | Swap engine type in §4; re-run |
| "add depth / make it 3D / tilt / parallax" | | Add one 3D moment from |
| "remove a section" | | Remove it, then re-audit §5 layout families (ensure ≥4 families remain) |
| "feels slow / heavy" | | Lower SPECTACLE; switch to Engine E (CSS-only) or reduce particle count/FBO resolution |
| "needs to work on mobile" | | Declare mobile layout per multi-column section; |
| "不知道它在干嘛 / 一直转圈 / 停不下来 / 花了多少钱看不到" (AI 工作台) | | Not a styling complaint — the register's four questions are unanswered. |
| "像个聊天窗口,不像工作台" (AI 工作台) | | Bubbles-only is the failure. |
| "刘海挡住了 / 底部栏遮住内容 / 按不动" (h5) | | Not a layout opinion — a mechanical defect. Run |
| "不像 app / 像个网页" (h5) | | The furniture is missing or wrong, not the palette. |
| "is this any good? / review it" | | Read-only: run the blacklist + spectacle-shown + pre-flight, report findings |
用户收到初始输出后,将其反馈映射到正确的针对性修复。切勿因单个反馈重新完整构建——确定负责的旋钮或模块,仅调整该部分。命令列是要路由的动词(见);如果用户输入了命令,直接执行即可。
## Commands| 用户反馈 | 命令 | 操作 |
|---|---|---|
| "太普通/无聊" | | 提高SPECTACLE +2;考虑升级引擎类型(如Canvas → Three.js) |
| "太花哨/过载" | | 降低SPECTACLE −2;简化或切换到引擎D(GSAP)或E(纯CSS) |
| "风格不对/感觉奇怪" | | 从 |
| "空白太多" | | 提高DENSITY +2;添加一个内容章节 |
| "太拥挤" | | 降低DENSITY −2;删除一个章节,增加章节内边距 |
| "更有个性/更大胆" | | 提高SOUL +2;在 |
| "感觉通用/和其他AI生成的页面一样" | | 系统性修复,而非单页面。从五个轴重构风格内核( |
| "你做的所有页面都一样" | | 同上。然后编写已用列表( |
| "改颜色" | | 在 |
| "换动画" | | 在§4中更换引擎类型;重新运行 |
| "添加深度/做成3D/倾斜/视差" | | 从 |
| "删除一个章节" | | 删除后,重新审核§5布局类型(确保≥4种类型保留) |
| "感觉慢/重" | | 降低SPECTACLE;切换到引擎E(纯CSS)或减少粒子数量/FBO分辨率 |
| "需要适配手机" | | 为每个多列章节声明移动端布局; |
| "不知道它在干嘛/一直转圈/停不下来/看不到花了多少钱" (AI 工作台) | | 不是样式问题——注册类型的四个问题未回答。 |
| "像聊天窗口,不像工作台" (AI 工作台) | | 仅气泡是失败模式。 |
| "刘海挡住了/底部栏遮住内容/按不动" (h5) | | 不是布局偏好——是机械缺陷。按顺序运行 |
| "不像app/像网页" (h5) | | 组件缺失或错误,而非调色板。 |
| "这个好不好?/审核一下" | | 只读:执行黑名单+特效落地+预检查,报告结果 |
9. OUT OF SCOPE
9. 超出范围
finesse covers brand, product, commerce and h5, so its scope is wide. Hand off only when the work is a pure backend / API / data task with no interface, or a brief that explicitly wants a generic, conventional, zero-craft page (finesse always brings craft — if the user truly wants bland, that's a different tool). Everything from a spectacle landing page to a dense admin dashboard to a phone-only 活动页 is in scope: set the register in §0 and route accordingly.
One boundary worth naming: h5 covers the design of a phone-only page, not the platform plumbing around it. WeChat JS-SDK wiring, share-card configuration, payment integration, app-shell native bridges, and mini-program framework scaffolding are engineering tasks, not design ones — build the screen, hand those off.
finesse覆盖品牌类、产品类、电商类和H5类,因此范围广泛。仅当工作是纯后端/API/数据任务,无界面,或需求明确要求通用、常规、零工艺页面时移交(finesse始终带工艺——如果用户真的想要平淡风格,需使用其他工具)。从炫酷落地页到密集管理后台到仅手机端活动页,都在范围内:在§0设置注册类型并路由即可。
值得明确的边界:H5覆盖仅手机端页面的设计,而非周围的平台 plumbing。微信JS-SDK配置、分享卡片设置、支付集成、应用壳原生桥接、小程序框架脚手架是工程任务,而非设计任务——构建页面后移交这些任务。