@jaimevalasek/aioson 1.30.1 → 1.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +19 -6
  3. package/docs/design-previews/cognitive-core-ui-auth.html +95 -0
  4. package/docs/design-previews/cognitive-core-ui-kanban.html +231 -0
  5. package/docs/design-previews/cognitive-core-ui-list-detail.html +174 -0
  6. package/docs/design-previews/cognitive-core-ui-preview.css +1315 -0
  7. package/docs/design-previews/cognitive-core-ui-settings.html +142 -0
  8. package/docs/design-previews/cognitive-core-ui-website.html +190 -1009
  9. package/docs/design-previews/cognitive-core-ui.html +281 -463
  10. package/docs/design-previews/index.html +83 -31
  11. package/docs/en/5-reference/cli-reference.md +1 -1
  12. package/docs/pt/5-referencia/comandos-cli.md +1 -1
  13. package/docs/pt/5-referencia/harness-retro.md +2 -1
  14. package/package.json +1 -1
  15. package/src/cli.js +38 -21
  16. package/src/commands/classify.js +389 -327
  17. package/src/commands/harness-retro-promote.js +387 -0
  18. package/src/commands/prototype-check.js +163 -0
  19. package/src/commands/verify-implementation.js +428 -0
  20. package/src/commands/workflow-next.js +222 -9
  21. package/src/constants.js +569 -511
  22. package/src/lib/retro/retro-render.js +10 -1
  23. package/src/lib/retro/retro-sources.js +45 -27
  24. package/src/lib/retro/verification-reports.js +230 -0
  25. package/src/runtime-store.js +13 -9
  26. package/src/verification/evidence-bundle.js +251 -0
  27. package/src/verification/ledger-store.js +221 -0
  28. package/src/verification/path-policy.js +74 -0
  29. package/src/verification/policy-engine.js +95 -0
  30. package/src/verification/prompt-package.js +314 -0
  31. package/src/verification/redaction.js +77 -0
  32. package/src/verification/report-parser.js +132 -0
  33. package/src/verification/report-store.js +97 -0
  34. package/src/verification/result.js +16 -0
  35. package/src/verification/runners/index.js +319 -0
  36. package/src/verification/runtime-telemetry.js +144 -0
  37. package/src/verification/schema.js +276 -0
  38. package/src/verification/source-discovery.js +153 -0
  39. package/template/.aioson/agents/analyst.md +9 -6
  40. package/template/.aioson/agents/briefing-refiner.md +22 -0
  41. package/template/.aioson/agents/briefing.md +69 -12
  42. package/template/.aioson/agents/design-hybrid-forge.md +18 -14
  43. package/template/.aioson/agents/dev.md +23 -10
  44. package/template/.aioson/agents/deyvin.md +3 -2
  45. package/template/.aioson/agents/product.md +15 -11
  46. package/template/.aioson/agents/qa.md +13 -4
  47. package/template/.aioson/agents/scope-check.md +19 -5
  48. package/template/.aioson/agents/sheldon.md +4 -3
  49. package/template/.aioson/agents/ux-ui.md +3 -2
  50. package/template/.aioson/docs/feature-expansion-taxonomy.md +31 -3
  51. package/template/.aioson/docs/play/README.md +2 -0
  52. package/template/.aioson/docs/play/agent-usage-guide.md +7 -1
  53. package/template/.aioson/docs/play/app-compatibility-guide.md +6 -1
  54. package/template/.aioson/docs/play/auth-services-and-testing.md +16 -1
  55. package/template/.aioson/docs/play/manifest-and-runtime.md +23 -0
  56. package/template/.aioson/docs/prototype-contract.md +81 -0
  57. package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +266 -243
  58. package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -293
  59. package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -827
  60. package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -250
  61. package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -585
  62. package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -365
  63. package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +485 -482
  64. package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +386 -387
  65. package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +228 -205
  66. package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -338
  67. package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -977
  68. package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -218
  69. package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -326
  70. package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -461
  71. package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -293
  72. package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -352
  73. package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +233 -210
  74. package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -319
  75. package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -365
  76. package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -196
  77. package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -244
  78. package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -235
  79. package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -215
  80. package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -295
  81. package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +239 -203
  82. package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -339
  83. package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +417 -407
  84. package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +289 -272
  85. package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +525 -524
  86. package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +279 -279
  87. package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +355 -289
  88. package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +443 -437
  89. package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +245 -222
  90. package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -159
  91. package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -498
  92. package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -236
  93. package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -274
  94. package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -355
  95. package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -198
  96. package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -307
  97. package/template/.aioson/skills/design/interface-design/SKILL.md +68 -47
  98. package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -105
  99. package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -101
  100. package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +92 -71
  101. package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -74
  102. package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -173
  103. package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +236 -213
  104. package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -228
  105. package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -855
  106. package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -334
  107. package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -342
  108. package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -286
  109. package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -458
  110. package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -723
  111. package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +83 -62
  112. package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -74
  113. package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -116
  114. package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -47
  115. package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -215
  116. package/template/.aioson/skills/design/pt.squarespace.com/.skill-meta.json +31 -31
  117. package/template/.aioson/skills/design/pt.squarespace.com/SKILL.md +94 -66
  118. package/template/.aioson/skills/design/pt.squarespace.com/references/components.md +366 -366
  119. package/template/.aioson/skills/design/pt.squarespace.com/references/design-tokens.md +150 -150
  120. package/template/.aioson/skills/design/pt.squarespace.com/references/motion.md +270 -270
  121. package/template/.aioson/skills/design/pt.squarespace.com/references/patterns.md +189 -189
  122. package/template/.aioson/skills/design/pt.squarespace.com/references/websites.md +161 -161
  123. package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +232 -209
  124. package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -324
  125. package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -508
  126. package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -223
  127. package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -374
  128. package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -356
  129. package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -288
  130. package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -289
  131. package/template/.aioson/skills/process/briefing-expansion-scout/SKILL.md +25 -3
  132. package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +5 -3
  133. package/template/.aioson/skills/process/design-hybrid-forge/references/external-source-ingestion.md +89 -0
  134. package/template/.aioson/skills/process/product-scope-expansion/SKILL.md +29 -2
  135. package/template/.aioson/skills/process/prototype-forge/SKILL.md +92 -0
  136. package/template/.aioson/skills/process/sheldon-expansion-audit/SKILL.md +23 -2
