@riverbankcms/sdk 0.134.0 → 0.135.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/README.md +1 -1
  3. package/dist/{PreviewEditorSidebar-DfRhJPFQ.mjs → PreviewEditorSidebar-roNY0GVy.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-Dppxcr_g.mjs → PreviewEditorUI-KboDbEh_.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-D51gQaG3.mjs → PreviewQueryProvider-DcgaESkm.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-8CyGCXir.mjs → SdkPreviewModeRuntime-DBrF7Caa.mjs} +5 -5
  7. package/dist/{SiteChromeCustomizeContext-DVMTMvqA.mjs → SiteChromeCustomizeContext-DrIEpJKn.mjs} +4070 -8011
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +165 -165
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +15 -15
  10. package/dist/_dts/api/src/bookingConfig.d.ts +1 -1
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +25 -60
  12. package/dist/_dts/api/src/bookingOperations.d.ts +111 -161
  13. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +123 -0
  14. package/dist/_dts/api/src/bookingRecords.d.ts +13 -13
  15. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  16. package/dist/_dts/api/src/bookingSessionSummaryTypes.d.ts +34 -0
  17. package/dist/_dts/api/src/bookings.d.ts +5 -9
  18. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -7
  19. package/dist/_dts/api/src/communications.d.ts +1 -1
  20. package/dist/_dts/api/src/endpoints.d.ts +29 -109
  21. package/dist/_dts/api/src/eventManagementContracts.d.ts +1 -1
  22. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +43 -0
  23. package/dist/_dts/api/src/index.d.ts +3 -4
  24. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  25. package/dist/_dts/api/src/participantMessaging.d.ts +2 -2
  26. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +8 -0
  27. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +32 -28
  28. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +85 -5
  29. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +1 -1
  30. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +9 -100
  31. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +7 -6
  32. package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +0 -32
  33. package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +1 -1
  34. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -1
  35. package/dist/_dts/api/src/siteOperations.d.ts +2 -2
  36. package/dist/_dts/api/src/types.d.ts +1 -1
  37. package/dist/_dts/api/src/{courses.d.ts → wholeSeriesOfferings.d.ts} +43 -95
  38. package/dist/_dts/blocks/src/client.d.ts +0 -5
  39. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  40. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +5 -94
  41. package/dist/_dts/blocks/src/portal/dateFormatting.d.ts +3 -0
  42. package/dist/_dts/blocks/src/portal/types.d.ts +17 -20
  43. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +147 -42
  44. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +10 -10
  45. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +3 -0
  46. package/dist/_dts/blocks/src/system/blocks/index.d.ts +0 -2
  47. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +3 -3
  48. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +3 -3
  49. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  50. package/dist/_dts/blocks/src/system/node/builder.d.ts +0 -1
  51. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +9 -12
  52. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +2 -44
  53. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +99 -59
  56. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  57. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +19 -16
  58. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -0
  59. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +1 -1
  60. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -247
  61. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +13 -126
  62. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +0 -1
  63. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -3
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.d.ts +8 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +17 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +18 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +1 -3
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +7 -4
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +0 -1
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +7 -8
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +4 -4
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +5 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +28 -0
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +12 -11
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +53 -45
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +10 -6
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +9 -1
  83. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +20 -5
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +20 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +5 -56
  86. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +20 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +6 -22
  88. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DateTimeTile.d.ts +1 -1
  89. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +6 -6
  90. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +2 -2
  91. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +6 -1
  92. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +1 -13
  93. package/dist/_dts/blocks/src/system/runtime/shared/components/LoggedInAsUser.d.ts +1 -1
  94. package/dist/_dts/blocks/src/system/runtime/shared/components/MembershipHero.d.ts +1 -1
  95. package/dist/_dts/blocks/src/system/runtime/shared/components/StateIcon.d.ts +1 -1
  96. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +1 -1
  97. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -1
  98. package/dist/_dts/blocks/src/system/runtime/shared/utils/checkoutUrls.d.ts +2 -2
  99. package/dist/_dts/commerce/src/index.d.ts +16 -0
  100. package/dist/_dts/commerce/src/money.d.ts +122 -0
  101. package/dist/_dts/commerce/src/moneyContracts.d.ts +178 -0
  102. package/dist/_dts/commerce/src/moneyDateUtils.d.ts +22 -0
  103. package/dist/_dts/commerce/src/moneyPayments.d.ts +59 -0
  104. package/dist/_dts/commerce/src/moneyPlanningTime.d.ts +4 -0
  105. package/dist/_dts/commerce/src/moneyReceiptReadModel.d.ts +68 -0
  106. package/dist/_dts/commerce/src/moneyReport.d.ts +105 -0
  107. package/dist/_dts/commerce/src/moneyReportBreakdowns.d.ts +3 -0
  108. package/dist/_dts/commerce/src/moneyReportKindFilter.d.ts +4 -0
  109. package/dist/_dts/commerce/src/moneyReportPage.d.ts +132 -0
  110. package/dist/_dts/commerce/src/purchase/checkoutCollectionPlan.d.ts +1 -1
  111. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +1 -1
  112. package/dist/_dts/commerce/src/purchase/orderCompletionEmailPlan.d.ts +3 -3
  113. package/dist/_dts/commerce/src/purchase/orderFulfillmentPlan.d.ts +6 -25
  114. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +4 -4
  115. package/dist/_dts/commerce/src/purchase/orderPlanningTypes.d.ts +11 -11
  116. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +1 -1
  117. package/dist/_dts/commerce/src/purchase/persistedCheckoutLines.d.ts +1 -1
  118. package/dist/_dts/commerce/src/purchase/types.d.ts +12 -8
  119. package/dist/_dts/commerce/src/shop/digitalFulfillment.d.ts +111 -0
  120. package/dist/_dts/commerce/src/shop/fulfillmentStatus.d.ts +10 -0
  121. package/dist/_dts/commerce/src/shop/inventoryRestore.d.ts +13 -0
  122. package/dist/_dts/commerce/src/shop/shippingAddress.d.ts +18 -0
  123. package/dist/_dts/commerce/src/types/json.d.ts +3 -0
  124. package/dist/_dts/commerce/src/utils/isPlainRecord.d.ts +1 -0
  125. package/dist/_dts/commerce/src/waitlists.d.ts +172 -0
  126. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +0 -30
  127. package/dist/_dts/content-model/src/content-types/builtins.d.ts +2 -39
  128. package/dist/_dts/content-model/src/metadataConfig.d.ts +0 -1
  129. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -68
  130. package/dist/_dts/core/src/branded.d.ts +3 -3
  131. package/dist/_dts/core/src/event-pricing.d.ts +6 -6
  132. package/dist/_dts/core/src/participants.d.ts +17 -17
  133. package/dist/_dts/core/src/rectification.d.ts +1 -1
  134. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +890 -2154
  135. package/dist/_dts/sdk/src/bookings/index.d.ts +4 -5
  136. package/dist/_dts/sdk/src/bookings/types.d.ts +34 -4
  137. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +4 -6
  138. package/dist/_dts/sdk/src/version.d.ts +1 -1
  139. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +0 -2
  140. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  141. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +1 -1
  142. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +1 -1
  143. package/dist/client/{usePolling-UN4WKnaM.mjs → BookingConsentAgreement-BQqwi8Oa.mjs} +180 -4
  144. package/dist/client/{DiscountCodeDisclosure-CfuPOHD0.mjs → DiscountCodeDisclosure-B97aMo0V.mjs} +13 -27
  145. package/dist/client/{EventCombined.client-DB8Qfzi-.mjs → EventCombined.client-Bs2Iw9Q6.mjs} +3 -3
  146. package/dist/client/{EventListing.client-DD4X8hp4.mjs → EventListing.client-C4QUQdmg.mjs} +2 -2
  147. package/dist/client/{LeafletStaticMap-QhgIBQbv.mjs → LeafletStaticMap-CwWRk69M.mjs} +1 -1
  148. package/dist/client/{accordion-DFXpLvwg.mjs → accordion-BA0j8Mpw.mjs} +1 -1
  149. package/dist/client/{bookingForm-sI05d3lk.mjs → bookingForm-Br2e41H0.mjs} +6 -7
  150. package/dist/client/bookings.mjs +912 -1906
  151. package/dist/client/{carousel-wjyWTZCh.mjs → carousel-B4dmwnpD.mjs} +1 -1
  152. package/dist/client/{cart-DCwdpA4i.mjs → cart-B_ckGW4b.mjs} +3 -3
  153. package/dist/client/{checkout-DTDW3l0R.mjs → checkout-DAyspHdf.mjs} +3 -3
  154. package/dist/client/{checkoutUrls-DQYC_Br-.mjs → checkoutUrls-BuseL0dw.mjs} +4 -2
  155. package/dist/client/client.mjs +5074 -9309
  156. package/dist/client/{context-TSK1CGx8.mjs → context-DljQn8L5.mjs} +15 -69
  157. package/dist/client/{eventCalendar-B0Zg-i_w.mjs → eventCalendar-pJu3FUod.mjs} +5 -5
  158. package/dist/client/{eventCombined-B8Y2wizd.mjs → eventCombined-B6Kacm9F.mjs} +3 -3
  159. package/dist/client/{eventDetails-DPDOwURJ.mjs → eventDetails-CaX9z1pv.mjs} +8 -8
  160. package/dist/client/{eventListing-CjBcmSLn.mjs → eventListing-B9aXPO-I.mjs} +3 -3
  161. package/dist/client/{eventRegistration-CK30HsAq.mjs → eventRegistration-CBSovBkg.mjs} +4522 -3690
  162. package/dist/client/{form-CUXfsABE.mjs → form-Cm0tu_7o.mjs} +2 -2
  163. package/dist/client/{headerSection-N-mN3rjr.mjs → headerSection-OgRtHeKS.mjs} +2 -2
  164. package/dist/client/hooks.mjs +430 -692
  165. package/dist/client/{locationMap-oiIDQMBt.mjs → locationMap-DmjcYqNM.mjs} +2 -2
  166. package/dist/client/{newsletterForm-CkQ2tTrM.mjs → newsletterForm-D08OZQAC.mjs} +2 -2
  167. package/dist/client/{productDetail-CnidyrsN.mjs → productDetail-BqZeu2P4.mjs} +3 -3
  168. package/dist/client/{productList-CttYcS_S.mjs → productList-mNyIF9FG.mjs} +3 -3
  169. package/dist/client/{propsDecoder-CeUMxI9a.mjs → propsDecoder-DwHXRm9X.mjs} +4656 -4419
  170. package/dist/client/rendering/client.mjs +59504 -62158
  171. package/dist/client/rendering/islands.mjs +17 -19
  172. package/dist/client/rendering.mjs +5354 -9683
  173. package/dist/client/{scrollToBlock-lPr1oqxB.mjs → scrollToBlock-DtmdM3v-.mjs} +2 -2
  174. package/dist/client/{shop-DXQtMo2O.mjs → shop-CNjZK16F.mjs} +6 -6
  175. package/dist/client/{shop-commerce-quDL411J.mjs → shop-commerce-DkNNao1J.mjs} +6 -6
  176. package/dist/client/{shop-commerce-store-Dnu-8Iub.mjs → shop-commerce-store-9WA--zuW.mjs} +1 -1
  177. package/dist/client/{shopShared-BWPUURvG.mjs → shopShared-CHCVfccY.mjs} +3 -3
  178. package/dist/client/{useEventFilters-DRhWp2_5.mjs → useEventFilters-DvuaB4ZN.mjs} +3 -3
  179. package/dist/preview-next/before-render.mjs +40 -161
  180. package/dist/preview-next/client/runtime.mjs +4 -4
  181. package/dist/preview-next/keepAlive.mjs +40 -161
  182. package/dist/preview-next/middleware.mjs +40 -161
  183. package/dist/{previewAuthStore-BFKd4LrN.mjs → previewAuthStore-C7ksxt5b.mjs} +40 -161
  184. package/dist/{sdk-runtime-Ca5RD78X.mjs → sdk-runtime-3GhW4knb.mjs} +2 -2
  185. package/dist/{separator-CMhj6BTi.mjs → separator-D3bCWYYb.mjs} +1 -1
  186. package/dist/server/components.mjs +535 -2950
  187. package/dist/server/config-validation.mjs +430 -692
  188. package/dist/server/config.mjs +430 -692
  189. package/dist/server/data.mjs +430 -692
  190. package/dist/server/index.mjs +41 -162
  191. package/dist/server/next.mjs +549 -2964
  192. package/dist/server/page-converter.mjs +331 -560
  193. package/dist/server/prebuild.mjs +1 -1
  194. package/dist/server/rendering/server.mjs +534 -2855
  195. package/dist/server/rendering.mjs +535 -2950
  196. package/dist/server/routing.mjs +574 -1065
  197. package/dist/server/server.mjs +444 -706
  198. package/dist/server/theme-bridge.mjs +41 -1524
  199. package/dist/styles/index.css +41 -1348
  200. package/package.json +1 -1
  201. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +0 -99
  202. package/dist/_dts/blocks/src/client/course-registration.d.ts +0 -5
  203. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -134
  204. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +0 -130
  205. package/dist/_dts/blocks/src/system/blocks/courses/shared/index.d.ts +0 -3
  206. package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +0 -2
  207. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +0 -1
  208. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +0 -1
  209. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +0 -135
  210. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +0 -28
  211. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +0 -11
  212. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/runs.d.ts +0 -10
  213. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +0 -15
  214. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +0 -20
  215. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +0 -14
  216. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.client.d.ts +0 -10
  217. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +0 -181
  218. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +0 -12
  219. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.d.ts +0 -8
  220. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/BookingModeStep.d.ts +0 -32
  221. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/CheckIcon.d.ts +0 -4
  222. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/ErrorStep.d.ts +0 -17
  223. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/MembershipHero.d.ts +0 -12
  224. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PaymentFailedStep.d.ts +0 -17
  225. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PortalAuthSidebar.d.ts +0 -9
  226. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/StepIndicator.d.ts +0 -6
  227. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/SuccessStep.d.ts +0 -14
  228. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/VerifyingTimeoutStep.d.ts +0 -17
  229. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WaitlistStep.d.ts +0 -12
  230. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationActiveSteps.d.ts +0 -9
  231. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationErrorBoundary.d.ts +0 -25
  232. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationTerminalContent.d.ts +0 -8
  233. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationWizard.d.ts +0 -8
  234. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +0 -46
  235. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/index.d.ts +0 -18
  236. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/presentation.d.ts +0 -7
  237. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/pricing.d.ts +0 -14
  238. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/types.d.ts +0 -105
  239. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesEligibility.d.ts +0 -24
  240. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesPaymentVerification.d.ts +0 -10
  241. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationActions.d.ts +0 -35
  242. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationPortal.d.ts +0 -7
  243. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationSelection.d.ts +0 -35
  244. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationWizard.d.ts +0 -185
  245. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesWaitlistSelection.d.ts +0 -14
  246. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/utils.d.ts +0 -43
  247. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.contract.d.ts +0 -325
  248. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.planning.d.ts +0 -27
  249. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.d.ts +0 -17
  250. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesRegistrationViewState.d.ts +0 -21
  251. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wizardSteps.d.ts +0 -30
  252. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +0 -3
  253. package/dist/_dts/theme-core/src/blocks/vars/course-details.d.ts +0 -16
  254. package/dist/_dts/theme-core/src/blocks/vars/course-registration.d.ts +0 -21
  255. package/dist/client/BookingConsentAgreement-BxgpGEFD.mjs +0 -160
  256. package/dist/client/WholeSeriesRegistrationWizard-DwtC7bCs.mjs +0 -2546
  257. package/dist/client/courseRegistration-A-Tg7qw_.mjs +0 -52
  258. package/dist/client/pricing-Caa0QWzh.mjs +0 -195
@@ -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,7 +32036,7 @@ 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,
@@ -32048,8 +32054,8 @@ z$1.discriminatedUnion("kind", [
32048
32054
  label: z$1.string()
32049
32055
  }),
32050
32056
  z$1.object({
32051
- kind: z$1.literal("course"),
32052
- display: publicCoursePriceDisplaySchema
32057
+ kind: z$1.literal("whole_series"),
32058
+ display: publicWholeSeriesPriceDisplaySchema
32053
32059
  })
32054
32060
  ]);
32055
32061
  const publicEventTicketTypePriceDisplaySchema = z$1.union([
@@ -32151,10 +32157,10 @@ const publicEventPricingSchema = z$1.discriminatedUnion("kind", [
32151
32157
  })
32152
32158
  }),
32153
32159
  z$1.object({
32154
- kind: z$1.literal("course"),
32160
+ kind: z$1.literal("whole_series"),
32155
32161
  display: z$1.object({
32156
- kind: z$1.literal("course"),
32157
- display: publicCoursePriceDisplaySchema
32162
+ kind: z$1.literal("whole_series"),
32163
+ display: publicWholeSeriesPriceDisplaySchema
32158
32164
  })
32159
32165
  }),
