@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({
@@ -39432,7 +39062,7 @@ const offeringsPreviewManifest = createBlockManifest({
39432
39062
  fallback: "published"
39433
39063
  } },
39434
39064
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
39435
- courses: { $bind: { from: "data.courses" } },
39065
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
39436
39066
  ...offeringsPreviewEventDataBindings
39437
39067
  })
39438
39068
  ], { gap: "lg" }),
@@ -39449,7 +39079,7 @@ const offeringsPreviewBlockDefinition = {
39449
39079
  dataSchemas: {
39450
39080
  ...offeringsPreviewEventDataSchemas,
39451
39081
  routeCandidates: publicRouteCandidatesSchema.optional(),
39452
- courses: publicWholeSeriesOfferingsArraySchema.optional()
39082
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
39453
39083
  },
39454
39084
  dataLoaders: {
39455
39085
  ...offeringsPreviewEventDataLoaders,
@@ -39458,7 +39088,7 @@ const offeringsPreviewBlockDefinition = {
39458
39088
  params: {},
39459
39089
  mode: "server"
39460
39090
  },
39461
- courses: {
39091
+ wholeSeriesOfferings: {
39462
39092
  endpoint: "listPublicWholeSeriesOfferings",
39463
39093
  params: {
39464
39094
  siteId: { $bind: { from: "$root.siteId" } },
@@ -44560,22 +44190,6 @@ const systemBlockDefinitions = [
44560
44190
  weight: "standard"
44561
44191
  })]
44562
44192
  })),
44563
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
44564
- flow: conversionFlow,
44565
- layoutProfiles: [layoutProfile({
44566
- variantKey: "default",
44567
- family: "form",
44568
- weight: "standard"
44569
- })]
44570
- })),
44571
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
44572
- flow: offeringsFlow,
44573
- layoutProfiles: [layoutProfile({
44574
- variantKey: "default",
44575
- family: "stack",
44576
- weight: "standard"
44577
- })]
44578
- })),
44579
44193
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
44580
44194
  flow: offeringsFlow,
