@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.
Files changed (348) hide show
  1. package/README.md +163 -2
  2. package/agents/MANIFEST.yml +136 -0
  3. package/agents/README.md +75 -0
  4. package/agents/art-director.md +168 -0
  5. package/agents/audacity-director.md +109 -0
  6. package/agents/brand-identity.md +179 -0
  7. package/agents/brand-precedent.md +119 -0
  8. package/agents/brief-enforcer.md +136 -0
  9. package/agents/component-qa.md +167 -0
  10. package/agents/cto.md +49 -0
  11. package/agents/design-director.md +184 -0
  12. package/agents/design-systems-engineer.md +162 -0
  13. package/agents/direction-curator.md +133 -0
  14. package/agents/homogeneity-detector.md +104 -0
  15. package/agents/logo-designer.md +240 -0
  16. package/agents/marketing-designer.md +156 -0
  17. package/agents/media-curator.md +165 -0
  18. package/agents/motion-engineer.md +270 -0
  19. package/agents/qa-conductor.md +143 -0
  20. package/agents/render-qa.md +133 -0
  21. package/agents/upgrade-simulator.md +123 -0
  22. package/agents/vp-architecture.md +49 -0
  23. package/agents/vp-engineering.md +49 -0
  24. package/dist/index.js +7182 -0
  25. package/package.json +69 -4
  26. package/themes/README.md +70 -0
  27. package/themes/acrylic-soft/THEME.md +142 -0
  28. package/themes/acrylic-soft/tokens.ts +180 -0
  29. package/themes/agency-creative/THEME.md +91 -0
  30. package/themes/agency-creative/tokens.ts +202 -0
  31. package/themes/agency-portfolio/THEME.md +109 -0
  32. package/themes/agency-portfolio/tokens.ts +159 -0
  33. package/themes/ai-startup/THEME.md +95 -0
  34. package/themes/ai-startup/tokens.ts +162 -0
  35. package/themes/airline-modern/THEME.md +104 -0
  36. package/themes/airline-modern/tokens.ts +179 -0
  37. package/themes/arc-stack/.anchor-render.png +0 -0
  38. package/themes/arc-stack/THEME.md +125 -0
  39. package/themes/arc-stack/audit.log.jsonl +6 -0
  40. package/themes/arc-stack/dismissals.jsonl +3 -0
  41. package/themes/arc-stack/tailwind.snippet.ts +17 -0
  42. package/themes/arc-stack/theme.yml +153 -0
  43. package/themes/arc-stack/tokens.ts +29 -0
  44. package/themes/architectural/THEME.md +102 -0
  45. package/themes/architectural/tokens.ts +159 -0
  46. package/themes/atelier-radiance/THEME.md +93 -0
  47. package/themes/atelier-radiance/audit.log.jsonl +1 -0
  48. package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
  49. package/themes/atelier-radiance/theme.yml +130 -0
  50. package/themes/atelier-radiance/tokens.ts +29 -0
  51. package/themes/automotive-ev/THEME.md +87 -0
  52. package/themes/automotive-ev/tokens.ts +183 -0
  53. package/themes/automotive-luxury/THEME.md +88 -0
  54. package/themes/automotive-luxury/tokens.ts +175 -0
  55. package/themes/baby-modern/THEME.md +79 -0
  56. package/themes/baby-modern/tokens.ts +184 -0
  57. package/themes/banking-gravity/THEME.md +171 -0
  58. package/themes/banking-gravity/tokens.ts +169 -0
  59. package/themes/beauty-clean/THEME.md +92 -0
  60. package/themes/beauty-clean/tokens.ts +176 -0
  61. package/themes/beauty-luxury/THEME.md +96 -0
  62. package/themes/beauty-luxury/tokens.ts +178 -0
  63. package/themes/bento-modular/.anchor-render.png +0 -0
  64. package/themes/bento-modular/BUILD_BRIEF.md +171 -0
  65. package/themes/bento-modular/THEME.md +80 -0
  66. package/themes/bento-modular/audit.log.jsonl +3 -0
  67. package/themes/bento-modular/dismissals.jsonl +1 -0
  68. package/themes/bento-modular/tailwind.snippet.ts +17 -0
  69. package/themes/bento-modular/theme.yml +83 -0
  70. package/themes/bento-modular/tokens.ts +27 -0
  71. package/themes/bookstore-indie/THEME.md +78 -0
  72. package/themes/bookstore-indie/tokens.ts +147 -0
  73. package/themes/brutalist/THEME.md +96 -0
  74. package/themes/brutalist/tokens.ts +151 -0
  75. package/themes/business-tiles/THEME.md +141 -0
  76. package/themes/business-tiles/tokens.ts +178 -0
  77. package/themes/cabana-poster/THEME.md +158 -0
  78. package/themes/cabana-poster/audit.log.jsonl +1 -0
  79. package/themes/cabana-poster/tailwind.snippet.ts +16 -0
  80. package/themes/cabana-poster/theme.yml +221 -0
  81. package/themes/cabana-poster/tokens.ts +34 -0
  82. package/themes/case-panel/THEME.md +126 -0
  83. package/themes/case-panel/audit.log.jsonl +2 -0
  84. package/themes/case-panel/tailwind.snippet.ts +15 -0
  85. package/themes/case-panel/theme.yml +153 -0
  86. package/themes/case-panel/tokens.ts +28 -0
  87. package/themes/cinematic-dark/THEME.md +97 -0
  88. package/themes/cinematic-dark/tokens.ts +195 -0
  89. package/themes/classic-car/THEME.md +86 -0
  90. package/themes/classic-car/tokens.ts +173 -0
  91. package/themes/cloud-friendly/THEME.md +152 -0
  92. package/themes/cloud-friendly/tokens.ts +181 -0
  93. package/themes/community-niche/THEME.md +102 -0
  94. package/themes/community-niche/tokens.ts +177 -0
  95. package/themes/corporate-grid/THEME.md +154 -0
  96. package/themes/corporate-grid/tokens.ts +182 -0
  97. package/themes/couture-luxury/THEME.md +85 -0
  98. package/themes/couture-luxury/tokens.ts +146 -0
  99. package/themes/creator-social/THEME.md +131 -0
  100. package/themes/creator-social/tokens.ts +249 -0
  101. package/themes/crypto-onchain/THEME.md +100 -0
  102. package/themes/crypto-onchain/tokens.ts +207 -0
  103. package/themes/cycling-brand/THEME.md +78 -0
  104. package/themes/cycling-brand/tokens.ts +185 -0
  105. package/themes/dating-friendly/THEME.md +102 -0
  106. package/themes/dating-friendly/tokens.ts +178 -0
  107. package/themes/dense-utility/THEME.md +85 -0
  108. package/themes/dense-utility/tokens.ts +155 -0
  109. package/themes/devtool-cli/THEME.md +100 -0
  110. package/themes/devtool-cli/tokens.ts +195 -0
  111. package/themes/devtool-docs/THEME.md +105 -0
  112. package/themes/devtool-docs/tokens.ts +177 -0
  113. package/themes/editorial/THEME.md +129 -0
  114. package/themes/editorial/audit.log.jsonl +2 -0
  115. package/themes/editorial/tailwind.snippet.ts +15 -0
  116. package/themes/editorial/theme.yml +173 -0
  117. package/themes/editorial/tokens.ts +29 -0
  118. package/themes/education-formal/THEME.md +154 -0
  119. package/themes/education-formal/audit.log.jsonl +1 -0
  120. package/themes/education-formal/tailwind.snippet.ts +15 -0
  121. package/themes/education-formal/theme.yml +186 -0
  122. package/themes/education-formal/tokens.ts +29 -0
  123. package/themes/education-warm/THEME.md +91 -0
  124. package/themes/education-warm/tokens.ts +185 -0
  125. package/themes/ember-poster/README.md +79 -0
  126. package/themes/ember-poster/THEME.md +101 -0
  127. package/themes/ember-poster/audit.log.jsonl +17 -0
  128. package/themes/ember-poster/package.json +34 -0
  129. package/themes/ember-poster/tailwind.snippet.ts +17 -0
  130. package/themes/ember-poster/theme.yml +109 -0
  131. package/themes/ember-poster/tokens.ts +27 -0
  132. package/themes/enterprise-cloud/THEME.md +139 -0
  133. package/themes/enterprise-cloud/tokens.ts +179 -0
  134. package/themes/enterprise-tech/.anchor-render.png +0 -0
  135. package/themes/enterprise-tech/THEME.md +167 -0
  136. package/themes/enterprise-tech/audit.log.jsonl +1 -0
  137. package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
  138. package/themes/enterprise-tech/theme.yml +202 -0
  139. package/themes/enterprise-tech/tokens.ts +29 -0
  140. package/themes/ev-charging/THEME.md +94 -0
  141. package/themes/ev-charging/tokens.ts +185 -0
  142. package/themes/farm-direct/THEME.md +92 -0
  143. package/themes/farm-direct/tokens.ts +180 -0
  144. package/themes/fintech-card/THEME.md +96 -0
  145. package/themes/fintech-card/tokens.ts +191 -0
  146. package/themes/fintech-trust/THEME.md +94 -0
  147. package/themes/fintech-trust/tokens.ts +192 -0
  148. package/themes/food-blog/THEME.md +98 -0
  149. package/themes/food-blog/tokens.ts +183 -0
  150. package/themes/forum-classic/THEME.md +100 -0
  151. package/themes/forum-classic/tokens.ts +168 -0
  152. package/themes/fresh-plate/.anchor-render.png +0 -0
  153. package/themes/fresh-plate/THEME.md +144 -0
  154. package/themes/fresh-plate/audit.log.jsonl +2 -0
  155. package/themes/fresh-plate/dismissals.jsonl +3 -0
  156. package/themes/fresh-plate/tailwind.snippet.ts +16 -0
  157. package/themes/fresh-plate/theme.yml +189 -0
  158. package/themes/fresh-plate/tokens.ts +30 -0
  159. package/themes/furniture-modern/THEME.md +94 -0
  160. package/themes/furniture-modern/tokens.ts +176 -0
  161. package/themes/gaming-esports/THEME.md +146 -0
  162. package/themes/gaming-esports/tokens.ts +199 -0
  163. package/themes/gaming-streamer/THEME.md +139 -0
  164. package/themes/gaming-streamer/tokens.ts +201 -0
  165. package/themes/glassmorphic-modern/THEME.md +119 -0
  166. package/themes/glassmorphic-modern/tokens.ts +174 -0
  167. package/themes/government-civic/THEME.md +138 -0
  168. package/themes/government-civic/tokens.ts +164 -0
  169. package/themes/gym-chain/THEME.md +79 -0
  170. package/themes/gym-chain/tokens.ts +196 -0
  171. package/themes/healthcare-bright/THEME.md +95 -0
  172. package/themes/healthcare-bright/tokens.ts +184 -0
  173. package/themes/home-decor/THEME.md +94 -0
  174. package/themes/home-decor/tokens.ts +177 -0
  175. package/themes/hotel-boutique/THEME.md +110 -0
  176. package/themes/hotel-boutique/tokens.ts +179 -0
  177. package/themes/hyperminimal-mono/THEME.md +91 -0
  178. package/themes/hyperminimal-mono/tokens.ts +150 -0
  179. package/themes/indie-art-game/THEME.md +107 -0
  180. package/themes/indie-art-game/tokens.ts +216 -0
  181. package/themes/insurance-legacy/THEME.md +101 -0
  182. package/themes/insurance-legacy/tokens.ts +182 -0
  183. package/themes/insurance-modern/THEME.md +103 -0
  184. package/themes/insurance-modern/tokens.ts +192 -0
  185. package/themes/kaiju-reveal/THEME.md +97 -0
  186. package/themes/kaiju-reveal/tokens.ts +185 -0
  187. package/themes/kinetic-data/THEME.md +172 -0
  188. package/themes/kinetic-data/audit.log.jsonl +1 -0
  189. package/themes/kinetic-data/tailwind.snippet.ts +16 -0
  190. package/themes/kinetic-data/theme.yml +207 -0
  191. package/themes/kinetic-data/tokens.ts +30 -0
  192. package/themes/kinetic-headline/.anchor-render.png +0 -0
  193. package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
  194. package/themes/kinetic-headline/THEME.md +78 -0
  195. package/themes/kinetic-headline/audit.log.jsonl +4 -0
  196. package/themes/kinetic-headline/dismissals.jsonl +1 -0
  197. package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
  198. package/themes/kinetic-headline/theme.yml +81 -0
  199. package/themes/kinetic-headline/tokens.ts +26 -0
  200. package/themes/law-firm/THEME.md +108 -0
  201. package/themes/law-firm/tokens.ts +158 -0
  202. package/themes/lawtech-modern/THEME.md +107 -0
  203. package/themes/lawtech-modern/tokens.ts +192 -0
  204. package/themes/linkedin-pro/THEME.md +102 -0
  205. package/themes/linkedin-pro/tokens.ts +174 -0
  206. package/themes/logistics-modern/THEME.md +94 -0
  207. package/themes/logistics-modern/tokens.ts +187 -0
  208. package/themes/magazine-glossy/THEME.md +74 -0
  209. package/themes/magazine-glossy/tokens.ts +158 -0
  210. package/themes/marker-mag/THEME.md +128 -0
  211. package/themes/marker-mag/audit.log.jsonl +1 -0
  212. package/themes/marker-mag/tailwind.snippet.ts +15 -0
  213. package/themes/marker-mag/theme.yml +159 -0
  214. package/themes/marker-mag/tokens.ts +27 -0
  215. package/themes/marketplace-modern/THEME.md +135 -0
  216. package/themes/marketplace-modern/tokens.ts +186 -0
  217. package/themes/marketplace-vintage/THEME.md +110 -0
  218. package/themes/marketplace-vintage/tokens.ts +185 -0
  219. package/themes/maximalist/THEME.md +96 -0
  220. package/themes/maximalist/tokens.ts +168 -0
  221. package/themes/mid-century/THEME.md +109 -0
  222. package/themes/mid-century/tokens.ts +162 -0
  223. package/themes/motorcycle-brand/THEME.md +86 -0
  224. package/themes/motorcycle-brand/tokens.ts +174 -0
  225. package/themes/museum/THEME.md +83 -0
  226. package/themes/museum/tokens.ts +147 -0
  227. package/themes/music-streaming/THEME.md +101 -0
  228. package/themes/music-streaming/tokens.ts +187 -0
  229. package/themes/music-vinyl/THEME.md +98 -0
  230. package/themes/music-vinyl/tokens.ts +167 -0
  231. package/themes/nature-distilled/.anchor-render.png +0 -0
  232. package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
  233. package/themes/nature-distilled/THEME.md +81 -0
  234. package/themes/nature-distilled/audit.log.jsonl +2 -0
  235. package/themes/nature-distilled/tailwind.snippet.ts +16 -0
  236. package/themes/nature-distilled/theme.yml +91 -0
  237. package/themes/nature-distilled/tokens.ts +26 -0
  238. package/themes/news-tabloid/THEME.md +72 -0
  239. package/themes/news-tabloid/tokens.ts +158 -0
  240. package/themes/news-tech/THEME.md +75 -0
  241. package/themes/news-tech/tokens.ts +149 -0
  242. package/themes/newsletter/THEME.md +82 -0
  243. package/themes/newsletter/tokens.ts +138 -0
  244. package/themes/newspaper-classic/THEME.md +74 -0
  245. package/themes/newspaper-classic/tokens.ts +159 -0
  246. package/themes/nonprofit-arts/THEME.md +78 -0
  247. package/themes/nonprofit-arts/tokens.ts +157 -0
  248. package/themes/nonprofit-warm/THEME.md +105 -0
  249. package/themes/nonprofit-warm/tokens.ts +188 -0
  250. package/themes/outdoor-adventure/THEME.md +113 -0
  251. package/themes/outdoor-adventure/tokens.ts +181 -0
  252. package/themes/overland-broadside/THEME.md +119 -0
  253. package/themes/overland-broadside/audit.log.jsonl +1 -0
  254. package/themes/overland-broadside/tailwind.snippet.ts +17 -0
  255. package/themes/overland-broadside/theme.yml +138 -0
  256. package/themes/overland-broadside/tokens.ts +27 -0
  257. package/themes/performance-engineered/THEME.md +162 -0
  258. package/themes/performance-engineered/audit.log.jsonl +1 -0
  259. package/themes/performance-engineered/tailwind.snippet.ts +15 -0
  260. package/themes/performance-engineered/theme.yml +193 -0
  261. package/themes/performance-engineered/tokens.ts +29 -0
  262. package/themes/pet-food/THEME.md +78 -0
  263. package/themes/pet-food/tokens.ts +185 -0
  264. package/themes/pharma-clinical/THEME.md +164 -0
  265. package/themes/pharma-clinical/audit.log.jsonl +1 -0
  266. package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
  267. package/themes/pharma-clinical/theme.yml +201 -0
  268. package/themes/pharma-clinical/tokens.ts +29 -0
  269. package/themes/pill-editorial/THEME.md +125 -0
  270. package/themes/pill-editorial/audit.log.jsonl +1 -0
  271. package/themes/pill-editorial/tailwind.snippet.ts +15 -0
  272. package/themes/pill-editorial/theme.yml +168 -0
  273. package/themes/pill-editorial/tokens.ts +31 -0
  274. package/themes/podcast-warm/THEME.md +103 -0
  275. package/themes/podcast-warm/tokens.ts +192 -0
  276. package/themes/publisher-indie/THEME.md +78 -0
  277. package/themes/publisher-indie/tokens.ts +148 -0
  278. package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
  279. package/themes/raw-concrete/THEME.md +76 -0
  280. package/themes/raw-concrete/audit.log.jsonl +10 -0
  281. package/themes/raw-concrete/tailwind.snippet.ts +16 -0
  282. package/themes/raw-concrete/theme.yml +88 -0
  283. package/themes/raw-concrete/tokens.ts +27 -0
  284. package/themes/realestate-luxury/THEME.md +94 -0
  285. package/themes/realestate-luxury/tokens.ts +169 -0
  286. package/themes/realestate-marketplace/THEME.md +106 -0
  287. package/themes/realestate-marketplace/tokens.ts +183 -0
  288. package/themes/restaurant-modern/THEME.md +109 -0
  289. package/themes/restaurant-modern/tokens.ts +172 -0
  290. package/themes/runway-fashion/THEME.md +99 -0
  291. package/themes/runway-fashion/tokens.ts +167 -0
  292. package/themes/saturday-morning/THEME.md +117 -0
  293. package/themes/saturday-morning/tokens.ts +281 -0
  294. package/themes/schema.ts +235 -0
  295. package/themes/signal-dark/BUILD_BRIEF.md +168 -0
  296. package/themes/signal-dark/THEME.md +107 -0
  297. package/themes/signal-dark/tokens.ts +181 -0
  298. package/themes/soft-modern/THEME.md +91 -0
  299. package/themes/soft-modern/tokens.ts +166 -0
  300. package/themes/solar-residential/THEME.md +92 -0
  301. package/themes/solar-residential/tokens.ts +176 -0
  302. package/themes/sports-league/THEME.md +180 -0
  303. package/themes/sports-league/audit.log.jsonl +1 -0
  304. package/themes/sports-league/tailwind.snippet.ts +15 -0
  305. package/themes/sports-league/theme.yml +213 -0
  306. package/themes/sports-league/tokens.ts +32 -0
  307. package/themes/stadium-sport/THEME.md +114 -0
  308. package/themes/stadium-sport/tokens.ts +187 -0
  309. package/themes/streetwear-hype/THEME.md +100 -0
  310. package/themes/streetwear-hype/tokens.ts +174 -0
  311. package/themes/studio-architect/THEME.md +108 -0
  312. package/themes/studio-architect/tokens.ts +162 -0
  313. package/themes/studio-photographer/THEME.md +88 -0
  314. package/themes/studio-photographer/tokens.ts +164 -0
  315. package/themes/team-kanban/.anchor-render.png +0 -0
  316. package/themes/team-kanban/THEME.md +167 -0
  317. package/themes/team-kanban/audit.log.jsonl +2 -0
  318. package/themes/team-kanban/dismissals.jsonl +1 -0
  319. package/themes/team-kanban/tailwind.snippet.ts +15 -0
  320. package/themes/team-kanban/theme.yml +209 -0
  321. package/themes/team-kanban/tokens.ts +35 -0
  322. package/themes/telehealth-modern/THEME.md +95 -0
  323. package/themes/telehealth-modern/tokens.ts +197 -0
  324. package/themes/tourism-board/THEME.md +111 -0
  325. package/themes/tourism-board/tokens.ts +173 -0
  326. package/themes/toys-modern/THEME.md +79 -0
  327. package/themes/toys-modern/tokens.ts +200 -0
  328. package/themes/travel-luxury/THEME.md +95 -0
  329. package/themes/travel-luxury/tokens.ts +162 -0
  330. package/themes/vacation-rental/THEME.md +105 -0
  331. package/themes/vacation-rental/tokens.ts +174 -0
  332. package/themes/vault-reel/THEME.md +134 -0
  333. package/themes/vault-reel/audit.log.jsonl +3 -0
  334. package/themes/vault-reel/tailwind.snippet.ts +16 -0
  335. package/themes/vault-reel/theme.yml +167 -0
  336. package/themes/vault-reel/tokens.ts +30 -0
  337. package/themes/vet-modern/THEME.md +79 -0
  338. package/themes/vet-modern/tokens.ts +194 -0
  339. package/themes/web3-restraint/THEME.md +87 -0
  340. package/themes/web3-restraint/tokens.ts +154 -0
  341. package/themes/wellness-active/THEME.md +102 -0
  342. package/themes/wellness-active/tokens.ts +203 -0
  343. package/themes/wellness-spa/THEME.md +93 -0
  344. package/themes/wellness-spa/tokens.ts +173 -0
  345. package/themes/y2k-chrome/THEME.md +118 -0
  346. package/themes/y2k-chrome/tokens.ts +249 -0
  347. package/themes/yoga-studio/THEME.md +76 -0
  348. 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.