32160
32166
  z$1.object({
@@ -32597,7 +32603,8 @@ function resolveEventRegistrationScope(context) {
32597
32603
  };
32598
32604
  return { kind: "unscoped" };
32599
32605
  }
32600
- function applyEventRegistrationScope(events, scope) {
32606
+ function resolveEventRegistrationScopedEvents(events, context) {
32607
+ const scope = resolveEventRegistrationScope(context);
32601
32608
  switch (scope.kind) {
32602
32609
  case "occurrenceSeries":
32603
32610
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -32609,9 +32616,6 @@ function applyEventRegistrationScope(events, scope) {
32609
32616
  case "unscoped": return [...events];
32610
32617
  }
32611
32618
  }
32612
- function resolveEventRegistrationScopedEvents(events, context) {
32613
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
32614
- }
32615
32619
  //#endregion
32616
32620
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
32617
32621
  function planEventRegistrationScope(input) {
@@ -32705,14 +32709,14 @@ function isRecord$23(value) {
32705
32709
  }
32706
32710
  function isPublicEventPricing(value) {
32707
32711
  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";
32712
+ 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
32713
  }
32710
32714
  function isPublicEventTicketType(value) {
32711
32715
  return isRecord$23(value) && typeof value.id === "string";
32712
32716
  }
32713
32717
  function readTicketTypePriceDisplay(value, currency) {
32714
32718
  const display = readLegacyPriceDisplay(value, currency);
32715
- return display.kind === "course" || display.kind === "external" ? {
32719
+ return display.kind === "whole_series" || display.kind === "external" ? {
32716
32720
  kind: "unavailable",
32717
32721
  currency
32718
32722
  } : display;
@@ -32770,11 +32774,11 @@ function readLegacyPriceDisplay(value, currency) {
32770
32774
  kind: "unavailable",
32771
32775
  currency: displayCurrency
32772
32776
  };
32773
- case "course": return isRecord$23(value.display) ? {
32774
- kind: "course",
32777
+ case "whole_series": return isRecord$23(value.display) ? {
32778
+ kind: "whole_series",
32775
32779
  display: readCoursePriceDisplay(value.display, displayCurrency)
32776
32780
  } : {
32777
- kind: "course",
32781
+ kind: "whole_series",
32778
32782
  display: {
32779
32783
  kind: "unavailable",
32780
32784
  currency: displayCurrency
@@ -32897,7 +32901,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
32897
32901
  //#endregion
32898
32902
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
32899
32903
  function eventMatchesOccurrenceId(event, occurrenceId) {
32900
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
32904
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
32901
32905
  }
32902
32906
  function findPreSelectedEvent(input) {
32903
32907
  const occurrenceContext = input.occurrenceContext;
@@ -32923,12 +32927,127 @@ function toRegistrationEvent(event) {
32923
32927
  return {
32924
32928
  ...event,
32925
32929
  pricing: resolveRuntimeEventPricing(event),
32926
- publicEventId: event.id,
32927
- registrationOccurrenceId: event.occurrenceId
32930
+ selectionId: event.id,
32931
+ registrationSubject: {
32932
+ kind: "occurrence",
32933
+ occurrenceId: event.occurrenceId
32934
+ }
32928
32935
  };
32929
32936
  }
32930
32937
  function toRegistrationEvents(events) {
32931
- return events.map(toRegistrationEvent);
32938
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
32939
+ }
32940
+ function toWholeSeriesTicketType(option) {
32941
+ return {
32942
+ ...option,
32943
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
32944
+ attendanceScope: option.attendanceScope ?? void 0,
32945
+ availability: {
32946
+ kind: "available",
32947
+ remainingCapacity: option.capacityLimit
32948
+ }
32949
+ };
32950
+ }
32951
+ function toWholeSeriesPricing(offering) {
32952
+ const resolved = resolveWholeSeriesPricingState(offering);
32953
+ switch (offering.pricing.pricingStrategy) {
32954
+ case "free": return {
32955
+ kind: "free_registration",
32956
+ currency: offering.currency,
32957
+ display: {
32958
+ kind: "free",
32959
+ currency: offering.currency
32960
+ }
32961
+ };
32962
+ case "single": {
32963
+ const amount = offering.pricing.singlePriceAmount ?? 0;
32964
+ return amount === 0 ? {
32965
+ kind: "free_registration",
32966
+ currency: offering.currency,
32967
+ display: {
32968
+ kind: "free",
32969
+ currency: offering.currency
32970
+ }
32971
+ } : {
32972
+ kind: "single_paid",
32973
+ amount,
32974
+ currency: offering.currency,
32975
+ display: {
32976
+ kind: "exact",
32977
+ amount,
32978
+ currency: offering.currency
32979
+ }
32980
+ };
32981
+ }
32982
+ case "tiered": return {
32983
+ kind: "ticket_types",
32984
+ currency: offering.currency,
32985
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
32986
+ display: resolved.display
32987
+ };
32988
+ case "sliding_scale": return {
32989
+ kind: "sliding_scale",
32990
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32991
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32992
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
32993
+ currency: offering.currency,
32994
+ display: {
32995
+ kind: "range",
32996
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32997
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32998
+ currency: offering.currency
32999
+ }
33000
+ };
33001
+ }
33002
+ }
33003
+ function toAttendanceModes(offering) {
33004
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
33005
+ mode,
33006
+ capacity: offering.enrollmentCapacity,
33007
+ registeredCount: offering.enrolledCount,
33008
+ availableSpots: offering.availableSpots,
33009
+ waitlistEnabled: offering.waitlistEnabled
33010
+ }));
33011
+ }
33012
+ function toWholeSeriesRegistrationEvent(offering) {
33013
+ const firstSession = offering.sessions[0];
33014
+ const lastSession = offering.sessions[offering.sessions.length - 1];
33015
+ return {
33016
+ selectionId: offering.eventSeriesId,
33017
+ registrationSubject: {
33018
+ kind: "wholeSeries",
33019
+ eventSeriesId: offering.eventSeriesId,
33020
+ sessions: offering.sessions
33021
+ },
33022
+ seriesId: offering.eventSeriesId,
33023
+ title: offering.title,
33024
+ startsAt: firstSession?.startsAt ?? "",
33025
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
33026
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
33027
+ kind: "closed",
33028
+ reason: "enrollment_closed"
33029
+ },
33030
+ deliveryMode: offering.deliveryMode,
33031
+ attendanceModes: toAttendanceModes(offering),
33032
+ capacity: offering.enrollmentCapacity,
33033
+ registeredCount: offering.enrolledCount,
33034
+ availableSpots: offering.availableSpots,
33035
+ waitlistEnabled: offering.waitlistEnabled,
33036
+ venue: offering.venue ? {
33037
+ ...offering.venue,
33038
+ location: null
33039
+ } : null,
33040
+ eventCategory: null,
33041
+ teamMembers: offering.teamMembers,
33042
+ status: offering.status,
33043
+ timeZone: firstSession?.timeZone ?? "UTC",
33044
+ pricing: toWholeSeriesPricing(offering),
33045
+ paymentTerms: offering.paymentTerms,
33046
+ consent: offering.consent,
33047
+ requireGuestDetails: offering.requireGuestDetails,
33048
+ acceptsPasses: false,
33049
+ acceptsMemberships: offering.acceptsMemberships
33050
+ };
32932
33051
  }
32933
33052
  //#endregion
32934
33053
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -32954,11 +33073,7 @@ const eventRegistrationHydrationSchemaShape = {
32954
33073
  maxTickets: z$1.string().optional(),
32955
33074
  showVenue: z$1.boolean().optional(),
32956
33075
  showCapacity: z$1.boolean().optional(),
32957
- showSessions: z$1.boolean().optional(),
32958
- showPrice: z$1.boolean().optional(),
32959
33076
  successMessage: z$1.string().optional(),
32960
- waitlistMessage: z$1.string().optional(),
32961
- membershipMessage: z$1.string().optional(),
32962
33077
  buttonVariant: registrationButtonVariantSchema.optional(),
32963
33078
  overlayEnabled: z$1.boolean().optional(),
32964
33079
  spamProtectionEnabled: z$1.boolean().optional(),
@@ -33028,6 +33143,15 @@ function resolveWholeSeriesOffering(source) {
33028
33143
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
33029
33144
  }
33030
33145
  function buildEventRegistrationShellStepLabels(source) {
33146
+ const selectedOffering = resolveWholeSeriesOffering(source);
33147
+ if (selectedOffering) {
33148
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
33149
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
33150
+ eligibility: null,
33151
+ selectedTicketType: null,
33152
+ event: selectedEvent
33153
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
33154
+ }
33031
33155
  const scopedEvents = scopeEventRegistrationEvents(source);
33032
33156
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
33033
33157
  const preSelectedEvent = findPreSelectedEvent({
@@ -33091,11 +33215,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
33091
33215
  maxTickets: source.maxTickets ?? void 0,
33092
33216
  showVenue: source.showVenue,
33093
33217
  showCapacity: source.showCapacity,
33094
- showSessions: source.showSessions,
33095
- showPrice: source.showPrice,
33096
33218
  successMessage: source.successMessage,
33097
- waitlistMessage: source.waitlistMessage,
33098
- membershipMessage: source.membershipMessage,
33099
33219
  buttonVariant: source.buttonVariant,
33100
33220
  overlayEnabled: source.overlayEnabled,
33101
33221
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -33225,24 +33345,6 @@ const eventRegistrationBlockDefinition = {
33225
33345
  defaultValue: true,
33226
33346
  ui: { intent: "display" }
33227
33347
  },
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
33348
  {
33247
33349
  id: "successMessage",
33248
33350
  type: "text",
@@ -33253,26 +33355,6 @@ const eventRegistrationBlockDefinition = {
33253
33355
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
33254
33356
  maxLength: 500
33255
33357
  },
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
33358
  {
33277
33359
  id: "buttonText",
33278
33360
  type: "text",
@@ -33304,11 +33386,7 @@ const eventRegistrationBlockDefinition = {
33304
33386
  } },
33305
33387
  showVenue: { $bind: { from: "content.showVenue" } },
33306
33388
  showCapacity: { $bind: { from: "content.showCapacity" } },
33307
- showSessions: { $bind: { from: "content.showSessions" } },
33308
- showPrice: { $bind: { from: "content.showPrice" } },
33309
33389
  successMessage: { $bind: { from: "content.successMessage" } },
33310
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
33311
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
33312
33390
  buttonText: { $bind: {
33313
33391
  from: "content.buttonText",
33314
33392
  fallback: "Complete Registration"
@@ -33425,267 +33503,6 @@ const eventRegistrationBlockDefinition = {
33425
33503
  }
33426
33504
  };
33427
33505
  //#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
33506
  //#region ../blocks/src/system/blocks/event-details.ts
33690
33507
  /**
33691
33508
  * Event Details Block
@@ -33932,200 +33749,6 @@ const eventDetailsBlockDefinition = {
33932
33749
  mode: "server"
33933
33750
  } }
33934
33751
  };
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
33752
  const eventSpotlightBlockDefinition = {
34130
33753
  manifest: createBlockManifest({
34131
33754
  id: "block.event-spotlight",
@@ -36680,7 +36303,7 @@ const EmptyState = ({ message = "No upcoming events scheduled.", className, hasA
36680
36303
  //#region ../blocks/src/system/runtime/nodes/events/shared/DateTimeTile.tsx
36681
36304
  /**
36682
36305
  * Shared tile content for displaying date and time range.
36683
- * Used by event-details "Other dates" and course-details "Sessions".
36306
+ * Used by event-details "Other dates".
36684
36307
  */
36685
36308
  function DateTimeTile({ startsAt, endsAt, timeZone }) {
36686
36309
  const { date, timeRange } = formatEventDateParts({
@@ -39209,7 +38832,7 @@ const offeringsPreviewManifest = createBlockManifest({
39209
38832
  fallback: "published"
39210
38833
  } },
39211
38834
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
39212
- courses: { $bind: { from: "data.courses" } },
38835
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
39213
38836
  ...offeringsPreviewEventDataBindings
39214
38837
  })
39215
38838
  ], { gap: "lg" }),
@@ -39226,7 +38849,7 @@ const offeringsPreviewBlockDefinition = {
39226
38849
  dataSchemas: {
39227
38850
  ...offeringsPreviewEventDataSchemas,
39228
38851
  routeCandidates: publicRouteCandidatesSchema.optional(),
39229
- courses: publicWholeSeriesOfferingsArraySchema.optional()
38852
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
39230
38853
  },
39231
38854
  dataLoaders: {
39232
38855
  ...offeringsPreviewEventDataLoaders,
@@ -39235,7 +38858,7 @@ const offeringsPreviewBlockDefinition = {
39235
38858
  params: {},
39236
38859
  mode: "server"
39237
38860
  },
39238
- courses: {
38861
+ wholeSeriesOfferings: {
39239
38862
  endpoint: "listPublicWholeSeriesOfferings",
39240
38863
  params: {
39241
38864
  siteId: { $bind: { from: "$root.siteId" } },
@@ -44317,22 +43940,6 @@ const systemBlockDefinitions = [
44317
43940
  weight: "standard"
44318
43941
  })]
44319
43942
  })),
44320
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
44321
- flow: conversionFlow,
44322
- layoutProfiles: [layoutProfile({
44323
- variantKey: "default",
44324
- family: "form",
44325
- weight: "standard"
44326
- })]
44327
- })),
44328
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
44329
- flow: offeringsFlow,
44330
- layoutProfiles: [layoutProfile({
44331
- variantKey: "default",
44332
- family: "stack",
44333
- weight: "standard"
44334
- })]
44335
- })),
44336
43943
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
44337
43944
  flow: offeringsFlow,
44338
43945
  layoutProfiles: [layoutProfile({
@@ -47095,7 +46702,7 @@ function emptySelection(timeZone) {
47095
46702
  timeZone
47096
46703
  };
47097
46704
  }
47098
- function parseLimit$1(value, fallback) {
46705
+ function parseLimit(value, fallback) {
47099
46706
  if (value === "all") return Number.MAX_SAFE_INTEGER;
47100
46707
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
47101
46708
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -47178,7 +46785,7 @@ function selectEventDetails(args) {
47178
46785
  subject: args.subject
47179
46786
  }));
47180
46787
  const occurrenceContext = args.occurrenceContext ?? null;
47181
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
46788
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
47182
46789
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
47183
46790
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
47184
46791
  if (!candidate) return emptySelection(timeZone);
@@ -47254,8 +46861,8 @@ function resolveEventDetailsPresentation(input) {
47254
46861
  };
47255
46862
  }
47256
46863
  //#endregion
47257
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
47258
- function CoursePricingDisplay({ pricing, acceptedItems }) {
46864
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
46865
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
47259
46866
  return /* @__PURE__ */ jsxs("div", {
47260
46867
  className: "rb-mt-6",
47261
46868
  children: [
@@ -47267,7 +46874,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
47267
46874
  className: "rb-flex rb-flex-col rb-gap-2",
47268
46875
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
47269
46876
  option.name,
47270
- ": ",
46877
+ ":",
46878
+ " ",
47271
46879
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
47272
46880
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
47273
46881
  className: "rb-caption status-muted",
@@ -47288,7 +46896,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
47288
46896
  const label = preview.publicLabel.trim() || "Discount";
47289
46897
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
47290
46898
  }
47291
- function TeamMemberName$1({ name, profilePath }) {
46899
+ function TeamMemberName({ name, profilePath }) {
47292
46900
  return profilePath ? /* @__PURE__ */ jsx("a", {
47293
46901
  href: profilePath,
47294
46902
  className: "rb-hover-opacity-80",
@@ -47325,7 +46933,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
47325
46933
  children: "No registration required - just show up"
47326
46934
  })]
47327
46935
  });
47328
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
46936
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
47329
46937
  pricing: coursePricing,
47330
46938
  acceptedItems: [...acceptedItems]
47331
46939
  });
@@ -47400,7 +47008,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
47400
47008
  children: "With"
47401
47009
  }), /* @__PURE__ */ jsx("div", {
47402
47010
  className: "rb-flex rb-flex-col rb-gap-3",
47403
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
47011
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
47404
47012
  name: member.name,
47405
47013
  profilePath: member.profilePath
47406
47014
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -47679,352 +47287,6 @@ function LocationMapSSR(props) {
47679
47287
  });
47680
47288
  }
47681
47289
  //#endregion
47682
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
47683
- /**
47684
- * Resolves native run-page ownership without falling back to entry or slug
47685
- * coincidence when a page-surface subject is present but invalid.
47686
- */
47687
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
47688
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
47689
- const parsed = parseEventPageSurfaceSubject(subjectValue);
47690
- if (!parsed.ok) return {
47691
- kind: "unsupported",
47692
- reason: parsed.error.kind
47693
- };
47694
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
47695
- const allowedSeriesIds = new Set(seriesIds);
47696
- return {
47697
- kind: "scoped",
47698
- subject: parsed.value,
47699
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
47700
- };
47701
- }
47702
- function eventSeriesIdsForSubject(subject) {
47703
- switch (subject.kind) {
47704
- case "eventSeries": return [subject.eventSeriesId];
47705
- case "eventOffering": return subject.availableEventSeriesIds;
47706
- default: return assertNever$23(subject);
47707
- }
47708
- }
47709
- //#endregion
47710
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
47711
- /** Temporary Course-block adapter over canonical Event run scoping. */
47712
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
47713
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
47714
- return scope.kind === "scoped" ? {
47715
- kind: "scoped",
47716
- subject: scope.subject,
47717
- courses: scope.runs
47718
- } : scope;
47719
- }
47720
- //#endregion
47721
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
47722
- function selectCourseDetails(args) {
47723
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
47724
- if (pageSurfaceScope.kind === "unsupported") return {
47725
- mode: "unsupportedPageSurfaceSubject",
47726
- selected: null,
47727
- scoped: []
47728
- };
47729
- if (pageSurfaceScope.kind === "scoped") {
47730
- const scoped = [...pageSurfaceScope.courses];
47731
- return {
47732
- mode: "pageSurfaceSubject",
47733
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
47734
- scoped
47735
- };
47736
- }
47737
- return {
47738
- mode: "unsupportedPageSurfaceSubject",
47739
- selected: null,
47740
- scoped: []
47741
- };
47742
- }
47743
- //#endregion
47744
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
47745
- function toValidDate(value) {
47746
- if (!value) return null;
47747
- const date = new Date(value);
47748
- return Number.isNaN(date.getTime()) ? null : date;
47749
- }
47750
- function getCourseDateRange(course) {
47751
- const datedSessions = (course.sessions ?? []).map((session) => ({
47752
- session,
47753
- start: toValidDate(session.startsAt),
47754
- end: toValidDate(session.endsAt)
47755
- })).filter((value) => value.start !== null || value.end !== null);
47756
- if (datedSessions.length === 0) return {
47757
- start: null,
47758
- end: null,
47759
- startIso: null,
47760
- endIso: null,
47761
- timeZone: null
47762
- };
47763
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
47764
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
47765
- return {
47766
- start: startSession?.start ?? null,
47767
- end: endSession?.end ?? null,
47768
- startIso: startSession?.session.startsAt ?? null,
47769
- endIso: endSession?.session.endsAt ?? null,
47770
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
47771
- };
47772
- }
47773
- function formatCourseDateRange(range) {
47774
- const { startIso, endIso, timeZone } = range;
47775
- const dateFormat = {
47776
- month: "numeric",
47777
- day: "numeric",
47778
- year: "numeric"
47779
- };
47780
- const effectiveTimeZone = toBookingTimeZone(timeZone);
47781
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
47782
- startsAt: iso,
47783
- timeZone: effectiveTimeZone
47784
- }), dateFormat);
47785
- const formatRangeDateOnly = (startsAt, endsAt) => {
47786
- const startText = formatSingleDate(startsAt);
47787
- const endText = formatSingleDate(endsAt);
47788
- return startText === endText ? startText : `${startText} – ${endText}`;
47789
- };
47790
- if (!startIso && !endIso) return "Dates TBD";
47791
- if (startIso && !endIso) return formatSingleDate(startIso);
47792
- if (!startIso && endIso) return formatSingleDate(endIso);
47793
- if (!startIso || !endIso) return "Dates TBD";
47794
- return formatRangeDateOnly(startIso, endIso);
47795
- }
47796
- //#endregion
47797
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
47798
- function TeamMemberName({ name, profilePath }) {
47799
- return profilePath ? /* @__PURE__ */ jsx("a", {
47800
- href: profilePath,
47801
- className: "rb-hover-opacity-80",
47802
- children: /* @__PURE__ */ jsx("strong", { children: name })
47803
- }) : /* @__PURE__ */ jsx("strong", { children: name });
47804
- }
47805
- function parseLimit(value, fallback) {
47806
- if (value === "all") return "all";
47807
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
47808
- return Number.isFinite(n) && n > 0 ? n : fallback;
47809
- }
47810
- function CourseDetailsView(props) {
47811
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
47812
- if (!course) return /* @__PURE__ */ jsx("p", {
47813
- className: "rb-caption status-muted",
47814
- children: emptyMessage
47815
- });
47816
- const pricing = resolveWholeSeriesPricingState(course);
47817
- const sessionLimit = parseLimit(sessionsLimit, 10);
47818
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
47819
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
47820
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
47821
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
47822
- const teamMembers = course.teamMembers ?? [];
47823
- return /* @__PURE__ */ jsxs("div", {
47824
- className: "rb-flex rb-flex-col rb-gap-6",
47825
- children: [
47826
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
47827
- /* @__PURE__ */ jsxs("div", {
47828
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
47829
- children: [/* @__PURE__ */ jsxs("div", {
47830
- className: "rb-flex rb-flex-col rb-gap-4",
47831
- children: [
47832
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47833
- className: "rb-label rb-mb-2",
47834
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
47835
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
47836
- className: "rb-flex rb-flex-col rb-gap-2",
47837
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
47838
- option.name,
47839
- ": ",
47840
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
47841
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
47842
- className: "rb-caption status-muted",
47843
- children: option.description
47844
- }) : null] }, option.id))
47845
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
47846
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47847
- className: "rb-label rb-mb-2",
47848
- children: "Spots"
47849
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
47850
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47851
- className: "rb-label rb-mb-2",
47852
- children: "Membership"
47853
- }), /* @__PURE__ */ jsx("p", {
47854
- className: "rb-caption status-muted",
47855
- children: "Eligible memberships can be used for free enrollment"
47856
- })] }),
47857
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47858
- className: "rb-label rb-mb-2",
47859
- children: "With"
47860
- }), /* @__PURE__ */ jsx("div", {
47861
- className: "rb-flex rb-flex-col rb-gap-3",
47862
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
47863
- name: teamMember.name,
47864
- profilePath: teamMember.profilePath
47865
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
47866
- className: "rb-caption status-muted",
47867
- children: teamMember.summary
47868
- })] }, teamMember.id))
47869
- })] })
47870
- ]
47871
- }), /* @__PURE__ */ jsxs("div", {
47872
- className: "rb-flex rb-flex-col rb-gap-4",
47873
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
47874
- /* @__PURE__ */ jsx("div", {
47875
- className: "rb-label rb-mb-2",
47876
- children: "Venue"
47877
- }),
47878
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
47879
- course.venue.address && /* @__PURE__ */ jsx("p", {
47880
- className: "rb-caption status-muted",
47881
- children: course.venue.address
47882
- })
47883
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47884
- className: "rb-label rb-mb-2",
47885
- children: "Enrollment"
47886
- }), /* @__PURE__ */ jsx("p", {
47887
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
47888
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
47889
- })] })]
47890
- })]
47891
- }),
47892
- descriptionDoc && /* @__PURE__ */ jsx("div", {
47893
- className: "cd-description",
47894
- children: /* @__PURE__ */ jsx(RichText$2, { doc: descriptionDoc })
47895
- }),
47896
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
47897
- /* @__PURE__ */ jsx("div", {
47898
- className: "rb-label",
47899
- children: "Sessions"
47900
- }),
47901
- /* @__PURE__ */ jsx("div", {
47902
- className: "rb-mt-2 rb-tiles-grid",
47903
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
47904
- className: "rb-tile",
47905
- children: /* @__PURE__ */ jsx(DateTimeTile, {
47906
- startsAt: s.startsAt,
47907
- endsAt: s.endsAt
47908
- })
47909
- }, s.id))
47910
- }),
47911
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
47912
- className: "cd-sessions__more",
47913
- children: [
47914
- "Showing ",
47915
- visibleSessions.length,
47916
- " of ",
47917
- sortedSessions.length,
47918
- " sessions."
47919
- ]
47920
- })
47921
- ] })
47922
- ]
47923
- });
47924
- }
47925
- //#endregion
47926
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
47927
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
47928
- const selection = selectCourseDetails({
47929
- courses: courses ?? null,
47930
- subject
47931
- });
47932
- const parsedSubject = parseEventPageSurfaceSubject(subject);
47933
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
47934
- const now = /* @__PURE__ */ new Date();
47935
- const scopedWithRange = selection.scoped.map((c) => ({
47936
- course: c,
47937
- range: getCourseDateRange(c)
47938
- }));
47939
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
47940
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
47941
- });
47942
- const lastPastRun = scopedWithRange.filter(({ range }) => Boolean(range.end && range.end <= now)).sort((a, b) => (b.range.end?.getTime() ?? 0) - (a.range.end?.getTime() ?? 0))[0] ?? null;
47943
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
47944
- return /* @__PURE__ */ jsxs("div", {
47945
- className: `course-details ${className ?? ""}`.trim(),
47946
- "data-block": "course-details",
47947
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
47948
- course: selection.selected,
47949
- showTitle,
47950
- showDescription,
47951
- showSessions,
47952
- sessionsLimit,
47953
- showVenue,
47954
- showPrice,
47955
- showCapacity,
47956
- showEnrollmentStatus,
47957
- showMembershipNote
47958
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
47959
- className: "rb-flex rb-flex-col rb-gap-3",
47960
- children: [
47961
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47962
- className: "rb-label rb-mb-2",
47963
- children: "Upcoming runs"
47964
- }), /* @__PURE__ */ jsx("p", {
47965
- className: "rb-caption status-muted",
47966
- children: "Choose a run to see sessions and details."
47967
- })] }),
47968
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
47969
- className: "rb-flex rb-flex-col rb-gap-2",
47970
- children: nonPastRuns.map(({ course, range }) => {
47971
- const start = range.start;
47972
- const end = range.end;
47973
- const isInProgress = Boolean(start && end && start <= now && end > now);
47974
- return /* @__PURE__ */ jsx("li", {
47975
- className: "rb-rounded-md rb-border rb-p-3",
47976
- children: /* @__PURE__ */ jsx("div", {
47977
- className: "rb-flex rb-flex-col rb-gap-1",
47978
- children: /* @__PURE__ */ jsxs("div", {
47979
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
47980
- children: [/* @__PURE__ */ jsxs("div", {
47981
- className: "rb-min-w-0",
47982
- children: [/* @__PURE__ */ jsx("div", {
47983
- className: "rb-truncate",
47984
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
47985
- }), /* @__PURE__ */ jsx("div", {
47986
- className: "rb-caption status-muted",
47987
- children: formatCourseDateRange(range)
47988
- })]
47989
- }), /* @__PURE__ */ jsx("div", {
47990
- className: "rb-caption status-muted rb-shrink-0",
47991
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
47992
- })]
47993
- })
47994
- })
47995
- }, course.eventSeriesId);
47996
- })
47997
- }) : /* @__PURE__ */ jsx("p", {
47998
- className: "rb-caption status-muted",
47999
- children: "No upcoming runs."
48000
- }),
48001
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
48002
- className: "rb-caption status-muted",
48003
- children: [
48004
- "Last run: ",
48005
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
48006
- " (",
48007
- formatCourseDateRange(lastPastRun.range),
48008
- ")"
48009
- ]
48010
- }) : null
48011
- ]
48012
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
48013
- course: null,
48014
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
48015
- showTitle,
48016
- showDescription,
48017
- showSessions,
48018
- sessionsLimit,
48019
- showVenue,
48020
- showPrice,
48021
- showCapacity,
48022
- showEnrollmentStatus,
48023
- showMembershipNote
48024
- }), children]
48025
- });
48026
- }
48027
- //#endregion
48028
47290
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
48029
47291
  /**
48030
47292
  * EventSpotlight Component
@@ -48228,7 +47490,7 @@ function deriveCourseScheduleSummary(course) {
48228
47490
  sessionCount: sessions.length
48229
47491
  };
48230
47492
  }
48231
- function nextCourseSessionStart(course) {
47493
+ function nextWholeSeriesSessionStart(course) {
48232
47494
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
48233
47495
  }
48234
47496
  function occurrenceFromEvent(event) {
@@ -48382,7 +47644,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
48382
47644
  function buildItemDataMap(props) {
48383
47645
  const routeCandidates = props.routeCandidates?.routes ?? [];
48384
47646
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
48385
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
47647
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
48386
47648
  }
48387
47649
  function eventDataFromMaybeArray(events) {
48388
47650
  return events ? {
@@ -48436,8 +47698,8 @@ function renderOfferingGroupItems(presentation, items, options) {
48436
47698
  }
48437
47699
  }
48438
47700
  function compareCoursesByNextSession(left, right) {
48439
- const leftStart = nextCourseSessionStart(left);
48440
- const rightStart = nextCourseSessionStart(right);
47701
+ const leftStart = nextWholeSeriesSessionStart(left);
47702
+ const rightStart = nextWholeSeriesSessionStart(right);
48441
47703
  if (leftStart === null) return rightStart === null ? 0 : 1;
48442
47704
  if (rightStart === null) return -1;
48443
47705
  return leftStart.localeCompare(rightStart);
@@ -49376,45 +48638,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
49376
48638
  });
49377
48639
  }
49378
48640
  //#endregion
49379
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
49380
- /**
49381
- * Server-safe placeholder for course registration.
49382
- * Provides a static container for island hydration without importing client hooks.
49383
- */
49384
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
49385
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
49386
- siteId,
49387
- apiBaseUrl,
49388
- portalToken,
49389
- subject,
49390
- courses,
49391
- className,
49392
- showSessions,
49393
- showPrice,
49394
- showCapacity,
49395
- showVenue,
49396
- successMessage,
49397
- waitlistMessage,
49398
- membershipMessage,
49399
- buttonText,
49400
- buttonVariant,
49401
- stage
49402
- });
49403
- return /* @__PURE__ */ jsxs("div", {
49404
- className: `course-registration ${className ?? ""}`.trim(),
49405
- "data-block": "course-registration",
49406
- ...getIslandRootProps("course-registration", blockId),
49407
- children: [
49408
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
49409
- /* @__PURE__ */ jsx("div", {
49410
- className: "course-registration__summary",
49411
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
49412
- }),
49413
- children
49414
- ]
49415
- });
49416
- }
49417
- //#endregion
49418
48641
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
49419
48642
  function GiftingSSR({ blockId, ...rest }) {
49420
48643
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -50900,7 +50123,6 @@ const runtimeBackedBlockServerEntries = {
50900
50123
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
50901
50124
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
50902
50125
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
50903
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
50904
50126
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
50905
50127
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
50906
50128
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -50933,7 +50155,6 @@ const serverComponentRegistry = {
50933
50155
  "booking-form": BookingFormSSR,
50934
50156
  "event-details": EventDetailsSSR,
50935
50157
  "location-map": LocationMapSSR,
50936
- "course-details": CourseDetailsSSR,
50937
50158
  "event-spotlight": EventSpotlight,
50938
50159
  "event-combined": EventCombinedSSR,
50939
50160
  "offerings-preview": OfferingsPreviewNode,
@@ -55388,176 +54609,6 @@ ${root} {
55388
54609
  `;
55389
54610
  }
55390
54611
  //#endregion
55391
- //#region ../theme-core/src/blocks/vars/course-details.ts
55392
- /**
55393
- * Generate CSS variables for the course-details block.
55394
- *
55395
- * Variables defined:
55396
- * - Enrollment status colors (open/closed)
55397
- * - Capacity indicator colors (available/low/full)
55398
- * - Price display colors (free indicator)
55399
- */
55400
- function generateCourseDetailsVars({ themeId }) {
55401
- return `
55402
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
55403
- /* Enrollment status */
55404
- --cd-enrollment-open-text: rgb(var(--tb-success));
55405
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
55406
-
55407
- /* Capacity indicator */
55408
- --cd-capacity-available-text: rgb(var(--tb-success));
55409
- --cd-capacity-low-text: rgb(var(--tb-warning));
55410
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
55411
-
55412
- /* Price styling */
55413
- --cd-price-free-text: rgb(var(--tb-success));
55414
- }
55415
- `;
55416
- }
55417
- //#endregion
55418
- //#region ../theme-core/src/blocks/vars/course-registration.ts
55419
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
55420
- /* Temporary bridge while persisted Course blocks render the Event-owned
55421
- whole-series registration runtime. Removed with the Course block. */
55422
- --er-step-active: var(--cr-step-active);
55423
- --er-step-inactive: var(--cr-step-inactive);
55424
- --er-step-completed: var(--cr-step-completed);
55425
- --er-step-text: var(--cr-step-text);
55426
- --er-step-text-active: var(--cr-step-text-active);
55427
- --er-step-connector: var(--cr-step-connector);
55428
- --er-step-title-size: var(--cr-step-title-size);
55429
- --er-success-bg: var(--cr-success-bg);
55430
- --er-success-text: var(--cr-success-text);
55431
- --er-error-bg: var(--cr-error-bg);
55432
- --er-error-text: var(--cr-error-text);
55433
- --er-waitlist-bg: var(--cr-waitlist-bg);
55434
- --er-waitlist-text: var(--cr-waitlist-text);
55435
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
55436
- --er-capacity-available-text: var(--cr-capacity-available-text);
55437
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
55438
- --er-capacity-low-text: var(--cr-capacity-low-text);
55439
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
55440
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
55441
- --er-border: var(--cr-border);
55442
- --er-border-hover: var(--cr-border-hover);
55443
- --er-border-selected: var(--cr-border-selected);
55444
- --er-border-error: var(--cr-border-error);
55445
- --er-focus-ring: var(--cr-focus-ring);
55446
- --er-required: var(--cr-required);
55447
- --er-payment-border: var(--cr-payment-border);
55448
- --er-payment-border-hover: var(--cr-payment-border-hover);
55449
- --er-payment-border-selected: var(--cr-payment-border-selected);
55450
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
55451
- --er-check-bg: var(--cr-check-bg);
55452
- --er-check-text: var(--cr-check-text);
55453
- --er-summary-bg: var(--cr-summary-bg);
55454
- --er-summary-border: var(--cr-summary-border);
55455
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
55456
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
55457
- `;
55458
- /**
55459
- * Generate CSS variables for the course-registration block.
55460
- *
55461
- * Variables defined:
55462
- * - Step indicator colors (active, inactive, completed, text, connector)
55463
- * - Success/error/waitlist state backgrounds and text colors
55464
- * - Capacity badge colors (available, low, sold-out)
55465
- * - Border colors for various interaction states
55466
- * - Input focus and required marker styling
55467
- * - Payment option card styling
55468
- * - Checkmark indicator colors
55469
- * - Summary styling
55470
- */
55471
- function generateCourseRegistrationVars({ themeId }) {
55472
- return `
55473
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
55474
- /* Step indicator */
55475
- --cr-step-active: rgb(var(--tb-primary));
55476
- --cr-step-inactive: rgb(var(--tb-mutedText));
55477
- --cr-step-completed: rgb(var(--tb-success));
55478
- --cr-step-text: rgb(255 255 255);
55479
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
55480
- --cr-step-connector: rgba(var(--tb-border), 0.5);
55481
-
55482
- /* Step title */
55483
- --cr-step-title-size: 1.5rem;
55484
-
55485
- /* State backgrounds with alpha */
55486
- --cr-success-bg: rgba(var(--tb-success), 0.1);
55487
- --cr-success-text: rgb(var(--tb-success));
55488
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
55489
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
55490
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
55491
- --cr-waitlist-text: rgb(var(--tb-warning));
55492
-
55493
- /* Capacity badges */
55494
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
55495
- --cr-capacity-available-text: rgb(var(--tb-success));
55496
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
55497
- --cr-capacity-low-text: rgb(var(--tb-warning));
55498
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
55499
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
55500
-
55501
- /* Borders */
55502
- --cr-border: rgb(var(--tb-border));
55503
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
55504
- --cr-border-selected: rgb(var(--tb-primary));
55505
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
55506
-
55507
- /* Input focus */
55508
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
55509
-
55510
- /* Required marker */
55511
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
55512
-
55513
- /* Payment option cards */
55514
- --cr-payment-border: rgb(var(--tb-border));
55515
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
55516
- --cr-payment-border-selected: rgb(var(--tb-primary));
55517
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
55518
-
55519
- /* Checkmark indicator */
55520
- --cr-check-bg: rgb(var(--tb-primary));
55521
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
55522
-
55523
- /* Summary */
55524
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
55525
- --cr-summary-border: rgb(var(--tb-border));
55526
-
55527
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
55528
-
55529
- /* Shared registration-surface mappings (issue 1174).
55530
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
55531
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
55532
- keep working unchanged. */
55533
- --rb-reg-radius: var(--rb-block-radius);
55534
- --rb-reg-border: var(--cr-border);
55535
- --rb-reg-border-hover: var(--cr-border-hover);
55536
- --rb-reg-border-selected: var(--cr-border-selected);
55537
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
55538
- --rb-reg-option-bg: rgb(var(--tb-background));
55539
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
55540
- --rb-reg-surface-bg: rgb(var(--tb-surface));
55541
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
55542
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
55543
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
55544
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
55545
- --rb-reg-check-bg: var(--cr-check-bg);
55546
- --rb-reg-check-text: var(--cr-check-text);
55547
- --rb-reg-step-active: var(--cr-step-active);
55548
- --rb-reg-step-completed: var(--cr-step-completed);
55549
- --rb-reg-step-inactive: var(--cr-step-inactive);
55550
- --rb-reg-step-text: var(--cr-step-text);
55551
- --rb-reg-step-text-active: var(--cr-step-text-active);
55552
- --rb-reg-step-connector: var(--cr-step-connector);
55553
- --rb-reg-summary-bg: var(--cr-summary-bg);
55554
- --rb-reg-summary-border: var(--cr-summary-border);
55555
- --rb-reg-focus-ring: var(--cr-focus-ring);
55556
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
55557
- }
55558
- `;
55559
- }
55560
- //#endregion
55561
54612
  //#region ../theme-core/src/blocks/registry.ts
55562
54613
  /**
55563
54614
  * Global registry of block var generators.
@@ -55572,8 +54623,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
55572
54623
  blockVarRegistry.set("form", generateFormBlockVars);
55573
54624
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
55574
54625
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
55575
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
55576
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
55577
54626
  /**
55578
54627
  * Generate all Tier 3 block-specific CSS variables.
55579
54628
  *
@@ -60465,7 +59514,7 @@ const containerResponsiveThemeCss = `/*
60465
59514
  * Shared: Registration Surface (issue 1174)
60466
59515
  *
60467
59516
  * Wizard-surface primitives shared by the event-registration,
60468
- * course-registration and appointment-booking blocks: surface container,
59517
+ * appointment-booking blocks: surface container,
60469
59518
  * selectable option cards, step indicator, wizard actions row, on-surface
60470
59519
  * text ramp, layout stacks, summary box and skeleton shell lines.
60471
59520
  *
@@ -60508,7 +59557,7 @@ const containerResponsiveThemeCss = `/*
60508
59557
  }
60509
59558
 
60510
59559
  /* Surface container */
60511
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59560
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
60512
59561
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
60513
59562
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
60514
59563
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -60538,7 +59587,7 @@ const containerResponsiveThemeCss = `/*
60538
59587
  *
60539
59588
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
60540
59589
  * pairing is pinned by registration-surface-action-reset.test.ts. */
60541
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59590
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
60542
59591
  --rb-action-primary-base-background-color: initial;
60543
59592
  --rb-action-primary-base-background-image: initial;
60544
59593
  --rb-action-primary-base-color: initial;
@@ -60646,7 +59695,7 @@ const containerResponsiveThemeCss = `/*
60646
59695
  }
60647
59696
 
60648
59697
  /* Selectable option card */
60649
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
59698
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
60650
59699
  position: relative;
60651
59700
  display: flex;
60652
59701
  align-items: flex-start;
@@ -60663,34 +59712,34 @@ const containerResponsiveThemeCss = `/*
60663
59712
  box-shadow var(--rb-block-transition, 150ms) ease;
60664
59713
  }
60665
59714
 
60666
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
59715
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
60667
59716
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
60668
59717
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
60669
59718
  }
60670
59719
 
60671
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
59720
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
60672
59721
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
60673
59722
  outline-offset: 2px;
60674
59723
  }
60675
59724
 
60676
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
59725
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
60677
59726
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
60678
59727
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
60679
59728
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
60680
59729
  }
60681
59730
 
60682
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
59731
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
60683
59732
  cursor: not-allowed;
60684
59733
  opacity: 0.7;
60685
59734
  }
60686
59735
 
60687
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
59736
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
60688
59737
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
60689
59738
  box-shadow: none;
60690
59739
  }
60691
59740
 
60692
59741
  /* Check indicator */
60693
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
59742
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
60694
59743
  flex-shrink: 0;
60695
59744
  width: 1.25rem;
60696
59745
  height: 1.25rem;
@@ -60701,18 +59750,18 @@ const containerResponsiveThemeCss = `/*
60701
59750
  justify-content: center;
60702
59751
  }
60703
59752
 
60704
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
59753
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
60705
59754
  width: 0.75rem;
60706
59755
  height: 0.75rem;
60707
59756
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60708
59757
  }
60709
59758
 
60710
59759
  /* Step indicator */
60711
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
59760
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
60712
59761
  margin-bottom: 1.5rem;
60713
59762
  }
60714
59763
 
60715
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
59764
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
60716
59765
  display: flex;
60717
59766
  align-items: center;
60718
59767
  justify-content: center;
@@ -60722,13 +59771,13 @@ const containerResponsiveThemeCss = `/*
60722
59771
  margin: 0;
60723
59772
  }
60724
59773
 
60725
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
59774
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
60726
59775
  display: flex;
60727
59776
  align-items: center;
60728
59777
  gap: 0.5rem;
60729
59778
  }
60730
59779
 
60731
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
59780
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
60732
59781
  width: 1.75rem;
60733
59782
  height: 1.75rem;
60734
59783
  border-radius: 50%;
@@ -60742,47 +59791,47 @@ const containerResponsiveThemeCss = `/*
60742
59791
  transition: background-color var(--rb-block-transition, 150ms) ease;
60743
59792
  }
60744
59793
 
60745
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
59794
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
60746
59795
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
60747
59796
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60748
59797
  }
60749
59798
 
60750
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
59799
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
60751
59800
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
60752
59801
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60753
59802
  }
60754
59803
 
60755
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
59804
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
60756
59805
  width: 0.75rem;
60757
59806
  height: 0.75rem;
60758
59807
  }
60759
59808
 
60760
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
59809
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
60761
59810
  width: 2rem;
60762
59811
  height: 2px;
60763
59812
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
60764
59813
  }
60765
59814
 
60766
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59815
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60767
59816
  font-size: 0.75rem;
60768
59817
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60769
59818
  display: none;
60770
59819
  }
60771
59820
 
60772
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
59821
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
60773
59822
  font-weight: 500;
60774
59823
  }
60775
59824
 
60776
59825
  @container rb-site (min-width: 640px) {
60777
59826
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
60778
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59827
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60779
59828
  display: inline;
60780
59829
  }
60781
59830
  }
60782
59831
  }
60783
59832
 
60784
59833
  /* Wizard actions row */
60785
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
59834
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
60786
59835
  display: flex;
60787
59836
  justify-content: space-between;
60788
59837
  align-items: center;
@@ -60791,56 +59840,56 @@ const containerResponsiveThemeCss = `/*
60791
59840
  }
60792
59841
 
60793
59842
  /* When there's only one action (no back button), push it to the right */
60794
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
59843
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
60795
59844
  margin-inline-start: auto;
60796
59845
  }
60797
59846
 
60798
59847
  /* On-surface text ramp */
60799
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
59848
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
60800
59849
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60801
59850
  }
60802
59851
 
60803
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
59852
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
60804
59853
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
60805
59854
  }
60806
59855
 
60807
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
59856
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
60808
59857
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
60809
59858
  }
60810
59859
 
60811
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
59860
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
60812
59861
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
60813
59862
  }
60814
59863
 
60815
59864
  /* Layout stacks */
60816
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
59865
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
60817
59866
  display: flex;
60818
59867
  flex-direction: column;
60819
59868
  gap: 1rem;
60820
59869
  }
60821
59870
 
60822
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
59871
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
60823
59872
  gap: 0.75rem;
60824
59873
  }
60825
59874
 
60826
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
59875
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
60827
59876
  display: flex;
60828
59877
  align-items: center;
60829
59878
  gap: 1rem;
60830
59879
  }
60831
59880
 
60832
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
59881
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
60833
59882
  justify-content: space-between;
60834
59883
  align-items: flex-start;
60835
59884
  }
60836
59885
 
60837
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
59886
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
60838
59887
  display: grid;
60839
59888
  gap: 0.75rem;
60840
59889
  }
60841
59890
 
60842
59891
  /* Summary box */
60843
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
59892
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
60844
59893
  padding: 1rem;
60845
59894
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
60846
59895
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -60848,7 +59897,7 @@ const containerResponsiveThemeCss = `/*
60848
59897
  }
60849
59898
 
60850
59899
  /* Skeleton shell lines */
60851
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
59900
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
60852
59901
  height: 0.75rem;
60853
59902
  border-radius: 9999px;
60854
59903
  background: linear-gradient(
@@ -60859,24 +59908,24 @@ const containerResponsiveThemeCss = `/*
60859
59908
  );
60860
59909
  }
60861
59910
 
60862
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
59911
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
60863
59912
  width: min(26rem, 82%);
60864
59913
  }
60865
59914
 
60866
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
59915
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
60867
59916
  width: min(19rem, 68%);
60868
59917
  }
60869
59918
 
60870
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
59919
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
60871
59920
  width: min(14rem, 52%);
60872
59921
  }
60873
59922
 
60874
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
59923
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
60875
59924
  width: min(10rem, 42%);
60876
59925
  }
60877
59926
 
60878
59927
  /* Skeleton block (rectangular placeholder, pulses) */
60879
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59928
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60880
59929
  height: 2.5rem;
60881
59930
  width: 100%;
60882
59931
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -60894,7 +59943,7 @@ const containerResponsiveThemeCss = `/*
60894
59943
  }
60895
59944
 
60896
59945
  @media (prefers-reduced-motion: reduce) {
60897
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59946
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60898
59947
  animation: none;
60899
59948
  }
60900
59949
  }
@@ -67276,1674 +66325,363 @@ const containerResponsiveThemeCss = `/*
67276
66325
  cursor: not-allowed;
67277
66326
  }
67278
66327
 
67279
- /*
67280
- * Course Details (runtime node)
67281
- * Minimal rules - most styling via rb-* utilities
66328
+ /* =============================================================================
66329
+ * Block: Newsletter Signup
66330
+ * =============================================================================
67282
66331
  */
67283
66332
 
67284
- :where(.theme-scope) .course-details {
67285
- width: 100%;
67286
- max-width: 56.25rem; /* 900px */
67287
- margin-inline: auto;
66333
+ /* Newsletter copy styling */
66334
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
66335
+ font-size: 1.5rem;
66336
+ font-weight: 600;
67288
66337
  }
67289
66338
 
67290
- /* Description prose wrapper */
67291
- :where(.theme-scope) .course-details .cd-description {
67292
- margin-top: 1rem;
66339
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
66340
+ font-size: 1rem;
66341
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66342
+ opacity: 0.85;
67293
66343
  }
67294
66344
 
67295
- /* "Showing X of Y" text */
67296
- :where(.theme-scope) .course-details .cd-sessions__more {
67297
- margin-top: 0.5rem;
67298
- opacity: 0.7;
67299
- font-size: 0.875rem;
66345
+ /* Newsletter form container */
66346
+ :where(.theme-scope) .newsletter-form {
66347
+ width: 100%;
66348
+ max-width: 32rem;
66349
+ margin-left: auto;
66350
+ margin-right: auto;
67300
66351
  }
67301
66352
 
67302
- /* Enrollment status colors (using Tier 3 vars) */
67303
- :where(.theme-scope) .course-details .cd-enrollment--open {
67304
- color: var(--cd-enrollment-open-text);
66353
+ /* Newsletter form fields container */
66354
+ :where(.theme-scope) .newsletter-form-fields {
66355
+ display: flex;
66356
+ flex-direction: column;
66357
+ gap: var(--rb-gap-sm, 0.75rem);
67305
66358
  }
67306
66359
 
67307
- :where(.theme-scope) .course-details .cd-enrollment--closed {
67308
- color: var(--cd-enrollment-closed-text);
66360
+ /* Individual field styling */
66361
+ :where(.theme-scope) .newsletter-field {
66362
+ display: flex;
66363
+ flex-direction: column;
66364
+ gap: 0.25rem;
67309
66365
  }
67310
66366
 
67311
- /* =============================================================================
67312
- * Block: Event whole-series registration
67313
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
67314
- * =============================================================================
67315
- */
67316
-
67317
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
67318
- :where(.theme-scope)
67319
- :where(
67320
- [data-block='event-registration'],
67321
- [data-block='course-registration']
67322
- ) {
67323
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
67324
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
66367
+ /* Required indicator */
66368
+ :where(.theme-scope) .newsletter-required {
66369
+ color: rgb(var(--tb-primary));
66370
+ margin-left: 0.125rem;
67325
66371
  }
67326
66372
 
67327
- /* Container: base styling comes from the shared .rb-reg-surface
67328
- (registration-surface.css); these overrides preserve whole-series
67329
- whole-series registration's established look (fixed padding, centered). */
67330
- :where(.theme-scope)
67331
- :where([data-block='event-registration'], [data-block='course-registration'])
67332
- .er-whole-series-container {
67333
- padding: 1.5rem;
67334
- margin-inline: auto;
66373
+ /* Submit button container */
66374
+ :where(.theme-scope) .newsletter-submit {
66375
+ margin-top: 0.5rem;
67335
66376
  }
67336
66377
 
67337
- /* Empty/unavailable */
67338
- :where(.theme-scope)
67339
- :where([data-block='event-registration'], [data-block='course-registration'])
67340
- .er-whole-series-empty {
67341
- border-radius: var(--rb-block-radius);
67342
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
67343
- padding: 2.5rem;
67344
- text-align: center;
66378
+ /* ALTCHA widget container */
66379
+ :where(.theme-scope) .newsletter-altcha {
66380
+ margin-top: 0.75rem;
66381
+ display: flex;
66382
+ justify-content: center;
67345
66383
  }
67346
66384
 
67347
- :where(.theme-scope)
67348
- :where([data-block='event-registration'], [data-block='course-registration'])
67349
- .er-whole-series-empty__text {
67350
- opacity: 0.7;
66385
+ /* Privacy note */
66386
+ :where(.theme-scope) .newsletter-privacy-note {
66387
+ margin-top: 0.75rem;
66388
+ font-size: 1rem;
66389
+ line-height: 1.6;
66390
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66391
+ text-align: center;
67351
66392
  }
67352
66393
 
67353
66394
  /* =============================================================================
67354
- * Layout (two-column)
66395
+ * Inline Variant - Horizontal layout
67355
66396
  * =============================================================================
67356
66397
  */
67357
- :where(.theme-scope)
67358
- :where([data-block='event-registration'], [data-block='course-registration'])
67359
- .er-whole-series-layout {
67360
- display: grid;
67361
- gap: 1.5rem;
67362
- grid-template-columns: 1fr;
67363
- }
67364
66398
 
67365
- @container rb-site (min-width: 768px) {
67366
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67367
- :where(.theme-scope)
67368
- :where(
67369
- [data-block='event-registration'],
67370
- [data-block='course-registration']
67371
- )
67372
- .er-whole-series-layout--with-sidebar {
67373
- grid-template-columns: 1fr 280px;
67374
- }
67375
- }
66399
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
66400
+ flex-direction: row;
66401
+ align-items: flex-end;
66402
+ flex-wrap: wrap;
66403
+ gap: var(--rb-gap-sm, 0.75rem);
67376
66404
  }
67377
66405
 
67378
- :where(.theme-scope)
67379
- :where([data-block='event-registration'], [data-block='course-registration'])
67380
- .er-whole-series-layout__main {
67381
- min-width: 0;
66406
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
66407
+ flex: 1 1 auto;
66408
+ min-width: 10rem;
67382
66409
  }
67383
66410
 
67384
- :where(.theme-scope)
67385
- :where([data-block='event-registration'], [data-block='course-registration'])
67386
- .er-whole-series-layout__sidebar {
67387
- display: none;
66411
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
66412
+ margin-top: 0;
66413
+ flex-shrink: 0;
67388
66414
  }
67389
66415
 
67390
- @container rb-site (min-width: 768px) {
66416
+ /* Mobile fallback for inline variant */
66417
+ @container rb-site (max-width: 640px) {
67391
66418
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67392
- :where(.theme-scope)
67393
- :where(
67394
- [data-block='event-registration'],
67395
- [data-block='course-registration']
67396
- )
67397
- .er-whole-series-layout__sidebar {
67398
- display: block;
66419
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
66420
+ flex-direction: column;
66421
+ }
66422
+
66423
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
66424
+ min-width: 100%;
67399
66425
  }
67400
66426
  }
67401
66427
  }
67402
66428
 
67403
66429
  /* =============================================================================
67404
- * Step Indicator
66430
+ * Editorial Split Variant
67405
66431
  * =============================================================================
67406
66432
  */
67407
- :where(.theme-scope)
67408
- :where([data-block='event-registration'], [data-block='course-registration'])
67409
- .er-whole-series-steps {
67410
- display: flex;
67411
- align-items: center;
67412
- gap: 0.5rem;
67413
- margin-bottom: 1.5rem;
67414
- }
67415
66433
 
67416
- :where(.theme-scope)
67417
- :where([data-block='event-registration'], [data-block='course-registration'])
67418
- .er-whole-series-step {
67419
- display: flex;
66434
+ :where(.theme-scope) .newsletter-editorial-split {
66435
+ display: grid;
66436
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
66437
+ gap: clamp(2.5rem, 7vw, 7rem);
67420
66438
  align-items: center;
67421
- gap: 0.5rem;
66439
+ text-align: left;
67422
66440
  }
67423
66441
 
67424
- :where(.theme-scope)
67425
- :where([data-block='event-registration'], [data-block='course-registration'])
67426
- .er-whole-series-step-circle {
67427
- width: 1.75rem;
67428
- height: 1.75rem;
67429
- border-radius: 9999px;
66442
+ :where(.theme-scope) .newsletter-editorial-split-copy {
67430
66443
  display: flex;
67431
- align-items: center;
67432
- justify-content: center;
67433
- font-size: 0.75rem;
67434
- font-weight: 600;
67435
- background: var(--er-step-inactive);
67436
- color: var(--er-step-text);
67437
- transition: background-color 0.2s ease;
66444
+ flex-direction: column;
66445
+ gap: var(--rb-gap-sm, 0.75rem);
67438
66446
  }
67439
66447
 
67440
- :where(.theme-scope)
67441
- :where([data-block='event-registration'], [data-block='course-registration'])
67442
- .er-whole-series-step-circle--active {
67443
- background: var(--er-step-active);
67444
- color: var(--er-step-text-active);
66448
+ :where(.theme-scope) .newsletter-editorial-split-form {
66449
+ min-width: 0;
67445
66450
  }
67446
66451
 
67447
- :where(.theme-scope)
67448
- :where([data-block='event-registration'], [data-block='course-registration'])
67449
- .er-whole-series-step-circle--completed {
67450
- background: var(--er-step-completed);
67451
- color: var(--er-step-text);
66452
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
66453
+ max-width: none;
66454
+ margin-inline: 0;
67452
66455
  }
67453
66456
 
67454
- :where(.theme-scope)
67455
- :where([data-block='event-registration'], [data-block='course-registration'])
67456
- .er-whole-series-step-label {
67457
- font-size: 0.875rem;
66457
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
66458
+ font-size: clamp(2rem, 4vw, 3.5rem);
67458
66459
  font-weight: 500;
67459
- color: rgb(var(--tb-mutedText));
67460
- display: none;
67461
66460
  }
67462
66461
 
67463
- @container rb-site (min-width: 640px) {
66462
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
66463
+ text-align: left;
66464
+ }
66465
+
66466
+ @container rb-site (max-width: 767px) {
67464
66467
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67465
- :where(.theme-scope)
67466
- :where(
67467
- [data-block='event-registration'],
67468
- [data-block='course-registration']
67469
- )
67470
- .er-whole-series-step-label {
67471
- display: block;
66468
+ :where(.theme-scope) .newsletter-editorial-split {
66469
+ grid-template-columns: minmax(0, 1fr);
66470
+ gap: 2rem;
67472
66471
  }
67473
66472
  }
67474
66473
  }
67475
66474
 
67476
- :where(.theme-scope)
67477
- :where([data-block='event-registration'], [data-block='course-registration'])
67478
- .er-whole-series-step-label--active {
67479
- color: var(--er-on-surface);
67480
- font-weight: 600;
67481
- }
67482
-
67483
- :where(.theme-scope)
67484
- :where([data-block='event-registration'], [data-block='course-registration'])
67485
- .er-whole-series-step-connector {
67486
- flex: 1;
67487
- height: 2px;
67488
- background: var(--er-step-connector);
67489
- min-width: 1rem;
67490
- }
66475
+ /* =============================================================================
66476
+ * Success State
66477
+ * =============================================================================
66478
+ */
67491
66479
 
67492
- :where(.theme-scope)
67493
- :where([data-block='event-registration'], [data-block='course-registration'])
67494
- .er-whole-series-step-connector--completed {
67495
- background: var(--er-step-completed);
66480
+ :where(.theme-scope) .newsletter-success {
66481
+ text-align: center;
67496
66482
  }
67497
66483
 
67498
- :where(.theme-scope)
67499
- :where([data-block='event-registration'], [data-block='course-registration'])
67500
- .er-whole-series-step-check {
67501
- width: 0.875rem;
67502
- height: 0.875rem;
66484
+ :where(.theme-scope) .newsletter-success .fb-success {
66485
+ padding: 1rem 1.5rem;
66486
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
66487
+ border-radius: var(--radius-md, 0.5rem);
66488
+ color: rgb(var(--tb-text));
67503
66489
  }
67504
66490
 
67505
66491
  /* =============================================================================
67506
- * Lists
66492
+ * Block: Contact + Newsletter
67507
66493
  * =============================================================================
67508
66494
  */
67509
- :where(.theme-scope)
67510
- :where([data-block='event-registration'], [data-block='course-registration'])
67511
- .er-whole-series-run-list {
66495
+
66496
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
67512
66497
  display: grid;
67513
- gap: 1rem;
66498
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
66499
+ gap: clamp(2.5rem, 6vw, 4rem);
66500
+ align-items: start;
67514
66501
  }
67515
66502
 
67516
- /* =============================================================================
67517
- * Run cards
67518
- * =============================================================================
67519
- */
67520
- :where(.theme-scope)
67521
- :where([data-block='event-registration'], [data-block='course-registration'])
67522
- .er-whole-series-run-card {
67523
- border-radius: var(--rb-block-radius);
67524
- border: 1px solid var(--er-border);
67525
- padding: 1rem;
67526
- background: rgb(var(--tb-background));
67527
- cursor: pointer;
67528
- transition:
67529
- border-color var(--rb-block-transition) ease,
67530
- transform var(--rb-block-transition) ease;
66503
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
66504
+ min-width: 0;
67531
66505
  }
67532
66506
 
67533
- :where(.theme-scope)
67534
- :where([data-block='event-registration'], [data-block='course-registration'])
67535
- .er-whole-series-run-card:hover {
67536
- border-color: var(--er-border-hover);
67537
- transform: translateY(-1px);
66507
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
66508
+ margin-bottom: 1.5rem;
67538
66509
  }
67539
66510
 
67540
- :where(.theme-scope)
67541
- :where([data-block='event-registration'], [data-block='course-registration'])
67542
- .er-whole-series-run-card:focus-visible {
67543
- outline: 2px solid var(--er-focus-ring);
67544
- outline-offset: 2px;
66511
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
66512
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
66513
+ margin: 0 0 0.75rem;
67545
66514
  }
67546
66515
 
67547
- :where(.theme-scope)
67548
- :where([data-block='event-registration'], [data-block='course-registration'])
67549
- .er-whole-series-run-card--selected {
67550
- border-color: var(--er-border-selected);
67551
- box-shadow: 0 0 0 3px var(--er-focus-ring);
66516
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
66517
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
66518
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
67552
66519
  }
67553
66520
 
67554
- :where(.theme-scope)
67555
- :where([data-block='event-registration'], [data-block='course-registration'])
67556
- .er-whole-series-run-card__title {
67557
- margin: 0 0 0.25rem 0;
67558
- font-weight: 700;
67559
- font-size: 1.125rem;
66521
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
66522
+ display: flex;
66523
+ flex-direction: column;
66524
+ align-items: flex-start;
67560
66525
  }
67561
66526
 
67562
- :where(.theme-scope)
67563
- :where([data-block='event-registration'], [data-block='course-registration'])
67564
- .er-whole-series-run-card__status {
67565
- margin: 0.25rem 0 0 0;
67566
- opacity: 0.8;
66527
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
66528
+ max-width: none;
66529
+ margin-left: 0;
66530
+ margin-right: 0;
67567
66531
  }
67568
66532
 
67569
- :where(.theme-scope)
67570
- :where([data-block='event-registration'], [data-block='course-registration'])
67571
- .er-whole-series-run-card__sessions,
67572
- :where(.theme-scope)
67573
- :where([data-block='event-registration'], [data-block='course-registration'])
67574
- .er-whole-series-run-card__price,
67575
- :where(.theme-scope)
67576
- :where([data-block='event-registration'], [data-block='course-registration'])
67577
- .er-whole-series-run-card__capacity,
67578
- :where(.theme-scope)
67579
- :where([data-block='event-registration'], [data-block='course-registration'])
67580
- .er-whole-series-run-card__venue {
67581
- margin: 0.25rem 0 0 0;
67582
- opacity: 0.85;
66533
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
66534
+ text-align: left;
67583
66535
  }
67584
66536
 
67585
- /* =============================================================================
67586
- * Capacity Badges
67587
- * =============================================================================
67588
- */
67589
- :where(.theme-scope)
67590
- :where([data-block='event-registration'], [data-block='course-registration'])
67591
- .er-whole-series-capacity-badge {
67592
- display: inline-block;
67593
- padding: 0.125rem 0.5rem;
67594
- border-radius: 9999px;
67595
- font-size: 0.75rem;
67596
- font-weight: 500;
66537
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
66538
+ display: flex;
66539
+ flex-direction: column;
66540
+ gap: 1rem;
67597
66541
  }
67598
66542
 
67599
- :where(.theme-scope)
67600
- :where([data-block='event-registration'], [data-block='course-registration'])
67601
- .er-whole-series-capacity-badge--available {
67602
- background: var(--er-capacity-available-bg);
67603
- color: var(--er-capacity-available-text);
66543
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
66544
+ display: grid;
66545
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
66546
+ gap: 1rem;
67604
66547
  }
67605
66548
 
67606
- :where(.theme-scope)
67607
- :where([data-block='event-registration'], [data-block='course-registration'])
67608
- .er-whole-series-capacity-badge--low {
67609
- background: var(--er-capacity-low-bg);
67610
- color: var(--er-capacity-low-text);
66549
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
66550
+ display: flex;
66551
+ flex-direction: column;
66552
+ gap: 0.25rem;
67611
66553
  }
67612
66554
 
67613
- :where(.theme-scope)
67614
- :where([data-block='event-registration'], [data-block='course-registration'])
67615
- .er-whole-series-capacity-badge--soldout {
67616
- background: var(--er-capacity-soldout-bg);
67617
- color: var(--er-capacity-soldout-text);
66555
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
66556
+ display: flex;
66557
+ flex-direction: column;
66558
+ gap: 0.5rem;
66559
+ border: none;
66560
+ padding: 0;
66561
+ margin: 0;
67618
66562
  }
67619
66563
 
67620
- /* =============================================================================
67621
- * Summary + Details
67622
- * =============================================================================
67623
- */
67624
- :where(.theme-scope)
67625
- :where([data-block='event-registration'], [data-block='course-registration'])
67626
- .er-whole-series-details {
67627
- display: grid;
67628
- gap: 1rem;
66564
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
66565
+ display: flex;
66566
+ align-items: center;
66567
+ gap: 0.5rem;
67629
66568
  }
67630
66569
 
67631
- :where(.theme-scope)
67632
- :where([data-block='event-registration'], [data-block='course-registration'])
67633
- .er-whole-series-summary {
66570
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
66571
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
66572
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
67634
66573
  border-radius: var(--rb-block-radius);
67635
- border: 1px solid var(--er-summary-border);
67636
66574
  padding: 1rem;
67637
- background: var(--er-summary-bg);
67638
- }
67639
-
67640
- :where(.theme-scope)
67641
- :where([data-block='event-registration'], [data-block='course-registration'])
67642
- .er-whole-series-summary__title {
67643
- margin: 0;
67644
- font-size: 1.25rem;
67645
- font-weight: 800;
66575
+ font-size: 0.875rem;
67646
66576
  }
67647
66577
 
67648
- :where(.theme-scope)
67649
- :where([data-block='event-registration'], [data-block='course-registration'])
67650
- .er-whole-series-summary__sessions-title {
67651
- margin: 0.75rem 0 0.5rem 0;
67652
- font-weight: 700;
66578
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
66579
+ background-color: var(--fb-success-bg);
66580
+ color: var(--fb-success-text);
66581
+ border: 1px solid var(--fb-success-border);
67653
66582
  }
67654
66583
 
67655
- :where(.theme-scope)
67656
- :where([data-block='event-registration'], [data-block='course-registration'])
67657
- .er-whole-series-summary__sessions-list {
67658
- list-style: none;
67659
- padding: 0;
67660
- margin: 0;
67661
- display: grid;
67662
- gap: 0.35rem;
66584
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
66585
+ background-color: var(--fb-error-bg);
66586
+ color: var(--fb-error-text);
66587
+ border: 1px solid var(--fb-error-border);
67663
66588
  }
67664
66589
 
67665
- :where(.theme-scope)
67666
- :where([data-block='event-registration'], [data-block='course-registration'])
67667
- .er-whole-series-summary__session {
67668
- opacity: 0.9;
66590
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
66591
+ background-color: var(--fb-empty-bg);
66592
+ color: var(--fb-empty-text);
66593
+ border: 1px dashed var(--fb-empty-border);
66594
+ text-align: center;
67669
66595
  }
67670
66596
 
67671
- :where(.theme-scope)
67672
- :where([data-block='event-registration'], [data-block='course-registration'])
67673
- .er-whole-series-summary__venue,
67674
- :where(.theme-scope)
67675
- :where([data-block='event-registration'], [data-block='course-registration'])
67676
- .er-whole-series-summary__price,
67677
- :where(.theme-scope)
67678
- :where([data-block='event-registration'], [data-block='course-registration'])
67679
- .er-whole-series-summary__membership {
67680
- margin: 0.5rem 0 0 0;
67681
- opacity: 0.9;
66597
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
66598
+ margin-top: 0.5rem;
67682
66599
  }
67683
66600
 
67684
66601
  /* =============================================================================
67685
- * Form
66602
+ * Block: Team Members
67686
66603
  * =============================================================================
66604
+ *
66605
+ * Site/theme authors sometimes need different thumbnail shapes/sizes without
66606
+ * changing global fragment defaults. We expose these controls on the block and
66607
+ * style them via data attributes on the \`.rb-team-members\` wrapper.
67687
66608
  */
67688
- :where(.theme-scope)
67689
- :where([data-block='event-registration'], [data-block='course-registration'])
67690
- .er-whole-series-form {
67691
- display: grid;
67692
- gap: 1rem;
66609
+
66610
+ /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
66611
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
66612
+ text-align: left;
67693
66613
  }
67694
66614
 
67695
- :where(.theme-scope)
67696
- :where([data-block='event-registration'], [data-block='course-registration'])
67697
- .er-whole-series-form__field {
67698
- display: grid;
67699
- gap: 0.35rem;
66615
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
66616
+ align-items: flex-start;
66617
+ text-align: left;
67700
66618
  }
67701
66619
 
67702
- :where(.theme-scope)
67703
- :where([data-block='event-registration'], [data-block='course-registration'])
67704
- .er-whole-series-form__label {
67705
- font-size: 0.875rem;
67706
- font-weight: 600;
66620
+ @container rb-site (min-width: 1024px) {
66621
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66622
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
66623
+ width: 75%;
66624
+ margin-left: 0;
66625
+ margin-right: auto;
66626
+ }
66627
+ }
67707
66628
  }
67708
66629
 
67709
- :where(.theme-scope)
67710
- :where([data-block='event-registration'], [data-block='course-registration'])
67711
- .er-whole-series-form__label--required::after {
67712
- content: ' *';
67713
- color: var(--er-required);
66630
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
66631
+ display: block;
66632
+ width: 100%;
66633
+ height: auto;
67714
66634
  }
67715
66635
 
67716
- :where(.theme-scope)
67717
- :where([data-block='event-registration'], [data-block='course-registration'])
67718
- .er-whole-series-form__input {
67719
- border-radius: calc(var(--rb-block-radius) * 0.6);
67720
- border: 1px solid var(--er-border);
67721
- padding: 0.6rem 0.75rem;
67722
- background: rgb(var(--tb-background));
67723
- color: rgb(var(--tb-foreground));
66636
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
66637
+ font-weight: 600;
67724
66638
  }
67725
66639
 
67726
- :where(.theme-scope)
67727
- :where([data-block='event-registration'], [data-block='course-registration'])
67728
- .er-whole-series-form__textarea {
67729
- border-radius: calc(var(--rb-block-radius) * 0.6);
67730
- border: 1px solid var(--er-border);
67731
- padding: 0.6rem 0.75rem;
67732
- background: rgb(var(--tb-background));
67733
- color: rgb(var(--tb-foreground));
67734
- resize: vertical;
66640
+ /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
66641
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
66642
+ --rb-team-thumb-max: 11.25rem; /* ~180px default */
66643
+ --rb-team-image-basis: 33.333%;
67735
66644
  }
67736
66645
 
67737
- :where(.theme-scope)
67738
- :where([data-block='event-registration'], [data-block='course-registration'])
67739
- .er-whole-series-form__input:focus,
67740
- :where(.theme-scope)
67741
- :where([data-block='event-registration'], [data-block='course-registration'])
67742
- .er-whole-series-form__textarea:focus {
67743
- outline: 2px solid var(--er-focus-ring);
67744
- outline-offset: 2px;
66646
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
66647
+ --rb-team-thumb-max: 8.75rem; /* ~140px */
66648
+ --rb-team-image-basis: 25%;
67745
66649
  }
67746
66650
 
67747
- :where(.theme-scope)
67748
- :where([data-block='event-registration'], [data-block='course-registration'])
67749
- .er-whole-series-form__input--error,
67750
- :where(.theme-scope)
67751
- :where([data-block='event-registration'], [data-block='course-registration'])
67752
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
67753
- border-color: var(--er-border-error);
66651
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
66652
+ --rb-team-thumb-max: 11.25rem; /* ~180px */
66653
+ --rb-team-image-basis: 33.333%;
67754
66654
  }
67755
66655
 
67756
- :where(.theme-scope)
67757
- :where([data-block='event-registration'], [data-block='course-registration'])
67758
- .er-whole-series-form__error {
67759
- font-size: 0.875rem;
67760
- color: var(--er-error-text);
66656
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
66657
+ --rb-team-thumb-max: 13.75rem; /* ~220px */
66658
+ --rb-team-image-basis: 40%;
67761
66659
  }
67762
66660
 
67763
- :where(.theme-scope)
67764
- :where([data-block='event-registration'], [data-block='course-registration'])
67765
- .er-whole-series-form__hint {
67766
- font-size: 0.875rem;
67767
- opacity: 0.7;
66661
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
66662
+ --rb-team-thumb-max: 17.5rem; /* ~280px */
66663
+ --rb-team-image-basis: 50%;
67768
66664
  }
67769
66665
 
67770
- /* Logged-in user hint with logout link */
67771
- :where(.theme-scope)
67772
- :where([data-block='event-registration'], [data-block='course-registration'])
67773
- .er-whole-series-logged-in-hint {
67774
- font-size: 0.875rem;
67775
- opacity: 0.7;
67776
- margin: 0.25rem 0 0 0;
66666
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
66667
+ --rb-team-thumb-max: 22.5rem; /* ~360px */
66668
+ --rb-team-image-basis: 66.667%;
67777
66669
  }
67778
66670
 
67779
- :where(.theme-scope)
67780
- :where([data-block='event-registration'], [data-block='course-registration'])
67781
- .er-whole-series-link {
67782
- background: none;
67783
- border: none;
67784
- padding: 0;
67785
- font-size: inherit;
67786
- color: rgb(var(--tb-primary));
67787
- cursor: pointer;
67788
- text-decoration: underline;
67789
- text-underline-offset: 2px;
66671
+ /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
66672
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo-wrap {
66673
+ width: 100%;
66674
+ overflow: hidden;
67790
66675
  }
67791
66676
 
67792
- :where(.theme-scope)
67793
- :where([data-block='event-registration'], [data-block='course-registration'])
67794
- .er-whole-series-link:hover {
67795
- text-decoration: none;
66677
+ /* In grid mode, cap thumbnail width so headshots don't dominate the card. */
66678
+ :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-member-photo-wrap) {
66679
+ max-width: var(--rb-team-thumb-max);
67796
66680
  }
67797
66681
 
67798
- /* =============================================================================
67799
- * Actions
67800
- * =============================================================================
67801
- */
67802
- :where(.theme-scope)
67803
- :where([data-block='event-registration'], [data-block='course-registration'])
67804
- .er-whole-series-actions {
67805
- display: flex;
67806
- align-items: center;
67807
- justify-content: space-between;
67808
- gap: 0.75rem;
67809
- margin-top: 0.25rem;
67810
- }
67811
-
67812
- :where(.theme-scope)
67813
- :where([data-block='event-registration'], [data-block='course-registration'])
67814
- .er-whole-series-back-btn {
67815
- border: 0;
67816
- background: transparent;
67817
- color: var(--er-on-surface);
67818
- opacity: 0.8;
67819
- padding: 0.25rem 0.25rem;
67820
- cursor: pointer;
67821
- }
67822
-
67823
- :where(.theme-scope)
67824
- :where([data-block='event-registration'], [data-block='course-registration'])
67825
- .er-whole-series-back-btn:hover {
67826
- opacity: 1;
67827
- text-decoration: underline;
67828
- }
67829
-
67830
- /* =============================================================================
67831
- * Payment Options
67832
- * =============================================================================
67833
- */
67834
- :where(.theme-scope)
67835
- :where([data-block='event-registration'], [data-block='course-registration'])
67836
- .er-whole-series-payment__options {
67837
- display: grid;
67838
- gap: 0.5rem;
67839
- }
67840
-
67841
- :where(.theme-scope)
67842
- :where([data-block='event-registration'], [data-block='course-registration'])
67843
- .er-whole-series-payment__option {
67844
- display: flex;
67845
- align-items: center;
67846
- gap: 0.5rem;
67847
- }
67848
-
67849
- /* =============================================================================
67850
- * Payment Tiles (Card Grid)
67851
- * =============================================================================
67852
- */
67853
- :where(.theme-scope)
67854
- :where([data-block='event-registration'], [data-block='course-registration'])
67855
- .er-whole-series-payment-tiles {
67856
- display: grid;
67857
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
67858
- gap: 0.75rem;
67859
- }
67860
-
67861
- :where(.theme-scope)
67862
- :where([data-block='event-registration'], [data-block='course-registration'])
67863
- .er-whole-series-payment-tile {
67864
- border-radius: var(--rb-block-radius);
67865
- border: 1px solid var(--er-payment-border);
67866
- padding: 1rem;
67867
- background: rgb(var(--tb-background));
67868
- cursor: pointer;
67869
- transition:
67870
- border-color 0.15s ease,
67871
- box-shadow 0.15s ease,
67872
- background-color 0.15s ease;
67873
- position: relative;
67874
- }
67875
-
67876
- :where(.theme-scope)
67877
- :where([data-block='event-registration'], [data-block='course-registration'])
67878
- .er-whole-series-payment-tile:hover {
67879
- border-color: var(--er-payment-border-hover);
67880
- }
67881
-
67882
- :where(.theme-scope)
67883
- :where([data-block='event-registration'], [data-block='course-registration'])
67884
- .er-whole-series-payment-tile:focus-visible {
67885
- outline: 2px solid var(--er-focus-ring);
67886
- outline-offset: 2px;
67887
- }
67888
-
67889
- :where(.theme-scope)
67890
- :where([data-block='event-registration'], [data-block='course-registration'])
67891
- .er-whole-series-payment-tile--selected {
67892
- border-color: var(--er-payment-border-selected);
67893
- background: var(--er-payment-bg-selected);
67894
- box-shadow: 0 0 0 3px var(--er-focus-ring);
67895
- }
67896
-
67897
- :where(.theme-scope)
67898
- :where([data-block='event-registration'], [data-block='course-registration'])
67899
- .er-whole-series-payment-tile--upsell {
67900
- border-style: dashed;
67901
- }
67902
-
67903
- :where(.theme-scope)
67904
- :where([data-block='event-registration'], [data-block='course-registration'])
67905
- .er-whole-series-payment-tile__header {
67906
- display: flex;
67907
- align-items: flex-start;
67908
- justify-content: space-between;
67909
- gap: 0.5rem;
67910
- }
67911
-
67912
- :where(.theme-scope)
67913
- :where([data-block='event-registration'], [data-block='course-registration'])
67914
- .er-whole-series-payment-tile__name {
67915
- margin: 0;
67916
- font-weight: 600;
67917
- font-size: 1rem;
67918
- }
67919
-
67920
- :where(.theme-scope)
67921
- :where([data-block='event-registration'], [data-block='course-registration'])
67922
- .er-whole-series-payment-tile__description {
67923
- margin: 0.25rem 0 0 0;
67924
- font-size: 0.875rem;
67925
- opacity: 0.7;
67926
- }
67927
-
67928
- :where(.theme-scope)
67929
- :where([data-block='event-registration'], [data-block='course-registration'])
67930
- .er-whole-series-payment-tile__price {
67931
- font-weight: 600;
67932
- font-size: 0.875rem;
67933
- white-space: nowrap;
67934
- }
67935
-
67936
- :where(.theme-scope)
67937
- :where([data-block='event-registration'], [data-block='course-registration'])
67938
- .er-whole-series-payment-tile__badge {
67939
- display: inline-block;
67940
- padding: 0.125rem 0.5rem;
67941
- border-radius: 9999px;
67942
- font-size: 0.75rem;
67943
- font-weight: 500;
67944
- margin-top: 0.5rem;
67945
- }
67946
-
67947
- /* Checkmark indicator on selected tile */
67948
- :where(.theme-scope)
67949
- :where([data-block='event-registration'], [data-block='course-registration'])
67950
- .er-whole-series-payment-tile__check {
67951
- position: absolute;
67952
- top: 0.5rem;
67953
- right: 0.5rem;
67954
- width: 1.25rem;
67955
- height: 1.25rem;
67956
- border-radius: 9999px;
67957
- background: var(--er-check-bg);
67958
- color: var(--er-check-text);
67959
- display: flex;
67960
- align-items: center;
67961
- justify-content: center;
67962
- opacity: 0;
67963
- transition: opacity 0.15s ease;
67964
- }
67965
-
67966
- :where(.theme-scope)
67967
- :where([data-block='event-registration'], [data-block='course-registration'])
67968
- .er-whole-series-payment-tile--selected
67969
- .er-whole-series-payment-tile__check {
67970
- opacity: 1;
67971
- }
67972
-
67973
- /* =============================================================================
67974
- * Booking Mode Step
67975
- * =============================================================================
67976
- */
67977
- :where(.theme-scope)
67978
- :where([data-block='event-registration'], [data-block='course-registration'])
67979
- .er-whole-series-booking-mode {
67980
- display: grid;
67981
- gap: 1rem;
67982
- }
67983
-
67984
- :where(.theme-scope)
67985
- :where([data-block='event-registration'], [data-block='course-registration'])
67986
- .er-whole-series-booking-mode__title {
67987
- margin: 0;
67988
- font-size: var(--er-step-title-size);
67989
- font-weight: 700;
67990
- }
67991
-
67992
- :where(.theme-scope)
67993
- :where([data-block='event-registration'], [data-block='course-registration'])
67994
- .er-whole-series-booking-mode__subtitle {
67995
- margin: 0.25rem 0 0 0;
67996
- opacity: 0.7;
67997
- }
67998
-
67999
- :where(.theme-scope)
68000
- :where([data-block='event-registration'], [data-block='course-registration'])
68001
- .er-whole-series-booking-mode__link {
68002
- margin-top: 0.5rem;
68003
- font-size: 0.875rem;
68004
- }
68005
-
68006
- :where(.theme-scope)
68007
- :where([data-block='event-registration'], [data-block='course-registration'])
68008
- .er-whole-series-booking-mode__link
68009
- a {
68010
- color: rgb(var(--tb-primary));
68011
- text-decoration: underline;
68012
- cursor: pointer;
68013
- }
68014
-
68015
- :where(.theme-scope)
68016
- :where([data-block='event-registration'], [data-block='course-registration'])
68017
- .er-whole-series-booking-mode__link
68018
- a:hover {
68019
- text-decoration: none;
68020
- }
68021
-
68022
- /* =============================================================================
68023
- * Membership Hero
68024
- * =============================================================================
68025
- */
68026
- :where(.theme-scope)
68027
- :where([data-block='event-registration'], [data-block='course-registration'])
68028
- .er-whole-series-membership-hero {
68029
- border-radius: var(--rb-block-radius);
68030
- background: var(--er-success-bg);
68031
- border: 1px solid rgba(var(--tb-success), 0.2);
68032
- padding: 1.5rem;
68033
- text-align: center;
68034
- }
68035
-
68036
- :where(.theme-scope)
68037
- :where([data-block='event-registration'], [data-block='course-registration'])
68038
- .er-whole-series-membership-hero__icon {
68039
- font-size: 2rem;
68040
- margin-bottom: 0.75rem;
68041
- }
68042
-
68043
- :where(.theme-scope)
68044
- :where([data-block='event-registration'], [data-block='course-registration'])
68045
- .er-whole-series-membership-hero__title {
68046
- margin: 0;
68047
- font-size: 1.25rem;
68048
- font-weight: 700;
68049
- color: var(--er-success-text);
68050
- }
68051
-
68052
- :where(.theme-scope)
68053
- :where([data-block='event-registration'], [data-block='course-registration'])
68054
- .er-whole-series-membership-hero__subtitle {
68055
- margin: 0.25rem 0 0 0;
68056
- font-size: 0.875rem;
68057
- opacity: 0.8;
68058
- }
68059
-
68060
- /* =============================================================================
68061
- * Portal Auth Sidebar
68062
- * =============================================================================
68063
- */
68064
- :where(.theme-scope)
68065
- :where([data-block='event-registration'], [data-block='course-registration'])
68066
- .er-whole-series-portal-sidebar {
68067
- border-radius: var(--rb-block-radius);
68068
- border: 1px solid var(--er-border);
68069
- padding: 1.25rem;
68070
- background: rgb(var(--tb-surface));
68071
- color: var(--er-on-surface);
68072
- }
68073
-
68074
- :where(.theme-scope)
68075
- :where([data-block='event-registration'], [data-block='course-registration'])
68076
- .er-whole-series-portal-sidebar__icon {
68077
- font-size: 1.5rem;
68078
- margin-bottom: 0.5rem;
68079
- }
68080
-
68081
- :where(.theme-scope)
68082
- :where([data-block='event-registration'], [data-block='course-registration'])
68083
- .er-whole-series-portal-sidebar__title {
68084
- margin: 0;
68085
- font-size: 1rem;
68086
- font-weight: 600;
68087
- }
68088
-
68089
- :where(.theme-scope)
68090
- :where([data-block='event-registration'], [data-block='course-registration'])
68091
- .er-whole-series-portal-sidebar__text {
68092
- margin: 0.5rem 0 0 0;
68093
- font-size: 0.875rem;
68094
- opacity: 0.8;
68095
- }
68096
-
68097
- :where(.theme-scope)
68098
- :where([data-block='event-registration'], [data-block='course-registration'])
68099
- .er-whole-series-portal-sidebar__action {
68100
- margin-top: 1rem;
68101
- }
68102
-
68103
- :where(.theme-scope)
68104
- :where([data-block='event-registration'], [data-block='course-registration'])
68105
- .er-whole-series-portal-sidebar__link {
68106
- color: rgb(var(--tb-primary));
68107
- cursor: pointer;
68108
- text-decoration: underline;
68109
- font-size: 0.875rem;
68110
- }
68111
-
68112
- :where(.theme-scope)
68113
- :where([data-block='event-registration'], [data-block='course-registration'])
68114
- .er-whole-series-portal-sidebar__link:hover {
68115
- text-decoration: none;
68116
- }
68117
-
68118
- /* =============================================================================
68119
- * Modal (for Magic Link)
68120
- * =============================================================================
68121
- */
68122
- :where(.theme-scope)
68123
- :where([data-block='event-registration'], [data-block='course-registration'])
68124
- .er-whole-series-modal-overlay {
68125
- position: fixed;
68126
- inset: 0;
68127
- background: rgba(var(--tb-scrim), 0.5);
68128
- display: flex;
68129
- align-items: center;
68130
- justify-content: center;
68131
- z-index: 100;
68132
- animation: er-whole-series-fade-in 0.15s ease;
68133
- }
68134
-
68135
- :where(.theme-scope)
68136
- :where([data-block='event-registration'], [data-block='course-registration'])
68137
- .er-whole-series-modal {
68138
- background: rgb(var(--tb-surface));
68139
- color: var(--er-on-surface);
68140
- border-radius: var(--rb-block-radius);
68141
- padding: 1.5rem;
68142
- max-width: 28rem;
68143
- width: calc(100% - 2rem);
68144
- position: relative;
68145
- animation: er-whole-series-slide-up 0.2s ease;
68146
- }
68147
-
68148
- :where(.theme-scope)
68149
- :where([data-block='event-registration'], [data-block='course-registration'])
68150
- .er-whole-series-modal-close {
68151
- position: absolute;
68152
- top: 0.75rem;
68153
- right: 0.75rem;
68154
- background: transparent;
68155
- border: 0;
68156
- padding: 0.25rem;
68157
- cursor: pointer;
68158
- opacity: 0.6;
68159
- transition: opacity 0.15s ease;
68160
- }
68161
-
68162
- :where(.theme-scope)
68163
- :where([data-block='event-registration'], [data-block='course-registration'])
68164
- .er-whole-series-modal-close:hover {
68165
- opacity: 1;
68166
- }
68167
-
68168
- @keyframes er-whole-series-fade-in {
68169
- from {
68170
- opacity: 0;
68171
- }
68172
- to {
68173
- opacity: 1;
68174
- }
68175
- }
68176
-
68177
- @keyframes er-whole-series-slide-up {
68178
- from {
68179
- opacity: 0;
68180
- transform: translateY(10px);
68181
- }
68182
- to {
68183
- opacity: 1;
68184
- transform: translateY(0);
68185
- }
68186
- }
68187
-
68188
- /* Reduced motion */
68189
- @media (prefers-reduced-motion: reduce) {
68190
- :where(.theme-scope)
68191
- :where(
68192
- [data-block='event-registration'],
68193
- [data-block='course-registration']
68194
- )
68195
- .er-whole-series-modal-overlay,
68196
- :where(.theme-scope)
68197
- :where(
68198
- [data-block='event-registration'],
68199
- [data-block='course-registration']
68200
- )
68201
- .er-whole-series-modal {
68202
- animation: none;
68203
- }
68204
- }
68205
-
68206
- /* =============================================================================
68207
- * Center States
68208
- * =============================================================================
68209
- */
68210
- :where(.theme-scope)
68211
- :where([data-block='event-registration'], [data-block='course-registration'])
68212
- .er-whole-series-center {
68213
- display: grid;
68214
- place-items: center;
68215
- gap: 0.75rem;
68216
- padding: 2rem 0;
68217
- }
68218
-
68219
- /* =============================================================================
68220
- * Success/Waitlist/Error States
68221
- * =============================================================================
68222
- */
68223
- :where(.theme-scope)
68224
- :where([data-block='event-registration'], [data-block='course-registration'])
68225
- .er-whole-series-success,
68226
- :where(.theme-scope)
68227
- :where([data-block='event-registration'], [data-block='course-registration'])
68228
- .er-whole-series-waitlist,
68229
- :where(.theme-scope)
68230
- :where([data-block='event-registration'], [data-block='course-registration'])
68231
- .er-whole-series-error,
68232
- :where(.theme-scope)
68233
- :where([data-block='event-registration'], [data-block='course-registration'])
68234
- .er-whole-series-payment-failed {
68235
- text-align: center;
68236
- padding: 2rem 1rem;
68237
- }
68238
-
68239
- /* State icon color variants (layout from registration-surface.css) */
68240
- :where(.theme-scope)
68241
- :where([data-block='event-registration'], [data-block='course-registration'])
68242
- .rb-state-icon--success {
68243
- background: var(--er-success-bg);
68244
- color: var(--er-success-text);
68245
- }
68246
-
68247
- :where(.theme-scope)
68248
- :where([data-block='event-registration'], [data-block='course-registration'])
68249
- .rb-state-icon--error {
68250
- background: var(--er-error-bg);
68251
- color: var(--er-error-text);
68252
- }
68253
-
68254
- :where(.theme-scope)
68255
- :where([data-block='event-registration'], [data-block='course-registration'])
68256
- .rb-state-icon--waitlist,
68257
- :where(.theme-scope)
68258
- :where([data-block='event-registration'], [data-block='course-registration'])
68259
- .rb-state-icon--warning {
68260
- background: var(--er-waitlist-bg);
68261
- color: var(--er-waitlist-text);
68262
- }
68263
-
68264
- :where(.theme-scope)
68265
- :where([data-block='event-registration'], [data-block='course-registration'])
68266
- .er-whole-series-success__title,
68267
- :where(.theme-scope)
68268
- :where([data-block='event-registration'], [data-block='course-registration'])
68269
- .er-whole-series-waitlist__title,
68270
- :where(.theme-scope)
68271
- :where([data-block='event-registration'], [data-block='course-registration'])
68272
- .er-whole-series-error__title,
68273
- :where(.theme-scope)
68274
- :where([data-block='event-registration'], [data-block='course-registration'])
68275
- .er-whole-series-payment-failed__title {
68276
- margin: 0.75rem 0 0.5rem 0;
68277
- font-size: 1.125rem;
68278
- font-weight: 700;
68279
- }
68280
-
68281
- :where(.theme-scope)
68282
- :where([data-block='event-registration'], [data-block='course-registration'])
68283
- .er-whole-series-success__message,
68284
- :where(.theme-scope)
68285
- :where([data-block='event-registration'], [data-block='course-registration'])
68286
- .er-whole-series-waitlist__message,
68287
- :where(.theme-scope)
68288
- :where([data-block='event-registration'], [data-block='course-registration'])
68289
- .er-whole-series-error__message,
68290
- :where(.theme-scope)
68291
- :where([data-block='event-registration'], [data-block='course-registration'])
68292
- .er-whole-series-payment-failed__message {
68293
- margin: 0;
68294
- opacity: 0.7;
68295
- }
68296
-
68297
- :where(.theme-scope)
68298
- :where([data-block='event-registration'], [data-block='course-registration'])
68299
- .er-whole-series-success__membership {
68300
- margin-top: 0.5rem;
68301
- font-size: 0.875rem;
68302
- color: var(--er-success-text);
68303
- }
68304
-
68305
- :where(.theme-scope)
68306
- :where([data-block='event-registration'], [data-block='course-registration'])
68307
- .er-whole-series-error__retry,
68308
- :where(.theme-scope)
68309
- :where([data-block='event-registration'], [data-block='course-registration'])
68310
- .er-whole-series-payment-failed__retry {
68311
- margin-top: 1rem;
68312
- }
68313
-
68314
- /* =============================================================================
68315
- * Discount Code Section
68316
- * =============================================================================
68317
- */
68318
- :where(.theme-scope)
68319
- :where([data-block='event-registration'], [data-block='course-registration'])
68320
- .er-whole-series-discount {
68321
- margin-top: 0.5rem;
68322
- }
68323
-
68324
- :where(.theme-scope)
68325
- :where([data-block='event-registration'], [data-block='course-registration'])
68326
- .er-whole-series-discount__form {
68327
- display: grid;
68328
- gap: 0.5rem;
68329
- }
68330
-
68331
- :where(.theme-scope)
68332
- :where([data-block='event-registration'], [data-block='course-registration'])
68333
- .er-whole-series-discount__toggle {
68334
- background: transparent;
68335
- border: 0;
68336
- padding: 0;
68337
- color: rgb(var(--tb-primary));
68338
- cursor: pointer;
68339
- font-size: 0.875rem;
68340
- text-decoration: underline;
68341
- }
68342
-
68343
- :where(.theme-scope)
68344
- :where([data-block='event-registration'], [data-block='course-registration'])
68345
- .er-whole-series-discount__toggle:hover {
68346
- text-decoration: none;
68347
- }
68348
-
68349
- :where(.theme-scope)
68350
- :where([data-block='event-registration'], [data-block='course-registration'])
68351
- .er-whole-series-discount__label {
68352
- font-size: 0.875rem;
68353
- font-weight: 600;
68354
- }
68355
-
68356
- :where(.theme-scope)
68357
- :where([data-block='event-registration'], [data-block='course-registration'])
68358
- .er-whole-series-discount__row {
68359
- display: flex;
68360
- gap: 0.5rem;
68361
- }
68362
-
68363
- :where(.theme-scope)
68364
- :where([data-block='event-registration'], [data-block='course-registration'])
68365
- .er-whole-series-discount__input {
68366
- flex: 1;
68367
- border-radius: calc(var(--rb-block-radius) * 0.6);
68368
- border: 1px solid var(--er-border);
68369
- padding: 0.5rem 0.75rem;
68370
- background: rgb(var(--tb-background));
68371
- color: rgb(var(--tb-foreground));
68372
- font-size: 0.875rem;
68373
- }
68374
-
68375
- :where(.theme-scope)
68376
- :where([data-block='event-registration'], [data-block='course-registration'])
68377
- .er-whole-series-discount__input:focus {
68378
- outline: 2px solid var(--er-focus-ring);
68379
- outline-offset: 2px;
68380
- }
68381
-
68382
- :where(.theme-scope)
68383
- :where([data-block='event-registration'], [data-block='course-registration'])
68384
- .er-whole-series-discount__remove {
68385
- background: transparent;
68386
- border: 0;
68387
- padding: 0.25rem;
68388
- cursor: pointer;
68389
- opacity: 0.6;
68390
- }
68391
-
68392
- :where(.theme-scope)
68393
- :where([data-block='event-registration'], [data-block='course-registration'])
68394
- .er-whole-series-discount__apply {
68395
- background: transparent;
68396
- border: 0;
68397
- padding: 0.25rem;
68398
- cursor: pointer;
68399
- opacity: 0.8;
68400
- }
68401
-
68402
- :where(.theme-scope)
68403
- :where([data-block='event-registration'], [data-block='course-registration'])
68404
- .er-whole-series-discount__remove:hover {
68405
- opacity: 1;
68406
- }
68407
-
68408
- :where(.theme-scope)
68409
- :where([data-block='event-registration'], [data-block='course-registration'])
68410
- .er-whole-series-discount__apply:hover {
68411
- opacity: 1;
68412
- }
68413
-
68414
- :where(.theme-scope)
68415
- :where([data-block='event-registration'], [data-block='course-registration'])
68416
- .er-whole-series-discount__hint {
68417
- margin: 0;
68418
- font-size: 0.875rem;
68419
- opacity: 0.7;
68420
- }
68421
-
68422
- :where(.theme-scope)
68423
- :where([data-block='event-registration'], [data-block='course-registration'])
68424
- .er-whole-series-discount__feedback {
68425
- margin: 0;
68426
- font-size: 0.875rem;
68427
- }
68428
-
68429
- /* =============================================================================
68430
- * Altcha (Spam Protection)
68431
- * =============================================================================
68432
- */
68433
- :where(.theme-scope)
68434
- :where([data-block='event-registration'], [data-block='course-registration'])
68435
- .er-whole-series-altcha {
68436
- margin-top: 1rem;
68437
- }
68438
-
68439
- /* =============================================================================
68440
- * Magic Link Form
68441
- * =============================================================================
68442
- */
68443
- :where(.theme-scope)
68444
- :where([data-block='event-registration'], [data-block='course-registration'])
68445
- .er-whole-series-magic-link-form {
68446
- display: flex;
68447
- flex-direction: column;
68448
- gap: 0.75rem;
68449
- }
68450
-
68451
- :where(.theme-scope)
68452
- :where([data-block='event-registration'], [data-block='course-registration'])
68453
- .er-whole-series-magic-link-title {
68454
- margin: 0;
68455
- font-size: 1.25rem;
68456
- font-weight: 700;
68457
- }
68458
-
68459
- :where(.theme-scope)
68460
- :where([data-block='event-registration'], [data-block='course-registration'])
68461
- .er-whole-series-magic-link-success {
68462
- display: flex;
68463
- flex-direction: column;
68464
- gap: 0.75rem;
68465
- }
68466
-
68467
- :where(.theme-scope)
68468
- :where([data-block='event-registration'], [data-block='course-registration'])
68469
- .er-whole-series-portal-auth-text {
68470
- margin: 0;
68471
- font-size: 0.875rem;
68472
- opacity: 0.8;
68473
- }
68474
-
68475
- :where(.theme-scope)
68476
- :where([data-block='event-registration'], [data-block='course-registration'])
68477
- .er-whole-series-portal-auth-text--success {
68478
- color: var(--er-success-text);
68479
- }
68480
-
68481
- :where(.theme-scope)
68482
- :where([data-block='event-registration'], [data-block='course-registration'])
68483
- .er-whole-series-portal-auth-text--error {
68484
- color: var(--er-error-text);
68485
- }
68486
-
68487
- :where(.theme-scope)
68488
- :where([data-block='event-registration'], [data-block='course-registration'])
68489
- .er-whole-series-modal-btn {
68490
- border-radius: calc(var(--rb-block-radius) * 0.6);
68491
- border: 0;
68492
- padding: 0.6rem 1rem;
68493
- font-size: 0.875rem;
68494
- font-weight: 600;
68495
- cursor: pointer;
68496
- transition: opacity 0.15s ease;
68497
- background: rgb(var(--tb-primary));
68498
- color: rgb(var(--tb-primaryText, 255 255 255));
68499
- }
68500
-
68501
- :where(.theme-scope)
68502
- :where([data-block='event-registration'], [data-block='course-registration'])
68503
- .er-whole-series-modal-btn:hover {
68504
- opacity: 0.9;
68505
- }
68506
-
68507
- :where(.theme-scope)
68508
- :where([data-block='event-registration'], [data-block='course-registration'])
68509
- .er-whole-series-modal-btn:disabled {
68510
- opacity: 0.5;
68511
- cursor: not-allowed;
68512
- }
68513
-
68514
- :where(.theme-scope)
68515
- :where([data-block='event-registration'], [data-block='course-registration'])
68516
- .er-whole-series-modal-btn--secondary {
68517
- background: transparent;
68518
- color: var(--er-on-surface);
68519
- border: 1px solid var(--er-border);
68520
- }
68521
-
68522
- :where(.theme-scope)
68523
- :where([data-block='event-registration'], [data-block='course-registration'])
68524
- .er-whole-series-modal-btn--secondary:hover {
68525
- background: var(--er-on-surface-hover-bg);
68526
- }
68527
-
68528
- /* =============================================================================
68529
- * Utility Classes
68530
- * =============================================================================
68531
- */
68532
- :where(.theme-scope)
68533
- :where([data-block='event-registration'], [data-block='course-registration'])
68534
- .er-whole-series-text--muted {
68535
- opacity: 0.7;
68536
- }
68537
-
68538
- :where(.theme-scope)
68539
- :where([data-block='event-registration'], [data-block='course-registration'])
68540
- .er-whole-series-text--error {
68541
- color: var(--er-error-text);
68542
- }
68543
-
68544
- :where(.theme-scope)
68545
- :where([data-block='event-registration'], [data-block='course-registration'])
68546
- .er-whole-series-text--success {
68547
- color: var(--er-success-text);
68548
- }
68549
-
68550
- :where(.theme-scope)
68551
- :where([data-block='event-registration'], [data-block='course-registration'])
68552
- .er-whole-series-sr-only {
68553
- position: absolute;
68554
- width: 1px;
68555
- height: 1px;
68556
- padding: 0;
68557
- margin: -1px;
68558
- overflow: hidden;
68559
- clip: rect(0, 0, 0, 0);
68560
- white-space: nowrap;
68561
- border-width: 0;
68562
- }
68563
-
68564
- /* Stack utility */
68565
- :where(.theme-scope)
68566
- :where([data-block='event-registration'], [data-block='course-registration'])
68567
- .er-whole-series-stack {
68568
- display: flex;
68569
- flex-direction: column;
68570
- }
68571
-
68572
- :where(.theme-scope)
68573
- :where([data-block='event-registration'], [data-block='course-registration'])
68574
- .er-whole-series-stack--gap-sm {
68575
- gap: 0.5rem;
68576
- }
68577
-
68578
- :where(.theme-scope)
68579
- :where([data-block='event-registration'], [data-block='course-registration'])
68580
- .er-whole-series-stack--gap-md {
68581
- gap: 1rem;
68582
- }
68583
-
68584
- :where(.theme-scope)
68585
- :where([data-block='event-registration'], [data-block='course-registration'])
68586
- .er-whole-series-stack--gap-lg {
68587
- gap: 1.5rem;
68588
- }
68589
-
68590
- /* =============================================================================
68591
- * Block: Newsletter Signup
68592
- * =============================================================================
68593
- */
68594
-
68595
- /* Newsletter copy styling */
68596
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
68597
- font-size: 1.5rem;
68598
- font-weight: 600;
68599
- }
68600
-
68601
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
68602
- font-size: 1rem;
68603
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68604
- opacity: 0.85;
68605
- }
68606
-
68607
- /* Newsletter form container */
68608
- :where(.theme-scope) .newsletter-form {
68609
- width: 100%;
68610
- max-width: 32rem;
68611
- margin-left: auto;
68612
- margin-right: auto;
68613
- }
68614
-
68615
- /* Newsletter form fields container */
68616
- :where(.theme-scope) .newsletter-form-fields {
68617
- display: flex;
68618
- flex-direction: column;
68619
- gap: var(--rb-gap-sm, 0.75rem);
68620
- }
68621
-
68622
- /* Individual field styling */
68623
- :where(.theme-scope) .newsletter-field {
68624
- display: flex;
68625
- flex-direction: column;
68626
- gap: 0.25rem;
68627
- }
68628
-
68629
- /* Required indicator */
68630
- :where(.theme-scope) .newsletter-required {
68631
- color: rgb(var(--tb-primary));
68632
- margin-left: 0.125rem;
68633
- }
68634
-
68635
- /* Submit button container */
68636
- :where(.theme-scope) .newsletter-submit {
68637
- margin-top: 0.5rem;
68638
- }
68639
-
68640
- /* ALTCHA widget container */
68641
- :where(.theme-scope) .newsletter-altcha {
68642
- margin-top: 0.75rem;
68643
- display: flex;
68644
- justify-content: center;
68645
- }
68646
-
68647
- /* Privacy note */
68648
- :where(.theme-scope) .newsletter-privacy-note {
68649
- margin-top: 0.75rem;
68650
- font-size: 1rem;
68651
- line-height: 1.6;
68652
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68653
- text-align: center;
68654
- }
68655
-
68656
- /* =============================================================================
68657
- * Inline Variant - Horizontal layout
68658
- * =============================================================================
68659
- */
68660
-
68661
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
68662
- flex-direction: row;
68663
- align-items: flex-end;
68664
- flex-wrap: wrap;
68665
- gap: var(--rb-gap-sm, 0.75rem);
68666
- }
68667
-
68668
- :where(.theme-scope) .newsletter-inline .newsletter-field {
68669
- flex: 1 1 auto;
68670
- min-width: 10rem;
68671
- }
68672
-
68673
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
68674
- margin-top: 0;
68675
- flex-shrink: 0;
68676
- }
68677
-
68678
- /* Mobile fallback for inline variant */
68679
- @container rb-site (max-width: 640px) {
68680
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68681
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
68682
- flex-direction: column;
68683
- }
68684
-
68685
- :where(.theme-scope) .newsletter-inline .newsletter-field {
68686
- min-width: 100%;
68687
- }
68688
- }
68689
- }
68690
-
68691
- /* =============================================================================
68692
- * Editorial Split Variant
68693
- * =============================================================================
68694
- */
68695
-
68696
- :where(.theme-scope) .newsletter-editorial-split {
68697
- display: grid;
68698
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
68699
- gap: clamp(2.5rem, 7vw, 7rem);
68700
- align-items: center;
68701
- text-align: left;
68702
- }
68703
-
68704
- :where(.theme-scope) .newsletter-editorial-split-copy {
68705
- display: flex;
68706
- flex-direction: column;
68707
- gap: var(--rb-gap-sm, 0.75rem);
68708
- }
68709
-
68710
- :where(.theme-scope) .newsletter-editorial-split-form {
68711
- min-width: 0;
68712
- }
68713
-
68714
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
68715
- max-width: none;
68716
- margin-inline: 0;
68717
- }
68718
-
68719
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
68720
- font-size: clamp(2rem, 4vw, 3.5rem);
68721
- font-weight: 500;
68722
- }
68723
-
68724
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
68725
- text-align: left;
68726
- }
68727
-
68728
- @container rb-site (max-width: 767px) {
68729
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68730
- :where(.theme-scope) .newsletter-editorial-split {
68731
- grid-template-columns: minmax(0, 1fr);
68732
- gap: 2rem;
68733
- }
68734
- }
68735
- }
68736
-
68737
- /* =============================================================================
68738
- * Success State
68739
- * =============================================================================
68740
- */
68741
-
68742
- :where(.theme-scope) .newsletter-success {
68743
- text-align: center;
68744
- }
68745
-
68746
- :where(.theme-scope) .newsletter-success .fb-success {
68747
- padding: 1rem 1.5rem;
68748
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
68749
- border-radius: var(--radius-md, 0.5rem);
68750
- color: rgb(var(--tb-text));
68751
- }
68752
-
68753
- /* =============================================================================
68754
- * Block: Contact + Newsletter
68755
- * =============================================================================
68756
- */
68757
-
68758
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
68759
- display: grid;
68760
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
68761
- gap: clamp(2.5rem, 6vw, 4rem);
68762
- align-items: start;
68763
- }
68764
-
68765
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
68766
- min-width: 0;
68767
- }
68768
-
68769
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
68770
- margin-bottom: 1.5rem;
68771
- }
68772
-
68773
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
68774
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
68775
- margin: 0 0 0.75rem;
68776
- }
68777
-
68778
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
68779
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
68780
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68781
- }
68782
-
68783
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
68784
- display: flex;
68785
- flex-direction: column;
68786
- align-items: flex-start;
68787
- }
68788
-
68789
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
68790
- max-width: none;
68791
- margin-left: 0;
68792
- margin-right: 0;
68793
- }
68794
-
68795
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
68796
- text-align: left;
68797
- }
68798
-
68799
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
68800
- display: flex;
68801
- flex-direction: column;
68802
- gap: 1rem;
68803
- }
68804
-
68805
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
68806
- display: grid;
68807
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
68808
- gap: 1rem;
68809
- }
68810
-
68811
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
68812
- display: flex;
68813
- flex-direction: column;
68814
- gap: 0.25rem;
68815
- }
68816
-
68817
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
68818
- display: flex;
68819
- flex-direction: column;
68820
- gap: 0.5rem;
68821
- border: none;
68822
- padding: 0;
68823
- margin: 0;
68824
- }
68825
-
68826
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
68827
- display: flex;
68828
- align-items: center;
68829
- gap: 0.5rem;
68830
- }
68831
-
68832
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
68833
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
68834
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68835
- border-radius: var(--rb-block-radius);
68836
- padding: 1rem;
68837
- font-size: 0.875rem;
68838
- }
68839
-
68840
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
68841
- background-color: var(--fb-success-bg);
68842
- color: var(--fb-success-text);
68843
- border: 1px solid var(--fb-success-border);
68844
- }
68845
-
68846
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
68847
- background-color: var(--fb-error-bg);
68848
- color: var(--fb-error-text);
68849
- border: 1px solid var(--fb-error-border);
68850
- }
68851
-
68852
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68853
- background-color: var(--fb-empty-bg);
68854
- color: var(--fb-empty-text);
68855
- border: 1px dashed var(--fb-empty-border);
68856
- text-align: center;
68857
- }
68858
-
68859
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
68860
- margin-top: 0.5rem;
68861
- }
68862
-
68863
- /* =============================================================================
68864
- * Block: Team Members
68865
- * =============================================================================
68866
- *
68867
- * Site/theme authors sometimes need different thumbnail shapes/sizes without
68868
- * changing global fragment defaults. We expose these controls on the block and
68869
- * style them via data attributes on the \`.rb-team-members\` wrapper.
68870
- */
68871
-
68872
- /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
68873
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
68874
- text-align: left;
68875
- }
68876
-
68877
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
68878
- align-items: flex-start;
68879
- text-align: left;
68880
- }
68881
-
68882
- @container rb-site (min-width: 1024px) {
68883
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68884
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
68885
- width: 75%;
68886
- margin-left: 0;
68887
- margin-right: auto;
68888
- }
68889
- }
68890
- }
68891
-
68892
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
68893
- display: block;
68894
- width: 100%;
68895
- height: auto;
68896
- }
68897
-
68898
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
68899
- font-weight: 600;
68900
- }
68901
-
68902
- /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
68903
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
68904
- --rb-team-thumb-max: 11.25rem; /* ~180px default */
68905
- --rb-team-image-basis: 33.333%;
68906
- }
68907
-
68908
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
68909
- --rb-team-thumb-max: 8.75rem; /* ~140px */
68910
- --rb-team-image-basis: 25%;
68911
- }
68912
-
68913
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
68914
- --rb-team-thumb-max: 11.25rem; /* ~180px */
68915
- --rb-team-image-basis: 33.333%;
68916
- }
68917
-
68918
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
68919
- --rb-team-thumb-max: 13.75rem; /* ~220px */
68920
- --rb-team-image-basis: 40%;
68921
- }
68922
-
68923
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
68924
- --rb-team-thumb-max: 17.5rem; /* ~280px */
68925
- --rb-team-image-basis: 50%;
68926
- }
68927
-
68928
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
68929
- --rb-team-thumb-max: 22.5rem; /* ~360px */
68930
- --rb-team-image-basis: 66.667%;
68931
- }
68932
-
68933
- /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
68934
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo-wrap {
68935
- width: 100%;
68936
- overflow: hidden;
68937
- }
68938
-
68939
- /* In grid mode, cap thumbnail width so headshots don't dominate the card. */
68940
- :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-member-photo-wrap) {
68941
- max-width: var(--rb-team-thumb-max);
68942
- }
68943
-
68944
- :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-members[data-layout-align="center"]) :where(.rb-team-member-photo-wrap) {
68945
- margin-left: auto;
68946
- margin-right: auto;
66682
+ :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-members[data-layout-align="center"]) :where(.rb-team-member-photo-wrap) {
66683
+ margin-left: auto;
66684
+ margin-right: auto;
68947
66685
  }
