@riverbankcms/sdk 0.134.0 → 0.135.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 (258) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/README.md +1 -1
  3. package/dist/{PreviewEditorSidebar-DfRhJPFQ.mjs → PreviewEditorSidebar-roNY0GVy.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-Dppxcr_g.mjs → PreviewEditorUI-KboDbEh_.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-D51gQaG3.mjs → PreviewQueryProvider-DcgaESkm.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-8CyGCXir.mjs → SdkPreviewModeRuntime-DBrF7Caa.mjs} +5 -5
  7. package/dist/{SiteChromeCustomizeContext-DVMTMvqA.mjs → SiteChromeCustomizeContext-DrIEpJKn.mjs} +4070 -8011
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +165 -165
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +15 -15
  10. package/dist/_dts/api/src/bookingConfig.d.ts +1 -1
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +25 -60
  12. package/dist/_dts/api/src/bookingOperations.d.ts +111 -161
  13. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +123 -0
  14. package/dist/_dts/api/src/bookingRecords.d.ts +13 -13
  15. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  16. package/dist/_dts/api/src/bookingSessionSummaryTypes.d.ts +34 -0
  17. package/dist/_dts/api/src/bookings.d.ts +5 -9
  18. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -7
  19. package/dist/_dts/api/src/communications.d.ts +1 -1
  20. package/dist/_dts/api/src/endpoints.d.ts +29 -109
  21. package/dist/_dts/api/src/eventManagementContracts.d.ts +1 -1
  22. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +43 -0
  23. package/dist/_dts/api/src/index.d.ts +3 -4
  24. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  25. package/dist/_dts/api/src/participantMessaging.d.ts +2 -2
  26. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +8 -0
  27. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +32 -28
  28. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +85 -5
  29. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +1 -1
  30. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +9 -100
  31. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +7 -6
  32. package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +0 -32
  33. package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +1 -1
  34. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -1
  35. package/dist/_dts/api/src/siteOperations.d.ts +2 -2
  36. package/dist/_dts/api/src/types.d.ts +1 -1
  37. package/dist/_dts/api/src/{courses.d.ts → wholeSeriesOfferings.d.ts} +43 -95
  38. package/dist/_dts/blocks/src/client.d.ts +0 -5
  39. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  40. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +5 -94
  41. package/dist/_dts/blocks/src/portal/dateFormatting.d.ts +3 -0
  42. package/dist/_dts/blocks/src/portal/types.d.ts +17 -20
  43. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +147 -42
  44. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +10 -10
  45. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +3 -0
  46. package/dist/_dts/blocks/src/system/blocks/index.d.ts +0 -2
  47. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +3 -3
  48. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +3 -3
  49. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  50. package/dist/_dts/blocks/src/system/node/builder.d.ts +0 -1
  51. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +9 -12
  52. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +2 -44
  53. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +99 -59
  56. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  57. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +19 -16
  58. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -0
  59. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +1 -1
  60. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -247
  61. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +13 -126
  62. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +0 -1
  63. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -3
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.d.ts +8 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +17 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +18 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +1 -3
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +7 -4
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +0 -1
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +7 -8
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +4 -4
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +5 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +28 -0
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +12 -11
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +53 -45
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +10 -6
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +9 -1
  83. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +20 -5
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +20 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +5 -56
  86. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +20 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +6 -22
  88. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DateTimeTile.d.ts +1 -1
  89. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +6 -6
  90. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +2 -2
  91. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +6 -1
  92. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +1 -13
  93. package/dist/_dts/blocks/src/system/runtime/shared/components/LoggedInAsUser.d.ts +1 -1
  94. package/dist/_dts/blocks/src/system/runtime/shared/components/MembershipHero.d.ts +1 -1
  95. package/dist/_dts/blocks/src/system/runtime/shared/components/StateIcon.d.ts +1 -1
  96. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +1 -1
  97. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -1
  98. package/dist/_dts/blocks/src/system/runtime/shared/utils/checkoutUrls.d.ts +2 -2
  99. package/dist/_dts/commerce/src/index.d.ts +16 -0
  100. package/dist/_dts/commerce/src/money.d.ts +122 -0
  101. package/dist/_dts/commerce/src/moneyContracts.d.ts +178 -0
  102. package/dist/_dts/commerce/src/moneyDateUtils.d.ts +22 -0
  103. package/dist/_dts/commerce/src/moneyPayments.d.ts +59 -0
  104. package/dist/_dts/commerce/src/moneyPlanningTime.d.ts +4 -0
  105. package/dist/_dts/commerce/src/moneyReceiptReadModel.d.ts +68 -0
  106. package/dist/_dts/commerce/src/moneyReport.d.ts +105 -0
  107. package/dist/_dts/commerce/src/moneyReportBreakdowns.d.ts +3 -0
  108. package/dist/_dts/commerce/src/moneyReportKindFilter.d.ts +4 -0
  109. package/dist/_dts/commerce/src/moneyReportPage.d.ts +132 -0
  110. package/dist/_dts/commerce/src/purchase/checkoutCollectionPlan.d.ts +1 -1
  111. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +1 -1
  112. package/dist/_dts/commerce/src/purchase/orderCompletionEmailPlan.d.ts +3 -3
  113. package/dist/_dts/commerce/src/purchase/orderFulfillmentPlan.d.ts +6 -25
  114. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +4 -4
  115. package/dist/_dts/commerce/src/purchase/orderPlanningTypes.d.ts +11 -11
  116. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +1 -1
  117. package/dist/_dts/commerce/src/purchase/persistedCheckoutLines.d.ts +1 -1
  118. package/dist/_dts/commerce/src/purchase/types.d.ts +12 -8
  119. package/dist/_dts/commerce/src/shop/digitalFulfillment.d.ts +111 -0
  120. package/dist/_dts/commerce/src/shop/fulfillmentStatus.d.ts +10 -0
  121. package/dist/_dts/commerce/src/shop/inventoryRestore.d.ts +13 -0
  122. package/dist/_dts/commerce/src/shop/shippingAddress.d.ts +18 -0
  123. package/dist/_dts/commerce/src/types/json.d.ts +3 -0
  124. package/dist/_dts/commerce/src/utils/isPlainRecord.d.ts +1 -0
  125. package/dist/_dts/commerce/src/waitlists.d.ts +172 -0
  126. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +0 -30
  127. package/dist/_dts/content-model/src/content-types/builtins.d.ts +2 -39
  128. package/dist/_dts/content-model/src/metadataConfig.d.ts +0 -1
  129. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -68
  130. package/dist/_dts/core/src/branded.d.ts +3 -3
  131. package/dist/_dts/core/src/event-pricing.d.ts +6 -6
  132. package/dist/_dts/core/src/participants.d.ts +17 -17
  133. package/dist/_dts/core/src/rectification.d.ts +1 -1
  134. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +890 -2154
  135. package/dist/_dts/sdk/src/bookings/index.d.ts +4 -5
  136. package/dist/_dts/sdk/src/bookings/types.d.ts +34 -4
  137. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +4 -6
  138. package/dist/_dts/sdk/src/version.d.ts +1 -1
  139. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +0 -2
  140. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  141. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +1 -1
  142. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +1 -1
  143. package/dist/client/{usePolling-UN4WKnaM.mjs → BookingConsentAgreement-BQqwi8Oa.mjs} +180 -4
  144. package/dist/client/{DiscountCodeDisclosure-CfuPOHD0.mjs → DiscountCodeDisclosure-B97aMo0V.mjs} +13 -27
  145. package/dist/client/{EventCombined.client-DB8Qfzi-.mjs → EventCombined.client-Bs2Iw9Q6.mjs} +3 -3
  146. package/dist/client/{EventListing.client-DD4X8hp4.mjs → EventListing.client-C4QUQdmg.mjs} +2 -2
  147. package/dist/client/{LeafletStaticMap-QhgIBQbv.mjs → LeafletStaticMap-CwWRk69M.mjs} +1 -1
  148. package/dist/client/{accordion-DFXpLvwg.mjs → accordion-BA0j8Mpw.mjs} +1 -1
  149. package/dist/client/{bookingForm-sI05d3lk.mjs → bookingForm-Br2e41H0.mjs} +6 -7
  150. package/dist/client/bookings.mjs +912 -1906
  151. package/dist/client/{carousel-wjyWTZCh.mjs → carousel-B4dmwnpD.mjs} +1 -1
  152. package/dist/client/{cart-DCwdpA4i.mjs → cart-B_ckGW4b.mjs} +3 -3
  153. package/dist/client/{checkout-DTDW3l0R.mjs → checkout-DAyspHdf.mjs} +3 -3
  154. package/dist/client/{checkoutUrls-DQYC_Br-.mjs → checkoutUrls-BuseL0dw.mjs} +4 -2
  155. package/dist/client/client.mjs +5074 -9309
  156. package/dist/client/{context-TSK1CGx8.mjs → context-DljQn8L5.mjs} +15 -69
  157. package/dist/client/{eventCalendar-B0Zg-i_w.mjs → eventCalendar-pJu3FUod.mjs} +5 -5
  158. package/dist/client/{eventCombined-B8Y2wizd.mjs → eventCombined-B6Kacm9F.mjs} +3 -3
  159. package/dist/client/{eventDetails-DPDOwURJ.mjs → eventDetails-CaX9z1pv.mjs} +8 -8
  160. package/dist/client/{eventListing-CjBcmSLn.mjs → eventListing-B9aXPO-I.mjs} +3 -3
  161. package/dist/client/{eventRegistration-CK30HsAq.mjs → eventRegistration-CBSovBkg.mjs} +4522 -3690
  162. package/dist/client/{form-CUXfsABE.mjs → form-Cm0tu_7o.mjs} +2 -2
  163. package/dist/client/{headerSection-N-mN3rjr.mjs → headerSection-OgRtHeKS.mjs} +2 -2
  164. package/dist/client/hooks.mjs +430 -692
  165. package/dist/client/{locationMap-oiIDQMBt.mjs → locationMap-DmjcYqNM.mjs} +2 -2
  166. package/dist/client/{newsletterForm-CkQ2tTrM.mjs → newsletterForm-D08OZQAC.mjs} +2 -2
  167. package/dist/client/{productDetail-CnidyrsN.mjs → productDetail-BqZeu2P4.mjs} +3 -3
  168. package/dist/client/{productList-CttYcS_S.mjs → productList-mNyIF9FG.mjs} +3 -3
  169. package/dist/client/{propsDecoder-CeUMxI9a.mjs → propsDecoder-DwHXRm9X.mjs} +4656 -4419
  170. package/dist/client/rendering/client.mjs +59504 -62158
  171. package/dist/client/rendering/islands.mjs +17 -19
  172. package/dist/client/rendering.mjs +5354 -9683
  173. package/dist/client/{scrollToBlock-lPr1oqxB.mjs → scrollToBlock-DtmdM3v-.mjs} +2 -2
  174. package/dist/client/{shop-DXQtMo2O.mjs → shop-CNjZK16F.mjs} +6 -6
  175. package/dist/client/{shop-commerce-quDL411J.mjs → shop-commerce-DkNNao1J.mjs} +6 -6
  176. package/dist/client/{shop-commerce-store-Dnu-8Iub.mjs → shop-commerce-store-9WA--zuW.mjs} +1 -1
  177. package/dist/client/{shopShared-BWPUURvG.mjs → shopShared-CHCVfccY.mjs} +3 -3
  178. package/dist/client/{useEventFilters-DRhWp2_5.mjs → useEventFilters-DvuaB4ZN.mjs} +3 -3
  179. package/dist/preview-next/before-render.mjs +40 -161
  180. package/dist/preview-next/client/runtime.mjs +4 -4
  181. package/dist/preview-next/keepAlive.mjs +40 -161
  182. package/dist/preview-next/middleware.mjs +40 -161
  183. package/dist/{previewAuthStore-BFKd4LrN.mjs → previewAuthStore-C7ksxt5b.mjs} +40 -161
  184. package/dist/{sdk-runtime-Ca5RD78X.mjs → sdk-runtime-3GhW4knb.mjs} +2 -2
  185. package/dist/{separator-CMhj6BTi.mjs → separator-D3bCWYYb.mjs} +1 -1
  186. package/dist/server/components.mjs +535 -2950
  187. package/dist/server/config-validation.mjs +430 -692
  188. package/dist/server/config.mjs +430 -692
  189. package/dist/server/data.mjs +430 -692
  190. package/dist/server/index.mjs +41 -162
  191. package/dist/server/next.mjs +549 -2964
  192. package/dist/server/page-converter.mjs +331 -560
  193. package/dist/server/prebuild.mjs +1 -1
  194. package/dist/server/rendering/server.mjs +534 -2855
  195. package/dist/server/rendering.mjs +535 -2950
  196. package/dist/server/routing.mjs +574 -1065
  197. package/dist/server/server.mjs +444 -706
  198. package/dist/server/theme-bridge.mjs +41 -1524
  199. package/dist/styles/index.css +41 -1348
  200. package/package.json +1 -1
  201. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +0 -99
  202. package/dist/_dts/blocks/src/client/course-registration.d.ts +0 -5
  203. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -134
  204. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +0 -130
  205. package/dist/_dts/blocks/src/system/blocks/courses/shared/index.d.ts +0 -3
  206. package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +0 -2
  207. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +0 -1
  208. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +0 -1
  209. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +0 -135
  210. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +0 -28
  211. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +0 -11
  212. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/runs.d.ts +0 -10
  213. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +0 -15
  214. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +0 -20
  215. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +0 -14
  216. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.client.d.ts +0 -10
  217. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +0 -181
  218. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +0 -12
  219. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.d.ts +0 -8
  220. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/BookingModeStep.d.ts +0 -32
  221. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/CheckIcon.d.ts +0 -4
  222. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/ErrorStep.d.ts +0 -17
  223. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/MembershipHero.d.ts +0 -12
  224. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PaymentFailedStep.d.ts +0 -17
  225. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PortalAuthSidebar.d.ts +0 -9
  226. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/StepIndicator.d.ts +0 -6
  227. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/SuccessStep.d.ts +0 -14
  228. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/VerifyingTimeoutStep.d.ts +0 -17
  229. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WaitlistStep.d.ts +0 -12
  230. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationActiveSteps.d.ts +0 -9
  231. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationErrorBoundary.d.ts +0 -25
  232. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationTerminalContent.d.ts +0 -8
  233. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationWizard.d.ts +0 -8
  234. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +0 -46
  235. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/index.d.ts +0 -18
  236. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/presentation.d.ts +0 -7
  237. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/pricing.d.ts +0 -14
  238. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/types.d.ts +0 -105
  239. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesEligibility.d.ts +0 -24
  240. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesPaymentVerification.d.ts +0 -10
  241. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationActions.d.ts +0 -35
  242. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationPortal.d.ts +0 -7
  243. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationSelection.d.ts +0 -35
  244. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationWizard.d.ts +0 -185
  245. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesWaitlistSelection.d.ts +0 -14
  246. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/utils.d.ts +0 -43
  247. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.contract.d.ts +0 -325
  248. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.planning.d.ts +0 -27
  249. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.d.ts +0 -17
  250. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesRegistrationViewState.d.ts +0 -21
  251. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wizardSteps.d.ts +0 -30
  252. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +0 -3
  253. package/dist/_dts/theme-core/src/blocks/vars/course-details.d.ts +0 -16
  254. package/dist/_dts/theme-core/src/blocks/vars/course-registration.d.ts +0 -21
  255. package/dist/client/BookingConsentAgreement-BxgpGEFD.mjs +0 -160
  256. package/dist/client/WholeSeriesRegistrationWizard-DwtC7bCs.mjs +0 -2546
  257. package/dist/client/courseRegistration-A-Tg7qw_.mjs +0 -52
  258. package/dist/client/pricing-Caa0QWzh.mjs +0 -195
@@ -9656,7 +9656,7 @@ function publicEventPricingType(pricing) {
9656
9656
  case "single_paid":
9657
9657
  case "ticket_types":
9658
9658
  case "sliding_scale":
9659
- case "course": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
9659
+ case "whole_series": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
9660
9660
  case "external": return "external";
9661
9661
  }
9662
9662
  }
@@ -9667,14 +9667,14 @@ function publicEventPricingCurrency(pricing) {
9667
9667
  case "single_paid":
9668
9668
  case "ticket_types":
9669
9669
  case "sliding_scale": return pricing.currency;
9670
- case "course": return pricing.display.display.currency;
9670
+ case "whole_series": return pricing.display.display.currency;
9671
9671
  case "external": return null;
9672
9672
  }
9673
9673
  }