44581
44195
  layoutProfiles: [layoutProfile({
@@ -47475,7 +47089,7 @@ function emptySelection(timeZone) {
47475
47089
  timeZone
47476
47090
  };
47477
47091
  }
47478
- function parseLimit$1(value, fallback) {
47092
+ function parseLimit(value, fallback) {
47479
47093
  if (value === "all") return Number.MAX_SAFE_INTEGER;
47480
47094
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
47481
47095
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -47558,7 +47172,7 @@ function selectEventDetails(args) {
47558
47172
  subject: args.subject
47559
47173
  }));
47560
47174
  const occurrenceContext = args.occurrenceContext ?? null;
47561
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
47175
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
47562
47176
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
47563
47177
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
47564
47178
  if (!candidate) return emptySelection(timeZone);
@@ -47634,8 +47248,8 @@ function resolveEventDetailsPresentation(input) {
47634
47248
  };
47635
47249
  }
47636
47250
  //#endregion
47637
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
47638
- function CoursePricingDisplay({ pricing, acceptedItems }) {
47251
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
47252
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
47639
47253
  return /* @__PURE__ */ jsxs("div", {
47640
47254
  className: "rb-mt-6",
47641
47255
  children: [
@@ -47647,7 +47261,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
47647
47261
  className: "rb-flex rb-flex-col rb-gap-2",
47648
47262
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
47649
47263
  option.name,
47650
- ": ",
47264
+ ":",
47265
+ " ",
47651
47266
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
47652
47267
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
47653
47268
  className: "rb-caption status-muted",
@@ -47668,7 +47283,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
47668
47283
  const label = preview.publicLabel.trim() || "Discount";
47669
47284
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
47670
47285
  }
47671
- function TeamMemberName$1({ name, profilePath }) {
47286
+ function TeamMemberName({ name, profilePath }) {
47672
47287
  return profilePath ? /* @__PURE__ */ jsx("a", {
47673
47288
  href: profilePath,
47674
47289
  className: "rb-hover-opacity-80",
@@ -47705,7 +47320,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
47705
47320
  children: "No registration required - just show up"
47706
47321
  })]
47707
47322
  });
47708
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
47323
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
47709
47324
  pricing: coursePricing,
47710
47325
  acceptedItems: [...acceptedItems]
47711
47326
  });
@@ -47780,7 +47395,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
47780
47395
  children: "With"
47781
47396
  }), /* @__PURE__ */ jsx("div", {
47782
47397
  className: "rb-flex rb-flex-col rb-gap-3",
47783
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
47398
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
47784
47399
  name: member.name,
47785
47400
  profilePath: member.profilePath
47786
47401
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -47940,9 +47555,13 @@ function EventDetailsSSR(props) {
47940
47555
  const { blockId, occurrenceContext = null, subject, events = null, className, children } = props;
47941
47556
  const nowIso = (/* @__PURE__ */ new Date()).toISOString();
47942
47557
  const normalizedSubject = normalizeEventRegistrationPageSurfaceSubject(subject);
47558
+ const scopedEvents = events === null ? null : resolveEventRegistrationScopedEvents(events, {
47559
+ occurrenceContext,
47560
+ subject: normalizedSubject
47561
+ });
47943
47562
  const presentation = resolveEventDetailsPresentation({
47944
47563
  ...props,
47945
- events,
47564
+ events: scopedEvents,
47946
47565
  occurrenceContext,
47947
47566
  subject: normalizedSubject,
47948
47567
  nowIso
@@ -47955,7 +47574,7 @@ function EventDetailsSSR(props) {
47955
47574
  /* @__PURE__ */ jsx(IslandPropsScript, { value: {
47956
47575
  occurrenceContext,
47957
47576
  subject: normalizedSubject,
47958
- events,
47577
+ events: scopedEvents,
47959
47578
  showVenue: presentation.showVenue,
47960
47579
  showMap: presentation.showMap,
47961
47580
  showOtherDates: presentation.showOtherDates,
@@ -48059,352 +47678,6 @@ function LocationMapSSR(props) {
48059
47678
  });
48060
47679
  }
48061
47680
  //#endregion
48062
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
48063
- /**
48064
- * Resolves native run-page ownership without falling back to entry or slug
48065
- * coincidence when a page-surface subject is present but invalid.
48066
- */
48067
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
48068
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
48069
- const parsed = parseEventPageSurfaceSubject(subjectValue);
48070
- if (!parsed.ok) return {
48071
- kind: "unsupported",
48072
- reason: parsed.error.kind
48073
- };
48074
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
48075
- const allowedSeriesIds = new Set(seriesIds);
48076
- return {
48077
- kind: "scoped",
48078
- subject: parsed.value,
48079
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
48080
- };
48081
- }
48082
- function eventSeriesIdsForSubject(subject) {
48083
- switch (subject.kind) {
48084
- case "eventSeries": return [subject.eventSeriesId];
48085
- case "eventOffering": return subject.availableEventSeriesIds;
48086
- default: return assertNever$23(subject);
48087
- }
48088
- }
48089
- //#endregion
48090
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
48091
- /** Temporary Course-block adapter over canonical Event run scoping. */
48092
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
48093
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
48094
- return scope.kind === "scoped" ? {
48095
- kind: "scoped",
48096
- subject: scope.subject,
48097
- courses: scope.runs
48098
- } : scope;
48099
- }
48100
- //#endregion
48101
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
48102
- function selectCourseDetails(args) {
48103
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
48104
- if (pageSurfaceScope.kind === "unsupported") return {
48105
- mode: "unsupportedPageSurfaceSubject",
48106
- selected: null,
48107
- scoped: []
48108
- };
48109
- if (pageSurfaceScope.kind === "scoped") {
48110
- const scoped = [...pageSurfaceScope.courses];
48111
- return {
48112
- mode: "pageSurfaceSubject",
48113
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
48114
- scoped
48115
- };
48116
- }
48117
- return {
48118
- mode: "unsupportedPageSurfaceSubject",
48119
- selected: null,
48120
- scoped: []
48121
- };
48122
- }
48123
- //#endregion
48124
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
48125
- function toValidDate(value) {
48126
- if (!value) return null;
48127
- const date = new Date(value);
48128
- return Number.isNaN(date.getTime()) ? null : date;
48129
- }
48130
- function getCourseDateRange(course) {
48131
- const datedSessions = (course.sessions ?? []).map((session) => ({
48132
- session,
48133
- start: toValidDate(session.startsAt),
48134
- end: toValidDate(session.endsAt)
48135
- })).filter((value) => value.start !== null || value.end !== null);
48136
- if (datedSessions.length === 0) return {
48137
- start: null,
48138
- end: null,
48139
- startIso: null,
48140
- endIso: null,
48141
- timeZone: null
48142
- };
48143
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
48144
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
48145
- return {
48146
- start: startSession?.start ?? null,
48147
- end: endSession?.end ?? null,
48148
- startIso: startSession?.session.startsAt ?? null,
48149
- endIso: endSession?.session.endsAt ?? null,
48150
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
48151
- };
48152
- }
48153
- function formatCourseDateRange(range) {
48154
- const { startIso, endIso, timeZone } = range;
48155
- const dateFormat = {
48156
- month: "numeric",
48157
- day: "numeric",
48158
- year: "numeric"
48159
- };
48160
- const effectiveTimeZone = toBookingTimeZone(timeZone);
48161
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
48162
- startsAt: iso,
48163
- timeZone: effectiveTimeZone
48164
- }), dateFormat);
48165
- const formatRangeDateOnly = (startsAt, endsAt) => {
48166
- const startText = formatSingleDate(startsAt);
48167
- const endText = formatSingleDate(endsAt);
48168
- return startText === endText ? startText : `${startText} – ${endText}`;
48169
- };
48170
- if (!startIso && !endIso) return "Dates TBD";
48171
- if (startIso && !endIso) return formatSingleDate(startIso);
48172
- if (!startIso && endIso) return formatSingleDate(endIso);
48173
- if (!startIso || !endIso) return "Dates TBD";
48174
- return formatRangeDateOnly(startIso, endIso);
48175
- }
48176
- //#endregion
48177
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
48178
- function TeamMemberName({ name, profilePath }) {
48179
- return profilePath ? /* @__PURE__ */ jsx("a", {
48180
- href: profilePath,
48181
- className: "rb-hover-opacity-80",
48182
- children: /* @__PURE__ */ jsx("strong", { children: name })
48183
- }) : /* @__PURE__ */ jsx("strong", { children: name });
48184
- }
48185
- function parseLimit(value, fallback) {
48186
- if (value === "all") return "all";
48187
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
48188
- return Number.isFinite(n) && n > 0 ? n : fallback;
48189
- }
48190
- function CourseDetailsView(props) {
48191
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
48192
- if (!course) return /* @__PURE__ */ jsx("p", {
48193
- className: "rb-caption status-muted",
48194
- children: emptyMessage
48195
- });
48196
- const pricing = resolveWholeSeriesPricingState(course);
48197
- const sessionLimit = parseLimit(sessionsLimit, 10);
48198
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
48199
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
48200
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
48201
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
48202
- const teamMembers = course.teamMembers ?? [];
48203
- return /* @__PURE__ */ jsxs("div", {
48204
- className: "rb-flex rb-flex-col rb-gap-6",
48205
- children: [
48206
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
48207
- /* @__PURE__ */ jsxs("div", {
48208
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
48209
- children: [/* @__PURE__ */ jsxs("div", {
48210
- className: "rb-flex rb-flex-col rb-gap-4",
48211
- children: [
48212
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
48213
- className: "rb-label rb-mb-2",
48214
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
48215
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
48216
- className: "rb-flex rb-flex-col rb-gap-2",
48217
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
48218
- option.name,
48219
- ": ",
48220
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
48221
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
48222
- className: "rb-caption status-muted",
48223
- children: option.description
48224
- }) : null] }, option.id))
48225
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
48226
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
48227
- className: "rb-label rb-mb-2",
48228
- children: "Spots"
48229
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
48230
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
48231
- className: "rb-label rb-mb-2",
48232
- children: "Membership"
48233
- }), /* @__PURE__ */ jsx("p", {
48234
- className: "rb-caption status-muted",
48235
- children: "Eligible memberships can be used for free enrollment"
48236
- })] }),
48237
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
48238
- className: "rb-label rb-mb-2",
48239
- children: "With"
48240
- }), /* @__PURE__ */ jsx("div", {
48241
- className: "rb-flex rb-flex-col rb-gap-3",
48242
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
48243
- name: teamMember.name,
48244
- profilePath: teamMember.profilePath
48245
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
48246
- className: "rb-caption status-muted",
48247
- children: teamMember.summary
48248
- })] }, teamMember.id))
48249
- })] })
48250
- ]
48251
- }), /* @__PURE__ */ jsxs("div", {
48252
- className: "rb-flex rb-flex-col rb-gap-4",
48253
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
48254
- /* @__PURE__ */ jsx("div", {
48255
- className: "rb-label rb-mb-2",
48256
- children: "Venue"
48257
- }),
48258
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
48259
- course.venue.address && /* @__PURE__ */ jsx("p", {
48260
- className: "rb-caption status-muted",
48261
- children: course.venue.address
48262
- })
48263
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
48264
- className: "rb-label rb-mb-2",
48265
- children: "Enrollment"
48266
- }), /* @__PURE__ */ jsx("p", {
48267
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
48268
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
48269
- })] })]
48270
- })]
48271
- }),
48272
- descriptionDoc && /* @__PURE__ */ jsx("div", {
48273
- className: "cd-description",
48274
- children: /* @__PURE__ */ jsx(RichText$2, { doc: descriptionDoc })
48275
- }),
48276
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
48277
- /* @__PURE__ */ jsx("div", {
48278
- className: "rb-label",
48279
- children: "Sessions"
48280
- }),
48281
- /* @__PURE__ */ jsx("div", {
48282
- className: "rb-mt-2 rb-tiles-grid",
48283
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
48284
- className: "rb-tile",
48285
- children: /* @__PURE__ */ jsx(DateTimeTile, {
48286
- startsAt: s.startsAt,
48287
- endsAt: s.endsAt
48288
- })
48289
- }, s.id))
48290
- }),
48291
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
48292
- className: "cd-sessions__more",
48293
- children: [
48294
- "Showing ",
48295
- visibleSessions.length,
48296
- " of ",
48297
- sortedSessions.length,
48298
- " sessions."
48299
- ]
48300
- })
48301
- ] })
48302
- ]
48303
- });
48304
- }
48305
- //#endregion
48306
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
48307
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
48308
- const selection = selectCourseDetails({
48309
- courses: courses ?? null,
48310
- subject
48311
- });
48312
- const parsedSubject = parseEventPageSurfaceSubject(subject);
48313
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
48314
- const now = /* @__PURE__ */ new Date();
48315
- const scopedWithRange = selection.scoped.map((c) => ({
48316
- course: c,
48317
- range: getCourseDateRange(c)
48318
- }));
48319
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
48320
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
48321
- });
48322
- 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;
48323
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
48324
- return /* @__PURE__ */ jsxs("div", {
48325
- className: `course-details ${className ?? ""}`.trim(),
48326
- "data-block": "course-details",
48327
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
48328
- course: selection.selected,
48329
- showTitle,
48330
- showDescription,
48331
- showSessions,
48332
- sessionsLimit,
48333
- showVenue,
48334
- showPrice,
48335
- showCapacity,
48336
- showEnrollmentStatus,
48337
- showMembershipNote
48338
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
48339
- className: "rb-flex rb-flex-col rb-gap-3",
48340
- children: [
48341
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
48342
- className: "rb-label rb-mb-2",
48343
- children: "Upcoming runs"
48344
- }), /* @__PURE__ */ jsx("p", {
48345
- className: "rb-caption status-muted",
48346
- children: "Choose a run to see sessions and details."
48347
- })] }),
48348
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
48349
- className: "rb-flex rb-flex-col rb-gap-2",
48350
- children: nonPastRuns.map(({ course, range }) => {
48351
- const start = range.start;
48352
- const end = range.end;
48353
- const isInProgress = Boolean(start && end && start <= now && end > now);
48354
- return /* @__PURE__ */ jsx("li", {
48355
- className: "rb-rounded-md rb-border rb-p-3",
48356
- children: /* @__PURE__ */ jsx("div", {
48357
- className: "rb-flex rb-flex-col rb-gap-1",
48358
- children: /* @__PURE__ */ jsxs("div", {
48359
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
48360
- children: [/* @__PURE__ */ jsxs("div", {
48361
- className: "rb-min-w-0",
48362
- children: [/* @__PURE__ */ jsx("div", {
48363
- className: "rb-truncate",
48364
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
48365
- }), /* @__PURE__ */ jsx("div", {
48366
- className: "rb-caption status-muted",
48367
- children: formatCourseDateRange(range)
48368
- })]
48369
- }), /* @__PURE__ */ jsx("div", {
48370
- className: "rb-caption status-muted rb-shrink-0",
48371
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
48372
- })]
48373
- })
48374
- })
48375
- }, course.eventSeriesId);
48376
- })
48377
- }) : /* @__PURE__ */ jsx("p", {
48378
- className: "rb-caption status-muted",
48379
- children: "No upcoming runs."
48380
- }),
48381
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
48382
- className: "rb-caption status-muted",
48383
- children: [
48384
- "Last run: ",
48385
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
48386
- " (",
48387
- formatCourseDateRange(lastPastRun.range),
48388
- ")"
48389
- ]
48390
- }) : null
48391
- ]
48392
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
48393
- course: null,
48394
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
48395
- showTitle,
48396
- showDescription,
48397
- showSessions,
48398
- sessionsLimit,
48399
- showVenue,
48400
- showPrice,
48401
- showCapacity,
48402
- showEnrollmentStatus,
48403
- showMembershipNote
48404
- }), children]
48405
- });
48406
- }
48407
- //#endregion
48408
47681
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
48409
47682
  /**
48410
47683
  * EventSpotlight Component
@@ -48608,7 +47881,7 @@ function deriveCourseScheduleSummary(course) {
48608
47881
  sessionCount: sessions.length
48609
47882
  };
48610
47883
  }
48611
- function nextCourseSessionStart(course) {
47884
+ function nextWholeSeriesSessionStart(course) {
48612
47885
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
48613
47886
  }
48614
47887
  function occurrenceFromEvent(event) {
@@ -48762,7 +48035,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
48762
48035
  function buildItemDataMap(props) {
48763
48036
  const routeCandidates = props.routeCandidates?.routes ?? [];
48764
48037
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
48765
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
48038
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
48766
48039
  }
48767
48040
  function eventDataFromMaybeArray(events) {
48768
48041
  return events ? {
@@ -48816,8 +48089,8 @@ function renderOfferingGroupItems(presentation, items, options) {
48816
48089
  }
48817
48090
  }
48818
48091
  function compareCoursesByNextSession(left, right) {
48819
- const leftStart = nextCourseSessionStart(left);
48820
- const rightStart = nextCourseSessionStart(right);
48092
+ const leftStart = nextWholeSeriesSessionStart(left);
48093
+ const rightStart = nextWholeSeriesSessionStart(right);
48821
48094
  if (leftStart === null) return rightStart === null ? 0 : 1;
48822
48095
  if (rightStart === null) return -1;
48823
48096
  return leftStart.localeCompare(rightStart);
@@ -49756,45 +49029,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
49756
49029
  });
49757
49030
  }
49758
49031
  //#endregion
49759
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
49760
- /**
49761
- * Server-safe placeholder for course registration.
49762
- * Provides a static container for island hydration without importing client hooks.
49763
- */
49764
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
49765
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
49766
- siteId,
49767
- apiBaseUrl,
49768
- portalToken,
49769
- subject,
49770
- courses,
49771
- className,
49772
- showSessions,
49773
- showPrice,
49774
- showCapacity,
49775
- showVenue,
49776
- successMessage,
49777
- waitlistMessage,
49778
- membershipMessage,
49779
- buttonText,
49780
- buttonVariant,
49781
- stage
49782
- });
49783
- return /* @__PURE__ */ jsxs("div", {
49784
- className: `course-registration ${className ?? ""}`.trim(),
49785
- "data-block": "course-registration",
49786
- ...getIslandRootProps("course-registration", blockId),
49787
- children: [
49788
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
49789
- /* @__PURE__ */ jsx("div", {
49790
- className: "course-registration__summary",
49791
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
49792
- }),
49793
- children
49794
- ]
49795
- });
49796
- }
49797
- //#endregion
49798
49032
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
49799
49033
  function GiftingSSR({ blockId, ...rest }) {
49800
49034
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -51280,7 +50514,6 @@ const runtimeBackedBlockServerEntries = {
51280
50514
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
51281
50515
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
51282
50516
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
51283
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
51284
50517
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
51285
50518
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
51286
50519
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -51313,7 +50546,6 @@ const serverComponentRegistry = {
51313
50546
  "booking-form": BookingFormSSR,
51314
50547
  "event-details": EventDetailsSSR,
51315
50548
  "location-map": LocationMapSSR,
51316
- "course-details": CourseDetailsSSR,
51317
50549
  "event-spotlight": EventSpotlight,
51318
50550
  "event-combined": EventCombinedSSR,
51319
50551
  "offerings-preview": OfferingsPreviewNode,
@@ -55768,176 +55000,6 @@ ${root} {
55768
55000
  `;
55769
55001
  }
55770
55002
  //#endregion
55771
- //#region ../theme-core/src/blocks/vars/course-details.ts
55772
- /**
55773
- * Generate CSS variables for the course-details block.
55774
- *
55775
- * Variables defined:
55776
- * - Enrollment status colors (open/closed)
55777
- * - Capacity indicator colors (available/low/full)
55778
- * - Price display colors (free indicator)
55779
- */
55780
- function generateCourseDetailsVars({ themeId }) {
55781
- return `
55782
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
55783
- /* Enrollment status */
55784
- --cd-enrollment-open-text: rgb(var(--tb-success));
55785
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
55786
-
55787
- /* Capacity indicator */
55788
- --cd-capacity-available-text: rgb(var(--tb-success));
55789
- --cd-capacity-low-text: rgb(var(--tb-warning));
55790
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
55791
-
55792
- /* Price styling */
55793
- --cd-price-free-text: rgb(var(--tb-success));
55794
- }
55795
- `;
55796
- }
55797
- //#endregion
55798
- //#region ../theme-core/src/blocks/vars/course-registration.ts
55799
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
55800
- /* Temporary bridge while persisted Course blocks render the Event-owned
55801
- whole-series registration runtime. Removed with the Course block. */
55802
- --er-step-active: var(--cr-step-active);
55803
- --er-step-inactive: var(--cr-step-inactive);
55804
- --er-step-completed: var(--cr-step-completed);
55805
- --er-step-text: var(--cr-step-text);
55806
- --er-step-text-active: var(--cr-step-text-active);
55807
- --er-step-connector: var(--cr-step-connector);
55808
- --er-step-title-size: var(--cr-step-title-size);
55809
- --er-success-bg: var(--cr-success-bg);
55810
- --er-success-text: var(--cr-success-text);
55811
- --er-error-bg: var(--cr-error-bg);
55812
- --er-error-text: var(--cr-error-text);
55813
- --er-waitlist-bg: var(--cr-waitlist-bg);
55814
- --er-waitlist-text: var(--cr-waitlist-text);
55815
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
55816
- --er-capacity-available-text: var(--cr-capacity-available-text);
55817
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
55818
- --er-capacity-low-text: var(--cr-capacity-low-text);
55819
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
55820
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
55821
- --er-border: var(--cr-border);
55822
- --er-border-hover: var(--cr-border-hover);
55823
- --er-border-selected: var(--cr-border-selected);
55824
- --er-border-error: var(--cr-border-error);
55825
- --er-focus-ring: var(--cr-focus-ring);
55826
- --er-required: var(--cr-required);
55827
- --er-payment-border: var(--cr-payment-border);
55828
- --er-payment-border-hover: var(--cr-payment-border-hover);
55829
- --er-payment-border-selected: var(--cr-payment-border-selected);
55830
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
55831
- --er-check-bg: var(--cr-check-bg);
55832
- --er-check-text: var(--cr-check-text);
55833
- --er-summary-bg: var(--cr-summary-bg);
55834
- --er-summary-border: var(--cr-summary-border);
55835
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
55836
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
55837
- `;
55838
- /**
55839
- * Generate CSS variables for the course-registration block.
55840
- *
55841
- * Variables defined:
55842
- * - Step indicator colors (active, inactive, completed, text, connector)
55843
- * - Success/error/waitlist state backgrounds and text colors
55844
- * - Capacity badge colors (available, low, sold-out)
55845
- * - Border colors for various interaction states
55846
- * - Input focus and required marker styling
55847
- * - Payment option card styling
55848
- * - Checkmark indicator colors
55849
- * - Summary styling
55850
- */
55851
- function generateCourseRegistrationVars({ themeId }) {
55852
- return `
55853
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
55854
- /* Step indicator */
55855
- --cr-step-active: rgb(var(--tb-primary));
55856
- --cr-step-inactive: rgb(var(--tb-mutedText));
55857
- --cr-step-completed: rgb(var(--tb-success));
55858
- --cr-step-text: rgb(255 255 255);
55859
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
55860
- --cr-step-connector: rgba(var(--tb-border), 0.5);
55861
-
55862
- /* Step title */
55863
- --cr-step-title-size: 1.5rem;
55864
-
55865
- /* State backgrounds with alpha */
55866
- --cr-success-bg: rgba(var(--tb-success), 0.1);
55867
- --cr-success-text: rgb(var(--tb-success));
55868
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
55869
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
55870
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
55871
- --cr-waitlist-text: rgb(var(--tb-warning));
55872
-
55873
- /* Capacity badges */
55874
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
55875
- --cr-capacity-available-text: rgb(var(--tb-success));
55876
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
55877
- --cr-capacity-low-text: rgb(var(--tb-warning));
55878
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
55879
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
55880
-
55881
- /* Borders */
55882
- --cr-border: rgb(var(--tb-border));
55883
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
55884
- --cr-border-selected: rgb(var(--tb-primary));
55885
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
55886
-
55887
- /* Input focus */
55888
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
55889
-
55890
- /* Required marker */
55891
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
55892
-
55893
- /* Payment option cards */
55894
- --cr-payment-border: rgb(var(--tb-border));
55895
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
55896
- --cr-payment-border-selected: rgb(var(--tb-primary));
55897
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
55898
-
55899
- /* Checkmark indicator */
55900
- --cr-check-bg: rgb(var(--tb-primary));
55901
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
55902
-
55903
- /* Summary */
55904
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
55905
- --cr-summary-border: rgb(var(--tb-border));
55906
-
55907
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
55908
-
55909
- /* Shared registration-surface mappings (issue 1174).
55910
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
55911
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
55912
- keep working unchanged. */
55913
- --rb-reg-radius: var(--rb-block-radius);
55914
- --rb-reg-border: var(--cr-border);
55915
- --rb-reg-border-hover: var(--cr-border-hover);
55916
- --rb-reg-border-selected: var(--cr-border-selected);
55917
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
55918
- --rb-reg-option-bg: rgb(var(--tb-background));
55919
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
55920
- --rb-reg-surface-bg: rgb(var(--tb-surface));
55921
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
55922
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
55923
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
55924
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
55925
- --rb-reg-check-bg: var(--cr-check-bg);
55926
- --rb-reg-check-text: var(--cr-check-text);
55927
- --rb-reg-step-active: var(--cr-step-active);
55928
- --rb-reg-step-completed: var(--cr-step-completed);
55929
- --rb-reg-step-inactive: var(--cr-step-inactive);
55930
- --rb-reg-step-text: var(--cr-step-text);
55931
- --rb-reg-step-text-active: var(--cr-step-text-active);
55932
- --rb-reg-step-connector: var(--cr-step-connector);
55933
- --rb-reg-summary-bg: var(--cr-summary-bg);
55934
- --rb-reg-summary-border: var(--cr-summary-border);
55935
- --rb-reg-focus-ring: var(--cr-focus-ring);
55936
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
55937
- }
55938
- `;
55939
- }
55940
- //#endregion
55941
55003
  //#region ../theme-core/src/blocks/registry.ts
55942
55004
  /**
55943
55005
  * Global registry of block var generators.
@@ -55952,8 +55014,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
55952
55014
  blockVarRegistry.set("form", generateFormBlockVars);
55953
55015
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
55954
55016
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
55955
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
55956
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
55957
55017
  /**
55958
55018
  * Generate all Tier 3 block-specific CSS variables.
55959
55019
  *
@@ -60845,7 +59905,7 @@ const containerResponsiveThemeCss = `/*
60845
59905
  * Shared: Registration Surface (issue 1174)
60846
59906
  *
60847
59907
  * Wizard-surface primitives shared by the event-registration,
60848
- * course-registration and appointment-booking blocks: surface container,
59908
+ * appointment-booking blocks: surface container,
60849
59909
  * selectable option cards, step indicator, wizard actions row, on-surface
60850
59910
  * text ramp, layout stacks, summary box and skeleton shell lines.
60851
59911
  *
@@ -60888,7 +59948,7 @@ const containerResponsiveThemeCss = `/*
60888
59948
  }
60889
59949
 
60890
59950
  /* Surface container */
60891
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59951
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
60892
59952
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
60893
59953
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
60894
59954
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -60918,7 +59978,7 @@ const containerResponsiveThemeCss = `/*
60918
59978
  *
60919
59979
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
60920
59980
  * pairing is pinned by registration-surface-action-reset.test.ts. */
60921
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59981
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
60922
59982
  --rb-action-primary-base-background-color: initial;
60923
59983
  --rb-action-primary-base-background-image: initial;
60924
59984
  --rb-action-primary-base-color: initial;
@@ -61026,7 +60086,7 @@ const containerResponsiveThemeCss = `/*
61026
60086
  }
61027
60087
 
61028
60088
  /* Selectable option card */
61029
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
60089
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
61030
60090
  position: relative;
61031
60091
  display: flex;
61032
60092
  align-items: flex-start;
@@ -61043,34 +60103,34 @@ const containerResponsiveThemeCss = `/*
61043
60103
  box-shadow var(--rb-block-transition, 150ms) ease;
61044
60104
  }
61045
60105
 
61046
- :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"]) {
60106
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
61047
60107
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
61048
60108
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
61049
60109
  }
61050
60110
 
61051
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
60111
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
61052
60112
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
61053
60113
  outline-offset: 2px;
61054
60114
  }
61055
60115
 
61056
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
60116
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
61057
60117
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
61058
60118
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
61059
60119
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
61060
60120
  }
61061
60121
 
61062
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
60122
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
61063
60123
  cursor: not-allowed;
61064
60124
  opacity: 0.7;
61065
60125
  }
61066
60126
 
61067
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
60127
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
61068
60128
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
61069
60129
  box-shadow: none;
61070
60130
  }
61071
60131
 
61072
60132
  /* Check indicator */
61073
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
60133
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
61074
60134
  flex-shrink: 0;
61075
60135
  width: 1.25rem;
61076
60136
  height: 1.25rem;
@@ -61081,18 +60141,18 @@ const containerResponsiveThemeCss = `/*
61081
60141
  justify-content: center;
61082
60142
  }
61083
60143
 
61084
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
60144
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
61085
60145
  width: 0.75rem;
61086
60146
  height: 0.75rem;
61087
60147
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
61088
60148
  }
61089
60149
 
61090
60150
  /* Step indicator */
61091
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
60151
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
61092
60152
  margin-bottom: 1.5rem;
61093
60153
  }
61094
60154
 
61095
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
60155
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
61096
60156
  display: flex;
61097
60157
  align-items: center;
61098
60158
  justify-content: center;
@@ -61102,13 +60162,13 @@ const containerResponsiveThemeCss = `/*
61102
60162
  margin: 0;
61103
60163
  }
61104
60164
 
61105
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
60165
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
61106
60166
  display: flex;
61107
60167
  align-items: center;
61108
60168
  gap: 0.5rem;
61109
60169
  }
61110
60170
 
61111
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
60171
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
61112
60172
  width: 1.75rem;
61113
60173
  height: 1.75rem;
61114
60174
  border-radius: 50%;
@@ -61122,47 +60182,47 @@ const containerResponsiveThemeCss = `/*
61122
60182
  transition: background-color var(--rb-block-transition, 150ms) ease;
61123
60183
  }
61124
60184
 
61125
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
60185
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
61126
60186
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
61127
60187
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
61128
60188
  }
61129
60189
 
61130
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
60190
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
61131
60191
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
61132
60192
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
61133
60193
  }
61134
60194
 
61135
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
60195
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
61136
60196
  width: 0.75rem;
61137
60197
  height: 0.75rem;
61138
60198
  }
61139
60199
 
61140
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
60200
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
61141
60201
  width: 2rem;
61142
60202
  height: 2px;
61143
60203
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
61144
60204
  }
61145
60205
 
61146
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
60206
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
61147
60207
  font-size: 0.75rem;
61148
60208
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
61149
60209
  display: none;
61150
60210
  }
61151
60211
 
61152
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
60212
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
61153
60213
  font-weight: 500;
61154
60214
  }
61155
60215
 
61156
60216
  @container rb-site (min-width: 640px) {
61157
60217
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
61158
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
60218
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
61159
60219
  display: inline;
61160
60220
  }
61161
60221
  }
61162
60222
  }
61163
60223
 
61164
60224
  /* Wizard actions row */
61165
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
60225
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
61166
60226
  display: flex;
61167
60227
  justify-content: space-between;
61168
60228
  align-items: center;
@@ -61171,56 +60231,56 @@ const containerResponsiveThemeCss = `/*
61171
60231
  }
61172
60232
 
61173
60233
  /* When there's only one action (no back button), push it to the right */
61174
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
60234
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
61175
60235
  margin-inline-start: auto;
61176
60236
  }
61177
60237
 
61178
60238
  /* On-surface text ramp */
61179
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
60239
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
61180
60240
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
61181
60241
  }
61182
60242
 
61183
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
60243
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
61184
60244
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
61185
60245
  }
61186
60246
 
61187
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
60247
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
61188
60248
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
61189
60249
  }
61190
60250
 
61191
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
60251
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
61192
60252
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
61193
60253
  }
61194
60254
 
61195
60255
  /* Layout stacks */
61196
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
60256
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
61197
60257
  display: flex;
61198
60258
  flex-direction: column;
61199
60259
  gap: 1rem;
61200
60260
  }
61201
60261
 
61202
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
60262
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
61203
60263
  gap: 0.75rem;
61204
60264
  }
61205
60265
 
61206
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
60266
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
61207
60267
  display: flex;
61208
60268
  align-items: center;
61209
60269
  gap: 1rem;
61210
60270
  }
61211
60271
 
61212
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
60272
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
61213
60273
  justify-content: space-between;
61214
60274
  align-items: flex-start;
61215
60275
  }
61216
60276
 
61217
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
60277
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
61218
60278
  display: grid;
61219
60279
  gap: 0.75rem;
61220
60280
  }
61221
60281
 
61222
60282
  /* Summary box */
61223
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
60283
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
61224
60284
  padding: 1rem;
61225
60285
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
61226
60286
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -61228,7 +60288,7 @@ const containerResponsiveThemeCss = `/*
61228
60288
  }
61229
60289
 
61230
60290
  /* Skeleton shell lines */
61231
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
60291
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
61232
60292
  height: 0.75rem;
61233
60293
  border-radius: 9999px;
61234
60294
  background: linear-gradient(
@@ -61239,24 +60299,24 @@ const containerResponsiveThemeCss = `/*
61239
60299
  );
61240
60300
  }
61241
60301
 
61242
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
60302
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
61243
60303
  width: min(26rem, 82%);
61244
60304
  }
61245
60305
 
61246
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
60306
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
61247
60307
  width: min(19rem, 68%);
61248
60308
  }
61249
60309
 
61250
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
60310
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
61251
60311
  width: min(14rem, 52%);
61252
60312
  }
61253
60313
 
61254
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
60314
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
61255
60315
  width: min(10rem, 42%);
61256
60316
  }
61257
60317
 
61258
60318
  /* Skeleton block (rectangular placeholder, pulses) */
61259
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60319
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
61260
60320
  height: 2.5rem;
61261
60321
  width: 100%;
61262
60322
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -61274,7 +60334,7 @@ const containerResponsiveThemeCss = `/*
61274
60334
  }
61275
60335
 
61276
60336
  @media (prefers-reduced-motion: reduce) {
61277
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60337
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
61278
60338
  animation: none;
61279
60339
  }
61280
60340
  }
@@ -67656,1658 +66716,347 @@ const containerResponsiveThemeCss = `/*
67656
66716
  cursor: not-allowed;
67657
66717
  }
67658
66718
 
67659
- /*
67660
- * Course Details (runtime node)
67661
- * Minimal rules - most styling via rb-* utilities
66719
+ /* =============================================================================
66720
+ * Block: Newsletter Signup
66721
+ * =============================================================================
67662
66722
  */
67663
66723
 
67664
- :where(.theme-scope) .course-details {
67665
- width: 100%;
67666
- max-width: 56.25rem; /* 900px */
67667
- margin-inline: auto;
66724
+ /* Newsletter copy styling */
66725
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
66726
+ font-size: 1.5rem;
66727
+ font-weight: 600;
67668
66728
  }
67669
66729
 
67670
- /* Description prose wrapper */
67671
- :where(.theme-scope) .course-details .cd-description {
67672
- margin-top: 1rem;
66730
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
66731
+ font-size: 1rem;
66732
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66733
+ opacity: 0.85;
67673
66734
  }
67674
66735
 
67675
- /* "Showing X of Y" text */
67676
- :where(.theme-scope) .course-details .cd-sessions__more {
67677
- margin-top: 0.5rem;
67678
- opacity: 0.7;
67679
- font-size: 0.875rem;
66736
+ /* Newsletter form container */
66737
+ :where(.theme-scope) .newsletter-form {
66738
+ width: 100%;
66739
+ max-width: 32rem;
66740
+ margin-left: auto;
66741
+ margin-right: auto;
67680
66742
  }
67681
66743
 
67682
- /* Enrollment status colors (using Tier 3 vars) */
67683
- :where(.theme-scope) .course-details .cd-enrollment--open {
67684
- color: var(--cd-enrollment-open-text);
66744
+ /* Newsletter form fields container */
66745
+ :where(.theme-scope) .newsletter-form-fields {
66746
+ display: flex;
66747
+ flex-direction: column;
66748
+ gap: var(--rb-gap-sm, 0.75rem);
67685
66749
  }
67686
66750
 
67687
- :where(.theme-scope) .course-details .cd-enrollment--closed {
67688
- color: var(--cd-enrollment-closed-text);
66751
+ /* Individual field styling */
66752
+ :where(.theme-scope) .newsletter-field {
66753
+ display: flex;
66754
+ flex-direction: column;
66755
+ gap: 0.25rem;
67689
66756
  }
67690
66757
 
67691
- /* =============================================================================
67692
- * Block: Event whole-series registration
67693
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
67694
- * =============================================================================
67695
- */
67696
-
67697
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
67698
- :where(.theme-scope)
67699
- :where(
67700
- [data-block='event-registration'],
67701
- [data-block='course-registration']
67702
- ) {
67703
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
67704
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
66758
+ /* Required indicator */
66759
+ :where(.theme-scope) .newsletter-required {
66760
+ color: rgb(var(--tb-primary));
66761
+ margin-left: 0.125rem;
67705
66762
  }
67706
66763
 
67707
- /* Container: base styling comes from the shared .rb-reg-surface
67708
- (registration-surface.css); these overrides preserve whole-series
67709
- whole-series registration's established look (fixed padding, centered). */
67710
- :where(.theme-scope)
67711
- :where([data-block='event-registration'], [data-block='course-registration'])
67712
- .er-whole-series-container {
67713
- padding: 1.5rem;
67714
- margin-inline: auto;
66764
+ /* Submit button container */
66765
+ :where(.theme-scope) .newsletter-submit {
66766
+ margin-top: 0.5rem;
67715
66767
  }
67716
66768
 
67717
- /* Empty/unavailable */
67718
- :where(.theme-scope)
67719
- :where([data-block='event-registration'], [data-block='course-registration'])
67720
- .er-whole-series-empty {
67721
- border-radius: var(--rb-block-radius);
67722
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
67723
- padding: 2.5rem;
67724
- text-align: center;
66769
+ /* ALTCHA widget container */
66770
+ :where(.theme-scope) .newsletter-altcha {
66771
+ margin-top: 0.75rem;
66772
+ display: flex;
66773
+ justify-content: center;
67725
66774
  }
67726
66775
 
67727
- :where(.theme-scope)
67728
- :where([data-block='event-registration'], [data-block='course-registration'])
67729
- .er-whole-series-empty__text {
67730
- opacity: 0.7;
66776
+ /* Privacy note */
66777
+ :where(.theme-scope) .newsletter-privacy-note {
66778
+ margin-top: 0.75rem;
66779
+ font-size: 1rem;
66780
+ line-height: 1.6;
66781
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66782
+ text-align: center;
67731
66783
  }
67732
66784
 
67733
66785
  /* =============================================================================
67734
- * Layout (two-column)
66786
+ * Inline Variant - Horizontal layout
67735
66787
  * =============================================================================
67736
66788
  */
67737
- :where(.theme-scope)
67738
- :where([data-block='event-registration'], [data-block='course-registration'])
67739
- .er-whole-series-layout {
67740
- display: grid;
67741
- gap: 1.5rem;
67742
- grid-template-columns: 1fr;
67743
- }
67744
66789
 
67745
- @container rb-site (min-width: 768px) {
67746
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67747
- :where(.theme-scope)
67748
- :where(
67749
- [data-block='event-registration'],
67750
- [data-block='course-registration']
67751
- )
67752
- .er-whole-series-layout--with-sidebar {
67753
- grid-template-columns: 1fr 280px;
67754
- }
67755
- }
66790
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
66791
+ flex-direction: row;
66792
+ align-items: flex-end;
66793
+ flex-wrap: wrap;
66794
+ gap: var(--rb-gap-sm, 0.75rem);
67756
66795
  }
67757
66796
 
67758
- :where(.theme-scope)
67759
- :where([data-block='event-registration'], [data-block='course-registration'])
67760
- .er-whole-series-layout__main {
67761
- min-width: 0;
66797
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
66798
+ flex: 1 1 auto;
66799
+ min-width: 10rem;
67762
66800
  }
67763
66801
 
67764
- :where(.theme-scope)
67765
- :where([data-block='event-registration'], [data-block='course-registration'])
67766
- .er-whole-series-layout__sidebar {
67767
- display: none;
66802
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
66803
+ margin-top: 0;
66804
+ flex-shrink: 0;
67768
66805
  }
67769
66806
 
67770
- @container rb-site (min-width: 768px) {
66807
+ /* Mobile fallback for inline variant */
66808
+ @container rb-site (max-width: 640px) {
67771
66809
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67772
- :where(.theme-scope)
67773
- :where(
67774
- [data-block='event-registration'],
67775
- [data-block='course-registration']
67776
- )
67777
- .er-whole-series-layout__sidebar {
67778
- display: block;
66810
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
66811
+ flex-direction: column;
66812
+ }
66813
+
66814
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
66815
+ min-width: 100%;
67779
66816
  }
67780
66817
  }
67781
66818
  }
67782
66819
 
67783
66820
  /* =============================================================================
67784
- * Step Indicator
66821
+ * Editorial Split Variant
67785
66822
  * =============================================================================
67786
66823
  */
67787
- :where(.theme-scope)
67788
- :where([data-block='event-registration'], [data-block='course-registration'])
67789
- .er-whole-series-steps {
67790
- display: flex;
67791
- align-items: center;
67792
- gap: 0.5rem;
67793
- margin-bottom: 1.5rem;
67794
- }
67795
66824
 
67796
- :where(.theme-scope)
67797
- :where([data-block='event-registration'], [data-block='course-registration'])
67798
- .er-whole-series-step {
67799
- display: flex;
66825
+ :where(.theme-scope) .newsletter-editorial-split {
66826
+ display: grid;
66827
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
66828
+ gap: clamp(2.5rem, 7vw, 7rem);
67800
66829
  align-items: center;
67801
- gap: 0.5rem;
66830
+ text-align: left;
67802
66831
  }
67803
66832
 
67804
- :where(.theme-scope)
67805
- :where([data-block='event-registration'], [data-block='course-registration'])
67806
- .er-whole-series-step-circle {
67807
- width: 1.75rem;
67808
- height: 1.75rem;
67809
- border-radius: 9999px;
66833
+ :where(.theme-scope) .newsletter-editorial-split-copy {
67810
66834
  display: flex;
67811
- align-items: center;
67812
- justify-content: center;
67813
- font-size: 0.75rem;
67814
- font-weight: 600;
67815
- background: var(--er-step-inactive);
67816
- color: var(--er-step-text);
67817
- transition: background-color 0.2s ease;
66835
+ flex-direction: column;
66836
+ gap: var(--rb-gap-sm, 0.75rem);
67818
66837
  }
67819
66838
 
67820
- :where(.theme-scope)
67821
- :where([data-block='event-registration'], [data-block='course-registration'])
67822
- .er-whole-series-step-circle--active {
67823
- background: var(--er-step-active);
67824
- color: var(--er-step-text-active);
66839
+ :where(.theme-scope) .newsletter-editorial-split-form {
66840
+ min-width: 0;
67825
66841
  }
67826
66842
 
67827
- :where(.theme-scope)
67828
- :where([data-block='event-registration'], [data-block='course-registration'])
67829
- .er-whole-series-step-circle--completed {
67830
- background: var(--er-step-completed);
67831
- color: var(--er-step-text);
66843
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
66844
+ max-width: none;
66845
+ margin-inline: 0;
67832
66846
  }
67833
66847
 
67834
- :where(.theme-scope)
67835
- :where([data-block='event-registration'], [data-block='course-registration'])
67836
- .er-whole-series-step-label {
67837
- font-size: 0.875rem;
66848
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
66849
+ font-size: clamp(2rem, 4vw, 3.5rem);
67838
66850
  font-weight: 500;
67839
- color: rgb(var(--tb-mutedText));
67840
- display: none;
67841
66851
  }
67842
66852
 
67843
- @container rb-site (min-width: 640px) {
66853
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
66854
+ text-align: left;
66855
+ }
66856
+
66857
+ @container rb-site (max-width: 767px) {
67844
66858
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67845
- :where(.theme-scope)
67846
- :where(
67847
- [data-block='event-registration'],
67848
- [data-block='course-registration']
67849
- )
67850
- .er-whole-series-step-label {
67851
- display: block;
66859
+ :where(.theme-scope) .newsletter-editorial-split {
66860
+ grid-template-columns: minmax(0, 1fr);
66861
+ gap: 2rem;
67852
66862
  }
67853
66863
  }
67854
66864
  }
67855
66865
 
67856
- :where(.theme-scope)
67857
- :where([data-block='event-registration'], [data-block='course-registration'])
67858
- .er-whole-series-step-label--active {
67859
- color: var(--er-on-surface);
67860
- font-weight: 600;
67861
- }
67862
-
67863
- :where(.theme-scope)
67864
- :where([data-block='event-registration'], [data-block='course-registration'])
67865
- .er-whole-series-step-connector {
67866
- flex: 1;
67867
- height: 2px;
67868
- background: var(--er-step-connector);
67869
- min-width: 1rem;
67870
- }
66866
+ /* =============================================================================
66867
+ * Success State
66868
+ * =============================================================================
66869
+ */
67871
66870
 
67872
- :where(.theme-scope)
67873
- :where([data-block='event-registration'], [data-block='course-registration'])
67874
- .er-whole-series-step-connector--completed {
67875
- background: var(--er-step-completed);
66871
+ :where(.theme-scope) .newsletter-success {
66872
+ text-align: center;
67876
66873
  }
67877
66874
 
67878
- :where(.theme-scope)
67879
- :where([data-block='event-registration'], [data-block='course-registration'])
67880
- .er-whole-series-step-check {
67881
- width: 0.875rem;
67882
- height: 0.875rem;
66875
+ :where(.theme-scope) .newsletter-success .fb-success {
66876
+ padding: 1rem 1.5rem;
66877
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
66878
+ border-radius: var(--radius-md, 0.5rem);
66879
+ color: rgb(var(--tb-text));
67883
66880
  }
67884
66881
 
67885
66882
  /* =============================================================================
67886
- * Lists
66883
+ * Block: Contact + Newsletter
67887
66884
  * =============================================================================
67888
66885
  */
67889
- :where(.theme-scope)
67890
- :where([data-block='event-registration'], [data-block='course-registration'])
67891
- .er-whole-series-run-list {
66886
+
66887
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
67892
66888
  display: grid;
67893
- gap: 1rem;
66889
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
66890
+ gap: clamp(2.5rem, 6vw, 4rem);
66891
+ align-items: start;
67894
66892
  }
67895
66893
 
67896
- /* =============================================================================
67897
- * Run cards
67898
- * =============================================================================
67899
- */
67900
- :where(.theme-scope)
67901
- :where([data-block='event-registration'], [data-block='course-registration'])
67902
- .er-whole-series-run-card {
67903
- border-radius: var(--rb-block-radius);
67904
- border: 1px solid var(--er-border);
67905
- padding: 1rem;
67906
- background: rgb(var(--tb-background));
67907
- cursor: pointer;
67908
- transition:
67909
- border-color var(--rb-block-transition) ease,
67910
- transform var(--rb-block-transition) ease;
66894
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
66895
+ min-width: 0;
67911
66896
  }
67912
66897
 
67913
- :where(.theme-scope)
67914
- :where([data-block='event-registration'], [data-block='course-registration'])
67915
- .er-whole-series-run-card:hover {
67916
- border-color: var(--er-border-hover);
67917
- transform: translateY(-1px);
66898
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
66899
+ margin-bottom: 1.5rem;
67918
66900
  }
67919
66901
 
67920
- :where(.theme-scope)
67921
- :where([data-block='event-registration'], [data-block='course-registration'])
67922
- .er-whole-series-run-card:focus-visible {
67923
- outline: 2px solid var(--er-focus-ring);
67924
- outline-offset: 2px;
66902
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
66903
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
66904
+ margin: 0 0 0.75rem;
67925
66905
  }
67926
66906
 
67927
- :where(.theme-scope)
67928
- :where([data-block='event-registration'], [data-block='course-registration'])
67929
- .er-whole-series-run-card--selected {
67930
- border-color: var(--er-border-selected);
67931
- box-shadow: 0 0 0 3px var(--er-focus-ring);
66907
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
66908
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
66909
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
67932
66910
  }
67933
66911
 
67934
- :where(.theme-scope)
67935
- :where([data-block='event-registration'], [data-block='course-registration'])
67936
- .er-whole-series-run-card__title {
67937
- margin: 0 0 0.25rem 0;
67938
- font-weight: 700;
67939
- font-size: 1.125rem;
66912
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
66913
+ display: flex;
66914
+ flex-direction: column;
66915
+ align-items: flex-start;
67940
66916
  }
67941
66917
 
67942
- :where(.theme-scope)
67943
- :where([data-block='event-registration'], [data-block='course-registration'])
67944
- .er-whole-series-run-card__status {
67945
- margin: 0.25rem 0 0 0;
67946
- opacity: 0.8;
66918
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
66919
+ max-width: none;
66920
+ margin-left: 0;
66921
+ margin-right: 0;
67947
66922
  }
67948
66923
 
67949
- :where(.theme-scope)
67950
- :where([data-block='event-registration'], [data-block='course-registration'])
67951
- .er-whole-series-run-card__sessions,
67952
- :where(.theme-scope)
67953
- :where([data-block='event-registration'], [data-block='course-registration'])
67954
- .er-whole-series-run-card__price,
67955
- :where(.theme-scope)
67956
- :where([data-block='event-registration'], [data-block='course-registration'])
67957
- .er-whole-series-run-card__capacity,
67958
- :where(.theme-scope)
67959
- :where([data-block='event-registration'], [data-block='course-registration'])
67960
- .er-whole-series-run-card__venue {
67961
- margin: 0.25rem 0 0 0;
67962
- opacity: 0.85;
66924
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
66925
+ text-align: left;
67963
66926
  }
67964
66927
 
67965
- /* =============================================================================
67966
- * Capacity Badges
67967
- * =============================================================================
67968
- */
67969
- :where(.theme-scope)
67970
- :where([data-block='event-registration'], [data-block='course-registration'])
67971
- .er-whole-series-capacity-badge {
67972
- display: inline-block;
67973
- padding: 0.125rem 0.5rem;
67974
- border-radius: 9999px;
67975
- font-size: 0.75rem;
67976
- font-weight: 500;
66928
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
66929
+ display: flex;
66930
+ flex-direction: column;
66931
+ gap: 1rem;
67977
66932
  }
67978
66933
 
67979
- :where(.theme-scope)
67980
- :where([data-block='event-registration'], [data-block='course-registration'])
67981
- .er-whole-series-capacity-badge--available {
67982
- background: var(--er-capacity-available-bg);
67983
- color: var(--er-capacity-available-text);
66934
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
66935
+ display: grid;
66936
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
66937
+ gap: 1rem;
67984
66938
  }
67985
66939
 
67986
- :where(.theme-scope)
67987
- :where([data-block='event-registration'], [data-block='course-registration'])
67988
- .er-whole-series-capacity-badge--low {
67989
- background: var(--er-capacity-low-bg);
67990
- color: var(--er-capacity-low-text);
66940
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
66941
+ display: flex;
66942
+ flex-direction: column;
66943
+ gap: 0.25rem;
67991
66944
  }
67992
66945
 
67993
- :where(.theme-scope)
67994
- :where([data-block='event-registration'], [data-block='course-registration'])
67995
- .er-whole-series-capacity-badge--soldout {
67996
- background: var(--er-capacity-soldout-bg);
67997
- color: var(--er-capacity-soldout-text);
66946
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
66947
+ display: flex;
66948
+ flex-direction: column;
66949
+ gap: 0.5rem;
66950
+ border: none;
66951
+ padding: 0;
66952
+ margin: 0;
67998
66953
  }
67999
66954
 
68000
- /* =============================================================================
68001
- * Summary + Details
68002
- * =============================================================================
68003
- */
68004
- :where(.theme-scope)
68005
- :where([data-block='event-registration'], [data-block='course-registration'])
68006
- .er-whole-series-details {
68007
- display: grid;
68008
- gap: 1rem;
66955
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
66956
+ display: flex;
66957
+ align-items: center;
66958
+ gap: 0.5rem;
68009
66959
  }
68010
66960
 
68011
- :where(.theme-scope)
68012
- :where([data-block='event-registration'], [data-block='course-registration'])
68013
- .er-whole-series-summary {
66961
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
66962
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
66963
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68014
66964
  border-radius: var(--rb-block-radius);
68015
- border: 1px solid var(--er-summary-border);
68016
66965
  padding: 1rem;
68017
- background: var(--er-summary-bg);
68018
- }
68019
-
68020
- :where(.theme-scope)
68021
- :where([data-block='event-registration'], [data-block='course-registration'])
68022
- .er-whole-series-summary__title {
68023
- margin: 0;
68024
- font-size: 1.25rem;
68025
- font-weight: 800;
66966
+ font-size: 0.875rem;
68026
66967
  }
68027
66968
 
68028
- :where(.theme-scope)
68029
- :where([data-block='event-registration'], [data-block='course-registration'])
68030
- .er-whole-series-summary__sessions-title {
68031
- margin: 0.75rem 0 0.5rem 0;
68032
- font-weight: 700;
66969
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
66970
+ background-color: var(--fb-success-bg);
66971
+ color: var(--fb-success-text);
66972
+ border: 1px solid var(--fb-success-border);
68033
66973
  }
68034
66974
 
68035
- :where(.theme-scope)
68036
- :where([data-block='event-registration'], [data-block='course-registration'])
68037
- .er-whole-series-summary__sessions-list {
68038
- list-style: none;
68039
- padding: 0;
68040
- margin: 0;
68041
- display: grid;
68042
- gap: 0.35rem;
66975
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
66976
+ background-color: var(--fb-error-bg);
66977
+ color: var(--fb-error-text);
66978
+ border: 1px solid var(--fb-error-border);
68043
66979
  }
68044
66980
 
68045
- :where(.theme-scope)
68046
- :where([data-block='event-registration'], [data-block='course-registration'])
68047
- .er-whole-series-summary__session {
68048
- opacity: 0.9;
66981
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
66982
+ background-color: var(--fb-empty-bg);
66983
+ color: var(--fb-empty-text);
66984
+ border: 1px dashed var(--fb-empty-border);
66985
+ text-align: center;
68049
66986
  }
68050
66987
 
68051
- :where(.theme-scope)
68052
- :where([data-block='event-registration'], [data-block='course-registration'])
68053
- .er-whole-series-summary__venue,
68054
- :where(.theme-scope)
68055
- :where([data-block='event-registration'], [data-block='course-registration'])
68056
- .er-whole-series-summary__price,
68057
- :where(.theme-scope)
68058
- :where([data-block='event-registration'], [data-block='course-registration'])
68059
- .er-whole-series-summary__membership {
68060
- margin: 0.5rem 0 0 0;
68061
- opacity: 0.9;
66988
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
66989
+ margin-top: 0.5rem;
68062
66990
  }
68063
66991
 
68064
66992
  /* =============================================================================
68065
- * Form
66993
+ * Block: Team Members
68066
66994
  * =============================================================================
66995
+ *
66996
+ * Site/theme authors sometimes need different thumbnail shapes/sizes without
66997
+ * changing global fragment defaults. We expose these controls on the block and
66998
+ * style them via data attributes on the \`.rb-team-members\` wrapper.
68067
66999
  */
68068
- :where(.theme-scope)
68069
- :where([data-block='event-registration'], [data-block='course-registration'])
68070
- .er-whole-series-form {
68071
- display: grid;
68072
- gap: 1rem;
68073
- }
68074
67000
 
68075
- :where(.theme-scope)
68076
- :where([data-block='event-registration'], [data-block='course-registration'])
68077
- .er-whole-series-form__field {
68078
- display: grid;
68079
- gap: 0.35rem;
67001
+ /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
67002
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
67003
+ text-align: left;
68080
67004
  }
68081
67005
 
68082
- :where(.theme-scope)
68083
- :where([data-block='event-registration'], [data-block='course-registration'])
68084
- .er-whole-series-form__label {
68085
- font-size: 0.875rem;
68086
- font-weight: 600;
67006
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
67007
+ align-items: flex-start;
67008
+ text-align: left;
68087
67009
  }
68088
67010
 
68089
- :where(.theme-scope)
68090
- :where([data-block='event-registration'], [data-block='course-registration'])
68091
- .er-whole-series-form__label--required::after {
68092
- content: ' *';
68093
- color: var(--er-required);
67011
+ @container rb-site (min-width: 1024px) {
67012
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67013
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
67014
+ width: 75%;
67015
+ margin-left: 0;
67016
+ margin-right: auto;
67017
+ }
68094
67018
  }
68095
-
68096
- :where(.theme-scope)
68097
- :where([data-block='event-registration'], [data-block='course-registration'])
68098
- .er-whole-series-form__input {
68099
- border-radius: calc(var(--rb-block-radius) * 0.6);
68100
- border: 1px solid var(--er-border);
68101
- padding: 0.6rem 0.75rem;
68102
- background: rgb(var(--tb-background));
68103
- color: rgb(var(--tb-foreground));
68104
67019
  }
68105
67020
 
68106
- :where(.theme-scope)
68107
- :where([data-block='event-registration'], [data-block='course-registration'])
68108
- .er-whole-series-form__textarea {
68109
- border-radius: calc(var(--rb-block-radius) * 0.6);
68110
- border: 1px solid var(--er-border);
68111
- padding: 0.6rem 0.75rem;
68112
- background: rgb(var(--tb-background));
68113
- color: rgb(var(--tb-foreground));
68114
- resize: vertical;
67021
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
67022
+ display: block;
67023
+ width: 100%;
67024
+ height: auto;
68115
67025
  }
68116
67026
 
68117
- :where(.theme-scope)
68118
- :where([data-block='event-registration'], [data-block='course-registration'])
68119
- .er-whole-series-form__input:focus,
68120
- :where(.theme-scope)
68121
- :where([data-block='event-registration'], [data-block='course-registration'])
68122
- .er-whole-series-form__textarea:focus {
68123
- outline: 2px solid var(--er-focus-ring);
68124
- outline-offset: 2px;
67027
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
67028
+ font-weight: 600;
68125
67029
  }
68126
67030
 
68127
- :where(.theme-scope)
68128
- :where([data-block='event-registration'], [data-block='course-registration'])
68129
- .er-whole-series-form__input--error,
68130
- :where(.theme-scope)
68131
- :where([data-block='event-registration'], [data-block='course-registration'])
68132
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
68133
- border-color: var(--er-border-error);
67031
+ /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
67032
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
67033
+ --rb-team-thumb-max: 11.25rem; /* ~180px default */
67034
+ --rb-team-image-basis: 33.333%;
68134
67035
  }
68135
67036
 
68136
- :where(.theme-scope)
68137
- :where([data-block='event-registration'], [data-block='course-registration'])
68138
- .er-whole-series-form__error {
68139
- font-size: 0.875rem;
68140
- color: var(--er-error-text);
67037
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
67038
+ --rb-team-thumb-max: 8.75rem; /* ~140px */
67039
+ --rb-team-image-basis: 25%;
68141
67040
  }
68142
67041
 
68143
- :where(.theme-scope)
68144
- :where([data-block='event-registration'], [data-block='course-registration'])
68145
- .er-whole-series-form__hint {
68146
- font-size: 0.875rem;
68147
- opacity: 0.7;
67042
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
67043
+ --rb-team-thumb-max: 11.25rem; /* ~180px */
67044
+ --rb-team-image-basis: 33.333%;
68148
67045
  }
68149
67046
 
68150
- /* Logged-in user hint with logout link */
68151
- :where(.theme-scope)
68152
- :where([data-block='event-registration'], [data-block='course-registration'])
68153
- .er-whole-series-logged-in-hint {
68154
- font-size: 0.875rem;
68155
- opacity: 0.7;
68156
- margin: 0.25rem 0 0 0;
67047
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
67048
+ --rb-team-thumb-max: 13.75rem; /* ~220px */
67049
+ --rb-team-image-basis: 40%;
68157
67050
  }
68158
67051
 
68159
- :where(.theme-scope)
68160
- :where([data-block='event-registration'], [data-block='course-registration'])
68161
- .er-whole-series-link {
68162
- background: none;
68163
- border: none;
68164
- padding: 0;
68165
- font-size: inherit;
68166
- color: rgb(var(--tb-primary));
68167
- cursor: pointer;
68168
- text-decoration: underline;
68169
- text-underline-offset: 2px;
67052
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
67053
+ --rb-team-thumb-max: 17.5rem; /* ~280px */
67054
+ --rb-team-image-basis: 50%;
68170
67055
  }
68171
67056
 
68172
- :where(.theme-scope)
68173
- :where([data-block='event-registration'], [data-block='course-registration'])
68174
- .er-whole-series-link:hover {
68175
- text-decoration: none;
68176
- }
68177
-
68178
- /* =============================================================================
68179
- * Actions
68180
- * =============================================================================
68181
- */
68182
- :where(.theme-scope)
68183
- :where([data-block='event-registration'], [data-block='course-registration'])
68184
- .er-whole-series-actions {
68185
- display: flex;
68186
- align-items: center;
68187
- justify-content: space-between;
68188
- gap: 0.75rem;
68189
- margin-top: 0.25rem;
68190
- }
68191
-
68192
- :where(.theme-scope)
68193
- :where([data-block='event-registration'], [data-block='course-registration'])
68194
- .er-whole-series-back-btn {
68195
- border: 0;
68196
- background: transparent;
68197
- color: var(--er-on-surface);
68198
- opacity: 0.8;
68199
- padding: 0.25rem 0.25rem;
68200
- cursor: pointer;
68201
- }
68202
-
68203
- :where(.theme-scope)
68204
- :where([data-block='event-registration'], [data-block='course-registration'])
68205
- .er-whole-series-back-btn:hover {
68206
- opacity: 1;
68207
- text-decoration: underline;
68208
- }
68209
-
68210
- /* =============================================================================
68211
- * Payment Options
68212
- * =============================================================================
68213
- */
68214
- :where(.theme-scope)
68215
- :where([data-block='event-registration'], [data-block='course-registration'])
68216
- .er-whole-series-payment__options {
68217
- display: grid;
68218
- gap: 0.5rem;
68219
- }
68220
-
68221
- :where(.theme-scope)
68222
- :where([data-block='event-registration'], [data-block='course-registration'])
68223
- .er-whole-series-payment__option {
68224
- display: flex;
68225
- align-items: center;
68226
- gap: 0.5rem;
68227
- }
68228
-
68229
- /* =============================================================================
68230
- * Payment Tiles (Card Grid)
68231
- * =============================================================================
68232
- */
68233
- :where(.theme-scope)
68234
- :where([data-block='event-registration'], [data-block='course-registration'])
68235
- .er-whole-series-payment-tiles {
68236
- display: grid;
68237
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
68238
- gap: 0.75rem;
68239
- }
68240
-
68241
- :where(.theme-scope)
68242
- :where([data-block='event-registration'], [data-block='course-registration'])
68243
- .er-whole-series-payment-tile {
68244
- border-radius: var(--rb-block-radius);
68245
- border: 1px solid var(--er-payment-border);
68246
- padding: 1rem;
68247
- background: rgb(var(--tb-background));
68248
- cursor: pointer;
68249
- transition:
68250
- border-color 0.15s ease,
68251
- box-shadow 0.15s ease,
68252
- background-color 0.15s ease;
68253
- position: relative;
68254
- }
68255
-
68256
- :where(.theme-scope)
68257
- :where([data-block='event-registration'], [data-block='course-registration'])
68258
- .er-whole-series-payment-tile:hover {
68259
- border-color: var(--er-payment-border-hover);
68260
- }
68261
-
68262
- :where(.theme-scope)
68263
- :where([data-block='event-registration'], [data-block='course-registration'])
68264
- .er-whole-series-payment-tile:focus-visible {
68265
- outline: 2px solid var(--er-focus-ring);
68266
- outline-offset: 2px;
68267
- }
68268
-
68269
- :where(.theme-scope)
68270
- :where([data-block='event-registration'], [data-block='course-registration'])
68271
- .er-whole-series-payment-tile--selected {
68272
- border-color: var(--er-payment-border-selected);
68273
- background: var(--er-payment-bg-selected);
68274
- box-shadow: 0 0 0 3px var(--er-focus-ring);
68275
- }
68276
-
68277
- :where(.theme-scope)
68278
- :where([data-block='event-registration'], [data-block='course-registration'])
68279
- .er-whole-series-payment-tile--upsell {
68280
- border-style: dashed;
68281
- }
68282
-
68283
- :where(.theme-scope)
68284
- :where([data-block='event-registration'], [data-block='course-registration'])
68285
- .er-whole-series-payment-tile__header {
68286
- display: flex;
68287
- align-items: flex-start;
68288
- justify-content: space-between;
68289
- gap: 0.5rem;
68290
- }
68291
-
68292
- :where(.theme-scope)
68293
- :where([data-block='event-registration'], [data-block='course-registration'])
68294
- .er-whole-series-payment-tile__name {
68295
- margin: 0;
68296
- font-weight: 600;
68297
- font-size: 1rem;
68298
- }
68299
-
68300
- :where(.theme-scope)
68301
- :where([data-block='event-registration'], [data-block='course-registration'])
68302
- .er-whole-series-payment-tile__description {
68303
- margin: 0.25rem 0 0 0;
68304
- font-size: 0.875rem;
68305
- opacity: 0.7;
68306
- }
68307
-
68308
- :where(.theme-scope)
68309
- :where([data-block='event-registration'], [data-block='course-registration'])
68310
- .er-whole-series-payment-tile__price {
68311
- font-weight: 600;
68312
- font-size: 0.875rem;
68313
- white-space: nowrap;
68314
- }
68315
-
68316
- :where(.theme-scope)
68317
- :where([data-block='event-registration'], [data-block='course-registration'])
68318
- .er-whole-series-payment-tile__badge {
68319
- display: inline-block;
68320
- padding: 0.125rem 0.5rem;
68321
- border-radius: 9999px;
68322
- font-size: 0.75rem;
68323
- font-weight: 500;
68324
- margin-top: 0.5rem;
68325
- }
68326
-
68327
- /* Checkmark indicator on selected tile */
68328
- :where(.theme-scope)
68329
- :where([data-block='event-registration'], [data-block='course-registration'])
68330
- .er-whole-series-payment-tile__check {
68331
- position: absolute;
68332
- top: 0.5rem;
68333
- right: 0.5rem;
68334
- width: 1.25rem;
68335
- height: 1.25rem;
68336
- border-radius: 9999px;
68337
- background: var(--er-check-bg);
68338
- color: var(--er-check-text);
68339
- display: flex;
68340
- align-items: center;
68341
- justify-content: center;
68342
- opacity: 0;
68343
- transition: opacity 0.15s ease;
68344
- }
68345
-
68346
- :where(.theme-scope)
68347
- :where([data-block='event-registration'], [data-block='course-registration'])
68348
- .er-whole-series-payment-tile--selected
68349
- .er-whole-series-payment-tile__check {
68350
- opacity: 1;
68351
- }
68352
-
68353
- /* =============================================================================
68354
- * Booking Mode Step
68355
- * =============================================================================
68356
- */
68357
- :where(.theme-scope)
68358
- :where([data-block='event-registration'], [data-block='course-registration'])
68359
- .er-whole-series-booking-mode {
68360
- display: grid;
68361
- gap: 1rem;
68362
- }
68363
-
68364
- :where(.theme-scope)
68365
- :where([data-block='event-registration'], [data-block='course-registration'])
68366
- .er-whole-series-booking-mode__title {
68367
- margin: 0;
68368
- font-size: var(--er-step-title-size);
68369
- font-weight: 700;
68370
- }
68371
-
68372
- :where(.theme-scope)
68373
- :where([data-block='event-registration'], [data-block='course-registration'])
68374
- .er-whole-series-booking-mode__subtitle {
68375
- margin: 0.25rem 0 0 0;
68376
- opacity: 0.7;
68377
- }
68378
-
68379
- :where(.theme-scope)
68380
- :where([data-block='event-registration'], [data-block='course-registration'])
68381
- .er-whole-series-booking-mode__link {
68382
- margin-top: 0.5rem;
68383
- font-size: 0.875rem;
68384
- }
68385
-
68386
- :where(.theme-scope)
68387
- :where([data-block='event-registration'], [data-block='course-registration'])
68388
- .er-whole-series-booking-mode__link
68389
- a {
68390
- color: rgb(var(--tb-primary));
68391
- text-decoration: underline;
68392
- cursor: pointer;
68393
- }
68394
-
68395
- :where(.theme-scope)
68396
- :where([data-block='event-registration'], [data-block='course-registration'])
68397
- .er-whole-series-booking-mode__link
68398
- a:hover {
68399
- text-decoration: none;
68400
- }
68401
-
68402
- /* =============================================================================
68403
- * Membership Hero
68404
- * =============================================================================
68405
- */
68406
- :where(.theme-scope)
68407
- :where([data-block='event-registration'], [data-block='course-registration'])
68408
- .er-whole-series-membership-hero {
68409
- border-radius: var(--rb-block-radius);
68410
- background: var(--er-success-bg);
68411
- border: 1px solid rgba(var(--tb-success), 0.2);
68412
- padding: 1.5rem;
68413
- text-align: center;
68414
- }
68415
-
68416
- :where(.theme-scope)
68417
- :where([data-block='event-registration'], [data-block='course-registration'])
68418
- .er-whole-series-membership-hero__icon {
68419
- font-size: 2rem;
68420
- margin-bottom: 0.75rem;
68421
- }
68422
-
68423
- :where(.theme-scope)
68424
- :where([data-block='event-registration'], [data-block='course-registration'])
68425
- .er-whole-series-membership-hero__title {
68426
- margin: 0;
68427
- font-size: 1.25rem;
68428
- font-weight: 700;
68429
- color: var(--er-success-text);
68430
- }
68431
-
68432
- :where(.theme-scope)
68433
- :where([data-block='event-registration'], [data-block='course-registration'])
68434
- .er-whole-series-membership-hero__subtitle {
68435
- margin: 0.25rem 0 0 0;
68436
- font-size: 0.875rem;
68437
- opacity: 0.8;
68438
- }
68439
-
68440
- /* =============================================================================
68441
- * Portal Auth Sidebar
68442
- * =============================================================================
68443
- */
68444
- :where(.theme-scope)
68445
- :where([data-block='event-registration'], [data-block='course-registration'])
68446
- .er-whole-series-portal-sidebar {
68447
- border-radius: var(--rb-block-radius);
68448
- border: 1px solid var(--er-border);
68449
- padding: 1.25rem;
68450
- background: rgb(var(--tb-surface));
68451
- color: var(--er-on-surface);
68452
- }
68453
-
68454
- :where(.theme-scope)
68455
- :where([data-block='event-registration'], [data-block='course-registration'])
68456
- .er-whole-series-portal-sidebar__icon {
68457
- font-size: 1.5rem;
68458
- margin-bottom: 0.5rem;
68459
- }
68460
-
68461
- :where(.theme-scope)
68462
- :where([data-block='event-registration'], [data-block='course-registration'])
68463
- .er-whole-series-portal-sidebar__title {
68464
- margin: 0;
68465
- font-size: 1rem;
68466
- font-weight: 600;
68467
- }
68468
-
68469
- :where(.theme-scope)
68470
- :where([data-block='event-registration'], [data-block='course-registration'])
68471
- .er-whole-series-portal-sidebar__text {
68472
- margin: 0.5rem 0 0 0;
68473
- font-size: 0.875rem;
68474
- opacity: 0.8;
68475
- }
68476
-
68477
- :where(.theme-scope)
68478
- :where([data-block='event-registration'], [data-block='course-registration'])
68479
- .er-whole-series-portal-sidebar__action {
68480
- margin-top: 1rem;
68481
- }
68482
-
68483
- :where(.theme-scope)
68484
- :where([data-block='event-registration'], [data-block='course-registration'])
68485
- .er-whole-series-portal-sidebar__link {
68486
- color: rgb(var(--tb-primary));
68487
- cursor: pointer;
68488
- text-decoration: underline;
68489
- font-size: 0.875rem;
68490
- }
68491
-
68492
- :where(.theme-scope)
68493
- :where([data-block='event-registration'], [data-block='course-registration'])
68494
- .er-whole-series-portal-sidebar__link:hover {
68495
- text-decoration: none;
68496
- }
68497
-
68498
- /* =============================================================================
68499
- * Modal (for Magic Link)
68500
- * =============================================================================
68501
- */
68502
- :where(.theme-scope)
68503
- :where([data-block='event-registration'], [data-block='course-registration'])
68504
- .er-whole-series-modal-overlay {
68505
- position: fixed;
68506
- inset: 0;
68507
- background: rgba(var(--tb-scrim), 0.5);
68508
- display: flex;
68509
- align-items: center;
68510
- justify-content: center;
68511
- z-index: 100;
68512
- animation: er-whole-series-fade-in 0.15s ease;
68513
- }
68514
-
68515
- :where(.theme-scope)
68516
- :where([data-block='event-registration'], [data-block='course-registration'])
68517
- .er-whole-series-modal {
68518
- background: rgb(var(--tb-surface));
68519
- color: var(--er-on-surface);
68520
- border-radius: var(--rb-block-radius);
68521
- padding: 1.5rem;
68522
- max-width: 28rem;
68523
- width: calc(100% - 2rem);
68524
- position: relative;
68525
- animation: er-whole-series-slide-up 0.2s ease;
68526
- }
68527
-
68528
- :where(.theme-scope)
68529
- :where([data-block='event-registration'], [data-block='course-registration'])
68530
- .er-whole-series-modal-close {
68531
- position: absolute;
68532
- top: 0.75rem;
68533
- right: 0.75rem;
68534
- background: transparent;
68535
- border: 0;
68536
- padding: 0.25rem;
68537
- cursor: pointer;
68538
- opacity: 0.6;
68539
- transition: opacity 0.15s ease;
68540
- }
68541
-
68542
- :where(.theme-scope)
68543
- :where([data-block='event-registration'], [data-block='course-registration'])
68544
- .er-whole-series-modal-close:hover {
68545
- opacity: 1;
68546
- }
68547
-
68548
- @keyframes er-whole-series-fade-in {
68549
- from {
68550
- opacity: 0;
68551
- }
68552
- to {
68553
- opacity: 1;
68554
- }
68555
- }
68556
-
68557
- @keyframes er-whole-series-slide-up {
68558
- from {
68559
- opacity: 0;
68560
- transform: translateY(10px);
68561
- }
68562
- to {
68563
- opacity: 1;
68564
- transform: translateY(0);
68565
- }
68566
- }
68567
-
68568
- /* Reduced motion */
68569
- @media (prefers-reduced-motion: reduce) {
68570
- :where(.theme-scope)
68571
- :where(
68572
- [data-block='event-registration'],
68573
- [data-block='course-registration']
68574
- )
68575
- .er-whole-series-modal-overlay,
68576
- :where(.theme-scope)
68577
- :where(
68578
- [data-block='event-registration'],
68579
- [data-block='course-registration']
68580
- )
68581
- .er-whole-series-modal {
68582
- animation: none;
68583
- }
68584
- }
68585
-
68586
- /* =============================================================================
68587
- * Center States
68588
- * =============================================================================
68589
- */
68590
- :where(.theme-scope)
68591
- :where([data-block='event-registration'], [data-block='course-registration'])
68592
- .er-whole-series-center {
68593
- display: grid;
68594
- place-items: center;
68595
- gap: 0.75rem;
68596
- padding: 2rem 0;
68597
- }
68598
-
68599
- /* =============================================================================
68600
- * Success/Waitlist/Error States
68601
- * =============================================================================
68602
- */
68603
- :where(.theme-scope)
68604
- :where([data-block='event-registration'], [data-block='course-registration'])
68605
- .er-whole-series-success,
68606
- :where(.theme-scope)
68607
- :where([data-block='event-registration'], [data-block='course-registration'])
68608
- .er-whole-series-waitlist,
68609
- :where(.theme-scope)
68610
- :where([data-block='event-registration'], [data-block='course-registration'])
68611
- .er-whole-series-error,
68612
- :where(.theme-scope)
68613
- :where([data-block='event-registration'], [data-block='course-registration'])
68614
- .er-whole-series-payment-failed {
68615
- text-align: center;
68616
- padding: 2rem 1rem;
68617
- }
68618
-
68619
- /* State icon color variants (layout from registration-surface.css) */
68620
- :where(.theme-scope)
68621
- :where([data-block='event-registration'], [data-block='course-registration'])
68622
- .rb-state-icon--success {
68623
- background: var(--er-success-bg);
68624
- color: var(--er-success-text);
68625
- }
68626
-
68627
- :where(.theme-scope)
68628
- :where([data-block='event-registration'], [data-block='course-registration'])
68629
- .rb-state-icon--error {
68630
- background: var(--er-error-bg);
68631
- color: var(--er-error-text);
68632
- }
68633
-
68634
- :where(.theme-scope)
68635
- :where([data-block='event-registration'], [data-block='course-registration'])
68636
- .rb-state-icon--waitlist,
68637
- :where(.theme-scope)
68638
- :where([data-block='event-registration'], [data-block='course-registration'])
68639
- .rb-state-icon--warning {
68640
- background: var(--er-waitlist-bg);
68641
- color: var(--er-waitlist-text);
68642
- }
68643
-
68644
- :where(.theme-scope)
68645
- :where([data-block='event-registration'], [data-block='course-registration'])
68646
- .er-whole-series-success__title,
68647
- :where(.theme-scope)
68648
- :where([data-block='event-registration'], [data-block='course-registration'])
68649
- .er-whole-series-waitlist__title,
68650
- :where(.theme-scope)
68651
- :where([data-block='event-registration'], [data-block='course-registration'])
68652
- .er-whole-series-error__title,
68653
- :where(.theme-scope)
68654
- :where([data-block='event-registration'], [data-block='course-registration'])
68655
- .er-whole-series-payment-failed__title {
68656
- margin: 0.75rem 0 0.5rem 0;
68657
- font-size: 1.125rem;
68658
- font-weight: 700;
68659
- }
68660
-
68661
- :where(.theme-scope)
68662
- :where([data-block='event-registration'], [data-block='course-registration'])
68663
- .er-whole-series-success__message,
68664
- :where(.theme-scope)
68665
- :where([data-block='event-registration'], [data-block='course-registration'])
68666
- .er-whole-series-waitlist__message,
68667
- :where(.theme-scope)
68668
- :where([data-block='event-registration'], [data-block='course-registration'])
68669
- .er-whole-series-error__message,
68670
- :where(.theme-scope)
68671
- :where([data-block='event-registration'], [data-block='course-registration'])
68672
- .er-whole-series-payment-failed__message {
68673
- margin: 0;
68674
- opacity: 0.7;
68675
- }
68676
-
68677
- :where(.theme-scope)
68678
- :where([data-block='event-registration'], [data-block='course-registration'])
68679
- .er-whole-series-success__membership {
68680
- margin-top: 0.5rem;
68681
- font-size: 0.875rem;
68682
- color: var(--er-success-text);
68683
- }
68684
-
68685
- :where(.theme-scope)
68686
- :where([data-block='event-registration'], [data-block='course-registration'])
68687
- .er-whole-series-error__retry,
68688
- :where(.theme-scope)
68689
- :where([data-block='event-registration'], [data-block='course-registration'])
68690
- .er-whole-series-payment-failed__retry {
68691
- margin-top: 1rem;
68692
- }
68693
-
68694
- /* =============================================================================
68695
- * Discount Code Section
68696
- * =============================================================================
68697
- */
68698
- :where(.theme-scope)
68699
- :where([data-block='event-registration'], [data-block='course-registration'])
68700
- .er-whole-series-discount {
68701
- margin-top: 0.5rem;
68702
- }
68703
-
68704
- :where(.theme-scope)
68705
- :where([data-block='event-registration'], [data-block='course-registration'])
68706
- .er-whole-series-discount__form {
68707
- display: grid;
68708
- gap: 0.5rem;
68709
- }
68710
-
68711
- :where(.theme-scope)
68712
- :where([data-block='event-registration'], [data-block='course-registration'])
68713
- .er-whole-series-discount__toggle {
68714
- background: transparent;
68715
- border: 0;
68716
- padding: 0;
68717
- color: rgb(var(--tb-primary));
68718
- cursor: pointer;
68719
- font-size: 0.875rem;
68720
- text-decoration: underline;
68721
- }
68722
-
68723
- :where(.theme-scope)
68724
- :where([data-block='event-registration'], [data-block='course-registration'])
68725
- .er-whole-series-discount__toggle:hover {
68726
- text-decoration: none;
68727
- }
68728
-
68729
- :where(.theme-scope)
68730
- :where([data-block='event-registration'], [data-block='course-registration'])
68731
- .er-whole-series-discount__label {
68732
- font-size: 0.875rem;
68733
- font-weight: 600;
68734
- }
68735
-
68736
- :where(.theme-scope)
68737
- :where([data-block='event-registration'], [data-block='course-registration'])
68738
- .er-whole-series-discount__row {
68739
- display: flex;
68740
- gap: 0.5rem;
68741
- }
68742
-
68743
- :where(.theme-scope)
68744
- :where([data-block='event-registration'], [data-block='course-registration'])
68745
- .er-whole-series-discount__input {
68746
- flex: 1;
68747
- border-radius: calc(var(--rb-block-radius) * 0.6);
68748
- border: 1px solid var(--er-border);
68749
- padding: 0.5rem 0.75rem;
68750
- background: rgb(var(--tb-background));
68751
- color: rgb(var(--tb-foreground));
68752
- font-size: 0.875rem;
68753
- }
68754
-
68755
- :where(.theme-scope)
68756
- :where([data-block='event-registration'], [data-block='course-registration'])
68757
- .er-whole-series-discount__input:focus {
68758
- outline: 2px solid var(--er-focus-ring);
68759
- outline-offset: 2px;
68760
- }
68761
-
68762
- :where(.theme-scope)
68763
- :where([data-block='event-registration'], [data-block='course-registration'])
68764
- .er-whole-series-discount__remove {
68765
- background: transparent;
68766
- border: 0;
68767
- padding: 0.25rem;
68768
- cursor: pointer;
68769
- opacity: 0.6;
68770
- }
68771
-
68772
- :where(.theme-scope)
68773
- :where([data-block='event-registration'], [data-block='course-registration'])
68774
- .er-whole-series-discount__apply {
68775
- background: transparent;
68776
- border: 0;
68777
- padding: 0.25rem;
68778
- cursor: pointer;
68779
- opacity: 0.8;
68780
- }
68781
-
68782
- :where(.theme-scope)
68783
- :where([data-block='event-registration'], [data-block='course-registration'])
68784
- .er-whole-series-discount__remove:hover {
68785
- opacity: 1;
68786
- }
68787
-
68788
- :where(.theme-scope)
68789
- :where([data-block='event-registration'], [data-block='course-registration'])
68790
- .er-whole-series-discount__apply:hover {
68791
- opacity: 1;
68792
- }
68793
-
68794
- :where(.theme-scope)
68795
- :where([data-block='event-registration'], [data-block='course-registration'])
68796
- .er-whole-series-discount__hint {
68797
- margin: 0;
68798
- font-size: 0.875rem;
68799
- opacity: 0.7;
68800
- }
68801
-
68802
- :where(.theme-scope)
68803
- :where([data-block='event-registration'], [data-block='course-registration'])
68804
- .er-whole-series-discount__feedback {
68805
- margin: 0;
68806
- font-size: 0.875rem;
68807
- }
68808
-
68809
- /* =============================================================================
68810
- * Altcha (Spam Protection)
68811
- * =============================================================================
68812
- */
68813
- :where(.theme-scope)
68814
- :where([data-block='event-registration'], [data-block='course-registration'])
68815
- .er-whole-series-altcha {
68816
- margin-top: 1rem;
68817
- }
68818
-
68819
- /* =============================================================================
68820
- * Magic Link Form
68821
- * =============================================================================
68822
- */
68823
- :where(.theme-scope)
68824
- :where([data-block='event-registration'], [data-block='course-registration'])
68825
- .er-whole-series-magic-link-form {
68826
- display: flex;
68827
- flex-direction: column;
68828
- gap: 0.75rem;
68829
- }
68830
-
68831
- :where(.theme-scope)
68832
- :where([data-block='event-registration'], [data-block='course-registration'])
68833
- .er-whole-series-magic-link-title {
68834
- margin: 0;
68835
- font-size: 1.25rem;
68836
- font-weight: 700;
68837
- }
68838
-
68839
- :where(.theme-scope)
68840
- :where([data-block='event-registration'], [data-block='course-registration'])
68841
- .er-whole-series-magic-link-success {
68842
- display: flex;
68843
- flex-direction: column;
68844
- gap: 0.75rem;
68845
- }
68846
-
68847
- :where(.theme-scope)
68848
- :where([data-block='event-registration'], [data-block='course-registration'])
68849
- .er-whole-series-portal-auth-text {
68850
- margin: 0;
68851
- font-size: 0.875rem;
68852
- opacity: 0.8;
68853
- }
68854
-
68855
- :where(.theme-scope)
68856
- :where([data-block='event-registration'], [data-block='course-registration'])
68857
- .er-whole-series-portal-auth-text--success {
68858
- color: var(--er-success-text);
68859
- }
68860
-
68861
- :where(.theme-scope)
68862
- :where([data-block='event-registration'], [data-block='course-registration'])
68863
- .er-whole-series-portal-auth-text--error {
68864
- color: var(--er-error-text);
68865
- }
68866
-
68867
- :where(.theme-scope)
68868
- :where([data-block='event-registration'], [data-block='course-registration'])
68869
- .er-whole-series-modal-btn {
68870
- border-radius: calc(var(--rb-block-radius) * 0.6);
68871
- border: 0;
68872
- padding: 0.6rem 1rem;
68873
- font-size: 0.875rem;
68874
- font-weight: 600;
68875
- cursor: pointer;
68876
- transition: opacity 0.15s ease;
68877
- background: rgb(var(--tb-primary));
68878
- color: rgb(var(--tb-primaryText, 255 255 255));
68879
- }
68880
-
68881
- :where(.theme-scope)
68882
- :where([data-block='event-registration'], [data-block='course-registration'])
68883
- .er-whole-series-modal-btn:hover {
68884
- opacity: 0.9;
68885
- }
68886
-
68887
- :where(.theme-scope)
68888
- :where([data-block='event-registration'], [data-block='course-registration'])
68889
- .er-whole-series-modal-btn:disabled {
68890
- opacity: 0.5;
68891
- cursor: not-allowed;
68892
- }
68893
-
68894
- :where(.theme-scope)
68895
- :where([data-block='event-registration'], [data-block='course-registration'])
68896
- .er-whole-series-modal-btn--secondary {
68897
- background: transparent;
68898
- color: var(--er-on-surface);
68899
- border: 1px solid var(--er-border);
68900
- }
68901
-
68902
- :where(.theme-scope)
68903
- :where([data-block='event-registration'], [data-block='course-registration'])
68904
- .er-whole-series-modal-btn--secondary:hover {
68905
- background: var(--er-on-surface-hover-bg);
68906
- }
68907
-
68908
- /* =============================================================================
68909
- * Utility Classes
68910
- * =============================================================================
68911
- */
68912
- :where(.theme-scope)
68913
- :where([data-block='event-registration'], [data-block='course-registration'])
68914
- .er-whole-series-text--muted {
68915
- opacity: 0.7;
68916
- }
68917
-
68918
- :where(.theme-scope)
68919
- :where([data-block='event-registration'], [data-block='course-registration'])
68920
- .er-whole-series-text--error {
68921
- color: var(--er-error-text);
68922
- }
68923
-
68924
- :where(.theme-scope)
68925
- :where([data-block='event-registration'], [data-block='course-registration'])
68926
- .er-whole-series-text--success {
68927
- color: var(--er-success-text);
68928
- }
68929
-
68930
- :where(.theme-scope)
68931
- :where([data-block='event-registration'], [data-block='course-registration'])
68932
- .er-whole-series-sr-only {
68933
- position: absolute;
68934
- width: 1px;
68935
- height: 1px;
68936
- padding: 0;
68937
- margin: -1px;
68938
- overflow: hidden;
68939
- clip: rect(0, 0, 0, 0);
68940
- white-space: nowrap;
68941
- border-width: 0;
68942
- }
68943
-
68944
- /* Stack utility */
68945
- :where(.theme-scope)
68946
- :where([data-block='event-registration'], [data-block='course-registration'])
68947
- .er-whole-series-stack {
68948
- display: flex;
68949
- flex-direction: column;
68950
- }
68951
-
68952
- :where(.theme-scope)
68953
- :where([data-block='event-registration'], [data-block='course-registration'])
68954
- .er-whole-series-stack--gap-sm {
68955
- gap: 0.5rem;
68956
- }
68957
-
68958
- :where(.theme-scope)
68959
- :where([data-block='event-registration'], [data-block='course-registration'])
68960
- .er-whole-series-stack--gap-md {
68961
- gap: 1rem;
68962
- }
68963
-
68964
- :where(.theme-scope)
68965
- :where([data-block='event-registration'], [data-block='course-registration'])
68966
- .er-whole-series-stack--gap-lg {
68967
- gap: 1.5rem;
68968
- }
68969
-
68970
- /* =============================================================================
68971
- * Block: Newsletter Signup
68972
- * =============================================================================
68973
- */
68974
-
68975
- /* Newsletter copy styling */
68976
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
68977
- font-size: 1.5rem;
68978
- font-weight: 600;
68979
- }
68980
-
68981
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
68982
- font-size: 1rem;
68983
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68984
- opacity: 0.85;
68985
- }
68986
-
68987
- /* Newsletter form container */
68988
- :where(.theme-scope) .newsletter-form {
68989
- width: 100%;
68990
- max-width: 32rem;
68991
- margin-left: auto;
68992
- margin-right: auto;
68993
- }
68994
-
68995
- /* Newsletter form fields container */
68996
- :where(.theme-scope) .newsletter-form-fields {
68997
- display: flex;
68998
- flex-direction: column;
68999
- gap: var(--rb-gap-sm, 0.75rem);
69000
- }
69001
-
69002
- /* Individual field styling */
69003
- :where(.theme-scope) .newsletter-field {
69004
- display: flex;
69005
- flex-direction: column;
69006
- gap: 0.25rem;
69007
- }
69008
-
69009
- /* Required indicator */
69010
- :where(.theme-scope) .newsletter-required {
69011
- color: rgb(var(--tb-primary));
69012
- margin-left: 0.125rem;
69013
- }
69014
-
69015
- /* Submit button container */
69016
- :where(.theme-scope) .newsletter-submit {
69017
- margin-top: 0.5rem;
69018
- }
69019
-
69020
- /* ALTCHA widget container */
69021
- :where(.theme-scope) .newsletter-altcha {
69022
- margin-top: 0.75rem;
69023
- display: flex;
69024
- justify-content: center;
69025
- }
69026
-
69027
- /* Privacy note */
69028
- :where(.theme-scope) .newsletter-privacy-note {
69029
- margin-top: 0.75rem;
69030
- font-size: 1rem;
69031
- line-height: 1.6;
69032
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
69033
- text-align: center;
69034
- }
69035
-
69036
- /* =============================================================================
69037
- * Inline Variant - Horizontal layout
69038
- * =============================================================================
69039
- */
69040
-
69041
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
69042
- flex-direction: row;
69043
- align-items: flex-end;
69044
- flex-wrap: wrap;
69045
- gap: var(--rb-gap-sm, 0.75rem);
69046
- }
69047
-
69048
- :where(.theme-scope) .newsletter-inline .newsletter-field {
69049
- flex: 1 1 auto;
69050
- min-width: 10rem;
69051
- }
69052
-
69053
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
69054
- margin-top: 0;
69055
- flex-shrink: 0;
69056
- }
69057
-
69058
- /* Mobile fallback for inline variant */
69059
- @container rb-site (max-width: 640px) {
69060
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
69061
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
69062
- flex-direction: column;
69063
- }
69064
-
69065
- :where(.theme-scope) .newsletter-inline .newsletter-field {
69066
- min-width: 100%;
69067
- }
69068
- }
69069
- }
69070
-
69071
- /* =============================================================================
69072
- * Editorial Split Variant
69073
- * =============================================================================
69074
- */
69075
-
69076
- :where(.theme-scope) .newsletter-editorial-split {
69077
- display: grid;
69078
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
69079
- gap: clamp(2.5rem, 7vw, 7rem);
69080
- align-items: center;
69081
- text-align: left;
69082
- }
69083
-
69084
- :where(.theme-scope) .newsletter-editorial-split-copy {
69085
- display: flex;
69086
- flex-direction: column;
69087
- gap: var(--rb-gap-sm, 0.75rem);
69088
- }
69089
-
69090
- :where(.theme-scope) .newsletter-editorial-split-form {
69091
- min-width: 0;
69092
- }
69093
-
69094
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
69095
- max-width: none;
69096
- margin-inline: 0;
69097
- }
69098
-
69099
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
69100
- font-size: clamp(2rem, 4vw, 3.5rem);
69101
- font-weight: 500;
69102
- }
69103
-
69104
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
69105
- text-align: left;
69106
- }
69107
-
69108
- @container rb-site (max-width: 767px) {
69109
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
69110
- :where(.theme-scope) .newsletter-editorial-split {
69111
- grid-template-columns: minmax(0, 1fr);
69112
- gap: 2rem;
69113
- }
69114
- }
69115
- }
69116
-
69117
- /* =============================================================================
69118
- * Success State
69119
- * =============================================================================
69120
- */
69121
-
69122
- :where(.theme-scope) .newsletter-success {
69123
- text-align: center;
69124
- }
69125
-
69126
- :where(.theme-scope) .newsletter-success .fb-success {
69127
- padding: 1rem 1.5rem;
69128
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
69129
- border-radius: var(--radius-md, 0.5rem);
69130
- color: rgb(var(--tb-text));
69131
- }
69132
-
69133
- /* =============================================================================
69134
- * Block: Contact + Newsletter
69135
- * =============================================================================
69136
- */
69137
-
69138
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
69139
- display: grid;
69140
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
69141
- gap: clamp(2.5rem, 6vw, 4rem);
69142
- align-items: start;
69143
- }
69144
-
69145
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
69146
- min-width: 0;
69147
- }
69148
-
69149
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
69150
- margin-bottom: 1.5rem;
69151
- }
69152
-
69153
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
69154
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
69155
- margin: 0 0 0.75rem;
69156
- }
69157
-
69158
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
69159
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
69160
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
69161
- }
69162
-
69163
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
69164
- display: flex;
69165
- flex-direction: column;
69166
- align-items: flex-start;
69167
- }
69168
-
69169
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
69170
- max-width: none;
69171
- margin-left: 0;
69172
- margin-right: 0;
69173
- }
69174
-
69175
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
69176
- text-align: left;
69177
- }
69178
-
69179
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
69180
- display: flex;
69181
- flex-direction: column;
69182
- gap: 1rem;
69183
- }
69184
-
69185
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
69186
- display: grid;
69187
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
69188
- gap: 1rem;
69189
- }
69190
-
69191
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
69192
- display: flex;
69193
- flex-direction: column;
69194
- gap: 0.25rem;
69195
- }
69196
-
69197
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
69198
- display: flex;
69199
- flex-direction: column;
69200
- gap: 0.5rem;
69201
- border: none;
69202
- padding: 0;
69203
- margin: 0;
69204
- }
69205
-
69206
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
69207
- display: flex;
69208
- align-items: center;
69209
- gap: 0.5rem;
69210
- }
69211
-
69212
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
69213
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
69214
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
69215
- border-radius: var(--rb-block-radius);
69216
- padding: 1rem;
69217
- font-size: 0.875rem;
69218
- }
69219
-
69220
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
69221
- background-color: var(--fb-success-bg);
69222
- color: var(--fb-success-text);
69223
- border: 1px solid var(--fb-success-border);
69224
- }
69225
-
69226
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
69227
- background-color: var(--fb-error-bg);
69228
- color: var(--fb-error-text);
69229
- border: 1px solid var(--fb-error-border);
69230
- }
69231
-
69232
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
69233
- background-color: var(--fb-empty-bg);
69234
- color: var(--fb-empty-text);
69235
- border: 1px dashed var(--fb-empty-border);
69236
- text-align: center;
69237
- }
69238
-
69239
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
69240
- margin-top: 0.5rem;
69241
- }
69242
-
69243
- /* =============================================================================
69244
- * Block: Team Members
69245
- * =============================================================================
69246
- *
69247
- * Site/theme authors sometimes need different thumbnail shapes/sizes without
69248
- * changing global fragment defaults. We expose these controls on the block and
69249
- * style them via data attributes on the \`.rb-team-members\` wrapper.
69250
- */
69251
-
69252
- /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
69253
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
69254
- text-align: left;
69255
- }
69256
-
69257
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
69258
- align-items: flex-start;
69259
- text-align: left;
69260
- }
69261
-
69262
- @container rb-site (min-width: 1024px) {
69263
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
69264
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
69265
- width: 75%;
69266
- margin-left: 0;
69267
- margin-right: auto;
69268
- }
69269
- }
69270
- }
69271
-
69272
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
69273
- display: block;
69274
- width: 100%;
69275
- height: auto;
69276
- }
69277
-
69278
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
69279
- font-weight: 600;
69280
- }
69281
-
69282
- /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
69283
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
69284
- --rb-team-thumb-max: 11.25rem; /* ~180px default */
69285
- --rb-team-image-basis: 33.333%;
69286
- }
69287
-
69288
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
69289
- --rb-team-thumb-max: 8.75rem; /* ~140px */
69290
- --rb-team-image-basis: 25%;
69291
- }
69292
-
69293
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
69294
- --rb-team-thumb-max: 11.25rem; /* ~180px */
69295
- --rb-team-image-basis: 33.333%;
69296
- }
69297
-
69298
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
69299
- --rb-team-thumb-max: 13.75rem; /* ~220px */
69300
- --rb-team-image-basis: 40%;
69301
- }
69302
-
69303
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
69304
- --rb-team-thumb-max: 17.5rem; /* ~280px */
69305
- --rb-team-image-basis: 50%;
69306
- }
69307
-
69308
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
69309
- --rb-team-thumb-max: 22.5rem; /* ~360px */
69310
- --rb-team-image-basis: 66.667%;
67057
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
67058
+ --rb-team-thumb-max: 22.5rem; /* ~360px */
67059
+ --rb-team-image-basis: 66.667%;
69311
67060
  }
