@stylecrib/cli 0.3.1 → 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 +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 +1577 -463
- package/package.json +11 -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,185 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
export const marketplaceVintage: Direction = {
|
|
4
|
+
name: "marketplace-vintage",
|
|
5
|
+
ethos:
|
|
6
|
+
"Etsy warm paper · Depop saturated youth · Grailed sharp resale · Vestiaire dignified vintage · eBay redesigned restraint",
|
|
7
|
+
references: [
|
|
8
|
+
{ brand: "Etsy", trait: "warm orange + friendly geometric sans + hand-crafted feel" },
|
|
9
|
+
{ brand: "Depop", trait: "saturated youth palette + grid density + casual energy" },
|
|
10
|
+
{ brand: "Grailed", trait: "sharp black + Helvetica + men's-resale density" },
|
|
11
|
+
{ brand: "Vestiaire Collective", trait: "cream + serif + luxury-resale dignified" },
|
|
12
|
+
{ brand: "eBay (recent redesign)", trait: "warm white + restraint + tight grid" },
|
|
13
|
+
],
|
|
14
|
+
feel:
|
|
15
|
+
"Warm paper canvas you'd flip through at a flea market. Friendly secondary palette, a hand-feeling " +
|
|
16
|
+
"serif sub-accent on top of a confident geometric sans, and seller personality forward — every card " +
|
|
17
|
+
"carries a maker, a price, and a story. Decorative, but never corporate-marketplace.",
|
|
18
|
+
|
|
19
|
+
fonts: {
|
|
20
|
+
display: {
|
|
21
|
+
family: "Recoleta",
|
|
22
|
+
fallback: ["Fraunces", "DM Serif Display", "Georgia", "serif"],
|
|
23
|
+
from: "Vestiaire/Etsy hand-warm display serif — rounded humanist terminals; Fraunces is the Google-Font swap",
|
|
24
|
+
googleFont: "Fraunces",
|
|
25
|
+
weights: [400, 600, 700],
|
|
26
|
+
},
|
|
27
|
+
body: {
|
|
28
|
+
family: "DM Sans",
|
|
29
|
+
fallback: ["Inter", "system-ui", "-apple-system", "Segoe UI", "sans-serif"],
|
|
30
|
+
from: "Etsy/Depop friendly geometric sans — open apertures, confident at card titles",
|
|
31
|
+
googleFont: "DM+Sans",
|
|
32
|
+
weights: [400, 500, 700],
|
|
33
|
+
},
|
|
34
|
+
mono: {
|
|
35
|
+
family: "DM Mono",
|
|
36
|
+
fallback: ["IBM Plex Mono", "ui-monospace", "Courier New", "monospace"],
|
|
37
|
+
from: "price tag / listing meta — receipt-paper feel for sku, price, condition",
|
|
38
|
+
googleFont: "DM+Mono",
|
|
39
|
+
weights: [400, 500],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
typography: {
|
|
44
|
+
headingTracking: "-0.01em", // Fraunces sits near zero — slight tighten reads confident
|
|
45
|
+
bodyTracking: "0",
|
|
46
|
+
fontFeatureSettings: '"liga", "ss01", "tnum"',
|
|
47
|
+
h1ScaleClamp: "clamp(2.25rem, 5.5vw, 4rem)",
|
|
48
|
+
bodyBaseSize: "1rem",
|
|
49
|
+
bodyLineHeight: "1.55",
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
colors: {
|
|
53
|
+
background: { hsl: "32 36% 95%", from: "Etsy warm paper — the flea-market canvas, never pure white" },
|
|
54
|
+
foreground: { hsl: "24 22% 14%", from: "Grailed near-black with a warm tilt — ink, not pure black" },
|
|
55
|
+
card: { hsl: "32 28% 98%", from: "lifted warm paper — listing card, fractionally brighter than canvas" },
|
|
56
|
+
popover: { hsl: "32 28% 98%", from: "same as card — popover/menu surface" },
|
|
57
|
+
primary: { hsl: "16 86% 52%", from: "Etsy warm orange — the canonical action color, friendly and confident" },
|
|
58
|
+
primaryForeground: { hsl: "32 36% 97%", from: "warm paper on orange" },
|
|
59
|
+
secondary: { hsl: "32 24% 90%", from: "deeper warm paper — secondary panels, seller cards" },
|
|
60
|
+
secondaryForeground: { hsl: "24 22% 14%", from: "warm ink on deeper paper" },
|
|
61
|
+
muted: { hsl: "32 20% 88%", from: "muted paper — listing meta strips, condition pills" },
|
|
62
|
+
mutedForeground: { hsl: "24 14% 38%", from: "warm secondary text — readable on paper" },
|
|
63
|
+
accent: { hsl: "32 26% 92%", from: "hover paper — one tier under secondary" },
|
|
64
|
+
accentForeground: { hsl: "24 22% 14%", from: "warm ink on accent paper" },
|
|
65
|
+
border: { hsl: "30 18% 80%", from: "warm hairline — visible on paper without going corporate" },
|
|
66
|
+
input: { hsl: "30 18% 78%", from: "input border — slightly stronger than card border" },
|
|
67
|
+
ring: { hsl: "16 86% 52%", from: "= primary; orange ring for focus" },
|
|
68
|
+
destructive: { hsl: "356 72% 46%", from: "Depop saturated red — sold-out / removed listing tone" },
|
|
69
|
+
destructiveForeground: { hsl: "32 36% 97%", from: "warm paper on red" },
|
|
70
|
+
brand: {
|
|
71
|
+
"paper-warm": { hsl: "32 36% 95%", from: "= background; the flea-market canvas" },
|
|
72
|
+
"paper-deep": { hsl: "32 24% 90%", from: "= secondary; the deeper paper for seller panels" },
|
|
73
|
+
"orange-etsy": { hsl: "16 86% 52%", from: "= primary; Etsy warm orange, the action color" },
|
|
74
|
+
"plum-depop": { hsl: "320 52% 42%", from: "Depop deep plum — secondary brand accent, story tags" },
|
|
75
|
+
"olive-vintage": { hsl: "78 28% 38%", from: "vintage olive — verified-seller / Vestiaire-dignified tag" },
|
|
76
|
+
"mustard-tag": { hsl: "42 88% 56%", from: "price-tag mustard — On Sale / Make Offer chip color" },
|
|
77
|
+
"ink-grailed": { hsl: "24 22% 14%", from: "= foreground; Grailed warm ink" },
|
|
78
|
+
"cream-vest": { hsl: "38 30% 96%", from: "Vestiaire cream — alt panel surface for the luxury-resale tier" },
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
spacing: {
|
|
83
|
+
base: 4,
|
|
84
|
+
scale: [4, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 64, 80],
|
|
85
|
+
containerMax: "max-w-7xl",
|
|
86
|
+
containerPadding: "px-4 lg:px-8",
|
|
87
|
+
sectionPadding: {
|
|
88
|
+
hero: "pt-16 pb-12 lg:pt-24 lg:pb-16",
|
|
89
|
+
default: "py-12 lg:py-20",
|
|
90
|
+
tight: "py-8 lg:py-12",
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
radius: {
|
|
95
|
+
base: "0.625rem", // 10px — softer than utility, never balloon
|
|
96
|
+
pillsAllowed: true, // condition pills, category chips, story tags
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
shadows: {
|
|
100
|
+
style: "soft",
|
|
101
|
+
utilities: {
|
|
102
|
+
"shadow-card":
|
|
103
|
+
"0 1px 2px hsl(24 22% 14% / 0.05), 0 4px 12px hsl(24 22% 14% / 0.07)",
|
|
104
|
+
"shadow-card-hover":
|
|
105
|
+
"0 2px 4px hsl(24 22% 14% / 0.06), 0 14px 28px hsl(24 22% 14% / 0.12)",
|
|
106
|
+
"shadow-pricetag":
|
|
107
|
+
"1px 1px 0 hsl(var(--ink-grailed) / 0.9)",
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
motion: {
|
|
112
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
113
|
+
durations: {
|
|
114
|
+
reveal: 320, // friendly snap — marketplace pace, not catalog
|
|
115
|
+
loop: 1800,
|
|
116
|
+
ambient: 20000,
|
|
117
|
+
},
|
|
118
|
+
keyframes: {
|
|
119
|
+
"fade-rise": {
|
|
120
|
+
css:
|
|
121
|
+
"from { opacity: 0; transform: translateY(10px); }\n" +
|
|
122
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
123
|
+
defaultDuration: 320,
|
|
124
|
+
iteration: "once",
|
|
125
|
+
purpose: "listing entrance — quick, casual, not ceremonial",
|
|
126
|
+
},
|
|
127
|
+
"tag-wiggle": {
|
|
128
|
+
css:
|
|
129
|
+
"0%, 100% { transform: rotate(-1.5deg); }\n" +
|
|
130
|
+
"50% { transform: rotate(1.5deg); }",
|
|
131
|
+
defaultDuration: 400,
|
|
132
|
+
iteration: "once",
|
|
133
|
+
purpose: "On Sale / New / Maker tag hover — hand-pinned label energy",
|
|
134
|
+
},
|
|
135
|
+
"heart-pop": {
|
|
136
|
+
css:
|
|
137
|
+
"0% { transform: scale(1); }\n" +
|
|
138
|
+
"40% { transform: scale(1.35); }\n" +
|
|
139
|
+
"100% { transform: scale(1); }",
|
|
140
|
+
defaultDuration: 280,
|
|
141
|
+
iteration: "once",
|
|
142
|
+
purpose: "favorite/heart action — confirms a save, vintage-feeling pop",
|
|
143
|
+
},
|
|
144
|
+
"marquee-slow": {
|
|
145
|
+
css:
|
|
146
|
+
"from { transform: translateX(0); }\n" +
|
|
147
|
+
"to { transform: translateX(-50%); }",
|
|
148
|
+
defaultDuration: 28000,
|
|
149
|
+
iteration: "infinite",
|
|
150
|
+
purpose: "seller-strip and category-strip horizontal scroll — flea-market frieze",
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
respectsReducedMotion: true,
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
density: "medium",
|
|
157
|
+
|
|
158
|
+
patterns: {
|
|
159
|
+
button:
|
|
160
|
+
"Solid-fill primary in orange-etsy with white text, 0.625rem radius, shadow-card. " +
|
|
161
|
+
"Secondary is ghost (border, foreground text). Tertiary is text-link in primary. " +
|
|
162
|
+
"Pill is reserved for tags and chips — never for primary CTAs. " +
|
|
163
|
+
"Make Offer / On Sale buttons may use mustard-tag with ink text for a price-tag feel.",
|
|
164
|
+
card:
|
|
165
|
+
"Listing card: rounded radius, bg-card, shadow-card, no border. " +
|
|
166
|
+
"Photo-first (1:1 square — the marketplace standard). Below: title in display serif (Fraunces 600), " +
|
|
167
|
+
"price in mono, seller handle in body 500 with avatar. Hover applies card-lift via shadow-card-hover. " +
|
|
168
|
+
"Story tags (Vintage 1970s, Handmade) sit as pills overlaying the photo top-left.",
|
|
169
|
+
input:
|
|
170
|
+
"Full rounded box with 1px --input border, bg-card. " +
|
|
171
|
+
"Search bar carries a leading magnifier icon and a trailing 'in shops/listings' segmented control. " +
|
|
172
|
+
"Focus = 2px primary ring at 40%.",
|
|
173
|
+
cta:
|
|
174
|
+
"Filled primary orange button for Add to Cart / Buy It Now. " +
|
|
175
|
+
"Heart (favorite) is icon-only ghost on the card; Follow Seller is pill ghost. " +
|
|
176
|
+
"Mustard On Sale chip is a status pill — never a CTA.",
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
details: {
|
|
180
|
+
selectionBg: "hsl(var(--primary) / 0.22)",
|
|
181
|
+
selectionFg: "hsl(var(--foreground))",
|
|
182
|
+
focusRing: "2px solid hsl(var(--ring) / 0.55)",
|
|
183
|
+
scrollbarStyle: "thin",
|
|
184
|
+
},
|
|
185
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Design Direction — Maximalist
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Wes Anderson symmetry · Memphis-design pattern play · Esquire 1960s editorial borders · Push Pin Studios color · Paula Scher type-as-art
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Many colors, layered patterns, playful type, decorative borders. The opposite of minimal — every surface carries decoration earned by composition. Symmetric and intentional like Wes Anderson, never chaotic like 90s rave flyers. Backgrounds are a paint surface, not a void.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Wes Anderson (Grand Budapest, French Dispatch)** → symmetric composition, candy palette, color-graded photography.
|
|
11
|
+
- **Memphis Design (Ettore Sottsass)** → pattern play, color collisions, laminate prints.
|
|
12
|
+
- **Esquire 1960s (George Lois era)** → editorial borders, bordered-block layouts, type-and-image as one object.
|
|
13
|
+
- **Push Pin Studios (Glaser/Chwast)** → flat illustration, saturated flat color, decorative ornament.
|
|
14
|
+
- **Paula Scher** → type-as-art, oversized typographic posters, type that fills the frame.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
HSL triples in `src/index.css`. Every token's `from:` comment names its brand origin. The surface stack is **cream** (background) → **lighter cream** (card) → **deeper cream** (muted). Depth comes from **thick 3px borders** and from **per-component background overrides** — components are encouraged to set their own bg using any of the brand tokens. This direction treats the background as a paint surface.
|
|
18
|
+
|
|
19
|
+
Brand tokens (named, never numbered): `--coral` (= primary), `--mustard`, `--teal`, `--magenta`, `--mint`, `--chartreuse`, `--cream` (= background), `--ink` (= foreground). At least five named accent colors is the *minimum* — this direction is built around having many.
|
|
20
|
+
|
|
21
|
+
Primary is **bright coral** (`12 88% 60%`) — the Memphis pink-red, the principal action color. Foreground is **deep teal-black** (`200 40% 18%`), never pure black; the slight hue gives the palette room to sit against it.
|
|
22
|
+
|
|
23
|
+
## Typography
|
|
24
|
+
- **Display:** Playfair Display (Wes Anderson title-card feel — high-contrast serif, theatrical). Fallback Bodoni Moda. Weights 400/700/900. h1–h4.
|
|
25
|
+
- **Body:** Crimson Pro (warm serif — pairs with Playfair for full serif maximalism). 17px, line-height 1.55.
|
|
26
|
+
- **Mono:** Space Mono (Push Pin energy — geometric mono with playful proportions). Used for labels, captions, micro-type.
|
|
27
|
+
|
|
28
|
+
H1 uses `clamp(3rem, 8vw, 6rem)` — Paula Scher posters: large, unafraid. Tracking `-0.005em` on headings (Playfair sits well near zero — too tight crushes the contrast). Font features: `"liga"`, `"dlig"`, `"ss01"` — discretionary ligatures, type-as-art.
|
|
29
|
+
|
|
30
|
+
## Spacing
|
|
31
|
+
- **Container:** `max-w-5xl px-6 lg:px-10` — wide enough for symmetric multi-column compositions.
|
|
32
|
+
- **Section padding tiers:**
|
|
33
|
+
- Hero: `pt-24 pb-16 lg:pt-32 lg:pb-24`
|
|
34
|
+
- Default: `py-20 lg:py-32`
|
|
35
|
+
- Tight: `py-12 lg:py-16`
|
|
36
|
+
- **Allowed scale values:** 4 6 8 12 16 20 24 32 48 64. Medium density — decoration takes room, but the scale stops before editorial generosity.
|
|
37
|
+
|
|
38
|
+
## Color
|
|
39
|
+
No hex anywhere. Color is the medium. Components are *encouraged* to override their background with any brand token — a card may be mustard, an input panel may be mint, a sidebar may be magenta. The cream background is a canvas, not a default. Pure white and pure black are forbidden — `--cream` and `--ink` replace them.
|
|
40
|
+
|
|
41
|
+
## Radius
|
|
42
|
+
Binary: `--radius: 0` (sharp) for default editorial blocks, **OR** `999px` (pill) for tags, toggles, and status. **No in-between** — the language does not use `0.25rem` or `0.5rem` corners. `pillsAllowed: true`.
|
|
43
|
+
|
|
44
|
+
## Shadows
|
|
45
|
+
**None.** Color does the work of separation. Single utility: `.border-thick` (`inset 0 0 0 3px hsl(var(--border))`) — the Esquire-editorial bordered-block treatment. Drop shadows would muddle the flat-color language; borders are the depth.
|
|
46
|
+
|
|
47
|
+
## Motion
|
|
48
|
+
Three keyframes, all playful:
|
|
49
|
+
- `wiggle` — rotate ±2deg, 300ms once. Hover nudge for buttons, tags, decorative ornament.
|
|
50
|
+
- `pop` — scale 0.95 → 1.05 → 1, 200ms once. Entrance and click feedback — the primary reveal in this language.
|
|
51
|
+
- `rotate-slow` — continuous 60s rotation. **Decorative ornament only** — never on functional UI.
|
|
52
|
+
|
|
53
|
+
Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` honored — wrapped in a media query in every motion utility.
|
|
54
|
+
|
|
55
|
+
## Component patterns
|
|
56
|
+
- **Buttons:** filled, brightly colored (any brand token), often with a thick contrasting border (Esquire editorial). Pills allowed for tags and toggles. **Primary CTA = bold coral fill with a chartreuse 3px border.** Sharp corners by default; pill only for tag/toggle role. No ghost-only buttons — this language commits to fill.
|
|
57
|
+
- **Cards:** thick 3px border in `--ink`. Background is a brand token, not card-white by default — cards are colored panels. Internal padding generous (`p-8 lg:p-12`). Title in Playfair Display, often oversized.
|
|
58
|
+
- **Inputs:** full box with 3px `--ink` border. `bg-card`. Sharp corners. Label sits above in Space Mono. Focus shifts border color to `--ring` (coral). **No border-bottom-only treatment** — that's editorial language.
|
|
59
|
+
- **CTAs:** filled rect button, bold color + thick contrasting border. Pills reserved for secondary tags. **Never a plain text link** — every CTA carries decoration.
|
|
60
|
+
|
|
61
|
+
## Component families
|
|
62
|
+
None at install time. Patterns to expect: bordered-block cards, color-panel sections, oversized display-serif heroes, mono-label captions, pill tag rows. The Director appends conventions here as they're established.
|
|
63
|
+
|
|
64
|
+
## Details
|
|
65
|
+
- **Selection:** `hsl(var(--brand-chartreuse) / 0.5)` background, foreground text. The high-vibration accent doubles as the selection color.
|
|
66
|
+
- **Focus ring:** `3px solid hsl(var(--ring))` — thick to match the border language. A 1px ring would disappear against the decoration.
|
|
67
|
+
- **Scrollbar:** auto. Native scrollbars in cream-system browsers carry their own decoration; let them.
|
|
68
|
+
|
|
69
|
+
## Recommended rich media
|
|
70
|
+
|
|
71
|
+
**Cover imagery.** Bold flat illustrations, patterned backgrounds, decorative borders, mixed photo+illustration collages, color-blocked photography (Wes Anderson palette grading).
|
|
72
|
+
|
|
73
|
+
**AI tool recommendations.**
|
|
74
|
+
- **Recraft** for vector illustrations with playful flat style — best match for the Push Pin lineage.
|
|
75
|
+
- **Midjourney/Flux** with the prompt fragment `"Wes Anderson color palette, symmetrical composition, Kodak Portra 400"` for photography.
|
|
76
|
+
- **Stable Diffusion + a custom Memphis-design LoRA** for pattern generation.
|
|
77
|
+
- **patternpad.com** or comparable generative tools for repeating backgrounds (use as `bg-image` on section panels).
|
|
78
|
+
|
|
79
|
+
**Aspect ratios.** 1:1 square (Instagram-friendly, fits the maximalist editorial layout) or 3:4 portrait (movie-poster feel — Wes Anderson title-card framing). 16:9 landscape is allowed for hero-strip use but is not the default.
|
|
80
|
+
|
|
81
|
+
**Color.** Lean into the full brand palette — **every image uses at least 3 of the named tokens** (coral, mustard, teal, magenta, mint, chartreuse). A single-color image reads as a different direction.
|
|
82
|
+
|
|
83
|
+
**What to AVOID.**
|
|
84
|
+
- Muted desaturated photography
|
|
85
|
+
- Single-color hero images
|
|
86
|
+
- Dark backgrounds (`--background` is cream; dark hero panels break the paint-surface premise)
|
|
87
|
+
- Anything that reads "premium minimal" — that is the editorial direction, not this one
|
|
88
|
+
- Soft drop shadows on imagery (the language is flat color + thick border)
|
|
89
|
+
|
|
90
|
+
**Accessibility.** High decoration count means more `aria-hidden` on purely ornamental elements (rotating sun, pattern fills, border flourishes). Alt-text must distinguish content imagery from ornament — if an image is decoration, mark it; if it carries meaning, describe it. Color contrast is preserved by foreground `--ink` against cream and against every brand token; verify any custom color-on-color pairing meets WCAG AA before shipping.
|
|
91
|
+
|
|
92
|
+
## Exceptions
|
|
93
|
+
None yet. When an intentional one-of-one violation lands, add it here with the reason.
|
|
94
|
+
|
|
95
|
+
## Revisions
|
|
96
|
+
- Initial direction, generated at install time.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
export const maximalist: Direction = {
|
|
4
|
+
name: "maximalist",
|
|
5
|
+
ethos:
|
|
6
|
+
"Wes Anderson symmetry · Memphis-design pattern play · Esquire 1960s editorial borders · Push Pin Studios color · Paula Scher type-as-art",
|
|
7
|
+
references: [
|
|
8
|
+
{ brand: "Wes Anderson (Grand Budapest, French Dispatch)", trait: "symmetric composition, candy palette" },
|
|
9
|
+
{ brand: "Memphis Design (Ettore Sottsass)", trait: "pattern play, color collisions" },
|
|
10
|
+
{ brand: "Esquire 1960s (George Lois era)", trait: "editorial borders, bordered-block layout" },
|
|
11
|
+
{ brand: "Push Pin Studios (Glaser/Chwast)", trait: "flat illustration color" },
|
|
12
|
+
{ brand: "Paula Scher", trait: "type-as-art, typographic posters" },
|
|
13
|
+
],
|
|
14
|
+
feel:
|
|
15
|
+
"Many colors, layered patterns, playful type, decorative borders. The opposite of minimal — " +
|
|
16
|
+
"every surface carries decoration earned by composition. Symmetric and intentional like Wes Anderson, " +
|
|
17
|
+
"never chaotic like 90s rave flyers. Backgrounds are a paint surface, not a void.",
|
|
18
|
+
|
|
19
|
+
fonts: {
|
|
20
|
+
display: {
|
|
21
|
+
family: "Playfair Display",
|
|
22
|
+
fallback: ["Bodoni Moda", "Didot", "Bodoni 72", "Georgia", "serif"],
|
|
23
|
+
from: "Wes Anderson title-card feel — high-contrast serif, theatrical",
|
|
24
|
+
googleFont: "Playfair+Display",
|
|
25
|
+
weights: [400, 700, 900],
|
|
26
|
+
},
|
|
27
|
+
body: {
|
|
28
|
+
family: "Crimson Pro",
|
|
29
|
+
fallback: ["Iowan Old Style", "Apple Garamond", "Georgia", "serif"],
|
|
30
|
+
from: "warm serif body — pairs with Playfair for full serif maximalism",
|
|
31
|
+
googleFont: "Crimson+Pro",
|
|
32
|
+
weights: [400, 600],
|
|
33
|
+
},
|
|
34
|
+
mono: {
|
|
35
|
+
family: "Space Mono",
|
|
36
|
+
fallback: ["Courier Prime", "ui-monospace", "Courier New", "monospace"],
|
|
37
|
+
from: "Push Pin energy — geometric mono with playful proportions",
|
|
38
|
+
googleFont: "Space+Mono",
|
|
39
|
+
weights: [400, 700],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
typography: {
|
|
44
|
+
headingTracking: "-0.005em", // Playfair sits well near zero — too tight crushes the contrast
|
|
45
|
+
bodyTracking: "0",
|
|
46
|
+
fontFeatureSettings: '"liga", "dlig", "ss01"', // discretionary ligatures — type-as-art
|
|
47
|
+
h1ScaleClamp: "clamp(3rem, 8vw, 6rem)", // Paula Scher posters: large, unafraid
|
|
48
|
+
bodyBaseSize: "1.0625rem",
|
|
49
|
+
bodyLineHeight: "1.55",
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
colors: {
|
|
53
|
+
background: { hsl: "40 30% 92%", from: "cream — Wes Anderson Grand Budapest interior; treat as paint surface" },
|
|
54
|
+
foreground: { hsl: "200 40% 18%", from: "deep teal-black — not pure black; gives palette room to sit against it" },
|
|
55
|
+
card: { hsl: "40 30% 96%", from: "lighter cream — card sits on the paint surface" },
|
|
56
|
+
popover: { hsl: "40 30% 96%", from: "same as card; depth from thick borders, not fill" },
|
|
57
|
+
primary: { hsl: "12 88% 60%", from: "Memphis pink-red — bright coral, the principal action color" },
|
|
58
|
+
primaryForeground: { hsl: "40 30% 96%", from: "cream on coral" },
|
|
59
|
+
secondary: { hsl: "44 92% 55%", from: "= brand.mustard — Wes Anderson costume mustard, secondary action" },
|
|
60
|
+
secondaryForeground: { hsl: "200 40% 18%", from: "teal-black on mustard" },
|
|
61
|
+
muted: { hsl: "40 20% 85%", from: "deeper cream — backgrounds for quiet panels inside loud pages" },
|
|
62
|
+
mutedForeground: { hsl: "200 30% 32%", from: "teal-ink, secondary text — readable against muted cream" },
|
|
63
|
+
accent: { hsl: "180 55% 42%", from: "= brand.teal — Push Pin teal, hover and selection accent" },
|
|
64
|
+
accentForeground: { hsl: "40 30% 96%", from: "cream on teal" },
|
|
65
|
+
border: { hsl: "200 40% 18%", from: "Esquire editorial border — same as foreground; thick and intentional" },
|
|
66
|
+
input: { hsl: "200 40% 18%", from: "same as border — inputs wear the editorial border treatment" },
|
|
67
|
+
ring: { hsl: "12 88% 60%", from: "primary coral, focus only" },
|
|
68
|
+
destructive: { hsl: "350 80% 45%", from: "deeper magenta-red — distinct from coral primary" },
|
|
69
|
+
destructiveForeground: { hsl: "40 30% 96%", from: "cream on alert" },
|
|
70
|
+
brand: {
|
|
71
|
+
coral: { hsl: "12 88% 60%", from: "= primary; Memphis pink-red, also semantic brand-mark" },
|
|
72
|
+
mustard: { hsl: "44 92% 55%", from: "Wes Anderson costume mustard — Margot's coat, Zissou submarine yellow" },
|
|
73
|
+
teal: { hsl: "180 55% 42%", from: "Push Pin teal — Glaser/Chwast flat-color illustration palette" },
|
|
74
|
+
magenta: { hsl: "320 75% 55%", from: "Memphis magenta — Sottsass laminate prints" },
|
|
75
|
+
mint: { hsl: "160 50% 65%", from: "Grand Budapest pastel mint — hotel facade trim" },
|
|
76
|
+
chartreuse: { hsl: "75 70% 55%", from: "Memphis chartreuse — high-vibration accent against coral" },
|
|
77
|
+
cream: { hsl: "40 30% 92%", from: "= background; the paint surface itself, also a token" },
|
|
78
|
+
ink: { hsl: "200 40% 18%", from: "= foreground; teal-black, also semantic for editorial borders" },
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
spacing: {
|
|
83
|
+
base: 4,
|
|
84
|
+
scale: [4, 6, 8, 12, 16, 20, 24, 32, 48, 64], // medium — decoration takes room
|
|
85
|
+
containerMax: "max-w-5xl", // wide enough for symmetric multi-column compositions
|
|
86
|
+
containerPadding: "px-6 lg:px-10",
|
|
87
|
+
sectionPadding: {
|
|
88
|
+
hero: "pt-24 pb-16 lg:pt-32 lg:pb-24",
|
|
89
|
+
default: "py-20 lg:py-32",
|
|
90
|
+
tight: "py-12 lg:py-16",
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
radius: {
|
|
95
|
+
base: "0", // binary: sharp default for editorial blocks
|
|
96
|
+
pillsAllowed: true, // 999px pills for tags, toggles, status — no in-between
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
shadows: {
|
|
100
|
+
style: "none", // color does the work of separation
|
|
101
|
+
utilities: {
|
|
102
|
+
"border-thick":
|
|
103
|
+
"inset 0 0 0 3px hsl(var(--border))", // Esquire editorial bordered-block treatment
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
motion: {
|
|
108
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
109
|
+
durations: {
|
|
110
|
+
reveal: 200, // pop — playful, immediate
|
|
111
|
+
loop: 300, // wiggle cycle
|
|
112
|
+
ambient: 60000, // rotate-slow — decorative-only ambient
|
|
113
|
+
},
|
|
114
|
+
keyframes: {
|
|
115
|
+
"wiggle": {
|
|
116
|
+
css:
|
|
117
|
+
"0%, 100% { transform: rotate(-2deg); }\n" +
|
|
118
|
+
"50% { transform: rotate(2deg); }",
|
|
119
|
+
defaultDuration: 300,
|
|
120
|
+
iteration: "once",
|
|
121
|
+
purpose: "playful nudge on hover — buttons, tags, decorative ornament",
|
|
122
|
+
},
|
|
123
|
+
"pop": {
|
|
124
|
+
css:
|
|
125
|
+
"0% { transform: scale(0.95); }\n" +
|
|
126
|
+
"50% { transform: scale(1.05); }\n" +
|
|
127
|
+
"100% { transform: scale(1); }",
|
|
128
|
+
defaultDuration: 200,
|
|
129
|
+
iteration: "once",
|
|
130
|
+
purpose: "entrance and click feedback — the primary reveal in this language",
|
|
131
|
+
},
|
|
132
|
+
"rotate-slow": {
|
|
133
|
+
css:
|
|
134
|
+
"from { transform: rotate(0deg); }\n" +
|
|
135
|
+
"to { transform: rotate(360deg); }",
|
|
136
|
+
defaultDuration: 60000,
|
|
137
|
+
iteration: "infinite",
|
|
138
|
+
purpose: "continuous rotation for decorative ornament only — never on functional UI",
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
respectsReducedMotion: true,
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
density: "medium",
|
|
145
|
+
|
|
146
|
+
patterns: {
|
|
147
|
+
button:
|
|
148
|
+
"Filled, brightly colored (any brand token), often with a thick contrasting border (Esquire editorial). " +
|
|
149
|
+
"Pills allowed for tags and toggles. Primary CTA is a bold coral fill with a chartreuse 3px border. " +
|
|
150
|
+
"Sharp corners by default; pill only for tag/toggle role. No ghost-only buttons — this language commits to fill.",
|
|
151
|
+
card:
|
|
152
|
+
"Thick 3px border in --ink (foreground). Background is a brand token, not card-white by default — " +
|
|
153
|
+
"cards are colored panels. Internal padding generous (p-8 lg:p-12). Title in Playfair Display, often oversized.",
|
|
154
|
+
input:
|
|
155
|
+
"Full box with 3px --ink border. bg-card. Sharp corners. Label sits above in mono. " +
|
|
156
|
+
"Focus shifts border color to --ring (coral). No border-bottom-only treatment — that's editorial language.",
|
|
157
|
+
cta:
|
|
158
|
+
"Filled rect button, bold color + thick contrasting border. Pills reserved for secondary tags. " +
|
|
159
|
+
"Never a plain text link — every CTA carries decoration.",
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
details: {
|
|
163
|
+
selectionBg: "hsl(var(--brand-chartreuse) / 0.5)",
|
|
164
|
+
selectionFg: "hsl(var(--foreground))",
|
|
165
|
+
focusRing: "3px solid hsl(var(--ring))", // thick — matches the border language
|
|
166
|
+
scrollbarStyle: "auto",
|
|
167
|
+
},
|
|
168
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Design Direction — Mid-Century
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Eames warmth · Saul Bass geometric play · Knoll restraint · Aalto natural · Pushpin Studios color
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Warm cream surfaces, geometric typography, a restrained palette built around a single bold accent. Not bright, not minimal — composed. Reads like a 1962 design magazine spread, not a Memphis-style maximalist throwback. Every surface earns its place in the composition; the rust orange is the only thing that raises its voice.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Eames** → warmth. Plywood, fiberglass, upholstery linen — the warm cream ground.
|
|
11
|
+
- **Saul Bass** → geometric play. Vertigo, Anatomy of a Murder, The Man with the Golden Arm — cut-paper flat color, the source of the rust-orange primary.
|
|
12
|
+
- **Knoll** → restraint. The mid-century catalog discipline — show the object, hold the page.
|
|
13
|
+
- **Alvar Aalto** → natural. Wood-and-glass interiors — the source of the teak brown.
|
|
14
|
+
- **Push Pin Studios (Milton Glaser era)** → color. The mustard yellow and the willingness to use color as composition, not decoration.
|
|
15
|
+
- **Mad Men set design** → 1962 composed period detail. The reference point for "is this too loud" — if it would look out of place in a Sterling Cooper office, it's out.
|
|
16
|
+
|
|
17
|
+
## Tokens
|
|
18
|
+
HSL triples in `src/index.css`. Every `from:` comment names its brand origin. Surface stack is **warm cream linen** (background) → **lifted cream** (card) → **warm-cream-deeper** (secondary/muted/accent). Depth comes primarily from hairline borders, with a single very soft `.shadow-eames` utility for lifted cards.
|
|
19
|
+
|
|
20
|
+
Brand tokens: `--cream`, `--ink`, `--rust`, `--avocado`, `--mustard`, `--teak`. The accent palette (avocado, mustard, teak) supports the rust primary — they are for category coding, charts, and illustrated accents, not for body UI. Rust is the only color allowed to carry an action.
|
|
21
|
+
|
|
22
|
+
## Typography
|
|
23
|
+
- **Display:** Futura (Bauhaus origin, geometric mid-century canonical). h1–h4. Falls back to DM Sans where Futura is not licensed locally. Tracking `0` — Futura is already geometric, tightening it kills the personality.
|
|
24
|
+
- **Body:** DM Sans (geometric humanist). Body base **16px** with **line-height 1.6** — composed, not magazine-oversized, not dense-dashboard.
|
|
25
|
+
- **Mono:** IBM Plex Mono. Modernist geometric mono — feels period-correct. Used for captions, datelines, metric labels.
|
|
26
|
+
|
|
27
|
+
H1 uses `clamp(2.25rem, 5vw, 4rem)`. Font features: `"ss01", "tnum"`.
|
|
28
|
+
|
|
29
|
+
## Spacing
|
|
30
|
+
- **Container:** `max-w-5xl px-6 lg:px-10` — composed column, wider than editorial prose, narrower than utility-wide.
|
|
31
|
+
- **Section padding tiers:**
|
|
32
|
+
- Hero: `pt-24 pb-16 lg:pt-32 lg:pb-24`
|
|
33
|
+
- Default: `py-16 lg:py-24`
|
|
34
|
+
- Tight: `py-12 lg:py-16`
|
|
35
|
+
- **Allowed scale values:** 4 6 8 12 16 20 24 32 48 64. Medium-low density — breathing but composed.
|
|
36
|
+
|
|
37
|
+
## Color
|
|
38
|
+
No hex anywhere in component files. All color via tokens. Pure white and pure black are forbidden — `--cream` and `--ink` replace them. The ink carries a slight brown bias (`25 8% 15%`) to read as printed ink, not as web black.
|
|
39
|
+
|
|
40
|
+
Rust is the **only** loud color. Avocado, mustard, and teak are used for category coding, illustration, and chart fills — never for CTAs, never for status. Status colors derive from the destructive token plus muted variants of the brand palette.
|
|
41
|
+
|
|
42
|
+
## Radius
|
|
43
|
+
`--radius: 0.25rem` (4px). **Subtle — not pillow-soft, not razor-sharp.** Mid-century is composed: corners are softened just enough to read as crafted, not enough to read as soft-modern. Pills are disallowed (`pillsAllowed: false`) — status-pill shapes read web-app, not catalog.
|
|
44
|
+
|
|
45
|
+
## Shadows
|
|
46
|
+
**Minimal.** Two utilities:
|
|
47
|
+
- `.hairline` (`0 1px 0 0 var(--border)`) — catalog divider.
|
|
48
|
+
- `.shadow-eames` (`0 1px 2px 0 hsl(25 20% 20% / 0.08)`) — very soft 1px offset, low blur, warm shadow tint. Card lift only; never on buttons or inputs.
|
|
49
|
+
|
|
50
|
+
No glows. No glassmorphism. No layered drop-shadow stacks.
|
|
51
|
+
|
|
52
|
+
## Motion
|
|
53
|
+
Two keyframes, both slow:
|
|
54
|
+
- `fade-rise` (~900ms) — opacity + 16px translate, the only entrance. No bounce.
|
|
55
|
+
- `ken-burns` (~12s infinite) — slow zoom on hero photographs. Eames catalog stillness in motion.
|
|
56
|
+
|
|
57
|
+
No marquee, no parallax, no bouncing. Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` honored — both keyframes are wrapped in the media query.
|
|
58
|
+
|
|
59
|
+
## Component patterns
|
|
60
|
+
- **Buttons:** filled rect with `0.25rem` radius. **Primary** = rust orange bg + cream text. **Secondary** = ghost (transparent bg, ink border + ink text, hover `bg-accent`). **Tertiary** = underlined text-link in rust orange.
|
|
61
|
+
- **Cards:** cream surface lifted one tier from background (`--card`), hairline border, soft `.shadow-eames`. Padding `p-6 lg:p-8`. Title in Futura; meta in IBM Plex Mono.
|
|
62
|
+
- **Inputs:** full box, `0.25rem` radius, hairline border on cream card surface. Label above, geometric and small. Focus = 2px rust ring.
|
|
63
|
+
- **CTAs:** underlined text-link in rust orange for inline CTAs. Hero/primary action = filled rust rect. **No gradients, no pills, no glow.**
|
|
64
|
+
|
|
65
|
+
## Component families
|
|
66
|
+
None at install time. Family conventions emerge as the project grows; the Director appends them here as they're established. Likely additions: Catalog cards (Knoll/Eames product-shot pattern), Caption blocks (IBM Plex Mono dateline + Futura title), Section dividers (hairline + small Futura label).
|
|
67
|
+
|
|
68
|
+
## Recommended rich media
|
|
69
|
+
|
|
70
|
+
### Cover and hero imagery
|
|
71
|
+
- **Editorial photography with warm color grading.** Orange/teal warmth, the Kodak Portra film-stock palette. Skin tones warm, shadows holding teal.
|
|
72
|
+
- **Illustrated figures in Saul Bass cut-paper style.** Flat colors, geometric simplification, no gradients, no shading.
|
|
73
|
+
- **Eames-era product shots.** Single object on warm seamless backdrop, soft directional light, generous negative space.
|
|
74
|
+
- **Vintage maps and diagrams.** Topographic, exploded-axonometric, period-correct cartography — anything that reads as 1962 reference material.
|
|
75
|
+
|
|
76
|
+
### AI tool recommendations
|
|
77
|
+
- **Midjourney or Flux** for illustrated covers. Prompt template:
|
|
78
|
+
`Saul Bass illustration, cut-paper aesthetic, flat colors, geometric simplification, [subject], 1960s editorial poster`
|
|
79
|
+
- **Recraft** for vector-style flat illustrations — best for icon families, spot art, and category marks that need to be re-edited.
|
|
80
|
+
- **Midjourney** for photography. Prompt template:
|
|
81
|
+
`Kodak Portra 400, warm grading, 35mm film, [subject], natural light, shallow depth of field`
|
|
82
|
+
|
|
83
|
+
### Aspect ratios
|
|
84
|
+
**4:5 portrait** or **3:2 landscape** — the photographic standards. Mid-century predates widescreen; 16:9 and 21:9 read as contemporary cinema, not catalog. Square (1:1) is acceptable for product shots and spot illustrations.
|
|
85
|
+
|
|
86
|
+
### Color grading
|
|
87
|
+
Warm orange/teal split-toning. Highlights warm (toward rust/cream), shadows cool (toward muted teal). Never neutral, never high-contrast HDR.
|
|
88
|
+
|
|
89
|
+
### What to avoid
|
|
90
|
+
- Glossy 3D renders.
|
|
91
|
+
- Lens flare, light leaks (anachronistic to the catalog reference).
|
|
92
|
+
- Glassmorphic effects.
|
|
93
|
+
- Dark moody photography — this direction is warm-lit, not noir.
|
|
94
|
+
- Hyperrealistic AI photos with HDR look.
|
|
95
|
+
- Memphis-style maximalist patterning (squiggles, confetti, neon).
|
|
96
|
+
|
|
97
|
+
### Accessibility
|
|
98
|
+
Alt-text should describe the **warmth and composition**, not just the contents. "A warm-lit product shot of a molded plywood chair on cream seamless, soft directional light from upper left" — not "chair photo." The warmth is part of the meaning.
|
|
99
|
+
|
|
100
|
+
## Details
|
|
101
|
+
- **Selection:** `hsl(var(--primary) / 0.22)` background, foreground text.
|
|
102
|
+
- **Focus ring:** `2px solid hsl(var(--ring))` — rust orange, visible but composed.
|
|
103
|
+
- **Scrollbar:** thin.
|
|
104
|
+
|
|
105
|
+
## Exceptions
|
|
106
|
+
None yet. When an intentional one-of-one violation lands, add it here with the reason.
|
|
107
|
+
|
|
108
|
+
## Revisions
|
|
109
|
+
- Initial direction, generated at install time.
|