@stylecrib/cli 0.0.0-stage → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/README.md +163 -2
  2. package/agents/MANIFEST.yml +136 -0
  3. package/agents/README.md +75 -0
  4. package/agents/art-director.md +168 -0
  5. package/agents/audacity-director.md +109 -0
  6. package/agents/brand-identity.md +179 -0
  7. package/agents/brand-precedent.md +119 -0
  8. package/agents/brief-enforcer.md +136 -0
  9. package/agents/component-qa.md +167 -0
  10. package/agents/cto.md +49 -0
  11. package/agents/design-director.md +184 -0
  12. package/agents/design-systems-engineer.md +162 -0
  13. package/agents/direction-curator.md +133 -0
  14. package/agents/homogeneity-detector.md +104 -0
  15. package/agents/logo-designer.md +240 -0
  16. package/agents/marketing-designer.md +156 -0
  17. package/agents/media-curator.md +165 -0
  18. package/agents/motion-engineer.md +270 -0
  19. package/agents/qa-conductor.md +143 -0
  20. package/agents/render-qa.md +133 -0
  21. package/agents/upgrade-simulator.md +123 -0
  22. package/agents/vp-architecture.md +49 -0
  23. package/agents/vp-engineering.md +49 -0
  24. package/dist/index.js +7182 -0
  25. package/package.json +69 -4
  26. package/themes/README.md +70 -0
  27. package/themes/acrylic-soft/THEME.md +142 -0
  28. package/themes/acrylic-soft/tokens.ts +180 -0
  29. package/themes/agency-creative/THEME.md +91 -0
  30. package/themes/agency-creative/tokens.ts +202 -0
  31. package/themes/agency-portfolio/THEME.md +109 -0
  32. package/themes/agency-portfolio/tokens.ts +159 -0
  33. package/themes/ai-startup/THEME.md +95 -0
  34. package/themes/ai-startup/tokens.ts +162 -0
  35. package/themes/airline-modern/THEME.md +104 -0
  36. package/themes/airline-modern/tokens.ts +179 -0
  37. package/themes/arc-stack/.anchor-render.png +0 -0
  38. package/themes/arc-stack/THEME.md +125 -0
  39. package/themes/arc-stack/audit.log.jsonl +6 -0
  40. package/themes/arc-stack/dismissals.jsonl +3 -0
  41. package/themes/arc-stack/tailwind.snippet.ts +17 -0
  42. package/themes/arc-stack/theme.yml +153 -0
  43. package/themes/arc-stack/tokens.ts +29 -0
  44. package/themes/architectural/THEME.md +102 -0
  45. package/themes/architectural/tokens.ts +159 -0
  46. package/themes/atelier-radiance/THEME.md +93 -0
  47. package/themes/atelier-radiance/audit.log.jsonl +1 -0
  48. package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
  49. package/themes/atelier-radiance/theme.yml +130 -0
  50. package/themes/atelier-radiance/tokens.ts +29 -0
  51. package/themes/automotive-ev/THEME.md +87 -0
  52. package/themes/automotive-ev/tokens.ts +183 -0
  53. package/themes/automotive-luxury/THEME.md +88 -0
  54. package/themes/automotive-luxury/tokens.ts +175 -0
  55. package/themes/baby-modern/THEME.md +79 -0
  56. package/themes/baby-modern/tokens.ts +184 -0
  57. package/themes/banking-gravity/THEME.md +171 -0
  58. package/themes/banking-gravity/tokens.ts +169 -0
  59. package/themes/beauty-clean/THEME.md +92 -0
  60. package/themes/beauty-clean/tokens.ts +176 -0
  61. package/themes/beauty-luxury/THEME.md +96 -0
  62. package/themes/beauty-luxury/tokens.ts +178 -0
  63. package/themes/bento-modular/.anchor-render.png +0 -0
  64. package/themes/bento-modular/BUILD_BRIEF.md +171 -0
  65. package/themes/bento-modular/THEME.md +80 -0
  66. package/themes/bento-modular/audit.log.jsonl +3 -0
  67. package/themes/bento-modular/dismissals.jsonl +1 -0
  68. package/themes/bento-modular/tailwind.snippet.ts +17 -0
  69. package/themes/bento-modular/theme.yml +83 -0
  70. package/themes/bento-modular/tokens.ts +27 -0
  71. package/themes/bookstore-indie/THEME.md +78 -0
  72. package/themes/bookstore-indie/tokens.ts +147 -0
  73. package/themes/brutalist/THEME.md +96 -0
  74. package/themes/brutalist/tokens.ts +151 -0
  75. package/themes/business-tiles/THEME.md +141 -0
  76. package/themes/business-tiles/tokens.ts +178 -0
  77. package/themes/cabana-poster/THEME.md +158 -0
  78. package/themes/cabana-poster/audit.log.jsonl +1 -0
  79. package/themes/cabana-poster/tailwind.snippet.ts +16 -0
  80. package/themes/cabana-poster/theme.yml +221 -0
  81. package/themes/cabana-poster/tokens.ts +34 -0
  82. package/themes/case-panel/THEME.md +126 -0
  83. package/themes/case-panel/audit.log.jsonl +2 -0
  84. package/themes/case-panel/tailwind.snippet.ts +15 -0
  85. package/themes/case-panel/theme.yml +153 -0
  86. package/themes/case-panel/tokens.ts +28 -0
  87. package/themes/cinematic-dark/THEME.md +97 -0
  88. package/themes/cinematic-dark/tokens.ts +195 -0
  89. package/themes/classic-car/THEME.md +86 -0
  90. package/themes/classic-car/tokens.ts +173 -0
  91. package/themes/cloud-friendly/THEME.md +152 -0
  92. package/themes/cloud-friendly/tokens.ts +181 -0
  93. package/themes/community-niche/THEME.md +102 -0
  94. package/themes/community-niche/tokens.ts +177 -0
  95. package/themes/corporate-grid/THEME.md +154 -0
  96. package/themes/corporate-grid/tokens.ts +182 -0
  97. package/themes/couture-luxury/THEME.md +85 -0
  98. package/themes/couture-luxury/tokens.ts +146 -0
  99. package/themes/creator-social/THEME.md +131 -0
  100. package/themes/creator-social/tokens.ts +249 -0
  101. package/themes/crypto-onchain/THEME.md +100 -0
  102. package/themes/crypto-onchain/tokens.ts +207 -0
  103. package/themes/cycling-brand/THEME.md +78 -0
  104. package/themes/cycling-brand/tokens.ts +185 -0
  105. package/themes/dating-friendly/THEME.md +102 -0
  106. package/themes/dating-friendly/tokens.ts +178 -0
  107. package/themes/dense-utility/THEME.md +85 -0
  108. package/themes/dense-utility/tokens.ts +155 -0
  109. package/themes/devtool-cli/THEME.md +100 -0
  110. package/themes/devtool-cli/tokens.ts +195 -0
  111. package/themes/devtool-docs/THEME.md +105 -0
  112. package/themes/devtool-docs/tokens.ts +177 -0
  113. package/themes/editorial/THEME.md +129 -0
  114. package/themes/editorial/audit.log.jsonl +2 -0
  115. package/themes/editorial/tailwind.snippet.ts +15 -0
  116. package/themes/editorial/theme.yml +173 -0
  117. package/themes/editorial/tokens.ts +29 -0
  118. package/themes/education-formal/THEME.md +154 -0
  119. package/themes/education-formal/audit.log.jsonl +1 -0
  120. package/themes/education-formal/tailwind.snippet.ts +15 -0
  121. package/themes/education-formal/theme.yml +186 -0
  122. package/themes/education-formal/tokens.ts +29 -0
  123. package/themes/education-warm/THEME.md +91 -0
  124. package/themes/education-warm/tokens.ts +185 -0
  125. package/themes/ember-poster/README.md +79 -0
  126. package/themes/ember-poster/THEME.md +101 -0
  127. package/themes/ember-poster/audit.log.jsonl +17 -0
  128. package/themes/ember-poster/package.json +34 -0
  129. package/themes/ember-poster/tailwind.snippet.ts +17 -0
  130. package/themes/ember-poster/theme.yml +109 -0
  131. package/themes/ember-poster/tokens.ts +27 -0
  132. package/themes/enterprise-cloud/THEME.md +139 -0
  133. package/themes/enterprise-cloud/tokens.ts +179 -0
  134. package/themes/enterprise-tech/.anchor-render.png +0 -0
  135. package/themes/enterprise-tech/THEME.md +167 -0
  136. package/themes/enterprise-tech/audit.log.jsonl +1 -0
  137. package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
  138. package/themes/enterprise-tech/theme.yml +202 -0
  139. package/themes/enterprise-tech/tokens.ts +29 -0
  140. package/themes/ev-charging/THEME.md +94 -0
  141. package/themes/ev-charging/tokens.ts +185 -0
  142. package/themes/farm-direct/THEME.md +92 -0
  143. package/themes/farm-direct/tokens.ts +180 -0
  144. package/themes/fintech-card/THEME.md +96 -0
  145. package/themes/fintech-card/tokens.ts +191 -0
  146. package/themes/fintech-trust/THEME.md +94 -0
  147. package/themes/fintech-trust/tokens.ts +192 -0
  148. package/themes/food-blog/THEME.md +98 -0
  149. package/themes/food-blog/tokens.ts +183 -0
  150. package/themes/forum-classic/THEME.md +100 -0
  151. package/themes/forum-classic/tokens.ts +168 -0
  152. package/themes/fresh-plate/.anchor-render.png +0 -0
  153. package/themes/fresh-plate/THEME.md +144 -0
  154. package/themes/fresh-plate/audit.log.jsonl +2 -0
  155. package/themes/fresh-plate/dismissals.jsonl +3 -0
  156. package/themes/fresh-plate/tailwind.snippet.ts +16 -0
  157. package/themes/fresh-plate/theme.yml +189 -0
  158. package/themes/fresh-plate/tokens.ts +30 -0
  159. package/themes/furniture-modern/THEME.md +94 -0
  160. package/themes/furniture-modern/tokens.ts +176 -0
  161. package/themes/gaming-esports/THEME.md +146 -0
  162. package/themes/gaming-esports/tokens.ts +199 -0
  163. package/themes/gaming-streamer/THEME.md +139 -0
  164. package/themes/gaming-streamer/tokens.ts +201 -0
  165. package/themes/glassmorphic-modern/THEME.md +119 -0
  166. package/themes/glassmorphic-modern/tokens.ts +174 -0
  167. package/themes/government-civic/THEME.md +138 -0
  168. package/themes/government-civic/tokens.ts +164 -0
  169. package/themes/gym-chain/THEME.md +79 -0
  170. package/themes/gym-chain/tokens.ts +196 -0
  171. package/themes/healthcare-bright/THEME.md +95 -0
  172. package/themes/healthcare-bright/tokens.ts +184 -0
  173. package/themes/home-decor/THEME.md +94 -0
  174. package/themes/home-decor/tokens.ts +177 -0
  175. package/themes/hotel-boutique/THEME.md +110 -0
  176. package/themes/hotel-boutique/tokens.ts +179 -0
  177. package/themes/hyperminimal-mono/THEME.md +91 -0
  178. package/themes/hyperminimal-mono/tokens.ts +150 -0
  179. package/themes/indie-art-game/THEME.md +107 -0
  180. package/themes/indie-art-game/tokens.ts +216 -0
  181. package/themes/insurance-legacy/THEME.md +101 -0
  182. package/themes/insurance-legacy/tokens.ts +182 -0
  183. package/themes/insurance-modern/THEME.md +103 -0
  184. package/themes/insurance-modern/tokens.ts +192 -0
  185. package/themes/kaiju-reveal/THEME.md +97 -0
  186. package/themes/kaiju-reveal/tokens.ts +185 -0
  187. package/themes/kinetic-data/THEME.md +172 -0
  188. package/themes/kinetic-data/audit.log.jsonl +1 -0
  189. package/themes/kinetic-data/tailwind.snippet.ts +16 -0
  190. package/themes/kinetic-data/theme.yml +207 -0
  191. package/themes/kinetic-data/tokens.ts +30 -0
  192. package/themes/kinetic-headline/.anchor-render.png +0 -0
  193. package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
  194. package/themes/kinetic-headline/THEME.md +78 -0
  195. package/themes/kinetic-headline/audit.log.jsonl +4 -0
  196. package/themes/kinetic-headline/dismissals.jsonl +1 -0
  197. package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
  198. package/themes/kinetic-headline/theme.yml +81 -0
  199. package/themes/kinetic-headline/tokens.ts +26 -0
  200. package/themes/law-firm/THEME.md +108 -0
  201. package/themes/law-firm/tokens.ts +158 -0
  202. package/themes/lawtech-modern/THEME.md +107 -0
  203. package/themes/lawtech-modern/tokens.ts +192 -0
  204. package/themes/linkedin-pro/THEME.md +102 -0
  205. package/themes/linkedin-pro/tokens.ts +174 -0
  206. package/themes/logistics-modern/THEME.md +94 -0
  207. package/themes/logistics-modern/tokens.ts +187 -0
  208. package/themes/magazine-glossy/THEME.md +74 -0
  209. package/themes/magazine-glossy/tokens.ts +158 -0
  210. package/themes/marker-mag/THEME.md +128 -0
  211. package/themes/marker-mag/audit.log.jsonl +1 -0
  212. package/themes/marker-mag/tailwind.snippet.ts +15 -0
  213. package/themes/marker-mag/theme.yml +159 -0
  214. package/themes/marker-mag/tokens.ts +27 -0
  215. package/themes/marketplace-modern/THEME.md +135 -0
  216. package/themes/marketplace-modern/tokens.ts +186 -0
  217. package/themes/marketplace-vintage/THEME.md +110 -0
  218. package/themes/marketplace-vintage/tokens.ts +185 -0
  219. package/themes/maximalist/THEME.md +96 -0
  220. package/themes/maximalist/tokens.ts +168 -0
  221. package/themes/mid-century/THEME.md +109 -0
  222. package/themes/mid-century/tokens.ts +162 -0
  223. package/themes/motorcycle-brand/THEME.md +86 -0
  224. package/themes/motorcycle-brand/tokens.ts +174 -0
  225. package/themes/museum/THEME.md +83 -0
  226. package/themes/museum/tokens.ts +147 -0
  227. package/themes/music-streaming/THEME.md +101 -0
  228. package/themes/music-streaming/tokens.ts +187 -0
  229. package/themes/music-vinyl/THEME.md +98 -0
  230. package/themes/music-vinyl/tokens.ts +167 -0
  231. package/themes/nature-distilled/.anchor-render.png +0 -0
  232. package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
  233. package/themes/nature-distilled/THEME.md +81 -0
  234. package/themes/nature-distilled/audit.log.jsonl +2 -0
  235. package/themes/nature-distilled/tailwind.snippet.ts +16 -0
  236. package/themes/nature-distilled/theme.yml +91 -0
  237. package/themes/nature-distilled/tokens.ts +26 -0
  238. package/themes/news-tabloid/THEME.md +72 -0
  239. package/themes/news-tabloid/tokens.ts +158 -0
  240. package/themes/news-tech/THEME.md +75 -0
  241. package/themes/news-tech/tokens.ts +149 -0
  242. package/themes/newsletter/THEME.md +82 -0
  243. package/themes/newsletter/tokens.ts +138 -0
  244. package/themes/newspaper-classic/THEME.md +74 -0
  245. package/themes/newspaper-classic/tokens.ts +159 -0
  246. package/themes/nonprofit-arts/THEME.md +78 -0
  247. package/themes/nonprofit-arts/tokens.ts +157 -0
  248. package/themes/nonprofit-warm/THEME.md +105 -0
  249. package/themes/nonprofit-warm/tokens.ts +188 -0
  250. package/themes/outdoor-adventure/THEME.md +113 -0
  251. package/themes/outdoor-adventure/tokens.ts +181 -0
  252. package/themes/overland-broadside/THEME.md +119 -0
  253. package/themes/overland-broadside/audit.log.jsonl +1 -0
  254. package/themes/overland-broadside/tailwind.snippet.ts +17 -0
  255. package/themes/overland-broadside/theme.yml +138 -0
  256. package/themes/overland-broadside/tokens.ts +27 -0
  257. package/themes/performance-engineered/THEME.md +162 -0
  258. package/themes/performance-engineered/audit.log.jsonl +1 -0
  259. package/themes/performance-engineered/tailwind.snippet.ts +15 -0
  260. package/themes/performance-engineered/theme.yml +193 -0
  261. package/themes/performance-engineered/tokens.ts +29 -0
  262. package/themes/pet-food/THEME.md +78 -0
  263. package/themes/pet-food/tokens.ts +185 -0
  264. package/themes/pharma-clinical/THEME.md +164 -0
  265. package/themes/pharma-clinical/audit.log.jsonl +1 -0
  266. package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
  267. package/themes/pharma-clinical/theme.yml +201 -0
  268. package/themes/pharma-clinical/tokens.ts +29 -0
  269. package/themes/pill-editorial/THEME.md +125 -0
  270. package/themes/pill-editorial/audit.log.jsonl +1 -0
  271. package/themes/pill-editorial/tailwind.snippet.ts +15 -0
  272. package/themes/pill-editorial/theme.yml +168 -0
  273. package/themes/pill-editorial/tokens.ts +31 -0
  274. package/themes/podcast-warm/THEME.md +103 -0
  275. package/themes/podcast-warm/tokens.ts +192 -0
  276. package/themes/publisher-indie/THEME.md +78 -0
  277. package/themes/publisher-indie/tokens.ts +148 -0
  278. package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
  279. package/themes/raw-concrete/THEME.md +76 -0
  280. package/themes/raw-concrete/audit.log.jsonl +10 -0
  281. package/themes/raw-concrete/tailwind.snippet.ts +16 -0
  282. package/themes/raw-concrete/theme.yml +88 -0
  283. package/themes/raw-concrete/tokens.ts +27 -0
  284. package/themes/realestate-luxury/THEME.md +94 -0
  285. package/themes/realestate-luxury/tokens.ts +169 -0
  286. package/themes/realestate-marketplace/THEME.md +106 -0
  287. package/themes/realestate-marketplace/tokens.ts +183 -0
  288. package/themes/restaurant-modern/THEME.md +109 -0
  289. package/themes/restaurant-modern/tokens.ts +172 -0
  290. package/themes/runway-fashion/THEME.md +99 -0
  291. package/themes/runway-fashion/tokens.ts +167 -0
  292. package/themes/saturday-morning/THEME.md +117 -0
  293. package/themes/saturday-morning/tokens.ts +281 -0
  294. package/themes/schema.ts +235 -0
  295. package/themes/signal-dark/BUILD_BRIEF.md +168 -0
  296. package/themes/signal-dark/THEME.md +107 -0
  297. package/themes/signal-dark/tokens.ts +181 -0
  298. package/themes/soft-modern/THEME.md +91 -0
  299. package/themes/soft-modern/tokens.ts +166 -0
  300. package/themes/solar-residential/THEME.md +92 -0
  301. package/themes/solar-residential/tokens.ts +176 -0
  302. package/themes/sports-league/THEME.md +180 -0
  303. package/themes/sports-league/audit.log.jsonl +1 -0
  304. package/themes/sports-league/tailwind.snippet.ts +15 -0
  305. package/themes/sports-league/theme.yml +213 -0
  306. package/themes/sports-league/tokens.ts +32 -0
  307. package/themes/stadium-sport/THEME.md +114 -0
  308. package/themes/stadium-sport/tokens.ts +187 -0
  309. package/themes/streetwear-hype/THEME.md +100 -0
  310. package/themes/streetwear-hype/tokens.ts +174 -0
  311. package/themes/studio-architect/THEME.md +108 -0
  312. package/themes/studio-architect/tokens.ts +162 -0
  313. package/themes/studio-photographer/THEME.md +88 -0
  314. package/themes/studio-photographer/tokens.ts +164 -0
  315. package/themes/team-kanban/.anchor-render.png +0 -0
  316. package/themes/team-kanban/THEME.md +167 -0
  317. package/themes/team-kanban/audit.log.jsonl +2 -0
  318. package/themes/team-kanban/dismissals.jsonl +1 -0
  319. package/themes/team-kanban/tailwind.snippet.ts +15 -0
  320. package/themes/team-kanban/theme.yml +209 -0
  321. package/themes/team-kanban/tokens.ts +35 -0
  322. package/themes/telehealth-modern/THEME.md +95 -0
  323. package/themes/telehealth-modern/tokens.ts +197 -0
  324. package/themes/tourism-board/THEME.md +111 -0
  325. package/themes/tourism-board/tokens.ts +173 -0
  326. package/themes/toys-modern/THEME.md +79 -0
  327. package/themes/toys-modern/tokens.ts +200 -0
  328. package/themes/travel-luxury/THEME.md +95 -0
  329. package/themes/travel-luxury/tokens.ts +162 -0
  330. package/themes/vacation-rental/THEME.md +105 -0
  331. package/themes/vacation-rental/tokens.ts +174 -0
  332. package/themes/vault-reel/THEME.md +134 -0
  333. package/themes/vault-reel/audit.log.jsonl +3 -0
  334. package/themes/vault-reel/tailwind.snippet.ts +16 -0
  335. package/themes/vault-reel/theme.yml +167 -0
  336. package/themes/vault-reel/tokens.ts +30 -0
  337. package/themes/vet-modern/THEME.md +79 -0
  338. package/themes/vet-modern/tokens.ts +194 -0
  339. package/themes/web3-restraint/THEME.md +87 -0
  340. package/themes/web3-restraint/tokens.ts +154 -0
  341. package/themes/wellness-active/THEME.md +102 -0
  342. package/themes/wellness-active/tokens.ts +203 -0
  343. package/themes/wellness-spa/THEME.md +93 -0
  344. package/themes/wellness-spa/tokens.ts +173 -0
  345. package/themes/y2k-chrome/THEME.md +118 -0
  346. package/themes/y2k-chrome/tokens.ts +249 -0
  347. package/themes/yoga-studio/THEME.md +76 -0
  348. package/themes/yoga-studio/tokens.ts +163 -0
