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