@riverbankcms/sdk 0.148.0 → 0.150.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 (250) hide show
  1. package/README.md +1 -1
  2. package/dist/EventEmbeddedCheckoutStep-D00Kc8Zj.mjs +285 -0
  3. package/dist/{PreviewEditorSidebar-DvEPG3Z2.mjs → PreviewEditorSidebar-7ZhmmnBB.mjs} +103 -66
  4. package/dist/{PreviewEditorUI-D6eb6fkx.mjs → PreviewEditorUI-BIJucTRd.mjs} +3 -6
  5. package/dist/{PreviewQueryProvider-5znTyJuz.mjs → PreviewQueryProvider-C0mndwHB.mjs} +3 -3
  6. package/dist/{SdkPreviewModeRuntime-DJ6utQ_R.mjs → SdkPreviewModeRuntime-tj45gmCX.mjs} +96 -67
  7. package/dist/{SiteChromeCustomizeContext-CFJYh6vo.mjs → SiteChromeCustomizeContext-BFOt0ss-.mjs} +4804 -4161
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +660 -0
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +510 -0
  10. package/dist/_dts/api/src/billing.d.ts +2 -2
  11. package/dist/_dts/api/src/bookingConfig.d.ts +33 -48
  12. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +2 -6
  13. package/dist/_dts/api/src/bookingOperations.d.ts +5 -7
  14. package/dist/_dts/api/src/bookingRecords.d.ts +15 -11
  15. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +5 -5
  16. package/dist/_dts/api/src/clientErrorReporting.d.ts +11 -0
  17. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +0 -2
  18. package/dist/_dts/api/src/common/cancellation.d.ts +23 -0
  19. package/dist/_dts/api/src/contentRuntime.d.ts +5 -1
  20. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +1 -1
  21. package/dist/_dts/api/src/endpoints.d.ts +2 -10
  22. package/dist/_dts/api/src/eventManagementContracts.d.ts +4 -7
  23. package/dist/_dts/api/src/footerCompositionContracts.d.ts +9 -0
  24. package/dist/_dts/api/src/footerSettings.d.ts +3 -3
  25. package/dist/_dts/api/src/index.d.ts +4 -4
  26. package/dist/_dts/api/src/navigation/bookingPortalLink.d.ts +13 -0
  27. package/dist/_dts/api/src/navigation.d.ts +1 -0
  28. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +2 -2
  29. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +2 -29
  30. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +9 -173
  31. package/dist/_dts/api/src/request.d.ts +1 -1
  32. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -1
  33. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +1 -1
  34. package/dist/_dts/api/src/sdkThemeWire.d.ts +12 -0
  35. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -3
  36. package/dist/_dts/api/src/siteOperations.d.ts +6 -2
  37. package/dist/_dts/api/src/siteSettings.d.ts +2 -0
  38. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  39. package/dist/_dts/blocks/src/client.d.ts +2 -1
  40. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  41. package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +2 -2
  42. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +38 -10
  43. package/dist/_dts/blocks/src/portal/types.d.ts +9 -6
  44. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -1
  45. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +24 -24
  46. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +1 -1
  47. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +84 -160
  48. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -2
  49. package/dist/_dts/blocks/src/system/blocks/shop.shared.d.ts +31 -4
  50. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +30 -3
  51. package/dist/_dts/blocks/src/system/designCapabilities.d.ts +10 -1
  52. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  53. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -2
  54. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +3 -1
  55. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +38 -18
  56. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +48 -6
  57. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -3
  58. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingNowIso.d.ts +8 -0
  59. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +1 -1
  60. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +6 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +2 -1
  62. package/dist/_dts/blocks/src/system/runtime/nodes/commerce/shared/display.d.ts +9 -2
  63. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +14 -2
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventEmbeddedCheckoutStep.d.ts +13 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationPayment.d.ts +15 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardActions.d.ts +0 -1
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/FullyBookedStep.d.ts +6 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +3 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +4 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +15 -5
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +4 -2
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +3 -3
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentLocation.d.ts +3 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentResponse.d.ts +72 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationCompletion.d.ts +66 -5
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +1 -4
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +13 -5
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +11 -52
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +19 -2
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +7 -42
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +7 -8
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +94 -24
  83. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useGuestRegistrationRecovery.d.ts +30 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/usePaymentStatusRecovery.d.ts +24 -12
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useRegistrationAdmission.d.ts +18 -0
  86. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/wizardSteps.d.ts +6 -1
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +1 -1
  88. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +24 -24
  89. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +41 -6
  90. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +7 -2
  91. package/dist/_dts/blocks/src/system/runtime/shared/stripe/browserStripe.d.ts +8 -0
  92. package/dist/_dts/blocks/src/system/transforms/registry/eventCalendar.d.ts +8 -0
  93. package/dist/_dts/commerce/src/purchase/bookingPaymentSelection.d.ts +54 -0
  94. package/dist/_dts/commerce/src/purchase/checkoutCommitPlan.d.ts +58 -13
  95. package/dist/_dts/commerce/src/purchase/checkoutCopy.d.ts +10 -0
  96. package/dist/_dts/commerce/src/purchase/checkoutErrorCodes.d.ts +1 -1
  97. package/dist/_dts/commerce/src/purchase/checkoutPaymentPlanPlanning.d.ts +16 -21
  98. package/dist/_dts/commerce/src/purchase/checkoutPaymentTerms.d.ts +23 -40
  99. package/dist/_dts/commerce/src/purchase/checkoutPresentation.d.ts +49 -0
  100. package/dist/_dts/commerce/src/purchase/checkoutSessionMetadata.d.ts +6 -6
  101. package/dist/_dts/commerce/src/purchase/checkoutStripeFinalizationPlanning.d.ts +5 -1
  102. package/dist/_dts/commerce/src/purchase/checkoutStripeSessionPlanning.d.ts +5 -4
  103. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +9 -0
  104. package/dist/_dts/commerce/src/purchase/index.d.ts +3 -3
  105. package/dist/_dts/commerce/src/purchase/membershipOrderItemMetadata.d.ts +4 -0
  106. package/dist/_dts/commerce/src/purchase/oneTimeCheckoutPlanning.d.ts +9 -4
  107. package/dist/_dts/commerce/src/purchase/orderInstalmentClosure.d.ts +13 -1
  108. package/dist/_dts/commerce/src/purchase/orderInstalmentLifecycle.d.ts +5 -0
  109. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +4 -1
  110. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +7 -1
  111. package/dist/_dts/commerce/src/purchase/refundRailSplit.d.ts +1 -1
  112. package/dist/_dts/commerce/src/purchase/stateTransitions.d.ts +2 -2
  113. package/dist/_dts/commerce/src/purchase/stripeCheckoutReturnUrl.d.ts +9 -2
  114. package/dist/_dts/commerce/src/purchase/stripeMinimumCharge.d.ts +6 -0
  115. package/dist/_dts/commerce/src/purchase/types.d.ts +7 -7
  116. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +3 -2
  117. package/dist/_dts/content-editor/src/controller/editLeaseHandover.d.ts +30 -0
  118. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +6 -1
  119. package/dist/_dts/content-editor/src/lib/browserStorage.d.ts +5 -0
  120. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +7 -0
  121. package/dist/_dts/core/src/booking-flexible-balance.d.ts +2 -2
  122. package/dist/_dts/core/src/booking-instalment-deposit.d.ts +20 -0
  123. package/dist/_dts/core/src/booking-live-payment-terms.d.ts +72 -0
  124. package/dist/_dts/core/src/booking-payment-options.d.ts +24 -0
  125. package/dist/_dts/core/src/booking-payment-schemas.d.ts +522 -0
  126. package/dist/_dts/core/src/branded.d.ts +3 -0
  127. package/dist/_dts/core/src/edit-lease.d.ts +5 -0
  128. package/dist/_dts/core/src/index.d.ts +4 -0
  129. package/dist/_dts/core/src/patch/index.d.ts +30 -0
  130. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +326 -36
  131. package/dist/_dts/media-editor/src/MediaPickerDialog.d.ts +3 -1
  132. package/dist/_dts/media-editor/src/MediaPickerMiniDialog.d.ts +10 -0
  133. package/dist/_dts/media-editor/src/index.d.ts +2 -0
  134. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +0 -1
  135. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -1
  136. package/dist/_dts/preview-next/src/client/previewAuthStore.d.ts +7 -0
  137. package/dist/_dts/preview-next/src/constants.d.ts +4 -0
  138. package/dist/_dts/preview-next/src/keepAlive.d.ts +1 -0
  139. package/dist/_dts/sdk/src/bookings/index.d.ts +2 -1
  140. package/dist/_dts/sdk/src/bookings/types.d.ts +1 -1
  141. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -12
  142. package/dist/_dts/sdk/src/version.d.ts +1 -1
  143. package/dist/_dts/theme-core/src/blocks/index.d.ts +1 -0
  144. package/dist/_dts/theme-core/src/blocks/opaquePanels.d.ts +147 -0
  145. package/dist/_dts/theme-core/src/boxBackgroundSchema.d.ts +22 -0
  146. package/dist/_dts/theme-core/src/buttons/buttonSurfaceContext.d.ts +22 -0
  147. package/dist/_dts/theme-core/src/cards/roles.d.ts +12 -0
  148. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  149. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +198 -0
  150. package/dist/_dts/theme-core/src/palette/utils/index.d.ts +2 -0
  151. package/dist/_dts/theme-core/src/palette/utils/scrimContrast.d.ts +22 -0
  152. package/dist/_dts/theme-core/src/runtime/bridgeColourTokens.d.ts +10 -0
  153. package/dist/_dts/theme-core/src/schema.d.ts +330 -0
  154. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +0 -51
  155. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +0 -51
  156. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +11 -0
  157. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorCapabilities.d.ts +7 -1
  158. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +7 -1
  159. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +0 -5
  160. package/dist/_dts/theme-core/src/site-styles/previewRuntimeCapabilities.d.ts +12 -6
  161. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +7 -4
  162. package/dist/_dts/theme-core/src/site-styles/sectionSurfaceBackgrounds.d.ts +65 -0
  163. package/dist/_dts/theme-core/src/site-styles/types.d.ts +17 -0
  164. package/dist/_dts/theme-core/src/surfaces/opaqueSurface.d.ts +43 -0
  165. package/dist/_dts/ui/src/color-picker.d.ts +1 -1
  166. package/dist/_dts/ui/src/palette/useHexDraft.d.ts +7 -0
  167. package/dist/client/{BookingMailingListNote-CzRt2dF_.mjs → BookingMailingListNote-CYHOufsI.mjs} +33 -124
  168. package/dist/client/{CheckboxChoice-B33MqoUo.mjs → CheckboxChoice-M-3HycLw.mjs} +1 -1
  169. package/dist/client/{DemoBookingPortalAccess-mxqwap3f.mjs → DemoBookingPortalAccess-Cvr9O_ca.mjs} +2 -2
  170. package/dist/client/{EventCombined.client-CDb11igO.mjs → EventCombined.client-m5UZIobP.mjs} +7 -7
  171. package/dist/client/EventEmbeddedCheckoutStep-DL6zFAkA.mjs +289 -0
  172. package/dist/client/{EventListing.client-EgYhzKPa.mjs → EventListing.client-DeMfCM04.mjs} +2 -2
  173. package/dist/client/{LeafletStaticMap-gtmtaA2b.mjs → LeafletStaticMap-CvZ3gOdD.mjs} +1 -1
  174. package/dist/client/{checkoutUrls-CXhko2Rv.mjs → RichText-BtfNvQV6.mjs} +2 -29
  175. package/dist/client/{TerminalPanel-DvNUP5ot.mjs → TerminalPanel-CUCNEwlH.mjs} +2 -18
  176. package/dist/client/{ThemedButton-C7CeUJjW.mjs → ThemedButton-C7WhXuRl.mjs} +2 -2
  177. package/dist/client/{accordion-kjvt49rA.mjs → accordion-cQm5mjqs.mjs} +1 -1
  178. package/dist/client/{bookingForm-pbRZordh.mjs → bookingForm-BVPJE5RQ.mjs} +15 -11
  179. package/dist/client/bookings.mjs +2860 -1222
  180. package/dist/client/{carousel-f4Zbmicv.mjs → carousel-3vgnY7LC.mjs} +2 -2
  181. package/dist/client/{carousel.client-A2lG-9od.mjs → carousel.client-CISsdZvg.mjs} +1 -1
  182. package/dist/client/{cart-DO20An50.mjs → cart-BGK4oOjm.mjs} +3 -3
  183. package/dist/client/{checkout-Du5amDR_.mjs → checkout-GsBLUNJD.mjs} +3 -3
  184. package/dist/client/checkoutUrls-ChxwaNtO.mjs +28 -0
  185. package/dist/client/client.mjs +3324 -2053
  186. package/dist/client/{colorStyles-j5U9v5JA.mjs → colorStyles-D-32xHZh.mjs} +2 -30
  187. package/dist/client/{context-eW97E945.mjs → context-D_8s12Fp.mjs} +1 -1
  188. package/dist/client/{dates-jPCirRea.mjs → dates-DeJQbQ9T.mjs} +2 -2
  189. package/dist/client/{eventCalendar-C2M-iE4j.mjs → eventCalendar-cmucD4NR.mjs} +10 -10
  190. package/dist/client/{eventCombined-W6ns3LHg.mjs → eventCombined-ku3E9FTl.mjs} +4 -4
  191. package/dist/client/{eventDetails-CR-GT0f0.mjs → eventDetails-CyKZ61sF.mjs} +5 -5
  192. package/dist/client/{eventListing-BK8AfYZz.mjs → eventListing-B7yxGIhX.mjs} +4 -4
  193. package/dist/client/{eventRegistration-BJSd4KUu.mjs → eventRegistration-BoXfSFgZ.mjs} +1455 -1184
  194. package/dist/client/{form-BvpfbQaT.mjs → form-CNQOWhJo.mjs} +5 -5
  195. package/dist/client/{headerSection-I5sUQ8x-.mjs → headerSection-DahaBJGQ.mjs} +3 -3
  196. package/dist/client/hooks.mjs +283 -193
  197. package/dist/client/{locationMap-BLvwf9_f.mjs → locationMap-BoDjqYlW.mjs} +4 -4
  198. package/dist/client/{media-Cl38iOMI.mjs → media-BFY0y2rb.mjs} +2 -1
  199. package/dist/client/{newsletterForm-DrQ2weE8.mjs → newsletterForm-DtzXDklw.mjs} +4 -4
  200. package/dist/client/{pricing-BES87mrR.mjs → pricing-DXEh2Lhh.mjs} +1 -1
  201. package/dist/client/{productDetail-Url9jcc5.mjs → productDetail-D7cPa-00.mjs} +3 -3
  202. package/dist/client/{productList-DE7ngEZJ.mjs → productList-D1XMap66.mjs} +3 -3
  203. package/dist/client/{propsDecoder-D1OtGXDV.mjs → propsDecoder-DiIeBopB.mjs} +913 -322
  204. package/dist/client/rendering/client.mjs +3913 -2260
  205. package/dist/client/rendering/islands.mjs +19 -19
  206. package/dist/client/rendering.mjs +3302 -2013
  207. package/dist/client/result-DRW7JWXz.mjs +30 -0
  208. package/dist/client/{routeIslandApiConfig-BG9Y-SHg.mjs → routeIslandApiConfig-wzR4lKAY.mjs} +1 -1
  209. package/dist/client/scrollToBlock-C86BYkyV.mjs +17 -0
  210. package/dist/client/{shop-CJkuySJ3.mjs → shop-CYT5P-S5.mjs} +13 -14
  211. package/dist/client/{shop-commerce-store-Bxm75Pg6.mjs → shop-commerce-store-wKhsJQxI.mjs} +1 -1
  212. package/dist/client/{shop-commerce-4rKj5n9h.mjs → shop-commerce-ypBu_dx4.mjs} +9 -9
  213. package/dist/client/{shopShared-DpoQDWfz.mjs → shopShared-DFGhYrf2.mjs} +52 -6
  214. package/dist/client/{useEventFilters-D8HliSqR.mjs → useEventFilters-blSbN5o7.mjs} +8 -8
  215. package/dist/preview-next/before-render.mjs +15 -22
  216. package/dist/preview-next/client/runtime.mjs +4 -4
  217. package/dist/preview-next/constants.mjs +5 -1
  218. package/dist/preview-next/index.mjs +5 -1
  219. package/dist/preview-next/keepAlive.mjs +149 -82
  220. package/dist/preview-next/middleware.mjs +15 -22
  221. package/dist/{previewAuthStore-BXXF3hhW.mjs → previewAuthStore-BBmV7UsW.mjs} +49 -29
  222. package/dist/{sdk-runtime-C2a05WjL.mjs → sdk-runtime-2p8uQk1V.mjs} +2 -2
  223. package/dist/{separator-CuNhBAhS.mjs → separator-Cvvzk0Oo.mjs} +1 -1
  224. package/dist/server/components.mjs +4041 -3704
  225. package/dist/server/config-validation.mjs +345 -255
  226. package/dist/server/config.mjs +345 -255
  227. package/dist/server/data.mjs +283 -193
  228. package/dist/server/index.mjs +20 -27
  229. package/dist/server/next.mjs +788 -469
  230. package/dist/server/page-converter.mjs +245 -121
  231. package/dist/server/prebuild.mjs +1 -1
  232. package/dist/server/rendering/server.mjs +4018 -3690
  233. package/dist/server/rendering.mjs +4044 -3707
  234. package/dist/server/routing.mjs +314 -190
  235. package/dist/server/server.mjs +290 -218
  236. package/dist/server/theme-bridge.mjs +1122 -310
  237. package/dist/server/theme.mjs +126 -116
  238. package/dist/spinner-CDo6AkDz.mjs +658 -0
  239. package/dist/styles/index.css +75 -212
  240. package/package.json +1 -1
  241. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +0 -123
  242. package/dist/_dts/billing/src/checkout/platform.d.ts +0 -77
  243. package/dist/_dts/billing/src/config/env.d.ts +0 -29
  244. package/dist/_dts/billing/src/stripe/client.d.ts +0 -29
  245. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +0 -63
  246. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventCheckoutHandoffRestore.d.ts +0 -9
  247. package/dist/_dts/commerce/src/purchase/checkoutPaymentTermPlanning.d.ts +0 -10
  248. package/dist/_dts/commerce/src/purchase/checkoutValidatedItemPlanning.d.ts +0 -55
  249. package/dist/_dts/commerce/src/purchase/orderInstalmentPayoff.d.ts +0 -24
  250. package/dist/client/urlParams-D71VXFGx.mjs +0 -47