@@ -0,0 +1,114 @@
1
+ # Design Direction — Stadium Sport
2
+
3
+ ## Ethos
4
+ Nike condensed display · Bleacher Report energy · ESPN broadcast urgency · Adidas three-stripe heritage · Champions League stadium scale
5
+
6
+ ## Feel
7
+ High-energy broadcast aesthetic. Condensed bold display type at oversized "JUMBOTRON" scale. Action photography is the lead medium; UI is a stadium scoreboard. Reads as live and urgent — not contemplative. The surface should feel like a broadcast graphics layer over a packed stadium, not a magazine spread.
8
+
9
+ ## Reference brands
10
+ - **Nike** → condensed all-caps headlines, athletic urgency, swoosh momentum. Display type carries the brand; copy moves at the speed of an athlete.
11
+ - **Bleacher Report** → energetic sports media, dense action photography. Information density and a relentless feed of moments.
12
+ - **ESPN SportsCenter** → broadcast urgency, score tickers, primary-red. The lower-third aesthetic — scores, timecodes, LIVE chips.
13
+ - **Adidas** → three-stripe industrial heritage, technical sportswear. Hairline panel gaps and industrial grays underneath the urgency.
14
+ - **Champions League / UEFA** → stadium-scale typography, monumental moments. The H1 is a wall, not a headline.
15
+
16
+ ## Tokens
17
+ HSL triples in `src/index.css`. Every token's `from:` comment names a brand·trait. Untraceable tokens fail review.
18
+
19
+ Surface stack steps in ~3% lightness from `bg → card → popover → secondary → muted → accent`, holding a near-neutral hue (`0 0%`) — the stadium void is achromatic, the scarlet is the only color event. Depth comes from **hairline borders, the scarlet glow, and the JUMBOTRON drop shadow** — not from blanket fill contrast.
20
+
21
+ Brand tokens: `--scarlet` (Nike/ESPN urgency, alias of primary), `--jet` (Champions League pure void, behind broadcast graphics), `--electric` (ESPN broadcast electric blue, for score overlays and lower-third accents), `--gold-medal` (championship gold, trophy and winner moments).
22
+
23
+ Primary is **broadcast scarlet** (`16 90% 50%`) — the only saturated color on the page. Use it for the single hero CTA per surface, the LIVE dot, and broadcast-urgency moments. Electric blue and gold-medal are reserved as named accents — never elevated to the primary slot.
24
+
25
+ ## Typography
26
+ - **Display:** Anton (Nike condensed headline canonical). Single weight 400 — Anton ships as one cut. ALL CAPS by default; tracking `0.02em` to give condensed glyphs broadcast clarity at scale.
27
+ - **Body:** Inter (clean, neutral — lets photography lead). Base 16px, line-height 1.55. Tracking `0`. Inter is the broadcast caption voice; the type does not perform, the photography does.
28
+ - **Mono:** JetBrains Mono. Reserved for scores, stats, timecodes, jersey numbers, prices, any tabular numeric — broadcast score-ticker DNA. `"tnum"` on by default.
29
+
30
+ H1 uses `clamp(3.5rem, 10vw, 8.5rem)` — **JUMBOTRON scale**. Display headings default to `text-transform: uppercase`. Font features: `"tnum", "ss01", "cv11"`.
31
+
32
+ ## Spacing
33
+ - **Container:** `max-w-7xl px-4 lg:px-8`. Action photography and 21:9 hero footage demand width.
34
+ - **Section padding tiers:**
35
+ - Hero: `pt-16 pb-12 lg:pt-24 lg:pb-16` — tight relative to editorial directions; broadcast pacing.
36
+ - Default: `py-12 lg:py-20`
37
+ - Tight: `py-8 lg:py-12`
38
+ - **Allowed scale values:** 4 6 8 12 16 20 24 32 40 48 64 80 96 128. **Medium-high density** — broadcast information-dense, not crammed.
39
+
40
+ ## Color
41
+ No hex in component files. All color via tokens. Opacity via `/N` modifier on token. Pure white is forbidden in body — `--foreground` (`0 0% 98%`) is broadcast white, never `#fff`. Pure black is reserved for `--jet` (`0 0% 4%`) — used as the void behind broadcast overlays; the live `--background` is `0 0% 8%` (deep broadcast black with the slightest lift off true black).
42
+
43
+ Scarlet and gold-medal are **never used together at full saturation on the same surface** — they fight. Convention: scarlet for urgency, CTAs, LIVE; gold-medal for championship/winner moments; electric blue for data overlays and score callouts.
44
+
45
+ ## Radius
46
+ `--radius: 0.25rem` (4px). **Sharp athletic, not pillow-soft.** Pills are disallowed (`pillsAllowed: false`) — pills read lifestyle app; broadcast UI is rectangular scoreboard tiles. Every corner is a scoreboard corner.
47
+
48
+ ## Shadows
49
+ **Glow style.** Three utilities:
50
+ - `.glow-scarlet` — `0 0 0 1px scarlet/0.4, 0 8px 24px scarlet/0.28, 0 32px 80px scarlet/0.22`. Multi-layer scarlet halo plus a 1px ring. Use on primary CTAs and hero/feature cards holding rich action photography.
51
+ - `.shadow-jumbotron` — `0 16px 32px jet/0.6, 0 40px 80px jet/0.5`. Heavy mono drop shadow — the broadcast-overlay weight. Sits under primary buttons and floating scoreboard tiles.
52
+ - `.glow-electric` — `0 0 0 1px electric/0.4, 0 8px 24px electric/0.28`. Score-overlay and data-callout glow.
53
+
54
+ Conventional drop shadows outside these utilities are forbidden. The glow IS the elevation language, and the jumbotron shadow IS the broadcast-overlay depth.
55
+
56
+ ## Motion
57
+ Four keyframes. High-energy — durations cluster at **400–500ms (reveals), 1s (LIVE loops), 24s (ticker ambient)**:
58
+ - `score-flip` (400ms once) — vertical card flip (`rotateX 0 → -90 → 0`). Stat reveals, flip-clock score changes.
59
+ - `slide-bold` (500ms once) — opacity + 40px translate from below. Headline entrance, broadcast lower-third.
60
+ - `pulse-urgent` (1000ms infinite) — expanding scarlet box-shadow ring + opacity pulse. The LIVE-indicator heartbeat. **One per surface max.**
61
+ - `ticker-scroll` (24000ms infinite) — `translateX(0 → -50%)`. Score-ticker bottom bar.
62
+
63
+ Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored — every keyframe is wrapped in the media query and `pulse-urgent` / `ticker-scroll` collapse to a static frame.
64
+
65
+ ## Component patterns
66
+ - **Buttons:** primary is **solid scarlet, ALL CAPS Anton**, tracking `0.04em`, `rounded-sm`, paired with `.shadow-jumbotron`. It reads like a stadium-scoreboard tile. Secondary is ghost (1px border + foreground text, also ALL CAPS condensed). **No pill shapes.**
67
+ - **Cards:** sharp `rounded-sm`, hairline 1px `--border`, `bg-card` one stop above the void. Padding `p-5 lg:p-8` — broadcast info-dense. Hero/feature cards holding action photography may use `.glow-scarlet` or `.shadow-jumbotron`. Stat cards lead with mono numerals (JetBrains Mono, tabular-nums).
68
+ - **Inputs:** full `rounded-sm` box, 1px border, `bg-card`. Focus = `2px solid var(--ring)` (scarlet). Label above in `font-display` (Anton) `tracking-[0.06em] uppercase` small size.
69
+ - **CTAs:** primary scarlet ALL CAPS Anton button with `.shadow-jumbotron` is the default. `.pulse-urgent` permitted on a single LIVE/now indicator per surface — never more than one. Tertiary is a foreground text link with 1px underline at 4px offset.
70
+
71
+ ## Component families
72
+ None at install time. Likely first families as the project grows: `ScoreCard` (flip-clock + mono numerals), `LiveBadge` (pulse-urgent dot + label), `TickerStrip` (ticker-scroll bottom bar), `JumbotronHeadline` (clamp-scaled Anton over hero photography).
73
+
74
+ ## Recommended rich media
75
+
76
+ **Cover medium.** Action photography (athletes mid-motion) is the lead. Stadium aerials anchor section openers; slow-motion video loops at 21:9 carry the hero. Broadcast overlay graphics — scoreboards, lower-thirds, stat callouts — layer over the photography, not replace it.
77
+
78
+ **AI tool recommendations.**
79
+ - *Photography / hero stills:* **Midjourney** or **Flux**. Prompt pattern: `"Nike sports campaign photography, slow-motion athlete, stadium light, dramatic shadows, 35mm, broadcast aesthetic"`. Vary sport (sprint, basketball, football, cycling), lens (35mm / 85mm / drone-aerial), and lighting (stadium floodlights / golden-hour pre-game / night-game) to keep a set cohesive.
80
+ - *Video:* **Sora**, **Runway**, or **Pika** for hero loops. Prompt with shot language: `"slow-motion athlete, stadium broadcast lens, anamorphic flare, 24fps cinema, no cuts"`. Hold shots long; the slowdown is the drama.
81
+ - *Broadcast overlays:* design in Figma / Recraft, render as PNG/SVG, composite over photography. Scoreboards, lower-thirds, LIVE chips, score callouts — these are graphic elements, not AI-generated.
82
+
83
+ **Aspect ratios.**
84
+ - **21:9** widescreen for hero stills and video — cinematic broadcast feel.
85
+ - **16:9** for action loops and mid-page video.
86
+ - **1:1** for athlete-portrait grid tiles.
87
+ - **Never vertical 9:16** for hero — this language is broadcast, not TikTok.
88
+
89
+ **Color grading.** High contrast, deep blacks, scarlet accents pulled forward. Stadium lighting is the natural palette — floodlit greens, hardwood ambers, ice-rink whites, night-game blue casts. Skin tones run warm, never orange. Preserve crowd grain — packed stadiums are part of the look.
90
+
91
+ **Performance budgets.**
92
+ - Hero photos: ≤200 KB AVIF/WebP at 1920w.
93
+ - Hero videos: ≤8 MB at 1080p, `autoplay muted loop playsinline`, mobile fallback to a still poster frame.
94
+ - Lazy-load anything below the fold; the first paint is the hero photograph + JUMBOTRON headline.
95
+
96
+ **What to AVOID.**
97
+ - Editorial pacing — long-form spreads, contemplative whitespace. This direction broadcasts, doesn't whisper.
98
+ - Soft pastels — every saturated color here is scarlet, electric blue, or gold-medal. No mauves, no sage, no cream.
99
+ - Decorative serif type — Anton is the only display face. No serifs anywhere; serifs read editorial, not broadcast.
100
+ - Stock studio sports photography with logos blurred — use AI-generated or attributed action photography that reads as a real moment.
101
+ - Vertical 9:16 hero video — this is a stadium, not a phone feed.
102
+
103
+ **Accessibility.** Every video has a still `poster` attribute. Alt-text names the action and the sport (`"sprinter mid-stride at the finish line under stadium floodlights"`). Decorative overlays use `aria-hidden="true"`. Captions on any video with audio. `pulse-urgent` and `ticker-scroll` are disabled under `prefers-reduced-motion`.
104
+
105
+ ## Details
106
+ - **Selection:** `hsl(var(--scarlet) / 0.35)` background, foreground text — a flash of broadcast scarlet.
107
+ - **Focus ring:** `2px solid hsl(var(--ring))` — visible, scarlet, never quiet.
108
+ - **Scrollbar:** thin.
109
+
110
+ ## Exceptions
111
+ None yet. When an intentional one-of-one violation lands, add it here with the reason.
112
+
113
+ ## Revisions
114
+ - Initial direction, generated at install time.
@@ -0,0 +1,187 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const stadiumSport: Direction = {
4
+ name: "stadium-sport",
5
+ ethos:
6
+ "Nike condensed display · Bleacher Report energy · ESPN broadcast urgency · " +
7
+ "Adidas three-stripe heritage · Champions League stadium scale",
8
+ references: [
9
+ { brand: "Nike", trait: "condensed all-caps headlines, athletic urgency, swoosh momentum" },
10
+ { brand: "Bleacher Report", trait: "energetic sports media, dense action photography" },
11
+ { brand: "ESPN SportsCenter", trait: "broadcast urgency, score tickers, primary-red" },
12
+ { brand: "Adidas", trait: "three-stripe industrial heritage, technical sportswear" },
13
+ { brand: "Champions League / UEFA", trait: "stadium-scale typography, monumental moments" },
14
+ ],
15
+ feel:
16
+ "High-energy broadcast aesthetic. Condensed bold display type at oversized 'JUMBOTRON' scale. " +
17
+ "Action photography is the lead medium; UI is a stadium scoreboard. " +
18
+ "Reads as live and urgent — not contemplative.",
19
+
20
+ fonts: {
21
+ display: {
22
+ family: "Anton",
23
+ fallback: ["Oswald", "Impact", "Haettenschweiler", "Arial Narrow Bold", "sans-serif"],
24
+ from: "Nike condensed headline — broadcast-poster weight, JUMBOTRON-scale all-caps",
25
+ googleFont: "Anton",
26
+ weights: [400],
27
+ },
28
+ body: {
29
+ family: "Inter",
30
+ fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
31
+ from: "clean, neutral body — lets action photography lead, ESPN caption voice",
32
+ googleFont: "Inter",
33
+ weights: [400, 500, 600, 700],
34
+ },
35
+ mono: {
36
+ family: "JetBrains Mono",
37
+ fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
38
+ from: "scores, stats, timecodes, tabular numerics — broadcast score-ticker DNA",
39
+ googleFont: "JetBrains+Mono",
40
+ weights: [400, 500, 700],
41
+ },
42
+ },
43
+
44
+ typography: {
45
+ headingTracking: "0.02em", // condensed display sans needs a touch of air for broadcast clarity
46
+ bodyTracking: "0",
47
+ fontFeatureSettings: '"tnum", "ss01", "cv11"',
48
+ h1ScaleClamp: "clamp(3.5rem, 10vw, 8.5rem)", // JUMBOTRON scale — Champions League monumental
49
+ bodyBaseSize: "1rem",
50
+ bodyLineHeight: "1.55",
51
+ },
52
+
53
+ colors: {
54
+ background: { hsl: "0 0% 8%", from: "deep broadcast black — Champions League stadium void" },
55
+ foreground: { hsl: "0 0% 98%", from: "high-contrast broadcast white — ESPN graphics layer" },
56
+ card: { hsl: "0 0% 11%", from: "elevated scoreboard surface, one stop above the void" },
57
+ popover: { hsl: "0 0% 13%", from: "broadcast overlay popover — two stops above the void" },
58
+ primary: { hsl: "16 90% 50%", from: "Nike orange / ESPN scarlet — broadcast urgency accent" },
59
+ primaryForeground: { hsl: "0 0% 98%", from: "broadcast white on scarlet — CTA legibility" },
60
+ secondary: { hsl: "0 0% 16%", from: "Adidas industrial gray — technical sportswear shadowed tier" },
61
+ secondaryForeground: { hsl: "0 0% 98%", from: "broadcast white on Adidas industrial gray" },
62
+ muted: { hsl: "0 0% 18%", from: "Adidas industrial gray, one tick lighter — muted scoreboard panel" },
63
+ mutedForeground: { hsl: "0 0% 70%", from: "Bleacher Report caption gray — secondary stat text" },
64
+ accent: { hsl: "0 0% 20%", from: "Adidas industrial gray — broadcast hover panel highlight" },
65
+ accentForeground: { hsl: "0 0% 98%", from: "broadcast white on accent panel" },
66
+ border: { hsl: "0 0% 22%", from: "Adidas three-stripe hairline — visible scoreboard panel-gap" },
67
+ input: { hsl: "0 0% 22%", from: "Adidas hairline — same language as border" },
68
+ ring: { hsl: "16 90% 50%", from: "Nike scarlet — focus ring is the broadcast-urgency accent" },
69
+ destructive: { hsl: "0 85% 55%", from: "ESPN penalty-card red — louder than scarlet, alert hue" },
70
+ destructiveForeground: { hsl: "0 0% 98%", from: "broadcast white on penalty red" },
71
+ brand: {
72
+ scarlet: { hsl: "16 90% 50%", from: "Nike/ESPN scarlet — alias of primary, broadcast urgency" },
73
+ jet: { hsl: "0 0% 4%", from: "Champions League stadium black — the pure void behind broadcast graphics" },
74
+ electric: { hsl: "210 100% 55%", from: "ESPN broadcast electric blue — score overlay/lower-third accent" },
75
+ "gold-medal": { hsl: "44 95% 55%", from: "Champions League championship gold — trophy and winner accent" },
76
+ },
77
+ },
78
+
79
+ spacing: {
80
+ base: 4,
81
+ scale: [4, 6, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128], // medium-high density — broadcast info-dense
82
+ containerMax: "max-w-7xl", // wide — action photography and 21:9 hero footage need it
83
+ containerPadding: "px-4 lg:px-8",
84
+ sectionPadding: {
85
+ hero: "pt-16 pb-12 lg:pt-24 lg:pb-16",
86
+ default: "py-12 lg:py-20",
87
+ tight: "py-8 lg:py-12",
88
+ },
89
+ },
90
+
91
+ radius: {
92
+ base: "0.25rem", // 4px — sharp athletic, not pillow-soft, scoreboard rectangle
93
+ pillsAllowed: false, // pills read lifestyle app; broadcast UI is rectangles and tickers
94
+ },
95
+
96
+ shadows: {
97
+ style: "glow",
98
+ utilities: {
99
+ "glow-scarlet":
100
+ "0 0 0 1px hsl(var(--scarlet) / 0.4), " +
101
+ "0 8px 24px hsl(var(--scarlet) / 0.28), " +
102
+ "0 32px 80px hsl(var(--scarlet) / 0.22)",
103
+ "shadow-jumbotron":
104
+ "0 16px 32px hsl(var(--jet) / 0.6), " +
105
+ "0 40px 80px hsl(var(--jet) / 0.5)",
106
+ "glow-electric":
107
+ "0 0 0 1px hsl(var(--electric) / 0.4), " +
108
+ "0 8px 24px hsl(var(--electric) / 0.28)",
109
+ },
110
+ },
111
+
112
+ motion: {
113
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
114
+ durations: {
115
+ reveal: 500, // slide-bold — fast, broadcast-cut entrance
116
+ loop: 1000, // pulse-urgent — LIVE-indicator heartbeat
117
+ ambient: 12000, // ticker marquee, ambient scoreboard motion
118
+ },
119
+ keyframes: {
120
+ "score-flip": {
121
+ css:
122
+ "0% { transform: rotateX(0); }\n" +
123
+ "50% { transform: rotateX(-90deg); }\n" +
124
+ "100% { transform: rotateX(0); }",
125
+ defaultDuration: 400,
126
+ iteration: "once",
127
+ purpose: "vertical card flip for stat reveals — flip-clock score change",
128
+ },
129
+ "slide-bold": {
130
+ css:
131
+ "from { opacity: 0; transform: translateY(40px); }\n" +
132
+ "to { opacity: 1; transform: translateY(0); }",
133
+ defaultDuration: 500,
134
+ iteration: "once",
135
+ purpose: "slide-in from below for headlines — broadcast lower-third entrance",
136
+ },
137
+ "pulse-urgent": {
138
+ css:
139
+ "0%, 100% { box-shadow: 0 0 0 0 hsl(var(--scarlet) / 0.7); opacity: 1; }\n" +
140
+ "50% { box-shadow: 0 0 0 10px hsl(var(--scarlet) / 0); opacity: 0.85; }",
141
+ defaultDuration: 1000,
142
+ iteration: "infinite",
143
+ purpose: "signal pulse for LIVE indicators — the on-air heartbeat",
144
+ },
145
+ "ticker-scroll": {
146
+ css:
147
+ "from { transform: translateX(0); }\n" +
148
+ "to { transform: translateX(-50%); }",
149
+ defaultDuration: 24000,
150
+ iteration: "infinite",
151
+ purpose: "horizontal score-ticker scroll — broadcast bottom-bar",
152
+ },
153
+ },
154
+ respectsReducedMotion: true,
155
+ },
156
+
157
+ density: "high",
158
+
159
+ patterns: {
160
+ button:
161
+ "Primary = solid scarlet (bg-primary, primary-foreground text), font-display (Anton), " +
162
+ "ALL CAPS, tracking 0.04em, sharp rect (rounded-sm). " +
163
+ "Drop shadow uses mono ink (.shadow-jumbotron) — broadcast-overlay weight. " +
164
+ "Secondary is ghost (1px border, foreground text, ALL CAPS condensed). " +
165
+ "No pill shapes — every CTA reads like a stadium scoreboard tile.",
166
+ card:
167
+ "Sharp rounded-sm corners, hairline 1px var(--border), bg-card one stop above the void. " +
168
+ "Padding p-5 lg:p-8 — broadcast info-dense. " +
169
+ "Hero/feature cards holding rich media may use .glow-scarlet or .shadow-jumbotron. " +
170
+ "Stat cards lead with mono numerals (JetBrains Mono, tabular-nums).",
171
+ input:
172
+ "Full rounded-sm box, 1px border, bg-card. Focus = 2px scarlet ring. " +
173
+ "Label above in font-display (Anton) tracking 0.06em uppercase at small size; " +
174
+ "helper text below in mutedForeground.",
175
+ cta:
176
+ "Primary = solid scarlet ALL CAPS Anton button with .shadow-jumbotron — the broadcast-CTA. " +
177
+ ".pulse-urgent permitted on a single LIVE/now indicator per surface, never on more than one. " +
178
+ "Tertiary is a foreground-color text link with 1px underline at 4px offset — score-ticker honest.",
179
+ },
180
+
181
+ details: {
182
+ selectionBg: "hsl(var(--scarlet) / 0.35)",
183
+ selectionFg: "hsl(var(--foreground))",
184
+ focusRing: "2px solid hsl(var(--ring))",
185
+ scrollbarStyle: "thin",
186
+ },
187
+ };
@@ -0,0 +1,100 @@
1
+ # Design Direction — Streetwear Hype
2
+
3
+ ## Ethos
4
+ Supreme red box logo · Off-White typewriter italics · Stüssy graffiti heritage · Palace tri-ferg · Yeezy beige neutrality
5
+
6
+ ## Feel
7
+ Hype-culture pageantry. Bold Futura-style display in confident caps. Red box logo treatments. Typewriter Courier italics in "QUOTES" everywhere (the Virgil signature). Sticker-style hard-offset shadows. Reads as drop-day energy.
8
+
9
+ ## Reference brands
10
+ - **Supreme** → red box logo, blackletter italic, sticker culture. The rectangle is the brand.
11
+ - **Off-White / Virgil Abloh** → Helvetica with quote-marks around "EVERYTHING", industrial typewriter. Captions on the world.
12
+ - **Stüssy** → graffiti-script signature, surf-skate heritage. The original hand-drawn drop.
13
+ - **Palace** → tri-ferg logo, British irony, neon highlights. The wink inside the hype.
14
+ - **Yeezy** → Kanye's beige neutrality. The high-end streetwear move — bone is louder than color.
15
+
16
+ ## Tokens
17
+ HSL triples in `src/index.css`. Every token's `from:` comment names its brand origin. The surface stack is **bone** (background) → **bone** (card) → **deeper oat** (muted) — Yeezy neutrality carries through. Depth never comes from soft fill differentiation; it comes from **hard tar borders** and the **`.shadow-sticker`** utility.
18
+
19
+ Brand tokens (named, never numbered): `--supreme-red` (= primary), `--palace-neon` (= accent), `--safety-orange` (= destructive), `--bone` (= background), `--tar` (= foreground). Five tokens, no more — this is not maximalist's eight-color paint box; it is a tight box-logo system.
20
+
21
+ Primary is **Supreme red** (`0 95% 50%`) — the canonical hype-drop accent. Foreground is **hard tar** (`0 0% 4%`), one tick off pure black for ink fidelity. Background is **Yeezy oat** (`35 25% 95%`), warm bone — never pure white.
22
+
23
+ ## Typography
24
+ - **Display:** Inter at weight **900** with very tight tracking (`-0.04em`). This is the open-source stand-in for **Druk Wide / Futura Heavy** — confident bold sans in all caps. Loaded as `Inter:wght@900` from Google Fonts. The drop-poster voice.
25
+ - **Body:** **Courier Prime** at 16px (`Courier+Prime:wght@400;700`). The Off-White / Virgil industrial-typewriter signature — running prose looks like a shipping label. Line-height `1.5`. Body tracking `0.02em` to let Courier breathe.
26
+ - **Mono:** **Courier Prime again.** Virgil convention: mono and body are the same face. Mono is not a separate voice — it is the voice.
27
+
28
+ Font features: `"ss01", "tnum"` — tabular figures for drop-lists, price tags, and SKU tables. H1 clamps at `clamp(2.75rem, 8vw, 6rem)` — drop-poster scale, all caps, unafraid.
29
+
30
+ **The quote-mark idiom.** Headings and labels regularly wrap a single word in straight quotes: `"HOODIE"`, `"E-MAIL"`, `"SHOP ALL"`. This is the Virgil signature and it is on-direction. The `quotes-jitter` keyframe (see Motion) is built for it.
31
+
32
+ ## Spacing
33
+ - **Container:** `max-w-5xl px-4 lg:px-8` — drop-page width. Wide enough for product flatlay grids and the manifesto column; tighter than maximalist's decoration-padded `5xl`.
34
+ - **Section padding tiers:**
35
+ - Hero: `pt-16 pb-12 lg:pt-24 lg:pb-16` — drop-banner generosity, but the type does the work, not the whitespace.
36
+ - Default: `py-12 lg:py-20`
37
+ - Tight: `py-8 lg:py-12`
38
+ - **Allowed scale values:** 2 4 6 8 12 16 20 24 32 48. Medium-high density — sharper than maximalist, looser than brutalist. The `2` step is reserved for inline icon-to-text gaps.
39
+
40
+ ## Color
41
+ No hex anywhere. **Bone (`--background`) and tar (`--foreground`) are the foundation** — pure white and pure black are out of language. The drop palette is precisely five tokens: bone, tar, Supreme red, Palace neon, safety orange. Every additional color reads as a different direction.
42
+
43
+ Components are encouraged to override their background with `--tar` (the box-logo inverse panel) or `--supreme-red` (the box-logo itself). Palace neon is the highlight, never the primary — it lives at hover state and selection. Safety orange is the destructive lane, kept far from Supreme red so the two never collide.
44
+
45
+ ## Radius
46
+ `--radius: 0`. **Sharp box-logo corners only.** Pills are disallowed (`pillsAllowed: false`) — status badges, capsule buttons, and rounded inputs all read web-app, not drop-page. The entire language is right angles; the only "rounding" allowed is the sticker shadow's offset.
47
+
48
+ ## Shadows
49
+ **Style: none.** A single utility: **`.shadow-sticker`** — `4px 4px 0 0 hsl(var(--foreground))`. Hard offset, zero blur, foreground-colored. This is the sticker-decal / Supreme paste-up move and it is the only shadow this language ships. Soft drop shadows, glows, and ambient elevations are out of direction.
50
+
51
+ ## Motion
52
+ Drop-day timing. Two keyframes:
53
+
54
+ - **`box-pop`** — scale `0.92 → 1.02 → 1`, 200ms once. Supreme box-logo entrance with overshoot. Used for primary buttons, badges, drop banners — the "it just dropped" feel.
55
+ - **`quotes-jitter`** — rotate `-1deg → 1deg → -1deg`, 800ms infinite. Subtle Virgil-style vibrating italic. Applied to text wrapped in quote marks (`"FOR DISPLAY ONLY"`). The twitch is small enough to feel like a glitch and large enough to read as intentional.
56
+
57
+ Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` honored — the jitter is suppressed entirely under reduced motion, and `box-pop` collapses to a no-op.
58
+
59
+ ## Component patterns
60
+ - **Buttons:** Primary = the Supreme red box. Bold Inter 900 caps on `--supreme-red` background, sharp 0 radius, no internal border. Hover engages `.shadow-sticker` — the button gains a 4px 4px tar offset like a sticker just got slapped on. Secondary = the inverse: tar panel with bone caps. **No ghost buttons, no pills, no rounded.** Drop-day energy commits to fill and right angles.
61
+ - **Cards:** 1px or 2px hard tar border, bone background (or any brand token as panel override). Sharp 0 radius. Internal padding `p-6 lg:p-8`. Title in Inter 900 caps, often with quote marks around a single word (`"HOODIE"`). Optional `.shadow-sticker` for the drop-flyer pinned-to-the-wall look.
62
+ - **Inputs:** full box with 2px tar border, bone bg. Sharp corners. Label sits above in Courier caps with quote marks (`"E-MAIL"`). Focus shifts border to Supreme red (the ring). **No border-bottom-only treatment** — that's editorial language.
63
+ - **CTAs:** filled red box-logo rectangle, bold Inter 900 caps, sticker shadow on hover. Secondary CTAs may be Courier-italic links wrapped in quote marks (`"SHOP ALL"`) with an underline. **Never a plain text link without quotes** — every CTA carries the Virgil signature.
64
+
65
+ ## Component families
66
+ None at install time. Patterns to expect: red-box-logo CTAs, tar inverse panels, sticker-shadow cards, quote-mark headlines, Courier-italic captions, drop-list tables with tabular figures. The Director appends conventions here as they're established.
67
+
68
+ ## Details
69
+ - **Selection:** `hsl(var(--brand-palace-neon) / 0.6)` background, foreground text. The high-vibration Palace neon doubles as selection — the only place neon touches body type.
70
+ - **Focus ring:** `2px solid hsl(var(--ring))` — Supreme red, 2px to match input border weight. Visible against bone without overwhelming the box-logo language.
71
+ - **Scrollbar:** auto. Native — drop pages let the browser scrollbar through; restyling it is a soft-modern affordance.
72
+
73
+ ## Recommended rich media
74
+
75
+ **Cover imagery.** Streetwear lookbook photography (model on warm seamless or street, harsh on-camera flash style), product flatlays, sticker art, screen-print textures. Imagery should read as if it came off a drop-day Instagram grid — direct, bright-flashed, no romance.
76
+
77
+ **AI tool recommendations.**
78
+ - **Midjourney** with prompts like `"streetwear lookbook photography, on-camera flash, Supreme drop, warm beige seamless, harsh shadow, Virgil Abloh aesthetic"` — the lookbook hero shot.
79
+ - **Recraft** for sticker / graphic mark generation — the Supreme paste-up, the Stüssy script tag, the tri-ferg sticker.
80
+ - **Carbon / Ray.so** with a custom theme on warm bone background for "drop list" text panels — release schedules, SKU tables, manifesto blocks rendered as image.
81
+
82
+ **Aspect ratios.** 1:1 square (drop-post Instagram standard, the native format for this language) and 4:5 portrait (product-page primary). 16:9 landscape is out of direction — drop-day imagery is square or vertical.
83
+
84
+ **Color in imagery.** Imagery sits on the bone/red/tar/neon system. A lookbook shot may have one Palace neon prop and otherwise read tar-on-bone. Product flatlays should feature **at least one** of: Supreme red, Palace neon, or safety orange — but not all three.
85
+
86
+ **What to AVOID.**
87
+ - Warm color grading on photography (this direction is bone + red + black + neon — not the cream-grade of maximalist or the teal-and-orange of cinematic)
88
+ - Gradient meshes — every gradient in this language is "off"
89
+ - Decorative serifs anywhere — confident industrial type is the direction; if a serif appears, it is the wrong direction
90
+ - Soft drop shadows on imagery (the language is `.shadow-sticker` only — hard offset, zero blur)
91
+ - Pastel palettes, watercolor textures, hand-drawn flourishes (those are saturday-morning or runway-fashion)
92
+ - Lifestyle stock photography with smiling models in coffee shops
93
+
94
+ **Accessibility.** The Supreme-red-on-bone primary CTA meets WCAG AA at 16px+ bold; verify any red-on-bone body text — it doesn't pass at small sizes, so body type stays tar. Palace neon on bone fails AA for body text by design — it is reserved for selection, hover highlights, and large display only. Alt-text should describe the drop, not the photography: "white Supreme box-logo tee on bone seamless" not "model wearing shirt."
95
+
96
+ ## Exceptions
97
+ None yet. When an intentional one-of-one violation lands, add it here with the reason.
98
+
99
+ ## Revisions
100
+ - Initial direction, generated at install time.
@@ -0,0 +1,174 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const streetwearHype: Direction = {
4
+ name: "streetwear-hype",
5
+ ethos:
6
+ "Supreme red box logo · Off-White typewriter italics · Stüssy graffiti heritage · Palace tri-ferg · Yeezy beige neutrality",
7
+ references: [
8
+ { brand: "Supreme", trait: "red box logo, blackletter italic, sticker culture" },
9
+ { brand: "Off-White / Virgil Abloh", trait: 'Helvetica with quote-marks around "EVERYTHING", industrial typewriter' },
10
+ { brand: "Stüssy", trait: "graffiti-script signature, surf-skate heritage" },
11
+ { brand: "Palace", trait: "tri-ferg logo, British irony, neon highlights" },
12
+ { brand: "Yeezy", trait: "Kanye's beige neutrality — the high-end streetwear move" },
13
+ ],
14
+ feel:
15
+ "Hype-culture pageantry. Bold Futura-style display in confident caps. Red box logo treatments. " +
16
+ 'Typewriter Courier italics in "QUOTES" everywhere (the Virgil signature). Sticker-style hard-offset ' +
17
+ "shadows. Reads as drop-day energy.",
18
+
19
+ fonts: {
20
+ display: {
21
+ family: "Inter",
22
+ fallback: ["Futura", "Helvetica Neue", "Arial Black", "system-ui", "sans-serif"],
23
+ from: "Druk Wide / Futura Heavy stand-in — Inter at weight 900 with very tight tracking; confident bold sans, the drop-poster voice",
24
+ googleFont: "Inter:wght@900",
25
+ weights: [400, 900],
26
+ },
27
+ body: {
28
+ family: "Courier Prime",
29
+ fallback: ["Courier New", "Inter", "ui-monospace", "monospace"],
30
+ from: "Off-White / Virgil industrial typewriter — Courier as body face is the Virgil signature, prose looks like a shipping label",
31
+ googleFont: "Courier+Prime:wght@400;700",
32
+ weights: [400, 700],
33
+ },
34
+ mono: {
35
+ family: "Courier Prime",
36
+ fallback: ["Courier New", "ui-monospace", "SFMono-Regular", "monospace"],
37
+ from: "Virgil convention — body AND mono share Courier; mono is not a separate voice, it is the voice",
38
+ googleFont: "Courier+Prime:wght@400;700",
39
+ weights: [400, 700],
40
+ },
41
+ },
42
+
43
+ typography: {
44
+ headingTracking: "-0.04em", // Druk/Futura caps want very tight tracking — Inter 900 needs it tighter still
45
+ bodyTracking: "0.02em", // Courier Prime widens slightly — Virgil's typewriter caption look
46
+ fontFeatureSettings: '"ss01", "tnum"', // tabular figures — drop-list and price-tag heritage
47
+ h1ScaleClamp: "clamp(2.75rem, 8vw, 6rem)", // drop-poster scale: large, all-caps, unafraid
48
+ bodyBaseSize: "1rem", // 16px Courier — typewriter dignity
49
+ bodyLineHeight: "1.5",
50
+ },
51
+
52
+ colors: {
53
+ background: { hsl: "35 25% 95%", from: "Yeezy oat — Kanye beige neutrality, the high-end streetwear bone surface" },
54
+ foreground: { hsl: "0 0% 4%", from: "hard black — Supreme box-logo ink, screen-print black" },
55
+ card: { hsl: "35 25% 95%", from: "same as background — surfaces don't differentiate by fill; depth comes from sticker shadow" },
56
+ popover: { hsl: "35 25% 95%", from: "same as background — Yeezy oat throughout, no nested fills" },
57
+ primary: { hsl: "0 95% 50%", from: "Supreme red box logo — the canonical hype-drop accent" },
58
+ primaryForeground: { hsl: "35 25% 95%", from: "Yeezy oat on Supreme red — bone cream on the box logo, never pure white" },
59
+ secondary: { hsl: "0 0% 4%", from: "tar black — secondary action is the box-logo inverse, hard black panel" },
60
+ secondaryForeground: { hsl: "35 25% 95%", from: "Yeezy oat on tar — the screen-print negative" },
61
+ muted: { hsl: "35 15% 88%", from: "deeper oat — Yeezy quiet panel, muted backdrop for body copy" },
62
+ mutedForeground: { hsl: "0 0% 30%", from: "Off-White industrial gray — typewriter caption color, secondary text" },
63
+ accent: { hsl: "90 95% 55%", from: "= brand.palace-neon — Palace neon yellow-green, hover and highlight accent" },
64
+ accentForeground: { hsl: "0 0% 4%", from: "tar on Palace neon — only legible direction" },
65
+ border: { hsl: "0 0% 4%", from: "tar — hard black 1px (or 2px) border, screen-print outline" },
66
+ input: { hsl: "0 0% 4%", from: "same as border — inputs wear the hard black box-logo outline" },
67
+ ring: { hsl: "0 95% 50%", from: "Supreme red — focus only, matches primary" },
68
+ destructive: { hsl: "24 100% 55%", from: "= brand.safety-orange — industrial caution orange, distinct from Supreme red" },
69
+ destructiveForeground: { hsl: "0 0% 4%", from: "tar on safety orange — hazard-sign legibility" },
70
+ brand: {
71
+ "supreme-red": {
72
+ hsl: "0 95% 50%",
73
+ from: "= primary; Supreme red box logo, the canonical hype-drop accent, also semantic for brand-mark surfaces",
74
+ },
75
+ "palace-neon": {
76
+ hsl: "90 95% 55%",
77
+ from: "Palace neon yellow-green — tri-ferg highlight, British-irony zing against the bone/black system",
78
+ },
79
+ "safety-orange": {
80
+ hsl: "24 100% 55%",
81
+ from: "industrial caution orange — Virgil's construction-site signage, hazard tape, shipping label energy",
82
+ },
83
+ bone: {
84
+ hsl: "35 25% 95%",
85
+ from: "= background; Yeezy oat — Kanye beige neutrality, also a named token because components reach for it as fill",
86
+ },
87
+ tar: {
88
+ hsl: "0 0% 4%",
89
+ from: "= foreground; hard black ink, screen-print black, also semantic for the box-logo inverse panel",
90
+ },
91
+ },
92
+ },
93
+
94
+ spacing: {
95
+ base: 4,
96
+ scale: [2, 4, 6, 8, 12, 16, 20, 24, 32, 48], // medium-high — drop-poster compositions need room for type, but density stays sharp
97
+ containerMax: "max-w-5xl", // drop-page width — wide enough for product flatlay grids and the manifesto column
98
+ containerPadding: "px-4 lg:px-8",
99
+ sectionPadding: {
100
+ hero: "pt-16 pb-12 lg:pt-24 lg:pb-16",
101
+ default: "py-12 lg:py-20",
102
+ tight: "py-8 lg:py-12",
103
+ },
104
+ },
105
+
106
+ radius: {
107
+ base: "0", // sharp box-logo corners — the entire language is right angles
108
+ pillsAllowed: false, // no pills — drop-day energy is rectangular, sticker-decal, screen-print
109
+ },
110
+
111
+ shadows: {
112
+ style: "none",
113
+ utilities: {
114
+ "shadow-sticker":
115
+ "4px 4px 0 0 hsl(var(--foreground))", // hard offset, zero blur — sticker decal feel, Supreme paste-up energy
116
+ },
117
+ },
118
+
119
+ motion: {
120
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
121
+ durations: {
122
+ reveal: 200, // box-pop entrance — drop-day immediacy
123
+ loop: 800, // quotes-jitter — slow vibrating italic
124
+ ambient: 800, // same as loop — there is no slow ambient in this language
125
+ },
126
+ keyframes: {
127
+ "box-pop": {
128
+ css:
129
+ "0% { transform: scale(0.92); }\n" +
130
+ "60% { transform: scale(1.02); }\n" +
131
+ "100% { transform: scale(1); }",
132
+ defaultDuration: 200,
133
+ iteration: "once",
134
+ purpose: "drop-day entrance — Supreme box-logo arriving with overshoot, used for primary buttons, badges, drop banners",
135
+ },
136
+ "quotes-jitter": {
137
+ css:
138
+ "0%, 100% { transform: rotate(-1deg); }\n" +
139
+ "50% { transform: rotate(1deg); }",
140
+ defaultDuration: 800,
141
+ iteration: "infinite",
142
+ purpose: 'subtle vibrating Virgil-style italic — applied to text wrapped in quote marks ("FOR DISPLAY ONLY") to mimic the Off-White twitch',
143
+ },
144
+ },
145
+ respectsReducedMotion: true,
146
+ },
147
+
148
+ density: "medium",
149
+
150
+ patterns: {
151
+ button:
152
+ "Primary = Supreme red box. Bold caps Inter 900 on Supreme red bg, sharp 0 radius, no internal border. " +
153
+ "Hover engages .shadow-sticker (the 4px 4px hard-offset sticker decal). Secondary = tar black panel with bone caps. " +
154
+ "No ghost buttons, no pills, no rounded — drop-day energy commits to fill and right angles.",
155
+ card:
156
+ "1px or 2px hard tar border, bone background (or any brand token as panel override). Sharp 0 radius. " +
157
+ 'Internal padding p-6 lg:p-8. Title in Inter 900 caps, often with quote marks around a single word ("HOODIE"). ' +
158
+ "Optional .shadow-sticker for the drop-flyer pinned-to-the-wall look.",
159
+ input:
160
+ "Full box with 2px tar border, bone bg. Sharp corners. Label sits above in Courier caps with quote marks " +
161
+ '("E-MAIL"). Focus shifts border to Supreme red (ring). No border-bottom-only — that is editorial language.',
162
+ cta:
163
+ "Filled red box-logo rectangle with bold Inter 900 caps. Sticker shadow on hover. " +
164
+ 'Secondary CTAs may be Courier-italic links wrapped in quote marks ("SHOP ALL") with an underline. ' +
165
+ "Never a plain text link without quotes — every CTA carries the Virgil signature.",
166
+ },
167
+
168
+ details: {
169
+ selectionBg: "hsl(var(--brand-palace-neon) / 0.6)", // Palace neon highlight — the high-vibration accent doubles as selection
170
+ selectionFg: "hsl(var(--foreground))",
171
+ focusRing: "2px solid hsl(var(--ring))", // Supreme red, 2px — matches the input border weight
172
+ scrollbarStyle: "auto", // native — drop pages let the browser scrollbar through
173
+ },
174
+ };