@riverbankcms/sdk 0.107.0 → 0.109.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/README.md +21 -1
  2. package/dist/{PreviewEditorSidebar-DpAbAl08.mjs → PreviewEditorSidebar-DWqwfy3_.mjs} +48 -28
  3. package/dist/{PreviewEditorUI-O7cn6Xxv.mjs → PreviewEditorUI-B7OL4sfR.mjs} +10 -9
  4. package/dist/{PreviewQueryProvider-D0tnKl0t.mjs → PreviewQueryProvider-D0y2l8JN.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CVB7urtl.mjs → SdkPreviewModeRuntime-D8Gt9Gbe.mjs} +633 -220
  6. package/dist/{SiteChromeCustomizeContext-C_sizso-.mjs → SiteChromeCustomizeContext-DUpalEdL.mjs} +5764 -1556
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +15383 -11388
  8. package/dist/_dts/api/src/blocks.d.ts +41 -7
  9. package/dist/_dts/api/src/bookingAdjustments.d.ts +5 -0
  10. package/dist/_dts/api/src/bookingOperations.d.ts +4 -0
  11. package/dist/_dts/api/src/bookingRecords.d.ts +177 -127
  12. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +6 -6
  13. package/dist/_dts/api/src/cache-tags.d.ts +3 -0
  14. package/dist/_dts/api/src/common/envelope.d.ts +7 -0
  15. package/dist/_dts/api/src/contentRuntime.d.ts +19 -1
  16. package/dist/_dts/api/src/courses.d.ts +1 -0
  17. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +5 -5
  18. package/dist/_dts/api/src/endpoints.d.ts +134 -0
  19. package/dist/_dts/api/src/footer-settings.d.ts +1 -0
  20. package/dist/_dts/api/src/footerSettings.d.ts +8 -0
  21. package/dist/_dts/api/src/index.d.ts +7 -4
  22. package/dist/_dts/api/src/navigation/contracts.d.ts +3 -3
  23. package/dist/_dts/api/src/participantMessaging.d.ts +18 -12
  24. package/dist/_dts/api/src/previewContentContract.d.ts +4 -0
  25. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  26. package/dist/_dts/api/src/sdkContracts.d.ts +309 -1
  27. package/dist/_dts/api/src/siteBanner.d.ts +2 -2
  28. package/dist/_dts/api/src/siteInfrastructure.d.ts +13 -0
  29. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +144 -60
  30. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +35 -1
  31. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +74 -28
  32. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.d.ts +9 -0
  33. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.d.ts +3 -4
  34. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  35. package/dist/_dts/blocks/src/index.d.ts +1 -1
  36. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +0 -1
  37. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -0
  38. package/dist/_dts/blocks/src/system/blocks/audio-player.d.ts +3 -0
  39. package/dist/_dts/blocks/src/system/blocks/body-text.d.ts +3 -0
  40. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +3 -0
  41. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +1 -22
  42. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +3 -0
  43. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +1 -22
  44. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +3 -0
  45. package/dist/_dts/blocks/src/system/blocks/form.d.ts +3 -0
  46. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +3 -0
  47. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +3 -0
  48. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +3 -0
  49. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +50 -0
  50. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +9 -48
  51. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +3 -0
  52. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  53. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +3 -0
  54. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +3 -0
  55. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  56. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +16 -6
  57. package/dist/_dts/blocks/src/system/defineBlock.d.ts +9 -1
  58. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +8 -0
  59. package/dist/_dts/blocks/src/system/icons/registry.d.ts +2 -1
  60. package/dist/_dts/blocks/src/system/icons/social.d.ts +5 -0
  61. package/dist/_dts/blocks/src/system/icons/svg.d.ts +1 -0
  62. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +33 -2
  63. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +13 -0
  64. package/dist/_dts/blocks/src/system/node/fragments/footerNav.d.ts +2 -0
  65. package/dist/_dts/blocks/src/system/node/fragments/styledContainer.d.ts +4 -4
  66. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +3 -12
  67. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  68. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -6
  69. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  70. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  71. package/dist/_dts/blocks/src/system/types/link.d.ts +3 -3
  72. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +14 -0
  73. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +27 -8
  74. package/dist/_dts/content-editor/src/footerComposer.d.ts +56 -0
  75. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +1 -1
  76. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +5 -5
  77. package/dist/_dts/content-editor/src/index.d.ts +2 -0
  78. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +3 -1
  79. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +20 -36
  80. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +5 -1
  81. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +11 -0
  82. package/dist/_dts/content-model/src/content-types/entryValidation.d.ts +31 -0
  83. package/dist/_dts/content-model/src/content-types/scaffold.d.ts +58 -0
  84. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  85. package/dist/_dts/content-model/src/content-types/sentinels.d.ts +36 -0
  86. package/dist/_dts/content-model/src/definitions/shared.d.ts +3 -0
  87. package/dist/_dts/content-model/src/index.d.ts +3 -0
  88. package/dist/_dts/core/src/booking-date-time.d.ts +8 -0
  89. package/dist/_dts/core/src/branded.d.ts +3 -0
  90. package/dist/_dts/core/src/editor-state.d.ts +4 -0
  91. package/dist/_dts/core/src/footer-composition.d.ts +143 -0
  92. package/dist/_dts/core/src/index.d.ts +2 -0
  93. package/dist/_dts/core/src/public-profile.d.ts +73 -0
  94. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +221 -205
  95. package/dist/_dts/db/src/schemas/forms.d.ts +10 -10
  96. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +5 -0
  97. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +1 -0
  98. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -1
  99. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +2 -1
  100. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +2 -1
  101. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +10 -0
  102. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +1 -0
  103. package/dist/_dts/media-core/src/fileMimeDetection.d.ts +16 -0
  104. package/dist/_dts/media-core/src/fileStorage.d.ts +8 -0
  105. package/dist/_dts/media-core/src/storagePathDomain.d.ts +2 -0
  106. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +3 -0
  107. package/dist/_dts/path-utils/src/index.d.ts +5 -0
  108. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +2 -0
  109. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +5 -0
  110. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  111. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -0
  112. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
  113. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
  114. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -0
  115. package/dist/_dts/preview-next/src/client/preview/previewErrorMessages.d.ts +4 -0
  116. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -1
  117. package/dist/_dts/sdk/src/cli/commands/audit.d.ts +1 -1
  118. package/dist/_dts/sdk/src/cli/commands/compare.d.ts +1 -1
  119. package/dist/_dts/sdk/src/cli/commands/deploy.d.ts +1 -1
  120. package/dist/_dts/sdk/src/cli/commands/drafts.d.ts +18 -0
  121. package/dist/_dts/sdk/src/cli/commands/entry.d.ts +15 -0
  122. package/dist/_dts/sdk/src/cli/commands/init-docs.d.ts +2 -2
  123. package/dist/_dts/sdk/src/cli/commands/publish-all.d.ts +1 -1
  124. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -0
  125. package/dist/_dts/sdk/src/cli/commands/push/execute/diff.d.ts +1 -1
  126. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +3 -0
  127. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +12 -1
  128. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +1 -0
  129. package/dist/_dts/sdk/src/cli/commands/verify.d.ts +1 -0
  130. package/dist/_dts/sdk/src/cli/content/reader.d.ts +1 -0
  131. package/dist/_dts/sdk/src/cli/helpers.d.ts +22 -1
  132. package/dist/_dts/sdk/src/cli/index.d.ts +4 -0
  133. package/dist/_dts/sdk/src/cli/output.d.ts +88 -0
  134. package/dist/_dts/sdk/src/cli/program.d.ts +29 -0
  135. package/dist/_dts/sdk/src/cli/push-config.d.ts +1 -1
  136. package/dist/_dts/sdk/src/client/management/blocks.d.ts +14 -1
  137. package/dist/_dts/sdk/src/client/management/catalog.d.ts +10 -0
  138. package/dist/_dts/sdk/src/client/management/http.d.ts +7 -1
  139. package/dist/_dts/sdk/src/client/management/index.d.ts +2 -1
  140. package/dist/_dts/sdk/src/client/management/types.d.ts +58 -20
  141. package/dist/_dts/sdk/src/config/content-types.d.ts +2 -0
  142. package/dist/_dts/sdk/src/config/content-validation.d.ts +4 -0
  143. package/dist/_dts/sdk/src/date-time/index.d.ts +68 -0
  144. package/dist/_dts/sdk/src/navigation/index.d.ts +2 -0
  145. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -2
  146. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -1
  147. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +1 -1
  148. package/dist/_dts/sdk/src/version.d.ts +1 -1
  149. package/dist/_dts/site-commands/src/commands.d.ts +900 -827
  150. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  151. package/dist/_dts/theme-core/src/buttons/core.d.ts +15 -46
  152. package/dist/_dts/theme-core/src/buttons/effectClassification.d.ts +147 -0
  153. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +2 -3
  154. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +1 -1
  155. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  156. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  157. package/dist/_dts/theme-core/src/buttons/personalities/two-tone-pill.d.ts +17 -0
  158. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +45 -33
  159. package/dist/_dts/theme-core/src/buttons/presets.d.ts +4 -25
  160. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +100 -0
  161. package/dist/_dts/theme-core/src/buttons/resolvedButtonCss.d.ts +16 -0
  162. package/dist/_dts/theme-core/src/buttons/types.d.ts +104 -86
  163. package/dist/_dts/theme-core/src/cards/types.d.ts +16 -16
  164. package/dist/_dts/theme-core/src/footer/mode.d.ts +15 -0
  165. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  166. package/dist/_dts/theme-core/src/gradients/presets.d.ts +200 -8
  167. package/dist/_dts/theme-core/src/gradients/utils.d.ts +6 -2
  168. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  169. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +117 -150
  170. package/dist/_dts/theme-core/src/mock-themes/modern-minimal.d.ts +1 -1
  171. package/dist/_dts/theme-core/src/navigation/types.d.ts +3 -3
  172. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +2 -2
  173. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +5 -8
  174. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -1
  175. package/dist/_dts/theme-core/src/schema.d.ts +1264 -138
  176. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  177. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +10 -10
  178. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +12 -1
  179. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +3 -2
  180. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +13 -6
  181. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +29 -8
  182. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +15 -0
  183. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +2 -2
  184. package/dist/cli/index.mjs +68552 -66955
  185. package/dist/cli/init-docs/content/cli-reference.md +50 -7
  186. package/dist/cli/init-docs/content/content-management.md +7 -4
  187. package/dist/cli/init-docs/content/workflow-publish.md +5 -1
  188. package/dist/client/{DiscountCodeDisclosure-BwGkvmVH.mjs → DiscountCodeDisclosure-DU1ygxU2.mjs} +1 -1
  189. package/dist/client/{EventCombined.client-JnWE6Hzc.mjs → EventCombined.client-DB5zagCo.mjs} +3 -3
  190. package/dist/client/{EventListing.client-DQewc_kg.mjs → EventListing.client-CTX9JHBL.mjs} +2 -2
  191. package/dist/client/{LeafletStaticMap-DPAU3SFt.mjs → LeafletStaticMap-BYImhgiB.mjs} +1 -1
  192. package/dist/client/{MagicLinkForm-D4kpWCbW.mjs → MagicLinkForm-CRkw_M3l.mjs} +2 -2
  193. package/dist/client/{StepIndicator-CBlkb4rA.mjs → StepIndicator-BnmVBJJh.mjs} +2 -2
  194. package/dist/client/{accordion-DAIBVpTS.mjs → accordion-CeGreumd.mjs} +1 -1
  195. package/dist/client/{bookingForm-DZ-4l5_1.mjs → bookingForm-CSzFNrpN.mjs} +6 -6
  196. package/dist/client/bookings.mjs +637 -328
  197. package/dist/client/{buttons-DJgynGHQ.mjs → buttons-DoFV7KDL.mjs} +618 -306
  198. package/dist/client/{carousel-D-SLfX8r.mjs → carousel-B2jDtogf.mjs} +1 -1
  199. package/dist/client/{cart-CEgbgJhX.mjs → cart-D-jZ-vaY.mjs} +3 -3
  200. package/dist/client/{checkout-CXWrCRAA.mjs → checkout-Dza-LA7N.mjs} +3 -3
  201. package/dist/client/client.mjs +2497 -1216
  202. package/dist/client/{colorStyles-jZS6KfkP.mjs → colorStyles-CrgzoXsm.mjs} +1 -30
  203. package/dist/client/{courseRegistration-DVmLrRVz.mjs → courseRegistration-TYkNychb.mjs} +7 -7
  204. package/dist/client/{eventCalendar-DCuyPY_c.mjs → eventCalendar-BI_90SsT.mjs} +5 -5
  205. package/dist/client/{eventCombined-kP2CA2D4.mjs → eventCombined-mNrpryE9.mjs} +2 -2
  206. package/dist/client/{eventDetails-DU0LeF5e.mjs → eventDetails-D4GVlCIY.mjs} +3 -3
  207. package/dist/client/{eventListing-CcHF87BI.mjs → eventListing-YhKN018y.mjs} +2 -2
  208. package/dist/client/{eventRegistration-DJnR0yFH.mjs → eventRegistration-CdHGtilr.mjs} +7 -7
  209. package/dist/client/foregroundContract-xICPq59x.mjs +31 -0
  210. package/dist/client/{form-CH1lCusH.mjs → form-AcAL45rA.mjs} +2 -2
  211. package/dist/client/{headerSection-CBPFZoku.mjs → headerSection-uEC52ueD.mjs} +3 -3
  212. package/dist/client/hooks.mjs +1249 -841
  213. package/dist/client/{locationMap-Cx1hBg5n.mjs → locationMap-_wJDSUYe.mjs} +3 -3
  214. package/dist/client/{media-DHtSxS5V.mjs → media-BK0O3b-U.mjs} +3 -2
  215. package/dist/client/{newsletterForm-1ZL_ti9u.mjs → newsletterForm-DrArsb2B.mjs} +2 -2
  216. package/dist/client/{pricing-BIbzmV0G.mjs → pricing-BSYVghwo.mjs} +1 -1
  217. package/dist/client/{productDetail-BTh5gHBV.mjs → productDetail-Dyk90sMs.mjs} +3 -3
  218. package/dist/client/{productList-Cc7OMrqN.mjs → productList-BCKThwAI.mjs} +3 -3
  219. package/dist/client/{propsDecoder-oR-M-ISN.mjs → propsDecoder-CkXxkdSR.mjs} +96 -33
  220. package/dist/client/rendering/client.mjs +1278 -523
  221. package/dist/client/rendering/islands.mjs +19 -19
  222. package/dist/client/rendering.mjs +2308 -1028
  223. package/dist/client/{shop-CQ_YbCnn.mjs → shop-DeltVH10.mjs} +6 -6
  224. package/dist/client/{shop-commerce-BM-AoD3M.mjs → shop-commerce-BD9Jsm2Z.mjs} +6 -6
  225. package/dist/client/{shop-commerce-store-DFMQhU5p.mjs → shop-commerce-store-CmXD6FDS.mjs} +1 -1
  226. package/dist/client/{shopShared-D0SKO2Cu.mjs → shopShared-B8v-lH_F.mjs} +2 -2
  227. package/dist/client/{useDiscountCodeUi-CrG4_ARt.mjs → useDiscountCodeUi-DbWJN8ld.mjs} +1 -1
  228. package/dist/client/{useEventFilters-CxK8Fekl.mjs → useEventFilters-EJIMUnqT.mjs} +46 -69
  229. package/dist/client/{usePolling-jcVryNgZ.mjs → usePolling-Cmh14fc7.mjs} +2 -2
  230. package/dist/preview-next/before-render.mjs +213 -0
  231. package/dist/preview-next/client/runtime.mjs +4 -4
  232. package/dist/preview-next/middleware.mjs +213 -0
  233. package/dist/{previewAuthStore-BPcJPzdz.mjs → previewAuthStore-CTO7CRPk.mjs} +213 -0
  234. package/dist/{sdk-runtime-C39Rsk-x.mjs → sdk-runtime-Dou0GAav.mjs} +2 -2
  235. package/dist/{separator-BoMSQnsP.mjs → separator-CI5wZNXT.mjs} +1 -1
  236. package/dist/server/components.mjs +2370 -1132
  237. package/dist/server/config-validation.mjs +1256 -842
  238. package/dist/server/config.mjs +1256 -843
  239. package/dist/server/data.mjs +1249 -841
  240. package/dist/server/date-time.mjs +386 -0
  241. package/dist/server/index.mjs +214 -1
  242. package/dist/server/navigation.mjs +9 -3
  243. package/dist/server/next.mjs +3421 -1949
  244. package/dist/server/page-converter.mjs +1236 -659
  245. package/dist/server/prebuild.mjs +1 -1
  246. package/dist/server/rendering/server.mjs +2074 -1060
  247. package/dist/server/rendering.mjs +2370 -1132
  248. package/dist/server/routing.mjs +1543 -1062
  249. package/dist/server/server.mjs +1464 -843
  250. package/dist/server/theme-bridge.mjs +1581 -474
  251. package/dist/server/theme.mjs +614 -305
  252. package/dist/styles/index.css +12 -1
  253. package/package.json +7 -1
  254. package/dist/_dts/theme-core/src/buttons/presets/types.d.ts +0 -88
  255. package/dist/_dts/theme-core/src/buttons/utils/contrast.d.ts +0 -38
  256. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +0 -57
@@ -509,7 +509,7 @@ function encodePublicProductCategorySelector(selector) {
509
509
  };
510
510
  }
511
511
  }
