@ctxr/skill-frontend-excellence 0.1.1
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/CHANGELOG.md +37 -0
- package/LICENSE +21 -0
- package/README.md +114 -0
- package/SKILL.md +227 -0
- package/package.json +63 -0
- package/references/accessibility.md +396 -0
- package/references/audit-workflow.md +390 -0
- package/references/components.md +247 -0
- package/references/data-viz.md +457 -0
- package/references/defects.md +152 -0
- package/references/design.md +513 -0
- package/references/forms.md +485 -0
- package/references/lighthouse.md +242 -0
- package/references/motion.md +642 -0
- package/references/performance.md +416 -0
- package/references/pre-launch.md +342 -0
- package/references/responsive.md +519 -0
- package/references/seo.md +422 -0
- package/references/ui-ux.md +565 -0
- package/scripts/check-no-dashes.mjs +90 -0
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
# Design Aesthetics
|
|
2
|
+
|
|
3
|
+
Framework-agnostic guidance on building interfaces that look intentional, distinctive, and considered. The opposite of generic AI-generated styling.
|
|
4
|
+
|
|
5
|
+
## The Generic AI Look (and how to avoid it)
|
|
6
|
+
|
|
7
|
+
A specific aesthetic has emerged from AI-generated frontends. Avoid all of these signatures:
|
|
8
|
+
|
|
9
|
+
- **Inter (or Geist, or Space Grotesk) on pure white** with `text-slate-600` body text
|
|
10
|
+
- **Purple-to-pink linear gradients** on hero CTAs
|
|
11
|
+
- **Glassmorphism without context**: `backdrop-blur` cards floating on a colorful background
|
|
12
|
+
- **Centered-everything layouts**: hero text centered, three feature cards centered, centered CTA
|
|
13
|
+
- **Three-card pricing grid** with the middle card "highlighted" via gradient border
|
|
14
|
+
- **Lucide icons in 1.5px outline** at 20px above every section heading
|
|
15
|
+
- **A "trusted by" logo strip** with five evenly-spaced grayscale logos
|
|
16
|
+
- **A vague abstract gradient background** with low opacity blobs
|
|
17
|
+
- **Lorem-style placeholder copy** that says nothing specific
|
|
18
|
+
- **`text-balance` on every heading** with no concern for what's balanced
|
|
19
|
+
- **A FAQ section using `<details>`** as the last block before the footer
|
|
20
|
+
- **Footer with five columns of links** that nobody clicks
|
|
21
|
+
|
|
22
|
+
If your page reads like the list above, restart with an actual aesthetic direction.
|
|
23
|
+
|
|
24
|
+
## Pick a Direction (and commit)
|
|
25
|
+
|
|
26
|
+
Before designing, pick ONE aesthetic lane and execute it precisely. Bold maximalism and refined minimalism both work; the key is intentionality, not intensity.
|
|
27
|
+
|
|
28
|
+
### Aesthetic lanes (pick one)
|
|
29
|
+
|
|
30
|
+
| Lane | Personality |
|
|
31
|
+
|------|------------|
|
|
32
|
+
| **Refined minimal** | Quiet, generous whitespace, muted palette, distinctive type |
|
|
33
|
+
| **Editorial** | Magazine-like, serif display, asymmetric grids, considered photography |
|
|
34
|
+
| **Brutalist** | Raw, unstyled-feeling, monospace, hard borders, no shadows |
|
|
35
|
+
| **Maximalist / chaotic** | Layered textures, decorative elements, generous color, dense |
|
|
36
|
+
| **Retro-futuristic** | 80s/90s aesthetic, neon, CRT scan lines, monospace, deep blacks |
|
|
37
|
+
| **Organic / natural** | Soft curves, earthy palette, hand-drawn elements, pastels |
|
|
38
|
+
| **Industrial / utilitarian** | Engineering-feeling, technical drawings, fixed-width type, schematic |
|
|
39
|
+
| **Luxury / refined** | Restrained, elegant serifs, high contrast, generous space |
|
|
40
|
+
| **Playful / toy-like** | Bright, rounded, illustrated, animated micro-interactions |
|
|
41
|
+
| **Geometric / Bauhaus** | Primary colors, geometric shapes, grid-driven, sans-serif |
|
|
42
|
+
| **Magazine / softlit** | Pastel surfaces, large photography, warm shadows, lifestyle |
|
|
43
|
+
| **Cyberpunk / dark futurist** | Deep saturated darks, hard accent colors, glitch elements |
|
|
44
|
+
|
|
45
|
+
For each, commit to:
|
|
46
|
+
|
|
47
|
+
- One typeface family for headings, one for body (sometimes the same)
|
|
48
|
+
- A constrained palette (one dominant, 1-2 accents, neutral scale)
|
|
49
|
+
- Specific elevation/shadow language
|
|
50
|
+
- Specific border-radius scale
|
|
51
|
+
- Specific motion language
|
|
52
|
+
|
|
53
|
+
## Typography
|
|
54
|
+
|
|
55
|
+
Type is the single largest carrier of personality. Choosing fonts is the most consequential design decision.
|
|
56
|
+
|
|
57
|
+
### Type pairing
|
|
58
|
+
|
|
59
|
+
Pair a **distinctive display face** with a **refined body face**. Or use one excellent variable font for both.
|
|
60
|
+
|
|
61
|
+
Anti-pattern: pairing two similar sans-serifs. They fight without contrasting.
|
|
62
|
+
|
|
63
|
+
### Body face requirements
|
|
64
|
+
|
|
65
|
+
- Optimized for screens (hinted, generous x-height).
|
|
66
|
+
- Multiple weights available (regular, medium, semibold, bold minimum).
|
|
67
|
+
- Decent at small sizes (14-16px).
|
|
68
|
+
- Wide language coverage if you serve multiple locales.
|
|
69
|
+
- Variable font preferred (one file replaces 3-5 weights).
|
|
70
|
+
|
|
71
|
+
### Display face requirements
|
|
72
|
+
|
|
73
|
+
- Distinctive at large sizes.
|
|
74
|
+
- Less constrained on rendering quality (used 24-96px).
|
|
75
|
+
- Has personality. If your hero heading could be the logo of any other product, the type is too generic.
|
|
76
|
+
|
|
77
|
+
### Pairings that work (examples by lane)
|
|
78
|
+
|
|
79
|
+
| Lane | Display | Body |
|
|
80
|
+
|------|---------|------|
|
|
81
|
+
| Refined minimal | Söhne, Suisse Int'l, GT America | Söhne, Inter Display |
|
|
82
|
+
| Editorial | GT Sectra, Tiempos Headline, Fraunces (variable) | Source Serif, Tiempos Text, Newsreader |
|
|
83
|
+
| Brutalist | Söhne Mono, JetBrains Mono, Berkeley Mono | Söhne Mono, IBM Plex Mono |
|
|
84
|
+
| Maximalist | Migra, Pangea, Editorial New | Inter, Söhne |
|
|
85
|
+
| Retro-futuristic | VT323, Press Start 2P, IBM Plex Mono | IBM Plex Mono, Space Mono |
|
|
86
|
+
| Organic | Fraunces (variable), Saol, Reckless | Söhne, Untitled Sans |
|
|
87
|
+
| Industrial | Söhne Mono, Berkeley Mono | Söhne Mono |
|
|
88
|
+
| Luxury | Tiempos Headline, GT Sectra Display, Saol | Tiempos Text, GT America |
|
|
89
|
+
| Playful | Migra, Editorial New, ABC Diatype | Söhne, Untitled Sans |
|
|
90
|
+
| Bauhaus | Neue Haas Grotesk, Söhne, Inter | Same |
|
|
91
|
+
| Magazine | Tiempos Headline, GT Sectra, Newsreader | Newsreader, Source Serif |
|
|
92
|
+
| Cyberpunk | JetBrains Mono, Departure Mono, Berkeley Mono | Same |
|
|
93
|
+
|
|
94
|
+
If you don't have access to commercial faces, equivalent open-source options work:
|
|
95
|
+
|
|
96
|
+
- **Sans (refined)**: Inter Display, Manrope, Public Sans, Geist
|
|
97
|
+
- **Sans (characterful)**: Outfit, Bricolage Grotesque, Bagoss Standard
|
|
98
|
+
- **Serif (refined)**: Newsreader, Source Serif 4, Lora, Crimson Pro
|
|
99
|
+
- **Serif (display)**: Fraunces (variable), DM Serif Display, Playfair Display
|
|
100
|
+
- **Mono**: JetBrains Mono, IBM Plex Mono, Geist Mono, Departure Mono, VT323
|
|
101
|
+
- **Display / unusual**: Bagoss Condensed, Migra, Editorial New (paid), Bricolage Grotesque (variable, free)
|
|
102
|
+
|
|
103
|
+
Two families and four weights is the budget. Variable fonts let you stretch this without paying the byte cost.
|
|
104
|
+
|
|
105
|
+
### Type scale
|
|
106
|
+
|
|
107
|
+
Don't pick sizes by feel. Build a scale.
|
|
108
|
+
|
|
109
|
+
| Modular ratio | Use |
|
|
110
|
+
|--------------|-----|
|
|
111
|
+
| 1.125 (major second) | Dense UI, data-heavy surfaces |
|
|
112
|
+
| 1.2 (minor third) | Default for routine application UI |
|
|
113
|
+
| 1.25 (major third) | Generous, spacious layouts |
|
|
114
|
+
| 1.333 (perfect fourth) | Editorial, dramatic |
|
|
115
|
+
| 1.5 (perfect fifth) | Luxury, very dramatic |
|
|
116
|
+
|
|
117
|
+
Generate the scale once, use it everywhere. A common 1.25 scale at base 16px:
|
|
118
|
+
|
|
119
|
+
`12.8 -> 16 -> 20 -> 25 -> 31.25 -> 39 -> 48.8 -> 61 -> 76.3`
|
|
120
|
+
|
|
121
|
+
Round to whole pixels for crispness.
|
|
122
|
+
|
|
123
|
+
### Display type rules
|
|
124
|
+
|
|
125
|
+
- Tighter line height (1.0-1.2).
|
|
126
|
+
- Negative letter-spacing (-0.01em to -0.03em).
|
|
127
|
+
- Heavier weight at large sizes; medium or bold at very large feels right.
|
|
128
|
+
- Allow display headings to break the grid, overlap, or extend into margins for visual interest.
|
|
129
|
+
|
|
130
|
+
### Body type rules
|
|
131
|
+
|
|
132
|
+
- 16px minimum.
|
|
133
|
+
- 1.5-1.75 line height for paragraphs.
|
|
134
|
+
- 60-75 character line length.
|
|
135
|
+
- Default letter-spacing.
|
|
136
|
+
- Regular (400) for body, Medium (500) for UI labels, Semibold (600) for emphasis.
|
|
137
|
+
|
|
138
|
+
### Tabular figures
|
|
139
|
+
|
|
140
|
+
For prices, percentages, timers, data tables: use tabular figures (`font-variant-numeric: tabular-nums`). This prevents column shift between renders.
|
|
141
|
+
|
|
142
|
+
```css
|
|
143
|
+
.price, .stat {
|
|
144
|
+
font-variant-numeric: tabular-nums;
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### `text-wrap`
|
|
149
|
+
|
|
150
|
+
Modern CSS supports better text wrapping:
|
|
151
|
+
|
|
152
|
+
- `text-wrap: balance` for headings (browser balances lines for visual symmetry; works for short text).
|
|
153
|
+
- `text-wrap: pretty` for paragraphs (avoids orphans / one-word lines at the bottom).
|
|
154
|
+
|
|
155
|
+
Use `balance` only on H1/H2 (not on every heading). Use `pretty` on long-form copy.
|
|
156
|
+
|
|
157
|
+
## Color
|
|
158
|
+
|
|
159
|
+
### Palette construction
|
|
160
|
+
|
|
161
|
+
Start from purpose, not preference.
|
|
162
|
+
|
|
163
|
+
1. **Background neutral.** Light mode and dark mode need separate planning. Light: usually `#FAFAFA`, `#FFFFFF`, or a faint warm/cool tint. Dark: `#0A0A0B`, `#111`, or a colored dark (e.g., navy `#0B1020`).
|
|
164
|
+
2. **Foreground neutral.** Maximum contrast against background. Light mode: `#0A0A0B`. Dark mode: `#FAFAFA`. Add muted variants by reducing opacity (`rgba(...)` over the surface) or by mixing toward the background.
|
|
165
|
+
3. **Surface scale.** 3-5 elevation levels: background, surface, surface-elevated, surface-overlay, surface-modal. Each step lighter (in dark mode) or with more shadow (in light mode).
|
|
166
|
+
4. **Brand primary.** One color. Saturated enough to read on both backgrounds. Check both light and dark mode contrast.
|
|
167
|
+
5. **One or two accents.** Used sparingly for highlights, links, decorative elements. Should harmonize with the primary.
|
|
168
|
+
6. **Semantic colors.** Success (green), warning (amber/yellow), danger (red), info (blue). Each at 4.5:1 against surfaces.
|
|
169
|
+
7. **A neutral scale.** 9-12 stops between background and foreground (`50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950`). Pick a neutral with a tint (slightly warm: `stone`; slightly cool: `slate`; colored: `zinc` or `gray`). Avoid pure neutral (`gray`) for character.
|
|
170
|
+
|
|
171
|
+
### Color philosophy
|
|
172
|
+
|
|
173
|
+
- **Dominant + sharp accents > evenly-distributed.** A timid palette where every color gets equal screen real estate reads as generic. Pick a dominant (the brand) and let it occupy 60-80% of accent area. Use accents (10-30%) for key calls. Reserve neutrals (the rest) for surfaces and text.
|
|
174
|
+
- **The 60-30-10 rule.** Roughly 60% neutral, 30% secondary, 10% accent. Adjust per page type.
|
|
175
|
+
- **Dark mode is its own design.** Don't invert. Pick darker, desaturated brand variants. A primary at `#5B5DEF` in light might become `#7376F5` in dark for proper contrast.
|
|
176
|
+
- **Saturation for hierarchy.** Higher saturation reads as more important. Use desaturated variants for less important elements.
|
|
177
|
+
|
|
178
|
+
### Color ratios (light mode)
|
|
179
|
+
|
|
180
|
+
| Element | Foreground | Background | Ratio |
|
|
181
|
+
|---------|-----------|------------|-------|
|
|
182
|
+
| Body text | `#0a0a0b` | `#ffffff` | 20:1 (AAA) |
|
|
183
|
+
| Body muted | `#525860` | `#ffffff` | 7:1 (AAA large) |
|
|
184
|
+
| Body subtle | `#71757b` | `#ffffff` | 4.6:1 (AA) |
|
|
185
|
+
| Borders | `#e4e4e7` | `#ffffff` | 1.4:1 (decorative; not text) |
|
|
186
|
+
|
|
187
|
+
### Color ratios (dark mode)
|
|
188
|
+
|
|
189
|
+
| Element | Foreground | Background | Ratio |
|
|
190
|
+
|---------|-----------|------------|-------|
|
|
191
|
+
| Body text | `#fafafa` | `#0a0a0b` | 19:1 (AAA) |
|
|
192
|
+
| Body muted | `#a1a1aa` | `#0a0a0b` | 7:1 (AAA large) |
|
|
193
|
+
| Body subtle | `#71717a` | `#0a0a0b` | 4.5:1 (AA) |
|
|
194
|
+
| Borders | `#27272a` | `#0a0a0b` | 1.4:1 (decorative) |
|
|
195
|
+
|
|
196
|
+
Dark mode borders are typically `rgba(255,255,255,0.08-0.12)` for subtle separation. Pure dark borders (`#000`) are invisible.
|
|
197
|
+
|
|
198
|
+
### Gradients
|
|
199
|
+
|
|
200
|
+
If you use gradients:
|
|
201
|
+
|
|
202
|
+
- **Mesh gradients** (multiple radial gradients overlaid) read more designed than two-stop linear gradients.
|
|
203
|
+
- **Subtle**: 2-3 stops with similar luminosity.
|
|
204
|
+
- **Avoid**: pure purple-to-pink at 45deg. It's the AI-generated cliche.
|
|
205
|
+
- **Brand-aware**: gradients should use brand-adjacent colors (analogous on the color wheel).
|
|
206
|
+
|
|
207
|
+
### Atmosphere
|
|
208
|
+
|
|
209
|
+
Solid color backgrounds are fine, but distinctive interfaces add atmosphere:
|
|
210
|
+
|
|
211
|
+
- Subtle film grain (1-3% opacity noise overlay).
|
|
212
|
+
- Soft radial gradient behind hero (off-center, low intensity).
|
|
213
|
+
- Decorative blur shapes positioned outside the main content (subtle, 5-10% opacity).
|
|
214
|
+
- Subtle dot or grid pattern (4-8% opacity).
|
|
215
|
+
- Off-page large type ghost letters (the brand name as decorative background).
|
|
216
|
+
|
|
217
|
+
Atmosphere should be subtle. If it competes with content, dial it down.
|
|
218
|
+
|
|
219
|
+
## Spacing and Composition
|
|
220
|
+
|
|
221
|
+
### Whitespace
|
|
222
|
+
|
|
223
|
+
Generous whitespace reads as confident and high-end. Cramped whitespace reads as utilitarian and dense.
|
|
224
|
+
|
|
225
|
+
Match whitespace to the lane:
|
|
226
|
+
|
|
227
|
+
- **Refined minimal / luxury**: very generous (sections separated by 96-128px).
|
|
228
|
+
- **Editorial**: rhythmic, varied (some tight, some open).
|
|
229
|
+
- **Maximalist**: tight, deliberate density.
|
|
230
|
+
- **Brutalist**: irregular; whitespace is a tool, not a default.
|
|
231
|
+
|
|
232
|
+
### Grids
|
|
233
|
+
|
|
234
|
+
A grid is a constraint. Picking one and breaking it intentionally is the point.
|
|
235
|
+
|
|
236
|
+
- **12-column** is the most flexible default; works for almost everything.
|
|
237
|
+
- **8-column** for tighter, denser layouts.
|
|
238
|
+
- **3, 5, 7** for editorial or asymmetric layouts.
|
|
239
|
+
- **No grid (bento, irregular)** for deliberately distinctive layouts.
|
|
240
|
+
|
|
241
|
+
### Asymmetry and grid-breaking
|
|
242
|
+
|
|
243
|
+
Symmetry is safe and a little boring. Breaking the grid creates visual interest:
|
|
244
|
+
|
|
245
|
+
- A heading that overlaps a column boundary.
|
|
246
|
+
- An image that bleeds off the page edge.
|
|
247
|
+
- A diagonal flow rather than horizontal rows.
|
|
248
|
+
- An element rotated 1-3 degrees.
|
|
249
|
+
|
|
250
|
+
Use sparingly. One grid-break per section, not every section.
|
|
251
|
+
|
|
252
|
+
### Bento grid
|
|
253
|
+
|
|
254
|
+
A modular grid where cards have variable spans (e.g., one large hero card, two half-width cards, four quarter-width cards). Effective for showing multiple features at varying weights. Don't overdo it; bento is its own style and doesn't fit every brand.
|
|
255
|
+
|
|
256
|
+
### Vertical rhythm
|
|
257
|
+
|
|
258
|
+
Lines of text should align to a baseline grid. Set `line-height` so multiples of it create natural rhythm.
|
|
259
|
+
|
|
260
|
+
If your scale is 16px body / 24px line-height, then a 4 or 8 px spacing scale will align naturally to the rhythm.
|
|
261
|
+
|
|
262
|
+
## Elevation and Shadow
|
|
263
|
+
|
|
264
|
+
Shadows convey depth, not decoration. Use a consistent shadow scale.
|
|
265
|
+
|
|
266
|
+
### Light mode
|
|
267
|
+
|
|
268
|
+
| Level | Shadow |
|
|
269
|
+
|-------|--------|
|
|
270
|
+
| Resting card | `0 1px 2px 0 rgba(0,0,0,0.04)` |
|
|
271
|
+
| Hover card | `0 4px 12px -2px rgba(0,0,0,0.08), 0 2px 4px -1px rgba(0,0,0,0.04)` |
|
|
272
|
+
| Modal / overlay | `0 24px 48px -8px rgba(0,0,0,0.18), 0 12px 24px -8px rgba(0,0,0,0.10)` |
|
|
273
|
+
| Popover | `0 8px 24px -4px rgba(0,0,0,0.12), 0 4px 8px -2px rgba(0,0,0,0.06)` |
|
|
274
|
+
|
|
275
|
+
### Dark mode
|
|
276
|
+
|
|
277
|
+
Shadows in dark mode often look fake. Prefer:
|
|
278
|
+
|
|
279
|
+
- Lighter borders to indicate elevation (instead of dark shadows).
|
|
280
|
+
- Subtle glow (1px outset shadow with a low-alpha brand color or white).
|
|
281
|
+
- Higher surface luminance for elevated elements (each elevation step is slightly lighter).
|
|
282
|
+
|
|
283
|
+
### Anti-patterns
|
|
284
|
+
|
|
285
|
+
- Drop shadows on every element.
|
|
286
|
+
- Shadows in random directions (some bottom-right, some bottom-left).
|
|
287
|
+
- Shadows with strong opacity (0.5+) that look like gameplay UI.
|
|
288
|
+
|
|
289
|
+
### Border radius
|
|
290
|
+
|
|
291
|
+
Pick a scale: `0`, `4px`, `8px`, `12px`, `16px`, `24px`, `9999px` (pill).
|
|
292
|
+
|
|
293
|
+
Match to the lane:
|
|
294
|
+
|
|
295
|
+
- **Brutalist**: 0 throughout.
|
|
296
|
+
- **Refined minimal**: 8-12px on cards, 6-8px on buttons, full pill on tags.
|
|
297
|
+
- **Playful**: 16-24px on everything.
|
|
298
|
+
- **Luxury**: 0-4px (sharper).
|
|
299
|
+
|
|
300
|
+
Pick a scale. Use it consistently.
|
|
301
|
+
|
|
302
|
+
## Iconography
|
|
303
|
+
|
|
304
|
+
### Sources
|
|
305
|
+
|
|
306
|
+
| Source | Style |
|
|
307
|
+
|--------|-------|
|
|
308
|
+
| **Lucide** | Refined outline, 1.5px stroke, 24x24 grid. Free, open-source. |
|
|
309
|
+
| **Heroicons** | Outline + Solid + Mini. By the Tailwind team. Free. |
|
|
310
|
+
| **Phosphor** | Six weights from thin to fill. Many use cases. Free. |
|
|
311
|
+
| **Iconoir** | Slightly more characterful outline. Free. |
|
|
312
|
+
| **Tabler** | Largest free set, 24x24, 2px stroke. |
|
|
313
|
+
| **Feather** | Original 24x24 outline (predecessor to Lucide). |
|
|
314
|
+
| **Remix Icon** | Many domains covered. Free. |
|
|
315
|
+
| **Iconjar / Streamline / Untitled UI Icons** | Premium, distinctive. |
|
|
316
|
+
|
|
317
|
+
Pick one set and stay. Don't mix.
|
|
318
|
+
|
|
319
|
+
### Custom icons
|
|
320
|
+
|
|
321
|
+
For brand-distinctive UI, design a small custom icon set in your distinctive style. Even 6-8 custom icons used in heroes/sections elevates a page beyond "Lucide on white".
|
|
322
|
+
|
|
323
|
+
## Imagery and Illustration
|
|
324
|
+
|
|
325
|
+
### Photography
|
|
326
|
+
|
|
327
|
+
- High quality, brand-relevant, original where possible.
|
|
328
|
+
- Consistent treatment (color grade, contrast, crop ratio).
|
|
329
|
+
- Avoid generic stock (the smiling business team in front of a window).
|
|
330
|
+
- Subjects diverse, contexts varied.
|
|
331
|
+
- Portrait photography: directional lighting, intentional background.
|
|
332
|
+
- Product photography: clean, consistent, scaled.
|
|
333
|
+
|
|
334
|
+
### Illustration
|
|
335
|
+
|
|
336
|
+
- Custom > stock illustration packs.
|
|
337
|
+
- Consistent style across the product (one illustrator's hand, or one style guide).
|
|
338
|
+
- Match to the brand. Cheerful illustrations don't fit a serious tool.
|
|
339
|
+
- Don't over-illustrate. One key illustration is more memorable than 12 mediocre ones.
|
|
340
|
+
|
|
341
|
+
### 3D
|
|
342
|
+
|
|
343
|
+
3D rendered objects/scenes are powerful when:
|
|
344
|
+
|
|
345
|
+
- They match the brand.
|
|
346
|
+
- They're rendered at high quality.
|
|
347
|
+
- They serve a purpose (a "tour" of a product, a metaphor).
|
|
348
|
+
|
|
349
|
+
Anti-pattern: a generic 3D blob or low-poly mascot dropped in for visual interest.
|
|
350
|
+
|
|
351
|
+
## Motion and Atmosphere
|
|
352
|
+
|
|
353
|
+
(See [motion.md](motion.md) for the full motion guide.)
|
|
354
|
+
|
|
355
|
+
Aesthetic uses of motion:
|
|
356
|
+
|
|
357
|
+
- One well-orchestrated entrance animation on page load (staggered reveals, hero parallax) creates more delight than scattered micro-interactions everywhere.
|
|
358
|
+
- Subtle ambient motion (a slow gradient shift, a hero element drifting 1-2px) gives the page life without distraction.
|
|
359
|
+
- Hover states with surprise (button text shifts forward, icon swaps direction, card lifts and tilts).
|
|
360
|
+
|
|
361
|
+
Match motion intensity to the lane:
|
|
362
|
+
|
|
363
|
+
- **Brutalist**: minimal motion. Snap transitions.
|
|
364
|
+
- **Refined minimal**: subtle, slow, considered.
|
|
365
|
+
- **Playful**: spring-physics, generous, characterful.
|
|
366
|
+
- **Cyberpunk**: glitch, scan, jitter.
|
|
367
|
+
|
|
368
|
+
## Layout Patterns That Read as "Designed"
|
|
369
|
+
|
|
370
|
+
Versus the AI default of "centered three cards over hero text with gradient":
|
|
371
|
+
|
|
372
|
+
- **Asymmetric hero** with the heading on the left and a visual on the right (or vice versa).
|
|
373
|
+
- **Editorial split** with content on the left third, large image on the right two-thirds.
|
|
374
|
+
- **Bento grid features** with variable card sizes.
|
|
375
|
+
- **Side-scrolling features** with a fixed left column and horizontally scrolling cards on the right.
|
|
376
|
+
- **Diagonal flow** sections (alternating left-aligned and right-aligned content).
|
|
377
|
+
- **Overlapping hero elements** where the visual partially covers the heading.
|
|
378
|
+
- **Decorative type** as a section divider (a giant ghost letterform behind the section).
|
|
379
|
+
- **Sticky aside with active section indicator** (long content with side nav).
|
|
380
|
+
- **Horizontal timeline** for narrative content.
|
|
381
|
+
- **Step-by-step mockup** showing the product changing state across the page.
|
|
382
|
+
|
|
383
|
+
## Dark Mode
|
|
384
|
+
|
|
385
|
+
### Don't invert
|
|
386
|
+
|
|
387
|
+
Inverting a light-mode design rarely works. Plan dark mode as its own design pass.
|
|
388
|
+
|
|
389
|
+
### Surfaces
|
|
390
|
+
|
|
391
|
+
- Background: deep, slightly tinted (not pure black, not pure gray). E.g., `#0B0B0F` or `#0F1117`.
|
|
392
|
+
- Surfaces are slightly lighter than the background (not the inverse of light mode).
|
|
393
|
+
- Multiple elevation levels by lightening, not by shadow.
|
|
394
|
+
|
|
395
|
+
### Brand color in dark
|
|
396
|
+
|
|
397
|
+
The brand primary often needs to be lighter and slightly desaturated in dark mode. Test contrast.
|
|
398
|
+
|
|
399
|
+
### Imagery
|
|
400
|
+
|
|
401
|
+
Photography in dark mode often needs a slight darken or color grade to feel cohesive. Illustrations may need dark-mode variants.
|
|
402
|
+
|
|
403
|
+
### State indicators
|
|
404
|
+
|
|
405
|
+
Borders, focus rings, hover states all need separate planning in dark mode.
|
|
406
|
+
|
|
407
|
+
## Brand Expression
|
|
408
|
+
|
|
409
|
+
The hardest design decision: how much brand to show.
|
|
410
|
+
|
|
411
|
+
### Restraint
|
|
412
|
+
|
|
413
|
+
Apple-like products are mostly neutral with brand appearing rarely (logo, accent CTAs). Lets product content be the hero.
|
|
414
|
+
|
|
415
|
+
### Expression
|
|
416
|
+
|
|
417
|
+
Notion or Linear: brand color in CTAs and key surfaces, decorative brand elements present but not dominant.
|
|
418
|
+
|
|
419
|
+
### Saturation
|
|
420
|
+
|
|
421
|
+
Indie or DTC: brand expressed everywhere, high saturation, distinctive type. The product is the brand.
|
|
422
|
+
|
|
423
|
+
Pick a level and commit. Mid-level brand expression often reads as confused.
|
|
424
|
+
|
|
425
|
+
## Voice
|
|
426
|
+
|
|
427
|
+
Visual design and verbal voice must match.
|
|
428
|
+
|
|
429
|
+
- **Refined**: precise, considered, never gimmicky.
|
|
430
|
+
- **Editorial**: thoughtful, well-written, references.
|
|
431
|
+
- **Playful**: human, warm, occasionally winking.
|
|
432
|
+
- **Industrial**: technical, accurate, terse.
|
|
433
|
+
- **Cyberpunk**: edgy, punchy, knows the audience.
|
|
434
|
+
|
|
435
|
+
Mismatched voice and visual is the biggest tell that a design is unfinished.
|
|
436
|
+
|
|
437
|
+
## Atmospheric Details
|
|
438
|
+
|
|
439
|
+
These are the small things that elevate a "fine" design to "considered".
|
|
440
|
+
|
|
441
|
+
- A custom cursor on a hero or feature surface (used sparingly; never globally).
|
|
442
|
+
- Hover-reveal of a hidden detail (a tiny annotation appearing on a chart hover).
|
|
443
|
+
- A delightful 404 page with a working interaction.
|
|
444
|
+
- A hand-coded animation in the empty state (not a stock Lottie).
|
|
445
|
+
- A custom illustration in the onboarding.
|
|
446
|
+
- A unique scroll-progress indicator.
|
|
447
|
+
- A custom selection color matching the brand.
|
|
448
|
+
- A signature link underline (animated thickness, custom dash, or position).
|
|
449
|
+
- Custom error illustrations.
|
|
450
|
+
- Carefully written microcopy with personality.
|
|
451
|
+
|
|
452
|
+
A brand is the sum of its details. The design ecosystem reads "considered" when at least 5-10 of these details exist.
|
|
453
|
+
|
|
454
|
+
## Reference Comparison Heuristics
|
|
455
|
+
|
|
456
|
+
When polishing an existing site against a reference (live URL, design export, prior production), use these tests to judge whether the audited surface meets the reference's level of discipline. Each test is a yes-or-no judgment supported by captured screenshots at both audit viewports.
|
|
457
|
+
|
|
458
|
+
1. First viewport has a clear hierarchy and does not feel accidental.
|
|
459
|
+
2. The brand or product is visible immediately when relevant.
|
|
460
|
+
3. The next section peeks intentionally rather than crowding the hero.
|
|
461
|
+
4. Repeated cards in a row align on top edges, bottom edges, and CTA baselines.
|
|
462
|
+
5. Text blocks have readable line lengths and consistent rhythm.
|
|
463
|
+
6. Labels, eyebrows, and badges use one visual language.
|
|
464
|
+
7. Buttons use one size system and one radius system.
|
|
465
|
+
8. Icons sit optically centered, not just mathematically centered.
|
|
466
|
+
9. Borders are subtle and consistent.
|
|
467
|
+
10. Shadows support hierarchy but do not muddy the palette.
|
|
468
|
+
11. Alternate background bands feel deliberate.
|
|
469
|
+
12. Mobile layout feels designed, not merely stacked.
|
|
470
|
+
13. Footer spacing is calmer than the body, with no stray gaps or cramped links.
|
|
471
|
+
14. Empty states, legal pages, and 404 pages share the same polish as marketing pages.
|
|
472
|
+
15. Same-family widgets look like members of one system across pages.
|
|
473
|
+
16. Variants are recognizably intentional, not accidental drift.
|
|
474
|
+
|
|
475
|
+
A site at reference level passes every test. A site at "fine" level fails three or more. Authoritative use lives in the multi-page polish workflow at [audit-workflow.md](audit-workflow.md) Phase 16; this section is a lookup for design review outside that workflow.
|
|
476
|
+
|
|
477
|
+
## Common Design Mistakes
|
|
478
|
+
|
|
479
|
+
- Two similar sans-serifs paired (no contrast).
|
|
480
|
+
- Centered everything (nothing leads the eye).
|
|
481
|
+
- Equal-weight feature cards (no hierarchy).
|
|
482
|
+
- Random spacing values (no rhythm).
|
|
483
|
+
- Mixing icon styles (loses cohesion).
|
|
484
|
+
- Drop shadows in random directions.
|
|
485
|
+
- Multiple gradient buttons of different colors.
|
|
486
|
+
- Light mode and dark mode designed at the same time as inversions.
|
|
487
|
+
- Decoration that distracts from content.
|
|
488
|
+
- Stock illustrations from the same pack everyone uses.
|
|
489
|
+
- A surface where every section has the same layout (visual monotony).
|
|
490
|
+
- A surface where every section has a different layout (visual chaos).
|
|
491
|
+
|
|
492
|
+
## Self-Healing for Design
|
|
493
|
+
|
|
494
|
+
Before declaring work complete:
|
|
495
|
+
|
|
496
|
+
- [ ] One aesthetic lane chosen and visible throughout
|
|
497
|
+
- [ ] Maximum 2 type families, 4 weights, distinctive choices
|
|
498
|
+
- [ ] One dominant color, 1-2 accents, semantic tokens defined
|
|
499
|
+
- [ ] Spacing scale chosen and used consistently
|
|
500
|
+
- [ ] Border-radius scale chosen and used consistently
|
|
501
|
+
- [ ] Shadow/elevation scale chosen and used consistently
|
|
502
|
+
- [ ] Iconography from one source, one stroke width, consistent sizes
|
|
503
|
+
- [ ] Light AND dark mode designed independently
|
|
504
|
+
- [ ] Motion language consistent (timing, easing, scope)
|
|
505
|
+
- [ ] At least one section breaks the safe centered layout
|
|
506
|
+
- [ ] At least 3-5 atmospheric details that wouldn't appear in an AI-default page
|
|
507
|
+
- [ ] Voice matches visual
|
|
508
|
+
|
|
509
|
+
## See Also
|
|
510
|
+
|
|
511
|
+
- [ui-ux.md](ui-ux.md) for the functional rules
|
|
512
|
+
- [motion.md](motion.md) for motion language
|
|
513
|
+
- [responsive.md](responsive.md) for layout systems
|