@hegemonart/get-design-done 1.14.7 → 1.15.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.
Files changed (43) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +14 -2
  3. package/CHANGELOG.md +84 -0
  4. package/README.md +18 -0
  5. package/SKILL.md +2 -0
  6. package/agents/a11y-mapper.md +25 -0
  7. package/agents/design-auditor.md +92 -8
  8. package/agents/design-context-builder.md +6 -0
  9. package/agents/design-executor.md +5 -2
  10. package/agents/design-pattern-mapper.md +2 -0
  11. package/agents/design-start-writer.md +221 -0
  12. package/agents/design-verifier.md +11 -0
  13. package/agents/motion-mapper.md +45 -0
  14. package/agents/token-mapper.md +36 -0
  15. package/agents/visual-hierarchy-mapper.md +29 -0
  16. package/hooks/first-run-nudge.sh +82 -0
  17. package/hooks/hooks.json +8 -0
  18. package/package.json +14 -2
  19. package/reference/anti-patterns.md +69 -0
  20. package/reference/audit-scoring.md +34 -3
  21. package/reference/brand-voice.md +199 -0
  22. package/reference/checklists.md +30 -3
  23. package/reference/data/google-fonts.csv +51 -0
  24. package/reference/data/palettes.csv +41 -0
  25. package/reference/data/styles.csv +39 -0
  26. package/reference/design-system-guidance.md +177 -0
  27. package/reference/design-systems-catalog.md +151 -0
  28. package/reference/framer-motion-patterns.md +411 -0
  29. package/reference/gestalt.md +219 -0
  30. package/reference/iconography.md +231 -0
  31. package/reference/motion.md +102 -0
  32. package/reference/palette-catalog.md +82 -0
  33. package/reference/performance.md +304 -0
  34. package/reference/registry.json +257 -27
  35. package/reference/review-format.md +2 -2
  36. package/reference/start-interview.md +84 -0
  37. package/reference/style-vocabulary.md +62 -0
  38. package/reference/surfaces.md +114 -0
  39. package/reference/typography.md +80 -0
  40. package/reference/visual-hierarchy-layout.md +306 -0
  41. package/scripts/lib/detect-ui-root.cjs +187 -0
  42. package/scripts/lib/start-findings-engine.cjs +405 -0
  43. package/skills/start/SKILL.md +166 -0