@@ -1,458 +1,458 @@
1
- # Patterns — Neo-Brutalist UI
2
-
3
- Page-level compositions and app shell. All layouts use thick borders as structural dividers — no subtle separators.
4
-
5
- ---
6
-
7
- ## App Shell
8
-
9
- ```
10
- ┌──────────────────────────────────────────────────────────────┐
11
- │ SIDEBAR (240px) │ TOP BAR (56px) │
12
- │ border-right: 3px solid │ border-bottom: 3px solid │
13
- │ bg-surface │ bg-surface │
14
- │ ├───────────────────────────────────┤
15
- │ Logo (top, bold/mono) │ CONTENT AREA │
16
- │ │ bg-base (cream off-white) │
17
- │ NAV ITEMS │ padding: 24px │
18
- │ font-mono, text-sm │ │
19
- │ Active: bg-accent │ │
20
- │ color: black │ │
21
- │ font-bold │ │
22
- │ │ │
23
- │ (no left-border active │ │
24
- │ — full bg fill instead)│ │
25
- │ │ │
26
- │ FOOTER: user profile │ │
27
- │ border-top: 2px solid │ │
28
- └──────────────────────────┴───────────────────────────────────┘
29
- ```
30
-
31
- ### Sidebar spec
32
-
33
- ```css
34
- .sidebar {
35
- width: 240px;
36
- background: var(--bg-surface);
37
- border-right: var(--border-thicker);
38
- height: 100vh;
39
- display: flex;
40
- flex-direction: column;
41
- flex-shrink: 0;
42
- }
43
-
44
- .sidebar__logo {
45
- padding: var(--space-5) var(--space-6);
46
- border-bottom: var(--border-thick);
47
- font-family: var(--font-display);
48
- font-weight: var(--weight-extrabold);
49
- font-size: var(--text-lg);
50
- }
51
-
52
- .sidebar__nav {
53
- flex: 1;
54
- padding: var(--space-4) var(--space-3);
55
- display: flex;
56
- flex-direction: column;
57
- gap: var(--space-1);
58
- overflow-y: auto;
59
- }
60
-
61
- .nav-item {
62
- display: flex;
63
- align-items: center;
64
- gap: var(--space-3);
65
- padding: var(--space-2) var(--space-3);
66
- font-family: var(--font-mono);
67
- font-size: var(--text-sm);
68
- color: var(--text-secondary);
69
- text-decoration: none;
70
- border-radius: var(--radius-none);
71
- border: var(--border-subtle);
72
- border-color: transparent;
73
- transition: background var(--transition-fast), color var(--transition-fast);
74
- }
75
-
76
- .nav-item:hover {
77
- background: var(--bg-elevated);
78
- color: var(--text-heading);
79
- border-color: var(--border-color);
80
- }
81
-
82
- /* Active: full accent fill — not a left border indicator */
83
- .nav-item--active {
84
- background: var(--accent);
85
- color: var(--accent-contrast);
86
- font-weight: var(--weight-bold);
87
- border-color: var(--border-color);
88
- }
89
-
90
- .sidebar__section-label {
91
- font-family: var(--font-mono);
92
- font-size: var(--text-xs);
93
- text-transform: uppercase;
94
- letter-spacing: var(--tracking-wider);
95
- color: var(--text-muted);
96
- padding: var(--space-4) var(--space-3) var(--space-2);
97
- }
98
-
99
- .sidebar__footer {
100
- border-top: var(--border-thick);
101
- padding: var(--space-4) var(--space-6);
102
- }
103
- ```
104
-
105
- ### Top bar spec
106
-
107
- ```css
108
- .topbar {
109
- height: 56px;
110
- background: var(--bg-surface);
111
- border-bottom: var(--border-thicker);
112
- display: flex;
113
- align-items: center;
114
- padding: 0 var(--space-6);
115
- gap: var(--space-4);
116
- justify-content: space-between;
117
- }
118
-
119
- .topbar__breadcrumb {
120
- font-family: var(--font-mono);
121
- font-size: var(--text-sm);
122
- color: var(--text-secondary);
123
- }
124
-
125
- .topbar__actions {
126
- display: flex;
127
- align-items: center;
128
- gap: var(--space-3);
129
- }
130
- ```
131
-
132
- ### Content area
133
-
134
- ```css
135
- .content-area {
136
- flex: 1;
137
- background: var(--bg-base);
138
- padding: var(--space-6);
139
- overflow-y: auto;
140
- min-height: 0;
141
- }
142
-
143
- .page-header {
144
- margin-bottom: var(--space-6);
145
- display: flex;
146
- align-items: flex-start;
147
- justify-content: space-between;
148
- gap: var(--space-4);
149
- }
150
-
151
- .page-title {
152
- font-family: var(--font-display);
153
- font-size: var(--text-2xl);
154
- font-weight: var(--weight-extrabold);
155
- color: var(--text-heading);
156
- letter-spacing: var(--tracking-tight);
157
- }
158
- ```
159
-
160
- ---
161
-
162
- ## Page Patterns
163
-
164
- ### 1. Dashboard Page
165
-
166
- ```
167
- [STICKER BADGE: Overview]
168
- [Page title] + [Date range selector]
169
-
170
- ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
171
- │ STAT │ │ STAT │ │ STAT │ │ STAT │
172
- │ CARD │ │ CARD │ │ CARD │ │ CARD │
173
- └────────┘ └────────┘ └────────┘ └────────┘
174
-
175
- ┌──────────────────────────────────────────┐
176
- │ CHART CARD (full width, brutalist card) │
177
- │ border-thicker, shadow-md │
178
- └──────────────────────────────────────────┘
179
-
180
- ┌────────────────────────┐ ┌──────────────┐
181
- │ TABLE (full grid) │ │ ACTIVITY LOG │
182
- │ border on every cell │ │ mono, times │
183
- └────────────────────────┘ └──────────────┘
184
- ```
185
-
186
- Composition rules:
187
- - Stat cards: 3–4 column grid, each with hard shadow, border-thicker
188
- - Charts: always in a brutalist card, never floating
189
- - Tables: full-grid border (every cell), not minimal
190
- - Activity log: mono font, timestamps left-aligned, severity badges
191
-
192
- ---
193
-
194
- ### 2. List Page
195
-
196
- ```
197
- [Page title bold] [+ NEW sticker button: right]
198
-
199
- [FILTER BAR: brutalist inputs inline, border-thick, shadow-sm]
200
-
201
- ┌────────────────────────────────────────────────┐
202
- │ TABLE │
203
- │ header: mono uppercase, bg-elevated │
204
- │ all cells: border-subtle │
205
- │ hover row: bg-elevated │
206
- │ action column: inline icons on hover │
207
- └────────────────────────────────────────────────┘
208
-
209
- [PAGINATION: brutalist buttons, arrow + page numbers]
210
- ```
211
-
212
- The "+ NEW" button in the page header should use `btn-primary` or a `.sticker` style button to maintain the brutalist feel.
213
-
214
- ---
215
-
216
- ### 3. Detail Page
217
-
218
- ```
219
- ┌──────────────────────────────────────────────┐
220
- │ HEADER CARD │
221
- │ title text-2xl bold + badges row │
222
- │ metadata row: mono text (id, date, author) │
223
- │ action buttons: right-aligned │
224
- │ border-thicker, shadow-md │
225
- └──────────────────────────────────────────────┘
226
-
227
- [TAB BAR: border-bottom thick, active tab bg-accent]
228
-
229
- ┌──────────────────┐ ┌────────────────────────┐
230
- │ CONTENT SECTION │ │ SIDE PANEL │
231
- │ brutalist cards │ │ brutalist cards │
232
- │ padding space-6 │ │ metadata, links, etc. │
233
- └──────────────────┘ └────────────────────────┘
234
- ```
235
-
236
- Tab bar:
237
- ```css
238
- .tab-bar {
239
- display: flex;
240
- border-bottom: var(--border-thicker);
241
- gap: 0;
242
- }
243
-
244
- .tab {
245
- padding: var(--space-3) var(--space-5);
246
- font-family: var(--font-mono);
247
- font-size: var(--text-sm);
248
- font-weight: var(--weight-medium);
249
- color: var(--text-secondary);
250
- border: var(--border-thick);
251
- border-bottom: none;
252
- border-right: none;
253
- cursor: pointer;
254
- background: var(--bg-surface);
255
- }
256
-
257
- .tab:first-child { border-left: var(--border-thick); }
258
- .tab:hover { background: var(--bg-elevated); color: var(--text-heading); }
259
-
260
- .tab--active {
261
- background: var(--accent);
262
- color: var(--accent-contrast);
263
- font-weight: var(--weight-bold);
264
- }
265
- ```
266
-
267
- ---
268
-
269
- ### 4. Settings Page
270
-
271
- ```
272
- ┌──────────────────┬─────────────────────────────┐
273
- │ SETTINGS NAV │ SETTINGS FORM │
274
- │ (left, vertical) │ │
275
- │ 200px │ [Section Title — mono caps] │
276
- │ border-right: │ ┌───────────────────────┐ │
277
- │ 3px solid │ │ SETTINGS CARD │ │
278
- │ │ │ form fields inside │ │
279
- │ nav items: │ │ border-thicker │ │
280
- │ .nav-item style │ └───────────────────────┘ │
281
- │ │ │
282
- │ │ [Section Title] │
283
- │ │ ┌───────────────────────┐ │
284
- │ │ │ SETTINGS CARD │ │
285
- │ │ └───────────────────────┘ │
286
- └──────────────────┴─────────────────────────────┘
287
- ```
288
-
289
- Section title style:
290
- ```css
291
- .settings-section-title {
292
- font-family: var(--font-mono);
293
- font-size: var(--text-xs);
294
- font-weight: var(--weight-bold);
295
- text-transform: uppercase;
296
- letter-spacing: var(--tracking-wider);
297
- color: var(--text-secondary);
298
- margin-bottom: var(--space-4);
299
- padding-bottom: var(--space-2);
300
- border-bottom: var(--border-thick);
301
- }
302
- ```
303
-
304
- ---
305
-
306
- ### 5. Auth Page
307
-
308
- ```
309
- bg-void (or pattern-dots)
310
-
311
- ┌──────────────────────────┐
312
- │ AUTH CARD │
313
- │ border-thicker │
314
- │ shadow-xl │
315
- │ max-width: 400px │
316
- │ │
317
- │ [Logo or product name] │
318
- │ [Heading text-xl bold] │
319
- │ │
320
- │ [Input: email] │
321
- │ [Input: password] │
322
- │ │
323
- │ [CTA Button full width] │
324
- │ │
325
- │ [Secondary link — mono] │
326
- └──────────────────────────┘
327
- ```
328
-
329
- ```css
330
- .auth-page {
331
- min-height: 100vh;
332
- background: var(--bg-void);
333
- display: flex;
334
- align-items: center;
335
- justify-content: center;
336
- padding: var(--space-6);
337
- }
338
-
339
- .auth-card {
340
- background: var(--bg-surface);
341
- border: var(--border-thicker);
342
- box-shadow: var(--shadow-xl);
343
- padding: var(--space-10);
344
- width: 100%;
345
- max-width: 400px;
346
- }
347
-
348
- .auth-card__heading {
349
- font-family: var(--font-display);
350
- font-size: var(--text-xl);
351
- font-weight: var(--weight-extrabold);
352
- margin-bottom: var(--space-8);
353
- }
354
- ```
355
-
356
- ---
357
-
358
- ### 6. Onboarding
359
-
360
- ```
361
- bg-base
362
-
363
- [Step counter badge: "[1/4]" — mono, bordered]
364
-
365
- ┌──────────────────────────────────────┐
366
- │ STEP CARD │
367
- │ border-thicker, shadow-xl │
368
- │ max-width: 540px │
369
- │ │
370
- │ Step heading + description │
371
- │ │
372
- │ [Progress bar — thick, 12px] │
373
- │ │
374
- │ Step content (input/choice/action) │
375
- │ │
376
- │ [BACK btn secondary] [NEXT btn CTA] │
377
- └──────────────────────────────────────┘
378
- ```
379
-
380
- Step counter badge:
381
- ```css
382
- .step-counter {
383
- display: inline-block;
384
- font-family: var(--font-mono);
385
- font-size: var(--text-sm);
386
- font-weight: var(--weight-bold);
387
- background: var(--bg-surface);
388
- border: var(--border-thick);
389
- box-shadow: var(--shadow-sm);
390
- padding: var(--space-1) var(--space-3);
391
- border-radius: var(--radius-none);
392
- margin-bottom: var(--space-6);
393
- }
394
- ```
395
-
396
- ---
397
-
398
- ## Responsive Behavior
399
-
400
- ### Breakpoints
401
- - `< 1024px`: sidebar collapses to hamburger menu
402
- - `< 768px`: single column stack for all card grids
403
- - `< 640px`: full-width content, padding reduces to `space-4`
404
-
405
- ### Sidebar collapse
406
- ```css
407
- @media (max-width: 1023px) {
408
- .sidebar {
409
- position: fixed;
410
- left: -240px;
411
- top: 0;
412
- z-index: var(--z-modal);
413
- transition: left var(--transition-base);
414
- }
415
-
416
- .sidebar--open {
417
- left: 0;
418
- }
419
-
420
- /* Hamburger trigger */
421
- .hamburger {
422
- display: flex;
423
- flex-direction: column;
424
- gap: 5px;
425
- width: 36px;
426
- height: 36px;
427
- border: var(--border-thick);
428
- background: none;
429
- padding: var(--space-2);
430
- cursor: pointer;
431
- justify-content: center;
432
- }
433
-
434
- .hamburger__line {
435
- height: 2px;
436
- background: var(--text-heading);
437
- width: 100%;
438
- }
439
- }
440
- ```
441
-
442
- ### Tables on mobile
443
- Tables always scroll horizontally — never stack to card layout:
444
- ```css
445
- .table-container {
446
- overflow-x: auto;
447
- -webkit-overflow-scrolling: touch;
448
- }
449
- ```
450
-
451
- ### Shadows on mobile
452
- Hard shadows reduce to `--shadow-sm` (2px offset) on touch targets to avoid layout overflow:
453
- ```css
454
- @media (max-width: 639px) {
455
- .card { box-shadow: var(--shadow-sm); }
456
- .btn-primary { box-shadow: var(--shadow-sm); }
457
- }
458
- ```
1
+ # Patterns — Neo-Brutalist UI
2
+
3
+ Page-level compositions and app shell. All layouts use thick borders as structural dividers — no subtle separators.
4
+
5
+ ---
6
+
7
+ ## App Shell
8
+
9
+ ```
10
+ ┌──────────────────────────────────────────────────────────────┐
11
+ │ SIDEBAR (240px) │ TOP BAR (56px) │
12
+ │ border-right: 3px solid │ border-bottom: 3px solid │
13
+ │ bg-surface │ bg-surface │
14
+ │ ├───────────────────────────────────┤
15
+ │ Logo (top, bold/mono) │ CONTENT AREA │
16
+ │ │ bg-base (cream off-white) │
17
+ │ NAV ITEMS │ padding: 24px │
18
+ │ font-mono, text-sm │ │
19
+ │ Active: bg-accent │ │
20
+ │ color: black │ │
21
+ │ font-bold │ │
22
+ │ │ │
23
+ │ (no left-border active │ │
24
+ │ — full bg fill instead)│ │
25
+ │ │ │
26
+ │ FOOTER: user profile │ │
27
+ │ border-top: 2px solid │ │
28
+ └──────────────────────────┴───────────────────────────────────┘
29
+ ```
30
+
31
+ ### Sidebar spec
32
+
33
+ ```css
34
+ .sidebar {
35
+ width: 240px;
36
+ background: var(--bg-surface);
37
+ border-right: var(--border-thicker);
38
+ height: 100vh;
39
+ display: flex;
40
+ flex-direction: column;
41
+ flex-shrink: 0;
42
+ }
43
+
44
+ .sidebar__logo {
45
+ padding: var(--space-5) var(--space-6);
46
+ border-bottom: var(--border-thick);
47
+ font-family: var(--font-display);
48
+ font-weight: var(--weight-extrabold);
49
+ font-size: var(--text-lg);
50
+ }
51
+
52
+ .sidebar__nav {
53
+ flex: 1;
54
+ padding: var(--space-4) var(--space-3);
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: var(--space-1);
58
+ overflow-y: auto;
59
+ }
60
+
61
+ .nav-item {
62
+ display: flex;
63
+ align-items: center;
64
+ gap: var(--space-3);
65
+ padding: var(--space-2) var(--space-3);
66
+ font-family: var(--font-mono);
67
+ font-size: var(--text-sm);
68
+ color: var(--text-secondary);
69
+ text-decoration: none;
70
+ border-radius: var(--radius-none);
71
+ border: var(--border-subtle);
72
+ border-color: transparent;
73
+ transition: background var(--transition-fast), color var(--transition-fast);
74
+ }
75
+
76
+ .nav-item:hover {
77
+ background: var(--bg-elevated);
78
+ color: var(--text-heading);
79
+ border-color: var(--border-color);
80
+ }
81
+
82
+ /* Active: full accent fill — not a left border indicator */
83
+ .nav-item--active {
84
+ background: var(--accent);
85
+ color: var(--accent-contrast);
86
+ font-weight: var(--weight-bold);
87
+ border-color: var(--border-color);
88
+ }
89
+
90
+ .sidebar__section-label {
91
+ font-family: var(--font-mono);
92
+ font-size: var(--text-xs);
93
+ text-transform: uppercase;
94
+ letter-spacing: var(--tracking-wider);
95
+ color: var(--text-muted);
96
+ padding: var(--space-4) var(--space-3) var(--space-2);
97
+ }
98
+
99
+ .sidebar__footer {
100
+ border-top: var(--border-thick);
101
+ padding: var(--space-4) var(--space-6);
102
+ }
103
+ ```
104
+
105
+ ### Top bar spec
106
+
107
+ ```css
108
+ .topbar {
109
+ height: 56px;
110
+ background: var(--bg-surface);
111
+ border-bottom: var(--border-thicker);
112
+ display: flex;
113
+ align-items: center;
114
+ padding: 0 var(--space-6);
115
+ gap: var(--space-4);
116
+ justify-content: space-between;
117
+ }
118
+
119
+ .topbar__breadcrumb {
120
+ font-family: var(--font-mono);
121
+ font-size: var(--text-sm);
122
+ color: var(--text-secondary);
123
+ }
124
+
125
+ .topbar__actions {
126
+ display: flex;
127
+ align-items: center;
128
+ gap: var(--space-3);
129
+ }
130
+ ```
131
+
132
+ ### Content area
133
+
134
+ ```css
135
+ .content-area {
136
+ flex: 1;
137
+ background: var(--bg-base);
138
+ padding: var(--space-6);
139
+ overflow-y: auto;
140
+ min-height: 0;
141
+ }
142
+
143
+ .page-header {
144
+ margin-bottom: var(--space-6);
145
+ display: flex;
146
+ align-items: flex-start;
147
+ justify-content: space-between;
148
+ gap: var(--space-4);
149
+ }
150
+
151
+ .page-title {
152
+ font-family: var(--font-display);
153
+ font-size: var(--text-2xl);
154
+ font-weight: var(--weight-extrabold);
155
+ color: var(--text-heading);
156
+ letter-spacing: var(--tracking-tight);
157
+ }
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Page Patterns
163
+
164
+ ### 1. Dashboard Page
165
+
166
+ ```
167
+ [STICKER BADGE: Overview]
168
+ [Page title] + [Date range selector]
169
+
170
+ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
171
+ │ STAT │ │ STAT │ │ STAT │ │ STAT │
172
+ │ CARD │ │ CARD │ │ CARD │ │ CARD │
173
+ └────────┘ └────────┘ └────────┘ └────────┘
174
+
175
+ ┌──────────────────────────────────────────┐
176
+ │ CHART CARD (full width, brutalist card) │
177
+ │ border-thicker, shadow-md │
178
+ └──────────────────────────────────────────┘
179
+
180
+ ┌────────────────────────┐ ┌──────────────┐
181
+ │ TABLE (full grid) │ │ ACTIVITY LOG │
182
+ │ border on every cell │ │ mono, times │
183
+ └────────────────────────┘ └──────────────┘
184
+ ```
185
+
186
+ Composition rules:
187
+ - Stat cards: 3–4 column grid, each with hard shadow, border-thicker
188
+ - Charts: always in a brutalist card, never floating
189
+ - Tables: full-grid border (every cell), not minimal
190
+ - Activity log: mono font, timestamps left-aligned, severity badges
191
+
192
+ ---
193
+
194
+ ### 2. List Page
195
+
196
+ ```
197
+ [Page title bold] [+ NEW sticker button: right]
198
+
199
+ [FILTER BAR: brutalist inputs inline, border-thick, shadow-sm]
200
+
201
+ ┌────────────────────────────────────────────────┐
202
+ │ TABLE │
203
+ │ header: mono uppercase, bg-elevated │
204
+ │ all cells: border-subtle │
205
+ │ hover row: bg-elevated │
206
+ │ action column: inline icons on hover │
207
+ └────────────────────────────────────────────────┘
208
+
209
+ [PAGINATION: brutalist buttons, arrow + page numbers]
210
+ ```
211
+
212
+ The "+ NEW" button in the page header should use `btn-primary` or a `.sticker` style button to maintain the brutalist feel.
213
+
214
+ ---
215
+
216
+ ### 3. Detail Page
217
+
218
+ ```
219
+ ┌──────────────────────────────────────────────┐
220
+ │ HEADER CARD │
221
+ │ title text-2xl bold + badges row │
222
+ │ metadata row: mono text (id, date, author) │
223
+ │ action buttons: right-aligned │
224
+ │ border-thicker, shadow-md │
225
+ └──────────────────────────────────────────────┘
226
+
227
+ [TAB BAR: border-bottom thick, active tab bg-accent]
228
+
229
+ ┌──────────────────┐ ┌────────────────────────┐
230
+ │ CONTENT SECTION │ │ SIDE PANEL │
231
+ │ brutalist cards │ │ brutalist cards │
232
+ │ padding space-6 │ │ metadata, links, etc. │
233
+ └──────────────────┘ └────────────────────────┘
234
+ ```
235
+
236
+ Tab bar:
237
+ ```css
238
+ .tab-bar {
239
+ display: flex;
240
+ border-bottom: var(--border-thicker);
241
+ gap: 0;
242
+ }
243
+
244
+ .tab {
245
+ padding: var(--space-3) var(--space-5);
246
+ font-family: var(--font-mono);
247
+ font-size: var(--text-sm);
248
+ font-weight: var(--weight-medium);
249
+ color: var(--text-secondary);
250
+ border: var(--border-thick);
251
+ border-bottom: none;
252
+ border-right: none;
253
+ cursor: pointer;
254
+ background: var(--bg-surface);
255
+ }
256
+
257
+ .tab:first-child { border-left: var(--border-thick); }
258
+ .tab:hover { background: var(--bg-elevated); color: var(--text-heading); }
259
+
260
+ .tab--active {
261
+ background: var(--accent);
262
+ color: var(--accent-contrast);
263
+ font-weight: var(--weight-bold);
264
+ }
265
+ ```
266
+
267
+ ---
268
+
269
+ ### 4. Settings Page
270
+
271
+ ```
272
+ ┌──────────────────┬─────────────────────────────┐
273
+ │ SETTINGS NAV │ SETTINGS FORM │
274
+ │ (left, vertical) │ │
275
+ │ 200px │ [Section Title — mono caps] │
276
+ │ border-right: │ ┌───────────────────────┐ │
277
+ │ 3px solid │ │ SETTINGS CARD │ │
278
+ │ │ │ form fields inside │ │
279
+ │ nav items: │ │ border-thicker │ │
280
+ │ .nav-item style │ └───────────────────────┘ │
281
+ │ │ │
282
+ │ │ [Section Title] │
283
+ │ │ ┌───────────────────────┐ │
284
+ │ │ │ SETTINGS CARD │ │
285
+ │ │ └───────────────────────┘ │
286
+ └──────────────────┴─────────────────────────────┘
287
+ ```
288
+
289
+ Section title style:
290
+ ```css
291
+ .settings-section-title {
292
+ font-family: var(--font-mono);
293
+ font-size: var(--text-xs);
294
+ font-weight: var(--weight-bold);
295
+ text-transform: uppercase;
296
+ letter-spacing: var(--tracking-wider);
297
+ color: var(--text-secondary);
298
+ margin-bottom: var(--space-4);
299
+ padding-bottom: var(--space-2);
300
+ border-bottom: var(--border-thick);
301
+ }
302
+ ```
303
+
304
+ ---
305
+
306
+ ### 5. Auth Page
307
+
308
+ ```
309
+ bg-void (or pattern-dots)
310
+
311
+ ┌──────────────────────────┐
312
+ │ AUTH CARD │
313
+ │ border-thicker │
314
+ │ shadow-xl │
315
+ │ max-width: 400px │
316
+ │ │
317
+ │ [Logo or product name] │
318
+ │ [Heading text-xl bold] │
319
+ │ │
320
+ │ [Input: email] │
321
+ │ [Input: password] │
322
+ │ │
323
+ │ [CTA Button full width] │
324
+ │ │
325
+ │ [Secondary link — mono] │
326
+ └──────────────────────────┘
327
+ ```
328
+
329
+ ```css
330
+ .auth-page {
331
+ min-height: 100vh;
332
+ background: var(--bg-void);
333
+ display: flex;
334
+ align-items: center;
335
+ justify-content: center;
336
+ padding: var(--space-6);
337
+ }
338
+
339
+ .auth-card {
340
+ background: var(--bg-surface);
341
+ border: var(--border-thicker);
342
+ box-shadow: var(--shadow-xl);
343
+ padding: var(--space-10);
344
+ width: 100%;
345
+ max-width: 400px;
346
+ }
347
+
348
+ .auth-card__heading {
349
+ font-family: var(--font-display);
350
+ font-size: var(--text-xl);
351
+ font-weight: var(--weight-extrabold);
352
+ margin-bottom: var(--space-8);
353
+ }
354
+ ```
355
+
356
+ ---
357
+
358
+ ### 6. Onboarding
359
+
360
+ ```
361
+ bg-base
362
+
363
+ [Step counter badge: "[1/4]" — mono, bordered]
364
+
365
+ ┌──────────────────────────────────────┐
366
+ │ STEP CARD │
367
+ │ border-thicker, shadow-xl │
368
+ │ max-width: 540px │
369
+ │ │
370
+ │ Step heading + description │
371
+ │ │
372
+ │ [Progress bar — thick, 12px] │
373
+ │ │
374
+ │ Step content (input/choice/action) │
375
+ │ │
376
+ │ [BACK btn secondary] [NEXT btn CTA] │
377
+ └──────────────────────────────────────┘
378
+ ```
379
+
380
+ Step counter badge:
381
+ ```css
382
+ .step-counter {
383
+ display: inline-block;
384
+ font-family: var(--font-mono);
385
+ font-size: var(--text-sm);
386
+ font-weight: var(--weight-bold);
387
+ background: var(--bg-surface);
388
+ border: var(--border-thick);
389
+ box-shadow: var(--shadow-sm);
390
+ padding: var(--space-1) var(--space-3);
391
+ border-radius: var(--radius-none);
392
+ margin-bottom: var(--space-6);
393
+ }
394
+ ```
395
+
396
+ ---
397
+
398
+ ## Responsive Behavior
399
+
400
+ ### Breakpoints
401
+ - `< 1024px`: sidebar collapses to hamburger menu
402
+ - `< 768px`: single column stack for all card grids
403
+ - `< 640px`: full-width content, padding reduces to `space-4`
404
+
405
+ ### Sidebar collapse
406
+ ```css
407
+ @media (max-width: 1023px) {
408
+ .sidebar {
409
+ position: fixed;
410
+ left: -240px;
411
+ top: 0;
412
+ z-index: var(--z-modal);
413
+ transition: left var(--transition-base);
414
+ }
415
+
416
+ .sidebar--open {
417
+ left: 0;
418
+ }
419
+
420
+ /* Hamburger trigger */
421
+ .hamburger {
422
+ display: flex;
423
+ flex-direction: column;
424
+ gap: 5px;
425
+ width: 36px;
426
+ height: 36px;
427
+ border: var(--border-thick);
428
+ background: none;
429
+ padding: var(--space-2);
430
+ cursor: pointer;
431
+ justify-content: center;
432
+ }
433
+
434
+ .hamburger__line {
435
+ height: 2px;
436
+ background: var(--text-heading);
437
+ width: 100%;
438
+ }
439
+ }
440
+ ```
441
+
442
+ ### Tables on mobile
443
+ Tables always scroll horizontally — never stack to card layout:
444
+ ```css
445
+ .table-container {
446
+ overflow-x: auto;
447
+ -webkit-overflow-scrolling: touch;
448
+ }
449
+ ```
450
+
451
+ ### Shadows on mobile
452
+ Hard shadows reduce to `--shadow-sm` (2px offset) on touch targets to avoid layout overflow:
453
+ ```css
454
+ @media (max-width: 639px) {
455
+ .card { box-shadow: var(--shadow-sm); }
456
+ .btn-primary { box-shadow: var(--shadow-sm); }
457
+ }
458
+ ```