69312
67061
 
69313
67062
  /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
@@ -74547,69 +72296,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74547
72296
  }
74548
72297
  });
74549
72298
  //#endregion
74550
- //#region ../api/src/courseEndpointDefinitions.ts
74551
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74552
- listCourses: {
74553
- path: "/sites/{siteId}/bookings/courses",
74554
- method: "GET",
74555
- auth: "user",
74556
- responseKind: "json"
74557
- },
74558
- exportCoursesCsv: {
74559
- path: "/sites/{siteId}/bookings/courses/export.csv",
74560
- method: "GET",
74561
- tags: [
74562
- "site-{siteId}",
74563
- "bookings",
74564
- "courses-{siteId}"
74565
- ],
74566
- errors: [],
74567
- auth: "user",
74568
- responseKind: "blob"
74569
- },
74570
- createCourse: {
74571
- path: "/sites/{siteId}/bookings/courses",
74572
- method: "POST",
74573
- auth: "user",
74574
- responseKind: "json",
74575
- errors: [
74576
- "validation:invalid_input",
74577
- "resource:not_found",
74578
- "resource:already_exists",
74579
- "resource:conflict",
74580
- "server:internal_error"
74581
- ]
74582
- },
74583
- getCourse: {
74584
- path: "/sites/{siteId}/bookings/courses/{courseId}",
74585
- method: "GET",
74586
- auth: "user",
74587
- responseKind: "json"
74588
- },
74589
- updateCourse: {
74590
- path: "/sites/{siteId}/bookings/courses/{courseId}",
74591
- method: "PATCH",
74592
- auth: "user",
74593
- responseKind: "json",
74594
- errors: [
74595
- "validation:invalid_input",
74596
- "resource:not_found",
74597
- "resource:conflict",
74598
- "server:internal_error"
74599
- ]
74600
- },
74601
- deleteCourse: {
74602
- path: "/sites/{siteId}/bookings/courses/{courseId}",
74603
- method: "DELETE",
74604
- auth: "user",
74605
- responseKind: "json",
74606
- errors: [
74607
- "validation:invalid_input",
74608
- "resource:not_found",
74609
- "resource:conflict",
74610
- "server:internal_error"
74611
- ]
74612
- },
72299
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
72300
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74613
72301
  deleteEventOffering: {
74614
72302
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
74615
72303
  method: "DELETE",
@@ -74622,20 +72310,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74622
72310
  "server:internal_error"
74623
72311
  ]
