omgkit 2.28.0 → 2.30.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 +72 -1
- package/bin/omgkit.js +188 -1
- package/lib/cli.js +58 -4
- package/lib/theme.js +1220 -0
- package/package.json +2 -2
- package/plugin/agents/fullstack-developer.md +1 -0
- package/plugin/agents/ui-ux-designer.md +175 -41
- package/plugin/commands/design/add.md +86 -0
- package/plugin/commands/design/builder.md +96 -0
- package/plugin/commands/design/from-screenshot.md +64 -0
- package/plugin/commands/design/from-url.md +74 -0
- package/plugin/commands/design/preview.md +55 -0
- package/plugin/commands/design/rebuild.md +153 -0
- package/plugin/commands/design/reset.md +65 -0
- package/plugin/commands/design/rollback.md +179 -0
- package/plugin/commands/design/scan.md +155 -0
- package/plugin/commands/design/theme.md +65 -0
- package/plugin/commands/design/themes.md +50 -0
- package/plugin/registry.yaml +15 -3
- package/plugin/skills/frontend/design-system-context/SKILL.md +252 -0
- package/templates/design/schema/theme.schema.json +102 -0
- package/templates/design/themes/corporate-enterprise/consulting.json +81 -0
- package/templates/design/themes/corporate-enterprise/corporate-indigo.json +81 -0
- package/templates/design/themes/corporate-enterprise/finance.json +81 -0
- package/templates/design/themes/corporate-enterprise/healthcare.json +81 -0
- package/templates/design/themes/corporate-enterprise/legal.json +81 -0
- package/templates/design/themes/corporate-enterprise/ocean-blue.json +81 -0
- package/templates/design/themes/creative-bold/candy.json +81 -0
- package/templates/design/themes/creative-bold/coral-sunset.json +81 -0
- package/templates/design/themes/creative-bold/gradient-dream.json +81 -0
- package/templates/design/themes/creative-bold/neon.json +81 -0
- package/templates/design/themes/creative-bold/retro.json +81 -0
- package/templates/design/themes/creative-bold/studio.json +81 -0
- package/templates/design/themes/minimal-clean/minimal-slate.json +81 -0
- package/templates/design/themes/minimal-clean/mono.json +81 -0
- package/templates/design/themes/minimal-clean/nordic.json +81 -0
- package/templates/design/themes/minimal-clean/paper.json +81 -0
- package/templates/design/themes/minimal-clean/swiss.json +81 -0
- package/templates/design/themes/minimal-clean/zen.json +81 -0
- package/templates/design/themes/nature-organic/arctic.json +81 -0
- package/templates/design/themes/nature-organic/autumn.json +81 -0
- package/templates/design/themes/nature-organic/desert.json +81 -0
- package/templates/design/themes/nature-organic/forest.json +81 -0
- package/templates/design/themes/nature-organic/lavender.json +81 -0
- package/templates/design/themes/nature-organic/ocean.json +81 -0
- package/templates/design/themes/tech-ai/electric-cyan.json +81 -0
- package/templates/design/themes/tech-ai/hologram.json +81 -0
- package/templates/design/themes/tech-ai/matrix-green.json +81 -0
- package/templates/design/themes/tech-ai/neo-tokyo.json +81 -0
- package/templates/design/themes/tech-ai/neural-dark.json +81 -0
- package/templates/design/themes/tech-ai/quantum-purple.json +81 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-system-context
|
|
3
|
+
description: Automatic design system context injection for UI consistency
|
|
4
|
+
category: frontend
|
|
5
|
+
level: foundational
|
|
6
|
+
commands:
|
|
7
|
+
- /design:preview
|
|
8
|
+
- /design:themes
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Design System Context Injection
|
|
12
|
+
|
|
13
|
+
This skill ensures all UI/UX work automatically follows the project's design system without explicit user specification.
|
|
14
|
+
|
|
15
|
+
## Automatic Context Loading
|
|
16
|
+
|
|
17
|
+
**CRITICAL**: Before ANY UI/component work, you MUST:
|
|
18
|
+
|
|
19
|
+
1. Check if `.omgkit/design/theme.json` exists
|
|
20
|
+
2. If exists, read it and use its colors
|
|
21
|
+
3. If not exists, suggest running `/design:theme <id>` first
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Always check first
|
|
25
|
+
if [ -f ".omgkit/design/theme.json" ]; then
|
|
26
|
+
# Read and use theme colors
|
|
27
|
+
else
|
|
28
|
+
# Suggest: "No design system detected. Run /design:themes to select one."
|
|
29
|
+
fi
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Theme Context Structure
|
|
33
|
+
|
|
34
|
+
When theme.json exists, extract these key values:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"name": "Theme Name",
|
|
39
|
+
"id": "theme-id",
|
|
40
|
+
"colors": {
|
|
41
|
+
"light": {
|
|
42
|
+
"background": "0 0% 100%",
|
|
43
|
+
"foreground": "240 10% 3.9%",
|
|
44
|
+
"primary": "346.8 77.2% 49.8%",
|
|
45
|
+
"primary-foreground": "355.7 100% 97.3%",
|
|
46
|
+
"secondary": "240 4.8% 95.9%",
|
|
47
|
+
"muted": "240 4.8% 95.9%",
|
|
48
|
+
"accent": "240 4.8% 95.9%",
|
|
49
|
+
"destructive": "0 84.2% 60.2%",
|
|
50
|
+
"border": "240 5.9% 90%",
|
|
51
|
+
"ring": "346.8 77.2% 49.8%"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"radius": "0.5rem"
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Mandatory Color Usage
|
|
59
|
+
|
|
60
|
+
**NEVER hardcode colors**. Always use CSS variables via Tailwind:
|
|
61
|
+
|
|
62
|
+
### ✅ CORRECT - Use Theme Variables
|
|
63
|
+
```tsx
|
|
64
|
+
// Backgrounds
|
|
65
|
+
<div className="bg-background"> // Main background
|
|
66
|
+
<div className="bg-card"> // Card background
|
|
67
|
+
<div className="bg-muted"> // Subtle background
|
|
68
|
+
<div className="bg-primary"> // Primary action background
|
|
69
|
+
<div className="bg-secondary"> // Secondary background
|
|
70
|
+
<div className="bg-destructive"> // Error/danger background
|
|
71
|
+
|
|
72
|
+
// Text
|
|
73
|
+
<p className="text-foreground"> // Primary text
|
|
74
|
+
<p className="text-muted-foreground"> // Secondary/subtle text
|
|
75
|
+
<p className="text-primary"> // Accent text
|
|
76
|
+
<p className="text-destructive"> // Error text
|
|
77
|
+
|
|
78
|
+
// Borders
|
|
79
|
+
<div className="border-border"> // Standard border
|
|
80
|
+
<div className="border-input"> // Input border
|
|
81
|
+
<div className="ring-ring"> // Focus ring
|
|
82
|
+
|
|
83
|
+
// Interactive states
|
|
84
|
+
<button className="bg-primary hover:bg-primary/90">
|
|
85
|
+
<button className="bg-secondary hover:bg-secondary/80">
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### ❌ WRONG - Never Hardcode
|
|
89
|
+
```tsx
|
|
90
|
+
// NEVER do this
|
|
91
|
+
<div className="bg-[#E11D48]"> // Hardcoded hex
|
|
92
|
+
<div className="bg-rose-500"> // Tailwind default color
|
|
93
|
+
<div className="text-gray-900"> // Not from theme
|
|
94
|
+
<div style={{ color: '#333' }}> // Inline style
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Component Generation Rules
|
|
98
|
+
|
|
99
|
+
When generating ANY UI component:
|
|
100
|
+
|
|
101
|
+
### 1. Button Component
|
|
102
|
+
```tsx
|
|
103
|
+
// Always use theme colors
|
|
104
|
+
<Button className="bg-primary text-primary-foreground hover:bg-primary/90">
|
|
105
|
+
Primary Action
|
|
106
|
+
</Button>
|
|
107
|
+
|
|
108
|
+
<Button variant="secondary" className="bg-secondary text-secondary-foreground">
|
|
109
|
+
Secondary
|
|
110
|
+
</Button>
|
|
111
|
+
|
|
112
|
+
<Button variant="destructive" className="bg-destructive text-destructive-foreground">
|
|
113
|
+
Delete
|
|
114
|
+
</Button>
|
|
115
|
+
|
|
116
|
+
<Button variant="outline" className="border-border bg-background hover:bg-accent">
|
|
117
|
+
Outline
|
|
118
|
+
</Button>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 2. Card Component
|
|
122
|
+
```tsx
|
|
123
|
+
<Card className="bg-card text-card-foreground border-border">
|
|
124
|
+
<CardHeader>
|
|
125
|
+
<CardTitle className="text-foreground">Title</CardTitle>
|
|
126
|
+
<CardDescription className="text-muted-foreground">Description</CardDescription>
|
|
127
|
+
</CardHeader>
|
|
128
|
+
<CardContent>
|
|
129
|
+
Content with <span className="text-primary">accent</span> color
|
|
130
|
+
</CardContent>
|
|
131
|
+
</Card>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 3. Form Component
|
|
135
|
+
```tsx
|
|
136
|
+
<form className="space-y-4">
|
|
137
|
+
<div>
|
|
138
|
+
<Label className="text-foreground">Email</Label>
|
|
139
|
+
<Input
|
|
140
|
+
className="border-input bg-background focus:ring-ring"
|
|
141
|
+
placeholder="Enter email"
|
|
142
|
+
/>
|
|
143
|
+
</div>
|
|
144
|
+
<Button className="bg-primary text-primary-foreground">
|
|
145
|
+
Submit
|
|
146
|
+
</Button>
|
|
147
|
+
</form>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 4. Navigation Component
|
|
151
|
+
```tsx
|
|
152
|
+
<nav className="bg-background border-b border-border">
|
|
153
|
+
<div className="flex items-center gap-4">
|
|
154
|
+
<a className="text-foreground hover:text-primary">Home</a>
|
|
155
|
+
<a className="text-muted-foreground hover:text-foreground">About</a>
|
|
156
|
+
<a className="text-muted-foreground hover:text-foreground">Contact</a>
|
|
157
|
+
</div>
|
|
158
|
+
</nav>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 5. Alert/Notification
|
|
162
|
+
```tsx
|
|
163
|
+
// Success - use primary or custom success color
|
|
164
|
+
<Alert className="bg-primary/10 text-primary border-primary">
|
|
165
|
+
<CheckIcon className="text-primary" />
|
|
166
|
+
<AlertDescription>Success message</AlertDescription>
|
|
167
|
+
</Alert>
|
|
168
|
+
|
|
169
|
+
// Error - use destructive
|
|
170
|
+
<Alert className="bg-destructive/10 text-destructive border-destructive">
|
|
171
|
+
<XIcon className="text-destructive" />
|
|
172
|
+
<AlertDescription>Error message</AlertDescription>
|
|
173
|
+
</Alert>
|
|
174
|
+
|
|
175
|
+
// Info - use muted
|
|
176
|
+
<Alert className="bg-muted text-muted-foreground border-border">
|
|
177
|
+
<InfoIcon />
|
|
178
|
+
<AlertDescription>Info message</AlertDescription>
|
|
179
|
+
</Alert>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Dark Mode Handling
|
|
183
|
+
|
|
184
|
+
Theme CSS includes `.dark` class overrides. Just ensure:
|
|
185
|
+
|
|
186
|
+
```tsx
|
|
187
|
+
// This automatically works - colors swap in dark mode
|
|
188
|
+
<div className="bg-background text-foreground">
|
|
189
|
+
Content adapts to light/dark automatically
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
// For dark mode toggle
|
|
193
|
+
<button onClick={() => document.documentElement.classList.toggle('dark')}>
|
|
194
|
+
Toggle Dark Mode
|
|
195
|
+
</button>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Border Radius Consistency
|
|
199
|
+
|
|
200
|
+
Use theme's radius value via CSS variable:
|
|
201
|
+
|
|
202
|
+
```tsx
|
|
203
|
+
// These use --radius from theme
|
|
204
|
+
<div className="rounded-lg"> // var(--radius)
|
|
205
|
+
<div className="rounded-md"> // calc(var(--radius) - 2px)
|
|
206
|
+
<div className="rounded-sm"> // calc(var(--radius) - 4px)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Pre-Task Checklist
|
|
210
|
+
|
|
211
|
+
Before generating ANY UI code, mentally check:
|
|
212
|
+
|
|
213
|
+
- [ ] Read `.omgkit/design/theme.json` if exists
|
|
214
|
+
- [ ] All colors use CSS variables (bg-primary, text-foreground, etc.)
|
|
215
|
+
- [ ] No hardcoded hex values
|
|
216
|
+
- [ ] No Tailwind default colors (gray-500, blue-600, etc.)
|
|
217
|
+
- [ ] Border radius uses theme's radius
|
|
218
|
+
- [ ] Dark mode compatible (no light-only or dark-only colors)
|
|
219
|
+
|
|
220
|
+
## Error Prevention
|
|
221
|
+
|
|
222
|
+
If you catch yourself writing:
|
|
223
|
+
- `bg-blue-500` → Change to `bg-primary`
|
|
224
|
+
- `text-gray-600` → Change to `text-muted-foreground`
|
|
225
|
+
- `border-gray-200` → Change to `border-border`
|
|
226
|
+
- `#E11D48` → Change to CSS variable reference
|
|
227
|
+
|
|
228
|
+
## Integration with shadcn/ui
|
|
229
|
+
|
|
230
|
+
shadcn/ui components automatically use CSS variables:
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
// These already use theme colors
|
|
234
|
+
import { Button } from "@/components/ui/button"
|
|
235
|
+
import { Card } from "@/components/ui/card"
|
|
236
|
+
import { Input } from "@/components/ui/input"
|
|
237
|
+
|
|
238
|
+
// Just use them - they read from theme.css
|
|
239
|
+
<Button>Uses --primary automatically</Button>
|
|
240
|
+
<Card>Uses --card automatically</Card>
|
|
241
|
+
<Input /> // Uses --input, --border, --ring automatically
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Summary
|
|
245
|
+
|
|
246
|
+
**The Golden Rule**: If you're writing a color class, it MUST be one of:
|
|
247
|
+
- `bg-{background|foreground|card|popover|primary|secondary|muted|accent|destructive|border|input|ring}`
|
|
248
|
+
- `text-{foreground|card-foreground|popover-foreground|primary-foreground|secondary-foreground|muted-foreground|accent-foreground|destructive-foreground}`
|
|
249
|
+
- `border-{border|input|ring}`
|
|
250
|
+
- Opacity variants like `bg-primary/90`, `text-muted-foreground/80`
|
|
251
|
+
|
|
252
|
+
**NO EXCEPTIONS**.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "OMGKIT Theme Schema",
|
|
4
|
+
"description": "Schema for OMGKIT design system themes (shadcn/ui compatible)",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["name", "id", "category", "colors"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Display name of the theme"
|
|
11
|
+
},
|
|
12
|
+
"id": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"pattern": "^[a-z0-9-]+$",
|
|
15
|
+
"description": "Unique identifier (kebab-case)"
|
|
16
|
+
},
|
|
17
|
+
"category": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"enum": ["tech-ai", "minimal-clean", "corporate-enterprise", "creative-bold", "nature-organic"],
|
|
20
|
+
"description": "Theme category"
|
|
21
|
+
},
|
|
22
|
+
"description": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "Brief description of the theme aesthetic"
|
|
25
|
+
},
|
|
26
|
+
"colors": {
|
|
27
|
+
"type": "object",
|
|
28
|
+
"required": ["light", "dark"],
|
|
29
|
+
"properties": {
|
|
30
|
+
"light": { "$ref": "#/definitions/colorPalette" },
|
|
31
|
+
"dark": { "$ref": "#/definitions/colorPalette" }
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"radius": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"default": "0.5rem",
|
|
37
|
+
"description": "Border radius for components"
|
|
38
|
+
},
|
|
39
|
+
"fontFamily": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"properties": {
|
|
42
|
+
"sans": { "type": "string", "default": "Inter, system-ui, sans-serif" },
|
|
43
|
+
"mono": { "type": "string", "default": "JetBrains Mono, monospace" }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"definitions": {
|
|
48
|
+
"colorPalette": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"required": [
|
|
51
|
+
"background", "foreground",
|
|
52
|
+
"primary", "primary-foreground",
|
|
53
|
+
"secondary", "secondary-foreground",
|
|
54
|
+
"muted", "muted-foreground",
|
|
55
|
+
"accent", "accent-foreground",
|
|
56
|
+
"destructive", "destructive-foreground",
|
|
57
|
+
"border", "input", "ring",
|
|
58
|
+
"card", "card-foreground",
|
|
59
|
+
"popover", "popover-foreground"
|
|
60
|
+
],
|
|
61
|
+
"properties": {
|
|
62
|
+
"background": { "$ref": "#/definitions/hslColor" },
|
|
63
|
+
"foreground": { "$ref": "#/definitions/hslColor" },
|
|
64
|
+
"primary": { "$ref": "#/definitions/hslColor" },
|
|
65
|
+
"primary-foreground": { "$ref": "#/definitions/hslColor" },
|
|
66
|
+
"secondary": { "$ref": "#/definitions/hslColor" },
|
|
67
|
+
"secondary-foreground": { "$ref": "#/definitions/hslColor" },
|
|
68
|
+
"muted": { "$ref": "#/definitions/hslColor" },
|
|
69
|
+
"muted-foreground": { "$ref": "#/definitions/hslColor" },
|
|
70
|
+
"accent": { "$ref": "#/definitions/hslColor" },
|
|
71
|
+
"accent-foreground": { "$ref": "#/definitions/hslColor" },
|
|
72
|
+
"destructive": { "$ref": "#/definitions/hslColor" },
|
|
73
|
+
"destructive-foreground": { "$ref": "#/definitions/hslColor" },
|
|
74
|
+
"border": { "$ref": "#/definitions/hslColor" },
|
|
75
|
+
"input": { "$ref": "#/definitions/hslColor" },
|
|
76
|
+
"ring": { "$ref": "#/definitions/hslColor" },
|
|
77
|
+
"card": { "$ref": "#/definitions/hslColor" },
|
|
78
|
+
"card-foreground": { "$ref": "#/definitions/hslColor" },
|
|
79
|
+
"popover": { "$ref": "#/definitions/hslColor" },
|
|
80
|
+
"popover-foreground": { "$ref": "#/definitions/hslColor" },
|
|
81
|
+
"chart-1": { "$ref": "#/definitions/hslColor" },
|
|
82
|
+
"chart-2": { "$ref": "#/definitions/hslColor" },
|
|
83
|
+
"chart-3": { "$ref": "#/definitions/hslColor" },
|
|
84
|
+
"chart-4": { "$ref": "#/definitions/hslColor" },
|
|
85
|
+
"chart-5": { "$ref": "#/definitions/hslColor" },
|
|
86
|
+
"sidebar-background": { "$ref": "#/definitions/hslColor" },
|
|
87
|
+
"sidebar-foreground": { "$ref": "#/definitions/hslColor" },
|
|
88
|
+
"sidebar-primary": { "$ref": "#/definitions/hslColor" },
|
|
89
|
+
"sidebar-primary-foreground": { "$ref": "#/definitions/hslColor" },
|
|
90
|
+
"sidebar-accent": { "$ref": "#/definitions/hslColor" },
|
|
91
|
+
"sidebar-accent-foreground": { "$ref": "#/definitions/hslColor" },
|
|
92
|
+
"sidebar-border": { "$ref": "#/definitions/hslColor" },
|
|
93
|
+
"sidebar-ring": { "$ref": "#/definitions/hslColor" }
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"hslColor": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"pattern": "^\\d+(\\.\\d+)?\\s+\\d+(\\.\\d+)?%\\s+\\d+(\\.\\d+)?%$",
|
|
99
|
+
"description": "HSL color without hsl() wrapper, e.g., '220 14.3% 95.9%'"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Consulting",
|
|
3
|
+
"id": "consulting",
|
|
4
|
+
"category": "corporate-enterprise",
|
|
5
|
+
"description": "Management consulting aesthetic like McKinsey and BCG",
|
|
6
|
+
"colors": {
|
|
7
|
+
"light": {
|
|
8
|
+
"background": "0 0% 100%",
|
|
9
|
+
"foreground": "222 47% 11%",
|
|
10
|
+
"primary": "222 80% 28%",
|
|
11
|
+
"primary-foreground": "0 0% 100%",
|
|
12
|
+
"secondary": "220 20% 96%",
|
|
13
|
+
"secondary-foreground": "222 47% 15%",
|
|
14
|
+
"muted": "220 20% 96%",
|
|
15
|
+
"muted-foreground": "220 15% 45%",
|
|
16
|
+
"accent": "35 80% 45%",
|
|
17
|
+
"accent-foreground": "0 0% 100%",
|
|
18
|
+
"destructive": "0 84.2% 60.2%",
|
|
19
|
+
"destructive-foreground": "0 0% 98%",
|
|
20
|
+
"border": "220 15% 90%",
|
|
21
|
+
"input": "220 15% 90%",
|
|
22
|
+
"ring": "222 80% 28%",
|
|
23
|
+
"card": "0 0% 100%",
|
|
24
|
+
"card-foreground": "222 47% 11%",
|
|
25
|
+
"popover": "0 0% 100%",
|
|
26
|
+
"popover-foreground": "222 47% 11%",
|
|
27
|
+
"chart-1": "222 80% 28%",
|
|
28
|
+
"chart-2": "35 80% 45%",
|
|
29
|
+
"chart-3": "160 70% 40%",
|
|
30
|
+
"chart-4": "0 70% 55%",
|
|
31
|
+
"chart-5": "270 60% 55%",
|
|
32
|
+
"sidebar-background": "220 20% 98%",
|
|
33
|
+
"sidebar-foreground": "222 47% 15%",
|
|
34
|
+
"sidebar-primary": "222 80% 28%",
|
|
35
|
+
"sidebar-primary-foreground": "0 0% 100%",
|
|
36
|
+
"sidebar-accent": "220 20% 94%",
|
|
37
|
+
"sidebar-accent-foreground": "222 47% 15%",
|
|
38
|
+
"sidebar-border": "220 15% 90%",
|
|
39
|
+
"sidebar-ring": "222 80% 28%"
|
|
40
|
+
},
|
|
41
|
+
"dark": {
|
|
42
|
+
"background": "222 47% 6%",
|
|
43
|
+
"foreground": "220 20% 96%",
|
|
44
|
+
"primary": "222 60% 50%",
|
|
45
|
+
"primary-foreground": "0 0% 100%",
|
|
46
|
+
"secondary": "222 30% 15%",
|
|
47
|
+
"secondary-foreground": "220 20% 96%",
|
|
48
|
+
"muted": "222 30% 15%",
|
|
49
|
+
"muted-foreground": "220 15% 55%",
|
|
50
|
+
"accent": "35 80% 55%",
|
|
51
|
+
"accent-foreground": "222 47% 6%",
|
|
52
|
+
"destructive": "0 62.8% 30.6%",
|
|
53
|
+
"destructive-foreground": "0 0% 98%",
|
|
54
|
+
"border": "222 30% 18%",
|
|
55
|
+
"input": "222 30% 18%",
|
|
56
|
+
"ring": "222 60% 50%",
|
|
57
|
+
"card": "222 47% 8%",
|
|
58
|
+
"card-foreground": "220 20% 96%",
|
|
59
|
+
"popover": "222 47% 6%",
|
|
60
|
+
"popover-foreground": "220 20% 96%",
|
|
61
|
+
"chart-1": "222 60% 60%",
|
|
62
|
+
"chart-2": "35 80% 65%",
|
|
63
|
+
"chart-3": "160 70% 50%",
|
|
64
|
+
"chart-4": "0 70% 65%",
|
|
65
|
+
"chart-5": "270 60% 65%",
|
|
66
|
+
"sidebar-background": "222 47% 6%",
|
|
67
|
+
"sidebar-foreground": "220 20% 96%",
|
|
68
|
+
"sidebar-primary": "222 60% 50%",
|
|
69
|
+
"sidebar-primary-foreground": "0 0% 100%",
|
|
70
|
+
"sidebar-accent": "222 30% 15%",
|
|
71
|
+
"sidebar-accent-foreground": "220 20% 96%",
|
|
72
|
+
"sidebar-border": "222 30% 18%",
|
|
73
|
+
"sidebar-ring": "222 60% 50%"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"radius": "0.375rem",
|
|
77
|
+
"fontFamily": {
|
|
78
|
+
"sans": "Inter, system-ui, sans-serif",
|
|
79
|
+
"mono": "JetBrains Mono, monospace"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Corporate Indigo",
|
|
3
|
+
"id": "corporate-indigo",
|
|
4
|
+
"category": "corporate-enterprise",
|
|
5
|
+
"description": "Professional SaaS aesthetic like Stripe and Intercom",
|
|
6
|
+
"colors": {
|
|
7
|
+
"light": {
|
|
8
|
+
"background": "0 0% 100%",
|
|
9
|
+
"foreground": "224 71.4% 4.1%",
|
|
10
|
+
"primary": "238.7 83.5% 66.7%",
|
|
11
|
+
"primary-foreground": "0 0% 100%",
|
|
12
|
+
"secondary": "220 14.3% 95.9%",
|
|
13
|
+
"secondary-foreground": "220.9 39.3% 11%",
|
|
14
|
+
"muted": "220 14.3% 95.9%",
|
|
15
|
+
"muted-foreground": "220 8.9% 46.1%",
|
|
16
|
+
"accent": "220 14.3% 95.9%",
|
|
17
|
+
"accent-foreground": "220.9 39.3% 11%",
|
|
18
|
+
"destructive": "0 84.2% 60.2%",
|
|
19
|
+
"destructive-foreground": "0 0% 98%",
|
|
20
|
+
"border": "220 13% 91%",
|
|
21
|
+
"input": "220 13% 91%",
|
|
22
|
+
"ring": "238.7 83.5% 66.7%",
|
|
23
|
+
"card": "0 0% 100%",
|
|
24
|
+
"card-foreground": "224 71.4% 4.1%",
|
|
25
|
+
"popover": "0 0% 100%",
|
|
26
|
+
"popover-foreground": "224 71.4% 4.1%",
|
|
27
|
+
"chart-1": "238.7 83.5% 66.7%",
|
|
28
|
+
"chart-2": "173 58% 39%",
|
|
29
|
+
"chart-3": "197 37% 24%",
|
|
30
|
+
"chart-4": "43 74% 66%",
|
|
31
|
+
"chart-5": "27 87% 67%",
|
|
32
|
+
"sidebar-background": "0 0% 98%",
|
|
33
|
+
"sidebar-foreground": "240 5.3% 26.1%",
|
|
34
|
+
"sidebar-primary": "238.7 83.5% 66.7%",
|
|
35
|
+
"sidebar-primary-foreground": "0 0% 98%",
|
|
36
|
+
"sidebar-accent": "240 4.8% 95.9%",
|
|
37
|
+
"sidebar-accent-foreground": "240 5.9% 10%",
|
|
38
|
+
"sidebar-border": "220 13% 91%",
|
|
39
|
+
"sidebar-ring": "238.7 83.5% 66.7%"
|
|
40
|
+
},
|
|
41
|
+
"dark": {
|
|
42
|
+
"background": "224 71.4% 4.1%",
|
|
43
|
+
"foreground": "210 20% 98%",
|
|
44
|
+
"primary": "238.7 83.5% 66.7%",
|
|
45
|
+
"primary-foreground": "0 0% 100%",
|
|
46
|
+
"secondary": "215 27.9% 16.9%",
|
|
47
|
+
"secondary-foreground": "210 20% 98%",
|
|
48
|
+
"muted": "215 27.9% 16.9%",
|
|
49
|
+
"muted-foreground": "217.9 10.6% 64.9%",
|
|
50
|
+
"accent": "215 27.9% 16.9%",
|
|
51
|
+
"accent-foreground": "210 20% 98%",
|
|
52
|
+
"destructive": "0 62.8% 30.6%",
|
|
53
|
+
"destructive-foreground": "210 20% 98%",
|
|
54
|
+
"border": "215 27.9% 16.9%",
|
|
55
|
+
"input": "215 27.9% 16.9%",
|
|
56
|
+
"ring": "238.7 83.5% 66.7%",
|
|
57
|
+
"card": "224 71.4% 4.1%",
|
|
58
|
+
"card-foreground": "210 20% 98%",
|
|
59
|
+
"popover": "224 71.4% 4.1%",
|
|
60
|
+
"popover-foreground": "210 20% 98%",
|
|
61
|
+
"chart-1": "220 70% 50%",
|
|
62
|
+
"chart-2": "160 60% 45%",
|
|
63
|
+
"chart-3": "30 80% 55%",
|
|
64
|
+
"chart-4": "280 65% 60%",
|
|
65
|
+
"chart-5": "340 75% 55%",
|
|
66
|
+
"sidebar-background": "224 71.4% 4.1%",
|
|
67
|
+
"sidebar-foreground": "210 20% 98%",
|
|
68
|
+
"sidebar-primary": "238.7 83.5% 66.7%",
|
|
69
|
+
"sidebar-primary-foreground": "0 0% 100%",
|
|
70
|
+
"sidebar-accent": "215 27.9% 16.9%",
|
|
71
|
+
"sidebar-accent-foreground": "210 20% 98%",
|
|
72
|
+
"sidebar-border": "215 27.9% 16.9%",
|
|
73
|
+
"sidebar-ring": "238.7 83.5% 66.7%"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"radius": "0.5rem",
|
|
77
|
+
"fontFamily": {
|
|
78
|
+
"sans": "Inter, system-ui, sans-serif",
|
|
79
|
+
"mono": "JetBrains Mono, monospace"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Finance",
|
|
3
|
+
"id": "finance",
|
|
4
|
+
"category": "corporate-enterprise",
|
|
5
|
+
"description": "Banking and fintech aesthetic like Bloomberg and Robinhood",
|
|
6
|
+
"colors": {
|
|
7
|
+
"light": {
|
|
8
|
+
"background": "0 0% 100%",
|
|
9
|
+
"foreground": "175 60% 8%",
|
|
10
|
+
"primary": "173 80% 30%",
|
|
11
|
+
"primary-foreground": "0 0% 100%",
|
|
12
|
+
"secondary": "170 30% 95%",
|
|
13
|
+
"secondary-foreground": "175 60% 12%",
|
|
14
|
+
"muted": "170 30% 95%",
|
|
15
|
+
"muted-foreground": "175 20% 45%",
|
|
16
|
+
"accent": "45 93% 47%",
|
|
17
|
+
"accent-foreground": "175 60% 8%",
|
|
18
|
+
"destructive": "0 84.2% 60.2%",
|
|
19
|
+
"destructive-foreground": "0 0% 98%",
|
|
20
|
+
"border": "170 20% 88%",
|
|
21
|
+
"input": "170 20% 88%",
|
|
22
|
+
"ring": "173 80% 30%",
|
|
23
|
+
"card": "0 0% 100%",
|
|
24
|
+
"card-foreground": "175 60% 8%",
|
|
25
|
+
"popover": "0 0% 100%",
|
|
26
|
+
"popover-foreground": "175 60% 8%",
|
|
27
|
+
"chart-1": "142.1 76.2% 36.3%",
|
|
28
|
+
"chart-2": "0 84.2% 60.2%",
|
|
29
|
+
"chart-3": "173 80% 30%",
|
|
30
|
+
"chart-4": "45 93% 47%",
|
|
31
|
+
"chart-5": "221.2 83.2% 53.3%",
|
|
32
|
+
"sidebar-background": "170 30% 97%",
|
|
33
|
+
"sidebar-foreground": "175 60% 12%",
|
|
34
|
+
"sidebar-primary": "173 80% 30%",
|
|
35
|
+
"sidebar-primary-foreground": "0 0% 100%",
|
|
36
|
+
"sidebar-accent": "170 30% 93%",
|
|
37
|
+
"sidebar-accent-foreground": "175 60% 12%",
|
|
38
|
+
"sidebar-border": "170 20% 88%",
|
|
39
|
+
"sidebar-ring": "173 80% 30%"
|
|
40
|
+
},
|
|
41
|
+
"dark": {
|
|
42
|
+
"background": "175 60% 5%",
|
|
43
|
+
"foreground": "170 30% 95%",
|
|
44
|
+
"primary": "173 80% 40%",
|
|
45
|
+
"primary-foreground": "175 60% 5%",
|
|
46
|
+
"secondary": "175 30% 12%",
|
|
47
|
+
"secondary-foreground": "170 30% 95%",
|
|
48
|
+
"muted": "175 30% 12%",
|
|
49
|
+
"muted-foreground": "175 20% 55%",
|
|
50
|
+
"accent": "45 93% 47%",
|
|
51
|
+
"accent-foreground": "175 60% 5%",
|
|
52
|
+
"destructive": "0 62.8% 30.6%",
|
|
53
|
+
"destructive-foreground": "0 0% 98%",
|
|
54
|
+
"border": "175 30% 15%",
|
|
55
|
+
"input": "175 30% 15%",
|
|
56
|
+
"ring": "173 80% 40%",
|
|
57
|
+
"card": "175 60% 7%",
|
|
58
|
+
"card-foreground": "170 30% 95%",
|
|
59
|
+
"popover": "175 60% 5%",
|
|
60
|
+
"popover-foreground": "170 30% 95%",
|
|
61
|
+
"chart-1": "142.1 76.2% 46.3%",
|
|
62
|
+
"chart-2": "0 84.2% 70.2%",
|
|
63
|
+
"chart-3": "173 80% 50%",
|
|
64
|
+
"chart-4": "45 93% 57%",
|
|
65
|
+
"chart-5": "221.2 83.2% 63.3%",
|
|
66
|
+
"sidebar-background": "175 60% 5%",
|
|
67
|
+
"sidebar-foreground": "170 30% 95%",
|
|
68
|
+
"sidebar-primary": "173 80% 40%",
|
|
69
|
+
"sidebar-primary-foreground": "175 60% 5%",
|
|
70
|
+
"sidebar-accent": "175 30% 12%",
|
|
71
|
+
"sidebar-accent-foreground": "170 30% 95%",
|
|
72
|
+
"sidebar-border": "175 30% 15%",
|
|
73
|
+
"sidebar-ring": "173 80% 40%"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"radius": "0.375rem",
|
|
77
|
+
"fontFamily": {
|
|
78
|
+
"sans": "Inter, system-ui, sans-serif",
|
|
79
|
+
"mono": "JetBrains Mono, monospace"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Healthcare",
|
|
3
|
+
"id": "healthcare",
|
|
4
|
+
"category": "corporate-enterprise",
|
|
5
|
+
"description": "Medical and health aesthetic for clean, trustworthy applications",
|
|
6
|
+
"colors": {
|
|
7
|
+
"light": {
|
|
8
|
+
"background": "200 50% 99%",
|
|
9
|
+
"foreground": "200 50% 8%",
|
|
10
|
+
"primary": "192 91% 36%",
|
|
11
|
+
"primary-foreground": "0 0% 100%",
|
|
12
|
+
"secondary": "200 30% 95%",
|
|
13
|
+
"secondary-foreground": "200 50% 12%",
|
|
14
|
+
"muted": "200 30% 95%",
|
|
15
|
+
"muted-foreground": "200 20% 45%",
|
|
16
|
+
"accent": "160 84% 39%",
|
|
17
|
+
"accent-foreground": "0 0% 100%",
|
|
18
|
+
"destructive": "0 84.2% 60.2%",
|
|
19
|
+
"destructive-foreground": "0 0% 98%",
|
|
20
|
+
"border": "200 20% 88%",
|
|
21
|
+
"input": "200 20% 88%",
|
|
22
|
+
"ring": "192 91% 36%",
|
|
23
|
+
"card": "0 0% 100%",
|
|
24
|
+
"card-foreground": "200 50% 8%",
|
|
25
|
+
"popover": "0 0% 100%",
|
|
26
|
+
"popover-foreground": "200 50% 8%",
|
|
27
|
+
"chart-1": "192 91% 36%",
|
|
28
|
+
"chart-2": "160 84% 39%",
|
|
29
|
+
"chart-3": "38 92% 50%",
|
|
30
|
+
"chart-4": "0 84.2% 60.2%",
|
|
31
|
+
"chart-5": "262.1 83.3% 57.8%",
|
|
32
|
+
"sidebar-background": "200 50% 97%",
|
|
33
|
+
"sidebar-foreground": "200 50% 12%",
|
|
34
|
+
"sidebar-primary": "192 91% 36%",
|
|
35
|
+
"sidebar-primary-foreground": "0 0% 100%",
|
|
36
|
+
"sidebar-accent": "200 30% 93%",
|
|
37
|
+
"sidebar-accent-foreground": "200 50% 12%",
|
|
38
|
+
"sidebar-border": "200 20% 88%",
|
|
39
|
+
"sidebar-ring": "192 91% 36%"
|
|
40
|
+
},
|
|
41
|
+
"dark": {
|
|
42
|
+
"background": "200 50% 5%",
|
|
43
|
+
"foreground": "200 30% 95%",
|
|
44
|
+
"primary": "192 91% 46%",
|
|
45
|
+
"primary-foreground": "200 50% 5%",
|
|
46
|
+
"secondary": "200 30% 12%",
|
|
47
|
+
"secondary-foreground": "200 30% 95%",
|
|
48
|
+
"muted": "200 30% 12%",
|
|
49
|
+
"muted-foreground": "200 20% 55%",
|
|
50
|
+
"accent": "160 84% 49%",
|
|
51
|
+
"accent-foreground": "200 50% 5%",
|
|
52
|
+
"destructive": "0 62.8% 30.6%",
|
|
53
|
+
"destructive-foreground": "0 0% 98%",
|
|
54
|
+
"border": "200 30% 15%",
|
|
55
|
+
"input": "200 30% 15%",
|
|
56
|
+
"ring": "192 91% 46%",
|
|
57
|
+
"card": "200 50% 7%",
|
|
58
|
+
"card-foreground": "200 30% 95%",
|
|
59
|
+
"popover": "200 50% 5%",
|
|
60
|
+
"popover-foreground": "200 30% 95%",
|
|
61
|
+
"chart-1": "192 91% 56%",
|
|
62
|
+
"chart-2": "160 84% 59%",
|
|
63
|
+
"chart-3": "38 92% 60%",
|
|
64
|
+
"chart-4": "0 84.2% 70.2%",
|
|
65
|
+
"chart-5": "262.1 83.3% 67.8%",
|
|
66
|
+
"sidebar-background": "200 50% 5%",
|
|
67
|
+
"sidebar-foreground": "200 30% 95%",
|
|
68
|
+
"sidebar-primary": "192 91% 46%",
|
|
69
|
+
"sidebar-primary-foreground": "200 50% 5%",
|
|
70
|
+
"sidebar-accent": "200 30% 12%",
|
|
71
|
+
"sidebar-accent-foreground": "200 30% 95%",
|
|
72
|
+
"sidebar-border": "200 30% 15%",
|
|
73
|
+
"sidebar-ring": "192 91% 46%"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"radius": "0.5rem",
|
|
77
|
+
"fontFamily": {
|
|
78
|
+
"sans": "Inter, system-ui, sans-serif",
|
|
79
|
+
"mono": "JetBrains Mono, monospace"
|
|
80
|
+
}
|
|
81
|
+
}
|