skills/ui-design-tokens/SKILL.md
Design Token 管理。用於色彩、字型、間距的 token 命名結構、CSS 變數組織、Light/Dark 主題切換、token 分層架構。
npx skillsauth add vincent119/ai-rules-kit ui-design-tokensInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
參照:Design Tokens W3C Community Group、Material Design 3 Token 架構
┌─────────────────────────────────────────┐
│ Component Token(元件層) │
│ --button-primary-bg │
│ --card-border-radius │
├─────────────────────────────────────────┤
│ Semantic Token(語意層) │
│ --color-primary │
│ --spacing-md │
├─────────────────────────────────────────┤
│ Primitive Token(基礎層) │
│ --blue-500 │
│ --space-16 │
└─────────────────────────────────────────┘
:root {
/* Gray */
--gray-50: #fafafa;
--gray-100: #f5f5f5;
--gray-200: #e5e5e5;
--gray-300: #d4d4d4;
--gray-400: #a3a3a3;
--gray-500: #737373;
--gray-600: #525252;
--gray-700: #404040;
--gray-800: #262626;
--gray-900: #171717;
--gray-950: #0a0a0a;
/* Blue */
--blue-50: #eff6ff;
--blue-100: #dbeafe;
--blue-500: #3b82f6;
--blue-600: #2563eb;
--blue-700: #1d4ed8;
/* Red */
--red-50: #fef2f2;
--red-500: #ef4444;
--red-600: #dc2626;
--red-700: #b91c1c;
/* Green */
--green-50: #f0fdf4;
--green-500: #22c55e;
--green-600: #16a34a;
--green-700: #15803d;
}
/* Light Theme */
:root, [data-theme="light"] {
/* 文字 */
--color-text-primary: var(--gray-900);
--color-text-secondary: var(--gray-600);
--color-text-tertiary: var(--gray-400);
--color-text-disabled: var(--gray-300);
--color-text-inverse: #ffffff;
/* 背景 */
--color-bg-page: #ffffff;
--color-bg-surface: var(--gray-50);
--color-bg-elevated: #ffffff;
--color-bg-overlay: rgba(0, 0, 0, 0.5);
/* 品牌 / 互動 */
--color-primary: var(--blue-600);
--color-primary-hover: var(--blue-700);
--color-primary-pressed: var(--blue-800);
--color-primary-subtle: var(--blue-50);
/* 狀態 */
--color-success: var(--green-600);
--color-warning: var(--amber-500);
--color-error: var(--red-600);
--color-info: var(--blue-500);
/* 邊框 */
--color-border-default: var(--gray-200);
--color-border-hover: var(--gray-300);
--color-border-focus: var(--blue-500);
--color-border-error: var(--red-500);
}
/* Dark Theme */
[data-theme="dark"] {
--color-text-primary: var(--gray-50);
--color-text-secondary: var(--gray-400);
--color-text-tertiary: var(--gray-500);
--color-text-disabled: var(--gray-700);
--color-text-inverse: var(--gray-900);
--color-bg-page: var(--gray-950);
--color-bg-surface: var(--gray-900);
--color-bg-elevated: var(--gray-800);
--color-bg-overlay: rgba(0, 0, 0, 0.7);
--color-primary: var(--blue-500);
--color-primary-hover: var(--blue-400);
--color-primary-pressed: var(--blue-300);
--color-primary-subtle: rgba(59, 130, 246, 0.1);
--color-border-default: var(--gray-800);
--color-border-hover: var(--gray-700);
--color-border-focus: var(--blue-500);
--color-border-error: var(--red-500);
}
:root {
--space-0: 0;
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-5: 20px;
--space-6: 24px;
--space-8: 32px;
--space-10: 40px;
--space-12: 48px;
--space-16: 64px;
/* 語意別名 */
--spacing-xs: var(--space-1); /* 4px */
--spacing-sm: var(--space-2); /* 8px */
--spacing-md: var(--space-4); /* 16px */
--spacing-lg: var(--space-6); /* 24px */
--spacing-xl: var(--space-8); /* 32px */
--spacing-2xl: var(--space-12); /* 48px */
}
:root {
/* Font Family */
--font-sans: "Inter", "Noto Sans TC", "PingFang TC", system-ui, sans-serif;
--font-mono: "JetBrains Mono", "Fira Code", monospace;
/* Font Size */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 1.875rem; /* 30px */
--text-4xl: 2.25rem; /* 36px */
/* Font Weight */
--font-regular: 400;
--font-medium: 500;
--font-semibold: 600;
--font-bold: 700;
/* Line Height */
--leading-tight: 1.25;
--leading-normal: 1.5;
--leading-relaxed: 1.75;
/* Letter Spacing */
--tracking-tight: -0.025em;
--tracking-normal: 0;
--tracking-wide: 0.025em;
}
:root {
/* Border Radius */
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-xl: 16px;
--radius-full: 9999px;
/* Box Shadow */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
/* Z-Index */
--z-dropdown: 100;
--z-sticky: 200;
--z-modal: 300;
--z-popover: 400;
--z-toast: 500;
}
:root {
/* Duration */
--duration-fast: 100ms;
--duration-normal: 200ms;
--duration-slow: 300ms;
--duration-slower: 500ms;
/* Easing */
--ease-in: cubic-bezier(0.4, 0, 1, 1);
--ease-out: cubic-bezier(0, 0, 0.2, 1);
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
/* Transition 組合 */
--transition-colors: color, background-color, border-color var(--duration-normal) var(--ease-in-out);
--transition-transform: transform var(--duration-normal) var(--ease-out);
--transition-opacity: opacity var(--duration-normal) var(--ease-in-out);
}
@media (prefers-reduced-motion: reduce) {
:root {
--duration-fast: 0ms;
--duration-normal: 0ms;
--duration-slow: 0ms;
--duration-slower: 0ms;
}
}
:root {
/* Button */
--button-height-sm: 32px;
--button-height-md: 40px;
--button-height-lg: 48px;
--button-padding-x: var(--spacing-md);
--button-radius: var(--radius-md);
--button-font-size: var(--text-sm);
--button-font-weight: var(--font-medium);
--button-primary-bg: var(--color-primary);
--button-primary-bg-hover: var(--color-primary-hover);
--button-primary-text: var(--color-text-inverse);
/* Input */
--input-height: 40px;
--input-padding-x: var(--spacing-sm);
--input-radius: var(--radius-md);
--input-border: var(--color-border-default);
--input-border-focus: var(--color-border-focus);
--input-border-error: var(--color-border-error);
--input-bg: var(--color-bg-page);
--input-text: var(--color-text-primary);
--input-placeholder: var(--color-text-tertiary);
/* Card */
--card-padding: var(--spacing-lg);
--card-radius: var(--radius-lg);
--card-bg: var(--color-bg-elevated);
--card-border: var(--color-border-default);
--card-shadow: var(--shadow-sm);
}
// 偵測系統偏好 + 手動切換
function useTheme() {
const [theme, setTheme] = useState<'light' | 'dark'>(() => {
const saved = localStorage.getItem('theme');
if (saved) return saved as 'light' | 'dark';
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
});
useEffect(() => {
document.documentElement.setAttribute('data-theme', theme);
localStorage.setItem('theme', theme);
}, [theme]);
const toggle = () => setTheme((t) => (t === 'light' ? 'dark' : 'light'));
return { theme, toggle };
}
--{category}-{property}-{variant}-{state}
範例:
--color-text-primary
--color-bg-surface
--color-primary-hover
--button-primary-bg-hover
--spacing-md
--radius-lg
--shadow-sm
--{category}-{property}-{variant}-{state}prefers-reduced-motiondata-theme attribute + CSS 變數覆寫tools
基於 SLA/SLO 量化評估事故影響的計算模型與業務影響矩陣。適用於「SLA 影響」、「SLO 違反」、「影響評估」、「營收損失估算」、「Error Budget」、「可用性計算」、「事故成本評估」等量化事故業務影響的任務。強化 impact-assessor 的評估能力。注意:事故原因分析與改善規劃不在此技能範圍內。
research
根因分析(RCA)方法論詳細指南。提供 5 Whys、Fishbone 圖、Fault Tree Analysis、變更分析等結構化 RCA 技術,以及認知偏誤防範清單。適用於「根因分析」、「RCA」、「5 Whys」、「魚骨圖」、「Fault Tree」、「原因分析方法論」、「變更分析」等事故原因分析任務。強化 root-cause-investigator 的分析能力。注意:時間軸重建與改善規劃不在此技能範圍內。
testing
事故事後分析(Postmortem)完整流程。協調 7 個執行階段:資訊收集 → 時間軸重建 → 根因分析 → 影響評估 → 改善規劃 → 報告審查 → 整合報告,最終產出完整的 Postmortem 報告。適用於「寫事故報告」、「post-incident 分析」、「RCA 報告」、「事故時間軸整理」、「建立改善措施」等請求。注意:即時 Incident Response(on-call)、監控系統設定、告警配置不在此技能範圍內。
content-media
投影片版面模式庫。提供 20 種投影片類型的最佳版面配置、格線系統、色彩與字型設計 Token。適用於「投影片版面」、「Slide Layout」、「設計系統」、「格線」、「字型」、「色彩規範」等投影片視覺設計任務。強化 visual-designer 的設計能力。注意:PPT/Keynote 檔案直接輸出不在此技能範圍內。