68948
66686
 
68949
66687
  /* Stack variant: always left-aligned, regardless of the block alignment field. */
@@ -73945,69 +71683,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
73945
71683
  }
73946
71684
  });
73947
71685
  //#endregion
73948
- //#region ../api/src/courseEndpointDefinitions.ts
73949
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
73950
- listCourses: {
73951
- path: "/sites/{siteId}/bookings/courses",
73952
- method: "GET",
73953
- auth: "user",
73954
- responseKind: "json"
73955
- },
73956
- exportCoursesCsv: {
73957
- path: "/sites/{siteId}/bookings/courses/export.csv",
73958
- method: "GET",
73959
- tags: [
73960
- "site-{siteId}",
73961
- "bookings",
73962
- "courses-{siteId}"
73963
- ],
73964
- errors: [],
73965
- auth: "user",
73966
- responseKind: "blob"
73967
- },
73968
- createCourse: {
73969
- path: "/sites/{siteId}/bookings/courses",
73970
- method: "POST",
73971
- auth: "user",
73972
- responseKind: "json",
73973
- errors: [
73974
- "validation:invalid_input",
73975
- "resource:not_found",
73976
- "resource:already_exists",
73977
- "resource:conflict",
73978
- "server:internal_error"
73979
- ]
73980
- },
73981
- getCourse: {
73982
- path: "/sites/{siteId}/bookings/courses/{courseId}",
73983
- method: "GET",
73984
- auth: "user",
73985
- responseKind: "json"
73986
- },
73987
- updateCourse: {
73988
- path: "/sites/{siteId}/bookings/courses/{courseId}",
73989
- method: "PATCH",
73990
- auth: "user",
73991
- responseKind: "json",
73992
- errors: [
73993
- "validation:invalid_input",
73994
- "resource:not_found",
73995
- "resource:conflict",
73996
- "server:internal_error"
73997
- ]
73998
- },
73999
- deleteCourse: {
74000
- path: "/sites/{siteId}/bookings/courses/{courseId}",
74001
- method: "DELETE",
74002
- auth: "user",
74003
- responseKind: "json",
74004
- errors: [
74005
- "validation:invalid_input",
74006
- "resource:not_found",
74007
- "resource:conflict",
74008
- "server:internal_error"
74009
- ]
74010
- },
71686
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
71687
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74011
71688
  deleteEventOffering: {
74012
71689
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
74013
71690
  method: "DELETE",
@@ -74020,20 +71697,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74020
71697
  "server:internal_error"
74021
71698
  ]
