@vadimcomanescu/nadicode-design-system 4.0.0 → 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.
- package/.agents/skills/seed/SKILL.md +38 -166
- package/.agents/skills/seed/references/animation.md +2 -2
- package/.agents/skills/seed/references/responsive.md +1 -1
- package/README.md +2 -2
- package/dist/catalog/components.js +4 -4
- package/dist/{chunk-7A2RXKGH.js → chunk-GJ557DGH.js} +1 -1
- package/dist/{chunk-7XLZCXUL.js → chunk-K4U67BVG.js} +1 -1
- package/dist/{chunk-TUJZMJXW.js → chunk-LK2L3C7D.js} +1 -1
- package/dist/{chunk-DSMGCFMJ.js → chunk-POFFOUQW.js} +2 -5
- package/dist/components/blocks/HeroBlock.js +2 -2
- package/dist/components/page-kits/LandingPageKit.js +3 -3
- package/dist/components/page-kits/ServiceSuitePageKit.js +3 -3
- package/dist/components/ui/AvatarUpload.js +1 -1
- package/dist/components/ui/MouseEffect.js +1 -1
- package/eslint-rules/nadicode/config.js +1 -0
- package/eslint-rules/nadicode/index.js +2 -0
- package/eslint-rules/nadicode/rules/__tests__/require-catalog-import.test.js +111 -0
- package/eslint-rules/nadicode/rules/no-has-svg-selector.js +1 -1
- package/eslint-rules/nadicode/rules/require-catalog-import.js +59 -0
- package/package.json +1 -338
- package/scripts/ds-check.mjs +0 -10
- package/scripts/sync-seed-skill.mjs +0 -3
- package/.agents/skills/seed/contract.md +0 -104
- package/.agents/skills/seed/intent-map.md +0 -320
- package/.agents/skills/seed/recipes/agency-home.md +0 -311
- package/.agents/skills/seed/recipes/agents-chat.md +0 -305
- package/.agents/skills/seed/recipes/analytics.md +0 -253
- package/.agents/skills/seed/recipes/auth.md +0 -254
- package/.agents/skills/seed/recipes/blog-content.md +0 -307
- package/.agents/skills/seed/recipes/checkout.md +0 -311
- package/.agents/skills/seed/recipes/company-about.md +0 -276
- package/.agents/skills/seed/recipes/company-contact.md +0 -234
- package/.agents/skills/seed/recipes/crud-form.md +0 -233
- package/.agents/skills/seed/recipes/crud-list-detail.md +0 -230
- package/.agents/skills/seed/recipes/dashboard.md +0 -354
- package/.agents/skills/seed/recipes/digital-workers.md +0 -314
- package/.agents/skills/seed/recipes/error-pages.md +0 -199
- package/.agents/skills/seed/recipes/marketing-landing.md +0 -293
- package/.agents/skills/seed/recipes/marketing-shell.md +0 -156
- package/.agents/skills/seed/recipes/navigation-shell.md +0 -786
- package/.agents/skills/seed/recipes/onboarding.md +0 -258
- package/.agents/skills/seed/recipes/pricing.md +0 -271
- package/.agents/skills/seed/recipes/service-detail.md +0 -302
- package/.agents/skills/seed/recipes/settings.md +0 -252
- package/.agents/skills/seed/references/blocks.md +0 -128
- package/.agents/skills/seed/references/components.md +0 -287
- package/.agents/skills/seed/references/icons.md +0 -169
- package/.agents/skills/seed/references/nextjs.md +0 -49
- package/.agents/skills/seed/references/tokens.md +0 -88
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
# Recipe: Company About
|
|
2
|
-
|
|
3
|
-
About, manifesto, or team page showcasing company mission, values, team, and partnerships.
|
|
4
|
-
|
|
5
|
-
## Route Pattern
|
|
6
|
-
|
|
7
|
-
`/about`, `/manifesto`, or `/chi-siamo`
|
|
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
|
-
| MISSION HERO |
|
|
23
|
-
| Company mission statement |
|
|
24
|
-
| Subtitle: founding story or tagline |
|
|
25
|
-
| |
|
|
26
|
-
+------------------------------------------------+
|
|
27
|
-
| |
|
|
28
|
-
| VALUES GRID (3-col) |
|
|
29
|
-
| +----------+ +----------+ +----------+ |
|
|
30
|
-
| | Value 1 | | Value 2 | | Value 3 | |
|
|
31
|
-
| +----------+ +----------+ +----------+ |
|
|
32
|
-
| +----------+ +----------+ +----------+ |
|
|
33
|
-
| | Value 4 | | Value 5 | | Value 6 | |
|
|
34
|
-
| +----------+ +----------+ +----------+ |
|
|
35
|
-
| |
|
|
36
|
-
+------------------------------------------------+
|
|
37
|
-
| |
|
|
38
|
-
| TEAM SECTION |
|
|
39
|
-
| +--------+ +--------+ +--------+ +--------+ |
|
|
40
|
-
| | Member | | Member | | Member | | Member | |
|
|
41
|
-
| +--------+ +--------+ +--------+ +--------+ |
|
|
42
|
-
| |
|
|
43
|
-
+------------------------------------------------+
|
|
44
|
-
| COMPANY STATS |
|
|
45
|
-
| +------+ +------+ +------+ +------+ |
|
|
46
|
-
| | Year | | Team | | Clients| | Projects |
|
|
47
|
-
| | 2020 | | 25 | | 100+ | | 500+ | |
|
|
48
|
-
| +------+ +------+ +------+ +------+ |
|
|
49
|
-
+------------------------------------------------+
|
|
50
|
-
| PARTNERS / LOGO CLOUD |
|
|
51
|
-
| Partner and technology logos |
|
|
52
|
-
+------------------------------------------------+
|
|
53
|
-
| FINAL CTA SECTION |
|
|
54
|
-
| "Join our mission" + [CTA Button] |
|
|
55
|
-
+------------------------------------------------+
|
|
56
|
-
| FooterBlock: columns + social + legal |
|
|
57
|
-
+------------------------------------------------+
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Section Sequence
|
|
63
|
-
|
|
64
|
-
### 1. Header
|
|
65
|
-
|
|
66
|
-
```tsx
|
|
67
|
-
<HeaderBlock logo={<Logo />} links={navLinks} actions={<Button>Contact Us</Button>} />
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### 2. Mission Hero
|
|
71
|
-
|
|
72
|
-
```tsx
|
|
73
|
-
<section className="relative py-24 md:py-32 overflow-hidden">
|
|
74
|
-
<ShaderBackground shader="meshGradient" intent="hero" opacity={0.15} />
|
|
75
|
-
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
|
76
|
-
<motion.div variants={heroStagger.container} initial="hidden" animate="visible">
|
|
77
|
-
<motion.div variants={heroStagger.child}>
|
|
78
|
-
<Badge variant="outline" className="mb-4">Our Story</Badge>
|
|
79
|
-
</motion.div>
|
|
80
|
-
<motion.h1 variants={heroStagger.child} className="text-4xl md:text-6xl font-bold tracking-tight">
|
|
81
|
-
{missionStatement}
|
|
82
|
-
</motion.h1>
|
|
83
|
-
<motion.p variants={heroStagger.child} className="mt-6 text-lg md:text-xl text-text-secondary max-w-3xl mx-auto">
|
|
84
|
-
{foundingStory}
|
|
85
|
-
</motion.p>
|
|
86
|
-
</motion.div>
|
|
87
|
-
</div>
|
|
88
|
-
</section>
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### 3. Values Grid
|
|
92
|
-
|
|
93
|
-
```tsx
|
|
94
|
-
<ScrollFadeIn>
|
|
95
|
-
<section className="py-16 md:py-24">
|
|
96
|
-
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
97
|
-
<div className="text-center mb-12">
|
|
98
|
-
<Heading level={2} size="section" >Our Values</Heading>
|
|
99
|
-
<Typography variant="lead" className="mt-4 text-text-secondary">
|
|
100
|
-
The principles that guide everything we do
|
|
101
|
-
</Typography>
|
|
102
|
-
</div>
|
|
103
|
-
<FeatureGridBlock features={values} columns={3} />
|
|
104
|
-
</div>
|
|
105
|
-
</section>
|
|
106
|
-
</ScrollFadeIn>
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### 4. Team Section
|
|
110
|
-
|
|
111
|
-
```tsx
|
|
112
|
-
<ScrollFadeIn>
|
|
113
|
-
<section className="py-16 md:py-24 bg-muted">
|
|
114
|
-
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
115
|
-
<div className="text-center mb-12">
|
|
116
|
-
<Heading level={2} size="section" >Meet the Team</Heading>
|
|
117
|
-
<Typography variant="lead" className="mt-4 text-text-secondary">
|
|
118
|
-
The people behind the mission
|
|
119
|
-
</Typography>
|
|
120
|
-
</div>
|
|
121
|
-
<TeamBlock members={teamMembers} />
|
|
122
|
-
</div>
|
|
123
|
-
</section>
|
|
124
|
-
</ScrollFadeIn>
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### 5. Company Stats
|
|
128
|
-
|
|
129
|
-
```tsx
|
|
130
|
-
<ScrollFadeIn>
|
|
131
|
-
<section className="py-16 md:py-24">
|
|
132
|
-
<StatsMarketingBlock stats={companyStats} />
|
|
133
|
-
</section>
|
|
134
|
-
</ScrollFadeIn>
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### 6. Partners / Logo Cloud
|
|
138
|
-
|
|
139
|
-
```tsx
|
|
140
|
-
<ScrollFadeIn>
|
|
141
|
-
<section className="py-12 md:py-16 bg-muted">
|
|
142
|
-
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
143
|
-
<Typography variant="small" className="text-center text-text-tertiary mb-6">
|
|
144
|
-
Our partners and technology stack
|
|
145
|
-
</Typography>
|
|
146
|
-
<LogoCloud logos={partnerLogos} />
|
|
147
|
-
</div>
|
|
148
|
-
</section>
|
|
149
|
-
</ScrollFadeIn>
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### 7. Final CTA
|
|
153
|
-
|
|
154
|
-
```tsx
|
|
155
|
-
<ScrollFadeIn>
|
|
156
|
-
<section className="py-16 md:py-24">
|
|
157
|
-
<CallToActionBlock
|
|
158
|
-
title="Join our mission"
|
|
159
|
-
description="We're always looking for talented people who share our values."
|
|
160
|
-
action={<Button size="lg">Get in Touch</Button>}
|
|
161
|
-
/>
|
|
162
|
-
</section>
|
|
163
|
-
</ScrollFadeIn>
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### 8. Footer
|
|
167
|
-
|
|
168
|
-
```tsx
|
|
169
|
-
<FooterBlock columns={footerColumns} social={socialLinks} legal={legalLinks} />
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## Animation Storyboard
|
|
175
|
-
|
|
176
|
-
```
|
|
177
|
-
ANIMATION STORYBOARD
|
|
178
|
-
====================
|
|
179
|
-
BUDGET: 800ms (above-fold) | SPRING: dramatic (hero), snappy (rest) | REDUCED: opacity-only
|
|
180
|
-
|
|
181
|
-
T+0ms [nav] Header visible (instant)
|
|
182
|
-
T+100ms [badge] Story badge {fadeIn, snappy}
|
|
183
|
-
T+200ms [headline] Mission statement {fadeInUp, dramatic}
|
|
184
|
-
T+400ms [subtitle] Founding story {fadeInUp, dramatic}
|
|
185
|
-
T+600ms [shader] Hero shader appears {fadeIn, gentle}
|
|
186
|
-
|
|
187
|
-
SCROLL-TRIGGERED (below fold):
|
|
188
|
-
[values] ScrollFadeIn at 20% visible {fadeInUp, snappy, stagger 100ms}
|
|
189
|
-
[team] ScrollFadeIn at 20% visible {fadeInUp, snappy, stagger 80ms}
|
|
190
|
-
[stats] ScrollFadeIn at 20% visible {fadeInUp, snappy}
|
|
191
|
-
[partners] ScrollFadeIn at 20% visible {fadeIn, gentle}
|
|
192
|
-
[cta] ScrollFadeIn at 20% visible {scaleIn, gentle}
|
|
193
|
-
|
|
194
|
-
REDUCED MOTION: All items visible immediately, opacity 0->1 in 10ms
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## Required Components
|
|
200
|
-
|
|
201
|
-
| Component | Import Path | Purpose |
|
|
202
|
-
|-----------|-------------|---------|
|
|
203
|
-
| `HeaderBlock` | `@vadimcomanescu/nadicode-design-system/header-block` | Site navigation |
|
|
204
|
-
| `FooterBlock` | `@vadimcomanescu/nadicode-design-system/footer-block` | Site footer |
|
|
205
|
-
| `Button` | `@vadimcomanescu/nadicode-design-system/button` | CTAs |
|
|
206
|
-
| `Badge` | `@vadimcomanescu/nadicode-design-system/badge` | Hero tag |
|
|
207
|
-
| `Typography` | `@vadimcomanescu/nadicode-design-system/typography` | Headings, body text |
|
|
208
|
-
| `ScrollFadeIn` | `@vadimcomanescu/nadicode-design-system/scroll-fade-in` | Below-fold animations |
|
|
209
|
-
| `TeamBlock` | `@vadimcomanescu/nadicode-design-system/team-block` | Team member grid |
|
|
210
|
-
|
|
211
|
-
### Allowed (optional)
|
|
212
|
-
|
|
213
|
-
`FeatureBlock`, `FeatureGridBlock`, `StatsMarketingBlock`, `LogoCloud`, `CallToActionBlock`, `HeroBlock`, `HeroSectionBlock`, `Card`, `ShaderBackground`, `TestimonialsBlock`
|
|
214
|
-
|
|
215
|
-
### Forbidden
|
|
216
|
-
|
|
217
|
-
`Sidebar`, `DataTable`, `Form`, `FormWizard`, `AgentTeamPanel`, `PricingBlock`, `SettingsLayout`, `ChatLayout`
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Required States
|
|
222
|
-
|
|
223
|
-
| State | Trigger | Visual |
|
|
224
|
-
|-------|---------|--------|
|
|
225
|
-
| `default` | Page loaded | Full about page content |
|
|
226
|
-
| `mobile-navigation` | Hamburger tap | Mobile nav drawer/sheet |
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
## Responsive Contract
|
|
231
|
-
|
|
232
|
-
| Breakpoint | Hero | Values | Team | Stats | Content Width |
|
|
233
|
-
|------------|------|--------|------|-------|---------------|
|
|
234
|
-
| Mobile | Stacked, text-center | 1 col | 1 col | 2 col | px-4 |
|
|
235
|
-
| `sm:` | Stacked, text-center | 2 col | 2 col | 2 col | px-6, max-w-7xl |
|
|
236
|
-
| `lg:` | Centered | 3 col | 4 col | 4 col | px-8, max-w-7xl |
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
## Styling Rules
|
|
241
|
-
|
|
242
|
-
- Mission hero uses `ShaderBackground` with low opacity for subtle ambient
|
|
243
|
-
- Value cards use `glass-panel` with icon + heading + description
|
|
244
|
-
- Team cards use circular avatar, name, role, and social links
|
|
245
|
-
- Section backgrounds alternate: `bg-background` and `bg-muted`
|
|
246
|
-
- Partner logos are grayscale with hover color reveal
|
|
247
|
-
- No raw palette colors; semantic tokens only
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
## Accessibility
|
|
252
|
-
|
|
253
|
-
- Hero heading is `<h1>`, section headings are `<h2>`
|
|
254
|
-
- Skip-nav link to main content
|
|
255
|
-
- Team member images have alt text with name and role
|
|
256
|
-
- Social links have aria-labels
|
|
257
|
-
- Mobile nav is keyboard accessible with focus trap
|
|
258
|
-
|
|
259
|
-
---
|
|
260
|
-
|
|
261
|
-
## Reference Implementations
|
|
262
|
-
|
|
263
|
-
- `src/components/blocks/TeamBlock.tsx`
|
|
264
|
-
- `src/components/blocks/FeatureGridBlock.tsx`
|
|
265
|
-
- `src/components/blocks/StatsMarketingBlock.tsx`
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## Verification
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
npx tsc --noEmit
|
|
273
|
-
npm run lint
|
|
274
|
-
npm run test
|
|
275
|
-
npx vitest run src/test/css-variable-usage.test.ts
|
|
276
|
-
```
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
# Recipe: Company Contact
|
|
2
|
-
|
|
3
|
-
Contact page with form, company information, and FAQ.
|
|
4
|
-
|
|
5
|
-
## Route Pattern
|
|
6
|
-
|
|
7
|
-
`/contact` or `/contatti`
|
|
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
|
-
| HEADING |
|
|
23
|
-
| "Get in Touch" |
|
|
24
|
-
| Subtitle |
|
|
25
|
-
| |
|
|
26
|
-
+------------------------------------------------+
|
|
27
|
-
| |
|
|
28
|
-
| CONTACT BLOCK (2-col) |
|
|
29
|
-
| +-------------------+ +------------------+ |
|
|
30
|
-
| | Contact form | | Company info | |
|
|
31
|
-
| | Name, Email, | | Address, phone, | |
|
|
32
|
-
| | Subject, Message | | email, map | |
|
|
33
|
-
| | [Submit] | | | |
|
|
34
|
-
| +-------------------+ +------------------+ |
|
|
35
|
-
| |
|
|
36
|
-
+------------------------------------------------+
|
|
37
|
-
| |
|
|
38
|
-
| INFO CARDS (3-col) |
|
|
39
|
-
| +----------+ +----------+ +----------+ |
|
|
40
|
-
| | Email | | Phone | | Office | |
|
|
41
|
-
| +----------+ +----------+ +----------+ |
|
|
42
|
-
| |
|
|
43
|
-
+------------------------------------------------+
|
|
44
|
-
| |
|
|
45
|
-
| FAQ (Accordion) |
|
|
46
|
-
| |
|
|
47
|
-
+------------------------------------------------+
|
|
48
|
-
| FooterBlock: columns + social + legal |
|
|
49
|
-
+------------------------------------------------+
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## Section Sequence
|
|
55
|
-
|
|
56
|
-
### 1. Header
|
|
57
|
-
|
|
58
|
-
```tsx
|
|
59
|
-
<HeaderBlock logo={<Logo />} links={navLinks} actions={<Button>Book a Call</Button>} />
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### 2. Heading
|
|
63
|
-
|
|
64
|
-
```tsx
|
|
65
|
-
<section className="py-16 md:py-24">
|
|
66
|
-
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
|
67
|
-
<motion.div variants={heroStagger.container} initial="hidden" animate="visible">
|
|
68
|
-
<motion.h1 variants={heroStagger.child} className="text-4xl md:text-5xl font-bold tracking-tight">
|
|
69
|
-
Get in Touch
|
|
70
|
-
</motion.h1>
|
|
71
|
-
<motion.p variants={heroStagger.child} className="mt-4 text-lg text-text-secondary max-w-xl mx-auto">
|
|
72
|
-
Have a question or want to work together? We'd love to hear from you.
|
|
73
|
-
</motion.p>
|
|
74
|
-
</motion.div>
|
|
75
|
-
</div>
|
|
76
|
-
</section>
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### 3. Contact Block
|
|
80
|
-
|
|
81
|
-
```tsx
|
|
82
|
-
<ScrollFadeIn>
|
|
83
|
-
<section className="pb-16 md:pb-24">
|
|
84
|
-
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
85
|
-
<ContactBlock
|
|
86
|
-
fields={contactFields}
|
|
87
|
-
companyInfo={companyInfo}
|
|
88
|
-
onSubmit={handleSubmit}
|
|
89
|
-
/>
|
|
90
|
-
</div>
|
|
91
|
-
</section>
|
|
92
|
-
</ScrollFadeIn>
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### 4. Info Cards
|
|
96
|
-
|
|
97
|
-
```tsx
|
|
98
|
-
<ScrollFadeIn>
|
|
99
|
-
<section className="py-16 md:py-24 bg-muted">
|
|
100
|
-
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
101
|
-
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
102
|
-
{contactChannels.map(channel => (
|
|
103
|
-
<Card key={channel.id} className="glass-panel p-6 text-center">
|
|
104
|
-
<channel.icon className="mx-auto mb-4 h-8 w-8 text-accent" />
|
|
105
|
-
<Heading level={4} size="title" >{channel.label}</Heading>
|
|
106
|
-
<Typography variant="body" className="mt-2 text-text-secondary">
|
|
107
|
-
{channel.value}
|
|
108
|
-
</Typography>
|
|
109
|
-
</Card>
|
|
110
|
-
))}
|
|
111
|
-
</div>
|
|
112
|
-
</div>
|
|
113
|
-
</section>
|
|
114
|
-
</ScrollFadeIn>
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### 5. FAQ
|
|
118
|
-
|
|
119
|
-
```tsx
|
|
120
|
-
<ScrollFadeIn>
|
|
121
|
-
<section className="py-16 md:py-24">
|
|
122
|
-
<FAQBlock items={contactFaqItems} />
|
|
123
|
-
</section>
|
|
124
|
-
</ScrollFadeIn>
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### 6. Footer
|
|
128
|
-
|
|
129
|
-
```tsx
|
|
130
|
-
<FooterBlock columns={footerColumns} social={socialLinks} legal={legalLinks} />
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## Animation Storyboard
|
|
136
|
-
|
|
137
|
-
```
|
|
138
|
-
ANIMATION STORYBOARD
|
|
139
|
-
====================
|
|
140
|
-
BUDGET: 600ms (above-fold) | SPRING: dramatic (heading), snappy (rest) | REDUCED: opacity-only
|
|
141
|
-
|
|
142
|
-
T+0ms [nav] Header visible (instant)
|
|
143
|
-
T+100ms [headline] Page heading {fadeInUp, dramatic}
|
|
144
|
-
T+250ms [subtitle] Subtitle {fadeInUp, dramatic}
|
|
145
|
-
|
|
146
|
-
SCROLL-TRIGGERED (below fold):
|
|
147
|
-
[contact] ScrollFadeIn at 20% visible {fadeInUp, snappy}
|
|
148
|
-
[info-cards] ScrollFadeIn at 20% visible {fadeInUp, snappy, stagger 100ms}
|
|
149
|
-
[faq] ScrollFadeIn at 20% visible {fadeInUp, snappy}
|
|
150
|
-
|
|
151
|
-
REDUCED MOTION: All items visible immediately, opacity 0->1 in 10ms
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## Required Components
|
|
157
|
-
|
|
158
|
-
| Component | Import Path | Purpose |
|
|
159
|
-
|-----------|-------------|---------|
|
|
160
|
-
| `HeaderBlock` | `@vadimcomanescu/nadicode-design-system/header-block` | Site navigation |
|
|
161
|
-
| `FooterBlock` | `@vadimcomanescu/nadicode-design-system/footer-block` | Site footer |
|
|
162
|
-
| `Button` | `@vadimcomanescu/nadicode-design-system/button` | CTAs and form submit |
|
|
163
|
-
| `ScrollFadeIn` | `@vadimcomanescu/nadicode-design-system/scroll-fade-in` | Below-fold animations |
|
|
164
|
-
| `ContactBlock` | `@vadimcomanescu/nadicode-design-system/contact-block` | Contact form + company info |
|
|
165
|
-
|
|
166
|
-
### Allowed (optional)
|
|
167
|
-
|
|
168
|
-
`FAQBlock`, `Card`, `FeatureGridBlock`, `Badge`, `HeroBlock`, `HeroSectionBlock`, `CallToActionBlock`, `Typography`
|
|
169
|
-
|
|
170
|
-
### Forbidden
|
|
171
|
-
|
|
172
|
-
`Sidebar`, `DataTable`, `FormWizard`, `AgentTeamPanel`, `PricingBlock`, `SettingsLayout`, `ChatLayout`
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## Required States
|
|
177
|
-
|
|
178
|
-
| State | Trigger | Visual |
|
|
179
|
-
|-------|---------|--------|
|
|
180
|
-
| `default` | Page loaded | Form ready for input |
|
|
181
|
-
| `form-submitting` | Form submit | Button shows loading spinner, fields disabled |
|
|
182
|
-
| `form-success` | Submission succeeds | Success toast/message, form resets |
|
|
183
|
-
| `form-error` | Submission fails | Error toast/message, form retains values |
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## Responsive Contract
|
|
188
|
-
|
|
189
|
-
| Breakpoint | Heading | Contact Block | Info Cards | Content Width |
|
|
190
|
-
|------------|---------|---------------|------------|---------------|
|
|
191
|
-
| Mobile | text-center | Stacked (form above info) | 1 col | px-4 |
|
|
192
|
-
| `sm:` | text-center | Stacked (form above info) | 2 col | px-6, max-w-7xl |
|
|
193
|
-
| `lg:` | text-center | Side-by-side (form left, info right) | 3 col | px-8, max-w-7xl |
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## Styling Rules
|
|
198
|
-
|
|
199
|
-
- Contact form container uses `glass-panel` for visual depth
|
|
200
|
-
- Info cards use `glass-panel` with centered icon layout
|
|
201
|
-
- Section backgrounds alternate: `bg-background` and `bg-muted`
|
|
202
|
-
- Form inputs use standard Seed Input/Textarea components
|
|
203
|
-
- Submit button uses `Button` with loading state
|
|
204
|
-
- No raw palette colors; semantic tokens only
|
|
205
|
-
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## Accessibility
|
|
209
|
-
|
|
210
|
-
- Page heading is `<h1>`, section headings are `<h2>`
|
|
211
|
-
- Form fields have visible stacked labels (no floating labels)
|
|
212
|
-
- Required fields marked with `aria-required="true"`
|
|
213
|
-
- Form errors announced via `aria-live="polite"` region
|
|
214
|
-
- Submit button disabled during submission with `aria-disabled`
|
|
215
|
-
- Skip-nav link to main content
|
|
216
|
-
- Mobile nav is keyboard accessible with focus trap
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## Reference Implementations
|
|
221
|
-
|
|
222
|
-
- `src/components/blocks/ContactBlock.tsx`
|
|
223
|
-
- `src/components/blocks/FAQBlock.tsx`
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## Verification
|
|
228
|
-
|
|
229
|
-
```bash
|
|
230
|
-
npx tsc --noEmit
|
|
231
|
-
npm run lint
|
|
232
|
-
npm run test
|
|
233
|
-
npx vitest run src/test/css-variable-usage.test.ts
|
|
234
|
-
```
|