74624
72312
  },
74625
- duplicateCourse: {
74626
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
74627
- method: "POST",
74628
- auth: "user",
74629
- responseKind: "json",
74630
- errors: [
74631
- "validation:invalid_input",
74632
- "resource:not_found",
74633
- "resource:already_exists",
74634
- "server:internal_error"
74635
- ]
74636
- },
74637
- changeCourseContentOwnership: {
74638
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
72313
+ changeEventSeriesContentOwnership: {
72314
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
74639
72315
  method: "POST",
74640
72316
  auth: "user",
74641
72317
  responseKind: "json",
@@ -74646,8 +72322,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74646
72322
  "server:internal_error"
74647
72323
  ]
74648
72324
  },
74649
- addCourseEnrollment: {
74650
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
72325
+ addEventSeriesRegistration: {
72326
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
74651
72327
  method: "POST",
74652
72328
  auth: "user",
74653
72329
  responseKind: "json",
@@ -74658,33 +72334,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74658
72334
  "server:internal_error"
74659
72335
  ]
74660
72336
  },
74661
- listCourseEnrollments: {
74662
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
72337
+ listEventSeriesRegistrations: {
72338
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
74663
72339
  method: "GET",
74664
72340
  auth: "user",
74665
72341
  responseKind: "json"
74666
72342
  },
74667
- exportCourseEnrollmentsCsv: {
74668
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
72343
+ exportEventSeriesRegistrationsCsv: {
72344
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
74669
72345
  method: "GET",
74670
72346
  auth: "user",
74671
72347
  errors: [],
74672
72348
  responseKind: "blob"
74673
72349
  },
74674
- exportCourseWaitlistCsv: {
74675
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
74676
- method: "GET",
74677
- tags: [
74678
- "site-{siteId}",
74679
- "bookings",
74680
- "courses-{courseId}"
74681
- ],
74682
- auth: "user",
74683
- responseKind: "blob",
74684
- errors: []
74685
- },
74686
- updateCourseEnrollment: {
74687
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
72350
+ updateEventSeriesRegistration: {
72351
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
74688
72352
  method: "PATCH",
74689
72353
  auth: "user",
74690
72354
  responseKind: "json",
@@ -75072,71 +72736,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
75072
72736
  errors: ["resource:not_found", "server:internal_error"],
75073
72737
  auth: "public",
75074
72738
  responseKind: "json"
75075
- },
75076
- registerForWholeSeries: {
75077
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
75078
- method: "POST",
75079
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
75080
- errors: [
75081
- "auth:unauthenticated",
75082
- "auth:forbidden",
75083
- "validation:invalid_input",
75084
- "resource:not_found",
75085
- "resource:conflict",
75086
- "resource:already_exists",
75087
- "server:internal_error"
75088
- ],
75089
- auth: "public",
75090
- responseKind: "json"
75091
- },
75092
- checkWholeSeriesEligibility: {
75093
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
75094
- method: "POST",
75095
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
75096
- errors: [
75097
- "auth:unauthenticated",
75098
- "resource:not_found",
75099
- "resource:conflict",
75100
- "server:internal_error"
75101
- ],
75102
- auth: "public",
75103
- responseKind: "json"
75104
- },
75105
- createWholeSeriesCheckout: {
75106
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
72739
+ }
72740
+ });
72741
+ //#endregion
72742
+ //#region ../api/src/publicEventEndpointDefinitions.ts
72743
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72744
+ getPublicEventRegistrationOptions: {
72745
+ path: "/public/sites/{siteId}/events/registration-options",
75107
72746
  method: "POST",
75108
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
72747
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
75109
72748
  auth: "public",
75110
72749
  responseKind: "json",
75111
72750
  errors: [
75112
- "auth:unauthenticated",
75113
72751
  "validation:invalid_input",
75114
72752
  "resource:not_found",
75115
72753
  "resource:conflict",
75116
72754
  "server:internal_error"
75117
72755
  ]
75118
72756
  },
75119
- getWholeSeriesRegistrationStatus: {
75120
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
72757
+ resolveEventSubroute: {
72758
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
75121
72759
  method: "GET",
75122
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
75123
- errors: ["resource:not_found", "server:internal_error"],
72760
+ revalidate: 60,
72761
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
75124
72762
  auth: "public",
75125
- responseKind: "json"
72763
+ responseKind: "json",
72764
+ errors: []
75126
72765
  }
75127
72766
  });
