get-shit-pretty 0.7.0 → 0.7.3

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 (112) hide show
  1. package/README.md +301 -124
  2. package/bin/install.js +1 -1
  3. package/gsp/agents/gsp-accessibility-auditor.md +1 -60
  4. package/gsp/agents/gsp-brand-auditor.md +1 -61
  5. package/gsp/agents/gsp-brand-creative-director.md +10 -0
  6. package/gsp/agents/gsp-brand-engineer.md +1 -122
  7. package/gsp/agents/gsp-brand-researcher.md +11 -0
  8. package/gsp/agents/gsp-brand-strategist.md +1 -65
  9. package/gsp/agents/gsp-project-builder.md +17 -0
  10. package/gsp/agents/gsp-project-critic.md +11 -0
  11. package/gsp/agents/gsp-project-designer.md +11 -0
  12. package/gsp/agents/gsp-project-researcher.md +1 -74
  13. package/gsp/agents/gsp-project-reviewer.md +12 -0
  14. package/gsp/hooks/hooks.json +32 -14
  15. package/gsp/skills/get-shit-pretty/SKILL.md +2 -5
  16. package/gsp/skills/gsp-accessibility/SKILL.md +0 -1
  17. package/gsp/skills/gsp-accessibility-audit/SKILL.md +9 -8
  18. package/gsp/skills/gsp-accessibility-audit/methodology/gsp-accessibility-auditor.md +59 -0
  19. package/gsp/skills/gsp-add-reference/SKILL.md +0 -1
  20. package/gsp/skills/gsp-art/SKILL.md +13 -10
  21. package/gsp/skills/gsp-brand-audit/SKILL.md +4 -2
  22. package/gsp/skills/gsp-brand-audit/methodology/gsp-brand-auditor.md +61 -0
  23. package/gsp/skills/gsp-brand-brief/SKILL.md +129 -0
  24. package/gsp/skills/gsp-brand-guidelines/SKILL.md +13 -11
  25. package/gsp/skills/gsp-brand-guidelines/methodology/gsp-brand-engineer.md +122 -0
  26. package/gsp/skills/gsp-brand-identity/SKILL.md +19 -18
  27. package/gsp/{agents/gsp-creative-director.md → skills/gsp-brand-identity/methodology/gsp-brand-creative-director.md} +0 -9
  28. package/gsp/skills/gsp-brand-refine/SKILL.md +0 -1
  29. package/gsp/skills/gsp-brand-research/SKILL.md +13 -13
  30. package/gsp/{agents/gsp-researcher.md → skills/gsp-brand-research/methodology/gsp-brand-researcher.md} +0 -10
  31. package/gsp/skills/gsp-brand-strategy/SKILL.md +14 -14
  32. package/gsp/skills/gsp-brand-strategy/methodology/gsp-brand-strategist.md +65 -0
  33. package/gsp/skills/gsp-brand-sync/SKILL.md +60 -10
  34. package/gsp/skills/gsp-color/SKILL.md +0 -1
  35. package/gsp/skills/gsp-design-system/SKILL.md +0 -1
  36. package/gsp/skills/gsp-doctor/SKILL.md +0 -1
  37. package/gsp/skills/gsp-help/SKILL.md +10 -7
  38. package/gsp/skills/gsp-icons/SKILL.md +0 -1
  39. package/gsp/skills/gsp-logo/SKILL.md +0 -1
  40. package/gsp/skills/gsp-phase-transition/SKILL.md +0 -3
  41. package/gsp/skills/gsp-pretty/SKILL.md +25 -24
  42. package/gsp/skills/gsp-progress/SKILL.md +0 -1
  43. package/gsp/skills/gsp-project-brief/SKILL.md +51 -22
  44. package/gsp/skills/gsp-project-build/SKILL.md +216 -74
  45. package/gsp/skills/gsp-project-build/bento-grid.md +114 -0
  46. package/gsp/{agents/gsp-builder.md → skills/gsp-project-build/methodology/gsp-project-builder.md} +14 -16
  47. package/gsp/skills/gsp-project-critique/SKILL.md +21 -17
  48. package/gsp/{agents/gsp-critic.md → skills/gsp-project-critique/methodology/gsp-project-critic.md} +0 -11
  49. package/gsp/skills/gsp-project-design/SKILL.md +9 -6
  50. package/gsp/{agents/gsp-designer.md → skills/gsp-project-design/methodology/gsp-project-designer.md} +0 -11
  51. package/gsp/skills/gsp-project-research/SKILL.md +4 -2
  52. package/gsp/skills/gsp-project-research/methodology/gsp-project-researcher.md +73 -0
  53. package/gsp/skills/gsp-project-review/SKILL.md +8 -5
  54. package/gsp/{agents/gsp-reviewer.md → skills/gsp-project-review/methodology/gsp-project-reviewer.md} +0 -12
  55. package/gsp/skills/gsp-scaffold/SKILL.md +0 -1
  56. package/gsp/skills/gsp-start/SKILL.md +59 -210
  57. package/gsp/skills/gsp-style/SKILL.md +1 -2
  58. package/gsp/skills/gsp-style/styles/INDEX.yml +7 -1
  59. package/gsp/skills/gsp-style/styles/academia.md +751 -787
  60. package/gsp/skills/gsp-style/styles/art-deco.md +316 -352
  61. package/gsp/skills/gsp-style/styles/bauhaus.md +189 -225
  62. package/gsp/skills/gsp-style/styles/bold-typography.md +433 -469
  63. package/gsp/skills/gsp-style/styles/botanical.md +141 -177
  64. package/gsp/skills/gsp-style/styles/claymorphism.md +377 -413
  65. package/gsp/skills/gsp-style/styles/cyberpunk.md +419 -455
  66. package/gsp/skills/gsp-style/styles/enterprise.md +224 -260
  67. package/gsp/skills/gsp-style/styles/flat-design.md +119 -155
  68. package/gsp/skills/gsp-style/styles/fluent.md +0 -31
  69. package/gsp/skills/gsp-style/styles/glassmorphism.md +0 -36
  70. package/gsp/skills/gsp-style/styles/humanist-literary.md +0 -28
  71. package/gsp/skills/gsp-style/styles/industrial.md +406 -438
  72. package/gsp/skills/gsp-style/styles/kinetic.md +531 -563
  73. package/gsp/skills/gsp-style/styles/liquid-glass.md +0 -36
  74. package/gsp/skills/gsp-style/styles/luxury.md +402 -438
  75. package/gsp/skills/gsp-style/styles/material.md +555 -591
  76. package/gsp/skills/gsp-style/styles/maximalism.md +875 -911
  77. package/gsp/skills/gsp-style/styles/minimal-dark.md +442 -478
  78. package/gsp/skills/gsp-style/styles/modern-dark.md +390 -426
  79. package/gsp/skills/gsp-style/styles/monochrome.md +472 -504
  80. package/gsp/skills/gsp-style/styles/neubrutalism.md +354 -390
  81. package/gsp/skills/gsp-style/styles/neumorphism.md +195 -231
  82. package/gsp/skills/gsp-style/styles/newsprint.md +529 -565
  83. package/gsp/skills/gsp-style/styles/nothing.md +445 -0
  84. package/gsp/skills/gsp-style/styles/nothing.yml +146 -0
  85. package/gsp/skills/gsp-style/styles/organic.md +177 -213
  86. package/gsp/skills/gsp-style/styles/playful-geometric.md +211 -247
  87. package/gsp/skills/gsp-style/styles/professional.md +503 -539
  88. package/gsp/skills/gsp-style/styles/retro.md +664 -700
  89. package/gsp/skills/gsp-style/styles/saas.md +490 -526
  90. package/gsp/skills/gsp-style/styles/sketch.md +189 -225
  91. package/gsp/skills/gsp-style/styles/swiss-minimalist.md +195 -227
  92. package/gsp/skills/gsp-style/styles/terminal.md +99 -135
  93. package/gsp/skills/gsp-style/styles/vaporwave.md +356 -392
  94. package/gsp/skills/gsp-style/styles/web3.md +337 -373
  95. package/gsp/skills/gsp-typography/SKILL.md +0 -1
  96. package/gsp/skills/gsp-update/SKILL.md +0 -1
  97. package/gsp/skills/gsp-visuals/SKILL.md +0 -1
  98. package/gsp/templates/branding/config.json +3 -2
  99. package/gsp/templates/exports-index.md +0 -7
  100. package/gsp/templates/phases/build.md +13 -4
  101. package/gsp/templates/projects/config.json +3 -2
  102. package/gsp/templates/projects/roadmap.md +0 -7
  103. package/gsp/templates/projects/state.md +0 -4
  104. package/package.json +1 -1
  105. package/scripts/lint-check.sh +1 -1
  106. package/gsp/agents/gsp-ascii-artist.md +0 -66
  107. package/gsp/agents/gsp-brand-syncer.md +0 -126
  108. package/gsp/agents/gsp-campaign-director.md +0 -79
  109. package/gsp/agents/gsp-scoper.md +0 -85
  110. package/gsp/skills/gsp-launch/SKILL.md +0 -97
  111. package/gsp/skills/gsp-start/questioning.md +0 -87
  112. package/gsp/templates/phases/launch.md +0 -55
