picasso-skill 1.2.0 → 1.3.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/README.md +23 -7
- package/agents/picasso.md +305 -2
- package/package.json +1 -1
- package/skills/picasso/references/accessibility-wcag.md +245 -0
- package/skills/picasso/references/anti-patterns.md +138 -49
- package/skills/picasso/references/color-and-contrast.md +251 -2
- package/skills/picasso/references/conversion-design.md +193 -0
- package/skills/picasso/references/data-visualization.md +226 -0
- package/skills/picasso/references/modern-css-performance.md +361 -0
- package/skills/picasso/references/performance-optimization.md +746 -0
- package/skills/picasso/references/style-presets.md +502 -0
- package/skills/picasso/references/typography.md +206 -2
- package/skills/picasso/references/ux-psychology.md +235 -0
- package/skills/picasso/references/ux-writing.md +513 -0
- package/skills/picasso/references/accessibility.md +0 -172
|
@@ -4,92 +4,181 @@ This is the most important reference file. These are the patterns that make AI-g
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## The AI Slop Fingerprint
|
|
8
|
+
|
|
9
|
+
Any 3 or more of these together = AI slop. Stop and redesign.
|
|
10
|
+
|
|
11
|
+
- Inter/Roboto + purple-to-blue gradient + centered hero + 3 equal feature cards + "Build the future of work" headline
|
|
12
|
+
- `bg-indigo-500` as default accent (the Tailwind feedback loop)
|
|
13
|
+
- Uniform 8px or 16px border-radius on everything
|
|
14
|
+
- Generic `box-shadow: 0 4px 6px rgba(0,0,0,0.1)` on every card
|
|
15
|
+
- Same page structure: hero > 3 cards > testimonials > pricing > CTA
|
|
16
|
+
- Gradient text (`background-clip: text`) that fails accessibility
|
|
17
|
+
- Abstract 3D blobs or stock photos of people smiling at laptops
|
|
18
|
+
- Everything perfectly centered on a vertical axis
|
|
19
|
+
- Uniform spacing with no density variation between sections
|
|
20
|
+
- Fade-in-on-scroll applied identically to every element
|
|
21
|
+
- Feature icons from Lucide/Heroicons in tinted circles
|
|
22
|
+
- "Trusted by 10,000+ teams" with grayed-out logos nobody recognizes
|
|
23
|
+
|
|
24
|
+
**The test:** Show someone a screenshot without context. If they say "AI-generated" in 3 seconds, it fails. The fingerprint is not any single choice -- it is the combination of defaults that signals zero human judgment.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
7
28
|
## Typography Anti-Patterns
|
|
8
29
|
|
|
9
|
-
- **Inter everywhere.**
|
|
10
|
-
- **Roboto, Arial, Helvetica, system-ui as primary.**
|
|
11
|
-
- **Space Grotesk on repeat.** Overused in AI/crypto contexts.
|
|
12
|
-
- **Light (300) weight for body text.** Hard to read
|
|
13
|
-
- **Centered paragraphs.** Center alignment works for 1-2 lines
|
|
14
|
-
- **No max-width on text.**
|
|
15
|
-
- **All caps without letter-spacing.**
|
|
30
|
+
- **Inter everywhere.** Signals "I did not think about fonts."
|
|
31
|
+
- **Roboto, Arial, Helvetica, system-ui as primary.** System defaults, not design decisions.
|
|
32
|
+
- **Space Grotesk on repeat.** Overused in AI/crypto contexts.
|
|
33
|
+
- **Light (300) weight for body text.** Hard to read. 400 minimum for body, 500+ for small text.
|
|
34
|
+
- **Centered paragraphs.** Center alignment works for 1-2 lines only. Never for body text.
|
|
35
|
+
- **No max-width on text.** Cap at 600-750px for body (45-75 characters per line).
|
|
36
|
+
- **All caps without letter-spacing.** Needs 0.08-0.15em spacing to be legible.
|
|
16
37
|
- **More than 3 font families.** Two is ideal. Three is the maximum.
|
|
17
|
-
- **Font size under 14px for body text.**
|
|
38
|
+
- **Font size under 14px for body text.** 16px is a safe default.
|
|
39
|
+
- **Same font weight for everything.** Use at least 3 distinct weights for hierarchy.
|
|
40
|
+
- **Line-height of 1.5 for all text.** Headings: 1.1-1.2. Body: 1.5-1.7. Small text: 1.6-1.8.
|
|
41
|
+
- **No optical size adjustment.** Display text: lighter weight, tighter tracking. Small UI text: heavier, looser tracking.
|
|
18
42
|
|
|
19
43
|
---
|
|
20
44
|
|
|
21
45
|
## Color Anti-Patterns
|
|
22
46
|
|
|
23
|
-
- **Purple gradient on white background.** The signature AI slop aesthetic.
|
|
24
|
-
-
|
|
25
|
-
- **Pure
|
|
26
|
-
- **
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
-
- **
|
|
30
|
-
- **
|
|
47
|
+
- **Purple gradient on white background.** The signature AI slop aesthetic. If your first instinct is purple-to-blue, stop.
|
|
48
|
+
- **`bg-indigo-500`, `bg-violet-500`, `bg-purple-500` as primary.** The Tailwind default palette trap.
|
|
49
|
+
- **Pure black text (#000000).** Use tinted near-black (e.g., `oklch(0.15 0.02 260)`).
|
|
50
|
+
- **Pure gray (#808080, #cccccc).** Tint neutrals toward the palette hue.
|
|
51
|
+
- **Gray text on colored backgrounds.** Low contrast, washed out. Use white or a very light tint.
|
|
52
|
+
- **Full-saturation brand colors for large surfaces.** Reserve max chroma for small accents. Large areas need reduced saturation.
|
|
53
|
+
- **Too many accent colors.** One primary, one secondary maximum.
|
|
54
|
+
- **Using opacity instead of actual color values.** `opacity:0.5` creates inconsistent results. Define explicit tokens.
|
|
55
|
+
- **No dark mode consideration.** Use CSS custom properties from the start.
|
|
56
|
+
- **Gradient text without a solid fallback.** Breaks in selection, high contrast mode, some browsers.
|
|
57
|
+
- **Rainbow or multi-stop gradients.** Two stops maximum. Four or more is a circus.
|
|
31
58
|
|
|
32
59
|
---
|
|
33
60
|
|
|
34
61
|
## Layout Anti-Patterns
|
|
35
62
|
|
|
36
|
-
- **Everything centered vertically and horizontally.** Creates a lifeless vertical highway. Use left-aligned content with intentional centering
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
- **
|
|
41
|
-
- **
|
|
63
|
+
- **Everything centered vertically and horizontally.** Creates a lifeless vertical highway. Use left-aligned content with intentional centering.
|
|
64
|
+
- **Three-column equal-width feature grid as default.** The most common AI layout. Make one card dominant (2:1 split) or use a different structure.
|
|
65
|
+
- **Same page structure every time.** Hero > cards > testimonials > pricing > CTA. Break the pattern: split-screen, bento grid, horizontal scroll, text-as-hero.
|
|
66
|
+
- **No spatial surprises.** Every section on the same grid. Professional sites break the grid -- full-bleed images, asymmetric splits, oversized pull quotes.
|
|
67
|
+
- **No density variation.** Some sections should feel spacious (hero, CTA), others dense (feature lists, data tables, pricing).
|
|
68
|
+
- **No overlapping elements or grid breaks.** Elements that bleed outside containers add depth and interest.
|
|
69
|
+
- **Uniform card sizing in grids.** Primary item should be visually dominant. Featured card taller/wider.
|
|
70
|
+
- **Cards nested inside cards.** One level is usually enough.
|
|
71
|
+
- **Wrapping everything in cards.** Sometimes flat sections, dividers, or whitespace work better.
|
|
72
|
+
- **Equal spacing everywhere.** Groups need tighter internal spacing and wider external spacing.
|
|
42
73
|
- **Content that could belong to any product.** If the layout has no personality, the design is not done.
|
|
74
|
+
- **Sticky header over 80px.** Keep slim (48-56px) or hide on scroll-down.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Shadow Anti-Patterns
|
|
79
|
+
|
|
80
|
+
- **Same shadow on every elevated element.** `shadow-md` on cards, modals, dropdowns, and buttons is not a system.
|
|
81
|
+
- **No shadow hierarchy.** Define 3-4 levels: subtle (tooltips), moderate (cards, dropdowns), dramatic (modals, drawers).
|
|
82
|
+
- **Shadows invisible in dark mode.** `rgba(0,0,0,0.1)` disappears on dark backgrounds. Use inner glows, border effects, or background lightness differentiation.
|
|
83
|
+
- **Shadows instead of background-color for elevation.** Elevation is often better communicated through surface tint, not shadows.
|
|
84
|
+
- **Hard-edged shadows.** Small blur + high opacity = 2005. Modern shadows: large blur (20-40px), low opacity (0.03-0.08).
|
|
85
|
+
- **Colored shadows that do not match the element.** A blue button with gray shadow looks disconnected. Use the element's hue at low opacity.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Border Radius Anti-Patterns
|
|
90
|
+
|
|
91
|
+
- **Uniform 8px or 16px on everything.** Border radius is a system, not one value.
|
|
92
|
+
- **No hierarchy.** Pills for tags (999px), generous for modals (16-24px), subtle for cards (8-12px), sharp for data (2-4px), sharp for marketing (0-2px).
|
|
93
|
+
- **Nested radius not accounting for padding.** Inner radius = outer radius minus padding. Card with `16px` radius and `8px` padding = inner element at `8px` radius.
|
|
94
|
+
- **Rounded corners on elements flush with container edges.** Touching corners should be 0 radius.
|
|
95
|
+
- **Mixing rounded and sharp in the same component.** Button at `8px` next to input at `0px` = two design systems colliding.
|
|
43
96
|
|
|
44
97
|
---
|
|
45
98
|
|
|
46
99
|
## Motion Anti-Patterns
|
|
47
100
|
|
|
48
|
-
- **Bounce/elastic easing.**
|
|
49
|
-
- **Animating everything
|
|
50
|
-
- **transition: all 0.3s.**
|
|
51
|
-
- **
|
|
52
|
-
- **
|
|
53
|
-
- **
|
|
101
|
+
- **Bounce/elastic easing.** Dated. Use ease-out for entrances, ease-in for exits.
|
|
102
|
+
- **Animating everything.** Animate important moments only: state changes, entrances, user-initiated actions.
|
|
103
|
+
- **transition: all 0.3s.** Be specific: `transition: opacity 0.2s ease-out, transform 0.3s ease-out`.
|
|
104
|
+
- **Uniform fade-in-on-scroll.** Stagger timing. Vary animation type. Let some elements just be there.
|
|
105
|
+
- **No loading feedback.** Always show progress on async actions.
|
|
106
|
+
- **Spinner for content areas.** Use skeleton screens. Spinners for small inline actions only.
|
|
107
|
+
- **No prefers-reduced-motion handling.** Wrap motion in `@media (prefers-reduced-motion: no-preference)`.
|
|
108
|
+
- **Duration over 500ms for UI transitions.** 150-300ms for most interactions. 300-500ms for large layout changes.
|
|
109
|
+
- **Animating layout properties (width, height, top, left).** Triggers reflows. Animate `transform` and `opacity` only.
|
|
54
110
|
|
|
55
111
|
---
|
|
56
112
|
|
|
57
113
|
## Interaction Anti-Patterns
|
|
58
114
|
|
|
59
115
|
- **Placeholder text as the only label.** Disappears on focus. Inaccessible.
|
|
60
|
-
- **outline: none without replacement.**
|
|
116
|
+
- **outline: none without replacement.** Replace with a custom focus ring, never remove it.
|
|
61
117
|
- **Hover-only interactions.** Must have keyboard and touch equivalents.
|
|
62
|
-
- **Custom scrollbars that break native behavior.**
|
|
63
|
-
- **Toast notifications for errors.** They disappear. Use inline
|
|
64
|
-
- **Alert/confirm dialogs for minor actions.**
|
|
65
|
-
- **No focus trapping in modals.** Tab key
|
|
66
|
-
- **Links that look like buttons
|
|
118
|
+
- **Custom scrollbars that break native behavior.** Custom thin scrollbars fine. Custom scroll physics not.
|
|
119
|
+
- **Toast notifications for errors.** They disappear. Use inline errors. Toasts for confirmations only.
|
|
120
|
+
- **Alert/confirm dialogs for minor actions.** Do not block the page for non-destructive actions.
|
|
121
|
+
- **No focus trapping in modals.** Tab key must stay within the modal.
|
|
122
|
+
- **Links that look like buttons, buttons that look like links.** `<a>` navigates. `<button>` acts.
|
|
123
|
+
- **Disabled buttons with no explanation.** Show inline validation or tooltip for why the action is unavailable.
|
|
124
|
+
- **Click targets smaller than 44x44px on mobile.** 44px minimum per Apple and Google guidelines.
|
|
67
125
|
|
|
68
126
|
---
|
|
69
127
|
|
|
70
|
-
##
|
|
128
|
+
## Content / Copy Anti-Patterns
|
|
71
129
|
|
|
72
|
-
- **
|
|
73
|
-
- **
|
|
74
|
-
-
|
|
75
|
-
- **
|
|
76
|
-
- **
|
|
77
|
-
- **
|
|
130
|
+
- **"Lorem ipsum" in final deliverables.** Design without content is decoration.
|
|
131
|
+
- **Stock photo people smiling at laptops.** Use contextual illustrations, product screenshots, or abstract art.
|
|
132
|
+
- **"Click here" link text.** Describe the destination: "View documentation."
|
|
133
|
+
- **"Submit" button text.** Use the specific action: "Create account", "Send message", "Save changes."
|
|
134
|
+
- **Walls of text without hierarchy.** Break with headings, spacing, and visual rhythm.
|
|
135
|
+
- **Generic headlines.** "Build the future of work." "Your all-in-one platform." "Scale without limits." These say nothing. Use a specific value proposition.
|
|
136
|
+
- **AI-telltale words.** "Delve", "pivotal", "seamless", "leverage", "cutting-edge", "elevate", "harness", "robust", "streamline", "utilize." If you would not say it in conversation, do not write it.
|
|
137
|
+
- **Hedge language.** "May help you", "might improve." Commit to the claim or do not make it.
|
|
138
|
+
- **Unrealistic demo data.** Not $1M revenue and 99.99% uptime. Use $47,230 and 99.93%. Not "John Doe" -- use "Sarah Chen" or "Marcus Rivera."
|
|
139
|
+
- **Broken Unsplash placeholder links.** `unsplash.com/random` links rot. Use solid color blocks or local assets.
|
|
140
|
+
- **Exclamation marks in UI copy.** "Welcome!" "Success!" Save enthusiasm for genuinely exciting moments.
|
|
78
141
|
|
|
79
142
|
---
|
|
80
143
|
|
|
81
|
-
##
|
|
144
|
+
## Code Anti-Patterns
|
|
82
145
|
|
|
83
|
-
- **
|
|
84
|
-
- **
|
|
85
|
-
-
|
|
86
|
-
- **
|
|
87
|
-
- **
|
|
146
|
+
- **div soup.** Use semantic HTML: `nav`, `main`, `section`, `article`, `aside`, `header`, `footer`.
|
|
147
|
+
- **Inline styles for everything.** Use CSS variables, modules, or Tailwind.
|
|
148
|
+
- **!important everywhere.** If needed, the CSS architecture is broken.
|
|
149
|
+
- **z-index: 9999.** Use a scale with named variables: `--z-dropdown: 10`, `--z-modal: 20`, `--z-toast: 30`.
|
|
150
|
+
- **Fixed pixel values for everything.** `rem` for typography/spacing, `em` for component internals, `px` for borders/shadows.
|
|
151
|
+
- **console.log left in production.**
|
|
152
|
+
- **Tailwind class strings over 200 characters.** Extract to a component or use `@apply`.
|
|
153
|
+
- **Hardcoded color values instead of CSS custom properties.** `bg-[#6366f1]` in 40 files means 40 edits for a brand change.
|
|
154
|
+
- **No responsive behavior.** Test at 320px, 768px, and 1440px minimum.
|
|
88
155
|
|
|
89
156
|
---
|
|
90
157
|
|
|
91
158
|
## The Overall Pattern to Avoid
|
|
92
159
|
|
|
93
|
-
The
|
|
160
|
+
The AI slop aesthetic: Inter/Roboto + purple/blue gradient + centered layouts + uniform card grids + identical rounded corners + generic shadows + stock imagery. Any single element is fine in isolation. Together they signal zero human judgment.
|
|
161
|
+
|
|
162
|
+
The antidote is intentionality. Every choice -- font, color, spacing, layout, animation, shadow, radius, copy -- should be a conscious decision tied to the specific context. If you cannot explain why you chose it, you defaulted.
|
|
163
|
+
|
|
164
|
+
---
|
|
94
165
|
|
|
95
|
-
|
|
166
|
+
## Professional Alternatives (Quick Reference)
|
|
167
|
+
|
|
168
|
+
| AI Default | Professional Alternative |
|
|
169
|
+
|---|---|
|
|
170
|
+
| Inter / Roboto | Satoshi, Cabinet Grotesk, Plus Jakarta Sans, Outfit, General Sans, Switzer |
|
|
171
|
+
| Purple-to-blue gradient | Single brand hue + tinted neutrals (monochromatic palette) |
|
|
172
|
+
| 3-column equal cards | Asymmetric grid with primary card dominant (2:1 or 3:2 split) |
|
|
173
|
+
| Centered everything | Left-aligned content with intentional centering for heroes/CTAs only |
|
|
174
|
+
| Uniform 8px radius | Context-appropriate: 0-2px marketing, 8-12px cards, 16-24px modals, 999px tags |
|
|
175
|
+
| `0 4px 6px rgba(0,0,0,0.1)` | Elevation-based shadow scale with 3-4 distinct levels |
|
|
176
|
+
| Hero > Cards > Testimonials > CTA | Split-screen, bento grid, horizontal scroll, text-as-hero, editorial layout |
|
|
177
|
+
| Fade-in everything identically | Staggered entrance with varied timing, direction, and type per element |
|
|
178
|
+
| "Scale without limits" | Specific claim with real metric: "Process 10k invoices in 3 minutes" |
|
|
179
|
+
| `bg-indigo-500` accent | A hue reflecting the brand, not Tailwind's default palette |
|
|
180
|
+
| Generic box icons in circles | Custom illustrations, product screenshots, or no icons at all |
|
|
181
|
+
| "Trusted by 10,000+ teams" | Real customer logos with permission, or skip entirely |
|
|
182
|
+
| Uniform section spacing | Varied density: spacious heroes, dense feature grids, breathing room at CTAs |
|
|
183
|
+
| Same shadow on everything | Shadow hierarchy: none flat, subtle cards, medium dropdowns, heavy modals |
|
|
184
|
+
| Stock laptop photos | Product screenshots, hand-drawn illustrations, or abstract geometric art |
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
4. Dark Mode
|
|
8
8
|
5. Accessibility
|
|
9
9
|
6. CSS Variables Pattern
|
|
10
|
-
7.
|
|
10
|
+
7. Curated Color Palettes
|
|
11
|
+
8. Wide Gamut Colors (P3)
|
|
12
|
+
9. Common Mistakes
|
|
11
13
|
|
|
12
14
|
---
|
|
13
15
|
|
|
@@ -163,7 +165,254 @@ For component-level overrides:
|
|
|
163
165
|
|
|
164
166
|
---
|
|
165
167
|
|
|
166
|
-
## 7.
|
|
168
|
+
## 7. Curated Color Palettes
|
|
169
|
+
|
|
170
|
+
Ten tested OKLCH palettes ready to drop into any project. Each includes a complete token set. Copy the one that fits your domain, then adjust chroma and hue to taste.
|
|
171
|
+
|
|
172
|
+
### 7.1 Warm Terracotta
|
|
173
|
+
**Vibe**: Earthy, grounded, artisanal. Good for lifestyle brands, wellness, real estate, organic products.
|
|
174
|
+
```css
|
|
175
|
+
:root {
|
|
176
|
+
--surface-0: oklch(0.98 0.008 55);
|
|
177
|
+
--surface-1: oklch(0.95 0.012 55);
|
|
178
|
+
--text-primary: oklch(0.18 0.025 55);
|
|
179
|
+
--text-secondary: oklch(0.42 0.02 55);
|
|
180
|
+
--accent: oklch(0.58 0.16 45);
|
|
181
|
+
--accent-hover: oklch(0.52 0.18 45);
|
|
182
|
+
--accent-subtle: oklch(0.93 0.04 45);
|
|
183
|
+
--border: oklch(0.87 0.015 55);
|
|
184
|
+
--success: oklch(0.55 0.16 155);
|
|
185
|
+
--warning: oklch(0.68 0.16 75);
|
|
186
|
+
--error: oklch(0.55 0.20 25);
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 7.2 Forest Green
|
|
191
|
+
**Vibe**: Natural, sustainable, trustworthy. Good for fintech, health, environmental, agriculture.
|
|
192
|
+
```css
|
|
193
|
+
:root {
|
|
194
|
+
--surface-0: oklch(0.98 0.006 145);
|
|
195
|
+
--surface-1: oklch(0.96 0.01 145);
|
|
196
|
+
--text-primary: oklch(0.17 0.03 150);
|
|
197
|
+
--text-secondary: oklch(0.40 0.02 150);
|
|
198
|
+
--accent: oklch(0.52 0.14 155);
|
|
199
|
+
--accent-hover: oklch(0.46 0.16 155);
|
|
200
|
+
--accent-subtle: oklch(0.93 0.04 155);
|
|
201
|
+
--border: oklch(0.88 0.012 145);
|
|
202
|
+
--success: oklch(0.55 0.16 145);
|
|
203
|
+
--warning: oklch(0.66 0.16 80);
|
|
204
|
+
--error: oklch(0.55 0.20 25);
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 7.3 Amber Gold
|
|
209
|
+
**Vibe**: Premium, confident, optimistic. Good for finance, luxury SaaS, productivity tools.
|
|
210
|
+
```css
|
|
211
|
+
:root {
|
|
212
|
+
--surface-0: oklch(0.99 0.005 85);
|
|
213
|
+
--surface-1: oklch(0.96 0.01 85);
|
|
214
|
+
--text-primary: oklch(0.16 0.02 85);
|
|
215
|
+
--text-secondary: oklch(0.40 0.018 85);
|
|
216
|
+
--accent: oklch(0.68 0.18 75);
|
|
217
|
+
--accent-hover: oklch(0.62 0.20 75);
|
|
218
|
+
--accent-subtle: oklch(0.94 0.04 75);
|
|
219
|
+
--border: oklch(0.88 0.012 85);
|
|
220
|
+
--success: oklch(0.55 0.16 150);
|
|
221
|
+
--warning: oklch(0.68 0.18 75);
|
|
222
|
+
--error: oklch(0.55 0.20 28);
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### 7.4 Coral Salmon
|
|
227
|
+
**Vibe**: Warm, energetic, approachable. Good for social apps, creative tools, food and hospitality.
|
|
228
|
+
```css
|
|
229
|
+
:root {
|
|
230
|
+
--surface-0: oklch(0.98 0.006 30);
|
|
231
|
+
--surface-1: oklch(0.96 0.01 30);
|
|
232
|
+
--text-primary: oklch(0.18 0.02 30);
|
|
233
|
+
--text-secondary: oklch(0.42 0.018 30);
|
|
234
|
+
--accent: oklch(0.65 0.20 25);
|
|
235
|
+
--accent-hover: oklch(0.58 0.22 25);
|
|
236
|
+
--accent-subtle: oklch(0.94 0.04 25);
|
|
237
|
+
--border: oklch(0.88 0.012 30);
|
|
238
|
+
--success: oklch(0.55 0.16 150);
|
|
239
|
+
--warning: oklch(0.66 0.16 75);
|
|
240
|
+
--error: oklch(0.52 0.22 20);
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### 7.5 Deep Teal
|
|
245
|
+
**Vibe**: Calm, medical, authoritative. Good for health tech, enterprise SaaS, data platforms, legal.
|
|
246
|
+
```css
|
|
247
|
+
:root {
|
|
248
|
+
--surface-0: oklch(0.98 0.005 195);
|
|
249
|
+
--surface-1: oklch(0.96 0.008 195);
|
|
250
|
+
--text-primary: oklch(0.16 0.025 200);
|
|
251
|
+
--text-secondary: oklch(0.40 0.02 200);
|
|
252
|
+
--accent: oklch(0.52 0.12 195);
|
|
253
|
+
--accent-hover: oklch(0.46 0.14 195);
|
|
254
|
+
--accent-subtle: oklch(0.93 0.03 195);
|
|
255
|
+
--border: oklch(0.88 0.01 195);
|
|
256
|
+
--success: oklch(0.55 0.14 155);
|
|
257
|
+
--warning: oklch(0.66 0.16 75);
|
|
258
|
+
--error: oklch(0.55 0.20 25);
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 7.6 Slate Blue
|
|
263
|
+
**Vibe**: Professional, systematic, dependable. Good for project management, B2B SaaS, documentation.
|
|
264
|
+
```css
|
|
265
|
+
:root {
|
|
266
|
+
--surface-0: oklch(0.98 0.005 250);
|
|
267
|
+
--surface-1: oklch(0.96 0.008 250);
|
|
268
|
+
--text-primary: oklch(0.17 0.02 250);
|
|
269
|
+
--text-secondary: oklch(0.42 0.018 250);
|
|
270
|
+
--accent: oklch(0.55 0.14 250);
|
|
271
|
+
--accent-hover: oklch(0.49 0.16 250);
|
|
272
|
+
--accent-subtle: oklch(0.93 0.03 250);
|
|
273
|
+
--border: oklch(0.88 0.01 250);
|
|
274
|
+
--success: oklch(0.55 0.16 150);
|
|
275
|
+
--warning: oklch(0.66 0.16 75);
|
|
276
|
+
--error: oklch(0.55 0.20 25);
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### 7.7 Burgundy
|
|
281
|
+
**Vibe**: Sophisticated, editorial, rich. Good for wine/food, publishing, luxury, fashion.
|
|
282
|
+
```css
|
|
283
|
+
:root {
|
|
284
|
+
--surface-0: oklch(0.98 0.006 10);
|
|
285
|
+
--surface-1: oklch(0.96 0.01 10);
|
|
286
|
+
--text-primary: oklch(0.16 0.025 10);
|
|
287
|
+
--text-secondary: oklch(0.40 0.02 10);
|
|
288
|
+
--accent: oklch(0.42 0.16 15);
|
|
289
|
+
--accent-hover: oklch(0.36 0.18 15);
|
|
290
|
+
--accent-subtle: oklch(0.93 0.04 15);
|
|
291
|
+
--border: oklch(0.87 0.012 10);
|
|
292
|
+
--success: oklch(0.55 0.16 150);
|
|
293
|
+
--warning: oklch(0.66 0.16 75);
|
|
294
|
+
--error: oklch(0.50 0.20 25);
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### 7.8 Sage
|
|
299
|
+
**Vibe**: Soft, organic, restorative. Good for wellness, meditation, journaling, therapy platforms.
|
|
300
|
+
```css
|
|
301
|
+
:root {
|
|
302
|
+
--surface-0: oklch(0.98 0.006 130);
|
|
303
|
+
--surface-1: oklch(0.95 0.012 130);
|
|
304
|
+
--text-primary: oklch(0.20 0.02 130);
|
|
305
|
+
--text-secondary: oklch(0.42 0.018 130);
|
|
306
|
+
--accent: oklch(0.58 0.10 130);
|
|
307
|
+
--accent-hover: oklch(0.52 0.12 130);
|
|
308
|
+
--accent-subtle: oklch(0.93 0.03 130);
|
|
309
|
+
--border: oklch(0.88 0.01 130);
|
|
310
|
+
--success: oklch(0.55 0.14 150);
|
|
311
|
+
--warning: oklch(0.66 0.15 75);
|
|
312
|
+
--error: oklch(0.55 0.18 25);
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### 7.9 Charcoal with Orange Accent
|
|
317
|
+
**Vibe**: Bold, industrial, high-contrast. Good for dev tools, gaming, analytics, creative coding.
|
|
318
|
+
```css
|
|
319
|
+
:root {
|
|
320
|
+
--surface-0: oklch(0.97 0.003 60);
|
|
321
|
+
--surface-1: oklch(0.94 0.005 60);
|
|
322
|
+
--text-primary: oklch(0.15 0.01 60);
|
|
323
|
+
--text-secondary: oklch(0.40 0.01 60);
|
|
324
|
+
--accent: oklch(0.65 0.22 55);
|
|
325
|
+
--accent-hover: oklch(0.58 0.24 55);
|
|
326
|
+
--accent-subtle: oklch(0.94 0.04 55);
|
|
327
|
+
--border: oklch(0.86 0.008 60);
|
|
328
|
+
--success: oklch(0.55 0.16 150);
|
|
329
|
+
--warning: oklch(0.66 0.18 70);
|
|
330
|
+
--error: oklch(0.55 0.22 25);
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### 7.10 Monochrome Black and White
|
|
335
|
+
**Vibe**: Stark, typographic, gallery-like. Good for portfolios, photography, editorial, minimal SaaS.
|
|
336
|
+
```css
|
|
337
|
+
:root {
|
|
338
|
+
--surface-0: oklch(0.99 0.000 0);
|
|
339
|
+
--surface-1: oklch(0.96 0.000 0);
|
|
340
|
+
--text-primary: oklch(0.13 0.000 0);
|
|
341
|
+
--text-secondary: oklch(0.45 0.000 0);
|
|
342
|
+
--accent: oklch(0.15 0.000 0);
|
|
343
|
+
--accent-hover: oklch(0.25 0.000 0);
|
|
344
|
+
--accent-subtle: oklch(0.93 0.000 0);
|
|
345
|
+
--border: oklch(0.85 0.000 0);
|
|
346
|
+
--success: oklch(0.50 0.14 150);
|
|
347
|
+
--warning: oklch(0.62 0.14 75);
|
|
348
|
+
--error: oklch(0.50 0.18 25);
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
For the monochrome palette, the accent is near-black. CTAs rely on fill weight (solid black buttons with white text) rather than color. Semantic colors (success, warning, error) break the monochrome intentionally so they remain functional.
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## 8. Wide Gamut Colors (P3)
|
|
357
|
+
|
|
358
|
+
### What is Display P3?
|
|
359
|
+
Display P3 is a color space that covers roughly 25% more visible colors than sRGB. Modern Apple devices, most OLED screens, and recent monitors support it. Colors outside the sRGB gamut appear more vivid without being oversaturated.
|
|
360
|
+
|
|
361
|
+
### CSS Syntax
|
|
362
|
+
```css
|
|
363
|
+
/* Display P3 via color() function */
|
|
364
|
+
--accent: color(display-p3 0.92 0.34 0.15); /* vivid orange impossible in sRGB */
|
|
365
|
+
--success: color(display-p3 0.18 0.75 0.35); /* richer green */
|
|
366
|
+
--highlight: color(display-p3 1 0.85 0); /* pure P3 yellow */
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Feature Detection
|
|
370
|
+
```css
|
|
371
|
+
@media (color-gamut: p3) {
|
|
372
|
+
:root {
|
|
373
|
+
--accent: color(display-p3 0.92 0.34 0.15);
|
|
374
|
+
--success: color(display-p3 0.18 0.75 0.35);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Progressive Enhancement Pattern
|
|
380
|
+
Always define an sRGB fallback first, then override for wide gamut displays. This ensures every screen gets a reasonable color.
|
|
381
|
+
|
|
382
|
+
```css
|
|
383
|
+
:root {
|
|
384
|
+
/* sRGB fallback (works everywhere) */
|
|
385
|
+
--accent: oklch(0.65 0.22 35);
|
|
386
|
+
--success: oklch(0.55 0.18 150);
|
|
387
|
+
--highlight: oklch(0.82 0.18 90);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
@media (color-gamut: p3) {
|
|
391
|
+
:root {
|
|
392
|
+
/* P3 override (wider gamut screens) */
|
|
393
|
+
--accent: oklch(0.65 0.27 35); /* push chroma beyond sRGB limit */
|
|
394
|
+
--success: oklch(0.55 0.22 150);
|
|
395
|
+
--highlight: oklch(0.82 0.22 90);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
Note: OKLCH values automatically map to the widest gamut the browser and display support. Increasing chroma beyond ~0.15-0.20 (depending on hue) often pushes into P3 territory. This makes OKLCH the ideal space for progressive enhancement because you write one value and the browser resolves it to the best available gamut.
|
|
401
|
+
|
|
402
|
+
### When to Use P3
|
|
403
|
+
- Hero gradients and accent splashes where vibrancy matters
|
|
404
|
+
- Success/error states that need to "pop" on capable screens
|
|
405
|
+
- Brand colors that were designed in P3 (increasingly common)
|
|
406
|
+
- Image overlays and tinted surfaces that blend with wide-gamut photography
|
|
407
|
+
|
|
408
|
+
### When NOT to Use P3
|
|
409
|
+
- Body text colors (perceptual difference is negligible)
|
|
410
|
+
- Border and surface tokens (subtle differences, not worth the complexity)
|
|
411
|
+
- Any context where the sRGB version already looks correct
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## 9. Common Mistakes
|
|
167
416
|
|
|
168
417
|
- Using pure black (#000) for text (use tinted near-black instead)
|
|
169
418
|
- Using gray text on colored backgrounds (low contrast, hard to read)
|