9674
9674
  function isFreePublicEventPriceDisplay(display) {
9675
9675
  switch (display.kind) {
9676
9676
  case "free": return true;
9677
- case "course": return display.display.kind === "free";
9677
+ case "whole_series": return display.display.kind === "free";
9678
9678
  case "exact":
9679
9679
  case "from":
9680
9680
  case "range":
@@ -9710,7 +9710,7 @@ function formatBookingPriceDisplay(display, options = {}) {
9710
9710
  case "mixed": return display.paidToAmount > display.paidFromAmount ? `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)} - ${formatCurrencyAmount(display.paidToAmount, display.currency, options)}` : `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)}`;
9711
9711
  case "unavailable": return "Pricing unavailable";
9712
9712
  case "external": return display.label;
9713
- case "course": return formatCoursePriceDisplayLabel(display.display, options);
9713
+ case "whole_series": return formatCoursePriceDisplayLabel(display.display, options);
9714
9714
  default: return assertNever$3(display);
9715
9715
  }
9716
9716
  }
@@ -14225,7 +14225,7 @@ defineBlockAppearancePreset({
14225
14225
  id: "schedule-details-brand-depth",
14226
14226
  target: "events",
14227
14227
  label: "Brand-depth schedule details",
14228
- blockKinds: ["block.event-details", "block.course-details"],
14228
+ blockKinds: ["block.event-details"],
14229
14229
  design: {
14230
14230
  sectionSurface: "brand-depth-band",
14231
14231
  contentFrame: plainFrame,
@@ -20775,7 +20775,6 @@ const productDetail = (props, children, ...mods) => el("product-detail", props,
20775
20775
  const cart = (props, children, ...mods) => el("cart", props, children, ...mods);
20776
20776
  const checkout = (props, children, ...mods) => el("checkout", props, children, ...mods);
20777
20777
  const gifting = (props, children, ...mods) => el("gifting", props, children, ...mods);
20778
- const courseRegistration = (props, children, ...mods) => el("course-registration", props, children, ...mods);
20779
20778
  function bind(from, options) {
20780
20779
  return (node) => ({
20781
20780
  ...node,
@@ -30683,12 +30682,12 @@ const weeklySlotAvailabilityBlockDefinition = {
30683
30682
  };
30684
30683
  //#endregion
30685
30684
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
30686
- const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
30687
- const bookingInstalmentPlanSchema = z.union([
30685
+ const bookingDepositRefundPolicySchema$1 = z.enum(["refundable", "non_refundable"]);
30686
+ const bookingInstalmentPlanSchema$1 = z.union([
30688
30687
  z.object({
30689
30688
  kind: z.literal("deposit_plus_one_remainder"),
30690
30689
  depositAmountCents: z.number().int().min(0),
30691
- depositRefundability: bookingDepositRefundPolicySchema,
30690
+ depositRefundability: bookingDepositRefundPolicySchema$1,
30692
30691
  remainderDueCount: z.number().int().positive(),
30693
30692
  intervalUnit: z.enum([
30694
30693
  "day",
@@ -30699,7 +30698,7 @@ const bookingInstalmentPlanSchema = z.union([
30699
30698
  z.object({
30700
30699
  kind: z.literal("deposit_plus_scheduled_instalments"),
30701
30700
  depositAmountCents: z.number().int().min(0),
30702
- depositRefundability: bookingDepositRefundPolicySchema,
30701
+ depositRefundability: bookingDepositRefundPolicySchema$1,
30703
30702
  instalmentCount: z.number().int().positive(),
30704
30703
  intervalCount: z.number().int().positive(),
30705
30704
  intervalUnit: z.enum([
@@ -30719,28 +30718,28 @@ const bookingInstalmentPlanSchema = z.union([
30719
30718
  ])
30720
30719
  })
30721
30720
  ]);
30722
- const bookingFlexibleBalanceDueDateRuleSchema = z.union([z.object({
30721
+ const bookingFlexibleBalanceDueDateRuleSchema$1 = z.union([z.object({
30723
30722
  kind: z.literal("relative_to_start_date"),
30724
30723
  daysBeforeStart: z.number().int().positive()
30725
30724
  }), z.object({
30726
30725
  kind: z.literal("fixed_calendar_date"),
30727
30726
  dueAt: z.string().datetime()
30728
30727
  })]);
30729
- const bookingFlexibleBalanceConfigSchema = z.object({
30728
+ const bookingFlexibleBalanceConfigSchema$1 = z.object({
30730
30729
  upfrontAmountCents: z.number().int().min(0),
30731
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
30732
- depositRefundability: bookingDepositRefundPolicySchema
30730
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
30731
+ depositRefundability: bookingDepositRefundPolicySchema$1
30733
30732
  });
30734
30733
  const blockBookingPaymentCollectionOptionSchema = z.union([
30735
30734
  z.object({ kind: z.literal("upfront") }),
30736
30735
  z.object({ kind: z.literal("deferred_manual") }),
30737
30736
  z.object({
30738
30737
  kind: z.literal("instalment_plan"),
30739
- plan: bookingInstalmentPlanSchema
30738
+ plan: bookingInstalmentPlanSchema$1
30740
30739
  }),
30741
30740
  z.object({
30742
30741
  kind: z.literal("flexible_balance"),
30743
- config: bookingFlexibleBalanceConfigSchema
30742
+ config: bookingFlexibleBalanceConfigSchema$1
30744
30743
  })
30745
30744
  ]);
30746
30745
  const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
@@ -30996,6 +30995,13 @@ const publicWholeSeriesOfferingSchema = z.object({
30996
30995
  title: z.string(),
30997
30996
  slug: z.string(),
30998
30997
  description: z.unknown().nullable(),
30998
+ deliveryMode: z.enum([
30999
+ "in_person",
31000
+ "online",
31001
+ "hybrid"
31002
+ ]),
31003
+ waitlistEnabled: z.boolean(),
31004
+ requireGuestDetails: z.boolean(),
30999
31005
  teamMembers: z.array(wholeSeriesTeamMemberSummarySchema).optional(),
31000
31006
  enrollmentOpen: z.boolean(),
31001
31007
  pricing: wholeSeriesPricingSchema,
@@ -31111,7 +31117,7 @@ const mixedPriceDisplaySchema = z.object({
31111
31117
  paidToAmount: z.number(),
31112
31118
  currency: z.string()
31113
31119
  });
31114
- const publicCoursePriceDisplaySchema = z.discriminatedUnion("kind", [
31120
+ const publicWholeSeriesPriceDisplaySchema = z.discriminatedUnion("kind", [
31115
31121
  freePriceDisplaySchema,
31116
31122
  exactPriceDisplaySchema,
31117
31123
  fromPriceDisplaySchema,
@@ -31129,8 +31135,8 @@ z.discriminatedUnion("kind", [
31129
31135
  label: z.string()
31130
31136
  }),
31131
31137
  z.object({
31132
- kind: z.literal("course"),
31133
- display: publicCoursePriceDisplaySchema
31138
+ kind: z.literal("whole_series"),
31139
+ display: publicWholeSeriesPriceDisplaySchema
31134
31140
  })
31135
31141
  ]);
31136
31142
  const publicEventTicketTypePriceDisplaySchema = z.union([
@@ -31232,10 +31238,10 @@ const publicEventPricingSchema = z.discriminatedUnion("kind", [
31232
31238
  })
31233
31239
  }),
31234
31240
  z.object({
31235
- kind: z.literal("course"),
31241
+ kind: z.literal("whole_series"),
31236
31242
  display: z.object({
31237
- kind: z.literal("course"),
31238
- display: publicCoursePriceDisplaySchema
31243
+ kind: z.literal("whole_series"),
31244
+ display: publicWholeSeriesPriceDisplaySchema
31239
31245
  })
31240
31246
  }),
31241
31247
  z.object({
@@ -31678,7 +31684,8 @@ function resolveEventRegistrationScope(context) {
31678
31684
  };
31679
31685
  return { kind: "unscoped" };
31680
31686
  }
31681
- function applyEventRegistrationScope(events, scope) {
31687
+ function resolveEventRegistrationScopedEvents(events, context) {
31688
+ const scope = resolveEventRegistrationScope(context);
31682
31689
  switch (scope.kind) {
31683
31690
  case "occurrenceSeries":
31684
31691
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -31690,9 +31697,6 @@ function applyEventRegistrationScope(events, scope) {
31690
31697
  case "unscoped": return [...events];
31691
31698
  }
31692
31699
  }
31693
- function resolveEventRegistrationScopedEvents(events, context) {
31694
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
31695
- }
31696
31700
  //#endregion
31697
31701
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
31698
31702
  function planEventRegistrationScope(input) {
@@ -31786,14 +31790,14 @@ function isRecord$11(value) {
31786
31790
  }
31787
31791
  function isPublicEventPricing(value) {
31788
31792
  if (!isRecord$11(value) || typeof value.kind !== "string") return false;
31789
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "sliding_scale" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
31793
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "sliding_scale" || value.kind === "ticket_types" || value.kind === "whole_series" || value.kind === "external";
31790
31794
  }
31791
31795
  function isPublicEventTicketType(value) {
31792
31796
  return isRecord$11(value) && typeof value.id === "string";
31793
31797
  }
31794
31798
  function readTicketTypePriceDisplay(value, currency) {
31795
31799
  const display = readLegacyPriceDisplay(value, currency);
31796
- return display.kind === "course" || display.kind === "external" ? {
31800
+ return display.kind === "whole_series" || display.kind === "external" ? {
31797
31801
  kind: "unavailable",
31798
31802
  currency
31799
31803
  } : display;
@@ -31851,11 +31855,11 @@ function readLegacyPriceDisplay(value, currency) {
31851
31855
  kind: "unavailable",
31852
31856
  currency: displayCurrency
31853
31857
  };
31854
- case "course": return isRecord$11(value.display) ? {
31855
- kind: "course",
31858
+ case "whole_series": return isRecord$11(value.display) ? {
31859
+ kind: "whole_series",
31856
31860
  display: readCoursePriceDisplay(value.display, displayCurrency)
31857
31861
  } : {
31858
- kind: "course",
31862
+ kind: "whole_series",
31859
31863
  display: {
31860
31864
  kind: "unavailable",
31861
31865
  currency: displayCurrency
@@ -31981,7 +31985,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
31981
31985
  //#endregion
31982
31986
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
31983
31987
  function eventMatchesOccurrenceId(event, occurrenceId) {
31984
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
31988
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
31985
31989
  }
31986
31990
  function findPreSelectedEvent(input) {
31987
31991
  const occurrenceContext = input.occurrenceContext;
@@ -32007,12 +32011,127 @@ function toRegistrationEvent(event) {
32007
32011
  return {
32008
32012
  ...event,
32009
32013
  pricing: resolveRuntimeEventPricing(event),
32010
- publicEventId: event.id,
32011
- registrationOccurrenceId: event.occurrenceId
32014
+ selectionId: event.id,
32015
+ registrationSubject: {
32016
+ kind: "occurrence",
32017
+ occurrenceId: event.occurrenceId
32018
+ }
32012
32019
  };
32013
32020
  }
32014
32021
  function toRegistrationEvents(events) {
32015
- return events.map(toRegistrationEvent);
32022
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
32023
+ }
32024
+ function toWholeSeriesTicketType(option) {
32025
+ return {
32026
+ ...option,
32027
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
32028
+ attendanceScope: option.attendanceScope ?? void 0,
32029
+ availability: {
32030
+ kind: "available",
32031
+ remainingCapacity: option.capacityLimit
32032
+ }
32033
+ };
32034
+ }
32035
+ function toWholeSeriesPricing(offering) {
32036
+ const resolved = resolveWholeSeriesPricingState(offering);
32037
+ switch (offering.pricing.pricingStrategy) {
32038
+ case "free": return {
32039
+ kind: "free_registration",
32040
+ currency: offering.currency,
32041
+ display: {
32042
+ kind: "free",
32043
+ currency: offering.currency
32044
+ }
32045
+ };
32046
+ case "single": {
32047
+ const amount = offering.pricing.singlePriceAmount ?? 0;
32048
+ return amount === 0 ? {
32049
+ kind: "free_registration",
32050
+ currency: offering.currency,
32051
+ display: {
32052
+ kind: "free",
32053
+ currency: offering.currency
32054
+ }
32055
+ } : {
32056
+ kind: "single_paid",
32057
+ amount,
32058
+ currency: offering.currency,
32059
+ display: {
32060
+ kind: "exact",
32061
+ amount,
32062
+ currency: offering.currency
32063
+ }
32064
+ };
32065
+ }
32066
+ case "tiered": return {
32067
+ kind: "ticket_types",
32068
+ currency: offering.currency,
32069
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
32070
+ display: resolved.display
32071
+ };
32072
+ case "sliding_scale": return {
32073
+ kind: "sliding_scale",
32074
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32075
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32076
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
32077
+ currency: offering.currency,
32078
+ display: {
32079
+ kind: "range",
32080
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32081
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32082
+ currency: offering.currency
32083
+ }
32084
+ };
32085
+ }
32086
+ }
32087
+ function toAttendanceModes(offering) {
32088
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
32089
+ mode,
32090
+ capacity: offering.enrollmentCapacity,
32091
+ registeredCount: offering.enrolledCount,
32092
+ availableSpots: offering.availableSpots,
32093
+ waitlistEnabled: offering.waitlistEnabled
32094
+ }));
32095
+ }
32096
+ function toWholeSeriesRegistrationEvent(offering) {
32097
+ const firstSession = offering.sessions[0];
32098
+ const lastSession = offering.sessions[offering.sessions.length - 1];
32099
+ return {
32100
+ selectionId: offering.eventSeriesId,
32101
+ registrationSubject: {
32102
+ kind: "wholeSeries",
32103
+ eventSeriesId: offering.eventSeriesId,
32104
+ sessions: offering.sessions
32105
+ },
32106
+ seriesId: offering.eventSeriesId,
32107
+ title: offering.title,
32108
+ startsAt: firstSession?.startsAt ?? "",
32109
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
32110
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
32111
+ kind: "closed",
32112
+ reason: "enrollment_closed"
32113
+ },
32114
+ deliveryMode: offering.deliveryMode,
32115
+ attendanceModes: toAttendanceModes(offering),
32116
+ capacity: offering.enrollmentCapacity,
32117
+ registeredCount: offering.enrolledCount,
32118
+ availableSpots: offering.availableSpots,
32119
+ waitlistEnabled: offering.waitlistEnabled,
32120
+ venue: offering.venue ? {
32121
+ ...offering.venue,
32122
+ location: null
32123
+ } : null,
32124
+ eventCategory: null,
32125
+ teamMembers: offering.teamMembers,
32126
+ status: offering.status,
32127
+ timeZone: firstSession?.timeZone ?? "UTC",
32128
+ pricing: toWholeSeriesPricing(offering),
32129
+ paymentTerms: offering.paymentTerms,
32130
+ consent: offering.consent,
32131
+ requireGuestDetails: offering.requireGuestDetails,
32132
+ acceptsPasses: false,
32133
+ acceptsMemberships: offering.acceptsMemberships
32134
+ };
32016
32135
  }
32017
32136
  //#endregion
32018
32137
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -32038,11 +32157,7 @@ const eventRegistrationHydrationSchemaShape = {
32038
32157
  maxTickets: z.string().optional(),
32039
32158
  showVenue: z.boolean().optional(),
32040
32159
  showCapacity: z.boolean().optional(),
32041
- showSessions: z.boolean().optional(),
32042
- showPrice: z.boolean().optional(),
32043
32160
  successMessage: z.string().optional(),
32044
- waitlistMessage: z.string().optional(),
32045
- membershipMessage: z.string().optional(),
32046
32161
  buttonVariant: registrationButtonVariantSchema.optional(),
32047
32162
  overlayEnabled: z.boolean().optional(),
32048
32163
  spamProtectionEnabled: z.boolean().optional(),
@@ -32112,6 +32227,15 @@ function resolveWholeSeriesOffering(source) {
32112
32227
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
32113
32228
  }
32114
32229
  function buildEventRegistrationShellStepLabels(source) {
32230
+ const selectedOffering = resolveWholeSeriesOffering(source);
32231
+ if (selectedOffering) {
32232
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
32233
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
32234
+ eligibility: null,
32235
+ selectedTicketType: null,
32236
+ event: selectedEvent
32237
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
32238
+ }
32115
32239
  const scopedEvents = scopeEventRegistrationEvents(source);
32116
32240
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
32117
32241
  const preSelectedEvent = findPreSelectedEvent({
@@ -32175,11 +32299,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
32175
32299
  maxTickets: source.maxTickets ?? void 0,
32176
32300
  showVenue: source.showVenue,
32177
32301
  showCapacity: source.showCapacity,
32178
- showSessions: source.showSessions,
32179
- showPrice: source.showPrice,
32180
32302
  successMessage: source.successMessage,
32181
- waitlistMessage: source.waitlistMessage,
32182
- membershipMessage: source.membershipMessage,
32183
32303
  buttonVariant: source.buttonVariant,
32184
32304
  overlayEnabled: source.overlayEnabled,
32185
32305
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -32309,24 +32429,6 @@ const eventRegistrationBlockDefinition = {
32309
32429
  defaultValue: true,
32310
32430
  ui: { intent: "display" }
32311
32431
  },
32312
- {
32313
- id: "showSessions",
32314
- type: "boolean",
32315
- label: "Show complete schedule",
32316
- description: "Display every session for whole-series registrations",
32317
- required: false,
32318
- defaultValue: true,
32319
- ui: { intent: "display" }
32320
- },
32321
- {
32322
- id: "showPrice",
32323
- type: "boolean",
32324
- label: "Show price",
32325
- description: "Display the whole-series price",
32326
- required: false,
32327
- defaultValue: true,
32328
- ui: { intent: "display" }
32329
- },
32330
32432
  {
32331
32433
  id: "successMessage",
32332
32434
  type: "text",
@@ -32337,26 +32439,6 @@ const eventRegistrationBlockDefinition = {
32337
32439
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
32338
32440
  maxLength: 500
32339
32441
  },
32340
- {
32341
- id: "waitlistMessage",
32342
- type: "text",
32343
- label: "Waitlist message",
32344
- description: "Message shown after joining a whole-series waitlist",
32345
- required: false,
32346
- multiline: true,
32347
- defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
32348
- maxLength: 500
32349
- },
32350
- {
32351
- id: "membershipMessage",
32352
- type: "text",
32353
- label: "Membership registration message",
32354
- description: "Message shown when a whole-series place is covered by membership",
32355
- required: false,
32356
- multiline: true,
32357
- defaultValue: "Registered using your membership. Check your email for session details.",
32358
- maxLength: 500
32359
- },
32360
32442
  {
32361
32443
  id: "buttonText",
32362
32444
  type: "text",
@@ -32388,11 +32470,7 @@ const eventRegistrationBlockDefinition = {
32388
32470
  } },
32389
32471
  showVenue: { $bind: { from: "content.showVenue" } },
32390
32472
  showCapacity: { $bind: { from: "content.showCapacity" } },
32391
- showSessions: { $bind: { from: "content.showSessions" } },
32392
- showPrice: { $bind: { from: "content.showPrice" } },
32393
32473
  successMessage: { $bind: { from: "content.successMessage" } },
32394
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
32395
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
32396
32474
  buttonText: { $bind: {
32397
32475
  from: "content.buttonText",
32398
32476
  fallback: "Complete Registration"
@@ -32509,267 +32587,6 @@ const eventRegistrationBlockDefinition = {
32509
32587
  }
32510
32588
  };
32511
32589
  //#endregion
32512
- //#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
32513
- const courseRegistrationHydrationSchemaShape = {
32514
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
32515
- courses: z.array(publicWholeSeriesOfferingSchema).nullable().optional(),
32516
- showSessions: z.boolean().optional(),
32517
- showPrice: z.boolean().optional(),
32518
- showCapacity: z.boolean().optional(),
32519
- showVenue: z.boolean().optional(),
32520
- successMessage: z.string().optional(),
32521
- waitlistMessage: z.string().optional(),
32522
- membershipMessage: z.string().optional(),
32523
- buttonVariant: registrationButtonVariantSchema.optional()
32524
- };
32525
- const courseRegistrationSourceSchema = z.object({
32526
- siteId: z.string().optional(),
32527
- apiBaseUrl: z.string().optional(),
32528
- portalToken: z.string().nullable().optional(),
32529
- ...courseRegistrationHydrationSchemaShape,
32530
- className: z.string().nullable().optional(),
32531
- buttonText: z.string().nullable().optional(),
32532
- stage: previewStageSchema.optional()
32533
- });
32534
- const courseRegistrationDisplaySchema = z.object({
32535
- kind: z.literal("course-registration"),
32536
- state: z.literal("shell"),
32537
- className: z.string().nullable(),
32538
- summaryButtonText: z.string()
32539
- });
32540
- const courseRegistrationHydrationSchema = z.object(courseRegistrationHydrationSchemaShape);
32541
- const courseRegistrationRenderSchema = z.object({
32542
- display: courseRegistrationDisplaySchema,
32543
- hydration: courseRegistrationHydrationSchema
32544
- });
32545
- z.object({
32546
- siteId: z.string().optional(),
32547
- apiBaseUrl: z.string().optional(),
32548
- portalToken: z.string().nullable().optional(),
32549
- stage: previewStageSchema.optional()
32550
- });
32551
- function buildCourseRegistrationDisplay(source) {
32552
- return {
32553
- kind: "course-registration",
32554
- state: "shell",
32555
- className: source.className ?? null,
32556
- summaryButtonText: source.buttonText?.trim() || "Sign up"
32557
- };
32558
- }
32559
- const courseRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
32560
- kind: "client-owned",
32561
- contracts: {
32562
- source: createZodCodec(courseRegistrationSourceSchema),
32563
- render: createZodCodec(courseRegistrationRenderSchema)
32564
- },
32565
- buildRender: (source) => ({
32566
- display: buildCourseRegistrationDisplay(source),
32567
- hydration: {
32568
- subject: source.subject ?? null,
32569
- courses: source.courses ?? null,
32570
- showSessions: source.showSessions,
32571
- showPrice: source.showPrice,
32572
- showCapacity: source.showCapacity,
32573
- showVenue: source.showVenue,
32574
- successMessage: source.successMessage,
32575
- waitlistMessage: source.waitlistMessage,
32576
- membershipMessage: source.membershipMessage,
32577
- buttonVariant: source.buttonVariant
32578
- }
32579
- })
32580
- });
32581
- function buildCourseRegistrationInteractiveIslandProps(props) {
32582
- return buildInteractiveIslandProps({
32583
- runtime: courseRegistrationBlockRuntime,
32584
- mode: "course-registration",
32585
- meta: {
32586
- siteId: props.siteId,
32587
- apiBaseUrl: props.apiBaseUrl,
32588
- portalToken: props.portalToken,
32589
- stage: props.stage
32590
- },
32591
- source: props
32592
- });
32593
- }
32594
- const courseRegistrationBlockDefinition = {
32595
- manifest: createBlockManifest({
32596
- id: "block.course-registration",
32597
- version: "1.0.0",
32598
- title: "Course Registration",
32599
- titleSource: "heading",
32600
- description: "Enrollment form for multi-session courses",
32601
- category: "interactive",
32602
- contentSource: { kind: "inline" },
32603
- tags: [
32604
- "courses",
32605
- "enrollment",
32606
- "booking",
32607
- "form",
32608
- "signup",
32609
- "education"
32610
- ],
32611
- icon: "GraduationCap",
32612
- styleTokens: {
32613
- background: "surface",
32614
- typography: "body",
32615
- spacing: "md"
32616
- },
32617
- behaviours: {
32618
- supportsThemeSwitching: true,
32619
- inlineEditing: false,
32620
- animation: false,
32621
- paletteHidden: false
32622
- },
32623
- additionalFields: [
32624
- {
32625
- id: "heading",
32626
- type: "text",
32627
- label: "Heading",
32628
- description: "Main heading for the registration form",
32629
- required: false,
32630
- multiline: false,
32631
- defaultValue: "Sign up"
32632
- },
32633
- {
32634
- id: "description",
32635
- type: "richText",
32636
- label: "Description",
32637
- description: "Optional introductory text",
32638
- required: false
32639
- },
32640
- {
32641
- id: "showSessions",
32642
- type: "boolean",
32643
- label: "Show sessions",
32644
- description: "Display the list of course sessions",
32645
- required: false,
32646
- defaultValue: true,
32647
- ui: { intent: "display" }
32648
- },
32649
- {
32650
- id: "showPrice",
32651
- type: "boolean",
32652
- label: "Show price",
32653
- description: "Display the course price",
32654
- required: false,
32655
- defaultValue: true,
32656
- ui: { intent: "display" }
32657
- },
32658
- {
32659
- id: "showCapacity",
32660
- type: "boolean",
32661
- label: "Show available spots",
32662
- description: "Display remaining enrollment capacity",
32663
- required: false,
32664
- defaultValue: true,
32665
- ui: { intent: "display" }
32666
- },
32667
- {
32668
- id: "showVenue",
32669
- type: "boolean",
32670
- label: "Show venue",
32671
- description: "Display venue information",
32672
- required: false,
32673
- defaultValue: true,
32674
- ui: { intent: "display" }
32675
- },
32676
- {
32677
- id: "successMessage",
32678
- type: "text",
32679
- label: "Success message",
32680
- description: "Message shown after successful enrollment",
32681
- required: false,
32682
- multiline: true,
32683
- defaultValue: "You're enrolled! Check your email for confirmation and session details.",
32684
- maxLength: 500
32685
- },
32686
- {
32687
- id: "waitlistMessage",
32688
- type: "text",
32689
- label: "Waitlist message",
32690
- description: "Message when added to waitlist",
32691
- required: false,
32692
- multiline: true,
32693
- defaultValue: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
32694
- maxLength: 500
32695
- },
32696
- {
32697
- id: "membershipMessage",
32698
- type: "text",
32699
- label: "Membership enrollment message",
32700
- description: "Message when enrolled using a membership",
32701
- required: false,
32702
- multiline: true,
32703
- defaultValue: "Enrolled using your membership! Check your email for session details.",
32704
- maxLength: 500
32705
- },
32706
- {
32707
- id: "buttonText",
32708
- type: "text",
32709
- label: "Submit button text",
32710
- description: "Text for the enrollment submit button",
32711
- required: false,
32712
- multiline: false,
32713
- defaultValue: "Sign up",
32714
- maxLength: 40
32715
- },
32716
- createButtonVariantField()
32717
- ],
32718
- layout: [styledSection({
32719
- baseClass: "",
32720
- spacing: "spacious",
32721
- children: sectionContainer([
32722
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
32723
- richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
32724
- courseRegistration(withApiBindings({
32725
- subject: { $bind: {
32726
- from: "$root.subject",
32727
- fallback: null
32728
- } },
32729
- portalToken: { $bind: {
32730
- from: "$root.portalToken",
32731
- fallback: null
32732
- } },
32733
- showSessions: { $bind: { from: "content.showSessions" } },
32734
- showPrice: { $bind: { from: "content.showPrice" } },
32735
- showCapacity: { $bind: { from: "content.showCapacity" } },
32736
- showVenue: { $bind: { from: "content.showVenue" } },
32737
- successMessage: { $bind: { from: "content.successMessage" } },
32738
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
32739
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
32740
- buttonText: { $bind: {
32741
- from: "content.buttonText",
32742
- fallback: "Sign up"
32743
- } },
32744
- buttonVariant: { $bind: {
32745
- from: "content.buttonVariant",
32746
- fallback: "primary"
32747
- } },
32748
- courses: { $bind: { from: "data.courses" } },
32749
- stage: { $bind: {
32750
- from: "$root.previewStage",
32751
- fallback: "published"
32752
- } }
32753
- }))
32754
- ], { gap: "lg" })
32755
- })]
32756
- }),
32757
- runtime: courseRegistrationBlockRuntime,
32758
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
32759
- dataLoaders: { courses: {
32760
- endpoint: "listPublicWholeSeriesOfferings",
32761
- params: {
32762
- siteId: { $bind: { from: "$root.siteId" } },
32763
- limit: "50",
32764
- stage: { $bind: {
32765
- from: "$root.previewStage",
32766
- fallback: "published"
32767
- } }
32768
- },
32769
- mode: "server"
32770
- } }
32771
- };
32772
- //#endregion
32773
32590
  //#region ../blocks/src/system/blocks/event-details.ts
32774
32591
  /**
32775
32592
  * Event Details Block
@@ -33016,200 +32833,6 @@ const eventDetailsBlockDefinition = {
33016
32833
  mode: "server"
33017
32834
  } }
33018
32835
  };
33019
- const courseDetailsBlockDefinition = {
33020
- manifest: createBlockManifest({
33021
- id: "block.course-details",
33022
- version: "1.0.0",
33023
- title: "Course Details",
33024
- titleSource: "heading",
33025
- description: "Schedule, venue, price, and enrollment status for a course",
33026
- category: "content",
33027
- contentSource: { kind: "entries" },
33028
- tags: [
33029
- "courses",
33030
- "schedule",
33031
- "sessions",
33032
- "venue",
33033
- "pricing"
33034
- ],
33035
- icon: "GraduationCap",
33036
- styleTokens: {
33037
- background: "surface",
33038
- typography: "body",
33039
- spacing: "md"
33040
- },
33041
- behaviours: {
33042
- supportsThemeSwitching: true,
33043
- inlineEditing: false,
33044
- animation: false,
33045
- paletteHidden: false
33046
- },
33047
- additionalFields: [
33048
- {
33049
- id: "heading",
33050
- type: "text",
33051
- label: "Heading",
33052
- description: "Optional heading shown above course details",
33053
- required: false,
33054
- multiline: false,
33055
- defaultValue: "Course details"
33056
- },
33057
- {
33058
- id: "showTitle",
33059
- type: "boolean",
33060
- label: "Show course title",
33061
- required: false,
33062
- defaultValue: false,
33063
- ui: { intent: "display" }
33064
- },
33065
- {
33066
- id: "showDescription",
33067
- type: "boolean",
33068
- label: "Show course description",
33069
- description: "Render the course description from the bookings course record",
33070
- required: false,
33071
- defaultValue: false,
33072
- ui: { intent: "display" }
33073
- },
33074
- {
33075
- id: "showSessions",
33076
- type: "boolean",
33077
- label: "Show sessions",
33078
- required: false,
33079
- defaultValue: true,
33080
- ui: { intent: "display" }
33081
- },
33082
- {
33083
- id: "sessionsLimit",
33084
- type: "select",
33085
- label: "Sessions limit",
33086
- required: false,
33087
- multiple: false,
33088
- defaultValue: "10",
33089
- options: [
33090
- {
33091
- value: "3",
33092
- label: "3 sessions"
33093
- },
33094
- {
33095
- value: "5",
33096
- label: "5 sessions"
33097
- },
33098
- {
33099
- value: "10",
33100
- label: "10 sessions"
33101
- },
33102
- {
33103
- value: "all",
33104
- label: "All sessions"
33105
- }
33106
- ],
33107
- ui: { intent: "display" }
33108
- },
33109
- {
33110
- id: "showVenue",
33111
- type: "boolean",
33112
- label: "Show venue",
33113
- required: false,
33114
- defaultValue: true,
33115
- ui: { intent: "display" }
33116
- },
33117
- {
33118
- id: "showPrice",
33119
- type: "boolean",
33120
- label: "Show price",
33121
- required: false,
33122
- defaultValue: true,
33123
- ui: { intent: "display" }
33124
- },
33125
- {
33126
- id: "showCapacity",
33127
- type: "boolean",
33128
- label: "Show capacity",
33129
- required: false,
33130
- defaultValue: true,
33131
- ui: { intent: "display" }
33132
- },
33133
- {
33134
- id: "showEnrollmentStatus",
33135
- type: "boolean",
33136
- label: "Show enrollment status",
33137
- required: false,
33138
- defaultValue: true,
33139
- ui: { intent: "display" }
33140
- },
33141
- {
33142
- id: "showMembershipNote",
33143
- type: "boolean",
33144
- label: "Show membership note",
33145
- description: "Indicate when memberships can be used for free enrollment",
33146
- required: false,
33147
- defaultValue: true,
33148
- ui: { intent: "display" }
33149
- }
33150
- ],
33151
- layout: [styledSection({
33152
- baseClass: "",
33153
- spacing: "spacious",
33154
- children: sectionContainer([text({ as: "h2" }, bind("content.heading"), when("content.heading")), el("course-details", {
33155
- subject: { $bind: {
33156
- from: "$root.subject",
33157
- fallback: null
33158
- } },
33159
- courses: { $bind: { from: "data.courses" } },
33160
- showTitle: { $bind: {
33161
- from: "content.showTitle",
33162
- fallback: false
33163
- } },
33164
- showDescription: { $bind: {
33165
- from: "content.showDescription",
33166
- fallback: false
33167
- } },
33168
- showSessions: { $bind: {
33169
- from: "content.showSessions",
33170
- fallback: true
33171
- } },
33172
- sessionsLimit: { $bind: {
33173
- from: "content.sessionsLimit",
33174
- fallback: "10"
33175
- } },
33176
- showVenue: { $bind: {
33177
- from: "content.showVenue",
33178
- fallback: true
33179
- } },
33180
- showPrice: { $bind: {
33181
- from: "content.showPrice",
33182
- fallback: true
33183
- } },
33184
- showCapacity: { $bind: {
33185
- from: "content.showCapacity",
33186
- fallback: true
33187
- } },
33188
- showEnrollmentStatus: { $bind: {
33189
- from: "content.showEnrollmentStatus",
33190
- fallback: true
33191
- } },
33192
- showMembershipNote: { $bind: {
33193
- from: "content.showMembershipNote",
33194
- fallback: true
33195
- } }
33196
- })], { gap: "lg" })
33197
- })]
33198
- }),
33199
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
33200
- dataLoaders: { courses: {
33201
- endpoint: "listPublicWholeSeriesOfferings",
33202
- params: {
33203
- siteId: { $bind: { from: "$root.siteId" } },
33204
- limit: "50",
33205
- stage: { $bind: {
33206
- from: "$root.previewStage",
33207
- fallback: "published"
33208
- } }
33209
- },
33210
- mode: "server"
33211
- } }
33212
- };
33213
32836
  const eventSpotlightBlockDefinition = {
33214
32837
  manifest: createBlockManifest({
33215
32838
  id: "block.event-spotlight",
@@ -38461,7 +38084,7 @@ const offeringsPreviewManifest = createBlockManifest({
38461
38084
  fallback: "published"
38462
38085
  } },
38463
38086
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
38464
- courses: { $bind: { from: "data.courses" } },
38087
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
38465
38088
  ...offeringsPreviewEventDataBindings
38466
38089
  })
38467
38090
  ], { gap: "lg" }),
@@ -38478,7 +38101,7 @@ const offeringsPreviewBlockDefinition = {
38478
38101
  dataSchemas: {
38479
38102
  ...offeringsPreviewEventDataSchemas,
38480
38103
  routeCandidates: publicRouteCandidatesSchema.optional(),
38481
- courses: publicWholeSeriesOfferingsArraySchema.optional()
38104
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
38482
38105
  },
38483
38106
  dataLoaders: {
38484
38107
  ...offeringsPreviewEventDataLoaders,
@@ -38487,7 +38110,7 @@ const offeringsPreviewBlockDefinition = {
38487
38110
  params: {},
38488
38111
  mode: "server"
38489
38112
  },
38490
- courses: {
38113
+ wholeSeriesOfferings: {
38491
38114
  endpoint: "listPublicWholeSeriesOfferings",
38492
38115
  params: {
38493
38116
  siteId: { $bind: { from: "$root.siteId" } },
@@ -43571,22 +43194,6 @@ const systemBlockDefinitions = [
43571
43194
  weight: "standard"
43572
43195
  })]
43573
43196
  })),
43574
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
43575
- flow: conversionFlow,
43576
- layoutProfiles: [layoutProfile({
43577
- variantKey: "default",
43578
- family: "form",
43579
- weight: "standard"
43580
- })]
43581
- })),
43582
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
43583
- flow: offeringsFlow,
43584
- layoutProfiles: [layoutProfile({
43585
- variantKey: "default",
43586
- family: "stack",
43587
- weight: "standard"
43588
- })]
43589
- })),
43590
43197
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
43591
43198
  flow: offeringsFlow,
43592
43199
  layoutProfiles: [layoutProfile({
@@ -46472,7 +46079,7 @@ function emptySelection(timeZone) {
46472
46079
  timeZone
46473
46080
  };
46474
46081
  }
46475
- function parseLimit$1(value, fallback) {
46082
+ function parseLimit(value, fallback) {
46476
46083
  if (value === "all") return Number.MAX_SAFE_INTEGER;
46477
46084
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
46478
46085
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -46555,7 +46162,7 @@ function selectEventDetails(args) {
46555
46162
  subject: args.subject
46556
46163
  }));
46557
46164
  const occurrenceContext = args.occurrenceContext ?? null;
46558
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
46165
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
46559
46166
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
46560
46167
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
46561
46168
  if (!candidate) return emptySelection(timeZone);
@@ -46634,7 +46241,7 @@ function resolveEventDetailsPresentation(input) {
46634
46241
  //#region ../blocks/src/system/runtime/nodes/events/shared/DateTimeTile.tsx
46635
46242
  /**
46636
46243
  * Shared tile content for displaying date and time range.
46637
- * Used by event-details "Other dates" and course-details "Sessions".
46244
+ * Used by event-details "Other dates".
46638
46245
  */
46639
46246
  function DateTimeTile({ startsAt, endsAt, timeZone }) {
46640
46247
  const { date, timeRange } = formatEventDateParts({
@@ -46654,8 +46261,8 @@ function DateTimeTile({ startsAt, endsAt, timeZone }) {
46654
46261
  });
46655
46262
  }
46656
46263
  //#endregion
46657
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
46658
- function CoursePricingDisplay({ pricing, acceptedItems }) {
46264
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
46265
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
46659
46266
  return /* @__PURE__ */ jsxs("div", {
46660
46267
  className: "rb-mt-6",
46661
46268
  children: [
@@ -46667,7 +46274,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
46667
46274
  className: "rb-flex rb-flex-col rb-gap-2",
46668
46275
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
46669
46276
  option.name,
46670
- ": ",
46277
+ ":",
46278
+ " ",
46671
46279
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
46672
46280
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
46673
46281
  className: "rb-caption status-muted",
@@ -46688,7 +46296,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
46688
46296
  const label = preview.publicLabel.trim() || "Discount";
46689
46297
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
46690
46298
  }
46691
- function TeamMemberName$1({ name, profilePath }) {
46299
+ function TeamMemberName({ name, profilePath }) {
46692
46300
  return profilePath ? /* @__PURE__ */ jsx("a", {
46693
46301
  href: profilePath,
46694
46302
  className: "rb-hover-opacity-80",
@@ -46725,7 +46333,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
46725
46333
  children: "No registration required - just show up"
46726
46334
  })]
46727
46335
  });
46728
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
46336
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
46729
46337
  pricing: coursePricing,
46730
46338
  acceptedItems: [...acceptedItems]
46731
46339
  });
@@ -46800,7 +46408,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
46800
46408
  children: "With"
46801
46409
  }), /* @__PURE__ */ jsx("div", {
46802
46410
  className: "rb-flex rb-flex-col rb-gap-3",
46803
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
46411
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
46804
46412
  name: member.name,
46805
46413
  profilePath: member.profilePath
46806
46414
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -47079,352 +46687,6 @@ function LocationMapSSR(props) {
47079
46687
  });
47080
46688
  }
47081
46689
  //#endregion
47082
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
47083
- /**
47084
- * Resolves native run-page ownership without falling back to entry or slug
47085
- * coincidence when a page-surface subject is present but invalid.
47086
- */
47087
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
47088
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
47089
- const parsed = parseEventPageSurfaceSubject(subjectValue);
47090
- if (!parsed.ok) return {
47091
- kind: "unsupported",
47092
- reason: parsed.error.kind
47093
- };
47094
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
47095
- const allowedSeriesIds = new Set(seriesIds);
47096
- return {
47097
- kind: "scoped",
47098
- subject: parsed.value,
47099
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
47100
- };
47101
- }
47102
- function eventSeriesIdsForSubject(subject) {
47103
- switch (subject.kind) {
47104
- case "eventSeries": return [subject.eventSeriesId];
47105
- case "eventOffering": return subject.availableEventSeriesIds;
47106
- default: return assertNever$3(subject);
47107
- }
47108
- }
47109
- //#endregion
47110
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
47111
- /** Temporary Course-block adapter over canonical Event run scoping. */
47112
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
47113
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
47114
- return scope.kind === "scoped" ? {
47115
- kind: "scoped",
47116
- subject: scope.subject,
47117
- courses: scope.runs
47118
- } : scope;
47119
- }
47120
- //#endregion
47121
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
47122
- function selectCourseDetails(args) {
47123
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
47124
- if (pageSurfaceScope.kind === "unsupported") return {
47125
- mode: "unsupportedPageSurfaceSubject",
47126
- selected: null,
47127
- scoped: []
47128
- };
47129
- if (pageSurfaceScope.kind === "scoped") {
47130
- const scoped = [...pageSurfaceScope.courses];
47131
- return {
47132
- mode: "pageSurfaceSubject",
47133
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
47134
- scoped
47135
- };
47136
- }
47137
- return {
47138
- mode: "unsupportedPageSurfaceSubject",
47139
- selected: null,
47140
- scoped: []
47141
- };
47142
- }
47143
- //#endregion
47144
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
47145
- function toValidDate(value) {
47146
- if (!value) return null;
47147
- const date = new Date(value);
47148
- return Number.isNaN(date.getTime()) ? null : date;
47149
- }
47150
- function getCourseDateRange(course) {
47151
- const datedSessions = (course.sessions ?? []).map((session) => ({
47152
- session,
47153
- start: toValidDate(session.startsAt),
47154
- end: toValidDate(session.endsAt)
47155
- })).filter((value) => value.start !== null || value.end !== null);
47156
- if (datedSessions.length === 0) return {
47157
- start: null,
47158
- end: null,
47159
- startIso: null,
47160
- endIso: null,
47161
- timeZone: null
47162
- };
47163
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
47164
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
47165
- return {
47166
- start: startSession?.start ?? null,
47167
- end: endSession?.end ?? null,
47168
- startIso: startSession?.session.startsAt ?? null,
47169
- endIso: endSession?.session.endsAt ?? null,
47170
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
47171
- };
47172
- }
47173
- function formatCourseDateRange(range) {
47174
- const { startIso, endIso, timeZone } = range;
47175
- const dateFormat = {
47176
- month: "numeric",
47177
- day: "numeric",
47178
- year: "numeric"
47179
- };
47180
- const effectiveTimeZone = toBookingTimeZone(timeZone);
47181
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
47182
- startsAt: iso,
47183
- timeZone: effectiveTimeZone
47184
- }), dateFormat);
47185
- const formatRangeDateOnly = (startsAt, endsAt) => {
47186
- const startText = formatSingleDate(startsAt);
47187
- const endText = formatSingleDate(endsAt);
47188
- return startText === endText ? startText : `${startText} – ${endText}`;
47189
- };
47190
- if (!startIso && !endIso) return "Dates TBD";
47191
- if (startIso && !endIso) return formatSingleDate(startIso);
47192
- if (!startIso && endIso) return formatSingleDate(endIso);
47193
- if (!startIso || !endIso) return "Dates TBD";
47194
- return formatRangeDateOnly(startIso, endIso);
47195
- }
47196
- //#endregion
47197
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
47198
- function TeamMemberName({ name, profilePath }) {
47199
- return profilePath ? /* @__PURE__ */ jsx("a", {
47200
- href: profilePath,
47201
- className: "rb-hover-opacity-80",
47202
- children: /* @__PURE__ */ jsx("strong", { children: name })
47203
- }) : /* @__PURE__ */ jsx("strong", { children: name });
47204
- }
47205
- function parseLimit(value, fallback) {
47206
- if (value === "all") return "all";
47207
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
47208
- return Number.isFinite(n) && n > 0 ? n : fallback;
47209
- }
47210
- function CourseDetailsView(props) {
47211
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
47212
- if (!course) return /* @__PURE__ */ jsx("p", {
47213
- className: "rb-caption status-muted",
47214
- children: emptyMessage
47215
- });
47216
- const pricing = resolveWholeSeriesPricingState(course);
47217
- const sessionLimit = parseLimit(sessionsLimit, 10);
47218
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
47219
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
47220
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
47221
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
47222
- const teamMembers = course.teamMembers ?? [];
47223
- return /* @__PURE__ */ jsxs("div", {
47224
- className: "rb-flex rb-flex-col rb-gap-6",
47225
- children: [
47226
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
47227
- /* @__PURE__ */ jsxs("div", {
47228
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
47229
- children: [/* @__PURE__ */ jsxs("div", {
47230
- className: "rb-flex rb-flex-col rb-gap-4",
47231
- children: [
47232
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47233
- className: "rb-label rb-mb-2",
47234
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
47235
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
47236
- className: "rb-flex rb-flex-col rb-gap-2",
47237
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
47238
- option.name,
47239
- ": ",
47240
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
47241
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
47242
- className: "rb-caption status-muted",
47243
- children: option.description
47244
- }) : null] }, option.id))
47245
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
47246
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47247
- className: "rb-label rb-mb-2",
47248
- children: "Spots"
47249
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
47250
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47251
- className: "rb-label rb-mb-2",
47252
- children: "Membership"
47253
- }), /* @__PURE__ */ jsx("p", {
47254
- className: "rb-caption status-muted",
47255
- children: "Eligible memberships can be used for free enrollment"
47256
- })] }),
47257
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47258
- className: "rb-label rb-mb-2",
47259
- children: "With"
47260
- }), /* @__PURE__ */ jsx("div", {
47261
- className: "rb-flex rb-flex-col rb-gap-3",
47262
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
47263
- name: teamMember.name,
47264
- profilePath: teamMember.profilePath
47265
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
47266
- className: "rb-caption status-muted",
47267
- children: teamMember.summary
47268
- })] }, teamMember.id))
47269
- })] })
47270
- ]
47271
- }), /* @__PURE__ */ jsxs("div", {
47272
- className: "rb-flex rb-flex-col rb-gap-4",
47273
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
47274
- /* @__PURE__ */ jsx("div", {
47275
- className: "rb-label rb-mb-2",
47276
- children: "Venue"
47277
- }),
47278
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
47279
- course.venue.address && /* @__PURE__ */ jsx("p", {
47280
- className: "rb-caption status-muted",
47281
- children: course.venue.address
47282
- })
47283
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47284
- className: "rb-label rb-mb-2",
47285
- children: "Enrollment"
47286
- }), /* @__PURE__ */ jsx("p", {
47287
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
47288
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
47289
- })] })]
47290
- })]
47291
- }),
47292
- descriptionDoc && /* @__PURE__ */ jsx("div", {
47293
- className: "cd-description",
47294
- children: /* @__PURE__ */ jsx(RichText, { doc: descriptionDoc })
47295
- }),
47296
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
47297
- /* @__PURE__ */ jsx("div", {
47298
- className: "rb-label",
47299
- children: "Sessions"
47300
- }),
47301
- /* @__PURE__ */ jsx("div", {
47302
- className: "rb-mt-2 rb-tiles-grid",
47303
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
47304
- className: "rb-tile",
47305
- children: /* @__PURE__ */ jsx(DateTimeTile, {
47306
- startsAt: s.startsAt,
47307
- endsAt: s.endsAt
47308
- })
47309
- }, s.id))
47310
- }),
47311
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
47312
- className: "cd-sessions__more",
47313
- children: [
47314
- "Showing ",
47315
- visibleSessions.length,
47316
- " of ",
47317
- sortedSessions.length,
47318
- " sessions."
47319
- ]
47320
- })
47321
- ] })
47322
- ]
47323
- });
47324
- }
47325
- //#endregion
47326
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
47327
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
47328
- const selection = selectCourseDetails({
47329
- courses: courses ?? null,
47330
- subject
47331
- });
47332
- const parsedSubject = parseEventPageSurfaceSubject(subject);
47333
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
47334
- const now = /* @__PURE__ */ new Date();
47335
- const scopedWithRange = selection.scoped.map((c) => ({
47336
- course: c,
47337
- range: getCourseDateRange(c)
47338
- }));
47339
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
47340
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
47341
- });
47342
- const lastPastRun = scopedWithRange.filter(({ range }) => Boolean(range.end && range.end <= now)).sort((a, b) => (b.range.end?.getTime() ?? 0) - (a.range.end?.getTime() ?? 0))[0] ?? null;
47343
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
47344
- return /* @__PURE__ */ jsxs("div", {
47345
- className: `course-details ${className ?? ""}`.trim(),
47346
- "data-block": "course-details",
47347
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
47348
- course: selection.selected,
47349
- showTitle,
47350
- showDescription,
47351
- showSessions,
47352
- sessionsLimit,
47353
- showVenue,
47354
- showPrice,
47355
- showCapacity,
47356
- showEnrollmentStatus,
47357
- showMembershipNote
47358
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
47359
- className: "rb-flex rb-flex-col rb-gap-3",
47360
- children: [
47361
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47362
- className: "rb-label rb-mb-2",
47363
- children: "Upcoming runs"
47364
- }), /* @__PURE__ */ jsx("p", {
47365
- className: "rb-caption status-muted",
47366
- children: "Choose a run to see sessions and details."
47367
- })] }),
47368
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
47369
- className: "rb-flex rb-flex-col rb-gap-2",
47370
- children: nonPastRuns.map(({ course, range }) => {
47371
- const start = range.start;
47372
- const end = range.end;
47373
- const isInProgress = Boolean(start && end && start <= now && end > now);
47374
- return /* @__PURE__ */ jsx("li", {
47375
- className: "rb-rounded-md rb-border rb-p-3",
47376
- children: /* @__PURE__ */ jsx("div", {
47377
- className: "rb-flex rb-flex-col rb-gap-1",
47378
- children: /* @__PURE__ */ jsxs("div", {
47379
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
47380
- children: [/* @__PURE__ */ jsxs("div", {
47381
- className: "rb-min-w-0",
47382
- children: [/* @__PURE__ */ jsx("div", {
47383
- className: "rb-truncate",
47384
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
47385
- }), /* @__PURE__ */ jsx("div", {
47386
- className: "rb-caption status-muted",
47387
- children: formatCourseDateRange(range)
47388
- })]
47389
- }), /* @__PURE__ */ jsx("div", {
47390
- className: "rb-caption status-muted rb-shrink-0",
47391
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
47392
- })]
47393
- })
47394
- })
47395
- }, course.eventSeriesId);
47396
- })
47397
- }) : /* @__PURE__ */ jsx("p", {
47398
- className: "rb-caption status-muted",
47399
- children: "No upcoming runs."
47400
- }),
47401
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
47402
- className: "rb-caption status-muted",
47403
- children: [
47404
- "Last run: ",
47405
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
47406
- " (",
47407
- formatCourseDateRange(lastPastRun.range),
47408
- ")"
47409
- ]
47410
- }) : null
47411
- ]
47412
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
47413
- course: null,
47414
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
47415
- showTitle,
47416
- showDescription,
47417
- showSessions,
47418
- sessionsLimit,
47419
- showVenue,
47420
- showPrice,
47421
- showCapacity,
47422
- showEnrollmentStatus,
47423
- showMembershipNote
47424
- }), children]
47425
- });
47426
- }
47427
- //#endregion
47428
46690
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
47429
46691
  /**
47430
46692
  * EventSpotlight Component
@@ -47628,7 +46890,7 @@ function deriveCourseScheduleSummary(course) {
47628
46890
  sessionCount: sessions.length
47629
46891
  };
47630
46892
  }
47631
- function nextCourseSessionStart(course) {
46893
+ function nextWholeSeriesSessionStart(course) {
47632
46894
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
47633
46895
  }
47634
46896
  function occurrenceFromEvent(event) {
@@ -47782,7 +47044,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
47782
47044
  function buildItemDataMap(props) {
47783
47045
  const routeCandidates = props.routeCandidates?.routes ?? [];
47784
47046
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
47785
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
47047
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
47786
47048
  }
47787
47049
  function eventDataFromMaybeArray(events) {
47788
47050
  return events ? {
@@ -47836,8 +47098,8 @@ function renderOfferingGroupItems(presentation, items, options) {
47836
47098
  }
47837
47099
  }
47838
47100
  function compareCoursesByNextSession(left, right) {
47839
- const leftStart = nextCourseSessionStart(left);
47840
- const rightStart = nextCourseSessionStart(right);
47101
+ const leftStart = nextWholeSeriesSessionStart(left);
47102
+ const rightStart = nextWholeSeriesSessionStart(right);
47841
47103
  if (leftStart === null) return rightStart === null ? 0 : 1;
47842
47104
  if (rightStart === null) return -1;
47843
47105
  return leftStart.localeCompare(rightStart);
@@ -48776,45 +48038,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
48776
48038
  });
48777
48039
  }
48778
48040
  //#endregion
48779
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
48780
- /**
48781
- * Server-safe placeholder for course registration.
48782
- * Provides a static container for island hydration without importing client hooks.
48783
- */
48784
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
48785
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
48786
- siteId,
48787
- apiBaseUrl,
48788
- portalToken,
48789
- subject,
48790
- courses,
48791
- className,
48792
- showSessions,
48793
- showPrice,
48794
- showCapacity,
48795
- showVenue,
48796
- successMessage,
48797
- waitlistMessage,
48798
- membershipMessage,
48799
- buttonText,
48800
- buttonVariant,
48801
- stage
48802
- });
48803
- return /* @__PURE__ */ jsxs("div", {
48804
- className: `course-registration ${className ?? ""}`.trim(),
48805
- "data-block": "course-registration",
48806
- ...getIslandRootProps("course-registration", blockId),
48807
- children: [
48808
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
48809
- /* @__PURE__ */ jsx("div", {
48810
- className: "course-registration__summary",
48811
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
48812
- }),
48813
- children
48814
- ]
48815
- });
48816
- }
48817
- //#endregion
48818
48041
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
48819
48042
  function GiftingSSR({ blockId, ...rest }) {
48820
48043
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -50302,7 +49525,6 @@ const runtimeBackedBlockServerEntries = {
50302
49525
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
50303
49526
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
50304
49527
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
50305
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
50306
49528
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
50307
49529
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
50308
49530
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -50335,7 +49557,6 @@ const serverComponentRegistry = {
50335
49557
  "booking-form": BookingFormSSR,
50336
49558
  "event-details": EventDetailsSSR,
50337
49559
  "location-map": LocationMapSSR,
50338
- "course-details": CourseDetailsSSR,
50339
49560
  "event-spotlight": EventSpotlight,
50340
49561
  "event-combined": EventCombinedSSR,
50341
49562
  "offerings-preview": OfferingsPreviewNode,
@@ -54705,176 +53926,6 @@ ${root} {
54705
53926
  `;
54706
53927
  }
54707
53928
  //#endregion
54708
- //#region ../theme-core/src/blocks/vars/course-details.ts
54709
- /**
54710
- * Generate CSS variables for the course-details block.
54711
- *
54712
- * Variables defined:
54713
- * - Enrollment status colors (open/closed)
54714
- * - Capacity indicator colors (available/low/full)
54715
- * - Price display colors (free indicator)
54716
- */
54717
- function generateCourseDetailsVars({ themeId }) {
54718
- return `
54719
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
54720
- /* Enrollment status */
54721
- --cd-enrollment-open-text: rgb(var(--tb-success));
54722
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
54723
-
54724
- /* Capacity indicator */
54725
- --cd-capacity-available-text: rgb(var(--tb-success));
54726
- --cd-capacity-low-text: rgb(var(--tb-warning));
54727
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
54728
-
54729
- /* Price styling */
54730
- --cd-price-free-text: rgb(var(--tb-success));
54731
- }
54732
- `;
54733
- }
54734
- //#endregion
54735
- //#region ../theme-core/src/blocks/vars/course-registration.ts
54736
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
54737
- /* Temporary bridge while persisted Course blocks render the Event-owned
54738
- whole-series registration runtime. Removed with the Course block. */
54739
- --er-step-active: var(--cr-step-active);
54740
- --er-step-inactive: var(--cr-step-inactive);
54741
- --er-step-completed: var(--cr-step-completed);
54742
- --er-step-text: var(--cr-step-text);
54743
- --er-step-text-active: var(--cr-step-text-active);
54744
- --er-step-connector: var(--cr-step-connector);
54745
- --er-step-title-size: var(--cr-step-title-size);
54746
- --er-success-bg: var(--cr-success-bg);
54747
- --er-success-text: var(--cr-success-text);
54748
- --er-error-bg: var(--cr-error-bg);
54749
- --er-error-text: var(--cr-error-text);
54750
- --er-waitlist-bg: var(--cr-waitlist-bg);
54751
- --er-waitlist-text: var(--cr-waitlist-text);
54752
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
54753
- --er-capacity-available-text: var(--cr-capacity-available-text);
54754
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
54755
- --er-capacity-low-text: var(--cr-capacity-low-text);
54756
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
54757
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
54758
- --er-border: var(--cr-border);
54759
- --er-border-hover: var(--cr-border-hover);
54760
- --er-border-selected: var(--cr-border-selected);
54761
- --er-border-error: var(--cr-border-error);
54762
- --er-focus-ring: var(--cr-focus-ring);
54763
- --er-required: var(--cr-required);
54764
- --er-payment-border: var(--cr-payment-border);
54765
- --er-payment-border-hover: var(--cr-payment-border-hover);
54766
- --er-payment-border-selected: var(--cr-payment-border-selected);
54767
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
54768
- --er-check-bg: var(--cr-check-bg);
54769
- --er-check-text: var(--cr-check-text);
54770
- --er-summary-bg: var(--cr-summary-bg);
54771
- --er-summary-border: var(--cr-summary-border);
54772
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
54773
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
54774
- `;
54775
- /**
54776
- * Generate CSS variables for the course-registration block.
54777
- *
54778
- * Variables defined:
54779
- * - Step indicator colors (active, inactive, completed, text, connector)
54780
- * - Success/error/waitlist state backgrounds and text colors
54781
- * - Capacity badge colors (available, low, sold-out)
54782
- * - Border colors for various interaction states
54783
- * - Input focus and required marker styling
54784
- * - Payment option card styling
54785
- * - Checkmark indicator colors
54786
- * - Summary styling
54787
- */
54788
- function generateCourseRegistrationVars({ themeId }) {
54789
- return `
54790
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
54791
- /* Step indicator */
54792
- --cr-step-active: rgb(var(--tb-primary));
54793
- --cr-step-inactive: rgb(var(--tb-mutedText));
54794
- --cr-step-completed: rgb(var(--tb-success));
54795
- --cr-step-text: rgb(255 255 255);
54796
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
54797
- --cr-step-connector: rgba(var(--tb-border), 0.5);
54798
-
54799
- /* Step title */
54800
- --cr-step-title-size: 1.5rem;
54801
-
54802
- /* State backgrounds with alpha */
54803
- --cr-success-bg: rgba(var(--tb-success), 0.1);
54804
- --cr-success-text: rgb(var(--tb-success));
54805
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
54806
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
54807
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
54808
- --cr-waitlist-text: rgb(var(--tb-warning));
54809
-
54810
- /* Capacity badges */
54811
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
54812
- --cr-capacity-available-text: rgb(var(--tb-success));
54813
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
54814
- --cr-capacity-low-text: rgb(var(--tb-warning));
54815
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
54816
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
54817
-
54818
- /* Borders */
54819
- --cr-border: rgb(var(--tb-border));
54820
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
54821
- --cr-border-selected: rgb(var(--tb-primary));
54822
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
54823
-
54824
- /* Input focus */
54825
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
54826
-
54827
- /* Required marker */
54828
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
54829
-
54830
- /* Payment option cards */
54831
- --cr-payment-border: rgb(var(--tb-border));
54832
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
54833
- --cr-payment-border-selected: rgb(var(--tb-primary));
54834
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
54835
-
54836
- /* Checkmark indicator */
54837
- --cr-check-bg: rgb(var(--tb-primary));
54838
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
54839
-
54840
- /* Summary */
54841
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
54842
- --cr-summary-border: rgb(var(--tb-border));
54843
-
54844
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
54845
-
54846
- /* Shared registration-surface mappings (issue 1174).
54847
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
54848
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
54849
- keep working unchanged. */
54850
- --rb-reg-radius: var(--rb-block-radius);
54851
- --rb-reg-border: var(--cr-border);
54852
- --rb-reg-border-hover: var(--cr-border-hover);
54853
- --rb-reg-border-selected: var(--cr-border-selected);
54854
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
54855
- --rb-reg-option-bg: rgb(var(--tb-background));
54856
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
54857
- --rb-reg-surface-bg: rgb(var(--tb-surface));
54858
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
54859
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
54860
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
54861
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
54862
- --rb-reg-check-bg: var(--cr-check-bg);
54863
- --rb-reg-check-text: var(--cr-check-text);
54864
- --rb-reg-step-active: var(--cr-step-active);
54865
- --rb-reg-step-completed: var(--cr-step-completed);
54866
- --rb-reg-step-inactive: var(--cr-step-inactive);
54867
- --rb-reg-step-text: var(--cr-step-text);
54868
- --rb-reg-step-text-active: var(--cr-step-text-active);
54869
- --rb-reg-step-connector: var(--cr-step-connector);
54870
- --rb-reg-summary-bg: var(--cr-summary-bg);
54871
- --rb-reg-summary-border: var(--cr-summary-border);
54872
- --rb-reg-focus-ring: var(--cr-focus-ring);
54873
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
54874
- }
54875
- `;
54876
- }
54877
- //#endregion
54878
53929
  //#region ../theme-core/src/blocks/registry.ts
54879
53930
  /**
54880
53931
  * Global registry of block var generators.
@@ -54889,8 +53940,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
54889
53940
  blockVarRegistry.set("form", generateFormBlockVars);
54890
53941
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
54891
53942
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
54892
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
54893
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
54894
53943
  /**
54895
53944
  * Generate all Tier 3 block-specific CSS variables.
54896
53945
  *
@@ -59819,7 +58868,7 @@ const containerResponsiveThemeCss = `/*
59819
58868
  * Shared: Registration Surface (issue 1174)
59820
58869
  *
59821
58870
  * Wizard-surface primitives shared by the event-registration,
59822
- * course-registration and appointment-booking blocks: surface container,
58871
+ * appointment-booking blocks: surface container,
59823
58872
  * selectable option cards, step indicator, wizard actions row, on-surface
59824
58873
  * text ramp, layout stacks, summary box and skeleton shell lines.
59825
58874
  *
@@ -59862,7 +58911,7 @@ const containerResponsiveThemeCss = `/*
59862
58911
  }
59863
58912
 
59864
58913
  /* Surface container */
59865
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
58914
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59866
58915
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
59867
58916
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
59868
58917
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -59892,7 +58941,7 @@ const containerResponsiveThemeCss = `/*
59892
58941
  *
59893
58942
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
59894
58943
  * pairing is pinned by registration-surface-action-reset.test.ts. */
59895
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
58944
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59896
58945
  --rb-action-primary-base-background-color: initial;
59897
58946
  --rb-action-primary-base-background-image: initial;
59898
58947
  --rb-action-primary-base-color: initial;
@@ -60000,7 +59049,7 @@ const containerResponsiveThemeCss = `/*
60000
59049
  }
60001
59050
 
60002
59051
  /* Selectable option card */
60003
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
59052
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
60004
59053
  position: relative;
60005
59054
  display: flex;
60006
59055
  align-items: flex-start;
@@ -60017,34 +59066,34 @@ const containerResponsiveThemeCss = `/*
60017
59066
  box-shadow var(--rb-block-transition, 150ms) ease;
60018
59067
  }
60019
59068
 
60020
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
59069
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
60021
59070
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
60022
59071
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
60023
59072
  }
60024
59073
 
60025
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
59074
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
60026
59075
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
60027
59076
  outline-offset: 2px;
60028
59077
  }
60029
59078
 
60030
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
59079
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
60031
59080
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
60032
59081
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
60033
59082
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
60034
59083
  }
60035
59084
 
60036
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
59085
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
60037
59086
  cursor: not-allowed;
60038
59087
  opacity: 0.7;
60039
59088
  }
60040
59089
 
60041
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
59090
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
60042
59091
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
60043
59092
  box-shadow: none;
60044
59093
  }
60045
59094
 
60046
59095
  /* Check indicator */
60047
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
59096
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
60048
59097
  flex-shrink: 0;
60049
59098
  width: 1.25rem;
60050
59099
  height: 1.25rem;
@@ -60055,18 +59104,18 @@ const containerResponsiveThemeCss = `/*
60055
59104
  justify-content: center;
60056
59105
  }
60057
59106
 
60058
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
59107
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
60059
59108
  width: 0.75rem;
60060
59109
  height: 0.75rem;
60061
59110
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60062
59111
  }
60063
59112
 
60064
59113
  /* Step indicator */
60065
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
59114
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
60066
59115
  margin-bottom: 1.5rem;
60067
59116
  }
60068
59117
 
60069
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
59118
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
60070
59119
  display: flex;
60071
59120
  align-items: center;
60072
59121
  justify-content: center;
@@ -60076,13 +59125,13 @@ const containerResponsiveThemeCss = `/*
60076
59125
  margin: 0;
60077
59126
  }
60078
59127
 
60079
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
59128
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
60080
59129
  display: flex;
60081
59130
  align-items: center;
60082
59131
  gap: 0.5rem;
60083
59132
  }
60084
59133
 
60085
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
59134
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
60086
59135
  width: 1.75rem;
60087
59136
  height: 1.75rem;
60088
59137
  border-radius: 50%;
@@ -60096,47 +59145,47 @@ const containerResponsiveThemeCss = `/*
60096
59145
  transition: background-color var(--rb-block-transition, 150ms) ease;
60097
59146
  }
60098
59147
 
60099
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
59148
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
60100
59149
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
60101
59150
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60102
59151
  }
60103
59152
 
60104
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
59153
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
60105
59154
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
60106
59155
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60107
59156
  }
60108
59157
 
60109
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
59158
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
60110
59159
  width: 0.75rem;
60111
59160
  height: 0.75rem;
60112
59161
  }
60113
59162
 
60114
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
59163
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
60115
59164
  width: 2rem;
60116
59165
  height: 2px;
60117
59166
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
60118
59167
  }
60119
59168
 
60120
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59169
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60121
59170
  font-size: 0.75rem;
60122
59171
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60123
59172
  display: none;
60124
59173
  }
60125
59174
 
60126
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
59175
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
60127
59176
  font-weight: 500;
60128
59177
  }
60129
59178
 
60130
59179
  @container rb-site (min-width: 640px) {
60131
59180
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
60132
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59181
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60133
59182
  display: inline;
60134
59183
  }
60135
59184
  }
60136
59185
  }
60137
59186
 
60138
59187
  /* Wizard actions row */
60139
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
59188
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
60140
59189
  display: flex;
60141
59190
  justify-content: space-between;
60142
59191
  align-items: center;
@@ -60145,56 +59194,56 @@ const containerResponsiveThemeCss = `/*
60145
59194
  }
60146
59195
 
60147
59196
  /* When there's only one action (no back button), push it to the right */
60148
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
59197
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
60149
59198
  margin-inline-start: auto;
60150
59199
  }
60151
59200
 
60152
59201
  /* On-surface text ramp */
60153
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
59202
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
60154
59203
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60155
59204
  }
60156
59205
 
60157
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
59206
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
60158
59207
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
60159
59208
  }
60160
59209
 
60161
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
59210
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
60162
59211
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
60163
59212
  }
60164
59213
 
60165
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
59214
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
60166
59215
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
60167
59216
  }
60168
59217
 
60169
59218
  /* Layout stacks */
60170
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
59219
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
60171
59220
  display: flex;
60172
59221
  flex-direction: column;
60173
59222
  gap: 1rem;
60174
59223
  }
60175
59224
 
60176
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
59225
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
60177
59226
  gap: 0.75rem;
60178
59227
  }
60179
59228
 
60180
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
59229
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
60181
59230
  display: flex;
60182
59231
  align-items: center;
60183
59232
  gap: 1rem;
60184
59233
  }
60185
59234
 
60186
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
59235
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
60187
59236
  justify-content: space-between;
60188
59237
  align-items: flex-start;
60189
59238
  }
60190
59239
 
60191
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
59240
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
60192
59241
  display: grid;
60193
59242
  gap: 0.75rem;
60194
59243
  }
60195
59244
 
60196
59245
  /* Summary box */
60197
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
59246
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
60198
59247
  padding: 1rem;
60199
59248
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
60200
59249
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -60202,7 +59251,7 @@ const containerResponsiveThemeCss = `/*
60202
59251
  }
60203
59252
 
60204
59253
  /* Skeleton shell lines */
60205
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
59254
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
60206
59255
  height: 0.75rem;
60207
59256
  border-radius: 9999px;
60208
59257
  background: linear-gradient(
@@ -60213,24 +59262,24 @@ const containerResponsiveThemeCss = `/*
60213
59262
  );
60214
59263
  }
60215
59264
 
60216
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
59265
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
60217
59266
  width: min(26rem, 82%);
60218
59267
  }
60219
59268
 
60220
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
59269
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
60221
59270
  width: min(19rem, 68%);
60222
59271
  }
60223
59272
 
60224
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
59273
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
60225
59274
  width: min(14rem, 52%);
60226
59275
  }
60227
59276
 
60228
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
59277
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
60229
59278
  width: min(10rem, 42%);
60230
59279
  }
60231
59280
 
60232
59281
  /* Skeleton block (rectangular placeholder, pulses) */
60233
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59282
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60234
59283
  height: 2.5rem;
60235
59284
  width: 100%;
60236
59285
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -60248,7 +59297,7 @@ const containerResponsiveThemeCss = `/*
60248
59297
  }
60249
59298
 
60250
59299
  @media (prefers-reduced-motion: reduce) {
60251
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59300
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60252
59301
  animation: none;
60253
59302
  }
60254
59303
  }
@@ -66630,1674 +65679,363 @@ const containerResponsiveThemeCss = `/*
66630
65679
  cursor: not-allowed;
66631
65680
  }
66632
65681
 
66633
- /*
66634
- * Course Details (runtime node)
66635
- * Minimal rules - most styling via rb-* utilities
65682
+ /* =============================================================================
65683
+ * Block: Newsletter Signup
65684
+ * =============================================================================
66636
65685
  */
66637
65686
 
66638
- :where(.theme-scope) .course-details {
66639
- width: 100%;
66640
- max-width: 56.25rem; /* 900px */
66641
- margin-inline: auto;
65687
+ /* Newsletter copy styling */
65688
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
65689
+ font-size: 1.5rem;
65690
+ font-weight: 600;
66642
65691
  }
66643
65692
 
66644
- /* Description prose wrapper */
66645
- :where(.theme-scope) .course-details .cd-description {
66646
- margin-top: 1rem;
65693
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
65694
+ font-size: 1rem;
65695
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
65696
+ opacity: 0.85;
66647
65697
  }
66648
65698
 
66649
- /* "Showing X of Y" text */
66650
- :where(.theme-scope) .course-details .cd-sessions__more {
66651
- margin-top: 0.5rem;
66652
- opacity: 0.7;
66653
- font-size: 0.875rem;
65699
+ /* Newsletter form container */
65700
+ :where(.theme-scope) .newsletter-form {
65701
+ width: 100%;
65702
+ max-width: 32rem;
65703
+ margin-left: auto;
65704
+ margin-right: auto;
66654
65705
  }
66655
65706
 
66656
- /* Enrollment status colors (using Tier 3 vars) */
66657
- :where(.theme-scope) .course-details .cd-enrollment--open {
66658
- color: var(--cd-enrollment-open-text);
65707
+ /* Newsletter form fields container */
65708
+ :where(.theme-scope) .newsletter-form-fields {
65709
+ display: flex;
65710
+ flex-direction: column;
65711
+ gap: var(--rb-gap-sm, 0.75rem);
66659
65712
  }
66660
65713
 
66661
- :where(.theme-scope) .course-details .cd-enrollment--closed {
66662
- color: var(--cd-enrollment-closed-text);
65714
+ /* Individual field styling */
65715
+ :where(.theme-scope) .newsletter-field {
65716
+ display: flex;
65717
+ flex-direction: column;
65718
+ gap: 0.25rem;
66663
65719
  }
66664
65720
 
66665
- /* =============================================================================
66666
- * Block: Event whole-series registration
66667
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
66668
- * =============================================================================
66669
- */
66670
-
66671
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
66672
- :where(.theme-scope)
66673
- :where(
66674
- [data-block='event-registration'],
66675
- [data-block='course-registration']
66676
- ) {
66677
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
66678
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
65721
+ /* Required indicator */
65722
+ :where(.theme-scope) .newsletter-required {
65723
+ color: rgb(var(--tb-primary));
65724
+ margin-left: 0.125rem;
66679
65725
  }
66680
65726
 
66681
- /* Container: base styling comes from the shared .rb-reg-surface
66682
- (registration-surface.css); these overrides preserve whole-series
66683
- whole-series registration's established look (fixed padding, centered). */
66684
- :where(.theme-scope)
66685
- :where([data-block='event-registration'], [data-block='course-registration'])
66686
- .er-whole-series-container {
66687
- padding: 1.5rem;
66688
- margin-inline: auto;
65727
+ /* Submit button container */
65728
+ :where(.theme-scope) .newsletter-submit {
65729
+ margin-top: 0.5rem;
66689
65730
  }
66690
65731
 
66691
- /* Empty/unavailable */
66692
- :where(.theme-scope)
66693
- :where([data-block='event-registration'], [data-block='course-registration'])
66694
- .er-whole-series-empty {
66695
- border-radius: var(--rb-block-radius);
66696
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
66697
- padding: 2.5rem;
66698
- text-align: center;
65732
+ /* ALTCHA widget container */
65733
+ :where(.theme-scope) .newsletter-altcha {
65734
+ margin-top: 0.75rem;
65735
+ display: flex;
65736
+ justify-content: center;
66699
65737
  }
66700
65738
 
66701
- :where(.theme-scope)
66702
- :where([data-block='event-registration'], [data-block='course-registration'])
66703
- .er-whole-series-empty__text {
66704
- opacity: 0.7;
65739
+ /* Privacy note */
65740
+ :where(.theme-scope) .newsletter-privacy-note {
65741
+ margin-top: 0.75rem;
65742
+ font-size: 1rem;
65743
+ line-height: 1.6;
65744
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
65745
+ text-align: center;
66705
65746
  }
66706
65747
 
66707
65748
  /* =============================================================================
66708
- * Layout (two-column)
65749
+ * Inline Variant - Horizontal layout
66709
65750
  * =============================================================================
66710
65751
  */
66711
- :where(.theme-scope)
66712
- :where([data-block='event-registration'], [data-block='course-registration'])
66713
- .er-whole-series-layout {
66714
- display: grid;
66715
- gap: 1.5rem;
66716
- grid-template-columns: 1fr;
66717
- }
66718
65752
 
66719
- @container rb-site (min-width: 768px) {
66720
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66721
- :where(.theme-scope)
66722
- :where(
66723
- [data-block='event-registration'],
66724
- [data-block='course-registration']
66725
- )
66726
- .er-whole-series-layout--with-sidebar {
66727
- grid-template-columns: 1fr 280px;
66728
- }
66729
- }
65753
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
65754
+ flex-direction: row;
65755
+ align-items: flex-end;
65756
+ flex-wrap: wrap;
65757
+ gap: var(--rb-gap-sm, 0.75rem);
66730
65758
  }
66731
65759
 
66732
- :where(.theme-scope)
66733
- :where([data-block='event-registration'], [data-block='course-registration'])
66734
- .er-whole-series-layout__main {
66735
- min-width: 0;
65760
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
65761
+ flex: 1 1 auto;
65762
+ min-width: 10rem;
66736
65763
  }
66737
65764
 
66738
- :where(.theme-scope)
66739
- :where([data-block='event-registration'], [data-block='course-registration'])
66740
- .er-whole-series-layout__sidebar {
66741
- display: none;
65765
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
65766
+ margin-top: 0;
65767
+ flex-shrink: 0;
66742
65768
  }
66743
65769
 
66744
- @container rb-site (min-width: 768px) {
65770
+ /* Mobile fallback for inline variant */
65771
+ @container rb-site (max-width: 640px) {
66745
65772
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66746
- :where(.theme-scope)
66747
- :where(
66748
- [data-block='event-registration'],
66749
- [data-block='course-registration']
66750
- )
66751
- .er-whole-series-layout__sidebar {
66752
- display: block;
65773
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
65774
+ flex-direction: column;
65775
+ }
65776
+
65777
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
65778
+ min-width: 100%;
66753
65779
  }
66754
65780
  }
66755
65781
  }
66756
65782
 
66757
65783
  /* =============================================================================
66758
- * Step Indicator
65784
+ * Editorial Split Variant
66759
65785
  * =============================================================================
66760
65786
  */
66761
- :where(.theme-scope)
66762
- :where([data-block='event-registration'], [data-block='course-registration'])
66763
- .er-whole-series-steps {
66764
- display: flex;
66765
- align-items: center;
66766
- gap: 0.5rem;
66767
- margin-bottom: 1.5rem;
66768
- }
66769
65787
 
66770
- :where(.theme-scope)
66771
- :where([data-block='event-registration'], [data-block='course-registration'])
66772
- .er-whole-series-step {
66773
- display: flex;
65788
+ :where(.theme-scope) .newsletter-editorial-split {
65789
+ display: grid;
65790
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
65791
+ gap: clamp(2.5rem, 7vw, 7rem);
66774
65792
  align-items: center;
66775
- gap: 0.5rem;
65793
+ text-align: left;
66776
65794
  }
66777
65795
 
66778
- :where(.theme-scope)
66779
- :where([data-block='event-registration'], [data-block='course-registration'])
66780
- .er-whole-series-step-circle {
66781
- width: 1.75rem;
66782
- height: 1.75rem;
66783
- border-radius: 9999px;
65796
+ :where(.theme-scope) .newsletter-editorial-split-copy {
66784
65797
  display: flex;
66785
- align-items: center;
66786
- justify-content: center;
66787
- font-size: 0.75rem;
66788
- font-weight: 600;
66789
- background: var(--er-step-inactive);
66790
- color: var(--er-step-text);
66791
- transition: background-color 0.2s ease;
65798
+ flex-direction: column;
65799
+ gap: var(--rb-gap-sm, 0.75rem);
66792
65800
  }
66793
65801
 
66794
- :where(.theme-scope)
66795
- :where([data-block='event-registration'], [data-block='course-registration'])
66796
- .er-whole-series-step-circle--active {
66797
- background: var(--er-step-active);
66798
- color: var(--er-step-text-active);
65802
+ :where(.theme-scope) .newsletter-editorial-split-form {
65803
+ min-width: 0;
66799
65804
  }
66800
65805
 
66801
- :where(.theme-scope)
66802
- :where([data-block='event-registration'], [data-block='course-registration'])
66803
- .er-whole-series-step-circle--completed {
66804
- background: var(--er-step-completed);
66805
- color: var(--er-step-text);
65806
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
65807
+ max-width: none;
65808
+ margin-inline: 0;
66806
65809
  }
66807
65810
 
66808
- :where(.theme-scope)
66809
- :where([data-block='event-registration'], [data-block='course-registration'])
66810
- .er-whole-series-step-label {
66811
- font-size: 0.875rem;
65811
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
65812
+ font-size: clamp(2rem, 4vw, 3.5rem);
66812
65813
  font-weight: 500;
66813
- color: rgb(var(--tb-mutedText));
66814
- display: none;
66815
65814
  }
66816
65815
 
66817
- @container rb-site (min-width: 640px) {
65816
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
65817
+ text-align: left;
65818
+ }
65819
+
65820
+ @container rb-site (max-width: 767px) {
66818
65821
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66819
- :where(.theme-scope)
66820
- :where(
66821
- [data-block='event-registration'],
66822
- [data-block='course-registration']
66823
- )
66824
- .er-whole-series-step-label {
66825
- display: block;
65822
+ :where(.theme-scope) .newsletter-editorial-split {
65823
+ grid-template-columns: minmax(0, 1fr);
65824
+ gap: 2rem;
66826
65825
  }
66827
65826
  }
66828
65827
  }
66829
65828
 
66830
- :where(.theme-scope)
66831
- :where([data-block='event-registration'], [data-block='course-registration'])
66832
- .er-whole-series-step-label--active {
66833
- color: var(--er-on-surface);
66834
- font-weight: 600;
66835
- }
66836
-
66837
- :where(.theme-scope)
66838
- :where([data-block='event-registration'], [data-block='course-registration'])
66839
- .er-whole-series-step-connector {
66840
- flex: 1;
66841
- height: 2px;
66842
- background: var(--er-step-connector);
66843
- min-width: 1rem;
66844
- }
65829
+ /* =============================================================================
65830
+ * Success State
65831
+ * =============================================================================
65832
+ */
66845
65833
 
66846
- :where(.theme-scope)
66847
- :where([data-block='event-registration'], [data-block='course-registration'])
66848
- .er-whole-series-step-connector--completed {
66849
- background: var(--er-step-completed);
65834
+ :where(.theme-scope) .newsletter-success {
65835
+ text-align: center;
66850
65836
  }
66851
65837
 
66852
- :where(.theme-scope)
66853
- :where([data-block='event-registration'], [data-block='course-registration'])
66854
- .er-whole-series-step-check {
66855
- width: 0.875rem;
66856
- height: 0.875rem;
65838
+ :where(.theme-scope) .newsletter-success .fb-success {
65839
+ padding: 1rem 1.5rem;
65840
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
65841
+ border-radius: var(--radius-md, 0.5rem);
65842
+ color: rgb(var(--tb-text));
66857
65843
  }
66858
65844
 
66859
65845
  /* =============================================================================
66860
- * Lists
65846
+ * Block: Contact + Newsletter
66861
65847
  * =============================================================================
66862
65848
  */
66863
- :where(.theme-scope)
66864
- :where([data-block='event-registration'], [data-block='course-registration'])
66865
- .er-whole-series-run-list {
65849
+
65850
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
66866
65851
  display: grid;
66867
- gap: 1rem;
65852
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
65853
+ gap: clamp(2.5rem, 6vw, 4rem);
65854
+ align-items: start;
66868
65855
  }
66869
65856
 
66870
- /* =============================================================================
66871
- * Run cards
66872
- * =============================================================================
66873
- */
66874
- :where(.theme-scope)
66875
- :where([data-block='event-registration'], [data-block='course-registration'])
66876
- .er-whole-series-run-card {
66877
- border-radius: var(--rb-block-radius);
66878
- border: 1px solid var(--er-border);
66879
- padding: 1rem;
66880
- background: rgb(var(--tb-background));
66881
- cursor: pointer;
66882
- transition:
66883
- border-color var(--rb-block-transition) ease,
66884
- transform var(--rb-block-transition) ease;
65857
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
65858
+ min-width: 0;
66885
65859
  }
66886
65860
 
66887
- :where(.theme-scope)
66888
- :where([data-block='event-registration'], [data-block='course-registration'])
66889
- .er-whole-series-run-card:hover {
66890
- border-color: var(--er-border-hover);
66891
- transform: translateY(-1px);
65861
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
65862
+ margin-bottom: 1.5rem;
66892
65863
  }
66893
65864
 
66894
- :where(.theme-scope)
66895
- :where([data-block='event-registration'], [data-block='course-registration'])
66896
- .er-whole-series-run-card:focus-visible {
66897
- outline: 2px solid var(--er-focus-ring);
66898
- outline-offset: 2px;
65865
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
65866
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
65867
+ margin: 0 0 0.75rem;
66899
65868
  }
66900
65869
 
66901
- :where(.theme-scope)
66902
- :where([data-block='event-registration'], [data-block='course-registration'])
66903
- .er-whole-series-run-card--selected {
66904
- border-color: var(--er-border-selected);
66905
- box-shadow: 0 0 0 3px var(--er-focus-ring);
65870
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
65871
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
65872
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66906
65873
  }
66907
65874
 
66908
- :where(.theme-scope)
66909
- :where([data-block='event-registration'], [data-block='course-registration'])
66910
- .er-whole-series-run-card__title {
66911
- margin: 0 0 0.25rem 0;
66912
- font-weight: 700;
66913
- font-size: 1.125rem;
65875
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
65876
+ display: flex;
65877
+ flex-direction: column;
65878
+ align-items: flex-start;
66914
65879
  }
66915
65880
 
66916
- :where(.theme-scope)
66917
- :where([data-block='event-registration'], [data-block='course-registration'])
66918
- .er-whole-series-run-card__status {
66919
- margin: 0.25rem 0 0 0;
66920
- opacity: 0.8;
65881
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
65882
+ max-width: none;
65883
+ margin-left: 0;
65884
+ margin-right: 0;
66921
65885
  }
66922
65886
 
66923
- :where(.theme-scope)
66924
- :where([data-block='event-registration'], [data-block='course-registration'])
66925
- .er-whole-series-run-card__sessions,
66926
- :where(.theme-scope)
66927
- :where([data-block='event-registration'], [data-block='course-registration'])
66928
- .er-whole-series-run-card__price,
66929
- :where(.theme-scope)
66930
- :where([data-block='event-registration'], [data-block='course-registration'])
66931
- .er-whole-series-run-card__capacity,
66932
- :where(.theme-scope)
66933
- :where([data-block='event-registration'], [data-block='course-registration'])
66934
- .er-whole-series-run-card__venue {
66935
- margin: 0.25rem 0 0 0;
66936
- opacity: 0.85;
65887
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
65888
+ text-align: left;
66937
65889
  }
66938
65890
 
66939
- /* =============================================================================
66940
- * Capacity Badges
66941
- * =============================================================================
66942
- */
66943
- :where(.theme-scope)
66944
- :where([data-block='event-registration'], [data-block='course-registration'])
66945
- .er-whole-series-capacity-badge {
66946
- display: inline-block;
66947
- padding: 0.125rem 0.5rem;
66948
- border-radius: 9999px;
66949
- font-size: 0.75rem;
66950
- font-weight: 500;
65891
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
65892
+ display: flex;
65893
+ flex-direction: column;
65894
+ gap: 1rem;
66951
65895
  }
66952
65896
 
66953
- :where(.theme-scope)
66954
- :where([data-block='event-registration'], [data-block='course-registration'])
66955
- .er-whole-series-capacity-badge--available {
66956
- background: var(--er-capacity-available-bg);
66957
- color: var(--er-capacity-available-text);
65897
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
65898
+ display: grid;
65899
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
65900
+ gap: 1rem;
66958
65901
  }
66959
65902
 
66960
- :where(.theme-scope)
66961
- :where([data-block='event-registration'], [data-block='course-registration'])
66962
- .er-whole-series-capacity-badge--low {
66963
- background: var(--er-capacity-low-bg);
66964
- color: var(--er-capacity-low-text);
65903
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
65904
+ display: flex;
65905
+ flex-direction: column;
65906
+ gap: 0.25rem;
66965
65907
  }
66966
65908
 
66967
- :where(.theme-scope)
66968
- :where([data-block='event-registration'], [data-block='course-registration'])
66969
- .er-whole-series-capacity-badge--soldout {
66970
- background: var(--er-capacity-soldout-bg);
66971
- color: var(--er-capacity-soldout-text);
65909
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
65910
+ display: flex;
65911
+ flex-direction: column;
65912
+ gap: 0.5rem;
65913
+ border: none;
65914
+ padding: 0;
65915
+ margin: 0;
66972
65916
  }
66973
65917
 
66974
- /* =============================================================================
66975
- * Summary + Details
66976
- * =============================================================================
66977
- */
66978
- :where(.theme-scope)
66979
- :where([data-block='event-registration'], [data-block='course-registration'])
66980
- .er-whole-series-details {
66981
- display: grid;
66982
- gap: 1rem;
65918
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
65919
+ display: flex;
65920
+ align-items: center;
65921
+ gap: 0.5rem;
66983
65922
  }
66984
65923
 
66985
- :where(.theme-scope)
66986
- :where([data-block='event-registration'], [data-block='course-registration'])
66987
- .er-whole-series-summary {
65924
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
65925
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
65926
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
66988
65927
  border-radius: var(--rb-block-radius);
66989
- border: 1px solid var(--er-summary-border);
66990
65928
  padding: 1rem;
66991
- background: var(--er-summary-bg);
66992
- }
66993
-
66994
- :where(.theme-scope)
66995
- :where([data-block='event-registration'], [data-block='course-registration'])
66996
- .er-whole-series-summary__title {
66997
- margin: 0;
66998
- font-size: 1.25rem;
66999
- font-weight: 800;
65929
+ font-size: 0.875rem;
67000
65930
  }
67001
65931
 
67002
- :where(.theme-scope)
67003
- :where([data-block='event-registration'], [data-block='course-registration'])
67004
- .er-whole-series-summary__sessions-title {
67005
- margin: 0.75rem 0 0.5rem 0;
67006
- font-weight: 700;
65932
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
65933
+ background-color: var(--fb-success-bg);
65934
+ color: var(--fb-success-text);
65935
+ border: 1px solid var(--fb-success-border);
67007
65936
  }
67008
65937
 
67009
- :where(.theme-scope)
67010
- :where([data-block='event-registration'], [data-block='course-registration'])
67011
- .er-whole-series-summary__sessions-list {
67012
- list-style: none;
67013
- padding: 0;
67014
- margin: 0;
67015
- display: grid;
67016
- gap: 0.35rem;
65938
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
65939
+ background-color: var(--fb-error-bg);
65940
+ color: var(--fb-error-text);
65941
+ border: 1px solid var(--fb-error-border);
67017
65942
  }
67018
65943
 
67019
- :where(.theme-scope)
67020
- :where([data-block='event-registration'], [data-block='course-registration'])
67021
- .er-whole-series-summary__session {
67022
- opacity: 0.9;
65944
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
65945
+ background-color: var(--fb-empty-bg);
65946
+ color: var(--fb-empty-text);
65947
+ border: 1px dashed var(--fb-empty-border);
65948
+ text-align: center;
67023
65949
  }
67024
65950
 
67025
- :where(.theme-scope)
67026
- :where([data-block='event-registration'], [data-block='course-registration'])
67027
- .er-whole-series-summary__venue,
67028
- :where(.theme-scope)
67029
- :where([data-block='event-registration'], [data-block='course-registration'])
67030
- .er-whole-series-summary__price,
67031
- :where(.theme-scope)
67032
- :where([data-block='event-registration'], [data-block='course-registration'])
67033
- .er-whole-series-summary__membership {
67034
- margin: 0.5rem 0 0 0;
67035
- opacity: 0.9;
65951
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
65952
+ margin-top: 0.5rem;
67036
65953
  }
67037
65954
 
67038
65955
  /* =============================================================================
67039
- * Form
65956
+ * Block: Team Members
67040
65957
  * =============================================================================
65958
+ *
65959
+ * Site/theme authors sometimes need different thumbnail shapes/sizes without
65960
+ * changing global fragment defaults. We expose these controls on the block and
65961
+ * style them via data attributes on the \`.rb-team-members\` wrapper.
67041
65962
  */
67042
- :where(.theme-scope)
67043
- :where([data-block='event-registration'], [data-block='course-registration'])
67044
- .er-whole-series-form {
67045
- display: grid;
67046
- gap: 1rem;
65963
+
65964
+ /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
65965
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
65966
+ text-align: left;
67047
65967
  }
67048
65968
 
67049
- :where(.theme-scope)
67050
- :where([data-block='event-registration'], [data-block='course-registration'])
67051
- .er-whole-series-form__field {
67052
- display: grid;
67053
- gap: 0.35rem;
65969
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
65970
+ align-items: flex-start;
65971
+ text-align: left;
67054
65972
  }
67055
65973
 
67056
- :where(.theme-scope)
67057
- :where([data-block='event-registration'], [data-block='course-registration'])
67058
- .er-whole-series-form__label {
67059
- font-size: 0.875rem;
67060
- font-weight: 600;
65974
+ @container rb-site (min-width: 1024px) {
65975
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
65976
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
65977
+ width: 75%;
65978
+ margin-left: 0;
65979
+ margin-right: auto;
65980
+ }
65981
+ }
67061
65982
  }
67062
65983
 
67063
- :where(.theme-scope)
67064
- :where([data-block='event-registration'], [data-block='course-registration'])
67065
- .er-whole-series-form__label--required::after {
67066
- content: ' *';
67067
- color: var(--er-required);
65984
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
65985
+ display: block;
65986
+ width: 100%;
65987
+ height: auto;
67068
65988
  }
67069
65989
 
67070
- :where(.theme-scope)
67071
- :where([data-block='event-registration'], [data-block='course-registration'])
67072
- .er-whole-series-form__input {
67073
- border-radius: calc(var(--rb-block-radius) * 0.6);
67074
- border: 1px solid var(--er-border);
67075
- padding: 0.6rem 0.75rem;
67076
- background: rgb(var(--tb-background));
67077
- color: rgb(var(--tb-foreground));
65990
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
65991
+ font-weight: 600;
67078
65992
  }
67079
65993
 
67080
- :where(.theme-scope)
67081
- :where([data-block='event-registration'], [data-block='course-registration'])
67082
- .er-whole-series-form__textarea {
67083
- border-radius: calc(var(--rb-block-radius) * 0.6);
67084
- border: 1px solid var(--er-border);
67085
- padding: 0.6rem 0.75rem;
67086
- background: rgb(var(--tb-background));
67087
- color: rgb(var(--tb-foreground));
67088
- resize: vertical;
65994
+ /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
65995
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
65996
+ --rb-team-thumb-max: 11.25rem; /* ~180px default */
65997
+ --rb-team-image-basis: 33.333%;
67089
65998
  }
67090
65999
 
67091
- :where(.theme-scope)
67092
- :where([data-block='event-registration'], [data-block='course-registration'])
67093
- .er-whole-series-form__input:focus,
67094
- :where(.theme-scope)
67095
- :where([data-block='event-registration'], [data-block='course-registration'])
67096
- .er-whole-series-form__textarea:focus {
67097
- outline: 2px solid var(--er-focus-ring);
67098
- outline-offset: 2px;
66000
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
66001
+ --rb-team-thumb-max: 8.75rem; /* ~140px */
66002
+ --rb-team-image-basis: 25%;
67099
66003
  }
67100
66004
 
67101
- :where(.theme-scope)
67102
- :where([data-block='event-registration'], [data-block='course-registration'])
67103
- .er-whole-series-form__input--error,
67104
- :where(.theme-scope)
67105
- :where([data-block='event-registration'], [data-block='course-registration'])
67106
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
67107
- border-color: var(--er-border-error);
66005
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
66006
+ --rb-team-thumb-max: 11.25rem; /* ~180px */
66007
+ --rb-team-image-basis: 33.333%;
67108
66008
  }
67109
66009
 
67110
- :where(.theme-scope)
67111
- :where([data-block='event-registration'], [data-block='course-registration'])
67112
- .er-whole-series-form__error {
67113
- font-size: 0.875rem;
67114
- color: var(--er-error-text);
66010
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
66011
+ --rb-team-thumb-max: 13.75rem; /* ~220px */
66012
+ --rb-team-image-basis: 40%;
67115
66013
  }
67116
66014
 
67117
- :where(.theme-scope)
67118
- :where([data-block='event-registration'], [data-block='course-registration'])
67119
- .er-whole-series-form__hint {
67120
- font-size: 0.875rem;
67121
- opacity: 0.7;
66015
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
66016
+ --rb-team-thumb-max: 17.5rem; /* ~280px */
66017
+ --rb-team-image-basis: 50%;
67122
66018
  }
67123
66019
 
67124
- /* Logged-in user hint with logout link */
67125
- :where(.theme-scope)
67126
- :where([data-block='event-registration'], [data-block='course-registration'])
67127
- .er-whole-series-logged-in-hint {
67128
- font-size: 0.875rem;
67129
- opacity: 0.7;
67130
- margin: 0.25rem 0 0 0;
66020
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
66021
+ --rb-team-thumb-max: 22.5rem; /* ~360px */
66022
+ --rb-team-image-basis: 66.667%;
67131
66023
  }
67132
66024
 
67133
- :where(.theme-scope)
67134
- :where([data-block='event-registration'], [data-block='course-registration'])
67135
- .er-whole-series-link {
67136
- background: none;
67137
- border: none;
67138
- padding: 0;
67139
- font-size: inherit;
67140
- color: rgb(var(--tb-primary));
67141
- cursor: pointer;
67142
- text-decoration: underline;
67143
- text-underline-offset: 2px;
66025
+ /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
66026
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo-wrap {
66027
+ width: 100%;
66028
+ overflow: hidden;
67144
66029
  }
67145
66030
 
67146
- :where(.theme-scope)
67147
- :where([data-block='event-registration'], [data-block='course-registration'])
67148
- .er-whole-series-link:hover {
67149
- text-decoration: none;
66031
+ /* In grid mode, cap thumbnail width so headshots don't dominate the card. */
66032
+ :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-member-photo-wrap) {
66033
+ max-width: var(--rb-team-thumb-max);
67150
66034
  }
67151
66035
 
67152
- /* =============================================================================
67153
- * Actions
67154
- * =============================================================================
67155
- */
67156
- :where(.theme-scope)
67157
- :where([data-block='event-registration'], [data-block='course-registration'])
67158
- .er-whole-series-actions {
67159
- display: flex;
67160
- align-items: center;
67161
- justify-content: space-between;
67162
- gap: 0.75rem;
67163
- margin-top: 0.25rem;
67164
- }
67165
-
67166
- :where(.theme-scope)
67167
- :where([data-block='event-registration'], [data-block='course-registration'])
67168
- .er-whole-series-back-btn {
67169
- border: 0;
67170
- background: transparent;
67171
- color: var(--er-on-surface);
67172
- opacity: 0.8;
67173
- padding: 0.25rem 0.25rem;
67174
- cursor: pointer;
67175
- }
67176
-
67177
- :where(.theme-scope)
67178
- :where([data-block='event-registration'], [data-block='course-registration'])
67179
- .er-whole-series-back-btn:hover {
67180
- opacity: 1;
67181
- text-decoration: underline;
67182
- }
67183
-
67184
- /* =============================================================================
67185
- * Payment Options
67186
- * =============================================================================
67187
- */
67188
- :where(.theme-scope)
67189
- :where([data-block='event-registration'], [data-block='course-registration'])
67190
- .er-whole-series-payment__options {
67191
- display: grid;
67192
- gap: 0.5rem;
67193
- }
67194
-
67195
- :where(.theme-scope)
67196
- :where([data-block='event-registration'], [data-block='course-registration'])
67197
- .er-whole-series-payment__option {
67198
- display: flex;
67199
- align-items: center;
67200
- gap: 0.5rem;
67201
- }
67202
-
67203
- /* =============================================================================
67204
- * Payment Tiles (Card Grid)
67205
- * =============================================================================
67206
- */
67207
- :where(.theme-scope)
67208
- :where([data-block='event-registration'], [data-block='course-registration'])
67209
- .er-whole-series-payment-tiles {
67210
- display: grid;
67211
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
67212
- gap: 0.75rem;
67213
- }
67214
-
67215
- :where(.theme-scope)
67216
- :where([data-block='event-registration'], [data-block='course-registration'])
67217
- .er-whole-series-payment-tile {
67218
- border-radius: var(--rb-block-radius);
67219
- border: 1px solid var(--er-payment-border);
67220
- padding: 1rem;
67221
- background: rgb(var(--tb-background));
67222
- cursor: pointer;
67223
- transition:
67224
- border-color 0.15s ease,
67225
- box-shadow 0.15s ease,
67226
- background-color 0.15s ease;
67227
- position: relative;
67228
- }
67229
-
67230
- :where(.theme-scope)
67231
- :where([data-block='event-registration'], [data-block='course-registration'])
67232
- .er-whole-series-payment-tile:hover {
67233
- border-color: var(--er-payment-border-hover);
67234
- }
67235
-
67236
- :where(.theme-scope)
67237
- :where([data-block='event-registration'], [data-block='course-registration'])
67238
- .er-whole-series-payment-tile:focus-visible {
67239
- outline: 2px solid var(--er-focus-ring);
67240
- outline-offset: 2px;
67241
- }
67242
-
67243
- :where(.theme-scope)
67244
- :where([data-block='event-registration'], [data-block='course-registration'])
67245
- .er-whole-series-payment-tile--selected {
67246
- border-color: var(--er-payment-border-selected);
67247
- background: var(--er-payment-bg-selected);
67248
- box-shadow: 0 0 0 3px var(--er-focus-ring);
67249
- }
67250
-
67251
- :where(.theme-scope)
67252
- :where([data-block='event-registration'], [data-block='course-registration'])
67253
- .er-whole-series-payment-tile--upsell {
67254
- border-style: dashed;
67255
- }
67256
-
67257
- :where(.theme-scope)
67258
- :where([data-block='event-registration'], [data-block='course-registration'])
67259
- .er-whole-series-payment-tile__header {
67260
- display: flex;
67261
- align-items: flex-start;
67262
- justify-content: space-between;
67263
- gap: 0.5rem;
67264
- }
67265
-
67266
- :where(.theme-scope)
67267
- :where([data-block='event-registration'], [data-block='course-registration'])
67268
- .er-whole-series-payment-tile__name {
67269
- margin: 0;
67270
- font-weight: 600;
67271
- font-size: 1rem;
67272
- }
67273
-
67274
- :where(.theme-scope)
67275
- :where([data-block='event-registration'], [data-block='course-registration'])
67276
- .er-whole-series-payment-tile__description {
67277
- margin: 0.25rem 0 0 0;
67278
- font-size: 0.875rem;
67279
- opacity: 0.7;
67280
- }
67281
-
67282
- :where(.theme-scope)
67283
- :where([data-block='event-registration'], [data-block='course-registration'])
67284
- .er-whole-series-payment-tile__price {
67285
- font-weight: 600;
67286
- font-size: 0.875rem;
67287
- white-space: nowrap;
67288
- }
67289
-
67290
- :where(.theme-scope)
67291
- :where([data-block='event-registration'], [data-block='course-registration'])
67292
- .er-whole-series-payment-tile__badge {
67293
- display: inline-block;
67294
- padding: 0.125rem 0.5rem;
67295
- border-radius: 9999px;
67296
- font-size: 0.75rem;
67297
- font-weight: 500;
67298
- margin-top: 0.5rem;
67299
- }
67300
-
67301
- /* Checkmark indicator on selected tile */
67302
- :where(.theme-scope)
67303
- :where([data-block='event-registration'], [data-block='course-registration'])
67304
- .er-whole-series-payment-tile__check {
67305
- position: absolute;
67306
- top: 0.5rem;
67307
- right: 0.5rem;
67308
- width: 1.25rem;
67309
- height: 1.25rem;
67310
- border-radius: 9999px;
67311
- background: var(--er-check-bg);
67312
- color: var(--er-check-text);
67313
- display: flex;
67314
- align-items: center;
67315
- justify-content: center;
67316
- opacity: 0;
67317
- transition: opacity 0.15s ease;
67318
- }
67319
-
67320
- :where(.theme-scope)
67321
- :where([data-block='event-registration'], [data-block='course-registration'])
67322
- .er-whole-series-payment-tile--selected
67323
- .er-whole-series-payment-tile__check {
67324
- opacity: 1;
67325
- }
67326
-
67327
- /* =============================================================================
67328
- * Booking Mode Step
67329
- * =============================================================================
67330
- */
67331
- :where(.theme-scope)
67332
- :where([data-block='event-registration'], [data-block='course-registration'])
67333
- .er-whole-series-booking-mode {
67334
- display: grid;
67335
- gap: 1rem;
67336
- }
67337
-
67338
- :where(.theme-scope)
67339
- :where([data-block='event-registration'], [data-block='course-registration'])
67340
- .er-whole-series-booking-mode__title {
67341
- margin: 0;
67342
- font-size: var(--er-step-title-size);
67343
- font-weight: 700;
67344
- }
67345
-
67346
- :where(.theme-scope)
67347
- :where([data-block='event-registration'], [data-block='course-registration'])
67348
- .er-whole-series-booking-mode__subtitle {
67349
- margin: 0.25rem 0 0 0;
67350
- opacity: 0.7;
67351
- }
67352
-
67353
- :where(.theme-scope)
67354
- :where([data-block='event-registration'], [data-block='course-registration'])
67355
- .er-whole-series-booking-mode__link {
67356
- margin-top: 0.5rem;
67357
- font-size: 0.875rem;
67358
- }
67359
-
67360
- :where(.theme-scope)
67361
- :where([data-block='event-registration'], [data-block='course-registration'])
67362
- .er-whole-series-booking-mode__link
67363
- a {
67364
- color: rgb(var(--tb-primary));
67365
- text-decoration: underline;
67366
- cursor: pointer;
67367
- }
67368
-
67369
- :where(.theme-scope)
67370
- :where([data-block='event-registration'], [data-block='course-registration'])
67371
- .er-whole-series-booking-mode__link
67372
- a:hover {
67373
- text-decoration: none;
67374
- }
67375
-
67376
- /* =============================================================================
67377
- * Membership Hero
67378
- * =============================================================================
67379
- */
67380
- :where(.theme-scope)
67381
- :where([data-block='event-registration'], [data-block='course-registration'])
67382
- .er-whole-series-membership-hero {
67383
- border-radius: var(--rb-block-radius);
67384
- background: var(--er-success-bg);
67385
- border: 1px solid rgba(var(--tb-success), 0.2);
67386
- padding: 1.5rem;
67387
- text-align: center;
67388
- }
67389
-
67390
- :where(.theme-scope)
67391
- :where([data-block='event-registration'], [data-block='course-registration'])
67392
- .er-whole-series-membership-hero__icon {
67393
- font-size: 2rem;
67394
- margin-bottom: 0.75rem;
67395
- }
67396
-
67397
- :where(.theme-scope)
67398
- :where([data-block='event-registration'], [data-block='course-registration'])
67399
- .er-whole-series-membership-hero__title {
67400
- margin: 0;
67401
- font-size: 1.25rem;
67402
- font-weight: 700;
67403
- color: var(--er-success-text);
67404
- }
67405
-
67406
- :where(.theme-scope)
67407
- :where([data-block='event-registration'], [data-block='course-registration'])
67408
- .er-whole-series-membership-hero__subtitle {
67409
- margin: 0.25rem 0 0 0;
67410
- font-size: 0.875rem;
67411
- opacity: 0.8;
67412
- }
67413
-
67414
- /* =============================================================================
67415
- * Portal Auth Sidebar
67416
- * =============================================================================
67417
- */
67418
- :where(.theme-scope)
67419
- :where([data-block='event-registration'], [data-block='course-registration'])
67420
- .er-whole-series-portal-sidebar {
67421
- border-radius: var(--rb-block-radius);
67422
- border: 1px solid var(--er-border);
67423
- padding: 1.25rem;
67424
- background: rgb(var(--tb-surface));
67425
- color: var(--er-on-surface);
67426
- }
67427
-
67428
- :where(.theme-scope)
67429
- :where([data-block='event-registration'], [data-block='course-registration'])
67430
- .er-whole-series-portal-sidebar__icon {
67431
- font-size: 1.5rem;
67432
- margin-bottom: 0.5rem;
67433
- }
67434
-
67435
- :where(.theme-scope)
67436
- :where([data-block='event-registration'], [data-block='course-registration'])
67437
- .er-whole-series-portal-sidebar__title {
67438
- margin: 0;
67439
- font-size: 1rem;
67440
- font-weight: 600;
67441
- }
67442
-
67443
- :where(.theme-scope)
67444
- :where([data-block='event-registration'], [data-block='course-registration'])
67445
- .er-whole-series-portal-sidebar__text {
67446
- margin: 0.5rem 0 0 0;
67447
- font-size: 0.875rem;
67448
- opacity: 0.8;
67449
- }
67450
-
67451
- :where(.theme-scope)
67452
- :where([data-block='event-registration'], [data-block='course-registration'])
67453
- .er-whole-series-portal-sidebar__action {
67454
- margin-top: 1rem;
67455
- }
67456
-
67457
- :where(.theme-scope)
67458
- :where([data-block='event-registration'], [data-block='course-registration'])
67459
- .er-whole-series-portal-sidebar__link {
67460
- color: rgb(var(--tb-primary));
67461
- cursor: pointer;
67462
- text-decoration: underline;
67463
- font-size: 0.875rem;
67464
- }
67465
-
67466
- :where(.theme-scope)
67467
- :where([data-block='event-registration'], [data-block='course-registration'])
67468
- .er-whole-series-portal-sidebar__link:hover {
67469
- text-decoration: none;
67470
- }
67471
-
67472
- /* =============================================================================
67473
- * Modal (for Magic Link)
67474
- * =============================================================================
67475
- */
67476
- :where(.theme-scope)
67477
- :where([data-block='event-registration'], [data-block='course-registration'])
67478
- .er-whole-series-modal-overlay {
67479
- position: fixed;
67480
- inset: 0;
67481
- background: rgba(var(--tb-scrim), 0.5);
67482
- display: flex;
67483
- align-items: center;
67484
- justify-content: center;
67485
- z-index: 100;
67486
- animation: er-whole-series-fade-in 0.15s ease;
67487
- }
67488
-
67489
- :where(.theme-scope)
67490
- :where([data-block='event-registration'], [data-block='course-registration'])
67491
- .er-whole-series-modal {
67492
- background: rgb(var(--tb-surface));
67493
- color: var(--er-on-surface);
67494
- border-radius: var(--rb-block-radius);
67495
- padding: 1.5rem;
67496
- max-width: 28rem;
67497
- width: calc(100% - 2rem);
67498
- position: relative;
67499
- animation: er-whole-series-slide-up 0.2s ease;
67500
- }
67501
-
67502
- :where(.theme-scope)
67503
- :where([data-block='event-registration'], [data-block='course-registration'])
67504
- .er-whole-series-modal-close {
67505
- position: absolute;
67506
- top: 0.75rem;
67507
- right: 0.75rem;
67508
- background: transparent;
67509
- border: 0;
67510
- padding: 0.25rem;
67511
- cursor: pointer;
67512
- opacity: 0.6;
67513
- transition: opacity 0.15s ease;
67514
- }
67515
-
67516
- :where(.theme-scope)
67517
- :where([data-block='event-registration'], [data-block='course-registration'])
67518
- .er-whole-series-modal-close:hover {
67519
- opacity: 1;
67520
- }
67521
-
67522
- @keyframes er-whole-series-fade-in {
67523
- from {
67524
- opacity: 0;
67525
- }
67526
- to {
67527
- opacity: 1;
67528
- }
67529
- }
67530
-
67531
- @keyframes er-whole-series-slide-up {
67532
- from {
67533
- opacity: 0;
67534
- transform: translateY(10px);
67535
- }
67536
- to {
67537
- opacity: 1;
67538
- transform: translateY(0);
67539
- }
67540
- }
67541
-
67542
- /* Reduced motion */
67543
- @media (prefers-reduced-motion: reduce) {
67544
- :where(.theme-scope)
67545
- :where(
67546
- [data-block='event-registration'],
67547
- [data-block='course-registration']
67548
- )
67549
- .er-whole-series-modal-overlay,
67550
- :where(.theme-scope)
67551
- :where(
67552
- [data-block='event-registration'],
67553
- [data-block='course-registration']
67554
- )
67555
- .er-whole-series-modal {
67556
- animation: none;
67557
- }
67558
- }
67559
-
67560
- /* =============================================================================
67561
- * Center States
67562
- * =============================================================================
67563
- */
67564
- :where(.theme-scope)
67565
- :where([data-block='event-registration'], [data-block='course-registration'])
67566
- .er-whole-series-center {
67567
- display: grid;
67568
- place-items: center;
67569
- gap: 0.75rem;
67570
- padding: 2rem 0;
67571
- }
67572
-
67573
- /* =============================================================================
67574
- * Success/Waitlist/Error States
67575
- * =============================================================================
67576
- */
67577
- :where(.theme-scope)
67578
- :where([data-block='event-registration'], [data-block='course-registration'])
67579
- .er-whole-series-success,
67580
- :where(.theme-scope)
67581
- :where([data-block='event-registration'], [data-block='course-registration'])
67582
- .er-whole-series-waitlist,
67583
- :where(.theme-scope)
67584
- :where([data-block='event-registration'], [data-block='course-registration'])
67585
- .er-whole-series-error,
67586
- :where(.theme-scope)
67587
- :where([data-block='event-registration'], [data-block='course-registration'])
67588
- .er-whole-series-payment-failed {
67589
- text-align: center;
67590
- padding: 2rem 1rem;
67591
- }
67592
-
67593
- /* State icon color variants (layout from registration-surface.css) */
67594
- :where(.theme-scope)
67595
- :where([data-block='event-registration'], [data-block='course-registration'])
67596
- .rb-state-icon--success {
67597
- background: var(--er-success-bg);
67598
- color: var(--er-success-text);
67599
- }
67600
-
67601
- :where(.theme-scope)
67602
- :where([data-block='event-registration'], [data-block='course-registration'])
67603
- .rb-state-icon--error {
67604
- background: var(--er-error-bg);
67605
- color: var(--er-error-text);
67606
- }
67607
-
67608
- :where(.theme-scope)
67609
- :where([data-block='event-registration'], [data-block='course-registration'])
67610
- .rb-state-icon--waitlist,
67611
- :where(.theme-scope)
67612
- :where([data-block='event-registration'], [data-block='course-registration'])
67613
- .rb-state-icon--warning {
67614
- background: var(--er-waitlist-bg);
67615
- color: var(--er-waitlist-text);
67616
- }
67617
-
67618
- :where(.theme-scope)
67619
- :where([data-block='event-registration'], [data-block='course-registration'])
67620
- .er-whole-series-success__title,
67621
- :where(.theme-scope)
67622
- :where([data-block='event-registration'], [data-block='course-registration'])
67623
- .er-whole-series-waitlist__title,
67624
- :where(.theme-scope)
67625
- :where([data-block='event-registration'], [data-block='course-registration'])
67626
- .er-whole-series-error__title,
67627
- :where(.theme-scope)
67628
- :where([data-block='event-registration'], [data-block='course-registration'])
67629
- .er-whole-series-payment-failed__title {
67630
- margin: 0.75rem 0 0.5rem 0;
67631
- font-size: 1.125rem;
67632
- font-weight: 700;
67633
- }
67634
-
67635
- :where(.theme-scope)
67636
- :where([data-block='event-registration'], [data-block='course-registration'])
67637
- .er-whole-series-success__message,
67638
- :where(.theme-scope)
67639
- :where([data-block='event-registration'], [data-block='course-registration'])
67640
- .er-whole-series-waitlist__message,
67641
- :where(.theme-scope)
67642
- :where([data-block='event-registration'], [data-block='course-registration'])
67643
- .er-whole-series-error__message,
67644
- :where(.theme-scope)
67645
- :where([data-block='event-registration'], [data-block='course-registration'])
67646
- .er-whole-series-payment-failed__message {
67647
- margin: 0;
67648
- opacity: 0.7;
67649
- }
67650
-
67651
- :where(.theme-scope)
67652
- :where([data-block='event-registration'], [data-block='course-registration'])
67653
- .er-whole-series-success__membership {
67654
- margin-top: 0.5rem;
67655
- font-size: 0.875rem;
67656
- color: var(--er-success-text);
67657
- }
67658
-
67659
- :where(.theme-scope)
67660
- :where([data-block='event-registration'], [data-block='course-registration'])
67661
- .er-whole-series-error__retry,
67662
- :where(.theme-scope)
67663
- :where([data-block='event-registration'], [data-block='course-registration'])
67664
- .er-whole-series-payment-failed__retry {
67665
- margin-top: 1rem;
67666
- }
67667
-
67668
- /* =============================================================================
67669
- * Discount Code Section
67670
- * =============================================================================
67671
- */
67672
- :where(.theme-scope)
67673
- :where([data-block='event-registration'], [data-block='course-registration'])
67674
- .er-whole-series-discount {
67675
- margin-top: 0.5rem;
67676
- }
67677
-
67678
- :where(.theme-scope)
67679
- :where([data-block='event-registration'], [data-block='course-registration'])
67680
- .er-whole-series-discount__form {
67681
- display: grid;
67682
- gap: 0.5rem;
67683
- }
67684
-
67685
- :where(.theme-scope)
67686
- :where([data-block='event-registration'], [data-block='course-registration'])
67687
- .er-whole-series-discount__toggle {
67688
- background: transparent;
67689
- border: 0;
67690
- padding: 0;
67691
- color: rgb(var(--tb-primary));
67692
- cursor: pointer;
67693
- font-size: 0.875rem;
67694
- text-decoration: underline;
67695
- }
67696
-
67697
- :where(.theme-scope)
67698
- :where([data-block='event-registration'], [data-block='course-registration'])
67699
- .er-whole-series-discount__toggle:hover {
67700
- text-decoration: none;
67701
- }
67702
-
67703
- :where(.theme-scope)
67704
- :where([data-block='event-registration'], [data-block='course-registration'])
67705
- .er-whole-series-discount__label {
67706
- font-size: 0.875rem;
67707
- font-weight: 600;
67708
- }
67709
-
67710
- :where(.theme-scope)
67711
- :where([data-block='event-registration'], [data-block='course-registration'])
67712
- .er-whole-series-discount__row {
67713
- display: flex;
67714
- gap: 0.5rem;
67715
- }
67716
-
67717
- :where(.theme-scope)
67718
- :where([data-block='event-registration'], [data-block='course-registration'])
67719
- .er-whole-series-discount__input {
67720
- flex: 1;
67721
- border-radius: calc(var(--rb-block-radius) * 0.6);
67722
- border: 1px solid var(--er-border);
67723
- padding: 0.5rem 0.75rem;
67724
- background: rgb(var(--tb-background));
67725
- color: rgb(var(--tb-foreground));
67726
- font-size: 0.875rem;
67727
- }
67728
-
67729
- :where(.theme-scope)
67730
- :where([data-block='event-registration'], [data-block='course-registration'])
67731
- .er-whole-series-discount__input:focus {
67732
- outline: 2px solid var(--er-focus-ring);
67733
- outline-offset: 2px;
67734
- }
67735
-
67736
- :where(.theme-scope)
67737
- :where([data-block='event-registration'], [data-block='course-registration'])
67738
- .er-whole-series-discount__remove {
67739
- background: transparent;
67740
- border: 0;
67741
- padding: 0.25rem;
67742
- cursor: pointer;
67743
- opacity: 0.6;
67744
- }
67745
-
67746
- :where(.theme-scope)
67747
- :where([data-block='event-registration'], [data-block='course-registration'])
67748
- .er-whole-series-discount__apply {
67749
- background: transparent;
67750
- border: 0;
67751
- padding: 0.25rem;
67752
- cursor: pointer;
67753
- opacity: 0.8;
67754
- }
67755
-
67756
- :where(.theme-scope)
67757
- :where([data-block='event-registration'], [data-block='course-registration'])
67758
- .er-whole-series-discount__remove:hover {
67759
- opacity: 1;
67760
- }
67761
-
67762
- :where(.theme-scope)
67763
- :where([data-block='event-registration'], [data-block='course-registration'])
67764
- .er-whole-series-discount__apply:hover {
67765
- opacity: 1;
67766
- }
67767
-
67768
- :where(.theme-scope)
67769
- :where([data-block='event-registration'], [data-block='course-registration'])
67770
- .er-whole-series-discount__hint {
67771
- margin: 0;
67772
- font-size: 0.875rem;
67773
- opacity: 0.7;
67774
- }
67775
-
67776
- :where(.theme-scope)
67777
- :where([data-block='event-registration'], [data-block='course-registration'])
67778
- .er-whole-series-discount__feedback {
67779
- margin: 0;
67780
- font-size: 0.875rem;
67781
- }
67782
-
67783
- /* =============================================================================
67784
- * Altcha (Spam Protection)
67785
- * =============================================================================
67786
- */
67787
- :where(.theme-scope)
67788
- :where([data-block='event-registration'], [data-block='course-registration'])
67789
- .er-whole-series-altcha {
67790
- margin-top: 1rem;
67791
- }
67792
-
67793
- /* =============================================================================
67794
- * Magic Link Form
67795
- * =============================================================================
67796
- */
67797
- :where(.theme-scope)
67798
- :where([data-block='event-registration'], [data-block='course-registration'])
67799
- .er-whole-series-magic-link-form {
67800
- display: flex;
67801
- flex-direction: column;
67802
- gap: 0.75rem;
67803
- }
67804
-
67805
- :where(.theme-scope)
67806
- :where([data-block='event-registration'], [data-block='course-registration'])
67807
- .er-whole-series-magic-link-title {
67808
- margin: 0;
67809
- font-size: 1.25rem;
67810
- font-weight: 700;
67811
- }
67812
-
67813
- :where(.theme-scope)
67814
- :where([data-block='event-registration'], [data-block='course-registration'])
67815
- .er-whole-series-magic-link-success {
67816
- display: flex;
67817
- flex-direction: column;
67818
- gap: 0.75rem;
67819
- }
67820
-
67821
- :where(.theme-scope)
67822
- :where([data-block='event-registration'], [data-block='course-registration'])
67823
- .er-whole-series-portal-auth-text {
67824
- margin: 0;
67825
- font-size: 0.875rem;
67826
- opacity: 0.8;
67827
- }
67828
-
67829
- :where(.theme-scope)
67830
- :where([data-block='event-registration'], [data-block='course-registration'])
67831
- .er-whole-series-portal-auth-text--success {
67832
- color: var(--er-success-text);
67833
- }
67834
-
67835
- :where(.theme-scope)
67836
- :where([data-block='event-registration'], [data-block='course-registration'])
67837
- .er-whole-series-portal-auth-text--error {
67838
- color: var(--er-error-text);
67839
- }
67840
-
67841
- :where(.theme-scope)
67842
- :where([data-block='event-registration'], [data-block='course-registration'])
67843
- .er-whole-series-modal-btn {
67844
- border-radius: calc(var(--rb-block-radius) * 0.6);
67845
- border: 0;
67846
- padding: 0.6rem 1rem;
67847
- font-size: 0.875rem;
67848
- font-weight: 600;
67849
- cursor: pointer;
67850
- transition: opacity 0.15s ease;
67851
- background: rgb(var(--tb-primary));
67852
- color: rgb(var(--tb-primaryText, 255 255 255));
67853
- }
67854
-
67855
- :where(.theme-scope)
67856
- :where([data-block='event-registration'], [data-block='course-registration'])
67857
- .er-whole-series-modal-btn:hover {
67858
- opacity: 0.9;
67859
- }
67860
-
67861
- :where(.theme-scope)
67862
- :where([data-block='event-registration'], [data-block='course-registration'])
67863
- .er-whole-series-modal-btn:disabled {
67864
- opacity: 0.5;
67865
- cursor: not-allowed;
67866
- }
67867
-
67868
- :where(.theme-scope)
67869
- :where([data-block='event-registration'], [data-block='course-registration'])
67870
- .er-whole-series-modal-btn--secondary {
67871
- background: transparent;
67872
- color: var(--er-on-surface);
67873
- border: 1px solid var(--er-border);
67874
- }
67875
-
67876
- :where(.theme-scope)
67877
- :where([data-block='event-registration'], [data-block='course-registration'])
67878
- .er-whole-series-modal-btn--secondary:hover {
67879
- background: var(--er-on-surface-hover-bg);
67880
- }
67881
-
67882
- /* =============================================================================
67883
- * Utility Classes
67884
- * =============================================================================
67885
- */
67886
- :where(.theme-scope)
67887
- :where([data-block='event-registration'], [data-block='course-registration'])
67888
- .er-whole-series-text--muted {
67889
- opacity: 0.7;
67890
- }
67891
-
67892
- :where(.theme-scope)
67893
- :where([data-block='event-registration'], [data-block='course-registration'])
67894
- .er-whole-series-text--error {
67895
- color: var(--er-error-text);
67896
- }
67897
-
67898
- :where(.theme-scope)
67899
- :where([data-block='event-registration'], [data-block='course-registration'])
67900
- .er-whole-series-text--success {
67901
- color: var(--er-success-text);
67902
- }
67903
-
67904
- :where(.theme-scope)
67905
- :where([data-block='event-registration'], [data-block='course-registration'])
67906
- .er-whole-series-sr-only {
67907
- position: absolute;
67908
- width: 1px;
67909
- height: 1px;
67910
- padding: 0;
67911
- margin: -1px;
67912
- overflow: hidden;
67913
- clip: rect(0, 0, 0, 0);
67914
- white-space: nowrap;
67915
- border-width: 0;
67916
- }
67917
-
67918
- /* Stack utility */
67919
- :where(.theme-scope)
67920
- :where([data-block='event-registration'], [data-block='course-registration'])
67921
- .er-whole-series-stack {
67922
- display: flex;
67923
- flex-direction: column;
67924
- }
67925
-
67926
- :where(.theme-scope)
67927
- :where([data-block='event-registration'], [data-block='course-registration'])
67928
- .er-whole-series-stack--gap-sm {
67929
- gap: 0.5rem;
67930
- }
67931
-
67932
- :where(.theme-scope)
67933
- :where([data-block='event-registration'], [data-block='course-registration'])
67934
- .er-whole-series-stack--gap-md {
67935
- gap: 1rem;
67936
- }
67937
-
67938
- :where(.theme-scope)
67939
- :where([data-block='event-registration'], [data-block='course-registration'])
67940
- .er-whole-series-stack--gap-lg {
67941
- gap: 1.5rem;
67942
- }
67943
-
67944
- /* =============================================================================
67945
- * Block: Newsletter Signup
67946
- * =============================================================================
67947
- */
67948
-
67949
- /* Newsletter copy styling */
67950
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
67951
- font-size: 1.5rem;
67952
- font-weight: 600;
67953
- }
67954
-
67955
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
67956
- font-size: 1rem;
67957
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
67958
- opacity: 0.85;
67959
- }
67960
-
67961
- /* Newsletter form container */
67962
- :where(.theme-scope) .newsletter-form {
67963
- width: 100%;
67964
- max-width: 32rem;
67965
- margin-left: auto;
67966
- margin-right: auto;
67967
- }
67968
-
67969
- /* Newsletter form fields container */
67970
- :where(.theme-scope) .newsletter-form-fields {
67971
- display: flex;
67972
- flex-direction: column;
67973
- gap: var(--rb-gap-sm, 0.75rem);
67974
- }
67975
-
67976
- /* Individual field styling */
67977
- :where(.theme-scope) .newsletter-field {
67978
- display: flex;
67979
- flex-direction: column;
67980
- gap: 0.25rem;
67981
- }
67982
-
67983
- /* Required indicator */
67984
- :where(.theme-scope) .newsletter-required {
67985
- color: rgb(var(--tb-primary));
67986
- margin-left: 0.125rem;
67987
- }
67988
-
67989
- /* Submit button container */
67990
- :where(.theme-scope) .newsletter-submit {
67991
- margin-top: 0.5rem;
67992
- }
67993
-
67994
- /* ALTCHA widget container */
67995
- :where(.theme-scope) .newsletter-altcha {
67996
- margin-top: 0.75rem;
67997
- display: flex;
67998
- justify-content: center;
67999
- }
68000
-
68001
- /* Privacy note */
68002
- :where(.theme-scope) .newsletter-privacy-note {
68003
- margin-top: 0.75rem;
68004
- font-size: 1rem;
68005
- line-height: 1.6;
68006
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68007
- text-align: center;
68008
- }
68009
-
68010
- /* =============================================================================
68011
- * Inline Variant - Horizontal layout
68012
- * =============================================================================
68013
- */
68014
-
68015
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
68016
- flex-direction: row;
68017
- align-items: flex-end;
68018
- flex-wrap: wrap;
68019
- gap: var(--rb-gap-sm, 0.75rem);
68020
- }
68021
-
68022
- :where(.theme-scope) .newsletter-inline .newsletter-field {
68023
- flex: 1 1 auto;
68024
- min-width: 10rem;
68025
- }
68026
-
68027
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
68028
- margin-top: 0;
68029
- flex-shrink: 0;
68030
- }
68031
-
68032
- /* Mobile fallback for inline variant */
68033
- @container rb-site (max-width: 640px) {
68034
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68035
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
68036
- flex-direction: column;
68037
- }
68038
-
68039
- :where(.theme-scope) .newsletter-inline .newsletter-field {
68040
- min-width: 100%;
68041
- }
68042
- }
68043
- }
68044
-
68045
- /* =============================================================================
68046
- * Editorial Split Variant
68047
- * =============================================================================
68048
- */
68049
-
68050
- :where(.theme-scope) .newsletter-editorial-split {
68051
- display: grid;
68052
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
68053
- gap: clamp(2.5rem, 7vw, 7rem);
68054
- align-items: center;
68055
- text-align: left;
68056
- }
68057
-
68058
- :where(.theme-scope) .newsletter-editorial-split-copy {
68059
- display: flex;
68060
- flex-direction: column;
68061
- gap: var(--rb-gap-sm, 0.75rem);
68062
- }
68063
-
68064
- :where(.theme-scope) .newsletter-editorial-split-form {
68065
- min-width: 0;
68066
- }
68067
-
68068
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
68069
- max-width: none;
68070
- margin-inline: 0;
68071
- }
68072
-
68073
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
68074
- font-size: clamp(2rem, 4vw, 3.5rem);
68075
- font-weight: 500;
68076
- }
68077
-
68078
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
68079
- text-align: left;
68080
- }
68081
-
68082
- @container rb-site (max-width: 767px) {
68083
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68084
- :where(.theme-scope) .newsletter-editorial-split {
68085
- grid-template-columns: minmax(0, 1fr);
68086
- gap: 2rem;
68087
- }
68088
- }
68089
- }
68090
-
68091
- /* =============================================================================
68092
- * Success State
68093
- * =============================================================================
68094
- */
68095
-
68096
- :where(.theme-scope) .newsletter-success {
68097
- text-align: center;
68098
- }
68099
-
68100
- :where(.theme-scope) .newsletter-success .fb-success {
68101
- padding: 1rem 1.5rem;
68102
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
68103
- border-radius: var(--radius-md, 0.5rem);
68104
- color: rgb(var(--tb-text));
68105
- }
68106
-
68107
- /* =============================================================================
68108
- * Block: Contact + Newsletter
68109
- * =============================================================================
68110
- */
68111
-
68112
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
68113
- display: grid;
68114
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
68115
- gap: clamp(2.5rem, 6vw, 4rem);
68116
- align-items: start;
68117
- }
68118
-
68119
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
68120
- min-width: 0;
68121
- }
68122
-
68123
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
68124
- margin-bottom: 1.5rem;
68125
- }
68126
-
68127
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
68128
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
68129
- margin: 0 0 0.75rem;
68130
- }
68131
-
68132
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
68133
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
68134
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68135
- }
68136
-
68137
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
68138
- display: flex;
68139
- flex-direction: column;
68140
- align-items: flex-start;
68141
- }
68142
-
68143
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
68144
- max-width: none;
68145
- margin-left: 0;
68146
- margin-right: 0;
68147
- }
68148
-
68149
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
68150
- text-align: left;
68151
- }
68152
-
68153
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
68154
- display: flex;
68155
- flex-direction: column;
68156
- gap: 1rem;
68157
- }
68158
-
68159
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
68160
- display: grid;
68161
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
68162
- gap: 1rem;
68163
- }
68164
-
68165
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
68166
- display: flex;
68167
- flex-direction: column;
68168
- gap: 0.25rem;
68169
- }
68170
-
68171
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
68172
- display: flex;
68173
- flex-direction: column;
68174
- gap: 0.5rem;
68175
- border: none;
68176
- padding: 0;
68177
- margin: 0;
68178
- }
68179
-
68180
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
68181
- display: flex;
68182
- align-items: center;
68183
- gap: 0.5rem;
68184
- }
68185
-
68186
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
68187
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
68188
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68189
- border-radius: var(--rb-block-radius);
68190
- padding: 1rem;
68191
- font-size: 0.875rem;
68192
- }
68193
-
68194
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
68195
- background-color: var(--fb-success-bg);
68196
- color: var(--fb-success-text);
68197
- border: 1px solid var(--fb-success-border);
68198
- }
68199
-
68200
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
68201
- background-color: var(--fb-error-bg);
68202
- color: var(--fb-error-text);
68203
- border: 1px solid var(--fb-error-border);
68204
- }
68205
-
68206
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68207
- background-color: var(--fb-empty-bg);
68208
- color: var(--fb-empty-text);
68209
- border: 1px dashed var(--fb-empty-border);
68210
- text-align: center;
68211
- }
68212
-
68213
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
68214
- margin-top: 0.5rem;
68215
- }
68216
-
68217
- /* =============================================================================
68218
- * Block: Team Members
68219
- * =============================================================================
68220
- *
68221
- * Site/theme authors sometimes need different thumbnail shapes/sizes without
68222
- * changing global fragment defaults. We expose these controls on the block and
68223
- * style them via data attributes on the \`.rb-team-members\` wrapper.
68224
- */
68225
-
68226
- /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
68227
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
68228
- text-align: left;
68229
- }
68230
-
68231
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
68232
- align-items: flex-start;
68233
- text-align: left;
68234
- }
68235
-
68236
- @container rb-site (min-width: 1024px) {
68237
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68238
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
68239
- width: 75%;
68240
- margin-left: 0;
68241
- margin-right: auto;
68242
- }
68243
- }
68244
- }
68245
-
68246
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
68247
- display: block;
68248
- width: 100%;
68249
- height: auto;
68250
- }
68251
-
68252
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
68253
- font-weight: 600;
68254
- }
68255
-
68256
- /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
68257
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
68258
- --rb-team-thumb-max: 11.25rem; /* ~180px default */
68259
- --rb-team-image-basis: 33.333%;
68260
- }
68261
-
68262
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
68263
- --rb-team-thumb-max: 8.75rem; /* ~140px */
68264
- --rb-team-image-basis: 25%;
68265
- }
68266
-
68267
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
68268
- --rb-team-thumb-max: 11.25rem; /* ~180px */
68269
- --rb-team-image-basis: 33.333%;
68270
- }
68271
-
68272
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
68273
- --rb-team-thumb-max: 13.75rem; /* ~220px */
68274
- --rb-team-image-basis: 40%;
68275
- }
68276
-
68277
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
68278
- --rb-team-thumb-max: 17.5rem; /* ~280px */
68279
- --rb-team-image-basis: 50%;
68280
- }
68281
-
68282
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
68283
- --rb-team-thumb-max: 22.5rem; /* ~360px */
68284
- --rb-team-image-basis: 66.667%;
68285
- }
68286
-
68287
- /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
68288
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo-wrap {
68289
- width: 100%;
68290
- overflow: hidden;
68291
- }
68292
-
68293
- /* In grid mode, cap thumbnail width so headshots don't dominate the card. */
68294
- :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-member-photo-wrap) {
68295
- max-width: var(--rb-team-thumb-max);
68296
- }
68297
-
68298
- :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-members[data-layout-align="center"]) :where(.rb-team-member-photo-wrap) {
68299
- margin-left: auto;
68300
- margin-right: auto;
66036
+ :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-members[data-layout-align="center"]) :where(.rb-team-member-photo-wrap) {
66037
+ margin-left: auto;
66038
+ margin-right: auto;
68301
66039
  }