75128
72767
  //#endregion
75129
- //#region ../api/src/publicEventEndpointDefinitions.ts
75130
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
75131
- path: "/public/sites/{siteId}/events/subroutes/resolve",
75132
- method: "GET",
75133
- revalidate: 60,
75134
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
75135
- auth: "public",
75136
- responseKind: "json",
75137
- errors: []
75138
- } });
75139
- //#endregion
75140
72768
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
75141
72769
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
75142
72770
  listSiteApiKeys: {
@@ -75504,7 +73132,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
75504
73132
  }), 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, {
75505
73133
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
75506
73134
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
75507
- ...COURSE_ENDPOINT_DEFINITIONS
73135
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
75508
73136
  }, 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 };
75509
73137
  z$1.object({ refreshToken: z$1.string().min(1).max(4096) }).strict();
75510
73138
  z$1.object({
@@ -76677,6 +74305,68 @@ function parsePublicProductCategorySelector(value) {
76677
74305
  };
76678
74306
  }
76679
74307
  //#endregion
74308
+ //#region ../api/src/bookingPaymentTermSchemas.ts
74309
+ const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
74310
+ const bookingInstalmentPlanSchema = z$1.discriminatedUnion("kind", [
74311
+ z$1.object({
74312
+ kind: z$1.literal("deposit_plus_one_remainder"),
74313
+ depositAmountCents: z$1.number().int().nonnegative(),
74314
+ depositRefundability: bookingDepositRefundPolicySchema,
74315
+ remainderDueCount: z$1.number().int().positive(),
74316
+ intervalUnit: z$1.enum([
74317
+ "day",
74318
+ "week",
74319
+ "month"
74320
+ ])
74321
+ }),
74322
+ z$1.object({
74323
+ kind: z$1.literal("deposit_plus_scheduled_instalments"),
74324
+ depositAmountCents: z$1.number().int().nonnegative(),
74325
+ depositRefundability: bookingDepositRefundPolicySchema,
74326
+ instalmentCount: z$1.number().int().positive(),
74327
+ intervalCount: z$1.number().int().positive(),
74328
+ intervalUnit: z$1.enum([
74329
+ "day",
74330
+ "week",
74331
+ "month"
74332
+ ])
74333
+ }),
74334
+ z$1.object({
74335
+ kind: z$1.literal("equal_scheduled_instalments"),
74336
+ instalmentCount: z$1.number().int().positive(),
74337
+ intervalCount: z$1.number().int().positive(),
74338
+ intervalUnit: z$1.enum([
74339
+ "day",
74340
+ "week",
74341
+ "month"
74342
+ ])
74343
+ })
74344
+ ]);
74345
+ const bookingFlexibleBalanceDueDateRuleSchema = z$1.discriminatedUnion("kind", [z$1.object({
74346
+ kind: z$1.literal("relative_to_start_date"),
74347
+ daysBeforeStart: z$1.number().int().positive()
74348
+ }), z$1.object({
74349
+ kind: z$1.literal("fixed_calendar_date"),
74350
+ dueAt: z$1.string().datetime()
74351
+ })]);
74352
+ const bookingFlexibleBalanceConfigSchema = z$1.object({
74353
+ upfrontAmountCents: z$1.number().int().nonnegative(),
74354
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
74355
+ depositRefundability: bookingDepositRefundPolicySchema
74356
+ });
74357
+ z$1.discriminatedUnion("kind", [
74358
+ z$1.object({ kind: z$1.literal("upfront") }),
74359
+ z$1.object({ kind: z$1.literal("deferred_manual") }),
74360
+ z$1.object({
74361
+ kind: z$1.literal("instalment_plan"),
74362
+ plan: bookingInstalmentPlanSchema
74363
+ }),
74364
+ z$1.object({
74365
+ kind: z$1.literal("flexible_balance"),
74366
+ config: bookingFlexibleBalanceConfigSchema
74367
+ })
74368
+ ]);
74369
+ //#endregion
76680
74370
  //#region ../api/src/navigationMenuValidation.ts
76681
74371
  function hasChildren(item) {
76682
74372
  return Array.isArray(item.children) && item.children.length > 0;
@@ -78941,40 +76631,6 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
78941
76631
  plural: "Events"
78942
76632
  }
78943
76633
  },