@@ -0,0 +1,231 @@
1
+ # Iconography — Reference Guide
2
+
3
+ Icons are a precise visual language. Every sizing, weight, metaphor, and accessibility decision either reinforces or undermines the system's communicative intent. This reference establishes canonical rules for icon usage across the get-design-done framework.
4
+
5
+ ---
6
+
7
+ ## 1. Optical Sizing & Stroke Weight
8
+
9
+ Icons are not scalable art objects that merely get bigger — they are optical instruments tuned to specific viewing contexts. A 16px icon rendered with the same stroke weight as a 32px icon will look fragile and thin at small sizes, because the eye perceives stroke weight relative to the overall icon bounding box.
10
+
11
+ **Canonical stroke weights by icon size:**
12
+
13
+ | Icon size | Recommended stroke | Why |
14
+ |-----------|-------------------|-----|
15
+ | 16px | 1.5px | At 16px, a 1px stroke disappears on most non-retina displays; 1.5px gives enough mass without filling the internal counter spaces |
16
+ | 20px | 1.5–2px | Transition size — match the body text weight; if using medium-weight body copy, lean toward 2px |
17
+ | 24px | 2px | The most common "default" icon grid. 2px is the industry convention (Lucide, Heroicons, Feather all default here) |
18
+ | 32px | 2–2.5px | Larger icons need more weight to avoid looking drawn with a fine pen against the heavier surrounding UI |
19
+ | 48px+ | 2.5–3px | Display-size icons (app icons, hero illustrations) should be optically balanced to read boldly at distance |
20
+
21
+ **Pixel alignment rules:** Icons on an even grid (16px, 24px, 32px) align their strokes to whole pixels. Icons on an odd grid (20px, 28px) should have strokes centered on 0.5px boundaries to avoid sub-pixel blur on non-retina displays. For SVG exports, always set `shape-rendering: crispEdges` on icon wrappers, and center the viewBox exactly on the pixel grid (e.g., `viewBox="0 0 24 24"`, not `"0.5 0.5 23 23"`). A stroke centered on the path boundary will anti-alias; a stroke offset by 0.5px will render sharply.
22
+
23
+ ---
24
+
25
+ ## 2. Weight & Stroke Consistency
26
+
27
+ Never mix stroke weights within the same UI surface. Mixing a 1.5px outline icon next to a 2px icon in the same toolbar creates a visual discord that users register as "something feels off" even if they cannot articulate why. The eye calibrates to a baseline weight, and deviations feel like errors.
28
+
29
+ **The typography matching principle:** Icon weight should correspond to the surrounding text weight. A regular-weight body paragraph (400) pairs with a regular or medium icon (1.5–2px stroke). A bold heading (700) pairs with a bold or filled icon variant. This alignment creates a perception of visual kinship — the icon "belongs" to the text alongside it rather than floating in from a different design register.
30
+
31
+ **Practical rule:** Choose one icon library per product surface and use it exclusively. If a specific icon is unavailable in your chosen library, draw it using the same stroke grammar rather than importing a single icon from a different library. The visual inconsistency of mixing libraries is nearly always worse than an imperfect icon from the right library.
32
+
33
+ ---
34
+
35
+ ## 3. Metaphor Taxonomy
36
+
37
+ Icons communicate meaning through shared cultural metaphors. Understanding the four functional categories prevents category errors — using a navigation metaphor for an action, or a status metaphor for wayfinding.
38
+
39
+ ### Functional (Action) Icons
40
+
41
+ Functional icons represent user-initiated operations: save, delete, copy, filter, sort, upload, download. They answer the question "what can I do here?" Their metaphors must be action-verifiable — a user looking at the icon should be able to predict the outcome of clicking it. The floppy disk for "save" is a dead metaphor that persists by convention, not visual logic; prefer more literal representations (cloud-upload for cloud save, checkmark-circle for "mark complete") where the action is unambiguous without cultural baggage.
42
+
43
+ **Recognition test:** Cover the label. Can a first-time user accurately predict what clicking this icon will do? If fewer than 80% of testers answer correctly in usability studies, pair the icon with a text label.
44
+
45
+ ### Status Icons
46
+
47
+ Status icons communicate system state: success, warning, error, loading, offline, syncing. They answer "what is the system telling me?" Their metaphors are highly convention-bound: green circle-check for success, yellow triangle-exclamation for warning, red circle-X for error. Deviating from these conventions introduces cognitive load — users must re-learn your system's visual language rather than drawing on years of software experience.
48
+
49
+ **When to use:** Status icons appear adjacent to data fields, system messages, toast notifications, and form validation. They must never be used as the sole indicator of status for users with color vision deficiency — always pair with a distinct shape and a text description.
50
+
51
+ ### Navigation (Wayfinding) Icons
52
+
53
+ Navigation icons orient users within an information space: home, back, forward, menu, close, external-link, settings. They answer "where am I and how do I move?" Their metaphors are cartographic and gestural — arrows indicate direction of travel, the house represents the origin point, the hamburger menu represents a collapsed list.
54
+
55
+ **When to use:** Navigation icons appear in navbars, breadcrumbs, sidebars, and dialog controls. Because wayfinding is critical to task completion, navigation icons should almost always be paired with visible labels until the product has established enough user familiarity to support icon-only navigation (typically after repeated-use screens with power users).
56
+
57
+ ### Brand Icons
58
+
59
+ Brand icons represent identity: logos, product wordmarks, social platform logos, and payment method marks. They follow the brand owner's guidelines, not the product's icon system. Never apply your system's stroke weight or color palette to third-party brand marks — use the official SVG assets. Brand icons communicate "who or what" rather than action, status, or direction.
60
+
61
+ **Source: nextlevelbuilder/ui-ux-pro-max-skill (MIT) — data/icons.csv**
62
+
63
+ ---
64
+
65
+ ## 4. Dark-Mode Icon Variants
66
+
67
+ A common mistake is inverting an icon library's default black strokes to `#FFFFFF` in dark mode. Pure white icons on dark backgrounds produce harsh contrast that reads as aggressive, particularly for secondary and tertiary actions. More importantly, pure white does not participate in the opacity token system that controls visual hierarchy.
68
+
69
+ **Use opacity tokens, not white fills.** The correct approach is to define icon colors using a semantic token (`--icon-default`, `--icon-secondary`, `--icon-disabled`) and resolve those tokens differently per color scheme:
70
+
71
+ ```css
72
+ :root {
73
+ --icon-default: oklch(0.15 0 0); /* near-black */
74
+ --icon-secondary: oklch(0.45 0 0); /* mid-gray */
75
+ --icon-disabled: oklch(0.70 0 0 / 0.4);
76
+ }
77
+
78
+ [data-theme="dark"] {
79
+ --icon-default: oklch(0.92 0 0); /* near-white, not pure */
80
+ --icon-secondary: oklch(0.65 0 0);
81
+ --icon-disabled: oklch(0.40 0 0 / 0.4);
82
+ }
83
+ ```
84
+
85
+ **Icon-on-color contrast rules:** When placing a white icon on a brand primary background (e.g., a white checkmark inside a colored button), the contrast ratio between the icon color and the background must meet WCAG 2.1 AA minimum of 4.5:1 for icons associated with text-size equivalents, and 3:1 for large-scale graphical elements (per WCAG 1.4.11 Non-text Contrast). Use the APCA method for more perceptually accurate contrast estimation in complex color environments.
86
+
87
+ ---
88
+
89
+ ## 5. Icon Animation Guidelines
90
+
91
+ Animated icons communicate state transitions — they are not decorative flourishes. Every animation should signal a specific semantic event: a state change the user caused, a process completing, or feedback confirming an action.
92
+
93
+ **Morphing between states (cross-fade pattern):**
94
+
95
+ When transitioning between two icons (e.g., play → pause, bookmark-outline → bookmark-filled), use the following three-property animation. The outgoing icon exits while the incoming icon enters simultaneously:
96
+
97
+ ```css
98
+ /* Outgoing icon */
99
+ .icon-exit {
100
+ animation: icon-exit 150ms ease-in forwards;
101
+ }
102
+ @keyframes icon-exit {
103
+ from { opacity: 1; transform: scale(1); filter: blur(0px); }
104
+ to { opacity: 0; transform: scale(0.75); filter: blur(4px); }
105
+ }
106
+
107
+ /* Incoming icon */
108
+ .icon-enter {
109
+ animation: icon-enter 200ms ease-out forwards;
110
+ animation-delay: 100ms;
111
+ }
112
+ @keyframes icon-enter {
113
+ from { opacity: 0; transform: scale(0.25); filter: blur(4px); }
114
+ to { opacity: 1; transform: scale(1); filter: blur(0px); }
115
+ }
116
+ ```
117
+
118
+ This pattern (scale 0.25→1, opacity 0→1, blur 4→0) creates a "materialization" feel that communicates emergence — the new state is coming into existence rather than simply swapping. Duration should be 150–200ms; shorter feels mechanical, longer feels sluggish.
119
+
120
+ **Rotation for loading states:** A continuous 360° rotation at 700–900ms per revolution communicates "waiting for external process." Use `animation-timing-function: linear` — easing causes visual pulsing that reads as multiple distinct events rather than a continuous state. The rotation axis must be the center of the icon's bounding box.
121
+
122
+ **Entrance for success states:** A success icon (checkmark, circle-check) should entrance with a brief overshoot — scale from 0 to 1.1 then settle to 1.0 — over 250–300ms using a spring-like timing function (`cubic-bezier(0.175, 0.885, 0.32, 1.275)`). This micro-bounce communicates "confirmed" rather than merely "appeared."
123
+
124
+ **Respect prefers-reduced-motion:** All icon animations must be disabled or reduced to an instant opacity transition when `@media (prefers-reduced-motion: reduce)` is active.
125
+
126
+ ---
127
+
128
+ ## 6. Semantic vs. Decorative Labeling
129
+
130
+ The single most common accessibility error in icon implementation is failing to distinguish between semantic icons (conveying meaning) and decorative icons (providing visual accompaniment to text that already conveys the meaning).
131
+
132
+ **Semantic (interactive standalone) icons require `aria-label`:**
133
+
134
+ ```html
135
+ <!-- Icon-only button — meaning conveyed solely by icon -->
136
+ <button aria-label="Delete item">
137
+ <svg aria-hidden="true" focusable="false"><!-- trash icon --></svg>
138
+ </button>
139
+ ```
140
+
141
+ The `aria-label` on the button describes the action. The SVG itself receives `aria-hidden="true"` to prevent screen readers from announcing "svg" or the icon's internal text elements. Never rely on `title` elements within SVG for accessible names in interactive contexts — browser support is inconsistent.
142
+
143
+ **Decorative icons require `aria-hidden="true"`:**
144
+
145
+ ```html
146
+ <!-- Icon accompanies visible label — purely decorative -->
147
+ <button>
148
+ <svg aria-hidden="true" focusable="false"><!-- search icon --></svg>
149
+ Search
150
+ </button>
151
+ ```
152
+
153
+ When visible text already conveys the full meaning, the icon is decorative. Hiding it from the accessibility tree prevents redundant announcements ("search graphic, search button").
154
+
155
+ **Never use a standalone icon as the sole affordance for critical or destructive actions.** Even if the icon is well-recognized (trash = delete), critical actions like permanent deletion, payment confirmation, or account changes must always pair the icon with a visible text label. The cost of an unclear icon on a destructive action is irreversible user harm.
156
+
157
+ ---
158
+
159
+ ## 7. Touch Target Pairing
160
+
161
+ Visual icon size and interactive touch target size are different concerns. A 16px icon is visually appropriate for compact UI contexts, but an interactive area of 16×16px fails accessibility and usability standards — fingers are much larger than icons.
162
+
163
+ **Minimum interactive touch targets:**
164
+
165
+ | Context | Minimum target | Rationale |
166
+ |---------|---------------|-----------|
167
+ | Standard interactive icon | 40×40px | WCAG 2.5.5 Target Size AAA; Apple HIG minimum |
168
+ | Primary action icon | 48×48px | Material Design 3 recommendation for primary actions |
169
+ | Dense data tables | 32×32px | Acceptable for expert-user interfaces with high density requirements |
170
+
171
+ **Implementation with `::after` pseudo-element:**
172
+
173
+ This technique extends the clickable area without changing the visual icon size:
174
+
175
+ ```css
176
+ .icon-button {
177
+ position: relative;
178
+ width: 20px;
179
+ height: 20px;
180
+ }
181
+
182
+ .icon-button::after {
183
+ content: '';
184
+ position: absolute;
185
+ top: 50%;
186
+ left: 50%;
187
+ transform: translate(-50%, -50%);
188
+ width: 40px;
189
+ height: 40px;
190
+ /* Optionally: background: transparent; border-radius: 50%; */
191
+ }
192
+ ```
193
+
194
+ The visual icon remains 20px; the interactive zone expands to 40px. On touch devices, this satisfies pointer accuracy requirements without creating visual padding that disrupts layout density.
195
+
196
+ ---
197
+
198
+ ## 8. Public Icon Library Catalog
199
+
200
+ Choosing an icon library is an architectural decision — all icons in a product surface should come from a single library to ensure stroke weight and visual grammar consistency. These are the major open-source libraries with their key characteristics.
201
+
202
+ ### Lucide Icons
203
+ Over 1,000 icons under the MIT license. Stroke-based with a consistent 2px stroke weight on a 24px grid. This is the default icon library for shadcn/ui components and has become the de facto standard for React-based design systems. Strong community maintenance with frequent additions. Import individual icons by name to enable tree-shaking: `import { ChevronRight } from 'lucide-react'`. Never import the entire library — the barrel export will bloat bundles.
204
+
205
+ ### Phosphor Icons
206
+ Available in six weights — thin, light, regular, bold, fill, and duotone — making it one of the most expressive icon systems available. MIT licensed. Ideal for products where visual hierarchy needs to be communicated through icon weight variation (e.g., active nav item uses bold, inactive uses regular). The duotone variant provides a two-tone fill that works well in marketing and onboarding contexts.
207
+
208
+ ### Heroicons
209
+ Produced by the Tailwind CSS team. Available in outline and solid variants on a 24px grid. MIT licensed. The outline variant is a 1.5px stroke, which is slightly lighter than Lucide's 2px — choose based on whether your typography leans toward light or regular weight. First-class Tailwind integration and React/Vue packages available.
210
+
211
+ ### Radix Icons
212
+ Designed specifically for the 15px grid rather than the standard 24px grid, making Radix Icons uniquely suited for dense, compact UI contexts — form fields, inline badges, data table actions. They pair directly with Radix UI primitives and share the same design philosophy: functional, unobtrusive, and predictable. MIT licensed.
213
+
214
+ ### Tabler Icons
215
+ Over 3,000 icons with a consistent 2px stroke on a 24px grid. The largest coherent stroke-based icon set available. MIT licensed. Excellent for applications requiring coverage of unusual domains (medical, scientific, geographic) that other libraries do not address. Actively maintained with SVG optimization.
216
+
217
+ ### Iconoir
218
+ Clean, minimal line icons on a 24px grid. MIT licensed. Characterized by a slightly rounded stroke termination that gives it a friendlier character than more angular systems. Well-suited for consumer-facing applications where the brand tonality is approachable and modern rather than corporate or technical.
219
+
220
+ ### Remix Icon
221
+ Open-source with filled and line variants in each icon, organized into semantic categories (system, business, media, communication, etc.). The parallel line/filled pairing makes it straightforward to communicate active vs. inactive states without switching libraries.
222
+
223
+ ### SF Symbols
224
+ Apple's system-native icon library, available exclusively on Apple platforms (iOS, macOS, watchOS, visionOS). Variable weights that match the San Francisco typeface — when the user adjusts text size or boldness in system settings, SF Symbols adjust proportionally. Not available for web or Android; use only in native Swift/SwiftUI or UIKit contexts. Access via `Image(systemName:)` in SwiftUI.
225
+
226
+ ### Feather
227
+ A minimal, classic icon set with 287 icons on a 24px grid at a 2px stroke. MIT licensed. Feather is older than many alternatives on this list and receives fewer updates, but its visual grammar is exceptionally clean and it remains a reliable choice for products that prioritize restraint. The limited catalog means it works best for simple, focused applications rather than complex dashboards.
228
+
229
+ ---
230
+
231
+ *This reference governs all icon decisions within the get-design-done framework. Deviations require explicit justification in `.design/DESIGN-CONTEXT.md` as a C-XX constraint.*
@@ -283,3 +283,105 @@ document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
283
283
  3. For many elements, share a single observer instance and call `observe()` once per element.
