@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.
Files changed (49) hide show
  1. package/.agents/skills/seed/SKILL.md +38 -166
  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/dist/catalog/components.js +4 -4
  6. package/dist/{chunk-7A2RXKGH.js → chunk-GJ557DGH.js} +1 -1
  7. package/dist/{chunk-7XLZCXUL.js → chunk-K4U67BVG.js} +1 -1
  8. package/dist/{chunk-TUJZMJXW.js → chunk-LK2L3C7D.js} +1 -1
  9. package/dist/{chunk-DSMGCFMJ.js → chunk-POFFOUQW.js} +2 -5
  10. package/dist/components/blocks/HeroBlock.js +2 -2
  11. package/dist/components/page-kits/LandingPageKit.js +3 -3
  12. package/dist/components/page-kits/ServiceSuitePageKit.js +3 -3
  13. package/dist/components/ui/AvatarUpload.js +1 -1
  14. package/dist/components/ui/MouseEffect.js +1 -1
  15. package/eslint-rules/nadicode/config.js +1 -0
  16. package/eslint-rules/nadicode/index.js +2 -0
  17. package/eslint-rules/nadicode/rules/__tests__/require-catalog-import.test.js +111 -0
  18. package/eslint-rules/nadicode/rules/no-has-svg-selector.js +1 -1
  19. package/eslint-rules/nadicode/rules/require-catalog-import.js +59 -0
  20. package/package.json +1 -338
  21. package/scripts/ds-check.mjs +0 -10
  22. package/scripts/sync-seed-skill.mjs +0 -3
  23. package/.agents/skills/seed/contract.md +0 -104
  24. package/.agents/skills/seed/intent-map.md +0 -320
  25. package/.agents/skills/seed/recipes/agency-home.md +0 -311
  26. package/.agents/skills/seed/recipes/agents-chat.md +0 -305
  27. package/.agents/skills/seed/recipes/analytics.md +0 -253
  28. package/.agents/skills/seed/recipes/auth.md +0 -254
  29. package/.agents/skills/seed/recipes/blog-content.md +0 -307
  30. package/.agents/skills/seed/recipes/checkout.md +0 -311
  31. package/.agents/skills/seed/recipes/company-about.md +0 -276
  32. package/.agents/skills/seed/recipes/company-contact.md +0 -234
  33. package/.agents/skills/seed/recipes/crud-form.md +0 -233
  34. package/.agents/skills/seed/recipes/crud-list-detail.md +0 -230
  35. package/.agents/skills/seed/recipes/dashboard.md +0 -354
  36. package/.agents/skills/seed/recipes/digital-workers.md +0 -314
  37. package/.agents/skills/seed/recipes/error-pages.md +0 -199
  38. package/.agents/skills/seed/recipes/marketing-landing.md +0 -293
  39. package/.agents/skills/seed/recipes/marketing-shell.md +0 -156
  40. package/.agents/skills/seed/recipes/navigation-shell.md +0 -786
  41. package/.agents/skills/seed/recipes/onboarding.md +0 -258
  42. package/.agents/skills/seed/recipes/pricing.md +0 -271
  43. package/.agents/skills/seed/recipes/service-detail.md +0 -302
  44. package/.agents/skills/seed/recipes/settings.md +0 -252
  45. package/.agents/skills/seed/references/blocks.md +0 -128
  46. package/.agents/skills/seed/references/components.md +0 -287
  47. package/.agents/skills/seed/references/icons.md +0 -169
  48. package/.agents/skills/seed/references/nextjs.md +0 -49
  49. package/.agents/skills/seed/references/tokens.md +0 -88
