@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.
Files changed (131) hide show
  1. package/README.md +6 -0
  2. package/docs/design-previews/aurora-command-ui-website.html +884 -0
  3. package/docs/design-previews/aurora-command-ui.html +682 -0
  4. package/docs/design-previews/bold-editorial-ui-website.html +658 -0
  5. package/docs/design-previews/bold-editorial-ui.html +717 -0
  6. package/docs/design-previews/clean-saas-ui-website.html +1202 -0
  7. package/docs/design-previews/clean-saas-ui.html +549 -0
  8. package/docs/design-previews/cognitive-core-ui-website.html +1009 -0
  9. package/docs/design-previews/cognitive-core-ui.html +463 -0
  10. package/docs/design-previews/glassmorphism-ui-website.html +572 -0
  11. package/docs/design-previews/glassmorphism-ui.html +886 -0
  12. package/docs/design-previews/index.html +699 -0
  13. package/docs/design-previews/interface-design-website.html +1187 -0
  14. package/docs/design-previews/interface-design.html +513 -0
  15. package/docs/design-previews/neo-brutalist-ui-website.html +621 -0
  16. package/docs/design-previews/neo-brutalist-ui.html +797 -0
  17. package/docs/design-previews/premium-command-center-ui-website.html +1217 -0
  18. package/docs/design-previews/premium-command-center-ui.html +552 -0
  19. package/docs/design-previews/warm-craft-ui-website.html +684 -0
  20. package/docs/design-previews/warm-craft-ui.html +739 -0
  21. package/docs/en/cli-reference.md +20 -9
  22. package/docs/pt/README.md +7 -0
  23. package/docs/pt/agent-sharding.md +132 -0
  24. package/docs/pt/agentes.md +8 -2
  25. package/docs/pt/busca-de-contexto.md +129 -0
  26. package/docs/pt/cache-de-contexto.md +156 -0
  27. package/docs/pt/comandos-cli.md +28 -0
  28. package/docs/pt/design-hybrid-forge.md +107 -0
  29. package/docs/pt/inicio-rapido.md +54 -3
  30. package/docs/pt/inteligencia-adaptativa.md +324 -0
  31. package/docs/pt/monitor-de-contexto.md +104 -0
  32. package/docs/pt/recuperacao-de-sessao.md +125 -0
  33. package/docs/pt/sandbox.md +125 -0
  34. package/docs/pt/skills.md +98 -6
  35. package/package.json +1 -1
  36. package/src/agent-loader.js +280 -0
  37. package/src/cli.js +94 -0
  38. package/src/commands/agent-loader.js +85 -0
  39. package/src/commands/context-cache.js +90 -0
  40. package/src/commands/context-monitor.js +92 -0
  41. package/src/commands/context-search.js +66 -0
  42. package/src/commands/design-hybrid-options.js +385 -0
  43. package/src/commands/health.js +214 -0
  44. package/src/commands/init.js +54 -13
  45. package/src/commands/install.js +52 -13
  46. package/src/commands/learning-evolve.js +355 -0
  47. package/src/commands/live.js +34 -0
  48. package/src/commands/recovery.js +43 -0
  49. package/src/commands/sandbox.js +37 -0
  50. package/src/commands/setup-context.js +22 -2
  51. package/src/commands/setup.js +178 -0
  52. package/src/commands/skill.js +79 -32
  53. package/src/commands/tool-registry-cmd.js +232 -0
  54. package/src/commands/update.js +7 -0
  55. package/src/constants.js +9 -0
  56. package/src/context-cache.js +159 -0
  57. package/src/context-search.js +326 -0
  58. package/src/design-variation-catalog.js +503 -0
  59. package/src/i18n/messages/en.js +32 -2
  60. package/src/i18n/messages/es.js +30 -2
  61. package/src/i18n/messages/fr.js +30 -2
  62. package/src/i18n/messages/pt-BR.js +32 -2
  63. package/src/install-animation.js +260 -0
  64. package/src/install-profile.js +143 -0
  65. package/src/install-wizard.js +474 -0
  66. package/src/installer.js +38 -10
  67. package/src/parser.js +7 -1
  68. package/src/recovery-context-session.js +154 -0
  69. package/src/runtime-store.js +97 -1
  70. package/src/sandbox.js +177 -0
  71. package/src/tool-executor.js +94 -0
  72. package/src/updater.js +11 -3
  73. package/template/.aioson/agents/analyst.md +58 -3
  74. package/template/.aioson/agents/architect.md +38 -0
  75. package/template/.aioson/agents/design-hybrid-forge.md +127 -0
  76. package/template/.aioson/agents/dev.md +103 -0
  77. package/template/.aioson/agents/deyvin.md +57 -0
  78. package/template/.aioson/agents/pm.md +58 -0
  79. package/template/.aioson/agents/product.md +28 -0
  80. package/template/.aioson/agents/qa.md +79 -0
  81. package/template/.aioson/agents/setup.md +65 -3
  82. package/template/.aioson/agents/sheldon.md +107 -6
  83. package/template/.aioson/agents/tester.md +156 -0
  84. package/template/.aioson/config.md +15 -0
  85. package/template/.aioson/context/forensics/.gitkeep +0 -0
  86. package/template/.aioson/context/seeds/seed-example.md +27 -0
  87. package/template/.aioson/context/user-profile.md +42 -0
  88. package/template/.aioson/locales/en/agents/setup.md +33 -1
  89. package/template/.aioson/locales/es/agents/setup.md +33 -1
  90. package/template/.aioson/locales/fr/agents/setup.md +33 -1
  91. package/template/.aioson/locales/pt-BR/agents/setup.md +33 -1
  92. package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +243 -0
  93. package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -0
  94. package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -0
  95. package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -0
  96. package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -0
  97. package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -0
  98. package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +482 -0
  99. package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +387 -0
  100. package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +222 -0
  101. package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -0
  102. package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -0
  103. package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -0
  104. package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -0
  105. package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -0
  106. package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -0
  107. package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -0
  108. package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +213 -0
  109. package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -0
  110. package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -0
  111. package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -0
  112. package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -0
  113. package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -0
  114. package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -0
  115. package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -0
  116. package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +45 -0
  117. package/template/.aioson/skills/process/aioson-spec-driven/references/approval-gates.md +109 -0
  118. package/template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md +44 -0
  119. package/template/.aioson/skills/process/aioson-spec-driven/references/classification-map.md +37 -0
  120. package/template/.aioson/skills/process/aioson-spec-driven/references/hardening-lane.md +49 -0
  121. package/template/.aioson/skills/process/aioson-spec-driven/references/maintenance-and-state.md +66 -0
  122. package/template/.aioson/skills/process/aioson-spec-driven/references/ui-language.md +75 -0
  123. package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +144 -0
  124. package/template/.aioson/skills/process/design-hybrid-forge/references/crossover-protocol.md +221 -0
  125. package/template/.aioson/skills/process/design-hybrid-forge/references/naming-registry.md +88 -0
  126. package/template/.aioson/skills/process/design-hybrid-forge/references/output-contract.md +291 -0
  127. package/template/.aioson/skills/process/design-hybrid-forge/references/pair-compatibility.md +117 -0
  128. package/template/.aioson/skills/process/design-hybrid-forge/references/quality-gates.md +188 -0
  129. package/template/.aioson/skills/process/design-hybrid-forge/references/variation-library.md +125 -0
  130. package/template/AGENTS.md +23 -1
  131. package/template/CLAUDE.md +1 -0
