@hex-core/themes 0.1.1 → 0.2.0

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 (577) hide show
  1. package/dist/chunk-2LXEWDOF.js +68 -0
  2. package/dist/chunk-2LXEWDOF.js.map +1 -0
  3. package/dist/chunk-2SIVAJHV.js +68 -0
  4. package/dist/chunk-2SIVAJHV.js.map +1 -0
  5. package/dist/chunk-2UVSQNAF.js +68 -0
  6. package/dist/chunk-2UVSQNAF.js.map +1 -0
  7. package/dist/chunk-2XBAWSN6.js +68 -0
  8. package/dist/chunk-2XBAWSN6.js.map +1 -0
  9. package/dist/chunk-3FR2JLIS.js +68 -0
  10. package/dist/chunk-3FR2JLIS.js.map +1 -0
  11. package/dist/chunk-4AQSFP5U.js +68 -0
  12. package/dist/chunk-4AQSFP5U.js.map +1 -0
  13. package/dist/chunk-4CRJPM5Q.js +68 -0
  14. package/dist/chunk-4CRJPM5Q.js.map +1 -0
  15. package/dist/chunk-4EAEPKGB.js +68 -0
  16. package/dist/chunk-4EAEPKGB.js.map +1 -0
  17. package/dist/chunk-4JPNRIHQ.js +68 -0
  18. package/dist/chunk-4JPNRIHQ.js.map +1 -0
  19. package/dist/chunk-4WCDNNON.js +68 -0
  20. package/dist/chunk-4WCDNNON.js.map +1 -0
  21. package/dist/chunk-4XQKUS33.js +68 -0
  22. package/dist/chunk-4XQKUS33.js.map +1 -0
  23. package/dist/chunk-5FW5RHIU.js +68 -0
  24. package/dist/chunk-5FW5RHIU.js.map +1 -0
  25. package/dist/chunk-64G56KOZ.js +68 -0
  26. package/dist/chunk-64G56KOZ.js.map +1 -0
  27. package/dist/chunk-6UDYRVS2.js +68 -0
  28. package/dist/chunk-6UDYRVS2.js.map +1 -0
  29. package/dist/chunk-75HM5DPO.js +68 -0
  30. package/dist/chunk-75HM5DPO.js.map +1 -0
  31. package/dist/chunk-7VETPCK7.js +68 -0
  32. package/dist/chunk-7VETPCK7.js.map +1 -0
  33. package/dist/chunk-BMH72AOR.js +68 -0
  34. package/dist/chunk-BMH72AOR.js.map +1 -0
  35. package/dist/chunk-BTDSHLZE.js +68 -0
  36. package/dist/chunk-BTDSHLZE.js.map +1 -0
  37. package/dist/chunk-BTKVLLPL.js +68 -0
  38. package/dist/chunk-BTKVLLPL.js.map +1 -0
  39. package/dist/chunk-CZDOW4UT.js +68 -0
  40. package/dist/chunk-CZDOW4UT.js.map +1 -0
  41. package/dist/chunk-DHT4VCQG.js +68 -0
  42. package/dist/chunk-DHT4VCQG.js.map +1 -0
  43. package/dist/chunk-DM6DAYEM.js +68 -0
  44. package/dist/chunk-DM6DAYEM.js.map +1 -0
  45. package/dist/chunk-DN2M4ZI5.js +68 -0
  46. package/dist/chunk-DN2M4ZI5.js.map +1 -0
  47. package/dist/chunk-DOUW4N6H.js +68 -0
  48. package/dist/chunk-DOUW4N6H.js.map +1 -0
  49. package/dist/chunk-DTZPLDZ5.js +68 -0
  50. package/dist/chunk-DTZPLDZ5.js.map +1 -0
  51. package/dist/chunk-E6MRSOPD.js +68 -0
  52. package/dist/chunk-E6MRSOPD.js.map +1 -0
  53. package/dist/chunk-FABPV7PL.js +68 -0
  54. package/dist/chunk-FABPV7PL.js.map +1 -0
  55. package/dist/chunk-FM67TP64.js +68 -0
  56. package/dist/chunk-FM67TP64.js.map +1 -0
  57. package/dist/chunk-GFABZZVH.js +68 -0
  58. package/dist/chunk-GFABZZVH.js.map +1 -0
  59. package/dist/chunk-HTLRH4MJ.js +68 -0
  60. package/dist/chunk-HTLRH4MJ.js.map +1 -0
  61. package/dist/chunk-IDBHZ2PV.js +68 -0
  62. package/dist/chunk-IDBHZ2PV.js.map +1 -0
  63. package/dist/chunk-J54YKOPC.js +68 -0
  64. package/dist/chunk-J54YKOPC.js.map +1 -0
  65. package/dist/chunk-JN5K3V7M.js +68 -0
  66. package/dist/chunk-JN5K3V7M.js.map +1 -0
  67. package/dist/chunk-JU4TDT2G.js +528 -0
  68. package/dist/chunk-JU4TDT2G.js.map +1 -0
  69. package/dist/chunk-JWBGRQJI.js +68 -0
  70. package/dist/chunk-JWBGRQJI.js.map +1 -0
  71. package/dist/chunk-KFVFORR5.js +68 -0
  72. package/dist/chunk-KFVFORR5.js.map +1 -0
  73. package/dist/chunk-LILQL4KG.js +68 -0
  74. package/dist/chunk-LILQL4KG.js.map +1 -0
  75. package/dist/chunk-M7JXKTNY.js +68 -0
  76. package/dist/chunk-M7JXKTNY.js.map +1 -0
  77. package/dist/chunk-NM567GJA.js +68 -0
  78. package/dist/chunk-NM567GJA.js.map +1 -0
  79. package/dist/chunk-NMWHITVJ.js +68 -0
  80. package/dist/chunk-NMWHITVJ.js.map +1 -0
  81. package/dist/chunk-NSWZ6DXW.js +68 -0
  82. package/dist/chunk-NSWZ6DXW.js.map +1 -0
  83. package/dist/chunk-NXSLVEML.js +68 -0
  84. package/dist/chunk-NXSLVEML.js.map +1 -0
  85. package/dist/chunk-NZX4NVB7.js +68 -0
  86. package/dist/chunk-NZX4NVB7.js.map +1 -0
  87. package/dist/chunk-OAB7GNRG.js +68 -0
  88. package/dist/chunk-OAB7GNRG.js.map +1 -0
  89. package/dist/chunk-P4I6HJZA.js +68 -0
  90. package/dist/chunk-P4I6HJZA.js.map +1 -0
  91. package/dist/chunk-PC3NQBOZ.js +68 -0
  92. package/dist/chunk-PC3NQBOZ.js.map +1 -0
  93. package/dist/chunk-PE3RNDVR.js +68 -0
  94. package/dist/chunk-PE3RNDVR.js.map +1 -0
  95. package/dist/chunk-Q2Q3577E.js +68 -0
  96. package/dist/chunk-Q2Q3577E.js.map +1 -0
  97. package/dist/chunk-QEMINSRG.js +68 -0
  98. package/dist/chunk-QEMINSRG.js.map +1 -0
  99. package/dist/chunk-RGBZ3ZXX.js +68 -0
  100. package/dist/chunk-RGBZ3ZXX.js.map +1 -0
  101. package/dist/chunk-RWSUTY67.js +68 -0
  102. package/dist/chunk-RWSUTY67.js.map +1 -0
  103. package/dist/chunk-SB3JKBJD.js +68 -0
  104. package/dist/chunk-SB3JKBJD.js.map +1 -0
  105. package/dist/chunk-TAHSZ55U.js +68 -0
  106. package/dist/chunk-TAHSZ55U.js.map +1 -0
  107. package/dist/chunk-TCR3NGBV.js +68 -0
  108. package/dist/chunk-TCR3NGBV.js.map +1 -0
  109. package/dist/chunk-TKPBFOEN.js +68 -0
  110. package/dist/chunk-TKPBFOEN.js.map +1 -0
  111. package/dist/chunk-TN6KDVAG.js +68 -0
  112. package/dist/chunk-TN6KDVAG.js.map +1 -0
  113. package/dist/chunk-UIMBGFLW.js +68 -0
  114. package/dist/chunk-UIMBGFLW.js.map +1 -0
  115. package/dist/chunk-UL4F5NTU.js +68 -0
  116. package/dist/chunk-UL4F5NTU.js.map +1 -0
  117. package/dist/chunk-UWDKL3IR.js +68 -0
  118. package/dist/chunk-UWDKL3IR.js.map +1 -0
  119. package/dist/chunk-VNYLNLIH.js +68 -0
  120. package/dist/chunk-VNYLNLIH.js.map +1 -0
  121. package/dist/chunk-W2VEHVDK.js +68 -0
  122. package/dist/chunk-W2VEHVDK.js.map +1 -0
  123. package/dist/chunk-WMYSBUH5.js +68 -0
  124. package/dist/chunk-WMYSBUH5.js.map +1 -0
  125. package/dist/chunk-WNTQIMRE.js +68 -0
  126. package/dist/chunk-WNTQIMRE.js.map +1 -0
  127. package/dist/chunk-WY72KJJW.js +68 -0
  128. package/dist/chunk-WY72KJJW.js.map +1 -0
  129. package/dist/chunk-WYTM3WHD.js +68 -0
  130. package/dist/chunk-WYTM3WHD.js.map +1 -0
  131. package/dist/chunk-XGQWOJRB.js +68 -0
  132. package/dist/chunk-XGQWOJRB.js.map +1 -0
  133. package/dist/chunk-YZKPRCKP.js +68 -0
  134. package/dist/chunk-YZKPRCKP.js.map +1 -0
  135. package/dist/chunk-ZEPFA7ZT.js +68 -0
  136. package/dist/chunk-ZEPFA7ZT.js.map +1 -0
  137. package/dist/chunk-ZIMELPXX.js +68 -0
  138. package/dist/chunk-ZIMELPXX.js.map +1 -0
  139. package/dist/chunk-ZMAIAAT6.js +68 -0
  140. package/dist/chunk-ZMAIAAT6.js.map +1 -0
  141. package/dist/chunk-ZOCDSEOF.js +68 -0
  142. package/dist/chunk-ZOCDSEOF.js.map +1 -0
  143. package/dist/chunk-ZSUTMUVB.js +68 -0
  144. package/dist/chunk-ZSUTMUVB.js.map +1 -0
  145. package/dist/index.d.ts +185 -23
  146. package/dist/index.js +359 -3
  147. package/dist/index.js.map +1 -1
  148. package/dist/presets/_briefs/airbnb.d.ts +3 -0
  149. package/dist/presets/_briefs/airbnb.js +551 -0
  150. package/dist/presets/_briefs/airbnb.js.map +1 -0
  151. package/dist/presets/_briefs/airtable.d.ts +3 -0
  152. package/dist/presets/_briefs/airtable.js +560 -0
  153. package/dist/presets/_briefs/airtable.js.map +1 -0
  154. package/dist/presets/_briefs/apple.d.ts +3 -0
  155. package/dist/presets/_briefs/apple.js +568 -0
  156. package/dist/presets/_briefs/apple.js.map +1 -0
  157. package/dist/presets/_briefs/binance.d.ts +3 -0
  158. package/dist/presets/_briefs/binance.js +640 -0
  159. package/dist/presets/_briefs/binance.js.map +1 -0
  160. package/dist/presets/_briefs/bmw-m.d.ts +3 -0
  161. package/dist/presets/_briefs/bmw-m.js +509 -0
  162. package/dist/presets/_briefs/bmw-m.js.map +1 -0
  163. package/dist/presets/_briefs/bmw.d.ts +3 -0
  164. package/dist/presets/_briefs/bmw.js +550 -0
  165. package/dist/presets/_briefs/bmw.js.map +1 -0
  166. package/dist/presets/_briefs/bugatti.d.ts +3 -0
  167. package/dist/presets/_briefs/bugatti.js +460 -0
  168. package/dist/presets/_briefs/bugatti.js.map +1 -0
  169. package/dist/presets/_briefs/cal.d.ts +3 -0
  170. package/dist/presets/_briefs/cal.js +548 -0
  171. package/dist/presets/_briefs/cal.js.map +1 -0
  172. package/dist/presets/_briefs/claude.d.ts +3 -0
  173. package/dist/presets/_briefs/claude.js +595 -0
  174. package/dist/presets/_briefs/claude.js.map +1 -0
  175. package/dist/presets/_briefs/clay.d.ts +3 -0
  176. package/dist/presets/_briefs/clay.js +547 -0
  177. package/dist/presets/_briefs/clay.js.map +1 -0
  178. package/dist/presets/_briefs/clickhouse.d.ts +3 -0
  179. package/dist/presets/_briefs/clickhouse.js +550 -0
  180. package/dist/presets/_briefs/clickhouse.js.map +1 -0
  181. package/dist/presets/_briefs/cohere.d.ts +3 -0
  182. package/dist/presets/_briefs/cohere.js +457 -0
  183. package/dist/presets/_briefs/cohere.js.map +1 -0
  184. package/dist/presets/_briefs/coinbase.d.ts +3 -0
  185. package/dist/presets/_briefs/coinbase.js +576 -0
  186. package/dist/presets/_briefs/coinbase.js.map +1 -0
  187. package/dist/presets/_briefs/composio.d.ts +3 -0
  188. package/dist/presets/_briefs/composio.js +512 -0
  189. package/dist/presets/_briefs/composio.js.map +1 -0
  190. package/dist/presets/_briefs/cursor.d.ts +3 -0
  191. package/dist/presets/_briefs/cursor.js +543 -0
  192. package/dist/presets/_briefs/cursor.js.map +1 -0
  193. package/dist/presets/_briefs/elevenlabs.d.ts +3 -0
  194. package/dist/presets/_briefs/elevenlabs.js +510 -0
  195. package/dist/presets/_briefs/elevenlabs.js.map +1 -0
  196. package/dist/presets/_briefs/expo.d.ts +3 -0
  197. package/dist/presets/_briefs/expo.js +532 -0
  198. package/dist/presets/_briefs/expo.js.map +1 -0
  199. package/dist/presets/_briefs/ferrari.d.ts +3 -0
  200. package/dist/presets/_briefs/ferrari.js +537 -0
  201. package/dist/presets/_briefs/ferrari.js.map +1 -0
  202. package/dist/presets/_briefs/figma.d.ts +3 -0
  203. package/dist/presets/_briefs/figma.js +226 -0
  204. package/dist/presets/_briefs/figma.js.map +1 -0
  205. package/dist/presets/_briefs/framer.d.ts +3 -0
  206. package/dist/presets/_briefs/framer.js +252 -0
  207. package/dist/presets/_briefs/framer.js.map +1 -0
  208. package/dist/presets/_briefs/hashicorp.d.ts +3 -0
  209. package/dist/presets/_briefs/hashicorp.js +284 -0
  210. package/dist/presets/_briefs/hashicorp.js.map +1 -0
  211. package/dist/presets/_briefs/ibm.d.ts +3 -0
  212. package/dist/presets/_briefs/ibm.js +338 -0
  213. package/dist/presets/_briefs/ibm.js.map +1 -0
  214. package/dist/presets/_briefs/intercom.d.ts +3 -0
  215. package/dist/presets/_briefs/intercom.js +152 -0
  216. package/dist/presets/_briefs/intercom.js.map +1 -0
  217. package/dist/presets/_briefs/kraken.d.ts +3 -0
  218. package/dist/presets/_briefs/kraken.js +131 -0
  219. package/dist/presets/_briefs/kraken.js.map +1 -0
  220. package/dist/presets/_briefs/lamborghini.d.ts +3 -0
  221. package/dist/presets/_briefs/lamborghini.js +294 -0
  222. package/dist/presets/_briefs/lamborghini.js.map +1 -0
  223. package/dist/presets/_briefs/linear.d.ts +3 -0
  224. package/dist/presets/_briefs/linear.js +373 -0
  225. package/dist/presets/_briefs/linear.js.map +1 -0
  226. package/dist/presets/_briefs/lovable.d.ts +3 -0
  227. package/dist/presets/_briefs/lovable.js +304 -0
  228. package/dist/presets/_briefs/lovable.js.map +1 -0
  229. package/dist/presets/_briefs/mastercard.d.ts +3 -0
  230. package/dist/presets/_briefs/mastercard.js +371 -0
  231. package/dist/presets/_briefs/mastercard.js.map +1 -0
  232. package/dist/presets/_briefs/meta.d.ts +3 -0
  233. package/dist/presets/_briefs/meta.js +372 -0
  234. package/dist/presets/_briefs/meta.js.map +1 -0
  235. package/dist/presets/_briefs/minimax.d.ts +3 -0
  236. package/dist/presets/_briefs/minimax.js +263 -0
  237. package/dist/presets/_briefs/minimax.js.map +1 -0
  238. package/dist/presets/_briefs/mintlify.d.ts +3 -0
  239. package/dist/presets/_briefs/mintlify.js +332 -0
  240. package/dist/presets/_briefs/mintlify.js.map +1 -0
  241. package/dist/presets/_briefs/miro.d.ts +3 -0
  242. package/dist/presets/_briefs/miro.js +114 -0
  243. package/dist/presets/_briefs/miro.js.map +1 -0
  244. package/dist/presets/_briefs/mistral.d.ts +3 -0
  245. package/dist/presets/_briefs/mistral.js +267 -0
  246. package/dist/presets/_briefs/mistral.js.map +1 -0
  247. package/dist/presets/_briefs/mongodb.d.ts +3 -0
  248. package/dist/presets/_briefs/mongodb.js +272 -0
  249. package/dist/presets/_briefs/mongodb.js.map +1 -0
  250. package/dist/presets/_briefs/nike.d.ts +3 -0
  251. package/dist/presets/_briefs/nike.js +369 -0
  252. package/dist/presets/_briefs/nike.js.map +1 -0
  253. package/dist/presets/_briefs/notion.d.ts +3 -0
  254. package/dist/presets/_briefs/notion.js +315 -0
  255. package/dist/presets/_briefs/notion.js.map +1 -0
  256. package/dist/presets/_briefs/nvidia.d.ts +3 -0
  257. package/dist/presets/_briefs/nvidia.js +299 -0
  258. package/dist/presets/_briefs/nvidia.js.map +1 -0
  259. package/dist/presets/_briefs/ollama.d.ts +3 -0
  260. package/dist/presets/_briefs/ollama.js +273 -0
  261. package/dist/presets/_briefs/ollama.js.map +1 -0
  262. package/dist/presets/_briefs/opencode.d.ts +3 -0
  263. package/dist/presets/_briefs/opencode.js +287 -0
  264. package/dist/presets/_briefs/opencode.js.map +1 -0
  265. package/dist/presets/_briefs/pinterest.d.ts +3 -0
  266. package/dist/presets/_briefs/pinterest.js +236 -0
  267. package/dist/presets/_briefs/pinterest.js.map +1 -0
  268. package/dist/presets/_briefs/playstation.d.ts +3 -0
  269. package/dist/presets/_briefs/playstation.js +370 -0
  270. package/dist/presets/_briefs/playstation.js.map +1 -0
  271. package/dist/presets/_briefs/posthog.d.ts +3 -0
  272. package/dist/presets/_briefs/posthog.js +262 -0
  273. package/dist/presets/_briefs/posthog.js.map +1 -0
  274. package/dist/presets/_briefs/raycast.d.ts +3 -0
  275. package/dist/presets/_briefs/raycast.js +274 -0
  276. package/dist/presets/_briefs/raycast.js.map +1 -0
  277. package/dist/presets/_briefs/renault.d.ts +3 -0
  278. package/dist/presets/_briefs/renault.js +317 -0
  279. package/dist/presets/_briefs/renault.js.map +1 -0
  280. package/dist/presets/_briefs/replicate.d.ts +3 -0
  281. package/dist/presets/_briefs/replicate.js +267 -0
  282. package/dist/presets/_briefs/replicate.js.map +1 -0
  283. package/dist/presets/_briefs/resend.d.ts +3 -0
  284. package/dist/presets/_briefs/resend.js +309 -0
  285. package/dist/presets/_briefs/resend.js.map +1 -0
  286. package/dist/presets/_briefs/revolut.d.ts +3 -0
  287. package/dist/presets/_briefs/revolut.js +191 -0
  288. package/dist/presets/_briefs/revolut.js.map +1 -0
  289. package/dist/presets/_briefs/runwayml.d.ts +3 -0
  290. package/dist/presets/_briefs/runwayml.js +250 -0
  291. package/dist/presets/_briefs/runwayml.js.map +1 -0
  292. package/dist/presets/_briefs/sanity.d.ts +3 -0
  293. package/dist/presets/_briefs/sanity.js +363 -0
  294. package/dist/presets/_briefs/sanity.js.map +1 -0
  295. package/dist/presets/_briefs/sentry.d.ts +3 -0
  296. package/dist/presets/_briefs/sentry.js +268 -0
  297. package/dist/presets/_briefs/sentry.js.map +1 -0
  298. package/dist/presets/_briefs/shopify.d.ts +3 -0
  299. package/dist/presets/_briefs/shopify.js +356 -0
  300. package/dist/presets/_briefs/shopify.js.map +1 -0
  301. package/dist/presets/_briefs/slack.d.ts +3 -0
  302. package/dist/presets/_briefs/slack.js +221 -0
  303. package/dist/presets/_briefs/slack.js.map +1 -0
  304. package/dist/presets/_briefs/spacex.d.ts +3 -0
  305. package/dist/presets/_briefs/spacex.js +200 -0
  306. package/dist/presets/_briefs/spacex.js.map +1 -0
  307. package/dist/presets/_briefs/spotify.d.ts +3 -0
  308. package/dist/presets/_briefs/spotify.js +252 -0
  309. package/dist/presets/_briefs/spotify.js.map +1 -0
  310. package/dist/presets/_briefs/starbucks.d.ts +3 -0
  311. package/dist/presets/_briefs/starbucks.js +586 -0
  312. package/dist/presets/_briefs/starbucks.js.map +1 -0
  313. package/dist/presets/_briefs/stripe.d.ts +3 -0
  314. package/dist/presets/_briefs/stripe.js +328 -0
  315. package/dist/presets/_briefs/stripe.js.map +1 -0
  316. package/dist/presets/_briefs/supabase.d.ts +3 -0
  317. package/dist/presets/_briefs/supabase.js +261 -0
  318. package/dist/presets/_briefs/supabase.js.map +1 -0
  319. package/dist/presets/_briefs/superhuman.d.ts +3 -0
  320. package/dist/presets/_briefs/superhuman.js +258 -0
  321. package/dist/presets/_briefs/superhuman.js.map +1 -0
  322. package/dist/presets/_briefs/tesla.d.ts +3 -0
  323. package/dist/presets/_briefs/tesla.js +292 -0
  324. package/dist/presets/_briefs/tesla.js.map +1 -0
  325. package/dist/presets/_briefs/theverge.d.ts +3 -0
  326. package/dist/presets/_briefs/theverge.js +345 -0
  327. package/dist/presets/_briefs/theverge.js.map +1 -0
  328. package/dist/presets/_briefs/together.d.ts +3 -0
  329. package/dist/presets/_briefs/together.js +269 -0
  330. package/dist/presets/_briefs/together.js.map +1 -0
  331. package/dist/presets/_briefs/uber.d.ts +3 -0
  332. package/dist/presets/_briefs/uber.js +301 -0
  333. package/dist/presets/_briefs/uber.js.map +1 -0
  334. package/dist/presets/_briefs/vercel.d.ts +3 -0
  335. package/dist/presets/_briefs/vercel.js +316 -0
  336. package/dist/presets/_briefs/vercel.js.map +1 -0
  337. package/dist/presets/_briefs/vodafone.d.ts +3 -0
  338. package/dist/presets/_briefs/vodafone.js +429 -0
  339. package/dist/presets/_briefs/vodafone.js.map +1 -0
  340. package/dist/presets/_briefs/voltagent.d.ts +3 -0
  341. package/dist/presets/_briefs/voltagent.js +329 -0
  342. package/dist/presets/_briefs/voltagent.js.map +1 -0
  343. package/dist/presets/_briefs/warp.d.ts +3 -0
  344. package/dist/presets/_briefs/warp.js +259 -0
  345. package/dist/presets/_briefs/warp.js.map +1 -0
  346. package/dist/presets/_briefs/webflow.d.ts +3 -0
  347. package/dist/presets/_briefs/webflow.js +98 -0
  348. package/dist/presets/_briefs/webflow.js.map +1 -0
  349. package/dist/presets/_briefs/wired.d.ts +3 -0
  350. package/dist/presets/_briefs/wired.js +284 -0
  351. package/dist/presets/_briefs/wired.js.map +1 -0
  352. package/dist/presets/_briefs/wise.d.ts +3 -0
  353. package/dist/presets/_briefs/wise.js +179 -0
  354. package/dist/presets/_briefs/wise.js.map +1 -0
  355. package/dist/presets/_briefs/x.d.ts +3 -0
  356. package/dist/presets/_briefs/x.js +263 -0
  357. package/dist/presets/_briefs/x.js.map +1 -0
  358. package/dist/presets/_briefs/zapier.d.ts +3 -0
  359. package/dist/presets/_briefs/zapier.js +334 -0
  360. package/dist/presets/_briefs/zapier.js.map +1 -0
  361. package/dist/presets/airbnb.d.ts +5 -0
  362. package/dist/presets/airbnb.js +7 -0
  363. package/dist/presets/airbnb.js.map +1 -0
  364. package/dist/presets/airtable.d.ts +5 -0
  365. package/dist/presets/airtable.js +7 -0
  366. package/dist/presets/airtable.js.map +1 -0
  367. package/dist/presets/apple.d.ts +5 -0
  368. package/dist/presets/apple.js +7 -0
  369. package/dist/presets/apple.js.map +1 -0
  370. package/dist/presets/binance.d.ts +5 -0
  371. package/dist/presets/binance.js +7 -0
  372. package/dist/presets/binance.js.map +1 -0
  373. package/dist/presets/bmw-m.d.ts +5 -0
  374. package/dist/presets/bmw-m.js +7 -0
  375. package/dist/presets/bmw-m.js.map +1 -0
  376. package/dist/presets/bmw.d.ts +5 -0
  377. package/dist/presets/bmw.js +7 -0
  378. package/dist/presets/bmw.js.map +1 -0
  379. package/dist/presets/bugatti.d.ts +5 -0
  380. package/dist/presets/bugatti.js +7 -0
  381. package/dist/presets/bugatti.js.map +1 -0
  382. package/dist/presets/cal.d.ts +5 -0
  383. package/dist/presets/cal.js +7 -0
  384. package/dist/presets/cal.js.map +1 -0
  385. package/dist/presets/claude.d.ts +5 -0
  386. package/dist/presets/claude.js +7 -0
  387. package/dist/presets/claude.js.map +1 -0
  388. package/dist/presets/clay.d.ts +5 -0
  389. package/dist/presets/clay.js +7 -0
  390. package/dist/presets/clay.js.map +1 -0
  391. package/dist/presets/clickhouse.d.ts +5 -0
  392. package/dist/presets/clickhouse.js +7 -0
  393. package/dist/presets/clickhouse.js.map +1 -0
  394. package/dist/presets/cohere.d.ts +5 -0
  395. package/dist/presets/cohere.js +7 -0
  396. package/dist/presets/cohere.js.map +1 -0
  397. package/dist/presets/coinbase.d.ts +5 -0
  398. package/dist/presets/coinbase.js +7 -0
  399. package/dist/presets/coinbase.js.map +1 -0
  400. package/dist/presets/composio.d.ts +5 -0
  401. package/dist/presets/composio.js +7 -0
  402. package/dist/presets/composio.js.map +1 -0
  403. package/dist/presets/cursor.d.ts +5 -0
  404. package/dist/presets/cursor.js +7 -0
  405. package/dist/presets/cursor.js.map +1 -0
  406. package/dist/presets/elevenlabs.d.ts +5 -0
  407. package/dist/presets/elevenlabs.js +7 -0
  408. package/dist/presets/elevenlabs.js.map +1 -0
  409. package/dist/presets/expo.d.ts +5 -0
  410. package/dist/presets/expo.js +7 -0
  411. package/dist/presets/expo.js.map +1 -0
  412. package/dist/presets/ferrari.d.ts +5 -0
  413. package/dist/presets/ferrari.js +7 -0
  414. package/dist/presets/ferrari.js.map +1 -0
  415. package/dist/presets/figma.d.ts +5 -0
  416. package/dist/presets/figma.js +7 -0
  417. package/dist/presets/figma.js.map +1 -0
  418. package/dist/presets/framer.d.ts +5 -0
  419. package/dist/presets/framer.js +7 -0
  420. package/dist/presets/framer.js.map +1 -0
  421. package/dist/presets/hashicorp.d.ts +5 -0
  422. package/dist/presets/hashicorp.js +7 -0
  423. package/dist/presets/hashicorp.js.map +1 -0
  424. package/dist/presets/ibm.d.ts +5 -0
  425. package/dist/presets/ibm.js +7 -0
  426. package/dist/presets/ibm.js.map +1 -0
  427. package/dist/presets/index.d.ts +94 -0
  428. package/dist/presets/index.js +297 -0
  429. package/dist/presets/index.js.map +1 -0
  430. package/dist/presets/intercom.d.ts +5 -0
  431. package/dist/presets/intercom.js +7 -0
  432. package/dist/presets/intercom.js.map +1 -0
  433. package/dist/presets/kraken.d.ts +5 -0
  434. package/dist/presets/kraken.js +7 -0
  435. package/dist/presets/kraken.js.map +1 -0
  436. package/dist/presets/lamborghini.d.ts +5 -0
  437. package/dist/presets/lamborghini.js +7 -0
  438. package/dist/presets/lamborghini.js.map +1 -0
  439. package/dist/presets/linear.d.ts +5 -0
  440. package/dist/presets/linear.js +7 -0
  441. package/dist/presets/linear.js.map +1 -0
  442. package/dist/presets/lovable.d.ts +5 -0
  443. package/dist/presets/lovable.js +7 -0
  444. package/dist/presets/lovable.js.map +1 -0
  445. package/dist/presets/mastercard.d.ts +5 -0
  446. package/dist/presets/mastercard.js +7 -0
  447. package/dist/presets/mastercard.js.map +1 -0
  448. package/dist/presets/meta.d.ts +5 -0
  449. package/dist/presets/meta.js +7 -0
  450. package/dist/presets/meta.js.map +1 -0
  451. package/dist/presets/minimax.d.ts +5 -0
  452. package/dist/presets/minimax.js +7 -0
  453. package/dist/presets/minimax.js.map +1 -0
  454. package/dist/presets/mintlify.d.ts +5 -0
  455. package/dist/presets/mintlify.js +7 -0
  456. package/dist/presets/mintlify.js.map +1 -0
  457. package/dist/presets/miro.d.ts +5 -0
  458. package/dist/presets/miro.js +7 -0
  459. package/dist/presets/miro.js.map +1 -0
  460. package/dist/presets/mistral.d.ts +5 -0
  461. package/dist/presets/mistral.js +7 -0
  462. package/dist/presets/mistral.js.map +1 -0
  463. package/dist/presets/mongodb.d.ts +5 -0
  464. package/dist/presets/mongodb.js +7 -0
  465. package/dist/presets/mongodb.js.map +1 -0
  466. package/dist/presets/nike.d.ts +5 -0
  467. package/dist/presets/nike.js +7 -0
  468. package/dist/presets/nike.js.map +1 -0
  469. package/dist/presets/notion.d.ts +5 -0
  470. package/dist/presets/notion.js +7 -0
  471. package/dist/presets/notion.js.map +1 -0
  472. package/dist/presets/nvidia.d.ts +5 -0
  473. package/dist/presets/nvidia.js +7 -0
  474. package/dist/presets/nvidia.js.map +1 -0
  475. package/dist/presets/ollama.d.ts +5 -0
  476. package/dist/presets/ollama.js +7 -0
  477. package/dist/presets/ollama.js.map +1 -0
  478. package/dist/presets/opencode.d.ts +5 -0
  479. package/dist/presets/opencode.js +7 -0
  480. package/dist/presets/opencode.js.map +1 -0
  481. package/dist/presets/pinterest.d.ts +5 -0
  482. package/dist/presets/pinterest.js +7 -0
  483. package/dist/presets/pinterest.js.map +1 -0
  484. package/dist/presets/playstation.d.ts +5 -0
  485. package/dist/presets/playstation.js +7 -0
  486. package/dist/presets/playstation.js.map +1 -0
  487. package/dist/presets/posthog.d.ts +5 -0
  488. package/dist/presets/posthog.js +7 -0
  489. package/dist/presets/posthog.js.map +1 -0
  490. package/dist/presets/raycast.d.ts +5 -0
  491. package/dist/presets/raycast.js +7 -0
  492. package/dist/presets/raycast.js.map +1 -0
  493. package/dist/presets/renault.d.ts +5 -0
  494. package/dist/presets/renault.js +7 -0
  495. package/dist/presets/renault.js.map +1 -0
  496. package/dist/presets/replicate.d.ts +5 -0
  497. package/dist/presets/replicate.js +7 -0
  498. package/dist/presets/replicate.js.map +1 -0
  499. package/dist/presets/resend.d.ts +5 -0
  500. package/dist/presets/resend.js +7 -0
  501. package/dist/presets/resend.js.map +1 -0
  502. package/dist/presets/revolut.d.ts +5 -0
  503. package/dist/presets/revolut.js +7 -0
  504. package/dist/presets/revolut.js.map +1 -0
  505. package/dist/presets/runwayml.d.ts +5 -0
  506. package/dist/presets/runwayml.js +7 -0
  507. package/dist/presets/runwayml.js.map +1 -0
  508. package/dist/presets/sanity.d.ts +5 -0
  509. package/dist/presets/sanity.js +7 -0
  510. package/dist/presets/sanity.js.map +1 -0
  511. package/dist/presets/sentry.d.ts +5 -0
  512. package/dist/presets/sentry.js +7 -0
  513. package/dist/presets/sentry.js.map +1 -0
  514. package/dist/presets/shopify.d.ts +5 -0
  515. package/dist/presets/shopify.js +7 -0
  516. package/dist/presets/shopify.js.map +1 -0
  517. package/dist/presets/slack.d.ts +5 -0
  518. package/dist/presets/slack.js +7 -0
  519. package/dist/presets/slack.js.map +1 -0
  520. package/dist/presets/spacex.d.ts +5 -0
  521. package/dist/presets/spacex.js +7 -0
  522. package/dist/presets/spacex.js.map +1 -0
  523. package/dist/presets/spotify.d.ts +5 -0
  524. package/dist/presets/spotify.js +7 -0
  525. package/dist/presets/spotify.js.map +1 -0
  526. package/dist/presets/starbucks.d.ts +5 -0
  527. package/dist/presets/starbucks.js +7 -0
  528. package/dist/presets/starbucks.js.map +1 -0
  529. package/dist/presets/stripe.d.ts +5 -0
  530. package/dist/presets/stripe.js +7 -0
  531. package/dist/presets/stripe.js.map +1 -0
  532. package/dist/presets/supabase.d.ts +5 -0
  533. package/dist/presets/supabase.js +7 -0
  534. package/dist/presets/supabase.js.map +1 -0
  535. package/dist/presets/superhuman.d.ts +5 -0
  536. package/dist/presets/superhuman.js +7 -0
  537. package/dist/presets/superhuman.js.map +1 -0
  538. package/dist/presets/tesla.d.ts +5 -0
  539. package/dist/presets/tesla.js +7 -0
  540. package/dist/presets/tesla.js.map +1 -0
  541. package/dist/presets/theverge.d.ts +5 -0
  542. package/dist/presets/theverge.js +7 -0
  543. package/dist/presets/theverge.js.map +1 -0
  544. package/dist/presets/together.d.ts +5 -0
  545. package/dist/presets/together.js +7 -0
  546. package/dist/presets/together.js.map +1 -0
  547. package/dist/presets/uber.d.ts +5 -0
  548. package/dist/presets/uber.js +7 -0
  549. package/dist/presets/uber.js.map +1 -0
  550. package/dist/presets/vercel.d.ts +5 -0
  551. package/dist/presets/vercel.js +7 -0
  552. package/dist/presets/vercel.js.map +1 -0
  553. package/dist/presets/vodafone.d.ts +5 -0
  554. package/dist/presets/vodafone.js +7 -0
  555. package/dist/presets/vodafone.js.map +1 -0
  556. package/dist/presets/voltagent.d.ts +5 -0
  557. package/dist/presets/voltagent.js +7 -0
  558. package/dist/presets/voltagent.js.map +1 -0
  559. package/dist/presets/warp.d.ts +5 -0
  560. package/dist/presets/warp.js +7 -0
  561. package/dist/presets/warp.js.map +1 -0
  562. package/dist/presets/webflow.d.ts +5 -0
  563. package/dist/presets/webflow.js +7 -0
  564. package/dist/presets/webflow.js.map +1 -0
  565. package/dist/presets/wired.d.ts +5 -0
  566. package/dist/presets/wired.js +7 -0
  567. package/dist/presets/wired.js.map +1 -0
  568. package/dist/presets/wise.d.ts +5 -0
  569. package/dist/presets/wise.js +7 -0
  570. package/dist/presets/wise.js.map +1 -0
  571. package/dist/presets/x.d.ts +5 -0
  572. package/dist/presets/x.js +7 -0
  573. package/dist/presets/x.js.map +1 -0
  574. package/dist/presets/zapier.d.ts +5 -0
  575. package/dist/presets/zapier.js +7 -0
  576. package/dist/presets/zapier.js.map +1 -0
  577. package/package.json +15 -3
