@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stylecrib/cli",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Design upgrade for vibe-coded React apps. Installs 19 Claude Code subagents (craft reviewers + brief-enforcer + exec auditors) + a chosen theme from a 118-theme library into your repo. Refuses AI-default patterns at commit time — see the SLOP-BLOCKLIST.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,15 +8,21 @@
8
8
  },
9
9
  "files": [
10
10
  "dist",
11
+ "themes",
12
+ "agents",
11
13
  "README.md"
12
14
  ],
13
15
  "scripts": {
14
- "prebuild": "node scripts/validate-agents.mjs",
16
+ "prebuild": "node scripts/validate-agents.mjs && node scripts/sync-assets.mjs",
15
17
  "build": "tsup",
16
18
  "dev": "tsup --watch",
17
19
  "start": "node dist/index.js",
18
20
  "typecheck": "tsc --noEmit",
19
- "validate:agents": "node scripts/validate-agents.mjs"
21
+ "test": "node --test \"src/**/*.test.ts\"",
22
+ "prepack": "node scripts/sync-assets.mjs",
23
+ "validate:agents": "node scripts/validate-agents.mjs",
24
+ "sync:assets": "node scripts/sync-assets.mjs",
25
+ "prepublishOnly": "npm run build"
20
26
  },
21
27
  "keywords": [
22
28
  "design",
@@ -49,9 +55,11 @@
49
55
  "dependencies": {
50
56
  "@anthropic-ai/sdk": "^0.32.1",
51
57
  "@inquirer/prompts": "^7.2.0",
58
+ "@modelcontextprotocol/sdk": "^1.32.1",
52
59
  "commander": "^12.1.0",
53
60
  "picocolors": "^1.1.1",
54
- "yaml": "^2.9.0"
61
+ "yaml": "^2.9.0",
62
+ "zod": "^4.6.7"
55
63
  },
56
64
  "devDependencies": {
57
65
  "@types/node": "^22.10.0",
@@ -0,0 +1,70 @@
1
+ # Directions
2
+
3
+ Twelve curated design directions for v1. Each is a complete, opinionated visual system — pick one as the seed for `stylecrib init`; the Director then bends it toward your specific references.
4
+
5
+ ## The twelve, grouped by genre
6
+
7
+ ### Reading-first
8
+ Serif body, narrow column, generous vertical rhythm. The page is meant to be read.
9
+
10
+ | Direction | Feel in one line |
11
+ |---|---|
12
+ | [editorial](editorial/) | NYT typography · Are.na restraint · Aesop pacing · Kinfolk whitespace |
13
+ | [newsletter](newsletter/) | Substack reading · Bear minimalism · The Browser typography · Granta editorial |
14
+
15
+ ### Tool-first
16
+ Productivity surfaces. Rounded chrome, dashboard density, soft polish.
17
+
18
+ | Direction | Feel in one line |
19
+ |---|---|
20
+ | [soft-modern](soft-modern/) | Linear's geometric calm · Notion warmth · Stripe gradients · Vercel polish |
21
+ | [dense-utility](dense-utility/) | Vercel dashboard density · Stripe internal · Linear keyboard-first · Bloomberg terminal |
22
+ | [glassmorphic-modern](glassmorphic-modern/) | Apple Big Sur glass · iOS 14 widgets · Vision Pro depth · Spotify backdrop |
23
+
24
+ ### Atmosphere-first
25
+ Photography or motion is the lead element. UI gets out of the way.
26
+
27
+ | Direction | Feel in one line |
28
+ |---|---|
29
+ | [cinematic-dark](cinematic-dark/) | Tesla blackout · Cybertruck steel · Masters/Rolex luxury · Nike type |
30
+ | [outdoor-adventure](outdoor-adventure/) | Patagonia earth · REI utility · Powder magazine speed · NPS signage |
31
+
32
+ ### Restraint-first
33
+ Less than minimal — system defaults, grid discipline, no decoration.
34
+
35
+ | Direction | Feel in one line |
36
+ |---|---|
37
+ | [brutalist](brutalist/) | System defaults · monospace prominence · Hacker News pedigree · IA Writer restraint |
38
+ | [hyperminimal-mono](hyperminimal-mono/) | Müller-Brockmann grid · Vignelli reduction · Apple Notes restraint · Bauhaus origin |
39
+
40
+ ### Decoration-first
41
+ Color, pattern, ornament earn their place. Composition is the design tool.
42
+
43
+ | Direction | Feel in one line |
44
+ |---|---|
45
+ | [mid-century](mid-century/) | Eames warmth · Saul Bass geometric play · Knoll restraint · Aalto natural |
46
+ | [maximalist](maximalist/) | Wes Anderson symmetry · Memphis pattern play · Esquire editorial borders · Paula Scher type |
47
+ | [y2k-chrome](y2k-chrome/) | iMac G4 translucent · iPod gleam · MTV 2001 chrome · Bose Wave optimism |
48
+
49
+ ## What's in each direction folder
50
+
51
+ - `tokens.ts` — machine-readable. Conforms to [`schema.ts`](schema.ts). The CLI consumes this to emit `tailwind.config.ts` and `src/index.css` in the user's repo.
52
+ - `DIRECTION.md` — human-readable. The seed of the user's project `DIRECTION.md`, copied verbatim at install time. Director / Systems / QA / Media-Curator agents all read it as source of truth. Includes a `## Recommended rich media` section specifying what kind of imagery, video, 3D, audio, and animation fits this direction.
53
+
54
+ ## How to add a thirteenth direction
55
+
56
+ 1. Copy any existing folder under a new slug (e.g. `directions/cyberpunk/`).
57
+ 2. Author `tokens.ts` against [`schema.ts`](schema.ts). Every color token's `from:` field must name a brand·trait — untraceable tokens fail review. Add the new slug to the `name:` union in `schema.ts`.
58
+ 3. Author `DIRECTION.md` matching the section structure of the existing twelve, including the `## Recommended rich media` section.
59
+ 4. Add the new direction to the genre table above.
60
+ 5. Wire into the site: add a `DirectionMeta` entry in `site/src/lib/content.ts` (with import statements at the top).
61
+ 6. Wire into the CLI: add to the `DIRECTION_CHOICES` list and the `CanonicalDirection` type in `cli/src/wizard.ts`, and the `isValidDirection` check.
62
+ 7. Run the harness against a real project. Bar: "demonstrably better than vanilla Claude Code applied with the same direction prompt."
63
+
64
+ ## The schema is non-negotiable
65
+
66
+ Every field in [`schema.ts`](schema.ts) exists because the Stage 3 / Stage 4 / Stage 5 prompts in [`STYLECRIB_CODIFIED.md`](../STYLECRIB_CODIFIED.md) need it. Don't add a direction that omits fields. Don't add fields to the schema without updating all twelve existing directions in the same change.
67
+
68
+ ## The wizard handles arbitrary direction too
69
+
70
+ Users who want something none of these twelve cover can run `npx stylecrib init` with `base: custom` — the Director then synthesizes a direction from references alone (no canonical seed). The shape of the output is identical: a complete `DIRECTION.md`, brand-grounded tokens, the full schema. The canonical twelve exist to save tokens (the Director call is skipped for known directions) and to give browsers something to look at.
@@ -0,0 +1,142 @@
1
+ # Design Direction — Acrylic-Soft
2
+
3
+ ## Ethos
4
+ Microsoft Fluent 2 depth · Windows 11 acrylic surfaces · Office 365 productivity · Surface marketing elegance · Segoe humanism
5
+
6
+ ## Feel
7
+ Productivity-grade with depth. Acrylic-translucent surfaces layered over solid backgrounds (Windows 11 mica + acrylic), Segoe-style humanist sans, Microsoft blue as the trusted signal. Reads as "Office 365 marketing site" — accessible, capable, friendly-corporate. The opposite of Apple's depth (which is performative cinema); Fluent's depth is utilitarian — translucency communicates layering of work, not theatre.
8
+
9
+ ## Reference brands
10
+ - **Microsoft Fluent 2 Design System** → Fluent 2 is Microsoft's design language. Tokens, depth tiers, motion curves all trace back here.
11
+ - **Windows 11** → acrylic + mica surfaces as a structural material. Translucent chrome that picks up the desktop, but quieter than Apple's Big Sur.
12
+ - **Office 365 / Microsoft 365 apps (Word, Excel, Teams)** → productivity-grade chrome. Ribbon, command bars, side panels — surfaces that hold work, not decorate it.
13
+ - **Surface marketing pages** → enterprise-friendly polish without enterprise-friendly drabness. Big photography, generous whitespace, blue-trusted CTAs.
14
+ - **Xbox UI** → Fluent's gaming variant. Same depth language scaled up for 10-foot UI. Same blue, same acrylic.
15
+
16
+ ## Tokens
17
+ HSL triples in `src/index.css`. Brand tokens: `--mica`, `--acrylic`, `--accent-purple`, `--success-green`, `--warning-yellow`, `--error-red`. Primary is **Microsoft blue** (`206 100% 41%`) — the Office 365 / Outlook signature.
18
+
19
+ Surface stack is **solid background** (`--background` light or `--background` dark) → **mica subtle surface** (`--mica` at full opacity OR `--background` with `mica-blur`) → **acrylic translucent layer** (`--acrylic` at ~60-80% opacity with `acrylic-blur`) → **card / popover** on top (solid `--card`). Depth comes from material tiers (background → mica → acrylic → solid card), not from gradient hue shifts.
20
+
21
+ The brand tokens (`mica`, `acrylic`) are not decorative — they ARE the Fluent material language. `accent-purple` is the Edge/Copilot accent for marketing moments that need a non-blue secondary signal. `success-green`, `warning-yellow`, `error-red` are the Fluent status palette — used for state indicators only, never as primary CTA color.
22
+
23
+ ## Typography
24
+ - **Display:** Inter, fallback Segoe UI Variable (Microsoft's canonical humanist sans). h1–h4, weights 400/600/700.
25
+ - **Body:** Inter (same family — Microsoft convention is one face across sizes, with Segoe UI Variable as the system fallback). Base 16px, line-height 1.55.
26
+ - **Mono:** Cascadia Code (Microsoft's canonical monospace, Windows Terminal default), fallback JetBrains Mono. Code blocks, terminal output, metrics.
27
+
28
+ Headings track `-0.01em` — gentler than Apple's tighter `-0.022em` because Segoe's humanism wants breathing room. H1 uses `clamp(2.5rem, 6vw, 4.5rem)`. Inter stylistic sets `"cv11", "ss01"` to pull toward Segoe's open shapes.
29
+
30
+ ## Spacing
31
+ - **Container:** `max-w-6xl px-4 lg:px-8`.
32
+ - **Section padding tiers:**
33
+ - Hero: `pt-20 pb-12 lg:pt-28 lg:pb-16`
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. Productivity-grade, not dashboard-dense — let panels breathe like an Office sidebar.
37
+
38
+ ## Color
39
+ No hex anywhere. All color via tokens. Opacity via `/N` modifier (used for acrylic surfaces — that's the whole point). Pure white is allowed for `--background` and `--card`; pure black is never used — `--foreground` is `220 17% 11%` (Fluent text-primary).
40
+
41
+ A **canonical dark mode** ships alongside light. Dark palette pivots: `--background: 240 12% 10%`, `--foreground: 0 0% 95%`, `--mica: 240 8% 14%`, `--acrylic: 240 8% 18%`, `--card: 240 10% 12%`, `--border: 240 6% 24%`. Primary Microsoft blue lightens slightly in dark mode (`206 100% 55%`) for AA contrast on the dark canvas. Selection via `prefers-color-scheme` by default; manual override toggles `[data-theme="dark"]` on `<html>`.
42
+
43
+ ## Radius
44
+ `--radius: 0.5rem` (8px). **Generous but not playful — Windows 11's signature corner radius.** Pills are allowed for status chips, badges, and tags (`pillsAllowed: true`). Hard right angles are reserved for the command-bar / ribbon pattern only; everything else carries the Fluent 8px round.
45
+
46
+ ## Shadows
47
+ Five utilities — Fluent's named depth tiers plus the two acrylic blur recipes:
48
+ - `.shadow-2` — small drop, default card lift (Fluent depth-2)
49
+ - `.shadow-8` — medium drop, hover state (Fluent depth-8)
50
+ - `.shadow-16` — modal/flyout layer (Fluent depth-16)
51
+ - `.acrylic-blur` — `backdrop-filter: blur(20px) saturate(150%)` — the translucent acrylic recipe
52
+ - `.mica-blur` — `backdrop-filter: blur(60px) saturate(120%)` — the deeper, slower mica recipe for full-window surfaces
53
+
54
+ Shadows use neutral-cool tone (220° hue) at 8-14% opacity. The acrylic/mica blur pair with `--acrylic` or `--mica` background tokens at partial opacity — they don't work without a base color underneath. Microsoft blue is **never** the shadow color (no `glow-blue` on standard surfaces — Fluent shadows are neutral).
55
+
56
+ ## Motion
57
+ Three keyframes mapping to Fluent's three motion tiers:
58
+ - `fluent-fade-in` (150ms, **fast**) — tooltips, chips, status badges. Pure opacity, no transform.
59
+ - `fluent-slide-up` (250ms, **normal**) — cards, panels, default content entrance. Short translateY + fade.
60
+ - `fluent-flyout` (400ms, **slow**) — dialogs, flyouts, teaching callouts. Slight scale (0.98 → 1) + translateY + fade.
61
+
62
+ Easing: `cubic-bezier(0.33, 0, 0.67, 1)` — Fluent "smooth", symmetric, productivity-grade. Microsoft also defines `accelerate` (`cubic-bezier(0.9, 0.1, 1, 0.2)`, exits) and `decelerate` (`cubic-bezier(0.1, 0.9, 0.2, 1)`, entrances) — surface those as utilities when a specific motion needs directional emphasis. `prefers-reduced-motion` honored — all three keyframes fall back to opacity-only.
63
+
64
+ ## Brand-book customization
65
+
66
+ Microsoft Fluent is a **family of sub-brands**, not a single brand. The direction ships with Office 365 blue as the default primary, but any project skinned for a specific Microsoft sub-brand should override `--primary`:
67
+
68
+ - **Office 365 / Outlook (default):** `--primary: 206 100% 41%` (Microsoft blue — signature, trusted, productivity)
69
+ - **Teams variant:** `--primary: 245 60% 55%` (Teams purple — collaboration, communication)
70
+ - **Xbox variant:** `--primary: 120 100% 38%` (Xbox green — gaming, energy)
71
+ - **Edge / Copilot variant:** use the shipped `--accent-purple` (`265 60% 55%`) as primary
72
+ - **Surface marketing variant:** stick with default Microsoft blue; this is the canonical Surface palette
73
+
74
+ When overriding, also update `--ring` and `--accent` to match. The mica/acrylic material tier does **not** change between sub-brands — material is structural Fluent, color is brand layer.
75
+
76
+ **Acrylic and mica are structural Fluent** — don't override the material tokens themselves. If accessibility requires reduced effects, expose `--acrylic-blur` and `--mica-blur` as CSS variables that can be set to `blur(0)` under user preference. The acrylic surface remains; only the blur intensity is tunable. Some users (motion-sensitive, low-end GPU, high-contrast mode) will get the surface color without the blur — that's the intended fallback, not a degraded experience.
77
+
78
+ **Dark mode is canonical Fluent**, not an afterthought. Windows 11 ships both. The direction's `src/index.css` includes both light and dark token sets; the user picks via `prefers-color-scheme` automatically, or a manual `[data-theme="dark"]` toggle. Marketing surfaces typically default to light (Office 365 web feel); product surfaces (dashboards, Teams-like apps) often default to following the OS. Never ship light-only — that's not Fluent.
79
+
80
+ ## Component patterns
81
+ - **Buttons:** Primary = solid Microsoft blue (`bg-primary`, `text-primary-foreground`, `rounded-md` 8px, `shadow-2`). Secondary = ghost (border + foreground text, transparent bg). Subtle = acrylic-tinted (`bg-acrylic` at ~60% opacity + `acrylic-blur`). Hover lifts to `shadow-8`; active depresses to `shadow-2` with subtle 0.99 scale.
82
+ - **Cards:** `rounded-lg` (8px), `bg-card` or `bg-mica`, hairline border, `shadow-2`. Padding `p-6 lg:p-8`. Title in Inter 600. Hover lifts to `shadow-8`. Modal-tier cards use `shadow-16` + `acrylic-blur` backdrop.
83
+ - **Inputs:** full `rounded-md` (8px) box, border, `bg-background`. Focus = `2px solid var(--ring)` (full opacity — Microsoft is direct about focus) and border brightens to primary. Label above; helper below in `mutedForeground`. Error state swaps border + ring to `--error-red`.
84
+ - **CTAs:** primary button is the default. Secondary CTAs use ghost or subtle (acrylic-tinted) variant. Text-link CTAs use primary color with underline on hover — Microsoft convention is more explicit than Apple's hover-only link reveal.
85
+
86
+ ## Component families
87
+ None at install time. As `*Card`, `*CommandBar`, `*Flyout`, `*TeachingCallout` families emerge, the Director lists them here with their shared pattern. Fluent's named depth tiers (`shadow-2`/`8`/`16`) should map to component tiers (card → menu/popover → dialog) consistently.
88
+
89
+ ## Details
90
+ - **Selection:** `hsl(var(--primary) / 0.20)` background, foreground text — Microsoft blue at 20% opacity.
91
+ - **Focus ring:** `2px solid hsl(var(--ring))` — full-opacity Microsoft blue. Fluent's focus is *visible*; accessibility is a feature, not a polish concern.
92
+ - **Scrollbar:** `auto` — Microsoft uses the native scrollbar (Windows has its own visual language for scrollbars; don't fight it).
93
+
94
+ ## Recommended rich media
95
+
96
+ ### Cover and hero imagery
97
+ Fluent's marketing imagery is built around **three categories**, often combined on the same page:
98
+
99
+ 1. **Product screenshots** — Surface devices on neutral backgrounds, Windows 11 desktops with acrylic layered, Office app composites (Word/Excel/Teams on a Surface display). These are the canonical hero subjects.
100
+ 2. **Enterprise photography** — people working. Real keyboards, real screens, real meetings. Not lifestyle hero shots (no laptop-on-the-beach). The grade is neutral-cool, daylight-balanced. Photography reads "Tuesday at 2 PM," not "weekend brand campaign."
101
+ 3. **Illustrated diagrams** — Microsoft's flat-illustration tradition. The geometric language of the Office app icons (Word blue, Excel green, PowerPoint orange) extended into spot illustrations: layered shapes, soft gradients within shapes, isometric or front-facing, no shadows that break the flat plane.
102
+
103
+ ### AI tool recommendations
104
+ - **Midjourney / Flux** for enterprise photography composites. Prompt template: `"corporate photography, person working at Surface laptop, neutral cool daylight, soft window light, modern office, candid not posed, 4K"`. Avoid `cinematic`, `dramatic lighting`, `bokeh-heavy` — those read luxury-brand, wrong altitude for Fluent.
105
+ - **Recraft / Figma's illustration libraries** for the flat-illustration spots. The Office icon language is well-documented; lean on geometric primitives + Microsoft blue/purple/green/orange as fills.
106
+ - **Spline** for interactive Surface product renders. The Surface Pro / Studio / Hub product pages frequently use lightweight 3D — kept restrained, no theatrical spin.
107
+ - **Real Microsoft assets** — the Microsoft brand center publishes Surface product photography under marketing-asset licenses for partner use; for any official-feeling deck, use the real assets where licensable.
108
+
109
+ ### Aspect ratios
110
+ - **16:9** hero for product screenshots and enterprise photography — standard.
111
+ - **3:2** for Surface product hero shots (matches Surface device proportions).
112
+ - **1:1** for the Office app icon language and spot illustrations on tile grids.
113
+ - **21:9 cinematic** — avoid. That's a luxury / film vocabulary; Fluent is productivity.
114
+
115
+ ### Color discipline
116
+ The page surface stays neutral (background or mica). **Color comes from the imagery itself** — the Surface keyboard color, the Excel green of a screenshot, the Teams purple of an app composite. Don't tint photography to match the page; Fluent layers photography honestly on neutral chrome. The one consistent color signal is the primary CTA — Microsoft blue, button-shaped.
117
+
118
+ ### Video
119
+ Product demos are core Fluent media — short screen-recordings of Office apps, Surface device unboxings, Teams meeting flows. Keep them under 12s for autoplay loops, longer for narrated explainers (with captions on by default — Microsoft accessibility convention). Compression: H.265, ≤8 MB for loop hero, ≤25 MB for explainer.
120
+
121
+ ### What to AVOID
122
+ - **Maximalist gradient backdrops** — that's glassmorphic-modern territory (Apple-derivative). Fluent uses gradients only within illustration shapes, not as full-bleed page bg.
123
+ - **Heavy bokeh, dramatic film grading, golden-hour photography** — luxury vocabulary, wrong altitude.
124
+ - **Hand-drawn or sketch illustration** — that's the friendly-startup language (Notion, Plain). Fluent's illustration is geometric and machine-precise.
125
+ - **Chrome / metallic 3D renders** — Y2K, different direction.
126
+ - **Brutalist screenshots, raw terminal output as hero** — wrong altitude (Fluent is for users, not engineers).
127
+
128
+ ### Performance
129
+ Acrylic backdrop-blur is GPU-accelerated on Windows/Edge and modern browsers but expensive on low-end Android. **Gate the blur behind `prefers-reduced-transparency`** AND offer a fallback to the solid `--mica` color. Test on a real device, not just desktop. Product video kept short and tightly compressed. LCP target under 1.8s on 4G.
130
+
131
+ ### Accessibility
132
+ **This is Fluent's strongest principle — Microsoft ships accessibility as a feature.** Verify:
133
+ 1. **Acrylic surfaces** must hit WCAG AA contrast against the text laid on them. Acrylic at low opacity will fail — bump opacity to ≥80% wherever text sits on acrylic, OR place text on the solid `--card` inside the acrylic container.
134
+ 2. **Focus indicators** are 2px full-opacity Microsoft blue, never softened — this is non-negotiable. Don't apply `/0.5` to the focus ring "for aesthetics."
135
+ 3. **Reduced transparency** (`prefers-reduced-transparency`) disables the blur and falls back to solid `--mica` / `--acrylic` colors. Test this state.
136
+ 4. **High-contrast mode** (Windows) inverts to system colors — don't rely on Microsoft blue alone to communicate state; pair with iconography and text.
137
+
138
+ ## Exceptions
139
+ None yet. When an intentional one-of-one violation lands, add it here with the reason.
140
+
141
+ ## Revisions
142
+ - Initial direction, generated at install time.
@@ -0,0 +1,180 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const acrylicSoft: Direction = {
4
+ name: "acrylic-soft",
5
+ ethos:
6
+ "Microsoft Fluent 2 depth · Windows 11 acrylic surfaces · Office 365 productivity · Surface marketing elegance · Segoe humanism",
7
+ references: [
8
+ { brand: "Microsoft Fluent 2 Design System", trait: "Fluent 2 — Microsoft's design language" },
9
+ { brand: "Windows 11", trait: "acrylic + mica surfaces" },
10
+ { brand: "Office 365 / Microsoft 365", trait: "productivity apps (Word, Excel, Teams)" },
11
+ { brand: "Surface marketing", trait: "product page elegance, enterprise-friendly polish" },
12
+ { brand: "Xbox UI", trait: "Fluent's gaming variant — depth at scale" },
13
+ ],
14
+ feel:
15
+ "Productivity-grade with depth. Acrylic-translucent surfaces layered " +
16
+ "over solid backgrounds (Windows 11 mica + acrylic), Segoe-style " +
17
+ "humanist sans, Microsoft blue as the trusted signal. Reads as " +
18
+ "'Office 365 marketing site' — accessible, capable, friendly-corporate. " +
19
+ "The opposite of Apple's depth (which is performative cinema); Fluent's " +
20
+ "depth is utilitarian — translucency communicates layering of work, " +
21
+ "not theatre.",
22
+
23
+ fonts: {
24
+ display: {
25
+ family: "Inter",
26
+ fallback: ["Segoe UI Variable", "Segoe UI", "system-ui", "-apple-system", "sans-serif"],
27
+ from: "open-source Segoe UI Variable stand-in — humanist sans, Microsoft canonical",
28
+ googleFont: "Inter",
29
+ weights: [400, 600, 700],
30
+ },
31
+ body: {
32
+ family: "Inter",
33
+ fallback: ["Segoe UI Variable", "Segoe UI", "system-ui", "-apple-system", "sans-serif"],
34
+ from: "single-family Microsoft convention — Segoe across display and body",
35
+ googleFont: "Inter",
36
+ weights: [400, 500, 600],
37
+ },
38
+ mono: {
39
+ family: "Cascadia Code",
40
+ fallback: ["JetBrains Mono", "Consolas", "ui-monospace", "SFMono-Regular", "monospace"],
41
+ from: "Microsoft's canonical monospace — Cascadia Code (Windows Terminal default)",
42
+ googleFont: "Cascadia+Code",
43
+ weights: [400, 500],
44
+ },
45
+ },
46
+
47
+ typography: {
48
+ headingTracking: "-0.01em", // gentler than Apple's -0.022 — Segoe humanism wants breathing room
49
+ bodyTracking: "0",
50
+ fontFeatureSettings: '"cv11", "ss01"', // Inter stylistic sets that pull toward Segoe's open shapes
51
+ h1ScaleClamp: "clamp(2.5rem, 6vw, 4.5rem)",
52
+ bodyBaseSize: "1rem",
53
+ bodyLineHeight: "1.55",
54
+ },
55
+
56
+ colors: {
57
+ background: { hsl: "0 0% 100%", from: "Fluent 2 light canvas — neutralBackground1" },
58
+ foreground: { hsl: "220 17% 11%", from: "Fluent 2 text-primary — neutralForeground1" },
59
+ card: { hsl: "0 0% 100%", from: "card surface — sits on top of mica" },
60
+ popover: { hsl: "0 0% 100%", from: "popover / flyout — solid white above acrylic" },
61
+ primary: { hsl: "206 100% 41%", from: "Microsoft blue — Office 365 brand, Outlook signature" },
62
+ primaryForeground: { hsl: "0 0% 100%", from: "white on Microsoft blue" },
63
+ secondary: { hsl: "220 8% 96%", from: "mica subtle surface — Windows 11 background tier" },
64
+ secondaryForeground: { hsl: "220 17% 11%", from: "text-primary on mica" },
65
+ muted: { hsl: "220 8% 96%", from: "shares mica tone — quiet surfaces" },
66
+ mutedForeground: { hsl: "220 9% 42%", from: "Fluent neutralForeground3 — secondary labels" },
67
+ accent: { hsl: "206 100% 95%", from: "Microsoft blue tinted hover wash" },
68
+ accentForeground: { hsl: "206 100% 28%", from: "deep Microsoft blue on tinted wash" },
69
+ border: { hsl: "220 10% 88%", from: "Fluent neutralStroke1 — visible hairline" },
70
+ input: { hsl: "220 10% 88%", from: "same as border — Fluent input stroke" },
71
+ ring: { hsl: "206 100% 41%", from: "Microsoft blue — focus only" },
72
+ destructive: { hsl: "358 75% 50%", from: "Fluent paletteRedForeground — error/destructive" },
73
+ destructiveForeground: { hsl: "0 0% 100%", from: "white on Fluent red" },
74
+ brand: {
75
+ mica: { hsl: "220 8% 96%", from: "Fluent mica — subtle background surface, Windows 11" },
76
+ acrylic: { hsl: "220 8% 92%", from: "Fluent acrylic — translucent layer above mica" },
77
+ "accent-purple": { hsl: "265 60% 55%", from: "Microsoft Edge / Copilot purple" },
78
+ "success-green": { hsl: "140 65% 35%", from: "Fluent paletteGreenForeground — confirm/success" },
79
+ "warning-yellow": { hsl: "44 100% 50%", from: "Fluent paletteYellowBackground — warning" },
80
+ "error-red": { hsl: "358 75% 50%", from: "Fluent paletteRedForeground — error" },
81
+ },
82
+ },
83
+
84
+ spacing: {
85
+ base: 4,
86
+ scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80],
87
+ containerMax: "max-w-6xl",
88
+ containerPadding: "px-4 lg:px-8",
89
+ sectionPadding: {
90
+ hero: "pt-20 pb-12 lg:pt-28 lg:pb-16",
91
+ default: "py-16 lg:py-24",
92
+ tight: "py-12 lg:py-16",
93
+ },
94
+ },
95
+
96
+ radius: {
97
+ base: "0.5rem", // 8px — Fluent 2 corner radius, Windows 11 signature
98
+ pillsAllowed: true, // chips, badges, status pills — Fluent allows them
99
+ },
100
+
101
+ shadows: {
102
+ style: "soft",
103
+ utilities: {
104
+ "shadow-2":
105
+ "0 1px 2px hsl(220 17% 11% / 0.10), 0 0 2px hsl(220 17% 11% / 0.08)",
106
+ "shadow-8":
107
+ "0 4px 8px hsl(220 17% 11% / 0.12), 0 0 2px hsl(220 17% 11% / 0.10)",
108
+ "shadow-16":
109
+ "0 8px 16px hsl(220 17% 11% / 0.14), 0 0 2px hsl(220 17% 11% / 0.10)",
110
+ "acrylic-blur":
111
+ "backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%);",
112
+ "mica-blur":
113
+ "backdrop-filter: blur(60px) saturate(120%); -webkit-backdrop-filter: blur(60px) saturate(120%);",
114
+ },
115
+ },
116
+
117
+ motion: {
118
+ easing: "cubic-bezier(0.33, 0, 0.67, 1)", // Fluent "smooth" — symmetric, productivity-grade
119
+ durations: {
120
+ reveal: 250, // Fluent "normal"
121
+ loop: 2000,
122
+ ambient: 18000,
123
+ },
124
+ keyframes: {
125
+ "fluent-fade-in": {
126
+ css:
127
+ "from { opacity: 0; }\n" +
128
+ "to { opacity: 1; }",
129
+ defaultDuration: 150,
130
+ iteration: "once",
131
+ purpose: "fast — tooltips, chips, status badges (Fluent fast tier)",
132
+ },
133
+ "fluent-slide-up": {
134
+ css:
135
+ "from { opacity: 0; transform: translateY(8px); }\n" +
136
+ "to { opacity: 1; transform: translateY(0); }",
137
+ defaultDuration: 250,
138
+ iteration: "once",
139
+ purpose: "normal — cards, panels, default content entrance",
140
+ },
141
+ "fluent-flyout": {
142
+ css:
143
+ "from { opacity: 0; transform: translateY(12px) scale(0.98); }\n" +
144
+ "to { opacity: 1; transform: translateY(0) scale(1); }",
145
+ defaultDuration: 400,
146
+ iteration: "once",
147
+ purpose: "slow — dialogs, flyouts, teaching callouts (Fluent slow tier)",
148
+ },
149
+ },
150
+ respectsReducedMotion: true,
151
+ },
152
+
153
+ density: "medium",
154
+
155
+ patterns: {
156
+ button:
157
+ "Primary = solid Microsoft blue (bg-primary, text-primary-foreground, rounded-md/8px, shadow-2). " +
158
+ "Secondary = ghost (border, foreground text, transparent bg). " +
159
+ "Subtle = acrylic-tinted background (bg-acrylic at ~60% opacity + acrylic-blur). " +
160
+ "Hover lifts to shadow-8; active depresses to shadow-2 with subtle scale (0.99).",
161
+ card:
162
+ "Rounded-lg (8px), bg-card or bg-mica, hairline border, shadow-2. " +
163
+ "Internal padding p-6 lg:p-8. Title in Inter 600. " +
164
+ "Hover lifts to shadow-8. Modal-tier cards use shadow-16 + acrylic-blur backdrop.",
165
+ input:
166
+ "Full rounded-md (8px) box, border, bg-background. " +
167
+ "Focus = 2px Microsoft blue ring + border brightens to primary. " +
168
+ "Label above; helper below in mutedForeground. Error state swaps border + ring to error-red.",
169
+ cta:
170
+ "Primary button is the default. Secondary CTAs use ghost button or subtle (acrylic-tinted) variant. " +
171
+ "Text-link CTAs use primary color with underline on hover — Microsoft convention.",
172
+ },
173
+
174
+ details: {
175
+ selectionBg: "hsl(var(--primary) / 0.20)",
176
+ selectionFg: "hsl(var(--foreground))",
177
+ focusRing: "2px solid hsl(var(--ring))",
178
+ scrollbarStyle: "auto",
179
+ },
180
+ };
@@ -0,0 +1,91 @@
1
+ # Design Direction — Agency-Creative
2
+
3
+ ## Ethos
4
+ Ueno saturated gradients · Bruno Simon playful 3D · Locomotive smooth-scroll cinema · Active Theory custom motion · Resn unexpected interaction
5
+
6
+ ## Feel
7
+ Loud, gradient-saturated, motion-forward — a portfolio that performs as you scroll. Custom cursor, marquee headlines at viewport scale, gradient skies bleeding across sections, and one-of-one 3D moments that earn their weight. Confident weirdness, not chaos: the rules are broken on purpose, with a designer's hand visible in every transition.
8
+
9
+ ## Reference brands
10
+ - **Ueno** → saturated gradients, custom display type, experimental layout. The gradient sky is part of the brand.
11
+ - **Bruno Simon (portfolio)** → playful 3D as the entire interface. The website *is* the case study.
12
+ - **Locomotive** → smooth-scroll cinema, viewport-scale display typography.
13
+ - **Active Theory** → heavy motion choreography, scroll-tied 3D scenes.
14
+ - **Resn** → weird-cool unexpected interactions, custom cursors, "wait, did the page just do that?"
15
+
16
+ ## Tokens
17
+ All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin. No numbered or generic tokens — every new color traces to a brand.
18
+
19
+ Surface stack is **ink** (background, near-black with cool bias) → **card** (one stop up) → **popover** (two stops up). Depth comes from glows and gradients, not from soft fills. The gradient utility `gradient-skin` (pink → violet → cyan) is the brand-defining surface and earns its own token slot.
20
+
21
+ Brand tokens: `--hot-pink`, `--electric-violet`, `--cyber-cyan`, `--acid-lime`, `--sunset-orange`, `--ink`, `--bone`. Primary is **hot-pink**, never the gradient itself — the gradient is reserved for hero surfaces and the canonical CTA fill.
22
+
23
+ ## Typography
24
+ - **Display:** Fraunces (expressive serif with optical-size personality). h1–h2. Tracking `-0.04em` — crushed tight at viewport scale, agency-display feel.
25
+ - **Body:** Plus Jakarta Sans (modern geometric sans with personality). Body base **17px** with **line-height 1.5** — punchy, case-study pace.
26
+ - **Mono:** JetBrains Mono. Dev-console labels, scroll-percent overlays, timestamp captions — Resn/Active Theory debug-UI texture.
27
+
28
+ H1 uses `clamp(4rem, 14vw, 12rem)` — viewport-scale, Ueno-large. Font features: `"ss01"`, `"ss02"`, `"ss03"`, `"liga"`, `"dlig"` — Fraunces ships alternates worth using.
29
+
30
+ ## Spacing
31
+ - **Container:** `max-w-[1440px] px-6 lg:px-12` — wide, because full-bleed hero and 3D scenes need the canvas.
32
+ - **Section padding tiers:**
33
+ - Hero: `pt-32 pb-24 lg:pt-48 lg:pb-40` (theatrical entry)
34
+ - Default: `py-24 lg:py-40`
35
+ - Tight: `py-16 lg:py-24`
36
+ - **Allowed scale values:** 4 8 12 16 24 32 48 64 96 128 160 240. The scale skips small steps on purpose — this is large-gesture design.
37
+
38
+ ## Color
39
+ No hex anywhere in component files. All color via tokens. Opacity via `/N` modifier on token, not via new tokens. Pure white and pure black are forbidden — `--bone` and `--ink` replace them. The `gradient-skin` utility (pink → violet → cyan, 135deg) is the canonical brand gradient and is the only diagonal allowed; vertical/horizontal variants are out of language.
40
+
41
+ ## Radius
42
+ `--radius: 1rem`. **Generous rounding on cards, panels, and chips.** Pills are allowed (`pillsAllowed: true`) and are the canonical CTA shape. The roundness is playful, not corporate — paired with motion it reads alive, not enterprise.
43
+
44
+ ## Shadows
45
+ **Glow.** Three utilities: `glow-pink`, `glow-cyan` (multi-stop colored glows for feature cards and hero CTAs), and `gradient-skin` (the brand gradient surface). No neutral drop shadows — depth is colored or it's not there.
46
+
47
+ ## Motion
48
+ Six keyframes. This is a motion-first direction: motion is the brand.
49
+ - **gradient-shift** (12s, infinite) — hero background never sits still.
50
+ - **blob-morph** (14s, infinite) — floating gradient blobs behind hero, Resn organic motion.
51
+ - **marquee** (18s, infinite) — Locomotive viewport-scale headline scroll.
52
+ - **cursor-pulse** (1.4s, infinite) — custom cursor halo. The cursor is a UI element, not the OS arrow.
53
+ - **scroll-reveal** (800ms, once) — case-study entrance, fires on intersection.
54
+ - **tilt-hover** (500ms, once) — card 3D tilt on pointer-enter, Active Theory mouse parallax.
55
+
56
+ Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored — every keyframe wrapped in a media query that snaps to the end state.
57
+
58
+ ## Component patterns
59
+ - **Buttons:** two registers. (1) **Gradient-skin pill** — pink→violet→cyan fill, bone text, glow-pink on hover. The canonical hero CTA. (2) **Outline pill** — 1px border, foreground text, fills with hot-pink on hover. Buttons scale 1.03 and tilt-hover on pointer-enter. Never a flat ghost.
60
+ - **Cards:** rounded 1rem, hairline border, `bg-card`. Feature cards layer `glow-pink` or `glow-cyan` and respond to pointer with `tilt-hover`. Case-study cards are full-bleed image with display-serif title overlay and a saturated duotone treatment on hover.
61
+ - **Inputs:** rounded 1rem, `bg-card`, 1px border. Label above in mono uppercase, `tracking-[0.08em]`. Focus shifts border to `--hot-pink` and adds a `hot-pink/20` 4px outer ring. Pill-shaped for search and email capture.
62
+ - **CTA links:** the gradient-skin pill is *the* hero CTA. Scroll-tied marquee headlines act as ambient secondary CTAs. Never a plain rectangle, and never more than one gradient-skin button per fold.
63
+
64
+ ## Recommended rich media
65
+ This is an agency portfolio: **the work is the rich media**. Lead with one full-bleed hero case study — auto-playing muted product film, WebGL canvas, or a single high-contrast still treated with a pink/violet duotone. Subsequent sections cut to grid of case-study cards, each with hover video preview. Photography is **studio-lit product or process work**, color-graded with a magenta-to-cyan split-tone (push pinks in highlights, cyans in shadows). Illustration is **3D render** (Blender/Spline) with rim-lit glossy materials — chrome, jelly, holographic — never flat or hand-drawn.
66
+
67
+ **AI tool recommendations:** **Midjourney** for "iridescent chrome 3D render, octane studio lighting, magenta cyan rim light" and "saturated risograph poster, Ueno-inspired" prompts. **Spline** for live 3D scenes embedded in hero. **Runway / Kling** for short looping product films and morph cuts. Avoid Midjourney's default "epic cinematic" preset — explicitly prompt for studio-product or risograph-poster framing.
68
+
69
+ **Aspect ratios:** 16:9 hero (full-bleed cinema), 4:5 for case-study cards (Instagram-portrait reads as agency-curated), 1:1 for process snapshots. Avoid 3:2 (editorial territory).
70
+
71
+ **Video:** essential. Hero auto-plays muted, loops seamlessly, ≤6 MB H.265 or AV1. Every case-study card carries a 2–4 second hover-preview loop. Provide a poster image so the first paint isn't blank.
72
+
73
+ **Performance:** the budget is generous because the medium is the message — but hero video ≤6 MB and total above-fold ≤2.5 MB AVIF for stills. LCP under 2.5s; if the hero blows it, lazy-load the WebGL scene behind a poster.
74
+
75
+ **Avoid:** stock photography of any kind, AI photos with uncanny hands or fake-bokeh, flat illustration (that's mid-century or maximalist territory), corporate dashboard screenshots, soft pastel gradients (soft-modern territory), dark-moody product shots without color (cinematic-dark territory).
76
+
77
+ **Accessibility:** every hover-preview video carries a poster fallback and pauses under `prefers-reduced-motion`. Custom cursor is decorative-only — never the sole affordance for interactivity; the underlying element is still tab-navigable and keyboard-actionable. Color contrast on gradient-skin buttons is checked against the *lightest* gradient stop (cyan).
78
+
79
+ ## Component families
80
+ None at install time. Family conventions emerge as the project grows; the Director appends them here as they're established.
81
+
82
+ ## Details
83
+ - **Selection:** `hsl(var(--acid-lime) / 0.45)` background, ink text — selection is a brand surprise.
84
+ - **Focus ring:** `2px solid hsl(var(--ring))`. Hot-pink, thick enough to read against gradient skies.
85
+ - **Scrollbar:** none. The scroll metaphor is replaced by smooth-scroll choreography and scroll-percent overlays.
86
+
87
+ ## Exceptions
88
+ None yet. When an intentional one-of-one violation lands, add it here with the reason. The Director's consistency pass lists all exceptions for human review.
89
+
90
+ ## Revisions
91
+ - Initial direction, generated at install time.