74022
71699
  },
74023
- duplicateCourse: {
74024
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
74025
- method: "POST",
74026
- auth: "user",
74027
- responseKind: "json",
74028
- errors: [
74029
- "validation:invalid_input",
74030
- "resource:not_found",
74031
- "resource:already_exists",
74032
- "server:internal_error"
74033
- ]
74034
- },
74035
- changeCourseContentOwnership: {
74036
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
71700
+ changeEventSeriesContentOwnership: {
71701
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
74037
71702
  method: "POST",
74038
71703
  auth: "user",
74039
71704
  responseKind: "json",
@@ -74044,8 +71709,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74044
71709
  "server:internal_error"
74045
71710
  ]
74046
71711
  },
74047
- addCourseEnrollment: {
74048
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
71712
+ addEventSeriesRegistration: {
71713
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
74049
71714
  method: "POST",
74050
71715
  auth: "user",
74051
71716
  responseKind: "json",
@@ -74056,33 +71721,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74056
71721
  "server:internal_error"
74057
71722
  ]
74058
71723
  },
74059
- listCourseEnrollments: {
74060
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
71724
+ listEventSeriesRegistrations: {
71725
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
74061
71726
  method: "GET",
74062
71727
  auth: "user",
74063
71728
  responseKind: "json"
74064
71729
  },
74065
- exportCourseEnrollmentsCsv: {
74066
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
71730
+ exportEventSeriesRegistrationsCsv: {
71731
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
74067
71732
  method: "GET",
74068
71733
  auth: "user",
74069
71734
  errors: [],
74070
71735
  responseKind: "blob"
74071
71736
  },
74072
- exportCourseWaitlistCsv: {
74073
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
74074
- method: "GET",
74075
- tags: [
74076
- "site-{siteId}",
74077
- "bookings",
74078
- "courses-{courseId}"
74079
- ],
74080
- auth: "user",
74081
- responseKind: "blob",
74082
- errors: []
74083
- },
74084
- updateCourseEnrollment: {
74085
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
71737
+ updateEventSeriesRegistration: {
71738
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
74086
71739
  method: "PATCH",
74087
71740
  auth: "user",
74088
71741
  responseKind: "json",
@@ -74470,71 +72123,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74470
72123
  errors: ["resource:not_found", "server:internal_error"],
74471
72124
  auth: "public",
74472
72125
  responseKind: "json"
74473
- },
74474
- registerForWholeSeries: {
74475
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
74476
- method: "POST",
74477
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
74478
- errors: [
74479
- "auth:unauthenticated",
74480
- "auth:forbidden",
74481
- "validation:invalid_input",
74482
- "resource:not_found",
74483
- "resource:conflict",
74484
- "resource:already_exists",
74485
- "server:internal_error"
74486
- ],
74487
- auth: "public",
74488
- responseKind: "json"
74489
- },
74490
- checkWholeSeriesEligibility: {
74491
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
74492
- method: "POST",
74493
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
74494
- errors: [
74495
- "auth:unauthenticated",
74496
- "resource:not_found",
74497
- "resource:conflict",
74498
- "server:internal_error"
74499
- ],
74500
- auth: "public",
74501
- responseKind: "json"
74502
- },
74503
- createWholeSeriesCheckout: {
74504
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
72126
+ }
72127
+ });
72128
+ //#endregion
72129
+ //#region ../api/src/publicEventEndpointDefinitions.ts
72130
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72131
+ getPublicEventRegistrationOptions: {
72132
+ path: "/public/sites/{siteId}/events/registration-options",
74505
72133
  method: "POST",
74506
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
72134
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
74507
72135
  auth: "public",
74508
72136
  responseKind: "json",
74509
72137
  errors: [
74510
- "auth:unauthenticated",
74511
72138
  "validation:invalid_input",
74512
72139
  "resource:not_found",
74513
72140
  "resource:conflict",
74514
72141
  "server:internal_error"
74515
72142
  ]
74516
72143
  },
74517
- getWholeSeriesRegistrationStatus: {
74518
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
72144
+ resolveEventSubroute: {
72145
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
74519
72146
  method: "GET",
74520
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
74521
- errors: ["resource:not_found", "server:internal_error"],
72147
+ revalidate: 60,
72148
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
74522
72149
  auth: "public",
74523
- responseKind: "json"
72150
+ responseKind: "json",
72151
+ errors: []
74524
72152
  }
74525
72153
  });