@@ -1,354 +0,0 @@
1
- # Recipe: Dashboard
2
-
3
- Overview/summary surface with KPIs, trends, charts, and quick actions. The primary authenticated landing page for data-driven apps.
4
-
5
- ## Route Pattern
6
-
7
- `/dashboard`
8
-
9
- ## Shell
10
-
11
- `app-shell` (Sidebar + top bar + SearchCommand)
12
-
13
- ## Layout Blueprint (Desktop)
14
-
15
- ```
16
- +--+------------------------------------------------+
17
- |S | Breadcrumb: Home > Dashboard |
18
- |I | Dashboard [DateRange] [+ Action] |
19
- |D | |
20
- |E | +----------+ +----------+ +----------+ +------+ |
21
- |B | | KPI 1 | | KPI 2 | | KPI 3 | | KPI 4| |
22
- |A | | value | | value | | value | | val | |
23
- |R | | [spark] | | [spark] | | [spark] | | [sp] | |
24
- | | +----------+ +----------+ +----------+ +------+ |
25
- | | |
26
- | | +-------------------------------+ +-----------+ |
27
- | | | Primary Chart (AreaChart) | | Secondary | |
28
- | | | span-2 | | (BarChart)| |
29
- | | +-------------------------------+ +-----------+ |
30
- | | |
31
- | | +--------------------------------------------+ |
32
- | | | Activity Feed / Recent Items | |
33
- | | +--------------------------------------------+ |
34
- +--+------------------------------------------------+
35
- ```
36
-
37
- ---
38
-
39
- ## Section Sequence
40
-
41
- ### 1. Page Header
42
-
43
- ```tsx
44
- <div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
45
- <div>
46
- <Breadcrumb>
47
- <BreadcrumbList>
48
- <BreadcrumbItem><BreadcrumbLink href="/">Home</BreadcrumbLink></BreadcrumbItem>
49
- <BreadcrumbSeparator />
50
- <BreadcrumbItem><BreadcrumbLink href="/dashboard">Dashboard</BreadcrumbLink></BreadcrumbItem>
51
- </BreadcrumbList>
52
- </Breadcrumb>
53
- <Heading level={2} size="section" >Dashboard</Heading>
54
- </div>
55
- <div className="flex items-center gap-3">
56
- <DataFreshness lastUpdated={lastUpdated} isLive={false} />
57
- <DatePickerWithRange value={dateRange} onChange={setDateRange} />
58
- <Button>
59
- <PlusIcon size={16} />
60
- New Report
61
- </Button>
62
- </div>
63
- </div>
64
- ```
65
-
66
- ### 2. KPI Row
67
-
68
- Wrap in `StaggerChildren` for entrance animation. Each card includes a `Sparkline` for trend context and a `TrendIndicator` for directional change.
69
-
70
- ```tsx
71
- <StaggerChildren staggerMs={80} className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 lg:gap-6">
72
- {kpis.map(kpi => (
73
- <Card key={kpi.id} className="glass-panel p-6">
74
- <div className="flex items-center justify-between">
75
- <Typography variant="small" className="text-text-secondary">
76
- {kpi.label}
77
- </Typography>
78
- <TrendIndicator value={kpi.trend} />
79
- </div>
80
- <div className="mt-2">
81
- <SlidingNumber
82
- value={kpi.value}
83
- className="metric-value text-3xl font-bold tracking-tight tabular-nums"
84
- />
85
- </div>
86
- <div className="mt-3 h-10">
87
- <Sparkline data={kpi.sparkData} color={`var(--color-${kpi.chartColor})`} />
88
- </div>
89
- </Card>
90
- ))}
91
- </StaggerChildren>
92
- ```
93
-
94
- **Key details:**
95
- - `metric-value` CSS class provides enhanced typography (defined in `index.css`)
96
- - `tabular-nums` and `tracking-tight` keep numbers aligned across cards
97
- - `SlidingNumber` for smooth digit transitions (preferred over `CountingNumber` for live dashboards)
98
- - `Sparkline` height fixed at `h-10` (40px) for visual consistency
99
- - `TrendIndicator` renders a colored arrow + percentage, auto-styles green/red
100
-
101
- ### 3. Charts Section
102
-
103
- Use asymmetric grid (`lg:grid-cols-3`) with the primary chart spanning 2 columns.
104
-
105
- ```tsx
106
- <ScrollFadeIn threshold={0.2} spring="gentle">
107
- <div className="grid grid-cols-1 lg:grid-cols-3 gap-4 lg:gap-6">
108
- {/* Primary chart: 2/3 width */}
109
- <Card className="glass-panel p-6 lg:col-span-2">
110
- <div className="flex items-center justify-between mb-4">
111
- <Heading level={4} size="title" >Revenue Trend</Heading>
112
- <Select value={chartMetric} onValueChange={setChartMetric}>
113
- <SelectTrigger className="w-36">
114
- <SelectValue />
115
- </SelectTrigger>
116
- <SelectContent>
117
- <SelectItem value="revenue">Revenue</SelectItem>
118
- <SelectItem value="orders">Orders</SelectItem>
119
- </SelectContent>
120
- </Select>
121
- </div>
122
- <ChartContainer config={revenueChartConfig} className="h-[300px]">
123
- <AreaChart data={revenueData}>
124
- <CartesianGrid strokeDasharray="3 3" />
125
- <XAxis dataKey="date" />
126
- <YAxis />
127
- <ChartTooltip content={<ChartTooltipContent />} />
128
- <Area
129
- type="monotone"
130
- dataKey="value"
131
- fill="var(--color-chart-1)"
132
- stroke="var(--color-chart-1)"
133
- fillOpacity={0.15}
134
- />
135
- </AreaChart>
136
- </ChartContainer>
137
- </Card>
138
-
139
- {/* Secondary chart: 1/3 width */}
140
- <Card className="glass-panel p-6">
141
- <Heading level={4} size="title" className="mb-4">By Category</Heading>
142
- <ChartContainer config={categoryChartConfig} className="h-[300px]">
143
- <BarChart data={categoryData}>
144
- <CartesianGrid strokeDasharray="3 3" />
145
- <XAxis dataKey="name" />
146
- <YAxis />
147
- <ChartTooltip content={<ChartTooltipContent />} />
148
- <Bar dataKey="value" fill="var(--color-chart-2)" radius={[4, 4, 0, 0]} />
149
- </BarChart>
150
- </ChartContainer>
151
- </Card>
152
- </div>
153
- </ScrollFadeIn>
154
- ```
155
-
156
- **Key details:**
157
- - Always use `ChartContainer` with a `config` object (provides aria-label and theme-aware colors)
158
- - Always use `ChartTooltip` + `ChartTooltipContent` (never custom tooltip divs)
159
- - Chart colors reference tokens only: `var(--color-chart-1)` through `var(--color-chart-8)`
160
- - `fillOpacity={0.15}` for area charts (premium transparency, not solid fills)
161
-
162
- ### 4. Activity Section
163
-
164
- ```tsx
165
- <ScrollFadeIn threshold={0.2} spring="gentle">
166
- <Card className="glass-panel p-6">
167
- <div className="flex items-center justify-between mb-4">
168
- <Heading level={4} size="title" >Recent Activity</Heading>
169
- <Button variant="ghost" size="sm">View All</Button>
170
- </div>
171
- <Timeline
172
- items={activityItems.map(item => ({
173
- id: item.id,
174
- title: item.title,
175
- description: item.description,
176
- timestamp: item.timestamp,
177
- icon: item.icon,
178
- variant: item.variant,
179
- }))}
180
- />
181
- </Card>
182
- </ScrollFadeIn>
183
- ```
184
-
185
- ---
186
-
187
- ## Animation Storyboard
188
-
189
- ```
190
- ANIMATION STORYBOARD
191
- ====================
192
- BUDGET: 550ms | SPRING: snappy | REDUCED: opacity-only
193
-
194
- T+0ms [shell] Sidebar + top bar visible instant
195
- T+50ms [header] Page title + breadcrumb {fadeInUp, snappy}
196
- T+130ms [kpi-1] First KPI + SlidingNumber {StaggerChildren 80ms}
197
- T+210ms [kpi-2] Second KPI {StaggerChildren}
198
- T+290ms [kpi-3] Third KPI {StaggerChildren}
199
- T+370ms [kpi-4] Fourth KPI {StaggerChildren}
200
- T+450ms [charts] ChartCard section {ScrollFadeIn, gentle}
201
- T+550ms [activity] Activity section {ScrollFadeIn, gentle}
202
-
203
- DATE FILTER CHANGE:
204
- [kpis] SlidingNumber digits roll to new values built-in
205
- [sparklines] Sparkline data transitions recharts built-in
206
- [charts] Chart data transitions smoothly recharts built-in
207
-
208
- REDUCED MOTION: All items visible immediately, opacity 0->1 in 10ms
209
- ```
210
-
211
- ---
212
-
213
- ## Required Components
214
-
215
- | Component | Import Path | Purpose |
216
- |-----------|-------------|---------|
217
- | `Card` | `@vadimcomanescu/nadicode-design-system/card` | KPI cards, chart containers, activity container |
218
- | `Sparkline` | `@vadimcomanescu/nadicode-design-system/charts/sparkline` | Mini trend line in KPI cards |
219
- | `TrendIndicator` | `@vadimcomanescu/nadicode-design-system/trend-indicator` | Directional change arrow + percentage |
220
- | `Badge` | `@vadimcomanescu/nadicode-design-system/badge` | Status badges, trend labels |
221
- | `Typography` | `@vadimcomanescu/nadicode-design-system/typography` | Page title, section headers, labels |
222
- | `Breadcrumb` | `@vadimcomanescu/nadicode-design-system/breadcrumb` | Navigation context |
223
- | `Button` | `@vadimcomanescu/nadicode-design-system/button` | Primary action, view-all links |
224
- | `AreaChart` | `@vadimcomanescu/nadicode-design-system/charts/area-chart` | Primary trend chart |
225
- | `BarChart` | `@vadimcomanescu/nadicode-design-system/charts/bar-chart` | Category breakdown |
226
- | `ChartContainer` | `@vadimcomanescu/nadicode-design-system/chart` | Wraps all charts with config + aria |
227
- | `ChartTooltip` | `@vadimcomanescu/nadicode-design-system/chart` | Theme-aware tooltip |
228
- | `Timeline` | `@vadimcomanescu/nadicode-design-system/timeline` | Activity feed |
229
- | `SlidingNumber` | `@vadimcomanescu/nadicode-design-system/text-effects/sliding-number` | Animated KPI values (digit roll) |
230
- | `CountingNumber` | `@vadimcomanescu/nadicode-design-system/text-effects/counting-number` | Animated KPI values (count up) |
231
- | `DatePickerWithRange` | `@vadimcomanescu/nadicode-design-system/date-range-picker` | Time filter |
232
- | `DataFreshness` | `@vadimcomanescu/nadicode-design-system/data-freshness` | Last-updated timestamp indicator |
233
- | `Skeleton` | `@vadimcomanescu/nadicode-design-system/skeleton` | Loading state placeholders |
234
- | `Empty` | `@vadimcomanescu/nadicode-design-system/empty` | No-data state |
235
- | `StaggerChildren` | `@vadimcomanescu/nadicode-design-system/stagger-children` | KPI row entrance stagger |
236
- | `ScrollFadeIn` | `@vadimcomanescu/nadicode-design-system/scroll-fade-in` | Below-fold entrance animation |
237
- | `Select` | `@vadimcomanescu/nadicode-design-system/select` | Chart metric selector |
238
-
239
- ### Allowed (optional)
240
-
241
- `Tabs`, `Progress`, `ProgressRing`, `LineChart`, `PieChart`, `AgentMetricsCard`, `DataTable`, `Tooltip`, `StatusDot`, `HeatmapChart`
242
-
243
- ### Forbidden
244
-
245
- `HeroBlock`, `PricingBlock`, `FormWizard`, `AuthLayout`, `TextReveal`, `AnimatedGradientText`, `AuroraEffect`, `MeteorShower`
246
-
247
- ---
248
-
249
- ## Required States
250
-
251
- | State | Trigger | Visual |
252
- |-------|---------|--------|
253
- | `loading` | Initial page load, date filter change | Skeleton grid: 4 skeleton cards (match KPI card height) + 2 skeleton chart containers + skeleton timeline rows |
254
- | `empty` | Zero data (first-time user) | `Empty` with chart icon, "No data yet" title, "Connect your first integration to start seeing metrics" description, primary CTA button |
255
- | `has-data` | Data loaded | Full layout as described above |
256
- | `error` | API failure | `Alert` variant="destructive" at top of content, with retry button. KPI cards show `--` values. Charts show empty state |
257
-
258
- ### Loading Skeleton Pattern
259
-
260
- ```tsx
261
- {/* KPI skeleton row */}
262
- <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 lg:gap-6">
263
- {Array.from({ length: 4 }).map((_, i) => (
264
- <Card key={i} className="glass-panel p-6">
265
- <Skeleton className="h-4 w-24 mb-2" />
266
- <Skeleton className="h-8 w-32 mb-3" />
267
- <Skeleton className="h-10 w-full" />
268
- </Card>
269
- ))}
270
- </div>
271
-
272
- {/* Chart skeleton row */}
273
- <div className="grid grid-cols-1 lg:grid-cols-3 gap-4 lg:gap-6 mt-6">
274
- <Card className="glass-panel p-6 lg:col-span-2">
275
- <Skeleton className="h-6 w-40 mb-4" />
276
- <Skeleton className="h-[300px] w-full rounded-lg" />
277
- </Card>
278
- <Card className="glass-panel p-6">
279
- <Skeleton className="h-6 w-32 mb-4" />
280
- <Skeleton className="h-[300px] w-full rounded-lg" />
281
- </Card>
282
- </div>
283
- ```
284
-
285
- ---
286
-
287
- ## Responsive Contract
288
-
289
- | Breakpoint | KPI Grid | Chart Grid | Activity | Sparklines |
290
- |------------|----------|------------|----------|------------|
291
- | Mobile | 1 col, stacked | 1 col, stacked | Full width | Hidden (`hidden sm:block`) |
292
- | `sm:` | 2 col | 1 col | Full width | Visible |
293
- | `lg:` | 4 col | 3 col (2+1 asymmetric) | Full width | Visible |
294
-
295
- ---
296
-
297
- ## Styling Rules
298
-
299
- - KPI cards: `glass-panel` class (max 4 glass cards in KPI row)
300
- - Chart containers: `glass-panel` class (max 1 additional glass card for activity = **5 total glass budget**)
301
- - Chart colors: `chart-1` through `chart-8` tokens only, via `var(--color-chart-N)`
302
- - Metric values: `metric-value` CSS class + `text-3xl font-bold tracking-tight tabular-nums`
303
- - Labels: `text-text-secondary` for KPI labels, `text-text-tertiary` for comparison text
304
- - Values: `text-text-primary` for metric numbers
305
- - No raw palette colors (`bg-zinc-*`, `text-gray-*`, hardcoded hex)
306
- - Grid gaps: `gap-4 lg:gap-6` consistently across all grid sections
307
- - Section spacing: `mt-6` between major sections (header, KPIs, charts, activity)
308
-
309
- ### Glass Budget
310
-
311
- Dashboard pages have a **max 5 glass-panel** budget:
312
- - 4x KPI cards
313
- - 1x grouped chart/activity section (or split: 2 chart cards + 1 activity card if needed)
314
-
315
- If you need more containers, use `bg-surface` (solid) instead of `glass-panel`.
316
-
317
- ---
318
-
319
- ## Accessibility
320
-
321
- - KPI cards: each has `aria-label` describing metric name, value, and trend direction (e.g., `aria-label="Revenue: $45,231, up 12.5% from last period"`)
322
- - Charts: all wrapped in `ChartContainer` which provides `aria-label` describing the chart type and data summary
323
- - Date filter: fully keyboard accessible, announces selected range to screen readers
324
- - Activity timeline: rendered as semantic `<ol>` list markup with `role="feed"` or `aria-label="Recent activity"`
325
- - Trend indicators: include screen-reader text (e.g., `<span className="sr-only">increased by</span>`)
326
- - Color contrast: all text meets WCAG AA (4.5:1 body, 3:1 large text)
327
-
328
- ---
329
-
330
- ## Reference Implementations
331
-
332
- - `src/app/dashboard/page.tsx`
333
- - `src/components/blocks/StatsBlock.tsx` (KPI pattern)
334
- - `src/components/blocks/ChartBlock.tsx` (chart container)
335
- - `src/components/blocks/ChartCollectionBlock.tsx` (multi-chart grid)
336
- - `src/components/blocks/ActivityFeedBlock.tsx` (activity feed)
337
-
338
- ---
339
-
340
- ## Verification
341
-
342
- ```bash
343
- npx tsc --noEmit
344
- npm run lint
345
- npm run test
346
- npx vitest run src/test/css-variable-usage.test.ts
347
- ```
348
-
349
- Visual verification (mandatory): navigate to `/dashboard` in both light and dark mode. Check:
350
- - KPI values are readable (not washed out in light mode)
351
- - Glass panels have visible blur effect in dark mode
352
- - Sparklines render with correct chart-token colors
353
- - Skeleton loading state matches card dimensions
354
- - Date picker opens and is keyboard navigable
@@ -1,314 +0,0 @@
1
- # Recipe: Digital Workers
2
-
3
- "Meet your AI team" showcase page presenting AI agent profiles, capabilities, and workflow integration.
4
-
5
- ## Route Pattern
6
-
7
- `/digital-workers`, `/agents`, or `/platform`
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
- | "Meet Your AI Team" |
24
- | Subtitle: digital workers intro |
25
- | [Primary CTA] [Secondary CTA] |
26
- | |
27
- +------------------------------------------------+
28
- | |
29
- | AGENT PROFILE GRID (BentoGrid) |
30
- | +----------------+ +----------+ +----------+ |
31
- | | | | Agent 2 | | Agent 3 | |
32
- | | Agent 1 | +----------+ +----------+ |
33
- | | (featured) | +----------+ +----------+ |
34
- | | | | Agent 4 | | Agent 5 | |
35
- | +----------------+ +----------+ +----------+ |
36
- | |
37
- +------------------------------------------------+
38
- | |
39
- | AGENT DEEP DIVE #1 (alternating) |
40
- | +-------------------+ +------------------+ |
41
- | | Visual / Demo | | Features list | |
42
- | +-------------------+ +------------------+ |
43
- | |
44
- +------------------------------------------------+
45
- | |
46
- | AGENT DEEP DIVE #2 (reversed) |
47
- | +------------------+ +-------------------+ |
48
- | | Features list | | Visual / Demo | |
49
- | +------------------+ +-------------------+ |
50
- | |
51
- +------------------------------------------------+
52
- | |
53
- | WORKFLOW GRAPH |
54
- | How agents collaborate on tasks |
55
- | [Agent A] → [Agent B] → [Agent C] |
56
- | |
57
- +------------------------------------------------+
58
- | INTEGRATIONS |
59
- | Logo grid of supported platforms |
60
- +------------------------------------------------+
61
- | |
62
- | FAQ (Accordion) |
63
- | |
64
- +------------------------------------------------+
65
- | FINAL CTA SECTION |
66
- | Headline + [CTA Button] |
67
- +------------------------------------------------+
68
- | FooterBlock: columns + social + legal |
69
- +------------------------------------------------+
70
- ```
71
-
72
- ---
73
-
74
- ## Section Sequence
75
-
76
- ### 1. Header
77
-
78
- ```tsx
79
- <HeaderBlock logo={<Logo />} links={navLinks} actions={<Button>Get Started</Button>} />
80
- ```
81
-
82
- ### 2. Hero Section
83
-
84
- ```tsx
85
- <section className="relative py-24 md:py-32 overflow-hidden">
86
- <ShaderBackground shader="meshGradient" intent="hero" opacity={0.2} />
87
- <div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
88
- <motion.div variants={heroStagger.container} initial="hidden" animate="visible">
89
- <motion.div variants={heroStagger.child}>
90
- <Badge variant="outline" className="mb-4">AI-Powered Team</Badge>
91
- </motion.div>
92
- <motion.h1 variants={heroStagger.child} className="text-4xl md:text-6xl font-bold tracking-tight">
93
- Meet Your Digital Workers
94
- </motion.h1>
95
- <motion.p variants={heroStagger.child} className="mt-6 text-lg md:text-xl text-text-secondary max-w-2xl mx-auto">
96
- Autonomous AI agents that work alongside your team, 24/7.
97
- </motion.p>
98
- <motion.div variants={heroStagger.child} className="mt-8 flex flex-col sm:flex-row gap-4 justify-center">
99
- <Button size="lg">Deploy Your Team</Button>
100
- <Button size="lg" variant="outline">See Them in Action</Button>
101
- </motion.div>
102
- </motion.div>
103
- </div>
104
- </section>
105
- ```
106
-
107
- ### 3. Agent Profile Grid
108
-
109
- ```tsx
110
- <ScrollFadeIn>
111
- <section className="py-16 md:py-24">
112
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
113
- <div className="text-center mb-12">
114
- <Heading level={2} size="section" >Your AI Team</Heading>
115
- <Typography variant="lead" className="mt-4 text-text-secondary">
116
- Specialized agents for every business function
117
- </Typography>
118
- </div>
119
- <AgentProfileGridBlock agents={agents} />
120
- </div>
121
- </section>
122
- </ScrollFadeIn>
123
- ```
124
-
125
- ### 4. Agent Deep Dives (alternating FeatureBlocks)
126
-
127
- ```tsx
128
- <ScrollFadeIn>
129
- <section className="py-16 md:py-24 bg-muted">
130
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 space-y-24">
131
- {agentDetails.map((agent, i) => (
132
- <ScrollFadeIn key={agent.id}>
133
- <FeatureBlock
134
- title={agent.name}
135
- description={agent.description}
136
- features={agent.capabilities}
137
- media={agent.visual}
138
- reversed={i % 2 === 1}
139
- />
140
- </ScrollFadeIn>
141
- ))}
142
- </div>
143
- </section>
144
- </ScrollFadeIn>
145
- ```
146
-
147
- ### 5. Workflow Graph
148
-
149
- ```tsx
150
- <ScrollFadeIn>
151
- <section className="py-16 md:py-24">
152
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
153
- <div className="text-center mb-12">
154
- <Heading level={2} size="section" >How They Collaborate</Heading>
155
- <Typography variant="lead" className="mt-4 text-text-secondary">
156
- Agents work together seamlessly on complex workflows
157
- </Typography>
158
- </div>
159
- <WorkflowGraph nodes={workflowNodes} edges={workflowEdges} />
160
- </div>
161
- </section>
162
- </ScrollFadeIn>
163
- ```
164
-
165
- ### 6. Integrations
166
-
167
- ```tsx
168
- <ScrollFadeIn>
169
- <section className="py-16 md:py-24 bg-muted">
170
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
171
- <IntegrationsBlock integrations={integrations} />
172
- </div>
173
- </section>
174
- </ScrollFadeIn>
175
- ```
176
-
177
- ### 7. FAQ
178
-
179
- ```tsx
180
- <ScrollFadeIn>
181
- <section className="py-16 md:py-24">
182
- <FAQBlock items={faqItems} />
183
- </section>
184
- </ScrollFadeIn>
185
- ```
186
-
187
- ### 8. Final CTA
188
-
189
- ```tsx
190
- <ScrollFadeIn>
191
- <section className="py-16 md:py-24">
192
- <CallToActionBlock
193
- title="Ready to build your AI team?"
194
- description="Deploy your first digital worker in minutes."
195
- action={<Button size="lg">Get Started</Button>}
196
- />
197
- </section>
198
- </ScrollFadeIn>
199
- ```
200
-
201
- ### 9. Footer
202
-
203
- ```tsx
204
- <FooterBlock columns={footerColumns} social={socialLinks} legal={legalLinks} />
205
- ```
206
-
207
- ---
208
-
209
- ## Animation Storyboard
210
-
211
- ```
212
- ANIMATION STORYBOARD
213
- ====================
214
- BUDGET: 1000ms (above-fold) | SPRING: dramatic (hero), snappy (rest) | REDUCED: opacity-only
215
-
216
- T+0ms [nav] Header visible (instant)
217
- T+100ms [badge] Badge appears {fadeIn, snappy}
218
- T+200ms [headline] Hero headline {fadeInUp, dramatic}
219
- T+350ms [subtitle] Hero subtitle {fadeInUp, dramatic}
220
- T+500ms [ctas] CTA buttons {fadeInUp, dramatic}
221
- T+700ms [shader] Hero shader appears {fadeIn, gentle}
222
-
223
- SCROLL-TRIGGERED (below fold):
224
- [profiles] ScrollFadeIn at 20% visible {fadeInUp, snappy, stagger 100ms}
225
- [deep-dives] ScrollFadeIn at 20% visible {fadeInUp, snappy}
226
- [workflow] ScrollFadeIn at 20% visible {fadeIn, gentle, nodes stagger 200ms}
227
- [integrations] ScrollFadeIn at 20% visible {fadeInUp, snappy}
228
- [faq] ScrollFadeIn at 20% visible {fadeInUp, snappy}
229
- [cta] ScrollFadeIn at 20% visible {scaleIn, gentle}
230
-
231
- REDUCED MOTION: All items visible immediately, opacity 0->1 in 10ms
232
- ```
233
-
234
- ---
235
-
236
- ## Required Components
237
-
238
- | Component | Import Path | Purpose |
239
- |-----------|-------------|---------|
240
- | `HeaderBlock` | `@vadimcomanescu/nadicode-design-system/header-block` | Site navigation |
241
- | `FooterBlock` | `@vadimcomanescu/nadicode-design-system/footer-block` | Site footer |
242
- | `Button` | `@vadimcomanescu/nadicode-design-system/button` | CTAs |
243
- | `Badge` | `@vadimcomanescu/nadicode-design-system/badge` | Hero tag |
244
- | `Typography` | `@vadimcomanescu/nadicode-design-system/typography` | Headings, body text |
245
- | `ScrollFadeIn` | `@vadimcomanescu/nadicode-design-system/scroll-fade-in` | Below-fold animations |
246
- | `AgentProfileGridBlock` | `@vadimcomanescu/nadicode-design-system/agent-profile-grid-block` | Agent profile cards grid |
247
-
248
- ### Allowed (optional)
249
-
250
- `HeroBlock`, `HeroSectionBlock`, `FeatureBlock`, `FeatureGridBlock`, `WorkflowGraph`, `IntegrationsBlock`, `FAQBlock`, `CallToActionBlock`, `StatsMarketingBlock`, `Card`, `BentoGrid`, `ShaderBackground`
251
-
252
- ### Forbidden
253
-
254
- `Sidebar`, `DataTable`, `Form`, `FormWizard`, `SettingsLayout`, `ChatLayout`
255
-
256
- ---
257
-
258
- ## Required States
259
-
260
- | State | Trigger | Visual |
261
- |-------|---------|--------|
262
- | `default` | Page loaded | Full showcase content |
263
- | `mobile-navigation` | Hamburger tap | Mobile nav drawer/sheet |
264
-
265
- ---
266
-
267
- ## Responsive Contract
268
-
269
- | Breakpoint | Hero | Agent Grid | Deep Dives | Workflow | Content Width |
270
- |------------|------|------------|------------|----------|---------------|
271
- | Mobile | Stacked, text-center | 1 col | Stacked (image above) | Vertical | px-4 |
272
- | `sm:` | Stacked, text-center | 2 col | Stacked (image above) | Vertical | px-6, max-w-7xl |
273
- | `lg:` | Centered | 3 col bento | Side-by-side alternating | Horizontal | px-8, max-w-7xl |
274
-
275
- ---
276
-
277
- ## Styling Rules
278
-
279
- - Agent cards use `glass-panel` with hover elevation to `glass-floating`
280
- - Deep dive sections alternate `bg-background` and `bg-muted`
281
- - Workflow graph uses `border-accent` for active connections
282
- - Integration logos are grayscale with hover color reveal
283
- - No raw palette colors; semantic tokens only
284
-
285
- ---
286
-
287
- ## Accessibility
288
-
289
- - Hero heading is `<h1>`, section headings are `<h2>`
290
- - Agent cards are focusable with descriptive labels
291
- - Workflow graph has `aria-label` describing the flow
292
- - Skip-nav link to main content
293
- - All agent avatars/icons have alt text
294
- - Mobile nav is keyboard accessible with focus trap
295
-
296
- ---
297
-
298
- ## Reference Implementations
299
-
300
- - `src/components/blocks/AgentProfileGridBlock.tsx`
301
- - `src/components/ui/WorkflowGraph.tsx`
302
- - `src/components/blocks/FeatureBlock.tsx`
303
- - `src/components/blocks/IntegrationsBlock.tsx`
304
-
305
- ---
306
-
307
- ## Verification
308
-
309
- ```bash
310
- npx tsc --noEmit
311
- npm run lint
312
- npm run test
313
- npx vitest run src/test/css-variable-usage.test.ts
314
- ```