@riverbankcms/sdk 0.134.0 → 0.135.1

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-D4p_5TdY.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-Dppxcr_g.mjs → PreviewEditorUI-D0cRoTX1.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-D51gQaG3.mjs → PreviewQueryProvider-DcgaESkm.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-8CyGCXir.mjs → SdkPreviewModeRuntime-BKLtM3Nz.mjs} +5 -5
  7. package/dist/{SiteChromeCustomizeContext-DVMTMvqA.mjs → SiteChromeCustomizeContext-61X2m7QV.mjs} +4105 -8035
  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 +35 -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 +16 -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-Bz9znbpn.mjs} +180 -4
  144. package/dist/client/{DiscountCodeDisclosure-CfuPOHD0.mjs → DiscountCodeDisclosure-35Ru8yB9.mjs} +13 -27
  145. package/dist/client/{EventCombined.client-DB8Qfzi-.mjs → EventCombined.client-BKB0ZxRR.mjs} +3 -3
  146. package/dist/client/{EventListing.client-DD4X8hp4.mjs → EventListing.client-Dx8I21ok.mjs} +2 -2
  147. package/dist/client/{LeafletStaticMap-QhgIBQbv.mjs → LeafletStaticMap-CEWx-Bhe.mjs} +1 -1
  148. package/dist/client/{accordion-DFXpLvwg.mjs → accordion-KIDsKTwS.mjs} +1 -1
  149. package/dist/client/{bookingForm-sI05d3lk.mjs → bookingForm-D96Rmp-5.mjs} +6 -7
  150. package/dist/client/bookings.mjs +913 -1906
  151. package/dist/client/{carousel-wjyWTZCh.mjs → carousel-YwUgyL66.mjs} +1 -1
  152. package/dist/client/{cart-DCwdpA4i.mjs → cart-BbwuNrUT.mjs} +3 -3
  153. package/dist/client/{checkout-DTDW3l0R.mjs → checkout-hp1ucmEY.mjs} +3 -3
  154. package/dist/client/{checkoutUrls-DQYC_Br-.mjs → checkoutUrls-BuseL0dw.mjs} +4 -2
  155. package/dist/client/client.mjs +5109 -9333
  156. package/dist/client/{context-TSK1CGx8.mjs → context-DljQn8L5.mjs} +15 -69
  157. package/dist/client/{eventCalendar-B0Zg-i_w.mjs → eventCalendar-DU4iNLpo.mjs} +5 -5
  158. package/dist/client/{eventCombined-B8Y2wizd.mjs → eventCombined-CZuupW8m.mjs} +3 -3
  159. package/dist/client/{eventDetails-DPDOwURJ.mjs → eventDetails-DPQWwCIi.mjs} +8 -8
  160. package/dist/client/{eventListing-CjBcmSLn.mjs → eventListing-C7oMidwS.mjs} +3 -3
  161. package/dist/client/{eventRegistration-CK30HsAq.mjs → eventRegistration-zEiunlUs.mjs} +4522 -3690
  162. package/dist/client/{form-CUXfsABE.mjs → form-D2KIyCVJ.mjs} +2 -2
  163. package/dist/client/{headerSection-N-mN3rjr.mjs → headerSection-CK5uChUK.mjs} +2 -2
  164. package/dist/client/hooks.mjs +459 -714
  165. package/dist/client/{locationMap-oiIDQMBt.mjs → locationMap-DLQNH1ln.mjs} +2 -2
  166. package/dist/client/{newsletterForm-CkQ2tTrM.mjs → newsletterForm-ZuhIG7fZ.mjs} +2 -2
  167. package/dist/client/{productDetail-CnidyrsN.mjs → productDetail-7hIcGeae.mjs} +3 -3
  168. package/dist/client/{productList-CttYcS_S.mjs → productList-T4Cii1ot.mjs} +3 -3
  169. package/dist/client/{propsDecoder-CeUMxI9a.mjs → propsDecoder-mB0aC_Fi.mjs} +4702 -4458
  170. package/dist/client/rendering/client.mjs +59617 -62260
  171. package/dist/client/rendering/islands.mjs +17 -19
  172. package/dist/client/rendering.mjs +5389 -9707
  173. package/dist/client/{scrollToBlock-lPr1oqxB.mjs → scrollToBlock-Du5mHgvL.mjs} +2 -2
  174. package/dist/client/{shop-DXQtMo2O.mjs → shop-B5zAcKZn.mjs} +6 -6
  175. package/dist/client/{shop-commerce-quDL411J.mjs → shop-commerce-BKBZB6l5.mjs} +6 -6
  176. package/dist/client/{shop-commerce-store-Dnu-8Iub.mjs → shop-commerce-store-Cq4qlNtQ.mjs} +1 -1
  177. package/dist/client/{shopShared-BWPUURvG.mjs → shopShared-DYGzEs9D.mjs} +3 -3
  178. package/dist/client/{useEventFilters-DRhWp2_5.mjs → useEventFilters-Bphkda8m.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-BbIC8G4J.mjs} +2 -2
  185. package/dist/{separator-CMhj6BTi.mjs → separator-CadhAtI7.mjs} +1 -1
  186. package/dist/server/components.mjs +558 -2962
  187. package/dist/server/config-validation.mjs +459 -714
  188. package/dist/server/config.mjs +459 -714
  189. package/dist/server/data.mjs +459 -714
  190. package/dist/server/index.mjs +41 -162
  191. package/dist/server/next.mjs +572 -2976
  192. package/dist/server/page-converter.mjs +360 -582
  193. package/dist/server/prebuild.mjs +1 -1
  194. package/dist/server/rendering/server.mjs +569 -2879
  195. package/dist/server/rendering.mjs +558 -2962
  196. package/dist/server/routing.mjs +603 -1087
  197. package/dist/server/server.mjs +473 -728
  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
@@ -9651,7 +9651,7 @@ function publicEventPricingType(pricing) {
9651
9651
  case "single_paid":
9652
9652
  case "ticket_types":
9653
9653
  case "sliding_scale":
9654
- case "course": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
9654
+ case "whole_series": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
9655
9655
  case "external": return "external";
9656
9656
  }
9657
9657
  }
@@ -9662,14 +9662,14 @@ function publicEventPricingCurrency(pricing) {
9662
9662
  case "single_paid":
9663
9663
  case "ticket_types":
9664
9664
  case "sliding_scale": return pricing.currency;
9665
- case "course": return pricing.display.display.currency;
9665
+ case "whole_series": return pricing.display.display.currency;
9666
9666
  case "external": return null;
9667
9667
  }
9668
9668
  }
