Communitygithub.com

ckmirafss/easy-on-the-eyes

讓網站和網頁應用程式看起來舒適,避免顯得模板化或像是 AI 生成的。在設計前會套用並稽核有證據等級的字體大小、對比度、亮色與深色主題、動畫、閃爍、條紋圖案與版面穩定度規則,並在瀏覽器中研究真實參考網站以提取其字體、調色板、佈局與動畫。

easy-on-the-eyes 是什麼?

這個 AI 助手技能「Easy on the Eyes」旨在協助開發者與設計師打造視覺上舒適且具原創性的使用者介面。它提供一套基於研究、標準、慣例與推論的規則,涵蓋字體、對比度、動畫、主題與版面穩定性,並為每條規則標示其證據等級(research、standard、convention、inference)。技能支援四種操作模式:預設(建立新 UI 時先研究參考網站再套用規則)、`audit`(執行腳本檢查並報告問題,不修改)、`study`(分析指定網站的設計元素與舒適度)、`fix`(執行稽核、修復錯誤與警告後重新報告)。核心工具為兩個 Node.js 腳本:`audit.mjs`(分析原始碼,檢查如 `rem` 單位、對比度、動畫觸發條件等)、`inspect.mjs`(使用 Playwright 在真實瀏覽器中渲染頁面,測量實際文字對比度、行長度、深色主題及減少動畫效果)。該技能還內建一組「工藝規則」(craft),幫助避免設計看起來像模板或 AI 生成的,例如:每個視圖只專注一個獨特想法、使用柔和中性色與一個強調色、展示真實介面而非圖標卡片。輸出報告時會使用一致的規則 ID,並且可以透過行內註解 `easy-on-the-eyes-ignore` 來抑制特定警告。此技能適用於 Claude Code、Cursor 等支援自訂技能的開發工具,尤其適合在建立或調整 UI 樣式、設定色彩 tokens、定義字體排印或導入深色模式時使用。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ckmirafss/easy-on-the-eyes/tree/HEAD/skills/easy-on-the-eyes

在你喜歡的 AI 中提問

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

說明文件

舒適視覺 (Easy on the Eyes)

螢幕前的眼睛疲勞多半來自網站無法控制的因素:眨眼、對焦距離、未矯正的視力、環境光線。網站能控制的,是它要求使用者額外付出的視覺工作量。這個技能消除了這些額外工作,並說明每條規則的證據強度。

它還能讓舒適的頁面看起來不像模板。在設計之前,它會先研究真實上線的網站,並攜帶一套工藝規則,用以處理那些會讓作品看起來像是生成出來的選擇。

你被允許提出的宣稱

你可以說該設計「不會增加可避免的視覺疲勞」。絕對不要寫該設計可以預防、減輕或治癒眼睛疲勞、保護眼睛,或是「抗藍光」。不要將深色模式、暖色調或特殊字體描述為健康功能。如果使用者要求這類文案,請解釋原因並提供誠實的措辭。

模式

讀取調用技能時提供的參數。

  • 無參數,或是一個建置任務。 對於新頁面或區塊,先研究參考案例(見「設計前先研究」)。然後在編寫或編輯 UI 時套用規則。如果專案還沒有顏色或字體 tokens,請從 assets/tokens.css 開始。UI 完成後,對原始碼執行 audit.mjs,並對渲染後的頁面執行 inspect.mjs,在宣告完成前,逐一檢查「腳本無法看到的項目」。
  • audit(選擇性後接路徑)。執行腳本,然後審查腳本無法看到的項目。使用下方的模板報告。不做任何修改。
  • study 後接一個或多個 URL。檢查每個頁面並報告其設計摘要:它的功能、值得借鑒之處,以及它違反了哪些舒適規則。不做任何修改。
  • fix(選擇性後接路徑)。執行稽核。先修復錯誤,再修復警告。除非修正某個錯誤或警告需要依賴它,或者你自己的審查顯示它確實是問題,否則不要修改註解。重新執行腳本並報告。

執行腳本

從專案根目錄執行,並提供要檢查的路徑。腳本位於此技能的 scripts/ 資料夾中,因此請使用此技能被載入的路徑:

