@hex-core/themes 0.2.4 → 0.2.7

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 (368) hide show
  1. package/dist/{chunk-LDZC2QYF.js → chunk-272LSGQB.js} +1 -1
  2. package/dist/chunk-272LSGQB.js.map +1 -0
  3. package/dist/{chunk-CUO2HNBR.js → chunk-2A6DLGA7.js} +1 -1
  4. package/dist/chunk-2A6DLGA7.js.map +1 -0
  5. package/dist/{chunk-4QXKFLEQ.js → chunk-2QSORYID.js} +1 -1
  6. package/dist/chunk-2QSORYID.js.map +1 -0
  7. package/dist/{chunk-5TDK4XMA.js → chunk-2TGYWGVY.js} +1 -1
  8. package/dist/chunk-2TGYWGVY.js.map +1 -0
  9. package/dist/{chunk-VOXUB4AT.js → chunk-2WNXGP5P.js} +1 -1
  10. package/dist/chunk-2WNXGP5P.js.map +1 -0
  11. package/dist/{chunk-TXY7LBYM.js → chunk-3KVEWVGB.js} +1 -1
  12. package/dist/chunk-3KVEWVGB.js.map +1 -0
  13. package/dist/{chunk-4LQ3BH7F.js → chunk-56AUUCZS.js} +1 -1
  14. package/dist/chunk-56AUUCZS.js.map +1 -0
  15. package/dist/{chunk-7OAKNGRU.js → chunk-57VDS6LG.js} +1 -1
  16. package/dist/chunk-57VDS6LG.js.map +1 -0
  17. package/dist/{chunk-OCQYO6PW.js → chunk-5LF2KJDC.js} +1 -1
  18. package/dist/chunk-5LF2KJDC.js.map +1 -0
  19. package/dist/{chunk-Z3XCYZN4.js → chunk-5N7574FT.js} +1 -1
  20. package/dist/chunk-5N7574FT.js.map +1 -0
  21. package/dist/{chunk-GSTGBWQZ.js → chunk-5VJBE4GH.js} +1 -1
  22. package/dist/chunk-5VJBE4GH.js.map +1 -0
  23. package/dist/{chunk-BCLCH6JZ.js → chunk-5WK2WKWX.js} +1 -1
  24. package/dist/chunk-5WK2WKWX.js.map +1 -0
  25. package/dist/{chunk-ZQJDUTSK.js → chunk-66TJF4RL.js} +1 -1
  26. package/dist/chunk-66TJF4RL.js.map +1 -0
  27. package/dist/{chunk-7MPAMAFC.js → chunk-6K4R7TQ2.js} +1 -1
  28. package/dist/chunk-6K4R7TQ2.js.map +1 -0
  29. package/dist/{chunk-PJAJD5VJ.js → chunk-6TDP6DCC.js} +1 -1
  30. package/dist/chunk-6TDP6DCC.js.map +1 -0
  31. package/dist/{chunk-NKTZOR54.js → chunk-7MCNXH3M.js} +1 -1
  32. package/dist/chunk-7MCNXH3M.js.map +1 -0
  33. package/dist/{chunk-IRDDULX7.js → chunk-APHEYV2T.js} +1 -1
  34. package/dist/chunk-APHEYV2T.js.map +1 -0
  35. package/dist/{chunk-IXKXYUXQ.js → chunk-B5ZH6DB5.js} +1 -1
  36. package/dist/chunk-B5ZH6DB5.js.map +1 -0
  37. package/dist/{chunk-BH7IPZBT.js → chunk-CQTXRD33.js} +1 -1
  38. package/dist/chunk-CQTXRD33.js.map +1 -0
  39. package/dist/{chunk-CTI3W357.js → chunk-CZPAYC46.js} +1 -1
  40. package/dist/chunk-CZPAYC46.js.map +1 -0
  41. package/dist/{chunk-LNKOIFH4.js → chunk-ECMKBX2J.js} +1 -1
  42. package/dist/chunk-ECMKBX2J.js.map +1 -0
  43. package/dist/{chunk-72IPJZ6V.js → chunk-EDRMWCBI.js} +1 -1
  44. package/dist/chunk-EDRMWCBI.js.map +1 -0
  45. package/dist/{chunk-SORTCBSJ.js → chunk-ETCNVOIL.js} +1 -1
  46. package/dist/chunk-ETCNVOIL.js.map +1 -0
  47. package/dist/{chunk-PN567MCL.js → chunk-GGQUOFCD.js} +1 -1
  48. package/dist/chunk-GGQUOFCD.js.map +1 -0
  49. package/dist/{chunk-CEQN6EQY.js → chunk-GXDGNJMF.js} +1 -1
  50. package/dist/chunk-GXDGNJMF.js.map +1 -0
  51. package/dist/{chunk-CFLNGBY5.js → chunk-H24XEEMC.js} +1 -1
  52. package/dist/chunk-H24XEEMC.js.map +1 -0
  53. package/dist/{chunk-7YPET3HT.js → chunk-H2BLDJS6.js} +1 -1
  54. package/dist/chunk-H2BLDJS6.js.map +1 -0
  55. package/dist/{chunk-I6H6W42Y.js → chunk-H4JPCXHY.js} +1 -1
  56. package/dist/chunk-H4JPCXHY.js.map +1 -0
  57. package/dist/{chunk-ATBX7KXM.js → chunk-HOKH4P5K.js} +1 -1
  58. package/dist/chunk-HOKH4P5K.js.map +1 -0
  59. package/dist/{chunk-GAOOBTSH.js → chunk-HSLP5WT4.js} +1 -1
  60. package/dist/chunk-HSLP5WT4.js.map +1 -0
  61. package/dist/{chunk-IJBNLZQH.js → chunk-HYXMYG2L.js} +1 -1
  62. package/dist/chunk-HYXMYG2L.js.map +1 -0
  63. package/dist/{chunk-KCI73LIZ.js → chunk-I3MBVZIO.js} +1 -1
  64. package/dist/chunk-I3MBVZIO.js.map +1 -0
  65. package/dist/{chunk-FK5WSFAA.js → chunk-IMKQPXPQ.js} +1 -1
  66. package/dist/chunk-IMKQPXPQ.js.map +1 -0
  67. package/dist/{chunk-WAU2FYDY.js → chunk-JWKUI4RX.js} +1 -1
  68. package/dist/chunk-JWKUI4RX.js.map +1 -0
  69. package/dist/{chunk-YRGKMQP4.js → chunk-JYD76T4M.js} +1 -1
  70. package/dist/chunk-JYD76T4M.js.map +1 -0
  71. package/dist/{chunk-E26YKJRK.js → chunk-JZI3MYHH.js} +1 -1
  72. package/dist/chunk-JZI3MYHH.js.map +1 -0
  73. package/dist/{chunk-GAQ6LS55.js → chunk-KENDSQNI.js} +1 -1
  74. package/dist/chunk-KENDSQNI.js.map +1 -0
  75. package/dist/{chunk-I4Z7DY3Z.js → chunk-KXRLRKUR.js} +1 -1
  76. package/dist/chunk-KXRLRKUR.js.map +1 -0
  77. package/dist/{chunk-KLNZW4GO.js → chunk-LHC6NIEV.js} +1 -1
  78. package/dist/chunk-LHC6NIEV.js.map +1 -0
  79. package/dist/{chunk-7ZAFN5WE.js → chunk-LSRIN4KJ.js} +1 -1
  80. package/dist/chunk-LSRIN4KJ.js.map +1 -0
  81. package/dist/{chunk-5O65TVZP.js → chunk-LUES2KWD.js} +1 -1
  82. package/dist/chunk-LUES2KWD.js.map +1 -0
  83. package/dist/{chunk-D5JFUYFN.js → chunk-LVJZYH4E.js} +1 -1
  84. package/dist/chunk-LVJZYH4E.js.map +1 -0
  85. package/dist/{chunk-RTCJ5B7S.js → chunk-MOYDFPT6.js} +1 -1
  86. package/dist/chunk-MOYDFPT6.js.map +1 -0
  87. package/dist/{chunk-BK432RWC.js → chunk-MXBNMD6P.js} +1 -1
  88. package/dist/chunk-MXBNMD6P.js.map +1 -0
  89. package/dist/{chunk-UIS6TMM5.js → chunk-NDQJU32I.js} +1 -1
  90. package/dist/chunk-NDQJU32I.js.map +1 -0
  91. package/dist/{chunk-FE2IENES.js → chunk-OACQ2U4Z.js} +1 -1
  92. package/dist/chunk-OACQ2U4Z.js.map +1 -0
  93. package/dist/{chunk-QEBXRSTH.js → chunk-ODXEV6AS.js} +1 -1
  94. package/dist/chunk-ODXEV6AS.js.map +1 -0
  95. package/dist/{chunk-73N7YFTY.js → chunk-P4VM23QS.js} +1 -1
  96. package/dist/chunk-P4VM23QS.js.map +1 -0
  97. package/dist/{chunk-2LU3ENLP.js → chunk-PKCFXM2I.js} +1 -1
  98. package/dist/chunk-PKCFXM2I.js.map +1 -0
  99. package/dist/{chunk-G2V6XAJ7.js → chunk-PL7GWVFC.js} +1 -1
  100. package/dist/chunk-PL7GWVFC.js.map +1 -0
  101. package/dist/{chunk-NIED6GXO.js → chunk-Q3UUZ4IY.js} +1 -1
  102. package/dist/chunk-Q3UUZ4IY.js.map +1 -0
  103. package/dist/{chunk-7YP2HHHV.js → chunk-QIBRIKJO.js} +1 -1
  104. package/dist/chunk-QIBRIKJO.js.map +1 -0
  105. package/dist/{chunk-JZEZHM5N.js → chunk-R34KEJKT.js} +1 -1
  106. package/dist/chunk-R34KEJKT.js.map +1 -0
  107. package/dist/{chunk-DE2NWOEB.js → chunk-R46HOWHG.js} +1 -1
  108. package/dist/chunk-R46HOWHG.js.map +1 -0
  109. package/dist/{chunk-I267MA2D.js → chunk-TN7R7OCY.js} +1 -1
  110. package/dist/chunk-TN7R7OCY.js.map +1 -0
  111. package/dist/{chunk-BMLLM5GC.js → chunk-TU33EKGU.js} +1 -1
  112. package/dist/chunk-TU33EKGU.js.map +1 -0
  113. package/dist/chunk-V6YUHZJC.js +79 -0
  114. package/dist/chunk-V6YUHZJC.js.map +1 -0
  115. package/dist/{chunk-RN4ZII2I.js → chunk-VHHPJEZN.js} +1 -1
  116. package/dist/chunk-VHHPJEZN.js.map +1 -0
  117. package/dist/{chunk-DLLP5KXF.js → chunk-VNRHXCFG.js} +1 -1
  118. package/dist/chunk-VNRHXCFG.js.map +1 -0
  119. package/dist/{chunk-ZTYINGDT.js → chunk-W2F4IE7R.js} +1 -1
  120. package/dist/chunk-W2F4IE7R.js.map +1 -0
  121. package/dist/{chunk-KXBE5FQ7.js → chunk-W6RTETPQ.js} +1 -1
  122. package/dist/chunk-W6RTETPQ.js.map +1 -0
  123. package/dist/{chunk-2OH25A4J.js → chunk-WSPZDZKU.js} +1 -1
  124. package/dist/chunk-WSPZDZKU.js.map +1 -0
  125. package/dist/{chunk-QTKMLEEM.js → chunk-XITZVOX2.js} +1 -1
  126. package/dist/chunk-XITZVOX2.js.map +1 -0
  127. package/dist/{chunk-KDS62BXD.js → chunk-XJBTDBQ2.js} +1 -1
  128. package/dist/chunk-XJBTDBQ2.js.map +1 -0
  129. package/dist/{chunk-SG2ACM7O.js → chunk-XNOKSXCM.js} +1 -1
  130. package/dist/chunk-XNOKSXCM.js.map +1 -0
  131. package/dist/{chunk-VUSSQAEI.js → chunk-XPVCBJPS.js} +1 -1
  132. package/dist/chunk-XPVCBJPS.js.map +1 -0
  133. package/dist/{chunk-KZDIZ2FL.js → chunk-XYUX623C.js} +1 -1
  134. package/dist/chunk-XYUX623C.js.map +1 -0
  135. package/dist/{chunk-EZFP45CP.js → chunk-Y4P26Z64.js} +1 -1
  136. package/dist/chunk-Y4P26Z64.js.map +1 -0
  137. package/dist/chunk-YBJ5QXNL.js +386 -0
  138. package/dist/chunk-YBJ5QXNL.js.map +1 -0
  139. package/dist/{chunk-Z6XLNVF3.js → chunk-YJPZJFCL.js} +1 -1
  140. package/dist/chunk-YJPZJFCL.js.map +1 -0
  141. package/dist/{chunk-5BH5ZMDH.js → chunk-YRUGI622.js} +1 -1
  142. package/dist/chunk-YRUGI622.js.map +1 -0
  143. package/dist/{chunk-MVMZS3PQ.js → chunk-ZFUNYUR4.js} +1 -1
  144. package/dist/chunk-ZFUNYUR4.js.map +1 -0
  145. package/dist/{chunk-2SI7O4FQ.js → chunk-ZX4NOL7O.js} +1 -1
  146. package/dist/chunk-ZX4NOL7O.js.map +1 -0
  147. package/dist/index.js +84 -83
  148. package/dist/index.js.map +1 -1
  149. package/dist/presets/_briefs/airbnb.js.map +1 -1
  150. package/dist/presets/_briefs/airtable.js.map +1 -1
  151. package/dist/presets/_briefs/apple.js.map +1 -1
  152. package/dist/presets/_briefs/binance.js.map +1 -1
  153. package/dist/presets/_briefs/bmw-m.js.map +1 -1
  154. package/dist/presets/_briefs/bmw.js.map +1 -1
  155. package/dist/presets/_briefs/bugatti.js.map +1 -1
  156. package/dist/presets/_briefs/cal.js.map +1 -1
  157. package/dist/presets/_briefs/claude.js.map +1 -1
  158. package/dist/presets/_briefs/clay.js.map +1 -1
  159. package/dist/presets/_briefs/clickhouse.js.map +1 -1
  160. package/dist/presets/_briefs/cohere.js.map +1 -1
  161. package/dist/presets/_briefs/coinbase.js.map +1 -1
  162. package/dist/presets/_briefs/composio.js.map +1 -1
  163. package/dist/presets/_briefs/cursor.js.map +1 -1
  164. package/dist/presets/_briefs/elevenlabs.js.map +1 -1
  165. package/dist/presets/_briefs/expo.js.map +1 -1
  166. package/dist/presets/_briefs/ferrari.js.map +1 -1
  167. package/dist/presets/_briefs/figma.js.map +1 -1
  168. package/dist/presets/_briefs/framer.js.map +1 -1
  169. package/dist/presets/_briefs/hashicorp.js.map +1 -1
  170. package/dist/presets/_briefs/ibm.js.map +1 -1
  171. package/dist/presets/_briefs/intercom.js.map +1 -1
  172. package/dist/presets/_briefs/kraken.js.map +1 -1
  173. package/dist/presets/_briefs/lamborghini.js.map +1 -1
  174. package/dist/presets/_briefs/linear.js.map +1 -1
  175. package/dist/presets/_briefs/lovable.js.map +1 -1
  176. package/dist/presets/_briefs/mastercard.js.map +1 -1
  177. package/dist/presets/_briefs/meta.js.map +1 -1
  178. package/dist/presets/_briefs/minimax.js.map +1 -1
  179. package/dist/presets/_briefs/mintlify.js.map +1 -1
  180. package/dist/presets/_briefs/miro.js.map +1 -1
  181. package/dist/presets/_briefs/mistral.js.map +1 -1
  182. package/dist/presets/_briefs/mongodb.js.map +1 -1
  183. package/dist/presets/_briefs/nike.js.map +1 -1
  184. package/dist/presets/_briefs/notion.js.map +1 -1
  185. package/dist/presets/_briefs/nvidia.js.map +1 -1
  186. package/dist/presets/_briefs/ollama.js.map +1 -1
  187. package/dist/presets/_briefs/opencode.js.map +1 -1
  188. package/dist/presets/_briefs/pinterest.js.map +1 -1
  189. package/dist/presets/_briefs/playstation.js.map +1 -1
  190. package/dist/presets/_briefs/posthog.js.map +1 -1
  191. package/dist/presets/_briefs/raycast.js.map +1 -1
  192. package/dist/presets/_briefs/renault.js.map +1 -1
  193. package/dist/presets/_briefs/replicate.js.map +1 -1
  194. package/dist/presets/_briefs/resend.js.map +1 -1
  195. package/dist/presets/_briefs/revolut.js.map +1 -1
  196. package/dist/presets/_briefs/runwayml.js.map +1 -1
  197. package/dist/presets/_briefs/sanity.js.map +1 -1
  198. package/dist/presets/_briefs/sentry.js.map +1 -1
  199. package/dist/presets/_briefs/shopify.js.map +1 -1
  200. package/dist/presets/_briefs/slack.js.map +1 -1
  201. package/dist/presets/_briefs/spacex.js.map +1 -1
  202. package/dist/presets/_briefs/spotify.js.map +1 -1
  203. package/dist/presets/_briefs/starbucks.js.map +1 -1
  204. package/dist/presets/_briefs/stripe.js.map +1 -1
  205. package/dist/presets/_briefs/supabase.js.map +1 -1
  206. package/dist/presets/_briefs/superhuman.js.map +1 -1
  207. package/dist/presets/_briefs/tesla.js.map +1 -1
  208. package/dist/presets/_briefs/theverge.js.map +1 -1
  209. package/dist/presets/_briefs/together.js.map +1 -1
  210. package/dist/presets/_briefs/uber.js.map +1 -1
  211. package/dist/presets/_briefs/vercel.js.map +1 -1
  212. package/dist/presets/_briefs/vodafone.js.map +1 -1
  213. package/dist/presets/_briefs/voltagent.js.map +1 -1
  214. package/dist/presets/_briefs/warp.js.map +1 -1
  215. package/dist/presets/_briefs/webflow.js.map +1 -1
  216. package/dist/presets/_briefs/wired.js.map +1 -1
  217. package/dist/presets/_briefs/wise.js.map +1 -1
  218. package/dist/presets/_briefs/x.js.map +1 -1
  219. package/dist/presets/_briefs/zapier.js.map +1 -1
  220. package/dist/presets/airbnb.js +1 -1
  221. package/dist/presets/airtable.js +1 -1
  222. package/dist/presets/apple.js +1 -1
  223. package/dist/presets/binance.js +1 -1
  224. package/dist/presets/bmw-m.js +1 -1
  225. package/dist/presets/bmw.js +1 -1
  226. package/dist/presets/briefs.generated.d.ts +9 -0
  227. package/dist/presets/briefs.generated.js +7 -0
  228. package/dist/presets/briefs.generated.js.map +1 -0
  229. package/dist/presets/bugatti.js +1 -1
  230. package/dist/presets/cal.js +1 -1
  231. package/dist/presets/claude.js +1 -1
  232. package/dist/presets/clay.js +1 -1
  233. package/dist/presets/clickhouse.js +1 -1
  234. package/dist/presets/cohere.js +1 -1
  235. package/dist/presets/coinbase.js +1 -1
  236. package/dist/presets/composio.js +1 -1
  237. package/dist/presets/cursor.js +1 -1
  238. package/dist/presets/elevenlabs.js +1 -1
  239. package/dist/presets/expo.js +1 -1
  240. package/dist/presets/ferrari.js +1 -1
  241. package/dist/presets/figma.js +1 -1
  242. package/dist/presets/framer.js +1 -1
  243. package/dist/presets/hashicorp.js +1 -1
  244. package/dist/presets/ibm.js +1 -1
  245. package/dist/presets/index.js +84 -83
  246. package/dist/presets/intercom.js +1 -1
  247. package/dist/presets/kraken.js +1 -1
  248. package/dist/presets/lamborghini.js +1 -1
  249. package/dist/presets/linear.js +1 -1
  250. package/dist/presets/lovable.js +1 -1
  251. package/dist/presets/mastercard.js +1 -1
  252. package/dist/presets/meta.js +1 -1
  253. package/dist/presets/minimax.js +1 -1
  254. package/dist/presets/mintlify.js +1 -1
  255. package/dist/presets/miro.js +1 -1
  256. package/dist/presets/mistral.js +1 -1
  257. package/dist/presets/mongodb.js +1 -1
  258. package/dist/presets/nike.js +1 -1
  259. package/dist/presets/notion.js +1 -1
  260. package/dist/presets/nvidia.js +1 -1
  261. package/dist/presets/ollama.js +1 -1
  262. package/dist/presets/opencode.js +1 -1
  263. package/dist/presets/pinterest.js +1 -1
  264. package/dist/presets/playstation.js +1 -1
  265. package/dist/presets/posthog.js +1 -1
  266. package/dist/presets/raycast.js +1 -1
  267. package/dist/presets/renault.js +1 -1
  268. package/dist/presets/replicate.js +1 -1
  269. package/dist/presets/resend.js +1 -1
  270. package/dist/presets/revolut.js +1 -1
  271. package/dist/presets/runwayml.js +1 -1
  272. package/dist/presets/sanity.js +1 -1
  273. package/dist/presets/sentry.js +1 -1
  274. package/dist/presets/shopify.js +1 -1
  275. package/dist/presets/slack.js +1 -1
  276. package/dist/presets/spacex.js +1 -1
  277. package/dist/presets/spotify.js +1 -1
  278. package/dist/presets/starbucks.js +1 -1
  279. package/dist/presets/stripe.js +1 -1
  280. package/dist/presets/supabase.js +1 -1
  281. package/dist/presets/superhuman.js +1 -1
  282. package/dist/presets/tesla.js +1 -1
  283. package/dist/presets/theverge.js +1 -1
  284. package/dist/presets/together.js +1 -1
  285. package/dist/presets/uber.js +1 -1
  286. package/dist/presets/vercel.js +1 -1
  287. package/dist/presets/vodafone.js +1 -1
  288. package/dist/presets/voltagent.js +1 -1
  289. package/dist/presets/warp.js +1 -1
  290. package/dist/presets/webflow.js +1 -1
  291. package/dist/presets/wired.js +1 -1
  292. package/dist/presets/wise.js +1 -1
  293. package/dist/presets/x.js +1 -1
  294. package/dist/presets/zapier.js +1 -1
  295. package/package.json +4 -4
  296. package/dist/chunk-2LU3ENLP.js.map +0 -1
  297. package/dist/chunk-2OH25A4J.js.map +0 -1
  298. package/dist/chunk-2SI7O4FQ.js.map +0 -1
  299. package/dist/chunk-4LQ3BH7F.js.map +0 -1
  300. package/dist/chunk-4QXKFLEQ.js.map +0 -1
  301. package/dist/chunk-5BH5ZMDH.js.map +0 -1
  302. package/dist/chunk-5O65TVZP.js.map +0 -1
  303. package/dist/chunk-5TDK4XMA.js.map +0 -1
  304. package/dist/chunk-72IPJZ6V.js.map +0 -1
  305. package/dist/chunk-73N7YFTY.js.map +0 -1
  306. package/dist/chunk-7MPAMAFC.js.map +0 -1
  307. package/dist/chunk-7OAKNGRU.js.map +0 -1
  308. package/dist/chunk-7YP2HHHV.js.map +0 -1
  309. package/dist/chunk-7YPET3HT.js.map +0 -1
  310. package/dist/chunk-7ZAFN5WE.js.map +0 -1
  311. package/dist/chunk-ATBX7KXM.js.map +0 -1
  312. package/dist/chunk-BCLCH6JZ.js.map +0 -1
  313. package/dist/chunk-BH7IPZBT.js.map +0 -1
  314. package/dist/chunk-BK432RWC.js.map +0 -1
  315. package/dist/chunk-BMLLM5GC.js.map +0 -1
  316. package/dist/chunk-CEQN6EQY.js.map +0 -1
  317. package/dist/chunk-CFLNGBY5.js.map +0 -1
  318. package/dist/chunk-CTI3W357.js.map +0 -1
  319. package/dist/chunk-CUO2HNBR.js.map +0 -1
  320. package/dist/chunk-D5JFUYFN.js.map +0 -1
  321. package/dist/chunk-DE2NWOEB.js.map +0 -1
  322. package/dist/chunk-DLLP5KXF.js.map +0 -1
  323. package/dist/chunk-E26YKJRK.js.map +0 -1
  324. package/dist/chunk-EV4APPVD.js +0 -528
  325. package/dist/chunk-EV4APPVD.js.map +0 -1
  326. package/dist/chunk-EZFP45CP.js.map +0 -1
  327. package/dist/chunk-FE2IENES.js.map +0 -1
  328. package/dist/chunk-FK5WSFAA.js.map +0 -1
  329. package/dist/chunk-G2V6XAJ7.js.map +0 -1
  330. package/dist/chunk-GAOOBTSH.js.map +0 -1
  331. package/dist/chunk-GAQ6LS55.js.map +0 -1
  332. package/dist/chunk-GSTGBWQZ.js.map +0 -1
  333. package/dist/chunk-I267MA2D.js.map +0 -1
  334. package/dist/chunk-I4Z7DY3Z.js.map +0 -1
  335. package/dist/chunk-I6H6W42Y.js.map +0 -1
  336. package/dist/chunk-IJBNLZQH.js.map +0 -1
  337. package/dist/chunk-IRDDULX7.js.map +0 -1
  338. package/dist/chunk-IXKXYUXQ.js.map +0 -1
  339. package/dist/chunk-JZEZHM5N.js.map +0 -1
  340. package/dist/chunk-KCI73LIZ.js.map +0 -1
  341. package/dist/chunk-KDS62BXD.js.map +0 -1
  342. package/dist/chunk-KLNZW4GO.js.map +0 -1
  343. package/dist/chunk-KXBE5FQ7.js.map +0 -1
  344. package/dist/chunk-KZDIZ2FL.js.map +0 -1
  345. package/dist/chunk-LDZC2QYF.js.map +0 -1
  346. package/dist/chunk-LNKOIFH4.js.map +0 -1
  347. package/dist/chunk-MVMZS3PQ.js.map +0 -1
  348. package/dist/chunk-NIED6GXO.js.map +0 -1
  349. package/dist/chunk-NKTZOR54.js.map +0 -1
  350. package/dist/chunk-OCQYO6PW.js.map +0 -1
  351. package/dist/chunk-PJAJD5VJ.js.map +0 -1
  352. package/dist/chunk-PN567MCL.js.map +0 -1
  353. package/dist/chunk-QEBXRSTH.js.map +0 -1
  354. package/dist/chunk-QTKMLEEM.js.map +0 -1
  355. package/dist/chunk-RN4ZII2I.js.map +0 -1
  356. package/dist/chunk-RTCJ5B7S.js.map +0 -1
  357. package/dist/chunk-SG2ACM7O.js.map +0 -1
  358. package/dist/chunk-SORTCBSJ.js.map +0 -1
  359. package/dist/chunk-TXY7LBYM.js.map +0 -1
  360. package/dist/chunk-UIS6TMM5.js.map +0 -1
  361. package/dist/chunk-VOXUB4AT.js.map +0 -1
  362. package/dist/chunk-VUSSQAEI.js.map +0 -1
  363. package/dist/chunk-WAU2FYDY.js.map +0 -1
  364. package/dist/chunk-YRGKMQP4.js.map +0 -1
  365. package/dist/chunk-Z3XCYZN4.js.map +0 -1
  366. package/dist/chunk-Z6XLNVF3.js.map +0 -1
  367. package/dist/chunk-ZQJDUTSK.js.map +0 -1
  368. package/dist/chunk-ZTYINGDT.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/presets/superhuman.ts"],"sourcesContent":["// Originally generated from voltagent/awesome-design-md (MIT) and hand-curated since.\n// The one-shot importer was removed once its output diverged from a clean\n// re-run; recover it from git history (`git show 870fbcc:scripts/import-voltagent.ts`)\n// if the upstream briefs ever need re-importing.\n// Source: voltagent/awesome-design-md (MIT) — https://github.com/voltagent/awesome-design-md\n// Brief commit: d2a7eb2d1e4ca5f5272be4bec46a5f35f7f01edd\n// Brief updated: 2026-04-09T18:04:01+03:00\n//\n// Style reference inspired by Superhuman's publicly visible design system.\n// Hex Core is not affiliated with, endorsed by, or sponsored by Superhuman.\n// Re-run `pnpm import:themes` to regenerate from the latest briefs.\nimport type { Theme } from \"@hex-core/registry\";\nimport { sharedTokens } from \"@hex-core/tokens\";\n\nexport const superhumanTheme: Theme = {\n\tname: \"superhuman\",\n\tdisplayName: \"Superhuman\",\n\tdescription: \"Fast email client. Premium dark UI, keyboard-first, purple glow.\",\n\tcategory: \"dev-tools\",\n\ttags: [\"dev-tools\"],\n\tattribution: {\n\t\tsource: \"voltagent/awesome-design-md\",\n\t\tlicense: \"MIT\",\n\t\turl: \"https://github.com/voltagent/awesome-design-md\",\n\t\tbrand: \"Superhuman\",\n\t},\n\ttokens: {\n\t\tlight: {\n\t\t\tbackground: { value: \"0 0% 100%\", type: \"color\" },\n\t\t\tforeground: { value: \"30 2.5% 15.7%\", type: \"color\" },\n\t\t\tcard: { value: \"0 0% 100%\", type: \"color\" },\n\t\t\t\"card-foreground\": { value: \"30 2.5% 15.7%\", type: \"color\" },\n\t\t\tpopover: { value: \"0 0% 100%\", type: \"color\" },\n\t\t\t\"popover-foreground\": { value: \"30 2.5% 15.7%\", type: \"color\" },\n\t\t\tprimary: { value: \"244 38.3% 15.9%\", type: \"color\" },\n\t\t\t\"primary-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\tsecondary: { value: \"244 5% 95.9%\", type: \"color\" },\n\t\t\t\"secondary-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\tmuted: { value: \"244 5% 95.9%\", type: \"color\" },\n\t\t\t\"muted-foreground\": { value: \"30 2.5% 38%\", type: \"color\" },\n\t\t\taccent: { value: \"244 5% 95.9%\", type: \"color\" },\n\t\t\t\"accent-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\tdestructive: { value: \"0 65% 43%\", type: \"color\" },\n\t\t\t\"destructive-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\tborder: { value: \"30 2.5% 90%\", type: \"color\" },\n\t\t\tinput: { value: \"30 2.5% 90%\", type: \"color\" },\n\t\t\tring: { value: \"244 38.3% 15.9%\", type: \"color\" },\n\t\t\tradius: { value: \"0.5rem\", type: \"radius\" },\n\t\t\t...sharedTokens,\n\t\t},\n\t\tdark: {\n\t\t\tbackground: { value: \"0 0% 0%\", type: \"color\" },\n\t\t\tforeground: { value: \"30 1.9% 84.3%\", type: \"color\" },\n\t\t\tcard: { value: \"0 0% 0%\", type: \"color\" },\n\t\t\tpopover: { value: \"0 0% 0%\", type: \"color\" },\n\t\t\tprimary: { value: \"244 28.7% 84.1%\", type: \"color\" },\n\t\t\tsecondary: { value: \"244 3.8% 4.1%\", type: \"color\" },\n\t\t\tmuted: { value: \"244 3.8% 4.1%\", type: \"color\" },\n\t\t\taccent: { value: \"244 3.8% 4.1%\", type: \"color\" },\n\t\t\tdestructive: { value: \"0 48.8% 57%\", type: \"color\" },\n\t\t\tborder: { value: \"30 1.9% 10%\", type: \"color\" },\n\t\t\tinput: { value: \"30 1.9% 10%\", type: \"color\" },\n\t\t\tring: { value: \"244 28.7% 84.1%\", type: \"color\" },\n\t\t\tradius: { value: \"0.5rem\", type: \"radius\" },\n\t\t\t\"card-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"popover-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"primary-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\t\"secondary-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"muted-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"accent-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"destructive-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\t...sharedTokens,\n\t\t},\n\t},\n};\n"],"mappings":"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","names":[]}