9669
9669
  function isFreePublicEventPriceDisplay(display) {
9670
9670
  switch (display.kind) {
9671
9671
  case "free": return true;
9672
- case "course": return display.display.kind === "free";
9672
+ case "whole_series": return display.display.kind === "free";
9673
9673
  case "exact":
9674
9674
  case "from":
9675
9675
  case "range":
@@ -9705,7 +9705,7 @@ function formatBookingPriceDisplay(display, options = {}) {
9705
9705
  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)}`;
9706
9706
  case "unavailable": return "Pricing unavailable";
9707
9707
  case "external": return display.label;
9708
- case "course": return formatCoursePriceDisplayLabel(display.display, options);
9708
+ case "whole_series": return formatCoursePriceDisplayLabel(display.display, options);
9709
9709
  default: return assertNever$23(display);
9710
9710
  }
9711
9711
  }
@@ -14893,7 +14893,7 @@ defineBlockAppearancePreset({
14893
14893
  id: "schedule-details-brand-depth",
14894
14894
  target: "events",
14895
14895
  label: "Brand-depth schedule details",
14896
- blockKinds: ["block.event-details", "block.course-details"],
14896
+ blockKinds: ["block.event-details"],
14897
14897
  design: {
14898
14898
  sectionSurface: "brand-depth-band",
14899
14899
  contentFrame: plainFrame,
@@ -21510,7 +21510,6 @@ const productDetail = (props, children, ...mods) => el("product-detail", props,
21510
21510
  const cart = (props, children, ...mods) => el("cart", props, children, ...mods);
21511
21511
  const checkout = (props, children, ...mods) => el("checkout", props, children, ...mods);
21512
21512
  const gifting = (props, children, ...mods) => el("gifting", props, children, ...mods);
21513
- const courseRegistration = (props, children, ...mods) => el("course-registration", props, children, ...mods);
21514
21513
  function bind(from, options) {
21515
21514
  return (node) => ({
21516
21515
  ...node,
@@ -31604,12 +31603,12 @@ const weeklySlotAvailabilityBlockDefinition = {
31604
31603
  };
31605
31604
  //#endregion
31606
31605
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
31607
- const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
31608
- const bookingInstalmentPlanSchema = z$1.union([
31606
+ const bookingDepositRefundPolicySchema$1 = z$1.enum(["refundable", "non_refundable"]);
31607
+ const bookingInstalmentPlanSchema$1 = z$1.union([
31609
31608
  z$1.object({
31610
31609
  kind: z$1.literal("deposit_plus_one_remainder"),
31611
31610
  depositAmountCents: z$1.number().int().min(0),
31612
- depositRefundability: bookingDepositRefundPolicySchema,
31611
+ depositRefundability: bookingDepositRefundPolicySchema$1,
31613
31612
  remainderDueCount: z$1.number().int().positive(),
31614
31613
  intervalUnit: z$1.enum([
31615
31614
  "day",
@@ -31620,7 +31619,7 @@ const bookingInstalmentPlanSchema = z$1.union([
31620
31619
  z$1.object({
31621
31620
  kind: z$1.literal("deposit_plus_scheduled_instalments"),
31622
31621
  depositAmountCents: z$1.number().int().min(0),
31623
- depositRefundability: bookingDepositRefundPolicySchema,
31622
+ depositRefundability: bookingDepositRefundPolicySchema$1,
31624
31623
  instalmentCount: z$1.number().int().positive(),
31625
31624
  intervalCount: z$1.number().int().positive(),
31626
31625
  intervalUnit: z$1.enum([
@@ -31640,28 +31639,28 @@ const bookingInstalmentPlanSchema = z$1.union([
31640
31639
  ])
31641
31640
  })
31642
31641
  ]);
31643
- const bookingFlexibleBalanceDueDateRuleSchema = z$1.union([z$1.object({
31642
+ const bookingFlexibleBalanceDueDateRuleSchema$1 = z$1.union([z$1.object({
31644
31643
  kind: z$1.literal("relative_to_start_date"),
31645
31644
  daysBeforeStart: z$1.number().int().positive()
31646
31645
  }), z$1.object({
31647
31646
  kind: z$1.literal("fixed_calendar_date"),
31648
31647
  dueAt: z$1.string().datetime()
31649
31648
  })]);
31650
- const bookingFlexibleBalanceConfigSchema = z$1.object({
31649
+ const bookingFlexibleBalanceConfigSchema$1 = z$1.object({
31651
31650
  upfrontAmountCents: z$1.number().int().min(0),
31652
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
31653
- depositRefundability: bookingDepositRefundPolicySchema
31651
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
31652
+ depositRefundability: bookingDepositRefundPolicySchema$1
31654
31653
  });
31655
31654
  const blockBookingPaymentCollectionOptionSchema = z$1.union([
31656
31655
  z$1.object({ kind: z$1.literal("upfront") }),
31657
31656
  z$1.object({ kind: z$1.literal("deferred_manual") }),
31658
31657
  z$1.object({
31659
31658
  kind: z$1.literal("instalment_plan"),
31660
- plan: bookingInstalmentPlanSchema
31659
+ plan: bookingInstalmentPlanSchema$1
31661
31660
  }),
31662
31661
  z$1.object({
31663
31662
  kind: z$1.literal("flexible_balance"),
31664
- config: bookingFlexibleBalanceConfigSchema
31663
+ config: bookingFlexibleBalanceConfigSchema$1
31665
31664
  })
31666
31665
  ]);
31667
31666
  const blockBookingPaymentTermsSchema = z$1.object({ allowedOptions: z$1.array(blockBookingPaymentCollectionOptionSchema).min(1) });
@@ -31915,6 +31914,13 @@ const publicWholeSeriesOfferingSchema = z$1.object({
31915
31914
  title: z$1.string(),
31916
31915
  slug: z$1.string(),
31917
31916
  description: z$1.unknown().nullable(),
31917
+ deliveryMode: z$1.enum([
31918
+ "in_person",
31919
+ "online",
31920
+ "hybrid"
31921
+ ]),
31922
+ waitlistEnabled: z$1.boolean(),
31923
+ requireGuestDetails: z$1.boolean(),
31918
31924
  teamMembers: z$1.array(wholeSeriesTeamMemberSummarySchema).optional(),
31919
31925
  enrollmentOpen: z$1.boolean(),
31920
31926
  pricing: wholeSeriesPricingSchema,
@@ -32030,10 +32036,11 @@ const mixedPriceDisplaySchema = z$1.object({
32030
32036
  paidToAmount: z$1.number(),
32031
32037
  currency: z$1.string()
32032
32038
  });
32033
- const publicCoursePriceDisplaySchema = z$1.discriminatedUnion("kind", [
32039
+ const publicWholeSeriesPriceDisplaySchema = z$1.discriminatedUnion("kind", [
32034
32040
  freePriceDisplaySchema,
32035
32041
  exactPriceDisplaySchema,
32036
32042
  fromPriceDisplaySchema,
32043
+ rangePriceDisplaySchema,
32037
32044
  unavailablePriceDisplaySchema
32038
32045
  ]);
32039
32046
  z$1.discriminatedUnion("kind", [
@@ -32048,8 +32055,8 @@ z$1.discriminatedUnion("kind", [
32048
32055
  label: z$1.string()
32049
32056
  }),
32050
32057
  z$1.object({
32051
- kind: z$1.literal("course"),
32052
- display: publicCoursePriceDisplaySchema
32058
+ kind: z$1.literal("whole_series"),
32059
+ display: publicWholeSeriesPriceDisplaySchema
32053
32060
  })
32054
32061
  ]);
32055
32062
  const publicEventTicketTypePriceDisplaySchema = z$1.union([
@@ -32151,10 +32158,10 @@ const publicEventPricingSchema = z$1.discriminatedUnion("kind", [
32151
32158
  })
32152
32159
  }),
32153
32160
  z$1.object({
32154
- kind: z$1.literal("course"),
32161
+ kind: z$1.literal("whole_series"),
32155
32162
  display: z$1.object({
32156
- kind: z$1.literal("course"),
32157
- display: publicCoursePriceDisplaySchema
32163
+ kind: z$1.literal("whole_series"),
32164
+ display: publicWholeSeriesPriceDisplaySchema
32158
32165
  })
32159
32166
  }),
32160
32167
  z$1.object({
@@ -32597,7 +32604,8 @@ function resolveEventRegistrationScope(context) {
32597
32604
  };
32598
32605
  return { kind: "unscoped" };
32599
32606
  }
32600
- function applyEventRegistrationScope(events, scope) {
32607
+ function resolveEventRegistrationScopedEvents(events, context) {
32608
+ const scope = resolveEventRegistrationScope(context);
32601
32609
  switch (scope.kind) {
32602
32610
  case "occurrenceSeries":
32603
32611
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -32609,9 +32617,6 @@ function applyEventRegistrationScope(events, scope) {
32609
32617
  case "unscoped": return [...events];
32610
32618
  }
32611
32619
  }
32612
- function resolveEventRegistrationScopedEvents(events, context) {
32613
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
32614
- }
32615
32620
  //#endregion
32616
32621
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
32617
32622
  function planEventRegistrationScope(input) {
@@ -32705,14 +32710,14 @@ function isRecord$23(value) {
32705
32710
  }
32706
32711
  function isPublicEventPricing(value) {
32707
32712
  if (!isRecord$23(value) || typeof value.kind !== "string") return false;
32708
- 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";
32713
+ 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";
32709
32714
  }
32710
32715
  function isPublicEventTicketType(value) {
32711
32716
  return isRecord$23(value) && typeof value.id === "string";
32712
32717
  }
32713
32718
  function readTicketTypePriceDisplay(value, currency) {
32714
32719
  const display = readLegacyPriceDisplay(value, currency);
32715
- return display.kind === "course" || display.kind === "external" ? {
32720
+ return display.kind === "whole_series" || display.kind === "external" ? {
32716
32721
  kind: "unavailable",
32717
32722
  currency
32718
32723
  } : display;
@@ -32770,11 +32775,11 @@ function readLegacyPriceDisplay(value, currency) {
32770
32775
  kind: "unavailable",
32771
32776
  currency: displayCurrency
32772
32777
  };
32773
- case "course": return isRecord$23(value.display) ? {
32774
- kind: "course",
32778
+ case "whole_series": return isRecord$23(value.display) ? {
32779
+ kind: "whole_series",
32775
32780
  display: readCoursePriceDisplay(value.display, displayCurrency)
32776
32781
  } : {
32777
- kind: "course",
32782
+ kind: "whole_series",
32778
32783
  display: {
32779
32784
  kind: "unavailable",
32780
32785
  currency: displayCurrency
@@ -32897,7 +32902,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
32897
32902
  //#endregion
32898
32903
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
32899
32904
  function eventMatchesOccurrenceId(event, occurrenceId) {
32900
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
32905
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
32901
32906
  }
32902
32907
  function findPreSelectedEvent(input) {
32903
32908
  const occurrenceContext = input.occurrenceContext;
@@ -32923,12 +32928,127 @@ function toRegistrationEvent(event) {
32923
32928
  return {
32924
32929
  ...event,
32925
32930
  pricing: resolveRuntimeEventPricing(event),
32926
- publicEventId: event.id,
32927
- registrationOccurrenceId: event.occurrenceId
32931
+ selectionId: event.id,
32932
+ registrationSubject: {
32933
+ kind: "occurrence",
32934
+ occurrenceId: event.occurrenceId
32935
+ }
32928
32936
  };
32929
32937
  }
32930
32938
  function toRegistrationEvents(events) {
32931
- return events.map(toRegistrationEvent);
32939
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
32940
+ }
32941
+ function toWholeSeriesTicketType(option) {
32942
+ return {
32943
+ ...option,
32944
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
32945
+ attendanceScope: option.attendanceScope ?? void 0,
32946
+ availability: {
32947
+ kind: "available",
32948
+ remainingCapacity: option.capacityLimit
32949
+ }
32950
+ };
32951
+ }
32952
+ function toWholeSeriesPricing(offering) {
32953
+ const resolved = resolveWholeSeriesPricingState(offering);
32954
+ switch (offering.pricing.pricingStrategy) {
32955
+ case "free": return {
32956
+ kind: "free_registration",
32957
+ currency: offering.currency,
32958
+ display: {
32959
+ kind: "free",
32960
+ currency: offering.currency
32961
+ }
32962
+ };
32963
+ case "single": {
32964
+ const amount = offering.pricing.singlePriceAmount ?? 0;
32965
+ return amount === 0 ? {
32966
+ kind: "free_registration",
32967
+ currency: offering.currency,
32968
+ display: {
32969
+ kind: "free",
32970
+ currency: offering.currency
32971
+ }
32972
+ } : {
32973
+ kind: "single_paid",
32974
+ amount,
32975
+ currency: offering.currency,
32976
+ display: {
32977
+ kind: "exact",
32978
+ amount,
32979
+ currency: offering.currency
32980
+ }
32981
+ };
32982
+ }
32983
+ case "tiered": return {
32984
+ kind: "ticket_types",
32985
+ currency: offering.currency,
32986
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
32987
+ display: resolved.display
32988
+ };
32989
+ case "sliding_scale": return {
32990
+ kind: "sliding_scale",
32991
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32992
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32993
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
32994
+ currency: offering.currency,
32995
+ display: {
32996
+ kind: "range",
32997
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32998
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32999
+ currency: offering.currency
33000
+ }
33001
+ };
33002
+ }
33003
+ }
33004
+ function toAttendanceModes(offering) {
33005
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
33006
+ mode,
33007
+ capacity: offering.enrollmentCapacity,
33008
+ registeredCount: offering.enrolledCount,
33009
+ availableSpots: offering.availableSpots,
33010
+ waitlistEnabled: offering.waitlistEnabled
33011
+ }));
33012
+ }
33013
+ function toWholeSeriesRegistrationEvent(offering) {
33014
+ const firstSession = offering.sessions[0];
33015
+ const lastSession = offering.sessions[offering.sessions.length - 1];
33016
+ return {
33017
+ selectionId: offering.eventSeriesId,
33018
+ registrationSubject: {
33019
+ kind: "wholeSeries",
33020
+ eventSeriesId: offering.eventSeriesId,
33021
+ sessions: offering.sessions
33022
+ },
33023
+ seriesId: offering.eventSeriesId,
33024
+ title: offering.title,
33025
+ startsAt: firstSession?.startsAt ?? "",
33026
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
33027
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
33028
+ kind: "closed",
33029
+ reason: "enrollment_closed"
33030
+ },
33031
+ deliveryMode: offering.deliveryMode,
33032
+ attendanceModes: toAttendanceModes(offering),
33033
+ capacity: offering.enrollmentCapacity,
33034
+ registeredCount: offering.enrolledCount,
33035
+ availableSpots: offering.availableSpots,
33036
+ waitlistEnabled: offering.waitlistEnabled,
33037
+ venue: offering.venue ? {
33038
+ ...offering.venue,
33039
+ location: null
33040
+ } : null,
33041
+ eventCategory: null,
33042
+ teamMembers: offering.teamMembers,
33043
+ status: offering.status,
33044
+ timeZone: firstSession?.timeZone ?? "UTC",
33045
+ pricing: toWholeSeriesPricing(offering),
33046
+ paymentTerms: offering.paymentTerms,
33047
+ consent: offering.consent,
33048
+ requireGuestDetails: offering.requireGuestDetails,
33049
+ acceptsPasses: false,
33050
+ acceptsMemberships: offering.acceptsMemberships
33051
+ };
32932
33052
  }
32933
33053
  //#endregion
32934
33054
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -32954,11 +33074,7 @@ const eventRegistrationHydrationSchemaShape = {
32954
33074
  maxTickets: z$1.string().optional(),
32955
33075
  showVenue: z$1.boolean().optional(),
32956
33076
  showCapacity: z$1.boolean().optional(),
32957
- showSessions: z$1.boolean().optional(),
32958
- showPrice: z$1.boolean().optional(),
32959
33077
  successMessage: z$1.string().optional(),
32960
- waitlistMessage: z$1.string().optional(),
32961
- membershipMessage: z$1.string().optional(),
32962
33078
  buttonVariant: registrationButtonVariantSchema.optional(),
32963
33079
  overlayEnabled: z$1.boolean().optional(),
32964
33080
  spamProtectionEnabled: z$1.boolean().optional(),
@@ -33028,6 +33144,15 @@ function resolveWholeSeriesOffering(source) {
33028
33144
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
33029
33145
  }
33030
33146
  function buildEventRegistrationShellStepLabels(source) {
33147
+ const selectedOffering = resolveWholeSeriesOffering(source);
33148
+ if (selectedOffering) {
33149
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
33150
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
33151
+ eligibility: null,
33152
+ selectedTicketType: null,
33153
+ event: selectedEvent
33154
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
33155
+ }
33031
33156
  const scopedEvents = scopeEventRegistrationEvents(source);
33032
33157
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
33033
33158
  const preSelectedEvent = findPreSelectedEvent({
@@ -33042,13 +33167,16 @@ function buildEventRegistrationShellStepLabels(source) {
33042
33167
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
33043
33168
  }
33044
33169
  function scopeEventRegistrationEvents(source) {
33170
+ return toRegistrationEvents(scopeEventRegistrationSourceEvents(source));
33171
+ }
33172
+ function scopeEventRegistrationSourceEvents(source) {
33045
33173
  const scope = planEventRegistrationScope({
33046
- events: toRegistrationEvents(source.events ?? []),
33174
+ events: source.events ?? [],
33047
33175
  wholeSeriesOffering: source.wholeSeriesOffering,
33048
33176
  occurrenceContext: source.occurrenceContext,
33049
33177
  subject: source.subject
33050
33178
  });
33051
- return scope.kind === "invalidSelectedRun" ? [] : scope.events;
33179
+ return scope.kind === "invalidSelectedRun" ? [] : [...scope.events];
33052
33180
  }
33053
33181
  function shellLabelForRegistrationStep(step, events) {
33054
33182
  switch (step) {
@@ -33080,30 +33208,29 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
33080
33208
  source: createZodCodec(eventRegistrationSourceSchema),
33081
33209
  render: createZodCodec(eventRegistrationRenderSchema)
33082
33210
  },
33083
- buildRender: (source) => ({
33084
- display: buildEventRegistrationDisplay(source),
33085
- hydration: {
33086
- occurrenceContext: source.occurrenceContext ?? null,
33087
- subject: source.subject ?? null,
33088
- events: source.events ?? null,
33089
- wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
33090
- wholeSeriesOffering: resolveWholeSeriesOffering(source),
33091
- maxTickets: source.maxTickets ?? void 0,
33092
- showVenue: source.showVenue,
33093
- showCapacity: source.showCapacity,
33094
- showSessions: source.showSessions,
33095
- showPrice: source.showPrice,
33096
- successMessage: source.successMessage,
33097
- waitlistMessage: source.waitlistMessage,
33098
- membershipMessage: source.membershipMessage,
33099
- buttonVariant: source.buttonVariant,
33100
- overlayEnabled: source.overlayEnabled,
33101
- spamProtectionEnabled: source.spamProtectionEnabled,
33102
- supportEmail: source.supportEmail,
33103
- sitePasses: source.sitePasses ?? null,
33104
- siteMemberships: source.siteMemberships ?? null
33105
- }
33106
- })
33211
+ buildRender: (source) => {
33212
+ const events = source.events == null ? null : scopeEventRegistrationSourceEvents(source);
33213
+ return {
33214
+ display: buildEventRegistrationDisplay(source),
33215
+ hydration: {
33216
+ occurrenceContext: source.occurrenceContext ?? null,
33217
+ subject: source.subject ?? null,
33218
+ events,
33219
+ wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
33220
+ wholeSeriesOffering: resolveWholeSeriesOffering(source),
33221
+ maxTickets: source.maxTickets ?? void 0,
33222
+ showVenue: source.showVenue,
33223
+ showCapacity: source.showCapacity,
33224
+ successMessage: source.successMessage,
33225
+ buttonVariant: source.buttonVariant,
33226
+ overlayEnabled: source.overlayEnabled,
33227
+ spamProtectionEnabled: source.spamProtectionEnabled,
33228
+ supportEmail: source.supportEmail,
33229
+ sitePasses: source.sitePasses ?? null,
33230
+ siteMemberships: source.siteMemberships ?? null
33231
+ }
33232
+ };
33233
+ }
33107
33234
  });
33108
33235
  function normalizeEventRegistrationEventInput(value) {
33109
33236
  if (!isRecord$22(value)) return value;
@@ -33225,24 +33352,6 @@ const eventRegistrationBlockDefinition = {
33225
33352
  defaultValue: true,
33226
33353
  ui: { intent: "display" }
33227
33354
  },
33228
- {
33229
- id: "showSessions",
33230
- type: "boolean",
33231
- label: "Show complete schedule",
33232
- description: "Display every session for whole-series registrations",
33233
- required: false,
33234
- defaultValue: true,
33235
- ui: { intent: "display" }
33236
- },
33237
- {
33238
- id: "showPrice",
33239
- type: "boolean",
33240
- label: "Show price",
33241
- description: "Display the whole-series price",
33242
- required: false,
33243
- defaultValue: true,
33244
- ui: { intent: "display" }
33245
- },
33246
33355
  {
33247
33356
  id: "successMessage",
33248
33357
  type: "text",
@@ -33253,26 +33362,6 @@ const eventRegistrationBlockDefinition = {
33253
33362
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
33254
33363
  maxLength: 500
33255
33364
  },
33256
- {
33257
- id: "waitlistMessage",
33258
- type: "text",
33259
- label: "Waitlist message",
33260
- description: "Message shown after joining a whole-series waitlist",
33261
- required: false,
33262
- multiline: true,
33263
- defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
33264
- maxLength: 500
33265
- },
33266
- {
33267
- id: "membershipMessage",
33268
- type: "text",
33269
- label: "Membership registration message",
33270
- description: "Message shown when a whole-series place is covered by membership",
33271
- required: false,
33272
- multiline: true,
33273
- defaultValue: "Registered using your membership. Check your email for session details.",
33274
- maxLength: 500
33275
- },
33276
33365
  {
33277
33366
  id: "buttonText",
33278
33367
  type: "text",
@@ -33304,11 +33393,7 @@ const eventRegistrationBlockDefinition = {
33304
33393
  } },
33305
33394
  showVenue: { $bind: { from: "content.showVenue" } },
33306
33395
  showCapacity: { $bind: { from: "content.showCapacity" } },
33307
- showSessions: { $bind: { from: "content.showSessions" } },
33308
- showPrice: { $bind: { from: "content.showPrice" } },
33309
33396
  successMessage: { $bind: { from: "content.successMessage" } },
33310
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
33311
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
33312
33397
  buttonText: { $bind: {
33313
33398
  from: "content.buttonText",
33314
33399
  fallback: "Complete Registration"
@@ -33425,267 +33510,6 @@ const eventRegistrationBlockDefinition = {
33425
33510
  }
33426
33511
  };
33427
33512
  //#endregion
33428
- //#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
33429
- const courseRegistrationHydrationSchemaShape = {
33430
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
33431
- courses: z$1.array(publicWholeSeriesOfferingSchema).nullable().optional(),
33432
- showSessions: z$1.boolean().optional(),
33433
- showPrice: z$1.boolean().optional(),
33434
- showCapacity: z$1.boolean().optional(),
33435
- showVenue: z$1.boolean().optional(),
33436
- successMessage: z$1.string().optional(),
33437
- waitlistMessage: z$1.string().optional(),
33438
- membershipMessage: z$1.string().optional(),
33439
- buttonVariant: registrationButtonVariantSchema.optional()
33440
- };
33441
- const courseRegistrationSourceSchema = z$1.object({
33442
- siteId: z$1.string().optional(),
33443
- apiBaseUrl: z$1.string().optional(),
33444
- portalToken: z$1.string().nullable().optional(),
33445
- ...courseRegistrationHydrationSchemaShape,
33446
- className: z$1.string().nullable().optional(),
33447
- buttonText: z$1.string().nullable().optional(),
33448
- stage: previewStageSchema.optional()
33449
- });
33450
- const courseRegistrationDisplaySchema = z$1.object({
33451
- kind: z$1.literal("course-registration"),
33452
- state: z$1.literal("shell"),
33453
- className: z$1.string().nullable(),
33454
- summaryButtonText: z$1.string()
33455
- });
33456
- const courseRegistrationHydrationSchema = z$1.object(courseRegistrationHydrationSchemaShape);
33457
- const courseRegistrationRenderSchema = z$1.object({
33458
- display: courseRegistrationDisplaySchema,
33459
- hydration: courseRegistrationHydrationSchema
33460
- });
33461
- z$1.object({
33462
- siteId: z$1.string().optional(),
33463
- apiBaseUrl: z$1.string().optional(),
33464
- portalToken: z$1.string().nullable().optional(),
33465
- stage: previewStageSchema.optional()
33466
- });
33467
- function buildCourseRegistrationDisplay(source) {
33468
- return {
33469
- kind: "course-registration",
33470
- state: "shell",
33471
- className: source.className ?? null,
33472
- summaryButtonText: source.buttonText?.trim() || "Sign up"
33473
- };
33474
- }
33475
- const courseRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
33476
- kind: "client-owned",
33477
- contracts: {
33478
- source: createZodCodec(courseRegistrationSourceSchema),
33479
- render: createZodCodec(courseRegistrationRenderSchema)
33480
- },
33481
- buildRender: (source) => ({
33482
- display: buildCourseRegistrationDisplay(source),
33483
- hydration: {
33484
- subject: source.subject ?? null,
33485
- courses: source.courses ?? null,
33486
- showSessions: source.showSessions,
33487
- showPrice: source.showPrice,
33488
- showCapacity: source.showCapacity,
33489
- showVenue: source.showVenue,
33490
- successMessage: source.successMessage,
33491
- waitlistMessage: source.waitlistMessage,
33492
- membershipMessage: source.membershipMessage,
33493
- buttonVariant: source.buttonVariant
33494
- }
33495
- })
33496
- });
33497
- function buildCourseRegistrationInteractiveIslandProps(props) {
33498
- return buildInteractiveIslandProps({
33499
- runtime: courseRegistrationBlockRuntime,
33500
- mode: "course-registration",
33501
- meta: {
33502
- siteId: props.siteId,
33503
- apiBaseUrl: props.apiBaseUrl,
33504
- portalToken: props.portalToken,
33505
- stage: props.stage
33506
- },
33507
- source: props
33508
- });
33509
- }
33510
- const courseRegistrationBlockDefinition = {
33511
- manifest: createBlockManifest({
33512
- id: "block.course-registration",
33513
- version: "1.0.0",
33514
- title: "Course Registration",
33515
- titleSource: "heading",
33516
- description: "Enrollment form for multi-session courses",
33517
- category: "interactive",
33518
- contentSource: { kind: "inline" },
33519
- tags: [
33520
- "courses",
33521
- "enrollment",
33522
- "booking",
33523
- "form",
33524
- "signup",
33525
- "education"
33526
- ],
33527
- icon: "GraduationCap",
33528
- styleTokens: {
33529
- background: "surface",
33530
- typography: "body",
33531
- spacing: "md"
33532
- },
33533
- behaviours: {
33534
- supportsThemeSwitching: true,
33535
- inlineEditing: false,
33536
- animation: false,
33537
- paletteHidden: false
33538
- },
33539
- additionalFields: [
33540
- {
33541
- id: "heading",
33542
- type: "text",
33543
- label: "Heading",
33544
- description: "Main heading for the registration form",
33545
- required: false,
33546
- multiline: false,
33547
- defaultValue: "Sign up"
33548
- },
33549
- {
33550
- id: "description",
33551
- type: "richText",
33552
- label: "Description",
33553
- description: "Optional introductory text",
33554
- required: false
33555
- },
33556
- {
33557
- id: "showSessions",
33558
- type: "boolean",
33559
- label: "Show sessions",
33560
- description: "Display the list of course sessions",
33561
- required: false,
33562
- defaultValue: true,
33563
- ui: { intent: "display" }
33564
- },
33565
- {
33566
- id: "showPrice",
33567
- type: "boolean",
33568
- label: "Show price",
33569
- description: "Display the course price",
33570
- required: false,
33571
- defaultValue: true,
33572
- ui: { intent: "display" }
33573
- },
33574
- {
33575
- id: "showCapacity",
33576
- type: "boolean",
33577
- label: "Show available spots",
33578
- description: "Display remaining enrollment capacity",
33579
- required: false,
33580
- defaultValue: true,
33581
- ui: { intent: "display" }
33582
- },
33583
- {
33584
- id: "showVenue",
33585
- type: "boolean",
33586
- label: "Show venue",
33587
- description: "Display venue information",
33588
- required: false,
33589
- defaultValue: true,
33590
- ui: { intent: "display" }
33591
- },
33592
- {
33593
- id: "successMessage",
33594
- type: "text",
33595
- label: "Success message",
33596
- description: "Message shown after successful enrollment",
33597
- required: false,
33598
- multiline: true,
33599
- defaultValue: "You're enrolled! Check your email for confirmation and session details.",
33600
- maxLength: 500
33601
- },
33602
- {
33603
- id: "waitlistMessage",
33604
- type: "text",
33605
- label: "Waitlist message",
33606
- description: "Message when added to waitlist",
33607
- required: false,
33608
- multiline: true,
33609
- defaultValue: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
33610
- maxLength: 500
33611
- },
33612
- {
33613
- id: "membershipMessage",
33614
- type: "text",
33615
- label: "Membership enrollment message",
33616
- description: "Message when enrolled using a membership",
33617
- required: false,
33618
- multiline: true,
33619
- defaultValue: "Enrolled using your membership! Check your email for session details.",
33620
- maxLength: 500
33621
- },
33622
- {
33623
- id: "buttonText",
33624
- type: "text",
33625
- label: "Submit button text",
33626
- description: "Text for the enrollment submit button",
33627
- required: false,
33628
- multiline: false,
33629
- defaultValue: "Sign up",
33630
- maxLength: 40
33631
- },
33632
- createButtonVariantField()
33633
- ],
33634
- layout: [styledSection({
33635
- baseClass: "",
33636
- spacing: "spacious",
33637
- children: sectionContainer([
33638
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
33639
- richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
33640
- courseRegistration(withApiBindings({
33641
- subject: { $bind: {
33642
- from: "$root.subject",
33643
- fallback: null
33644
- } },
33645
- portalToken: { $bind: {
33646
- from: "$root.portalToken",
33647
- fallback: null
33648
- } },
33649
- showSessions: { $bind: { from: "content.showSessions" } },
33650
- showPrice: { $bind: { from: "content.showPrice" } },
33651
- showCapacity: { $bind: { from: "content.showCapacity" } },
33652
- showVenue: { $bind: { from: "content.showVenue" } },
33653
- successMessage: { $bind: { from: "content.successMessage" } },
33654
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
33655
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
33656
- buttonText: { $bind: {
33657
- from: "content.buttonText",
33658
- fallback: "Sign up"
33659
- } },
33660
- buttonVariant: { $bind: {
33661
- from: "content.buttonVariant",
33662
- fallback: "primary"
33663
- } },
33664
- courses: { $bind: { from: "data.courses" } },
33665
- stage: { $bind: {
33666
- from: "$root.previewStage",
33667
- fallback: "published"
33668
- } }
33669
- }))
33670
- ], { gap: "lg" })
33671
- })]
33672
- }),
33673
- runtime: courseRegistrationBlockRuntime,
33674
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
33675
- dataLoaders: { courses: {
33676
- endpoint: "listPublicWholeSeriesOfferings",
33677
- params: {
33678
- siteId: { $bind: { from: "$root.siteId" } },
33679
- limit: "50",
33680
- stage: { $bind: {
33681
- from: "$root.previewStage",
33682
- fallback: "published"
33683
- } }
33684
- },
33685
- mode: "server"
33686
- } }
33687
- };
33688
- //#endregion
33689
33513
  //#region ../blocks/src/system/blocks/event-details.ts
33690
33514
  /**
33691
33515
  * Event Details Block
@@ -33932,200 +33756,6 @@ const eventDetailsBlockDefinition = {
33932
33756
  mode: "server"
33933
33757
  } }
33934
33758
  };
33935
- const courseDetailsBlockDefinition = {
33936
- manifest: createBlockManifest({
33937
- id: "block.course-details",
33938
- version: "1.0.0",
33939
- title: "Course Details",
33940
- titleSource: "heading",
33941
- description: "Schedule, venue, price, and enrollment status for a course",
33942
- category: "content",
33943
- contentSource: { kind: "entries" },
33944
- tags: [
33945
- "courses",
33946
- "schedule",
33947
- "sessions",
33948
- "venue",
33949
- "pricing"
33950
- ],
33951
- icon: "GraduationCap",
33952
- styleTokens: {
33953
- background: "surface",
33954
- typography: "body",
33955
- spacing: "md"
33956
- },
33957
- behaviours: {
33958
- supportsThemeSwitching: true,
33959
- inlineEditing: false,
33960
- animation: false,
33961
- paletteHidden: false
33962
- },
33963
- additionalFields: [
33964
- {
33965
- id: "heading",
33966
- type: "text",
33967
- label: "Heading",
33968
- description: "Optional heading shown above course details",
33969
- required: false,
33970
- multiline: false,
33971
- defaultValue: "Course details"
33972
- },
33973
- {
33974
- id: "showTitle",
33975
- type: "boolean",
33976
- label: "Show course title",
33977
- required: false,
33978
- defaultValue: false,
33979
- ui: { intent: "display" }
33980
- },
33981
- {
33982
- id: "showDescription",
33983
- type: "boolean",
33984
- label: "Show course description",
33985
- description: "Render the course description from the bookings course record",
33986
- required: false,
33987
- defaultValue: false,
33988
- ui: { intent: "display" }
33989
- },
33990
- {
33991
- id: "showSessions",
33992
- type: "boolean",
33993
- label: "Show sessions",
33994
- required: false,
33995
- defaultValue: true,
33996
- ui: { intent: "display" }
33997
- },
33998
- {
33999
- id: "sessionsLimit",
34000
- type: "select",
34001
- label: "Sessions limit",
34002
- required: false,
34003
- multiple: false,
34004
- defaultValue: "10",
34005
- options: [
34006
- {
34007
- value: "3",
34008
- label: "3 sessions"
34009
- },
34010
- {
34011
- value: "5",
34012
- label: "5 sessions"
34013
- },
34014
- {
34015
- value: "10",
34016
- label: "10 sessions"
34017
- },
34018
- {
34019
- value: "all",
34020
- label: "All sessions"
34021
- }
34022
- ],
34023
- ui: { intent: "display" }
34024
- },
34025
- {
34026
- id: "showVenue",
34027
- type: "boolean",
34028
- label: "Show venue",
34029
- required: false,
34030
- defaultValue: true,
34031
- ui: { intent: "display" }
34032
- },
34033
- {
34034
- id: "showPrice",
34035
- type: "boolean",
34036
- label: "Show price",
34037
- required: false,
34038
- defaultValue: true,
34039
- ui: { intent: "display" }
34040
- },
34041
- {
34042
- id: "showCapacity",
34043
- type: "boolean",
34044
- label: "Show capacity",
34045
- required: false,
34046
- defaultValue: true,
34047
- ui: { intent: "display" }
34048
- },
34049
- {
34050
- id: "showEnrollmentStatus",
34051
- type: "boolean",
34052
- label: "Show enrollment status",
34053
- required: false,
34054
- defaultValue: true,
34055
- ui: { intent: "display" }
34056
- },
34057
- {
34058
- id: "showMembershipNote",
34059
- type: "boolean",
34060
- label: "Show membership note",
34061
- description: "Indicate when memberships can be used for free enrollment",
34062
- required: false,
34063
- defaultValue: true,
34064
- ui: { intent: "display" }
34065
- }
34066
- ],
34067
- layout: [styledSection({
34068
- baseClass: "",
34069
- spacing: "spacious",
34070
- children: sectionContainer([text({ as: "h2" }, bind("content.heading"), when("content.heading")), el("course-details", {
34071
- subject: { $bind: {
34072
- from: "$root.subject",
34073
- fallback: null
34074
- } },
34075
- courses: { $bind: { from: "data.courses" } },
34076
- showTitle: { $bind: {
34077
- from: "content.showTitle",
34078
- fallback: false
34079
- } },
34080
- showDescription: { $bind: {
34081
- from: "content.showDescription",
34082
- fallback: false
34083
- } },
34084
- showSessions: { $bind: {
34085
- from: "content.showSessions",
34086
- fallback: true
34087
- } },
34088
- sessionsLimit: { $bind: {
34089
- from: "content.sessionsLimit",
34090
- fallback: "10"
34091
- } },
34092
- showVenue: { $bind: {
34093
- from: "content.showVenue",
34094
- fallback: true
34095
- } },
34096
- showPrice: { $bind: {
34097
- from: "content.showPrice",
34098
- fallback: true
34099
- } },
34100
- showCapacity: { $bind: {
34101
- from: "content.showCapacity",
34102
- fallback: true
34103
- } },
34104
- showEnrollmentStatus: { $bind: {
34105
- from: "content.showEnrollmentStatus",
34106
- fallback: true
34107
- } },
34108
- showMembershipNote: { $bind: {
34109
- from: "content.showMembershipNote",
34110
- fallback: true
34111
- } }
34112
- })], { gap: "lg" })
34113
- })]
34114
- }),
34115
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
34116
- dataLoaders: { courses: {
34117
- endpoint: "listPublicWholeSeriesOfferings",
34118
- params: {
34119
- siteId: { $bind: { from: "$root.siteId" } },
34120
- limit: "50",
34121
- stage: { $bind: {
34122
- from: "$root.previewStage",
34123
- fallback: "published"
34124
- } }
34125
- },
34126
- mode: "server"
34127
- } }
34128
- };
34129
33759
  const eventSpotlightBlockDefinition = {
34130
33760
  manifest: createBlockManifest({
34131
33761
  id: "block.event-spotlight",
@@ -36680,7 +36310,7 @@ const EmptyState = ({ message = "No upcoming events scheduled.", className, hasA
36680
36310
  //#region ../blocks/src/system/runtime/nodes/events/shared/DateTimeTile.tsx
36681
36311
  /**
36682
36312
  * Shared tile content for displaying date and time range.
36683
- * Used by event-details "Other dates" and course-details "Sessions".
36313
+ * Used by event-details "Other dates".
36684
36314
  */
36685
36315
  function DateTimeTile({ startsAt, endsAt, timeZone }) {
36686
36316
  const { date, timeRange } = formatEventDateParts({
@@ -39209,7 +38839,7 @@ const offeringsPreviewManifest = createBlockManifest({
39209
38839
  fallback: "published"
39210
38840
  } },
39211
38841
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
39212
- courses: { $bind: { from: "data.courses" } },
38842
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
39213
38843
  ...offeringsPreviewEventDataBindings
39214
38844
  })
39215
38845
  ], { gap: "lg" }),
@@ -39226,7 +38856,7 @@ const offeringsPreviewBlockDefinition = {
39226
38856
  dataSchemas: {
39227
38857
  ...offeringsPreviewEventDataSchemas,
39228
38858
  routeCandidates: publicRouteCandidatesSchema.optional(),
39229
- courses: publicWholeSeriesOfferingsArraySchema.optional()
38859
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
39230
38860
  },
39231
38861
  dataLoaders: {
39232
38862
  ...offeringsPreviewEventDataLoaders,
@@ -39235,7 +38865,7 @@ const offeringsPreviewBlockDefinition = {
39235
38865
  params: {},
39236
38866
  mode: "server"
39237
38867
  },
39238
- courses: {
38868
+ wholeSeriesOfferings: {
39239
38869
  endpoint: "listPublicWholeSeriesOfferings",
39240
38870
  params: {
39241
38871
  siteId: { $bind: { from: "$root.siteId" } },
@@ -44317,22 +43947,6 @@ const systemBlockDefinitions = [
44317
43947
  weight: "standard"
44318
43948
  })]
44319
43949
  })),
44320
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
44321
- flow: conversionFlow,
44322
- layoutProfiles: [layoutProfile({
44323
- variantKey: "default",
44324
- family: "form",
44325
- weight: "standard"
44326
- })]
44327
- })),
44328
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
44329
- flow: offeringsFlow,
44330
- layoutProfiles: [layoutProfile({
44331
- variantKey: "default",
44332
- family: "stack",
44333
- weight: "standard"
44334
- })]
44335
- })),
44336
43950
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
44337
43951
  flow: offeringsFlow,
44338
43952
  layoutProfiles: [layoutProfile({
@@ -47095,7 +46709,7 @@ function emptySelection(timeZone) {
47095
46709
  timeZone
47096
46710
  };
47097
46711
  }
47098
- function parseLimit$1(value, fallback) {
46712
+ function parseLimit(value, fallback) {
47099
46713
  if (value === "all") return Number.MAX_SAFE_INTEGER;
47100
46714
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
47101
46715
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -47178,7 +46792,7 @@ function selectEventDetails(args) {
47178
46792
  subject: args.subject
47179
46793
  }));
47180
46794
  const occurrenceContext = args.occurrenceContext ?? null;
47181
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
46795
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
47182
46796
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
47183
46797
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
47184
46798
  if (!candidate) return emptySelection(timeZone);
@@ -47254,8 +46868,8 @@ function resolveEventDetailsPresentation(input) {
47254
46868
  };
47255
46869
  }
47256
46870
  //#endregion
47257
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
47258
- function CoursePricingDisplay({ pricing, acceptedItems }) {
46871
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
46872
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
47259
46873
  return /* @__PURE__ */ jsxs("div", {
47260
46874
  className: "rb-mt-6",
47261
46875
  children: [
@@ -47267,7 +46881,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
47267
46881
  className: "rb-flex rb-flex-col rb-gap-2",
47268
46882
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
47269
46883
  option.name,
47270
- ": ",
46884
+ ":",
46885
+ " ",
47271
46886
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
47272
46887
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
47273
46888
  className: "rb-caption status-muted",
@@ -47288,7 +46903,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
47288
46903
  const label = preview.publicLabel.trim() || "Discount";
47289
46904
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
47290
46905
  }
47291
- function TeamMemberName$1({ name, profilePath }) {
46906
+ function TeamMemberName({ name, profilePath }) {
47292
46907
  return profilePath ? /* @__PURE__ */ jsx("a", {
47293
46908
  href: profilePath,
47294
46909
  className: "rb-hover-opacity-80",
@@ -47325,7 +46940,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
47325
46940
  children: "No registration required - just show up"
47326
46941
  })]
47327
46942
  });
47328
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
46943
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
47329
46944
  pricing: coursePricing,
47330
46945
  acceptedItems: [...acceptedItems]
47331
46946
  });
@@ -47400,7 +47015,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
47400
47015
  children: "With"
47401
47016
  }), /* @__PURE__ */ jsx("div", {
47402
47017
  className: "rb-flex rb-flex-col rb-gap-3",
47403
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
47018
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
47404
47019
  name: member.name,
47405
47020
  profilePath: member.profilePath
47406
47021
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -47560,9 +47175,13 @@ function EventDetailsSSR(props) {
47560
47175
  const { blockId, occurrenceContext = null, subject, events = null, className, children } = props;
47561
47176
  const nowIso = (/* @__PURE__ */ new Date()).toISOString();
47562
47177
  const normalizedSubject = normalizeEventRegistrationPageSurfaceSubject(subject);
47178
+ const scopedEvents = events === null ? null : resolveEventRegistrationScopedEvents(events, {
47179
+ occurrenceContext,
47180
+ subject: normalizedSubject
47181
+ });
47563
47182
  const presentation = resolveEventDetailsPresentation({
47564
47183
  ...props,
47565
- events,
47184
+ events: scopedEvents,
47566
47185
  occurrenceContext,
47567
47186
  subject: normalizedSubject,
47568
47187
  nowIso
@@ -47575,7 +47194,7 @@ function EventDetailsSSR(props) {
47575
47194
  /* @__PURE__ */ jsx(IslandPropsScript, { value: {
47576
47195
  occurrenceContext,
47577
47196
  subject: normalizedSubject,
47578
- events,
47197
+ events: scopedEvents,
47579
47198
  showVenue: presentation.showVenue,
47580
47199
  showMap: presentation.showMap,
47581
47200
  showOtherDates: presentation.showOtherDates,
@@ -47679,352 +47298,6 @@ function LocationMapSSR(props) {
47679
47298
  });
47680
47299
  }
47681
47300
  //#endregion
47682
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
47683
- /**
47684
- * Resolves native run-page ownership without falling back to entry or slug
47685
- * coincidence when a page-surface subject is present but invalid.
47686
- */
47687
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
47688
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
47689
- const parsed = parseEventPageSurfaceSubject(subjectValue);
47690
- if (!parsed.ok) return {
47691
- kind: "unsupported",
47692
- reason: parsed.error.kind
47693
- };
47694
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
47695
- const allowedSeriesIds = new Set(seriesIds);
47696
- return {
47697
- kind: "scoped",
47698
- subject: parsed.value,
47699
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
47700
- };
47701
- }
47702
- function eventSeriesIdsForSubject(subject) {
47703
- switch (subject.kind) {
47704
- case "eventSeries": return [subject.eventSeriesId];
47705
- case "eventOffering": return subject.availableEventSeriesIds;
47706
- default: return assertNever$23(subject);
47707
- }
47708
- }
47709
- //#endregion
47710
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
47711
- /** Temporary Course-block adapter over canonical Event run scoping. */
47712
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
47713
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
47714
- return scope.kind === "scoped" ? {
47715
- kind: "scoped",
47716
- subject: scope.subject,
47717
- courses: scope.runs
47718
- } : scope;
47719
- }
47720
- //#endregion
47721
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
47722
- function selectCourseDetails(args) {
47723
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
47724
- if (pageSurfaceScope.kind === "unsupported") return {
47725
- mode: "unsupportedPageSurfaceSubject",
47726
- selected: null,
47727
- scoped: []
47728
- };
47729
- if (pageSurfaceScope.kind === "scoped") {
47730
- const scoped = [...pageSurfaceScope.courses];
47731
- return {
47732
- mode: "pageSurfaceSubject",
47733
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
47734
- scoped
47735
- };
47736
- }
47737
- return {
47738
- mode: "unsupportedPageSurfaceSubject",
47739
- selected: null,
47740
- scoped: []
47741
- };
47742
- }
47743
- //#endregion
47744
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
47745
- function toValidDate(value) {
47746
- if (!value) return null;
47747
- const date = new Date(value);
47748
- return Number.isNaN(date.getTime()) ? null : date;
47749
- }
47750
- function getCourseDateRange(course) {
47751
- const datedSessions = (course.sessions ?? []).map((session) => ({
47752
- session,
47753
- start: toValidDate(session.startsAt),
47754
- end: toValidDate(session.endsAt)
47755
- })).filter((value) => value.start !== null || value.end !== null);
47756
- if (datedSessions.length === 0) return {
47757
- start: null,
47758
- end: null,
47759
- startIso: null,
47760
- endIso: null,
47761
- timeZone: null
47762
- };
47763
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
47764
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
47765
- return {
47766
- start: startSession?.start ?? null,
47767
- end: endSession?.end ?? null,
47768
- startIso: startSession?.session.startsAt ?? null,
47769
- endIso: endSession?.session.endsAt ?? null,
47770
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
47771
- };
47772
- }
47773
- function formatCourseDateRange(range) {
47774
- const { startIso, endIso, timeZone } = range;
47775
- const dateFormat = {
47776
- month: "numeric",
47777
- day: "numeric",
47778
- year: "numeric"
47779
- };
47780
- const effectiveTimeZone = toBookingTimeZone(timeZone);
47781
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
47782
- startsAt: iso,
47783
- timeZone: effectiveTimeZone
47784
- }), dateFormat);
47785
- const formatRangeDateOnly = (startsAt, endsAt) => {
47786
- const startText = formatSingleDate(startsAt);
47787
- const endText = formatSingleDate(endsAt);
47788
- return startText === endText ? startText : `${startText} – ${endText}`;
47789
- };
47790
- if (!startIso && !endIso) return "Dates TBD";
47791
- if (startIso && !endIso) return formatSingleDate(startIso);
47792
- if (!startIso && endIso) return formatSingleDate(endIso);
47793
- if (!startIso || !endIso) return "Dates TBD";
47794
- return formatRangeDateOnly(startIso, endIso);
47795
- }
47796
- //#endregion
47797
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
47798
- function TeamMemberName({ name, profilePath }) {
47799
- return profilePath ? /* @__PURE__ */ jsx("a", {
47800
- href: profilePath,
47801
- className: "rb-hover-opacity-80",
47802
- children: /* @__PURE__ */ jsx("strong", { children: name })
47803
- }) : /* @__PURE__ */ jsx("strong", { children: name });
47804
- }
47805
- function parseLimit(value, fallback) {
47806
- if (value === "all") return "all";
47807
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
47808
- return Number.isFinite(n) && n > 0 ? n : fallback;
47809
- }
47810
- function CourseDetailsView(props) {
47811
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
47812
- if (!course) return /* @__PURE__ */ jsx("p", {
47813
- className: "rb-caption status-muted",
47814
- children: emptyMessage
47815
- });
47816
- const pricing = resolveWholeSeriesPricingState(course);
47817
- const sessionLimit = parseLimit(sessionsLimit, 10);
47818
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
47819
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
47820
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
47821
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
47822
- const teamMembers = course.teamMembers ?? [];
47823
- return /* @__PURE__ */ jsxs("div", {
47824
- className: "rb-flex rb-flex-col rb-gap-6",
47825
- children: [
47826
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
47827
- /* @__PURE__ */ jsxs("div", {
47828
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
47829
- children: [/* @__PURE__ */ jsxs("div", {
47830
- className: "rb-flex rb-flex-col rb-gap-4",
47831
- children: [
47832
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47833
- className: "rb-label rb-mb-2",
47834
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
47835
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
47836
- className: "rb-flex rb-flex-col rb-gap-2",
47837
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
47838
- option.name,
47839
- ": ",
47840
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
47841
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
47842
- className: "rb-caption status-muted",
47843
- children: option.description
47844
- }) : null] }, option.id))
47845
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
47846
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47847
- className: "rb-label rb-mb-2",
47848
- children: "Spots"
47849
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
47850
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47851
- className: "rb-label rb-mb-2",
47852
- children: "Membership"
47853
- }), /* @__PURE__ */ jsx("p", {
47854
- className: "rb-caption status-muted",
47855
- children: "Eligible memberships can be used for free enrollment"
47856
- })] }),
47857
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47858
- className: "rb-label rb-mb-2",
47859
- children: "With"
47860
- }), /* @__PURE__ */ jsx("div", {
47861
- className: "rb-flex rb-flex-col rb-gap-3",
47862
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
47863
- name: teamMember.name,
47864
- profilePath: teamMember.profilePath
47865
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
47866
- className: "rb-caption status-muted",
47867
- children: teamMember.summary
47868
- })] }, teamMember.id))
47869
- })] })
47870
- ]
47871
- }), /* @__PURE__ */ jsxs("div", {
47872
- className: "rb-flex rb-flex-col rb-gap-4",
47873
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
47874
- /* @__PURE__ */ jsx("div", {
47875
- className: "rb-label rb-mb-2",
47876
- children: "Venue"
47877
- }),
47878
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
47879
- course.venue.address && /* @__PURE__ */ jsx("p", {
47880
- className: "rb-caption status-muted",
47881
- children: course.venue.address
47882
- })
47883
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47884
- className: "rb-label rb-mb-2",
47885
- children: "Enrollment"
47886
- }), /* @__PURE__ */ jsx("p", {
47887
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
47888
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
47889
- })] })]
47890
- })]
47891
- }),
47892
- descriptionDoc && /* @__PURE__ */ jsx("div", {
47893
- className: "cd-description",
47894
- children: /* @__PURE__ */ jsx(RichText$2, { doc: descriptionDoc })
47895
- }),
47896
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
47897
- /* @__PURE__ */ jsx("div", {
47898
- className: "rb-label",
47899
- children: "Sessions"
47900
- }),
47901
- /* @__PURE__ */ jsx("div", {
47902
- className: "rb-mt-2 rb-tiles-grid",
47903
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
47904
- className: "rb-tile",
47905
- children: /* @__PURE__ */ jsx(DateTimeTile, {
47906
- startsAt: s.startsAt,
47907
- endsAt: s.endsAt
47908
- })
47909
- }, s.id))
47910
- }),
47911
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
47912
- className: "cd-sessions__more",
47913
- children: [
47914
- "Showing ",
47915
- visibleSessions.length,
47916
- " of ",
47917
- sortedSessions.length,
47918
- " sessions."
47919
- ]
47920
- })
47921
- ] })
47922
- ]
47923
- });
47924
- }
47925
- //#endregion
47926
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
47927
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
47928
- const selection = selectCourseDetails({
47929
- courses: courses ?? null,
47930
- subject
47931
- });
47932
- const parsedSubject = parseEventPageSurfaceSubject(subject);
47933
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
47934
- const now = /* @__PURE__ */ new Date();
47935
- const scopedWithRange = selection.scoped.map((c) => ({
47936
- course: c,
47937
- range: getCourseDateRange(c)
47938
- }));
47939
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
47940
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
47941
- });
47942
- 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;
47943
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
47944
- return /* @__PURE__ */ jsxs("div", {
47945
- className: `course-details ${className ?? ""}`.trim(),
47946
- "data-block": "course-details",
47947
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
47948
- course: selection.selected,
47949
- showTitle,
47950
- showDescription,
47951
- showSessions,
47952
- sessionsLimit,
47953
- showVenue,
47954
- showPrice,
47955
- showCapacity,
47956
- showEnrollmentStatus,
47957
- showMembershipNote
47958
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
47959
- className: "rb-flex rb-flex-col rb-gap-3",
47960
- children: [
47961
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47962
- className: "rb-label rb-mb-2",
47963
- children: "Upcoming runs"
47964
- }), /* @__PURE__ */ jsx("p", {
47965
- className: "rb-caption status-muted",
47966
- children: "Choose a run to see sessions and details."
47967
- })] }),
47968
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
47969
- className: "rb-flex rb-flex-col rb-gap-2",
47970
- children: nonPastRuns.map(({ course, range }) => {
47971
- const start = range.start;
47972
- const end = range.end;
47973
- const isInProgress = Boolean(start && end && start <= now && end > now);
47974
- return /* @__PURE__ */ jsx("li", {
47975
- className: "rb-rounded-md rb-border rb-p-3",
47976
- children: /* @__PURE__ */ jsx("div", {
47977
- className: "rb-flex rb-flex-col rb-gap-1",
47978
- children: /* @__PURE__ */ jsxs("div", {
47979
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
47980
- children: [/* @__PURE__ */ jsxs("div", {
47981
- className: "rb-min-w-0",
47982
- children: [/* @__PURE__ */ jsx("div", {
47983
- className: "rb-truncate",
47984
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
47985
- }), /* @__PURE__ */ jsx("div", {
47986
- className: "rb-caption status-muted",
47987
- children: formatCourseDateRange(range)
47988
- })]
47989
- }), /* @__PURE__ */ jsx("div", {
47990
- className: "rb-caption status-muted rb-shrink-0",
47991
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
47992
- })]
47993
- })
47994
- })
47995
- }, course.eventSeriesId);
47996
- })
47997
- }) : /* @__PURE__ */ jsx("p", {
47998
- className: "rb-caption status-muted",
47999
- children: "No upcoming runs."
48000
- }),
48001
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
48002
- className: "rb-caption status-muted",
48003
- children: [
48004
- "Last run: ",
48005
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
48006
- " (",
48007
- formatCourseDateRange(lastPastRun.range),
48008
- ")"
48009
- ]
48010
- }) : null
48011
- ]
48012
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
48013
- course: null,
48014
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
48015
- showTitle,
48016
- showDescription,
48017
- showSessions,
48018
- sessionsLimit,
48019
- showVenue,
48020
- showPrice,
48021
- showCapacity,
48022
- showEnrollmentStatus,
48023
- showMembershipNote
48024
- }), children]
48025
- });
48026
- }
48027
- //#endregion
48028
47301
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
48029
47302
  /**
48030
47303
  * EventSpotlight Component
@@ -48228,7 +47501,7 @@ function deriveCourseScheduleSummary(course) {
48228
47501
  sessionCount: sessions.length
48229
47502
  };
48230
47503
  }
48231
- function nextCourseSessionStart(course) {
47504
+ function nextWholeSeriesSessionStart(course) {
48232
47505
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
48233
47506
  }
48234
47507
  function occurrenceFromEvent(event) {
@@ -48382,7 +47655,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
48382
47655
  function buildItemDataMap(props) {
48383
47656
  const routeCandidates = props.routeCandidates?.routes ?? [];
48384
47657
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
48385
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
47658
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
48386
47659
  }
48387
47660
  function eventDataFromMaybeArray(events) {
48388
47661
  return events ? {
@@ -48436,8 +47709,8 @@ function renderOfferingGroupItems(presentation, items, options) {
48436
47709
  }
48437
47710
  }
48438
47711
  function compareCoursesByNextSession(left, right) {
48439
- const leftStart = nextCourseSessionStart(left);
48440
- const rightStart = nextCourseSessionStart(right);
47712
+ const leftStart = nextWholeSeriesSessionStart(left);
47713
+ const rightStart = nextWholeSeriesSessionStart(right);
48441
47714
  if (leftStart === null) return rightStart === null ? 0 : 1;
48442
47715
  if (rightStart === null) return -1;
48443
47716
  return leftStart.localeCompare(rightStart);
@@ -49376,45 +48649,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
49376
48649
  });
49377
48650
  }
49378
48651
  //#endregion
49379
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
49380
- /**
49381
- * Server-safe placeholder for course registration.
49382
- * Provides a static container for island hydration without importing client hooks.
49383
- */
49384
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
49385
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
49386
- siteId,
49387
- apiBaseUrl,
49388
- portalToken,
49389
- subject,
49390
- courses,
49391
- className,
49392
- showSessions,
49393
- showPrice,
49394
- showCapacity,
49395
- showVenue,
49396
- successMessage,
49397
- waitlistMessage,
49398
- membershipMessage,
49399
- buttonText,
49400
- buttonVariant,
49401
- stage
49402
- });
49403
- return /* @__PURE__ */ jsxs("div", {
49404
- className: `course-registration ${className ?? ""}`.trim(),
49405
- "data-block": "course-registration",
49406
- ...getIslandRootProps("course-registration", blockId),
49407
- children: [
49408
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
49409
- /* @__PURE__ */ jsx("div", {
49410
- className: "course-registration__summary",
49411
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
49412
- }),
49413
- children
49414
- ]
49415
- });
49416
- }
49417
- //#endregion
49418
48652
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
49419
48653
  function GiftingSSR({ blockId, ...rest }) {
49420
48654
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -50900,7 +50134,6 @@ const runtimeBackedBlockServerEntries = {
50900
50134
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
50901
50135
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
50902
50136
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
50903
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
50904
50137
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
50905
50138
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
50906
50139
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -50933,7 +50166,6 @@ const serverComponentRegistry = {
50933
50166
  "booking-form": BookingFormSSR,
50934
50167
  "event-details": EventDetailsSSR,
50935
50168
  "location-map": LocationMapSSR,
50936
- "course-details": CourseDetailsSSR,
50937
50169
  "event-spotlight": EventSpotlight,
50938
50170
  "event-combined": EventCombinedSSR,
50939
50171
  "offerings-preview": OfferingsPreviewNode,
@@ -55388,176 +54620,6 @@ ${root} {
55388
54620
  `;
55389
54621
  }
