@stylecrib/cli 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/README.md +94 -9
  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 +1606 -467
  25. package/package.json +12 -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/THEME.md +125 -0
  38. package/themes/arc-stack/tailwind.snippet.ts +17 -0
  39. package/themes/arc-stack/theme.yml +153 -0
  40. package/themes/arc-stack/tokens.ts +29 -0
  41. package/themes/architectural/THEME.md +102 -0
  42. package/themes/architectural/tokens.ts +159 -0
  43. package/themes/atelier-radiance/THEME.md +93 -0
  44. package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
  45. package/themes/atelier-radiance/theme.yml +130 -0
  46. package/themes/atelier-radiance/tokens.ts +29 -0
  47. package/themes/automotive-ev/THEME.md +87 -0
  48. package/themes/automotive-ev/tokens.ts +183 -0
  49. package/themes/automotive-luxury/THEME.md +88 -0
  50. package/themes/automotive-luxury/tokens.ts +175 -0
  51. package/themes/baby-modern/THEME.md +79 -0
  52. package/themes/baby-modern/tokens.ts +184 -0
  53. package/themes/banking-gravity/THEME.md +171 -0
  54. package/themes/banking-gravity/tokens.ts +169 -0
  55. package/themes/beauty-clean/THEME.md +92 -0
  56. package/themes/beauty-clean/tokens.ts +176 -0
  57. package/themes/beauty-luxury/THEME.md +96 -0
  58. package/themes/beauty-luxury/tokens.ts +178 -0
  59. package/themes/bento-modular/BUILD_BRIEF.md +171 -0
  60. package/themes/bento-modular/THEME.md +80 -0
  61. package/themes/bento-modular/tailwind.snippet.ts +17 -0
  62. package/themes/bento-modular/theme.yml +83 -0
  63. package/themes/bento-modular/tokens.ts +27 -0
  64. package/themes/bookstore-indie/THEME.md +78 -0
  65. package/themes/bookstore-indie/tokens.ts +147 -0
  66. package/themes/brutalist/THEME.md +96 -0
  67. package/themes/brutalist/tokens.ts +151 -0
  68. package/themes/business-tiles/THEME.md +141 -0
  69. package/themes/business-tiles/tokens.ts +178 -0
  70. package/themes/cabana-poster/THEME.md +158 -0
  71. package/themes/cabana-poster/tailwind.snippet.ts +16 -0
  72. package/themes/cabana-poster/theme.yml +221 -0
  73. package/themes/cabana-poster/tokens.ts +34 -0
  74. package/themes/case-panel/THEME.md +126 -0
  75. package/themes/case-panel/tailwind.snippet.ts +15 -0
  76. package/themes/case-panel/theme.yml +153 -0
  77. package/themes/case-panel/tokens.ts +28 -0
  78. package/themes/cinematic-dark/THEME.md +97 -0
  79. package/themes/cinematic-dark/tokens.ts +195 -0
  80. package/themes/classic-car/THEME.md +86 -0
  81. package/themes/classic-car/tokens.ts +173 -0
  82. package/themes/cloud-friendly/THEME.md +152 -0
  83. package/themes/cloud-friendly/tokens.ts +181 -0
  84. package/themes/community-niche/THEME.md +102 -0
  85. package/themes/community-niche/tokens.ts +177 -0
  86. package/themes/corporate-grid/THEME.md +154 -0
  87. package/themes/corporate-grid/tokens.ts +182 -0
  88. package/themes/couture-luxury/THEME.md +85 -0
  89. package/themes/couture-luxury/tokens.ts +146 -0
  90. package/themes/creator-social/THEME.md +131 -0
  91. package/themes/creator-social/tokens.ts +249 -0
  92. package/themes/crypto-onchain/THEME.md +100 -0
  93. package/themes/crypto-onchain/tokens.ts +207 -0
  94. package/themes/cycling-brand/THEME.md +78 -0
  95. package/themes/cycling-brand/tokens.ts +185 -0
  96. package/themes/dating-friendly/THEME.md +102 -0
  97. package/themes/dating-friendly/tokens.ts +178 -0
  98. package/themes/dense-utility/THEME.md +85 -0
  99. package/themes/dense-utility/tokens.ts +155 -0
  100. package/themes/devtool-cli/THEME.md +100 -0
  101. package/themes/devtool-cli/tokens.ts +195 -0
  102. package/themes/devtool-docs/THEME.md +105 -0
  103. package/themes/devtool-docs/tokens.ts +177 -0
  104. package/themes/editorial/THEME.md +129 -0
  105. package/themes/editorial/tailwind.snippet.ts +15 -0
  106. package/themes/editorial/theme.yml +173 -0
  107. package/themes/editorial/tokens.ts +29 -0
  108. package/themes/education-formal/THEME.md +154 -0
  109. package/themes/education-formal/tailwind.snippet.ts +15 -0
  110. package/themes/education-formal/theme.yml +186 -0
  111. package/themes/education-formal/tokens.ts +29 -0
  112. package/themes/education-warm/THEME.md +91 -0
  113. package/themes/education-warm/tokens.ts +185 -0
  114. package/themes/ember-poster/README.md +79 -0
  115. package/themes/ember-poster/THEME.md +101 -0
  116. package/themes/ember-poster/package.json +34 -0
  117. package/themes/ember-poster/tailwind.snippet.ts +17 -0
  118. package/themes/ember-poster/theme.yml +109 -0
  119. package/themes/ember-poster/tokens.ts +27 -0
  120. package/themes/enterprise-cloud/THEME.md +139 -0
  121. package/themes/enterprise-cloud/tokens.ts +179 -0
  122. package/themes/enterprise-tech/THEME.md +167 -0
  123. package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
  124. package/themes/enterprise-tech/theme.yml +202 -0
  125. package/themes/enterprise-tech/tokens.ts +29 -0
  126. package/themes/ev-charging/THEME.md +94 -0
  127. package/themes/ev-charging/tokens.ts +185 -0
  128. package/themes/farm-direct/THEME.md +92 -0
  129. package/themes/farm-direct/tokens.ts +180 -0
  130. package/themes/fintech-card/THEME.md +96 -0
  131. package/themes/fintech-card/tokens.ts +191 -0
  132. package/themes/fintech-trust/THEME.md +94 -0
  133. package/themes/fintech-trust/tokens.ts +192 -0
  134. package/themes/food-blog/THEME.md +98 -0
  135. package/themes/food-blog/tokens.ts +183 -0
  136. package/themes/forum-classic/THEME.md +100 -0
  137. package/themes/forum-classic/tokens.ts +168 -0
  138. package/themes/fresh-plate/THEME.md +144 -0
  139. package/themes/fresh-plate/tailwind.snippet.ts +16 -0
  140. package/themes/fresh-plate/theme.yml +189 -0
  141. package/themes/fresh-plate/tokens.ts +30 -0
  142. package/themes/furniture-modern/THEME.md +94 -0
  143. package/themes/furniture-modern/tokens.ts +176 -0
  144. package/themes/gaming-esports/THEME.md +146 -0
  145. package/themes/gaming-esports/tokens.ts +199 -0
  146. package/themes/gaming-streamer/THEME.md +139 -0
  147. package/themes/gaming-streamer/tokens.ts +201 -0
  148. package/themes/glassmorphic-modern/THEME.md +119 -0
  149. package/themes/glassmorphic-modern/tokens.ts +174 -0
  150. package/themes/government-civic/THEME.md +138 -0
  151. package/themes/government-civic/tokens.ts +164 -0
  152. package/themes/gym-chain/THEME.md +79 -0
  153. package/themes/gym-chain/tokens.ts +196 -0
  154. package/themes/healthcare-bright/THEME.md +95 -0
  155. package/themes/healthcare-bright/tokens.ts +184 -0
  156. package/themes/home-decor/THEME.md +94 -0
  157. package/themes/home-decor/tokens.ts +177 -0
  158. package/themes/hotel-boutique/THEME.md +110 -0
  159. package/themes/hotel-boutique/tokens.ts +179 -0
  160. package/themes/hyperminimal-mono/THEME.md +91 -0
  161. package/themes/hyperminimal-mono/tokens.ts +150 -0
  162. package/themes/indie-art-game/THEME.md +107 -0
  163. package/themes/indie-art-game/tokens.ts +216 -0
  164. package/themes/insurance-legacy/THEME.md +101 -0
  165. package/themes/insurance-legacy/tokens.ts +182 -0
  166. package/themes/insurance-modern/THEME.md +103 -0
  167. package/themes/insurance-modern/tokens.ts +192 -0
  168. package/themes/kaiju-reveal/THEME.md +97 -0
  169. package/themes/kaiju-reveal/tokens.ts +185 -0
  170. package/themes/kinetic-data/THEME.md +172 -0
  171. package/themes/kinetic-data/tailwind.snippet.ts +16 -0
  172. package/themes/kinetic-data/theme.yml +207 -0
  173. package/themes/kinetic-data/tokens.ts +30 -0
  174. package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
  175. package/themes/kinetic-headline/THEME.md +78 -0
  176. package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
  177. package/themes/kinetic-headline/theme.yml +81 -0
  178. package/themes/kinetic-headline/tokens.ts +26 -0
  179. package/themes/law-firm/THEME.md +108 -0
  180. package/themes/law-firm/tokens.ts +158 -0
  181. package/themes/lawtech-modern/THEME.md +107 -0
  182. package/themes/lawtech-modern/tokens.ts +192 -0
  183. package/themes/linkedin-pro/THEME.md +102 -0
  184. package/themes/linkedin-pro/tokens.ts +174 -0
  185. package/themes/logistics-modern/THEME.md +94 -0
  186. package/themes/logistics-modern/tokens.ts +187 -0
  187. package/themes/magazine-glossy/THEME.md +74 -0
  188. package/themes/magazine-glossy/tokens.ts +158 -0
  189. package/themes/marker-mag/THEME.md +128 -0
  190. package/themes/marker-mag/tailwind.snippet.ts +15 -0
  191. package/themes/marker-mag/theme.yml +159 -0
  192. package/themes/marker-mag/tokens.ts +27 -0
  193. package/themes/marketplace-modern/THEME.md +135 -0
  194. package/themes/marketplace-modern/tokens.ts +186 -0
  195. package/themes/marketplace-vintage/THEME.md +110 -0
  196. package/themes/marketplace-vintage/tokens.ts +185 -0
  197. package/themes/maximalist/THEME.md +96 -0
  198. package/themes/maximalist/tokens.ts +168 -0
  199. package/themes/mid-century/THEME.md +109 -0
  200. package/themes/mid-century/tokens.ts +162 -0
  201. package/themes/motorcycle-brand/THEME.md +86 -0
  202. package/themes/motorcycle-brand/tokens.ts +174 -0
  203. package/themes/museum/THEME.md +83 -0
  204. package/themes/museum/tokens.ts +147 -0
  205. package/themes/music-streaming/THEME.md +101 -0
  206. package/themes/music-streaming/tokens.ts +187 -0
  207. package/themes/music-vinyl/THEME.md +98 -0
  208. package/themes/music-vinyl/tokens.ts +167 -0
  209. package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
  210. package/themes/nature-distilled/THEME.md +81 -0
  211. package/themes/nature-distilled/tailwind.snippet.ts +16 -0
  212. package/themes/nature-distilled/theme.yml +91 -0
  213. package/themes/nature-distilled/tokens.ts +26 -0
  214. package/themes/news-tabloid/THEME.md +72 -0
  215. package/themes/news-tabloid/tokens.ts +158 -0
  216. package/themes/news-tech/THEME.md +75 -0
  217. package/themes/news-tech/tokens.ts +149 -0
  218. package/themes/newsletter/THEME.md +82 -0
  219. package/themes/newsletter/tokens.ts +138 -0
  220. package/themes/newspaper-classic/THEME.md +74 -0
  221. package/themes/newspaper-classic/tokens.ts +159 -0
  222. package/themes/nonprofit-arts/THEME.md +78 -0
  223. package/themes/nonprofit-arts/tokens.ts +157 -0
  224. package/themes/nonprofit-warm/THEME.md +105 -0
  225. package/themes/nonprofit-warm/tokens.ts +188 -0
  226. package/themes/outdoor-adventure/THEME.md +113 -0
  227. package/themes/outdoor-adventure/tokens.ts +181 -0
  228. package/themes/overland-broadside/THEME.md +119 -0
  229. package/themes/overland-broadside/tailwind.snippet.ts +17 -0
  230. package/themes/overland-broadside/theme.yml +138 -0
  231. package/themes/overland-broadside/tokens.ts +27 -0
  232. package/themes/performance-engineered/THEME.md +162 -0
  233. package/themes/performance-engineered/tailwind.snippet.ts +15 -0
  234. package/themes/performance-engineered/theme.yml +193 -0
  235. package/themes/performance-engineered/tokens.ts +29 -0
  236. package/themes/pet-food/THEME.md +78 -0
  237. package/themes/pet-food/tokens.ts +185 -0
  238. package/themes/pharma-clinical/THEME.md +164 -0
  239. package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
  240. package/themes/pharma-clinical/theme.yml +201 -0
  241. package/themes/pharma-clinical/tokens.ts +29 -0
  242. package/themes/pill-editorial/THEME.md +125 -0
  243. package/themes/pill-editorial/tailwind.snippet.ts +15 -0
  244. package/themes/pill-editorial/theme.yml +168 -0
  245. package/themes/pill-editorial/tokens.ts +31 -0
  246. package/themes/podcast-warm/THEME.md +103 -0
  247. package/themes/podcast-warm/tokens.ts +192 -0
  248. package/themes/publisher-indie/THEME.md +78 -0
  249. package/themes/publisher-indie/tokens.ts +148 -0
  250. package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
  251. package/themes/raw-concrete/THEME.md +76 -0
  252. package/themes/raw-concrete/tailwind.snippet.ts +16 -0
  253. package/themes/raw-concrete/theme.yml +88 -0
  254. package/themes/raw-concrete/tokens.ts +27 -0
  255. package/themes/realestate-luxury/THEME.md +94 -0
  256. package/themes/realestate-luxury/tokens.ts +169 -0
  257. package/themes/realestate-marketplace/THEME.md +106 -0
  258. package/themes/realestate-marketplace/tokens.ts +183 -0
  259. package/themes/restaurant-modern/THEME.md +109 -0
  260. package/themes/restaurant-modern/tokens.ts +172 -0
  261. package/themes/runway-fashion/THEME.md +99 -0
  262. package/themes/runway-fashion/tokens.ts +167 -0
  263. package/themes/saturday-morning/THEME.md +117 -0
  264. package/themes/saturday-morning/tokens.ts +281 -0
  265. package/themes/schema.ts +235 -0
  266. package/themes/signal-dark/BUILD_BRIEF.md +168 -0
  267. package/themes/signal-dark/THEME.md +107 -0
  268. package/themes/signal-dark/tokens.ts +181 -0
  269. package/themes/soft-modern/THEME.md +91 -0
  270. package/themes/soft-modern/tokens.ts +166 -0
  271. package/themes/solar-residential/THEME.md +92 -0
  272. package/themes/solar-residential/tokens.ts +176 -0
  273. package/themes/sports-league/THEME.md +180 -0
  274. package/themes/sports-league/tailwind.snippet.ts +15 -0
  275. package/themes/sports-league/theme.yml +213 -0
  276. package/themes/sports-league/tokens.ts +32 -0
  277. package/themes/stadium-sport/THEME.md +114 -0
  278. package/themes/stadium-sport/tokens.ts +187 -0
  279. package/themes/streetwear-hype/THEME.md +100 -0
  280. package/themes/streetwear-hype/tokens.ts +174 -0
  281. package/themes/studio-architect/THEME.md +108 -0
  282. package/themes/studio-architect/tokens.ts +162 -0
  283. package/themes/studio-photographer/THEME.md +88 -0
  284. package/themes/studio-photographer/tokens.ts +164 -0
  285. package/themes/team-kanban/THEME.md +167 -0
  286. package/themes/team-kanban/tailwind.snippet.ts +15 -0
  287. package/themes/team-kanban/theme.yml +209 -0
  288. package/themes/team-kanban/tokens.ts +35 -0
  289. package/themes/telehealth-modern/THEME.md +95 -0
  290. package/themes/telehealth-modern/tokens.ts +197 -0
  291. package/themes/tourism-board/THEME.md +111 -0
  292. package/themes/tourism-board/tokens.ts +173 -0
  293. package/themes/toys-modern/THEME.md +79 -0
  294. package/themes/toys-modern/tokens.ts +200 -0
  295. package/themes/travel-luxury/THEME.md +95 -0
  296. package/themes/travel-luxury/tokens.ts +162 -0
  297. package/themes/vacation-rental/THEME.md +105 -0
  298. package/themes/vacation-rental/tokens.ts +174 -0
  299. package/themes/vault-reel/THEME.md +134 -0
  300. package/themes/vault-reel/tailwind.snippet.ts +16 -0
  301. package/themes/vault-reel/theme.yml +167 -0
  302. package/themes/vault-reel/tokens.ts +30 -0
  303. package/themes/vet-modern/THEME.md +79 -0
  304. package/themes/vet-modern/tokens.ts +194 -0
  305. package/themes/web3-restraint/THEME.md +87 -0
  306. package/themes/web3-restraint/tokens.ts +154 -0
  307. package/themes/wellness-active/THEME.md +102 -0
  308. package/themes/wellness-active/tokens.ts +203 -0
  309. package/themes/wellness-spa/THEME.md +93 -0
  310. package/themes/wellness-spa/tokens.ts +173 -0
  311. package/themes/y2k-chrome/THEME.md +118 -0
  312. package/themes/y2k-chrome/tokens.ts +249 -0
  313. package/themes/yoga-studio/THEME.md +76 -0
  314. package/themes/yoga-studio/tokens.ts +163 -0