@@ -0,0 +1,3 @@
1
+ declare const bmwBrief = "---\nversion: alpha\nname: BMW\ndescription: BMW's corporate site \u2014 distinct from BMW M's motorsport-bombastic variant, this is a measured and settled corporate-automotive interface. On a light (cream-tinted white) canvas, BMW corporate blue (#1c69d4) carries every primary CTA; dark navy hero bands frame model photography. BMW Type Next Latin sets the entire hierarchy on two weights \u2014 heavy 700 display and Light 300 body. Configuration and reservation flows ride a card-based 4-up grid, where each card holds a model render, a name, and a \"Learn More\" link.\n\ncolors:\n primary: \"#1c69d4\"\n primary-active: \"#0653b6\"\n primary-disabled: \"#d6d6d6\"\n ink: \"#262626\"\n body: \"#3c3c3c\"\n body-strong: \"#1a1a1a\"\n muted: \"#6b6b6b\"\n muted-soft: \"#9a9a9a\"\n hairline: \"#e6e6e6\"\n hairline-strong: \"#cccccc\"\n canvas: \"#ffffff\"\n surface-soft: \"#f7f7f7\"\n surface-card: \"#fafafa\"\n surface-strong: \"#ebebeb\"\n surface-dark: \"#1a2129\"\n surface-dark-elevated: \"#262e38\"\n on-primary: \"#ffffff\"\n on-dark: \"#ffffff\"\n on-dark-soft: \"#bbbbbb\"\n m-blue-light: \"#0066b1\"\n m-blue-dark: \"#1c69d4\"\n m-red: \"#e22718\"\n success: \"#22c55e\"\n warning: \"#f59e0b\"\n error: \"#dc2626\"\n\ntypography:\n display-xl:\n fontFamily: \"'BMW Type Next Latin', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\"\n fontSize: 64px\n fontWeight: 700\n lineHeight: 1.05\n letterSpacing: 0\n display-lg:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 48px\n fontWeight: 700\n lineHeight: 1.1\n letterSpacing: 0\n display-md:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 32px\n fontWeight: 700\n lineHeight: 1.15\n letterSpacing: 0\n display-sm:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 24px\n fontWeight: 700\n lineHeight: 1.25\n letterSpacing: 0\n title-lg:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 20px\n fontWeight: 700\n lineHeight: 1.3\n letterSpacing: 0\n title-md:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 18px\n fontWeight: 700\n lineHeight: 1.4\n letterSpacing: 0\n title-sm:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 16px\n fontWeight: 700\n lineHeight: 1.4\n letterSpacing: 0\n body-md:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 16px\n fontWeight: 300\n lineHeight: 1.55\n letterSpacing: 0\n body-sm:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 14px\n fontWeight: 300\n lineHeight: 1.55\n letterSpacing: 0\n caption:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 12px\n fontWeight: 400\n lineHeight: 1.4\n letterSpacing: 0.5px\n label-uppercase:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 13px\n fontWeight: 700\n lineHeight: 1.3\n letterSpacing: 1.5px\n textTransform: uppercase\n button:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 14px\n fontWeight: 700\n lineHeight: 1.0\n letterSpacing: 0.5px\n nav-link:\n fontFamily: \"'BMW Type Next Latin', sans-serif\"\n fontSize: 14px\n fontWeight: 400\n lineHeight: 1.4\n letterSpacing: 0.3px\n\nrounded:\n none: 0px\n xs: 2px\n sm: 4px\n md: 8px\n lg: 12px\n pill: 9999px\n full: 9999px\n\nspacing:\n xxs: 4px\n xs: 8px\n sm: 12px\n md: 16px\n lg: 24px\n xl: 32px\n xxl: 48px\n section: 80px\n\ncomponents:\n top-nav:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.nav-link}\"\n height: 64px\n button-primary:\n backgroundColor: \"{colors.primary}\"\n textColor: \"{colors.on-primary}\"\n typography: \"{typography.button}\"\n rounded: \"{rounded.none}\"\n padding: 14px 32px\n height: 48px\n button-primary-active:\n backgroundColor: \"{colors.primary-active}\"\n textColor: \"{colors.on-primary}\"\n rounded: \"{rounded.none}\"\n button-primary-disabled:\n backgroundColor: \"{colors.primary-disabled}\"\n textColor: \"{colors.muted}\"\n rounded: \"{rounded.none}\"\n button-secondary:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.button}\"\n rounded: \"{rounded.none}\"\n padding: 13px 31px\n height: 48px\n button-secondary-on-dark:\n backgroundColor: transparent\n textColor: \"{colors.on-dark}\"\n typography: \"{typography.button}\"\n rounded: \"{rounded.none}\"\n padding: 13px 31px\n button-text-link:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.label-uppercase}\"\n text-link:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n hero-band-dark:\n backgroundColor: \"{colors.surface-dark}\"\n textColor: \"{colors.on-dark}\"\n typography: \"{typography.display-xl}\"\n padding: 80px\n hero-photo-band:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.display-lg}\"\n padding: 80px\n model-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.title-md}\"\n rounded: \"{rounded.none}\"\n padding: 24px\n model-card-photo:\n backgroundColor: \"{colors.surface-card}\"\n rounded: \"{rounded.none}\"\n feature-photo-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.title-md}\"\n rounded: \"{rounded.none}\"\n padding: 24px\n spec-cell:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.display-sm}\"\n rounded: \"{rounded.none}\"\n padding: 24px\n inventory-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.title-sm}\"\n rounded: \"{rounded.none}\"\n padding: 16px\n filter-chip:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.caption}\"\n rounded: \"{rounded.none}\"\n padding: 8px 14px\n filter-chip-active:\n backgroundColor: \"{colors.ink}\"\n textColor: \"{colors.on-dark}\"\n rounded: \"{rounded.none}\"\n configurator-option-tile:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.none}\"\n padding: 16px 24px\n configurator-option-tile-selected:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n rounded: \"{rounded.none}\"\n padding: 15px 23px\n text-input:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.none}\"\n padding: 14px 16px\n height: 48px\n cookie-consent-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.body}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.none}\"\n padding: 24px\n category-tab:\n backgroundColor: transparent\n textColor: \"{colors.muted}\"\n typography: \"{typography.label-uppercase}\"\n rounded: \"{rounded.none}\"\n category-tab-active:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.label-uppercase}\"\n rounded: \"{rounded.none}\"\n m-stripe-divider:\n backgroundColor: transparent\n rounded: \"{rounded.none}\"\n cta-band-photo:\n backgroundColor: \"{colors.surface-dark}\"\n textColor: \"{colors.on-dark}\"\n typography: \"{typography.display-md}\"\n padding: 80px\n footer:\n backgroundColor: \"{colors.surface-soft}\"\n textColor: \"{colors.body}\"\n typography: \"{typography.body-sm}\"\n padding: 64px\n---\n\n## Overview\n\nBMW's corporate site carries a far more **measured, corporate-automotive** interface than its motorsport-bombastic cousin BMW M. The atmosphere is light: `{colors.canvas}` (#ffffff) is the base surface, `{colors.surface-card}` (#fafafa) carries the soft-grey card plates, and dark navy `{colors.surface-dark}` (#1a2129) appears only inside hero bands \u2014 one per page, framing the lead model render.\n\nType runs BMW's licensed **BMW Type Next Latin** at two weights: heavy 700 (display + button + nav) and Light 300 (body + secondary copy). That contrast \u2014 heavy display next to thin paragraph \u2014 is the editorial signature, channeling the brand's \"European-engineered\" voice. Weight 500 is deliberately absent; weight 400 only appears on caption and nav-link in neutral utility contexts.\n\nThe brand action color, **BMW corporate blue** (`{colors.primary}` \u2014 #1c69d4), works alone across every primary CTA \u2014 buttons are **rectangular, 0px corner**, with white type. The site rotates a blue-button + dark-navy-hero combination across page rhythm. The M tricolor stripe (`{colors.m-blue-light}` \u2192 `{colors.m-blue-dark}` \u2192 `{colors.m-red}`) only appears in motorsport contexts and as M-model badges/dividers \u2014 never in the corporate site's main language.\n\nThe configuration and reservation flows add a dealer-side inventory UI on top of the same system \u2014 filter chips, model cards, price tables \u2014 but typography and color stay identical; only density goes up.\n\n**Key Characteristics:**\n- Light `{colors.canvas}` is the base surface; dark navy `{colors.surface-dark}` appears only inside hero bands \u2014 page rhythm relies on contrast.\n- BMW corporate blue (`{colors.primary}` \u2014 #1c69d4) acts as the single primary action color.\n- BMW Type Next Latin: weight 700 display against weight 300 body is the signature.\n- Buttons are **rectangular, 0px radius** \u2014 corporate dialect, distinct from M's sportier radii.\n- Model cards run as 4-up or 5-up grids with no hairline border or only minimal border \u2014 just white plate + photo + title.\n- Photography (model renders) sits in environment, no shadow \u2014 depth comes entirely from color-block contrast.\n- M tricolor stripe appears only in M-model contexts \u2014 not part of the corporate language.\n- Section rhythm holds at `{spacing.section}` (80px) for every major band.\n\n## Colors\n\n### Brand & Accent\n- **BMW Blue (Primary)** (`{colors.primary}` \u2014 #1c69d4): The single brand action color. All primary CTAs, \"Learn More\" link prefixes (blue text), nav-link active state. Press shifts to `{colors.primary-active}` (#0653b6).\n- **M Blue Light** (`{colors.m-blue-light}` \u2014 #0066b1) + **M Blue Dark** (`{colors.m-blue-dark}` \u2014 #1c69d4) + **M Red** (`{colors.m-red}` \u2014 #e22718): The M tricolor stripe \u2014 appears on the corporate site only on M-model pages and the \"M\" badge. Never as CTA colors.\n\n### Surface\n- **Canvas** (`{colors.canvas}` \u2014 #ffffff): The default page surface.\n- **Surface Soft** (`{colors.surface-soft}` \u2014 #f7f7f7): Soft grey for the footer and sub-navigation bands.\n- **Surface Card** (`{colors.surface-card}` \u2014 #fafafa): The light plate behind a model card's photo block.\n- **Surface Strong** (`{colors.surface-strong}` \u2014 #ebebeb): A slightly heavier grey used as a section divider.\n- **Surface Dark** (`{colors.surface-dark}` \u2014 #1a2129): Dark navy for hero bands and large dark CTAs. Not pure black \u2014 carries a warm undertone.\n- **Surface Dark Elevated** (`{colors.surface-dark-elevated}` \u2014 #262e38): One step lighter, used for nested cards on top of the dark hero.\n\n### Hairlines\n- **Hairline** (`{colors.hairline}` \u2014 #e6e6e6): The 1px divider \u2014 input outline, configurator card outline, table separator.\n- **Hairline Strong** (`{colors.hairline-strong}` \u2014 #cccccc): A more visible 1px outline \u2014 disabled secondary buttons, emphasized table border.\n\n### Text\n- **Ink** (`{colors.ink}` \u2014 #262626): All display and primary text. Not pure black \u2014 soft against photography.\n- **Body** (`{colors.body}` \u2014 #3c3c3c): Default running text.\n- **Body Strong** (`{colors.body-strong}` \u2014 #1a1a1a): Emphasized paragraphs and lead text.\n- **Muted** (`{colors.muted}` \u2014 #6b6b6b): Footer links, breadcrumbs, captions.\n- **Muted Soft** (`{colors.muted-soft}` \u2014 #9a9a9a): Disabled text, fine-print legal.\n- **On Primary** (`{colors.on-primary}` \u2014 #ffffff): White text on a blue button.\n- **On Dark** (`{colors.on-dark}` \u2014 #ffffff): White text on a dark hero band.\n- **On Dark Soft** (`{colors.on-dark-soft}` \u2014 #bbbbbb): A slightly muted white for secondary text on dark bands.\n\n### Semantic\n- **Success** (`{colors.success}` \u2014 #22c55e): Confirmation messages and \"available\" indicators.\n- **Warning** (`{colors.warning}` \u2014 #f59e0b): Warning callouts.\n- **Error** (`{colors.error}` \u2014 #dc2626): Validation errors.\n\n## Typography\n\n### Font Family\nThe system runs **BMW Type Next Latin** in two cuts: regular (display + UI labels) and **BMW Type Next Latin Light** (body + secondary copy). Fallback stack: `system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif`.\n\nThe display/body split is functional:\n- BMW Type Next Latin (700) \u2192 display headlines, button labels, nav links\n- BMW Type Next Latin Light (300) \u2192 paragraphs, descriptive copy\n- BMW Type Next Latin (400) \u2192 caption, neutral nav-link contexts\n\nThis three-way split mirrors BMW M's \u2014 corporate and the M sub-brand share the same typographic DNA; only the weight/size ratios differ.\n\n### Hierarchy\n\n| Token | Size | Weight | Line Height | Letter Spacing | Use |\n|---|---|---|---|---|---|\n| `{typography.display-xl}` | 64px | 700 | 1.05 | 0 | Hero h1 (\"iX3\", model name) |\n| `{typography.display-lg}` | 48px | 700 | 1.1 | 0 | Section heads |\n| `{typography.display-md}` | 32px | 700 | 1.15 | 0 | Sub-section heads |\n| `{typography.display-sm}` | 24px | 700 | 1.25 | 0 | CTA-band headlines |\n| `{typography.title-lg}` | 20px | 700 | 1.3 | 0 | Card group titles |\n| `{typography.title-md}` | 18px | 700 | 1.4 | 0 | Model card title, intro paragraphs |\n| `{typography.title-sm}` | 16px | 700 | 1.4 | 0 | Inventory card title, list label |\n| `{typography.body-md}` | 16px | 300 (Light) | 1.55 | 0 | Default body \u2014 BMW Type Next Latin Light |\n| `{typography.body-sm}` | 14px | 300 (Light) | 1.55 | 0 | Footer body, fine-print |\n| `{typography.caption}` | 12px | 400 | 1.4 | 0.5px | Photo captions, meta |\n| `{typography.label-uppercase}` | 13px | 700 | 1.3 | 1.5px | \"LEARN MORE\" inline links, category tabs |\n| `{typography.button}` | 14px | 700 | 1.0 | 0.5px | Standard CTA button label |\n| `{typography.nav-link}` | 14px | 400 | 1.4 | 0.3px | Top-nav menu items |\n\n### Principles\n- The **700/300 contrast** is the editorial signature. Weight 500 is absent from the system.\n- **No negative letter-spacing** \u2014 BMW Type Next Latin works on a wide body, so tracking stays at default. Apple/Cal.com-style tightening reads off-brand here.\n- **UPPERCASE inline links** \u2014 \"LEARN MORE\"-style CTAs run uppercase with 1.5px tracking. The \"machined precision\" voice.\n- **Weight 400 lives in a narrow lane** \u2014 only caption and nav-link, both neutral utility roles.\n\n### Note on Font Substitutes\nBMW Type Next Latin is a licensed BMW typeface. Open-source alternatives:\n- **Inter** (variable) \u2014 close match at weight 700/300. Leave letter-spacing at 0.0em.\n- **Saira Condensed** \u2014 for a slightly more compressed BMW Type feel.\n\n## Layout\n\n### Spacing System\n- **Base unit:** 8px.\n- **Tokens:** `{spacing.xxs}` 4px \u00B7 `{spacing.xs}` 8px \u00B7 `{spacing.sm}` 12px \u00B7 `{spacing.md}` 16px \u00B7 `{spacing.lg}` 24px \u00B7 `{spacing.xl}` 32px \u00B7 `{spacing.xxl}` 48px \u00B7 `{spacing.section}` 80px.\n- **Section padding:** `{spacing.section}` (80px) for every major editorial band.\n- **Card internal padding:** `{spacing.lg}` (24px) for model and feature cards.\n\n### Grid & Container\n- **Max content width:** ~1440px center-aligned.\n- **Editorial body:** A single 12-column grid.\n- **Model card grids:** 4-up or 5-up at desktop, 2-up at tablet, 1-up on mobile.\n- **Configurator inventory grids:** 3-up filter row + 4-up vehicle cards, dense layout.\n\n### Whitespace Philosophy\nBMW's whitespace strategy is tighter than BMW M's motorsport-aerated grenadier \u2014 the corporate side is more utility-driven. Section rhythm is 80px (not M's 96px). Card padding is 24px (not M's 32px). The page is denser, more dealership-functional.\n\n## Elevation & Depth\n\n| Level | Treatment | Use |\n|---|---|---|\n| Flat | No shadow, no border | Body, top nav, footer, hero bands |\n| Soft hairline | 1px `{colors.hairline}` border | Configurator option tile, table divider |\n| Card surface | `{colors.surface-card}` background \u2014 no shadow | Model card photo plate |\n| Photographic | Edge-to-edge photography | Hero band, model renders |\n\nThe system never uses a drop shadow. Depth comes entirely from (a) color-block contrast (light canvas vs dark hero) and (b) photographic subject + lighting.\n\n### Decorative Depth\n- **`m-stripe-divider`** \u2014 a 4px-tall horizontal tricolor stripe (`{colors.m-blue-light}` \u2192 `{colors.m-blue-dark}` \u2192 `{colors.m-red}`). Only in M-model contexts, motorsport badges, or as an M-related section divider. Not part of the main corporate flow.\n- **Photographic depth** \u2014 full-bleed vehicle photography (lighting + subject) does the work chrome would otherwise do.\n\n## Shapes\n\n### Border Radius Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{rounded.none}` | 0px | Every button, card, input, configurator chip \u2014 the dominant radius |\n| `{rounded.xs}` | 2px | Very small badges, very rare |\n| `{rounded.sm}` | 4px | Small inline button (rare) |\n| `{rounded.md}` | 8px | Mobile-only collapse cards (rare) |\n| `{rounded.lg}` | 12px | Very rare \u2014 modal/dialog corners |\n| `{rounded.pill}` | 9999px | Filter chips in some contexts (rare) |\n| `{rounded.full}` | 9999px / 50% | Avatar, circular icon button |\n\nThe radius hierarchy is binary: **rectangular for everything, circular only for icon buttons.** A clear departure from the soft-cornered SaaS dialect of Apple or Cal.com \u2014 closer to BMW corporate-automotive's \"engineered precision\" voice.\n\n### Photography Geometry\n- Hero photography is full-bleed at 16:9 or 21:9 cinematic ratio.\n- Model card photos sit at 16:10, edge-to-edge with `{rounded.none}` corners.\n- Configurator vehicle renders sit on a white studio background, full silhouette visible.\n\n## Components\n\n### Top Navigation\n\n**`top-nav`** \u2014 A white sticky nav bar pinned to the top of the page. 64px tall, `{colors.canvas}` background. Left: BMW circular badge logo; center: primary horizontal menu (Models, Next Generation, Pre-Owned, Dealers, Test Drive); right: cart icon, language picker, profile. Menu items render in `{typography.nav-link}` (14px / 400 / 0.3px tracking).\n\n### Buttons\n\n**`button-primary`** \u2014 The signature primary CTA. Background `{colors.primary}` (BMW Blue #1c69d4), text `{colors.on-primary}`, type `{typography.button}` (BMW Type Next Latin 14px / 700 / 0.5px tracking), padding 14px \u00D7 32px, height 48px, rounded `{rounded.none}` (0px \u2014 rectangular). Press state: `button-primary-active` shifts to `{colors.primary-active}`.\n\n**`button-secondary`** \u2014 A white button with a hairline outline. Background `{colors.canvas}`, text `{colors.ink}`, 1px `{colors.hairline-strong}` border, same padding + height + radius.\n\n**`button-secondary-on-dark`** \u2014 Used over a dark hero band. Background transparent, text `{colors.on-dark}`, 1px `{colors.on-dark}` border, same rectangular shape.\n\n**`button-text-link`** \u2014 An inline UPPERCASE letter-spaced link. No background, text `{colors.ink}`, type `{typography.label-uppercase}` (13px / 700 / 1.5px tracking). Reads as \"LEARN MORE\", terminated by a `\u203A` chevron.\n\n**`text-link`** \u2014 An inline link inside body copy. `{colors.ink}` text, no underline by default; underlines per context.\n\n### Cards & Containers\n\n**`hero-band-dark`** \u2014 Full-width dark navy hero. Background `{colors.surface-dark}`, text `{colors.on-dark}`, vertical padding `{spacing.section}` (80px). Centered: model name in `{typography.display-xl}` (64px / 700) + sub-headline + vehicle render (right-aligned or below). A single `{component.button-primary}` (blue) or `{component.button-secondary-on-dark}`.\n\n**`hero-photo-band`** \u2014 A light-canvas model showcase band. Background `{colors.canvas}`, text `{colors.ink}`. The vehicle render takes the wide area; right or below, a headline + two link CTAs + sub-tagline.\n\n**`model-card`** \u2014 Used in 4-up or 5-up model card grids on the homepage (\"BMW iX3\", \"BMW iX\", \"BMW 5 Series\"). Background `{colors.canvas}`, rounded `{rounded.none}`, padding `{spacing.lg}` (24px). Contents: model render at the top (`{component.model-card-photo}` on `{colors.surface-card}`), model name in `{typography.title-md}` (18px / 700) below, a one-line tagline in `{typography.body-sm}` (14px / 300), and a `{component.button-text-link}` (\"LEARN MORE \u203A\").\n\n**`model-card-photo`** \u2014 The card's photo plate. Background `{colors.surface-card}` (#fafafa \u2014 soft grey), rounded `{rounded.none}`, vehicle render in full silhouette. Zero padding \u2014 the photo runs edge-to-edge.\n\n**`feature-photo-card`** \u2014 A feature/lifestyle card. Background `{colors.canvas}`, padding `{spacing.lg}`. 16:9 photo at the top, `{typography.title-md}` headline + body excerpt below.\n\n**`spec-cell`** \u2014 A technical spec cell (model detail page). Transparent background, separated by hairline dividers. Value on top (`{typography.display-sm}` 24px / 700), label below (`{typography.label-uppercase}`).\n\n### Inventory & Configurator\n\n**`inventory-card`** \u2014 One card per vehicle on the dealer inventory page. Background `{colors.canvas}`, padding `{spacing.md}` (16px), rounded `{rounded.none}`. Vehicle photo on top, model + variant name + price + \"View\" link below.\n\n**`filter-chip`** + **`filter-chip-active`** \u2014 Inventory filter chips (model, year, price range). Inactive: background `{colors.canvas}`, 1px `{colors.hairline-strong}` border, text `{colors.ink}`, type `{typography.caption}`. Active: background `{colors.ink}`, text `{colors.on-dark}`. Padding 8px \u00D7 14px, radius `{rounded.none}`.\n\n**`configurator-option-tile`** + **`configurator-option-tile-selected`** \u2014 Configurator selection cell (color, wheels, upholstery). Inactive: background `{colors.canvas}`, 1px hairline. Selected: 2px `{colors.primary}` border. Padding 16px \u00D7 24px, radius `{rounded.none}`.\n\n### Inputs & Forms\n\n**`text-input`** \u2014 Standard text input. Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-md}`, rounded `{rounded.none}` (0px), padding 14px \u00D7 16px, height 48px, 1px hairline border. On focus, the border thickens to ink.\n\n**`cookie-consent-card`** \u2014 Cookie banner. Background `{colors.canvas}`, 1px hairline, padding `{spacing.lg}` (24px), `{typography.body-sm}` (14px / 300 \u2014 Light even in legal copy).\n\n### Tabs / Tags\n\n**`category-tab`** + **`category-tab-active`** \u2014 Category sub-nav. Inactive: transparent + `{colors.muted}` UPPERCASE label. Active: transparent + `{colors.ink}` UPPERCASE label + 2px ink underline. 12px vertical padding, no horizontal radius.\n\n### Brand Signature\n\n**`m-stripe-divider`** \u2014 A 4px-tall horizontal tricolor stripe (`{colors.m-blue-light}` \u2192 `{colors.m-blue-dark}` \u2192 `{colors.m-red}`). Only in M-model contexts, motorsport badges, or as an M-related section divider. Absent from the corporate main flow; on M-model detail pages and the M Performance badge it plays an inline divider role.\n\n### CTA / Footer\n\n**`cta-band-photo`** \u2014 A pre-footer \"Discover the New iX3\"-style band. Background `{colors.surface-dark}` with a full-bleed vehicle photo. Centered headline in `{typography.display-md}` (32px / 700) + a single `{component.button-secondary-on-dark}`. 80px padding.\n\n**`footer`** \u2014 The closing soft-grey footer. Background `{colors.surface-soft}` (#f7f7f7 \u2014 not pure white \u2014 soft grey), text `{colors.body}`. A 4-column link list: Models / Services / Dealers / About. Vertical padding 64px. Below, a copyright line in `{typography.body-sm}` with `{colors.muted}`.\n\n## Do's and Don'ts\n\n### Do\n- Sit every page on `{colors.canvas}` (pure white); reserve `{colors.surface-dark}` for hero bands only.\n- Pair primary CTAs with `{colors.primary}` (BMW Blue) + `{colors.on-primary}` white text + `{rounded.none}` 0px corners \u2014 the corporate signature.\n- Set display headlines in BMW Type Next Latin 700 and body in Light 300. The contrast is non-negotiable.\n- Use UPPERCASE letter-spaced links like \"LEARN MORE\" as inline CTAs.\n- Place the model card photo on `{colors.surface-card}` with the title beneath \u2014 the standard BMW corporate pattern.\n- Hold section rhythm at `{spacing.section}` (80px) \u2014 tighter than BMW M's 96px.\n- Reserve the M tricolor stripe for M-model contexts and motorsport dividers.\n\n### Don't\n- Don't add a brand color other than blue \u2014 BMW Blue is the only primary action color.\n- Don't use pill or rounded buttons \u2014 `{rounded.none}` (0px) rectangular IS the brand button.\n- Don't drop display weight to 500 \u2014 the system uses 700 / 400 / 300; 500 is absent.\n- Don't bold body type \u2014 Light 300 is the BMW corporate editorial voice.\n- Don't add drop shadows to cards \u2014 depth comes from photo + color-block contrast.\n- Don't repeat the same surface mode across two consecutive bands \u2014 light \u2192 dark hero \u2192 light \u2192 light feature \u2192 dark CTA \u2192 light footer rotation is required.\n- Don't use the M tricolor stripe as a CTA fill \u2014 divider/accent role only.\n- Don't mix languages in a single page \u2014 UI language must stay consistent.\n\n## Responsive Behavior\n\n### Breakpoints\n\n| Name | Width | Key Changes |\n|---|---|---|\n| Mobile | < 768px | Hamburger nav; hero h1 64\u219240px; model card grid 1-up; configurator filter chips 2-up; footer 4 col \u2192 1 col |\n| Tablet | 768\u20131024px | Top nav narrows, secondary menu hides under \"More\"; model card 2-up; inventory 2-up |\n| Desktop | 1024\u20131440px | Full top-nav; 4-up or 5-up model card grid; inventory 3-up; full configurator UI |\n| Wide | > 1440px | Same as desktop, content fixed at 1440px; gutters absorb the rest |\n\n### Touch Targets\n- `{component.button-primary}` minimum 48 \u00D7 48px \u2014 above WCAG AAA (44 \u00D7 44).\n- `{component.text-input}` height 48px.\n- Category tabs run with 12px vertical padding, giving an effective tap area > 44px.\n\n### Collapsing Strategy\n- The top nav collapses to a hamburger below 768px; the menu opens as a full-screen sheet.\n- The hero band's internal layout drops to a single column.\n- Model card grid 4-up/5-up \u2192 2-up \u2192 1-up.\n- The configurator filter chip row scrolls horizontally on mobile.\n- The M tricolor stripe stays at 4px height across every breakpoint.\n\n### Image Behavior\n- Model renders scale at every breakpoint while preserving native aspect ratios.\n- Hero photography may shift to a more vertical crop on mobile (art direction).\n- Inventory vehicle photos may move from 16:9 to 4:3 on mobile.\n\n## Iteration Guide\n\n1. Focus on a single component. Reference its YAML key directly (`{component.model-card}`, `{component.button-primary}`).\n2. New components default to `{rounded.none}` (0px). Use `{rounded.full}` only for circular icon buttons.\n3. Variants (`-active`, `-disabled`, `-selected`) live as separate entries inside the `components:` block.\n4. `{token.refs}` everywhere \u2014 never inline hex.\n5. Hover state is never documented. Only Default and Active/Pressed states.\n6. Display headlines stay BMW Type Next Latin 700; body stays Light 300; the trio is fixed.\n7. Keep UI strings in a single language \u2014 match the locale of the page.\n\n## Known Gaps\n\n- BMW Type Next Latin is licensed to BMW and not published as a public web font; Inter at weights 700/300 is documented as the substitute.\n- Animation and transition timings (configurator color swap, model card hover-reveal) are out of scope here.\n- Form validation states beyond `{component.text-input}` focus were not extracted \u2014 error/success states would need a dedicated form page.\n- The dealer inventory sub-domain shares typography and color with the main corporate site; only UI density rises (filters, tables, prices).\n- A cookie consent overlay can occlude part of the hero \u2014 the lead hero band content may not be fully captured.\n- The M tricolor stripe appears infrequently on this corporate site; full motorsport context lives on the BMW M site.\n";
2
+
3
+ export { bmwBrief };
@@ -0,0 +1,550 @@
1
+ // src/presets/_briefs/bmw.ts
2
+ var bmwBrief = `---
3
+ version: alpha
4
+ name: BMW
5
+ description: BMW's corporate site \u2014 distinct from BMW M's motorsport-bombastic variant, this is a measured and settled corporate-automotive interface. On a light (cream-tinted white) canvas, BMW corporate blue (#1c69d4) carries every primary CTA; dark navy hero bands frame model photography. BMW Type Next Latin sets the entire hierarchy on two weights \u2014 heavy 700 display and Light 300 body. Configuration and reservation flows ride a card-based 4-up grid, where each card holds a model render, a name, and a "Learn More" link.
6
+
7
+ colors:
8
+ primary: "#1c69d4"
9
+ primary-active: "#0653b6"
10
+ primary-disabled: "#d6d6d6"
11
+ ink: "#262626"
12
+ body: "#3c3c3c"
13
+ body-strong: "#1a1a1a"
14
+ muted: "#6b6b6b"
15
+ muted-soft: "#9a9a9a"
16
+ hairline: "#e6e6e6"
17
+ hairline-strong: "#cccccc"
18
+ canvas: "#ffffff"
19
+ surface-soft: "#f7f7f7"
20
+ surface-card: "#fafafa"
21
+ surface-strong: "#ebebeb"
22
+ surface-dark: "#1a2129"
23
+ surface-dark-elevated: "#262e38"
24
+ on-primary: "#ffffff"
25
+ on-dark: "#ffffff"
26
+ on-dark-soft: "#bbbbbb"
27
+ m-blue-light: "#0066b1"
28
+ m-blue-dark: "#1c69d4"
29
+ m-red: "#e22718"
30
+ success: "#22c55e"
31
+ warning: "#f59e0b"
32
+ error: "#dc2626"
33
+
34
+ typography:
35
+ display-xl:
36
+ fontFamily: "'BMW Type Next Latin', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif"
37
+ fontSize: 64px
38
+ fontWeight: 700
39
+ lineHeight: 1.05
40
+ letterSpacing: 0
41
+ display-lg:
42
+ fontFamily: "'BMW Type Next Latin', sans-serif"
43
+ fontSize: 48px
44
+ fontWeight: 700
45
+ lineHeight: 1.1
46
+ letterSpacing: 0
47
+ display-md:
48
+ fontFamily: "'BMW Type Next Latin', sans-serif"
49
+ fontSize: 32px
50
+ fontWeight: 700
51
+ lineHeight: 1.15
52
+ letterSpacing: 0
53
+ display-sm:
54
+ fontFamily: "'BMW Type Next Latin', sans-serif"
55
+ fontSize: 24px
56
+ fontWeight: 700
57
+ lineHeight: 1.25
58
+ letterSpacing: 0
59
+ title-lg:
60
+ fontFamily: "'BMW Type Next Latin', sans-serif"
61
+ fontSize: 20px
62
+ fontWeight: 700
63
+ lineHeight: 1.3
64
+ letterSpacing: 0
65
+ title-md:
66
+ fontFamily: "'BMW Type Next Latin', sans-serif"
67
+ fontSize: 18px
68
+ fontWeight: 700
69
+ lineHeight: 1.4
70
+ letterSpacing: 0
71
+ title-sm:
72
+ fontFamily: "'BMW Type Next Latin', sans-serif"
73
+ fontSize: 16px
74
+ fontWeight: 700
75
+ lineHeight: 1.4
76
+ letterSpacing: 0
77
+ body-md:
78
+ fontFamily: "'BMW Type Next Latin', sans-serif"
79
+ fontSize: 16px
80
+ fontWeight: 300
81
+ lineHeight: 1.55
82
+ letterSpacing: 0
83
+ body-sm:
84
+ fontFamily: "'BMW Type Next Latin', sans-serif"
85
+ fontSize: 14px
86
+ fontWeight: 300
87
+ lineHeight: 1.55
88
+ letterSpacing: 0
89
+ caption:
90
+ fontFamily: "'BMW Type Next Latin', sans-serif"
91
+ fontSize: 12px
92
+ fontWeight: 400
93
+ lineHeight: 1.4
94
+ letterSpacing: 0.5px
95
+ label-uppercase:
96
+ fontFamily: "'BMW Type Next Latin', sans-serif"
97
+ fontSize: 13px
98
+ fontWeight: 700
99
+ lineHeight: 1.3
100
+ letterSpacing: 1.5px
101
+ textTransform: uppercase
102
+ button:
103
+ fontFamily: "'BMW Type Next Latin', sans-serif"
104
+ fontSize: 14px
105
+ fontWeight: 700
106
+ lineHeight: 1.0
107
+ letterSpacing: 0.5px
108
+ nav-link:
109
+ fontFamily: "'BMW Type Next Latin', sans-serif"
110
+ fontSize: 14px
111
+ fontWeight: 400
112
+ lineHeight: 1.4
113
+ letterSpacing: 0.3px
114
+
115
+ rounded:
116
+ none: 0px
117
+ xs: 2px
118
+ sm: 4px
119
+ md: 8px
120
+ lg: 12px
121
+ pill: 9999px
122
+ full: 9999px
123
+
124
+ spacing:
125
+ xxs: 4px
126
+ xs: 8px
127
+ sm: 12px
128
+ md: 16px
129
+ lg: 24px
130
+ xl: 32px
131
+ xxl: 48px
132
+ section: 80px
133
+
134
+ components:
135
+ top-nav:
136
+ backgroundColor: "{colors.canvas}"
137
+ textColor: "{colors.ink}"
138
+ typography: "{typography.nav-link}"
139
+ height: 64px
140
+ button-primary:
141
+ backgroundColor: "{colors.primary}"
142
+ textColor: "{colors.on-primary}"
143
+ typography: "{typography.button}"
144
+ rounded: "{rounded.none}"
145
+ padding: 14px 32px
146
+ height: 48px
147
+ button-primary-active:
148
+ backgroundColor: "{colors.primary-active}"
149
+ textColor: "{colors.on-primary}"
150
+ rounded: "{rounded.none}"
151
+ button-primary-disabled:
152
+ backgroundColor: "{colors.primary-disabled}"
153
+ textColor: "{colors.muted}"
154
+ rounded: "{rounded.none}"
155
+ button-secondary:
156
+ backgroundColor: "{colors.canvas}"
157
+ textColor: "{colors.ink}"
158
+ typography: "{typography.button}"
159
+ rounded: "{rounded.none}"
160
+ padding: 13px 31px
161
+ height: 48px
162
+ button-secondary-on-dark:
163
+ backgroundColor: transparent
164
+ textColor: "{colors.on-dark}"
165
+ typography: "{typography.button}"
166
+ rounded: "{rounded.none}"
167
+ padding: 13px 31px
168
+ button-text-link:
169
+ backgroundColor: transparent
170
+ textColor: "{colors.ink}"
171
+ typography: "{typography.label-uppercase}"
172
+ text-link:
173
+ backgroundColor: transparent
174
+ textColor: "{colors.ink}"
175
+ typography: "{typography.body-md}"
176
+ hero-band-dark:
177
+ backgroundColor: "{colors.surface-dark}"
178
+ textColor: "{colors.on-dark}"
179
+ typography: "{typography.display-xl}"
180
+ padding: 80px
181
+ hero-photo-band:
182
+ backgroundColor: "{colors.canvas}"
183
+ textColor: "{colors.ink}"
184
+ typography: "{typography.display-lg}"
185
+ padding: 80px
186
+ model-card:
187
+ backgroundColor: "{colors.canvas}"
188
+ textColor: "{colors.ink}"
189
+ typography: "{typography.title-md}"
190
+ rounded: "{rounded.none}"
191
+ padding: 24px
192
+ model-card-photo:
193
+ backgroundColor: "{colors.surface-card}"
194
+ rounded: "{rounded.none}"
195
+ feature-photo-card:
196
+ backgroundColor: "{colors.canvas}"
197
+ textColor: "{colors.ink}"
198
+ typography: "{typography.title-md}"
199
+ rounded: "{rounded.none}"
200
+ padding: 24px
201
+ spec-cell:
202
+ backgroundColor: transparent
203
+ textColor: "{colors.ink}"
204
+ typography: "{typography.display-sm}"
205
+ rounded: "{rounded.none}"
206
+ padding: 24px
207
+ inventory-card:
208
+ backgroundColor: "{colors.canvas}"
209
+ textColor: "{colors.ink}"
210
+ typography: "{typography.title-sm}"
211
+ rounded: "{rounded.none}"
212
+ padding: 16px
213
+ filter-chip:
214
+ backgroundColor: "{colors.canvas}"
215
+ textColor: "{colors.ink}"
216
+ typography: "{typography.caption}"
217
+ rounded: "{rounded.none}"
218
+ padding: 8px 14px
219
+ filter-chip-active:
220
+ backgroundColor: "{colors.ink}"
221
+ textColor: "{colors.on-dark}"
222
+ rounded: "{rounded.none}"
223
+ configurator-option-tile:
224
+ backgroundColor: "{colors.canvas}"
225
+ textColor: "{colors.ink}"
226
+ typography: "{typography.body-md}"
227
+ rounded: "{rounded.none}"
228
+ padding: 16px 24px
229
+ configurator-option-tile-selected:
230
+ backgroundColor: "{colors.canvas}"
231
+ textColor: "{colors.ink}"
232
+ rounded: "{rounded.none}"
233
+ padding: 15px 23px
234
+ text-input:
235
+ backgroundColor: "{colors.canvas}"
236
+ textColor: "{colors.ink}"
237
+ typography: "{typography.body-md}"
238
+ rounded: "{rounded.none}"
239
+ padding: 14px 16px
240
+ height: 48px
241
+ cookie-consent-card:
242
+ backgroundColor: "{colors.canvas}"
243
+ textColor: "{colors.body}"
244
+ typography: "{typography.body-sm}"
245
+ rounded: "{rounded.none}"
246
+ padding: 24px
247
+ category-tab:
248
+ backgroundColor: transparent
249
+ textColor: "{colors.muted}"
250
+ typography: "{typography.label-uppercase}"
251
+ rounded: "{rounded.none}"
252
+ category-tab-active:
253
+ backgroundColor: transparent
254
+ textColor: "{colors.ink}"
255
+ typography: "{typography.label-uppercase}"
256
+ rounded: "{rounded.none}"
257
+ m-stripe-divider:
258
+ backgroundColor: transparent
259
+ rounded: "{rounded.none}"
260
+ cta-band-photo:
261
+ backgroundColor: "{colors.surface-dark}"
262
+ textColor: "{colors.on-dark}"
263
+ typography: "{typography.display-md}"
264
+ padding: 80px
265
+ footer:
266
+ backgroundColor: "{colors.surface-soft}"
267
+ textColor: "{colors.body}"
268
+ typography: "{typography.body-sm}"
269
+ padding: 64px
270
+ ---
271
+
272
+ ## Overview
273
+
274
+ BMW's corporate site carries a far more **measured, corporate-automotive** interface than its motorsport-bombastic cousin BMW M. The atmosphere is light: \`{colors.canvas}\` (#ffffff) is the base surface, \`{colors.surface-card}\` (#fafafa) carries the soft-grey card plates, and dark navy \`{colors.surface-dark}\` (#1a2129) appears only inside hero bands \u2014 one per page, framing the lead model render.
275
+
276
+ Type runs BMW's licensed **BMW Type Next Latin** at two weights: heavy 700 (display + button + nav) and Light 300 (body + secondary copy). That contrast \u2014 heavy display next to thin paragraph \u2014 is the editorial signature, channeling the brand's "European-engineered" voice. Weight 500 is deliberately absent; weight 400 only appears on caption and nav-link in neutral utility contexts.
277
+
278
+ The brand action color, **BMW corporate blue** (\`{colors.primary}\` \u2014 #1c69d4), works alone across every primary CTA \u2014 buttons are **rectangular, 0px corner**, with white type. The site rotates a blue-button + dark-navy-hero combination across page rhythm. The M tricolor stripe (\`{colors.m-blue-light}\` \u2192 \`{colors.m-blue-dark}\` \u2192 \`{colors.m-red}\`) only appears in motorsport contexts and as M-model badges/dividers \u2014 never in the corporate site's main language.
279
+
280
+ The configuration and reservation flows add a dealer-side inventory UI on top of the same system \u2014 filter chips, model cards, price tables \u2014 but typography and color stay identical; only density goes up.
281
+
282
+ **Key Characteristics:**
283
+ - Light \`{colors.canvas}\` is the base surface; dark navy \`{colors.surface-dark}\` appears only inside hero bands \u2014 page rhythm relies on contrast.
284
+ - BMW corporate blue (\`{colors.primary}\` \u2014 #1c69d4) acts as the single primary action color.
285
+ - BMW Type Next Latin: weight 700 display against weight 300 body is the signature.
286
+ - Buttons are **rectangular, 0px radius** \u2014 corporate dialect, distinct from M's sportier radii.
287
+ - Model cards run as 4-up or 5-up grids with no hairline border or only minimal border \u2014 just white plate + photo + title.
288
+ - Photography (model renders) sits in environment, no shadow \u2014 depth comes entirely from color-block contrast.
289
+ - M tricolor stripe appears only in M-model contexts \u2014 not part of the corporate language.
290
+ - Section rhythm holds at \`{spacing.section}\` (80px) for every major band.
291
+
292
+ ## Colors
293
+
294
+ ### Brand & Accent
295
+ - **BMW Blue (Primary)** (\`{colors.primary}\` \u2014 #1c69d4): The single brand action color. All primary CTAs, "Learn More" link prefixes (blue text), nav-link active state. Press shifts to \`{colors.primary-active}\` (#0653b6).
296
+ - **M Blue Light** (\`{colors.m-blue-light}\` \u2014 #0066b1) + **M Blue Dark** (\`{colors.m-blue-dark}\` \u2014 #1c69d4) + **M Red** (\`{colors.m-red}\` \u2014 #e22718): The M tricolor stripe \u2014 appears on the corporate site only on M-model pages and the "M" badge. Never as CTA colors.
297
+
298
+ ### Surface
299
+ - **Canvas** (\`{colors.canvas}\` \u2014 #ffffff): The default page surface.
300
+ - **Surface Soft** (\`{colors.surface-soft}\` \u2014 #f7f7f7): Soft grey for the footer and sub-navigation bands.
301
+ - **Surface Card** (\`{colors.surface-card}\` \u2014 #fafafa): The light plate behind a model card's photo block.
302
+ - **Surface Strong** (\`{colors.surface-strong}\` \u2014 #ebebeb): A slightly heavier grey used as a section divider.
303
+ - **Surface Dark** (\`{colors.surface-dark}\` \u2014 #1a2129): Dark navy for hero bands and large dark CTAs. Not pure black \u2014 carries a warm undertone.
304
+ - **Surface Dark Elevated** (\`{colors.surface-dark-elevated}\` \u2014 #262e38): One step lighter, used for nested cards on top of the dark hero.
305
+
306
+ ### Hairlines
307
+ - **Hairline** (\`{colors.hairline}\` \u2014 #e6e6e6): The 1px divider \u2014 input outline, configurator card outline, table separator.
308
+ - **Hairline Strong** (\`{colors.hairline-strong}\` \u2014 #cccccc): A more visible 1px outline \u2014 disabled secondary buttons, emphasized table border.
309
+
310
+ ### Text
311
+ - **Ink** (\`{colors.ink}\` \u2014 #262626): All display and primary text. Not pure black \u2014 soft against photography.
312
+ - **Body** (\`{colors.body}\` \u2014 #3c3c3c): Default running text.
313
+ - **Body Strong** (\`{colors.body-strong}\` \u2014 #1a1a1a): Emphasized paragraphs and lead text.
314
+ - **Muted** (\`{colors.muted}\` \u2014 #6b6b6b): Footer links, breadcrumbs, captions.
315
+ - **Muted Soft** (\`{colors.muted-soft}\` \u2014 #9a9a9a): Disabled text, fine-print legal.
316
+ - **On Primary** (\`{colors.on-primary}\` \u2014 #ffffff): White text on a blue button.
317
+ - **On Dark** (\`{colors.on-dark}\` \u2014 #ffffff): White text on a dark hero band.
318
+ - **On Dark Soft** (\`{colors.on-dark-soft}\` \u2014 #bbbbbb): A slightly muted white for secondary text on dark bands.
319
+
320
+ ### Semantic
321
+ - **Success** (\`{colors.success}\` \u2014 #22c55e): Confirmation messages and "available" indicators.
322
+ - **Warning** (\`{colors.warning}\` \u2014 #f59e0b): Warning callouts.
323
+ - **Error** (\`{colors.error}\` \u2014 #dc2626): Validation errors.
324
+
325
+ ## Typography
326
+
327
+ ### Font Family
328
+ The system runs **BMW Type Next Latin** in two cuts: regular (display + UI labels) and **BMW Type Next Latin Light** (body + secondary copy). Fallback stack: \`system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif\`.
329
+
330
+ The display/body split is functional:
331
+ - BMW Type Next Latin (700) \u2192 display headlines, button labels, nav links
332
+ - BMW Type Next Latin Light (300) \u2192 paragraphs, descriptive copy
333
+ - BMW Type Next Latin (400) \u2192 caption, neutral nav-link contexts
334
+
335
+ This three-way split mirrors BMW M's \u2014 corporate and the M sub-brand share the same typographic DNA; only the weight/size ratios differ.
336
+
337
+ ### Hierarchy
338
+
339
+ | Token | Size | Weight | Line Height | Letter Spacing | Use |
340
+ |---|---|---|---|---|---|
341
+ | \`{typography.display-xl}\` | 64px | 700 | 1.05 | 0 | Hero h1 ("iX3", model name) |
342
+ | \`{typography.display-lg}\` | 48px | 700 | 1.1 | 0 | Section heads |
343
+ | \`{typography.display-md}\` | 32px | 700 | 1.15 | 0 | Sub-section heads |
344
+ | \`{typography.display-sm}\` | 24px | 700 | 1.25 | 0 | CTA-band headlines |
345
+ | \`{typography.title-lg}\` | 20px | 700 | 1.3 | 0 | Card group titles |
346
+ | \`{typography.title-md}\` | 18px | 700 | 1.4 | 0 | Model card title, intro paragraphs |
347
+ | \`{typography.title-sm}\` | 16px | 700 | 1.4 | 0 | Inventory card title, list label |
348
+ | \`{typography.body-md}\` | 16px | 300 (Light) | 1.55 | 0 | Default body \u2014 BMW Type Next Latin Light |
349
+ | \`{typography.body-sm}\` | 14px | 300 (Light) | 1.55 | 0 | Footer body, fine-print |
350
+ | \`{typography.caption}\` | 12px | 400 | 1.4 | 0.5px | Photo captions, meta |
351
+ | \`{typography.label-uppercase}\` | 13px | 700 | 1.3 | 1.5px | "LEARN MORE" inline links, category tabs |
352
+ | \`{typography.button}\` | 14px | 700 | 1.0 | 0.5px | Standard CTA button label |
353
+ | \`{typography.nav-link}\` | 14px | 400 | 1.4 | 0.3px | Top-nav menu items |
354
+
355
+ ### Principles
356
+ - The **700/300 contrast** is the editorial signature. Weight 500 is absent from the system.
357
+ - **No negative letter-spacing** \u2014 BMW Type Next Latin works on a wide body, so tracking stays at default. Apple/Cal.com-style tightening reads off-brand here.
358
+ - **UPPERCASE inline links** \u2014 "LEARN MORE"-style CTAs run uppercase with 1.5px tracking. The "machined precision" voice.
359
+ - **Weight 400 lives in a narrow lane** \u2014 only caption and nav-link, both neutral utility roles.
360
+
361
+ ### Note on Font Substitutes
362
+ BMW Type Next Latin is a licensed BMW typeface. Open-source alternatives:
363
+ - **Inter** (variable) \u2014 close match at weight 700/300. Leave letter-spacing at 0.0em.
364
+ - **Saira Condensed** \u2014 for a slightly more compressed BMW Type feel.
365
+
366
+ ## Layout
367
+
368
+ ### Spacing System
369
+ - **Base unit:** 8px.
370
+ - **Tokens:** \`{spacing.xxs}\` 4px \xB7 \`{spacing.xs}\` 8px \xB7 \`{spacing.sm}\` 12px \xB7 \`{spacing.md}\` 16px \xB7 \`{spacing.lg}\` 24px \xB7 \`{spacing.xl}\` 32px \xB7 \`{spacing.xxl}\` 48px \xB7 \`{spacing.section}\` 80px.
371
+ - **Section padding:** \`{spacing.section}\` (80px) for every major editorial band.
372
+ - **Card internal padding:** \`{spacing.lg}\` (24px) for model and feature cards.
373
+
374
+ ### Grid & Container
375
+ - **Max content width:** ~1440px center-aligned.
376
+ - **Editorial body:** A single 12-column grid.
377
+ - **Model card grids:** 4-up or 5-up at desktop, 2-up at tablet, 1-up on mobile.
378
+ - **Configurator inventory grids:** 3-up filter row + 4-up vehicle cards, dense layout.
379
+
380
+ ### Whitespace Philosophy
381
+ BMW's whitespace strategy is tighter than BMW M's motorsport-aerated grenadier \u2014 the corporate side is more utility-driven. Section rhythm is 80px (not M's 96px). Card padding is 24px (not M's 32px). The page is denser, more dealership-functional.
382
+
383
+ ## Elevation & Depth
384
+
385
+ | Level | Treatment | Use |
386
+ |---|---|---|
387
+ | Flat | No shadow, no border | Body, top nav, footer, hero bands |
388
+ | Soft hairline | 1px \`{colors.hairline}\` border | Configurator option tile, table divider |
389
+ | Card surface | \`{colors.surface-card}\` background \u2014 no shadow | Model card photo plate |
390
+ | Photographic | Edge-to-edge photography | Hero band, model renders |
391
+
392
+ The system never uses a drop shadow. Depth comes entirely from (a) color-block contrast (light canvas vs dark hero) and (b) photographic subject + lighting.
393
+
394
+ ### Decorative Depth
395
+ - **\`m-stripe-divider\`** \u2014 a 4px-tall horizontal tricolor stripe (\`{colors.m-blue-light}\` \u2192 \`{colors.m-blue-dark}\` \u2192 \`{colors.m-red}\`). Only in M-model contexts, motorsport badges, or as an M-related section divider. Not part of the main corporate flow.
396
+ - **Photographic depth** \u2014 full-bleed vehicle photography (lighting + subject) does the work chrome would otherwise do.
397
+
398
+ ## Shapes
399
+
400
+ ### Border Radius Scale
401
+
402
+ | Token | Value | Use |
403
+ |---|---|---|
404
+ | \`{rounded.none}\` | 0px | Every button, card, input, configurator chip \u2014 the dominant radius |
405
+ | \`{rounded.xs}\` | 2px | Very small badges, very rare |
406
+ | \`{rounded.sm}\` | 4px | Small inline button (rare) |
407
+ | \`{rounded.md}\` | 8px | Mobile-only collapse cards (rare) |
408
+ | \`{rounded.lg}\` | 12px | Very rare \u2014 modal/dialog corners |
409
+ | \`{rounded.pill}\` | 9999px | Filter chips in some contexts (rare) |
410
+ | \`{rounded.full}\` | 9999px / 50% | Avatar, circular icon button |
411
+
412
+ The radius hierarchy is binary: **rectangular for everything, circular only for icon buttons.** A clear departure from the soft-cornered SaaS dialect of Apple or Cal.com \u2014 closer to BMW corporate-automotive's "engineered precision" voice.
413
+
414
+ ### Photography Geometry
415
+ - Hero photography is full-bleed at 16:9 or 21:9 cinematic ratio.
416
+ - Model card photos sit at 16:10, edge-to-edge with \`{rounded.none}\` corners.
417
+ - Configurator vehicle renders sit on a white studio background, full silhouette visible.
418
+
419
+ ## Components
420
+
421
+ ### Top Navigation
422
+
423
+ **\`top-nav\`** \u2014 A white sticky nav bar pinned to the top of the page. 64px tall, \`{colors.canvas}\` background. Left: BMW circular badge logo; center: primary horizontal menu (Models, Next Generation, Pre-Owned, Dealers, Test Drive); right: cart icon, language picker, profile. Menu items render in \`{typography.nav-link}\` (14px / 400 / 0.3px tracking).
424
+
425
+ ### Buttons
426
+
427
+ **\`button-primary\`** \u2014 The signature primary CTA. Background \`{colors.primary}\` (BMW Blue #1c69d4), text \`{colors.on-primary}\`, type \`{typography.button}\` (BMW Type Next Latin 14px / 700 / 0.5px tracking), padding 14px \xD7 32px, height 48px, rounded \`{rounded.none}\` (0px \u2014 rectangular). Press state: \`button-primary-active\` shifts to \`{colors.primary-active}\`.
428
+
429
+ **\`button-secondary\`** \u2014 A white button with a hairline outline. Background \`{colors.canvas}\`, text \`{colors.ink}\`, 1px \`{colors.hairline-strong}\` border, same padding + height + radius.
430
+
431
+ **\`button-secondary-on-dark\`** \u2014 Used over a dark hero band. Background transparent, text \`{colors.on-dark}\`, 1px \`{colors.on-dark}\` border, same rectangular shape.
432
+
433
+ **\`button-text-link\`** \u2014 An inline UPPERCASE letter-spaced link. No background, text \`{colors.ink}\`, type \`{typography.label-uppercase}\` (13px / 700 / 1.5px tracking). Reads as "LEARN MORE", terminated by a \`\u203A\` chevron.
434
+
435
+ **\`text-link\`** \u2014 An inline link inside body copy. \`{colors.ink}\` text, no underline by default; underlines per context.
436
+
437
+ ### Cards & Containers
438
+
439
+ **\`hero-band-dark\`** \u2014 Full-width dark navy hero. Background \`{colors.surface-dark}\`, text \`{colors.on-dark}\`, vertical padding \`{spacing.section}\` (80px). Centered: model name in \`{typography.display-xl}\` (64px / 700) + sub-headline + vehicle render (right-aligned or below). A single \`{component.button-primary}\` (blue) or \`{component.button-secondary-on-dark}\`.
440
+
441
+ **\`hero-photo-band\`** \u2014 A light-canvas model showcase band. Background \`{colors.canvas}\`, text \`{colors.ink}\`. The vehicle render takes the wide area; right or below, a headline + two link CTAs + sub-tagline.
442
+
443
+ **\`model-card\`** \u2014 Used in 4-up or 5-up model card grids on the homepage ("BMW iX3", "BMW iX", "BMW 5 Series"). Background \`{colors.canvas}\`, rounded \`{rounded.none}\`, padding \`{spacing.lg}\` (24px). Contents: model render at the top (\`{component.model-card-photo}\` on \`{colors.surface-card}\`), model name in \`{typography.title-md}\` (18px / 700) below, a one-line tagline in \`{typography.body-sm}\` (14px / 300), and a \`{component.button-text-link}\` ("LEARN MORE \u203A").
444
+
445
+ **\`model-card-photo\`** \u2014 The card's photo plate. Background \`{colors.surface-card}\` (#fafafa \u2014 soft grey), rounded \`{rounded.none}\`, vehicle render in full silhouette. Zero padding \u2014 the photo runs edge-to-edge.
446
+
447
+ **\`feature-photo-card\`** \u2014 A feature/lifestyle card. Background \`{colors.canvas}\`, padding \`{spacing.lg}\`. 16:9 photo at the top, \`{typography.title-md}\` headline + body excerpt below.
448
+
449
+ **\`spec-cell\`** \u2014 A technical spec cell (model detail page). Transparent background, separated by hairline dividers. Value on top (\`{typography.display-sm}\` 24px / 700), label below (\`{typography.label-uppercase}\`).
450
+
451
+ ### Inventory & Configurator
452
+
453
+ **\`inventory-card\`** \u2014 One card per vehicle on the dealer inventory page. Background \`{colors.canvas}\`, padding \`{spacing.md}\` (16px), rounded \`{rounded.none}\`. Vehicle photo on top, model + variant name + price + "View" link below.
454
+
455
+ **\`filter-chip\`** + **\`filter-chip-active\`** \u2014 Inventory filter chips (model, year, price range). Inactive: background \`{colors.canvas}\`, 1px \`{colors.hairline-strong}\` border, text \`{colors.ink}\`, type \`{typography.caption}\`. Active: background \`{colors.ink}\`, text \`{colors.on-dark}\`. Padding 8px \xD7 14px, radius \`{rounded.none}\`.
456
+
457
+ **\`configurator-option-tile\`** + **\`configurator-option-tile-selected\`** \u2014 Configurator selection cell (color, wheels, upholstery). Inactive: background \`{colors.canvas}\`, 1px hairline. Selected: 2px \`{colors.primary}\` border. Padding 16px \xD7 24px, radius \`{rounded.none}\`.
458
+
459
+ ### Inputs & Forms
460
+
461
+ **\`text-input\`** \u2014 Standard text input. Background \`{colors.canvas}\`, text \`{colors.ink}\`, type \`{typography.body-md}\`, rounded \`{rounded.none}\` (0px), padding 14px \xD7 16px, height 48px, 1px hairline border. On focus, the border thickens to ink.
462
+
463
+ **\`cookie-consent-card\`** \u2014 Cookie banner. Background \`{colors.canvas}\`, 1px hairline, padding \`{spacing.lg}\` (24px), \`{typography.body-sm}\` (14px / 300 \u2014 Light even in legal copy).
464
+
465
+ ### Tabs / Tags
466
+
467
+ **\`category-tab\`** + **\`category-tab-active\`** \u2014 Category sub-nav. Inactive: transparent + \`{colors.muted}\` UPPERCASE label. Active: transparent + \`{colors.ink}\` UPPERCASE label + 2px ink underline. 12px vertical padding, no horizontal radius.
468
+
469
+ ### Brand Signature
470
+
471
+ **\`m-stripe-divider\`** \u2014 A 4px-tall horizontal tricolor stripe (\`{colors.m-blue-light}\` \u2192 \`{colors.m-blue-dark}\` \u2192 \`{colors.m-red}\`). Only in M-model contexts, motorsport badges, or as an M-related section divider. Absent from the corporate main flow; on M-model detail pages and the M Performance badge it plays an inline divider role.
472
+
473
+ ### CTA / Footer
474
+
475
+ **\`cta-band-photo\`** \u2014 A pre-footer "Discover the New iX3"-style band. Background \`{colors.surface-dark}\` with a full-bleed vehicle photo. Centered headline in \`{typography.display-md}\` (32px / 700) + a single \`{component.button-secondary-on-dark}\`. 80px padding.
476
+
477
+ **\`footer\`** \u2014 The closing soft-grey footer. Background \`{colors.surface-soft}\` (#f7f7f7 \u2014 not pure white \u2014 soft grey), text \`{colors.body}\`. A 4-column link list: Models / Services / Dealers / About. Vertical padding 64px. Below, a copyright line in \`{typography.body-sm}\` with \`{colors.muted}\`.
478
+
479
+ ## Do's and Don'ts
480
+
481
+ ### Do
482
+ - Sit every page on \`{colors.canvas}\` (pure white); reserve \`{colors.surface-dark}\` for hero bands only.
483
+ - Pair primary CTAs with \`{colors.primary}\` (BMW Blue) + \`{colors.on-primary}\` white text + \`{rounded.none}\` 0px corners \u2014 the corporate signature.
484
+ - Set display headlines in BMW Type Next Latin 700 and body in Light 300. The contrast is non-negotiable.
485
+ - Use UPPERCASE letter-spaced links like "LEARN MORE" as inline CTAs.
486
+ - Place the model card photo on \`{colors.surface-card}\` with the title beneath \u2014 the standard BMW corporate pattern.
487
+ - Hold section rhythm at \`{spacing.section}\` (80px) \u2014 tighter than BMW M's 96px.
488
+ - Reserve the M tricolor stripe for M-model contexts and motorsport dividers.
489
+
490
+ ### Don't
491
+ - Don't add a brand color other than blue \u2014 BMW Blue is the only primary action color.
492
+ - Don't use pill or rounded buttons \u2014 \`{rounded.none}\` (0px) rectangular IS the brand button.
493
+ - Don't drop display weight to 500 \u2014 the system uses 700 / 400 / 300; 500 is absent.
494
+ - Don't bold body type \u2014 Light 300 is the BMW corporate editorial voice.
495
+ - Don't add drop shadows to cards \u2014 depth comes from photo + color-block contrast.
496
+ - Don't repeat the same surface mode across two consecutive bands \u2014 light \u2192 dark hero \u2192 light \u2192 light feature \u2192 dark CTA \u2192 light footer rotation is required.
497
+ - Don't use the M tricolor stripe as a CTA fill \u2014 divider/accent role only.
498
+ - Don't mix languages in a single page \u2014 UI language must stay consistent.
499
+
500
+ ## Responsive Behavior
501
+
502
+ ### Breakpoints
503
+
504
+ | Name | Width | Key Changes |
505
+ |---|---|---|
506
+ | Mobile | < 768px | Hamburger nav; hero h1 64\u219240px; model card grid 1-up; configurator filter chips 2-up; footer 4 col \u2192 1 col |
507
+ | Tablet | 768\u20131024px | Top nav narrows, secondary menu hides under "More"; model card 2-up; inventory 2-up |
508
+ | Desktop | 1024\u20131440px | Full top-nav; 4-up or 5-up model card grid; inventory 3-up; full configurator UI |
509
+ | Wide | > 1440px | Same as desktop, content fixed at 1440px; gutters absorb the rest |
510
+
511
+ ### Touch Targets
512
+ - \`{component.button-primary}\` minimum 48 \xD7 48px \u2014 above WCAG AAA (44 \xD7 44).
513
+ - \`{component.text-input}\` height 48px.
514
+ - Category tabs run with 12px vertical padding, giving an effective tap area > 44px.
515
+
516
+ ### Collapsing Strategy
517
+ - The top nav collapses to a hamburger below 768px; the menu opens as a full-screen sheet.
518
+ - The hero band's internal layout drops to a single column.
519
+ - Model card grid 4-up/5-up \u2192 2-up \u2192 1-up.
520
+ - The configurator filter chip row scrolls horizontally on mobile.
521
+ - The M tricolor stripe stays at 4px height across every breakpoint.
522
+
523
+ ### Image Behavior
524
+ - Model renders scale at every breakpoint while preserving native aspect ratios.
525
+ - Hero photography may shift to a more vertical crop on mobile (art direction).
526
+ - Inventory vehicle photos may move from 16:9 to 4:3 on mobile.
527
+
528
+ ## Iteration Guide
529
+
530
+ 1. Focus on a single component. Reference its YAML key directly (\`{component.model-card}\`, \`{component.button-primary}\`).
531
+ 2. New components default to \`{rounded.none}\` (0px). Use \`{rounded.full}\` only for circular icon buttons.
532
+ 3. Variants (\`-active\`, \`-disabled\`, \`-selected\`) live as separate entries inside the \`components:\` block.
533
+ 4. \`{token.refs}\` everywhere \u2014 never inline hex.
534
+ 5. Hover state is never documented. Only Default and Active/Pressed states.
535
+ 6. Display headlines stay BMW Type Next Latin 700; body stays Light 300; the trio is fixed.
536
+ 7. Keep UI strings in a single language \u2014 match the locale of the page.
537
+
538
+ ## Known Gaps
539
+
540
+ - BMW Type Next Latin is licensed to BMW and not published as a public web font; Inter at weights 700/300 is documented as the substitute.
541
+ - Animation and transition timings (configurator color swap, model card hover-reveal) are out of scope here.
542
+ - Form validation states beyond \`{component.text-input}\` focus were not extracted \u2014 error/success states would need a dedicated form page.
543
+ - The dealer inventory sub-domain shares typography and color with the main corporate site; only UI density rises (filters, tables, prices).
544
+ - A cookie consent overlay can occlude part of the hero \u2014 the lead hero band content may not be fully captured.
545
+ - The M tricolor stripe appears infrequently on this corporate site; full motorsport context lives on the BMW M site.
546
+ `;
547
+ export {
548
+ bmwBrief
549
+ };
550
+ //# sourceMappingURL=bmw.js.map