78944
- course: {
78945
- version: 1,
78946
- fields: [
78947
- {
78948
- id: "summary",
78949
- type: "textarea",
78950
- label: "Summary",
78951
- description: "Short teaser shown in listings.",
78952
- rows: 3
78953
- },
78954
- {
78955
- id: "image",
78956
- type: "media",
78957
- label: "Listing image",
78958
- description: "Optional image used for course cards and previews."
78959
- },
78960
- {
78961
- id: "body",
78962
- type: "richText",
78963
- label: "Details",
78964
- description: "Full course details and curriculum."
78965
- }
78966
- ],
78967
- routing: {
78968
- enabled: true,
78969
- pattern: "/courses/{slug}",
78970
- slugField: "slug",
78971
- prefix: "/courses/"
78972
- },
78973
- labels: {
78974
- singular: "Course",
78975
- plural: "Courses"
78976
- }
78977
- },
78978
76634
  "team-member": {
78979
76635
  version: 1,
78980
76636
  fields: [
@@ -79174,7 +76830,7 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
79174
76830
  function deriveFieldIdSet(schema) {
79175
76831
  return new Set(schema.fields.map((f) => f.id));
79176
76832
  }
79177
- 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"]);
76833
+ 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"]);
79178
76834
  //#endregion
79179
76835
  //#region ../field-primitives/src/bindings/index.ts
79180
76836
  const BINDING_TRANSFORMS$1 = {
@@ -79257,7 +76913,6 @@ function selectBlocksForDeclaredEntrySlot(input) {
79257
76913
  //#region ../content-model/src/templates/defaults.ts
79258
76914
  const POST_EXCERPT_FALLBACK = fallbackBinding$1(fieldBinding$1("excerpt"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
79259
76915
  const EVENT_SUBHEADLINE_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
79260
- const COURSE_SUMMARY_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
79261
76916
  const ENTRY_TITLE_INLINE_TEXT = transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.TEXT_INLINE_TEXT, { input: metaBinding$1("title") });
79262
76917
  const POST_BODY_TEXT_BINDINGS = {
79263
76918
  body: fieldBinding$1("body"),
@@ -79372,7 +77027,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
79372
77027
  showVenue: true,
79373
77028
  showCapacity: true,
79374
77029
  successMessage: "Thank you for registering! Check your email for confirmation details.",
79375
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
79376
77030
  buttonText: "Complete Registration",
79377
77031
  buttonVariant: "primary"
79378
77032
  },
@@ -79383,64 +77037,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
79383
77037
  }
79384
77038
  ]
79385
77039
  },
79386
- course: {
79387
- templateKey: "default",
79388
- name: "Course detail",
79389
- description: "Standard landing page for multi-session courses.",
79390
- metadata: {},
79391
- blocks: [
79392
- {
79393
- blockKind: "block.hero",
79394
- scope: "entry",
79395
- bindings: {
79396
- eyebrow: literalBinding$1("Course"),
79397
- headline: metaBinding$1("title"),
79398
- headlineInline: ENTRY_TITLE_INLINE_TEXT,
79399
- subheadline: COURSE_SUMMARY_FALLBACK
79400
- }
79401
- },
79402
- {
79403
- blockKind: "block.course-details",
79404
- scope: "entry",
79405
- content: {
79406
- heading: "Course details",
79407
- showTitle: false,
79408
- showDescription: false,
79409
- showSessions: true,
79410
- sessionsLimit: "10",
79411
- showVenue: true,
79412
- showPrice: true,
79413
- showCapacity: true,
79414
- showEnrollmentStatus: true,
79415
- showMembershipNote: true
79416
- }
79417
- },
79418
- {
79419
- blockKind: SYSTEM_ENTRY_SLOT_BLOCK_KIND,
79420
- scope: "template",
79421
- content: {
79422
- slotKey: "main",
79423
- label: "Page content"
79424
- }
79425
- },
79426
- {
79427
- blockKind: "block.course-registration",
79428
- scope: "entry",
79429
- content: {
79430
- heading: "Enroll in this course",
79431
- showSessions: true,
79432
- showPrice: true,
79433
- showCapacity: true,
79434
- showVenue: true,
79435
- successMessage: "You're enrolled! Check your email for confirmation and session details.",
79436
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
79437
- membershipMessage: "Enrolled using your membership! Check your email for session details.",
79438
- buttonText: "Complete Enrollment",
79439
- buttonVariant: "primary"
79440
- }
79441
- }
79442
- ]
79443
- },
79444
77040
  "team-member": {
79445
77041
  templateKey: "default",
79446
77042
  name: "Team member profile",