@@ -1136,6 +1136,13 @@ const parseEventSeriesId = (value) => parseUuidBrand$1(value, unsafeAsEventSerie
1136
1136
  function assertNever$20(value, message = "Unexpected variant") {
1137
1137
  throw new Error(`${message}: ${String(value)}`);
1138
1138
  }
1139
+ //#endregion
1140
+ //#region ../core/src/currency-format.ts
1141
+ const CURRENCY_CODE_INPUT_PATTERN = /^[A-Za-z]{3}$/;
1142
+ /** Parse + normalize a currency code, or return null if it isn't a 3-letter code. */
1143
+ function parseCurrencyCode(value) {
1144
+ return CURRENCY_CODE_INPUT_PATTERN.test(value) ? value.toUpperCase() : null;
1145
+ }
1139
1146
  const CURRENCY_LOCALE_BY_CODE = {
1140
1147
  USD: "en-US",
1141
1148
  GBP: "en-GB",
@@ -1196,6 +1203,16 @@ function formatCurrencyMajorUnits(amount, currency, options) {
1196
1203
  return `${amount.toFixed(2)} ${currencyCode}`;
1197
1204
  }
1198
1205
  }
1206
+ function unsafeAsNonNegativeCents(value) {
1207
+ return value;
1208
+ }
1209
+ /**
1210
+ * Normalizes a derived amount to non-negative whole cents. This intentionally
1211
+ * clamps negatives to zero; use parseNonNegativeCents for validation.
1212
+ */
1213
+ function toNonNegativeCents(value) {
1214
+ return unsafeAsNonNegativeCents(Math.max(0, Math.trunc(value)));
1215
+ }
1199
1216
  /** Default clock for production callers that do not inject time explicitly. */
1200
1217
  const systemPlanningClock = { now: () => Date.now() };
1201
1218
  /** Resolve current time as a Date from an explicit Date, injected clock, or system clock. */
@@ -1477,6 +1494,16 @@ function isRecord$41(value) {
1477
1494
  return typeof value === "object" && value !== null && !Array.isArray(value);
1478
1495
  }
1479
1496
  //#endregion
1497
+ //#region ../core/src/booking-payment-options.ts
1498
+ /** Automatic instalments and a flexible balance cannot share one booking offer. */
1499
+ function validateBookingPaymentOptionKinds(kinds) {
1500
+ if (kinds.length === 0) return err$3("no_options");
1501
+ const uniqueKinds = new Set(kinds);
1502
+ if (uniqueKinds.size !== kinds.length) return err$3("duplicate_kind");
1503
+ if (uniqueKinds.has("instalment_plan") && uniqueKinds.has("flexible_balance")) return err$3("incompatible_collection_options");
1504
+ return ok$3(void 0);
1505
+ }
1506
+ //#endregion
1480
1507
  //#region ../core/src/booking-time-zone.ts
1481
1508
  const TIME_ZONE_VALIDITY_CACHE_LIMIT = 100;
1482
1509
  const timeZoneValidityCache = /* @__PURE__ */ new Map();
@@ -5727,10 +5754,10 @@ function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
5727
5754
  const parts = parseColorTokenParts(reference);
5728
5755
  if (parts.kind === "token" && parts.opacityPercent !== null) {
5729
5756
  const foregroundHex = normalizePaletteHex(palette[parts.token] ?? "");
5730
- return foregroundHex ? compositeHex$1(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
5757
+ return foregroundHex ? compositeHex$2(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
5731
5758
  }
5732
5759
  const rgba = parseRgba(parts.kind === "raw" ? parts.value : reference);
5733
- return rgba ? compositeHex$1(rgbToHex$1(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
5760
+ return rgba ? compositeHex$2(rgbToHex$1(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
5734
5761
  }
5735
5762
  /** Resolve a colour reference only when it is already fully opaque. */
5736
5763
  function resolveConcreteColorHex(reference, palette) {
@@ -5746,7 +5773,7 @@ function resolveConcreteColorHex(reference, palette) {
5746
5773
  if (literal.toLowerCase() === "white") return "#ffffff";
5747
5774
  return normalizePaletteHex(literal);
5748
5775
  }
5749
- function compositeHex$1(foregroundHex, underlayHex, alpha) {
5776
+ function compositeHex$2(foregroundHex, underlayHex, alpha) {
5750
5777
  const foreground = hexToRgb$1(foregroundHex);
5751
5778
  const underlay = hexToRgb$1(underlayHex);
5752
5779
  const channel = (foregroundValue, underlayValue) => Math.round(foregroundValue * alpha + underlayValue * (1 - alpha));
@@ -7829,6 +7856,35 @@ function fallbackBackground(fallbackToken, palette) {
7829
7856
  reason: "unresolvable-colour"
7830
7857
  };
7831
7858
  }
7859
+ /**
7860
+ * The complete button context a surface publishes: `--rb-action-*` variables
7861
+ * for every role, resolved against the surface when its colour is provable,
7862
+ * and an explicit reset when it is not (image, gradient, composited), so a
7863
+ * nested surface never inherits a context resolved for an outer band.
7864
+ * A surface with no background of its own publishes nothing and inherits.
7865
+ *
7866
+ * Sections (through the blocks background transforms), card roles and opaque
7867
+ * block panels all publish through this one function.
7868
+ */
7869
+ function surfaceButtonContextStyles(input) {
7870
+ if (!input.buttonSystem) return {};
7871
+ const context = deriveButtonSurfaceContext(input.surface, input.palette, input.fallbackToken);
7872
+ if (context.kind !== "known-solid") return context.reason === "missing-background" ? {} : contextualButtonSurfaceResetStyles();
7873
+ return knownSurfaceButtonContextStyles({
7874
+ surface: context.surface,
7875
+ palette: input.palette,
7876
+ buttonSystem: input.buttonSystem
7877
+ });
7878
+ }
7879
+ /** Every role's contextual styles against one proven solid surface. */
7880
+ function knownSurfaceButtonContextStyles(input) {
7881
+ return Object.fromEntries(VARIANT_ROLES.flatMap((role) => Object.entries(contextualButtonSurfaceStyles(resolveContextualButtonRole({
7882
+ role,
7883
+ buttonSystem: input.buttonSystem,
7884
+ palette: input.palette,
7885
+ surface: input.surface
7886
+ })))));
7887
+ }
7832
7888
  function resolveContextualButtonRole(input) {
7833
7889
  const requested = findVariant(input.buttonSystem, input.role);
7834
7890
  if (!requested) return {
@@ -10806,6 +10862,57 @@ function resolveCardRole(theme, cardSystem, role) {
10806
10862
  }
10807
10863
  }
10808
10864
  //#endregion
10865
+ //#region ../theme-core/src/surfaces/opaqueSurface.ts
10866
+ function opaqueSurfaceContextFromTheme(theme) {
10867
+ return {
10868
+ palette: expandPalette(theme.palette),
10869
+ buttonSystem: theme.buttons,
10870
+ linkHoverToken: theme.typography.proseLinkStyle?.hoverColorToken
10871
+ };
10872
+ }
10873
+ /**
10874
+ * The declarations that make an element own its surface: `color`, every
10875
+ * `--rb-surface-*` role and every `--rb-action-*` variable. Card roles and
10876
+ * opaque block panels both publish through this, so a nested surface can never
10877
+ * inherit a band's light text or its band-resolved buttons.
10878
+ */
10879
+ function opaqueSurfaceDeclarations(paint, context) {
10880
+ if (paint.kind === "transparent") return inheritedSurfaceDeclarations();
10881
+ const textToken = paint.foregroundToken ?? "text";
10882
+ const foreground = resolveSurfaceForeground(paint.kind === "solid" ? {
10883
+ type: "color",
10884
+ color: paint.token,
10885
+ textColor: textToken
10886
+ } : {
10887
+ type: "gradient",
10888
+ textColor: textToken
10889
+ }, context.palette, { linkHover: context.linkHoverToken });
10890
+ const buttonContext = context.buttonSystem ? surfaceButtonContextStyles({
10891
+ surface: paint.kind === "solid" ? {
10892
+ kind: "solid",
10893
+ color: paint.token,
10894
+ foreground: foreground.kind === "known" ? foreground.roles.link : void 0,
10895
+ composited: false
10896
+ } : { kind: "gradient" },
10897
+ palette: context.palette,
10898
+ buttonSystem: context.buttonSystem
10899
+ }) : contextualButtonSurfaceResetStyles();
10900
+ return [...surfaceForegroundDeclarations(foreground.kind === "known" ? surfaceForegroundInputFromResolved(foreground, rgbColorValue) : { text: colorValue(textToken) }), ...Object.entries(buttonContext).map(([property, value]) => `${property}: ${value};`)];
10901
+ }
10902
+ function colorValue(token) {
10903
+ const parsed = parseThemeColorToken(token);
10904
+ return parsed ? rgbColorValue(parsed) : token;
10905
+ }
10906
+ /** Every property a surface publishes, set to `inherit`. */
10907
+ function inheritedSurfaceDeclarations() {
10908
+ return [
10909
+ "color",
10910
+ ...Object.values(SURFACE_FOREGROUND_CSS_VARS),
10911
+ "--rb-surface-link-hover-decoration",
10912
+ ...Object.keys(contextualButtonSurfaceResetStyles())
10913
+ ].map((property) => `${property}: inherit;`);
10914
+ }
10915
+ //#endregion
10809
10916
  //#region ../theme-core/src/utils/cssDeclarations.ts
10810
10917
  /** Render CSS declarations whether callers provide terminators or fragments. */
10811
10918
  function renderCssDeclarations(declarations) {
@@ -10940,15 +11047,18 @@ function generateVariantCSS(variant, themeId, cardClasses, tokens, theme, palett
10940
11047
  }
10941
11048
  function cardSurfaceRules(variant, tokens, theme, palette) {
10942
11049
  if (variant.background.type === "transparent") return ["background: transparent"];
10943
- const foreground = resolveSurfaceForeground(variant.background.type === "solid" ? {
10944
- type: "color",
10945
- color: variant.background.colorToken,
10946
- textColor: variant.foregroundToken ?? "text"
11050
+ return [cardBackgroundRule(variant.background, tokens), ...opaqueSurfaceDeclarations(variant.background.type === "solid" ? {
11051
+ kind: "solid",
11052
+ token: variant.background.colorToken,
11053
+ foregroundToken: variant.foregroundToken
10947
11054
  } : {
10948
- type: "gradient",
10949
- textColor: variant.foregroundToken ?? "text"
10950
- }, palette, { linkHover: theme.typography.proseLinkStyle?.hoverColorToken });
10951
- return [cardBackgroundRule(variant.background, tokens), ...surfaceForegroundDeclarations(foreground.kind === "known" ? surfaceForegroundInputFromResolved(foreground, (token) => tokens.getColor(token)) : { text: tokens.getColor(variant.foregroundToken ?? "text") })];
11055
+ kind: "gradient",
11056
+ foregroundToken: variant.foregroundToken
11057
+ }, {
11058
+ palette,
11059
+ buttonSystem: theme.buttons,
11060
+ linkHoverToken: theme.typography.proseLinkStyle?.hoverColorToken
11061
+ })];
10952
11062
  }
10953
11063
  function cardBackgroundRule(background, tokens) {
10954
11064
  if (background.type === "solid") return `background: ${tokens.getColor(background.colorToken)}`;
@@ -11947,6 +12057,18 @@ function brandNonEmptyString(value, label) {
11947
12057
  if (value.length === 0) throw new Error(`${label} must be a non-empty string.`);
11948
12058
  return value;
11949
12059
  }
12060
+ /**
12061
+ * What a block's own section background field admits, read from its manifest.
12062
+ * A site style's surface rule may paint a gradient or a photo; a block whose
12063
+ * `_sectionStyles.background` refuses that paint would be dropped at render
12064
+ * admission, so the runtime compiler paints the surface's colour equivalent
12065
+ * instead (see `compileSectionBackground`).
12066
+ */
12067
+ const sectionBackgroundPaintValues = [
12068
+ "color",
12069
+ "gradient",
12070
+ "image"
12071
+ ];
11950
12072
  const plainFrame = { kind: "plain" };
11951
12073
  function panelFrame(treatment) {
11952
12074
  return {
@@ -12033,6 +12155,7 @@ function defineBlockDesignCapability(capability) {
12033
12155
  ...capability,
12034
12156
  kind: "designed",
12035
12157
  looks: capability.looks ?? "not-applicable",
12158
+ sectionBackgroundPaints: admittedSectionBackgroundPaints(capability.sectionBackgroundPaints),
12036
12159
  sectionHeights: capability.sectionHeights ?? ["default"],
12037
12160
  imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
12038
12161
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
@@ -12045,6 +12168,10 @@ function defineBlockDesignCapability(capability) {
12045
12168
  ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
12046
12169
  };
12047
12170
  }
12171
+ /** Absent means the block admits every section background paint. */
12172
+ function admittedSectionBackgroundPaints(paints) {
12173
+ return paints ?? sectionBackgroundPaintValues;
12174
+ }
12048
12175
  //#endregion
12049
12176
  //#region ../theme-core/src/site-styles/logoBranding.ts
12050
12177
  const logoTextConfidenceValues = [
@@ -12470,12 +12597,22 @@ const mediaPresentationSchema = commonSchema.extend({
12470
12597
  const boxBackgroundSchema = z$1.discriminatedUnion("type", [
12471
12598
  commonSchema.extend({
12472
12599
  type: z$1.literal("color"),
12473
- color: tokenOrCssColorValueSchema.nullable().optional()
12600
+ color: tokenOrCssColorValueSchema.nullable().optional(),
12601
+ /**
12602
+ * Compiler-owned. The scrim a site-style colour surface lays over media
12603
+ * that replaces it (a Look's band meeting an authored photo), sized so the
12604
+ * surface's foreground stays legible over any pixel. A colour background
12605
+ * never draws it itself; `resolveSectionBackground` moves it onto the
12606
+ * merged media background as its overlay.
12607
+ */
12608
+ mediaScrim: boxBackgroundOverlaySchema.nullable().optional()
12474
12609
  }),
12475
12610
  commonSchema.extend({
12476
12611
  type: z$1.literal("gradient"),
12477
12612
  gradient: z$1.string().nullable().optional(),
12478
- gradientPresetId: z$1.string().min(1).nullable().optional()
12613
+ gradientPresetId: z$1.string().min(1).nullable().optional(),
12614
+ /** Compiler-owned; see the colour branch. */
12615
+ mediaScrim: boxBackgroundOverlaySchema.nullable().optional()
12479
12616
  }),
12480
12617
  mediaPresentationSchema.extend({
12481
12618
  type: z$1.literal("image"),
@@ -13250,7 +13387,7 @@ function isRecord$27(value) {
13250
13387
  * callsites even though arrays pass at runtime. Follow-up cleanup should replace
13251
13388
  * this API with a more precise predicate type and migrate consumers.
13252
13389
  */
13253
- function isObjectRecord$1(value) {
13390
+ function isObjectRecord$3(value) {
13254
13391
  return typeof value === "object" && value !== null;
13255
13392
  }
13256
13393
  //#endregion
@@ -13358,68 +13495,113 @@ function createRichTextDoc(paragraphs) {
13358
13495
  };
13359
13496
  }
13360
13497
  //#endregion
13361
- //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
13362
- const bookingDepositRefundPolicySchema$1 = z$1.enum(["refundable", "non_refundable"]);
13363
- const bookingInstalmentPlanSchema$1 = z$1.union([
13364
- z$1.object({
13365
- kind: z$1.literal("deposit_plus_one_remainder"),
13366
- depositAmountCents: z$1.number().int().min(0),
13367
- depositRefundability: bookingDepositRefundPolicySchema$1,
13368
- remainderDueCount: z$1.number().int().positive(),
13369
- intervalUnit: z$1.enum([
13370
- "day",
13371
- "week",
13372
- "month"
13373
- ])
13374
- }),
13375
- z$1.object({
13376
- kind: z$1.literal("deposit_plus_scheduled_instalments"),
13377
- depositAmountCents: z$1.number().int().min(0),
13378
- depositRefundability: bookingDepositRefundPolicySchema$1,
13379
- instalmentCount: z$1.number().int().positive(),
13380
- intervalCount: z$1.number().int().positive(),
13381
- intervalUnit: z$1.enum([
13382
- "day",
13383
- "week",
13384
- "month"
13385
- ])
13386
- }),
13387
- z$1.object({
13388
- kind: z$1.literal("equal_scheduled_instalments"),
13389
- instalmentCount: z$1.number().int().positive(),
13390
- intervalCount: z$1.number().int().positive(),
13391
- intervalUnit: z$1.enum([
13392
- "day",
13393
- "week",
13394
- "month"
13395
- ])
13396
- })
13498
+ //#region ../core/src/booking-payment-schemas.ts
13499
+ const stripObject = (shape) => z$1.object(shape);
13500
+ const strictObject = (shape) => z$1.strictObject(shape);
13501
+ const depositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
13502
+ const intervalUnitSchema = z$1.enum([
13503
+ "day",
13504
+ "week",
13505
+ "month"
13397
13506
  ]);
13398
- const bookingFlexibleBalanceDueDateRuleSchema$1 = z$1.union([z$1.object({
13399
- kind: z$1.literal("relative_to_start_date"),
13400
- daysBeforeStart: z$1.number().int().positive()
13401
- }), z$1.object({
13402
- kind: z$1.literal("fixed_calendar_date"),
13403
- dueAt: z$1.string().datetime()
13404
- })]);
13405
- const bookingFlexibleBalanceConfigSchema$1 = z$1.object({
13406
- upfrontAmountCents: z$1.number().int().min(0),
13407
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
13408
- depositRefundability: bookingDepositRefundPolicySchema$1
13409
- });
13410
- const blockBookingPaymentCollectionOptionSchema = z$1.union([
13411
- z$1.object({ kind: z$1.literal("upfront") }),
13412
- z$1.object({ kind: z$1.literal("deferred_manual") }),
13413
- z$1.object({
13414
- kind: z$1.literal("instalment_plan"),
13415
- plan: bookingInstalmentPlanSchema$1
13416
- }),
13417
- z$1.object({
13418
- kind: z$1.literal("flexible_balance"),
13419
- config: bookingFlexibleBalanceConfigSchema$1
13420
- })
13421
- ]);
13422
- const blockBookingPaymentTermsSchema = z$1.object({ allowedOptions: z$1.array(blockBookingPaymentCollectionOptionSchema).min(1) });
13507
+ const nonNegativeIntegerSchema = z$1.number().int().nonnegative();
13508
+ const positiveIntegerSchema = z$1.number().int().positive();
13509
+ function createInstalmentPlanSchema(object) {
13510
+ return z$1.discriminatedUnion("kind", [
13511
+ object({
13512
+ kind: z$1.literal("deposit_plus_one_remainder"),
13513
+ depositAmountCents: nonNegativeIntegerSchema,
13514
+ depositRefundability: depositRefundPolicySchema,
13515
+ remainderDueCount: positiveIntegerSchema,
13516
+ intervalUnit: intervalUnitSchema
13517
+ }),
13518
+ object({
13519
+ kind: z$1.literal("deposit_plus_scheduled_instalments"),
13520
+ depositAmountCents: nonNegativeIntegerSchema,
13521
+ depositRefundability: depositRefundPolicySchema,
13522
+ instalmentCount: positiveIntegerSchema,
13523
+ intervalCount: positiveIntegerSchema,
13524
+ intervalUnit: intervalUnitSchema
13525
+ }),
13526
+ object({
13527
+ kind: z$1.literal("equal_scheduled_instalments"),
13528
+ instalmentCount: positiveIntegerSchema,
13529
+ intervalCount: positiveIntegerSchema,
13530
+ intervalUnit: intervalUnitSchema
13531
+ })
13532
+ ]);
13533
+ }
13534
+ function createFlexibleBalanceSchemas(object) {
13535
+ const dueDateRule = z$1.discriminatedUnion("kind", [object({
13536
+ kind: z$1.literal("relative_to_start_date"),
13537
+ daysBeforeStart: positiveIntegerSchema
13538
+ }), object({
13539
+ kind: z$1.literal("fixed_calendar_date"),
13540
+ dueAt: z$1.string().datetime()
13541
+ })]);
13542
+ return {
13543
+ dueDateRule,
13544
+ config: object({
13545
+ upfrontAmountCents: nonNegativeIntegerSchema,
13546
+ dueDateRule,
13547
+ depositRefundability: depositRefundPolicySchema
13548
+ })
13549
+ };
13550
+ }
13551
+ const paymentOptionKindsMessages = {
13552
+ no_options: "Choose at least one way for customers to pay.",
13553
+ duplicate_kind: "Choose each payment option only once.",
13554
+ incompatible_collection_options: "Offer instalments or a deposit with the rest paid later, but not both."
13555
+ };
13556
+ function buildBookingPaymentOptionSchemas(object) {
13557
+ const instalmentPlan = createInstalmentPlanSchema(object);
13558
+ const flexibleBalance = createFlexibleBalanceSchemas(object);
13559
+ const paymentCollectionOption = z$1.discriminatedUnion("kind", [
13560
+ object({ kind: z$1.literal("upfront") }),
13561
+ object({ kind: z$1.literal("deferred_manual") }),
13562
+ object({
13563
+ kind: z$1.literal("instalment_plan"),
13564
+ plan: instalmentPlan
13565
+ }),
13566
+ object({
13567
+ kind: z$1.literal("flexible_balance"),
13568
+ config: flexibleBalance.config
13569
+ })
13570
+ ]);
13571
+ const paymentTerms = object({ allowedOptions: z$1.array(paymentCollectionOption) }).superRefine(({ allowedOptions }, ctx) => {
13572
+ const result = validateBookingPaymentOptionKinds(allowedOptions.map(({ kind }) => kind));
13573
+ if (!result.ok) ctx.addIssue({
13574
+ code: "custom",
13575
+ path: ["allowedOptions"],
13576
+ message: paymentOptionKindsMessages[result.error]
13577
+ });
13578
+ });
13579
+ const paymentOptionsChoice = z$1.discriminatedUnion("source", [z$1.strictObject({ source: z$1.literal("default") }), z$1.strictObject({
13580
+ source: z$1.literal("custom"),
13581
+ paymentTerms
13582
+ })]);
13583
+ return {
13584
+ depositRefundPolicy: depositRefundPolicySchema,
13585
+ instalmentPlan,
13586
+ flexibleBalanceDueDateRule: flexibleBalance.dueDateRule,
13587
+ flexibleBalanceConfig: flexibleBalance.config,
13588
+ paymentCollectionOption,
13589
+ paymentTerms,
13590
+ paymentOptionsChoice
13591
+ };
13592
+ }
13593
+ function createBookingPaymentOptionSchemas(mode) {
13594
+ return mode === "strict" ? buildBookingPaymentOptionSchemas(strictObject) : buildBookingPaymentOptionSchemas(stripObject);
13595
+ }
13596
+ const bookingPaymentOptionSchemas = createBookingPaymentOptionSchemas("strip");
13597
+ bookingPaymentOptionSchemas.depositRefundPolicy;
13598
+ bookingPaymentOptionSchemas.instalmentPlan;
13599
+ bookingPaymentOptionSchemas.flexibleBalanceDueDateRule;
13600
+ bookingPaymentOptionSchemas.flexibleBalanceConfig;
13601
+ bookingPaymentOptionSchemas.paymentCollectionOption;
13602
+ const bookingPaymentTermsSchema = bookingPaymentOptionSchemas.paymentTerms;
13603
+ bookingPaymentOptionSchemas.paymentOptionsChoice;
13604
+ const blockBookingPaymentTermsSchema = bookingPaymentTermsSchema;
13423
13605
  const blockBookingConsentSchema = z$1.object({
13424
13606
  requirementId: z$1.string(),
13425
13607
  title: z$1.string(),
@@ -14028,7 +14210,7 @@ const publicPassProductCollectionSchema = z$1.object({ passes: z$1.array(publicP
14028
14210
  /**
14029
14211
  * Public membership product for shop display
14030
14212
  */
14031
- const publicMembershipProductSchema = z$1.object({
14213
+ const publicMembershipProductFields = {
14032
14214
  id: z$1.string(),
14033
14215
  name: z$1.string(),
14034
14216
  description: z$1.string().nullable(),
@@ -14037,7 +14219,16 @@ const publicMembershipProductSchema = z$1.object({
14037
14219
  billingInterval: z$1.enum(["month", "year"]),
14038
14220
  eligibleCategoryIds: z$1.array(z$1.string()),
14039
14221
  eligibleCategoryNames: z$1.array(z$1.string())
14222
+ };
14223
+ const purchasablePublicMembershipProductSchema = z$1.object({
14224
+ ...publicMembershipProductFields,
14225
+ purchaseAvailability: z$1.literal("purchasable")
14040
14226
  });
14227
+ const publicMembershipProductSchema = z$1.discriminatedUnion("purchaseAvailability", [purchasablePublicMembershipProductSchema, z$1.object({
14228
+ ...publicMembershipProductFields,
14229
+ purchaseAvailability: z$1.literal("display_only"),
14230
+ unavailabilityReason: z$1.literal("online_payments_unavailable")
14231
+ })]);
14041
14232
  const publicMembershipProductCollectionSchema = z$1.object({ memberships: z$1.array(publicMembershipProductSchema) });
14042
14233
  //#endregion
14043
14234
  //#region ../blocks/src/system/node/schema.ts
@@ -15211,6 +15402,17 @@ function defineBlockAppearancePreset(preset) {
15211
15402
  * (`defineBlockAppearancePreset` defaults it to `none`) — the block's own
15212
15403
  * composition still governs how its items look. The per-Look rationale for the card-bearing ones lives
15213
15404
  * in `.project/plans/1297-card-role-contract-site-styles-own-card-surfaces/mapping-table.md`.
15405
+ *
15406
+ * A Look asking for the `alternative` or `open` role is offered only where the
15407
+ * site style defines that role (`siteStyleSupportsLookDesign`), so two Looks
15408
+ * that differ only in role are distinct wherever both are offered.
15409
+ *
15410
+ * Retiring a Look is removing its entry. A stored pin to a retired id reads as
15411
+ * an unsupported pin in the page design editor model and renders the block's
15412
+ * auto Look, the same path an unavailable Look takes. Duplicates retired in
15413
+ * the 2026-09 Look audit: `feature-cards-soft-panels`,
15414
+ * `feature-cards-photo-tiles`, `feature-cards-editorial-pathways`,
15415
+ * `testimonials-default-cards`.
15214
15416
  */
15215
15417
  const brandScrimOptionGroups = [{
15216
15418
  id: "image-surface-treatment",
@@ -15595,16 +15797,6 @@ defineBlockAppearancePreset({
15595
15797
  treatment: "framed-programme"
15596
15798
  }
15597
15799
  }
15598
- }), defineBlockAppearancePreset({
15599
- id: "feature-cards-soft-panels",
15600
- target: "feature-cards",
15601
- label: "Soft tinted panels",
15602
- blockKinds: ["block.feature-cards"],
15603
- design: {
15604
- sectionSurface: "base",
15605
- contentFrame: plainFrame,
15606
- cardRole: "alternative"
15607
- }
15608
15800
  }), defineBlockAppearancePreset({
15609
15801
  id: "feature-cards-editorial-diptych",
15610
15802
  target: "feature-cards",
@@ -15616,27 +15808,6 @@ defineBlockAppearancePreset({
15616
15808
  contentFrame: plainFrame,
15617
15809
  cardRole: "default"
15618
15810
  }
15619
- }), defineBlockAppearancePreset({
15620
- id: "feature-cards-editorial-pathways",
15621
- target: "feature-cards",
15622
- label: "Editorial pathways",
15623
- blockKinds: ["block.feature-cards"],
15624
- constraints: { layoutVariantKeys: ["editorial-pathways"] },
15625
- design: {
15626
- sectionSurface: "base",
15627
- contentFrame: plainFrame,
15628
- cardRole: "default"
15629
- }
15630
- }), defineBlockAppearancePreset({
15631
- id: "feature-cards-photo-tiles",
15632
- target: "feature-cards",
15633
- label: "Photo tiles",
15634
- blockKinds: ["block.feature-cards"],
15635
- design: {
15636
- sectionSurface: "base",
15637
- contentFrame: plainFrame,
15638
- cardRole: "default"
15639
- }
15640
15811
  }), defineBlockAppearancePreset({
15641
15812
  id: "events-lined-panel",
15642
15813
  target: "events",
@@ -15725,16 +15896,6 @@ defineBlockAppearancePreset({
15725
15896
  contentFrame: panelFrame("raised"),
15726
15897
  cardRole: "default"
15727
15898
  }
15728
- }), defineBlockAppearancePreset({
15729
- id: "testimonials-default-cards",
15730
- target: "testimonials",
15731
- label: "Default cards",
15732
- blockKinds: ["block.testimonials"],
15733
- design: {
15734
- sectionSurface: "base",
15735
- contentFrame: plainFrame,
15736
- cardRole: "default"
15737
- }
15738
15899
  }), defineBlockAppearancePreset({
15739
15900
  id: "testimonials-statement-cards",
15740
15901
  target: "testimonials",
@@ -19621,6 +19782,17 @@ asLayoutVariantKey("classic");
19621
19782
  asLayoutVariantKey("micro");
19622
19783
  asBoundaryOptionId("break:wave");
19623
19784
  //#endregion
19785
+ //#region ../theme-core/src/palette/utils/scrimContrast.ts
19786
+ const WHITE = "#ffffff";
19787
+ const BLACK = "#000000";
19788
+ /** `top` at `alpha` over opaque `bottom`, blended as CSS paints an overlay. */
19789
+ function compositeHex(topHex, alpha, bottomHex) {
19790
+ const top = hexToRgb$1(topHex);
19791
+ const bottom = hexToRgb$1(bottomHex);
19792
+ const mix = (a, b) => Math.round(alpha * a + (1 - alpha) * b);
19793
+ return rgbToHex$1(mix(top.r, bottom.r), mix(top.g, bottom.g), mix(top.b, bottom.b));
19794
+ }
19795
+ //#endregion
19624
19796
  //#region ../theme-core/src/site-styles/runtimeCompiler.ts
19625
19797
  function defineSectionForegroundRuntimeTokens(input) {
19626
19798
  return {
@@ -20744,9 +20916,7 @@ const curatedSiteStyles = [
20744
20916
  recommendedAppearancePresetIds: [
20745
20917
  "hero-split-editorial",
20746
20918
  "intro-portrait-bio",
20747
- "feature-cards-soft-panels",
20748
- "feature-cards-editorial-columns",
20749
- "feature-cards-photo-tiles",
20919
+ "feature-cards-bold-colors",
20750
20920
  "testimonials-non-carded",
20751
20921
  "faq-contained-help",
20752
20922
  "contact-form-panel"
@@ -21390,8 +21560,7 @@ const curatedSiteStyles = [
21390
21560
  "intro-portrait-bio",
21391
21561
  "feature-cards-editorial-columns",
21392
21562
  "feature-cards-editorial-diptych",
21393
- "feature-cards-editorial-pathways",
21394
- "feature-cards-soft-panels",
21563
+ "feature-cards-bold-colors",
21395
21564
  "events-lined-panel",
21396
21565
  "testimonials-non-carded",
21397
21566
  "faq-base-accordion",
@@ -22451,7 +22620,7 @@ function generateHeaderCss(options) {
22451
22620
  }));
22452
22621
  cssChunks.push(generateLogoTextBehaviorStyles(header.logoText, themeId));
22453
22622
  cssChunks.push(generateHeaderNavLinkStyles(header, themeId, tokens, theme, headerContrastTreatment, headerNavTextSize));
22454
- cssChunks.push(generateDropdownContainerStyles(header, themeId, tokens));
22623
+ cssChunks.push(generateDropdownContainerStyles(header, themeId, tokens, theme));
22455
22624
  cssChunks.push(generateDropdownLinkStyles(header, themeId, tokens, theme));
22456
22625
  cssChunks.push(generateDropdownCaretStyles(themeId));
22457
22626
  cssChunks.push(generateDropdownTriggerOverrides(header, themeId));
@@ -22538,15 +22707,14 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
22538
22707
  /**
22539
22708
  * Generate dropdown menu container styles
22540
22709
  */
22541
- function generateDropdownContainerStyles(header, themeId, tokens) {
22710
+ function generateDropdownContainerStyles(header, themeId, tokens, theme) {
22542
22711
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
22543
22712
  const rules = [];
22544
22713
  const dropdownStyle = header.dropdownStyle;
22545
22714
  rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
22546
- const bgToken = dropdownStyle?.background ?? "surface";
22547
- rules.push(`background-color: ${tokens.getColor(bgToken)};`);
22548
- const textToken = dropdownStyle?.textColor ?? "text";
22549
- rules.push(`color: ${tokens.getColor(textToken)};`);
22715
+ const surface = resolveDropdownSurface(header, theme);
22716
+ rules.push(`background-color: ${tokens.getColor(surface.backgroundToken)};`);
22717
+ rules.push(...surface.declarations(tokens));
22550
22718
  const borderToken = dropdownStyle?.borderColor;
22551
22719
  if (borderToken === null) rules.push(`border: none;`);
22552
22720
  else rules.push(`border: 1px solid ${tokens.getColor(borderToken ?? "border")};`);
@@ -22564,7 +22732,7 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
22564
22732
  }
22565
22733
  function generateDropdownLinkStyles(header, themeId, tokens, theme) {
22566
22734
  const configuredDropdownStyle = header.dropdownStyle;
22567
- const textColorToken = configuredDropdownStyle?.textColor ?? ((header.navColor ?? header.textColor)?.trim() || "text");
22735
+ const textColorToken = resolveDropdownSurface(header, theme).textToken;
22568
22736
  const hoverBgToken = configuredDropdownStyle?.hoverBackground ?? textColorToken;
22569
22737
  const hoverEffects = {
22570
22738
  hover: hoverBgToken === null ? [] : [{
@@ -22653,21 +22821,35 @@ ${`:where([data-theme-scope="${themeId}"]) .nav-dropdown-trigger.header-nav-link
22653
22821
  `.trim();
22654
22822
  }
22655
22823
  /**
22824
+ * The dropdown menu and mobile panel share one surface: `dropdownStyle`'s
22825
+ * background, with the text candidate (the dropdown's own colour, then the
22826
+ * header's nav colour) validated against it through the surface contract. The
22827
+ * nav colour is chosen for the header bar, which can be dark or transparent,
22828
+ * so it only carries over when it is legible on the menu too.
22829
+ */
22830
+ function resolveDropdownSurface(header, theme) {
22831
+ const backgroundToken = header.dropdownStyle?.background ?? "surface";
22832
+ const candidate = header.dropdownStyle?.textColor ?? ((header.navColor ?? header.textColor)?.trim() || "text");
22833
+ const foreground = resolveSurfaceForeground({
22834
+ type: "color",
22835
+ color: backgroundToken,
22836
+ textColor: candidate
22837
+ }, expandPalette(theme.palette));
22838
+ return {
22839
+ backgroundToken,
22840
+ textToken: foreground.kind === "known" ? foreground.roles.text : candidate,
22841
+ declarations: (tokens) => foreground.kind === "known" ? surfaceForegroundDeclarations(surfaceForegroundInputFromResolved(foreground, (token) => tokens.getColor(token))) : [`color: ${tokens.getColor(candidate)};`]
22842
+ };
22843
+ }
22844
+ /**
22656
22845
  * Generate mobile navigation panel styles
22657
22846
  * Uses the same dropdownStyle settings as the desktop dropdown menus
22658
22847
  */
22659
22848
  function generateMobilePanelStyles(header, themeId, tokens, theme) {
22660
22849
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-mobile-panel`;
22661
22850
  const selfSelector = `:where(.nav-mobile-panel[data-theme-scope="${themeId}"])`;
22662
- const dropdownStyle = header.dropdownStyle;
22663
- const bgToken = dropdownStyle?.background ?? "surface";
22664
- const textToken = dropdownStyle?.textColor ?? "text";
22665
- const foreground = resolveSurfaceForeground({
22666
- type: "color",
22667
- color: bgToken,
22668
- textColor: textToken
22669
- }, expandPalette(theme.palette));
22670
- const body = renderCssDeclarations([`background-color: ${tokens.getColor(bgToken)};`, ...foreground.kind === "known" ? surfaceForegroundDeclarations(surfaceForegroundInputFromResolved(foreground, (token) => tokens.getColor(token))) : [`color: ${tokens.getColor(textToken)};`]]);
22851
+ const surface = resolveDropdownSurface(header, theme);
22852
+ const body = renderCssDeclarations([`background-color: ${tokens.getColor(surface.backgroundToken)};`, ...surface.declarations(tokens)]);
22671
22853
  return `\n${selector} {\n ${body}\n}\n\n${selfSelector} {\n ${body}\n}\n`;
22672
22854
  }
22673
22855
  /**
@@ -22980,15 +23162,11 @@ function resolveContextualButtonStyles(background, foreground, context, options)
22980
23162
  if (!paletteCache.has(palette)) paletteCache.set(palette, surfaceCache);
22981
23163
  const cached = surfaceCache.get(cacheKey);
22982
23164
  if (cached) return cached;
22983
- const styles = Object.fromEntries(VARIANT_ROLES.flatMap((role) => {
22984
- const resolution = resolveContextualButtonRole({
22985
- role,
22986
- buttonSystem,
22987
- palette,
22988
- surface: surface.surface
22989
- });
22990
- return Object.entries(contextualButtonSurfaceStyles(resolution));
22991
- }));
23165
+ const styles = knownSurfaceButtonContextStyles({
23166
+ surface: surface.surface,
23167
+ palette,
23168
+ buttonSystem
23169
+ });
22992
23170
  surfaceCache.set(cacheKey, styles);
22993
23171
  return styles;
22994
23172
  }
@@ -29073,6 +29251,94 @@ function deepEqualJsonValue(left, right) {
29073
29251
  return false;
29074
29252
  }
29075
29253
  //#endregion
29254
+ //#region ../commerce/src/purchase/checkoutSessionMetadata.ts
29255
+ const datedOfferingSharedEngineMetadataShape = {
29256
+ datedOfferingEngineContractVersion: z$1.literal("shared_v1"),
29257
+ datedOfferingEngineRouteKind: z$1.literal("shared_whole_series_registration"),
29258
+ datedOfferingCapacityHoldId: z$1.string().uuid(),
29259
+ datedOfferingCapacityHoldAuditRef: z$1.string().uuid(),
29260
+ customerId: z$1.string().uuid(),
29261
+ eventSeriesId: z$1.string().uuid()
29262
+ };
29263
+ z$1.object(datedOfferingSharedEngineMetadataShape);
29264
+ const orderCheckoutSessionMetadataBaseShape = {
29265
+ type: z$1.literal("order"),
29266
+ site_id: z$1.string().uuid(),
29267
+ order_id: z$1.string().uuid().optional(),
29268
+ customer_email: z$1.string().email().optional(),
29269
+ customer_name: z$1.string().optional(),
29270
+ product_id: z$1.string().uuid().optional(),
29271
+ attendee_id: z$1.string().uuid().optional(),
29272
+ occurrence_id: z$1.string().uuid().optional(),
29273
+ tickets_count: z$1.string().optional(),
29274
+ notes: z$1.string().optional(),
29275
+ discount_redemption_id: z$1.string().uuid().optional(),
29276
+ discount_code_id: z$1.string().uuid().optional(),
29277
+ discount_code: z$1.string().optional(),
29278
+ discount_public_label: z$1.string().optional(),
29279
+ credit_reservation_id: z$1.string().uuid().optional(),
29280
+ credit_reserved_cents: z$1.string().optional(),
29281
+ discount_code_amount_cents: z$1.string().optional(),
29282
+ order_payment_reason: z$1.enum([
29283
+ "instalment_payoff",
29284
+ "flexible_balance_initial",
29285
+ "flexible_balance_paydown"
29286
+ ]).optional(),
29287
+ order_payment_plan_id: z$1.string().uuid().optional(),
29288
+ order_flexible_balance_contract_id: z$1.string().uuid().optional()
29289
+ };
29290
+ const absentDatedOfferingSharedEngineMetadataShape = {
29291
+ datedOfferingEngineContractVersion: z$1.never().optional(),
29292
+ datedOfferingEngineRouteKind: z$1.never().optional(),
29293
+ datedOfferingCapacityHoldId: z$1.never().optional(),
29294
+ datedOfferingCapacityHoldAuditRef: z$1.never().optional(),
29295
+ customerId: z$1.never().optional(),
29296
+ eventSeriesId: z$1.never().optional()
29297
+ };
29298
+ const LegacyOrderCheckoutSessionMetadataSchema = z$1.object({
29299
+ ...orderCheckoutSessionMetadataBaseShape,
29300
+ ...absentDatedOfferingSharedEngineMetadataShape
29301
+ });
29302
+ const SharedDatedOfferingOrderCheckoutSessionMetadataSchema = z$1.object({
29303
+ ...orderCheckoutSessionMetadataBaseShape,
29304
+ ...datedOfferingSharedEngineMetadataShape
29305
+ });
29306
+ z$1.union([SharedDatedOfferingOrderCheckoutSessionMetadataSchema, LegacyOrderCheckoutSessionMetadataSchema]);
29307
+ //#endregion
29308
+ //#region ../commerce/src/purchase/stripeCommissionMetadata.ts
29309
+ /** Reasons are payment evidence, not an independent pricing policy. */
29310
+ const STRIPE_COMMISSION_FREE_REASONS = [
29311
+ "managed_billing",
29312
+ "no_commission_plan",
29313
+ "billing_evidence_invalid",
29314
+ "fee_rounds_to_zero",
29315
+ "payment_not_stripe"
29316
+ ];
29317
+ const historicalContext = {
29318
+ currency: z$1.string().refine((value) => parseCurrencyCode(value) !== null).optional(),
29319
+ sourcePlanId: z$1.string().trim().min(1).optional()
29320
+ };
29321
+ const percentSchema = z$1.number().finite().min(0).max(100);
29322
+ z$1.discriminatedUnion("kind", [
29323
+ z$1.object({
29324
+ kind: z$1.literal("commission_free"),
29325
+ reason: z$1.enum(STRIPE_COMMISSION_FREE_REASONS),
29326
+ ...historicalContext
29327
+ }),
29328
+ z$1.object({
29329
+ kind: z$1.literal("application_fee_amount"),
29330
+ amountCents: z$1.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
29331
+ percent: percentSchema,
29332
+ ...historicalContext
29333
+ }),
29334
+ z$1.object({
29335
+ kind: z$1.literal("application_fee_percent"),
29336
+ percent: percentSchema,
29337
+ ...historicalContext
29338
+ })
29339
+ ]);
29340
+ toNonNegativeCents(0);
29341
+ //#endregion
29076
29342
  //#region ../blocks/src/system/runtime/nodes/booking-form.state.ts
29077
29343
  function toTrimmedString(value) {
29078
29344
  const trimmed = value?.trim();
@@ -29257,6 +29523,13 @@ const STRUCTURED_KEYS = /* @__PURE__ */ new Set([
29257
29523
  "domainOperationProvider",
29258
29524
  "domainOperationError",
29259
29525
  "domainOperationMetadata",
29526
+ "previewDecision",
29527
+ "previewOutcome",
29528
+ "previewTokenTtlBucket",
29529
+ "previewRefreshCookiePresent",
29530
+ "previewDashboardStatus",
29531
+ "previewProviderResult",
29532
+ "previewUpstreamStatus",
29260
29533
  "durationMs",
29261
29534
  "duration",
29262
29535
  "status",
@@ -34024,14 +34297,18 @@ function buildEventCombinedInteractiveIslandProps(props) {
34024
34297
  * @param needsPaymentStep - Whether user must complete payment method selection
34025
34298
  * @returns Array of wizard steps to display
34026
34299
  */
34027
- function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
34300
+ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep, paymentActive = false) {
34028
34301
  const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : [
34029
34302
  "select-event",
34030
34303
  "select-tickets",
34031
34304
  "enter-details"
34032
34305
  ];
34033
34306
  if (!needsPaymentStep) return baseSteps;
34034
- return [...baseSteps, "select-payment"];
34307
+ return paymentActive ? [
34308
+ ...baseSteps,
34309
+ "select-payment",
34310
+ "payment"
34311
+ ] : [...baseSteps, "select-payment"];
34035
34312
  }
34036
34313
  function eventMatchesOccurrenceId(event, occurrenceId) {
34037
34314
  return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
@@ -34148,6 +34425,7 @@ const EVENT_REGISTRATION_SHELL_STEP_LABELS = [
34148
34425
  "Date",
34149
34426
  "Tickets",
34150
34427
  "Details",
34428
+ "Payment options",
34151
34429
  "Payment"
34152
34430
  ];
34153
34431
  const eventRegistrationPublicEventSchema = z$1.preprocess(normalizeEventRegistrationEventInput, publicEventSchema);
@@ -34290,12 +34568,13 @@ function shellLabelForRegistrationStep(step, events) {
34290
34568
  switch (step) {
34291
34569
  case "select-event": return isDateSelection(events) ? "Date" : "Event";
34292
34570
  case "select-tickets": return "Tickets";
34571
+ case "fully-booked":
34293
34572
  case "enter-details": return "Details";
34294
- case "select-payment": return "Payment";
34573
+ case "select-payment": return "Payment options";
34574
+ case "payment": return "Payment";
34295
34575
  case "error":
34296
34576
  case "success":
34297
34577
  case "submitting":
34298
- case "redirecting":
34299
34578
  case "verifying-payment":
34300
34579
  case "verifying-timeout":
34301
34580
  case "payment-status":
@@ -34307,7 +34586,7 @@ function isDateSelection(events) {
34307
34586
  return Boolean(events.length > 1 && firstSeriesId && events.every((event) => event.seriesId === firstSeriesId));
34308
34587
  }
34309
34588
  function buildEventRegistrationShellBodyText(stepLabels) {
34310
- if (stepLabels.includes("Payment")) return "Preparing tickets, details, and payment options.";
34589
+ if (stepLabels.includes("Payment options")) return "Preparing tickets, details, and payment options.";
34311
34590
  if (stepLabels[0] === "Tickets") return "Preparing tickets and booking details.";
34312
34591
  return "Preparing dates, tickets, and booking details.";
34313
34592
  }
@@ -35230,7 +35509,7 @@ function buildPassesMembershipsDisplay(options) {
35230
35509
  product: pass
35231
35510
  } : {
35232
35511
  kind: "unavailable",
35233
- label: "Online purchasing coming soon."
35512
+ label: "Online purchasing is unavailable."
35234
35513
  }
35235
35514
  };
35236
35515
  });
@@ -35240,7 +35519,14 @@ function buildPassesMembershipsDisplay(options) {
35240
35519
  description: options.showDescriptions ? membership.description : null,
35241
35520
  priceLabel: formatCommercePrice(membership.price, membership.currency),
35242
35521
  intervalLabel: formatInterval(membership.billingInterval),
35243
- actionLabel: options.membershipActionLabel
35522
+ action: membership.purchaseAvailability === "purchasable" ? {
35523
+ kind: "purchase",
35524
+ label: options.membershipActionLabel,
35525
+ product: membership
35526
+ } : {
35527
+ kind: "unavailable",
35528
+ label: "Online purchasing is unavailable."
35529
+ }
35244
35530
  }));
35245
35531
  return {
35246
35532
  kind: "passes-memberships",
@@ -35460,7 +35746,14 @@ const membershipCardDisplaySchema = z$1.object({
35460
35746
  description: z$1.string().nullable(),
35461
35747
  priceLabel: z$1.string(),
35462
35748
  intervalLabel: z$1.string(),
35463
- actionLabel: z$1.string()
35749
+ action: z$1.discriminatedUnion("kind", [z$1.object({
35750
+ kind: z$1.literal("purchase"),
35751
+ label: z$1.string(),
35752
+ product: purchasablePublicMembershipProductSchema
35753
+ }), z$1.object({
35754
+ kind: z$1.literal("unavailable"),
35755
+ label: z$1.string()
35756
+ })])
35464
35757
  });
35465
35758
  const passesMembershipsDisplaySchema = z$1.object({
35466
35759
  kind: z$1.literal("passes-memberships"),
@@ -38474,7 +38767,8 @@ const CLIENT_ERROR_REPORT_LIMITS = {
38474
38767
  stack: 8e3,
38475
38768
  digest: 128,
38476
38769
  componentStack: 8e3,
38477
- sourceLocation: 1024
38770
+ sourceLocation: 1024,
38771
+ navigationAgeMs: 6e4
38478
38772
  };
38479
38773
  const clientErrorEventSchema = z$1.enum([
38480
38774
  "dashboard:route-error",
@@ -38491,7 +38785,17 @@ z$1.object({
38491
38785
  stack: z$1.string().max(CLIENT_ERROR_REPORT_LIMITS.stack).nullable(),
38492
38786
  digest: z$1.string().max(CLIENT_ERROR_REPORT_LIMITS.digest).nullable(),
38493
38787
  componentStack: z$1.string().max(CLIENT_ERROR_REPORT_LIMITS.componentStack).nullable(),
38494
- sourceLocation: z$1.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable()
38788
+ sourceLocation: z$1.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable(),
38789
+ navigation: z$1.object({
38790
+ fromPathname: z$1.string().regex(/^\/[^?#]*$/).max(CLIENT_ERROR_REPORT_LIMITS.pathname),
38791
+ toPathname: z$1.string().regex(/^\/[^?#]*$/).max(CLIENT_ERROR_REPORT_LIMITS.pathname),
38792
+ type: z$1.enum([
38793
+ "push",
38794
+ "replace",
38795
+ "traverse"
38796
+ ]),
38797
+ ageMs: z$1.number().int().min(0).max(CLIENT_ERROR_REPORT_LIMITS.navigationAgeMs)
38798
+ }).strict().nullable().optional()
38495
38799
  }).strict();
38496
38800
  const API_ENDPOINTS$1 = {
38497
38801
  ...SITE_LIFECYCLE_ENDPOINT_DEFINITIONS,
@@ -42248,24 +42552,6 @@ const API_ENDPOINTS$1 = {
42248
42552
  "server:internal_error"
42249
42553
  ]
42250
42554
  },
42251
- syncBookingPassWithStripe: {
42252
- path: "/sites/{siteId}/bookings/passes/{passId}/sync-stripe",
42253
- method: "POST",
42254
- tags: [
42255
- "site-{siteId}",
42256
- "passes-{siteId}",
42257
- "pass-{passId}"
42258
- ],
42259
- auth: "user",
42260
- responseKind: "json",
42261
- errors: [
42262
- "validation:invalid_input",
42263
- "auth:forbidden",
42264
- "resource:not_found",
42265
- "resource:conflict",
42266
- "server:internal_error"
42267
- ]
42268
- },
42269
42555
  refundCustomerPass: {
42270
42556
  path: "/sites/{siteId}/bookings/customer-passes/{customerPassId}/refund",
42271
42557
  method: "POST",
@@ -43729,7 +44015,7 @@ const API_ENDPOINTS$1 = {
43729
44015
  ]
43730
44016
  },
43731
44017
  cancelFlexibleBalanceBookingDueToNonPayment: {
43732
- path: "/sites/{siteId}/shop/orders/{orderId}/items/{orderItemId}/flexible-balance/cancel-due-to-non-payment",
44018
+ path: "/sites/{siteId}/shop/orders/{orderId}/flexible-balance/cancel-due-to-non-payment",
43733
44019
  method: "POST",
43734
44020
  auth: "user",
43735
44021
  responseKind: "json",
@@ -43740,7 +44026,7 @@ const API_ENDPOINTS$1 = {
43740
44026
  ]
43741
44027
  },
43742
44028
  reopenFlexibleBalanceBookingAfterNonPaymentCancellation: {
43743
- path: "/sites/{siteId}/shop/orders/{orderId}/items/{orderItemId}/flexible-balance/reopen",
44029
+ path: "/sites/{siteId}/shop/orders/{orderId}/flexible-balance/reopen",
43744
44030
  method: "POST",
43745
44031
  auth: "user",
43746
44032
  responseKind: "json",
@@ -46277,6 +46563,16 @@ const defaultTransforms = createTransformRegistry([
46277
46563
  return resolveCalendarReadProfile(asPartialObject(value) ?? {});
46278
46564
  }
46279
46565
  },
46566
+ {
46567
+ id: "events.calendarBanded",
46568
+ kind: "formatter",
46569
+ summary: "Paint the week-board band only on a section with no background of its own",
46570
+ run(value) {
46571
+ const content = asPartialObject(value) ?? {};
46572
+ const sectionStyles = asPartialObject(content._sectionStyles);
46573
+ return content.banded === true && parseBackgroundContent(sectionStyles?.background) === null;
46574
+ }
46575
+ },
46280
46576
  ...formattingTransforms,
46281
46577
  ...layoutTransforms,
46282
46578
  ...chromeLogoTransforms,
@@ -48064,11 +48360,18 @@ function AppointmentServicesNode({ sectionHeading, categoryId, services, pathnam
48064
48360
  * card drawn exactly once after hydration, because the client wizard renders its
48065
48361
  * own `.rb-reg-surface`, and leaves no stale loading state on the mounted form.
48066
48362
  * `event-registration.server.tsx` follows the same shape.
48363
+ *
48364
+ * The root also carries `data-block="appointment-booking"`, because the
48365
+ * appointment-booking and registration-surface styles and the block's Tier 3
48366
+ * vars are all scoped under that attribute. On a page the block wrapper
48367
+ * already provides it, but the system service destination and /book render
48368
+ * this form on its own, so without it those routes lose every booking style.
48067
48369
  */
48068
48370
  function BookingFormSSR({ blockId, children, ...sourceProps }) {
48069
48371
  const islandProps = buildBookingFormInteractiveIslandProps(sourceProps);
48070
48372
  const display = islandProps.render.display;
48071
48373
  return /* @__PURE__ */ jsxs("div", {
48374
+ "data-block": "appointment-booking",
48072
48375
  ...getIslandRootProps("booking-form", blockId),
48073
48376
  children: [
48074
48377
  /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
@@ -51251,7 +51554,8 @@ const eventCalendarLayout = [styledSection({
51251
51554
  fallback: false
51252
51555
  } },
51253
51556
  banded: { $bind: {
51254
- from: "content.banded",
51557
+ from: "content",
51558
+ transforms: [{ id: "events.calendarBanded" }],
51255
51559
  fallback: false
51256
51560
  } }
51257
51561
  }))]
@@ -55285,11 +55589,11 @@ function ShopSSR({ blockId, siteId, apiBaseUrl, stage, children, checkoutEndpoin
55285
55589
  }, pass.id)),
55286
55590
  membershipCards: render.display.memberships.map((membership) => /* @__PURE__ */ jsx(MembershipCardView, {
55287
55591
  display: membership,
55288
- action: /* @__PURE__ */ jsx(ThemedButton, {
55592
+ action: membership.action.kind === "unavailable" ? /* @__PURE__ */ jsx(PassPurchaseUnavailable, { label: membership.action.label }) : /* @__PURE__ */ jsx(ThemedButton, {
55289
55593
  type: "button",
55290
55594
  variant: render.hydration.buttonVariant,
55291
55595
  size: "md",
55292
- label: membership.actionLabel,
55596
+ label: membership.action.label,
55293
55597
  disabled: true,
55294
55598
  "aria-disabled": "true"
55295
55599
  })
@@ -56563,6 +56867,172 @@ function generateShadowCssVars(theme) {
56563
56867
  };
56564
56868
  }
56565
56869
  //#endregion
56870
+ //#region ../theme-core/src/blocks/opaquePanels.ts
56871
+ /**
56872
+ * Every element in `blocks-static/` CSS that paints its own background behind
56873
+ * text or buttons, with the palette token it paints.
56874
+ *
56875
+ * The CSS owns layout and the paint itself; this registry owns what the paint
56876
+ * implies. `generateOpaquePanelCss` publishes each panel's foreground contract
56877
+ * and button context from the theme, exactly as card roles and section
56878
+ * backgrounds do, so a white panel inside a dark band never inherits the band's
56879
+ * light text or its band-resolved buttons. `opaquePanels.test.ts` scans the
56880
+ * static CSS and fails when a rule paints a surface token without an entry
56881
+ * here, or when a registered rule declares the contract by hand.
56882
+ *
56883
+ * Selectors are written without the theme-scope prefix; the generator adds it.
56884
+ * A `transparent` entry is a treatment that turns a surface-owning class into
56885
+ * a boxless row, so it hands the surrounding surface's contract back.
56886
+ */
56887
+ const opaquePanels = [
56888
+ {
56889
+ selector: ":where([data-block=\"event-registration\"], [data-block=\"appointment-booking\"]) .rb-reg-surface",
56890
+ paint: {
56891
+ kind: "solid",
56892
+ token: "surface"
56893
+ }
56894
+ },
56895
+ {
56896
+ selector: ":where([data-block='event-registration']) .er-booking-teaser",
56897
+ paint: {
56898
+ kind: "solid",
56899
+ token: "surface"
56900
+ }
56901
+ },
56902
+ {
56903
+ selector: ":where([data-block='event-registration']) .er-booking-bar",
56904
+ paint: {
56905
+ kind: "solid",
56906
+ token: "background"
56907
+ }
56908
+ },
56909
+ {
56910
+ selector: ":where([data-block='event-registration']) .er-modal",
56911
+ paint: {
56912
+ kind: "solid",
56913
+ token: "background"
56914
+ }
56915
+ },
56916
+ {
56917
+ selector: ":where([data-block='event-registration']) .er-booking-overlay__panel",
56918
+ paint: {
56919
+ kind: "solid",
56920
+ token: "background"
56921
+ }
56922
+ },
56923
+ {
56924
+ selector: ":where([data-block='event-calendar']) .event-agenda-card",
56925
+ paint: {
56926
+ kind: "solid",
56927
+ token: "surface"
56928
+ }
56929
+ },
56930
+ {
56931
+ selector: ":where([data-block='event-calendar']) .event-timetable-event",
56932
+ paint: {
56933
+ kind: "solid",
56934
+ token: "surface"
56935
+ }
56936
+ },
56937
+ {
56938
+ selector: ":where([data-block='event-calendar']) .event-week-board",
56939
+ paint: {
56940
+ kind: "solid",
56941
+ token: "surface"
56942
+ }
56943
+ },
56944
+ {
56945
+ selector: ":where([data-block='event-calendar']) .event-week-board-top",
56946
+ paint: {
56947
+ kind: "solid",
56948
+ token: "surfaceAlt"
56949
+ }
56950
+ },
56951
+ {
56952
+ selector: ":where([data-block='event-calendar']) .event-week-board-foot",
56953
+ paint: {
56954
+ kind: "solid",
56955
+ token: "surfaceAlt"
56956
+ }
56957
+ },
56958
+ {
56959
+ selector: ":where([data-block='event-calendar']) .ec-modal",
56960
+ paint: {
56961
+ kind: "solid",
56962
+ token: "surface"
56963
+ }
56964
+ },
56965
+ {
56966
+ selector: ".event-listing-compact-container",
56967
+ paint: {
56968
+ kind: "solid",
56969
+ token: "surface"
56970
+ }
56971
+ },
56972
+ {
56973
+ selector: ".shop__card",
56974
+ paint: {
56975
+ kind: "solid",
56976
+ token: "surface"
56977
+ }
56978
+ },
56979
+ {
56980
+ selector: ".shop--register .shop__card",
56981
+ paint: { kind: "transparent" }
56982
+ },
56983
+ {
56984
+ selector: ":where([data-block=\"shop\"]) .shop__return",
56985
+ paint: {
56986
+ kind: "solid",
56987
+ token: "surface"
56988
+ }
56989
+ },
56990
+ {
56991
+ selector: "[data-block=\"feature-cards\"][data-block-composition=\"asymmetric-emphasis\"] .rb-feature-card:nth-child(even)",
56992
+ paint: {
56993
+ kind: "solid",
56994
+ token: "secondary"
56995
+ }
56996
+ },
56997
+ {
56998
+ selector: ".rb-feature-cards-grid--editorial-diptych .rb-feature-card[data-surface-role=\"panel\"]",
56999
+ paint: {
57000
+ kind: "solid",
57001
+ token: "primary"
57002
+ }
57003
+ },
57004
+ {
57005
+ selector: ":is(.rb-event-list-treatment-ruled-register, .rb-event-list-treatment-editorial-register, .rb-event-list-treatment-dense-index) .event-card.event-card",
57006
+ paint: { kind: "transparent" }
57007
+ },
57008
+ {
57009
+ selector: ".feedback-callout",
57010
+ paint: {
57011
+ kind: "solid",
57012
+ token: "surface"
57013
+ }
57014
+ },
57015
+ {
57016
+ selector: "[data-block=\"gifting\"] .gifting-feedback",
57017
+ paint: {
57018
+ kind: "solid",
57019
+ token: "surface"
57020
+ }
57021
+ }
57022
+ ];
57023
+ /**
57024
+ * Publishes every registered panel's surface contract. Emitted after the card
57025
+ * CSS in both the theme runtime and the SDK theme bridge, so a composition
57026
+ * that recolours a card role (the feature-card diptych panel) or a treatment
57027
+ * that empties one (the event registers) wins over the role's own contract.
57028
+ */
57029
+ function generateOpaquePanelCss(input) {
57030
+ return opaquePanels.map((panel) => {
57031
+ const declarations = opaqueSurfaceDeclarations(panel.paint, input.surface);
57032
+ return `:where([data-theme-scope="${input.themeId}"]) ${panel.selector} {\n ${renderCssDeclarations(declarations)}\n}`;
57033
+ }).join("\n\n");
57034
+ }
57035
+ //#endregion
56566
57036
  //#region ../theme-core/src/styles/border.ts
56567
57037
  /**
56568
57038
  * Border width mapping from Tailwind class names to px values
@@ -57946,7 +58416,7 @@ ${`:where([data-theme-scope="${themeId}"]) :where([data-block="event-registratio
57946
58416
  --er-step-inactive: rgb(var(--tb-mutedText));
57947
58417
  --er-step-completed: rgb(var(--tb-success));
57948
58418
  --er-step-text: rgb(255 255 255);
57949
- --er-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
58419
+ --er-step-text-active: rgb(var(--tb-onPrimary, 255 255 255));
57950
58420
  --er-step-connector: rgba(var(--tb-border), 0.5);
57951
58421
 
57952
58422
  /* Step title */
@@ -57990,7 +58460,7 @@ ${`:where([data-theme-scope="${themeId}"]) :where([data-block="event-registratio
57990
58460
 
57991
58461
  /* Checkmark indicator */
57992
58462
  --er-check-bg: rgb(var(--tb-primary));
57993
- --er-check-text: rgb(var(--tb-primaryText, 255 255 255));
58463
+ --er-check-text: rgb(var(--tb-onPrimary, 255 255 255));
57994
58464
 
57995
58465
  /* Order summary */
57996
58466
  --er-summary-bg: rgba(var(--tb-primary), 0.1);
@@ -58202,7 +58672,7 @@ ${`:where([data-theme-scope="${themeId}"]) :where([data-block="appointment-booki
58202
58672
  --rb-reg-step-completed: rgb(var(--tb-success));
58203
58673
  --rb-reg-step-inactive: rgb(var(--tb-mutedText));
58204
58674
  --rb-reg-step-text: rgb(255 255 255);
58205
- --rb-reg-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
58675
+ --rb-reg-step-text-active: rgb(var(--tb-onPrimary, 255 255 255));
58206
58676
  --rb-reg-step-connector: rgba(var(--tb-border), 0.5);
58207
58677
  --rb-reg-summary-bg: var(--ab-muted-bg);
58208
58678
  --rb-reg-summary-border: var(--ab-card-border);
@@ -58954,11 +59424,14 @@ function buildThemeRuntime$1(theme, options) {
58954
59424
  themeId,
58955
59425
  theme
58956
59426
  });
58957
- const cardCss = generateCardCss({
59427
+ const cardCss = [generateCardCss({
58958
59428
  themeId,
58959
59429
  theme,
58960
59430
  cardSystem: theme.cards
58961
- });
59431
+ }), generateOpaquePanelCss({
59432
+ themeId,
59433
+ surface: opaqueSurfaceContextFromTheme(theme)
59434
+ })].join("\n\n");
58962
59435
  const accordionCss = generateAccordionCss({
58963
59436
  themeId,
58964
59437
  theme,
@@ -60941,6 +61414,34 @@ function withLookCapability(declaration) {
60941
61414
  }
60942
61415
  };
60943
61416
  }
61417
+ /**
61418
+ * The section background paints a block's own `_sectionStyles.background`
61419
+ * field admits, read from its manifest so the design capability cannot drift
61420
+ * from what render admission accepts. A block without the field admits none.
61421
+ */
61422
+ function sectionBackgroundPaintsOfFields(fields) {
61423
+ const sectionStyles = fields.find((field) => field.id === "_sectionStyles");
61424
+ if (!sectionStyles || sectionStyles.type !== "modal") return [];
61425
+ const background = sectionStyles.schema.fields.find((field) => field.id === "background");
61426
+ if (!background || background.type !== "tabGroup") return [];
61427
+ const tabIds = new Set(background.tabs.map((tab) => tab.id));
61428
+ return [
61429
+ "color",
61430
+ "gradient",
61431
+ "image"
61432
+ ].filter((paint) => tabIds.has(paint));
61433
+ }
61434
+ /** Pins a designed capability's section background paints to the block's manifest. */
61435
+ function withManifestSectionBackgroundPaints(declaration, fields) {
61436
+ if (declaration.kind !== "capability") return declaration;
61437
+ return {
61438
+ kind: "capability",
61439
+ capability: {
61440
+ ...declaration.capability,
61441
+ sectionBackgroundPaints: sectionBackgroundPaintsOfFields(fields)
61442
+ }
61443
+ };
61444
+ }
60944
61445
  function declareNoBlockDesignCapability(reason) {
60945
61446
  return {
60946
61447
  kind: "none",
@@ -62725,6 +63226,20 @@ const footerEngagement = stack({
62725
63226
  ...footerSpamProtectionBinding
62726
63227
  }), [], when("module.engagement.kind", { equals: "mailing-list" }))
62727
63228
  ], when("module.kind", { equals: "engagement" }));
63229
+ const platformAttribution = el("div", {
63230
+ className: "rb-caption",
63231
+ "data-site-attribution": "macadamia"
63232
+ }, [
63233
+ text({ as: "span" }, bind("module.lead")),
63234
+ text({
63235
+ as: "span",
63236
+ value: " "
63237
+ }),
63238
+ link({
63239
+ href: { $bind: { from: "module.link.href" } },
63240
+ className: "footer-nav-link rb-caption transition-theme-standard"
63241
+ }, [text({ as: "span" }, bind("module.link.label"))])
63242
+ ], when("module.kind", { equals: "attribution" }));
62728
63243
  const footerGroup = stack({
62729
63244
  gap: "md",
62730
63245
  align: "stretch",
@@ -62754,6 +63269,7 @@ const footerGroup = stack({
62754
63269
  hours,
62755
63270
  socials,
62756
63271
  footerEngagement,
63272
+ platformAttribution,
62757
63273
  stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
62758
63274
  stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
62759
63275
  ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
@@ -67998,7 +68514,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
67998
68514
  if (definition.manifest.name !== blockKind) throw new Error(`System block kind mismatch: expected ${blockKind}, received ${definition.manifest.name}.`);
67999
68515
  return {
68000
68516
  ...definition,
68001
- designCapability,
68517
+ designCapability: withManifestSectionBackgroundPaints(designCapability, definition.manifest.fields),
68002
68518
  designMetadata,
68003
68519
  manifest: {
68004
68520
  ...definition.manifest,
@@ -69158,7 +69674,7 @@ function getBlockOverride(blockKind, overrides) {
69158
69674
  */
69159
69675
  function getRenderableContent(block, previewStage = "published") {
69160
69676
  const source = previewStage === "preview" && block.draftContent ? block.draftContent : block.content ?? {};
69161
- return isObjectRecord$1(source) ? stripStaleTransitionStyleGroup(source) : {};
69677
+ return isObjectRecord$3(source) ? stripStaleTransitionStyleGroup(source) : {};
69162
69678
  }
69163
69679
  //#endregion
69164
69680
  //#region ../blocks/src/system/manifest/hydrateLinks.ts
@@ -74521,140 +75037,17 @@ const containerResponsiveThemeCss = `/*
74521
75037
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
74522
75038
  padding: clamp(1rem, 2vw, 1.5rem);
74523
75039
  background: var(--rb-reg-surface-bg, rgb(var(--tb-surface, 248 250 252)));
74524
- color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
74525
- --rb-surface-text-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
74526
- --rb-surface-heading-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
74527
- --rb-surface-link-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
74528
- --rb-surface-link-hover-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
74529
- --rb-surface-link-hover-decoration: underline;
74530
- --rb-surface-supporting-color: var(--rb-reg-on-surface-muted, var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42)))));
75040
+ /* The panel paints its own surface, so it owns its foreground and its
75041
+ * button context. Both are published from the theme by the opaque-panel
75042
+ * registry (theme-core/src/blocks/opaquePanels.ts): an enclosing brand band
75043
+ * would otherwise hand its light text and band-resolved buttons (on Anna's
75044
+ * therapy page, a white-on-white Continue) to this light panel. */
74531
75045
  transition: border-color var(--rb-block-transition, 150ms) ease;
74532
75046
  width: 100%;
74533
75047
  max-width: 800px;
74534
75048
  margin-inline: 0;
74535
75049
  }
74536
75050
 
74537
- /* The panel paints its own opaque surface, so it also has to break the button
74538
- * colour contract it inherits. An enclosing section that sits on a brand band
74539
- * publishes \`--rb-action-*\` variables resolved against *that* band — on Anna's
74540
- * therapy page a ghost primary: transparent background, white label. Those
74541
- * variables inherit, so without this reset a Continue button inside the light
74542
- * form panel renders white-on-white and only appears on hover.
74543
- *
74544
- * Resetting to \`initial\` sends each button back to the generated fallback in
74545
- * its own rule (\`var(--rb-action-…, rgb(var(--tb-primary)))\`), which is the
74546
- * theme's standard button resolved against a normal surface — correct here,
74547
- * because this panel *is* a normal surface.
74548
- *
74549
- * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
74550
- * pairing is pinned by registration-surface-action-reset.test.ts. */
74551
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
74552
- --rb-action-primary-base-background-color: initial;
74553
- --rb-action-primary-base-background-image: initial;
74554
- --rb-action-primary-base-color: initial;
74555
- --rb-action-primary-hover-background-color: initial;
74556
- --rb-action-primary-hover-background-image: initial;
74557
- --rb-action-primary-hover-color: initial;
74558
- --rb-action-primary-focus-background-color: initial;
74559
- --rb-action-primary-focus-background-image: initial;
74560
- --rb-action-primary-focus-color: initial;
74561
- --rb-action-primary-active-background-color: initial;
74562
- --rb-action-primary-active-background-image: initial;
74563
- --rb-action-primary-active-color: initial;
74564
- --rb-action-primary-disabled-background-color: initial;
74565
- --rb-action-primary-disabled-background-image: initial;
74566
- --rb-action-primary-disabled-color: initial;
74567
- --rb-action-primary-base-outline: initial;
74568
- --rb-action-primary-base-outline-offset: initial;
74569
- --rb-action-primary-focus-outline: initial;
74570
- --rb-action-primary-focus-outline-offset: initial;
74571
- --rb-action-primary-focus-box-shadow: initial;
74572
-
74573
- --rb-action-secondary-base-background-color: initial;
74574
- --rb-action-secondary-base-background-image: initial;
74575
- --rb-action-secondary-base-color: initial;
74576
- --rb-action-secondary-hover-background-color: initial;
74577
- --rb-action-secondary-hover-background-image: initial;
74578
- --rb-action-secondary-hover-color: initial;
74579
- --rb-action-secondary-focus-background-color: initial;
74580
- --rb-action-secondary-focus-background-image: initial;
74581
- --rb-action-secondary-focus-color: initial;
74582
- --rb-action-secondary-active-background-color: initial;
74583
- --rb-action-secondary-active-background-image: initial;
74584
- --rb-action-secondary-active-color: initial;
74585
- --rb-action-secondary-disabled-background-color: initial;
74586
- --rb-action-secondary-disabled-background-image: initial;
74587
- --rb-action-secondary-disabled-color: initial;
74588
- --rb-action-secondary-base-outline: initial;
74589
- --rb-action-secondary-base-outline-offset: initial;
74590
- --rb-action-secondary-focus-outline: initial;
74591
- --rb-action-secondary-focus-outline-offset: initial;
74592
- --rb-action-secondary-focus-box-shadow: initial;
74593
-
74594
- --rb-action-outline-base-background-color: initial;
74595
- --rb-action-outline-base-background-image: initial;
74596
- --rb-action-outline-base-color: initial;
74597
- --rb-action-outline-hover-background-color: initial;
74598
- --rb-action-outline-hover-background-image: initial;
74599
- --rb-action-outline-hover-color: initial;
74600
- --rb-action-outline-focus-background-color: initial;
74601
- --rb-action-outline-focus-background-image: initial;
74602
- --rb-action-outline-focus-color: initial;
74603
- --rb-action-outline-active-background-color: initial;
74604
- --rb-action-outline-active-background-image: initial;
74605
- --rb-action-outline-active-color: initial;
74606
- --rb-action-outline-disabled-background-color: initial;
74607
- --rb-action-outline-disabled-background-image: initial;
74608
- --rb-action-outline-disabled-color: initial;
74609
- --rb-action-outline-base-outline: initial;
74610
- --rb-action-outline-base-outline-offset: initial;
74611
- --rb-action-outline-focus-outline: initial;
74612
- --rb-action-outline-focus-outline-offset: initial;
74613
- --rb-action-outline-focus-box-shadow: initial;
74614
-
74615
- --rb-action-ghost-base-background-color: initial;
74616
- --rb-action-ghost-base-background-image: initial;
74617
- --rb-action-ghost-base-color: initial;
74618
- --rb-action-ghost-hover-background-color: initial;
74619
- --rb-action-ghost-hover-background-image: initial;
74620
- --rb-action-ghost-hover-color: initial;
74621
- --rb-action-ghost-focus-background-color: initial;
74622
- --rb-action-ghost-focus-background-image: initial;
74623
- --rb-action-ghost-focus-color: initial;
74624
- --rb-action-ghost-active-background-color: initial;
74625
- --rb-action-ghost-active-background-image: initial;
74626
- --rb-action-ghost-active-color: initial;
74627
- --rb-action-ghost-disabled-background-color: initial;
74628
- --rb-action-ghost-disabled-background-image: initial;
74629
- --rb-action-ghost-disabled-color: initial;
74630
- --rb-action-ghost-base-outline: initial;
74631
- --rb-action-ghost-base-outline-offset: initial;
74632
- --rb-action-ghost-focus-outline: initial;
74633
- --rb-action-ghost-focus-outline-offset: initial;
74634
- --rb-action-ghost-focus-box-shadow: initial;
74635
-
74636
- --rb-action-accent-base-background-color: initial;
74637
- --rb-action-accent-base-background-image: initial;
74638
- --rb-action-accent-base-color: initial;
74639
- --rb-action-accent-hover-background-color: initial;
74640
- --rb-action-accent-hover-background-image: initial;
74641
- --rb-action-accent-hover-color: initial;
74642
- --rb-action-accent-focus-background-color: initial;
74643
- --rb-action-accent-focus-background-image: initial;
74644
- --rb-action-accent-focus-color: initial;
74645
- --rb-action-accent-active-background-color: initial;
74646
- --rb-action-accent-active-background-image: initial;
74647
- --rb-action-accent-active-color: initial;
74648
- --rb-action-accent-disabled-background-color: initial;
74649
- --rb-action-accent-disabled-background-image: initial;
74650
- --rb-action-accent-disabled-color: initial;
74651
- --rb-action-accent-base-outline: initial;
74652
- --rb-action-accent-base-outline-offset: initial;
74653
- --rb-action-accent-focus-outline: initial;
74654
- --rb-action-accent-focus-outline-offset: initial;
74655
- --rb-action-accent-focus-box-shadow: initial;
74656
- }
74657
-
74658
75051
  /* Selectable option card */
74659
75052
  :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
74660
75053
  position: relative;
@@ -74714,7 +75107,7 @@ const containerResponsiveThemeCss = `/*
74714
75107
  :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
74715
75108
  width: 0.75rem;
74716
75109
  height: 0.75rem;
74717
- color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
75110
+ color: var(--rb-reg-check-text, rgb(var(--tb-onPrimary, var(--tb-primaryForeground, 255 255 255))));
74718
75111
  }
74719
75112
 
74720
75113
  /* Step indicator */
@@ -74754,12 +75147,12 @@ const containerResponsiveThemeCss = `/*
74754
75147
 
74755
75148
  :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
74756
75149
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
74757
- color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
75150
+ color: var(--rb-reg-step-text-active, rgb(var(--tb-onPrimary, var(--tb-primaryForeground, 255 255 255))));
74758
75151
  }
74759
75152
 
74760
75153
  :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
74761
75154
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
74762
- color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
75155
+ color: var(--rb-reg-step-text-active, rgb(var(--tb-onPrimary, var(--tb-primaryForeground, 255 255 255))));
74763
75156
  }
74764
75157
 
74765
75158
  :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
@@ -75018,7 +75411,7 @@ const containerResponsiveThemeCss = `/*
75018
75411
  justify-content: center;
75019
75412
  border-radius: calc(var(--rb-block-radius) * 0.6);
75020
75413
  background: rgb(var(--tb-primary));
75021
- color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
75414
+ color: rgb(var(--tb-onPrimary, var(--tb-primaryForeground, 255 255 255)));
75022
75415
  padding: 0.625rem 1rem;
75023
75416
  font-size: 0.875rem;
75024
75417
  font-weight: 600;
@@ -76993,7 +77386,7 @@ const containerResponsiveThemeCss = `/*
76993
77386
  :where(.theme-scope) :where([data-block='event-registration']) .er-modal-btn {
76994
77387
  padding: 0.75rem 1.5rem;
76995
77388
  background: rgb(var(--tb-primary));
76996
- color: rgb(var(--tb-primary-foreground, 255 255 255));
77389
+ color: rgb(var(--tb-onPrimary, 255 255 255));
76997
77390
  border: none;
76998
77391
  border-radius: var(--rb-block-radius);
76999
77392
  font-weight: 500;
@@ -77041,7 +77434,7 @@ const containerResponsiveThemeCss = `/*
77041
77434
  border: 1px solid var(--er-border);
77042
77435
  border-radius: var(--rb-block-radius);
77043
77436
  background: var(--er-event-card-bg);
77044
- color: var(--er-on-surface);
77437
+ /* Foreground and button context: theme-core/src/blocks/opaquePanels.ts. */
77045
77438
  }
77046
77439
 
77047
77440
  :where(.theme-scope)
@@ -77192,7 +77585,7 @@ const containerResponsiveThemeCss = `/*
77192
77585
  min-height: 0;
77193
77586
  overflow: hidden;
77194
77587
  background: rgb(var(--tb-background));
77195
- color: var(--er-on-surface);
77588
+ /* Foreground and button context: theme-core/src/blocks/opaquePanels.ts. */
77196
77589
  }
77197
77590
 
77198
77591
  :where(.theme-scope)
@@ -77959,7 +78352,7 @@ const containerResponsiveThemeCss = `/*
77959
78352
  .event-category-btn--active {
77960
78353
  background-color: rgb(var(--tb-primary));
77961
78354
  border-color: rgb(var(--tb-primary));
77962
- color: var(--ec-event-solid-text);
78355
+ color: rgb(var(--tb-onPrimary));
77963
78356
  }
77964
78357
 
77965
78358
  :where(.theme-scope)
@@ -78026,7 +78419,7 @@ const containerResponsiveThemeCss = `/*
78026
78419
  opacity: 1;
78027
78420
  background-color: rgb(var(--tb-primary));
78028
78421
  border-color: rgb(var(--tb-primary));
78029
- color: rgb(var(--tb-primaryText, 255 255 255));
78422
+ color: rgb(var(--tb-onPrimary, 255 255 255));
78030
78423
  }
78031
78424
 
78032
78425
  /* -----------------------------------------------------------------------------
@@ -78084,7 +78477,7 @@ const containerResponsiveThemeCss = `/*
78084
78477
  text-transform: uppercase;
78085
78478
  letter-spacing: 0.05em;
78086
78479
  background-color: rgb(var(--tb-primary));
78087
- color: rgb(var(--tb-primaryText, 255 255 255));
78480
+ color: rgb(var(--tb-onPrimary, 255 255 255));
78088
78481
  border-radius: var(--rb-button-radius);
78089
78482
  }
78090
78483
 
@@ -78126,7 +78519,8 @@ const containerResponsiveThemeCss = `/*
78126
78519
  border: 1px solid var(--ec-border-subtle);
78127
78520
  border-radius: var(--rb-block-radius);
78128
78521
  text-decoration: none;
78129
- color: inherit;
78522
+ /* Paints its own surface: its foreground and button context come from the
78523
+ * opaque-panel registry (theme-core/src/blocks/opaquePanels.ts). */
78130
78524
  transition: all var(--rb-block-transition) ease;
78131
78525
  }
78132
78526
 
@@ -78460,7 +78854,7 @@ const containerResponsiveThemeCss = `/*
78460
78854
  .event-timetable-day-tab--active {
78461
78855
  background-color: rgb(var(--tb-primary));
78462
78856
  border-color: rgb(var(--tb-primary));
78463
- color: rgb(var(--tb-primaryText, 255 255 255));
78857
+ color: rgb(var(--tb-onPrimary, 255 255 255));
78464
78858
  }
78465
78859
 
78466
78860
  :where(.theme-scope)
@@ -78526,7 +78920,7 @@ const containerResponsiveThemeCss = `/*
78526
78920
  padding: 0.125rem 0.375rem;
78527
78921
  border-radius: var(--rb-button-radius);
78528
78922
  background-color: rgb(var(--tb-primary));
78529
- color: rgb(var(--tb-primaryText, 255 255 255));
78923
+ color: rgb(var(--tb-onPrimary, 255 255 255));
78530
78924
  font-size: 0.625rem;
78531
78925
  font-weight: 700;
78532
78926
  text-transform: uppercase;
@@ -78582,7 +78976,6 @@ const containerResponsiveThemeCss = `/*
78582
78976
  border-left-width: 4px;
78583
78977
  border-radius: calc(var(--rb-block-radius) / 1.5);
78584
78978
  background-color: var(--ec-surface);
78585
- color: var(--ec-text);
78586
78979
  box-shadow: 0 1px 2px rgba(var(--tb-text), 0.08);
78587
78980
  cursor: pointer;
78588
78981
  font: inherit;
@@ -78755,7 +79148,6 @@ const containerResponsiveThemeCss = `/*
78755
79148
  border: 1px solid var(--ec-border);
78756
79149
  border-radius: var(--rb-block-radius);
78757
79150
  background-color: var(--ec-surface);
78758
- color: var(--ec-text);
78759
79151
  overflow: hidden;
78760
79152
  }
78761
79153
 
@@ -79705,7 +80097,7 @@ const containerResponsiveThemeCss = `/*
79705
80097
  justify-content: center;
79706
80098
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.6);
79707
80099
  background: rgb(var(--tb-primary, 17 24 39));
79708
- color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
80100
+ color: rgb(var(--tb-onPrimary, var(--tb-primaryForeground, 255 255 255)));
79709
80101
  padding: 0.625rem 1rem;
79710
80102
  font-size: 0.875rem;
79711
80103
  font-weight: 600;
@@ -80143,7 +80535,7 @@ const containerResponsiveThemeCss = `/*
80143
80535
 
80144
80536
  :where(.theme-scope) .event-reset-filters-btn:hover {
80145
80537
  background-color: rgb(var(--tb-primary));
80146
- color: rgb(var(--tb-primaryText, 255 255 255));
80538
+ color: rgb(var(--tb-onPrimary, 255 255 255));
80147
80539
  }
80148
80540
 
80149
80541
  :where(.theme-scope) .event-reset-filters-btn:focus-visible {
@@ -80501,14 +80893,8 @@ const containerResponsiveThemeCss = `/*
80501
80893
  border: 0;
80502
80894
  border-bottom: 1px solid color-mix(in oklab, currentColor, transparent 78%);
80503
80895
  border-radius: 0;
80896
+ /* Boxless row: the opaque-panel registry hands the band's contract back. */
80504
80897
  background: transparent;
80505
- color: inherit;
80506
- --rb-surface-text-color: inherit;
80507
- --rb-surface-heading-color: inherit;
80508
- --rb-surface-link-color: inherit;
80509
- --rb-surface-link-hover-color: inherit;
80510
- --rb-surface-link-hover-decoration: inherit;
80511
- --rb-surface-supporting-color: inherit;
80512
80898
  }
80513
80899
 
80514
80900
  :where(.theme-scope) .shop--register .shop__card-header {
@@ -80600,14 +80986,8 @@ const containerResponsiveThemeCss = `/*
80600
80986
 
80601
80987
  /* Product card */
80602
80988
  :where(.theme-scope) .shop__card {
80989
+ /* Foreground and button context: theme-core/src/blocks/opaquePanels.ts. */
80603
80990
  background: rgb(var(--tb-surface));
80604
- color: rgb(var(--tb-text, 17 24 39));
80605
- --rb-surface-text-color: rgb(var(--tb-text, 17 24 39));
80606
- --rb-surface-heading-color: rgb(var(--tb-text, 17 24 39));
80607
- --rb-surface-link-color: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
80608
- --rb-surface-link-hover-color: var(--rb-prose-link-hover-color, rgb(var(--tb-primary, var(--tb-text, 17 24 39))));
80609
- --rb-surface-link-hover-decoration: initial;
80610
- --rb-surface-supporting-color: rgb(var(--tb-mutedText, 100 116 139));
80611
80991
  border: 1px solid rgb(var(--tb-border));
80612
80992
  border-radius: var(--shop-card-radius);
80613
80993
  padding: 1.5rem;
@@ -80768,14 +81148,8 @@ const containerResponsiveThemeCss = `/*
80768
81148
  margin-bottom: 1.25rem;
80769
81149
  border: 1px solid rgb(var(--tb-border));
80770
81150
  border-radius: var(--shop-card-radius);
81151
+ /* Foreground and button context: theme-core/src/blocks/opaquePanels.ts. */
80771
81152
  background: rgb(var(--tb-surface));
80772
- color: rgb(var(--tb-text, 17 24 39));
80773
- --rb-surface-text-color: rgb(var(--tb-text, 17 24 39));
80774
- --rb-surface-heading-color: rgb(var(--tb-text, 17 24 39));
80775
- --rb-surface-link-color: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
80776
- --rb-surface-link-hover-color: var(--rb-prose-link-hover-color, rgb(var(--tb-primary, var(--tb-text, 17 24 39))));
80777
- --rb-surface-link-hover-decoration: initial;
80778
- --rb-surface-supporting-color: rgb(var(--tb-mutedText, 100 116 139));
80779
81153
  }
80780
81154
 
80781
81155
  :where(.theme-scope) :where([data-block="shop"]) .rb-state-icon--success {
@@ -82718,8 +83092,11 @@ const containerResponsiveThemeCss = `/*
82718
83092
  border-radius: 9999px;
82719
83093
  }
82720
83094
 
83095
+ /* The callout is its own opaque surface: tones tint over the theme surface,
83096
+ * not over whatever band the callout sits on, so its foreground and button
83097
+ * context (theme-core/src/blocks/opaquePanels.ts) hold on any section. */
82721
83098
  :where(.theme-scope) .feedback-callout {
82722
- background: rgba(var(--tb-surface, 248 250 252), 0.92);
83099
+ background: rgb(var(--tb-surface, 248 250 252));
82723
83100
  border-color: rgba(var(--tb-border, 226 232 240), 0.72);
82724
83101
  --rb-feedback-callout-bg-opacity: 0.1;
82725
83102
  --rb-feedback-callout-border-opacity: 0.24;
@@ -82727,25 +83104,33 @@ const containerResponsiveThemeCss = `/*
82727
83104
 
82728
83105
  :where(.theme-scope) .feedback-callout[data-feedback-tone="info"] {
82729
83106
  --rb-feedback-callout-bg-opacity: 0.08;
82730
- background: rgba(var(--tb-primary, 37 99 235), var(--rb-feedback-callout-bg-opacity));
83107
+ background:
83108
+ linear-gradient(rgba(var(--tb-primary, 37 99 235), var(--rb-feedback-callout-bg-opacity)), rgba(var(--tb-primary, 37 99 235), var(--rb-feedback-callout-bg-opacity))),
83109
+ rgb(var(--tb-surface, 248 250 252));
82731
83110
  border-color: rgba(var(--tb-primary, 37 99 235), var(--rb-feedback-callout-border-opacity));
82732
83111
  }
82733
83112
 
82734
83113
  :where(.theme-scope) .feedback-callout[data-feedback-tone="success"] {
82735
- background: rgba(var(--tb-success, 34 197 94), var(--rb-feedback-callout-bg-opacity));
83114
+ background:
83115
+ linear-gradient(rgba(var(--tb-success, 34 197 94), var(--rb-feedback-callout-bg-opacity)), rgba(var(--tb-success, 34 197 94), var(--rb-feedback-callout-bg-opacity))),
83116
+ rgb(var(--tb-surface, 248 250 252));
82736
83117
  border-color: rgba(var(--tb-success, 34 197 94), var(--rb-feedback-callout-border-opacity));
82737
83118
  }
82738
83119
 
82739
83120
  :where(.theme-scope) .feedback-callout[data-feedback-tone="warning"] {
82740
83121
  --rb-feedback-callout-bg-opacity: 0.12;
82741
83122
  --rb-feedback-callout-border-opacity: 0.28;
82742
- background: rgba(var(--tb-warning, 245 158 11), var(--rb-feedback-callout-bg-opacity));
83123
+ background:
83124
+ linear-gradient(rgba(var(--tb-warning, 245 158 11), var(--rb-feedback-callout-bg-opacity)), rgba(var(--tb-warning, 245 158 11), var(--rb-feedback-callout-bg-opacity))),
83125
+ rgb(var(--tb-surface, 248 250 252));
82743
83126
  border-color: rgba(var(--tb-warning, 245 158 11), var(--rb-feedback-callout-border-opacity));
82744
83127
  }
82745
83128
 
82746
83129
  :where(.theme-scope) .feedback-callout[data-feedback-tone="error"] {
82747
83130
  --rb-feedback-callout-border-opacity: 0.26;
82748
- background: rgba(var(--tb-destructive, 239 68 68), var(--rb-feedback-callout-bg-opacity));
83131
+ background:
83132
+ linear-gradient(rgba(var(--tb-destructive, 239 68 68), var(--rb-feedback-callout-bg-opacity)), rgba(var(--tb-destructive, 239 68 68), var(--rb-feedback-callout-bg-opacity))),
83133
+ rgb(var(--tb-surface, 248 250 252));
82749
83134
  border-color: rgba(var(--tb-destructive, 239 68 68), var(--rb-feedback-callout-border-opacity));
82750
83135
  }
82751
83136
 
@@ -83219,26 +83604,30 @@ const containerResponsiveThemeCss = `/*
83219
83604
  border: 1px solid rgb(var(--tb-text, 17 24 39) / 0.12);
83220
83605
  border-radius: 1rem;
83221
83606
  padding: 0.875rem 1rem;
83222
- background: rgb(var(--tb-surface, 255 255 255) / 0.92);
83223
- color: rgb(var(--tb-text, 17 24 39));
83607
+ /* Opaque surface; foreground and button context come from the opaque-panel
83608
+ * registry (theme-core/src/blocks/opaquePanels.ts). Tones tint over it. */
83609
+ background: rgb(var(--tb-surface, 255 255 255));
83224
83610
  }
83225
83611
 
83226
83612
  :where(.theme-scope) [data-block="gifting"] .gifting-feedback[data-feedback-tone="success"] {
83227
83613
  border-color: rgba(var(--tb-success, 34 197 94), 0.3);
83228
- background: rgba(var(--tb-success, 34 197 94), 0.1);
83229
- color: rgb(var(--tb-success, 34 197 94));
83614
+ background:
83615
+ linear-gradient(rgba(var(--tb-success, 34 197 94), 0.1), rgba(var(--tb-success, 34 197 94), 0.1)),
83616
+ rgb(var(--tb-surface, 255 255 255));
83230
83617
  }
83231
83618
 
83232
83619
  :where(.theme-scope) [data-block="gifting"] .gifting-feedback[data-feedback-tone="warning"] {
83233
83620
  border-color: rgba(var(--tb-warning, 245 158 11), 0.35);
83234
- background: rgba(var(--tb-warning, 245 158 11), 0.12);
83235
- color: rgb(var(--tb-warning, 245 158 11));
83621
+ background:
83622
+ linear-gradient(rgba(var(--tb-warning, 245 158 11), 0.12), rgba(var(--tb-warning, 245 158 11), 0.12)),
83623
+ rgb(var(--tb-surface, 255 255 255));
83236
83624
  }
83237
83625
 
83238
83626
  :where(.theme-scope) [data-block="gifting"] .gifting-feedback[data-feedback-tone="error"] {
83239
83627
  border-color: rgba(var(--tb-destructive, 239 68 68), 0.3);
83240
- background: rgba(var(--tb-destructive, 239 68 68), 0.1);
83241
- color: rgb(var(--tb-destructive, 239 68 68));
83628
+ background:
83629
+ linear-gradient(rgba(var(--tb-destructive, 239 68 68), 0.1), rgba(var(--tb-destructive, 239 68 68), 0.1)),
83630
+ rgb(var(--tb-surface, 255 255 255));
83242
83631
  }
83243
83632
 
83244
83633
  /* =============================================================================
@@ -83618,10 +84007,14 @@ const containerResponsiveThemeCss = `/*
83618
84007
  * These treatments retain the event list's content and structural layout.
83619
84008
  * Their contrast relationships come exclusively from the active semantic
83620
84009
  * section surface and named palette tokens.
84010
+ *
84011
+ * The treatment list is \`:is()\`, not \`:where()\`, so each rule outranks the card
84012
+ * role (\`.card-role-x.card-role-x\`) the event card also carries: the rows must
84013
+ * stay boxless whichever stylesheet the page loads last.
83621
84014
  * ============================================================================= */
83622
84015
 
83623
84016
  :where(.theme-scope)
83624
- :where(
84017
+ :is(
83625
84018
  .rb-event-list-treatment-ruled-register,
83626
84019
  .rb-event-list-treatment-editorial-register,
83627
84020
  .rb-event-list-treatment-dense-index
@@ -83633,12 +84026,12 @@ const containerResponsiveThemeCss = `/*
83633
84026
  border-radius: 0;
83634
84027
  background: transparent;
83635
84028
  box-shadow: none;
83636
- color: inherit;
84029
+ /* Boxless row: the opaque-panel registry hands the band's contract back. */
83637
84030
  }
83638
84031
 
83639
84032
  /* Register treatments intentionally prioritise schedule data over imagery. */
83640
84033
  :where(.theme-scope)
83641
- :where(
84034
+ :is(
83642
84035
  .rb-event-list-treatment-ruled-register,
83643
84036
  .rb-event-list-treatment-editorial-register,
83644
84037
  .rb-event-list-treatment-dense-index
@@ -83649,7 +84042,7 @@ const containerResponsiveThemeCss = `/*
83649
84042
  }
83650
84043
 
83651
84044
  :where(.theme-scope)
83652
- :where(
84045
+ :is(
83653
84046
  .rb-event-list-treatment-ruled-register,
83654
84047
  .rb-event-list-treatment-editorial-register,
83655
84048
  .rb-event-list-treatment-dense-index
@@ -83661,7 +84054,7 @@ const containerResponsiveThemeCss = `/*
83661
84054
  }
83662
84055
 
83663
84056
  :where(.theme-scope)
83664
- :where(
84057
+ :is(
83665
84058
  .rb-event-list-treatment-ruled-register,
83666
84059
  .rb-event-list-treatment-editorial-register,
83667
84060
  .rb-event-list-treatment-dense-index
@@ -83673,7 +84066,7 @@ const containerResponsiveThemeCss = `/*
83673
84066
  }
83674
84067
 
83675
84068
  :where(.theme-scope)
83676
- :where(
84069
+ :is(
83677
84070
  .rb-event-list-treatment-ruled-register,
83678
84071
  .rb-event-list-treatment-editorial-register,
83679
84072
  .rb-event-list-treatment-dense-index
@@ -83685,7 +84078,7 @@ const containerResponsiveThemeCss = `/*
83685
84078
  }
83686
84079
 
83687
84080
  :where(.theme-scope)
83688
- :where(
84081
+ :is(
83689
84082
  .rb-event-list-treatment-ruled-register,
83690
84083
  .rb-event-list-treatment-editorial-register,
83691
84084
  .rb-event-list-treatment-dense-index
@@ -83783,7 +84176,7 @@ const containerResponsiveThemeCss = `/*
83783
84176
  @container rb-site (min-width: 768px) {
83784
84177
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
83785
84178
  :where(.theme-scope)
83786
- :where(
84179
+ :is(
83787
84180
  .rb-event-list-treatment-ruled-register,
83788
84181
  .rb-event-list-treatment-editorial-register,
83789
84182
  .rb-event-list-treatment-dense-index
@@ -83793,7 +84186,7 @@ const containerResponsiveThemeCss = `/*
83793
84186
  }
83794
84187
 
83795
84188
  :where(.theme-scope)
83796
- :where(
84189
+ :is(
83797
84190
  .rb-event-list-treatment-ruled-register,
83798
84191
  .rb-event-list-treatment-editorial-register,
83799
84192
  .rb-event-list-treatment-dense-index
@@ -83808,7 +84201,7 @@ const containerResponsiveThemeCss = `/*
83808
84201
  }
83809
84202
 
83810
84203
  :where(.theme-scope)
83811
- :where(
84204
+ :is(
83812
84205
  .rb-event-list-treatment-ruled-register,
83813
84206
  .rb-event-list-treatment-editorial-register,
83814
84207
  .rb-event-list-treatment-dense-index
@@ -83819,7 +84212,7 @@ const containerResponsiveThemeCss = `/*
83819
84212
  }
83820
84213
 
83821
84214
  :where(.theme-scope)
83822
- :where(
84215
+ :is(
83823
84216
  .rb-event-list-treatment-ruled-register,
83824
84217
  .rb-event-list-treatment-editorial-register,
83825
84218
  .rb-event-list-treatment-dense-index
@@ -83832,7 +84225,7 @@ const containerResponsiveThemeCss = `/*
83832
84225
  }
83833
84226
 
83834
84227
  :where(.theme-scope)
83835
- :where(
84228
+ :is(
83836
84229
  .rb-event-list-treatment-ruled-register,
83837
84230
  .rb-event-list-treatment-editorial-register,
83838
84231
  .rb-event-list-treatment-dense-index
@@ -83844,7 +84237,7 @@ const containerResponsiveThemeCss = `/*
83844
84237
  }
83845
84238
 
83846
84239
  :where(.theme-scope)
83847
- :where(
84240
+ :is(
83848
84241
  .rb-event-list-treatment-ruled-register,
83849
84242
  .rb-event-list-treatment-editorial-register,
83850
84243
  .rb-event-list-treatment-dense-index
@@ -83855,7 +84248,7 @@ const containerResponsiveThemeCss = `/*
83855
84248
  }
83856
84249
 
83857
84250
  :where(.theme-scope)
83858
- :where(
84251
+ :is(
83859
84252
  .rb-event-list-treatment-ruled-register,
83860
84253
  .rb-event-list-treatment-editorial-register,
83861
84254
  .rb-event-list-treatment-dense-index
@@ -83863,7 +84256,7 @@ const containerResponsiveThemeCss = `/*
83863
84256
  .event-card.event-card.event-card--horizontal
83864
84257
  .card-content > .card-body,
83865
84258
  :where(.theme-scope)
83866
- :where(
84259
+ :is(
83867
84260
  .rb-event-list-treatment-ruled-register,
83868
84261
  .rb-event-list-treatment-editorial-register,
83869
84262
  .rb-event-list-treatment-dense-index
@@ -83874,7 +84267,7 @@ const containerResponsiveThemeCss = `/*
83874
84267
  }
83875
84268
 
83876
84269
  :where(.theme-scope)
83877
- :where(
84270
+ :is(
83878
84271
  .rb-event-list-treatment-ruled-register,
83879
84272
  .rb-event-list-treatment-editorial-register,
83880
84273
  .rb-event-list-treatment-dense-index
@@ -83925,13 +84318,7 @@ const containerResponsiveThemeCss = `/*
83925
84318
  padding: clamp(1.125rem, 2.5vw, 1.875rem);
83926
84319
  border-radius: calc(var(--rb-block-radius, 0.75rem) * 1.5);
83927
84320
  background: rgb(var(--tb-secondary));
83928
- color: rgb(var(--tb-onSecondary));
83929
- --rb-surface-text-color: rgb(var(--tb-onSecondary));
83930
- --rb-surface-heading-color: rgb(var(--tb-onSecondary));
83931
- --rb-surface-link-color: rgb(var(--tb-onSecondary));
83932
- --rb-surface-link-hover-color: rgb(var(--tb-onSecondary));
83933
- --rb-surface-link-hover-decoration: underline;
83934
- --rb-surface-supporting-color: rgb(var(--tb-onSecondary));
84321
+ /* Foreground and button context: theme-core/src/blocks/opaquePanels.ts. */
83935
84322
  }
83936
84323
 
83937
84324
  :where(.theme-scope)
@@ -84056,16 +84443,8 @@ const containerResponsiveThemeCss = `/*
84056
84443
  }
84057
84444
 
84058
84445
  /* Diptych filled panel: a composition over the \`alternative\` role's surface.
84059
- The 18% supporting alpha is accepted CSS-side — see issue 1297 mapping-table. */
84060
- :where(.theme-scope) .rb-feature-cards-grid--editorial-diptych .rb-feature-card[data-surface-role="panel"] {
84061
- color: rgb(var(--tb-onPrimary));
84062
- --rb-surface-text-color: rgb(var(--tb-onPrimary));
84063
- --rb-surface-heading-color: rgb(var(--tb-onPrimary));
84064
- --rb-surface-link-color: rgb(var(--tb-onPrimary));
84065
- --rb-surface-link-hover-color: rgb(var(--tb-onPrimary));
84066
- --rb-surface-link-hover-decoration: underline;
84067
- --rb-surface-supporting-color: color-mix(in oklab, rgb(var(--tb-onPrimary)), transparent 18%);
84068
- }
84446
+ It paints primary (below); its foreground and button context for that paint
84447
+ come from theme-core/src/blocks/opaquePanels.ts. */
84069
84448
 
84070
84449
  :where(.theme-scope) .rb-feature-cards-grid--editorial-diptych .rb-feature-card[data-surface-role="panel"] > .rb-bg-surface {
84071
84450
  background: rgb(var(--tb-primary));
@@ -84825,10 +85204,10 @@ function normalizeDataLoaders(def) {
84825
85204
  */
84826
85205
  function normalizeContent(block) {
84827
85206
  const source = block.draftContent ?? block.content ?? block.publishedContent ?? {};
84828
- if (!isObjectRecord$1(source)) return {};
85207
+ if (!isObjectRecord$3(source)) return {};
84829
85208
  if ("data" in source) {
84830
85209
  const data = source.data;
84831
- if (isObjectRecord$1(data)) return data;
85210
+ if (isObjectRecord$3(data)) return data;
84832
85211
  if (data === null || data === void 0) return {};
84833
85212
  }
84834
85213
  return source;
@@ -85064,7 +85443,7 @@ function stableNormalize(value) {
85064
85443
  //#endregion
85065
85444
  //#region ../blocks/src/system/data/normalizeLoaderParams.ts
85066
85445
  function toStringParams(value) {
85067
- if (!isObjectRecord$1(value)) return {};
85446
+ if (!isObjectRecord$3(value)) return {};
85068
85447
  const out = {};
85069
85448
  for (const [k, v] of Object.entries(value)) if (typeof v === "string") out[k] = v;
85070
85449
  return out;
@@ -85799,14 +86178,14 @@ async function parseSuccessResponse(endpoint, response, config) {
85799
86178
  default: return buildSuccessEnvelope(void 0, requestId);
85800
86179
  }
85801
86180
  }
85802
- function createRawCMSClient(headers = {}, baseUrl) {
86181
+ function createRawCMSClient(getHeaders = () => ({}), baseUrl) {
85803
86182
  return ({ endpoint, body, params, options = {} }) => {
85804
86183
  const plan = buildApiRequestPlan({
85805
86184
  endpoint,
85806
86185
  body,
85807
86186
  params,
85808
86187
  options,
85809
- headers,
86188
+ headers: getHeaders(),
85810
86189
  baseUrl: normalizeCmsApiBaseUrl(baseUrl ?? resolveApiBaseUrl()),
85811
86190
  sdkVersion
85812
86191
  });
@@ -85912,13 +86291,13 @@ function createParsedClient(rawClient) {
85912
86291
  };
85913
86292
  }
85914
86293
  function createCMSClient(headers = {}, baseUrl) {
85915
- return createParsedClient(createRawCMSClient(headers, baseUrl));
86294
+ return createParsedClient(createRawCMSClient(() => headers, baseUrl));
85916
86295
  }
85917
86296
  function createInternalAPIClient(baseUrl) {
85918
86297
  return createCMSClient({}, baseUrl);
85919
86298
  }
85920
86299
  function createBearerAPIClient(token, baseUrl) {
85921
- return createCMSClient({ Authorization: `Bearer ${token}` }, baseUrl);
86300
+ return createParsedClient(createRawCMSClient(() => ({ Authorization: `Bearer ${typeof token === "function" ? token() : token}` }), baseUrl));
85922
86301
  }
85923
86302
  //#endregion
85924
86303
  //#region ../api/src/accountApi.ts
@@ -86145,6 +86524,7 @@ const CANONICAL_REFUND_PLANNER_ERROR_CODES = [
86145
86524
  "refund_failed"
86146
86525
  ];
86147
86526
  const CANONICAL_ADMIN_REFUND_FAILURE_CODES = [
86527
+ "refund_blocked_by_live_payment_terms",
86148
86528
  ...CANONICAL_REFUND_PLANNER_ERROR_CODES,
86149
86529
  "payment_intent_not_found",
86150
86530
  "stripe_error",
@@ -86160,6 +86540,7 @@ const CANONICAL_ADMIN_REFUND_FAILURE_CODES = [
86160
86540
  //#endregion
86161
86541
  //#region ../api/src/bookingRefundOutcomes.ts
86162
86542
  const STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
86543
+ "refund_blocked_by_live_payment_terms",
86163
86544
  "missing_amount",
86164
86545
  "invalid_amount",
86165
86546
  "amount_exceeds_remaining",
@@ -86567,68 +86948,6 @@ function parsePublicProductCategorySelector(value) {
86567
86948
  }
86568
86949
  z$1.enum(["public", "unlisted"], { error: "visibility must be 'public' or 'unlisted'" });
86569
86950
  //#endregion
86570
- //#region ../api/src/bookingPaymentTermSchemas.ts
86571
- const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
86572
- const bookingInstalmentPlanSchema = z$1.discriminatedUnion("kind", [
86573
- z$1.object({
86574
- kind: z$1.literal("deposit_plus_one_remainder"),
86575
- depositAmountCents: z$1.number().int().nonnegative(),
86576
- depositRefundability: bookingDepositRefundPolicySchema,
86577
- remainderDueCount: z$1.number().int().positive(),
86578
- intervalUnit: z$1.enum([
86579
- "day",
86580
- "week",
86581
- "month"
86582
- ])
86583
- }),
86584
- z$1.object({
86585
- kind: z$1.literal("deposit_plus_scheduled_instalments"),
86586
- depositAmountCents: z$1.number().int().nonnegative(),
86587
- depositRefundability: bookingDepositRefundPolicySchema,
86588
- instalmentCount: z$1.number().int().positive(),
86589
- intervalCount: z$1.number().int().positive(),
86590
- intervalUnit: z$1.enum([
86591
- "day",
86592
- "week",
86593
- "month"
86594
- ])
86595
- }),
86596
- z$1.object({
86597
- kind: z$1.literal("equal_scheduled_instalments"),
86598
- instalmentCount: z$1.number().int().positive(),
86599
- intervalCount: z$1.number().int().positive(),
86600
- intervalUnit: z$1.enum([
86601
- "day",
86602
- "week",
86603
- "month"
86604
- ])
86605
- })
86606
- ]);
86607
- const bookingFlexibleBalanceDueDateRuleSchema = z$1.discriminatedUnion("kind", [z$1.object({
86608
- kind: z$1.literal("relative_to_start_date"),
86609
- daysBeforeStart: z$1.number().int().positive()
86610
- }), z$1.object({
86611
- kind: z$1.literal("fixed_calendar_date"),
86612
- dueAt: z$1.string().datetime()
86613
- })]);
86614
- const bookingFlexibleBalanceConfigSchema = z$1.object({
86615
- upfrontAmountCents: z$1.number().int().nonnegative(),
86616
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
86617
- depositRefundability: bookingDepositRefundPolicySchema
86618
- });
86619
- z$1.discriminatedUnion("kind", [
86620
- z$1.object({ kind: z$1.literal("upfront") }),
86621
- z$1.object({ kind: z$1.literal("deferred_manual") }),
86622
- z$1.object({
86623
- kind: z$1.literal("instalment_plan"),
86624
- plan: bookingInstalmentPlanSchema
86625
- }),
86626
- z$1.object({
86627
- kind: z$1.literal("flexible_balance"),
86628
- config: bookingFlexibleBalanceConfigSchema
86629
- })
86630
- ]);
86631
- //#endregion
86632
86951
  //#region ../api/src/navigationMenuValidation.ts
86633
86952
  function hasChildren(item) {
86634
86953
  return Array.isArray(item.children) && item.children.length > 0;
@@ -91746,7 +92065,7 @@ var CircuitOpenError = class extends Error {
91746
92065
  * 1. This constant
91747
92066
  * 2. The "version" field in package.json
91748
92067
  */
91749
- const SDK_VERSION = "0.148.0";
92068
+ const SDK_VERSION = "0.150.0";
91750
92069
  //#endregion
91751
92070
  //#region src/next/content-load-failure.ts
91752
92071
  const SdkContentLoadError = RiverbankContentLoadError;