@@ -1,563 +1,531 @@
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
- - Identify the tech stack (e.g. React, Next.js, Vue, Tailwind, shadcn/ui, etc.).
6
- - Understand the existing design tokens (colors, spacing, typography, radii, shadows), global styles, and utility patterns.
7
- - Review the current component architecture (atoms/molecules/organisms, layout primitives, etc.) and naming conventions.
8
- - Note any constraints (legacy CSS, design library in use, performance or bundle-size considerations).
9
-
10
- Ask the user focused questions to understand the user's goals. Do they want:
11
- - a specific component or page redesigned in the new style,
12
- - existing components refactored to the new system, or
13
- - new pages/features built entirely in the new style?
14
-
15
- Once you understand the context and scope, do the following:
16
- - Propose a concise implementation plan that follows best practices, prioritizing:
17
- - centralizing design tokens,
18
- - reusability and composability of components,
19
- - minimizing duplication and one-off styles,
20
- - long-term maintainability and clear naming.
21
- - When writing code, match the user’s existing patterns (folder structure, naming, styling approach, and component patterns).
22
- - Explain your reasoning briefly as you go, so the user understands *why* you’re making certain architectural or design choices.
23
-
24
- Always aim to:
25
- - Preserve or improve accessibility.
26
- - Maintain visual consistency with the provided design system.
27
- - Leave the codebase in a cleaner, more coherent state than you found it.
28
- - Ensure layouts are responsive and usable across devices.
29
- - 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.
30
-
31
- </role>
32
-
33
- <design-system>
34
- # Design Style: Kinetic Typography
35
-
36
- ## Design Philosophy
37
-
38
- **Core Principle**: Typography is not decoration—it is the entire visual structure. Text becomes image, headline becomes hero, motion becomes rhythm. This style rejects static layouts completely. Every element should feel alive through constant motion (marquees), reactive motion (hover states), or scroll-triggered motion (parallax, scale transforms). The page pulses with kinetic energy—nothing is ever truly still.
39
-
40
- **Aesthetic Vibe**: High-energy brutalism meets kinetic poster design. Confidence through scale. Urgency through motion. Clarity through contrast. The design screams rather than whisperseverything is uppercase, oversized, and in-your-face. It's a poster come to life, with the raw energy of street art and the precision of Swiss typography, but animated and interactive. Think music festival posters, protest graphics, and underground zines translated to the web.
41
-
42
- **Visual DNA**: This style is instantly recognizable by its relentless motion and aggressive scale. Marquees scroll endlessly. Numbers tower at 8-12rem. Headlines use viewport units (clamp-based for control). Every hover state is dramatic—cards flood with color, text translates across the screen, borders glow with accent hues. The aesthetic is deliberately excessive: if traditional web design uses 2x scale difference between headline and body, this uses 10x. Where others add subtle shadows, this style stays brutally flat with sharp borders and hard edges.
43
-
44
- **Signature Elements**:
45
- - Infinite marquees that never stop moving (react-fast-marquee, no gradients)
46
- - Viewport-responsive typography using clamp() for fluid scaling (clamp(3rem,12vw,14rem))
47
- - Aggressive uppercase treatment on ALL display text (headings, buttons, labels)
48
- - Massive numerical elements (6rem-12rem) used as decorative graphic shapes
49
- - Hard color inversions on hover (background to accent yellow, text to black, instant transitions)
50
- - Scroll-triggered scale and opacity transforms (Framer Motion useScroll hook)
51
- - Sharp 2px borders with 0px border-radius (brutalist geometry)
52
- - Hairline gap-px grid dividers creating connected card systems
53
-
54
- ## Design Token System (The DNA)
55
-
56
- ### Color Architecture
57
-
58
- **Foundation Colors**:
59
- - `background`: `#09090B` (Rich black, not pure black—softer on eyes)
60
- - `foreground`: `#FAFAFA` (Off-white, not pure white—less harsh)
61
- - `muted`: `#27272A` (Dark gray for secondary surfaces)
62
- - `muted-foreground`: `#A1A1AA` (Zinc 400 for body text and descriptions)
63
-
64
- **Accent Strategy**:
65
- - `accent`: `#DFE104` (Acid yellow/lime—high energy, highly visible)
66
- - `accent-foreground`: `#000000` (Pure black for contrast on accent)
67
- - `border`: `#3F3F46` (Zinc 700—subtle structural lines)
68
-
69
- **Color Usage Patterns**:
70
- - Use acid yellow sparingly but boldly (hero text highlights, hover states, focus rings, marquee backgrounds)
71
- - Muted foreground (Zinc 400) for all secondary text—never use plain gray
72
- - Border color for ALL structural lines—never use foreground color for borders
73
- - Background numbers and inactive elements in `muted` (#27272A) to create depth layers
74
- - Selection highlight: Yellow background with black text
75
-
76
- **Contrast Requirements**:
77
- - Primary text to background: Minimum 15:1 ratio (off-white on rich black)
78
- - Accent to background: Must be vibrant and eye-catching
79
- - Never use mid-range grays—stay at the contrast extremes
80
-
81
- ### Typography System
82
-
83
- **Font Selection**:
84
- - Primary: "Space Grotesk" (preferred—strong geometric shapes, excellent at large sizes)
85
- - Fallback: "Inter" (if Space Grotesk unavailable)
86
- - Both should support variable font weights if possible (300-700 range)
87
-
88
- **Scale Hierarchy** (using Tailwind classes with responsive scaling):
89
- - **Hero/Display**: `text-[clamp(3rem,12vw,14rem)]` (fluid viewport-based scaling with safe minimums)
90
- - **Section Headings**: `text-5xl md:text-7xl lg:text-8xl` or `text-[clamp(2.5rem,8vw,6rem)]` for ultra-massive headings
91
- - **Card Titles**: `text-2xl md:text-3xl lg:text-6xl` (responsive scaling from mobile to desktop)
92
- - **Body/Descriptions**: `text-lg md:text-xl lg:text-2xl` (18-24px—larger than typical web, responsive)
93
- - **Small Labels**: `text-xs md:text-sm lg:text-lg` (12-18px, responsive)
94
- - **Massive Numbers** (decorative): `text-[6rem] md:text-[8rem]` to `text-[8rem] md:text-[12rem]` (responsive massive scale)
95
- - **Navigation/Micro**: `text-sm md:text-base` (14-16px)
96
-
97
- **Type Treatment Rules**:
98
- - ALL display text (headings, buttons, labels) must be uppercase
99
- - Body text and descriptions stay in normal case for readability
100
- - Tracking: Use `tracking-tighter` on large display text, `tracking-tight` on body, `tracking-wide` or `tracking-widest` on small labels
101
- - Leading: `leading-[0.8]` or `leading-none` for display headlines to create tight, graphic lockups
102
- - Leading: `leading-tight` for large body text (xl-2xl)
103
- - Font weight: Bold (700) for all headings and buttons, Medium (500) for body, Regular (400) for secondary text
104
-
105
- **Font Size Relationships**:
106
- - Headlines are 3-5x larger than body text (not 1.5-2x like traditional web)
107
- - Numbers as graphics are 4-8x larger than accompanying labels
108
- - Decorative background text is 2-3x larger than foreground text in same context
109
-
110
- ### Spacing & Layout
111
-
112
- **Base Unit**: 4px (Tailwind's default spacing scale)
113
-
114
- **Vertical Rhythm**:
115
- - Section padding: `py-32` (128px top/bottom) for major sections
116
- - Card/Container padding: `p-8` to `p-12` (32-48px)
117
- - Element gaps within containers: `gap-8` (32px)
118
- - Tight element groups: `gap-4` (16px)
119
- - Between large display elements: `mb-4` to `mb-8` (16-32px)
120
-
121
- **Horizontal Containment**:
122
- - Maximum width: `max-w-[95vw]` or `max-w-[90vw]`—push to the edges
123
- - Never use standard `max-w-7xl` or similar—too conservative for this style
124
- - Specific content widths: `max-w-2xl` (672px) for long-form text blocks
125
- - Full bleed for marquees and dramatic sections
126
-
127
- **Padding Relationships**:
128
- - Cards: Equal padding all sides (p-8 or p-12) OR asymmetric with more top/bottom than left/right
129
- - Buttons: Horizontal padding 2-3x vertical (e.g., px-8 py-4)
130
- - Inputs: Minimal horizontal padding (px-0 or px-2), more vertical for touch targets
131
-
132
- **Grid Patterns**:
133
- - Three-column grids for step processes (md:grid-cols-3)
134
- - Single column on mobile, maintain drama with large text
135
- - Use `gap-px` with colored backgrounds to create hairline grid dividers
136
- - Pricing typically uses three equal columns (lg:grid-cols-3)
137
-
138
- ### Shape Language
139
-
140
- **Border Radius**:
141
- - Default: `0px` (completely sharp corners)
142
- - Exception: Rare use of `rounded-sm` (2px) for subtle softening on small elements
143
- - Never use rounded-lg or higher—destroys the brutalist aesthetic
144
-
145
- **Border Styling**:
146
- - Width: `border-2` (2px) for structural emphasis, `border` (1px) for subtle dividers
147
- - Style: Always solid, never dashed or dotted
148
- - Color: Use `border-[#3F3F46]` consistently
149
- - Border-only elements: Use `border-b-2` for input underlines, `border-l-4` for quote accents
150
-
151
- **Shadows & Depth**:
152
- - **NO drop shadows**—this style is completely flat
153
- - Depth created through color layering (muted background elements behind foreground)
154
- - Use massive background numbers in muted tones to create visual depth
155
- - Overlapping elements instead of shadow for hierarchy
156
-
157
- **Visual Dividers**:
158
- - Prefer borders over shadows
159
- - Use full-width border-top/border-bottom at section breaks
160
- - Grid gap patterns: `gap-px` with colored container creates hairline dividers
161
-
162
- ### Texture & Overlay
163
-
164
- **Noise Texture**:
165
- - SVG-based feTurbulence filter (baseFrequency 0.8, numOctaves 4)
166
- - Fixed position, full viewport coverage
167
- - Opacity: `opacity-[0.03]` (barely visible)
168
- - Blend mode: `mix-blend-overlay`
169
- - Purpose: Adds subtle print/poster texture without affecting readability
170
-
171
- **Background Treatments**:
172
- - Solid colors only—no gradients
173
- - Accent color used for full-section backgrounds (stats marquee, footer)
174
- - Muted color for card hover backgrounds before accent flip
175
-
176
- **Blend Modes**:
177
- - Use `mix-blend-difference` or `mix-blend-exclusion` sparingly for text over images
178
- - Apply to custom cursors or special text treatments
179
- - Not part of the core style in current implementation but suggested for advanced implementations
180
-
181
- ## Component Styling Principles
182
-
183
- ### Buttons
184
-
185
- **Base Styling**:
186
- - Always uppercase text with tight tracking (`uppercase tracking-tighter`)
187
- - Font weight: Bold (700)
188
- - Sharp corners (rounded-none)
189
- - Height: Default 56px (h-14), Small 40px (h-10), Large 80px (h-20)
190
- - Horizontal padding 2x height: Default px-8, Small px-4, Large px-12
191
-
192
- **Variant Patterns**:
193
-
194
- **Primary (Accent)**:
195
- - Background: Acid yellow (#DFE104)
196
- - Text: Black
197
- - Hover: Scale up 1.05 (`hover:scale-105`)
198
- - Active: Scale down 0.95 (`active:scale-95`)
199
- - Transition: `transition-all` for smooth scale
200
-
201
- **Outline**:
202
- - Border: 2px solid zinc-700 (#3F3F46)
203
- - Background: Transparent
204
- - Text: Off-white
205
- - Hover: Full fill with off-white background, text inverts to black
206
- - Hard transition (instant color flip)
207
-
208
- **Ghost**:
209
- - No border, no background
210
- - Text: Off-white
211
- - Hover: Text color changes to accent yellow
212
- - Minimal, subtle variant
213
-
214
- **Advanced Interactions** (not implemented but suggested):
215
- - Marquee effect: Text inside button scrolls horizontally on hover
216
- - Character-by-character color fill on hover (left to right)
217
-
218
- ### Cards & Containers
219
-
220
- **Base Structure**:
221
- - Border: 2px solid zinc-700 (`border-2 border-[#3F3F46]`)
222
- - Background: Rich black (#09090B)
223
- - Padding: Large and even (p-8 or p-12)
224
- - No border-radius (sharp corners)
225
-
226
- **Hover Behavior**:
227
- - Background floods with accent color (#DFE104)
228
- - Border color changes to accent
229
- - All text inverts to black
230
- - Transition: `duration-300` for smooth but noticeable shift
231
- - Use group classes to coordinate text color changes
232
-
233
- **Content Hierarchy Within Cards**:
234
- - Large title at top (text-3xl) in foreground color → black on hover
235
- - Description text in muted-foreground black with reduced opacity on hover
236
- - Decorative numbers or icons in muted tone black on hover
237
-
238
- **Sticky Card Pattern** (Features Section):
239
- - Each card uses `sticky top-32` positioning
240
- - Cards stack and overlap as user scrolls
241
- - Later cards appear to slide over earlier ones
242
- - Maintains visual rhythm through repetition
243
-
244
- ### Inputs & Forms
245
-
246
- **Base Styling**:
247
- - Height: Extra tall (h-24 / 96px) for dramatic scale
248
- - Border: Bottom border only (`border-b-2`)
249
- - Border color: Zinc-700 default, accent on focus
250
- - Background: Transparent
251
- - Text: Extra large (text-4xl), bold, uppercase, tight tracking
252
- - Padding: Minimal horizontal (px-0), standard vertical for alignment
253
-
254
- **Focus States**:
255
- - Border-bottom changes to accent yellow
256
- - No outline ring—border serves as focus indicator
257
- - Instant color change (no transition needed)
258
-
259
- **Placeholder Styling**:
260
- - Muted color (#27272A)—very subtle
261
- - Same size and style as input text
262
- - Uppercase to match input
263
- - Low contrast ensures actual input stands out
264
-
265
- **Form Layout**:
266
- - Full width inputs (w-full)
267
- - Generous vertical spacing between fields (space-y-8)
268
- - Labels (if used) should be small, uppercase, tracked-wide, above input
269
-
270
- ### Interactive States
271
-
272
- **Hover Transformations**:
273
- - Scale: Buttons scale to 1.05, cards stay at scale 1.0
274
- - Translation: Benefit titles translate horizontally (`translate-x-8`)
275
- - Color Floods: Cards completely invert color scheme
276
- - Opacity Reveals: Hidden descriptions fade in (opacity-0 to opacity-100)
277
- - All transitions use `duration-300` for consistent feel
278
-
279
- **Focus States**:
280
- - Inputs: Border color change to accent
281
- - Buttons: Same as hover (scale) plus visible focus ring in accent color
282
- - Links: Underline in accent color or text color change
283
-
284
- **Active States**:
285
- - Buttons: Scale down to 0.95 (`active:scale-95`) for tactile feedback
286
- - Links: Slight opacity reduction
287
-
288
- **Disabled States**:
289
- - Opacity: 50% (`disabled:opacity-50`)
290
- - Pointer events: None (`disabled:pointer-events-none`)
291
- - Maintain all other styling—just reduce visibility
292
-
293
- ## Animation & Motion System
294
-
295
- ### Marquee Motion
296
-
297
- **Implementation**: Use `react-fast-marquee` library for smooth, GPU-accelerated marquees
298
-
299
- **Stats Marquee** (High Energy):
300
- - Speed: 80 (fast)
301
- - Direction: Left to right
302
- - Gradient: false (no edge fade)
303
- - AutoFill: true (repeats content infinitely)
304
- - Content: Large numbers paired with labels and decorative symbols
305
-
306
- **Testimonials Marquee** (Slower Rhythm):
307
- - Speed: 40 (medium)
308
- - Direction: Left to right
309
- - Gradient: false
310
- - Content: Wide cards with quotes, generous spacing between items
311
-
312
- **Timing Rules**:
313
- - Never use gradients—raw edge is part of aesthetic
314
- - Fast marquees (speed 60-100) for stats and high-energy content
315
- - Slower marquees (speed 30-50) for reading content like testimonials
316
- - All marquees use linear easing (no acceleration/deceleration)
317
-
318
- ### Scroll-Triggered Animations
319
-
320
- **Hero Parallax** (Framer Motion):
321
- - Track scroll progress: `useScroll()` hook
322
- - Scale transform: 1.0 → 1.2 as user scrolls (0-20% of page)
323
- - Opacity: 1.0 → 0 as user scrolls out
324
- - Creates dramatic zoom-out effect as user enters content
325
-
326
- **Sticky Scroll Cards**:
327
- - Position: `sticky top-32`
328
- - No transform animations—physical stacking creates effect
329
- - Cards remain in place as subsequent cards slide over them
330
-
331
- **Entrance Animations** (Suggested, not in current implementation):
332
- - Elements scale from 0.8 to 1.0 as they enter viewport
333
- - Text can "unmask" by animating from clipped to full visibility
334
- - Use intersection observer or Framer Motion `whileInView`
335
-
336
- ### Micro-Interactions
337
-
338
- **Button Interactions**:
339
- - Hover: Scale 1.05 with all easing
340
- - Active: Scale 0.95
341
- - Transition timing: 200-300ms
342
- - Easing: Default ease-in-out
343
-
344
- **Card Hover**:
345
- - Color transition: 300ms
346
- - Hard flip, not gradual (suits the brutalist aesthetic)
347
- - All child text coordinates color change via group classes
348
-
349
- **Accordion Expansion** (FAQ):
350
- - Height: Animate from 0 to auto
351
- - Opacity: Fade in content (0 to 1)
352
- - Timing: Smooth with slight bounce (framer motion spring)
353
- - Initial: false (doesn't animate on mount)
354
-
355
- **Text Reveals**:
356
- - Benefit descriptions: Opacity 0 to 1, duration 300ms
357
- - Benefit titles: Horizontal translate + duration 300ms
358
- - Both triggered simultaneously on hover
359
-
360
- ### Easing & Timing
361
-
362
- **Default Durations**:
363
- - Micro-interactions (hovers, focus): 200-300ms
364
- - Section animations: 500-800ms
365
- - Marquees: Continuous linear (no easing)
366
-
367
- **Easing Functions**:
368
- - Buttons and scale effects: `ease-in-out` (default)
369
- - Marquees: `linear` (constant speed)
370
- - Accordion: Spring physics from Framer Motion
371
- - Parallax: Linear mapping from scroll position
372
-
373
- **Performance Notes**:
374
- - Prefer transforms (scale, translate) over position changes
375
- - Use opacity instead of visibility for reveals
376
- - Marquees should use transform: translateX for GPU acceleration
377
- - Keep animations at 60fps—avoid complex calculations in scroll handlers
378
-
379
- ## Layout Principles
380
-
381
- ### Grid Philosophy
382
-
383
- **Break the Grid**: This style embraces asymmetry and overlap. Elements can:
384
- - Extend beyond their containers
385
- - Overlap previous elements (sticky scroll)
386
- - Use uneven column widths
387
- - Break alignment for dramatic effect
388
-
389
- **Standard Patterns**:
390
- - Single column mobile (always)
391
- - Two column for benefits/features on tablet (md)
392
- - Three column for pricing/steps on desktop (lg)
393
- - Four column for footer navigation
394
-
395
- **Grid Gaps**:
396
- - Standard: `gap-8` (32px) between major elements
397
- - Hairline: `gap-px` with colored container background for connected cards
398
- - Wide: `gap-12` to `gap-24` for breathing room in dense sections
399
-
400
- ### Section Flow
401
-
402
- **Vertical Rhythm**:
403
- - Major sections: `py-32` (128px) top and bottom
404
- - Subsections: `py-20` (80px)
405
- - Dense content areas: `py-12` (48px)
406
-
407
- **Section Dividers**:
408
- - Full-width border-top or border-bottom in zinc-700
409
- - Accent color background flips (black section → yellow section)
410
- - Contrast creates natural breaks without needing extra space
411
-
412
- **Content Width Strategy**:
413
- - Hero: Max-w-[95vw]—push to edges
414
- - Body content: Max-w-5xl or max-w-6xl
415
- - Long-form text: Max-w-2xl or max-w-xl for readability
416
- - Marquees: Full bleed (w-full, no max-width)
417
-
418
- ### Responsive Approach
419
-
420
- **Mobile-First Strategy**:
421
- - **Maintain drama**: Keep large text using clamp() values for safe scaling (e.g., `clamp(3rem,12vw,14rem)`)
422
- - **Stack everything vertically**: Single column layouts with `flex-col` and `md:flex-row` patterns
423
- - **Reduce padding progressively**: `p-8 md:p-12`, `py-20 md:py-32`, `px-4 md:px-8`
424
- - **Marquees persist**: Essential to the style—keep them at all breakpoints
425
- - **Touch targets**: Minimum 44x44px (h-10 w-10 for icon containers, h-14 for buttons)
426
- - **Adapt hover effects**: Show descriptions always on mobile (opacity-100), hide on desktop (md:opacity-0) then reveal on hover
427
- - **Sticky positioning**: Adjust top values (`top-24 md:top-32`) to account for nav height
428
- - **Grid simplification**: 1 column → `md:grid-cols-2` → `lg:grid-cols-3`
429
-
430
- **Breakpoints** (Tailwind defaults):
431
- - **Mobile**: Base styles (320px-767px) - Single column, reduced text sizes, full-width elements
432
- - **Tablet (md)**: 768px+ - Two-column layouts, medium text scaling, increased padding
433
- - **Desktop (lg)**: 1024px+ - Three-column layouts, full dramatic scale, all hover effects active
434
-
435
- **Text Scaling Best Practices**:
436
- - **Use clamp()** for hero and massive headings: `text-[clamp(3rem,12vw,14rem)]`
437
- - **Use responsive utilities** for section headings: `text-5xl md:text-7xl lg:text-8xl`
438
- - **Use responsive utilities** for body text: `text-lg md:text-xl lg:text-2xl`
439
- - **Use responsive utilities** for massive numbers: `text-[6rem] md:text-[8rem]` or `text-[8rem] md:text-[12rem]`
440
- - Always test at 320px, 768px, 1024px, and 1440px+ widths
441
-
442
- ## The "Bold Factor" (Non-Generic Signatures)
443
-
444
- These elements MUST be present to achieve the Kinetic Typography aesthetic:
445
-
446
- 1. **Viewport-Width Typography**: At least one headline must use viewport-width units (10vw+). This creates immediate scale and drama.
447
-
448
- 2. **Active Marquees**: At least two sections should use infinite scrolling marquees. One fast (stats), one slower (testimonials). No gradient edges.
449
-
450
- 3. **Massive Background Numbers**: Use oversized numbers (8rem-12rem) in muted tones as decorative background elements. They become graphic shapes, not just text.
451
-
452
- 4. **Hard Color Inversions**: Cards or sections that completely flip color scheme on hover (black → yellow background, white → black text). The transition should be clean, not gradual.
453
-
454
- 5. **Uppercase Display Treatment**: All headings, buttons, and labels in uppercase with tight tracking. This creates the poster-like, bold aesthetic.
455
-
456
- 6. **Aggressive Scale Hierarchy**: The difference between largest and smallest text should be 8-10x, not the typical 2-3x. Body text at 20-24px, headlines at 160-200px+.
457
-
458
- 7. **Minimal Border Styling**: Sharp corners (0px radius) and 2px borders in subtle zinc tones. Flat, no shadows. Brutalist structure.
459
-
460
- **What Makes it Instantly Recognizable**:
461
- - The constant motion (marquees never stop)
462
- - The screaming scale (text fills the screen)
463
- - The high contrast (near-black and off-white with acid yellow)
464
- - The uppercase lockup (everything yells)
465
-
466
- If these elements are removed or softened, the design becomes generic modern dark mode.
467
-
468
- ## Anti-Patterns (What to Avoid)
469
-
470
- **Color Mistakes**:
471
- - Never use pure black (#000000) or pure white (#FFFFFF)too harsh
472
- - Don't use soft pastels or mid-tone colorsbreaks the high-contrast system
473
- - Avoid gradients on backgrounds—this style is flat
474
- - Don't use multiple accent colors—acid yellow only
475
-
476
- **Typography Errors**:
477
- - Don't use serif fonts or script fontskills the brutalist vibe
478
- - Never use small text for headings (<text-3xl)—loses the bold factor
479
- - Avoid mixed case in display text—uppercase is mandatory
480
- - Don't use normal or wide tracking on large text—always tighter
481
-
482
- **Layout Mistakes**:
483
- - Don't center-align body text—left-align for readability
484
- - Avoid small max-widths (max-w-4xl)—content should feel wide
485
- - Don't use standard section padding (py-16)—go bigger (py-32)
486
- - Never nest containers with conflicting max-widths
487
-
488
- **Animation Mistakes**:
489
- - Don't add drop shadow animations—stay flat
490
- - Avoid slow, gentle transitions (800ms+)—this style is snappy
491
- - Never stop the marquees or add pause-on-hover—motion is constant
492
- - Don't use bounce or elastic easing on everything—reserve for specific elements
493
-
494
- **Shape & Style Errors**:
495
- - Never add border-radius above 2px—sharp corners are essential
496
- - Don't use subtle borders (<1px)—go for 2px or border-bottom only
497
- - Avoid soft shadowsthis style has no depth effects
498
- - Don't use opacity for hierarchy—use color contrast
499
-
500
- **Component Mistakes**:
501
- - Don't make buttons small and subtle—they should be bold and large
502
- - Avoid input fields that look traditional—oversized is key
503
- - Don't use cards with heavy padding and rounded corners—minimal, sharp
504
- - Never use subtle hover states—changes should be dramatic
505
-
506
- **Accessibility Violations**:
507
- - Don't ignore motion preferences—respect prefers-reduced-motion
508
- - Avoid color as the only indicator—ensure sufficient contrast
509
- - Don't make click targets too small—maintain 44px minimum
510
- - Never sacrifice readability for style—body text should be large and clear
511
-
512
- ## Accessibility Considerations
513
-
514
- **Color Contrast**:
515
- - Off-white (#FAFAFA) on rich black (#09090B): ~15:1 ratio (exceeds WCAG AAA)
516
- - Accent yellow (#DFE104) on rich black: ~12:1 ratio (exceeds WCAG AAA)
517
- - Muted foreground (#A1A1AA) on rich black: ~6:1 ratio (meets WCAG AA for large text)
518
- - Accent with black text: ~14:1 ratio (exceeds WCAG AAA)
519
-
520
- **Motion Preferences**:
521
- - Wrap all marquees in `@media (prefers-reduced-motion: no-preference)`
522
- - Provide static fallback: show content without scrolling
523
- - Disable scroll-triggered animations for users who prefer reduced motion
524
- - Maintain layout and hierarchy without motion
525
-
526
- **Focus Indicators**:
527
- - Accent-colored border or ring on focus
528
- - Minimum 2px visible indicator
529
- - Never remove focus styles—make them obvious
530
- - Scale changes on buttons provide additional tactile feedback
531
-
532
- **Keyboard Navigation**:
533
- - All interactive elements must be focusable
534
- - Accordion items should expand/collapse with Enter or Space
535
- - Marquee content should be navigable via keyboard if interactive
536
- - Skip links to main content if navigation is complex
537
-
538
- **Screen Reader Considerations**:
539
- - Noise texture SVG includes `<title>` element
540
- - Decorative background numbers should have `aria-hidden="true"`
541
- - Marquees need `aria-live` attributes if content updates
542
- - Accordion state (expanded/collapsed) should be announced
543
-
544
- **Touch Targets**:
545
- - Minimum 44x44px for all interactive elements
546
- - Buttons exceed this (default 56px height)
547
- - Adequate spacing between clickable items (16px+)
548
- - Large input fields (96px height) easy to tap
549
-
550
- **Readability**:
551
- - Body text larger than standard web (20-24px vs 16px)
552
- - High contrast throughout
553
- - Left-aligned paragraphs for easier reading
554
- - Generous line-height (leading-tight = 1.25) for large text
555
-
556
- **Testing Checklist**:
557
- - Test with screen reader (NVDA, JAWS, VoiceOver)
558
- - Verify keyboard-only navigation
559
- - Check with prefers-reduced-motion enabled
560
- - Validate color contrast with tools (Stark, axe DevTools)
561
- - Test at 200% zoom level
562
- - Verify touch targets on mobile devices
563
- </design-system>
1
+ <design-system>
2
+ # Design Style: Kinetic Typography
3
+
4
+ ## Design Philosophy
5
+
6
+ **Core Principle**: Typography is not decoration—it is the entire visual structure. Text becomes image, headline becomes hero, motion becomes rhythm. This style rejects static layouts completely. Every element should feel alive through constant motion (marquees), reactive motion (hover states), or scroll-triggered motion (parallax, scale transforms). The page pulses with kinetic energy—nothing is ever truly still.
7
+
8
+ **Aesthetic Vibe**: High-energy brutalism meets kinetic poster design. Confidence through scale. Urgency through motion. Clarity through contrast. The design screams rather than whispers—everything is uppercase, oversized, and in-your-face. It's a poster come to life, with the raw energy of street art and the precision of Swiss typography, but animated and interactive. Think music festival posters, protest graphics, and underground zines translated to the web.
9
+
10
+ **Visual DNA**: This style is instantly recognizable by its relentless motion and aggressive scale. Marquees scroll endlessly. Numbers tower at 8-12rem. Headlines use viewport units (clamp-based for control). Every hover state is dramatic—cards flood with color, text translates across the screen, borders glow with accent hues. The aesthetic is deliberately excessive: if traditional web design uses 2x scale difference between headline and body, this uses 10x. Where others add subtle shadows, this style stays brutally flat with sharp borders and hard edges.
11
+
12
+ **Signature Elements**:
13
+ - Infinite marquees that never stop moving (react-fast-marquee, no gradients)
14
+ - Viewport-responsive typography using clamp() for fluid scaling (clamp(3rem,12vw,14rem))
15
+ - Aggressive uppercase treatment on ALL display text (headings, buttons, labels)
16
+ - Massive numerical elements (6rem-12rem) used as decorative graphic shapes
17
+ - Hard color inversions on hover (background to accent yellow, text to black, instant transitions)
18
+ - Scroll-triggered scale and opacity transforms (Framer Motion useScroll hook)
19
+ - Sharp 2px borders with 0px border-radius (brutalist geometry)
20
+ - Hairline gap-px grid dividers creating connected card systems
21
+
22
+ ## Design Token System (The DNA)
23
+
24
+ ### Color Architecture
25
+
26
+ **Foundation Colors**:
27
+ - `background`: `#09090B` (Rich black, not pure black—softer on eyes)
28
+ - `foreground`: `#FAFAFA` (Off-white, not pure white—less harsh)
29
+ - `muted`: `#27272A` (Dark gray for secondary surfaces)
30
+ - `muted-foreground`: `#A1A1AA` (Zinc 400 for body text and descriptions)
31
+
32
+ **Accent Strategy**:
33
+ - `accent`: `#DFE104` (Acid yellow/lime—high energy, highly visible)
34
+ - `accent-foreground`: `#000000` (Pure black for contrast on accent)
35
+ - `border`: `#3F3F46` (Zinc 700—subtle structural lines)
36
+
37
+ **Color Usage Patterns**:
38
+ - Use acid yellow sparingly but boldly (hero text highlights, hover states, focus rings, marquee backgrounds)
39
+ - Muted foreground (Zinc 400) for all secondary text—never use plain gray
40
+ - Border color for ALL structural linesnever use foreground color for borders
41
+ - Background numbers and inactive elements in `muted` (#27272A) to create depth layers
42
+ - Selection highlight: Yellow background with black text
43
+
44
+ **Contrast Requirements**:
45
+ - Primary text to background: Minimum 15:1 ratio (off-white on rich black)
46
+ - Accent to background: Must be vibrant and eye-catching
47
+ - Never use mid-range grays—stay at the contrast extremes
48
+
49
+ ### Typography System
50
+
51
+ **Font Selection**:
52
+ - Primary: "Space Grotesk" (preferred—strong geometric shapes, excellent at large sizes)
53
+ - Fallback: "Inter" (if Space Grotesk unavailable)
54
+ - Both should support variable font weights if possible (300-700 range)
55
+
56
+ **Scale Hierarchy** (using Tailwind classes with responsive scaling):
57
+ - **Hero/Display**: `text-[clamp(3rem,12vw,14rem)]` (fluid viewport-based scaling with safe minimums)
58
+ - **Section Headings**: `text-5xl md:text-7xl lg:text-8xl` or `text-[clamp(2.5rem,8vw,6rem)]` for ultra-massive headings
59
+ - **Card Titles**: `text-2xl md:text-3xl lg:text-6xl` (responsive scaling from mobile to desktop)
60
+ - **Body/Descriptions**: `text-lg md:text-xl lg:text-2xl` (18-24px—larger than typical web, responsive)
61
+ - **Small Labels**: `text-xs md:text-sm lg:text-lg` (12-18px, responsive)
62
+ - **Massive Numbers** (decorative): `text-[6rem] md:text-[8rem]` to `text-[8rem] md:text-[12rem]` (responsive massive scale)
63
+ - **Navigation/Micro**: `text-sm md:text-base` (14-16px)
64
+
65
+ **Type Treatment Rules**:
66
+ - ALL display text (headings, buttons, labels) must be uppercase
67
+ - Body text and descriptions stay in normal case for readability
68
+ - Tracking: Use `tracking-tighter` on large display text, `tracking-tight` on body, `tracking-wide` or `tracking-widest` on small labels
69
+ - Leading: `leading-[0.8]` or `leading-none` for display headlines to create tight, graphic lockups
70
+ - Leading: `leading-tight` for large body text (xl-2xl)
71
+ - Font weight: Bold (700) for all headings and buttons, Medium (500) for body, Regular (400) for secondary text
72
+
73
+ **Font Size Relationships**:
74
+ - Headlines are 3-5x larger than body text (not 1.5-2x like traditional web)
75
+ - Numbers as graphics are 4-8x larger than accompanying labels
76
+ - Decorative background text is 2-3x larger than foreground text in same context
77
+
78
+ ### Spacing & Layout
79
+
80
+ **Base Unit**: 4px (Tailwind's default spacing scale)
81
+
82
+ **Vertical Rhythm**:
83
+ - Section padding: `py-32` (128px top/bottom) for major sections
84
+ - Card/Container padding: `p-8` to `p-12` (32-48px)
85
+ - Element gaps within containers: `gap-8` (32px)
86
+ - Tight element groups: `gap-4` (16px)
87
+ - Between large display elements: `mb-4` to `mb-8` (16-32px)
88
+
89
+ **Horizontal Containment**:
90
+ - Maximum width: `max-w-[95vw]` or `max-w-[90vw]`—push to the edges
91
+ - Never use standard `max-w-7xl` or similar—too conservative for this style
92
+ - Specific content widths: `max-w-2xl` (672px) for long-form text blocks
93
+ - Full bleed for marquees and dramatic sections
94
+
95
+ **Padding Relationships**:
96
+ - Cards: Equal padding all sides (p-8 or p-12) OR asymmetric with more top/bottom than left/right
97
+ - Buttons: Horizontal padding 2-3x vertical (e.g., px-8 py-4)
98
+ - Inputs: Minimal horizontal padding (px-0 or px-2), more vertical for touch targets
99
+
100
+ **Grid Patterns**:
101
+ - Three-column grids for step processes (md:grid-cols-3)
102
+ - Single column on mobile, maintain drama with large text
103
+ - Use `gap-px` with colored backgrounds to create hairline grid dividers
104
+ - Pricing typically uses three equal columns (lg:grid-cols-3)
105
+
106
+ ### Shape Language
107
+
108
+ **Border Radius**:
109
+ - Default: `0px` (completely sharp corners)
110
+ - Exception: Rare use of `rounded-sm` (2px) for subtle softening on small elements
111
+ - Never use rounded-lg or higher—destroys the brutalist aesthetic
112
+
113
+ **Border Styling**:
114
+ - Width: `border-2` (2px) for structural emphasis, `border` (1px) for subtle dividers
115
+ - Style: Always solid, never dashed or dotted
116
+ - Color: Use `border-[#3F3F46]` consistently
117
+ - Border-only elements: Use `border-b-2` for input underlines, `border-l-4` for quote accents
118
+
119
+ **Shadows & Depth**:
120
+ - **NO drop shadows**—this style is completely flat
121
+ - Depth created through color layering (muted background elements behind foreground)
122
+ - Use massive background numbers in muted tones to create visual depth
123
+ - Overlapping elements instead of shadow for hierarchy
124
+
125
+ **Visual Dividers**:
126
+ - Prefer borders over shadows
127
+ - Use full-width border-top/border-bottom at section breaks
128
+ - Grid gap patterns: `gap-px` with colored container creates hairline dividers
129
+
130
+ ### Texture & Overlay
131
+
132
+ **Noise Texture**:
133
+ - SVG-based feTurbulence filter (baseFrequency 0.8, numOctaves 4)
134
+ - Fixed position, full viewport coverage
135
+ - Opacity: `opacity-[0.03]` (barely visible)
136
+ - Blend mode: `mix-blend-overlay`
137
+ - Purpose: Adds subtle print/poster texture without affecting readability
138
+
139
+ **Background Treatments**:
140
+ - Solid colors only—no gradients
141
+ - Accent color used for full-section backgrounds (stats marquee, footer)
142
+ - Muted color for card hover backgrounds before accent flip
143
+
144
+ **Blend Modes**:
145
+ - Use `mix-blend-difference` or `mix-blend-exclusion` sparingly for text over images
146
+ - Apply to custom cursors or special text treatments
147
+ - Not part of the core style in current implementation but suggested for advanced implementations
148
+
149
+ ## Component Styling Principles
150
+
151
+ ### Buttons
152
+
153
+ **Base Styling**:
154
+ - Always uppercase text with tight tracking (`uppercase tracking-tighter`)
155
+ - Font weight: Bold (700)
156
+ - Sharp corners (rounded-none)
157
+ - Height: Default 56px (h-14), Small 40px (h-10), Large 80px (h-20)
158
+ - Horizontal padding 2x height: Default px-8, Small px-4, Large px-12
159
+
160
+ **Variant Patterns**:
161
+
162
+ **Primary (Accent)**:
163
+ - Background: Acid yellow (#DFE104)
164
+ - Text: Black
165
+ - Hover: Scale up 1.05 (`hover:scale-105`)
166
+ - Active: Scale down 0.95 (`active:scale-95`)
167
+ - Transition: `transition-all` for smooth scale
168
+
169
+ **Outline**:
170
+ - Border: 2px solid zinc-700 (#3F3F46)
171
+ - Background: Transparent
172
+ - Text: Off-white
173
+ - Hover: Full fill with off-white background, text inverts to black
174
+ - Hard transition (instant color flip)
175
+
176
+ **Ghost**:
177
+ - No border, no background
178
+ - Text: Off-white
179
+ - Hover: Text color changes to accent yellow
180
+ - Minimal, subtle variant
181
+
182
+ **Advanced Interactions** (not implemented but suggested):
183
+ - Marquee effect: Text inside button scrolls horizontally on hover
184
+ - Character-by-character color fill on hover (left to right)
185
+
186
+ ### Cards & Containers
187
+
188
+ **Base Structure**:
189
+ - Border: 2px solid zinc-700 (`border-2 border-[#3F3F46]`)
190
+ - Background: Rich black (#09090B)
191
+ - Padding: Large and even (p-8 or p-12)
192
+ - No border-radius (sharp corners)
193
+
194
+ **Hover Behavior**:
195
+ - Background floods with accent color (#DFE104)
196
+ - Border color changes to accent
197
+ - All text inverts to black
198
+ - Transition: `duration-300` for smooth but noticeable shift
199
+ - Use group classes to coordinate text color changes
200
+
201
+ **Content Hierarchy Within Cards**:
202
+ - Large title at top (text-3xl) in foreground color → black on hover
203
+ - Description text in muted-foreground → black with reduced opacity on hover
204
+ - Decorative numbers or icons in muted tone → black on hover
205
+
206
+ **Sticky Card Pattern** (Features Section):
207
+ - Each card uses `sticky top-32` positioning
208
+ - Cards stack and overlap as user scrolls
209
+ - Later cards appear to slide over earlier ones
210
+ - Maintains visual rhythm through repetition
211
+
212
+ ### Inputs & Forms
213
+
214
+ **Base Styling**:
215
+ - Height: Extra tall (h-24 / 96px) for dramatic scale
216
+ - Border: Bottom border only (`border-b-2`)
217
+ - Border color: Zinc-700 default, accent on focus
218
+ - Background: Transparent
219
+ - Text: Extra large (text-4xl), bold, uppercase, tight tracking
220
+ - Padding: Minimal horizontal (px-0), standard vertical for alignment
221
+
222
+ **Focus States**:
223
+ - Border-bottom changes to accent yellow
224
+ - No outline ring—border serves as focus indicator
225
+ - Instant color change (no transition needed)
226
+
227
+ **Placeholder Styling**:
228
+ - Muted color (#27272A)—very subtle
229
+ - Same size and style as input text
230
+ - Uppercase to match input
231
+ - Low contrast ensures actual input stands out
232
+
233
+ **Form Layout**:
234
+ - Full width inputs (w-full)
235
+ - Generous vertical spacing between fields (space-y-8)
236
+ - Labels (if used) should be small, uppercase, tracked-wide, above input
237
+
238
+ ### Interactive States
239
+
240
+ **Hover Transformations**:
241
+ - Scale: Buttons scale to 1.05, cards stay at scale 1.0
242
+ - Translation: Benefit titles translate horizontally (`translate-x-8`)
243
+ - Color Floods: Cards completely invert color scheme
244
+ - Opacity Reveals: Hidden descriptions fade in (opacity-0 to opacity-100)
245
+ - All transitions use `duration-300` for consistent feel
246
+
247
+ **Focus States**:
248
+ - Inputs: Border color change to accent
249
+ - Buttons: Same as hover (scale) plus visible focus ring in accent color
250
+ - Links: Underline in accent color or text color change
251
+
252
+ **Active States**:
253
+ - Buttons: Scale down to 0.95 (`active:scale-95`) for tactile feedback
254
+ - Links: Slight opacity reduction
255
+
256
+ **Disabled States**:
257
+ - Opacity: 50% (`disabled:opacity-50`)
258
+ - Pointer events: None (`disabled:pointer-events-none`)
259
+ - Maintain all other styling—just reduce visibility
260
+
261
+ ## Animation & Motion System
262
+
263
+ ### Marquee Motion
264
+
265
+ **Implementation**: Use `react-fast-marquee` library for smooth, GPU-accelerated marquees
266
+
267
+ **Stats Marquee** (High Energy):
268
+ - Speed: 80 (fast)
269
+ - Direction: Left to right
270
+ - Gradient: false (no edge fade)
271
+ - AutoFill: true (repeats content infinitely)
272
+ - Content: Large numbers paired with labels and decorative symbols
273
+
274
+ **Testimonials Marquee** (Slower Rhythm):
275
+ - Speed: 40 (medium)
276
+ - Direction: Left to right
277
+ - Gradient: false
278
+ - Content: Wide cards with quotes, generous spacing between items
279
+
280
+ **Timing Rules**:
281
+ - Never use gradients—raw edge is part of aesthetic
282
+ - Fast marquees (speed 60-100) for stats and high-energy content
283
+ - Slower marquees (speed 30-50) for reading content like testimonials
284
+ - All marquees use linear easing (no acceleration/deceleration)
285
+
286
+ ### Scroll-Triggered Animations
287
+
288
+ **Hero Parallax** (Framer Motion):
289
+ - Track scroll progress: `useScroll()` hook
290
+ - Scale transform: 1.0 → 1.2 as user scrolls (0-20% of page)
291
+ - Opacity: 1.0 0 as user scrolls out
292
+ - Creates dramatic zoom-out effect as user enters content
293
+
294
+ **Sticky Scroll Cards**:
295
+ - Position: `sticky top-32`
296
+ - No transform animations—physical stacking creates effect
297
+ - Cards remain in place as subsequent cards slide over them
298
+
299
+ **Entrance Animations** (Suggested, not in current implementation):
300
+ - Elements scale from 0.8 to 1.0 as they enter viewport
301
+ - Text can "unmask" by animating from clipped to full visibility
302
+ - Use intersection observer or Framer Motion `whileInView`
303
+
304
+ ### Micro-Interactions
305
+
306
+ **Button Interactions**:
307
+ - Hover: Scale 1.05 with all easing
308
+ - Active: Scale 0.95
309
+ - Transition timing: 200-300ms
310
+ - Easing: Default ease-in-out
311
+
312
+ **Card Hover**:
313
+ - Color transition: 300ms
314
+ - Hard flip, not gradual (suits the brutalist aesthetic)
315
+ - All child text coordinates color change via group classes
316
+
317
+ **Accordion Expansion** (FAQ):
318
+ - Height: Animate from 0 to auto
319
+ - Opacity: Fade in content (0 to 1)
320
+ - Timing: Smooth with slight bounce (framer motion spring)
321
+ - Initial: false (doesn't animate on mount)
322
+
323
+ **Text Reveals**:
324
+ - Benefit descriptions: Opacity 0 to 1, duration 300ms
325
+ - Benefit titles: Horizontal translate + duration 300ms
326
+ - Both triggered simultaneously on hover
327
+
328
+ ### Easing & Timing
329
+
330
+ **Default Durations**:
331
+ - Micro-interactions (hovers, focus): 200-300ms
332
+ - Section animations: 500-800ms
333
+ - Marquees: Continuous linear (no easing)
334
+
335
+ **Easing Functions**:
336
+ - Buttons and scale effects: `ease-in-out` (default)
337
+ - Marquees: `linear` (constant speed)
338
+ - Accordion: Spring physics from Framer Motion
339
+ - Parallax: Linear mapping from scroll position
340
+
341
+ **Performance Notes**:
342
+ - Prefer transforms (scale, translate) over position changes
343
+ - Use opacity instead of visibility for reveals
344
+ - Marquees should use transform: translateX for GPU acceleration
345
+ - Keep animations at 60fps—avoid complex calculations in scroll handlers
346
+
347
+ ## Layout Principles
348
+
349
+ ### Grid Philosophy
350
+
351
+ **Break the Grid**: This style embraces asymmetry and overlap. Elements can:
352
+ - Extend beyond their containers
353
+ - Overlap previous elements (sticky scroll)
354
+ - Use uneven column widths
355
+ - Break alignment for dramatic effect
356
+
357
+ **Standard Patterns**:
358
+ - Single column mobile (always)
359
+ - Two column for benefits/features on tablet (md)
360
+ - Three column for pricing/steps on desktop (lg)
361
+ - Four column for footer navigation
362
+
363
+ **Grid Gaps**:
364
+ - Standard: `gap-8` (32px) between major elements
365
+ - Hairline: `gap-px` with colored container background for connected cards
366
+ - Wide: `gap-12` to `gap-24` for breathing room in dense sections
367
+
368
+ ### Section Flow
369
+
370
+ **Vertical Rhythm**:
371
+ - Major sections: `py-32` (128px) top and bottom
372
+ - Subsections: `py-20` (80px)
373
+ - Dense content areas: `py-12` (48px)
374
+
375
+ **Section Dividers**:
376
+ - Full-width border-top or border-bottom in zinc-700
377
+ - Accent color background flips (black section yellow section)
378
+ - Contrast creates natural breaks without needing extra space
379
+
380
+ **Content Width Strategy**:
381
+ - Hero: Max-w-[95vw]—push to edges
382
+ - Body content: Max-w-5xl or max-w-6xl
383
+ - Long-form text: Max-w-2xl or max-w-xl for readability
384
+ - Marquees: Full bleed (w-full, no max-width)
385
+
386
+ ### Responsive Approach
387
+
388
+ **Mobile-First Strategy**:
389
+ - **Maintain drama**: Keep large text using clamp() values for safe scaling (e.g., `clamp(3rem,12vw,14rem)`)
390
+ - **Stack everything vertically**: Single column layouts with `flex-col` and `md:flex-row` patterns
391
+ - **Reduce padding progressively**: `p-8 md:p-12`, `py-20 md:py-32`, `px-4 md:px-8`
392
+ - **Marquees persist**: Essential to the style—keep them at all breakpoints
393
+ - **Touch targets**: Minimum 44x44px (h-10 w-10 for icon containers, h-14 for buttons)
394
+ - **Adapt hover effects**: Show descriptions always on mobile (opacity-100), hide on desktop (md:opacity-0) then reveal on hover
395
+ - **Sticky positioning**: Adjust top values (`top-24 md:top-32`) to account for nav height
396
+ - **Grid simplification**: 1 column → `md:grid-cols-2` `lg:grid-cols-3`
397
+
398
+ **Breakpoints** (Tailwind defaults):
399
+ - **Mobile**: Base styles (320px-767px) - Single column, reduced text sizes, full-width elements
400
+ - **Tablet (md)**: 768px+ - Two-column layouts, medium text scaling, increased padding
401
+ - **Desktop (lg)**: 1024px+ - Three-column layouts, full dramatic scale, all hover effects active
402
+
403
+ **Text Scaling Best Practices**:
404
+ - **Use clamp()** for hero and massive headings: `text-[clamp(3rem,12vw,14rem)]`
405
+ - **Use responsive utilities** for section headings: `text-5xl md:text-7xl lg:text-8xl`
406
+ - **Use responsive utilities** for body text: `text-lg md:text-xl lg:text-2xl`
407
+ - **Use responsive utilities** for massive numbers: `text-[6rem] md:text-[8rem]` or `text-[8rem] md:text-[12rem]`
408
+ - Always test at 320px, 768px, 1024px, and 1440px+ widths
409
+
410
+ ## The "Bold Factor" (Non-Generic Signatures)
411
+
412
+ These elements MUST be present to achieve the Kinetic Typography aesthetic:
413
+
414
+ 1. **Viewport-Width Typography**: At least one headline must use viewport-width units (10vw+). This creates immediate scale and drama.
415
+
416
+ 2. **Active Marquees**: At least two sections should use infinite scrolling marquees. One fast (stats), one slower (testimonials). No gradient edges.
417
+
418
+ 3. **Massive Background Numbers**: Use oversized numbers (8rem-12rem) in muted tones as decorative background elements. They become graphic shapes, not just text.
419
+
420
+ 4. **Hard Color Inversions**: Cards or sections that completely flip color scheme on hover (black → yellow background, white → black text). The transition should be clean, not gradual.
421
+
422
+ 5. **Uppercase Display Treatment**: All headings, buttons, and labels in uppercase with tight tracking. This creates the poster-like, bold aesthetic.
423
+
424
+ 6. **Aggressive Scale Hierarchy**: The difference between largest and smallest text should be 8-10x, not the typical 2-3x. Body text at 20-24px, headlines at 160-200px+.
425
+
426
+ 7. **Minimal Border Styling**: Sharp corners (0px radius) and 2px borders in subtle zinc tones. Flat, no shadows. Brutalist structure.
427
+
428
+ **What Makes it Instantly Recognizable**:
429
+ - The constant motion (marquees never stop)
430
+ - The screaming scale (text fills the screen)
431
+ - The high contrast (near-black and off-white with acid yellow)
432
+ - The uppercase lockup (everything yells)
433
+
434
+ If these elements are removed or softened, the design becomes generic modern dark mode.
435
+
436
+ ## Anti-Patterns (What to Avoid)
437
+
438
+ **Color Mistakes**:
439
+ - Never use pure black (#000000) or pure white (#FFFFFF)—too harsh
440
+ - Don't use soft pastels or mid-tone colors—breaks the high-contrast system
441
+ - Avoid gradients on backgrounds—this style is flat
442
+ - Don't use multiple accent colors—acid yellow only
443
+
444
+ **Typography Errors**:
445
+ - Don't use serif fonts or script fonts—kills the brutalist vibe
446
+ - Never use small text for headings (<text-3xl)—loses the bold factor
447
+ - Avoid mixed case in display text—uppercase is mandatory
448
+ - Don't use normal or wide tracking on large text—always tighter
449
+
450
+ **Layout Mistakes**:
451
+ - Don't center-align body text—left-align for readability
452
+ - Avoid small max-widths (max-w-4xl)—content should feel wide
453
+ - Don't use standard section padding (py-16)—go bigger (py-32)
454
+ - Never nest containers with conflicting max-widths
455
+
456
+ **Animation Mistakes**:
457
+ - Don't add drop shadow animations—stay flat
458
+ - Avoid slow, gentle transitions (800ms+)—this style is snappy
459
+ - Never stop the marquees or add pause-on-hover—motion is constant
460
+ - Don't use bounce or elastic easing on everything—reserve for specific elements
461
+
462
+ **Shape & Style Errors**:
463
+ - Never add border-radius above 2px—sharp corners are essential
464
+ - Don't use subtle borders (<1px)—go for 2px or border-bottom only
465
+ - Avoid soft shadows—this style has no depth effects
466
+ - Don't use opacity for hierarchy—use color contrast
467
+
468
+ **Component Mistakes**:
469
+ - Don't make buttons small and subtle—they should be bold and large
470
+ - Avoid input fields that look traditional—oversized is key
471
+ - Don't use cards with heavy padding and rounded cornersminimal, sharp
472
+ - Never use subtle hover stateschanges should be dramatic
473
+
474
+ **Accessibility Violations**:
475
+ - Don't ignore motion preferences—respect prefers-reduced-motion
476
+ - Avoid color as the only indicator—ensure sufficient contrast
477
+ - Don't make click targets too smallmaintain 44px minimum
478
+ - Never sacrifice readability for style—body text should be large and clear
479
+
480
+ ## Accessibility Considerations
481
+
482
+ **Color Contrast**:
483
+ - Off-white (#FAFAFA) on rich black (#09090B): ~15:1 ratio (exceeds WCAG AAA)
484
+ - Accent yellow (#DFE104) on rich black: ~12:1 ratio (exceeds WCAG AAA)
485
+ - Muted foreground (#A1A1AA) on rich black: ~6:1 ratio (meets WCAG AA for large text)
486
+ - Accent with black text: ~14:1 ratio (exceeds WCAG AAA)
487
+
488
+ **Motion Preferences**:
489
+ - Wrap all marquees in `@media (prefers-reduced-motion: no-preference)`
490
+ - Provide static fallback: show content without scrolling
491
+ - Disable scroll-triggered animations for users who prefer reduced motion
492
+ - Maintain layout and hierarchy without motion
493
+
494
+ **Focus Indicators**:
495
+ - Accent-colored border or ring on focus
496
+ - Minimum 2px visible indicator
497
+ - Never remove focus stylesmake them obvious
498
+ - Scale changes on buttons provide additional tactile feedback
499
+
500
+ **Keyboard Navigation**:
501
+ - All interactive elements must be focusable
502
+ - Accordion items should expand/collapse with Enter or Space
503
+ - Marquee content should be navigable via keyboard if interactive
504
+ - Skip links to main content if navigation is complex
505
+
506
+ **Screen Reader Considerations**:
507
+ - Noise texture SVG includes `<title>` element
508
+ - Decorative background numbers should have `aria-hidden="true"`
509
+ - Marquees need `aria-live` attributes if content updates
510
+ - Accordion state (expanded/collapsed) should be announced
511
+
512
+ **Touch Targets**:
513
+ - Minimum 44x44px for all interactive elements
514
+ - Buttons exceed this (default 56px height)
515
+ - Adequate spacing between clickable items (16px+)
516
+ - Large input fields (96px height) easy to tap
517
+
518
+ **Readability**:
519
+ - Body text larger than standard web (20-24px vs 16px)
520
+ - High contrast throughout
521
+ - Left-aligned paragraphs for easier reading
522
+ - Generous line-height (leading-tight = 1.25) for large text
523
+
524
+ **Testing Checklist**:
525
+ - Test with screen reader (NVDA, JAWS, VoiceOver)
526
+ - Verify keyboard-only navigation
527
+ - Check with prefers-reduced-motion enabled
528
+ - Validate color contrast with tools (Stark, axe DevTools)
529
+ - Test at 200% zoom level
530
+ - Verify touch targets on mobile devices
531
+ </design-system>