telo3-ai 5.0.7 → 6.2.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 +32 -791
- package/SKILL.md +36 -657
- package/bootstrap/TELO3.md +17 -0
- package/cli.js +223 -42
- package/hooks/inject-contract.mjs +23 -0
- package/hooks/session-start.example.json +15 -0
- package/index.js +48 -14
- package/package.json +32 -69
- package/references/accessibility-quality.md +92 -272
- package/references/ai-behavior.md +70 -332
- package/references/anti-slop.md +71 -0
- package/references/document-specification.md +110 -419
- package/references/legal-compliance.md +90 -395
- package/references/performance-quality.md +100 -351
- package/references/privacy-compliance.md +88 -464
- package/references/project-audit.md +79 -440
- package/references/security-quality.md +68 -220
- package/references/seo-quality.md +83 -339
- package/references/smart-skill-delegation.md +73 -419
- package/references/token-optimization.md +83 -450
- package/references/ui-quality.md +106 -481
- package/references/workflow.md +91 -447
- package/scripts/postinstall.mjs +27 -0
- package/src/activate.js +159 -0
- package/src/context.js +72 -0
- package/src/find-context.js +41 -0
- package/src/init.js +38 -0
- package/src/install.js +128 -0
- package/src/paths.js +20 -0
- package/src/status.js +30 -0
- package/src/tokens.js +10 -0
- package/src/validate.js +220 -0
- package/src/version.js +12 -0
- package/templates/architecture.md +17 -398
- package/templates/design.md +22 -631
- package/templates/memory.md +13 -351
- package/templates/prd.md +15 -295
- package/templates/rules.md +20 -600
- package/templates/tasks.md +10 -210
- package/AI-CONTEXT.md +0 -272
- package/ONBOARDING-SKILL.md +0 -738
- package/SKILL-METADATA.json +0 -237
- package/scripts/init-project-context.sh +0 -139
- package/scripts/validate-project-context.sh +0 -164
- package/skills/telo3/SKILL.md +0 -315
- package/skills/telo3-context/SKILL.md +0 -272
- package/skills/telo3-onboarding/SKILL.md +0 -738
package/templates/design.md
CHANGED
|
@@ -1,654 +1,45 @@
|
|
|
1
|
-
|
|
1
|
+
<!-- Lean skeleton. The visual/UX contract. Follow it before inventing UI.
|
|
2
|
+
Avoid generic AI aesthetics unless this design system justifies them. -->
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
> **Last Updated:** [Date]
|
|
5
|
-
|
|
6
|
-
---
|
|
4
|
+
# Design System — [Project Name]
|
|
7
5
|
|
|
8
6
|
## Design Philosophy
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
[What drives design decisions in this product?]
|
|
12
|
-
|
|
13
|
-
- **[Principle 1]:** [e.g., "Clarity over cleverness"]
|
|
14
|
-
- **[Principle 2]:** [e.g., "Consistency creates trust"]
|
|
15
|
-
- **[Principle 3]:** [e.g., "Performance is a feature"]
|
|
16
|
-
|
|
17
|
-
### Brand Personality
|
|
18
|
-
[How should the product feel?]
|
|
19
|
-
|
|
20
|
-
- **[Trait 1]:** [e.g., "Professional but approachable"]
|
|
21
|
-
- **[Trait 2]:** [e.g., "Modern without being trendy"]
|
|
22
|
-
- **[Trait 3]:** [e.g., "Calm and confident"]
|
|
23
|
-
|
|
24
|
-
### Design Priorities
|
|
25
|
-
1. [Priority 1: e.g., "Accessibility"]
|
|
26
|
-
2. [Priority 2: e.g., "Performance"]
|
|
27
|
-
3. [Priority 3: e.g., "Visual consistency"]
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Color System
|
|
32
|
-
|
|
33
|
-
### Primary Colors
|
|
34
|
-
[Main brand colors used for primary actions and branding]
|
|
35
|
-
|
|
36
|
-
```css
|
|
37
|
-
--color-primary: #[HEX]; /* Primary brand color */
|
|
38
|
-
--color-primary-hover: #[HEX]; /* Hover state */
|
|
39
|
-
--color-primary-active: #[HEX]; /* Active/pressed state */
|
|
40
|
-
--color-primary-foreground: #[HEX]; /* Text on primary */
|
|
41
|
-
```
|
|
8
|
+
[TODO: brand personality, the feeling the UI should give, 2-3 principles.]
|
|
42
9
|
|
|
43
|
-
|
|
10
|
+
## Colors
|
|
44
11
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
```
|
|
12
|
+
| Token | Value | Use |
|
|
13
|
+
|-------|-------|-----|
|
|
14
|
+
| primary | [TODO] | [TODO] |
|
|
15
|
+
| background | [TODO] | [TODO] |
|
|
16
|
+
| text | [TODO] | [TODO] |
|
|
51
17
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
### Neutral Colors
|
|
55
|
-
[Grays for text, borders, backgrounds]
|
|
56
|
-
|
|
57
|
-
```css
|
|
58
|
-
--color-background: #[HEX]; /* Page background */
|
|
59
|
-
--color-foreground: #[HEX]; /* Primary text */
|
|
60
|
-
--color-muted: #[HEX]; /* Muted background */
|
|
61
|
-
--color-muted-foreground: #[HEX]; /* Muted text */
|
|
62
|
-
--color-border: #[HEX]; /* Borders, dividers */
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Semantic Colors
|
|
66
|
-
[Colors that convey meaning]
|
|
67
|
-
|
|
68
|
-
```css
|
|
69
|
-
--color-success: #[HEX]; /* Success states, positive */
|
|
70
|
-
--color-warning: #[HEX]; /* Warning, caution */
|
|
71
|
-
--color-error: #[HEX]; /* Error, destructive */
|
|
72
|
-
--color-info: #[HEX]; /* Informational */
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Color Accessibility
|
|
76
|
-
- All text meets WCAG AA contrast requirements (4.5:1 for normal text, 3:1 for large text)
|
|
77
|
-
- Primary actions meet WCAG AAA when possible (7:1)
|
|
78
|
-
- Color is never the only way to convey information
|
|
79
|
-
|
|
80
|
-
---
|
|
18
|
+
[TODO: contrast — text ≥ 4.5:1, large text/UI ≥ 3:1 (WCAG AA).]
|
|
81
19
|
|
|
82
20
|
## Typography
|
|
83
21
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
**Primary Font (UI):**
|
|
87
|
-
```css
|
|
88
|
-
--font-sans: [Font name], system-ui, sans-serif;
|
|
89
|
-
```
|
|
90
|
-
**Usage:** Body text, UI elements, most content
|
|
91
|
-
|
|
92
|
-
**Secondary Font (Headings):** [Optional]
|
|
93
|
-
```css
|
|
94
|
-
--font-display: [Font name], serif;
|
|
95
|
-
```
|
|
96
|
-
**Usage:** Headings, hero sections, emphasis
|
|
97
|
-
|
|
98
|
-
**Monospace Font (Code):**
|
|
99
|
-
```css
|
|
100
|
-
--font-mono: [Font name], 'Courier New', monospace;
|
|
101
|
-
```
|
|
102
|
-
**Usage:** Code blocks, technical content
|
|
103
|
-
|
|
104
|
-
### Font Loading
|
|
105
|
-
- **Method:** [e.g., Next.js font optimization, self-hosted, Google Fonts]
|
|
106
|
-
- **Privacy consideration:** [e.g., "Self-hosted to avoid third-party requests"]
|
|
107
|
-
|
|
108
|
-
### Type Scale
|
|
109
|
-
[Font sizes with purpose]
|
|
110
|
-
|
|
111
|
-
| Token | Size | Line Height | Usage |
|
|
112
|
-
|-------|------|-------------|-------|
|
|
113
|
-
| `text-xs` | 0.75rem (12px) | 1rem | Fine print, labels |
|
|
114
|
-
| `text-sm` | 0.875rem (14px) | 1.25rem | Small body text |
|
|
115
|
-
| `text-base` | 1rem (16px) | 1.5rem | Body text |
|
|
116
|
-
| `text-lg` | 1.125rem (18px) | 1.75rem | Lead paragraphs |
|
|
117
|
-
| `text-xl` | 1.25rem (20px) | 1.75rem | Section headings |
|
|
118
|
-
| `text-2xl` | 1.5rem (24px) | 2rem | Page headings |
|
|
119
|
-
| `text-3xl` | 1.875rem (30px) | 2.25rem | Major headings |
|
|
120
|
-
| `text-4xl` | 2.25rem (36px) | 2.5rem | Hero headings |
|
|
121
|
-
|
|
122
|
-
### Font Weights
|
|
123
|
-
|
|
124
|
-
```css
|
|
125
|
-
--font-weight-normal: 400;
|
|
126
|
-
--font-weight-medium: 500;
|
|
127
|
-
--font-weight-semibold: 600;
|
|
128
|
-
--font-weight-bold: 700;
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### Text Hierarchy
|
|
132
|
-
- **H1:** Page title, used once per page
|
|
133
|
-
- **H2:** Major section headings
|
|
134
|
-
- **H3:** Subsection headings
|
|
135
|
-
- **H4-H6:** Nested content hierarchy
|
|
136
|
-
- **Body:** Standard paragraph text
|
|
137
|
-
- **Small:** Secondary information, captions
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## Spacing System
|
|
142
|
-
|
|
143
|
-
### Spacing Scale
|
|
144
|
-
[Consistent spacing creates rhythm]
|
|
145
|
-
|
|
146
|
-
```css
|
|
147
|
-
--spacing-1: 0.25rem; /* 4px */
|
|
148
|
-
--spacing-2: 0.5rem; /* 8px */
|
|
149
|
-
--spacing-3: 0.75rem; /* 12px */
|
|
150
|
-
--spacing-4: 1rem; /* 16px */
|
|
151
|
-
--spacing-5: 1.25rem; /* 20px */
|
|
152
|
-
--spacing-6: 1.5rem; /* 24px */
|
|
153
|
-
--spacing-8: 2rem; /* 32px */
|
|
154
|
-
--spacing-10: 2.5rem; /* 40px */
|
|
155
|
-
--spacing-12: 3rem; /* 48px */
|
|
156
|
-
--spacing-16: 4rem; /* 64px */
|
|
157
|
-
--spacing-20: 5rem; /* 80px */
|
|
158
|
-
--spacing-24: 6rem; /* 96px */
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
### Spacing Usage
|
|
162
|
-
- **Component padding:** Use spacing-4 (16px) as base
|
|
163
|
-
- **Section spacing:** Use spacing-12 to spacing-24
|
|
164
|
-
- **Element gaps:** Use spacing-2 to spacing-6
|
|
165
|
-
- **Maintain vertical rhythm**
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## Layout & Grid
|
|
170
|
-
|
|
171
|
-
### Container
|
|
172
|
-
```css
|
|
173
|
-
--container-max-width: 1280px;
|
|
174
|
-
--container-padding: 1rem; /* Mobile */
|
|
175
|
-
--container-padding-lg: 2rem; /* Desktop */
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
### Grid System
|
|
179
|
-
[If using a grid system]
|
|
180
|
-
|
|
181
|
-
- **Columns:** 12-column grid
|
|
182
|
-
- **Gap:** 1rem (16px) on mobile, 1.5rem (24px) on desktop
|
|
183
|
-
- **Responsive:** Mobile-first, stacks on small screens
|
|
184
|
-
|
|
185
|
-
### Content Width
|
|
186
|
-
- **Prose content:** Max 65ch for readability
|
|
187
|
-
- **Form inputs:** Max 500px width
|
|
188
|
-
- **Cards:** Flexible width with max-width constraints
|
|
189
|
-
|
|
190
|
-
---
|
|
22
|
+
[TODO: font families (self-host when practical), scale, weights, line heights.]
|
|
191
23
|
|
|
192
|
-
##
|
|
24
|
+
## Spacing & Layout
|
|
193
25
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
```css
|
|
197
|
-
--breakpoint-sm: 640px; /* Small tablets */
|
|
198
|
-
--breakpoint-md: 768px; /* Tablets */
|
|
199
|
-
--breakpoint-lg: 1024px; /* Small laptops */
|
|
200
|
-
--breakpoint-xl: 1280px; /* Desktops */
|
|
201
|
-
--breakpoint-2xl: 1536px; /* Large desktops */
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### Responsive Strategy
|
|
205
|
-
- **Mobile-first:** Design for mobile, enhance for larger screens
|
|
206
|
-
- **Touch targets:** Minimum 44x44px on mobile
|
|
207
|
-
- **Readable text:** Minimum 16px font size on mobile
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## Border Radius
|
|
212
|
-
|
|
213
|
-
```css
|
|
214
|
-
--radius-sm: 0.25rem; /* 4px - subtle rounding */
|
|
215
|
-
--radius-md: 0.375rem; /* 6px - default rounding */
|
|
216
|
-
--radius-lg: 0.5rem; /* 8px - cards, modals */
|
|
217
|
-
--radius-xl: 0.75rem; /* 12px - larger elements */
|
|
218
|
-
--radius-2xl: 1rem; /* 16px - images, hero sections */
|
|
219
|
-
--radius-full: 9999px; /* Pills, avatars */
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
**Usage:** [e.g., "Use radius-md for most UI elements, radius-lg for cards"]
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## Borders
|
|
227
|
-
|
|
228
|
-
```css
|
|
229
|
-
--border-width: 1px;
|
|
230
|
-
--border-width-thick: 2px;
|
|
231
|
-
--border-color: var(--color-border);
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
**Usage:** Borders for separation, not decoration
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
## Shadows
|
|
239
|
-
|
|
240
|
-
### Shadow Scale
|
|
241
|
-
[Elevation through shadows]
|
|
242
|
-
|
|
243
|
-
```css
|
|
244
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
245
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
246
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
|
|
247
|
-
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1);
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
**Usage:**
|
|
251
|
-
- `shadow-sm` — Subtle elevation (cards in list)
|
|
252
|
-
- `shadow-md` — Default elevation (cards, dropdowns)
|
|
253
|
-
- `shadow-lg` — Emphasized elevation (modals, popovers)
|
|
254
|
-
- `shadow-xl` — Maximum elevation (alerts, notifications)
|
|
255
|
-
|
|
256
|
-
**Avoid:** Excessive shadows, multiple strong shadows on one screen
|
|
257
|
-
|
|
258
|
-
---
|
|
26
|
+
[TODO: spacing scale, grid, breakpoints, border radius, shadows — keep consistent.]
|
|
259
27
|
|
|
260
28
|
## Components
|
|
261
29
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
#### Primary Button
|
|
265
|
-
- **Background:** Primary color
|
|
266
|
-
- **Text:** Primary foreground
|
|
267
|
-
- **Hover:** Primary hover
|
|
268
|
-
- **Padding:** 0.5rem 1rem (8px 16px)
|
|
269
|
-
- **Border radius:** radius-md
|
|
270
|
-
- **Font weight:** medium
|
|
271
|
-
- **Usage:** Primary action on each screen
|
|
272
|
-
|
|
273
|
-
#### Secondary Button
|
|
274
|
-
- **Background:** Secondary color or transparent
|
|
275
|
-
- **Border:** 1px solid border color
|
|
276
|
-
- **Hover:** Background muted
|
|
277
|
-
- **Usage:** Secondary actions
|
|
278
|
-
|
|
279
|
-
#### Destructive Button
|
|
280
|
-
- **Background:** Error color
|
|
281
|
-
- **Usage:** Irreversible actions (delete, remove)
|
|
282
|
-
|
|
283
|
-
#### Ghost Button
|
|
284
|
-
- **Background:** Transparent
|
|
285
|
-
- **Hover:** Subtle background
|
|
286
|
-
- **Usage:** Tertiary actions, navigation
|
|
287
|
-
|
|
288
|
-
#### Button Sizes
|
|
289
|
-
- `sm` — Compact: 0.375rem 0.75rem
|
|
290
|
-
- `md` — Default: 0.5rem 1rem
|
|
291
|
-
- `lg` — Large: 0.75rem 1.5rem
|
|
292
|
-
|
|
293
|
-
#### Button States
|
|
294
|
-
- **Hover:** Slightly darker/lighter background
|
|
295
|
-
- **Active:** More pronounced color change
|
|
296
|
-
- **Disabled:** Reduced opacity (0.5), cursor not-allowed
|
|
297
|
-
- **Loading:** Show spinner, disable interaction
|
|
298
|
-
|
|
299
|
-
---
|
|
300
|
-
|
|
301
|
-
### Forms
|
|
302
|
-
|
|
303
|
-
#### Input Fields
|
|
304
|
-
- **Border:** 1px solid border color
|
|
305
|
-
- **Border radius:** radius-md
|
|
306
|
-
- **Padding:** 0.5rem 0.75rem
|
|
307
|
-
- **Focus:** Ring outline (2px offset, primary color)
|
|
308
|
-
- **Error:** Red border, error message below
|
|
309
|
-
- **Disabled:** Reduced opacity, different background
|
|
310
|
-
|
|
311
|
-
#### Labels
|
|
312
|
-
- **Font size:** text-sm
|
|
313
|
-
- **Font weight:** medium
|
|
314
|
-
- **Position:** Above input
|
|
315
|
-
- **Required indicator:** Red asterisk
|
|
316
|
-
|
|
317
|
-
#### Error Messages
|
|
318
|
-
- **Color:** Error color
|
|
319
|
-
- **Font size:** text-sm
|
|
320
|
-
- **Icon:** Optional error icon
|
|
321
|
-
|
|
322
|
-
#### Helper Text
|
|
323
|
-
- **Color:** Muted foreground
|
|
324
|
-
- **Font size:** text-sm
|
|
325
|
-
- **Position:** Below input
|
|
326
|
-
|
|
327
|
-
---
|
|
328
|
-
|
|
329
|
-
### Cards
|
|
330
|
-
|
|
331
|
-
#### Standard Card
|
|
332
|
-
- **Background:** Background color or muted
|
|
333
|
-
- **Border:** 1px solid border color (optional)
|
|
334
|
-
- **Border radius:** radius-lg
|
|
335
|
-
- **Padding:** 1rem to 1.5rem
|
|
336
|
-
- **Shadow:** shadow-sm to shadow-md
|
|
337
|
-
- **Hover:** Subtle shadow increase (if interactive)
|
|
338
|
-
|
|
339
|
-
#### Card Variants
|
|
340
|
-
- **Flat:** No shadow, just border
|
|
341
|
-
- **Elevated:** More prominent shadow
|
|
342
|
-
- **Interactive:** Hover state with shadow/scale
|
|
343
|
-
|
|
344
|
-
---
|
|
345
|
-
|
|
346
|
-
### Navigation
|
|
347
|
-
|
|
348
|
-
#### Header/Navigation Bar
|
|
349
|
-
- **Height:** [e.g., 64px]
|
|
350
|
-
- **Background:** [e.g., Background color with border bottom]
|
|
351
|
-
- **Sticky:** [Yes/No]
|
|
352
|
-
- **Logo position:** [Left]
|
|
353
|
-
- **Nav links:** [Right or center]
|
|
30
|
+
[TODO: existing components to reuse (buttons, forms, cards, nav). Reuse before creating.]
|
|
354
31
|
|
|
355
|
-
|
|
356
|
-
- **Default:** Muted foreground
|
|
357
|
-
- **Hover:** Foreground
|
|
358
|
-
- **Active:** Primary color or underline
|
|
359
|
-
- **Font weight:** Medium
|
|
32
|
+
## Motion
|
|
360
33
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
### Modals/Dialogs
|
|
364
|
-
|
|
365
|
-
#### Modal Container
|
|
366
|
-
- **Background:** Background color
|
|
367
|
-
- **Border radius:** radius-lg
|
|
368
|
-
- **Padding:** 1.5rem
|
|
369
|
-
- **Max width:** 500px (adjustable)
|
|
370
|
-
- **Shadow:** shadow-xl
|
|
371
|
-
|
|
372
|
-
#### Modal Overlay
|
|
373
|
-
- **Background:** Black with opacity (0.5)
|
|
374
|
-
- **Blur:** Optional backdrop blur
|
|
375
|
-
|
|
376
|
-
#### Modal Behavior
|
|
377
|
-
- **Close on:** Escape key, overlay click, close button
|
|
378
|
-
- **Focus trap:** Yes, trap focus inside modal
|
|
379
|
-
- **Scroll:** Lock body scroll when open
|
|
380
|
-
|
|
381
|
-
---
|
|
382
|
-
|
|
383
|
-
### Tables
|
|
384
|
-
|
|
385
|
-
#### Table Structure
|
|
386
|
-
- **Border:** 1px solid border color
|
|
387
|
-
- **Header:** Background muted, font weight medium
|
|
388
|
-
- **Rows:** Alternating background (optional)
|
|
389
|
-
- **Row hover:** Subtle background change
|
|
390
|
-
- **Cell padding:** 0.75rem 1rem
|
|
391
|
-
|
|
392
|
-
#### Responsive Tables
|
|
393
|
-
- **Mobile:** Horizontal scroll or card-based layout
|
|
394
|
-
|
|
395
|
-
---
|
|
396
|
-
|
|
397
|
-
### Notifications/Toast
|
|
398
|
-
|
|
399
|
-
#### Toast Container
|
|
400
|
-
- **Position:** [e.g., Top right, bottom right]
|
|
401
|
-
- **Width:** Max 400px
|
|
402
|
-
- **Shadow:** shadow-lg
|
|
403
|
-
- **Border radius:** radius-md
|
|
404
|
-
|
|
405
|
-
#### Toast Variants
|
|
406
|
-
- **Success:** Green accent
|
|
407
|
-
- **Error:** Red accent
|
|
408
|
-
- **Warning:** Yellow/orange accent
|
|
409
|
-
- **Info:** Blue accent
|
|
410
|
-
|
|
411
|
-
#### Toast Behavior
|
|
412
|
-
- **Duration:** 3-5 seconds (adjustable)
|
|
413
|
-
- **Dismissible:** Yes, with close button
|
|
414
|
-
- **Animation:** Slide in, fade out
|
|
415
|
-
|
|
416
|
-
---
|
|
417
|
-
|
|
418
|
-
### Loading States
|
|
419
|
-
|
|
420
|
-
#### Spinner
|
|
421
|
-
- **Size:** Small (16px), Medium (24px), Large (48px)
|
|
422
|
-
- **Color:** Primary or muted foreground
|
|
423
|
-
- **Usage:** Buttons, inline loading, full-page
|
|
424
|
-
|
|
425
|
-
#### Skeleton
|
|
426
|
-
- **Background:** Muted with subtle animation
|
|
427
|
-
- **Usage:** Content placeholders while loading
|
|
428
|
-
|
|
429
|
-
#### Progress Bar
|
|
430
|
-
- **Height:** 4px to 8px
|
|
431
|
-
- **Color:** Primary
|
|
432
|
-
- **Usage:** File uploads, multi-step processes
|
|
433
|
-
|
|
434
|
-
---
|
|
435
|
-
|
|
436
|
-
### Empty States
|
|
437
|
-
|
|
438
|
-
#### Empty State Design
|
|
439
|
-
- **Icon:** Relevant, subtle icon
|
|
440
|
-
- **Heading:** "No [items] yet"
|
|
441
|
-
- **Description:** Explain why it's empty
|
|
442
|
-
- **Action:** Primary action button (if applicable)
|
|
443
|
-
- **Illustration:** Optional simple illustration
|
|
444
|
-
|
|
445
|
-
---
|
|
446
|
-
|
|
447
|
-
### Error States
|
|
448
|
-
|
|
449
|
-
#### Error Display
|
|
450
|
-
- **Icon:** Error icon
|
|
451
|
-
- **Heading:** What went wrong
|
|
452
|
-
- **Description:** Why it happened (if known)
|
|
453
|
-
- **Action:** "Try again" button, "Go back" link
|
|
454
|
-
- **Avoid:** Technical jargon, blame language
|
|
455
|
-
|
|
456
|
-
---
|
|
457
|
-
|
|
458
|
-
## Icons
|
|
459
|
-
|
|
460
|
-
### Icon Library
|
|
461
|
-
- **Library:** [e.g., Lucide, Heroicons, custom]
|
|
462
|
-
- **Style:** [e.g., Outline, solid]
|
|
463
|
-
- **Size:** 16px (sm), 20px (md), 24px (lg)
|
|
464
|
-
|
|
465
|
-
### Icon Usage
|
|
466
|
-
- **Consistent library:** Use one icon set throughout
|
|
467
|
-
- **Meaningful icons:** Use icons that users recognize
|
|
468
|
-
- **Accessible:** Include aria-label or sr-only text
|
|
469
|
-
- **Decorative:** Mark decorative icons as aria-hidden
|
|
470
|
-
|
|
471
|
-
---
|
|
472
|
-
|
|
473
|
-
## Images
|
|
474
|
-
|
|
475
|
-
### Image Guidelines
|
|
476
|
-
- **Aspect ratios:** Maintain consistent ratios (16:9, 4:3, 1:1)
|
|
477
|
-
- **Optimization:** WebP/AVIF with JPEG fallback
|
|
478
|
-
- **Loading:** Lazy load below the fold
|
|
479
|
-
- **Alt text:** Descriptive alt text for all images
|
|
480
|
-
- **Placeholder:** Use blur placeholder or skeleton
|
|
481
|
-
|
|
482
|
-
### Image Sizing
|
|
483
|
-
- **Thumbnails:** 64x64 to 128x128
|
|
484
|
-
- **Cards:** 300x200 (adjustable)
|
|
485
|
-
- **Hero:** 1920x1080 (adjustable)
|
|
486
|
-
|
|
487
|
-
---
|
|
488
|
-
|
|
489
|
-
## Motion & Animation
|
|
490
|
-
|
|
491
|
-
### Animation Principles
|
|
492
|
-
- **Purposeful:** Animations should have a reason (guide attention, provide feedback)
|
|
493
|
-
- **Performant:** Use CSS transforms and opacity (GPU-accelerated)
|
|
494
|
-
- **Respectful:** Respect `prefers-reduced-motion`
|
|
495
|
-
- **Subtle:** Animations should enhance, not distract
|
|
496
|
-
|
|
497
|
-
### Animation Timing
|
|
498
|
-
```css
|
|
499
|
-
--duration-fast: 150ms;
|
|
500
|
-
--duration-normal: 300ms;
|
|
501
|
-
--duration-slow: 500ms;
|
|
502
|
-
|
|
503
|
-
--easing-in: cubic-bezier(0.4, 0, 1, 1);
|
|
504
|
-
--easing-out: cubic-bezier(0, 0, 0.2, 1);
|
|
505
|
-
--easing-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
### Common Animations
|
|
509
|
-
- **Fade in:** Opacity 0 to 1
|
|
510
|
-
- **Slide in:** Transform translateY/X
|
|
511
|
-
- **Scale:** Scale 0.95 to 1 (modals, popovers)
|
|
512
|
-
- **Hover:** Subtle scale (1.02) or brightness change
|
|
513
|
-
|
|
514
|
-
### Reduced Motion
|
|
515
|
-
```css
|
|
516
|
-
@media (prefers-reduced-motion: reduce) {
|
|
517
|
-
* {
|
|
518
|
-
animation-duration: 0.01ms !important;
|
|
519
|
-
animation-iteration-count: 1 !important;
|
|
520
|
-
transition-duration: 0.01ms !important;
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
```
|
|
524
|
-
|
|
525
|
-
---
|
|
526
|
-
|
|
527
|
-
## Dark Mode
|
|
528
|
-
|
|
529
|
-
[If supporting dark mode]
|
|
530
|
-
|
|
531
|
-
### Dark Mode Strategy
|
|
532
|
-
- **Implementation:** [e.g., CSS custom properties with data-theme attribute]
|
|
533
|
-
- **Default:** [Light, dark, or system preference]
|
|
534
|
-
- **Toggle:** [Location of theme toggle]
|
|
535
|
-
|
|
536
|
-
### Dark Mode Colors
|
|
537
|
-
```css
|
|
538
|
-
[data-theme="dark"] {
|
|
539
|
-
--color-background: #0a0a0a;
|
|
540
|
-
--color-foreground: #fafafa;
|
|
541
|
-
--color-muted: #1a1a1a;
|
|
542
|
-
/* ... other color overrides */
|
|
543
|
-
}
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
### Dark Mode Considerations
|
|
547
|
-
- Adjust shadows (lighter in dark mode)
|
|
548
|
-
- Reduce contrast slightly
|
|
549
|
-
- Test readability
|
|
550
|
-
- Adjust image brightness if needed
|
|
551
|
-
|
|
552
|
-
---
|
|
34
|
+
[TODO: animation rules; respect prefers-reduced-motion; no meaningless hover effects.]
|
|
553
35
|
|
|
554
36
|
## Accessibility
|
|
555
37
|
|
|
556
|
-
|
|
557
|
-
-
|
|
558
|
-
-
|
|
559
|
-
- Visible focus indicators (2px outline, primary color)
|
|
560
|
-
- Skip to main content link
|
|
561
|
-
|
|
562
|
-
### Screen Reader Support
|
|
563
|
-
- Semantic HTML
|
|
564
|
-
- ARIA labels where needed
|
|
565
|
-
- Alt text for images
|
|
566
|
-
- Form labels properly associated
|
|
567
|
-
- Error messages announced
|
|
568
|
-
|
|
569
|
-
### Color & Contrast
|
|
570
|
-
- Text meets WCAG AA (4.5:1)
|
|
571
|
-
- Large text meets WCAG AA (3:1)
|
|
572
|
-
- Interactive elements meet WCAG AA
|
|
573
|
-
- Color never the only indicator
|
|
574
|
-
|
|
575
|
-
---
|
|
576
|
-
|
|
577
|
-
## Responsive Design
|
|
578
|
-
|
|
579
|
-
### Mobile Considerations
|
|
580
|
-
- Touch targets: Minimum 44x44px
|
|
581
|
-
- Font size: Minimum 16px (prevents zoom on iOS)
|
|
582
|
-
- Spacing: Adequate spacing for touch
|
|
583
|
-
- Navigation: Mobile-friendly menu (hamburger if needed)
|
|
584
|
-
|
|
585
|
-
### Tablet Considerations
|
|
586
|
-
- Hybrid touch/mouse design
|
|
587
|
-
- Optimize for portrait and landscape
|
|
588
|
-
- Adjust grid for medium screens
|
|
589
|
-
|
|
590
|
-
### Desktop Considerations
|
|
591
|
-
- Hover states
|
|
592
|
-
- Keyboard shortcuts
|
|
593
|
-
- Larger content width
|
|
594
|
-
- Multi-column layouts
|
|
595
|
-
|
|
596
|
-
---
|
|
38
|
+
- Semantic HTML first; ARIA only when needed.
|
|
39
|
+
- Full keyboard operability and visible focus.
|
|
40
|
+
- Labels on every input; alt text on meaningful images.
|
|
597
41
|
|
|
598
42
|
## Things to Avoid
|
|
599
43
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
### Visual Anti-Patterns
|
|
603
|
-
- ❌ Harsh gradients without purpose
|
|
604
|
-
- ❌ Excessive shadows (depth overkill)
|
|
605
|
-
- ❌ Inconsistent border radius
|
|
606
|
-
- ❌ Too many font sizes
|
|
607
|
-
- ❌ Rainbow color schemes without brand justification
|
|
608
|
-
- ❌ Generic AI aesthetics (unless brand-appropriate)
|
|
609
|
-
- ❌ Decorative animations that slow interaction
|
|
610
|
-
|
|
611
|
-
### UX Anti-Patterns
|
|
612
|
-
- ❌ Disabled buttons without explanation
|
|
613
|
-
- ❌ Fake form fields (visual only)
|
|
614
|
-
- ❌ Hidden required fields
|
|
615
|
-
- ❌ Unclear error messages
|
|
616
|
-
- ❌ Slow animations blocking interaction
|
|
617
|
-
- ❌ Modals within modals
|
|
618
|
-
|
|
619
|
-
---
|
|
620
|
-
|
|
621
|
-
## Design Tokens (Optional)
|
|
622
|
-
|
|
623
|
-
[If using a design token system like Style Dictionary]
|
|
624
|
-
|
|
625
|
-
**Location:** [e.g., `/tokens/`]
|
|
626
|
-
**Format:** [e.g., JSON, YAML]
|
|
627
|
-
**Build command:** [e.g., `npm run tokens:build`]
|
|
628
|
-
|
|
629
|
-
---
|
|
630
|
-
|
|
631
|
-
## Figma / Design Files
|
|
632
|
-
|
|
633
|
-
[If using Figma or other design tools]
|
|
634
|
-
|
|
635
|
-
**Figma file:** [Link]
|
|
636
|
-
**Component library:** [Link]
|
|
637
|
-
**Access:** [Who has access, how to request]
|
|
638
|
-
|
|
639
|
-
---
|
|
640
|
-
|
|
641
|
-
## Future Design Considerations
|
|
642
|
-
|
|
643
|
-
[Planned improvements or explorations]
|
|
644
|
-
|
|
645
|
-
- [ ] [Consideration 1: e.g., "Explore more playful micro-interactions"]
|
|
646
|
-
- [ ] [Consideration 2: e.g., "Refine illustration style"]
|
|
647
|
-
|
|
648
|
-
---
|
|
649
|
-
|
|
650
|
-
## Document History
|
|
651
|
-
|
|
652
|
-
| Date | Author | Changes |
|
|
653
|
-
|------|--------|---------|
|
|
654
|
-
| [Date] | [Name] | Initial version |
|
|
44
|
+
- Generic AI aesthetics (purple/black gradients, glassmorphism everywhere, decorative emoji,
|
|
45
|
+
purposeless 3-card grids, fake stats/testimonials) unless justified above.
|