@hegemonart/get-design-done 1.14.8 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +5 -3
- package/.claude-plugin/plugin.json +15 -5
- package/CHANGELOG.md +97 -0
- package/README.md +30 -0
- package/SKILL.md +4 -1
- package/agents/a11y-mapper.md +25 -0
- package/agents/component-benchmark-harvester.md +112 -0
- package/agents/component-benchmark-synthesizer.md +88 -0
- package/agents/design-auditor.md +92 -8
- package/agents/design-context-builder.md +6 -0
- package/agents/design-executor.md +5 -2
- package/agents/design-pattern-mapper.md +2 -0
- package/agents/design-verifier.md +11 -0
- package/agents/motion-mapper.md +45 -0
- package/agents/token-mapper.md +36 -0
- package/agents/visual-hierarchy-mapper.md +29 -0
- package/connections/design-corpora.md +158 -0
- package/package.json +16 -2
- package/reference/anti-patterns.md +69 -0
- package/reference/audit-scoring.md +34 -3
- package/reference/brand-voice.md +199 -0
- package/reference/checklists.md +30 -3
- package/reference/components/README.md +90 -0
- package/reference/components/TEMPLATE.md +184 -0
- package/reference/components/accordion.md +217 -0
- package/reference/components/button.md +195 -0
- package/reference/components/card.md +200 -0
- package/reference/components/checkbox.md +207 -0
- package/reference/components/drawer.md +201 -0
- package/reference/components/input.md +208 -0
- package/reference/components/label.md +200 -0
- package/reference/components/link.md +193 -0
- package/reference/components/modal-dialog.md +210 -0
- package/reference/components/popover.md +197 -0
- package/reference/components/radio.md +203 -0
- package/reference/components/select-combobox.md +219 -0
- package/reference/components/switch.md +194 -0
- package/reference/components/tabs.md +213 -0
- package/reference/components/tooltip.md +201 -0
- package/reference/data/google-fonts.csv +51 -0
- package/reference/data/palettes.csv +41 -0
- package/reference/data/styles.csv +39 -0
- package/reference/design-system-guidance.md +177 -0
- package/reference/design-systems-catalog.md +151 -0
- package/reference/framer-motion-patterns.md +411 -0
- package/reference/gestalt.md +219 -0
- package/reference/iconography.md +231 -0
- package/reference/motion.md +102 -0
- package/reference/palette-catalog.md +82 -0
- package/reference/performance.md +304 -0
- package/reference/registry.json +359 -28
- package/reference/registry.schema.json +2 -1
- package/reference/review-format.md +2 -2
- package/reference/style-vocabulary.md +62 -0
- package/reference/surfaces.md +114 -0
- package/reference/typography.md +80 -0
- package/reference/visual-hierarchy-layout.md +306 -0
- package/skills/benchmark/SKILL.md +105 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# Tooltip — Benchmark Spec
|
|
2
|
+
|
|
3
|
+
**Harvested from**: WAI-ARIA APG, Radix UI, Material 3, Carbon, Mantine, Fluent 2, Atlassian, Apple HIG
|
|
4
|
+
**Wave**: 2 · **Category**: Containers
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
A tooltip is a small, non-interactive label that appears on hover or keyboard focus to provide supplemental context for an element (typically an icon button or truncated text). It disappears on mouse-out, blur, or Escape. Tooltips MUST NOT contain interactive content (buttons, links, form elements). For interactive overlay content, use Popover. *(WAI-ARIA APG, Radix, Carbon all enforce this boundary)*
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Anatomy
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
[Icon button] ← hover or focus triggers tooltip
|
|
18
|
+
│
|
|
19
|
+
▼ (after 300ms delay)
|
|
20
|
+
┌────────────┐
|
|
21
|
+
│ Label │ ← role="tooltip"; 12px; no interactive content
|
|
22
|
+
└────────────┘
|
|
23
|
+
▲ (optional 6px arrow caret)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
| Part | Required | Notes |
|
|
27
|
+
|------|----------|-------|
|
|
28
|
+
| Trigger | Yes | Usually a button or interactive element |
|
|
29
|
+
| Tooltip container | Yes | `role="tooltip"` + unique `id` |
|
|
30
|
+
| Label text | Yes | Short (≤60 chars), descriptive |
|
|
31
|
+
| Arrow | No | 6–8px caret indicating anchor |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Variants
|
|
36
|
+
|
|
37
|
+
| Variant | Description | Systems |
|
|
38
|
+
|---------|-------------|---------|
|
|
39
|
+
| Default | Hover + focus triggered | All |
|
|
40
|
+
| Delayed | 300ms show delay; 0ms hide | All (WAI-ARIA APG recommended) |
|
|
41
|
+
| Instant | No delay (icon toolbars, dense UIs) | Material 3, Carbon |
|
|
42
|
+
| Dark | Dark background regardless of theme | Most systems |
|
|
43
|
+
| Light | Light background | Mantine (inverted) |
|
|
44
|
+
|
|
45
|
+
**Norm** (≥7/18): 300ms show delay, 0ms hide; max-width 240px; never interactive content.
|
|
46
|
+
**Diverge**: delay duration — Carbon recommends 100ms for toolbars; WAI-ARIA APG recommends ≤500ms. 300ms is the safe default.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## States
|
|
51
|
+
|
|
52
|
+
| State | Trigger | ARIA |
|
|
53
|
+
|-------|---------|------|
|
|
54
|
+
| hidden | default | `role="tooltip"` hidden (not in tab order) |
|
|
55
|
+
| visible (hover) | `mouseenter` (after delay) | `aria-describedby` on trigger points to tooltip id |
|
|
56
|
+
| visible (focus) | `focusin` on trigger | same |
|
|
57
|
+
| dismissed | `mouseleave`, `blur`, Escape | Tooltip hidden |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Sizing & Spacing
|
|
62
|
+
|
|
63
|
+
| Property | Value | Notes |
|
|
64
|
+
|----------|-------|-------|
|
|
65
|
+
| Max width | 240px | *(Material 3: 200px, Carbon: 288px, Fluent: 240px)* |
|
|
66
|
+
| Padding | 6px 12px | |
|
|
67
|
+
| Font size | 12px/400 | Smaller than body to signal supplemental role |
|
|
68
|
+
| Border radius | 4–6px | Tight radius vs. card; feels like label |
|
|
69
|
+
| Offset from trigger | 6–8px | |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Typography
|
|
74
|
+
|
|
75
|
+
- 12px/400 — tooltip text is supplemental; smaller weight and size distinguish it from primary content
|
|
76
|
+
- No bold, no headings inside tooltip — it is a single line of text (≤60 chars preferred)
|
|
77
|
+
- Multi-line: allowed if content genuinely requires it; still no interactive elements
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Keyboard & Accessibility
|
|
82
|
+
|
|
83
|
+
> **WAI-ARIA role**: `tooltip`
|
|
84
|
+
> **Trigger attributes**: `aria-describedby="tooltip-id"` — links the supplemental label
|
|
85
|
+
|
|
86
|
+
### Keyboard Contract
|
|
87
|
+
|
|
88
|
+
*Quoted verbatim from WAI-ARIA APG — https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/ — W3C — 2024*
|
|
89
|
+
|
|
90
|
+
| Key | Action |
|
|
91
|
+
|-----|--------|
|
|
92
|
+
| Tab | (on trigger) Shows tooltip when trigger receives focus |
|
|
93
|
+
| Escape | Hides the tooltip |
|
|
94
|
+
| Tab / Shift+Tab | Hides tooltip when focus leaves the trigger |
|
|
95
|
+
|
|
96
|
+
Tooltip does NOT receive focus. It is purely a visual label attached to the trigger.
|
|
97
|
+
|
|
98
|
+
### Accessibility Rules
|
|
99
|
+
|
|
100
|
+
- Trigger MUST have `aria-describedby` pointing to the tooltip's `id` — screen readers read tooltip content as supplemental description
|
|
101
|
+
- Tooltip is `role="tooltip"` — NOT `role="dialog"` (no interactivity, no focus trap)
|
|
102
|
+
- Tooltip MUST appear on keyboard focus, not only on hover — keyboard-only users need access too *(WCAG 1.3.3, 2.1.1)*
|
|
103
|
+
- Do NOT put interactive content inside a tooltip — use Popover (`reference/components/popover.md`)
|
|
104
|
+
- Do NOT use tooltip as the only accessible name for a control — use `aria-label` on the trigger instead; tooltip supplements, not replaces, the accessible name
|
|
105
|
+
- Escape MUST dismiss the tooltip without removing focus from the trigger *(WAI-ARIA APG)*
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Motion
|
|
110
|
+
|
|
111
|
+
| Transition | Duration | Easing | Notes |
|
|
112
|
+
|------------|----------|--------|-------|
|
|
113
|
+
| Show | 100ms | ease-out | Fade only; no scale (too flashy for a label) |
|
|
114
|
+
| Hide | 80ms | ease | Fade only; immediate on Escape |
|
|
115
|
+
| Delay | 300ms | — | CSS `transition-delay` or JS timeout |
|
|
116
|
+
|
|
117
|
+
Cross-link: `reference/motion.md` — `prefers-reduced-motion`: skip fade, instant show/hide
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Do / Don't
|
|
122
|
+
|
|
123
|
+
### Do
|
|
124
|
+
- Show on keyboard focus AND hover — not hover-only *(WAI-ARIA APG, WCAG 2.1.1)*
|
|
125
|
+
- Use `aria-describedby` to link trigger to tooltip *(WAI-ARIA APG)*
|
|
126
|
+
- Limit tooltip content to ≤60 chars — longer content belongs in a popover *(Carbon, Material 3)*
|
|
127
|
+
- Apply 300ms show delay to prevent accidental triggers while cursor passes *(WAI-ARIA APG, Carbon)*
|
|
128
|
+
|
|
129
|
+
### Don't
|
|
130
|
+
- Don't put interactive elements inside a tooltip *(WAI-ARIA APG — this makes it a popover)*
|
|
131
|
+
- Don't use tooltip as the only accessible name — `aria-describedby` supplements, not replaces, `aria-label` *(WAI-ARIA APG)*
|
|
132
|
+
- Don't trigger tooltip on click — use a popover *(Radix, WAI-ARIA APG)*
|
|
133
|
+
- Don't use tooltip for critical information — it's supplemental; users on touch devices may miss it *(Material 3, Polaris)*
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Anti-patterns Cross-links
|
|
138
|
+
|
|
139
|
+
| Anti-pattern | Entry |
|
|
140
|
+
|--------------|-------|
|
|
141
|
+
| Interactive content inside tooltip | `reference/anti-patterns.md` |
|
|
142
|
+
| Hover-only tooltip (not focus-triggered) | `reference/anti-patterns.md` |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Benchmark Citations
|
|
147
|
+
|
|
148
|
+
| Claim | Sources |
|
|
149
|
+
|-------|---------|
|
|
150
|
+
| role="tooltip" not role="dialog" | WAI-ARIA APG |
|
|
151
|
+
| Show on focus AND hover | WAI-ARIA APG, WCAG 2.1.1 |
|
|
152
|
+
| Escape dismisses without removing focus | WAI-ARIA APG §3.2 |
|
|
153
|
+
| 300ms delay | WAI-ARIA APG, Carbon |
|
|
154
|
+
| 240px max-width | Material 3, Fluent 2 |
|
|
155
|
+
| No interactive content | WAI-ARIA APG (all systems agree) |
|
|
156
|
+
|
|
157
|
+
Full system URLs: `connections/design-corpora.md`
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Grep Signatures
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# Tooltip triggered only on hover (not focus) — missing focusin handler
|
|
165
|
+
grep -rn 'tooltip\|Tooltip' src/ | grep 'mouseenter\|onHover' | grep -v 'focus\|onFocus'
|
|
166
|
+
|
|
167
|
+
# Interactive content inside tooltip
|
|
168
|
+
grep -rn 'role="tooltip"' src/ | xargs grep -l 'button\|<a \|input' 2>/dev/null
|
|
169
|
+
|
|
170
|
+
# Trigger missing aria-describedby
|
|
171
|
+
grep -rn 'role="tooltip"' src/ | grep -v 'aria-describedby'
|
|
172
|
+
|
|
173
|
+
# Tooltip without id (aria-describedby target requires id)
|
|
174
|
+
grep -rn 'role="tooltip"' src/ | grep -v ' id='
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Failing Example
|
|
180
|
+
|
|
181
|
+
```html
|
|
182
|
+
<!-- BAD: tooltip shows on hover only, no focus trigger, no ARIA linkage -->
|
|
183
|
+
<button class="icon-btn" onmouseenter="showTooltip()" onmouseleave="hideTooltip()">
|
|
184
|
+
<svg><!-- settings icon --></svg>
|
|
185
|
+
</button>
|
|
186
|
+
<div class="tooltip">Settings</div>
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Why it fails**: Keyboard users never see the tooltip. Screen readers receive no supplemental description. The `<div>` has no `role="tooltip"` and no `id`, so `aria-describedby` cannot link to it.
|
|
190
|
+
**Grep detection**: `grep -rn 'mouseenter\|onHover' src/ | grep -i 'tooltip' | grep -v 'focus'`
|
|
191
|
+
**Fix**:
|
|
192
|
+
```html
|
|
193
|
+
<button aria-describedby="settings-tip"
|
|
194
|
+
onmouseenter="show()" onmouseleave="hide()"
|
|
195
|
+
onfocusin="show()" onfocusout="hide()"
|
|
196
|
+
onkeydown="e.key==='Escape'&&hide()">
|
|
197
|
+
<svg aria-hidden="true"><!-- icon --></svg>
|
|
198
|
+
<span class="sr-only">Settings</span>
|
|
199
|
+
</button>
|
|
200
|
+
<div role="tooltip" id="settings-tip">Manage account settings</div>
|
|
201
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
family,category,variants,popularity_rank,best_for,pairing_suggestion
|
|
2
|
+
Inter,sans-serif,"100 200 300 400 500 600 700 800 900",1,UI interfaces,JetBrains Mono
|
|
3
|
+
Roboto,sans-serif,"100 300 400 500 700 900",2,Android apps,Roboto Mono
|
|
4
|
+
Open Sans,sans-serif,"300 400 500 600 700 800",3,Content sites,Source Code Pro
|
|
5
|
+
Lato,sans-serif,"100 300 400 700 900",4,Corporate,Inconsolata
|
|
6
|
+
Montserrat,sans-serif,"100 200 300 400 500 600 700 800 900",5,Headers/Fashion,Raleway
|
|
7
|
+
Poppins,sans-serif,"100 200 300 400 500 600 700 800 900",6,Modern UI,Space Mono
|
|
8
|
+
Nunito,sans-serif,"200 300 400 500 600 700 800 900",7,Friendly apps,Nunito Sans
|
|
9
|
+
Raleway,sans-serif,"100 200 300 400 500 600 700 800 900",8,Luxury/Editorial,Lato
|
|
10
|
+
Oswald,sans-serif,"200 300 400 500 600 700",9,Impact headlines,Source Sans 3
|
|
11
|
+
Source Sans 3,sans-serif,"200 300 400 500 600 700 900",10,Content/Enterprise,Source Serif 4
|
|
12
|
+
Playfair Display,serif,"400 500 600 700 800 900",11,Editorial headers,Source Sans 3
|
|
13
|
+
Merriweather,serif,"300 400 700 900",12,Long-form reading,Open Sans
|
|
14
|
+
PT Sans,sans-serif,"400 700",13,CIS region apps,PT Serif
|
|
15
|
+
Ubuntu,sans-serif,"300 400 500 700",14,Linux/tech apps,Ubuntu Mono
|
|
16
|
+
Noto Sans,sans-serif,"100 200 300 400 500 600 700 800 900",15,Multilingual,Noto Serif
|
|
17
|
+
Work Sans,sans-serif,"100 200 300 400 500 600 700 800 900",16,Modern websites,Space Mono
|
|
18
|
+
Quicksand,sans-serif,"300 400 500 600 700",17,Playful/Wellness,Nunito
|
|
19
|
+
Mulish,sans-serif,"200 300 400 500 600 700 800 900",18,Clean UI,Courier Prime
|
|
20
|
+
DM Sans,sans-serif,"100 200 300 400 500 600 700 800 900",19,Tech/Modern,DM Mono
|
|
21
|
+
DM Serif Display,serif,"400",20,Display headers,DM Sans
|
|
22
|
+
IBM Plex Sans,sans-serif,"100 200 300 400 500 600 700",21,Enterprise/IBM,IBM Plex Mono
|
|
23
|
+
IBM Plex Mono,monospace,"100 200 300 400 500 600 700",22,Code/Tech,IBM Plex Sans
|
|
24
|
+
JetBrains Mono,monospace,"100 200 300 400 500 600 700 800",23,Developer tools,Inter
|
|
25
|
+
Fira Code,monospace,"300 400 500 600 700",24,Developer tools,Fira Sans
|
|
26
|
+
Space Mono,monospace,"400 700",25,Retro/Tech,Space Grotesk
|
|
27
|
+
Space Grotesk,sans-serif,"300 400 500 600 700",26,Modern tech,Space Mono
|
|
28
|
+
Plus Jakarta Sans,sans-serif,"200 300 400 500 600 700 800",27,Consumer apps,Syne
|
|
29
|
+
Syne,sans-serif,"400 500 600 700 800",28,Creative headers,DM Sans
|
|
30
|
+
Cabinet Grotesk,sans-serif,"100 200 300 400 500 600 700 800 900",29,Consumer branding,Satoshi
|
|
31
|
+
Geist,sans-serif,"100 200 300 400 500 600 700 800 900",30,Vercel ecosystem,Geist Mono
|
|
32
|
+
Geist Mono,monospace,"100 200 300 400 500 600 700 800 900",31,Code display,Geist
|
|
33
|
+
Outfit,sans-serif,"100 200 300 400 500 600 700 800 900",32,Friendly SaaS,DM Mono
|
|
34
|
+
Cormorant Garamond,serif,"300 400 500 600 700",33,Luxury editorial,Proza Libre
|
|
35
|
+
EB Garamond,serif,"400 500 600 700 800",34,Classical print,Lato
|
|
36
|
+
Libre Baskerville,serif,"400 700",35,Classic editorial,Libre Franklin
|
|
37
|
+
Libre Franklin,sans-serif,"100 200 300 400 500 600 700 800 900",36,Editorial body,Libre Baskerville
|
|
38
|
+
Crimson Pro,serif,"200 300 400 500 600 700 800 900",37,Long-form reading,Raleway
|
|
39
|
+
Lora,serif,"400 500 600 700",38,Blog/editorial,Source Sans 3
|
|
40
|
+
Bodoni Moda,serif,"400 500 600 700 800 900",39,Fashion/luxury,Jost
|
|
41
|
+
Jost,sans-serif,"100 200 300 400 500 600 700 800 900",40,Modern sans,Bodoni Moda
|
|
42
|
+
Exo 2,sans-serif,"100 200 300 400 500 600 700 800 900",41,Futuristic/Gaming,Roboto
|
|
43
|
+
Bebas Neue,sans-serif,"400",42,Impact display,Open Sans
|
|
44
|
+
Anton,sans-serif,"400",43,Bold headlines,Open Sans
|
|
45
|
+
Archivo,sans-serif,"100 200 300 400 500 600 700 800 900",44,Neutral content,Archivo Black
|
|
46
|
+
Cabin,sans-serif,"400 500 600 700",45,Humanist UI,Cabin Condensed
|
|
47
|
+
Rubik,sans-serif,"300 400 500 600 700 800 900",46,Rounded UI,Fira Code
|
|
48
|
+
Barlow,sans-serif,"100 200 300 400 500 600 700 800 900",47,Wide screens,Barlow Condensed
|
|
49
|
+
Hind,sans-serif,"300 400 500 600 700",48,Devanagari+Latin,Roboto
|
|
50
|
+
Manrope,sans-serif,"200 300 400 500 600 700 800",49,Modern rounded,JetBrains Mono
|
|
51
|
+
Noto Serif,serif,"100 200 300 400 500 600 700 800 900",50,Multilingual body,Noto Sans
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
Vertical,Primary,On-Primary,Secondary,On-Secondary,Accent,Background,Foreground,Card,Muted,Border,Destructive,Notes
|
|
2
|
+
FinTech/Banking,#1A56DB,#FFFFFF,#0E9F6E,#FFFFFF,#F05252,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#E5E7EB,#E02424,Authoritative navy-blue signals trust; green secondary for positive states; red destructive for transfers/deletions. WCAG verified.
|
|
3
|
+
Healthcare/Medical,#0E9F6E,#FFFFFF,#1A56DB,#FFFFFF,#FF8A4C,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#E5E7EB,#E02424,Clinical green primary communicates health and safety; blue secondary for informational states; amber accent for caution alerts. WCAG verified.
|
|
4
|
+
SaaS/B2B Tools,#6875F5,#FFFFFF,#0E9F6E,#FFFFFF,#F05252,#FFFFFF,#111928,#F9FAFB,#F3F4F6,#E5E7EB,#E02424,Periwinkle-purple primary is the contemporary B2B SaaS signal; green secondary for success states; cards slightly off-white for depth. WCAG verified.
|
|
5
|
+
E-commerce/Retail,#D97706,#FFFFFF,#1A56DB,#FFFFFF,#E02424,#FFFFFF,#111928,#F9FAFB,#FEF3C7,#E5E7EB,#DC2626,Amber primary drives purchase urgency; blue secondary for trust (payments); warm-yellow muted for promotional surfaces. WCAG verified.
|
|
6
|
+
Gaming/Entertainment,#7E3AF2,#FFFFFF,#FF8A4C,#111928,#F05252,#111928,#F9FAFB,#1F2937,#374151,#4B5563,#EF4444,Deep violet on dark; amber accent for XP/reward moments; dark card creates depth. Light on dark meets 4.5:1. WCAG verified.
|
|
7
|
+
Social/Community,#3F83F8,#FFFFFF,#0E9F6E,#FFFFFF,#F05252,#FFFFFF,#111928,#F9FAFB,#EFF6FF,#E5E7EB,#DC2626,Friendly blue; green for connection/online states; sky-tinted muted for feed separation. WCAG verified.
|
|
8
|
+
Developer Tools,#0F172A,#F8FAFC,#6875F5,#FFFFFF,#22D3EE,#F8FAFC,#0F172A,#FFFFFF,#F1F5F9,#CBD5E1,#EF4444,Near-black on white for precision; purple secondary for interactive elements; cyan accent for syntax-highlight pops. WCAG verified.
|
|
9
|
+
EdTech/Learning,#FF8A4C,#FFFFFF,#6875F5,#FFFFFF,#0E9F6E,#FFFBEB,#111928,#FFFFFF,#FEF3C7,#FDE68A,#DC2626,Warm amber primary energizes motivation; violet secondary for quiz elements; warm background avoids clinical white. WCAG verified.
|
|
10
|
+
Legal/Compliance,#1E3A5F,#FFFFFF,#374151,#FFFFFF,#B45309,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#D1D5DB,#DC2626,Deep navy signals authority and precision; slate secondary for neutral chrome; amber for deadlines. WCAG verified.
|
|
11
|
+
HR/People Ops,#7E3AF2,#FFFFFF,#FF8A4C,#FFFFFF,#0E9F6E,#FAF5FF,#111928,#FFFFFF,#F3F4F6,#E9D5FF,#DC2626,Violet balances authority and empathy; amber secondary for recognition; lavender muted for soft separation. WCAG verified.
|
|
12
|
+
Real Estate/Property,#065F46,#FFFFFF,#1A56DB,#FFFFFF,#B45309,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#E5E7EB,#DC2626,Deep forest green signals land and stability; blue secondary for financing; amber for premium listings. WCAG verified.
|
|
13
|
+
Travel/Hospitality,#1A56DB,#FFFFFF,#0E9F6E,#FFFFFF,#FF8A4C,#EFF6FF,#111928,#FFFFFF,#DBEAFE,#BFDBFE,#DC2626,Sky blue evokes open skies; green for confirmed bookings; amber for discovery warmth; sky-tinted muted distinctive. WCAG verified.
|
|
14
|
+
Food/Delivery,#D97706,#FFFFFF,#E02424,#FFFFFF,#0E9F6E,#FFFBEB,#111928,#FFFFFF,#FEF3C7,#FDE68A,#B91C1C,Amber stimulates appetite and speed; red secondary for urgency; warm background mirrors food photography. WCAG verified.
|
|
15
|
+
Fitness/Wellness,#047857,#FFFFFF,#1A56DB,#FFFFFF,#F05252,#F0FDF4,#111928,#FFFFFF,#DCFCE7,#BBF7D0,#DC2626,Saturated green signals vitality; blue secondary for calm recovery; red for max-effort moments; green-tinted background. WCAG verified.
|
|
16
|
+
Non-profit/NGO,#065F46,#FFFFFF,#D97706,#111928,#1A56DB,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#E5E7EB,#DC2626,Deep green signals mission; amber secondary for warmth; blue accent for impact data reporting. WCAG verified.
|
|
17
|
+
Government/Civic,#1E3A5F,#FFFFFF,#374151,#FFFFFF,#D97706,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#D1D5DB,#DC2626,Deep navy is the global government convention (GOV.UK/USWDS); slate for dense information; amber for notices. WCAG verified.
|
|
18
|
+
Luxury/Fashion,#111928,#F9FAFB,#374151,#F9FAFB,#B45309,#FFFFFF,#111928,#F9FAFB,#F9FAFB,#E5E7EB,#DC2626,Near-black on white is the international luxury language; gold-amber accent for price points. WCAG verified.
|
|
19
|
+
Media/Publishing,#111928,#F9FAFB,#E02424,#FFFFFF,#D97706,#FFFFFF,#111928,#F9FAFB,#F3F4F6,#E5E7EB,#B91C1C,Near-black mirrors newspaper conventions; red secondary for breaking news and editorial accents. WCAG verified.
|
|
20
|
+
Analytics/BI,#1A56DB,#FFFFFF,#0E9F6E,#FFFFFF,#FF8A4C,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#E5E7EB,#DC2626,Blue primary anchors sequential chart palettes; green for positive delta; amber for cautionary thresholds. WCAG verified.
|
|
21
|
+
AI/ML Platform,#4F46E5,#FFFFFF,#7E3AF2,#FFFFFF,#22D3EE,#0F172A,#F8FAFC,#1E293B,#334155,#475569,#EF4444,Indigo on dark — the established AI product visual language; violet secondary; cyan for streaming states. WCAG verified.
|
|
22
|
+
Cybersecurity,#1E3A5F,#FFFFFF,#0E9F6E,#FFFFFF,#22D3EE,#0A0A0A,#F8FAFC,#111827,#1F2937,#374151,#EF4444,Deep navy on near-black for monitoring environment; green for all-clear; cyan for network visualization. WCAG verified.
|
|
23
|
+
Logistics/Supply Chain,#D97706,#111928,#1A56DB,#FFFFFF,#0E9F6E,#FFFBEB,#111928,#FFFFFF,#FEF3C7,#FDE68A,#DC2626,Amber mirrors high-vis safety conventions; blue secondary for digital tracking; warm background differentiates. WCAG verified.
|
|
24
|
+
Insurance,#1E3A5F,#FFFFFF,#0E9F6E,#FFFFFF,#D97706,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#D1D5DB,#DC2626,Navy signals protection and reliability; green for claims approved; amber for upcoming renewals. WCAG verified.
|
|
25
|
+
Automotive,#111928,#F9FAFB,#374151,#F9FAFB,#E02424,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#D1D5DB,#B91C1C,Near-black matches premium automotive convention; red accent for performance/sport; silver-gray for chrome surfaces. WCAG verified.
|
|
26
|
+
Agriculture/AgriTech,#065F46,#FFFFFF,#D97706,#111928,#1A56DB,#F0FDF4,#111928,#FFFFFF,#DCFCE7,#A7F3D0,#DC2626,Deep green is literal and honest; amber secondary for harvest richness; blue for water management data. WCAG verified.
|
|
27
|
+
CleanTech/Sustainability,#047857,#FFFFFF,#1A56DB,#FFFFFF,#D97706,#F0FDF4,#111928,#FFFFFF,#DCFCE7,#BBF7D0,#DC2626,Rich emerald signals genuine environmental commitment; blue for resource tracking; amber for carbon metrics. WCAG verified.
|
|
28
|
+
Pharmaceutical,#1E3A5F,#FFFFFF,#0E9F6E,#FFFFFF,#FF8A4C,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#D1D5DB,#DC2626,Regulated navy for clinical authority; green for health-positive states; amber for warnings. WCAG verified.
|
|
29
|
+
Architecture/AEC,#374151,#FFFFFF,#D97706,#111928,#1A56DB,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#E5E7EB,#DC2626,Slate evokes material neutrality; amber for material warmth; blue for technical drawing layers. WCAG verified.
|
|
30
|
+
Interior Design,#92400E,#FFFFFF,#065F46,#FFFFFF,#1E3A5F,#FFFBEB,#111928,#FFFFFF,#FEF3C7,#FDE68A,#DC2626,Warm terracotta evokes timber and clay; deep green for biophilic moments; warm cream background. WCAG verified.
|
|
31
|
+
Music/Audio,#111928,#F9FAFB,#7E3AF2,#FFFFFF,#F05252,#0A0A0A,#F9FAFB,#1F2937,#374151,#4B5563,#EF4444,Near-black dark primary — music is dark-mode-first; violet for discovery; red for recording/live states. WCAG verified.
|
|
32
|
+
Photography/Video,#111928,#F9FAFB,#374151,#F9FAFB,#FF8A4C,#0A0A0A,#F9FAFB,#1F2937,#374151,#4B5563,#EF4444,Near-black canvas lets content take center stage; amber accent for active tool states. WCAG verified.
|
|
33
|
+
Crypto/Web3,#4F46E5,#FFFFFF,#0E9F6E,#FFFFFF,#F59E0B,#0F172A,#F8FAFC,#1E293B,#334155,#475569,#EF4444,Indigo on dark signals crypto-native aesthetic; green for confirmed transactions; gold for high-value events. WCAG verified.
|
|
34
|
+
Marketing/AdTech,#D97706,#111928,#E02424,#FFFFFF,#7E3AF2,#FFFFFF,#111928,#F9FAFB,#FEF3C7,#FDE68A,#B91C1C,Amber signals campaign energy; red for CTAs and limited-offer badges; violet for creative moments. WCAG verified.
|
|
35
|
+
Recruitment/HR Tech,#7E3AF2,#FFFFFF,#1A56DB,#FFFFFF,#0E9F6E,#FAF5FF,#111928,#FFFFFF,#F3E8FF,#E9D5FF,#DC2626,Violet signals human potential; navy secondary for employer trust; green for offer extended. WCAG verified.
|
|
36
|
+
Customer Support/CX,#0E9F6E,#FFFFFF,#3F83F8,#FFFFFF,#FF8A4C,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#E5E7EB,#DC2626,Green signals resolution; blue for informational knowledge base; amber for escalation alerts. WCAG verified.
|
|
37
|
+
E-learning/MOOC,#6875F5,#FFFFFF,#FF8A4C,#FFFFFF,#0E9F6E,#F9FAFB,#111928,#FFFFFF,#EFF6FF,#E0E7FF,#DC2626,Periwinkle primary bridges EdTech energy and SaaS discipline; amber for deadlines; green for completion. WCAG verified.
|
|
38
|
+
Telemedicine,#1A56DB,#FFFFFF,#0E9F6E,#FFFFFF,#FF8A4C,#EFF6FF,#111928,#FFFFFF,#DBEAFE,#BFDBFE,#DC2626,Blue signals clinical authority on video calls; green for patient-status OK; sky-blue creates clinical calm. WCAG verified.
|
|
39
|
+
Smart Home/IoT,#1E3A5F,#FFFFFF,#0E9F6E,#FFFFFF,#F59E0B,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#E5E7EB,#DC2626,Deep navy signals reliable connectivity; green for device-online states; amber for warnings and energy peaks. WCAG verified.
|
|
40
|
+
Manufacturing/Industrial,#374151,#FFFFFF,#D97706,#111928,#1A56DB,#F9FAFB,#111928,#FFFFFF,#F3F4F6,#D1D5DB,#DC2626,Slate mirrors industrial material honesty; amber mirrors high-vis safety conventions; blue for OEE dashboards. WCAG verified.
|
|
41
|
+
Construction,#D97706,#111928,#374151,#FFFFFF,#1A56DB,#FFFBEB,#111928,#FFFFFF,#FEF3C7,#FDE68A,#B91C1C,Amber is literal high-vis construction signaling; slate for technical plan review; blue for BIM and site tracking. WCAG verified.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Style,Keywords,Signature Effects,Best For,Avoid For,Light/Dark,Performance,Era
|
|
2
|
+
Glassmorphism,"frosted glass, translucency, blur, layered depth","backdrop-filter: blur(20px); semi-transparent cards; rgba border; subtle inner glow","Dashboards, media apps, modern SaaS, AI/ML surfaces","Data-dense tables, accessibility-critical flows, low-end devices",Both (dark base preferred),High — compositor layer cost,2019–present
|
|
3
|
+
Brutalism,"raw layout, stark contrast, intentional roughness, exposed grid","Hard pixel borders 2–4px solid; no border-radius; flat color fills; oversized type","Creative portfolios, challenger brands, indie products, arts organizations","Healthcare, regulated finance, government, e-commerce",Light mode primary,Lowest,2016–present
|
|
4
|
+
Neumorphism,"extruded shadows, raised/inset UI, monochromatic, bilateral shadows","box-shadow: bilateral soft shadow; near-identical fg/bg hue; no hard borders","Personal finance concept dashboards, design prototypes","Accessibility-critical (fails WCAG), mobile, production apps",Light only,Low — but WCAG caution,2019–2021
|
|
5
|
+
Flat Design 2.0,"minimal decoration, subtle shadows, vibrant palette, geometric icons","Single drop-shadow at low blur; bold sans-serif; 8pt spacing grid; no gradients","Productivity apps, documentation, enterprise SaaS, developer tools","Luxury/fashion, entertainment",Both,Lowest,2014–present
|
|
6
|
+
Material Design 3,"dynamic color, tonal surfaces, M3 components, elevation via color","Tonal surface colors from brand seed; container/on-container pairs; state layers","Android-first apps, cross-platform Google-adjacent products","Apple HIG contexts, luxury brands, editorial-first experiences",Both,Low,2021–present
|
|
7
|
+
Bento Grid,"card-grid layout, variable card sizes, grid gaps as design element","CSS Grid with named areas; card size 1×1 to 3×2; 8–16px gap; rounded cards","Marketing pages, dashboard home screens, portfolio showcases","Linear narrative content, long-form reading, checkout flows",Both,Low,2022–present
|
|
8
|
+
AI-Native,"gradient meshes, dark base, glowing accents, particle effects","Gradient mesh background; particle canvas overlay; glowing border via box-shadow","AI/ML products, futuristic SaaS, developer platform landing pages","Traditional enterprise, regulated industries, healthcare",Dark primary,High — particle canvas/WebGL,2022–present
|
|
9
|
+
Swiss Modernism 2.0 / International Style,"strict grid, functional typography, red-black-white, structure as beauty","Baseline 12-column grid; Helvetica/Neue Haas/Inter; red accent only; type as layout element","Editorial platforms, design agencies, cultural institutions","Consumer apps, gaming, children's products",Both,Lowest,1950–present (revival 2018–)
|
|
10
|
+
Claymorphism,"3D inflated shapes, soft clay surfaces, pastel palette, inner shadows","border-radius: 30–50px; layered box-shadow (inner highlight + outer soft); pastel fills","Consumer apps, children's products, lifestyle, wellness, gifting","Enterprise, financial tools, anything requiring precision",Both,Medium,2021–present
|
|
11
|
+
Dark Mode First,"deep backgrounds, elevation via surface color, low-saturation palette","Background #0A0A0A–#121212; surface gray ladder; text #F5F5F5; color desaturated 20%","Developer tools, code editors, media players, gaming","Healthcare in clinical settings, high-ambient-light kiosks",Dark primary,Low,2018–present
|
|
12
|
+
Vaporwave/Retrowave,"neon gradients, dark base, grid lines, retro typography, CRT aesthetic","Hot pink to cyan gradient; background grid lines; scanline overlay; glow via text-shadow","Gaming, entertainment, nostalgia brands, Gen-Z consumer, music","Trust-critical verticals, healthcare, finance, government",Dark,High — glow filters and gradient overlays,1980s origin; revival 2016–present
|
|
13
|
+
Editorial Grid,"overlapping text and image, asymmetric layout, strong typographic hierarchy","Text over image with mix-blend-mode; column-spanning type; headline 80–120px; serif display","Media platforms, publishing, editorial brands, portfolios","Functional SaaS, data-dense dashboards, e-commerce PDP",Both,Low,Print tradition; revival 2018–present
|
|
14
|
+
HUD/Sci-Fi FUI,"monochrome on dark, thin lines, technical readout vocabulary, blinking cursors","Background #000; primary green or cyan on black; 1px rule lines; monospace; corner bracket elements","Technology/aerospace dashboards, game UI overlays, cybersecurity monitoring","Consumer products, non-technical users requiring instant clarity",Dark,High — continuous animations,Science fiction tradition; real-world FUI since 2010
|
|
15
|
+
Minimal/Zen,"maximum whitespace, single accent, natural textures, typography-first","70%+ whitespace ratio; single color accent; thin-weight serif or geometric sans; optional paper texture 5%","Wellness apps, meditation products, luxury minimal brands, author portfolios","Feature-dense apps, complex navigation, high-information-density dashboards",Both,Lowest,2010–present
|
|
16
|
+
Skeuomorphism 2.0,"realistic textures, modern execution, material-specific rendering","Leather/wood/metal textures via CSS or SVG; specular highlights; physical affordances","Premium music instruments, luxury hardware apps, high-end lifestyle products","Modern SaaS, productivity tools, frequent-update products",Both,Medium — texture assets and layered pseudo-elements,Original 2007–2013; revival 2021–present
|
|
17
|
+
Neubrutalism,"visible borders, flat colors, stark contrast, browser-default-inspired","2–3px solid dark border on all interactive elements; flat fill; color-flip hover; no border-radius","Indie SaaS, creative tools, challenger brands, hackathon projects","Enterprise, regulated industries, anything requiring perceived polish",Both,Lowest,2021–present
|
|
18
|
+
Memphis Design Revival,"geometric shapes, primary colors, patterns, 80s-inspired, maximalist","Bold geometric pattern fills; primary + secondary color blocking; pattern borders; mixed type weights","Consumer brands targeting Gen Z, playful e-commerce, lifestyle, pop culture","Professional services, enterprise, financial products",Both,Low,1980s origin; digital revival 2022–present
|
|
19
|
+
Glassmorphism Dark,"frosted glass on dark base, darker frost panels, subtle neon borders","backdrop-filter: blur(24px) on near-black; card at rgba(255,255,255,0.05); neon border at 30% opacity","Gaming UI, media players, nightclub/event apps, AI product dark surfaces","Products requiring readable body text at scale",Dark,High — same as Glassmorphism,2020–present
|
|
20
|
+
Aurora/Gradient Mesh,"flowing color gradients, no hard borders, dreamlike, organic forms","CSS mesh gradient 4–6 color stops at 40–70% opacity; no hard-edge borders; sections dissolve","AI/ML landing pages, creative platform hero sections, generative art tools","Data-dense apps, form-heavy flows, contexts requiring clear section boundaries",Both,Medium-High — large gradient repaint,2021–present
|
|
21
|
+
Monochromatic Minimal,"single hue across full lightness range, typography-first, restraint","All elements share one hue; lightness 5%–97%; no accent color; type weight as only contrast variation","Portfolios, luxury brand identity, photography showcases, editorial","Multi-action apps, e-commerce, gaming",Both,Lowest,2015–present
|
|
22
|
+
Conversion-First,"CTA-dominant layout, social proof, urgency mechanics, trust signals","Primary CTA above fold; social proof within 2 scroll steps; urgency timer; benefit bullets; sticky CTA bar","Lead-gen landing pages, SaaS trial pages, product launch pages","Brand storytelling, editorial, informational docs",Both,Low,2010–present
|
|
23
|
+
Story-Scroll,"parallax narrative, scroll-triggered animations, cinematic pacing","IntersectionObserver fade-in sequences; horizontal scroll segments; full-bleed imagery; chapter breaks","Brand launches, product storytelling, annual reports, agency showreels","High-conversion pages, dashboard apps, utility tools",Both,Medium-High — JS animation and asset loading,2014–present
|
|
24
|
+
Product Demo,"embedded interactive preview, annotated feature callouts, tooltip overlays","Inline iframe/video demo above fold; numbered callout dots; feature spotlight; interactive hotspot map","SaaS product landing pages, browser extension pages, design tool showcases","Services businesses, content sites, physical product e-commerce",Both,Medium — video autoplay and interactives,2016–present
|
|
25
|
+
Trust-Builder,"certification display, testimonial photography, risk-reduction copy, authority signals","Client logo strip; testimonial cards with real photos; certification badges; security copy near forms","B2B SaaS sales pages, fintech onboarding, legal/compliance, high-ticket e-commerce","Consumer social apps, entertainment, developer tools",Both,Low,2012–present
|
|
26
|
+
Playful Consumer,"rounded UI, emoji integration, micro-animations, confetti moments","border-radius 24–32px everywhere; emoji in headings; Lottie animation; confetti on conversion; bouncy spring","Consumer apps, gifting platforms, children's products, food delivery","Enterprise, financial products, healthcare, government",Both,Medium — Lottie/animation assets,2018–present
|
|
27
|
+
Dark Premium,"full dark canvas, gold or silver accents, whitespace-heavy, editorial hierarchy","Background #0A0A0A; gold or silver accent; large display serif 80–120px; section-level vertical rhythm","Luxury SaaS, high-end services, premium membership, whiskey/watch brands","Mass-market consumer apps, anything needing color variety for hierarchy",Dark,Low,2018–present
|
|
28
|
+
Typography-Led,"large type as hero, minimal imagery, type as design","Display type 100–200px; type positioned absolutely; tight leading 0.9–1.1; type color inverted from background","Editorial brands, design agencies, type foundries, artist/creative portfolios","Functional apps, e-commerce needing imagery",Both,Lowest,Print tradition; digital 2015–present
|
|
29
|
+
Data-Driven,"charts and stats as hero visual, number-forward design","Large KPI numbers 80–120px in hero; inline sparkline; data annotation typography; tabular numerals","Analytics tools, investor relations, research organizations, fintech reporting","Lifestyle brands, emotional products, services without clear metrics",Both,Low — static SVG charts,2019–present
|
|
30
|
+
Data Dense,"information-maximized layout, minimal chrome, small type","12–13px body in tables; 4–8px row padding; no card containers; tooltips over labels; condensed font","Bloomberg-style terminals, trading desks, operations centers, medical records","Consumer apps, mobile-primary, accessibility-critical",Both (dark preferred),Low,1990s terminal origin; modern SaaS 2012–present
|
|
31
|
+
Executive Dashboard,"large KPIs, traffic-light status, minimal labels, decision-oriented","KPI cards at 48–64px; 3-color status system; sparkline per KPI; max 6 KPIs above fold","C-suite reporting, board packs, PE portfolio monitoring, business reviews","Operational monitoring, self-serve analytics",Both,Low,2010–present
|
|
32
|
+
Operational Monitor,"real-time status indicators, alert color system, live data feel, dense timeline","WebSocket refresh indicator; color-coded service dots; rolling log window; alert banner; incident timeline","DevOps dashboards, NOC, cloud infrastructure monitoring, on-call tools","Executive reporting, consumer apps",Dark primary,Medium — live data updates,2012–present
|
|
33
|
+
Data Storytelling,"prose plus inline charts, guided narrative, progressive disclosure","Section header states finding; chart supports; annotation layer; reading-width column 640–720px; chapter progress","Insight reports, analytics 'stories', investor updates, data journalism","Self-serve exploration dashboards, real-time ops",Both,Low,2017–present
|
|
34
|
+
Grid/Matrix,"dense tabular layout, frozen headers, column sorting, comparison-ready","CSS sticky headers; zebra-stripe rows; column resize; monospace numbers; sort indicators; heatmap cells","Financial data apps, CRM list views, ERP, spreadsheet-replacement tools","Dashboards with narrative focus, mobile primary",Both,Low — virtualize beyond 500 rows,2000–present
|
|
35
|
+
Graph/Network,"node-edge visualization, force-directed layout, interactive topology","SVG/Canvas force-directed graph; node size encodes metric; edge color encodes relationship; zoom/pan","Dependency maps, org charts, knowledge graphs, security blast-radius visualization","Static reports, mobile primary",Both,High — use WebGL for >1000 nodes,2012–present
|
|
36
|
+
Geospatial,"map-first layout, choropleth overlays, geographic filter","Full-bleed map primary content area; choropleth scale legend; point clusters; polygon selection; sidebar detail","Logistics route analytics, retail location, real estate maps, public health dashboards","Products without geographic data, mobile with small screen",Both,High — map tile loading and vector layers,2010–present
|
|
37
|
+
Timeline-First,"chronological layout, Gantt-inspired, temporal density","Horizontal scroll timeline; date-stamped lane per entity; milestone markers; dependency lines; zoom year→day","Project management, roadmap views, history visualization, editorial production","Real-time monitoring, KPI dashboards",Both,Medium — virtualized timeline required for long ranges,2015–present
|
|
38
|
+
Comparison View,"side-by-side panels, diff highlighting, symmetrical layout","Two-column 50/50; synchronized scroll; diff highlights green/red; overlay mode toggle; summary diff in header","A/B test dashboards, design diff tools, version comparison, benchmark analysis","Single-subject dashboards, mobile primary",Both,Low,2015–present
|
|
39
|
+
Mobile Analytics,"touch-optimized charts, swipe navigation, bottom-sheet detail","Horizontal bar charts; swipe between metric cards; bottom-sheet drill-down; 48px tap targets; pinch-zoom charts","Field sales apps, retail staff dashboards, on-the-go executive views, mobile-first ops","Desktop-primary tools, data-dense tables",Both,Low — chart library must support touch events,2018–present
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Design System Guidance
|
|
2
|
+
|
|
3
|
+
A design system is not a component library. A component library is a collection of UI building blocks. A design system is the governing architecture that makes those components consistent, maintainable, and scalable across teams, products, and time. The difference matters because design systems require governance, versioning, and documentation infrastructure that component libraries do not. This file provides the principles and practices for building, evolving, and governing a design system at any maturity level.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Token Versioning and Deprecation Policy
|
|
8
|
+
|
|
9
|
+
Design tokens are an API. Like any API, they must be versioned, because the components and applications that consume them will break if tokens are renamed or removed without notice. Treating tokens as implementation details — things that can be changed quietly — is the single most common cause of unexpected visual regressions in design systems.
|
|
10
|
+
|
|
11
|
+
**Semantic versioning for token APIs:** Token changes should follow SemVer semantics. Adding a new token is a minor release. Changing a token's value (e.g., updating `--color-brand-primary` from `#1a73e8` to `#1557b0`) is a minor release if the semantic meaning is preserved, or a major release if it changes the intent. Renaming or removing a token is always a major release.
|
|
12
|
+
|
|
13
|
+
**Deprecation warnings before removal:** A token should never be removed without a deprecation period of at least one major version. During the deprecation period, the old token continues to work but emits a warning in development mode (or in Figma via variable mode annotation). The deprecation notice must include the replacement token and a migration date. Consumers who are warned well in advance can migrate on their own timeline; consumers who are surprised by breakage lose trust in the system.
|
|
14
|
+
|
|
15
|
+
**Migration guides required:** Every major release that removes or renames tokens must include a migration guide. The guide must list every changed token, its old name, its new name, and a search-and-replace pattern that can be applied programmatically. A migration that requires consumers to manually discover what changed is not a migration — it is a breakage.
|
|
16
|
+
|
|
17
|
+
**Never rename without aliasing:** When a token must be renamed — because the original name violated naming conventions, was ambiguous, or referred to a value rather than a purpose — the old name must be preserved as an alias pointing to the new name. The alias is deprecated and removed in the next major release after a documented migration window. This rule exists because token names propagate into codebases at scale: a rename without aliasing breaks every downstream consumer simultaneously.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Multi-Brand Token Architecture
|
|
22
|
+
|
|
23
|
+
A multi-brand token architecture allows a single component library to support multiple brand expressions — different color palettes, typography scales, and spacing densities — without forking the component code. The architecture achieves this through three distinct token layers, each with a specific responsibility.
|
|
24
|
+
|
|
25
|
+
### Base Layer (Primitives)
|
|
26
|
+
|
|
27
|
+
The base layer contains raw values with no semantic meaning. These are the atoms from which all other tokens are composed. A primitive token describes what the value is, not what it means or where it is used.
|
|
28
|
+
|
|
29
|
+
Examples:
|
|
30
|
+
- `--color-blue-500: #1a73e8`
|
|
31
|
+
- `--color-blue-600: #1557b0`
|
|
32
|
+
- `--space-4: 4px`
|
|
33
|
+
- `--space-8: 8px`
|
|
34
|
+
- `--font-size-16: 16px`
|
|
35
|
+
|
|
36
|
+
Primitive tokens should never be used directly in component code. They exist only to feed the semantic layer. This constraint is essential: if components reference primitive tokens directly, you lose the ability to theme them without modifying component code.
|
|
37
|
+
|
|
38
|
+
### Semantic Layer (Roles)
|
|
39
|
+
|
|
40
|
+
The semantic layer maps primitive values to design roles. These tokens describe what a value is *for*, not what it *is*. The semantic layer is the theming boundary: swapping this layer changes the brand without touching components.
|
|
41
|
+
|
|
42
|
+
Examples:
|
|
43
|
+
- `--color-brand-primary: var(--color-blue-500)`
|
|
44
|
+
- `--color-interactive-default: var(--color-brand-primary)`
|
|
45
|
+
- `--color-surface-default: var(--color-white)`
|
|
46
|
+
- `--color-text-primary: var(--color-grey-900)`
|
|
47
|
+
|
|
48
|
+
Theme switching works by replacing the semantic layer. In practice, each brand defines its own semantic-layer token file that references its own base-layer primitives. Components import only semantic tokens; they have no knowledge of which primitive values are currently active.
|
|
49
|
+
|
|
50
|
+
### Component Layer (Scoped Tokens)
|
|
51
|
+
|
|
52
|
+
The component layer scopes semantic tokens to specific component contexts. Component-layer tokens exist because some components need values that differ from their semantic parents in specific states, variants, or sizes — but those differences should still be expressed as token relationships, not hardcoded values.
|
|
53
|
+
|
|
54
|
+
Examples:
|
|
55
|
+
- `--button-bg-primary: var(--color-interactive-default)`
|
|
56
|
+
- `--button-bg-primary-hover: var(--color-interactive-hover)`
|
|
57
|
+
- `--button-radius: var(--radius-md)`
|
|
58
|
+
- `--card-shadow: var(--shadow-sm)`
|
|
59
|
+
|
|
60
|
+
The component layer allows per-component overrides without polluting the semantic layer. It also makes the relationship between a component's visual properties and the broader token system explicit and auditable.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Platform Translation
|
|
65
|
+
|
|
66
|
+
The token architecture is only valuable if it can be consumed by all the platforms where the design system is deployed. Token translation tools convert the source-of-truth token definitions into platform-native formats.
|
|
67
|
+
|
|
68
|
+
**Style Dictionary** is the standard open-source tool for token transformation. It reads a JSON or YAML token definition and transforms it into CSS custom properties, iOS Swift constants, Android XML resources, or any other format through a configurable pipeline. Style Dictionary is the right choice for most organizations because it is well-documented, widely adopted, and extensible. The transform pipeline should be version-controlled alongside the token definitions.
|
|
69
|
+
|
|
70
|
+
**Tokens Studio (Figma plugin)** enables the design-to-code handoff by syncing Figma variables and styles to a JSON format that Style Dictionary can consume. When Tokens Studio is integrated with the CI pipeline — so that token changes in Figma trigger a transform and publish cycle — the design-to-code gap closes. Designers change tokens in Figma; engineers receive the updated CSS variables in the next publish. Without this integration, token values diverge between design and code, which is the root cause of most "the design says one thing but the code does another" defects.
|
|
71
|
+
|
|
72
|
+
**Terrazzo** provides advanced token transform capabilities for organizations with complex multi-platform, multi-brand requirements. It handles cases that Style Dictionary handles awkwardly: mathematically derived scales (e.g., a spacing scale generated from a base value), conditional token resolution (different values for different contexts), and schema validation at the token definition level.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Semantic-Layer Design
|
|
77
|
+
|
|
78
|
+
The semantic layer is the design system's most consequential architectural decision. Naming tokens by value — `--color-red`, `--color-blue-700`, `--font-size-14` — produces a token API that is fragile under theming and misleading to consumers. Naming tokens by purpose produces an API that survives brand evolution, makes component intent explicit, and is safe to search and audit.
|
|
79
|
+
|
|
80
|
+
**The cardinal rule:** Name tokens by PURPOSE, not by VALUE.
|
|
81
|
+
|
|
82
|
+
Wrong: `--color-red` (a value name — breaks if the brand switches to orange for danger)
|
|
83
|
+
Right: `--color-surface-danger` (a purpose name — survives any palette change)
|
|
84
|
+
|
|
85
|
+
Wrong: `--font-size-14` (a value name — breaks if the scale changes)
|
|
86
|
+
Right: `--font-size-caption` (a purpose name — survives a scale adjustment)
|
|
87
|
+
|
|
88
|
+
**Tokens should survive theme changes without rename.** A token that must be renamed every time the palette changes is not a semantic token — it is a named value. The test: if you change the value of `--color-surface-danger` from red to orange, does the name still accurately describe its purpose? If yes, the name is semantic. If no, the name was value-based.
|
|
89
|
+
|
|
90
|
+
**Hierarchical naming:** Semantic tokens should follow a consistent naming convention that expresses category, role, and variant:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
--[category]-[role]-[variant]
|
|
94
|
+
|
|
95
|
+
--color-surface-default
|
|
96
|
+
--color-surface-subtle
|
|
97
|
+
--color-surface-danger
|
|
98
|
+
--color-text-primary
|
|
99
|
+
--color-text-secondary
|
|
100
|
+
--color-text-on-danger
|
|
101
|
+
--shadow-elevation-sm
|
|
102
|
+
--shadow-elevation-md
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
This convention makes the token vocabulary predictable: anyone who knows the convention can guess token names without consulting the documentation.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Component API Conventions
|
|
110
|
+
|
|
111
|
+
Component APIs are the contract between the design system and its consumers. An inconsistent or poorly designed API creates confusion, increases adoption friction, and makes migration painful. These conventions should be enforced in code review and documented in every component's API reference.
|
|
112
|
+
|
|
113
|
+
**The `size` prop:** Always use named sizes — `sm`, `md`, `lg` — never raw pixel values. Pixel values expose implementation details and break the abstraction. Named sizes allow the design system to change the underlying pixel values across a version without requiring component consumers to update their code. `xs` and `xl` are acceptable additions when genuinely needed; avoid open-ended numeric scales that invite inconsistency.
|
|
114
|
+
|
|
115
|
+
**The `variant` prop:** Use a fixed vocabulary: `primary`, `secondary`, `ghost`, `destructive`. Additional variants should be exceptional and documented with rationale. Never create variants that duplicate semantic roles (e.g., `danger` alongside `destructive`) — this fragments the vocabulary and creates consumer confusion about which to use.
|
|
116
|
+
|
|
117
|
+
**Never expose internal implementation details as props.** A component whose API includes `backgroundColor`, `borderRadius`, or `fontWeight` props is not a component — it is a styled div. Internal visual properties should be determined by the component's variant and size, expressed through tokens. If a consumer needs visual customization beyond the declared variants, the appropriate tool is either a new variant (with a contribution RFC) or composition, not an escape hatch prop.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Governance and Contribution Model
|
|
122
|
+
|
|
123
|
+
A design system without governance is a suggestion library. Governance is what transforms a collection of shared components into a system with a consistent, predictable trajectory that teams can plan around.
|
|
124
|
+
|
|
125
|
+
**RFC process for new tokens:** Any new semantic token must go through a Request for Comment process before being added to the system. The RFC must specify the token's name, its value, its purpose, which components will consume it, and whether it can be derived from existing tokens. The RFC process exists because new tokens are permanent: removing them requires a deprecation cycle, and adding unnecessary tokens pollutes the vocabulary.
|
|
126
|
+
|
|
127
|
+
**Voting quorum for breaking changes:** Changes that remove or rename tokens, alter component API signatures, or change default visual behavior require a minimum quorum of token stakeholders (typically design leads and engineering leads from all consuming products) to review and approve. The quorum threshold and voting period should be documented and consistent. This prevents one team's urgency from creating breakage for other teams.
|
|
128
|
+
|
|
129
|
+
**Single-owner per component:** Every component must have a named owner — a person who is responsible for its API, its documentation, its accessibility compliance, and its migration support. Ownerless components decay: they accumulate inconsistencies, miss accessibility regressions, and fall behind the token system evolution. Ownership should transfer explicitly when team members change roles.
|
|
130
|
+
|
|
131
|
+
**Design and engineering sign-off both required:** No component ships without explicit sign-off from both the design lead (verifying that it matches the designed spec and has appropriate variant coverage) and the engineering lead (verifying that the API is correct, the implementation is idiomatic, and the tests cover the declared states). This dual sign-off is not bureaucracy — it is the minimal process that prevents the design-code gap from re-opening on every release.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Documentation Standard
|
|
136
|
+
|
|
137
|
+
A design system component that lacks complete documentation is not ready to ship. "Work in progress" documentation creates more confusion than no documentation at all, because it implies incomplete information without flagging what is missing. Every component must meet the documentation standard before it is published.
|
|
138
|
+
|
|
139
|
+
The documentation standard for every component requires all of the following:
|
|
140
|
+
|
|
141
|
+
**Purpose:** One or two sentences explaining what problem the component solves and when to use it rather than a different component. This is the most important section because it guides correct component selection.
|
|
142
|
+
|
|
143
|
+
**Anatomy:** A labeled diagram or description of every visual element within the component: the container, the label, the icon, the state indicator. Anatomy documentation prevents implementers from modifying internal structure and creating visual inconsistencies.
|
|
144
|
+
|
|
145
|
+
**Variants:** A complete catalog of all `variant` prop values with rendered examples and usage guidance. This section should answer "which variant should I use for X?" explicitly, not by inference.
|
|
146
|
+
|
|
147
|
+
**States:** All interactive and conditional states the component can occupy: default, hover, active, focus, disabled, loading, error. Each state must be documented with a rendered example. Missing state documentation is the primary cause of inconsistent state implementation across consuming applications.
|
|
148
|
+
|
|
149
|
+
**Do/Don't:** Paired examples showing correct and incorrect usage. Do/Don't documentation makes best practices concrete and prevents the most common misuse patterns.
|
|
150
|
+
|
|
151
|
+
**Code example:** A minimal, copy-paste-ready code example for the most common usage. Consumers should be able to get to a correct implementation in under two minutes.
|
|
152
|
+
|
|
153
|
+
**Accessibility notes:** The ARIA role, relevant ARIA attributes, keyboard interaction pattern, and focus management behavior. This section is not optional — every interactive component has accessibility requirements that cannot be inferred from the visual design alone.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Design System Maturity Rubric
|
|
158
|
+
|
|
159
|
+
Design systems evolve through recognizable maturity stages. Understanding where a system currently sits determines what investments are most impactful, and prevents organizations from attempting Level 4 governance without first establishing Level 3 token infrastructure.
|
|
160
|
+
|
|
161
|
+
### Level 0: Ad-Hoc
|
|
162
|
+
Components are built per project with no shared library. Each application makes its own visual decisions about color, typography, and spacing. There is no coordination mechanism, no shared vocabulary, and no reuse. Visual inconsistency across products is structural, not accidental. The cost of this level is paid in designer and engineer time spent rediscovering the same decisions on every project.
|
|
163
|
+
|
|
164
|
+
### Level 1: Shared UI Kit
|
|
165
|
+
A Figma component library exists and is used by designers. Components have documented variants and states in Figma. There is no code counterpart — developers implement from designs directly. The design-to-code gap is the defining problem at this level: the Figma library and the code diverge over time because there is no synchronization mechanism.
|
|
166
|
+
|
|
167
|
+
### Level 2: Component Library
|
|
168
|
+
Coded components exist and are shared across applications as a package. The library has basic documentation. There are no design tokens — visual values are hardcoded in component styles. Theming is not possible without forking the library. The code-to-design gap is still present because Figma and code are not synchronized.
|
|
169
|
+
|
|
170
|
+
### Level 3: Token-Driven
|
|
171
|
+
Design tokens exist in both Figma and code, synchronized through an automated pipeline (Tokens Studio + Style Dictionary). A semantic layer separates component implementations from raw values. Basic theming is possible by swapping the semantic layer. This is the first level where multi-brand support becomes practical. Most organizations that have invested in a design system are at Level 2 or approaching Level 3.
|
|
172
|
+
|
|
173
|
+
### Level 4: Governed
|
|
174
|
+
The system has a documented contribution process, semantic versioning, a deprecation policy, and migration guides. Every component has a named owner and complete documentation meeting the standard described in this file. Design and engineering sign-off is required for all releases. The system is reliable enough that consuming teams plan roadmaps around it rather than working around it.
|
|
175
|
+
|
|
176
|
+
### Level 5: Platform
|
|
177
|
+
The system supports multiple brands, multiple platforms (web, iOS, Android, potentially desktop), and automated quality enforcement. Accessibility compliance is verified in CI (automated contrast checking, ARIA validation). Visual regression testing catches unintended changes before release. Token transforms produce platform-native output. The system is itself a product with a roadmap, a changelog, a support channel, and a measured adoption rate across consuming products.
|