74526
72154
  //#endregion
74527
- //#region ../api/src/publicEventEndpointDefinitions.ts
74528
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
74529
- path: "/public/sites/{siteId}/events/subroutes/resolve",
74530
- method: "GET",
74531
- revalidate: 60,
74532
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
74533
- auth: "public",
74534
- responseKind: "json",
74535
- errors: []
74536
- } });
74537
- //#endregion
74538
72155
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
74539
72156
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74540
72157
  listSiteApiKeys: {
@@ -74902,7 +72519,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
74902
72519
  }), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
74903
72520
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
74904
72521
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
74905
- ...COURSE_ENDPOINT_DEFINITIONS
72522
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
74906
72523
  }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
74907
72524
  z$1.object({ refreshToken: z$1.string().min(1).max(4096) }).strict();
74908
72525
  z$1.object({
@@ -76048,6 +73665,68 @@ function stableSerialize(value) {
76048
73665
  return JSON.stringify(value);
76049
73666
  }
76050
73667
  //#endregion
73668
+ //#region ../api/src/bookingPaymentTermSchemas.ts
73669
+ const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
73670
+ const bookingInstalmentPlanSchema = z$1.discriminatedUnion("kind", [
73671
+ z$1.object({
73672
+ kind: z$1.literal("deposit_plus_one_remainder"),
73673
+ depositAmountCents: z$1.number().int().nonnegative(),
73674
+ depositRefundability: bookingDepositRefundPolicySchema,
73675
+ remainderDueCount: z$1.number().int().positive(),
73676
+ intervalUnit: z$1.enum([
73677
+ "day",
73678
+ "week",
73679
+ "month"
73680
+ ])
73681
+ }),
73682
+ z$1.object({
73683
+ kind: z$1.literal("deposit_plus_scheduled_instalments"),
73684
+ depositAmountCents: z$1.number().int().nonnegative(),
73685
+ depositRefundability: bookingDepositRefundPolicySchema,
73686
+ instalmentCount: z$1.number().int().positive(),
73687
+ intervalCount: z$1.number().int().positive(),
73688
+ intervalUnit: z$1.enum([
73689
+ "day",
73690
+ "week",
73691
+ "month"
73692
+ ])
73693
+ }),
73694
+ z$1.object({
73695
+ kind: z$1.literal("equal_scheduled_instalments"),
73696
+ instalmentCount: z$1.number().int().positive(),
73697
+ intervalCount: z$1.number().int().positive(),
73698
+ intervalUnit: z$1.enum([
73699
+ "day",
73700
+ "week",
73701
+ "month"
73702
+ ])
73703
+ })
73704
+ ]);
73705
+ const bookingFlexibleBalanceDueDateRuleSchema = z$1.discriminatedUnion("kind", [z$1.object({
73706
+ kind: z$1.literal("relative_to_start_date"),
73707
+ daysBeforeStart: z$1.number().int().positive()
73708
+ }), z$1.object({
73709
+ kind: z$1.literal("fixed_calendar_date"),
73710
+ dueAt: z$1.string().datetime()
73711
+ })]);
73712
+ const bookingFlexibleBalanceConfigSchema = z$1.object({
73713
+ upfrontAmountCents: z$1.number().int().nonnegative(),
73714
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
73715
+ depositRefundability: bookingDepositRefundPolicySchema
73716
+ });
73717
+ z$1.discriminatedUnion("kind", [
73718
+ z$1.object({ kind: z$1.literal("upfront") }),
73719
+ z$1.object({ kind: z$1.literal("deferred_manual") }),
73720
+ z$1.object({
73721
+ kind: z$1.literal("instalment_plan"),
73722
+ plan: bookingInstalmentPlanSchema
73723
+ }),
73724
+ z$1.object({
73725
+ kind: z$1.literal("flexible_balance"),
73726
+ config: bookingFlexibleBalanceConfigSchema
73727
+ })
73728
+ ]);
73729
+ //#endregion
76051
73730
  //#region ../api/src/navigationMenuValidation.ts
76052
73731
  function hasChildren(item) {
76053
73732
  return Array.isArray(item.children) && item.children.length > 0;
@@ -77144,40 +74823,6 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
77144
74823
  plural: "Events"
77145
74824
  }
77146
74825
  },
77147
- course: {
77148
- version: 1,
77149
- fields: [
77150
- {
77151
- id: "summary",
77152
- type: "textarea",
77153
- label: "Summary",
77154
- description: "Short teaser shown in listings.",
77155
- rows: 3
77156
- },
77157
- {
77158
- id: "image",
77159
- type: "media",
77160
- label: "Listing image",
77161
- description: "Optional image used for course cards and previews."
77162
- },
77163
- {
77164
- id: "body",
77165
- type: "richText",
77166
- label: "Details",
77167
- description: "Full course details and curriculum."
77168
- }
77169
- ],
77170
- routing: {
77171
- enabled: true,
77172
- pattern: "/courses/{slug}",
77173
- slugField: "slug",
77174
- prefix: "/courses/"
77175
- },
77176
- labels: {
77177
- singular: "Course",
77178
- plural: "Courses"
77179
- }
77180
- },
77181
74826
  "team-member": {
77182
74827
  version: 1,
77183
74828
  fields: [
@@ -77377,7 +75022,7 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
77377
75022
  function deriveFieldIdSet(schema) {
77378
75023
  return new Set(schema.fields.map((f) => f.id));
77379
75024
  }
77380
- deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.post), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.event), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.course), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["team-member"]), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.product), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.testimonial), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.page), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["product-category"]);
75025
+ deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.post), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.event), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["team-member"]), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.product), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.testimonial), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.page), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["product-category"]);
77381
75026
  //#endregion
