@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,244 +1,244 @@
|
|
|
1
|
-
# Design Tokens — Clean SaaS UI
|
|
2
|
-
|
|
3
|
-
This file is the source of truth for all CSS variables. Always apply tokens from this file — never hardcode values.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Token application scope
|
|
8
|
-
|
|
9
|
-
Place root tokens on the page root or theme container:
|
|
10
|
-
|
|
11
|
-
```html
|
|
12
|
-
<html data-theme="light">
|
|
13
|
-
<!-- or -->
|
|
14
|
-
<div data-theme="dark">
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
All token overrides for dark theme go inside `[data-theme="dark"] { ... }`.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Typography
|
|
22
|
-
|
|
23
|
-
```css
|
|
24
|
-
:root {
|
|
25
|
-
--font-display: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
26
|
-
--font-body: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
27
|
-
--font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
**Both display and body are sans-serif (Inter).** The differentiator is weight and tracking, not font family.
|
|
32
|
-
|
|
33
|
-
- Headings: `font-weight: 600–700`, `letter-spacing:
|
|
34
|
-
- Body: `font-weight: 400`, `letter-spacing: normal`
|
|
35
|
-
- Mono: used ONLY for code, IDs, technical metadata — never for paragraphs or navigation
|
|
36
|
-
|
|
37
|
-
### Font sizes
|
|
38
|
-
|
|
39
|
-
```css
|
|
40
|
-
:root {
|
|
41
|
-
--text-xs: 0.75rem; /* 12px — helper text, captions, mono labels */
|
|
42
|
-
--text-sm: 0.875rem; /* 14px — table data, form labels, nav items */
|
|
43
|
-
--text-base: 1rem; /* 16px — body text */
|
|
44
|
-
--text-lg: 1.125rem; /* 18px — section titles, card headings */
|
|
45
|
-
--text-xl: 1.25rem; /* 20px */
|
|
46
|
-
--text-2xl: 1.5rem; /* 24px — page titles */
|
|
47
|
-
--text-3xl: 1.875rem; /* 30px — stat numbers */
|
|
48
|
-
--text-4xl: 2.25rem; /* 36px — hero stat numbers */
|
|
49
|
-
--text-5xl: 3rem; /* 48px — hero headings (marketing pages only) */
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Colors — Light theme (default)
|
|
56
|
-
|
|
57
|
-
```css
|
|
58
|
-
:root,
|
|
59
|
-
[data-theme="light"] {
|
|
60
|
-
/* Backgrounds */
|
|
61
|
-
--bg-void: #F3F4F6; /* gray-100 — page background */
|
|
62
|
-
--bg-base: #F9FAFB; /* gray-50 — app shell background */
|
|
63
|
-
--bg-surface: #FFFFFF; /* cards, panels, sidebar */
|
|
64
|
-
--bg-elevated: #F3F4F6; /* gray-100 — hover states, nested areas */
|
|
65
|
-
--bg-overlay: #E5E7EB; /* gray-200 — overlays, dividers */
|
|
66
|
-
|
|
67
|
-
/* Text */
|
|
68
|
-
--text-heading: #111827; /* gray-900 — page titles, card headings */
|
|
69
|
-
--text-primary: #374151; /* gray-700 — body, table data */
|
|
70
|
-
--text-secondary: #6B7280; /* gray-500 — helper text, labels */
|
|
71
|
-
--text-muted: #9CA3AF; /* gray-400 — placeholders, timestamps */
|
|
72
|
-
|
|
73
|
-
/* Accent — professional blue */
|
|
74
|
-
--accent: #2563EB; /* blue-600 */
|
|
75
|
-
--accent-strong: #1D4ED8; /* blue-700 — hover on primary buttons */
|
|
76
|
-
--accent-dim: rgba(37, 99, 235, 0.10); /* bg for accent highlights */
|
|
77
|
-
--accent-hover: #1D4ED8;
|
|
78
|
-
--accent-contrast: #FFFFFF; /* text on accent bg */
|
|
79
|
-
|
|
80
|
-
/* Borders */
|
|
81
|
-
--border-subtle: #F3F4F6; /* gray-100 — very subtle dividers */
|
|
82
|
-
--border-default: #E5E7EB; /* gray-200 — standard borders */
|
|
83
|
-
--border-medium: #D1D5DB; /* gray-300 — input borders, card borders */
|
|
84
|
-
--border-strong: #9CA3AF; /* gray-400 — strong dividers */
|
|
85
|
-
--border-accent: #2563EB; /* accent border — active states */
|
|
86
|
-
|
|
87
|
-
/* Semantic */
|
|
88
|
-
--semantic-success: #16A34A; /* green-600 */
|
|
89
|
-
--semantic-success-dim: rgba(22, 163, 74, 0.10);
|
|
90
|
-
--semantic-warning: #D97706; /* amber-600 */
|
|
91
|
-
--semantic-warning-dim: rgba(217, 119, 6, 0.10);
|
|
92
|
-
--semantic-danger: #DC2626; /* red-600 */
|
|
93
|
-
--semantic-danger-dim: rgba(220, 38, 38, 0.10);
|
|
94
|
-
--semantic-info: #2563EB; /* blue-600 — same as accent */
|
|
95
|
-
--semantic-info-dim: rgba(37, 99, 235, 0.10);
|
|
96
|
-
--semantic-neutral: #6B7280; /* gray-500 */
|
|
97
|
-
--semantic-neutral-dim: rgba(107, 114, 128, 0.10);
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## Colors — Dark theme
|
|
104
|
-
|
|
105
|
-
```css
|
|
106
|
-
[data-theme="dark"] {
|
|
107
|
-
/* Backgrounds */
|
|
108
|
-
--bg-void: #111827; /* gray-900 */
|
|
109
|
-
--bg-base: #1F2937; /* gray-800 */
|
|
110
|
-
--bg-surface: #374151; /* gray-700 */
|
|
111
|
-
--bg-elevated: #4B5563; /* gray-600 */
|
|
112
|
-
--bg-overlay: #6B7280; /* gray-500 */
|
|
113
|
-
|
|
114
|
-
/* Text */
|
|
115
|
-
--text-heading: #F9FAFB; /* gray-50 */
|
|
116
|
-
--text-primary: #E5E7EB; /* gray-200 */
|
|
117
|
-
--text-secondary: #9CA3AF; /* gray-400 */
|
|
118
|
-
--text-muted: #6B7280; /* gray-500 */
|
|
119
|
-
|
|
120
|
-
/* Accent — slightly brighter blue for dark bg */
|
|
121
|
-
--accent: #3B82F6; /* blue-500 */
|
|
122
|
-
--accent-strong: #2563EB; /* blue-600 */
|
|
123
|
-
--accent-dim: rgba(59, 130, 246, 0.15);
|
|
124
|
-
--accent-hover: #2563EB;
|
|
125
|
-
--accent-contrast: #FFFFFF;
|
|
126
|
-
|
|
127
|
-
/* Borders */
|
|
128
|
-
--border-subtle: #1F2937;
|
|
129
|
-
--border-default: #374151;
|
|
130
|
-
--border-medium: #4B5563;
|
|
131
|
-
--border-strong: #6B7280;
|
|
132
|
-
--border-accent: #3B82F6;
|
|
133
|
-
|
|
134
|
-
/* Semantic */
|
|
135
|
-
--semantic-success: #22C55E; /* green-500 */
|
|
136
|
-
--semantic-success-dim: rgba(34, 197, 94, 0.15);
|
|
137
|
-
--semantic-warning: #F59E0B; /* amber-500 */
|
|
138
|
-
--semantic-warning-dim: rgba(245, 158, 11, 0.15);
|
|
139
|
-
--semantic-danger: #EF4444; /* red-500 */
|
|
140
|
-
--semantic-danger-dim: rgba(239, 68, 68, 0.15);
|
|
141
|
-
--semantic-info: #3B82F6;
|
|
142
|
-
--semantic-info-dim: rgba(59, 130, 246, 0.15);
|
|
143
|
-
--semantic-neutral: #9CA3AF;
|
|
144
|
-
--semantic-neutral-dim: rgba(156, 163, 175, 0.15);
|
|
145
|
-
}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## Shadows — Subtle (more subtle than other skills)
|
|
151
|
-
|
|
152
|
-
```css
|
|
153
|
-
:root {
|
|
154
|
-
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
155
|
-
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
|
|
156
|
-
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
|
|
157
|
-
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.08);
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
**Note:** Shadows in Clean SaaS are nearly imperceptible. Separation comes primarily from borders and background differences, not from elevation shadows. Never use dramatic shadows.
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## Border radius — Moderate
|
|
166
|
-
|
|
167
|
-
```css
|
|
168
|
-
:root {
|
|
169
|
-
--radius-sm: 0.25rem; /* 4px — badges, chips, tags */
|
|
170
|
-
--radius-md: 0.375rem; /* 6px — inputs, buttons */
|
|
171
|
-
--radius-lg: 0.5rem; /* 8px — cards, panels */
|
|
172
|
-
--radius-xl: 0.75rem; /* 12px — modals, larger cards */
|
|
173
|
-
--radius-2xl: 1rem; /* 16px — hero sections (marketing only) */
|
|
174
|
-
--radius-full: 9999px; /* pills, avatars, toggle switches */
|
|
175
|
-
}
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Spacing — 8px base grid
|
|
181
|
-
|
|
182
|
-
```css
|
|
183
|
-
:root {
|
|
184
|
-
--space-1: 0.25rem; /* 4px */
|
|
185
|
-
--space-2: 0.5rem; /* 8px */
|
|
186
|
-
--space-3: 0.75rem; /* 12px */
|
|
187
|
-
--space-4: 1rem; /* 16px */
|
|
188
|
-
--space-5: 1.25rem; /* 20px */
|
|
189
|
-
--space-6: 1.5rem; /* 24px — standard content padding */
|
|
190
|
-
--space-8: 2rem; /* 32px */
|
|
191
|
-
--space-10: 2.5rem; /* 40px */
|
|
192
|
-
--space-12: 3rem; /* 48px */
|
|
193
|
-
--space-16: 4rem; /* 64px */
|
|
194
|
-
--space-20: 5rem; /* 80px */
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
---
|
|
199
|
-
|
|
200
|
-
## Control heights — Strict
|
|
201
|
-
|
|
202
|
-
```css
|
|
203
|
-
:root {
|
|
204
|
-
--control-xs: 1.75rem; /* 28px — compact table actions, icon buttons */
|
|
205
|
-
--control-sm: 2rem; /* 32px — small buttons, compact selects */
|
|
206
|
-
--control-md: 2.25rem; /* 36px — DEFAULT for all inputs and buttons */
|
|
207
|
-
--control-lg: 2.5rem; /* 40px — prominent inputs, search bars */
|
|
208
|
-
}
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
**Note:** `control-md` is 36px (not 40px like warm-craft). Clean SaaS is more compact.
|
|
212
|
-
|
|
213
|
-
Every button and input **must** use a `--control-*` height. Never freehand a control height.
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Z-index scale
|
|
218
|
-
|
|
219
|
-
```css
|
|
220
|
-
:root {
|
|
221
|
-
--z-base: 0;
|
|
222
|
-
--z-raised: 10;
|
|
223
|
-
--z-sticky: 100; /* sticky headers, filter bars */
|
|
224
|
-
--z-overlay: 200; /* overlays, backdrops */
|
|
225
|
-
--z-modal: 300; /* modals, dialogs */
|
|
226
|
-
--z-toast: 400; /* toast notifications */
|
|
227
|
-
--z-tooltip: 500; /* tooltips */
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## Token scope guardrails
|
|
234
|
-
|
|
235
|
-
| Token | Allowed on | Never on |
|
|
236
|
-
|-------|-----------|---------|
|
|
237
|
-
| `--bg-void` | page root, app shell | cards, modals |
|
|
238
|
-
| `--bg-surface` | cards, sidebar, modals | page background |
|
|
239
|
-
| `--bg-elevated` | hover states, nested panels | main surfaces |
|
|
240
|
-
| `--accent` | buttons, links, active states, borders | body text |
|
|
241
|
-
| `--accent-dim` | bg of highlighted rows, selected states | interactive elements |
|
|
242
|
-
| `--text-muted` | timestamps, metadata, placeholders | headings, primary body |
|
|
243
|
-
| `--font-mono` | code, IDs, technical metadata | navigation, headings, paragraphs |
|
|
244
|
-
| `--shadow-lg` | modals, popovers | cards (use shadow-sm or shadow-md) |
|
|
1
|
+
# Design Tokens — Clean SaaS UI
|
|
2
|
+
|
|
3
|
+
This file is the source of truth for all CSS variables. Always apply tokens from this file — never hardcode values.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Token application scope
|
|
8
|
+
|
|
9
|
+
Place root tokens on the page root or theme container:
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<html data-theme="light">
|
|
13
|
+
<!-- or -->
|
|
14
|
+
<div data-theme="dark">
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
All token overrides for dark theme go inside `[data-theme="dark"] { ... }`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Typography
|
|
22
|
+
|
|
23
|
+
```css
|
|
24
|
+
:root {
|
|
25
|
+
--font-display: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
26
|
+
--font-body: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
27
|
+
--font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Both display and body are sans-serif (Inter).** The differentiator is weight and tracking, not font family.
|
|
32
|
+
|
|
33
|
+
- Headings: `font-weight: 600–700`, `letter-spacing: 0`
|
|
34
|
+
- Body: `font-weight: 400`, `letter-spacing: normal`
|
|
35
|
+
- Mono: used ONLY for code, IDs, technical metadata — never for paragraphs or navigation
|
|
36
|
+
|
|
37
|
+
### Font sizes
|
|
38
|
+
|
|
39
|
+
```css
|
|
40
|
+
:root {
|
|
41
|
+
--text-xs: 0.75rem; /* 12px — helper text, captions, mono labels */
|
|
42
|
+
--text-sm: 0.875rem; /* 14px — table data, form labels, nav items */
|
|
43
|
+
--text-base: 1rem; /* 16px — body text */
|
|
44
|
+
--text-lg: 1.125rem; /* 18px — section titles, card headings */
|
|
45
|
+
--text-xl: 1.25rem; /* 20px */
|
|
46
|
+
--text-2xl: 1.5rem; /* 24px — page titles */
|
|
47
|
+
--text-3xl: 1.875rem; /* 30px — stat numbers */
|
|
48
|
+
--text-4xl: 2.25rem; /* 36px — hero stat numbers */
|
|
49
|
+
--text-5xl: 3rem; /* 48px — hero headings (marketing pages only) */
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Colors — Light theme (default)
|
|
56
|
+
|
|
57
|
+
```css
|
|
58
|
+
:root,
|
|
59
|
+
[data-theme="light"] {
|
|
60
|
+
/* Backgrounds */
|
|
61
|
+
--bg-void: #F3F4F6; /* gray-100 — page background */
|
|
62
|
+
--bg-base: #F9FAFB; /* gray-50 — app shell background */
|
|
63
|
+
--bg-surface: #FFFFFF; /* cards, panels, sidebar */
|
|
64
|
+
--bg-elevated: #F3F4F6; /* gray-100 — hover states, nested areas */
|
|
65
|
+
--bg-overlay: #E5E7EB; /* gray-200 — overlays, dividers */
|
|
66
|
+
|
|
67
|
+
/* Text */
|
|
68
|
+
--text-heading: #111827; /* gray-900 — page titles, card headings */
|
|
69
|
+
--text-primary: #374151; /* gray-700 — body, table data */
|
|
70
|
+
--text-secondary: #6B7280; /* gray-500 — helper text, labels */
|
|
71
|
+
--text-muted: #9CA3AF; /* gray-400 — placeholders, timestamps */
|
|
72
|
+
|
|
73
|
+
/* Accent — professional blue */
|
|
74
|
+
--accent: #2563EB; /* blue-600 */
|
|
75
|
+
--accent-strong: #1D4ED8; /* blue-700 — hover on primary buttons */
|
|
76
|
+
--accent-dim: rgba(37, 99, 235, 0.10); /* bg for accent highlights */
|
|
77
|
+
--accent-hover: #1D4ED8;
|
|
78
|
+
--accent-contrast: #FFFFFF; /* text on accent bg */
|
|
79
|
+
|
|
80
|
+
/* Borders */
|
|
81
|
+
--border-subtle: #F3F4F6; /* gray-100 — very subtle dividers */
|
|
82
|
+
--border-default: #E5E7EB; /* gray-200 — standard borders */
|
|
83
|
+
--border-medium: #D1D5DB; /* gray-300 — input borders, card borders */
|
|
84
|
+
--border-strong: #9CA3AF; /* gray-400 — strong dividers */
|
|
85
|
+
--border-accent: #2563EB; /* accent border — active states */
|
|
86
|
+
|
|
87
|
+
/* Semantic */
|
|
88
|
+
--semantic-success: #16A34A; /* green-600 */
|
|
89
|
+
--semantic-success-dim: rgba(22, 163, 74, 0.10);
|
|
90
|
+
--semantic-warning: #D97706; /* amber-600 */
|
|
91
|
+
--semantic-warning-dim: rgba(217, 119, 6, 0.10);
|
|
92
|
+
--semantic-danger: #DC2626; /* red-600 */
|
|
93
|
+
--semantic-danger-dim: rgba(220, 38, 38, 0.10);
|
|
94
|
+
--semantic-info: #2563EB; /* blue-600 — same as accent */
|
|
95
|
+
--semantic-info-dim: rgba(37, 99, 235, 0.10);
|
|
96
|
+
--semantic-neutral: #6B7280; /* gray-500 */
|
|
97
|
+
--semantic-neutral-dim: rgba(107, 114, 128, 0.10);
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Colors — Dark theme
|
|
104
|
+
|
|
105
|
+
```css
|
|
106
|
+
[data-theme="dark"] {
|
|
107
|
+
/* Backgrounds */
|
|
108
|
+
--bg-void: #111827; /* gray-900 */
|
|
109
|
+
--bg-base: #1F2937; /* gray-800 */
|
|
110
|
+
--bg-surface: #374151; /* gray-700 */
|
|
111
|
+
--bg-elevated: #4B5563; /* gray-600 */
|
|
112
|
+
--bg-overlay: #6B7280; /* gray-500 */
|
|
113
|
+
|
|
114
|
+
/* Text */
|
|
115
|
+
--text-heading: #F9FAFB; /* gray-50 */
|
|
116
|
+
--text-primary: #E5E7EB; /* gray-200 */
|
|
117
|
+
--text-secondary: #9CA3AF; /* gray-400 */
|
|
118
|
+
--text-muted: #6B7280; /* gray-500 */
|
|
119
|
+
|
|
120
|
+
/* Accent — slightly brighter blue for dark bg */
|
|
121
|
+
--accent: #3B82F6; /* blue-500 */
|
|
122
|
+
--accent-strong: #2563EB; /* blue-600 */
|
|
123
|
+
--accent-dim: rgba(59, 130, 246, 0.15);
|
|
124
|
+
--accent-hover: #2563EB;
|
|
125
|
+
--accent-contrast: #FFFFFF;
|
|
126
|
+
|
|
127
|
+
/* Borders */
|
|
128
|
+
--border-subtle: #1F2937;
|
|
129
|
+
--border-default: #374151;
|
|
130
|
+
--border-medium: #4B5563;
|
|
131
|
+
--border-strong: #6B7280;
|
|
132
|
+
--border-accent: #3B82F6;
|
|
133
|
+
|
|
134
|
+
/* Semantic */
|
|
135
|
+
--semantic-success: #22C55E; /* green-500 */
|
|
136
|
+
--semantic-success-dim: rgba(34, 197, 94, 0.15);
|
|
137
|
+
--semantic-warning: #F59E0B; /* amber-500 */
|
|
138
|
+
--semantic-warning-dim: rgba(245, 158, 11, 0.15);
|
|
139
|
+
--semantic-danger: #EF4444; /* red-500 */
|
|
140
|
+
--semantic-danger-dim: rgba(239, 68, 68, 0.15);
|
|
141
|
+
--semantic-info: #3B82F6;
|
|
142
|
+
--semantic-info-dim: rgba(59, 130, 246, 0.15);
|
|
143
|
+
--semantic-neutral: #9CA3AF;
|
|
144
|
+
--semantic-neutral-dim: rgba(156, 163, 175, 0.15);
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Shadows — Subtle (more subtle than other skills)
|
|
151
|
+
|
|
152
|
+
```css
|
|
153
|
+
:root {
|
|
154
|
+
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
155
|
+
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
|
|
156
|
+
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
|
|
157
|
+
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.08);
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Note:** Shadows in Clean SaaS are nearly imperceptible. Separation comes primarily from borders and background differences, not from elevation shadows. Never use dramatic shadows.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Border radius — Moderate
|
|
166
|
+
|
|
167
|
+
```css
|
|
168
|
+
:root {
|
|
169
|
+
--radius-sm: 0.25rem; /* 4px — badges, chips, tags */
|
|
170
|
+
--radius-md: 0.375rem; /* 6px — inputs, buttons */
|
|
171
|
+
--radius-lg: 0.5rem; /* 8px — cards, panels */
|
|
172
|
+
--radius-xl: 0.75rem; /* 12px — modals, larger cards */
|
|
173
|
+
--radius-2xl: 1rem; /* 16px — hero sections (marketing only) */
|
|
174
|
+
--radius-full: 9999px; /* pills, avatars, toggle switches */
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Spacing — 8px base grid
|
|
181
|
+
|
|
182
|
+
```css
|
|
183
|
+
:root {
|
|
184
|
+
--space-1: 0.25rem; /* 4px */
|
|
185
|
+
--space-2: 0.5rem; /* 8px */
|
|
186
|
+
--space-3: 0.75rem; /* 12px */
|
|
187
|
+
--space-4: 1rem; /* 16px */
|
|
188
|
+
--space-5: 1.25rem; /* 20px */
|
|
189
|
+
--space-6: 1.5rem; /* 24px — standard content padding */
|
|
190
|
+
--space-8: 2rem; /* 32px */
|
|
191
|
+
--space-10: 2.5rem; /* 40px */
|
|
192
|
+
--space-12: 3rem; /* 48px */
|
|
193
|
+
--space-16: 4rem; /* 64px */
|
|
194
|
+
--space-20: 5rem; /* 80px */
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Control heights — Strict
|
|
201
|
+
|
|
202
|
+
```css
|
|
203
|
+
:root {
|
|
204
|
+
--control-xs: 1.75rem; /* 28px — compact table actions, icon buttons */
|
|
205
|
+
--control-sm: 2rem; /* 32px — small buttons, compact selects */
|
|
206
|
+
--control-md: 2.25rem; /* 36px — DEFAULT for all inputs and buttons */
|
|
207
|
+
--control-lg: 2.5rem; /* 40px — prominent inputs, search bars */
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Note:** `control-md` is 36px (not 40px like warm-craft). Clean SaaS is more compact.
|
|
212
|
+
|
|
213
|
+
Every button and input **must** use a `--control-*` height. Never freehand a control height.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Z-index scale
|
|
218
|
+
|
|
219
|
+
```css
|
|
220
|
+
:root {
|
|
221
|
+
--z-base: 0;
|
|
222
|
+
--z-raised: 10;
|
|
223
|
+
--z-sticky: 100; /* sticky headers, filter bars */
|
|
224
|
+
--z-overlay: 200; /* overlays, backdrops */
|
|
225
|
+
--z-modal: 300; /* modals, dialogs */
|
|
226
|
+
--z-toast: 400; /* toast notifications */
|
|
227
|
+
--z-tooltip: 500; /* tooltips */
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Token scope guardrails
|
|
234
|
+
|
|
235
|
+
| Token | Allowed on | Never on |
|
|
236
|
+
|-------|-----------|---------|
|
|
237
|
+
| `--bg-void` | page root, app shell | cards, modals |
|
|
238
|
+
| `--bg-surface` | cards, sidebar, modals | page background |
|
|
239
|
+
| `--bg-elevated` | hover states, nested panels | main surfaces |
|
|
240
|
+
| `--accent` | buttons, links, active states, borders | body text |
|
|
241
|
+
| `--accent-dim` | bg of highlighted rows, selected states | interactive elements |
|
|
242
|
+
| `--text-muted` | timestamps, metadata, placeholders | headings, primary body |
|
|
243
|
+
| `--font-mono` | code, IDs, technical metadata | navigation, headings, paragraphs |
|
|
244
|
+
| `--shadow-lg` | modals, popovers | cards (use shadow-sm or shadow-md) |
|