ai-spector 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +10 -2
  2. package/assets/themes/airbnb/preview.html +281 -0
  3. package/assets/themes/airtable/preview.html +209 -0
  4. package/assets/themes/apple/preview.html +461 -0
  5. package/assets/themes/binance/preview.html +1013 -0
  6. package/assets/themes/bmw/preview.html +255 -0
  7. package/assets/themes/bugatti/preview.html +879 -0
  8. package/assets/themes/cal/preview.html +620 -0
  9. package/assets/themes/claude/preview.html +873 -0
  10. package/assets/themes/clay/preview.html +360 -0
  11. package/assets/themes/clickhouse/preview.html +833 -0
  12. package/assets/themes/cohere/preview.html +854 -0
  13. package/assets/themes/coinbase/preview.html +208 -0
  14. package/assets/themes/composio/preview.html +980 -0
  15. package/assets/themes/cursor/preview.html +428 -0
  16. package/assets/themes/elevenlabs/preview.html +296 -0
  17. package/assets/themes/expo/preview.html +580 -0
  18. package/assets/themes/ferrari/preview.html +1168 -0
  19. package/assets/themes/framer/preview.html +930 -0
  20. package/assets/themes/hashicorp/preview.html +1238 -0
  21. package/assets/themes/ibm/preview.html +473 -0
  22. package/assets/themes/intercom/preview.html +229 -0
  23. package/assets/themes/kraken/preview.html +213 -0
  24. package/assets/themes/lamborghini/preview.html +428 -0
  25. package/assets/themes/linear.app/preview.html +418 -0
  26. package/assets/themes/lovable/preview.html +393 -0
  27. package/assets/themes/meta/preview.html +656 -0
  28. package/assets/themes/minimax/preview.html +1293 -0
  29. package/assets/themes/mintlify/preview.html +443 -0
  30. package/assets/themes/miro/preview.html +218 -0
  31. package/assets/themes/mistral.ai/preview.html +850 -0
  32. package/assets/themes/mongodb/preview.html +304 -0
  33. package/assets/themes/nike/preview.html +1182 -0
  34. package/assets/themes/notion/preview.html +409 -0
  35. package/assets/themes/nvidia/preview.html +411 -0
  36. package/assets/themes/ollama/preview.html +725 -0
  37. package/assets/themes/opencode.ai/preview.html +402 -0
  38. package/assets/themes/pinterest/preview.html +277 -0
  39. package/assets/themes/playstation/preview.html +1125 -0
  40. package/assets/themes/posthog/preview.html +794 -0
  41. package/assets/themes/raycast/preview.html +735 -0
  42. package/assets/themes/renault/preview.html +652 -0
  43. package/assets/themes/replicate/preview.html +878 -0
  44. package/assets/themes/resend/preview.html +399 -0
  45. package/assets/themes/revolut/preview.html +278 -0
  46. package/assets/themes/runwayml/preview.html +712 -0
  47. package/assets/themes/sanity/preview.html +1180 -0
  48. package/assets/themes/sentry/preview.html +996 -0
  49. package/assets/themes/shopify/preview.html +611 -0
  50. package/assets/themes/spacex/preview.html +265 -0
  51. package/assets/themes/spotify/preview.html +275 -0
  52. package/assets/themes/stripe/preview.html +464 -0
  53. package/assets/themes/supabase/preview.html +1002 -0
  54. package/assets/themes/superhuman/preview.html +996 -0
  55. package/assets/themes/tesla/preview.html +971 -0
  56. package/assets/themes/theverge/preview.html +1143 -0
  57. package/assets/themes/together.ai/preview.html +944 -0
  58. package/assets/themes/uber/preview.html +1164 -0
  59. package/assets/themes/vercel/preview.html +412 -0
  60. package/assets/themes/voltagent/preview.html +813 -0
  61. package/assets/themes/warp/preview.html +580 -0
  62. package/assets/themes/webflow/preview.html +191 -0
  63. package/assets/themes/wired/preview.html +1049 -0
  64. package/assets/themes/wise/preview.html +274 -0
  65. package/assets/themes/x.ai/preview.html +452 -0
  66. package/assets/themes/zapier/preview.html +417 -0
  67. package/dist/cli.js +37 -1
  68. package/dist/cli.js.map +1 -1
  69. package/dist/commands/graph-visualize.d.ts.map +1 -1
  70. package/dist/commands/graph-visualize.js +1 -22
  71. package/dist/commands/graph-visualize.js.map +1 -1
  72. package/dist/commands/prototype.d.ts +19 -0
  73. package/dist/commands/prototype.d.ts.map +1 -1
  74. package/dist/commands/prototype.js +78 -3
  75. package/dist/commands/prototype.js.map +1 -1
  76. package/dist/prototype/config.d.ts +9 -1
  77. package/dist/prototype/config.d.ts.map +1 -1
  78. package/dist/prototype/config.js +29 -0
  79. package/dist/prototype/config.js.map +1 -1
  80. package/dist/prototype/htpasswd.d.ts +5 -0
  81. package/dist/prototype/htpasswd.d.ts.map +1 -0
  82. package/dist/prototype/htpasswd.js +33 -0
  83. package/dist/prototype/htpasswd.js.map +1 -0
  84. package/dist/prototype/theme-preview.d.ts +17 -0
  85. package/dist/prototype/theme-preview.d.ts.map +1 -0
  86. package/dist/prototype/theme-preview.js +73 -0
  87. package/dist/prototype/theme-preview.js.map +1 -0
  88. package/dist/prototype/types.d.ts +8 -0
  89. package/dist/prototype/types.d.ts.map +1 -1
  90. package/dist/prototype/validate.d.ts.map +1 -1
  91. package/dist/prototype/validate.js +19 -0
  92. package/dist/prototype/validate.js.map +1 -1
  93. package/dist/util/open-browser.d.ts +3 -0
  94. package/dist/util/open-browser.d.ts.map +1 -0
  95. package/dist/util/open-browser.js +24 -0
  96. package/dist/util/open-browser.js.map +1 -0
  97. package/package.json +4 -2
  98. package/scaffold/.ai-spector/.docflow/config/language.json +4 -0
  99. package/scaffold/cursor/WORKFLOW.md +2 -1
  100. package/scaffold/cursor/skills/_skill-router.md +1 -1
  101. package/scaffold/cursor/skills/ai-spector/references/generate-workflow.md +8 -0
  102. package/scaffold/cursor/skills/ai-spector/references/language-picker.md +70 -0
  103. package/scaffold/cursor/skills/ai-spector/references/project-conventions.md +13 -4
  104. package/scaffold/cursor/skills/ai-spector-generate-basic-design/SKILL.md +1 -0
  105. package/scaffold/cursor/skills/ai-spector-generate-detail-design/SKILL.md +1 -0
  106. package/scaffold/cursor/skills/ai-spector-generate-prototype/SKILL.md +13 -5
  107. package/scaffold/cursor/skills/ai-spector-generate-prototype/references/auth-picker.md +61 -0
  108. package/scaffold/cursor/skills/ai-spector-generate-prototype/references/runbook.md +32 -10
  109. package/scaffold/cursor/skills/ai-spector-generate-prototype/references/theme-picker.md +118 -0
  110. package/scaffold/cursor/skills/ai-spector-generate-srs/SKILL.md +1 -0
  111. package/scaffold/prototype/README.md +24 -3
