@stylecrib/cli 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/README.md +94 -9
  2. package/agents/MANIFEST.yml +136 -0
  3. package/agents/README.md +75 -0
  4. package/agents/art-director.md +168 -0
  5. package/agents/audacity-director.md +109 -0
  6. package/agents/brand-identity.md +179 -0
  7. package/agents/brand-precedent.md +119 -0
  8. package/agents/brief-enforcer.md +136 -0
  9. package/agents/component-qa.md +167 -0
  10. package/agents/cto.md +49 -0
  11. package/agents/design-director.md +184 -0
  12. package/agents/design-systems-engineer.md +162 -0
  13. package/agents/direction-curator.md +133 -0
  14. package/agents/homogeneity-detector.md +104 -0
  15. package/agents/logo-designer.md +240 -0
  16. package/agents/marketing-designer.md +156 -0
  17. package/agents/media-curator.md +165 -0
  18. package/agents/motion-engineer.md +270 -0
  19. package/agents/qa-conductor.md +143 -0
  20. package/agents/render-qa.md +133 -0
  21. package/agents/upgrade-simulator.md +123 -0
  22. package/agents/vp-architecture.md +49 -0
  23. package/agents/vp-engineering.md +49 -0
  24. package/dist/index.js +1606 -467
  25. package/package.json +12 -4
  26. package/themes/README.md +70 -0
  27. package/themes/acrylic-soft/THEME.md +142 -0
  28. package/themes/acrylic-soft/tokens.ts +180 -0
  29. package/themes/agency-creative/THEME.md +91 -0
  30. package/themes/agency-creative/tokens.ts +202 -0
  31. package/themes/agency-portfolio/THEME.md +109 -0
  32. package/themes/agency-portfolio/tokens.ts +159 -0
  33. package/themes/ai-startup/THEME.md +95 -0
  34. package/themes/ai-startup/tokens.ts +162 -0
  35. package/themes/airline-modern/THEME.md +104 -0
  36. package/themes/airline-modern/tokens.ts +179 -0
  37. package/themes/arc-stack/THEME.md +125 -0
  38. package/themes/arc-stack/tailwind.snippet.ts +17 -0
  39. package/themes/arc-stack/theme.yml +153 -0
  40. package/themes/arc-stack/tokens.ts +29 -0
  41. package/themes/architectural/THEME.md +102 -0
  42. package/themes/architectural/tokens.ts +159 -0
  43. package/themes/atelier-radiance/THEME.md +93 -0
  44. package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
  45. package/themes/atelier-radiance/theme.yml +130 -0
  46. package/themes/atelier-radiance/tokens.ts +29 -0
  47. package/themes/automotive-ev/THEME.md +87 -0
  48. package/themes/automotive-ev/tokens.ts +183 -0
  49. package/themes/automotive-luxury/THEME.md +88 -0
  50. package/themes/automotive-luxury/tokens.ts +175 -0
  51. package/themes/baby-modern/THEME.md +79 -0
  52. package/themes/baby-modern/tokens.ts +184 -0
  53. package/themes/banking-gravity/THEME.md +171 -0
  54. package/themes/banking-gravity/tokens.ts +169 -0
  55. package/themes/beauty-clean/THEME.md +92 -0
  56. package/themes/beauty-clean/tokens.ts +176 -0
  57. package/themes/beauty-luxury/THEME.md +96 -0
  58. package/themes/beauty-luxury/tokens.ts +178 -0
  59. package/themes/bento-modular/BUILD_BRIEF.md +171 -0
  60. package/themes/bento-modular/THEME.md +80 -0
  61. package/themes/bento-modular/tailwind.snippet.ts +17 -0
  62. package/themes/bento-modular/theme.yml +83 -0
  63. package/themes/bento-modular/tokens.ts +27 -0
  64. package/themes/bookstore-indie/THEME.md +78 -0
  65. package/themes/bookstore-indie/tokens.ts +147 -0
  66. package/themes/brutalist/THEME.md +96 -0
  67. package/themes/brutalist/tokens.ts +151 -0
  68. package/themes/business-tiles/THEME.md +141 -0
  69. package/themes/business-tiles/tokens.ts +178 -0
  70. package/themes/cabana-poster/THEME.md +158 -0
  71. package/themes/cabana-poster/tailwind.snippet.ts +16 -0
  72. package/themes/cabana-poster/theme.yml +221 -0
  73. package/themes/cabana-poster/tokens.ts +34 -0
  74. package/themes/case-panel/THEME.md +126 -0
  75. package/themes/case-panel/tailwind.snippet.ts +15 -0
  76. package/themes/case-panel/theme.yml +153 -0
  77. package/themes/case-panel/tokens.ts +28 -0
  78. package/themes/cinematic-dark/THEME.md +97 -0
  79. package/themes/cinematic-dark/tokens.ts +195 -0
  80. package/themes/classic-car/THEME.md +86 -0
  81. package/themes/classic-car/tokens.ts +173 -0
  82. package/themes/cloud-friendly/THEME.md +152 -0
  83. package/themes/cloud-friendly/tokens.ts +181 -0
  84. package/themes/community-niche/THEME.md +102 -0
  85. package/themes/community-niche/tokens.ts +177 -0
  86. package/themes/corporate-grid/THEME.md +154 -0
  87. package/themes/corporate-grid/tokens.ts +182 -0
  88. package/themes/couture-luxury/THEME.md +85 -0
  89. package/themes/couture-luxury/tokens.ts +146 -0
  90. package/themes/creator-social/THEME.md +131 -0
  91. package/themes/creator-social/tokens.ts +249 -0
  92. package/themes/crypto-onchain/THEME.md +100 -0
  93. package/themes/crypto-onchain/tokens.ts +207 -0
  94. package/themes/cycling-brand/THEME.md +78 -0
  95. package/themes/cycling-brand/tokens.ts +185 -0
  96. package/themes/dating-friendly/THEME.md +102 -0
  97. package/themes/dating-friendly/tokens.ts +178 -0
  98. package/themes/dense-utility/THEME.md +85 -0
  99. package/themes/dense-utility/tokens.ts +155 -0
  100. package/themes/devtool-cli/THEME.md +100 -0
  101. package/themes/devtool-cli/tokens.ts +195 -0
  102. package/themes/devtool-docs/THEME.md +105 -0
  103. package/themes/devtool-docs/tokens.ts +177 -0
  104. package/themes/editorial/THEME.md +129 -0
  105. package/themes/editorial/tailwind.snippet.ts +15 -0
  106. package/themes/editorial/theme.yml +173 -0
  107. package/themes/editorial/tokens.ts +29 -0
  108. package/themes/education-formal/THEME.md +154 -0
  109. package/themes/education-formal/tailwind.snippet.ts +15 -0
  110. package/themes/education-formal/theme.yml +186 -0
  111. package/themes/education-formal/tokens.ts +29 -0
  112. package/themes/education-warm/THEME.md +91 -0
  113. package/themes/education-warm/tokens.ts +185 -0
  114. package/themes/ember-poster/README.md +79 -0
  115. package/themes/ember-poster/THEME.md +101 -0
  116. package/themes/ember-poster/package.json +34 -0
  117. package/themes/ember-poster/tailwind.snippet.ts +17 -0
  118. package/themes/ember-poster/theme.yml +109 -0
  119. package/themes/ember-poster/tokens.ts +27 -0
  120. package/themes/enterprise-cloud/THEME.md +139 -0
  121. package/themes/enterprise-cloud/tokens.ts +179 -0
  122. package/themes/enterprise-tech/THEME.md +167 -0
  123. package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
  124. package/themes/enterprise-tech/theme.yml +202 -0
  125. package/themes/enterprise-tech/tokens.ts +29 -0
  126. package/themes/ev-charging/THEME.md +94 -0
  127. package/themes/ev-charging/tokens.ts +185 -0
  128. package/themes/farm-direct/THEME.md +92 -0
  129. package/themes/farm-direct/tokens.ts +180 -0
  130. package/themes/fintech-card/THEME.md +96 -0
  131. package/themes/fintech-card/tokens.ts +191 -0
  132. package/themes/fintech-trust/THEME.md +94 -0
  133. package/themes/fintech-trust/tokens.ts +192 -0
  134. package/themes/food-blog/THEME.md +98 -0
  135. package/themes/food-blog/tokens.ts +183 -0
  136. package/themes/forum-classic/THEME.md +100 -0
  137. package/themes/forum-classic/tokens.ts +168 -0
  138. package/themes/fresh-plate/THEME.md +144 -0
  139. package/themes/fresh-plate/tailwind.snippet.ts +16 -0
  140. package/themes/fresh-plate/theme.yml +189 -0
  141. package/themes/fresh-plate/tokens.ts +30 -0
  142. package/themes/furniture-modern/THEME.md +94 -0
  143. package/themes/furniture-modern/tokens.ts +176 -0
  144. package/themes/gaming-esports/THEME.md +146 -0
  145. package/themes/gaming-esports/tokens.ts +199 -0
  146. package/themes/gaming-streamer/THEME.md +139 -0
  147. package/themes/gaming-streamer/tokens.ts +201 -0
  148. package/themes/glassmorphic-modern/THEME.md +119 -0
  149. package/themes/glassmorphic-modern/tokens.ts +174 -0
  150. package/themes/government-civic/THEME.md +138 -0
  151. package/themes/government-civic/tokens.ts +164 -0
  152. package/themes/gym-chain/THEME.md +79 -0
  153. package/themes/gym-chain/tokens.ts +196 -0
  154. package/themes/healthcare-bright/THEME.md +95 -0
  155. package/themes/healthcare-bright/tokens.ts +184 -0
  156. package/themes/home-decor/THEME.md +94 -0
  157. package/themes/home-decor/tokens.ts +177 -0
  158. package/themes/hotel-boutique/THEME.md +110 -0
  159. package/themes/hotel-boutique/tokens.ts +179 -0
  160. package/themes/hyperminimal-mono/THEME.md +91 -0
  161. package/themes/hyperminimal-mono/tokens.ts +150 -0
  162. package/themes/indie-art-game/THEME.md +107 -0
  163. package/themes/indie-art-game/tokens.ts +216 -0
  164. package/themes/insurance-legacy/THEME.md +101 -0
  165. package/themes/insurance-legacy/tokens.ts +182 -0
  166. package/themes/insurance-modern/THEME.md +103 -0
  167. package/themes/insurance-modern/tokens.ts +192 -0
  168. package/themes/kaiju-reveal/THEME.md +97 -0
  169. package/themes/kaiju-reveal/tokens.ts +185 -0
  170. package/themes/kinetic-data/THEME.md +172 -0
  171. package/themes/kinetic-data/tailwind.snippet.ts +16 -0
  172. package/themes/kinetic-data/theme.yml +207 -0
  173. package/themes/kinetic-data/tokens.ts +30 -0
  174. package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
  175. package/themes/kinetic-headline/THEME.md +78 -0
  176. package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
  177. package/themes/kinetic-headline/theme.yml +81 -0
  178. package/themes/kinetic-headline/tokens.ts +26 -0
  179. package/themes/law-firm/THEME.md +108 -0
  180. package/themes/law-firm/tokens.ts +158 -0
  181. package/themes/lawtech-modern/THEME.md +107 -0
  182. package/themes/lawtech-modern/tokens.ts +192 -0
  183. package/themes/linkedin-pro/THEME.md +102 -0
  184. package/themes/linkedin-pro/tokens.ts +174 -0
  185. package/themes/logistics-modern/THEME.md +94 -0
  186. package/themes/logistics-modern/tokens.ts +187 -0
  187. package/themes/magazine-glossy/THEME.md +74 -0
  188. package/themes/magazine-glossy/tokens.ts +158 -0
  189. package/themes/marker-mag/THEME.md +128 -0
  190. package/themes/marker-mag/tailwind.snippet.ts +15 -0
  191. package/themes/marker-mag/theme.yml +159 -0
  192. package/themes/marker-mag/tokens.ts +27 -0
  193. package/themes/marketplace-modern/THEME.md +135 -0
  194. package/themes/marketplace-modern/tokens.ts +186 -0
  195. package/themes/marketplace-vintage/THEME.md +110 -0
  196. package/themes/marketplace-vintage/tokens.ts +185 -0
  197. package/themes/maximalist/THEME.md +96 -0
  198. package/themes/maximalist/tokens.ts +168 -0
  199. package/themes/mid-century/THEME.md +109 -0
  200. package/themes/mid-century/tokens.ts +162 -0
  201. package/themes/motorcycle-brand/THEME.md +86 -0
  202. package/themes/motorcycle-brand/tokens.ts +174 -0
  203. package/themes/museum/THEME.md +83 -0
  204. package/themes/museum/tokens.ts +147 -0
  205. package/themes/music-streaming/THEME.md +101 -0
  206. package/themes/music-streaming/tokens.ts +187 -0
  207. package/themes/music-vinyl/THEME.md +98 -0
  208. package/themes/music-vinyl/tokens.ts +167 -0
  209. package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
  210. package/themes/nature-distilled/THEME.md +81 -0
  211. package/themes/nature-distilled/tailwind.snippet.ts +16 -0
  212. package/themes/nature-distilled/theme.yml +91 -0
  213. package/themes/nature-distilled/tokens.ts +26 -0
  214. package/themes/news-tabloid/THEME.md +72 -0
  215. package/themes/news-tabloid/tokens.ts +158 -0
  216. package/themes/news-tech/THEME.md +75 -0
  217. package/themes/news-tech/tokens.ts +149 -0
  218. package/themes/newsletter/THEME.md +82 -0
  219. package/themes/newsletter/tokens.ts +138 -0
  220. package/themes/newspaper-classic/THEME.md +74 -0
  221. package/themes/newspaper-classic/tokens.ts +159 -0
  222. package/themes/nonprofit-arts/THEME.md +78 -0
  223. package/themes/nonprofit-arts/tokens.ts +157 -0
  224. package/themes/nonprofit-warm/THEME.md +105 -0
  225. package/themes/nonprofit-warm/tokens.ts +188 -0
  226. package/themes/outdoor-adventure/THEME.md +113 -0
  227. package/themes/outdoor-adventure/tokens.ts +181 -0
  228. package/themes/overland-broadside/THEME.md +119 -0
  229. package/themes/overland-broadside/tailwind.snippet.ts +17 -0
  230. package/themes/overland-broadside/theme.yml +138 -0
  231. package/themes/overland-broadside/tokens.ts +27 -0
  232. package/themes/performance-engineered/THEME.md +162 -0
  233. package/themes/performance-engineered/tailwind.snippet.ts +15 -0
  234. package/themes/performance-engineered/theme.yml +193 -0
  235. package/themes/performance-engineered/tokens.ts +29 -0
  236. package/themes/pet-food/THEME.md +78 -0
  237. package/themes/pet-food/tokens.ts +185 -0
  238. package/themes/pharma-clinical/THEME.md +164 -0
  239. package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
  240. package/themes/pharma-clinical/theme.yml +201 -0
  241. package/themes/pharma-clinical/tokens.ts +29 -0
  242. package/themes/pill-editorial/THEME.md +125 -0
  243. package/themes/pill-editorial/tailwind.snippet.ts +15 -0
  244. package/themes/pill-editorial/theme.yml +168 -0
  245. package/themes/pill-editorial/tokens.ts +31 -0
  246. package/themes/podcast-warm/THEME.md +103 -0
  247. package/themes/podcast-warm/tokens.ts +192 -0
  248. package/themes/publisher-indie/THEME.md +78 -0
  249. package/themes/publisher-indie/tokens.ts +148 -0
  250. package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
  251. package/themes/raw-concrete/THEME.md +76 -0
  252. package/themes/raw-concrete/tailwind.snippet.ts +16 -0
  253. package/themes/raw-concrete/theme.yml +88 -0
  254. package/themes/raw-concrete/tokens.ts +27 -0
  255. package/themes/realestate-luxury/THEME.md +94 -0
  256. package/themes/realestate-luxury/tokens.ts +169 -0
  257. package/themes/realestate-marketplace/THEME.md +106 -0
  258. package/themes/realestate-marketplace/tokens.ts +183 -0
  259. package/themes/restaurant-modern/THEME.md +109 -0
  260. package/themes/restaurant-modern/tokens.ts +172 -0
  261. package/themes/runway-fashion/THEME.md +99 -0
  262. package/themes/runway-fashion/tokens.ts +167 -0
  263. package/themes/saturday-morning/THEME.md +117 -0
  264. package/themes/saturday-morning/tokens.ts +281 -0
  265. package/themes/schema.ts +235 -0
  266. package/themes/signal-dark/BUILD_BRIEF.md +168 -0
  267. package/themes/signal-dark/THEME.md +107 -0
  268. package/themes/signal-dark/tokens.ts +181 -0
  269. package/themes/soft-modern/THEME.md +91 -0
  270. package/themes/soft-modern/tokens.ts +166 -0
  271. package/themes/solar-residential/THEME.md +92 -0
  272. package/themes/solar-residential/tokens.ts +176 -0
  273. package/themes/sports-league/THEME.md +180 -0
  274. package/themes/sports-league/tailwind.snippet.ts +15 -0
  275. package/themes/sports-league/theme.yml +213 -0
  276. package/themes/sports-league/tokens.ts +32 -0
  277. package/themes/stadium-sport/THEME.md +114 -0
  278. package/themes/stadium-sport/tokens.ts +187 -0
  279. package/themes/streetwear-hype/THEME.md +100 -0
  280. package/themes/streetwear-hype/tokens.ts +174 -0
  281. package/themes/studio-architect/THEME.md +108 -0
  282. package/themes/studio-architect/tokens.ts +162 -0
  283. package/themes/studio-photographer/THEME.md +88 -0
  284. package/themes/studio-photographer/tokens.ts +164 -0
  285. package/themes/team-kanban/THEME.md +167 -0
  286. package/themes/team-kanban/tailwind.snippet.ts +15 -0
  287. package/themes/team-kanban/theme.yml +209 -0
  288. package/themes/team-kanban/tokens.ts +35 -0
  289. package/themes/telehealth-modern/THEME.md +95 -0
  290. package/themes/telehealth-modern/tokens.ts +197 -0
  291. package/themes/tourism-board/THEME.md +111 -0
  292. package/themes/tourism-board/tokens.ts +173 -0
  293. package/themes/toys-modern/THEME.md +79 -0
  294. package/themes/toys-modern/tokens.ts +200 -0
  295. package/themes/travel-luxury/THEME.md +95 -0
  296. package/themes/travel-luxury/tokens.ts +162 -0
  297. package/themes/vacation-rental/THEME.md +105 -0
  298. package/themes/vacation-rental/tokens.ts +174 -0
  299. package/themes/vault-reel/THEME.md +134 -0
  300. package/themes/vault-reel/tailwind.snippet.ts +16 -0
  301. package/themes/vault-reel/theme.yml +167 -0
  302. package/themes/vault-reel/tokens.ts +30 -0
  303. package/themes/vet-modern/THEME.md +79 -0
  304. package/themes/vet-modern/tokens.ts +194 -0
  305. package/themes/web3-restraint/THEME.md +87 -0
  306. package/themes/web3-restraint/tokens.ts +154 -0
  307. package/themes/wellness-active/THEME.md +102 -0
  308. package/themes/wellness-active/tokens.ts +203 -0
  309. package/themes/wellness-spa/THEME.md +93 -0
  310. package/themes/wellness-spa/tokens.ts +173 -0
  311. package/themes/y2k-chrome/THEME.md +118 -0
  312. package/themes/y2k-chrome/tokens.ts +249 -0
  313. package/themes/yoga-studio/THEME.md +76 -0
  314. package/themes/yoga-studio/tokens.ts +163 -0
