@stylecrib/cli 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) 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 +1577 -463
  25. package/package.json +11 -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,197 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const telehealthModern: Direction = {
4
+ name: "telehealth-modern",
5
+ ethos:
6
+ "Headway therapist directory · Cerebral lavender soft · Talkspace warm blue · Spruce clinical-tool · Calm Health structured-soft",
7
+ references: [
8
+ { brand: "Headway", trait: "warm cream + therapist-directory friendly Inter" },
9
+ { brand: "Cerebral", trait: "lavender accent + soft elevated cards" },
10
+ { brand: "Talkspace", trait: "warm blue + friendly typography" },
11
+ { brand: "Spruce Health", trait: "clinical-tool density + warm accent" },
12
+ { brand: "Calm Health", trait: "sage + structured but soft surfaces" },
13
+ ],
14
+ feel:
15
+ "Telehealth dashboard energy — schedule, prescribe, document. " +
16
+ "Cream-tinted surfaces with lavender and warm-blue accents, friendly Inter, " +
17
+ "dense-but-soft information layout. Clinical-software competence with the bedside " +
18
+ "manner of a good therapist, not a hospital EHR.",
19
+
20
+ fonts: {
21
+ display: {
22
+ family: "Inter",
23
+ fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "sans-serif"],
24
+ from: "Headway/Cerebral — Inter as display reads competent + approachable without serif theater",
25
+ googleFont: "Inter",
26
+ weights: [500, 600, 700],
27
+ },
28
+ body: {
29
+ family: "Inter",
30
+ fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "sans-serif"],
31
+ from: "same family as display — telehealth dashboards use one face; hierarchy via weight + size",
32
+ googleFont: "Inter",
33
+ weights: [400, 500, 600],
34
+ },
35
+ mono: {
36
+ family: "IBM Plex Mono",
37
+ fallback: ["JetBrains Mono", "ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
38
+ from: "Spruce dosage strings, ICD codes, MRNs — slightly warmer than JetBrains for patient-facing chrome",
39
+ googleFont: "IBM+Plex+Mono",
40
+ weights: [400, 500],
41
+ },
42
+ },
43
+
44
+ typography: {
45
+ headingTracking: "-0.015em",
46
+ bodyTracking: "0",
47
+ fontFeatureSettings: '"cv11", "ss01", "tnum", "calt"',
48
+ h1ScaleClamp: "clamp(2rem, 4.5vw, 3.25rem)", // tool-first — not magazine-large
49
+ bodyBaseSize: "0.9375rem", // 15px — denser than marketing; dashboard standard
50
+ bodyLineHeight: "1.55",
51
+ },
52
+
53
+ colors: {
54
+ background: { hsl: "36 28% 97%", from: "Headway warm cream — softer than dashboard white, less yellow than spa-cream" },
55
+ foreground: { hsl: "224 32% 14%", from: "deep slate ink — Cerebral readable on cream" },
56
+ card: { hsl: "0 0% 100%", from: "true white card — lifts cleanly off cream for dashboard panels" },
57
+ popover: { hsl: "0 0% 100%", from: "same as card" },
58
+ primary: { hsl: "248 64% 60%", from: "Cerebral lavender — telehealth primary action" },
59
+ primaryForeground: { hsl: "0 0% 100%", from: "white on lavender" },
60
+ secondary: { hsl: "36 24% 94%", from: "deeper cream — Headway secondary panel" },
61
+ secondaryForeground: { hsl: "224 32% 18%", from: "slate ink on cream panel" },
62
+ muted: { hsl: "36 20% 95%", from: "table-row stripe — softer than secondary, near-bg" },
63
+ mutedForeground: { hsl: "224 12% 46%", from: "slate-gray — captions, timestamps, helper" },
64
+ accent: { hsl: "210 60% 94%", from: "Talkspace warm-blue tint — hover and info-pill surface" },
65
+ accentForeground: { hsl: "210 60% 28%", from: "deep warm-blue on tint" },
66
+ border: { hsl: "36 18% 88%", from: "warm hairline — Headway directory rule, never cool gray" },
67
+ input: { hsl: "36 18% 88%", from: "same as border" },
68
+ ring: { hsl: "248 64% 60%", from: "primary lavender, used for focus" },
69
+ destructive: { hsl: "352 68% 54%", from: "warm clinical red — cancel-appointment, discontinue-Rx" },
70
+ destructiveForeground: { hsl: "0 0% 100%", from: "white on warm red" },
71
+ brand: {
72
+ lavender: { hsl: "248 64% 60%", from: "Cerebral primary — telehealth mental-health canonical" },
73
+ "lavender-soft": { hsl: "248 60% 95%", from: "lavender tinted bg — provider-message pill, appointment chip" },
74
+ "warm-blue": { hsl: "210 70% 56%", from: "Talkspace accent — appointment + booking surface" },
75
+ "warm-blue-soft": { hsl: "210 60% 94%", from: "alias for accent — info-banner and chat bubble" },
76
+ sage: { hsl: "150 32% 50%", from: "Calm Health sage — wellness/positive-status indicator" },
77
+ "sage-soft": { hsl: "150 30% 92%", from: "sage tint — completed-task and adherence-good chip" },
78
+ amber: { hsl: "36 90% 56%", from: "Spruce attention amber — Rx-refill-due and follow-up needed" },
79
+ "amber-soft": { hsl: "36 90% 94%", from: "amber tint — pending-state pill" },
80
+ cream: { hsl: "36 28% 97%", from: "alias for background — Headway cream paper" },
81
+ },
82
+ },
83
+
84
+ spacing: {
85
+ base: 4,
86
+ scale: [2, 4, 6, 8, 10, 12, 14, 16, 20, 24, 32, 40, 48, 64, 80], // dense — dashboard-allowed micro-steps
87
+ containerMax: "max-w-7xl", // wide — dashboards run edge-to-edge
88
+ containerPadding: "px-4 lg:px-6",
89
+ sectionPadding: {
90
+ hero: "pt-16 pb-12 lg:pt-24 lg:pb-16",
91
+ default: "py-12 lg:py-20",
92
+ tight: "py-8 lg:py-12",
93
+ },
94
+ },
95
+
96
+ radius: {
97
+ base: "0.625rem", // 10px — softer than dense-utility, less pillowy than DTC
98
+ pillsAllowed: true, // pills core — appointment-status, Rx-state, adherence
99
+ },
100
+
101
+ shadows: {
102
+ style: "soft",
103
+ utilities: {
104
+ "shadow-panel":
105
+ "0 1px 2px hsl(224 30% 20% / 0.04), 0 4px 12px hsl(224 30% 20% / 0.06)",
106
+ "shadow-panel-lg":
107
+ "0 2px 4px hsl(224 30% 20% / 0.05), 0 12px 28px hsl(224 30% 20% / 0.08)",
108
+ "shadow-popover":
109
+ "0 4px 8px hsl(224 30% 20% / 0.06), 0 24px 48px hsl(224 30% 20% / 0.12)",
110
+ "shadow-inset-soft":
111
+ "inset 0 1px 0 hsl(0 0% 100% / 0.6)",
112
+ },
113
+ },
114
+
115
+ motion: {
116
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
117
+ durations: {
118
+ reveal: 400, // dashboard responsive — not marketing-slow
119
+ loop: 1800,
120
+ ambient: 0, // no ambient on a clinical tool
121
+ },
122
+ keyframes: {
123
+ "fade-rise": {
124
+ css:
125
+ "from { opacity: 0; transform: translateY(8px); }\n" +
126
+ "to { opacity: 1; transform: translateY(0); }",
127
+ defaultDuration: 400,
128
+ iteration: "once",
129
+ purpose: "panel and row entrance — short, dashboard-quick",
130
+ },
131
+ "scale-in": {
132
+ css:
133
+ "from { opacity: 0; transform: scale(0.97); }\n" +
134
+ "to { opacity: 1; transform: scale(1); }",
135
+ defaultDuration: 180,
136
+ iteration: "once",
137
+ purpose: "modal, popover, dropdown — confirms click without delay",
138
+ },
139
+ "soft-pulse": {
140
+ css:
141
+ "0%, 100% { opacity: 1; }\n" +
142
+ "50% { opacity: 0.55; }",
143
+ defaultDuration: 1800,
144
+ iteration: "infinite",
145
+ purpose: "unread-message dot and live-session indicator — quiet attention",
146
+ },
147
+ "shimmer": {
148
+ css:
149
+ "0% { background-position: -200% 0; }\n" +
150
+ "100% { background-position: 200% 0; }",
151
+ defaultDuration: 1400,
152
+ iteration: "infinite",
153
+ purpose: "appointment-list and chart-row loading skeleton",
154
+ },
155
+ "slide-in-right": {
156
+ css:
157
+ "from { opacity: 0; transform: translateX(16px); }\n" +
158
+ "to { opacity: 1; transform: translateX(0); }",
159
+ defaultDuration: 280,
160
+ iteration: "once",
161
+ purpose: "side-panel and chart-detail drawer entrance",
162
+ },
163
+ },
164
+ respectsReducedMotion: true,
165
+ },
166
+
167
+ density: "high",
168
+
169
+ patterns: {
170
+ button:
171
+ "Primary = solid lavender fill, white text, rounded-lg, shadow-panel. " +
172
+ "Secondary = white fill with 1px border, foreground text. Tertiary = text-link in lavender. " +
173
+ "Destructive = warm-red ghost (border + text), upgrades to solid only on confirm step. " +
174
+ "Hover: shadow-panel-lg + 4% darken, never scale (jumpiness in clinical chrome reads error-prone).",
175
+ card:
176
+ "Rounded-lg, white fill on cream background, 1px warm border, shadow-panel. " +
177
+ "Internal padding p-5 lg:p-6 (denser than marketing). " +
178
+ "Dashboard-tile variant uses a 4px top-border in the brand color matching the data (lavender = session, " +
179
+ "warm-blue = appointment, sage = adherence, amber = pending).",
180
+ input:
181
+ "Rounded-md, 1px warm border, white background. Compact height (h-9). " +
182
+ "Label sits above in Inter 500. Focus = 2px lavender ring at 40% opacity. " +
183
+ "Error = warm-red border + warm-red helper text below, no fill change. " +
184
+ "Inline validation appears as the user types — clinical forms need real-time feedback.",
185
+ cta:
186
+ "Primary lavender solid is the dashboard default. " +
187
+ "Marketing pages may pair primary + warm-blue ghost side-by-side. " +
188
+ "Appointment-booking CTAs always show the next-available slot in mono inside the button itself.",
189
+ },
190
+
191
+ details: {
192
+ selectionBg: "hsl(var(--lavender) / 0.22)",
193
+ selectionFg: "hsl(var(--foreground))",
194
+ focusRing: "2px solid hsl(var(--ring) / 0.5)",
195
+ scrollbarStyle: "thin",
196
+ },
197
+ };
@@ -0,0 +1,111 @@
1
+ # Design Direction — Tourism-Board
2
+
3
+ ## Ethos
4
+ Visit Iceland glacial cyan + saturated lava landscape · Brand USA patriotic blue-red traveler-story optimism · Visit Britain heritage red + GREAT-campaign display sans · Tourism New Zealand 100% Pure NZ green · Visit Japan cherry-blossom pink + woodblock indigo
5
+
6
+ ## Feel
7
+ Decoration-first tourism marketing — saturated landscape photography as the page itself. Bold Fraunces display at billboard scale, Source Sans body for the friendly traveler voice. Four bright signal accents anchor the category grid (Adventure cyan, Food saffron, Culture indigo, Nature moss); heritage red is the single CTA color across all categories. Reads like a Visit Iceland campaign poster taped to the wall of a hostel in Reykjavík, not a hotel-aggregator booking flow. Voice writes traveler-warm — *"go midnight-sun chasing in June"*, *"the cinnamon buns in Reykjavík are not optional"*, *"this is the long way around — and the right way"*.
8
+
9
+ ## Reference brands
10
+ - **Visit Iceland** → saturated landscape photography, bold display sans, glacial cyan accent. The dominant template — this direction owes Visit Iceland the photo-first card stack and Adventure category cyan.
11
+ - **Brand USA** → patriotic blue/red optimism, traveler-story-first composition. The traveler-story card-row shape and the heritage-red CTA discipline.
12
+ - **Visit Britain** → heritage red, GREAT-campaign display sans, postcard register. The single primary action color and the postcard-stack pacing.
13
+ - **Tourism New Zealand** → 100% Pure NZ green, full-bleed landscape film-grain. The Nature category moss color and the landscape-drift ken-burns.
14
+ - **Visit Japan** → cherry-blossom pink + woodblock indigo, color-blocking. The Culture category indigo and the seasonal cherry-soft eyebrow.
15
+
16
+ ## Tokens
17
+ HSL triples in `src/index.css`. Every token's `from:` comment names a brand origin.
18
+
19
+ Surface stack is **warm off-white paper** (background — Visit Britain postcard stock) → **pure white photo-card** (card/popover) → **warm paper deeper** (secondary/muted/accent). Depth comes from soft drop shadows on photo-cards plus a hue shift (warm paper sits under white photo-cards). The page is **soft and decorated**, never minimal — tourism-board earns the saturation other directions refuse.
20
+
21
+ Brand tokens: `--paper-warm` (Visit Britain off-white, background alias), `--ink-deep` (Visit Iceland landscape-ink, foreground), `--britain-red` (GREAT-campaign red, primary alias and the **only** CTA color), `--iceland-cyan` (Adventure category), `--saffron-spice` (Food category), `--indigo-print` (Culture category), `--moss-pure` (Nature category), `--cherry-soft` (Visit Japan seasonal eyebrow, used only on spring-season copy). Primary is `356 76% 48%` — Visit Britain heritage red.
22
+
23
+ ## Typography
24
+ - **Display:** Fraunces at 400/700/900. Heavy serif with optical-size variation — Visit Iceland / Visit Britain GREAT-campaign register. Category titles, destination headlines, traveler-story headers. Tracking `-0.025em` — heavy serifs at billboard scale need it.
25
+ - **Body:** Source Sans Pro at 400/600/700, **16px** with **line-height 1.6**. Friendly traveler-warmth voice, story prose, category descriptions.
26
+ - **Mono:** JetBrains Mono at 400. **Only small** — coordinates (64.1466° N, 21.9426° W), trip durations (12-day itinerary), traveler-story timestamps, photographer credits. Never display, never body.
27
+
28
+ Hierarchy is photo-first then bold-serif-headline: full-bleed landscape, Fraunces 900 over or beside it, Source Sans body underneath. H1 uses `clamp(3rem, 8vw, 6.5rem)` — campaign-poster scale, billboard register. Numbers always carry `font-variant-numeric: tabular-nums`. Font features: `"liga", "kern", "tnum"`.
29
+
30
+ ## Spacing
31
+ - **Container:** `max-w-7xl px-6 lg:px-10` — wide enough for 4-up category tiles and full-bleed landscape heroes.
32
+ - **Section padding tiers:**
33
+ - Hero: `pt-20 pb-16 lg:pt-32 lg:pb-24` — campaign-poster hero, landscape-photography-led
34
+ - Default: `py-16 lg:py-24`
35
+ - Tight: `py-12 lg:py-16`
36
+ - **Allowed scale values:** 4 8 12 16 20 24 32 40 48 64 80 96 128 160. Medium density — landscape photography breathes, traveler-story cards pack into a row.
37
+
38
+ ## Color
39
+ No hex anywhere. All color via tokens. Opacity via `/N` modifier on token.
40
+
41
+ The palette is **warm paper canvas + heritage red CTA + four category-coded signal colors**. The category discipline is non-negotiable:
42
+ - **Adventure** is always `--iceland-cyan` (`192 80% 42%`).
43
+ - **Food** is always `--saffron-spice` (`32 92% 52%`).
44
+ - **Culture** is always `--indigo-print` (`232 56% 32%`).
45
+ - **Nature** is always `--moss-pure` (`142 48% 36%`).
46
+
47
+ Mixing a category with the wrong color breaks the entire decoration system. Heritage red is the **only** primary CTA color — category colors do not become buttons. Pure black is forbidden — `--ink-deep` (`215 36% 12%`) replaces it. Pure white is permitted only as `--card` — photo-cards lift off the warm paper via hue shift plus shadow.
48
+
49
+ ## Radius
50
+ `--radius: 0.5rem` (8px). **Postcard-soft, billboard-bold.** Pills are allowed (`pillsAllowed: true`) and are the default for category chips (Adventure · Food · Culture · Nature), filter pills (Spring · Summer · Autumn · Winter), and the traveler-story author tag. The 8px corner reads like a printed postcard edge, not a delivery-app chip.
51
+
52
+ ## Shadows
53
+ **Soft.** Three utilities — postcard-stack register, no glows, no color-tinted drops:
54
+
55
+ - `.shadow-tile` — default category-tile elevation. Subtle two-layer.
56
+ - `.shadow-postcard` — photo-card and traveler-story-card elevation. Lifted enough to read "postcard sitting on the table."
57
+ - `.shadow-postcard-hover` — hover lift. Deeper drop with the same family.
58
+
59
+ Shadows are **near-neutral with a slight blue-ink bias**. Color-saturated drops break the campaign-poster register (which keeps the saturation in the photo, not the chrome).
60
+
61
+ ## Motion
62
+ Three keyframes:
63
+
64
+ - **`postcard-rise`** (700ms once) — tile and story-card entrance. translateY(16px) → 0.
65
+ - **`landscape-drift`** (24000ms infinite) — slow ken-burns on full-bleed landscape photography. Tourism NZ campaign-poster breathing. Hero-only.
66
+ - **`marker-pulse`** (2400ms infinite) — interactive map pin pulse on destination markers. Scale 1 → 1.4 with opacity decay.
67
+
68
+ Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored — `landscape-drift` and `marker-pulse` are disabled entirely; `postcard-rise` collapses to opacity-only.
69
+
70
+ ## Component patterns
71
+ - **Buttons:** primary = solid heritage-red rect, `rounded-md` (8px), weight 700, optionally tracked-uppercase Fraunces or Source Sans — 'Plan your trip', 'Get the visitor guide', 'See the map'. Secondary = bordered ghost (deep-ink border, paper bg). Category chips are pills, color-coded to category. **One primary CTA per surface** — heritage red is the only CTA color.
72
+ - **Cards (photo / traveler-story):** photo-card = `rounded-lg`, no border, white bg, `.shadow-postcard`. Full-bleed landscape photo top (4:3 or 3:2), category-color chip absolutely positioned upper-left, title in Fraunces display, body in Source Sans, optional traveler attribution row at bottom (avatar + name + trip-date in mono). Hover lifts to `.shadow-postcard-hover`. Category tile = same shape but landscape-photo-as-background with deep gradient overlay and Fraunces 900 white title overlaid.
73
+ - **Inputs:** compact (h-11) `rounded-md`, soft warm border, white bg. Focus uses heritage-red ring (2px at 45%). Search bar carries an embedded search icon and rounded-md corners.
74
+ - **CTAs:** filled heritage-red rect is the primary action. Tertiary CTAs use underline text-link in category color depending on context (cyan for adventure-focused, saffron for food-focused). **Never a gradient button** — tourism-board is bold flat color, never crypto-shimmer.
75
+
76
+ ## Recommended rich media
77
+ **Saturated landscape photography is the entire page.** Glacial cyan ocean, lava-black sand, golden-hour Tuscan hill, cherry-blossom Kyoto street, neon Tokyo crossing, Yellowstone geyser at sunrise, Maori carving in raking afternoon light. Full-bleed, color-graded to the campaign poster, never the empty-tourist-trail real-estate energy.
78
+
79
+ **AI tool recommendations.** **Midjourney / Flux** for landscape hero photography — *"Visit Iceland landscape photography, lava-black sand beach with glacial blue ice chunks, dramatic overcast sky, saturated color grade, 24mm, --ar 3:2"*. For traveler-story portraits, *"documentary travel portrait, woman with hiking pack at viewpoint, warm afternoon light, 50mm, Kodak Portra 400"*. Avoid Midjourney's default empty-tourist-trail register — explicitly prompt for saturated grade and dramatic light.
80
+
81
+ **Aspect ratios.** **3:2 landscape** for category tiles and hero photography (the dominant ratio — campaign-poster register). **4:5 portrait** for traveler-story author portraits and food-culture detail shots. **16:9** for the full-bleed hero only. **1:1** is reserved for the map-preview thumbnail.
82
+
83
+ **Color in imagery.** **Saturate, don't desaturate.** This is the one direction in the library that earns full color saturation — visitors are choosing a destination based on the photograph. Graded toward the campaign register: warm golden hours, dramatic overcast for Iceland-shape destinations, midday saturation for tropical-shape destinations, neon for nightlife-shape destinations.
84
+
85
+ **Map.** The interactive map preview lives as a flat-illustration map (not a Google-Maps satellite tile), with category-colored pins (cyan Adventure, saffron Food, indigo Culture, moss Nature) that carry the `marker-pulse` animation. Hover reveals a small destination label.
86
+
87
+ **Traveler stories.** Documentary-portrait photography (50mm, warm late-afternoon light) of real travelers in-destination — at a viewpoint, at a meal, at a craft workshop. Stories run as 3-card rows with avatar + name + trip duration + 2-sentence pull-quote.
88
+
89
+ **Video.** Hero only — single 28s muted loop of a landscape shot with `landscape-drift` ken-burns. Never autoplay with sound. ≤14 MB AV1.
90
+
91
+ **Captions.** Destination, region, photographer credit, coordinates — in JetBrains Mono small caps. *"Reynisfjara · South Coast · Photograph by Ragnar Axelsson · 63.4061° N"* style attribution always.
92
+
93
+ **Performance.** Hero landscape image ≤260 KB AVIF at 2400w; category-tile photography ≤140 KB each; story-card portraits ≤100 KB. LCP under 2.6s.
94
+
95
+ **Avoid.** Empty-tourist-trail real-estate-listing photography. Stock smiling-couple-on-beach photos. Generic "explore the world" hotel-aggregator language. Lens flare. Pop-up trip-planner modals. Hand-drawn vector illustrations of landmarks (Brand USA tried that era; it didn't age well). Anything that reads more **Booking.com than Visit Iceland.**
96
+
97
+ **Accessibility.** Long-form alt-text for landscape photography — *"A glacial blue iceberg stranded on lava-black sand at Reynisfjara on the Iceland south coast, photographed under dramatic overcast light."* Category chips must carry a `data-category` attribute and an icon, not color alone — color-blind users need the category in the DOM. Map pins must have `<title>` in SVG.
98
+
99
+ ## Component families
100
+ None at install time. As `*CategoryTile`, `*PhotoCard`, `*TravelerStoryCard`, `*MapPreview`, `*SeasonalEyebrow` families emerge, the Director lists them here.
101
+
102
+ ## Details
103
+ - **Selection:** `hsl(var(--primary) / 0.25)` background, foreground text — heritage red highlight on warm paper.
104
+ - **Focus ring:** `2px solid hsl(var(--ring) / 0.5)` — heritage red at 50%.
105
+ - **Scrollbar:** thin.
106
+
107
+ ## Exceptions
108
+ None yet. A **destination-specific seasonal variant** (cherry-soft for spring Japan pages, midnight-sun cyan for summer Iceland pages, golden-hour for autumn Britain pages) is anticipated as a within-direction modulation. When an intentional one-of-one violation lands, add it here with the reason.
109
+
110
+ ## Revisions
111
+ - Initial direction, generated at install time.
@@ -0,0 +1,173 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const tourismBoard: Direction = {
4
+ name: "tourism-board",
5
+ ethos: "Visit Iceland glacial cyan + lava saturation · Brand USA blue-red-bright optimism · Visit Britain heritage red + display sans · Tourism New Zealand pure-NZ green · Visit Japan saturated cherry + indigo",
6
+ references: [
7
+ { brand: "Visit Iceland", trait: "saturated landscape photography, bold display sans, glacial cyan accent" },
8
+ { brand: "Brand USA", trait: "patriotic blue/red optimism, traveler-story-first" },
9
+ { brand: "Visit Britain", trait: "heritage red, GREAT campaign display sans, postcard register" },
10
+ { brand: "Tourism New Zealand", trait: "100% Pure NZ green, full-bleed landscape film grain" },
11
+ { brand: "Visit Japan", trait: "cherry-blossom pink + indigo, woodblock-print color blocking" },
12
+ ],
13
+ feel:
14
+ "Decoration-first tourism marketing — saturated landscape photography as the page itself. " +
15
+ "Bold display sans at billboard scale, traveler-warmth voice, four bright signal accents that anchor categories " +
16
+ "(Adventure cyan, Food saffron, Culture indigo, Nature moss). Reads like a Visit Iceland campaign poster, not an OTA.",
17
+
18
+ fonts: {
19
+ display: {
20
+ family: "Fraunces",
21
+ fallback: ["Playfair Display", "Source Serif Pro", "Georgia", "serif"],
22
+ from: "Visit Iceland + Visit Britain GREAT-campaign display register — heavy serif with optical-size variation",
23
+ googleFont: "Fraunces",
24
+ weights: [400, 700, 900],
25
+ },
26
+ body: {
27
+ family: "Source Sans Pro",
28
+ fallback: ["Inter", "system-ui", "sans-serif"],
29
+ from: "Brand USA / Tourism NZ body sans — friendly, traveler-readable at small sizes",
30
+ googleFont: "Source+Sans+Pro",
31
+ weights: [400, 600, 700],
32
+ },
33
+ mono: {
34
+ family: "JetBrains Mono",
35
+ fallback: ["IBM Plex Mono", "ui-monospace", "monospace"],
36
+ from: "small only — coordinates, trip durations, traveler-story timestamps, photographer credits",
37
+ googleFont: "JetBrains+Mono",
38
+ weights: [400],
39
+ },
40
+ },
41
+
42
+ typography: {
43
+ headingTracking: "-0.025em",
44
+ bodyTracking: "0",
45
+ fontFeatureSettings: '"liga", "kern", "tnum"',
46
+ h1ScaleClamp: "clamp(3rem, 8vw, 6.5rem)",
47
+ bodyBaseSize: "1rem",
48
+ bodyLineHeight: "1.6",
49
+ },
50
+
51
+ colors: {
52
+ background: { hsl: "40 28% 96%", from: "Visit Britain off-white paper — warm postcard stock, never pure white" },
53
+ foreground: { hsl: "215 36% 12%", from: "Visit Iceland deep-ink — landscape-photo high-contrast text" },
54
+ card: { hsl: "0 0% 100%", from: "pure white photo-card surface — lifts off warm paper" },
55
+ popover: { hsl: "0 0% 100%", from: "same as card" },
56
+ primary: { hsl: "356 76% 48%", from: "Visit Britain heritage red — GREAT-campaign canonical" },
57
+ primaryForeground: { hsl: "40 28% 96%", from: "paper on heritage red" },
58
+ secondary: { hsl: "40 24% 92%", from: "warm paper deeper — section divider surfaces" },
59
+ secondaryForeground: { hsl: "215 36% 12%", from: "deep-ink on warm paper" },
60
+ muted: { hsl: "40 18% 90%", from: "muted paper — inactive chip bg" },
61
+ mutedForeground: { hsl: "215 18% 44%", from: "neutral gray — captions, photographer credits" },
62
+ accent: { hsl: "40 28% 88%", from: "hover paper — one tier deeper than secondary" },
63
+ accentForeground: { hsl: "215 36% 12%", from: "deep-ink on accent" },
64
+ border: { hsl: "40 14% 80%", from: "warm paper border — visible but warm" },
65
+ input: { hsl: "40 14% 78%", from: "input border — slightly deeper" },
66
+ ring: { hsl: "356 76% 48%", from: "heritage red focus" },
67
+ destructive: { hsl: "356 76% 48%", from: "alias of primary — heritage red is the warning red" },
68
+ destructiveForeground: { hsl: "40 28% 96%", from: "paper on heritage red" },
69
+ brand: {
70
+ "paper-warm": { hsl: "40 28% 96%", from: "Visit Britain off-white postcard stock — background alias" },
71
+ "ink-deep": { hsl: "215 36% 12%", from: "Visit Iceland landscape-ink — foreground alias" },
72
+ "britain-red": { hsl: "356 76% 48%", from: "GREAT-campaign heritage red — primary alias" },
73
+ "iceland-cyan": { hsl: "192 80% 42%", from: "Visit Iceland glacial cyan — Adventure category color" },
74
+ "saffron-spice": { hsl: "32 92% 52%", from: "Visit Japan / Brand USA saffron — Food category color" },
75
+ "indigo-print": { hsl: "232 56% 32%", from: "Visit Japan woodblock indigo — Culture category color" },
76
+ "moss-pure": { hsl: "142 48% 36%", from: "Tourism NZ 100% Pure moss — Nature category color" },
77
+ "cherry-soft": { hsl: "346 78% 78%", from: "Visit Japan cherry-blossom pink — used only on Visit Japan seasonal eyebrows" },
78
+ },
79
+ },
80
+
81
+ spacing: {
82
+ base: 4,
83
+ scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128, 160],
84
+ containerMax: "max-w-7xl",
85
+ containerPadding: "px-6 lg:px-10",
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: "0.5rem",
95
+ pillsAllowed: true,
96
+ },
97
+
98
+ shadows: {
99
+ style: "soft",
100
+ utilities: {
101
+ "shadow-postcard":
102
+ "0 2px 4px hsl(215 36% 12% / 0.06), 0 12px 32px hsl(215 36% 12% / 0.10)",
103
+ "shadow-postcard-hover":
104
+ "0 4px 8px hsl(215 36% 12% / 0.08), 0 24px 48px hsl(215 36% 12% / 0.14)",
105
+ "shadow-tile":
106
+ "0 1px 2px hsl(215 36% 12% / 0.05), 0 6px 18px hsl(215 36% 12% / 0.08)",
107
+ },
108
+ },
109
+
110
+ motion: {
111
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
112
+ durations: {
113
+ reveal: 700,
114
+ loop: 3200,
115
+ ambient: 24000,
116
+ },
117
+ keyframes: {
118
+ "postcard-rise": {
119
+ css:
120
+ "from { opacity: 0; transform: translateY(16px); }\n" +
121
+ "to { opacity: 1; transform: translateY(0); }",
122
+ defaultDuration: 700,
123
+ iteration: "once",
124
+ purpose: "tile and story-card entrance — postcard-arriving register",
125
+ },
126
+ "landscape-drift": {
127
+ css:
128
+ "0% { transform: scale(1.06) translate(0, 0); }\n" +
129
+ "100% { transform: scale(1.16) translate(-2%, -1%); }",
130
+ defaultDuration: 24000,
131
+ iteration: "infinite",
132
+ purpose: "slow ken-burns on full-bleed landscape photography — campaign-poster breathing",
133
+ },
134
+ "marker-pulse": {
135
+ css:
136
+ "0%, 100% { transform: scale(1); opacity: 0.85; }\n" +
137
+ "50% { transform: scale(1.4); opacity: 0.45; }",
138
+ defaultDuration: 2400,
139
+ iteration: "infinite",
140
+ purpose: "interactive map pin pulse — destination markers on the map preview",
141
+ },
142
+ },
143
+ respectsReducedMotion: true,
144
+ },
145
+
146
+ density: "medium",
147
+
148
+ patterns: {
149
+ button:
150
+ "Primary = solid heritage-red rect, rounded-md (8px), weight 700, tracked-uppercase Fraunces or Source Sans. " +
151
+ "Secondary = bordered ghost (deep-ink border, paper bg). " +
152
+ "Category chips are pills, color-coded (Adventure cyan, Food saffron, Culture indigo, Nature moss). " +
153
+ "One primary CTA per surface.",
154
+ card:
155
+ "Photo-card = rounded-lg (8px), no border, white bg, .shadow-postcard. " +
156
+ "Full-bleed photo top (4:3 or 3:2), category-color chip overlay, title in Fraunces display, body in Source Sans. " +
157
+ "Hover lifts to .shadow-postcard-hover. Traveler-story cards have a portrait avatar + name + trip-date mono caption.",
158
+ input:
159
+ "Compact (h-11) rounded-md, soft warm border, white bg. " +
160
+ "Focus uses heritage-red ring (2px at 45%). Search bar is rounded-md with embedded search icon.",
161
+ cta:
162
+ "Filled heritage-red rect for primary actions ('Plan your trip', 'Get the guide'). " +
163
+ "Tertiary uses underline text-link in category color (cyan/saffron/indigo/moss depending on context). " +
164
+ "Never a gradient button — tourism-board is bold flat color, not crypto.",
165
+ },
166
+
167
+ details: {
168
+ selectionBg: "hsl(var(--primary) / 0.25)",
169
+ selectionFg: "hsl(var(--foreground))",
170
+ focusRing: "2px solid hsl(var(--ring) / 0.5)",
171
+ scrollbarStyle: "thin",
172
+ },
173
+ };
@@ -0,0 +1,79 @@
1
+ # Design Direction — Toys-Modern
2
+
3
+ ## Ethos
4
+ Lovevery developmental-age system · Maisonette curated-boutique playfulness · KiwiCo monthly-kit anticipation · Tegu magnetic-block primaries · Petit Collage flat-illustration color collage
5
+
6
+ ## Feel
7
+ Bright friendly primaries on warm cream — yolk, tomato, grass, sky — color-blocked like Tegu blocks on a play mat. Generous shape-decoration: dotted developmental timelines, milestone confetti, paper-cut illustration accents. Rounded geometric serif for chrome, friendly humanist sans for body. Reads designed-for-kids without patronizing the parent reading it — Lovevery's trick.
8
+
9
+ ## Reference brands
10
+ - **Lovevery** → developmental-age system + Montessori-restrained primaries. The principal reference for age-band structure.
11
+ - **Maisonette** → curated-boutique playful: cream + sage + tomato, never neon.
12
+ - **KiwiCo** → monthly-kit anticipation; the kit itself is the hero, not a generic feature card.
13
+ - **Tegu** → magnetic-block primaries — saturated tomato/yolk/grass/sky, the canonical palette.
14
+ - **Petit Collage** → flat-illustration color collage, paper-cut shapes as background decoration.
15
+
16
+ ## Tokens
17
+ Surface stack is **warm cream** (background) → **lighter cream** (card) → **deeper cream / sky tint** (secondary / muted / accent). Brand tokens: `--tomato`, `--yolk`, `--grass`, `--sky`, `--plum`, `--cream`, `--ink`. Primary is `--tomato` — the GO color, the block-red. `--yolk` is the milestone/star accent. `--grass` is wellness/completed-stage. `--sky` is the secondary friendly action. `--plum` is **decoration-only** — paper-cut shape blocks, never a CTA or text color on a working surface.
18
+
19
+ ## Typography
20
+ - **Display:** Recoleta (Fraunces fallback). Warm rounded serif — friendly at large sizes, optical-size-aware. Weights 500–700.
21
+ - **Body:** Nunito. Round humanist body, friendly at every size. 16px base, line-height 1.6.
22
+ - **Mono:** Space Mono. Playful kit-numbers ("KIT 24"), age-band labels ("18–24 MO"). Geometric mono with character — not a sterile dev-tool mono.
23
+
24
+ H1 uses `clamp(2.25rem, 5.5vw, 4rem)`. Tracking `-0.01em` on display, `0.005em` on body.
25
+
26
+ ## Spacing
27
+ - **Container:** `max-w-6xl px-6 lg:px-10` — decoration needs room.
28
+ - **Section padding tiers:**
29
+ - Hero: `pt-20 pb-16 lg:pt-28 lg:pb-24`
30
+ - Default: `py-16 lg:py-24`
31
+ - Tight: `py-12 lg:py-16`
32
+ - **Allowed scale values:** 4 6 8 12 16 20 24 32 48 64 80 96. Note: no fine micro-steps (no 10, 14) — decoration breathes in larger jumps.
33
+
34
+ ## Color
35
+ No hex in components — tokens only. Pure white is forbidden; use `--cream` for paper. Pure black forbidden; use `--ink`. **Color blocking is the language.** Pages may stack `--tomato`, `--yolk`, `--grass`, `--sky` as full-bleed color blocks — Tegu-block fashion — but never *neon* and never *more than four blocks per viewport*. Plum is decoration-only.
36
+
37
+ ## Radius
38
+ `--radius: 1.5rem` (24px). Block-rounded — playful but not bubbly. Pills core for age-band tabs and chips. Sharp corners forbidden except on intentional paper-cut decorative shapes (triangles, squares — set apart from chrome).
39
+
40
+ ## Shadows
41
+ **Soft + lift.** `.shadow-block` standard, `.shadow-block-lift` (4px hard-drop + soft halo — buttons "pop" like Tegu blocks), `.shadow-confetti` (yolk-tinted lift for achievement/milestone moments). No glows.
42
+
43
+ ## Motion
44
+ Four keyframes: `fade-rise` (500ms entrance), `milestone-pop` (480ms scale + rotate for confetti/star moments), `shape-drift` (6000ms ambient drift for background paper-cut shapes — decoration-only), `soft-pulse` (2400ms loop for next-kit-shipping countdown). `prefers-reduced-motion` honored — shape-drift halts entirely under reduced motion.
45
+
46
+ Easing `cubic-bezier(0.22, 1, 0.36, 1)`.
47
+
48
+ ## Component patterns
49
+ - **Buttons:** primary = tomato solid + cream text, rounded-2xl, shadow-block. Secondary = sky solid + cream text (Tegu siblings, not ghosts). Tertiary = ink text-link with tomato underline. Hover: shadow-block-lift — buttons literally pop.
50
+ - **Cards:** rounded-3xl, cream-card on cream-paper, 1px kraft border, shadow-block. **Age-band cards** get a 4px colored top-border (tomato / yolk / grass / sky / plum) keyed to the band. Decorative shape-blocks (an absolute-positioned tomato circle, a yolk triangle) may sit *behind* a card — paper-cut accent, purely decorative.
51
+ - **Inputs:** rounded-2xl, 2px kraft border (thicker than soft-modern — block-energy), cream-card fill. Focus = 3px tomato ring at 35% opacity.
52
+ - **Age-band tabs:** segmented pills, 6 bands (0–6 / 6–12 / 12–18 / 18–24 / 2–3 / 3–4 yrs). Active = colored fill (band-keyed), cream text, shadow-block-lift. Inactive = cream + kraft border.
53
+ - **Milestone-met chip:** grass pill with a small ★ (yolk star) icon, milestone-pop animation on award.
54
+ - **Monthly kit-feature card:** the largest tile on the page — colored top-band, kit-number in Space Mono, age-band in pill, photo of the actual kit contents, "Subscribe" CTA in primary tomato.
55
+
56
+ ## Recommended rich media
57
+ Photography is the lead medium: kid hands on toys (rarely faces — the toy is the hero), flat-lay overhead shots of kit contents on cream linen, paper-cut illustration accents in tomato/yolk/grass between sections. Color graded warm-cream, never desaturated. Aspect ratios 1:1 square for product, 4:5 portrait for kid-with-toy, 3:2 landscape for environmental "play mat" scenes. Illustration is **paper-cut flat shapes** (Petit Collage / Eric Carle) — never AI-glossy 3D, never cartoon-vector mascots.
58
+
59
+ **AI tool recommendations:** Midjourney with *"flat paper-cut illustration, Eric Carle style, primary colors on cream paper, no gradients, no shading"* for accents. For product: *"wooden stacking toy on cream linen, overhead flat-lay, natural soft light, no props"*. For kids: *"toddler hands stacking wooden blocks, close-up, natural window light, Kodak Portra 400, no faces visible"*. Avoid bright commercial toy-catalog stock.
60
+
61
+ **Performance:** hero ≤140 KB AVIF; kit-content flat-lay ≤120 KB; illustration accents ≤30 KB SVG (paper-cut shapes vectorize beautifully). LCP ≤2s.
62
+
63
+ **Avoid:** cartoon mascot characters (we are not Toys-R-Us), neon brights, glitter/sparkle effects, "STEM" lab-coat shots, child-actor faces with forced smiles, holiday-themed gift-wrap chrome (the brand is year-round), dark-mode toggle, glassmorphic anything.
64
+
65
+ **Accessibility:** alt-text describes the toy and the play behavior. *"A toddler's hands stack four magnetic wooden blocks into a tower."* Color blocks must meet 4.5:1 contrast when foreground text sits on them — never cream-on-yolk for body copy.
66
+
67
+ ## Component families
68
+ None at install time. Age-band-tab, milestone-chip, kit-feature, and shape-block-decoration are the four canonical bespoke families.
69
+
70
+ ## Details
71
+ - **Selection:** `hsl(var(--yolk) / 0.45)` — bright, playful, the only place yolk touches body text.
72
+ - **Focus ring:** `3px solid hsl(var(--ring) / 0.4)` — visible without screaming.
73
+ - **Scrollbar:** auto (we want the system scrollbar to show in modal / kit-list contexts — adds to the "real product page" feel).
74
+
75
+ ## Exceptions
76
+ None yet.
77
+
78
+ ## Revisions
79
+ - Initial direction, generated at install time.