55390
54622
  //#endregion
55391
- //#region ../theme-core/src/blocks/vars/course-details.ts
55392
- /**
55393
- * Generate CSS variables for the course-details block.
55394
- *
55395
- * Variables defined:
55396
- * - Enrollment status colors (open/closed)
55397
- * - Capacity indicator colors (available/low/full)
55398
- * - Price display colors (free indicator)
55399
- */
55400
- function generateCourseDetailsVars({ themeId }) {
55401
- return `
55402
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
55403
- /* Enrollment status */
55404
- --cd-enrollment-open-text: rgb(var(--tb-success));
55405
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
55406
-
55407
- /* Capacity indicator */
55408
- --cd-capacity-available-text: rgb(var(--tb-success));
55409
- --cd-capacity-low-text: rgb(var(--tb-warning));
55410
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
55411
-
55412
- /* Price styling */
55413
- --cd-price-free-text: rgb(var(--tb-success));
55414
- }
55415
- `;
55416
- }
55417
- //#endregion
55418
- //#region ../theme-core/src/blocks/vars/course-registration.ts
55419
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
55420
- /* Temporary bridge while persisted Course blocks render the Event-owned
55421
- whole-series registration runtime. Removed with the Course block. */
55422
- --er-step-active: var(--cr-step-active);
55423
- --er-step-inactive: var(--cr-step-inactive);
55424
- --er-step-completed: var(--cr-step-completed);
55425
- --er-step-text: var(--cr-step-text);
55426
- --er-step-text-active: var(--cr-step-text-active);
55427
- --er-step-connector: var(--cr-step-connector);
55428
- --er-step-title-size: var(--cr-step-title-size);
55429
- --er-success-bg: var(--cr-success-bg);
55430
- --er-success-text: var(--cr-success-text);
55431
- --er-error-bg: var(--cr-error-bg);
55432
- --er-error-text: var(--cr-error-text);
55433
- --er-waitlist-bg: var(--cr-waitlist-bg);
55434
- --er-waitlist-text: var(--cr-waitlist-text);
55435
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
55436
- --er-capacity-available-text: var(--cr-capacity-available-text);
55437
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
55438
- --er-capacity-low-text: var(--cr-capacity-low-text);
55439
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
55440
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
55441
- --er-border: var(--cr-border);
55442
- --er-border-hover: var(--cr-border-hover);
55443
- --er-border-selected: var(--cr-border-selected);
55444
- --er-border-error: var(--cr-border-error);
55445
- --er-focus-ring: var(--cr-focus-ring);
55446
- --er-required: var(--cr-required);
55447
- --er-payment-border: var(--cr-payment-border);
55448
- --er-payment-border-hover: var(--cr-payment-border-hover);
55449
- --er-payment-border-selected: var(--cr-payment-border-selected);
55450
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
55451
- --er-check-bg: var(--cr-check-bg);
55452
- --er-check-text: var(--cr-check-text);
55453
- --er-summary-bg: var(--cr-summary-bg);
55454
- --er-summary-border: var(--cr-summary-border);
55455
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
55456
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
55457
- `;
55458
- /**
55459
- * Generate CSS variables for the course-registration block.
55460
- *
55461
- * Variables defined:
55462
- * - Step indicator colors (active, inactive, completed, text, connector)
55463
- * - Success/error/waitlist state backgrounds and text colors
55464
- * - Capacity badge colors (available, low, sold-out)
55465
- * - Border colors for various interaction states
55466
- * - Input focus and required marker styling
55467
- * - Payment option card styling
55468
- * - Checkmark indicator colors
55469
- * - Summary styling
55470
- */
55471
- function generateCourseRegistrationVars({ themeId }) {
55472
- return `
55473
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
55474
- /* Step indicator */
55475
- --cr-step-active: rgb(var(--tb-primary));
55476
- --cr-step-inactive: rgb(var(--tb-mutedText));
55477
- --cr-step-completed: rgb(var(--tb-success));
55478
- --cr-step-text: rgb(255 255 255);
55479
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
55480
- --cr-step-connector: rgba(var(--tb-border), 0.5);
55481
-
55482
- /* Step title */
55483
- --cr-step-title-size: 1.5rem;
55484
-
55485
- /* State backgrounds with alpha */
55486
- --cr-success-bg: rgba(var(--tb-success), 0.1);
55487
- --cr-success-text: rgb(var(--tb-success));
55488
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
55489
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
55490
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
55491
- --cr-waitlist-text: rgb(var(--tb-warning));
55492
-
55493
- /* Capacity badges */
55494
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
55495
- --cr-capacity-available-text: rgb(var(--tb-success));
55496
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
55497
- --cr-capacity-low-text: rgb(var(--tb-warning));
55498
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
55499
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
55500
-
55501
- /* Borders */
55502
- --cr-border: rgb(var(--tb-border));
55503
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
55504
- --cr-border-selected: rgb(var(--tb-primary));
55505
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
55506
-
55507
- /* Input focus */
55508
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
55509
-
55510
- /* Required marker */
55511
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
55512
-
55513
- /* Payment option cards */
55514
- --cr-payment-border: rgb(var(--tb-border));
55515
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
55516
- --cr-payment-border-selected: rgb(var(--tb-primary));
55517
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
55518
-
55519
- /* Checkmark indicator */
55520
- --cr-check-bg: rgb(var(--tb-primary));
55521
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
55522
-
55523
- /* Summary */
55524
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
55525
- --cr-summary-border: rgb(var(--tb-border));
55526
-
55527
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
55528
-
55529
- /* Shared registration-surface mappings (issue 1174).
55530
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
55531
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
55532
- keep working unchanged. */
55533
- --rb-reg-radius: var(--rb-block-radius);
55534
- --rb-reg-border: var(--cr-border);
55535
- --rb-reg-border-hover: var(--cr-border-hover);
55536
- --rb-reg-border-selected: var(--cr-border-selected);
55537
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
55538
- --rb-reg-option-bg: rgb(var(--tb-background));
55539
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
55540
- --rb-reg-surface-bg: rgb(var(--tb-surface));
55541
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
55542
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
55543
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
55544
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
55545
- --rb-reg-check-bg: var(--cr-check-bg);
55546
- --rb-reg-check-text: var(--cr-check-text);
55547
- --rb-reg-step-active: var(--cr-step-active);
55548
- --rb-reg-step-completed: var(--cr-step-completed);
55549
- --rb-reg-step-inactive: var(--cr-step-inactive);
55550
- --rb-reg-step-text: var(--cr-step-text);
55551
- --rb-reg-step-text-active: var(--cr-step-text-active);
55552
- --rb-reg-step-connector: var(--cr-step-connector);
55553
- --rb-reg-summary-bg: var(--cr-summary-bg);
55554
- --rb-reg-summary-border: var(--cr-summary-border);
55555
- --rb-reg-focus-ring: var(--cr-focus-ring);
55556
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
55557
- }
55558
- `;
55559
- }
55560
- //#endregion
55561
54623
  //#region ../theme-core/src/blocks/registry.ts
55562
54624
  /**
55563
54625
  * Global registry of block var generators.
@@ -55572,8 +54634,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
55572
54634
  blockVarRegistry.set("form", generateFormBlockVars);
55573
54635
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
55574
54636
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
55575
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
55576
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
55577
54637
  /**
55578
54638
  * Generate all Tier 3 block-specific CSS variables.
55579
54639
  *
@@ -60465,7 +59525,7 @@ const containerResponsiveThemeCss = `/*
60465
59525
  * Shared: Registration Surface (issue 1174)
60466
59526
  *
60467
59527
  * Wizard-surface primitives shared by the event-registration,
60468
- * course-registration and appointment-booking blocks: surface container,
59528
+ * appointment-booking blocks: surface container,
60469
59529
  * selectable option cards, step indicator, wizard actions row, on-surface
60470
59530
  * text ramp, layout stacks, summary box and skeleton shell lines.
60471
59531
  *
@@ -60508,7 +59568,7 @@ const containerResponsiveThemeCss = `/*
60508
59568
  }
60509
59569
 
60510
59570
  /* Surface container */
