@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,107 @@
1
+ # Design Direction — Indie-Art-Game
2
+
3
+ ## Ethos
4
+ Hyper Light Drifter atmospheric pixel · Cuphead 1930s rubber-hose · Untitled Goose Game playful · Outer Wilds wonder · Spiritfarer warmth
5
+
6
+ ## Feel
7
+ Atmospheric indie-game art direction. Dusky purple-pink-cyan palettes with warm sunset interludes. Pixel-art-adjacent display fonts but readable. Hand-drawn illustration prominence. Reads as a beloved Steam indie title's marketing site, not a SaaS app.
8
+
9
+ ## Reference brands
10
+ - **Hyper Light Drifter** → atmospheric pixel art, dusky purple-pink palettes, glowing cyan lantern accents. The dominant visual reference.
11
+ - **Cuphead** → 1930s rubber-hose animation, watercolor-on-paper textures, hand-illustrated character art. The parchment-tier alternate surface.
12
+ - **Untitled Goose Game** → minimalist mischief, sparse composition, lots of negative space. Density discipline.
13
+ - **Outer Wilds** → wonder, planetarium scale, deep cosmic blues. The "look up" hero gesture, botanical accent.
14
+ - **Spiritfarer** → warm sunset palettes, hand-drawn character art. The sunset-orange interlude color, narrative warmth.
15
+
16
+ ## Tokens
17
+ HSL triples in `src/index.css`. Every token's `from:` comment names its brand origin — untraceable tokens fail review. Brand tokens: `--hot-pink` (HLD secondary accent), `--sunset-orange` (Spiritfarer warmth), `--deep-purple` (= secondary; atmospheric depth), `--moss` (Outer Wilds botanical), `--parchment` (Cuphead watercolor paper card tier), `--glow-cyan` (= primary; HLD lantern light), `--night-purple` (= background; the dusky sky).
18
+
19
+ Surface stack steps the lightness in a constant `270` purple-biased hue: `background → card → popover → muted`. Depth comes from **hairline borders, pixel drop-shadows, and soft cyan/pink glows** — never from blurry conventional drop shadow.
20
+
21
+ Pure black is forbidden; `--background` is `270 35% 12%` (Hyper Light Drifter dusky night purple, never OLED-off). Pure white is forbidden; `--foreground` is `35 15% 92%` (Spiritfarer warm sunset off-white).
22
+
23
+ Primary is **glowing cyan** (`180 85% 60%`) — the HLD signature lantern light. Accent is **hot pink** (`325 85% 65%`) — HLD's secondary, the cyan's counterpart. The two are designed to be paired at full saturation; this is one of the few directions where two highly saturated colors actively belong together.
24
+
25
+ ## Typography
26
+ - **Display:** VT323 (pixel-art-adjacent monospace display — CRT terminal heritage, game-UI convention). Fallback DotGothic16, then Courier Prime. Single weight 400. Used for headlines, button labels, HUD readouts.
27
+ - **Body:** Inter (readable geometric sans). The pixel font is reserved for display only — body must read at long form. Weights 400/500/600/700.
28
+ - **Mono:** VT323 — same family as display. Game-UI convention: HUD numerics speak in the same voice as headlines. Used for stats, prices, timers, ID strings.
29
+
30
+ Heading tracking is **`0.02em`** — the pixel grid reads better with a touch of air. Body tracking `0`. Font features: `"tnum"` for tabular numerics. H1 uses `clamp(2.75rem, 8vw, 6rem)` — oversized title-card scale, the kind a Steam splash screen wears.
31
+
32
+ ## Spacing
33
+ - **Container:** `max-w-6xl px-6 lg:px-10`.
34
+ - **Section padding tiers:**
35
+ - Hero: `pt-24 pb-16 lg:pt-32 lg:pb-24`
36
+ - Default: `py-20 lg:py-28`
37
+ - Tight: `py-12 lg:py-16`
38
+ - **Allowed scale values:** 4 8 12 16 20 24 32 40 48 64 80 96 128. Medium-low density — atmospheric breathing, never crammed. Negative space carries the wonder.
39
+
40
+ ## Color
41
+ No hex anywhere in component files. All color via tokens. The signature pairing is `--primary` (cyan) and `--accent` (hot pink) — these are *meant* to live on the same surface, against the dusky purple background. Sunset-orange and moss are interlude colors: a single section may swing fully orange (Spiritfarer warmth) or fully moss (Outer Wilds botanical interior) without breaking the language.
42
+
43
+ Parchment is the one exception: when a card uses `bg-brand-parchment`, foreground must swap to `--deep-purple` for contrast. That is the Cuphead watercolor-on-paper surface — use it as a tonal shift, not the default.
44
+
45
+ ## Radius
46
+ `--radius: 0`. **Pixel-art sharp — no anti-aliasing on corners.** Pills disallowed (`pillsAllowed: false`) — pills are circles, and circles don't exist on the pixel grid this direction simulates.
47
+
48
+ ## Shadows
49
+ **Glow style.** Three utilities:
50
+ - `.glow-cyan-soft` — `0 0 0 1px primary/0.35, 0 8px 24px primary/0.22, 0 32px 80px primary/0.18`. HLD-signature soft cyan outer glow. Hover elements, interactive cards, primary CTA.
51
+ - `.glow-pink-soft` — same construction with `--accent`. Companion glow for secondary hover surfaces, accent-tier cards.
52
+ - `.shadow-pixel` — `2px 2px 0 0 hsl(var(--border))`. Hard pixel-art drop shadow with no blur and integer offset. Applied to buttons, pixel-styled cards, anything that should read as a sprite on a tile grid.
53
+
54
+ Conventional blurred drop shadows are forbidden. Either you get the **soft atmospheric glow** (cyan or pink) or the **hard pixel offset** — there is no middle.
55
+
56
+ ## Motion
57
+ Five keyframes. Durations cluster at **600ms (reveal), 2.4-3s (loops), 12s (ambient particles), 200ms (impact)**:
58
+ - `particle-float` (12000ms infinite) — translate Y up across the viewport with opacity fade in/out. Ambient dust/light motes against the night sky. Background-layer only, never on functional UI.
59
+ - `gentle-bob` (3000ms infinite ease-in-out) — subtle 2px vertical drift. Floating call-outs, scroll hints, idle character art.
60
+ - `screen-shake-soft` (200ms once) — 3px shake on impact. **Used sparingly** for game-feel moments only: boss reveal, error toast, victory confirm. Never on hover, never on a load.
61
+ - `rise-in` (600ms once) — opacity + 16px translate. Section entrance, title cards.
62
+ - `pulse-glow-cyan` (2400ms infinite) — expanding cyan box-shadow ring. Lantern heartbeat for the single hero CTA, **one per page max**.
63
+
64
+ Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored — every keyframe is wrapped in the media query and `particle-float` drops to a single static frame.
65
+
66
+ ## Component patterns
67
+ - **Buttons:** pixel-edge solid (sharp 0 radius), `.shadow-pixel` 2x2 offset, VT323 display caps with `tracking-[0.04em]`. **Primary = glowing cyan fill** on the dusky purple background, foreground dark for legibility. Hover intensifies the `.glow-cyan-soft` outer halo — the button becomes the lantern. No ghost-only buttons by default; ghost variant reserved for tertiary actions inside dense panels.
68
+ - **Cards:** sharp `rounded-none`, 1px `--border` hairline, `bg-card` one stop above background. Padding `p-6 lg:p-10`. Optional `.glow-cyan-soft` or `.glow-pink-soft` for hero/feature cards. **Parchment-tier cards** (`bg-brand-parchment`, foreground swapped to `--deep-purple`) are reserved for hand-illustrated Cuphead watercolor surfaces — use sparingly to mark a tonal shift.
69
+ - **Inputs:** full box with 1px `--border`, `bg-card`, 0 radius. Label sits above in VT323 display, `tracking-[0.04em]`. Focus shifts border to `--ring` (cyan) and adds a 1px cyan inner glow. **No border-bottom-only treatment** — pixel-art language wants full rectangles.
70
+ - **CTAs:** pixel-edge solid button is the canonical CTA — cyan fill, pixel drop-shadow, VT323 caps. Hero CTA may carry `.pulse-glow-cyan` (lantern heartbeat ring, one per page). Tertiary CTAs allowed as foreground-color text links with a pixel-styled hover underline (2px, no anti-alias).
71
+
72
+ ## Recommended rich media
73
+
74
+ **Cover imagery.** Illustrated game art: Cuphead watercolor-on-paper character portraits, Hyper Light Drifter pixel landscapes (dusky horizons, lone-figure silhouettes against glowing cyan), animated GIF-style loops, environmental concept art, hand-drawn character portraits. Every page should feel like a screenshot or marketing splash from a beloved Steam indie title.
75
+
76
+ **AI tool recommendations.**
77
+ - **Midjourney** — pixel landscapes and atmospheric scenes. Prompt fragment: `Hyper Light Drifter pixel art, dusky purple sunset, atmospheric, glowing cyan accent`. Adjust for Spiritfarer warmth by swapping in `warm sunset orange campfire glow`.
78
+ - **Recraft** — vector hand-drawn illustration in the Cuphead tradition. Use for character portraits and parchment-card surfaces.
79
+ - **Aseprite-style pixel art generators** — authentic 16x16 / 32x32 sprite work for HUD icons, status indicators, decorative ornament. Never upscale-blur a sprite; nearest-neighbor only.
80
+
81
+ **Aspect ratios.** 16:9 for environment shots and hero landscapes. 1:1 for character portraits and Steam-card-style lockups. Occasional 4:5 for game-card portrait composition. **Never 9:16 vertical** — that reads social, not indie-game-marketing.
82
+
83
+ **Color.** Every image should reach into the palette: dusky purple base, glowing cyan accent, hot pink counter-accent, optional sunset-orange interlude. Single-color desaturated images break the atmospheric premise.
84
+
85
+ **What to AVOID.**
86
+ - Photorealism — this direction is hand-illustrated, never photographic
87
+ - Gradient meshes — that's the glassmorphic direction, not this one
88
+ - Corporate enterprise palettes — flat blues, sterile grays
89
+ - Bright midday photography — the canvas is dusk
90
+ - Anti-aliased pixel art — if it's pixel art, render with nearest-neighbor
91
+ - Soft drop shadows on UI elements (use `.shadow-pixel` for hard offset or `.glow-cyan-soft` for atmosphere)
92
+
93
+ **Accessibility.** Every animated GIF/video has a still poster frame. Particle layers are marked `aria-hidden` — they are decoration. Character portraits and concept art carry descriptive alt-text naming the scene ("pixel-art lone figure on a clifftop at dusk, glowing cyan lantern in hand"). `screen-shake-soft` is suppressed under `prefers-reduced-motion`. Color contrast: verify the cyan and hot-pink on dusky-purple background combinations meet WCAG AA — these are saturated and live close to each other in luminance.
94
+
95
+ ## Component families
96
+ None at install time. Likely first families: `LanternCTA` (cyan fill + pulse-glow + pixel-shadow), `ParchmentCard` (Cuphead watercolor tier), `ParticleField` (background particle-float layer), `PixelHUD` (VT323 + tnum stat readouts). The Director appends conventions as they're established.
97
+
98
+ ## Details
99
+ - **Selection:** `hsl(var(--primary) / 0.35)` background, foreground text. The lantern light doubles as the selection color.
100
+ - **Focus ring:** `2px solid hsl(var(--ring))` — 2px not 1px, because pixel-grid alignment and dark-surface visibility both demand it.
101
+ - **Scrollbar:** thin.
102
+
103
+ ## Exceptions
104
+ None yet. When an intentional one-of-one violation lands, add it here with the reason.
105
+
106
+ ## Revisions
107
+ - Initial direction, generated at install time.
@@ -0,0 +1,216 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const indieArtGame: Direction = {
4
+ name: "indie-art-game",
5
+ ethos:
6
+ "Hyper Light Drifter atmospheric pixel · Cuphead 1930s rubber-hose · Untitled Goose Game playful · Outer Wilds wonder · Spiritfarer warmth",
7
+ references: [
8
+ {
9
+ brand: "Hyper Light Drifter",
10
+ trait: "atmospheric pixel art, dusky purple-pink palettes",
11
+ },
12
+ {
13
+ brand: "Cuphead",
14
+ trait: "1930s rubber-hose animation, watercolor-on-paper textures",
15
+ },
16
+ {
17
+ brand: "Untitled Goose Game",
18
+ trait: "minimalist mischief, sparse composition",
19
+ },
20
+ {
21
+ brand: "Outer Wilds",
22
+ trait: "wonder, planetarium scale, deep cosmic blues",
23
+ },
24
+ {
25
+ brand: "Spiritfarer",
26
+ trait: "warm sunset palettes, hand-drawn character art",
27
+ },
28
+ ],
29
+ feel:
30
+ "Atmospheric indie-game art direction. Dusky purple-pink-cyan palettes with warm sunset interludes. " +
31
+ "Pixel-art-adjacent display fonts but readable. Hand-drawn illustration prominence. " +
32
+ "Reads as a beloved Steam indie title's marketing site.",
33
+
34
+ fonts: {
35
+ display: {
36
+ family: "VT323",
37
+ fallback: ["DotGothic16", "Courier Prime", "ui-monospace", "Courier New", "monospace"],
38
+ from: "pixel-art-adjacent display — VT323 channels CRT terminal type, game-UI convention",
39
+ googleFont: "VT323",
40
+ weights: [400],
41
+ },
42
+ body: {
43
+ family: "Inter",
44
+ fallback: ["DM Sans", "system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
45
+ from: "Inter readable sans — pixel font reserved for display only, body must read at long form",
46
+ googleFont: "Inter",
47
+ weights: [400, 500, 600, 700],
48
+ },
49
+ mono: {
50
+ family: "VT323",
51
+ fallback: ["Courier Prime", "ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
52
+ from: "VT323 doubles as display and mono — game-UI convention, HUD numerics in the same voice as headlines",
53
+ googleFont: "VT323",
54
+ weights: [400],
55
+ },
56
+ },
57
+
58
+ typography: {
59
+ headingTracking: "0.02em", // VT323 pixel grid reads better with a touch of air
60
+ bodyTracking: "0",
61
+ fontFeatureSettings: '"tnum"', // tabular numerics for HUD/stat readouts
62
+ h1ScaleClamp: "clamp(2.75rem, 8vw, 6rem)", // oversized pixel display — title-card scale, never tasteful
63
+ bodyBaseSize: "1rem",
64
+ bodyLineHeight: "1.6",
65
+ },
66
+
67
+ colors: {
68
+ background: { hsl: "270 35% 12%", from: "Hyper Light Drifter dusky purple night sky — the atmospheric void" },
69
+ foreground: { hsl: "35 15% 92%", from: "Spiritfarer warm off-white — sunset aftermath, never pure white" },
70
+ card: { hsl: "270 32% 16%", from: "elevated purple — one stop above the night sky" },
71
+ popover: { hsl: "270 30% 19%", from: "popover surface — two stops up, still atmospheric purple" },
72
+ primary: { hsl: "180 85% 60%", from: "Hyper Light Drifter glowing cyan — signature accent, the lantern light" },
73
+ primaryForeground: { hsl: "270 35% 12%", from: "dusky purple on glowing cyan — HLD button face" },
74
+ secondary: { hsl: "280 50% 25%", from: "= brand.deep-purple — atmospheric depth, secondary tier surface" },
75
+ secondaryForeground: { hsl: "35 15% 92%", from: "warm off-white on deep purple" },
76
+ muted: { hsl: "270 25% 22%", from: "quiet purple panel — same family as card, fractionally lighter" },
77
+ mutedForeground: { hsl: "35 12% 72%", from: "warm dusk gray — Spiritfarer secondary text" },
78
+ accent: { hsl: "325 85% 65%", from: "= brand.hot-pink — HLD secondary accent, the cyan's counterpart" },
79
+ accentForeground: { hsl: "270 35% 12%", from: "dusky purple on hot pink" },
80
+ border: { hsl: "270 25% 28%", from: "atmospheric purple hairline — visible against the night, never harsh" },
81
+ input: { hsl: "270 25% 28%", from: "same as border — single hairline language across inputs and panels" },
82
+ ring: { hsl: "180 85% 60%", from: "glowing cyan ring — focus is the lantern light, HLD signature" },
83
+ destructive: { hsl: "8 78% 55%", from: "warning lamp red — distinct from hot pink, reserved for alerts" },
84
+ destructiveForeground: { hsl: "35 15% 92%", from: "warm off-white on alert" },
85
+ brand: {
86
+ "hot-pink": { hsl: "325 85% 65%", from: "Hyper Light Drifter secondary accent — paired with cyan, the dusk-flare" },
87
+ "sunset-orange": { hsl: "24 90% 60%", from: "Spiritfarer warmth — campfire glow, sunset interlude color" },
88
+ "deep-purple": { hsl: "280 50% 25%", from: "atmospheric depth — Outer Wilds dusk, deep-tier surface anchor" },
89
+ "moss": { hsl: "145 35% 45%", from: "Outer Wilds botanical — quiet planet flora, status/growth accent" },
90
+ "parchment": { hsl: "35 25% 88%", from: "Cuphead watercolor paper — card UI tier when the surface is hand-illustrated" },
91
+ "glow-cyan": { hsl: "180 85% 60%", from: "= primary; HLD lantern light, also semantic for the glow utilities" },
92
+ "night-purple": { hsl: "270 35% 12%", from: "= background; the dusky night, also a token for hero composition" },
93
+ },
94
+ },
95
+
96
+ spacing: {
97
+ base: 4,
98
+ scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128], // medium-low — atmospheric breathing
99
+ containerMax: "max-w-6xl",
100
+ containerPadding: "px-6 lg:px-10",
101
+ sectionPadding: {
102
+ hero: "pt-24 pb-16 lg:pt-32 lg:pb-24",
103
+ default: "py-20 lg:py-28",
104
+ tight: "py-12 lg:py-16",
105
+ },
106
+ },
107
+
108
+ radius: {
109
+ base: "0", // pixel-art sharp — no anti-aliasing on corners
110
+ pillsAllowed: false, // pills break the pixel grid; rectangles only
111
+ },
112
+
113
+ shadows: {
114
+ style: "glow",
115
+ utilities: {
116
+ "glow-cyan-soft":
117
+ "0 0 0 1px hsl(var(--primary) / 0.35), " +
118
+ "0 8px 24px hsl(var(--primary) / 0.22), " +
119
+ "0 32px 80px hsl(var(--primary) / 0.18)", // HLD-signature soft cyan outer glow — hover/interactive
120
+ "glow-pink-soft":
121
+ "0 0 0 1px hsl(var(--accent) / 0.35), " +
122
+ "0 8px 24px hsl(var(--accent) / 0.22), " +
123
+ "0 32px 80px hsl(var(--accent) / 0.18)", // companion pink glow — secondary hover surfaces
124
+ "shadow-pixel":
125
+ "2px 2px 0 0 hsl(var(--border))", // hard pixel-art drop shadow — no blur, integer offset
126
+ },
127
+ },
128
+
129
+ motion: {
130
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
131
+ durations: {
132
+ reveal: 600, // entrance — quick but not jarring
133
+ loop: 3000, // gentle-bob cycle
134
+ ambient: 12000, // particle-float — slow rising particles
135
+ },
136
+ keyframes: {
137
+ "particle-float": {
138
+ css:
139
+ "0% { transform: translateY(0); opacity: 0; }\n" +
140
+ "10% { opacity: 0.8; }\n" +
141
+ "90% { opacity: 0.8; }\n" +
142
+ "100% { transform: translateY(-120vh); opacity: 0; }",
143
+ defaultDuration: 12000,
144
+ iteration: "infinite",
145
+ purpose: "ambient particle drift — slow rising dust/light motes against the night sky background",
146
+ },
147
+ "gentle-bob": {
148
+ css:
149
+ "0%, 100% { transform: translateY(0); }\n" +
150
+ "50% { transform: translateY(-2px); }",
151
+ defaultDuration: 3000,
152
+ iteration: "infinite",
153
+ purpose: "subtle 2px vertical drift for floating UI elements — call-outs, scroll hints, idle character art",
154
+ },
155
+ "screen-shake-soft": {
156
+ css:
157
+ "0%, 100% { transform: translate(0, 0); }\n" +
158
+ "20% { transform: translate(-3px, 1px); }\n" +
159
+ "40% { transform: translate(2px, -2px); }\n" +
160
+ "60% { transform: translate(-2px, 2px); }\n" +
161
+ "80% { transform: translate(1px, -1px); }",
162
+ defaultDuration: 200,
163
+ iteration: "once",
164
+ purpose: "3px shake on impact — used sparingly for game-feel moments (boss reveal, error, victory)",
165
+ },
166
+ "rise-in": {
167
+ css:
168
+ "from { opacity: 0; transform: translateY(16px); }\n" +
169
+ "to { opacity: 1; transform: translateY(0); }",
170
+ defaultDuration: 600,
171
+ iteration: "once",
172
+ purpose: "section entrance — title cards and panel reveals",
173
+ },
174
+ "pulse-glow-cyan": {
175
+ css:
176
+ "0%, 100% { box-shadow: 0 0 0 0 hsl(var(--primary) / 0.5); }\n" +
177
+ "50% { box-shadow: 0 0 0 12px hsl(var(--primary) / 0); }",
178
+ defaultDuration: 2400,
179
+ iteration: "infinite",
180
+ purpose: "single hero CTA highlight — lantern heartbeat, one element per page max",
181
+ },
182
+ },
183
+ respectsReducedMotion: true,
184
+ },
185
+
186
+ density: "low",
187
+
188
+ patterns: {
189
+ button:
190
+ "Pixel-edge solid — sharp 0 radius, drop-shadow pixel offset (.shadow-pixel). " +
191
+ "VT323 display caps for label, slight letter-spacing to compensate for the pixel grid. " +
192
+ "Primary = glowing cyan fill on the dusky purple background, foreground dark for legibility. " +
193
+ "Hover intensifies the .glow-cyan-soft outer halo — the button becomes the lantern. " +
194
+ "No ghost buttons by default; ghost variant only for tertiary actions inside dense panels.",
195
+ card:
196
+ "Sharp 0 radius, 1px --border hairline, bg-card one stop above background. " +
197
+ "Padding p-6 lg:p-10. Optional .glow-cyan-soft or .glow-pink-soft for hero/feature cards. " +
198
+ "Parchment-tier cards (bg-brand-parchment, foreground swapped to deep purple) are reserved for hand-illustrated " +
199
+ "Cuphead watercolor surfaces — use sparingly to mark a tonal shift.",
200
+ input:
201
+ "Full box with 1px --border, bg-card, 0 radius. Label sits above in VT323 display, tracking 0.04em. " +
202
+ "Focus shifts border to --ring (cyan) and adds a 1px cyan inner glow. " +
203
+ "No border-bottom-only treatment — pixel-art language wants full rectangles.",
204
+ cta:
205
+ "Pixel-edge solid button is the canonical CTA — cyan fill, pixel drop-shadow, VT323 caps. " +
206
+ "Hero CTA may carry .pulse-glow-cyan (heartbeat ring, one per page). " +
207
+ "Tertiary CTAs allowed as foreground-color text links with a pixel-styled hover underline (2px, no anti-alias).",
208
+ },
209
+
210
+ details: {
211
+ selectionBg: "hsl(var(--primary) / 0.35)",
212
+ selectionFg: "hsl(var(--foreground))",
213
+ focusRing: "2px solid hsl(var(--ring))", // pixel-grid aligned, 2px not 1px — reads on dark surface
214
+ scrollbarStyle: "thin",
215
+ },
216
+ };
@@ -0,0 +1,101 @@
1
+ # Design Direction — Insurance-Legacy
2
+
3
+ ## Ethos
4
+ State Farm "Like a good neighbor" red · Allstate "Good Hands" deep blue · Farmers "We know a thing or two" navy + amber · Liberty Mutual everyman friendliness · Nationwide jingle dependability
5
+
6
+ ## Feel
7
+ Mass-market traditional insurance. Red + deep navy brand marks, friendly Inter, dependable-not-cold, agent-network warmth. The page reads "your dad's State Farm guy retired and his daughter took over the agency." Generations of trust, multi-product (auto + home + life + business), local-agent-first. Approachable but institutional — never DTC-pink, never white-shoe-formal, never enterprise-blue-cold.
8
+
9
+ An insurance-legacy surface that feels Lemonade-pink-startup, white-shoe-formal-serif, or B2B-SaaS-cold is off-direction. The voice is friendly-trustworthy-dependable.
10
+
11
+ ## Reference brands
12
+ - **State Farm** (statefarm.com) → signature red, friendly Inter, local-agent-on-the-corner warmth. The category benchmark for mass-market US insurance.
13
+ - **Allstate** (allstate.com) → deep navy + "Good Hands" authority, mass-market dependability. The navy counterpoint to State Farm's red.
14
+ - **Farmers Insurance** (farmers.com) → deep navy + amber accent, "we know a thing or two" expertise voice. The product-knowledge-as-brand angle.
15
+ - **Liberty Mutual** (libertymutual.com) → navy + yellow, everyman-friendly with statue gravitas. The "Liberty Liberty Liberty" jingle made visual.
16
+ - **Nationwide** (nationwide.com) → deep blue restraint, multi-product household-financial dependability. Insurance + investing + retirement in one trusted chrome.
17
+
18
+ ## Tokens
19
+ HSL triples in `src/index.css`. The cool paper background (`210 30% 98%`) is a near-white with a faint blue tilt — pure white reads tech-startup, cream reads spa or legacy-formal. The State Farm / Allstate marketing surface is this cool-tinted white.
20
+
21
+ Brand tokens, all semantic:
22
+ - `sf-red` — alias of `--primary`. State Farm signature red — the category brand-mark voice.
23
+ - `sf-red-soft` / `sf-red-deep` — tints and hover-darken.
24
+ - `allstate-navy` — Allstate Good Hands navy. Secondary brand-mark, agent-network authority.
25
+ - `farmers-amber` — Farmers / Liberty Mutual amber. Secondary warmth, "we know a thing or two" accent.
26
+ - `good-green` — covered/active status. Claim-paid checkmark, policy-active dot. **Restrained sage-toned green — never the bright candy-green of tech-product growth.**
27
+
28
+ Color rules:
29
+ - **Red is the brand voice for State-Farm-flavored projects; navy is the brand voice for Allstate-flavored.** Pick one per project; document in project knowledge. The direction ships with red primary because State Farm is the largest US insurer.
30
+ - **Use red and navy together intentionally.** Most legacy carriers pair them — red CTA + navy agent-network strip is the canonical composition.
31
+ - **Amber is the warmth-accent, never the primary.** Use it for "you saved $312/year" callouts, testimonial highlights, "we know a thing or two" badges.
32
+ - **Good-green is for coverage-active, not for marketing growth.** A claim-paid checkmark is green; a "trusted by 90M customers" stat is navy.
33
+
34
+ ## Typography
35
+ - **Display:** Inter at weights 500/600/700/800. Friendly humanist sans — never serif (that's white-shoe law-firm territory).
36
+ - **Body:** Inter, **17px** floor, line-height 1.6. Mass-market audience skews older — accessibility floor matters.
37
+ - **Mono:** JetBrains Mono. Policy numbers, premiums, agent phone numbers, claim IDs. Tabular for quote-comparison.
38
+
39
+ H1 uses `clamp(2rem, 4.5vw, 3.25rem)` — restrained. Mass-market insurance doesn't shout in headlines; the CTA and the local-agent finder do the work.
40
+
41
+ ## Spacing
42
+ - **Container:** `max-w-6xl px-4 lg:px-8`.
43
+ - **Section padding tiers:**
44
+ - Hero: `pt-20 pb-14 lg:pt-28 lg:pb-20`
45
+ - Default: `py-16 lg:py-24`
46
+ - Tight: `py-12 lg:py-16`
47
+
48
+ ## Color
49
+ No hex. Red is brand-mark; navy is agent-network; amber is warmth; good-green is covered. Pure white only as card fill.
50
+
51
+ ## Radius
52
+ `--radius: 0.375rem` (6px). Friendly but not pillowy — institutional approachability. **Pills allowed** for product-type tags, agent-status, coverage-active.
53
+
54
+ ## Shadows
55
+ **Soft.** Three utilities:
56
+ - `.shadow-card` — standard card.
57
+ - `.shadow-card-lg` — hover lift.
58
+ - `.shadow-map` — the find-an-agent map placeholder; inset highlight + outer shadow for the map-on-page feel.
59
+
60
+ ## Motion
61
+ Mass-market responsive, never marketing-slow.
62
+ - **Easing:** `cubic-bezier(0.22, 1, 0.36, 1)`
63
+ - **Durations:** reveal 400ms, loop 2400ms.
64
+ - **Keyframes:** `fade-rise`, `scale-in`, `soft-pulse` (agent-online dot).
65
+
66
+ ## Component patterns
67
+ - **Buttons:** primary = solid red fill, white text, `rounded-md` (6px). Secondary = solid navy (the "Talk to an agent" alternate). Tertiary = navy ghost or red text-link. Generous height (`h-11`) — mass-market tap target.
68
+ - **Cards:** `rounded-md`, white fill, 1px cool border, `shadow-card`. Internal padding `p-6 lg:p-8`. Agent-card may use red top-border. Testimonial card uses `farmers-amber-soft` inset background.
69
+ - **Inputs:** `rounded-md`, `h-11`. Focus = 2px navy ring (high-contrast accessibility floor).
70
+ - **CTAs:** primary red ("Get a quote", "File a claim") + secondary navy ("Find an agent", "Talk to someone") often paired. Voice: *"Get a free quote"*, *"Find a local agent"*, *"File a claim 24/7"*. **Never** DTC-jargon (*"90 seconds"*, *"instant"*), **never** white-shoe (*"Request counsel"*).
71
+
72
+ ## Recommended rich media
73
+ Insurance-legacy uses **agent and family photography** the way State Farm commercials do — local agent at their storefront, family in their driveway, dad-with-the-pickup.
74
+
75
+ **Permitted:** local-agent portraits (smiling agent in a logo-branded polo at their storefront — warm natural light, never studio-stiff). Family lifestyle photography (Honda CR-V in driveway, kids playing in yard, grandparent at kitchen table — middle-American, multi-generational, intentionally not coastal-urban). The State Farm / Allstate / Farmers logo-strip social-proof row. Static map placeholders for "find an agent near you" — never live maps in marketing-section mockups.
76
+
77
+ **Forbidden:** the conference-room-handshake stock (cliché); white-shoe-formal portraits (off-brand); urban-millennial-with-MacBook lifestyle (DTC territory); AI-rendered abstract gradients (off-brand for institutional); car-crash-photography (too grim).
78
+
79
+ **AI tools:** Midjourney/Flux for agent and family photography. Prompts like *"local insurance agent at their suburban storefront, friendly smile, branded polo, warm afternoon light, Midwest small-town, candid, Sony A7iv 50mm"*. Avoid the coastal-tech-startup default styling.
80
+
81
+ **Aspect ratios:** 4:5 for portraits, 16:9 for family/lifestyle, 1:1 for agent-card avatars.
82
+
83
+ **Performance:** lifestyle hero ≤180 KB AVIF at 1600w; agent portraits ≤80 KB at 600w.
84
+
85
+ ## Component families
86
+ None at install time. Anticipated families:
87
+ - **AgentCard** — agent portrait, name in Inter 700, agency name + address in Inter 500, phone in mono 600, sf-red "Get a quote" CTA + navy "Call" CTA paired.
88
+ - **ProductTypeTile** — icon, product name (Auto / Home / Life / Renters / Business / Pet), short description, navy chevron link.
89
+ - **TestimonialCard** — amber-soft inset background, family photo + quote in Inter 500 italic, attribution in mono.
90
+ - **QuoteComparisonRow** — carrier logo, mono monthly premium, mono savings-vs-current, red "Switch" CTA.
91
+
92
+ ## Details
93
+ - **Selection:** `hsl(var(--primary) / 0.22)` — pale red highlight.
94
+ - **Focus ring:** `2px solid hsl(var(--ring))` — navy, highly visible for accessibility.
95
+ - **Scrollbar:** `auto` — mass-market audience expects platform-native scrollbars.
96
+
97
+ ## Exceptions
98
+ None yet.
99
+
100
+ ## Revisions
101
+ - Initial direction, authored at install time. Pairs distinctly with `insurance-modern` — same industry, opposite voice. Insurance-legacy is the agent-network institution; insurance-modern is the DTC app.
@@ -0,0 +1,182 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ // insurance-legacy — State Farm / Allstate / Farmers / Liberty Mutual / Nationwide.
4
+ // Traditional red+blue brand mark, friendly local-agent network, dependable.
5
+ // The opposite of DTC pink+peach; this is the agent-on-the-corner-since-1930s.
6
+
7
+ export const insuranceLegacy: Direction = {
8
+ name: "insurance-legacy" as Direction["name"],
9
+ ethos:
10
+ "State Farm 'Like a good neighbor' red · Allstate 'Good Hands' deep blue · Farmers 'We know a thing or two' navy + amber · Liberty Mutual everyman friendliness · Nationwide jingle dependability",
11
+ references: [
12
+ { brand: "State Farm", trait: "signature red, friendly Inter, local-agent-on-the-corner warmth" },
13
+ { brand: "Allstate", trait: "deep navy + 'Good Hands' authority, mass-market dependability" },
14
+ { brand: "Farmers Insurance", trait: "deep navy + amber accent, 'we know a thing or two' expertise voice" },
15
+ { brand: "Liberty Mutual", trait: "navy + yellow, everyman-friendly with statue gravitas" },
16
+ { brand: "Nationwide", trait: "deep blue restraint, multi-product household-financial dependability" },
17
+ ],
18
+ feel:
19
+ "Mass-market traditional insurance. Red + deep navy brand marks, friendly Inter, " +
20
+ "dependable-not-cold, agent-network warmth. The page reads 'your dad's State Farm " +
21
+ "guy retired and his daughter took over the agency.' Generations of trust, multi-" +
22
+ "product (auto + home + life + business), local-agent-first. Approachable but " +
23
+ "institutional — never DTC-pink, never white-shoe-formal, never enterprise-blue-cold.",
24
+
25
+ fonts: {
26
+ display: {
27
+ family: "Inter",
28
+ fallback: ["Helvetica Neue", "system-ui", "-apple-system", "sans-serif"],
29
+ from: "State Farm / Allstate display Inter — friendly humanist sans, never serif",
30
+ googleFont: "Inter",
31
+ weights: [500, 600, 700, 800],
32
+ },
33
+ body: {
34
+ family: "Inter",
35
+ fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
36
+ from: "Inter body — accessible to older audiences, clean at policy-language sizes",
37
+ googleFont: "Inter",
38
+ weights: [400, 500, 600],
39
+ },
40
+ mono: {
41
+ family: "JetBrains Mono",
42
+ fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
43
+ from: "policy numbers, premiums, agent phone numbers, claim IDs — tabular for quote-comparison",
44
+ googleFont: "JetBrains+Mono",
45
+ weights: [400, 500, 700],
46
+ },
47
+ },
48
+
49
+ typography: {
50
+ headingTracking: "-0.018em",
51
+ bodyTracking: "0",
52
+ fontFeatureSettings: '"cv11", "ss01", "tnum"',
53
+ h1ScaleClamp: "clamp(2rem, 4.5vw, 3.25rem)",
54
+ bodyBaseSize: "1.0625rem", // 17px floor — older mass-market audience accessibility
55
+ bodyLineHeight: "1.6",
56
+ },
57
+
58
+ colors: {
59
+ background: { hsl: "210 30% 98%", from: "soft cool paper — Allstate marketing surface, never pure white" },
60
+ foreground: { hsl: "215 35% 16%", from: "deep navy ink — Allstate body text, friendly not cold" },
61
+ card: { hsl: "0 0% 100%", from: "pure white card — agent-finder tile, testimonial card" },
62
+ popover: { hsl: "0 0% 100%", from: "same as card" },
63
+ primary: { hsl: "358 75% 46%", from: "State Farm signature red — primary CTA, the brand-mark voice" },
64
+ primaryForeground: { hsl: "0 0% 100%", from: "white on red" },
65
+ secondary: { hsl: "210 25% 94%", from: "cool soft surface — secondary panels, aside cards" },
66
+ secondaryForeground: { hsl: "215 35% 18%", from: "navy ink on cool surface" },
67
+ muted: { hsl: "210 22% 95%", from: "table-row stripe, near-bg" },
68
+ mutedForeground: { hsl: "215 14% 42%", from: "slate-gray — captions, agent address line, policy meta" },
69
+ accent: { hsl: "210 30% 92%", from: "hover surface — one cool tier deeper" },
70
+ accentForeground: { hsl: "215 35% 18%", from: "navy ink on hover" },
71
+ border: { hsl: "210 16% 86%", from: "soft cool border — Liberty Mutual panel rule" },
72
+ input: { hsl: "210 16% 86%", from: "same as border" },
73
+ ring: { hsl: "215 70% 32%", from: "Allstate deep navy — focus ring, accessibility floor for older audiences" },
74
+ destructive: { hsl: "358 75% 46%", from: "= primary red — restrained, also alert color (semantic overlap intentional in this palette)" },
75
+ destructiveForeground: { hsl: "0 0% 100%", from: "white on red" },
76
+ brand: {
77
+ "sf-red": { hsl: "358 75% 46%", from: "= primary; State Farm signature red, the category brand-mark" },
78
+ "sf-red-deep": { hsl: "358 80% 36%", from: "red hover-darken, active state" },
79
+ "sf-red-soft": { hsl: "358 70% 95%", from: "red tint — alert banner, claim-status pill" },
80
+ "allstate-navy": { hsl: "215 70% 32%", from: "Allstate Good Hands navy — secondary brand-mark, agent-network authority" },
81
+ "allstate-navy-soft": { hsl: "215 50% 92%", from: "navy tint — info banner, certified-agent pill" },
82
+ "farmers-amber": { hsl: "36 90% 50%", from: "Farmers / Liberty Mutual amber — secondary warmth, 'we know a thing or two' accent" },
83
+ "farmers-amber-soft": { hsl: "36 90% 95%", from: "amber tint — testimonial highlight, savings-callout pill" },
84
+ "good-green": { hsl: "140 50% 38%", from: "covered/active status — claim-paid checkmark, policy-active dot" },
85
+ "good-green-soft": { hsl: "140 50% 94%", from: "green tint — active pill" },
86
+ },
87
+ },
88
+
89
+ spacing: {
90
+ base: 4,
91
+ scale: [4, 6, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96],
92
+ containerMax: "max-w-6xl",
93
+ containerPadding: "px-4 lg:px-8",
94
+ sectionPadding: {
95
+ hero: "pt-20 pb-14 lg:pt-28 lg:pb-20",
96
+ default: "py-16 lg:py-24",
97
+ tight: "py-12 lg:py-16",
98
+ },
99
+ },
100
+
101
+ radius: {
102
+ base: "0.375rem", // 6px — friendly but not pillowy; institutional approachability
103
+ pillsAllowed: true, // pills for product-type tags, agent-status, coverage-active
104
+ },
105
+
106
+ shadows: {
107
+ style: "soft",
108
+ utilities: {
109
+ "shadow-card":
110
+ "0 1px 2px hsl(215 30% 20% / 0.05), 0 4px 12px hsl(215 30% 20% / 0.07)",
111
+ "shadow-card-lg":
112
+ "0 2px 4px hsl(215 30% 20% / 0.06), 0 12px 28px hsl(215 30% 20% / 0.10)",
113
+ "shadow-map":
114
+ "inset 0 1px 0 hsl(0 0% 100% / 0.6), 0 8px 32px hsl(215 40% 20% / 0.10)",
115
+ },
116
+ },
117
+
118
+ motion: {
119
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
120
+ durations: {
121
+ reveal: 400, // mass-market responsive, never marketing-slow
122
+ loop: 2400,
123
+ ambient: 0,
124
+ },
125
+ keyframes: {
126
+ "fade-rise": {
127
+ css:
128
+ "from { opacity: 0; transform: translateY(8px); }\n" +
129
+ "to { opacity: 1; transform: translateY(0); }",
130
+ defaultDuration: 400,
131
+ iteration: "once",
132
+ purpose: "card and section entrance — friendly, never bouncy",
133
+ },
134
+ "scale-in": {
135
+ css:
136
+ "from { opacity: 0; transform: scale(0.97); }\n" +
137
+ "to { opacity: 1; transform: scale(1); }",
138
+ defaultDuration: 200,
139
+ iteration: "once",
140
+ purpose: "modal, popover, agent-call card — confirms interaction",
141
+ },
142
+ "soft-pulse": {
143
+ css:
144
+ "0%, 100% { opacity: 1; }\n" +
145
+ "50% { opacity: 0.55; }",
146
+ defaultDuration: 1800,
147
+ iteration: "infinite",
148
+ purpose: "agent-online dot, claim-in-progress indicator",
149
+ },
150
+ },
151
+ respectsReducedMotion: true,
152
+ },
153
+
154
+ density: "medium",
155
+
156
+ patterns: {
157
+ button:
158
+ "Primary = solid red fill, white text, rounded-md (6px), shadow-card. " +
159
+ "Secondary = solid navy fill, white text (the 'Talk to an agent' alternate). " +
160
+ "Tertiary = navy ghost (border + text), or red text-link. " +
161
+ "Generous height (h-11) — mass-market tap target. Hover darkens by 6% + shadow-card-lg.",
162
+ card:
163
+ "Rounded-md (6px), white fill, 1px cool border, shadow-card. " +
164
+ "Internal padding p-6 lg:p-8. Agent-card variant uses red top-border or red accent badge. " +
165
+ "Testimonial card uses farmers-amber-soft inset background.",
166
+ input:
167
+ "Rounded-md, 1px cool border, white background. Generous height (h-11). " +
168
+ "Label above in Inter 500. Focus = 2px navy ring (high-contrast for accessibility floor).",
169
+ cta:
170
+ "Primary red solid is the marketing default ('Get a quote', 'File a claim'). " +
171
+ "Navy solid is the agent-network alternate ('Find an agent', 'Talk to someone'). " +
172
+ "Voice is plain-trustworthy: 'Get a free quote', 'Find a local agent', 'File a claim 24/7'. " +
173
+ "Never DTC-jargon ('90 seconds', 'instant'), never white-shoe-formal ('Request counsel').",
174
+ },
175
+
176
+ details: {
177
+ selectionBg: "hsl(var(--primary) / 0.22)",
178
+ selectionFg: "hsl(var(--foreground))",
179
+ focusRing: "2px solid hsl(var(--ring))",
180
+ scrollbarStyle: "auto", // mass-market expects platform-native scrollbars
181
+ },
182
+ };