
impeccable
熱門當使用者想要設計、重新設計、塑造、評論、審計、打磨、釐清、提煉、強化、優化、調整、動畫化、上色、提取或以其他方式改善前端介面時使用。涵蓋網站、登陸頁面、儀表板、產品 UI、應用程式外殼、元件、表單、設定、引導流程和空狀態。處理 UX 審查、視覺層級、資訊架構、認知負荷、無障礙性、效能、響應式行為、主題設定、反模式、排版、字型、間距、佈局、對齊、色彩、動畫、微互動、UX 文案、錯誤狀態、邊界情況、國際化以及可重複使用的設計系統或代幣。也適用於需要更大膽或更令人愉悅的平淡設計、需要更安靜的喧囂設計、對 UI 元素進行即時瀏覽器迭代,或追求技術上非凡的視覺效果。不適用於僅後端或非 UI 的任務。
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
設計並迭代生產級前端介面。真實可運行的程式碼、經過深思熟慮的設計決策、卓越的工藝。
設定
在繼續之前,你必須執行以下步驟:
- 每個工作階段執行一次
node .claude/skills/impeccable/scripts/context.mjs。如果你已經在此對話中看過它的輸出,請勿重新執行。該腳本會將專案的 PRODUCT.md(以及 DESIGN.md,如果存在)以 Markdown 區塊形式印出,或者告訴你它缺失。按照它印出的內容操作。如果它報告NO_PRODUCT_MD,請停止並在執行任何其他操作之前遵循reference/init.md。 如果輸出結尾有UPDATE_AVAILABLE指令,請遵循它(詢問使用者一次是否要更新,然後繼續)。它永遠不會阻塞當前任務。 - 如果使用者呼叫了子命令(
craft、shape、audit、polish……),你必須接著閱讀reference/<command>.md。這是非選擇性的。參考文件定義了命令的流程;沒有它,你會跳過使用者期望的步驟。 - 熟悉程式碼中任何現有的設計系統、慣例和元件。至少閱讀一個專案檔案(CSS / tokens / theme / 一個代表性的元件或頁面)。即使在步驟 2 中已載入子命令參考文件,這也是必需的。 不要重新發明輪子;在現有內容有效時使用它,在 UX 勝出時進行擴展。
- 閱讀對應的 register 參考文件。這是非選擇性的;跳過它會產生通用的輸出。 如果專案是行銷、登陸頁面、活動、長篇內容或作品集(設計即產品),請閱讀
reference/brand.md。如果是應用程式 UI、管理後台、儀表板或工具(設計服務於產品),請閱讀reference/product.md。根據以下條件選擇第一個匹配項:(1) 任務提示("landing page" vs "dashboard");(2) 正在處理的表面(頁面、檔案或路由);(3) PRODUCT.md 中的register欄位。 - 如果專案是全新的(在步驟 3 中未找到現有的 CSS tokens / theme / 已提交的品牌顏色),請執行
node .claude/skills/impeccable/scripts/palette.mjs以接收品牌種子顏色和構圖指導。這是你的主要品牌顏色的錨點。根據腳本的指示,圍繞它組合其餘的調色板(bg、surface、ink、accent、muted)。全程使用 OKLCH。僅當步驟 3 在現有 tokens 中找到了已提交的品牌顏色時才跳過此步驟;在這種情況下,保留品牌識別優先。
設計指導
產出可出貨的生產級程式碼,而非原型或起點。除非使用者要求(有疑問時請詢問),否則不要走捷徑。在達成完整實作之前不要停止(美觀、響應式、快速、精確、無錯誤、符合品牌)。你認真對待細節:每個頁面、區塊或元件都使用你可用的工具(瀏覽器截圖、電腦使用等)進行了實戰測試。Claude 能夠完成非凡的工作。不要保留。
通用規則
色彩
- 驗證對比度。 正文文字與其背景的對比度必須達到 ≥4.5:1;大字型(≥18px 或粗體 ≥14px)需要 ≥3:1。佔位符文字也需要 4.5:1,而不是預設的淺灰色。最常見的失敗:在帶色調的近白色背景上使用淺灰色正文。如果對比度接近,請將正文顏色向色階的墨水端移動;淺灰色「為了優雅」是 AI 設計難以閱讀的最大單一原因。
- 灰色文字在彩色背景上看起來褪色。使用背景色調的較深色調,或文字顏色的透明度。
排版
- 將正文行長限制在 65–75ch。
- 不要搭配相似但不相同的字型(兩個幾何無襯線字體、兩個人文無襯線字體)。在對比軸上搭配(襯線 + 無襯線、幾何 + 人文),或使用一個系列的多種字重。
- 主視覺 / 顯示標題上限:clamp() 最大值 ≤ 6rem(約 96px)。超過此值,頁面是在吼叫,而不是在設計。
- 顯示標題字距下限:≥ -0.04em。再緊的話字母會碰在一起;擁擠,而不是「設計」。
- 在 h1–h3 上使用
text-wrap: balance以獲得均勻的行長;在長篇散文中使用text-wrap: pretty以減少孤行。
佈局
- 變化間距以創造節奏。
- 卡片是懶惰的答案。僅在它們確實是最佳 affordance 時使用它們。嵌套卡片永遠是錯的。
- 一維使用 Flexbox,二維使用 Grid。不要預設使用 Grid,而
flex-wrap更簡單。 - 對於無斷點的響應式網格:
repeat(auto-fit, minmax(280px, 1fr))。 - 建立語義化的 z-index 層級(dropdown → sticky → modal-backdrop → modal → toast → tooltip)。永遠不要使用像 999 或 9999 這樣的任意值。
動畫
- 動畫應該是有意圖的,而不是事後才想到。將其視為建構的一部分。
- 除非確實需要,否則不要對 CSS 佈局屬性進行動畫處理。
- 使用指數曲線進行淡出(ease-out-quart / quint / expo)。不要彈跳,不要彈性。
- 對於更高階的動畫需求,使用函式庫(例如 motion、gsap、anime.js、lenis 等)。
- 減少動畫不是可選項。每個動畫都需要一個
@media (prefers-reduced-motion: reduce)替代方案:通常是交叉淡入淡出或即時過渡。 - 在同一個列表中交錯項目是合理的。問題在於統一的反射(每個區塊使用相同的入場動畫),而不是動畫本身;每個揭示應該適合它所揭示的內容。壓制反射絕不是交付一個完全沒有動畫的頁面的理由。
- 揭示動畫必須增強已經可見的預設狀態。不要將內容可見性限制在類別觸發的過渡上;過渡會在隱藏的標籤頁和無頭渲染器上暫停,因此揭示永遠不會觸發,區塊會以空白狀態出貨。
- 高級動畫素材不僅僅是 transform/opacity。模糊、backdrop-filter、clip-path、mask 和陰影/發光都是調色板的一部分,當它們能實質改善效果並保持流暢時。
互動
- 在
overflow: hidden或overflow: auto容器內使用position: absolute渲染的下拉選單將被裁剪。使用原生<dialog>/ popover API、position: fixed或 portal 來逃脫堆疊上下文。
僅限新專案(當沒有先前工作時)
色彩與主題
- 使用 OKLCH。
- 奶油色 / 沙色 / 米色背景是 2026 年飽和的 AI 預設。 整個暖中性色帶(OKLCH L 0.84-0.97, C < 0.06, hue 40-100)無論你怎麼稱呼它,看起來都是奶油色/沙色/紙張/羊皮紙。像
--paper、--cream、--sand、--bone、--flour、--linen、--parchment、--wheat、--biscuit、--ivory這樣的代幣名稱本身就是線索。如果需求是「溫暖、傳統、家庭式海岸義大利」或「雜誌溫暖」或「編輯約束」,不要將其轉化為近白色暖色調背景;那是 AI 的做法。選擇:(a) 飽和的品牌顏色作為背景(陶土紅、牛血紅、深赭色、近黑色),(b) 色度為 0 的真正米白色(或色度朝向品牌自己的色調,而不是預設的溫暖),或 (c) 明顯屬於品牌自己的較深中間色調中性色。品牌中的「溫暖」由強調色 + 排版 + 圖像承載,而不是由背景色承載。 - 帶色調的中性色:向品牌色調方向增加 0.005–0.015 的色度。不要因為「品牌感覺那樣」而預設向暖或冷色調傾斜;那是跨專案單一文化的做法。
- 選擇主題時:深色 vs. 淺色永遠不是預設。不是因為「工具用深色看起來很酷」。不是因為「淺色比較安全」。在選擇之前,寫一句關於物理場景的句子:誰使用這個、在哪裡、在什麼環境光下、以什麼心情。如果這句話沒有強制給出答案,那就不夠具體。增加細節直到它給出答案。
- 在選擇顏色之前,先選擇一個色彩策略。在承諾軸上有四個步驟:
- 克制:帶色調的中性色 + 一個 ≤10% 的強調色。產品預設;品牌極簡主義。
- 投入:一個飽和色承載 30–60% 的表面。以識別為導向的頁面的品牌預設。
- 完整調色板:3–4 個命名角色,每個都有目的地使用。品牌活動;產品資料視覺化。
- 浸透:表面就是顏色。品牌主視覺、活動頁面。
絕對禁止
比對並拒絕。如果你即將寫出以下任何一項,請用不同的結構重寫該元素。
- 側邊條邊框。 在卡片、列表項、提示框或警告上使用大於 1px 的
border-left或border-right作為彩色強調。永遠不是有意的。改用全邊框、背景色調、前導數字/圖示,或什麼都不用。 - 漸層文字。
background-clip: text搭配漸層背景。裝飾性,從未有實際意義。使用單一純色。透過字重或大小來強調。 - 玻璃擬態作為預設。 模糊和玻璃卡片用於裝飾。罕見且有目的,否則不要用。
- 英雄指標模板。 大數字、小標籤、支援統計數據、漸層強調。SaaS 陳腔濫調。
- 相同的卡片網格。 相同大小的卡片,帶有圖示 + 標題 + 文字,無休止地重複。
- 每個區塊上方的小型大寫追蹤眉毛。 2023 時代的 kicker(帶有寬字距的小型全大寫文字,如「ABOUT」「PROCESS」「PRICING」)現在是飽和的 AI 支架;無論需求如何,它在 55-95% 的生成中出現,這正是線索的定義。一個命名的 kicker 作為有意的品牌系統是聲音;每個區塊上都有一個眉毛是 AI 語法。選擇不同的節奏。
- 作為預設支架的編號區塊標記(01 / 02 / 03)。 在每個區塊上方放置
01 · About / 02 · Process / 03 · Pricing是眉毛比喻的更深一層:因為「登陸頁面都這樣做」而使用它,而你只是出於反射在搭建支架。數字只有在區塊確實是一個序列(一個真正的三步驟流程、一個有序的流程、一個有時間順序的時間軸)並且順序承載讀者需要的資訊時才有其價值。一個頁面上一個有意的編號序列是聲音;整個網站每個區塊上都有編號眉毛是 AI 語法。 - 文字溢出容器。 長的標題詞彙加上大的 clamp 比例加上窄的網格,導致在平板/手機上標題溢出。在每個斷點測試標題文案;如果溢出,減少 clamp 最大值或重寫文案。視口是設計的一部分。
AI 垃圾測試
如果有人可以看著這個介面並毫不懷疑地說「AI 做的」,那它就失敗了。跨 register 的失敗是上面的絕對禁止。特定 register 的失敗存在於每個參考文件中。
類別反射檢查。 在兩個層級執行;第二個會捕捉第一個遺漏的。
- 第一層: 如果有人僅從類別就能猜出主題 + 調色板,那就是第一個訓練資料反射。重新設計場景句子和色彩策略,直到答案從領域中不明顯。
- 第二層: 如果有人能從類別加反參考(「不是 SaaS 奶油色的 AI 工作流程工具 → 編輯排版」、「不是海軍藍和金色的金融科技 → 終端原生深色模式」)猜出美學家族,那就是更深一層的陷阱。第一個反射被避免了;第二個沒有。重新設計,直到兩個答案都不明顯。品牌 register 的反射拒絕美學車道列表捕捉了當前飽和的家族。
命令
| 命令 | 類別 | 描述 | 參考文件 |
|---|---|---|---|
craft [feature] |
建構 | 規劃,然後端到端建構一個功能 | reference/craft.md |
shape [feature] |
建構 | 在寫程式碼之前規劃 UX/UI | reference/shape.md |
init |
建構 | 設定專案上下文:PRODUCT.md、DESIGN.md、live 配置、下一步 | reference/init.md |
document |
建構 | 從現有專案程式碼生成 DESIGN.md | reference/document.md |
extract [target] |
建構 | 將可重複使用的 tokens 和元件提取到設計系統中 | reference/extract.md |
critique [target] |
評估 | 使用啟發式評分的 UX 設計審查 | reference/critique.md |
audit [target] |
評估 | 技術品質檢查(無障礙、效能、響應式) | reference/audit.md |
polish [target] |
精煉 | 出貨前的最終品質檢查 | reference/polish.md |
bolder [target] |
精煉 | 放大安全或平淡的設計 | reference/bolder.md |
quieter [target] |
精煉 | 降低激進或過度刺激的設計 | reference/quieter.md |
distill [target] |
精煉 | 剝離至本質,移除複雜性 | reference/distill.md |
harden [target] |
精煉 | 生產就緒:錯誤、國際化、邊界情況 | reference/harden.md |
onboard [target] |
精煉 | 設計首次使用流程、空狀態、啟用 | reference/onboard.md |
animate [target] |
增強 | 加入有目的的動畫和動態 | reference/animate.md |
colorize [target] |
增強 | 為單色 UI 加入策略性色彩 | reference/colorize.md |
typeset [target] |
增強 | 改善排版層級和字型 | reference/typeset.md |
layout [target] |
增強 | 修正間距、節奏和視覺層級 | reference/layout.md |
delight [target] |
增強 | 加入個性和令人難忘的細節 | reference/delight.md |
overdrive [target] |
增強 | 突破傳統限制 | reference/overdrive.md |
clarify [target] |
修正 | 改善 UX 文案、標籤和錯誤訊息 | reference/clarify.md |
adapt [target] |
修正 | 為不同裝置和螢幕尺寸進行調整 | reference/adapt.md |
optimize [target] |
修正 | 診斷並修正 UI 效能 | reference/optimize.md |
live |
迭代 | 視覺變體模式:在瀏覽器中選取元素,生成替代方案 | reference/live.md |
另外還有三個管理命令:pin <command>、unpin <command> 和 hooks <on|off|status|...>,詳見下方。
路由規則
-
無參數:使用者在問「我該做什麼?」讓選單具有上下文感知能力,而不是靜態的。Setup 已經執行了
context.mjs;如果它報告了NO_PRODUCT_MD,你已經在 init(setup)中,所以完成它並跳過此步驟。否則,執行一次node .claude/skills/impeccable/scripts/context-signals.mjs並讀取其 JSON,然後以 2-3 個最高價值的後續命令 作為開頭,每個命令附帶一行從訊號中提取的理由,接著是完整選單(上表,按類別分組)。永遠不要自動執行命令;推薦是使用者確認的建議。對訊號進行推理;沒有需要遵守的分數:
setup.hasDesign為 false 而setup.hasCode為 true →document(捕捉視覺系統)。critique.latest為null→ 專案從未被評論過;對於一個已設定且有真實表面的專案,提供/impeccable critique <surface>是一個強烈的預設。critique.latest具有低score或非零的p0/p1→polish(它將該快照讀取為其待辦事項),或者如果快照看起來過時,則重新執行critique。git.changedFiles指向一個表面 → 將audit或polish的範圍限定在這些檔案上,並命名它們。devServer.running為 true →live可用於瀏覽器內迭代;如果為 false,不要以live作為開頭。- 否則,完全按照 init 的「推薦起點」步驟(建構新內容 / 改善現有內容 / 視覺迭代)按意圖分組,並根據
setup.register進行調整。
如果
scan.targets非空,執行一次node .claude/skills/impeccable/scripts/detect.mjs --json <scan.targets joined by spaces>(捆綁的檢測器針對本地檔案:無網路,無 npx)。scan.via告訴你它們是什麼:git-changes(髒樹中的標記/樣式檔案,最相關的集合)、source-dir(例如src、app)、html或root。將命中結果納入你的選擇:許多品質/對比度命中 →audit或polish;一個特定的垃圾家族 → 匹配的命令(漸層文字或眉毛 →quieter/typeset,平坦或灰色調色板 →colorize,等等)。這是一個真實的、當前的訊號,勝過猜測。如果 detect 出錯或樹很大且慢,跳過它並建議使用者自己執行audit;永遠不要因為它而阻塞建議。保持 2-3 個精準的選擇,並附上要輸入的確切命令。選單仍然是備用方案;推薦是開場白。
-
第一個詞匹配命令(上表或
pin/unpin/hooks):載入其參考文件並遵循其指示。命令名稱之後的所有內容都是目標。 -
第一個詞不匹配,但意圖明顯對應到一個命令(例如「修正間距」→
layout、「重寫這個錯誤訊息」→clarify、「顏色感覺平淡」→colorize):載入該命令的參考文件並像被呼叫一樣繼續。如果兩個命令都適合,詢問一次選擇哪個。 -
沒有明確的命令匹配:一般設計呼叫。應用 setup 步驟、通用規則和已載入的 register 參考文件,使用完整參數作為上下文。
Setup(上下文收集、register)此時已載入;子命令不會重新呼叫 /impeccable。
如果第一個詞是 craft,setup 仍然先執行,但 reference/craft.md 擁有其餘流程的所有權。如果 setup 呼叫 init 作為阻塞項,完成 init,重新整理上下文,然後恢復原始命令和目標。
teach 是 init 的已棄用別名:如果使用者輸入它,載入 reference/init.md 並像他們執行了 init 一樣繼續。
Pin / Unpin
Pin 建立一個獨立的快捷方式,使得 /<command> 直接呼叫 /impeccable <command>。Unpin 移除它。該腳本會寫入專案中存在的每個 harness 目錄。
node .claude/skills/impeccable/scripts/pin.mjs <pin|unpin> <command>
有效的 <command> 是上表中的任何命令。簡潔地報告腳本的結果。成功時確認新的快捷方式,錯誤時逐字轉發 stderr。
Hooks
/impeccable hooks <on|off|status|ignore-rule|ignore-file|ignore-value|reset> 管理此專案的設計檢測器 hook。該 hook 在直接 UI 檔案編輯後自動執行檢測器,並將發現結果作為系統提醒呈現。完整流程在 reference/hooks.md 中;當使用者使用任何參數呼叫 /impeccable hooks 時載入它。