60511
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59571
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
60512
59572
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
60513
59573
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
60514
59574
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -60538,7 +59598,7 @@ const containerResponsiveThemeCss = `/*
60538
59598
  *
60539
59599
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
60540
59600
  * pairing is pinned by registration-surface-action-reset.test.ts. */
60541
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59601
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
60542
59602
  --rb-action-primary-base-background-color: initial;
60543
59603
  --rb-action-primary-base-background-image: initial;
60544
59604
  --rb-action-primary-base-color: initial;
@@ -60646,7 +59706,7 @@ const containerResponsiveThemeCss = `/*
60646
59706
  }
60647
59707
 
60648
59708
  /* Selectable option card */
60649
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
59709
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
60650
59710
  position: relative;
60651
59711
  display: flex;
60652
59712
  align-items: flex-start;
@@ -60663,34 +59723,34 @@ const containerResponsiveThemeCss = `/*
60663
59723
  box-shadow var(--rb-block-transition, 150ms) ease;
60664
59724
  }
60665
59725
 
60666
- :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"]) {
59726
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
60667
59727
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
60668
59728
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
60669
59729
  }
60670
59730
 
60671
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
59731
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
60672
59732
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
60673
59733
  outline-offset: 2px;
60674
59734
  }
60675
59735
 
60676
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
59736
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
60677
59737
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
60678
59738
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
60679
59739
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
60680
59740
  }
60681
59741
 
60682
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
59742
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
60683
59743
  cursor: not-allowed;
60684
59744
  opacity: 0.7;
60685
59745
  }
60686
59746
 
60687
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
59747
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
60688
59748
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
60689
59749
  box-shadow: none;
60690
59750
  }
60691
59751
 
60692
59752
  /* Check indicator */
60693
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
59753
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
60694
59754
  flex-shrink: 0;
60695
59755
  width: 1.25rem;
60696
59756
  height: 1.25rem;
@@ -60701,18 +59761,18 @@ const containerResponsiveThemeCss = `/*
60701
59761
  justify-content: center;
60702
59762
  }
60703
59763
 
60704
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
59764
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
60705
59765
  width: 0.75rem;
60706
59766
  height: 0.75rem;
60707
59767
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60708
59768
  }
60709
59769
 
60710
59770
  /* Step indicator */
60711
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
59771
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
60712
59772
  margin-bottom: 1.5rem;
60713
59773
  }
60714
59774
 
60715
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
59775
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
60716
59776
  display: flex;
60717
59777
  align-items: center;
60718
59778
  justify-content: center;
@@ -60722,13 +59782,13 @@ const containerResponsiveThemeCss = `/*
60722
59782
  margin: 0;
60723
59783
  }
60724
59784
 
60725
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
59785
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
60726
59786
  display: flex;
60727
59787
  align-items: center;
60728
59788
  gap: 0.5rem;
60729
59789
  }
60730
59790
 
60731
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
59791
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
60732
59792
  width: 1.75rem;
60733
59793
  height: 1.75rem;
60734
59794
  border-radius: 50%;
@@ -60742,47 +59802,47 @@ const containerResponsiveThemeCss = `/*
60742
59802
  transition: background-color var(--rb-block-transition, 150ms) ease;
60743
59803
  }
60744
59804
 
60745
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
59805
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
60746
59806
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
60747
59807
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60748
59808
  }
60749
59809
 
60750
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
59810
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
60751
59811
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
60752
59812
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60753
59813
  }
60754
59814
 
60755
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
59815
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
60756
59816
  width: 0.75rem;
60757
59817
  height: 0.75rem;
60758
59818
  }
60759
59819
 
60760
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
59820
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
60761
59821
  width: 2rem;
60762
59822
  height: 2px;
60763
59823
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
60764
59824
  }
60765
59825
 
60766
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59826
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60767
59827
  font-size: 0.75rem;
60768
59828
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60769
59829
  display: none;
60770
59830
  }
60771
59831
 
60772
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
59832
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
60773
59833
  font-weight: 500;
60774
59834
  }
60775
59835
 
60776
59836
  @container rb-site (min-width: 640px) {
60777
59837
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
60778
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59838
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60779
59839
  display: inline;
60780
59840
  }
60781
59841
  }
60782
59842
  }
60783
59843
 
60784
59844
  /* Wizard actions row */
60785
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
59845
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
60786
59846
  display: flex;
60787
59847
  justify-content: space-between;
60788
59848
  align-items: center;
@@ -60791,56 +59851,56 @@ const containerResponsiveThemeCss = `/*
60791
59851
  }
60792
59852
 
60793
59853
  /* When there's only one action (no back button), push it to the right */
60794
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
59854
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
60795
59855
  margin-inline-start: auto;
60796
59856
  }
60797
59857
 
60798
59858
  /* On-surface text ramp */
60799
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
59859
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
60800
59860
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60801
59861
  }
60802
59862
 
60803
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
59863
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
60804
59864
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
60805
59865
  }
60806
59866
 
60807
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
59867
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
60808
59868
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
60809
59869
  }
60810
59870
 
60811
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
59871
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
60812
59872
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
60813
59873
  }
60814
59874
 
60815
59875
  /* Layout stacks */
60816
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
59876
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
60817
59877
  display: flex;
60818
59878
  flex-direction: column;
60819
59879
  gap: 1rem;
60820
59880
  }
60821
59881
 
60822
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
59882
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
60823
59883
  gap: 0.75rem;
60824
59884
  }
60825
59885
 
60826
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
59886
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
60827
59887
  display: flex;
60828
59888
  align-items: center;
60829
59889
  gap: 1rem;
60830
59890
  }
60831
59891
 
60832
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
59892
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
60833
59893
  justify-content: space-between;
60834
59894
  align-items: flex-start;
60835
59895
  }
60836
59896
 
60837
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
59897
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
60838
59898
  display: grid;
60839
59899
  gap: 0.75rem;
60840
59900
  }
60841
59901
 
60842
59902
  /* Summary box */
60843
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
59903
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
60844
59904
  padding: 1rem;
60845
59905
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
60846
59906
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -60848,7 +59908,7 @@ const containerResponsiveThemeCss = `/*
60848
59908
  }
60849
59909
 
60850
59910
  /* Skeleton shell lines */
60851
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
59911
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
60852
59912
  height: 0.75rem;
60853
59913
  border-radius: 9999px;