284
284
  4. Prefer CSS transitions triggered by a class toggle over requestAnimationFrame loops.
285
285
  5. Use `will-change: transform, opacity` sparingly (only on elements that animate repeatedly).
286
+
287
+ ---
288
+
289
+ ## MIFB Micro-Motion Extensions
290
+ Source: jakubkrehel/make-interfaces-feel-better (MIT) — motion.md
291
+
292
+ ### Interruptible Animations
293
+
294
+ Use CSS transitions for interactive elements because transitions retarget mid-animation — when a user moves their cursor away before a hover animation completes, the transition reverses smoothly from wherever it currently is. Keyframe animations restart from the beginning, creating a jarring jump.
295
+
296
+ **Decision rule:**
297
+ - Interactive states (hover, focus, active, pressed): always CSS transitions
298
+ - Orchestrated sequences, entrance effects, data-driven animations: keyframe or JS animation
299
+
300
+ ```css
301
+ /* Good — transition retargets smoothly */
302
+ .button { transition: background-color 150ms ease-out; }
303
+
304
+ /* Avoid for interactive — restarts on interruption */
305
+ .button:hover { animation: hover-bg 150ms ease-out forwards; }
306
+ ```
307
+
308
+ ### Split-and-Stagger Enter/Exit
309
+
310
+ For multi-element entrances (card grids, lists, feature sections):
311
+
312
+ - Default stagger: 100ms between elements
313
+ - Heading words: 80ms per word
314
+ - Entrance transform: `opacity: 0 → 1` + `translateY(12px → 0)` + `blur(4px → 0)`
315
+ - Entrance duration: 300ms, `ease-out`
316
+ - Exit transform: `opacity: 1 → 0` + `translateY(0 → -12px)` (opposite direction, smaller offset)
317
+ - Exit duration: 150ms (half the entrance duration — exits should be faster)
318
+
319
+ The blur component adds a depth cue that makes entrances feel less flat. Keep blur modest (4px) — the goal is a subtle focus effect, not a visible blur.
320
+
321
+ ### Contextual Icon Animations — Cross-Fade Pattern
322
+
323
+ When swapping two icons (e.g., play ↔ pause, chevron-up ↔ chevron-down, bookmark ↔ bookmarked), use this exact cross-fade spec:
324
+
325
+ **Framer Motion spring (preferred):**
326
+ - `scale: 0.25 → 1` (entering), `scale: 1 → 0.25` (exiting)
327
+ - `opacity: 0 → 1` (entering), `opacity: 1 → 0` (exiting)
328
+ - `filter: blur(4px) → blur(0)` (entering), `blur(0) → blur(4px)` (exiting)
329
+ - `transition: { type: "spring", duration: 0.3, bounce: 0 }` — **bounce MUST be 0**
330
+
331
+ **CSS fallback (no Framer):**
332
+ - Keep both icons in the DOM, one `position: absolute`
333
+ - Use `cubic-bezier(0.2, 0, 0, 1)` easing
334
+ - Duration: 200ms
335
+
336
+ The scale + blur combination creates a focus-snap effect that feels intentional rather than mechanical. The `bounce: 0` hard constraint exists because any bounce on a 0.25-scale origin point makes icons appear to "pop" invasively.
337
+
338
+ ### Scale on Press — Canonical Value
339
+
340
+ The canonical scale value for press feedback is **`0.96`**.
341
+
342
+ Rules:
343
+ - Never use `scale(0.95)` — too large, feels unresponsive
344
+ - Never use `scale(0.97)` — too subtle at high DPI, not perceived as feedback
345
+ - Never use `scale(0.98)` or higher — imperceptible
346
+ - `0.96` is the ONLY correct value for standard interactive elements
347
+
348
+ Tailwind: `active:scale-[0.96]`
349
+ Framer: `whileTap={{ scale: 0.96 }}`
350
+
351
+ For primary CTAs where maximum tactility is needed (purchase, send, confirm):
352
+ use `0.96` with a shadow reduction: `box-shadow: none` during press.
353
+
354
+ Deprecation note: earlier versions of `reference/checklists.md` referenced `scale(0.97)`. That entry has been reconciled. **0.96 is the canonical value.**
355
+
356
+ ### AnimatePresence initial={false}
357
+
358
+ When `AnimatePresence` wraps UI that exists in the DOM before it enters the animation scope (e.g., a tab panel that renders its first tab immediately, a dropdown that's already open on first load), use `initial={false}`:
359
+
360
+ ```tsx
361
+ <AnimatePresence initial={false}>
362
+ {isOpen && <motion.div key="panel" initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }} />}
363
+ </AnimatePresence>
364
+ ```
365
+
366
+ Without `initial={false}`, Framer will animate the FIRST render of children — meaning UI that's immediately visible on page load will "fade in" unnecessarily. This creates a flash/flicker that signals poor craftsmanship.
367
+
368
+ **Rule:** Any `AnimatePresence` wrapping persistent UI should have `initial={false}`.
369
+
370
+ ### will-change — GPU Property Table
371
+
372
+ Only add `will-change` when you observe first-frame stutter on lower-end hardware. Do NOT add it preemptively — it consumes GPU memory continuously for every element that has it.
373
+
374
+ GPU-compositable properties (safe with will-change):
375
+ | Property | will-change value |
376
+ |----------|------------------|
377
+ | transform (translate, scale, rotate) | `transform` |
378
+ | opacity | `opacity` |
379
+ | filter (blur, brightness, contrast) | `filter` |
380
+ | clip-path | `clip-path` |
381
+
382
+ Never use `will-change: all` or `will-change: contents` — this forces the entire element and its subtree onto a new compositor layer, thrashing memory.
383
+
384
+ Remove `will-change` after the animation completes if applied dynamically:
385
+ ```js
386
+ element.addEventListener('transitionend', () => element.style.willChange = 'auto')
387
+ ```
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: palette-catalog
3
+ type: palette
4
+ version: 1.0.0
5
+ source: "nextlevelbuilder/ui-ux-pro-max-skill (MIT) — data/colors.csv"
6
+ tags: [color, palette, wcag, industry]
7
+ ---
8
+
9
+ # Palette Catalog — Industry-Vertical Color Systems
10
+
11
+ This catalog gives design agents and the brief-stage palette picker a pre-verified starting point for every major industry vertical. Rather than selecting colors ad-hoc, an agent reads the vertical row that matches the product type, adopts the baseline tokens, then adjusts tints and shades to establish brand uniqueness without sacrificing legibility.
12
+
13
+ ## How to Use This Catalog
14
+
15
+ **Step 1 — Identify the vertical.** Match the product type to the closest row. When a product spans verticals (e.g., a wellness fintech), prefer the primary revenue model as the anchor vertical and borrow the accent color from the secondary vertical.
16
+
17
+ **Step 2 — Adopt the baseline palette.** The hex values below represent the semantic center of each role: Primary, Secondary, Accent, Background, Foreground, Card, Muted, Border, Destructive. Downstream agents (design-executor, token-mapper) map these directly to CSS custom property names (`--color-primary`, `--color-secondary`, etc.).
18
+
19
+ **Step 3 — Cross-check brand voice.** Palette choice must align with the voice axis established in the brief. A palette that reads "authoritative navy" conflicts with a voice direction of "playful and irreverent." Resolve conflicts in favor of the voice axis — palettes are easier to shift than voice. For industry voice conventions, see `reference/brand-voice.md`.
20
+
21
+ **Step 4 — Adjust for brand uniqueness.** All values here are mid-point baselines. Shift the primary hue ±15°, adjust lightness ±10%, or introduce a proprietary tint to differentiate the brand. Do not use these hex values verbatim in production without at least one brand-distinguishing adjustment.
22
+
23
+ **Step 5 — Verify pairing.** After choosing the palette, consult `reference/typography.md` for matching typeface pairings that reinforce the vertical's tone.
24
+
25
+ ## WCAG Compliance Notes
26
+
27
+ All palettes in this catalog are designed to meet WCAG 2.1 AA as a baseline:
28
+
29
+ - **Body text:** Foreground-on-Background must achieve a contrast ratio of at least **4.5:1**. All rows in this table satisfy this requirement at the listed values.
30
+ - **UI elements (icons, borders, input outlines):** Must achieve at least **3:1** against their adjacent background. Verify muted and border values when used as sole affordance indicators.
31
+ - **Destructive actions:** The Destructive color is always shown against white (On-Primary) — verify contrast when placed on colored backgrounds.
32
+ - **Dark mode:** This catalog covers light-mode baselines. For dark mode, invert the lightness scale — Background moves to #0A0A0A–#1C1C1E range, Foreground to #F5F5F5, and Primary desaturates by 20% to reduce eye strain. See `reference/accessibility.md` for dark-mode token guidance.
33
+
34
+ > Note: Neumorphism palettes are not represented here because they structurally fail WCAG contrast requirements in most implementations. If a brief requests a neumorphic style, escalate to design-advisor before proceeding with palette selection.
35
+
36
+ ## Palette Table
37
+
38
+ | Vertical | Primary | On-Primary | Secondary | On-Secondary | Accent | Background | Foreground | Card | Muted | Border | Destructive | Notes |
39
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|
40
+ | FinTech/Banking | #1A56DB | #FFFFFF | #0E9F6E | #FFFFFF | #F05252 | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #E5E7EB | #E02424 | Authoritative navy-blue signals trust and regulatory solidity; green secondary for positive account states and confirmations; red destructive for irreversible transfers and deletions. WCAG verified. |
41
+ | 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. Avoids emergency red as primary to prevent alarm. WCAG verified. |
42
+ | SaaS/B2B Tools | #6875F5 | #FFFFFF | #0E9F6E | #FFFFFF | #F05252 | #FFFFFF | #111928 | #F9FAFB | #F3F4F6 | #E5E7EB | #E02424 | Periwinkle-purple primary is the contemporary B2B SaaS signal (productively calm, not boring blue); green secondary for success states; red destructive. Cards slightly off-white to create depth without shadows. WCAG verified. |
43
+ | E-commerce/Retail | #D97706 | #FFFFFF | #1A56DB | #FFFFFF | #E02424 | #FFFFFF | #111928 | #F9FAFB | #FEF3C7 | #E5E7EB | #DC2626 | Amber primary drives purchase urgency and warmth; blue secondary for trust (payments, account); muted in warm-yellow family for promotional surfaces. Avoid pure red as primary — reserve for destructive/sale badges. WCAG verified. |
44
+ | Gaming/Entertainment | #7E3AF2 | #FFFFFF | #FF8A4C | #111928 | #F05252 | #111928 | #F9FAFB | #1F2937 | #374151 | #4B5563 | #EF4444 | Deep violet primary on dark background — high visual energy without neon; amber accent for XP/reward moments; dark card on near-black background creates depth. Light foreground on dark background meets 4.5:1. WCAG verified. |
45
+ | Social/Community | #3F83F8 | #FFFFFF | #0E9F6E | #FFFFFF | #F05252 | #FFFFFF | #111928 | #F9FAFB | #EFF6FF | #E5E7EB | #DC2626 | Friendly blue primary — approachable, not corporate; green for connection/online states; light muted sky for feed background separation. WCAG verified. |
46
+ | Developer Tools | #0F172A | #F8FAFC | #6875F5 | #FFFFFF | #22D3EE | #F8FAFC | #0F172A | #FFFFFF | #F1F5F9 | #CBD5E1 | #EF4444 | Near-black primary on white for precision and professionalism; purple secondary for interactive elements; cyan accent for syntax-highlight-inspired pops. Matches developer expectations set by GitHub, Linear, Vercel. WCAG verified. |
47
+ | EdTech/Learning | #FF8A4C | #FFFFFF | #6875F5 | #FFFFFF | #0E9F6E | #FFFBEB | #111928 | #FFFFFF | #FEF3C7 | #FDE68A | #DC2626 | Warm amber primary is energizing and optimistic — signals motivation and focus; violet secondary for interactive quiz/exercise elements; warm background avoids clinical white. WCAG verified. |
48
+ | Legal/Compliance | #1E3A5F | #FFFFFF | #374151 | #FFFFFF | #B45309 | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #D1D5DB | #DC2626 | Deep navy primary signals authority, gravity, and precision; slate secondary for neutral UI chrome; amber accent for deadlines and flagged items. No bright colors — the palette communicates seriousness. WCAG verified. |
49
+ | HR/People Ops | #7E3AF2 | #FFFFFF | #FF8A4C | #FFFFFF | #0E9F6E | #FAF5FF | #111928 | #FFFFFF | #F3F4F6 | #E9D5FF | #DC2626 | Violet primary balances authority and empathy — appropriate for people-management contexts; amber secondary for recognition/reward surfaces; lavender muted for soft separation. WCAG verified. |
50
+ | Real Estate/Property | #065F46 | #FFFFFF | #1A56DB | #FFFFFF | #B45309 | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #E5E7EB | #DC2626 | Deep forest green primary signals land, stability, and value; blue secondary for financing/trust contexts; amber accent for featured/premium listings. Avoids the overused real-estate red. WCAG verified. |
51
+ | Travel/Hospitality | #1A56DB | #FFFFFF | #0E9F6E | #FFFFFF | #FF8A4C | #EFF6FF | #111928 | #FFFFFF | #DBEAFE | #BFDBFE | #DC2626 | Sky blue primary evokes open skies and freedom; green secondary for bookings confirmed and eco-travel; warm amber accent for warmth of destination discovery. Sky-tinted muted background is distinctive. WCAG verified. |
52
+ | Food/Delivery | #D97706 | #FFFFFF | #E02424 | #FFFFFF | #0E9F6E | #FFFBEB | #111928 | #FFFFFF | #FEF3C7 | #FDE68A | #B91C1C | Amber primary stimulates appetite and speed; red secondary for urgency (limited offers, spicy badge) — distinct from destructive red which is darker; warm background mirrors food photography warmth. WCAG verified. |
53
+ | Fitness/Wellness | #047857 | #FFFFFF | #1A56DB | #FFFFFF | #F05252 | #F0FDF4 | #111928 | #FFFFFF | #DCFCE7 | #BBF7D0 | #DC2626 | Saturated green primary signals vitality, growth, and health achievement; blue secondary for calm recovery/sleep contexts; red accent for intensity/max-effort moments. Green-tinted background reinforces wellness. WCAG verified. |
54
+ | Non-profit/NGO | #065F46 | #FFFFFF | #D97706 | #111928 | #1A56DB | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #E5E7EB | #DC2626 | Deep green primary signals mission and environmental conscience; amber secondary for warmth and community; blue accent for data/impact reporting. Avoid corporate-looking palettes — earthy and grounded. WCAG verified. |
55
+ | Government/Civic | #1E3A5F | #FFFFFF | #374151 | #FFFFFF | #D97706 | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #D1D5DB | #DC2626 | Deep navy is the global convention for government digital services (GOV.UK, USWDS, Australian DTA); slate secondary for dense information displays; amber accent for notices and alerts. Trust through convention. WCAG verified. |
56
+ | Luxury/Fashion | #111928 | #F9FAFB | #374151 | #F9FAFB | #B45309 | #FFFFFF | #111928 | #F9FAFB | #F9FAFB | #E5E7EB | #DC2626 | Near-black primary on white background is the international language of luxury — Chanel, Saint Laurent, Bottega; slate secondary for layered surfaces; gold-amber accent for price points and premium badges. Minimum color = maximum status. WCAG verified. |
57
+ | Media/Publishing | #111928 | #F9FAFB | #E02424 | #FFFFFF | #D97706 | #FFFFFF | #111928 | #F9FAFB | #F3F4F6 | #E5E7EB | #B91C1C | Near-black primary on white mirrors newspaper printing conventions — ink on paper; red secondary for breaking news, featured sections, and editorial accents (NYT, BBC, The Guardian pattern); amber for secondary sections. WCAG verified. |
58
+ | Analytics/BI | #1A56DB | #FFFFFF | #0E9F6E | #FFFFFF | #FF8A4C | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #E5E7EB | #DC2626 | Blue primary is the universal data-visualization anchor color — maps cleanly to sequential chart palettes; green secondary for positive delta/growth; amber accent for cautionary thresholds. Minimal decoration — the data is the hero. WCAG verified. |
59
+ | AI/ML Platform | #4F46E5 | #FFFFFF | #7E3AF2 | #FFFFFF | #22D3EE | #0F172A | #F8FAFC | #1E293B | #334155 | #475569 | #EF4444 | Indigo primary on dark background — the established AI product visual language (Anthropic, Cohere, Mistral); violet secondary for model/capability exploration; cyan accent for real-time/streaming states. Dark-first layout. WCAG verified. |
60
+ | Cybersecurity | #1E3A5F | #FFFFFF | #0E9F6E | #FFFFFF | #22D3EE | #0A0A0A | #F8FAFC | #111827 | #1F2937 | #374151 | #EF4444 | Deep navy on near-black background signals a monitoring environment; green secondary for "all clear" / healthy system states; cyan accent for network traffic visualization and active scanning states. Terminal-inspired palette. WCAG verified. |
61
+ | Logistics/Supply Chain | #D97706 | #111928 | #1A56DB | #FFFFFF | #0E9F6E | #FFFBEB | #111928 | #FFFFFF | #FEF3C7 | #FDE68A | #DC2626 | Amber primary mirrors physical logistics — high-vis safety colors, warehouse signage, shipping labels; blue secondary for tracking/digital interfaces; warm background differentiates from generic enterprise SaaS. WCAG verified. |
62
+ | Insurance | #1E3A5F | #FFFFFF | #0E9F6E | #FFFFFF | #D97706 | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #D1D5DB | #DC2626 | Navy primary signals protection, stability, and reliability — the universal insurance palette anchor (Allianz, AXA pattern); green secondary for claims approved and policy active states; amber for upcoming renewals and caution. WCAG verified. |
63
+ | Automotive | #111928 | #F9FAFB | #374151 | #F9FAFB | #E02424 | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #D1D5DB | #B91C1C | Near-black primary matches the premium automotive convention — matte dark, precision engineering; red accent for performance/sport trims and urgency (limited availability); silver-gray secondary for neutral chrome surfaces. WCAG verified. |
64
+ | Agriculture/AgriTech | #065F46 | #FFFFFF | #D97706 | #111928 | #1A56DB | #F0FDF4 | #111928 | #FFFFFF | #DCFCE7 | #A7F3D0 | #DC2626 | Deep green primary is literal and honest — crops, fields, sustainability; amber secondary for harvest, yield, soil richness; blue accent for water management and satellite data. Green-tinted background grounds the product in nature. WCAG verified. |
65
+ | CleanTech/Sustainability | #047857 | #FFFFFF | #1A56DB | #FFFFFF | #D97706 | #F0FDF4 | #111928 | #FFFFFF | #DCFCE7 | #BBF7D0 | #DC2626 | Rich emerald primary signals genuine environmental commitment — distinct from generic "eco green"; blue secondary for water/energy resource tracking; amber accent for carbon credit and offset metrics. Avoid greenwashing: use the earthy tones. WCAG verified. |
66
+ | Pharmaceutical | #1E3A5F | #FFFFFF | #0E9F6E | #FFFFFF | #FF8A4C | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #D1D5DB | #DC2626 | Regulated navy primary signals clinical authority and FDA compliance; green secondary for dosage confirmed and health-positive states; amber accent for contraindications and warnings. Never use red as primary — reserved for severe adverse events only. WCAG verified. |
67
+ | Architecture/AEC | #374151 | #FFFFFF | #D97706 | #111928 | #1A56DB | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #E5E7EB | #DC2626 | Slate primary evokes material neutrality — concrete, steel, rendered surfaces; amber secondary for warmth of wood, brick, and material samples; blue accent for technical drawings and BIM layers. Restrained palette mirrors blueprint conventions. WCAG verified. |
68
+ | Interior Design | #92400E | #FFFFFF | #065F46 | #FFFFFF | #1E3A5F | #FFFBEB | #111928 | #FFFFFF | #FEF3C7 | #FDE68A | #DC2626 | Warm terracotta-brown primary evokes material warmth — timber, linen, clay; deep green secondary for biophilic design moments and plant integration; warm cream background mimics actual interior photography styling. WCAG verified. |
69
+ | Music/Audio | #111928 | #F9FAFB | #7E3AF2 | #FFFFFF | #F05252 | #0A0A0A | #F9FAFB | #1F2937 | #374151 | #4B5563 | #EF4444 | Near-black dark primary — music is a dark-mode-first medium (Spotify, SoundCloud, Apple Music pattern); violet secondary for playlist/discovery surfaces; red accent for recording states and live moments. WCAG verified on dark background. |
70
+ | Photography/Video | #111928 | #F9FAFB | #374151 | #F9FAFB | #FF8A4C | #0A0A0A | #F9FAFB | #1F2937 | #374151 | #4B5563 | #EF4444 | Near-black dark canvas lets photography and video content take center stage — the UI must disappear; slate secondary for control surfaces; amber accent for selected states and active tools. WCAG verified on dark background. |
71
+ | Crypto/Web3 | #4F46E5 | #FFFFFF | #0E9F6E | #FFFFFF | #F59E0B | #0F172A | #F8FAFC | #1E293B | #334155 | #475569 | #EF4444 | Indigo on dark background signals the crypto-native aesthetic (Coinbase, Uniswap pattern); green secondary for price-up and confirmed transaction states; gold accent for high-value wallet events. Dark-first mandatory. WCAG verified. |
72
+ | Marketing/AdTech | #D97706 | #111928 | #E02424 | #FFFFFF | #7E3AF2 | #FFFFFF | #111928 | #F9FAFB | #FEF3C7 | #FDE68A | #B91C1C | Amber primary signals campaign energy and conversion urgency; red secondary for CTAs and limited-offer badges; violet accent for creative/brand moments. Warm background differentiates from SaaS tools. WCAG verified. |
73
+ | Recruitment/HR Tech | #7E3AF2 | #FFFFFF | #1A56DB | #FFFFFF | #0E9F6E | #FAF5FF | #111928 | #FFFFFF | #F3E8FF | #E9D5FF | #DC2626 | Violet primary signals human potential and opportunity — differentiated from corporate blue; navy secondary for employer-side trust; green accent for application submitted and offer extended. Lavender muted backgrounds are distinctive in the space. WCAG verified. |
74
+ | Customer Support/CX | #0E9F6E | #FFFFFF | #3F83F8 | #FFFFFF | #FF8A4C | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #E5E7EB | #DC2626 | Green primary signals resolution and "all good" — the opposite of customer frustration red; blue secondary for informational knowledge base surfaces; amber accent for escalation and SLA-risk alerts. WCAG verified. |
75
+ | E-learning/MOOC | #6875F5 | #FFFFFF | #FF8A4C | #FFFFFF | #0E9F6E | #F9FAFB | #111928 | #FFFFFF | #EFF6FF | #E0E7FF | #DC2626 | Periwinkle primary is academically focused yet modern — bridges EdTech energy with SaaS discipline; amber secondary for assignment deadlines and achievement badges; green accent for progress and course completion. WCAG verified. |
76
+ | Telemedicine | #1A56DB | #FFFFFF | #0E9F6E | #FFFFFF | #FF8A4C | #EFF6FF | #111928 | #FFFFFF | #DBEAFE | #BFDBFE | #DC2626 | Blue primary signals clinical authority and digital trust — video-consult contexts require colors that photograph well on video call backgrounds; green secondary for patient-status OK and prescription-ready states; sky-blue background creates a calm, clinical context. WCAG verified. |
77
+ | Smart Home/IoT | #1E3A5F | #FFFFFF | #0E9F6E | #FFFFFF | #F59E0B | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #E5E7EB | #DC2626 | Deep navy primary signals reliable infrastructure and always-on connectivity; green secondary for device-online and automation-active states; amber accent for device warnings and energy usage peaks. Functional palette — never decorative. WCAG verified. |
78
+ | Manufacturing/Industrial | #374151 | #FFFFFF | #D97706 | #111928 | #1A56DB | #F9FAFB | #111928 | #FFFFFF | #F3F4F6 | #D1D5DB | #DC2626 | Slate primary mirrors industrial material honesty — steel, aluminum, precision tooling; amber secondary mirrors high-visibility safety equipment conventions; blue accent for digital HMI overlays and OEE dashboards. Avoid soft consumer palettes. WCAG verified. |
79
+ | Construction | #D97706 | #111928 | #374151 | #FFFFFF | #1A56DB | #FFFBEB | #111928 | #FFFFFF | #FEF3C7 | #FDE68A | #B91C1C | Amber primary is literal high-vis construction site signaling — hard hats, caution tape, equipment; slate secondary for technical drawing and plan review surfaces; blue accent for BIM integration and weather/site tracking. Warm background. WCAG verified. |
80
+
81
+ For matching typography pairings by vertical, see `reference/typography.md`.
82
+ For industry voice conventions that must align with palette choice, see `reference/brand-voice.md`.