77382
75027
  //#region ../field-primitives/src/bindings/index.ts
77383
75028
  const BINDING_TRANSFORMS$1 = {
@@ -77429,7 +75074,6 @@ const SYSTEM_ENTRY_SLOT_BLOCK_KIND = "system.entry-slot";
77429
75074
  //#region ../content-model/src/templates/defaults.ts
77430
75075
  const POST_EXCERPT_FALLBACK = fallbackBinding$1(fieldBinding$1("excerpt"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
77431
75076
  const EVENT_SUBHEADLINE_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
77432
- const COURSE_SUMMARY_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
77433
75077
  const ENTRY_TITLE_INLINE_TEXT = transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.TEXT_INLINE_TEXT, { input: metaBinding$1("title") });
77434
75078
  const POST_BODY_TEXT_BINDINGS = {
77435
75079
  body: fieldBinding$1("body"),
@@ -77544,7 +75188,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
77544
75188
  showVenue: true,
77545
75189
  showCapacity: true,
77546
75190
  successMessage: "Thank you for registering! Check your email for confirmation details.",
77547
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
77548
75191
  buttonText: "Complete Registration",
77549
75192
  buttonVariant: "primary"
77550
75193
  },
@@ -77555,64 +75198,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
77555
75198
  }
77556
75199
  ]
