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