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,565 +1,529 @@
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
- # Design Style: Newsprint
39
-
40
- ## 1. Design Philosophy
41
-
42
- **"All the News That's Fit to Print."**
43
-
44
- This style is an ode to the golden age of print journalism, reimagined for the web. It embodies **absolute clarity, hierarchy, and structure** through its unwavering commitment to high-contrast typography, grid-based layouts, and sharp geometric precision.
45
-
46
- ### Core DNA
47
-
48
- The newsprint aesthetic rejects modern web trends of soft shadows, blurred backgrounds, and rounded corners. Instead, it embraces:
49
-
50
- - **Stark Geometry**: Zero border radius. Every element is a perfect rectangle with sharp 90-degree corners.
51
- - **High Information Density**: Tight padding, collapsed grid borders, and efficient use of space mimic newspaper column layouts.
52
- - **Typographic Drama**: Massive serif headlines (up to 9xl on desktop) paired with smaller, highly legible body text create extreme hierarchy.
53
- - **Visible Structure**: Grid lines aren't hidden—they're celebrated. Borders between columns and sections are explicit and prominent.
54
- - **Editorial Authority**: The design feels serious, timeless, and trustworthy—like a publication of record.
55
- - **Paper Texture**: Subtle grain overlays and line patterns simulate the tactile quality of newsprint without being overly skeuomorphic.
56
-
57
- ### Vibe
58
-
59
- Authoritative, intellectual, urgent, timeless. It feels like holding a fresh morning newspaper—crisp, organized, and information-rich. The design exudes confidence and credibility.
60
-
61
- ## 2. Design Token System (The DNA)
62
-
63
- ### Colors (Single Palette)
64
-
65
- **Mode:** Light (Permanent - no dark mode)
66
-
67
- - **Background:** `#F9F9F7` (Newsprint Off-White)
68
- A warm off-white that mimics aged paper. Not pure white—adds subtle warmth and reduces eye strain.
69
- - **Foreground:** `#111111` (Ink Black)
70
- Very deep black, not pure `#000`. Used for all text and borders.
71
- - **Muted:** `#E5E5E0` (Divider Grey)
72
- Light grey for secondary borders and subtle backgrounds.
73
- - **Accent:** `#CC0000` (Editorial Red)
74
- Bright, unapologetic red used extremely sparingly—only for breaking news badges, CTAs, and hover states. 99% of the design is black and white.
75
- - **Border:** `#111111` (Ink Black)
76
- The primary structural element. Borders define the grid and create visual rhythm.
77
- - **Neutral Shades:**
78
- `neutral-100`: `#F5F5F5` (hover backgrounds)
79
- `neutral-200`: `#E5E5E5` (image placeholders)
80
- `neutral-400`: `#A3A3A3` (muted text in dark sections)
81
- `neutral-500`: `#737373` (metadata, captions)
82
- `neutral-600`: `#525252` (body text variations)
83
- `neutral-700`: `#404040` (secondary headings)
84
-
85
- ### Typography
86
-
87
- **Font Stack:**
88
-
89
- - **Serif (Headlines & Display):** `'Playfair Display', 'Times New Roman', serif`
90
- High-contrast, elegant, authoritative. Used for all major headings.
91
- - **Serif (Body):** `'Lora', Georgia, serif`
92
- Highly legible serif for long-form reading text and paragraphs.
93
- - **Sans-Serif (UI):** `'Inter', 'Helvetica Neue', sans-serif`
94
- Clean, modern sans for labels, buttons, navigation, and metadata.
95
- - **Monospace (Data):** `'JetBrains Mono', 'Courier New', monospace`
96
- For stats, dates, edition numbers, and technical information.
97
-
98
- **Scale Strategy:**
99
-
100
- - **H1 (Hero Headlines):** `text-5xl sm:text-6xl lg:text-9xl` (80px 128px)
101
- Massive, viewport-dominating. Use `leading-[0.9]` for ultra-tight line height. Apply `tracking-tighter` for condensed feel.
102
- - **H2 (Section Headers):** `text-4xl lg:text-5xl` (36px → 48px)
103
- Bold, `font-black`, uppercase or sentence case depending on context.
104
- - **H3 (Card Titles):** `text-2xl lg:text-3xl` (24px → 30px)
105
- `font-bold`, serif.
106
- - **Body Text:** `text-sm` to `text-lg` (14px → 18px)
107
- Body font (Lora), `leading-relaxed` (line-height: 1.625).
108
- - **Metadata/Labels:** `text-xs` (12px)
109
- Uppercase, `tracking-widest`, monospace or sans.
110
-
111
- **Text Transform:**
112
-
113
- - Uppercase for: Navigation, labels, metadata, badges, small caps for author bylines.
114
- - Sentence case for: Headlines, article titles, body text.
115
-
116
- ### Radius & Border
117
-
118
- **Border Radius:** `0px` everywhere. No exceptions.
119
- Use inline styles or a `.sharp-corners` utility class to enforce zero radius on all components.
120
-
121
- **Border Width:**
122
-
123
- - Standard: `1px` solid black (`border`, `border-r`, `border-b`)
124
- - Heavy emphasis: `border-b-4` or `border-4` (4px solid) for major section dividers
125
- - Collapsed grids: Adjacent elements share borders to avoid double lines
126
-
127
- **Border Style:**
128
- Always solid. Never dashed or dotted except for rare decorative elements (e.g., `border-dashed` inside pricing cards for feature dividers).
129
-
130
- ### Shadows/Effects
131
-
132
- **Philosophy:** Flat design. No soft drop shadows.
133
-
134
- **Hover Effects:**
135
-
136
- - **Hard Offset Shadow:** `box-shadow: 4px 4px 0px 0px #111111`
137
- Applied on hover to blog cards or interactive elements. Creates a "lifted" newspaper cutout effect.
138
- - **Implementation:**
139
-
140
- ```css
141
- .hard-shadow-hover:hover {
142
- box-shadow: 4px 4px 0px 0px #111111;
143
- transform: translate(-2px, -2px);
144
- }
145
- ```
146
-
147
- **No Effects:**
148
-
149
- - No blur
150
- - No inner shadows (except for rare decorative purposes)
151
- - No gradient overlays
152
-
153
- ### Textures & Patterns
154
-
155
- **Critical for Depth:** The newsprint style avoids "flat generic web design" through layered textures.
156
-
157
- **1. Dot Grid Pattern (Main Background):**
158
-
159
- ```html
160
- backgroundImage: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23111111' fill-opacity='0.04' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'%3E%3C/path%3E%3C/svg%3E")`
161
- ```
162
-
163
- Subtle 4×4px dot pattern applied to the body background.
164
-
165
- **2. Line Grid Overlay (Section Texture):**
166
-
167
- ```css
168
- .newsprint-texture {
169
- position: relative;
170
- }
171
- .newsprint-texture::before {
172
- content: '';
173
- position: absolute;
174
- inset: 0;
175
- background-image:
176
- linear-gradient(0deg, transparent 98%, rgba(0,0,0,0.02) 100%),
177
- linear-gradient(90deg, transparent 98%, rgba(0,0,0,0.02) 100%);
178
- background-size: 3px 3px;
179
- pointer-events: none;
180
- opacity: 0.5;
181
- }
182
- ```
183
-
184
- Apply `.newsprint-texture` to major sections for a fine graph-paper effect.
185
-
186
- **3. Radial Dot Pattern (Image Placeholders):**
187
-
188
- ```html
189
- <div className="bg-[radial-gradient(#000_1px,transparent_1px)] opacity-10 [background-size:16px_16px]" />
190
- ```
191
-
192
- Used in placeholder images to simulate halftone printing.
193
-
194
- **4. Ornamental Dividers:**
195
- Use serif ornaments between major sections:
196
-
197
- ```html
198
- <div className="py-8 text-center font-serif text-2xl text-neutral-400 tracking-[1em]">
199
- ✧ ✧ ✧
200
- </div>
201
- ```
202
-
203
- ## 3. Component Stylings
204
-
205
- ### Buttons
206
-
207
- **Primary Button (Default):**
208
-
209
- ```tsx
210
- className="bg-[#111111] text-[#F9F9F7] border border-transparent hover:bg-white hover:text-[#111111] hover:border-[#111111]"
211
- ```
212
-
213
- - Solid black background, white text
214
- - On hover: Inverts to white background, black text and border
215
- - Sharp corners (enforced)
216
- - Uppercase text with `tracking-widest`
217
- - Transition: `transition-all duration-200`
218
-
219
- **Secondary Button (Outline):**
220
-
221
- ```tsx
222
- className="border border-[#111111] bg-transparent hover:bg-[#111111] hover:text-[#F9F9F7]"
223
- ```
224
-
225
- - Transparent background, black border and text
226
- - On hover: Fills with black, text turns white
227
-
228
- **Ghost Button:**
229
-
230
- ```tsx
231
- className="hover:bg-[#E5E5E0] hover:text-[#111111]"
232
- ```
233
-
234
- - No border, subtle grey background on hover
235
-
236
- **Link Button:**
237
-
238
- ```tsx
239
- className="text-[#111111] underline-offset-4 decoration-2 decoration-[#CC0000] hover:underline"
240
- ```
241
-
242
- - Text-only, red underline on hover
243
-
244
- **Touch Targets:**
245
- Ensure minimum `min-h-[44px]` and `min-w-[44px]` for mobile accessibility.
246
-
247
- ### Cards/Containers
248
-
249
- **Standard Card:**
250
-
251
- ```tsx
252
- <div className="border border-[#111111] bg-[#F9F9F7] p-6">
253
- ```
254
-
255
- - Sharp black border
256
- - Off-white background
257
- - Tight padding (p-4 to p-8)
258
-
259
- **Newspaper Column Grid:**
260
-
261
- - Use `border-r` and `border-b` to create collapsed grid layouts
262
- - Example: 4-column feature grid where each cell has `border-r` except the last, and all have `border-b` on mobile
263
-
264
- **Hover States:**
265
-
266
- - Add `hover:bg-neutral-100` to interactive cards
267
- - Optionally add `.hard-shadow-hover` for dramatic lift effect
268
-
269
- ### Inputs
270
-
271
- **Style:**
272
-
273
- ```tsx
274
- className="border-b-2 border-[#111111] bg-transparent px-3 py-2 font-mono text-sm focus-visible:bg-[#F0F0F0] focus-visible:outline-none"
275
- ```
276
-
277
- - Transparent background
278
- - Only bottom border (2px solid black)
279
- - Monospace font
280
- - On focus: Light grey background (`#F0F0F0`), no ring
281
-
282
- **No Radius:** Enforce `borderRadius: 0px` inline.
283
-
284
- ### Icons
285
-
286
- **Library:** `lucide-react`
287
-
288
- **Style:**
289
-
290
- - `stroke-width={1.5}` or `stroke-1` class
291
- - Color: Always black (`text-[#111111]`) except in inverted sections (white)
292
- - Size: `h-6 w-6` standard, `h-4 w-4` for small
293
-
294
- **Icon Containers:**
295
-
296
- - Wrap in bordered boxes: `border border-black h-12 w-12 flex items-center justify-center`
297
- - Hover effect: `hover:bg-black hover:text-white transition-all`
298
-
299
- ## 4. Non-Genericness (The "Bold" Factor)
300
-
301
- ### Mandatory Bold Choices
302
-
303
- **1. Vertical Grid Dividers:**
304
- Don't just separate sections horizontally. Use `border-r` to create strict vertical columns even within the same row. The page should feel like a newspaper grid, not a typical website.
305
-
306
- **2. Drop Caps:**
307
- Apply massive drop caps (`text-7xl`, `float-left`) to the first letter of key paragraphs (hero intro, product detail). Accent color optional.
308
-
309
- **3. Marquee Ticker:**
310
- Use a horizontal scrolling ticker (e.g., `react-fast-marquee`) for stats. Black background, white text, red accent badges. Mimics stock ticker or breaking news crawl.
311
-
312
- **4. Edition Metadata:**
313
- Add newspaper-style metadata:
314
-
315
- - "Vol. 1 | [Date] | New York Edition" in header
316
- - "Edition: Vol 1.0 | Printed in NYC" in footer
317
- - "Fig. 1.1" captions on images
318
-
319
- **5. Justified Text:**
320
- Use `text-justify` for multi-column body text (blog descriptions, product detail) to create that newspaper column look.
321
-
322
- **6. Grayscale Images:**
323
- Apply `grayscale` filter to all images by default. On hover, add `sepia-[50%]` for a vintage newspaper photo effect.
324
-
325
- **7. Asymmetric Layouts:**
326
- Don't default to 50/50 splits. Use 8-col/4-col, 5-col/7-col splits for editorial feel.
327
-
328
- **8. Uppercase Labels:**
329
- Liberally use `uppercase tracking-widest text-xs font-mono` for section labels, navigation, and metadata.
330
-
331
- **9. Inverted Sections:**
332
- Flip at least one major section to black background with white text (e.g., How It Works). Use red accent for numbered steps.
333
-
334
- ## 5. Layout Strategy
335
-
336
- ### Container
337
-
338
- **Max Width:** `max-w-screen-xl` (1280px)
339
- Centered with `mx-auto`, horizontal padding `px-4`
340
-
341
- ### Grid System
342
-
343
- **Base:** 12-column grid
344
- Use Tailwind's `grid-cols-12` with `col-span-*` for precise control.
345
-
346
- **Common Splits:**
347
-
348
- - Hero: `lg:col-span-8` / `lg:col-span-4`
349
- - Benefits: `lg:col-span-5` / `lg:col-span-7`
350
- - Footer: `col-span-2` for logo/description, `col-span-1` for link columns
351
-
352
- **Collapsed Borders:**
353
- Adjacent grid cells share borders. Use `border-r` on all but the last column, `border-b` on all rows.
354
-
355
- ### Spacing
356
-
357
- **Philosophy:** High information density. Tighter than typical web design.
358
-
359
- - Section padding: `py-16` (vertical)
360
- - Card padding: `p-6` to `p-8`
361
- - Gap between items: `gap-6` to `gap-8`
362
- - Mobile: Reduce to `p-4`, `gap-4`
363
-
364
- ### Z-Index Layers
365
-
366
- - Header (sticky): `z-40`
367
- - Overlays/modals: `z-50`
368
-
369
- ## 6. Effects & Animation
370
-
371
- ### Motion Philosophy
372
-
373
- Fast, snappy, mechanical. No bouncy or organic easing.
374
-
375
- **Transition Classes:**
376
-
377
- ```tsx
378
- "transition-all duration-200 ease-out"
379
- "transition-colors duration-200"
380
- ```
381
-
382
- **Hover Behaviors:**
383
-
384
- 1. **Color Inversion:** Buttons, icons flip between black/white instantly
385
- 2. **Hard Shadows:** Cards gain offset shadow + slight translate
386
- 3. **Underlines:** Links gain thick underline (`decoration-2 decoration-[#CC0000]`)
387
- 4. **Scale:** Small elements like dots can `hover:scale-150`
388
- 5. **Background:** Containers get subtle grey background (`hover:bg-neutral-100`)
389
-
390
- **No Floating:** Elements don't "lift" with soft shadows. They snap into place with hard shadows.
391
-
392
- **Accordion Animation:**
393
-
394
- ```tsx
395
- className="grid transition-all duration-300 ease-in-out"
396
- // Open: grid-rows-[1fr] opacity-100
397
- // Closed: grid-rows-[0fr] opacity-0
398
- ```
399
-
400
- ### Micro-Interactions
401
-
402
- - FAQ plus icons rotate 45° when open
403
- - Blog card images scale 105% on hover
404
- - Feature icon boxes invert colors on hover
405
- - Navigation links turn red on hover
406
-
407
- ## 7. Spacing, Layout & Iconography
408
-
409
- ### Default Max-Width
410
-
411
- `max-w-screen-xl` (1280px) for primary content container.
412
-
413
- ### Spacing System
414
-
415
- Use an 8px grid system. Common values:
416
-
417
- - Tight: `gap-2` (8px), `p-2` (8px)
418
- - Standard: `gap-4` (16px), `p-4` (16px)
419
- - Comfortable: `gap-8` (32px), `p-8` (32px)
420
- - Spacious: `gap-16` (64px), `py-16` (64px)
421
-
422
- **Mobile:** Reduce by one step (e.g., `p-8` → `p-6`)
423
-
424
- ### Iconography
425
-
426
- **Integration:**
427
-
428
- - Icons inside bordered boxes (feature cards)
429
- - Icons as section markers (small squares, bullets)
430
- - Icons in navigation (minimal use)
431
- - Icons in social links (bordered boxes in footer)
432
-
433
- **Style Consistency:**
434
-
435
- - All icons from `lucide-react`
436
- - Consistent stroke width (`stroke-1`)
437
- - Black color by default, white in inverted sections
438
-
439
- ## 8. Responsive Strategy
440
-
441
- ### Breakpoints
442
-
443
- - Mobile: `< 768px` (default)
444
- - Tablet: `md:` (768px+)
445
- - Desktop: `lg:` (1024px+)
446
-
447
- ### Mobile Adaptations
448
-
449
- 1. **Grid Collapse:**
450
- Multi-column grids collapse to single column (`grid-cols-1`)
451
- 2. **Border Removal:**
452
- Remove `border-r` on mobile, keep `border-b` for horizontal separators
453
-
454
- ```css
455
- @media (max-width: 767px) {
456
- .grid-border-r { border-right: none; }
457
- }
458
- ```
459
- 3. **Typography Scaling:**
460
- Headlines shrink dramatically: `text-5xl` `text-6xl` `text-9xl`
461
- 4. **Padding Reduction:**
462
- `p-16` → `p-8` → `p-6` on smaller screens
463
- 5. **Touch Targets:**
464
- All interactive elements minimum `44x44px` (`min-h-[44px] min-w-[44px]`)
465
- 6. **CTA Buttons:**
466
- Full width on mobile (`w-full md:w-auto`)
467
- 7. **Navigation:**
468
- Show hamburger menu icon on mobile (44px tap target)
469
- Hide main nav links, show mobile menu
470
-
471
- ### Maintaining Aesthetic
472
-
473
- Even on mobile, preserve:
474
-
475
- - Sharp corners (zero radius)
476
- - High contrast
477
- - Grid-based layout (just single column)
478
- - Horizontal rule separators between sections
479
- - Uppercase labels and metadata
480
-
481
- ## 9. Accessibility & Best Practices
482
-
483
- ### Contrast Ratios
484
-
485
- - Black `#111111` on Off-White `#F9F9F7`: **AAA compliant** (>17:1)
486
- - Red `#CC0000` on Off-White: **AA compliant** (>5:1)
487
- - Never put red text on black background
488
-
489
- ### Focus States
490
-
491
- ```tsx
492
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2"
493
- ```
494
-
495
- - Thick black ring (2px)
496
- - 2px offset for visibility
497
- - Only visible when using keyboard navigation (`:focus-visible`)
498
-
499
- ### Semantic HTML
500
-
501
- - Use `<header>`, `<nav>`, `<section>`, `<footer>`
502
- - Use `<h1>` through `<h6>` in proper hierarchy
503
- - Use `<button>` for interactive elements, not divs
504
- - Use `<a>` for links with proper `href`
505
-
506
- ### ARIA Labels
507
-
508
- - Add `aria-label` to icon-only buttons
509
- - Add `alt` text to all images (even decorative ones)
510
- - Add `role="img"` and `aria-labelledby` to SVG icons
511
-
512
- ### Keyboard Navigation
513
-
514
- - All interactive elements must be keyboard accessible
515
- - Visible focus states (see above)
516
- - Accordion items use `button` with proper `aria-expanded`
517
-
518
- ## 10. Implementation Constraints
519
-
520
- ### Font Import
521
-
522
- Use `@import` in inline `<style>` tag:
523
-
524
- ```css
525
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Playfair+Display:ital,wght@0,400;0,600;0,700;0,900;1,400&family=Lora:ital,wght@0,400;0,600;1,400&display=block');
526
- ```
527
-
528
- Define font classes:
529
-
530
- ```css
531
- .font-serif { font-family: 'Playfair Display', serif; }
532
- .font-body { font-family: 'Lora', serif; }
533
- .font-sans { font-family: 'Inter', sans-serif; }
534
- .font-mono { font-family: 'JetBrains Mono', monospace; }
535
- ```
536
-
537
- ### Tailwind Utilities
538
-
539
- Create custom utilities in `<style>` block:
540
-
541
- - `.sharp-corners { border-radius: 0px !important; }`
542
- - `.newsprint-texture { ... }` (see Textures section)
543
- - `.hard-shadow-hover:hover { ... }` (see Effects section)
544
-
545
- ### Border Collapse Logic
546
-
547
- To avoid double borders in grids:
548
-
549
- 1. Use `border-l` and `border-t` on the container
550
- 2. Use `border-r` and `border-b` on children
551
- 3. Remove `border-r` on last column
552
- 4. Remove `border-b` on last row (if needed)
553
-
554
- ### Component Structure (React 19+)
555
-
556
- - Use ref as prop, not `forwardRef`
557
- - Use `class-variance-authority` for button/card variants
558
- - Use `tailwind-merge` to merge className props
559
-
560
- ### Performance
561
-
562
- - Lazy load images below the fold
563
- - Use `transform` and `opacity` for animations (GPU accelerated)
564
- - Avoid animating `box-shadow` directly (use `will-change` if needed)
565
- `</design-system>`
1
+ <design-system>
2
+ # Design Style: Newsprint
3
+
4
+ ## 1. Design Philosophy
5
+
6
+ **"All the News That's Fit to Print."**
7
+
8
+ This style is an ode to the golden age of print journalism, reimagined for the web. It embodies **absolute clarity, hierarchy, and structure** through its unwavering commitment to high-contrast typography, grid-based layouts, and sharp geometric precision.
9
+
10
+ ### Core DNA
11
+
12
+ The newsprint aesthetic rejects modern web trends of soft shadows, blurred backgrounds, and rounded corners. Instead, it embraces:
13
+
14
+ - **Stark Geometry**: Zero border radius. Every element is a perfect rectangle with sharp 90-degree corners.
15
+ - **High Information Density**: Tight padding, collapsed grid borders, and efficient use of space mimic newspaper column layouts.
16
+ - **Typographic Drama**: Massive serif headlines (up to 9xl on desktop) paired with smaller, highly legible body text create extreme hierarchy.
17
+ - **Visible Structure**: Grid lines aren't hidden—they're celebrated. Borders between columns and sections are explicit and prominent.
18
+ - **Editorial Authority**: The design feels serious, timeless, and trustworthy—like a publication of record.
19
+ - **Paper Texture**: Subtle grain overlays and line patterns simulate the tactile quality of newsprint without being overly skeuomorphic.
20
+
21
+ ### Vibe
22
+
23
+ Authoritative, intellectual, urgent, timeless. It feels like holding a fresh morning newspaper—crisp, organized, and information-rich. The design exudes confidence and credibility.
24
+
25
+ ## 2. Design Token System (The DNA)
26
+
27
+ ### Colors (Single Palette)
28
+
29
+ **Mode:** Light (Permanent - no dark mode)
30
+
31
+ - **Background:** `#F9F9F7` (Newsprint Off-White)
32
+ A warm off-white that mimics aged paper. Not pure white—adds subtle warmth and reduces eye strain.
33
+ - **Foreground:** `#111111` (Ink Black)
34
+ Very deep black, not pure `#000`. Used for all text and borders.
35
+ - **Muted:** `#E5E5E0` (Divider Grey)
36
+ Light grey for secondary borders and subtle backgrounds.
37
+ - **Accent:** `#CC0000` (Editorial Red)
38
+ Bright, unapologetic red used extremely sparingly—only for breaking news badges, CTAs, and hover states. 99% of the design is black and white.
39
+ - **Border:** `#111111` (Ink Black)
40
+ The primary structural element. Borders define the grid and create visual rhythm.
41
+ - **Neutral Shades:**
42
+ `neutral-100`: `#F5F5F5` (hover backgrounds)
43
+ `neutral-200`: `#E5E5E5` (image placeholders)
44
+ `neutral-400`: `#A3A3A3` (muted text in dark sections)
45
+ `neutral-500`: `#737373` (metadata, captions)
46
+ `neutral-600`: `#525252` (body text variations)
47
+ `neutral-700`: `#404040` (secondary headings)
48
+
49
+ ### Typography
50
+
51
+ **Font Stack:**
52
+
53
+ - **Serif (Headlines & Display):** `'Playfair Display', 'Times New Roman', serif`
54
+ High-contrast, elegant, authoritative. Used for all major headings.
55
+ - **Serif (Body):** `'Lora', Georgia, serif`
56
+ Highly legible serif for long-form reading text and paragraphs.
57
+ - **Sans-Serif (UI):** `'Inter', 'Helvetica Neue', sans-serif`
58
+ Clean, modern sans for labels, buttons, navigation, and metadata.
59
+ - **Monospace (Data):** `'JetBrains Mono', 'Courier New', monospace`
60
+ For stats, dates, edition numbers, and technical information.
61
+
62
+ **Scale Strategy:**
63
+
64
+ - **H1 (Hero Headlines):** `text-5xl sm:text-6xl lg:text-9xl` (80px → 128px)
65
+ Massive, viewport-dominating. Use `leading-[0.9]` for ultra-tight line height. Apply `tracking-tighter` for condensed feel.
66
+ - **H2 (Section Headers):** `text-4xl lg:text-5xl` (36px → 48px)
67
+ Bold, `font-black`, uppercase or sentence case depending on context.
68
+ - **H3 (Card Titles):** `text-2xl lg:text-3xl` (24px 30px)
69
+ `font-bold`, serif.
70
+ - **Body Text:** `text-sm` to `text-lg` (14px 18px)
71
+ Body font (Lora), `leading-relaxed` (line-height: 1.625).
72
+ - **Metadata/Labels:** `text-xs` (12px)
73
+ Uppercase, `tracking-widest`, monospace or sans.
74
+
75
+ **Text Transform:**
76
+
77
+ - Uppercase for: Navigation, labels, metadata, badges, small caps for author bylines.
78
+ - Sentence case for: Headlines, article titles, body text.
79
+
80
+ ### Radius & Border
81
+
82
+ **Border Radius:** `0px` everywhere. No exceptions.
83
+ Use inline styles or a `.sharp-corners` utility class to enforce zero radius on all components.
84
+
85
+ **Border Width:**
86
+
87
+ - Standard: `1px` solid black (`border`, `border-r`, `border-b`)
88
+ - Heavy emphasis: `border-b-4` or `border-4` (4px solid) for major section dividers
89
+ - Collapsed grids: Adjacent elements share borders to avoid double lines
90
+
91
+ **Border Style:**
92
+ Always solid. Never dashed or dotted except for rare decorative elements (e.g., `border-dashed` inside pricing cards for feature dividers).
93
+
94
+ ### Shadows/Effects
95
+
96
+ **Philosophy:** Flat design. No soft drop shadows.
97
+
98
+ **Hover Effects:**
99
+
100
+ - **Hard Offset Shadow:** `box-shadow: 4px 4px 0px 0px #111111`
101
+ Applied on hover to blog cards or interactive elements. Creates a "lifted" newspaper cutout effect.
102
+ - **Implementation:**
103
+
104
+ ```css
105
+ .hard-shadow-hover:hover {
106
+ box-shadow: 4px 4px 0px 0px #111111;
107
+ transform: translate(-2px, -2px);
108
+ }
109
+ ```
110
+
111
+ **No Effects:**
112
+
113
+ - No blur
114
+ - No inner shadows (except for rare decorative purposes)
115
+ - No gradient overlays
116
+
117
+ ### Textures & Patterns
118
+
119
+ **Critical for Depth:** The newsprint style avoids "flat generic web design" through layered textures.
120
+
121
+ **1. Dot Grid Pattern (Main Background):**
122
+
123
+ ```html
124
+ backgroundImage: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23111111' fill-opacity='0.04' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'%3E%3C/path%3E%3C/svg%3E")`
125
+ ```
126
+
127
+ Subtle 4×4px dot pattern applied to the body background.
128
+
129
+ **2. Line Grid Overlay (Section Texture):**
130
+
131
+ ```css
132
+ .newsprint-texture {
133
+ position: relative;
134
+ }
135
+ .newsprint-texture::before {
136
+ content: '';
137
+ position: absolute;
138
+ inset: 0;
139
+ background-image:
140
+ linear-gradient(0deg, transparent 98%, rgba(0,0,0,0.02) 100%),
141
+ linear-gradient(90deg, transparent 98%, rgba(0,0,0,0.02) 100%);
142
+ background-size: 3px 3px;
143
+ pointer-events: none;
144
+ opacity: 0.5;
145
+ }
146
+ ```
147
+
148
+ Apply `.newsprint-texture` to major sections for a fine graph-paper effect.
149
+
150
+ **3. Radial Dot Pattern (Image Placeholders):**
151
+
152
+ ```html
153
+ <div className="bg-[radial-gradient(#000_1px,transparent_1px)] opacity-10 [background-size:16px_16px]" />
154
+ ```
155
+
156
+ Used in placeholder images to simulate halftone printing.
157
+
158
+ **4. Ornamental Dividers:**
159
+ Use serif ornaments between major sections:
160
+
161
+ ```html
162
+ <div className="py-8 text-center font-serif text-2xl text-neutral-400 tracking-[1em]">
163
+
164
+ </div>
165
+ ```
166
+
167
+ ## 3. Component Stylings
168
+
169
+ ### Buttons
170
+
171
+ **Primary Button (Default):**
172
+
173
+ ```tsx
174
+ className="bg-[#111111] text-[#F9F9F7] border border-transparent hover:bg-white hover:text-[#111111] hover:border-[#111111]"
175
+ ```
176
+
177
+ - Solid black background, white text
178
+ - On hover: Inverts to white background, black text and border
179
+ - Sharp corners (enforced)
180
+ - Uppercase text with `tracking-widest`
181
+ - Transition: `transition-all duration-200`
182
+
183
+ **Secondary Button (Outline):**
184
+
185
+ ```tsx
186
+ className="border border-[#111111] bg-transparent hover:bg-[#111111] hover:text-[#F9F9F7]"
187
+ ```
188
+
189
+ - Transparent background, black border and text
190
+ - On hover: Fills with black, text turns white
191
+
192
+ **Ghost Button:**
193
+
194
+ ```tsx
195
+ className="hover:bg-[#E5E5E0] hover:text-[#111111]"
196
+ ```
197
+
198
+ - No border, subtle grey background on hover
199
+
200
+ **Link Button:**
201
+
202
+ ```tsx
203
+ className="text-[#111111] underline-offset-4 decoration-2 decoration-[#CC0000] hover:underline"
204
+ ```
205
+
206
+ - Text-only, red underline on hover
207
+
208
+ **Touch Targets:**
209
+ Ensure minimum `min-h-[44px]` and `min-w-[44px]` for mobile accessibility.
210
+
211
+ ### Cards/Containers
212
+
213
+ **Standard Card:**
214
+
215
+ ```tsx
216
+ <div className="border border-[#111111] bg-[#F9F9F7] p-6">
217
+ ```
218
+
219
+ - Sharp black border
220
+ - Off-white background
221
+ - Tight padding (p-4 to p-8)
222
+
223
+ **Newspaper Column Grid:**
224
+
225
+ - Use `border-r` and `border-b` to create collapsed grid layouts
226
+ - Example: 4-column feature grid where each cell has `border-r` except the last, and all have `border-b` on mobile
227
+
228
+ **Hover States:**
229
+
230
+ - Add `hover:bg-neutral-100` to interactive cards
231
+ - Optionally add `.hard-shadow-hover` for dramatic lift effect
232
+
233
+ ### Inputs
234
+
235
+ **Style:**
236
+
237
+ ```tsx
238
+ className="border-b-2 border-[#111111] bg-transparent px-3 py-2 font-mono text-sm focus-visible:bg-[#F0F0F0] focus-visible:outline-none"
239
+ ```
240
+
241
+ - Transparent background
242
+ - Only bottom border (2px solid black)
243
+ - Monospace font
244
+ - On focus: Light grey background (`#F0F0F0`), no ring
245
+
246
+ **No Radius:** Enforce `borderRadius: 0px` inline.
247
+
248
+ ### Icons
249
+
250
+ **Library:** `lucide-react`
251
+
252
+ **Style:**
253
+
254
+ - `stroke-width={1.5}` or `stroke-1` class
255
+ - Color: Always black (`text-[#111111]`) except in inverted sections (white)
256
+ - Size: `h-6 w-6` standard, `h-4 w-4` for small
257
+
258
+ **Icon Containers:**
259
+
260
+ - Wrap in bordered boxes: `border border-black h-12 w-12 flex items-center justify-center`
261
+ - Hover effect: `hover:bg-black hover:text-white transition-all`
262
+
263
+ ## 4. Non-Genericness (The "Bold" Factor)
264
+
265
+ ### Mandatory Bold Choices
266
+
267
+ **1. Vertical Grid Dividers:**
268
+ Don't just separate sections horizontally. Use `border-r` to create strict vertical columns even within the same row. The page should feel like a newspaper grid, not a typical website.
269
+
270
+ **2. Drop Caps:**
271
+ Apply massive drop caps (`text-7xl`, `float-left`) to the first letter of key paragraphs (hero intro, product detail). Accent color optional.
272
+
273
+ **3. Marquee Ticker:**
274
+ Use a horizontal scrolling ticker (e.g., `react-fast-marquee`) for stats. Black background, white text, red accent badges. Mimics stock ticker or breaking news crawl.
275
+
276
+ **4. Edition Metadata:**
277
+ Add newspaper-style metadata:
278
+
279
+ - "Vol. 1 | [Date] | New York Edition" in header
280
+ - "Edition: Vol 1.0 | Printed in NYC" in footer
281
+ - "Fig. 1.1" captions on images
282
+
283
+ **5. Justified Text:**
284
+ Use `text-justify` for multi-column body text (blog descriptions, product detail) to create that newspaper column look.
285
+
286
+ **6. Grayscale Images:**
287
+ Apply `grayscale` filter to all images by default. On hover, add `sepia-[50%]` for a vintage newspaper photo effect.
288
+
289
+ **7. Asymmetric Layouts:**
290
+ Don't default to 50/50 splits. Use 8-col/4-col, 5-col/7-col splits for editorial feel.
291
+
292
+ **8. Uppercase Labels:**
293
+ Liberally use `uppercase tracking-widest text-xs font-mono` for section labels, navigation, and metadata.
294
+
295
+ **9. Inverted Sections:**
296
+ Flip at least one major section to black background with white text (e.g., How It Works). Use red accent for numbered steps.
297
+
298
+ ## 5. Layout Strategy
299
+
300
+ ### Container
301
+
302
+ **Max Width:** `max-w-screen-xl` (1280px)
303
+ Centered with `mx-auto`, horizontal padding `px-4`
304
+
305
+ ### Grid System
306
+
307
+ **Base:** 12-column grid
308
+ Use Tailwind's `grid-cols-12` with `col-span-*` for precise control.
309
+
310
+ **Common Splits:**
311
+
312
+ - Hero: `lg:col-span-8` / `lg:col-span-4`
313
+ - Benefits: `lg:col-span-5` / `lg:col-span-7`
314
+ - Footer: `col-span-2` for logo/description, `col-span-1` for link columns
315
+
316
+ **Collapsed Borders:**
317
+ Adjacent grid cells share borders. Use `border-r` on all but the last column, `border-b` on all rows.
318
+
319
+ ### Spacing
320
+
321
+ **Philosophy:** High information density. Tighter than typical web design.
322
+
323
+ - Section padding: `py-16` (vertical)
324
+ - Card padding: `p-6` to `p-8`
325
+ - Gap between items: `gap-6` to `gap-8`
326
+ - Mobile: Reduce to `p-4`, `gap-4`
327
+
328
+ ### Z-Index Layers
329
+
330
+ - Header (sticky): `z-40`
331
+ - Overlays/modals: `z-50`
332
+
333
+ ## 6. Effects & Animation
334
+
335
+ ### Motion Philosophy
336
+
337
+ Fast, snappy, mechanical. No bouncy or organic easing.
338
+
339
+ **Transition Classes:**
340
+
341
+ ```tsx
342
+ "transition-all duration-200 ease-out"
343
+ "transition-colors duration-200"
344
+ ```
345
+
346
+ **Hover Behaviors:**
347
+
348
+ 1. **Color Inversion:** Buttons, icons flip between black/white instantly
349
+ 2. **Hard Shadows:** Cards gain offset shadow + slight translate
350
+ 3. **Underlines:** Links gain thick underline (`decoration-2 decoration-[#CC0000]`)
351
+ 4. **Scale:** Small elements like dots can `hover:scale-150`
352
+ 5. **Background:** Containers get subtle grey background (`hover:bg-neutral-100`)
353
+
354
+ **No Floating:** Elements don't "lift" with soft shadows. They snap into place with hard shadows.
355
+
356
+ **Accordion Animation:**
357
+
358
+ ```tsx
359
+ className="grid transition-all duration-300 ease-in-out"
360
+ // Open: grid-rows-[1fr] opacity-100
361
+ // Closed: grid-rows-[0fr] opacity-0
362
+ ```
363
+
364
+ ### Micro-Interactions
365
+
366
+ - FAQ plus icons rotate 45° when open
367
+ - Blog card images scale 105% on hover
368
+ - Feature icon boxes invert colors on hover
369
+ - Navigation links turn red on hover
370
+
371
+ ## 7. Spacing, Layout & Iconography
372
+
373
+ ### Default Max-Width
374
+
375
+ `max-w-screen-xl` (1280px) for primary content container.
376
+
377
+ ### Spacing System
378
+
379
+ Use an 8px grid system. Common values:
380
+
381
+ - Tight: `gap-2` (8px), `p-2` (8px)
382
+ - Standard: `gap-4` (16px), `p-4` (16px)
383
+ - Comfortable: `gap-8` (32px), `p-8` (32px)
384
+ - Spacious: `gap-16` (64px), `py-16` (64px)
385
+
386
+ **Mobile:** Reduce by one step (e.g., `p-8` → `p-6`)
387
+
388
+ ### Iconography
389
+
390
+ **Integration:**
391
+
392
+ - Icons inside bordered boxes (feature cards)
393
+ - Icons as section markers (small squares, bullets)
394
+ - Icons in navigation (minimal use)
395
+ - Icons in social links (bordered boxes in footer)
396
+
397
+ **Style Consistency:**
398
+
399
+ - All icons from `lucide-react`
400
+ - Consistent stroke width (`stroke-1`)
401
+ - Black color by default, white in inverted sections
402
+
403
+ ## 8. Responsive Strategy
404
+
405
+ ### Breakpoints
406
+
407
+ - Mobile: `< 768px` (default)
408
+ - Tablet: `md:` (768px+)
409
+ - Desktop: `lg:` (1024px+)
410
+
411
+ ### Mobile Adaptations
412
+
413
+ 1. **Grid Collapse:**
414
+ Multi-column grids collapse to single column (`grid-cols-1`)
415
+ 2. **Border Removal:**
416
+ Remove `border-r` on mobile, keep `border-b` for horizontal separators
417
+
418
+ ```css
419
+ @media (max-width: 767px) {
420
+ .grid-border-r { border-right: none; }
421
+ }
422
+ ```
423
+ 3. **Typography Scaling:**
424
+ Headlines shrink dramatically: `text-5xl` → `text-6xl` → `text-9xl`
425
+ 4. **Padding Reduction:**
426
+ `p-16` → `p-8` → `p-6` on smaller screens
427
+ 5. **Touch Targets:**
428
+ All interactive elements minimum `44x44px` (`min-h-[44px] min-w-[44px]`)
429
+ 6. **CTA Buttons:**
430
+ Full width on mobile (`w-full md:w-auto`)
431
+ 7. **Navigation:**
432
+ Show hamburger menu icon on mobile (44px tap target)
433
+ Hide main nav links, show mobile menu
434
+
435
+ ### Maintaining Aesthetic
436
+
437
+ Even on mobile, preserve:
438
+
439
+ - Sharp corners (zero radius)
440
+ - High contrast
441
+ - Grid-based layout (just single column)
442
+ - Horizontal rule separators between sections
443
+ - Uppercase labels and metadata
444
+
445
+ ## 9. Accessibility & Best Practices
446
+
447
+ ### Contrast Ratios
448
+
449
+ - Black `#111111` on Off-White `#F9F9F7`: **AAA compliant** (>17:1)
450
+ - Red `#CC0000` on Off-White: **AA compliant** (>5:1)
451
+ - Never put red text on black background
452
+
453
+ ### Focus States
454
+
455
+ ```tsx
456
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2"
457
+ ```
458
+
459
+ - Thick black ring (2px)
460
+ - 2px offset for visibility
461
+ - Only visible when using keyboard navigation (`:focus-visible`)
462
+
463
+ ### Semantic HTML
464
+
465
+ - Use `<header>`, `<nav>`, `<section>`, `<footer>`
466
+ - Use `<h1>` through `<h6>` in proper hierarchy
467
+ - Use `<button>` for interactive elements, not divs
468
+ - Use `<a>` for links with proper `href`
469
+
470
+ ### ARIA Labels
471
+
472
+ - Add `aria-label` to icon-only buttons
473
+ - Add `alt` text to all images (even decorative ones)
474
+ - Add `role="img"` and `aria-labelledby` to SVG icons
475
+
476
+ ### Keyboard Navigation
477
+
478
+ - All interactive elements must be keyboard accessible
479
+ - Visible focus states (see above)
480
+ - Accordion items use `button` with proper `aria-expanded`
481
+
482
+ ## 10. Implementation Constraints
483
+
484
+ ### Font Import
485
+
486
+ Use `@import` in inline `<style>` tag:
487
+
488
+ ```css
489
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Playfair+Display:ital,wght@0,400;0,600;0,700;0,900;1,400&family=Lora:ital,wght@0,400;0,600;1,400&display=block');
490
+ ```
491
+
492
+ Define font classes:
493
+
494
+ ```css
495
+ .font-serif { font-family: 'Playfair Display', serif; }
496
+ .font-body { font-family: 'Lora', serif; }
497
+ .font-sans { font-family: 'Inter', sans-serif; }
498
+ .font-mono { font-family: 'JetBrains Mono', monospace; }
499
+ ```
500
+
501
+ ### Tailwind Utilities
502
+
503
+ Create custom utilities in `<style>` block:
504
+
505
+ - `.sharp-corners { border-radius: 0px !important; }`
506
+ - `.newsprint-texture { ... }` (see Textures section)
507
+ - `.hard-shadow-hover:hover { ... }` (see Effects section)
508
+
509
+ ### Border Collapse Logic
510
+
511
+ To avoid double borders in grids:
512
+
513
+ 1. Use `border-l` and `border-t` on the container
514
+ 2. Use `border-r` and `border-b` on children
515
+ 3. Remove `border-r` on last column
516
+ 4. Remove `border-b` on last row (if needed)
517
+
518
+ ### Component Structure (React 19+)
519
+
520
+ - Use ref as prop, not `forwardRef`
521
+ - Use `class-variance-authority` for button/card variants
522
+ - Use `tailwind-merge` to merge className props
523
+
524
+ ### Performance
525
+
526
+ - Lazy load images below the fold
527
+ - Use `transform` and `opacity` for animations (GPU accelerated)
528
+ - Avoid animating `box-shadow` directly (use `will-change` if needed)
529
+ `</design-system>`