@@ -0,0 +1,723 @@
1
+ # Websites — Neo-Brutalist UI
2
+
3
+ Landing pages, marketing sites, personal sites, and product websites. The raw aesthetic applied to first impressions.
4
+
5
+ ---
6
+
7
+ ## Navigation
8
+
9
+ ```css
10
+ .site-nav {
11
+ position: sticky;
12
+ top: 0;
13
+ height: 60px;
14
+ background: var(--bg-surface);
15
+ border-bottom: var(--border-thicker);
16
+ display: flex;
17
+ align-items: center;
18
+ padding: 0 var(--space-8);
19
+ gap: var(--space-8);
20
+ justify-content: space-between;
21
+ z-index: var(--z-sticky);
22
+ }
23
+
24
+ .site-nav__logo {
25
+ font-family: var(--font-display);
26
+ font-weight: var(--weight-extrabold);
27
+ font-size: var(--text-lg);
28
+ color: var(--text-heading);
29
+ text-decoration: none;
30
+ }
31
+
32
+ .site-nav__links {
33
+ display: flex;
34
+ gap: var(--space-6);
35
+ align-items: center;
36
+ list-style: none;
37
+ }
38
+
39
+ .site-nav__link {
40
+ font-family: var(--font-mono);
41
+ font-size: var(--text-sm);
42
+ font-weight: var(--weight-medium);
43
+ color: var(--text-secondary);
44
+ text-decoration: none;
45
+ padding: var(--space-1) var(--space-3);
46
+ transition: color var(--transition-fast);
47
+ }
48
+
49
+ .site-nav__link:hover {
50
+ color: var(--text-heading);
51
+ /* Thick underline via pseudo-element */
52
+ text-decoration: underline;
53
+ text-decoration-thickness: 2px;
54
+ text-underline-offset: 4px;
55
+ }
56
+
57
+ .site-nav__link--active {
58
+ background: var(--accent);
59
+ color: var(--accent-contrast);
60
+ border-radius: var(--radius-full); /* pill — playful nav active */
61
+ font-weight: var(--weight-bold);
62
+ }
63
+
64
+ /* CTA in nav: brutalist button */
65
+ .site-nav__cta {
66
+ /* use .btn-primary with border-thick */
67
+ }
68
+ ```
69
+
70
+ ### Mobile nav
71
+ Below `--breakpoint-lg`:
72
+ - Hamburger icon: 3 lines, 2px thick
73
+ - Menu: full-screen overlay, `bg-base`, nav items stacked large (`text-xl`), `border-bottom: var(--border-thick)` each item
74
+ - Close: `×` bold, top-right
75
+
76
+ ---
77
+
78
+ ## Hero Patterns
79
+
80
+ ### Hero A — Statement Hero
81
+
82
+ The text IS the visual. No images.
83
+
84
+ ```
85
+ bg-base or bg-void
86
+ Optional: pattern-dots or pattern-grid on a background layer (opacity 0.10)
87
+
88
+ [sticker badge: "[OPEN BETA]" rotated] ← optional
89
+
90
+ h1: text-4xl to text-5xl, font-display, weight-extrabold, tracking-tight, max-width 720px
91
+
92
+ p: text-lg, max-width 560px, color text-secondary, margin-top space-6
93
+
94
+ [btn-primary (accent, shadow-lg, control-lg)] [btn-secondary] ← row, gap space-4, margin-top space-8
95
+
96
+ [social proof strip: "★★★★★ Loved by 1,200+ indie hackers" in mono text-sm]
97
+ ```
98
+
99
+ ```css
100
+ .hero-statement {
101
+ padding: var(--space-24) var(--space-8);
102
+ max-width: 1200px;
103
+ margin: 0 auto;
104
+ position: relative;
105
+ }
106
+
107
+ .hero-statement h1 {
108
+ font-family: var(--font-display);
109
+ font-size: clamp(var(--text-3xl), 6vw, var(--text-5xl));
110
+ font-weight: var(--weight-extrabold);
111
+ color: var(--text-heading);
112
+ letter-spacing: var(--tracking-tight);
113
+ line-height: 1.1;
114
+ max-width: 720px;
115
+ margin-bottom: var(--space-6);
116
+ }
117
+
118
+ .hero-statement p {
119
+ font-size: var(--text-lg);
120
+ color: var(--text-secondary);
121
+ max-width: 560px;
122
+ line-height: 1.6;
123
+ margin-bottom: var(--space-8);
124
+ }
125
+
126
+ .hero-statement__actions {
127
+ display: flex;
128
+ gap: var(--space-4);
129
+ flex-wrap: wrap;
130
+ align-items: center;
131
+ }
132
+ ```
133
+
134
+ ---
135
+
136
+ ### Hero B — Product Brutalist Hero
137
+
138
+ Product screenshot in a brutalist browser frame.
139
+
140
+ ```
141
+ Left column (50-55%):
142
+ h1: text-3xl, bold
143
+ p: text-base, text-secondary
144
+ [CTA buttons row]
145
+
146
+ Right column (45-50%):
147
+ [BRUTALIST BROWSER FRAME]
148
+ header bar: bg-elevated, border-bottom: thick, 40px height
149
+ ● ● ● colored dots (red/amber/green) + URL bar mono
150
+ screenshot: border-thicker on the frame itself, shadow-xl
151
+ ```
152
+
153
+ ```css
154
+ .hero-product {
155
+ display: grid;
156
+ grid-template-columns: 1fr 1fr;
157
+ gap: var(--space-12);
158
+ align-items: center;
159
+ padding: var(--space-20) var(--space-8);
160
+ max-width: 1200px;
161
+ margin: 0 auto;
162
+ }
163
+
164
+ .browser-frame {
165
+ border: var(--border-thicker);
166
+ box-shadow: var(--shadow-xl);
167
+ background: var(--bg-surface);
168
+ overflow: hidden;
169
+ }
170
+
171
+ .browser-frame__bar {
172
+ height: 40px;
173
+ background: var(--bg-elevated);
174
+ border-bottom: var(--border-thick);
175
+ display: flex;
176
+ align-items: center;
177
+ padding: 0 var(--space-4);
178
+ gap: var(--space-2);
179
+ }
180
+
181
+ .browser-frame__dot {
182
+ width: 12px;
183
+ height: 12px;
184
+ border-radius: var(--radius-full);
185
+ border: var(--border-thick);
186
+ }
187
+
188
+ .browser-frame__dot--red { background: #EF4444; border-color: #B91C1C; }
189
+ .browser-frame__dot--amber { background: #F59E0B; border-color: #B45309; }
190
+ .browser-frame__dot--green { background: #22C55E; border-color: #15803D; }
191
+
192
+ .browser-frame__url {
193
+ flex: 1;
194
+ height: 24px;
195
+ background: var(--bg-surface);
196
+ border: var(--border-subtle);
197
+ margin: 0 var(--space-4);
198
+ padding: 0 var(--space-3);
199
+ font-family: var(--font-mono);
200
+ font-size: var(--text-xs);
201
+ color: var(--text-muted);
202
+ display: flex;
203
+ align-items: center;
204
+ }
205
+
206
+ .browser-frame img {
207
+ display: block;
208
+ width: 100%;
209
+ }
210
+ ```
211
+
212
+ ---
213
+
214
+ ### Hero C — Manifesto Hero
215
+
216
+ Typographic. Like the first page of a self-published zine.
217
+
218
+ ```
219
+ bg-base (full width, minimal)
220
+
221
+ Large text block:
222
+ Mixed sizes: one phrase at text-4xl bold, continuation at text-xl regular
223
+ Specific words with inline highlight: <mark> bg-accent, no border-radius
224
+
225
+ No images. No decoration. The text is the composition.
226
+
227
+ CTA: ghost button or text link with thick underline (minimal — not a chunky CTA)
228
+ ```
229
+
230
+ ```css
231
+ .hero-manifesto {
232
+ padding: var(--space-24) var(--space-8);
233
+ max-width: 900px;
234
+ margin: 0 auto;
235
+ }
236
+
237
+ .manifesto-text {
238
+ font-family: var(--font-display);
239
+ font-size: var(--text-3xl);
240
+ font-weight: var(--weight-bold);
241
+ line-height: 1.3;
242
+ color: var(--text-heading);
243
+ letter-spacing: var(--tracking-tight);
244
+ }
245
+
246
+ /* Inline highlight */
247
+ .manifesto-text mark {
248
+ background: var(--accent);
249
+ color: var(--accent-contrast);
250
+ border-radius: 0;
251
+ padding: 2px var(--space-2);
252
+ }
253
+
254
+ .manifesto-cta {
255
+ display: inline-block;
256
+ margin-top: var(--space-10);
257
+ font-family: var(--font-mono);
258
+ font-size: var(--text-base);
259
+ font-weight: var(--weight-bold);
260
+ color: var(--text-heading);
261
+ text-decoration: underline;
262
+ text-decoration-thickness: 3px;
263
+ text-underline-offset: 4px;
264
+ }
265
+ ```
266
+
267
+ ---
268
+
269
+ ### Hero D — Grid Mosaic Hero
270
+
271
+ Asymmetric grid of colored brutalist cards. Interactive.
272
+
273
+ ```
274
+ headline above or overlaid
275
+
276
+ GRID (asymmetric, e.g. CSS Grid with named areas):
277
+ [2×1 accent card] [1×1 red card]
278
+ [1×1 blue card] [1×2 white card with product feature]
279
+ [1×1 green card] [1×1 accent-dim card]
280
+
281
+ All cards: border-thicker, shadow-md, hover → shadow-lg push
282
+ Background: bg-void
283
+ ```
284
+
285
+ ```css
286
+ .hero-mosaic {
287
+ padding: var(--space-20) var(--space-8);
288
+ background: var(--bg-void);
289
+ }
290
+
291
+ .mosaic-headline {
292
+ font-family: var(--font-display);
293
+ font-size: var(--text-4xl);
294
+ font-weight: var(--weight-extrabold);
295
+ letter-spacing: var(--tracking-tight);
296
+ margin-bottom: var(--space-8);
297
+ }
298
+
299
+ .mosaic-grid {
300
+ display: grid;
301
+ grid-template-columns: repeat(4, 1fr);
302
+ grid-template-rows: repeat(3, 160px);
303
+ gap: var(--space-4);
304
+ }
305
+
306
+ .mosaic-card {
307
+ border: var(--border-thicker);
308
+ box-shadow: var(--shadow-md);
309
+ padding: var(--space-6);
310
+ cursor: pointer;
311
+ transition: box-shadow var(--transition-fast);
312
+ }
313
+
314
+ .mosaic-card:hover { box-shadow: var(--shadow-lg); }
315
+ .mosaic-card:active { box-shadow: none; transform: translate(4px, 4px); }
316
+
317
+ .mosaic-card--accent { background: var(--accent); }
318
+ .mosaic-card--red { background: var(--accent-red); color: white; }
319
+ .mosaic-card--blue { background: var(--accent-blue); color: white; }
320
+ .mosaic-card--green { background: var(--accent-green); }
321
+ .mosaic-card--white { background: var(--bg-surface); }
322
+ ```
323
+
324
+ ---
325
+
326
+ ## Section Patterns
327
+
328
+ ### 1. Feature Grid
329
+
330
+ 3-column grid of brutalist feature cards.
331
+
332
+ ```css
333
+ .feature-grid {
334
+ display: grid;
335
+ grid-template-columns: repeat(3, 1fr);
336
+ gap: var(--space-6);
337
+ padding: var(--space-20) var(--space-8);
338
+ max-width: 1200px;
339
+ margin: 0 auto;
340
+ }
341
+ ```
342
+
343
+ Cards: `.feature-card` component (icon area with bg-accent, title bold, description text-sm).
344
+
345
+ ---
346
+
347
+ ### 2. Alternating Feature
348
+
349
+ Image and text alternating sides. Images in brutalist frames.
350
+
351
+ ```css
352
+ .alternating-feature {
353
+ display: grid;
354
+ grid-template-columns: 1fr 1fr;
355
+ gap: var(--space-12);
356
+ align-items: center;
357
+ padding: var(--space-16) var(--space-8);
358
+ max-width: 1200px;
359
+ margin: 0 auto;
360
+ }
361
+
362
+ .alternating-feature:nth-child(even) {
363
+ direction: rtl; /* swap sides */
364
+ }
365
+
366
+ .alternating-feature img {
367
+ border: var(--border-thicker);
368
+ box-shadow: var(--shadow-lg);
369
+ display: block;
370
+ width: 100%;
371
+ }
372
+ ```
373
+
374
+ ---
375
+
376
+ ### 3. Testimonial
377
+
378
+ Large centered quote card.
379
+
380
+ ```css
381
+ .testimonial {
382
+ background: var(--bg-surface);
383
+ border: var(--border-thicker);
384
+ box-shadow: var(--shadow-md);
385
+ padding: var(--space-10) var(--space-12);
386
+ max-width: 720px;
387
+ margin: var(--space-20) auto;
388
+ text-align: center;
389
+ }
390
+
391
+ .testimonial__quote {
392
+ font-size: var(--text-xl);
393
+ font-style: italic;
394
+ color: var(--text-heading);
395
+ line-height: 1.5;
396
+ margin-bottom: var(--space-6);
397
+ }
398
+
399
+ .testimonial__attribution {
400
+ font-family: var(--font-mono);
401
+ font-size: var(--text-sm);
402
+ color: var(--text-secondary);
403
+ }
404
+
405
+ /* Sticker badge: "[★★★★★]" */
406
+ .testimonial__rating {
407
+ /* .sticker component */
408
+ margin-bottom: var(--space-6);
409
+ }
410
+ ```
411
+
412
+ ---
413
+
414
+ ### 4. Stats Strip
415
+
416
+ Full-width accent band with bold numbers.
417
+
418
+ ```css
419
+ .stats-strip {
420
+ background: var(--accent);
421
+ border-top: var(--border-thicker);
422
+ border-bottom: var(--border-thicker);
423
+ padding: var(--space-10) var(--space-8);
424
+ }
425
+
426
+ .stats-strip__grid {
427
+ display: grid;
428
+ grid-template-columns: repeat(4, 1fr);
429
+ gap: var(--space-8);
430
+ max-width: 1200px;
431
+ margin: 0 auto;
432
+ text-align: center;
433
+ }
434
+
435
+ .stats-strip__number {
436
+ font-family: var(--font-mono);
437
+ font-size: var(--text-3xl);
438
+ font-weight: var(--weight-extrabold);
439
+ color: var(--accent-contrast);
440
+ display: block;
441
+ }
442
+
443
+ .stats-strip__label {
444
+ font-family: var(--font-mono);
445
+ font-size: var(--text-xs);
446
+ font-weight: var(--weight-medium);
447
+ text-transform: uppercase;
448
+ letter-spacing: var(--tracking-wider);
449
+ color: var(--accent-contrast);
450
+ opacity: 0.75;
451
+ }
452
+ ```
453
+
454
+ ---
455
+
456
+ ### 5. Pricing
457
+
458
+ 2–3 brutalist cards. Featured with sticker badge + shadow-xl.
459
+
460
+ ```css
461
+ .pricing-grid {
462
+ display: grid;
463
+ grid-template-columns: repeat(3, 1fr);
464
+ gap: var(--space-6);
465
+ align-items: start;
466
+ }
467
+
468
+ .pricing-card {
469
+ background: var(--bg-surface);
470
+ border: var(--border-thicker);
471
+ box-shadow: var(--shadow-md);
472
+ padding: var(--space-8);
473
+ }
474
+
475
+ .pricing-card--featured {
476
+ box-shadow: var(--shadow-xl);
477
+ position: relative;
478
+ }
479
+
480
+ /* "[BEST VALUE]" sticker — positioned at top-right */
481
+ .pricing-card--featured .sticker {
482
+ position: absolute;
483
+ top: calc(-1 * var(--space-3));
484
+ right: var(--space-4);
485
+ }
486
+
487
+ .pricing-price {
488
+ font-family: var(--font-mono);
489
+ font-size: var(--text-3xl);
490
+ font-weight: var(--weight-extrabold);
491
+ color: var(--text-heading);
492
+ margin-bottom: var(--space-6);
493
+ }
494
+
495
+ .pricing-feature {
496
+ display: flex;
497
+ align-items: center;
498
+ gap: var(--space-3);
499
+ padding: var(--space-2) 0;
500
+ font-size: var(--text-sm);
501
+ border-bottom: var(--border-subtle);
502
+ }
503
+
504
+ .pricing-feature:last-child { border-bottom: none; }
505
+ ```
506
+
507
+ ---
508
+
509
+ ### 6. CTA Section
510
+
511
+ ```css
512
+ .cta-section {
513
+ background: var(--bg-void);
514
+ padding: var(--space-24) var(--space-8);
515
+ text-align: center;
516
+ position: relative;
517
+ overflow: hidden;
518
+ }
519
+
520
+ /* Optional pattern background */
521
+ .cta-section--pattern::before {
522
+ content: '';
523
+ position: absolute;
524
+ inset: 0;
525
+ background-image: radial-gradient(var(--border-color) 1px, transparent 1px);
526
+ background-size: 20px 20px;
527
+ opacity: 0.10;
528
+ pointer-events: none;
529
+ }
530
+
531
+ .cta-section h2 {
532
+ font-family: var(--font-display);
533
+ font-size: var(--text-3xl);
534
+ font-weight: var(--weight-extrabold);
535
+ letter-spacing: var(--tracking-tight);
536
+ margin-bottom: var(--space-8);
537
+ position: relative;
538
+ }
539
+ ```
540
+
541
+ ---
542
+
543
+ ### 7. FAQ
544
+
545
+ Brutalist accordion — `+` / `−` toggle, not chevron.
546
+
547
+ ```css
548
+ .faq-item {
549
+ border: var(--border-thick);
550
+ margin-bottom: -1px; /* collapse adjacent borders */
551
+ }
552
+
553
+ .faq-trigger {
554
+ width: 100%;
555
+ background: none;
556
+ border: none;
557
+ padding: var(--space-5) var(--space-6);
558
+ display: flex;
559
+ justify-content: space-between;
560
+ align-items: center;
561
+ font-family: var(--font-display);
562
+ font-size: var(--text-base);
563
+ font-weight: var(--weight-bold);
564
+ color: var(--text-heading);
565
+ cursor: pointer;
566
+ text-align: left;
567
+ }
568
+
569
+ .faq-trigger:hover { background: var(--bg-elevated); }
570
+
571
+ .faq-icon {
572
+ font-family: var(--font-mono);
573
+ font-size: var(--text-xl);
574
+ font-weight: var(--weight-bold);
575
+ line-height: 1;
576
+ flex-shrink: 0;
577
+ }
578
+
579
+ .faq-answer {
580
+ padding: 0 var(--space-6) var(--space-5);
581
+ font-size: var(--text-sm);
582
+ color: var(--text-secondary);
583
+ line-height: 1.7;
584
+ border-top: var(--border-subtle);
585
+ }
586
+ ```
587
+
588
+ ---
589
+
590
+ ### 8. Logo Cloud
591
+
592
+ ```css
593
+ .logo-cloud {
594
+ padding: var(--space-12) var(--space-8);
595
+ border-bottom: var(--border-thick);
596
+ }
597
+
598
+ .logo-cloud__label {
599
+ font-family: var(--font-mono);
600
+ font-size: var(--text-xs);
601
+ text-transform: uppercase;
602
+ letter-spacing: var(--tracking-wider);
603
+ color: var(--text-muted);
604
+ text-align: center;
605
+ margin-bottom: var(--space-6);
606
+ }
607
+
608
+ .logo-cloud__grid {
609
+ display: flex;
610
+ flex-wrap: wrap;
611
+ gap: var(--space-8);
612
+ justify-content: center;
613
+ align-items: center;
614
+ }
615
+
616
+ .logo-cloud__logo {
617
+ /* Black/solid — not grayscale with opacity */
618
+ filter: brightness(0);
619
+ opacity: 0.7;
620
+ height: 28px;
621
+ object-fit: contain;
622
+ }
623
+
624
+ .logo-cloud__logo:hover { opacity: 1; }
625
+ ```
626
+
627
+ ---
628
+
629
+ ## Footer
630
+
631
+ ```css
632
+ .site-footer {
633
+ background: var(--bg-void);
634
+ border-top: var(--border-thickest);
635
+ padding-top: var(--space-12);
636
+ }
637
+
638
+ .site-footer__grid {
639
+ display: grid;
640
+ grid-template-columns: repeat(4, 1fr);
641
+ gap: var(--space-8);
642
+ max-width: 1200px;
643
+ margin: 0 auto;
644
+ padding: 0 var(--space-8) var(--space-12);
645
+ }
646
+
647
+ .footer-section__title {
648
+ font-family: var(--font-mono);
649
+ font-size: var(--text-xs);
650
+ font-weight: var(--weight-bold);
651
+ text-transform: uppercase;
652
+ letter-spacing: var(--tracking-wider);
653
+ color: var(--text-heading);
654
+ margin-bottom: var(--space-4);
655
+ }
656
+
657
+ .footer-section__link {
658
+ display: block;
659
+ font-size: var(--text-sm);
660
+ color: var(--text-secondary);
661
+ text-decoration: none;
662
+ padding: var(--space-1) 0;
663
+ transition: color var(--transition-fast);
664
+ }
665
+
666
+ .footer-section__link:hover {
667
+ color: var(--text-heading);
668
+ text-decoration: underline;
669
+ text-decoration-thickness: 2px;
670
+ }
671
+
672
+ .site-footer__bottom {
673
+ border-top: var(--border-thick);
674
+ padding: var(--space-4) var(--space-8);
675
+ max-width: 1200px;
676
+ margin: 0 auto;
677
+ display: flex;
678
+ justify-content: space-between;
679
+ align-items: center;
680
+ }
681
+
682
+ .site-footer__copyright {
683
+ font-family: var(--font-mono);
684
+ font-size: var(--text-xs);
685
+ color: var(--text-muted);
686
+ }
687
+
688
+ /* Social icons: square frames */
689
+ .social-icon {
690
+ width: 36px;
691
+ height: 36px;
692
+ border: var(--border-thick);
693
+ display: flex;
694
+ align-items: center;
695
+ justify-content: center;
696
+ color: var(--text-heading);
697
+ text-decoration: none;
698
+ transition: background var(--transition-fast);
699
+ }
700
+
701
+ .social-icon:hover { background: var(--bg-elevated); }
702
+ ```
703
+
704
+ ---
705
+
706
+ ## Anti-Patterns
707
+
708
+ These patterns are common mistakes in brutalist UI. Avoid all of them.
709
+
710
+ | Anti-pattern | Why it's wrong | What to do instead |
711
+ |---|---|---|
712
+ | `box-shadow: 0 4px 12px rgba(0,0,0,0.15)` | Soft blur shadow = NOT brutalist | `box-shadow: 4px 4px 0 #1A1A1A` — zero blur |
713
+ | `backdrop-filter: blur(12px)` | Glassmorphism, opposite of brutalist | Remove entirely. No blur anywhere. |
714
+ | `border: 1px solid #e5e7eb` | Thin gray border = clean-saas | `border: 2px solid #1A1A1A` — thick, black |
715
+ | `border-radius: 8px` to `16px` | "Normal" radius = medium ground | Use `0` or `9999px` only |
716
+ | Pastel backgrounds | Soft pastels = glassmorphism | Saturated flat colors or off-white |
717
+ | Gradient fills | Gradients = polished SaaS | Flat solid colors only |
718
+ | Illustrated empty states | Cute illustrations = "corporate friendly" | `[NO DATA]` in mono |
719
+ | Card without border | Floating card = clean SaaS | Every card has a visible border |
720
+ | Thin line dividers (`1px #e5e7eb`) | Invisible separators = invisible structure | `border: 2px solid #1A1A1A` |
721
+ | Centered long-form body text | Editorial web convention | Left-aligned paragraphs |
722
+ | Muted status colors (`#86efac` light green) | Legibility, not signal strength | Full-saturation semantic colors |
723
+ | Hover state that only changes opacity | Too subtle | Change background AND border state |