node <skill-dir>/scripts/audit.mjs src                 # 文字報告,有任何錯誤時退出碼為 1
node <skill-dir>/scripts/audit.mjs src --json          # 機器可讀格式
node <skill-dir>/scripts/audit.mjs src --strict        # 連警告也會導致退出碼為 1
node <skill-dir>/scripts/audit.mjs contrast "#1f2328" "#ffffff"          # 檢查一組顏色
node <skill-dir>/scripts/audit.mjs contrast "#8a8f98" "#ffffff" --min 3  # 檢查邊框或圖示
node <skill-dir>/scripts/inspect.mjs https://example.com              # 設計摘要與渲染後的舒適度檢查
node <skill-dir>/scripts/inspect.mjs http://localhost:3000 --out shots # 同時儲存亮色與深色截圖
node <skill-dir>/scripts/inspect.mjs dist/index.html --json
  • audit.mjs 讀取原始檔案。inspect.mjs 在真實瀏覽器中開啟頁面,因此它測量的是讀者實際獲得的內容:真實文字在其真實背景上的對比度、每行實際字元數、是否存在深色配色方案,以及在要求減少動畫時動畫是否停止。
  • inspect.mjs 可作用於任何 URL 或本地 HTML 檔案。它需要專案中安裝 Playwright(npm i -D playwright && npx playwright install chromium)。如果缺少 Playwright 且無法安裝,請說明渲染檢查未執行。
  • 路徑是必要的。如果使用者未提供,請使用存放 UI 原始碼的資料夾。
  • 顏色可以是十六進位、rgb()、hsl()、oklch()、white 或 black。
  • 若要忽略某項發現(因為是故意的),請在該行加上包含 easy-on-the-eyes-ignore 的註解,或在前一行加上 easy-on-the-eyes-ignore-next-line。
  • 腳本需要 Node 18 或更新版本,且無外部依賴。如果缺少 Node,請手動套用規則,並說明腳本未執行。

兩個腳本都會回報下方表格中的規則 ID。請在你的報告中使用相同的 ID。

設計前先研究

模型會產出它們所見過內容的平均值,而平均值正是人們可以辨識出是生成內容的關鍵。先觀察具體的、已上線的作品,能讓你獲得真實的決策來做出反應。

  1. 挑選三到五個與你正在建置的內容屬於相同類別的現有網站。使用使用者指定的網站。否則,透過網頁搜尋,或使用任何連接到此會話的設計參考或截圖工具來尋找它們。
  2. 對每個網站執行 inspect.mjs,加上 --out 參數,這樣你可以開啟截圖並仔細查看。
  3. 針對每個網站,記錄其字體和字體級別、使用了多少種顏色以及強調色放在哪裡、行長度、區塊結構,以及一個讓它與眾不同的特點。
  4. 閱讀每個參考網站的舒適度檢查結果。令人欣賞的網站經常使用極小的文字、微弱的對比度和大量的動畫。借鑒其構圖,但留下這些缺點。references/craft.md 中有對應的表格。
  5. 告訴使用者你研究了哪些網站,以及你從每個網站中學到了什麼。借鑒結構和決策。絕不複製品牌的名稱、商標、措辭、圖片或精確的佈局。

如果你無法開啟任何參考網站,請說明,並僅根據規則和 references/craft.md 進行設計。

證據等級

每條規則都帶有一個等級。當你解釋某項發現時,請重複該等級,這樣才不會有人把習慣誤認為事實。

等級含義
research受到控制實驗或系統性回顧的支持
standard由 WCAG 2.2 成功標準設定。參考檔案會給出該標準及其等級
convention合理且被廣泛使用,但背後沒有試驗支持
inference從相關刺激的研究推導而來,未在網頁上測試

規則

嚴重性決定處理順序:先錯誤,再警告,最後是備註。在同一嚴重性級別內,按表格順序處理。表格中顯示的是通常的嚴重性。腳本在無法判斷某一行是否為問題時(例如,一個可能是標籤的小尺寸),會降低其嚴重性,而當你的審查顯示實際危害較大時,你可以提高嚴重性。

