get-shit-pretty 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -28
- package/gsp/agents/gsp-accessibility-auditor.md +1 -60
- package/gsp/agents/gsp-brand-auditor.md +1 -61
- package/gsp/agents/gsp-brand-creative-director.md +10 -0
- package/gsp/agents/gsp-brand-engineer.md +1 -122
- package/gsp/agents/gsp-brand-researcher.md +11 -0
- package/gsp/agents/gsp-brand-strategist.md +1 -65
- package/gsp/agents/gsp-project-builder.md +17 -0
- package/gsp/agents/gsp-project-critic.md +11 -0
- package/gsp/agents/gsp-project-designer.md +11 -0
- package/gsp/agents/gsp-project-researcher.md +1 -74
- package/gsp/agents/gsp-project-reviewer.md +12 -0
- package/gsp/hooks/hooks.json +10 -28
- package/gsp/skills/get-shit-pretty/SKILL.md +2 -5
- package/gsp/skills/gsp-accessibility/SKILL.md +0 -1
- package/gsp/skills/gsp-accessibility-audit/SKILL.md +9 -8
- package/gsp/skills/gsp-accessibility-audit/methodology/gsp-accessibility-auditor.md +59 -0
- package/gsp/skills/gsp-add-reference/SKILL.md +0 -1
- package/gsp/skills/gsp-art/SKILL.md +13 -10
- package/gsp/skills/gsp-brand-audit/SKILL.md +4 -2
- package/gsp/skills/gsp-brand-audit/methodology/gsp-brand-auditor.md +61 -0
- package/gsp/skills/gsp-brand-brief/SKILL.md +129 -0
- package/gsp/skills/gsp-brand-guidelines/SKILL.md +13 -11
- package/gsp/skills/gsp-brand-guidelines/methodology/gsp-brand-engineer.md +122 -0
- package/gsp/skills/gsp-brand-identity/SKILL.md +12 -11
- package/gsp/{agents/gsp-creative-director.md → skills/gsp-brand-identity/methodology/gsp-brand-creative-director.md} +0 -9
- package/gsp/skills/gsp-brand-refine/SKILL.md +0 -1
- package/gsp/skills/gsp-brand-research/SKILL.md +13 -13
- package/gsp/{agents/gsp-researcher.md → skills/gsp-brand-research/methodology/gsp-brand-researcher.md} +0 -10
- package/gsp/skills/gsp-brand-strategy/SKILL.md +14 -14
- package/gsp/skills/gsp-brand-strategy/methodology/gsp-brand-strategist.md +65 -0
- package/gsp/skills/gsp-brand-sync/SKILL.md +60 -10
- package/gsp/skills/gsp-color/SKILL.md +0 -1
- package/gsp/skills/gsp-design-system/SKILL.md +0 -1
- package/gsp/skills/gsp-doctor/SKILL.md +0 -1
- package/gsp/skills/gsp-help/SKILL.md +0 -2
- package/gsp/skills/gsp-icons/SKILL.md +0 -1
- package/gsp/skills/gsp-logo/SKILL.md +0 -1
- package/gsp/skills/gsp-phase-transition/SKILL.md +0 -3
- package/gsp/skills/gsp-pretty/SKILL.md +25 -24
- package/gsp/skills/gsp-progress/SKILL.md +0 -1
- package/gsp/skills/gsp-project-brief/SKILL.md +51 -22
- package/gsp/skills/gsp-project-build/SKILL.md +18 -14
- package/gsp/{agents/gsp-builder.md → skills/gsp-project-build/methodology/gsp-project-builder.md} +0 -16
- package/gsp/skills/gsp-project-critique/SKILL.md +13 -13
- package/gsp/{agents/gsp-critic.md → skills/gsp-project-critique/methodology/gsp-project-critic.md} +0 -11
- package/gsp/skills/gsp-project-design/SKILL.md +9 -6
- package/gsp/{agents/gsp-designer.md → skills/gsp-project-design/methodology/gsp-project-designer.md} +0 -11
- package/gsp/skills/gsp-project-research/SKILL.md +4 -2
- package/gsp/skills/gsp-project-research/methodology/gsp-project-researcher.md +73 -0
- package/gsp/skills/gsp-project-review/SKILL.md +8 -5
- package/gsp/{agents/gsp-reviewer.md → skills/gsp-project-review/methodology/gsp-project-reviewer.md} +0 -12
- package/gsp/skills/gsp-scaffold/SKILL.md +0 -1
- package/gsp/skills/gsp-start/SKILL.md +59 -210
- package/gsp/skills/gsp-style/SKILL.md +1 -2
- package/gsp/skills/gsp-style/styles/academia.md +751 -787
- package/gsp/skills/gsp-style/styles/art-deco.md +316 -352
- package/gsp/skills/gsp-style/styles/bauhaus.md +189 -225
- package/gsp/skills/gsp-style/styles/bold-typography.md +433 -469
- package/gsp/skills/gsp-style/styles/botanical.md +141 -177
- package/gsp/skills/gsp-style/styles/claymorphism.md +377 -413
- package/gsp/skills/gsp-style/styles/cyberpunk.md +419 -455
- package/gsp/skills/gsp-style/styles/enterprise.md +224 -260
- package/gsp/skills/gsp-style/styles/flat-design.md +119 -155
- package/gsp/skills/gsp-style/styles/fluent.md +0 -31
- package/gsp/skills/gsp-style/styles/glassmorphism.md +0 -36
- package/gsp/skills/gsp-style/styles/humanist-literary.md +0 -28
- package/gsp/skills/gsp-style/styles/industrial.md +406 -438
- package/gsp/skills/gsp-style/styles/kinetic.md +531 -563
- package/gsp/skills/gsp-style/styles/liquid-glass.md +0 -36
- package/gsp/skills/gsp-style/styles/luxury.md +402 -438
- package/gsp/skills/gsp-style/styles/material.md +555 -591
- package/gsp/skills/gsp-style/styles/maximalism.md +875 -911
- package/gsp/skills/gsp-style/styles/minimal-dark.md +442 -478
- package/gsp/skills/gsp-style/styles/modern-dark.md +390 -426
- package/gsp/skills/gsp-style/styles/monochrome.md +472 -504
- package/gsp/skills/gsp-style/styles/neubrutalism.md +354 -390
- package/gsp/skills/gsp-style/styles/neumorphism.md +195 -231
- package/gsp/skills/gsp-style/styles/newsprint.md +529 -565
- package/gsp/skills/gsp-style/styles/organic.md +177 -213
- package/gsp/skills/gsp-style/styles/playful-geometric.md +211 -247
- package/gsp/skills/gsp-style/styles/professional.md +503 -539
- package/gsp/skills/gsp-style/styles/retro.md +664 -700
- package/gsp/skills/gsp-style/styles/saas.md +490 -526
- package/gsp/skills/gsp-style/styles/sketch.md +189 -225
- package/gsp/skills/gsp-style/styles/swiss-minimalist.md +195 -227
- package/gsp/skills/gsp-style/styles/terminal.md +99 -135
- package/gsp/skills/gsp-style/styles/vaporwave.md +356 -392
- package/gsp/skills/gsp-style/styles/web3.md +337 -373
- package/gsp/skills/gsp-typography/SKILL.md +0 -1
- package/gsp/skills/gsp-update/SKILL.md +0 -1
- package/gsp/skills/gsp-visuals/SKILL.md +0 -1
- package/gsp/templates/branding/config.json +1 -1
- package/gsp/templates/exports-index.md +0 -7
- package/gsp/templates/projects/config.json +1 -1
- package/gsp/templates/projects/roadmap.md +0 -7
- package/gsp/templates/projects/state.md +0 -4
- package/package.json +1 -1
- package/scripts/lint-check.sh +1 -1
- package/gsp/agents/gsp-ascii-artist.md +0 -66
- package/gsp/agents/gsp-brand-syncer.md +0 -126
- package/gsp/agents/gsp-campaign-director.md +0 -79
- package/gsp/agents/gsp-scoper.md +0 -85
- package/gsp/skills/gsp-launch/SKILL.md +0 -97
- package/gsp/skills/gsp-start/questioning.md +0 -87
- package/gsp/templates/phases/launch.md +0 -55
|
@@ -1,469 +1,433 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
#
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
-
|
|
203
|
-
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
-
|
|
214
|
-
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
-
|
|
222
|
-
-
|
|
223
|
-
-
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
###
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
-
|
|
231
|
-
-
|
|
232
|
-
-
|
|
233
|
-
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
-
|
|
239
|
-
-
|
|
240
|
-
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
-
|
|
250
|
-
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
-
|
|
268
|
-
-
|
|
269
|
-
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
-
|
|
275
|
-
-
|
|
276
|
-
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
###
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
-
|
|
311
|
-
-
|
|
312
|
-
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
-
|
|
341
|
-
-
|
|
342
|
-
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
-
|
|
347
|
-
-
|
|
348
|
-
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
-
|
|
376
|
-
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
-
|
|
385
|
-
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
-
|
|
403
|
-
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
-
|
|
412
|
-
-
|
|
413
|
-
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
-
|
|
431
|
-
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
- Headlines scale smoothly with responsive classes (never one size for all)
|
|
436
|
-
- Keep letter-spacing consistent across breakpoints
|
|
437
|
-
- Ensure underlines remain visible and touchable (2px minimum)
|
|
438
|
-
- Line-height increases slightly for smaller screens for readability
|
|
439
|
-
- Max-width constraints on body text prevent overly long lines (max-w-xl, max-w-2xl, max-w-3xl)
|
|
440
|
-
|
|
441
|
-
---
|
|
442
|
-
|
|
443
|
-
## Accessibility
|
|
444
|
-
|
|
445
|
-
**Contrast**:
|
|
446
|
-
|
|
447
|
-
- foreground (#FAFAFA) on background (#0A0A0A) = 18.1:1 ✓
|
|
448
|
-
- mutedForeground (#737373) on background = 5.3:1 ✓ (AA)
|
|
449
|
-
- accent (#FF3D00) on background = 5.4:1 ✓ (AA for large text)
|
|
450
|
-
|
|
451
|
-
**Focus states**:
|
|
452
|
-
|
|
453
|
-
- 2px accent outline
|
|
454
|
-
- 2px offset from element
|
|
455
|
-
- No glow, no fill change
|
|
456
|
-
- Visible on all interactive elements
|
|
457
|
-
|
|
458
|
-
**Typography**:
|
|
459
|
-
|
|
460
|
-
- Body text minimum 16px
|
|
461
|
-
- Line-height minimum 1.5 for body
|
|
462
|
-
- No thin weights below 400
|
|
463
|
-
|
|
464
|
-
**Interaction**:
|
|
465
|
-
|
|
466
|
-
- Touch targets minimum 44x44px
|
|
467
|
-
- Underlines are 2px+ for visibility
|
|
468
|
-
- Color is never the only indicator
|
|
469
|
-
`</design-system>`
|
|
1
|
+
<design-system>
|
|
2
|
+
# Bold Typography Design System
|
|
3
|
+
|
|
4
|
+
## Design Philosophy
|
|
5
|
+
|
|
6
|
+
Bold Typography is **poster design translated to web**. Typography isn't decoration—it's the entire visual language. Every design decision serves the type: color exists to create contrast, space exists to frame letterforms, and interaction exists to reveal typographic details.
|
|
7
|
+
|
|
8
|
+
### Core Principles
|
|
9
|
+
|
|
10
|
+
1. **Type as Hero**: Headlines aren't just labels—they're the visual centerpiece. A well-set 80pt headline is more compelling than any stock photo.
|
|
11
|
+
2. **Extreme Scale Contrast**: The gap between headline and body creates drama. Think 6:1 or greater ratio between H1 and paragraph text.
|
|
12
|
+
3. **Deliberate Negative Space**: White (or black) space isn't empty—it's the frame around your type. Generous margins make headlines feel intentional, not cramped.
|
|
13
|
+
4. **Strict Hierarchy**: Every element has a clear rank. No two elements compete for attention. The eye flows naturally: headline → subhead → body → action.
|
|
14
|
+
5. **Restrained Palette**: Black, white, and one accent. Maybe two. More colors dilute the typographic impact. Let the type shapes do the work.
|
|
15
|
+
|
|
16
|
+
### The Vibe
|
|
17
|
+
|
|
18
|
+
**Confident. Editorial. Deliberate.** This isn't friendly SaaS—it's a design manifesto. The page feels like a gallery exhibition or luxury magazine spread. Every word earns its place.
|
|
19
|
+
|
|
20
|
+
Visual signatures:
|
|
21
|
+
|
|
22
|
+
- Massive headlines that make you scroll
|
|
23
|
+
- Tight letter-spacing on display text (`-0.04em` to `-0.06em`)
|
|
24
|
+
- Wide letter-spacing on labels (`0.1em` to `0.2em`)
|
|
25
|
+
- Text that bleeds to edge on mobile
|
|
26
|
+
- Underlines as the primary interactive affordance
|
|
27
|
+
- No rounded corners—sharp edges match sharp typography
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Design Token System
|
|
32
|
+
|
|
33
|
+
### Colors (Dark Mode)
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
background: #0A0A0A // Near-black, not pure black
|
|
37
|
+
foreground: #FAFAFA // Warm white
|
|
38
|
+
muted: #1A1A1A // Subtle surface elevation
|
|
39
|
+
mutedForeground: #737373 // Secondary text (WCAG AA on dark)
|
|
40
|
+
accent: #FF3D00 // Vermillion—warm, urgent, visible
|
|
41
|
+
accentForeground: #0A0A0A // Dark text on accent
|
|
42
|
+
border: #262626 // Barely-there dividers
|
|
43
|
+
input: #1A1A1A // Input backgrounds
|
|
44
|
+
card: #0F0F0F // Slight elevation from bg
|
|
45
|
+
cardForeground: #FAFAFA
|
|
46
|
+
ring: #FF3D00 // Focus states match accent
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The accent is deliberate: vermillion/red-orange creates urgency and warmth against the cold dark background. It's used sparingly—headlines, key CTAs, and underlines only.
|
|
50
|
+
|
|
51
|
+
### Typography
|
|
52
|
+
|
|
53
|
+
**Primary Stack**: `"Inter Tight", "Inter", system-ui, sans-serif`
|
|
54
|
+
|
|
55
|
+
- Inter Tight for headlines (tighter default spacing)
|
|
56
|
+
- Clean, geometric, professional
|
|
57
|
+
|
|
58
|
+
**Display Stack**: `"Playfair Display", Georgia, serif`
|
|
59
|
+
|
|
60
|
+
- For pull quotes and testimonials only
|
|
61
|
+
- Creates elegant contrast with sans headlines
|
|
62
|
+
|
|
63
|
+
**Mono Stack**: `"JetBrains Mono", "Fira Code", monospace`
|
|
64
|
+
|
|
65
|
+
- Labels, stats, technical details
|
|
66
|
+
|
|
67
|
+
**Scale System**:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
xs: 0.75rem // 12px - fine print
|
|
71
|
+
sm: 0.875rem // 14px - captions
|
|
72
|
+
base: 1rem // 16px - body
|
|
73
|
+
lg: 1.125rem // 18px - lead paragraphs
|
|
74
|
+
xl: 1.25rem // 20px - subheads
|
|
75
|
+
2xl: 1.5rem // 24px - section intros
|
|
76
|
+
3xl: 2rem // 32px - H3
|
|
77
|
+
4xl: 2.5rem // 40px - H2
|
|
78
|
+
5xl: 3.5rem // 56px - H1 mobile
|
|
79
|
+
6xl: 4.5rem // 72px - H1 tablet
|
|
80
|
+
7xl: 6rem // 96px - H1 desktop
|
|
81
|
+
8xl: 8rem // 128px - Hero statement
|
|
82
|
+
9xl: 10rem // 160px - Decorative numbers
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Tracking**:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
tighter: -0.06em // Display headlines
|
|
89
|
+
tight: -0.04em // Large headings
|
|
90
|
+
normal: -0.01em // Body (slightly tightened)
|
|
91
|
+
wide: 0.05em // Small labels
|
|
92
|
+
wider: 0.1em // All-caps labels
|
|
93
|
+
widest: 0.2em // Sparse emphasis
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Line Heights**:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
none: 1 // Single-line headlines
|
|
100
|
+
tight: 1.1 // Multi-line headlines
|
|
101
|
+
snug: 1.25 // Subheads
|
|
102
|
+
normal: 1.6 // Body text
|
|
103
|
+
relaxed: 1.75 // Long-form reading
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Radius & Border
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
radius: 0px // No border-radius anywhere. Sharp edges only.
|
|
110
|
+
border: 1px // Thin, precise dividers
|
|
111
|
+
borderThick: 2px // Accent underlines
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Shadows & Effects
|
|
115
|
+
|
|
116
|
+
No traditional shadows. Depth comes from:
|
|
117
|
+
|
|
118
|
+
- **Layered type**: Large muted text behind smaller bright text
|
|
119
|
+
- **Underlines**: 2-3px accent lines under interactive elements
|
|
120
|
+
- **Dividers**: Full-width horizontal rules
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
shadow: none
|
|
124
|
+
textShadow: none
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Textures & Patterns
|
|
128
|
+
|
|
129
|
+
**Subtle noise grain texture**: A very subtle fractal noise pattern at 1.5% opacity overlays the entire page, adding tactile quality to the dark background without being obtrusive. Implemented via inline SVG data URL with feTurbulence filter.
|
|
130
|
+
|
|
131
|
+
**Typographic layering for depth**:
|
|
132
|
+
|
|
133
|
+
- Decorative oversized numbers/text behind content with low opacity
|
|
134
|
+
- Text shadow technique: duplicate text offset 1-2px in border color creates depth without traditional shadows
|
|
135
|
+
- Accent bars: thin horizontal accent-colored bars (h-1, w-16) as visual anchors on key elements
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Component Stylings
|
|
140
|
+
|
|
141
|
+
### Buttons
|
|
142
|
+
|
|
143
|
+
Primary button is **text-only with animated underline**:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
- No background fill
|
|
147
|
+
- Text in accent color
|
|
148
|
+
- Animated underline: absolute positioned span, h-0.5, bg-accent
|
|
149
|
+
- Base state: scale-x-100, on hover: scale-x-110
|
|
150
|
+
- Uppercase, wide tracking (tracking-wider: 0.1em)
|
|
151
|
+
- Font-weight: 600 (semibold)
|
|
152
|
+
- Padding: py-2/3/4 based on size (sm/default/lg), px-0
|
|
153
|
+
- Gap between children: gap-2/2.5/3
|
|
154
|
+
- Active state: translate-y-px for press feedback
|
|
155
|
+
- Transition: 150ms all
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Secondary/outline button:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
- Border: 1px solid foreground
|
|
162
|
+
- Text: foreground
|
|
163
|
+
- No background fill initially
|
|
164
|
+
- On hover: bg-foreground, text becomes background color (full inversion)
|
|
165
|
+
- Sharp corners (0px radius)
|
|
166
|
+
- Padding: px-6 (needs horizontal padding unlike primary)
|
|
167
|
+
- Uppercase, tracking-wider
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Ghost button:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
- No border, no fill
|
|
174
|
+
- Text: mutedForeground
|
|
175
|
+
- Padding: px-4
|
|
176
|
+
- On hover: text becomes foreground
|
|
177
|
+
- Underline appears via scale-x-0 to scale-x-100 transition
|
|
178
|
+
- Underline is h-px (thinner than primary)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
All buttons:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
- Focus-visible: 2px ring in accent, 2px offset
|
|
185
|
+
- Disabled: pointer-events-none, opacity-50
|
|
186
|
+
- Inline-flex for proper alignment
|
|
187
|
+
- Whitespace-nowrap to prevent wrapping
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Cards/Containers
|
|
191
|
+
|
|
192
|
+
**Minimal card usage.** Content is primarily separated by:
|
|
193
|
+
|
|
194
|
+
- Generous section padding (py-20 to py-40)
|
|
195
|
+
- Full-width horizontal borders (border-t/border-b)
|
|
196
|
+
- Typography scale changes
|
|
197
|
+
- Background color alternation (background ↔ muted)
|
|
198
|
+
|
|
199
|
+
When a "card" is necessary (pricing, testimonials):
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
- Border: 1px solid border (controlled by `bordered` prop)
|
|
203
|
+
- Background: transparent (bg-transparent)
|
|
204
|
+
- No radius (0px, sharp corners)
|
|
205
|
+
- No shadow
|
|
206
|
+
- Padding: p-6 (mobile) to p-8 (desktop)
|
|
207
|
+
- Transition on hover: border-hover color (150ms)
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Highlighted cards (featured pricing tier):
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
- Border: 2px solid accent (overrides default 1px)
|
|
214
|
+
- Small accent badge above content (bg-accent, px-3 py-1, uppercase mono text)
|
|
215
|
+
- No background change, border is the differentiator
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Special depth technique (Product Detail card):
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
- Add accent top border: absolute h-1 w-16 bg-accent
|
|
222
|
+
- Layered text: duplicate text element offset with -z-10 and border color
|
|
223
|
+
- Creates subtle dimensionality without shadows
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Inputs
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
- Background: input color (#1A1A1A)
|
|
230
|
+
- Border: 1px solid border
|
|
231
|
+
- Border-radius: 0px (rounded-none, sharp corners)
|
|
232
|
+
- Height: h-12 (mobile) to h-14 (desktop), responsive
|
|
233
|
+
- Font-size: text-base (16px, prevents zoom on iOS)
|
|
234
|
+
- Padding: px-4
|
|
235
|
+
- Text color: foreground
|
|
236
|
+
- Placeholder: mutedForeground
|
|
237
|
+
- Focus: border-accent, no ring, no glow, outline-none
|
|
238
|
+
- Transition: colors 150ms
|
|
239
|
+
- Disabled: cursor-not-allowed, opacity-50
|
|
240
|
+
- File input: special styling for file upload elements
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Special case (Final CTA inverted section):
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
- Background: transparent (to show inverted bg)
|
|
247
|
+
- Border: border-background/30 (semi-transparent white)
|
|
248
|
+
- Text: background color (inverted)
|
|
249
|
+
- Placeholder: background/50 (semi-transparent)
|
|
250
|
+
- Focus border: accent (stands out on white bg)
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Layout Strategy
|
|
256
|
+
|
|
257
|
+
### Container
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
maxWidth: 1200px (max-w-5xl)
|
|
261
|
+
padding: 24px mobile, 48px tablet, 64px desktop
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Section Spacing
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
py-20 (80px) - tight sections
|
|
268
|
+
py-28 (112px) - standard sections
|
|
269
|
+
py-40 (160px) - hero/CTA sections
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Grid Philosophy
|
|
273
|
+
|
|
274
|
+
- **Asymmetric grids**: 7/5 or 8/4 splits instead of 6/6
|
|
275
|
+
- **Staggered alignment**: Elements don't always align top
|
|
276
|
+
- **Text columns**: max-w-2xl for readability, but headlines can span full width
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Effects & Animation
|
|
281
|
+
|
|
282
|
+
### Motion Philosophy
|
|
283
|
+
|
|
284
|
+
**Fast and decisive.** No bouncy easing. No playful delays. Movement is confident and direct.
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
duration: 150ms - micro-interactions (buttons, underlines)
|
|
288
|
+
duration: 200ms - standard transitions (FAQ accordion, colors)
|
|
289
|
+
duration: 500ms - image hover effects
|
|
290
|
+
easing: cubic-bezier(0.25, 0, 0, 1) - fast-out, crisp stop
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Specific Effects
|
|
294
|
+
|
|
295
|
+
**Link/Button interactions**:
|
|
296
|
+
|
|
297
|
+
- Underline scale animation (scale-x-0 to scale-x-100 on hover for ghost, scale-x-100 to scale-x-110 for primary)
|
|
298
|
+
- Text color transition (150ms)
|
|
299
|
+
- Active press feedback: translate-y-px for tactile response
|
|
300
|
+
- No scale, no glow, no bounce
|
|
301
|
+
|
|
302
|
+
**Card hover**:
|
|
303
|
+
|
|
304
|
+
- Border color lightens (border-hover token)
|
|
305
|
+
- Background color change on feature cards (transparent → muted)
|
|
306
|
+
- No lift, no shadow, no scale
|
|
307
|
+
|
|
308
|
+
**Image hover** (blog posts):
|
|
309
|
+
|
|
310
|
+
- Scale transform (scale-105) over 500ms
|
|
311
|
+
- Image only, not container
|
|
312
|
+
- Overflow hidden on container
|
|
313
|
+
|
|
314
|
+
**Page scroll animations** (Framer Motion):
|
|
315
|
+
|
|
316
|
+
- Fade in + slide up (opacity 0→1, translateY 20px→0) over 500ms
|
|
317
|
+
- Stagger children by 80ms with 100ms delay before first
|
|
318
|
+
- Viewport trigger: once only, 15% threshold, -50px margin
|
|
319
|
+
- Container stagger, individual fadeInUp variants
|
|
320
|
+
|
|
321
|
+
**FAQ accordion**:
|
|
322
|
+
|
|
323
|
+
- Height auto-animate with opacity fade
|
|
324
|
+
- 200ms duration with ease-out
|
|
325
|
+
- Icons swap (Plus ↔ Minus) instantly
|
|
326
|
+
|
|
327
|
+
**Step number hover** (How It Works):
|
|
328
|
+
|
|
329
|
+
- Color transition from border color to accent (fast, 150ms)
|
|
330
|
+
- No movement, pure color change
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Iconography
|
|
335
|
+
|
|
336
|
+
From `lucide-react`:
|
|
337
|
+
|
|
338
|
+
```
|
|
339
|
+
- Stroke width: 1.5px (thinner than default 2px for elegance)
|
|
340
|
+
- Sizes by context:
|
|
341
|
+
- 16px: inline with small text (arrows in buttons)
|
|
342
|
+
- 18px: FAQ toggle, footer social icons
|
|
343
|
+
- 20px: standard navbar icons
|
|
344
|
+
- 24px: feature section icons (28px on desktop)
|
|
345
|
+
- Color: currentColor (inherits from parent text color)
|
|
346
|
+
- Accent icons: explicitly text-[var(--accent)] class
|
|
347
|
+
- Style: Use sparingly—text labels are preferred
|
|
348
|
+
- Positioning: icons sit left of text in buttons, above text in feature cards
|
|
349
|
+
- Never use filled icons, always outline/stroke style
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Icon mapping by section:
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
Features: Users, Zap, BarChart3, Link, Shield, Headphones, Globe (from data.icon field)
|
|
356
|
+
Social: Twitter, Linkedin, Github
|
|
357
|
+
UI controls: Plus, Minus (FAQ), ArrowRight (CTAs), Check (pricing features)
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Responsive Strategy
|
|
363
|
+
|
|
364
|
+
**Mobile-first typography scaling**:
|
|
365
|
+
|
|
366
|
+
- Headlines: text-3xl (mobile) → text-4xl/5xl (tablet) → text-6xl/7xl/8xl (desktop)
|
|
367
|
+
- Hero headline specifically: text-4xl → text-5xl → text-6xl → text-7xl → text-8xl (progressive enhancement)
|
|
368
|
+
- Body text: text-base (16px) throughout with md:text-lg on key sections
|
|
369
|
+
- Maintain hierarchy ratio at all sizes
|
|
370
|
+
- Icon sizes: 16px-18px inline, 24px standard, scaling down on mobile
|
|
371
|
+
|
|
372
|
+
**Layout shifts**:
|
|
373
|
+
|
|
374
|
+
- Stats: 1 column → 2 columns (sm) → 4 columns (md)
|
|
375
|
+
- Features: 1 column → 2 columns (sm) → 3 columns (lg)
|
|
376
|
+
- Blog/Testimonials/Pricing: 1 column → 2 columns (sm) → 3 columns (lg)
|
|
377
|
+
- How It Works: stacked → 3-column grid with number|title|description (lg)
|
|
378
|
+
- Benefits: stacked → 2-column side-by-side (lg)
|
|
379
|
+
- Footer: 2 columns → 4 columns (md) → 5 columns (lg)
|
|
380
|
+
- Asymmetric grids collapse to stacked on mobile
|
|
381
|
+
|
|
382
|
+
**Spacing adjustments**:
|
|
383
|
+
|
|
384
|
+
- Section padding: py-20 (mobile) → py-28 (md) → py-32/40 (lg)
|
|
385
|
+
- Container padding: px-6 (mobile) → px-12 (md) → px-16 (lg)
|
|
386
|
+
- Gap spacing: gap-4 → gap-6 → gap-8 progression
|
|
387
|
+
- Internal card padding: p-6 (mobile) → p-8 (md+)
|
|
388
|
+
|
|
389
|
+
**Mobile-specific fixes**:
|
|
390
|
+
|
|
391
|
+
- Hide decorative overflow elements (large "01", "ACME" text) on mobile to prevent horizontal scroll
|
|
392
|
+
- Reduce decorative number sizes to prevent layout breaking
|
|
393
|
+
- Ensure touch targets are minimum 44x44px (buttons h-12 on mobile, h-14 on desktop)
|
|
394
|
+
- Stack email input + button on mobile, side-by-side on tablet+
|
|
395
|
+
- Adjust navigation gaps to be tighter on smaller screens
|
|
396
|
+
|
|
397
|
+
**Typography integrity**:
|
|
398
|
+
|
|
399
|
+
- Headlines scale smoothly with responsive classes (never one size for all)
|
|
400
|
+
- Keep letter-spacing consistent across breakpoints
|
|
401
|
+
- Ensure underlines remain visible and touchable (2px minimum)
|
|
402
|
+
- Line-height increases slightly for smaller screens for readability
|
|
403
|
+
- Max-width constraints on body text prevent overly long lines (max-w-xl, max-w-2xl, max-w-3xl)
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## Accessibility
|
|
408
|
+
|
|
409
|
+
**Contrast**:
|
|
410
|
+
|
|
411
|
+
- foreground (#FAFAFA) on background (#0A0A0A) = 18.1:1 ✓
|
|
412
|
+
- mutedForeground (#737373) on background = 5.3:1 ✓ (AA)
|
|
413
|
+
- accent (#FF3D00) on background = 5.4:1 ✓ (AA for large text)
|
|
414
|
+
|
|
415
|
+
**Focus states**:
|
|
416
|
+
|
|
417
|
+
- 2px accent outline
|
|
418
|
+
- 2px offset from element
|
|
419
|
+
- No glow, no fill change
|
|
420
|
+
- Visible on all interactive elements
|
|
421
|
+
|
|
422
|
+
**Typography**:
|
|
423
|
+
|
|
424
|
+
- Body text minimum 16px
|
|
425
|
+
- Line-height minimum 1.5 for body
|
|
426
|
+
- No thin weights below 400
|
|
427
|
+
|
|
428
|
+
**Interaction**:
|
|
429
|
+
|
|
430
|
+
- Touch targets minimum 44x44px
|
|
431
|
+
- Underlines are 2px+ for visibility
|
|
432
|
+
- Color is never the only indicator
|
|
433
|
+
`</design-system>`
|