60854
59914
  background: linear-gradient(
@@ -60859,24 +59919,24 @@ const containerResponsiveThemeCss = `/*
60859
59919
  );
60860
59920
  }
60861
59921
 
60862
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
59922
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
60863
59923
  width: min(26rem, 82%);
60864
59924
  }
60865
59925
 
60866
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
59926
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
60867
59927
  width: min(19rem, 68%);
60868
59928
  }
60869
59929
 
60870
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
59930
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
60871
59931
  width: min(14rem, 52%);
60872
59932
  }
60873
59933
 
60874
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
59934
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
60875
59935
  width: min(10rem, 42%);
60876
59936
  }
60877
59937
 
60878
59938
  /* Skeleton block (rectangular placeholder, pulses) */
60879
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59939
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60880
59940
  height: 2.5rem;
60881
59941
  width: 100%;
60882
59942
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -60894,7 +59954,7 @@ const containerResponsiveThemeCss = `/*
60894
59954
  }
60895
59955
 
60896
59956
  @media (prefers-reduced-motion: reduce) {
60897
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59957
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60898
59958
  animation: none;
60899
59959
  }
60900
59960
  }
@@ -67276,1658 +66336,347 @@ const containerResponsiveThemeCss = `/*
67276
66336
  cursor: not-allowed;
67277
66337
  }
67278
66338
 
67279
- /*
67280
- * Course Details (runtime node)
67281
- * Minimal rules - most styling via rb-* utilities
66339
+ /* =============================================================================
66340
+ * Block: Newsletter Signup
66341
+ * =============================================================================
67282
66342
  */
67283
66343
 
67284
- :where(.theme-scope) .course-details {
67285
- width: 100%;
67286
- max-width: 56.25rem; /* 900px */
67287
- margin-inline: auto;
66344
+ /* Newsletter copy styling */
66345
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
66346
+ font-size: 1.5rem;
66347
+ font-weight: 600;
67288
66348
  }
67289
66349
 
67290
- /* Description prose wrapper */
67291
- :where(.theme-scope) .course-details .cd-description {
67292
- margin-top: 1rem;
66350
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
66351
+ font-size: 1rem;
66352
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66353
+ opacity: 0.85;
67293
66354
  }
67294
66355
 
67295
- /* "Showing X of Y" text */
67296
- :where(.theme-scope) .course-details .cd-sessions__more {
67297
- margin-top: 0.5rem;
67298
- opacity: 0.7;
67299
- font-size: 0.875rem;
66356
+ /* Newsletter form container */
66357
+ :where(.theme-scope) .newsletter-form {
66358
+ width: 100%;
66359
+ max-width: 32rem;
66360
+ margin-left: auto;
66361
+ margin-right: auto;
67300
66362
  }
67301
66363
 
67302
- /* Enrollment status colors (using Tier 3 vars) */
67303
- :where(.theme-scope) .course-details .cd-enrollment--open {
67304
- color: var(--cd-enrollment-open-text);
66364
+ /* Newsletter form fields container */
66365
+ :where(.theme-scope) .newsletter-form-fields {
66366
+ display: flex;
66367
+ flex-direction: column;
66368
+ gap: var(--rb-gap-sm, 0.75rem);
67305
66369
  }
67306
66370
 
67307
- :where(.theme-scope) .course-details .cd-enrollment--closed {
67308
- color: var(--cd-enrollment-closed-text);
66371
+ /* Individual field styling */
66372
+ :where(.theme-scope) .newsletter-field {
66373
+ display: flex;
66374
+ flex-direction: column;
66375
+ gap: 0.25rem;
67309
66376
  }
67310
66377
 
67311
- /* =============================================================================
67312
- * Block: Event whole-series registration
67313
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
67314
- * =============================================================================
67315
- */
67316
-
67317
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
67318
- :where(.theme-scope)
67319
- :where(
67320
- [data-block='event-registration'],
67321
- [data-block='course-registration']
67322
- ) {
67323
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
67324
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
66378
+ /* Required indicator */
66379
+ :where(.theme-scope) .newsletter-required {
66380
+ color: rgb(var(--tb-primary));
66381
+ margin-left: 0.125rem;
67325
66382
  }
67326
66383
 
67327
- /* Container: base styling comes from the shared .rb-reg-surface
67328
- (registration-surface.css); these overrides preserve whole-series
67329
- whole-series registration's established look (fixed padding, centered). */
67330
- :where(.theme-scope)
67331
- :where([data-block='event-registration'], [data-block='course-registration'])
67332
- .er-whole-series-container {
67333
- padding: 1.5rem;
67334
- margin-inline: auto;
66384
+ /* Submit button container */
66385
+ :where(.theme-scope) .newsletter-submit {
66386
+ margin-top: 0.5rem;
67335
66387
  }
67336
66388
 
67337
- /* Empty/unavailable */
67338
- :where(.theme-scope)
67339
- :where([data-block='event-registration'], [data-block='course-registration'])
67340
- .er-whole-series-empty {
67341
- border-radius: var(--rb-block-radius);
67342
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
67343
- padding: 2.5rem;
67344
- text-align: center;
66389
+ /* ALTCHA widget container */
66390
+ :where(.theme-scope) .newsletter-altcha {
66391
+ margin-top: 0.75rem;
66392
+ display: flex;
66393
+ justify-content: center;
67345
66394
  }
67346
66395
 
67347
- :where(.theme-scope)
67348
- :where([data-block='event-registration'], [data-block='course-registration'])
67349
- .er-whole-series-empty__text {
67350
- opacity: 0.7;
66396
+ /* Privacy note */
66397
+ :where(.theme-scope) .newsletter-privacy-note {
66398
+ margin-top: 0.75rem;
66399
+ font-size: 1rem;
66400
+ line-height: 1.6;
66401
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66402
+ text-align: center;
67351
66403
  }
67352
66404
 
67353
66405
  /* =============================================================================
67354
- * Layout (two-column)
66406
+ * Inline Variant - Horizontal layout
67355
66407
  * =============================================================================
67356
66408
  */
67357
- :where(.theme-scope)
67358
- :where([data-block='event-registration'], [data-block='course-registration'])
67359
- .er-whole-series-layout {
67360
- display: grid;
67361
- gap: 1.5rem;
67362
- grid-template-columns: 1fr;
67363
- }
67364
66409
 
67365
- @container rb-site (min-width: 768px) {
67366
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67367
- :where(.theme-scope)
67368
- :where(
67369
- [data-block='event-registration'],
67370
- [data-block='course-registration']
67371
- )
67372
- .er-whole-series-layout--with-sidebar {
67373
- grid-template-columns: 1fr 280px;
67374
- }
67375
- }
66410
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
66411
+ flex-direction: row;
66412
+ align-items: flex-end;
66413
+ flex-wrap: wrap;
66414
+ gap: var(--rb-gap-sm, 0.75rem);
67376
66415
  }
67377
66416
 
67378
- :where(.theme-scope)
67379
- :where([data-block='event-registration'], [data-block='course-registration'])
67380
- .er-whole-series-layout__main {
67381
- min-width: 0;
66417
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
66418
+ flex: 1 1 auto;
66419
+ min-width: 10rem;
67382
66420
  }
67383
66421
 
67384
- :where(.theme-scope)
67385
- :where([data-block='event-registration'], [data-block='course-registration'])
67386
- .er-whole-series-layout__sidebar {
67387
- display: none;
66422
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
66423
+ margin-top: 0;
66424
+ flex-shrink: 0;
67388
66425
  }
67389
66426
 
67390
- @container rb-site (min-width: 768px) {
66427
+ /* Mobile fallback for inline variant */
66428
+ @container rb-site (max-width: 640px) {
67391
66429
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67392
- :where(.theme-scope)
67393
- :where(
67394
- [data-block='event-registration'],
67395
- [data-block='course-registration']
67396
- )
67397
- .er-whole-series-layout__sidebar {
67398
- display: block;
66430
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
66431
+ flex-direction: column;
66432
+ }
66433
+
66434
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
66435
+ min-width: 100%;
67399
66436
  }
67400
66437
  }
67401
66438
  }
67402
66439
 
67403
66440
  /* =============================================================================
67404
- * Step Indicator
66441
+ * Editorial Split Variant
67405
66442
  * =============================================================================
67406
66443
  */
67407
- :where(.theme-scope)
67408
- :where([data-block='event-registration'], [data-block='course-registration'])
67409
- .er-whole-series-steps {
67410
- display: flex;
67411
- align-items: center;
67412
- gap: 0.5rem;
67413
- margin-bottom: 1.5rem;
67414
- }
67415
66444
 
67416
- :where(.theme-scope)
67417
- :where([data-block='event-registration'], [data-block='course-registration'])
67418
- .er-whole-series-step {
67419
- display: flex;
66445
+ :where(.theme-scope) .newsletter-editorial-split {
66446
+ display: grid;
66447
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
66448
+ gap: clamp(2.5rem, 7vw, 7rem);
67420
66449
  align-items: center;
67421
- gap: 0.5rem;
66450
+ text-align: left;
67422
66451
  }
67423
66452
 
67424
- :where(.theme-scope)
67425
- :where([data-block='event-registration'], [data-block='course-registration'])
67426
- .er-whole-series-step-circle {
67427
- width: 1.75rem;
67428
- height: 1.75rem;
67429
- border-radius: 9999px;
66453
+ :where(.theme-scope) .newsletter-editorial-split-copy {
67430
66454
  display: flex;
67431
- align-items: center;
67432
- justify-content: center;
67433
- font-size: 0.75rem;
67434
- font-weight: 600;
67435
- background: var(--er-step-inactive);
67436
- color: var(--er-step-text);
67437
- transition: background-color 0.2s ease;
66455
+ flex-direction: column;
66456
+ gap: var(--rb-gap-sm, 0.75rem);
67438
66457
  }
67439
66458
 
67440
- :where(.theme-scope)
67441
- :where([data-block='event-registration'], [data-block='course-registration'])
67442
- .er-whole-series-step-circle--active {
67443
- background: var(--er-step-active);
67444
- color: var(--er-step-text-active);
66459
+ :where(.theme-scope) .newsletter-editorial-split-form {
66460
+ min-width: 0;
67445
66461
  }
67446
66462
 
67447
- :where(.theme-scope)
67448
- :where([data-block='event-registration'], [data-block='course-registration'])
67449
- .er-whole-series-step-circle--completed {
67450
- background: var(--er-step-completed);
67451
- color: var(--er-step-text);
66463
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
66464
+ max-width: none;
66465
+ margin-inline: 0;
67452
66466
  }
67453
66467
 
67454
- :where(.theme-scope)
67455
- :where([data-block='event-registration'], [data-block='course-registration'])
67456
- .er-whole-series-step-label {
67457
- font-size: 0.875rem;
66468
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
66469
+ font-size: clamp(2rem, 4vw, 3.5rem);
67458
66470
  font-weight: 500;
67459
- color: rgb(var(--tb-mutedText));
67460
- display: none;
67461
66471
  }
67462
66472
 
67463
- @container rb-site (min-width: 640px) {
66473
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
66474
+ text-align: left;
66475
+ }
66476
+
66477
+ @container rb-site (max-width: 767px) {
67464
66478
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67465
- :where(.theme-scope)
67466
- :where(
67467
- [data-block='event-registration'],
67468
- [data-block='course-registration']
67469
- )
67470
- .er-whole-series-step-label {
67471
- display: block;
66479
+ :where(.theme-scope) .newsletter-editorial-split {
66480
+ grid-template-columns: minmax(0, 1fr);
66481
+ gap: 2rem;
67472
66482
  }
67473
66483
  }
67474
66484
  }
67475
66485
 
67476
- :where(.theme-scope)
67477
- :where([data-block='event-registration'], [data-block='course-registration'])
67478
- .er-whole-series-step-label--active {
67479
- color: var(--er-on-surface);
67480
- font-weight: 600;
67481
- }
67482
-
67483
- :where(.theme-scope)
67484
- :where([data-block='event-registration'], [data-block='course-registration'])
67485
- .er-whole-series-step-connector {
67486
- flex: 1;
67487
- height: 2px;
67488
- background: var(--er-step-connector);
67489
- min-width: 1rem;
67490
- }
66486
+ /* =============================================================================
66487
+ * Success State
66488
+ * =============================================================================
66489
+ */
67491
66490
 
67492
- :where(.theme-scope)
67493
- :where([data-block='event-registration'], [data-block='course-registration'])
67494
- .er-whole-series-step-connector--completed {
67495
- background: var(--er-step-completed);
66491
+ :where(.theme-scope) .newsletter-success {
66492
+ text-align: center;
67496
66493
  }
67497
66494
 
67498
- :where(.theme-scope)
67499
- :where([data-block='event-registration'], [data-block='course-registration'])
67500
- .er-whole-series-step-check {
67501
- width: 0.875rem;
67502
- height: 0.875rem;
66495
+ :where(.theme-scope) .newsletter-success .fb-success {
66496
+ padding: 1rem 1.5rem;
66497
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
66498
+ border-radius: var(--radius-md, 0.5rem);
66499
+ color: rgb(var(--tb-text));
67503
66500
  }
67504
66501
 
67505
66502
  /* =============================================================================
67506
- * Lists
66503
+ * Block: Contact + Newsletter
67507
66504
  * =============================================================================
67508
66505
  */
67509
- :where(.theme-scope)
67510
- :where([data-block='event-registration'], [data-block='course-registration'])
67511
- .er-whole-series-run-list {
66506
+
66507
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
67512
66508
  display: grid;
67513
- gap: 1rem;
66509
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
66510
+ gap: clamp(2.5rem, 6vw, 4rem);
66511
+ align-items: start;
67514
66512
  }
67515
66513
 
67516
- /* =============================================================================
67517
- * Run cards
67518
- * =============================================================================
67519
- */
67520
- :where(.theme-scope)
67521
- :where([data-block='event-registration'], [data-block='course-registration'])
67522
- .er-whole-series-run-card {
67523
- border-radius: var(--rb-block-radius);
67524
- border: 1px solid var(--er-border);
67525
- padding: 1rem;
67526
- background: rgb(var(--tb-background));
67527
- cursor: pointer;
67528
- transition:
67529
- border-color var(--rb-block-transition) ease,
67530
- transform var(--rb-block-transition) ease;
66514
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
66515
+ min-width: 0;
67531
66516
  }
67532
66517
 
67533
- :where(.theme-scope)
67534
- :where([data-block='event-registration'], [data-block='course-registration'])
67535
- .er-whole-series-run-card:hover {
67536
- border-color: var(--er-border-hover);
67537
- transform: translateY(-1px);
66518
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
66519
+ margin-bottom: 1.5rem;
67538
66520
  }
67539
66521
 
67540
- :where(.theme-scope)
67541
- :where([data-block='event-registration'], [data-block='course-registration'])
67542
- .er-whole-series-run-card:focus-visible {
67543
- outline: 2px solid var(--er-focus-ring);
67544
- outline-offset: 2px;
66522
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
66523
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
66524
+ margin: 0 0 0.75rem;
67545
66525
  }
67546
66526
 
67547
- :where(.theme-scope)
67548
- :where([data-block='event-registration'], [data-block='course-registration'])
67549
- .er-whole-series-run-card--selected {
67550
- border-color: var(--er-border-selected);
67551
- box-shadow: 0 0 0 3px var(--er-focus-ring);
66527
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
66528
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
66529
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
67552
66530
  }
67553
66531
 
67554
- :where(.theme-scope)
67555
- :where([data-block='event-registration'], [data-block='course-registration'])
67556
- .er-whole-series-run-card__title {
67557
- margin: 0 0 0.25rem 0;
67558
- font-weight: 700;
67559
- font-size: 1.125rem;
66532
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
66533
+ display: flex;
66534
+ flex-direction: column;
66535
+ align-items: flex-start;
67560
66536
  }
67561
66537
 
67562
- :where(.theme-scope)
67563
- :where([data-block='event-registration'], [data-block='course-registration'])
67564
- .er-whole-series-run-card__status {
67565
- margin: 0.25rem 0 0 0;
67566
- opacity: 0.8;
66538
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
66539
+ max-width: none;
66540
+ margin-left: 0;
66541
+ margin-right: 0;
67567
66542
  }
67568
66543
 
67569
- :where(.theme-scope)
67570
- :where([data-block='event-registration'], [data-block='course-registration'])
67571
- .er-whole-series-run-card__sessions,
67572
- :where(.theme-scope)
67573
- :where([data-block='event-registration'], [data-block='course-registration'])
67574
- .er-whole-series-run-card__price,
67575
- :where(.theme-scope)
67576
- :where([data-block='event-registration'], [data-block='course-registration'])
67577
- .er-whole-series-run-card__capacity,
67578
- :where(.theme-scope)
67579
- :where([data-block='event-registration'], [data-block='course-registration'])
67580
- .er-whole-series-run-card__venue {
67581
- margin: 0.25rem 0 0 0;
67582
- opacity: 0.85;
66544
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
66545
+ text-align: left;
67583
66546
  }
67584
66547
 
67585
- /* =============================================================================
67586
- * Capacity Badges
67587
- * =============================================================================
67588
- */
67589
- :where(.theme-scope)
67590
- :where([data-block='event-registration'], [data-block='course-registration'])
67591
- .er-whole-series-capacity-badge {
67592
- display: inline-block;
67593
- padding: 0.125rem 0.5rem;
67594
- border-radius: 9999px;
67595
- font-size: 0.75rem;
67596
- font-weight: 500;
66548
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
66549
+ display: flex;
66550
+ flex-direction: column;
66551
+ gap: 1rem;
67597
66552
  }
67598
66553
 
67599
- :where(.theme-scope)
67600
- :where([data-block='event-registration'], [data-block='course-registration'])
67601
- .er-whole-series-capacity-badge--available {
67602
- background: var(--er-capacity-available-bg);
67603
- color: var(--er-capacity-available-text);
66554
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
66555
+ display: grid;
66556
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
66557
+ gap: 1rem;
67604
66558
  }
67605
66559
 
67606
- :where(.theme-scope)
67607
- :where([data-block='event-registration'], [data-block='course-registration'])
67608
- .er-whole-series-capacity-badge--low {
67609
- background: var(--er-capacity-low-bg);
67610
- color: var(--er-capacity-low-text);
66560
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
66561
+ display: flex;
66562
+ flex-direction: column;
66563
+ gap: 0.25rem;
67611
66564
  }
67612
66565
 
67613
- :where(.theme-scope)
67614
- :where([data-block='event-registration'], [data-block='course-registration'])
67615
- .er-whole-series-capacity-badge--soldout {
67616
- background: var(--er-capacity-soldout-bg);
67617
- color: var(--er-capacity-soldout-text);
66566
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
66567
+ display: flex;
66568
+ flex-direction: column;
66569
+ gap: 0.5rem;
66570
+ border: none;
66571
+ padding: 0;
66572
+ margin: 0;
67618
66573
  }
67619
66574
 
67620
- /* =============================================================================
67621
- * Summary + Details
67622
- * =============================================================================
67623
- */
67624
- :where(.theme-scope)
67625
- :where([data-block='event-registration'], [data-block='course-registration'])
67626
- .er-whole-series-details {
67627
- display: grid;
67628
- gap: 1rem;
66575
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
66576
+ display: flex;
66577
+ align-items: center;
66578
+ gap: 0.5rem;
67629
66579
  }
67630
66580
 
67631
- :where(.theme-scope)
67632
- :where([data-block='event-registration'], [data-block='course-registration'])
67633
- .er-whole-series-summary {
66581
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
66582
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
66583
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
67634
66584
  border-radius: var(--rb-block-radius);
67635
- border: 1px solid var(--er-summary-border);
67636
66585
  padding: 1rem;
67637
- background: var(--er-summary-bg);
67638
- }
67639
-
67640
- :where(.theme-scope)
67641
- :where([data-block='event-registration'], [data-block='course-registration'])
67642
- .er-whole-series-summary__title {
67643
- margin: 0;
67644
- font-size: 1.25rem;
67645
- font-weight: 800;
66586
+ font-size: 0.875rem;
67646
66587
  }
67647
66588
 
67648
- :where(.theme-scope)
67649
- :where([data-block='event-registration'], [data-block='course-registration'])
67650
- .er-whole-series-summary__sessions-title {
67651
- margin: 0.75rem 0 0.5rem 0;
67652
- font-weight: 700;
66589
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
66590
+ background-color: var(--fb-success-bg);
66591
+ color: var(--fb-success-text);
66592
+ border: 1px solid var(--fb-success-border);
67653
66593
  }
67654
66594
 
67655
- :where(.theme-scope)
67656
- :where([data-block='event-registration'], [data-block='course-registration'])
67657
- .er-whole-series-summary__sessions-list {
67658
- list-style: none;
67659
- padding: 0;
67660
- margin: 0;
67661
- display: grid;
67662
- gap: 0.35rem;
66595
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
66596
+ background-color: var(--fb-error-bg);
66597
+ color: var(--fb-error-text);
66598
+ border: 1px solid var(--fb-error-border);
67663
66599
  }
67664
66600
 
67665
- :where(.theme-scope)
67666
- :where([data-block='event-registration'], [data-block='course-registration'])
67667
- .er-whole-series-summary__session {
67668
- opacity: 0.9;
66601
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
66602
+ background-color: var(--fb-empty-bg);
66603
+ color: var(--fb-empty-text);
66604
+ border: 1px dashed var(--fb-empty-border);
66605
+ text-align: center;
67669
66606
  }
67670
66607
 
67671
- :where(.theme-scope)
67672
- :where([data-block='event-registration'], [data-block='course-registration'])
67673
- .er-whole-series-summary__venue,
67674
- :where(.theme-scope)
67675
- :where([data-block='event-registration'], [data-block='course-registration'])
67676
- .er-whole-series-summary__price,
67677
- :where(.theme-scope)
67678
- :where([data-block='event-registration'], [data-block='course-registration'])
67679
- .er-whole-series-summary__membership {
67680
- margin: 0.5rem 0 0 0;
67681
- opacity: 0.9;
66608
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
66609
+ margin-top: 0.5rem;
67682
66610
  }
67683
66611
 
67684
66612
  /* =============================================================================
67685
- * Form
66613
+ * Block: Team Members
67686
66614
  * =============================================================================
66615
+ *
66616
+ * Site/theme authors sometimes need different thumbnail shapes/sizes without
66617
+ * changing global fragment defaults. We expose these controls on the block and
66618
+ * style them via data attributes on the \`.rb-team-members\` wrapper.
67687
66619
  */
67688
- :where(.theme-scope)
67689
- :where([data-block='event-registration'], [data-block='course-registration'])
67690
- .er-whole-series-form {
67691
- display: grid;
67692
- gap: 1rem;
67693
- }
67694
66620
 
67695
- :where(.theme-scope)
67696
- :where([data-block='event-registration'], [data-block='course-registration'])
67697
- .er-whole-series-form__field {
67698
- display: grid;
67699
- gap: 0.35rem;
66621
+ /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
66622
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
66623
+ text-align: left;
67700
66624
  }
67701
66625
 
67702
- :where(.theme-scope)
67703
- :where([data-block='event-registration'], [data-block='course-registration'])
67704
- .er-whole-series-form__label {
67705
- font-size: 0.875rem;
67706
- font-weight: 600;
66626
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
66627
+ align-items: flex-start;
66628
+ text-align: left;
67707
66629
  }
67708
66630
 
67709
- :where(.theme-scope)
67710
- :where([data-block='event-registration'], [data-block='course-registration'])
67711
- .er-whole-series-form__label--required::after {
67712
- content: ' *';
67713
- color: var(--er-required);
66631
+ @container rb-site (min-width: 1024px) {
66632
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66633
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
66634
+ width: 75%;
66635
+ margin-left: 0;
66636
+ margin-right: auto;
66637
+ }
67714
66638
  }
67715
-
67716
- :where(.theme-scope)
67717
- :where([data-block='event-registration'], [data-block='course-registration'])
67718
- .er-whole-series-form__input {
67719
- border-radius: calc(var(--rb-block-radius) * 0.6);
67720
- border: 1px solid var(--er-border);
67721
- padding: 0.6rem 0.75rem;
67722
- background: rgb(var(--tb-background));
67723
- color: rgb(var(--tb-foreground));
67724
66639
  }
67725
66640
 
67726
- :where(.theme-scope)
67727
- :where([data-block='event-registration'], [data-block='course-registration'])
67728
- .er-whole-series-form__textarea {
67729
- border-radius: calc(var(--rb-block-radius) * 0.6);
67730
- border: 1px solid var(--er-border);
67731
- padding: 0.6rem 0.75rem;
67732
- background: rgb(var(--tb-background));
67733
- color: rgb(var(--tb-foreground));
67734
- resize: vertical;
66641
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
66642
+ display: block;
66643
+ width: 100%;
66644
+ height: auto;
67735
66645
  }
67736
66646
 
67737
- :where(.theme-scope)
67738
- :where([data-block='event-registration'], [data-block='course-registration'])
67739
- .er-whole-series-form__input:focus,
67740
- :where(.theme-scope)
67741
- :where([data-block='event-registration'], [data-block='course-registration'])
67742
- .er-whole-series-form__textarea:focus {
67743
- outline: 2px solid var(--er-focus-ring);
67744
- outline-offset: 2px;
66647
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
66648
+ font-weight: 600;
67745
66649
  }
67746
66650
 
67747
- :where(.theme-scope)
67748
- :where([data-block='event-registration'], [data-block='course-registration'])
67749
- .er-whole-series-form__input--error,
67750
- :where(.theme-scope)
67751
- :where([data-block='event-registration'], [data-block='course-registration'])
67752
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
67753
- border-color: var(--er-border-error);
66651
+ /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
66652
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
66653
+ --rb-team-thumb-max: 11.25rem; /* ~180px default */
66654
+ --rb-team-image-basis: 33.333%;
67754
66655
  }
67755
66656
 
67756
- :where(.theme-scope)
67757
- :where([data-block='event-registration'], [data-block='course-registration'])
67758
- .er-whole-series-form__error {
67759
- font-size: 0.875rem;
67760
- color: var(--er-error-text);
66657
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
66658
+ --rb-team-thumb-max: 8.75rem; /* ~140px */
66659
+ --rb-team-image-basis: 25%;
67761
66660
  }
67762
66661
 
67763
- :where(.theme-scope)
67764
- :where([data-block='event-registration'], [data-block='course-registration'])
67765
- .er-whole-series-form__hint {
67766
- font-size: 0.875rem;
67767
- opacity: 0.7;
66662
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
66663
+ --rb-team-thumb-max: 11.25rem; /* ~180px */
66664
+ --rb-team-image-basis: 33.333%;
67768
66665
  }
67769
66666
 
67770
- /* Logged-in user hint with logout link */
67771
- :where(.theme-scope)
67772
- :where([data-block='event-registration'], [data-block='course-registration'])
67773
- .er-whole-series-logged-in-hint {
67774
- font-size: 0.875rem;
67775
- opacity: 0.7;
67776
- margin: 0.25rem 0 0 0;
66667
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
66668
+ --rb-team-thumb-max: 13.75rem; /* ~220px */
66669
+ --rb-team-image-basis: 40%;
67777
66670
  }
67778
66671
 
67779
- :where(.theme-scope)
67780
- :where([data-block='event-registration'], [data-block='course-registration'])
67781
- .er-whole-series-link {
67782
- background: none;
67783
- border: none;
67784
- padding: 0;
67785
- font-size: inherit;
67786
- color: rgb(var(--tb-primary));
67787
- cursor: pointer;
67788
- text-decoration: underline;
67789
- text-underline-offset: 2px;
66672
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
66673
+ --rb-team-thumb-max: 17.5rem; /* ~280px */
66674
+ --rb-team-image-basis: 50%;
67790
66675
  }
67791
66676
 
67792
- :where(.theme-scope)
67793
- :where([data-block='event-registration'], [data-block='course-registration'])
67794
- .er-whole-series-link:hover {
67795
- text-decoration: none;
67796
- }
67797
-
67798
- /* =============================================================================
67799
- * Actions
67800
- * =============================================================================
67801
- */
67802
- :where(.theme-scope)
67803
- :where([data-block='event-registration'], [data-block='course-registration'])
67804
- .er-whole-series-actions {
67805
- display: flex;
67806
- align-items: center;
67807
- justify-content: space-between;
67808
- gap: 0.75rem;
67809
- margin-top: 0.25rem;
67810
- }
67811
-
67812
- :where(.theme-scope)
67813
- :where([data-block='event-registration'], [data-block='course-registration'])
67814
- .er-whole-series-back-btn {
67815
- border: 0;
67816
- background: transparent;
67817
- color: var(--er-on-surface);
67818
- opacity: 0.8;
67819
- padding: 0.25rem 0.25rem;
67820
- cursor: pointer;
67821
- }
67822
-
67823
- :where(.theme-scope)
67824
- :where([data-block='event-registration'], [data-block='course-registration'])
67825
- .er-whole-series-back-btn:hover {
67826
- opacity: 1;
67827
- text-decoration: underline;
67828
- }
67829
-
67830
- /* =============================================================================
67831
- * Payment Options
67832
- * =============================================================================
67833
- */
67834
- :where(.theme-scope)
67835
- :where([data-block='event-registration'], [data-block='course-registration'])
67836
- .er-whole-series-payment__options {
67837
- display: grid;
67838
- gap: 0.5rem;
67839
- }
67840
-
67841
- :where(.theme-scope)
67842
- :where([data-block='event-registration'], [data-block='course-registration'])
67843
- .er-whole-series-payment__option {
67844
- display: flex;
67845
- align-items: center;
67846
- gap: 0.5rem;
67847
- }
67848
-
67849
- /* =============================================================================
67850
- * Payment Tiles (Card Grid)
67851
- * =============================================================================
67852
- */
67853
- :where(.theme-scope)
67854
- :where([data-block='event-registration'], [data-block='course-registration'])
67855
- .er-whole-series-payment-tiles {
67856
- display: grid;
67857
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
67858
- gap: 0.75rem;
67859
- }
67860
-
67861
- :where(.theme-scope)
67862
- :where([data-block='event-registration'], [data-block='course-registration'])
67863
- .er-whole-series-payment-tile {
67864
- border-radius: var(--rb-block-radius);
67865
- border: 1px solid var(--er-payment-border);
67866
- padding: 1rem;
67867
- background: rgb(var(--tb-background));
67868
- cursor: pointer;
67869
- transition:
67870
- border-color 0.15s ease,
67871
- box-shadow 0.15s ease,
67872
- background-color 0.15s ease;
67873
- position: relative;
67874
- }
67875
-
67876
- :where(.theme-scope)
67877
- :where([data-block='event-registration'], [data-block='course-registration'])
67878
- .er-whole-series-payment-tile:hover {
67879
- border-color: var(--er-payment-border-hover);
67880
- }
67881
-
67882
- :where(.theme-scope)
67883
- :where([data-block='event-registration'], [data-block='course-registration'])
67884
- .er-whole-series-payment-tile:focus-visible {
67885
- outline: 2px solid var(--er-focus-ring);
67886
- outline-offset: 2px;
67887
- }
67888
-
67889
- :where(.theme-scope)
67890
- :where([data-block='event-registration'], [data-block='course-registration'])
67891
- .er-whole-series-payment-tile--selected {
67892
- border-color: var(--er-payment-border-selected);
67893
- background: var(--er-payment-bg-selected);
67894
- box-shadow: 0 0 0 3px var(--er-focus-ring);
67895
- }
67896
-
67897
- :where(.theme-scope)
67898
- :where([data-block='event-registration'], [data-block='course-registration'])
67899
- .er-whole-series-payment-tile--upsell {
67900
- border-style: dashed;
67901
- }
67902
-
67903
- :where(.theme-scope)
67904
- :where([data-block='event-registration'], [data-block='course-registration'])
67905
- .er-whole-series-payment-tile__header {
67906
- display: flex;
67907
- align-items: flex-start;
67908
- justify-content: space-between;
67909
- gap: 0.5rem;
67910
- }
67911
-
67912
- :where(.theme-scope)
67913
- :where([data-block='event-registration'], [data-block='course-registration'])
67914
- .er-whole-series-payment-tile__name {
67915
- margin: 0;
67916
- font-weight: 600;
67917
- font-size: 1rem;
67918
- }
67919
-
67920
- :where(.theme-scope)
67921
- :where([data-block='event-registration'], [data-block='course-registration'])
67922
- .er-whole-series-payment-tile__description {
67923
- margin: 0.25rem 0 0 0;
67924
- font-size: 0.875rem;
67925
- opacity: 0.7;
67926
- }
67927
-
67928
- :where(.theme-scope)
67929
- :where([data-block='event-registration'], [data-block='course-registration'])
67930
- .er-whole-series-payment-tile__price {
67931
- font-weight: 600;
67932
- font-size: 0.875rem;
67933
- white-space: nowrap;
67934
- }
67935
-
67936
- :where(.theme-scope)
67937
- :where([data-block='event-registration'], [data-block='course-registration'])
67938
- .er-whole-series-payment-tile__badge {
67939
- display: inline-block;
67940
- padding: 0.125rem 0.5rem;
67941
- border-radius: 9999px;
67942
- font-size: 0.75rem;
67943
- font-weight: 500;
67944
- margin-top: 0.5rem;
67945
- }
67946
-
67947
- /* Checkmark indicator on selected tile */
67948
- :where(.theme-scope)
67949
- :where([data-block='event-registration'], [data-block='course-registration'])
67950
- .er-whole-series-payment-tile__check {
67951
- position: absolute;
67952
- top: 0.5rem;
67953
- right: 0.5rem;
67954
- width: 1.25rem;
67955
- height: 1.25rem;
67956
- border-radius: 9999px;
67957
- background: var(--er-check-bg);
67958
- color: var(--er-check-text);
67959
- display: flex;
67960
- align-items: center;
67961
- justify-content: center;
67962
- opacity: 0;
67963
- transition: opacity 0.15s ease;
67964
- }
67965
-
67966
- :where(.theme-scope)
67967
- :where([data-block='event-registration'], [data-block='course-registration'])
67968
- .er-whole-series-payment-tile--selected
67969
- .er-whole-series-payment-tile__check {
67970
- opacity: 1;
67971
- }
67972
-
67973
- /* =============================================================================
67974
- * Booking Mode Step
67975
- * =============================================================================
67976
- */
67977
- :where(.theme-scope)
67978
- :where([data-block='event-registration'], [data-block='course-registration'])
67979
- .er-whole-series-booking-mode {
67980
- display: grid;
67981
- gap: 1rem;
67982
- }
67983
-
67984
- :where(.theme-scope)
67985
- :where([data-block='event-registration'], [data-block='course-registration'])
67986
- .er-whole-series-booking-mode__title {
67987
- margin: 0;
67988
- font-size: var(--er-step-title-size);
67989
- font-weight: 700;
67990
- }
67991
-
67992
- :where(.theme-scope)
67993
- :where([data-block='event-registration'], [data-block='course-registration'])
67994
- .er-whole-series-booking-mode__subtitle {
67995
- margin: 0.25rem 0 0 0;
67996
- opacity: 0.7;
67997
- }
67998
-
67999
- :where(.theme-scope)
68000
- :where([data-block='event-registration'], [data-block='course-registration'])
68001
- .er-whole-series-booking-mode__link {
68002
- margin-top: 0.5rem;
68003
- font-size: 0.875rem;
68004
- }
68005
-
68006
- :where(.theme-scope)
68007
- :where([data-block='event-registration'], [data-block='course-registration'])
68008
- .er-whole-series-booking-mode__link
68009
- a {
68010
- color: rgb(var(--tb-primary));
68011
- text-decoration: underline;
68012
- cursor: pointer;
68013
- }
68014
-
68015
- :where(.theme-scope)
68016
- :where([data-block='event-registration'], [data-block='course-registration'])
68017
- .er-whole-series-booking-mode__link
68018
- a:hover {
68019
- text-decoration: none;
68020
- }
68021
-
68022
- /* =============================================================================
68023
- * Membership Hero
68024
- * =============================================================================
68025
- */
68026
- :where(.theme-scope)
68027
- :where([data-block='event-registration'], [data-block='course-registration'])
68028
- .er-whole-series-membership-hero {
68029
- border-radius: var(--rb-block-radius);
68030
- background: var(--er-success-bg);
68031
- border: 1px solid rgba(var(--tb-success), 0.2);
68032
- padding: 1.5rem;
68033
- text-align: center;
68034
- }
68035
-
68036
- :where(.theme-scope)
68037
- :where([data-block='event-registration'], [data-block='course-registration'])
68038
- .er-whole-series-membership-hero__icon {
68039
- font-size: 2rem;
68040
- margin-bottom: 0.75rem;
68041
- }
68042
-
68043
- :where(.theme-scope)
68044
- :where([data-block='event-registration'], [data-block='course-registration'])
68045
- .er-whole-series-membership-hero__title {
68046
- margin: 0;
68047
- font-size: 1.25rem;
68048
- font-weight: 700;
68049
- color: var(--er-success-text);
68050
- }
68051
-
68052
- :where(.theme-scope)
68053
- :where([data-block='event-registration'], [data-block='course-registration'])
68054
- .er-whole-series-membership-hero__subtitle {
68055
- margin: 0.25rem 0 0 0;
68056
- font-size: 0.875rem;
68057
- opacity: 0.8;
68058
- }
68059
-
68060
- /* =============================================================================
68061
- * Portal Auth Sidebar
68062
- * =============================================================================
68063
- */
68064
- :where(.theme-scope)
68065
- :where([data-block='event-registration'], [data-block='course-registration'])
68066
- .er-whole-series-portal-sidebar {
68067
- border-radius: var(--rb-block-radius);
68068
- border: 1px solid var(--er-border);
68069
- padding: 1.25rem;
68070
- background: rgb(var(--tb-surface));
68071
- color: var(--er-on-surface);
68072
- }
68073
-
68074
- :where(.theme-scope)
68075
- :where([data-block='event-registration'], [data-block='course-registration'])
68076
- .er-whole-series-portal-sidebar__icon {
68077
- font-size: 1.5rem;
68078
- margin-bottom: 0.5rem;
68079
- }
68080
-
68081
- :where(.theme-scope)
68082
- :where([data-block='event-registration'], [data-block='course-registration'])
68083
- .er-whole-series-portal-sidebar__title {
68084
- margin: 0;
68085
- font-size: 1rem;
68086
- font-weight: 600;
68087
- }
68088
-
68089
- :where(.theme-scope)
68090
- :where([data-block='event-registration'], [data-block='course-registration'])
68091
- .er-whole-series-portal-sidebar__text {
68092
- margin: 0.5rem 0 0 0;
68093
- font-size: 0.875rem;
68094
- opacity: 0.8;
68095
- }
68096
-
68097
- :where(.theme-scope)
68098
- :where([data-block='event-registration'], [data-block='course-registration'])
68099
- .er-whole-series-portal-sidebar__action {
68100
- margin-top: 1rem;
68101
- }
68102
-
68103
- :where(.theme-scope)
68104
- :where([data-block='event-registration'], [data-block='course-registration'])
68105
- .er-whole-series-portal-sidebar__link {
68106
- color: rgb(var(--tb-primary));
68107
- cursor: pointer;
68108
- text-decoration: underline;
68109
- font-size: 0.875rem;
68110
- }
68111
-
68112
- :where(.theme-scope)
68113
- :where([data-block='event-registration'], [data-block='course-registration'])
68114
- .er-whole-series-portal-sidebar__link:hover {
68115
- text-decoration: none;
68116
- }
68117
-
68118
- /* =============================================================================
68119
- * Modal (for Magic Link)
68120
- * =============================================================================
68121
- */
68122
- :where(.theme-scope)
68123
- :where([data-block='event-registration'], [data-block='course-registration'])
68124
- .er-whole-series-modal-overlay {
68125
- position: fixed;
68126
- inset: 0;
68127
- background: rgba(var(--tb-scrim), 0.5);
68128
- display: flex;
68129
- align-items: center;
68130
- justify-content: center;
68131
- z-index: 100;
68132
- animation: er-whole-series-fade-in 0.15s ease;
68133
- }
68134
-
68135
- :where(.theme-scope)
68136
- :where([data-block='event-registration'], [data-block='course-registration'])
68137
- .er-whole-series-modal {
68138
- background: rgb(var(--tb-surface));
68139
- color: var(--er-on-surface);
68140
- border-radius: var(--rb-block-radius);
68141
- padding: 1.5rem;
68142
- max-width: 28rem;
68143
- width: calc(100% - 2rem);
68144
- position: relative;
68145
- animation: er-whole-series-slide-up 0.2s ease;
68146
- }
68147
-
68148
- :where(.theme-scope)
68149
- :where([data-block='event-registration'], [data-block='course-registration'])
68150
- .er-whole-series-modal-close {
68151
- position: absolute;
68152
- top: 0.75rem;
68153
- right: 0.75rem;
68154
- background: transparent;
68155
- border: 0;
68156
- padding: 0.25rem;
68157
- cursor: pointer;
68158
- opacity: 0.6;
68159
- transition: opacity 0.15s ease;
68160
- }
68161
-
68162
- :where(.theme-scope)
68163
- :where([data-block='event-registration'], [data-block='course-registration'])
68164
- .er-whole-series-modal-close:hover {
68165
- opacity: 1;
68166
- }
68167
-
68168
- @keyframes er-whole-series-fade-in {
68169
- from {
68170
- opacity: 0;
68171
- }
68172
- to {
68173
- opacity: 1;
68174
- }
68175
- }
68176
-
68177
- @keyframes er-whole-series-slide-up {
68178
- from {
68179
- opacity: 0;
68180
- transform: translateY(10px);
68181
- }
68182
- to {
68183
- opacity: 1;
68184
- transform: translateY(0);
68185
- }
68186
- }
68187
-
68188
- /* Reduced motion */
68189
- @media (prefers-reduced-motion: reduce) {
68190
- :where(.theme-scope)
68191
- :where(
68192
- [data-block='event-registration'],
68193
- [data-block='course-registration']
68194
- )
68195
- .er-whole-series-modal-overlay,
68196
- :where(.theme-scope)
68197
- :where(
68198
- [data-block='event-registration'],
68199
- [data-block='course-registration']
68200
- )
68201
- .er-whole-series-modal {
68202
- animation: none;
68203
- }
68204
- }
68205
-
68206
- /* =============================================================================
68207
- * Center States
68208
- * =============================================================================
68209
- */
68210
- :where(.theme-scope)
68211
- :where([data-block='event-registration'], [data-block='course-registration'])
68212
- .er-whole-series-center {
68213
- display: grid;
68214
- place-items: center;
68215
- gap: 0.75rem;
68216
- padding: 2rem 0;
68217
- }
68218
-
68219
- /* =============================================================================
68220
- * Success/Waitlist/Error States
68221
- * =============================================================================
68222
- */
68223
- :where(.theme-scope)
68224
- :where([data-block='event-registration'], [data-block='course-registration'])
68225
- .er-whole-series-success,
68226
- :where(.theme-scope)
68227
- :where([data-block='event-registration'], [data-block='course-registration'])
68228
- .er-whole-series-waitlist,
68229
- :where(.theme-scope)
68230
- :where([data-block='event-registration'], [data-block='course-registration'])
68231
- .er-whole-series-error,
68232
- :where(.theme-scope)
68233
- :where([data-block='event-registration'], [data-block='course-registration'])
68234
- .er-whole-series-payment-failed {
68235
- text-align: center;
68236
- padding: 2rem 1rem;
68237
- }
68238
-
68239
- /* State icon color variants (layout from registration-surface.css) */
68240
- :where(.theme-scope)
68241
- :where([data-block='event-registration'], [data-block='course-registration'])
68242
- .rb-state-icon--success {
68243
- background: var(--er-success-bg);
68244
- color: var(--er-success-text);
68245
- }
68246
-
68247
- :where(.theme-scope)
68248
- :where([data-block='event-registration'], [data-block='course-registration'])
68249
- .rb-state-icon--error {
68250
- background: var(--er-error-bg);
68251
- color: var(--er-error-text);
68252
- }
68253
-
68254
- :where(.theme-scope)
68255
- :where([data-block='event-registration'], [data-block='course-registration'])
68256
- .rb-state-icon--waitlist,
68257
- :where(.theme-scope)
68258
- :where([data-block='event-registration'], [data-block='course-registration'])
68259
- .rb-state-icon--warning {
68260
- background: var(--er-waitlist-bg);
68261
- color: var(--er-waitlist-text);
68262
- }
68263
-
68264
- :where(.theme-scope)
68265
- :where([data-block='event-registration'], [data-block='course-registration'])
68266
- .er-whole-series-success__title,
68267
- :where(.theme-scope)
68268
- :where([data-block='event-registration'], [data-block='course-registration'])
68269
- .er-whole-series-waitlist__title,
68270
- :where(.theme-scope)
68271
- :where([data-block='event-registration'], [data-block='course-registration'])
68272
- .er-whole-series-error__title,
68273
- :where(.theme-scope)
68274
- :where([data-block='event-registration'], [data-block='course-registration'])
68275
- .er-whole-series-payment-failed__title {
68276
- margin: 0.75rem 0 0.5rem 0;
68277
- font-size: 1.125rem;
68278
- font-weight: 700;
68279
- }
68280
-
68281
- :where(.theme-scope)
68282
- :where([data-block='event-registration'], [data-block='course-registration'])
68283
- .er-whole-series-success__message,
68284
- :where(.theme-scope)
68285
- :where([data-block='event-registration'], [data-block='course-registration'])
68286
- .er-whole-series-waitlist__message,
68287
- :where(.theme-scope)
68288
- :where([data-block='event-registration'], [data-block='course-registration'])
68289
- .er-whole-series-error__message,
68290
- :where(.theme-scope)
68291
- :where([data-block='event-registration'], [data-block='course-registration'])
68292
- .er-whole-series-payment-failed__message {
68293
- margin: 0;
68294
- opacity: 0.7;
68295
- }
68296
-
68297
- :where(.theme-scope)
68298
- :where([data-block='event-registration'], [data-block='course-registration'])
68299
- .er-whole-series-success__membership {
68300
- margin-top: 0.5rem;
68301
- font-size: 0.875rem;
68302
- color: var(--er-success-text);
68303
- }
68304
-
68305
- :where(.theme-scope)
68306
- :where([data-block='event-registration'], [data-block='course-registration'])
68307
- .er-whole-series-error__retry,
68308
- :where(.theme-scope)
68309
- :where([data-block='event-registration'], [data-block='course-registration'])
68310
- .er-whole-series-payment-failed__retry {
68311
- margin-top: 1rem;
68312
- }
68313
-
68314
- /* =============================================================================
68315
- * Discount Code Section
68316
- * =============================================================================
68317
- */
68318
- :where(.theme-scope)
68319
- :where([data-block='event-registration'], [data-block='course-registration'])
68320
- .er-whole-series-discount {
68321
- margin-top: 0.5rem;
68322
- }
68323
-
68324
- :where(.theme-scope)
68325
- :where([data-block='event-registration'], [data-block='course-registration'])
68326
- .er-whole-series-discount__form {
68327
- display: grid;
68328
- gap: 0.5rem;
68329
- }
68330
-
68331
- :where(.theme-scope)
68332
- :where([data-block='event-registration'], [data-block='course-registration'])
68333
- .er-whole-series-discount__toggle {
68334
- background: transparent;
68335
- border: 0;
68336
- padding: 0;
68337
- color: rgb(var(--tb-primary));
68338
- cursor: pointer;
68339
- font-size: 0.875rem;
68340
- text-decoration: underline;
68341
- }
68342
-
68343
- :where(.theme-scope)
68344
- :where([data-block='event-registration'], [data-block='course-registration'])
68345
- .er-whole-series-discount__toggle:hover {
68346
- text-decoration: none;
68347
- }
68348
-
68349
- :where(.theme-scope)
68350
- :where([data-block='event-registration'], [data-block='course-registration'])
68351
- .er-whole-series-discount__label {
68352
- font-size: 0.875rem;
68353
- font-weight: 600;
68354
- }
68355
-
68356
- :where(.theme-scope)
68357
- :where([data-block='event-registration'], [data-block='course-registration'])
68358
- .er-whole-series-discount__row {
68359
- display: flex;
68360
- gap: 0.5rem;
68361
- }
68362
-
68363
- :where(.theme-scope)
68364
- :where([data-block='event-registration'], [data-block='course-registration'])
68365
- .er-whole-series-discount__input {
68366
- flex: 1;
68367
- border-radius: calc(var(--rb-block-radius) * 0.6);
68368
- border: 1px solid var(--er-border);
68369
- padding: 0.5rem 0.75rem;
68370
- background: rgb(var(--tb-background));
68371
- color: rgb(var(--tb-foreground));
68372
- font-size: 0.875rem;
68373
- }
68374
-
68375
- :where(.theme-scope)
68376
- :where([data-block='event-registration'], [data-block='course-registration'])
68377
- .er-whole-series-discount__input:focus {
68378
- outline: 2px solid var(--er-focus-ring);
68379
- outline-offset: 2px;
68380
- }
68381
-
68382
- :where(.theme-scope)
68383
- :where([data-block='event-registration'], [data-block='course-registration'])
68384
- .er-whole-series-discount__remove {
68385
- background: transparent;
68386
- border: 0;
68387
- padding: 0.25rem;
68388
- cursor: pointer;
68389
- opacity: 0.6;
68390
- }
68391
-
68392
- :where(.theme-scope)
68393
- :where([data-block='event-registration'], [data-block='course-registration'])
68394
- .er-whole-series-discount__apply {
68395
- background: transparent;
68396
- border: 0;
68397
- padding: 0.25rem;
68398
- cursor: pointer;
68399
- opacity: 0.8;
68400
- }
68401
-
68402
- :where(.theme-scope)
68403
- :where([data-block='event-registration'], [data-block='course-registration'])
68404
- .er-whole-series-discount__remove:hover {
68405
- opacity: 1;
68406
- }
68407
-
68408
- :where(.theme-scope)
68409
- :where([data-block='event-registration'], [data-block='course-registration'])
68410
- .er-whole-series-discount__apply:hover {
68411
- opacity: 1;
68412
- }
68413
-
68414
- :where(.theme-scope)
68415
- :where([data-block='event-registration'], [data-block='course-registration'])
68416
- .er-whole-series-discount__hint {
68417
- margin: 0;
68418
- font-size: 0.875rem;
68419
- opacity: 0.7;
68420
- }
68421
-
68422
- :where(.theme-scope)
68423
- :where([data-block='event-registration'], [data-block='course-registration'])
68424
- .er-whole-series-discount__feedback {
68425
- margin: 0;
68426
- font-size: 0.875rem;
68427
- }
68428
-
68429
- /* =============================================================================
68430
- * Altcha (Spam Protection)
68431
- * =============================================================================
68432
- */
68433
- :where(.theme-scope)
68434
- :where([data-block='event-registration'], [data-block='course-registration'])
68435
- .er-whole-series-altcha {
68436
- margin-top: 1rem;
68437
- }
68438
-
68439
- /* =============================================================================
68440
- * Magic Link Form
68441
- * =============================================================================
68442
- */
68443
- :where(.theme-scope)
68444
- :where([data-block='event-registration'], [data-block='course-registration'])
68445
- .er-whole-series-magic-link-form {
68446
- display: flex;
68447
- flex-direction: column;
68448
- gap: 0.75rem;
68449
- }
68450
-
68451
- :where(.theme-scope)
68452
- :where([data-block='event-registration'], [data-block='course-registration'])
68453
- .er-whole-series-magic-link-title {
68454
- margin: 0;
68455
- font-size: 1.25rem;
68456
- font-weight: 700;
68457
- }
68458
-
68459
- :where(.theme-scope)
68460
- :where([data-block='event-registration'], [data-block='course-registration'])
68461
- .er-whole-series-magic-link-success {
68462
- display: flex;
68463
- flex-direction: column;
68464
- gap: 0.75rem;
68465
- }
68466
-
68467
- :where(.theme-scope)
68468
- :where([data-block='event-registration'], [data-block='course-registration'])
68469
- .er-whole-series-portal-auth-text {
68470
- margin: 0;
68471
- font-size: 0.875rem;
68472
- opacity: 0.8;
68473
- }
68474
-
68475
- :where(.theme-scope)
68476
- :where([data-block='event-registration'], [data-block='course-registration'])
68477
- .er-whole-series-portal-auth-text--success {
68478
- color: var(--er-success-text);
68479
- }
68480
-
68481
- :where(.theme-scope)
68482
- :where([data-block='event-registration'], [data-block='course-registration'])
68483
- .er-whole-series-portal-auth-text--error {
68484
- color: var(--er-error-text);
68485
- }
68486
-
68487
- :where(.theme-scope)
68488
- :where([data-block='event-registration'], [data-block='course-registration'])
68489
- .er-whole-series-modal-btn {
68490
- border-radius: calc(var(--rb-block-radius) * 0.6);
68491
- border: 0;
68492
- padding: 0.6rem 1rem;
68493
- font-size: 0.875rem;
68494
- font-weight: 600;
68495
- cursor: pointer;
68496
- transition: opacity 0.15s ease;
68497
- background: rgb(var(--tb-primary));
68498
- color: rgb(var(--tb-primaryText, 255 255 255));
68499
- }
68500
-
68501
- :where(.theme-scope)
68502
- :where([data-block='event-registration'], [data-block='course-registration'])
68503
- .er-whole-series-modal-btn:hover {
68504
- opacity: 0.9;
68505
- }
68506
-
68507
- :where(.theme-scope)
68508
- :where([data-block='event-registration'], [data-block='course-registration'])
68509
- .er-whole-series-modal-btn:disabled {
68510
- opacity: 0.5;
68511
- cursor: not-allowed;
68512
- }
68513
-
68514
- :where(.theme-scope)
68515
- :where([data-block='event-registration'], [data-block='course-registration'])
68516
- .er-whole-series-modal-btn--secondary {
68517
- background: transparent;
68518
- color: var(--er-on-surface);
68519
- border: 1px solid var(--er-border);
68520
- }
68521
-
68522
- :where(.theme-scope)
68523
- :where([data-block='event-registration'], [data-block='course-registration'])
68524
- .er-whole-series-modal-btn--secondary:hover {
68525
- background: var(--er-on-surface-hover-bg);
68526
- }
68527
-
68528
- /* =============================================================================
68529
- * Utility Classes
68530
- * =============================================================================
68531
- */
68532
- :where(.theme-scope)
68533
- :where([data-block='event-registration'], [data-block='course-registration'])
68534
- .er-whole-series-text--muted {
68535
- opacity: 0.7;
68536
- }
68537
-
68538
- :where(.theme-scope)
68539
- :where([data-block='event-registration'], [data-block='course-registration'])
68540
- .er-whole-series-text--error {
68541
- color: var(--er-error-text);
68542
- }
68543
-
68544
- :where(.theme-scope)
68545
- :where([data-block='event-registration'], [data-block='course-registration'])
68546
- .er-whole-series-text--success {
68547
- color: var(--er-success-text);
68548
- }
68549
-
68550
- :where(.theme-scope)
68551
- :where([data-block='event-registration'], [data-block='course-registration'])
68552
- .er-whole-series-sr-only {
68553
- position: absolute;
68554
- width: 1px;
68555
- height: 1px;
68556
- padding: 0;
68557
- margin: -1px;
68558
- overflow: hidden;
68559
- clip: rect(0, 0, 0, 0);
68560
- white-space: nowrap;
68561
- border-width: 0;
68562
- }
68563
-
68564
- /* Stack utility */
68565
- :where(.theme-scope)
68566
- :where([data-block='event-registration'], [data-block='course-registration'])
68567
- .er-whole-series-stack {
68568
- display: flex;
68569
- flex-direction: column;
68570
- }
68571
-
68572
- :where(.theme-scope)
68573
- :where([data-block='event-registration'], [data-block='course-registration'])
68574
- .er-whole-series-stack--gap-sm {
68575
- gap: 0.5rem;
68576
- }
68577
-
68578
- :where(.theme-scope)
68579
- :where([data-block='event-registration'], [data-block='course-registration'])
68580
- .er-whole-series-stack--gap-md {
68581
- gap: 1rem;
68582
- }
68583
-
68584
- :where(.theme-scope)
68585
- :where([data-block='event-registration'], [data-block='course-registration'])
68586
- .er-whole-series-stack--gap-lg {
68587
- gap: 1.5rem;
68588
- }
68589
-
68590
- /* =============================================================================
68591
- * Block: Newsletter Signup
68592
- * =============================================================================
68593
- */
68594
-
68595
- /* Newsletter copy styling */
68596
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
68597
- font-size: 1.5rem;
68598
- font-weight: 600;
68599
- }
68600
-
68601
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
68602
- font-size: 1rem;
68603
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68604
- opacity: 0.85;
68605
- }
68606
-
68607
- /* Newsletter form container */
68608
- :where(.theme-scope) .newsletter-form {
68609
- width: 100%;
68610
- max-width: 32rem;
68611
- margin-left: auto;
68612
- margin-right: auto;
68613
- }
68614
-
68615
- /* Newsletter form fields container */
68616
- :where(.theme-scope) .newsletter-form-fields {
68617
- display: flex;
68618
- flex-direction: column;
68619
- gap: var(--rb-gap-sm, 0.75rem);
68620
- }
68621
-
68622
- /* Individual field styling */
68623
- :where(.theme-scope) .newsletter-field {
68624
- display: flex;
68625
- flex-direction: column;
68626
- gap: 0.25rem;
68627
- }
68628
-
68629
- /* Required indicator */
68630
- :where(.theme-scope) .newsletter-required {
68631
- color: rgb(var(--tb-primary));
68632
- margin-left: 0.125rem;
68633
- }
68634
-
68635
- /* Submit button container */
68636
- :where(.theme-scope) .newsletter-submit {
68637
- margin-top: 0.5rem;
68638
- }
68639
-
68640
- /* ALTCHA widget container */
68641
- :where(.theme-scope) .newsletter-altcha {
68642
- margin-top: 0.75rem;
68643
- display: flex;
68644
- justify-content: center;
68645
- }
68646
-
68647
- /* Privacy note */
68648
- :where(.theme-scope) .newsletter-privacy-note {
68649
- margin-top: 0.75rem;
68650
- font-size: 1rem;
68651
- line-height: 1.6;
68652
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68653
- text-align: center;
68654
- }
68655
-
68656
- /* =============================================================================
68657
- * Inline Variant - Horizontal layout
68658
- * =============================================================================
68659
- */
68660
-
68661
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
68662
- flex-direction: row;
68663
- align-items: flex-end;
68664
- flex-wrap: wrap;
68665
- gap: var(--rb-gap-sm, 0.75rem);
68666
- }
68667
-
68668
- :where(.theme-scope) .newsletter-inline .newsletter-field {
68669
- flex: 1 1 auto;
68670
- min-width: 10rem;
68671
- }
68672
-
68673
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
68674
- margin-top: 0;
68675
- flex-shrink: 0;
68676
- }
68677
-
68678
- /* Mobile fallback for inline variant */
68679
- @container rb-site (max-width: 640px) {
68680
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68681
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
68682
- flex-direction: column;
68683
- }
68684
-
68685
- :where(.theme-scope) .newsletter-inline .newsletter-field {
68686
- min-width: 100%;
68687
- }
68688
- }
68689
- }
68690
-
68691
- /* =============================================================================
68692
- * Editorial Split Variant
68693
- * =============================================================================
68694
- */
68695
-
68696
- :where(.theme-scope) .newsletter-editorial-split {
68697
- display: grid;
68698
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
68699
- gap: clamp(2.5rem, 7vw, 7rem);
68700
- align-items: center;
68701
- text-align: left;
68702
- }
68703
-
68704
- :where(.theme-scope) .newsletter-editorial-split-copy {
68705
- display: flex;
68706
- flex-direction: column;
68707
- gap: var(--rb-gap-sm, 0.75rem);
68708
- }
68709
-
68710
- :where(.theme-scope) .newsletter-editorial-split-form {
68711
- min-width: 0;
68712
- }
68713
-
68714
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
68715
- max-width: none;
68716
- margin-inline: 0;
68717
- }
68718
-
68719
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
68720
- font-size: clamp(2rem, 4vw, 3.5rem);
68721
- font-weight: 500;
68722
- }
68723
-
68724
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
68725
- text-align: left;
68726
- }
68727
-
68728
- @container rb-site (max-width: 767px) {
68729
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68730
- :where(.theme-scope) .newsletter-editorial-split {
68731
- grid-template-columns: minmax(0, 1fr);
68732
- gap: 2rem;
68733
- }
68734
- }
68735
- }
68736
-
68737
- /* =============================================================================
68738
- * Success State
68739
- * =============================================================================
68740
- */
68741
-
68742
- :where(.theme-scope) .newsletter-success {
68743
- text-align: center;
68744
- }
68745
-
68746
- :where(.theme-scope) .newsletter-success .fb-success {
68747
- padding: 1rem 1.5rem;
68748
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
68749
- border-radius: var(--radius-md, 0.5rem);
68750
- color: rgb(var(--tb-text));
68751
- }
68752
-
68753
- /* =============================================================================
68754
- * Block: Contact + Newsletter
68755
- * =============================================================================
68756
- */
68757
-
68758
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
68759
- display: grid;
68760
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
68761
- gap: clamp(2.5rem, 6vw, 4rem);
68762
- align-items: start;
68763
- }
68764
-
68765
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
68766
- min-width: 0;
68767
- }
68768
-
68769
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
68770
- margin-bottom: 1.5rem;
68771
- }
68772
-
68773
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
68774
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
68775
- margin: 0 0 0.75rem;
68776
- }
68777
-
68778
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
68779
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
68780
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68781
- }
68782
-
68783
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
68784
- display: flex;
68785
- flex-direction: column;
68786
- align-items: flex-start;
68787
- }
68788
-
68789
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
68790
- max-width: none;
68791
- margin-left: 0;
68792
- margin-right: 0;
68793
- }
68794
-
68795
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
68796
- text-align: left;
68797
- }
68798
-
68799
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
68800
- display: flex;
68801
- flex-direction: column;
68802
- gap: 1rem;
68803
- }
68804
-
68805
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
68806
- display: grid;
68807
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
68808
- gap: 1rem;
68809
- }
68810
-
68811
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
68812
- display: flex;
68813
- flex-direction: column;
68814
- gap: 0.25rem;
68815
- }
68816
-
68817
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
68818
- display: flex;
68819
- flex-direction: column;
68820
- gap: 0.5rem;
68821
- border: none;
68822
- padding: 0;
68823
- margin: 0;
68824
- }
68825
-
68826
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
68827
- display: flex;
68828
- align-items: center;
68829
- gap: 0.5rem;
68830
- }
68831
-
68832
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
68833
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
68834
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68835
- border-radius: var(--rb-block-radius);
68836
- padding: 1rem;
68837
- font-size: 0.875rem;
68838
- }
68839
-
68840
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
68841
- background-color: var(--fb-success-bg);
68842
- color: var(--fb-success-text);
68843
- border: 1px solid var(--fb-success-border);
68844
- }
68845
-
68846
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
68847
- background-color: var(--fb-error-bg);
68848
- color: var(--fb-error-text);
68849
- border: 1px solid var(--fb-error-border);
68850
- }
68851
-
68852
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68853
- background-color: var(--fb-empty-bg);
68854
- color: var(--fb-empty-text);
68855
- border: 1px dashed var(--fb-empty-border);
68856
- text-align: center;
68857
- }
68858
-
68859
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
68860
- margin-top: 0.5rem;
68861
- }
68862
-
68863
- /* =============================================================================
68864
- * Block: Team Members
68865
- * =============================================================================
68866
- *
68867
- * Site/theme authors sometimes need different thumbnail shapes/sizes without
68868
- * changing global fragment defaults. We expose these controls on the block and
68869
- * style them via data attributes on the \`.rb-team-members\` wrapper.
68870
- */
68871
-
68872
- /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
68873
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
68874
- text-align: left;
68875
- }
68876
-
68877
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
68878
- align-items: flex-start;
68879
- text-align: left;
68880
- }
68881
-
68882
- @container rb-site (min-width: 1024px) {
68883
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68884
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
68885
- width: 75%;
68886
- margin-left: 0;
68887
- margin-right: auto;
68888
- }
68889
- }
68890
- }
68891
-
68892
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
68893
- display: block;
68894
- width: 100%;
68895
- height: auto;
68896
- }
68897
-
68898
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
68899
- font-weight: 600;
68900
- }
68901
-
68902
- /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
68903
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
68904
- --rb-team-thumb-max: 11.25rem; /* ~180px default */
68905
- --rb-team-image-basis: 33.333%;
68906
- }
68907
-
68908
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
68909
- --rb-team-thumb-max: 8.75rem; /* ~140px */
68910
- --rb-team-image-basis: 25%;
68911
- }
68912
-
68913
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
68914
- --rb-team-thumb-max: 11.25rem; /* ~180px */
68915
- --rb-team-image-basis: 33.333%;
68916
- }
68917
-
68918
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
68919
- --rb-team-thumb-max: 13.75rem; /* ~220px */
68920
- --rb-team-image-basis: 40%;
68921
- }
68922
-
68923
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
68924
- --rb-team-thumb-max: 17.5rem; /* ~280px */
68925
- --rb-team-image-basis: 50%;
68926
- }
68927
-
68928
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
68929
- --rb-team-thumb-max: 22.5rem; /* ~360px */
68930
- --rb-team-image-basis: 66.667%;
66677
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
66678
+ --rb-team-thumb-max: 22.5rem; /* ~360px */
66679
+ --rb-team-image-basis: 66.667%;
68931
66680
  }
