@stylecrib/cli 0.3.1 → 0.3.3
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 +94 -9
- 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 +1606 -467
- package/package.json +12 -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/THEME.md +125 -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/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/BUILD_BRIEF.md +171 -0
- package/themes/bento-modular/THEME.md +80 -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/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/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/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/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/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/THEME.md +167 -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/THEME.md +144 -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/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/BUILD_BRIEF.md +156 -0
- package/themes/kinetic-headline/THEME.md +78 -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/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/BUILD_BRIEF.md +158 -0
- package/themes/nature-distilled/THEME.md +81 -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/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/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/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/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/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/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/THEME.md +167 -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/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,130 @@
|
|
|
1
|
+
# Atelier Radiance — Family E, Luxury & Brand-Tier.
|
|
2
|
+
#
|
|
3
|
+
# NEW-BASE CANDIDATE for BESPOKE_THEME_SYSTEM.md, adjacent to Base 42
|
|
4
|
+
# Boutique Hotel. Base 42 is warm hospitality register (sun-washed
|
|
5
|
+
# palette, elegant serif, natural light). Atelier Radiance holds the
|
|
6
|
+
# elegant serif discipline but pivots the register from HOSPITALITY
|
|
7
|
+
# to BOUTIQUE CREATIVE AGENCY — dark hero canvas instead of sun-washed
|
|
8
|
+
# warm ground, high-contrast Didone-style serif at monumental scale
|
|
9
|
+
# instead of Reckless / Canela, and a repeating SUNBURST SVG ornament
|
|
10
|
+
# as the studio's identity mark that appears 6+ times across the
|
|
11
|
+
# composition.
|
|
12
|
+
#
|
|
13
|
+
# Authored from Matt's provided design brief (2026-07-04, rodeostudio.co
|
|
14
|
+
# reference — a Rodeo-Drive-adjacent boutique creative agency).
|
|
15
|
+
# Placeholder studio is a fictional boutique branding + creative agency
|
|
16
|
+
# called SOLSTICE — domain-agnostic mockup that could re-skin to any
|
|
17
|
+
# high-end boutique agency, luxury creative studio, or premium
|
|
18
|
+
# brand-consultancy portfolio. The register expresses "boutique agency
|
|
19
|
+
# premium" through the CONTRAST between dark hero + warm-cream +
|
|
20
|
+
# sage-green bands, the disciplined Didone serif display, and the
|
|
21
|
+
# recurring sunburst ornament — NOT through decoration or ambient glow.
|
|
22
|
+
#
|
|
23
|
+
# Tenth theme via the v2 harness. First Family E theme after
|
|
24
|
+
# overland-broadside; second Family E new-base candidate. Fifth theme
|
|
25
|
+
# overall built for boutique / creative agency use cases (after
|
|
26
|
+
# case-panel + arc-stack + ember-poster + marker-mag which are all
|
|
27
|
+
# adjacent registers).
|
|
28
|
+
#
|
|
29
|
+
# Alternative slugs considered — boutique-serif (too generic),
|
|
30
|
+
# sunburst-atelier (reversed word order feels wrong), radiance-atelier
|
|
31
|
+
# (same register but noun-first), boulevard-atelier (locks to a
|
|
32
|
+
# specific reference locale). Atelier Radiance picked because
|
|
33
|
+
# "atelier" nails the boutique-creative-agency register (a small
|
|
34
|
+
# working studio, not a corporate consultancy) and "radiance" alludes
|
|
35
|
+
# to both the sunburst ornament and the luxury/glow quality this
|
|
36
|
+
# register trades on.
|
|
37
|
+
|
|
38
|
+
name: Atelier Radiance
|
|
39
|
+
concept: Boutique creative agency register — dark canvas hero broken by warm-cream and sage-green inverted bands, high-contrast Didone-style serif display at monumental scale, a recurring sunburst SVG ornament (small, bespoke, 8-pointed radial star) that appears 6+ times across the composition as the studio's identity mark, and a single burgundy accent reserved for CTAs only.
|
|
40
|
+
influence: |
|
|
41
|
+
Rodeo-Drive-adjacent boutique creative agencies — high-end small studios that trade on refinement + editorial polish (the register held by boutique branding shops like Motto, Base Design at their most luxurious, and independent NY / LA studios that photograph their work in editorial contexts). Also luxury print advertising (the discipline of Bulgari / Cartier campaign layouts translated to a working studio page). Distinct from case-panel's showcase-agency register — Atelier Radiance is smaller, warmer, more editorial.
|
|
42
|
+
|
|
43
|
+
family: E
|
|
44
|
+
base_number: 42
|
|
45
|
+
base_note: |
|
|
46
|
+
New-base candidate adjacent to Base 42 Boutique Hotel. Base 42 is warm hospitality (sun-washed limestone canvas, Reckless serif, natural-light photography). Atelier Radiance holds the elegant serif discipline but pivots the surface — dark hero canvas, high-contrast Didone display type, and a repeating sunburst ornament that both bases lack. Same DNA (elegant + warm + editorial), different setting (boutique studio, not hotel lobby).
|
|
47
|
+
|
|
48
|
+
render_url: http://localhost:5173/themes/atelier-radiance
|
|
49
|
+
|
|
50
|
+
surface: web
|
|
51
|
+
|
|
52
|
+
typography:
|
|
53
|
+
display: Instrument Serif (free, Google Fonts) at 400 weight, or Bodoni Moda / Playfair Display as broader-market fallback — letter-spacing normal, mixed case. At scale — 100-140px hero wordmark, 72-90px section headlines, 50-60px big serif numerals for stat quad and approach list, 22-28px h3. Instrument Serif is the reference face's closest free approximation (Atcarquette is a paid Didone with high stroke-contrast; Instrument Serif hits the same register from Google Fonts). The wordmark leans on the display's letterform contrast — thin verticals meeting thick horizontals — so serif substitutions must preserve that contrast, not smooth it out.
|
|
54
|
+
body: Montserrat (free, Google Fonts) — 400 weight for body, 500 for labels, 600 for CTA + nav. 14-16px body copy, line-height 1.5. Sentence case, not all caps. Small caption labels ("WHY RODEO?" "WHAT WE DO") use a MODEST 12px Montserrat 600 with LETTER-SPACING 0.14em (below the mono-caps-eyebrow slop-blocklist fingerprint threshold — this is a legitimate boutique-agency caps label, not an eyebrow ornament).
|
|
55
|
+
mono: none. Atelier Radiance is a consumer luxury surface — mono has no role.
|
|
56
|
+
scale: 1.5 (perfect fifth — deliberately wide contrast so the serif display shouts at editorial scale and body settles into refined captioning)
|
|
57
|
+
|
|
58
|
+
palette:
|
|
59
|
+
bg: "#000000" # canvas — dark hero + dark contact section + dark footer
|
|
60
|
+
surface: "#111111" # raised card / slightly-lifted panel on the dark canvas
|
|
61
|
+
ink: "#FFFFFF" # white — primary text on dark bands
|
|
62
|
+
accent: "#8F161F" # deep burgundy — CTAs + sunburst ornament + accent word ONLY
|
|
63
|
+
cream: "#F1E9E0" # warm parchment — inverted "What we do" band
|
|
64
|
+
sage: "#ACB5B0" # muted sage-green — testimonials band
|
|
65
|
+
darkInk: "#1A1B1F" # ink for text on cream + sage bands
|
|
66
|
+
mute: "#8A8078" # secondary text (labels, captions)
|
|
67
|
+
|
|
68
|
+
density: balanced
|
|
69
|
+
|
|
70
|
+
motion: |
|
|
71
|
+
Ships live in the section renderer (no external dependencies):
|
|
72
|
+
1. Hero wordmark reveal — the serif wordmark fades in from opacity 0 + slight blur(2px) → 1 + blur(0) over 900ms cubic-bezier(0.19,1,0.22,1) on first paint. Letters do NOT stagger (this is an editorial register, not a marketing register).
|
|
73
|
+
2. Sunburst ornament rotation — the burgundy sunburst next to the hero rotates 90deg over 1200ms cubic-bezier on first paint, settling into its final position. Reads as "the identity mark clicking into place."
|
|
74
|
+
3. Numbered approach items — each row fades in from opacity 0 + translateY(12px) with 120ms stagger + 600ms cubic-bezier when scrolled into view. IntersectionObserver-driven.
|
|
75
|
+
4. Photo-hero slider — click left/right arrows or drag to advance. Transitions between photos are 800ms cubic-bezier ease-in-out crossfade, NOT auto-advance (auto-advancing is the slop-blocklist hit; this waits for user input).
|
|
76
|
+
5. Service tile hover — the burgundy sunburst on each tile spins 15deg + scales(1.05) on card hover, 220ms cubic-bezier. Card background stays flat (no lift, no shadow — this is boutique restraint, not corporate polish).
|
|
77
|
+
6. Testimonial carousel — click left/right chevrons to advance. Auto-advances every 8s IF the user hasn't clicked; pauses on hover. Duration 8s is a testimonial-appropriate pace (long enough to read).
|
|
78
|
+
7. FAQ accordion — chevron rotates 45deg (+ becomes ×) on open, 400ms cubic-bezier. Only one open at a time. Body expands smoothly.
|
|
79
|
+
8. Contact form focus — field label lifts + gets underlined on focus, 200ms transition. Send button hover flips from burgundy-fill to burgundy-outline with cream text, 200ms.
|
|
80
|
+
9. prefers-reduced-motion: reduce — wordmark and sunburst at final state; stagger disabled; auto-advance carousel paused; hover transitions instant; slider still functional but crossfade becomes instant.
|
|
81
|
+
|
|
82
|
+
Customer installs these as dependencies for the deeper motion tier:
|
|
83
|
+
- Lenis — smooth inertial scroll (the alternating dark/cream/sage band transitions really benefit from inertial scroll for the editorial cadence).
|
|
84
|
+
- GSAP ScrollTrigger — the approach-list stagger + service-tile reveal + testimonial-carousel logic all sit comfortably in a GSAP timeline.
|
|
85
|
+
- Custom branded preloader — the sunburst ornament expanding from center at 120px → 40px final position, then the wordmark fading in from behind it.
|
|
86
|
+
|
|
87
|
+
Motion character: refined, editorial, considered. Custom cubic-bezier(0.19,1,0.22,1) for reveals. Nothing quick, nothing bouncy, nothing tech-forward. The whole point is that this register reads as "designed by a small studio with editorial sensibility" — motion is intentional but never showy.
|
|
88
|
+
|
|
89
|
+
signature: |
|
|
90
|
+
A recurring SUNBURST SVG ornament — 8-pointed radial star with alternating long and short rays, drawn as a bespoke inline SVG path (not a font, not an emoji, not stock iconography) — repeats 6+ times across the composition as the studio's identity mark. It appears at monumental scale (120px+ burgundy) in the hero next to the wordmark, at medium scale (48px cream) at the top of the "What we do" band, at small scale (28px cream) on each of the six service tiles, and at tiny scale (16px sage) on the testimonial band. Big serif Didone-style DISPLAY WORDMARK ("SOLSTICE") at 100-140px on the dark hero canvas, letter-spacing normal, high stroke-contrast — thin verticals meeting thick horizontals so the wordmark reads as a luxury print advertising headline. A STAT QUAD immediately below the wordmark ("12+ YEARS / 20+ BRANDS / 100% TAILORED / ∞ CREATIVITY & GROWTH") — each number in the big serif at 48-60px, each label in Montserrat 12px 600-weight caps beneath. The composition ALTERNATES DARK / CREAM / SAGE BANDS through the page — dark hero → white "Our Approach" numbered list → dark full-bleed photograph slider → cream "What we do" band with 6 service tiles → sage-green testimonial carousel → white FAQ accordion → dark contact-form band → dark footer. Approach list uses BIG SERIF NUMERALS (01 / 02 / 03) at 48px beside each item title, with HAIRLINE DIVIDERS between rows (a rare legitimate exception to the no-hairline-between-sections rule because this IS a numbered list layout that the register calls for). Burgundy #8F161F is RESERVED for the sunburst ornaments + the "Book a discovery call" + "Send message" CTAs — it never floods a large area. Border-radius 0 everywhere. Brand character sits in the recurring sunburst ornament, the Didone display type, the disciplined dark/cream/sage rhythm, and the burgundy CTA restraint — not in decoration, not in glow, not in stock-agency animation.
|
|
91
|
+
|
|
92
|
+
imagery: |
|
|
93
|
+
Full-bleed editorial PHOTOGRAPHY on the dark canvas — luxury travel / hospitality / lifestyle imagery under directional light (a hotel garden with a figure in white, a boutique interior with warm-tungsten lighting, a fashion look-book portrait). Photo-hero section carries a real hero image with small caption bottom-left ("Solstice Studio × Baitong Hotel — Phnom Penh 2025" register). Service tiles are FLAT COLORED PANELS (cream or sage) with the burgundy sunburst centered as the only mark — no photography inside service tiles, because that's the ornament's role. Testimonial cards use a small circular avatar FPO block for the author photo. NO gradient blobs, NO glassmorphism, NO stock illustrations. The register reads as PRINTED + PHOTOGRAPHED + SET-DESIGNED, not as a generated dashboard.
|
|
94
|
+
|
|
95
|
+
best_for:
|
|
96
|
+
- Boutique creative agencies (small studios trading on editorial polish + named clients)
|
|
97
|
+
- Luxury brand consultancies (boutique branding + strategy shops)
|
|
98
|
+
- High-end freelance creative directors + brand designers
|
|
99
|
+
- Independent creative studios doing hospitality / fashion / lifestyle work
|
|
100
|
+
- Rebrand marketing pages for premium consumer brands wanting agency-editorial register
|
|
101
|
+
- Portfolio + case-study surfaces for creative directors, photographers, and stylists
|
|
102
|
+
|
|
103
|
+
avoid:
|
|
104
|
+
- "Border-radius greater than 0px anywhere on the page — sharp corners are core to the identity"
|
|
105
|
+
- "Rounded pill buttons or fully-rounded CTAs — buttons are sharp-cornered with 0 radius, that's it"
|
|
106
|
+
- "Sans-serif display type at hero scale — the display face MUST be a high-contrast Didone-style serif (Instrument Serif / Bodoni Moda / Playfair Display), never Inter Display / Anton / DM Sans"
|
|
107
|
+
- "Mono type as a decorative label voice — mono has no role on this consumer luxury surface"
|
|
108
|
+
- "Multiple accent colors flooding the composition — burgundy is the ONE studio CTA color. The cream + sage + white are BAND surfaces, not accents. Introducing gold / orange / teal as additional accents collapses the register."
|
|
109
|
+
- "Warm-tan canvas as the primary background — the canvas IS DARK (near-black). Swapping to warm-tan collapses this into generic-boutique-editorial slop."
|
|
110
|
+
- "Corporate polish — no drop-shadow-md, no soft-glow, no gradient hero backdrop. The composition is FLAT and EDITORIAL, not corporate."
|
|
111
|
+
- "Three-tier pricing cards or feature-pillar grids — the service grid is deliberately 6 tiles with an ornament on each, not 3 stat cards with icons"
|
|
112
|
+
- "Center-aligned hero — hero is LEFT-WEIGHTED with the wordmark and stat quad flush left, and the sunburst ornament flush right"
|
|
113
|
+
- "Grain overlay everywhere — grain lives ONLY on the darker bands as a subtle overlay per the reference, never smeared across cream or sage surfaces"
|
|
114
|
+
- "Auto-advancing hero sliders that cycle without user input — the photo hero waits for click or drag; only the testimonial carousel auto-advances (at 8s intervals with pause-on-hover)"
|
|
115
|
+
- "Emoji or decorative unicode marks — the sunburst SVG carries all the ornamentation"
|
|
116
|
+
- "Instagram-face stock photography — imagery MUST feel editorial + directed. Avoid smiling-woman-with-latte stock; reach for architectural interiors, garden scenes, luxury hospitality"
|
|
117
|
+
- "Mono-caps eyebrows (SECTION · X style dot-metadata) — the register uses Montserrat 12px 600 caps with 0.14em tracking for labels, which is below the mono-caps-eyebrow CSS fingerprint threshold and reads as a legitimate boutique-agency label, not an ornament"
|
|
118
|
+
|
|
119
|
+
banned_defaults:
|
|
120
|
+
# Global blocklist from BESPOKE_THEME_SYSTEM.md
|
|
121
|
+
- "claude-cream (#F4F1EA + serif + #D97757)"
|
|
122
|
+
- "void+acid (near-black bg + single bright acid-green or vermilion accent)"
|
|
123
|
+
- "broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)"
|
|
124
|
+
- "tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)"
|
|
125
|
+
- "uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)"
|
|
126
|
+
# Base-specific
|
|
127
|
+
- "sunburst-as-decoration (the sunburst is the STUDIO'S IDENTITY MARK. It has 6+ specific placements — hero, What-we-do headline, each of the 6 service tiles, testimonial band, footer. Adding a random sunburst anywhere ELSE collapses it from identity mark to decorative ornament and the register dies.)"
|
|
128
|
+
- "burgundy-flood (burgundy is CTA + sunburst color ONLY. The moment you use it as a section background or a large surface color, the register collapses into wine-region-DTC slop.)"
|
|
129
|
+
- "serif-plus-modern-sans-body (the body face is Montserrat which pairs with the serif — using Inter / SF Pro / a modern-tech sans in the body flips this register into stock consumer-tech and the boutique-agency read dies.)"
|
|
130
|
+
- "sun-washed-hospitality-palette (Base 42 Boutique Hotel is limestone canvas + caramel + eucalyptus. Adopting THAT palette here collapses Atelier Radiance INTO Base 42 — the register only holds if the canvas is DARK not limestone.)"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Generated from theme.yml. Do not edit by hand — edit theme.yml + re-materialize.
|
|
2
|
+
|
|
3
|
+
export const tokens = {
|
|
4
|
+
slug: "atelier-radiance",
|
|
5
|
+
family: "E",
|
|
6
|
+
base: "42",
|
|
7
|
+
palette: {
|
|
8
|
+
"bg": "#000000",
|
|
9
|
+
"surface": "#111111",
|
|
10
|
+
"ink": "#FFFFFF",
|
|
11
|
+
"accent": "#8F161F",
|
|
12
|
+
"cream": "#F1E9E0",
|
|
13
|
+
"sage": "#ACB5B0",
|
|
14
|
+
"darkInk": "#1A1B1F",
|
|
15
|
+
"mute": "#8A8078"
|
|
16
|
+
},
|
|
17
|
+
typography: {
|
|
18
|
+
"display": "Instrument Serif (free, Google Fonts) at 400 weight, or Bodoni Moda / Playfair Display as broader-market fallback — letter-spacing normal, mixed case. At scale — 100-140px hero wordmark, 72-90px section headlines, 50-60px big serif numerals for stat quad and approach list, 22-28px h3. Instrument Serif is the reference face's closest free approximation (Atcarquette is a paid Didone with high stroke-contrast; Instrument Serif hits the same register from Google Fonts). The wordmark leans on the display's letterform contrast — thin verticals meeting thick horizontals — so serif substitutions must preserve that contrast, not smooth it out.",
|
|
19
|
+
"body": "Montserrat (free, Google Fonts) — 400 weight for body, 500 for labels, 600 for CTA + nav. 14-16px body copy, line-height 1.5. Sentence case, not all caps. Small caption labels (\"WHY RODEO?\" \"WHAT WE DO\") use a MODEST 12px Montserrat 600 with LETTER-SPACING 0.14em (below the mono-caps-eyebrow slop-blocklist fingerprint threshold — this is a legitimate boutique-agency caps label, not an eyebrow ornament).",
|
|
20
|
+
"mono": "none. Atelier Radiance is a consumer luxury surface — mono has no role.",
|
|
21
|
+
"scale": "1.5 (perfect fifth — deliberately wide contrast so the serif display shouts at editorial scale and body settles into refined captioning)"
|
|
22
|
+
},
|
|
23
|
+
surface: "web",
|
|
24
|
+
density: "balanced",
|
|
25
|
+
motion: "Ships live in the section renderer (no external dependencies):\n1. Hero wordmark reveal — the serif wordmark fades in from opacity 0 + slight blur(2px) → 1 + blur(0) over 900ms cubic-bezier(0.19,1,0.22,1) on first paint. Letters do NOT stagger (this is an editorial register, not a marketing register).\n2. Sunburst ornament rotation — the burgundy sunburst next to the hero rotates 90deg over 1200ms cubic-bezier on first paint, settling into its final position. Reads as \"the identity mark clicking into place.\"\n3. Numbered approach items — each row fades in from opacity 0 + translateY(12px) with 120ms stagger + 600ms cubic-bezier when scrolled into view. IntersectionObserver-driven.\n4. Photo-hero slider — click left/right arrows or drag to advance. Transitions between photos are 800ms cubic-bezier ease-in-out crossfade, NOT auto-advance (auto-advancing is the slop-blocklist hit; this waits for user input).\n5. Service tile hover — the burgundy sunburst on each tile spins 15deg + scales(1.05) on card hover, 220ms cubic-bezier. Card background stays flat (no lift, no shadow — this is boutique restraint, not corporate polish).\n6. Testimonial carousel — click left/right chevrons to advance. Auto-advances every 8s IF the user hasn't clicked; pauses on hover. Duration 8s is a testimonial-appropriate pace (long enough to read).\n7. FAQ accordion — chevron rotates 45deg (+ becomes ×) on open, 400ms cubic-bezier. Only one open at a time. Body expands smoothly.\n8. Contact form focus — field label lifts + gets underlined on focus, 200ms transition. Send button hover flips from burgundy-fill to burgundy-outline with cream text, 200ms.\n9. prefers-reduced-motion: reduce — wordmark and sunburst at final state; stagger disabled; auto-advance carousel paused; hover transitions instant; slider still functional but crossfade becomes instant.\n\nCustomer installs these as dependencies for the deeper motion tier:\n- Lenis — smooth inertial scroll (the alternating dark/cream/sage band transitions really benefit from inertial scroll for the editorial cadence).\n- GSAP ScrollTrigger — the approach-list stagger + service-tile reveal + testimonial-carousel logic all sit comfortably in a GSAP timeline.\n- Custom branded preloader — the sunburst ornament expanding from center at 120px → 40px final position, then the wordmark fading in from behind it.\n\nMotion character: refined, editorial, considered. Custom cubic-bezier(0.19,1,0.22,1) for reveals. Nothing quick, nothing bouncy, nothing tech-forward. The whole point is that this register reads as \"designed by a small studio with editorial sensibility\" — motion is intentional but never showy.\n",
|
|
26
|
+
signature: "A recurring SUNBURST SVG ornament — 8-pointed radial star with alternating long and short rays, drawn as a bespoke inline SVG path (not a font, not an emoji, not stock iconography) — repeats 6+ times across the composition as the studio's identity mark. It appears at monumental scale (120px+ burgundy) in the hero next to the wordmark, at medium scale (48px cream) at the top of the \"What we do\" band, at small scale (28px cream) on each of the six service tiles, and at tiny scale (16px sage) on the testimonial band. Big serif Didone-style DISPLAY WORDMARK (\"SOLSTICE\") at 100-140px on the dark hero canvas, letter-spacing normal, high stroke-contrast — thin verticals meeting thick horizontals so the wordmark reads as a luxury print advertising headline. A STAT QUAD immediately below the wordmark (\"12+ YEARS / 20+ BRANDS / 100% TAILORED / ∞ CREATIVITY & GROWTH\") — each number in the big serif at 48-60px, each label in Montserrat 12px 600-weight caps beneath. The composition ALTERNATES DARK / CREAM / SAGE BANDS through the page — dark hero → white \"Our Approach\" numbered list → dark full-bleed photograph slider → cream \"What we do\" band with 6 service tiles → sage-green testimonial carousel → white FAQ accordion → dark contact-form band → dark footer. Approach list uses BIG SERIF NUMERALS (01 / 02 / 03) at 48px beside each item title, with HAIRLINE DIVIDERS between rows (a rare legitimate exception to the no-hairline-between-sections rule because this IS a numbered list layout that the register calls for). Burgundy #8F161F is RESERVED for the sunburst ornaments + the \"Book a discovery call\" + \"Send message\" CTAs — it never floods a large area. Border-radius 0 everywhere. Brand character sits in the recurring sunburst ornament, the Didone display type, the disciplined dark/cream/sage rhythm, and the burgundy CTA restraint — not in decoration, not in glow, not in stock-agency animation.\n",
|
|
27
|
+
} as const;
|
|
28
|
+
|
|
29
|
+
export type Tokens = typeof tokens;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Design Direction — Automotive-EV
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Lucid soft luminance · Rivian outdoor confidence · Polestar Scandinavian minimal · Tesla blackout · Mercedes EQ techno-luxury
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
An EV instrument cluster delivered through the browser. Dark canvas — closer to deep graphite than absolute black — carrying a single cool-cyan luminous accent. Range, 0-60, top speed and charging speed are the design itself: oversized tabular numerals in a precision mono, reading like a vehicle HUD. Type is a precise neutral sans (Polestar / Lucid signage feel). The page reads calm, technical, slightly luminous — not loud, never neon.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Lucid Motors** → near-black canvas with soft cyan glow on range numerals. The 516-mile range IS the marketing.
|
|
11
|
+
- **Rivian** → outdoor confidence. Neutral dark canvas with a mossy-green secondary accent reserved for adventure context.
|
|
12
|
+
- **Polestar** → Scandinavian minimalism. Sharp type, single accent, generous void around every element.
|
|
13
|
+
- **Tesla** → blackout marketing — specs as oversized tabular numerals, no decoration.
|
|
14
|
+
- **Mercedes EQ** → techno-luxury halo. Soft blue glow rims around hero stills, like a charged-up product reveal.
|
|
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 **graphite** (background) → **graphite-elev** (card) → **shadow-steel** (secondary/muted). Depth comes from hairline borders plus the occasional soft cyan glow on hero elements — never from drop shadows. Pure black is forbidden — `--graphite` (warm cool-tinted) replaces it; pure white is forbidden — `--cool-white` replaces it.
|
|
18
|
+
|
|
19
|
+
Brand tokens: `--graphite`, `--graphite-elev`, `--cool-white`, `--cyan`, `--cyan-deep`, `--moss`. Primary is cyan. Moss-green is reserved for outdoor-adventure context (Rivian-flavored sections) — never as a default action color.
|
|
20
|
+
|
|
21
|
+
## Typography
|
|
22
|
+
- **Display:** Space Grotesk (Polestar / Lucid signage feel). h1–h4. Tracking `-0.018em` — Space Grotesk display tightens cleanly negative.
|
|
23
|
+
- **Body:** Inter (Tesla / Rivian body sans). Body base **16px** with **line-height 1.6** — comfortable on dark surfaces, screen-first.
|
|
24
|
+
- **Mono:** JetBrains Mono. Range, 0-60, top speed, kW. Always `font-variant-numeric: tabular-nums`. Mono carries the heaviest visual weight on the page.
|
|
25
|
+
|
|
26
|
+
H1 uses `clamp(3rem, 9vw, 7.5rem)` — the spec-as-headline scale. Font features: `"tnum"`, `"ss01"`, `"cv11"`.
|
|
27
|
+
|
|
28
|
+
## Spacing
|
|
29
|
+
- **Container:** `max-w-7xl px-6 lg:px-12` — full-bleed product cinematography and 4-up oversized spec strips need the width.
|
|
30
|
+
- **Section padding tiers:**
|
|
31
|
+
- Hero: `pt-24 pb-16 lg:pt-36 lg:pb-24`
|
|
32
|
+
- Default: `py-20 lg:py-32`
|
|
33
|
+
- Tight: `py-12 lg:py-20`
|
|
34
|
+
- **Allowed scale values:** 4 8 12 16 20 24 32 40 48 64 80 96 128 160. Density tier is **medium**.
|
|
35
|
+
|
|
36
|
+
## Color
|
|
37
|
+
No hex anywhere. All color via tokens. Opacity via `/N` modifier. The palette is intentionally tight: graphite, cool-white, cyan, moss (rarely), warning-red (semantic only). Cyan is the only luminous color — keep it scarce so the glow utilities still feel earned.
|
|
38
|
+
|
|
39
|
+
## Radius
|
|
40
|
+
`--radius: 0.5rem`. Soft chamfer only — slightly rounded, instrument-cluster soft edges. Pills are disallowed (`pillsAllowed: false`) — they read app, not vehicle UI.
|
|
41
|
+
|
|
42
|
+
## Shadows
|
|
43
|
+
**Glow.** Two utilities:
|
|
44
|
+
- `.glow-cyan` — high-intensity halo for the single hero CTA / hero product still. Never on more than one element per page.
|
|
45
|
+
- `.glow-soft` — low-intensity cyan halo plus 1px inset highlight for spec cards and hero panels. The "charged" look.
|
|
46
|
+
|
|
47
|
+
No multi-color glows. No green or red glows.
|
|
48
|
+
|
|
49
|
+
## Motion
|
|
50
|
+
Four keyframes:
|
|
51
|
+
- `ken-burns` — 28000ms infinite scale + translate on hero product stills.
|
|
52
|
+
- `rise-in` — 800ms opacity + 24px translate, the standard entrance.
|
|
53
|
+
- `pulse-glow` — 2400ms infinite charging-ring breath on the single hero CTA only.
|
|
54
|
+
- `count-up` — 600ms fade-rise on spec numerals as they enter the viewport. Instrument-cluster wake.
|
|
55
|
+
|
|
56
|
+
Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` honored. **No marquee. No parallax.** Glows breathe, numerals wake — that's the whole motion vocabulary.
|
|
57
|
+
|
|
58
|
+
## Component patterns
|
|
59
|
+
- **Buttons:** Solid cyan-on-graphite for the single hero action (Reserve / Configure). Sharp 0.5rem corners. Secondary is hairline-outlined ghost in cool-white. Text-link in cyan with underline-on-hover for body CTAs. No pills. Never a moss or red button face.
|
|
60
|
+
- **Cards:** 0.5rem chamfered corners, hairline border on graphite-elev surface. Spec cards lead with oversized tabular mono numerals, label in mono-uppercase above. Hero cards may carry a `glow-soft` halo.
|
|
61
|
+
- **Inputs:** Full box with 1px border on graphite-elev surface. 0.5rem radius. Label above in mono-uppercase tracking `0.16em`. Focus border switches to cyan plus a 2px cyan glow ring.
|
|
62
|
+
- **CTA links:** Solid cyan rectangle for hero action with optional `pulse-glow`. Text-link cyan for body CTAs.
|
|
63
|
+
|
|
64
|
+
## Recommended rich media
|
|
65
|
+
The hero is **studio-lit EV product cinematography** with a hint of blue-rim light on the body — Mercedes EQ brand-film aesthetic. Charging-network animations and range overlays are welcome as a secondary frame. Drone exteriors of the car on a coastal highway at golden hour work for Rivian-flavored sections; never highway B-roll of generic traffic.
|
|
66
|
+
|
|
67
|
+
**AI tool recommendations:** **Midjourney v6+** with prompts like *"electric vehicle product photography, studio-lit, deep graphite backdrop, soft cyan rim light, Polestar brand film aesthetic, medium format, 85mm, no people, no asphalt under wheels"*. Avoid Midjourney's default "futuristic car" prompt — produces neon CGI. Explicitly prompt for restraint and brand-film authorship.
|
|
68
|
+
|
|
69
|
+
**Aspect ratios:** 21:9 cinematic for hero; 16:9 for model cards; 4:3 for charging-station UI mockups. **Never 1:1.**
|
|
70
|
+
|
|
71
|
+
**Video:** A single autoplay-muted hero reel — slow camera dolly around the car with the cyan rim-light highlight. 18–24 seconds, no music. ≤6 MB per loop, H.265 or AV1.
|
|
72
|
+
|
|
73
|
+
**Avoid:** neon-laser racing visuals (gamer aesthetic), fake "futuristic city" backdrops (Cyberpunk territory), HUD overlays with random data scrolls (dashboard cosplay), green-energy clipart leaves (sincere but cheap), gas-station comparisons (defensive marketing).
|
|
74
|
+
|
|
75
|
+
## Component families
|
|
76
|
+
None at install time. First likely families: spec-strip, model-card, charging-network-strip, range-calculator.
|
|
77
|
+
|
|
78
|
+
## Details
|
|
79
|
+
- **Selection:** `hsl(var(--brand-cyan) / 0.28)` background, foreground text.
|
|
80
|
+
- **Focus ring:** `2px solid hsl(var(--ring))` — cyan, slightly thicker than other dark directions because the glow vocabulary supports it.
|
|
81
|
+
- **Scrollbar:** thin.
|
|
82
|
+
|
|
83
|
+
## Exceptions
|
|
84
|
+
None yet.
|
|
85
|
+
|
|
86
|
+
## Revisions
|
|
87
|
+
- Initial direction, generated at install time.
|
|
@@ -0,0 +1,183 @@
|
|
|
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 automotiveEv = {
|
|
6
|
+
name: "automotive-ev",
|
|
7
|
+
ethos:
|
|
8
|
+
"Lucid soft luminance · Rivian outdoor confidence · Polestar Scandinavian minimal · Tesla blackout · Mercedes EQ techno-luxury",
|
|
9
|
+
references: [
|
|
10
|
+
{ brand: "Lucid Motors", trait: "near-black canvas with soft cyan glow on range numerals" },
|
|
11
|
+
{ brand: "Rivian", trait: "outdoor confidence — neutral dark canvas, mossy-green accent for adventure" },
|
|
12
|
+
{ brand: "Polestar", trait: "Scandinavian minimalism — sharp type, single accent, generous void" },
|
|
13
|
+
{ brand: "Tesla", trait: "blackout marketing — specs as oversized tabular numerals" },
|
|
14
|
+
{ brand: "Mercedes EQ", trait: "techno-luxury halo — soft blue glow rims around hero stills" },
|
|
15
|
+
],
|
|
16
|
+
feel:
|
|
17
|
+
"Dark canvas — closer to deep graphite than absolute black — carrying a single cool-cyan glow accent. " +
|
|
18
|
+
"Range, 0-60, top speed and charging speed are the design: oversized tabular numerals in a precision mono. " +
|
|
19
|
+
"Type is a precise neutral sans (Polestar / Lucid signage feel). The page reads like an EV instrument cluster: " +
|
|
20
|
+
"calm, technical, slightly luminous.",
|
|
21
|
+
|
|
22
|
+
fonts: {
|
|
23
|
+
display: {
|
|
24
|
+
family: "Space Grotesk",
|
|
25
|
+
fallback: ["Inter", "Helvetica Neue", "system-ui", "-apple-system", "sans-serif"],
|
|
26
|
+
from: "Polestar / Lucid signage sans — geometric, precise, slightly humanist",
|
|
27
|
+
googleFont: "Space+Grotesk",
|
|
28
|
+
weights: [400, 500, 600, 700],
|
|
29
|
+
},
|
|
30
|
+
body: {
|
|
31
|
+
family: "Inter",
|
|
32
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "Helvetica Neue", "sans-serif"],
|
|
33
|
+
from: "Tesla / Rivian body sans — neutral, dense, screen-first",
|
|
34
|
+
googleFont: "Inter",
|
|
35
|
+
weights: [400, 500, 600],
|
|
36
|
+
},
|
|
37
|
+
mono: {
|
|
38
|
+
family: "JetBrains Mono",
|
|
39
|
+
fallback: ["Berkeley Mono", "ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
|
|
40
|
+
from: "tabular numerics for range, 0-60, top speed, kW — the EV instrument cluster heritage",
|
|
41
|
+
googleFont: "JetBrains+Mono",
|
|
42
|
+
weights: [400, 500, 700],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
typography: {
|
|
47
|
+
headingTracking: "-0.018em", // Space Grotesk display tightens cleanly negative
|
|
48
|
+
bodyTracking: "0",
|
|
49
|
+
fontFeatureSettings: '"tnum", "ss01", "cv11"',
|
|
50
|
+
h1ScaleClamp: "clamp(3rem, 9vw, 7.5rem)", // oversized — EV-spec-as-headline scale
|
|
51
|
+
bodyBaseSize: "1rem",
|
|
52
|
+
bodyLineHeight: "1.6",
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
colors: {
|
|
56
|
+
background: { hsl: "220 14% 7%", from: "Lucid deep graphite — near-black with a faint cool bias, never pure" },
|
|
57
|
+
foreground: { hsl: "200 16% 96%", from: "Polestar cool white — neutral signage white" },
|
|
58
|
+
card: { hsl: "220 12% 10%", from: "elevated graphite surface — one stop above canvas" },
|
|
59
|
+
popover: { hsl: "220 12% 12%", from: "popover surface — two stops up" },
|
|
60
|
+
primary: { hsl: "190 92% 60%", from: "Lucid cool cyan — soft luminous accent, the canonical action color" },
|
|
61
|
+
primaryForeground: { hsl: "220 14% 7%", from: "graphite on cyan" },
|
|
62
|
+
secondary: { hsl: "220 10% 14%", from: "Tesla shadowed-steel, deeper tier" },
|
|
63
|
+
secondaryForeground: { hsl: "200 16% 96%", from: "cool white on dark steel" },
|
|
64
|
+
muted: { hsl: "220 8% 16%", from: "muted graphite — quiet panel surface" },
|
|
65
|
+
mutedForeground: { hsl: "200 8% 66%", from: "neutral secondary text — instrument cluster gray" },
|
|
66
|
+
accent: { hsl: "220 8% 18%", from: "hover surface — brushed-aluminum highlight" },
|
|
67
|
+
accentForeground: { hsl: "200 16% 96%", from: "cool white on accent" },
|
|
68
|
+
border: { hsl: "220 8% 20%", from: "panel-gap hairline — Polestar body-line tolerance, visible only on inspection" },
|
|
69
|
+
input: { hsl: "220 8% 20%", from: "same as border — single hairline language" },
|
|
70
|
+
ring: { hsl: "190 92% 60%", from: "cyan — focus ring is the canonical luminous accent" },
|
|
71
|
+
destructive: { hsl: "8 72% 56%", from: "warning lamp red — battery-low / fault indicator" },
|
|
72
|
+
destructiveForeground: { hsl: "200 16% 96%", from: "cool white on warning red" },
|
|
73
|
+
brand: {
|
|
74
|
+
cyan: { hsl: "190 92% 60%", from: "= primary; Lucid cool cyan — the luminous accent" },
|
|
75
|
+
"cyan-deep": { hsl: "200 80% 38%", from: "Mercedes EQ deeper blue — gradient anchor for glow utility" },
|
|
76
|
+
graphite: { hsl: "220 14% 7%", from: "= background; Lucid deep graphite canvas" },
|
|
77
|
+
"graphite-elev": { hsl: "220 12% 10%", from: "= card; elevated graphite surface" },
|
|
78
|
+
"cool-white": { hsl: "200 16% 96%", from: "= foreground; Polestar neutral signage white" },
|
|
79
|
+
moss: { hsl: "150 32% 42%", from: "Rivian mossy-green — outdoor-adventure secondary accent, used sparingly" },
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
spacing: {
|
|
84
|
+
base: 4,
|
|
85
|
+
scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128, 160],
|
|
86
|
+
containerMax: "max-w-7xl", // full-bleed product cinematography demands width
|
|
87
|
+
containerPadding: "px-6 lg:px-12",
|
|
88
|
+
sectionPadding: {
|
|
89
|
+
hero: "pt-24 pb-16 lg:pt-36 lg:pb-24",
|
|
90
|
+
default: "py-20 lg:py-32",
|
|
91
|
+
tight: "py-12 lg:py-20",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
radius: {
|
|
96
|
+
base: "0.5rem", // soft chamfer — slightly rounded, instrument-cluster soft edges
|
|
97
|
+
pillsAllowed: false, // pills read app; EV product UI uses rectangles with soft chamfer
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
shadows: {
|
|
101
|
+
style: "glow",
|
|
102
|
+
utilities: {
|
|
103
|
+
"glow-cyan":
|
|
104
|
+
"0 0 0 1px hsl(var(--brand-cyan) / 0.35), " +
|
|
105
|
+
"0 8px 32px hsl(var(--brand-cyan) / 0.22), " +
|
|
106
|
+
"0 32px 96px hsl(var(--brand-cyan) / 0.18)",
|
|
107
|
+
"glow-soft":
|
|
108
|
+
"0 12px 48px hsl(var(--brand-cyan) / 0.10), " +
|
|
109
|
+
"0 1px 0 hsl(var(--brand-cool-white) / 0.04) inset",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
motion: {
|
|
114
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
115
|
+
durations: {
|
|
116
|
+
reveal: 800,
|
|
117
|
+
loop: 2400,
|
|
118
|
+
ambient: 28000, // ken-burns on hero stills
|
|
119
|
+
},
|
|
120
|
+
keyframes: {
|
|
121
|
+
"ken-burns": {
|
|
122
|
+
css:
|
|
123
|
+
"0% { transform: scale(1.04) translate(0, 0); }\n" +
|
|
124
|
+
"100% { transform: scale(1.12) translate(-1.2%, -0.5%); }",
|
|
125
|
+
defaultDuration: 28000,
|
|
126
|
+
iteration: "infinite",
|
|
127
|
+
purpose: "hero EV still drift — slow product-film camera push",
|
|
128
|
+
},
|
|
129
|
+
"rise-in": {
|
|
130
|
+
css:
|
|
131
|
+
"from { opacity: 0; transform: translateY(24px); }\n" +
|
|
132
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
133
|
+
defaultDuration: 800,
|
|
134
|
+
iteration: "once",
|
|
135
|
+
purpose: "section reveal — spec strip and model reveal entrance",
|
|
136
|
+
},
|
|
137
|
+
"pulse-glow": {
|
|
138
|
+
css:
|
|
139
|
+
"0%, 100% { box-shadow: 0 0 0 0 hsl(var(--brand-cyan) / 0.45); }\n" +
|
|
140
|
+
"50% { box-shadow: 0 0 0 16px hsl(var(--brand-cyan) / 0); }",
|
|
141
|
+
defaultDuration: 2400,
|
|
142
|
+
iteration: "infinite",
|
|
143
|
+
purpose: "single primary CTA halo — soft charging-ring breath, never on more than one element per page",
|
|
144
|
+
},
|
|
145
|
+
"count-up": {
|
|
146
|
+
css:
|
|
147
|
+
"from { opacity: 0; transform: translateY(8px); }\n" +
|
|
148
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
149
|
+
defaultDuration: 600,
|
|
150
|
+
iteration: "once",
|
|
151
|
+
purpose: "spec numerals fade-rise on enter — instrument cluster wake",
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
respectsReducedMotion: true,
|
|
155
|
+
},
|
|
156
|
+
|
|
157
|
+
density: "medium",
|
|
158
|
+
|
|
159
|
+
patterns: {
|
|
160
|
+
button:
|
|
161
|
+
"Solid cyan-on-graphite for the single hero action (Reserve / Configure). Sharp 0.5rem corners. " +
|
|
162
|
+
"Secondary actions are hairline-outlined ghost buttons in cool-white. " +
|
|
163
|
+
"Text-link in cyan with underline-on-hover for body CTAs. No pills. " +
|
|
164
|
+
"Never a moss-green or red button face — those are semantic only.",
|
|
165
|
+
card:
|
|
166
|
+
"0.5rem chamfered corners. Hairline border on graphite-elev card surface. " +
|
|
167
|
+
"Internal padding p-6 lg:p-10. Spec cards lead with oversized tabular numerals in mono, " +
|
|
168
|
+
"label in mono-uppercase above. Hero cards may carry a glow-soft halo.",
|
|
169
|
+
input:
|
|
170
|
+
"Full box with 1px --border on graphite-elev surface. 0.5rem radius. " +
|
|
171
|
+
"Label sits above in mono-uppercase, tracking 0.16em. Focus border switches to cyan plus a 2px cyan glow ring.",
|
|
172
|
+
cta:
|
|
173
|
+
"Solid cyan rectangle for the hero action with optional pulse-glow halo. " +
|
|
174
|
+
"Text-link cyan for body CTAs. Never a pill, never a multi-color gradient, never a moss-green CTA.",
|
|
175
|
+
},
|
|
176
|
+
|
|
177
|
+
details: {
|
|
178
|
+
selectionBg: "hsl(var(--brand-cyan) / 0.28)",
|
|
179
|
+
selectionFg: "hsl(var(--foreground))",
|
|
180
|
+
focusRing: "2px solid hsl(var(--ring))",
|
|
181
|
+
scrollbarStyle: "thin",
|
|
182
|
+
},
|
|
183
|
+
} satisfies Partial<Direction> & { name: string };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Design Direction — Automotive-Luxury
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Bentley matte-black configurator · Rolls-Royce monogram restraint · Aston Martin product cinematography · Bugatti hyper-luxury minimalism · Maybach champagne mark
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
A private showroom in browser form. Matte near-black canvas carries full-bleed bespoke product cinematography, a high-contrast serif names the model as if it were stamped on a body plate, and a single champagne accent does every job interaction does. No secondary brand color competes. The page is the car; everything else gets out of the way.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Bentley** → matte black canvas, full-bleed configurator stills, single champagne accent. The configurator IS the marketing site.
|
|
11
|
+
- **Rolls-Royce** → monogram restraint. Negative space around the spirit-of-ecstasy is the design.
|
|
12
|
+
- **Aston Martin** → cinematic product photography, James-Bond reveal cadence. Slow ken-burns over stills, never UI animation for its own sake.
|
|
13
|
+
- **Bugatti** → hyper-luxury minimalism. Specs read like instrument-cluster numerals; everything else is photography.
|
|
14
|
+
- **Maybach** → champagne-gold mark, two-tone deep colorways. The accent gets quieter and richer, never brighter.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin. Do not introduce numbered or generic tokens — if a new color is needed, name a brand it traces to.
|
|
18
|
+
|
|
19
|
+
Surface stack is **matte black** (background) → **elevated matte** (card) → **shadow-leather** (secondary/muted). Depth comes from hairline borders on warm-near-black, never from drop shadows or fill brightening. Pure black is forbidden — `--matte-black` (warm-tinted) replaces it; pure white is forbidden — `--ivory` replaces it.
|
|
20
|
+
|
|
21
|
+
Brand tokens: `--matte-black`, `--ivory`, `--champagne`, `--champagne-deep`, `--shadow-leather`, `--brass`. Primary is champagne. Brass is reserved for hardware-feeling accents (vent surrounds, gauge bezels, the occasional decorative rule) — never as a button face.
|
|
22
|
+
|
|
23
|
+
## Typography
|
|
24
|
+
- **Display:** Cormorant Garamond (Bentley / Rolls-Royce model-plate serif feel). h1–h4. Tracking `-0.012em` — Garalde display wants near-zero, just shy of it.
|
|
25
|
+
- **Body:** Inter (Aston Martin clean sans). Body base **16px** with **line-height 1.6** — showroom-comfortable, never marketing-dense.
|
|
26
|
+
- **Mono:** JetBrains Mono. Price-from, 0-60, top speed, range, build code. Always `font-variant-numeric: tabular-nums`.
|
|
27
|
+
|
|
28
|
+
H1 uses `clamp(3rem, 8vw, 6.5rem)` — the model-name-as-title scale. Font features: `"liga"`, `"dlig"`, `"tnum"`, `"ss01"`.
|
|
29
|
+
|
|
30
|
+
## Spacing
|
|
31
|
+
- **Container:** `max-w-7xl px-6 lg:px-12` — full-bleed product cinematography demands the width.
|
|
32
|
+
- **Section padding tiers:**
|
|
33
|
+
- Hero: `pt-28 pb-20 lg:pt-40 lg:pb-28`
|
|
34
|
+
- Default: `py-20 lg:py-32`
|
|
35
|
+
- Tight: `py-12 lg:py-20`
|
|
36
|
+
- **Allowed scale values:** 4 8 12 16 20 24 32 40 48 64 80 96 128 160. No arbitrary spacing. Density tier is **low** — showroom breathing.
|
|
37
|
+
|
|
38
|
+
## Color
|
|
39
|
+
No hex anywhere. All color via tokens. Opacity via `/N` modifier. The palette is intentionally tiny: matte black, ivory, champagne, brass, shadow-leather. If a designer needs a new color, the answer is almost always a wider use of champagne, not a new one. **Never a saturated brand-color button** — champagne is the action color across the whole product.
|
|
40
|
+
|
|
41
|
+
## Radius
|
|
42
|
+
`--radius: 0.25rem`. Tight chamfer only — engineered, not pillow. Pills are disallowed (`pillsAllowed: false`) — they read app/marketplace, not bespoke showroom.
|
|
43
|
+
|
|
44
|
+
## Shadows
|
|
45
|
+
**Glow.** Two utilities:
|
|
46
|
+
- `.glow-champagne` — soft champagne halo on the single hero CTA / configurator preview, never on more than one element per page.
|
|
47
|
+
- `.hairline-bottom` — `inset 0 -1px 0 hsl(var(--border))`, the divider rule between sections.
|
|
48
|
+
|
|
49
|
+
No colored drop shadows beyond champagne. No multi-color glows.
|
|
50
|
+
|
|
51
|
+
## Motion
|
|
52
|
+
Three keyframes:
|
|
53
|
+
- `ken-burns` — 32000ms infinite scale + translate on hero product stills, the slow product-film camera push.
|
|
54
|
+
- `rise-in` — 1100ms opacity + 28px translate, the standard entrance. Slow on purpose: showroom reveal cadence.
|
|
55
|
+
- `sheen` — 2800ms infinite linear-gradient sweep on champagne text/borders. Bentley winged-B engraving light sweep.
|
|
56
|
+
|
|
57
|
+
Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` honored in every utility. **No marquee. No UI bounce. No parallax. The page settles; the car performs.**
|
|
58
|
+
|
|
59
|
+
## Component patterns
|
|
60
|
+
- **Buttons:** Text-link in champagne with underline-on-hover for the body of the page. Single hero CTA is solid champagne-on-matte-black, sharp 0.25rem corners. Secondary is hairline-outlined ghost in ivory. **No pills. No saturated fills.**
|
|
61
|
+
- **Cards:** Sharp 0.25rem corners, hairline border on matte card surface. Lead with full-width product cinematography (16:9 or 21:9). Model name in Cormorant display, spec line in mono.
|
|
62
|
+
- **Inputs:** Border-bottom only on matte canvas. Label above in mono-uppercase, tracking `0.18em`. Focus shifts border to champagne.
|
|
63
|
+
- **CTA links:** Text-link with sheen-on-hover for body CTAs. Solid champagne rectangle for the single hero action (Configure / Request Test Drive).
|
|
64
|
+
|
|
65
|
+
## Recommended rich media
|
|
66
|
+
Photography is the entire site. The hero is **studio-lit product cinematography** — Aston Martin's brand-film aesthetic, not a dealer-lot phone photo. The car sits in a black-on-black studio, single key light raking across a body panel, no reflection of the photographer, no asphalt under the wheels. Twilight exteriors with the car parked under architectural canopies are the canonical secondary frame. **No people in the frame unless it's a driver-in-profile silhouette shot.**
|
|
67
|
+
|
|
68
|
+
**AI tool recommendations:** **Midjourney v6+** with prompts like *"automotive product photography, studio-lit, black backdrop, single key light raking across panel, Aston Martin brand film aesthetic, medium format, 85mm, no people"*. Avoid Midjourney's default "luxury car" prompt — it produces glossy CGI render. Explicitly prompt for studio lighting and brand-film authorship.
|
|
69
|
+
|
|
70
|
+
**Aspect ratios:** 21:9 cinematic for the hero; 16:9 for model cards; 3:2 for inline detail shots. **Never 1:1** — that reads marketplace listing.
|
|
71
|
+
|
|
72
|
+
**Video:** A single autoplay-muted hero reel of slow camera dolly around the car is the canonical hero treatment. 18–24 second loop, no music. ≤6 MB per loop, H.265 or AV1.
|
|
73
|
+
|
|
74
|
+
**Avoid:** dealer-lot photography, generic stock car images, color-changing gradients in champagne (the accent must be quiet), glossy CGI renders, lens flare, racing-stripe decoration, any UI animation that competes with the product reel.
|
|
75
|
+
|
|
76
|
+
## Component families
|
|
77
|
+
None at install time. First likely families: model-card, configurator-frame, dealer-locator-strip, spec-table.
|
|
78
|
+
|
|
79
|
+
## Details
|
|
80
|
+
- **Selection:** `hsl(var(--brand-champagne) / 0.28)` background, foreground text.
|
|
81
|
+
- **Focus ring:** `1px solid hsl(var(--ring))` — thin champagne, quiet, never a 2px blue web-app ring.
|
|
82
|
+
- **Scrollbar:** thin.
|
|
83
|
+
|
|
84
|
+
## Exceptions
|
|
85
|
+
None yet.
|
|
86
|
+
|
|
87
|
+
## Revisions
|
|
88
|
+
- Initial direction, generated at install time.
|