@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,178 @@
1
+ import type { Direction } from "../schema";
2
+
3
+ export const businessTiles: Direction = {
4
+ name: "business-tiles",
5
+ ethos:
6
+ "SAP Fiori 3 principles · Fiori tile dashboards · S/4HANA enterprise utility · 72-typeface humanism · process-friendly enterprise",
7
+ references: [
8
+ { brand: "SAP Fiori 3", trait: "tile-dashboard design language, cool-gray canvas, SAP blue accent" },
9
+ { brand: "S/4HANA", trait: "marketing register for the ERP suite — enterprise utility made approachable" },
10
+ { brand: "SAP Ariba", trait: "procurement screens, table-dense process surfaces" },
11
+ { brand: "SAP Concur", trait: "expense surfaces, friendly forms over rigid workflow" },
12
+ { brand: "SAP Build Apps", trait: "low-code tooling, tile-first information architecture" },
13
+ ],
14
+ feel:
15
+ "Enterprise productivity that doesn't feel hostile. SAP's iconic Fiori tile dashboard pattern. " +
16
+ "Soft cool-gray backgrounds, SAP-blue signal color, friendly rounded utility. Reads as 'ERP that's " +
17
+ "actually been used by humans recently.' The opposite of stuffy enterprise — process-aware but approachable.",
18
+
19
+ fonts: {
20
+ display: {
21
+ family: "Inter",
22
+ fallback: ["72", "SAP72", "system-ui", "-apple-system", "sans-serif"],
23
+ from: "Inter as open-source approximation of SAP's proprietary 72 typeface — licensed SAP customers should swap 72 in",
24
+ googleFont: "Inter:wght@400;500;600;700",
25
+ weights: [400, 500, 600, 700],
26
+ },
27
+ body: {
28
+ family: "Inter",
29
+ fallback: ["72", "SAP72", "system-ui", "-apple-system", "sans-serif"],
30
+ from: "Inter body — humanist sans, matches the 72-typeface rhythm Fiori expects",
31
+ googleFont: "Inter:wght@400;500;600",
32
+ weights: [400, 500, 600],
33
+ },
34
+ mono: {
35
+ family: "JetBrains Mono",
36
+ fallback: ["72 Mono", "SAP72 Mono", "ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
37
+ from: "JetBrains Mono — used for IDs, document numbers, posting keys, GL accounts",
38
+ googleFont: "JetBrains+Mono:wght@400;500",
39
+ weights: [400, 500],
40
+ },
41
+ },
42
+
43
+ typography: {
44
+ headingTracking: "-0.005em",
45
+ bodyTracking: "0",
46
+ fontFeatureSettings: '"tnum", "ss01"',
47
+ h1ScaleClamp: "clamp(1.5rem, 3vw, 2.25rem)",
48
+ bodyBaseSize: "0.875rem",
49
+ bodyLineHeight: "1.5",
50
+ },
51
+
52
+ colors: {
53
+ background: { hsl: "213 14% 95%", from: "Fiori cool-gray canvas — distinguishes ERP from marketing" },
54
+ foreground: { hsl: "220 35% 22%", from: "deep slate — Fiori text-primary" },
55
+ card: { hsl: "0 0% 100%", from: "Fiori tile surface — white tile on cool-gray canvas" },
56
+ popover: { hsl: "0 0% 100%", from: "Fiori menus and popovers — same tile-white" },
57
+
58
+ primary: { hsl: "218 100% 35%", from: "SAP blue — the brand mark color, Fiori interactive accent" },
59
+ primaryForeground: { hsl: "0 0% 100%", from: "white on SAP blue" },
60
+
61
+ secondary: { hsl: "213 14% 90%", from: "Fiori tertiary surface — gray a notch darker than canvas" },
62
+ secondaryForeground: { hsl: "220 35% 22%", from: "deep slate on secondary gray" },
63
+ muted: { hsl: "213 14% 90%", from: "Fiori muted — same as secondary" },
64
+ mutedForeground: { hsl: "220 12% 45%", from: "Fiori secondary text — labels, meta, table captions" },
65
+ accent: { hsl: "213 30% 92%", from: "Fiori hover surface — faint blue-tinted gray" },
66
+ accentForeground: { hsl: "220 35% 22%", from: "deep slate on hover" },
67
+
68
+ border: { hsl: "213 14% 86%", from: "Fiori tile border — visible structural hairline" },
69
+ input: { hsl: "213 14% 78%", from: "Fiori input border — a shade darker than tile border for affordance" },
70
+ ring: { hsl: "218 100% 35%", from: "SAP blue — focus ring on active states" },
71
+
72
+ destructive: { hsl: "354 75% 45%", from: "Fiori semantic error red — destructive actions and error states" },
73
+ destructiveForeground: { hsl: "0 0% 100%", from: "white on error red" },
74
+
75
+ brand: {
76
+ "tile-bg": { hsl: "0 0% 100%", from: "Fiori tile surface — white tile on the cool-gray canvas" },
77
+ "tile-border": { hsl: "213 14% 86%", from: "Fiori tile hairline border — structural, visible at dashboard density" },
78
+ "info-blue": { hsl: "200 100% 42%", from: "Fiori info blue — informational chips and links" },
79
+ "accent-orange": { hsl: "28 100% 50%", from: "Fiori warning orange — process attention, in-progress workflows" },
80
+ "success-green": { hsl: "140 50% 40%", from: "Fiori success green — positive semantic state" },
81
+ "sap-blue": { hsl: "218 100% 35%", from: "SAP brand blue — alias for primary" },
82
+ },
83
+ },
84
+
85
+ spacing: {
86
+ base: 4,
87
+ scale: [2, 4, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 64],
88
+ containerMax: "max-w-screen-2xl",
89
+ containerPadding: "px-4 lg:px-6",
90
+ sectionPadding: {
91
+ hero: "pt-10 pb-8 lg:pt-14 lg:pb-10",
92
+ default: "py-8 lg:py-12",
93
+ tight: "py-4 lg:py-6",
94
+ },
95
+ },
96
+
97
+ radius: {
98
+ base: "0.25rem",
99
+ pillsAllowed: true,
100
+ },
101
+
102
+ shadows: {
103
+ style: "soft",
104
+ utilities: {
105
+ "shadow-tile":
106
+ "0 1px 2px hsl(220 35% 22% / 0.06), 0 1px 1px hsl(220 35% 22% / 0.04)",
107
+ "shadow-tile-hover":
108
+ "0 4px 8px hsl(220 35% 22% / 0.08), 0 2px 4px hsl(220 35% 22% / 0.05)",
109
+ "shadow-tile-focus":
110
+ "0 0 0 2px hsl(var(--primary) / 0.4)",
111
+ },
112
+ },
113
+
114
+ motion: {
115
+ easing: "cubic-bezier(0.22, 1, 0.36, 1)",
116
+ durations: {
117
+ reveal: 200,
118
+ loop: 1200,
119
+ ambient: 0,
120
+ },
121
+ keyframes: {
122
+ "fade-in": {
123
+ css:
124
+ "from { opacity: 0; }\n" +
125
+ "to { opacity: 1; }",
126
+ defaultDuration: 200,
127
+ iteration: "once",
128
+ purpose: "200ms entry fade — tiles, popovers, menus, dialog content",
129
+ },
130
+ "tile-lift": {
131
+ css:
132
+ "from { transform: translateY(2px); opacity: 0.85; }\n" +
133
+ "to { transform: translateY(0); opacity: 1; }",
134
+ defaultDuration: 200,
135
+ iteration: "once",
136
+ purpose: "Fiori tile hover/load — small lift, business-paced, not theatrical",
137
+ },
138
+ "fade-out": {
139
+ css:
140
+ "from { opacity: 1; }\n" +
141
+ "to { opacity: 0; }",
142
+ defaultDuration: 150,
143
+ iteration: "once",
144
+ purpose: "150ms exit fade — popovers, menus, dismissed dialogs",
145
+ },
146
+ },
147
+ respectsReducedMotion: true,
148
+ },
149
+
150
+ density: "high",
151
+
152
+ patterns: {
153
+ button:
154
+ "Primary = solid SAP blue, white text, 4px radius, weight 600 (bg-primary text-primary-foreground rounded-sm font-semibold). " +
155
+ "Secondary = ghost with foreground text and 1px input border (bg-transparent border). " +
156
+ "Emphasized = filled SAP blue with subtle gradient (bg-gradient-to-b from-primary to-[hsl(218_100%_30%)]). " +
157
+ "Sizes: small (h-7 px-2.5 text-xs) and default (h-8 px-3 text-sm).",
158
+ card:
159
+ "Fiori tile: rounded-sm (4px), bg-tile-bg (white), 1px tile-border, shadow-tile drop. " +
160
+ "Tight padding (p-4 lg:p-5). Tile header row uses bottom hairline. " +
161
+ "Hover lifts to shadow-tile-hover; focus uses shadow-tile-focus ring.",
162
+ input:
163
+ "Compact (h-8 text-sm), 1px input border, bg-tile-bg, rounded-sm. " +
164
+ "Focus uses 2px SAP-blue ring. Label above, helper below in mutedForeground. " +
165
+ "Inline validation in destructive red; warning orange for in-progress process state.",
166
+ cta:
167
+ "Primary action is the SAP-blue button. Secondary = ghost. Emphasized variant reserved for the " +
168
+ "single most important action on a process screen (Submit, Post, Approve). " +
169
+ "Marketing-style double-CTAs do not exist in this language — ERP screens have one verb.",
170
+ },
171
+
172
+ details: {
173
+ selectionBg: "hsl(var(--primary) / 0.2)",
174
+ selectionFg: "hsl(var(--foreground))",
175
+ focusRing: "2px solid hsl(var(--ring))",
176
+ scrollbarStyle: "auto",
177
+ },
178
+ };
@@ -0,0 +1,158 @@
1
+ # Cabana Poster
2
+
3
+ > Vintage travel-poster register applied to a warm lifestyle brand — cream canvas at
4
+
5
+ **Slug:** `cabana-poster` — **Surface:** web — **Density:** balanced
6
+
7
+ ## Influence
8
+
9
+ Vintage 1960s-70s travel-poster typography (Windsor / Cooper Black
10
+ outlined display treatments used on airline posters, Miami / Palm
11
+ Springs / Tulum lifestyle brands), independent Australian and
12
+ inner-north creative spaces at their most confident, and modern
13
+ hospitality-forward coworking / clubhouse brands that reject the
14
+ Silicon Valley aesthetic in favour of a warmer, cheekier, more
15
+ place-specific register. Distinct from other Family C bases through
16
+ the WARM CREAM canvas + OUTLINED YELLOW DISPLAY WORDMARK + STICKY
17
+ NOTE testimonial cards + HANDWRITTEN SCRIPT signature moments —
18
+ none of which the other Family C bases carry.
19
+
20
+
21
+ ## Signature move
22
+
23
+ Warm cream canvas at #eedfca — the register's non-negotiable base
24
+ (deliberately NOT #F4F1EA, which is the Claude-cream AI-tell). Every
25
+ card, button, input, tile, photo-frame, and sticky note ships at 0px
26
+ border radius — sharp edges are the second non-negotiable move. The
27
+ hero is a FULL-BLEED photograph of the actual physical space or an
28
+ atmospheric outdoor scene (palm trees, beach, warm-lit street) under
29
+ directional light. Over that photo sits the WORDMARK in the Windsor
30
+ display face — YELLOW FILL (#ffd200) + ESPRESSO-BROWN STROKE OUTLINE
31
+ at ~10-14px stroke width, at ~200px scale, mixed case (never
32
+ uppercase). Directly beneath the wordmark: a small custom SVG
33
+ LINE-ILLUSTRATION of the actual physical space (storefront /
34
+ building / entrance) drawn in cream on cream, ~180px wide. Below
35
+ that: a small DIEGETIC ADDRESS PLATE in 11px mono-caps 0.16em
36
+ ("FACTORY 2 / 10-12 EXAMPLE RD / SUBURB VIC 3057").
37
+ Below the hero: a horizontal MARQUEE TICKER in an orange band —
38
+ "Follow us @PORT_CABANA · 247 ACCESS · 1800-EXAMPLE · HOT DESKS
39
+ AVAILABLE · SUPER FAST" scrolling at 24s per loop. Below the
40
+ marquee: an INTRO COPY SPLIT — LEFT: big Windsor headline "Your
41
+ cheeky inner-north coworking oasis." at 64px. RIGHT: two-column
42
+ Pitch Sans body copy with a small handwritten-italic subline.
43
+ Next: a PHOTO GALLERY BAND — 3 photos at varied sizes, ONE of them
44
+ framed with a bright YELLOW ARCH-SHAPE SVG FRAME (the arch being a
45
+ key vintage-poster device). A bespoke SVG smiley mark drops in the
46
+ gutter as PUNCTUATION. Next: a big "EXPERIENCE THE ULTIMATE
47
+ COWORKING LIFESTYLE" headline in Windsor with a HANDWRITTEN SCRIPT
48
+ "As Seen on TV!" callout in seafoam (Caveat) beneath. A 3-TAB
49
+ WIDGET (Hot Desking / Permanent Desk / Private Studio) crossfades
50
+ its body card + big photo panel per tab. Below: TESTIMONIALS AS
51
+ POST-IT NOTES — 2-3 sticky-note-aesthetic cards (yellow, orange,
52
+ lime rectangles at ~360x240px, sharp corners, subtle static
53
+ rotation of -2deg / 0deg / +3deg, typewriter-style body copy).
54
+ Finally, a "COME SAY HI" callout section: a dark deep-forest
55
+ photo-band (garage-door / studio-entrance photograph) with a CREAM
56
+ CARD OVERLAY in the center reading "Come Say Hi" (Windsor 48px),
57
+ "Seeing is believing, baby" (script 24px), a two-line body block,
58
+ and a DEEP-FOREST OUTLINED BUTTON reading "Arrange a visit."
59
+ Footer at the bottom: acknowledgement paragraph on the left, giant
60
+ outlined wordmark + small building illustration in the middle,
61
+ utility links (Home / Join / About / The Space / Our Members /
62
+ Contact) top-left column. Brand character sits in the outlined
63
+ yellow wordmark, the full-bleed photography, the multi-color
64
+ scattered accents used SPARINGLY, and the handwritten-script
65
+ signature moments — not in decoration, not in polish, not in
66
+ uniform grids.
67
+
68
+ ## Palette
69
+
70
+ - **bg:** `#eedfca`
71
+ - **surface:** `#ffffff`
72
+ - **ink:** `#352207`
73
+ - **accent:** `#ffd200`
74
+ - **secondary:** `#f38211`
75
+
76
+ ## Typography
77
+
78
+ - **Display:** Windsor (reference proprietary face — warm 1905 chunky-serif with friendly proportions and a slightly quirky character). Free fallback stack — "Rozha One", "DM Serif Display", "Playfair Display", Georgia, serif. Weight 700, mixed case (NEVER uppercase — Windsor loses its character under textTransform:uppercase like Shrikhand does). Top of scale ~64px hero wordmark, 48px section headline, 32px subhead, 24px h3. The wordmark ships with YELLOW FILL + ESPRESSO BROWN OUTLINE STROKE — that's the vintage travel-poster signature. Every other display use is a solid espresso-brown fill.
79
+ - **Body:** Pitch Sans (reference — Klim's Pitch Sans, a modern geometric sans). Free fallback stack — "Space Grotesk", "DM Sans", Inter, system-ui, sans-serif. Weight 500-600, mixed case, 15-16px body copy, line-height 1.55. Small labels get 12px 600-weight sentence case.
80
+ - **Mono:** none. Cabana Poster is a warm consumer lifestyle surface. Mono has no role.
81
+ - **Scale:** 1.333 (perfect fourth — comfortable poster-scale contrast without collapsing into monumental hero-only)
82
+
83
+ ## Motion
84
+
85
+ Ships live in the section renderer (no external dependencies):
86
+ 1. Marquee ticker — the orange utility-label bar scrolls horizontally at 24s per loop, continuously (pauses on hover). Per reference — spec allows.
87
+ 2. Photo-gallery hover — each gallery photo scales(1.02) + shifts +/-2px vertically on hover, 240ms cubic-bezier(0.19,1,0.22,1). Reads as "picking up a print" tactile response.
88
+ 3. Tab-widget crossfade — Hot Desking / Permanent Desk / Private Studio tabs crossfade their body-card + photo-panel content over 300ms on click. No slide, no scale — just opacity.
89
+ 4. Post-it note stagger — testimonial post-it notes fade in with 120ms stagger + 500ms cubic-bezier on IntersectionObserver visibility. Each note also has a subtle static rotation (-2deg, 0deg, +3deg) so they look casually pinned.
90
+ 5. Come-Say-Hi callout reveal — the cream card overlay on the dark deep-forest photo band fades in from opacity 0 with a subtle scale(0.98 → 1) over 600ms on IntersectionObserver visibility.
91
+ 6. Handwritten script gentle sway — the "As Seen on TV!" and "Come Say Hi" script snippets rotate 1deg back-and-forth on a 4s loop, subtle enough to feel alive but not distracting.
92
+ 7. Wordmark reveal — the outlined display wordmark fades in with subtle scale(0.96 → 1) over 800ms on first paint. No letter-stagger.
93
+ 8. prefers-reduced-motion: reduce — marquee paused; hover disabled; post-it stagger disabled (all show at once); script sway paused; wordmark shows at final scale immediately. State changes still fire (tab switching still crossfades opacity).
94
+
95
+ Customer installs these as dependencies for the deeper motion tier:
96
+ - Lenis — smooth inertial scroll (page benefits from inertial cadence between the photo bands).
97
+ - GSAP DrawSVG for the outlined display wordmark drawing letter-by-letter over the beach photo hero.
98
+ - Real Vimeo/Cloudinary video player for the "AS SEEN ON TV!" video-thumbnail if the customer has a real reel.
99
+
100
+ Motion character: warm, playful, tactile, slightly retro. Custom cubic-bezier(0.19,1,0.22,1) for reveals. The register lives between vintage travel-poster print and modern hospitality-forward web — motion should feel like paper being handled, not like a SaaS product tour.
101
+
102
+
103
+ ## Imagery
104
+
105
+ FULL-BLEED photography of the actual physical space, natural
106
+ outdoor scenes (palm trees, beach, warm-lit streets), or lifestyle
107
+ moments (people working, hanging out, using the space). The
108
+ reference uses atmospheric beach/palm-tree photography for the hero
109
+ and interior-photography for the gallery. FPO imagery here should
110
+ read as directional-light photography with warm-forward color
111
+ grading — never generic stock, never gradient blobs, never radial
112
+ glow fallbacks. One gallery photo gets a BRIGHT YELLOW ARCH-SHAPE
113
+ SVG frame as a signature poster device. The rest of the gallery
114
+ photos sit plain on the cream canvas with no frame. NO stock
115
+ workplace photography (the "diverse laptops at a coffee shop" tell).
116
+ NO warm-radial gradients as image fallbacks. NO drop-shadow-md on
117
+ photo cards. Bespoke SVG marks (smiley, palm, sun, arrow, hand,
118
+ building-line, phone, calendar, weather glyph) are dropped as
119
+ PUNCTUATION at specific compositional moments — never as a uniform
120
+ icon row.
121
+
122
+ ## Best for
123
+
124
+ - Coworking spaces and creative clubhouses with a distinct place-specific character
125
+ - Warm lifestyle brands (hospitality, boutique retail, hair salons, cafes) with a cheek-forward voice
126
+ - Independent creative studios with a hospitality-forward register
127
+ - Boutique wellness spaces (yoga, pilates, sauna, cold-plunge) leaning warm-vintage
128
+ - Small hotels + bed-and-breakfasts + eco-retreats + surf houses + rural stays
129
+ - Culture-forward brands (bookstores, record shops, print studios) with a warm-vintage character
130
+
131
+ ## Reject if
132
+
133
+ _Director grades each of the following as a pass/fail check. Any violation blocks the theme._
134
+
135
+ - Dark canvas (near-black / true-black / any dark gray) as the primary background — canvas IS warm cream at #eedfca. Swapping to a dark canvas collapses this into generic-atmospheric slop and kills the vintage-poster register.
136
+ - Pure white (#FFFFFF) or #F4F1EA claude-cream as the canvas — #eedfca is measured and deliberately WARMER than the AI-tell claude-cream. Swapping to F4F1EA is the biggest signal the theme has been washed out toward AI-default warmth.
137
+ - Sans-serif display type — the display face MUST be a warm chunky serif (Windsor reference; Rozha One / DM Serif Display / Playfair Display fallback). Inter Display / Anton / DM Sans have the wrong register.
138
+ - Rounded corners on cards, buttons, inputs, photo frames, or sticky notes — 0px radius everywhere. The one arch-shape frame is bespoke SVG, not a border-radius.
139
+ - Corporate polish — no drop-shadow-md, no soft-glow, no gradient backdrop, no glassmorphism. Photo panels sit flat on the canvas; sticky notes have zero shadow (they're vintage-poster sticky notes, not skeuomorphic ones).
140
+ - Multi-color accent flooding — the accents (yellow, lime, orange, pink, seafoam) appear SPARINGLY as punctuation. Never floods a whole section background in any accent color; the cream canvas is the primary.
141
+ - Uniform 3-column feature grids — the photo gallery band alternates size, orientation, and frame treatment. Not a template.
142
+ - Handwritten script for body copy or eyebrow labels — the script (Caveat / Homemade Apple) is used ONLY for a small vocabulary of signature moments ('As Seen on TV!', 'Come Say Hi', 'Seeing is believing, baby'). Never for body copy or eyebrow slop.
143
+ - Uniform icon row of bespoke SVG marks — the 13 SVG marks in the reference are dropped as PUNCTUATION at specific compositional moments. Never as a uniform 3-across or 4-across icon-and-caption grid.
144
+ - Stock diverse-workplace photography (laptops around a table, hands-typing, smiling-team-portrait) — imagery MUST feel place-specific + directional-light + warm-forward. Interior-of-the-actual-space or atmospheric-outdoor, not stock.
145
+ - Emoji or decorative unicode marks — bespoke SVG carries all the ornamentation.
146
+
147
+ ## Banned defaults (inherited + theme-specific)
148
+
149
+ - claude-cream (#F4F1EA + serif + #D97757) — this theme's canvas is DELIBERATELY #eedfca (warmer than claude-cream) to refuse the AI-tell. Swapping to F4F1EA is the tell.
150
+ - void+acid (near-black bg + single bright acid-green or vermilion accent)
151
+ - broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)
152
+ - tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)
153
+ - uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)
154
+ - sans-display-anywhere (this theme's whole point is the warm Windsor chunky-serif wordmark. A sans-serif display used anywhere — hero, section headline, wordmark — immediately collapses the vintage-poster register.)
155
+ - white-canvas-flood (canvas is #eedfca warm cream, not white. White is a raised-panel surface color for the hot-desk card and gallery photo frames only. Making white the whole page background collapses the theme into generic-lifestyle slop.)
156
+ - rounded-sticky-notes (post-it note testimonial cards are SHARP-CORNERED. Real vintage post-its had square edges. Rounded corners on the sticky notes is the skeuomorphic-mimic tell.)
157
+ - multi-accent-flood (yellow + lime + orange + pink + seafoam are PUNCTUATION accents. Flooding an entire section background in any accent color collapses the theme into candy-slop.)
158
+ - uniform-photo-grid (photo gallery alternates size, orientation, and frame treatment. Uniform 3-across or 4-across photo grids are the AI-default lifestyle-site tell.)
@@ -0,0 +1 @@
1
+ {"slug":"cabana-poster","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-04T22:52:40.651Z","dismissed":[]},{"gate":"regression-scan","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-04T22:52:40.662Z","dismissed":[]},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-04T22:53:19.505Z","dismissed":[]},{"gate":"anchor-compare","verdict":{"passed":true,"failures":[],"skipped":"Family C rubric.md missing at /Users/mattfrischer/Taste/site/design-system/golden-set/C/rubric.md — anchor-compare skipped."},"ran_at":"2026-07-04T22:53:19.507Z","dismissed":[]}],"overall":"PASS","ran_at":"2026-07-04T22:52:40.651Z"}
@@ -0,0 +1,16 @@
1
+ // Generated from theme.yml. Merge into your tailwind.config.ts under theme.extend.
2
+ // slug: cabana-poster
3
+ export const cabanaPosterTailwindExtend = {
4
+ colors: {
5
+ bg: "#eedfca",
6
+ surface: "#ffffff",
7
+ ink: "#352207",
8
+ accent: "#ffd200",
9
+ secondary: "#f38211",
10
+ },
11
+ fontFamily: {
12
+ display: ["Windsor (reference proprietary face — warm 1905 chunky-serif with friendly proportions and a slightly quirky character). Free fallback stack — \"Rozha One\", \"DM Serif Display\", \"Playfair Display\", Georgia, serif. Weight 700, mixed case (NEVER uppercase — Windsor loses its character under textTransform:uppercase like Shrikhand does). Top of scale ~64px hero wordmark, 48px section headline, 32px subhead, 24px h3. The wordmark ships with YELLOW FILL + ESPRESSO BROWN OUTLINE STROKE — that's the vintage travel-poster signature. Every other display use is a solid espresso-brown fill."],
13
+ body: ["Pitch Sans (reference — Klim's Pitch Sans, a modern geometric sans). Free fallback stack — \"Space Grotesk\", \"DM Sans\", Inter, system-ui, sans-serif. Weight 500-600, mixed case, 15-16px body copy, line-height 1.55. Small labels get 12px 600-weight sentence case."],
14
+ mono: ["none. Cabana Poster is a warm consumer lifestyle surface. Mono has no role."],
15
+ },
16
+ };
@@ -0,0 +1,221 @@
1
+ # Cabana Poster — Family C, Editorial & Print.
2
+ #
3
+ # Vintage travel-poster register applied to a warm lifestyle brand.
4
+ # Cream canvas (#eedfca — measured, deliberately NOT #F4F1EA to refuse
5
+ # the AI-tell), espresso-brown ink (#352207 — never black), a bright
6
+ # yellow-fill + brown-outlined Windsor-style display wordmark, and a
7
+ # scattered palette of candy accents (yellow, electric lime, burnt
8
+ # orange, bubblegum pink, seafoam) used sparingly as punctuation.
9
+ #
10
+ # Sharp corners everywhere (0px radius on every card, button, input,
11
+ # tile, sticky note). Full-bleed photography under directional light.
12
+ # Handwritten script for a small vocabulary of signature moments only —
13
+ # "As Seen on TV!", "Come Say Hi", "Seeing is believing, baby" — never
14
+ # for body copy or eyebrow labels.
15
+ #
16
+ # Authored from Matt's provided design brief (2026-07-04,
17
+ # coparadiso.com reference — a real cheeky inner-north coworking
18
+ # space in Melbourne). Placeholder brand: "PORT CABANA" — a fictional
19
+ # coworking / lifestyle imprint. Original name, original copy, no
20
+ # reproductions of any reference. The register expresses "warm-vintage
21
+ # cheek" through the outlined display wordmark + full-bleed
22
+ # photography + sticky-note testimonial cards + handwritten script
23
+ # signatures + a sparse but insistent multi-color accent palette.
24
+ #
25
+ # Thirteenth theme via the v2 harness. Fifth Family C theme (after
26
+ # ember-poster + case-panel + marker-mag + pill-editorial). Eighth
27
+ # NEW BASE.
28
+ #
29
+ # Alternative slugs considered — postcard-holiday (evocative but drops
30
+ # the cabana-lounge register), paradise-poster (too source-adjacent),
31
+ # beach-brief (too literal), holiday-brief (imprecise), tropi-print
32
+ # (jargony), lounge-cream (drops the poster typography anchor). Cabana
33
+ # Poster picked because "cabana" nails the warm-tropical-lounge
34
+ # register and "poster" carries the vintage travel-poster typographic
35
+ # signature. Both words are common-noun and aesthetic — no
36
+ # right-of-publicity or trademark exposure.
37
+
38
+ name: Cabana Poster
39
+ concept: Vintage travel-poster register applied to a warm lifestyle brand — cream canvas at #eedfca (never white) with an outlined bright-yellow display wordmark, espresso-brown ink, full-bleed directional-light photography, sticky-note testimonial cards, and a small vocabulary of handwritten-script signature moments. Multi-color candy accents (golden yellow, electric lime, burnt orange, bubblegum pink, seafoam) used sparingly as punctuation, never flooded.
40
+ influence: |
41
+ Vintage 1960s-70s travel-poster typography (Windsor / Cooper Black
42
+ outlined display treatments used on airline posters, Miami / Palm
43
+ Springs / Tulum lifestyle brands), independent Australian and
44
+ inner-north creative spaces at their most confident, and modern
45
+ hospitality-forward coworking / clubhouse brands that reject the
46
+ Silicon Valley aesthetic in favour of a warmer, cheekier, more
47
+ place-specific register. Distinct from other Family C bases through
48
+ the WARM CREAM canvas + OUTLINED YELLOW DISPLAY WORDMARK + STICKY
49
+ NOTE testimonial cards + HANDWRITTEN SCRIPT signature moments —
50
+ none of which the other Family C bases carry.
51
+
52
+ family: C
53
+ base_number: 28
54
+ base_note: |
55
+ New-base candidate in Family C, warm-vintage-lifestyle subregion.
56
+ Distinct from other Family C bases through the OUTLINED DISPLAY
57
+ WORDMARK (yellow fill + espresso stroke — the register's typographic
58
+ fingerprint) and the multi-color candy-accent palette. Ember Poster
59
+ is warm-DARK editorial serif; Cabana Poster is warm-LIGHT vintage
60
+ travel-poster. Case Panel is agency portfolio bento. Marker Mag is
61
+ student-DIY marker chaos. Pill Editorial is 999px cultural editorial.
62
+ Cabana Poster fills the WARM-LIGHT-VINTAGE-LIFESTYLE slot the family
63
+ has been missing.
64
+
65
+ render_url: http://localhost:5173/themes/cabana-poster
66
+
67
+ surface: web
68
+
69
+ typography:
70
+ display: Windsor (reference proprietary face — warm 1905 chunky-serif with friendly proportions and a slightly quirky character). Free fallback stack — "Rozha One", "DM Serif Display", "Playfair Display", Georgia, serif. Weight 700, mixed case (NEVER uppercase — Windsor loses its character under textTransform:uppercase like Shrikhand does). Top of scale ~64px hero wordmark, 48px section headline, 32px subhead, 24px h3. The wordmark ships with YELLOW FILL + ESPRESSO BROWN OUTLINE STROKE — that's the vintage travel-poster signature. Every other display use is a solid espresso-brown fill.
71
+ body: Pitch Sans (reference — Klim's Pitch Sans, a modern geometric sans). Free fallback stack — "Space Grotesk", "DM Sans", Inter, system-ui, sans-serif. Weight 500-600, mixed case, 15-16px body copy, line-height 1.55. Small labels get 12px 600-weight sentence case.
72
+ script: |
73
+ Caveat, Homemade Apple, Kalam, cursive — used SPARINGLY for a small
74
+ vocabulary of handwritten-script signature moments only (As Seen on
75
+ TV!, Come Say Hi, Seeing is believing, baby). Weight 700, mixed
76
+ case, ~24-32px. NEVER used for body copy or eyebrow labels — a
77
+ handwritten register cannot scale to body copy without becoming twee.
78
+ mono: none. Cabana Poster is a warm consumer lifestyle surface. Mono has no role.
79
+ scale: 1.333 (perfect fourth — comfortable poster-scale contrast without collapsing into monumental hero-only)
80
+ eyebrow_exception: |
81
+ The universal slop-blocklist bans mono-caps eyebrows as a general
82
+ defensive rule. Cabana Poster LEGITIMATELY uses a small vocabulary
83
+ of uppercase 0.16em-tracked 11px labels as DIEGETIC ADDRESS PLATE
84
+ labels ("FACTORY 2 / 10-12 EXAMPLE RD / SUBURB VIC 3057") and
85
+ marquee-ticker utility labels ("247 ACCESS · 1800-EXAMPLE · HOT
86
+ DESKS AVAILABLE") because the reference site uses them EXACTLY
87
+ in this register — they read as vintage-signage plates, not
88
+ marketing eyebrows. This is a THEME-SPECIFIC EXCEPTION that must
89
+ be manually preserved during harness grading.
90
+
91
+ palette:
92
+ bg: "#eedfca" # canvas — warm cream, measured
93
+ surface: "#ffffff" # raised white panel — used for hot-desk card + photo gallery frames
94
+ ink: "#352207" # espresso brown — primary text (NEVER black)
95
+ accent: "#ffd200" # golden yellow — the display outline fill + primary button
96
+ secondary: "#f38211" # burnt orange — marquee bar + secondary highlights
97
+ cream: "#eedfca" # alias for bg
98
+ darkInk: "#163e35" # deep forest — inverted photo-band overlay + arrange-a-visit button
99
+ mute: "#8c6f47" # dimmed espresso — small labels + captions
100
+ lime: "#c1fc50" # electric lime — post-it sticky note variant
101
+ pink: "#f775a5" # bubblegum pink — post-it sticky note variant
102
+ seafoam: "#3ec2b4" # seafoam — accent moments (never floods)
103
+
104
+ density: balanced
105
+
106
+ motion: |
107
+ Ships live in the section renderer (no external dependencies):
108
+ 1. Marquee ticker — the orange utility-label bar scrolls horizontally at 24s per loop, continuously (pauses on hover). Per reference — spec allows.
109
+ 2. Photo-gallery hover — each gallery photo scales(1.02) + shifts +/-2px vertically on hover, 240ms cubic-bezier(0.19,1,0.22,1). Reads as "picking up a print" tactile response.
110
+ 3. Tab-widget crossfade — Hot Desking / Permanent Desk / Private Studio tabs crossfade their body-card + photo-panel content over 300ms on click. No slide, no scale — just opacity.
111
+ 4. Post-it note stagger — testimonial post-it notes fade in with 120ms stagger + 500ms cubic-bezier on IntersectionObserver visibility. Each note also has a subtle static rotation (-2deg, 0deg, +3deg) so they look casually pinned.
112
+ 5. Come-Say-Hi callout reveal — the cream card overlay on the dark deep-forest photo band fades in from opacity 0 with a subtle scale(0.98 → 1) over 600ms on IntersectionObserver visibility.
113
+ 6. Handwritten script gentle sway — the "As Seen on TV!" and "Come Say Hi" script snippets rotate 1deg back-and-forth on a 4s loop, subtle enough to feel alive but not distracting.
114
+ 7. Wordmark reveal — the outlined display wordmark fades in with subtle scale(0.96 → 1) over 800ms on first paint. No letter-stagger.
115
+ 8. prefers-reduced-motion: reduce — marquee paused; hover disabled; post-it stagger disabled (all show at once); script sway paused; wordmark shows at final scale immediately. State changes still fire (tab switching still crossfades opacity).
116
+
117
+ Customer installs these as dependencies for the deeper motion tier:
118
+ - Lenis — smooth inertial scroll (page benefits from inertial cadence between the photo bands).
119
+ - GSAP DrawSVG for the outlined display wordmark drawing letter-by-letter over the beach photo hero.
120
+ - Real Vimeo/Cloudinary video player for the "AS SEEN ON TV!" video-thumbnail if the customer has a real reel.
121
+
122
+ Motion character: warm, playful, tactile, slightly retro. Custom cubic-bezier(0.19,1,0.22,1) for reveals. The register lives between vintage travel-poster print and modern hospitality-forward web — motion should feel like paper being handled, not like a SaaS product tour.
123
+
124
+ signature: |
125
+ Warm cream canvas at #eedfca — the register's non-negotiable base
126
+ (deliberately NOT #F4F1EA, which is the Claude-cream AI-tell). Every
127
+ card, button, input, tile, photo-frame, and sticky note ships at 0px
128
+ border radius — sharp edges are the second non-negotiable move. The
129
+ hero is a FULL-BLEED photograph of the actual physical space or an
130
+ atmospheric outdoor scene (palm trees, beach, warm-lit street) under
131
+ directional light. Over that photo sits the WORDMARK in the Windsor
132
+ display face — YELLOW FILL (#ffd200) + ESPRESSO-BROWN STROKE OUTLINE
133
+ at ~10-14px stroke width, at ~200px scale, mixed case (never
134
+ uppercase). Directly beneath the wordmark: a small custom SVG
135
+ LINE-ILLUSTRATION of the actual physical space (storefront /
136
+ building / entrance) drawn in cream on cream, ~180px wide. Below
137
+ that: a small DIEGETIC ADDRESS PLATE in 11px mono-caps 0.16em
138
+ ("FACTORY 2 / 10-12 EXAMPLE RD / SUBURB VIC 3057").
139
+ Below the hero: a horizontal MARQUEE TICKER in an orange band —
140
+ "Follow us @PORT_CABANA · 247 ACCESS · 1800-EXAMPLE · HOT DESKS
141
+ AVAILABLE · SUPER FAST" scrolling at 24s per loop. Below the
142
+ marquee: an INTRO COPY SPLIT — LEFT: big Windsor headline "Your
143
+ cheeky inner-north coworking oasis." at 64px. RIGHT: two-column
144
+ Pitch Sans body copy with a small handwritten-italic subline.
145
+ Next: a PHOTO GALLERY BAND — 3 photos at varied sizes, ONE of them
146
+ framed with a bright YELLOW ARCH-SHAPE SVG FRAME (the arch being a
147
+ key vintage-poster device). A bespoke SVG smiley mark drops in the
148
+ gutter as PUNCTUATION. Next: a big "EXPERIENCE THE ULTIMATE
149
+ COWORKING LIFESTYLE" headline in Windsor with a HANDWRITTEN SCRIPT
150
+ "As Seen on TV!" callout in seafoam (Caveat) beneath. A 3-TAB
151
+ WIDGET (Hot Desking / Permanent Desk / Private Studio) crossfades
152
+ its body card + big photo panel per tab. Below: TESTIMONIALS AS
153
+ POST-IT NOTES — 2-3 sticky-note-aesthetic cards (yellow, orange,
154
+ lime rectangles at ~360x240px, sharp corners, subtle static
155
+ rotation of -2deg / 0deg / +3deg, typewriter-style body copy).
156
+ Finally, a "COME SAY HI" callout section: a dark deep-forest
157
+ photo-band (garage-door / studio-entrance photograph) with a CREAM
158
+ CARD OVERLAY in the center reading "Come Say Hi" (Windsor 48px),
159
+ "Seeing is believing, baby" (script 24px), a two-line body block,
160
+ and a DEEP-FOREST OUTLINED BUTTON reading "Arrange a visit."
161
+ Footer at the bottom: acknowledgement paragraph on the left, giant
162
+ outlined wordmark + small building illustration in the middle,
163
+ utility links (Home / Join / About / The Space / Our Members /
164
+ Contact) top-left column. Brand character sits in the outlined
165
+ yellow wordmark, the full-bleed photography, the multi-color
166
+ scattered accents used SPARINGLY, and the handwritten-script
167
+ signature moments — not in decoration, not in polish, not in
168
+ uniform grids.
169
+
170
+ imagery: |
171
+ FULL-BLEED photography of the actual physical space, natural
172
+ outdoor scenes (palm trees, beach, warm-lit streets), or lifestyle
173
+ moments (people working, hanging out, using the space). The
174
+ reference uses atmospheric beach/palm-tree photography for the hero
175
+ and interior-photography for the gallery. FPO imagery here should
176
+ read as directional-light photography with warm-forward color
177
+ grading — never generic stock, never gradient blobs, never radial
178
+ glow fallbacks. One gallery photo gets a BRIGHT YELLOW ARCH-SHAPE
179
+ SVG frame as a signature poster device. The rest of the gallery
180
+ photos sit plain on the cream canvas with no frame. NO stock
181
+ workplace photography (the "diverse laptops at a coffee shop" tell).
182
+ NO warm-radial gradients as image fallbacks. NO drop-shadow-md on
183
+ photo cards. Bespoke SVG marks (smiley, palm, sun, arrow, hand,
184
+ building-line, phone, calendar, weather glyph) are dropped as
185
+ PUNCTUATION at specific compositional moments — never as a uniform
186
+ icon row.
187
+
188
+ best_for:
189
+ - Coworking spaces and creative clubhouses with a distinct place-specific character
190
+ - Warm lifestyle brands (hospitality, boutique retail, hair salons, cafes) with a cheek-forward voice
191
+ - Independent creative studios with a hospitality-forward register
192
+ - Boutique wellness spaces (yoga, pilates, sauna, cold-plunge) leaning warm-vintage
193
+ - Small hotels + bed-and-breakfasts + eco-retreats + surf houses + rural stays
194
+ - Culture-forward brands (bookstores, record shops, print studios) with a warm-vintage character
195
+
196
+ avoid:
197
+ - "Dark canvas (near-black / true-black / any dark gray) as the primary background — canvas IS warm cream at #eedfca. Swapping to a dark canvas collapses this into generic-atmospheric slop and kills the vintage-poster register."
198
+ - "Pure white (#FFFFFF) or #F4F1EA claude-cream as the canvas — #eedfca is measured and deliberately WARMER than the AI-tell claude-cream. Swapping to F4F1EA is the biggest signal the theme has been washed out toward AI-default warmth."
199
+ - "Sans-serif display type — the display face MUST be a warm chunky serif (Windsor reference; Rozha One / DM Serif Display / Playfair Display fallback). Inter Display / Anton / DM Sans have the wrong register."
200
+ - "Rounded corners on cards, buttons, inputs, photo frames, or sticky notes — 0px radius everywhere. The one arch-shape frame is bespoke SVG, not a border-radius."
201
+ - "Corporate polish — no drop-shadow-md, no soft-glow, no gradient backdrop, no glassmorphism. Photo panels sit flat on the canvas; sticky notes have zero shadow (they're vintage-poster sticky notes, not skeuomorphic ones)."
202
+ - "Multi-color accent flooding — the accents (yellow, lime, orange, pink, seafoam) appear SPARINGLY as punctuation. Never floods a whole section background in any accent color; the cream canvas is the primary."
203
+ - "Uniform 3-column feature grids — the photo gallery band alternates size, orientation, and frame treatment. Not a template."
204
+ - "Handwritten script for body copy or eyebrow labels — the script (Caveat / Homemade Apple) is used ONLY for a small vocabulary of signature moments ('As Seen on TV!', 'Come Say Hi', 'Seeing is believing, baby'). Never for body copy or eyebrow slop."
205
+ - "Uniform icon row of bespoke SVG marks — the 13 SVG marks in the reference are dropped as PUNCTUATION at specific compositional moments. Never as a uniform 3-across or 4-across icon-and-caption grid."
206
+ - "Stock diverse-workplace photography (laptops around a table, hands-typing, smiling-team-portrait) — imagery MUST feel place-specific + directional-light + warm-forward. Interior-of-the-actual-space or atmospheric-outdoor, not stock."
207
+ - "Emoji or decorative unicode marks — bespoke SVG carries all the ornamentation."
208
+
209
+ banned_defaults:
210
+ # Global blocklist from BESPOKE_THEME_SYSTEM.md
211
+ - "claude-cream (#F4F1EA + serif + #D97757) — this theme's canvas is DELIBERATELY #eedfca (warmer than claude-cream) to refuse the AI-tell. Swapping to F4F1EA is the tell."
212
+ - "void+acid (near-black bg + single bright acid-green or vermilion accent)"
213
+ - "broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)"
214
+ - "tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)"
215
+ - "uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)"
216
+ # Base-specific
217
+ - "sans-display-anywhere (this theme's whole point is the warm Windsor chunky-serif wordmark. A sans-serif display used anywhere — hero, section headline, wordmark — immediately collapses the vintage-poster register.)"
218
+ - "white-canvas-flood (canvas is #eedfca warm cream, not white. White is a raised-panel surface color for the hot-desk card and gallery photo frames only. Making white the whole page background collapses the theme into generic-lifestyle slop.)"
219
+ - "rounded-sticky-notes (post-it note testimonial cards are SHARP-CORNERED. Real vintage post-its had square edges. Rounded corners on the sticky notes is the skeuomorphic-mimic tell.)"
220
+ - "multi-accent-flood (yellow + lime + orange + pink + seafoam are PUNCTUATION accents. Flooding an entire section background in any accent color collapses the theme into candy-slop.)"
221
+ - "uniform-photo-grid (photo gallery alternates size, orientation, and frame treatment. Uniform 3-across or 4-across photo grids are the AI-default lifestyle-site tell.)"
@@ -0,0 +1,34 @@
1
+ // Generated from theme.yml. Do not edit by hand — edit theme.yml + re-materialize.
2
+
3
+ export const tokens = {
4
+ slug: "cabana-poster",
5
+ family: "C",
6
+ base: "28",
7
+ palette: {
8
+ "bg": "#eedfca",
9
+ "surface": "#ffffff",
10
+ "ink": "#352207",
11
+ "accent": "#ffd200",
12
+ "secondary": "#f38211",
13
+ "cream": "#eedfca",
14
+ "darkInk": "#163e35",
15
+ "mute": "#8c6f47",
16
+ "lime": "#c1fc50",
17
+ "pink": "#f775a5",
18
+ "seafoam": "#3ec2b4"
19
+ },
20
+ typography: {
21
+ "display": "Windsor (reference proprietary face — warm 1905 chunky-serif with friendly proportions and a slightly quirky character). Free fallback stack — \"Rozha One\", \"DM Serif Display\", \"Playfair Display\", Georgia, serif. Weight 700, mixed case (NEVER uppercase — Windsor loses its character under textTransform:uppercase like Shrikhand does). Top of scale ~64px hero wordmark, 48px section headline, 32px subhead, 24px h3. The wordmark ships with YELLOW FILL + ESPRESSO BROWN OUTLINE STROKE — that's the vintage travel-poster signature. Every other display use is a solid espresso-brown fill.",
22
+ "body": "Pitch Sans (reference — Klim's Pitch Sans, a modern geometric sans). Free fallback stack — \"Space Grotesk\", \"DM Sans\", Inter, system-ui, sans-serif. Weight 500-600, mixed case, 15-16px body copy, line-height 1.55. Small labels get 12px 600-weight sentence case.",
23
+ "script": "Caveat, Homemade Apple, Kalam, cursive — used SPARINGLY for a small\nvocabulary of handwritten-script signature moments only (As Seen on\nTV!, Come Say Hi, Seeing is believing, baby). Weight 700, mixed\ncase, ~24-32px. NEVER used for body copy or eyebrow labels — a\nhandwritten register cannot scale to body copy without becoming twee.\n",
24
+ "mono": "none. Cabana Poster is a warm consumer lifestyle surface. Mono has no role.",
25
+ "scale": "1.333 (perfect fourth — comfortable poster-scale contrast without collapsing into monumental hero-only)",
26
+ "eyebrow_exception": "The universal slop-blocklist bans mono-caps eyebrows as a general\ndefensive rule. Cabana Poster LEGITIMATELY uses a small vocabulary\nof uppercase 0.16em-tracked 11px labels as DIEGETIC ADDRESS PLATE\nlabels (\"FACTORY 2 / 10-12 EXAMPLE RD / SUBURB VIC 3057\") and\nmarquee-ticker utility labels (\"247 ACCESS · 1800-EXAMPLE · HOT\nDESKS AVAILABLE\") because the reference site uses them EXACTLY\nin this register — they read as vintage-signage plates, not\nmarketing eyebrows. This is a THEME-SPECIFIC EXCEPTION that must\nbe manually preserved during harness grading.\n"
27
+ },
28
+ surface: "web",
29
+ density: "balanced",
30
+ motion: "Ships live in the section renderer (no external dependencies):\n1. Marquee ticker — the orange utility-label bar scrolls horizontally at 24s per loop, continuously (pauses on hover). Per reference — spec allows.\n2. Photo-gallery hover — each gallery photo scales(1.02) + shifts +/-2px vertically on hover, 240ms cubic-bezier(0.19,1,0.22,1). Reads as \"picking up a print\" tactile response.\n3. Tab-widget crossfade — Hot Desking / Permanent Desk / Private Studio tabs crossfade their body-card + photo-panel content over 300ms on click. No slide, no scale — just opacity.\n4. Post-it note stagger — testimonial post-it notes fade in with 120ms stagger + 500ms cubic-bezier on IntersectionObserver visibility. Each note also has a subtle static rotation (-2deg, 0deg, +3deg) so they look casually pinned.\n5. Come-Say-Hi callout reveal — the cream card overlay on the dark deep-forest photo band fades in from opacity 0 with a subtle scale(0.98 → 1) over 600ms on IntersectionObserver visibility.\n6. Handwritten script gentle sway — the \"As Seen on TV!\" and \"Come Say Hi\" script snippets rotate 1deg back-and-forth on a 4s loop, subtle enough to feel alive but not distracting.\n7. Wordmark reveal — the outlined display wordmark fades in with subtle scale(0.96 → 1) over 800ms on first paint. No letter-stagger.\n8. prefers-reduced-motion: reduce — marquee paused; hover disabled; post-it stagger disabled (all show at once); script sway paused; wordmark shows at final scale immediately. State changes still fire (tab switching still crossfades opacity).\n\nCustomer installs these as dependencies for the deeper motion tier:\n- Lenis — smooth inertial scroll (page benefits from inertial cadence between the photo bands).\n- GSAP DrawSVG for the outlined display wordmark drawing letter-by-letter over the beach photo hero.\n- Real Vimeo/Cloudinary video player for the \"AS SEEN ON TV!\" video-thumbnail if the customer has a real reel.\n\nMotion character: warm, playful, tactile, slightly retro. Custom cubic-bezier(0.19,1,0.22,1) for reveals. The register lives between vintage travel-poster print and modern hospitality-forward web — motion should feel like paper being handled, not like a SaaS product tour.\n",
31
+ signature: "Warm cream canvas at #eedfca — the register's non-negotiable base\n(deliberately NOT #F4F1EA, which is the Claude-cream AI-tell). Every\ncard, button, input, tile, photo-frame, and sticky note ships at 0px\nborder radius — sharp edges are the second non-negotiable move. The\nhero is a FULL-BLEED photograph of the actual physical space or an\natmospheric outdoor scene (palm trees, beach, warm-lit street) under\ndirectional light. Over that photo sits the WORDMARK in the Windsor\ndisplay face — YELLOW FILL (#ffd200) + ESPRESSO-BROWN STROKE OUTLINE\nat ~10-14px stroke width, at ~200px scale, mixed case (never\nuppercase). Directly beneath the wordmark: a small custom SVG\nLINE-ILLUSTRATION of the actual physical space (storefront /\nbuilding / entrance) drawn in cream on cream, ~180px wide. Below\nthat: a small DIEGETIC ADDRESS PLATE in 11px mono-caps 0.16em\n(\"FACTORY 2 / 10-12 EXAMPLE RD / SUBURB VIC 3057\").\nBelow the hero: a horizontal MARQUEE TICKER in an orange band —\n\"Follow us @PORT_CABANA · 247 ACCESS · 1800-EXAMPLE · HOT DESKS\nAVAILABLE · SUPER FAST\" scrolling at 24s per loop. Below the\nmarquee: an INTRO COPY SPLIT — LEFT: big Windsor headline \"Your\ncheeky inner-north coworking oasis.\" at 64px. RIGHT: two-column\nPitch Sans body copy with a small handwritten-italic subline.\nNext: a PHOTO GALLERY BAND — 3 photos at varied sizes, ONE of them\nframed with a bright YELLOW ARCH-SHAPE SVG FRAME (the arch being a\nkey vintage-poster device). A bespoke SVG smiley mark drops in the\ngutter as PUNCTUATION. Next: a big \"EXPERIENCE THE ULTIMATE\nCOWORKING LIFESTYLE\" headline in Windsor with a HANDWRITTEN SCRIPT\n\"As Seen on TV!\" callout in seafoam (Caveat) beneath. A 3-TAB\nWIDGET (Hot Desking / Permanent Desk / Private Studio) crossfades\nits body card + big photo panel per tab. Below: TESTIMONIALS AS\nPOST-IT NOTES — 2-3 sticky-note-aesthetic cards (yellow, orange,\nlime rectangles at ~360x240px, sharp corners, subtle static\nrotation of -2deg / 0deg / +3deg, typewriter-style body copy).\nFinally, a \"COME SAY HI\" callout section: a dark deep-forest\nphoto-band (garage-door / studio-entrance photograph) with a CREAM\nCARD OVERLAY in the center reading \"Come Say Hi\" (Windsor 48px),\n\"Seeing is believing, baby\" (script 24px), a two-line body block,\nand a DEEP-FOREST OUTLINED BUTTON reading \"Arrange a visit.\"\nFooter at the bottom: acknowledgement paragraph on the left, giant\noutlined wordmark + small building illustration in the middle,\nutility links (Home / Join / About / The Space / Our Members /\nContact) top-left column. Brand character sits in the outlined\nyellow wordmark, the full-bleed photography, the multi-color\nscattered accents used SPARINGLY, and the handwritten-script\nsignature moments — not in decoration, not in polish, not in\nuniform grids.\n",
32
+ } as const;
33
+
34
+ export type Tokens = typeof tokens;