@stylecrib/cli 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/README.md +94 -9
  2. package/agents/MANIFEST.yml +136 -0
  3. package/agents/README.md +75 -0
  4. package/agents/art-director.md +168 -0
  5. package/agents/audacity-director.md +109 -0
  6. package/agents/brand-identity.md +179 -0
  7. package/agents/brand-precedent.md +119 -0
  8. package/agents/brief-enforcer.md +136 -0
  9. package/agents/component-qa.md +167 -0
  10. package/agents/cto.md +49 -0
  11. package/agents/design-director.md +184 -0
  12. package/agents/design-systems-engineer.md +162 -0
  13. package/agents/direction-curator.md +133 -0
  14. package/agents/homogeneity-detector.md +104 -0
  15. package/agents/logo-designer.md +240 -0
  16. package/agents/marketing-designer.md +156 -0
  17. package/agents/media-curator.md +165 -0
  18. package/agents/motion-engineer.md +270 -0
  19. package/agents/qa-conductor.md +143 -0
  20. package/agents/render-qa.md +133 -0
  21. package/agents/upgrade-simulator.md +123 -0
  22. package/agents/vp-architecture.md +49 -0
  23. package/agents/vp-engineering.md +49 -0
  24. package/dist/index.js +1577 -463
  25. package/package.json +11 -4
  26. package/themes/README.md +70 -0
  27. package/themes/acrylic-soft/THEME.md +142 -0
  28. package/themes/acrylic-soft/tokens.ts +180 -0
  29. package/themes/agency-creative/THEME.md +91 -0
  30. package/themes/agency-creative/tokens.ts +202 -0
  31. package/themes/agency-portfolio/THEME.md +109 -0
  32. package/themes/agency-portfolio/tokens.ts +159 -0
  33. package/themes/ai-startup/THEME.md +95 -0
  34. package/themes/ai-startup/tokens.ts +162 -0
  35. package/themes/airline-modern/THEME.md +104 -0
  36. package/themes/airline-modern/tokens.ts +179 -0
  37. package/themes/arc-stack/.anchor-render.png +0 -0
  38. package/themes/arc-stack/THEME.md +125 -0
  39. package/themes/arc-stack/audit.log.jsonl +6 -0
  40. package/themes/arc-stack/dismissals.jsonl +3 -0
  41. package/themes/arc-stack/tailwind.snippet.ts +17 -0
  42. package/themes/arc-stack/theme.yml +153 -0
  43. package/themes/arc-stack/tokens.ts +29 -0
  44. package/themes/architectural/THEME.md +102 -0
  45. package/themes/architectural/tokens.ts +159 -0
  46. package/themes/atelier-radiance/THEME.md +93 -0
  47. package/themes/atelier-radiance/audit.log.jsonl +1 -0
  48. package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
  49. package/themes/atelier-radiance/theme.yml +130 -0
  50. package/themes/atelier-radiance/tokens.ts +29 -0
  51. package/themes/automotive-ev/THEME.md +87 -0
  52. package/themes/automotive-ev/tokens.ts +183 -0
  53. package/themes/automotive-luxury/THEME.md +88 -0
  54. package/themes/automotive-luxury/tokens.ts +175 -0
  55. package/themes/baby-modern/THEME.md +79 -0
  56. package/themes/baby-modern/tokens.ts +184 -0
  57. package/themes/banking-gravity/THEME.md +171 -0
  58. package/themes/banking-gravity/tokens.ts +169 -0
  59. package/themes/beauty-clean/THEME.md +92 -0
  60. package/themes/beauty-clean/tokens.ts +176 -0
  61. package/themes/beauty-luxury/THEME.md +96 -0
  62. package/themes/beauty-luxury/tokens.ts +178 -0
  63. package/themes/bento-modular/.anchor-render.png +0 -0
  64. package/themes/bento-modular/BUILD_BRIEF.md +171 -0
  65. package/themes/bento-modular/THEME.md +80 -0
  66. package/themes/bento-modular/audit.log.jsonl +3 -0
  67. package/themes/bento-modular/dismissals.jsonl +1 -0
  68. package/themes/bento-modular/tailwind.snippet.ts +17 -0
  69. package/themes/bento-modular/theme.yml +83 -0
  70. package/themes/bento-modular/tokens.ts +27 -0
  71. package/themes/bookstore-indie/THEME.md +78 -0
  72. package/themes/bookstore-indie/tokens.ts +147 -0
  73. package/themes/brutalist/THEME.md +96 -0
  74. package/themes/brutalist/tokens.ts +151 -0
  75. package/themes/business-tiles/THEME.md +141 -0
  76. package/themes/business-tiles/tokens.ts +178 -0
  77. package/themes/cabana-poster/THEME.md +158 -0
  78. package/themes/cabana-poster/audit.log.jsonl +1 -0
  79. package/themes/cabana-poster/tailwind.snippet.ts +16 -0
  80. package/themes/cabana-poster/theme.yml +221 -0
  81. package/themes/cabana-poster/tokens.ts +34 -0
  82. package/themes/case-panel/THEME.md +126 -0
  83. package/themes/case-panel/audit.log.jsonl +2 -0
  84. package/themes/case-panel/tailwind.snippet.ts +15 -0
  85. package/themes/case-panel/theme.yml +153 -0
  86. package/themes/case-panel/tokens.ts +28 -0
  87. package/themes/cinematic-dark/THEME.md +97 -0
  88. package/themes/cinematic-dark/tokens.ts +195 -0
  89. package/themes/classic-car/THEME.md +86 -0
  90. package/themes/classic-car/tokens.ts +173 -0
  91. package/themes/cloud-friendly/THEME.md +152 -0
  92. package/themes/cloud-friendly/tokens.ts +181 -0
  93. package/themes/community-niche/THEME.md +102 -0
  94. package/themes/community-niche/tokens.ts +177 -0
  95. package/themes/corporate-grid/THEME.md +154 -0
  96. package/themes/corporate-grid/tokens.ts +182 -0
  97. package/themes/couture-luxury/THEME.md +85 -0
  98. package/themes/couture-luxury/tokens.ts +146 -0
  99. package/themes/creator-social/THEME.md +131 -0
  100. package/themes/creator-social/tokens.ts +249 -0
  101. package/themes/crypto-onchain/THEME.md +100 -0
  102. package/themes/crypto-onchain/tokens.ts +207 -0
  103. package/themes/cycling-brand/THEME.md +78 -0
  104. package/themes/cycling-brand/tokens.ts +185 -0
  105. package/themes/dating-friendly/THEME.md +102 -0
  106. package/themes/dating-friendly/tokens.ts +178 -0
  107. package/themes/dense-utility/THEME.md +85 -0
  108. package/themes/dense-utility/tokens.ts +155 -0
  109. package/themes/devtool-cli/THEME.md +100 -0
  110. package/themes/devtool-cli/tokens.ts +195 -0
  111. package/themes/devtool-docs/THEME.md +105 -0
  112. package/themes/devtool-docs/tokens.ts +177 -0
  113. package/themes/editorial/THEME.md +129 -0
  114. package/themes/editorial/audit.log.jsonl +2 -0
  115. package/themes/editorial/tailwind.snippet.ts +15 -0
  116. package/themes/editorial/theme.yml +173 -0
  117. package/themes/editorial/tokens.ts +29 -0
  118. package/themes/education-formal/THEME.md +154 -0
  119. package/themes/education-formal/audit.log.jsonl +1 -0
  120. package/themes/education-formal/tailwind.snippet.ts +15 -0
  121. package/themes/education-formal/theme.yml +186 -0
  122. package/themes/education-formal/tokens.ts +29 -0
  123. package/themes/education-warm/THEME.md +91 -0
  124. package/themes/education-warm/tokens.ts +185 -0
  125. package/themes/ember-poster/README.md +79 -0
  126. package/themes/ember-poster/THEME.md +101 -0
  127. package/themes/ember-poster/audit.log.jsonl +17 -0
  128. package/themes/ember-poster/package.json +34 -0
  129. package/themes/ember-poster/tailwind.snippet.ts +17 -0
  130. package/themes/ember-poster/theme.yml +109 -0
  131. package/themes/ember-poster/tokens.ts +27 -0
  132. package/themes/enterprise-cloud/THEME.md +139 -0
  133. package/themes/enterprise-cloud/tokens.ts +179 -0
  134. package/themes/enterprise-tech/.anchor-render.png +0 -0
  135. package/themes/enterprise-tech/THEME.md +167 -0
  136. package/themes/enterprise-tech/audit.log.jsonl +1 -0
  137. package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
  138. package/themes/enterprise-tech/theme.yml +202 -0
  139. package/themes/enterprise-tech/tokens.ts +29 -0
  140. package/themes/ev-charging/THEME.md +94 -0
  141. package/themes/ev-charging/tokens.ts +185 -0
  142. package/themes/farm-direct/THEME.md +92 -0
  143. package/themes/farm-direct/tokens.ts +180 -0
  144. package/themes/fintech-card/THEME.md +96 -0
  145. package/themes/fintech-card/tokens.ts +191 -0
  146. package/themes/fintech-trust/THEME.md +94 -0
  147. package/themes/fintech-trust/tokens.ts +192 -0
  148. package/themes/food-blog/THEME.md +98 -0
  149. package/themes/food-blog/tokens.ts +183 -0
  150. package/themes/forum-classic/THEME.md +100 -0
  151. package/themes/forum-classic/tokens.ts +168 -0
  152. package/themes/fresh-plate/.anchor-render.png +0 -0
  153. package/themes/fresh-plate/THEME.md +144 -0
  154. package/themes/fresh-plate/audit.log.jsonl +2 -0
  155. package/themes/fresh-plate/dismissals.jsonl +3 -0
  156. package/themes/fresh-plate/tailwind.snippet.ts +16 -0
  157. package/themes/fresh-plate/theme.yml +189 -0
  158. package/themes/fresh-plate/tokens.ts +30 -0
  159. package/themes/furniture-modern/THEME.md +94 -0
  160. package/themes/furniture-modern/tokens.ts +176 -0
  161. package/themes/gaming-esports/THEME.md +146 -0
  162. package/themes/gaming-esports/tokens.ts +199 -0
  163. package/themes/gaming-streamer/THEME.md +139 -0
  164. package/themes/gaming-streamer/tokens.ts +201 -0
  165. package/themes/glassmorphic-modern/THEME.md +119 -0
  166. package/themes/glassmorphic-modern/tokens.ts +174 -0
  167. package/themes/government-civic/THEME.md +138 -0
  168. package/themes/government-civic/tokens.ts +164 -0
  169. package/themes/gym-chain/THEME.md +79 -0
  170. package/themes/gym-chain/tokens.ts +196 -0
  171. package/themes/healthcare-bright/THEME.md +95 -0
  172. package/themes/healthcare-bright/tokens.ts +184 -0
  173. package/themes/home-decor/THEME.md +94 -0
  174. package/themes/home-decor/tokens.ts +177 -0
  175. package/themes/hotel-boutique/THEME.md +110 -0
  176. package/themes/hotel-boutique/tokens.ts +179 -0
  177. package/themes/hyperminimal-mono/THEME.md +91 -0
  178. package/themes/hyperminimal-mono/tokens.ts +150 -0
  179. package/themes/indie-art-game/THEME.md +107 -0
  180. package/themes/indie-art-game/tokens.ts +216 -0
  181. package/themes/insurance-legacy/THEME.md +101 -0
  182. package/themes/insurance-legacy/tokens.ts +182 -0
  183. package/themes/insurance-modern/THEME.md +103 -0
  184. package/themes/insurance-modern/tokens.ts +192 -0
  185. package/themes/kaiju-reveal/THEME.md +97 -0
  186. package/themes/kaiju-reveal/tokens.ts +185 -0
  187. package/themes/kinetic-data/THEME.md +172 -0
  188. package/themes/kinetic-data/audit.log.jsonl +1 -0
  189. package/themes/kinetic-data/tailwind.snippet.ts +16 -0
  190. package/themes/kinetic-data/theme.yml +207 -0
  191. package/themes/kinetic-data/tokens.ts +30 -0
  192. package/themes/kinetic-headline/.anchor-render.png +0 -0
  193. package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
  194. package/themes/kinetic-headline/THEME.md +78 -0
  195. package/themes/kinetic-headline/audit.log.jsonl +4 -0
  196. package/themes/kinetic-headline/dismissals.jsonl +1 -0
  197. package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
  198. package/themes/kinetic-headline/theme.yml +81 -0
  199. package/themes/kinetic-headline/tokens.ts +26 -0
  200. package/themes/law-firm/THEME.md +108 -0
  201. package/themes/law-firm/tokens.ts +158 -0
  202. package/themes/lawtech-modern/THEME.md +107 -0
  203. package/themes/lawtech-modern/tokens.ts +192 -0
  204. package/themes/linkedin-pro/THEME.md +102 -0
  205. package/themes/linkedin-pro/tokens.ts +174 -0
  206. package/themes/logistics-modern/THEME.md +94 -0
  207. package/themes/logistics-modern/tokens.ts +187 -0
  208. package/themes/magazine-glossy/THEME.md +74 -0
  209. package/themes/magazine-glossy/tokens.ts +158 -0
  210. package/themes/marker-mag/THEME.md +128 -0
  211. package/themes/marker-mag/audit.log.jsonl +1 -0
  212. package/themes/marker-mag/tailwind.snippet.ts +15 -0
  213. package/themes/marker-mag/theme.yml +159 -0
  214. package/themes/marker-mag/tokens.ts +27 -0
  215. package/themes/marketplace-modern/THEME.md +135 -0
  216. package/themes/marketplace-modern/tokens.ts +186 -0
  217. package/themes/marketplace-vintage/THEME.md +110 -0
  218. package/themes/marketplace-vintage/tokens.ts +185 -0
  219. package/themes/maximalist/THEME.md +96 -0
  220. package/themes/maximalist/tokens.ts +168 -0
  221. package/themes/mid-century/THEME.md +109 -0
  222. package/themes/mid-century/tokens.ts +162 -0
  223. package/themes/motorcycle-brand/THEME.md +86 -0
  224. package/themes/motorcycle-brand/tokens.ts +174 -0
  225. package/themes/museum/THEME.md +83 -0
  226. package/themes/museum/tokens.ts +147 -0
  227. package/themes/music-streaming/THEME.md +101 -0
  228. package/themes/music-streaming/tokens.ts +187 -0
  229. package/themes/music-vinyl/THEME.md +98 -0
  230. package/themes/music-vinyl/tokens.ts +167 -0
  231. package/themes/nature-distilled/.anchor-render.png +0 -0
  232. package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
  233. package/themes/nature-distilled/THEME.md +81 -0
  234. package/themes/nature-distilled/audit.log.jsonl +2 -0
  235. package/themes/nature-distilled/tailwind.snippet.ts +16 -0
  236. package/themes/nature-distilled/theme.yml +91 -0
  237. package/themes/nature-distilled/tokens.ts +26 -0
  238. package/themes/news-tabloid/THEME.md +72 -0
  239. package/themes/news-tabloid/tokens.ts +158 -0
  240. package/themes/news-tech/THEME.md +75 -0
  241. package/themes/news-tech/tokens.ts +149 -0
  242. package/themes/newsletter/THEME.md +82 -0
  243. package/themes/newsletter/tokens.ts +138 -0
  244. package/themes/newspaper-classic/THEME.md +74 -0
  245. package/themes/newspaper-classic/tokens.ts +159 -0
  246. package/themes/nonprofit-arts/THEME.md +78 -0
  247. package/themes/nonprofit-arts/tokens.ts +157 -0
  248. package/themes/nonprofit-warm/THEME.md +105 -0
  249. package/themes/nonprofit-warm/tokens.ts +188 -0
  250. package/themes/outdoor-adventure/THEME.md +113 -0
  251. package/themes/outdoor-adventure/tokens.ts +181 -0
  252. package/themes/overland-broadside/THEME.md +119 -0
  253. package/themes/overland-broadside/audit.log.jsonl +1 -0
  254. package/themes/overland-broadside/tailwind.snippet.ts +17 -0
  255. package/themes/overland-broadside/theme.yml +138 -0
  256. package/themes/overland-broadside/tokens.ts +27 -0
  257. package/themes/performance-engineered/THEME.md +162 -0
  258. package/themes/performance-engineered/audit.log.jsonl +1 -0
  259. package/themes/performance-engineered/tailwind.snippet.ts +15 -0
  260. package/themes/performance-engineered/theme.yml +193 -0
  261. package/themes/performance-engineered/tokens.ts +29 -0
  262. package/themes/pet-food/THEME.md +78 -0
  263. package/themes/pet-food/tokens.ts +185 -0
  264. package/themes/pharma-clinical/THEME.md +164 -0
  265. package/themes/pharma-clinical/audit.log.jsonl +1 -0
  266. package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
  267. package/themes/pharma-clinical/theme.yml +201 -0
  268. package/themes/pharma-clinical/tokens.ts +29 -0
  269. package/themes/pill-editorial/THEME.md +125 -0
  270. package/themes/pill-editorial/audit.log.jsonl +1 -0
  271. package/themes/pill-editorial/tailwind.snippet.ts +15 -0
  272. package/themes/pill-editorial/theme.yml +168 -0
  273. package/themes/pill-editorial/tokens.ts +31 -0
  274. package/themes/podcast-warm/THEME.md +103 -0
  275. package/themes/podcast-warm/tokens.ts +192 -0
  276. package/themes/publisher-indie/THEME.md +78 -0
  277. package/themes/publisher-indie/tokens.ts +148 -0
  278. package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
  279. package/themes/raw-concrete/THEME.md +76 -0
  280. package/themes/raw-concrete/audit.log.jsonl +10 -0
  281. package/themes/raw-concrete/tailwind.snippet.ts +16 -0
  282. package/themes/raw-concrete/theme.yml +88 -0
  283. package/themes/raw-concrete/tokens.ts +27 -0
  284. package/themes/realestate-luxury/THEME.md +94 -0
  285. package/themes/realestate-luxury/tokens.ts +169 -0
  286. package/themes/realestate-marketplace/THEME.md +106 -0
  287. package/themes/realestate-marketplace/tokens.ts +183 -0
  288. package/themes/restaurant-modern/THEME.md +109 -0
  289. package/themes/restaurant-modern/tokens.ts +172 -0
  290. package/themes/runway-fashion/THEME.md +99 -0
  291. package/themes/runway-fashion/tokens.ts +167 -0
  292. package/themes/saturday-morning/THEME.md +117 -0
  293. package/themes/saturday-morning/tokens.ts +281 -0
  294. package/themes/schema.ts +235 -0
  295. package/themes/signal-dark/BUILD_BRIEF.md +168 -0
  296. package/themes/signal-dark/THEME.md +107 -0
  297. package/themes/signal-dark/tokens.ts +181 -0
  298. package/themes/soft-modern/THEME.md +91 -0
  299. package/themes/soft-modern/tokens.ts +166 -0
  300. package/themes/solar-residential/THEME.md +92 -0
  301. package/themes/solar-residential/tokens.ts +176 -0
  302. package/themes/sports-league/THEME.md +180 -0
  303. package/themes/sports-league/audit.log.jsonl +1 -0
  304. package/themes/sports-league/tailwind.snippet.ts +15 -0
  305. package/themes/sports-league/theme.yml +213 -0
  306. package/themes/sports-league/tokens.ts +32 -0
  307. package/themes/stadium-sport/THEME.md +114 -0
  308. package/themes/stadium-sport/tokens.ts +187 -0
  309. package/themes/streetwear-hype/THEME.md +100 -0
  310. package/themes/streetwear-hype/tokens.ts +174 -0
  311. package/themes/studio-architect/THEME.md +108 -0
  312. package/themes/studio-architect/tokens.ts +162 -0
  313. package/themes/studio-photographer/THEME.md +88 -0
  314. package/themes/studio-photographer/tokens.ts +164 -0
  315. package/themes/team-kanban/.anchor-render.png +0 -0
  316. package/themes/team-kanban/THEME.md +167 -0
  317. package/themes/team-kanban/audit.log.jsonl +2 -0
  318. package/themes/team-kanban/dismissals.jsonl +1 -0
  319. package/themes/team-kanban/tailwind.snippet.ts +15 -0
  320. package/themes/team-kanban/theme.yml +209 -0
  321. package/themes/team-kanban/tokens.ts +35 -0
  322. package/themes/telehealth-modern/THEME.md +95 -0
  323. package/themes/telehealth-modern/tokens.ts +197 -0
  324. package/themes/tourism-board/THEME.md +111 -0
  325. package/themes/tourism-board/tokens.ts +173 -0
  326. package/themes/toys-modern/THEME.md +79 -0
  327. package/themes/toys-modern/tokens.ts +200 -0
  328. package/themes/travel-luxury/THEME.md +95 -0
  329. package/themes/travel-luxury/tokens.ts +162 -0
  330. package/themes/vacation-rental/THEME.md +105 -0
  331. package/themes/vacation-rental/tokens.ts +174 -0
  332. package/themes/vault-reel/THEME.md +134 -0
  333. package/themes/vault-reel/audit.log.jsonl +3 -0
  334. package/themes/vault-reel/tailwind.snippet.ts +16 -0
  335. package/themes/vault-reel/theme.yml +167 -0
  336. package/themes/vault-reel/tokens.ts +30 -0
  337. package/themes/vet-modern/THEME.md +79 -0
  338. package/themes/vet-modern/tokens.ts +194 -0
  339. package/themes/web3-restraint/THEME.md +87 -0
  340. package/themes/web3-restraint/tokens.ts +154 -0
  341. package/themes/wellness-active/THEME.md +102 -0
  342. package/themes/wellness-active/tokens.ts +203 -0
  343. package/themes/wellness-spa/THEME.md +93 -0
  344. package/themes/wellness-spa/tokens.ts +173 -0
  345. package/themes/y2k-chrome/THEME.md +118 -0
  346. package/themes/y2k-chrome/tokens.ts +249 -0
  347. package/themes/yoga-studio/THEME.md +76 -0
  348. package/themes/yoga-studio/tokens.ts +163 -0