@@ -65,4 +65,4 @@ var togetherTheme = {
65
65
  export {
66
66
  togetherTheme
67
67
  };
68
- //# sourceMappingURL=chunk-MVMZS3PQ.js.map
68
+ //# sourceMappingURL=chunk-ZFUNYUR4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/presets/together.ts"],"sourcesContent":["// Originally generated from voltagent/awesome-design-md (MIT) and hand-curated since.\n// The one-shot importer was removed once its output diverged from a clean\n// re-run; recover it from git history (`git show 870fbcc:scripts/import-voltagent.ts`)\n// if the upstream briefs ever need re-importing.\n// Source: voltagent/awesome-design-md (MIT) — https://github.com/voltagent/awesome-design-md\n// Brief commit: d2a7eb2d1e4ca5f5272be4bec46a5f35f7f01edd\n// Brief updated: 2026-04-09T18:04:01+03:00\n//\n// Style reference inspired by Together AI's publicly visible design system.\n// Hex Core is not affiliated with, endorsed by, or sponsored by Together AI.\n// Re-run `pnpm import:themes` to regenerate from the latest briefs.\nimport type { Theme } from \"@hex-core/registry\";\nimport { sharedTokens } from \"@hex-core/tokens\";\n\nexport const togetherTheme: Theme = {\n\tname: \"together\",\n\tdisplayName: \"Together AI\",\n\tdescription: \"Open-source AI infrastructure. Technical, blueprint-style design.\",\n\tcategory: \"ai\",\n\ttags: [\"ai\"],\n\tattribution: {\n\t\tsource: \"voltagent/awesome-design-md\",\n\t\tlicense: \"MIT\",\n\t\turl: \"https://github.com/voltagent/awesome-design-md\",\n\t\tbrand: \"Together AI\",\n\t},\n\ttokens: {\n\t\tlight: {\n\t\t\tbackground: { value: \"0 0% 100%\", type: \"color\" },\n\t\t\tforeground: { value: \"240 10% 4%\", type: \"color\" },\n\t\t\tcard: { value: \"0 0% 100%\", type: \"color\" },\n\t\t\t\"card-foreground\": { value: \"240 10% 4%\", type: \"color\" },\n\t\t\tpopover: { value: \"0 0% 100%\", type: \"color\" },\n\t\t\t\"popover-foreground\": { value: \"240 10% 4%\", type: \"color\" },\n\t\t\tprimary: { value: \"314 85.9% 55.5%\", type: \"color\" },\n\t\t\t\"primary-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\tsecondary: { value: \"314 5% 95.9%\", type: \"color\" },\n\t\t\t\"secondary-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\tmuted: { value: \"314 5% 95.9%\", type: \"color\" },\n\t\t\t\"muted-foreground\": { value: \"240 8% 38%\", type: \"color\" },\n\t\t\taccent: { value: \"314 5% 95.9%\", type: \"color\" },\n\t\t\t\"accent-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\tdestructive: { value: \"0 65% 43%\", type: \"color\" },\n\t\t\t\"destructive-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\tborder: { value: \"240 8% 90%\", type: \"color\" },\n\t\t\tinput: { value: \"240 8% 90%\", type: \"color\" },\n\t\t\tring: { value: \"314 85.9% 55.5%\", type: \"color\" },\n\t\t\tradius: { value: \"0.25rem\", type: \"radius\" },\n\t\t\t...sharedTokens,\n\t\t},\n\t\tdark: {\n\t\t\tbackground: { value: \"0 0% 0%\", type: \"color\" },\n\t\t\tforeground: { value: \"240 7.5% 96%\", type: \"color\" },\n\t\t\tcard: { value: \"0 0% 0%\", type: \"color\" },\n\t\t\tpopover: { value: \"0 0% 0%\", type: \"color\" },\n\t\t\tprimary: { value: \"314 64.4% 44.5%\", type: \"color\" },\n\t\t\tsecondary: { value: \"314 3.8% 4.1%\", type: \"color\" },\n\t\t\tmuted: { value: \"314 3.8% 4.1%\", type: \"color\" },\n\t\t\taccent: { value: \"314 3.8% 4.1%\", type: \"color\" },\n\t\t\tdestructive: { value: \"0 48.8% 57%\", type: \"color\" },\n\t\t\tborder: { value: \"240 6% 10%\", type: \"color\" },\n\t\t\tinput: { value: \"240 6% 10%\", type: \"color\" },\n\t\t\tring: { value: \"314 64.4% 44.5%\", type: \"color\" },\n\t\t\tradius: { value: \"0.25rem\", type: \"radius\" },\n\t\t\t\"card-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"popover-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"primary-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"secondary-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"muted-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"accent-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"destructive-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\t...sharedTokens,\n\t\t},\n\t},\n};\n"],"mappings":"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","names":[]}
@@ -65,4 +65,4 @@ var calTheme = {
65
65
  export {
66
66
  calTheme
67
67
  };
68
- //# sourceMappingURL=chunk-2SI7O4FQ.js.map
68
+ //# sourceMappingURL=chunk-ZX4NOL7O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/presets/cal.ts"],"sourcesContent":["// Originally generated from voltagent/awesome-design-md (MIT) and hand-curated since.\n// The one-shot importer was removed once its output diverged from a clean\n// re-run; recover it from git history (`git show 870fbcc:scripts/import-voltagent.ts`)\n// if the upstream briefs ever need re-importing.\n// Source: voltagent/awesome-design-md (MIT) — https://github.com/voltagent/awesome-design-md\n// Brief commit: a2da08625f57e4bae475887678df1065efceee7b\n// Brief updated: 2026-04-27T13:04:10+03:00\n//\n// Style reference inspired by Cal.com's publicly visible design system.\n// Hex Core is not affiliated with, endorsed by, or sponsored by Cal.com.\n// Re-run `pnpm import:themes` to regenerate from the latest briefs.\nimport type { Theme } from \"@hex-core/registry\";\nimport { sharedTokens } from \"@hex-core/tokens\";\n\nexport const calTheme: Theme = {\n\tname: \"cal\",\n\tdisplayName: \"Cal.com\",\n\tdescription: \"Open-source scheduling. Clean neutral UI, developer-oriented simplicity.\",\n\tcategory: \"productivity\",\n\ttags: [\"productivity\"],\n\tattribution: {\n\t\tsource: \"voltagent/awesome-design-md\",\n\t\tlicense: \"MIT\",\n\t\turl: \"https://github.com/voltagent/awesome-design-md\",\n\t\tbrand: \"Cal.com\",\n\t},\n\ttokens: {\n\t\tlight: {\n\t\t\tbackground: { value: \"220 14.3% 95.9%\", type: \"color\" },\n\t\t\tforeground: { value: \"0 0% 6.7%\", type: \"color\" },\n\t\t\tcard: { value: \"220 14.3% 95.9%\", type: \"color\" },\n\t\t\t\"card-foreground\": { value: \"0 0% 6.7%\", type: \"color\" },\n\t\t\tpopover: { value: \"220 14.3% 95.9%\", type: \"color\" },\n\t\t\t\"popover-foreground\": { value: \"0 0% 6.7%\", type: \"color\" },\n\t\t\tprimary: { value: \"0 0% 6.7%\", type: \"color\" },\n\t\t\t\"primary-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\tsecondary: { value: \"0 0% 95.9%\", type: \"color\" },\n\t\t\t\"secondary-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\tmuted: { value: \"0 0% 95.9%\", type: \"color\" },\n\t\t\t\"muted-foreground\": { value: \"0 0% 38%\", type: \"color\" },\n\t\t\taccent: { value: \"0 0% 95.9%\", type: \"color\" },\n\t\t\t\"accent-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\tdestructive: { value: \"0 84.2% 60.2%\", type: \"color\" },\n\t\t\t\"destructive-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\tborder: { value: \"0 0% 90%\", type: \"color\" },\n\t\t\tinput: { value: \"0 0% 90%\", type: \"color\" },\n\t\t\tring: { value: \"0 0% 6.7%\", type: \"color\" },\n\t\t\tradius: { value: \"0.5rem\", type: \"radius\" },\n\t\t\t...sharedTokens,\n\t\t},\n\t\tdark: {\n\t\t\tbackground: { value: \"220 10.7% 4.1%\", type: \"color\" },\n\t\t\tforeground: { value: \"0 0% 93.3%\", type: \"color\" },\n\t\t\tcard: { value: \"220 10.7% 4.1%\", type: \"color\" },\n\t\t\tpopover: { value: \"220 10.7% 4.1%\", type: \"color\" },\n\t\t\tprimary: { value: \"0 0% 93.3%\", type: \"color\" },\n\t\t\tsecondary: { value: \"0 0% 4.1%\", type: \"color\" },\n\t\t\tmuted: { value: \"0 0% 4.1%\", type: \"color\" },\n\t\t\taccent: { value: \"0 0% 4.1%\", type: \"color\" },\n\t\t\tdestructive: { value: \"0 63.2% 39.8%\", type: \"color\" },\n\t\t\tborder: { value: \"0 0% 10%\", type: \"color\" },\n\t\t\tinput: { value: \"0 0% 10%\", type: \"color\" },\n\t\t\tring: { value: \"0 0% 93.3%\", type: \"color\" },\n\t\t\tradius: { value: \"0.5rem\", type: \"radius\" },\n\t\t\t\"card-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"popover-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"primary-foreground\": { value: \"240 10% 3.9%\", type: \"color\" },\n\t\t\t\"secondary-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"muted-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"accent-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t\"destructive-foreground\": { value: \"0 0% 98%\", type: \"color\" },\n\t\t\t...sharedTokens,\n\t\t},\n\t},\n};\n"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -3,220 +3,221 @@ import {
3
3
  presetSlugs,
4
4
  presetsByCategory,
5
5
  voltagentPresets
6
- } from "./chunk-EV4APPVD.js";
6
+ } from "./chunk-YBJ5QXNL.js";
7
+ import {
8
+ zapierTheme
9
+ } from "./chunk-LSRIN4KJ.js";
10
+ import {
11
+ vercelTheme
12
+ } from "./chunk-I3MBVZIO.js";
7
13
  import {
8
14
  vodafoneTheme
9
- } from "./chunk-EZFP45CP.js";
15
+ } from "./chunk-Y4P26Z64.js";
10
16
  import {
11
17
  voltagentTheme
12
- } from "./chunk-4QXKFLEQ.js";
18
+ } from "./chunk-2QSORYID.js";
13
19
  import {
14
20
  warpTheme
15
- } from "./chunk-GAQ6LS55.js";
21
+ } from "./chunk-KENDSQNI.js";
16
22
  import {
17
23
  webflowTheme
18
- } from "./chunk-DLLP5KXF.js";
24
+ } from "./chunk-VNRHXCFG.js";
19
25
  import {
20
26
  wiredTheme
21
- } from "./chunk-2LU3ENLP.js";
27
+ } from "./chunk-PKCFXM2I.js";
22
28
  import {
23
29
  wiseTheme
24
- } from "./chunk-GSTGBWQZ.js";
30
+ } from "./chunk-5VJBE4GH.js";
25
31
  import {
26
32
  xTheme
27
- } from "./chunk-7MPAMAFC.js";
33
+ } from "./chunk-6K4R7TQ2.js";
28
34
  import {
29
- zapierTheme
30
- } from "./chunk-7ZAFN5WE.js";
35
+ starbucksTheme
36
+ } from "./chunk-JWKUI4RX.js";
31
37
  import {
32
38
  stripeTheme
33
- } from "./chunk-I267MA2D.js";
39
+ } from "./chunk-TN7R7OCY.js";
34
40
  import {
35
41
  supabaseTheme
36
- } from "./chunk-IXKXYUXQ.js";
42
+ } from "./chunk-B5ZH6DB5.js";
37
43
  import {
38
44
  superhumanTheme
39
- } from "./chunk-5BH5ZMDH.js";
45
+ } from "./chunk-YRUGI622.js";
40
46
  import {
41
47
  teslaTheme
42
- } from "./chunk-Z3XCYZN4.js";
48
+ } from "./chunk-5N7574FT.js";
43
49
  import {
44
50
  thevergeTheme
45
- } from "./chunk-IRDDULX7.js";
51
+ } from "./chunk-APHEYV2T.js";
46
52
  import {
47
53
  togetherTheme
48
- } from "./chunk-MVMZS3PQ.js";
54
+ } from "./chunk-ZFUNYUR4.js";
49
55
  import {
50
56
  uberTheme
51
- } from "./chunk-7OAKNGRU.js";
57
+ } from "./chunk-57VDS6LG.js";
52
58
  import {
53
- vercelTheme
54
- } from "./chunk-KCI73LIZ.js";
59
+ revolutTheme
60
+ } from "./chunk-QIBRIKJO.js";
55
61
  import {
56
62
  runwaymlTheme
57
- } from "./chunk-GAOOBTSH.js";
63
+ } from "./chunk-HSLP5WT4.js";
58
64
  import {
59
65
  sanityTheme
60
- } from "./chunk-NKTZOR54.js";
66
+ } from "./chunk-7MCNXH3M.js";
61
67
  import {
62
68
  sentryTheme
63
- } from "./chunk-YRGKMQP4.js";
69
+ } from "./chunk-JYD76T4M.js";
64
70
  import {
65
71
  shopifyTheme
66
- } from "./chunk-PN567MCL.js";
72
+ } from "./chunk-GGQUOFCD.js";
67
73
  import {
68
74
  slackTheme
69
- } from "./chunk-5O65TVZP.js";
75
+ } from "./chunk-LUES2KWD.js";
70
76
  import {
71
77
  spacexTheme
72
- } from "./chunk-TXY7LBYM.js";
78
+ } from "./chunk-3KVEWVGB.js";
73
79
  import {
74
80
  spotifyTheme
75
- } from "./chunk-BH7IPZBT.js";
81
+ } from "./chunk-CQTXRD33.js";
76
82
  import {
77
- starbucksTheme
78
- } from "./chunk-WAU2FYDY.js";
83
+ opencodeTheme
84
+ } from "./chunk-LVJZYH4E.js";
79
85
  import {
80
86
  pinterestTheme
81
- } from "./chunk-72IPJZ6V.js";
87
+ } from "./chunk-EDRMWCBI.js";
82
88
  import {
83
89
  playstationTheme
84
- } from "./chunk-SG2ACM7O.js";
90
+ } from "./chunk-XNOKSXCM.js";
85
91
  import {
86
92
  posthogTheme
87
- } from "./chunk-CFLNGBY5.js";
93
+ } from "./chunk-H24XEEMC.js";
88
94
  import {
89
95
  raycastTheme
90
- } from "./chunk-KDS62BXD.js";
96
+ } from "./chunk-XJBTDBQ2.js";
91
97
  import {
92
98
  renaultTheme
93
- } from "./chunk-IJBNLZQH.js";
99
+ } from "./chunk-HYXMYG2L.js";
94
100
  import {
95
101
  replicateTheme
96
- } from "./chunk-CUO2HNBR.js";
102
+ } from "./chunk-2A6DLGA7.js";
97
103
  import {
98
104
  resendTheme
99
- } from "./chunk-RTCJ5B7S.js";
105
+ } from "./chunk-MOYDFPT6.js";
100
106
  import {
101
- revolutTheme
102
- } from "./chunk-7YP2HHHV.js";
107
+ mintlifyTheme
108
+ } from "./chunk-66TJF4RL.js";
103
109
  import {
104
110
  miroTheme
105
- } from "./chunk-Z6XLNVF3.js";
111
+ } from "./chunk-YJPZJFCL.js";
106
112
  import {
107
113
  mistralTheme
108
- } from "./chunk-5TDK4XMA.js";
114
+ } from "./chunk-2TGYWGVY.js";
109
115
  import {
110
116
  mongodbTheme
111
- } from "./chunk-LDZC2QYF.js";
117
+ } from "./chunk-272LSGQB.js";
112
118
  import {
113
119
  nikeTheme
114
- } from "./chunk-LNKOIFH4.js";
120
+ } from "./chunk-ECMKBX2J.js";
115
121
  import {
116
122
  notionTheme
117
- } from "./chunk-VUSSQAEI.js";
123
+ } from "./chunk-XPVCBJPS.js";
118
124
  import {
119
125
  nvidiaTheme
120
- } from "./chunk-QTKMLEEM.js";
126
+ } from "./chunk-XITZVOX2.js";
121
127
  import {
122
128
  ollamaTheme
123
- } from "./chunk-VOXUB4AT.js";
129
+ } from "./chunk-2WNXGP5P.js";
124
130
  import {
125
- opencodeTheme
126
- } from "./chunk-D5JFUYFN.js";
131
+ intercomTheme
132
+ } from "./chunk-W6RTETPQ.js";
127
133
  import {
128
134
  krakenTheme
129
- } from "./chunk-4LQ3BH7F.js";
135
+ } from "./chunk-56AUUCZS.js";
130
136
  import {
131
137
  lamborghiniTheme
132
- } from "./chunk-73N7YFTY.js";
138
+ } from "./chunk-P4VM23QS.js";
133
139
  import {
134
140
  linearTheme
135
- } from "./chunk-ATBX7KXM.js";
141
+ } from "./chunk-HOKH4P5K.js";
136
142
  import {
137
143
  lovableTheme
138
- } from "./chunk-I6H6W42Y.js";
144
+ } from "./chunk-H4JPCXHY.js";
139
145
  import {
140
146
  mastercardTheme
141
- } from "./chunk-BK432RWC.js";
147
+ } from "./chunk-MXBNMD6P.js";
142
148
  import {
143
149
  metaTheme
144
- } from "./chunk-RN4ZII2I.js";
150
+ } from "./chunk-VHHPJEZN.js";
145
151
  import {
146
152
  minimaxTheme
147
- } from "./chunk-OCQYO6PW.js";
153
+ } from "./chunk-5LF2KJDC.js";
148
154
  import {
149
- mintlifyTheme
150
- } from "./chunk-ZQJDUTSK.js";
155
+ cursorTheme
156
+ } from "./chunk-NDQJU32I.js";
151
157
  import {
152
158
  elevenlabsTheme
153
- } from "./chunk-NIED6GXO.js";
159
+ } from "./chunk-Q3UUZ4IY.js";
154
160
  import {
155
161
  expoTheme
156
- } from "./chunk-CTI3W357.js";
162
+ } from "./chunk-CZPAYC46.js";
157
163
  import {
158
164
  ferrariTheme
159
- } from "./chunk-2OH25A4J.js";
165
+ } from "./chunk-WSPZDZKU.js";
160
166
  import {
161
167
  figmaTheme
162
- } from "./chunk-FE2IENES.js";
168
+ } from "./chunk-OACQ2U4Z.js";
163
169
  import {
164
170
  framerTheme
165
- } from "./chunk-JZEZHM5N.js";
171
+ } from "./chunk-R34KEJKT.js";
166
172
  import {
167
173
  hashicorpTheme
168
- } from "./chunk-FK5WSFAA.js";
174
+ } from "./chunk-IMKQPXPQ.js";
169
175
  import {
170
176
  ibmTheme
171
- } from "./chunk-KZDIZ2FL.js";
177
+ } from "./chunk-XYUX623C.js";
172
178
  import {
173
- intercomTheme
174
- } from "./chunk-KXBE5FQ7.js";
179
+ bugattiTheme
180
+ } from "./chunk-LHC6NIEV.js";
175
181
  import {
176
182
  calTheme
177
- } from "./chunk-2SI7O4FQ.js";
183
+ } from "./chunk-ZX4NOL7O.js";
178
184
  import {
179
185
  claudeTheme
180
- } from "./chunk-E26YKJRK.js";
186
+ } from "./chunk-JZI3MYHH.js";
181
187
  import {
182
188
  clayTheme
183
- } from "./chunk-I4Z7DY3Z.js";
189
+ } from "./chunk-KXRLRKUR.js";
184
190
  import {
185
191
  clickhouseTheme
186
- } from "./chunk-QEBXRSTH.js";
192
+ } from "./chunk-ODXEV6AS.js";
187
193
  import {
188
194
  cohereTheme
189
- } from "./chunk-SORTCBSJ.js";
195
+ } from "./chunk-ETCNVOIL.js";
190
196
  import {
191
197
  coinbaseTheme
192
- } from "./chunk-PJAJD5VJ.js";
198
+ } from "./chunk-6TDP6DCC.js";
193
199
  import {
194
200
  composioTheme
195
- } from "./chunk-7YPET3HT.js";
196
- import {
197
- cursorTheme
198
- } from "./chunk-UIS6TMM5.js";
201
+ } from "./chunk-H2BLDJS6.js";
199
202
  import {
200
203
  airbnbTheme
201
- } from "./chunk-BCLCH6JZ.js";
204
+ } from "./chunk-5WK2WKWX.js";
202
205
  import {
203
206
  airtableTheme
204
- } from "./chunk-G2V6XAJ7.js";
207
+ } from "./chunk-PL7GWVFC.js";
205
208
  import {
206
209
  appleTheme
207
- } from "./chunk-CEQN6EQY.js";
210
+ } from "./chunk-GXDGNJMF.js";
208
211
  import {
209
212
  binanceTheme
210
- } from "./chunk-BMLLM5GC.js";
213
+ } from "./chunk-TU33EKGU.js";
211
214
  import {
212
215
  bmwMTheme
213
- } from "./chunk-DE2NWOEB.js";
216
+ } from "./chunk-R46HOWHG.js";
214
217
  import {
215
218
  bmwTheme
216
- } from "./chunk-ZTYINGDT.js";
217
- import {
218
- bugattiTheme
219
- } from "./chunk-KLNZW4GO.js";
219
+ } from "./chunk-W2F4IE7R.js";
220
+ import "./chunk-V6YUHZJC.js";
220
221
 