77557
75200
  },
77558
- course: {
77559
- templateKey: "default",
77560
- name: "Course detail",
77561
- description: "Standard landing page for multi-session courses.",
77562
- metadata: {},
77563
- blocks: [
77564
- {
77565
- blockKind: "block.hero",
77566
- scope: "entry",
77567
- bindings: {
77568
- eyebrow: literalBinding$1("Course"),
77569
- headline: metaBinding$1("title"),
77570
- headlineInline: ENTRY_TITLE_INLINE_TEXT,
77571
- subheadline: COURSE_SUMMARY_FALLBACK
77572
- }
77573
- },
77574
- {
77575
- blockKind: "block.course-details",
77576
- scope: "entry",
77577
- content: {
77578
- heading: "Course details",
77579
- showTitle: false,
77580
- showDescription: false,
77581
- showSessions: true,
77582
- sessionsLimit: "10",
77583
- showVenue: true,
77584
- showPrice: true,
77585
- showCapacity: true,
77586
- showEnrollmentStatus: true,
77587
- showMembershipNote: true
77588
- }
77589
- },
77590
- {
77591
- blockKind: SYSTEM_ENTRY_SLOT_BLOCK_KIND,
77592
- scope: "template",
77593
- content: {
77594
- slotKey: "main",
77595
- label: "Page content"
77596
- }
77597
- },
77598
- {
77599
- blockKind: "block.course-registration",
77600
- scope: "entry",
77601
- content: {
77602
- heading: "Enroll in this course",
77603
- showSessions: true,
77604
- showPrice: true,
77605
- showCapacity: true,
77606
- showVenue: true,
77607
- successMessage: "You're enrolled! Check your email for confirmation and session details.",
77608
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
77609
- membershipMessage: "Enrolled using your membership! Check your email for session details.",
77610
- buttonText: "Complete Enrollment",
77611
- buttonVariant: "primary"
77612
- }
77613
- }
77614
- ]
77615
- },
77616
75201
  "team-member": {
77617
75202
  templateKey: "default",
77618
75203
  name: "Team member profile",