68932
66681
 
68933
66682
  /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
@@ -73945,69 +71694,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
73945
71694
  }
73946
71695
  });
73947
71696
  //#endregion
73948
- //#region ../api/src/courseEndpointDefinitions.ts
73949
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
73950
- listCourses: {
73951
- path: "/sites/{siteId}/bookings/courses",
73952
- method: "GET",
73953
- auth: "user",
73954
- responseKind: "json"
73955
- },
73956
- exportCoursesCsv: {
73957
- path: "/sites/{siteId}/bookings/courses/export.csv",
73958
- method: "GET",
73959
- tags: [
73960
- "site-{siteId}",
73961
- "bookings",
73962
- "courses-{siteId}"
73963
- ],
73964
- errors: [],
73965
- auth: "user",
73966
- responseKind: "blob"
73967
- },
73968
- createCourse: {
73969
- path: "/sites/{siteId}/bookings/courses",
73970
- method: "POST",
73971
- auth: "user",
73972
- responseKind: "json",
73973
- errors: [
73974
- "validation:invalid_input",
73975
- "resource:not_found",
73976
- "resource:already_exists",
73977
- "resource:conflict",
73978
- "server:internal_error"
73979
- ]
73980
- },
73981
- getCourse: {
73982
- path: "/sites/{siteId}/bookings/courses/{courseId}",
73983
- method: "GET",
73984
- auth: "user",
73985
- responseKind: "json"
73986
- },
73987
- updateCourse: {
73988
- path: "/sites/{siteId}/bookings/courses/{courseId}",
73989
- method: "PATCH",
73990
- auth: "user",
73991
- responseKind: "json",
73992
- errors: [
73993
- "validation:invalid_input",
73994
- "resource:not_found",
73995
- "resource:conflict",
73996
- "server:internal_error"
73997
- ]
73998
- },
73999
- deleteCourse: {
74000
- path: "/sites/{siteId}/bookings/courses/{courseId}",
74001
- method: "DELETE",
74002
- auth: "user",
74003
- responseKind: "json",
74004
- errors: [
74005
- "validation:invalid_input",
74006
- "resource:not_found",
74007
- "resource:conflict",
74008
- "server:internal_error"
74009
- ]
74010
- },
71697
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
71698
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74011
71699
  deleteEventOffering: {
74012
71700
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
74013
71701
  method: "DELETE",
@@ -74020,20 +71708,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74020
71708
  "server:internal_error"
74021
71709
  ]