68302
66040
 
68303
66041
  /* Stack variant: always left-aligned, regardless of the block alignment field. */
@@ -72330,69 +70068,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72330
70068
  }
72331
70069
  });
72332
70070
  //#endregion
72333
- //#region ../api/src/courseEndpointDefinitions.ts
72334
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72335
- listCourses: {
72336
- path: "/sites/{siteId}/bookings/courses",
72337
- method: "GET",
72338
- auth: "user",
72339
- responseKind: "json"
72340
- },
72341
- exportCoursesCsv: {
72342
- path: "/sites/{siteId}/bookings/courses/export.csv",
72343
- method: "GET",
72344
- tags: [
72345
- "site-{siteId}",
72346
- "bookings",
72347
- "courses-{siteId}"
72348
- ],
72349
- errors: [],
72350
- auth: "user",
72351
- responseKind: "blob"
72352
- },
72353
- createCourse: {
72354
- path: "/sites/{siteId}/bookings/courses",
72355
- method: "POST",
72356
- auth: "user",
72357
- responseKind: "json",
72358
- errors: [
72359
- "validation:invalid_input",
72360
- "resource:not_found",
72361
- "resource:already_exists",
72362
- "resource:conflict",
72363
- "server:internal_error"
72364
- ]
72365
- },
72366
- getCourse: {
72367
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72368
- method: "GET",
72369
- auth: "user",
72370
- responseKind: "json"
72371
- },
72372
- updateCourse: {
72373
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72374
- method: "PATCH",
72375
- auth: "user",
72376
- responseKind: "json",
72377
- errors: [
72378
- "validation:invalid_input",
72379
- "resource:not_found",
72380
- "resource:conflict",
72381
- "server:internal_error"
72382
- ]
72383
- },
72384
- deleteCourse: {
72385
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72386
- method: "DELETE",
72387
- auth: "user",
72388
- responseKind: "json",
72389
- errors: [
72390
- "validation:invalid_input",
72391
- "resource:not_found",
72392
- "resource:conflict",
72393
- "server:internal_error"
72394
- ]
72395
- },
70071
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
70072
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72396
70073
  deleteEventOffering: {
72397
70074
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
72398
70075
  method: "DELETE",
@@ -72405,20 +70082,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72405
70082
  "server:internal_error"
72406
70083
  ]
