@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.
- package/.agents/skills/seed/SKILL.md +34 -163
- package/.agents/skills/seed/references/animation.md +2 -2
- package/.agents/skills/seed/references/responsive.md +1 -1
- package/README.md +2 -2
- package/eslint-rules/nadicode/rules/no-has-svg-selector.js +1 -1
- package/package.json +1 -2
- package/scripts/ds-check.mjs +0 -10
- package/scripts/sync-seed-skill.mjs +0 -3
- package/.agents/skills/seed/contract.md +0 -110
- 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 -787
- 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,311 +0,0 @@
|
|
|
1
|
-
# Recipe: Checkout
|
|
2
|
-
|
|
3
|
-
Payment flow with Stripe integration, order summary, and success state.
|
|
4
|
-
|
|
5
|
-
## Route Patterns
|
|
6
|
-
|
|
7
|
-
- `/checkout`
|
|
8
|
-
- `/checkout/success`
|
|
9
|
-
|
|
10
|
-
## Shell
|
|
11
|
-
|
|
12
|
-
`marketing-shell` (minimal: logo + trust badge, no full nav to avoid abandonment)
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Layout Blueprint (Desktop)
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
+------------------------------------------------+
|
|
20
|
-
| Logo Secure checkout [Back to cart]|
|
|
21
|
-
+------------------------------------------------+
|
|
22
|
-
| |
|
|
23
|
-
| +-------------------------+ +-------------+ |
|
|
24
|
-
| | Checkout Form | | Order | |
|
|
25
|
-
| | | | Summary | |
|
|
26
|
-
| | Contact Information | | | |
|
|
27
|
-
| | [Email input] | | Item 1 $29 | |
|
|
28
|
-
| | | | Item 2 $49 | |
|
|
29
|
-
| | Payment | | | |
|
|
30
|
-
| | [Stripe Card Element] | | Subtotal $78| |
|
|
31
|
-
| | | | Tax $8 | |
|
|
32
|
-
| | Billing Address | | ----------- | |
|
|
33
|
-
| | [Address fields] | | Total $86| |
|
|
34
|
-
| | | | | |
|
|
35
|
-
| | [Pay $86.00] | | [Coupon] | |
|
|
36
|
-
| +-------------------------+ +-------------+ |
|
|
37
|
-
| |
|
|
38
|
-
| [Stripe] [SSL] [Money-back guarantee badges] |
|
|
39
|
-
+------------------------------------------------+
|
|
40
|
-
|
|
41
|
-
Success Page:
|
|
42
|
-
+------------------------------------------------+
|
|
43
|
-
| Logo [Home] |
|
|
44
|
-
+------------------------------------------------+
|
|
45
|
-
| |
|
|
46
|
-
| [ConfettiBurst] |
|
|
47
|
-
| [SuccessCheck] |
|
|
48
|
-
| |
|
|
49
|
-
| Payment successful! |
|
|
50
|
-
| Order #12345 confirmed. |
|
|
51
|
-
| |
|
|
52
|
-
| We've sent a confirmation to your email. |
|
|
53
|
-
| |
|
|
54
|
-
| [Go to Dashboard] [View Receipt] |
|
|
55
|
-
| |
|
|
56
|
-
+------------------------------------------------+
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## Section Sequence
|
|
62
|
-
|
|
63
|
-
### 1. Minimal Header
|
|
64
|
-
|
|
65
|
-
```tsx
|
|
66
|
-
<header className="flex items-center justify-between px-6 py-4 border-b border-border">
|
|
67
|
-
<Logo className="h-6" />
|
|
68
|
-
<div className="flex items-center gap-2 text-text-secondary">
|
|
69
|
-
<LockIcon size={14} />
|
|
70
|
-
<Typography variant="small">Secure checkout</Typography>
|
|
71
|
-
</div>
|
|
72
|
-
<Button variant="ghost" size="sm" asChild>
|
|
73
|
-
<a href="/pricing">Back</a>
|
|
74
|
-
</Button>
|
|
75
|
-
</header>
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### 2. Checkout Form + Order Summary (2-column)
|
|
79
|
-
|
|
80
|
-
```tsx
|
|
81
|
-
<div className="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 py-8 md:py-12">
|
|
82
|
-
<div className="grid grid-cols-1 lg:grid-cols-[1fr_380px] gap-8">
|
|
83
|
-
{/* Left: Form */}
|
|
84
|
-
<div className="space-y-6">
|
|
85
|
-
{/* Contact */}
|
|
86
|
-
<Card className="glass-panel p-6">
|
|
87
|
-
<Heading level={4} size="title" className="mb-4">Contact information</Heading>
|
|
88
|
-
<div className="space-y-4">
|
|
89
|
-
<FormField>
|
|
90
|
-
<FormLabel>Email</FormLabel>
|
|
91
|
-
<FormControl><Input type="email" /></FormControl>
|
|
92
|
-
</FormField>
|
|
93
|
-
</div>
|
|
94
|
-
</Card>
|
|
95
|
-
|
|
96
|
-
{/* Payment */}
|
|
97
|
-
<Card className="glass-panel p-6">
|
|
98
|
-
<Heading level={4} size="title" className="mb-4">Payment</Heading>
|
|
99
|
-
<CheckoutForm
|
|
100
|
-
amount={totalAmount}
|
|
101
|
-
onSuccess={handlePaymentSuccess}
|
|
102
|
-
onError={handlePaymentError}
|
|
103
|
-
/>
|
|
104
|
-
</Card>
|
|
105
|
-
|
|
106
|
-
{/* Billing Address */}
|
|
107
|
-
<Card className="glass-panel p-6">
|
|
108
|
-
<Heading level={4} size="title" className="mb-4">Billing address</Heading>
|
|
109
|
-
<div className="grid grid-cols-2 gap-4">
|
|
110
|
-
<FormField>
|
|
111
|
-
<FormLabel>First name</FormLabel>
|
|
112
|
-
<FormControl><Input /></FormControl>
|
|
113
|
-
</FormField>
|
|
114
|
-
<FormField>
|
|
115
|
-
<FormLabel>Last name</FormLabel>
|
|
116
|
-
<FormControl><Input /></FormControl>
|
|
117
|
-
</FormField>
|
|
118
|
-
<FormField className="col-span-2">
|
|
119
|
-
<FormLabel>Address</FormLabel>
|
|
120
|
-
<FormControl><Input /></FormControl>
|
|
121
|
-
</FormField>
|
|
122
|
-
{/* City, State, ZIP */}
|
|
123
|
-
</div>
|
|
124
|
-
</Card>
|
|
125
|
-
</div>
|
|
126
|
-
|
|
127
|
-
{/* Right: Order Summary */}
|
|
128
|
-
<div className="lg:sticky lg:top-8 self-start">
|
|
129
|
-
<Card className="glass-panel p-6">
|
|
130
|
-
<Heading level={4} size="title" className="mb-4">Order summary</Heading>
|
|
131
|
-
<div className="space-y-3">
|
|
132
|
-
{items.map(item => (
|
|
133
|
-
<div key={item.id} className="flex items-center justify-between">
|
|
134
|
-
<Typography variant="small">{item.name}</Typography>
|
|
135
|
-
<Typography variant="small" className="font-medium">${item.price}</Typography>
|
|
136
|
-
</div>
|
|
137
|
-
))}
|
|
138
|
-
</div>
|
|
139
|
-
<Separator className="my-4" />
|
|
140
|
-
<div className="space-y-2">
|
|
141
|
-
<div className="flex justify-between text-text-secondary text-sm">
|
|
142
|
-
<span>Subtotal</span><span>${subtotal}</span>
|
|
143
|
-
</div>
|
|
144
|
-
<div className="flex justify-between text-text-secondary text-sm">
|
|
145
|
-
<span>Tax</span><span>${tax}</span>
|
|
146
|
-
</div>
|
|
147
|
-
</div>
|
|
148
|
-
<Separator className="my-4" />
|
|
149
|
-
<div className="flex justify-between font-bold text-lg">
|
|
150
|
-
<span>Total</span><span>${total}</span>
|
|
151
|
-
</div>
|
|
152
|
-
|
|
153
|
-
{/* Coupon input */}
|
|
154
|
-
<div className="mt-4">
|
|
155
|
-
<InputGroup>
|
|
156
|
-
<Input placeholder="Coupon code" />
|
|
157
|
-
<Button variant="outline">Apply</Button>
|
|
158
|
-
</InputGroup>
|
|
159
|
-
</div>
|
|
160
|
-
</Card>
|
|
161
|
-
</div>
|
|
162
|
-
</div>
|
|
163
|
-
|
|
164
|
-
{/* Trust badges */}
|
|
165
|
-
<div className="flex items-center justify-center gap-6 mt-8 text-text-tertiary">
|
|
166
|
-
<div className="flex items-center gap-1 text-sm">
|
|
167
|
-
<ShieldIcon size={14} /> SSL Encrypted
|
|
168
|
-
</div>
|
|
169
|
-
<div className="flex items-center gap-1 text-sm">
|
|
170
|
-
<RefreshIcon size={14} /> 30-day guarantee
|
|
171
|
-
</div>
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
### 3. Success Page
|
|
177
|
-
|
|
178
|
-
```tsx
|
|
179
|
-
<div className="min-h-dvh flex flex-col items-center justify-center p-6 text-center">
|
|
180
|
-
<ConfettiBurst trigger={showCelebration} />
|
|
181
|
-
<SuccessCheck className="mb-6" />
|
|
182
|
-
<Heading level={2} size="section" >Payment successful!</Heading>
|
|
183
|
-
<Typography variant="p" className="text-text-secondary mt-2 mb-2">
|
|
184
|
-
Order #{orderId} confirmed.
|
|
185
|
-
</Typography>
|
|
186
|
-
<Typography variant="small" className="text-text-tertiary mb-8">
|
|
187
|
-
We've sent a confirmation to {email}
|
|
188
|
-
</Typography>
|
|
189
|
-
<div className="flex gap-4">
|
|
190
|
-
<Button asChild><a href="/dashboard">Go to Dashboard</a></Button>
|
|
191
|
-
<Button variant="outline" asChild><a href={receiptUrl}>View Receipt</a></Button>
|
|
192
|
-
</div>
|
|
193
|
-
</div>
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## Animation Storyboard
|
|
199
|
-
|
|
200
|
-
```
|
|
201
|
-
ANIMATION STORYBOARD
|
|
202
|
-
====================
|
|
203
|
-
|
|
204
|
-
CHECKOUT PAGE:
|
|
205
|
-
BUDGET: 400ms | SPRING: snappy | REDUCED: opacity-only
|
|
206
|
-
|
|
207
|
-
T+0ms [header] Minimal header visible (instant)
|
|
208
|
-
T+50ms [contact] Contact section {fadeInUp, snappy}
|
|
209
|
-
T+150ms [payment] Payment section {fadeInUp, snappy}
|
|
210
|
-
T+250ms [address] Billing address section {fadeInUp, snappy}
|
|
211
|
-
T+100ms [summary] Order summary (right column) {fadeIn, snappy}
|
|
212
|
-
|
|
213
|
-
SUCCESS PAGE:
|
|
214
|
-
BUDGET: 500ms | SPRING: bouncy | REDUCED: check visible, no confetti
|
|
215
|
-
|
|
216
|
-
T+0ms [confetti] ConfettiBurst fires (particle animation)
|
|
217
|
-
T+100ms [check] SuccessCheck animates {scaleIn, bouncy}
|
|
218
|
-
T+300ms [title] Success title fades in {fadeInUp, gentle}
|
|
219
|
-
T+400ms [details] Order details fade in {fadeIn, snappy}
|
|
220
|
-
T+500ms [actions] Buttons fade in {fadeIn, snappy}
|
|
221
|
-
|
|
222
|
-
REDUCED MOTION: All items visible immediately, no confetti
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## Required Components
|
|
228
|
-
|
|
229
|
-
| Component | Import Path | Purpose |
|
|
230
|
-
|-----------|-------------|---------|
|
|
231
|
-
| `CheckoutForm` | `@vadimcomanescu/nadicode-design-system/checkout-form` | Stripe Elements payment |
|
|
232
|
-
| `Card` | `@vadimcomanescu/nadicode-design-system/card` | Section containers, order summary |
|
|
233
|
-
| `Input` | `@vadimcomanescu/nadicode-design-system/input` | Contact, address fields |
|
|
234
|
-
| `InputGroup` | `@vadimcomanescu/nadicode-design-system/input-group` | Coupon input + apply button |
|
|
235
|
-
| `Button` | `@vadimcomanescu/nadicode-design-system/button` | Submit, apply, navigation |
|
|
236
|
-
| `Typography` | `@vadimcomanescu/nadicode-design-system/typography` | Headings, text |
|
|
237
|
-
| `Separator` | `@vadimcomanescu/nadicode-design-system/separator` | Price dividers |
|
|
238
|
-
| `Logo` | `@vadimcomanescu/nadicode-design-system/logo` | Brand mark |
|
|
239
|
-
| `Form` / `FormField` | `@vadimcomanescu/nadicode-design-system/form` | Form management |
|
|
240
|
-
| `ConfettiBurst` | `@vadimcomanescu/nadicode-design-system/confetti-burst` | Success celebration |
|
|
241
|
-
| `SuccessCheck` | `@vadimcomanescu/nadicode-design-system/success-check` | Success checkmark |
|
|
242
|
-
| `Alert` | `@vadimcomanescu/nadicode-design-system/alert` | Payment errors |
|
|
243
|
-
| `Spinner` | `@vadimcomanescu/nadicode-design-system/spinner` | Processing state |
|
|
244
|
-
|
|
245
|
-
### Allowed (optional)
|
|
246
|
-
|
|
247
|
-
`CheckoutFormDemo`, `Label`, `Select` (country picker), `NativeSelect`, `Badge`, `Tooltip`
|
|
248
|
-
|
|
249
|
-
### Forbidden
|
|
250
|
-
|
|
251
|
-
`Sidebar`, `NavigationMenu`, `DataTable`, chart components, agentic components, decorative effects, marketing blocks
|
|
252
|
-
|
|
253
|
-
---
|
|
254
|
-
|
|
255
|
-
## Required States
|
|
256
|
-
|
|
257
|
-
| State | Trigger | Visual |
|
|
258
|
-
|-------|---------|--------|
|
|
259
|
-
| `default` | Page loaded | Form ready for input |
|
|
260
|
-
| `submitting` | Pay button clicked | Button shows Spinner, form disabled |
|
|
261
|
-
| `processing` | Stripe processing | "Processing payment..." message |
|
|
262
|
-
| `error` | Payment failed | `Alert` variant="destructive" with error + retry |
|
|
263
|
-
| `success` | Payment succeeded | Redirect to success page with celebration |
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
## Responsive Contract
|
|
268
|
-
|
|
269
|
-
| Breakpoint | Layout | Order Summary |
|
|
270
|
-
|------------|--------|---------------|
|
|
271
|
-
| Mobile | Single column, summary above form | Collapsible or stacked above form |
|
|
272
|
-
| `lg:` | 2-column: form (flex-1) + summary (380px sticky) | Sticky sidebar |
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## Styling Rules
|
|
277
|
-
|
|
278
|
-
- Form sections: `glass-panel p-6`
|
|
279
|
-
- Order summary: `glass-panel p-6`, sticky on desktop
|
|
280
|
-
- Trust badges: `text-text-tertiary`, small, centered
|
|
281
|
-
- No heavy decoration (reduce friction)
|
|
282
|
-
- Minimal navigation (prevent abandonment)
|
|
283
|
-
- Labels always stacked above inputs
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## Accessibility
|
|
288
|
-
|
|
289
|
-
- Payment form has proper labels (Stripe Elements handle internal a11y)
|
|
290
|
-
- Error messages use `role="alert"`
|
|
291
|
-
- Form fields have `autocomplete` attributes (email, name, address)
|
|
292
|
-
- Tab order: contact -> payment -> address -> submit
|
|
293
|
-
- Success page auto-announces via `aria-live`
|
|
294
|
-
|
|
295
|
-
---
|
|
296
|
-
|
|
297
|
-
## Reference Implementations
|
|
298
|
-
|
|
299
|
-
- `src/components/ui/CheckoutForm.tsx`
|
|
300
|
-
- `src/components/ui/CheckoutFormDemo.tsx`
|
|
301
|
-
|
|
302
|
-
---
|
|
303
|
-
|
|
304
|
-
## Verification
|
|
305
|
-
|
|
306
|
-
```bash
|
|
307
|
-
npx tsc --noEmit
|
|
308
|
-
npm run lint
|
|
309
|
-
npm run test
|
|
310
|
-
npx vitest run src/test/css-variable-usage.test.ts
|
|
311
|
-
```
|
|
@@ -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/catalog/components` via `seedComponents` | Site navigation |
|
|
204
|
-
| `FooterBlock` | `@vadimcomanescu/nadicode-design-system/catalog/components` via `seedComponents` | 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/catalog/components` via `seedComponents` | 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
|
-
```
|