@jaimevalasek/aioson 1.5.1 → 1.6.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 +6 -0
- package/docs/design-previews/aurora-command-ui-website.html +884 -0
- package/docs/design-previews/aurora-command-ui.html +682 -0
- package/docs/design-previews/bold-editorial-ui-website.html +658 -0
- package/docs/design-previews/bold-editorial-ui.html +717 -0
- package/docs/design-previews/clean-saas-ui-website.html +1202 -0
- package/docs/design-previews/clean-saas-ui.html +549 -0
- package/docs/design-previews/cognitive-core-ui-website.html +1009 -0
- package/docs/design-previews/cognitive-core-ui.html +463 -0
- package/docs/design-previews/glassmorphism-ui-website.html +572 -0
- package/docs/design-previews/glassmorphism-ui.html +886 -0
- package/docs/design-previews/index.html +699 -0
- package/docs/design-previews/interface-design-website.html +1187 -0
- package/docs/design-previews/interface-design.html +513 -0
- package/docs/design-previews/neo-brutalist-ui-website.html +621 -0
- package/docs/design-previews/neo-brutalist-ui.html +797 -0
- package/docs/design-previews/premium-command-center-ui-website.html +1217 -0
- package/docs/design-previews/premium-command-center-ui.html +552 -0
- package/docs/design-previews/warm-craft-ui-website.html +684 -0
- package/docs/design-previews/warm-craft-ui.html +739 -0
- package/docs/en/cli-reference.md +20 -9
- package/docs/pt/README.md +7 -0
- package/docs/pt/agent-sharding.md +132 -0
- package/docs/pt/agentes.md +8 -2
- package/docs/pt/busca-de-contexto.md +129 -0
- package/docs/pt/cache-de-contexto.md +156 -0
- package/docs/pt/comandos-cli.md +28 -0
- package/docs/pt/design-hybrid-forge.md +107 -0
- package/docs/pt/inicio-rapido.md +54 -3
- package/docs/pt/inteligencia-adaptativa.md +324 -0
- package/docs/pt/monitor-de-contexto.md +104 -0
- package/docs/pt/recuperacao-de-sessao.md +125 -0
- package/docs/pt/sandbox.md +125 -0
- package/docs/pt/skills.md +98 -6
- package/package.json +1 -1
- package/src/agent-loader.js +280 -0
- package/src/cli.js +94 -0
- package/src/commands/agent-loader.js +85 -0
- package/src/commands/context-cache.js +90 -0
- package/src/commands/context-monitor.js +92 -0
- package/src/commands/context-search.js +66 -0
- package/src/commands/design-hybrid-options.js +385 -0
- package/src/commands/health.js +214 -0
- package/src/commands/init.js +54 -13
- package/src/commands/install.js +52 -13
- package/src/commands/learning-evolve.js +355 -0
- package/src/commands/live.js +34 -0
- package/src/commands/recovery.js +43 -0
- package/src/commands/sandbox.js +37 -0
- package/src/commands/setup-context.js +22 -2
- package/src/commands/setup.js +178 -0
- package/src/commands/skill.js +79 -32
- package/src/commands/tool-registry-cmd.js +232 -0
- package/src/commands/update.js +7 -0
- package/src/constants.js +9 -0
- package/src/context-cache.js +159 -0
- package/src/context-search.js +326 -0
- package/src/design-variation-catalog.js +503 -0
- package/src/i18n/messages/en.js +32 -2
- package/src/i18n/messages/es.js +30 -2
- package/src/i18n/messages/fr.js +30 -2
- package/src/i18n/messages/pt-BR.js +32 -2
- package/src/install-animation.js +260 -0
- package/src/install-profile.js +143 -0
- package/src/install-wizard.js +474 -0
- package/src/installer.js +38 -10
- package/src/parser.js +7 -1
- package/src/recovery-context-session.js +154 -0
- package/src/runtime-store.js +97 -1
- package/src/sandbox.js +177 -0
- package/src/tool-executor.js +94 -0
- package/src/updater.js +11 -3
- package/template/.aioson/agents/analyst.md +58 -3
- package/template/.aioson/agents/architect.md +38 -0
- package/template/.aioson/agents/design-hybrid-forge.md +127 -0
- package/template/.aioson/agents/dev.md +103 -0
- package/template/.aioson/agents/deyvin.md +57 -0
- package/template/.aioson/agents/pm.md +58 -0
- package/template/.aioson/agents/product.md +28 -0
- package/template/.aioson/agents/qa.md +79 -0
- package/template/.aioson/agents/setup.md +65 -3
- package/template/.aioson/agents/sheldon.md +107 -6
- package/template/.aioson/agents/tester.md +156 -0
- package/template/.aioson/config.md +15 -0
- package/template/.aioson/context/forensics/.gitkeep +0 -0
- package/template/.aioson/context/seeds/seed-example.md +27 -0
- package/template/.aioson/context/user-profile.md +42 -0
- package/template/.aioson/locales/en/agents/setup.md +33 -1
- package/template/.aioson/locales/es/agents/setup.md +33 -1
- package/template/.aioson/locales/fr/agents/setup.md +33 -1
- package/template/.aioson/locales/pt-BR/agents/setup.md +33 -1
- package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +243 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +482 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +387 -0
- package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +222 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +213 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -0
- package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +45 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/approval-gates.md +109 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md +44 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/classification-map.md +37 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/hardening-lane.md +49 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/maintenance-and-state.md +66 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/ui-language.md +75 -0
- package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +144 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/crossover-protocol.md +221 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/naming-registry.md +88 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/output-contract.md +291 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/pair-compatibility.md +117 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/quality-gates.md +188 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/variation-library.md +125 -0
- package/template/AGENTS.md +23 -1
- package/template/CLAUDE.md +1 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
# Dashboards — Neo-Brutalist UI
|
|
2
|
+
|
|
3
|
+
Rules and presets for data-heavy interfaces. The dashboard punk expression mode applied in practice.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## General Rules
|
|
8
|
+
|
|
9
|
+
### Stat numbers
|
|
10
|
+
- Always `font-family: var(--font-mono)` — the primary differentiator is mono, not serif or display
|
|
11
|
+
- Large: `var(--text-3xl)` minimum for hero stats, `var(--text-xl)` for secondary
|
|
12
|
+
- No decoration — the number is the visual
|
|
13
|
+
|
|
14
|
+
### Charts
|
|
15
|
+
- No gradient fills — flat colors at fixed opacity (`opacity: 0.3` for area fills)
|
|
16
|
+
- Bar charts: `border: var(--border-subtle)` on each bar, `border-radius: var(--radius-none)`
|
|
17
|
+
- Line charts: `stroke-width: 2.5px` minimum, solid dots (not hollow)
|
|
18
|
+
- Grid lines: `var(--border-subtle)`, full grid visible
|
|
19
|
+
- Axis labels: `font-family: var(--font-mono)`, `font-size: var(--text-xs)`
|
|
20
|
+
- No fancy tooltips — simple border box, mono text
|
|
21
|
+
|
|
22
|
+
### Tables
|
|
23
|
+
- Full grid borders (every cell) — not minimal. This is non-negotiable for brutalist dashboards
|
|
24
|
+
- Header: `bg-elevated`, font-mono uppercase
|
|
25
|
+
- Data cells: mono font for numbers, dates, IDs, statuses
|
|
26
|
+
|
|
27
|
+
### General
|
|
28
|
+
- Background: `bg-base` (cream off-white in light) — dashboards are "printed", not dark by default
|
|
29
|
+
- All cards: `border-thicker`, `shadow-md`, hover → `shadow-lg`
|
|
30
|
+
- Empty states: `[NO DATA]` in mono — no illustrations, no cheerful messages
|
|
31
|
+
- Status indicators: saturated green/amber/red at full strength — never muted
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Chart Color Palette
|
|
36
|
+
|
|
37
|
+
```css
|
|
38
|
+
--chart-1: var(--accent); /* #FACC15 — yellow — primary series */
|
|
39
|
+
--chart-2: var(--accent-red); /* red — negative / error series */
|
|
40
|
+
--chart-3: var(--accent-blue); /* blue — secondary series */
|
|
41
|
+
--chart-4: var(--accent-green); /* green — positive / success */
|
|
42
|
+
--chart-5: var(--accent-orange); /* orange — warning / tertiary */
|
|
43
|
+
--chart-6: var(--border-color); /* black/white — neutral baseline */
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Usage:
|
|
47
|
+
- Single series: `--chart-1` (yellow)
|
|
48
|
+
- Two series: `--chart-1` + `--chart-3` (yellow + blue)
|
|
49
|
+
- Success/failure: `--chart-4` + `--chart-2` (green + red)
|
|
50
|
+
- Do not use more than 4 colors in a single chart
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Preset 1 — DevOps Dashboard
|
|
55
|
+
|
|
56
|
+
For: CI/CD pipelines, deployment tracking, service health, infrastructure monitoring.
|
|
57
|
+
Expression mode: Dashboard Punk.
|
|
58
|
+
|
|
59
|
+
### Layout
|
|
60
|
+
```
|
|
61
|
+
[STATUS GRID: colored cells (green/amber/red), border-thick each, 4-8 cols]
|
|
62
|
+
|
|
63
|
+
[DEPLOY TIMELINE: horizontal, mono timestamps, status badges]
|
|
64
|
+
|
|
65
|
+
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
|
|
66
|
+
│ ERROR RATE │ │ P95 LATENCY │ │ DEPLOY FREQUENCY │
|
|
67
|
+
│ [line chart, red] │ │ [line chart, blue] │ │ [bar chart, green] │
|
|
68
|
+
│ border-thicker │ │ │ │ │
|
|
69
|
+
└────────────────────┘ └────────────────────┘ └────────────────────┘
|
|
70
|
+
|
|
71
|
+
[SERVICE HEALTH TABLE: full grid, service name | status badge | uptime mono | p99 mono | last incident mono]
|
|
72
|
+
|
|
73
|
+
[UPTIME COUNTERS: 3-4 stats in a strip — mono text-3xl, "99.97%"]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Status grid pattern
|
|
77
|
+
```css
|
|
78
|
+
.status-grid {
|
|
79
|
+
display: grid;
|
|
80
|
+
grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
|
|
81
|
+
gap: 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.status-cell {
|
|
85
|
+
border: var(--border-subtle);
|
|
86
|
+
padding: var(--space-3);
|
|
87
|
+
text-align: center;
|
|
88
|
+
font-family: var(--font-mono);
|
|
89
|
+
font-size: var(--text-xs);
|
|
90
|
+
font-weight: var(--weight-bold);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.status-cell--healthy { background: var(--semantic-green-dim); color: var(--semantic-green); }
|
|
94
|
+
.status-cell--warning { background: var(--semantic-amber-dim); color: var(--semantic-amber); }
|
|
95
|
+
.status-cell--down { background: var(--semantic-red-dim); color: var(--semantic-red); }
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### CLI-style status badges
|
|
99
|
+
```
|
|
100
|
+
[PASS] → bg: semantic-green-dim, text: semantic-green, border: semantic-green
|
|
101
|
+
[FAIL] → bg: semantic-red-dim, text: semantic-red, border: semantic-red
|
|
102
|
+
[RUNNING] → bg: semantic-amber-dim, text: semantic-amber, border: semantic-amber
|
|
103
|
+
[SKIP] → bg: bg-elevated, text: text-muted
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Preset 2 — Indie SaaS Dashboard
|
|
109
|
+
|
|
110
|
+
For: bootstrapped SaaS, side projects, small products. Revenue and growth metrics.
|
|
111
|
+
Expression mode: Indie Product.
|
|
112
|
+
|
|
113
|
+
### Layout
|
|
114
|
+
```
|
|
115
|
+
[MRR HERO CARD: text-4xl mono bold, hard shadow-lg, sticker badge "[THIS MONTH]"]
|
|
116
|
+
|
|
117
|
+
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
|
|
118
|
+
│ NEW SIGNUPS │ │ CHURN RATE │ │ TRIAL → PAID │
|
|
119
|
+
│ mono text-2xl │ │ mono text-2xl │ │ mono text-2xl │
|
|
120
|
+
│ trend badge │ │ trend badge │ │ progress bar thick │
|
|
121
|
+
└────────────────────┘ └────────────────────┘ └────────────────────┘
|
|
122
|
+
|
|
123
|
+
┌───────────────────────────────────────────────────┐
|
|
124
|
+
│ SUBSCRIBER CHART │
|
|
125
|
+
│ Area chart, accent fill 0.3 opacity, no gradient │
|
|
126
|
+
│ brutalist card, border-thicker │
|
|
127
|
+
└───────────────────────────────────────────────────┘
|
|
128
|
+
|
|
129
|
+
[RECENT SIGNUPS TABLE: full grid | avatar (square) | name | email mono | plan badge | date mono]
|
|
130
|
+
|
|
131
|
+
[FUNNEL: horizontal bar chart — trial/active/churned with thick bars]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### MRR hero card
|
|
135
|
+
```css
|
|
136
|
+
.mrr-hero {
|
|
137
|
+
background: var(--bg-surface);
|
|
138
|
+
border: var(--border-thickest);
|
|
139
|
+
box-shadow: var(--shadow-lg);
|
|
140
|
+
padding: var(--space-8) var(--space-10);
|
|
141
|
+
position: relative;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.mrr-hero__label {
|
|
145
|
+
font-family: var(--font-mono);
|
|
146
|
+
font-size: var(--text-xs);
|
|
147
|
+
text-transform: uppercase;
|
|
148
|
+
letter-spacing: var(--tracking-wider);
|
|
149
|
+
color: var(--text-secondary);
|
|
150
|
+
margin-bottom: var(--space-2);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.mrr-hero__value {
|
|
154
|
+
font-family: var(--font-mono);
|
|
155
|
+
font-size: var(--text-4xl);
|
|
156
|
+
font-weight: var(--weight-extrabold);
|
|
157
|
+
color: var(--text-heading);
|
|
158
|
+
letter-spacing: var(--tracking-tight);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* Position sticker badge top-right */
|
|
162
|
+
.mrr-hero__sticker {
|
|
163
|
+
position: absolute;
|
|
164
|
+
top: var(--space-4);
|
|
165
|
+
right: var(--space-4);
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Preset 3 — Project Tracker Dashboard
|
|
172
|
+
|
|
173
|
+
For: task management, sprint tracking, team workload, project status.
|
|
174
|
+
Expression mode: Indie Product or Dashboard Punk.
|
|
175
|
+
|
|
176
|
+
### Layout
|
|
177
|
+
```
|
|
178
|
+
[STATUS BADGES STRIP: "[12 TODO]" "[5 IN PROGRESS]" "[28 DONE]" — mono, bordered, full saturation]
|
|
179
|
+
|
|
180
|
+
┌──────────────────────────┐ ┌────────────────────────────────┐
|
|
181
|
+
│ BURNDOWN CHART │ │ TEAM WORKLOAD │
|
|
182
|
+
│ line chart │ │ horizontal bar per member │
|
|
183
|
+
│ ideal vs actual │ │ thick bars, mono name labels │
|
|
184
|
+
└──────────────────────────┘ └────────────────────────────────┘
|
|
185
|
+
|
|
186
|
+
[TASK TABLE: full grid | priority dot | title | assignee avatar square | due date mono | status badge]
|
|
187
|
+
|
|
188
|
+
[DEADLINE COUNTDOWN: mono bold text-xl "3 DAYS REMAINING" in accent card]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Status count strip
|
|
192
|
+
```css
|
|
193
|
+
.status-strip {
|
|
194
|
+
display: flex;
|
|
195
|
+
gap: 0;
|
|
196
|
+
border: var(--border-thick);
|
|
197
|
+
overflow: hidden;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.status-strip__item {
|
|
201
|
+
flex: 1;
|
|
202
|
+
padding: var(--space-3) var(--space-4);
|
|
203
|
+
border-right: var(--border-thick);
|
|
204
|
+
font-family: var(--font-mono);
|
|
205
|
+
font-size: var(--text-sm);
|
|
206
|
+
font-weight: var(--weight-bold);
|
|
207
|
+
display: flex;
|
|
208
|
+
align-items: center;
|
|
209
|
+
gap: var(--space-2);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.status-strip__item:last-child { border-right: none; }
|
|
213
|
+
.status-strip__item--todo { background: var(--bg-elevated); }
|
|
214
|
+
.status-strip__item--progress { background: var(--semantic-amber-dim); }
|
|
215
|
+
.status-strip__item--done { background: var(--semantic-green-dim); }
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Preset 4 — Content Dashboard
|
|
221
|
+
|
|
222
|
+
For: blogs, newsletters, media products, content teams tracking performance.
|
|
223
|
+
Expression mode: Indie Product.
|
|
224
|
+
|
|
225
|
+
### Layout
|
|
226
|
+
```
|
|
227
|
+
[CONTENT STATUS STRIP: sticker badges — "[12 PUBLISHED]" "[4 DRAFT]" "[2 SCHEDULED]"]
|
|
228
|
+
|
|
229
|
+
┌───────────────────────────────────────────────────────────────┐
|
|
230
|
+
│ CONTENT CALENDAR │
|
|
231
|
+
│ Grid: 7 cols (days), multiple rows (weeks), border all cells │
|
|
232
|
+
│ Status: colored bg fills (published=green, draft=amber, etc.) │
|
|
233
|
+
└───────────────────────────────────────────────────────────────┘
|
|
234
|
+
|
|
235
|
+
┌────────────────────┐ ┌───────────────────────────────────────┐
|
|
236
|
+
│ TOP POSTS (7d) │ │ PERFORMANCE TABLE │
|
|
237
|
+
│ rank | title | │ │ full grid | title mono | views | CTR │
|
|
238
|
+
│ views mono │ │ mono numbers throughout │
|
|
239
|
+
└────────────────────┘ └───────────────────────────────────────┘
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Content calendar cell
|
|
243
|
+
```css
|
|
244
|
+
.cal-cell {
|
|
245
|
+
border: var(--border-subtle);
|
|
246
|
+
min-height: 80px;
|
|
247
|
+
padding: var(--space-2);
|
|
248
|
+
vertical-align: top;
|
|
249
|
+
font-family: var(--font-mono);
|
|
250
|
+
font-size: var(--text-xs);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.cal-cell__date {
|
|
254
|
+
font-weight: var(--weight-bold);
|
|
255
|
+
color: var(--text-muted);
|
|
256
|
+
margin-bottom: var(--space-1);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.cal-item {
|
|
260
|
+
background: var(--accent-dim);
|
|
261
|
+
border: var(--border-subtle);
|
|
262
|
+
padding: 2px var(--space-2);
|
|
263
|
+
font-size: 11px;
|
|
264
|
+
overflow: hidden;
|
|
265
|
+
text-overflow: ellipsis;
|
|
266
|
+
white-space: nowrap;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.cal-item--published { background: var(--semantic-green-dim); }
|
|
270
|
+
.cal-item--draft { background: var(--semantic-amber-dim); }
|
|
271
|
+
.cal-item--scheduled { background: var(--semantic-blue-dim); }
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Preset 5 — Monitoring Dashboard
|
|
277
|
+
|
|
278
|
+
For: system uptime, infrastructure health, alert management, ops tooling.
|
|
279
|
+
Expression mode: Dashboard Punk.
|
|
280
|
+
|
|
281
|
+
### Layout
|
|
282
|
+
```
|
|
283
|
+
[TOP BAR: last updated "UPDATED 2m AGO" mono | incident count badge | ack button]
|
|
284
|
+
|
|
285
|
+
[HEALTH BOARD: NxM grid of colored status squares — one per service]
|
|
286
|
+
→ green = healthy, yellow = degraded, red = down
|
|
287
|
+
→ each cell: service name mono text-xs, status dot, p99 mono
|
|
288
|
+
|
|
289
|
+
┌────────────────────┐ ┌────────────────────┐
|
|
290
|
+
│ LATENCY CHART │ │ ERROR RATE CHART │
|
|
291
|
+
│ line, blue │ │ line, red │
|
|
292
|
+
│ threshold line: │ │ thick bars, border │
|
|
293
|
+
│ dashed, red │ │ │
|
|
294
|
+
└────────────────────┘ └────────────────────┘
|
|
295
|
+
|
|
296
|
+
[RESOURCE USAGE: thick progress bars per service — cpu / memory / disk]
|
|
297
|
+
|
|
298
|
+
[ALERT LOG: mono, timestamped, severity badge, scrollable with border]
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Alert log
|
|
302
|
+
```css
|
|
303
|
+
.alert-log {
|
|
304
|
+
background: var(--bg-surface);
|
|
305
|
+
border: var(--border-thicker);
|
|
306
|
+
max-height: 320px;
|
|
307
|
+
overflow-y: auto;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.alert-item {
|
|
311
|
+
display: grid;
|
|
312
|
+
grid-template-columns: auto 1fr auto;
|
|
313
|
+
gap: var(--space-3);
|
|
314
|
+
padding: var(--space-3) var(--space-4);
|
|
315
|
+
border-bottom: var(--border-subtle);
|
|
316
|
+
align-items: start;
|
|
317
|
+
font-family: var(--font-mono);
|
|
318
|
+
font-size: var(--text-xs);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.alert-item__time {
|
|
322
|
+
color: var(--text-muted);
|
|
323
|
+
white-space: nowrap;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.alert-item__message {
|
|
327
|
+
color: var(--text-primary);
|
|
328
|
+
line-height: 1.4;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.alert-item--critical { border-left: 4px solid var(--semantic-red); }
|
|
332
|
+
.alert-item--warning { border-left: 4px solid var(--semantic-amber); }
|
|
333
|
+
.alert-item--info { border-left: 4px solid var(--semantic-blue); }
|
|
334
|
+
```
|
|
@@ -0,0 +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: -0.03em; /* 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)`
|