72407
70084
  },
72408
- duplicateCourse: {
72409
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
72410
- method: "POST",
72411
- auth: "user",
72412
- responseKind: "json",
72413
- errors: [
72414
- "validation:invalid_input",
72415
- "resource:not_found",
72416
- "resource:already_exists",
72417
- "server:internal_error"
72418
- ]
72419
- },
72420
- changeCourseContentOwnership: {
72421
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
70085
+ changeEventSeriesContentOwnership: {
70086
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
72422
70087
  method: "POST",
72423
70088
  auth: "user",
72424
70089
  responseKind: "json",
@@ -72429,8 +70094,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72429
70094
  "server:internal_error"
72430
70095
  ]
72431
70096
  },
72432
- addCourseEnrollment: {
72433
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
70097
+ addEventSeriesRegistration: {
70098
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
72434
70099
  method: "POST",
72435
70100
  auth: "user",
72436
70101
  responseKind: "json",
@@ -72441,33 +70106,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72441
70106
  "server:internal_error"
72442
70107
  ]
72443
70108
  },
72444
- listCourseEnrollments: {
72445
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
70109
+ listEventSeriesRegistrations: {
70110
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
72446
70111
  method: "GET",
72447
70112
  auth: "user",
72448
70113
  responseKind: "json"
72449
70114
  },
72450
- exportCourseEnrollmentsCsv: {
72451
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
70115
+ exportEventSeriesRegistrationsCsv: {
70116
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
72452
70117
  method: "GET",
72453
70118
  auth: "user",
72454
70119
  errors: [],
72455
70120
  responseKind: "blob"
72456
70121
  },
72457
- exportCourseWaitlistCsv: {
72458
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
72459
- method: "GET",
72460
- tags: [
72461
- "site-{siteId}",
72462
- "bookings",
72463
- "courses-{courseId}"
72464
- ],
72465
- auth: "user",
72466
- responseKind: "blob",
72467
- errors: []
72468
- },
72469
- updateCourseEnrollment: {
72470
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
70122
+ updateEventSeriesRegistration: {
70123
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
72471
70124
  method: "PATCH",
72472
70125
  auth: "user",
72473
70126
  responseKind: "json",
@@ -72855,71 +70508,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72855
70508
  errors: ["resource:not_found", "server:internal_error"],
72856
70509
  auth: "public",
72857
70510
  responseKind: "json"
72858
- },
72859
- registerForWholeSeries: {
72860
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
72861
- method: "POST",
72862
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
72863
- errors: [
72864
- "auth:unauthenticated",
72865
- "auth:forbidden",
72866
- "validation:invalid_input",
72867
- "resource:not_found",
72868
- "resource:conflict",
72869
- "resource:already_exists",
72870
- "server:internal_error"
72871
- ],
72872
- auth: "public",
72873
- responseKind: "json"
72874
- },
72875
- checkWholeSeriesEligibility: {
72876
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
72877
- method: "POST",
72878
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
72879
- errors: [
72880
- "auth:unauthenticated",
72881
- "resource:not_found",
72882
- "resource:conflict",
72883
- "server:internal_error"
72884
- ],
72885
- auth: "public",
72886
- responseKind: "json"
72887
- },
72888
- createWholeSeriesCheckout: {
72889
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
70511
+ }
70512
+ });
70513
+ //#endregion
70514
+ //#region ../api/src/publicEventEndpointDefinitions.ts
70515
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
70516
+ getPublicEventRegistrationOptions: {
70517
+ path: "/public/sites/{siteId}/events/registration-options",
72890
70518
  method: "POST",
72891
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
70519
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
72892
70520
  auth: "public",
72893
70521
  responseKind: "json",
72894
70522
  errors: [
72895
- "auth:unauthenticated",
72896
70523
  "validation:invalid_input",
72897
70524
  "resource:not_found",
72898
70525
  "resource:conflict",
72899
70526
  "server:internal_error"
72900
70527
  ]
72901
70528
  },
72902
- getWholeSeriesRegistrationStatus: {
72903
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
70529
+ resolveEventSubroute: {
70530
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
72904
70531
  method: "GET",
72905
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
72906
- errors: ["resource:not_found", "server:internal_error"],
70532
+ revalidate: 60,
70533
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
72907
70534
  auth: "public",
72908
- responseKind: "json"
70535
+ responseKind: "json",
70536
+ errors: []
72909
70537
  }
72910
70538
  });
