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,94 @@
|
|
|
1
|
+
# Example Page Structures — Editorial Luxury
|
|
2
|
+
|
|
3
|
+
Ready-to-assemble, **editorial** page blueprints. Each section names a layout (see
|
|
4
|
+
`layout-system.md`) and components (see `component-library.md`). Compose on the asymmetric
|
|
5
|
+
grid with serif display type, kickers/decks/pull quotes/captions, and dramatic whitespace.
|
|
6
|
+
No borders between sections (separate by whitespace + alternating paper tone).
|
|
7
|
+
|
|
8
|
+
Legend: `EH-* / F-* / P-* / C-* / Q-* / FT-*` layouts · components by name.
|
|
9
|
+
|
|
10
|
+
## MANDATORY: 15+ page site map (≈20), 10+ sections/page, clean URLs
|
|
11
|
+
|
|
12
|
+
Always ship a **full multipage website with 15+ pages (≈20)** — never a single landing
|
|
13
|
+
page. Every page carries **at least 10 sections (≈12)**, **no borders/dividers between
|
|
14
|
+
sections**, pure HTML/CSS/vanilla JS, **extensionless URLs**. Required 20-page map:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/ Home /customers Customers
|
|
18
|
+
/platform Platform /case-studies Case Studies
|
|
19
|
+
/solutions Solutions /developers Developers
|
|
20
|
+
/products Products /docs Documentation ← + DOC-A subpages
|
|
21
|
+
/features Features /about About / Story
|
|
22
|
+
/ai-agents AI Agents /careers Careers
|
|
23
|
+
/enterprise Enterprise /journal Journal (Blog) ← + article pages
|
|
24
|
+
/security Security /contact Contact
|
|
25
|
+
/pricing Pricing /partners Partners
|
|
26
|
+
/resources Resources /faq FAQ
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Each blueprint below is a **10-section** skeleton — extend toward 12, never fewer than 10.
|
|
30
|
+
Every page must include: **Hero (editorial) · Feature/Story Sections · Product Highlights
|
|
31
|
+
(plates) · Trust Signals · Testimonials (pull quotes) · Use Cases · Statistics (figures) ·
|
|
32
|
+
Integrations · CTA (chapter opener) · Footer.**
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 1. Home (default)
|
|
37
|
+
1. **Navbar** (slim, quiet) — extensionless links
|
|
38
|
+
2. **Hero** `EH-A` — kicker · large serif display H1 (offset) · deck · understated CTA ·
|
|
39
|
+
art-directed image (full-bleed `.bleed` below)
|
|
40
|
+
3. **Logos / Press** — "As featured in" small-caps + refined logo row
|
|
41
|
+
4. **Feature/Story** `F-B` alternating plates — image ↔ text, captions
|
|
42
|
+
5. **Pull Quote** — large italic serif testimonial breaking the measure
|
|
43
|
+
6. **Index** `F-C` — numbered editorial list of capabilities ("01 — …", hairline rows)
|
|
44
|
+
7. **Statistics** — editorial figures (serif numbers, small-caps labels, count-up)
|
|
45
|
+
8. **Feature essay** `F-A` — offset column, drop cap, a pull quote
|
|
46
|
+
9. **Pricing** `P-A` (or teaser) — quiet typographic tiers
|
|
47
|
+
10. **CTA** `C-A` chapter opener (on `--paper-ink` plate) + **Footer** `FT-A`
|
|
48
|
+
|
|
49
|
+
## 2. About / Story (brand essay)
|
|
50
|
+
1. Navbar · 2. **Hero** `EH-C` type-only opener · 3. Feature essay `F-A` (the story, drop
|
|
51
|
+
cap) · 4. Full-bleed plate + caption · 5. Pull quote · 6. **Index** (values/principles
|
|
52
|
+
"01–04") · 7. Statistics (figures) · 8. Team plates (image+caption grid) · 9. CTA chapter
|
|
53
|
+
opener · 10. Footer
|
|
54
|
+
|
|
55
|
+
## 3. Platform / Product
|
|
56
|
+
1. Navbar · 2. **Hero** `EH-A` (product plate) · 3. Feature plates `F-B` · 4. **Dashboard
|
|
57
|
+
Preview** (editorial plate + caption) · 5. Feature essay `F-A` · 6. Code Preview (inset) ·
|
|
58
|
+
7. Use Cases · 8. Statistics · 9. Pull quote · 10. CTA + Footer
|
|
59
|
+
|
|
60
|
+
## 4. Journal (blog) / Article
|
|
61
|
+
- **Journal index:** Navbar · Hero (kicker + serif title) · featured article plate · an
|
|
62
|
+
**index** of articles (F-C, image + kicker + serif title + date) · categories · pull
|
|
63
|
+
quote · newsletter · CTA · Footer (≥10).
|
|
64
|
+
- **Article:** offset reading column (`--container-text`), drop cap, pull quotes, figures
|
|
65
|
+
with captions/credits, related articles, breadcrumb. `NewsArticle` JSON-LD.
|
|
66
|
+
|
|
67
|
+
## 5. Enterprise / Security
|
|
68
|
+
1. Navbar · 2. Hero (outcome-led, serif) · 3. Logos/press · 4. Feature essay · 5.
|
|
69
|
+
**Enterprise** passage (value list, hairline rules) · 6. **Security** (compliance marks) ·
|
|
70
|
+
7. Statistics/ROI · 8. Pull quote (exec) · 9. CTA "Speak with our team" · 10. Footer
|
|
71
|
+
|
|
72
|
+
## 6. Pricing
|
|
73
|
+
1. Navbar · 2. Hero (short, serif + toggle) · 3. **Pricing** `P-A` typographic tiers · 4.
|
|
74
|
+
Feature comparison (hairline-ruled list) · 5. Enterprise/bespoke note · 6. Logos · 7.
|
|
75
|
+
Statistics · 8. Pull quote · 9. **FAQ** `Q-A` (numbered, hairline rows) · 10. CTA + Footer
|
|
76
|
+
|
|
77
|
+
## 7. Content pages (Careers, Customers, Case Studies, Partners, Resources, Contact, FAQ)
|
|
78
|
+
Reach **≥10 sections** with editorial composition: Hero → body sections (open roles list,
|
|
79
|
+
customer plates, case-study essay with pull quotes + figures, partner index, resource
|
|
80
|
+
cards, contact with a refined form) → Trust Signals → Pull Quote → Statistics →
|
|
81
|
+
Integrations → CTA chapter opener → Footer.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Assembly notes
|
|
86
|
+
- **Scale is mandatory:** 15+ pages, **≥10 sections each**. Never a single/thin page.
|
|
87
|
+
- **Lead with serif display + dramatic whitespace**; compose asymmetrically on the grid;
|
|
88
|
+
use kickers, decks, pull quotes, captions, and numbered indices.
|
|
89
|
+
- **No borders/dividers between sections** — whitespace + alternating paper tone (and the
|
|
90
|
+
occasional `--paper-ink` plate). Hairlines only *inside* compositions.
|
|
91
|
+
- **Pace the reader:** vary density and image scale section to section (spacious → dense →
|
|
92
|
+
full-bleed → quiet quote) like a magazine.
|
|
93
|
+
- **Understated CTAs**; one accent moment per section at most; real, art-directed imagery
|
|
94
|
+
with captions/credits. Mark guesses `[PLACEHOLDER]`.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Layout & Grid System — Editorial Luxury
|
|
2
|
+
|
|
3
|
+
A **12-column asymmetric editorial grid** + canonical magazine-style layouts. Compositions
|
|
4
|
+
are off-center and considered, with generous margins, columns, captions, and pull quotes.
|
|
5
|
+
**No borders between sections.**
|
|
6
|
+
|
|
7
|
+
## Grid
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root { --grid-cols: 12; --grid-gap: var(--col-gap); }
|
|
11
|
+
|
|
12
|
+
.grid { display: grid; gap: var(--grid-gap);
|
|
13
|
+
grid-template-columns: repeat(var(--grid-cols), 1fr); }
|
|
14
|
+
|
|
15
|
+
/* Editorial column spans (asymmetric by design) */
|
|
16
|
+
.col-text { grid-column: 2 / 8; } /* offset reading column */
|
|
17
|
+
.col-wide { grid-column: 2 / 12; }
|
|
18
|
+
.col-left { grid-column: 1 / 7; }
|
|
19
|
+
.col-right { grid-column: 7 / 13; }
|
|
20
|
+
.col-aside { grid-column: 9 / 12; } /* margin notes / captions */
|
|
21
|
+
.col-full { grid-column: 1 / -1; }
|
|
22
|
+
|
|
23
|
+
@media (max-width: 900px){
|
|
24
|
+
.col-text,.col-wide,.col-left,.col-right,.col-aside { grid-column: 1 / -1; }
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Breakpoints: `sm 480` · `md 768` · `lg 1024` · `xl 1280` · `2xl 1440`. Mobile-first;
|
|
29
|
+
the editorial grid collapses to a single column by `md` (asymmetry → linear flow).
|
|
30
|
+
|
|
31
|
+
## Canonical editorial layouts
|
|
32
|
+
|
|
33
|
+
### Hero / chapter opener
|
|
34
|
+
- **EH-A Editorial hero (default):** small-caps **kicker** → large serif **display** H1
|
|
35
|
+
(offset left on the grid) → **deck** → understated CTA, with a large art-directed image
|
|
36
|
+
to one side or full-bleed below. Dramatic whitespace.
|
|
37
|
+
- **EH-B Cover:** a full-bleed image with the title set over it (magazine cover), kicker +
|
|
38
|
+
serif title + deck; scrim/positioning ensures legibility.
|
|
39
|
+
- **EH-C Type-only opener:** an oversized serif statement centered or offset with vast
|
|
40
|
+
whitespace and a single hairline — no image (Stripe Press feel).
|
|
41
|
+
|
|
42
|
+
### Feature / story
|
|
43
|
+
- **F-A Feature essay:** offset reading column (`.col-text`) with a drop cap, pull quotes
|
|
44
|
+
breaking the measure, and figures with captions — long-form editorial.
|
|
45
|
+
- **F-B Alternating plates:** image ↔ text rows, full-bleed or inset images with captions,
|
|
46
|
+
flipping sides; generous space between.
|
|
47
|
+
- **F-C Index / list:** a numbered editorial index ("01 — …") of features/articles as a
|
|
48
|
+
typographic list with hairline rules between rows (rules *within* the list, not between sections).
|
|
49
|
+
- **F-D Two-column editorial:** asymmetric `.col-left` headline + `.col-right` body/columns.
|
|
50
|
+
|
|
51
|
+
### Pricing / CTA / FAQ / Footer
|
|
52
|
+
- **P-A Editorial pricing:** tiers as quiet typographic columns (serif amount, hairline
|
|
53
|
+
rules, understated CTA) — not loud cards. **P-B 2-tier + bespoke/enterprise** note.
|
|
54
|
+
- **C-A CTA opener:** a chapter-opener-style band (large serif line + understated CTA) on a
|
|
55
|
+
`--paper-bone` or `--paper-ink` plate. `--section-y-lg`, no border.
|
|
56
|
+
- **Q-A Editorial FAQ:** a numbered list with hairline rules between items; serif questions.
|
|
57
|
+
- **FT-A Editorial footer:** brand wordmark + columns + fine print, hairline at the top edge
|
|
58
|
+
only, small-caps labels. **FT-B minimal.**
|
|
59
|
+
|
|
60
|
+
### Dashboard / Docs
|
|
61
|
+
- **D-A Plate:** product imagery as a full-bleed/inset editorial plate with a caption.
|
|
62
|
+
- **DOC-A Editorial docs:** offset prose column (`--container-text`) + margin notes
|
|
63
|
+
(`.col-aside`) + a fine TOC; serif headings, sans body, hairline rules.
|
|
64
|
+
|
|
65
|
+
## Composition rules
|
|
66
|
+
|
|
67
|
+
1. **Separate sections by whitespace + paper tone, NEVER borders.** Alternate `--paper`/
|
|
68
|
+
`--paper-bone` (and the occasional `--paper-ink` plate); `.section{border:0}`; no `<hr>`
|
|
69
|
+
between sections. Editorial **hairlines live inside compositions** (under kickers,
|
|
70
|
+
between index/FAQ rows, in the footer) — never as section dividers.
|
|
71
|
+
2. **Compose asymmetrically on the grid.** Offset the reading column; let images and quotes
|
|
72
|
+
break the measure. Keep alignment precise.
|
|
73
|
+
3. **One idea per section, paced.** Vary density and image scale section to section for a
|
|
74
|
+
magazine rhythm (spacious → dense → full-bleed → quiet quote).
|
|
75
|
+
4. **At least 10 sections per page**, **15+ pages.** Never thin.
|
|
76
|
+
5. **Rhythm:** Editorial hero → kicker/intro → feature essay/plates → pull quote → index →
|
|
77
|
+
metrics/testimonials → pricing → FAQ → CTA opener → editorial footer.
|
|
78
|
+
6. **Prose measure capped** (`--container-text`, ~66ch); full-bleed images use `.bleed`.
|
|
79
|
+
7. **Reflow gracefully:** asymmetric spans collapse to a single, well-spaced column on
|
|
80
|
+
mobile; images stack with captions; whitespace scales down but stays generous.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Motion System — Editorial Luxury
|
|
2
|
+
|
|
3
|
+
Motion is **quiet, slow, and elegant** — type settles in line by line, images reveal behind
|
|
4
|
+
a soft curtain, and elements fade up with grace. Nothing bounces or rushes. The pacing
|
|
5
|
+
feels like turning the pages of a beautiful magazine. Everything degrades under
|
|
6
|
+
`prefers-reduced-motion`.
|
|
7
|
+
|
|
8
|
+
Distilled from luxury/editorial sites (Aesop, Hermès, Cartier — restrained, refined) and
|
|
9
|
+
OpenAI/Anthropic/Perplexity/Cursor (calm) for structure.
|
|
10
|
+
|
|
11
|
+
## Tokens
|
|
12
|
+
|
|
13
|
+
```css
|
|
14
|
+
:root {
|
|
15
|
+
--dur-fast: 200ms; --dur-base: 360ms; --dur-slow: 560ms; --dur-slower: 900ms;
|
|
16
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* soft, refined decelerate */
|
|
17
|
+
--ease-editorial: cubic-bezier(0.22, 0.61, 0.36, 1);
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
Note: durations are **slightly longer** than typical SaaS — luxury motion is unhurried.
|
|
21
|
+
|
|
22
|
+
## Principles
|
|
23
|
+
1. **Slow and graceful.** Reveals run 360–900ms with soft easing; nothing snappy.
|
|
24
|
+
2. **Type is choreographed.** Headlines can settle **line by line**; kickers fade first,
|
|
25
|
+
then the headline, then the deck — a considered cadence.
|
|
26
|
+
3. **Move a little.** Fade + 16–28px rise; image scale 1.04→1.0 reveal. No bounce/spin.
|
|
27
|
+
4. **One focal motion per viewport.** Calm, paced, never busy.
|
|
28
|
+
5. **Cheap props only** (`transform`/`opacity`/`clip-path`).
|
|
29
|
+
|
|
30
|
+
## Patterns
|
|
31
|
+
|
|
32
|
+
- **Scroll reveal (signature):** elements start `opacity:0; translateY(24px)` → `.in` via
|
|
33
|
+
`IntersectionObserver`, `--dur-slow` `--ease-out`. Reveal once; unhurried.
|
|
34
|
+
- **Line-by-line headings:** wrap heading lines in spans; reveal each with a small stagger
|
|
35
|
+
(~90ms) and a soft rise — the editorial "type settling" effect.
|
|
36
|
+
- **Image curtain:** images reveal via `clip-path` wipe (or mask) + a slight scale-down
|
|
37
|
+
(1.05→1.0), `--dur-slower`. Feels like a printed plate appearing.
|
|
38
|
+
- **Drop cap / pull quote:** fade in slightly after their paragraph for emphasis.
|
|
39
|
+
- **Hover:** links grow their hairline underline (animate `border`/underline); buttons
|
|
40
|
+
shift ink→accent; image plates lift subtly (`--shadow-md`→`--shadow-lg`) and scale ≤1.02.
|
|
41
|
+
- **Nav on scroll:** paper background + hairline fade in under the bar after ~24px.
|
|
42
|
+
- **Section/page transitions:** slow cross-fade + gentle rise; consider a brief full-page
|
|
43
|
+
fade on navigation for a "turning the page" feel (keep it fast enough, ≤300ms).
|
|
44
|
+
- **Counters:** editorial figures count up on reveal (final value in DOM).
|
|
45
|
+
- **Marquee (logos):** very slow, linear, pausable — or simply static (luxury often is).
|
|
46
|
+
|
|
47
|
+
## Reduced motion (required)
|
|
48
|
+
|
|
49
|
+
```css
|
|
50
|
+
@media (prefers-reduced-motion: reduce) {
|
|
51
|
+
*, *::before, *::after { animation-duration:.001ms !important;
|
|
52
|
+
animation-iteration-count:1 !important; transition-duration:.001ms !important;
|
|
53
|
+
scroll-behavior:auto !important; }
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
Under reduced motion: show all reveals/headings/images in final state immediately; no
|
|
57
|
+
line-by-line, curtain, parallax, marquee, or page-fade; counters render final value.
|
|
58
|
+
|
|
59
|
+
## Minimal vanilla helpers
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
// reveal (incl. line-by-line headings via [data-lines])
|
|
63
|
+
const io = new IntersectionObserver((es)=>es.forEach(e=>{ if(e.isIntersecting){
|
|
64
|
+
const el=e.target;
|
|
65
|
+
if(el.hasAttribute('data-lines')){
|
|
66
|
+
el.querySelectorAll('.line').forEach((ln,i)=> ln.style.transitionDelay = `${i*90}ms`);
|
|
67
|
+
}
|
|
68
|
+
el.classList.add('in'); io.unobserve(el);
|
|
69
|
+
}}, {threshold:.2}));
|
|
70
|
+
document.querySelectorAll('[data-reveal],[data-lines]').forEach(el=>io.observe(el));
|
|
71
|
+
```
|
|
72
|
+
```css
|
|
73
|
+
[data-reveal]{ opacity:0; transform: translateY(24px);
|
|
74
|
+
transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); }
|
|
75
|
+
[data-reveal].in{ opacity:1; transform:none; }
|
|
76
|
+
[data-lines] .line{ display:block; opacity:0; transform: translateY(0.5em);
|
|
77
|
+
transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out); }
|
|
78
|
+
[data-lines].in .line{ opacity:1; transform:none; }
|
|
79
|
+
.plate img{ clip-path: inset(0 0 100% 0); transform: scale(1.05);
|
|
80
|
+
transition: clip-path var(--dur-slower) var(--ease-editorial), transform var(--dur-slower) var(--ease-editorial); }
|
|
81
|
+
.plate.in img{ clip-path: inset(0 0 0 0); transform: scale(1); }
|
|
82
|
+
```
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Spacing System — Editorial Luxury
|
|
2
|
+
|
|
3
|
+
A strict **4-point base / 8-point rhythm** with **dramatic, magazine-grade whitespace** and
|
|
4
|
+
**generous outer margins**. Space + the editorial grid + paper tone separate content —
|
|
5
|
+
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
|
+
--space-48: 192px; --space-56: 224px; /* editorial XL whitespace */
|
|
17
|
+
|
|
18
|
+
/* Radii — luxury leans crisp: small radii or none; insets soft */
|
|
19
|
+
--radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --radius-xl: 16px;
|
|
20
|
+
--radius-pill: 999px;
|
|
21
|
+
|
|
22
|
+
/* Containers — editorial measures */
|
|
23
|
+
--container-text: 680px; /* reading column / prose measure */
|
|
24
|
+
--container-md: 840px;
|
|
25
|
+
--container-lg: 1040px;
|
|
26
|
+
--container-xl: 1200px;
|
|
27
|
+
--container-2xl: 1360px; /* wide editorial spreads / full-bleed insets */
|
|
28
|
+
--margin: clamp(24px, 7vw, 120px); /* generous editorial outer margin */
|
|
29
|
+
|
|
30
|
+
/* Section rhythm (fluid, dramatic) */
|
|
31
|
+
--section-y: clamp(80px, 11vw, 176px);
|
|
32
|
+
--section-y-lg: clamp(112px, 15vw, 240px); /* hero / chapter openers */
|
|
33
|
+
--stack: clamp(16px, 2vw, 24px);
|
|
34
|
+
--col-gap: clamp(24px, 4vw, 72px); /* gap between editorial columns */
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Usage map
|
|
39
|
+
|
|
40
|
+
- **4-pt system** (`--space-1..6`): inside components — kicker↔headline, caption gaps,
|
|
41
|
+
button/badge padding, list-item gaps, rule margins.
|
|
42
|
+
- **8-pt system** (`--space-8..16`): between elements — headline↔deck, deck↔body, image↔
|
|
43
|
+
caption, form rows.
|
|
44
|
+
- **Editorial XL** (`--space-20..56`): the dramatic gaps that define luxury — around heroes,
|
|
45
|
+
between a quote and the next block, framing full-bleed images.
|
|
46
|
+
- **Outer margin** (`--margin`): generous, fluid side margins (up to ~120px) — content sits
|
|
47
|
+
inset from the page edge, magazine-style. Full-bleed images may break to the edge.
|
|
48
|
+
- **Container widths:** prose at `--container-text` (680, ~66ch); standard sections
|
|
49
|
+
`--container-lg/xl`; wide spreads `--container-2xl`.
|
|
50
|
+
- **Section spacing:** `padding-block: var(--section-y)`; hero/chapter openers
|
|
51
|
+
`--section-y-lg`. This big rhythm is the luxury signal.
|
|
52
|
+
- **Page spacing:** sections stack with no extra margins and **no borders/dividers** —
|
|
53
|
+
`--section-y` whitespace + alternating paper tone separate them.
|
|
54
|
+
|
|
55
|
+
## Rules
|
|
56
|
+
|
|
57
|
+
1. **Only use scale values.** No arbitrary `13px`/`27px`.
|
|
58
|
+
2. **Be generous.** When unsure, add space. Cramped layouts kill the luxury feel.
|
|
59
|
+
3. **Asymmetric margins are fine.** The editorial grid often offsets content; keep the
|
|
60
|
+
*system* (gaps/margins from tokens) even when the composition is asymmetric.
|
|
61
|
+
4. **Prose measure 62–75ch.** Never run body text full width; cap with `--container-text`.
|
|
62
|
+
5. **Whitespace + paper tone > dividers.** Separate sections with space and tone, never lines.
|
|
63
|
+
|
|
64
|
+
## Helpers
|
|
65
|
+
|
|
66
|
+
```css
|
|
67
|
+
.container { width:100%; max-width: var(--container-xl);
|
|
68
|
+
margin-inline:auto; padding-inline: var(--margin); }
|
|
69
|
+
.container--text { max-width: var(--container-text); } /* reading column */
|
|
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
|
+
.section--bone { background: var(--paper-bone); } /* alternate paper tone, not a line */
|
|
74
|
+
.section--ink { background: var(--paper-ink); color: var(--text-on-ink); } /* dark plate */
|
|
75
|
+
.stack > * + * { margin-top: var(--stack); }
|
|
76
|
+
.bleed { width: 100vw; margin-inline: calc(50% - 50vw); } /* full-bleed image break-out */
|
|
77
|
+
```
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Typography System — Editorial Luxury
|
|
2
|
+
|
|
3
|
+
Typography **is** this system. A high-contrast **serif display** family carries headlines,
|
|
4
|
+
pull quotes, and decks; a clean **sans** (or a refined serif) handles UI/body. The scale is
|
|
5
|
+
dramatic, the details are fine, and the craft is the point.
|
|
6
|
+
|
|
7
|
+
## Fonts
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root {
|
|
11
|
+
/* Serif display — expressive, high-contrast (the signature) */
|
|
12
|
+
--font-serif: "Canela", "GT Sectra", "Tiempos Headline", "Freight Display",
|
|
13
|
+
"Playfair Display", "Cormorant Garamond", Georgia, "Times New Roman", serif;
|
|
14
|
+
/* Sans — clean, neutral for UI/body */
|
|
15
|
+
--font-sans: "Inter", "Geist", "Söhne", -apple-system, BlinkMacSystemFont,
|
|
16
|
+
"Helvetica Neue", Arial, sans-serif;
|
|
17
|
+
/* Optional refined serif for long-read body */
|
|
18
|
+
--font-serif-text: "Tiempos Text", "Lyon Text", "Newsreader", Georgia, serif;
|
|
19
|
+
--font-mono: "Geist Mono", "JetBrains Mono", ui-monospace, Menlo, monospace;
|
|
20
|
+
|
|
21
|
+
--font-display: var(--font-serif); /* headlines + display */
|
|
22
|
+
--font-body: var(--font-sans); /* body/UI (or --font-serif-text for editorial long-reads) */
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
Notes:
|
|
26
|
+
- Prefer a real high-contrast display serif (Canela, GT Sectra, Tiempos Headline, Freight).
|
|
27
|
+
Free fallbacks: **Playfair Display**, **Cormorant Garamond**, **Newsreader**, Georgia.
|
|
28
|
+
- Pair the serif display with a quiet sans for UI so the serif stays special.
|
|
29
|
+
- For magazine long-reads, set body in `--font-serif-text` instead of sans.
|
|
30
|
+
|
|
31
|
+
## Fluid type scale (clamp) — dramatic
|
|
32
|
+
|
|
33
|
+
```css
|
|
34
|
+
:root {
|
|
35
|
+
--fs-display: clamp(3rem, 1.6rem + 6.4vw, 6.5rem); /* 48 → 104px editorial hero */
|
|
36
|
+
--fs-h1: clamp(2.5rem, 1.6rem + 4vw, 4.5rem); /* 40 → 72px */
|
|
37
|
+
--fs-h2: clamp(2rem, 1.4rem + 2.6vw, 3.25rem); /* 32 → 52px */
|
|
38
|
+
--fs-h3: clamp(1.5rem, 1.2rem + 1.4vw, 2.125rem); /* 24 → 34px */
|
|
39
|
+
--fs-h4: clamp(1.25rem, 1.1rem + 0.6vw, 1.5rem); /* 20 → 24px */
|
|
40
|
+
--fs-deck: clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem);/* 20 → 26px standfirst/deck */
|
|
41
|
+
--fs-quote: clamp(1.75rem, 1.3rem + 2vw, 2.75rem); /* 28 → 44px pull quote */
|
|
42
|
+
--fs-lead: clamp(1.125rem, 1.04rem + 0.45vw, 1.375rem);/* 18 → 22px */
|
|
43
|
+
--fs-body: 1.0625rem; /* 17px base (comfortable reading) */
|
|
44
|
+
--fs-body-lg: 1.1875rem; /* 19px long-read */
|
|
45
|
+
--fs-small: 0.875rem; /* 14px caption */
|
|
46
|
+
--fs-kicker: 0.75rem; /* 12px small-caps kicker */
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Roles (each: family · weight · line-height · tracking)
|
|
51
|
+
|
|
52
|
+
| Role | Family | Size | Weight | LH | Tracking |
|
|
53
|
+
|---|---|---|---|---|---|
|
|
54
|
+
| **Display** (hero) | serif | `--fs-display` | 400–500 | 1.02–1.06 | -0.01em to -0.02em |
|
|
55
|
+
| **H1** | serif | `--fs-h1` | 400–500 | 1.06 | -0.015em |
|
|
56
|
+
| **H2** (section) | serif | `--fs-h2` | 500 | 1.1 | -0.01em |
|
|
57
|
+
| **H3** | serif | `--fs-h3` | 500 | 1.2 | -0.005em |
|
|
58
|
+
| **H4** | serif/sans | `--fs-h4` | 500–600 | 1.3 | 0 |
|
|
59
|
+
| **Kicker / eyebrow** | sans | `--fs-kicker` | 600 | 1.2 | 0.16em, UPPERCASE (small-caps) |
|
|
60
|
+
| **Deck / standfirst** | serif/sans | `--fs-deck` | 400 | 1.4 | 0 |
|
|
61
|
+
| **Pull quote** | serif | `--fs-quote` | 400 | 1.2 | -0.01em, often italic |
|
|
62
|
+
| **Lead** | sans/serif | `--fs-lead` | 400 | 1.5 | 0 |
|
|
63
|
+
| **Body** | sans or serif-text | `--fs-body`/`-lg` | 400 | 1.65–1.75 | 0 |
|
|
64
|
+
| **Caption / credit** | sans | `--fs-small` | 400 (credit italic) | 1.45 | 0.01em |
|
|
65
|
+
| **Button** | sans | `--fs-body` (`0.9375rem`) | 600 | 1 | 0.01em |
|
|
66
|
+
| **Navigation** | sans | `--fs-small`/`--fs-body` | 500 | 1 | 0.02em |
|
|
67
|
+
| **Pricing amount** | serif | `clamp(2.5rem,2rem+2vw,3.75rem)` | 400–500 | 1 | -0.01em |
|
|
68
|
+
|
|
69
|
+
## Editorial type rules (the craft)
|
|
70
|
+
|
|
71
|
+
1. **Serif headlines, light weight.** High-contrast display serifs look best at **400–500**
|
|
72
|
+
weight (not bold) at large sizes — let the contrast of the letterforms carry it.
|
|
73
|
+
2. **Generous leading on body.** Body line-height **1.65–1.75**; measure **62–75ch**
|
|
74
|
+
(`max-width: 68ch`). Long reads can use `--font-serif-text`.
|
|
75
|
+
3. **Kickers are small-caps + tracked.** Uppercase, ~0.16em tracking, muted or accent,
|
|
76
|
+
with a hairline rule under them.
|
|
77
|
+
4. **Drop cap** (one per page max): oversized serif initial on a key opening paragraph
|
|
78
|
+
(`p.has-dropcap::first-letter`).
|
|
79
|
+
5. **Pull quotes** break the column in large italic serif with a hairline above; keep them short.
|
|
80
|
+
6. **Hanging punctuation / true quotes/dashes.** Use proper "" '' — – characters; enable
|
|
81
|
+
`font-feature-settings` ligatures/oldstyle figures where the face supports them.
|
|
82
|
+
7. **One display moment per page** (the hero). Don't make every heading enormous.
|
|
83
|
+
8. **Numbers** in stats/pricing can use oldstyle or tabular figures (`font-variant-numeric`).
|
|
84
|
+
|
|
85
|
+
## Base CSS
|
|
86
|
+
|
|
87
|
+
```css
|
|
88
|
+
body { font-family: var(--font-body); font-size: var(--fs-body); line-height: 1.7;
|
|
89
|
+
color: var(--text-secondary); -webkit-font-smoothing: antialiased;
|
|
90
|
+
text-rendering: optimizeLegibility; font-feature-settings: "liga","kern"; }
|
|
91
|
+
h1,h2,h3 { font-family: var(--font-serif); color: var(--ink); font-weight: 500;
|
|
92
|
+
text-wrap: balance; letter-spacing: -0.015em; }
|
|
93
|
+
h1 { font-size: var(--fs-h1); line-height: 1.06; font-weight: 450; }
|
|
94
|
+
.kicker { font-family: var(--font-sans); font-size: var(--fs-kicker); font-weight:600;
|
|
95
|
+
letter-spacing:.16em; text-transform:uppercase; color: var(--text-muted); }
|
|
96
|
+
.kicker::after { content:""; display:block; width:40px; height:1px;
|
|
97
|
+
background: var(--rule-default); margin-top: var(--space-3); }
|
|
98
|
+
.deck { font-size: var(--fs-deck); color: var(--text-secondary); max-width: 56ch; }
|
|
99
|
+
.pull-quote { font-family: var(--font-serif); font-size: var(--fs-quote); font-style: italic;
|
|
100
|
+
line-height:1.2; color: var(--ink); max-width: 24ch; }
|
|
101
|
+
.has-dropcap::first-letter { font-family: var(--font-serif); float:left; font-size: 3.4em;
|
|
102
|
+
line-height:.8; padding-right:.08em; color: var(--ink); }
|
|
103
|
+
figcaption { font-size: var(--fs-small); color: var(--text-muted); }
|
|
104
|
+
figcaption .credit { font-style: italic; }
|
|
105
|
+
a { color: var(--accent); text-underline-offset: 3px; text-decoration-thickness: 1px; }
|
|
106
|
+
p { max-width: 68ch; }
|
|
107
|
+
```
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Website Generation Rules — Editorial Luxury
|
|
2
|
+
|
|
3
|
+
How an agent turns this design system into a **production-ready, multi-page, editorial
|
|
4
|
+
luxury website**. Output clean, semantic **pure HTML + CSS + vanilla JavaScript** plus
|
|
5
|
+
design tokens. The signature: serif display type, an asymmetric editorial grid, dramatic
|
|
6
|
+
whitespace, and impeccable typographic craft. (The token/spec system can be exported for
|
|
7
|
+
other agents — see below — but the generated website itself is always pure vanilla.)
|
|
8
|
+
|
|
9
|
+
## Technology stack (MANDATORY — no frameworks, no libraries)
|
|
10
|
+
|
|
11
|
+
Build everything with **HTML5 + CSS3 + vanilla JavaScript only**. The generated site must
|
|
12
|
+
contain **zero** of:
|
|
13
|
+
|
|
14
|
+
> ❌ React · ❌ Vue · ❌ Angular · ❌ Svelte/Next/Nuxt · ❌ Bootstrap · ❌ Tailwind ·
|
|
15
|
+
> ❌ jQuery · ❌ any UI library · ❌ any CSS framework · ❌ any JS animation/utility library
|
|
16
|
+
|
|
17
|
+
No build step, no npm dependencies, no CDN kits. The editorial grid is CSS Grid; reveals/
|
|
18
|
+
line-by-line type/image curtains are native CSS + `IntersectionObserver`. Exporting
|
|
19
|
+
`tokens.json` for other agents is allowed; shipping the site in a framework is not.
|
|
20
|
+
|
|
21
|
+
## Mandatory scale & structure (read first)
|
|
22
|
+
- **Multipage: build 15+ pages (recommended ~20)** — a full site map, not one page.
|
|
23
|
+
- **Every page has at least 10 sections (recommend 12)** from the layouts/components.
|
|
24
|
+
- **No borders or dividers between sections** — separate with **whitespace, alternating
|
|
25
|
+
paper tone (`--paper`/`--paper-bone`/occasional `--paper-ink` plate), and type hierarchy**.
|
|
26
|
+
In CSS: `.section { border: 0 }`; never `<hr>`/divider or `border-top/bottom` between
|
|
27
|
+
sections. (Editorial **hairline rules** are allowed *inside* compositions — under kickers,
|
|
28
|
+
between index/FAQ rows, in the footer — never as a divider between page sections.)
|
|
29
|
+
- **Clean, extensionless, Vercel-ready URLs** (`/pricing`, not `/pricing.html`).
|
|
30
|
+
|
|
31
|
+
## Required pages (build all — 15+; ~20 recommended)
|
|
32
|
+
Home `/` · Platform `/platform` · Solutions `/solutions` · Products `/products` ·
|
|
33
|
+
Features `/features` · AI Agents `/ai-agents` · Enterprise `/enterprise` · Security
|
|
34
|
+
`/security` · Pricing `/pricing` · Customers `/customers` · Case Studies `/case-studies`
|
|
35
|
+
· Developers `/developers` · Documentation `/docs` · About `/about` · Careers `/careers`
|
|
36
|
+
· Blog (Journal) `/journal` · Contact `/contact` · Partners `/partners` · Resources
|
|
37
|
+
`/resources` · FAQ `/faq`. (For brand sites you may rename to Story/Craft/Collection/
|
|
38
|
+
Journal/Press, but still ship 15+ pages.) Add subpages freely.
|
|
39
|
+
|
|
40
|
+
## Required sections (every page — ≥10, recommend 12)
|
|
41
|
+
Hero (editorial) · Feature/Story Sections · Product Highlights (plates) · Trust Signals
|
|
42
|
+
(logos/press) · Testimonials (pull quotes) · Use Cases · Statistics (editorial figures) ·
|
|
43
|
+
Integrations · CTA (chapter opener) · Footer. Add more (Security, Enterprise, Index, Pull
|
|
44
|
+
Quote, Pricing, FAQ) to reach 12.
|
|
45
|
+
|
|
46
|
+
## Site types this must support
|
|
47
|
+
Landing pages · startup websites · AI company websites · enterprise SaaS · developer
|
|
48
|
+
platforms · agentic-AI startups · infrastructure startups · brand/publication sites. (See
|
|
49
|
+
`example-page-structures.md`.)
|
|
50
|
+
|
|
51
|
+
## What to generate
|
|
52
|
+
- **HTML** — semantic, accessible, one file per page; figures with captions/credits.
|
|
53
|
+
- **CSS** — `tokens.css` (`:root` vars) + `styles.css` (base + editorial grid + components).
|
|
54
|
+
- **JavaScript** — vanilla: nav/menu, scroll reveal, line-by-line headings, image curtains,
|
|
55
|
+
accordion, tabs, toggle, copy, counters. Usable without JS.
|
|
56
|
+
- **`vercel.json`** + **`sitemap.xml`** + **`robots.txt`**.
|
|
57
|
+
- **Design tokens** — `tokens.json` (token export only).
|
|
58
|
+
- **Component specifications** — when asked for the *system*, emit component markup + token
|
|
59
|
+
usage from `component-library.md`.
|
|
60
|
+
- **Accessibility + responsive guidance** inline (comments) and honored.
|
|
61
|
+
|
|
62
|
+
## File/output layout (default — flat files + clean URLs)
|
|
63
|
+
```
|
|
64
|
+
website/
|
|
65
|
+
├── index.html # served at /
|
|
66
|
+
├── platform.html solutions.html products.html features.html ai-agents.html
|
|
67
|
+
├── enterprise.html security.html pricing.html customers.html case-studies.html
|
|
68
|
+
├── developers.html docs.html about.html careers.html journal.html contact.html
|
|
69
|
+
├── partners.html resources.html faq.html
|
|
70
|
+
├── css/ { tokens.css, styles.css }
|
|
71
|
+
├── js/ { main.js } # nav, reveal, line-headings, curtains, accordion, copy
|
|
72
|
+
├── assets/ # editorial imagery, icons, og images, fonts (if self-hosting)
|
|
73
|
+
├── tokens.json
|
|
74
|
+
├── sitemap.xml robots.txt
|
|
75
|
+
└── vercel.json
|
|
76
|
+
```
|
|
77
|
+
Alternative: folder-per-page `platform/index.html`. Either way **all internal links are
|
|
78
|
+
extensionless** (`href="/pricing"`).
|
|
79
|
+
|
|
80
|
+
## Clean URLs & Vercel (MANDATORY)
|
|
81
|
+
- **No `.html` in any URL**, no `page.html` links, no ugly query params.
|
|
82
|
+
- Emit **`vercel.json`** so `.html` is stripped, refresh works, and deep links resolve:
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"cleanUrls": true,
|
|
86
|
+
"trailingSlash": false,
|
|
87
|
+
"headers": [
|
|
88
|
+
{ "source": "/assets/(.*)", "headers": [
|
|
89
|
+
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } ] }
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
`cleanUrls: true` serves `platform.html` at `/platform` and 301-redirects `.html`.
|
|
94
|
+
Provide a `404.html`. Every nav/footer/internal link is extensionless.
|
|
95
|
+
|
|
96
|
+
## Navigation system (vanilla JS)
|
|
97
|
+
- **Desktop nav** = slim quiet bar with an optional refined **dropdown** (clean paper panel,
|
|
98
|
+
hairline-separated columns); keyboard + `aria-expanded`/`aria-haspopup`.
|
|
99
|
+
- **Mobile nav**: full-screen paper overlay, serif links, generous spacing, focus-trap, ESC.
|
|
100
|
+
- **Multi-level nav** + **breadcrumbs** on deep pages (journal/case studies/docs);
|
|
101
|
+
`aria-current="page"`.
|
|
102
|
+
|
|
103
|
+
## Hard rules
|
|
104
|
+
1. **Vanilla only.** No frameworks/libraries in the shipped site.
|
|
105
|
+
2. **Editorial craft.** Serif display headlines; asymmetric editorial grid; dramatic
|
|
106
|
+
whitespace; kickers/decks/pull quotes/captions; understated CTAs (never loud gradients).
|
|
107
|
+
3. **Tokens first, once.** All colors/type/spacing as `:root` vars; no scattered hex/px;
|
|
108
|
+
rebrand = change `--accent-*` (single accent).
|
|
109
|
+
4. **No section borders.** Separate with whitespace + paper tone. `.section{border:0}`;
|
|
110
|
+
hairlines only *inside* compositions.
|
|
111
|
+
5. **Mobile-first + responsive**; asymmetric grid → single well-spaced column by `md`; no
|
|
112
|
+
320px scroll; prose measure capped (62–75ch).
|
|
113
|
+
6. **Semantic + accessible** per `accessibility-system.md` (figure/blockquote/ol, contrast
|
|
114
|
+
on warm neutrals, cover-text scrims, focus, reduced motion). Non-negotiable.
|
|
115
|
+
7. **Components from the library** (editorial). Every component: responsive, accessible,
|
|
116
|
+
reusable, production-ready, animation-ready.
|
|
117
|
+
8. **Performance:** self-host or `font-display: swap` the serif (and subset it); lazy-load
|
|
118
|
+
below-the-fold imagery (`loading="lazy"`); animate transform/opacity/clip-path only;
|
|
119
|
+
minimal JS, no libraries; high Lighthouse (90+).
|
|
120
|
+
9. **SEO on every page** (below). **Real, considered copy** (kickers/decks/captions written
|
|
121
|
+
like an editor); mark guesses `[PLACEHOLDER]`.
|
|
122
|
+
10. **Self-verify** against anti-patterns + every companion checklist before done.
|
|
123
|
+
|
|
124
|
+
## SEO requirements (every page)
|
|
125
|
+
Unique `<title>` + meta description (150–160); **Open Graph** + **Twitter card**
|
|
126
|
+
(`summary_large_image`) + OG image; **canonical** (clean URL); **JSON-LD** (`Organization`
|
|
127
|
+
+ `WebSite` site-wide; `Article`/`NewsArticle` for journal, `Product`, `FAQPage`,
|
|
128
|
+
`BreadcrumbList` where relevant); **`sitemap.xml`** + **`robots.txt`**.
|
|
129
|
+
|
|
130
|
+
## Performance requirements
|
|
131
|
+
Fast first paint, minimal vanilla JS, subset/self-hosted serif with `swap`, optimized/
|
|
132
|
+
centralized CSS, lazy imagery, cached assets (via `vercel.json`), no blocking libraries.
|
|
133
|
+
|
|
134
|
+
## Boilerplate `<head>`
|
|
135
|
+
```html
|
|
136
|
+
<!doctype html><html lang="en"><head>
|
|
137
|
+
<meta charset="utf-8">
|
|
138
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
139
|
+
<meta name="color-scheme" content="light dark">
|
|
140
|
+
<title><!-- Page · Brand --></title>
|
|
141
|
+
<meta name="description" content="<!-- 150–160 chars -->">
|
|
142
|
+
<link rel="canonical" href="https://brand.com/path">
|
|
143
|
+
<meta property="og:type" content="website">
|
|
144
|
+
<meta property="og:title" content="<!-- Page · Brand -->">
|
|
145
|
+
<meta property="og:description" content="<!-- … -->">
|
|
146
|
+
<meta property="og:url" content="https://brand.com/path">
|
|
147
|
+
<meta property="og:image" content="https://brand.com/assets/og.png">
|
|
148
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
149
|
+
<link rel="stylesheet" href="/css/tokens.css">
|
|
150
|
+
<link rel="stylesheet" href="/css/styles.css">
|
|
151
|
+
<script type="application/ld+json"><!-- Organization / WebSite JSON-LD --></script>
|
|
152
|
+
</head>
|
|
153
|
+
<body>
|
|
154
|
+
<a class="skip-link" href="#main">Skip to content</a>
|
|
155
|
+
<header><!-- Navbar (links extensionless: /about, /pricing) --></header>
|
|
156
|
+
<main id="main"><!-- editorial hero + 10–12 sections, alternating paper tone, no dividers --></main>
|
|
157
|
+
<footer><!-- Editorial footer --></footer>
|
|
158
|
+
<script src="/js/main.js" defer></script>
|
|
159
|
+
</body></html>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Required base CSS (no section borders; paper tone)
|
|
163
|
+
```css
|
|
164
|
+
html, body { background: var(--paper); color: var(--text-secondary); }
|
|
165
|
+
.section { padding-block: var(--section-y); border: 0; } /* no borders/dividers between sections */
|
|
166
|
+
.section--bone { background: var(--paper-bone); } /* alternate paper tone by COLOR, not lines */
|
|
167
|
+
.section--ink { background: var(--paper-ink); color: var(--text-on-ink); }
|
|
168
|
+
.section + .section { border-top: 0; } /* explicitly: no rule between sections */
|
|
169
|
+
/* Separation = whitespace (--section-y) + paper tone + type hierarchy.
|
|
170
|
+
Editorial hairlines live INSIDE compositions (kickers, lists, footer), never between sections. */
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## tokens.json shape (excerpt)
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"color": { "paper": {"base":"#faf8f3","bone":"#f4f1ea","ink":"#1a1814"},
|
|
177
|
+
"text": {"ink":"#17150f","primary":"#221f18","secondary":"#4a463c","muted":"#726c5e"},
|
|
178
|
+
"rule":"rgba(23,21,15,0.18)", "accent":"#7a2e2e", "gold":"#9a7b2e" },
|
|
179
|
+
"space": { "8":"32px","16":"64px","24":"96px","40":"160px" },
|
|
180
|
+
"container": { "text":"680px","xl":"1200px" },
|
|
181
|
+
"type": { "serif":"Canela, 'Playfair Display', Georgia, serif",
|
|
182
|
+
"display":"clamp(3rem,1.6rem + 6.4vw,6.5rem)", "body":"1.0625rem" }
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Definition of done
|
|
187
|
+
**15+ pages (≈20), each with ≥10 sections (≈12), composed on the asymmetric editorial grid
|
|
188
|
+
with serif display type and dramatic whitespace, no borders/dividers between sections.**
|
|
189
|
+
Pure HTML/CSS/vanilla JS (no frameworks/libraries); clean extensionless URLs with
|
|
190
|
+
`vercel.json` (refresh + deep links work); refined desktop nav + mobile + breadcrumb;
|
|
191
|
+
per-page SEO + sitemap; tokens centralized; fully responsive (graceful grid reflow); AA
|
|
192
|
+
accessible (warm-neutral contrast, cover-text scrims, semantics); quiet elegant motion with
|
|
193
|
+
reduced-motion fallback; high Lighthouse; zero anti-patterns; could sit next to Aesop/
|
|
194
|
+
Hermès/Kinfolk/Stripe Press without looking like a template.
|