@@ -0,0 +1,29 @@
1
+ // Generated from theme.yml. Do not edit by hand — edit theme.yml + re-materialize.
2
+
3
+ export const tokens = {
4
+ slug: "pharma-clinical",
5
+ family: "C",
6
+ base: "30",
7
+ palette: {
8
+ "bg": "#f7f3e8",
9
+ "surface": "#ffffff",
10
+ "ink": "#1a1a1a",
11
+ "accent": "#6b1a1a",
12
+ "cream": "#f0eadc",
13
+ "darkInk": "#0a0a0a",
14
+ "mute": "#6a6558"
15
+ },
16
+ typography: {
17
+ "display": "A Bodoni-family display serif with strong stress contrast and elegant serifs — the reference uses Fenice / Bodoni Moda. Free fallback stack — \"Bodoni Moda\", \"Playfair Display\", \"PT Serif Display\", Georgia, serif. Weight 500-700, mixed case for section titles + patient-name callouts, ALL CAPS ONLY for the wordmark. Top of scale ~64px for hero headline, 40px for section headings, 28px for pull quotes. Never uppercase at body scale.",
18
+ "body": "A clean geometric sans for body copy — Inter Tight / Söhne / Aktiv Grotesk. Free fallback stack — \"Inter Tight\", Inter, \"Space Grotesk\", system-ui, sans-serif. Weight 400 for body copy, 500 for small labels, 600 for phase-indicator chips. 15-16px body copy, line-height 1.55.",
19
+ "mono": "none. Pharma Clinical is a consumer corporate publishing surface. Mono has no role.",
20
+ "scale": "1.333 (perfect fourth — restrained, comfortable for long-form medical copy)",
21
+ "eyebrow_exception": "Pharma Clinical LEGITIMATELY uses small uppercase 0.14em-tracked 10-11px labels for CLINICAL-PHASE INDICATORS (PHASE 01 / PHASE 02 / PHASE 03) and SECTION MARKERS (OUR SCIENCE / OUR PATIENTS / OUR PIPELINE). This is a THEME-SPECIFIC EXCEPTION — the reference publication style uses these EXACTLY in this register, as diegetic clinical publication markers rather than as decorative eyebrow slop. Every use is deliberate and reference-anchored.\n"
22
+ },
23
+ surface: "web",
24
+ density: "balanced",
25
+ motion: "Ships live in the section renderer (no external dependencies):\n1. Hero display serif reveal — headline fades in from opacity 0 + translateY(24px) over 800ms cubic-bezier(0.23,1,0.32,1) on first paint. Body copy follows with 200ms delay.\n2. Hero photograph fade + scale — the patient/scientist portrait opens from opacity 0.5 + scale(1.02) to opacity 1 + scale(1) over 1200ms cubic-bezier.\n3. Numbered pipeline progress bar — as the pipeline section scrolls into view (IntersectionObserver at 40%), the progress fill animates from 0% → active-phase% over 1400ms cubic-bezier. Phase-indicator chips fade in with 160ms per-chip stagger.\n4. Clinical data counters — each stat number rolls from 0 → target on first scroll into view via requestAnimationFrame, 2000ms ease-out.\n5. Patient portrait progressive reveal — the story-band portrait fades from blur(6px) + opacity 0.4 → blur(0) + opacity 1 over 900ms cubic-bezier.\n6. Timeline sequential reveal — milestone dots animate in with 120ms per-dot stagger + 500ms cubic-bezier when the timeline scrolls into view.\n7. Nav shrink on scroll — masthead height reduces from 88px → 56px after 200px of scroll, transitioning padding + wordmark font-size over 300ms cubic-bezier.\n8. Section reveals — each below-fold section fades in from opacity 0 + translateY(24px) → 0 over 700ms cubic-bezier on IntersectionObserver at 25% threshold.\n9. prefers-reduced-motion: reduce — all reveals disabled; counters show final value; pipeline shows at active phase; nav still shrinks (state change); hover still works (interaction feedback).\n\nMotion character: quiet, precise, trust-first. Custom cubic-bezier(0.23,1,0.32,1) for all reveals. Never marketing-loud, never startup-flashy — reads as a considered pharma annual report, not a SaaS product tour.\n",
26
+ signature: "Warm cream canvas at #f7f3e8 — the register's non-negotiable base\n(deliberately warmer than editorial's gallery #fafafa, cooler than\ncabana-poster's #eedfca, and distinct from claude-cream #F4F1EA).\nCold near-black ink #1a1a1a with ONE burgundy accent #6b1a1a used\nONLY for clinical-phase chip fills + section-marker underlines +\nhover states + pull-quote marks. Sharp corners everywhere.\n\nComposition begins with a MASTHEAD — a Bodoni-family wordmark\n\"WATERSHED\" (ALL CAPS, letter-spacing 0.03em, ~24px) on the left,\na horizontal nav row center (For patients / For clinicians / Our\nscience / Our pipeline / Careers / Investors), a filled burgundy\nrectangular \"Contact\" button right-aligned. The masthead shrinks\nafter 200px of scroll.\n\nHero: a two-column split — LEFT column carries the big Bodoni\ndisplay headline (~64px, mixed case) + a Inter Tight body-copy\nlede paragraph + a burgundy \"Learn about our science →\" text\nlink with hover underline. RIGHT column carries a full-bleed\npatient / scientist portrait photograph (studio-quality, warm\ndirectional light) with a small caption strip beneath (\"Photograph:\nDr. Ren Havelock, Head of Clinical Research, Watershed\").\n\nBelow the hero: a NUMBERED PIPELINE STAGES section — a horizontal\nprogress bar with 5 phase markers (Discovery / Preclinical / Phase\n01 / Phase 02 / Phase 03), each marked by a small burgundy chip and\na molecule count. On scroll into view, the progress fill animates\nfrom 0 → active-phase% and phase chips fade in with 160ms stagger.\n\nA PATIENT STORY BAND follows — a full-width warm cream inverted\nband with a large patient portrait photograph on the left and a\npatient-quote pull with attribution on the right (\"For the first\ntime in eleven years, I slept through a Tuesday.\" — Amara, on\nstarting an investigational treatment). Italic Bodoni for the\npull quote at 32px.\n\nCLINICAL DATA CALLOUTS — a 3-column grid with counting numbers:\n247 (active trials), 12,483 (patients enrolled globally), 89%\n(retention through phase 3). Each number counts up from 0 on\nscroll into view. Below each number a body-copy explanation and\na small footnote citation.\n\nSCIENTIFIC ILLUSTRATION section — a paired layout with a bespoke\nMOLECULE SVG on one side (a stylized protein-fold visualization)\nand a scientific-explanation paragraph on the other. The molecule\nis drawn as line-art with subtle burgundy highlights, not as a 3D\nrender.\n\nMILESTONE TIMELINE — a vertical timeline (rule + dots) with 6\nhistorical entries (Founded 2003, First IPO, First approval, etc).\nDots animate in with 120ms per-dot stagger on scroll into view.\n\nCAREERS BAND — warm cream inverted background with a \"We're\nhiring across research + clinical + regulatory + commercial\"\nmonumental Bodoni headline + a 4-column open-role list + a\nphotograph of the actual laboratory space.\n\nFooter: a dark inverted band with the big Bodoni wordmark\nrepeated, colophon paragraph, 4-column utility grid (About,\nPatients, Investors, Legal), and small legal disclaimers.\n\nSix bespoke SVG marks (molecule protein-fold, capsule outline,\nmicroscope silhouette, patient-portrait framing bracket, phase-\nchip separator glyph, timeline milestone dot) are dropped as\nPUNCTUATION at specific compositional moments — never as a\nuniform icon row.\n",
27
+ } as const;
28
+
29
+ export type Tokens = typeof tokens;
@@ -0,0 +1,125 @@
1
+ # Pill Editorial
2
+
3
+ > Modern cultural editorial register — black canvas broken by rounded pill tiles and a warm cream inverted band, monumental Million-family bold uppercase display type at 240px+, and a comprehensive 999px border-radius applied to every card / button / tile / image / form input / nav pill without exception.
4
+
5
+ **Slug:** `pill-editorial` — **Surface:** web — **Density:** dense
6
+
7
+ ## Influence
8
+
9
+ Modern culturally-specific creative studios (the register held by Black-owned and community-forward creative agencies at their most confident + editorial). Also modern-editorial rounded-chrome design systems (the Blackbird, Cash App at their most warm, Are.na when it leans playful). Distinct from other Family C bases through the FULLY ROUNDED chrome and the MONUMENTAL display type at editorial-poster scale.
10
+
11
+
12
+ ## Signature move
13
+
14
+ Every card, button, tile, image, form input, and nav pill in the
15
+ composition ships at 999px border-radius — the FULLY ROUNDED chrome
16
+ is the register's distinguishing structural move. This is the first
17
+ theme in the library with a non-zero border radius; every previous
18
+ theme (10 of 10) uses 0px sharp corners. Monumental display type at
19
+ 240px (Million reference face; Fraunces 900 free fallback), all-caps,
20
+ breaking the baseline grid — the display is the primary design
21
+ element. A featured PORTRAIT PILL TILE at ~600x900px shows the
22
+ studio's featured subject inside a rounded-pill mask (aspect ratio
23
+ ~2:3), with a horizontal LOADING text marquee scrolling across the
24
+ bottom of the image. A big cartoon SVG illustration (a person on a
25
+ bicycle with a bird companion, hand-drawn in cream on black)
26
+ anchors the "PLAY AS PRACTICE" motto section. Below, a 5-card grid
27
+ of recommendation pill tiles — each card is a fully-rounded pill
28
+ with a portrait image at the top, a small colored accent chip, a
29
+ title, and a byline. A newsletter capture with an amber pill button.
30
+ A 3-book recommended-reading strip with each book cover in a rounded
31
+ pill mask. The composition closes with a monumental "FOR YOU"
32
+ headline and a 3-card audience-segment grid (For Artists / For
33
+ Institutions / For Your Team) — each card a large rounded pill
34
+ tile with a portrait image and a small accent-chip. Small
35
+ mono-caps 10-12px 0.2em-tracked eyebrow labels are LEGITIMATELY
36
+ USED here (rare exception to the universal slop-blocklist — see
37
+ eyebrow_exception in typography). Brand character sits in the
38
+ rounded chrome, the monumental display, and the editorial
39
+ portraits — not in decoration, not in geometric ornament.
40
+
41
+ ## Palette
42
+
43
+ - **bg:** `#000000`
44
+ - **surface:** `#111111`
45
+ - **ink:** `#FFFFFF`
46
+ - **accent:** `#146C5A`
47
+
48
+ ## Typography
49
+
50
+ - **Display:** Million (paid) or a bold display serif fallback — Fraunces at 900 weight, or Recoleta / DM Serif Display at bold weight — 800-900 weight, UPPERCASE always, letter-spacing normal or slightly positive. At scale — 240px monumental hero, 160px section headline, 60-80px subheads, 34px h3. Million is the reference face (a bold retro-display serif with chunky proportions); Fraunces at 900-weight bold-italic-off is the closest free approximation with similar chunky-display proportions and expressive character. Reference uses a slightly weird retro-serif face that carries character rather than restraint — the display is expressive, not disciplined.
51
+ - **Body:** Inter Tight or a system sans — 400-500 weight, mixed case, 15-18px body copy, line-height 1.5. Small labels get 12px 500-weight sentence case.
52
+ - **Mono:** none. Pill Editorial is a consumer editorial surface — mono has no role.
53
+ - **Scale:** 1.5 (perfect fifth — deliberately wide contrast so the monumental display shouts and body settles calm)
54
+
55
+ ## Motion
56
+
57
+ Ships live in the section renderer (no external dependencies):
58
+ 1. Monumental hero headline reveal — the display type fades in from opacity 0 + slight scale(0.96) → 1 over 800ms cubic-bezier(0.19,1,0.22,1) on first paint. No letter-stagger (this is an editorial register, not a marketing register).
59
+ 2. LOADING marquee — the "LOADING" text on the featured portrait image scrolls horizontally at 40s per loop, continuously (pauses on hover). This IS a legitimate marquee per the reference — spec allows.
60
+ 3. Featured pill tiles hover — the rounded pill image tile scales(1.02) + rotates slightly (-1deg) on hover, 220ms cubic-bezier. Reads as "picking up a physical print off the wall."
61
+ 4. Card grid stagger — the 5-card recommendation grid fades in with 80ms stagger + 600ms cubic-bezier when scrolled into view.
62
+ 5. Newsletter form focus — pill input outline transitions from cream to amber on focus, 200ms.
63
+ 6. PLAY AS PRACTICE cartoon SVG — the illustrated character rocks 2deg back and forth on a 3s loop; pauses on hover for readability.
64
+ 7. FOR YOU audience-segment cards — hover scales the pill card 1.02 + lifts the internal image scale(1.05), 240ms cubic-bezier.
65
+ 8. prefers-reduced-motion: reduce — hero at final scale; LOADING marquee paused; card stagger + hover disabled; cartoon rocking paused. State changes still fire.
66
+
67
+ Customer installs these as dependencies for the deeper motion tier:
68
+ - Lenis — smooth inertial scroll (the tall page benefits from inertial cadence).
69
+ - GSAP DrawSVG for the cartoon illustration reveals + monumental headline character animations.
70
+ - Custom preloader with the monumental wordmark drawing letter-by-letter over the black canvas.
71
+
72
+ Motion character: playful, cultural, tactile. Custom cubic-bezier(0.19,1,0.22,1) for reveals. The register lives between corporate editorial and playful cultural — motion should feel considered but not clinical.
73
+
74
+
75
+ ## Imagery
76
+
77
+ Editorial PORTRAIT PHOTOGRAPHY of subjects — the reference uses
78
+ images of Black artists, cultural figures, and creative practitioners
79
+ photographed under directional light in colorful outfits against
80
+ colored backdrops. FPO imagery here should read as culturally
81
+ specific + editorially considered — colored backdrop rectangles
82
+ with subject silhouettes, textural cutouts, and warm-forward
83
+ lighting cues. Never generic stock. Every photo tile is masked to
84
+ a 999px rounded-pill shape. Cartoon SVG illustrations (bespoke,
85
+ hand-drawn feel — line art of figures, animals, and simple
86
+ environmental cues) mixed with photography. NO gradient blobs, NO
87
+ glassmorphism, NO stock-diverse-workplace photography (that's the
88
+ slop tell). The register lives at the intersection of magazine
89
+ editorial + community-forward creative studio.
90
+
91
+ ## Best for
92
+
93
+ - Cultural intelligence studios and Black-owned creative agencies
94
+ - Modern editorial magazines with a culturally-specific voice
95
+ - Community-forward creative studios (art advisories, cultural consultancies)
96
+ - Podcast + editorial platforms with a distinct subculture perspective
97
+ - Independent art advisories serving cultural institutions + artists
98
+ - Boutique studios doing brand work for museums, cultural venues, and heritage brands
99
+
100
+ ## Reject if
101
+
102
+ _Director grades each of the following as a pass/fail check. Any violation blocks the theme._
103
+
104
+ - Non-999px border radius — this is the register's distinguishing structural move. Every card, button, tile, image, form input, nav pill MUST ship at 999px.
105
+ - Serif or humanist display type at the hero scale — the display face MUST be a bold retro-display serif with chunky character (Million, Fraunces 900, Recoleta, DM Serif Display). Inter Display / Anton / DM Sans have the wrong register.
106
+ - Multiple accent colors flooding the composition — cream + forest + amber is the studio's palette. Introducing pink / purple / any additional color as an accent collapses the register.
107
+ - Neutral canvas (white / cream / gray) as the primary background — canvas IS black. Swapping to a light canvas collapses this into generic-editorial slop.
108
+ - Corporate polish — no drop-shadow-md, no soft-glow, no gradient backdrop. Pill tiles are FLAT rounded rectangles with color fills only.
109
+ - Sharp-cornered cards or buttons anywhere on the page — the 999px pill is universal in this theme.
110
+ - Generic stock photography that reads as 'diverse workplace' — imagery MUST feel editorial + culturally specific. Portraits under directional light on colored backdrops, not lunch meetings around a laptop.
111
+ - Uniform 3-column feature grids — the FOR YOU section is 3 cards but each card has a DIFFERENT color, DIFFERENT image, DIFFERENT audience label. It's not a template.
112
+ - Emoji or decorative unicode marks — cartoon SVG illustrations and photography carry all the ornamentation
113
+ - Auto-advancing hero sliders / cycling headline words — only the LOADING marquee is auto (per reference); everything else waits for user input
114
+
115
+ ## Banned defaults (inherited + theme-specific)
116
+
117
+ - claude-cream (#F4F1EA + serif + #D97757)
118
+ - void+acid (near-black bg + single bright acid-green or vermilion accent)
119
+ - broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)
120
+ - tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)
121
+ - uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)
122
+ - sharp-corner-anywhere (this theme's whole point is the fully-rounded pill chrome. A sharp-cornered card, button, or input anywhere on the page immediately breaks the register.)
123
+ - cream-flood (cream is INVERTED-BAND-BACKGROUND + CARD-FILL color, not a canvas primary. Making cream the whole page background collapses the theme into a generic warm-editorial and the black-canvas identity dies.)
124
+ - generic-diverse-workplace-photography (the imagery must be EDITORIAL PORTRAIT under directional light on colored backdrops. Stock photography of racially-diverse people in an office collapses the register into corporate-diversity slop.)
125
+ - pill-plus-shadow (rounded pills with drop-shadow-md is the stock Medium / Substack aesthetic. Pills here must be FLAT color-fill rectangles with no shadow.)
@@ -0,0 +1,15 @@
1
+ // Generated from theme.yml. Merge into your tailwind.config.ts under theme.extend.
2
+ // slug: pill-editorial
3
+ export const pillEditorialTailwindExtend = {
4
+ colors: {
5
+ bg: "#000000",
6
+ surface: "#111111",
7
+ ink: "#FFFFFF",
8
+ accent: "#146C5A",
9
+ },
10
+ fontFamily: {
11
+ display: ["Million (paid) or a bold display serif fallback — Fraunces at 900 weight, or Recoleta / DM Serif Display at bold weight — 800-900 weight, UPPERCASE always, letter-spacing normal or slightly positive. At scale — 240px monumental hero, 160px section headline, 60-80px subheads, 34px h3. Million is the reference face (a bold retro-display serif with chunky proportions); Fraunces at 900-weight bold-italic-off is the closest free approximation with similar chunky-display proportions and expressive character. Reference uses a slightly weird retro-serif face that carries character rather than restraint — the display is expressive, not disciplined."],
12
+ body: ["Inter Tight or a system sans — 400-500 weight, mixed case, 15-18px body copy, line-height 1.5. Small labels get 12px 500-weight sentence case."],
13
+ mono: ["none. Pill Editorial is a consumer editorial surface — mono has no role."],
14
+ },
15
+ };
@@ -0,0 +1,168 @@
1
+ # Pill Editorial — Family C, Editorial & Print.
2
+ #
3
+ # NEW-BASE CANDIDATE for BESPOKE_THEME_SYSTEM.md. FIRST theme in the
4
+ # library with a non-zero border radius. Every previous theme (10 of
5
+ # 10) has been 0px sharp corners. Pill Editorial ships every card,
6
+ # button, tile, image, form input, and nav pill at 999px radius —
7
+ # the register is FULLY ROUNDED as its distinguishing feature.
8
+ #
9
+ # Family placement — Editorial & Print register, but distinct from
10
+ # other Family C bases:
11
+ # - Base 26 Cut & Paste Zine — pure ransom-note chaos (marker-mag
12
+ # adjacent)
13
+ # - Base 27 Type Specimen — foundry showcase
14
+ # - Ember Poster (my new-base) — warm-dark editorial
15
+ # - Case Panel (my new-base) — agency portfolio
16
+ # - Marker Mag (my new-base) — student DIY
17
+ # - Atelier Radiance (my new-base) — luxury boutique
18
+ # Pill Editorial fills the gap of MODERN CULTURAL EDITORIAL — a
19
+ # distinctly Black-cultural-studio register with rounded pills as the
20
+ # structural chrome and monumental display type as the identity.
21
+ #
22
+ # Authored from Matt's provided design brief (2026-07-04,
23
+ # thefutureinblack.com reference — a real cultural intelligence studio).
24
+ # Placeholder brand is a fictional cultural intelligence studio called
25
+ # KIN — domain-agnostic mockup that could re-skin to any culturally-
26
+ # specific creative studio, editorial magazine, art advisory, or
27
+ # community-forward brand. The register expresses "modern editorial"
28
+ # through the ROUNDED PILL chrome + MONUMENTAL display type +
29
+ # EDITORIAL PHOTOGRAPHY that photographs subjects with cultural
30
+ # specificity rather than generic-stock aesthetic.
31
+ #
32
+ # Eleventh theme via the v2 harness. Fourth Family C theme (after
33
+ # ember-poster + case-panel + marker-mag). Sixth NEW BASE.
34
+ #
35
+ # Alternative slugs considered — culture-studio (too generic),
36
+ # soft-editorial (imprecise), pill-cultural (backward word order),
37
+ # radius-editorial (technical framing). Pill Editorial picked because
38
+ # "pill" nails the 999px radius signature and "editorial" carries the
39
+ # magazine/monumental-type register that anchors this base.
40
+
41
+ name: Pill Editorial
42
+ concept: Modern cultural editorial register — black canvas broken by rounded pill tiles and a warm cream inverted band, monumental Million-family bold uppercase display type at 240px+, and a comprehensive 999px border-radius applied to every card / button / tile / image / form input / nav pill without exception.
43
+ influence: |
44
+ Modern culturally-specific creative studios (the register held by Black-owned and community-forward creative agencies at their most confident + editorial). Also modern-editorial rounded-chrome design systems (the Blackbird, Cash App at their most warm, Are.na when it leans playful). Distinct from other Family C bases through the FULLY ROUNDED chrome and the MONUMENTAL display type at editorial-poster scale.
45
+
46
+ family: C
47
+ base_number: 26
48
+ base_note: |
49
+ New-base candidate in Family C, adjacent to Base 26 Cut & Paste Zine but from a fundamentally different aesthetic tradition. Base 26 is punk photocopy anarchy; Pill Editorial is refined modern editorial with rounded chrome. Both trade on their subculture register but through opposite structural moves — Cut & Paste through torn edges + mismatched fonts, Pill Editorial through fully-rounded pills + one confident monumental display. This is the FIRST theme with a non-zero border radius in the library — the 999px pill is the register's distinguishing structural move.
50
+
51
+ render_url: http://localhost:5173/themes/pill-editorial
52
+
53
+ surface: web
54
+
55
+ typography:
56
+ display: Million (paid) or a bold display serif fallback — Fraunces at 900 weight, or Recoleta / DM Serif Display at bold weight — 800-900 weight, UPPERCASE always, letter-spacing normal or slightly positive. At scale — 240px monumental hero, 160px section headline, 60-80px subheads, 34px h3. Million is the reference face (a bold retro-display serif with chunky proportions); Fraunces at 900-weight bold-italic-off is the closest free approximation with similar chunky-display proportions and expressive character. Reference uses a slightly weird retro-serif face that carries character rather than restraint — the display is expressive, not disciplined.
57
+ body: Inter Tight or a system sans — 400-500 weight, mixed case, 15-18px body copy, line-height 1.5. Small labels get 12px 500-weight sentence case.
58
+ mono: none. Pill Editorial is a consumer editorial surface — mono has no role.
59
+ scale: 1.5 (perfect fifth — deliberately wide contrast so the monumental display shouts and body settles calm)
60
+ eyebrow_exception: |
61
+ The universal slop-blocklist bans mono-caps eyebrows as a general defensive rule. Pill Editorial LEGITIMATELY uses small uppercase 0.2em-tracked 10-12px labels as section eyebrows because the reference site (thefutureinblack.com) genuinely uses them in this exact register — they are part of the modern-editorial vocabulary this base descends from. Every use of a small caps label in this theme is deliberate and reference-anchored, not defensive slop. This is a THEME-SPECIFIC EXCEPTION that must be manually preserved during harness grading.
62
+
63
+ palette:
64
+ bg: "#000000" # canvas — dark hero + full-page dark register
65
+ surface: "#111111" # slightly-lifted panel on the dark canvas
66
+ ink: "#FFFFFF" # white — primary text on the dark canvas
67
+ accent: "#146C5A" # primary accent (forest green) — pill CTAs + accent word inside headlines
68
+ cream: "#F2E6CA" # warm parchment — inverted "For You" section band + editorial pill tiles
69
+ forest: "#146C5A" # same as accent — kept as a semantic alias for downstream tokens
70
+ amber: "#E8A628" # secondary accent — highlight underlines + small pill badges
71
+ darkInk: "#0A0A0A" # ink for text on cream + forest pill tiles
72
+ mute: "#8A8078" # secondary text (labels, captions)
73
+
74
+ density: dense
75
+
76
+ motion: |
77
+ Ships live in the section renderer (no external dependencies):
78
+ 1. Monumental hero headline reveal — the display type fades in from opacity 0 + slight scale(0.96) → 1 over 800ms cubic-bezier(0.19,1,0.22,1) on first paint. No letter-stagger (this is an editorial register, not a marketing register).
79
+ 2. LOADING marquee — the "LOADING" text on the featured portrait image scrolls horizontally at 40s per loop, continuously (pauses on hover). This IS a legitimate marquee per the reference — spec allows.
80
+ 3. Featured pill tiles hover — the rounded pill image tile scales(1.02) + rotates slightly (-1deg) on hover, 220ms cubic-bezier. Reads as "picking up a physical print off the wall."
81
+ 4. Card grid stagger — the 5-card recommendation grid fades in with 80ms stagger + 600ms cubic-bezier when scrolled into view.
82
+ 5. Newsletter form focus — pill input outline transitions from cream to amber on focus, 200ms.
83
+ 6. PLAY AS PRACTICE cartoon SVG — the illustrated character rocks 2deg back and forth on a 3s loop; pauses on hover for readability.
84
+ 7. FOR YOU audience-segment cards — hover scales the pill card 1.02 + lifts the internal image scale(1.05), 240ms cubic-bezier.
85
+ 8. prefers-reduced-motion: reduce — hero at final scale; LOADING marquee paused; card stagger + hover disabled; cartoon rocking paused. State changes still fire.
86
+
87
+ Customer installs these as dependencies for the deeper motion tier:
88
+ - Lenis — smooth inertial scroll (the tall page benefits from inertial cadence).
89
+ - GSAP DrawSVG for the cartoon illustration reveals + monumental headline character animations.
90
+ - Custom preloader with the monumental wordmark drawing letter-by-letter over the black canvas.
91
+
92
+ Motion character: playful, cultural, tactile. Custom cubic-bezier(0.19,1,0.22,1) for reveals. The register lives between corporate editorial and playful cultural — motion should feel considered but not clinical.
93
+
94
+ signature: |
95
+ Every card, button, tile, image, form input, and nav pill in the
96
+ composition ships at 999px border-radius — the FULLY ROUNDED chrome
97
+ is the register's distinguishing structural move. This is the first
98
+ theme in the library with a non-zero border radius; every previous
99
+ theme (10 of 10) uses 0px sharp corners. Monumental display type at
100
+ 240px (Million reference face; Fraunces 900 free fallback), all-caps,
101
+ breaking the baseline grid — the display is the primary design
102
+ element. A featured PORTRAIT PILL TILE at ~600x900px shows the
103
+ studio's featured subject inside a rounded-pill mask (aspect ratio
104
+ ~2:3), with a horizontal LOADING text marquee scrolling across the
105
+ bottom of the image. A big cartoon SVG illustration (a person on a
106
+ bicycle with a bird companion, hand-drawn in cream on black)
107
+ anchors the "PLAY AS PRACTICE" motto section. Below, a 5-card grid
108
+ of recommendation pill tiles — each card is a fully-rounded pill
109
+ with a portrait image at the top, a small colored accent chip, a
110
+ title, and a byline. A newsletter capture with an amber pill button.
111
+ A 3-book recommended-reading strip with each book cover in a rounded
112
+ pill mask. The composition closes with a monumental "FOR YOU"
113
+ headline and a 3-card audience-segment grid (For Artists / For
114
+ Institutions / For Your Team) — each card a large rounded pill
115
+ tile with a portrait image and a small accent-chip. Small
116
+ mono-caps 10-12px 0.2em-tracked eyebrow labels are LEGITIMATELY
117
+ USED here (rare exception to the universal slop-blocklist — see
118
+ eyebrow_exception in typography). Brand character sits in the
119
+ rounded chrome, the monumental display, and the editorial
120
+ portraits — not in decoration, not in geometric ornament.
121
+
122
+ imagery: |
123
+ Editorial PORTRAIT PHOTOGRAPHY of subjects — the reference uses
124
+ images of Black artists, cultural figures, and creative practitioners
125
+ photographed under directional light in colorful outfits against
126
+ colored backdrops. FPO imagery here should read as culturally
127
+ specific + editorially considered — colored backdrop rectangles
128
+ with subject silhouettes, textural cutouts, and warm-forward
129
+ lighting cues. Never generic stock. Every photo tile is masked to
130
+ a 999px rounded-pill shape. Cartoon SVG illustrations (bespoke,
131
+ hand-drawn feel — line art of figures, animals, and simple
132
+ environmental cues) mixed with photography. NO gradient blobs, NO
133
+ glassmorphism, NO stock-diverse-workplace photography (that's the
134
+ slop tell). The register lives at the intersection of magazine
135
+ editorial + community-forward creative studio.
136
+
137
+ best_for:
138
+ - Cultural intelligence studios and Black-owned creative agencies
139
+ - Modern editorial magazines with a culturally-specific voice
140
+ - Community-forward creative studios (art advisories, cultural consultancies)
141
+ - Podcast + editorial platforms with a distinct subculture perspective
142
+ - Independent art advisories serving cultural institutions + artists
143
+ - Boutique studios doing brand work for museums, cultural venues, and heritage brands
144
+
145
+ avoid:
146
+ - "Non-999px border radius — this is the register's distinguishing structural move. Every card, button, tile, image, form input, nav pill MUST ship at 999px."
147
+ - "Serif or humanist display type at the hero scale — the display face MUST be a bold retro-display serif with chunky character (Million, Fraunces 900, Recoleta, DM Serif Display). Inter Display / Anton / DM Sans have the wrong register."
148
+ - "Multiple accent colors flooding the composition — cream + forest + amber is the studio's palette. Introducing pink / purple / any additional color as an accent collapses the register."
149
+ - "Neutral canvas (white / cream / gray) as the primary background — canvas IS black. Swapping to a light canvas collapses this into generic-editorial slop."
150
+ - "Corporate polish — no drop-shadow-md, no soft-glow, no gradient backdrop. Pill tiles are FLAT rounded rectangles with color fills only."
151
+ - "Sharp-cornered cards or buttons anywhere on the page — the 999px pill is universal in this theme."
152
+ - "Generic stock photography that reads as 'diverse workplace' — imagery MUST feel editorial + culturally specific. Portraits under directional light on colored backdrops, not lunch meetings around a laptop."
153
+ - "Uniform 3-column feature grids — the FOR YOU section is 3 cards but each card has a DIFFERENT color, DIFFERENT image, DIFFERENT audience label. It's not a template."
154
+ - "Emoji or decorative unicode marks — cartoon SVG illustrations and photography carry all the ornamentation"
155
+ - "Auto-advancing hero sliders / cycling headline words — only the LOADING marquee is auto (per reference); everything else waits for user input"
156
+
157
+ banned_defaults:
158
+ # Global blocklist from BESPOKE_THEME_SYSTEM.md
159
+ - "claude-cream (#F4F1EA + serif + #D97757)"
160
+ - "void+acid (near-black bg + single bright acid-green or vermilion accent)"
161
+ - "broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)"
162
+ - "tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)"
163
+ - "uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)"
164
+ # Base-specific
165
+ - "sharp-corner-anywhere (this theme's whole point is the fully-rounded pill chrome. A sharp-cornered card, button, or input anywhere on the page immediately breaks the register.)"
166
+ - "cream-flood (cream is INVERTED-BAND-BACKGROUND + CARD-FILL color, not a canvas primary. Making cream the whole page background collapses the theme into a generic warm-editorial and the black-canvas identity dies.)"
167
+ - "generic-diverse-workplace-photography (the imagery must be EDITORIAL PORTRAIT under directional light on colored backdrops. Stock photography of racially-diverse people in an office collapses the register into corporate-diversity slop.)"
168
+ - "pill-plus-shadow (rounded pills with drop-shadow-md is the stock Medium / Substack aesthetic. Pills here must be FLAT color-fill rectangles with no shadow.)"
@@ -0,0 +1,31 @@
1
+ // Generated from theme.yml. Do not edit by hand — edit theme.yml + re-materialize.
2
+
3
+ export const tokens = {
4
+ slug: "pill-editorial",
5
+ family: "C",
6
+ base: "26",
7
+ palette: {
8
+ "bg": "#000000",
9
+ "surface": "#111111",
10
+ "ink": "#FFFFFF",
11
+ "accent": "#146C5A",
12
+ "cream": "#F2E6CA",
13
+ "forest": "#146C5A",
14
+ "amber": "#E8A628",
15
+ "darkInk": "#0A0A0A",
16
+ "mute": "#8A8078"
17
+ },
18
+ typography: {
19
+ "display": "Million (paid) or a bold display serif fallback — Fraunces at 900 weight, or Recoleta / DM Serif Display at bold weight — 800-900 weight, UPPERCASE always, letter-spacing normal or slightly positive. At scale — 240px monumental hero, 160px section headline, 60-80px subheads, 34px h3. Million is the reference face (a bold retro-display serif with chunky proportions); Fraunces at 900-weight bold-italic-off is the closest free approximation with similar chunky-display proportions and expressive character. Reference uses a slightly weird retro-serif face that carries character rather than restraint — the display is expressive, not disciplined.",
20
+ "body": "Inter Tight or a system sans — 400-500 weight, mixed case, 15-18px body copy, line-height 1.5. Small labels get 12px 500-weight sentence case.",
21
+ "mono": "none. Pill Editorial is a consumer editorial surface — mono has no role.",
22
+ "scale": "1.5 (perfect fifth — deliberately wide contrast so the monumental display shouts and body settles calm)",
23
+ "eyebrow_exception": "The universal slop-blocklist bans mono-caps eyebrows as a general defensive rule. Pill Editorial LEGITIMATELY uses small uppercase 0.2em-tracked 10-12px labels as section eyebrows because the reference site (thefutureinblack.com) genuinely uses them in this exact register — they are part of the modern-editorial vocabulary this base descends from. Every use of a small caps label in this theme is deliberate and reference-anchored, not defensive slop. This is a THEME-SPECIFIC EXCEPTION that must be manually preserved during harness grading.\n"
24
+ },
25
+ surface: "web",
26
+ density: "dense",
27
+ motion: "Ships live in the section renderer (no external dependencies):\n1. Monumental hero headline reveal — the display type fades in from opacity 0 + slight scale(0.96) → 1 over 800ms cubic-bezier(0.19,1,0.22,1) on first paint. No letter-stagger (this is an editorial register, not a marketing register).\n2. LOADING marquee — the \"LOADING\" text on the featured portrait image scrolls horizontally at 40s per loop, continuously (pauses on hover). This IS a legitimate marquee per the reference — spec allows.\n3. Featured pill tiles hover — the rounded pill image tile scales(1.02) + rotates slightly (-1deg) on hover, 220ms cubic-bezier. Reads as \"picking up a physical print off the wall.\"\n4. Card grid stagger — the 5-card recommendation grid fades in with 80ms stagger + 600ms cubic-bezier when scrolled into view.\n5. Newsletter form focus — pill input outline transitions from cream to amber on focus, 200ms.\n6. PLAY AS PRACTICE cartoon SVG — the illustrated character rocks 2deg back and forth on a 3s loop; pauses on hover for readability.\n7. FOR YOU audience-segment cards — hover scales the pill card 1.02 + lifts the internal image scale(1.05), 240ms cubic-bezier.\n8. prefers-reduced-motion: reduce — hero at final scale; LOADING marquee paused; card stagger + hover disabled; cartoon rocking paused. State changes still fire.\n\nCustomer installs these as dependencies for the deeper motion tier:\n- Lenis — smooth inertial scroll (the tall page benefits from inertial cadence).\n- GSAP DrawSVG for the cartoon illustration reveals + monumental headline character animations.\n- Custom preloader with the monumental wordmark drawing letter-by-letter over the black canvas.\n\nMotion character: playful, cultural, tactile. Custom cubic-bezier(0.19,1,0.22,1) for reveals. The register lives between corporate editorial and playful cultural — motion should feel considered but not clinical.\n",
28
+ signature: "Every card, button, tile, image, form input, and nav pill in the\ncomposition ships at 999px border-radius — the FULLY ROUNDED chrome\nis the register's distinguishing structural move. This is the first\ntheme in the library with a non-zero border radius; every previous\ntheme (10 of 10) uses 0px sharp corners. Monumental display type at\n240px (Million reference face; Fraunces 900 free fallback), all-caps,\nbreaking the baseline grid — the display is the primary design\nelement. A featured PORTRAIT PILL TILE at ~600x900px shows the\nstudio's featured subject inside a rounded-pill mask (aspect ratio\n~2:3), with a horizontal LOADING text marquee scrolling across the\nbottom of the image. A big cartoon SVG illustration (a person on a\nbicycle with a bird companion, hand-drawn in cream on black)\nanchors the \"PLAY AS PRACTICE\" motto section. Below, a 5-card grid\nof recommendation pill tiles — each card is a fully-rounded pill\nwith a portrait image at the top, a small colored accent chip, a\ntitle, and a byline. A newsletter capture with an amber pill button.\nA 3-book recommended-reading strip with each book cover in a rounded\npill mask. The composition closes with a monumental \"FOR YOU\"\nheadline and a 3-card audience-segment grid (For Artists / For\nInstitutions / For Your Team) — each card a large rounded pill\ntile with a portrait image and a small accent-chip. Small\nmono-caps 10-12px 0.2em-tracked eyebrow labels are LEGITIMATELY\nUSED here (rare exception to the universal slop-blocklist — see\neyebrow_exception in typography). Brand character sits in the\nrounded chrome, the monumental display, and the editorial\nportraits — not in decoration, not in geometric ornament.\n",
29
+ } as const;
30
+
31
+ export type Tokens = typeof tokens;
@@ -0,0 +1,103 @@
1
+ # Design Direction — Podcast-Warm
2
+
3
+ ## Ethos
4
+ Overcast warm orange · Pocket Casts deep red · Castro deep teal-green · Goodpods community warmth · Snipd purple clip-cards
5
+
6
+ ## Feel
7
+ Warm off-white canvas, generously rounded chrome, oversized artwork tiles in a subscribed-shows grid. Friendly secondary palette of teal-green and clip-card purple. The independent-listener counterpoint to Spotify's cold corporate dark — this surface feels like a curated shelf of shows, not a streaming dashboard. The page is a library, not a player.
8
+
9
+ ## Reference brands
10
+ - **Overcast** → warm orange accent with friendly system sans and soft cards. The independent-listener default.
11
+ - **Pocket Casts** → deep red action color with smooth animations and warm surfaces. Considered library-management UX.
12
+ - **Castro** → deep teal-green chrome with a friendly, library-shelf feel. Inbox-style queue.
13
+ - **Goodpods** → community-warm Plus Jakarta Sans, recommendation-led layout. Social discovery.
14
+ - **Snipd** → purple clip-cards and friendly AI-generated chapter chrome. Clip-as-share-unit.
15
+
16
+ ## Tokens
17
+ All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin. Do not introduce numbered or generic tokens — if a new color is needed, name a brand it traces to.
18
+
19
+ Surface stack is **warm-cream** (background, HSL `32 30% 96%` — library-shelf cream) → **white card** (`0 0% 100%`) → **deeper cream** (secondary/muted). Depth comes from soft warm shadows on cards lifted above the cream canvas — the cards feel like physical tiles on a shelf.
20
+
21
+ Brand tokens: `--overcast-orange` (primary, the canonical play color), `--castro-teal` (accent, friendly secondary), `--pocketcasts-red` (subscribed/badge accent), `--snipd-purple` (clip-card chrome), `--goodpods-pink` (recommendation highlight), `--warm-cream`, `--shelf-brown`. Primary is `--overcast-orange` — used for all play affordances and the hero subscribe CTA.
22
+
23
+ ## Typography
24
+ - **Display:** Plus Jakarta Sans (Goodpods display). Friendly geometric humanist, soft terminals — podcast-app warm. Tracking `-0.015em`.
25
+ - **Body:** Inter (Overcast/Pocket Casts system-feel sans). Neutral, screen-comfortable for episode descriptions. Body base **16px** with **line-height 1.6**.
26
+ - **Mono:** JetBrains Mono. Episode runtimes, chapter timestamps, playback speed — tabular numerics.
27
+
28
+ H1 uses `clamp(2.25rem, 6vw, 4.5rem)` — friendly hero scale, not cinematic-large. Font features: `"ss01"`, `"cv11"`, `"tnum"`.
29
+
30
+ ## Spacing
31
+ - **Container:** `max-w-6xl px-5 lg:px-8` — wide enough for a four-column subscribed-shows grid but not as wide as music-streaming.
32
+ - **Section padding tiers:**
33
+ - Hero: `pt-20 pb-14 lg:pt-32 lg:pb-20`
34
+ - Default: `py-16 lg:py-24`
35
+ - Tight: `py-10 lg:py-14`
36
+ - **Allowed scale values:** 4 8 12 16 20 24 32 40 48 64 80 96 128. No arbitrary spacing.
37
+
38
+ ## Color
39
+ No hex anywhere in component files. All color via tokens. Opacity via `/N` modifier on token. Pure white is reserved for `--card` only — the warm-cream canvas is the default page surface. Pure black is forbidden — `--shelf-brown` (warm brown-ink) replaces it.
40
+
41
+ **Overcast orange is the canonical play color.** Castro-teal is the friendly secondary used for "Subscribed" toggles, category chips, and hover accents — it is the only place teal-green appears. Pocket-casts-red is reserved for "Subscribed" badges and library-management accents — never a CTA color. Snipd-purple sits on clip-cards and AI-summary chrome only. Goodpods-pink is for recommendation-card highlights only.
42
+
43
+ ## Radius
44
+ `--radius: 1rem`. **Generously rounded — the warm-chrome signal.** Pills are core (`pillsAllowed: true`): category chips, subscribe toggles, playback-speed selectors, search input all use `rounded-full`. Icon buttons use `1rem`. Cards use `1rem`. The rounding is the warm signal.
45
+
46
+ ## Shadows
47
+ **Soft style.** Three utilities:
48
+ - `.tile-soft` — show-artwork tile lift; warm soft drop in `--shelf-brown` at low opacity, never colored
49
+ - `.tile-lift` — hover state; the tile rises with a deeper soft shadow
50
+ - `.subscribe-glow` — hero subscribe button warm glow in overcast-orange, single instance per page
51
+
52
+ Shadows are always warm (cast from `--shelf-brown` brown-ink), never neutral gray. This is the "tile on a wooden shelf" lighting model.
53
+
54
+ ## Motion
55
+ Five keyframes, all friendly:
56
+ - `tile-rise` (500ms once) — show-tile entrance, staggered across grid, gentle rise
57
+ - `subscribe-pop` (400ms once) — subscribe-button click feedback, friendly pop, never on play/pause
58
+ - `play-bar-bounce` (1800ms infinite) — now-playing mini-bar gentle bounce, present but unobtrusive
59
+ - `chapter-progress` (1200ms once) — chapter-marker fill animation on episode-page chapter list
60
+ - `tile-shimmer` (2400ms infinite) — featured-show artwork shimmer overlay, used only on the hero featured tile
61
+
62
+ Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored — every motion utility wrapped in a media query.
63
+
64
+ ## Component patterns
65
+ - **Buttons:** primary play action is a SOLID `rounded-full` overcast-orange button with white play glyph. Subscribe toggle is a pill: outlined Castro-teal when "Subscribe", filled when "Subscribed". Secondary controls (queue, share, download) are ghost icon buttons with 1rem radius. Tertiary text-link CTAs use `--shelf-brown` foreground with underline-on-hover.
66
+ - **Cards:** show-tile is the canonical card — square artwork at 1:1, generously rounded (1rem), with title and host below, lifted by `.tile-soft` shadow that grows to `.tile-lift` on hover. Episode cards use `bg-card` (white) on cream background, `p-5 lg:p-6`, with chapter-list inside when expanded. **No card uses cream fill** — cards always sit above the canvas in white.
67
+ - **Inputs:** pill-shape (`rounded-full`) input with `bg-card`, 1px `--border`, leading icon. Focus ring is 2px overcast-orange. Filter chips are `rounded-full` pills in `bg-secondary` with shelf-brown foreground; selected state shifts to castro-teal fill with white text.
68
+ - **CTA links:** hero subscribe / listen CTA is a solid overcast-orange pill with white label, wrapped in `subscribe-glow`. App Store / Play Store badges for cross-platform CTAs. Tertiary links are foreground with underline-on-hover — **never colored text-only**.
69
+
70
+ ## Recommended rich media
71
+ Podcast-warm leans on **square show artwork** as the hero asset — the same way a podcast-app library shelf does. Cover art at 1:1 aspect with generous rounding sits everywhere from a 48×48 row thumbnail to a full hero feature tile.
72
+
73
+ Lead media is **square show artwork at 1:1 aspect, minimum 1400×1400 source** (the iTunes/Apple Podcasts spec) displayed at any size. Behind a hero featured show, a subtle blurred-and-warmed copy of the artwork can sit as backdrop — but lighter and softer than the music-streaming equivalent. Host photography is appropriate as a secondary asset on show-detail pages; use **4:5 portrait** with warm color grading.
74
+
75
+ **AI tool recommendations:** for placeholder show artwork, **Midjourney** with prompts like *"square podcast cover art, [topic] aesthetic, friendly geometric illustration, warm palette, rounded shapes"* — explicitly avoid microphone or headphone clichés. **Flux** for friendly editorial illustrations of hosts or topics. **Recraft** for spot illustrations in show-notes and chapter summaries.
76
+
77
+ **Aspect ratios:** 1:1 square for show artwork (canonical, matches all podcast directories). 4:5 portrait for host photography. 16:9 for video-podcast trailers only. Never 21:9 (cinematic, wrong feel).
78
+
79
+ **Video:** video podcasts are user-initiated only, never autoplay. Embedded player uses the same warm chrome with overcast-orange play button. Trailers and clips (Snipd-style) get the purple clip-card treatment with `--snipd-purple` accent.
80
+
81
+ **Chapter art:** when episodes have per-chapter artwork, show it at 1:1 with the same `tile-soft` shadow language. Chapter progress bars use `chapter-progress` keyframe with `--overcast-orange` fill.
82
+
83
+ **Clip cards:** Snipd-style highlighted-quote cards use `--snipd-purple` border-left rule, white card body, mono timestamp, and shelf-brown quote text. Treat them as a distinct card variant — never mix with regular episode chrome.
84
+
85
+ **Performance:** show artwork thumbnails ≤30 KB AVIF at 600w; hero tiles ≤120 KB at 1400w. Blurhash placeholders during load — `tile-rise` covers the transition. LCP under 2s with hero featured tile.
86
+
87
+ **Avoid:** generic microphone/headphone stock photography (every podcast app uses this — it's the laziest possible visual), dark moody host photography (cinematic territory), gradient backgrounds (soft-modern territory), glassmorphic player chrome, AI-generated hosts with uncanny faces, lens flare, decorative SVG ornament beyond the warm rounded chrome.
88
+
89
+ **Accessibility:** show artwork always has alt-text in *"[Show name] cover art"* format. Subscribed-state toggle has `aria-pressed` reflecting state. Chapter list is a proper `<ol>` with timestamps as `<time>` elements. Play-bar bounce animation has `aria-hidden="true"`.
90
+
91
+ ## Component families
92
+ None at install time. Family conventions emerge as the project grows; the Director appends them here as they're established. Expected first families: `ShowTile`, `EpisodeCard`, `SubscribeButton`, `ChapterList`, `ClipCard`.
93
+
94
+ ## Details
95
+ - **Selection:** `hsl(var(--overcast-orange) / 0.28)` background, foreground text.
96
+ - **Focus ring:** `2px solid hsl(var(--overcast-orange))`. Matches primary play action.
97
+ - **Scrollbar:** thin.
98
+
99
+ ## Exceptions
100
+ None yet. When an intentional one-of-one violation lands, add it here with the reason. The Director's consistency pass lists all exceptions for human review.
101
+
102
+ ## Revisions
103
+ - Initial direction, generated at install time.