omnidesign 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/LICENSE +21 -0
  2. package/QUICKREF.md +150 -0
  3. package/README.md +576 -0
  4. package/bin/cli.js +390 -0
  5. package/bin/detect-ide.js +50 -0
  6. package/bin/install.js +8 -0
  7. package/logo.jpg +0 -0
  8. package/package.json +84 -0
  9. package/recipes/components/README.md +29 -0
  10. package/recipes/components/agent-card.md +314 -0
  11. package/recipes/components/ai-chat.md +252 -0
  12. package/recipes/components/bento-grid.md +186 -0
  13. package/recipes/components/code-block.md +503 -0
  14. package/recipes/components/file-upload.md +483 -0
  15. package/recipes/components/forms.md +238 -0
  16. package/recipes/components/hero-section.md +161 -0
  17. package/recipes/components/navbar.md +214 -0
  18. package/recipes/components/prompt-input.md +293 -0
  19. package/recipes/components/thinking-indicator.md +372 -0
  20. package/recipes/motion/README.md +3 -0
  21. package/recipes/motion/motion-system.md +437 -0
  22. package/recipes/patterns/README.md +3 -0
  23. package/skills/aider/omnidesign.md +67 -0
  24. package/skills/amp/SKILL.md +114 -0
  25. package/skills/antigravity/SKILL.md +114 -0
  26. package/skills/claude/omnidesign.md +111 -0
  27. package/skills/continue/omnidesign.yaml +29 -0
  28. package/skills/cursor/omnidesign.md +110 -0
  29. package/skills/kilo/SKILL.md +114 -0
  30. package/skills/opencode/omnidesign.md +110 -0
  31. package/skills/vscode/package.json +66 -0
  32. package/skills/zed/omnidesign.json +7 -0
  33. package/tokens/motion/README.md +3 -0
  34. package/tokens/primitives/README.md +3 -0
  35. package/tokens/primitives/color.json +219 -0
  36. package/tokens/primitives/motion.json +56 -0
  37. package/tokens/primitives/radii.json +37 -0
  38. package/tokens/primitives/shadows.json +34 -0
  39. package/tokens/primitives/spacing.json +67 -0
  40. package/tokens/primitives/typography.json +127 -0
  41. package/tokens/semantic/README.md +3 -0
  42. package/tokens/semantic/color.json +114 -0
  43. package/tokens/semantic/motion.json +44 -0
  44. package/tokens/semantic/radii.json +29 -0
  45. package/tokens/semantic/shadows.json +24 -0
  46. package/tokens/semantic/spacing.json +69 -0
  47. package/tokens/semantic/typography.json +118 -0
  48. package/tokens/shadows/README.md +3 -0
  49. package/tokens/themes/README.md +3 -0
  50. package/tokens/themes/berry.json +143 -0
  51. package/tokens/themes/brutalist.json +143 -0
  52. package/tokens/themes/coral.json +143 -0
  53. package/tokens/themes/corporate.json +143 -0
  54. package/tokens/themes/cream.json +143 -0
  55. package/tokens/themes/cyberpunk.json +143 -0
  56. package/tokens/themes/daylight.json +143 -0
  57. package/tokens/themes/deep-space.json +143 -0
  58. package/tokens/themes/forest.json +143 -0
  59. package/tokens/themes/graphite.json +143 -0
  60. package/tokens/themes/lavender.json +143 -0
  61. package/tokens/themes/midnight.json +143 -0
  62. package/tokens/themes/mint.json +143 -0
  63. package/tokens/themes/navy.json +143 -0
  64. package/tokens/themes/noir.json +143 -0
  65. package/tokens/themes/obsidian.json +143 -0
  66. package/tokens/themes/ocean.json +143 -0
  67. package/tokens/themes/paper.json +143 -0
  68. package/tokens/themes/ruby.json +143 -0
  69. package/tokens/themes/slate.json +143 -0
  70. package/tokens/themes/snow.json +143 -0
  71. package/tokens/themes/solar.json +143 -0
  72. package/tokens/themes/spring.json +143 -0
  73. package/tokens/themes/starry-night.json +143 -0
  74. package/tokens/themes/sunset.json +143 -0
  75. package/tokens/typography/FONT_GUIDE.md +381 -0
  76. package/tokens/typography/README.md +37 -0
  77. package/tokens/typography/font-collection.json +221 -0
