gspec 1.7.0 → 1.11.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.
Files changed (72) hide show
  1. package/bin/gspec.js +275 -8
  2. package/commands/gspec.analyze.md +1 -1
  3. package/commands/gspec.implement.md +10 -8
  4. package/commands/gspec.practices.md +3 -1
  5. package/commands/gspec.stack.md +11 -6
  6. package/commands/gspec.style.md +18 -23
  7. package/dist/antigravity/gspec-analyze/SKILL.md +1 -1
  8. package/dist/antigravity/gspec-architect/SKILL.md +1 -1
  9. package/dist/antigravity/gspec-feature/SKILL.md +1 -1
  10. package/dist/antigravity/gspec-implement/SKILL.md +11 -9
  11. package/dist/antigravity/gspec-migrate/SKILL.md +5 -5
  12. package/dist/antigravity/gspec-practices/SKILL.md +4 -2
  13. package/dist/antigravity/gspec-profile/SKILL.md +1 -1
  14. package/dist/antigravity/gspec-research/SKILL.md +3 -3
  15. package/dist/antigravity/gspec-stack/SKILL.md +12 -7
  16. package/dist/antigravity/gspec-style/SKILL.md +19 -24
  17. package/dist/claude/gspec-analyze/SKILL.md +1 -1
  18. package/dist/claude/gspec-architect/SKILL.md +1 -1
  19. package/dist/claude/gspec-feature/SKILL.md +1 -1
  20. package/dist/claude/gspec-implement/SKILL.md +11 -9
  21. package/dist/claude/gspec-migrate/SKILL.md +5 -5
  22. package/dist/claude/gspec-practices/SKILL.md +4 -2
  23. package/dist/claude/gspec-profile/SKILL.md +1 -1
  24. package/dist/claude/gspec-research/SKILL.md +3 -3
  25. package/dist/claude/gspec-stack/SKILL.md +12 -7
  26. package/dist/claude/gspec-style/SKILL.md +19 -24
  27. package/dist/codex/gspec-analyze/SKILL.md +1 -1
  28. package/dist/codex/gspec-architect/SKILL.md +1 -1
  29. package/dist/codex/gspec-feature/SKILL.md +1 -1
  30. package/dist/codex/gspec-implement/SKILL.md +11 -9
  31. package/dist/codex/gspec-migrate/SKILL.md +5 -5
  32. package/dist/codex/gspec-practices/SKILL.md +4 -2
  33. package/dist/codex/gspec-profile/SKILL.md +1 -1
  34. package/dist/codex/gspec-research/SKILL.md +3 -3
  35. package/dist/codex/gspec-stack/SKILL.md +12 -7
  36. package/dist/codex/gspec-style/SKILL.md +19 -24
  37. package/dist/cursor/gspec-analyze.mdc +1 -1
  38. package/dist/cursor/gspec-architect.mdc +1 -1
  39. package/dist/cursor/gspec-feature.mdc +1 -1
  40. package/dist/cursor/gspec-implement.mdc +11 -9
  41. package/dist/cursor/gspec-migrate.mdc +5 -5
  42. package/dist/cursor/gspec-practices.mdc +4 -2
  43. package/dist/cursor/gspec-profile.mdc +1 -1
  44. package/dist/cursor/gspec-research.mdc +3 -3
  45. package/dist/cursor/gspec-stack.mdc +12 -7
  46. package/dist/cursor/gspec-style.mdc +19 -24
  47. package/dist/opencode/gspec-analyze/SKILL.md +168 -0
  48. package/dist/opencode/gspec-architect/SKILL.md +361 -0
  49. package/dist/opencode/gspec-feature/SKILL.md +204 -0
  50. package/dist/opencode/gspec-implement/SKILL.md +202 -0
  51. package/dist/opencode/gspec-migrate/SKILL.md +118 -0
  52. package/dist/opencode/gspec-practices/SKILL.md +137 -0
  53. package/dist/opencode/gspec-profile/SKILL.md +221 -0
  54. package/dist/opencode/gspec-research/SKILL.md +302 -0
  55. package/dist/opencode/gspec-stack/SKILL.md +305 -0
  56. package/dist/opencode/gspec-style/SKILL.md +224 -0
  57. package/package.json +3 -1
  58. package/starters/features/about-page.md +98 -0
  59. package/starters/features/contact-form.md +147 -0
  60. package/starters/features/contact-page.md +103 -0
  61. package/starters/features/home-page.md +103 -0
  62. package/starters/features/responsive-navbar.md +113 -0
  63. package/starters/features/services-page.md +103 -0
  64. package/starters/features/site-footer.md +121 -0
  65. package/starters/features/theme-switcher.md +124 -0
  66. package/starters/practices/tdd-pipeline-first.md +192 -0
  67. package/starters/stacks/astro-tailwind-github-pages.md +283 -0
  68. package/starters/stacks/nextjs-supabase-vercel.md +319 -0
  69. package/starters/stacks/nextjs-vercel-typescript.md +264 -0
  70. package/starters/styles/clean-professional.md +316 -0
  71. package/starters/styles/dark-minimal-developer.md +442 -0
  72. package/templates/spec-sync.md +1 -1
