gspec 1.7.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/gspec.js +275 -8
- package/commands/gspec.analyze.md +1 -1
- package/commands/gspec.implement.md +3 -3
- package/commands/gspec.practices.md +3 -1
- package/commands/gspec.stack.md +11 -6
- package/commands/gspec.style.md +18 -23
- package/dist/antigravity/gspec-analyze/SKILL.md +1 -1
- package/dist/antigravity/gspec-architect/SKILL.md +1 -1
- package/dist/antigravity/gspec-feature/SKILL.md +1 -1
- package/dist/antigravity/gspec-implement/SKILL.md +4 -4
- package/dist/antigravity/gspec-migrate/SKILL.md +5 -5
- package/dist/antigravity/gspec-practices/SKILL.md +4 -2
- package/dist/antigravity/gspec-profile/SKILL.md +1 -1
- package/dist/antigravity/gspec-research/SKILL.md +3 -3
- package/dist/antigravity/gspec-stack/SKILL.md +12 -7
- package/dist/antigravity/gspec-style/SKILL.md +19 -24
- package/dist/claude/gspec-analyze/SKILL.md +1 -1
- package/dist/claude/gspec-architect/SKILL.md +1 -1
- package/dist/claude/gspec-feature/SKILL.md +1 -1
- package/dist/claude/gspec-implement/SKILL.md +4 -4
- package/dist/claude/gspec-migrate/SKILL.md +5 -5
- package/dist/claude/gspec-practices/SKILL.md +4 -2
- package/dist/claude/gspec-profile/SKILL.md +1 -1
- package/dist/claude/gspec-research/SKILL.md +3 -3
- package/dist/claude/gspec-stack/SKILL.md +12 -7
- package/dist/claude/gspec-style/SKILL.md +19 -24
- package/dist/codex/gspec-analyze/SKILL.md +1 -1
- package/dist/codex/gspec-architect/SKILL.md +1 -1
- package/dist/codex/gspec-feature/SKILL.md +1 -1
- package/dist/codex/gspec-implement/SKILL.md +4 -4
- package/dist/codex/gspec-migrate/SKILL.md +5 -5
- package/dist/codex/gspec-practices/SKILL.md +4 -2
- package/dist/codex/gspec-profile/SKILL.md +1 -1
- package/dist/codex/gspec-research/SKILL.md +3 -3
- package/dist/codex/gspec-stack/SKILL.md +12 -7
- package/dist/codex/gspec-style/SKILL.md +19 -24
- package/dist/cursor/gspec-analyze.mdc +1 -1
- package/dist/cursor/gspec-architect.mdc +1 -1
- package/dist/cursor/gspec-feature.mdc +1 -1
- package/dist/cursor/gspec-implement.mdc +4 -4
- package/dist/cursor/gspec-migrate.mdc +5 -5
- package/dist/cursor/gspec-practices.mdc +4 -2
- package/dist/cursor/gspec-profile.mdc +1 -1
- package/dist/cursor/gspec-research.mdc +3 -3
- package/dist/cursor/gspec-stack.mdc +12 -7
- package/dist/cursor/gspec-style.mdc +19 -24
- package/dist/opencode/gspec-analyze/SKILL.md +168 -0
- package/dist/opencode/gspec-architect/SKILL.md +361 -0
- package/dist/opencode/gspec-feature/SKILL.md +204 -0
- package/dist/opencode/gspec-implement/SKILL.md +200 -0
- package/dist/opencode/gspec-migrate/SKILL.md +118 -0
- package/dist/opencode/gspec-practices/SKILL.md +137 -0
- package/dist/opencode/gspec-profile/SKILL.md +221 -0
- package/dist/opencode/gspec-research/SKILL.md +302 -0
- package/dist/opencode/gspec-stack/SKILL.md +305 -0
- package/dist/opencode/gspec-style/SKILL.md +224 -0
- package/package.json +3 -1
- package/starters/features/about-page.md +98 -0
- package/starters/features/contact-form.md +147 -0
- package/starters/features/contact-page.md +103 -0
- package/starters/features/home-page.md +103 -0
- package/starters/features/responsive-navbar.md +113 -0
- package/starters/features/services-page.md +103 -0
- package/starters/features/site-footer.md +121 -0
- package/starters/features/theme-switcher.md +124 -0
- package/starters/practices/tdd-pipeline-first.md +192 -0
- package/starters/stacks/astro-tailwind-github-pages.md +283 -0
- package/starters/stacks/nextjs-supabase-vercel.md +319 -0
- package/starters/stacks/nextjs-vercel-typescript.md +264 -0
- package/starters/styles/clean-professional.md +316 -0
- package/starters/styles/dark-minimal-developer.md +442 -0
- package/templates/spec-sync.md +1 -1
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Dark-first minimal design system with purple accent, inspired by developer documentation sites
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Visual Style Guide
|
|
7
|
+
|
|
8
|
+
## 1. Overview
|
|
9
|
+
|
|
10
|
+
### Design Vision Statement
|
|
11
|
+
|
|
12
|
+
A clean, minimal design system that feels like well-written documentation — spacious, readable, and quietly confident. The aesthetic communicates technical credibility without being cold, using generous whitespace, clear typographic hierarchy, and a single vibrant accent color against a neutral dark canvas.
|
|
13
|
+
|
|
14
|
+
### Target Platforms
|
|
15
|
+
|
|
16
|
+
- **Web** — Primary. Responsive web application.
|
|
17
|
+
- **Mobile web** — Fully responsive. No native mobile app.
|
|
18
|
+
|
|
19
|
+
### Visual Personality
|
|
20
|
+
|
|
21
|
+
**Clean & Minimal** — Generous whitespace, restrained color usage, strong typography. The design gets out of the way and lets content speak. Inspired by the best developer documentation sites (Stripe, Tailwind, Astro docs) where clarity is the primary design value.
|
|
22
|
+
|
|
23
|
+
### Design Rationale
|
|
24
|
+
|
|
25
|
+
Developer tools earn trust through clarity, not decoration. The target audience values scannability, readability, and speed. A minimal aesthetic with a single vibrant accent creates visual interest without visual noise. Dark-first design matches the environment developers already work in (editors, terminals).
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 2. Color Palette
|
|
30
|
+
|
|
31
|
+
### Primary Colors
|
|
32
|
+
|
|
33
|
+
| Token | Hex | RGB | HSL | Usage |
|
|
34
|
+
|-------|-----|-----|-----|-------|
|
|
35
|
+
| `primary-500` | `#8B5CF6` | `139, 92, 246` | `263, 90%, 66%` | Primary accent — CTAs, links, active states, key UI elements |
|
|
36
|
+
| `primary-400` | `#A78BFA` | `167, 139, 250` | `255, 92%, 76%` | Hover states, secondary emphasis |
|
|
37
|
+
| `primary-600` | `#7C3AED` | `124, 58, 237` | `262, 83%, 58%` | Pressed/active states |
|
|
38
|
+
| `primary-300` | `#C4B5FD` | `196, 181, 253` | `252, 95%, 85%` | Light accent text on dark backgrounds |
|
|
39
|
+
| `primary-900` | `#1E1338` | `30, 19, 56` | `258, 49%, 15%` | Tinted dark backgrounds, subtle accent surfaces |
|
|
40
|
+
|
|
41
|
+
**Selection rationale:** Purple sits outside the typical blue/green palette of most dev tools, giving the brand a distinctive presence. It carries connotations of creativity and precision without the corporate weight of blue. The violet hue has excellent contrast against both dark and light neutrals.
|
|
42
|
+
|
|
43
|
+
### Secondary Colors
|
|
44
|
+
|
|
45
|
+
| Token | Hex | RGB | HSL | Usage |
|
|
46
|
+
|-------|-----|-----|-----|-------|
|
|
47
|
+
| `secondary-500` | `#06B6D4` | `6, 182, 212` | `189, 94%, 43%` | Code highlights, secondary actions, complementary accent |
|
|
48
|
+
| `secondary-400` | `#22D3EE` | `34, 211, 238` | `188, 85%, 53%` | Hover states for secondary elements |
|
|
49
|
+
| `secondary-600` | `#0891B2` | `8, 145, 178` | `192, 91%, 36%` | Pressed states for secondary elements |
|
|
50
|
+
|
|
51
|
+
**Usage:** The cyan secondary complements the purple primary (split-complementary relationship). Use sparingly for code syntax highlighting, badges, or secondary interactive elements. Never compete with the primary accent for attention.
|
|
52
|
+
|
|
53
|
+
### Neutral Colors
|
|
54
|
+
|
|
55
|
+
| Token | Hex | RGB | HSL | Usage |
|
|
56
|
+
|-------|-----|-----|-----|-------|
|
|
57
|
+
| `neutral-950` | `#0A0A0F` | `10, 10, 15` | `240, 20%, 5%` | Page background (dark mode) |
|
|
58
|
+
| `neutral-900` | `#131318` | `19, 19, 24` | `240, 12%, 8%` | Elevated surface background |
|
|
59
|
+
| `neutral-800` | `#1E1E26` | `30, 30, 38` | `240, 12%, 13%` | Card backgrounds, code blocks |
|
|
60
|
+
| `neutral-700` | `#2E2E3A` | `46, 46, 58` | `240, 12%, 20%` | Borders, dividers |
|
|
61
|
+
| `neutral-600` | `#4A4A5A` | `74, 74, 90` | `240, 10%, 32%` | Subtle borders, disabled elements |
|
|
62
|
+
| `neutral-500` | `#6B6B80` | `107, 107, 128` | `240, 9%, 46%` | Placeholder text, muted icons |
|
|
63
|
+
| `neutral-400` | `#9494A8` | `148, 148, 168` | `240, 10%, 62%` | Secondary text |
|
|
64
|
+
| `neutral-300` | `#B8B8CC` | `184, 184, 204` | `240, 18%, 76%` | Tertiary text, captions |
|
|
65
|
+
| `neutral-200` | `#D4D4E0` | `212, 212, 224` | `240, 20%, 85%` | Body text (dark mode) |
|
|
66
|
+
| `neutral-100` | `#EDEDF4` | `237, 237, 244` | `240, 33%, 94%` | Headings, primary text (dark mode) |
|
|
67
|
+
| `neutral-50` | `#F8F8FC` | `248, 248, 252` | `240, 50%, 98%` | Emphasis text, high contrast |
|
|
68
|
+
|
|
69
|
+
**Note:** Neutrals carry a subtle cool-violet undertone (240° hue) to harmonize with the purple primary. Pure grays would feel disconnected.
|
|
70
|
+
|
|
71
|
+
### Semantic Colors
|
|
72
|
+
|
|
73
|
+
| Token | Hex | Contrast on `neutral-900` | Usage |
|
|
74
|
+
|-------|-----|---------------------------|-------|
|
|
75
|
+
| `success` | `#34D399` | 8.2:1 ✓ AA | Success states, confirmations, valid inputs |
|
|
76
|
+
| `warning` | `#FBBF24` | 10.4:1 ✓ AA | Warnings, caution states |
|
|
77
|
+
| `error` | `#F87171` | 5.8:1 ✓ AA | Errors, destructive actions, invalid inputs |
|
|
78
|
+
| `info` | `#60A5FA` | 5.5:1 ✓ AA | Informational messages, tips, notes |
|
|
79
|
+
|
|
80
|
+
Each semantic color has a muted background variant at 10% opacity for banner/alert backgrounds (e.g., `success-bg: #34D3991A`).
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 3. Typography
|
|
85
|
+
|
|
86
|
+
### Font Families
|
|
87
|
+
|
|
88
|
+
| Role | Font | Fallback Stack | Source |
|
|
89
|
+
|------|------|---------------|--------|
|
|
90
|
+
| **Headings** | Inter | `system-ui, -apple-system, sans-serif` | Google Fonts |
|
|
91
|
+
| **Body** | Inter | `system-ui, -apple-system, sans-serif` | Google Fonts |
|
|
92
|
+
| **Monospace** | JetBrains Mono | `ui-monospace, 'Cascadia Code', 'Fira Code', monospace` | Google Fonts |
|
|
93
|
+
|
|
94
|
+
**Why Inter:** Designed for screens, excellent readability at all sizes, wide weight range, slightly technical feel without being cold. Free and widely available.
|
|
95
|
+
|
|
96
|
+
**Why JetBrains Mono:** Purpose-built for code, excellent ligature support, pairs well with Inter. Developers recognize and trust it.
|
|
97
|
+
|
|
98
|
+
### Type Scale
|
|
99
|
+
|
|
100
|
+
Base size: `16px` (1rem). Scale ratio: 1.25 (Major Third).
|
|
101
|
+
|
|
102
|
+
| Level | Size (rem) | Size (px) | Weight | Line Height | Letter Spacing | Usage |
|
|
103
|
+
|-------|-----------|-----------|--------|-------------|----------------|-------|
|
|
104
|
+
| **Display** | 3.5rem | 56px | 700 | 1.1 | -0.02em | Hero headlines |
|
|
105
|
+
| **H1** | 2.441rem | 39px | 700 | 1.2 | -0.02em | Page titles |
|
|
106
|
+
| **H2** | 1.953rem | 31px | 600 | 1.25 | -0.01em | Section headings |
|
|
107
|
+
| **H3** | 1.563rem | 25px | 600 | 1.3 | -0.01em | Subsection headings |
|
|
108
|
+
| **H4** | 1.25rem | 20px | 600 | 1.4 | 0 | Card titles, minor headings |
|
|
109
|
+
| **H5** | 1rem | 16px | 600 | 1.5 | 0.01em | Labels, overlines |
|
|
110
|
+
| **H6** | 0.875rem | 14px | 600 | 1.5 | 0.02em | Small labels, uppercase overlines |
|
|
111
|
+
| **Body Large** | 1.125rem | 18px | 400 | 1.7 | 0 | Lead paragraphs, feature descriptions |
|
|
112
|
+
| **Body** | 1rem | 16px | 400 | 1.7 | 0 | Default body text |
|
|
113
|
+
| **Body Small** | 0.875rem | 14px | 400 | 1.6 | 0 | Captions, helper text, metadata |
|
|
114
|
+
| **Code** | 0.875rem | 14px | 400 | 1.6 | 0 | Inline and block code |
|
|
115
|
+
|
|
116
|
+
### Responsive Scaling
|
|
117
|
+
|
|
118
|
+
- **Mobile (< 640px):** Display drops to 2.5rem, H1 to 1.953rem. Body remains 1rem.
|
|
119
|
+
- **Tablet (640–1024px):** Display at 3rem, H1 at 2.2rem.
|
|
120
|
+
- **Desktop (≥ 1024px):** Full scale as defined above.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 4. Spacing & Layout
|
|
125
|
+
|
|
126
|
+
### Spacing Scale
|
|
127
|
+
|
|
128
|
+
Base unit: **4px**. All spacing values are multiples of 4.
|
|
129
|
+
|
|
130
|
+
| Token | Value | Usage |
|
|
131
|
+
|-------|-------|-------|
|
|
132
|
+
| `space-0` | 0px | Reset |
|
|
133
|
+
| `space-1` | 4px | Tight inline spacing (icon-text gap) |
|
|
134
|
+
| `space-2` | 8px | Small gaps, compact padding |
|
|
135
|
+
| `space-3` | 12px | Default inline spacing |
|
|
136
|
+
| `space-4` | 16px | Default component padding |
|
|
137
|
+
| `space-5` | 20px | Medium spacing |
|
|
138
|
+
| `space-6` | 24px | Section internal spacing |
|
|
139
|
+
| `space-8` | 32px | Component gaps, card padding |
|
|
140
|
+
| `space-10` | 40px | Section gaps |
|
|
141
|
+
| `space-12` | 48px | Large section spacing |
|
|
142
|
+
| `space-16` | 64px | Page section separators |
|
|
143
|
+
| `space-20` | 80px | Major page sections |
|
|
144
|
+
| `space-24` | 96px | Hero sections, large vertical rhythm |
|
|
145
|
+
|
|
146
|
+
### Grid System
|
|
147
|
+
|
|
148
|
+
| Breakpoint | Columns | Gutter | Container Max-Width |
|
|
149
|
+
|------------|---------|--------|---------------------|
|
|
150
|
+
| Mobile (< 640px) | 4 | 16px | 100% (16px side padding) |
|
|
151
|
+
| Tablet (640–1024px) | 8 | 24px | 768px |
|
|
152
|
+
| Desktop (1024–1280px) | 12 | 24px | 1024px |
|
|
153
|
+
| Wide (≥ 1280px) | 12 | 32px | 1152px |
|
|
154
|
+
|
|
155
|
+
### Layout Patterns
|
|
156
|
+
|
|
157
|
+
- **Content width:** Prose content maxes out at `65ch` (~680px) for optimal readability.
|
|
158
|
+
- **Component spacing:** Adjacent components within a section use `space-8` (32px) gaps.
|
|
159
|
+
- **Section spacing:** Between major page sections use `space-16` (64px) on mobile, `space-24` (96px) on desktop.
|
|
160
|
+
- **Consistent padding:** All cards and containers use `space-6` (24px) padding on mobile, `space-8` (32px) on desktop.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 5. Themes
|
|
165
|
+
|
|
166
|
+
### Dark Mode (Primary)
|
|
167
|
+
|
|
168
|
+
| Token | Color | Usage |
|
|
169
|
+
|-------|-------|-------|
|
|
170
|
+
| `bg-page` | `neutral-950` (#0A0A0F) | Page background |
|
|
171
|
+
| `bg-surface` | `neutral-900` (#131318) | Cards, elevated surfaces |
|
|
172
|
+
| `bg-surface-raised` | `neutral-800` (#1E1E26) | Code blocks, nested surfaces |
|
|
173
|
+
| `bg-overlay` | `neutral-950` at 80% opacity | Modal/drawer overlays |
|
|
174
|
+
| `text-primary` | `neutral-100` (#EDEDF4) | Headings, emphasis text |
|
|
175
|
+
| `text-body` | `neutral-200` (#D4D4E0) | Default body text |
|
|
176
|
+
| `text-secondary` | `neutral-400` (#9494A8) | Secondary text, captions |
|
|
177
|
+
| `text-muted` | `neutral-500` (#6B6B80) | Placeholders, disabled text |
|
|
178
|
+
| `border-default` | `neutral-700` (#2E2E3A) | Default borders |
|
|
179
|
+
| `border-subtle` | `neutral-800` (#1E1E26) | Subtle dividers |
|
|
180
|
+
|
|
181
|
+
### Light Mode (Secondary)
|
|
182
|
+
|
|
183
|
+
| Token | Color | Usage |
|
|
184
|
+
|-------|-------|-------|
|
|
185
|
+
| `bg-page` | `neutral-50` (#F8F8FC) | Page background |
|
|
186
|
+
| `bg-surface` | `#FFFFFF` | Cards, elevated surfaces |
|
|
187
|
+
| `bg-surface-raised` | `neutral-100` (#EDEDF4) | Code blocks, nested surfaces |
|
|
188
|
+
| `bg-overlay` | `neutral-950` at 50% opacity | Modal/drawer overlays |
|
|
189
|
+
| `text-primary` | `neutral-950` (#0A0A0F) | Headings, emphasis text |
|
|
190
|
+
| `text-body` | `neutral-800` (#1E1E26) | Default body text |
|
|
191
|
+
| `text-secondary` | `neutral-600` (#4A4A5A) | Secondary text, captions |
|
|
192
|
+
| `text-muted` | `neutral-500` (#6B6B80) | Placeholders, disabled text |
|
|
193
|
+
| `border-default` | `neutral-300` (#B8B8CC) | Default borders |
|
|
194
|
+
| `border-subtle` | `neutral-200` (#D4D4E0) | Subtle dividers |
|
|
195
|
+
|
|
196
|
+
### Theme Token Mapping
|
|
197
|
+
|
|
198
|
+
- All theme values are expressed as CSS custom properties so light and dark palettes share the same token names.
|
|
199
|
+
- Dark mode is the primary theme. Light mode is provided as an alternative.
|
|
200
|
+
- Primary accent (`primary-500`) works in both themes without adjustment.
|
|
201
|
+
- Semantic colors remain constant across themes — their background variants adjust opacity (10% on dark, 8% on light).
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 6. Component Styling
|
|
206
|
+
|
|
207
|
+
> **This section defines visual styling only** — colors, borders, typography, and spacing for common UI elements. Component structure, behavior, and layout patterns are defined in feature PRDs.
|
|
208
|
+
|
|
209
|
+
### Buttons
|
|
210
|
+
|
|
211
|
+
- **Primary**: Background `primary-500`, text white, border-radius 8px, font weight 500.
|
|
212
|
+
- **Primary Hover**: Background `primary-400`.
|
|
213
|
+
- **Primary Active**: Background `primary-600`.
|
|
214
|
+
- **Secondary**: Background transparent, border 1px `neutral-700` (dark) / `neutral-300` (light), text `neutral-100` (dark) / `neutral-800` (light).
|
|
215
|
+
- **Secondary Hover**: Background `neutral-800` (dark) / `neutral-100` (light), border `neutral-600`.
|
|
216
|
+
- **Ghost**: Background transparent, no border, text `primary-500`. Hover: `primary-900` background.
|
|
217
|
+
- **Disabled**: 40% opacity, `cursor: not-allowed`.
|
|
218
|
+
- **Focus**: 2px `primary-400` outline with 2px offset.
|
|
219
|
+
- **Sizes**: Small (32px height, 14px text), Default (40px height, 16px text), Large (48px height, 18px text). Minimum touch target 44x44px.
|
|
220
|
+
|
|
221
|
+
### Form Elements
|
|
222
|
+
|
|
223
|
+
- **Input Background**: `neutral-900` (dark) / `#FFFFFF` (light).
|
|
224
|
+
- **Input Border**: 1px solid `neutral-700` (dark) / `neutral-300` (light), border-radius 8px.
|
|
225
|
+
- **Input Text**: `neutral-100` (dark) / `neutral-900` (light). Placeholder: `neutral-500`.
|
|
226
|
+
- **Focus**: Border `primary-500`, 2px ring in `primary-500` at 25% opacity.
|
|
227
|
+
- **Error**: Border `error` (#F87171), helper text in `error`.
|
|
228
|
+
- **Disabled**: 50% opacity, `neutral-800` background.
|
|
229
|
+
- **Labels**: Body Small (0.875rem), weight 500, `neutral-200` (dark) / `neutral-700` (light).
|
|
230
|
+
- **Helper Text**: Body Small (0.875rem), weight 400, `neutral-400` default.
|
|
231
|
+
- **Checkboxes/Radios**: 18px, 2px border `neutral-600`. Checked: `primary-500` fill, white mark. Radius: 4px (checkbox), 50% (radio).
|
|
232
|
+
|
|
233
|
+
### Cards & Containers
|
|
234
|
+
|
|
235
|
+
- **Background**: `bg-surface` (`neutral-900` dark / `#FFFFFF` light).
|
|
236
|
+
- **Border**: 1px solid `border-default`.
|
|
237
|
+
- **Border-radius**: 12px.
|
|
238
|
+
- **Padding**: `space-6` (24px) mobile, `space-8` (32px) desktop.
|
|
239
|
+
- **Shadow**: None by default in dark mode (relies on border contrast). Light mode uses elevation 1.
|
|
240
|
+
- **Hover (interactive)**: Border shifts to `neutral-600` (dark) / `neutral-400` (light).
|
|
241
|
+
|
|
242
|
+
### Navigation Elements
|
|
243
|
+
|
|
244
|
+
- **Link Color**: `neutral-300` default, `neutral-100` on hover, `primary-400` when active.
|
|
245
|
+
- **Link Weight**: 400 default, 500 when active.
|
|
246
|
+
- **Nav Background**: `neutral-950` at 80% opacity with `backdrop-filter: blur(12px)`.
|
|
247
|
+
- **Nav Border**: 1px solid `neutral-800` bottom edge.
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## 7. Visual Effects
|
|
252
|
+
|
|
253
|
+
### Shadows & Elevation
|
|
254
|
+
|
|
255
|
+
All shadows use a violet-tinted black for cohesion with the palette.
|
|
256
|
+
|
|
257
|
+
| Level | CSS Value | Usage |
|
|
258
|
+
|-------|-----------|-------|
|
|
259
|
+
| **Elevation 0** | none | Default flat elements |
|
|
260
|
+
| **Elevation 1** | `0 1px 3px rgba(10, 10, 15, 0.3), 0 1px 2px rgba(10, 10, 15, 0.2)` | Cards (light mode), subtle lift |
|
|
261
|
+
| **Elevation 2** | `0 4px 6px rgba(10, 10, 15, 0.3), 0 2px 4px rgba(10, 10, 15, 0.2)` | Hover states, popovers |
|
|
262
|
+
| **Elevation 3** | `0 10px 15px rgba(10, 10, 15, 0.35), 0 4px 6px rgba(10, 10, 15, 0.2)` | Dropdowns, tooltips |
|
|
263
|
+
| **Elevation 4** | `0 20px 25px rgba(10, 10, 15, 0.4), 0 8px 10px rgba(10, 10, 15, 0.2)` | Modals, dialogs |
|
|
264
|
+
|
|
265
|
+
**Dark mode note:** Shadows are less visible on dark backgrounds. Dark mode relies primarily on border contrast and surface color differentiation for depth. Shadows are most impactful in light mode.
|
|
266
|
+
|
|
267
|
+
### Border Radius
|
|
268
|
+
|
|
269
|
+
| Token | Value | Usage |
|
|
270
|
+
|-------|-------|-------|
|
|
271
|
+
| `radius-sm` | 4px | Small elements (badges, tags, checkboxes) |
|
|
272
|
+
| `radius-md` | 8px | Buttons, inputs, small cards |
|
|
273
|
+
| `radius-lg` | 12px | Cards, containers, modals |
|
|
274
|
+
| `radius-xl` | 16px | Large feature cards, hero elements |
|
|
275
|
+
| `radius-full` | 9999px | Pills, avatars, circular buttons |
|
|
276
|
+
|
|
277
|
+
### Transitions & Animations
|
|
278
|
+
|
|
279
|
+
#### Duration Standards
|
|
280
|
+
| Token | Value | Usage |
|
|
281
|
+
|-------|-------|-------|
|
|
282
|
+
| `duration-fast` | 100ms | Color changes, opacity |
|
|
283
|
+
| `duration-normal` | 200ms | Most interactions (hover, focus, toggle) |
|
|
284
|
+
| `duration-slow` | 300ms | Layout changes, expand/collapse |
|
|
285
|
+
| `duration-slower` | 500ms | Page transitions, large reveals |
|
|
286
|
+
|
|
287
|
+
#### Easing Functions
|
|
288
|
+
| Token | Value | Usage |
|
|
289
|
+
|-------|-------|-------|
|
|
290
|
+
| `ease-default` | `cubic-bezier(0.4, 0, 0.2, 1)` | General purpose |
|
|
291
|
+
| `ease-in` | `cubic-bezier(0.4, 0, 1, 1)` | Elements exiting view |
|
|
292
|
+
| `ease-out` | `cubic-bezier(0, 0, 0.2, 1)` | Elements entering view |
|
|
293
|
+
| `ease-spring` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | Playful micro-interactions (sparingly) |
|
|
294
|
+
|
|
295
|
+
#### Animation Principles
|
|
296
|
+
- Prefer opacity and transform animations (GPU-accelerated).
|
|
297
|
+
- No animation on page load for above-the-fold content — content should appear instantly.
|
|
298
|
+
- Subtle scroll-triggered fade-ins for below-the-fold sections: `opacity: 0 → 1`, `translateY(8px) → 0`, `duration-slow`.
|
|
299
|
+
- Loading states: Use skeleton screens with a subtle pulse animation (`opacity: 0.5 → 1`, 1.5s, infinite).
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## 8. Iconography
|
|
304
|
+
|
|
305
|
+
### Icon Library
|
|
306
|
+
- **Library:** [Lucide Icons](https://lucide.dev/) — MIT-licensed, consistent stroke-based set, excellent coverage for developer tool UIs
|
|
307
|
+
- **Style:** Outlined (stroke-based)
|
|
308
|
+
- **Stroke width:** 1.5px
|
|
309
|
+
- **Default size:** 20px (pairs with body text), 24px (navigation/buttons), 16px (small/inline)
|
|
310
|
+
|
|
311
|
+
### Usage Guidelines
|
|
312
|
+
- Icons should be accompanied by text labels in navigation — icon-only buttons require tooltips.
|
|
313
|
+
- **Icon-text spacing:** `space-2` (8px)
|
|
314
|
+
- **Icon color:** Inherits text color by default. Interactive icons use `neutral-400` default, `neutral-100` on hover.
|
|
315
|
+
- Keep icon usage restrained — not every list item or label needs an icon.
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## 9. Imagery & Media
|
|
320
|
+
|
|
321
|
+
### Photography Style
|
|
322
|
+
|
|
323
|
+
Not Applicable — developer tooling site relies on code examples, diagrams, and UI illustrations rather than photography.
|
|
324
|
+
|
|
325
|
+
### Illustrations
|
|
326
|
+
|
|
327
|
+
- **Style:** Minimal, geometric line illustrations using the primary and secondary palette.
|
|
328
|
+
- **Stroke weight:** Match icon stroke (1.5px) for cohesion.
|
|
329
|
+
- **Color usage:** Primary purple for emphasis, neutrals for structure, cyan secondary for accents.
|
|
330
|
+
- **Use cases:** Hero section visuals, feature explanations, empty states.
|
|
331
|
+
- Keep illustrations abstract and functional — avoid characters or lifestyle imagery.
|
|
332
|
+
|
|
333
|
+
### Code Blocks
|
|
334
|
+
- **Background:** `neutral-800` (#1E1E26)
|
|
335
|
+
- **Border:** 1px solid `neutral-700`
|
|
336
|
+
- **Border radius:** `radius-lg` (12px)
|
|
337
|
+
- **Padding:** `space-6` (24px)
|
|
338
|
+
- **Font:** JetBrains Mono, 0.875rem
|
|
339
|
+
- **Line numbers:** `neutral-500`
|
|
340
|
+
- **Syntax highlighting:** Use primary purple, secondary cyan, semantic colors, and neutrals for a cohesive code theme.
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## 10. Accessibility
|
|
345
|
+
|
|
346
|
+
### Contrast Requirements
|
|
347
|
+
- **Target:** WCAG 2.1 AA compliance
|
|
348
|
+
- **Normal text:** Minimum 4.5:1 contrast ratio
|
|
349
|
+
- **Large text (≥ 18px bold or ≥ 24px regular):** Minimum 3:1 contrast ratio
|
|
350
|
+
- **Interactive elements:** Minimum 3:1 against adjacent colors
|
|
351
|
+
- All color pairings in this guide meet AA requirements. Key validations:
|
|
352
|
+
- `neutral-200` on `neutral-950`: 14.8:1 ✓
|
|
353
|
+
- `neutral-400` on `neutral-950`: 5.6:1 ✓
|
|
354
|
+
- `primary-500` on `neutral-950`: 5.1:1 ✓
|
|
355
|
+
|
|
356
|
+
### Focus States
|
|
357
|
+
- **Focus ring:** 2px solid `primary-400` (#A78BFA) with 2px offset from the element
|
|
358
|
+
- **Focus ring (high contrast):** Falls back to browser default outline in `forced-colors` mode
|
|
359
|
+
- **All interactive elements** must have visible focus indicators — never use `outline: none` without a replacement
|
|
360
|
+
- **Tab order:** Follows logical reading order (top-to-bottom, left-to-right)
|
|
361
|
+
|
|
362
|
+
### Text Accessibility
|
|
363
|
+
- **Minimum body font size:** 16px (1rem) — never go below 14px for any readable text
|
|
364
|
+
- **Maximum line length:** 65ch (~680px) for body text
|
|
365
|
+
- **Line height:** Minimum 1.5 for body text
|
|
366
|
+
- **Avoid justified text** — use left-aligned (or right-aligned for RTL) only
|
|
367
|
+
- **Link distinction:** Links use `primary-400` color AND underline-on-hover (color alone is insufficient)
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## 11. Responsive Design
|
|
372
|
+
|
|
373
|
+
### Breakpoints
|
|
374
|
+
|
|
375
|
+
| Name | Min Width | Tailwind Prefix |
|
|
376
|
+
|------|-----------|-----------------|
|
|
377
|
+
| Mobile | 0px | (default) |
|
|
378
|
+
| Small | 640px | `sm:` |
|
|
379
|
+
| Medium | 768px | `md:` |
|
|
380
|
+
| Large | 1024px | `lg:` |
|
|
381
|
+
| XL | 1280px | `xl:` |
|
|
382
|
+
|
|
383
|
+
### Scaling Strategy
|
|
384
|
+
- **Mobile-first** — Default styles target mobile, breakpoints add complexity for larger screens.
|
|
385
|
+
- Typography scales down on mobile (see Type Scale responsive section).
|
|
386
|
+
- Spacing reduces by one step on mobile (e.g., `space-24` desktop → `space-16` mobile for section gaps).
|
|
387
|
+
- Grid collapses from 12 columns to 4 on mobile with single-column stacking.
|
|
388
|
+
|
|
389
|
+
### Mobile-Specific Patterns
|
|
390
|
+
- **Touch targets:** Minimum 44px × 44px for all interactive elements
|
|
391
|
+
- **Navigation:** Hamburger menu with fullscreen overlay. No horizontal scrolling nav.
|
|
392
|
+
- **Cards:** Stack vertically with full width, `space-4` (16px) gaps
|
|
393
|
+
- **Buttons:** Full-width on mobile for primary actions in forms/CTAs
|
|
394
|
+
- **Scroll behavior:** `scroll-padding-top: 80px` to account for fixed header when using anchor links
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## 12. Usage Examples
|
|
399
|
+
|
|
400
|
+
### Component Combinations
|
|
401
|
+
|
|
402
|
+
#### Hero Section
|
|
403
|
+
- Full-width dark background (`neutral-950`)
|
|
404
|
+
- Display heading in `neutral-100`, max 15 words
|
|
405
|
+
- Body Large subtitle in `neutral-400`, max 2 lines
|
|
406
|
+
- Primary CTA button + Secondary ghost button side by side
|
|
407
|
+
- `space-24` (96px) vertical padding
|
|
408
|
+
|
|
409
|
+
#### Feature Card Grid
|
|
410
|
+
- 3-column grid on desktop, single column on mobile
|
|
411
|
+
- Cards with `neutral-900` background, `neutral-700` border, `radius-lg`
|
|
412
|
+
- Icon (Lucide, 24px, `primary-400`) top-left
|
|
413
|
+
- H4 title, Body Small description in `neutral-300`
|
|
414
|
+
- `space-8` (32px) gap between cards
|
|
415
|
+
|
|
416
|
+
#### Code Example Block
|
|
417
|
+
- `neutral-800` background, `radius-lg`, `neutral-700` border
|
|
418
|
+
- Language badge top-right: `primary-900` background, `primary-300` text, `radius-sm`, Body Small
|
|
419
|
+
- JetBrains Mono at 14px
|
|
420
|
+
- Copy button: ghost style, top-right, icon-only with tooltip
|
|
421
|
+
- `space-6` padding
|
|
422
|
+
|
|
423
|
+
#### Documentation Page
|
|
424
|
+
- Fixed sidebar navigation (left, 240px width) on desktop, hidden on mobile
|
|
425
|
+
- Content area centered, max `65ch`
|
|
426
|
+
- H2 sections separated by `space-16`
|
|
427
|
+
- In-page table of contents (right sidebar, 200px) on wide screens (≥ 1280px)
|
|
428
|
+
|
|
429
|
+
### Do's and Don'ts
|
|
430
|
+
|
|
431
|
+
**Do:**
|
|
432
|
+
- Use the primary purple for a single focal action per viewport (one primary CTA)
|
|
433
|
+
- Maintain generous whitespace — when in doubt, add more space
|
|
434
|
+
- Use monospace font for any code references, CLI commands, or technical identifiers
|
|
435
|
+
- Keep text under 65ch line length for readability
|
|
436
|
+
|
|
437
|
+
**Don't:**
|
|
438
|
+
- Use purple backgrounds for large areas — reserve it for accents and interactive elements
|
|
439
|
+
- Mix multiple accent colors in the same component
|
|
440
|
+
- Use shadows as the primary depth indicator in dark mode — use surface colors and borders
|
|
441
|
+
- Reduce touch targets below 44px on mobile
|
|
442
|
+
- Use color alone to convey meaning — pair with icons, text, or patterns
|
package/templates/spec-sync.md
CHANGED
|
@@ -13,7 +13,7 @@ These specs define what the product is, how it should look, what technology it u
|
|
|
13
13
|
3. **Update specs that your changes contradict** — If your code change makes a spec statement incorrect (e.g., you changed the data model, switched a dependency, altered a UI pattern, or added a new API endpoint), update the spec to reflect reality. Common candidates:
|
|
14
14
|
- `gspec/architecture.md` — project structure, data model, API routes, component hierarchy
|
|
15
15
|
- `gspec/stack.md` — dependencies, frameworks, infrastructure
|
|
16
|
-
- `gspec/style.md` — design tokens, component
|
|
16
|
+
- `gspec/style.md` — design tokens, component styling, visual conventions
|
|
17
17
|
- `gspec/practices.md` — coding standards, testing conventions, workflows
|
|
18
18
|
- `gspec/profile.md` — product scope, target users, value proposition (rarely changes)
|
|
19
19
|
|