@ericrisco/rsc 3.3.1 → 3.4.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 +2 -2
- package/manifest.json +43 -22
- package/package.json +1 -1
- package/scripts/lib/default-skill-floor.js +5 -1
- package/scripts/lib/domains.js +2 -2
- package/scripts/lib/retired-skills.js +4 -0
- package/skills/design/SKILL.md +4 -3
- package/skills/design/evals/cases.yaml +2 -2
- package/skills/react/SKILL.md +2 -1
- package/skills/ux/SKILL.md +149 -0
- package/skills/ux/THIRD_PARTY.md +32 -0
- package/skills/ux/evals/cases.yaml +40 -0
- package/skills/ux/references/flows.md +124 -0
- package/skills/ux/upstream/UPSTREAM.json +59 -0
- package/skills/ux/upstream/ux-designer/GUIDE.md +180 -0
- package/skills/ux/upstream/ux-designer/LICENSE +21 -0
- package/skills/ux/upstream/ux-designer/references/01-core-principles.md +251 -0
- package/skills/ux/upstream/ux-designer/references/02-laws-of-ux.md +330 -0
- package/skills/ux/upstream/ux-designer/references/03-accessibility.md +411 -0
- package/skills/ux/upstream/ux-designer/references/04-visual-design.md +433 -0
- package/skills/ux/upstream/ux-designer/references/05-information-architecture.md +432 -0
- package/skills/ux/upstream/ux-designer/references/06-interaction-design.md +495 -0
- package/skills/ux/upstream/ux-designer/references/07-forms-and-inputs.md +491 -0
- package/skills/ux/upstream/ux-designer/references/08-mobile-ux.md +539 -0
- package/skills/ux/upstream/ux-designer/references/09-ux-writing.md +493 -0
- package/skills/ux/upstream/ux-designer/references/10-user-research.md +533 -0
- package/skills/ux/upstream/ux-designer/references/11-design-systems.md +618 -0
- package/skills/ux/upstream/ux-designer/references/12a-presence-awareness.md +395 -0
- package/skills/ux/upstream/ux-designer/references/12b-conflict-resolution-sync.md +420 -0
- package/skills/ux/upstream/ux-designer/references/13a-canvas-navigation.md +388 -0
- package/skills/ux/upstream/ux-designer/references/13b-canvas-objects-performance.md +559 -0
- package/skills/ux/upstream/ux-designer/references/14-ai-ux-patterns.md +511 -0
- package/skills/ux/upstream/ux-designer/references/15-ethical-design.md +419 -0
- package/skills/ux/upstream/ux-designer/references/16-onboarding.md +430 -0
- package/skills/ux/upstream/ux-designer/references/17-notifications.md +461 -0
- package/skills/ux/upstream/ux-designer/references/18-data-visualization.md +453 -0
- package/skills/ux/upstream/ux-designer/references/19-search-ux.md +479 -0
- package/skills/ux/upstream/ux-designer/references/20-emotional-design.md +382 -0
- package/skills/ux/upstream/ux-designer/references/21-data-tables.md +629 -0
- package/skills/ux/upstream/ux-designer/references/22-performance-ux.md +626 -0
- package/skills/ux/upstream/ux-designer/references/23-internationalization.md +347 -0
- package/skills/ux/upstream/ux-designer/references/24-voice-and-multimodal.md +308 -0
- package/skills/ux/upstream/ux-designer/references/25a-barcode-camera-scanning.md +342 -0
- package/skills/ux/upstream/ux-designer/references/25b-barcode-scanner-workflows.md +412 -0
- package/skills/ux/upstream/ux-designer/references/25c-barcode-display.md +277 -0
- package/skills/ux/upstream/ux-usability-foundations/GUIDE.md +285 -0
- package/skills/ux/upstream/ux-usability-foundations/LICENSE +21 -0
- package/skills/ux/upstream/ux-usability-foundations/references/anti-patterns.md +267 -0
- package/skills/ux/upstream/ux-usability-foundations/references/checklists.md +130 -0
- package/skills/ux/upstream/ux-usability-foundations/references/decision-prompts.md +340 -0
- package/skills/ux/upstream/ux-usability-foundations/references/principle-cards.md +449 -0
- package/targets/clone-bootstrap.mjs +1 -1
- package/skills/ui-engineering/SKILL.md +0 -113
- package/skills/ui-engineering/evals/cases.yaml +0 -38
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
# Visual Design
|
|
2
|
+
|
|
3
|
+
Visual design encompasses color theory, typography, layout, and the principles that make interfaces aesthetically pleasing and functional.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
- Color Theory
|
|
10
|
+
- Typography
|
|
11
|
+
- Visual Hierarchy
|
|
12
|
+
- Whitespace and Spacing
|
|
13
|
+
- Layout Principles
|
|
14
|
+
- 2026 Trends
|
|
15
|
+
- Tools and Resources
|
|
16
|
+
- Sources
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Color Theory
|
|
21
|
+
|
|
22
|
+
### Color Psychology
|
|
23
|
+
|
|
24
|
+
Colors evoke specific emotions and influence user behavior.
|
|
25
|
+
|
|
26
|
+
| Color | Associations | Common Uses |
|
|
27
|
+
|-------|--------------|-------------|
|
|
28
|
+
| **Red** | Energy, urgency, passion, danger | Errors, sales, CTAs |
|
|
29
|
+
| **Orange** | Enthusiasm, creativity, warmth | Notifications, CTAs |
|
|
30
|
+
| **Yellow** | Optimism, warning, attention | Warnings, highlights |
|
|
31
|
+
| **Green** | Growth, success, nature, calm | Success states, eco themes |
|
|
32
|
+
| **Blue** | Trust, stability, professionalism | Corporate, tech, links |
|
|
33
|
+
| **Purple** | Luxury, creativity, mystery | Premium products |
|
|
34
|
+
| **Pink** | Playful, romantic, youthful | Fashion, lifestyle |
|
|
35
|
+
| **Black** | Sophistication, power, elegance | Luxury, fashion |
|
|
36
|
+
| **White** | Purity, simplicity, cleanliness | Minimalist designs |
|
|
37
|
+
| **Gray** | Neutral, professional, balanced | Backgrounds, borders |
|
|
38
|
+
|
|
39
|
+
### The 60-30-10 Rule
|
|
40
|
+
|
|
41
|
+
A balanced color palette distribution:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
60% - Dominant color (backgrounds, large areas)
|
|
45
|
+
30% - Secondary color (supporting elements)
|
|
46
|
+
10% - Accent color (CTAs, highlights)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Example:**
|
|
50
|
+
```css
|
|
51
|
+
:root {
|
|
52
|
+
--color-dominant: #ffffff; /* 60% - Background */
|
|
53
|
+
--color-secondary: #f5f5f5; /* 30% - Cards, sections */
|
|
54
|
+
--color-accent: #0066cc; /* 10% - Buttons, links */
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Color Harmonies
|
|
59
|
+
|
|
60
|
+
| Harmony | Description | Use Case |
|
|
61
|
+
|---------|-------------|----------|
|
|
62
|
+
| **Monochromatic** | Shades of one hue | Clean, cohesive |
|
|
63
|
+
| **Complementary** | Opposite on color wheel | High contrast, vibrant |
|
|
64
|
+
| **Analogous** | Adjacent on wheel | Harmonious, natural |
|
|
65
|
+
| **Triadic** | Three equidistant colors | Balanced, dynamic |
|
|
66
|
+
| **Split-complementary** | Base + two adjacent to complement | Vibrant but balanced |
|
|
67
|
+
|
|
68
|
+
### Contrast for Accessibility
|
|
69
|
+
|
|
70
|
+
```css
|
|
71
|
+
/* WCAG 2.2 Requirements */
|
|
72
|
+
|
|
73
|
+
/* Normal text (< 18pt) */
|
|
74
|
+
/* Minimum contrast: 4.5:1 (AA), 7:1 (AAA) */
|
|
75
|
+
|
|
76
|
+
/* Large text (≥ 18pt or 14pt bold) */
|
|
77
|
+
/* Minimum contrast: 3:1 (AA), 4.5:1 (AAA) */
|
|
78
|
+
|
|
79
|
+
/* UI Components */
|
|
80
|
+
/* Minimum contrast: 3:1 */
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Colorblind-Safe Design
|
|
84
|
+
|
|
85
|
+
~8% of men and ~0.5% of women have color vision deficiency.
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Best Practices:
|
|
89
|
+
- Don't use color alone to convey meaning
|
|
90
|
+
- Add icons, patterns, or text labels
|
|
91
|
+
- Test with colorblind simulation tools
|
|
92
|
+
- Use sufficient contrast between colors
|
|
93
|
+
- Avoid red/green combinations for critical info
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Dark Mode Considerations
|
|
97
|
+
|
|
98
|
+
```css
|
|
99
|
+
/* Use CSS custom properties for theming */
|
|
100
|
+
:root {
|
|
101
|
+
--bg-primary: #ffffff;
|
|
102
|
+
--text-primary: #1a1a1a;
|
|
103
|
+
--accent: #0066cc;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@media (prefers-color-scheme: dark) {
|
|
107
|
+
:root {
|
|
108
|
+
--bg-primary: #1a1a1a;
|
|
109
|
+
--text-primary: #f5f5f5;
|
|
110
|
+
--accent: #66b3ff;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* Reduce contrast slightly in dark mode */
|
|
115
|
+
/* Pure white (#fff) on black (#000) can cause eye strain */
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Typography
|
|
121
|
+
|
|
122
|
+
### Font Selection
|
|
123
|
+
|
|
124
|
+
**Categories:**
|
|
125
|
+
- **Sans-serif:** Clean, modern, screen-friendly (Roboto, Inter, SF Pro)
|
|
126
|
+
- **Serif:** Traditional, authoritative, editorial (Georgia, Merriweather)
|
|
127
|
+
- **Monospace:** Technical, code, data (Fira Code, JetBrains Mono)
|
|
128
|
+
|
|
129
|
+
**Guidelines:**
|
|
130
|
+
- Limit to 2-3 typefaces maximum
|
|
131
|
+
- Use web-safe fonts or system fonts for performance
|
|
132
|
+
- Consider font loading strategy (FOUT, FOIT)
|
|
133
|
+
|
|
134
|
+
```css
|
|
135
|
+
/* System font stack for performance */
|
|
136
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI',
|
|
137
|
+
Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Size Scale
|
|
141
|
+
|
|
142
|
+
```css
|
|
143
|
+
/* Type scale with 1.25 ratio (Major Third) */
|
|
144
|
+
:root {
|
|
145
|
+
--text-xs: 0.75rem; /* 12px - Captions */
|
|
146
|
+
--text-sm: 0.875rem; /* 14px - Small text */
|
|
147
|
+
--text-base: 1rem; /* 16px - Body (minimum) */
|
|
148
|
+
--text-lg: 1.25rem; /* 20px - Large body */
|
|
149
|
+
--text-xl: 1.5rem; /* 24px - H3 */
|
|
150
|
+
--text-2xl: 2rem; /* 32px - H2 */
|
|
151
|
+
--text-3xl: 2.5rem; /* 40px - H1 */
|
|
152
|
+
--text-4xl: 3rem; /* 48px - Display */
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Minimum sizes:**
|
|
157
|
+
- Body text: 16px
|
|
158
|
+
- Mobile body: 16px (prevents zoom on iOS)
|
|
159
|
+
- Small text: 12px (use sparingly)
|
|
160
|
+
|
|
161
|
+
### Line Height
|
|
162
|
+
|
|
163
|
+
```css
|
|
164
|
+
/* Optimal line heights */
|
|
165
|
+
body {
|
|
166
|
+
line-height: 1.5; /* 1.4-1.6 for body text */
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
h1, h2, h3 {
|
|
170
|
+
line-height: 1.2; /* Tighter for headings */
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.compact {
|
|
174
|
+
line-height: 1.3; /* UI elements, buttons */
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Line Length
|
|
179
|
+
|
|
180
|
+
Optimal reading: **50-75 characters per line**
|
|
181
|
+
|
|
182
|
+
```css
|
|
183
|
+
/* Constrain line length */
|
|
184
|
+
.prose {
|
|
185
|
+
max-width: 65ch; /* ~65 characters */
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* Alternatively */
|
|
189
|
+
.content {
|
|
190
|
+
max-width: 700px;
|
|
191
|
+
padding: 0 1rem;
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Text Alignment
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
Left-aligned (default):
|
|
199
|
+
- Best for readability
|
|
200
|
+
- Consistent starting point
|
|
201
|
+
- Recommended for body text
|
|
202
|
+
|
|
203
|
+
Center-aligned:
|
|
204
|
+
- Short text only (headlines, CTAs)
|
|
205
|
+
- Creates visual anchor
|
|
206
|
+
|
|
207
|
+
Right-aligned:
|
|
208
|
+
- Numbers in tables
|
|
209
|
+
- RTL languages
|
|
210
|
+
- Avoid for body text
|
|
211
|
+
|
|
212
|
+
Justified:
|
|
213
|
+
- Creates uneven word spacing
|
|
214
|
+
- Avoid for web (no hyphenation)
|
|
215
|
+
- WCAG discourages for accessibility
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Fluid Typography
|
|
219
|
+
|
|
220
|
+
```css
|
|
221
|
+
/* Responsive font sizes with clamp() */
|
|
222
|
+
h1 {
|
|
223
|
+
font-size: clamp(2rem, 5vw + 1rem, 4rem);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
body {
|
|
227
|
+
font-size: clamp(1rem, 2.5vw, 1.25rem);
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Visual Hierarchy
|
|
234
|
+
|
|
235
|
+
### Establishing Hierarchy
|
|
236
|
+
|
|
237
|
+
1. **Size** - Larger = more important
|
|
238
|
+
2. **Weight** - Bolder = more important
|
|
239
|
+
3. **Color** - Contrast draws attention
|
|
240
|
+
4. **Position** - Top/left (LTR) = primary
|
|
241
|
+
5. **Space** - Isolation = emphasis
|
|
242
|
+
6. **Depth** - Shadows, layers
|
|
243
|
+
|
|
244
|
+
### Heading Hierarchy
|
|
245
|
+
|
|
246
|
+
```html
|
|
247
|
+
<!-- Single H1 per page -->
|
|
248
|
+
<h1>Page Title</h1>
|
|
249
|
+
<h2>Section</h2>
|
|
250
|
+
<h3>Subsection</h3>
|
|
251
|
+
<h4>Detail</h4>
|
|
252
|
+
<h2>Another Section</h2>
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Visual Weight
|
|
256
|
+
|
|
257
|
+
```css
|
|
258
|
+
/* Primary action - highest weight */
|
|
259
|
+
.btn-primary {
|
|
260
|
+
background: var(--accent);
|
|
261
|
+
color: white;
|
|
262
|
+
font-weight: 600;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* Secondary action - medium weight */
|
|
266
|
+
.btn-secondary {
|
|
267
|
+
background: transparent;
|
|
268
|
+
border: 2px solid var(--accent);
|
|
269
|
+
color: var(--accent);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* Tertiary action - lowest weight */
|
|
273
|
+
.btn-tertiary {
|
|
274
|
+
background: transparent;
|
|
275
|
+
color: var(--accent);
|
|
276
|
+
text-decoration: underline;
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Whitespace and Spacing
|
|
283
|
+
|
|
284
|
+
### The Role of Whitespace
|
|
285
|
+
|
|
286
|
+
- **Breathing room** - Reduces visual clutter
|
|
287
|
+
- **Grouping** - Related items closer together
|
|
288
|
+
- **Focus** - Isolation creates emphasis
|
|
289
|
+
- **Readability** - Improves comprehension
|
|
290
|
+
|
|
291
|
+
### Spacing Scale
|
|
292
|
+
|
|
293
|
+
```css
|
|
294
|
+
/* Consistent spacing scale */
|
|
295
|
+
:root {
|
|
296
|
+
--space-xs: 0.25rem; /* 4px */
|
|
297
|
+
--space-sm: 0.5rem; /* 8px */
|
|
298
|
+
--space-md: 1rem; /* 16px */
|
|
299
|
+
--space-lg: 1.5rem; /* 24px */
|
|
300
|
+
--space-xl: 2rem; /* 32px */
|
|
301
|
+
--space-2xl: 3rem; /* 48px */
|
|
302
|
+
--space-3xl: 4rem; /* 64px */
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Applying Spacing
|
|
307
|
+
|
|
308
|
+
```css
|
|
309
|
+
/* Consistent component spacing */
|
|
310
|
+
.card {
|
|
311
|
+
padding: var(--space-lg);
|
|
312
|
+
margin-bottom: var(--space-xl);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/* Related items closer */
|
|
316
|
+
.form-field label {
|
|
317
|
+
margin-bottom: var(--space-xs);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/* Distinct sections further */
|
|
321
|
+
.section + .section {
|
|
322
|
+
margin-top: var(--space-3xl);
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Layout Principles
|
|
329
|
+
|
|
330
|
+
### Grid Systems
|
|
331
|
+
|
|
332
|
+
```css
|
|
333
|
+
/* CSS Grid for page layout */
|
|
334
|
+
.page {
|
|
335
|
+
display: grid;
|
|
336
|
+
grid-template-columns: repeat(12, 1fr);
|
|
337
|
+
gap: var(--space-lg);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/* Flexbox for component layout */
|
|
341
|
+
.card-grid {
|
|
342
|
+
display: flex;
|
|
343
|
+
flex-wrap: wrap;
|
|
344
|
+
gap: var(--space-md);
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Responsive Breakpoints
|
|
349
|
+
|
|
350
|
+
```css
|
|
351
|
+
/* Mobile-first breakpoints */
|
|
352
|
+
/* Base: Mobile (< 640px) */
|
|
353
|
+
|
|
354
|
+
@media (min-width: 640px) {
|
|
355
|
+
/* Tablet portrait */
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
@media (min-width: 768px) {
|
|
359
|
+
/* Tablet landscape */
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
@media (min-width: 1024px) {
|
|
363
|
+
/* Desktop */
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
@media (min-width: 1280px) {
|
|
367
|
+
/* Large desktop */
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Content Alignment
|
|
372
|
+
|
|
373
|
+
```css
|
|
374
|
+
/* Center content with max-width */
|
|
375
|
+
.container {
|
|
376
|
+
width: 100%;
|
|
377
|
+
max-width: 1200px;
|
|
378
|
+
margin: 0 auto;
|
|
379
|
+
padding: 0 var(--space-md);
|
|
380
|
+
}
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## 2026 Trends
|
|
386
|
+
|
|
387
|
+
### AI-Adaptive Interfaces
|
|
388
|
+
- Colors and layouts that adjust based on user behavior
|
|
389
|
+
- Personalized visual preferences
|
|
390
|
+
- Context-aware theming
|
|
391
|
+
|
|
392
|
+
### Warm, Soft Colors
|
|
393
|
+
- Moving away from stark whites
|
|
394
|
+
- Beige, pale pink, peach tones
|
|
395
|
+
- Psychologically inviting
|
|
396
|
+
|
|
397
|
+
### Fluid Design
|
|
398
|
+
- Dynamic, responsive everything
|
|
399
|
+
- Container queries
|
|
400
|
+
- Fluid spacing and typography
|
|
401
|
+
|
|
402
|
+
### Glassmorphism (Continued)
|
|
403
|
+
- Frosted glass effects
|
|
404
|
+
- Subtle transparency
|
|
405
|
+
- Depth through blur
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Tools and Resources
|
|
410
|
+
|
|
411
|
+
### Color
|
|
412
|
+
- [Coolors](https://coolors.co/) - Palette generator
|
|
413
|
+
- [Adobe Color](https://color.adobe.com/) - Color wheel
|
|
414
|
+
- [Contrast Checker](https://webaim.org/resources/contrastchecker/)
|
|
415
|
+
|
|
416
|
+
### Typography
|
|
417
|
+
- [Type Scale](https://type-scale.com/) - Visual calculator
|
|
418
|
+
- [Fontpair](https://fontpair.co/) - Font combinations
|
|
419
|
+
- [Google Fonts](https://fonts.google.com/)
|
|
420
|
+
|
|
421
|
+
### Design Systems
|
|
422
|
+
- [Tailwind UI](https://tailwindui.com/)
|
|
423
|
+
- [Material Design](https://m3.material.io/)
|
|
424
|
+
- [Apple HIG](https://developer.apple.com/design/)
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## Sources
|
|
429
|
+
|
|
430
|
+
- [Smashing Magazine - Color Psychology](https://www.smashingmagazine.com/)
|
|
431
|
+
- [Interaction Design Foundation - Typography](https://www.interaction-design.org/)
|
|
432
|
+
- [Practical Typography](https://practicaltypography.com/)
|
|
433
|
+
- [Refactoring UI](https://www.refactoringui.com/)
|