Communitygithub.com

TheSonOfThomp/skills

生成感知均勻的色階並在 OKLCH 中組合可存取的調色盤。從基礎顏色建立經過色域裁切的 9-12 步驟色階,在每個步驟統合多個色相,並透過內建腳本驗證 WCAG 對比度和色盲安全性。

skills 是什麼?

這是一款專門用於生成感知均勻色彩色階並組合可存取調色盤的 AI 技能。它捨棄傳統的 HSL/RGB 方法,採用 OKLCH 色彩空間,確保相等的數值產生相等的視覺亮度,並避免色相偏移。使用者可以輸入一個或多個基礎顏色,透過內建腳本生成 9-12 步驟的色階,色調(chroma)會根據每個步驟的色域極限自動裁切,以維持視覺一致性。此技能支援一次性生成多個色相的色階,確保不同色相在相同步驟上具有一致的亮度和色調比例,使它們在視覺上感覺協調。它還內建驗證功能,可檢查色階的亮度單調性、相鄰步驟的色差均勻性、WCAG AA 對比度以及色盲模擬的可區分性。最終輸出可以 CSS 自訂屬性或表格形式呈現,並支援語意別名(如 --danger-500)和暗色模式映射(無需重新生成色階,僅翻轉語意分配)。適用於設計系統、品牌色彩擴展、UI 元件庫等場景,特別適合對可存取性和色彩一致性有嚴格要求的專案。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/TheSonOfThomp/skills/tree/HEAD/skills/color-palette

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

色彩調色盤

將基礎顏色擴展為感知均勻的色階,並組合成調色盤。所有數學運算委託給內建生成器;此技能的判斷在於配置和驗證。

原理(為何選擇 OKLCH)

  • 絕不在 HSL/RGB 中生成色階。 HSL 亮度會誤導(相同數值 ≠ 相同感知亮度),且色相在調淺/調暗時會偏移。相等 HSL 亮度使黃色看起來太亮,藍色看起來太暗。
  • OKLCH 是工作空間:L(亮度)、C(色度)、H(色相)— 相等數值看起來相等,且原生 CSS 支援。
  • 色度必須按步驟進行色域裁切。 高色度在極亮/極暗步驟物理上不可能;生成器會降低色度,而不是讓瀏覽器裁切。
  • 一個對比錨點:白色文字從 L ≈ 0.55 向下通過 WCAG AA,黑色文字從 L ≈ 0.60 向上。中間步驟放置於這些目標周圍。

完整理論與來源:references/theory.md

工作流程

1. 釐清目標

與使用者確認(已知道的則跳過):基礎顏色或品牌顏色;步驟數量(11 為標準,9 較精簡,12 適用於 Radix 風格角色);調色盤需要哪些色相(品牌 + 語意:成功/警告/危險/資訊 + 中性);是否需要暗色模式?

2. 生成色階

cd "{skill_dir}/scripts" && python3 generate_ramp.py "#3b82f6" --steps 11 --chroma 90
# 多色相調色盤:單次調用,以逗號分隔名稱
python3 generate_ramp.py "#3b82f6" "#e11d48" "#22c55e" --names blue,red,green --format css

重要標誌:--chroma N(每個步驟色域最大值的百分比;通常 80-95,越高越鮮豔),--hue-drift D(從亮到暗刻意偏移色相,例如暗黃色轉向橙色;僅在要求時使用),--cvd(模擬色盲的十六進位碼),--format table|css|json。

多色相規則:在單次調用中生成所有色相,使它們在每個步驟共用相同的亮度和色度百分比 — 這正是讓 blue-500 和 red-500 感覺像兄弟的原因。切勿用不同邊界重新生成任何色相。

3. 驗證

閱讀表格輸出並檢查:

  • 亮度單調遞增,相鄰步驟的 ΔE 大致恆定(均勻性欄位)
  • 預期前景/背景步驟組合通過 WCAG AA(白色文字需要步驟的 vs-white ≥ 4.5;黑色文字需要 vs-black ≥ 4.5)
  • 跨色相 ΔE 警告不存在(相同步驟色相之間的 Oklab ΔE ≥ 0.05)
  • 使用 --cvd:模擬色盲的步驟顏色在用於傳達意義的 UI 步驟中仍然可區分

如果使用者提供了要審計的現有調色盤,將每個步驟轉換為 OKLCH(透過重建使用 --format json,或手動轉換)並檢查相同的四點。

4. 組合調色盤

  • 為步驟分配角色(Radix 慣例):1-2 應用程式背景 · 3-5 元件背景(一般/懸停/啟用) · 6-8 邊框/焦點 · 9-10 純色背景與懸停(步驟 9 = 最純、最高色度) · 11-12 文字(低/高對比度)。
  • 語意別名化:當色階服務於單一意義時,使用 --danger-500 而非 --red-500。一個色階可以支援多個別名。
  • 暗色模式 = 重新映射,而非重新生成:保留色階,翻轉語意分配(最亮步驟變成最暗表面,文字顏色交換方向)。OKLCH 的感知均勻性使反向映射同樣可讀。

5. 交付

將 --format css 輸出寫入檔案(在 @supports 內包含十六進位降級的自訂屬性),並在聊天中提供驗證報告。如果最終目標是設計系統,建議標記命名(基本色階 + 語意別名層級)。

常見修正

問題修正
步驟 50/100 看起來褪色預期行為 — 接近白色時色度物理上受限;不要透過裁切來「修正」
色相看起來鮮豔度不均所有色相使用同一次調用;嘗試 --chroma 80
某 500 步驟對白色文字對比度不足接受用於大字型/圖形,或降低中間亮度(--hue-drift 無用;移動錨點)
暗黃色看起來像橄欖色刻意使用 --hue-drift 10-15 向橙色偏移,或接受作為品牌風格

相關技能