@@ -0,0 +1,281 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const saturdayMorning: Direction = {
4
+ name: "saturday-morning",
5
+ ethos:
6
+ "Cartoon Network playful · Nickelodeon orange splat · Adult Swim ironic edge · Pixar warmth · Adventure Time hand-drawn whimsy",
7
+ references: [
8
+ {
9
+ brand: "Cartoon Network (1990s-2000s bumper graphics)",
10
+ trait: "chunky bold type, mismatched colors, sticker-pack composition",
11
+ },
12
+ {
13
+ brand: "Nickelodeon",
14
+ trait: "orange splat, slime green, oversized round shapes",
15
+ },
16
+ {
17
+ brand: "Adult Swim",
18
+ trait: "ironic late-night minimalism with chunky type, deadpan title cards",
19
+ },
20
+ {
21
+ brand: "Pixar",
22
+ trait: "warm character lighting, friendly rounded forms",
23
+ },
24
+ {
25
+ brand: "Adventure Time",
26
+ trait: "hand-drawn wobble, expressive shapes, flat-color whimsy",
27
+ },
28
+ ],
29
+ feel:
30
+ "Bright, chunky, playful without being childish. Bold display fonts with friendly roundness, " +
31
+ "many colors used confidently, hard-offset shadow drops give a sticker-pack feel. " +
32
+ "Reads as fun-but-considered, not Comic-Sans — the cartoon sensibility filtered through " +
33
+ "an Adult Swim editor's eye.",
34
+
35
+ fonts: {
36
+ display: {
37
+ family: "Fredoka",
38
+ fallback: ["Lilita One", "Baloo 2", "Inter", "system-ui", "sans-serif"],
39
+ from:
40
+ "Fredoka — chunky friendly rounded display, the cartoon-bumper feel without the Comic-Sans wobble; " +
41
+ "Lilita One covers the same territory if Fredoka is unavailable",
42
+ googleFont: "Fredoka:wght@500;700;900",
43
+ weights: [500, 700, 900],
44
+ },
45
+ body: {
46
+ family: "DM Sans",
47
+ fallback: ["Inter", "system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
48
+ from:
49
+ "DM Sans — friendly rounded sans, soft terminals that pair with Fredoka without competing; " +
50
+ "the body voice is warm, not corporate",
51
+ googleFont: "DM+Sans:wght@400;500;700",
52
+ weights: [400, 500, 700],
53
+ },
54
+ mono: {
55
+ family: "JetBrains Mono",
56
+ fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
57
+ from:
58
+ "JetBrains Mono — rounded humanist mono with personality; reads like a credits crawl on a cartoon bumper",
59
+ googleFont: "JetBrains+Mono",
60
+ weights: [400, 700],
61
+ },
62
+ },
63
+
64
+ typography: {
65
+ headingTracking: "-0.01em", // Fredoka is wide and round; a hair of negative tracking tightens the chunky feel
66
+ bodyTracking: "0",
67
+ fontFeatureSettings: '"ss01", "cv11"',
68
+ h1ScaleClamp: "clamp(2.75rem, 7vw, 5.5rem)", // chunky display wants size — bumper-card territory
69
+ bodyBaseSize: "1.0625rem",
70
+ bodyLineHeight: "1.6",
71
+ },
72
+
73
+ colors: {
74
+ background: {
75
+ hsl: "42 90% 92%",
76
+ from: "bright cream sun — Saturday morning light pouring through the kitchen window",
77
+ },
78
+ foreground: {
79
+ hsl: "275 30% 15%",
80
+ from:
81
+ "deep purple-black — not pure black; gives the palette room to sit against it without going gray",
82
+ },
83
+ card: {
84
+ hsl: "42 80% 96%",
85
+ from: "lighter cream — a card lifted off the cereal-box background",
86
+ },
87
+ popover: {
88
+ hsl: "42 80% 96%",
89
+ from: "same as card; depth comes from sticker shadow, not hue shift",
90
+ },
91
+ primary: {
92
+ hsl: "325 90% 55%",
93
+ from: "hot magenta-pink — the Nickelodeon energy color, the principal action",
94
+ },
95
+ primaryForeground: {
96
+ hsl: "42 80% 96%",
97
+ from: "cream on magenta — the sticker label",
98
+ },
99
+ secondary: {
100
+ hsl: "44 100% 55%",
101
+ from: "= brand.sun — Cartoon Network sun yellow, secondary action color",
102
+ },
103
+ secondaryForeground: {
104
+ hsl: "275 30% 15%",
105
+ from: "purple-black on sun yellow",
106
+ },
107
+ muted: {
108
+ hsl: "42 50% 88%",
109
+ from: "deeper cream — quiet panels inside a bright page",
110
+ },
111
+ mutedForeground: {
112
+ hsl: "275 20% 35%",
113
+ from: "purple-gray — secondary text that reads against cream and muted alike",
114
+ },
115
+ accent: {
116
+ hsl: "200 95% 60%",
117
+ from: "= brand.sky — Adventure Time sky blue, hover and selection accent",
118
+ },
119
+ accentForeground: {
120
+ hsl: "275 30% 15%",
121
+ from: "purple-black on sky blue",
122
+ },
123
+ border: {
124
+ hsl: "275 30% 15%",
125
+ from:
126
+ "= foreground; the inked outline around every cartoon shape — thick, intentional, never gray",
127
+ },
128
+ input: {
129
+ hsl: "275 30% 15%",
130
+ from: "same as border — inputs wear the inked-outline treatment",
131
+ },
132
+ ring: {
133
+ hsl: "325 90% 55%",
134
+ from: "primary magenta, focus only",
135
+ },
136
+ destructive: {
137
+ hsl: "350 85% 60%",
138
+ from:
139
+ "= brand.cherry — Pixar character red; saturated and warm, not blood-red — alerts that still feel hand-drawn",
140
+ },
141
+ destructiveForeground: {
142
+ hsl: "42 80% 96%",
143
+ from: "cream on alert",
144
+ },
145
+ brand: {
146
+ slime: {
147
+ hsl: "90 75% 55%",
148
+ from: "Nickelodeon slime green — the splat color, the late-90s game-show ooze",
149
+ },
150
+ sun: {
151
+ hsl: "44 100% 55%",
152
+ from: "Cartoon Network sun yellow — the bumper-card highlight, the Adventure Time afternoon",
153
+ },
154
+ sky: {
155
+ hsl: "200 95% 60%",
156
+ from: "Adventure Time sky blue — the flat-cel backdrop, the candy-kingdom horizon",
157
+ },
158
+ cherry: {
159
+ hsl: "350 85% 60%",
160
+ from: "Pixar character red — Mr. Incredible chest, warm and saturated, never cool magenta",
161
+ },
162
+ grape: {
163
+ hsl: "275 75% 55%",
164
+ from: "playful purple — Adult Swim title-card grape, the wink between the bright colors",
165
+ },
166
+ magenta: {
167
+ hsl: "325 90% 55%",
168
+ from: "= primary; Nickelodeon energy magenta, also the brand-mark color",
169
+ },
170
+ cream: {
171
+ hsl: "42 90% 92%",
172
+ from: "= background; the kitchen-window light, also a named token for component overrides",
173
+ },
174
+ ink: {
175
+ hsl: "275 30% 15%",
176
+ from: "= foreground; the inked outline, also semantic for borders",
177
+ },
178
+ },
179
+ },
180
+
181
+ spacing: {
182
+ base: 4,
183
+ scale: [4, 6, 8, 12, 16, 20, 24, 32, 48, 64], // medium — decoration takes room
184
+ containerMax: "max-w-5xl",
185
+ containerPadding: "px-6 lg:px-10",
186
+ sectionPadding: {
187
+ hero: "pt-24 pb-16 lg:pt-32 lg:pb-24",
188
+ default: "py-16 lg:py-24",
189
+ tight: "py-12 lg:py-16",
190
+ },
191
+ },
192
+
193
+ radius: {
194
+ base: "1.5rem", // very rounded — pillowy soft, sticker-edge feel
195
+ pillsAllowed: true,
196
+ },
197
+
198
+ shadows: {
199
+ style: "none",
200
+ utilities: {
201
+ "shadow-sticker":
202
+ "4px 4px 0 0 hsl(var(--foreground))", // hard offset, no blur — the sticker/comic peel
203
+ "shadow-sticker-lg":
204
+ "6px 6px 0 0 hsl(var(--foreground))", // hover-lifted sticker — same drop, bigger throw
205
+ "shadow-sticker-sm":
206
+ "2px 2px 0 0 hsl(var(--foreground))", // compact sticker for tags, badges, inline chips
207
+ },
208
+ },
209
+
210
+ motion: {
211
+ easing: "cubic-bezier(0.34, 1.56, 0.64, 1)", // bouncy spring — overshoot is the language
212
+ durations: {
213
+ reveal: 400, // bounce-in entrance — spring with overshoot
214
+ loop: 600, // wiggle cycle
215
+ ambient: 200, // pop-color flash on hover
216
+ },
217
+ keyframes: {
218
+ "bounce-in": {
219
+ css:
220
+ "0% { opacity: 0; transform: scale(0.6); }\n" +
221
+ "60% { opacity: 1; transform: scale(1.08); }\n" +
222
+ "100% { opacity: 1; transform: scale(1); }",
223
+ defaultDuration: 400,
224
+ iteration: "once",
225
+ purpose:
226
+ "entrance with overshoot — buttons, modals, cards land with a spring; the cartoon-card pop",
227
+ },
228
+ "wiggle": {
229
+ css:
230
+ "0%, 100% { transform: rotate(0deg); }\n" +
231
+ "25% { transform: rotate(-3deg); }\n" +
232
+ "75% { transform: rotate(3deg); }",
233
+ defaultDuration: 600,
234
+ iteration: "once",
235
+ purpose:
236
+ "playful nudge on hover — buttons wiggle when the cursor lands; the Adventure Time wobble",
237
+ },
238
+ "pop-color": {
239
+ css:
240
+ "0% { filter: hue-rotate(0deg); }\n" +
241
+ "50% { filter: hue-rotate(20deg) saturate(1.15); }\n" +
242
+ "100% { filter: hue-rotate(0deg); }",
243
+ defaultDuration: 200,
244
+ iteration: "once",
245
+ purpose:
246
+ "color flash on hover — links and tags pulse a hue-shift; the bumper-graphic blink",
247
+ },
248
+ },
249
+ respectsReducedMotion: true,
250
+ },
251
+
252
+ density: "medium",
253
+
254
+ patterns: {
255
+ button:
256
+ "Chunky rounded, magenta solid by default with foreground text and a hard `.shadow-sticker` drop. " +
257
+ "Rounded-3xl baseline (matches `--radius: 1.5rem`); pills allowed for tags and compact actions. " +
258
+ "Hover: `wiggle` keyframe + lift to `.shadow-sticker-lg`. " +
259
+ "Secondary buttons swap the magenta for any brand token (sun, sky, slime, grape) — fill is the norm, " +
260
+ "ghost is the exception.",
261
+ card:
262
+ "Thick 2px `--ink` border, brand-token or card-cream background, `rounded-3xl`, " +
263
+ "`.shadow-sticker` drop. Title in Fredoka display, oversized. Padding `p-6 lg:p-10`. " +
264
+ "Hover lifts to `.shadow-sticker-lg`. Cards are stickers — they peel off the page.",
265
+ input:
266
+ "Full `rounded-2xl` box, 2px `--ink` border, `bg-card`. Label above in DM Sans 500. " +
267
+ "Focus shifts border to `--ring` (magenta) and adds `.shadow-sticker-sm`. " +
268
+ "No border-bottom-only treatment — every input is a labeled sticker pocket.",
269
+ cta:
270
+ "Filled chunky button is the default — magenta primary or sun-yellow secondary, with the sticker shadow. " +
271
+ "Pills reserved for tags and toggles. Text-link CTAs use `pop-color` on hover with a thick underline. " +
272
+ "Never a flat ghost — every CTA carries weight.",
273
+ },
274
+
275
+ details: {
276
+ selectionBg: "hsl(var(--brand-sun) / 0.6)",
277
+ selectionFg: "hsl(var(--foreground))",
278
+ focusRing: "3px solid hsl(var(--ring))",
279
+ scrollbarStyle: "auto",
280
+ },
281
+ };
@@ -0,0 +1,235 @@
1
+ // Shared schema for every design direction in this library.
2
+ // The CLI consumes this shape to emit `tailwind.config.ts` and `src/index.css`.
3
+ // Hand-authoring is fine; runtime validation happens at codegen time.
4
+
5
+ export type BrandTrait = {
6
+ brand: string; // "NYT", "Tesla", "Aman"
7
+ trait: string; // "typography", "blackout", "cream paper"
8
+ };
9
+
10
+ export type HSL = `${number} ${number}% ${number}%`;
11
+
12
+ export type ColorToken = {
13
+ hsl: HSL; // raw triple, no hsl() wrapper — feeds opacity modifier syntax
14
+ from: string; // verbatim provenance: "Masters green, restrained" — survives in generated css as a comment
15
+ };
16
+
17
+ export type FontStack = {
18
+ family: string; // primary face the project loads — "EB Garamond", "Manrope"
19
+ fallback: string[]; // system fallbacks in order
20
+ from: string; // brand provenance: "NYT serif feel", "Linear's sans"
21
+ googleFont?: string; // url-safe Google Fonts name; null if self-hosted or system-only
22
+ weights?: number[]; // weights to load (default: [400, 600])
23
+ };
24
+
25
+ export type MotionTier = "reveal" | "loop" | "ambient";
26
+
27
+ export type Direction = {
28
+ // identity
29
+ name:
30
+ | "editorial"
31
+ | "soft-modern"
32
+ | "dense-utility"
33
+ | "brutalist"
34
+ | "cinematic-dark"
35
+ | "mid-century"
36
+ | "maximalist"
37
+ | "outdoor-adventure"
38
+ | "hyperminimal-mono"
39
+ | "newsletter"
40
+ | "y2k-chrome"
41
+ | "glassmorphic-modern"
42
+ | "signal-dark"
43
+ | "couture-luxury"
44
+ | "stadium-sport"
45
+ | "performance-engineered"
46
+ | "saturday-morning"
47
+ | "enterprise-tech"
48
+ | "creator-social"
49
+ | "kaiju-reveal"
50
+ | "runway-fashion"
51
+ | "streetwear-hype"
52
+ | "architectural"
53
+ | "kinetic-data"
54
+ | "indie-art-game"
55
+ | "corporate-grid"
56
+ | "enterprise-cloud"
57
+ | "business-tiles"
58
+ | "acrylic-soft"
59
+ | "cloud-friendly"
60
+ | "team-kanban"
61
+ | "government-civic"
62
+ | "banking-gravity"
63
+ | "pharma-clinical"
64
+ // ──────── Batch 2026-06: 30 new directions across under-covered categories ────────
65
+ | "fintech-trust"
66
+ | "fintech-card"
67
+ | "crypto-onchain"
68
+ | "web3-restraint"
69
+ | "education-warm"
70
+ | "education-formal"
71
+ | "healthcare-bright"
72
+ | "telehealth-modern"
73
+ | "wellness-spa"
74
+ | "music-streaming"
75
+ | "music-vinyl"
76
+ | "podcast-warm"
77
+ | "realestate-luxury"
78
+ | "realestate-marketplace"
79
+ | "marketplace-vintage"
80
+ | "marketplace-modern"
81
+ | "gaming-streamer"
82
+ | "gaming-esports"
83
+ | "devtool-cli"
84
+ | "devtool-docs"
85
+ | "nonprofit-warm"
86
+ | "agency-portfolio"
87
+ | "agency-creative"
88
+ | "studio-photographer"
89
+ | "studio-architect"
90
+ | "restaurant-modern"
91
+ | "hotel-boutique"
92
+ | "wellness-active"
93
+ | "food-blog"
94
+ | "ai-startup"
95
+ // ──────── Batch 2026-06 (B): 40 new directions, push library past 100 ────────
96
+ | "travel-luxury"
97
+ | "vacation-rental"
98
+ | "airline-modern"
99
+ | "tourism-board"
100
+ | "yoga-studio"
101
+ | "gym-chain"
102
+ | "sports-league"
103
+ | "cycling-brand"
104
+ | "linkedin-pro"
105
+ | "dating-friendly"
106
+ | "forum-classic"
107
+ | "community-niche"
108
+ | "newspaper-classic"
109
+ | "magazine-glossy"
110
+ | "news-tabloid"
111
+ | "news-tech"
112
+ | "law-firm"
113
+ | "lawtech-modern"
114
+ | "insurance-modern"
115
+ | "insurance-legacy"
116
+ | "automotive-luxury"
117
+ | "automotive-ev"
118
+ | "motorcycle-brand"
119
+ | "classic-car"
120
+ | "beauty-clean"
121
+ | "beauty-luxury"
122
+ | "furniture-modern"
123
+ | "home-decor"
124
+ | "pet-food"
125
+ | "baby-modern"
126
+ | "toys-modern"
127
+ | "vet-modern"
128
+ | "solar-residential"
129
+ | "ev-charging"
130
+ | "farm-direct"
131
+ | "logistics-modern"
132
+ | "museum"
133
+ | "bookstore-indie"
134
+ | "publisher-indie"
135
+ | "nonprofit-arts"
136
+ | "spotter-bright";
137
+ ethos: string; // one-line brand·trait synthesis
138
+ references: BrandTrait[]; // 4-6 brands max
139
+ feel: string; // 2-3 sentence prose description
140
+
141
+ // typography
142
+ fonts: {
143
+ display: FontStack;
144
+ body: FontStack;
145
+ mono: FontStack;
146
+ };
147
+ typography: {
148
+ headingTracking: string; // e.g. "-0.01em"
149
+ bodyTracking: string; // e.g. "0" or "0.17em" for cinematic
150
+ fontFeatureSettings?: string; // e.g. `"ss01", "cv11"` for Manrope
151
+ h1ScaleClamp: string; // e.g. "clamp(2.5rem, 6vw, 4.5rem)"
152
+ bodyBaseSize: string; // e.g. "1rem", "0.9375rem"
153
+ bodyLineHeight: string; // e.g. "1.6"
154
+ };
155
+
156
+ // colors — every token traces to a brand·trait
157
+ colors: {
158
+ background: ColorToken;
159
+ foreground: ColorToken;
160
+ card: ColorToken;
161
+ popover: ColorToken;
162
+ primary: ColorToken;
163
+ primaryForeground: ColorToken;
164
+ secondary: ColorToken;
165
+ secondaryForeground: ColorToken;
166
+ muted: ColorToken;
167
+ mutedForeground: ColorToken;
168
+ accent: ColorToken;
169
+ accentForeground: ColorToken;
170
+ border: ColorToken;
171
+ input: ColorToken;
172
+ ring: ColorToken;
173
+ destructive: ColorToken;
174
+ destructiveForeground: ColorToken;
175
+ // brand tokens (named, not numbered) — any additional colors the direction calls for
176
+ brand?: Record<string, ColorToken>;
177
+ };
178
+
179
+ // spacing — base unit + the canonical scale
180
+ spacing: {
181
+ base: number; // px, almost always 4
182
+ scale: number[]; // tailwind scale steps actually allowed in this direction
183
+ containerMax: string; // "max-w-6xl", "max-w-2xl" for editorial prose-first
184
+ containerPadding: string; // "px-4 lg:px-8"
185
+ sectionPadding: {
186
+ hero: string; // "pt-20 pb-12 lg:pt-28 lg:pb-16"
187
+ default: string; // "py-16 lg:py-24"
188
+ tight: string; // "py-12"
189
+ };
190
+ };
191
+
192
+ // radius — single source for the rounding language
193
+ radius: {
194
+ base: string; // "0.4rem" (sharp), "0.75rem" (rounded), "0" (editorial)
195
+ pillsAllowed: boolean; // false for editorial/dense-utility; true for soft-modern
196
+ };
197
+
198
+ // shadow language — utilities defined in index.css, named by intent
199
+ shadows: {
200
+ style: "minimal" | "soft" | "glow" | "none";
201
+ utilities: Record<string, string>; // e.g. { "glow-gold": "0 0 0 1px ..., 0 30px 80px ..." }
202
+ };
203
+
204
+ // motion — the project library
205
+ motion: {
206
+ easing: string; // "cubic-bezier(0.22, 1, 0.36, 1)" — universal across directions
207
+ durations: Record<MotionTier, number>; // ms
208
+ keyframes: Record<string, { // every keyframe the direction ships
209
+ css: string; // the @keyframes block body
210
+ defaultDuration: number; // ms
211
+ iteration: "once" | "infinite";
212
+ purpose: string; // why this keyframe exists
213
+ }>;
214
+ respectsReducedMotion: true; // hard-coded; non-negotiable
215
+ };
216
+
217
+ // density — informs spacing scale, line-height, component patterns
218
+ density: "low" | "medium" | "high";
219
+
220
+ // component patterns — declarative rules the Director and QA agents enforce
221
+ patterns: {
222
+ button: string; // e.g. "ghost only; no solid-fill on brand-mark colors"
223
+ card: string; // e.g. "hairline border, no fill differentiation from background"
224
+ input: string; // e.g. "border-bottom only, no full box"
225
+ cta: string; // e.g. "text link with gold-gradient utility; never a filled rect"
226
+ };
227
+
228
+ // selection + scrollbar + focus — small details that signal "built"
229
+ details: {
230
+ selectionBg: string; // "hsl(var(--gold) / 0.3)"
231
+ selectionFg: string; // "hsl(var(--foreground))"
232
+ focusRing: string; // "2px solid hsl(var(--ring))"
233
+ scrollbarStyle: "thin" | "auto" | "none";
234
+ };
235
+ };
@@ -0,0 +1,168 @@
1
+ # Signal-Dark — Build Brief
2
+
3
+ > This file is the CONTRACT the theme ships with. It IS the source of truth
4
+ > the `brief-enforcer` subagent reads at commit time and the payload the
5
+ > `Copy for Claude Code` button on the theme detail page hands out.
6
+ >
7
+ > The contract has three sections:
8
+ > 1. MANDATORY BUILD DIRECTIVE — the `You MUST` list.
9
+ > 2. SLOP-BLOCKLIST — the `You MUST NOT` list.
10
+ > 3. CHROME INVENTORY — the allow-list of ornaments this theme may use.
11
+ >
12
+ > Any UI change that touches this theme's section source (or applies this
13
+ > theme to a project) must pass the enforcer against this file.
14
+
15
+ ---
16
+
17
+ ## MANDATORY BUILD DIRECTIVE — you MUST
18
+
19
+ 1. **Hold the warm-black canvas at `#0F0D0C`** (30° warm-bias). Never pure
20
+ black. On light canvas: cotton-paper `#F7F4F0` (30° warm bias). Never
21
+ pure white. Both canvases share the register; only tokens invert.
22
+ 2. **Use ONE signal color on the page** (the palette variant). No second
23
+ color for "variety." Status signals use mono labels with a signal-hued
24
+ dot, not green / orange / blue chips.
25
+ 3. **Set the hero display at `clamp(3.5rem, 10vw, 9rem)`** with tight
26
+ tracking (-0.04em). Type is the primary design element.
27
+ 4. **Radius 12px on cards.** Pills allowed only on model-card meta chips +
28
+ status badges.
29
+ 5. **Reserve prominent mono (JetBrains Mono) for CODE-shaped things:**
30
+ terminal specimens, model IDs, semver tags, CLI output, at-handles.
31
+ NEVER for decorative eyebrow labels.
32
+ 6. **Real Pexels photos for the marketing hero + product surfaces.** No
33
+ SVG stand-ins for photo-worthy subjects.
34
+
35
+ ---
36
+
37
+ ## SLOP-BLOCKLIST — you MUST NOT
38
+
39
+ Each is a hard fail. If the section source contains any of these, the
40
+ enforcer verdict is BLOCK.
41
+
42
+ - **Mono-caps decorative eyebrows** (`SECTION · X`, `WHAT WE X`). CSS
43
+ fingerprint: `textTransform: uppercase` + `letterSpacing ≥ 0.18em` at
44
+ `fontSize < 20px`. Not on this theme's chrome inventory, so banned.
45
+ - **Dot-separated decorative metadata rows** (`ISSUE 04 · CHAPTER 03`,
46
+ `EST. 2019`, `12 MIN READ`). Content-level `·` (`handle · role`,
47
+ terminal output like `stylecrib qa --ci · 12s · passed`) is fine.
48
+ - **`№` / no. / vol. ornaments.**
49
+ - **`▸ TAG` labels.**
50
+ - **`TRUSTED BY` / `AS SEEN IN` / `COMPOSED BY TEAMS AT`** wordmark strips
51
+ — content-slop under any name.
52
+ - **Ticker bars, auto-advancing hero sliders (< 6s mutation), cycling
53
+ headline words** (`we [design][build][ship]`), `AUTO 4s` helpers.
54
+ - **Warm-radial glow gradients as image FALLBACKS.**
55
+ - **Roman-numeral copyright** (`MMXXVI. ALL RIGHTS RESERVED.`).
56
+ - **3-pillar identical feature-card grids as the marketing spine.**
57
+ - **Vague trust copy:** hand-crafted, thoughtfully-made, considered,
58
+ for-teams-that-care, made-with-love.
59
+ - **Attribution of influence in visible copy** — Tesla, Hugging Face,
60
+ Apple, Vercel, Cybertruck are STUDIED, never NAMED in slug, copy, or UI.
61
+
62
+ ---
63
+
64
+ ## CHROME INVENTORY — the allow-list
65
+
66
+ Every ornament this theme may use. Anything visible in the section source
67
+ that is NOT on this list falls under the SLOP-BLOCKLIST above.
68
+
69
+ - **Full-bleed warm-black hero band** with subtle radial warm+cool mesh
70
+ backdrop (opacity ~0.4, drifts on `gradient-shift 32s` ambient loop; NOT
71
+ a purple/pink slop gradient — warm amber + cool blue only, matching
72
+ `--glow-warm` and `--glow-cool`).
73
+ - **Oversized display h1** in Inter 700 at `clamp(3.5rem, 10vw, 9rem)`,
74
+ tracking -0.04em, one line-break maximum.
75
+ - **ONE primary CTA per page:** filled signal button, radius 12px,
76
+ `glow-signal` outer halo on hover only.
77
+ - **ONE ghost secondary next to the primary:** bordered, foreground
78
+ color, radius 12px, no glow.
79
+ - **Model-card panel:** rounded-xl (12px), 1px border, subtle raised card
80
+ bg, meta row at top in mono (icon dot + slug + status pill),
81
+ display-font title, softInk body copy, no shadow beyond hairline border.
82
+ - **Terminal specimen:** rounded-xl (12px) card with a top window bar
83
+ (err-red · warn-amber · signal dots) + mono CLI title. Body is
84
+ pre-formatted JetBrains Mono at 13px, signal-yellow prompt glyph (`$ `),
85
+ softInk body text, mutedInk system text.
86
+ - **Status pill** (mono, rounded-full, px-2.5 py-1 text-[11px]): dot
87
+ prefix in signal for active, mutedInk otherwise. No colored fills.
88
+ - **Full-bleed marketing hero photograph**, 21:9 or 16:9, warm-shadow
89
+ cool-highlight grade, hero display text OVERLAID (never a caption card).
90
+ - **Table-style live metrics grid:** label / value / status dot in mono,
91
+ tabular figures, one row per metric.
92
+ - **3-tier pricing card row**, ONE primary CTA on the middle recommended
93
+ tier (signal-filled), other tiers use ghost secondary.
94
+ - **Footer:** minimal — brand name, one-line studio note, three columns of
95
+ links max, small copyright line (regular Arabic numerals, no MMXXVI,
96
+ no dot-metadata).
97
+
98
+ ---
99
+
100
+ ## SIGNATURE MOVES — verbs, not adjectives
101
+
102
+ The theme's actual moves you MUST land, not adjectives to gesture at.
103
+
104
+ - **Fill the hero band with a warm-black canvas + oversized display type**
105
+ breaking the baseline; hold the mesh-gradient backdrop under it at 0.4
106
+ opacity, drifting via `gradient-shift 32s` so the horizon never sits
107
+ still.
108
+ - **Place ONE signal-yellow button per page**, at the point of conversion.
109
+ Its `glow-signal` halo appears ONLY on hover — never as a static bloom
110
+ (that's Stripe-Linear-Vercel AI-default slop).
111
+ - **Show a terminal specimen with `$` in signal + real CLI output** — the
112
+ developer-tool signature. The prompt IS the visual accent, not
113
+ decorative chrome.
114
+ - **Model-card grid:** put the meta row at the TOP in mono (like a HF
115
+ model card would show `provider/name · v0.14 · task`); display-font
116
+ title comes SECOND, body copy underneath. Never invert that order.
117
+ - **Marketing hero:** full-bleed photograph, big-quiet display text laid
118
+ OVER the photo (not in a caption card next to it). Warm shadows + cool
119
+ highlights color grade so the yellow signal never competes with the
120
+ image.
121
+ - **Use tabular figures for all metric numbers** so they align in columns.
122
+ Non-tabular metric numerals break the register.
123
+
124
+ ---
125
+
126
+ ## COLOR TOKENS (measured)
127
+
128
+ **Dark canvas**
129
+ - `bg`: `#0F0D0C` `card`: `#1A1614` `border`: `#2A231F`
130
+ - `ink`: `#F7F4F0` `softInk`: `#E4DFD8` `mutedInk`: `#9F958A`
131
+
132
+ **Light canvas**
133
+ - `bg`: `#F7F4F0` `card`: `#FFFFFF` `border`: `#DED6CB`
134
+ - `ink`: `#0F0D0C` `softInk`: `#2A231F` `mutedInk`: `#6C6259`
135
+
136
+ **Signal** (default `hazard`)
137
+ - Dark canvas: `#FFDF29` Light canvas: `#B58900`
138
+
139
+ ---
140
+
141
+ ## TYPOGRAPHY
142
+
143
+ - **Display:** Inter (SF Pro Display approximation), 500 / 600 / 700 / 800.
144
+ Hero h1 at `clamp(3.5rem, 10vw, 9rem)`, tracking -0.04em (loosens to
145
+ -0.005em at body).
146
+ - **Body:** Inter, 17px, line-height 1.55, tracking -0.005em.
147
+ - **Mono:** JetBrains Mono — for code / terminal / metric values /
148
+ @handles ONLY.
149
+
150
+ ---
151
+
152
+ ## SECTION SKELETON (top → bottom)
153
+
154
+ 1. Sticky palette + canvas picker strip (meta-UI, not theme composition).
155
+ 2. Masthead nav — brand + 4 nav items + one signal CTA.
156
+ 3. Hero — mesh-gradient backdrop, oversized display, one signal CTA +
157
+ ghost secondary, one paragraph of body copy.
158
+ 4. Product surface photograph — full-bleed 21:9, warm-shadow grade, no
159
+ caption card.
160
+ 5. Terminal specimen — rounded-xl card with `$` prompt, real CLI output.
161
+ 6. Model-card feature grid (2×2 or 4×1) — mono meta at top, display
162
+ title, body, status pill.
163
+ 7. Marketing hero — full-bleed photograph with oversized display overlay
164
+ + one signal CTA.
165
+ 8. Live metrics table — 4 rows, tabular figures, status dots.
166
+ 9. Pricing — 3 tiers, ONE signal CTA on the recommended tier.
167
+ 10. Footer — brand + one-line note + three link columns + small
168
+ copyright.