@vadimcomanescu/nadicode-design-system 4.0.1 → 4.0.2

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 (35) hide show
  1. package/.agents/skills/seed/SKILL.md +34 -163
  2. package/.agents/skills/seed/references/animation.md +2 -2
  3. package/.agents/skills/seed/references/responsive.md +1 -1
  4. package/README.md +2 -2
  5. package/eslint-rules/nadicode/rules/no-has-svg-selector.js +1 -1
  6. package/package.json +1 -2
  7. package/scripts/ds-check.mjs +0 -10
  8. package/scripts/sync-seed-skill.mjs +0 -3
  9. package/.agents/skills/seed/contract.md +0 -110
  10. package/.agents/skills/seed/intent-map.md +0 -320
  11. package/.agents/skills/seed/recipes/agency-home.md +0 -311
  12. package/.agents/skills/seed/recipes/agents-chat.md +0 -305
  13. package/.agents/skills/seed/recipes/analytics.md +0 -253
  14. package/.agents/skills/seed/recipes/auth.md +0 -254
  15. package/.agents/skills/seed/recipes/blog-content.md +0 -307
  16. package/.agents/skills/seed/recipes/checkout.md +0 -311
  17. package/.agents/skills/seed/recipes/company-about.md +0 -276
  18. package/.agents/skills/seed/recipes/company-contact.md +0 -234
  19. package/.agents/skills/seed/recipes/crud-form.md +0 -233
  20. package/.agents/skills/seed/recipes/crud-list-detail.md +0 -230
  21. package/.agents/skills/seed/recipes/dashboard.md +0 -354
  22. package/.agents/skills/seed/recipes/digital-workers.md +0 -314
  23. package/.agents/skills/seed/recipes/error-pages.md +0 -199
  24. package/.agents/skills/seed/recipes/marketing-landing.md +0 -293
  25. package/.agents/skills/seed/recipes/marketing-shell.md +0 -156
  26. package/.agents/skills/seed/recipes/navigation-shell.md +0 -787
  27. package/.agents/skills/seed/recipes/onboarding.md +0 -258
  28. package/.agents/skills/seed/recipes/pricing.md +0 -271
  29. package/.agents/skills/seed/recipes/service-detail.md +0 -302
  30. package/.agents/skills/seed/recipes/settings.md +0 -252
  31. package/.agents/skills/seed/references/blocks.md +0 -128
  32. package/.agents/skills/seed/references/components.md +0 -287
  33. package/.agents/skills/seed/references/icons.md +0 -169
  34. package/.agents/skills/seed/references/nextjs.md +0 -49
  35. package/.agents/skills/seed/references/tokens.md +0 -88