@@ -0,0 +1,1049 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Design System Inspiration of WIRED</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700;900&family=Lora:ital,wght@0,400;0,500;0,700;1,400&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
10
+ <style>
11
+ :root {
12
+ --wired-black: #000000;
13
+ --page-ink: #1a1a1a;
14
+ --paper-white: #ffffff;
15
+ --caption-gray: #757575;
16
+ --disabled-gray: #999999;
17
+ --hairline-tint: #e2e8f0;
18
+ --hairline-mid: #4a5568;
19
+ --link-blue: #057dbc;
20
+ --error-red: #e53e3e;
21
+
22
+ --font-display: 'Playfair Display', 'WiredDisplay', Helvetica, serif;
23
+ --font-serif: 'Lora', 'BreveText', Helvetica, serif;
24
+ --font-sans: 'Inter', 'Apercu', Helvetica, sans-serif;
25
+ --font-mono: 'JetBrains Mono', 'WiredMono', Monaco, 'Courier New', Courier, monospace;
26
+ }
27
+ * { margin: 0; padding: 0; box-sizing: border-box; }
28
+ html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
29
+ body {
30
+ background: var(--paper-white);
31
+ color: var(--page-ink);
32
+ font-family: var(--font-serif);
33
+ font-size: 16px;
34
+ line-height: 1.50;
35
+ letter-spacing: 0.09px;
36
+ }
37
+
38
+ /* NAV */
39
+ .nav {
40
+ position: sticky; top: 0; z-index: 100;
41
+ padding: 14px 32px;
42
+ background: var(--paper-white);
43
+ border-bottom: 2px solid var(--wired-black);
44
+ }
45
+ .nav-brand {
46
+ font-family: var(--font-display);
47
+ font-size: 20px;
48
+ font-weight: 900;
49
+ color: var(--page-ink);
50
+ letter-spacing: -0.4px;
51
+ }
52
+ .nav-links {
53
+ display: flex; gap: 28px; list-style: none; align-items: center;
54
+ }
55
+ .nav-links a {
56
+ font-family: var(--font-mono);
57
+ font-size: 12px;
58
+ font-weight: 700;
59
+ color: var(--page-ink);
60
+ text-decoration: none;
61
+ text-transform: uppercase;
62
+ letter-spacing: 1.2px;
63
+ transition: color 150ms ease;
64
+ }
65
+ .nav-links a:hover { color: var(--link-blue); }
66
+ .nav-cta {
67
+ display: inline-block;
68
+ background: var(--paper-white);
69
+ color: var(--wired-black);
70
+ padding: 12px 24px;
71
+ border: 2px solid var(--wired-black);
72
+ border-radius: 0;
73
+ font-family: var(--font-sans);
74
+ font-size: 14px;
75
+ font-weight: 700;
76
+ letter-spacing: 0.3px;
77
+ text-decoration: none;
78
+ text-transform: uppercase;
79
+ cursor: pointer;
80
+ transition: background 150ms ease, color 150ms ease;
81
+ }
82
+ .nav-cta:hover { background: var(--wired-black); color: var(--paper-white); }
83
+
84
+ /* HERO */
85
+ .hero {
86
+ padding: 80px 48px 64px;
87
+ background: var(--paper-white);
88
+ border-bottom: 1px solid var(--wired-black);
89
+ }
90
+ .hero-kicker {
91
+ display: inline-block;
92
+ font-family: var(--font-mono);
93
+ font-size: 13px;
94
+ font-weight: 700;
95
+ color: var(--page-ink);
96
+ text-transform: uppercase;
97
+ letter-spacing: 0.92px;
98
+ padding: 6px 12px;
99
+ background: var(--wired-black);
100
+ color: var(--paper-white);
101
+ margin-bottom: 28px;
102
+ }
103
+ .hero h1 {
104
+ font-family: var(--font-display);
105
+ font-size: 84px;
106
+ font-weight: 900;
107
+ line-height: 1.05;
108
+ letter-spacing: -1.5px;
109
+ color: var(--page-ink);
110
+ margin-bottom: 24px;
111
+ max-width: 1000px;
112
+ }
113
+ .hero p {
114
+ font-family: var(--font-serif);
115
+ font-size: 19px;
116
+ line-height: 1.47;
117
+ letter-spacing: 0.108px;
118
+ color: var(--page-ink);
119
+ max-width: 640px;
120
+ margin-bottom: 36px;
121
+ }
122
+ .hero-buttons { display: flex; gap: 16px; flex-wrap: wrap; }
123
+ .btn-primary {
124
+ display: inline-block;
125
+ background: var(--paper-white);
126
+ color: var(--wired-black);
127
+ padding: 14px 28px;
128
+ border: 2px solid var(--wired-black);
129
+ border-radius: 0;
130
+ font-family: var(--font-sans);
131
+ font-size: 16px;
132
+ font-weight: 700;
133
+ letter-spacing: 0.3px;
134
+ text-decoration: none;
135
+ text-transform: uppercase;
136
+ cursor: pointer;
137
+ transition: background 150ms ease, color 150ms ease;
138
+ }
139
+ .btn-primary:hover { background: var(--wired-black); color: var(--paper-white); }
140
+ .btn-secondary {
141
+ display: inline-block;
142
+ background: var(--wired-black);
143
+ color: var(--paper-white);
144
+ padding: 14px 28px;
145
+ border: 2px solid var(--wired-black);
146
+ border-radius: 0;
147
+ font-family: var(--font-sans);
148
+ font-size: 16px;
149
+ font-weight: 700;
150
+ letter-spacing: 0.3px;
151
+ text-decoration: none;
152
+ text-transform: uppercase;
153
+ cursor: pointer;
154
+ transition: background 150ms ease, color 150ms ease;
155
+ }
156
+ .btn-secondary:hover { background: var(--paper-white); color: var(--wired-black); }
157
+ .btn-ghost {
158
+ display: inline-block;
159
+ background: transparent;
160
+ color: var(--page-ink);
161
+ padding: 14px 0;
162
+ border: none;
163
+ border-bottom: 2px solid var(--page-ink);
164
+ border-radius: 0;
165
+ font-family: var(--font-sans);
166
+ font-size: 16px;
167
+ font-weight: 700;
168
+ letter-spacing: 0.3px;
169
+ text-decoration: none;
170
+ text-transform: uppercase;
171
+ cursor: pointer;
172
+ transition: color 150ms ease, border-color 150ms ease;
173
+ }
174
+ .btn-ghost:hover { color: var(--link-blue); border-color: var(--link-blue); }
175
+ .btn-icon {
176
+ display: inline-flex;
177
+ align-items: center;
178
+ justify-content: center;
179
+ width: 40px;
180
+ height: 40px;
181
+ background: var(--paper-white);
182
+ color: var(--page-ink);
183
+ border: 1px solid var(--caption-gray);
184
+ border-radius: 50%;
185
+ cursor: pointer;
186
+ font-family: var(--font-mono);
187
+ font-size: 13px;
188
+ font-weight: 700;
189
+ transition: background 150ms ease, color 150ms ease;
190
+ }
191
+ .btn-icon:hover { background: var(--wired-black); color: var(--paper-white); border-color: var(--wired-black); }
192
+ .btn-pill {
193
+ display: inline-block;
194
+ background: var(--wired-black);
195
+ color: var(--paper-white);
196
+ padding: 6px 14px;
197
+ border: none;
198
+ border-radius: 1920px;
199
+ font-family: var(--font-mono);
200
+ font-size: 11px;
201
+ font-weight: 700;
202
+ text-transform: uppercase;
203
+ letter-spacing: 1.1px;
204
+ }
205
+
206
+ /* SECTION FRAME */
207
+ section.preview-section {
208
+ padding: 64px 48px;
209
+ border-bottom: 1px solid var(--wired-black);
210
+ background: var(--paper-white);
211
+ }
212
+ .section-ribbon {
213
+ display: block;
214
+ background: var(--wired-black);
215
+ color: var(--paper-white);
216
+ padding: 12px 20px;
217
+ font-family: var(--font-mono);
218
+ font-size: 12px;
219
+ font-weight: 700;
220
+ text-transform: uppercase;
221
+ letter-spacing: 1.2px;
222
+ margin-bottom: 32px;
223
+ width: fit-content;
224
+ }
225
+ .section-title {
226
+ font-family: var(--font-display);
227
+ font-size: 40px;
228
+ font-weight: 900;
229
+ line-height: 1;
230
+ letter-spacing: -0.6px;
231
+ color: var(--page-ink);
232
+ margin-bottom: 12px;
233
+ }
234
+ .section-subtitle {
235
+ font-family: var(--font-serif);
236
+ font-size: 19px;
237
+ line-height: 1.47;
238
+ color: var(--caption-gray);
239
+ margin-bottom: 40px;
240
+ max-width: 720px;
241
+ }
242
+
243
+ /* COLOR PALETTE */
244
+ .color-group { margin-bottom: 36px; }
245
+ .color-group-label {
246
+ font-family: var(--font-mono);
247
+ font-size: 11px;
248
+ font-weight: 700;
249
+ text-transform: uppercase;
250
+ letter-spacing: 1.1px;
251
+ color: var(--page-ink);
252
+ padding-bottom: 10px;
253
+ margin-bottom: 16px;
254
+ border-bottom: 1px solid var(--wired-black);
255
+ }
256
+ .color-grid {
257
+ display: grid;
258
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
259
+ gap: 0;
260
+ border-left: 1px solid var(--wired-black);
261
+ border-top: 1px solid var(--wired-black);
262
+ }
263
+ .color-swatch {
264
+ border-right: 1px solid var(--wired-black);
265
+ border-bottom: 1px solid var(--wired-black);
266
+ background: var(--paper-white);
267
+ }
268
+ .color-block {
269
+ height: 130px;
270
+ border-bottom: 1px solid var(--wired-black);
271
+ }
272
+ .color-meta {
273
+ padding: 16px 18px 18px;
274
+ }
275
+ .color-name {
276
+ font-family: var(--font-sans);
277
+ font-size: 16px;
278
+ font-weight: 700;
279
+ line-height: 1.25;
280
+ letter-spacing: 0.3px;
281
+ color: var(--page-ink);
282
+ margin-bottom: 6px;
283
+ }
284
+ .color-hex {
285
+ font-family: var(--font-mono);
286
+ font-size: 12px;
287
+ font-weight: 700;
288
+ text-transform: uppercase;
289
+ letter-spacing: 1.1px;
290
+ color: var(--page-ink);
291
+ margin-bottom: 10px;
292
+ }
293
+ .color-role {
294
+ font-family: var(--font-serif);
295
+ font-size: 14px;
296
+ line-height: 1.45;
297
+ color: var(--caption-gray);
298
+ }
299
+
300
+ /* TYPOGRAPHY */
301
+ .type-row {
302
+ display: grid;
303
+ grid-template-columns: 240px 1fr;
304
+ gap: 32px;
305
+ padding: 28px 0;
306
+ border-bottom: 1px solid var(--hairline-tint);
307
+ align-items: baseline;
308
+ }
309
+ .type-row:last-child { border-bottom: none; }
310
+ .type-meta {
311
+ font-family: var(--font-mono);
312
+ font-size: 11px;
313
+ font-weight: 700;
314
+ text-transform: uppercase;
315
+ letter-spacing: 1.1px;
316
+ color: var(--caption-gray);
317
+ line-height: 1.6;
318
+ }
319
+ .type-meta strong {
320
+ display: block;
321
+ color: var(--page-ink);
322
+ margin-bottom: 6px;
323
+ font-size: 12px;
324
+ }
325
+ .type-sample { color: var(--page-ink); }
326
+
327
+ /* BUTTONS GRID */
328
+ .button-grid {
329
+ display: grid;
330
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
331
+ gap: 0;
332
+ border-left: 1px solid var(--wired-black);
333
+ border-top: 1px solid var(--wired-black);
334
+ }
335
+ .button-cell {
336
+ padding: 36px 28px;
337
+ border-right: 1px solid var(--wired-black);
338
+ border-bottom: 1px solid var(--wired-black);
339
+ background: var(--paper-white);
340
+ }
341
+ .button-cell .label {
342
+ font-family: var(--font-mono);
343
+ font-size: 11px;
344
+ font-weight: 700;
345
+ text-transform: uppercase;
346
+ letter-spacing: 1.1px;
347
+ color: var(--caption-gray);
348
+ margin-bottom: 18px;
349
+ display: block;
350
+ }
351
+
352
+ /* CARDS / EDITORIAL TILES */
353
+ .editorial-grid {
354
+ display: grid;
355
+ grid-template-columns: 2fr 1fr 1fr;
356
+ gap: 0;
357
+ border-top: 1px solid var(--wired-black);
358
+ border-bottom: 1px solid var(--wired-black);
359
+ }
360
+ .story-tile {
361
+ padding: 28px 32px 36px;
362
+ border-right: 1px solid var(--wired-black);
363
+ background: var(--paper-white);
364
+ }
365
+ .story-tile:last-child { border-right: none; }
366
+ .story-image {
367
+ aspect-ratio: 16 / 9;
368
+ background: linear-gradient(135deg, #1a1a1a 0%, #4a5568 100%);
369
+ margin-bottom: 20px;
370
+ border-radius: 0;
371
+ }
372
+ .story-tile.small .story-image { aspect-ratio: 4 / 3; }
373
+ .story-kicker {
374
+ font-family: var(--font-mono);
375
+ font-size: 13px;
376
+ font-weight: 700;
377
+ text-transform: uppercase;
378
+ letter-spacing: 0.92px;
379
+ color: var(--page-ink);
380
+ margin-bottom: 10px;
381
+ display: block;
382
+ }
383
+ .story-headline {
384
+ font-family: var(--font-display);
385
+ font-size: 36px;
386
+ font-weight: 900;
387
+ line-height: 0.96;
388
+ letter-spacing: -0.5px;
389
+ color: var(--page-ink);
390
+ margin-bottom: 14px;
391
+ }
392
+ .story-tile.small .story-headline {
393
+ font-size: 22px;
394
+ line-height: 1.08;
395
+ letter-spacing: -0.2px;
396
+ }
397
+ .story-deck {
398
+ font-family: var(--font-serif);
399
+ font-size: 16px;
400
+ line-height: 1.50;
401
+ letter-spacing: 0.09px;
402
+ color: var(--page-ink);
403
+ margin-bottom: 16px;
404
+ }
405
+ .story-meta {
406
+ font-family: var(--font-mono);
407
+ font-size: 12px;
408
+ font-weight: 400;
409
+ text-transform: uppercase;
410
+ letter-spacing: 1.1px;
411
+ color: var(--caption-gray);
412
+ }
413
+ .story-tile a:hover .story-headline { color: var(--link-blue); }
414
+
415
+ /* MOST POPULAR */
416
+ .most-popular-list {
417
+ border-top: 1px solid var(--wired-black);
418
+ }
419
+ .most-popular-item {
420
+ display: grid;
421
+ grid-template-columns: 80px 1fr;
422
+ gap: 24px;
423
+ padding: 24px 0;
424
+ border-bottom: 1px solid var(--wired-black);
425
+ align-items: baseline;
426
+ }
427
+ .mp-number {
428
+ font-family: var(--font-display);
429
+ font-size: 48px;
430
+ font-weight: 900;
431
+ line-height: 1;
432
+ letter-spacing: -1px;
433
+ color: var(--page-ink);
434
+ }
435
+ .mp-content .story-kicker { margin-bottom: 6px; }
436
+ .mp-headline {
437
+ font-family: var(--font-display);
438
+ font-size: 24px;
439
+ font-weight: 900;
440
+ line-height: 1.08;
441
+ letter-spacing: -0.3px;
442
+ color: var(--page-ink);
443
+ }
444
+
445
+ /* FORMS */
446
+ .form-stack {
447
+ display: grid;
448
+ grid-template-columns: 1fr 1fr;
449
+ gap: 32px;
450
+ max-width: 880px;
451
+ }
452
+ .form-field { display: flex; flex-direction: column; gap: 10px; }
453
+ .form-label {
454
+ font-family: var(--font-mono);
455
+ font-size: 11px;
456
+ font-weight: 700;
457
+ text-transform: uppercase;
458
+ letter-spacing: 1.1px;
459
+ color: var(--page-ink);
460
+ }
461
+ .form-input {
462
+ background: var(--paper-white);
463
+ border: 2px solid var(--wired-black);
464
+ border-radius: 0;
465
+ padding: 14px 16px;
466
+ font-family: var(--font-sans);
467
+ font-size: 16px;
468
+ font-weight: 400;
469
+ color: var(--page-ink);
470
+ outline: none;
471
+ transition: border-color 150ms ease;
472
+ }
473
+ .form-input::placeholder { color: var(--caption-gray); }
474
+ .form-input.focus { box-shadow: inset 0 0 0 2px var(--wired-black); }
475
+ .form-input.error { border-color: var(--error-red); color: var(--error-red); }
476
+ .form-error {
477
+ font-family: var(--font-mono);
478
+ font-size: 11px;
479
+ font-weight: 700;
480
+ text-transform: uppercase;
481
+ letter-spacing: 1.1px;
482
+ color: var(--error-red);
483
+ }
484
+ .form-textarea {
485
+ min-height: 120px;
486
+ resize: vertical;
487
+ line-height: 1.5;
488
+ }
489
+
490
+ /* SPACING */
491
+ .spacing-row {
492
+ display: flex;
493
+ align-items: flex-end;
494
+ gap: 16px;
495
+ flex-wrap: wrap;
496
+ }
497
+ .spacing-item { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
498
+ .spacing-block {
499
+ background: var(--wired-black);
500
+ height: 64px;
501
+ }
502
+ .spacing-label {
503
+ font-family: var(--font-mono);
504
+ font-size: 11px;
505
+ font-weight: 700;
506
+ text-transform: uppercase;
507
+ letter-spacing: 1.1px;
508
+ color: var(--page-ink);
509
+ }
510
+
511
+ /* RADIUS */
512
+ .radius-row {
513
+ display: flex;
514
+ gap: 28px;
515
+ flex-wrap: wrap;
516
+ }
517
+ .radius-item { display: flex; flex-direction: column; gap: 12px; align-items: center; }
518
+ .radius-block {
519
+ width: 100px;
520
+ height: 100px;
521
+ background: var(--paper-white);
522
+ border: 2px solid var(--wired-black);
523
+ }
524
+ .radius-block.r-pill { border-radius: 1920px; width: 140px; height: 50px; }
525
+ .radius-block.r-circle { border-radius: 50%; }
526
+ .radius-label {
527
+ font-family: var(--font-mono);
528
+ font-size: 11px;
529
+ font-weight: 700;
530
+ text-transform: uppercase;
531
+ letter-spacing: 1.1px;
532
+ color: var(--page-ink);
533
+ text-align: center;
534
+ }
535
+ .radius-label small { display: block; color: var(--caption-gray); margin-top: 4px; font-weight: 400; }
536
+
537
+ /* ELEVATION */
538
+ .elevation-grid {
539
+ display: grid;
540
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
541
+ gap: 0;
542
+ border-left: 1px solid var(--wired-black);
543
+ border-top: 1px solid var(--wired-black);
544
+ }
545
+ .elevation-cell {
546
+ padding: 36px 24px;
547
+ border-right: 1px solid var(--wired-black);
548
+ border-bottom: 1px solid var(--wired-black);
549
+ background: var(--paper-white);
550
+ text-align: center;
551
+ min-height: 180px;
552
+ display: flex;
553
+ flex-direction: column;
554
+ justify-content: center;
555
+ align-items: center;
556
+ gap: 16px;
557
+ }
558
+ .elevation-cell.lvl-0 { background: var(--paper-white); }
559
+ .elevation-cell.lvl-1 { border-top: 1px solid var(--hairline-tint); }
560
+ .elevation-cell.lvl-2 { border-top: 2px solid var(--wired-black); }
561
+ .elevation-cell.lvl-3 .demo-box { border: 2px solid var(--wired-black); padding: 14px 28px; font-family: var(--font-sans); font-weight: 700; font-size: 14px; text-transform: uppercase; letter-spacing: 0.3px; }
562
+ .elevation-cell.lvl-4 { background: var(--wired-black); color: var(--paper-white); }
563
+ .elevation-cell.lvl-5 { background: var(--page-ink); color: var(--paper-white); }
564
+ .elevation-cell .label {
565
+ font-family: var(--font-mono);
566
+ font-size: 11px;
567
+ font-weight: 700;
568
+ text-transform: uppercase;
569
+ letter-spacing: 1.1px;
570
+ }
571
+ .elevation-cell .desc {
572
+ font-family: var(--font-serif);
573
+ font-size: 13px;
574
+ line-height: 1.4;
575
+ color: inherit;
576
+ opacity: 0.85;
577
+ }
578
+
579
+ /* FOOTER */
580
+ .footer {
581
+ background: var(--page-ink);
582
+ color: var(--paper-white);
583
+ padding: 40px 48px;
584
+ font-family: var(--font-mono);
585
+ font-size: 12px;
586
+ font-weight: 400;
587
+ text-transform: uppercase;
588
+ letter-spacing: 1.1px;
589
+ text-align: center;
590
+ }
591
+ .footer a { color: var(--paper-white); }
592
+
593
+ /* RESPONSIVE */
594
+ @media (max-width: 900px) {
595
+ .hero { padding: 56px 24px 48px; }
596
+ .hero h1 { font-size: 48px; letter-spacing: -0.8px; }
597
+ .section-title { font-size: 30px; }
598
+ section.preview-section { padding: 48px 24px; }
599
+ .editorial-grid { grid-template-columns: 1fr; }
600
+ .story-tile { border-right: none; border-bottom: 1px solid var(--wired-black); }
601
+ .form-stack { grid-template-columns: 1fr; }
602
+ .type-row { grid-template-columns: 1fr; gap: 12px; }
603
+ .nav { padding: 12px 20px; }
604
+ .nav-links { display: none; }
605
+ }
606
+
607
+ /* getdesign.md nav additions */
608
+ .nav-left { display: flex; align-items: center; gap: 20px; }
609
+ .nav-brand-link,
610
+ .nav-brand-link:link,
611
+ .nav-brand-link:visited,
612
+ .nav-brand-link:hover,
613
+ .nav-brand-link:active { text-decoration: none; color: inherit; }
614
+ .nav-github,
615
+ .nav-github:link,
616
+ .nav-github:visited,
617
+ .nav-github:hover,
618
+ .nav-github:active {
619
+ display: inline-flex;
620
+ align-items: center;
621
+ gap: 6px;
622
+ font-size: 12px;
623
+ font-weight: 600;
624
+ color: inherit;
625
+ text-decoration: none;
626
+ padding: 5px 10px;
627
+ border: 1px solid rgba(128, 128, 128, 0.3);
628
+ border-radius: 6px;
629
+ opacity: 0.75;
630
+ transition: opacity 200ms ease, border-color 200ms ease;
631
+ font-family: inherit;
632
+ line-height: 1;
633
+ white-space: nowrap;
634
+ }
635
+ .nav-github:hover { opacity: 1; border-color: rgba(128, 128, 128, 0.55); }
636
+ .nav-github svg { display: block; flex-shrink: 0; }
637
+
638
+ /* getdesign.md nav centering */
639
+ .nav { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; }
640
+ .nav > .nav-left { justify-self: start; }
641
+ .nav > .nav-links { justify-self: center; }
642
+ .nav > :last-child { justify-self: end; }
643
+ </style>
644
+ </head>
645
+ <body>
646
+
647
+ <nav class="nav">
648
+ <div class="nav-left">
649
+ <a href="https://getdesign.md/" target="_blank" rel="noopener noreferrer" class="nav-brand-link">
650
+ <span class="nav-brand">getdesign.md</span>
651
+ </a>
652
+ <a class="nav-github" href="https://github.com/VoltAgent/awesome-design-md" target="_blank" rel="noopener noreferrer" aria-label="awesome-design-md on GitHub">
653
+ <svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2 .37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
654
+ awesome-design-md
655
+ </a>
656
+ </div>
657
+
658
+ <ul class="nav-links">
659
+ <li><a href="#palette">Palette</a></li>
660
+ <li><a href="#typography">Type</a></li>
661
+ <li><a href="#components">Components</a></li>
662
+ <li><a href="#layout">Layout</a></li>
663
+ </ul>
664
+
665
+ <button class="nav-cta">Subscribe</button>
666
+ </nav>
667
+
668
+ <section class="hero">
669
+ <span class="hero-kicker">Design System / Editorial</span>
670
+ <h1>Design System Inspiration of WIRED</h1>
671
+ <p>A printerly, monochrome editorial system held together by hairline rules, hard 2px borders, and four typefaces with four distinct jobs. Generated from DESIGN.md.</p>
672
+ <div class="hero-buttons">
673
+ <a href="#palette" class="btn-primary">Explore the System</a>
674
+ <a href="#typography" class="btn-secondary">Read the Type</a>
675
+ </div>
676
+ </section>
677
+
678
+ <!-- 1. COLOR PALETTE -->
679
+ <section class="preview-section" id="palette">
680
+ <span class="section-ribbon">Section 01 / Palette</span>
681
+ <h2 class="section-title">Color Palette</h2>
682
+ <p class="section-subtitle">Black, paper white, two grays, and one blue accent. The whole site lives inside this discipline.</p>
683
+
684
+ <div class="color-group">
685
+ <div class="color-group-label">Primary — Editorial Ink</div>
686
+ <div class="color-grid">
687
+ <div class="color-swatch">
688
+ <div class="color-block" style="background: #000000;"></div>
689
+ <div class="color-meta">
690
+ <div class="color-name">WIRED Black</div>
691
+ <div class="color-hex">#000000</div>
692
+ <div class="color-role">Pure ink for ribbons, dividers, button borders, headline rules.</div>
693
+ </div>
694
+ </div>
695
+ <div class="color-swatch">
696
+ <div class="color-block" style="background: #1a1a1a;"></div>
697
+ <div class="color-meta">
698
+ <div class="color-name">Page Ink</div>
699
+ <div class="color-hex">#1A1A1A</div>
700
+ <div class="color-role">Near-black for headlines and body type — softened for long reading.</div>
701
+ </div>
702
+ </div>
703
+ <div class="color-swatch">
704
+ <div class="color-block" style="background: #ffffff; border-bottom: 1px solid #000;"></div>
705
+ <div class="color-meta">
706
+ <div class="color-name">Paper White</div>
707
+ <div class="color-hex">#FFFFFF</div>
708
+ <div class="color-role">Default canvas. Treat it like newsprint — uninterrupted, never tinted.</div>
709
+ </div>
710
+ </div>
711
+ </div>
712
+ </div>
713
+
714
+ <div class="color-group">
715
+ <div class="color-group-label">Secondary — Editorial Voice</div>
716
+ <div class="color-grid">
717
+ <div class="color-swatch">
718
+ <div class="color-block" style="background: #057dbc;"></div>
719
+ <div class="color-meta">
720
+ <div class="color-name">Link Blue</div>
721
+ <div class="color-hex">#057DBC</div>
722
+ <div class="color-role">The single brand accent. Inline link hover only — never a fill.</div>
723
+ </div>
724
+ </div>
725
+ </div>
726
+ </div>
727
+
728
+ <div class="color-group">
729
+ <div class="color-group-label">Neutrals & Text</div>
730
+ <div class="color-grid">
731
+ <div class="color-swatch">
732
+ <div class="color-block" style="background: #757575;"></div>
733
+ <div class="color-meta">
734
+ <div class="color-name">Caption Gray</div>
735
+ <div class="color-hex">#757575</div>
736
+ <div class="color-role">Bylines, timestamps, photo credits, secondary metadata.</div>
737
+ </div>
738
+ </div>
739
+ <div class="color-swatch">
740
+ <div class="color-block" style="background: #999999;"></div>
741
+ <div class="color-meta">
742
+ <div class="color-name">Disabled Gray</div>
743
+ <div class="color-hex">#999999</div>
744
+ <div class="color-role">Inactive links and low-priority labels.</div>
745
+ </div>
746
+ </div>
747
+ <div class="color-swatch">
748
+ <div class="color-block" style="background: #e2e8f0;"></div>
749
+ <div class="color-meta">
750
+ <div class="color-name">Hairline Tint</div>
751
+ <div class="color-hex">#E2E8F0</div>
752
+ <div class="color-role">Reserved for &lt;hr&gt; — barely visible, like a margin rule.</div>
753
+ </div>
754
+ </div>
755
+ <div class="color-swatch">
756
+ <div class="color-block" style="background: #4a5568;"></div>
757
+ <div class="color-meta">
758
+ <div class="color-name">Hairline Mid</div>
759
+ <div class="color-hex">#4A5568</div>
760
+ <div class="color-role">Quiet column dividers within editorial blocks.</div>
761
+ </div>
762
+ </div>
763
+ </div>
764
+ </div>
765
+
766
+ <div class="color-group">
767
+ <div class="color-group-label">Semantic — Used Sparingly</div>
768
+ <div class="color-grid">
769
+ <div class="color-swatch">
770
+ <div class="color-block" style="background: #e53e3e;"></div>
771
+ <div class="color-meta">
772
+ <div class="color-name">Error Red</div>
773
+ <div class="color-hex">#E53E3E</div>
774
+ <div class="color-role">Form-error labels and the rare "BREAKING" pill.</div>
775
+ </div>
776
+ </div>
777
+ </div>
778
+ </div>
779
+ </section>
780
+
781
+ <!-- 2. TYPOGRAPHY -->
782
+ <section class="preview-section" id="typography">
783
+ <span class="section-ribbon">Section 02 / Typography</span>
784
+ <h2 class="section-title">Typographic Hierarchy</h2>
785
+ <p class="section-subtitle">Four faces, four jobs. Display serif shouts, humanist serif reads, geometric sans clicks, mono labels.</p>
786
+
787
+ <div class="type-row">
788
+ <div class="type-meta"><strong>Display Hero</strong>WiredDisplay · 64px / 0.93 / -0.5px</div>
789
+ <div class="type-sample" style="font-family: var(--font-display); font-size: 64px; font-weight: 900; line-height: 0.93; letter-spacing: -0.5px;">A Headline Loud Enough For Newsstand</div>
790
+ </div>
791
+ <div class="type-row">
792
+ <div class="type-meta"><strong>Display Mid</strong>WiredDisplay · 26px / 1.08</div>
793
+ <div class="type-sample" style="font-family: var(--font-display); font-size: 26px; font-weight: 900; line-height: 1.08;">Tighter grid headline for the inner story tiles</div>
794
+ </div>
795
+ <div class="type-row">
796
+ <div class="type-meta"><strong>Section Heading</strong>Apercu · 20px / 700 / 1.20 / -0.28px</div>
797
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 20px; font-weight: 700; line-height: 1.20; letter-spacing: -0.28px;">Most Popular This Week</div>
798
+ </div>
799
+ <div class="type-row">
800
+ <div class="type-meta"><strong>Subheading</strong>Apercu · 17px / 700 / 1.29 / -0.144px</div>
801
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 17px; font-weight: 700; line-height: 1.29; letter-spacing: -0.144px;">Story decks within feature blocks</div>
802
+ </div>
803
+ <div class="type-row">
804
+ <div class="type-meta"><strong>Article Deck</strong>BreveText · 19px / 1.47 / 0.108px</div>
805
+ <div class="type-sample" style="font-family: var(--font-serif); font-size: 19px; line-height: 1.47; letter-spacing: 0.108px;">A long-form lead paragraph that should feel like reading a printed magazine page — generous leading and a humanist serif designed for sustained attention.</div>
806
+ </div>
807
+ <div class="type-row">
808
+ <div class="type-meta"><strong>Article Body</strong>BreveText · 16px / 1.50 / 0.09px</div>
809
+ <div class="type-sample" style="font-family: var(--font-serif); font-size: 16px; line-height: 1.50; letter-spacing: 0.09px;">Standard paragraph text. The contrast between display tightness (0.93) and body openness (1.50) is the editorial fingerprint of this design system.</div>
810
+ </div>
811
+ <div class="type-row">
812
+ <div class="type-meta"><strong>UI Heading / Button</strong>Apercu · 16px / 700 / 1.25 / 0.3px</div>
813
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 16px; font-weight: 700; line-height: 1.25; letter-spacing: 0.3px;">Subscribe Now — Inline UI Label</div>
814
+ </div>
815
+ <div class="type-row">
816
+ <div class="type-meta"><strong>Inline Link</strong>Apercu · 14px / 1.29 / 0.4px</div>
817
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 14px; line-height: 1.29; letter-spacing: 0.4px;">Footer link · Secondary navigation</div>
818
+ </div>
819
+ <div class="type-row">
820
+ <div class="type-meta"><strong>Eyebrow / Kicker</strong>WiredMono · 13px / 1.23 / 0.92px / UPPER</div>
821
+ <div class="type-sample" style="font-family: var(--font-mono); font-size: 13px; line-height: 1.23; letter-spacing: 0.92px; text-transform: uppercase;">Backchannel · The Story Behind The Story</div>
822
+ </div>
823
+ <div class="type-row">
824
+ <div class="type-meta"><strong>Section Ribbon</strong>WiredMono · 12px / 700 / 1.00 / 1.2px / UPPER</div>
825
+ <div class="type-sample" style="font-family: var(--font-mono); font-size: 12px; font-weight: 700; line-height: 1; letter-spacing: 1.2px; text-transform: uppercase; background: var(--wired-black); color: var(--paper-white); padding: 10px 16px; display: inline-block;">Most Popular</div>
826
+ </div>
827
+ <div class="type-row">
828
+ <div class="type-meta"><strong>Photo Caption</strong>BreveText · 12.73px / 700 / 2.20 / 0.108px</div>
829
+ <div class="type-sample" style="font-family: var(--font-serif); font-size: 12.73px; font-weight: 700; line-height: 2.20; letter-spacing: 0.108px;">Photograph by The Editorial Team / WIRED Archives</div>
830
+ </div>
831
+ <div class="type-row">
832
+ <div class="type-meta"><strong>Timestamp</strong>WiredMono · 12px / 1.33 / 1.1px / UPPER</div>
833
+ <div class="type-sample" style="font-family: var(--font-mono); font-size: 12px; line-height: 1.33; letter-spacing: 1.1px; text-transform: uppercase;">3 hours ago</div>
834
+ </div>
835
+ <div class="type-row">
836
+ <div class="type-meta"><strong>Footer Tertiary</strong>ProximaNova · 11px / 1.45</div>
837
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 11px; line-height: 1.45;">Privacy Policy · Terms of Service · Ad Choices · Press</div>
838
+ </div>
839
+ </section>
840
+
841
+ <!-- 3. BUTTONS -->
842
+ <section class="preview-section" id="components">
843
+ <span class="section-ribbon">Section 03 / Buttons</span>
844
+ <h2 class="section-title">Button Variants</h2>
845
+ <p class="section-subtitle">2px hard borders, square corners, instant hover inversion. Pills and circles only for non-rectangular roles.</p>
846
+ <div class="button-grid">
847
+ <div class="button-cell">
848
+ <span class="label">Primary — Outline</span>
849
+ <button class="btn-primary">Subscribe</button>
850
+ </div>
851
+ <div class="button-cell">
852
+ <span class="label">Secondary — Inverted</span>
853
+ <button class="btn-secondary">Sign In</button>
854
+ </div>
855
+ <div class="button-cell">
856
+ <span class="label">Ghost — Underlined</span>
857
+ <button class="btn-ghost">Read More</button>
858
+ </div>
859
+ <div class="button-cell">
860
+ <span class="label">Icon — Round 50%</span>
861
+ <button class="btn-icon">Q</button>
862
+ </div>
863
+ <div class="button-cell">
864
+ <span class="label">Pill — Inline Tag</span>
865
+ <span class="btn-pill">Breaking</span>
866
+ </div>
867
+ <div class="button-cell">
868
+ <span class="label">Hover — Inversion (illustrated)</span>
869
+ <button class="btn-secondary">Hover Active</button>
870
+ </div>
871
+ </div>
872
+ </section>
873
+
874
+ <!-- 4. EDITORIAL TILES -->
875
+ <section class="preview-section">
876
+ <span class="section-ribbon">Section 04 / Editorial Tiles</span>
877
+ <h2 class="section-title">Story Tiles & Containers</h2>
878
+ <p class="section-subtitle">There are no cards. There are story tiles separated by hairline rules and whitespace. No shadows, no rounded corners.</p>
879
+ <div class="editorial-grid">
880
+ <div class="story-tile">
881
+ <div class="story-image"></div>
882
+ <span class="story-kicker">Backchannel</span>
883
+ <h3 class="story-headline">The Strange Future Of Editorial Layout In A Generative Era</h3>
884
+ <p class="story-deck">A long-form deck describing how legacy magazine grids are being remade — and remembered — by a new wave of AI-driven publishing tools.</p>
885
+ <span class="story-meta">12 min read · Today</span>
886
+ </div>
887
+ <div class="story-tile small">
888
+ <div class="story-image"></div>
889
+ <span class="story-kicker">Gear</span>
890
+ <h3 class="story-headline">A New Mechanical Keyboard That Quiets The Office</h3>
891
+ <span class="story-meta">5 hours ago</span>
892
+ </div>
893
+ <div class="story-tile small">
894
+ <div class="story-image"></div>
895
+ <span class="story-kicker">Science</span>
896
+ <h3 class="story-headline">Inside The Lab Building A Synthetic Atmosphere</h3>
897
+ <span class="story-meta">Yesterday</span>
898
+ </div>
899
+ </div>
900
+ </section>
901
+
902
+ <!-- 5. MOST POPULAR (numbered list) -->
903
+ <section class="preview-section">
904
+ <span class="section-ribbon">Section 05 / Most Popular</span>
905
+ <h2 class="section-title">Numbered Editorial List</h2>
906
+ <p class="section-subtitle">WiredDisplay numerals at 48px, hairline rules between every item, no other decoration.</p>
907
+ <div class="most-popular-list">
908
+ <div class="most-popular-item">
909
+ <div class="mp-number">01</div>
910
+ <div class="mp-content">
911
+ <span class="story-kicker">Tech</span>
912
+ <h4 class="mp-headline">A Self-Driving Truck Quietly Reshaped American Logistics</h4>
913
+ </div>
914
+ </div>
915
+ <div class="most-popular-item">
916
+ <div class="mp-number">02</div>
917
+ <div class="mp-content">
918
+ <span class="story-kicker">Culture</span>
919
+ <h4 class="mp-headline">The Rise And Fall Of A Crypto Fashion Empire</h4>
920
+ </div>
921
+ </div>
922
+ <div class="most-popular-item">
923
+ <div class="mp-number">03</div>
924
+ <div class="mp-content">
925
+ <span class="story-kicker">Business</span>
926
+ <h4 class="mp-headline">Why Every Newsroom Is Shipping Its Own Model</h4>
927
+ </div>
928
+ </div>
929
+ <div class="most-popular-item">
930
+ <div class="mp-number">04</div>
931
+ <div class="mp-content">
932
+ <span class="story-kicker">Science</span>
933
+ <h4 class="mp-headline">The Quiet Engineering Win Behind The Last Fusion Headline</h4>
934
+ </div>
935
+ </div>
936
+ <div class="most-popular-item">
937
+ <div class="mp-number">05</div>
938
+ <div class="mp-content">
939
+ <span class="story-kicker">Security</span>
940
+ <h4 class="mp-headline">A Single Browser Bug, A Six-Year Investigation</h4>
941
+ </div>
942
+ </div>
943
+ </div>
944
+ </section>
945
+
946
+ <!-- 6. FORMS -->
947
+ <section class="preview-section">
948
+ <span class="section-ribbon">Section 06 / Forms</span>
949
+ <h2 class="section-title">Inputs & Newsletter</h2>
950
+ <p class="section-subtitle">2px solid black border, square corners, no glow ring. Caret only on focus — printerly restraint.</p>
951
+ <div class="form-stack">
952
+ <div class="form-field">
953
+ <label class="form-label">Email Address — Default</label>
954
+ <input class="form-input" type="email" placeholder="reader@example.com">
955
+ </div>
956
+ <div class="form-field">
957
+ <label class="form-label">Email Address — Focus</label>
958
+ <input class="form-input focus" type="email" placeholder="reader@example.com">
959
+ </div>
960
+ <div class="form-field">
961
+ <label class="form-label">Email Address — Error</label>
962
+ <input class="form-input error" type="email" value="not-an-email">
963
+ <span class="form-error">Please enter a valid address</span>
964
+ </div>
965
+ <div class="form-field">
966
+ <label class="form-label">Comment — Textarea</label>
967
+ <textarea class="form-input form-textarea" placeholder="Share your thoughts on the story..."></textarea>
968
+ </div>
969
+ </div>
970
+ </section>
971
+
972
+ <!-- 7. SPACING -->
973
+ <section class="preview-section" id="layout">
974
+ <span class="section-ribbon">Section 07 / Spacing</span>
975
+ <h2 class="section-title">Spacing Scale (8px System)</h2>
976
+ <p class="section-subtitle">From hairlines to full editorial breaks — every gap is a multiple of 8 (with one or two micro-exceptions).</p>
977
+ <div class="spacing-row">
978
+ <div class="spacing-item"><div class="spacing-block" style="width: 1px;"></div><span class="spacing-label">1px · hairline</span></div>
979
+ <div class="spacing-item"><div class="spacing-block" style="width: 4px;"></div><span class="spacing-label">4px</span></div>
980
+ <div class="spacing-item"><div class="spacing-block" style="width: 8px;"></div><span class="spacing-label">8px · base</span></div>
981
+ <div class="spacing-item"><div class="spacing-block" style="width: 12px;"></div><span class="spacing-label">12px</span></div>
982
+ <div class="spacing-item"><div class="spacing-block" style="width: 16px;"></div><span class="spacing-label">16px</span></div>
983
+ <div class="spacing-item"><div class="spacing-block" style="width: 24px;"></div><span class="spacing-label">24px</span></div>
984
+ <div class="spacing-item"><div class="spacing-block" style="width: 32px;"></div><span class="spacing-label">32px</span></div>
985
+ <div class="spacing-item"><div class="spacing-block" style="width: 40px;"></div><span class="spacing-label">40px</span></div>
986
+ <div class="spacing-item"><div class="spacing-block" style="width: 48px;"></div><span class="spacing-label">48px</span></div>
987
+ <div class="spacing-item"><div class="spacing-block" style="width: 64px;"></div><span class="spacing-label">64px</span></div>
988
+ </div>
989
+ </section>
990
+
991
+ <!-- 8. RADIUS -->
992
+ <section class="preview-section">
993
+ <span class="section-ribbon">Section 08 / Radius</span>
994
+ <h2 class="section-title">Border Radius Scale</h2>
995
+ <p class="section-subtitle">Three values total. Two of them are reserved for shapes that aren't rectangles.</p>
996
+ <div class="radius-row">
997
+ <div class="radius-item">
998
+ <div class="radius-block"></div>
999
+ <span class="radius-label">0 · Square<small>Default — every container, image, button</small></span>
1000
+ </div>
1001
+ <div class="radius-item">
1002
+ <div class="radius-block r-pill"></div>
1003
+ <span class="radius-label">1920px · Pill<small>Inline text spans only</small></span>
1004
+ </div>
1005
+ <div class="radius-item">
1006
+ <div class="radius-block r-circle"></div>
1007
+ <span class="radius-label">50% · Circle<small>Icon buttons & avatars</small></span>
1008
+ </div>
1009
+ </div>
1010
+ </section>
1011
+
1012
+ <!-- 9. ELEVATION -->
1013
+ <section class="preview-section">
1014
+ <span class="section-ribbon">Section 09 / Elevation</span>
1015
+ <h2 class="section-title">Depth & Elevation</h2>
1016
+ <p class="section-subtitle">Flat by religion. Depth comes from rule weight, not from simulated lighting.</p>
1017
+ <div class="elevation-grid">
1018
+ <div class="elevation-cell lvl-0">
1019
+ <span class="label">Level 0</span>
1020
+ <div class="desc">No shadow, no border — text on paper</div>
1021
+ </div>
1022
+ <div class="elevation-cell lvl-1">
1023
+ <span class="label">Level 1</span>
1024
+ <div class="desc">1px hairline tint &lt;hr&gt; — quiet divider</div>
1025
+ </div>
1026
+ <div class="elevation-cell lvl-2">
1027
+ <span class="label">Level 2</span>
1028
+ <div class="desc">1px solid black hairline rule — printerly column divider</div>
1029
+ </div>
1030
+ <div class="elevation-cell lvl-3">
1031
+ <span class="label">Level 3</span>
1032
+ <div class="demo-box">2px Border</div>
1033
+ <div class="desc">2px solid black border — interactive emphasis</div>
1034
+ </div>
1035
+ <div class="elevation-cell lvl-4">
1036
+ <span class="label">Level 4</span>
1037
+ <div class="desc">Black ribbon fill — section labels</div>
1038
+ </div>
1039
+ <div class="elevation-cell lvl-5">
1040
+ <span class="label">Level 5</span>
1041
+ <div class="desc">Inverted #1a1a1a footer block — the only dark zone</div>
1042
+ </div>
1043
+ </div>
1044
+ </section>
1045
+
1046
+ <footer class="footer">Maintained by <a href="https://github.com/VoltAgent/voltagent" target="_blank" rel="noopener noreferrer" style="text-decoration:none;"><img src="https://github.com/VoltAgent.png?size=32" alt="VoltAgent" width="14" height="14" style="border-radius:3px;vertical-align:-2px;margin-right:3px;">VoltAgent</a> team</footer>
1047
+
1048
+ </body>
1049
+ </html>