spirewise 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -15
- package/bin/cli.js +65 -37
- package/install.sh +3 -3
- package/package.json +2 -4
- package/skills/README.md +0 -1
- package/skills/ai-agent-os-design-system/README.md +105 -0
- package/skills/ai-agent-os-design-system/SKILL.md +195 -0
- package/skills/ai-agent-os-design-system/accessibility-system.md +67 -0
- package/skills/ai-agent-os-design-system/color-system.md +102 -0
- package/skills/ai-agent-os-design-system/component-library.md +147 -0
- package/skills/ai-agent-os-design-system/design-principles.md +79 -0
- package/skills/ai-agent-os-design-system/example-page-structures.md +93 -0
- package/skills/ai-agent-os-design-system/layout-system.md +74 -0
- package/skills/ai-agent-os-design-system/motion-system.md +85 -0
- package/skills/ai-agent-os-design-system/spacing-system.md +87 -0
- package/skills/ai-agent-os-design-system/typography-system.md +91 -0
- package/skills/ai-agent-os-design-system/website-generation-rules.md +192 -0
- package/skills/ai-dark-futuristic-design-system/README.md +91 -0
- package/skills/ai-dark-futuristic-design-system/SKILL.md +179 -0
- package/skills/ai-dark-futuristic-design-system/accessibility-system.md +61 -0
- package/skills/ai-dark-futuristic-design-system/color-system.md +99 -0
- package/skills/ai-dark-futuristic-design-system/component-library.md +140 -0
- package/skills/ai-dark-futuristic-design-system/design-principles.md +66 -0
- package/skills/ai-dark-futuristic-design-system/example-page-structures.md +124 -0
- package/skills/ai-dark-futuristic-design-system/layout-system.md +85 -0
- package/skills/ai-dark-futuristic-design-system/motion-system.md +76 -0
- package/skills/ai-dark-futuristic-design-system/spacing-system.md +73 -0
- package/skills/ai-dark-futuristic-design-system/typography-system.md +89 -0
- package/skills/ai-dark-futuristic-design-system/website-generation-rules.md +220 -0
- package/skills/apple-premium-minimal-design-system/README.md +95 -0
- package/skills/apple-premium-minimal-design-system/SKILL.md +166 -0
- package/skills/apple-premium-minimal-design-system/accessibility-system.md +60 -0
- package/skills/apple-premium-minimal-design-system/color-system.md +100 -0
- package/skills/apple-premium-minimal-design-system/component-library.md +136 -0
- package/skills/apple-premium-minimal-design-system/design-principles.md +65 -0
- package/skills/apple-premium-minimal-design-system/example-page-structures.md +90 -0
- package/skills/apple-premium-minimal-design-system/layout-system.md +89 -0
- package/skills/apple-premium-minimal-design-system/motion-system.md +75 -0
- package/skills/apple-premium-minimal-design-system/spacing-system.md +73 -0
- package/skills/apple-premium-minimal-design-system/typography-system.md +86 -0
- package/skills/apple-premium-minimal-design-system/website-generation-rules.md +207 -0
- package/skills/bento-grid-design-system/README.md +97 -0
- package/skills/bento-grid-design-system/SKILL.md +185 -0
- package/skills/bento-grid-design-system/accessibility-system.md +54 -0
- package/skills/bento-grid-design-system/color-system.md +98 -0
- package/skills/bento-grid-design-system/component-library.md +138 -0
- package/skills/bento-grid-design-system/design-principles.md +72 -0
- package/skills/bento-grid-design-system/example-page-structures.md +91 -0
- package/skills/bento-grid-design-system/layout-system.md +93 -0
- package/skills/bento-grid-design-system/motion-system.md +81 -0
- package/skills/bento-grid-design-system/spacing-system.md +77 -0
- package/skills/bento-grid-design-system/typography-system.md +85 -0
- package/skills/bento-grid-design-system/website-generation-rules.md +193 -0
- package/skills/brutalist-tech-design-system/README.md +100 -0
- package/skills/brutalist-tech-design-system/SKILL.md +185 -0
- package/skills/brutalist-tech-design-system/accessibility-system.md +61 -0
- package/skills/brutalist-tech-design-system/color-system.md +101 -0
- package/skills/brutalist-tech-design-system/component-library.md +117 -0
- package/skills/brutalist-tech-design-system/design-principles.md +73 -0
- package/skills/brutalist-tech-design-system/example-page-structures.md +92 -0
- package/skills/brutalist-tech-design-system/layout-system.md +74 -0
- package/skills/brutalist-tech-design-system/motion-system.md +80 -0
- package/skills/brutalist-tech-design-system/spacing-system.md +86 -0
- package/skills/brutalist-tech-design-system/typography-system.md +94 -0
- package/skills/brutalist-tech-design-system/website-generation-rules.md +195 -0
- package/skills/crunchbase-profile-generator/README.md +64 -0
- package/skills/crunchbase-profile-generator/SKILL.md +189 -0
- package/skills/editorial-luxury-design-system/README.md +98 -0
- package/skills/editorial-luxury-design-system/SKILL.md +187 -0
- package/skills/editorial-luxury-design-system/accessibility-system.md +63 -0
- package/skills/editorial-luxury-design-system/color-system.md +95 -0
- package/skills/editorial-luxury-design-system/component-library.md +131 -0
- package/skills/editorial-luxury-design-system/design-principles.md +77 -0
- package/skills/editorial-luxury-design-system/example-page-structures.md +94 -0
- package/skills/editorial-luxury-design-system/layout-system.md +80 -0
- package/skills/editorial-luxury-design-system/motion-system.md +82 -0
- package/skills/editorial-luxury-design-system/spacing-system.md +77 -0
- package/skills/editorial-luxury-design-system/typography-system.md +107 -0
- package/skills/editorial-luxury-design-system/website-generation-rules.md +194 -0
- package/skills/enterprise-data-viz-design-system/README.md +98 -0
- package/skills/enterprise-data-viz-design-system/SKILL.md +195 -0
- package/skills/enterprise-data-viz-design-system/accessibility-system.md +68 -0
- package/skills/enterprise-data-viz-design-system/color-system.md +112 -0
- package/skills/enterprise-data-viz-design-system/component-library.md +142 -0
- package/skills/enterprise-data-viz-design-system/design-principles.md +75 -0
- package/skills/enterprise-data-viz-design-system/example-page-structures.md +89 -0
- package/skills/enterprise-data-viz-design-system/layout-system.md +75 -0
- package/skills/enterprise-data-viz-design-system/motion-system.md +86 -0
- package/skills/enterprise-data-viz-design-system/spacing-system.md +85 -0
- package/skills/enterprise-data-viz-design-system/typography-system.md +100 -0
- package/skills/enterprise-data-viz-design-system/website-generation-rules.md +196 -0
- package/skills/f6s-copywriting/README.md +16 -6
- package/skills/f6s-copywriting/SKILL.md +162 -46
- package/skills/glassmorphism-design-system/README.md +98 -0
- package/skills/glassmorphism-design-system/SKILL.md +190 -0
- package/skills/glassmorphism-design-system/accessibility-system.md +62 -0
- package/skills/glassmorphism-design-system/color-system.md +128 -0
- package/skills/glassmorphism-design-system/component-library.md +120 -0
- package/skills/glassmorphism-design-system/design-principles.md +77 -0
- package/skills/glassmorphism-design-system/example-page-structures.md +92 -0
- package/skills/glassmorphism-design-system/layout-system.md +81 -0
- package/skills/glassmorphism-design-system/motion-system.md +86 -0
- package/skills/glassmorphism-design-system/spacing-system.md +73 -0
- package/skills/glassmorphism-design-system/typography-system.md +90 -0
- package/skills/glassmorphism-design-system/website-generation-rules.md +195 -0
- package/skills/linkedin-copywriting/README.md +15 -8
- package/skills/linkedin-copywriting/SKILL.md +129 -51
- package/skills/motion-storytelling-design-system/README.md +100 -0
- package/skills/motion-storytelling-design-system/SKILL.md +191 -0
- package/skills/motion-storytelling-design-system/accessibility-system.md +71 -0
- package/skills/motion-storytelling-design-system/color-system.md +101 -0
- package/skills/motion-storytelling-design-system/component-library.md +122 -0
- package/skills/motion-storytelling-design-system/design-principles.md +81 -0
- package/skills/motion-storytelling-design-system/example-page-structures.md +91 -0
- package/skills/motion-storytelling-design-system/layout-system.md +79 -0
- package/skills/motion-storytelling-design-system/motion-system.md +116 -0
- package/skills/motion-storytelling-design-system/spacing-system.md +83 -0
- package/skills/motion-storytelling-design-system/typography-system.md +89 -0
- package/skills/motion-storytelling-design-system/website-generation-rules.md +200 -0
- package/skills/nvidia-inception-idea-booster/README.md +43 -24
- package/skills/nvidia-inception-idea-booster/SKILL.md +260 -116
- package/skills/nvidia-inception-starter/README.md +6 -5
- package/skills/nvidia-inception-starter/SKILL.md +80 -43
- package/skills/nvidia-product-inventor/README.md +44 -37
- package/skills/nvidia-product-inventor/SKILL.md +265 -227
- package/skills/nvidia-startup-idea-founder/README.md +66 -26
- package/skills/nvidia-startup-idea-founder/SKILL.md +245 -189
- package/skills/product-demo-first-design-system/README.md +96 -0
- package/skills/product-demo-first-design-system/SKILL.md +185 -0
- package/skills/product-demo-first-design-system/accessibility-system.md +58 -0
- package/skills/product-demo-first-design-system/color-system.md +109 -0
- package/skills/product-demo-first-design-system/component-library.md +142 -0
- package/skills/product-demo-first-design-system/design-principles.md +66 -0
- package/skills/product-demo-first-design-system/example-page-structures.md +95 -0
- package/skills/product-demo-first-design-system/layout-system.md +76 -0
- package/skills/product-demo-first-design-system/motion-system.md +82 -0
- package/skills/product-demo-first-design-system/spacing-system.md +74 -0
- package/skills/product-demo-first-design-system/typography-system.md +87 -0
- package/skills/product-demo-first-design-system/website-generation-rules.md +194 -0
- package/skills/website-design-skills/01-proof/README.md +0 -47
- package/skills/website-design-skills/01-proof/SKILL.md +0 -303
- package/skills/website-design-skills/02-kajabi/README.md +0 -42
- package/skills/website-design-skills/02-kajabi/SKILL.md +0 -272
- package/skills/website-design-skills/03-lattice/README.md +0 -42
- package/skills/website-design-skills/03-lattice/SKILL.md +0 -271
- package/skills/website-design-skills/04-petal/README.md +0 -42
- package/skills/website-design-skills/04-petal/SKILL.md +0 -271
- package/skills/website-design-skills/05-dropbox-sign/README.md +0 -42
- package/skills/website-design-skills/05-dropbox-sign/SKILL.md +0 -271
- package/skills/website-design-skills/06-distributional/README.md +0 -42
- package/skills/website-design-skills/06-distributional/SKILL.md +0 -271
- package/skills/website-design-skills/07-appcues/README.md +0 -42
- package/skills/website-design-skills/07-appcues/SKILL.md +0 -271
- package/skills/website-design-skills/08-memberstack/README.md +0 -42
- package/skills/website-design-skills/08-memberstack/SKILL.md +0 -271
- package/skills/website-design-skills/09-flank/README.md +0 -42
- package/skills/website-design-skills/09-flank/SKILL.md +0 -275
- package/skills/website-design-skills/10-slidebean/README.md +0 -42
- package/skills/website-design-skills/10-slidebean/SKILL.md +0 -275
- package/skills/website-design-skills/11-formstack/README.md +0 -42
- package/skills/website-design-skills/11-formstack/SKILL.md +0 -275
- package/skills/website-design-skills/12-thalamus/README.md +0 -42
- package/skills/website-design-skills/12-thalamus/SKILL.md +0 -275
- package/skills/website-design-skills/13-grow/README.md +0 -42
- package/skills/website-design-skills/13-grow/SKILL.md +0 -275
- package/skills/website-design-skills/14-gemnote/README.md +0 -42
- package/skills/website-design-skills/14-gemnote/SKILL.md +0 -275
- package/skills/website-design-skills/15-draftbit/README.md +0 -42
- package/skills/website-design-skills/15-draftbit/SKILL.md +0 -275
- package/skills/website-design-skills/16-payman/README.md +0 -42
- package/skills/website-design-skills/16-payman/SKILL.md +0 -273
- package/skills/website-design-skills/17-effortel/README.md +0 -42
- package/skills/website-design-skills/17-effortel/SKILL.md +0 -272
- package/skills/website-design-skills/18-adopt/README.md +0 -42
- package/skills/website-design-skills/18-adopt/SKILL.md +0 -273
- package/skills/website-design-skills/19-kraftful/README.md +0 -42
- package/skills/website-design-skills/19-kraftful/SKILL.md +0 -273
- package/skills/website-design-skills/20-greenhouse/README.md +0 -42
- package/skills/website-design-skills/20-greenhouse/SKILL.md +0 -273
- package/skills/website-design-skills/21-weavy/README.md +0 -42
- package/skills/website-design-skills/21-weavy/SKILL.md +0 -273
- package/skills/website-design-skills/22-safetykit/README.md +0 -42
- package/skills/website-design-skills/22-safetykit/SKILL.md +0 -273
- package/skills/website-design-skills/23-modulify/README.md +0 -42
- package/skills/website-design-skills/23-modulify/SKILL.md +0 -270
- package/skills/website-design-skills/24-realm/README.md +0 -42
- package/skills/website-design-skills/24-realm/SKILL.md +0 -270
- package/skills/website-design-skills/25-modyfi/README.md +0 -42
- package/skills/website-design-skills/25-modyfi/SKILL.md +0 -269
- package/skills/website-design-skills/26-altitude/README.md +0 -42
- package/skills/website-design-skills/26-altitude/SKILL.md +0 -270
- package/skills/website-design-skills/27-way/README.md +0 -42
- package/skills/website-design-skills/27-way/SKILL.md +0 -270
- package/skills/website-design-skills/28-zentail/README.md +0 -42
- package/skills/website-design-skills/28-zentail/SKILL.md +0 -270
- package/skills/website-design-skills/29-zams/README.md +0 -42
- package/skills/website-design-skills/29-zams/SKILL.md +0 -270
- package/skills/website-design-skills/30-user-interviews/README.md +0 -44
- package/skills/website-design-skills/30-user-interviews/SKILL.md +0 -273
- package/skills/website-design-skills/31-bland/README.md +0 -44
- package/skills/website-design-skills/31-bland/SKILL.md +0 -273
- package/skills/website-design-skills/32-nauto/README.md +0 -44
- package/skills/website-design-skills/32-nauto/SKILL.md +0 -273
- package/skills/website-design-skills/33-bill/README.md +0 -44
- package/skills/website-design-skills/33-bill/SKILL.md +0 -273
- package/skills/website-design-skills/34-localyzer/README.md +0 -44
- package/skills/website-design-skills/34-localyzer/SKILL.md +0 -273
- package/skills/website-design-skills/35-jasper/README.md +0 -44
- package/skills/website-design-skills/35-jasper/SKILL.md +0 -273
- package/skills/website-design-skills/README.md +0 -108
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Example Page Structures — Motion Storytelling
|
|
2
|
+
|
|
3
|
+
Ready-to-assemble, **scroll-narrative** page blueprints. Each section names a layout (see
|
|
4
|
+
`layout-system.md`) and components (see `component-library.md`). Every page tells a story
|
|
5
|
+
through scenes — pinned/scrub/reveal — with big beats alternating with calm passages. No
|
|
6
|
+
borders between sections (separate by whitespace + animated background/scene transitions).
|
|
7
|
+
|
|
8
|
+
Legend: `SH-* / ST-* / F-* / P-* / C-* / Q-* / FT-*` layouts · components by name.
|
|
9
|
+
|
|
10
|
+
## MANDATORY: 15+ page site map (≈20), 10+ scenes/page, clean URLs
|
|
11
|
+
|
|
12
|
+
Always ship a **full multipage website with 15+ pages (≈20)** — never a single landing page.
|
|
13
|
+
Every page carries **at least 10 sections/scenes (≈12)**, **no borders/dividers between
|
|
14
|
+
sections**, pure HTML/CSS/vanilla JS, **extensionless URLs**, and **reduced-motion + no
|
|
15
|
+
scroll-jack** behavior. Required 20-page map:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/ Home /customers Customers
|
|
19
|
+
/platform Platform /case-studies Case Studies
|
|
20
|
+
/solutions Solutions /developers Developers
|
|
21
|
+
/products Products /docs Documentation ← + DOC-A subpages
|
|
22
|
+
/features Features /about About
|
|
23
|
+
/ai-agents AI Agents /careers Careers
|
|
24
|
+
/enterprise Enterprise /blog Blog ← + article pages
|
|
25
|
+
/security Security /contact Contact
|
|
26
|
+
/pricing Pricing /partners Partners
|
|
27
|
+
/resources Resources /faq FAQ
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Each blueprint below is a **10-scene** skeleton — extend toward 12, never fewer than 10.
|
|
31
|
+
Every page must include: **Hero (kinetic/scrub) · Feature Scenes · Product Highlights ·
|
|
32
|
+
Trust Signals · Testimonials · Use Cases · Statistics · Integrations · CTA (finale) ·
|
|
33
|
+
Footer.** Mix big beats with calm passages.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 1. Home (default) — the narrative arc
|
|
38
|
+
1. **Navbar** + **Scroll Progress** — extensionless links
|
|
39
|
+
2. **Hero** `SH-A/SH-B` — kinetic display H1 + scrub/atmosphere ← big beat (opener)
|
|
40
|
+
3. **Logos Section** — staggered reveal (calm)
|
|
41
|
+
4. **Pinned narrative** `ST-A` — one product, 3 beats as copy swaps ← big beat (setup)
|
|
42
|
+
5. **Scrubbed demo** `ST-B` — product assembles on scroll ← big beat (product)
|
|
43
|
+
6. **Feature Grid** `F-A` — Reveal Timeline (calm)
|
|
44
|
+
7. **Statistics** — count-up metrics (calm proof)
|
|
45
|
+
8. **Testimonials** — quotes (reveal or pinned swap)
|
|
46
|
+
9. **Pricing** `P-A` (or teaser) — light motion
|
|
47
|
+
10. **CTA finale** `C-A` (parallax payoff) + **Footer** `FT-A`
|
|
48
|
+
|
|
49
|
+
## 2. Platform / Product
|
|
50
|
+
1. Navbar · 2. **Hero** scrub `SH-B` · 3. **Pinned narrative** `ST-A` · 4. **Dashboard
|
|
51
|
+
Preview** (Pinned Sequence) · 5. **Parallax layers** `ST-E` feature · 6. Code Preview (type
|
|
52
|
+
on reveal) · 7. Use Cases (reveal) · 8. **Statistics** · 9. Testimonials · 10. CTA finale + Footer
|
|
53
|
+
|
|
54
|
+
## 3. Features
|
|
55
|
+
1. Navbar · 2. Hero · 3.–8. alternating **feature scenes** (`ST-A` pinned / `ST-B` scrub /
|
|
56
|
+
`ST-C` reveal / `ST-D` horizontal — used once, accessible) with calm sections between · 9.
|
|
57
|
+
Integrations · 10. CTA finale + Footer
|
|
58
|
+
|
|
59
|
+
## 4. Developers / Documentation
|
|
60
|
+
- **Developers:** Navbar · **Hero** with **Terminal/Code** typing on scroll · Logos · Code
|
|
61
|
+
Preview (scrub/highlight) · Pinned "how it works" narrative · Use Cases · Statistics · CTA
|
|
62
|
+
("Read docs"/"Get API key") · Footer (≥10).
|
|
63
|
+
- **Docs:** `DOC-A` three-pane, **mostly static** (reading), light reveals only — **never
|
|
64
|
+
gate docs content behind motion**; breadcrumb; sticky nav.
|
|
65
|
+
|
|
66
|
+
## 5. Enterprise / Security
|
|
67
|
+
1. Navbar · 2. Hero (outcome-led) · 3. Logos · 4. Pinned narrative · 5. **Enterprise** scene ·
|
|
68
|
+
6. **Security** scene · 7. **Statistics**/ROI · 8. Testimonials (exec) · 9. CTA finale (contact)
|
|
69
|
+
· 10. Footer
|
|
70
|
+
|
|
71
|
+
## 6. Pricing
|
|
72
|
+
1. Navbar · 2. Hero (short + toggle) · 3. **Pricing** `P-A/P-B` (light motion) · 4. Feature
|
|
73
|
+
comparison (reveal) · 5. Enterprise band · 6. Logos · 7. Statistics · 8. Testimonials · 9.
|
|
74
|
+
**FAQ** `Q-A` · 10. CTA finale + Footer (keep decision moments calm — don't over-animate)
|
|
75
|
+
|
|
76
|
+
## 7. Content pages (About, Customers, Case Studies, Careers, Blog, Partners, Resources, Contact, FAQ)
|
|
77
|
+
Reach **≥10 scenes** via story: Hero → narrative/story scenes (timeline of the company,
|
|
78
|
+
customer story scrubs, case-study walkthroughs) → Trust Signals → Statistics → Testimonials →
|
|
79
|
+
Integrations → CTA finale → Footer. **Blog articles stay reading-first** (light reveals only).
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Assembly notes
|
|
84
|
+
- **Scale is mandatory:** 15+ pages, **≥10 scenes each**. Never a single/thin page.
|
|
85
|
+
- **Storyboard first:** define the arc, then choose which scenes pin/scrub/reveal. **Alternate
|
|
86
|
+
big beats with calm passages** so the rhythm breathes — don't pin everything.
|
|
87
|
+
- **No borders/dividers between sections** — whitespace + animated `--bg-scene-*` transitions
|
|
88
|
+
+ pinned depth. One idea + one strong motion per scene.
|
|
89
|
+
- **Reduced motion + no scroll-jack:** every scene degrades to a readable final state; native
|
|
90
|
+
scroll always works; provide a "Reduce motion" toggle.
|
|
91
|
+
- **Reading-heavy pages (docs, blog, pricing) stay calm.** Use real content; mark guesses `[PLACEHOLDER]`.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Layout & Grid System — Motion Storytelling
|
|
2
|
+
|
|
3
|
+
A 12-column fluid grid + canonical **scene layouts** for scroll-driven narrative: pinned
|
|
4
|
+
scenes, scrubbed sequences, reveal timelines, horizontal scroll, and standard sections
|
|
5
|
+
between the big beats. **No borders between sections.**
|
|
6
|
+
|
|
7
|
+
## Grid
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root { --grid-cols: 12; --grid-gap: clamp(16px, 2.2vw, 28px); }
|
|
11
|
+
|
|
12
|
+
.grid { display: grid; gap: var(--grid-gap);
|
|
13
|
+
grid-template-columns: repeat(var(--grid-cols), 1fr); }
|
|
14
|
+
.cols-1 { grid-template-columns: 1fr; }
|
|
15
|
+
.cols-2 { grid-template-columns: repeat(2, 1fr); }
|
|
16
|
+
.cols-3 { grid-template-columns: repeat(3, 1fr); }
|
|
17
|
+
.cols-4 { grid-template-columns: repeat(4, 1fr); }
|
|
18
|
+
.split { grid-template-columns: 1fr 1fr; }
|
|
19
|
+
@media (max-width: 900px){ .cols-3,.cols-4 { grid-template-columns: repeat(2,1fr); } }
|
|
20
|
+
@media (max-width: 820px){ .split { grid-template-columns: 1fr; } }
|
|
21
|
+
@media (max-width: 600px){ .cols-2,.cols-3,.cols-4 { grid-template-columns: 1fr; } }
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Breakpoints: `sm 480` · `md 768` · `lg 1024` · `xl 1280` · `2xl 1440`. Mobile-first;
|
|
25
|
+
collapse to single column by `md`, and **unpin/shorten scenes** on mobile (see spacing).
|
|
26
|
+
|
|
27
|
+
## Scene scaffold (recap from spacing)
|
|
28
|
+
A motion scene = a tall **`.scene`** track wrapping a **`.scene__stage`** (`position:
|
|
29
|
+
sticky; height:100vh`). The stage holds the pinned content; the extra track height is the
|
|
30
|
+
scroll distance the scene animates over. On mobile, scenes unpin and become normal sections.
|
|
31
|
+
|
|
32
|
+
## Canonical scene layouts
|
|
33
|
+
|
|
34
|
+
### Hero / opener
|
|
35
|
+
- **SH-A Kinetic hero (default):** pinned stage — eyebrow → kinetic display H1 (line reveal)
|
|
36
|
+
→ deck → CTA, with an animated gradient atmosphere; the headline/atmosphere respond to scroll.
|
|
37
|
+
- **SH-B Scrub hero:** a tall scrub track drives a **sequence** (image frames / SVG draw /
|
|
38
|
+
product assembling) in the pinned stage as you scroll into the page.
|
|
39
|
+
- **SH-C Reveal hero:** non-pinned, choreographed entrance of headline + media on load/scroll.
|
|
40
|
+
|
|
41
|
+
### Story / feature scenes
|
|
42
|
+
- **ST-A Pinned narrative:** stage pins; **copy swaps** (beat 1 → 2 → 3) while a visual
|
|
43
|
+
persists/transforms — one product, three points, told on scroll.
|
|
44
|
+
- **ST-B Scrubbed demo:** a product/diagram assembles or animates step-by-step tied to scroll.
|
|
45
|
+
- **ST-C Reveal timeline:** a normal section whose elements stagger in as it enters.
|
|
46
|
+
- **ST-D Horizontal scene:** content scrolls **sideways** while you scroll down (translateX
|
|
47
|
+
of a track inside a pinned stage); used sparingly, **keyboard-accessible**, with a
|
|
48
|
+
vertical-stack fallback on mobile/reduced motion.
|
|
49
|
+
- **ST-E Parallax layers:** background/mid/foreground move at different rates for depth.
|
|
50
|
+
|
|
51
|
+
### Standard sections (between beats — calm)
|
|
52
|
+
- **F-A Feature grid**, **F-C Bento**, logos, testimonials, metrics — lighter reveal motion,
|
|
53
|
+
letting the big scenes breathe.
|
|
54
|
+
|
|
55
|
+
### Pricing / CTA / FAQ / Footer
|
|
56
|
+
- **P-A 3-tier** (middle highlighted) + toggle; **P-B 2-tier + enterprise**. Light reveal.
|
|
57
|
+
- **C-A CTA finale:** a closing pinned/parallax beat — big line + primary CTA, the story's
|
|
58
|
+
payoff. `--section-y-lg`, no border.
|
|
59
|
+
- **Q-A Accordion FAQ**; **FT-A Mega footer** (calm, minimal motion).
|
|
60
|
+
|
|
61
|
+
### Dashboard / Docs
|
|
62
|
+
- **D-A Dashboard scene:** product shell revealed via scrub/pin.
|
|
63
|
+
- **DOC-A Three-pane docs:** mostly static (reading), light reveals only; never gate docs
|
|
64
|
+
content behind motion.
|
|
65
|
+
|
|
66
|
+
## Composition rules
|
|
67
|
+
|
|
68
|
+
1. **Separate scenes by background transition + space + depth, NEVER borders.** Animate
|
|
69
|
+
`--bg-scene-*`/overlay between chapters; `.section{border:0}`; no `<hr>` between sections.
|
|
70
|
+
2. **Storyboard the page.** Alternate **big beats** (pinned/scrub) with **calm passages**
|
|
71
|
+
(standard sections) so the rhythm breathes — don't pin every section.
|
|
72
|
+
3. **One idea per scene; one strong motion per scene.** Don't stack competing animations.
|
|
73
|
+
4. **At least 10 sections/scenes per page**, **15+ pages.** Never thin.
|
|
74
|
+
5. **Arc:** opener (hero) → setup → product beats (pinned/scrub) → proof (metrics/quotes) →
|
|
75
|
+
pricing → FAQ → finale CTA → footer. Make the narrative legible even when skimming.
|
|
76
|
+
6. **Performance + a11y:** pinned/scrub via sticky + rAF/IO (see motion-system); on mobile
|
|
77
|
+
and reduced motion, unpin and show final states; never block normal scrolling.
|
|
78
|
+
7. **Reflow:** multi-column → single column by `md`; horizontal scenes → vertical stacks;
|
|
79
|
+
tracks shorten/disable on mobile.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Motion System — Motion Storytelling
|
|
2
|
+
|
|
3
|
+
This is the heart of the skill: a **performant, accessible, library-free** motion engine for
|
|
4
|
+
scroll-driven storytelling — reveals, pinned scenes, scrubbed sequences, parallax, and
|
|
5
|
+
kinetic type — built only with `IntersectionObserver`, rAF-throttled scroll, the CSS
|
|
6
|
+
Scroll-Linked Animations API where supported, `<canvas>`/SVG, and CSS transitions.
|
|
7
|
+
|
|
8
|
+
## Tokens
|
|
9
|
+
|
|
10
|
+
```css
|
|
11
|
+
:root {
|
|
12
|
+
--dur-fast: 160ms; --dur-base: 280ms; --dur-slow: 520ms; --dur-slower: 800ms;
|
|
13
|
+
--ease-out: cubic-bezier(0.2, 1, 0.3, 1);
|
|
14
|
+
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
15
|
+
--ease-emph: cubic-bezier(0.16, 1, 0.3, 1); /* emphasized decelerate */
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Principles
|
|
20
|
+
1. **Compositor-only.** Animate `transform` + `opacity` (and `clip-path` for masks). Never
|
|
21
|
+
animate layout properties (top/left/width/height/margin) on scroll — that thrashes.
|
|
22
|
+
2. **rAF-throttle scroll.** Read scroll once per frame; write transforms in the rAF; cache
|
|
23
|
+
measurements; recompute on resize (debounced). Use `IntersectionObserver` for enter/exit.
|
|
24
|
+
3. **Prefer CSS scroll-linked animations** (`animation-timeline: view()/scroll()`) where
|
|
25
|
+
supported for jank-free scrubbing; JS rAF fallback otherwise.
|
|
26
|
+
4. **One strong motion per scene.** Calm passages between beats. Restraint = smoothness.
|
|
27
|
+
5. **Never block the user.** No scroll-jacking/hijack of native scroll. Pinning uses CSS
|
|
28
|
+
`position: sticky` (the page still scrolls normally); the user can always skim past.
|
|
29
|
+
6. **Final state is the content.** Animations only change presentation; everything is present
|
|
30
|
+
and readable with motion off.
|
|
31
|
+
|
|
32
|
+
## Patterns
|
|
33
|
+
|
|
34
|
+
### Reveal (IntersectionObserver) — the workhorse
|
|
35
|
+
```js
|
|
36
|
+
const io = new IntersectionObserver((es)=>es.forEach((e,i)=>{ if(e.isIntersecting){
|
|
37
|
+
e.target.style.transitionDelay = `${Math.min(i*70,360)}ms`;
|
|
38
|
+
e.target.classList.add('in'); io.unobserve(e.target);
|
|
39
|
+
}}, {threshold:.15});
|
|
40
|
+
document.querySelectorAll('[data-reveal]').forEach(el=>io.observe(el));
|
|
41
|
+
```
|
|
42
|
+
```css
|
|
43
|
+
[data-reveal]{ opacity:0; transform: translateY(20px);
|
|
44
|
+
transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); }
|
|
45
|
+
[data-reveal].in{ opacity:1; transform:none; }
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Pinned scene (CSS sticky — no library, no scroll-jack)
|
|
49
|
+
```css
|
|
50
|
+
.scene { position: relative; height: var(--track); } /* tall track */
|
|
51
|
+
.scene__stage { position: sticky; top: 0; height: 100vh; overflow: clip; }
|
|
52
|
+
```
|
|
53
|
+
Within the sticky stage, progress = how far the `.scene` has scrolled; compute a 0→1 value
|
|
54
|
+
and drive transforms/opacity (JS rAF) or use `animation-timeline: scroll()`.
|
|
55
|
+
|
|
56
|
+
### Scrub progress (rAF, library-free)
|
|
57
|
+
```js
|
|
58
|
+
const scenes = [...document.querySelectorAll('[data-scene]')];
|
|
59
|
+
let ticking = false;
|
|
60
|
+
function update(){
|
|
61
|
+
for (const s of scenes){
|
|
62
|
+
const r = s.getBoundingClientRect(), h = s.offsetHeight - innerHeight;
|
|
63
|
+
const p = Math.min(1, Math.max(0, -r.top / (h||1))); // 0→1 progress
|
|
64
|
+
s.style.setProperty('--p', p.toFixed(4)); // use in CSS calc()/JS
|
|
65
|
+
// e.g. drive a sequence frame: s.dataset.frame = Math.round(p*(FRAMES-1));
|
|
66
|
+
}
|
|
67
|
+
ticking = false;
|
|
68
|
+
}
|
|
69
|
+
addEventListener('scroll', ()=>{ if(!ticking){ requestAnimationFrame(update); ticking=true; }}, {passive:true});
|
|
70
|
+
addEventListener('resize', ()=>requestAnimationFrame(update)); update();
|
|
71
|
+
```
|
|
72
|
+
Use `--p` in CSS: `transform: translateY(calc((1 - var(--p)) * 40px)); opacity: var(--p);`
|
|
73
|
+
|
|
74
|
+
### Image-sequence / SVG scrub
|
|
75
|
+
- **Frames:** preload + `decode()` a small set of frames; draw to `<canvas>` (or toggle
|
|
76
|
+
`<img>`) by index = `round(p * (FRAMES-1))`. Provide a static final frame + alt.
|
|
77
|
+
- **SVG draw:** animate `stroke-dashoffset` from p; or `clip-path`/mask wipe for assembly.
|
|
78
|
+
|
|
79
|
+
### Parallax (subtle)
|
|
80
|
+
`transform: translate3d(0, calc(var(--p) * var(--depth)), 0)` per layer; small `--depth`
|
|
81
|
+
(e.g. 20–80px). Foreground moves more than background. Off for reduced motion/touch.
|
|
82
|
+
|
|
83
|
+
### Kinetic type (line reveal)
|
|
84
|
+
Wrap heading lines in `.line > span`; reveal `translateY(110%) → 0` on `.in` (see typography).
|
|
85
|
+
|
|
86
|
+
### Horizontal scene
|
|
87
|
+
Pin a stage; translate an inner track on X by progress: `transform: translateX(calc(var(--p)
|
|
88
|
+
* -1 * (var(--track-w) - 100vw)))`. Make it keyboard-operable (focus advances) and stack
|
|
89
|
+
vertically on mobile/reduced motion.
|
|
90
|
+
|
|
91
|
+
### Micro-interactions
|
|
92
|
+
Hover lift, magnetic buttons (translate toward pointer, small), link underline grow, nav
|
|
93
|
+
background morph on scroll, count-up, copy-check swap.
|
|
94
|
+
|
|
95
|
+
## Reduced motion (CRITICAL)
|
|
96
|
+
|
|
97
|
+
```css
|
|
98
|
+
@media (prefers-reduced-motion: reduce) {
|
|
99
|
+
*, *::before, *::after { animation-duration:.001ms !important;
|
|
100
|
+
animation-iteration-count:1 !important; transition-duration:.001ms !important;
|
|
101
|
+
scroll-behavior:auto !important; }
|
|
102
|
+
.scene { height: auto !important; } /* untrack */
|
|
103
|
+
.scene__stage { position: static !important; height: auto !important; }
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
And in JS: `const RM = matchMedia('(prefers-reduced-motion: reduce)').matches;` — if `RM`,
|
|
107
|
+
**don't attach** scroll/scrub/parallax listeners, render every scene in its **final state**
|
|
108
|
+
(final frame, headings shown, counters at final value), unpin scenes, and disable horizontal/
|
|
109
|
+
parallax. The site must be fully usable and complete with zero motion.
|
|
110
|
+
|
|
111
|
+
## Performance checklist
|
|
112
|
+
- Only `transform`/`opacity`/`clip-path` animate; `will-change` used sparingly on active scenes.
|
|
113
|
+
- Scroll handlers are `passive`, rAF-throttled, measurement-cached; resize debounced.
|
|
114
|
+
- Sequence frames are few, sized for viewport, preloaded + `decode()`d; use `<canvas>` for many.
|
|
115
|
+
- `content-visibility: auto` on offscreen heavy scenes; lazy-load media; target 60fps.
|
|
116
|
+
- Disable/spin down observers for scenes scrolled past; never run all scenes at once.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Spacing System — Motion Storytelling
|
|
2
|
+
|
|
3
|
+
A strict **4-point base / 8-point rhythm**, plus **scroll-track** lengths that give pinned
|
|
4
|
+
and scrubbed scenes room to animate. Whitespace, scene depth, and background transitions
|
|
5
|
+
separate content — never borders.
|
|
6
|
+
|
|
7
|
+
## Scale tokens
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root {
|
|
11
|
+
/* 4-pt base, 8-pt rhythm */
|
|
12
|
+
--space-0: 0; --space-1: 4px; --space-2: 8px; --space-3: 12px;
|
|
13
|
+
--space-4: 16px; --space-5: 20px; --space-6: 24px; --space-8: 32px;
|
|
14
|
+
--space-10: 40px; --space-12: 48px; --space-16: 64px; --space-20: 80px;
|
|
15
|
+
--space-24: 96px; --space-28: 112px;--space-32: 128px;--space-40: 160px;
|
|
16
|
+
|
|
17
|
+
/* Radii */
|
|
18
|
+
--radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px;
|
|
19
|
+
--radius-xl: 22px; --radius-2xl: 28px; --radius-pill: 999px;
|
|
20
|
+
|
|
21
|
+
/* Containers */
|
|
22
|
+
--container-sm: 680px; --container-md: 820px; --container-lg: 1060px;
|
|
23
|
+
--container-xl: 1200px; --container-2xl: 1360px; /* wide cinematic scenes */
|
|
24
|
+
--gutter: clamp(20px, 5vw, 48px);
|
|
25
|
+
|
|
26
|
+
/* Section / scene rhythm (fluid) */
|
|
27
|
+
--section-y: clamp(72px, 9vw, 140px);
|
|
28
|
+
--section-y-lg: clamp(104px, 13vw, 200px); /* hero / chapter openers */
|
|
29
|
+
--stack: clamp(16px, 2vw, 24px);
|
|
30
|
+
|
|
31
|
+
/* Scroll-track lengths (how long a scene "runs" while pinned/scrubbed) */
|
|
32
|
+
--track-short: 150vh; /* a short pinned beat */
|
|
33
|
+
--track: 250vh; /* standard pinned/scrub scene (1.5x extra scroll) */
|
|
34
|
+
--track-long: 400vh; /* a long scrubbed sequence (more frames/steps) */
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Usage map
|
|
39
|
+
|
|
40
|
+
- **4-pt system** (`--space-1..6`): inside components — icon↔label, button/badge padding,
|
|
41
|
+
caption gaps, list-item gaps.
|
|
42
|
+
- **8-pt system** (`--space-8..16`): between components — card gaps, copy↔media, form rows.
|
|
43
|
+
- **Container widths:** standard scenes `--container-lg/xl`; wide cinematic scenes
|
|
44
|
+
`--container-2xl`; prose/docs `--container-md`.
|
|
45
|
+
- **Section/scene spacing:** non-pinned sections use `padding-block: var(--section-y)`;
|
|
46
|
+
hero/chapter openers `--section-y-lg`.
|
|
47
|
+
- **Scroll tracks (the motion-specific part):** a **pinned/scrub scene** is a tall wrapper
|
|
48
|
+
(`height: var(--track)`) containing a `position: sticky; height: 100vh` inner stage. The
|
|
49
|
+
extra track height = the scroll distance over which the scene animates. Use `--track-short/
|
|
50
|
+
track/track-long` per how much choreography a scene needs.
|
|
51
|
+
- **Page spacing:** scenes stack with no extra margins and **no borders/dividers** —
|
|
52
|
+
`--section-y` whitespace + **background/scene transitions** + pinned depth separate them.
|
|
53
|
+
|
|
54
|
+
## Rules
|
|
55
|
+
|
|
56
|
+
1. **Only use scale values** for padding/gaps; tracks use the `--track-*` lengths.
|
|
57
|
+
2. **Right-size the track.** More animation steps → longer track (`--track-long`); a quick
|
|
58
|
+
pin → `--track-short`. Avoid extremely long tracks (they feel slow/janky).
|
|
59
|
+
3. **Pinned stage = 100vh sticky** inside a `--track`-tall wrapper. Keep the stage content
|
|
60
|
+
within safe padding so nothing clips during transforms.
|
|
61
|
+
4. **Whitespace + scene transition > dividers.** Separate scenes this way, never lines.
|
|
62
|
+
5. **Mobile:** shorten tracks (or disable pinning) so scenes aren't exhausting on small
|
|
63
|
+
screens; ensure normal scrolling always works.
|
|
64
|
+
|
|
65
|
+
## Helpers
|
|
66
|
+
|
|
67
|
+
```css
|
|
68
|
+
.container { width:100%; max-width: var(--container-xl);
|
|
69
|
+
margin-inline:auto; padding-inline: var(--gutter); }
|
|
70
|
+
.container--wide { max-width: var(--container-2xl); }
|
|
71
|
+
.section { padding-block: var(--section-y); border: 0; } /* never a section border */
|
|
72
|
+
.section--opener { padding-block: var(--section-y-lg); }
|
|
73
|
+
|
|
74
|
+
/* Pinned / scrubbed scene scaffold (pure CSS sticky) */
|
|
75
|
+
.scene { position: relative; height: var(--track); } /* the scroll track */
|
|
76
|
+
.scene__stage { position: sticky; top: 0; height: 100vh; /* the pinned viewport */
|
|
77
|
+
display: grid; place-items: center; overflow: clip; }
|
|
78
|
+
@media (max-width: 768px){
|
|
79
|
+
.scene { height: auto; } /* unpin on mobile: */
|
|
80
|
+
.scene__stage { position: static; height: auto; padding-block: var(--section-y); }
|
|
81
|
+
}
|
|
82
|
+
.stack > * + * { margin-top: var(--stack); }
|
|
83
|
+
```
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Typography System — Motion Storytelling
|
|
2
|
+
|
|
3
|
+
Bold, modern grotesk type that **moves with intent** — headlines assemble, mask-reveal, and
|
|
4
|
+
track the scroll (kinetic type), while body stays clean and is never animated word-by-word.
|
|
5
|
+
Legibility holds at every animation frame. Fluid scale across breakpoints.
|
|
6
|
+
|
|
7
|
+
## Fonts
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root {
|
|
11
|
+
--font-sans: "Inter", "Geist", "Satoshi", -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
12
|
+
Roboto, Helvetica, Arial, sans-serif;
|
|
13
|
+
--font-display: var(--font-sans); /* or "Geist"/"Clash Display" for bolder kinetic headlines */
|
|
14
|
+
--font-mono: "Geist Mono", "JetBrains Mono", "SF Mono", ui-monospace, Menlo, monospace;
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
A characterful display face (Geist, Clash Display, Satoshi) reads well in motion; keep body
|
|
18
|
+
in a neutral, highly legible sans. Mono for code/terminal scenes.
|
|
19
|
+
|
|
20
|
+
## Fluid type scale (clamp) — cinematic
|
|
21
|
+
|
|
22
|
+
```css
|
|
23
|
+
:root {
|
|
24
|
+
--fs-display: clamp(2.75rem, 1.4rem + 6.6vw, 6rem); /* 44 → 96px kinetic hero */
|
|
25
|
+
--fs-h1: clamp(2.25rem, 1.5rem + 3.4vw, 4rem); /* 36 → 64px */
|
|
26
|
+
--fs-h2: clamp(1.75rem, 1.3rem + 2.2vw, 2.875rem);/* 28 → 46px scene title */
|
|
27
|
+
--fs-h3: clamp(1.375rem, 1.15rem + 1.1vw, 1.875rem);/* 22 → 30px */
|
|
28
|
+
--fs-h4: clamp(1.125rem, 1.02rem + 0.5vw, 1.375rem);/* 18 → 22px */
|
|
29
|
+
--fs-lead: clamp(1.125rem, 1.02rem + 0.55vw, 1.4375rem);/* 18 → 23px */
|
|
30
|
+
--fs-body: 1rem; /* 16px base */
|
|
31
|
+
--fs-body-lg: 1.0625rem; /* 17px */
|
|
32
|
+
--fs-small: 0.875rem; /* 14px caption */
|
|
33
|
+
--fs-micro: 0.75rem; /* 12px labels/eyebrow/scene-number */
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Roles (each: size · weight · line-height · tracking)
|
|
38
|
+
|
|
39
|
+
| Role | Size | Weight | Line-height | Tracking | Color |
|
|
40
|
+
|---|---|---|---|---|---|
|
|
41
|
+
| **Display** (hero) | `--fs-display` | 600–800 | 1.0–1.05 | -0.02em to -0.03em | `--text-primary` / `--grad-text` |
|
|
42
|
+
| **H1** | `--fs-h1` | 600–700 | 1.06 | -0.02em | `--text-primary` |
|
|
43
|
+
| **H2** (scene title) | `--fs-h2` | 600 | 1.1 | -0.015em | `--text-primary` |
|
|
44
|
+
| **H3** | `--fs-h3` | 600 | 1.2 | -0.01em | `--text-primary` |
|
|
45
|
+
| **H4 / overline** | `--fs-h4` | 600 | 1.3 | 0 | `--text-primary` |
|
|
46
|
+
| **Eyebrow / scene number** | `--fs-micro` | 600 | 1.2 | 0.1em, UPPERCASE | `--accent`/`--text-muted` |
|
|
47
|
+
| **Lead / deck** | `--fs-lead` | 400 | 1.5 | 0 | `--text-secondary` |
|
|
48
|
+
| **Body** | `--fs-body`/`-lg` | 400 | 1.6 | 0 | `--text-secondary` |
|
|
49
|
+
| **Caption / meta** | `--fs-small` | 400–500 | 1.45 | 0 | `--text-muted` |
|
|
50
|
+
| **Kinetic word** | display sizes | 600–800 | — | — | `--text-primary`/accent (per beat) |
|
|
51
|
+
| **Button** | `--fs-body` (`0.9375rem`) | 600 | 1 | -0.005em | `--text-on-accent`/`--text-primary` |
|
|
52
|
+
| **Navigation** | `--fs-small`/`--fs-body` | 500 | 1 | 0 | `--text-secondary` → `--text-primary` |
|
|
53
|
+
| **Pricing amount** | `clamp(2.5rem,2rem+2vw,3.5rem)` | 700 | 1 | -0.02em | `--text-primary` |
|
|
54
|
+
| **Code / terminal** | `--fs-small` | 400–500 | 1.6 | 0 | mono, syntax-tinted |
|
|
55
|
+
|
|
56
|
+
## Kinetic type rules (the craft)
|
|
57
|
+
|
|
58
|
+
1. **Animate structure, keep legibility.** Reveal **headings line-by-line** (wrap lines in
|
|
59
|
+
`<span class="line">`) or with a **mask wipe** (`clip-path`/`background-clip`); never blur
|
|
60
|
+
text to illegibility or animate long paragraphs word-by-word.
|
|
61
|
+
2. **Scroll-tracked headlines** (optional) can shift/scale slightly with scroll on a pinned
|
|
62
|
+
scene — keep amplitude small so text stays readable.
|
|
63
|
+
3. **Final state is the real content.** Markup must contain the full text; animation only
|
|
64
|
+
affects presentation. With motion off, the heading is simply shown.
|
|
65
|
+
4. **Gradient text** (`--grad-text`) on display/hero phrases only — verify contrast at the
|
|
66
|
+
lightest stop over its background; never on body/small text.
|
|
67
|
+
5. **One display moment per scene** at most; calm passages between big kinetic beats.
|
|
68
|
+
6. **Tighten as it grows;** body ~1.6, 0 tracking, measure ≤ 68ch. Numbers `tabular-nums`.
|
|
69
|
+
|
|
70
|
+
## Base CSS
|
|
71
|
+
|
|
72
|
+
```css
|
|
73
|
+
body { font-family: var(--font-sans); font-size: var(--fs-body); line-height: 1.6;
|
|
74
|
+
color: var(--text-secondary); -webkit-font-smoothing: antialiased;
|
|
75
|
+
text-rendering: optimizeLegibility; }
|
|
76
|
+
h1,h2,h3,h4 { color: var(--text-primary); font-family: var(--font-display);
|
|
77
|
+
font-weight: 700; text-wrap: balance; letter-spacing: -0.02em; }
|
|
78
|
+
h1 { font-size: var(--fs-h1); line-height: 1.06; }
|
|
79
|
+
.eyebrow { font-size: var(--fs-micro); font-weight:600; letter-spacing:.1em;
|
|
80
|
+
text-transform:uppercase; color: var(--accent); }
|
|
81
|
+
.lead { font-size: var(--fs-lead); color: var(--text-secondary); max-width: 60ch; }
|
|
82
|
+
/* kinetic line reveal — full text is in the DOM; only presentation animates */
|
|
83
|
+
.kinetic .line { display:block; overflow:hidden; }
|
|
84
|
+
.kinetic .line > span { display:block; transform: translateY(110%);
|
|
85
|
+
transition: transform var(--dur-slow) var(--ease-out); }
|
|
86
|
+
.kinetic.in .line > span { transform: none; }
|
|
87
|
+
p { max-width: 68ch; }
|
|
88
|
+
code, pre { font-family: var(--font-mono); }
|
|
89
|
+
```
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Website Generation Rules — Motion Storytelling
|
|
2
|
+
|
|
3
|
+
How an agent turns this design system into a **production-ready, multi-page, scroll-driven
|
|
4
|
+
narrative website**. Output clean, semantic **pure HTML + CSS + vanilla JavaScript** plus
|
|
5
|
+
design tokens. The signature: each page tells a story through pinned/scrubbed/revealed
|
|
6
|
+
scenes — built **performantly and accessibly**, with **no animation libraries**. (The token/
|
|
7
|
+
spec system can be exported for other agents — see below — but the site itself is pure vanilla.)
|
|
8
|
+
|
|
9
|
+
## Technology stack (MANDATORY — no frameworks, no libraries)
|
|
10
|
+
|
|
11
|
+
Build everything — including all scroll motion — with **HTML5 + CSS3 + vanilla JavaScript
|
|
12
|
+
only**. The generated site must contain **zero** of:
|
|
13
|
+
|
|
14
|
+
> ❌ React · ❌ Vue · ❌ Angular · ❌ Svelte/Next/Nuxt · ❌ Bootstrap · ❌ Tailwind ·
|
|
15
|
+
> ❌ jQuery · ❌ GSAP · ❌ ScrollMagic · ❌ Lenis/Locomotive · ❌ Framer · ❌ AOS ·
|
|
16
|
+
> ❌ any UI/CSS framework · ❌ any JS animation/scroll library
|
|
17
|
+
|
|
18
|
+
Motion is built only with `IntersectionObserver`, rAF-throttled passive scroll listeners,
|
|
19
|
+
the CSS Scroll-Linked Animations API (`animation-timeline: scroll()/view()`) where supported,
|
|
20
|
+
`<canvas>`/SVG, and CSS transitions. No build step, no npm, no CDN kits. Exporting
|
|
21
|
+
`tokens.json` for other agents is allowed; shipping the site in a framework/animation library
|
|
22
|
+
is not.
|
|
23
|
+
|
|
24
|
+
## Mandatory scale & structure (read first)
|
|
25
|
+
- **Multipage: build 15+ pages (recommended ~20)** — a full site map, not one page.
|
|
26
|
+
- **Every page has at least 10 sections/scenes (recommend 12)** with a clear narrative arc.
|
|
27
|
+
- **No borders or dividers between sections** — separate scenes with **whitespace, animated
|
|
28
|
+
background/scene transitions (`--bg-scene-*`), and pinned-scene depth**. In CSS: `.section
|
|
29
|
+
{ border: 0 }`; never `<hr>`/divider or `border-top/bottom` between sections.
|
|
30
|
+
- **Performant + accessible motion:** compositor-only (`transform`/`opacity`), rAF/IO,
|
|
31
|
+
**fully gated by `prefers-reduced-motion`** (final-state, unpinned), **no scroll-jacking**.
|
|
32
|
+
- **Clean, extensionless, Vercel-ready URLs** (`/pricing`, not `/pricing.html`).
|
|
33
|
+
|
|
34
|
+
## Required pages (build all — 15+; ~20 recommended)
|
|
35
|
+
Home `/` · Platform `/platform` · Solutions `/solutions` · Products `/products` ·
|
|
36
|
+
Features `/features` · AI Agents `/ai-agents` · Enterprise `/enterprise` · Security
|
|
37
|
+
`/security` · Pricing `/pricing` · Customers `/customers` · Case Studies `/case-studies`
|
|
38
|
+
· Developers `/developers` · Documentation `/docs` · About `/about` · Careers `/careers`
|
|
39
|
+
· Blog `/blog` · Contact `/contact` · Partners `/partners` · Resources `/resources` ·
|
|
40
|
+
FAQ `/faq`. Add product/solution/blog/doc subpages freely.
|
|
41
|
+
|
|
42
|
+
## Required sections (every page — ≥10, recommend 12)
|
|
43
|
+
Hero (kinetic/scrub) · Feature Scenes · Product Highlights · Trust Signals (logos) ·
|
|
44
|
+
Testimonials · Use Cases · Statistics (count-up) · Integrations · CTA (finale) · Footer. Add
|
|
45
|
+
more (Security, Enterprise, Pinned narrative, Bento, Code/Terminal) to reach 12. Mix **big
|
|
46
|
+
beats** (pinned/scrub) with **calm passages** (standard sections).
|
|
47
|
+
|
|
48
|
+
## Site types this must support
|
|
49
|
+
Landing pages · startup websites · AI company websites · enterprise SaaS · developer
|
|
50
|
+
platforms · agentic-AI startups · infrastructure startups · launches. (See `example-page-structures.md`.)
|
|
51
|
+
|
|
52
|
+
## What to generate
|
|
53
|
+
- **HTML** — semantic, accessible, one file per page; full content in DOM (motion = presentation).
|
|
54
|
+
- **CSS** — `tokens.css` (`:root` vars) + `styles.css` (base + scene scaffold + components +
|
|
55
|
+
reduced-motion block).
|
|
56
|
+
- **JavaScript** — vanilla **motion engine**: IO reveals, sticky-scene progress (rAF), scrub
|
|
57
|
+
(frames/SVG), parallax, kinetic type, nav, accordion, tabs, count-up — all reduced-motion-aware.
|
|
58
|
+
- **`vercel.json`** + **`sitemap.xml`** + **`robots.txt`**.
|
|
59
|
+
- **Design tokens** — `tokens.json` (token export only).
|
|
60
|
+
- **Component specifications** — when asked for the *system*, emit component + scene markup.
|
|
61
|
+
- **Accessibility + responsive guidance** inline (comments) and honored.
|
|
62
|
+
|
|
63
|
+
## File/output layout (default — flat files + clean URLs)
|
|
64
|
+
```
|
|
65
|
+
website/
|
|
66
|
+
├── index.html # served at /
|
|
67
|
+
├── platform.html solutions.html products.html features.html ai-agents.html
|
|
68
|
+
├── enterprise.html security.html pricing.html customers.html case-studies.html
|
|
69
|
+
├── developers.html docs.html about.html careers.html blog.html contact.html
|
|
70
|
+
├── partners.html resources.html faq.html
|
|
71
|
+
├── css/ { tokens.css, styles.css }
|
|
72
|
+
├── js/ { main.js } # motion engine + nav + interactions
|
|
73
|
+
├── assets/ # sequence frames, SVGs, media, og images
|
|
74
|
+
├── tokens.json
|
|
75
|
+
├── sitemap.xml robots.txt
|
|
76
|
+
└── vercel.json
|
|
77
|
+
```
|
|
78
|
+
Alternative: folder-per-page `platform/index.html`. Either way **all internal links are
|
|
79
|
+
extensionless** (`href="/pricing"`).
|
|
80
|
+
|
|
81
|
+
## Clean URLs & Vercel (MANDATORY)
|
|
82
|
+
- **No `.html` in any URL**, no `page.html` links, no ugly query params.
|
|
83
|
+
- Emit **`vercel.json`** so `.html` is stripped, refresh works, and deep links resolve:
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"cleanUrls": true,
|
|
87
|
+
"trailingSlash": false,
|
|
88
|
+
"headers": [
|
|
89
|
+
{ "source": "/assets/(.*)", "headers": [
|
|
90
|
+
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } ] }
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
`cleanUrls: true` serves `platform.html` at `/platform` and 301-redirects `.html`.
|
|
95
|
+
Provide a `404.html`. Every nav/footer/internal link is extensionless.
|
|
96
|
+
|
|
97
|
+
## Navigation system (vanilla JS)
|
|
98
|
+
- **Desktop nav** with optional dropdown/mega-menu; may include **Scroll Progress** + chapter
|
|
99
|
+
dots. Keyboard + `aria-expanded`/`aria-haspopup`. **Never hijacks scroll.**
|
|
100
|
+
- **Mobile nav**: full-screen overlay, accordion, focus-trap, ESC.
|
|
101
|
+
- **Multi-level nav** + **breadcrumbs** on deep pages; `aria-current="page"`.
|
|
102
|
+
|
|
103
|
+
## Hard rules
|
|
104
|
+
1. **Vanilla only** — no animation/scroll libraries (see stack). Hand-build the motion engine.
|
|
105
|
+
2. **Storyboard each page.** A clear arc; pinned/scrub/reveal scenes with designed
|
|
106
|
+
choreography; big beats alternate with calm passages; one strong motion per scene.
|
|
107
|
+
3. **Reduced motion + no scroll-jack (non-negotiable).** Fully honor `prefers-reduced-motion`
|
|
108
|
+
(final-state, unpinned, no scrub/parallax); never hijack native scroll; content readable
|
|
109
|
+
without motion; provide a "Reduce motion" toggle.
|
|
110
|
+
4. **Tokens first, once.** All colors/type/spacing as `:root` vars; no scattered hex/px.
|
|
111
|
+
5. **No section borders.** Separate scenes with space + animated background transitions.
|
|
112
|
+
`.section{border:0}`.
|
|
113
|
+
6. **Mobile-first + responsive**; **unpin/shorten scenes on mobile**; multi-column → single;
|
|
114
|
+
no unintended horizontal scroll.
|
|
115
|
+
7. **Semantic + accessible** per `accessibility-system.md` (full content in DOM, contrast in
|
|
116
|
+
motion, focus, vestibular safety). Non-negotiable.
|
|
117
|
+
8. **Components from the library** (incl. scene components). Every component responsive,
|
|
118
|
+
accessible, reusable, production-ready.
|
|
119
|
+
9. **Performance:** compositor-only animation, rAF-throttled passive scroll, IO reveals,
|
|
120
|
+
`content-visibility` on offscreen scenes, decoded/lazy sequence frames; target 60fps; high
|
|
121
|
+
Lighthouse (90+). System/Inter fonts.
|
|
122
|
+
10. **SEO on every page** (below). **Real content, not lorem** (mark guesses `[PLACEHOLDER]`).
|
|
123
|
+
11. **Self-verify** against anti-patterns + every companion checklist before done.
|
|
124
|
+
|
|
125
|
+
## SEO requirements (every page)
|
|
126
|
+
Unique `<title>` + meta description (150–160); **Open Graph** + **Twitter card**
|
|
127
|
+
(`summary_large_image`) + OG image; **canonical** (clean URL); **JSON-LD** (`Organization` +
|
|
128
|
+
`WebSite` site-wide; `Product`, `FAQPage`, `BreadcrumbList`, `Article` where relevant);
|
|
129
|
+
**`sitemap.xml`** + **`robots.txt`**. (Content lives in HTML, not only in JS-driven motion,
|
|
130
|
+
so crawlers index it.)
|
|
131
|
+
|
|
132
|
+
## Performance requirements
|
|
133
|
+
60fps motion, compositor-only properties, rAF/IO, `content-visibility` offscreen, lazy/decoded
|
|
134
|
+
media, one fixed background where possible, cached assets (via `vercel.json`), no libraries —
|
|
135
|
+
high Lighthouse.
|
|
136
|
+
|
|
137
|
+
## Boilerplate `<head>`
|
|
138
|
+
```html
|
|
139
|
+
<!doctype html><html lang="en"><head>
|
|
140
|
+
<meta charset="utf-8">
|
|
141
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
142
|
+
<meta name="color-scheme" content="dark light">
|
|
143
|
+
<title><!-- Page · Brand --></title>
|
|
144
|
+
<meta name="description" content="<!-- 150–160 chars -->">
|
|
145
|
+
<link rel="canonical" href="https://brand.com/path">
|
|
146
|
+
<meta property="og:type" content="website">
|
|
147
|
+
<meta property="og:title" content="<!-- Page · Brand -->">
|
|
148
|
+
<meta property="og:description" content="<!-- … -->">
|
|
149
|
+
<meta property="og:url" content="https://brand.com/path">
|
|
150
|
+
<meta property="og:image" content="https://brand.com/assets/og.png">
|
|
151
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
152
|
+
<link rel="stylesheet" href="/css/tokens.css">
|
|
153
|
+
<link rel="stylesheet" href="/css/styles.css">
|
|
154
|
+
<script type="application/ld+json"><!-- Organization / WebSite JSON-LD --></script>
|
|
155
|
+
</head>
|
|
156
|
+
<body>
|
|
157
|
+
<a class="skip-link" href="#main">Skip to content</a>
|
|
158
|
+
<header><!-- Navbar + scroll progress (links extensionless: /platform, /pricing) --></header>
|
|
159
|
+
<main id="main"><!-- hero scene + 10–12 scenes, animated bg transitions, no dividers --></main>
|
|
160
|
+
<footer><!-- Footer + "Reduce motion" toggle --></footer>
|
|
161
|
+
<script src="/js/main.js" defer></script>
|
|
162
|
+
</body></html>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Required base CSS (no section borders; scene scaffold; reduced motion)
|
|
166
|
+
```css
|
|
167
|
+
html, body { background: var(--bg-base); color: var(--text-secondary); }
|
|
168
|
+
.section { padding-block: var(--section-y); border: 0; } /* no borders/dividers between sections */
|
|
169
|
+
.section + .section { border-top: 0; }
|
|
170
|
+
.scene { position: relative; height: var(--track); }
|
|
171
|
+
.scene__stage { position: sticky; top: 0; height: 100vh; overflow: clip; }
|
|
172
|
+
@media (prefers-reduced-motion: reduce){
|
|
173
|
+
.scene { height: auto; } .scene__stage { position: static; height: auto; padding-block: var(--section-y); }
|
|
174
|
+
*,*::before,*::after { transition-duration:.001ms !important; animation-duration:.001ms !important; }
|
|
175
|
+
}
|
|
176
|
+
/* Separation = whitespace + animated --bg-scene-* transitions + pinned depth; never <hr>/dividers. */
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## tokens.json shape (excerpt)
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"color": { "bgBase":"#05060a", "scene":["#070912","#0b0814","#060e12","#0e0a08"],
|
|
183
|
+
"text": {"primary":"#f5f6fb","secondary":"#c2c7d6","muted":"#939ab0"},
|
|
184
|
+
"accent": {"base":"#6366f1","2":"#06b6d4","3":"#ec4899"} },
|
|
185
|
+
"space": { "4":"16px","6":"24px","8":"32px","16":"64px" },
|
|
186
|
+
"track": { "short":"150vh","base":"250vh","long":"400vh" },
|
|
187
|
+
"radius": { "lg":"16px","xl":"22px","pill":"999px" },
|
|
188
|
+
"type": { "display":"clamp(2.75rem,1.4rem + 6.6vw,6rem)", "body":"1rem" }
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Definition of done
|
|
193
|
+
**15+ pages (≈20), each with ≥10 sections/scenes (≈12) and a clear narrative arc (pinned/
|
|
194
|
+
scrub/reveal beats + calm passages), no borders/dividers between sections.** Pure HTML/CSS/
|
|
195
|
+
vanilla JS (no frameworks/animation libraries); motion is compositor-only, rAF/IO, 60fps;
|
|
196
|
+
**fully reduced-motion-aware (final-state, unpinned) with a toggle, and no scroll-jacking**;
|
|
197
|
+
clean extensionless URLs with `vercel.json` (refresh + deep links work); desktop nav + mobile
|
|
198
|
+
+ breadcrumb + scroll progress; per-page SEO + sitemap; tokens centralized; fully responsive
|
|
199
|
+
(scenes unpin on mobile); AA accessible (contrast in motion, focus, vestibular-safe); zero
|
|
200
|
+
anti-patterns; could sit next to Apple/Stripe scroll storytelling — smooth, meaningful, accessible.
|