72911
70539
  //#endregion
72912
- //#region ../api/src/publicEventEndpointDefinitions.ts
72913
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
72914
- path: "/public/sites/{siteId}/events/subroutes/resolve",
72915
- method: "GET",
72916
- revalidate: 60,
72917
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
72918
- auth: "public",
72919
- responseKind: "json",
72920
- errors: []
72921
- } });
72922
- //#endregion
72923
70540
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
72924
70541
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72925
70542
  listSiteApiKeys: {
@@ -73287,7 +70904,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
73287
70904
  }), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
73288
70905
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
73289
70906
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
73290
- ...COURSE_ENDPOINT_DEFINITIONS
70907
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
73291
70908
  }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
73292
70909
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
73293
70910
  z.object({
@@ -74328,6 +71945,68 @@ function parsePublicProductCategorySelector(value) {
74328
71945
  };
74329
71946
  }
74330
71947
  //#endregion
71948
+ //#region ../api/src/bookingPaymentTermSchemas.ts
71949
+ const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
71950
+ const bookingInstalmentPlanSchema = z.discriminatedUnion("kind", [
71951
+ z.object({
71952
+ kind: z.literal("deposit_plus_one_remainder"),
71953
+ depositAmountCents: z.number().int().nonnegative(),
71954
+ depositRefundability: bookingDepositRefundPolicySchema,
71955
+ remainderDueCount: z.number().int().positive(),
71956
+ intervalUnit: z.enum([
71957
+ "day",
71958
+ "week",
71959
+ "month"
71960
+ ])
71961
+ }),
71962
+ z.object({
71963
+ kind: z.literal("deposit_plus_scheduled_instalments"),
71964
+ depositAmountCents: z.number().int().nonnegative(),
71965
+ depositRefundability: bookingDepositRefundPolicySchema,
71966
+ instalmentCount: z.number().int().positive(),
71967
+ intervalCount: z.number().int().positive(),
71968
+ intervalUnit: z.enum([
71969
+ "day",
71970
+ "week",
71971
+ "month"
71972
+ ])
71973
+ }),
71974
+ z.object({
71975
+ kind: z.literal("equal_scheduled_instalments"),
71976
+ instalmentCount: z.number().int().positive(),
71977
+ intervalCount: z.number().int().positive(),
71978
+ intervalUnit: z.enum([
71979
+ "day",
71980
+ "week",
71981
+ "month"
71982
+ ])
71983
+ })
71984
+ ]);
71985
+ const bookingFlexibleBalanceDueDateRuleSchema = z.discriminatedUnion("kind", [z.object({
71986
+ kind: z.literal("relative_to_start_date"),
71987
+ daysBeforeStart: z.number().int().positive()
71988
+ }), z.object({
71989
+ kind: z.literal("fixed_calendar_date"),
71990
+ dueAt: z.string().datetime()
71991
+ })]);
71992
+ const bookingFlexibleBalanceConfigSchema = z.object({
71993
+ upfrontAmountCents: z.number().int().nonnegative(),
71994
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
71995
+ depositRefundability: bookingDepositRefundPolicySchema
71996
+ });
71997
+ z.discriminatedUnion("kind", [
71998
+ z.object({ kind: z.literal("upfront") }),
71999
+ z.object({ kind: z.literal("deferred_manual") }),
72000
+ z.object({
72001
+ kind: z.literal("instalment_plan"),
72002
+ plan: bookingInstalmentPlanSchema
72003
+ }),
72004
+ z.object({
72005
+ kind: z.literal("flexible_balance"),
72006
+ config: bookingFlexibleBalanceConfigSchema
72007
+ })
72008
+ ]);
72009
+ //#endregion
74331
72010
  //#region ../api/src/aiPlayground.ts
74332
72011
  /**
74333
72012
  * RFC-6902 JSON Patch Operations