221
222
  // src/index.ts
222
223
  import { strictThemeSchema, themeSchema } from "@hex-core/registry";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @hex-core/themes — premium theme catalog and brand-derived presets.\n *\n * This package establishes a separate publish/version surface for theme\n * presets so the bundled `@hex-core/tokens` package can stay focused on the\n * single canonical default theme + the transformer functions.\n *\n * Catalog:\n * - `midnight`, `ember` — first-party premium themes (re-exports from `@hex-core/tokens`)\n * - `voltagent` brand presets — 71 brand-inspired themes (Tesla, Stripe, Linear, …)\n * auto-generated from the MIT-licensed voltagent/awesome-design-md briefs\n *\n * @example\n * ```ts\n * import { teslaTheme, listPremiumThemes, extendTheme, searchThemes } from \"@hex-core/themes\";\n * import { themeToScopedRuntimeCss } from \"@hex-core/tokens\";\n *\n * const css = themeToScopedRuntimeCss(teslaTheme, { mode: \"dark\" });\n *\n * const myTesla = extendTheme(teslaTheme, {\n * name: \"my-tesla\",\n * tokens: { light: { primary: { value: \"0 100% 50%\", type: \"color\" } } },\n * });\n *\n * const fintech = searchThemes({ category: \"fintech\" });\n * ```\n */\nimport type { Theme, ThemeCategory } from \"@hex-core/registry\";\nimport { strictThemeSchema, themeSchema } from \"@hex-core/registry\";\nimport { emberTheme, midnightTheme } from \"@hex-core/tokens\";\nimport { presetSlugs, presetsByCategory, voltagentPresets } from \"./presets/index.js\";\n\nexport { emberTheme, midnightTheme };\nexport * from \"./presets/index.js\";\n\n/**\n * The full set of themes shipped by this package, keyed by slug. Includes:\n * - First-party premium themes: `midnight`, `ember`\n * - 71 voltagent brand-derived presets (e.g. `tesla`, `stripe`, `linear`)\n *\n * Studio's theme picker iterates this map directly, so every entry shows up\n * automatically without barrel-side wiring.\n */\nexport const premiumThemes: Record<string, Theme> = {\n\tmidnight: midnightTheme,\n\tember: emberTheme,\n\t...voltagentPresets,\n};\n\n/**\n * Retrieve a premium theme by slug.\n *\n * @param name - Theme slug (e.g. `\"midnight\"`, `\"tesla\"`, `\"stripe\"`).\n * @returns The matching Theme object, or `undefined` if the slug is unknown.\n */\nexport function getPremiumTheme(name: string): Theme | undefined {\n\treturn premiumThemes[name];\n}\n\n/**\n * List metadata for every theme in the catalog.\n *\n * Mirrors the shape of `listThemes()` from `@hex-core/tokens` so studios and\n * theme switchers can drive both catalogs through the same UI without\n * adapter code.\n *\n * @returns Array of `{ name, displayName, description, category?, tags?, brand? }` summaries.\n */\nexport function listPremiumThemes(): Array<{\n\tname: string;\n\tdisplayName: string;\n\tdescription: string;\n\tcategory?: ThemeCategory;\n\ttags?: string[];\n\tbrand?: string;\n}> {\n\treturn Object.values(premiumThemes).map((t) => ({\n\t\tname: t.name,\n\t\tdisplayName: t.displayName,\n\t\tdescription: t.description,\n\t\tcategory: t.category,\n\t\ttags: t.tags,\n\t\t// `brand` falls back to `attribution.brand` (the trademark notice\n\t\t// for voltagent-derived presets) — single source of truth on the\n\t\t// theme object, no duplicated top-level `brand` field.\n\t\tbrand: t.brand ?? t.attribution?.brand,\n\t}));\n}\n\n/** Filter input for {@link searchThemes}. */\nexport interface SearchThemesInput {\n\t/** Case-insensitive substring match against `name` / `displayName` / `description`. */\n\tquery?: string;\n\t/** Restrict to a single category. */\n\tcategory?: ThemeCategory;\n\t/** All listed tags must be present (intersection match). */\n\ttags?: string[];\n}\n\n/**\n * Search the full preset catalog by category, tags, or free-text query.\n * The 71 voltagent presets each carry `category` and `tags`; the\n * first-party `midnight` / `ember` themes don't (they pre-date the\n * metadata extension), so they only match via the `query` filter.\n *\n * @param input - Filter criteria; combine for AND semantics.\n * @returns Matching themes, in catalog order.\n */\nexport function searchThemes(input: SearchThemesInput = {}): Theme[] {\n\tconst { query, category, tags } = input;\n\tconst q = query?.toLowerCase().trim();\n\tconst requiredTags = tags?.map((t) => t.toLowerCase());\n\tconst out: Theme[] = [];\n\tfor (const theme of Object.values(premiumThemes)) {\n\t\tif (category && theme.category !== category) continue;\n\t\tif (requiredTags && requiredTags.length > 0) {\n\t\t\tconst themeTags = (theme.tags ?? []).map((t) => t.toLowerCase());\n\t\t\tif (!requiredTags.every((t) => themeTags.includes(t))) continue;\n\t\t}\n\t\tif (q) {\n\t\t\tconst haystack = [\n\t\t\t\ttheme.name,\n\t\t\t\ttheme.displayName,\n\t\t\t\ttheme.description,\n\t\t\t\ttheme.brand,\n\t\t\t\ttheme.attribution?.brand,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \")\n\t\t\t\t.toLowerCase();\n\t\t\tif (!haystack.includes(q)) continue;\n\t\t}\n\t\tout.push(theme);\n\t}\n\treturn out;\n}\n\n/**\n * Override input for {@link extendTheme}. Token sets accept partial\n * objects (token slots merge); scalar fields replace the base value\n * when present. `attribution` is full-replacement (not merged) — a\n * consumer rebranding a preset under their own license / URL almost\n * always wants their attribution to fully replace the upstream's.\n * Pass `attribution: undefined` to remove attribution entirely.\n */\nexport interface ThemeOverrides {\n\tname?: string;\n\tdisplayName?: string;\n\tdescription?: string;\n\tbrand?: string;\n\tcategory?: Theme[\"category\"];\n\ttags?: string[];\n\tdesignBrief?: string;\n\tattribution?: Theme[\"attribution\"];\n\t/**\n\t * Per-mode token overrides — token slot keys are an open record\n\t * (the schema's `tokenSetSchema` uses a catchall), so any subset\n\t * of slots is valid. Slots not listed fall through from the base.\n\t */\n\ttokens?: {\n\t\tlight?: Theme[\"tokens\"][\"light\"];\n\t\tdark?: Theme[\"tokens\"][\"dark\"];\n\t};\n}\n\n/**\n * Compose a custom theme by overlaying overrides on a base preset.\n *\n * Token sets are merged at the slot level: missing slots fall through\n * from the base; overridden slots replace the entire `{ value, type }`\n * record. Scalar fields replace the base when present (including\n * `tags: []` which clears the inherited tag list — explicit empty is\n * intentional, not surprising).\n *\n * `attribution` is FULL-REPLACEMENT (not deep-merged) — a consumer\n * republishing a preset under their own license / brand wants their\n * attribution to land cleanly without the upstream's `brand` /\n * `source` / `url` leaking through. Spread base.attribution yourself\n * if you actually want partial merge.\n *\n * The composed theme is re-validated via `strictThemeSchema` before\n * return, so consumers can't accidentally produce an under-spec'd\n * Theme.\n *\n * @example\n * ```ts\n * const myTesla = extendTheme(teslaTheme, {\n * name: \"my-tesla\",\n * displayName: \"My Tesla\",\n * tokens: {\n * light: { primary: { value: \"0 100% 50%\", type: \"color\" } },\n * },\n * });\n * ```\n *\n * @param base - The starting theme (any preset or first-party theme)\n * @param overrides - Partial theme; only specified fields override\n * @returns A new validated Theme that's safe to feed to any transformer\n */\nexport function extendTheme(base: Theme, overrides: ThemeOverrides = {}): Theme {\n\t// Build a fresh theme so we never mutate `base` (consumers can call\n\t// extendTheme repeatedly against the same shared preset).\n\tconst merged: Theme = {\n\t\tname: overrides.name ?? base.name,\n\t\tdisplayName: overrides.displayName ?? base.displayName,\n\t\tdescription: overrides.description ?? base.description,\n\t\ttokens: {\n\t\t\tlight: { ...base.tokens.light, ...(overrides.tokens?.light ?? {}) },\n\t\t\tdark: { ...base.tokens.dark, ...(overrides.tokens?.dark ?? {}) },\n\t\t},\n\t};\n\n\t// Optional metadata: caller-supplied value wins (including explicit\n\t// empty arrays / undefined). `in` checks distinguish \"not specified\"\n\t// from \"specified as undefined\" so consumers can clear inherited\n\t// fields when they want to.\n\tif (\"brand\" in overrides) merged.brand = overrides.brand;\n\telse if (base.brand !== undefined) merged.brand = base.brand;\n\n\tif (\"category\" in overrides) merged.category = overrides.category;\n\telse if (base.category !== undefined) merged.category = base.category;\n\n\tif (\"tags\" in overrides) merged.tags = overrides.tags;\n\telse if (base.tags !== undefined) merged.tags = base.tags;\n\n\tif (\"designBrief\" in overrides) merged.designBrief = overrides.designBrief;\n\telse if (base.designBrief !== undefined) merged.designBrief = base.designBrief;\n\n\t// Full-replacement semantics for attribution (see JSDoc).\n\tif (\"attribution\" in overrides) merged.attribution = overrides.attribution;\n\telse if (base.attribution !== undefined) merged.attribution = base.attribution;\n\n\t// Permissive parse first so consumer overrides like `tags: []` pass.\n\t// Strict parse catches any token-slot regression.\n\tthemeSchema.parse(merged);\n\tstrictThemeSchema.parse(merged);\n\n\treturn merged;\n}\n\n/** All preset slugs known to this package, including first-party themes. */\nexport const allThemeSlugs: readonly string[] = [...Object.keys(premiumThemes)];\n\nexport { presetSlugs, presetsByCategory };\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @hex-core/themes — premium theme catalog and brand-derived presets.\n *\n * This package establishes a separate publish/version surface for theme\n * presets so the bundled `@hex-core/tokens` package can stay focused on the\n * single canonical default theme + the transformer functions.\n *\n * Catalog:\n * - `midnight`, `ember` — first-party premium themes (re-exports from `@hex-core/tokens`)\n * - `voltagent` brand presets — 71 brand-inspired themes (Tesla, Stripe, Linear, …)\n * auto-generated from the MIT-licensed voltagent/awesome-design-md briefs\n *\n * @example\n * ```ts\n * import { teslaTheme, listPremiumThemes, extendTheme, searchThemes } from \"@hex-core/themes\";\n * import { themeToScopedRuntimeCss } from \"@hex-core/tokens\";\n *\n * const css = themeToScopedRuntimeCss(teslaTheme, { mode: \"dark\" });\n *\n * const myTesla = extendTheme(teslaTheme, {\n * name: \"my-tesla\",\n * tokens: { light: { primary: { value: \"0 100% 50%\", type: \"color\" } } },\n * });\n *\n * const fintech = searchThemes({ category: \"fintech\" });\n * ```\n */\nimport type { Theme, ThemeCategory } from \"@hex-core/registry\";\nimport { strictThemeSchema, themeSchema } from \"@hex-core/registry\";\nimport { emberTheme, midnightTheme } from \"@hex-core/tokens\";\nimport { presetSlugs, presetsByCategory, voltagentPresets } from \"./presets/index.js\";\n\nexport { emberTheme, midnightTheme };\nexport * from \"./presets/index.js\";\n\n/**\n * The full set of themes shipped by this package, keyed by slug. Includes:\n * - First-party premium themes: `midnight`, `ember`\n * - 71 voltagent brand-derived presets (e.g. `tesla`, `stripe`, `linear`)\n *\n * Studio's theme picker iterates this map directly, so every entry shows up\n * automatically without barrel-side wiring.\n */\nexport const premiumThemes: Record<string, Theme> = {\n\tmidnight: midnightTheme,\n\tember: emberTheme,\n\t...voltagentPresets,\n};\n\n/**\n * Retrieve a premium theme by slug.\n *\n * @param name - Theme slug (e.g. `\"midnight\"`, `\"tesla\"`, `\"stripe\"`).\n * @returns The matching Theme object, or `undefined` if the slug is unknown.\n */\nexport function getPremiumTheme(name: string): Theme | undefined {\n\treturn premiumThemes[name];\n}\n\n/**\n * List metadata for every theme in the catalog.\n *\n * Mirrors the shape of `listThemes()` from `@hex-core/tokens` so studios and\n * theme switchers can drive both catalogs through the same UI without\n * adapter code.\n *\n * @returns Array of `{ name, displayName, description, category?, tags?, brand? }` summaries.\n */\nexport function listPremiumThemes(): Array<{\n\tname: string;\n\tdisplayName: string;\n\tdescription: string;\n\tcategory?: ThemeCategory;\n\ttags?: string[];\n\tbrand?: string;\n}> {\n\treturn Object.values(premiumThemes).map((t) => ({\n\t\tname: t.name,\n\t\tdisplayName: t.displayName,\n\t\tdescription: t.description,\n\t\tcategory: t.category,\n\t\ttags: t.tags,\n\t\t// `brand` falls back to `attribution.brand` (the trademark notice\n\t\t// for voltagent-derived presets) — single source of truth on the\n\t\t// theme object, no duplicated top-level `brand` field.\n\t\tbrand: t.brand ?? t.attribution?.brand,\n\t}));\n}\n\n/** Filter input for {@link searchThemes}. */\nexport interface SearchThemesInput {\n\t/** Case-insensitive substring match against `name` / `displayName` / `description`. */\n\tquery?: string;\n\t/** Restrict to a single category. */\n\tcategory?: ThemeCategory;\n\t/** All listed tags must be present (intersection match). */\n\ttags?: string[];\n}\n\n/**\n * Search the full preset catalog by category, tags, or free-text query.\n * The 71 voltagent presets each carry `category` and `tags`; the\n * first-party `midnight` / `ember` themes don't (they pre-date the\n * metadata extension), so they only match via the `query` filter.\n *\n * @param input - Filter criteria; combine for AND semantics.\n * @returns Matching themes, in catalog order.\n */\nexport function searchThemes(input: SearchThemesInput = {}): Theme[] {\n\tconst { query, category, tags } = input;\n\tconst q = query?.toLowerCase().trim();\n\tconst requiredTags = tags?.map((t) => t.toLowerCase());\n\tconst out: Theme[] = [];\n\tfor (const theme of Object.values(premiumThemes)) {\n\t\tif (category && theme.category !== category) continue;\n\t\tif (requiredTags && requiredTags.length > 0) {\n\t\t\tconst themeTags = (theme.tags ?? []).map((t) => t.toLowerCase());\n\t\t\tif (!requiredTags.every((t) => themeTags.includes(t))) continue;\n\t\t}\n\t\tif (q) {\n\t\t\tconst haystack = [\n\t\t\t\ttheme.name,\n\t\t\t\ttheme.displayName,\n\t\t\t\ttheme.description,\n\t\t\t\ttheme.brand,\n\t\t\t\ttheme.attribution?.brand,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \")\n\t\t\t\t.toLowerCase();\n\t\t\tif (!haystack.includes(q)) continue;\n\t\t}\n\t\tout.push(theme);\n\t}\n\treturn out;\n}\n\n/**\n * Override input for {@link extendTheme}. Token sets accept partial\n * objects (token slots merge); scalar fields replace the base value\n * when present. `attribution` is full-replacement (not merged) — a\n * consumer rebranding a preset under their own license / URL almost\n * always wants their attribution to fully replace the upstream's.\n * Pass `attribution: undefined` to remove attribution entirely.\n */\nexport interface ThemeOverrides {\n\tname?: string;\n\tdisplayName?: string;\n\tdescription?: string;\n\tbrand?: string;\n\tcategory?: Theme[\"category\"];\n\ttags?: string[];\n\tdesignBrief?: string;\n\tattribution?: Theme[\"attribution\"];\n\t/**\n\t * Per-mode token overrides — token slot keys are an open record\n\t * (the schema's `tokenSetSchema` uses a catchall), so any subset\n\t * of slots is valid. Slots not listed fall through from the base.\n\t */\n\ttokens?: {\n\t\tlight?: Theme[\"tokens\"][\"light\"];\n\t\tdark?: Theme[\"tokens\"][\"dark\"];\n\t};\n}\n\n/**\n * Compose a custom theme by overlaying overrides on a base preset.\n *\n * Token sets are merged at the slot level: missing slots fall through\n * from the base; overridden slots replace the entire `{ value, type }`\n * record. Scalar fields replace the base when present (including\n * `tags: []` which clears the inherited tag list — explicit empty is\n * intentional, not surprising).\n *\n * `attribution` is FULL-REPLACEMENT (not deep-merged) — a consumer\n * republishing a preset under their own license / brand wants their\n * attribution to land cleanly without the upstream's `brand` /\n * `source` / `url` leaking through. Spread base.attribution yourself\n * if you actually want partial merge.\n *\n * The composed theme is re-validated via `strictThemeSchema` before\n * return, so consumers can't accidentally produce an under-spec'd\n * Theme.\n *\n * @example\n * ```ts\n * const myTesla = extendTheme(teslaTheme, {\n * name: \"my-tesla\",\n * displayName: \"My Tesla\",\n * tokens: {\n * light: { primary: { value: \"0 100% 50%\", type: \"color\" } },\n * },\n * });\n * ```\n *\n * @param base - The starting theme (any preset or first-party theme)\n * @param overrides - Partial theme; only specified fields override\n * @returns A new validated Theme that's safe to feed to any transformer\n */\nexport function extendTheme(base: Theme, overrides: ThemeOverrides = {}): Theme {\n\t// Build a fresh theme so we never mutate `base` (consumers can call\n\t// extendTheme repeatedly against the same shared preset).\n\tconst merged: Theme = {\n\t\tname: overrides.name ?? base.name,\n\t\tdisplayName: overrides.displayName ?? base.displayName,\n\t\tdescription: overrides.description ?? base.description,\n\t\ttokens: {\n\t\t\tlight: { ...base.tokens.light, ...(overrides.tokens?.light ?? {}) },\n\t\t\tdark: { ...base.tokens.dark, ...(overrides.tokens?.dark ?? {}) },\n\t\t},\n\t};\n\n\t// Optional metadata: caller-supplied value wins (including explicit\n\t// empty arrays / undefined). `in` checks distinguish \"not specified\"\n\t// from \"specified as undefined\" so consumers can clear inherited\n\t// fields when they want to.\n\tif (\"brand\" in overrides) merged.brand = overrides.brand;\n\telse if (base.brand !== undefined) merged.brand = base.brand;\n\n\tif (\"category\" in overrides) merged.category = overrides.category;\n\telse if (base.category !== undefined) merged.category = base.category;\n\n\tif (\"tags\" in overrides) merged.tags = overrides.tags;\n\telse if (base.tags !== undefined) merged.tags = base.tags;\n\n\tif (\"designBrief\" in overrides) merged.designBrief = overrides.designBrief;\n\telse if (base.designBrief !== undefined) merged.designBrief = base.designBrief;\n\n\t// Full-replacement semantics for attribution (see JSDoc).\n\tif (\"attribution\" in overrides) merged.attribution = overrides.attribution;\n\telse if (base.attribution !== undefined) merged.attribution = base.attribution;\n\n\t// Permissive parse first so consumer overrides like `tags: []` pass.\n\t// Strict parse catches any token-slot regression.\n\tthemeSchema.parse(merged);\n\tstrictThemeSchema.parse(merged);\n\n\treturn merged;\n}\n\n/** All preset slugs known to this package, including first-party themes. */\nexport const allThemeSlugs: readonly string[] = [...Object.keys(premiumThemes)];\n\nexport { presetSlugs, presetsByCategory };\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presets/_briefs/airbnb.ts"],"sourcesContent":["// AUTO-GENERATED — do not hand-edit. Source: https://github.com/voltagent/awesome-design-md\nexport const airbnbBrief = `---\nversion: alpha\nname: Airbnb\ndescription: A warm, generous consumer marketplace anchored on a clean white canvas and Airbnb Rausch (#ff385c), the single brand voltage that carries every primary CTA, search-button orb, and rating dot. Type runs Airbnb Cereal VF at modest weights — display sits at 22–28px in weight 500/600 rather than the heavy 700+ that fintech and enterprise systems use; the brand trusts photography and generous whitespace over typographic muscle. Three product entries (Homes, Experiences, Services) sit in the top nav with hand-illustrated 32-icon glyphs and \"NEW\" badges, signaling a marketplace expansion rather than a feature dump. Pill-shaped search bars (\\`{rounded.full}\\`), softly rounded property cards (\\`{rounded.lg}\\` ~14px), and 32px button radii read as friendly and human — there is no hard corner anywhere except the body grid.\n\ncolors:\n primary: \"#ff385c\"\n primary-active: \"#e00b41\"\n primary-disabled: \"#ffd1da\"\n primary-error-text: \"#c13515\"\n primary-error-text-hover: \"#b32505\"\n luxe: \"#460479\"\n plus: \"#92174d\"\n ink: \"#222222\"\n body: \"#3f3f3f\"\n muted: \"#6a6a6a\"\n muted-soft: \"#929292\"\n hairline: \"#dddddd\"\n hairline-soft: \"#ebebeb\"\n border-strong: \"#c1c1c1\"\n canvas: \"#ffffff\"\n surface-soft: \"#f7f7f7\"\n surface-card: \"#ffffff\"\n surface-strong: \"#f2f2f2\"\n on-primary: \"#ffffff\"\n on-dark: \"#ffffff\"\n legal-link: \"#428bff\"\n star-rating: \"#222222\"\n scrim: \"#000000\"\n\ntypography:\n display-xl:\n fontFamily: \"'Airbnb Cereal VF', Circular, -apple-system, system-ui, Roboto, 'Helvetica Neue', sans-serif\"\n fontSize: 28px\n fontWeight: 700\n lineHeight: 1.43\n letterSpacing: 0\n display-lg:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 22px\n fontWeight: 500\n lineHeight: 1.18\n letterSpacing: -0.44px\n display-md:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 21px\n fontWeight: 700\n lineHeight: 1.43\n letterSpacing: 0\n display-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 20px\n fontWeight: 600\n lineHeight: 1.20\n letterSpacing: -0.18px\n title-md:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 600\n lineHeight: 1.25\n letterSpacing: 0\n title-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 500\n lineHeight: 1.25\n letterSpacing: 0\n rating-display:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 64px\n fontWeight: 700\n lineHeight: 1.1\n letterSpacing: -1px\n body-md:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 400\n lineHeight: 1.5\n letterSpacing: 0\n body-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 14px\n fontWeight: 400\n lineHeight: 1.43\n letterSpacing: 0\n caption:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 14px\n fontWeight: 500\n lineHeight: 1.29\n letterSpacing: 0\n caption-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 13px\n fontWeight: 400\n lineHeight: 1.23\n letterSpacing: 0\n badge:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 11px\n fontWeight: 600\n lineHeight: 1.18\n letterSpacing: 0\n micro-label:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 12px\n fontWeight: 700\n lineHeight: 1.33\n letterSpacing: 0\n uppercase-tag:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 8px\n fontWeight: 700\n lineHeight: 1.25\n letterSpacing: 0.32px\n textTransform: uppercase\n button-md:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 500\n lineHeight: 1.25\n letterSpacing: 0\n button-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 14px\n fontWeight: 500\n lineHeight: 1.29\n letterSpacing: 0\n link:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 14px\n fontWeight: 400\n lineHeight: 1.43\n letterSpacing: 0\n nav-link:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 600\n lineHeight: 1.25\n letterSpacing: 0\n\nrounded:\n none: 0px\n xs: 4px\n sm: 8px\n md: 14px\n lg: 20px\n xl: 32px\n full: 9999px\n\nspacing:\n xxs: 2px\n xs: 4px\n sm: 8px\n md: 12px\n base: 16px\n lg: 24px\n xl: 32px\n xxl: 48px\n section: 64px\n\ncomponents:\n button-primary:\n backgroundColor: \"{colors.primary}\"\n textColor: \"{colors.on-primary}\"\n typography: \"{typography.button-md}\"\n rounded: \"{rounded.sm}\"\n padding: 14px 24px\n height: 48px\n button-primary-active:\n backgroundColor: \"{colors.primary-active}\"\n textColor: \"{colors.on-primary}\"\n rounded: \"{rounded.sm}\"\n button-primary-disabled:\n backgroundColor: \"{colors.primary-disabled}\"\n textColor: \"{colors.on-primary}\"\n rounded: \"{rounded.sm}\"\n button-secondary:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.button-md}\"\n rounded: \"{rounded.sm}\"\n padding: 13px 23px\n height: 48px\n button-tertiary-text:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.button-md}\"\n button-pill-rausch:\n backgroundColor: \"{colors.primary}\"\n textColor: \"{colors.on-primary}\"\n typography: \"{typography.button-sm}\"\n rounded: \"{rounded.full}\"\n padding: 10px 20px\n search-orb:\n backgroundColor: \"{colors.primary}\"\n textColor: \"{colors.on-primary}\"\n rounded: \"{rounded.full}\"\n height: 48px\n icon-button-circle:\n backgroundColor: \"{colors.surface-strong}\"\n textColor: \"{colors.ink}\"\n rounded: \"{rounded.full}\"\n height: 32px\n icon-button-outline:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n rounded: \"{rounded.full}\"\n height: 40px\n top-nav:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.nav-link}\"\n height: 80px\n product-tab-active:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.nav-link}\"\n rounded: \"{rounded.none}\"\n product-tab-inactive:\n backgroundColor: transparent\n textColor: \"{colors.muted}\"\n typography: \"{typography.nav-link}\"\n search-bar-pill:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.full}\"\n padding: 14px 24px\n height: 64px\n search-field-segment:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.caption}\"\n padding: 8px 24px\n category-strip:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.muted}\"\n typography: \"{typography.button-sm}\"\n category-tab-active:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.button-sm}\"\n rounded: \"{rounded.none}\"\n property-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.md}\"\n property-card-photo:\n rounded: \"{rounded.md}\"\n experience-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.title-md}\"\n rounded: \"{rounded.md}\"\n city-link-block:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.title-sm}\"\n rating-display-card:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.rating-display}\"\n guest-favorite-badge:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.badge}\"\n rounded: \"{rounded.full}\"\n padding: 4px 10px\n new-tag:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.uppercase-tag}\"\n rounded: \"{rounded.full}\"\n padding: 2px 6px\n amenity-row:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n padding: 12px 0\n reviews-card:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n host-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.md}\"\n padding: 24px\n reservation-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.md}\"\n padding: 24px\n date-picker-day:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.full}\"\n date-picker-day-selected:\n backgroundColor: \"{colors.ink}\"\n textColor: \"{colors.on-dark}\"\n rounded: \"{rounded.full}\"\n text-input:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.sm}\"\n padding: 14px 12px\n height: 56px\n footer-light:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n padding: 48px 80px\n footer-link:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n legal-band:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.muted}\"\n typography: \"{typography.caption-sm}\"\n---\n\n## Overview\n\nAirbnb is the canonical example of a generous, photography-led consumer marketplace. The base canvas is **pure white** (\\`{colors.canvas}\\` — #ffffff) with deep near-black ink (\\`{colors.ink}\\` — #222222) for headlines and body, and a single voltage of **Rausch** (\\`{colors.primary}\\` — #ff385c) carrying every primary CTA, the search-button orb, the heart save state, and inline brand links. There is no secondary brand color in mainline marketing — the **Luxe purple** (\\`{colors.luxe}\\` — #460479) and **Plus magenta** (\\`{colors.plus}\\` — #92174d) tokens are sub-brand accents that only appear inside Airbnb Luxe / Plus contexts.\n\nType runs **Airbnb Cereal VF** (a custom variable font Airbnb licenses), with **Circular** as the historic in-house fallback and a system stack underneath. Cereal sits at modest weights — display headlines render at 22–28px in weight 500–600, not the heavy 700+ weights that financial or enterprise systems lean on. The hero h1 (\"Inspiration for future getaways\") on the homepage is just 28px / 700, which would feel small on a typical SaaS page; here it works because the layout leans on photography (city collage, property cards) for visual weight rather than typographic muscle.\n\nThe shape language is **soft**. Buttons are 8px radius (\\`{rounded.sm}\\`), property cards are ~14px (\\`{rounded.md}\\`), the search bar is fully pill-shaped (\\`{rounded.full}\\`), wishlist hearts and search orbs are circles (\\`{rounded.full}\\`), and category strip rounded corners run at 32px (\\`{rounded.xl}\\`). There is essentially no hard corner anywhere except the body grid itself — every interactive element is rounded.\n\n**Key Characteristics:**\n- Single accent color: \\`{colors.primary}\\` (#ff385c — \"Rausch\") carries every primary CTA, the search orb, the heart save state, and the brand wordmark. Used scarcely — most pages are 90% white + ink with one or two Rausch moments.\n- Custom variable type: \\`Airbnb Cereal VF\\`. Display weights sit at 500–700, body at 400. Modest weight is intentional — the system trusts photography for visual heft.\n- Three-product top nav: Homes, Experiences, Services — each with a hand-illustrated 32px icon and \"NEW\" badges (\\`{component.new-tag}\\`) on the two newer products. Active tab uses an underline rule (\\`{component.product-tab-active}\\`).\n- Pill-shaped global search bar: white surface, fully rounded (\\`{rounded.full}\\`), divided by 1px hairlines into Where / When / Who segments, terminated by a circular Rausch search orb (\\`{component.search-orb}\\`).\n- Property cards are photo-first: aspect-ratio rectangles with \\`{rounded.md}\\` corner clipping, swipeable image carousel, \"Guest favorite\" floating badge top-left, heart icon top-right, then 4–5 lines of meta beneath.\n- Editorial dropdowns (footer, language picker) are clean text columns over the white canvas — no card surface, no shadow.\n- The design system caps elevation at one shadow tier (\\`box-shadow: rgba(0,0,0,0.02) 0 0 0 1px, rgba(0,0,0,0.04) 0 2px 6px, rgba(0,0,0,0.1) 0 4px 8px\\`) — used on hover-floated cards and search/account dropdowns.\n- 8px base spacing system, with major sections at \\`{spacing.section}\\` (64px) — generous but not airy enough to feel editorial-magazine; the marketplace density wants more cards per scroll.\n\n## Colors\n\n### Brand & Accent\n- **Rausch** (\\`{colors.primary}\\` — #ff385c): The single brand color. Used for primary CTA backgrounds (Reserve, Continue), the search orb, the heart save state on property cards, and inline brand links. The most recognizable color in consumer travel.\n- **Rausch Active** (\\`{colors.primary-active}\\` — #e00b41): The press / pointer-down variant — slightly more saturated. Used on \\`{component.button-primary-active}\\`.\n- **Rausch Disabled** (\\`{colors.primary-disabled}\\` — #ffd1da): A pale tint used on disabled CTAs.\n- **Luxe Purple** (\\`{colors.luxe}\\` — #460479): Sub-brand accent for Airbnb Luxe. Only appears inside Luxe-branded surfaces — never in mainline marketing.\n- **Plus Magenta** (\\`{colors.plus}\\` — #92174d): Sub-brand accent for Airbnb Plus. Same scoping as Luxe — sub-product only.\n\n### Surface\n- **Canvas** (\\`{colors.canvas}\\` — #ffffff): The default page floor for every public page. Airbnb does not have a dark mode on the public web.\n- **Surface Soft** (\\`{colors.surface-soft}\\` — #f7f7f7): The lightest fill — used on disabled fields, sub-nav hover backgrounds, and the inline search filter band.\n- **Surface Strong** (\\`{colors.surface-strong}\\` — #f2f2f2): Slightly heavier fill — circular icon-button surface (e.g., the breadcrumb back-arrow and listing toolbar buttons).\n\n### Hairlines & Borders\n- **Hairline** (\\`{colors.hairline}\\` — #dddddd): The default 1px border tone — search bar dividers, table separators, footer column splitters, card 1px borders.\n- **Hairline Soft** (\\`{colors.hairline-soft}\\` — #ebebeb): A lighter divider used on long-scrolling editorial body separators.\n- **Border Strong** (\\`{colors.border-strong}\\` — #c1c1c1): A heavier stroke used on disabled outline buttons and form input outlines after focus.\n\n### Text\n- **Ink** (\\`{colors.ink}\\` — #222222): The dominant text color on light surfaces. Display headlines, body paragraphs, primary nav links, and most inline link text. Never pure black.\n- **Body** (\\`{colors.body}\\` — #3f3f3f): A secondary running-text color used inside long-form review and amenity copy where ink would feel too heavy.\n- **Muted** (\\`{colors.muted}\\` — #6a6a6a): Sub-titles inside city link blocks (\"Cottage rentals\", \"Villa rentals\"), inactive product-tab labels, footer category sub-labels, \"View all\" links.\n- **Muted Soft** (\\`{colors.muted-soft}\\` — #929292): Disabled link text. Used very sparingly.\n- **Star Rating** (\\`{colors.star-rating}\\` — #222222): The same ink token — Airbnb's star icon and \"4.81\" rating numbers all render in ink rather than a yellow/gold color, which is a deliberate brand choice (yellow stars feel cheap in travel context).\n- **On Primary** (\\`{colors.on-primary}\\` — #ffffff): White text on Rausch CTAs.\n\n### Semantic\n- **Error** (\\`{colors.primary-error-text}\\` — #c13515): Inline error text for form validation. Distinct from Rausch — slightly darker, more saturated red.\n- **Error Hover** (\\`{colors.primary-error-text-hover}\\` — #b32505): Darkens on link hover.\n- **Legal Link Blue** (\\`{colors.legal-link}\\` — #428bff): Inline links inside legal copy (Privacy, Terms). Only used inside the legal sub-band.\n\n### Scrim\n- **Scrim** (\\`{colors.scrim}\\` — #000000 at 50% opacity): The global modal backdrop tone — date picker, login dialog, language picker. Stored as the base hex; opacity is applied at render time.\n\n## Typography\n\n### Font Family\nThe system runs **Airbnb Cereal VF** for everything — display, body, navigation, captions, microcopy. Fallbacks walk \\`Circular, -apple-system, system-ui, Roboto, \"Helvetica Neue\", sans-serif\\`. **Circular** is the historic in-house typeface still kept as the first non-variable fallback; system stacks back it up.\n\nThere is no separate display family. The variable font carries the entire scale.\n\n### Hierarchy\n\n| Token | Size | Weight | Line Height | Letter Spacing | Use |\n|---|---|---|---|---|---|\n| \\`{typography.rating-display}\\` | 64px | 700 | 1.1 | -1px | Listing detail rating display (\"4.81\") |\n| \\`{typography.display-xl}\\` | 28px | 700 | 1.43 | 0 | Homepage h1 (\"Inspiration for future getaways\") |\n| \\`{typography.display-lg}\\` | 22px | 500 | 1.18 | -0.44px | Listing detail h1 (\"Close to Fethiye Aliyah Bali Beach…\") |\n| \\`{typography.display-md}\\` | 21px | 700 | 1.43 | 0 | Section heads inside listing detail (\"What this place offers\") |\n| \\`{typography.display-sm}\\` | 20px | 600 | 1.20 | -0.18px | Sub-section titles (\"Things to know\") |\n| \\`{typography.title-md}\\` | 16px | 600 | 1.25 | 0 | City link block titles (\"Wilmington\", \"Athens\") |\n| \\`{typography.title-sm}\\` | 16px | 500 | 1.25 | 0 | Footer column heads (\"Support\", \"Hosting\", \"Airbnb\") |\n| \\`{typography.body-md}\\` | 16px | 400 | 1.5 | 0 | Default running-text inside listing copy |\n| \\`{typography.body-sm}\\` | 14px | 400 | 1.43 | 0 | Card meta lines, dates, prices, distance text |\n| \\`{typography.caption}\\` | 14px | 500 | 1.29 | 0 | Search field segment labels (\"Where\", \"When\", \"Who\") |\n| \\`{typography.caption-sm}\\` | 13px | 400 | 1.23 | 0 | Footer legal line (\"© 2026 Airbnb, Inc.\") |\n| \\`{typography.badge}\\` | 11px | 600 | 1.18 | 0 | \"Guest favorite\" floating badge text |\n| \\`{typography.micro-label}\\` | 12px | 700 | 1.33 | 0 | Card amenity micro-labels (\"Inline 6\") |\n| \\`{typography.uppercase-tag}\\` | 8px | 700 | 1.25 | 0.32px (uppercase) | \"NEW\" badge on product nav tabs |\n| \\`{typography.button-md}\\` | 16px | 500 | 1.25 | 0 | Primary CTA button labels |\n| \\`{typography.button-sm}\\` | 14px | 500 | 1.29 | 0 | Pill button labels (category strip) |\n| \\`{typography.link}\\` | 14px | 400 | 1.43 | 0 | Inline body links |\n| \\`{typography.nav-link}\\` | 16px | 600 | 1.25 | 0 | Top product-nav labels (Homes, Experiences, Services) |\n\n### Principles\nDisplay weights stay modest. The homepage h1 at 28px / 700 is deliberately small — it tucks under the search bar so photography and the city-link grid carry visual hierarchy. The listing-detail h1 at 22px / 500 is even quieter; the listing photo banner does the work above it.\n\nThe single typographically loud moment in the entire system is the **rating display** (\\`{typography.rating-display}\\` — 64px / 700) on listing pages. That is the only place the system trusts type alone to carry hierarchy — rating numbers are a peak trust signal, so they get the loudest treatment.\n\n### Note on Font Substitutes\nIf Airbnb Cereal VF and Circular are unavailable, **Inter** is the closest open-source substitute. Adjust display headlines down by ~2% in line-height to match Cereal's slightly tighter cap height; otherwise the proportions transfer cleanly.\n\n## Layout\n\n### Spacing System\n- **Base unit:** 4px (with 2px micro-step).\n- **Tokens:** \\`{spacing.xxs}\\` 2px · \\`{spacing.xs}\\` 4px · \\`{spacing.sm}\\` 8px · \\`{spacing.md}\\` 12px · \\`{spacing.base}\\` 16px · \\`{spacing.lg}\\` 24px · \\`{spacing.xl}\\` 32px · \\`{spacing.xxl}\\` 48px · \\`{spacing.section}\\` 64px.\n- **Section padding (vertical):** \\`{spacing.section}\\` (64px) for major page bands; tighter than typical SaaS marketing (80–96px) because marketplace pages need higher card density per scroll.\n- **Card internal padding:** \\`{spacing.lg}\\` (24px) for \\`{component.host-card}\\` and \\`{component.reservation-card}\\`; \\`{spacing.base}\\` (16px) for property-card meta block; \\`{spacing.sm}\\` (8px) for caption / date-row gutters.\n- **Gutters:** \\`{spacing.base}\\` (16px) between cards in the homepage city grid; \\`{spacing.lg}\\` (24px) inside footer column gutters; \\`{spacing.xs}\\` (4px) on dense category-strip dividers.\n\n### Grid & Container\n- **Max content width:** ~1280px centered on the homepage and editorial pages. Listing detail pages cap closer to 1080px to keep the photo banner and reservation rail readable.\n- **City link grid (homepage footer):** 6-column grid at desktop with each cell housing a city name in \\`{typography.title-md}\\` and a category sub-label in \\`{typography.body-sm}\\` muted.\n- **Listing detail:** 2-column with photo / amenity body on the left (~64% width) and a sticky reservation card (\\`{component.reservation-card}\\`) on the right (~32%).\n- **Footer:** 3-column link list (Support / Hosting / Airbnb) at desktop, collapsing to 1-column on mobile.\n\n### Whitespace Philosophy\nThe system gives editorial bands 64px of vertical breathing room but compresses card grids — property and city-link cards sit just 16px apart. The contrast is intentional: the page reads as \"open hero, dense marketplace below,\" reinforcing the marketplace nature without overwhelming the visitor at the fold.\n\n## Elevation\n\nThe system has essentially **one shadow tier** plus the flat baseline.\n\n- **Flat (no shadow):** Body, hero, footer, all editorial bands — 95% of surfaces.\n- **Card hover float:** \\`box-shadow: rgba(0, 0, 0, 0.02) 0 0 0 1px, rgba(0, 0, 0, 0.04) 0 2px 6px 0, rgba(0, 0, 0, 0.1) 0 4px 8px 0\\` — applied to property cards on pointer hover, the search bar at rest, and the dropdown menus (account menu, language picker, date picker). This is the single shadow definition in the entire system.\n- **Modal scrim:** \\`{colors.scrim}\\` rendered at 50% opacity — the global modal backdrop. Used on date pickers, login dialogs, language picker.\n\nThere are no progressive elevation tiers — the system either has the one shadow or none. Depth comes from photography, the white-on-white surface separation, and rounded-corner clipping rather than from layered shadows.\n\n## Components\n\n### Buttons\n\n**\\`button-primary\\`** — Rausch fill, white text, 8px radius, 14×24px padding, 48px height, weight 500. The most common CTA across the system: \"Reserve\", \"Continue\", \"Search\", account-flow primaries.\n\n**\\`button-primary-active\\`** — The press state. Background flips to \\`{colors.primary-active}\\`. No transform, no shadow change.\n\n**\\`button-primary-disabled\\`** — Pale Rausch tint at #ffd1da with white text. Cursor not-allowed.\n\n**\\`button-secondary\\`** — White fill with ink text and a 1px ink outline. 8px radius. Used for \"Save\", \"Cancel\", and inverse CTAs over Rausch surfaces.\n\n**\\`button-tertiary-text\\`** — Plain ink text, no surface, no border. Underlined on hover. Used for \"Show more\" type links and modal close labels.\n\n**\\`button-pill-rausch\\`** — A pill-shaped Rausch CTA used on featured cells (e.g., \"Become a host\" sub-CTA) — 9999px radius, 10×20px padding, 14px label.\n\n### Search Surface\n\n**\\`search-bar-pill\\`** — The signature global search bar. White fill, 9999px radius, 64px height, 1px hairline 1px-shadow border. Internally divided by vertical hairline rules into \\`{component.search-field-segment}\\` cells (Where / When / Who). Each segment holds an uppercase caption label above a placeholder line in \\`{typography.caption}\\`.\n\n**\\`search-orb\\`** — The circular Rausch orb terminating the right edge of the search bar. 48×48px, fully rounded, white magnifying-glass icon centered. The hottest single color moment on the homepage.\n\n### Top Navigation\n\n**\\`top-nav\\`** — White surface, 80px height, 1px bottom hairline. The Airbnb wordmark sits flush left, the three product tabs (Homes / Experiences / Services) sit in the dead center, and account utilities (host link, language globe, account menu) sit flush right.\n\n**\\`product-tab-active\\`** — Ink label in \\`{typography.nav-link}\\`, 32px hand-illustrated icon, 2px ink underline rule beneath the icon-label pair.\n\n**\\`product-tab-inactive\\`** — Muted label, illustrated icon, no underline. Becomes active on click.\n\n**\\`new-tag\\`** — A tiny rounded-pill badge (\\`{rounded.full}\\`) anchored top-right of an icon, carrying the uppercase \"NEW\" label in \\`{typography.uppercase-tag}\\` (8px / 700 with 0.32px tracking, uppercase). Used on Experiences and Services to signal recency.\n\n### Listing Cards\n\n**\\`property-card\\`** — A photo-first card. 1:1 aspect-ratio image with \\`{rounded.md}\\` corner clipping, image carousel dots overlay, \"Guest favorite\" floating badge top-left (\\`{component.guest-favorite-badge}\\`), and a heart icon top-right (\\`{component.icon-button-circle}\\` in default outlined state, Rausch-filled when saved). Beneath the image: 4–5 lines of meta — title (\\`{typography.title-md}\\`), distance / dates (\\`{typography.body-sm}\\` muted), and price (\"$X night\") right-aligned.\n\n**\\`property-card-photo\\`** — The photo plate itself, separated as a token because some surfaces (wishlist, search results) reuse just the photo without the meta block.\n\n**\\`experience-card\\`** — A taller-aspect card (4:5) for experience listings. Same \\`{rounded.md}\\` clipping, floating \"NEW\" badge top-left, heart top-right, and a single-line title beneath.\n\n**\\`guest-favorite-badge\\`** — White rounded pill (\\`{rounded.full}\\`) at 11px / 600 weight. Sits over the photo with the system's only shadow tier applied for elevation.\n\n### Listing Detail\n\n**\\`rating-display-card\\`** — The signature listing-detail moment. A 64px / 700 rating number (\"4.81\") flanked left and right by tiny laurel-wreath SVG ornaments. Beneath the rating: \"Guest favorite\" tagline and a row of ink stat columns. The largest typographic weight in the whole system.\n\n**\\`amenity-row\\`** — A 1-column list of amenity icons + ink labels in \\`{typography.body-md}\\`. 12px row padding, no border between rows; section is closed by a 1px hairline divider above and below.\n\n**\\`reviews-card\\`** — A 2-column grid of review excerpts. Each column holds an author row (avatar, name, date) above a 3-line excerpt with \"Show more\" tertiary link.\n\n**\\`host-card\\`** — A white card with \\`{rounded.md}\\` rounding and 24px padding holding a host avatar, name, \"Superhost\" badge, response-rate stat, and a \"Contact host\" \\`{component.button-secondary}\\`.\n\n**\\`reservation-card\\`** — The sticky right-rail card on listing detail pages. White surface, \\`{rounded.md}\\` rounding, 1px hairline border, 1px shadow tier elevation, 24px padding. Contains: nightly price (\\`{typography.display-md}\\` ink), date-range selector, guest-count stepper, \"Reserve\" primary CTA full-width, and a fee breakdown stack beneath in \\`{typography.body-sm}\\`.\n\n### Date Picker\n\n**\\`date-picker-day\\`** — A 40×40px circular cell carrying the day number in \\`{typography.body-sm}\\`. Default state is transparent fill, ink text.\n\n**\\`date-picker-day-selected\\`** — Ink fill, white text, full circle (\\`{rounded.full}\\`). Range states between two selected days carry a \\`{colors.surface-soft}\\` lozenge background that connects them.\n\n### Forms\n\n**\\`text-input\\`** — White surface, 1px hairline outline, \\`{rounded.sm}\\` 8px radius, 56px height, 14×12px padding. Stacked label above (in \\`{typography.caption}\\` muted), placeholder text in \\`{typography.body-md}\\` muted. On focus, the border thickens to 2px ink and the border color flips to \\`{colors.ink}\\` — no glow, no ring.\n\n### Footer\n\n**\\`footer-light\\`** — White surface (matches the page canvas — Airbnb has no contrast footer), 48×80px padding. Three columns of link blocks (Support / Hosting / Airbnb), separated by generous 24px gutters. Each column heads with a \\`{typography.title-sm}\\` ink label and stacks \\`{component.footer-link}\\` rows in \\`{typography.body-sm}\\` ink.\n\n**\\`legal-band\\`** — A bottom strip beneath the footer columns carrying the copyright line, language picker (globe icon + \"English (US)\" link), currency picker, and social icons (Facebook, X, Instagram). All text in muted \\`{colors.muted}\\` at \\`{typography.caption-sm}\\`.\n\n## Responsive Behavior\n\n| Name | Width | Key Changes |\n|---|---|---|\n| Mobile | < 744px | Top nav collapses to logo + hamburger; product tabs hide behind a sheet; search bar collapses to a single tappable pill; property cards stack 1-up; city grid 1-column; listing detail collapses reservation card to a sticky bottom bar. |\n| Tablet | 744–1128px | Top nav keeps product tabs but search bar narrows; property cards 2-up; city grid 2–3 column; reservation card stays sticky right-rail at narrower width. |\n| Desktop | 1128–1440px | Full top nav with three product tabs centered; search bar at full pill width with all 3 segments visible; property cards 4-up; city grid 6-column; listing detail 2-column with reservation rail. |\n| Wide | > 1440px | Content width caps at 1440px on listing/search pages and ~1280px on editorial; gutters absorb the rest. |\n\n### Touch Targets\n- Primary CTAs at minimum 48×48px (above WCAG AAA).\n- Search orb is 48×48px circular — the most-tapped element on the page.\n- Heart save button is 32×32px circular — borderline for AAA but compensated by a generous 12px padding inside the photo card.\n- Date-picker day cells are 40×40px circular.\n\n### Collapsing Strategy\n- Top product tabs collapse into a hamburger sheet below 744px.\n- Search bar's 3 segments collapse into a single-tap entry that opens a full-screen search overlay on mobile.\n- Property and city-link grids drop column counts cleanly at each breakpoint — never reflow rows; always reduce columns.\n- Reservation card on listing detail switches from sticky right-rail to a sticky bottom bar on mobile, carrying just the \"Reserve\" CTA + nightly price summary.\n\n## Known Gaps\n\n- **Hover state colors:** intentionally not documented per the global no-hover policy — Airbnb's actual \\`:hover\\` styling for property cards is a subtle elevation lift, but precise extraction is unreliable.\n- **Loading states / skeleton screens:** not visible on the extracted surfaces.\n- **Map view styling:** the search-results map uses Mapbox-tinted tiles with custom Rausch markers; not captured here.\n- **Form input error states:** error text color (\\`{colors.primary-error-text}\\`) is documented, but the full input outline + helper-text combination on validation failure was not visible in the captured surfaces.\n- **Sub-brand palettes:** Luxe (\\`{colors.luxe}\\`) and Plus (\\`{colors.plus}\\`) are documented as tokens, but their full sub-system (typography overrides, surface treatment) lives on separate sub-domains and is not captured here.\n`;\n"],"mappings":";AACO,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../../src/presets/_briefs/airbnb.ts"],"sourcesContent":["// Originally generated from voltagent/awesome-design-md (MIT) and hand-curated since.\nexport const airbnbBrief = `---\nversion: alpha\nname: Airbnb\ndescription: A warm, generous consumer marketplace anchored on a clean white canvas and Airbnb Rausch (#ff385c), the single brand voltage that carries every primary CTA, search-button orb, and rating dot. Type runs Airbnb Cereal VF at modest weights — display sits at 22–28px in weight 500/600 rather than the heavy 700+ that fintech and enterprise systems use; the brand trusts photography and generous whitespace over typographic muscle. Three product entries (Homes, Experiences, Services) sit in the top nav with hand-illustrated 32-icon glyphs and \"NEW\" badges, signaling a marketplace expansion rather than a feature dump. Pill-shaped search bars (\\`{rounded.full}\\`), softly rounded property cards (\\`{rounded.lg}\\` ~14px), and 32px button radii read as friendly and human — there is no hard corner anywhere except the body grid.\n\ncolors:\n primary: \"#ff385c\"\n primary-active: \"#e00b41\"\n primary-disabled: \"#ffd1da\"\n primary-error-text: \"#c13515\"\n primary-error-text-hover: \"#b32505\"\n luxe: \"#460479\"\n plus: \"#92174d\"\n ink: \"#222222\"\n body: \"#3f3f3f\"\n muted: \"#6a6a6a\"\n muted-soft: \"#929292\"\n hairline: \"#dddddd\"\n hairline-soft: \"#ebebeb\"\n border-strong: \"#c1c1c1\"\n canvas: \"#ffffff\"\n surface-soft: \"#f7f7f7\"\n surface-card: \"#ffffff\"\n surface-strong: \"#f2f2f2\"\n on-primary: \"#ffffff\"\n on-dark: \"#ffffff\"\n legal-link: \"#428bff\"\n star-rating: \"#222222\"\n scrim: \"#000000\"\n\ntypography:\n display-xl:\n fontFamily: \"'Airbnb Cereal VF', Circular, -apple-system, system-ui, Roboto, 'Helvetica Neue', sans-serif\"\n fontSize: 28px\n fontWeight: 700\n lineHeight: 1.43\n letterSpacing: 0\n display-lg:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 22px\n fontWeight: 500\n lineHeight: 1.18\n letterSpacing: -0.44px\n display-md:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 21px\n fontWeight: 700\n lineHeight: 1.43\n letterSpacing: 0\n display-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 20px\n fontWeight: 600\n lineHeight: 1.20\n letterSpacing: -0.18px\n title-md:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 600\n lineHeight: 1.25\n letterSpacing: 0\n title-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 500\n lineHeight: 1.25\n letterSpacing: 0\n rating-display:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 64px\n fontWeight: 700\n lineHeight: 1.1\n letterSpacing: -1px\n body-md:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 400\n lineHeight: 1.5\n letterSpacing: 0\n body-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 14px\n fontWeight: 400\n lineHeight: 1.43\n letterSpacing: 0\n caption:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 14px\n fontWeight: 500\n lineHeight: 1.29\n letterSpacing: 0\n caption-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 13px\n fontWeight: 400\n lineHeight: 1.23\n letterSpacing: 0\n badge:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 11px\n fontWeight: 600\n lineHeight: 1.18\n letterSpacing: 0\n micro-label:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 12px\n fontWeight: 700\n lineHeight: 1.33\n letterSpacing: 0\n uppercase-tag:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 8px\n fontWeight: 700\n lineHeight: 1.25\n letterSpacing: 0.32px\n textTransform: uppercase\n button-md:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 500\n lineHeight: 1.25\n letterSpacing: 0\n button-sm:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 14px\n fontWeight: 500\n lineHeight: 1.29\n letterSpacing: 0\n link:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 14px\n fontWeight: 400\n lineHeight: 1.43\n letterSpacing: 0\n nav-link:\n fontFamily: \"'Airbnb Cereal VF', Circular, sans-serif\"\n fontSize: 16px\n fontWeight: 600\n lineHeight: 1.25\n letterSpacing: 0\n\nrounded:\n none: 0px\n xs: 4px\n sm: 8px\n md: 14px\n lg: 20px\n xl: 32px\n full: 9999px\n\nspacing:\n xxs: 2px\n xs: 4px\n sm: 8px\n md: 12px\n base: 16px\n lg: 24px\n xl: 32px\n xxl: 48px\n section: 64px\n\ncomponents:\n button-primary:\n backgroundColor: \"{colors.primary}\"\n textColor: \"{colors.on-primary}\"\n typography: \"{typography.button-md}\"\n rounded: \"{rounded.sm}\"\n padding: 14px 24px\n height: 48px\n button-primary-active:\n backgroundColor: \"{colors.primary-active}\"\n textColor: \"{colors.on-primary}\"\n rounded: \"{rounded.sm}\"\n button-primary-disabled:\n backgroundColor: \"{colors.primary-disabled}\"\n textColor: \"{colors.on-primary}\"\n rounded: \"{rounded.sm}\"\n button-secondary:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.button-md}\"\n rounded: \"{rounded.sm}\"\n padding: 13px 23px\n height: 48px\n button-tertiary-text:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.button-md}\"\n button-pill-rausch:\n backgroundColor: \"{colors.primary}\"\n textColor: \"{colors.on-primary}\"\n typography: \"{typography.button-sm}\"\n rounded: \"{rounded.full}\"\n padding: 10px 20px\n search-orb:\n backgroundColor: \"{colors.primary}\"\n textColor: \"{colors.on-primary}\"\n rounded: \"{rounded.full}\"\n height: 48px\n icon-button-circle:\n backgroundColor: \"{colors.surface-strong}\"\n textColor: \"{colors.ink}\"\n rounded: \"{rounded.full}\"\n height: 32px\n icon-button-outline:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n rounded: \"{rounded.full}\"\n height: 40px\n top-nav:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.nav-link}\"\n height: 80px\n product-tab-active:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.nav-link}\"\n rounded: \"{rounded.none}\"\n product-tab-inactive:\n backgroundColor: transparent\n textColor: \"{colors.muted}\"\n typography: \"{typography.nav-link}\"\n search-bar-pill:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.full}\"\n padding: 14px 24px\n height: 64px\n search-field-segment:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.caption}\"\n padding: 8px 24px\n category-strip:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.muted}\"\n typography: \"{typography.button-sm}\"\n category-tab-active:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.button-sm}\"\n rounded: \"{rounded.none}\"\n property-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.md}\"\n property-card-photo:\n rounded: \"{rounded.md}\"\n experience-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.title-md}\"\n rounded: \"{rounded.md}\"\n city-link-block:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.title-sm}\"\n rating-display-card:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.rating-display}\"\n guest-favorite-badge:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.badge}\"\n rounded: \"{rounded.full}\"\n padding: 4px 10px\n new-tag:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.uppercase-tag}\"\n rounded: \"{rounded.full}\"\n padding: 2px 6px\n amenity-row:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n padding: 12px 0\n reviews-card:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n host-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.md}\"\n padding: 24px\n reservation-card:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.md}\"\n padding: 24px\n date-picker-day:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n rounded: \"{rounded.full}\"\n date-picker-day-selected:\n backgroundColor: \"{colors.ink}\"\n textColor: \"{colors.on-dark}\"\n rounded: \"{rounded.full}\"\n text-input:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.sm}\"\n padding: 14px 12px\n height: 56px\n footer-light:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n padding: 48px 80px\n footer-link:\n backgroundColor: transparent\n textColor: \"{colors.ink}\"\n typography: \"{typography.body-sm}\"\n legal-band:\n backgroundColor: \"{colors.canvas}\"\n textColor: \"{colors.muted}\"\n typography: \"{typography.caption-sm}\"\n---\n\n## Overview\n\nAirbnb is the canonical example of a generous, photography-led consumer marketplace. The base canvas is **pure white** (\\`{colors.canvas}\\` — #ffffff) with deep near-black ink (\\`{colors.ink}\\` — #222222) for headlines and body, and a single voltage of **Rausch** (\\`{colors.primary}\\` — #ff385c) carrying every primary CTA, the search-button orb, the heart save state, and inline brand links. There is no secondary brand color in mainline marketing — the **Luxe purple** (\\`{colors.luxe}\\` — #460479) and **Plus magenta** (\\`{colors.plus}\\` — #92174d) tokens are sub-brand accents that only appear inside Airbnb Luxe / Plus contexts.\n\nType runs **Airbnb Cereal VF** (a custom variable font Airbnb licenses), with **Circular** as the historic in-house fallback and a system stack underneath. Cereal sits at modest weights — display headlines render at 22–28px in weight 500–600, not the heavy 700+ weights that financial or enterprise systems lean on. The hero h1 (\"Inspiration for future getaways\") on the homepage is just 28px / 700, which would feel small on a typical SaaS page; here it works because the layout leans on photography (city collage, property cards) for visual weight rather than typographic muscle.\n\nThe shape language is **soft**. Buttons are 8px radius (\\`{rounded.sm}\\`), property cards are ~14px (\\`{rounded.md}\\`), the search bar is fully pill-shaped (\\`{rounded.full}\\`), wishlist hearts and search orbs are circles (\\`{rounded.full}\\`), and category strip rounded corners run at 32px (\\`{rounded.xl}\\`). There is essentially no hard corner anywhere except the body grid itself — every interactive element is rounded.\n\n**Key Characteristics:**\n- Single accent color: \\`{colors.primary}\\` (#ff385c — \"Rausch\") carries every primary CTA, the search orb, the heart save state, and the brand wordmark. Used scarcely — most pages are 90% white + ink with one or two Rausch moments.\n- Custom variable type: \\`Airbnb Cereal VF\\`. Display weights sit at 500–700, body at 400. Modest weight is intentional — the system trusts photography for visual heft.\n- Three-product top nav: Homes, Experiences, Services — each with a hand-illustrated 32px icon and \"NEW\" badges (\\`{component.new-tag}\\`) on the two newer products. Active tab uses an underline rule (\\`{component.product-tab-active}\\`).\n- Pill-shaped global search bar: white surface, fully rounded (\\`{rounded.full}\\`), divided by 1px hairlines into Where / When / Who segments, terminated by a circular Rausch search orb (\\`{component.search-orb}\\`).\n- Property cards are photo-first: aspect-ratio rectangles with \\`{rounded.md}\\` corner clipping, swipeable image carousel, \"Guest favorite\" floating badge top-left, heart icon top-right, then 4–5 lines of meta beneath.\n- Editorial dropdowns (footer, language picker) are clean text columns over the white canvas — no card surface, no shadow.\n- The design system caps elevation at one shadow tier (\\`box-shadow: rgba(0,0,0,0.02) 0 0 0 1px, rgba(0,0,0,0.04) 0 2px 6px, rgba(0,0,0,0.1) 0 4px 8px\\`) — used on hover-floated cards and search/account dropdowns.\n- 8px base spacing system, with major sections at \\`{spacing.section}\\` (64px) — generous but not airy enough to feel editorial-magazine; the marketplace density wants more cards per scroll.\n\n## Colors\n\n### Brand & Accent\n- **Rausch** (\\`{colors.primary}\\` — #ff385c): The single brand color. Used for primary CTA backgrounds (Reserve, Continue), the search orb, the heart save state on property cards, and inline brand links. The most recognizable color in consumer travel.\n- **Rausch Active** (\\`{colors.primary-active}\\` — #e00b41): The press / pointer-down variant — slightly more saturated. Used on \\`{component.button-primary-active}\\`.\n- **Rausch Disabled** (\\`{colors.primary-disabled}\\` — #ffd1da): A pale tint used on disabled CTAs.\n- **Luxe Purple** (\\`{colors.luxe}\\` — #460479): Sub-brand accent for Airbnb Luxe. Only appears inside Luxe-branded surfaces — never in mainline marketing.\n- **Plus Magenta** (\\`{colors.plus}\\` — #92174d): Sub-brand accent for Airbnb Plus. Same scoping as Luxe — sub-product only.\n\n### Surface\n- **Canvas** (\\`{colors.canvas}\\` — #ffffff): The default page floor for every public page. Airbnb does not have a dark mode on the public web.\n- **Surface Soft** (\\`{colors.surface-soft}\\` — #f7f7f7): The lightest fill — used on disabled fields, sub-nav hover backgrounds, and the inline search filter band.\n- **Surface Strong** (\\`{colors.surface-strong}\\` — #f2f2f2): Slightly heavier fill — circular icon-button surface (e.g., the breadcrumb back-arrow and listing toolbar buttons).\n\n### Hairlines & Borders\n- **Hairline** (\\`{colors.hairline}\\` — #dddddd): The default 1px border tone — search bar dividers, table separators, footer column splitters, card 1px borders.\n- **Hairline Soft** (\\`{colors.hairline-soft}\\` — #ebebeb): A lighter divider used on long-scrolling editorial body separators.\n- **Border Strong** (\\`{colors.border-strong}\\` — #c1c1c1): A heavier stroke used on disabled outline buttons and form input outlines after focus.\n\n### Text\n- **Ink** (\\`{colors.ink}\\` — #222222): The dominant text color on light surfaces. Display headlines, body paragraphs, primary nav links, and most inline link text. Never pure black.\n- **Body** (\\`{colors.body}\\` — #3f3f3f): A secondary running-text color used inside long-form review and amenity copy where ink would feel too heavy.\n- **Muted** (\\`{colors.muted}\\` — #6a6a6a): Sub-titles inside city link blocks (\"Cottage rentals\", \"Villa rentals\"), inactive product-tab labels, footer category sub-labels, \"View all\" links.\n- **Muted Soft** (\\`{colors.muted-soft}\\` — #929292): Disabled link text. Used very sparingly.\n- **Star Rating** (\\`{colors.star-rating}\\` — #222222): The same ink token — Airbnb's star icon and \"4.81\" rating numbers all render in ink rather than a yellow/gold color, which is a deliberate brand choice (yellow stars feel cheap in travel context).\n- **On Primary** (\\`{colors.on-primary}\\` — #ffffff): White text on Rausch CTAs.\n\n### Semantic\n- **Error** (\\`{colors.primary-error-text}\\` — #c13515): Inline error text for form validation. Distinct from Rausch — slightly darker, more saturated red.\n- **Error Hover** (\\`{colors.primary-error-text-hover}\\` — #b32505): Darkens on link hover.\n- **Legal Link Blue** (\\`{colors.legal-link}\\` — #428bff): Inline links inside legal copy (Privacy, Terms). Only used inside the legal sub-band.\n\n### Scrim\n- **Scrim** (\\`{colors.scrim}\\` — #000000 at 50% opacity): The global modal backdrop tone — date picker, login dialog, language picker. Stored as the base hex; opacity is applied at render time.\n\n## Typography\n\n### Font Family\nThe system runs **Airbnb Cereal VF** for everything — display, body, navigation, captions, microcopy. Fallbacks walk \\`Circular, -apple-system, system-ui, Roboto, \"Helvetica Neue\", sans-serif\\`. **Circular** is the historic in-house typeface still kept as the first non-variable fallback; system stacks back it up.\n\nThere is no separate display family. The variable font carries the entire scale.\n\n### Hierarchy\n\n| Token | Size | Weight | Line Height | Letter Spacing | Use |\n|---|---|---|---|---|---|\n| \\`{typography.rating-display}\\` | 64px | 700 | 1.1 | -1px | Listing detail rating display (\"4.81\") |\n| \\`{typography.display-xl}\\` | 28px | 700 | 1.43 | 0 | Homepage h1 (\"Inspiration for future getaways\") |\n| \\`{typography.display-lg}\\` | 22px | 500 | 1.18 | -0.44px | Listing detail h1 (\"Close to Fethiye Aliyah Bali Beach…\") |\n| \\`{typography.display-md}\\` | 21px | 700 | 1.43 | 0 | Section heads inside listing detail (\"What this place offers\") |\n| \\`{typography.display-sm}\\` | 20px | 600 | 1.20 | -0.18px | Sub-section titles (\"Things to know\") |\n| \\`{typography.title-md}\\` | 16px | 600 | 1.25 | 0 | City link block titles (\"Wilmington\", \"Athens\") |\n| \\`{typography.title-sm}\\` | 16px | 500 | 1.25 | 0 | Footer column heads (\"Support\", \"Hosting\", \"Airbnb\") |\n| \\`{typography.body-md}\\` | 16px | 400 | 1.5 | 0 | Default running-text inside listing copy |\n| \\`{typography.body-sm}\\` | 14px | 400 | 1.43 | 0 | Card meta lines, dates, prices, distance text |\n| \\`{typography.caption}\\` | 14px | 500 | 1.29 | 0 | Search field segment labels (\"Where\", \"When\", \"Who\") |\n| \\`{typography.caption-sm}\\` | 13px | 400 | 1.23 | 0 | Footer legal line (\"© 2026 Airbnb, Inc.\") |\n| \\`{typography.badge}\\` | 11px | 600 | 1.18 | 0 | \"Guest favorite\" floating badge text |\n| \\`{typography.micro-label}\\` | 12px | 700 | 1.33 | 0 | Card amenity micro-labels (\"Inline 6\") |\n| \\`{typography.uppercase-tag}\\` | 8px | 700 | 1.25 | 0.32px (uppercase) | \"NEW\" badge on product nav tabs |\n| \\`{typography.button-md}\\` | 16px | 500 | 1.25 | 0 | Primary CTA button labels |\n| \\`{typography.button-sm}\\` | 14px | 500 | 1.29 | 0 | Pill button labels (category strip) |\n| \\`{typography.link}\\` | 14px | 400 | 1.43 | 0 | Inline body links |\n| \\`{typography.nav-link}\\` | 16px | 600 | 1.25 | 0 | Top product-nav labels (Homes, Experiences, Services) |\n\n### Principles\nDisplay weights stay modest. The homepage h1 at 28px / 700 is deliberately small — it tucks under the search bar so photography and the city-link grid carry visual hierarchy. The listing-detail h1 at 22px / 500 is even quieter; the listing photo banner does the work above it.\n\nThe single typographically loud moment in the entire system is the **rating display** (\\`{typography.rating-display}\\` — 64px / 700) on listing pages. That is the only place the system trusts type alone to carry hierarchy — rating numbers are a peak trust signal, so they get the loudest treatment.\n\n### Note on Font Substitutes\nIf Airbnb Cereal VF and Circular are unavailable, **Inter** is the closest open-source substitute. Adjust display headlines down by ~2% in line-height to match Cereal's slightly tighter cap height; otherwise the proportions transfer cleanly.\n\n## Layout\n\n### Spacing System\n- **Base unit:** 4px (with 2px micro-step).\n- **Tokens:** \\`{spacing.xxs}\\` 2px · \\`{spacing.xs}\\` 4px · \\`{spacing.sm}\\` 8px · \\`{spacing.md}\\` 12px · \\`{spacing.base}\\` 16px · \\`{spacing.lg}\\` 24px · \\`{spacing.xl}\\` 32px · \\`{spacing.xxl}\\` 48px · \\`{spacing.section}\\` 64px.\n- **Section padding (vertical):** \\`{spacing.section}\\` (64px) for major page bands; tighter than typical SaaS marketing (80–96px) because marketplace pages need higher card density per scroll.\n- **Card internal padding:** \\`{spacing.lg}\\` (24px) for \\`{component.host-card}\\` and \\`{component.reservation-card}\\`; \\`{spacing.base}\\` (16px) for property-card meta block; \\`{spacing.sm}\\` (8px) for caption / date-row gutters.\n- **Gutters:** \\`{spacing.base}\\` (16px) between cards in the homepage city grid; \\`{spacing.lg}\\` (24px) inside footer column gutters; \\`{spacing.xs}\\` (4px) on dense category-strip dividers.\n\n### Grid & Container\n- **Max content width:** ~1280px centered on the homepage and editorial pages. Listing detail pages cap closer to 1080px to keep the photo banner and reservation rail readable.\n- **City link grid (homepage footer):** 6-column grid at desktop with each cell housing a city name in \\`{typography.title-md}\\` and a category sub-label in \\`{typography.body-sm}\\` muted.\n- **Listing detail:** 2-column with photo / amenity body on the left (~64% width) and a sticky reservation card (\\`{component.reservation-card}\\`) on the right (~32%).\n- **Footer:** 3-column link list (Support / Hosting / Airbnb) at desktop, collapsing to 1-column on mobile.\n\n### Whitespace Philosophy\nThe system gives editorial bands 64px of vertical breathing room but compresses card grids — property and city-link cards sit just 16px apart. The contrast is intentional: the page reads as \"open hero, dense marketplace below,\" reinforcing the marketplace nature without overwhelming the visitor at the fold.\n\n## Elevation\n\nThe system has essentially **one shadow tier** plus the flat baseline.\n\n- **Flat (no shadow):** Body, hero, footer, all editorial bands — 95% of surfaces.\n- **Card hover float:** \\`box-shadow: rgba(0, 0, 0, 0.02) 0 0 0 1px, rgba(0, 0, 0, 0.04) 0 2px 6px 0, rgba(0, 0, 0, 0.1) 0 4px 8px 0\\` — applied to property cards on pointer hover, the search bar at rest, and the dropdown menus (account menu, language picker, date picker). This is the single shadow definition in the entire system.\n- **Modal scrim:** \\`{colors.scrim}\\` rendered at 50% opacity — the global modal backdrop. Used on date pickers, login dialogs, language picker.\n\nThere are no progressive elevation tiers — the system either has the one shadow or none. Depth comes from photography, the white-on-white surface separation, and rounded-corner clipping rather than from layered shadows.\n\n## Components\n\n### Buttons\n\n**\\`button-primary\\`** — Rausch fill, white text, 8px radius, 14×24px padding, 48px height, weight 500. The most common CTA across the system: \"Reserve\", \"Continue\", \"Search\", account-flow primaries.\n\n**\\`button-primary-active\\`** — The press state. Background flips to \\`{colors.primary-active}\\`. No transform, no shadow change.\n\n**\\`button-primary-disabled\\`** — Pale Rausch tint at #ffd1da with white text. Cursor not-allowed.\n\n**\\`button-secondary\\`** — White fill with ink text and a 1px ink outline. 8px radius. Used for \"Save\", \"Cancel\", and inverse CTAs over Rausch surfaces.\n\n**\\`button-tertiary-text\\`** — Plain ink text, no surface, no border. Underlined on hover. Used for \"Show more\" type links and modal close labels.\n\n**\\`button-pill-rausch\\`** — A pill-shaped Rausch CTA used on featured cells (e.g., \"Become a host\" sub-CTA) — 9999px radius, 10×20px padding, 14px label.\n\n### Search Surface\n\n**\\`search-bar-pill\\`** — The signature global search bar. White fill, 9999px radius, 64px height, 1px hairline 1px-shadow border. Internally divided by vertical hairline rules into \\`{component.search-field-segment}\\` cells (Where / When / Who). Each segment holds an uppercase caption label above a placeholder line in \\`{typography.caption}\\`.\n\n**\\`search-orb\\`** — The circular Rausch orb terminating the right edge of the search bar. 48×48px, fully rounded, white magnifying-glass icon centered. The hottest single color moment on the homepage.\n\n### Top Navigation\n\n**\\`top-nav\\`** — White surface, 80px height, 1px bottom hairline. The Airbnb wordmark sits flush left, the three product tabs (Homes / Experiences / Services) sit in the dead center, and account utilities (host link, language globe, account menu) sit flush right.\n\n**\\`product-tab-active\\`** — Ink label in \\`{typography.nav-link}\\`, 32px hand-illustrated icon, 2px ink underline rule beneath the icon-label pair.\n\n**\\`product-tab-inactive\\`** — Muted label, illustrated icon, no underline. Becomes active on click.\n\n**\\`new-tag\\`** — A tiny rounded-pill badge (\\`{rounded.full}\\`) anchored top-right of an icon, carrying the uppercase \"NEW\" label in \\`{typography.uppercase-tag}\\` (8px / 700 with 0.32px tracking, uppercase). Used on Experiences and Services to signal recency.\n\n### Listing Cards\n\n**\\`property-card\\`** — A photo-first card. 1:1 aspect-ratio image with \\`{rounded.md}\\` corner clipping, image carousel dots overlay, \"Guest favorite\" floating badge top-left (\\`{component.guest-favorite-badge}\\`), and a heart icon top-right (\\`{component.icon-button-circle}\\` in default outlined state, Rausch-filled when saved). Beneath the image: 4–5 lines of meta — title (\\`{typography.title-md}\\`), distance / dates (\\`{typography.body-sm}\\` muted), and price (\"$X night\") right-aligned.\n\n**\\`property-card-photo\\`** — The photo plate itself, separated as a token because some surfaces (wishlist, search results) reuse just the photo without the meta block.\n\n**\\`experience-card\\`** — A taller-aspect card (4:5) for experience listings. Same \\`{rounded.md}\\` clipping, floating \"NEW\" badge top-left, heart top-right, and a single-line title beneath.\n\n**\\`guest-favorite-badge\\`** — White rounded pill (\\`{rounded.full}\\`) at 11px / 600 weight. Sits over the photo with the system's only shadow tier applied for elevation.\n\n### Listing Detail\n\n**\\`rating-display-card\\`** — The signature listing-detail moment. A 64px / 700 rating number (\"4.81\") flanked left and right by tiny laurel-wreath SVG ornaments. Beneath the rating: \"Guest favorite\" tagline and a row of ink stat columns. The largest typographic weight in the whole system.\n\n**\\`amenity-row\\`** — A 1-column list of amenity icons + ink labels in \\`{typography.body-md}\\`. 12px row padding, no border between rows; section is closed by a 1px hairline divider above and below.\n\n**\\`reviews-card\\`** — A 2-column grid of review excerpts. Each column holds an author row (avatar, name, date) above a 3-line excerpt with \"Show more\" tertiary link.\n\n**\\`host-card\\`** — A white card with \\`{rounded.md}\\` rounding and 24px padding holding a host avatar, name, \"Superhost\" badge, response-rate stat, and a \"Contact host\" \\`{component.button-secondary}\\`.\n\n**\\`reservation-card\\`** — The sticky right-rail card on listing detail pages. White surface, \\`{rounded.md}\\` rounding, 1px hairline border, 1px shadow tier elevation, 24px padding. Contains: nightly price (\\`{typography.display-md}\\` ink), date-range selector, guest-count stepper, \"Reserve\" primary CTA full-width, and a fee breakdown stack beneath in \\`{typography.body-sm}\\`.\n\n### Date Picker\n\n**\\`date-picker-day\\`** — A 40×40px circular cell carrying the day number in \\`{typography.body-sm}\\`. Default state is transparent fill, ink text.\n\n**\\`date-picker-day-selected\\`** — Ink fill, white text, full circle (\\`{rounded.full}\\`). Range states between two selected days carry a \\`{colors.surface-soft}\\` lozenge background that connects them.\n\n### Forms\n\n**\\`text-input\\`** — White surface, 1px hairline outline, \\`{rounded.sm}\\` 8px radius, 56px height, 14×12px padding. Stacked label above (in \\`{typography.caption}\\` muted), placeholder text in \\`{typography.body-md}\\` muted. On focus, the border thickens to 2px ink and the border color flips to \\`{colors.ink}\\` — no glow, no ring.\n\n### Footer\n\n**\\`footer-light\\`** — White surface (matches the page canvas — Airbnb has no contrast footer), 48×80px padding. Three columns of link blocks (Support / Hosting / Airbnb), separated by generous 24px gutters. Each column heads with a \\`{typography.title-sm}\\` ink label and stacks \\`{component.footer-link}\\` rows in \\`{typography.body-sm}\\` ink.\n\n**\\`legal-band\\`** — A bottom strip beneath the footer columns carrying the copyright line, language picker (globe icon + \"English (US)\" link), currency picker, and social icons (Facebook, X, Instagram). All text in muted \\`{colors.muted}\\` at \\`{typography.caption-sm}\\`.\n\n## Responsive Behavior\n\n| Name | Width | Key Changes |\n|---|---|---|\n| Mobile | < 744px | Top nav collapses to logo + hamburger; product tabs hide behind a sheet; search bar collapses to a single tappable pill; property cards stack 1-up; city grid 1-column; listing detail collapses reservation card to a sticky bottom bar. |\n| Tablet | 744–1128px | Top nav keeps product tabs but search bar narrows; property cards 2-up; city grid 2–3 column; reservation card stays sticky right-rail at narrower width. |\n| Desktop | 1128–1440px | Full top nav with three product tabs centered; search bar at full pill width with all 3 segments visible; property cards 4-up; city grid 6-column; listing detail 2-column with reservation rail. |\n| Wide | > 1440px | Content width caps at 1440px on listing/search pages and ~1280px on editorial; gutters absorb the rest. |\n\n### Touch Targets\n- Primary CTAs at minimum 48×48px (above WCAG AAA).\n- Search orb is 48×48px circular — the most-tapped element on the page.\n- Heart save button is 32×32px circular — borderline for AAA but compensated by a generous 12px padding inside the photo card.\n- Date-picker day cells are 40×40px circular.\n\n### Collapsing Strategy\n- Top product tabs collapse into a hamburger sheet below 744px.\n- Search bar's 3 segments collapse into a single-tap entry that opens a full-screen search overlay on mobile.\n- Property and city-link grids drop column counts cleanly at each breakpoint — never reflow rows; always reduce columns.\n- Reservation card on listing detail switches from sticky right-rail to a sticky bottom bar on mobile, carrying just the \"Reserve\" CTA + nightly price summary.\n\n## Known Gaps\n\n- **Hover state colors:** intentionally not documented per the global no-hover policy — Airbnb's actual \\`:hover\\` styling for property cards is a subtle elevation lift, but precise extraction is unreliable.\n- **Loading states / skeleton screens:** not visible on the extracted surfaces.\n- **Map view styling:** the search-results map uses Mapbox-tinted tiles with custom Rausch markers; not captured here.\n- **Form input error states:** error text color (\\`{colors.primary-error-text}\\`) is documented, but the full input outline + helper-text combination on validation failure was not visible in the captured surfaces.\n- **Sub-brand palettes:** Luxe (\\`{colors.luxe}\\`) and Plus (\\`{colors.plus}\\`) are documented as tokens, but their full sub-system (typography overrides, surface treatment) lives on separate sub-domains and is not captured here.\n`;\n"],"mappings":";AACO,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}