@@ -0,0 +1,437 @@
1
+ # Motion System
2
+
3
+ Comprehensive motion and animation guidelines including duration by interaction type, easing selection, reduced motion behavior, and animation choreography patterns.
4
+
5
+ ## When to Use
6
+
7
+ **Use motion for:**
8
+ - Providing feedback on user interactions (hover, click, focus)
9
+ - Guiding attention to important elements
10
+ - Indicating state changes (loading, success, error)
11
+ - Creating smooth transitions between states
12
+ - Enhancing perceived performance
13
+
14
+ **Don't use motion for:**
15
+ - Decorative animations without purpose
16
+ - Auto-playing animations (let user control)
17
+ - Rapid or flashing animations (accessibility risk)
18
+ - Animations that distract from content
19
+ - Animations on every interaction (reserve for important moments)
20
+
21
+ ## Motion Tokens
22
+
23
+ ### Duration
24
+
25
+ | Token | Value | Use Case |
26
+ |-------|-------|----------|
27
+ | `duration.fast` | 150ms | Hover feedback, quick state changes |
28
+ | `duration.normal` | 300ms | Standard transitions, element entry |
29
+ | `duration.slow` | 500ms | Page transitions, major layout changes |
30
+ | `duration.slowest` | 800ms | Cinematic animations, hero sections |
31
+
32
+ **Duration selection:**
33
+ - **Fast (150ms)**: Hover states, button feedback, subtle transitions
34
+ - **Normal (300ms)**: Element appearance, modal open, form validation
35
+ - **Slow (500ms)**: Page transitions, hero animations, major state changes
36
+ - **Slowest (800ms)**: Cinematic sequences, landing page animations
37
+
38
+ ### Easing
39
+
40
+ | Token | Curve | Use Case |
41
+ |-------|-------|----------|
42
+ | `easing.easeOut` | Cubic Bezier (0.33, 0.66, 0.66, 1) | Elements appearing, entering viewport |
43
+ | `easing.easeIn` | Cubic Bezier (0.33, 0, 0.66, 0.33) | Elements disappearing, leaving viewport |
44
+ | `easing.easeInOut` | Cubic Bezier (0.42, 0, 0.58, 1) | Smooth, natural motion for page transitions |
45
+ | `easing.spring` | Spring physics (stiffness: 300, damping: 30) | Bouncy, playful interactions, emphasis |
46
+
47
+ **Easing selection:**
48
+ - **easeOut**: Use when element is appearing or entering (feels responsive)
49
+ - **easeIn**: Use when element is disappearing or leaving (feels natural)
50
+ - **easeInOut**: Use for continuous motion or page transitions (smooth)
51
+ - **spring**: Use for emphasis, playful feedback, or attention-grabbing
52
+
53
+ ### Semantic Motion Tokens
54
+
55
+ | Token | Duration | Easing | Use Case |
56
+ |-------|----------|--------|----------|
57
+ | `motion.hover` | 150ms | easeOut | Hover states, button feedback |
58
+ | `motion.enter` | 300ms | easeOut | Elements appearing, modal open |
59
+ | `motion.exit` | 150ms | easeIn | Elements disappearing, modal close |
60
+ | `motion.page` | 500ms | easeInOut | Page transitions, major layout changes |
61
+ | `motion.spring` | 300ms | spring | Bouncy interactions, emphasis |
62
+
63
+ ## Implementation Patterns
64
+
65
+ ### Hover Feedback
66
+
67
+ **Pattern:**
68
+ ```
69
+ Element at rest → User hovers → Subtle visual change (150ms easeOut)
70
+ ```
71
+
72
+ **Properties to animate:**
73
+ - Background color (primary → primary.hover)
74
+ - Scale (1 → 1.02 for lift effect)
75
+ - Shadow (shadow.card → shadow.card elevated)
76
+ - Opacity (100% → 100%, no change needed)
77
+
78
+ **Token usage:**
79
+ - Duration: `motion.hover` (150ms)
80
+ - Easing: `easing.easeOut`
81
+ - Properties: background-color, transform, box-shadow
82
+
83
+ **Example:**
84
+ ```css
85
+ .button {
86
+ background-color: color.interactive.primary;
87
+ transition: background-color 150ms ease-out, transform 150ms ease-out;
88
+ }
89
+
90
+ .button:hover {
91
+ background-color: color.interactive.primary.hover;
92
+ transform: scale(1.02);
93
+ }
94
+ ```
95
+
96
+ ### Element Entry
97
+
98
+ **Pattern:**
99
+ ```
100
+ Element hidden → Element appears → Fade in + slide up (300ms easeOut)
101
+ ```
102
+
103
+ **Properties to animate:**
104
+ - Opacity (0% → 100%)
105
+ - Transform (translateY(10px) → translateY(0))
106
+ - Scale (0.95 → 1)
107
+
108
+ **Token usage:**
109
+ - Duration: `motion.enter` (300ms)
110
+ - Easing: `easing.easeOut`
111
+ - Properties: opacity, transform
112
+
113
+ **Example:**
114
+ ```css
115
+ @keyframes slideUp {
116
+ from {
117
+ opacity: 0;
118
+ transform: translateY(10px);
119
+ }
120
+ to {
121
+ opacity: 1;
122
+ transform: translateY(0);
123
+ }
124
+ }
125
+
126
+ .modal {
127
+ animation: slideUp 300ms ease-out;
128
+ }
129
+ ```
130
+
131
+ ### Element Exit
132
+
133
+ **Pattern:**
134
+ ```
135
+ Element visible → User closes → Fade out + slide down (150ms easeIn)
136
+ ```
137
+
138
+ **Properties to animate:**
139
+ - Opacity (100% → 0%)
140
+ - Transform (translateY(0) → translateY(10px))
141
+ - Scale (1 → 0.95)
142
+
143
+ **Token usage:**
144
+ - Duration: `motion.exit` (150ms)
145
+ - Easing: `easing.easeIn`
146
+ - Properties: opacity, transform
147
+
148
+ **Example:**
149
+ ```css
150
+ @keyframes slideDown {
151
+ from {
152
+ opacity: 1;
153
+ transform: translateY(0);
154
+ }
155
+ to {
156
+ opacity: 0;
157
+ transform: translateY(10px);
158
+ }
159
+ }
160
+
161
+ .modal.closing {
162
+ animation: slideDown 150ms ease-in;
163
+ }
164
+ ```
165
+
166
+ ### Page Transition
167
+
168
+ **Pattern:**
169
+ ```
170
+ Page A visible → User navigates → Fade out (150ms) → Page B fades in (300ms)
171
+ ```
172
+
173
+ **Properties to animate:**
174
+ - Opacity (100% → 0% → 100%)
175
+ - Scale (1 → 0.98 → 1)
176
+
177
+ **Token usage:**
178
+ - Duration: `motion.page` (500ms)
179
+ - Easing: `easing.easeInOut`
180
+ - Properties: opacity, transform
181
+
182
+ **Example:**
183
+ ```css
184
+ @keyframes pageTransition {
185
+ 0% {
186
+ opacity: 1;
187
+ transform: scale(1);
188
+ }
189
+ 50% {
190
+ opacity: 0;
191
+ transform: scale(0.98);
192
+ }
193
+ 100% {
194
+ opacity: 1;
195
+ transform: scale(1);
196
+ }
197
+ }
198
+
199
+ .page {
200
+ animation: pageTransition 500ms ease-in-out;
201
+ }
202
+ ```
203
+
204
+ ### Loading State
205
+
206
+ **Pattern:**
207
+ ```
208
+ User submits form → Spinner appears → Button disabled → Success/Error feedback
209
+ ```
210
+
211
+ **Properties to animate:**
212
+ - Spinner rotation (0deg → 360deg, continuous)
213
+ - Button opacity (100% → 80%)
214
+ - Button pointer-events (auto → none)
215
+
216
+ **Token usage:**
217
+ - Duration: `motion.hover` (150ms) for state change
218
+ - Easing: `easing.easeOut`
219
+ - Properties: opacity, pointer-events
220
+
221
+ **Example:**
222
+ ```css
223
+ @keyframes spin {
224
+ from {
225
+ transform: rotate(0deg);
226
+ }
227
+ to {
228
+ transform: rotate(360deg);
229
+ }
230
+ }
231
+
232
+ .spinner {
233
+ animation: spin 1s linear infinite;
234
+ }
235
+
236
+ .button.loading {
237
+ opacity: 0.8;
238
+ pointer-events: none;
239
+ }
240
+ ```
241
+
242
+ ### Staggered List Animation
243
+
244
+ **Pattern:**
245
+ ```
246
+ List appears → Each item fades in sequentially (50ms stagger)
247
+ ```
248
+
249
+ **Properties to animate:**
250
+ - Opacity (0% → 100%)
251
+ - Transform (translateY(10px) → translateY(0))
252
+
253
+ **Token usage:**
254
+ - Duration: `motion.enter` (300ms)
255
+ - Easing: `easing.easeOut`
256
+ - Stagger: 50ms between items
257
+
258
+ **Example:**
259
+ ```css
260
+ @keyframes slideUp {
261
+ from {
262
+ opacity: 0;
263
+ transform: translateY(10px);
264
+ }
265
+ to {
266
+ opacity: 1;
267
+ transform: translateY(0);
268
+ }
269
+ }
270
+
271
+ .list-item {
272
+ animation: slideUp 300ms ease-out backwards;
273
+ }
274
+
275
+ .list-item:nth-child(1) { animation-delay: 0ms; }
276
+ .list-item:nth-child(2) { animation-delay: 50ms; }
277
+ .list-item:nth-child(3) { animation-delay: 100ms; }
278
+ ```
279
+
280
+ ## Reduced Motion Behavior
281
+
282
+ ### Implementation
283
+
284
+ **Respect `prefers-reduced-motion` media query:**
285
+ ```css
286
+ @media (prefers-reduced-motion: reduce) {
287
+ * {
288
+ animation-duration: 0.01ms !important;
289
+ animation-iteration-count: 1 !important;
290
+ transition-duration: 0.01ms !important;
291
+ }
292
+ }
293
+ ```
294
+
295
+ **Alternative approach (per-component):**
296
+ ```css
297
+ @media (prefers-reduced-motion: reduce) {
298
+ .button {
299
+ transition: none;
300
+ }
301
+
302
+ .spinner {
303
+ animation: none;
304
+ }
305
+ }
306
+ ```
307
+
308
+ ### React Implementation
309
+
310
+ **Detect reduced motion preference:**
311
+ ```javascript
312
+ const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
313
+
314
+ // Use in conditional rendering or state
315
+ const duration = prefersReducedMotion ? 0 : 300;
316
+ ```
317
+
318
+ **Apply to animations:**
319
+ ```javascript
320
+ const animationProps = prefersReducedMotion
321
+ ? { animation: 'none' }
322
+ : { animation: 'slideUp 300ms ease-out' };
323
+ ```
324
+
325
+ ## Animation Choreography
326
+
327
+ ### Principle: Sequential Entrance
328
+
329
+ **Pattern:**
330
+ ```
331
+ 1. Background/container appears (fade in, 300ms)
332
+ 2. Content fades in (300ms, 100ms delay)
333
+ 3. CTA button scales in (300ms, 200ms delay)
334
+ ```
335
+
336
+ **Effect:** Creates sense of anticipation and guides user attention
337
+
338
+ **Token usage:**
339
+ - All animations use `motion.enter` (300ms, easeOut)
340
+ - Stagger with 100ms delays between elements
341
+
342
+ ### Principle: Unified Exit
343
+
344
+ **Pattern:**
345
+ ```
346
+ 1. CTA button fades out (150ms)
347
+ 2. Content fades out (150ms, 50ms delay)
348
+ 3. Background fades out (150ms, 100ms delay)
349
+ ```
350
+
351
+ **Effect:** Feels cohesive and intentional
352
+
353
+ **Token usage:**
354
+ - All animations use `motion.exit` (150ms, easeIn)
355
+ - Stagger with 50ms delays
356
+
357
+ ### Principle: Emphasis on Interaction
358
+
359
+ **Pattern:**
360
+ ```
361
+ 1. User hovers button → Scale up (150ms, spring)
362
+ 2. User clicks button → Scale down (100ms, easeIn)
363
+ 3. Loading state → Spinner rotates (continuous)
364
+ 4. Success → Checkmark appears (300ms, spring)
365
+ ```
366
+
367
+ **Effect:** Provides clear feedback at each step
368
+
369
+ **Token usage:**
370
+ - Hover: `motion.hover` (150ms, spring)
371
+ - Click: `motion.exit` (100ms, easeIn)
372
+ - Loading: Custom duration (1s, linear)
373
+ - Success: `motion.enter` (300ms, spring)
374
+
375
+ ## Acceptance Criteria
376
+
377
+ - [ ] Hover animations use `motion.hover` token (150ms, easeOut)
378
+ - [ ] Element entry uses `motion.enter` token (300ms, easeOut)
379
+ - [ ] Element exit uses `motion.exit` token (150ms, easeIn)
380
+ - [ ] Page transitions use `motion.page` token (500ms, easeInOut)
381
+ - [ ] Spring animations use `motion.spring` token (300ms, spring easing)
382
+ - [ ] All animations respect `prefers-reduced-motion` media query
383
+ - [ ] No auto-playing animations (user-triggered only)
384
+ - [ ] No rapid animations (>3 per second)
385
+ - [ ] Staggered animations use 50-100ms delays between items
386
+ - [ ] Loading states show spinner with continuous rotation
387
+ - [ ] Success/error states use appropriate color tokens
388
+ - [ ] All animations use semantic motion tokens (not hardcoded values)
389
+
390
+ ## Performance Considerations
391
+
392
+ ### GPU Acceleration
393
+
394
+ **Use these properties for smooth 60fps animations:**
395
+ - `transform` (translate, rotate, scale)
396
+ - `opacity`
397
+
398
+ **Avoid these properties (cause repaints):**
399
+ - `width`, `height`, `left`, `top`
400
+ - `margin`, `padding`
401
+ - `background-color` (use opacity + background instead)
402
+
403
+ ### Optimization
404
+
405
+ **Best practices:**
406
+ - Use `will-change: transform` for animated elements
407
+ - Use `transform: translateZ(0)` to force GPU acceleration
408
+ - Limit simultaneous animations (max 3-4 per screen)
409
+ - Use `requestAnimationFrame` for custom animations
410
+ - Debounce scroll/resize listeners
411
+
412
+ **Example:**
413
+ ```css
414
+ .animated-element {
415
+ will-change: transform;
416
+ transform: translateZ(0);
417
+ }
418
+ ```
419
+
420
+ ## Accessibility
421
+
422
+ ### Motion Sensitivity
423
+ - Respect `prefers-reduced-motion: reduce` for users with vestibular disorders
424
+ - Provide instant state changes when reduced motion is preferred
425
+ - Test with actual users who have motion sensitivity
426
+
427
+ ### Clarity
428
+ - Use motion to clarify, not confuse
429
+ - Avoid rapid or flashing animations
430
+ - Ensure motion doesn't obscure content
431
+ - Provide alternative feedback (color, icon) in addition to motion
432
+
433
+ ### Testing
434
+ - Test animations on low-end devices (60fps target)
435
+ - Test with `prefers-reduced-motion` enabled
436
+ - Test with screen readers (ensure motion doesn't interfere)
437
+ - Test on actual mobile devices for performance
@@ -0,0 +1,3 @@
1
+ # Patterns
2
+
3
+ Reusable UI pattern documentation (forms, navigation, layouts). These describe common component compositions and interaction flows.
@@ -0,0 +1,67 @@
1
+ # OmniDesign Conventions
2
+
3
+ Design system guidelines for AI-assisted development.
4
+
5
+ ## Token-First Development
6
+
7
+ Always use design tokens instead of hardcoded values:
8
+
9
+ ✅ **DO:**
10
+ ```css
11
+ .button {
12
+ background: var(--color-interactive-primary);
13
+ padding: var(--spacing-md);
14
+ }
15
+ ```
16
+
17
+ ❌ **DON'T:**
18
+ ```css
19
+ .button {
20
+ background: #2563EB;
21
+ padding: 16px;
22
+ }
23
+ ```
24
+
25
+ ## 25 Themes Available
26
+
27
+ Professional: corporate, navy, slate, forest, ruby, graphite
28
+ Creative: sunset, ocean, berry, mint, coral, lavender
29
+ Dark: midnight, noir, cyberpunk, obsidian, deep-space, brutalist
30
+ Light: daylight, paper, cream, snow, spring, solar
31
+ Specialty: starry-night
32
+
33
+ ## Component Patterns
34
+
35
+ ### Chat Interface
36
+ - Use semantic tokens for message bubbles
37
+ - Support streaming states with thinking indicators
38
+ - Include copy/regenerate actions
39
+
40
+ ### Forms
41
+ - Use `color-surface-sunken` for inputs
42
+ - Use `color-border-default` for borders
43
+ - Show validation with `color-status-error`
44
+
45
+ ### Cards
46
+ - Use `color-surface-raised` for background
47
+ - Use `shadow-card` for elevation
48
+ - Use `radii-lg` for border radius
49
+
50
+ ## Accessibility Requirements
51
+
52
+ - Minimum 4.5:1 contrast ratio for text
53
+ - Focus rings with `shadow-focus`
54
+ - Keyboard navigation support
55
+ - Screen reader labels
56
+
57
+ ## Font Usage
58
+
59
+ - UI: Geist Sans or Inter
60
+ - Code: JetBrains Mono or Fira Code
61
+ - Display: Space Grotesk or Clash Display
62
+ - Dev Tools: JetBrainsMono Nerd Font
63
+
64
+ ## Resources
65
+
66
+ - Docs: https://omnidesign.dev
67
+ - Quick Ref: See QUICKREF.md
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: omnidesign
3
+ description: Universal design system with 25 themes, 40+ fonts, and AI industry components
4
+ license: MIT
5
+ compatibility:
6
+ product: amp-code
7
+ systems: [node, npm]
8
+ ---
9
+
10
+ # OmniDesign Skill
11
+
12
+ You are an expert in the OmniDesign design system. Use these guidelines when helping users build web applications.
13
+
14
+ ## Design Tokens Available
15
+
16
+ ### Colors (Semantic)
17
+ - `color.text.default` — Primary text
18
+ - `color.text.muted` — Secondary text
19
+ - `color.text.inverted` — Text on dark surfaces
20
+ - `color.surface.default` — Default background
21
+ - `color.surface.raised` — Cards, elevated surfaces
22
+ - `color.surface.sunken` — Inputs, depressed surfaces
23
+ - `color.interactive.primary` — Buttons, links
24
+ - `color.interactive.primary.hover` — Hover states
25
+ - `color.status.success` — Success states
26
+ - `color.status.warning` — Warning states
27
+ - `color.status.error` — Error states
28
+
29
+ ### Spacing
30
+ - `spacing.4` (4px), `spacing.8` (8px), `spacing.16` (16px)
31
+ - `spacing.24` (24px), `spacing.32` (32px), `spacing.48` (48px)
32
+ - `spacing.64` (64px)
33
+
34
+ ### Typography
35
+ - Font families: Geist Sans, Inter, JetBrains Mono, Space Grotesk
36
+ - Sizes: 2xs (10px) through 9xl (128px)
37
+ - Weights: thin (100) through black (900)
38
+
39
+ ### Shadows
40
+ - `shadow.card` — Cards, buttons
41
+ - `shadow.dropdown` — Dropdowns, popovers
42
+ - `shadow.modal` — Modals, dialogs
43
+ - `shadow.focus` — Focus rings
44
+
45
+ ## 25 Themes Available
46
+
47
+ **Professional:** corporate, navy, slate, forest, ruby, graphite
48
+ **Creative:** sunset, ocean, berry, mint, coral, lavender
49
+ **Dark:** midnight, noir, cyberpunk, obsidian, deep-space, brutalist
50
+ **Light:** daylight, paper, cream, snow, spring, solar
51
+ **Specialty:** starry-night
52
+
53
+ Apply themes via: `data-theme="theme-name"` on html element
54
+
55
+ ## AI Industry Components
56
+
57
+ When building AI-powered applications, use these patterns:
58
+
59
+ ### Chat Interface
60
+ - Message bubbles with markdown support
61
+ - Code blocks with syntax highlighting
62
+ - Streaming/thinking indicators
63
+ - Copy/regenerate actions
64
+
65
+ ### Prompt Input
66
+ - Autocomplete suggestions
67
+ - Token counter
68
+ - Modifier chips (--ar, --v, --style)
69
+
70
+ ### Agent Cards
71
+ - Status indicators (online/busy/offline)
72
+ - Capability tags
73
+ - One-click selection
74
+
75
+ ## Best Practices
76
+
77
+ 1. **Always use tokens** — Never hardcode colors, spacing, or fonts
78
+ 2. **Test multiple themes** — Components should work across all 25 themes
79
+ 3. **Follow accessibility** — WCAG 2.1 AA minimum
80
+ 4. **Use Nerd Fonts for dev tools** — Icons + code in one font
81
+ 5. **Match semantic tokens to context** — Use `text-muted` for secondary text
82
+
83
+ ## Quick Examples
84
+
85
+ ```css
86
+ /* Card component */
87
+ .card {
88
+ background: var(--color-surface-raised);
89
+ border-radius: var(--radii-lg);
90
+ padding: var(--spacing-lg);
91
+ box-shadow: var(--shadow-card);
92
+ }
93
+
94
+ /* Button */
95
+ .button {
96
+ background: var(--color-interactive-primary);
97
+ color: var(--color-text-inverted);
98
+ padding: var(--spacing-sm) var(--spacing-md);
99
+ border-radius: var(--radii-md);
100
+ font-family: var(--font-sans);
101
+ font-weight: var(--font-weight-medium);
102
+ }
103
+
104
+ .button:hover {
105
+ background: var(--color-interactive-primary-hover);
106
+ }
107
+ ```
108
+
109
+ ## Resources
110
+
111
+ - Full docs: https://omnidesign.dev
112
+ - Quick ref: See QUICKREF.md
113
+ - Themes: Run `npm run themes:list`
114
+ - Fonts: Run `npm run fonts:list`