@@ -0,0 +1,264 @@
1
+ ---
2
+ gspec-version: 1.8.0
3
+ description: Next.js App Router, TypeScript, Tailwind CSS, deployed on Vercel
4
+ ---
5
+
6
+ # Technology Stack Definition
7
+
8
+ ## 1. Overview
9
+
10
+ - **Architecture style**: Server-rendered monolith (Next.js App Router with SSR/SSG)
11
+ - **Deployment target**: Cloud — Vercel (edge/serverless rendering with built-in CDN)
12
+ - **Scale & performance**: Core content loads within 2s on typical mobile networks; lean bundles via dynamic imports and tree-shaking; responsive across desktop and mobile viewports
13
+
14
+ ## 2. Open Questions & Clarifications
15
+
16
+ None — all critical technology decisions are resolved.
17
+
18
+ ## 3. Core Technology Stack
19
+
20
+ ### Programming Languages
21
+
22
+ - **Primary**: TypeScript 5.x (strict mode enabled)
23
+ - *Rationale*: Type safety, predictable refactors, first-class Next.js support
24
+ - **Secondary**: N/A
25
+ - **Tooling**: ESLint (TypeScript rules), Prettier (formatting)
26
+
27
+ ### Runtime Environment
28
+
29
+ - **Runtime**: Node.js 20+ LTS
30
+ - *Rationale*: Required for Next.js; LTS ensures stability and long-term security patches
31
+ - **Container runtime**: Not required — Vercel manages the runtime environment
32
+
33
+ ## 4. Frontend Stack
34
+
35
+ ### Framework
36
+
37
+ - **Framework**: Next.js (latest LTS release, App Router)
38
+ - *Rationale*: Server-rendered defaults with hydration as needed; App Router provides layouts, server components, and streaming out of the box; first-class Vercel deployment support
39
+ - **Update strategy**: Track Next.js LTS releases; upgrade within 30 days of new LTS availability
40
+
41
+ ### Build Tools
42
+
43
+ - **Bundler**: Next.js built-in (SWC-based compiler + Turbopack for development)
44
+ - *Rationale*: Zero-config, optimized for the Next.js ecosystem; SWC provides fast TypeScript transpilation
45
+ - **Build optimization**: Dynamic imports for code-splitting, tree-shaking via ES module imports, Next.js image optimization pipeline
46
+
47
+ ### State Management
48
+
49
+ - **Approach**: Server-first — lean on server components and server-rendered data; client-side state kept minimal
50
+ - **Libraries**: React built-in hooks (`useState`, `useReducer`, `useContext`) for local/client state
51
+ - *Rationale*: No global state library needed for a content-driven frontend; avoids unnecessary bundle weight
52
+ - **Data fetching**: Next.js `fetch` with caching directives in server components; SWR or server actions for any client-side data needs
53
+
54
+ ### Styling Technology
55
+
56
+ - **Framework**: Tailwind CSS 4.x with design tokens for spacing, typography, colors, and elevation
57
+ - *Rationale*: Utility-first approach aligns with component-based architecture; shared configuration keeps styles cohesive; excellent tree-shaking for production
58
+ - **CSS-in-JS**: Not used — Tailwind utilities only; no raw CSS outside Tailwind conventions
59
+ - **Responsive design**: Tailwind responsive prefixes (`sm:`, `md:`, `lg:`, `xl:`) for mobile-first breakpoints
60
+ - **Note**: Icon library choices are defined in `gspec/style.md`. The stack defines the CSS framework and component library; the style defines the icon set.
61
+
62
+ ## 5. Backend Stack
63
+
64
+ **Not Applicable** — this is a frontend-only / static site project deployed to Vercel. No database, API layer, or server-side auth is required.
65
+
66
+ ### Database
67
+
68
+ N/A
69
+
70
+ ### Caching Layer
71
+
72
+ N/A — Vercel edge caching and Next.js built-in caching handle content delivery.
73
+
74
+ ### Message Queue / Event Bus
75
+
76
+ N/A
77
+
78
+ ## 6. Infrastructure & DevOps
79
+
80
+ ### Cloud Provider
81
+
82
+ - **Provider**: Vercel
83
+ - *Key services*: Edge network, serverless functions (if needed), image optimization, analytics
84
+ - *Rationale*: Purpose-built for Next.js; predictable builds, automatic edge caching, zero-config HTTPS
85
+
86
+ ### Container Orchestration
87
+
88
+ N/A — Vercel manages scaling and deployment infrastructure automatically.
89
+
90
+ ### CI/CD Pipeline
91
+
92
+ - **Platform:** GitLab CI
93
+ - *Rationale:* Aligns with existing team infrastructure and workflow.
94
+ - **Deployment trigger:** Merge to main branch after pipeline passes.
95
+ - **Deployment method:** Vercel Git integration for preview deployments on merge requests; production deploy on main branch merge.
96
+ - **Note:** Pipeline stages and structure (lint → typecheck → test → build → deploy) are defined in `gspec/practices.md`. This section defines the CI technology and deployment configuration.
97
+
98
+ ### Infrastructure as Code
99
+
100
+ N/A — Vercel manages infrastructure. Project configuration lives in `next.config.ts` and `vercel.json` (if needed).
101
+
102
+ ## 7. Data & Storage
103
+
104
+ ### File Storage
105
+
106
+ - **Static assets**: Served via Vercel's built-in CDN from the `public/` directory
107
+ - **Images**: Next.js `<Image />` component with automatic optimization (WebP/AVIF, responsive sizing)
108
+ - **Asset management**: Styled placeholders used during development; final assets swapped in before release
109
+
110
+ ### Data Warehouse / Analytics
111
+
112
+ N/A
113
+
114
+ ## 8. Authentication & Security
115
+
116
+ N/A — no authentication or authorization layer for this frontend-only project.
117
+
118
+ ### Security Tools
119
+
120
+ - **Secrets management**: Environment variables via Vercel project settings (build-time and runtime)
121
+ - **Security scanning**: `pnpm audit` for dependency vulnerabilities; Dependabot or Renovate for automated dependency updates
122
+ - **Compliance**: HTTPS enforced by Vercel; no user data collection requiring GDPR/CCPA compliance at this stage
123
+
124
+ ## 9. Monitoring & Observability
125
+
126
+ Minimal for initial launch — to be revisited as the project scales.
127
+
128
+ ### Application Monitoring
129
+
130
+ Deferred — Vercel provides basic deployment and function metrics out of the box.
131
+
132
+ ### Logging
133
+
134
+ Deferred — Vercel function logs available via dashboard for debugging.
135
+
136
+ ### Tracing
137
+
138
+ N/A
139
+
140
+ ### Error Tracking
141
+
142
+ Deferred — can add Sentry when needed. Next.js has built-in error boundaries for graceful UI failure handling.
143
+
144
+ ## 10. Testing Infrastructure
145
+
146
+ ### Testing Frameworks
147
+
148
+ - **Unit / Integration**: Vitest
149
+ - *Rationale*: Fast, ESM-native, excellent TypeScript support; compatible with React Testing Library
150
+ - **Component testing**: React Testing Library
151
+ - *Rationale*: Tests components as users interact with them; encourages accessible markup
152
+ - **E2E**: Cypress (headless in CI)
153
+ - *Rationale*: Mature ecosystem, reliable deterministic tests with `cy.intercept()` for stubbing
154
+
155
+ ### Test Data Management
156
+
157
+ - **Fixtures**: JSON fixtures in `tests/fixtures/` for consistent test data
158
+ - **Mocks**: Vitest built-in mocking for modules; `cy.intercept()` for network stubbing in E2E
159
+ - **Test isolation**: Each test suite manages its own state; no shared mutable state between tests
160
+
161
+ ### Performance Testing
162
+
163
+ Deferred — Core Web Vitals monitored via Lighthouse CI or Vercel Analytics when enabled.
164
+
165
+ ## 11. Third-Party Integrations
166
+
167
+ ### External Services
168
+
169
+ - **Formspree** — Client-side form submission service for contact forms and visitor inquiries. Accepts POST requests directly from the browser — no server-side endpoint or backend code required.
170
+ - *Rationale*: This is a frontend-only project with no backend logic. Formspree provides form handling without requiring server actions or API routes, keeping the architecture static.
171
+ - Free tier supports up to 50 submissions per month.
172
+ - Submissions are forwarded to a configured email address.
173
+
174
+ ### API Clients
175
+
176
+ - **HTTP client**: Native `fetch` API for Formspree form submissions. No SDK dependency needed — Formspree accepts standard `FormData` POST requests.
177
+
178
+ ## 12. Development Tools
179
+
180
+ ### Package Management
181
+
182
+ - **Package manager**: pnpm (latest stable)
183
+ - *Rationale*: Fast installs, strict dependency resolution prevents phantom dependencies, disk-efficient via content-addressable storage
184
+ - **Dependency management**: `pnpm-lock.yaml` committed to version control; `pnpm audit` run in CI
185
+ - **Private registry**: N/A
186
+
187
+ ### Code Quality Tools
188
+
189
+ - **Linter**: ESLint with `eslint-config-next` and TypeScript rules
190
+ - **Formatter**: Prettier (configured to align with ESLint)
191
+ - **Pre-commit hooks**: Husky + lint-staged for running ESLint and Prettier on staged files
192
+ - **Type checking**: `tsc --noEmit` in CI pipeline
193
+
194
+ ### Local Development
195
+
196
+ - **Project starter**: `create-next-app` (official Next.js scaffolding tool via `pnpm create next-app`)
197
+ - *Rationale*: Provides a well-structured starting point with recommended defaults, TypeScript config, and App Router setup
198
+ - **Setup**: `pnpm install` → `pnpm dev` (Next.js dev server with Turbopack)
199
+ - **Hot reload**: Built-in via Next.js Fast Refresh
200
+ - **Environment**: `.env.local` for local environment variables (gitignored)
201
+
202
+ ## 13. Migration & Compatibility
203
+
204
+ ### Legacy System Integration
205
+
206
+ N/A — greenfield project.
207
+
208
+ ### Upgrade Path
209
+
210
+ - **Next.js**: Track LTS releases; review changelogs and run codemods when upgrading major versions
211
+ - **Tailwind CSS**: Follow major version migration guides; design tokens minimize breaking changes
212
+ - **Dependencies**: Automated update PRs via Renovate or Dependabot; reviewed weekly
213
+
214
+ ## 14. Technology Decisions & Tradeoffs
215
+
216
+ ### Key Architectural Decisions
217
+
218
+ | Decision | Choice | Alternatives Considered | Rationale |
219
+ |---|---|---|---|
220
+ | Framework | Next.js (App Router) | Remix, Astro, Nuxt | Best Vercel integration; mature SSR/SSG; React ecosystem |
221
+ | Styling | Tailwind CSS | CSS Modules, Styled Components | Utility-first aligns with component architecture; zero runtime cost; design token support |
222
+ | Testing | Vitest + Cypress | Jest + Playwright | Vitest is faster and ESM-native; Cypress is mature for E2E with reliable stubbing |
223
+ | Package manager | pnpm | npm, yarn | Strict resolution prevents phantom deps; faster installs; disk-efficient |
224
+ | Deployment | Vercel | Netlify, AWS Amplify, Cloudflare Pages | Purpose-built for Next.js; edge caching; zero-config previews |
225
+ | CI/CD | GitLab CI | GitHub Actions | Aligns with existing team infrastructure and workflow |
226
+
227
+ ### Risk Mitigation
228
+
229
+ | Risk | Mitigation | Fallback |
230
+ |---|---|---|
231
+ | Next.js breaking changes on major upgrade | Pin to LTS; test upgrades in preview branch | Delay upgrade; apply security patches only |
232
+ | Vercel vendor lock-in | Keep Next.js config portable; avoid Vercel-only APIs where possible | Self-host via `next start` on any Node.js platform |
233
+ | Tailwind major version migration | Use design tokens abstraction layer; follow official migration guides | Gradual migration with compatibility layer |
234
+
235
+ ## 15. Technology-Specific Practices
236
+
237
+ ### Framework Conventions & Patterns
238
+
239
+ - **App Router structure:** Use the `app/` directory with route groups for logical organization (e.g., `(marketing)` for public pages). Keep layouts in `app/layout.tsx` and page-level layouts in route group folders.
240
+ - **Server vs Client Components:** Default to Server Components. Add `"use client"` only when the component needs browser APIs, event handlers, or React hooks (`useState`, `useEffect`). Push interactivity to leaf components.
241
+ - **Static generation:** Prefer static rendering (SSG) for content pages. Use `generateStaticParams()` for dynamic routes if applicable.
242
+ - **Loading and error states:** Use `loading.tsx` and `error.tsx` files at appropriate route levels for streaming UI and error boundaries.
243
+ - **Metadata:** Export `metadata` or `generateMetadata` from every page for SEO (title, description, Open Graph).
244
+
245
+ ### Library Usage Patterns
246
+
247
+ - **Tailwind conventions:** Use Tailwind utility classes directly in JSX. Avoid `@apply` except in global styles for base resets. Use `cn()` or `clsx()` for conditional class merging. Follow mobile-first responsive design (`sm:`, `md:`, `lg:` breakpoints).
248
+ - **Design token mapping:** Map design tokens from `gspec/style.md` to Tailwind's theme configuration in `tailwind.config.ts` under `theme.extend`. Use CSS custom properties in `app/globals.css` for runtime theme switching (light/dark mode).
249
+ - **Image optimization:** Use Next.js `<Image />` component for all images. Set `priority` on above-the-fold hero images.
250
+
251
+ ### Language Idioms
252
+
253
+ - **TypeScript strict mode:** `strict: true` in `tsconfig.json`. No `any` types — use `unknown` and narrow with type guards.
254
+ - **Path aliases:** Use `@/` alias (configured in `tsconfig.json`) for imports from the project root. Example: `import { Button } from "@/components/ui/button"`.
255
+ - **Import organization:** Group imports: (1) React/Next.js, (2) third-party libraries, (3) internal modules, (4) relative imports.
256
+ - **Async patterns:** Use `async/await` consistently. Avoid `.then()` chains.
257
+
258
+ ### Stack-Specific Anti-Patterns
259
+
260
+ - **Don't use `useEffect` for data fetching** when a Server Component can do the same work — causes client-side waterfalls.
261
+ - **Don't add `"use client"` to layout files** unless absolutely necessary — this forces all children to be client components.
262
+ - **Don't import server-only modules in Client Components.** Use the `server-only` package to enforce boundaries.
263
+ - **Don't install a CSS-in-JS library** alongside Tailwind — pick one styling approach.
264
+ - **Don't use inline styles** for values that should be design tokens — map them through Tailwind configuration.
@@ -0,0 +1,316 @@
1
+ ---
2
+ gspec-version: 1.8.0
3
+ description: Clean, professional design with restrained palette and clear typography
4
+ ---
5
+
6
+ # Visual Style Guide
7
+
8
+ ## 1. Overview
9
+
10
+ - **Design Vision**: A clean, professional interface that communicates expertise and trustworthiness. The design recedes to let content take center stage — clear typography, generous whitespace, and purposeful color usage.
11
+ - **Target Platforms**: Responsive web (Mobile-First, scaling to Desktop/Tablet).
12
+ - **Visual Personality**: Professional, Approachable, Reliable, Pragmatic.
13
+ - **Design Rationale**: A professional services site must project competence and trustworthiness at a glance. The restrained palette and clear typography let the content speak, while strategic use of color draws attention to key actions. The minimal aesthetic avoids visual noise that could undermine credibility.
14
+
15
+ ## 2. Color Palette
16
+
17
+ High-contrast and professional, designed for readability across devices and lighting conditions.
18
+
19
+ ### Primary Colors
20
+
21
+ | Color Name | Hex | Usage |
22
+ | :--- | :--- | :--- |
23
+ | **Primary** | `#2563EB` | Primary action color. Used for primary buttons, active states, and key highlights. |
24
+ | **Primary Dark** | `#1D4ED8` | Hover states for primary actions. |
25
+ | **Primary Light** | `#60A5FA` | Accents on dark backgrounds. |
26
+
27
+ ### Secondary Colors
28
+
29
+ | Color Name | Hex | Usage |
30
+ | :--- | :--- | :--- |
31
+ | **Slate Dark** | `#0F172A` | Dark mode background. |
32
+ | **Slate Surface** | `#1E293B` | Dark mode cards/surfaces. |
33
+ | **Paper White** | `#FFFFFF` | Light mode background. |
34
+
35
+ ### Neutral Colors
36
+
37
+ | Role | Light Mode | Dark Mode | Usage |
38
+ | :--- | :--- | :--- | :--- |
39
+ | **Text Primary** | `#0F172A` | `#F8FAFC` | Headings, main body text. |
40
+ | **Text Secondary** | `#64748B` | `#94A3B8` | Labels, helper text, supporting content. |
41
+ | **Text Disabled** | `#CBD5E1` | `#475569` | Disabled fields, placeholders. |
42
+ | **Border** | `#E2E8F0` | `#334155` | Dividers, input borders. |
43
+
44
+ ### Semantic Colors
45
+
46
+ | State | Color | Hex | Usage |
47
+ | :--- | :--- | :--- | :--- |
48
+ | **Success** | Emerald | `#10B981` | Success confirmations, positive feedback. |
49
+ | **Error** | Red | `#EF4444` | Validation errors, destructive actions. |
50
+ | **Warning** | Amber | `#F59E0B` | Non-critical alerts, warnings. |
51
+ | **Info** | Sky | `#0EA5E9` | Informational tooltips, notes. |
52
+
53
+ ---
54
+
55
+ ## 3. Typography
56
+
57
+ Typography is the primary interface element. It must be legible and convey professionalism.
58
+
59
+ ### Font Families
60
+
61
+ - **Primary (UI & Headings)**: **Inter** (Google Fonts). Clean, highly legible, with a tall x-height.
62
+ - **Monospace (Code & Data)**: **JetBrains Mono** or system monospace fallback. Used for code snippets or technical content if needed.
63
+
64
+ ### Type Scale (Mobile-First)
65
+
66
+ | Level | Size (rem/px) | Line Height | Weight | Usage |
67
+ | :--- | :--- | :--- | :--- | :--- |
68
+ | **H1** | `1.875rem` (30px) | `1.2` | Bold (700) | Page titles |
69
+ | **H2** | `1.5rem` (24px) | `1.3` | SemiBold (600) | Section headers |
70
+ | **H3** | `1.25rem` (20px) | `1.4` | Medium (500) | Sub-sections, card titles |
71
+ | **Body Lg** | `1.125rem` (18px) | `1.5` | Regular (400) | Featured text, hero subtitles |
72
+ | **Body Base** | `1rem` (16px) | `1.5` | Regular (400) | Default text, descriptions |
73
+ | **Body Sm** | `0.875rem` (14px) | `1.4` | Regular (400) | Metadata, captions |
74
+ | **Caption** | `0.75rem` (12px) | `1.4` | Medium (500) | Tiny labels, tags |
75
+
76
+ ---
77
+
78
+ ## 4. Spacing & Layout
79
+
80
+ Standard 4px grid system.
81
+
82
+ ### Spacing Scale
83
+
84
+ - **xs**: `4px` (0.25rem) — Tight grouping (tags, icon+text)
85
+ - **sm**: `8px` (0.5rem) — Component internal spacing
86
+ - **md**: `16px` (1rem) — Standard separation between elements
87
+ - **lg**: `24px` (1.5rem) — Section separation
88
+ - **xl**: `32px` (2rem) — Major layout breaks
89
+
90
+ ### Grid System
91
+
92
+ - **Container**: Max-width 1152px centered with horizontal padding for comfortable reading width.
93
+ - **Columns**: Single-column layout on mobile. Multi-column grids on desktop where appropriate.
94
+
95
+ ### Layout Patterns
96
+
97
+ - **Mobile-first**: Single-column stacked layout.
98
+ - **Desktop**: Multi-column grids for cards and feature sections.
99
+ - **Flex containers**: Always apply `min-width: 0` on flex children that wrap content to prevent the flexbox `min-width: auto` default from causing horizontal overflow on mobile.
100
+ - **Content wrappers**: Use `overflow: hidden` on bounded containers (cards, main content area) to clip any remaining overflow.
101
+
102
+ ---
103
+
104
+ ## 5. Themes
105
+
106
+ ### Light Mode (Default)
107
+ - **Background**: `#FFFFFF`
108
+ - **Surface**: `#F8FAFC` or `#FFFFFF` with borders.
109
+ - **Text**: `#0F172A`
110
+
111
+ ### Dark Mode
112
+ - **Background**: `#0F172A` (Not pure black, reduces contrast strain).
113
+ - **Surface**: `#1E293B`
114
+ - **Primary Action**: `#2563EB` stands out vividly.
115
+ - **Text**: `#F8FAFC` for high legibility.
116
+
117
+ ### Theme Token Mapping
118
+ - Light and dark themes share the same token names. Switching themes swaps the values of `--color-background`, `--color-surface`, `--color-text-primary`, `--color-text-secondary`, `--color-text-disabled`, and `--color-border`.
119
+
120
+ ---
121
+
122
+ ## 6. Component Styling
123
+
124
+ > **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.
125
+
126
+ ### Buttons
127
+
128
+ - **Primary**: Background `#2563EB`, text white, border-radius 6px.
129
+ - **Primary Hover**: Background `#1D4ED8`.
130
+ - **Secondary**: Background transparent, border 1px `#CBD5E1` (Light) / `#475569` (Dark), text `#334155` (Light) / `#CBD5E1` (Dark).
131
+ - **Ghost**: No border, no background. Hover: subtle background fill.
132
+ - **Disabled**: 50% opacity, `cursor: not-allowed`.
133
+ - **Sizes**: Default 40px height, Large 48px height. Minimum touch target 44x44px.
134
+
135
+ ### Form Elements
136
+
137
+ - **Input Background**: Transparent (Light) / Transparent (Dark).
138
+ - **Input Border**: 1px `#CBD5E1` (Light) / `#334155` (Dark), border-radius 6px.
139
+ - **Focus**: Border `#2563EB` (2px), ring `rgba(37, 99, 235, 0.2)`.
140
+ - **Error**: Border `#EF4444`, helper text in `#EF4444`.
141
+ - **Disabled**: 50% opacity.
142
+
143
+ ### Cards & Containers
144
+
145
+ - **Background**: `#FFFFFF` (Light) / `#1E293B` (Dark).
146
+ - **Border**: 1px solid `#E2E8F0` (Light) / `#334155` (Dark).
147
+ - **Border-radius**: 8px.
148
+ - **Shadow**: `--shadow-sm` or none. Heavy shadows are avoided for a clean look.
149
+
150
+ ### Navigation Elements
151
+
152
+ - **Link Color**: `--color-text-secondary` default, `--color-text-primary` on hover.
153
+ - **Active Link**: `--color-primary` text color.
154
+ - **Nav Background**: `--color-background` with optional `--shadow-md` for sticky positioning.
155
+
156
+ ---
157
+
158
+ ## 7. Visual Effects
159
+
160
+ ### Shadows & Elevation
161
+ Minimalist approach.
162
+ - **None**: Most elements.
163
+ - **sm**: `0 1px 2px rgba(0, 0, 0, 0.05)` for cards to lift slightly off background.
164
+ - **md**: `0 4px 6px rgba(0, 0, 0, 0.07)` for floating elements or sticky headers.
165
+
166
+ ### Border Radius
167
+ - **Standard**: 6px for inputs/buttons.
168
+ - **Large**: 8px for cards/containers.
169
+ - **Pills**: 9999px for status tags.
170
+
171
+ ### Transitions & Animations
172
+ - **Speed**: Fast (150ms or 200ms).
173
+ - **Ease**: `cubic-bezier(0, 0, 0.2, 1)` (ease-out).
174
+ - **Feedback**: Immediate visual feedback on interaction (hover color shift, subtle scale reduction on press for buttons).
175
+ - **Loading States**: Skeleton screens or spinner indicators for async operations.
176
+
177
+ ---
178
+
179
+ ## 8. Iconography
180
+
181
+ ### Icon Library
182
+ - **Library**: [HeroIcons](https://heroicons.com/) — MIT-licensed, SVG-based, tree-shakeable inline imports. Maintained by the Tailwind team for consistent pairing with utility-first CSS.
183
+ - **Style**: Outlined, 2px stroke.
184
+ - **Size**:
185
+ - Small: 16px.
186
+ - Standard: 20px.
187
+ - Navigation: 24px.
188
+
189
+ ### Usage Guidelines
190
+ - Pair icons with text labels in navigation for accessibility.
191
+ - Use familiar metaphors for common actions.
192
+
193
+ ---
194
+
195
+ ## 9. Imagery & Media
196
+
197
+ ### Photography Style
198
+ Not applicable for initial launch. If marketing imagery is added later, it should be authentic and professional — not generic stock photography.
199
+
200
+ ### Illustrations
201
+ Not applicable — the UI relies on typography, spacing, and iconography rather than illustrations. Empty states use icon + text patterns.
202
+
203
+ ---
204
+
205
+ ## 10. Accessibility
206
+
207
+ ### Contrast Requirements
208
+ - Maintain WCAG AA standard (4.5:1) for normal text.
209
+ - Large text (18px+ or 14px+ bold) requires 3:1 minimum.
210
+
211
+ ### Focus States
212
+ - Visible focus rings for keyboard/screen reader navigation.
213
+ - Focus ring style: 2px offset ring in primary color.
214
+
215
+ ### Text Accessibility
216
+ - **Touch**: All interactive elements must have at least 44px hit areas.
217
+ - Minimum body font size: 16px (1rem).
218
+
219
+ ---
220
+
221
+ ## 11. Responsive Design
222
+
223
+ ### Breakpoints
224
+ - **Mobile First**: Design for 375px width base.
225
+ - **sm**: 640px (Large phones)
226
+ - **md**: 768px (Tablets)
227
+ - **lg**: 1024px (Desktop)
228
+
229
+ ### Mobile-Specific Patterns
230
+ - Touch targets: minimum 44x44px on all interactive elements.
231
+ - Mobile navigation: Hamburger menu pattern (see Components > Navigation).
232
+
233
+ ---
234
+
235
+ ## 12. Usage Examples
236
+
237
+ ### Design Tokens
238
+
239
+ Tokens are defined as framework-agnostic CSS custom properties.
240
+
241
+ - Naming convention: `--color-*`, `--font-*`, `--spacing-*`, `--shadow-*`, `--radius-*`, `--duration-*`
242
+
243
+ ```css
244
+ :root {
245
+ /* Colors — Primary */
246
+ --color-primary: #2563EB;
247
+ --color-primary-dark: #1D4ED8;
248
+ --color-primary-light: #60A5FA;
249
+ --color-primary-foreground: #FFFFFF;
250
+
251
+ /* Colors — Semantic */
252
+ --color-success: #10B981;
253
+ --color-error: #EF4444;
254
+ --color-warning: #F59E0B;
255
+ --color-info: #0EA5E9;
256
+
257
+ /* Colors — Light Mode (default) */
258
+ --color-background: #FFFFFF;
259
+ --color-surface: #F8FAFC;
260
+ --color-text-primary: #0F172A;
261
+ --color-text-secondary: #64748B;
262
+ --color-text-disabled: #CBD5E1;
263
+ --color-border: #E2E8F0;
264
+
265
+ /* Typography */
266
+ --font-family-sans: 'Inter', sans-serif;
267
+ --font-family-mono: 'JetBrains Mono', monospace;
268
+ --font-size-h1: 1.875rem;
269
+ --font-size-h2: 1.5rem;
270
+ --font-size-h3: 1.25rem;
271
+ --font-size-body-lg: 1.125rem;
272
+ --font-size-body: 1rem;
273
+ --font-size-body-sm: 0.875rem;
274
+ --font-size-caption: 0.75rem;
275
+ --font-weight-regular: 400;
276
+ --font-weight-medium: 500;
277
+ --font-weight-semibold: 600;
278
+ --font-weight-bold: 700;
279
+
280
+ /* Spacing */
281
+ --spacing-xs: 0.25rem;
282
+ --spacing-sm: 0.5rem;
283
+ --spacing-md: 1rem;
284
+ --spacing-lg: 1.5rem;
285
+ --spacing-xl: 2rem;
286
+
287
+ /* Border Radius */
288
+ --radius-md: 0.375rem;
289
+ --radius-lg: 0.5rem;
290
+ --radius-full: 9999px;
291
+
292
+ /* Shadows */
293
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
294
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
295
+
296
+ /* Transitions */
297
+ --duration-fast: 150ms;
298
+ --duration-medium: 200ms;
299
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
300
+ }
301
+
302
+ /* Dark Mode */
303
+ [data-theme="dark"],
304
+ .dark {
305
+ --color-background: #0F172A;
306
+ --color-surface: #1E293B;
307
+ --color-text-primary: #F8FAFC;
308
+ --color-text-secondary: #94A3B8;
309
+ --color-text-disabled: #475569;
310
+ --color-border: #334155;
311
+ }
312
+ ```
313
+
314
+ ### Component Combinations
315
+
316
+ To be defined.