74022
71710
  },
74023
- duplicateCourse: {
74024
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
74025
- method: "POST",
74026
- auth: "user",
74027
- responseKind: "json",
74028
- errors: [
74029
- "validation:invalid_input",
74030
- "resource:not_found",
74031
- "resource:already_exists",
74032
- "server:internal_error"
74033
- ]
74034
- },
74035
- changeCourseContentOwnership: {
74036
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
71711
+ changeEventSeriesContentOwnership: {
71712
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
74037
71713
  method: "POST",
74038
71714
  auth: "user",
74039
71715
  responseKind: "json",
@@ -74044,8 +71720,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74044
71720
  "server:internal_error"
74045
71721
  ]
74046
71722
  },
74047
- addCourseEnrollment: {
74048
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
71723
+ addEventSeriesRegistration: {
71724
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
74049
71725
  method: "POST",
74050
71726
  auth: "user",
74051
71727
  responseKind: "json",
@@ -74056,33 +71732,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74056
71732
  "server:internal_error"
74057
71733
  ]
74058
71734
  },
74059
- listCourseEnrollments: {
74060
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
71735
+ listEventSeriesRegistrations: {
71736
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
74061
71737
  method: "GET",
74062
71738
  auth: "user",
74063
71739
  responseKind: "json"
74064
71740
  },
74065
- exportCourseEnrollmentsCsv: {
74066
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
71741
+ exportEventSeriesRegistrationsCsv: {
71742
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
74067
71743
  method: "GET",
74068
71744
  auth: "user",
74069
71745
  errors: [],
74070
71746
  responseKind: "blob"
74071
71747
  },
74072
- exportCourseWaitlistCsv: {
74073
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
74074
- method: "GET",
74075
- tags: [
74076
- "site-{siteId}",
74077
- "bookings",
74078
- "courses-{courseId}"
74079
- ],
74080
- auth: "user",
74081
- responseKind: "blob",
74082
- errors: []
74083
- },
74084
- updateCourseEnrollment: {
74085
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
71748
+ updateEventSeriesRegistration: {
71749
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
74086
71750
  method: "PATCH",
74087
71751
  auth: "user",
74088
71752
  responseKind: "json",
@@ -74470,71 +72134,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74470
72134
  errors: ["resource:not_found", "server:internal_error"],
74471
72135
  auth: "public",
74472
72136
  responseKind: "json"
74473
- },
74474
- registerForWholeSeries: {
74475
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
74476
- method: "POST",
74477
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
74478
- errors: [
74479
- "auth:unauthenticated",
74480
- "auth:forbidden",
74481
- "validation:invalid_input",
74482
- "resource:not_found",
74483
- "resource:conflict",
74484
- "resource:already_exists",
74485
- "server:internal_error"
74486
- ],
74487
- auth: "public",
74488
- responseKind: "json"
74489
- },
74490
- checkWholeSeriesEligibility: {
74491
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
74492
- method: "POST",
74493
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
74494
- errors: [
74495
- "auth:unauthenticated",
74496
- "resource:not_found",
74497
- "resource:conflict",
74498
- "server:internal_error"
74499
- ],
74500
- auth: "public",
74501
- responseKind: "json"
74502
- },
74503
- createWholeSeriesCheckout: {
74504
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
72137
+ }
72138
+ });
72139
+ //#endregion
72140
+ //#region ../api/src/publicEventEndpointDefinitions.ts
72141
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72142
+ getPublicEventRegistrationOptions: {
72143
+ path: "/public/sites/{siteId}/events/registration-options",
74505
72144
  method: "POST",
74506
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
72145
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
74507
72146
  auth: "public",
74508
72147
  responseKind: "json",
74509
72148
  errors: [
74510
- "auth:unauthenticated",
74511
72149
  "validation:invalid_input",
74512
72150
  "resource:not_found",
74513
72151
  "resource:conflict",
74514
72152
  "server:internal_error"
74515
72153
  ]
74516
72154
  },
74517
- getWholeSeriesRegistrationStatus: {
74518
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
72155
+ resolveEventSubroute: {
72156
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
74519
72157
  method: "GET",
74520
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
74521
- errors: ["resource:not_found", "server:internal_error"],
72158
+ revalidate: 60,
72159
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
74522
72160
  auth: "public",
74523
- responseKind: "json"
72161
+ responseKind: "json",
72162
+ errors: []
74524
72163
  }
74525
72164
  });