ID規則嚴重性等級參考文件
type-rem-zoom文字必須能承受縮放。使用 rem 單位,沒有僅基於 viewport 的字體大小,且永遠不允許禁用縮放。errorstandardtypography
contrast-floor每組文字配對至少 4.5:1。大型文字和 UI 元件至少 3:1。errorstandardcontrast-and-color
contrast-color-alone絕不單獨使用顏色來傳達狀態。errorstandardcontrast-and-color
motion-flash任何內容每秒閃爍不得超過三次。errorstandardmotion
motion-autoplay沒有自動播放且無控制項的影片。任何持續移動超過 5 秒(文字除外)的內容都必須提供暫停功能。除了文字之外,不能有無限循環的動畫。errorstandardmotion
motion-reduced動畫效果只能存在於 prefers-reduced-motion: no-preference 的條件下。errorstandardmotion
theme-focus絕不刪除焦點輪廓,除非有可見的替代方案且對比度至少為 3:1。errorstandardtheming
type-body-size內文文字最小 1rem,長篇閱讀建議 1.125rem 到 1.25rem。任何可讀文字不得小於 0.875rem。warningresearchtypography
motion-triggers不使用視差捲動、劫持捲軸或大面積縮放。淡入淡出和顏色變化是可以接受的。warningresearchmotion
contrast-dark-secondary深色背景上的次要文字,對比度需達到 8.5:1 或更好。僅 AA 級別在深色背景上顯得不夠。warninginferencecontrast-and-color
contrast-saturated-on-dark深色背景上,不要使用飽和的紅色或藍色作為小文字。在深色主題中使用較淺、較柔和的強調色。warningresearchcontrast-and-color
lum-section-steps不要交替使用全幅的深色和白色區塊。在深色主題中不要使用白色嵌入內容或彈出視窗。warninginferencelayout-and-patterns
lum-white-flash主題化的 html 背景,以及 color-scheme 宣告和 meta 標籤。warningconventiontheming
layout-shift為多媒體元素預留尺寸,匹配替代字體的度量,將 CLS 維持在 0.1 或以下。warningresearchlayout-and-patterns
contrast-pure-extremes使用接近黑色搭配接近白色、米白色搭配深灰色。避免在頁面文字和背景中使用純黑色和純白色。warningconventioncontrast-and-color
type-leading內文 line-height 設為 1.5(範圍 1.4 到 1.6)。標題設為 1.1 到 1.3。warningconventiontypography
type-weight內文字重 400 或以上。在內文尺寸中不要使用 100 到 300 的字重。warningconventiontypography
type-align使用 text-align: start。不要使用左右對齊的內文。僅對短標籤使用全大寫。warningstandardtypography
layout-targets指標目標至少 24 x 24 CSS 像素,主要操作至少 44 x 44 像素。句子中的連結不受此限。warningstandardlayout-and-patterns
theme-both-schemes同時提供亮色和深色主題,並遵循 prefers-color-scheme。可選的手動切換開關應預設使用系統設定。noteresearchtheming
pattern-stripes在大面積區域中,不要使用週期為 7 到 27 像素的高對比度條紋或網格。noteinferencelayout-and-patterns
type-measure閱讀文字的最大寬度限制在 50ch 到 60ch,這大約是 65 到 78 個字元。noteconventiontypography
motion-duration動畫時長 100 到 300 毫秒,上限 500 毫秒,入場動畫使用 ease-out。noteconventionmotion
theme-preferences遵循 prefers-contrast、forced-colors 和 prefers-reduced-transparency 使用者偏好。noteconventiontheming
pattern-clutter每個視圖只有一個主要強調點。使用少量強調色、尺寸和邊框樣式。noteresearchlayout-and-patterns
craft-copy具體的文案。絕不虛構統計數據、推薦語、評分或客戶標誌。warningconventioncraft
craft-reference在設計之前,研究同類別的三到五個真實網站。借鑒決策,絕不抄襲。noteconventioncraft
craft-one-idea每個視圖只有一個獨特的想法。其他一切都保持低調。noteconventioncraft
craft-palette使用帶有色調的中性色和一個強調色。不使用靛藍色或紫色漸層,不使用漸層文字。noteconventioncraft
craft-show-product展示真實的介面、數據或程式碼。不要使用一排三個相同的圖標卡片,不要使用 emoji 圖標。noteconventioncraft
craft-layout不要將所有內容置中。使用不均勻的網格分割和變化的區塊結構。noteconventioncraft
craft-restraint使用平坦表面和極細線條。少量陰影,一個圓角半徑比例尺,不要疊加模糊和發光效果。noteconventioncraft

