@stylecrib/cli 0.0.0-stage → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -2
- package/agents/MANIFEST.yml +136 -0
- package/agents/README.md +75 -0
- package/agents/art-director.md +168 -0
- package/agents/audacity-director.md +109 -0
- package/agents/brand-identity.md +179 -0
- package/agents/brand-precedent.md +119 -0
- package/agents/brief-enforcer.md +136 -0
- package/agents/component-qa.md +167 -0
- package/agents/cto.md +49 -0
- package/agents/design-director.md +184 -0
- package/agents/design-systems-engineer.md +162 -0
- package/agents/direction-curator.md +133 -0
- package/agents/homogeneity-detector.md +104 -0
- package/agents/logo-designer.md +240 -0
- package/agents/marketing-designer.md +156 -0
- package/agents/media-curator.md +165 -0
- package/agents/motion-engineer.md +270 -0
- package/agents/qa-conductor.md +143 -0
- package/agents/render-qa.md +133 -0
- package/agents/upgrade-simulator.md +123 -0
- package/agents/vp-architecture.md +49 -0
- package/agents/vp-engineering.md +49 -0
- package/dist/index.js +7182 -0
- package/package.json +69 -4
- package/themes/README.md +70 -0
- package/themes/acrylic-soft/THEME.md +142 -0
- package/themes/acrylic-soft/tokens.ts +180 -0
- package/themes/agency-creative/THEME.md +91 -0
- package/themes/agency-creative/tokens.ts +202 -0
- package/themes/agency-portfolio/THEME.md +109 -0
- package/themes/agency-portfolio/tokens.ts +159 -0
- package/themes/ai-startup/THEME.md +95 -0
- package/themes/ai-startup/tokens.ts +162 -0
- package/themes/airline-modern/THEME.md +104 -0
- package/themes/airline-modern/tokens.ts +179 -0
- package/themes/arc-stack/.anchor-render.png +0 -0
- package/themes/arc-stack/THEME.md +125 -0
- package/themes/arc-stack/audit.log.jsonl +6 -0
- package/themes/arc-stack/dismissals.jsonl +3 -0
- package/themes/arc-stack/tailwind.snippet.ts +17 -0
- package/themes/arc-stack/theme.yml +153 -0
- package/themes/arc-stack/tokens.ts +29 -0
- package/themes/architectural/THEME.md +102 -0
- package/themes/architectural/tokens.ts +159 -0
- package/themes/atelier-radiance/THEME.md +93 -0
- package/themes/atelier-radiance/audit.log.jsonl +1 -0
- package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
- package/themes/atelier-radiance/theme.yml +130 -0
- package/themes/atelier-radiance/tokens.ts +29 -0
- package/themes/automotive-ev/THEME.md +87 -0
- package/themes/automotive-ev/tokens.ts +183 -0
- package/themes/automotive-luxury/THEME.md +88 -0
- package/themes/automotive-luxury/tokens.ts +175 -0
- package/themes/baby-modern/THEME.md +79 -0
- package/themes/baby-modern/tokens.ts +184 -0
- package/themes/banking-gravity/THEME.md +171 -0
- package/themes/banking-gravity/tokens.ts +169 -0
- package/themes/beauty-clean/THEME.md +92 -0
- package/themes/beauty-clean/tokens.ts +176 -0
- package/themes/beauty-luxury/THEME.md +96 -0
- package/themes/beauty-luxury/tokens.ts +178 -0
- package/themes/bento-modular/.anchor-render.png +0 -0
- package/themes/bento-modular/BUILD_BRIEF.md +171 -0
- package/themes/bento-modular/THEME.md +80 -0
- package/themes/bento-modular/audit.log.jsonl +3 -0
- package/themes/bento-modular/dismissals.jsonl +1 -0
- package/themes/bento-modular/tailwind.snippet.ts +17 -0
- package/themes/bento-modular/theme.yml +83 -0
- package/themes/bento-modular/tokens.ts +27 -0
- package/themes/bookstore-indie/THEME.md +78 -0
- package/themes/bookstore-indie/tokens.ts +147 -0
- package/themes/brutalist/THEME.md +96 -0
- package/themes/brutalist/tokens.ts +151 -0
- package/themes/business-tiles/THEME.md +141 -0
- package/themes/business-tiles/tokens.ts +178 -0
- package/themes/cabana-poster/THEME.md +158 -0
- package/themes/cabana-poster/audit.log.jsonl +1 -0
- package/themes/cabana-poster/tailwind.snippet.ts +16 -0
- package/themes/cabana-poster/theme.yml +221 -0
- package/themes/cabana-poster/tokens.ts +34 -0
- package/themes/case-panel/THEME.md +126 -0
- package/themes/case-panel/audit.log.jsonl +2 -0
- package/themes/case-panel/tailwind.snippet.ts +15 -0
- package/themes/case-panel/theme.yml +153 -0
- package/themes/case-panel/tokens.ts +28 -0
- package/themes/cinematic-dark/THEME.md +97 -0
- package/themes/cinematic-dark/tokens.ts +195 -0
- package/themes/classic-car/THEME.md +86 -0
- package/themes/classic-car/tokens.ts +173 -0
- package/themes/cloud-friendly/THEME.md +152 -0
- package/themes/cloud-friendly/tokens.ts +181 -0
- package/themes/community-niche/THEME.md +102 -0
- package/themes/community-niche/tokens.ts +177 -0
- package/themes/corporate-grid/THEME.md +154 -0
- package/themes/corporate-grid/tokens.ts +182 -0
- package/themes/couture-luxury/THEME.md +85 -0
- package/themes/couture-luxury/tokens.ts +146 -0
- package/themes/creator-social/THEME.md +131 -0
- package/themes/creator-social/tokens.ts +249 -0
- package/themes/crypto-onchain/THEME.md +100 -0
- package/themes/crypto-onchain/tokens.ts +207 -0
- package/themes/cycling-brand/THEME.md +78 -0
- package/themes/cycling-brand/tokens.ts +185 -0
- package/themes/dating-friendly/THEME.md +102 -0
- package/themes/dating-friendly/tokens.ts +178 -0
- package/themes/dense-utility/THEME.md +85 -0
- package/themes/dense-utility/tokens.ts +155 -0
- package/themes/devtool-cli/THEME.md +100 -0
- package/themes/devtool-cli/tokens.ts +195 -0
- package/themes/devtool-docs/THEME.md +105 -0
- package/themes/devtool-docs/tokens.ts +177 -0
- package/themes/editorial/THEME.md +129 -0
- package/themes/editorial/audit.log.jsonl +2 -0
- package/themes/editorial/tailwind.snippet.ts +15 -0
- package/themes/editorial/theme.yml +173 -0
- package/themes/editorial/tokens.ts +29 -0
- package/themes/education-formal/THEME.md +154 -0
- package/themes/education-formal/audit.log.jsonl +1 -0
- package/themes/education-formal/tailwind.snippet.ts +15 -0
- package/themes/education-formal/theme.yml +186 -0
- package/themes/education-formal/tokens.ts +29 -0
- package/themes/education-warm/THEME.md +91 -0
- package/themes/education-warm/tokens.ts +185 -0
- package/themes/ember-poster/README.md +79 -0
- package/themes/ember-poster/THEME.md +101 -0
- package/themes/ember-poster/audit.log.jsonl +17 -0
- package/themes/ember-poster/package.json +34 -0
- package/themes/ember-poster/tailwind.snippet.ts +17 -0
- package/themes/ember-poster/theme.yml +109 -0
- package/themes/ember-poster/tokens.ts +27 -0
- package/themes/enterprise-cloud/THEME.md +139 -0
- package/themes/enterprise-cloud/tokens.ts +179 -0
- package/themes/enterprise-tech/.anchor-render.png +0 -0
- package/themes/enterprise-tech/THEME.md +167 -0
- package/themes/enterprise-tech/audit.log.jsonl +1 -0
- package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
- package/themes/enterprise-tech/theme.yml +202 -0
- package/themes/enterprise-tech/tokens.ts +29 -0
- package/themes/ev-charging/THEME.md +94 -0
- package/themes/ev-charging/tokens.ts +185 -0
- package/themes/farm-direct/THEME.md +92 -0
- package/themes/farm-direct/tokens.ts +180 -0
- package/themes/fintech-card/THEME.md +96 -0
- package/themes/fintech-card/tokens.ts +191 -0
- package/themes/fintech-trust/THEME.md +94 -0
- package/themes/fintech-trust/tokens.ts +192 -0
- package/themes/food-blog/THEME.md +98 -0
- package/themes/food-blog/tokens.ts +183 -0
- package/themes/forum-classic/THEME.md +100 -0
- package/themes/forum-classic/tokens.ts +168 -0
- package/themes/fresh-plate/.anchor-render.png +0 -0
- package/themes/fresh-plate/THEME.md +144 -0
- package/themes/fresh-plate/audit.log.jsonl +2 -0
- package/themes/fresh-plate/dismissals.jsonl +3 -0
- package/themes/fresh-plate/tailwind.snippet.ts +16 -0
- package/themes/fresh-plate/theme.yml +189 -0
- package/themes/fresh-plate/tokens.ts +30 -0
- package/themes/furniture-modern/THEME.md +94 -0
- package/themes/furniture-modern/tokens.ts +176 -0
- package/themes/gaming-esports/THEME.md +146 -0
- package/themes/gaming-esports/tokens.ts +199 -0
- package/themes/gaming-streamer/THEME.md +139 -0
- package/themes/gaming-streamer/tokens.ts +201 -0
- package/themes/glassmorphic-modern/THEME.md +119 -0
- package/themes/glassmorphic-modern/tokens.ts +174 -0
- package/themes/government-civic/THEME.md +138 -0
- package/themes/government-civic/tokens.ts +164 -0
- package/themes/gym-chain/THEME.md +79 -0
- package/themes/gym-chain/tokens.ts +196 -0
- package/themes/healthcare-bright/THEME.md +95 -0
- package/themes/healthcare-bright/tokens.ts +184 -0
- package/themes/home-decor/THEME.md +94 -0
- package/themes/home-decor/tokens.ts +177 -0
- package/themes/hotel-boutique/THEME.md +110 -0
- package/themes/hotel-boutique/tokens.ts +179 -0
- package/themes/hyperminimal-mono/THEME.md +91 -0
- package/themes/hyperminimal-mono/tokens.ts +150 -0
- package/themes/indie-art-game/THEME.md +107 -0
- package/themes/indie-art-game/tokens.ts +216 -0
- package/themes/insurance-legacy/THEME.md +101 -0
- package/themes/insurance-legacy/tokens.ts +182 -0
- package/themes/insurance-modern/THEME.md +103 -0
- package/themes/insurance-modern/tokens.ts +192 -0
- package/themes/kaiju-reveal/THEME.md +97 -0
- package/themes/kaiju-reveal/tokens.ts +185 -0
- package/themes/kinetic-data/THEME.md +172 -0
- package/themes/kinetic-data/audit.log.jsonl +1 -0
- package/themes/kinetic-data/tailwind.snippet.ts +16 -0
- package/themes/kinetic-data/theme.yml +207 -0
- package/themes/kinetic-data/tokens.ts +30 -0
- package/themes/kinetic-headline/.anchor-render.png +0 -0
- package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
- package/themes/kinetic-headline/THEME.md +78 -0
- package/themes/kinetic-headline/audit.log.jsonl +4 -0
- package/themes/kinetic-headline/dismissals.jsonl +1 -0
- package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
- package/themes/kinetic-headline/theme.yml +81 -0
- package/themes/kinetic-headline/tokens.ts +26 -0
- package/themes/law-firm/THEME.md +108 -0
- package/themes/law-firm/tokens.ts +158 -0
- package/themes/lawtech-modern/THEME.md +107 -0
- package/themes/lawtech-modern/tokens.ts +192 -0
- package/themes/linkedin-pro/THEME.md +102 -0
- package/themes/linkedin-pro/tokens.ts +174 -0
- package/themes/logistics-modern/THEME.md +94 -0
- package/themes/logistics-modern/tokens.ts +187 -0
- package/themes/magazine-glossy/THEME.md +74 -0
- package/themes/magazine-glossy/tokens.ts +158 -0
- package/themes/marker-mag/THEME.md +128 -0
- package/themes/marker-mag/audit.log.jsonl +1 -0
- package/themes/marker-mag/tailwind.snippet.ts +15 -0
- package/themes/marker-mag/theme.yml +159 -0
- package/themes/marker-mag/tokens.ts +27 -0
- package/themes/marketplace-modern/THEME.md +135 -0
- package/themes/marketplace-modern/tokens.ts +186 -0
- package/themes/marketplace-vintage/THEME.md +110 -0
- package/themes/marketplace-vintage/tokens.ts +185 -0
- package/themes/maximalist/THEME.md +96 -0
- package/themes/maximalist/tokens.ts +168 -0
- package/themes/mid-century/THEME.md +109 -0
- package/themes/mid-century/tokens.ts +162 -0
- package/themes/motorcycle-brand/THEME.md +86 -0
- package/themes/motorcycle-brand/tokens.ts +174 -0
- package/themes/museum/THEME.md +83 -0
- package/themes/museum/tokens.ts +147 -0
- package/themes/music-streaming/THEME.md +101 -0
- package/themes/music-streaming/tokens.ts +187 -0
- package/themes/music-vinyl/THEME.md +98 -0
- package/themes/music-vinyl/tokens.ts +167 -0
- package/themes/nature-distilled/.anchor-render.png +0 -0
- package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
- package/themes/nature-distilled/THEME.md +81 -0
- package/themes/nature-distilled/audit.log.jsonl +2 -0
- package/themes/nature-distilled/tailwind.snippet.ts +16 -0
- package/themes/nature-distilled/theme.yml +91 -0
- package/themes/nature-distilled/tokens.ts +26 -0
- package/themes/news-tabloid/THEME.md +72 -0
- package/themes/news-tabloid/tokens.ts +158 -0
- package/themes/news-tech/THEME.md +75 -0
- package/themes/news-tech/tokens.ts +149 -0
- package/themes/newsletter/THEME.md +82 -0
- package/themes/newsletter/tokens.ts +138 -0
- package/themes/newspaper-classic/THEME.md +74 -0
- package/themes/newspaper-classic/tokens.ts +159 -0
- package/themes/nonprofit-arts/THEME.md +78 -0
- package/themes/nonprofit-arts/tokens.ts +157 -0
- package/themes/nonprofit-warm/THEME.md +105 -0
- package/themes/nonprofit-warm/tokens.ts +188 -0
- package/themes/outdoor-adventure/THEME.md +113 -0
- package/themes/outdoor-adventure/tokens.ts +181 -0
- package/themes/overland-broadside/THEME.md +119 -0
- package/themes/overland-broadside/audit.log.jsonl +1 -0
- package/themes/overland-broadside/tailwind.snippet.ts +17 -0
- package/themes/overland-broadside/theme.yml +138 -0
- package/themes/overland-broadside/tokens.ts +27 -0
- package/themes/performance-engineered/THEME.md +162 -0
- package/themes/performance-engineered/audit.log.jsonl +1 -0
- package/themes/performance-engineered/tailwind.snippet.ts +15 -0
- package/themes/performance-engineered/theme.yml +193 -0
- package/themes/performance-engineered/tokens.ts +29 -0
- package/themes/pet-food/THEME.md +78 -0
- package/themes/pet-food/tokens.ts +185 -0
- package/themes/pharma-clinical/THEME.md +164 -0
- package/themes/pharma-clinical/audit.log.jsonl +1 -0
- package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
- package/themes/pharma-clinical/theme.yml +201 -0
- package/themes/pharma-clinical/tokens.ts +29 -0
- package/themes/pill-editorial/THEME.md +125 -0
- package/themes/pill-editorial/audit.log.jsonl +1 -0
- package/themes/pill-editorial/tailwind.snippet.ts +15 -0
- package/themes/pill-editorial/theme.yml +168 -0
- package/themes/pill-editorial/tokens.ts +31 -0
- package/themes/podcast-warm/THEME.md +103 -0
- package/themes/podcast-warm/tokens.ts +192 -0
- package/themes/publisher-indie/THEME.md +78 -0
- package/themes/publisher-indie/tokens.ts +148 -0
- package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
- package/themes/raw-concrete/THEME.md +76 -0
- package/themes/raw-concrete/audit.log.jsonl +10 -0
- package/themes/raw-concrete/tailwind.snippet.ts +16 -0
- package/themes/raw-concrete/theme.yml +88 -0
- package/themes/raw-concrete/tokens.ts +27 -0
- package/themes/realestate-luxury/THEME.md +94 -0
- package/themes/realestate-luxury/tokens.ts +169 -0
- package/themes/realestate-marketplace/THEME.md +106 -0
- package/themes/realestate-marketplace/tokens.ts +183 -0
- package/themes/restaurant-modern/THEME.md +109 -0
- package/themes/restaurant-modern/tokens.ts +172 -0
- package/themes/runway-fashion/THEME.md +99 -0
- package/themes/runway-fashion/tokens.ts +167 -0
- package/themes/saturday-morning/THEME.md +117 -0
- package/themes/saturday-morning/tokens.ts +281 -0
- package/themes/schema.ts +235 -0
- package/themes/signal-dark/BUILD_BRIEF.md +168 -0
- package/themes/signal-dark/THEME.md +107 -0
- package/themes/signal-dark/tokens.ts +181 -0
- package/themes/soft-modern/THEME.md +91 -0
- package/themes/soft-modern/tokens.ts +166 -0
- package/themes/solar-residential/THEME.md +92 -0
- package/themes/solar-residential/tokens.ts +176 -0
- package/themes/sports-league/THEME.md +180 -0
- package/themes/sports-league/audit.log.jsonl +1 -0
- package/themes/sports-league/tailwind.snippet.ts +15 -0
- package/themes/sports-league/theme.yml +213 -0
- package/themes/sports-league/tokens.ts +32 -0
- package/themes/stadium-sport/THEME.md +114 -0
- package/themes/stadium-sport/tokens.ts +187 -0
- package/themes/streetwear-hype/THEME.md +100 -0
- package/themes/streetwear-hype/tokens.ts +174 -0
- package/themes/studio-architect/THEME.md +108 -0
- package/themes/studio-architect/tokens.ts +162 -0
- package/themes/studio-photographer/THEME.md +88 -0
- package/themes/studio-photographer/tokens.ts +164 -0
- package/themes/team-kanban/.anchor-render.png +0 -0
- package/themes/team-kanban/THEME.md +167 -0
- package/themes/team-kanban/audit.log.jsonl +2 -0
- package/themes/team-kanban/dismissals.jsonl +1 -0
- package/themes/team-kanban/tailwind.snippet.ts +15 -0
- package/themes/team-kanban/theme.yml +209 -0
- package/themes/team-kanban/tokens.ts +35 -0
- package/themes/telehealth-modern/THEME.md +95 -0
- package/themes/telehealth-modern/tokens.ts +197 -0
- package/themes/tourism-board/THEME.md +111 -0
- package/themes/tourism-board/tokens.ts +173 -0
- package/themes/toys-modern/THEME.md +79 -0
- package/themes/toys-modern/tokens.ts +200 -0
- package/themes/travel-luxury/THEME.md +95 -0
- package/themes/travel-luxury/tokens.ts +162 -0
- package/themes/vacation-rental/THEME.md +105 -0
- package/themes/vacation-rental/tokens.ts +174 -0
- package/themes/vault-reel/THEME.md +134 -0
- package/themes/vault-reel/audit.log.jsonl +3 -0
- package/themes/vault-reel/tailwind.snippet.ts +16 -0
- package/themes/vault-reel/theme.yml +167 -0
- package/themes/vault-reel/tokens.ts +30 -0
- package/themes/vet-modern/THEME.md +79 -0
- package/themes/vet-modern/tokens.ts +194 -0
- package/themes/web3-restraint/THEME.md +87 -0
- package/themes/web3-restraint/tokens.ts +154 -0
- package/themes/wellness-active/THEME.md +102 -0
- package/themes/wellness-active/tokens.ts +203 -0
- package/themes/wellness-spa/THEME.md +93 -0
- package/themes/wellness-spa/tokens.ts +173 -0
- package/themes/y2k-chrome/THEME.md +118 -0
- package/themes/y2k-chrome/tokens.ts +249 -0
- package/themes/yoga-studio/THEME.md +76 -0
- package/themes/yoga-studio/tokens.ts +163 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Design Direction — Classic-Car
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Singer Vehicle Design warm-cream restraint · Eagle E-Type quiet craftsmanship · Icon 4x4 hand-built honesty · Nardone Automotive monochrome restoration · Touring Superleggera Milanese coachwork
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
A 1960s coachbuilder's commission book in browser form. Warm cream canvas — sales-brochure paper, never white — with deep navy as the only interaction color. Type is a quiet Garalde serif for body and an oversized italic Cormorant display for build names. Photography is workshop-and-finished-car at golden hour: hand-restored Porsche 911s in a private garage, wood-rim steering wheels on green baize, a single artisan with a polishing cloth. The page should read like a Singer commission book, not a marketplace listing.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Singer Vehicle Design** → warm cream paper + narrow italic serif + the car restored to a private specification. The page IS the dossier.
|
|
11
|
+
- **Eagle E-Type** → deep navy and cream, hand-rolled coachwork, a single hero photograph per page.
|
|
12
|
+
- **Icon 4x4** → honest workshop tone, sage and tan accents, build-process timeline as marketing.
|
|
13
|
+
- **Nardone Automotive** → near-monochrome restraint, Italian restoration discipline. The cream takes the load.
|
|
14
|
+
- **Touring Superleggera** → Milanese coachwork heritage. Narrow serif headlines over Bodoni-feel italic.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin. Surface stack is **warm cream** (background) → **lifted cream** (card) → **deeper cream** (secondary/muted). Depth comes from hairline borders on warm hairline color and a single low-key shadow utility on build cards. Pure white is forbidden — `--cream` replaces it; pure black is forbidden — `--navy-ink` replaces it.
|
|
18
|
+
|
|
19
|
+
Brand tokens: `--cream`, `--cream-deep`, `--navy`, `--navy-ink`, `--sage`, `--leather-tan`. Primary is navy. Sage and leather-tan are reserved for decorative use only — workshop badges, build-step rules, interior swatch dots — never as button faces. Sage is the only allowed third color and must be used sparingly.
|
|
20
|
+
|
|
21
|
+
## Typography
|
|
22
|
+
- **Display:** Cormorant Garamond (Singer / Touring narrow serif). h1–h4. Tracking `-0.012em`. **Italic is the default display weight** — the sales-brochure handwriting feel.
|
|
23
|
+
- **Body:** Lora (Eagle warm body serif). Body base **17px** with **line-height 1.7** — sales-brochure-comfortable, deliberately slow.
|
|
24
|
+
- **Mono:** JetBrains Mono. Chassis number, year-built, hours-of-labor, base-chassis code. Always `font-variant-numeric: tabular-nums`.
|
|
25
|
+
|
|
26
|
+
H1 uses `clamp(2.75rem, 7vw, 6rem)` — the build-name-as-chapter-title scale. Font features: `"liga"`, `"dlig"`, `"tnum"`, `"ss01"`.
|
|
27
|
+
|
|
28
|
+
## Spacing
|
|
29
|
+
- **Container:** `max-w-6xl px-6 lg:px-12` — narrower than a real-estate catalog because the commission is private, not a marketplace listing.
|
|
30
|
+
- **Section padding tiers:**
|
|
31
|
+
- Hero: `pt-28 pb-20 lg:pt-40 lg:pb-32`
|
|
32
|
+
- Default: `py-20 lg:py-32`
|
|
33
|
+
- Tight: `py-14 lg:py-20`
|
|
34
|
+
- **Allowed scale values:** 4 8 12 16 20 24 32 40 48 64 96 128. Density tier is **low**.
|
|
35
|
+
|
|
36
|
+
## Color
|
|
37
|
+
No hex anywhere. All color via tokens. The palette is intentionally tiny: cream, navy, sage (sparingly), leather-tan (interior swatches). **Never a saturated brand-color button** — navy is the action color across the whole site, just like Singer uses only restraint.
|
|
38
|
+
|
|
39
|
+
## Radius
|
|
40
|
+
`--radius: 0`. **Sharp corners only** — sales-brochure corners. Pills are disallowed (`pillsAllowed: false`).
|
|
41
|
+
|
|
42
|
+
## Shadows
|
|
43
|
+
**Minimal.** Two utilities:
|
|
44
|
+
- `.hairline-bottom` — `inset 0 -1px 0 hsl(var(--border))`, the divider rule.
|
|
45
|
+
- `.shadow-card` — a single low-key navy-tinted soft shadow used only on build-card hover.
|
|
46
|
+
|
|
47
|
+
No glows. No colored shadows beyond the navy-tinted hover.
|
|
48
|
+
|
|
49
|
+
## Motion
|
|
50
|
+
Three keyframes:
|
|
51
|
+
- `fade-rise` — 1200ms opacity + 20px translate, the standard entrance. Slow on purpose.
|
|
52
|
+
- `ken-burns` — 32000ms infinite scale + translate on the single hero workshop still.
|
|
53
|
+
- `underline-sweep` — 700ms scaleX 0→1 from left origin on text-link hover.
|
|
54
|
+
|
|
55
|
+
Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` honored. **No marquee. No parallax. No glow. No bounce.** The page settles; the car was finished a long time ago.
|
|
56
|
+
|
|
57
|
+
## Component patterns
|
|
58
|
+
- **Buttons:** Text-link in navy with `underline-sweep` on hover for body CTAs. Solid navy-on-cream rectangle for the single hero action per page. Secondary is hairline-outlined ghost in navy. No pills. Sage is decorative only.
|
|
59
|
+
- **Cards:** Sharp 0 corners, hairline border on lifted-cream surface. Build cards lead with full-width finished-car photography (3:2 landscape), build name in Cormorant italic display, dossier line in mono. Hover lifts to `shadow-card`.
|
|
60
|
+
- **Inputs:** Border-bottom only on cream. Label above in mono-uppercase tracking `0.14em`. Focus shifts border to navy.
|
|
61
|
+
- **CTA links:** Text-link with underline-sweep for the body. Solid navy rectangle for the single hero CTA (Begin a Commission).
|
|
62
|
+
|
|
63
|
+
## Recommended rich media
|
|
64
|
+
Photography is the entire site. The lead asset on any commissioned build is **finished-car workshop photography** — Singer's hero treatment, Helene Binet meets a private garage. Golden-hour light through workshop windows on the body of a freshly-restored Porsche 911. Interior detail shots (wood-rim wheel, brushed-aluminum gear lever, hand-stitched leather seam) are welcome as secondary frames. **Never showroom-floor stock. Never auction-house catalog photography. Never engine-bay close-ups with chrome reflections — that reads restoration-shop directory, not coachbuilder.**
|
|
65
|
+
|
|
66
|
+
**AI tool recommendations:** **Midjourney v6+** with prompts like *"restored classic Porsche 911 in private workshop, golden hour light through industrial windows, Singer Vehicle Design hero photograph aesthetic, medium format, 80mm, no people, Kodak Portra 400 grade"*; *"hand-stitched leather seat detail, classic car interior, single warm light, shallow depth of field, restoration coachbuilder aesthetic"*. Avoid Midjourney's default "classic car" prompt — produces auction-house render. Prompt for coachbuilder authorship.
|
|
67
|
+
|
|
68
|
+
**Aspect ratios:** 3:2 landscape for build hero shots; 4:5 portrait for workshop process and artisan portraits; 21:9 for editorial panoramas. **Never 1:1.**
|
|
69
|
+
|
|
70
|
+
**Video:** Generally avoided. A single autoplay-muted hero reel of the finished car at golden hour is acceptable — slow ken-burns on a still, not jittery handheld B-roll. ≤6 MB, H.265 or AV1.
|
|
71
|
+
|
|
72
|
+
**Avoid:** auction-house catalog photography (Pebble Beach concours backdrop tells), engine-bay chrome glamour shots, drone footage of canyon roads (cliché), grandfather-and-grandson lifestyle stock (sincere but generic), red Ferrari thumbnails (wrong cultural register).
|
|
73
|
+
|
|
74
|
+
## Component families
|
|
75
|
+
None at install time. First likely families: build-card, restoration-timeline, artisan-attribution, commission-inquiry.
|
|
76
|
+
|
|
77
|
+
## Details
|
|
78
|
+
- **Selection:** `hsl(var(--primary) / 0.22)` background, foreground text.
|
|
79
|
+
- **Focus ring:** `1px solid hsl(var(--ring))` — thin navy, quiet, never a 2px web-app ring.
|
|
80
|
+
- **Scrollbar:** thin.
|
|
81
|
+
|
|
82
|
+
## Exceptions
|
|
83
|
+
None yet.
|
|
84
|
+
|
|
85
|
+
## Revisions
|
|
86
|
+
- Initial direction, generated at install time.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
// Note: name is not in the schema enum at install time; the codegen pipeline
|
|
4
|
+
// accepts new slugs by string and the type guard is updated on next schema sync.
|
|
5
|
+
export const classicCar = {
|
|
6
|
+
name: "classic-car",
|
|
7
|
+
ethos:
|
|
8
|
+
"Singer Vehicle Design warm-cream restraint · Eagle E-Type quiet craftsmanship · Icon 4x4 hand-built honesty · Nardone Automotive monochrome restoration · Touring Superleggera Milanese coachwork",
|
|
9
|
+
references: [
|
|
10
|
+
{ brand: "Singer Vehicle Design", trait: "warm cream paper, narrow serif headline, the car restored to a private specification" },
|
|
11
|
+
{ brand: "Eagle E-Type", trait: "deep navy + cream, hand-rolled coachwork, single hero photograph per page" },
|
|
12
|
+
{ brand: "Icon 4x4", trait: "honest workshop tone, sage and tan accents, build-process timeline as marketing" },
|
|
13
|
+
{ brand: "Nardone Automotive", trait: "near-monochrome restraint, Italian restoration discipline" },
|
|
14
|
+
{ brand: "Touring Superleggera", trait: "Milanese coachwork heritage, narrow serif over Bodoni-feel" },
|
|
15
|
+
],
|
|
16
|
+
feel:
|
|
17
|
+
"Warm cream canvas — the paper of a 1960s sales brochure — with a single deep navy as the only interaction color. " +
|
|
18
|
+
"Type is a quiet Garalde serif for body and an oversized italic display for headlines. " +
|
|
19
|
+
"Photography is workshop-and-finished-car at golden hour: hand-restored Porsche 911s in a private garage, " +
|
|
20
|
+
"wood-rim steering wheels on green baize, a single artisan with a polishing cloth. " +
|
|
21
|
+
"The page reads like a Singer commission book, not a marketplace listing.",
|
|
22
|
+
|
|
23
|
+
fonts: {
|
|
24
|
+
display: {
|
|
25
|
+
family: "Cormorant Garamond",
|
|
26
|
+
fallback: ["Cormorant", "EB Garamond", "Garamond", "Didot", "Georgia", "serif"],
|
|
27
|
+
from: "Singer / Touring narrow serif — Garalde with a sales-brochure italic that anchors the display",
|
|
28
|
+
googleFont: "Cormorant+Garamond",
|
|
29
|
+
weights: [400, 500, 600],
|
|
30
|
+
},
|
|
31
|
+
body: {
|
|
32
|
+
family: "Lora",
|
|
33
|
+
fallback: ["EB Garamond", "Iowan Old Style", "Georgia", "serif"],
|
|
34
|
+
from: "Eagle E-Type warm body serif — sales-brochure paragraph weight, comfortable for long-form provenance copy",
|
|
35
|
+
googleFont: "Lora",
|
|
36
|
+
weights: [400, 500, 600],
|
|
37
|
+
},
|
|
38
|
+
mono: {
|
|
39
|
+
family: "JetBrains Mono",
|
|
40
|
+
fallback: ["Berkeley Mono", "ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
|
|
41
|
+
from: "tabular numerics for chassis number, year-built, hours-of-labor — workshop dossier feel",
|
|
42
|
+
googleFont: "JetBrains+Mono",
|
|
43
|
+
weights: [400, 500],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
typography: {
|
|
48
|
+
headingTracking: "-0.012em",
|
|
49
|
+
bodyTracking: "0",
|
|
50
|
+
fontFeatureSettings: '"liga", "dlig", "tnum", "ss01"',
|
|
51
|
+
h1ScaleClamp: "clamp(2.75rem, 7vw, 6rem)",
|
|
52
|
+
bodyBaseSize: "1.0625rem", // 17px — sales-brochure paragraph
|
|
53
|
+
bodyLineHeight: "1.7", // generous — provenance copy reads slowly
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
colors: {
|
|
57
|
+
background: { hsl: "40 32% 91%", from: "Singer warm cream — the 1960s sales-brochure paper, never white" },
|
|
58
|
+
foreground: { hsl: "215 42% 16%", from: "Eagle E-Type deep navy ink — body and display, never pure black" },
|
|
59
|
+
card: { hsl: "40 28% 95%", from: "lifted cream — build-card surface, one tier above paper" },
|
|
60
|
+
popover: { hsl: "40 28% 95%", from: "same family — depth via hairlines and shadow-card" },
|
|
61
|
+
primary: { hsl: "215 52% 22%", from: "Eagle deep navy — canonical action color, the only interaction hue" },
|
|
62
|
+
primaryForeground: { hsl: "40 32% 91%", from: "warm cream on deep navy" },
|
|
63
|
+
secondary: { hsl: "40 20% 84%", from: "deeper cream tier — quiet panel surface" },
|
|
64
|
+
secondaryForeground: { hsl: "215 42% 16%", from: "navy on deeper cream" },
|
|
65
|
+
muted: { hsl: "40 16% 82%", from: "muted cream — workshop-bench warm-grey" },
|
|
66
|
+
mutedForeground: { hsl: "215 20% 38%", from: "Touring soft navy — secondary copy on cream" },
|
|
67
|
+
accent: { hsl: "40 22% 88%", from: "hover cream — one tier under secondary" },
|
|
68
|
+
accentForeground: { hsl: "215 42% 16%", from: "navy on accent cream" },
|
|
69
|
+
border: { hsl: "40 18% 76%", from: "warm hairline — visible on cream but never assertive" },
|
|
70
|
+
input: { hsl: "40 18% 76%", from: "same as border — single hairline language" },
|
|
71
|
+
ring: { hsl: "215 52% 22%", from: "navy — focus ring is the canonical action color" },
|
|
72
|
+
destructive: { hsl: "12 56% 38%", from: "deep terracotta — workshop-respecting alert tone" },
|
|
73
|
+
destructiveForeground: { hsl: "40 32% 91%", from: "warm cream on terracotta" },
|
|
74
|
+
brand: {
|
|
75
|
+
cream: { hsl: "40 32% 91%", from: "= background; the sales-brochure paper itself" },
|
|
76
|
+
"cream-deep": { hsl: "40 20% 84%", from: "= secondary; deeper cream for panels" },
|
|
77
|
+
navy: { hsl: "215 52% 22%", from: "= primary; Eagle deep navy" },
|
|
78
|
+
"navy-ink": { hsl: "215 42% 16%", from: "= foreground; deepest navy, used as ink" },
|
|
79
|
+
sage: { hsl: "120 14% 42%", from: "Icon 4x4 workshop sage — a single decorative accent for build-step rules and small badges" },
|
|
80
|
+
"leather-tan": { hsl: "30 32% 52%", from: "saddle-tan — interior-leather swatches and build-card warmth" },
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
spacing: {
|
|
85
|
+
base: 4,
|
|
86
|
+
scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 96, 128],
|
|
87
|
+
containerMax: "max-w-6xl", // narrower than realestate-luxury — the build is a private commission, not a catalog
|
|
88
|
+
containerPadding: "px-6 lg:px-12",
|
|
89
|
+
sectionPadding: {
|
|
90
|
+
hero: "pt-28 pb-20 lg:pt-40 lg:pb-32",
|
|
91
|
+
default: "py-20 lg:py-32",
|
|
92
|
+
tight: "py-14 lg:py-20",
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
radius: {
|
|
97
|
+
base: "0", // sharp — sales-brochure corners
|
|
98
|
+
pillsAllowed: false, // pills read marketplace; commission books are squared
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
shadows: {
|
|
102
|
+
style: "minimal",
|
|
103
|
+
utilities: {
|
|
104
|
+
"hairline-bottom":
|
|
105
|
+
"inset 0 -1px 0 hsl(var(--border))",
|
|
106
|
+
"shadow-card":
|
|
107
|
+
"0 1px 2px hsl(215 42% 16% / 0.04), 0 8px 28px hsl(215 42% 16% / 0.07)",
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
motion: {
|
|
112
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
113
|
+
durations: {
|
|
114
|
+
reveal: 1200, // slow on purpose — sales-brochure pacing
|
|
115
|
+
loop: 2400,
|
|
116
|
+
ambient: 32000,
|
|
117
|
+
},
|
|
118
|
+
keyframes: {
|
|
119
|
+
"fade-rise": {
|
|
120
|
+
css:
|
|
121
|
+
"from { opacity: 0; transform: translateY(20px); }\n" +
|
|
122
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
123
|
+
defaultDuration: 1200,
|
|
124
|
+
iteration: "once",
|
|
125
|
+
purpose: "section entrance — build reveal, deliberately unhurried",
|
|
126
|
+
},
|
|
127
|
+
"ken-burns": {
|
|
128
|
+
css:
|
|
129
|
+
"0% { transform: scale(1.03) translate(0, 0); }\n" +
|
|
130
|
+
"100% { transform: scale(1.10) translate(-1.2%, -0.8%); }",
|
|
131
|
+
defaultDuration: 32000,
|
|
132
|
+
iteration: "infinite",
|
|
133
|
+
purpose: "hero workshop still drift — slow Leica frame on the finished build",
|
|
134
|
+
},
|
|
135
|
+
"underline-sweep": {
|
|
136
|
+
css:
|
|
137
|
+
"from { transform: scaleX(0); transform-origin: left; }\n" +
|
|
138
|
+
"to { transform: scaleX(1); transform-origin: left; }",
|
|
139
|
+
defaultDuration: 700,
|
|
140
|
+
iteration: "once",
|
|
141
|
+
purpose: "text-link hover — underline wipes in left-to-right",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
respectsReducedMotion: true,
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
density: "low", // commission book breathing
|
|
148
|
+
|
|
149
|
+
patterns: {
|
|
150
|
+
button:
|
|
151
|
+
"Text-link CTAs by default — navy color, underline-sweep on hover. " +
|
|
152
|
+
"Solid-fill reserved for the single hero action per page (navy bg, cream text, sharp corners). " +
|
|
153
|
+
"Secondary actions are hairline-outlined ghost buttons in navy. " +
|
|
154
|
+
"No pills. Sage is decorative only — never a button face.",
|
|
155
|
+
card:
|
|
156
|
+
"Sharp 0 corners. Hairline border (--border) on lifted-cream surface. Internal padding p-8 lg:p-12. " +
|
|
157
|
+
"Build cards lead with full-width finished-car photography (3:2 landscape), " +
|
|
158
|
+
"build name in Cormorant italic display, dossier line in mono. Hover lifts to shadow-card.",
|
|
159
|
+
input:
|
|
160
|
+
"Border-bottom only (1px --border) on cream. No full box. " +
|
|
161
|
+
"Label sits above in mono-uppercase, tracking 0.14em. Focus shifts border to navy.",
|
|
162
|
+
cta:
|
|
163
|
+
"Text-link with underline-sweep for the body. Solid navy rectangle for the single hero CTA (Begin a Commission). " +
|
|
164
|
+
"Never a pill, never a gradient, never a glow.",
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
details: {
|
|
168
|
+
selectionBg: "hsl(var(--primary) / 0.22)",
|
|
169
|
+
selectionFg: "hsl(var(--foreground))",
|
|
170
|
+
focusRing: "1px solid hsl(var(--ring))",
|
|
171
|
+
scrollbarStyle: "thin",
|
|
172
|
+
},
|
|
173
|
+
} satisfies Partial<Direction> & { name: string };
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Design Direction — Cloud-Friendly
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Salesforce Lightning Design System · Trailhead warmth · cloud-CRM friendliness · Astro mascot palette · ohana community feel
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Cloud-CRM friendly enterprise. Lightning blue as the signal, soft cloud-friendly secondary palette (Trailhead's warm peach + teal). Reads approachable-corporate — not stiff like Oracle, not stark like IBM. "We sell to the C-suite but use first names in email." Soft multi-layer shadows, 8px pillowy radius, and the ohana community feel running underneath every surface.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Salesforce Lightning Design System (LDS)** → the structural backbone. Lightning blue signal, 8px friendly radius, multi-layer blue-tinted shadow drops, cloud surface stack.
|
|
11
|
+
- **Trailhead** → Trailblazer warmth. The reason this direction has a peach accent and an Astro-cream backdrop — the friendly enterprise tone.
|
|
12
|
+
- **Salesforce Tower / Dreamforce** → conference branding. Cloud backdrops, mascot energy, and a permission to be a little playful on the marketing surfaces.
|
|
13
|
+
- **Astro + Codey + the LDS character icons** → the mascot palette (cream, peach, soft sky). Direction ships with hooks for character illustration without requiring it.
|
|
14
|
+
- **Tableau** (acquired) → data-viz integration patterns. Layered teal accents, friendly chart palette that coexists with Lightning blue.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
HSL triples in `src/index.css`. Lightning blue (`212 88% 41%`, hex `#0176D3`) is the primary signal — the brand mark, focus ring, default CTA. Surface stack is monochromatic-cool: `--background` (`210 36% 96%`, Lightning cloud-bg) lifts to `--card` (pure white) with a soft blue-tinted shadow.
|
|
18
|
+
|
|
19
|
+
Brand tokens are named for their provenance:
|
|
20
|
+
- `--peach-warm` (`14 95% 70%`) — Trailhead warmth accent, community-moment highlight, never primary CTA.
|
|
21
|
+
- `--teal-fresh` (`174 60% 45%`) — secondary accent, Tableau-adjacent. Info chips, data-viz layers, calm complement to Lightning blue.
|
|
22
|
+
- `--success-green` (`140 60% 40%`) — closed-won, record-saved, task-complete. The "good outcome" signal.
|
|
23
|
+
- `--astro-cream` (`38 80% 90%`) — mascot-warmth backdrop, soft cream behind Astro/Codey illustration moments.
|
|
24
|
+
- `--cloud-tint` (`210 36% 96%`) — alias of background, used by name when nesting cloud-tinted surfaces inside cards.
|
|
25
|
+
|
|
26
|
+
The semantic rule: Lightning blue is the only affirmative signal at the chrome level. Peach is for warmth/community accent. Teal is for info/data. Green is for closed-won/success state. Red is destructive only. Astro-cream is decorative backdrop, never a foreground surface for text.
|
|
27
|
+
|
|
28
|
+
## Typography
|
|
29
|
+
- **Display:** Inter, weights 500/600/700. h1–h4. Tracking `-0.01em` on headings.
|
|
30
|
+
- **Body:** Inter, 15px (`0.9375rem`), line-height 1.55, tracking `0`.
|
|
31
|
+
- **Mono:** JetBrains Mono, weights 400/500. Apex code, formula fields, record IDs, API names.
|
|
32
|
+
|
|
33
|
+
**Note on Salesforce Sans:** the official Salesforce Sans face is proprietary and not redistributable. Inter is the deliberate open-source stand-in — same neutral humanist register, same readability at CRM-table density. If a downstream brand has a Salesforce Sans license and wants to swap it in, override the `display` and `body` font stacks in `tokens.ts`; nothing else needs to change.
|
|
34
|
+
|
|
35
|
+
Font features: `"cv11", "ss01", "tnum"` — Inter stylistic sets for single-story a/g, tabular figures for record lists and reports.
|
|
36
|
+
|
|
37
|
+
## Spacing
|
|
38
|
+
- **Container:** `max-w-7xl px-4 lg:px-8` — CRM record pages and dashboards claim more screen than a marketing site.
|
|
39
|
+
- **Section padding tiers:**
|
|
40
|
+
- Hero: `pt-20 pb-12 lg:pt-28 lg:pb-16`
|
|
41
|
+
- Default: `py-12 lg:py-20`
|
|
42
|
+
- Tight: `py-8 lg:py-12`
|
|
43
|
+
- **Allowed scale:** 4 6 8 10 12 16 20 24 32 40 48 64 80.
|
|
44
|
+
|
|
45
|
+
Medium density. The reference is the Lightning record page and Sales Cloud console — utility-first but not packed to the brim like Nvidia developer docs.
|
|
46
|
+
|
|
47
|
+
## Color
|
|
48
|
+
No hex anywhere. All color via tokens. Opacity via `/N` modifier. Pure white is allowed for cards (`--card`). Pure black is forbidden — `--foreground` is `218 41% 19%` (Lightning deep navy).
|
|
49
|
+
|
|
50
|
+
Semantic discipline:
|
|
51
|
+
- **Lightning blue** (`212 88% 41%`) — primary, links, focus, brand mark. The signal.
|
|
52
|
+
- **Success green** (`140 60% 40%`) — closed-won, saved, completed. The good outcome.
|
|
53
|
+
- **Destructive red** (`0 72% 50%`) — record delete, error toast. Never decorative.
|
|
54
|
+
- **Peach warm** (`14 95% 70%`) — Trailhead community accent, warmth highlight. Used sparingly.
|
|
55
|
+
- **Teal fresh** (`174 60% 45%`) — info chips, Tableau-style data accent. Calm.
|
|
56
|
+
- **Astro cream** (`38 80% 90%`) — backdrop only, behind mascot or onboarding illustration.
|
|
57
|
+
|
|
58
|
+
## Radius
|
|
59
|
+
`--radius: 0.5rem` (8px). **Pillowy-friendly, Lightning-rounded.** Pills are allowed (`pillsAllowed: true`) for status chips, list-view filters, and Trailhead-style badges. Inputs use a slightly tighter 6px feel via `rounded-md`. Cards use 8px via `rounded-lg`. Avoid sharp 2-4px (reads enterprise-tech / Oracle-Redwood) and avoid 16px+ (reads consumer-product).
|
|
60
|
+
|
|
61
|
+
## Shadows
|
|
62
|
+
Style is **"soft"** — Lightning shadow utilities. Multi-layer soft blue-tinted drops; never neutral gray, never pure black.
|
|
63
|
+
|
|
64
|
+
Utilities:
|
|
65
|
+
- `.shadow-lightning` — default card lift. `0 1px 2px` + `0 4px 12px`, both at 6-8% opacity of blue-tinted slate.
|
|
66
|
+
- `.shadow-lightning-lg` — hover lift, larger spread. `0 2px 4px` + `0 12px 32px`.
|
|
67
|
+
- `.shadow-lightning-inset` — top-edge highlight for raised surfaces (subtle 60%-white inset).
|
|
68
|
+
- `.shadow-glow-blue` — focus-state ring around primary controls. `0 0 0 1px` + `0 0 0 3px` of Lightning blue.
|
|
69
|
+
|
|
70
|
+
Shadows use `212 50% 30%` slate-blue at 6-10% opacity — the soft Lightning drop. Visible enough that cards lift off the cloud-tint background; quiet enough that record pages don't read as marketing.
|
|
71
|
+
|
|
72
|
+
## Motion
|
|
73
|
+
- **Easing:** `cubic-bezier(0.22, 1, 0.36, 1)`
|
|
74
|
+
- **Duration tiers:** reveal (250ms entry / 200ms exit), loop (2s), ambient (0 — no ambient drift on a CRM surface).
|
|
75
|
+
- **Keyframes:**
|
|
76
|
+
- `fade-rise` (250ms) — standard entry for record panels, list rows, modal content. Short translate-up + opacity.
|
|
77
|
+
- `scale-in` (200ms) — popovers, tooltips, action menus, modal containers. Lightning convention.
|
|
78
|
+
- `toast-slide` (250ms) — success/error notification slide-in, Lightning toast pattern.
|
|
79
|
+
|
|
80
|
+
Smooth easings. No bounce, no spring, no parallax. The CRM is a workspace, not a marketing reel. `prefers-reduced-motion` honored throughout.
|
|
81
|
+
|
|
82
|
+
## Brand-book customization
|
|
83
|
+
**Salesforce ships as a family of industry clouds. This direction ships with Lightning blue as default, with explicit override hooks for cloud-specific themes.**
|
|
84
|
+
|
|
85
|
+
### Industry cloud variants
|
|
86
|
+
Each Salesforce industry cloud carries its own primary tint over the same Lightning structure. To re-skin, override `--primary` (and `--ring`, which aliases it) in `tokens.ts` — everything else stays:
|
|
87
|
+
- **Sales Cloud / Service Cloud (default)** — Lightning blue `212 88% 41%`. The shipped value.
|
|
88
|
+
- **Health Cloud** — clinical blue (closer to `205 80% 45%`). Slightly cooler, more medical-trust register.
|
|
89
|
+
- **Financial Services Cloud** — slate-blue (closer to `215 35% 35%`). Lower saturation, banking-gravity feel.
|
|
90
|
+
- **Public Sector Cloud** — civic teal (closer to `188 65% 38%`). Government-adjacent without leaving Lightning structure.
|
|
91
|
+
- **Marketing Cloud / Pardot** — warmer Lightning blue plus a louder peach-warm accent allowance.
|
|
92
|
+
|
|
93
|
+
Industry-cloud overrides change `--primary` only. The cloud-tint background, navy foreground, soft shadow stack, and 8px radius are constant — that's what makes this direction recognizable as Salesforce.
|
|
94
|
+
|
|
95
|
+
### Trailhead vs Sales Cloud tone
|
|
96
|
+
- **Trailhead surfaces** (learning, community, onboarding, certification) get the full warm palette: peach-warm accent active, Astro-cream backdrops permitted, mascot illustration encouraged. More color, more personality, more permission to be playful.
|
|
97
|
+
- **Sales Cloud / Service Cloud surfaces** (record pages, list views, reports) stay reserved: Lightning blue chrome, mono record meta, peach reserved for occasional milestone/celebration toasts (closed-won, anniversary), Astro-cream forbidden except as illustration backdrop on the empty-state.
|
|
98
|
+
|
|
99
|
+
The direction supports both registers without two separate themes — turn the warmth dial up or down via accent-token usage frequency, not by re-skinning.
|
|
100
|
+
|
|
101
|
+
### Override hooks
|
|
102
|
+
Implementers can swap any of the following without forking the direction:
|
|
103
|
+
- `--primary` — corporate brand color (industry cloud, customer co-brand, partner program).
|
|
104
|
+
- Display font — if a customer has a licensed Salesforce Sans, Sohne, or in-house display face, swap the `fonts.display.family` and `googleFont` fields. Inter is the fallback.
|
|
105
|
+
- Radius scale — `--radius` accepts `0.375rem` (sharper, more Service Cloud) up to `0.625rem` (softer, more Trailhead). Don't exceed 10px or the direction starts reading consumer-product.
|
|
106
|
+
- Button style — primary defaults to solid Lightning blue, but the secondary outline-blue is interchangeable with a ghost-blue (transparent + blue text) for surfaces that need lower visual weight (record-page action bars with 3+ actions).
|
|
107
|
+
|
|
108
|
+
## Component patterns
|
|
109
|
+
- **Buttons:** primary = solid Salesforce blue, white text, 8px radius, `shadow-lightning`, weight 600. Secondary = blue outline (`border-primary text-primary bg-transparent`). Success = solid `success-green` for closed-won and record-saved patterns. Tertiary = primary-color text link, no underline at rest. Sizes: default (`h-9 px-4 text-sm`), small (`h-8 px-3 text-xs`).
|
|
110
|
+
- **Cards:** `rounded-lg` (8px), 1px border, `bg-card` (white), `shadow-lightning`. Padding `p-5 lg:p-6`. Header row uses bottom border with mono record-meta on the right. Hover lifts to `shadow-lightning-lg`.
|
|
111
|
+
- **Inputs:** `rounded-md` (6px) box, 1px border, `bg-card`. Focus uses `shadow-glow-blue` ring instead of a thick outline. Label above in foreground weight-500; required-field marker uses destructive. Helper below in `mutedForeground`; inline validation in destructive.
|
|
112
|
+
- **CTAs:** primary = Salesforce blue button. Secondary = blue-outline ghost. Success-green reserved for confirmed/closed-won states (toasts, badges, "Mark Complete"), never for marketing CTA. One primary action per surface; record-page action bar may hold up to three.
|
|
113
|
+
|
|
114
|
+
## Component families
|
|
115
|
+
None at install time. Expected emerging families:
|
|
116
|
+
- **Record cards** (`*RecordCard`, `*OpportunityCard`) — Lightning card chrome, mono record ID in the meta row, navy title, peach-warm badge for milestones, success-green pill for closed-won state.
|
|
117
|
+
- **Trailhead-style badges** (`*TrailBadge`, `*CertBadge`) — rounded-full pills with peach-warm or teal-fresh accent, weight-600 mono label, soft drop shadow.
|
|
118
|
+
- **List views** (`*ListView`, `*KanbanColumn`) — Lightning hairline borders, 32px row height default, hover row-tint to `--accent`, status chip on the right edge.
|
|
119
|
+
|
|
120
|
+
## Recommended rich media
|
|
121
|
+
Salesforce-cloud is **photography-warm and mascot-friendly**, the opposite of enterprise-tech's diagram-heavy reserve. The aesthetic is Dreamforce keynote: real diverse teams in soft natural light, real product UI screenshots, and the occasional Astro/Codey character moment.
|
|
122
|
+
|
|
123
|
+
**Hero media:**
|
|
124
|
+
- **Enterprise photography** — diverse teams, warm natural light, candid collaboration, real laptops on real desks. Trailhead campaign register: friendly enterprise, never stock-photo-stiff. Avoid the silver-haired-CEO trope.
|
|
125
|
+
- **Product UI screenshots** — Lightning record pages, Sales Cloud Kanban, Service Cloud case timelines. Present cleanly with a soft Lightning drop shadow and 8px corner radius; never bare-cropped.
|
|
126
|
+
- **Astro-style mascot illustrations** — decorative accents on empty-states, onboarding flows, Trailhead-tone surfaces. Astro-cream backdrop. Used sparingly; mascots on a record page read as childish.
|
|
127
|
+
- **Data-viz panels** — Tableau-adjacent dashboard captures with the teal-fresh accent threading through. Friendly chart palette, never the dark-mode dashboard look.
|
|
128
|
+
|
|
129
|
+
**AI tool recommendations:**
|
|
130
|
+
- **Midjourney** for enterprise photography. Prompts like *"Trailhead campaign photography, warm friendly enterprise, diverse team, soft natural lighting, candid collaboration, real office, no stock photo staging, 35mm"*. Push toward warm rather than cool color grading.
|
|
131
|
+
- **Recraft** for Astro-mascot-adjacent character illustration. Prompts like *"friendly cloud mascot character, soft palette, peach and cream, vector illustration, Salesforce Astro style, approachable corporate"* — useful for empty-state and onboarding moments.
|
|
132
|
+
- **Figma / native UI capture** for product screenshots — Lightning is a real UI surface; screenshot it cleanly rather than rendering it.
|
|
133
|
+
- **Tableau Public / native chart export** for data-viz hero moments — the real chart is more credible than an AI render of a chart.
|
|
134
|
+
|
|
135
|
+
**Aspect ratios:** 16:9 for hero photography and dashboard captures; 4:3 for product UI screenshots; 1:1 for mascot illustrations and headshots; natural aspect for inline charts.
|
|
136
|
+
|
|
137
|
+
**Performance:** AVIF photography ≤140 KB at 1600w; UI screenshot AVIF ≤100 KB at 1200w; mascot SVG inline (≤12 KB each); no autoplay video with sound. LCP target <1.8s on 4G — Salesforce customers run these surfaces on corporate networks but often on the marketing site over consumer connections.
|
|
138
|
+
|
|
139
|
+
**Avoid:** stock-photo CEO portraits, dark moody photography, cinematic grain, glassmorphic chrome on UI screenshots, purple/violet gradients (that's Lovable/Linear territory), Y2K chrome, brutalist crops, anything that signals consumer-startup over enterprise-with-a-soul.
|
|
140
|
+
|
|
141
|
+
**Accessibility:** WCAG AA on `210 36% 96%` cloud-tint background requires foreground at ≥`218 41% 30%` minimum (we use `218 41% 19%`, well above). Lightning blue on white passes AA at all sizes. Success-green / peach-warm / teal-fresh used as status accents always need a non-color signal (icon, text label) — color-blind users complete deals too.
|
|
142
|
+
|
|
143
|
+
## Details
|
|
144
|
+
- **Selection:** `hsl(var(--primary) / 0.18)` Lightning-blue tint, foreground text.
|
|
145
|
+
- **Focus ring:** `2px solid hsl(var(--ring) / 0.5)` — visible, friendly, matches the soft register.
|
|
146
|
+
- **Scrollbar:** thin, slate-toned.
|
|
147
|
+
|
|
148
|
+
## Exceptions
|
|
149
|
+
None yet. When an intentional violation lands (e.g. a Trailhead surface uses a full peach-warm hero CTA instead of Lightning blue, or a Public Sector cloud override ships civic teal as `--primary`), document it here with the reason.
|
|
150
|
+
|
|
151
|
+
## Revisions
|
|
152
|
+
- Initial direction, generated at install time. Authored to provide a Salesforce-family aesthetic — Lightning + Trailhead + Astro — that the more reserved enterprise directions (enterprise-tech, enterprise-cloud, business-tiles, corporate-grid) don't cover. Fills the "approachable-corporate CRM" slot in the library.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
export const cloudFriendly: Direction = {
|
|
4
|
+
name: "cloud-friendly",
|
|
5
|
+
ethos:
|
|
6
|
+
"Salesforce Lightning Design System · Trailhead warmth · cloud-CRM friendliness · Astro mascot palette · ohana community feel",
|
|
7
|
+
references: [
|
|
8
|
+
{ brand: "Salesforce Lightning Design System (LDS)", trait: "Lightning blue signal, cloud surfaces, 8px friendly radius" },
|
|
9
|
+
{ brand: "Trailhead", trait: "Trailblazer warmth — friendly enterprise tone, peach + teal" },
|
|
10
|
+
{ brand: "Salesforce Tower / Dreamforce", trait: "conference brand warmth, cloud backdrops, mascot energy" },
|
|
11
|
+
{ brand: "Astro + Codey (LDS character icons)", trait: "mascot palette — cream, peach, soft sky" },
|
|
12
|
+
{ brand: "Tableau", trait: "data-viz integration patterns, layered teal accents" },
|
|
13
|
+
],
|
|
14
|
+
feel:
|
|
15
|
+
"Cloud-CRM friendly enterprise. Lightning blue as the signal, soft cloud-friendly secondary palette " +
|
|
16
|
+
"(Trailhead's warm peach + teal). Reads approachable-corporate — not stiff like Oracle, not stark like IBM. " +
|
|
17
|
+
"'We sell to the C-suite but use first names in email.' Soft multi-layer shadows, 8px pillowy radius, " +
|
|
18
|
+
"and the ohana community feel running underneath every surface.",
|
|
19
|
+
|
|
20
|
+
fonts: {
|
|
21
|
+
display: {
|
|
22
|
+
family: "Inter",
|
|
23
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
24
|
+
from: "Inter stands in for Salesforce Sans (proprietary) — same neutral humanist register",
|
|
25
|
+
googleFont: "Inter",
|
|
26
|
+
weights: [500, 600, 700],
|
|
27
|
+
},
|
|
28
|
+
body: {
|
|
29
|
+
family: "Inter",
|
|
30
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
31
|
+
from: "Inter — Salesforce Sans alternative, readable at CRM-table density",
|
|
32
|
+
googleFont: "Inter",
|
|
33
|
+
weights: [400, 500, 600],
|
|
34
|
+
},
|
|
35
|
+
mono: {
|
|
36
|
+
family: "JetBrains Mono",
|
|
37
|
+
fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
|
|
38
|
+
from: "JetBrains Mono — Apex snippets, record IDs, formula fields, API names",
|
|
39
|
+
googleFont: "JetBrains+Mono",
|
|
40
|
+
weights: [400, 500],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
typography: {
|
|
45
|
+
headingTracking: "-0.01em",
|
|
46
|
+
bodyTracking: "0",
|
|
47
|
+
fontFeatureSettings: '"cv11", "ss01", "tnum"',
|
|
48
|
+
h1ScaleClamp: "clamp(2rem, 4.5vw, 3.25rem)",
|
|
49
|
+
bodyBaseSize: "0.9375rem",
|
|
50
|
+
bodyLineHeight: "1.55",
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
colors: {
|
|
54
|
+
background: { hsl: "210 36% 96%", from: "Lightning cloud-bg — very light cool blue-tinted surface" },
|
|
55
|
+
foreground: { hsl: "218 41% 19%", from: "Lightning text-primary — deep navy ink" },
|
|
56
|
+
card: { hsl: "0 0% 100%", from: "pure white card — lifts off the cloud-tint background" },
|
|
57
|
+
popover: { hsl: "0 0% 100%", from: "pure white popover, same as card" },
|
|
58
|
+
|
|
59
|
+
primary: { hsl: "212 88% 41%", from: "Salesforce blue #0176D3 — Lightning brand mark, the signal" },
|
|
60
|
+
primaryForeground: { hsl: "0 0% 100%", from: "white on Salesforce blue" },
|
|
61
|
+
|
|
62
|
+
secondary: { hsl: "210 30% 92%", from: "Lightning secondary surface — one tier deeper than bg" },
|
|
63
|
+
secondaryForeground: { hsl: "218 41% 19%", from: "Lightning navy ink on cool gray" },
|
|
64
|
+
muted: { hsl: "210 30% 92%", from: "muted surface — same as secondary" },
|
|
65
|
+
mutedForeground: { hsl: "215 16% 47%", from: "Lightning meta gray — captions, helper text, field labels" },
|
|
66
|
+
accent: { hsl: "210 32% 89%", from: "hover surface — one tier deeper than secondary" },
|
|
67
|
+
accentForeground: { hsl: "218 41% 19%", from: "Lightning navy on hover surface" },
|
|
68
|
+
|
|
69
|
+
border: { hsl: "214 25% 85%", from: "Lightning hairline border — visible, friendly, not heavy" },
|
|
70
|
+
input: { hsl: "214 25% 85%", from: "Lightning input border — same as structural border" },
|
|
71
|
+
ring: { hsl: "212 88% 41%", from: "Salesforce blue — focus ring on active primary states" },
|
|
72
|
+
|
|
73
|
+
destructive: { hsl: "0 72% 50%", from: "Lightning destructive red — record delete, error state" },
|
|
74
|
+
destructiveForeground: { hsl: "0 0% 100%", from: "white on Lightning red" },
|
|
75
|
+
|
|
76
|
+
brand: {
|
|
77
|
+
"peach-warm": { hsl: "14 95% 70%", from: "Trailhead warmth accent — Trailblazer peach, community moments" },
|
|
78
|
+
"teal-fresh": { hsl: "174 60% 45%", from: "secondary accent — Tableau-adjacent teal, info chips and data layers" },
|
|
79
|
+
"success-green": { hsl: "140 60% 40%", from: "closed-won green — opportunity won, task complete, success toast" },
|
|
80
|
+
"astro-cream": { hsl: "38 80% 90%", from: "Astro mascot warmth backdrop — soft cream behind illustration" },
|
|
81
|
+
"cloud-tint": { hsl: "210 36% 96%", from: "alias of background — Lightning cloud-bg for nested surfaces" },
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
spacing: {
|
|
86
|
+
base: 4,
|
|
87
|
+
scale: [4, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 64, 80],
|
|
88
|
+
containerMax: "max-w-7xl",
|
|
89
|
+
containerPadding: "px-4 lg:px-8",
|
|
90
|
+
sectionPadding: {
|
|
91
|
+
hero: "pt-20 pb-12 lg:pt-28 lg:pb-16",
|
|
92
|
+
default: "py-12 lg:py-20",
|
|
93
|
+
tight: "py-8 lg:py-12",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
radius: {
|
|
98
|
+
base: "0.5rem",
|
|
99
|
+
pillsAllowed: true,
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
shadows: {
|
|
103
|
+
style: "soft",
|
|
104
|
+
utilities: {
|
|
105
|
+
"shadow-lightning":
|
|
106
|
+
"0 1px 2px hsl(212 50% 30% / 0.06), 0 4px 12px hsl(212 50% 30% / 0.08)",
|
|
107
|
+
"shadow-lightning-lg":
|
|
108
|
+
"0 2px 4px hsl(212 50% 30% / 0.06), 0 12px 32px hsl(212 50% 30% / 0.10)",
|
|
109
|
+
"shadow-lightning-inset":
|
|
110
|
+
"inset 0 1px 0 hsl(0 0% 100% / 0.6)",
|
|
111
|
+
"shadow-glow-blue":
|
|
112
|
+
"0 0 0 1px hsl(var(--primary) / 0.5), 0 0 0 3px hsl(var(--primary) / 0.15)",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
motion: {
|
|
117
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
118
|
+
durations: {
|
|
119
|
+
reveal: 250,
|
|
120
|
+
loop: 2000,
|
|
121
|
+
ambient: 0,
|
|
122
|
+
},
|
|
123
|
+
keyframes: {
|
|
124
|
+
"fade-rise": {
|
|
125
|
+
css:
|
|
126
|
+
"from { opacity: 0; transform: translateY(8px); }\n" +
|
|
127
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
128
|
+
defaultDuration: 250,
|
|
129
|
+
iteration: "once",
|
|
130
|
+
purpose: "250ms entry — record panels, list rows, modal contents land softly",
|
|
131
|
+
},
|
|
132
|
+
"scale-in": {
|
|
133
|
+
css:
|
|
134
|
+
"from { opacity: 0; transform: scale(0.97); }\n" +
|
|
135
|
+
"to { opacity: 1; transform: scale(1); }",
|
|
136
|
+
defaultDuration: 200,
|
|
137
|
+
iteration: "once",
|
|
138
|
+
purpose: "200ms exit-paired entry — popovers, tooltips, action menus, modals",
|
|
139
|
+
},
|
|
140
|
+
"toast-slide": {
|
|
141
|
+
css:
|
|
142
|
+
"from { opacity: 0; transform: translateY(12px); }\n" +
|
|
143
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
144
|
+
defaultDuration: 250,
|
|
145
|
+
iteration: "once",
|
|
146
|
+
purpose: "250ms success/error toast slide — Lightning notification convention",
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
respectsReducedMotion: true,
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
density: "medium",
|
|
153
|
+
|
|
154
|
+
patterns: {
|
|
155
|
+
button:
|
|
156
|
+
"Primary = solid Salesforce blue, white text, 8px radius, shadow-lightning, weight 600. " +
|
|
157
|
+
"Secondary = brand-blue outline (border-primary text-primary bg-transparent). " +
|
|
158
|
+
"Success = solid success-green for closed-won / record-saved patterns. " +
|
|
159
|
+
"Tertiary = primary-color text-link, no underline at rest. " +
|
|
160
|
+
"Sizes: default (h-9 px-4 text-sm), small (h-8 px-3 text-xs).",
|
|
161
|
+
card:
|
|
162
|
+
"Rounded-lg (8px), 1px border, bg-card (white), shadow-lightning. " +
|
|
163
|
+
"Padding p-5 lg:p-6. Header row uses bottom border with mono record-meta on the right. " +
|
|
164
|
+
"Hover lifts to shadow-lightning-lg. CRM-utility density — not marketing elevation.",
|
|
165
|
+
input:
|
|
166
|
+
"Rounded-md (6px) box, 1px border, bg-card. Focus = shadow-glow-blue ring (no thick outline). " +
|
|
167
|
+
"Label above in foreground weight-500; required-field marker uses destructive. " +
|
|
168
|
+
"Helper below in mutedForeground; inline validation in destructive.",
|
|
169
|
+
cta:
|
|
170
|
+
"Primary = Salesforce blue button. Secondary = blue-outline ghost. " +
|
|
171
|
+
"Success-green reserved for confirmed/closed-won states, never for marketing CTA. " +
|
|
172
|
+
"One primary action per surface; record-page action bar may hold up to three.",
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
details: {
|
|
176
|
+
selectionBg: "hsl(var(--primary) / 0.18)",
|
|
177
|
+
selectionFg: "hsl(var(--foreground))",
|
|
178
|
+
focusRing: "2px solid hsl(var(--ring) / 0.5)",
|
|
179
|
+
scrollbarStyle: "thin",
|
|
180
|
+
},
|
|
181
|
+
};
|