@@ -1,199 +0,0 @@
1
- # Recipe: Error Pages
2
-
3
- 404 Not Found and 500 Server Error fallback surfaces with recovery CTAs.
4
-
5
- ## Route Patterns
6
-
7
- - `/404` (or Next.js `not-found.tsx`)
8
- - `/500` (or Next.js `error.tsx`)
9
- - Any route with `notFound()` or unhandled error
10
-
11
- ## Shell
12
-
13
- `fallback-shell` (minimal: logo + "go home" link, no sidebar or full nav)
14
-
15
- ---
16
-
17
- ## Layout Blueprint
18
-
19
- ```
20
- +------------------------------------------------+
21
- | Logo [Home] |
22
- +------------------------------------------------+
23
- | |
24
- | |
25
- | [Illustration / Icon] |
26
- | |
27
- | 404 |
28
- | Page not found |
29
- | |
30
- | The page you're looking for doesn't |
31
- | exist or has been moved. |
32
- | |
33
- | [Go Home] [Contact Support] |
34
- | |
35
- | |
36
- +------------------------------------------------+
37
- ```
38
-
39
- ---
40
-
41
- ## Section Sequence
42
-
43
- ### 1. Minimal Header
44
-
45
- ```tsx
46
- <header className="flex items-center justify-between px-6 py-4">
47
- <Logo className="h-6" />
48
- <Button variant="ghost" asChild>
49
- <a href="/">Home</a>
50
- </Button>
51
- </header>
52
- ```
53
-
54
- ### 2. Error Content (centered)
55
-
56
- ```tsx
57
- <main className="flex-1 flex items-center justify-center px-4">
58
- <div className="text-center max-w-md">
59
- {/* Large status code or icon */}
60
- <div className="mb-6">
61
- <Heading level={1} size="display" className="text-8xl font-bold text-text-tertiary">
62
- {statusCode}
63
- </Heading>
64
- </div>
65
-
66
- {/* Error message */}
67
- <Heading level={2} size="section" className="mb-3">
68
- {statusCode === 404 ? "Page not found" : "Something went wrong"}
69
- </Heading>
70
- <Typography variant="p" className="text-text-secondary mb-8">
71
- {statusCode === 404
72
- ? "The page you're looking for doesn't exist or has been moved."
73
- : "We're working on fixing this. Please try again in a moment."}
74
- </Typography>
75
-
76
- {/* Recovery actions */}
77
- <div className="flex flex-col sm:flex-row gap-3 justify-center">
78
- <Button asChild>
79
- <a href="/">Go Home</a>
80
- </Button>
81
- {statusCode === 500 && (
82
- <Button variant="outline" onClick={() => window.location.reload()}>
83
- Try Again
84
- </Button>
85
- )}
86
- <Button variant="outline" asChild>
87
- <a href="/contact">Contact Support</a>
88
- </Button>
89
- </div>
90
- </div>
91
- </main>
92
- ```
93
-
94
- ---
95
-
96
- ## Animation Storyboard
97
-
98
- ```
99
- ANIMATION STORYBOARD
100
- ====================
101
- BUDGET: 250ms | SPRING: gentle | REDUCED: opacity-only
102
-
103
- T+0ms [header] Logo + home link visible (instant)
104
- T+50ms [code] Status code fades in {fadeIn, gentle}
105
- T+100ms [title] Error title fades in {fadeInUp, gentle}
106
- T+150ms [desc] Description fades in {fadeInUp, gentle}
107
- T+250ms [actions] CTA buttons fade in {fadeIn, snappy}
108
-
109
- REDUCED MOTION: All items visible immediately
110
- ```
111
-
112
- ---
113
-
114
- ## Required Components
115
-
116
- | Component | Import Path | Purpose |
117
- |-----------|-------------|---------|
118
- | `Button` | `@vadimcomanescu/nadicode-design-system/button` | Recovery CTAs |
119
- | `Typography` | `@vadimcomanescu/nadicode-design-system/typography` | Status code, title, description |
120
- | `Logo` | `@vadimcomanescu/nadicode-design-system/logo` | Brand mark |
121
-
122
- ### Allowed (optional)
123
-
124
- `Card` (to wrap error content), `NotFoundBlock`, any single decorative icon from `@vadimcomanescu/nadicode-design-system/icons`
125
-
126
- ### Forbidden
127
-
128
- `Sidebar`, `DataTable`, charts, forms, `NavigationMenu`, heavy decorative effects, marketing blocks
129
-
130
- ---
131
-
132
- ## Required States
133
-
134
- | State | Trigger | Visual |
135
- |-------|---------|--------|
136
- | `not-found` | 404 response or `notFound()` | "Page not found" with go-home CTA |
137
- | `server-error` | 500 response or unhandled error | "Something went wrong" with retry + support CTAs |
138
-
139
- ---
140
-
141
- ## Responsive Contract
142
-
143
- | Breakpoint | Layout | Buttons |
144
- |------------|--------|---------|
145
- | Mobile | Centered, full width, px-4 | Stacked vertically |
146
- | `sm:` | Centered, max-w-md | Inline row |
147
-
148
- ---
149
-
150
- ## Styling Rules
151
-
152
- - Status code: `text-8xl font-bold text-text-tertiary`
153
- - Background: `bg-background min-h-dvh`
154
- - No glass effects (keep it clean and fast)
155
- - No sidebar or heavy chrome
156
- - Semantic tokens only
157
-
158
- ---
159
-
160
- ## Accessibility
161
-
162
- - Page has `role="main"` on content area
163
- - Status code is decorative (title conveys the error)
164
- - CTA buttons have descriptive text
165
- - Focus auto-moves to primary CTA
166
-
167
- ---
168
-
169
- ## Next.js Implementation
170
-
171
- ```tsx
172
- // app/not-found.tsx (404)
173
- export default function NotFound() {
174
- return <ErrorPage statusCode={404} />
175
- }
176
-
177
- // app/error.tsx (500)
178
- "use client"
179
- export default function Error({ reset }: { reset: () => void }) {
180
- return <ErrorPage statusCode={500} onRetry={reset} />
181
- }
182
- ```
183
-
184
- ---
185
-
186
- ## Reference Implementations
187
-
188
- - `src/app/not-found.tsx`
189
- - `src/components/blocks/NotFoundBlock.tsx`
190
-
191
- ---
192
-
193
- ## Verification
194
-
195
- ```bash
196
- npx tsc --noEmit
197
- npm run lint
198
- npm run test
199
- ```
@@ -1,293 +0,0 @@
1
- # Recipe: Marketing Landing
2
-
3
- Public home/landing page with hero, features, social proof, and conversion CTAs.
4
-
5
- ## Route Pattern
6
-
7
- `/` or `/landing`
8
-
9
- ## Shell
10
-
11
- `marketing-shell` (HeaderBlock + FooterBlock)
12
-
13
- ---
14
-
15
- ## Layout Blueprint (Desktop)
16
-
17
- ```
18
- +------------------------------------------------+
19
- | HeaderBlock: Logo [Nav links] [CTA Button] |
20
- +------------------------------------------------+
21
- | |
22
- | HERO SECTION |
23
- | Headline (centered or split) |
24
- | Subtitle |
25
- | [Primary CTA] [Secondary CTA] |
26
- | Hero visual / ShaderBackground |
27
- | |
28
- +------------------------------------------------+
29
- | Logo Cloud: partner/client logos (InfiniteSlider)|
30
- +------------------------------------------------+
31
- | |
32
- | FEATURES GRID (3-col) |
33
- | +----------+ +----------+ +----------+ |
34
- | | Feature 1| | Feature 2| | Feature 3| |
35
- | +----------+ +----------+ +----------+ |
36
- | +----------+ +----------+ +----------+ |
37
- | | Feature 4| | Feature 5| | Feature 6| |
38
- | +----------+ +----------+ +----------+ |
39
- | |
40
- +------------------------------------------------+
41
- | SOCIAL PROOF / STATS |
42
- | +------+ +------+ +------+ +------+ |
43
- | | Stat | | Stat | | Stat | | Stat | |
44
- | +------+ +------+ +------+ +------+ |
45
- +------------------------------------------------+
46
- | |
47
- | TESTIMONIALS (carousel or grid) |
48
- | |
49
- +------------------------------------------------+
50
- | PRICING TEASER |
51
- | See plans / Compare options |
52
- +------------------------------------------------+
53
- | |
54
- | FAQ (Accordion) |
55
- | |
56
- +------------------------------------------------+
57
- | FINAL CTA SECTION |
58
- | Headline + [CTA Button] |
59
- +------------------------------------------------+
60
- | FooterBlock: columns + social + legal |
61
- +------------------------------------------------+
62
- ```
63
-
64
- ---
65
-
66
- ## Section Sequence
67
-
68
- ### 1. Header
69
-
70
- ```tsx
71
- <HeaderBlock logo={<Logo />} links={navLinks} actions={<Button>Get Started</Button>} />
72
- ```
73
-
74
- ### 2. Hero Section
75
-
76
- ```tsx
77
- <section className="relative py-24 md:py-32 overflow-hidden">
78
- <ShaderBackground shader="meshGradient" intent="hero" opacity={0.25} />
79
- <div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
80
- <motion.div variants={heroStagger.container} initial="hidden" animate="visible">
81
- <motion.div variants={heroStagger.child}>
82
- <Badge variant="outline" className="mb-4">New: Feature X</Badge>
83
- </motion.div>
84
- <motion.h1 variants={heroStagger.child} className="text-4xl md:text-6xl font-bold tracking-tight">
85
- {headline}
86
- </motion.h1>
87
- <motion.p variants={heroStagger.child} className="mt-6 text-lg md:text-xl text-text-secondary max-w-2xl mx-auto">
88
- {subtitle}
89
- </motion.p>
90
- <motion.div variants={heroStagger.child} className="mt-8 flex flex-col sm:flex-row gap-4 justify-center">
91
- <Button size="lg">Get Started</Button>
92
- <Button size="lg" variant="outline">Learn More</Button>
93
- </motion.div>
94
- </motion.div>
95
- </div>
96
- </section>
97
- ```
98
-
99
- ### 3. Logo Cloud
100
-
101
- ```tsx
102
- <section className="py-12 border-y border-border-subtle">
103
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
104
- <Typography variant="small" className="text-center text-text-tertiary mb-6">
105
- Trusted by industry leaders
106
- </Typography>
107
- <LogoCloud logos={partnerLogos} /> {/* or InfiniteSlider */}
108
- </div>
109
- </section>
110
- ```
111
-
112
- ### 4. Features Grid
113
-
114
- ```tsx
115
- <ScrollFadeIn>
116
- <section className="py-16 md:py-24">
117
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
118
- <div className="text-center mb-12">
119
- <Heading level={2} size="section" >Everything you need</Heading>
120
- <Typography variant="lead" className="mt-4 text-text-secondary">
121
- Section description
122
- </Typography>
123
- </div>
124
- <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 lg:gap-8">
125
- {features.map(f => <FeatureBlock key={f.id} {...f} />)}
126
- </div>
127
- </div>
128
- </section>
129
- </ScrollFadeIn>
130
- ```
131
-
132
- ### 5. Social Proof / Stats
133
-
134
- ```tsx
135
- <ScrollFadeIn>
136
- <section className="py-16 md:py-24 bg-muted">
137
- <StatsMarketingBlock stats={stats} />
138
- </section>
139
- </ScrollFadeIn>
140
- ```
141
-
142
- ### 6. Testimonials
143
-
144
- ```tsx
145
- <ScrollFadeIn>
146
- <section className="py-16 md:py-24">
147
- <TestimonialsBlock testimonials={testimonials} />
148
- </section>
149
- </ScrollFadeIn>
150
- ```
151
-
152
- ### 7. FAQ
153
-
154
- ```tsx
155
- <ScrollFadeIn>
156
- <section className="py-16 md:py-24">
157
- <FAQBlock items={faqItems} />
158
- </section>
159
- </ScrollFadeIn>
160
- ```
161
-
162
- ### 8. Final CTA
163
-
164
- ```tsx
165
- <ScrollFadeIn>
166
- <section className="py-16 md:py-24">
167
- <CallToActionBlock
168
- title="Ready to get started?"
169
- description="Join thousands of teams already using our platform."
170
- action={<Button size="lg">Start Free Trial</Button>}
171
- />
172
- </section>
173
- </ScrollFadeIn>
174
- ```
175
-
176
- ### 9. Footer
177
-
178
- ```tsx
179
- <FooterBlock columns={footerColumns} social={socialLinks} legal={legalLinks} />
180
- ```
181
-
182
- ---
183
-
184
- ## Animation Storyboard
185
-
186
- ```
187
- ANIMATION STORYBOARD
188
- ====================
189
- BUDGET: 1000ms (above-fold) | SPRING: dramatic (hero), snappy (rest) | REDUCED: opacity-only
190
-
191
- T+0ms [nav] Header visible (instant)
192
- T+100ms [badge] Announcement badge {fadeIn, snappy}
193
- T+200ms [headline] Hero headline {fadeInUp, dramatic}
194
- T+350ms [subtitle] Hero subtitle {fadeInUp, dramatic}
195
- T+500ms [ctas] CTA buttons {fadeInUp, dramatic}
196
- T+700ms [shader] Hero visual/shader appears {fadeIn, gentle}
197
- T+900ms [logos] Logo cloud fades in {fadeIn, snappy}
198
-
199
- SCROLL-TRIGGERED (below fold):
200
- [features] ScrollFadeIn at 20% visible {fadeInUp, snappy, stagger 100ms}
201
- [stats] ScrollFadeIn at 20% visible {fadeInUp, snappy}
202
- [testimonials] ScrollFadeIn at 20% visible {fadeIn, gentle}
203
- [faq] ScrollFadeIn at 20% visible {fadeInUp, snappy}
204
- [cta] ScrollFadeIn at 20% visible {scaleIn, gentle}
205
-
206
- REDUCED MOTION: All items visible immediately, opacity 0->1 in 10ms
207
- ```
208
-
209
- ---
210
-
211
- ## Required Components
212
-
213
- | Component | Import Path | Purpose |
214
- |-----------|-------------|---------|
215
- | `HeaderBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Site navigation |
216
- | `FooterBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Site footer |
217
- | `Button` | `@vadimcomanescu/nadicode-design-system/button` | CTAs |
218
- | `Badge` | `@vadimcomanescu/nadicode-design-system/badge` | Announcement tag |
219
- | `Typography` | `@vadimcomanescu/nadicode-design-system/typography` | Headings, body text |
220
- | `FeatureBlock` / `FeatureGridBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Feature showcase |
221
- | `FAQBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | FAQ accordion |
222
- | `CallToActionBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Final CTA |
223
- | `TestimonialsBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Social proof |
224
- | `LogoCloud` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Partner logos |
225
- | `StatsMarketingBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Key metrics |
226
- | `ScrollFadeIn` | `@vadimcomanescu/nadicode-design-system/scroll-fade-in` | Below-fold animations |
227
- | `ShaderBackground` | `@vadimcomanescu/nadicode-design-system/shader-background` | Hero background |
228
-
229
- ### Allowed (optional)
230
-
231
- `HeroBlock`, `HeroSectionBlock`, `SocialProofBlock`, `ComparisonBlock`, `BannerBlock`, `AnnouncementBanner`, `InfiniteSlider`, `AnimatedGradientText`, `CountingNumber`, `PricingBlock`, `BentoGrid`, decorative effects
232
-
233
- ### Forbidden
234
-
235
- `Sidebar`, `DataTable`, `Form`, `FormWizard`, `AgentTeamPanel`, agentic components, `SettingsLayout`
236
-
237
- ---
238
-
239
- ## Required States
240
-
241
- | State | Trigger | Visual |
242
- |-------|---------|--------|
243
- | `default` | Page loaded | Full marketing content |
244
- | `mobile-navigation` | Hamburger tap | Mobile nav drawer/sheet |
245
-
246
- ---
247
-
248
- ## Responsive Contract
249
-
250
- | Breakpoint | Hero | Features | Stats | Content Width |
251
- |------------|------|----------|-------|---------------|
252
- | Mobile | Stacked, text-center | 1 col | 2 col | px-4 |
253
- | `sm:` | Stacked, text-center | 2 col | 2 col | px-6, max-w-7xl |
254
- | `lg:` | Centered or split | 3 col | 4 col | px-8, max-w-7xl |
255
-
256
- ---
257
-
258
- ## Styling Rules
259
-
260
- - Hero: `glass-floating` for elevated hero cards, `ShaderBackground` for ambient
261
- - Section backgrounds alternate: `bg-background` and `bg-muted`
262
- - CTAs use `Button` with `size="lg"` for prominence
263
- - Logo cloud uses muted/grayscale logos with hover color reveal
264
- - No raw palette colors; semantic tokens only
265
-
266
- ---
267
-
268
- ## Accessibility
269
-
270
- - Hero heading is `<h1>`, section headings are `<h2>`
271
- - Skip-nav link to main content (`SkipNav` component)
272
- - All images have alt text
273
- - CTA buttons have descriptive text (not just "Click here")
274
- - Mobile nav is keyboard accessible with focus trap
275
-
276
- ---
277
-
278
- ## Reference Implementations
279
-
280
- - `src/app/landing/page.tsx`
281
- - `src/components/blocks/HeroBlock.tsx`
282
- - `src/components/blocks/FeatureGridBlock.tsx`
283
-
284
- ---
285
-
286
- ## Verification
287
-
288
- ```bash
289
- npx tsc --noEmit
290
- npm run lint
291
- npm run test
292
- npx vitest run src/test/css-variable-usage.test.ts
293
- ```
@@ -1,156 +0,0 @@
1
- # Recipe: Marketing Shell
2
-
3
- Shared marketing layout providing scroll-aware header, main content area, and footer.
4
-
5
- ## Route Pattern
6
-
7
- `(marketing)` route group layout
8
-
9
- ## Shell
10
-
11
- `marketing-shell` (this IS the shell definition)
12
-
13
- ---
14
-
15
- ## Layout Blueprint (Desktop)
16
-
17
- ```
18
- +------------------------------------------------+
19
- | HeaderBlock: Logo [Nav links] [CTA Button] |
20
- | glass-floating · blur-on-scroll · sticky |
21
- +------------------------------------------------+
22
- | |
23
- | {children} |
24
- | (page content rendered here) |
25
- | |
26
- +------------------------------------------------+
27
- | FooterBlock: columns + social + legal |
28
- +------------------------------------------------+
29
- ```
30
-
31
- ---
32
-
33
- ## Section Sequence
34
-
35
- ### 1. Layout Shell
36
-
37
- ```tsx
38
- import { seedComponents } from '@vadimcomanescu/nadicode-design-system/catalog/components'
39
- const { HeaderBlock, FooterBlock } = seedComponents
40
-
41
- const navLinks = [
42
- { name: 'Services', href: '/services' },
43
- { name: 'About', href: '/about' },
44
- { name: 'Pricing', href: '/pricing' },
45
- { name: 'Contact', href: '/contact' },
46
- ]
47
-
48
- export default function MarketingLayout({ children }: { children: React.ReactNode }) {
49
- return (
50
- <div className="flex min-h-screen flex-col bg-background">
51
- <HeaderBlock
52
- menuItems={navLinks}
53
- loginLabel="Contact Sales"
54
- signUpLabel="Get Started"
55
- loginHref="/contact"
56
- signUpHref="/signup"
57
- />
58
- <main className="flex-1">{children}</main>
59
- <FooterBlock />
60
- </div>
61
- )
62
- }
63
- ```
64
-
65
- ---
66
-
67
- ## Animation Storyboard
68
-
69
- ```
70
- ANIMATION STORYBOARD
71
- ====================
72
- BUDGET: 200ms (header only) | SPRING: snappy | REDUCED: opacity-only
73
-
74
- T+0ms [header] Header visible immediately (instant)
75
- T+0ms [children] Page content visible (instant, page controls own animation)
76
-
77
- SCROLL-TRIGGERED:
78
- [header-blur] On scroll > 20px, glass blur transitions in {CSS transition, 200ms}
79
-
80
- REDUCED MOTION: Header visible immediately, no blur transition
81
- ```
82
-
83
- ---
84
-
85
- ## Required Components
86
-
87
- | Component | Import Path | Purpose |
88
- |-----------|-------------|---------|
89
- | `HeaderBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Site navigation with glass blur |
90
- | `FooterBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | Site footer |
91
-
92
- ### Allowed (optional)
93
-
94
- `AnnouncementBanner`, `BannerBlock`, `SkipNav`
95
-
96
- ### Forbidden
97
-
98
- `Sidebar`, `SidebarProvider`, `DataTable`, `Form`, `FormWizard`, `AgentTeamPanel`, `SettingsLayout`, `ChatLayout`
99
-
100
- ---
101
-
102
- ## Required States
103
-
104
- | State | Trigger | Visual |
105
- |-------|---------|--------|
106
- | `default` | Page loaded | Header transparent, content visible |
107
- | `scrolled` | Scroll > 20px | Header gains glass blur backdrop |
108
- | `mobile-navigation` | Hamburger tap | Mobile nav drawer/sheet |
109
-
110
- ---
111
-
112
- ## Responsive Contract
113
-
114
- | Breakpoint | Header | Content | Footer |
115
- |------------|--------|---------|--------|
116
- | Mobile | Hamburger menu | Full width, px-4 | Stacked columns |
117
- | `sm:` | Hamburger menu | px-6, max-w-7xl | 2-col grid |
118
- | `lg:` | Full nav links + CTA | px-8, max-w-7xl | 4-col grid |
119
-
120
- ---
121
-
122
- ## Styling Rules
123
-
124
- - Header uses `glass-floating` with scroll-triggered blur
125
- - Header is `sticky top-0 z-50`
126
- - Main content area uses `flex-1` to push footer to bottom
127
- - No raw palette colors; semantic tokens only
128
- - Footer uses `bg-surface` with `border-t border-border`
129
-
130
- ---
131
-
132
- ## Accessibility
133
-
134
- - Skip-nav link to main content (`SkipNav` component)
135
- - Mobile nav is keyboard accessible with focus trap
136
- - Header landmark: `<header role="banner">`
137
- - Main landmark: `<main role="main">`
138
- - Footer landmark: `<footer role="contentinfo">`
139
-
140
- ---
141
-
142
- ## Reference Implementations
143
-
144
- - `src/components/blocks/HeaderBlock.tsx`
145
- - `src/components/blocks/FooterBlock.tsx`
146
-
147
- ---
148
-
149
- ## Verification
150
-
151
- ```bash
152
- npx tsc --noEmit
153
- npm run lint
154
- npm run test
155
- npx vitest run src/test/css-variable-usage.test.ts
156
- ```