74526
72165
  //#endregion
74527
- //#region ../api/src/publicEventEndpointDefinitions.ts
74528
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
74529
- path: "/public/sites/{siteId}/events/subroutes/resolve",
74530
- method: "GET",
74531
- revalidate: 60,
74532
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
74533
- auth: "public",
74534
- responseKind: "json",
74535
- errors: []
74536
- } });
74537
- //#endregion
74538
72166
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
74539
72167
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74540
72168
  listSiteApiKeys: {
@@ -74902,7 +72530,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74902
72530
  }), 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, {
74903
72531
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
74904
72532
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
74905
- ...COURSE_ENDPOINT_DEFINITIONS
72533
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
74906
72534
  }, 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 };
74907
72535
  z$1.object({ refreshToken: z$1.string().min(1).max(4096) }).strict();
74908
72536
  z$1.object({
@@ -76048,6 +73676,68 @@ function stableSerialize(value) {
76048
73676
  return JSON.stringify(value);
76049
73677
  }
76050
73678
  //#endregion
73679
+ //#region ../api/src/bookingPaymentTermSchemas.ts
73680
+ const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
73681
+ const bookingInstalmentPlanSchema = z$1.discriminatedUnion("kind", [
73682
+ z$1.object({
73683
+ kind: z$1.literal("deposit_plus_one_remainder"),
73684
+ depositAmountCents: z$1.number().int().nonnegative(),
73685
+ depositRefundability: bookingDepositRefundPolicySchema,
73686
+ remainderDueCount: z$1.number().int().positive(),
73687
+ intervalUnit: z$1.enum([
73688
+ "day",
73689
+ "week",
73690
+ "month"
73691
+ ])
73692
+ }),
73693
+ z$1.object({
73694
+ kind: z$1.literal("deposit_plus_scheduled_instalments"),
73695
+ depositAmountCents: z$1.number().int().nonnegative(),
73696
+ depositRefundability: bookingDepositRefundPolicySchema,
73697
+ instalmentCount: z$1.number().int().positive(),
73698
+ intervalCount: z$1.number().int().positive(),
73699
+ intervalUnit: z$1.enum([
73700
+ "day",
73701
+ "week",
73702
+ "month"
73703
+ ])
73704
+ }),
73705
+ z$1.object({
73706
+ kind: z$1.literal("equal_scheduled_instalments"),
73707
+ instalmentCount: z$1.number().int().positive(),
73708
+ intervalCount: z$1.number().int().positive(),
73709
+ intervalUnit: z$1.enum([
73710
+ "day",
73711
+ "week",
73712
+ "month"
73713
+ ])
73714
+ })
73715
+ ]);
73716
+ const bookingFlexibleBalanceDueDateRuleSchema = z$1.discriminatedUnion("kind", [z$1.object({
73717
+ kind: z$1.literal("relative_to_start_date"),
73718
+ daysBeforeStart: z$1.number().int().positive()
73719
+ }), z$1.object({
73720
+ kind: z$1.literal("fixed_calendar_date"),
73721
+ dueAt: z$1.string().datetime()
73722
+ })]);
73723
+ const bookingFlexibleBalanceConfigSchema = z$1.object({
73724
+ upfrontAmountCents: z$1.number().int().nonnegative(),
73725
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
73726
+ depositRefundability: bookingDepositRefundPolicySchema
73727
+ });
73728
+ z$1.discriminatedUnion("kind", [
73729
+ z$1.object({ kind: z$1.literal("upfront") }),
73730
+ z$1.object({ kind: z$1.literal("deferred_manual") }),
73731
+ z$1.object({
73732
+ kind: z$1.literal("instalment_plan"),
73733
+ plan: bookingInstalmentPlanSchema
73734
+ }),
73735
+ z$1.object({
73736
+ kind: z$1.literal("flexible_balance"),
73737
+ config: bookingFlexibleBalanceConfigSchema
73738
+ })
73739
+ ]);
73740
+ //#endregion
76051
73741
  //#region ../api/src/navigationMenuValidation.ts
76052
73742
  function hasChildren(item) {
76053
73743
  return Array.isArray(item.children) && item.children.length > 0;
@@ -77144,40 +74834,6 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
77144
74834
  plural: "Events"
77145
74835
  }
77146
74836
  },
77147
- course: {
77148
- version: 1,
77149
- fields: [
77150
- {
77151
- id: "summary",
77152
- type: "textarea",
77153
- label: "Summary",
77154
- description: "Short teaser shown in listings.",
77155
- rows: 3
77156
- },
77157
- {
77158
- id: "image",
77159
- type: "media",
77160
- label: "Listing image",
77161
- description: "Optional image used for course cards and previews."
77162
- },
77163
- {
77164
- id: "body",
77165
- type: "richText",
77166
- label: "Details",
77167
- description: "Full course details and curriculum."
77168
- }
77169
- ],
77170
- routing: {
77171
- enabled: true,
77172
- pattern: "/courses/{slug}",
77173
- slugField: "slug",
77174
- prefix: "/courses/"
77175
- },
77176
- labels: {
77177
- singular: "Course",
77178
- plural: "Courses"
77179
- }
77180
- },
77181
74837
  "team-member": {
77182
74838
  version: 1,
77183
74839
  fields: [
@@ -77377,7 +75033,7 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
77377
75033
  function deriveFieldIdSet(schema) {
77378
75034
  return new Set(schema.fields.map((f) => f.id));
77379
75035
  }
77380
- deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.post), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.event), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.course), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["team-member"]), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.product), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.testimonial), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.page), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["product-category"]);
75036
+ deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.post), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.event), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["team-member"]), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.product), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.testimonial), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.page), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["product-category"]);
77381
75037
  //#endregion
77382
75038
  //#region ../field-primitives/src/bindings/index.ts
77383
75039
  const BINDING_TRANSFORMS$1 = {
@@ -77429,7 +75085,6 @@ const SYSTEM_ENTRY_SLOT_BLOCK_KIND = "system.entry-slot";
77429
75085
  //#region ../content-model/src/templates/defaults.ts
77430
75086
  const POST_EXCERPT_FALLBACK = fallbackBinding$1(fieldBinding$1("excerpt"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
77431
75087
  const EVENT_SUBHEADLINE_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
77432
- const COURSE_SUMMARY_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
77433
75088
  const ENTRY_TITLE_INLINE_TEXT = transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.TEXT_INLINE_TEXT, { input: metaBinding$1("title") });
77434
75089
  const POST_BODY_TEXT_BINDINGS = {
77435
75090
  body: fieldBinding$1("body"),
@@ -77544,7 +75199,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
77544
75199
  showVenue: true,
77545
75200
  showCapacity: true,
77546
75201
  successMessage: "Thank you for registering! Check your email for confirmation details.",
77547
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
77548
75202
  buttonText: "Complete Registration",
77549
75203
  buttonVariant: "primary"
77550
75204
  },
@@ -77555,64 +75209,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
77555
75209
  }
77556
75210
  ]
77557
75211
  },
77558
- course: {
77559
- templateKey: "default",
77560
- name: "Course detail",
77561
- description: "Standard landing page for multi-session courses.",
77562
- metadata: {},
77563
- blocks: [
77564
- {
77565
- blockKind: "block.hero",
77566
- scope: "entry",
77567
- bindings: {
77568
- eyebrow: literalBinding$1("Course"),
77569
- headline: metaBinding$1("title"),
77570
- headlineInline: ENTRY_TITLE_INLINE_TEXT,
77571
- subheadline: COURSE_SUMMARY_FALLBACK
77572
- }
77573
- },
77574
- {
77575
- blockKind: "block.course-details",
77576
- scope: "entry",
77577
- content: {
77578
- heading: "Course details",
77579
- showTitle: false,
77580
- showDescription: false,
77581
- showSessions: true,
77582
- sessionsLimit: "10",
77583
- showVenue: true,
77584
- showPrice: true,
77585
- showCapacity: true,
77586
- showEnrollmentStatus: true,
77587
- showMembershipNote: true
77588
- }
77589
- },
77590
- {
77591
- blockKind: SYSTEM_ENTRY_SLOT_BLOCK_KIND,
77592
- scope: "template",
77593
- content: {
77594
- slotKey: "main",
77595
- label: "Page content"
77596
- }
77597
- },
77598
- {
77599
- blockKind: "block.course-registration",
77600
- scope: "entry",
77601
- content: {
77602
- heading: "Enroll in this course",
77603
- showSessions: true,
77604
- showPrice: true,
77605
- showCapacity: true,
77606
- showVenue: true,
77607
- successMessage: "You're enrolled! Check your email for confirmation and session details.",
77608
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
77609
- membershipMessage: "Enrolled using your membership! Check your email for session details.",
77610
- buttonText: "Complete Enrollment",
77611
- buttonVariant: "primary"
77612
- }
77613
- }
77614
- ]
77615
- },
77616
75212
  "team-member": {
77617
75213
  templateKey: "default",
77618
75214
  name: "Team member profile",