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,1143 @@
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 The Verge</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=Anton&family=Space+Grotesk:wght@300;400;500;700&family=Space+Mono:wght@400;700&family=Newsreader:ital,wght@0,400;0,500;1,400&display=swap" rel="stylesheet">
10
+ <style>
11
+ :root {
12
+ --canvas: #ffffff;
13
+ --canvas-inverted: #131313;
14
+ --surface-slate: #f2f2f2;
15
+ --surface-slate-2: #e6e6e6;
16
+ --image-frame: #d4d4d4;
17
+ --hazard-white: #ffffff;
18
+ --absolute-black: #000000;
19
+
20
+ --jelly-mint: #3cffd0;
21
+ --verge-ultraviolet: #5200ff;
22
+ --console-mint-border: #309875;
23
+ --deep-link-blue: #3860be;
24
+ --focus-cyan: #1eaedb;
25
+ --purple-rule: #3d00bf;
26
+ --dim-gray: #8c8c8c;
27
+
28
+ --primary-text: #131313;
29
+ --secondary-text: #6a6a6a;
30
+ --muted-text: #8c8c8c;
31
+ --inverted-text: #ffffff;
32
+
33
+ --font-display: 'Anton', Impact, Helvetica, sans-serif;
34
+ --font-sans: 'Space Grotesk', Helvetica, Arial, sans-serif;
35
+ --font-mono: 'Space Mono', 'Courier New', Courier, monospace;
36
+ --font-serif: 'Newsreader', Georgia, serif;
37
+ }
38
+ * { margin: 0; padding: 0; box-sizing: border-box; }
39
+ html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
40
+ body {
41
+ background: var(--canvas);
42
+ color: var(--primary-text);
43
+ font-family: var(--font-sans);
44
+ font-size: 16px;
45
+ font-weight: 500;
46
+ line-height: 1.60;
47
+ }
48
+ a { color: inherit; text-decoration: none; transition: color 150ms ease; }
49
+ a:hover { color: var(--deep-link-blue); }
50
+ button { font-family: inherit; cursor: pointer; border: none; background: none; }
51
+
52
+ /* NAV */
53
+ .nav {
54
+ position: sticky; top: 0; z-index: 100;
55
+ padding: 14px 32px;
56
+ background: var(--canvas);
57
+ border-bottom: 1px solid rgba(19, 19, 19, 0.1);
58
+ }
59
+ .nav-brand {
60
+ font-family: var(--font-display);
61
+ font-size: 30px;
62
+ font-weight: 400;
63
+ color: var(--primary-text);
64
+ letter-spacing: 0.5px;
65
+ text-transform: uppercase;
66
+ line-height: 1;
67
+ }
68
+ .nav-links {
69
+ display: flex; gap: 26px; list-style: none; align-items: center;
70
+ }
71
+ .nav-links a {
72
+ font-family: var(--font-mono);
73
+ font-size: 11px;
74
+ font-weight: 700;
75
+ color: var(--primary-text);
76
+ text-transform: uppercase;
77
+ letter-spacing: 1.1px;
78
+ }
79
+ .nav-cta {
80
+ display: inline-block;
81
+ background: var(--jelly-mint);
82
+ color: var(--absolute-black);
83
+ padding: 10px 22px;
84
+ border: none;
85
+ border-radius: 24px;
86
+ font-family: var(--font-mono);
87
+ font-size: 12px;
88
+ font-weight: 700;
89
+ letter-spacing: 1.5px;
90
+ text-transform: uppercase;
91
+ transition: background 180ms ease, box-shadow 180ms ease;
92
+ }
93
+ .nav-cta:hover { background: rgba(60, 255, 208, 0.3); box-shadow: 0 0 0 1px var(--console-mint-border); }
94
+
95
+ /* HERO */
96
+ .hero {
97
+ padding: 72px 48px 64px;
98
+ background: var(--canvas);
99
+ position: relative;
100
+ overflow: hidden;
101
+ }
102
+ .hero-kicker {
103
+ font-family: var(--font-sans);
104
+ font-size: 19px;
105
+ font-weight: 300;
106
+ line-height: 1.20;
107
+ letter-spacing: 1.9px;
108
+ color: var(--primary-text);
109
+ text-transform: capitalize;
110
+ margin-bottom: 24px;
111
+ display: block;
112
+ }
113
+ .hero h1 {
114
+ font-family: var(--font-display);
115
+ font-size: 104px;
116
+ font-weight: 400;
117
+ line-height: 0.95;
118
+ letter-spacing: 1px;
119
+ color: var(--primary-text);
120
+ margin-bottom: 28px;
121
+ text-transform: uppercase;
122
+ max-width: 1200px;
123
+ }
124
+ .hero p {
125
+ font-family: var(--font-sans);
126
+ font-size: 16px;
127
+ font-weight: 500;
128
+ line-height: 1.60;
129
+ color: var(--secondary-text);
130
+ max-width: 620px;
131
+ margin-bottom: 36px;
132
+ }
133
+ .hero-buttons { display: flex; gap: 14px; flex-wrap: wrap; }
134
+
135
+ /* BUTTONS */
136
+ .btn-primary {
137
+ display: inline-block;
138
+ background: var(--jelly-mint);
139
+ color: var(--absolute-black);
140
+ padding: 12px 28px;
141
+ border: none;
142
+ border-radius: 24px;
143
+ font-family: var(--font-mono);
144
+ font-size: 13px;
145
+ font-weight: 700;
146
+ letter-spacing: 1.5px;
147
+ text-transform: uppercase;
148
+ transition: background 180ms ease, box-shadow 180ms ease;
149
+ }
150
+ .btn-primary:hover {
151
+ background: rgba(60, 255, 208, 0.3);
152
+ box-shadow: 0 0 0 1px var(--console-mint-border);
153
+ color: var(--absolute-black);
154
+ }
155
+ .btn-secondary {
156
+ display: inline-block;
157
+ background: var(--primary-text);
158
+ color: var(--hazard-white);
159
+ padding: 12px 28px;
160
+ border: none;
161
+ border-radius: 24px;
162
+ font-family: var(--font-mono);
163
+ font-size: 13px;
164
+ font-weight: 700;
165
+ letter-spacing: 1.5px;
166
+ text-transform: uppercase;
167
+ transition: background 180ms ease, box-shadow 180ms ease;
168
+ }
169
+ .btn-secondary:hover {
170
+ background: rgba(19, 19, 19, 0.2);
171
+ color: var(--primary-text);
172
+ box-shadow: 0 0 0 1px var(--dim-gray);
173
+ }
174
+ .btn-outline-mint {
175
+ display: inline-block;
176
+ background: transparent;
177
+ color: var(--console-mint-border);
178
+ padding: 12px 24px;
179
+ border: 1px solid var(--console-mint-border);
180
+ border-radius: 40px;
181
+ font-family: var(--font-mono);
182
+ font-size: 12px;
183
+ font-weight: 700;
184
+ letter-spacing: 1.5px;
185
+ text-transform: uppercase;
186
+ transition: background 180ms ease, color 180ms ease;
187
+ }
188
+ .btn-outline-mint:hover { background: var(--jelly-mint); color: var(--absolute-black); border-color: var(--jelly-mint); }
189
+ .btn-outline-uv {
190
+ display: inline-block;
191
+ background: transparent;
192
+ color: var(--verge-ultraviolet);
193
+ padding: 12px 24px;
194
+ border: 1px solid var(--verge-ultraviolet);
195
+ border-radius: 30px;
196
+ font-family: var(--font-mono);
197
+ font-size: 12px;
198
+ font-weight: 700;
199
+ letter-spacing: 1.5px;
200
+ text-transform: uppercase;
201
+ transition: background 180ms ease, color 180ms ease;
202
+ }
203
+ .btn-outline-uv:hover { background: var(--verge-ultraviolet); color: var(--hazard-white); }
204
+ .btn-icon {
205
+ display: inline-flex;
206
+ align-items: center;
207
+ justify-content: center;
208
+ width: 44px;
209
+ height: 44px;
210
+ background: var(--primary-text);
211
+ color: var(--hazard-white);
212
+ border: 1px solid var(--primary-text);
213
+ border-radius: 50%;
214
+ font-family: var(--font-mono);
215
+ font-size: 12px;
216
+ font-weight: 700;
217
+ transition: background 180ms ease, color 180ms ease;
218
+ }
219
+ .btn-icon:hover { background: var(--jelly-mint); color: var(--absolute-black); border-color: var(--jelly-mint); }
220
+ .btn-tag {
221
+ display: inline-block;
222
+ background: var(--jelly-mint);
223
+ color: var(--absolute-black);
224
+ padding: 6px 14px;
225
+ border: none;
226
+ border-radius: 20px;
227
+ font-family: var(--font-mono);
228
+ font-size: 11px;
229
+ font-weight: 700;
230
+ letter-spacing: 1.8px;
231
+ text-transform: uppercase;
232
+ }
233
+
234
+ /* SECTION FRAME */
235
+ section.preview-section {
236
+ padding: 72px 48px;
237
+ background: var(--canvas);
238
+ border-top: 1px solid rgba(19, 19, 19, 0.1);
239
+ }
240
+ .section-ribbon {
241
+ display: inline-block;
242
+ background: var(--primary-text);
243
+ color: var(--jelly-mint);
244
+ padding: 10px 20px;
245
+ font-family: var(--font-mono);
246
+ font-size: 12px;
247
+ font-weight: 700;
248
+ text-transform: uppercase;
249
+ letter-spacing: 1.5px;
250
+ border-radius: 20px;
251
+ margin-bottom: 28px;
252
+ }
253
+ .section-title {
254
+ font-family: var(--font-display);
255
+ font-size: 72px;
256
+ font-weight: 400;
257
+ line-height: 0.85;
258
+ letter-spacing: 0.5px;
259
+ color: var(--primary-text);
260
+ text-transform: uppercase;
261
+ margin-bottom: 16px;
262
+ }
263
+ .section-subtitle {
264
+ font-family: var(--font-sans);
265
+ font-size: 18px;
266
+ font-weight: 300;
267
+ line-height: 1.40;
268
+ letter-spacing: 1.8px;
269
+ color: var(--secondary-text);
270
+ text-transform: uppercase;
271
+ margin-bottom: 48px;
272
+ max-width: 760px;
273
+ }
274
+
275
+ /* COLOR PALETTE */
276
+ .color-group { margin-bottom: 36px; }
277
+ .color-group-label {
278
+ font-family: var(--font-mono);
279
+ font-size: 11px;
280
+ font-weight: 700;
281
+ text-transform: uppercase;
282
+ letter-spacing: 1.8px;
283
+ color: var(--primary-text);
284
+ padding-bottom: 14px;
285
+ margin-bottom: 20px;
286
+ border-bottom: 1px solid rgba(19, 19, 19, 0.15);
287
+ }
288
+ .color-grid {
289
+ display: grid;
290
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
291
+ gap: 20px;
292
+ }
293
+ .color-swatch {
294
+ background: var(--surface-slate);
295
+ border-radius: 20px;
296
+ padding: 0;
297
+ overflow: hidden;
298
+ border: 1px solid rgba(19, 19, 19, 0.08);
299
+ }
300
+ .color-block {
301
+ height: 140px;
302
+ border-bottom: 1px solid rgba(19, 19, 19, 0.05);
303
+ }
304
+ .color-meta { padding: 20px 22px 22px; }
305
+ .color-name {
306
+ font-family: var(--font-sans);
307
+ font-size: 20px;
308
+ font-weight: 700;
309
+ line-height: 1;
310
+ color: var(--primary-text);
311
+ margin-bottom: 8px;
312
+ }
313
+ .color-hex {
314
+ font-family: var(--font-mono);
315
+ font-size: 11px;
316
+ font-weight: 700;
317
+ text-transform: uppercase;
318
+ letter-spacing: 1.1px;
319
+ color: var(--muted-text);
320
+ margin-bottom: 10px;
321
+ }
322
+ .color-role {
323
+ font-family: var(--font-sans);
324
+ font-size: 13px;
325
+ font-weight: 500;
326
+ line-height: 1.50;
327
+ color: var(--secondary-text);
328
+ }
329
+
330
+ /* TYPOGRAPHY */
331
+ .type-row {
332
+ display: grid;
333
+ grid-template-columns: 260px 1fr;
334
+ gap: 40px;
335
+ padding: 32px 0;
336
+ border-bottom: 1px solid rgba(19, 19, 19, 0.08);
337
+ align-items: baseline;
338
+ }
339
+ .type-row:last-child { border-bottom: none; }
340
+ .type-meta {
341
+ font-family: var(--font-mono);
342
+ font-size: 11px;
343
+ font-weight: 400;
344
+ text-transform: uppercase;
345
+ letter-spacing: 1.1px;
346
+ color: var(--muted-text);
347
+ line-height: 1.7;
348
+ }
349
+ .type-meta strong {
350
+ display: block;
351
+ color: var(--primary-text);
352
+ font-weight: 700;
353
+ margin-bottom: 6px;
354
+ font-size: 12px;
355
+ }
356
+ .type-sample { color: var(--primary-text); }
357
+
358
+ /* BUTTONS GRID */
359
+ .button-grid {
360
+ display: grid;
361
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
362
+ gap: 20px;
363
+ }
364
+ .button-cell {
365
+ padding: 40px 32px;
366
+ border: 1px solid rgba(19, 19, 19, 0.08);
367
+ border-radius: 24px;
368
+ background: var(--canvas);
369
+ display: flex;
370
+ flex-direction: column;
371
+ gap: 22px;
372
+ }
373
+ .button-cell .label {
374
+ font-family: var(--font-mono);
375
+ font-size: 11px;
376
+ font-weight: 700;
377
+ text-transform: uppercase;
378
+ letter-spacing: 1.1px;
379
+ color: var(--muted-text);
380
+ }
381
+
382
+ /* STORYSTREAM TILES */
383
+ .storystream-grid {
384
+ display: grid;
385
+ grid-template-columns: 2fr 1fr;
386
+ gap: 24px;
387
+ }
388
+ .story-tile {
389
+ padding: 32px;
390
+ border-radius: 24px;
391
+ border: 1px solid rgba(19, 19, 19, 0.12);
392
+ background: var(--canvas);
393
+ display: flex;
394
+ flex-direction: column;
395
+ gap: 16px;
396
+ transition: transform 180ms ease;
397
+ }
398
+ .story-tile.mint { background: var(--jelly-mint); color: var(--absolute-black); border-color: var(--console-mint-border); }
399
+ .story-tile.uv { background: var(--verge-ultraviolet); color: var(--hazard-white); border-color: var(--verge-ultraviolet); }
400
+ .story-tile.dark { background: var(--primary-text); color: var(--hazard-white); border-color: var(--primary-text); }
401
+ .story-tile.yellow { background: #f5ff3c; color: var(--absolute-black); border-color: #c2cc30; }
402
+ .story-kicker {
403
+ font-family: var(--font-mono);
404
+ font-size: 11px;
405
+ font-weight: 700;
406
+ text-transform: uppercase;
407
+ letter-spacing: 1.8px;
408
+ color: inherit;
409
+ display: block;
410
+ }
411
+ .story-headline {
412
+ font-family: var(--font-sans);
413
+ font-size: 32px;
414
+ font-weight: 700;
415
+ line-height: 1.0;
416
+ letter-spacing: -0.3px;
417
+ color: inherit;
418
+ }
419
+ .story-tile.compact .story-headline { font-size: 24px; }
420
+ .story-deck {
421
+ font-family: var(--font-sans);
422
+ font-size: 15px;
423
+ font-weight: 400;
424
+ line-height: 1.50;
425
+ color: inherit;
426
+ opacity: 0.8;
427
+ }
428
+ .story-meta {
429
+ font-family: var(--font-mono);
430
+ font-size: 10px;
431
+ font-weight: 500;
432
+ text-transform: uppercase;
433
+ letter-spacing: 1.5px;
434
+ color: inherit;
435
+ opacity: 0.7;
436
+ }
437
+
438
+ /* TIMELINE */
439
+ .timeline-list {
440
+ display: flex;
441
+ flex-direction: column;
442
+ gap: 14px;
443
+ border-left: 1px dashed var(--purple-rule);
444
+ padding-left: 32px;
445
+ margin-left: 8px;
446
+ }
447
+ .timeline-item {
448
+ display: grid;
449
+ grid-template-columns: 120px 1fr;
450
+ gap: 20px;
451
+ align-items: flex-start;
452
+ }
453
+ .timeline-time {
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(--muted-text);
460
+ padding-top: 4px;
461
+ }
462
+ .timeline-body {
463
+ padding: 20px 24px;
464
+ border-radius: 20px;
465
+ background: var(--surface-slate);
466
+ border: 1px solid rgba(19, 19, 19, 0.08);
467
+ }
468
+ .timeline-body.highlight {
469
+ background: var(--jelly-mint);
470
+ border-color: var(--console-mint-border);
471
+ }
472
+ .timeline-body .story-kicker { margin-bottom: 6px; color: var(--primary-text); }
473
+ .timeline-body.highlight .story-kicker { color: var(--absolute-black); }
474
+ .timeline-body h4 {
475
+ font-family: var(--font-sans);
476
+ font-size: 20px;
477
+ font-weight: 700;
478
+ line-height: 1.1;
479
+ color: var(--primary-text);
480
+ }
481
+ .timeline-body.highlight h4 { color: var(--absolute-black); }
482
+
483
+ /* FORMS */
484
+ .form-stack {
485
+ display: grid;
486
+ grid-template-columns: 1fr 1fr;
487
+ gap: 28px;
488
+ max-width: 880px;
489
+ }
490
+ .form-field { display: flex; flex-direction: column; gap: 10px; }
491
+ .form-label {
492
+ font-family: var(--font-mono);
493
+ font-size: 11px;
494
+ font-weight: 700;
495
+ text-transform: uppercase;
496
+ letter-spacing: 1.1px;
497
+ color: var(--primary-text);
498
+ }
499
+ .form-input {
500
+ background: var(--surface-slate);
501
+ border: 1px solid rgba(19, 19, 19, 0.15);
502
+ border-radius: 2px;
503
+ padding: 14px 16px;
504
+ font-family: var(--font-sans);
505
+ font-size: 15px;
506
+ font-weight: 500;
507
+ color: var(--primary-text);
508
+ outline: none;
509
+ transition: border-color 150ms ease;
510
+ }
511
+ .form-input::placeholder { color: var(--muted-text); }
512
+ .form-input.focus { border-color: var(--jelly-mint); box-shadow: inset 0 0 0 1px var(--verge-ultraviolet); }
513
+ .form-input.error { border-color: var(--verge-ultraviolet); color: var(--verge-ultraviolet); }
514
+ .form-error {
515
+ font-family: var(--font-mono);
516
+ font-size: 11px;
517
+ font-weight: 700;
518
+ text-transform: uppercase;
519
+ letter-spacing: 1.1px;
520
+ color: var(--verge-ultraviolet);
521
+ }
522
+ .form-textarea {
523
+ min-height: 120px;
524
+ resize: vertical;
525
+ line-height: 1.5;
526
+ }
527
+
528
+ /* SPACING */
529
+ .spacing-row {
530
+ display: flex;
531
+ align-items: flex-end;
532
+ gap: 20px;
533
+ flex-wrap: wrap;
534
+ }
535
+ .spacing-item { display: flex; flex-direction: column; gap: 12px; align-items: flex-start; }
536
+ .spacing-block {
537
+ background: var(--primary-text);
538
+ height: 72px;
539
+ border-radius: 2px;
540
+ }
541
+ .spacing-label {
542
+ font-family: var(--font-mono);
543
+ font-size: 10px;
544
+ font-weight: 700;
545
+ text-transform: uppercase;
546
+ letter-spacing: 1.5px;
547
+ color: var(--primary-text);
548
+ }
549
+
550
+ /* RADIUS */
551
+ .radius-row {
552
+ display: flex;
553
+ gap: 28px;
554
+ flex-wrap: wrap;
555
+ align-items: flex-end;
556
+ }
557
+ .radius-item { display: flex; flex-direction: column; gap: 14px; align-items: center; }
558
+ .radius-block {
559
+ width: 110px;
560
+ height: 110px;
561
+ background: var(--primary-text);
562
+ border: 1px solid var(--jelly-mint);
563
+ }
564
+ .radius-block.r2 { border-radius: 2px; }
565
+ .radius-block.r3 { border-radius: 3px; }
566
+ .radius-block.r4 { border-radius: 4px; }
567
+ .radius-block.r20 { border-radius: 20px; }
568
+ .radius-block.r24 { border-radius: 24px; }
569
+ .radius-block.r30 { border-radius: 30px; }
570
+ .radius-block.r40 { border-radius: 40px; width: 150px; height: 50px; }
571
+ .radius-block.r50 { border-radius: 50%; }
572
+ .radius-label {
573
+ font-family: var(--font-mono);
574
+ font-size: 10px;
575
+ font-weight: 700;
576
+ text-transform: uppercase;
577
+ letter-spacing: 1.1px;
578
+ color: var(--primary-text);
579
+ text-align: center;
580
+ }
581
+ .radius-label small { display: block; color: var(--muted-text); margin-top: 4px; font-weight: 400; font-size: 9px; }
582
+
583
+ /* ELEVATION */
584
+ .elevation-grid {
585
+ display: grid;
586
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
587
+ gap: 20px;
588
+ }
589
+ .elevation-cell {
590
+ padding: 40px 24px;
591
+ border-radius: 24px;
592
+ background: var(--canvas);
593
+ text-align: center;
594
+ min-height: 180px;
595
+ display: flex;
596
+ flex-direction: column;
597
+ justify-content: center;
598
+ align-items: center;
599
+ gap: 14px;
600
+ border: 1px solid rgba(19, 19, 19, 0.08);
601
+ }
602
+ .elevation-cell.lvl-2 { border: 1px solid var(--image-frame); }
603
+ .elevation-cell.lvl-3 { border: 1px solid var(--console-mint-border); }
604
+ .elevation-cell.lvl-4 { border: 1px solid var(--verge-ultraviolet); }
605
+ .elevation-cell.lvl-5 { box-shadow: 0 0 0 1px rgba(19, 19, 19, 0.33); }
606
+ .elevation-cell.lvl-6 { background: var(--surface-slate); box-shadow: inset 0 -2px 0 0 var(--jelly-mint); }
607
+ .elevation-cell.lvl-7 { background: var(--jelly-mint); border-color: var(--console-mint-border); color: var(--absolute-black); }
608
+ .elevation-cell .label {
609
+ font-family: var(--font-mono);
610
+ font-size: 11px;
611
+ font-weight: 700;
612
+ text-transform: uppercase;
613
+ letter-spacing: 1.5px;
614
+ color: inherit;
615
+ }
616
+ .elevation-cell .desc {
617
+ font-family: var(--font-sans);
618
+ font-size: 13px;
619
+ line-height: 1.4;
620
+ color: inherit;
621
+ opacity: 0.8;
622
+ }
623
+
624
+ /* FOOTER */
625
+ .footer {
626
+ background: var(--primary-text);
627
+ color: var(--hazard-white);
628
+ padding: 40px 48px;
629
+ font-family: var(--font-mono);
630
+ font-size: 11px;
631
+ font-weight: 500;
632
+ text-transform: uppercase;
633
+ letter-spacing: 1.5px;
634
+ text-align: center;
635
+ }
636
+ .footer a { color: var(--jelly-mint); }
637
+
638
+ /* RESPONSIVE */
639
+ @media (max-width: 900px) {
640
+ .hero { padding: 56px 24px 48px; }
641
+ .hero h1 { font-size: 64px; letter-spacing: 0.5px; }
642
+ .section-title { font-size: 48px; }
643
+ section.preview-section { padding: 56px 24px; }
644
+ .storystream-grid { grid-template-columns: 1fr; }
645
+ .form-stack { grid-template-columns: 1fr; }
646
+ .type-row { grid-template-columns: 1fr; gap: 16px; }
647
+ .nav { padding: 12px 20px; }
648
+ .nav-links { display: none; }
649
+ .timeline-item { grid-template-columns: 1fr; }
650
+ }
651
+
652
+ /* getdesign.md nav additions */
653
+ .nav-left { display: flex; align-items: center; gap: 20px; }
654
+ .nav-brand-link,
655
+ .nav-brand-link:link,
656
+ .nav-brand-link:visited,
657
+ .nav-brand-link:hover,
658
+ .nav-brand-link:active { text-decoration: none; color: inherit; }
659
+ .nav-github,
660
+ .nav-github:link,
661
+ .nav-github:visited,
662
+ .nav-github:hover,
663
+ .nav-github:active {
664
+ display: inline-flex;
665
+ align-items: center;
666
+ gap: 6px;
667
+ font-size: 12px;
668
+ font-weight: 600;
669
+ color: inherit;
670
+ text-decoration: none;
671
+ padding: 5px 10px;
672
+ border: 1px solid rgba(128, 128, 128, 0.3);
673
+ border-radius: 6px;
674
+ opacity: 0.75;
675
+ transition: opacity 200ms ease, border-color 200ms ease;
676
+ font-family: inherit;
677
+ line-height: 1;
678
+ white-space: nowrap;
679
+ }
680
+ .nav-github:hover { opacity: 1; border-color: rgba(128, 128, 128, 0.55); }
681
+ .nav-github svg { display: block; flex-shrink: 0; }
682
+
683
+ /* getdesign.md nav centering */
684
+ .nav { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; }
685
+ .nav > .nav-left { justify-self: start; }
686
+ .nav > .nav-links { justify-self: center; }
687
+ .nav > :last-child { justify-self: end; }
688
+ </style>
689
+ </head>
690
+ <body>
691
+
692
+ <nav class="nav">
693
+ <div class="nav-left">
694
+ <a href="https://getdesign.md/" target="_blank" rel="noopener noreferrer" class="nav-brand-link">
695
+ <span class="nav-brand">getdesign.md</span>
696
+ </a>
697
+ <a class="nav-github" href="https://github.com/VoltAgent/awesome-design-md" target="_blank" rel="noopener noreferrer" aria-label="awesome-design-md on GitHub">
698
+ <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>
699
+ awesome-design-md
700
+ </a>
701
+ </div>
702
+
703
+ <ul class="nav-links">
704
+ <li><a href="#palette">Palette</a></li>
705
+ <li><a href="#typography">Type</a></li>
706
+ <li><a href="#components">Components</a></li>
707
+ <li><a href="#layout">Layout</a></li>
708
+ </ul>
709
+
710
+ <button class="nav-cta">Subscribe</button>
711
+ </nav>
712
+
713
+ <section class="hero">
714
+ <span class="hero-kicker">Design System / Editorial Hazard</span>
715
+ <h1>Design System Inspiration of The Verge</h1>
716
+ <p>Hazard-tape editorial. Massive Manuka headlines, acid-mint + ultraviolet accents, and a StoryStream timeline that feels like a git log for the news. Generated from DESIGN.md.</p>
717
+ <div class="hero-buttons">
718
+ <button class="btn-primary">Explore The System</button>
719
+ <button class="btn-secondary">Read The Stream</button>
720
+ </div>
721
+ </section>
722
+
723
+ <!-- 1. PALETTE -->
724
+ <section class="preview-section" id="palette">
725
+ <span class="section-ribbon">Section 01 / Palette</span>
726
+ <h2 class="section-title">Color Palette</h2>
727
+ <p class="section-subtitle">Canvas black, jelly mint, verge ultraviolet — hazard colors on a near-black surface.</p>
728
+
729
+ <div class="color-group">
730
+ <div class="color-group-label">Primary — Brand Hazards</div>
731
+ <div class="color-grid">
732
+ <div class="color-swatch">
733
+ <div class="color-block" style="background: #3cffd0;"></div>
734
+ <div class="color-meta">
735
+ <div class="color-name">Jelly Mint</div>
736
+ <div class="color-hex">#3CFFD0</div>
737
+ <div class="color-role">The signature acid-mint accent. CTA fills, active borders, hazard spotlights.</div>
738
+ </div>
739
+ </div>
740
+ <div class="color-swatch">
741
+ <div class="color-block" style="background: #5200ff;"></div>
742
+ <div class="color-meta">
743
+ <div class="color-name">Verge Ultraviolet</div>
744
+ <div class="color-hex">#5200FF</div>
745
+ <div class="color-role">The complementary hazard. Secondary tiles, outlined buttons, alert borders.</div>
746
+ </div>
747
+ </div>
748
+ </div>
749
+ </div>
750
+
751
+ <div class="color-group">
752
+ <div class="color-group-label">Secondary & Accent</div>
753
+ <div class="color-grid">
754
+ <div class="color-swatch">
755
+ <div class="color-block" style="background: #309875;"></div>
756
+ <div class="color-meta">
757
+ <div class="color-name">Console Mint Border</div>
758
+ <div class="color-hex">#309875</div>
759
+ <div class="color-role">Darker mint for card outlines and button borders.</div>
760
+ </div>
761
+ </div>
762
+ <div class="color-swatch">
763
+ <div class="color-block" style="background: #3860be;"></div>
764
+ <div class="color-meta">
765
+ <div class="color-name">Deep Link Blue</div>
766
+ <div class="color-hex">#3860BE</div>
767
+ <div class="color-role">The one moment blue appears — every link's hover state.</div>
768
+ </div>
769
+ </div>
770
+ <div class="color-swatch">
771
+ <div class="color-block" style="background: #1eaedb;"></div>
772
+ <div class="color-meta">
773
+ <div class="color-name">Focus Cyan</div>
774
+ <div class="color-hex">#1EAEDB</div>
775
+ <div class="color-role">Reserved for button focus rings. Keyboard-only visibility.</div>
776
+ </div>
777
+ </div>
778
+ <div class="color-swatch">
779
+ <div class="color-block" style="background: #3d00bf;"></div>
780
+ <div class="color-meta">
781
+ <div class="color-name">Purple Rule</div>
782
+ <div class="color-hex">#3D00BF</div>
783
+ <div class="color-role">Darker ultraviolet for StoryStream timeline rails.</div>
784
+ </div>
785
+ </div>
786
+ </div>
787
+ </div>
788
+
789
+ <div class="color-group">
790
+ <div class="color-group-label">Surface & Background</div>
791
+ <div class="color-grid">
792
+ <div class="color-swatch">
793
+ <div class="color-block" style="background: #131313;"></div>
794
+ <div class="color-meta">
795
+ <div class="color-name">Canvas Black</div>
796
+ <div class="color-hex">#131313</div>
797
+ <div class="color-role">The default dark surface for the entire homepage. Newsprint-negative warmth.</div>
798
+ </div>
799
+ </div>
800
+ <div class="color-swatch">
801
+ <div class="color-block" style="background: #2d2d2d;"></div>
802
+ <div class="color-meta">
803
+ <div class="color-name">Surface Slate</div>
804
+ <div class="color-hex">#2D2D2D</div>
805
+ <div class="color-role">Secondary card background when a tile stays quiet.</div>
806
+ </div>
807
+ </div>
808
+ <div class="color-swatch">
809
+ <div class="color-block" style="background: #313131;"></div>
810
+ <div class="color-meta">
811
+ <div class="color-name">Image Frame</div>
812
+ <div class="color-hex">#313131</div>
813
+ <div class="color-role">1px border around inline photography.</div>
814
+ </div>
815
+ </div>
816
+ <div class="color-swatch">
817
+ <div class="color-block" style="background: #ffffff; border-bottom: 1px solid rgba(0,0,0,0.1);"></div>
818
+ <div class="color-meta">
819
+ <div class="color-name">Hazard White</div>
820
+ <div class="color-hex">#FFFFFF</div>
821
+ <div class="color-role">Tile fill, primary text, and the loudest "spotlight" surface.</div>
822
+ </div>
823
+ </div>
824
+ </div>
825
+ </div>
826
+
827
+ <div class="color-group">
828
+ <div class="color-group-label">Neutrals & Text</div>
829
+ <div class="color-grid">
830
+ <div class="color-swatch">
831
+ <div class="color-block" style="background: #ffffff; border-bottom: 1px solid rgba(0,0,0,0.1);"></div>
832
+ <div class="color-meta">
833
+ <div class="color-name">Primary Text</div>
834
+ <div class="color-hex">#FFFFFF</div>
835
+ <div class="color-role">Headlines and display text on the canvas.</div>
836
+ </div>
837
+ </div>
838
+ <div class="color-swatch">
839
+ <div class="color-block" style="background: #949494;"></div>
840
+ <div class="color-meta">
841
+ <div class="color-name">Secondary Text</div>
842
+ <div class="color-hex">#949494</div>
843
+ <div class="color-role">Bylines, timestamps, photo credits.</div>
844
+ </div>
845
+ </div>
846
+ <div class="color-swatch">
847
+ <div class="color-block" style="background: #e9e9e9;"></div>
848
+ <div class="color-meta">
849
+ <div class="color-name">Muted Text</div>
850
+ <div class="color-hex">#E9E9E9</div>
851
+ <div class="color-role">Button text on dark slate — slightly off-white to reduce glare.</div>
852
+ </div>
853
+ </div>
854
+ </div>
855
+ </div>
856
+ </section>
857
+
858
+ <!-- 2. TYPOGRAPHY -->
859
+ <section class="preview-section" id="typography">
860
+ <span class="section-ribbon">Section 02 / Typography</span>
861
+ <h2 class="section-title">Typographic Hierarchy</h2>
862
+ <p class="section-subtitle">Manuka shouts, PolySans works, PolySans Mono labels, FK Roman whispers.</p>
863
+
864
+ <div class="type-row">
865
+ <div class="type-meta"><strong>Hero Wordmark</strong>Manuka · 107px / 900 / 0.80 / 1.07px</div>
866
+ <div class="type-sample" style="font-family: var(--font-display); font-size: 107px; font-weight: 400; line-height: 0.80; letter-spacing: 1px; text-transform: uppercase;">The Verge</div>
867
+ </div>
868
+ <div class="type-row">
869
+ <div class="type-meta"><strong>Display Secondary</strong>Manuka · 60px / 900 / 0.80</div>
870
+ <div class="type-sample" style="font-family: var(--font-display); font-size: 60px; font-weight: 400; line-height: 0.80; text-transform: uppercase;">Feature Callout Headline</div>
871
+ </div>
872
+ <div class="type-row">
873
+ <div class="type-meta"><strong>Large Headline</strong>PolySans · 34px / 700 / 1.00</div>
874
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 34px; font-weight: 700; line-height: 1.00;">Section and module headlines</div>
875
+ </div>
876
+ <div class="type-row">
877
+ <div class="type-meta"><strong>Heading Wide</strong>PolySans · 32px / 400 / 1.10 / 0.32px</div>
878
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 32px; font-weight: 400; line-height: 1.10; letter-spacing: 0.32px;">Sub-heroes and promotional units</div>
879
+ </div>
880
+ <div class="type-row">
881
+ <div class="type-meta"><strong>Heading Medium</strong>PolySans · 24px / 700 / 1.00</div>
882
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 24px; font-weight: 700; line-height: 1.00;">Story tile headlines in the main feed</div>
883
+ </div>
884
+ <div class="type-row">
885
+ <div class="type-meta"><strong>Fashion Whisper</strong>PolySans · 19px / 300 / 1.20 / 1.9px / CAPITALIZE</div>
886
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 19px; font-weight: 300; line-height: 1.20; letter-spacing: 1.9px; text-transform: capitalize;">The Thin Weight Kicker Above The Shout</div>
887
+ </div>
888
+ <div class="type-row">
889
+ <div class="type-meta"><strong>All-Caps XL</strong>PolySans · 18px / 400 / 1.10 / 1.8px / UPPER</div>
890
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 18px; font-weight: 400; line-height: 1.10; letter-spacing: 1.8px; text-transform: uppercase;">Section Kicker Label</div>
891
+ </div>
892
+ <div class="type-row">
893
+ <div class="type-meta"><strong>Body Relaxed</strong>PolySans · 16px / 500 / 1.60</div>
894
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 16px; font-weight: 500; line-height: 1.60;">Long-form reading body. The default rhythm for article decks and extended captions — relaxed leading to carry the density of a dark canvas.</div>
895
+ </div>
896
+ <div class="type-row">
897
+ <div class="type-meta"><strong>Eyebrow All-Caps</strong>PolySans · 12px / 400 / 1.30 / 1.8px / UPPER</div>
898
+ <div class="type-sample" style="font-family: var(--font-sans); font-size: 12px; font-weight: 400; line-height: 1.30; letter-spacing: 1.8px; text-transform: uppercase;">Policy · Transportation · Apple</div>
899
+ </div>
900
+ <div class="type-row">
901
+ <div class="type-meta"><strong>Mono Timestamp</strong>PolySans Mono · 11px / 500 / 1.20 / 1.1px / UPPER</div>
902
+ <div class="type-sample" style="font-family: var(--font-mono); font-size: 11px; font-weight: 500; line-height: 1.20; letter-spacing: 1.1px; text-transform: uppercase;">21m ago · 3h ago · Yesterday</div>
903
+ </div>
904
+ <div class="type-row">
905
+ <div class="type-meta"><strong>Mono Button</strong>PolySans Mono · 12px / 600 / 2.00 / 1.5px / UPPER</div>
906
+ <div class="type-sample" style="font-family: var(--font-mono); font-size: 12px; font-weight: 700; line-height: 2.00; letter-spacing: 1.5px; text-transform: uppercase; background: var(--jelly-mint); color: var(--absolute-black); padding: 10px 22px; display: inline-block; border-radius: 24px;">Subscribe Now</div>
907
+ </div>
908
+ <div class="type-row">
909
+ <div class="type-meta"><strong>Serif Body</strong>FK Roman Standard · 16px / 400 / 1.30 / -0.16px</div>
910
+ <div class="type-sample" style="font-family: var(--font-serif); font-size: 16px; font-weight: 400; line-height: 1.30; letter-spacing: -0.16px;">The rare serif moment — used for review decks and critic pulls, a print-voice counterpoint to the PolySans workhorse.</div>
911
+ </div>
912
+ </section>
913
+
914
+ <!-- 3. BUTTONS -->
915
+ <section class="preview-section" id="components">
916
+ <span class="section-ribbon">Section 03 / Buttons</span>
917
+ <h2 class="section-title">Button Variants</h2>
918
+ <p class="section-subtitle">Pills only. 24–40px radius, hazard-color fills, mono UPPERCASE labels.</p>
919
+ <div class="button-grid">
920
+ <div class="button-cell">
921
+ <span class="label">Primary — Jelly Mint Pill</span>
922
+ <div><button class="btn-primary">Subscribe</button></div>
923
+ </div>
924
+ <div class="button-cell">
925
+ <span class="label">Secondary — Dark Pill</span>
926
+ <div><button class="btn-secondary">Sign In</button></div>
927
+ </div>
928
+ <div class="button-cell">
929
+ <span class="label">Outlined — Mint 40px</span>
930
+ <div><button class="btn-outline-mint">Join Stream</button></div>
931
+ </div>
932
+ <div class="button-cell">
933
+ <span class="label">Outlined — Ultraviolet 30px</span>
934
+ <div><button class="btn-outline-uv">Read Review</button></div>
935
+ </div>
936
+ <div class="button-cell">
937
+ <span class="label">Icon — Round 50%</span>
938
+ <div><button class="btn-icon">Q</button></div>
939
+ </div>
940
+ <div class="button-cell">
941
+ <span class="label">Pill Tag — Non-interactive</span>
942
+ <div><span class="btn-tag">Breaking</span></div>
943
+ </div>
944
+ </div>
945
+ </section>
946
+
947
+ <!-- 4. STORYSTREAM TILES -->
948
+ <section class="preview-section">
949
+ <span class="section-ribbon">Section 04 / Story Tiles</span>
950
+ <h2 class="section-title">Hazard-Color Tiles</h2>
951
+ <p class="section-subtitle">Saturated accent blocks with rounded 20–24px corners. Color is elevation.</p>
952
+ <div class="storystream-grid">
953
+ <div class="story-tile mint">
954
+ <span class="story-kicker">Policy · Feature</span>
955
+ <h3 class="story-headline">The Next Browser War Is Already Over And Nobody Noticed</h3>
956
+ <p class="story-deck">A long-form deck on why the market moved from standards to distribution while the press was still benchmarking rendering engines.</p>
957
+ <span class="story-meta">12 min read · 2h ago</span>
958
+ </div>
959
+ <div class="story-tile uv compact">
960
+ <span class="story-kicker">Hardware</span>
961
+ <h3 class="story-headline">A Mechanical Keyboard Reviewed At Rave Volume</h3>
962
+ <span class="story-meta">5h ago</span>
963
+ </div>
964
+ </div>
965
+ <div style="height: 24px;"></div>
966
+ <div class="storystream-grid">
967
+ <div class="story-tile yellow compact">
968
+ <span class="story-kicker">Gaming</span>
969
+ <h3 class="story-headline">The Indie That Ate The Big Studios Alive</h3>
970
+ <span class="story-meta">Yesterday</span>
971
+ </div>
972
+ <div class="story-tile dark compact">
973
+ <span class="story-kicker">Science</span>
974
+ <h3 class="story-headline">Inside The Lab Running A Synthetic Atmosphere</h3>
975
+ <span class="story-meta">2 days ago</span>
976
+ </div>
977
+ </div>
978
+ </section>
979
+
980
+ <!-- 5. STORYSTREAM TIMELINE -->
981
+ <section class="preview-section">
982
+ <span class="section-ribbon">Section 05 / StoryStream</span>
983
+ <h2 class="section-title">Timeline Rail</h2>
984
+ <p class="section-subtitle">Every post is a pill-cornered tile, pinned to a dashed rail by a mono uppercase timestamp.</p>
985
+ <div class="timeline-list">
986
+ <div class="timeline-item">
987
+ <div class="timeline-time">21m ago</div>
988
+ <div class="timeline-body highlight">
989
+ <span class="story-kicker">Breaking</span>
990
+ <h4>A regulator has opened an investigation into the platform merger</h4>
991
+ </div>
992
+ </div>
993
+ <div class="timeline-item">
994
+ <div class="timeline-time">1h ago</div>
995
+ <div class="timeline-body">
996
+ <span class="story-kicker">Apple</span>
997
+ <h4>The iOS update everyone is quietly rolling back</h4>
998
+ </div>
999
+ </div>
1000
+ <div class="timeline-item">
1001
+ <div class="timeline-time">3h ago</div>
1002
+ <div class="timeline-body">
1003
+ <span class="story-kicker">Transportation</span>
1004
+ <h4>The EV startup that outlasted its own hype cycle</h4>
1005
+ </div>
1006
+ </div>
1007
+ <div class="timeline-item">
1008
+ <div class="timeline-time">Yesterday</div>
1009
+ <div class="timeline-body">
1010
+ <span class="story-kicker">Gaming</span>
1011
+ <h4>A handheld that actually earns the price tag</h4>
1012
+ </div>
1013
+ </div>
1014
+ </div>
1015
+ </section>
1016
+
1017
+ <!-- 6. FORMS -->
1018
+ <section class="preview-section">
1019
+ <span class="section-ribbon">Section 06 / Forms</span>
1020
+ <h2 class="section-title">Inputs & Newsletter</h2>
1021
+ <p class="section-subtitle">Tight 2px radius, mint focus border, ultraviolet error border — newspaper-form minimalism.</p>
1022
+ <div class="form-stack">
1023
+ <div class="form-field">
1024
+ <label class="form-label">Email — Default</label>
1025
+ <input class="form-input" type="email" placeholder="reader@example.com">
1026
+ </div>
1027
+ <div class="form-field">
1028
+ <label class="form-label">Email — Focus</label>
1029
+ <input class="form-input focus" type="email" placeholder="reader@example.com">
1030
+ </div>
1031
+ <div class="form-field">
1032
+ <label class="form-label">Email — Error</label>
1033
+ <input class="form-input error" type="email" value="not-an-email">
1034
+ <span class="form-error">Please enter a valid address</span>
1035
+ </div>
1036
+ <div class="form-field">
1037
+ <label class="form-label">Comment — Textarea</label>
1038
+ <textarea class="form-input form-textarea" placeholder="Share your thoughts on the story..."></textarea>
1039
+ </div>
1040
+ </div>
1041
+ </section>
1042
+
1043
+ <!-- 7. SPACING -->
1044
+ <section class="preview-section" id="layout">
1045
+ <span class="section-ribbon">Section 07 / Spacing</span>
1046
+ <h2 class="section-title">Spacing Scale (8px System)</h2>
1047
+ <p class="section-subtitle">Fine micro-scale (2/4/5/6/9/10) for pills, editorial scale (12/16/20/24) for the grid.</p>
1048
+ <div class="spacing-row">
1049
+ <div class="spacing-item"><div class="spacing-block" style="width: 2px;"></div><span class="spacing-label">2px</span></div>
1050
+ <div class="spacing-item"><div class="spacing-block" style="width: 4px;"></div><span class="spacing-label">4px</span></div>
1051
+ <div class="spacing-item"><div class="spacing-block" style="width: 6px;"></div><span class="spacing-label">6px</span></div>
1052
+ <div class="spacing-item"><div class="spacing-block" style="width: 8px;"></div><span class="spacing-label">8px · base</span></div>
1053
+ <div class="spacing-item"><div class="spacing-block" style="width: 10px;"></div><span class="spacing-label">10px</span></div>
1054
+ <div class="spacing-item"><div class="spacing-block" style="width: 12px;"></div><span class="spacing-label">12px</span></div>
1055
+ <div class="spacing-item"><div class="spacing-block" style="width: 16px;"></div><span class="spacing-label">16px</span></div>
1056
+ <div class="spacing-item"><div class="spacing-block" style="width: 20px;"></div><span class="spacing-label">20px</span></div>
1057
+ <div class="spacing-item"><div class="spacing-block" style="width: 24px;"></div><span class="spacing-label">24px</span></div>
1058
+ <div class="spacing-item"><div class="spacing-block" style="width: 25px;"></div><span class="spacing-label">25px</span></div>
1059
+ </div>
1060
+ </section>
1061
+
1062
+ <!-- 8. RADIUS -->
1063
+ <section class="preview-section">
1064
+ <span class="section-ribbon">Section 08 / Radius</span>
1065
+ <h2 class="section-title">Border Radius Scale</h2>
1066
+ <p class="section-subtitle">Eight radii — from 2px typewriter tags to 40px outlined shout-pills.</p>
1067
+ <div class="radius-row">
1068
+ <div class="radius-item">
1069
+ <div class="radius-block r2"></div>
1070
+ <span class="radius-label">2px<small>Inputs, badges</small></span>
1071
+ </div>
1072
+ <div class="radius-item">
1073
+ <div class="radius-block r3"></div>
1074
+ <span class="radius-label">3px<small>Inline images</small></span>
1075
+ </div>
1076
+ <div class="radius-item">
1077
+ <div class="radius-block r4"></div>
1078
+ <span class="radius-label">4px<small>Nested imagery</small></span>
1079
+ </div>
1080
+ <div class="radius-item">
1081
+ <div class="radius-block r20"></div>
1082
+ <span class="radius-label">20px<small>Story tiles</small></span>
1083
+ </div>
1084
+ <div class="radius-item">
1085
+ <div class="radius-block r24"></div>
1086
+ <span class="radius-label">24px<small>Feature cards, primary button</small></span>
1087
+ </div>
1088
+ <div class="radius-item">
1089
+ <div class="radius-block r30"></div>
1090
+ <span class="radius-label">30px<small>Promo buttons</small></span>
1091
+ </div>
1092
+ <div class="radius-item">
1093
+ <div class="radius-block r40"></div>
1094
+ <span class="radius-label">40px<small>Outlined pill CTAs</small></span>
1095
+ </div>
1096
+ <div class="radius-item">
1097
+ <div class="radius-block r50"></div>
1098
+ <span class="radius-label">50%<small>Avatars, icon buttons</small></span>
1099
+ </div>
1100
+ </div>
1101
+ </section>
1102
+
1103
+ <!-- 9. ELEVATION -->
1104
+ <section class="preview-section">
1105
+ <span class="section-ribbon">Section 09 / Elevation</span>
1106
+ <h2 class="section-title">Depth & Elevation</h2>
1107
+ <p class="section-subtitle">Color is elevation. 1px hazard borders do the work shadows would do elsewhere.</p>
1108
+ <div class="elevation-grid">
1109
+ <div class="elevation-cell lvl-0">
1110
+ <span class="label">Level 0</span>
1111
+ <div class="desc">Plain canvas text — no border, no shadow</div>
1112
+ </div>
1113
+ <div class="elevation-cell lvl-2">
1114
+ <span class="label">Level 2</span>
1115
+ <div class="desc">1px hairline frame — image outlines</div>
1116
+ </div>
1117
+ <div class="elevation-cell lvl-3">
1118
+ <span class="label">Level 3</span>
1119
+ <div class="desc">1px Jelly Mint outline — active tile</div>
1120
+ </div>
1121
+ <div class="elevation-cell lvl-4">
1122
+ <span class="label">Level 4</span>
1123
+ <div class="desc">1px Ultraviolet outline — promo state</div>
1124
+ </div>
1125
+ <div class="elevation-cell lvl-5">
1126
+ <span class="label">Level 5</span>
1127
+ <div class="desc">Subtle atmospheric 1px ring — stacked cards</div>
1128
+ </div>
1129
+ <div class="elevation-cell lvl-6">
1130
+ <span class="label">Level 6</span>
1131
+ <div class="desc">Inset mint underline — active tab signature</div>
1132
+ </div>
1133
+ <div class="elevation-cell lvl-7">
1134
+ <span class="label">Level 7</span>
1135
+ <div class="desc">Saturated Jelly Mint fill — loudest emphasis</div>
1136
+ </div>
1137
+ </div>
1138
+ </section>
1139
+
1140
+ <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>
1141
+
1142
+ </body>
1143
+ </html>