@stylecrib/cli 0.0.0-stage → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -2
- package/agents/MANIFEST.yml +136 -0
- package/agents/README.md +75 -0
- package/agents/art-director.md +168 -0
- package/agents/audacity-director.md +109 -0
- package/agents/brand-identity.md +179 -0
- package/agents/brand-precedent.md +119 -0
- package/agents/brief-enforcer.md +136 -0
- package/agents/component-qa.md +167 -0
- package/agents/cto.md +49 -0
- package/agents/design-director.md +184 -0
- package/agents/design-systems-engineer.md +162 -0
- package/agents/direction-curator.md +133 -0
- package/agents/homogeneity-detector.md +104 -0
- package/agents/logo-designer.md +240 -0
- package/agents/marketing-designer.md +156 -0
- package/agents/media-curator.md +165 -0
- package/agents/motion-engineer.md +270 -0
- package/agents/qa-conductor.md +143 -0
- package/agents/render-qa.md +133 -0
- package/agents/upgrade-simulator.md +123 -0
- package/agents/vp-architecture.md +49 -0
- package/agents/vp-engineering.md +49 -0
- package/dist/index.js +7182 -0
- package/package.json +69 -4
- package/themes/README.md +70 -0
- package/themes/acrylic-soft/THEME.md +142 -0
- package/themes/acrylic-soft/tokens.ts +180 -0
- package/themes/agency-creative/THEME.md +91 -0
- package/themes/agency-creative/tokens.ts +202 -0
- package/themes/agency-portfolio/THEME.md +109 -0
- package/themes/agency-portfolio/tokens.ts +159 -0
- package/themes/ai-startup/THEME.md +95 -0
- package/themes/ai-startup/tokens.ts +162 -0
- package/themes/airline-modern/THEME.md +104 -0
- package/themes/airline-modern/tokens.ts +179 -0
- package/themes/arc-stack/.anchor-render.png +0 -0
- package/themes/arc-stack/THEME.md +125 -0
- package/themes/arc-stack/audit.log.jsonl +6 -0
- package/themes/arc-stack/dismissals.jsonl +3 -0
- package/themes/arc-stack/tailwind.snippet.ts +17 -0
- package/themes/arc-stack/theme.yml +153 -0
- package/themes/arc-stack/tokens.ts +29 -0
- package/themes/architectural/THEME.md +102 -0
- package/themes/architectural/tokens.ts +159 -0
- package/themes/atelier-radiance/THEME.md +93 -0
- package/themes/atelier-radiance/audit.log.jsonl +1 -0
- package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
- package/themes/atelier-radiance/theme.yml +130 -0
- package/themes/atelier-radiance/tokens.ts +29 -0
- package/themes/automotive-ev/THEME.md +87 -0
- package/themes/automotive-ev/tokens.ts +183 -0
- package/themes/automotive-luxury/THEME.md +88 -0
- package/themes/automotive-luxury/tokens.ts +175 -0
- package/themes/baby-modern/THEME.md +79 -0
- package/themes/baby-modern/tokens.ts +184 -0
- package/themes/banking-gravity/THEME.md +171 -0
- package/themes/banking-gravity/tokens.ts +169 -0
- package/themes/beauty-clean/THEME.md +92 -0
- package/themes/beauty-clean/tokens.ts +176 -0
- package/themes/beauty-luxury/THEME.md +96 -0
- package/themes/beauty-luxury/tokens.ts +178 -0
- package/themes/bento-modular/.anchor-render.png +0 -0
- package/themes/bento-modular/BUILD_BRIEF.md +171 -0
- package/themes/bento-modular/THEME.md +80 -0
- package/themes/bento-modular/audit.log.jsonl +3 -0
- package/themes/bento-modular/dismissals.jsonl +1 -0
- package/themes/bento-modular/tailwind.snippet.ts +17 -0
- package/themes/bento-modular/theme.yml +83 -0
- package/themes/bento-modular/tokens.ts +27 -0
- package/themes/bookstore-indie/THEME.md +78 -0
- package/themes/bookstore-indie/tokens.ts +147 -0
- package/themes/brutalist/THEME.md +96 -0
- package/themes/brutalist/tokens.ts +151 -0
- package/themes/business-tiles/THEME.md +141 -0
- package/themes/business-tiles/tokens.ts +178 -0
- package/themes/cabana-poster/THEME.md +158 -0
- package/themes/cabana-poster/audit.log.jsonl +1 -0
- package/themes/cabana-poster/tailwind.snippet.ts +16 -0
- package/themes/cabana-poster/theme.yml +221 -0
- package/themes/cabana-poster/tokens.ts +34 -0
- package/themes/case-panel/THEME.md +126 -0
- package/themes/case-panel/audit.log.jsonl +2 -0
- package/themes/case-panel/tailwind.snippet.ts +15 -0
- package/themes/case-panel/theme.yml +153 -0
- package/themes/case-panel/tokens.ts +28 -0
- package/themes/cinematic-dark/THEME.md +97 -0
- package/themes/cinematic-dark/tokens.ts +195 -0
- package/themes/classic-car/THEME.md +86 -0
- package/themes/classic-car/tokens.ts +173 -0
- package/themes/cloud-friendly/THEME.md +152 -0
- package/themes/cloud-friendly/tokens.ts +181 -0
- package/themes/community-niche/THEME.md +102 -0
- package/themes/community-niche/tokens.ts +177 -0
- package/themes/corporate-grid/THEME.md +154 -0
- package/themes/corporate-grid/tokens.ts +182 -0
- package/themes/couture-luxury/THEME.md +85 -0
- package/themes/couture-luxury/tokens.ts +146 -0
- package/themes/creator-social/THEME.md +131 -0
- package/themes/creator-social/tokens.ts +249 -0
- package/themes/crypto-onchain/THEME.md +100 -0
- package/themes/crypto-onchain/tokens.ts +207 -0
- package/themes/cycling-brand/THEME.md +78 -0
- package/themes/cycling-brand/tokens.ts +185 -0
- package/themes/dating-friendly/THEME.md +102 -0
- package/themes/dating-friendly/tokens.ts +178 -0
- package/themes/dense-utility/THEME.md +85 -0
- package/themes/dense-utility/tokens.ts +155 -0
- package/themes/devtool-cli/THEME.md +100 -0
- package/themes/devtool-cli/tokens.ts +195 -0
- package/themes/devtool-docs/THEME.md +105 -0
- package/themes/devtool-docs/tokens.ts +177 -0
- package/themes/editorial/THEME.md +129 -0
- package/themes/editorial/audit.log.jsonl +2 -0
- package/themes/editorial/tailwind.snippet.ts +15 -0
- package/themes/editorial/theme.yml +173 -0
- package/themes/editorial/tokens.ts +29 -0
- package/themes/education-formal/THEME.md +154 -0
- package/themes/education-formal/audit.log.jsonl +1 -0
- package/themes/education-formal/tailwind.snippet.ts +15 -0
- package/themes/education-formal/theme.yml +186 -0
- package/themes/education-formal/tokens.ts +29 -0
- package/themes/education-warm/THEME.md +91 -0
- package/themes/education-warm/tokens.ts +185 -0
- package/themes/ember-poster/README.md +79 -0
- package/themes/ember-poster/THEME.md +101 -0
- package/themes/ember-poster/audit.log.jsonl +17 -0
- package/themes/ember-poster/package.json +34 -0
- package/themes/ember-poster/tailwind.snippet.ts +17 -0
- package/themes/ember-poster/theme.yml +109 -0
- package/themes/ember-poster/tokens.ts +27 -0
- package/themes/enterprise-cloud/THEME.md +139 -0
- package/themes/enterprise-cloud/tokens.ts +179 -0
- package/themes/enterprise-tech/.anchor-render.png +0 -0
- package/themes/enterprise-tech/THEME.md +167 -0
- package/themes/enterprise-tech/audit.log.jsonl +1 -0
- package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
- package/themes/enterprise-tech/theme.yml +202 -0
- package/themes/enterprise-tech/tokens.ts +29 -0
- package/themes/ev-charging/THEME.md +94 -0
- package/themes/ev-charging/tokens.ts +185 -0
- package/themes/farm-direct/THEME.md +92 -0
- package/themes/farm-direct/tokens.ts +180 -0
- package/themes/fintech-card/THEME.md +96 -0
- package/themes/fintech-card/tokens.ts +191 -0
- package/themes/fintech-trust/THEME.md +94 -0
- package/themes/fintech-trust/tokens.ts +192 -0
- package/themes/food-blog/THEME.md +98 -0
- package/themes/food-blog/tokens.ts +183 -0
- package/themes/forum-classic/THEME.md +100 -0
- package/themes/forum-classic/tokens.ts +168 -0
- package/themes/fresh-plate/.anchor-render.png +0 -0
- package/themes/fresh-plate/THEME.md +144 -0
- package/themes/fresh-plate/audit.log.jsonl +2 -0
- package/themes/fresh-plate/dismissals.jsonl +3 -0
- package/themes/fresh-plate/tailwind.snippet.ts +16 -0
- package/themes/fresh-plate/theme.yml +189 -0
- package/themes/fresh-plate/tokens.ts +30 -0
- package/themes/furniture-modern/THEME.md +94 -0
- package/themes/furniture-modern/tokens.ts +176 -0
- package/themes/gaming-esports/THEME.md +146 -0
- package/themes/gaming-esports/tokens.ts +199 -0
- package/themes/gaming-streamer/THEME.md +139 -0
- package/themes/gaming-streamer/tokens.ts +201 -0
- package/themes/glassmorphic-modern/THEME.md +119 -0
- package/themes/glassmorphic-modern/tokens.ts +174 -0
- package/themes/government-civic/THEME.md +138 -0
- package/themes/government-civic/tokens.ts +164 -0
- package/themes/gym-chain/THEME.md +79 -0
- package/themes/gym-chain/tokens.ts +196 -0
- package/themes/healthcare-bright/THEME.md +95 -0
- package/themes/healthcare-bright/tokens.ts +184 -0
- package/themes/home-decor/THEME.md +94 -0
- package/themes/home-decor/tokens.ts +177 -0
- package/themes/hotel-boutique/THEME.md +110 -0
- package/themes/hotel-boutique/tokens.ts +179 -0
- package/themes/hyperminimal-mono/THEME.md +91 -0
- package/themes/hyperminimal-mono/tokens.ts +150 -0
- package/themes/indie-art-game/THEME.md +107 -0
- package/themes/indie-art-game/tokens.ts +216 -0
- package/themes/insurance-legacy/THEME.md +101 -0
- package/themes/insurance-legacy/tokens.ts +182 -0
- package/themes/insurance-modern/THEME.md +103 -0
- package/themes/insurance-modern/tokens.ts +192 -0
- package/themes/kaiju-reveal/THEME.md +97 -0
- package/themes/kaiju-reveal/tokens.ts +185 -0
- package/themes/kinetic-data/THEME.md +172 -0
- package/themes/kinetic-data/audit.log.jsonl +1 -0
- package/themes/kinetic-data/tailwind.snippet.ts +16 -0
- package/themes/kinetic-data/theme.yml +207 -0
- package/themes/kinetic-data/tokens.ts +30 -0
- package/themes/kinetic-headline/.anchor-render.png +0 -0
- package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
- package/themes/kinetic-headline/THEME.md +78 -0
- package/themes/kinetic-headline/audit.log.jsonl +4 -0
- package/themes/kinetic-headline/dismissals.jsonl +1 -0
- package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
- package/themes/kinetic-headline/theme.yml +81 -0
- package/themes/kinetic-headline/tokens.ts +26 -0
- package/themes/law-firm/THEME.md +108 -0
- package/themes/law-firm/tokens.ts +158 -0
- package/themes/lawtech-modern/THEME.md +107 -0
- package/themes/lawtech-modern/tokens.ts +192 -0
- package/themes/linkedin-pro/THEME.md +102 -0
- package/themes/linkedin-pro/tokens.ts +174 -0
- package/themes/logistics-modern/THEME.md +94 -0
- package/themes/logistics-modern/tokens.ts +187 -0
- package/themes/magazine-glossy/THEME.md +74 -0
- package/themes/magazine-glossy/tokens.ts +158 -0
- package/themes/marker-mag/THEME.md +128 -0
- package/themes/marker-mag/audit.log.jsonl +1 -0
- package/themes/marker-mag/tailwind.snippet.ts +15 -0
- package/themes/marker-mag/theme.yml +159 -0
- package/themes/marker-mag/tokens.ts +27 -0
- package/themes/marketplace-modern/THEME.md +135 -0
- package/themes/marketplace-modern/tokens.ts +186 -0
- package/themes/marketplace-vintage/THEME.md +110 -0
- package/themes/marketplace-vintage/tokens.ts +185 -0
- package/themes/maximalist/THEME.md +96 -0
- package/themes/maximalist/tokens.ts +168 -0
- package/themes/mid-century/THEME.md +109 -0
- package/themes/mid-century/tokens.ts +162 -0
- package/themes/motorcycle-brand/THEME.md +86 -0
- package/themes/motorcycle-brand/tokens.ts +174 -0
- package/themes/museum/THEME.md +83 -0
- package/themes/museum/tokens.ts +147 -0
- package/themes/music-streaming/THEME.md +101 -0
- package/themes/music-streaming/tokens.ts +187 -0
- package/themes/music-vinyl/THEME.md +98 -0
- package/themes/music-vinyl/tokens.ts +167 -0
- package/themes/nature-distilled/.anchor-render.png +0 -0
- package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
- package/themes/nature-distilled/THEME.md +81 -0
- package/themes/nature-distilled/audit.log.jsonl +2 -0
- package/themes/nature-distilled/tailwind.snippet.ts +16 -0
- package/themes/nature-distilled/theme.yml +91 -0
- package/themes/nature-distilled/tokens.ts +26 -0
- package/themes/news-tabloid/THEME.md +72 -0
- package/themes/news-tabloid/tokens.ts +158 -0
- package/themes/news-tech/THEME.md +75 -0
- package/themes/news-tech/tokens.ts +149 -0
- package/themes/newsletter/THEME.md +82 -0
- package/themes/newsletter/tokens.ts +138 -0
- package/themes/newspaper-classic/THEME.md +74 -0
- package/themes/newspaper-classic/tokens.ts +159 -0
- package/themes/nonprofit-arts/THEME.md +78 -0
- package/themes/nonprofit-arts/tokens.ts +157 -0
- package/themes/nonprofit-warm/THEME.md +105 -0
- package/themes/nonprofit-warm/tokens.ts +188 -0
- package/themes/outdoor-adventure/THEME.md +113 -0
- package/themes/outdoor-adventure/tokens.ts +181 -0
- package/themes/overland-broadside/THEME.md +119 -0
- package/themes/overland-broadside/audit.log.jsonl +1 -0
- package/themes/overland-broadside/tailwind.snippet.ts +17 -0
- package/themes/overland-broadside/theme.yml +138 -0
- package/themes/overland-broadside/tokens.ts +27 -0
- package/themes/performance-engineered/THEME.md +162 -0
- package/themes/performance-engineered/audit.log.jsonl +1 -0
- package/themes/performance-engineered/tailwind.snippet.ts +15 -0
- package/themes/performance-engineered/theme.yml +193 -0
- package/themes/performance-engineered/tokens.ts +29 -0
- package/themes/pet-food/THEME.md +78 -0
- package/themes/pet-food/tokens.ts +185 -0
- package/themes/pharma-clinical/THEME.md +164 -0
- package/themes/pharma-clinical/audit.log.jsonl +1 -0
- package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
- package/themes/pharma-clinical/theme.yml +201 -0
- package/themes/pharma-clinical/tokens.ts +29 -0
- package/themes/pill-editorial/THEME.md +125 -0
- package/themes/pill-editorial/audit.log.jsonl +1 -0
- package/themes/pill-editorial/tailwind.snippet.ts +15 -0
- package/themes/pill-editorial/theme.yml +168 -0
- package/themes/pill-editorial/tokens.ts +31 -0
- package/themes/podcast-warm/THEME.md +103 -0
- package/themes/podcast-warm/tokens.ts +192 -0
- package/themes/publisher-indie/THEME.md +78 -0
- package/themes/publisher-indie/tokens.ts +148 -0
- package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
- package/themes/raw-concrete/THEME.md +76 -0
- package/themes/raw-concrete/audit.log.jsonl +10 -0
- package/themes/raw-concrete/tailwind.snippet.ts +16 -0
- package/themes/raw-concrete/theme.yml +88 -0
- package/themes/raw-concrete/tokens.ts +27 -0
- package/themes/realestate-luxury/THEME.md +94 -0
- package/themes/realestate-luxury/tokens.ts +169 -0
- package/themes/realestate-marketplace/THEME.md +106 -0
- package/themes/realestate-marketplace/tokens.ts +183 -0
- package/themes/restaurant-modern/THEME.md +109 -0
- package/themes/restaurant-modern/tokens.ts +172 -0
- package/themes/runway-fashion/THEME.md +99 -0
- package/themes/runway-fashion/tokens.ts +167 -0
- package/themes/saturday-morning/THEME.md +117 -0
- package/themes/saturday-morning/tokens.ts +281 -0
- package/themes/schema.ts +235 -0
- package/themes/signal-dark/BUILD_BRIEF.md +168 -0
- package/themes/signal-dark/THEME.md +107 -0
- package/themes/signal-dark/tokens.ts +181 -0
- package/themes/soft-modern/THEME.md +91 -0
- package/themes/soft-modern/tokens.ts +166 -0
- package/themes/solar-residential/THEME.md +92 -0
- package/themes/solar-residential/tokens.ts +176 -0
- package/themes/sports-league/THEME.md +180 -0
- package/themes/sports-league/audit.log.jsonl +1 -0
- package/themes/sports-league/tailwind.snippet.ts +15 -0
- package/themes/sports-league/theme.yml +213 -0
- package/themes/sports-league/tokens.ts +32 -0
- package/themes/stadium-sport/THEME.md +114 -0
- package/themes/stadium-sport/tokens.ts +187 -0
- package/themes/streetwear-hype/THEME.md +100 -0
- package/themes/streetwear-hype/tokens.ts +174 -0
- package/themes/studio-architect/THEME.md +108 -0
- package/themes/studio-architect/tokens.ts +162 -0
- package/themes/studio-photographer/THEME.md +88 -0
- package/themes/studio-photographer/tokens.ts +164 -0
- package/themes/team-kanban/.anchor-render.png +0 -0
- package/themes/team-kanban/THEME.md +167 -0
- package/themes/team-kanban/audit.log.jsonl +2 -0
- package/themes/team-kanban/dismissals.jsonl +1 -0
- package/themes/team-kanban/tailwind.snippet.ts +15 -0
- package/themes/team-kanban/theme.yml +209 -0
- package/themes/team-kanban/tokens.ts +35 -0
- package/themes/telehealth-modern/THEME.md +95 -0
- package/themes/telehealth-modern/tokens.ts +197 -0
- package/themes/tourism-board/THEME.md +111 -0
- package/themes/tourism-board/tokens.ts +173 -0
- package/themes/toys-modern/THEME.md +79 -0
- package/themes/toys-modern/tokens.ts +200 -0
- package/themes/travel-luxury/THEME.md +95 -0
- package/themes/travel-luxury/tokens.ts +162 -0
- package/themes/vacation-rental/THEME.md +105 -0
- package/themes/vacation-rental/tokens.ts +174 -0
- package/themes/vault-reel/THEME.md +134 -0
- package/themes/vault-reel/audit.log.jsonl +3 -0
- package/themes/vault-reel/tailwind.snippet.ts +16 -0
- package/themes/vault-reel/theme.yml +167 -0
- package/themes/vault-reel/tokens.ts +30 -0
- package/themes/vet-modern/THEME.md +79 -0
- package/themes/vet-modern/tokens.ts +194 -0
- package/themes/web3-restraint/THEME.md +87 -0
- package/themes/web3-restraint/tokens.ts +154 -0
- package/themes/wellness-active/THEME.md +102 -0
- package/themes/wellness-active/tokens.ts +203 -0
- package/themes/wellness-spa/THEME.md +93 -0
- package/themes/wellness-spa/tokens.ts +173 -0
- package/themes/y2k-chrome/THEME.md +118 -0
- package/themes/y2k-chrome/tokens.ts +249 -0
- package/themes/yoga-studio/THEME.md +76 -0
- package/themes/yoga-studio/tokens.ts +163 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
export const y2kChrome: Direction = {
|
|
4
|
+
name: "y2k-chrome",
|
|
5
|
+
ethos:
|
|
6
|
+
"iMac G4 translucent · iPod gleam · MTV 2001 chrome · Bose Wave optimism · early-WinAmp futurism",
|
|
7
|
+
references: [
|
|
8
|
+
{ brand: "Apple iMac G3/G4", trait: "translucent shells, candy-colored optimism" },
|
|
9
|
+
{ brand: "Apple iPod (original)", trait: "chrome back, click-wheel gleam" },
|
|
10
|
+
{ brand: "MTV", trait: "2001 broadcast graphics — chrome wordmarks, lens flares" },
|
|
11
|
+
{ brand: "Bose Wave radio", trait: "soft silver product optimism" },
|
|
12
|
+
{ brand: "WinAmp (original)", trait: "skinnable futurism, cyan VU meters" },
|
|
13
|
+
{ brand: "Sony VAIO", trait: "magnesium-and-blue laptop era" },
|
|
14
|
+
],
|
|
15
|
+
feel:
|
|
16
|
+
"Optimistic-tech nostalgia. Translucent surfaces, chrome gleams, soft cool gradients " +
|
|
17
|
+
"(silver-to-blue), bubble buttons. Rounded everything. " +
|
|
18
|
+
"The world hasn't ended yet and the future is shiny.",
|
|
19
|
+
|
|
20
|
+
fonts: {
|
|
21
|
+
display: {
|
|
22
|
+
family: "Eurostile",
|
|
23
|
+
fallback: ["Bahnschrift", "DM Sans", "Inter", "system-ui", "sans-serif"],
|
|
24
|
+
from: "Eurostile — the canonical Y2K display face. Geometric, tech-feel; Bahnschrift covers the same territory on Windows; DM Sans is the web-safe fallback",
|
|
25
|
+
googleFont: "DM+Sans",
|
|
26
|
+
weights: [400, 500, 700],
|
|
27
|
+
},
|
|
28
|
+
body: {
|
|
29
|
+
family: "Inter",
|
|
30
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
31
|
+
from: "neutral sans — lets the chrome chrome itself; the body text doesn't compete with the gleam",
|
|
32
|
+
googleFont: "Inter",
|
|
33
|
+
weights: [400, 500, 600],
|
|
34
|
+
},
|
|
35
|
+
mono: {
|
|
36
|
+
family: "Space Mono",
|
|
37
|
+
fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
|
|
38
|
+
from: "geometric mono with personality — feels like OS X 10.0 dock fonts and old VAIO BIOS screens",
|
|
39
|
+
googleFont: "Space+Mono",
|
|
40
|
+
weights: [400, 700],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
typography: {
|
|
45
|
+
headingTracking: "0.01em", // Eurostile/Bahnschrift breathes wider — slight positive tracking reads "broadcast graphic"
|
|
46
|
+
bodyTracking: "0",
|
|
47
|
+
fontFeatureSettings: '"ss01", "cv11"',
|
|
48
|
+
h1ScaleClamp: "clamp(2.25rem, 5.5vw, 4rem)",
|
|
49
|
+
bodyBaseSize: "1rem",
|
|
50
|
+
bodyLineHeight: "1.6",
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
colors: {
|
|
54
|
+
background: {
|
|
55
|
+
hsl: "220 15% 96%",
|
|
56
|
+
from: "light cool gray — silvery, slight blue bias. iMac G4 desktop pinstripe, drained",
|
|
57
|
+
},
|
|
58
|
+
foreground: {
|
|
59
|
+
hsl: "220 25% 12%",
|
|
60
|
+
from: "deep cool black — iPod click-wheel engraving, never warm",
|
|
61
|
+
},
|
|
62
|
+
card: {
|
|
63
|
+
hsl: "0 0% 100%",
|
|
64
|
+
from: "pure white card — the translucent acrylic shell with the light on behind it",
|
|
65
|
+
},
|
|
66
|
+
popover: {
|
|
67
|
+
hsl: "0 0% 100%",
|
|
68
|
+
from: "same as card; depth comes from gleam shadow, not hue shift",
|
|
69
|
+
},
|
|
70
|
+
primary: {
|
|
71
|
+
hsl: "200 95% 50%",
|
|
72
|
+
from: "cyan-blue — iMac-era Apple marketing blue, the .com-boom hero color",
|
|
73
|
+
},
|
|
74
|
+
primaryForeground: {
|
|
75
|
+
hsl: "0 0% 100%",
|
|
76
|
+
from: "white on cyan — bubble-button label",
|
|
77
|
+
},
|
|
78
|
+
secondary: {
|
|
79
|
+
hsl: "220 12% 92%",
|
|
80
|
+
from: "soft silver — Bose Wave brushed-aluminum, one tier deeper than background",
|
|
81
|
+
},
|
|
82
|
+
secondaryForeground: {
|
|
83
|
+
hsl: "220 25% 12%",
|
|
84
|
+
from: "deep cool black on silver",
|
|
85
|
+
},
|
|
86
|
+
muted: {
|
|
87
|
+
hsl: "220 12% 92%",
|
|
88
|
+
from: "same as secondary; differentiation by usage, not color",
|
|
89
|
+
},
|
|
90
|
+
mutedForeground: {
|
|
91
|
+
hsl: "220 14% 44%",
|
|
92
|
+
from: "Sony VAIO label-print gray — caption and meta text",
|
|
93
|
+
},
|
|
94
|
+
accent: {
|
|
95
|
+
hsl: "220 14% 88%",
|
|
96
|
+
from: "hover surface — chrome lifted one stop",
|
|
97
|
+
},
|
|
98
|
+
accentForeground: {
|
|
99
|
+
hsl: "220 25% 12%",
|
|
100
|
+
from: "deep cool black on lifted chrome",
|
|
101
|
+
},
|
|
102
|
+
border: {
|
|
103
|
+
hsl: "220 16% 84%",
|
|
104
|
+
from: "soft chrome edge — visible but not assertive; the bevel on a Wave radio",
|
|
105
|
+
},
|
|
106
|
+
input: {
|
|
107
|
+
hsl: "220 16% 84%",
|
|
108
|
+
from: "same as border — translucent recessed field",
|
|
109
|
+
},
|
|
110
|
+
ring: {
|
|
111
|
+
hsl: "200 95% 50%",
|
|
112
|
+
from: "primary cyan, used for focus only — WinAmp VU-meter glow",
|
|
113
|
+
},
|
|
114
|
+
destructive: {
|
|
115
|
+
hsl: "350 85% 56%",
|
|
116
|
+
from: "saturated alert — Y2K palette stays cool, but errors need to read; pulled toward magenta, not blood-red",
|
|
117
|
+
},
|
|
118
|
+
destructiveForeground: {
|
|
119
|
+
hsl: "0 0% 100%",
|
|
120
|
+
from: "white on alert",
|
|
121
|
+
},
|
|
122
|
+
brand: {
|
|
123
|
+
"chrome-light": {
|
|
124
|
+
hsl: "220 10% 88%",
|
|
125
|
+
from: "iPod chrome back, top stop — the highlight in a brushed-metal gradient",
|
|
126
|
+
},
|
|
127
|
+
"chrome-mid": {
|
|
128
|
+
hsl: "220 12% 78%",
|
|
129
|
+
from: "iPod chrome back, mid stop — the body of the bevel",
|
|
130
|
+
},
|
|
131
|
+
"chrome-deep": {
|
|
132
|
+
hsl: "220 18% 55%",
|
|
133
|
+
from: "iPod chrome back, lower stop — the underside of the bevel, just before the drop shadow",
|
|
134
|
+
},
|
|
135
|
+
"cyan-hot": {
|
|
136
|
+
hsl: "180 100% 50%",
|
|
137
|
+
from: "WinAmp VU-meter peak, MTV 2001 broadcast cyan — the saturated accent, used as glow only",
|
|
138
|
+
},
|
|
139
|
+
lavender: {
|
|
140
|
+
hsl: "260 50% 78%",
|
|
141
|
+
from: "Y2K secondary palette — Bondi-era Apple lilac, Sony VAIO accent strip; used for status, tags, the second accent",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
spacing: {
|
|
147
|
+
base: 4,
|
|
148
|
+
scale: [4, 6, 8, 10, 12, 16, 20, 24, 32, 48],
|
|
149
|
+
containerMax: "max-w-6xl",
|
|
150
|
+
containerPadding: "px-4 lg:px-8",
|
|
151
|
+
sectionPadding: {
|
|
152
|
+
hero: "pt-24 pb-16 lg:pt-32 lg:pb-24",
|
|
153
|
+
default: "py-16 lg:py-24",
|
|
154
|
+
tight: "py-10 lg:py-16",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
radius: {
|
|
159
|
+
base: "1rem", // 16px — iMac G4 dome corner radius; bubble button territory
|
|
160
|
+
pillsAllowed: true,
|
|
161
|
+
},
|
|
162
|
+
|
|
163
|
+
shadows: {
|
|
164
|
+
style: "glow",
|
|
165
|
+
utilities: {
|
|
166
|
+
gleam:
|
|
167
|
+
"inset 0 1px 0 hsl(0 0% 100% / 0.85), " + // top inner highlight — the wet-look catch
|
|
168
|
+
"inset 0 -1px 0 hsl(220 18% 55% / 0.25), " + // bottom inner shade — the bevel underside
|
|
169
|
+
"0 1px 2px hsl(220 25% 12% / 0.08), " +
|
|
170
|
+
"0 8px 24px hsl(200 95% 50% / 0.12)", // drop shadow tinted cyan — the iMac shelf glow
|
|
171
|
+
"gleam-lg":
|
|
172
|
+
"inset 0 1px 0 hsl(0 0% 100% / 0.9), " +
|
|
173
|
+
"inset 0 -2px 0 hsl(220 18% 55% / 0.3), " +
|
|
174
|
+
"0 2px 4px hsl(220 25% 12% / 0.1), " +
|
|
175
|
+
"0 18px 48px hsl(200 95% 50% / 0.18)", // hover-lifted gleam
|
|
176
|
+
"chrome-edge":
|
|
177
|
+
"inset 0 1px 0 hsl(220 10% 88% / 1), " + // chrome-light top
|
|
178
|
+
"inset 0 0 0 1px hsl(220 12% 78% / 0.6), " + // chrome-mid hairline
|
|
179
|
+
"inset 0 -1px 0 hsl(220 18% 55% / 0.8)", // chrome-deep bottom — simulates a multi-stop gradient border
|
|
180
|
+
"glow-cyan":
|
|
181
|
+
"0 0 0 1px hsl(200 95% 50% / 0.4), " +
|
|
182
|
+
"0 0 24px hsl(180 100% 50% / 0.35)", // WinAmp peak indicator, focus state
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
motion: {
|
|
187
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
188
|
+
durations: {
|
|
189
|
+
reveal: 200, // scale-in entrance — short and confident
|
|
190
|
+
loop: 3000, // pulse-glow ambient
|
|
191
|
+
ambient: 4000, // gleam-sweep across surfaces
|
|
192
|
+
},
|
|
193
|
+
keyframes: {
|
|
194
|
+
"scale-in": {
|
|
195
|
+
css:
|
|
196
|
+
"from { opacity: 0; transform: scale(0.96); }\n" +
|
|
197
|
+
"to { opacity: 1; transform: scale(1); }",
|
|
198
|
+
defaultDuration: 200,
|
|
199
|
+
iteration: "once",
|
|
200
|
+
purpose: "standard appear — bubble buttons, modals, popovers; confirms the click without bouncing",
|
|
201
|
+
},
|
|
202
|
+
"pulse-glow": {
|
|
203
|
+
css:
|
|
204
|
+
"0%, 100% { opacity: 1; }\n" +
|
|
205
|
+
"50% { opacity: 0.65; }",
|
|
206
|
+
defaultDuration: 3000,
|
|
207
|
+
iteration: "infinite",
|
|
208
|
+
purpose: "slow ambient oscillation on glow accents — the WinAmp VU meter at rest",
|
|
209
|
+
},
|
|
210
|
+
"gleam-sweep": {
|
|
211
|
+
css:
|
|
212
|
+
"0% { background-position: -150% 0; }\n" +
|
|
213
|
+
"100% { background-position: 250% 0; }",
|
|
214
|
+
defaultDuration: 4000,
|
|
215
|
+
iteration: "infinite",
|
|
216
|
+
purpose: "light sweep across a chrome surface — the catch of light moving across an iPod back",
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
respectsReducedMotion: true,
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
density: "medium",
|
|
223
|
+
|
|
224
|
+
patterns: {
|
|
225
|
+
button:
|
|
226
|
+
"Gradient-filled bubble buttons (cyan-to-blue, top-light to bottom-dark) with inner highlight via `.gleam`. " +
|
|
227
|
+
"Very rounded (`rounded-2xl`, pills allowed for compact actions). " +
|
|
228
|
+
"Solid is the norm here — text-links are the ghost variant. " +
|
|
229
|
+
"Hover: lift via `gleam-lg` and a 1.02 scale; never a flat color swap.",
|
|
230
|
+
card:
|
|
231
|
+
"Translucent white card on the cool-gray background, `chrome-edge` border, `rounded-2xl`, `gleam` shadow. " +
|
|
232
|
+
"Internal padding `p-6 lg:p-8`. Title in Eurostile/Bahnschrift display. " +
|
|
233
|
+
"Hover lifts to `gleam-lg`. Optional `gleam-sweep` accent strip on hero cards only.",
|
|
234
|
+
input:
|
|
235
|
+
"Full `rounded-xl` box, `chrome-edge` inset border, `bg-card`. " +
|
|
236
|
+
"Focus = `glow-cyan` ring (cyan-hot at 35% opacity). " +
|
|
237
|
+
"Label above; helper text below in `mutedForeground`.",
|
|
238
|
+
cta:
|
|
239
|
+
"Gradient bubble button is the default. " +
|
|
240
|
+
"Secondary CTAs use a ghost variant (chrome-edge border, foreground text) or a text-link in primary cyan with an underline-on-hover.",
|
|
241
|
+
},
|
|
242
|
+
|
|
243
|
+
details: {
|
|
244
|
+
selectionBg: "hsl(var(--primary) / 0.25)",
|
|
245
|
+
selectionFg: "hsl(var(--foreground))",
|
|
246
|
+
focusRing: "2px solid hsl(var(--ring) / 0.6)",
|
|
247
|
+
scrollbarStyle: "thin",
|
|
248
|
+
},
|
|
249
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Design Direction — Yoga-Studio
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Alo cream paper · Y7 candlelit terracotta · Modo sage minimalism · CorePower studio whitespace · The Class breathwork hush
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Cream paper, slim sans, one earth accent — sage *or* terracotta, never both as equals (sage is primary, terracotta is the focus mark). Whitespace is paced to a four-count inhale. The class list reads like a recital program, not a calendar app. Lowercase where possible. The page exhales.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Alo Yoga** → cream paper, slim sans, almost-no-color storefront.
|
|
11
|
+
- **Y7 Studio** → candlelit terracotta accent, single-word section headers.
|
|
12
|
+
- **Modo Yoga** → sage-green ethical mark, breath-paced layout.
|
|
13
|
+
- **CorePower Yoga** → studio whitespace, oversized roman-numeral schedule.
|
|
14
|
+
- **The Class by Taryn Toomey** → ritual typography, low-contrast quiet luxury.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
Surface stack is **cream paper** (background) → **lighter cream** (card) → **deeper cream** (secondary / muted / accent). Depth is hairline rule, never fill differentiation. Brand tokens: `--sage`, `--sage-deep`, `--terracotta`, `--cream`, `--ink`, `--ink-soft`. Primary is `--sage` — the ethical mark. Ring is `--terracotta` — the ritual focus color. Never both on the same element.
|
|
18
|
+
|
|
19
|
+
## Typography
|
|
20
|
+
- **Display:** Cormorant Garamond. Slim, high-contrast, italic-friendly. Headings often set lowercase — "twelve classes this week" reads more as a recital line than "TWELVE CLASSES THIS WEEK".
|
|
21
|
+
- **Body:** Inter 300/400. Light weights only — Alo storefront restraint. 17px base, line-height 1.7.
|
|
22
|
+
- **Mono:** JetBrains Mono. Reserved for schedule times and pass prices — recital-program restraint.
|
|
23
|
+
|
|
24
|
+
H1 uses `clamp(2.25rem, 5vw, 4rem)` — restrained, never JUMBOTRON. Tracking `-0.01em` on display, `0.005em` on body (a hair of air — breathwork pacing).
|
|
25
|
+
|
|
26
|
+
## Spacing
|
|
27
|
+
- **Container:** `max-w-5xl px-6 lg:px-12` — studio-width, not stadium. Matt-width reading.
|
|
28
|
+
- **Section padding tiers:**
|
|
29
|
+
- Hero: `pt-24 pb-16 lg:pt-36 lg:pb-24` (a long inhale before the page begins)
|
|
30
|
+
- Default: `py-20 lg:py-28`
|
|
31
|
+
- Tight: `py-12 lg:py-16`
|
|
32
|
+
- **Allowed scale values:** 4 6 8 12 16 20 24 32 40 48 64 96 128. No arbitrary spacing.
|
|
33
|
+
|
|
34
|
+
## Color
|
|
35
|
+
No hex in components — tokens only. Pure white and pure black are forbidden; use `--cream` and `--ink`. Saturated colors are forbidden — there is no rule for a brand-blue, brand-purple, or signal-red. If a status needs to be flagged: sage for go, terracotta for warmth, `--destructive` for cancel — that is the entire palette.
|
|
36
|
+
|
|
37
|
+
## Radius
|
|
38
|
+
`--radius: 0`. Sharp corners only. Pills are disallowed (`pillsAllowed: false`) — they read web-app, not studio. Class times sit on hairline rules; pass tiers sit in hairline-bordered rectangles; nothing rounds.
|
|
39
|
+
|
|
40
|
+
## Shadows
|
|
41
|
+
**Minimal.** Single utility: `.hairline-bottom` (1px bottom rule in `--border`). No drop shadows. No glows. The studio doesn't lift.
|
|
42
|
+
|
|
43
|
+
## Motion
|
|
44
|
+
Two keyframes: `breath-fade` (1400ms entrance, opacity + 16px translate) and `breath-pulse` (4000ms loop, opacity 0.85 → 1 → 0.85). The pulse cycle is deliberately a four-second inhale-exhale. No ken-burns, no marquee, no parallax — the page is still on purpose.
|
|
45
|
+
|
|
46
|
+
Easing `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored.
|
|
47
|
+
|
|
48
|
+
## Component patterns
|
|
49
|
+
- **Buttons:** lowercase text-link primary in sage, underline-on-hover. The single hero action may be a hairline-bordered rectangle with sage text — never filled. Terracotta is reserved for focus/ritual marks, never a button face.
|
|
50
|
+
- **Class schedule rows:** *no card at all*. Recital-program lines: time on the left in mono, class name in italic display, instructor in body, hairline-bottom between rows.
|
|
51
|
+
- **Instructor cards:** bordered top + bottom only, no fill, portrait above and bio below — never a tile with shadow.
|
|
52
|
+
- **Pass tiers:** hairline-bordered rectangles, three across, sage price in display, terms in body, lowercase CTA underneath. Never highlighted or "most popular" — the studio doesn't sell up.
|
|
53
|
+
- **Inputs:** border-bottom only, 1px `--ink-soft`. Mono uppercase label above (tracking 0.18em). Focus is a terracotta underline, never a box.
|
|
54
|
+
|
|
55
|
+
## Recommended rich media
|
|
56
|
+
Photography is the lead medium: instructor portraits in natural north-facing light, studios empty mid-afternoon, mat-edge close-ups, candle still-lifes. Color graded to warm cream-shadow, never high-key. Aspect ratios 4:5 portrait or 3:2 landscape. Never 16:9 cinematic. Never stock-photo "happy multicultural class clapping". No icons-on-pillow illustration. No 3D renders.
|
|
57
|
+
|
|
58
|
+
**AI tool recommendations:** Midjourney with *"natural studio light, Kinfolk magazine, Kodak Portra 400, soft cream tones, slight grain"*. Avoid bright-saturated wellness stock.
|
|
59
|
+
|
|
60
|
+
**Performance:** hero ≤120 KB AVIF. The studio site loads quickly because there is nothing heavy to load.
|
|
61
|
+
|
|
62
|
+
**Avoid:** rainbow chakra graphics, lotus icon decoration, namaste hands emoji, motivational quotes in script fonts, dark-mode toggle, parallax, video autoplay, glassmorphic anything.
|
|
63
|
+
|
|
64
|
+
## Component families
|
|
65
|
+
None at install time.
|
|
66
|
+
|
|
67
|
+
## Details
|
|
68
|
+
- **Selection:** `hsl(var(--terracotta) / 0.22)` — the only place terracotta touches body text.
|
|
69
|
+
- **Focus ring:** 1px solid terracotta — quiet, just visible.
|
|
70
|
+
- **Scrollbar:** thin.
|
|
71
|
+
|
|
72
|
+
## Exceptions
|
|
73
|
+
None yet.
|
|
74
|
+
|
|
75
|
+
## Revisions
|
|
76
|
+
- Initial direction, generated at install time.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
// yoga-studio — Alo / Y7 / Modo restraint. Cream paper, slim sans, single
|
|
4
|
+
// sage-or-terracotta accent, breath-paced whitespace. Matt unrolled, room
|
|
5
|
+
// quiet, instructor speaking softly. The opposite of a sports site.
|
|
6
|
+
export const yogaStudio: Direction = {
|
|
7
|
+
name: "yoga-studio" as Direction["name"],
|
|
8
|
+
ethos:
|
|
9
|
+
"Alo cream-paper restraint · Y7 candlelit warmth · Modo sage minimalism · " +
|
|
10
|
+
"CorePower studio whitespace · The Class breathwork hush",
|
|
11
|
+
references: [
|
|
12
|
+
{ brand: "Alo Yoga", trait: "cream paper, slim sans, almost-no-color storefront" },
|
|
13
|
+
{ brand: "Y7 Studio", trait: "candlelit terracotta accent, single-word section headers" },
|
|
14
|
+
{ brand: "Modo Yoga", trait: "sage-green ethical mark, breath-paced layout" },
|
|
15
|
+
{ brand: "CorePower Yoga", trait: "studio whitespace, oversized roman-numeral schedule" },
|
|
16
|
+
{ brand: "The Class by Taryn Toomey", trait: "ritual typography, low-contrast quiet luxury" },
|
|
17
|
+
],
|
|
18
|
+
feel:
|
|
19
|
+
"Cream paper, slim sans, one earth accent — sage or terracotta, never both. " +
|
|
20
|
+
"Whitespace is paced to a four-count inhale. The class list reads like a recital program, " +
|
|
21
|
+
"not a calendar app. Lower-case where possible. The page exhales.",
|
|
22
|
+
|
|
23
|
+
fonts: {
|
|
24
|
+
display: {
|
|
25
|
+
family: "Cormorant Garamond",
|
|
26
|
+
fallback: ["EB Garamond", "Iowan Old Style", "Times New Roman", "serif"],
|
|
27
|
+
from: "Alo/Class slender display serif — high-contrast, almost handwritten in italic, lowercase-friendly",
|
|
28
|
+
googleFont: "Cormorant+Garamond",
|
|
29
|
+
weights: [300, 400, 500],
|
|
30
|
+
},
|
|
31
|
+
body: {
|
|
32
|
+
family: "Inter",
|
|
33
|
+
fallback: ["system-ui", "-apple-system", "Helvetica Neue", "sans-serif"],
|
|
34
|
+
from: "Alo/Modo clean modern sans — neutral, never decorative under instructor names and class titles",
|
|
35
|
+
googleFont: "Inter",
|
|
36
|
+
weights: [300, 400, 500, 600],
|
|
37
|
+
},
|
|
38
|
+
mono: {
|
|
39
|
+
family: "JetBrains Mono",
|
|
40
|
+
fallback: ["ui-monospace", "SFMono-Regular", "Menlo", "monospace"],
|
|
41
|
+
from: "tabular time-of-day for schedule rows — recital-program restraint, never code-block heavy",
|
|
42
|
+
googleFont: "JetBrains+Mono",
|
|
43
|
+
weights: [400, 500],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
typography: {
|
|
48
|
+
headingTracking: "-0.01em", // serif tightens slightly at display scale
|
|
49
|
+
bodyTracking: "0.005em", // a hair of air — breathwork pacing in copy too
|
|
50
|
+
fontFeatureSettings: '"ss01", "tnum", "calt"',
|
|
51
|
+
h1ScaleClamp: "clamp(2.25rem, 5vw, 4rem)", // restrained — never JUMBOTRON, this is a studio not an arena
|
|
52
|
+
bodyBaseSize: "1.0625rem", // 17px — Alo-storefront comfortable read
|
|
53
|
+
bodyLineHeight: "1.7", // editorial pacing, not dashboard density
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
colors: {
|
|
57
|
+
background: { hsl: "38 30% 96%", from: "Alo cream paper — warm, off-white, never pure" },
|
|
58
|
+
foreground: { hsl: "30 14% 18%", from: "soft ink — bark brown, never pure black on cream" },
|
|
59
|
+
card: { hsl: "38 32% 98%", from: "elevated surface — one stop lighter than paper, hairline-defined" },
|
|
60
|
+
popover: { hsl: "38 34% 99%", from: "menu/popover — nearly white, sits cleanly above paper" },
|
|
61
|
+
primary: { hsl: "120 14% 38%", from: "Modo sage green — the single ethical mark, restrained" },
|
|
62
|
+
primaryForeground: { hsl: "38 30% 96%", from: "cream on sage — never high-contrast white" },
|
|
63
|
+
secondary: { hsl: "38 24% 92%", from: "deeper cream — secondary surface, recital-program tier" },
|
|
64
|
+
secondaryForeground: { hsl: "30 14% 18%", from: "ink on deeper cream" },
|
|
65
|
+
muted: { hsl: "38 22% 90%", from: "muted paper — sits between secondary and border, breath-shadow" },
|
|
66
|
+
mutedForeground: { hsl: "30 10% 46%", from: "instructor-name gray — warm, soft, conversational" },
|
|
67
|
+
accent: { hsl: "38 26% 88%", from: "hover paper — the lightest possible interaction surface" },
|
|
68
|
+
accentForeground: { hsl: "30 14% 18%", from: "ink on hover paper" },
|
|
69
|
+
border: { hsl: "30 14% 82%", from: "hairline rule — recital-program divider, never harsh" },
|
|
70
|
+
input: { hsl: "30 14% 82%", from: "same as border — single hairline language" },
|
|
71
|
+
ring: { hsl: "16 56% 48%", from: "Y7 terracotta — the secondary accent, used only as focus marker" },
|
|
72
|
+
destructive: { hsl: "8 56% 46%", from: "soft alert — class-canceled tone, never fire-engine red" },
|
|
73
|
+
destructiveForeground: { hsl: "38 30% 96%", from: "cream on alert" },
|
|
74
|
+
brand: {
|
|
75
|
+
sage: { hsl: "120 14% 38%", from: "Modo sage — primary ethical mark, also semantic primary" },
|
|
76
|
+
"sage-deep": { hsl: "118 16% 28%", from: "deeper sage — used only for hover on primary text-link" },
|
|
77
|
+
terracotta: { hsl: "16 56% 48%", from: "Y7 candle-glow terracotta — the warm accent, focus + ritual marks" },
|
|
78
|
+
cream: { hsl: "38 30% 96%", from: "Alo paper — the canvas, also background" },
|
|
79
|
+
ink: { hsl: "30 14% 18%", from: "bark — the body color, also foreground" },
|
|
80
|
+
"ink-soft": { hsl: "30 10% 46%", from: "instructor gray — secondary text" },
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
spacing: {
|
|
85
|
+
base: 4,
|
|
86
|
+
scale: [4, 6, 8, 12, 16, 20, 24, 32, 40, 48, 64, 96, 128], // breath-paced — finite, generous
|
|
87
|
+
containerMax: "max-w-5xl", // narrow — studio not arena, mat-width reading
|
|
88
|
+
containerPadding: "px-6 lg:px-12",
|
|
89
|
+
sectionPadding: {
|
|
90
|
+
hero: "pt-24 pb-16 lg:pt-36 lg:pb-24", // long inhale before the page starts
|
|
91
|
+
default: "py-20 lg:py-28",
|
|
92
|
+
tight: "py-12 lg:py-16",
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
radius: {
|
|
97
|
+
base: "0", // sharp — recital program, never web-app pillow
|
|
98
|
+
pillsAllowed: false, // pills read app/dashboard; studio is paper
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
shadows: {
|
|
102
|
+
style: "minimal",
|
|
103
|
+
utilities: {
|
|
104
|
+
"hairline-bottom":
|
|
105
|
+
"0 1px 0 0 hsl(var(--border))", // recital-program rule, single utility
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
motion: {
|
|
110
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
111
|
+
durations: {
|
|
112
|
+
reveal: 1400, // long inhale — slower than editorial on purpose
|
|
113
|
+
loop: 4000, // breath-pace loops, never quicker
|
|
114
|
+
ambient: 0, // no ken-burns, no marquee — the page is still
|
|
115
|
+
},
|
|
116
|
+
keyframes: {
|
|
117
|
+
"breath-fade": {
|
|
118
|
+
css:
|
|
119
|
+
"from { opacity: 0; transform: translateY(16px); }\n" +
|
|
120
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
121
|
+
defaultDuration: 1400,
|
|
122
|
+
iteration: "once",
|
|
123
|
+
purpose: "section entrance — slow, single breath in, no overshoot",
|
|
124
|
+
},
|
|
125
|
+
"breath-pulse": {
|
|
126
|
+
css:
|
|
127
|
+
"0%, 100% { opacity: 0.85; }\n" +
|
|
128
|
+
"50% { opacity: 1; }",
|
|
129
|
+
defaultDuration: 4000,
|
|
130
|
+
iteration: "infinite",
|
|
131
|
+
purpose: "live-class dot — four-second cycle, the canonical inhale-exhale tempo",
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
respectsReducedMotion: true,
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
density: "low",
|
|
138
|
+
|
|
139
|
+
patterns: {
|
|
140
|
+
button:
|
|
141
|
+
"Text-link primary by default — sage foreground, underline-on-hover, lowercase. " +
|
|
142
|
+
"The single hero action per page may render as a hairline-bordered rectangle with sage text, never filled. " +
|
|
143
|
+
"Terracotta is reserved for ritual marks (focus rings, breath dots) — never a button face.",
|
|
144
|
+
card:
|
|
145
|
+
"Sharp corners, hairline border (--border), bg-card. Padding p-8 lg:p-10. " +
|
|
146
|
+
"Class-schedule rows use no card at all — they are recital-program lines with hairline-bottom. " +
|
|
147
|
+
"Instructor cards are bordered top + bottom only, no fill, portrait above and bio below.",
|
|
148
|
+
input:
|
|
149
|
+
"Border-bottom only, 1px --ink-soft, bg transparent, no radius. " +
|
|
150
|
+
"Label above in mono uppercase tracking 0.18em — recital-program section header. " +
|
|
151
|
+
"Focus is a terracotta underline, never a box.",
|
|
152
|
+
cta:
|
|
153
|
+
"Lowercase text-link in sage, underline-on-hover. The hero may use a hairline-bordered rectangle. " +
|
|
154
|
+
"Never a filled button, never a gradient, never a pill.",
|
|
155
|
+
},
|
|
156
|
+
|
|
157
|
+
details: {
|
|
158
|
+
selectionBg: "hsl(var(--terracotta) / 0.22)",
|
|
159
|
+
selectionFg: "hsl(var(--foreground))",
|
|
160
|
+
focusRing: "1px solid hsl(var(--ring))", // 1px terracotta — quiet, just visible
|
|
161
|
+
scrollbarStyle: "thin",
|
|
162
|
+
},
|
|
163
|
+
};
|