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,700 +1,664 @@
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
- # Retro / 90s Nostalgia Design System
39
-
40
- ## Design Philosophy
41
-
42
- **Core Principles**: Embrace the raw, unfiltered aesthetic of the early web. This design celebrates the "ugly-cool" charm of 1990s websites—beveled buttons, system fonts, garish colors, and animated elements. It's deliberately anti-modern, rejecting minimalism in favor of maximum visual impact and nostalgic authenticity. Every pixel should feel like it was crafted in 1997 on a Windows 95 machine.
43
-
44
- **Vibe**: Playful, chaotic, nostalgic, and unapologetically loud. Think GeoCities pages, "Under Construction" banners, hit counters, and guestbooks. This isn't about looking dated—it's about capturing the optimistic, experimental spirit of the early internet when everyone was just figuring things out. The aesthetic should feel authentic enough that someone who lived through the era would smile with recognition.
45
-
46
- **Historical Context**: This style peaked between 1995-1999, when personal computers used Windows 95/98, monitors were 800x600 resolution, and web browsers offered limited CSS. Designers worked within severe constraints, which produced a distinctive visual language we're faithfully recreating.
47
-
48
- ---
49
-
50
- ## Design Token System (The DNA)
51
-
52
- ### Colors (Light Mode Only)
53
-
54
- This palette is pulled directly from Windows 95 system colors and early web hex values.
55
-
56
- | Token | Value | Usage | Notes |
57
- | ----------------------- | ----------- | ---------------------------- | ------------------------------------------- |
58
- | `background` | `#C0C0C0` | Primary page background | Classic Windows 95 button face gray |
59
- | `foreground` | `#000000` | Pure black text | Maximum contrast, no grays for body text |
60
- | `muted` | `#808080` | Secondary elements, metadata | Exactly 50% gray (128,128,128) |
61
- | `accent` | `#0000FF` | Hyperlinks (unvisited) | Pure blue at maximum saturation |
62
- | `secondary` | `#FF0000` | Hot red for emphasis | Pure red at maximum saturation |
63
- | `tertiary` | `#FFFF00` | Bright yellow highlights | Pure yellow, used for badges and highlights |
64
- | `success` | `#00FF00` | Lime green | Pure green at maximum saturation |
65
- | `successDark` | `#00AA00` | Darker green for buttons | More readable green variant |
66
- | `border` | `#000000` | Pure black borders | Used for outer borders |
67
- | `borderLight` | `#FFFFFF` | White for 3D highlight | Top/left bevel edge |
68
- | `borderDark` | `#808080` | Gray for 3D shadow | Bottom/right bevel edge |
69
- | `titleBar` | `#000080` | Windows title bar navy | Pure dark blue (Navy) |
70
- | `titleBarGradientEnd` | `#1084D0` | Title bar gradient | Windows 98 active window gradient |
71
- | `panelYellow` | `#FFFFCC` | Light yellow content panels | Authentic Windows notepad/help color |
72
- | `visitedLink` | `#800080` | Visited hyperlinks | Purple/Maroon |
73
- | `hoverLink` | `#FF0000` | Link hover state | Red |
74
-
75
- **Color Relationships**:
76
-
77
- - All colors are at maximum saturation (pure RGB values with at least one channel at 0 or 255)
78
- - No gradual grays - only `#000000`, `#808080`, `#C0C0C0`, `#FFFFFF`
79
- - Links follow the classic progression: Blue → Purple (visited) → Red (hover)
80
-
81
- ### Typography
82
-
83
- **Font Stacks** (System fonts that evoke 1995-1999):
84
-
85
- - **Primary Body**: `"MS Sans Serif", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif`
86
- - **Headings**: `"Arial Black", Impact, Haettenschweiler, sans-serif` (heavy, bold weights only)
87
- - **Monospace**: `"Courier New", Courier, monospace` (for dates, stats, counters, code-like elements)
88
- - **Playful accent** (ultra-sparingly): `"Comic Sans MS", cursive` (only for "fun" decorative elements if needed)
89
-
90
- **Type Scale**:
91
-
92
- - **H1 Hero**: 48px-96px (3xl to 6xl), always UPPERCASE or Title Case, Arial Black/Impact
93
- - **H2 Section**: 32-48px (2xl to 4xl), often UPPERCASE, Arial Black
94
- - **H3 Subsection**: 20-24px (lg to xl), bold weight
95
- - **Body**: 14-16px, default weight, readable density
96
- - **Small/Meta**: 12px (xs), often monospace for dates and metadata
97
- - **Labels**: 10-12px, UPPERCASE, sometimes monospace
98
-
99
- **Typographic Patterns**:
100
-
101
- - Headings are BOLD or BLACK weight - no thin or light fonts exist in this era
102
- - Letter-spacing on UPPERCASE headings: `tracking-tight` to `tracking-wide` (not expanded)
103
- - Line-height: Dense (1.2-1.4 for headings, 1.5-1.6 for body)
104
- - Text shadows for 3D text: `text-shadow: 2px 2px 0 #808080` (hard-edged, no blur)
105
-
106
- ### Radius & Borders
107
-
108
- **Border Radius**: `0px` EVERYWHERE. No exceptions. The 90s didn't have border-radius.
109
-
110
- **Border Widths**:
111
-
112
- - Standard: `2px` for most elements
113
- - Emphasis: `4px` for section dividers and highlighted elements
114
- - Minimum: `1px` only for subtle inner detail (rare)
115
-
116
- **3D Bevel Effect** (THE SIGNATURE):
117
-
118
- This is the most critical visual element. Windows 95 used a specific 4-value border-color syntax combined with box-shadow for depth.
119
-
120
- **Outset (Raised) - Elements that appear to pop out**:
121
-
122
- ```css
123
- border: 2px solid;
124
- border-color: #ffffff #808080 #808080 #ffffff; /* Top Right Bottom Left */
125
- box-shadow: inset -1px -1px 0 #404040, inset 1px 1px 0 #dfdfdf;
126
- ```
127
-
128
- - Top and left edges: white (#ffffff)
129
- - Bottom and right edges: gray (#808080)
130
- - Inner shadow adds depth with darker (#404040) and lighter (#dfdfdf) accents
131
-
132
- **Outset Enhanced (Deeper bevel)**:
133
-
134
- ```css
135
- border: 2px solid;
136
- border-color: #ffffff #808080 #808080 #ffffff;
137
- box-shadow:
138
- inset -2px -2px 0 #808080,
139
- inset 2px 2px 0 #fff,
140
- inset -4px -4px 0 #404040,
141
- inset 4px 4px 0 #dfdfdf;
142
- ```
143
-
144
- **Inset (Sunken) - Elements that appear pressed in**:
145
-
146
- ```css
147
- border: 2px solid;
148
- border-color: #808080 #ffffff #ffffff #808080; /* REVERSED from outset */
149
- box-shadow: inset 1px 1px 0 #404040, inset -1px -1px 0 #dfdfdf;
150
- ```
151
-
152
- - Top and left edges: gray (#808080)
153
- - Bottom and right edges: white (#ffffff)
154
- - Inner shadow creates recessed appearance
155
-
156
- **Active/Pressed State**:
157
- When an outset element is clicked, it becomes inset AND translates 1px down and right:
158
-
159
- ```css
160
- border-color: #808080 #ffffff #ffffff #808080;
161
- box-shadow: inset 1px 1px 0 #404040, inset -1px -1px 0 #dfdfdf;
162
- transform: translate(1px, 1px);
163
- ```
164
-
165
- **Tailwind Implementation**:
166
- Use arbitrary values with underscores for spaces:
167
-
168
- - `[border-color:#fff_#808080_#808080_#fff]` for outset
169
- - `[border-color:#808080_#fff_#fff_#808080]` for inset
170
- - `[box-shadow:inset_-1px_-1px_0_#404040,inset_1px_1px_0_#dfdfdf]`
171
-
172
- ### Textures & Patterns (MANDATORY)
173
-
174
- The background must NOT be flat. This is critical for authenticity.
175
-
176
- **90s Tiled Pattern** (Primary technique):
177
-
178
- ```css
179
- background-color: #c0c0c0;
180
- background-image:
181
- linear-gradient(45deg, #b8b8b8 25%, transparent 25%),
182
- linear-gradient(-45deg, #b8b8b8 25%, transparent 25%),
183
- linear-gradient(45deg, transparent 75%, #b8b8b8 75%),
184
- linear-gradient(-45deg, transparent 75%, #b8b8b8 75%);
185
- background-size: 4px 4px;
186
- background-position: 0 0, 0 2px, 2px -2px, -2px 0px;
187
- ```
188
-
189
- This creates a subtle diagonal crosshatch that gives texture without being distracting.
190
-
191
- **Construction Warning Stripes** (For emphasis areas):
192
-
193
- ```css
194
- background: repeating-linear-gradient(
195
- 45deg,
196
- #ffff00,
197
- #ffff00 10px,
198
- #000000 10px,
199
- #000000 20px
200
- );
201
- ```
202
-
203
- Exactly 10px yellow, 10px black stripes at 45-degree angle.
204
-
205
- **Horizontal Rule (HR) with Groove Effect**:
206
-
207
- ```css
208
- border: none;
209
- height: 4px;
210
- background: linear-gradient(
211
- to bottom,
212
- #808080 0%, #808080 50%,
213
- #ffffff 50%, #ffffff 100%
214
- );
215
- ```
216
-
217
- Creates the classic "etched" divider look.
218
-
219
- ---
220
-
221
- ## Component Styling Principles
222
-
223
- ### Buttons
224
-
225
- **Visual Requirements**:
226
-
227
- - Border: 2px with 4-value outset color pattern
228
- - Background: Subtle gradient or solid color depending on variant
229
- - Text: Bold, UPPERCASE with `tracking-wide`, centered
230
- - Padding: 8px vertical, 16px horizontal (comfortable clickable area)
231
- - NO border-radius
232
- - NO soft drop shadows
233
-
234
- **State Transitions**:
235
-
236
- - **Default**: Outset bevel, slightly lighter background on hover
237
- - **Hover**: Background lightens by 1-2 shades, maintain outset
238
- - **Active/Pressed**: Inset bevel (reversed border-color), translate(1px, 1px)
239
- - **Focus**: Dotted 2px black outline, 2px offset (Windows 95 focus ring)
240
- - **Transition**: NONE or instant (`transition-none` or 50ms max) - no smooth easing
241
-
242
- **Variants**:
243
-
244
- 1. **Default/Ghost**: `#C0C0C0` background, black text, outset bevel
245
- 2. **Accent/Primary**: `#0000FF` background, white text, blue-tinted bevel edges
246
- 3. **Danger**: `#FF0000` background, white text, red-tinted bevel edges
247
- 4. **Success**: `#00AA00` (readable green) background, white text, green-tinted bevel
248
- 5. **Outline**: White background, black text, outset bevel
249
-
250
- **Bevel Color Tinting**:
251
- For colored buttons, tint the bevel edges to match:
252
-
253
- - Blue button: `border-color: #5555ff #000080 #000080 #5555ff`
254
- - Red button: `border-color: #ff5555 #800000 #800000 #ff5555`
255
- - Green button: `border-color: #00ff00 #006600 #006600 #00ff00`
256
-
257
- **Example Tailwind Classes**:
258
-
259
- ```
260
- border-2
261
- bg-[#c0c0c0]
262
- text-black
263
- [border-color:#fff_#808080_#808080_#fff]
264
- [box-shadow:inset_-1px_-1px_0_#404040,inset_1px_1px_0_#dfdfdf]
265
- hover:bg-[#d0d0d0]
266
- active:[border-color:#808080_#fff_#fff_#808080]
267
- active:[box-shadow:inset_1px_1px_0_#404040,inset_-1px_-1px_0_#dfdfdf]
268
- active:translate-x-[1px]
269
- active:translate-y-[1px]
270
- focus-visible:outline-dotted
271
- focus-visible:outline-2
272
- focus-visible:outline-black
273
- focus-visible:outline-offset-2
274
- ```
275
-
276
- ### Cards/Containers
277
-
278
- **Panel/Card Structure**:
279
-
280
- - Container: 2px outset bevel, `#C0C0C0` background
281
- - Title bar: Gradient `linear-gradient(to right, #000080, #1084d0)`, white text, bold, 4-8px padding
282
- - Content area: Inset bevel (sunken), white or `#FFFFCC` (yellow) background
283
-
284
- **Window-Style Card** (Most distinctive):
285
-
286
- ```
287
- Outer container: outset bevel, gray background
288
- ├── Title bar: navy gradient (#000080 → #1084d0), white bold text
289
- └── Content area: inset bevel, white background, padding 16px
290
- ```
291
-
292
- **Alternating Row Backgrounds**:
293
- For table-like layouts, alternate between:
294
-
295
- - Even rows: `#FFFFFF` (white)
296
- - Odd rows: `#E8E8E8` (light gray)
297
-
298
- This creates the classic spreadsheet/database appearance.
299
-
300
- **Borders Between Cells**:
301
- Use `border-right-2` and `border-bottom-2` with `#808080` to create visible grid lines.
302
-
303
- ### Form Inputs
304
-
305
- **Input Fields**:
306
-
307
- - Border: 2px inset (sunken appearance)
308
- - Background: White
309
- - Text: Black, 14-16px
310
- - Padding: 4-8px
311
- - Focus: Dotted 2px black outline, 2px offset
312
- - Disabled: `#C0C0C0` background, 50% opacity
313
-
314
- **Placeholder Text**: `#808080` (gray)
315
-
316
- **Select Dropdowns**: Same inset styling as inputs
317
-
318
- **Checkboxes/Radio**: Not common in 90s web (use text indicators or simple squares)
319
-
320
- ### Links (Hyperlinks)
321
-
322
- The most iconic element of the 90s web.
323
-
324
- **States**:
325
-
326
- - **Unvisited**: `#0000FF` (blue), underlined always
327
- - **Visited**: `#800080` (purple)
328
- - **Hover**: `#FF0000` (red)
329
- - **Active** (while clicking): `#FF0000` (red)
330
-
331
- **Rules**:
332
-
333
- - ALWAYS underlined (never remove text-decoration)
334
- - Color changes are instant (no transitions)
335
- - No background on hover
336
- - No additional styling effects
337
-
338
- **Example**:
339
-
340
- ```
341
- text-[#0000ff]
342
- underline
343
- hover:text-[#ff0000]
344
- visited:text-[#800080]
345
- ```
346
-
347
- ### Icons
348
-
349
- **Styling**:
350
-
351
- - Stroke width: `2px` or `stroke-[2px]` (thick, bold lines)
352
- - Color: Match the accent color of the section (blue, red, green)
353
- - Size: 24px (h-6 w-6) standard, 32px for features
354
- - NO rounded corners or soft shapes
355
- - Consider adding 2px black borders around icon containers
356
-
357
- **Icon Containers**:
358
- If placing icons in colored boxes:
359
-
360
- - Box background: Solid bright color (#000080, #008080, #00AA00)
361
- - Icon color: White
362
- - Box style: Outset or flat with borders
363
-
364
- ---
365
-
366
- ## Layout Principles
367
-
368
- ### Page Structure
369
-
370
- **Maximum Width**: `max-w-5xl` (1024px) - mimics 800x600 monitor content area with browser chrome
371
-
372
- **Spacing System**:
373
-
374
- - Base unit: 8px
375
- - Element padding: 16px (generous interior spacing)
376
- - Element margins: 8-16px (tighter exterior spacing for density)
377
- - Section padding: 64px vertical (py-16), 16px horizontal (px-4)
378
-
379
- **Section Dividers**:
380
- Use thick borders (`border-b-4 border-[#808080]`) OR the groove HR effect between major sections.
381
-
382
- **Grid Layouts**:
383
- Even though using modern CSS Grid/Flexbox, make it LOOK like tables:
384
-
385
- - Visible cell borders with `border-2` or `border-r-2`/`border-b-2`
386
- - Alternating row backgrounds
387
- - Equal column widths where possible
388
- - Dense, compact spacing
389
-
390
- ### Responsive Strategy
391
-
392
- **Desktop** (768px+):
393
-
394
- - Full table-like layouts with side-by-side columns
395
- - Multi-column grids (2-4 columns)
396
- - Visible complex borders
397
-
398
- **Tablet** (640-768px):
399
-
400
- - Reduce to 2 columns max
401
- - Maintain all visual styling (bevels, borders)
402
- - Stack complex tables if needed
403
-
404
- **Mobile** (<640px):
405
-
406
- - Single column
407
- - KEEP beveled effects (essential to the style)
408
- - Marquee continues to scroll
409
- - Reduce font sizes slightly but keep bold weights
410
- - Horizontal scrolling for complex tables is acceptable (authentic!)
411
-
412
- **Important**: The aesthetic is more important than perfect responsiveness. It's okay if the mobile experience is slightly janky—that's authentic to the era.
413
-
414
- ---
415
-
416
- ## The "Bold Factor" (Non-Genericness)
417
-
418
- **MANDATORY ELEMENTS** - These must be present or the style fails:
419
-
420
- ### 1. Marquee Scrolling Text
421
-
422
- Use `react-fast-marquee` or pure CSS marquee for:
423
-
424
- - Announcement bars with colorful text
425
- - Testimonial carousels
426
- - "Breaking news" style updates
427
-
428
- **Settings**:
429
-
430
- - Speed: 30-60 (moderate pace)
431
- - No gradient fade (gradient={false})
432
- - Multiple spans with different colors
433
-
434
- ### 2. Animated Rainbow Text
435
-
436
- CSS animation cycling through bright colors for hero headlines:
437
-
438
- ```css
439
- @keyframes rainbow {
440
- 0% { color: #ff0000; }
441
- 17% { color: #ff8000; }
442
- 33% { color: #ffff00; }
443
- 50% { color: #00ff00; }
444
- 67% { color: #0080ff; }
445
- 83% { color: #8000ff; }
446
- 100% { color: #ff0000; }
447
- }
448
- animation: rainbow 4s linear infinite;
449
- ```
450
-
451
- **Duration**: 4 seconds, linear easing (no smoothing)
452
-
453
- ### 3. Beveled Everything
454
-
455
- Every interactive element and most containers must have the 3D outset/inset effect. This is NON-NEGOTIABLE.
456
-
457
- ### 4. "Under Construction" Energy
458
-
459
- Add small animated elements:
460
-
461
- - Blinking "NEW!" badges (use `animate-pulse` or CSS blink with step-end)
462
- - Pulsing call-to-action badges
463
- - Color-cycling decorative elements
464
-
465
- **Pulse Glow Animation** (for badges):
466
-
467
- ```css
468
- @keyframes pulse-glow {
469
- 0%, 100% {
470
- transform: scale(1);
471
- box-shadow: 0 0 0 0 rgba(255, 0, 0, 0.7);
472
- }
473
- 50% {
474
- transform: scale(1.05);
475
- box-shadow: 0 0 10px 2px rgba(255, 0, 0, 0.5);
476
- }
477
- }
478
- animation: pulse-glow 1.5s ease-in-out infinite;
479
- ```
480
-
481
- ### 5. Horizontal Rules (HR) as Dividers
482
-
483
- Use the 3D groove effect between major content sections. This is a signature 90s pattern.
484
-
485
- ### 6. Hit Counter Aesthetic
486
-
487
- Style at least one stats section like a classic hit counter:
488
-
489
- - Black or navy background
490
- - Green monospace text (#00FF00)
491
- - Beveled inset frame
492
- - Text like "Visitors: 0001234 | Since 1995"
493
-
494
- ### 7. Table-Like Visual Layouts
495
-
496
- Even when using modern CSS, create the appearance of HTML tables:
497
-
498
- - Visible cell borders (`border-2 border-[#808080]`)
499
- - Alternating row backgrounds
500
- - Grid-like precision
501
-
502
- ### 8. Title Bar Windows
503
-
504
- Cards should look like Windows 95 application windows:
505
-
506
- - Navy-to-blue gradient title bar
507
- - White bold text in title
508
- - Inset content area below
509
-
510
- ### 9. Decorative Color Squares
511
-
512
- Include at least one section with a grid of bright colored squares (red, green, blue, yellow, magenta, cyan) with beveled edges. This is pure decorative 90s excess.
513
-
514
- ### 10. Construction Stripe Background
515
-
516
- Use the yellow/black diagonal stripe pattern for at least one emphasized section (like final CTA).
517
-
518
- ---
519
-
520
- ## Animation & Motion
521
-
522
- **Motion Philosophy**: Snappy, immediate, digital. No organic easing curves.
523
-
524
- **Timing Functions**:
525
-
526
- - **Instant state changes**: `transition-none` or `duration-0`
527
- - **Color cycling**: `linear` (no easing)
528
- - **Badges/pulses**: `ease-in-out` (acceptable for attention effects)
529
- - **Button press**: `transition-none` or max 50ms
530
-
531
- **Durations**:
532
-
533
- - Button press: Instant or 50ms
534
- - Hover color change: 75ms or instant
535
- - Rainbow text cycle: 3-5 seconds
536
- - Pulse glow: 1-2 seconds
537
- - Marquee speed: Moderate (40-60px/second)
538
-
539
- **Key Animations**:
540
-
541
- 1. **Rainbow Text**: 4s linear infinite loop through spectrum
542
- 2. **Pulse Glow**: 1.5s ease-in-out infinite for "NEW!" badges
543
- 3. **Blink** (ultra-sparingly): 1s step-end infinite (harsh on/off, not fade)
544
- 4. **Marquee**: Continuous scroll, pauseOnHover for usability
545
-
546
- **Reduced Motion**:
547
- Respect `prefers-reduced-motion`:
548
-
549
- - Stop rainbow animation (fallback to single bright color)
550
- - Stop marquee (show static or slower scroll)
551
- - Stop pulsing badges (static with bright color)
552
-
553
- ---
554
-
555
- ## Accessibility
556
-
557
- **Color Contrast**:
558
-
559
- - Black (#000000) on silver (#C0C0C0): 7.5:1 (AAA)
560
- - White on navy (#000080): 8.6:1 (AAA)
561
- - White on blue (#0000FF): 8.6:1 (AAA)
562
- - The palette naturally provides excellent contrast
563
-
564
- **Focus States**:
565
-
566
- - 2px dotted black outline (Windows 95 authentic)
567
- - 2px offset from element
568
- - High visibility, matches the aesthetic
569
- - NEVER remove focus indicators
570
-
571
- **Keyboard Navigation**:
572
-
573
- - All interactive elements must be keyboard accessible
574
- - Tab order should follow visual order
575
- - Button press on Enter/Space should show active state
576
-
577
- **Screen Readers**:
578
-
579
- - Marquee text must have static alternative or be aria-live="polite"
580
- - Decorative animated elements should be aria-hidden
581
- - Color squares and decorative patterns need no alt text
582
- - Ensure semantic HTML even with table-like appearance
583
-
584
- **Motion Sensitivity**:
585
- Provide `prefers-reduced-motion` alternatives:
586
-
587
- ```css
588
- @media (prefers-reduced-motion: reduce) {
589
- .text-rainbow { animation: none; color: #ff0000; }
590
- .animate-pulse-glow { animation: none; }
591
- /* Marquee handled by library or CSS */
592
- }
593
- ```
594
-
595
- ---
596
-
597
- ## Anti-Patterns (What to AVOID)
598
-
599
- ### Visual No-Nos:
600
-
601
- 1. **NO border-radius** - Not even 1px. Zero. Always.
602
- 2. **NO soft drop shadows** - Only use inset shadows for bevels
603
- 3. **NO gradients** except:
604
- - Title bar gradient (navy to blue)
605
- - Background patterns (stripes, tiles)
606
- - Subtle button backgrounds
607
- 4. **NO semi-transparent overlays** - Colors are always opaque (except white/80 for secondary text on dark backgrounds)
608
- 5. **NO thin fonts** - Everything is bold or black weight
609
- 6. **NO subtle grays** - Only #000000, #808080, #C0C0C0, #FFFFFF, #E8E8E8
610
- 7. **NO smooth easing** - Use linear or instant transitions
611
- 8. **NO removing link underlines** - Always visible
612
- 9. **NO modern minimalist spacing** - Dense, not airy
613
- 10. **NO attempting to "modernize" the aesthetic** - Embrace the cheese
614
-
615
- ### Interaction No-Nos:
616
-
617
- 1. **DON'T use hover states that scale elements** (except 1.05 for pulse badges)
618
- 2. **DON'T use fade transitions** - Changes should be instant or linear
619
- 3. **DON'T make marquee text essential content** - Keep it decorative/supplemental
620
- 4. **DON'T override browser default selection color** - Actually, DO: use #000080 background, white text
621
- 5. **DON'T use floating action buttons** or modern UI patterns
622
-
623
- ### Content No-Nos:
624
-
625
- 1. **DON'T use placeholder text** that doesn't fit the era (no "lorem ipsum")
626
- 2. **DON'T reference modern tech** in decorative text (keep it generic or 90s-themed)
627
- 3. **DON'T be subtle** - This style is LOUD and PROUD
628
-
629
- ---
630
-
631
- ## Implementation Notes
632
-
633
- ### Tailwind Arbitrary Values
634
-
635
- You'll use these constantly:
636
-
637
- ```
638
- border-[2px]
639
- [border-color:#fff_#808080_#808080_#fff]
640
- [box-shadow:inset_-1px_-1px_0_#404040,inset_1px_1px_0_#dfdfdf]
641
- bg-[#c0c0c0]
642
- text-[#0000ff]
643
- ```
644
-
645
- Note: Use underscores for spaces in arbitrary values.
646
-
647
- ### Custom CSS Required
648
-
649
- Some effects need CSS files:
650
-
651
- - `@keyframes` for rainbow, pulse-glow, blink
652
- - `.hr-groove` for horizontal rule effect
653
- - `.bg-90s-tile` for tiled background pattern
654
- - `.bg-construction` for warning stripes
655
-
656
- ### Dependencies
657
-
658
- - **react-fast-marquee**: Essential for authentic scrolling text
659
- - Consider creating CSS variables for the complex box-shadow values for reusability
660
-
661
- ### Color Layering Strategy
662
-
663
- 1. **Base**: Tiled #C0C0C0 background
664
- 2. **Surface**: White or gray (#E8E8E8) panels with bevels
665
- 3. **Accent surfaces**: Navy title bars, colored feature boxes
666
- 4. **Foreground**: Black text, colored icons
667
- 5. **Highlights**: Yellow badges, red "NEW!" tags, rainbow text
668
-
669
- ---
670
-
671
- ## Signature Visual Checklist
672
-
673
- Before considering the design complete, verify these are present:
674
-
675
- - [ ] At least one marquee scrolling element with colorful text
676
- - [ ] Rainbow animated text on hero or major heading
677
- - [ ] All buttons have 3D outset bevels with proper border-color syntax
678
- - [ ] At least one card with Windows 95 title bar gradient
679
- - [ ] Tiled background pattern visible on main body
680
- - [ ] Hyperlinks are blue/underlined, turn red on hover
681
- - [ ] At least one section with alternating row backgrounds
682
- - [ ] Horizontal groove rule divider between major sections
683
- - [ ] A "hit counter" style stats display with monospace green text
684
- - [ ] One "NEW!" or "HOT!" badge with pulse animation
685
- - [ ] Construction stripe background on at least one section
686
- - [ ] All interactive elements have dotted focus outlines
687
- - [ ] Active buttons show pressed state (inset + translate)
688
- - [ ] Icons have 2px stroke width
689
- - [ ] Zero instances of border-radius anywhere
690
-
691
- ---
692
-
693
- ## The Secret Sauce
694
-
695
- What makes this style work is **commitment to authenticity over modernization**. The temptation will be to "clean it up" or "make it more professional." Resist this. The ugliness IS the beauty. The clashing colors, the dense layouts, the aggressive animations—these aren't bugs, they're features.
696
-
697
- Someone who lived through 1997 should look at this and immediately feel transported back. The design should be so authentic that it's almost jarring next to modern websites. That contrast IS the point.
698
-
699
- Embrace the cheese. Celebrate the chaos. Welcome to 1997.
700
- `</design-system>`
1
+ <design-system>
2
+ # Retro / 90s Nostalgia Design System
3
+
4
+ ## Design Philosophy
5
+
6
+ **Core Principles**: Embrace the raw, unfiltered aesthetic of the early web. This design celebrates the "ugly-cool" charm of 1990s websites—beveled buttons, system fonts, garish colors, and animated elements. It's deliberately anti-modern, rejecting minimalism in favor of maximum visual impact and nostalgic authenticity. Every pixel should feel like it was crafted in 1997 on a Windows 95 machine.
7
+
8
+ **Vibe**: Playful, chaotic, nostalgic, and unapologetically loud. Think GeoCities pages, "Under Construction" banners, hit counters, and guestbooks. This isn't about looking dated—it's about capturing the optimistic, experimental spirit of the early internet when everyone was just figuring things out. The aesthetic should feel authentic enough that someone who lived through the era would smile with recognition.
9
+
10
+ **Historical Context**: This style peaked between 1995-1999, when personal computers used Windows 95/98, monitors were 800x600 resolution, and web browsers offered limited CSS. Designers worked within severe constraints, which produced a distinctive visual language we're faithfully recreating.
11
+
12
+ ---
13
+
14
+ ## Design Token System (The DNA)
15
+
16
+ ### Colors (Light Mode Only)
17
+
18
+ This palette is pulled directly from Windows 95 system colors and early web hex values.
19
+
20
+ | Token | Value | Usage | Notes |
21
+ | ----------------------- | ----------- | ---------------------------- | ------------------------------------------- |
22
+ | `background` | `#C0C0C0` | Primary page background | Classic Windows 95 button face gray |
23
+ | `foreground` | `#000000` | Pure black text | Maximum contrast, no grays for body text |
24
+ | `muted` | `#808080` | Secondary elements, metadata | Exactly 50% gray (128,128,128) |
25
+ | `accent` | `#0000FF` | Hyperlinks (unvisited) | Pure blue at maximum saturation |
26
+ | `secondary` | `#FF0000` | Hot red for emphasis | Pure red at maximum saturation |
27
+ | `tertiary` | `#FFFF00` | Bright yellow highlights | Pure yellow, used for badges and highlights |
28
+ | `success` | `#00FF00` | Lime green | Pure green at maximum saturation |
29
+ | `successDark` | `#00AA00` | Darker green for buttons | More readable green variant |
30
+ | `border` | `#000000` | Pure black borders | Used for outer borders |
31
+ | `borderLight` | `#FFFFFF` | White for 3D highlight | Top/left bevel edge |
32
+ | `borderDark` | `#808080` | Gray for 3D shadow | Bottom/right bevel edge |
33
+ | `titleBar` | `#000080` | Windows title bar navy | Pure dark blue (Navy) |
34
+ | `titleBarGradientEnd` | `#1084D0` | Title bar gradient | Windows 98 active window gradient |
35
+ | `panelYellow` | `#FFFFCC` | Light yellow content panels | Authentic Windows notepad/help color |
36
+ | `visitedLink` | `#800080` | Visited hyperlinks | Purple/Maroon |
37
+ | `hoverLink` | `#FF0000` | Link hover state | Red |
38
+
39
+ **Color Relationships**:
40
+
41
+ - All colors are at maximum saturation (pure RGB values with at least one channel at 0 or 255)
42
+ - No gradual grays - only `#000000`, `#808080`, `#C0C0C0`, `#FFFFFF`
43
+ - Links follow the classic progression: Blue → Purple (visited) → Red (hover)
44
+
45
+ ### Typography
46
+
47
+ **Font Stacks** (System fonts that evoke 1995-1999):
48
+
49
+ - **Primary Body**: `"MS Sans Serif", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif`
50
+ - **Headings**: `"Arial Black", Impact, Haettenschweiler, sans-serif` (heavy, bold weights only)
51
+ - **Monospace**: `"Courier New", Courier, monospace` (for dates, stats, counters, code-like elements)
52
+ - **Playful accent** (ultra-sparingly): `"Comic Sans MS", cursive` (only for "fun" decorative elements if needed)
53
+
54
+ **Type Scale**:
55
+
56
+ - **H1 Hero**: 48px-96px (3xl to 6xl), always UPPERCASE or Title Case, Arial Black/Impact
57
+ - **H2 Section**: 32-48px (2xl to 4xl), often UPPERCASE, Arial Black
58
+ - **H3 Subsection**: 20-24px (lg to xl), bold weight
59
+ - **Body**: 14-16px, default weight, readable density
60
+ - **Small/Meta**: 12px (xs), often monospace for dates and metadata
61
+ - **Labels**: 10-12px, UPPERCASE, sometimes monospace
62
+
63
+ **Typographic Patterns**:
64
+
65
+ - Headings are BOLD or BLACK weight - no thin or light fonts exist in this era
66
+ - Letter-spacing on UPPERCASE headings: `tracking-tight` to `tracking-wide` (not expanded)
67
+ - Line-height: Dense (1.2-1.4 for headings, 1.5-1.6 for body)
68
+ - Text shadows for 3D text: `text-shadow: 2px 2px 0 #808080` (hard-edged, no blur)
69
+
70
+ ### Radius & Borders
71
+
72
+ **Border Radius**: `0px` EVERYWHERE. No exceptions. The 90s didn't have border-radius.
73
+
74
+ **Border Widths**:
75
+
76
+ - Standard: `2px` for most elements
77
+ - Emphasis: `4px` for section dividers and highlighted elements
78
+ - Minimum: `1px` only for subtle inner detail (rare)
79
+
80
+ **3D Bevel Effect** (THE SIGNATURE):
81
+
82
+ This is the most critical visual element. Windows 95 used a specific 4-value border-color syntax combined with box-shadow for depth.
83
+
84
+ **Outset (Raised) - Elements that appear to pop out**:
85
+
86
+ ```css
87
+ border: 2px solid;
88
+ border-color: #ffffff #808080 #808080 #ffffff; /* Top Right Bottom Left */
89
+ box-shadow: inset -1px -1px 0 #404040, inset 1px 1px 0 #dfdfdf;
90
+ ```
91
+
92
+ - Top and left edges: white (#ffffff)
93
+ - Bottom and right edges: gray (#808080)
94
+ - Inner shadow adds depth with darker (#404040) and lighter (#dfdfdf) accents
95
+
96
+ **Outset Enhanced (Deeper bevel)**:
97
+
98
+ ```css
99
+ border: 2px solid;
100
+ border-color: #ffffff #808080 #808080 #ffffff;
101
+ box-shadow:
102
+ inset -2px -2px 0 #808080,
103
+ inset 2px 2px 0 #fff,
104
+ inset -4px -4px 0 #404040,
105
+ inset 4px 4px 0 #dfdfdf;
106
+ ```
107
+
108
+ **Inset (Sunken) - Elements that appear pressed in**:
109
+
110
+ ```css
111
+ border: 2px solid;
112
+ border-color: #808080 #ffffff #ffffff #808080; /* REVERSED from outset */
113
+ box-shadow: inset 1px 1px 0 #404040, inset -1px -1px 0 #dfdfdf;
114
+ ```
115
+
116
+ - Top and left edges: gray (#808080)
117
+ - Bottom and right edges: white (#ffffff)
118
+ - Inner shadow creates recessed appearance
119
+
120
+ **Active/Pressed State**:
121
+ When an outset element is clicked, it becomes inset AND translates 1px down and right:
122
+
123
+ ```css
124
+ border-color: #808080 #ffffff #ffffff #808080;
125
+ box-shadow: inset 1px 1px 0 #404040, inset -1px -1px 0 #dfdfdf;
126
+ transform: translate(1px, 1px);
127
+ ```
128
+
129
+ **Tailwind Implementation**:
130
+ Use arbitrary values with underscores for spaces:
131
+
132
+ - `[border-color:#fff_#808080_#808080_#fff]` for outset
133
+ - `[border-color:#808080_#fff_#fff_#808080]` for inset
134
+ - `[box-shadow:inset_-1px_-1px_0_#404040,inset_1px_1px_0_#dfdfdf]`
135
+
136
+ ### Textures & Patterns (MANDATORY)
137
+
138
+ The background must NOT be flat. This is critical for authenticity.
139
+
140
+ **90s Tiled Pattern** (Primary technique):
141
+
142
+ ```css
143
+ background-color: #c0c0c0;
144
+ background-image:
145
+ linear-gradient(45deg, #b8b8b8 25%, transparent 25%),
146
+ linear-gradient(-45deg, #b8b8b8 25%, transparent 25%),
147
+ linear-gradient(45deg, transparent 75%, #b8b8b8 75%),
148
+ linear-gradient(-45deg, transparent 75%, #b8b8b8 75%);
149
+ background-size: 4px 4px;
150
+ background-position: 0 0, 0 2px, 2px -2px, -2px 0px;
151
+ ```
152
+
153
+ This creates a subtle diagonal crosshatch that gives texture without being distracting.
154
+
155
+ **Construction Warning Stripes** (For emphasis areas):
156
+
157
+ ```css
158
+ background: repeating-linear-gradient(
159
+ 45deg,
160
+ #ffff00,
161
+ #ffff00 10px,
162
+ #000000 10px,
163
+ #000000 20px
164
+ );
165
+ ```
166
+
167
+ Exactly 10px yellow, 10px black stripes at 45-degree angle.
168
+
169
+ **Horizontal Rule (HR) with Groove Effect**:
170
+
171
+ ```css
172
+ border: none;
173
+ height: 4px;
174
+ background: linear-gradient(
175
+ to bottom,
176
+ #808080 0%, #808080 50%,
177
+ #ffffff 50%, #ffffff 100%
178
+ );
179
+ ```
180
+
181
+ Creates the classic "etched" divider look.
182
+
183
+ ---
184
+
185
+ ## Component Styling Principles
186
+
187
+ ### Buttons
188
+
189
+ **Visual Requirements**:
190
+
191
+ - Border: 2px with 4-value outset color pattern
192
+ - Background: Subtle gradient or solid color depending on variant
193
+ - Text: Bold, UPPERCASE with `tracking-wide`, centered
194
+ - Padding: 8px vertical, 16px horizontal (comfortable clickable area)
195
+ - NO border-radius
196
+ - NO soft drop shadows
197
+
198
+ **State Transitions**:
199
+
200
+ - **Default**: Outset bevel, slightly lighter background on hover
201
+ - **Hover**: Background lightens by 1-2 shades, maintain outset
202
+ - **Active/Pressed**: Inset bevel (reversed border-color), translate(1px, 1px)
203
+ - **Focus**: Dotted 2px black outline, 2px offset (Windows 95 focus ring)
204
+ - **Transition**: NONE or instant (`transition-none` or 50ms max) - no smooth easing
205
+
206
+ **Variants**:
207
+
208
+ 1. **Default/Ghost**: `#C0C0C0` background, black text, outset bevel
209
+ 2. **Accent/Primary**: `#0000FF` background, white text, blue-tinted bevel edges
210
+ 3. **Danger**: `#FF0000` background, white text, red-tinted bevel edges
211
+ 4. **Success**: `#00AA00` (readable green) background, white text, green-tinted bevel
212
+ 5. **Outline**: White background, black text, outset bevel
213
+
214
+ **Bevel Color Tinting**:
215
+ For colored buttons, tint the bevel edges to match:
216
+
217
+ - Blue button: `border-color: #5555ff #000080 #000080 #5555ff`
218
+ - Red button: `border-color: #ff5555 #800000 #800000 #ff5555`
219
+ - Green button: `border-color: #00ff00 #006600 #006600 #00ff00`
220
+
221
+ **Example Tailwind Classes**:
222
+
223
+ ```
224
+ border-2
225
+ bg-[#c0c0c0]
226
+ text-black
227
+ [border-color:#fff_#808080_#808080_#fff]
228
+ [box-shadow:inset_-1px_-1px_0_#404040,inset_1px_1px_0_#dfdfdf]
229
+ hover:bg-[#d0d0d0]
230
+ active:[border-color:#808080_#fff_#fff_#808080]
231
+ active:[box-shadow:inset_1px_1px_0_#404040,inset_-1px_-1px_0_#dfdfdf]
232
+ active:translate-x-[1px]
233
+ active:translate-y-[1px]
234
+ focus-visible:outline-dotted
235
+ focus-visible:outline-2
236
+ focus-visible:outline-black
237
+ focus-visible:outline-offset-2
238
+ ```
239
+
240
+ ### Cards/Containers
241
+
242
+ **Panel/Card Structure**:
243
+
244
+ - Container: 2px outset bevel, `#C0C0C0` background
245
+ - Title bar: Gradient `linear-gradient(to right, #000080, #1084d0)`, white text, bold, 4-8px padding
246
+ - Content area: Inset bevel (sunken), white or `#FFFFCC` (yellow) background
247
+
248
+ **Window-Style Card** (Most distinctive):
249
+
250
+ ```
251
+ Outer container: outset bevel, gray background
252
+ ├── Title bar: navy gradient (#000080 → #1084d0), white bold text
253
+ └── Content area: inset bevel, white background, padding 16px
254
+ ```
255
+
256
+ **Alternating Row Backgrounds**:
257
+ For table-like layouts, alternate between:
258
+
259
+ - Even rows: `#FFFFFF` (white)
260
+ - Odd rows: `#E8E8E8` (light gray)
261
+
262
+ This creates the classic spreadsheet/database appearance.
263
+
264
+ **Borders Between Cells**:
265
+ Use `border-right-2` and `border-bottom-2` with `#808080` to create visible grid lines.
266
+
267
+ ### Form Inputs
268
+
269
+ **Input Fields**:
270
+
271
+ - Border: 2px inset (sunken appearance)
272
+ - Background: White
273
+ - Text: Black, 14-16px
274
+ - Padding: 4-8px
275
+ - Focus: Dotted 2px black outline, 2px offset
276
+ - Disabled: `#C0C0C0` background, 50% opacity
277
+
278
+ **Placeholder Text**: `#808080` (gray)
279
+
280
+ **Select Dropdowns**: Same inset styling as inputs
281
+
282
+ **Checkboxes/Radio**: Not common in 90s web (use text indicators or simple squares)
283
+
284
+ ### Links (Hyperlinks)
285
+
286
+ The most iconic element of the 90s web.
287
+
288
+ **States**:
289
+
290
+ - **Unvisited**: `#0000FF` (blue), underlined always
291
+ - **Visited**: `#800080` (purple)
292
+ - **Hover**: `#FF0000` (red)
293
+ - **Active** (while clicking): `#FF0000` (red)
294
+
295
+ **Rules**:
296
+
297
+ - ALWAYS underlined (never remove text-decoration)
298
+ - Color changes are instant (no transitions)
299
+ - No background on hover
300
+ - No additional styling effects
301
+
302
+ **Example**:
303
+
304
+ ```
305
+ text-[#0000ff]
306
+ underline
307
+ hover:text-[#ff0000]
308
+ visited:text-[#800080]
309
+ ```
310
+
311
+ ### Icons
312
+
313
+ **Styling**:
314
+
315
+ - Stroke width: `2px` or `stroke-[2px]` (thick, bold lines)
316
+ - Color: Match the accent color of the section (blue, red, green)
317
+ - Size: 24px (h-6 w-6) standard, 32px for features
318
+ - NO rounded corners or soft shapes
319
+ - Consider adding 2px black borders around icon containers
320
+
321
+ **Icon Containers**:
322
+ If placing icons in colored boxes:
323
+
324
+ - Box background: Solid bright color (#000080, #008080, #00AA00)
325
+ - Icon color: White
326
+ - Box style: Outset or flat with borders
327
+
328
+ ---
329
+
330
+ ## Layout Principles
331
+
332
+ ### Page Structure
333
+
334
+ **Maximum Width**: `max-w-5xl` (1024px) - mimics 800x600 monitor content area with browser chrome
335
+
336
+ **Spacing System**:
337
+
338
+ - Base unit: 8px
339
+ - Element padding: 16px (generous interior spacing)
340
+ - Element margins: 8-16px (tighter exterior spacing for density)
341
+ - Section padding: 64px vertical (py-16), 16px horizontal (px-4)
342
+
343
+ **Section Dividers**:
344
+ Use thick borders (`border-b-4 border-[#808080]`) OR the groove HR effect between major sections.
345
+
346
+ **Grid Layouts**:
347
+ Even though using modern CSS Grid/Flexbox, make it LOOK like tables:
348
+
349
+ - Visible cell borders with `border-2` or `border-r-2`/`border-b-2`
350
+ - Alternating row backgrounds
351
+ - Equal column widths where possible
352
+ - Dense, compact spacing
353
+
354
+ ### Responsive Strategy
355
+
356
+ **Desktop** (768px+):
357
+
358
+ - Full table-like layouts with side-by-side columns
359
+ - Multi-column grids (2-4 columns)
360
+ - Visible complex borders
361
+
362
+ **Tablet** (640-768px):
363
+
364
+ - Reduce to 2 columns max
365
+ - Maintain all visual styling (bevels, borders)
366
+ - Stack complex tables if needed
367
+
368
+ **Mobile** (<640px):
369
+
370
+ - Single column
371
+ - KEEP beveled effects (essential to the style)
372
+ - Marquee continues to scroll
373
+ - Reduce font sizes slightly but keep bold weights
374
+ - Horizontal scrolling for complex tables is acceptable (authentic!)
375
+
376
+ **Important**: The aesthetic is more important than perfect responsiveness. It's okay if the mobile experience is slightly janky—that's authentic to the era.
377
+
378
+ ---
379
+
380
+ ## The "Bold Factor" (Non-Genericness)
381
+
382
+ **MANDATORY ELEMENTS** - These must be present or the style fails:
383
+
384
+ ### 1. Marquee Scrolling Text
385
+
386
+ Use `react-fast-marquee` or pure CSS marquee for:
387
+
388
+ - Announcement bars with colorful text
389
+ - Testimonial carousels
390
+ - "Breaking news" style updates
391
+
392
+ **Settings**:
393
+
394
+ - Speed: 30-60 (moderate pace)
395
+ - No gradient fade (gradient={false})
396
+ - Multiple spans with different colors
397
+
398
+ ### 2. Animated Rainbow Text
399
+
400
+ CSS animation cycling through bright colors for hero headlines:
401
+
402
+ ```css
403
+ @keyframes rainbow {
404
+ 0% { color: #ff0000; }
405
+ 17% { color: #ff8000; }
406
+ 33% { color: #ffff00; }
407
+ 50% { color: #00ff00; }
408
+ 67% { color: #0080ff; }
409
+ 83% { color: #8000ff; }
410
+ 100% { color: #ff0000; }
411
+ }
412
+ animation: rainbow 4s linear infinite;
413
+ ```
414
+
415
+ **Duration**: 4 seconds, linear easing (no smoothing)
416
+
417
+ ### 3. Beveled Everything
418
+
419
+ Every interactive element and most containers must have the 3D outset/inset effect. This is NON-NEGOTIABLE.
420
+
421
+ ### 4. "Under Construction" Energy
422
+
423
+ Add small animated elements:
424
+
425
+ - Blinking "NEW!" badges (use `animate-pulse` or CSS blink with step-end)
426
+ - Pulsing call-to-action badges
427
+ - Color-cycling decorative elements
428
+
429
+ **Pulse Glow Animation** (for badges):
430
+
431
+ ```css
432
+ @keyframes pulse-glow {
433
+ 0%, 100% {
434
+ transform: scale(1);
435
+ box-shadow: 0 0 0 0 rgba(255, 0, 0, 0.7);
436
+ }
437
+ 50% {
438
+ transform: scale(1.05);
439
+ box-shadow: 0 0 10px 2px rgba(255, 0, 0, 0.5);
440
+ }
441
+ }
442
+ animation: pulse-glow 1.5s ease-in-out infinite;
443
+ ```
444
+
445
+ ### 5. Horizontal Rules (HR) as Dividers
446
+
447
+ Use the 3D groove effect between major content sections. This is a signature 90s pattern.
448
+
449
+ ### 6. Hit Counter Aesthetic
450
+
451
+ Style at least one stats section like a classic hit counter:
452
+
453
+ - Black or navy background
454
+ - Green monospace text (#00FF00)
455
+ - Beveled inset frame
456
+ - Text like "Visitors: 0001234 | Since 1995"
457
+
458
+ ### 7. Table-Like Visual Layouts
459
+
460
+ Even when using modern CSS, create the appearance of HTML tables:
461
+
462
+ - Visible cell borders (`border-2 border-[#808080]`)
463
+ - Alternating row backgrounds
464
+ - Grid-like precision
465
+
466
+ ### 8. Title Bar Windows
467
+
468
+ Cards should look like Windows 95 application windows:
469
+
470
+ - Navy-to-blue gradient title bar
471
+ - White bold text in title
472
+ - Inset content area below
473
+
474
+ ### 9. Decorative Color Squares
475
+
476
+ Include at least one section with a grid of bright colored squares (red, green, blue, yellow, magenta, cyan) with beveled edges. This is pure decorative 90s excess.
477
+
478
+ ### 10. Construction Stripe Background
479
+
480
+ Use the yellow/black diagonal stripe pattern for at least one emphasized section (like final CTA).
481
+
482
+ ---
483
+
484
+ ## Animation & Motion
485
+
486
+ **Motion Philosophy**: Snappy, immediate, digital. No organic easing curves.
487
+
488
+ **Timing Functions**:
489
+
490
+ - **Instant state changes**: `transition-none` or `duration-0`
491
+ - **Color cycling**: `linear` (no easing)
492
+ - **Badges/pulses**: `ease-in-out` (acceptable for attention effects)
493
+ - **Button press**: `transition-none` or max 50ms
494
+
495
+ **Durations**:
496
+
497
+ - Button press: Instant or 50ms
498
+ - Hover color change: 75ms or instant
499
+ - Rainbow text cycle: 3-5 seconds
500
+ - Pulse glow: 1-2 seconds
501
+ - Marquee speed: Moderate (40-60px/second)
502
+
503
+ **Key Animations**:
504
+
505
+ 1. **Rainbow Text**: 4s linear infinite loop through spectrum
506
+ 2. **Pulse Glow**: 1.5s ease-in-out infinite for "NEW!" badges
507
+ 3. **Blink** (ultra-sparingly): 1s step-end infinite (harsh on/off, not fade)
508
+ 4. **Marquee**: Continuous scroll, pauseOnHover for usability
509
+
510
+ **Reduced Motion**:
511
+ Respect `prefers-reduced-motion`:
512
+
513
+ - Stop rainbow animation (fallback to single bright color)
514
+ - Stop marquee (show static or slower scroll)
515
+ - Stop pulsing badges (static with bright color)
516
+
517
+ ---
518
+
519
+ ## Accessibility
520
+
521
+ **Color Contrast**:
522
+
523
+ - Black (#000000) on silver (#C0C0C0): 7.5:1 (AAA)
524
+ - White on navy (#000080): 8.6:1 (AAA)
525
+ - White on blue (#0000FF): 8.6:1 (AAA)
526
+ - The palette naturally provides excellent contrast
527
+
528
+ **Focus States**:
529
+
530
+ - 2px dotted black outline (Windows 95 authentic)
531
+ - 2px offset from element
532
+ - High visibility, matches the aesthetic
533
+ - NEVER remove focus indicators
534
+
535
+ **Keyboard Navigation**:
536
+
537
+ - All interactive elements must be keyboard accessible
538
+ - Tab order should follow visual order
539
+ - Button press on Enter/Space should show active state
540
+
541
+ **Screen Readers**:
542
+
543
+ - Marquee text must have static alternative or be aria-live="polite"
544
+ - Decorative animated elements should be aria-hidden
545
+ - Color squares and decorative patterns need no alt text
546
+ - Ensure semantic HTML even with table-like appearance
547
+
548
+ **Motion Sensitivity**:
549
+ Provide `prefers-reduced-motion` alternatives:
550
+
551
+ ```css
552
+ @media (prefers-reduced-motion: reduce) {
553
+ .text-rainbow { animation: none; color: #ff0000; }
554
+ .animate-pulse-glow { animation: none; }
555
+ /* Marquee handled by library or CSS */
556
+ }
557
+ ```
558
+
559
+ ---
560
+
561
+ ## Anti-Patterns (What to AVOID)
562
+
563
+ ### Visual No-Nos:
564
+
565
+ 1. **NO border-radius** - Not even 1px. Zero. Always.
566
+ 2. **NO soft drop shadows** - Only use inset shadows for bevels
567
+ 3. **NO gradients** except:
568
+ - Title bar gradient (navy to blue)
569
+ - Background patterns (stripes, tiles)
570
+ - Subtle button backgrounds
571
+ 4. **NO semi-transparent overlays** - Colors are always opaque (except white/80 for secondary text on dark backgrounds)
572
+ 5. **NO thin fonts** - Everything is bold or black weight
573
+ 6. **NO subtle grays** - Only #000000, #808080, #C0C0C0, #FFFFFF, #E8E8E8
574
+ 7. **NO smooth easing** - Use linear or instant transitions
575
+ 8. **NO removing link underlines** - Always visible
576
+ 9. **NO modern minimalist spacing** - Dense, not airy
577
+ 10. **NO attempting to "modernize" the aesthetic** - Embrace the cheese
578
+
579
+ ### Interaction No-Nos:
580
+
581
+ 1. **DON'T use hover states that scale elements** (except 1.05 for pulse badges)
582
+ 2. **DON'T use fade transitions** - Changes should be instant or linear
583
+ 3. **DON'T make marquee text essential content** - Keep it decorative/supplemental
584
+ 4. **DON'T override browser default selection color** - Actually, DO: use #000080 background, white text
585
+ 5. **DON'T use floating action buttons** or modern UI patterns
586
+
587
+ ### Content No-Nos:
588
+
589
+ 1. **DON'T use placeholder text** that doesn't fit the era (no "lorem ipsum")
590
+ 2. **DON'T reference modern tech** in decorative text (keep it generic or 90s-themed)
591
+ 3. **DON'T be subtle** - This style is LOUD and PROUD
592
+
593
+ ---
594
+
595
+ ## Implementation Notes
596
+
597
+ ### Tailwind Arbitrary Values
598
+
599
+ You'll use these constantly:
600
+
601
+ ```
602
+ border-[2px]
603
+ [border-color:#fff_#808080_#808080_#fff]
604
+ [box-shadow:inset_-1px_-1px_0_#404040,inset_1px_1px_0_#dfdfdf]
605
+ bg-[#c0c0c0]
606
+ text-[#0000ff]
607
+ ```
608
+
609
+ Note: Use underscores for spaces in arbitrary values.
610
+
611
+ ### Custom CSS Required
612
+
613
+ Some effects need CSS files:
614
+
615
+ - `@keyframes` for rainbow, pulse-glow, blink
616
+ - `.hr-groove` for horizontal rule effect
617
+ - `.bg-90s-tile` for tiled background pattern
618
+ - `.bg-construction` for warning stripes
619
+
620
+ ### Dependencies
621
+
622
+ - **react-fast-marquee**: Essential for authentic scrolling text
623
+ - Consider creating CSS variables for the complex box-shadow values for reusability
624
+
625
+ ### Color Layering Strategy
626
+
627
+ 1. **Base**: Tiled #C0C0C0 background
628
+ 2. **Surface**: White or gray (#E8E8E8) panels with bevels
629
+ 3. **Accent surfaces**: Navy title bars, colored feature boxes
630
+ 4. **Foreground**: Black text, colored icons
631
+ 5. **Highlights**: Yellow badges, red "NEW!" tags, rainbow text
632
+
633
+ ---
634
+
635
+ ## Signature Visual Checklist
636
+
637
+ Before considering the design complete, verify these are present:
638
+
639
+ - [ ] At least one marquee scrolling element with colorful text
640
+ - [ ] Rainbow animated text on hero or major heading
641
+ - [ ] All buttons have 3D outset bevels with proper border-color syntax
642
+ - [ ] At least one card with Windows 95 title bar gradient
643
+ - [ ] Tiled background pattern visible on main body
644
+ - [ ] Hyperlinks are blue/underlined, turn red on hover
645
+ - [ ] At least one section with alternating row backgrounds
646
+ - [ ] Horizontal groove rule divider between major sections
647
+ - [ ] A "hit counter" style stats display with monospace green text
648
+ - [ ] One "NEW!" or "HOT!" badge with pulse animation
649
+ - [ ] Construction stripe background on at least one section
650
+ - [ ] All interactive elements have dotted focus outlines
651
+ - [ ] Active buttons show pressed state (inset + translate)
652
+ - [ ] Icons have 2px stroke width
653
+ - [ ] Zero instances of border-radius anywhere
654
+
655
+ ---
656
+
657
+ ## The Secret Sauce
658
+
659
+ What makes this style work is **commitment to authenticity over modernization**. The temptation will be to "clean it up" or "make it more professional." Resist this. The ugliness IS the beauty. The clashing colors, the dense layouts, the aggressive animations—these aren't bugs, they're features.
660
+
661
+ Someone who lived through 1997 should look at this and immediately feel transported back. The design should be so authentic that it's almost jarring next to modern websites. That contrast IS the point.
662
+
663
+ Embrace the cheese. Celebrate the chaos. Welcome to 1997.
664
+ `</design-system>`