512
- function isRecord$20(value) {
512
+ function isRecord$22(value) {
513
513
  return typeof value === "object" && value !== null;
514
514
  }
515
515
  function isJsonResponseContentType(contentType) {
@@ -533,8 +533,8 @@ async function parseJsonBody(response) {
533
533
  }
534
534
  }
535
535
  function getBlockApiErrorDetails(data) {
536
- if (!isRecord$20(data)) return {};
537
- const nestedError = isRecord$20(data.error) ? data.error : void 0;
536
+ if (!isRecord$22(data)) return {};
537
+ const nestedError = isRecord$22(data.error) ? data.error : void 0;
538
538
  return {
539
539
  message: typeof nestedError?.message === "string" ? nestedError.message : typeof data.message === "string" ? data.message : void 0,
540
540
  code: typeof nestedError?.code === "string" ? nestedError.code : typeof data.code === "string" ? data.code : void 0
@@ -1496,10 +1496,10 @@ var init_colorStyles = __esmMin((() => {
1496
1496
  init_api();
1497
1497
  init_clsx();
1498
1498
  init_colorStyles();
1499
- const Section$1 = forwardRef(function Section({ as: Comp = "section", children, background, className = "", allowOverflow = false, style, "data-slot": dataSlot }, ref) {
1499
+ const Section$1 = forwardRef(function Section({ as: Comp = "section", children, background, className = "", style, "data-slot": dataSlot }, ref) {
1500
1500
  return /* @__PURE__ */ jsx(Comp, {
1501
1501
  ref,
1502
- className: clsx("rb-relative rb-isolate", allowOverflow ? "rb-overflow-visible" : "rb-overflow-hidden", className),
1502
+ className: clsx("rb-relative rb-isolate rb-overflow-visible", className),
1503
1503
  style: mergeStyles(typeof background === "string" && background.trim().length > 0 ? backgroundColorStyle(background.trim()) : void 0, style),
1504
1504
  "data-slot": dataSlot ?? "section",
1505
1505
  children
@@ -1623,16 +1623,114 @@ function Grid({ as: Comp = "div", cols = {
1623
1623
  }
1624
1624
  //#endregion
1625
1625
  //#region ../blocks/src/system/runtime/nodes/layout.tsx
1626
- const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section$1, {
1627
- ...props,
1628
- allowOverflow
1629
- });
1626
+ const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Section$1, { ...props });
1630
1627
  const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
1631
1628
  const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
1632
1629
  const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
1633
1630
  const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
1634
1631
  const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
1635
- var blockColorTokenNames;
1632
+ //#endregion
1633
+ //#region ../theme-core/src/buttons/effectClassification.ts
1634
+ function getButtonEffectPolicy(effectId) {
1635
+ return Object.prototype.hasOwnProperty.call(BUTTON_EFFECT_POLICIES, effectId) ? BUTTON_EFFECT_POLICIES[effectId] : null;
1636
+ }
1637
+ function classifyButtonEffectId(effectId) {
1638
+ return getButtonEffectPolicy(effectId)?.classification ?? "unknown";
1639
+ }
1640
+ var BUTTON_EFFECT_POLICIES;
1641
+ var init_effectClassification = __esmMin((() => {
1642
+ BUTTON_EFFECT_POLICIES = {
1643
+ "darken-background": {
1644
+ classification: "colour-transition",
1645
+ transition: {
1646
+ kind: "adjust-shade",
1647
+ direction: "darker"
1648
+ }
1649
+ },
1650
+ "lighten-background": {
1651
+ classification: "colour-transition",
1652
+ transition: {
1653
+ kind: "adjust-shade",
1654
+ direction: "lighter"
1655
+ }
1656
+ },
1657
+ "background-on-hover": {
1658
+ classification: "colour-transition",
1659
+ transition: { kind: "replace-background" }
1660
+ },
1661
+ "background-on-hover-alpha": {
1662
+ classification: "unsupported-colour",
1663
+ reason: "alpha_requires_surface"
1664
+ },
1665
+ "fade-background": {
1666
+ classification: "unsupported-colour",
1667
+ reason: "changes_element_opacity"
1668
+ },
1669
+ "opacity-reduce": {
1670
+ classification: "unsupported-colour",
1671
+ reason: "changes_element_opacity"
1672
+ },
1673
+ "gradient-text": {
1674
+ classification: "unsupported-colour",
1675
+ reason: "changes_foreground"
1676
+ },
1677
+ "text-color-change": {
1678
+ classification: "unsupported-colour",
1679
+ reason: "changes_foreground"
1680
+ },
1681
+ "border-color-change": {
1682
+ classification: "unsupported-colour",
1683
+ reason: "changes_border"
1684
+ },
1685
+ "aurora-glow": {
1686
+ classification: "unsupported-background-overlay",
1687
+ reason: "unresolved_background_overlay"
1688
+ },
1689
+ "cosmic-stardust": {
1690
+ classification: "unsupported-background-overlay",
1691
+ reason: "unresolved_background_overlay"
1692
+ },
1693
+ "gradient-border-fill": {
1694
+ classification: "unsupported-background-overlay",
1695
+ reason: "unresolved_background_overlay"
1696
+ },
1697
+ "animated-gradient-border-fill": {
1698
+ classification: "unsupported-background-overlay",
1699
+ reason: "unresolved_background_overlay"
1700
+ },
1701
+ "nav-underline": {
1702
+ classification: "not-button",
1703
+ reason: "not_button_effect"
1704
+ },
1705
+ "nav-frosted-base": {
1706
+ classification: "not-button",
1707
+ reason: "not_button_effect"
1708
+ },
1709
+ "nav-frosted-hover": {
1710
+ classification: "not-button",
1711
+ reason: "not_button_effect"
1712
+ },
1713
+ "nav-frosted-active": {
1714
+ classification: "not-button",
1715
+ reason: "not_button_effect"
1716
+ },
1717
+ "animated-gradient": { classification: "non-colour" },
1718
+ "border-glow": { classification: "non-colour" },
1719
+ "drop-shadow": { classification: "non-colour" },
1720
+ "inner-shadow": { classification: "non-colour" },
1721
+ "neumorphic-shadow": { classification: "non-colour" },
1722
+ "outer-glow": { classification: "non-colour" },
1723
+ "retro-3d-shadow": { classification: "non-colour" },
1724
+ "scale-up": { classification: "non-colour" },
1725
+ "scale-down": { classification: "non-colour" },
1726
+ lift: { classification: "non-colour" },
1727
+ "press-down": { classification: "non-colour" },
1728
+ pop: { classification: "non-colour" },
1729
+ "border-bottom-grow": { classification: "non-colour" },
1730
+ "sketchy-border": { classification: "non-colour" },
1731
+ "pulse-animation": { classification: "non-colour" }
1732
+ };
1733
+ })), blockColorTokenNames;
1636
1734
  var init_blockColorTokens = __esmMin((() => {
1637
1735
  init_colorTokenParts();
1638
1736
  blockColorTokenNames = [
@@ -1743,9 +1841,155 @@ function asSpecialVariantId(value) {
1743
1841
  if (value.length === 0) throw new Error("SpecialVariantId must be a non-empty string");
1744
1842
  return value;
1745
1843
  }
1746
- var VARIANT_ROLES, DEFAULT_VARIANT_ALIAS_ID, cornerStyleSchema, shadowSizeSchema, textTransformSchema, fontWeightSchema, buttonTypographySchema, letterSpacingSchema, hoverTransformSchema, hoverColorSchema, buttonPaddingPresetSchema, gradientStyleSchema, gradientSharpnessSchema, prioritySchema, buttonSizeNameSchema, PADDING_TOKEN_PATTERN, paddingShorthandSchema, buttonSizeConfigSchema, buttonSizesSchema, buttonGlobalSettingsSchema, gradientDirectionSchema$1, buttonBackgroundSchema, effectApplicationSchema$1, buttonBorderSchema, buttonVariantAffordanceSchema, variantShadowSchema, variantEffectsSchema, variantSizeOverridesSchema, buttonVariantSchema, buttonSystemSchema;
1844
+ function parseOpaqueButtonColourToken(value) {
1845
+ const token = parseThemeColorToken(value);
1846
+ if (token === null) return null;
1847
+ const parts = parseColorTokenParts(token);
1848
+ return parts.kind === "token" && parts.opacityPercent === null ? token : null;
1849
+ }
1850
+ function unsafeAsOpaqueButtonColourToken(value) {
1851
+ return value;
1852
+ }
1853
+ function normalizeLegacyButtonVariantInput(input) {
1854
+ if (!isUnknownRecord(input)) return input;
1855
+ const background = input.background;
1856
+ if (!isUnknownRecord(background)) return input;
1857
+ if (!(background.type === "transparent" || Object.prototype.hasOwnProperty.call(input, "textColorToken") || isUnknownRecord(input.border) && Object.prototype.hasOwnProperty.call(input.border, "colorToken") || hasLegacyButtonEffects(input.effects) || hasLegacyAlphaToken(input, background))) return input;
1858
+ const { textColorToken, ...withoutLegacyText } = input;
1859
+ const normalizedBorder = isUnknownRecord(input.border) && typeof input.border.widthClass === "string" ? { widthClass: input.border.widthClass } : input.border;
1860
+ const normalizedAffordance = isUnknownRecord(input.affordance) && typeof input.affordance.iconId === "string" ? { iconId: input.affordance.iconId } : input.affordance;
1861
+ const normalizedEffects = normalizeLegacyButtonEffects(input.effects, background.type);
1862
+ const hoverBackgroundToken = stripLegacyTokenAlpha(input.hoverBackgroundToken);
1863
+ if (background.type === "transparent") return {
1864
+ ...withoutLegacyText,
1865
+ background: {
1866
+ type: "surface",
1867
+ role: "link"
1868
+ },
1869
+ border: normalizedBorder,
1870
+ affordance: normalizedAffordance,
1871
+ effects: normalizedEffects,
1872
+ hoverBackgroundToken
1873
+ };
1874
+ if (background.type === "gradient") {
1875
+ const stops = Array.isArray(background.stops) ? background.stops.map(stripLegacyTokenAlpha) : background.stops;
1876
+ return {
1877
+ ...withoutLegacyText,
1878
+ background: {
1879
+ ...background,
1880
+ stops,
1881
+ foregroundToken: stripLegacyTokenAlpha(background.foregroundToken ?? textColorToken)
1882
+ },
1883
+ border: normalizedBorder,
1884
+ affordance: normalizedAffordance,
1885
+ effects: normalizedEffects,
1886
+ hoverBackgroundToken
1887
+ };
1888
+ }
1889
+ return {
1890
+ ...withoutLegacyText,
1891
+ background: background.type === "solid" ? {
1892
+ ...background,
1893
+ colorToken: stripLegacyTokenAlpha(background.colorToken)
1894
+ } : background,
1895
+ border: normalizedBorder,
1896
+ affordance: normalizedAffordance,
1897
+ effects: normalizedEffects,
1898
+ hoverBackgroundToken
1899
+ };
1900
+ }
1901
+ function normalizeLegacyButtonGlobalInput(input) {
1902
+ if (!isUnknownRecord(input)) return input;
1903
+ const hoverColorToken = stripLegacyTokenAlpha(input.hoverColorToken);
1904
+ return hoverColorToken === input.hoverColorToken ? input : {
1905
+ ...input,
1906
+ hoverColorToken
1907
+ };
1908
+ }
1909
+ function hasLegacyAlphaToken(input, background) {
1910
+ const stops = isUnknownArray$2(background.stops) ? background.stops : [];
1911
+ return [
1912
+ input.hoverBackgroundToken,
1913
+ background.colorToken,
1914
+ background.foregroundToken,
1915
+ ...stops
1916
+ ].some((token) => stripLegacyTokenAlpha(token) !== token);
1917
+ }
1918
+ function stripLegacyTokenAlpha(value) {
1919
+ if (typeof value !== "string") return value;
1920
+ const slashIndex = value.indexOf("/");
1921
+ return slashIndex < 0 ? value : value.slice(0, slashIndex);
1922
+ }
1923
+ function hasLegacyButtonEffects(input) {
1924
+ if (!isUnknownRecord(input)) return false;
1925
+ return [
1926
+ "base",
1927
+ "hover",
1928
+ "active",
1929
+ "focus"
1930
+ ].some((state) => {
1931
+ const effects = input[state];
1932
+ return Array.isArray(effects) && effects.some((effect) => {
1933
+ if (!isUnknownRecord(effect) || typeof effect.effectId !== "string") return true;
1934
+ const classification = classifyButtonEffectId(effect.effectId);
1935
+ if (classification !== "colour-transition" && classification !== "non-colour") return true;
1936
+ return effect.effectId === "background-on-hover" && isUnknownRecord(effect.options) && stripLegacyTokenAlpha(effect.options.colorToken) !== effect.options.colorToken;
1937
+ });
1938
+ });
1939
+ }
1940
+ function normalizeLegacyButtonEffects(input, backgroundType) {
1941
+ if (!isUnknownRecord(input)) return input;
1942
+ const normalized = {};
1943
+ for (const state of [
1944
+ "base",
1945
+ "hover",
1946
+ "active",
1947
+ "focus"
1948
+ ]) {
1949
+ const effects = input[state];
1950
+ if (!Array.isArray(effects)) continue;
1951
+ const safeEffects = effects.flatMap((effect) => {
1952
+ if (!isUnknownRecord(effect) || typeof effect.effectId !== "string") return [];
1953
+ const classification = classifyButtonEffectId(effect.effectId);
1954
+ if (classification === "non-colour") return [effect];
1955
+ if (classification !== "colour-transition") return [];
1956
+ if (effect.effectId === "background-on-hover") {
1957
+ const options = isUnknownRecord(effect.options) ? effect.options : null;
1958
+ const colorToken = options === null ? null : parseOpaqueButtonColourToken(stripLegacyTokenAlpha(options.colorToken));
1959
+ return colorToken === null ? [] : [{
1960
+ ...effect,
1961
+ options: {
1962
+ ...options,
1963
+ colorToken
1964
+ }
1965
+ }];
1966
+ }
1967
+ if (backgroundType !== "solid") return [];
1968
+ const rawAmount = isUnknownRecord(effect.options) ? effect.options.amount : void 0;
1969
+ const amount = typeof rawAmount === "number" && rawAmount > 0 ? Math.max(100, Math.round(rawAmount / 100) * 100) : 100;
1970
+ return [{
1971
+ ...effect,
1972
+ options: {
1973
+ ...isUnknownRecord(effect.options) ? effect.options : {},
1974
+ amount
1975
+ }
1976
+ }];
1977
+ });
1978
+ if (safeEffects.length > 0) normalized[state] = safeEffects;
1979
+ }
1980
+ return Object.keys(normalized).length === 0 ? void 0 : normalized;
1981
+ }
1982
+ function isUnknownRecord(value) {
1983
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1984
+ }
1985
+ function isUnknownArray$2(value) {
1986
+ return Array.isArray(value);
1987
+ }
1988
+ var VARIANT_ROLES, DEFAULT_VARIANT_ALIAS_ID, opaqueButtonColourTokenSchema, cornerStyleSchema, shadowSizeSchema, textTransformSchema, fontWeightSchema, buttonTypographySchema, letterSpacingSchema, hoverTransformSchema, hoverColorSchema, buttonPaddingPresetSchema, gradientStyleSchema, gradientSharpnessSchema, prioritySchema, buttonSizeNameSchema, PADDING_TOKEN_PATTERN, paddingShorthandSchema, buttonSizeConfigSchema, buttonSizesSchema, canonicalButtonGlobalSettingsSchema, buttonGlobalSettingsSchema, gradientDirectionSchema$1, buttonColourTreatmentSchema, buttonBackgroundSchema, effectApplicationSchema$1, buttonBorderSchema, buttonVariantAffordanceSchema, variantShadowSchema, variantEffectsSchema, variantSizeOverridesSchema, canonicalButtonVariantSchema, buttonVariantSchema, buttonSystemSchema;
1747
1989
  var init_types$17 = __esmMin((() => {
1990
+ init_effectClassification();
1748
1991
  init_themeColorTokens();
1992
+ init_colorTokenParts();
1749
1993
  VARIANT_ROLES = [
1750
1994
  "primary",
1751
1995
  "secondary",
@@ -1756,6 +2000,11 @@ var init_types$17 = __esmMin((() => {
1756
2000
  "accent"
1757
2001
  ];
1758
2002
  DEFAULT_VARIANT_ALIAS_ID = "default";
2003
+ opaqueButtonColourTokenSchema = themeColorTokenSchema.refine((value) => parseOpaqueButtonColourToken(value) !== null, "Button colour tokens must be opaque").transform((value) => {
2004
+ const token = parseOpaqueButtonColourToken(value);
2005
+ if (token === null) throw new Error("Invariant: opaque button token passed its schema");
2006
+ return token;
2007
+ });
1759
2008
  cornerStyleSchema = z$1.enum([
1760
2009
  "square",
1761
2010
  "rounded",
@@ -1844,7 +2093,7 @@ var init_types$17 = __esmMin((() => {
1844
2093
  lg,
1845
2094
  xl: xl ?? lg
1846
2095
  }));
1847
- buttonGlobalSettingsSchema = z$1.object({
2096
+ canonicalButtonGlobalSettingsSchema = z$1.object({
1848
2097
  cornerStyle: cornerStyleSchema,
1849
2098
  cornerRadius: z$1.number().min(0).max(24).optional(),
1850
2099
  /**
@@ -1875,11 +2124,12 @@ var init_types$17 = __esmMin((() => {
1875
2124
  paddingPreset: buttonPaddingPresetSchema.optional(),
1876
2125
  hoverTransform: hoverTransformSchema,
1877
2126
  hoverColor: hoverColorSchema,
1878
- hoverColorToken: themeColorTokenSchema.optional(),
2127
+ hoverColorToken: opaqueButtonColourTokenSchema.optional(),
1879
2128
  gradientStyle: gradientStyleSchema.optional(),
1880
2129
  gradientAngle: z$1.number().min(0).max(360).optional(),
1881
2130
  gradientSharpness: gradientSharpnessSchema.optional()
1882
2131
  });
2132
+ buttonGlobalSettingsSchema = z$1.preprocess(normalizeLegacyButtonGlobalInput, canonicalButtonGlobalSettingsSchema);
1883
2133
  gradientDirectionSchema$1 = z$1.enum([
1884
2134
  "to-r",
1885
2135
  "to-l",
@@ -1890,30 +2140,37 @@ var init_types$17 = __esmMin((() => {
1890
2140
  "to-br",
1891
2141
  "to-bl"
1892
2142
  ]);
1893
- buttonBackgroundSchema = z$1.discriminatedUnion("type", [
2143
+ buttonColourTreatmentSchema = z$1.discriminatedUnion("type", [
1894
2144
  z$1.object({
1895
2145
  type: z$1.literal("solid"),
1896
- colorToken: themeColorTokenSchema
2146
+ colorToken: opaqueButtonColourTokenSchema
1897
2147
  }),
1898
2148
  z$1.object({
1899
2149
  type: z$1.literal("gradient"),
1900
- stops: z$1.array(themeColorTokenSchema).min(2),
1901
- direction: gradientDirectionSchema$1
2150
+ stops: z$1.array(opaqueButtonColourTokenSchema).min(2).transform((stops) => {
2151
+ const [first, second, ...rest] = stops;
2152
+ if (first === void 0 || second === void 0) throw new Error("Invariant: gradient stops passed the minimum length schema");
2153
+ return [
2154
+ first,
2155
+ second,
2156
+ ...rest
2157
+ ];
2158
+ }),
2159
+ direction: gradientDirectionSchema$1,
2160
+ foregroundToken: opaqueButtonColourTokenSchema
1902
2161
  }),
1903
- z$1.object({ type: z$1.literal("transparent") })
2162
+ z$1.object({
2163
+ type: z$1.literal("surface"),
2164
+ role: z$1.literal("link")
2165
+ })
1904
2166
  ]);
2167
+ buttonBackgroundSchema = buttonColourTreatmentSchema;
1905
2168
  effectApplicationSchema$1 = z$1.object({
1906
2169
  effectId: z$1.string(),
1907
- options: z$1.record(z$1.string(), z$1.any()).optional()
1908
- });
1909
- buttonBorderSchema = z$1.object({
1910
- widthClass: z$1.string(),
1911
- colorToken: themeColorTokenSchema
1912
- });
1913
- buttonVariantAffordanceSchema = z$1.object({
1914
- iconId: z$1.string().min(1),
1915
- colorToken: themeColorTokenSchema.optional()
2170
+ options: z$1.record(z$1.string(), z$1.json()).optional()
1916
2171
  });
2172
+ buttonBorderSchema = z$1.object({ widthClass: z$1.string() });
2173
+ buttonVariantAffordanceSchema = z$1.object({ iconId: z$1.string().min(1) });
1917
2174
  variantShadowSchema = z$1.object({
1918
2175
  elevation: z$1.enum([
1919
2176
  "none",
@@ -1941,22 +2198,22 @@ var init_types$17 = __esmMin((() => {
1941
2198
  lg: buttonSizeConfigSchema.optional(),
1942
2199
  xl: buttonSizeConfigSchema.optional()
1943
2200
  });
1944
- buttonVariantSchema = z$1.object({
2201
+ canonicalButtonVariantSchema = z$1.object({
1945
2202
  id: z$1.string(),
1946
2203
  name: z$1.string().min(1).max(20),
1947
2204
  enabled: z$1.boolean(),
1948
2205
  priority: prioritySchema,
1949
2206
  background: buttonBackgroundSchema,
1950
- textColorToken: themeColorTokenSchema,
1951
2207
  /** Tailwind radius token (e.g. `'rounded-md'`). Omit to inherit from `global.cornerStyle`. */
1952
2208
  borderRadius: z$1.string().optional(),
1953
2209
  shadow: variantShadowSchema.optional(),
1954
2210
  border: buttonBorderSchema.optional(),
1955
- hoverBackgroundToken: z$1.string().optional(),
2211
+ hoverBackgroundToken: opaqueButtonColourTokenSchema.optional(),
1956
2212
  effects: variantEffectsSchema.optional(),
1957
2213
  sizes: variantSizeOverridesSchema.optional(),
1958
2214
  affordance: buttonVariantAffordanceSchema.optional()
1959
2215
  });
2216
+ buttonVariantSchema = z$1.preprocess(normalizeLegacyButtonVariantInput, canonicalButtonVariantSchema);
1960
2217
  buttonSystemSchema = z$1.object({
1961
2218
  global: buttonGlobalSettingsSchema,
1962
2219
  variants: z$1.array(buttonVariantSchema).min(1).max(6),
@@ -1995,8 +2252,7 @@ var init_classNames = __esmMin((() => {
1995
2252
  }));
1996
2253
  var init_resolver$1 = __esmMin((() => {}));
1997
2254
  var init_generateBaseCSS = __esmMin((() => {}));
1998
- var init_background$2 = __esmMin((() => {}));
1999
- var STATE_SELECTORS, init_cssUtils = __esmMin((() => {
2255
+ var init_background$2 = __esmMin((() => {})), STATE_SELECTORS, init_cssUtils = __esmMin((() => {
2000
2256
  STATE_SELECTORS = {
2001
2257
  hover: ":hover, [data-force-hover=\"true\"]",
2002
2258
  active: ":active",
@@ -2032,13 +2288,130 @@ var init_registry$1 = __esmMin((() => {
2032
2288
  init_border();
2033
2289
  init_animation();
2034
2290
  init_effects();
2035
- }));
2036
- var init_generateEffectsCSS = __esmMin((() => {
2291
+ })), init_generateEffectsCSS = __esmMin((() => {
2037
2292
  init_registry$1();
2038
- })), init_contrast$2 = __esmMin((() => {}));
2293
+ }));
2039
2294
  var init_generateDefaultButtonSystem = __esmMin((() => {
2040
- init_contrast$2();
2041
- })), init_affordanceIcons = __esmMin((() => {})), AFFORDANCE_SUPPRESS_CLASS;
2295
+ init_types$17();
2296
+ }));
2297
+ var init_affordanceIcons = __esmMin((() => {}));
2298
+ //#endregion
2299
+ //#region ../theme-core/src/palette/utils/colorConversion.ts
2300
+ function hexToRgb$1(hex) {
2301
+ const h = hex.replace(/^#/, "");
2302
+ const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
2303
+ if (m.length !== 6) throw new Error("Bad hex");
2304
+ const int = parseInt(m, 16);
2305
+ return {
2306
+ r: int >> 16 & 255,
2307
+ g: int >> 8 & 255,
2308
+ b: int & 255
2309
+ };
2310
+ }
2311
+ function srgbToLinear(u) {
2312
+ const x = u / 255;
2313
+ return x <= .04045 ? x / 12.92 : Math.pow((x + .055) / 1.055, 2.4);
2314
+ }
2315
+ function linearToSrgb(x) {
2316
+ const y = x <= .0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - .055;
2317
+ return clamp01$2(y) * 255;
2318
+ }
2319
+ var clamp01$2, mod, deg;
2320
+ var init_colorConversion = __esmMin((() => {
2321
+ clamp01$2 = (x) => Math.max(0, Math.min(1, x));
2322
+ mod = (a, n) => (a % n + n) % n;
2323
+ deg = (x) => mod(x, 360);
2324
+ }));
2325
+ var init_generateShades = __esmMin((() => {
2326
+ init_colorConversion();
2327
+ }));
2328
+ var init_neutralScale = __esmMin((() => {
2329
+ init_colorConversion();
2330
+ }));
2331
+ //#endregion
2332
+ //#region ../theme-core/src/palette/utils/contrast.ts
2333
+ function relativeLuminance(r, g, b) {
2334
+ const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
2335
+ return .2126 * R + .7152 * G + .0722 * B;
2336
+ }
2337
+ function contrastRatio(hex1, hex2) {
2338
+ const { r: r1, g: g1, b: b1 } = hexToRgb$1(hex1);
2339
+ const { r: r2, g: g2, b: b2 } = hexToRgb$1(hex2);
2340
+ const L1 = relativeLuminance(r1, g1, b1);
2341
+ const L2 = relativeLuminance(r2, g2, b2);
2342
+ const [hi, lo] = L1 >= L2 ? [L1, L2] : [L2, L1];
2343
+ return (hi + .05) / (lo + .05);
2344
+ }
2345
+ var init_contrast$1 = __esmMin((() => {
2346
+ init_colorConversion();
2347
+ }));
2348
+ //#endregion
2349
+ //#region ../theme-core/src/palette/utils/textColor.ts
2350
+ /**
2351
+ * Pick the better of black/white text for a given background using actual
2352
+ * contrast ratios, not a simple luminance cutoff.
2353
+ *
2354
+ * @param background - Background color in hex or rgb/rgba format (e.g., '#FFFFFF' or 'rgb(255, 255, 255)')
2355
+ * @param minContrast - Preferred minimum contrast ratio for body-sized text
2356
+ * @returns '#000000' for light backgrounds, '#FFFFFF' for dark backgrounds
2357
+ */
2358
+ function pickBlackOrWhiteTextColor(background, minContrast = 4.5) {
2359
+ const { r, g, b } = parseColorToRgb(background);
2360
+ const luminance = relativeLuminance(r, g, b);
2361
+ const blackContrast = (luminance + .05) / .05;
2362
+ const whiteContrast = 1.05 / (luminance + .05);
2363
+ if (blackContrast >= minContrast && whiteContrast < minContrast) return "#000000";
2364
+ if (whiteContrast >= minContrast && blackContrast < minContrast) return "#FFFFFF";
2365
+ return blackContrast >= whiteContrast ? "#000000" : "#FFFFFF";
2366
+ }
2367
+ /**
2368
+ * Backwards-compatible alias for callers that want the best black/white text
2369
+ * color for a background.
2370
+ */
2371
+ function getTextColorForBackground(background) {
2372
+ return pickBlackOrWhiteTextColor(background);
2373
+ }
2374
+ function parseColorToRgb(input) {
2375
+ const trimmed = input.trim();
2376
+ if (trimmed.startsWith("#")) return hexToRgb$1(trimmed);
2377
+ const rgbMatch = trimmed.match(/^rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})(?:\s*,\s*(?:0|1|0?\.\d+))?\s*\)$/i);
2378
+ if (rgbMatch?.[1] && rgbMatch[2] && rgbMatch[3]) return {
2379
+ r: clamp255(Number(rgbMatch[1])),
2380
+ g: clamp255(Number(rgbMatch[2])),
2381
+ b: clamp255(Number(rgbMatch[3]))
2382
+ };
2383
+ throw new Error("Unsupported color format");
2384
+ }
2385
+ function clamp255(value) {
2386
+ if (Number.isNaN(value)) return 0;
2387
+ return Math.max(0, Math.min(255, value));
2388
+ }
2389
+ var init_textColor = __esmMin((() => {
2390
+ init_colorConversion();
2391
+ init_contrast$1();
2392
+ }));
2393
+ //#endregion
2394
+ //#region ../theme-core/src/palette/utils/onColor.ts
2395
+ function onColorTokenName(backgroundToken) {
2396
+ return `on${backgroundToken.split("-").filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("")}`;
2397
+ }
2398
+ var init_onColor = __esmMin((() => {}));
2399
+ var init_expandPalette = __esmMin((() => {
2400
+ init_generateShades();
2401
+ init_neutralScale();
2402
+ init_colorConversion();
2403
+ init_textColor();
2404
+ init_onColor();
2405
+ }));
2406
+ var init_resolveButtonColourStates = __esmMin((() => {
2407
+ init_contrast$1();
2408
+ init_colorConversion();
2409
+ init_onColor();
2410
+ init_foregroundContract();
2411
+ init_types$17();
2412
+ init_constants$2();
2413
+ init_effectClassification();
2414
+ })), init_resolvedButtonCss = __esmMin((() => {})), AFFORDANCE_SUPPRESS_CLASS;
2042
2415
  var init_generateButtonCss = __esmMin((() => {
2043
2416
  init_types$17();
2044
2417
  init_classNames();
@@ -2048,10 +2421,13 @@ var init_generateButtonCss = __esmMin((() => {
2048
2421
  init_constants$2();
2049
2422
  init_generateDefaultButtonSystem();
2050
2423
  init_affordanceIcons();
2424
+ init_expandPalette();
2425
+ init_foregroundContract();
2426
+ init_resolveButtonColourStates();
2427
+ init_resolvedButtonCss();
2051
2428
  AFFORDANCE_SUPPRESS_CLASS = "rb-affordance-off";
2052
2429
  buttonSizeNameSchema.options;
2053
2430
  }));
2054
- var init_presets$1 = __esmMin((() => {}));
2055
2431
  //#endregion
2056
2432
  //#region ../theme-core/src/site-styles/styleTags.ts
2057
2433
  var STYLE_AXIS_VALUES, styleTagsSchema;
@@ -2100,7 +2476,7 @@ function defineButtonPersonality(input) {
2100
2476
  name: input.name,
2101
2477
  description: input.description,
2102
2478
  tags: input.tags,
2103
- buttonSystem: input.buttonSystem
2479
+ buttonSystem: buttonSystemSchema.parse(input.buttonSystem)
2104
2480
  };
2105
2481
  }
2106
2482
  var buttonPersonalityIdSchema;
@@ -2165,19 +2541,15 @@ var init_brushed_wash = __esmMin((() => {
2165
2541
  background: {
2166
2542
  type: "gradient",
2167
2543
  stops: ["primary", "accent"],
2168
- direction: "to-r"
2544
+ direction: "to-r",
2545
+ foregroundToken: "primaryForeground"
2169
2546
  },
2170
- textColorToken: "primaryForeground",
2171
2547
  borderRadius: "rounded-lg",
2172
2548
  shadow: {
2173
2549
  elevation: "low",
2174
2550
  softness: "soft",
2175
2551
  position: "bottom"
2176
- },
2177
- effects: { hover: [{
2178
- effectId: "opacity-reduce",
2179
- options: { reduction: -15 }
2180
- }] }
2552
+ }
2181
2553
  },
2182
2554
  {
2183
2555
  id: "secondary",
@@ -2187,32 +2559,27 @@ var init_brushed_wash = __esmMin((() => {
2187
2559
  background: {
2188
2560
  type: "gradient",
2189
2561
  stops: ["secondary", "accent"],
2190
- direction: "to-br"
2562
+ direction: "to-br",
2563
+ foregroundToken: "primaryForeground"
2191
2564
  },
2192
- textColorToken: "primaryForeground",
2193
2565
  borderRadius: "rounded-lg",
2194
2566
  shadow: {
2195
2567
  elevation: "low",
2196
2568
  softness: "soft",
2197
2569
  position: "bottom"
2198
- },
2199
- effects: { hover: [{
2200
- effectId: "opacity-reduce",
2201
- options: { reduction: -15 }
2202
- }] }
2570
+ }
2203
2571
  },
2204
2572
  {
2205
2573
  id: "outline",
2206
2574
  name: "Outline",
2207
2575
  enabled: true,
2208
2576
  priority: 3,
2209
- background: { type: "transparent" },
2210
- textColorToken: "primary",
2211
- borderRadius: "rounded-lg",
2212
- border: {
2213
- widthClass: "border",
2214
- colorToken: "primary"
2577
+ background: {
2578
+ type: "surface",
2579
+ role: "link"
2215
2580
  },
2581
+ borderRadius: "rounded-lg",
2582
+ border: { widthClass: "border" },
2216
2583
  effects: { hover: [{
2217
2584
  effectId: "background-on-hover",
2218
2585
  options: { colorToken: "surface" }
@@ -2223,8 +2590,10 @@ var init_brushed_wash = __esmMin((() => {
2223
2590
  name: "Ghost",
2224
2591
  enabled: true,
2225
2592
  priority: 3,
2226
- background: { type: "transparent" },
2227
- textColorToken: "text",
2593
+ background: {
2594
+ type: "surface",
2595
+ role: "link"
2596
+ },
2228
2597
  borderRadius: "rounded-lg",
2229
2598
  effects: { hover: [{
2230
2599
  effectId: "background-on-hover",
@@ -2270,7 +2639,6 @@ var init_confident_chip = __esmMin((() => {
2270
2639
  type: "solid",
2271
2640
  colorToken: "primary"
2272
2641
  },
2273
- textColorToken: "primaryForeground",
2274
2642
  borderRadius: "rounded-md",
2275
2643
  shadow: {
2276
2644
  elevation: "medium",
@@ -2280,7 +2648,7 @@ var init_confident_chip = __esmMin((() => {
2280
2648
  effects: {
2281
2649
  hover: [{
2282
2650
  effectId: "darken-background",
2283
- options: { amount: 60 }
2651
+ options: { amount: 100 }
2284
2652
  }],
2285
2653
  active: [{
2286
2654
  effectId: "scale-down",
@@ -2297,12 +2665,8 @@ var init_confident_chip = __esmMin((() => {
2297
2665
  type: "solid",
2298
2666
  colorToken: "surface"
2299
2667
  },
2300
- textColorToken: "text",
2301
2668
  borderRadius: "rounded-md",
2302
- border: {
2303
- widthClass: "border",
2304
- colorToken: "border"
2305
- },
2669
+ border: { widthClass: "border" },
2306
2670
  effects: { hover: [{
2307
2671
  effectId: "background-on-hover",
2308
2672
  options: { colorToken: "background" }
@@ -2313,13 +2677,12 @@ var init_confident_chip = __esmMin((() => {
2313
2677
  name: "Outline",
2314
2678
  enabled: true,
2315
2679
  priority: 3,
2316
- background: { type: "transparent" },
2317
- textColorToken: "primary",
2318
- borderRadius: "rounded-md",
2319
- border: {
2320
- widthClass: "border",
2321
- colorToken: "primary"
2680
+ background: {
2681
+ type: "surface",
2682
+ role: "link"
2322
2683
  },
2684
+ borderRadius: "rounded-md",
2685
+ border: { widthClass: "border" },
2323
2686
  effects: { hover: [{
2324
2687
  effectId: "background-on-hover",
2325
2688
  options: { colorToken: "surface" }
@@ -2330,8 +2693,10 @@ var init_confident_chip = __esmMin((() => {
2330
2693
  name: "Ghost",
2331
2694
  enabled: true,
2332
2695
  priority: 3,
2333
- background: { type: "transparent" },
2334
- textColorToken: "primary",
2696
+ background: {
2697
+ type: "surface",
2698
+ role: "link"
2699
+ },
2335
2700
  borderRadius: "rounded-md",
2336
2701
  effects: { hover: [{
2337
2702
  effectId: "background-on-hover",
@@ -2394,7 +2759,6 @@ var init_earth_pill = __esmMin((() => {
2394
2759
  type: "solid",
2395
2760
  colorToken: "primary"
2396
2761
  },
2397
- textColorToken: "primaryForeground",
2398
2762
  borderRadius: "rounded-full",
2399
2763
  shadow: {
2400
2764
  elevation: "low",
@@ -2420,13 +2784,12 @@ var init_earth_pill = __esmMin((() => {
2420
2784
  name: "Secondary",
2421
2785
  enabled: true,
2422
2786
  priority: 2,
2423
- background: { type: "transparent" },
2424
- textColorToken: "primary",
2425
- borderRadius: "rounded-full",
2426
- border: {
2427
- widthClass: "border",
2428
- colorToken: "primary"
2787
+ background: {
2788
+ type: "surface",
2789
+ role: "link"
2429
2790
  },
2791
+ borderRadius: "rounded-full",
2792
+ border: { widthClass: "border" },
2430
2793
  effects: { hover: [{
2431
2794
  effectId: "background-on-hover",
2432
2795
  options: { colorToken: "muted" }
@@ -2437,13 +2800,12 @@ var init_earth_pill = __esmMin((() => {
2437
2800
  name: "Outline",
2438
2801
  enabled: true,
2439
2802
  priority: 3,
2440
- background: { type: "transparent" },
2441
- textColorToken: "text",
2442
- borderRadius: "rounded-full",
2443
- border: {
2444
- widthClass: "border",
2445
- colorToken: "border"
2803
+ background: {
2804
+ type: "surface",
2805
+ role: "link"
2446
2806
  },
2807
+ borderRadius: "rounded-full",
2808
+ border: { widthClass: "border" },
2447
2809
  effects: { hover: [{
2448
2810
  effectId: "background-on-hover",
2449
2811
  options: { colorToken: "surfaceAlt" }
@@ -2454,8 +2816,10 @@ var init_earth_pill = __esmMin((() => {
2454
2816
  name: "Ghost",
2455
2817
  enabled: true,
2456
2818
  priority: 3,
2457
- background: { type: "transparent" },
2458
- textColorToken: "primary",
2819
+ background: {
2820
+ type: "surface",
2821
+ role: "link"
2822
+ },
2459
2823
  borderRadius: "rounded-full",
2460
2824
  shadow: {
2461
2825
  elevation: "none",
@@ -2476,11 +2840,7 @@ var init_earth_pill = __esmMin((() => {
2476
2840
  padding: "0.625rem 0",
2477
2841
  fontSize: "text-xl"
2478
2842
  }
2479
- },
2480
- effects: { hover: [{
2481
- effectId: "opacity-reduce",
2482
- options: { reduction: 25 }
2483
- }] }
2843
+ }
2484
2844
  }
2485
2845
  ]
2486
2846
  }
@@ -2516,8 +2876,10 @@ var init_editorial_link = __esmMin((() => {
2516
2876
  name: "Primary",
2517
2877
  enabled: true,
2518
2878
  priority: 1,
2519
- background: { type: "transparent" },
2520
- textColorToken: "text",
2879
+ background: {
2880
+ type: "surface",
2881
+ role: "link"
2882
+ },
2521
2883
  borderRadius: "rounded-none",
2522
2884
  sizes: {
2523
2885
  sm: { padding: "0.25rem 0" },
@@ -2539,8 +2901,10 @@ var init_editorial_link = __esmMin((() => {
2539
2901
  name: "Secondary",
2540
2902
  enabled: true,
2541
2903
  priority: 2,
2542
- background: { type: "transparent" },
2543
- textColorToken: "mutedText",
2904
+ background: {
2905
+ type: "surface",
2906
+ role: "link"
2907
+ },
2544
2908
  borderRadius: "rounded-none",
2545
2909
  sizes: {
2546
2910
  sm: { padding: "0.25rem 0" },
@@ -2562,8 +2926,10 @@ var init_editorial_link = __esmMin((() => {
2562
2926
  name: "Outline",
2563
2927
  enabled: true,
2564
2928
  priority: 3,
2565
- background: { type: "transparent" },
2566
- textColorToken: "accent",
2929
+ background: {
2930
+ type: "surface",
2931
+ role: "link"
2932
+ },
2567
2933
  borderRadius: "rounded-none",
2568
2934
  sizes: {
2569
2935
  sm: { padding: "0.25rem 0" },
@@ -2585,19 +2951,17 @@ var init_editorial_link = __esmMin((() => {
2585
2951
  name: "Ghost",
2586
2952
  enabled: true,
2587
2953
  priority: 3,
2588
- background: { type: "transparent" },
2589
- textColorToken: "mutedText",
2954
+ background: {
2955
+ type: "surface",
2956
+ role: "link"
2957
+ },
2590
2958
  borderRadius: "rounded-none",
2591
2959
  sizes: {
2592
2960
  sm: { padding: "0.25rem 0" },
2593
2961
  md: { padding: "0.5rem 0" },
2594
2962
  lg: { padding: "0.625rem 0" },
2595
2963
  xl: { padding: "0.75rem 0" }
2596
- },
2597
- effects: { hover: [{
2598
- effectId: "opacity-reduce",
2599
- options: { reduction: -20 }
2600
- }] }
2964
+ }
2601
2965
  }
2602
2966
  ]
2603
2967
  }
@@ -2655,12 +3019,8 @@ var init_flat_ink = __esmMin((() => {
2655
3019
  type: "solid",
2656
3020
  colorToken: "primary"
2657
3021
  },
2658
- textColorToken: "primaryForeground",
2659
3022
  borderRadius: "rounded-lg",
2660
- affordance: {
2661
- iconId: "ArrowRight",
2662
- colorToken: "accent"
2663
- },
3023
+ affordance: { iconId: "ArrowRight" },
2664
3024
  effects: { hover: [{
2665
3025
  effectId: "lift",
2666
3026
  options: { translateY: "-2px" }
@@ -2674,13 +3034,12 @@ var init_flat_ink = __esmMin((() => {
2674
3034
  name: "Secondary",
2675
3035
  enabled: true,
2676
3036
  priority: 2,
2677
- background: { type: "transparent" },
2678
- textColorToken: "primary",
2679
- borderRadius: "rounded-lg",
2680
- border: {
2681
- widthClass: "border",
2682
- colorToken: "border"
3037
+ background: {
3038
+ type: "surface",
3039
+ role: "link"
2683
3040
  },
3041
+ borderRadius: "rounded-lg",
3042
+ border: { widthClass: "border" },
2684
3043
  effects: { hover: [{
2685
3044
  effectId: "lift",
2686
3045
  options: { translateY: "-2px" }
@@ -2698,12 +3057,8 @@ var init_flat_ink = __esmMin((() => {
2698
3057
  type: "solid",
2699
3058
  colorToken: "accent"
2700
3059
  },
2701
- textColorToken: "accentForeground",
2702
3060
  borderRadius: "rounded-lg",
2703
- affordance: {
2704
- iconId: "ArrowRight",
2705
- colorToken: "accentForeground"
2706
- },
3061
+ affordance: { iconId: "ArrowRight" },
2707
3062
  effects: { hover: [{
2708
3063
  effectId: "lift",
2709
3064
  options: { translateY: "-2px" }
@@ -2766,7 +3121,6 @@ var init_ink_stamp = __esmMin((() => {
2766
3121
  type: "solid",
2767
3122
  colorToken: "primary"
2768
3123
  },
2769
- textColorToken: "primaryForeground",
2770
3124
  borderRadius: "rounded-md",
2771
3125
  effects: {
2772
3126
  hover: [{
@@ -2787,13 +3141,12 @@ var init_ink_stamp = __esmMin((() => {
2787
3141
  name: "Secondary",
2788
3142
  enabled: true,
2789
3143
  priority: 2,
2790
- background: { type: "transparent" },
2791
- textColorToken: "primary",
2792
- borderRadius: "rounded-md",
2793
- border: {
2794
- widthClass: "border-2",
2795
- colorToken: "primary"
3144
+ background: {
3145
+ type: "surface",
3146
+ role: "link"
2796
3147
  },
3148
+ borderRadius: "rounded-md",
3149
+ border: { widthClass: "border-2" },
2797
3150
  effects: { hover: [{
2798
3151
  effectId: "background-on-hover",
2799
3152
  options: { colorToken: "surface" }
@@ -2804,13 +3157,12 @@ var init_ink_stamp = __esmMin((() => {
2804
3157
  name: "Outline",
2805
3158
  enabled: true,
2806
3159
  priority: 3,
2807
- background: { type: "transparent" },
2808
- textColorToken: "text",
2809
- borderRadius: "rounded-md",
2810
- border: {
2811
- widthClass: "border-2",
2812
- colorToken: "border"
3160
+ background: {
3161
+ type: "surface",
3162
+ role: "link"
2813
3163
  },
3164
+ borderRadius: "rounded-md",
3165
+ border: { widthClass: "border-2" },
2814
3166
  effects: { hover: [{
2815
3167
  effectId: "background-on-hover",
2816
3168
  options: { colorToken: "surface" }
@@ -2821,8 +3173,10 @@ var init_ink_stamp = __esmMin((() => {
2821
3173
  name: "Ghost",
2822
3174
  enabled: true,
2823
3175
  priority: 3,
2824
- background: { type: "transparent" },
2825
- textColorToken: "accent",
3176
+ background: {
3177
+ type: "surface",
3178
+ role: "link"
3179
+ },
2826
3180
  borderRadius: "rounded-none",
2827
3181
  sizes: {
2828
3182
  sm: {
@@ -2909,7 +3263,6 @@ var init_joy_stamp = __esmMin((() => {
2909
3263
  type: "solid",
2910
3264
  colorToken: "primary"
2911
3265
  },
2912
- textColorToken: "primaryForeground",
2913
3266
  borderRadius: "rounded-full",
2914
3267
  shadow: {
2915
3268
  elevation: "high",
@@ -2923,13 +3276,12 @@ var init_joy_stamp = __esmMin((() => {
2923
3276
  name: "Secondary",
2924
3277
  enabled: true,
2925
3278
  priority: 2,
2926
- background: { type: "transparent" },
2927
- textColorToken: "text",
2928
- borderRadius: "rounded-full",
2929
- border: {
2930
- widthClass: "border-2",
2931
- colorToken: "text"
3279
+ background: {
3280
+ type: "surface",
3281
+ role: "link"
2932
3282
  },
3283
+ borderRadius: "rounded-full",
3284
+ border: { widthClass: "border-2" },
2933
3285
  shadow: {
2934
3286
  elevation: "high",
2935
3287
  softness: "hard",
@@ -2994,12 +3346,8 @@ var init_ornate_ritual = __esmMin((() => {
2994
3346
  type: "solid",
2995
3347
  colorToken: "primary"
2996
3348
  },
2997
- textColorToken: "primaryForeground",
2998
3349
  borderRadius: "rounded-md",
2999
- border: {
3000
- widthClass: "border",
3001
- colorToken: "primary"
3002
- },
3350
+ border: { widthClass: "border" },
3003
3351
  effects: {
3004
3352
  hover: [{
3005
3353
  effectId: "background-on-hover",
@@ -3020,12 +3368,8 @@ var init_ornate_ritual = __esmMin((() => {
3020
3368
  type: "solid",
3021
3369
  colorToken: "secondary"
3022
3370
  },
3023
- textColorToken: "primaryForeground",
3024
3371
  borderRadius: "rounded-md",
3025
- border: {
3026
- widthClass: "border",
3027
- colorToken: "primary"
3028
- },
3372
+ border: { widthClass: "border" },
3029
3373
  effects: { hover: [{
3030
3374
  effectId: "background-on-hover",
3031
3375
  options: { colorToken: "surface" }
@@ -3036,13 +3380,12 @@ var init_ornate_ritual = __esmMin((() => {
3036
3380
  name: "Outline",
3037
3381
  enabled: true,
3038
3382
  priority: 3,
3039
- background: { type: "transparent" },
3040
- textColorToken: "primary",
3041
- borderRadius: "rounded-md",
3042
- border: {
3043
- widthClass: "border",
3044
- colorToken: "primary"
3383
+ background: {
3384
+ type: "surface",
3385
+ role: "link"
3045
3386
  },
3387
+ borderRadius: "rounded-md",
3388
+ border: { widthClass: "border" },
3046
3389
  effects: { hover: [{
3047
3390
  effectId: "background-on-hover",
3048
3391
  options: { colorToken: "muted" }
@@ -3053,8 +3396,10 @@ var init_ornate_ritual = __esmMin((() => {
3053
3396
  name: "Ghost",
3054
3397
  enabled: true,
3055
3398
  priority: 3,
3056
- background: { type: "transparent" },
3057
- textColorToken: "accent",
3399
+ background: {
3400
+ type: "surface",
3401
+ role: "link"
3402
+ },
3058
3403
  borderRadius: "rounded-none",
3059
3404
  sizes: {
3060
3405
  sm: {
@@ -3136,14 +3481,10 @@ var init_pebble = __esmMin((() => {
3136
3481
  type: "solid",
3137
3482
  colorToken: "primary"
3138
3483
  },
3139
- textColorToken: "primaryForeground",
3140
3484
  borderRadius: "rounded-full",
3141
3485
  effects: { hover: [{
3142
- effectId: "background-on-hover-alpha",
3143
- options: {
3144
- colorToken: "primary",
3145
- opacity: 88
3146
- }
3486
+ effectId: "darken-background",
3487
+ options: { amount: 100 }
3147
3488
  }] }
3148
3489
  },
3149
3490
  {
@@ -3151,13 +3492,12 @@ var init_pebble = __esmMin((() => {
3151
3492
  name: "Secondary",
3152
3493
  enabled: true,
3153
3494
  priority: 2,
3154
- background: { type: "transparent" },
3155
- textColorToken: "primary",
3156
- borderRadius: "rounded-full",
3157
- border: {
3158
- widthClass: "border-2",
3159
- colorToken: "accent"
3495
+ background: {
3496
+ type: "surface",
3497
+ role: "link"
3160
3498
  },
3499
+ borderRadius: "rounded-full",
3500
+ border: { widthClass: "border-2" },
3161
3501
  effects: { hover: [{
3162
3502
  effectId: "background-on-hover",
3163
3503
  options: { colorToken: "accent" }
@@ -3168,13 +3508,12 @@ var init_pebble = __esmMin((() => {
3168
3508
  name: "Outline",
3169
3509
  enabled: true,
3170
3510
  priority: 3,
3171
- background: { type: "transparent" },
3172
- textColorToken: "text",
3173
- borderRadius: "rounded-full",
3174
- border: {
3175
- widthClass: "border",
3176
- colorToken: "border"
3511
+ background: {
3512
+ type: "surface",
3513
+ role: "link"
3177
3514
  },
3515
+ borderRadius: "rounded-full",
3516
+ border: { widthClass: "border" },
3178
3517
  effects: { hover: [{
3179
3518
  effectId: "background-on-hover",
3180
3519
  options: { colorToken: "surface" }
@@ -3185,8 +3524,10 @@ var init_pebble = __esmMin((() => {
3185
3524
  name: "Ghost",
3186
3525
  enabled: true,
3187
3526
  priority: 3,
3188
- background: { type: "transparent" },
3189
- textColorToken: "primary",
3527
+ background: {
3528
+ type: "surface",
3529
+ role: "link"
3530
+ },
3190
3531
  borderRadius: "rounded-full",
3191
3532
  sizes: {
3192
3533
  sm: {
@@ -3202,11 +3543,7 @@ var init_pebble = __esmMin((() => {
3202
3543
  padding: "0.75rem 1.5rem",
3203
3544
  fontSize: "text-xl"
3204
3545
  }
3205
- },
3206
- effects: { hover: [{
3207
- effectId: "opacity-reduce",
3208
- options: { reduction: 30 }
3209
- }] }
3546
+ }
3210
3547
  }
3211
3548
  ]
3212
3549
  }
@@ -3267,15 +3604,11 @@ var init_quiet_arrow = __esmMin((() => {
3267
3604
  type: "solid",
3268
3605
  colorToken: "primary"
3269
3606
  },
3270
- textColorToken: "primaryForeground",
3271
3607
  borderRadius: "rounded-xl",
3272
3608
  affordance: { iconId: "ArrowRight" },
3273
3609
  effects: { hover: [{
3274
- effectId: "background-on-hover-alpha",
3275
- options: {
3276
- colorToken: "primary",
3277
- opacity: 90
3278
- }
3610
+ effectId: "darken-background",
3611
+ options: { amount: 100 }
3279
3612
  }] }
3280
3613
  },
3281
3614
  {
@@ -3283,13 +3616,12 @@ var init_quiet_arrow = __esmMin((() => {
3283
3616
  name: "Secondary",
3284
3617
  enabled: true,
3285
3618
  priority: 2,
3286
- background: { type: "transparent" },
3287
- textColorToken: "primary",
3288
- borderRadius: "rounded-xl",
3289
- border: {
3290
- widthClass: "border",
3291
- colorToken: "primary"
3619
+ background: {
3620
+ type: "surface",
3621
+ role: "link"
3292
3622
  },
3623
+ borderRadius: "rounded-xl",
3624
+ border: { widthClass: "border" },
3293
3625
  affordance: { iconId: "ArrowRight" },
3294
3626
  effects: { hover: [{
3295
3627
  effectId: "background-on-hover",
@@ -3301,21 +3633,22 @@ var init_quiet_arrow = __esmMin((() => {
3301
3633
  name: "Outline",
3302
3634
  enabled: true,
3303
3635
  priority: 3,
3304
- background: { type: "transparent" },
3305
- textColorToken: "primary",
3636
+ background: {
3637
+ type: "surface",
3638
+ role: "link"
3639
+ },
3306
3640
  borderRadius: "rounded-xl",
3307
- border: {
3308
- widthClass: "border",
3309
- colorToken: "primary"
3310
- }
3641
+ border: { widthClass: "border" }
3311
3642
  },
3312
3643
  {
3313
3644
  id: "ghost",
3314
3645
  name: "Ghost",
3315
3646
  enabled: true,
3316
3647
  priority: 3,
3317
- background: { type: "transparent" },
3318
- textColorToken: "primary",
3648
+ background: {
3649
+ type: "surface",
3650
+ role: "link"
3651
+ },
3319
3652
  borderRadius: "rounded-xl"
3320
3653
  }
3321
3654
  ]
@@ -3378,7 +3711,6 @@ var init_showtime_pill = __esmMin((() => {
3378
3711
  type: "solid",
3379
3712
  colorToken: "primary"
3380
3713
  },
3381
- textColorToken: "background",
3382
3714
  borderRadius: "rounded-full",
3383
3715
  effects: { hover: [{ effectId: "pop" }] }
3384
3716
  },
@@ -3387,13 +3719,12 @@ var init_showtime_pill = __esmMin((() => {
3387
3719
  name: "Secondary",
3388
3720
  enabled: true,
3389
3721
  priority: 2,
3390
- background: { type: "transparent" },
3391
- textColorToken: "primary",
3392
- borderRadius: "rounded-full",
3393
- border: {
3394
- widthClass: "border-2",
3395
- colorToken: "primary"
3722
+ background: {
3723
+ type: "surface",
3724
+ role: "link"
3396
3725
  },
3726
+ borderRadius: "rounded-full",
3727
+ border: { widthClass: "border-2" },
3397
3728
  effects: { hover: [{ effectId: "pop" }] }
3398
3729
  },
3399
3730
  {
@@ -3405,7 +3736,6 @@ var init_showtime_pill = __esmMin((() => {
3405
3736
  type: "solid",
3406
3737
  colorToken: "secondary"
3407
3738
  },
3408
- textColorToken: "primary",
3409
3739
  borderRadius: "rounded-full",
3410
3740
  effects: { hover: [{ effectId: "pop" }] }
3411
3741
  },
@@ -3418,12 +3748,8 @@ var init_showtime_pill = __esmMin((() => {
3418
3748
  type: "solid",
3419
3749
  colorToken: "background"
3420
3750
  },
3421
- textColorToken: "primary",
3422
3751
  borderRadius: "rounded-full",
3423
- border: {
3424
- widthClass: "border-2",
3425
- colorToken: "primary"
3426
- },
3752
+ border: { widthClass: "border-2" },
3427
3753
  effects: { hover: [{
3428
3754
  effectId: "background-on-hover",
3429
3755
  options: { colorToken: "surface" }
@@ -3434,13 +3760,12 @@ var init_showtime_pill = __esmMin((() => {
3434
3760
  name: "Outline",
3435
3761
  enabled: true,
3436
3762
  priority: 3,
3437
- background: { type: "transparent" },
3438
- textColorToken: "primary",
3439
- borderRadius: "rounded-full",
3440
- border: {
3441
- widthClass: "border-2",
3442
- colorToken: "primary"
3763
+ background: {
3764
+ type: "surface",
3765
+ role: "link"
3443
3766
  },
3767
+ borderRadius: "rounded-full",
3768
+ border: { widthClass: "border-2" },
3444
3769
  effects: { hover: [{
3445
3770
  effectId: "background-on-hover",
3446
3771
  options: { colorToken: "background" }
@@ -3451,8 +3776,10 @@ var init_showtime_pill = __esmMin((() => {
3451
3776
  name: "Ghost",
3452
3777
  enabled: true,
3453
3778
  priority: 3,
3454
- background: { type: "transparent" },
3455
- textColorToken: "primary",
3779
+ background: {
3780
+ type: "surface",
3781
+ role: "link"
3782
+ },
3456
3783
  borderRadius: "rounded-full",
3457
3784
  effects: { hover: [{
3458
3785
  effectId: "background-on-hover",
@@ -3498,7 +3825,6 @@ var init_soft_pill = __esmMin((() => {
3498
3825
  type: "solid",
3499
3826
  colorToken: "primary"
3500
3827
  },
3501
- textColorToken: "primaryForeground",
3502
3828
  borderRadius: "rounded-full",
3503
3829
  shadow: {
3504
3830
  elevation: "low",
@@ -3521,13 +3847,12 @@ var init_soft_pill = __esmMin((() => {
3521
3847
  name: "Secondary",
3522
3848
  enabled: true,
3523
3849
  priority: 2,
3524
- background: { type: "transparent" },
3525
- textColorToken: "primary",
3526
- borderRadius: "rounded-full",
3527
- border: {
3528
- widthClass: "border-2",
3529
- colorToken: "primary"
3850
+ background: {
3851
+ type: "surface",
3852
+ role: "link"
3530
3853
  },
3854
+ borderRadius: "rounded-full",
3855
+ border: { widthClass: "border-2" },
3531
3856
  effects: { hover: [{
3532
3857
  effectId: "background-on-hover",
3533
3858
  options: { colorToken: "surface" }
@@ -3538,13 +3863,12 @@ var init_soft_pill = __esmMin((() => {
3538
3863
  name: "Outline",
3539
3864
  enabled: true,
3540
3865
  priority: 3,
3541
- background: { type: "transparent" },
3542
- textColorToken: "text",
3543
- borderRadius: "rounded-full",
3544
- border: {
3545
- widthClass: "border",
3546
- colorToken: "border"
3866
+ background: {
3867
+ type: "surface",
3868
+ role: "link"
3547
3869
  },
3870
+ borderRadius: "rounded-full",
3871
+ border: { widthClass: "border" },
3548
3872
  effects: { hover: [{
3549
3873
  effectId: "background-on-hover",
3550
3874
  options: { colorToken: "surface" }
@@ -3555,8 +3879,10 @@ var init_soft_pill = __esmMin((() => {
3555
3879
  name: "Ghost",
3556
3880
  enabled: true,
3557
3881
  priority: 3,
3558
- background: { type: "transparent" },
3559
- textColorToken: "text",
3882
+ background: {
3883
+ type: "surface",
3884
+ role: "link"
3885
+ },
3560
3886
  borderRadius: "rounded-full",
3561
3887
  effects: { hover: [{
3562
3888
  effectId: "background-on-hover",
@@ -3566,6 +3892,53 @@ var init_soft_pill = __esmMin((() => {
3566
3892
  ]
3567
3893
  }
3568
3894
  });
3895
+ }));
3896
+ //#endregion
3897
+ //#region ../theme-core/src/buttons/personalities/two-tone-pill.ts
3898
+ var solidSecondary, twoTonePill;
3899
+ var init_two_tone_pill = __esmMin((() => {
3900
+ init_types$17();
3901
+ init_soft_pill();
3902
+ init_types$16();
3903
+ solidSecondary = {
3904
+ id: "secondary",
3905
+ name: "Secondary",
3906
+ enabled: true,
3907
+ priority: 2,
3908
+ background: {
3909
+ type: "solid",
3910
+ colorToken: unsafeAsOpaqueButtonColourToken("secondary")
3911
+ },
3912
+ borderRadius: "rounded-full",
3913
+ shadow: {
3914
+ elevation: "none",
3915
+ softness: null,
3916
+ position: "bottom"
3917
+ },
3918
+ effects: {
3919
+ hover: [{
3920
+ effectId: "background-on-hover-alpha",
3921
+ options: {
3922
+ colorToken: "secondary",
3923
+ opacity: 88
3924
+ }
3925
+ }],
3926
+ active: [{
3927
+ effectId: "scale-down",
3928
+ options: { scale: "0.98" }
3929
+ }]
3930
+ }
3931
+ };
3932
+ twoTonePill = defineButtonPersonality({
3933
+ id: "two-tone-pill",
3934
+ name: "Two-tone Pill",
3935
+ description: "Rounded pills with distinct solid primary and secondary brand colours.",
3936
+ tags: softPill.tags,
3937
+ buttonSystem: {
3938
+ ...softPill.buttonSystem,
3939
+ variants: softPill.buttonSystem.variants.map((variant) => variant.id === "secondary" ? solidSecondary : variant)
3940
+ }
3941
+ });
3569
3942
  })), buttonPersonalities;
3570
3943
  var init_personalities = __esmMin((() => {
3571
3944
  init_brushed_wash();
@@ -3580,9 +3953,11 @@ var init_personalities = __esmMin((() => {
3580
3953
  init_quiet_arrow();
3581
3954
  init_showtime_pill();
3582
3955
  init_soft_pill();
3956
+ init_two_tone_pill();
3583
3957
  init_types$16();
3584
3958
  buttonPersonalities = [
3585
3959
  softPill,
3960
+ twoTonePill,
3586
3961
  earthPill,
3587
3962
  confidentChip,
3588
3963
  editorialLink,
@@ -3597,20 +3972,49 @@ var init_personalities = __esmMin((() => {
3597
3972
  ];
3598
3973
  new Map(buttonPersonalities.map((p) => [p.id, p]));
3599
3974
  }));
3975
+ function presetCategory(personality) {
3976
+ switch (personality.tags.era) {
3977
+ case "retro": return "retro";
3978
+ case "editorial": return "minimal";
3979
+ case "organic": return "artistic";
3980
+ case "modern": return personality.tags.tone === "bold" ? "modern" : "technical";
3981
+ case "technical": return "technical";
3982
+ case void 0: return "modern";
3983
+ }
3984
+ }
3985
+ var init_presets$2 = __esmMin((() => {
3986
+ init_personalities();
3987
+ buttonPersonalities.map((personality) => ({
3988
+ id: personality.id,
3989
+ name: personality.name,
3990
+ description: personality.description,
3991
+ category: presetCategory(personality),
3992
+ buttonSystem: personality.buttonSystem,
3993
+ compatibility: {
3994
+ ...personality.tags.tone ? { tones: [personality.tags.tone] } : {},
3995
+ ...personality.tags.energy ? { energies: [personality.tags.energy] } : {}
3996
+ }
3997
+ }));
3998
+ }));
3600
3999
  //#endregion
3601
4000
  //#region ../theme-core/src/buttons/effects/types.ts
3602
4001
  var init_types$15 = __esmMin((() => {}));
3603
- var init_core$2 = __esmMin((() => {}));
4002
+ var init_core$2 = __esmMin((() => {
4003
+ init_resolveButtonColourStates();
4004
+ init_resolvedButtonCss();
4005
+ init_types$17();
4006
+ }));
3604
4007
  //#endregion
3605
4008
  //#region ../theme-core/src/buttons/index.ts
3606
4009
  var init_buttons = __esmMin((() => {
3607
4010
  init_types$17();
3608
4011
  init_classNames();
3609
4012
  init_generateButtonCss();
4013
+ init_resolveButtonColourStates();
3610
4014
  init_affordanceIcons();
3611
4015
  init_generateDefaultButtonSystem();
3612
4016
  init_constants$2();
3613
- init_presets$1();
4017
+ init_presets$2();
3614
4018
  init_personalities();
3615
4019
  init_types$15();
3616
4020
  init_registry$1();
@@ -3624,18 +4028,43 @@ init_buttons();
3624
4028
  //#region ../path-utils/src/index.ts
3625
4029
  const PATH_SEPARATOR_REGEX = /\./g;
3626
4030
  const BRACKET_ACCESS_REGEX = /\[([^\]]+)\]/g;
3627
- function isRecord$19(value) {
4031
+ /**
4032
+ * Segments that would traverse or mutate the prototype chain.
4033
+ *
4034
+ * `setAtPath` creates nested objects along the path, so allowing these
4035
+ * segments is a prototype-pollution vector. They are rejected everywhere a
4036
+ * path is parsed (string or pre-parsed array form) — fail closed.
4037
+ */
4038
+ const UNSAFE_PATH_SEGMENTS = /* @__PURE__ */ new Set([
4039
+ "__proto__",
4040
+ "constructor",
4041
+ "prototype"
4042
+ ]);
4043
+ var UnsafePathSegmentError = class extends Error {
4044
+ constructor(segment) {
4045
+ super(`Unsafe path segment: "${segment}"`);
4046
+ this.name = "UnsafePathSegmentError";
4047
+ this.segment = segment;
4048
+ }
4049
+ };
4050
+ function assertSafePathSegments(segments) {
4051
+ for (const segment of segments) if (typeof segment === "string" && UNSAFE_PATH_SEGMENTS.has(segment)) throw new UnsafePathSegmentError(segment);
4052
+ }
4053
+ function isRecord$21(value) {
3628
4054
  return typeof value === "object" && value !== null && !Array.isArray(value);
3629
4055
  }
3630
4056
  function isPathContainer(value) {
3631
- return Array.isArray(value) || isRecord$19(value);
4057
+ return Array.isArray(value) || isRecord$21(value);
3632
4058
  }
3633
4059
  function getContainerValue(container, segment) {
3634
4060
  if (typeof segment === "number") return Array.isArray(container) ? container[segment] : void 0;
3635
4061
  if (segment in container) return Reflect.get(container, segment);
3636
4062
  }
3637
4063
  function parsePath(path) {
3638
- if (Array.isArray(path)) return path;
4064
+ if (Array.isArray(path)) {
4065
+ assertSafePathSegments(path);
4066
+ return path;
4067
+ }
3639
4068
  const segments = [];
3640
4069
  const parts = path.split(PATH_SEPARATOR_REGEX);
3641
4070
  for (const raw of parts) {
@@ -3655,6 +4084,7 @@ function parsePath(path) {
3655
4084
  }
3656
4085
  if (baseMatch === null && !raw.includes("[")) segments.push(raw);
3657
4086
  }
4087
+ assertSafePathSegments(segments);
3658
4088
  return segments;
3659
4089
  }
3660
4090
  function getAtPath(source, path) {
@@ -3930,7 +4360,7 @@ var init_event_pricing = __esmMin((() => {
3930
4360
  //#endregion
3931
4361
  //#region ../core/src/event-page-surface-subject.ts
3932
4362
  function parseEventPageSurfaceSubject(value) {
3933
- if (!isRecord$18(value)) return err$2({ kind: "notObject" });
4363
+ if (!isRecord$20(value)) return err$2({ kind: "notObject" });
3934
4364
  switch (value.kind) {
3935
4365
  case "eventSeries": {
3936
4366
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -3973,7 +4403,7 @@ function parseEventPageSurfaceSubject(value) {
3973
4403
  });
3974
4404
  }
3975
4405
  }
3976
- function isRecord$18(value) {
4406
+ function isRecord$20(value) {
3977
4407
  return typeof value === "object" && value !== null && !Array.isArray(value);
3978
4408
  }
3979
4409
  var init_event_page_surface_subject = __esmMin((() => {
@@ -4069,18 +4499,25 @@ var init_booking_instalments = __esmMin((() => {}));
4069
4499
  //#endregion
4070
4500
  //#region ../core/src/booking-date-time.ts
4071
4501
  function isValidTimeZone$1(timeZone) {
4502
+ const cached = timeZoneValidityCache.get(timeZone);
4503
+ if (cached !== void 0) return cached;
4504
+ let isValid;
4072
4505
  try {
4073
4506
  new Intl.DateTimeFormat(DEFAULT_LOCALE, { timeZone }).format(/* @__PURE__ */ new Date());
4074
- return true;
4507
+ isValid = true;
4075
4508
  } catch {
4076
- return false;
4509
+ isValid = false;
4077
4510
  }
4511
+ if (timeZoneValidityCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) timeZoneValidityCache.clear();
4512
+ timeZoneValidityCache.set(timeZone, isValid);
4513
+ return isValid;
4078
4514
  }
4079
4515
  function getSafeTimeZone(timeZone) {
4080
4516
  const normalized = typeof timeZone === "string" ? timeZone.trim() : "";
4081
4517
  return normalized.length > 0 && isValidTimeZone$1(normalized) ? normalized : FALLBACK_TIMEZONE;
4082
4518
  }
4083
4519
  function parseStrictBookingTimeZone(timeZone) {
4520
+ if (typeof timeZone !== "string") return null;
4084
4521
  const normalized = timeZone.trim();
4085
4522
  if (normalized.length === 0 || !isValidTimeZone$1(normalized)) return null;
4086
4523
  return normalized;
@@ -4093,10 +4530,19 @@ function formatParseError(error) {
4093
4530
  }
4094
4531
  }
4095
4532
  function formatToPartsLookup(date, locale, timeZone, format) {
4096
- return new Map(new Intl.DateTimeFormat(locale, {
4533
+ return new Map(getCachedDateTimeFormatter(locale, timeZone, format).formatToParts(date).map((part) => [part.type, part.value]));
4534
+ }
4535
+ function getCachedDateTimeFormatter(locale, timeZone, format) {
4536
+ const key = `${locale}\u0000${timeZone}\u0000${JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)))}`;
4537
+ const cached = dateTimeFormatterCache.get(key);
4538
+ if (cached !== void 0) return cached;
4539
+ const formatter = new Intl.DateTimeFormat(locale, {
4097
4540
  ...format,
4098
4541
  timeZone
4099
- }).formatToParts(date).map((part) => [part.type, part.value]));
4542
+ });
4543
+ if (dateTimeFormatterCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) dateTimeFormatterCache.clear();
4544
+ dateTimeFormatterCache.set(key, formatter);
4545
+ return formatter;
4100
4546
  }
4101
4547
  function getZonedDateTimeParts(date, timeZone) {
4102
4548
  const parts = formatToPartsLookup(date, "en-GB", timeZone, {
@@ -4149,23 +4595,9 @@ function toUtcIsoDateTimeString(value) {
4149
4595
  return parsed.value;
4150
4596
  }
4151
4597
  function parseScheduledBookingDateTime(input) {
4598
+ let startsAt;
4152
4599
  try {
4153
- const startsAt = toUtcIsoDateTimeString(input.startsAt);
4154
- const timeZone = parseStrictBookingTimeZone(input.timeZone);
4155
- if (timeZone === null) return {
4156
- ok: false,
4157
- field: "timeZone",
4158
- reason: "invalid_time_zone",
4159
- value: input.timeZone
4160
- };
4161
- return {
4162
- ok: true,
4163
- value: {
4164
- startsAt,
4165
- timeZone,
4166
- locale: input.locale
4167
- }
4168
- };
4600
+ startsAt = toUtcIsoDateTimeString(input.startsAt);
4169
4601
  } catch {
4170
4602
  return {
4171
4603
  ok: false,
@@ -4174,6 +4606,21 @@ function parseScheduledBookingDateTime(input) {
4174
4606
  value: input.startsAt
4175
4607
  };
4176
4608
  }
4609
+ const timeZone = parseStrictBookingTimeZone(input.timeZone);
4610
+ if (timeZone === null) return {
4611
+ ok: false,
4612
+ field: "timeZone",
4613
+ reason: "invalid_time_zone",
4614
+ value: typeof input.timeZone === "string" ? input.timeZone : ""
4615
+ };
4616
+ return {
4617
+ ok: true,
4618
+ value: {
4619
+ startsAt,
4620
+ timeZone,
4621
+ locale: input.locale
4622
+ }
4623
+ };
4177
4624
  }
4178
4625
  function parseScheduledBookingDateRange(input) {
4179
4626
  const start = parseScheduledBookingDateTime(input);
@@ -4212,10 +4659,7 @@ function toScheduledBookingDateRange(input) {
4212
4659
  function formatBookingInstant(isoString, options) {
4213
4660
  const date = new Date(isoString);
4214
4661
  if (Number.isNaN(date.getTime())) return isoString;
4215
- return new Intl.DateTimeFormat(options.locale ?? DEFAULT_LOCALE, {
4216
- ...options.format,
4217
- timeZone: getSafeTimeZone(options.timeZone)
4218
- }).format(date);
4662
+ return getCachedDateTimeFormatter(options.locale ?? DEFAULT_LOCALE, getSafeTimeZone(options.timeZone), options.format).format(date);
4219
4663
  }
4220
4664
  function formatBookingDate(input, format = {
4221
4665
  weekday: "long",
@@ -4303,7 +4747,7 @@ function addLocalScheduleDays(date, days) {
4303
4747
  day: utcDate.getUTCDate()
4304
4748
  };
4305
4749
  }
4306
- var DEFAULT_LOCALE, FALLBACK_TIMEZONE, DEFAULT_BOOKING_DATE_TIME_FORMAT, LOCAL_DATE_PATTERN;
4750
+ var DEFAULT_LOCALE, FALLBACK_TIMEZONE, DEFAULT_BOOKING_DATE_TIME_FORMAT, LOCAL_DATE_PATTERN, DATE_TIME_FORMATTER_CACHE_LIMIT, dateTimeFormatterCache, timeZoneValidityCache;
4307
4751
  var init_booking_date_time = __esmMin((() => {
4308
4752
  init_result();
4309
4753
  DEFAULT_LOCALE = "en-US";
@@ -4316,6 +4760,9 @@ var init_booking_date_time = __esmMin((() => {
4316
4760
  minute: "2-digit"
4317
4761
  };
4318
4762
  LOCAL_DATE_PATTERN = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
4763
+ DATE_TIME_FORMATTER_CACHE_LIMIT = 100;
4764
+ dateTimeFormatterCache = /* @__PURE__ */ new Map();
4765
+ timeZoneValidityCache = /* @__PURE__ */ new Map();
4319
4766
  })), init_dated_offering_settlement = __esmMin((() => {
4320
4767
  init_result();
4321
4768
  }));
@@ -4367,6 +4814,26 @@ var init_participant_identity = __esmMin((() => {
4367
4814
  init_assertNever();
4368
4815
  }));
4369
4816
  var init_public_url_validation = __esmMin((() => {}));
4817
+ var init_public_profile = __esmMin((() => {
4818
+ init_public_url_validation();
4819
+ init_result();
4820
+ }));
4821
+ var sectionKinds;
4822
+ var init_footer_composition = __esmMin((() => {
4823
+ init_result();
4824
+ sectionKinds = [
4825
+ "brand",
4826
+ "supporting-text",
4827
+ "social-links",
4828
+ "navigation",
4829
+ "business-address",
4830
+ "contact",
4831
+ "opening-hours",
4832
+ "legal-navigation",
4833
+ "legal"
4834
+ ];
4835
+ new Map(sectionKinds.map((kind, index) => [kind, index]));
4836
+ }));
4370
4837
  var init_number_input = __esmMin((() => {}));
4371
4838
  var init_field_errors = __esmMin((() => {})), init_form_submission_preview = __esmMin((() => {
4372
4839
  init_string();
@@ -4401,7 +4868,7 @@ function sortStableJsonValue(value) {
4401
4868
  if (typeof value === "object") {
4402
4869
  const prototype = Object.getPrototypeOf(value);
4403
4870
  if (prototype !== Object.prototype && prototype !== null) throw new TypeError("Stable JSON only supports plain objects");
4404
- return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, child]) => [key, sortStableJsonValue(child)]));
4871
+ return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([key, child]) => [key, sortStableJsonValue(child)]));
4405
4872
  }
4406
4873
  throw new TypeError(`Stable JSON does not support ${typeof value}`);
4407
4874
  }
@@ -4464,6 +4931,8 @@ var init_src$3 = __esmMin((() => {
4464
4931
  init_participants();
4465
4932
  init_participant_identity();
4466
4933
  init_public_url_validation();
4934
+ init_public_profile();
4935
+ init_footer_composition();
4467
4936
  init_number_input();
4468
4937
  init_field_errors();
4469
4938
  init_form_submission_preview();
@@ -4589,7 +5058,8 @@ function validateRelativeStoragePath(value) {
4589
5058
  if (value.startsWith("sites/")) return fail({ tag: "SITE_SCOPED_PATH" });
4590
5059
  if (value.startsWith("/")) return fail({ tag: "LEADING_SLASH" });
4591
5060
  if (value.includes("//")) return fail({ tag: "DOUBLE_SLASH" });
4592
- if (value.split("/").some((segment) => segment === "..")) return fail({ tag: "TRAVERSAL" });
5061
+ if (value.includes("%")) return fail({ tag: "PERCENT_ENCODING" });
5062
+ if (value.split("/").some((segment) => segment === "." || segment === "..")) return fail({ tag: "TRAVERSAL" });
4593
5063
  return ok$1(value);
4594
5064
  }
4595
5065
  function brandRelativeStoragePath(value) {
@@ -7376,12 +7846,65 @@ function getSemanticIconComponent(name) {
7376
7846
  return SEMANTIC_ICON_COMPONENTS[name] ?? null;
7377
7847
  }
7378
7848
  var ICON_PICKER_PRESETS;
7379
- var init_presets = __esmMin((() => {
7849
+ var init_presets$1 = __esmMin((() => {
7380
7850
  ICON_PICKER_PRESETS = ["cta", "feature"];
7381
7851
  }));
7382
7852
  //#endregion
7853
+ //#region ../blocks/src/system/icons/social.tsx
7854
+ init_presets$1();
7855
+ init_svg();
7856
+ const SOCIAL_ICON_NAMES = [
7857
+ "SocialFacebook",
7858
+ "SocialInstagram",
7859
+ "SocialLinkedIn",
7860
+ "SocialTikTok",
7861
+ "SocialX",
7862
+ "SocialYouTube"
7863
+ ];
7864
+ const socialIcons = {
7865
+ SocialFacebook: createIcon("SocialFacebookIcon", /* @__PURE__ */ jsx("path", { d: "M14 8h3V4h-3c-3 0-5 2-5 5v3H6v4h3v6h4v-6h3l1-4h-4V9c0-.7.3-1 1-1Z" })),
7866
+ SocialInstagram: createIcon("SocialInstagramIcon", /* @__PURE__ */ jsxs(Fragment, { children: [
7867
+ /* @__PURE__ */ jsx("rect", {
7868
+ x: "3",
7869
+ y: "3",
7870
+ width: "18",
7871
+ height: "18",
7872
+ rx: "5"
7873
+ }),
7874
+ /* @__PURE__ */ jsx("circle", {
7875
+ cx: "12",
7876
+ cy: "12",
7877
+ r: "4"
7878
+ }),
7879
+ /* @__PURE__ */ jsx("circle", {
7880
+ cx: "17.5",
7881
+ cy: "6.5",
7882
+ r: ".75",
7883
+ fill: "currentColor",
7884
+ stroke: "none"
7885
+ })
7886
+ ] })),
7887
+ SocialLinkedIn: createIcon("SocialLinkedInIcon", /* @__PURE__ */ jsxs(Fragment, { children: [
7888
+ /* @__PURE__ */ jsx("path", { d: "M6 9v10" }),
7889
+ /* @__PURE__ */ jsx("path", {
7890
+ d: "M6 5.5v.01",
7891
+ strokeWidth: "3"
7892
+ }),
7893
+ /* @__PURE__ */ jsx("path", { d: "M10.5 19v-6a4 4 0 0 1 8 0v6" }),
7894
+ /* @__PURE__ */ jsx("path", { d: "M10.5 9v10" })
7895
+ ] })),
7896
+ SocialTikTok: createIcon("SocialTikTokIcon", /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: "M14 4v11.5a4.5 4.5 0 1 1-4-4.47" }), /* @__PURE__ */ jsx("path", { d: "M14 4c.7 3 2.4 4.5 5 4.5" })] })),
7897
+ SocialX: createIcon("SocialXIcon", /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: "m5 4 14 16" }), /* @__PURE__ */ jsx("path", { d: "M19 4 5 20" })] })),
7898
+ SocialYouTube: createIcon("SocialYouTubeIcon", /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: "M21 12c0 3.5-.5 5.5-1.3 6.3S16.5 19.5 12 19.5s-6.9-.4-7.7-1.2S3 15.5 3 12s.5-5.5 1.3-6.3S7.5 4.5 12 4.5s6.9.4 7.7 1.2S21 8.5 21 12Z" }), /* @__PURE__ */ jsx("path", { d: "m10 9 5 3-5 3Z" })] }))
7899
+ };
7900
+ function isSocialIconName(value) {
7901
+ return typeof value === "string" && SOCIAL_ICON_NAMES.includes(value);
7902
+ }
7903
+ function getSocialIconComponent(value) {
7904
+ return isSocialIconName(value) ? socialIcons[value] : null;
7905
+ }
7906
+ //#endregion
7383
7907
  //#region ../blocks/src/system/icons/registry.ts
7384
- init_presets();
7385
7908
  function buildSearchText(parts) {
7386
7909
  return parts.map((part) => part.trim()).filter(Boolean).join(" ");
7387
7910
  }
@@ -7410,7 +7933,7 @@ function semanticOptionsForPreset(preset) {
7410
7933
  }
7411
7934
  semanticOptionsForPreset("feature");
7412
7935
  function getIconComponent(name) {
7413
- return getCtaIconComponent(name) ?? getSemanticIconComponent(name);
7936
+ return getCtaIconComponent(name) ?? getSemanticIconComponent(name) ?? getSocialIconComponent(name);
7414
7937
  }
7415
7938
  //#endregion
7416
7939
  //#region ../blocks/src/system/runtime/nodes/buttonAffordance.ts
@@ -8092,7 +8615,7 @@ function shouldReserveFeatureCardIconZone(cards) {
8092
8615
  }
8093
8616
  //#endregion
8094
8617
  //#region ../blocks/src/system/icons/index.ts
8095
- init_presets();
8618
+ init_presets$1();
8096
8619
  init_svg();
8097
8620
  //#endregion
8098
8621
  //#region ../blocks/src/system/runtime/nodes/feature-card-icon.tsx
@@ -9155,7 +9678,6 @@ const HeaderSectionNode$1 = ({ blockId, children, className, "data-preview-site-
9155
9678
  const asProp = rest.as;
9156
9679
  const styleProp = rest.style;
9157
9680
  const backgroundProp = typeof rest.background === "string" ? rest.background : void 0;
9158
- const allowOverflowProp = typeof rest.allowOverflow === "boolean" ? rest.allowOverflow : void 0;
9159
9681
  const dataSlotProp = typeof rest["data-slot"] === "string" ? rest["data-slot"] : void 0;
9160
9682
  return /* @__PURE__ */ jsxs("nav", {
9161
9683
  ...getIslandRootProps("headerSection", blockId),
@@ -9170,7 +9692,6 @@ const HeaderSectionNode$1 = ({ blockId, children, className, "data-preview-site-
9170
9692
  as: asProp,
9171
9693
  style: styleProp,
9172
9694
  background: backgroundProp ?? "background",
9173
- allowOverflow: allowOverflowProp,
9174
9695
  "data-slot": dataSlotProp,
9175
9696
  className: sectionClasses || void 0,
9176
9697
  children
@@ -11769,7 +12290,7 @@ function resolveEventCta(event, buttonText) {
11769
12290
  };
11770
12291
  }
11771
12292
  var COLUMN_CLASSES;
11772
- var init_utils$5 = __esmMin((() => {
12293
+ var init_utils$6 = __esmMin((() => {
11773
12294
  init_src$3();
11774
12295
  init_src$1();
11775
12296
  init_eventCapacity();
@@ -11805,7 +12326,7 @@ function DateTimeTile({ startsAt, endsAt, timeZone }) {
11805
12326
  });
11806
12327
  }
11807
12328
  var init_DateTimeTile = __esmMin((() => {
11808
- init_utils$5();
12329
+ init_utils$6();
11809
12330
  }));
11810
12331
  //#endregion
11811
12332
  //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
@@ -12016,7 +12537,7 @@ var init_view$2 = __esmMin((() => {
12016
12537
  init_src$3();
12017
12538
  init_shared$5();
12018
12539
  init_pricing();
12019
- init_utils$5();
12540
+ init_utils$6();
12020
12541
  init_DateTimeTile();
12021
12542
  init_CoursePricingDisplay();
12022
12543
  }));
@@ -12749,95 +13270,6 @@ function CourseDetailsSSR({ courses, contentEntry, entrySubrouteContext, subject
12749
13270
  });
12750
13271
  }
12751
13272
  //#endregion
12752
- //#region ../theme-core/src/palette/utils/colorConversion.ts
12753
- function hexToRgb$1(hex) {
12754
- const h = hex.replace(/^#/, "");
12755
- const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
12756
- if (m.length !== 6) throw new Error("Bad hex");
12757
- const int = parseInt(m, 16);
12758
- return {
12759
- r: int >> 16 & 255,
12760
- g: int >> 8 & 255,
12761
- b: int & 255
12762
- };
12763
- }
12764
- function srgbToLinear(u) {
12765
- const x = u / 255;
12766
- return x <= .04045 ? x / 12.92 : Math.pow((x + .055) / 1.055, 2.4);
12767
- }
12768
- function linearToSrgb(x) {
12769
- const y = x <= .0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - .055;
12770
- return clamp01$2(y) * 255;
12771
- }
12772
- var clamp01$2, mod, deg;
12773
- var init_colorConversion = __esmMin((() => {
12774
- clamp01$2 = (x) => Math.max(0, Math.min(1, x));
12775
- mod = (a, n) => (a % n + n) % n;
12776
- deg = (x) => mod(x, 360);
12777
- }));
12778
- //#endregion
12779
- //#region ../theme-core/src/palette/utils/contrast.ts
12780
- function relativeLuminance(r, g, b) {
12781
- const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
12782
- return .2126 * R + .7152 * G + .0722 * B;
12783
- }
12784
- function contrastRatio(hex1, hex2) {
12785
- const { r: r1, g: g1, b: b1 } = hexToRgb$1(hex1);
12786
- const { r: r2, g: g2, b: b2 } = hexToRgb$1(hex2);
12787
- const L1 = relativeLuminance(r1, g1, b1);
12788
- const L2 = relativeLuminance(r2, g2, b2);
12789
- const [hi, lo] = L1 >= L2 ? [L1, L2] : [L2, L1];
12790
- return (hi + .05) / (lo + .05);
12791
- }
12792
- var init_contrast$1 = __esmMin((() => {
12793
- init_colorConversion();
12794
- }));
12795
- //#endregion
12796
- //#region ../theme-core/src/palette/utils/textColor.ts
12797
- /**
12798
- * Pick the better of black/white text for a given background using actual
12799
- * contrast ratios, not a simple luminance cutoff.
12800
- *
12801
- * @param background - Background color in hex or rgb/rgba format (e.g., '#FFFFFF' or 'rgb(255, 255, 255)')
12802
- * @param minContrast - Preferred minimum contrast ratio for body-sized text
12803
- * @returns '#000000' for light backgrounds, '#FFFFFF' for dark backgrounds
12804
- */
12805
- function pickBlackOrWhiteTextColor(background, minContrast = 4.5) {
12806
- const { r, g, b } = parseColorToRgb(background);
12807
- const luminance = relativeLuminance(r, g, b);
12808
- const blackContrast = (luminance + .05) / .05;
12809
- const whiteContrast = 1.05 / (luminance + .05);
12810
- if (blackContrast >= minContrast && whiteContrast < minContrast) return "#000000";
12811
- if (whiteContrast >= minContrast && blackContrast < minContrast) return "#FFFFFF";
12812
- return blackContrast >= whiteContrast ? "#000000" : "#FFFFFF";
12813
- }
12814
- /**
12815
- * Backwards-compatible alias for callers that want the best black/white text
12816
- * color for a background.
12817
- */
12818
- function getTextColorForBackground(background) {
12819
- return pickBlackOrWhiteTextColor(background);
12820
- }
12821
- function parseColorToRgb(input) {
12822
- const trimmed = input.trim();
12823
- if (trimmed.startsWith("#")) return hexToRgb$1(trimmed);
12824
- const rgbMatch = trimmed.match(/^rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})(?:\s*,\s*(?:0|1|0?\.\d+))?\s*\)$/i);
12825
- if (rgbMatch?.[1] && rgbMatch[2] && rgbMatch[3]) return {
12826
- r: clamp255(Number(rgbMatch[1])),
12827
- g: clamp255(Number(rgbMatch[2])),
12828
- b: clamp255(Number(rgbMatch[3]))
12829
- };
12830
- throw new Error("Unsupported color format");
12831
- }
12832
- function clamp255(value) {
12833
- if (Number.isNaN(value)) return 0;
12834
- return Math.max(0, Math.min(255, value));
12835
- }
12836
- var init_textColor = __esmMin((() => {
12837
- init_colorConversion();
12838
- init_contrast$1();
12839
- }));
12840
- //#endregion
12841
13273
  //#region ../theme-core/src/utils/tokenOrColor.ts
12842
13274
  function isCssColorLiteral(value) {
12843
13275
  const trimmed = value.trim();
@@ -13181,7 +13613,7 @@ var init_EventCard = __esmMin((() => {
13181
13613
  init_media$2();
13182
13614
  init_EventCardIcons();
13183
13615
  init_eventCapacity();
13184
- init_utils$5();
13616
+ init_utils$6();
13185
13617
  init_buttons();
13186
13618
  EventCard = ({ event, cardVariant = "default", buttonVariant = "primary", buttonText, showVenue = true, showMap = true, mapSlot, allowMap = true, showCapacity = true, showImage = true, showCategory = true, showSummary = true, orientation = "vertical" }) => {
13187
13619
  const timeZone = event.timeZone ?? null;
@@ -13296,7 +13728,7 @@ var EventCompactRow;
13296
13728
  var init_EventCompactRow = __esmMin((() => {
13297
13729
  init_buttons();
13298
13730
  init_svg();
13299
- init_utils$5();
13731
+ init_utils$6();
13300
13732
  init_EventCardIcons();
13301
13733
  EventCompactRow = ({ event, buttonVariant = "primary", buttonText }) => {
13302
13734
  const timeZone = event.timeZone ?? null;
@@ -13402,7 +13834,7 @@ var init_EmptyState = __esmMin((() => {
13402
13834
  //#endregion
13403
13835
  //#region ../blocks/src/system/runtime/nodes/events/shared/index.ts
13404
13836
  var init_shared$4 = __esmMin((() => {
13405
- init_utils$5();
13837
+ init_utils$6();
13406
13838
  init_EventCard();
13407
13839
  init_EventCompactRow();
13408
13840
  init_EmptyState();
@@ -15334,7 +15766,7 @@ init_src$3();
15334
15766
  init_buttons();
15335
15767
  init_cards();
15336
15768
  init_shared$4();
15337
- init_utils$5();
15769
+ init_utils$6();
15338
15770
  init_shared$5();
15339
15771
  init_svg();
15340
15772
  function OfferingsPreviewNode(props) {
@@ -15746,7 +16178,7 @@ function resolveGroupFrame(cardStyles) {
15746
16178
  contentClassName: "offerings-preview-card-content rb-flex rb-h-full rb-min-h-full rb-flex-col rb-gap-5"
15747
16179
  };
15748
16180
  return {
15749
- containerClassName: ["offerings-preview-card offerings-preview-card--framed rb-relative rb-isolate rb-h-full rb-min-h-full rb-overflow-hidden rb-bg-surface rb-border rb-border-border", resolveGroupFrameClasses(cardStyles)].filter(Boolean).join(" "),
16181
+ containerClassName: ["offerings-preview-card offerings-preview-card--framed rb-relative rb-isolate rb-h-full rb-min-h-full rb-overflow-visible rb-bg-surface rb-border rb-border-border", resolveGroupFrameClasses(cardStyles)].filter(Boolean).join(" "),
15750
16182
  containerStyle: resolveGroupFrameStyle(cardStyles),
15751
16183
  contentClassName: "card-content offerings-preview-card-content rb-flex rb-h-full rb-min-h-full rb-flex-col rb-gap-5"
15752
16184
  };
@@ -16060,6 +16492,34 @@ function backgroundLayer(path, options = {}) {
16060
16492
  ];
16061
16493
  }
16062
16494
  /**
16495
+ * Wrap decorative background layers in their own clipping frame.
16496
+ *
16497
+ * Foreground content remains outside this frame, so editor outlines, focus
16498
+ * rings, and floating controls are never clipped by a visual background.
16499
+ * Backgrounds that explicitly opt into overflow keep that behavior within
16500
+ * the decorative layer rather than changing the content root.
16501
+ */
16502
+ function backgroundFrame(path, options = {}) {
16503
+ const { leadingNodes = [], ...layerOptions } = options;
16504
+ const framedLayerOptions = {
16505
+ ...layerOptions,
16506
+ styleClassName: layerOptions.styleClassName ?? "background-style rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none",
16507
+ imageClassName: layerOptions.imageClassName ?? "rb-absolute rb-z-0",
16508
+ overlayClassName: layerOptions.overlayClassName ?? "background-overlay rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none"
16509
+ };
16510
+ return el("div", {
16511
+ className: { $bind: {
16512
+ from: path,
16513
+ transforms: [{
16514
+ id: "background.resolveFrameClassName",
16515
+ options: { baseClass: BACKGROUND_FRAME_BASE_CLASS }
16516
+ }],
16517
+ fallback: `${BACKGROUND_FRAME_BASE_CLASS} rb-overflow-hidden`
16518
+ } },
16519
+ style: { borderRadius: "inherit" }
16520
+ }, [...leadingNodes, ...backgroundLayer(path, framedLayerOptions)]);
16521
+ }
16522
+ /**
16063
16523
  * Creates a media node for rendering background image/video media with conditional rendering.
16064
16524
  *
16065
16525
  * This helper creates a media element that:
@@ -16134,8 +16594,10 @@ function createBackgroundOverlayNode(path, className = "background-overlay rb-ab
16134
16594
  } }
16135
16595
  });
16136
16596
  }
16597
+ var BACKGROUND_FRAME_BASE_CLASS;
16137
16598
  var init_backgroundLayer = __esmMin((() => {
16138
16599
  init_builder$2();
16600
+ BACKGROUND_FRAME_BASE_CLASS = "rb-background-frame rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-isolate rb-pointer-events-none";
16139
16601
  }));
16140
16602
  //#endregion
16141
16603
  //#region ../blocks/src/system/node/fragments/styledSection.ts
@@ -16146,7 +16608,7 @@ var init_backgroundLayer = __esmMin((() => {
16146
16608
  * - Creating a section wrapper with background theme
16147
16609
  * - Adding background color/gradient/image layers
16148
16610
  * - Binding className to section styles with transform
16149
- * - Binding allowOverflow for background positioning
16611
+ * - Keeping foreground overflow visible while decorative backgrounds clip independently
16150
16612
  * - Wrapping content children
16151
16613
  *
16152
16614
  * Use this helper to eliminate 25+ lines of boilerplate section setup code.
@@ -16182,8 +16644,8 @@ var init_backgroundLayer = __esmMin((() => {
16182
16644
  * });
16183
16645
  */
16184
16646
  function styledSection(config) {
16185
- const { children, baseClass = "rb-px-6", spacing = DEFAULT_SECTION_SPACING, background = "background", bindFrom = "_sectionStyles", imageClassName = "rb-absolute rb-z-neg-10", renderBackgroundImage = true, backgroundImageLoading, backgroundImageFetchPriority, allowOverflow = false, fullWidthPath } = config;
16186
- const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
16647
+ const { children, baseClass = "rb-px-6", spacing = DEFAULT_SECTION_SPACING, background = "background", bindFrom = "_sectionStyles", imageClassName = "rb-absolute rb-z-0", renderBackgroundImage = true, backgroundImageLoading, backgroundImageFetchPriority, fullWidthPath } = config;
16648
+ const renderedBackgroundNode = backgroundFrame(`${bindFrom}.background`, {
16187
16649
  imageClassName,
16188
16650
  fallbackToken: background,
16189
16651
  omitImageLayer: !renderBackgroundImage,
@@ -16206,13 +16668,8 @@ function styledSection(config) {
16206
16668
  fullWidthPath
16207
16669
  }
16208
16670
  }]
16209
- } },
16210
- allowOverflow: allowOverflow ? true : { $bind: {
16211
- from: `${bindFrom}.background`,
16212
- transforms: [{ id: "background.resolveAllowOverflow" }],
16213
- fallback: false
16214
16671
  } }
16215
- }, [...renderedBackgroundNodes, ...childrenArray]);
16672
+ }, [renderedBackgroundNode, ...childrenArray]);
16216
16673
  }
16217
16674
  var init_styledSection = __esmMin((() => {
16218
16675
  init_builder$2();
@@ -16318,8 +16775,8 @@ var init_sectionContainer = __esmMin((() => {
16318
16775
  * - content
16319
16776
  */
16320
16777
  function styledContainer(config) {
16321
- const { children, rootType = "div", rootProps, bindFrom = "_containerStyles", baseClassName = "rb-relative rb-isolate rb-overflow-hidden", imageClassName = "rb-absolute rb-z-neg-10", constrainWidth = true } = config;
16322
- const backgroundNodes = backgroundLayer(`${bindFrom}.background`, { imageClassName });
16778
+ const { children, rootType = "div", rootProps, bindFrom = "_containerStyles", baseClassName = "rb-relative rb-isolate rb-overflow-visible", imageClassName = "rb-absolute rb-z-0", constrainWidth = true } = config;
16779
+ const backgroundNode = backgroundFrame(`${bindFrom}.background`, { imageClassName });
16323
16780
  const childrenArray = Array.isArray(children) ? children : [children];
16324
16781
  const { className: _ignoredClassName, style: _ignoredStyle, ...safeRootProps } = rootProps ?? {};
16325
16782
  return el(rootType, {
@@ -16342,7 +16799,7 @@ function styledContainer(config) {
16342
16799
  }],
16343
16800
  fallback: constrainWidth ? `${baseClassName} rb-container` : baseClassName
16344
16801
  } }
16345
- }, [...backgroundNodes, ...childrenArray]);
16802
+ }, [backgroundNode, ...childrenArray]);
16346
16803
  }
16347
16804
  var init_styledContainer = __esmMin((() => {
16348
16805
  init_builder$2();
@@ -16425,12 +16882,6 @@ var init_footerNav = __esmMin((() => {
16425
16882
  init_builder$2();
16426
16883
  }));
16427
16884
  var init_core = __esmMin((() => {}));
16428
- //#endregion
16429
- //#region ../theme-core/src/palette/utils/onColor.ts
16430
- function onColorTokenName(backgroundToken) {
16431
- return `on${backgroundToken.split("-").filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("")}`;
16432
- }
16433
- var init_onColor = __esmMin((() => {}));
16434
16885
  function expandForegroundCandidates(candidates, backgroundToken) {
16435
16886
  const seen = /* @__PURE__ */ new Set();
16436
16887
  const expanded = [];
@@ -17279,9 +17730,6 @@ var init_vibrant_creative = __esmMin((() => {}));
17279
17730
  var init_generateCssVars = __esmMin((() => {
17280
17731
  init_colorConversion();
17281
17732
  }));
17282
- var init_neutralScale = __esmMin((() => {
17283
- init_colorConversion();
17284
- }));
17285
17733
  var init_colorPlacement = __esmMin((() => {
17286
17734
  init_colorConversion();
17287
17735
  init_contrast$1();
@@ -17290,42 +17738,42 @@ var init_backgroundGeneration = __esmMin((() => {
17290
17738
  init_colorConversion();
17291
17739
  }));
17292
17740
  var init_analogous_harmony = __esmMin((() => {
17293
- init_utils$4();
17741
+ init_utils$5();
17294
17742
  init_colorConversion();
17295
17743
  }));
17296
17744
  var init_complementary_contrast = __esmMin((() => {
17297
- init_utils$4();
17745
+ init_utils$5();
17298
17746
  }));
17299
17747
  var init_earthy_natural = __esmMin((() => {
17300
17748
  init_colorConversion();
17301
17749
  }));
17302
17750
  var init_high_contrast_modern = __esmMin((() => {
17303
- init_utils$4();
17751
+ init_utils$5();
17304
17752
  }));
17305
17753
  var init_jewel_dark = __esmMin((() => {
17306
17754
  init_colorConversion();
17307
17755
  }));
17308
17756
  var init_minimal_monochrome = __esmMin((() => {
17309
- init_utils$4();
17757
+ init_utils$5();
17310
17758
  }));
17311
17759
  var init_neon_pop = __esmMin((() => {
17312
- init_utils$4();
17760
+ init_utils$5();
17313
17761
  }));
17314
17762
  var init_pastel_light = __esmMin((() => {
17315
- init_utils$4();
17763
+ init_utils$5();
17316
17764
  init_colorConversion();
17317
17765
  }));
17318
17766
  var init_soft_modern = __esmMin((() => {
17319
17767
  init_colorConversion();
17320
17768
  }));
17321
17769
  var init_split_complementary = __esmMin((() => {
17322
- init_utils$4();
17770
+ init_utils$5();
17323
17771
  }));
17324
17772
  var init_tetradic = __esmMin((() => {
17325
- init_utils$4();
17773
+ init_utils$5();
17326
17774
  }));
17327
17775
  var init_triadic_balance = __esmMin((() => {
17328
- init_utils$4();
17776
+ init_utils$5();
17329
17777
  })), init_allRecipes = __esmMin((() => {
17330
17778
  init_analogous_harmony();
17331
17779
  init_complementary_contrast();
@@ -17368,7 +17816,7 @@ var init_legibility = __esmMin((() => {
17368
17816
  }));
17369
17817
  //#endregion
17370
17818
  //#region ../theme-core/src/palette/utils/index.ts
17371
- var init_utils$4 = __esmMin((() => {
17819
+ var init_utils$5 = __esmMin((() => {
17372
17820
  init_colorConversion();
17373
17821
  init_contrast$1();
17374
17822
  init_colorPlacement();
@@ -17382,21 +17830,11 @@ var init_utils$4 = __esmMin((() => {
17382
17830
  var init_paletteAccess = __esmMin((() => {
17383
17831
  init_colorConversion();
17384
17832
  }));
17385
- var init_generateShades = __esmMin((() => {
17386
- init_colorConversion();
17387
- }));
17388
- var init_expandPalette = __esmMin((() => {
17389
- init_generateShades();
17390
- init_neutralScale();
17391
- init_colorConversion();
17392
- init_textColor();
17393
- init_onColor();
17394
- }));
17395
17833
  var init_swatch = __esmMin((() => {}));
17396
17834
  var init_PaletteCard = __esmMin((() => {
17397
17835
  init_generateCssVars();
17398
17836
  init_neutralScale();
17399
- init_utils$4();
17837
+ init_utils$5();
17400
17838
  init_paletteAccess();
17401
17839
  init_expandPalette();
17402
17840
  init_swatch();
@@ -17628,7 +18066,7 @@ function assignDeep(target, ...sources) {
17628
18066
  });
17629
18067
  return target;
17630
18068
  }
17631
- var init_utils$3 = __esmMin((() => {}));
18069
+ var init_utils$4 = __esmMin((() => {}));
17632
18070
  //#endregion
17633
18071
  //#region ../../node_modules/.pnpm/@vibrant+core@4.0.4/node_modules/@vibrant/core/dist/esm/options.js
17634
18072
  function buildProcessOptions(opts, override) {
@@ -17646,13 +18084,13 @@ function buildProcessOptions(opts, override) {
17646
18084
  }, override);
17647
18085
  }
17648
18086
  var init_options = __esmMin((() => {
17649
- init_utils$3();
18087
+ init_utils$4();
17650
18088
  }));
17651
18089
  //#endregion
17652
18090
  //#region ../../node_modules/.pnpm/@vibrant+core@4.0.4/node_modules/@vibrant/core/dist/esm/builder.js
17653
18091
  var Builder;
17654
18092
  var init_builder$1 = __esmMin((() => {
17655
- init_utils$3();
18093
+ init_utils$4();
17656
18094
  init_esm$2();
17657
18095
  Builder = class {
17658
18096
  /**
@@ -18014,7 +18452,7 @@ var init_esm$3 = __esmMin((() => {
18014
18452
  var init_client$1 = __esmMin((() => {
18015
18453
  init_esm$4();
18016
18454
  init_esm$3();
18017
- init_utils$3();
18455
+ init_utils$4();
18018
18456
  }));
18019
18457
  var init_host = __esmMin((() => {
18020
18458
  init_esm$4();
@@ -18025,7 +18463,7 @@ var _Vibrant, Vibrant;
18025
18463
  var init_esm$2 = __esmMin((() => {
18026
18464
  init_options();
18027
18465
  init_builder$1();
18028
- init_utils$3();
18466
+ init_utils$4();
18029
18467
  init_pipeline$1();
18030
18468
  init_client$1();
18031
18469
  init_host();
@@ -20072,12 +20510,8 @@ var init_sitePalettePersistence = __esmMin((() => {
20072
20510
  init_colors();
20073
20511
  init_selection();
20074
20512
  }));
20075
- var init_themePaletteCompatibility = __esmMin((() => {
20076
- init_themeColorTokens();
20077
- init_colors();
20078
- }));
20079
20513
  var init_fromVibrant = __esmMin((() => {
20080
- init_utils$4();
20514
+ init_utils$5();
20081
20515
  })), init_palette$1 = __esmMin((() => {
20082
20516
  init_all();
20083
20517
  init_classifyColor();
@@ -20086,7 +20520,7 @@ var init_fromVibrant = __esmMin((() => {
20086
20520
  init_generateShades();
20087
20521
  init_neutralScale();
20088
20522
  init_types$7();
20089
- init_utils$4();
20523
+ init_utils$5();
20090
20524
  init_paletteAccess();
20091
20525
  init_extractPalette();
20092
20526
  init_colors();
@@ -20096,7 +20530,6 @@ var init_fromVibrant = __esmMin((() => {
20096
20530
  init_resolveSelection();
20097
20531
  init_selection();
20098
20532
  init_sitePalettePersistence();
20099
- init_themePaletteCompatibility();
20100
20533
  init_fromVibrant();
20101
20534
  init_suggestRecipes();
20102
20535
  init_allRecipes();
@@ -20672,6 +21105,249 @@ var init_testimonialQuotePresets = __esmMin((() => {
20672
21105
  serifDisplayQuote = { style: "serif-display" };
20673
21106
  accentGlyphQuote = { style: "accent-glyph" };
20674
21107
  }));
21108
+ //#endregion
21109
+ //#region ../theme-core/src/gradients/types.ts
21110
+ /**
21111
+ * Gradient configuration types and schemas
21112
+ */
21113
+ var gradientStopSchema, radialGradientShapeSchema, gradientConfigSchema;
21114
+ var init_types$5 = __esmMin((() => {
21115
+ init_themeColorTokens();
21116
+ gradientStopSchema = z$1.object({
21117
+ color: themeColorTokenSchema,
21118
+ position: z$1.number().min(0).max(100)
21119
+ });
21120
+ radialGradientShapeSchema = z$1.enum(["circle", "ellipse"]);
21121
+ gradientConfigSchema = z$1.object({
21122
+ type: z$1.enum([
21123
+ "linear",
21124
+ "radial",
21125
+ "conic"
21126
+ ]).default("linear"),
21127
+ angle: z$1.number().min(0).max(360).optional(),
21128
+ shape: radialGradientShapeSchema.optional(),
21129
+ position: z$1.string().optional(),
21130
+ stops: z$1.array(gradientStopSchema).min(2)
21131
+ });
21132
+ }));
21133
+ //#endregion
21134
+ //#region ../theme-core/src/gradients/presets.ts
21135
+ function parseGradientPresetId(value) {
21136
+ if (typeof value !== "string") return null;
21137
+ const normalized = value.trim();
21138
+ if (!gradientPresetIdSet.has(normalized)) return null;
21139
+ return normalized;
21140
+ }
21141
+ var rawGradientPresets, GRADIENT_PRESETS, GRADIENT_PRESET_IDS, gradientPresetIdSet;
21142
+ var init_presets = __esmMin((() => {
21143
+ rawGradientPresets = [
21144
+ {
21145
+ id: "primary-secondary",
21146
+ name: "Primary to Secondary",
21147
+ description: "Blend your primary and secondary brand colors",
21148
+ type: "linear",
21149
+ angle: 135,
21150
+ stops: [{
21151
+ color: "primary-500",
21152
+ position: 0
21153
+ }, {
21154
+ color: "secondary-500",
21155
+ position: 100
21156
+ }]
21157
+ },
21158
+ {
21159
+ id: "primary-accent",
21160
+ name: "Primary to Accent",
21161
+ description: "Energetic gradient from primary to accent",
21162
+ type: "linear",
21163
+ angle: 135,
21164
+ stops: [{
21165
+ color: "primary-500",
21166
+ position: 0
21167
+ }, {
21168
+ color: "accent-500",
21169
+ position: 100
21170
+ }]
21171
+ },
21172
+ {
21173
+ id: "secondary-accent",
21174
+ name: "Secondary to Accent",
21175
+ description: "Vibrant secondary to accent blend",
21176
+ type: "linear",
21177
+ angle: 135,
21178
+ stops: [{
21179
+ color: "secondary-500",
21180
+ position: 0
21181
+ }, {
21182
+ color: "accent-500",
21183
+ position: 100
21184
+ }]
21185
+ },
21186
+ {
21187
+ id: "primary-light-dark",
21188
+ name: "Primary Light to Dark",
21189
+ description: "Subtle primary color fade",
21190
+ type: "linear",
21191
+ angle: 180,
21192
+ stops: [{
21193
+ color: "primary-500",
21194
+ position: 0
21195
+ }, {
21196
+ color: "primary-900",
21197
+ position: 100
21198
+ }]
21199
+ },
21200
+ {
21201
+ id: "primary-dark-light",
21202
+ name: "Primary Dark to Light",
21203
+ description: "Reverse primary fade",
21204
+ type: "linear",
21205
+ angle: 180,
21206
+ stops: [{
21207
+ color: "primary-900",
21208
+ position: 0
21209
+ }, {
21210
+ color: "primary-50",
21211
+ position: 100
21212
+ }]
21213
+ },
21214
+ {
21215
+ id: "secondary-light-dark",
21216
+ name: "Secondary Light to Dark",
21217
+ description: "Subtle secondary color fade",
21218
+ type: "linear",
21219
+ angle: 180,
21220
+ stops: [{
21221
+ color: "secondary-500",
21222
+ position: 0
21223
+ }, {
21224
+ color: "secondary-900",
21225
+ position: 100
21226
+ }]
21227
+ },
21228
+ {
21229
+ id: "accent-light-dark",
21230
+ name: "Accent Light to Dark",
21231
+ description: "Accent color depth fade",
21232
+ type: "linear",
21233
+ angle: 180,
21234
+ stops: [{
21235
+ color: "accent-500",
21236
+ position: 0
21237
+ }, {
21238
+ color: "accent-900",
21239
+ position: 100
21240
+ }]
21241
+ },
21242
+ {
21243
+ id: "background-surface",
21244
+ name: "Background to Surface",
21245
+ description: "Subtle depth using base colors",
21246
+ type: "linear",
21247
+ angle: 180,
21248
+ stops: [{
21249
+ color: "background",
21250
+ position: 0
21251
+ }, {
21252
+ color: "surface",
21253
+ position: 100
21254
+ }]
21255
+ },
21256
+ {
21257
+ id: "neutral-fade",
21258
+ name: "Neutral Gradient",
21259
+ description: "Elegant neutral color fade",
21260
+ type: "linear",
21261
+ angle: 180,
21262
+ stops: [{
21263
+ color: "neutral-900",
21264
+ position: 0
21265
+ }, {
21266
+ color: "neutral-50",
21267
+ position: 100
21268
+ }]
21269
+ },
21270
+ {
21271
+ id: "primary-glow",
21272
+ name: "Primary glow",
21273
+ description: "A soft top-centred glow using your primary palette",
21274
+ type: "radial",
21275
+ shape: "ellipse",
21276
+ position: "top center",
21277
+ stops: [{
21278
+ color: "primary-900",
21279
+ position: 0
21280
+ }, {
21281
+ color: "primary-950",
21282
+ position: 100
21283
+ }],
21284
+ foreground: {
21285
+ textColor: "onPrimary900",
21286
+ headingColor: "onPrimary900",
21287
+ linkColor: "onPrimary900",
21288
+ supportingColor: "onPrimary900"
21289
+ }
21290
+ },
21291
+ {
21292
+ id: "accent-glow",
21293
+ name: "Accent glow",
21294
+ description: "A soft top-centred glow using your accent palette",
21295
+ type: "radial",
21296
+ shape: "ellipse",
21297
+ position: "top center",
21298
+ stops: [{
21299
+ color: "accent-900",
21300
+ position: 0
21301
+ }, {
21302
+ color: "accent-950",
21303
+ position: 100
21304
+ }],
21305
+ foreground: {
21306
+ textColor: "onAccent900",
21307
+ headingColor: "onAccent900",
21308
+ linkColor: "onAccent900",
21309
+ supportingColor: "onAccent900"
21310
+ }
21311
+ },
21312
+ {
21313
+ id: "primary-secondary-accent",
21314
+ name: "Brand Trio",
21315
+ description: "All three brand colors in harmony",
21316
+ type: "linear",
21317
+ angle: 135,
21318
+ stops: [
21319
+ {
21320
+ color: "primary-500",
21321
+ position: 0
21322
+ },
21323
+ {
21324
+ color: "secondary-500",
21325
+ position: 50
21326
+ },
21327
+ {
21328
+ color: "accent-500",
21329
+ position: 100
21330
+ }
21331
+ ]
21332
+ }
21333
+ ];
21334
+ GRADIENT_PRESETS = rawGradientPresets.map((preset) => ({
21335
+ ...preset,
21336
+ id: preset.id,
21337
+ stops: preset.stops
21338
+ }));
21339
+ GRADIENT_PRESET_IDS = GRADIENT_PRESETS.map((preset) => preset.id);
21340
+ gradientPresetIdSet = new Set(GRADIENT_PRESET_IDS);
21341
+ Object.fromEntries(GRADIENT_PRESETS.map((preset) => [preset.id, preset]));
21342
+ }));
21343
+ var init_utils$3 = __esmMin((() => {}));
21344
+ //#endregion
21345
+ //#region ../theme-core/src/gradients/index.ts
21346
+ var init_gradients = __esmMin((() => {
21347
+ init_types$5();
21348
+ init_presets();
21349
+ init_utils$3();
21350
+ }));
20675
21351
  var init_customizableSurfaces = __esmMin((() => {
20676
21352
  init_types$12();
20677
21353
  })), logoTextConfidenceValues, logoAssetShapeValues, logoKindValues, logoDensityValues, logoContainsTextSchema, logoAnalysisSourceSchema, brandDisplayModeValues, logoAccommodationPatternValues, logoSizePolicyValues;
@@ -20782,7 +21458,7 @@ function asHeaderStyleId(value) {
20782
21458
  * optional nested styling fields that would otherwise leak from another Look.
20783
21459
  */
20784
21460
  function baseHeader(theme) {
20785
- const { navLinkStyle: _navLinkStyle, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
21461
+ const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
20786
21462
  return {
20787
21463
  ...header,
20788
21464
  navContainer: {
@@ -21404,6 +22080,17 @@ var init_headerLooks = __esmMin((() => {
21404
22080
  navTypography: "brand-caps",
21405
22081
  moods: ["expressive"]
21406
22082
  },
22083
+ {
22084
+ id: asHeaderStyleId("brand-capsule"),
22085
+ label: "Brand Capsule",
22086
+ description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
22087
+ supportedLayoutIds: supportedLayouts(["classic"]),
22088
+ navInteraction: "pill-background",
22089
+ surface: "brand-solid",
22090
+ defaultDepth: "shadow",
22091
+ navTypography: "quiet-caps",
22092
+ moods: ["expressive", "professional"]
22093
+ },
21407
22094
  {
21408
22095
  id: asHeaderStyleId("serif-line"),
21409
22096
  label: "Serif Line",
@@ -21497,6 +22184,7 @@ var init_headerLooks = __esmMin((() => {
21497
22184
  "brand-bar",
21498
22185
  "brand-underline",
21499
22186
  "brand-pill",
22187
+ "brand-capsule",
21500
22188
  "serif-line",
21501
22189
  "flat-tabs"
21502
22190
  ])],
@@ -21531,6 +22219,11 @@ var init_headerLooks = __esmMin((() => {
21531
22219
  "brand-pill",
21532
22220
  "brand-bar",
21533
22221
  "minimal"
22222
+ ]), headerStyleRepairChain([
22223
+ "brand-capsule",
22224
+ "brand-pill",
22225
+ "brand-bar",
22226
+ "minimal"
21534
22227
  ]), headerStyleRepairChain([
21535
22228
  "pill-nav",
21536
22229
  "soft-bar",
@@ -22723,7 +23416,7 @@ var init_media = __esmMin((() => {
22723
23416
  transform: transformSchema.optional()
22724
23417
  });
22725
23418
  })), inputSystemSchema;
22726
- var init_types$5 = __esmMin((() => {
23419
+ var init_types$4 = __esmMin((() => {
22727
23420
  init_themeColorTokens();
22728
23421
  inputSystemSchema = z$1.object({
22729
23422
  base: z$1.object({
@@ -22818,31 +23511,6 @@ var init_types$5 = __esmMin((() => {
22818
23511
  });
22819
23512
  }));
22820
23513
  //#endregion
22821
- //#region ../theme-core/src/gradients/types.ts
22822
- /**
22823
- * Gradient configuration types and schemas
22824
- */
22825
- var gradientStopSchema, radialGradientShapeSchema, gradientConfigSchema;
22826
- var init_types$4 = __esmMin((() => {
22827
- init_themeColorTokens();
22828
- gradientStopSchema = z$1.object({
22829
- color: themeColorTokenSchema,
22830
- position: z$1.number().min(0).max(100)
22831
- });
22832
- radialGradientShapeSchema = z$1.enum(["circle", "ellipse"]);
22833
- gradientConfigSchema = z$1.object({
22834
- type: z$1.enum([
22835
- "linear",
22836
- "radial",
22837
- "conic"
22838
- ]).default("linear"),
22839
- angle: z$1.number().min(0).max(360).optional(),
22840
- shape: radialGradientShapeSchema.optional(),
22841
- position: z$1.string().optional(),
22842
- stops: z$1.array(gradientStopSchema).min(2)
22843
- });
22844
- }));
22845
- //#endregion
22846
23514
  //#region ../theme-core/src/interactive/baseSchema.ts
22847
23515
  /**
22848
23516
  * Shared Base Schemas for Interactive Elements
@@ -23162,14 +23830,31 @@ var init_rawStyleFields = __esmMin((() => {
23162
23830
  [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
23163
23831
  pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
23164
23832
  siteChromeBackgroundOverrideOwner = "site-chrome-editor";
23165
- })), axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle$1, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
23833
+ }));
23834
+ //#endregion
23835
+ //#region ../theme-core/src/schema.ts
23836
+ /**
23837
+ * Normalises the legacy `navTypography` font-role alias into the canonical
23838
+ * `navFontRole` field so persisted themes migrate at the parse boundary without
23839
+ * a data migration. `navFontRole` always wins when both are present; the legacy
23840
+ * field is dropped so we never carry a dual write forward.
23841
+ */
23842
+ function normaliseHeaderNavFontRole(header) {
23843
+ if (header.navTypography === void 0) return header;
23844
+ const { navTypography, ...rest } = header;
23845
+ return header.navFontRole === void 0 ? {
23846
+ ...rest,
23847
+ navFontRole: navTypography
23848
+ } : rest;
23849
+ }
23850
+ var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle$1, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
23166
23851
  var init_schema$1 = __esmMin((() => {
23167
23852
  init_media();
23168
23853
  init_buttons();
23169
23854
  init_cards();
23170
23855
  init_types$13();
23171
- init_types$5();
23172
23856
  init_types$4();
23857
+ init_types$5();
23173
23858
  init_types$3();
23174
23859
  init_validation$2();
23175
23860
  init_atRuleValidation();
@@ -23595,6 +24280,7 @@ var init_schema$1 = __esmMin((() => {
23595
24280
  "bold"
23596
24281
  ]);
23597
24282
  headerMaxWidth = z$1.enum(["container", "full"]);
24283
+ headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
23598
24284
  headerContainerSchema = z$1.object({
23599
24285
  rounded: z$1.enum([
23600
24286
  "none",
@@ -23735,6 +24421,7 @@ var init_schema$1 = __esmMin((() => {
23735
24421
  positioning: headerPositioning,
23736
24422
  shrinkOnScroll: z$1.boolean(),
23737
24423
  maxWidth: headerMaxWidth,
24424
+ barFrame: headerBarFrame.optional(),
23738
24425
  logoOverride: mediaSchema.nullable().optional(),
23739
24426
  background: headerBackgroundSchema.default({
23740
24427
  type: "color",
@@ -23744,6 +24431,7 @@ var init_schema$1 = __esmMin((() => {
23744
24431
  navStyle: headerNavStyle,
23745
24432
  navColor: themeColorTokenSchema.nullable().optional(),
23746
24433
  navWeight: navFontWeight.default("medium"),
24434
+ navFontRole: z$1.enum(["body", "heading"]).optional(),
23747
24435
  navTypography: z$1.enum(["body", "heading"]).optional(),
23748
24436
  navTextSize: navLinkStyleSchema.shape.textSize,
23749
24437
  navPlacement: z$1.enum(["end", "center"]).optional(),
@@ -23759,7 +24447,7 @@ var init_schema$1 = __esmMin((() => {
23759
24447
  ctaTreatment: headerCtaTreatmentSchema.optional(),
23760
24448
  ctaVariant: z$1.string().min(1).optional(),
23761
24449
  dropdownStyle: dropdownStyleSchema
23762
- });
24450
+ }).transform(normaliseHeaderNavFontRole);
23763
24451
  footerVariant = z$1.enum([
23764
24452
  "simple",
23765
24453
  "columns",
@@ -24171,6 +24859,21 @@ var init_designState = __esmMin((() => {
24171
24859
  styleAuthorities: z$1.array(blockRuntimeStyleAuthoritySchema)
24172
24860
  }).strict();
24173
24861
  }));
24862
+ //#endregion
24863
+ //#region ../theme-core/src/site-styles/runtimeCompiler.ts
24864
+ function defineSectionForegroundRuntimeTokens(input) {
24865
+ return {
24866
+ textColor: requireThemeColorToken(input.textColor),
24867
+ headingColor: requireThemeColorToken(input.headingColor),
24868
+ linkColor: requireThemeColorToken(input.linkColor),
24869
+ supportingColor: requireThemeColorToken(input.supportingColor)
24870
+ };
24871
+ }
24872
+ function requireThemeColorToken(value) {
24873
+ const token = parseThemeColorToken(value);
24874
+ if (!token) throw new Error(`Invalid section foreground Theme color token: ${String(value)}`);
24875
+ return token;
24876
+ }
24174
24877
  function defineDesignRuntimeRules(rules) {
24175
24878
  return rules;
24176
24879
  }
@@ -24196,6 +24899,8 @@ var init_runtimeCompiler = __esmMin((() => {
24196
24899
  init_types$12();
24197
24900
  init_accessibleSurfaces();
24198
24901
  init_sectionTransitions();
24902
+ init_tokens();
24903
+ init_gradients();
24199
24904
  defaultDesignRuntimeRules = defineDesignRuntimeRules({
24200
24905
  sectionSurfaces: {
24201
24906
  base: {},
@@ -24591,13 +25296,14 @@ function inferHeaderCurationFromLegacyLooks(lookIds, recipes) {
24591
25296
  recommendedHeaderStyleChoicesByLayout: stylesByLayout
24592
25297
  };
24593
25298
  }
24594
- var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, accentLedQuietBudget, balancedBudget, expressiveBudget, kirtanOrnateDesignRuntimeRules, expressiveUnderlineInputs, ornateDarkInputs, generatedContentFrameKinds, curatedSiteStyles;
25299
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, accentLedQuietBudget, balancedBudget, expressiveBudget, kirtanOrnateDesignRuntimeRules, primaryGlowGradientPresetId, fulcrumDesignRuntimeRules, expressiveUnderlineInputs, ornateDarkInputs, generatedContentFrameKinds, curatedSiteStyles;
24595
25300
  var init_curatedSiteStyles = __esmMin((() => {
24596
25301
  init_personalities();
24597
25302
  init_curated();
24598
25303
  init_siteStyleDefaults$1();
24599
25304
  init_siteStyleDefaults();
24600
25305
  init_testimonialQuotePresets();
25306
+ init_gradients();
24601
25307
  init_headerLooks();
24602
25308
  init_footerLooks();
24603
25309
  init_curatedChoices();
@@ -24665,24 +25371,24 @@ var init_curatedSiteStyles = __esmMin((() => {
24665
25371
  type: "color",
24666
25372
  color: "muted"
24667
25373
  },
24668
- foreground: {
25374
+ foreground: defineSectionForegroundRuntimeTokens({
24669
25375
  textColor: "text",
24670
25376
  headingColor: "primary",
24671
25377
  linkColor: "primary",
24672
25378
  supportingColor: "text"
24673
- }
25379
+ })
24674
25380
  },
24675
25381
  "brand-depth-band": {
24676
25382
  background: {
24677
25383
  type: "color",
24678
25384
  color: "primary-800"
24679
25385
  },
24680
- foreground: {
25386
+ foreground: defineSectionForegroundRuntimeTokens({
24681
25387
  textColor: "text",
24682
25388
  headingColor: "primary",
24683
25389
  linkColor: "primary",
24684
25390
  supportingColor: "text"
24685
- }
25391
+ })
24686
25392
  },
24687
25393
  "hero-image": {
24688
25394
  background: {
@@ -24690,12 +25396,32 @@ var init_curatedSiteStyles = __esmMin((() => {
24690
25396
  opacity: 1,
24691
25397
  position: "center center"
24692
25398
  },
24693
- foreground: {
25399
+ foreground: defineSectionForegroundRuntimeTokens({
24694
25400
  textColor: "text",
24695
25401
  headingColor: "primary",
24696
25402
  linkColor: "primary",
24697
25403
  supportingColor: "text"
24698
- }
25404
+ })
25405
+ }
25406
+ }
25407
+ });
25408
+ primaryGlowGradientPresetId = parseGradientPresetId("primary-glow");
25409
+ if (!primaryGlowGradientPresetId) throw new Error("Expected primary-glow in the Theme Core gradient catalog");
25410
+ fulcrumDesignRuntimeRules = defineDesignRuntimeRules({
25411
+ ...defaultDesignRuntimeRules,
25412
+ sectionSurfaces: {
25413
+ ...defaultDesignRuntimeRules.sectionSurfaces,
25414
+ "accent-band": {
25415
+ background: {
25416
+ type: "gradient",
25417
+ gradientPresetId: primaryGlowGradientPresetId
25418
+ },
25419
+ foreground: defineSectionForegroundRuntimeTokens({
25420
+ textColor: "primaryForeground",
25421
+ headingColor: "primaryForeground",
25422
+ linkColor: "primaryForeground",
25423
+ supportingColor: "primaryForeground"
25424
+ })
24699
25425
  }
24700
25426
  }
24701
25427
  });
@@ -24808,6 +25534,7 @@ var init_curatedSiteStyles = __esmMin((() => {
24808
25534
  ],
24809
25535
  buttonPersonalityChoices: [
24810
25536
  buttonChoice("soft-pill"),
25537
+ buttonChoice("two-tone-pill"),
24811
25538
  buttonChoice("pebble"),
24812
25539
  buttonChoice("editorial-link"),
24813
25540
  buttonChoice("brushed-wash")
@@ -25871,6 +26598,8 @@ var init_curatedSiteStyles = __esmMin((() => {
25871
26598
  },
25872
26599
  compositionBudget: quietBudget,
25873
26600
  typography: fulcrumTypography,
26601
+ designRuntimeRules: fulcrumDesignRuntimeRules,
26602
+ recommendedAppearancePresetIds: ["cta-accent-band"],
25874
26603
  themeOverrides: {
25875
26604
  shadow: { colorToken: "primary" },
25876
26605
  accordions: {
@@ -25987,6 +26716,7 @@ var init_curatedSiteStyles = __esmMin((() => {
25987
26716
  ],
25988
26717
  buttonPersonalityChoices: [
25989
26718
  buttonChoice("quiet-arrow"),
26719
+ buttonChoice("two-tone-pill"),
25990
26720
  buttonChoice("flat-ink"),
25991
26721
  buttonChoice("editorial-link")
25992
26722
  ],
@@ -27433,7 +28163,7 @@ var init_validation_constants = __esmMin((() => {
27433
28163
  "media.fromUrl",
27434
28164
  "background.resolveStyle",
27435
28165
  "background.resolveColorsStyle",
27436
- "background.resolveAllowOverflow",
28166
+ "background.resolveFrameClassName",
27437
28167
  "background.resolveImageStyle",
27438
28168
  "background.resolveImageClassName",
27439
28169
  "background.resolveOverlayStyle",
@@ -27569,12 +28299,12 @@ function createSiteOptionSelectField(input) {
27569
28299
  }
27570
28300
  }));
27571
28301
  }
27572
- var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, visibleWhenPredicateSchema, visibleWhenSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, inlineTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum;
28302
+ var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, visibleWhenPredicateSchema, visibleWhenSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, inlineTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum, blockContentSourceKinds, blockContentSourceSchema;
27573
28303
  var init_schema = __esmMin((() => {
27574
28304
  init_src$2();
27575
28305
  init_node();
27576
28306
  init_repeaterGrid();
27577
- init_presets();
28307
+ init_presets$1();
27578
28308
  visibilityLevels = [
27579
28309
  "admin",
27580
28310
  "designer",
@@ -28100,6 +28830,21 @@ var init_schema = __esmMin((() => {
28100
28830
  "layout",
28101
28831
  "interactive"
28102
28832
  ]);
28833
+ blockContentSourceKinds = [
28834
+ "inline",
28835
+ "entries",
28836
+ "mixed"
28837
+ ];
28838
+ blockContentSourceSchema = z$1.object({
28839
+ kind: z$1.enum(blockContentSourceKinds),
28840
+ contentType: z$1.string().min(1).optional()
28841
+ }).superRefine((value, ctx) => {
28842
+ if (value.kind === "inline" && value.contentType) ctx.addIssue({
28843
+ code: z$1.ZodIssueCode.custom,
28844
+ path: ["contentType"],
28845
+ message: "contentType is not allowed when contentSource.kind is \"inline\""
28846
+ });
28847
+ });
28103
28848
  z$1.object({
28104
28849
  name: z$1.string().min(1),
28105
28850
  version: z$1.string().min(1),
@@ -28130,6 +28875,12 @@ var init_schema = __esmMin((() => {
28130
28875
  }).optional()).optional(),
28131
28876
  category: blockCategoryEnum.optional(),
28132
28877
  contentTypes: z$1.array(z$1.string()).optional(),
28878
+ /**
28879
+ * Explicit content-source classification (inline / entries / mixed). Optional at the
28880
+ * schema level for backward compatibility with SDK-defined custom blocks, but every
28881
+ * registered SYSTEM block must declare it (enforced by a registry-wide test).
28882
+ */
28883
+ contentSource: blockContentSourceSchema.optional(),
28133
28884
  tags: z$1.array(z$1.string()).optional(),
28134
28885
  icon: z$1.string().optional()
28135
28886
  });
@@ -28525,9 +29276,15 @@ var init_heroCopy = __esmMin((() => {
28525
29276
  //#endregion
28526
29277
  //#region ../blocks/src/system/fields/ctas.ts
28527
29278
  function createCtasRepeater(options = {}) {
28528
- const { id = "ctas", label = "Calls to action", itemLabel = "CTA", minItems = 0, maxItems, button } = options;
29279
+ const { id = "ctas", label = "Calls to action", itemLabel = "CTA", minItems = 0, maxItems, button, defaultValue } = options;
29280
+ const fieldId = id;
29281
+ const buttonField = createButtonGroup({
29282
+ showGroupLabel: false,
29283
+ ...button ?? {},
29284
+ flattenInRepeater: true
29285
+ });
28529
29286
  return {
28530
- id,
29287
+ id: fieldId,
28531
29288
  type: "repeater",
28532
29289
  label,
28533
29290
  itemLabel,
@@ -28536,11 +29293,8 @@ function createCtasRepeater(options = {}) {
28536
29293
  maxItems,
28537
29294
  required: false,
28538
29295
  allowConversion: true,
28539
- schema: { fields: [createButtonGroup({
28540
- showGroupLabel: false,
28541
- ...button ?? {},
28542
- flattenInRepeater: true
28543
- })] }
29296
+ ...defaultValue !== void 0 ? { defaultValue: [...defaultValue] } : {},
29297
+ schema: { fields: [buttonField] }
28544
29298
  };
28545
29299
  }
28546
29300
  var init_ctas = __esmMin((() => {
@@ -28602,6 +29356,7 @@ var init_heroCtaRow = __esmMin((() => {
28602
29356
  label: "Calls to action",
28603
29357
  itemLabel: "CTA",
28604
29358
  maxItems: 3,
29359
+ defaultValue: [],
28605
29360
  button: {
28606
29361
  variants: [
28607
29362
  {
@@ -28680,7 +29435,7 @@ var init_ctaCopy = __esmMin((() => {
28680
29435
  eyebrowPath: "content.eyebrow",
28681
29436
  titlePath: "content.title",
28682
29437
  className: "cta-heading"
28683
- }), richText({ className: "cta-content rb-prose rb-mx-auto rb-max-w-none" }, when("content.content"), bind("content.content"))]
29438
+ }), richText({ className: "cta-content rb-prose rb-mx-auto rb-max-w-none" }, when("content"), bind("content"))]
28684
29439
  });
28685
29440
  }));
28686
29441
  //#endregion
@@ -29320,7 +30075,7 @@ function createFaqAccordionLayout(options = {}) {
29320
30075
  options: {
29321
30076
  axis: "all",
29322
30077
  includeSpacing: false,
29323
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
30078
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-visible"
29324
30079
  }
29325
30080
  }]
29326
30081
  },
@@ -30851,6 +31606,7 @@ function createBlockManifest(config) {
30851
31606
  previewCustomize: config.previewCustomize,
30852
31607
  category: config.category,
30853
31608
  contentTypes: config.contentTypes ? [...config.contentTypes] : void 0,
31609
+ contentSource: config.contentSource,
30854
31610
  tags: config.tags ? [...config.tags] : [],
30855
31611
  icon: config.icon ?? "Box",
30856
31612
  layout,
@@ -31896,6 +32652,7 @@ const cartBlockDefinition = {
31896
32652
  paletteHidden: false
31897
32653
  },
31898
32654
  category: "interactive",
32655
+ contentSource: { kind: "inline" },
31899
32656
  tags: [
31900
32657
  "shop",
31901
32658
  "cart",
@@ -31987,6 +32744,7 @@ const checkoutBlockDefinition = {
31987
32744
  paletteHidden: false
31988
32745
  },
31989
32746
  category: "interactive",
32747
+ contentSource: { kind: "inline" },
31990
32748
  tags: [
31991
32749
  "shop",
31992
32750
  "checkout",
@@ -32262,6 +33020,7 @@ var init_course_registration_interactive = __esmMin((() => {
32262
33020
  init_builder$2();
32263
33021
  init_styledSection();
32264
33022
  init_fragments$1();
33023
+ init_button();
32265
33024
  init_api_bindings();
32266
33025
  init_shared$5();
32267
33026
  init_defineBlock();
@@ -32274,6 +33033,7 @@ const courseRegistrationBlockDefinition = {
32274
33033
  titleSource: "heading",
32275
33034
  description: "Enrollment form for multi-session courses",
32276
33035
  category: "interactive",
33036
+ contentSource: { kind: "inline" },
32277
33037
  tags: [
32278
33038
  "courses",
32279
33039
  "enrollment",
@@ -32387,15 +33147,9 @@ const courseRegistrationBlockDefinition = {
32387
33147
  defaultValue: "Sign up",
32388
33148
  maxLength: 40
32389
33149
  },
32390
- {
32391
- id: "buttonVariant",
32392
- type: "select",
32393
- label: "Button style",
33150
+ createButtonVariantField({
32394
33151
  description: "Choose a button style from your theme",
32395
- required: false,
32396
- multiple: false,
32397
- defaultValue: "primary",
32398
- options: [
33152
+ variants: [
32399
33153
  {
32400
33154
  value: "primary",
32401
33155
  label: "Primary"
@@ -32408,9 +33162,8 @@ const courseRegistrationBlockDefinition = {
32408
33162
  value: "outline",
32409
33163
  label: "Outline"
32410
33164
  }
32411
- ],
32412
- ui: { intent: "style" }
32413
- }
33165
+ ]
33166
+ })
32414
33167
  ],
32415
33168
  layout: [styledSection({
32416
33169
  baseClass: "",
@@ -32682,6 +33435,7 @@ const giftingBlockDefinition = {
32682
33435
  paletteHidden: false
32683
33436
  },
32684
33437
  category: "interactive",
33438
+ contentSource: { kind: "entries" },
32685
33439
  tags: [
32686
33440
  "gifting",
32687
33441
  "gift cards",
@@ -33066,6 +33820,7 @@ var init_event_registration_interactive = __esmMin((() => {
33066
33820
  init_builder$2();
33067
33821
  init_styledSection();
33068
33822
  init_fragments$1();
33823
+ init_button();
33069
33824
  init_api_bindings();
33070
33825
  init_shared$3();
33071
33826
  init_shop_shared();
@@ -33080,6 +33835,7 @@ const eventRegistrationBlockDefinition = {
33080
33835
  titleSource: "heading",
33081
33836
  description: "Multi-step event registration form",
33082
33837
  category: "interactive",
33838
+ contentSource: { kind: "inline" },
33083
33839
  tags: [
33084
33840
  "events",
33085
33841
  "registration",
@@ -33186,15 +33942,9 @@ const eventRegistrationBlockDefinition = {
33186
33942
  defaultValue: "Complete Registration",
33187
33943
  maxLength: 40
33188
33944
  },
33189
- {
33190
- id: "buttonVariant",
33191
- type: "select",
33192
- label: "Button style",
33945
+ createButtonVariantField({
33193
33946
  description: "Choose a button style from your theme",
33194
- required: false,
33195
- multiple: false,
33196
- defaultValue: "primary",
33197
- options: [
33947
+ variants: [
33198
33948
  {
33199
33949
  value: "primary",
33200
33950
  label: "Primary"
@@ -33207,9 +33957,8 @@ const eventRegistrationBlockDefinition = {
33207
33957
  value: "outline",
33208
33958
  label: "Outline"
33209
33959
  }
33210
- ],
33211
- ui: { intent: "style" }
33212
- }
33960
+ ]
33961
+ })
33213
33962
  ],
33214
33963
  layout: [styledSection({
33215
33964
  baseClass: "",
@@ -33462,7 +34211,7 @@ const copyLayout = fragmentLayoutNode(formCopyFragment.layout);
33462
34211
  const formSurface = styledContainer({
33463
34212
  bindFrom: "_containerStyles",
33464
34213
  constrainWidth: false,
33465
- baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
34214
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-visible",
33466
34215
  children: fragmentLayoutNode(formEmbedFragment.layout)
33467
34216
  });
33468
34217
  function createFormLayout(variant) {
@@ -33527,6 +34276,7 @@ const formBlockDefinition = {
33527
34276
  paletteHidden: false
33528
34277
  },
33529
34278
  category: "interactive",
34279
+ contentSource: { kind: "inline" },
33530
34280
  tags: [
33531
34281
  "form",
33532
34282
  "contact",
@@ -34685,6 +35435,7 @@ const eventCalendarBlockDefinition = {
34685
35435
  paletteHidden: false
34686
35436
  },
34687
35437
  category: "interactive",
35438
+ contentSource: { kind: "entries" },
34688
35439
  tags: [
34689
35440
  "events",
34690
35441
  "calendar",
@@ -35190,6 +35941,7 @@ const eventListingBlockDefinition = {
35190
35941
  paletteHidden: true
35191
35942
  },
35192
35943
  category: "interactive",
35944
+ contentSource: { kind: "entries" },
35193
35945
  tags: [
35194
35946
  "events",
35195
35947
  "listing",
@@ -35649,6 +36401,7 @@ const newsletterSignupBlockDefinition = {
35649
36401
  titleSource: "title",
35650
36402
  description: "Newsletter subscription form with configurable field presets.",
35651
36403
  category: "interactive",
36404
+ contentSource: { kind: "inline" },
35652
36405
  fragments: [{
35653
36406
  fragment: newsletterCopyFragment,
35654
36407
  fieldPriority: 0
@@ -35787,6 +36540,7 @@ const productDetailBlockDefinition = {
35787
36540
  paletteHidden: false
35788
36541
  },
35789
36542
  category: "interactive",
36543
+ contentSource: { kind: "entries" },
35790
36544
  tags: [
35791
36545
  "shop",
35792
36546
  "product",
@@ -35964,6 +36718,7 @@ const productListBlockDefinition = {
35964
36718
  paletteHidden: false
35965
36719
  },
35966
36720
  category: "interactive",
36721
+ contentSource: { kind: "entries" },
35967
36722
  tags: [
35968
36723
  "shop",
35969
36724
  "products",
@@ -36236,6 +36991,7 @@ const shopBlockDefinition = {
36236
36991
  paletteHidden: false
36237
36992
  },
36238
36993
  category: "interactive",
36994
+ contentSource: { kind: "entries" },
36239
36995
  tags: [
36240
36996
  "shop",
36241
36997
  "passes",
@@ -36947,7 +37703,7 @@ var init_EventListing_view = __esmMin((() => {
36947
37703
  var AgendaEventCard;
36948
37704
  var init_AgendaEventCard = __esmMin((() => {
36949
37705
  init_eventCapacity();
36950
- init_utils$5();
37706
+ init_utils$6();
36951
37707
  AgendaEventCard = ({ event, showCapacity, onClick }) => {
36952
37708
  const eventLinkProps = resolveEventLinkProps(event);
36953
37709
  const categoryColor = event.eventCategory?.color || "rgb(var(--tb-accent))";
@@ -37036,7 +37792,7 @@ function formatAgendaDayHeader(date) {
37036
37792
  var FULL_DAY_NAMES$1, WeekAgendaView;
37037
37793
  var init_WeekAgendaView = __esmMin((() => {
37038
37794
  init_AgendaEventCard();
37039
- init_utils$5();
37795
+ init_utils$6();
37040
37796
  FULL_DAY_NAMES$1 = [
37041
37797
  "Sunday",
37042
37798
  "Monday",
@@ -37103,7 +37859,7 @@ var init_WeekBoardView = __esmMin((() => {
37103
37859
  init_clsx();
37104
37860
  init_buttons();
37105
37861
  init_eventCapacity();
37106
- init_utils$5();
37862
+ init_utils$6();
37107
37863
  SHORT_DAY_NAMES = [
37108
37864
  "Sun",
37109
37865
  "Mon",
@@ -37310,7 +38066,7 @@ var DEFAULT_EVENT_CELL_COLOR, FULL_DAY_NAMES;
37310
38066
  var init_timetableModel = __esmMin((() => {
37311
38067
  init_src$1();
37312
38068
  init_eventCapacity();
37313
- init_utils$5();
38069
+ init_utils$6();
37314
38070
  DEFAULT_EVENT_CELL_COLOR = "rgb(var(--tb-accent))";
37315
38071
  FULL_DAY_NAMES = [
37316
38072
  "Sunday",
@@ -37329,7 +38085,7 @@ init_EventListing_view();
37329
38085
  init_EventCalendar_interactive();
37330
38086
  init_WeekAgendaView();
37331
38087
  init_WeekBoardView();
37332
- init_utils$5();
38088
+ init_utils$6();
37333
38089
  init_timetableModel();
37334
38090
  init_buttons();
37335
38091
  function assertNeverDisplayMode(value) {
@@ -103888,7 +104644,7 @@ var init_EventRegistrationWizard = __esmMin((() => {
103888
104644
  init_EventRegistrationSummaryBar();
103889
104645
  init_EventSelectionStep();
103890
104646
  init_useEventRegistrationWizard();
103891
- init_utils$5();
104647
+ init_utils$6();
103892
104648
  init_themePortalRoot();
103893
104649
  init_ModalShell();
103894
104650
  init_MagicLinkForm();
@@ -111684,7 +112440,6 @@ const HeaderSectionNode = ({ blockId, blockKind, blockContent, fragmentRegistry,
111684
112440
  const asProp = restProps.as;
111685
112441
  const styleProp = restProps.style;
111686
112442
  const backgroundProp = typeof restProps.background === "string" ? restProps.background : void 0;
111687
- const allowOverflowProp = typeof restProps.allowOverflow === "boolean" ? restProps.allowOverflow : void 0;
111688
112443
  const dataSlotProp = typeof restProps["data-slot"] === "string" ? restProps["data-slot"] : void 0;
111689
112444
  return /* @__PURE__ */ jsx("nav", {
111690
112445
  ref: (el) => {
@@ -111706,7 +112461,6 @@ const HeaderSectionNode = ({ blockId, blockKind, blockContent, fragmentRegistry,
111706
112461
  as: asProp,
111707
112462
  style: styleProp,
111708
112463
  background: backgroundProp ?? "background",
111709
- allowOverflow: allowOverflowProp,
111710
112464
  "data-slot": dataSlotProp,
111711
112465
  className: sectionClasses || void 0,
111712
112466
  children
@@ -112838,7 +113592,7 @@ function useCalendarEvents({ siteId: _siteId, initialEvents = [], view = "month"
112838
113592
  }
112839
113593
  var CALENDAR_FETCH_LIMIT;
112840
113594
  var init_useCalendarEvents = __esmMin((() => {
112841
- init_utils$5();
113595
+ init_utils$6();
112842
113596
  init_api();
112843
113597
  init_listOptions();
112844
113598
  init_useCalendarEvents_state();
@@ -112897,7 +113651,7 @@ var init_EventModalContext = __esmMin((() => {
112897
113651
  //#region ../blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.tsx
112898
113652
  var CalendarDayCell;
112899
113653
  var init_CalendarDayCell = __esmMin((() => {
112900
- init_utils$5();
113654
+ init_utils$6();
112901
113655
  init_EventModalContext();
112902
113656
  CalendarDayCell = ({ date, events, isCurrentMonth }) => {
112903
113657
  const { openEventModal, openDayModal } = useEventModal();
@@ -113077,7 +113831,7 @@ function DayEventsModal({ date, events, showCapacity, onClose, onSelectEvent, po
113077
113831
  }
113078
113832
  var init_DayEventsModal = __esmMin((() => {
113079
113833
  init_AgendaEventCard();
113080
- init_utils$5();
113834
+ init_utils$6();
113081
113835
  init_ModalShell();
113082
113836
  }));
113083
113837
  //#endregion
@@ -113211,7 +113965,7 @@ var init_EventCombined_client = __esmMin((() => {
113211
113965
  init_WeekAgendaView();
113212
113966
  init_EventModalContext();
113213
113967
  init_EventModals();
113214
- init_utils$5();
113968
+ init_utils$6();
113215
113969
  init_buttons();
113216
113970
  init_listOptions();
113217
113971
  init_calendarViewOptions();
@@ -113697,7 +114451,7 @@ var init_EventCalendar_client = __esmMin((() => {
113697
114451
  init_useEventFilters();
113698
114452
  init_CalendarDayCell();
113699
114453
  init_EventFilters();
113700
- init_utils$5();
114454
+ init_utils$6();
113701
114455
  init_EventModalContext();
113702
114456
  init_EventModals();
113703
114457
  init_WeekAgendaView();
@@ -114820,7 +115574,7 @@ init_surfaces();
114820
115574
  init_curatedSiteStyles();
114821
115575
  //#endregion
114822
115576
  //#region ../theme-core/src/inputs/generateInputCss.ts
114823
- init_types$5();
115577
+ init_types$4();
114824
115578
  init_constants$2();
114825
115579
  init_colorStyles();
114826
115580
  //#endregion
@@ -115718,6 +116472,7 @@ var init_event_details = __esmMin((() => {
115718
116472
  titleSource: "heading",
115719
116473
  description: "Date/time, venue, map, and other dates for an event",
115720
116474
  category: "content",
116475
+ contentSource: { kind: "entries" },
115721
116476
  tags: [
115722
116477
  "events",
115723
116478
  "venue",