@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,175 @@
|
|
|
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 automotiveLuxury = {
|
|
6
|
+
name: "automotive-luxury",
|
|
7
|
+
ethos:
|
|
8
|
+
"Bentley matte-black configurator · Rolls-Royce monogram restraint · Aston Martin product cinematography · Bugatti hyper-luxury minimalism · Maybach champagne mark",
|
|
9
|
+
references: [
|
|
10
|
+
{ brand: "Bentley", trait: "matte black canvas, full-bleed configurator stills, single champagne accent" },
|
|
11
|
+
{ brand: "Rolls-Royce", trait: "monogram restraint, spirit-of-ecstasy negative space" },
|
|
12
|
+
{ brand: "Aston Martin", trait: "cinematic product photography, James Bond reveal cadence" },
|
|
13
|
+
{ brand: "Bugatti", trait: "hyper-luxury minimalism, the page IS the car" },
|
|
14
|
+
{ brand: "Maybach", trait: "champagne-gold mark, two-tone deep colorways" },
|
|
15
|
+
],
|
|
16
|
+
feel:
|
|
17
|
+
"Matte near-black canvas carrying full-bleed bespoke product cinematography. " +
|
|
18
|
+
"A single champagne/gold accent does the entire interaction job — no secondary brand color competes. " +
|
|
19
|
+
"Type is a restrained high-contrast serif for model names, with a quiet condensed sans for specs. " +
|
|
20
|
+
"The page is a private showroom, not a marketplace.",
|
|
21
|
+
|
|
22
|
+
fonts: {
|
|
23
|
+
display: {
|
|
24
|
+
family: "Cormorant Garamond",
|
|
25
|
+
fallback: ["EB Garamond", "Didot", "Bodoni 72", "Georgia", "serif"],
|
|
26
|
+
from: "Bentley / Rolls-Royce model-plate serif — high-contrast Garalde with a stamped-nameplate feel",
|
|
27
|
+
googleFont: "Cormorant+Garamond",
|
|
28
|
+
weights: [400, 500, 600, 700],
|
|
29
|
+
},
|
|
30
|
+
body: {
|
|
31
|
+
family: "Inter",
|
|
32
|
+
fallback: ["Helvetica Neue", "system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
33
|
+
from: "Aston Martin clean sans — neutral body that lets the serif and product still lead",
|
|
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 price-from, 0-60, top speed — instrument-cluster heritage",
|
|
41
|
+
googleFont: "JetBrains+Mono",
|
|
42
|
+
weights: [400, 500],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
typography: {
|
|
47
|
+
headingTracking: "-0.012em", // Cormorant wants near-zero — nameplate feel, just shy of zero
|
|
48
|
+
bodyTracking: "0.01em",
|
|
49
|
+
fontFeatureSettings: '"liga", "dlig", "tnum", "ss01"',
|
|
50
|
+
h1ScaleClamp: "clamp(3rem, 8vw, 6.5rem)", // model-name-as-title scale — the headline IS the car
|
|
51
|
+
bodyBaseSize: "1rem",
|
|
52
|
+
bodyLineHeight: "1.6",
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
colors: {
|
|
56
|
+
background: { hsl: "30 6% 6%", from: "Bentley matte black — warm-tinted near-black, never pure" },
|
|
57
|
+
foreground: { hsl: "38 30% 94%", from: "warm parchment — Rolls-Royce monogram ivory, never pure white" },
|
|
58
|
+
card: { hsl: "30 5% 9%", from: "elevated matte surface — one stop above canvas" },
|
|
59
|
+
popover: { hsl: "30 5% 11%", from: "popover surface — two stops up, still matte" },
|
|
60
|
+
primary: { hsl: "41 52% 58%", from: "Bentley champagne — the single luxury accent that does all the work" },
|
|
61
|
+
primaryForeground: { hsl: "30 6% 6%", from: "matte black on champagne" },
|
|
62
|
+
secondary: { hsl: "30 4% 14%", from: "leather-shadowed deeper tier — bespoke interior trim" },
|
|
63
|
+
secondaryForeground: { hsl: "38 30% 94%", from: "parchment on shadow leather" },
|
|
64
|
+
muted: { hsl: "30 4% 16%", from: "muted matte — quiet panel surface" },
|
|
65
|
+
mutedForeground: { hsl: "38 14% 64%", from: "warm secondary text — showroom signage" },
|
|
66
|
+
accent: { hsl: "30 4% 18%", from: "hover surface — brushed-aluminum highlight" },
|
|
67
|
+
accentForeground: { hsl: "38 30% 94%", from: "parchment on accent" },
|
|
68
|
+
border: { hsl: "30 4% 20%", from: "panel-gap hairline — Bentley body-line tolerance, visible only on inspection" },
|
|
69
|
+
input: { hsl: "30 4% 20%", from: "same as border — single hairline language" },
|
|
70
|
+
ring: { hsl: "41 52% 58%", from: "champagne — focus ring is the canonical luxury accent" },
|
|
71
|
+
destructive: { hsl: "8 62% 50%", from: "brake-light red — warning lamp, never decoration" },
|
|
72
|
+
destructiveForeground: { hsl: "38 30% 94%", from: "parchment on brake red" },
|
|
73
|
+
brand: {
|
|
74
|
+
champagne: { hsl: "41 52% 58%", from: "= primary; Bentley champagne, the canonical luxury accent" },
|
|
75
|
+
"champagne-deep": { hsl: "38 48% 44%", from: "Maybach deeper champagne — gradient anchor for sheen utility" },
|
|
76
|
+
ivory: { hsl: "38 30% 94%", from: "= foreground; Rolls-Royce monogram ivory" },
|
|
77
|
+
"matte-black": { hsl: "30 6% 6%", from: "= background; Bentley matte canvas" },
|
|
78
|
+
"shadow-leather": { hsl: "30 4% 14%", from: "= secondary; bespoke interior trim shadow" },
|
|
79
|
+
brass: { hsl: "38 42% 48%", from: "Aston Martin brass-trim accent — vent surrounds, gauge bezels" },
|
|
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-28 pb-20 lg:pt-40 lg:pb-28",
|
|
90
|
+
default: "py-20 lg:py-32",
|
|
91
|
+
tight: "py-12 lg:py-20",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
radius: {
|
|
96
|
+
base: "0.25rem", // tight chamfer — engineered, not pillow
|
|
97
|
+
pillsAllowed: false, // pills read app/marketplace; bespoke showroom uses rectangles
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
shadows: {
|
|
101
|
+
style: "glow",
|
|
102
|
+
utilities: {
|
|
103
|
+
"glow-champagne":
|
|
104
|
+
"0 0 0 1px hsl(var(--brand-champagne) / 0.35), " +
|
|
105
|
+
"0 8px 24px hsl(var(--brand-champagne) / 0.16), " +
|
|
106
|
+
"0 40px 120px hsl(var(--brand-champagne) / 0.18)",
|
|
107
|
+
"hairline-bottom":
|
|
108
|
+
"inset 0 -1px 0 hsl(var(--border))",
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
motion: {
|
|
113
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
114
|
+
durations: {
|
|
115
|
+
reveal: 1100, // slow on purpose — showroom reveal cadence
|
|
116
|
+
loop: 2400,
|
|
117
|
+
ambient: 32000, // ken-burns on hero stills
|
|
118
|
+
},
|
|
119
|
+
keyframes: {
|
|
120
|
+
"ken-burns": {
|
|
121
|
+
css:
|
|
122
|
+
"0% { transform: scale(1.05) translate(0, 0); }\n" +
|
|
123
|
+
"100% { transform: scale(1.14) translate(-1.5%, -0.8%); }",
|
|
124
|
+
defaultDuration: 32000,
|
|
125
|
+
iteration: "infinite",
|
|
126
|
+
purpose: "hero product still drift — Aston Martin slow product-film camera push",
|
|
127
|
+
},
|
|
128
|
+
"rise-in": {
|
|
129
|
+
css:
|
|
130
|
+
"from { opacity: 0; transform: translateY(28px); }\n" +
|
|
131
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
132
|
+
defaultDuration: 1100,
|
|
133
|
+
iteration: "once",
|
|
134
|
+
purpose: "section reveal — model card and bespoke configurator entrance",
|
|
135
|
+
},
|
|
136
|
+
"sheen": {
|
|
137
|
+
css:
|
|
138
|
+
"0% { background-position: -200% 0; }\n" +
|
|
139
|
+
"100% { background-position: 200% 0; }",
|
|
140
|
+
defaultDuration: 2800,
|
|
141
|
+
iteration: "infinite",
|
|
142
|
+
purpose: "champagne text/border sheen — Bentley winged-B engraving light sweep",
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
respectsReducedMotion: true,
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
density: "low", // showroom breathing; never marketplace density
|
|
149
|
+
|
|
150
|
+
patterns: {
|
|
151
|
+
button:
|
|
152
|
+
"Text-link CTAs by default — champagne color, hairline underline-on-hover. " +
|
|
153
|
+
"The SINGLE hero action per page is allowed solid champagne-on-black, sharp 0.25rem corners. " +
|
|
154
|
+
"Secondary actions are hairline-outlined ghost buttons in ivory. " +
|
|
155
|
+
"Never a pill, never a colored fill that competes with champagne.",
|
|
156
|
+
card:
|
|
157
|
+
"Sharp 0.25rem corners. Hairline border (--border) on a matte card surface. " +
|
|
158
|
+
"Internal padding p-8 lg:p-12. Model cards lead with full-width product cinematography (16:9 or 21:9), " +
|
|
159
|
+
"model name in Cormorant display, spec line in mono.",
|
|
160
|
+
input:
|
|
161
|
+
"Border-bottom only (1px --border) on matte canvas. No full box. " +
|
|
162
|
+
"Label sits above in mono-uppercase, tracking 0.18em. Focus shifts border to champagne.",
|
|
163
|
+
cta:
|
|
164
|
+
"Text-link with champagne color and a sheen-on-hover treatment for the body of the page. " +
|
|
165
|
+
"Solid champagne rectangle for the single hero CTA (Configure / Request Test Drive). " +
|
|
166
|
+
"Never a pill, never a gradient that isn't champagne→champagne-deep.",
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
details: {
|
|
170
|
+
selectionBg: "hsl(var(--brand-champagne) / 0.28)",
|
|
171
|
+
selectionFg: "hsl(var(--foreground))",
|
|
172
|
+
focusRing: "1px solid hsl(var(--ring))",
|
|
173
|
+
scrollbarStyle: "thin",
|
|
174
|
+
},
|
|
175
|
+
} satisfies Partial<Direction> & { name: string };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Design Direction — Baby-Modern
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Frida Baby playful clinical · Lalo soft pastel · Babyletto modern nursery · Newton Baby breathable-mattress whitespace · 4moms tech-meets-rocker
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Soft pastel modern. Cream paper with blush-pink and sky-blue accents, friendly humanist sans for chrome, rounded silhouettes everywhere. Reads new-parent-friendly: large targets, generous whitespace, candid "parent-tested" tone instead of scary medical language. The page feels like the nursery itself — calm, warm, considered — not a baby-store fluorescent aisle.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Frida Baby** → playful clinical pink + "parent-tested" candor. The principal reference for tone and the blush primary.
|
|
11
|
+
- **Lalo** → soft pastel, modular-furniture warmth, cream-on-cream stacking.
|
|
12
|
+
- **Babyletto** → modern nursery: rounded silhouettes, cream surfaces, gender-neutral palette.
|
|
13
|
+
- **Newton Baby** → breathable-mattress whitespace, calm pacing.
|
|
14
|
+
- **4moms** → tech-meets-rocker engineering candor — the brand earns trust by being honest about how the thing works.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
Surface stack is **cream paper** (background) → **white** (card) → **deeper cream / sky tint** (secondary / muted / accent). Brand tokens: `--blush`, `--sky`, `--cream`, `--sun`, `--mint`, `--ink`. Primary is `--blush` — playful pink, the principal action. `--sky` is the calm/info accent. `--sun` and `--mint` are decorative chips — never button faces. `--ink` is deep navy-slate, never black (gentle on tired eyes is non-negotiable).
|
|
18
|
+
|
|
19
|
+
## Typography
|
|
20
|
+
- **Display:** Quicksand. Soft humanist sans with rounded terminals — reads gentle without infantilizing. Weights 500–700.
|
|
21
|
+
- **Body:** Nunito. Round humanist body, friendly at every size. 16px base, line-height 1.65 (looser than soft-modern; tired-parent comfort).
|
|
22
|
+
- **Mono:** DM Mono. Reserved for age-band labels ("0–6 mo"), sizing charts, registry item-codes — kept warm, never sterile.
|
|
23
|
+
|
|
24
|
+
H1 uses `clamp(2rem, 5vw, 3.5rem)` — restrained, never jumbotron. Tracking `-0.01em` on display, `0.005em` on body (a hair of air).
|
|
25
|
+
|
|
26
|
+
## Spacing
|
|
27
|
+
- **Container:** `max-w-6xl px-4 lg:px-8` — nursery-shelf width.
|
|
28
|
+
- **Section padding tiers:**
|
|
29
|
+
- Hero: `pt-20 pb-14 lg:pt-28 lg:pb-20`
|
|
30
|
+
- Default: `py-14 lg:py-22`
|
|
31
|
+
- Tight: `py-10 lg:py-14`
|
|
32
|
+
- **Allowed scale values:** 4 6 8 10 12 16 20 24 32 40 48 64 80.
|
|
33
|
+
|
|
34
|
+
## Color
|
|
35
|
+
No hex in components — tokens only. Pure white is permitted only for card surfaces (nursery-clean tile). Pure black is forbidden — use `--ink`. Saturated reds are reserved for `--destructive` (recall-notice, allergy alert) — never confuse blush-pink with alert-red. No "trust blue" — the brand earns trust through parent-tested candor.
|
|
36
|
+
|
|
37
|
+
## Radius
|
|
38
|
+
`--radius: 1.25rem` (20px). The softest of the DTC set; nursery-rounded. Pills (rounded-full) are the *default* for buttons — sharp-corner rectangles read clinical here. Square corners forbidden on interactive surfaces.
|
|
39
|
+
|
|
40
|
+
## Shadows
|
|
41
|
+
**Soft.** `.shadow-nursery` for standard cards, `.shadow-nursery-lg` for hover lift, `.shadow-pillow` for the cushioned hero/registry surfaces (combines blur + subtle inset-highlight). No glows.
|
|
42
|
+
|
|
43
|
+
## Motion
|
|
44
|
+
Three keyframes: `fade-rise` (500ms entrance), `soft-bounce` (320ms gentle pop for stage-tab selection / registry add-confirm), `soft-pulse` (2400ms loop for sleep-mode and feeding-reminder indicators). `prefers-reduced-motion` honored.
|
|
45
|
+
|
|
46
|
+
Easing `cubic-bezier(0.22, 1, 0.36, 1)`.
|
|
47
|
+
|
|
48
|
+
## Component patterns
|
|
49
|
+
- **Buttons:** primary = blush solid + white text, **rounded-full pill default**, h-12 minimum (tired-parent tap targets). Secondary = white + warm border + navy text. Tertiary = blush text-link.
|
|
50
|
+
- **Cards:** rounded-2xl/3xl, white on cream, 1px warm border, shadow-nursery. Stage-tab cards get a 3px blush bottom-border when selected.
|
|
51
|
+
- **Inputs:** rounded-2xl, 1px warm border, white fill, h-12 minimum. Focus = 3px blush ring at 30% opacity (soft, not laser).
|
|
52
|
+
- **Stage tabs:** segmented pill control with 4 age bands (Newborn / 0–6 mo / 6–12 mo / 1 yr+). Active tab = blush fill + white text + soft-bounce on click. Inactive = white + navy ink.
|
|
53
|
+
- **Parent-tested badges:** small pill chips with a tiny family-emoji glyph, blush-soft background, blush text. Used to flag "9 of 10 parents recommend" or "tested by 240 NICU nurses".
|
|
54
|
+
- **Registry card:** white tile, rounded-3xl, product image at top, name + age-band chip + price below, large "Add to registry" pill spanning the bottom.
|
|
55
|
+
|
|
56
|
+
## Recommended rich media
|
|
57
|
+
Photography is the lead medium: babies in natural window light, parents mid-action (no posed family-portrait stock), nursery interiors with soft daylight, product close-ups on cream linen. Color graded to warm-cream highlight, sky-blue shadow. Aspect ratios 4:5 portrait for babies, 1:1 square for product (registry-friendly). Never 16:9 cinematic. No illustrated baby-icon decoration. No 3D renders of cribs.
|
|
58
|
+
|
|
59
|
+
**AI tool recommendations:** Midjourney with *"natural window light, baby sleeping in modern nursery, Kodak Portra 400, cream linen, soft pastels, slight grain, shallow depth of field"*. Product: *"baby thermometer on cream linen, overhead, soft natural light, no props"*. Avoid bright commercial baby-product stock and "happy multicultural family" stock.
|
|
60
|
+
|
|
61
|
+
**Performance:** hero ≤140 KB AVIF at 1600w; product inline ≤80 KB. LCP ≤2s.
|
|
62
|
+
|
|
63
|
+
**Avoid:** stork imagery, pacifier-icon decoration, lullaby-cursive script type, "world's #1 mom" giftwrap copy, dark-mode toggle (tired-parent dark-mode is system-level), glassmorphic anything, fluorescent baby-blue or hot-pink, lab-coat product hero shots, "scientifically proven" certificate badges — that is competitor territory, not ours.
|
|
64
|
+
|
|
65
|
+
**Accessibility:** alt-text describes the baby's age and posture, not the product. *"A six-month-old yawns mid-stretch in a cream-linen swaddle"* — not *"Baby on bed."* Tap targets ≥44×44 px (we default to ≥48 for sleep-deprived accuracy).
|
|
66
|
+
|
|
67
|
+
## Component families
|
|
68
|
+
None at install time. Stage-tabs, parent-tested-badge, and registry-card are the three canonical bespoke families.
|
|
69
|
+
|
|
70
|
+
## Details
|
|
71
|
+
- **Selection:** `hsl(var(--blush) / 0.22)` background, ink foreground.
|
|
72
|
+
- **Focus ring:** `3px solid hsl(var(--ring) / 0.35)` — soft, not laser.
|
|
73
|
+
- **Scrollbar:** thin.
|
|
74
|
+
|
|
75
|
+
## Exceptions
|
|
76
|
+
None yet.
|
|
77
|
+
|
|
78
|
+
## Revisions
|
|
79
|
+
- Initial direction, generated at install time.
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
// baby-modern — Frida Baby / Lalo / Babyletto soft modern DTC for new parents.
|
|
4
|
+
// Pastel pink + sky-blue + cream, soft humanist sans, rounded everything,
|
|
5
|
+
// parent-tested badges. The chrome reads sleep-deprived-friendly: large
|
|
6
|
+
// targets, generous whitespace, no scary clinical language.
|
|
7
|
+
export const babyModern: Direction = {
|
|
8
|
+
name: "baby-modern" as Direction["name"],
|
|
9
|
+
ethos:
|
|
10
|
+
"Frida Baby playful clinical · Lalo soft pastel · Babyletto modern nursery · " +
|
|
11
|
+
"Newton Baby breathable-mattress whitespace · 4moms tech-meets-rocker",
|
|
12
|
+
references: [
|
|
13
|
+
{ brand: "Frida Baby", trait: "playful clinical pink + 'parent-tested' candor" },
|
|
14
|
+
{ brand: "Lalo", trait: "soft pastel + modular-furniture warmth" },
|
|
15
|
+
{ brand: "Babyletto", trait: "modern nursery, rounded silhouettes, cream surfaces" },
|
|
16
|
+
{ brand: "Newton Baby", trait: "breathable-mattress whitespace, calm pacing" },
|
|
17
|
+
{ brand: "4moms", trait: "tech-meets-rocker engineering candor" },
|
|
18
|
+
],
|
|
19
|
+
feel:
|
|
20
|
+
"Soft pastel modern. Cream paper with blush-pink and sky-blue accents, friendly " +
|
|
21
|
+
"humanist sans for chrome, rounded silhouettes everywhere. Reads new-parent-friendly: " +
|
|
22
|
+
"large targets, generous whitespace, candid 'parent-tested' tone instead of scary " +
|
|
23
|
+
"medical language. The page feels like the nursery itself — calm, warm, considered, " +
|
|
24
|
+
"not a baby-store fluorescent aisle.",
|
|
25
|
+
|
|
26
|
+
fonts: {
|
|
27
|
+
display: {
|
|
28
|
+
family: "Quicksand",
|
|
29
|
+
fallback: ["Nunito", "Plus Jakarta Sans", "system-ui", "sans-serif"],
|
|
30
|
+
from: "Frida Baby / Lalo — soft humanist sans with rounded terminals, reads gentle without infantilizing",
|
|
31
|
+
googleFont: "Quicksand",
|
|
32
|
+
weights: [500, 600, 700],
|
|
33
|
+
},
|
|
34
|
+
body: {
|
|
35
|
+
family: "Nunito",
|
|
36
|
+
fallback: ["Plus Jakarta Sans", "Inter", "system-ui", "sans-serif"],
|
|
37
|
+
from: "Babyletto / Newton — round humanist body, friendly at every size, low x-height stress",
|
|
38
|
+
googleFont: "Nunito",
|
|
39
|
+
weights: [400, 500, 600],
|
|
40
|
+
},
|
|
41
|
+
mono: {
|
|
42
|
+
family: "DM Mono",
|
|
43
|
+
fallback: ["IBM Plex Mono", "ui-monospace", "monospace"],
|
|
44
|
+
from: "age-band labels, sizing charts, registry item-codes — kept warm, never sterile",
|
|
45
|
+
googleFont: "DM+Mono",
|
|
46
|
+
weights: [400, 500],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
typography: {
|
|
51
|
+
headingTracking: "-0.01em",
|
|
52
|
+
bodyTracking: "0.005em",
|
|
53
|
+
fontFeatureSettings: '"ss01", "calt"',
|
|
54
|
+
h1ScaleClamp: "clamp(2rem, 5vw, 3.5rem)",
|
|
55
|
+
bodyBaseSize: "1rem",
|
|
56
|
+
bodyLineHeight: "1.65",
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
colors: {
|
|
60
|
+
background: { hsl: "32 40% 97%", from: "Lalo cream — warm paper, softer than spa-white" },
|
|
61
|
+
foreground: { hsl: "232 24% 22%", from: "deep navy-slate — never black; gentle on tired eyes" },
|
|
62
|
+
card: { hsl: "0 0% 100%", from: "true white card — lifts off the cream for nursery-clean tiles" },
|
|
63
|
+
popover: { hsl: "0 0% 100%", from: "same as card" },
|
|
64
|
+
primary: { hsl: "342 68% 68%", from: "Frida Baby blush — playful pink, principal action" },
|
|
65
|
+
primaryForeground: { hsl: "0 0% 100%", from: "white on blush" },
|
|
66
|
+
secondary: { hsl: "32 30% 93%", from: "deeper cream — secondary panel, brown-paper-bag warmth" },
|
|
67
|
+
secondaryForeground: { hsl: "232 24% 26%", from: "navy ink on cream panel" },
|
|
68
|
+
muted: { hsl: "32 26% 95%", from: "quiet cream — table row, helper bg" },
|
|
69
|
+
mutedForeground: { hsl: "232 12% 48%", from: "soft slate — captions, meta, age helper text" },
|
|
70
|
+
accent: { hsl: "204 70% 92%", from: "sky-blue tint — hover and stage-tab surface" },
|
|
71
|
+
accentForeground: { hsl: "204 60% 30%", from: "deep sky on tint" },
|
|
72
|
+
border: { hsl: "32 22% 88%", from: "warm hairline — never cool gray, never harsh" },
|
|
73
|
+
input: { hsl: "32 22% 88%", from: "same as border" },
|
|
74
|
+
ring: { hsl: "342 68% 68%", from: "primary blush, focus only" },
|
|
75
|
+
destructive: { hsl: "0 70% 56%", from: "safe alert red — recall-notice clarity, not blush-pink confusion" },
|
|
76
|
+
destructiveForeground: { hsl: "0 0% 100%", from: "white on alert" },
|
|
77
|
+
brand: {
|
|
78
|
+
blush: { hsl: "342 68% 68%", from: "= primary; Frida Baby playful pink, principal brand" },
|
|
79
|
+
"blush-soft": { hsl: "342 70% 94%", from: "blush tint — stage-active chip, parent-tested-badge bg" },
|
|
80
|
+
sky: { hsl: "204 70% 62%", from: "Babyletto / Lalo sky-blue — secondary friendly accent" },
|
|
81
|
+
"sky-soft": { hsl: "204 70% 92%", from: "alias for accent — info banner, calm-mode pill" },
|
|
82
|
+
cream: { hsl: "32 40% 97%", from: "alias for background — Lalo nursery paper" },
|
|
83
|
+
sun: { hsl: "44 92% 72%", from: "Newton soft sunshine — daytime/feeding chip, never primary" },
|
|
84
|
+
mint: { hsl: "160 40% 78%", from: "soft mint — gender-neutral wellness mark, sleep-mode chip" },
|
|
85
|
+
ink: { hsl: "232 24% 22%", from: "alias for foreground — deep navy-slate, gentle on tired eyes" },
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
spacing: {
|
|
90
|
+
base: 4,
|
|
91
|
+
scale: [4, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 64, 80],
|
|
92
|
+
containerMax: "max-w-6xl",
|
|
93
|
+
containerPadding: "px-4 lg:px-8",
|
|
94
|
+
sectionPadding: {
|
|
95
|
+
hero: "pt-20 pb-14 lg:pt-28 lg:pb-20",
|
|
96
|
+
default: "py-14 lg:py-22",
|
|
97
|
+
tight: "py-10 lg:py-14",
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
radius: {
|
|
102
|
+
base: "1.25rem", // 20px — softest of the DTC set; nursery-rounded
|
|
103
|
+
pillsAllowed: true, // pills are core — age-stage tabs, parent-tested badges, registry chips
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
shadows: {
|
|
107
|
+
style: "soft",
|
|
108
|
+
utilities: {
|
|
109
|
+
"shadow-nursery":
|
|
110
|
+
"0 1px 2px hsl(342 30% 50% / 0.04), 0 6px 16px hsl(342 30% 50% / 0.06)",
|
|
111
|
+
"shadow-nursery-lg":
|
|
112
|
+
"0 2px 6px hsl(342 30% 50% / 0.05), 0 18px 40px hsl(342 30% 50% / 0.10)",
|
|
113
|
+
"shadow-pillow":
|
|
114
|
+
"0 8px 24px hsl(32 40% 60% / 0.10), inset 0 1px 0 hsl(0 0% 100% / 0.6)",
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
motion: {
|
|
119
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
120
|
+
durations: {
|
|
121
|
+
reveal: 500,
|
|
122
|
+
loop: 2400,
|
|
123
|
+
ambient: 24000,
|
|
124
|
+
},
|
|
125
|
+
keyframes: {
|
|
126
|
+
"fade-rise": {
|
|
127
|
+
css:
|
|
128
|
+
"from { opacity: 0; transform: translateY(8px); }\n" +
|
|
129
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
130
|
+
defaultDuration: 500,
|
|
131
|
+
iteration: "once",
|
|
132
|
+
purpose: "entrance for stage tabs, registry cards, parent-tested badges",
|
|
133
|
+
},
|
|
134
|
+
"soft-bounce": {
|
|
135
|
+
css:
|
|
136
|
+
"0% { transform: scale(0.95); }\n" +
|
|
137
|
+
"60% { transform: scale(1.04); }\n" +
|
|
138
|
+
"100% { transform: scale(1); }",
|
|
139
|
+
defaultDuration: 320,
|
|
140
|
+
iteration: "once",
|
|
141
|
+
purpose: "stage-tab selection and add-to-registry confirmation — gentle pop, not jumpy",
|
|
142
|
+
},
|
|
143
|
+
"soft-pulse": {
|
|
144
|
+
css:
|
|
145
|
+
"0%, 100% { opacity: 1; transform: scale(1); }\n" +
|
|
146
|
+
"50% { opacity: 0.85; transform: scale(1.02); }",
|
|
147
|
+
defaultDuration: 2400,
|
|
148
|
+
iteration: "infinite",
|
|
149
|
+
purpose: "sleep-mode indicator and feeding-reminder dot — slow nursery breathing",
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
respectsReducedMotion: true,
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
density: "medium",
|
|
156
|
+
|
|
157
|
+
patterns: {
|
|
158
|
+
button:
|
|
159
|
+
"Primary = solid blush fill, white text, rounded-full (pill default — nursery softness). " +
|
|
160
|
+
"Secondary = white fill with 1px warm border, navy-ink text. Tertiary = blush text-link. " +
|
|
161
|
+
"Hover: shadow-nursery-lg + soft-bounce. Buttons are large by default (h-12 minimum) — " +
|
|
162
|
+
"tired-parent-friendly tap targets. No sharp-corner rectangles — they read clinical here.",
|
|
163
|
+
card:
|
|
164
|
+
"Rounded-2xl/3xl, white on cream, 1px warm border, shadow-nursery. " +
|
|
165
|
+
"Internal padding p-6 lg:p-8. Title in Quicksand 600, body in Nunito. " +
|
|
166
|
+
"Stage-tab cards may use a 3px blush bottom-border when selected.",
|
|
167
|
+
input:
|
|
168
|
+
"Rounded-2xl, 1px warm border, white fill. Tall (h-12 minimum) for sleep-deprived tap accuracy. " +
|
|
169
|
+
"Label sits above in Nunito 500. Focus = 3px blush ring at 30% opacity (soft, not laser). " +
|
|
170
|
+
"Helper text below in muted-foreground, never below 13px.",
|
|
171
|
+
cta:
|
|
172
|
+
"Primary blush pill is the principal action. " +
|
|
173
|
+
"'Build my registry' and 'Shop by stage' lead the page — never side-by-side competing CTAs. " +
|
|
174
|
+
"Sky-blue ghost is reserved for calm/info context (sleep mode, parent guide). " +
|
|
175
|
+
"Sun (yellow) and mint accents are decorative chips only — never button faces.",
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
details: {
|
|
179
|
+
selectionBg: "hsl(var(--blush) / 0.22)",
|
|
180
|
+
selectionFg: "hsl(var(--foreground))",
|
|
181
|
+
focusRing: "3px solid hsl(var(--ring) / 0.35)",
|
|
182
|
+
scrollbarStyle: "thin",
|
|
183
|
+
},
|
|
184
|
+
};
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Design Direction — Banking-Gravity
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Goldman Sachs gravitas · JPMorgan heritage · BlackRock institutional weight · Morgan Stanley sobriety · capital-markets restraint
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Capital-markets institutional. Deep navy backgrounds, restrained brand-mark accent (heritage gold or a single corporate blue), serif touches for gravitas — the WSJ/FT convention of serif display + sans body. The page reads "we have been trustworthy for 150 years" — never trendy, never cheerful, always informed. Print-document formality at screen scale.
|
|
8
|
+
|
|
9
|
+
A banking-gravity surface that feels playful, soft, or marketing-loud is off-direction. The voice is fiduciary, restrained, informed.
|
|
10
|
+
|
|
11
|
+
## Reference brands
|
|
12
|
+
- **Goldman Sachs** (goldmansachs.com) → deep navy, serif headline touches, restrained corporate voice. The benchmark for "we manage capital, not vibes."
|
|
13
|
+
- **JPMorgan Chase** (jpmorgan.com) → heritage blue, 150-year institutional weight. The bank that has been a bank longer than most countries have had constitutions.
|
|
14
|
+
- **Morgan Stanley** (morganstanley.com) → slate + heritage serif mark, fiduciary sobriety.
|
|
15
|
+
- **BlackRock** (blackrock.com) → institutional gravity at asset-manager scale. The largest pool of capital on earth, and the design knows it.
|
|
16
|
+
- **Vanguard** (vanguard.com) → conservative blue, fiduciary-first tone. The light-mode reference for retail-banking variants.
|
|
17
|
+
- **Bloomberg Wealth** → the data-meets-gravitas hybrid. Where this direction tilts toward kinetic-data, Bloomberg Wealth is the bridge.
|
|
18
|
+
|
|
19
|
+
## Tokens
|
|
20
|
+
HSL triples in `src/index.css`. The deep navy background (`220 35% 12%`) is structural — pure black flattens the gravitas; warm-black skews marketing. Institutional navy is the trust signal.
|
|
21
|
+
|
|
22
|
+
Brand tokens, all semantic:
|
|
23
|
+
- `navy-deep` — alias of `--background`. Goldman/JPMorgan brand-mark navy.
|
|
24
|
+
- `navy-mid` — `--card` surface tier. Stacked panels.
|
|
25
|
+
- `cream-paper` — alias of `--foreground`. Warm cream off-white; **never pure white**. Heritage paper.
|
|
26
|
+
- `heritage-gold` — alias of `--primary`. Capital-markets accent; used sparingly for the single emphatic action.
|
|
27
|
+
- `accent-blue` — secondary corporate-blue accent (`213 60% 40%`). The JPMorgan heritage-blue tier for hyperlinks, info chrome, secondary chart series.
|
|
28
|
+
- `success-green` — restrained gain green (`140 45% 38%`). **Never bright.** Performance-positive only.
|
|
29
|
+
- `danger-deep` — alias of `--destructive`. Restrained alarm red; never the candy-red of consumer trading apps.
|
|
30
|
+
- `slate-rule` — alias of `--muted-foreground`. Dateline, rule-text, footnote color.
|
|
31
|
+
|
|
32
|
+
Color rules:
|
|
33
|
+
- **Pure white is forbidden.** `--foreground` is warm cream. Pure white reads tech-startup, not heritage bank.
|
|
34
|
+
- **Gold is the emphasis tone, not the volume tone.** A surface may have one gold element. Two is loud. Three is a marketing site.
|
|
35
|
+
- **Greens and reds are restrained.** Capital-markets performance numbers use `success-green` and `danger-deep`, not the candy-green/brake-red of kinetic-data. Same semantics, lower saturation — the page is reporting, not trading.
|
|
36
|
+
- **Accent-blue is for hyperlinks and secondary information.** Not for primary actions — that is gold's job.
|
|
37
|
+
|
|
38
|
+
## Brand-book customization
|
|
39
|
+
Heritage banks ship with specific brand colors that this generic direction abstracts. **Override before launch:**
|
|
40
|
+
|
|
41
|
+
- **Primary brand-mark color** — replace `--primary` and `--heritage-gold`. Examples: Goldman teal (`190 60% 35%`), JPMorgan heritage blue (`213 70% 30%`), Morgan Stanley red (`358 70% 45%`), BlackRock black-on-gold (`42 80% 50%`). The structural choices (deep navy bg, cream fg, hairline borders, 2px radius, serif display) carry the gravitas regardless of which brand-mark sits on top.
|
|
42
|
+
- **Secondary accent** — replace `--accent-blue`. The direction ships with corporate blue, but for institutions whose primary IS blue (JPMorgan, Vanguard), promote a slate gray or a deeper heritage red instead.
|
|
43
|
+
|
|
44
|
+
**Serif-heavy vs sans-heavy modes** — institutions split into two camps; pick one explicitly before authoring:
|
|
45
|
+
|
|
46
|
+
- **Serif-heavy** (Morgan Stanley, legacy private banks like Brown Brothers Harriman, Bessemer, Pictet) — EB Garamond extends into mid-level headings (h3, h4) and even pull-quotes. Body remains Inter. The serif voice is dominant; the surface reads like a private-bank annual report.
|
|
47
|
+
- **Sans-heavy** (post-2018 Goldman rebrand, BlackRock, modern JPMorgan corporate surfaces) — EB Garamond is reserved for h1 and the occasional editorial pull-quote only. Most headings are Inter 600. The serif is a single accent moment per page, not a recurring voice. This is the default for modern institutional surfaces.
|
|
48
|
+
|
|
49
|
+
Document the mode in the project knowledge so the Director enforces it consistently.
|
|
50
|
+
|
|
51
|
+
**Light mode for retail-banking variants** — the direction ships dark canonical (corporate/wealth-management feel). For retail-banking surfaces (Chase retail vs JPMorgan corporate, Wells Fargo retail vs Wells corporate institutional), invert to a light variant:
|
|
52
|
+
|
|
53
|
+
- `--background`: `38 25% 96%` (cream-paper, very slightly warmer than fg-cream)
|
|
54
|
+
- `--foreground`: `220 35% 12%` (navy-deep becomes the text color)
|
|
55
|
+
- `--card`: `0 0% 100%` (pure white surface tier — the one place pure white is permitted, as a card lift on cream)
|
|
56
|
+
- `--border`: `220 14% 86%` (hairline navy at 86% lightness)
|
|
57
|
+
- `--primary`, `--accent-blue`, `--success-green`, `--danger-deep`: unchanged — the brand-mark family carries from dark to light.
|
|
58
|
+
- `--muted-foreground`: `215 20% 38%` (deeper slate for sufficient contrast on cream).
|
|
59
|
+
|
|
60
|
+
Retail variants keep the gravitas of the typographic and structural language but read welcoming rather than fortress-like. Use the light variant when the audience is mass-market retail; use the dark canonical for institutional, wealth-management, and capital-markets surfaces.
|
|
61
|
+
|
|
62
|
+
## Typography
|
|
63
|
+
- **Display:** EB Garamond (Tiempos/Caslon stand-in). Weights 400/500/600/**700**. Used for h1 always; h2-h4 depend on serif-heavy vs sans-heavy mode. Tracking `-0.01em` — serifs set tight, not crunched.
|
|
64
|
+
- **Body:** Inter, **15px**, line-height 1.55. Weights 400/500/600. The heritage-but-modern sans that JPMorgan, Goldman, and BlackRock have all settled on post-2015.
|
|
65
|
+
- **Mono:** JetBrains Mono (Berkeley Mono preferred when locally available). Every basis-point figure, every AUM number, every return percentage, every CUSIP, every timestamp. Weights 400/500/**700**.
|
|
66
|
+
|
|
67
|
+
Font features: `"tnum", "zero", "lnum", "ss01"` — tabular lining figures and slashed zero are non-negotiable. Returns must align on the decimal across a holdings table; `0` must never be confused with `O` on a security identifier.
|
|
68
|
+
|
|
69
|
+
H1 uses `clamp(2.25rem, 4.5vw, 3.75rem)` — restrained. Institutional banks do not shout. The headline labels the surface; the data and the prose do the work.
|
|
70
|
+
|
|
71
|
+
## Spacing
|
|
72
|
+
- **Container:** `max-w-6xl px-4 lg:px-8` — wide enough for tables and three-column reports, narrow enough that long-form prose still has a reading rhythm.
|
|
73
|
+
- **Section padding tiers:**
|
|
74
|
+
- Hero: `pt-20 pb-12 lg:pt-28 lg:pb-16` — formal but not oversized.
|
|
75
|
+
- Default: `py-16 lg:py-24`
|
|
76
|
+
- Tight: `py-12`
|
|
77
|
+
- **Allowed scale:** 4 6 8 12 16 20 24 32 40 48 64 80 96. Medium-high density — financial information packs in.
|
|
78
|
+
|
|
79
|
+
Density target: a typical institutional surface shows two-to-three data tiles, a primary chart, a holdings table with 10+ rows, and a sidebar of disclosures above the fold without feeling cramped. If a page renders fewer than that, it is under-packed for the direction.
|
|
80
|
+
|
|
81
|
+
## Color
|
|
82
|
+
No hex anywhere. Pure white is forbidden (`--foreground` is warm cream). Pure black is forbidden (`--background` is institutional navy). Gold is the emphasis tone — **one gold element per surface**. Greens and reds are restrained; performance numbers do not glow.
|
|
83
|
+
|
|
84
|
+
## Radius
|
|
85
|
+
`--radius: 0.125rem` (2px). **Formal print-document feel.** Pills are **disallowed** (`pillsAllowed: false`) — they read marketing-startup, not capital-markets. Status indicators use sharp rect badges with mono small-caps text instead.
|
|
86
|
+
|
|
87
|
+
## Shadows
|
|
88
|
+
Style is **minimal** — hairline borders are the dominant structural language. One utility ships:
|
|
89
|
+
|
|
90
|
+
- `.shadow-page` — very subtle page-edge drop (`0 1px 2px 0 hsl(220 50% 4% / 0.4), 0 0 0 1px hsl(var(--border))`) for stacked surfaces. Print-stack feel; never a soft-modern lift.
|
|
91
|
+
|
|
92
|
+
No glows, no inner highlights, no decorative drop shadows. Depth is borders and tonal navy tiers — not blur.
|
|
93
|
+
|
|
94
|
+
## Motion
|
|
95
|
+
Very limited. Capital-markets sites do not perform.
|
|
96
|
+
|
|
97
|
+
- **Easing:** `cubic-bezier(0.22, 1, 0.36, 1)`
|
|
98
|
+
- **Duration tiers:** reveal (200ms). No loop, no ambient.
|
|
99
|
+
- **Keyframes:**
|
|
100
|
+
- `fade-rise-quiet` — opacity 0→1, 8px translateY. 200ms. The only entrance. Settles; does not announce itself.
|
|
101
|
+
|
|
102
|
+
No marquees, no parallax, no ambient gradients, no number-tick flashes (that is kinetic-data territory; for the kinetic/sober hybrid see Bloomberg Wealth and explicitly invoke `kinetic-data` tokens for the live-data surfaces). `prefers-reduced-motion` is honored — fade-rise-quiet collapses to the final state with no transform.
|
|
103
|
+
|
|
104
|
+
If a banking-gravity surface needs live ticker behavior, **compose with `kinetic-data`** — let the data table use kinetic motion within an otherwise still gravity-grade page. Do not introduce kinetics into the chrome itself.
|
|
105
|
+
|
|
106
|
+
## Component patterns
|
|
107
|
+
- **Buttons:** sparing. **Primary** = solid `heritage-gold` bg, `navy-deep` text, 2px radius, `h-10 px-5`, sentence-case sans or mono-uppercase eyebrow style. **Secondary** = ghost with 1px cream border, cream text. **Tertiary** = underlined gold text-link. Many institutional sites lean on text-links over buttons. Buttons never glow, never gradient, never pill.
|
|
108
|
+
- **Cards:** sharp corners (`rounded-sm`, 2px), 1px hairline border, `bg-card` (navy-mid). Internal padding `p-6 lg:p-8`. Title in EB Garamond display serif. Eyebrow label in mono small-caps `muted-foreground`. Body in Inter. Numbers in mono tabular. Optional `.shadow-page` on the outermost stacked surface only — never on every card.
|
|
109
|
+
- **Inputs:** 1px border, `bg-background`, `rounded-sm`, `h-9 px-3`. Label above in mono small-caps `muted-foreground`. Focus ring 2px heritage-gold. Numeric inputs tabular, right-aligned. No floating labels, no rounded pills.
|
|
110
|
+
- **CTAs:** at most one primary gold button per surface. Secondary actions are gold underlined text-links. Language is formal: *"View the 2025 annual report"*, *"Speak with an advisor"*, *"Open an account"*, *"Request the prospectus"*. **Never** *"Get started free"*, *"Sign up now"*, or *"Try it today"* — retail-startup voice is off-direction.
|
|
111
|
+
|
|
112
|
+
## Component families
|
|
113
|
+
None at install time. Anticipated families as projects mature:
|
|
114
|
+
- **DisclosureBlock** — small-print legal text in `slate-rule`, mono optional. Always present on financial pages.
|
|
115
|
+
- **HoldingsTable** — dense tabular layout, mono numerics right-aligned, alternating row bg via `navy-mid` at 60% opacity.
|
|
116
|
+
- **PerformanceTile** — label (mono small-caps), number (mono 700), delta (mono `success-green` / `danger-deep` with `+`/`−` sign — never colored arrow without sign).
|
|
117
|
+
- **LeadershipCard** — formal portrait (3:4), name in EB Garamond, title in mono small-caps. Bloomberg-board-of-directors energy.
|
|
118
|
+
|
|
119
|
+
The Director appends families here as they're established.
|
|
120
|
+
|
|
121
|
+
## Recommended rich media
|
|
122
|
+
Banking-gravity uses **editorial business photography** the way the WSJ front section does — sparingly, formally, and always in service of the institutional voice.
|
|
123
|
+
|
|
124
|
+
**Permitted media:**
|
|
125
|
+
- **Formal portraits** — leadership, partners, advisors. Studio lighting, restrained background, business attire. 3:4 portrait crop. Annie Leibovitz business-portrait style at one stop down — no theatrics.
|
|
126
|
+
- **Glass-tower architecture** — Manhattan, Canary Wharf, Pudong, La Défense. Glass-and-steel office towers at golden hour. The "we are downtown" signal.
|
|
127
|
+
- **Market-floor shots** — NYSE/LSE/HKEX trading floor, Bloomberg terminals in use, formal boardrooms mid-meeting. Reuters/Bloomberg editorial photography style.
|
|
128
|
+
- **Data visualizations and charts** — candlestick, line, area, allocation pie, benchmark comparison. Mono axis labels, restrained color palette using `success-green` and `danger-deep`.
|
|
129
|
+
- **Formal infographics** — only when illustrating fund structure, capital flow, or organizational hierarchy. Two-color (navy + gold), serif labels, hairline rules.
|
|
130
|
+
|
|
131
|
+
**Forbidden media:**
|
|
132
|
+
- Casual photography (lifestyle, smiling-people-on-laptops, coffee-cups, plants).
|
|
133
|
+
- Illustrations except the formal infographics above. No spot illustrations, no isometric scenes, no decorative SVG ornament.
|
|
134
|
+
- 3D renders, glassmorphic overlays, mesh gradients.
|
|
135
|
+
- Animated GIFs, autoplay video.
|
|
136
|
+
- Stock photography that telegraphs "stock photography" (the watermark and overused composition kind).
|
|
137
|
+
|
|
138
|
+
**AI tool recommendations:**
|
|
139
|
+
- **Midjourney** for editorial business photography. Prompts like *"Reuters financial photography, glass and steel office tower at golden hour, formal restrained tone, 35mm, slight haze, no people"* for architecture; *"editorial business portrait, formal studio lighting, dark navy backdrop, business attire, restrained expression, 85mm, Annie Leibovitz at one stop down"* for leadership.
|
|
140
|
+
- **Flux** for tighter realism on portraiture when Midjourney's stylization is too painterly.
|
|
141
|
+
- **D3 / Recharts / Lightweight Charts / Visx** for the actual charts — production libraries, not AI.
|
|
142
|
+
- **Excalidraw** or **Figma** for the formal infographics; export as inline SVG with mono labels.
|
|
143
|
+
|
|
144
|
+
Avoid Midjourney's default cinematic-orange-teal grading — explicitly prompt for neutral grade, restrained palette, formal editorial tone.
|
|
145
|
+
|
|
146
|
+
**Aspect ratios:**
|
|
147
|
+
- Portraits: **3:4** (formal annual-report standard).
|
|
148
|
+
- Architecture: **16:9** landscape or **2:3** vertical for tower shots.
|
|
149
|
+
- Charts: **16:9** for hero charts; **4:3** for embedded.
|
|
150
|
+
- Never **1:1 square** (consumer-social aesthetic) and never **9:16 vertical** (social-video aesthetic).
|
|
151
|
+
|
|
152
|
+
**Video:** generally avoided. If present, single hero with poster image, manual play, no autoplay. Earnings-call replays and leadership interviews are the only legitimate video genres. Captions burned-in, mono.
|
|
153
|
+
|
|
154
|
+
**Performance:** hero image ≤180 KB AVIF at 1600w; portraits ≤90 KB at 800w; SVG infographics inline (≤4 KB each). LCP under 2s with hero image — capital-markets clients on Bloomberg terminals are on managed networks and expect crisp loads.
|
|
155
|
+
|
|
156
|
+
**Accessibility:**
|
|
157
|
+
- Long-form alt-text for all editorial photography — describe the person, the setting, the formal context. *"Photograph: a senior partner stands at a window overlooking the Manhattan skyline at dusk, wearing a charcoal suit, addressing two analysts off-frame"* is the bar.
|
|
158
|
+
- All financial color coding (`success-green` / `danger-deep`) **always** has a non-color signal — `+`/`−` sign character or up/down arrow glyph. Colorblind users must read performance direction without color.
|
|
159
|
+
- Mono numerics at 14px on `navy-deep` pass AA; verify any custom accent before shipping.
|
|
160
|
+
- Disclosure text in `slate-rule` at 12px passes AA on `navy-deep` — verify when introducing alternate surface tiers.
|
|
161
|
+
|
|
162
|
+
## Details
|
|
163
|
+
- **Selection:** `hsl(var(--primary) / 0.25)` background, foreground text — gold-tinted, restrained.
|
|
164
|
+
- **Focus ring:** `2px solid hsl(var(--ring))` — visible heritage gold; institutional surfaces value clear focus over invisibility.
|
|
165
|
+
- **Scrollbar:** thin.
|
|
166
|
+
|
|
167
|
+
## Exceptions
|
|
168
|
+
None yet. When an intentional one-of-one violation lands (e.g., a single brand-mark photo gets pure white background to match a Reuters supplied asset), record it here with the reason.
|
|
169
|
+
|
|
170
|
+
## Revisions
|
|
171
|
+
- Initial direction, authored at install time. Pairs with `editorial` (shared serif gravitas vocabulary) and `kinetic-data` (live-data surfaces compose into a banking-gravity chrome). The distinct slot: institutional capital-markets restraint where editorial is magazine-prose-first and kinetic-data is trading-desk-kinetic.
|