參考檔案包含推理過程、來源以及修改前後的程式碼範例。每當你套用或報告某條規則時,請閱讀所有相關的參考檔案。要修復整個頁面的問題,通常需要三到四個參考檔案。

  • references/contrast-and-color.md:選擇顏色、建立調色板或深色主題、解釋對比度檢查結果。
  • references/typography.md:字體大小、行長度、間距、字體、流體排版。
  • references/motion.md:動畫、轉場、影片、捲動效果、載入指示器。
  • references/layout-and-patterns.md:表格、網格、條紋、密度、區塊背景、圖片、版面位移。
  • references/theming.md:亮色與深色主題、主題切換開關、焦點樣式、使用者偏好 media query、Tailwind 和 shadcn/ui。
  • references/craft.md:設計新頁面或區塊、看起來像模板或生成的結果、從參考網站借鑒什麼以及留下什麼。
  • references/evidence.md:當使用者詢問原因、質疑某條規則,或詢問關於藍光、深色模式、閱讀困難字體或 APCA 時。

無需詢問即可寫入的預設值

:root {
  color-scheme: light dark;
  --bg:     light-dark(oklch(0.985 0.002 90), oklch(0.18 0.01 255));
  --text:   light-dark(oklch(0.24 0.01 255),  oklch(0.93 0.005 255));
  --muted:  light-dark(oklch(0.48 0.01 255),  oklch(0.78 0.01 255));
  --accent: light-dark(oklch(0.5 0.19 255),   oklch(0.74 0.13 255));
}
html { background-color: var(--bg); color: var(--text); }
body { font-size: clamp(1rem, 0.95rem + 0.25vw, 1.125rem); line-height: 1.6; }
p, li { max-inline-size: 55ch; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
@media (prefers-reduced-motion: no-preference) {
  .card { transition: transform 200ms ease-out; }
}

在頁面 <head> 中加入 <meta name="color-scheme" content="light dark">。

內文文字在亮色主題下測量為 15.75:1,在深色主題下為 15.30:1。次要文字測量值為 6.25:1 和 9.39:1。強調色測量值為 5.78:1 和 8.14:1,這就是為什麼它被用於焦點環:系統的 Highlight 顏色在深色背景上可能低於 3:1。assets/tokens.css 包含完整集合,包括表面色、控制項邊框色、長篇閱讀尺寸以及可選的調暗主題。

僅在頁面確實為兩種配色方案都設定了顏色後,才加入 color-scheme: light dark。在一個已寫死亮色顏色的頁面上,這會在白色頁面上產生深色捲軸和表單控制項。請在同一次修改中修復 theme-both-schemes。

Tailwind 和 shadcn/ui 使用純白色搭配接近黑色(約 19.8:1),並使用 bg-white / text-black 作為純值。請覆寫 --background 和 --foreground,並使用像 bg-background 和 text-foreground 這樣的語義化工具類別。

腳本無法看到的項目

當你可以在渲染後的頁面上執行 inspect.mjs 時,它會檢查下方清單中的第一、三和五項。其餘項目,以及當它無法執行時的所有項目,請透過閱讀程式碼或頁面來檢查。如果你無法檢查某個項目,請將其列在「未驗證」下並說明原因。

  • 每個真實文字和背景配對的對比度,包括圖片和漸層上的文字。使用 contrast 命令測量配對
  • 小文字是內文還是短標籤
  • 渲染佈局中的行長度。在幾個完整行中計算字元數
  • 動畫和影片的閃爍頻率
  • 區塊之間的亮度跳躍,以及深色主題中的白色嵌入內容
  • 載入期間的版面位移,包括沒有 width 和 height 屬性的圖片和影片
  • 狀態是否僅由顏色傳達
  • 忽略減少動畫偏好的 JavaScript 驅動動畫
  • 使用 em、百分比或 font 簡寫設定的尺寸,以及使用 background-size 建構的條紋

報告模板

Easy on the Eyes 檢查報告

路徑 / URL:

結果:

### 錯誤
- [規則 ID]: [發現內容]([等級])

### 警告
- [規則 ID]: [發現內容]([等級])

### 備註
- [規則 ID]: [發現內容]([等級])

### 腳本無法看到的項目
- [項目]: [已驗證 / 未驗證 / 不適用]

### 總覽
總檢查項目數:
錯誤:
警告:
未驗證:

限制

此技能不提供完整的 WCAG 遵循性稽核。它著重於減少可避免的視覺疲勞與避免模板化設計。它不包含個人眼睛健康建議。對於正式的無障礙遵循性稽核,請使用專業工具或諮詢專家。

相關技能