@jaimevalasek/aioson 1.30.0 → 1.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/docs/design-previews/cognitive-core-ui-auth.html +95 -0
- package/docs/design-previews/cognitive-core-ui-kanban.html +231 -0
- package/docs/design-previews/cognitive-core-ui-list-detail.html +174 -0
- package/docs/design-previews/cognitive-core-ui-preview.css +1315 -0
- package/docs/design-previews/cognitive-core-ui-settings.html +142 -0
- package/docs/design-previews/cognitive-core-ui-website.html +190 -1009
- package/docs/design-previews/cognitive-core-ui.html +281 -463
- package/docs/design-previews/index.html +83 -31
- package/package.json +1 -1
- package/src/constants.js +578 -514
- package/template/.aioson/docs/integrations/dashboard-app-form-publish-mapping.md +183 -0
- package/template/.aioson/docs/play/README.md +74 -0
- package/template/.aioson/docs/play/agent-usage-guide.md +112 -0
- package/template/.aioson/docs/play/app-compatibility-guide.md +117 -0
- package/template/.aioson/docs/play/auth-services-and-testing.md +235 -0
- package/template/.aioson/docs/play/llm-data-and-bindings.md +238 -0
- package/template/.aioson/docs/play/manifest-and-runtime.md +267 -0
- package/template/.aioson/docs/play/source-map.md +104 -0
- package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +266 -243
- package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -293
- package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -827
- package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -250
- package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -585
- package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -365
- package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +485 -482
- package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +386 -387
- package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +228 -205
- package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -338
- package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -977
- package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -218
- package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -326
- package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -461
- package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -293
- package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -352
- package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +233 -210
- package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -319
- package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -365
- package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -196
- package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -244
- package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -235
- package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -215
- package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -295
- package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +239 -203
- package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -339
- package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +417 -407
- package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +289 -272
- package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +525 -524
- package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +279 -279
- package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +355 -289
- package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +443 -437
- package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +245 -222
- package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -159
- package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -498
- package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -236
- package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -274
- package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -355
- package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -198
- package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -307
- package/template/.aioson/skills/design/interface-design/SKILL.md +68 -47
- package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -105
- package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -101
- package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +92 -71
- package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -74
- package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -173
- package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +236 -213
- package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -228
- package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -855
- package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -334
- package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -342
- package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -286
- package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -458
- package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -723
- package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +83 -62
- package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -74
- package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -116
- package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -47
- package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -215
- package/template/.aioson/skills/design/pt.squarespace.com/.skill-meta.json +31 -31
- package/template/.aioson/skills/design/pt.squarespace.com/SKILL.md +94 -66
- package/template/.aioson/skills/design/pt.squarespace.com/references/components.md +366 -366
- package/template/.aioson/skills/design/pt.squarespace.com/references/design-tokens.md +150 -150
- package/template/.aioson/skills/design/pt.squarespace.com/references/motion.md +270 -270
- package/template/.aioson/skills/design/pt.squarespace.com/references/patterns.md +189 -189
- package/template/.aioson/skills/design/pt.squarespace.com/references/websites.md +161 -161
- package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +232 -209
- package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -324
- package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -508
- package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -223
- package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -374
- package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -356
- package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -288
- package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -289
|
@@ -1,342 +1,342 @@
|
|
|
1
|
-
# Design Tokens — Neo-Brutalist UI
|
|
2
|
-
|
|
3
|
-
Single source of truth for all CSS variables. Apply via `data-theme="light"` / `data-theme="dark"` on the root container.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Font imports
|
|
8
|
-
|
|
9
|
-
```css
|
|
10
|
-
/* Google Fonts */
|
|
11
|
-
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
System fallbacks (no external fonts):
|
|
15
|
-
```css
|
|
16
|
-
--font-display: "Arial Black", Impact, system-ui, sans-serif;
|
|
17
|
-
--font-body: -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
|
|
18
|
-
--font-mono: "Courier New", Courier, monospace;
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Typography
|
|
24
|
-
|
|
25
|
-
```css
|
|
26
|
-
--font-display: 'Space Grotesk', system-ui, sans-serif;
|
|
27
|
-
/* Geometric with personality. Not as neutral as Inter, not as dramatic as Clash Display. */
|
|
28
|
-
/* Alternatives: 'DM Sans', 'Outfit', 'Plus Jakarta Sans' */
|
|
29
|
-
|
|
30
|
-
--font-body: 'Inter', system-ui, sans-serif;
|
|
31
|
-
|
|
32
|
-
--font-mono: 'JetBrains Mono', 'Space Mono', ui-monospace, monospace;
|
|
33
|
-
/* FIRST-CLASS CITIZEN: labels, metadata, badges, status, code, numbers, dates, IDs */
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### Font sizes
|
|
37
|
-
|
|
38
|
-
```css
|
|
39
|
-
--text-xs: 0.75rem; /* 12px — mono metadata, badges */
|
|
40
|
-
--text-sm: 0.875rem; /* 14px */
|
|
41
|
-
--text-base: 1rem; /* 16px */
|
|
42
|
-
--text-lg: 1.25rem; /* 20px */
|
|
43
|
-
--text-xl: 1.5rem; /* 24px */
|
|
44
|
-
--text-2xl: 2rem; /* 32px */
|
|
45
|
-
--text-3xl: 2.5rem; /* 40px */
|
|
46
|
-
--text-4xl: 3.5rem; /* 56px — hero headlines */
|
|
47
|
-
--text-5xl: 5rem; /* 80px — manifesto/zine statements */
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Font weights
|
|
51
|
-
|
|
52
|
-
```css
|
|
53
|
-
--weight-regular: 400;
|
|
54
|
-
--weight-medium: 500;
|
|
55
|
-
--weight-semibold: 600;
|
|
56
|
-
--weight-bold: 700;
|
|
57
|
-
--weight-extrabold: 800; /* headings in indie/zine modes */
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Letter spacing
|
|
61
|
-
|
|
62
|
-
```css
|
|
63
|
-
--tracking-tight:
|
|
64
|
-
--tracking-normal: 0em;
|
|
65
|
-
--tracking-wide: 0.05em; /* mono labels, uppercase badges */
|
|
66
|
-
--tracking-wider: 0.1em; /* uppercase section titles */
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Colors — Light Theme (default)
|
|
72
|
-
|
|
73
|
-
```css
|
|
74
|
-
[data-theme="light"] {
|
|
75
|
-
/* Backgrounds */
|
|
76
|
-
--bg-void: #F5F0E8; /* warm off-white — newspaper feel, page background */
|
|
77
|
-
--bg-base: #FFFDF5; /* cream white — main content area */
|
|
78
|
-
--bg-surface: #FFFFFF; /* pure white — cards, panels */
|
|
79
|
-
--bg-elevated: #F5F0E8; /* off-white — hover state, nested sections */
|
|
80
|
-
--bg-overlay: #E8E0D0; /* deeper off-white — modals overlay, popovers */
|
|
81
|
-
|
|
82
|
-
/* Text */
|
|
83
|
-
--text-heading: #1A1A1A;
|
|
84
|
-
--text-primary: #2A2A2A;
|
|
85
|
-
--text-secondary: #666666;
|
|
86
|
-
--text-muted: #999999;
|
|
87
|
-
--text-disabled: #BBBBBB;
|
|
88
|
-
|
|
89
|
-
/* Primary accent — yellow is THE brutalist accent */
|
|
90
|
-
--accent: #FACC15; /* yellow-400 */
|
|
91
|
-
--accent-strong: #EAB308; /* yellow-500 — pressed state */
|
|
92
|
-
--accent-dim: rgba(250,204,21,.20);
|
|
93
|
-
--accent-hover: #EAB308;
|
|
94
|
-
--accent-contrast: #1A1A1A; /* black text on yellow bg */
|
|
95
|
-
|
|
96
|
-
/* Secondary accents — for Creative Playground mode */
|
|
97
|
-
--accent-red: #EF4444;
|
|
98
|
-
--accent-blue: #3B82F6;
|
|
99
|
-
--accent-green: #22C55E;
|
|
100
|
-
--accent-pink: #EC4899;
|
|
101
|
-
--accent-orange: #F97316;
|
|
102
|
-
|
|
103
|
-
/* Borders — THE most important token in this skill */
|
|
104
|
-
--border-subtle: 1px solid #1A1A1A; /* dividers, table cell borders */
|
|
105
|
-
--border-thick: 2px solid #1A1A1A; /* default interactive border */
|
|
106
|
-
--border-thicker: 3px solid #1A1A1A; /* cards, buttons, feature elements */
|
|
107
|
-
--border-thickest: 4px solid #1A1A1A; /* hero cards, main CTAs */
|
|
108
|
-
|
|
109
|
-
/* Border color only (for custom uses) */
|
|
110
|
-
--border-color: #1A1A1A;
|
|
111
|
-
--border-color-subtle: #CCCCCC;
|
|
112
|
-
|
|
113
|
-
/* Semantic */
|
|
114
|
-
--semantic-green: #22C55E;
|
|
115
|
-
--semantic-green-dim: rgba(34,197,94,.15);
|
|
116
|
-
--semantic-amber: #F59E0B;
|
|
117
|
-
--semantic-amber-dim: rgba(245,158,11,.15);
|
|
118
|
-
--semantic-red: #EF4444;
|
|
119
|
-
--semantic-red-dim: rgba(239,68,68,.15);
|
|
120
|
-
--semantic-blue: #3B82F6;
|
|
121
|
-
--semantic-blue-dim: rgba(59,130,246,.15);
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Colors — Dark Theme
|
|
128
|
-
|
|
129
|
-
```css
|
|
130
|
-
[data-theme="dark"] {
|
|
131
|
-
/* Backgrounds */
|
|
132
|
-
--bg-void: #111111;
|
|
133
|
-
--bg-base: #1A1A1A;
|
|
134
|
-
--bg-surface: #242424;
|
|
135
|
-
--bg-elevated: #2E2E2E;
|
|
136
|
-
--bg-overlay: #383838;
|
|
137
|
-
|
|
138
|
-
/* Text */
|
|
139
|
-
--text-heading: #FFFFFF;
|
|
140
|
-
--text-primary: #E0E0E0;
|
|
141
|
-
--text-secondary: #999999;
|
|
142
|
-
--text-muted: #666666;
|
|
143
|
-
--text-disabled: #444444;
|
|
144
|
-
|
|
145
|
-
/* Primary accent — yellow stays strong in dark */
|
|
146
|
-
--accent: #FACC15;
|
|
147
|
-
--accent-strong: #EAB308;
|
|
148
|
-
--accent-dim: rgba(250,204,21,.20);
|
|
149
|
-
--accent-hover: #EAB308;
|
|
150
|
-
--accent-contrast: #1A1A1A;
|
|
151
|
-
|
|
152
|
-
/* Secondary accents — brighter in dark (but NOT neon — saturated and grounded) */
|
|
153
|
-
--accent-red: #F87171;
|
|
154
|
-
--accent-blue: #60A5FA;
|
|
155
|
-
--accent-green: #4ADE80;
|
|
156
|
-
--accent-pink: #F472B6;
|
|
157
|
-
--accent-orange: #FB923C;
|
|
158
|
-
|
|
159
|
-
/* Borders — inverted: light on dark */
|
|
160
|
-
--border-subtle: 1px solid #444444;
|
|
161
|
-
--border-thick: 2px solid #E0E0E0;
|
|
162
|
-
--border-thicker: 3px solid #E0E0E0;
|
|
163
|
-
--border-thickest: 4px solid #E0E0E0;
|
|
164
|
-
|
|
165
|
-
--border-color: #E0E0E0;
|
|
166
|
-
--border-color-subtle: #444444;
|
|
167
|
-
|
|
168
|
-
/* Semantic */
|
|
169
|
-
--semantic-green: #4ADE80;
|
|
170
|
-
--semantic-green-dim: rgba(74,222,128,.15);
|
|
171
|
-
--semantic-amber: #FCD34D;
|
|
172
|
-
--semantic-amber-dim: rgba(252,211,77,.15);
|
|
173
|
-
--semantic-red: #F87171;
|
|
174
|
-
--semantic-red-dim: rgba(248,113,113,.15);
|
|
175
|
-
--semantic-blue: #60A5FA;
|
|
176
|
-
--semantic-blue-dim: rgba(96,165,250,.15);
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Shadows — Hard Offset (the most distinctive token)
|
|
183
|
-
|
|
184
|
-
```css
|
|
185
|
-
/* ZERO BLUR. Solid offset. Non-negotiable. */
|
|
186
|
-
|
|
187
|
-
/* Light theme shadows — black offset */
|
|
188
|
-
--shadow-sm: 2px 2px 0 var(--border-color); /* small elements */
|
|
189
|
-
--shadow-md: 4px 4px 0 var(--border-color); /* cards, buttons */
|
|
190
|
-
--shadow-lg: 6px 6px 0 var(--border-color); /* featured cards, hover state */
|
|
191
|
-
--shadow-xl: 8px 8px 0 var(--border-color); /* hero CTA, main action */
|
|
192
|
-
|
|
193
|
-
/* Colored shadows — for Creative Playground mode */
|
|
194
|
-
--shadow-accent: 4px 4px 0 var(--accent);
|
|
195
|
-
--shadow-red: 4px 4px 0 var(--accent-red);
|
|
196
|
-
--shadow-blue: 4px 4px 0 var(--accent-blue);
|
|
197
|
-
--shadow-green: 4px 4px 0 var(--accent-green);
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
Direction rule: **all hard shadows go bottom-right** (positive x, positive y). Never mix directions on the same page.
|
|
201
|
-
|
|
202
|
-
In dark theme, `--border-color` resolves to `#E0E0E0`, so shadows automatically invert to light-on-dark.
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## Border Radius — Extremes Only
|
|
207
|
-
|
|
208
|
-
```css
|
|
209
|
-
--radius-none: 0; /* DEFAULT — cards, inputs, buttons, most elements */
|
|
210
|
-
--radius-sm: 0.25rem; /* 4px — used rarely, only for very small inner elements */
|
|
211
|
-
--radius-md: 0.375rem; /* 6px — inputs optionally, max allowed before "too normal" */
|
|
212
|
-
--radius-full: 9999px; /* pills — badges, tags, status dots, pill buttons */
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
**Rule:** use `--radius-none` (0) or `--radius-full` (9999px). Nothing between 6px and 9998px. The extreme contrast between square and pill is part of the aesthetic. `8–12px` radius is "clean-saas territory" — forbidden here.
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
## Spacing
|
|
220
|
-
|
|
221
|
-
4px base rhythm. 8px standard unit.
|
|
222
|
-
|
|
223
|
-
```css
|
|
224
|
-
--space-0: 0;
|
|
225
|
-
--space-1: 0.25rem; /* 4px */
|
|
226
|
-
--space-2: 0.5rem; /* 8px */
|
|
227
|
-
--space-3: 0.75rem; /* 12px */
|
|
228
|
-
--space-4: 1rem; /* 16px */
|
|
229
|
-
--space-5: 1.25rem; /* 20px */
|
|
230
|
-
--space-6: 1.5rem; /* 24px */
|
|
231
|
-
--space-8: 2rem; /* 32px */
|
|
232
|
-
--space-10: 2.5rem; /* 40px */
|
|
233
|
-
--space-12: 3rem; /* 48px */
|
|
234
|
-
--space-16: 4rem; /* 64px */
|
|
235
|
-
--space-20: 5rem; /* 80px — section gap minimum */
|
|
236
|
-
--space-24: 6rem; /* 96px */
|
|
237
|
-
--space-28: 7rem; /* 112px */
|
|
238
|
-
--space-32: 8rem; /* 128px */
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
Section gaps: `--space-20` to `--space-28` between major page sections. Generous whitespace makes the thick borders breathe.
|
|
242
|
-
|
|
243
|
-
---
|
|
244
|
-
|
|
245
|
-
## Control Heights — Chunky (larger than other skills)
|
|
246
|
-
|
|
247
|
-
```css
|
|
248
|
-
--control-xs: 2rem; /* 32px */
|
|
249
|
-
--control-sm: 2.25rem; /* 36px */
|
|
250
|
-
--control-md: 2.75rem; /* 44px — DEFAULT input/button */
|
|
251
|
-
--control-lg: 3.25rem; /* 52px — primary CTA button */
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
Brutalist buttons are **chunky, not elegant**. The extra height reinforces the physical, constructed feel.
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Decorative Patterns
|
|
259
|
-
|
|
260
|
-
One pattern maximum per page. Applied to the background of ONE section only — never the whole page.
|
|
261
|
-
|
|
262
|
-
```css
|
|
263
|
-
/* Dots */
|
|
264
|
-
.pattern-dots {
|
|
265
|
-
background-image: radial-gradient(var(--border-color) 1px, transparent 1px);
|
|
266
|
-
background-size: 20px 20px;
|
|
267
|
-
opacity: 0.15;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/* Horizontal lines */
|
|
271
|
-
.pattern-lines {
|
|
272
|
-
background-image: repeating-linear-gradient(
|
|
273
|
-
0deg,
|
|
274
|
-
transparent,
|
|
275
|
-
transparent 19px,
|
|
276
|
-
var(--border-color) 19px,
|
|
277
|
-
var(--border-color) 20px
|
|
278
|
-
);
|
|
279
|
-
opacity: 0.12;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/* Full grid */
|
|
283
|
-
.pattern-grid {
|
|
284
|
-
background-image:
|
|
285
|
-
linear-gradient(var(--border-color) 1px, transparent 1px),
|
|
286
|
-
linear-gradient(90deg, var(--border-color) 1px, transparent 1px);
|
|
287
|
-
background-size: 20px 20px;
|
|
288
|
-
opacity: 0.10;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/* Checkerboard */
|
|
292
|
-
.pattern-checks {
|
|
293
|
-
background-image: repeating-conic-gradient(var(--bg-elevated) 0% 25%, transparent 0% 50%);
|
|
294
|
-
background-size: 20px 20px;
|
|
295
|
-
}
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
---
|
|
299
|
-
|
|
300
|
-
## Z-index layers
|
|
301
|
-
|
|
302
|
-
```css
|
|
303
|
-
--z-base: 0;
|
|
304
|
-
--z-raised: 1;
|
|
305
|
-
--z-dropdown: 100;
|
|
306
|
-
--z-sticky: 200;
|
|
307
|
-
--z-overlay: 300;
|
|
308
|
-
--z-modal: 400;
|
|
309
|
-
--z-toast: 500;
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
---
|
|
313
|
-
|
|
314
|
-
## Breakpoints
|
|
315
|
-
|
|
316
|
-
```css
|
|
317
|
-
--breakpoint-sm: 640px;
|
|
318
|
-
--breakpoint-md: 768px;
|
|
319
|
-
--breakpoint-lg: 1024px; /* sidebar collapses to hamburger below this */
|
|
320
|
-
--breakpoint-xl: 1280px;
|
|
321
|
-
--breakpoint-2xl: 1536px;
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
---
|
|
325
|
-
|
|
326
|
-
## Chart Color Palette
|
|
327
|
-
|
|
328
|
-
```css
|
|
329
|
-
--chart-1: var(--accent); /* #FACC15 — yellow — primary series */
|
|
330
|
-
--chart-2: var(--accent-red); /* red — negative / error */
|
|
331
|
-
--chart-3: var(--accent-blue); /* blue — secondary series */
|
|
332
|
-
--chart-4: var(--accent-green); /* green — positive / success */
|
|
333
|
-
--chart-5: var(--accent-orange); /* orange — warning / tertiary */
|
|
334
|
-
--chart-6: var(--border-color); /* black/white — neutral baseline */
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
Chart rules:
|
|
338
|
-
- Bar charts: `border: var(--border-subtle)` on each bar, flat fill (no gradient), `--radius-none`
|
|
339
|
-
- Line charts: `stroke-width: 2.5px` minimum (thicker than other skills), solid dot markers (not hollow)
|
|
340
|
-
- Area charts: flat fill at `opacity: 0.3` (no gradient)
|
|
341
|
-
- Grid lines: `--border-subtle`, full grid visible
|
|
342
|
-
- Axis labels: `font-family: var(--font-mono)`, `font-size: var(--text-xs)`
|
|
1
|
+
# Design Tokens — Neo-Brutalist UI
|
|
2
|
+
|
|
3
|
+
Single source of truth for all CSS variables. Apply via `data-theme="light"` / `data-theme="dark"` on the root container.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Font imports
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
/* Google Fonts */
|
|
11
|
+
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
System fallbacks (no external fonts):
|
|
15
|
+
```css
|
|
16
|
+
--font-display: "Arial Black", Impact, system-ui, sans-serif;
|
|
17
|
+
--font-body: -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
|
|
18
|
+
--font-mono: "Courier New", Courier, monospace;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Typography
|
|
24
|
+
|
|
25
|
+
```css
|
|
26
|
+
--font-display: 'Space Grotesk', system-ui, sans-serif;
|
|
27
|
+
/* Geometric with personality. Not as neutral as Inter, not as dramatic as Clash Display. */
|
|
28
|
+
/* Alternatives: 'DM Sans', 'Outfit', 'Plus Jakarta Sans' */
|
|
29
|
+
|
|
30
|
+
--font-body: 'Inter', system-ui, sans-serif;
|
|
31
|
+
|
|
32
|
+
--font-mono: 'JetBrains Mono', 'Space Mono', ui-monospace, monospace;
|
|
33
|
+
/* FIRST-CLASS CITIZEN: labels, metadata, badges, status, code, numbers, dates, IDs */
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Font sizes
|
|
37
|
+
|
|
38
|
+
```css
|
|
39
|
+
--text-xs: 0.75rem; /* 12px — mono metadata, badges */
|
|
40
|
+
--text-sm: 0.875rem; /* 14px */
|
|
41
|
+
--text-base: 1rem; /* 16px */
|
|
42
|
+
--text-lg: 1.25rem; /* 20px */
|
|
43
|
+
--text-xl: 1.5rem; /* 24px */
|
|
44
|
+
--text-2xl: 2rem; /* 32px */
|
|
45
|
+
--text-3xl: 2.5rem; /* 40px */
|
|
46
|
+
--text-4xl: 3.5rem; /* 56px — hero headlines */
|
|
47
|
+
--text-5xl: 5rem; /* 80px — manifesto/zine statements */
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Font weights
|
|
51
|
+
|
|
52
|
+
```css
|
|
53
|
+
--weight-regular: 400;
|
|
54
|
+
--weight-medium: 500;
|
|
55
|
+
--weight-semibold: 600;
|
|
56
|
+
--weight-bold: 700;
|
|
57
|
+
--weight-extrabold: 800; /* headings in indie/zine modes */
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Letter spacing
|
|
61
|
+
|
|
62
|
+
```css
|
|
63
|
+
--tracking-tight: 0; /* large headings */
|
|
64
|
+
--tracking-normal: 0em;
|
|
65
|
+
--tracking-wide: 0.05em; /* mono labels, uppercase badges */
|
|
66
|
+
--tracking-wider: 0.1em; /* uppercase section titles */
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Colors — Light Theme (default)
|
|
72
|
+
|
|
73
|
+
```css
|
|
74
|
+
[data-theme="light"] {
|
|
75
|
+
/* Backgrounds */
|
|
76
|
+
--bg-void: #F5F0E8; /* warm off-white — newspaper feel, page background */
|
|
77
|
+
--bg-base: #FFFDF5; /* cream white — main content area */
|
|
78
|
+
--bg-surface: #FFFFFF; /* pure white — cards, panels */
|
|
79
|
+
--bg-elevated: #F5F0E8; /* off-white — hover state, nested sections */
|
|
80
|
+
--bg-overlay: #E8E0D0; /* deeper off-white — modals overlay, popovers */
|
|
81
|
+
|
|
82
|
+
/* Text */
|
|
83
|
+
--text-heading: #1A1A1A;
|
|
84
|
+
--text-primary: #2A2A2A;
|
|
85
|
+
--text-secondary: #666666;
|
|
86
|
+
--text-muted: #999999;
|
|
87
|
+
--text-disabled: #BBBBBB;
|
|
88
|
+
|
|
89
|
+
/* Primary accent — yellow is THE brutalist accent */
|
|
90
|
+
--accent: #FACC15; /* yellow-400 */
|
|
91
|
+
--accent-strong: #EAB308; /* yellow-500 — pressed state */
|
|
92
|
+
--accent-dim: rgba(250,204,21,.20);
|
|
93
|
+
--accent-hover: #EAB308;
|
|
94
|
+
--accent-contrast: #1A1A1A; /* black text on yellow bg */
|
|
95
|
+
|
|
96
|
+
/* Secondary accents — for Creative Playground mode */
|
|
97
|
+
--accent-red: #EF4444;
|
|
98
|
+
--accent-blue: #3B82F6;
|
|
99
|
+
--accent-green: #22C55E;
|
|
100
|
+
--accent-pink: #EC4899;
|
|
101
|
+
--accent-orange: #F97316;
|
|
102
|
+
|
|
103
|
+
/* Borders — THE most important token in this skill */
|
|
104
|
+
--border-subtle: 1px solid #1A1A1A; /* dividers, table cell borders */
|
|
105
|
+
--border-thick: 2px solid #1A1A1A; /* default interactive border */
|
|
106
|
+
--border-thicker: 3px solid #1A1A1A; /* cards, buttons, feature elements */
|
|
107
|
+
--border-thickest: 4px solid #1A1A1A; /* hero cards, main CTAs */
|
|
108
|
+
|
|
109
|
+
/* Border color only (for custom uses) */
|
|
110
|
+
--border-color: #1A1A1A;
|
|
111
|
+
--border-color-subtle: #CCCCCC;
|
|
112
|
+
|
|
113
|
+
/* Semantic */
|
|
114
|
+
--semantic-green: #22C55E;
|
|
115
|
+
--semantic-green-dim: rgba(34,197,94,.15);
|
|
116
|
+
--semantic-amber: #F59E0B;
|
|
117
|
+
--semantic-amber-dim: rgba(245,158,11,.15);
|
|
118
|
+
--semantic-red: #EF4444;
|
|
119
|
+
--semantic-red-dim: rgba(239,68,68,.15);
|
|
120
|
+
--semantic-blue: #3B82F6;
|
|
121
|
+
--semantic-blue-dim: rgba(59,130,246,.15);
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Colors — Dark Theme
|
|
128
|
+
|
|
129
|
+
```css
|
|
130
|
+
[data-theme="dark"] {
|
|
131
|
+
/* Backgrounds */
|
|
132
|
+
--bg-void: #111111;
|
|
133
|
+
--bg-base: #1A1A1A;
|
|
134
|
+
--bg-surface: #242424;
|
|
135
|
+
--bg-elevated: #2E2E2E;
|
|
136
|
+
--bg-overlay: #383838;
|
|
137
|
+
|
|
138
|
+
/* Text */
|
|
139
|
+
--text-heading: #FFFFFF;
|
|
140
|
+
--text-primary: #E0E0E0;
|
|
141
|
+
--text-secondary: #999999;
|
|
142
|
+
--text-muted: #666666;
|
|
143
|
+
--text-disabled: #444444;
|
|
144
|
+
|
|
145
|
+
/* Primary accent — yellow stays strong in dark */
|
|
146
|
+
--accent: #FACC15;
|
|
147
|
+
--accent-strong: #EAB308;
|
|
148
|
+
--accent-dim: rgba(250,204,21,.20);
|
|
149
|
+
--accent-hover: #EAB308;
|
|
150
|
+
--accent-contrast: #1A1A1A;
|
|
151
|
+
|
|
152
|
+
/* Secondary accents — brighter in dark (but NOT neon — saturated and grounded) */
|
|
153
|
+
--accent-red: #F87171;
|
|
154
|
+
--accent-blue: #60A5FA;
|
|
155
|
+
--accent-green: #4ADE80;
|
|
156
|
+
--accent-pink: #F472B6;
|
|
157
|
+
--accent-orange: #FB923C;
|
|
158
|
+
|
|
159
|
+
/* Borders — inverted: light on dark */
|
|
160
|
+
--border-subtle: 1px solid #444444;
|
|
161
|
+
--border-thick: 2px solid #E0E0E0;
|
|
162
|
+
--border-thicker: 3px solid #E0E0E0;
|
|
163
|
+
--border-thickest: 4px solid #E0E0E0;
|
|
164
|
+
|
|
165
|
+
--border-color: #E0E0E0;
|
|
166
|
+
--border-color-subtle: #444444;
|
|
167
|
+
|
|
168
|
+
/* Semantic */
|
|
169
|
+
--semantic-green: #4ADE80;
|
|
170
|
+
--semantic-green-dim: rgba(74,222,128,.15);
|
|
171
|
+
--semantic-amber: #FCD34D;
|
|
172
|
+
--semantic-amber-dim: rgba(252,211,77,.15);
|
|
173
|
+
--semantic-red: #F87171;
|
|
174
|
+
--semantic-red-dim: rgba(248,113,113,.15);
|
|
175
|
+
--semantic-blue: #60A5FA;
|
|
176
|
+
--semantic-blue-dim: rgba(96,165,250,.15);
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Shadows — Hard Offset (the most distinctive token)
|
|
183
|
+
|
|
184
|
+
```css
|
|
185
|
+
/* ZERO BLUR. Solid offset. Non-negotiable. */
|
|
186
|
+
|
|
187
|
+
/* Light theme shadows — black offset */
|
|
188
|
+
--shadow-sm: 2px 2px 0 var(--border-color); /* small elements */
|
|
189
|
+
--shadow-md: 4px 4px 0 var(--border-color); /* cards, buttons */
|
|
190
|
+
--shadow-lg: 6px 6px 0 var(--border-color); /* featured cards, hover state */
|
|
191
|
+
--shadow-xl: 8px 8px 0 var(--border-color); /* hero CTA, main action */
|
|
192
|
+
|
|
193
|
+
/* Colored shadows — for Creative Playground mode */
|
|
194
|
+
--shadow-accent: 4px 4px 0 var(--accent);
|
|
195
|
+
--shadow-red: 4px 4px 0 var(--accent-red);
|
|
196
|
+
--shadow-blue: 4px 4px 0 var(--accent-blue);
|
|
197
|
+
--shadow-green: 4px 4px 0 var(--accent-green);
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Direction rule: **all hard shadows go bottom-right** (positive x, positive y). Never mix directions on the same page.
|
|
201
|
+
|
|
202
|
+
In dark theme, `--border-color` resolves to `#E0E0E0`, so shadows automatically invert to light-on-dark.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Border Radius — Extremes Only
|
|
207
|
+
|
|
208
|
+
```css
|
|
209
|
+
--radius-none: 0; /* DEFAULT — cards, inputs, buttons, most elements */
|
|
210
|
+
--radius-sm: 0.25rem; /* 4px — used rarely, only for very small inner elements */
|
|
211
|
+
--radius-md: 0.375rem; /* 6px — inputs optionally, max allowed before "too normal" */
|
|
212
|
+
--radius-full: 9999px; /* pills — badges, tags, status dots, pill buttons */
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Rule:** use `--radius-none` (0) or `--radius-full` (9999px). Nothing between 6px and 9998px. The extreme contrast between square and pill is part of the aesthetic. `8–12px` radius is "clean-saas territory" — forbidden here.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Spacing
|
|
220
|
+
|
|
221
|
+
4px base rhythm. 8px standard unit.
|
|
222
|
+
|
|
223
|
+
```css
|
|
224
|
+
--space-0: 0;
|
|
225
|
+
--space-1: 0.25rem; /* 4px */
|
|
226
|
+
--space-2: 0.5rem; /* 8px */
|
|
227
|
+
--space-3: 0.75rem; /* 12px */
|
|
228
|
+
--space-4: 1rem; /* 16px */
|
|
229
|
+
--space-5: 1.25rem; /* 20px */
|
|
230
|
+
--space-6: 1.5rem; /* 24px */
|
|
231
|
+
--space-8: 2rem; /* 32px */
|
|
232
|
+
--space-10: 2.5rem; /* 40px */
|
|
233
|
+
--space-12: 3rem; /* 48px */
|
|
234
|
+
--space-16: 4rem; /* 64px */
|
|
235
|
+
--space-20: 5rem; /* 80px — section gap minimum */
|
|
236
|
+
--space-24: 6rem; /* 96px */
|
|
237
|
+
--space-28: 7rem; /* 112px */
|
|
238
|
+
--space-32: 8rem; /* 128px */
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Section gaps: `--space-20` to `--space-28` between major page sections. Generous whitespace makes the thick borders breathe.
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Control Heights — Chunky (larger than other skills)
|
|
246
|
+
|
|
247
|
+
```css
|
|
248
|
+
--control-xs: 2rem; /* 32px */
|
|
249
|
+
--control-sm: 2.25rem; /* 36px */
|
|
250
|
+
--control-md: 2.75rem; /* 44px — DEFAULT input/button */
|
|
251
|
+
--control-lg: 3.25rem; /* 52px — primary CTA button */
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Brutalist buttons are **chunky, not elegant**. The extra height reinforces the physical, constructed feel.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Decorative Patterns
|
|
259
|
+
|
|
260
|
+
One pattern maximum per page. Applied to the background of ONE section only — never the whole page.
|
|
261
|
+
|
|
262
|
+
```css
|
|
263
|
+
/* Dots */
|
|
264
|
+
.pattern-dots {
|
|
265
|
+
background-image: radial-gradient(var(--border-color) 1px, transparent 1px);
|
|
266
|
+
background-size: 20px 20px;
|
|
267
|
+
opacity: 0.15;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/* Horizontal lines */
|
|
271
|
+
.pattern-lines {
|
|
272
|
+
background-image: repeating-linear-gradient(
|
|
273
|
+
0deg,
|
|
274
|
+
transparent,
|
|
275
|
+
transparent 19px,
|
|
276
|
+
var(--border-color) 19px,
|
|
277
|
+
var(--border-color) 20px
|
|
278
|
+
);
|
|
279
|
+
opacity: 0.12;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* Full grid */
|
|
283
|
+
.pattern-grid {
|
|
284
|
+
background-image:
|
|
285
|
+
linear-gradient(var(--border-color) 1px, transparent 1px),
|
|
286
|
+
linear-gradient(90deg, var(--border-color) 1px, transparent 1px);
|
|
287
|
+
background-size: 20px 20px;
|
|
288
|
+
opacity: 0.10;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/* Checkerboard */
|
|
292
|
+
.pattern-checks {
|
|
293
|
+
background-image: repeating-conic-gradient(var(--bg-elevated) 0% 25%, transparent 0% 50%);
|
|
294
|
+
background-size: 20px 20px;
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Z-index layers
|
|
301
|
+
|
|
302
|
+
```css
|
|
303
|
+
--z-base: 0;
|
|
304
|
+
--z-raised: 1;
|
|
305
|
+
--z-dropdown: 100;
|
|
306
|
+
--z-sticky: 200;
|
|
307
|
+
--z-overlay: 300;
|
|
308
|
+
--z-modal: 400;
|
|
309
|
+
--z-toast: 500;
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Breakpoints
|
|
315
|
+
|
|
316
|
+
```css
|
|
317
|
+
--breakpoint-sm: 640px;
|
|
318
|
+
--breakpoint-md: 768px;
|
|
319
|
+
--breakpoint-lg: 1024px; /* sidebar collapses to hamburger below this */
|
|
320
|
+
--breakpoint-xl: 1280px;
|
|
321
|
+
--breakpoint-2xl: 1536px;
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Chart Color Palette
|
|
327
|
+
|
|
328
|
+
```css
|
|
329
|
+
--chart-1: var(--accent); /* #FACC15 — yellow — primary series */
|
|
330
|
+
--chart-2: var(--accent-red); /* red — negative / error */
|
|
331
|
+
--chart-3: var(--accent-blue); /* blue — secondary series */
|
|
332
|
+
--chart-4: var(--accent-green); /* green — positive / success */
|
|
333
|
+
--chart-5: var(--accent-orange); /* orange — warning / tertiary */
|
|
334
|
+
--chart-6: var(--border-color); /* black/white — neutral baseline */
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Chart rules:
|
|
338
|
+
- Bar charts: `border: var(--border-subtle)` on each bar, flat fill (no gradient), `--radius-none`
|
|
339
|
+
- Line charts: `stroke-width: 2.5px` minimum (thicker than other skills), solid dot markers (not hollow)
|
|
340
|
+
- Area charts: flat fill at `opacity: 0.3` (no gradient)
|
|
341
|
+
- Grid lines: `--border-subtle`, full grid visible
|
|
342
|
+
- Axis labels: `font-family: var(--font-mono)`, `font-size: var(--text-xs)`
|