@@ -0,0 +1,95 @@
1
+ # Design Direction — Healthcare-Bright
2
+
3
+ ## Ethos
4
+ Hims warm peach · Hers rose blush · Ro sage cream · Forward clinical bright · Function Health friendly lab
5
+
6
+ ## Feel
7
+ Modern direct-to-consumer healthcare. The page reads like a wellness brand that happens to dispense medicine — cream surfaces, peach primary, sage supporting accent, rounded geometric sans, photography that looks like a friend's bathroom shelf rather than a hospital corridor. Competent, friendly, intimate. The audience trusts you because the surface refuses to look like the DMV.
8
+
9
+ ## Reference brands
10
+ - **Hims** → warm peach primary, intimate environmental product photography, Plus Jakarta-feel display.
11
+ - **Hers** → rose blush partner accent, Manrope-style body, friendly clinical tone.
12
+ - **Ro** → sage and cream pairing, softly elevated product cards, calm reassurance.
13
+ - **Forward** → clinical white card on cream, bright primary accent, Plus Jakarta crisp display.
14
+ - **Function Health** → cream surfaces with lab-result tables that read friendly rather than intimidating.
15
+
16
+ ## Tokens
17
+ All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin. Do not introduce numbered or generic tokens — if a new color is needed, name a brand it traces to.
18
+
19
+ Surface stack is **cream paper** (background) → **white** (card) → **deeper cream** (secondary/muted) → **sage-soft or peach-soft** (accent and tint pills). Depth comes from soft warm shadows and one-step surface lifts. The cream base is non-negotiable; a true-white page background reads hospital and destroys the brand.
20
+
21
+ Brand tokens: `--peach`, `--peach-soft`, `--blush`, `--sage`, `--sage-soft`, `--cream`, `--ink`. Primary is **Hims warm peach** — the canonical DTC healthcare accent. The sage system carries calm-clinical moments (lab results, wellness content, condition education) and never competes with peach for primary-action duty.
22
+
23
+ ## Typography
24
+ - **Display:** Plus Jakarta Sans (Forward/Hims feel). h1–h4, weights 500/600/700. Tracking `-0.02em` — friendly geometric sans wants a hair tighter at large sizes.
25
+ - **Body:** Manrope (Hers feel). Body base **17px** with **line-height 1.65** — slightly larger than dashboard standard. Patient-facing copy must be readable for fifty-year-olds reading on a phone at arm's length.
26
+ - **Mono:** JetBrains Mono. Used only for lab values, biomarkers, dosages, and tracking numbers. Tabular numerics enforced via `tnum`.
27
+
28
+ H1 uses `clamp(2.25rem, 5.5vw, 4rem)`. Numbers always use tabular figures. Font features: `"ss01"`, `"ss02"`, `"tnum"`.
29
+
30
+ ## Spacing
31
+ - **Container:** `max-w-6xl px-4 lg:px-8` — comfortable marketing width, never edge-to-edge.
32
+ - **Section padding tiers:**
33
+ - Hero: `pt-20 pb-16 lg:pt-32 lg:pb-24`
34
+ - Default: `py-16 lg:py-24`
35
+ - Tight: `py-12 lg:py-16`
36
+ - **Allowed scale values:** 4 6 8 12 16 20 24 32 40 48 64 80 96. Medium density — DTC marketing breathes but doesn't sprawl like a luxury retreat.
37
+
38
+ ## Color
39
+ No hex anywhere in component files. All color via tokens. Opacity via `/N` modifier on token, not via new tokens. White is allowed for `--card` only — the page never sits on pure white. Pure black is forbidden — `--ink` (a deep teal-leaning slate) replaces it.
40
+
41
+ The peach primary and sage accent are the only saturated colors on the page. Blush is reserved for women's-health contexts (Hers parallel). Coral destructive appears only for cancel-subscription, delete-record, and stop-medication — never decorative.
42
+
43
+ ## Radius
44
+ `--radius: 1rem`. **Pillowy 16px rounding** — the signature of the modern DTC healthcare card. Pills are allowed and core (`pillsAllowed: true`) — dosage chips, condition tags, status badges, adherence streaks. The radius language softens the clinical content; sharp corners would undo the brand work.
45
+
46
+ ## Shadows
47
+ **Soft warm shadows.** Utilities:
48
+ - `.shadow-card` — base product card lift, warm shadow tinted slightly peach so it doesn't read cool/gray on cream
49
+ - `.shadow-card-lg` — hover state on cards, modal lift
50
+ - `.shadow-pill` — micro-elevation on status pills
51
+ - `.shadow-inset-warm` — a 1px inner highlight for cards that need extra dimension
52
+
53
+ No glows. No colored drop-shadows beyond the warm tint that keeps shadows from going cold on the cream surface.
54
+
55
+ ## Motion
56
+ Four keyframes — `fade-rise` (standard content entrance, 600ms), `soft-pulse` (dose-due indicator, schedule-reminder dot — 2400ms infinite, gentle scale and opacity), `scale-in` (modal and popover, 240ms), `shimmer` (loading skeletons for lab-result and order-status panels).
57
+
58
+ Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored — wrapped in a media query in every motion utility. Critically: primary buttons do **not** scale on hover. Jumpiness reads alarming in healthcare; lifts come from shadow change and brightness only.
59
+
60
+ ## Component patterns
61
+ - **Buttons:** Primary = solid peach fill with white text, rounded-2xl, shadow-card. Secondary = ghost (1px border, foreground text). Tertiary = text-link with primary color. Hover: shadow-card-lg + 4% brightness shift only, never scale. Destructive coral fill is reserved for cancel-subscription, delete-record, stop-medication — never decorative.
62
+ - **Cards:** Rounded-2xl, white fill on cream background, 1px warm border, shadow-card. Internal padding `p-6 lg:p-8`. Title in Plus Jakarta 600; body in Manrope 400. Hover lifts to shadow-card-lg. Product cards add a sage-soft or peach-soft inner pill for category.
63
+ - **Inputs:** Full rounded-xl box, 1px warm border, white background on cream pages. Label sits above in Plus Jakarta 500, slightly larger than field text — patient-friendly. Focus = 2px peach ring at 40% opacity. Helper text below in muted-foreground. Error state uses coral border + coral helper, never red bg fill.
64
+ - **CTAs:** Solid peach primary is the default — DTC healthcare is conversion-driven. Hero CTAs may pair primary with a ghost secondary side-by-side. Never two solid CTAs adjacent.
65
+
66
+ ## Recommended rich media
67
+ DTC healthcare lives or dies on photography. Lead media is **intimate environmental product photography** — the medication bottle on a bathroom shelf, the daily-vitamin pack in soft morning light, hands holding a glass of water by a kitchen window. Photography looks like a friend took it, not a pharmacy ad. Color-grade for warm highlights and gentle film softness — Fuji 400H or Portra 400.
68
+
69
+ Portraits read **friend, not patient**: people who look like the audience, not stock-photo models, no white coats unless the practitioner segment requires it, slight smile, eye contact, natural makeup. Diversity is real (age, body, skin tone, gender) — DTC healthcare is broad-market and stock-model homogeneity reads dishonest.
70
+
71
+ **AI tool recommendations:** **Midjourney / Flux** with prompts like *"intimate bathroom shelf product photography, soft morning light through window, Fuji 400H, depth of field"* for products; *"warm portrait of person in their forties, natural light kitchen, slight smile, real skin texture, Portra 400"* for people. Avoid the dramatic studio gradient backgrounds — that's pharma-clinical territory. **Ideogram** for category-illustration line drawings in a friendly editorial style (single-weight stroke, terracotta or sage accent).
72
+
73
+ **Aspect ratios:** 4:5 portrait for product hero (mobile-first DTC), 3:2 landscape for environmental moments, 1:1 square for category-tile and quiz-result. Never 21:9 — too cinematic for this brand.
74
+
75
+ **Video:** background-loop hero videos are acceptable but must be muted, ≤6 seconds, ≤2 MB. Use for the "this is what you'll get in the box" unboxing or the "this is the daily ritual" lifestyle shot. Never for a doctor monologue — testimonial video is talking-head territory and pairs better with a poster image + play button.
76
+
77
+ **Performance:** hero image ≤180 KB AVIF at 1600w; product tile images ≤80 KB. LCP under 2s — DTC bounce rate is unforgiving.
78
+
79
+ **Avoid:** stock photography of doctors in white coats pointing at clipboards, blue-tinted laboratory glassware shots, glowing-pill renders, anything that looks like a 2010 pharma ad, AI photos with the uncanny over-smooth skin, 3D rendered organs floating on gradients (that's pharma-clinical territory), lens flare, glitch-aesthetic effects.
80
+
81
+ **Accessibility:** alt-text for product photography names the product and context: *"Daily-vitamin pack on a bathroom shelf next to a glass of water and a folded towel."* Patient testimonial photos describe the person, not just attribution: *"Maya, age 34, sits at her kitchen table with a cup of tea, looking at the camera."*
82
+
83
+ ## Component families
84
+ None at install time. The hint sheet for category-tile, product-card, lab-result-table, and dose-tracker patterns lives in the design-system handoff once the first views ship; the Director appends them here as patterns stabilize.
85
+
86
+ ## Details
87
+ - **Selection:** `hsl(var(--peach) / 0.25)` background, foreground text.
88
+ - **Focus ring:** `2px solid hsl(var(--ring) / 0.5)` — peach at half-opacity. Visible but soft.
89
+ - **Scrollbar:** thin.
90
+
91
+ ## Exceptions
92
+ None yet. When an intentional one-of-one violation lands (a true-white page for a regulatory disclosure, a hex value for a partner-brand pixel-match), add it here with the reason. The Director's consistency pass lists all exceptions for human review.
93
+
94
+ ## Revisions
95
+ - Initial direction, generated at install time.
@@ -0,0 +1,184 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const healthcareBright: Direction = {
4
+ name: "healthcare-bright",
5
+ ethos:
6
+ "Hims warm peach · Hers rose blush · Ro sage cream · Forward clinical bright · Function Health friendly lab",
7
+ references: [
8
+ { brand: "Hims", trait: "warm peach + intimate portrait photography" },
9
+ { brand: "Hers", trait: "rose blush + Manrope friendly clinical" },
10
+ { brand: "Ro", trait: "sage + cream + soft elevated cards" },
11
+ { brand: "Forward", trait: "clinical white + bright accent + Plus Jakarta" },
12
+ { brand: "Function Health", trait: "cream surface + friendly lab-result tables" },
13
+ ],
14
+ feel:
15
+ "Bright, soft, warmly clinical. Peach and cream surfaces, sage accents, " +
16
+ "rounded geometric sans, photography that looks like a friend's bathroom shelf " +
17
+ "rather than a hospital. Healthcare you'd actually use — competent, never severe.",
18
+
19
+ fonts: {
20
+ display: {
21
+ family: "Plus Jakarta Sans",
22
+ fallback: ["Manrope", "Inter", "system-ui", "-apple-system", "sans-serif"],
23
+ from: "Forward/Hims display sans — friendly geometric, slight humanist warmth",
24
+ googleFont: "Plus+Jakarta+Sans",
25
+ weights: [500, 600, 700],
26
+ },
27
+ body: {
28
+ family: "Manrope",
29
+ fallback: ["Inter", "system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
30
+ from: "Hers body sans — rounded apertures, reads warm at small sizes",
31
+ googleFont: "Manrope",
32
+ weights: [400, 500, 600],
33
+ },
34
+ mono: {
35
+ family: "JetBrains Mono",
36
+ fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
37
+ from: "Function Health lab values — tabular numerics for biomarkers and dosages",
38
+ googleFont: "JetBrains+Mono",
39
+ weights: [400, 500],
40
+ },
41
+ },
42
+
43
+ typography: {
44
+ headingTracking: "-0.02em", // friendly sans display benefits from tight tracking
45
+ bodyTracking: "0",
46
+ fontFeatureSettings: '"ss01", "ss02", "tnum"',
47
+ h1ScaleClamp: "clamp(2.25rem, 5.5vw, 4rem)",
48
+ bodyBaseSize: "1.0625rem", // 17px — slightly larger, reads patient-friendly
49
+ bodyLineHeight: "1.65",
50
+ },
51
+
52
+ colors: {
53
+ background: { hsl: "30 40% 97%", from: "Ro/Function cream — warm paper, never pure white" },
54
+ foreground: { hsl: "200 30% 16%", from: "Forward deep teal-ink — softer than black, still clinical" },
55
+ card: { hsl: "0 0% 100%", from: "true white card on cream — Hims product card lift" },
56
+ popover: { hsl: "0 0% 100%", from: "same as card" },
57
+ primary: { hsl: "16 78% 64%", from: "Hims warm peach — the canonical DTC healthcare accent" },
58
+ primaryForeground: { hsl: "0 0% 100%", from: "white on peach" },
59
+ secondary: { hsl: "30 30% 94%", from: "deeper cream — Ro secondary surface" },
60
+ secondaryForeground: { hsl: "200 30% 20%", from: "deep teal on cream" },
61
+ muted: { hsl: "30 24% 93%", from: "Function Health muted lab-table row" },
62
+ mutedForeground: { hsl: "200 14% 44%", from: "muted teal-gray — captions and meta" },
63
+ accent: { hsl: "150 24% 90%", from: "Ro sage tint — hover surface and supporting pills" },
64
+ accentForeground: { hsl: "150 32% 22%", from: "deep sage on sage tint" },
65
+ border: { hsl: "30 22% 88%", from: "warm hairline — visible on cream, never harsh" },
66
+ input: { hsl: "30 22% 88%", from: "same as border" },
67
+ ring: { hsl: "16 78% 64%", from: "primary peach, used for focus" },
68
+ destructive: { hsl: "356 70% 56%", from: "warm coral-red — patient alert, not hospital red" },
69
+ destructiveForeground: { hsl: "0 0% 100%", from: "white on coral" },
70
+ brand: {
71
+ peach: { hsl: "16 78% 64%", from: "Hims primary peach — DTC men's-health canonical" },
72
+ "peach-soft": { hsl: "16 80% 94%", from: "peach tinted bg — pill and badge surface" },
73
+ blush: { hsl: "352 70% 78%", from: "Hers rose blush — women's-health partner accent" },
74
+ sage: { hsl: "150 28% 58%", from: "Ro sage — calm clinical reassurance" },
75
+ "sage-soft": { hsl: "150 30% 92%", from: "sage tinted bg — wellness card tint" },
76
+ cream: { hsl: "30 40% 97%", from: "alias for background — Ro cream paper" },
77
+ ink: { hsl: "200 30% 16%", from: "alias for foreground — Forward teal-ink" },
78
+ },
79
+ },
80
+
81
+ spacing: {
82
+ base: 4,
83
+ scale: [4, 6, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96],
84
+ containerMax: "max-w-6xl",
85
+ containerPadding: "px-4 lg:px-8",
86
+ sectionPadding: {
87
+ hero: "pt-20 pb-16 lg:pt-32 lg:pb-24",
88
+ default: "py-16 lg:py-24",
89
+ tight: "py-12 lg:py-16",
90
+ },
91
+ },
92
+
93
+ radius: {
94
+ base: "1rem", // 16px — pillowy, friendly DTC product-card softness
95
+ pillsAllowed: true, // pills are core — dosage chips, condition tags, status
96
+ },
97
+
98
+ shadows: {
99
+ style: "soft",
100
+ utilities: {
101
+ "shadow-card":
102
+ "0 1px 2px hsl(16 30% 40% / 0.04), 0 8px 24px hsl(16 30% 40% / 0.08)",
103
+ "shadow-card-lg":
104
+ "0 2px 4px hsl(16 30% 40% / 0.04), 0 16px 40px hsl(16 30% 40% / 0.10)",
105
+ "shadow-pill":
106
+ "0 1px 2px hsl(16 30% 40% / 0.06)",
107
+ "shadow-inset-warm":
108
+ "inset 0 1px 0 hsl(0 0% 100% / 0.7)",
109
+ },
110
+ },
111
+
112
+ motion: {
113
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
114
+ durations: {
115
+ reveal: 600,
116
+ loop: 2400,
117
+ ambient: 20000,
118
+ },
119
+ keyframes: {
120
+ "fade-rise": {
121
+ css:
122
+ "from { opacity: 0; transform: translateY(12px); }\n" +
123
+ "to { opacity: 1; transform: translateY(0); }",
124
+ defaultDuration: 600,
125
+ iteration: "once",
126
+ purpose: "standard content entrance — friendly rise, never dramatic",
127
+ },
128
+ "soft-pulse": {
129
+ css:
130
+ "0%, 100% { transform: scale(1); opacity: 1; }\n" +
131
+ "50% { transform: scale(1.04); opacity: 0.92; }",
132
+ defaultDuration: 2400,
133
+ iteration: "infinite",
134
+ purpose: "schedule-reminder dot and dose-due indicator — gentle, reassuring",
135
+ },
136
+ "scale-in": {
137
+ css:
138
+ "from { opacity: 0; transform: scale(0.96); }\n" +
139
+ "to { opacity: 1; transform: scale(1); }",
140
+ defaultDuration: 240,
141
+ iteration: "once",
142
+ purpose: "modal, popover, tooltip — confirms tap without alarm",
143
+ },
144
+ "shimmer": {
145
+ css:
146
+ "0% { background-position: -200% 0; }\n" +
147
+ "100% { background-position: 200% 0; }",
148
+ defaultDuration: 1600,
149
+ iteration: "infinite",
150
+ purpose: "lab-result loading skeleton — sweep across cream surface",
151
+ },
152
+ },
153
+ respectsReducedMotion: true,
154
+ },
155
+
156
+ density: "medium",
157
+
158
+ patterns: {
159
+ button:
160
+ "Primary = solid peach fill with white text, rounded-2xl, shadow-card. " +
161
+ "Secondary = ghost (1px border, foreground text). Tertiary = text-link with primary color. " +
162
+ "Hover: shadow-card-lg and brightness shift only — no scale on primary (jumpiness reads alarming in healthcare). " +
163
+ "Destructive coral fill is reserved for cancel-subscription, delete-record, and stop-medication — never decorative.",
164
+ card:
165
+ "Rounded-2xl, white fill on cream background, 1px warm border, shadow-card. " +
166
+ "Internal padding p-6 lg:p-8. Title in Plus Jakarta 600; body in Manrope 400. " +
167
+ "Hover lifts to shadow-card-lg. Product cards add a sage-soft or peach-soft inner pill for category.",
168
+ input:
169
+ "Full rounded-xl box, 1px warm border, white background on cream pages. " +
170
+ "Label sits above in Plus Jakarta 500, slightly larger than field text — patient-friendly. " +
171
+ "Focus = 2px peach ring at 40% opacity. Helper text below in muted-foreground. " +
172
+ "Error state uses coral border + coral helper, never red bg fill.",
173
+ cta:
174
+ "Solid peach primary is the default — DTC healthcare conversion-driven. " +
175
+ "Hero CTAs may pair primary with a ghost secondary side-by-side. Never two solid CTAs adjacent.",
176
+ },
177
+
178
+ details: {
179
+ selectionBg: "hsl(var(--peach) / 0.25)",
180
+ selectionFg: "hsl(var(--foreground))",
181
+ focusRing: "2px solid hsl(var(--ring) / 0.5)",
182
+ scrollbarStyle: "thin",
183
+ },
184
+ };
@@ -0,0 +1,94 @@
1
+ # Design Direction — Home-Decor
2
+
3
+ ## Ethos
4
+ Anthropologie soft floral · McGee & Co curated traditional · Schoolhouse heritage hardware · Rejuvenation craftsman warmth · Soho Home boho-club glamour
5
+
6
+ ## Feel
7
+ Decoration-forward. Cream and plaster surfaces carry soft floral patterns; serif display sets every room name in italic; brass and olive accent the curated room gallery. The page reads like a Schoolhouse catalog spread or an Anthropologie lookbook — every surface earns its decoration, patterns are the background not the chrome, and rooms are styled rather than photographed. The audience is decorating a first house, refreshing for spring, or pulling together a holiday tablescape; the layout returns inspiration ("here's a styled room you can shop") rather than performing minimalism.
8
+
9
+ ## Reference brands
10
+ - **Anthropologie** → soft floral pattern surfaces, serif display, curated room gallery, dreamy lookbook editorial.
11
+ - **McGee & Co** → curated-traditional rooms, warm cream, brass accents, transitional-style staging, Studio McGee designer voice.
12
+ - **Schoolhouse** → heritage hardware, Cooper Hewitt-style serif, Portland craftsman warmth, "made by hand" provenance.
13
+ - **Rejuvenation** → American craftsman, aged brass, olive accent, restored-warehouse romance, lighting-as-jewelry.
14
+ - **Soho Home** → boho-club aesthetic, plaster pink, olive green, members'-house gallery framing, Soho House interior moments.
15
+
16
+ ## Tokens
17
+ All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin. Do not introduce numbered or generic tokens — if a new color is needed, name a brand it traces to.
18
+
19
+ Surface stack is **warm plaster** (background, pattern host) → **lighter plaster** (card, gallery-frame feel) → **deeper plaster** (secondary, pattern panels) → **stone-plaster** (muted). Depth comes from soft warm shadows and gallery-mat borders, never from cold neutral chrome.
20
+
21
+ Brand tokens: `--plaster`, `--plaster-deep`, `--brass`, `--brass-deep`, `--olive`, `--olive-soft`, `--blush`, `--ink`. Primary is **Rejuvenation aged brass** — the canonical curated-home accent on CTAs and focus rings. Olive is the boho-club accent (plant tags, seasonal-lookbook chips). Blush is a rare soft floral pattern accent.
22
+
23
+ ## Typography
24
+ - **Display:** Playfair Display (Anthropologie/McGee serif). h1–h4, weights 400/500/600/700. Italic variants are core — room names are always italic. Tracking `-0.01em`.
25
+ - **Body:** Lora (Schoolhouse/Rejuvenation body serif), weights 400/500/600. Body base **17px** with **line-height 1.7**. Catalog body is serif here — sans reads modern-tech and breaks the curated language.
26
+ - **Mono:** JetBrains Mono. Used for SKUs, dimensions, event timestamps — small-caps catalog metadata.
27
+
28
+ H1 uses `clamp(2.5rem, 6.5vw, 5rem)`. Prices may use old-style figures (`"onum"` on) for catalog warmth. Font features: `"liga"`, `"dlig"`, `"kern"`, `"onum"`.
29
+
30
+ ## Spacing
31
+ - **Container:** `max-w-6xl px-6 lg:px-10` — wide enough for 3-up styled room gallery with breathing room.
32
+ - **Section padding tiers:**
33
+ - Hero: `pt-24 pb-16 lg:pt-32 lg:pb-24`
34
+ - Default: `py-20 lg:py-28`
35
+ - Tight: `py-12 lg:py-16`
36
+ - **Allowed scale values:** 4 6 8 12 16 20 24 32 40 48 64 80 96 128.
37
+
38
+ ## Color
39
+ No hex anywhere in component files. All color via tokens. Opacity via `/N` modifier on token, not via new tokens. Pure black and pure white are forbidden — `--ink` (warm walnut) and plaster variants do the work. Brass and olive are the two accent colors, used together (a styled room has brass lighting and olive plants); blush is the rare third pattern accent for floral moments.
40
+
41
+ Pattern fills are part of the language — a soft floral SVG repeat at low opacity on the hero, pattern panels in `--plaster-deep` for editorial breaks. If the page reads color-bare, the decoration has gone missing.
42
+
43
+ ## Radius
44
+ `--radius: 0.5rem` (8px). Soft gallery-frame, never pillowy. Pills allowed (`pillsAllowed: true`) for shop-the-room product chips, seasonal tags, event RSVP. Cards use rounded-lg. Buttons use rounded-md.
45
+
46
+ ## Shadows
47
+ **Soft.** Three utilities:
48
+ - `.shadow-gallery` — default gallery-card lift (1px ambient + 8px warm walnut-tint shadow)
49
+ - `.shadow-gallery-lg` — hover state, deeper walnut tint
50
+ - `.border-decorative` — inset brass hairline + 4px plaster mat (gallery-frame matting effect for hero room-tiles)
51
+
52
+ Shadows carry a warm walnut tint, never cold neutral — that reads modern-tech and breaks the curated language.
53
+
54
+ ## Motion
55
+ Three keyframes — `fade-rise` (gallery-card entrance, 800ms — slow lookbook pacing), `pattern-drift` (soft floral pattern on hero bg only, 26000ms infinite, single instance per page), `scale-in` (shop-the-room chip reveal on room-tile hover, 280ms).
56
+
57
+ Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored. Motion is lookbook-paced, slower than the modern-catalog directions — the audience is browsing for inspiration, not scanning for a quick purchase.
58
+
59
+ ## Component patterns
60
+ - **Buttons:** Solid-fill primary (brass bg, plaster text, rounded-md, shadow-gallery). Secondary is plaster card with brass border. Tertiary is text-link in brass-deep with serif italic. Pills carry shop-the-room product chips and event RSVP. Hover lifts shadow-gallery → shadow-gallery-lg.
61
+ - **Cards:** Rounded-lg, plaster bg (not white — white reads modern, plaster reads curated), brass-tinted border, shadow-gallery. Internal padding `p-6 lg:p-8`. Title in Playfair italic; body in Lora 400. Hero room-tile cards may use the border-decorative inset utility (gallery-frame mat effect).
62
+ - **Inputs:** Full rounded-md box, plaster border, plaster card bg. Focus = brass 2px ring at 40% opacity. Label above in small-caps Lora with letter-spacing 0.16em.
63
+ - **CTAs:** Brass-fill primary button is the default. Secondary CTAs use plaster-card button or text-link in brass-deep italic. Shop-the-room is a pill row inside each gallery card, never a separate page navigation.
64
+
65
+ ## Recommended rich media
66
+ Home-decor photography is **styled rooms in golden-hour light**. Every hero is a fully-styled vignette — a dining table with a half-set tablescape, a living room with a folded throw and an open book, a bedroom with morning sheets pulled back. Color-graded warm, slightly desaturated, never high-key flash. Schoolhouse-style provenance ("Lit by the Schoolhouse Princeton pendant, in aged brass") is woven into captions.
67
+
68
+ **AI tool recommendations:** **Midjourney / Flux** for *"styled living room with brass pendant, olive velvet sofa, plaster walls, golden hour through linen curtains, Anthropologie editorial aesthetic, slight film grain"*; *"holiday tablescape, brass candlesticks, olive linen runner, dried wheat, McGee & Co styled, warm window light"*. Avoid Midjourney's default architectural-render output — explicitly prompt for "lived-in, half-styled, casual, golden hour, no studio flash."
69
+
70
+ **Aspect ratios:** 4:5 portrait for room gallery cards, 3:2 landscape for hero lookbook spreads, 1:1 square for shop-the-room product chips.
71
+
72
+ **Video:** lookbook-style 12-second slow-pan-across-a-styled-room loops are core, ≤4 MB, H.265, no audio. Designer-walkthrough video is encouraged on collection drops, with the designer in-frame.
73
+
74
+ **Performance:** room gallery images ≤140 KB WebP at 1400w; hero ≤280 KB. LCP under 2.6s — lookbook audiences tolerate slightly slower loads for higher image quality.
75
+
76
+ **Avoid:** showroom-cold mid-century photography (mid-century territory), beige-on-beige influencer minimalism, watermark stock, 3D render placeholders, gradient backgrounds with no pattern, glassmorphic anything, anything that looks like a 2018 white-walls Instagram aesthetic.
77
+
78
+ **Accessibility:** alt-text describes the styled vignette: *"A dining room set for late-afternoon: olive linen runner across a walnut table, brass candlesticks lit, McGee & Co Sutton chairs in cream bouclé, an open cookbook left on the corner."*
79
+
80
+ ## Component families
81
+ - **Styled room gallery card** — plaster bg, gallery-frame mat border, room photo, room name in Playfair italic, shop-the-room product chip row.
82
+ - **Seasonal lookbook strip** — horizontal scroll of 5–6 mood-image tiles with chapter titles ("Autumn Tablescape · Chapter 03").
83
+ - **In-store events list** — vertical list of dates, venue, host designer, RSVP pill.
84
+
85
+ ## Details
86
+ - **Selection:** `hsl(var(--brass) / 0.22)` background, foreground text.
87
+ - **Focus ring:** `2px solid hsl(var(--ring) / 0.5)` — brass, visible on plaster.
88
+ - **Scrollbar:** thin.
89
+
90
+ ## Exceptions
91
+ None yet. When an intentional one-of-one violation lands (a dark holiday-collection takeover where the plaster surface inverts to deep walnut), add it here with the reason.
92
+
93
+ ## Revisions
94
+ - Initial direction, generated at install time.
@@ -0,0 +1,177 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ // Note: "home-decor" is not yet in the Direction["name"] enum.
4
+ // The schema is closed; until it is extended this file casts the name.
5
+ // All other fields fully validate.
6
+
7
+ export const homeDecor: Direction = {
8
+ name: "home-decor" as Direction["name"],
9
+ ethos:
10
+ "Anthropologie soft floral · McGee & Co curated traditional · Schoolhouse heritage hardware · Rejuvenation craftsman warmth · Soho Home boho-club glamour",
11
+ references: [
12
+ { brand: "Anthropologie", trait: "soft floral pattern surfaces + serif display + curated room gallery" },
13
+ { brand: "McGee & Co", trait: "curated-traditional rooms + warm cream + brass accents + transitional style" },
14
+ { brand: "Schoolhouse", trait: "heritage hardware + Cooper Hewitt serif + Portland craftsman warmth" },
15
+ { brand: "Rejuvenation", trait: "American craftsman + aged brass + olive + restored-warehouse romance" },
16
+ { brand: "Soho Home", trait: "boho-club + plaster pink + olive + members'-house gallery framing" },
17
+ ],
18
+ feel:
19
+ "Decoration-forward. Cream and plaster surfaces carry soft floral patterns; serif display sets " +
20
+ "every room name in italic; brass and olive accent the curated room gallery. The page reads like " +
21
+ "a Schoolhouse catalog spread or an Anthropologie lookbook — every surface earns its decoration, " +
22
+ "patterns are the bg not the chrome, and rooms are styled rather than photographed.",
23
+
24
+ fonts: {
25
+ display: {
26
+ family: "Playfair Display",
27
+ fallback: ["Cormorant Garamond", "Didot", "Georgia", "serif"],
28
+ from: "Anthropologie/McGee serif display — high-contrast, italic-first, room-name-in-script feel",
29
+ googleFont: "Playfair+Display",
30
+ weights: [400, 500, 600, 700],
31
+ },
32
+ body: {
33
+ family: "Lora",
34
+ fallback: ["Crimson Pro", "Iowan Old Style", "Georgia", "serif"],
35
+ from: "Schoolhouse/Rejuvenation body serif — warm, readable, never sans for catalog body",
36
+ googleFont: "Lora",
37
+ weights: [400, 500, 600],
38
+ },
39
+ mono: {
40
+ family: "JetBrains Mono",
41
+ fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
42
+ from: "SKU + dimensions + event-time stamps — small-caps catalog metadata",
43
+ googleFont: "JetBrains+Mono",
44
+ weights: [400, 500],
45
+ },
46
+ },
47
+
48
+ typography: {
49
+ headingTracking: "-0.01em", // high-contrast serif barely tightened
50
+ bodyTracking: "0.005em",
51
+ fontFeatureSettings: '"liga", "dlig", "kern", "onum"', // old-style figures + ligatures
52
+ h1ScaleClamp: "clamp(2.5rem, 6.5vw, 5rem)",
53
+ bodyBaseSize: "1.0625rem", // 17px — lookbook reading column
54
+ bodyLineHeight: "1.7",
55
+ },
56
+
57
+ colors: {
58
+ background: { hsl: "30 32% 94%", from: "Anthropologie warm plaster cream — soft floral pattern host surface" },
59
+ foreground: { hsl: "20 25% 18%", from: "Schoolhouse aged-walnut ink — deep warm brown, holds brass and olive" },
60
+ card: { hsl: "30 38% 97%", from: "lighter plaster — card lifts off the patterned bg, gallery-frame feel" },
61
+ popover: { hsl: "30 38% 97%", from: "same as card" },
62
+ primary: { hsl: "36 48% 46%", from: "Rejuvenation aged brass — the canonical curated-home accent" },
63
+ primaryForeground: { hsl: "30 38% 97%", from: "plaster on brass" },
64
+ secondary: { hsl: "30 26% 90%", from: "deeper plaster — secondary surface, pattern panels" },
65
+ secondaryForeground: { hsl: "20 25% 18%", from: "walnut-ink on deeper plaster" },
66
+ muted: { hsl: "30 20% 87%", from: "stone-plaster — muted floral pattern bg" },
67
+ mutedForeground: { hsl: "20 15% 40%", from: "warm gray — captions, designer credits, event times" },
68
+ accent: { hsl: "85 22% 42%", from: "Soho Home olive — second accent for plant-tag and seasonal chips" },
69
+ accentForeground: { hsl: "30 38% 97%", from: "plaster on olive" },
70
+ border: { hsl: "30 22% 82%", from: "warm plaster hairline — visible on bg, frames pattern panels" },
71
+ input: { hsl: "30 22% 82%", from: "same as border" },
72
+ ring: { hsl: "36 48% 46%", from: "brass primary, focus only" },
73
+ destructive: { hsl: "0 50% 42%", from: "muted oxblood — sold-out / unavailable, never alarm red" },
74
+ destructiveForeground: { hsl: "30 38% 97%", from: "plaster on oxblood" },
75
+ brand: {
76
+ plaster: { hsl: "30 32% 94%", from: "= background; Anthropologie warm plaster cream" },
77
+ "plaster-deep": { hsl: "30 26% 90%", from: "secondary plaster — one tone deeper for pattern panels" },
78
+ brass: { hsl: "36 48% 46%", from: "= primary; Rejuvenation aged brass — curated-home accent" },
79
+ "brass-deep": { hsl: "34 52% 32%", from: "Rejuvenation brass hover — gradient anchor, deeper patina" },
80
+ olive: { hsl: "85 22% 42%", from: "= accent; Soho Home olive — boho-club plant accent" },
81
+ "olive-soft": { hsl: "85 18% 80%", from: "olive tint — soft pattern fill for plant-tag chips" },
82
+ blush: { hsl: "12 45% 78%", from: "Soho Home plaster-pink — soft floral pattern accent, rare" },
83
+ ink: { hsl: "20 25% 18%", from: "= foreground; aged-walnut ink, semantic for headings and body" },
84
+ },
85
+ },
86
+
87
+ spacing: {
88
+ base: 4,
89
+ scale: [4, 6, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128],
90
+ containerMax: "max-w-6xl", // wide enough for 3-up styled room gallery
91
+ containerPadding: "px-6 lg:px-10",
92
+ sectionPadding: {
93
+ hero: "pt-24 pb-16 lg:pt-32 lg:pb-24",
94
+ default: "py-20 lg:py-28",
95
+ tight: "py-12 lg:py-16",
96
+ },
97
+ },
98
+
99
+ radius: {
100
+ base: "0.5rem", // 8px — soft gallery-frame, never pillowy
101
+ pillsAllowed: true, // pills for shop-the-room chips, seasonal tags, event RSVP
102
+ },
103
+
104
+ shadows: {
105
+ style: "soft",
106
+ utilities: {
107
+ "shadow-gallery":
108
+ "0 1px 2px hsl(20 25% 18% / 0.06), 0 8px 24px hsl(20 25% 18% / 0.10)",
109
+ "shadow-gallery-lg":
110
+ "0 2px 4px hsl(20 25% 18% / 0.08), 0 20px 48px hsl(20 25% 18% / 0.14)",
111
+ "border-decorative":
112
+ "inset 0 0 0 1px hsl(36 48% 46% / 0.3), inset 0 0 0 4px hsl(30 38% 97%)",
113
+ },
114
+ },
115
+
116
+ motion: {
117
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
118
+ durations: {
119
+ reveal: 800,
120
+ loop: 2400,
121
+ ambient: 26000,
122
+ },
123
+ keyframes: {
124
+ "fade-rise": {
125
+ css:
126
+ "from { opacity: 0; transform: translateY(16px); }\n" +
127
+ "to { opacity: 1; transform: translateY(0); }",
128
+ defaultDuration: 800,
129
+ iteration: "once",
130
+ purpose: "gallery-card entrance — slow lookbook pacing, never snappy",
131
+ },
132
+ "pattern-drift": {
133
+ css:
134
+ "from { background-position: 0 0; }\n" +
135
+ "to { background-position: 32px 32px; }",
136
+ defaultDuration: 26000,
137
+ iteration: "infinite",
138
+ purpose: "soft floral pattern drift on hero bg only — barely-perceptible, single instance per page",
139
+ },
140
+ "scale-in": {
141
+ css:
142
+ "from { opacity: 0; transform: scale(0.97); }\n" +
143
+ "to { opacity: 1; transform: scale(1); }",
144
+ defaultDuration: 280,
145
+ iteration: "once",
146
+ purpose: "shop-the-room chip reveal on room-tile hover",
147
+ },
148
+ },
149
+ respectsReducedMotion: true,
150
+ },
151
+
152
+ density: "medium",
153
+
154
+ patterns: {
155
+ button:
156
+ "Solid-fill primary (brass bg, plaster text, rounded-md, shadow-gallery). " +
157
+ "Secondary is plaster card with brass border. Tertiary is text-link in brass-deep with serif italic. " +
158
+ "Pills carry shop-the-room product chips and event RSVP. Hover lifts shadow-gallery → shadow-gallery-lg.",
159
+ card:
160
+ "Rounded-lg, plaster bg (not white — white reads modern, plaster reads curated), brass-tinted border, " +
161
+ "shadow-gallery. Internal padding p-6 lg:p-8. Title in Playfair italic; body in Lora 400. " +
162
+ "Hero room-tile cards may use the border-decorative inset utility (gallery-frame mat effect).",
163
+ input:
164
+ "Full rounded-md box, plaster border, plaster card bg. Focus = brass 2px ring at 40% opacity. " +
165
+ "Label above in small-caps Lora with letter-spacing 0.16em.",
166
+ cta:
167
+ "Brass-fill primary button is the default. Secondary CTAs use plaster-card or text-link in brass-deep italic. " +
168
+ "Shop-the-room is a pill row inside each gallery card, never a separate page.",
169
+ },
170
+
171
+ details: {
172
+ selectionBg: "hsl(var(--brass) / 0.22)",
173
+ selectionFg: "hsl(var(--foreground))",
174
+ focusRing: "2px solid hsl(var(--ring) / 0.5)",
175
+ scrollbarStyle: "thin",
176
+ },
177
+ };