@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
@@ -1343,69 +1343,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1343
1343
  }
1344
1344
  });
1345
1345
  //#endregion
1346
- //#region ../api/src/courseEndpointDefinitions.ts
1347
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1348
- listCourses: {
1349
- path: "/sites/{siteId}/bookings/courses",
1350
- method: "GET",
1351
- auth: "user",
1352
- responseKind: "json"
1353
- },
1354
- exportCoursesCsv: {
1355
- path: "/sites/{siteId}/bookings/courses/export.csv",
1356
- method: "GET",
1357
- tags: [
1358
- "site-{siteId}",
1359
- "bookings",
1360
- "courses-{siteId}"
1361
- ],
1362
- errors: [],
1363
- auth: "user",
1364
- responseKind: "blob"
1365
- },
1366
- createCourse: {
1367
- path: "/sites/{siteId}/bookings/courses",
1368
- method: "POST",
1369
- auth: "user",
1370
- responseKind: "json",
1371
- errors: [
1372
- "validation:invalid_input",
1373
- "resource:not_found",
1374
- "resource:already_exists",
1375
- "resource:conflict",
1376
- "server:internal_error"
1377
- ]
1378
- },
1379
- getCourse: {
1380
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1381
- method: "GET",
1382
- auth: "user",
1383
- responseKind: "json"
1384
- },
1385
- updateCourse: {
1386
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1387
- method: "PATCH",
1388
- auth: "user",
1389
- responseKind: "json",
1390
- errors: [
1391
- "validation:invalid_input",
1392
- "resource:not_found",
1393
- "resource:conflict",
1394
- "server:internal_error"
1395
- ]
1396
- },
1397
- deleteCourse: {
1398
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1399
- method: "DELETE",
1400
- auth: "user",
1401
- responseKind: "json",
1402
- errors: [
1403
- "validation:invalid_input",
1404
- "resource:not_found",
1405
- "resource:conflict",
1406
- "server:internal_error"
1407
- ]
1408
- },
1346
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
1347
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1409
1348
  deleteEventOffering: {
1410
1349
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
1411
1350
  method: "DELETE",
@@ -1418,20 +1357,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1418
1357
  "server:internal_error"
1419
1358
  ]
1420
1359
  },
1421
- duplicateCourse: {
1422
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
1423
- method: "POST",
1424
- auth: "user",
1425
- responseKind: "json",
1426
- errors: [
1427
- "validation:invalid_input",
1428
- "resource:not_found",
1429
- "resource:already_exists",
1430
- "server:internal_error"
1431
- ]
1432
- },
1433
- changeCourseContentOwnership: {
1434
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
1360
+ changeEventSeriesContentOwnership: {
1361
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
1435
1362
  method: "POST",
1436
1363
  auth: "user",
1437
1364
  responseKind: "json",
@@ -1442,8 +1369,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1442
1369
  "server:internal_error"
1443
1370
  ]
1444
1371
  },
1445
- addCourseEnrollment: {
1446
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1372
+ addEventSeriesRegistration: {
1373
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
1447
1374
  method: "POST",
1448
1375
  auth: "user",
1449
1376
  responseKind: "json",
@@ -1454,33 +1381,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1454
1381
  "server:internal_error"
1455
1382
  ]
1456
1383
  },
1457
- listCourseEnrollments: {
1458
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1384
+ listEventSeriesRegistrations: {
1385
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
1459
1386
  method: "GET",
1460
1387
  auth: "user",
1461
1388
  responseKind: "json"
1462
1389
  },
1463
- exportCourseEnrollmentsCsv: {
1464
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1390
+ exportEventSeriesRegistrationsCsv: {
1391
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
1465
1392
  method: "GET",
1466
1393
  auth: "user",
1467
1394
  errors: [],
1468
1395
  responseKind: "blob"
1469
1396
  },
1470
- exportCourseWaitlistCsv: {
1471
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
1472
- method: "GET",
1473
- tags: [
1474
- "site-{siteId}",
1475
- "bookings",
1476
- "courses-{courseId}"
1477
- ],
1478
- auth: "user",
1479
- responseKind: "blob",
1480
- errors: []
1481
- },
1482
- updateCourseEnrollment: {
1483
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
1397
+ updateEventSeriesRegistration: {
1398
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
1484
1399
  method: "PATCH",
1485
1400
  auth: "user",
1486
1401
  responseKind: "json",
@@ -1868,71 +1783,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1868
1783
  errors: ["resource:not_found", "server:internal_error"],
1869
1784
  auth: "public",
1870
1785
  responseKind: "json"
1871
- },
1872
- registerForWholeSeries: {
1873
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
1874
- method: "POST",
1875
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1876
- errors: [
1877
- "auth:unauthenticated",
1878
- "auth:forbidden",
1879
- "validation:invalid_input",
1880
- "resource:not_found",
1881
- "resource:conflict",
1882
- "resource:already_exists",
1883
- "server:internal_error"
1884
- ],
1885
- auth: "public",
1886
- responseKind: "json"
1887
- },
1888
- checkWholeSeriesEligibility: {
1889
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
1890
- method: "POST",
1891
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1892
- errors: [
1893
- "auth:unauthenticated",
1894
- "resource:not_found",
1895
- "resource:conflict",
1896
- "server:internal_error"
1897
- ],
1898
- auth: "public",
1899
- responseKind: "json"
1900
- },
1901
- createWholeSeriesCheckout: {
1902
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
1786
+ }
1787
+ });
1788
+ //#endregion
1789
+ //#region ../api/src/publicEventEndpointDefinitions.ts
1790
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1791
+ getPublicEventRegistrationOptions: {
1792
+ path: "/public/sites/{siteId}/events/registration-options",
1903
1793
  method: "POST",
1904
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1794
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
1905
1795
  auth: "public",
1906
1796
  responseKind: "json",
1907
1797
  errors: [
1908
- "auth:unauthenticated",
1909
1798
  "validation:invalid_input",
1910
1799
  "resource:not_found",
1911
1800
  "resource:conflict",
1912
1801
  "server:internal_error"
1913
1802
  ]
1914
1803
  },
1915
- getWholeSeriesRegistrationStatus: {
1916
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
1804
+ resolveEventSubroute: {
1805
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
1917
1806
  method: "GET",
1918
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1919
- errors: ["resource:not_found", "server:internal_error"],
1807
+ revalidate: 60,
1808
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
1920
1809
  auth: "public",
1921
- responseKind: "json"
1810
+ responseKind: "json",
1811
+ errors: []
1922
1812
  }
1923
1813
  });
1924
1814
  //#endregion
1925
- //#region ../api/src/publicEventEndpointDefinitions.ts
1926
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
1927
- path: "/public/sites/{siteId}/events/subroutes/resolve",
1928
- method: "GET",
1929
- revalidate: 60,
1930
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
1931
- auth: "public",
1932
- responseKind: "json",
1933
- errors: []
1934
- } });
1935
- //#endregion
1936
1815
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
1937
1816
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1938
1817
  listSiteApiKeys: {
@@ -2829,7 +2708,7 @@ const API_ENDPOINTS$1 = {
2829
2708
  },
2830
2709
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
2831
2710
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
2832
- ...COURSE_ENDPOINT_DEFINITIONS,
2711
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS,
2833
2712
  getSite: {
2834
2713
  path: "/sites",
2835
2714
  method: "GET",
@@ -6143,13 +6022,13 @@ const API_ENDPOINTS$1 = {
6143
6022
  "server:internal_error"
6144
6023
  ]
6145
6024
  },
6146
- refundCourseEnrollment: {
6147
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}/refund",
6025
+ refundEventSeriesRegistration: {
6026
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}/refund",
6148
6027
  method: "POST",
6149
6028
  tags: [
6150
6029
  "site-{siteId}",
6151
- "course-{courseId}",
6152
- "course-enrollment-{enrollmentId}",
6030
+ "event-series-{seriesId}",
6031
+ "event-series-registration-{registrationId}",
6153
6032
  "bookings"
6154
6033
  ],
6155
6034
  auth: "user",
@@ -6172,13 +6051,13 @@ const API_ENDPOINTS$1 = {
6172
6051
  auth: "user",
6173
6052
  responseKind: "json"
6174
6053
  },
6175
- listCourseEnrollmentRefunds: {
6176
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}/refunds",
6054
+ listEventSeriesRegistrationRefunds: {
6055
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}/refunds",
6177
6056
  method: "GET",
6178
6057
  tags: [
6179
6058
  "site-{siteId}",
6180
- "course-{courseId}",
6181
- "course-enrollment-{enrollmentId}",
6059
+ "event-series-{seriesId}",
6060
+ "event-series-registration-{registrationId}",
6182
6061
  "bookings"
6183
6062
  ],
6184
6063
  auth: "user",
@@ -7867,14 +7746,14 @@ const API_ENDPOINTS$1 = {
7867
7746
  errors: ["server:internal_error"]
7868
7747
  },
7869
7748
  portalGetWholeSeriesBookingQuestions: {
7870
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
7749
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions",
7871
7750
  method: "GET",
7872
7751
  auth: "public",
7873
7752
  responseKind: "json",
7874
7753
  errors: ["resource:not_found", "server:internal_error"]
7875
7754
  },
7876
7755
  portalUpdateWholeSeriesBookingQuestions: {
7877
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
7756
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions",
7878
7757
  method: "PUT",
7879
7758
  auth: "public",
7880
7759
  responseKind: "json",
@@ -7885,7 +7764,7 @@ const API_ENDPOINTS$1 = {
7885
7764
  ]
7886
7765
  },
7887
7766
  portalCreateWholeSeriesBookingQuestionsUploadUrl: {
7888
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload-url",
7767
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions/upload-url",
7889
7768
  method: "POST",
7890
7769
  auth: "public",
7891
7770
  responseKind: "json",
@@ -7896,7 +7775,7 @@ const API_ENDPOINTS$1 = {
7896
7775
  ]
7897
7776
  },
7898
7777
  portalFinalizeWholeSeriesBookingQuestionsUpload: {
7899
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload",
7778
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions/upload",
7900
7779
  method: "POST",
7901
7780
  auth: "public",
7902
7781
  responseKind: "json",
@@ -7907,7 +7786,7 @@ const API_ENDPOINTS$1 = {
7907
7786
  ]
7908
7787
  },
7909
7788
  portalCancelWholeSeriesRegistration: {
7910
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/cancel",
7789
+ path: "/portal/dated-offerings/whole-series/{registrationId}/cancel",
7911
7790
  method: "POST",
7912
7791
  auth: "public",
7913
7792
  responseKind: "json",
@@ -8401,7 +8280,7 @@ function publicEventPricingType(pricing) {
8401
8280
  case "single_paid":
8402
8281
  case "ticket_types":
8403
8282
  case "sliding_scale":
8404
- case "course": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
8283
+ case "whole_series": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
8405
8284
  case "external": return "external";
8406
8285
  }
8407
8286
  }
@@ -8412,14 +8291,14 @@ function publicEventPricingCurrency(pricing) {
8412
8291
  case "single_paid":
8413
8292
  case "ticket_types":
8414
8293
  case "sliding_scale": return pricing.currency;
8415
- case "course": return pricing.display.display.currency;
8294
+ case "whole_series": return pricing.display.display.currency;
8416
8295
  case "external": return null;
8417
8296
  }
8418
8297
  }
8419
8298
  function isFreePublicEventPriceDisplay(display) {
8420
8299
  switch (display.kind) {
8421
8300
  case "free": return true;
8422
- case "course": return display.display.kind === "free";
8301
+ case "whole_series": return display.display.kind === "free";
8423
8302
  case "exact":
8424
8303
  case "from":
8425
8304
  case "range":
@@ -8455,7 +8334,7 @@ function formatBookingPriceDisplay(display, options = {}) {
8455
8334
  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)}`;
8456
8335
  case "unavailable": return "Pricing unavailable";
8457
8336
  case "external": return display.label;
8458
- case "course": return formatCoursePriceDisplayLabel(display.display, options);
8337
+ case "whole_series": return formatCoursePriceDisplayLabel(display.display, options);
8459
8338
  default: return assertNever$24(display);
8460
8339
  }
8461
8340
  }
@@ -23407,7 +23286,7 @@ defineBlockAppearancePreset({
23407
23286
  id: "schedule-details-brand-depth",
23408
23287
  target: "events",
23409
23288
  label: "Brand-depth schedule details",
23410
- blockKinds: ["block.event-details", "block.course-details"],
23289
+ blockKinds: ["block.event-details"],
23411
23290
  design: {
23412
23291
  sectionSurface: "brand-depth-band",
23413
23292
  contentFrame: plainFrame,
@@ -30024,7 +29903,6 @@ const productDetail = (props, children, ...mods) => el("product-detail", props,
30024
29903
  const cart = (props, children, ...mods) => el("cart", props, children, ...mods);
30025
29904
  const checkout = (props, children, ...mods) => el("checkout", props, children, ...mods);
30026
29905
  const gifting = (props, children, ...mods) => el("gifting", props, children, ...mods);
30027
- const courseRegistration = (props, children, ...mods) => el("course-registration", props, children, ...mods);
30028
29906
  function bind(from, options) {
30029
29907
  return (node) => ({
30030
29908
  ...node,
@@ -40116,12 +39994,12 @@ const weeklySlotAvailabilityBlockDefinition = {
40116
39994
  };
40117
39995
  //#endregion
40118
39996
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
40119
- const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
40120
- const bookingInstalmentPlanSchema = z$1.union([
39997
+ const bookingDepositRefundPolicySchema$1 = z$1.enum(["refundable", "non_refundable"]);
39998
+ const bookingInstalmentPlanSchema$1 = z$1.union([
40121
39999
  z$1.object({
40122
40000
  kind: z$1.literal("deposit_plus_one_remainder"),
40123
40001
  depositAmountCents: z$1.number().int().min(0),
40124
- depositRefundability: bookingDepositRefundPolicySchema,
40002
+ depositRefundability: bookingDepositRefundPolicySchema$1,
40125
40003
  remainderDueCount: z$1.number().int().positive(),
40126
40004
  intervalUnit: z$1.enum([
40127
40005
  "day",
@@ -40132,7 +40010,7 @@ const bookingInstalmentPlanSchema = z$1.union([
40132
40010
  z$1.object({
40133
40011
  kind: z$1.literal("deposit_plus_scheduled_instalments"),
40134
40012
  depositAmountCents: z$1.number().int().min(0),
40135
- depositRefundability: bookingDepositRefundPolicySchema,
40013
+ depositRefundability: bookingDepositRefundPolicySchema$1,
40136
40014
  instalmentCount: z$1.number().int().positive(),
40137
40015
  intervalCount: z$1.number().int().positive(),
40138
40016
  intervalUnit: z$1.enum([
@@ -40152,28 +40030,28 @@ const bookingInstalmentPlanSchema = z$1.union([
40152
40030
  ])
40153
40031
  })
40154
40032
  ]);
40155
- const bookingFlexibleBalanceDueDateRuleSchema = z$1.union([z$1.object({
40033
+ const bookingFlexibleBalanceDueDateRuleSchema$1 = z$1.union([z$1.object({
40156
40034
  kind: z$1.literal("relative_to_start_date"),
40157
40035
  daysBeforeStart: z$1.number().int().positive()
40158
40036
  }), z$1.object({
40159
40037
  kind: z$1.literal("fixed_calendar_date"),
40160
40038
  dueAt: z$1.string().datetime()
40161
40039
  })]);
40162
- const bookingFlexibleBalanceConfigSchema = z$1.object({
40040
+ const bookingFlexibleBalanceConfigSchema$1 = z$1.object({
40163
40041
  upfrontAmountCents: z$1.number().int().min(0),
40164
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
40165
- depositRefundability: bookingDepositRefundPolicySchema
40042
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
40043
+ depositRefundability: bookingDepositRefundPolicySchema$1
40166
40044
  });
40167
40045
  const blockBookingPaymentCollectionOptionSchema = z$1.union([
40168
40046
  z$1.object({ kind: z$1.literal("upfront") }),
40169
40047
  z$1.object({ kind: z$1.literal("deferred_manual") }),
40170
40048
  z$1.object({
40171
40049
  kind: z$1.literal("instalment_plan"),
40172
- plan: bookingInstalmentPlanSchema
40050
+ plan: bookingInstalmentPlanSchema$1
40173
40051
  }),
40174
40052
  z$1.object({
40175
40053
  kind: z$1.literal("flexible_balance"),
40176
- config: bookingFlexibleBalanceConfigSchema
40054
+ config: bookingFlexibleBalanceConfigSchema$1
40177
40055
  })
40178
40056
  ]);
40179
40057
  const blockBookingPaymentTermsSchema = z$1.object({ allowedOptions: z$1.array(blockBookingPaymentCollectionOptionSchema).min(1) });
@@ -40427,6 +40305,13 @@ const publicWholeSeriesOfferingSchema = z$1.object({
40427
40305
  title: z$1.string(),
40428
40306
  slug: z$1.string(),
40429
40307
  description: z$1.unknown().nullable(),
40308
+ deliveryMode: z$1.enum([
40309
+ "in_person",
40310
+ "online",
40311
+ "hybrid"
40312
+ ]),
40313
+ waitlistEnabled: z$1.boolean(),
40314
+ requireGuestDetails: z$1.boolean(),
40430
40315
  teamMembers: z$1.array(wholeSeriesTeamMemberSummarySchema).optional(),
40431
40316
  enrollmentOpen: z$1.boolean(),
40432
40317
  pricing: wholeSeriesPricingSchema,
@@ -40542,7 +40427,7 @@ const mixedPriceDisplaySchema = z$1.object({
40542
40427
  paidToAmount: z$1.number(),
40543
40428
  currency: z$1.string()
40544
40429
  });
40545
- const publicCoursePriceDisplaySchema = z$1.discriminatedUnion("kind", [
40430
+ const publicWholeSeriesPriceDisplaySchema = z$1.discriminatedUnion("kind", [
40546
40431
  freePriceDisplaySchema,
40547
40432
  exactPriceDisplaySchema,
40548
40433
  fromPriceDisplaySchema,
@@ -40560,8 +40445,8 @@ z$1.discriminatedUnion("kind", [
40560
40445
  label: z$1.string()
40561
40446
  }),
40562
40447
  z$1.object({
40563
- kind: z$1.literal("course"),
40564
- display: publicCoursePriceDisplaySchema
40448
+ kind: z$1.literal("whole_series"),
40449
+ display: publicWholeSeriesPriceDisplaySchema
40565
40450
  })
40566
40451
  ]);
40567
40452
  const publicEventTicketTypePriceDisplaySchema = z$1.union([
@@ -40663,10 +40548,10 @@ const publicEventPricingSchema = z$1.discriminatedUnion("kind", [
40663
40548
  })
40664
40549
  }),
40665
40550
  z$1.object({
40666
- kind: z$1.literal("course"),
40551
+ kind: z$1.literal("whole_series"),
40667
40552
  display: z$1.object({
40668
- kind: z$1.literal("course"),
40669
- display: publicCoursePriceDisplaySchema
40553
+ kind: z$1.literal("whole_series"),
40554
+ display: publicWholeSeriesPriceDisplaySchema
40670
40555
  })
40671
40556
  }),
40672
40557
  z$1.object({
@@ -41109,7 +40994,8 @@ function resolveEventRegistrationScope(context) {
41109
40994
  };
41110
40995
  return { kind: "unscoped" };
41111
40996
  }
41112
- function applyEventRegistrationScope(events, scope) {
40997
+ function resolveEventRegistrationScopedEvents(events, context) {
40998
+ const scope = resolveEventRegistrationScope(context);
41113
40999
  switch (scope.kind) {
41114
41000
  case "occurrenceSeries":
41115
41001
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -41121,9 +41007,6 @@ function applyEventRegistrationScope(events, scope) {
41121
41007
  case "unscoped": return [...events];
41122
41008
  }
41123
41009
  }
41124
- function resolveEventRegistrationScopedEvents(events, context) {
41125
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
41126
- }
41127
41010
  //#endregion
41128
41011
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
41129
41012
  function planEventRegistrationScope(input) {
@@ -41217,14 +41100,14 @@ function isRecord$22(value) {
41217
41100
  }
41218
41101
  function isPublicEventPricing(value) {
41219
41102
  if (!isRecord$22(value) || typeof value.kind !== "string") return false;
41220
- 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";
41103
+ 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";
41221
41104
  }
41222
41105
  function isPublicEventTicketType(value) {
41223
41106
  return isRecord$22(value) && typeof value.id === "string";
41224
41107
  }
41225
41108
  function readTicketTypePriceDisplay(value, currency) {
41226
41109
  const display = readLegacyPriceDisplay(value, currency);
41227
- return display.kind === "course" || display.kind === "external" ? {
41110
+ return display.kind === "whole_series" || display.kind === "external" ? {
41228
41111
  kind: "unavailable",
41229
41112
  currency
41230
41113
  } : display;
@@ -41282,11 +41165,11 @@ function readLegacyPriceDisplay(value, currency) {
41282
41165
  kind: "unavailable",
41283
41166
  currency: displayCurrency
41284
41167
  };
41285
- case "course": return isRecord$22(value.display) ? {
41286
- kind: "course",
41168
+ case "whole_series": return isRecord$22(value.display) ? {
41169
+ kind: "whole_series",
41287
41170
  display: readCoursePriceDisplay(value.display, displayCurrency)
41288
41171
  } : {
41289
- kind: "course",
41172
+ kind: "whole_series",
41290
41173
  display: {
41291
41174
  kind: "unavailable",
41292
41175
  currency: displayCurrency
@@ -41409,7 +41292,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
41409
41292
  //#endregion
41410
41293
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
41411
41294
  function eventMatchesOccurrenceId(event, occurrenceId) {
41412
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
41295
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
41413
41296
  }
41414
41297
  function findPreSelectedEvent(input) {
41415
41298
  const occurrenceContext = input.occurrenceContext;
@@ -41435,12 +41318,127 @@ function toRegistrationEvent(event) {
41435
41318
  return {
41436
41319
  ...event,
41437
41320
  pricing: resolveRuntimeEventPricing(event),
41438
- publicEventId: event.id,
41439
- registrationOccurrenceId: event.occurrenceId
41321
+ selectionId: event.id,
41322
+ registrationSubject: {
41323
+ kind: "occurrence",
41324
+ occurrenceId: event.occurrenceId
41325
+ }
41440
41326
  };
41441
41327
  }
41442
41328
  function toRegistrationEvents(events) {
41443
- return events.map(toRegistrationEvent);
41329
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
41330
+ }
41331
+ function toWholeSeriesTicketType(option) {
41332
+ return {
41333
+ ...option,
41334
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
41335
+ attendanceScope: option.attendanceScope ?? void 0,
41336
+ availability: {
41337
+ kind: "available",
41338
+ remainingCapacity: option.capacityLimit
41339
+ }
41340
+ };
41341
+ }
41342
+ function toWholeSeriesPricing(offering) {
41343
+ const resolved = resolveWholeSeriesPricingState(offering);
41344
+ switch (offering.pricing.pricingStrategy) {
41345
+ case "free": return {
41346
+ kind: "free_registration",
41347
+ currency: offering.currency,
41348
+ display: {
41349
+ kind: "free",
41350
+ currency: offering.currency
41351
+ }
41352
+ };
41353
+ case "single": {
41354
+ const amount = offering.pricing.singlePriceAmount ?? 0;
41355
+ return amount === 0 ? {
41356
+ kind: "free_registration",
41357
+ currency: offering.currency,
41358
+ display: {
41359
+ kind: "free",
41360
+ currency: offering.currency
41361
+ }
41362
+ } : {
41363
+ kind: "single_paid",
41364
+ amount,
41365
+ currency: offering.currency,
41366
+ display: {
41367
+ kind: "exact",
41368
+ amount,
41369
+ currency: offering.currency
41370
+ }
41371
+ };
41372
+ }
41373
+ case "tiered": return {
41374
+ kind: "ticket_types",
41375
+ currency: offering.currency,
41376
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
41377
+ display: resolved.display
41378
+ };
41379
+ case "sliding_scale": return {
41380
+ kind: "sliding_scale",
41381
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
41382
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
41383
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
41384
+ currency: offering.currency,
41385
+ display: {
41386
+ kind: "range",
41387
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
41388
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
41389
+ currency: offering.currency
41390
+ }
41391
+ };
41392
+ }
41393
+ }
41394
+ function toAttendanceModes(offering) {
41395
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
41396
+ mode,
41397
+ capacity: offering.enrollmentCapacity,
41398
+ registeredCount: offering.enrolledCount,
41399
+ availableSpots: offering.availableSpots,
41400
+ waitlistEnabled: offering.waitlistEnabled
41401
+ }));
41402
+ }
41403
+ function toWholeSeriesRegistrationEvent(offering) {
41404
+ const firstSession = offering.sessions[0];
41405
+ const lastSession = offering.sessions[offering.sessions.length - 1];
41406
+ return {
41407
+ selectionId: offering.eventSeriesId,
41408
+ registrationSubject: {
41409
+ kind: "wholeSeries",
41410
+ eventSeriesId: offering.eventSeriesId,
41411
+ sessions: offering.sessions
41412
+ },
41413
+ seriesId: offering.eventSeriesId,
41414
+ title: offering.title,
41415
+ startsAt: firstSession?.startsAt ?? "",
41416
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
41417
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
41418
+ kind: "closed",
41419
+ reason: "enrollment_closed"
41420
+ },
41421
+ deliveryMode: offering.deliveryMode,
41422
+ attendanceModes: toAttendanceModes(offering),
41423
+ capacity: offering.enrollmentCapacity,
41424
+ registeredCount: offering.enrolledCount,
41425
+ availableSpots: offering.availableSpots,
41426
+ waitlistEnabled: offering.waitlistEnabled,
41427
+ venue: offering.venue ? {
41428
+ ...offering.venue,
41429
+ location: null
41430
+ } : null,
41431
+ eventCategory: null,
41432
+ teamMembers: offering.teamMembers,
41433
+ status: offering.status,
41434
+ timeZone: firstSession?.timeZone ?? "UTC",
41435
+ pricing: toWholeSeriesPricing(offering),
41436
+ paymentTerms: offering.paymentTerms,
41437
+ consent: offering.consent,
41438
+ requireGuestDetails: offering.requireGuestDetails,
41439
+ acceptsPasses: false,
41440
+ acceptsMemberships: offering.acceptsMemberships
41441
+ };
41444
41442
  }
41445
41443
  //#endregion
41446
41444
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -41466,11 +41464,7 @@ const eventRegistrationHydrationSchemaShape = {
41466
41464
  maxTickets: z$1.string().optional(),
41467
41465
  showVenue: z$1.boolean().optional(),
41468
41466
  showCapacity: z$1.boolean().optional(),
41469
- showSessions: z$1.boolean().optional(),
41470
- showPrice: z$1.boolean().optional(),
41471
41467
  successMessage: z$1.string().optional(),
41472
- waitlistMessage: z$1.string().optional(),
41473
- membershipMessage: z$1.string().optional(),
41474
41468
  buttonVariant: registrationButtonVariantSchema.optional(),
41475
41469
  overlayEnabled: z$1.boolean().optional(),
41476
41470
  spamProtectionEnabled: z$1.boolean().optional(),
@@ -41540,6 +41534,15 @@ function resolveWholeSeriesOffering(source) {
41540
41534
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
41541
41535
  }
41542
41536
  function buildEventRegistrationShellStepLabels(source) {
41537
+ const selectedOffering = resolveWholeSeriesOffering(source);
41538
+ if (selectedOffering) {
41539
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
41540
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
41541
+ eligibility: null,
41542
+ selectedTicketType: null,
41543
+ event: selectedEvent
41544
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
41545
+ }
41543
41546
  const scopedEvents = scopeEventRegistrationEvents(source);
41544
41547
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
41545
41548
  const preSelectedEvent = findPreSelectedEvent({
@@ -41603,11 +41606,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
41603
41606
  maxTickets: source.maxTickets ?? void 0,
41604
41607
  showVenue: source.showVenue,
41605
41608
  showCapacity: source.showCapacity,
41606
- showSessions: source.showSessions,
41607
- showPrice: source.showPrice,
41608
41609
  successMessage: source.successMessage,
41609
- waitlistMessage: source.waitlistMessage,
41610
- membershipMessage: source.membershipMessage,
41611
41610
  buttonVariant: source.buttonVariant,
41612
41611
  overlayEnabled: source.overlayEnabled,
41613
41612
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -41737,24 +41736,6 @@ const eventRegistrationBlockDefinition = {
41737
41736
  defaultValue: true,
41738
41737
  ui: { intent: "display" }
41739
41738
  },
41740
- {
41741
- id: "showSessions",
41742
- type: "boolean",
41743
- label: "Show complete schedule",
41744
- description: "Display every session for whole-series registrations",
41745
- required: false,
41746
- defaultValue: true,
41747
- ui: { intent: "display" }
41748
- },
41749
- {
41750
- id: "showPrice",
41751
- type: "boolean",
41752
- label: "Show price",
41753
- description: "Display the whole-series price",
41754
- required: false,
41755
- defaultValue: true,
41756
- ui: { intent: "display" }
41757
- },
41758
41739
  {
41759
41740
  id: "successMessage",
41760
41741
  type: "text",
@@ -41765,26 +41746,6 @@ const eventRegistrationBlockDefinition = {
41765
41746
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
41766
41747
  maxLength: 500
41767
41748
  },
41768
- {
41769
- id: "waitlistMessage",
41770
- type: "text",
41771
- label: "Waitlist message",
41772
- description: "Message shown after joining a whole-series waitlist",
41773
- required: false,
41774
- multiline: true,
41775
- defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
41776
- maxLength: 500
41777
- },
41778
- {
41779
- id: "membershipMessage",
41780
- type: "text",
41781
- label: "Membership registration message",
41782
- description: "Message shown when a whole-series place is covered by membership",
41783
- required: false,
41784
- multiline: true,
41785
- defaultValue: "Registered using your membership. Check your email for session details.",
41786
- maxLength: 500
41787
- },
41788
41749
  {
41789
41750
  id: "buttonText",
41790
41751
  type: "text",
@@ -41816,11 +41777,7 @@ const eventRegistrationBlockDefinition = {
41816
41777
  } },
41817
41778
  showVenue: { $bind: { from: "content.showVenue" } },
41818
41779
  showCapacity: { $bind: { from: "content.showCapacity" } },
41819
- showSessions: { $bind: { from: "content.showSessions" } },
41820
- showPrice: { $bind: { from: "content.showPrice" } },
41821
41780
  successMessage: { $bind: { from: "content.successMessage" } },
41822
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
41823
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
41824
41781
  buttonText: { $bind: {
41825
41782
  from: "content.buttonText",
41826
41783
  fallback: "Complete Registration"
@@ -41937,267 +41894,6 @@ const eventRegistrationBlockDefinition = {
41937
41894
  }
41938
41895
  };
41939
41896
  //#endregion
41940
- //#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
41941
- const courseRegistrationHydrationSchemaShape = {
41942
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
41943
- courses: z$1.array(publicWholeSeriesOfferingSchema).nullable().optional(),
41944
- showSessions: z$1.boolean().optional(),
41945
- showPrice: z$1.boolean().optional(),
41946
- showCapacity: z$1.boolean().optional(),
41947
- showVenue: z$1.boolean().optional(),
41948
- successMessage: z$1.string().optional(),
41949
- waitlistMessage: z$1.string().optional(),
41950
- membershipMessage: z$1.string().optional(),
41951
- buttonVariant: registrationButtonVariantSchema.optional()
41952
- };
41953
- const courseRegistrationSourceSchema = z$1.object({
41954
- siteId: z$1.string().optional(),
41955
- apiBaseUrl: z$1.string().optional(),
41956
- portalToken: z$1.string().nullable().optional(),
41957
- ...courseRegistrationHydrationSchemaShape,
41958
- className: z$1.string().nullable().optional(),
41959
- buttonText: z$1.string().nullable().optional(),
41960
- stage: previewStageSchema.optional()
41961
- });
41962
- const courseRegistrationDisplaySchema = z$1.object({
41963
- kind: z$1.literal("course-registration"),
41964
- state: z$1.literal("shell"),
41965
- className: z$1.string().nullable(),
41966
- summaryButtonText: z$1.string()
41967
- });
41968
- const courseRegistrationHydrationSchema = z$1.object(courseRegistrationHydrationSchemaShape);
41969
- const courseRegistrationRenderSchema = z$1.object({
41970
- display: courseRegistrationDisplaySchema,
41971
- hydration: courseRegistrationHydrationSchema
41972
- });
41973
- z$1.object({
41974
- siteId: z$1.string().optional(),
41975
- apiBaseUrl: z$1.string().optional(),
41976
- portalToken: z$1.string().nullable().optional(),
41977
- stage: previewStageSchema.optional()
41978
- });
41979
- function buildCourseRegistrationDisplay(source) {
41980
- return {
41981
- kind: "course-registration",
41982
- state: "shell",
41983
- className: source.className ?? null,
41984
- summaryButtonText: source.buttonText?.trim() || "Sign up"
41985
- };
41986
- }
41987
- const courseRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
41988
- kind: "client-owned",
41989
- contracts: {
41990
- source: createZodCodec(courseRegistrationSourceSchema),
41991
- render: createZodCodec(courseRegistrationRenderSchema)
41992
- },
41993
- buildRender: (source) => ({
41994
- display: buildCourseRegistrationDisplay(source),
41995
- hydration: {
41996
- subject: source.subject ?? null,
41997
- courses: source.courses ?? null,
41998
- showSessions: source.showSessions,
41999
- showPrice: source.showPrice,
42000
- showCapacity: source.showCapacity,
42001
- showVenue: source.showVenue,
42002
- successMessage: source.successMessage,
42003
- waitlistMessage: source.waitlistMessage,
42004
- membershipMessage: source.membershipMessage,
42005
- buttonVariant: source.buttonVariant
42006
- }
42007
- })
42008
- });
42009
- function buildCourseRegistrationInteractiveIslandProps(props) {
42010
- return buildInteractiveIslandProps({
42011
- runtime: courseRegistrationBlockRuntime,
42012
- mode: "course-registration",
42013
- meta: {
42014
- siteId: props.siteId,
42015
- apiBaseUrl: props.apiBaseUrl,
42016
- portalToken: props.portalToken,
42017
- stage: props.stage
42018
- },
42019
- source: props
42020
- });
42021
- }
42022
- const courseRegistrationBlockDefinition = {
42023
- manifest: createBlockManifest({
42024
- id: "block.course-registration",
42025
- version: "1.0.0",
42026
- title: "Course Registration",
42027
- titleSource: "heading",
42028
- description: "Enrollment form for multi-session courses",
42029
- category: "interactive",
42030
- contentSource: { kind: "inline" },
42031
- tags: [
42032
- "courses",
42033
- "enrollment",
42034
- "booking",
42035
- "form",
42036
- "signup",
42037
- "education"
42038
- ],
42039
- icon: "GraduationCap",
42040
- styleTokens: {
42041
- background: "surface",
42042
- typography: "body",
42043
- spacing: "md"
42044
- },
42045
- behaviours: {
42046
- supportsThemeSwitching: true,
42047
- inlineEditing: false,
42048
- animation: false,
42049
- paletteHidden: false
42050
- },
42051
- additionalFields: [
42052
- {
42053
- id: "heading",
42054
- type: "text",
42055
- label: "Heading",
42056
- description: "Main heading for the registration form",
42057
- required: false,
42058
- multiline: false,
42059
- defaultValue: "Sign up"
42060
- },
42061
- {
42062
- id: "description",
42063
- type: "richText",
42064
- label: "Description",
42065
- description: "Optional introductory text",
42066
- required: false
42067
- },
42068
- {
42069
- id: "showSessions",
42070
- type: "boolean",
42071
- label: "Show sessions",
42072
- description: "Display the list of course sessions",
42073
- required: false,
42074
- defaultValue: true,
42075
- ui: { intent: "display" }
42076
- },
42077
- {
42078
- id: "showPrice",
42079
- type: "boolean",
42080
- label: "Show price",
42081
- description: "Display the course price",
42082
- required: false,
42083
- defaultValue: true,
42084
- ui: { intent: "display" }
42085
- },
42086
- {
42087
- id: "showCapacity",
42088
- type: "boolean",
42089
- label: "Show available spots",
42090
- description: "Display remaining enrollment capacity",
42091
- required: false,
42092
- defaultValue: true,
42093
- ui: { intent: "display" }
42094
- },
42095
- {
42096
- id: "showVenue",
42097
- type: "boolean",
42098
- label: "Show venue",
42099
- description: "Display venue information",
42100
- required: false,
42101
- defaultValue: true,
42102
- ui: { intent: "display" }
42103
- },
42104
- {
42105
- id: "successMessage",
42106
- type: "text",
42107
- label: "Success message",
42108
- description: "Message shown after successful enrollment",
42109
- required: false,
42110
- multiline: true,
42111
- defaultValue: "You're enrolled! Check your email for confirmation and session details.",
42112
- maxLength: 500
42113
- },
42114
- {
42115
- id: "waitlistMessage",
42116
- type: "text",
42117
- label: "Waitlist message",
42118
- description: "Message when added to waitlist",
42119
- required: false,
42120
- multiline: true,
42121
- defaultValue: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
42122
- maxLength: 500
42123
- },
42124
- {
42125
- id: "membershipMessage",
42126
- type: "text",
42127
- label: "Membership enrollment message",
42128
- description: "Message when enrolled using a membership",
42129
- required: false,
42130
- multiline: true,
42131
- defaultValue: "Enrolled using your membership! Check your email for session details.",
42132
- maxLength: 500
42133
- },
42134
- {
42135
- id: "buttonText",
42136
- type: "text",
42137
- label: "Submit button text",
42138
- description: "Text for the enrollment submit button",
42139
- required: false,
42140
- multiline: false,
42141
- defaultValue: "Sign up",
42142
- maxLength: 40
42143
- },
42144
- createButtonVariantField()
42145
- ],
42146
- layout: [styledSection({
42147
- baseClass: "",
42148
- spacing: "spacious",
42149
- children: sectionContainer([
42150
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
42151
- richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
42152
- courseRegistration(withApiBindings({
42153
- subject: { $bind: {
42154
- from: "$root.subject",
42155
- fallback: null
42156
- } },
42157
- portalToken: { $bind: {
42158
- from: "$root.portalToken",
42159
- fallback: null
42160
- } },
42161
- showSessions: { $bind: { from: "content.showSessions" } },
42162
- showPrice: { $bind: { from: "content.showPrice" } },
42163
- showCapacity: { $bind: { from: "content.showCapacity" } },
42164
- showVenue: { $bind: { from: "content.showVenue" } },
42165
- successMessage: { $bind: { from: "content.successMessage" } },
42166
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
42167
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
42168
- buttonText: { $bind: {
42169
- from: "content.buttonText",
42170
- fallback: "Sign up"
42171
- } },
42172
- buttonVariant: { $bind: {
42173
- from: "content.buttonVariant",
42174
- fallback: "primary"
42175
- } },
42176
- courses: { $bind: { from: "data.courses" } },
42177
- stage: { $bind: {
42178
- from: "$root.previewStage",
42179
- fallback: "published"
42180
- } }
42181
- }))
42182
- ], { gap: "lg" })
42183
- })]
42184
- }),
42185
- runtime: courseRegistrationBlockRuntime,
42186
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
42187
- dataLoaders: { courses: {
42188
- endpoint: "listPublicWholeSeriesOfferings",
42189
- params: {
42190
- siteId: { $bind: { from: "$root.siteId" } },
42191
- limit: "50",
42192
- stage: { $bind: {
42193
- from: "$root.previewStage",
42194
- fallback: "published"
42195
- } }
42196
- },
42197
- mode: "server"
42198
- } }
42199
- };
42200
- //#endregion
42201
41897
  //#region ../blocks/src/system/blocks/event-details.ts
42202
41898
  /**
42203
41899
  * Event Details Block
@@ -42444,200 +42140,6 @@ const eventDetailsBlockDefinition = {
42444
42140
  mode: "server"
42445
42141
  } }
42446
42142
  };
42447
- const courseDetailsBlockDefinition = {
42448
- manifest: createBlockManifest({
42449
- id: "block.course-details",
42450
- version: "1.0.0",
42451
- title: "Course Details",
42452
- titleSource: "heading",
42453
- description: "Schedule, venue, price, and enrollment status for a course",
42454
- category: "content",
42455
- contentSource: { kind: "entries" },
42456
- tags: [
42457
- "courses",
42458
- "schedule",
42459
- "sessions",
42460
- "venue",
42461
- "pricing"
42462
- ],
42463
- icon: "GraduationCap",
42464
- styleTokens: {
42465
- background: "surface",
42466
- typography: "body",
42467
- spacing: "md"
42468
- },
42469
- behaviours: {
42470
- supportsThemeSwitching: true,
42471
- inlineEditing: false,
42472
- animation: false,
42473
- paletteHidden: false
42474
- },
42475
- additionalFields: [
42476
- {
42477
- id: "heading",
42478
- type: "text",
42479
- label: "Heading",
42480
- description: "Optional heading shown above course details",
42481
- required: false,
42482
- multiline: false,
42483
- defaultValue: "Course details"
42484
- },
42485
- {
42486
- id: "showTitle",
42487
- type: "boolean",
42488
- label: "Show course title",
42489
- required: false,
42490
- defaultValue: false,
42491
- ui: { intent: "display" }
42492
- },
42493
- {
42494
- id: "showDescription",
42495
- type: "boolean",
42496
- label: "Show course description",
42497
- description: "Render the course description from the bookings course record",
42498
- required: false,
42499
- defaultValue: false,
42500
- ui: { intent: "display" }
42501
- },
42502
- {
42503
- id: "showSessions",
42504
- type: "boolean",
42505
- label: "Show sessions",
42506
- required: false,
42507
- defaultValue: true,
42508
- ui: { intent: "display" }
42509
- },
42510
- {
42511
- id: "sessionsLimit",
42512
- type: "select",
42513
- label: "Sessions limit",
42514
- required: false,
42515
- multiple: false,
42516
- defaultValue: "10",
42517
- options: [
42518
- {
42519
- value: "3",
42520
- label: "3 sessions"
42521
- },
42522
- {
42523
- value: "5",
42524
- label: "5 sessions"
42525
- },
42526
- {
42527
- value: "10",
42528
- label: "10 sessions"
42529
- },
42530
- {
42531
- value: "all",
42532
- label: "All sessions"
42533
- }
42534
- ],
42535
- ui: { intent: "display" }
42536
- },
42537
- {
42538
- id: "showVenue",
42539
- type: "boolean",
42540
- label: "Show venue",
42541
- required: false,
42542
- defaultValue: true,
42543
- ui: { intent: "display" }
42544
- },
42545
- {
42546
- id: "showPrice",
42547
- type: "boolean",
42548
- label: "Show price",
42549
- required: false,
42550
- defaultValue: true,
42551
- ui: { intent: "display" }
42552
- },
42553
- {
42554
- id: "showCapacity",
42555
- type: "boolean",
42556
- label: "Show capacity",
42557
- required: false,
42558
- defaultValue: true,
42559
- ui: { intent: "display" }
42560
- },
42561
- {
42562
- id: "showEnrollmentStatus",
42563
- type: "boolean",
42564
- label: "Show enrollment status",
42565
- required: false,
42566
- defaultValue: true,
42567
- ui: { intent: "display" }
42568
- },
42569
- {
42570
- id: "showMembershipNote",
42571
- type: "boolean",
42572
- label: "Show membership note",
42573
- description: "Indicate when memberships can be used for free enrollment",
42574
- required: false,
42575
- defaultValue: true,
42576
- ui: { intent: "display" }
42577
- }
42578
- ],
42579
- layout: [styledSection({
42580
- baseClass: "",
42581
- spacing: "spacious",
42582
- children: sectionContainer([text({ as: "h2" }, bind("content.heading"), when("content.heading")), el("course-details", {
42583
- subject: { $bind: {
42584
- from: "$root.subject",
42585
- fallback: null
42586
- } },
42587
- courses: { $bind: { from: "data.courses" } },
42588
- showTitle: { $bind: {
42589
- from: "content.showTitle",
42590
- fallback: false
42591
- } },
42592
- showDescription: { $bind: {
42593
- from: "content.showDescription",
42594
- fallback: false
42595
- } },
42596
- showSessions: { $bind: {
42597
- from: "content.showSessions",
42598
- fallback: true
42599
- } },
42600
- sessionsLimit: { $bind: {
42601
- from: "content.sessionsLimit",
42602
- fallback: "10"
42603
- } },
42604
- showVenue: { $bind: {
42605
- from: "content.showVenue",
42606
- fallback: true
42607
- } },
42608
- showPrice: { $bind: {
42609
- from: "content.showPrice",
42610
- fallback: true
42611
- } },
42612
- showCapacity: { $bind: {
42613
- from: "content.showCapacity",
42614
- fallback: true
42615
- } },
42616
- showEnrollmentStatus: { $bind: {
42617
- from: "content.showEnrollmentStatus",
42618
- fallback: true
42619
- } },
42620
- showMembershipNote: { $bind: {
42621
- from: "content.showMembershipNote",
42622
- fallback: true
42623
- } }
42624
- })], { gap: "lg" })
42625
- })]
42626
- }),
42627
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
42628
- dataLoaders: { courses: {
42629
- endpoint: "listPublicWholeSeriesOfferings",
42630
- params: {
42631
- siteId: { $bind: { from: "$root.siteId" } },
42632
- limit: "50",
42633
- stage: { $bind: {
42634
- from: "$root.previewStage",
42635
- fallback: "published"
42636
- } }
42637
- },
42638
- mode: "server"
42639
- } }
42640
- };
42641
42143
  const eventSpotlightBlockDefinition = {
42642
42144
  manifest: createBlockManifest({
42643
42145
  id: "block.event-spotlight",
@@ -45167,7 +44669,7 @@ const EmptyState = ({ message = "No upcoming events scheduled.", className, hasA
45167
44669
  //#region ../blocks/src/system/runtime/nodes/events/shared/DateTimeTile.tsx
45168
44670
  /**
45169
44671
  * Shared tile content for displaying date and time range.
45170
- * Used by event-details "Other dates" and course-details "Sessions".
44672
+ * Used by event-details "Other dates".
45171
44673
  */
45172
44674
  function DateTimeTile({ startsAt, endsAt, timeZone }) {
45173
44675
  const { date, timeRange } = formatEventDateParts({
@@ -47919,7 +47421,7 @@ const offeringsPreviewManifest = createBlockManifest({
47919
47421
  fallback: "published"
47920
47422
  } },
47921
47423
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
47922
- courses: { $bind: { from: "data.courses" } },
47424
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
47923
47425
  ...offeringsPreviewEventDataBindings
47924
47426
  })
47925
47427
  ], { gap: "lg" }),
@@ -47936,7 +47438,7 @@ const offeringsPreviewBlockDefinition = {
47936
47438
  dataSchemas: {
47937
47439
  ...offeringsPreviewEventDataSchemas,
47938
47440
  routeCandidates: publicRouteCandidatesSchema.optional(),
47939
- courses: publicWholeSeriesOfferingsArraySchema.optional()
47441
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
47940
47442
  },
47941
47443
  dataLoaders: {
47942
47444
  ...offeringsPreviewEventDataLoaders,
@@ -47945,7 +47447,7 @@ const offeringsPreviewBlockDefinition = {
47945
47447
  params: {},
47946
47448
  mode: "server"
47947
47449
  },
47948
- courses: {
47450
+ wholeSeriesOfferings: {
47949
47451
  endpoint: "listPublicWholeSeriesOfferings",
47950
47452
  params: {
47951
47453
  siteId: { $bind: { from: "$root.siteId" } },
@@ -53047,22 +52549,6 @@ const systemBlockDefinitions = [
53047
52549
  weight: "standard"
53048
52550
  })]
53049
52551
  })),
53050
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
53051
- flow: conversionFlow,
53052
- layoutProfiles: [layoutProfile({
53053
- variantKey: "default",
53054
- family: "form",
53055
- weight: "standard"
53056
- })]
53057
- })),
53058
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
53059
- flow: offeringsFlow,
53060
- layoutProfiles: [layoutProfile({
53061
- variantKey: "default",
53062
- family: "stack",
53063
- weight: "standard"
53064
- })]
53065
- })),
53066
52552
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
53067
52553
  flow: offeringsFlow,
53068
52554
  layoutProfiles: [layoutProfile({
@@ -55889,7 +55375,7 @@ function emptySelection(timeZone) {
55889
55375
  timeZone
55890
55376
  };
55891
55377
  }
55892
- function parseLimit$1(value, fallback) {
55378
+ function parseLimit(value, fallback) {
55893
55379
  if (value === "all") return Number.MAX_SAFE_INTEGER;
55894
55380
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
55895
55381
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -55972,7 +55458,7 @@ function selectEventDetails(args) {
55972
55458
  subject: args.subject
55973
55459
  }));
55974
55460
  const occurrenceContext = args.occurrenceContext ?? null;
55975
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
55461
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
55976
55462
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
55977
55463
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
55978
55464
  if (!candidate) return emptySelection(timeZone);
@@ -56048,8 +55534,8 @@ function resolveEventDetailsPresentation(input) {
56048
55534
  };
56049
55535
  }
56050
55536
  //#endregion
56051
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
56052
- function CoursePricingDisplay({ pricing, acceptedItems }) {
55537
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
55538
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
56053
55539
  return /* @__PURE__ */ jsxs("div", {
56054
55540
  className: "rb-mt-6",
56055
55541
  children: [
@@ -56061,7 +55547,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
56061
55547
  className: "rb-flex rb-flex-col rb-gap-2",
56062
55548
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
56063
55549
  option.name,
56064
- ": ",
55550
+ ":",
55551
+ " ",
56065
55552
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
56066
55553
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
56067
55554
  className: "rb-caption status-muted",
@@ -56082,7 +55569,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
56082
55569
  const label = preview.publicLabel.trim() || "Discount";
56083
55570
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
56084
55571
  }
56085
- function TeamMemberName$1({ name, profilePath }) {
55572
+ function TeamMemberName({ name, profilePath }) {
56086
55573
  return profilePath ? /* @__PURE__ */ jsx("a", {
56087
55574
  href: profilePath,
56088
55575
  className: "rb-hover-opacity-80",
@@ -56119,7 +55606,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
56119
55606
  children: "No registration required - just show up"
56120
55607
  })]
56121
55608
  });
56122
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
55609
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
56123
55610
  pricing: coursePricing,
56124
55611
  acceptedItems: [...acceptedItems]
56125
55612
  });
@@ -56194,7 +55681,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
56194
55681
  children: "With"
56195
55682
  }), /* @__PURE__ */ jsx("div", {
56196
55683
  className: "rb-flex rb-flex-col rb-gap-3",
56197
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
55684
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
56198
55685
  name: member.name,
56199
55686
  profilePath: member.profilePath
56200
55687
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -56473,352 +55960,6 @@ function LocationMapSSR(props) {
56473
55960
  });
56474
55961
  }
56475
55962
  //#endregion
56476
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
56477
- /**
56478
- * Resolves native run-page ownership without falling back to entry or slug
56479
- * coincidence when a page-surface subject is present but invalid.
56480
- */
56481
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
56482
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
56483
- const parsed = parseEventPageSurfaceSubject(subjectValue);
56484
- if (!parsed.ok) return {
56485
- kind: "unsupported",
56486
- reason: parsed.error.kind
56487
- };
56488
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
56489
- const allowedSeriesIds = new Set(seriesIds);
56490
- return {
56491
- kind: "scoped",
56492
- subject: parsed.value,
56493
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
56494
- };
56495
- }
56496
- function eventSeriesIdsForSubject(subject) {
56497
- switch (subject.kind) {
56498
- case "eventSeries": return [subject.eventSeriesId];
56499
- case "eventOffering": return subject.availableEventSeriesIds;
56500
- default: return assertNever$24(subject);
56501
- }
56502
- }
56503
- //#endregion
56504
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
56505
- /** Temporary Course-block adapter over canonical Event run scoping. */
56506
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
56507
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
56508
- return scope.kind === "scoped" ? {
56509
- kind: "scoped",
56510
- subject: scope.subject,
56511
- courses: scope.runs
56512
- } : scope;
56513
- }
56514
- //#endregion
56515
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
56516
- function selectCourseDetails(args) {
56517
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
56518
- if (pageSurfaceScope.kind === "unsupported") return {
56519
- mode: "unsupportedPageSurfaceSubject",
56520
- selected: null,
56521
- scoped: []
56522
- };
56523
- if (pageSurfaceScope.kind === "scoped") {
56524
- const scoped = [...pageSurfaceScope.courses];
56525
- return {
56526
- mode: "pageSurfaceSubject",
56527
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
56528
- scoped
56529
- };
56530
- }
56531
- return {
56532
- mode: "unsupportedPageSurfaceSubject",
56533
- selected: null,
56534
- scoped: []
56535
- };
56536
- }
56537
- //#endregion
56538
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
56539
- function toValidDate(value) {
56540
- if (!value) return null;
56541
- const date = new Date(value);
56542
- return Number.isNaN(date.getTime()) ? null : date;
56543
- }
56544
- function getCourseDateRange(course) {
56545
- const datedSessions = (course.sessions ?? []).map((session) => ({
56546
- session,
56547
- start: toValidDate(session.startsAt),
56548
- end: toValidDate(session.endsAt)
56549
- })).filter((value) => value.start !== null || value.end !== null);
56550
- if (datedSessions.length === 0) return {
56551
- start: null,
56552
- end: null,
56553
- startIso: null,
56554
- endIso: null,
56555
- timeZone: null
56556
- };
56557
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
56558
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
56559
- return {
56560
- start: startSession?.start ?? null,
56561
- end: endSession?.end ?? null,
56562
- startIso: startSession?.session.startsAt ?? null,
56563
- endIso: endSession?.session.endsAt ?? null,
56564
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
56565
- };
56566
- }
56567
- function formatCourseDateRange(range) {
56568
- const { startIso, endIso, timeZone } = range;
56569
- const dateFormat = {
56570
- month: "numeric",
56571
- day: "numeric",
56572
- year: "numeric"
56573
- };
56574
- const effectiveTimeZone = toBookingTimeZone(timeZone);
56575
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
56576
- startsAt: iso,
56577
- timeZone: effectiveTimeZone
56578
- }), dateFormat);
56579
- const formatRangeDateOnly = (startsAt, endsAt) => {
56580
- const startText = formatSingleDate(startsAt);
56581
- const endText = formatSingleDate(endsAt);
56582
- return startText === endText ? startText : `${startText} – ${endText}`;
56583
- };
56584
- if (!startIso && !endIso) return "Dates TBD";
56585
- if (startIso && !endIso) return formatSingleDate(startIso);
56586
- if (!startIso && endIso) return formatSingleDate(endIso);
56587
- if (!startIso || !endIso) return "Dates TBD";
56588
- return formatRangeDateOnly(startIso, endIso);
56589
- }
56590
- //#endregion
56591
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
56592
- function TeamMemberName({ name, profilePath }) {
56593
- return profilePath ? /* @__PURE__ */ jsx("a", {
56594
- href: profilePath,
56595
- className: "rb-hover-opacity-80",
56596
- children: /* @__PURE__ */ jsx("strong", { children: name })
56597
- }) : /* @__PURE__ */ jsx("strong", { children: name });
56598
- }
56599
- function parseLimit(value, fallback) {
56600
- if (value === "all") return "all";
56601
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
56602
- return Number.isFinite(n) && n > 0 ? n : fallback;
56603
- }
56604
- function CourseDetailsView(props) {
56605
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
56606
- if (!course) return /* @__PURE__ */ jsx("p", {
56607
- className: "rb-caption status-muted",
56608
- children: emptyMessage
56609
- });
56610
- const pricing = resolveWholeSeriesPricingState(course);
56611
- const sessionLimit = parseLimit(sessionsLimit, 10);
56612
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
56613
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
56614
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
56615
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
56616
- const teamMembers = course.teamMembers ?? [];
56617
- return /* @__PURE__ */ jsxs("div", {
56618
- className: "rb-flex rb-flex-col rb-gap-6",
56619
- children: [
56620
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
56621
- /* @__PURE__ */ jsxs("div", {
56622
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
56623
- children: [/* @__PURE__ */ jsxs("div", {
56624
- className: "rb-flex rb-flex-col rb-gap-4",
56625
- children: [
56626
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56627
- className: "rb-label rb-mb-2",
56628
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
56629
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
56630
- className: "rb-flex rb-flex-col rb-gap-2",
56631
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
56632
- option.name,
56633
- ": ",
56634
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
56635
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
56636
- className: "rb-caption status-muted",
56637
- children: option.description
56638
- }) : null] }, option.id))
56639
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
56640
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56641
- className: "rb-label rb-mb-2",
56642
- children: "Spots"
56643
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
56644
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56645
- className: "rb-label rb-mb-2",
56646
- children: "Membership"
56647
- }), /* @__PURE__ */ jsx("p", {
56648
- className: "rb-caption status-muted",
56649
- children: "Eligible memberships can be used for free enrollment"
56650
- })] }),
56651
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56652
- className: "rb-label rb-mb-2",
56653
- children: "With"
56654
- }), /* @__PURE__ */ jsx("div", {
56655
- className: "rb-flex rb-flex-col rb-gap-3",
56656
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
56657
- name: teamMember.name,
56658
- profilePath: teamMember.profilePath
56659
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
56660
- className: "rb-caption status-muted",
56661
- children: teamMember.summary
56662
- })] }, teamMember.id))
56663
- })] })
56664
- ]
56665
- }), /* @__PURE__ */ jsxs("div", {
56666
- className: "rb-flex rb-flex-col rb-gap-4",
56667
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
56668
- /* @__PURE__ */ jsx("div", {
56669
- className: "rb-label rb-mb-2",
56670
- children: "Venue"
56671
- }),
56672
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
56673
- course.venue.address && /* @__PURE__ */ jsx("p", {
56674
- className: "rb-caption status-muted",
56675
- children: course.venue.address
56676
- })
56677
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56678
- className: "rb-label rb-mb-2",
56679
- children: "Enrollment"
56680
- }), /* @__PURE__ */ jsx("p", {
56681
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
56682
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
56683
- })] })]
56684
- })]
56685
- }),
56686
- descriptionDoc && /* @__PURE__ */ jsx("div", {
56687
- className: "cd-description",
56688
- children: /* @__PURE__ */ jsx(RichText$1, { doc: descriptionDoc })
56689
- }),
56690
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
56691
- /* @__PURE__ */ jsx("div", {
56692
- className: "rb-label",
56693
- children: "Sessions"
56694
- }),
56695
- /* @__PURE__ */ jsx("div", {
56696
- className: "rb-mt-2 rb-tiles-grid",
56697
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
56698
- className: "rb-tile",
56699
- children: /* @__PURE__ */ jsx(DateTimeTile, {
56700
- startsAt: s.startsAt,
56701
- endsAt: s.endsAt
56702
- })
56703
- }, s.id))
56704
- }),
56705
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
56706
- className: "cd-sessions__more",
56707
- children: [
56708
- "Showing ",
56709
- visibleSessions.length,
56710
- " of ",
56711
- sortedSessions.length,
56712
- " sessions."
56713
- ]
56714
- })
56715
- ] })
56716
- ]
56717
- });
56718
- }
56719
- //#endregion
56720
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
56721
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
56722
- const selection = selectCourseDetails({
56723
- courses: courses ?? null,
56724
- subject
56725
- });
56726
- const parsedSubject = parseEventPageSurfaceSubject(subject);
56727
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
56728
- const now = /* @__PURE__ */ new Date();
56729
- const scopedWithRange = selection.scoped.map((c) => ({
56730
- course: c,
56731
- range: getCourseDateRange(c)
56732
- }));
56733
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
56734
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
56735
- });
56736
- 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;
56737
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
56738
- return /* @__PURE__ */ jsxs("div", {
56739
- className: `course-details ${className ?? ""}`.trim(),
56740
- "data-block": "course-details",
56741
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
56742
- course: selection.selected,
56743
- showTitle,
56744
- showDescription,
56745
- showSessions,
56746
- sessionsLimit,
56747
- showVenue,
56748
- showPrice,
56749
- showCapacity,
56750
- showEnrollmentStatus,
56751
- showMembershipNote
56752
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
56753
- className: "rb-flex rb-flex-col rb-gap-3",
56754
- children: [
56755
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56756
- className: "rb-label rb-mb-2",
56757
- children: "Upcoming runs"
56758
- }), /* @__PURE__ */ jsx("p", {
56759
- className: "rb-caption status-muted",
56760
- children: "Choose a run to see sessions and details."
56761
- })] }),
56762
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
56763
- className: "rb-flex rb-flex-col rb-gap-2",
56764
- children: nonPastRuns.map(({ course, range }) => {
56765
- const start = range.start;
56766
- const end = range.end;
56767
- const isInProgress = Boolean(start && end && start <= now && end > now);
56768
- return /* @__PURE__ */ jsx("li", {
56769
- className: "rb-rounded-md rb-border rb-p-3",
56770
- children: /* @__PURE__ */ jsx("div", {
56771
- className: "rb-flex rb-flex-col rb-gap-1",
56772
- children: /* @__PURE__ */ jsxs("div", {
56773
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
56774
- children: [/* @__PURE__ */ jsxs("div", {
56775
- className: "rb-min-w-0",
56776
- children: [/* @__PURE__ */ jsx("div", {
56777
- className: "rb-truncate",
56778
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
56779
- }), /* @__PURE__ */ jsx("div", {
56780
- className: "rb-caption status-muted",
56781
- children: formatCourseDateRange(range)
56782
- })]
56783
- }), /* @__PURE__ */ jsx("div", {
56784
- className: "rb-caption status-muted rb-shrink-0",
56785
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
56786
- })]
56787
- })
56788
- })
56789
- }, course.eventSeriesId);
56790
- })
56791
- }) : /* @__PURE__ */ jsx("p", {
56792
- className: "rb-caption status-muted",
56793
- children: "No upcoming runs."
56794
- }),
56795
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
56796
- className: "rb-caption status-muted",
56797
- children: [
56798
- "Last run: ",
56799
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
56800
- " (",
56801
- formatCourseDateRange(lastPastRun.range),
56802
- ")"
56803
- ]
56804
- }) : null
56805
- ]
56806
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
56807
- course: null,
56808
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
56809
- showTitle,
56810
- showDescription,
56811
- showSessions,
56812
- sessionsLimit,
56813
- showVenue,
56814
- showPrice,
56815
- showCapacity,
56816
- showEnrollmentStatus,
56817
- showMembershipNote
56818
- }), children]
56819
- });
56820
- }
56821
- //#endregion
56822
55963
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
56823
55964
  /**
56824
55965
  * EventSpotlight Component
@@ -57022,7 +56163,7 @@ function deriveCourseScheduleSummary(course) {
57022
56163
  sessionCount: sessions.length
57023
56164
  };
57024
56165
  }
57025
- function nextCourseSessionStart(course) {
56166
+ function nextWholeSeriesSessionStart(course) {
57026
56167
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
57027
56168
  }
57028
56169
  function occurrenceFromEvent(event) {
@@ -57176,7 +56317,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
57176
56317
  function buildItemDataMap(props) {
57177
56318
  const routeCandidates = props.routeCandidates?.routes ?? [];
57178
56319
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
57179
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
56320
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
57180
56321
  }
57181
56322
  function eventDataFromMaybeArray(events) {
57182
56323
  return events ? {
@@ -57230,8 +56371,8 @@ function renderOfferingGroupItems(presentation, items, options) {
57230
56371
  }
57231
56372
  }
57232
56373
  function compareCoursesByNextSession(left, right) {
57233
- const leftStart = nextCourseSessionStart(left);
57234
- const rightStart = nextCourseSessionStart(right);
56374
+ const leftStart = nextWholeSeriesSessionStart(left);
56375
+ const rightStart = nextWholeSeriesSessionStart(right);
57235
56376
  if (leftStart === null) return rightStart === null ? 0 : 1;
57236
56377
  if (rightStart === null) return -1;
57237
56378
  return leftStart.localeCompare(rightStart);
@@ -58170,45 +57311,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
58170
57311
  });
58171
57312
  }
58172
57313
  //#endregion
58173
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
58174
- /**
58175
- * Server-safe placeholder for course registration.
58176
- * Provides a static container for island hydration without importing client hooks.
58177
- */
58178
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
58179
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
58180
- siteId,
58181
- apiBaseUrl,
58182
- portalToken,
58183
- subject,
58184
- courses,
58185
- className,
58186
- showSessions,
58187
- showPrice,
58188
- showCapacity,
58189
- showVenue,
58190
- successMessage,
58191
- waitlistMessage,
58192
- membershipMessage,
58193
- buttonText,
58194
- buttonVariant,
58195
- stage
58196
- });
58197
- return /* @__PURE__ */ jsxs("div", {
58198
- className: `course-registration ${className ?? ""}`.trim(),
58199
- "data-block": "course-registration",
58200
- ...getIslandRootProps("course-registration", blockId),
58201
- children: [
58202
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
58203
- /* @__PURE__ */ jsx("div", {
58204
- className: "course-registration__summary",
58205
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
58206
- }),
58207
- children
58208
- ]
58209
- });
58210
- }
58211
- //#endregion
58212
57314
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
58213
57315
  function GiftingSSR({ blockId, ...rest }) {
58214
57316
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -59694,7 +58796,6 @@ const runtimeBackedBlockServerEntries = {
59694
58796
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
59695
58797
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
59696
58798
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
59697
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
59698
58799
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
59699
58800
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
59700
58801
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -59727,7 +58828,6 @@ const serverComponentRegistry = {
59727
58828
  "booking-form": BookingFormSSR,
59728
58829
  "event-details": EventDetailsSSR,
59729
58830
  "location-map": LocationMapSSR,
59730
- "course-details": CourseDetailsSSR,
59731
58831
  "event-spotlight": EventSpotlight,
59732
58832
  "event-combined": EventCombinedSSR,
59733
58833
  "offerings-preview": OfferingsPreviewNode,
@@ -64143,176 +63243,6 @@ ${root} {
64143
63243
  `;
64144
63244
  }
64145
63245
  //#endregion
64146
- //#region ../theme-core/src/blocks/vars/course-details.ts
64147
- /**
64148
- * Generate CSS variables for the course-details block.
64149
- *
64150
- * Variables defined:
64151
- * - Enrollment status colors (open/closed)
64152
- * - Capacity indicator colors (available/low/full)
64153
- * - Price display colors (free indicator)
64154
- */
64155
- function generateCourseDetailsVars({ themeId }) {
64156
- return `
64157
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
64158
- /* Enrollment status */
64159
- --cd-enrollment-open-text: rgb(var(--tb-success));
64160
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
64161
-
64162
- /* Capacity indicator */
64163
- --cd-capacity-available-text: rgb(var(--tb-success));
64164
- --cd-capacity-low-text: rgb(var(--tb-warning));
64165
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
64166
-
64167
- /* Price styling */
64168
- --cd-price-free-text: rgb(var(--tb-success));
64169
- }
64170
- `;
64171
- }
64172
- //#endregion
64173
- //#region ../theme-core/src/blocks/vars/course-registration.ts
64174
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
64175
- /* Temporary bridge while persisted Course blocks render the Event-owned
64176
- whole-series registration runtime. Removed with the Course block. */
64177
- --er-step-active: var(--cr-step-active);
64178
- --er-step-inactive: var(--cr-step-inactive);
64179
- --er-step-completed: var(--cr-step-completed);
64180
- --er-step-text: var(--cr-step-text);
64181
- --er-step-text-active: var(--cr-step-text-active);
64182
- --er-step-connector: var(--cr-step-connector);
64183
- --er-step-title-size: var(--cr-step-title-size);
64184
- --er-success-bg: var(--cr-success-bg);
64185
- --er-success-text: var(--cr-success-text);
64186
- --er-error-bg: var(--cr-error-bg);
64187
- --er-error-text: var(--cr-error-text);
64188
- --er-waitlist-bg: var(--cr-waitlist-bg);
64189
- --er-waitlist-text: var(--cr-waitlist-text);
64190
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
64191
- --er-capacity-available-text: var(--cr-capacity-available-text);
64192
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
64193
- --er-capacity-low-text: var(--cr-capacity-low-text);
64194
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
64195
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
64196
- --er-border: var(--cr-border);
64197
- --er-border-hover: var(--cr-border-hover);
64198
- --er-border-selected: var(--cr-border-selected);
64199
- --er-border-error: var(--cr-border-error);
64200
- --er-focus-ring: var(--cr-focus-ring);
64201
- --er-required: var(--cr-required);
64202
- --er-payment-border: var(--cr-payment-border);
64203
- --er-payment-border-hover: var(--cr-payment-border-hover);
64204
- --er-payment-border-selected: var(--cr-payment-border-selected);
64205
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
64206
- --er-check-bg: var(--cr-check-bg);
64207
- --er-check-text: var(--cr-check-text);
64208
- --er-summary-bg: var(--cr-summary-bg);
64209
- --er-summary-border: var(--cr-summary-border);
64210
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
64211
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
64212
- `;
64213
- /**
64214
- * Generate CSS variables for the course-registration block.
64215
- *
64216
- * Variables defined:
64217
- * - Step indicator colors (active, inactive, completed, text, connector)
64218
- * - Success/error/waitlist state backgrounds and text colors
64219
- * - Capacity badge colors (available, low, sold-out)
64220
- * - Border colors for various interaction states
64221
- * - Input focus and required marker styling
64222
- * - Payment option card styling
64223
- * - Checkmark indicator colors
64224
- * - Summary styling
64225
- */
64226
- function generateCourseRegistrationVars({ themeId }) {
64227
- return `
64228
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
64229
- /* Step indicator */
64230
- --cr-step-active: rgb(var(--tb-primary));
64231
- --cr-step-inactive: rgb(var(--tb-mutedText));
64232
- --cr-step-completed: rgb(var(--tb-success));
64233
- --cr-step-text: rgb(255 255 255);
64234
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
64235
- --cr-step-connector: rgba(var(--tb-border), 0.5);
64236
-
64237
- /* Step title */
64238
- --cr-step-title-size: 1.5rem;
64239
-
64240
- /* State backgrounds with alpha */
64241
- --cr-success-bg: rgba(var(--tb-success), 0.1);
64242
- --cr-success-text: rgb(var(--tb-success));
64243
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
64244
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
64245
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
64246
- --cr-waitlist-text: rgb(var(--tb-warning));
64247
-
64248
- /* Capacity badges */
64249
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
64250
- --cr-capacity-available-text: rgb(var(--tb-success));
64251
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
64252
- --cr-capacity-low-text: rgb(var(--tb-warning));
64253
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
64254
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
64255
-
64256
- /* Borders */
64257
- --cr-border: rgb(var(--tb-border));
64258
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
64259
- --cr-border-selected: rgb(var(--tb-primary));
64260
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
64261
-
64262
- /* Input focus */
64263
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
64264
-
64265
- /* Required marker */
64266
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
64267
-
64268
- /* Payment option cards */
64269
- --cr-payment-border: rgb(var(--tb-border));
64270
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
64271
- --cr-payment-border-selected: rgb(var(--tb-primary));
64272
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
64273
-
64274
- /* Checkmark indicator */
64275
- --cr-check-bg: rgb(var(--tb-primary));
64276
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
64277
-
64278
- /* Summary */
64279
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
64280
- --cr-summary-border: rgb(var(--tb-border));
64281
-
64282
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
64283
-
64284
- /* Shared registration-surface mappings (issue 1174).
64285
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
64286
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
64287
- keep working unchanged. */
64288
- --rb-reg-radius: var(--rb-block-radius);
64289
- --rb-reg-border: var(--cr-border);
64290
- --rb-reg-border-hover: var(--cr-border-hover);
64291
- --rb-reg-border-selected: var(--cr-border-selected);
64292
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
64293
- --rb-reg-option-bg: rgb(var(--tb-background));
64294
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
64295
- --rb-reg-surface-bg: rgb(var(--tb-surface));
64296
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
64297
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
64298
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
64299
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
64300
- --rb-reg-check-bg: var(--cr-check-bg);
64301
- --rb-reg-check-text: var(--cr-check-text);
64302
- --rb-reg-step-active: var(--cr-step-active);
64303
- --rb-reg-step-completed: var(--cr-step-completed);
64304
- --rb-reg-step-inactive: var(--cr-step-inactive);
64305
- --rb-reg-step-text: var(--cr-step-text);
64306
- --rb-reg-step-text-active: var(--cr-step-text-active);
64307
- --rb-reg-step-connector: var(--cr-step-connector);
64308
- --rb-reg-summary-bg: var(--cr-summary-bg);
64309
- --rb-reg-summary-border: var(--cr-summary-border);
64310
- --rb-reg-focus-ring: var(--cr-focus-ring);
64311
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
64312
- }
64313
- `;
64314
- }
64315
- //#endregion
64316
63246
  //#region ../theme-core/src/blocks/registry.ts
64317
63247
  /**
64318
63248
  * Global registry of block var generators.
@@ -64327,8 +63257,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
64327
63257
  blockVarRegistry.set("form", generateFormBlockVars);
64328
63258
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
64329
63259
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
64330
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
64331
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
64332
63260
  /**
64333
63261
  * Generate all Tier 3 block-specific CSS variables.
64334
63262
  *
@@ -70268,7 +69196,7 @@ const containerResponsiveThemeCss = `/*
70268
69196
  * Shared: Registration Surface (issue 1174)
70269
69197
  *
70270
69198
  * Wizard-surface primitives shared by the event-registration,
70271
- * course-registration and appointment-booking blocks: surface container,
69199
+ * appointment-booking blocks: surface container,
70272
69200
  * selectable option cards, step indicator, wizard actions row, on-surface
70273
69201
  * text ramp, layout stacks, summary box and skeleton shell lines.
70274
69202
  *
@@ -70311,7 +69239,7 @@ const containerResponsiveThemeCss = `/*
70311
69239
  }
70312
69240
 
70313
69241
  /* Surface container */
70314
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
69242
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
70315
69243
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
70316
69244
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
70317
69245
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -70341,7 +69269,7 @@ const containerResponsiveThemeCss = `/*
70341
69269
  *
70342
69270
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
70343
69271
  * pairing is pinned by registration-surface-action-reset.test.ts. */
70344
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
69272
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
70345
69273
  --rb-action-primary-base-background-color: initial;
70346
69274
  --rb-action-primary-base-background-image: initial;
70347
69275
  --rb-action-primary-base-color: initial;
@@ -70449,7 +69377,7 @@ const containerResponsiveThemeCss = `/*
70449
69377
  }
70450
69378
 
70451
69379
  /* Selectable option card */
70452
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
69380
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
70453
69381
  position: relative;
70454
69382
  display: flex;
70455
69383
  align-items: flex-start;
@@ -70466,34 +69394,34 @@ const containerResponsiveThemeCss = `/*
70466
69394
  box-shadow var(--rb-block-transition, 150ms) ease;
70467
69395
  }
70468
69396
 
70469
- :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"]) {
69397
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
70470
69398
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
70471
69399
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
70472
69400
  }
70473
69401
 
70474
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
69402
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
70475
69403
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
70476
69404
  outline-offset: 2px;
70477
69405
  }
70478
69406
 
70479
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
69407
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
70480
69408
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
70481
69409
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
70482
69410
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
70483
69411
  }
70484
69412
 
70485
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
69413
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
70486
69414
  cursor: not-allowed;
70487
69415
  opacity: 0.7;
70488
69416
  }
70489
69417
 
70490
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
69418
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
70491
69419
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
70492
69420
  box-shadow: none;
70493
69421
  }
70494
69422
 
70495
69423
  /* Check indicator */
70496
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
69424
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
70497
69425
  flex-shrink: 0;
70498
69426
  width: 1.25rem;
70499
69427
  height: 1.25rem;
@@ -70504,18 +69432,18 @@ const containerResponsiveThemeCss = `/*
70504
69432
  justify-content: center;
70505
69433
  }
70506
69434
 
70507
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
69435
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
70508
69436
  width: 0.75rem;
70509
69437
  height: 0.75rem;
70510
69438
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70511
69439
  }
70512
69440
 
70513
69441
  /* Step indicator */
70514
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
69442
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
70515
69443
  margin-bottom: 1.5rem;
70516
69444
  }
70517
69445
 
70518
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
69446
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
70519
69447
  display: flex;
70520
69448
  align-items: center;
70521
69449
  justify-content: center;
@@ -70525,13 +69453,13 @@ const containerResponsiveThemeCss = `/*
70525
69453
  margin: 0;
70526
69454
  }
70527
69455
 
70528
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
69456
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
70529
69457
  display: flex;
70530
69458
  align-items: center;
70531
69459
  gap: 0.5rem;
70532
69460
  }
70533
69461
 
70534
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
69462
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
70535
69463
  width: 1.75rem;
70536
69464
  height: 1.75rem;
70537
69465
  border-radius: 50%;
@@ -70545,47 +69473,47 @@ const containerResponsiveThemeCss = `/*
70545
69473
  transition: background-color var(--rb-block-transition, 150ms) ease;
70546
69474
  }
70547
69475
 
70548
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
69476
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
70549
69477
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
70550
69478
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70551
69479
  }
70552
69480
 
70553
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
69481
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
70554
69482
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
70555
69483
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70556
69484
  }
70557
69485
 
70558
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
69486
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
70559
69487
  width: 0.75rem;
70560
69488
  height: 0.75rem;
70561
69489
  }
70562
69490
 
70563
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
69491
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
70564
69492
  width: 2rem;
70565
69493
  height: 2px;
70566
69494
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
70567
69495
  }
70568
69496
 
70569
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
69497
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
70570
69498
  font-size: 0.75rem;
70571
69499
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
70572
69500
  display: none;
70573
69501
  }
70574
69502
 
70575
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
69503
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
70576
69504
  font-weight: 500;
70577
69505
  }
70578
69506
 
70579
69507
  @container rb-site (min-width: 640px) {
70580
69508
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
70581
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
69509
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
70582
69510
  display: inline;
70583
69511
  }
70584
69512
  }
70585
69513
  }
70586
69514
 
70587
69515
  /* Wizard actions row */
70588
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
69516
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
70589
69517
  display: flex;
70590
69518
  justify-content: space-between;
70591
69519
  align-items: center;
@@ -70594,56 +69522,56 @@ const containerResponsiveThemeCss = `/*
70594
69522
  }
70595
69523
 
70596
69524
  /* When there's only one action (no back button), push it to the right */
70597
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
69525
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
70598
69526
  margin-inline-start: auto;
70599
69527
  }
70600
69528
 
70601
69529
  /* On-surface text ramp */
70602
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
69530
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
70603
69531
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
70604
69532
  }
70605
69533
 
70606
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
69534
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
70607
69535
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
70608
69536
  }
70609
69537
 
70610
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
69538
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
70611
69539
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
70612
69540
  }
70613
69541
 
70614
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
69542
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
70615
69543
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
70616
69544
  }
70617
69545
 
70618
69546
  /* Layout stacks */
70619
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
69547
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
70620
69548
  display: flex;
70621
69549
  flex-direction: column;
70622
69550
  gap: 1rem;
70623
69551
  }
70624
69552
 
70625
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
69553
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
70626
69554
  gap: 0.75rem;
70627
69555
  }
70628
69556
 
70629
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
69557
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
70630
69558
  display: flex;
70631
69559
  align-items: center;
70632
69560
  gap: 1rem;
70633
69561
  }
70634
69562
 
70635
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
69563
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
70636
69564
  justify-content: space-between;
70637
69565
  align-items: flex-start;
70638
69566
  }
70639
69567
 
70640
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
69568
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
70641
69569
  display: grid;
70642
69570
  gap: 0.75rem;
70643
69571
  }
70644
69572
 
70645
69573
  /* Summary box */
70646
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
69574
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
70647
69575
  padding: 1rem;
70648
69576
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
70649
69577
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -70651,7 +69579,7 @@ const containerResponsiveThemeCss = `/*
70651
69579
  }
70652
69580
 
70653
69581
  /* Skeleton shell lines */
70654
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
69582
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
70655
69583
  height: 0.75rem;
70656
69584
  border-radius: 9999px;
70657
69585
  background: linear-gradient(
@@ -70662,24 +69590,24 @@ const containerResponsiveThemeCss = `/*
70662
69590
  );
70663
69591
  }
70664
69592
 
70665
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
69593
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
70666
69594
  width: min(26rem, 82%);
70667
69595
  }
70668
69596
 
70669
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
69597
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
70670
69598
  width: min(19rem, 68%);
70671
69599
  }
70672
69600
 
70673
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
69601
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
70674
69602
  width: min(14rem, 52%);
70675
69603
  }
70676
69604
 
70677
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
69605
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
70678
69606
  width: min(10rem, 42%);
70679
69607
  }
70680
69608
 
70681
69609
  /* Skeleton block (rectangular placeholder, pulses) */
70682
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
69610
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
70683
69611
  height: 2.5rem;
70684
69612
  width: 100%;
70685
69613
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -70697,7 +69625,7 @@ const containerResponsiveThemeCss = `/*
70697
69625
  }
70698
69626
 
70699
69627
  @media (prefers-reduced-motion: reduce) {
70700
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
69628
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
70701
69629
  animation: none;
70702
69630
  }
70703
69631
  }
@@ -77079,1674 +76007,363 @@ const containerResponsiveThemeCss = `/*
77079
76007
  cursor: not-allowed;
77080
76008
  }
77081
76009
 
77082
- /*
77083
- * Course Details (runtime node)
77084
- * Minimal rules - most styling via rb-* utilities
76010
+ /* =============================================================================
76011
+ * Block: Newsletter Signup
76012
+ * =============================================================================
77085
76013
  */
77086
76014
 
77087
- :where(.theme-scope) .course-details {
77088
- width: 100%;
77089
- max-width: 56.25rem; /* 900px */
77090
- margin-inline: auto;
76015
+ /* Newsletter copy styling */
76016
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
76017
+ font-size: 1.5rem;
76018
+ font-weight: 600;
77091
76019
  }
77092
76020
 
77093
- /* Description prose wrapper */
77094
- :where(.theme-scope) .course-details .cd-description {
77095
- margin-top: 1rem;
76021
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
76022
+ font-size: 1rem;
76023
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
76024
+ opacity: 0.85;
77096
76025
  }
77097
76026
 
77098
- /* "Showing X of Y" text */
77099
- :where(.theme-scope) .course-details .cd-sessions__more {
77100
- margin-top: 0.5rem;
77101
- opacity: 0.7;
77102
- font-size: 0.875rem;
76027
+ /* Newsletter form container */
76028
+ :where(.theme-scope) .newsletter-form {
76029
+ width: 100%;
76030
+ max-width: 32rem;
76031
+ margin-left: auto;
76032
+ margin-right: auto;
77103
76033
  }
77104
76034
 
77105
- /* Enrollment status colors (using Tier 3 vars) */
77106
- :where(.theme-scope) .course-details .cd-enrollment--open {
77107
- color: var(--cd-enrollment-open-text);
76035
+ /* Newsletter form fields container */
76036
+ :where(.theme-scope) .newsletter-form-fields {
76037
+ display: flex;
76038
+ flex-direction: column;
76039
+ gap: var(--rb-gap-sm, 0.75rem);
77108
76040
  }
77109
76041
 
77110
- :where(.theme-scope) .course-details .cd-enrollment--closed {
77111
- color: var(--cd-enrollment-closed-text);
76042
+ /* Individual field styling */
76043
+ :where(.theme-scope) .newsletter-field {
76044
+ display: flex;
76045
+ flex-direction: column;
76046
+ gap: 0.25rem;
77112
76047
  }
77113
76048
 
77114
- /* =============================================================================
77115
- * Block: Event whole-series registration
77116
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
77117
- * =============================================================================
77118
- */
77119
-
77120
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
77121
- :where(.theme-scope)
77122
- :where(
77123
- [data-block='event-registration'],
77124
- [data-block='course-registration']
77125
- ) {
77126
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
77127
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
76049
+ /* Required indicator */
76050
+ :where(.theme-scope) .newsletter-required {
76051
+ color: rgb(var(--tb-primary));
76052
+ margin-left: 0.125rem;
77128
76053
  }
77129
76054
 
77130
- /* Container: base styling comes from the shared .rb-reg-surface
77131
- (registration-surface.css); these overrides preserve whole-series
77132
- whole-series registration's established look (fixed padding, centered). */
77133
- :where(.theme-scope)
77134
- :where([data-block='event-registration'], [data-block='course-registration'])
77135
- .er-whole-series-container {
77136
- padding: 1.5rem;
77137
- margin-inline: auto;
76055
+ /* Submit button container */
76056
+ :where(.theme-scope) .newsletter-submit {
76057
+ margin-top: 0.5rem;
77138
76058
  }
77139
76059
 
77140
- /* Empty/unavailable */
77141
- :where(.theme-scope)
77142
- :where([data-block='event-registration'], [data-block='course-registration'])
77143
- .er-whole-series-empty {
77144
- border-radius: var(--rb-block-radius);
77145
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
77146
- padding: 2.5rem;
77147
- text-align: center;
76060
+ /* ALTCHA widget container */
76061
+ :where(.theme-scope) .newsletter-altcha {
76062
+ margin-top: 0.75rem;
76063
+ display: flex;
76064
+ justify-content: center;
77148
76065
  }
77149
76066
 
77150
- :where(.theme-scope)
77151
- :where([data-block='event-registration'], [data-block='course-registration'])
77152
- .er-whole-series-empty__text {
77153
- opacity: 0.7;
76067
+ /* Privacy note */
76068
+ :where(.theme-scope) .newsletter-privacy-note {
76069
+ margin-top: 0.75rem;
76070
+ font-size: 1rem;
76071
+ line-height: 1.6;
76072
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
76073
+ text-align: center;
77154
76074
  }
77155
76075
 
77156
76076
  /* =============================================================================
77157
- * Layout (two-column)
76077
+ * Inline Variant - Horizontal layout
77158
76078
  * =============================================================================
77159
76079
  */
77160
- :where(.theme-scope)
77161
- :where([data-block='event-registration'], [data-block='course-registration'])
77162
- .er-whole-series-layout {
77163
- display: grid;
77164
- gap: 1.5rem;
77165
- grid-template-columns: 1fr;
77166
- }
77167
76080
 
77168
- @container rb-site (min-width: 768px) {
77169
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77170
- :where(.theme-scope)
77171
- :where(
77172
- [data-block='event-registration'],
77173
- [data-block='course-registration']
77174
- )
77175
- .er-whole-series-layout--with-sidebar {
77176
- grid-template-columns: 1fr 280px;
77177
- }
77178
- }
76081
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
76082
+ flex-direction: row;
76083
+ align-items: flex-end;
76084
+ flex-wrap: wrap;
76085
+ gap: var(--rb-gap-sm, 0.75rem);
77179
76086
  }
77180
76087
 
77181
- :where(.theme-scope)
77182
- :where([data-block='event-registration'], [data-block='course-registration'])
77183
- .er-whole-series-layout__main {
77184
- min-width: 0;
76088
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
76089
+ flex: 1 1 auto;
76090
+ min-width: 10rem;
77185
76091
  }
77186
76092
 
77187
- :where(.theme-scope)
77188
- :where([data-block='event-registration'], [data-block='course-registration'])
77189
- .er-whole-series-layout__sidebar {
77190
- display: none;
76093
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
76094
+ margin-top: 0;
76095
+ flex-shrink: 0;
77191
76096
  }
77192
76097
 
77193
- @container rb-site (min-width: 768px) {
76098
+ /* Mobile fallback for inline variant */
76099
+ @container rb-site (max-width: 640px) {
77194
76100
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77195
- :where(.theme-scope)
77196
- :where(
77197
- [data-block='event-registration'],
77198
- [data-block='course-registration']
77199
- )
77200
- .er-whole-series-layout__sidebar {
77201
- display: block;
76101
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
76102
+ flex-direction: column;
76103
+ }
76104
+
76105
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
76106
+ min-width: 100%;
77202
76107
  }
77203
76108
  }
77204
76109
  }
77205
76110
 
77206
76111
  /* =============================================================================
77207
- * Step Indicator
76112
+ * Editorial Split Variant
77208
76113
  * =============================================================================
77209
76114
  */
77210
- :where(.theme-scope)
77211
- :where([data-block='event-registration'], [data-block='course-registration'])
77212
- .er-whole-series-steps {
77213
- display: flex;
77214
- align-items: center;
77215
- gap: 0.5rem;
77216
- margin-bottom: 1.5rem;
77217
- }
77218
76115
 
77219
- :where(.theme-scope)
77220
- :where([data-block='event-registration'], [data-block='course-registration'])
77221
- .er-whole-series-step {
77222
- display: flex;
76116
+ :where(.theme-scope) .newsletter-editorial-split {
76117
+ display: grid;
76118
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
76119
+ gap: clamp(2.5rem, 7vw, 7rem);
77223
76120
  align-items: center;
77224
- gap: 0.5rem;
76121
+ text-align: left;
77225
76122
  }
77226
76123
 
77227
- :where(.theme-scope)
77228
- :where([data-block='event-registration'], [data-block='course-registration'])
77229
- .er-whole-series-step-circle {
77230
- width: 1.75rem;
77231
- height: 1.75rem;
77232
- border-radius: 9999px;
76124
+ :where(.theme-scope) .newsletter-editorial-split-copy {
77233
76125
  display: flex;
77234
- align-items: center;
77235
- justify-content: center;
77236
- font-size: 0.75rem;
77237
- font-weight: 600;
77238
- background: var(--er-step-inactive);
77239
- color: var(--er-step-text);
77240
- transition: background-color 0.2s ease;
76126
+ flex-direction: column;
76127
+ gap: var(--rb-gap-sm, 0.75rem);
77241
76128
  }
77242
76129
 
77243
- :where(.theme-scope)
77244
- :where([data-block='event-registration'], [data-block='course-registration'])
77245
- .er-whole-series-step-circle--active {
77246
- background: var(--er-step-active);
77247
- color: var(--er-step-text-active);
76130
+ :where(.theme-scope) .newsletter-editorial-split-form {
76131
+ min-width: 0;
77248
76132
  }
77249
76133
 
77250
- :where(.theme-scope)
77251
- :where([data-block='event-registration'], [data-block='course-registration'])
77252
- .er-whole-series-step-circle--completed {
77253
- background: var(--er-step-completed);
77254
- color: var(--er-step-text);
76134
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
76135
+ max-width: none;
76136
+ margin-inline: 0;
77255
76137
  }
77256
76138
 
77257
- :where(.theme-scope)
77258
- :where([data-block='event-registration'], [data-block='course-registration'])
77259
- .er-whole-series-step-label {
77260
- font-size: 0.875rem;
76139
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
76140
+ font-size: clamp(2rem, 4vw, 3.5rem);
77261
76141
  font-weight: 500;
77262
- color: rgb(var(--tb-mutedText));
77263
- display: none;
77264
76142
  }
77265
76143
 
77266
- @container rb-site (min-width: 640px) {
76144
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
76145
+ text-align: left;
76146
+ }
76147
+
76148
+ @container rb-site (max-width: 767px) {
77267
76149
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77268
- :where(.theme-scope)
77269
- :where(
77270
- [data-block='event-registration'],
77271
- [data-block='course-registration']
77272
- )
77273
- .er-whole-series-step-label {
77274
- display: block;
76150
+ :where(.theme-scope) .newsletter-editorial-split {
76151
+ grid-template-columns: minmax(0, 1fr);
76152
+ gap: 2rem;
77275
76153
  }
77276
76154
  }
77277
76155
  }
77278
76156
 
77279
- :where(.theme-scope)
77280
- :where([data-block='event-registration'], [data-block='course-registration'])
77281
- .er-whole-series-step-label--active {
77282
- color: var(--er-on-surface);
77283
- font-weight: 600;
77284
- }
77285
-
77286
- :where(.theme-scope)
77287
- :where([data-block='event-registration'], [data-block='course-registration'])
77288
- .er-whole-series-step-connector {
77289
- flex: 1;
77290
- height: 2px;
77291
- background: var(--er-step-connector);
77292
- min-width: 1rem;
77293
- }
76157
+ /* =============================================================================
76158
+ * Success State
76159
+ * =============================================================================
76160
+ */
77294
76161
 
77295
- :where(.theme-scope)
77296
- :where([data-block='event-registration'], [data-block='course-registration'])
77297
- .er-whole-series-step-connector--completed {
77298
- background: var(--er-step-completed);
76162
+ :where(.theme-scope) .newsletter-success {
76163
+ text-align: center;
77299
76164
  }
77300
76165
 
77301
- :where(.theme-scope)
77302
- :where([data-block='event-registration'], [data-block='course-registration'])
77303
- .er-whole-series-step-check {
77304
- width: 0.875rem;
77305
- height: 0.875rem;
76166
+ :where(.theme-scope) .newsletter-success .fb-success {
76167
+ padding: 1rem 1.5rem;
76168
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
76169
+ border-radius: var(--radius-md, 0.5rem);
76170
+ color: rgb(var(--tb-text));
77306
76171
  }
77307
76172
 
77308
76173
  /* =============================================================================
77309
- * Lists
76174
+ * Block: Contact + Newsletter
77310
76175
  * =============================================================================
77311
76176
  */
77312
- :where(.theme-scope)
77313
- :where([data-block='event-registration'], [data-block='course-registration'])
77314
- .er-whole-series-run-list {
76177
+
76178
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
77315
76179
  display: grid;
77316
- gap: 1rem;
76180
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
76181
+ gap: clamp(2.5rem, 6vw, 4rem);
76182
+ align-items: start;
77317
76183
  }
77318
76184
 
77319
- /* =============================================================================
77320
- * Run cards
77321
- * =============================================================================
77322
- */
77323
- :where(.theme-scope)
77324
- :where([data-block='event-registration'], [data-block='course-registration'])
77325
- .er-whole-series-run-card {
77326
- border-radius: var(--rb-block-radius);
77327
- border: 1px solid var(--er-border);
77328
- padding: 1rem;
77329
- background: rgb(var(--tb-background));
77330
- cursor: pointer;
77331
- transition:
77332
- border-color var(--rb-block-transition) ease,
77333
- transform var(--rb-block-transition) ease;
76185
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
76186
+ min-width: 0;
77334
76187
  }
77335
76188
 
77336
- :where(.theme-scope)
77337
- :where([data-block='event-registration'], [data-block='course-registration'])
77338
- .er-whole-series-run-card:hover {
77339
- border-color: var(--er-border-hover);
77340
- transform: translateY(-1px);
76189
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
76190
+ margin-bottom: 1.5rem;
77341
76191
  }
77342
76192
 
77343
- :where(.theme-scope)
77344
- :where([data-block='event-registration'], [data-block='course-registration'])
77345
- .er-whole-series-run-card:focus-visible {
77346
- outline: 2px solid var(--er-focus-ring);
77347
- outline-offset: 2px;
76193
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
76194
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
76195
+ margin: 0 0 0.75rem;
77348
76196
  }
77349
76197
 
77350
- :where(.theme-scope)
77351
- :where([data-block='event-registration'], [data-block='course-registration'])
77352
- .er-whole-series-run-card--selected {
77353
- border-color: var(--er-border-selected);
77354
- box-shadow: 0 0 0 3px var(--er-focus-ring);
76198
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
76199
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
76200
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
77355
76201
  }
77356
76202
 
77357
- :where(.theme-scope)
77358
- :where([data-block='event-registration'], [data-block='course-registration'])
77359
- .er-whole-series-run-card__title {
77360
- margin: 0 0 0.25rem 0;
77361
- font-weight: 700;
77362
- font-size: 1.125rem;
76203
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
76204
+ display: flex;
76205
+ flex-direction: column;
76206
+ align-items: flex-start;
77363
76207
  }
77364
76208
 
77365
- :where(.theme-scope)
77366
- :where([data-block='event-registration'], [data-block='course-registration'])
77367
- .er-whole-series-run-card__status {
77368
- margin: 0.25rem 0 0 0;
77369
- opacity: 0.8;
76209
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
76210
+ max-width: none;
76211
+ margin-left: 0;
76212
+ margin-right: 0;
77370
76213
  }
77371
76214
 
77372
- :where(.theme-scope)
77373
- :where([data-block='event-registration'], [data-block='course-registration'])
77374
- .er-whole-series-run-card__sessions,
77375
- :where(.theme-scope)
77376
- :where([data-block='event-registration'], [data-block='course-registration'])
77377
- .er-whole-series-run-card__price,
77378
- :where(.theme-scope)
77379
- :where([data-block='event-registration'], [data-block='course-registration'])
77380
- .er-whole-series-run-card__capacity,
77381
- :where(.theme-scope)
77382
- :where([data-block='event-registration'], [data-block='course-registration'])
77383
- .er-whole-series-run-card__venue {
77384
- margin: 0.25rem 0 0 0;
77385
- opacity: 0.85;
76215
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
76216
+ text-align: left;
77386
76217
  }
77387
76218
 
77388
- /* =============================================================================
77389
- * Capacity Badges
77390
- * =============================================================================
77391
- */
77392
- :where(.theme-scope)
77393
- :where([data-block='event-registration'], [data-block='course-registration'])
77394
- .er-whole-series-capacity-badge {
77395
- display: inline-block;
77396
- padding: 0.125rem 0.5rem;
77397
- border-radius: 9999px;
77398
- font-size: 0.75rem;
77399
- font-weight: 500;
76219
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
76220
+ display: flex;
76221
+ flex-direction: column;
76222
+ gap: 1rem;
77400
76223
  }
77401
76224
 
77402
- :where(.theme-scope)
77403
- :where([data-block='event-registration'], [data-block='course-registration'])
77404
- .er-whole-series-capacity-badge--available {
77405
- background: var(--er-capacity-available-bg);
77406
- color: var(--er-capacity-available-text);
76225
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
76226
+ display: grid;
76227
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
76228
+ gap: 1rem;
77407
76229
  }
77408
76230
 
77409
- :where(.theme-scope)
77410
- :where([data-block='event-registration'], [data-block='course-registration'])
77411
- .er-whole-series-capacity-badge--low {
77412
- background: var(--er-capacity-low-bg);
77413
- color: var(--er-capacity-low-text);
76231
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
76232
+ display: flex;
76233
+ flex-direction: column;
76234
+ gap: 0.25rem;
77414
76235
  }
77415
76236
 
77416
- :where(.theme-scope)
77417
- :where([data-block='event-registration'], [data-block='course-registration'])
77418
- .er-whole-series-capacity-badge--soldout {
77419
- background: var(--er-capacity-soldout-bg);
77420
- color: var(--er-capacity-soldout-text);
76237
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
76238
+ display: flex;
76239
+ flex-direction: column;
76240
+ gap: 0.5rem;
76241
+ border: none;
76242
+ padding: 0;
76243
+ margin: 0;
77421
76244
  }
77422
76245
 
77423
- /* =============================================================================
77424
- * Summary + Details
77425
- * =============================================================================
77426
- */
77427
- :where(.theme-scope)
77428
- :where([data-block='event-registration'], [data-block='course-registration'])
77429
- .er-whole-series-details {
77430
- display: grid;
77431
- gap: 1rem;
76246
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
76247
+ display: flex;
76248
+ align-items: center;
76249
+ gap: 0.5rem;
77432
76250
  }
77433
76251
 
77434
- :where(.theme-scope)
77435
- :where([data-block='event-registration'], [data-block='course-registration'])
77436
- .er-whole-series-summary {
76252
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
76253
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
76254
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
77437
76255
  border-radius: var(--rb-block-radius);
77438
- border: 1px solid var(--er-summary-border);
77439
76256
  padding: 1rem;
77440
- background: var(--er-summary-bg);
77441
- }
77442
-
77443
- :where(.theme-scope)
77444
- :where([data-block='event-registration'], [data-block='course-registration'])
77445
- .er-whole-series-summary__title {
77446
- margin: 0;
77447
- font-size: 1.25rem;
77448
- font-weight: 800;
76257
+ font-size: 0.875rem;
77449
76258
  }
77450
76259
 
77451
- :where(.theme-scope)
77452
- :where([data-block='event-registration'], [data-block='course-registration'])
77453
- .er-whole-series-summary__sessions-title {
77454
- margin: 0.75rem 0 0.5rem 0;
77455
- font-weight: 700;
76260
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
76261
+ background-color: var(--fb-success-bg);
76262
+ color: var(--fb-success-text);
76263
+ border: 1px solid var(--fb-success-border);
77456
76264
  }
77457
76265
 
77458
- :where(.theme-scope)
77459
- :where([data-block='event-registration'], [data-block='course-registration'])
77460
- .er-whole-series-summary__sessions-list {
77461
- list-style: none;
77462
- padding: 0;
77463
- margin: 0;
77464
- display: grid;
77465
- gap: 0.35rem;
76266
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
76267
+ background-color: var(--fb-error-bg);
76268
+ color: var(--fb-error-text);
76269
+ border: 1px solid var(--fb-error-border);
77466
76270
  }
77467
76271
 
77468
- :where(.theme-scope)
77469
- :where([data-block='event-registration'], [data-block='course-registration'])
77470
- .er-whole-series-summary__session {
77471
- opacity: 0.9;
76272
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
76273
+ background-color: var(--fb-empty-bg);
76274
+ color: var(--fb-empty-text);
76275
+ border: 1px dashed var(--fb-empty-border);
76276
+ text-align: center;
77472
76277
  }
77473
76278
 
77474
- :where(.theme-scope)
77475
- :where([data-block='event-registration'], [data-block='course-registration'])
77476
- .er-whole-series-summary__venue,
77477
- :where(.theme-scope)
77478
- :where([data-block='event-registration'], [data-block='course-registration'])
77479
- .er-whole-series-summary__price,
77480
- :where(.theme-scope)
77481
- :where([data-block='event-registration'], [data-block='course-registration'])
77482
- .er-whole-series-summary__membership {
77483
- margin: 0.5rem 0 0 0;
77484
- opacity: 0.9;
76279
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
76280
+ margin-top: 0.5rem;
77485
76281
  }
77486
76282
 
77487
76283
  /* =============================================================================
77488
- * Form
76284
+ * Block: Team Members
77489
76285
  * =============================================================================
76286
+ *
76287
+ * Site/theme authors sometimes need different thumbnail shapes/sizes without
76288
+ * changing global fragment defaults. We expose these controls on the block and
76289
+ * style them via data attributes on the \`.rb-team-members\` wrapper.
77490
76290
  */
77491
- :where(.theme-scope)
77492
- :where([data-block='event-registration'], [data-block='course-registration'])
77493
- .er-whole-series-form {
77494
- display: grid;
77495
- gap: 1rem;
76291
+
76292
+ /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
76293
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
76294
+ text-align: left;
77496
76295
  }
77497
76296
 
77498
- :where(.theme-scope)
77499
- :where([data-block='event-registration'], [data-block='course-registration'])
77500
- .er-whole-series-form__field {
77501
- display: grid;
77502
- gap: 0.35rem;
76297
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
76298
+ align-items: flex-start;
76299
+ text-align: left;
77503
76300
  }
77504
76301
 
77505
- :where(.theme-scope)
77506
- :where([data-block='event-registration'], [data-block='course-registration'])
77507
- .er-whole-series-form__label {
77508
- font-size: 0.875rem;
77509
- font-weight: 600;
76302
+ @container rb-site (min-width: 1024px) {
76303
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
76304
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
76305
+ width: 75%;
76306
+ margin-left: 0;
76307
+ margin-right: auto;
76308
+ }
76309
+ }
77510
76310
  }
77511
76311
 
77512
- :where(.theme-scope)
77513
- :where([data-block='event-registration'], [data-block='course-registration'])
77514
- .er-whole-series-form__label--required::after {
77515
- content: ' *';
77516
- color: var(--er-required);
76312
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
76313
+ display: block;
76314
+ width: 100%;
76315
+ height: auto;
77517
76316
  }
77518
76317
 
77519
- :where(.theme-scope)
77520
- :where([data-block='event-registration'], [data-block='course-registration'])
77521
- .er-whole-series-form__input {
77522
- border-radius: calc(var(--rb-block-radius) * 0.6);
77523
- border: 1px solid var(--er-border);
77524
- padding: 0.6rem 0.75rem;
77525
- background: rgb(var(--tb-background));
77526
- color: rgb(var(--tb-foreground));
76318
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
76319
+ font-weight: 600;
77527
76320
  }
77528
76321
 
77529
- :where(.theme-scope)
77530
- :where([data-block='event-registration'], [data-block='course-registration'])
77531
- .er-whole-series-form__textarea {
77532
- border-radius: calc(var(--rb-block-radius) * 0.6);
77533
- border: 1px solid var(--er-border);
77534
- padding: 0.6rem 0.75rem;
77535
- background: rgb(var(--tb-background));
77536
- color: rgb(var(--tb-foreground));
77537
- resize: vertical;
76322
+ /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
76323
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
76324
+ --rb-team-thumb-max: 11.25rem; /* ~180px default */
76325
+ --rb-team-image-basis: 33.333%;
77538
76326
  }
77539
76327
 
77540
- :where(.theme-scope)
77541
- :where([data-block='event-registration'], [data-block='course-registration'])
77542
- .er-whole-series-form__input:focus,
77543
- :where(.theme-scope)
77544
- :where([data-block='event-registration'], [data-block='course-registration'])
77545
- .er-whole-series-form__textarea:focus {
77546
- outline: 2px solid var(--er-focus-ring);
77547
- outline-offset: 2px;
76328
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
76329
+ --rb-team-thumb-max: 8.75rem; /* ~140px */
76330
+ --rb-team-image-basis: 25%;
77548
76331
  }
77549
76332
 
77550
- :where(.theme-scope)
77551
- :where([data-block='event-registration'], [data-block='course-registration'])
77552
- .er-whole-series-form__input--error,
77553
- :where(.theme-scope)
77554
- :where([data-block='event-registration'], [data-block='course-registration'])
77555
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
77556
- border-color: var(--er-border-error);
76333
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
76334
+ --rb-team-thumb-max: 11.25rem; /* ~180px */
76335
+ --rb-team-image-basis: 33.333%;
77557
76336
  }
77558
76337
 
77559
- :where(.theme-scope)
77560
- :where([data-block='event-registration'], [data-block='course-registration'])
77561
- .er-whole-series-form__error {
77562
- font-size: 0.875rem;
77563
- color: var(--er-error-text);
76338
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
76339
+ --rb-team-thumb-max: 13.75rem; /* ~220px */
76340
+ --rb-team-image-basis: 40%;
77564
76341
  }
77565
76342
 
77566
- :where(.theme-scope)
77567
- :where([data-block='event-registration'], [data-block='course-registration'])
77568
- .er-whole-series-form__hint {
77569
- font-size: 0.875rem;
77570
- opacity: 0.7;
76343
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
76344
+ --rb-team-thumb-max: 17.5rem; /* ~280px */
76345
+ --rb-team-image-basis: 50%;
77571
76346
  }
77572
76347
 
77573
- /* Logged-in user hint with logout link */
77574
- :where(.theme-scope)
77575
- :where([data-block='event-registration'], [data-block='course-registration'])
77576
- .er-whole-series-logged-in-hint {
77577
- font-size: 0.875rem;
77578
- opacity: 0.7;
77579
- margin: 0.25rem 0 0 0;
76348
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
76349
+ --rb-team-thumb-max: 22.5rem; /* ~360px */
76350
+ --rb-team-image-basis: 66.667%;
77580
76351
  }
77581
76352
 
77582
- :where(.theme-scope)
77583
- :where([data-block='event-registration'], [data-block='course-registration'])
77584
- .er-whole-series-link {
77585
- background: none;
77586
- border: none;
77587
- padding: 0;
77588
- font-size: inherit;
77589
- color: rgb(var(--tb-primary));
77590
- cursor: pointer;
77591
- text-decoration: underline;
77592
- text-underline-offset: 2px;
76353
+ /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
76354
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo-wrap {
76355
+ width: 100%;
76356
+ overflow: hidden;
77593
76357
  }
77594
76358
 
77595
- :where(.theme-scope)
77596
- :where([data-block='event-registration'], [data-block='course-registration'])
77597
- .er-whole-series-link:hover {
77598
- text-decoration: none;
76359
+ /* In grid mode, cap thumbnail width so headshots don't dominate the card. */
76360
+ :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-member-photo-wrap) {
76361
+ max-width: var(--rb-team-thumb-max);
77599
76362
  }
77600
76363
 
77601
- /* =============================================================================
77602
- * Actions
77603
- * =============================================================================
77604
- */
77605
- :where(.theme-scope)
77606
- :where([data-block='event-registration'], [data-block='course-registration'])
77607
- .er-whole-series-actions {
77608
- display: flex;
77609
- align-items: center;
77610
- justify-content: space-between;
77611
- gap: 0.75rem;
77612
- margin-top: 0.25rem;
77613
- }
77614
-
77615
- :where(.theme-scope)
77616
- :where([data-block='event-registration'], [data-block='course-registration'])
77617
- .er-whole-series-back-btn {
77618
- border: 0;
77619
- background: transparent;
77620
- color: var(--er-on-surface);
77621
- opacity: 0.8;
77622
- padding: 0.25rem 0.25rem;
77623
- cursor: pointer;
77624
- }
77625
-
77626
- :where(.theme-scope)
77627
- :where([data-block='event-registration'], [data-block='course-registration'])
77628
- .er-whole-series-back-btn:hover {
77629
- opacity: 1;
77630
- text-decoration: underline;
77631
- }
77632
-
77633
- /* =============================================================================
77634
- * Payment Options
77635
- * =============================================================================
77636
- */
77637
- :where(.theme-scope)
77638
- :where([data-block='event-registration'], [data-block='course-registration'])
77639
- .er-whole-series-payment__options {
77640
- display: grid;
77641
- gap: 0.5rem;
77642
- }
77643
-
77644
- :where(.theme-scope)
77645
- :where([data-block='event-registration'], [data-block='course-registration'])
77646
- .er-whole-series-payment__option {
77647
- display: flex;
77648
- align-items: center;
77649
- gap: 0.5rem;
77650
- }
77651
-
77652
- /* =============================================================================
77653
- * Payment Tiles (Card Grid)
77654
- * =============================================================================
77655
- */
77656
- :where(.theme-scope)
77657
- :where([data-block='event-registration'], [data-block='course-registration'])
77658
- .er-whole-series-payment-tiles {
77659
- display: grid;
77660
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
77661
- gap: 0.75rem;
77662
- }
77663
-
77664
- :where(.theme-scope)
77665
- :where([data-block='event-registration'], [data-block='course-registration'])
77666
- .er-whole-series-payment-tile {
77667
- border-radius: var(--rb-block-radius);
77668
- border: 1px solid var(--er-payment-border);
77669
- padding: 1rem;
77670
- background: rgb(var(--tb-background));
77671
- cursor: pointer;
77672
- transition:
77673
- border-color 0.15s ease,
77674
- box-shadow 0.15s ease,
77675
- background-color 0.15s ease;
77676
- position: relative;
77677
- }
77678
-
77679
- :where(.theme-scope)
77680
- :where([data-block='event-registration'], [data-block='course-registration'])
77681
- .er-whole-series-payment-tile:hover {
77682
- border-color: var(--er-payment-border-hover);
77683
- }
77684
-
77685
- :where(.theme-scope)
77686
- :where([data-block='event-registration'], [data-block='course-registration'])
77687
- .er-whole-series-payment-tile:focus-visible {
77688
- outline: 2px solid var(--er-focus-ring);
77689
- outline-offset: 2px;
77690
- }
77691
-
77692
- :where(.theme-scope)
77693
- :where([data-block='event-registration'], [data-block='course-registration'])
77694
- .er-whole-series-payment-tile--selected {
77695
- border-color: var(--er-payment-border-selected);
77696
- background: var(--er-payment-bg-selected);
77697
- box-shadow: 0 0 0 3px var(--er-focus-ring);
77698
- }
77699
-
77700
- :where(.theme-scope)
77701
- :where([data-block='event-registration'], [data-block='course-registration'])
77702
- .er-whole-series-payment-tile--upsell {
77703
- border-style: dashed;
77704
- }
77705
-
77706
- :where(.theme-scope)
77707
- :where([data-block='event-registration'], [data-block='course-registration'])
77708
- .er-whole-series-payment-tile__header {
77709
- display: flex;
77710
- align-items: flex-start;
77711
- justify-content: space-between;
77712
- gap: 0.5rem;
77713
- }
77714
-
77715
- :where(.theme-scope)
77716
- :where([data-block='event-registration'], [data-block='course-registration'])
77717
- .er-whole-series-payment-tile__name {
77718
- margin: 0;
77719
- font-weight: 600;
77720
- font-size: 1rem;
77721
- }
77722
-
77723
- :where(.theme-scope)
77724
- :where([data-block='event-registration'], [data-block='course-registration'])
77725
- .er-whole-series-payment-tile__description {
77726
- margin: 0.25rem 0 0 0;
77727
- font-size: 0.875rem;
77728
- opacity: 0.7;
77729
- }
77730
-
77731
- :where(.theme-scope)
77732
- :where([data-block='event-registration'], [data-block='course-registration'])
77733
- .er-whole-series-payment-tile__price {
77734
- font-weight: 600;
77735
- font-size: 0.875rem;
77736
- white-space: nowrap;
77737
- }
77738
-
77739
- :where(.theme-scope)
77740
- :where([data-block='event-registration'], [data-block='course-registration'])
77741
- .er-whole-series-payment-tile__badge {
77742
- display: inline-block;
77743
- padding: 0.125rem 0.5rem;
77744
- border-radius: 9999px;
77745
- font-size: 0.75rem;
77746
- font-weight: 500;
77747
- margin-top: 0.5rem;
77748
- }
77749
-
77750
- /* Checkmark indicator on selected tile */
77751
- :where(.theme-scope)
77752
- :where([data-block='event-registration'], [data-block='course-registration'])
77753
- .er-whole-series-payment-tile__check {
77754
- position: absolute;
77755
- top: 0.5rem;
77756
- right: 0.5rem;
77757
- width: 1.25rem;
77758
- height: 1.25rem;
77759
- border-radius: 9999px;
77760
- background: var(--er-check-bg);
77761
- color: var(--er-check-text);
77762
- display: flex;
77763
- align-items: center;
77764
- justify-content: center;
77765
- opacity: 0;
77766
- transition: opacity 0.15s ease;
77767
- }
77768
-
77769
- :where(.theme-scope)
77770
- :where([data-block='event-registration'], [data-block='course-registration'])
77771
- .er-whole-series-payment-tile--selected
77772
- .er-whole-series-payment-tile__check {
77773
- opacity: 1;
77774
- }
77775
-
77776
- /* =============================================================================
77777
- * Booking Mode Step
77778
- * =============================================================================
77779
- */
77780
- :where(.theme-scope)
77781
- :where([data-block='event-registration'], [data-block='course-registration'])
77782
- .er-whole-series-booking-mode {
77783
- display: grid;
77784
- gap: 1rem;
77785
- }
77786
-
77787
- :where(.theme-scope)
77788
- :where([data-block='event-registration'], [data-block='course-registration'])
77789
- .er-whole-series-booking-mode__title {
77790
- margin: 0;
77791
- font-size: var(--er-step-title-size);
77792
- font-weight: 700;
77793
- }
77794
-
77795
- :where(.theme-scope)
77796
- :where([data-block='event-registration'], [data-block='course-registration'])
77797
- .er-whole-series-booking-mode__subtitle {
77798
- margin: 0.25rem 0 0 0;
77799
- opacity: 0.7;
77800
- }
77801
-
77802
- :where(.theme-scope)
77803
- :where([data-block='event-registration'], [data-block='course-registration'])
77804
- .er-whole-series-booking-mode__link {
77805
- margin-top: 0.5rem;
77806
- font-size: 0.875rem;
77807
- }
77808
-
77809
- :where(.theme-scope)
77810
- :where([data-block='event-registration'], [data-block='course-registration'])
77811
- .er-whole-series-booking-mode__link
77812
- a {
77813
- color: rgb(var(--tb-primary));
77814
- text-decoration: underline;
77815
- cursor: pointer;
77816
- }
77817
-
77818
- :where(.theme-scope)
77819
- :where([data-block='event-registration'], [data-block='course-registration'])
77820
- .er-whole-series-booking-mode__link
77821
- a:hover {
77822
- text-decoration: none;
77823
- }
77824
-
77825
- /* =============================================================================
77826
- * Membership Hero
77827
- * =============================================================================
77828
- */
77829
- :where(.theme-scope)
77830
- :where([data-block='event-registration'], [data-block='course-registration'])
77831
- .er-whole-series-membership-hero {
77832
- border-radius: var(--rb-block-radius);
77833
- background: var(--er-success-bg);
77834
- border: 1px solid rgba(var(--tb-success), 0.2);
77835
- padding: 1.5rem;
77836
- text-align: center;
77837
- }
77838
-
77839
- :where(.theme-scope)
77840
- :where([data-block='event-registration'], [data-block='course-registration'])
77841
- .er-whole-series-membership-hero__icon {
77842
- font-size: 2rem;
77843
- margin-bottom: 0.75rem;
77844
- }
77845
-
77846
- :where(.theme-scope)
77847
- :where([data-block='event-registration'], [data-block='course-registration'])
77848
- .er-whole-series-membership-hero__title {
77849
- margin: 0;
77850
- font-size: 1.25rem;
77851
- font-weight: 700;
77852
- color: var(--er-success-text);
77853
- }
77854
-
77855
- :where(.theme-scope)
77856
- :where([data-block='event-registration'], [data-block='course-registration'])
77857
- .er-whole-series-membership-hero__subtitle {
77858
- margin: 0.25rem 0 0 0;
77859
- font-size: 0.875rem;
77860
- opacity: 0.8;
77861
- }
77862
-
77863
- /* =============================================================================
77864
- * Portal Auth Sidebar
77865
- * =============================================================================
77866
- */
77867
- :where(.theme-scope)
77868
- :where([data-block='event-registration'], [data-block='course-registration'])
77869
- .er-whole-series-portal-sidebar {
77870
- border-radius: var(--rb-block-radius);
77871
- border: 1px solid var(--er-border);
77872
- padding: 1.25rem;
77873
- background: rgb(var(--tb-surface));
77874
- color: var(--er-on-surface);
77875
- }
77876
-
77877
- :where(.theme-scope)
77878
- :where([data-block='event-registration'], [data-block='course-registration'])
77879
- .er-whole-series-portal-sidebar__icon {
77880
- font-size: 1.5rem;
77881
- margin-bottom: 0.5rem;
77882
- }
77883
-
77884
- :where(.theme-scope)
77885
- :where([data-block='event-registration'], [data-block='course-registration'])
77886
- .er-whole-series-portal-sidebar__title {
77887
- margin: 0;
77888
- font-size: 1rem;
77889
- font-weight: 600;
77890
- }
77891
-
77892
- :where(.theme-scope)
77893
- :where([data-block='event-registration'], [data-block='course-registration'])
77894
- .er-whole-series-portal-sidebar__text {
77895
- margin: 0.5rem 0 0 0;
77896
- font-size: 0.875rem;
77897
- opacity: 0.8;
77898
- }
77899
-
77900
- :where(.theme-scope)
77901
- :where([data-block='event-registration'], [data-block='course-registration'])
77902
- .er-whole-series-portal-sidebar__action {
77903
- margin-top: 1rem;
77904
- }
77905
-
77906
- :where(.theme-scope)
77907
- :where([data-block='event-registration'], [data-block='course-registration'])
77908
- .er-whole-series-portal-sidebar__link {
77909
- color: rgb(var(--tb-primary));
77910
- cursor: pointer;
77911
- text-decoration: underline;
77912
- font-size: 0.875rem;
77913
- }
77914
-
77915
- :where(.theme-scope)
77916
- :where([data-block='event-registration'], [data-block='course-registration'])
77917
- .er-whole-series-portal-sidebar__link:hover {
77918
- text-decoration: none;
77919
- }
77920
-
77921
- /* =============================================================================
77922
- * Modal (for Magic Link)
77923
- * =============================================================================
77924
- */
77925
- :where(.theme-scope)
77926
- :where([data-block='event-registration'], [data-block='course-registration'])
77927
- .er-whole-series-modal-overlay {
77928
- position: fixed;
77929
- inset: 0;
77930
- background: rgba(var(--tb-scrim), 0.5);
77931
- display: flex;
77932
- align-items: center;
77933
- justify-content: center;
77934
- z-index: 100;
77935
- animation: er-whole-series-fade-in 0.15s ease;
77936
- }
77937
-
77938
- :where(.theme-scope)
77939
- :where([data-block='event-registration'], [data-block='course-registration'])
77940
- .er-whole-series-modal {
77941
- background: rgb(var(--tb-surface));
77942
- color: var(--er-on-surface);
77943
- border-radius: var(--rb-block-radius);
77944
- padding: 1.5rem;
77945
- max-width: 28rem;
77946
- width: calc(100% - 2rem);
77947
- position: relative;
77948
- animation: er-whole-series-slide-up 0.2s ease;
77949
- }
77950
-
77951
- :where(.theme-scope)
77952
- :where([data-block='event-registration'], [data-block='course-registration'])
77953
- .er-whole-series-modal-close {
77954
- position: absolute;
77955
- top: 0.75rem;
77956
- right: 0.75rem;
77957
- background: transparent;
77958
- border: 0;
77959
- padding: 0.25rem;
77960
- cursor: pointer;
77961
- opacity: 0.6;
77962
- transition: opacity 0.15s ease;
77963
- }
77964
-
77965
- :where(.theme-scope)
77966
- :where([data-block='event-registration'], [data-block='course-registration'])
77967
- .er-whole-series-modal-close:hover {
77968
- opacity: 1;
77969
- }
77970
-
77971
- @keyframes er-whole-series-fade-in {
77972
- from {
77973
- opacity: 0;
77974
- }
77975
- to {
77976
- opacity: 1;
77977
- }
77978
- }
77979
-
77980
- @keyframes er-whole-series-slide-up {
77981
- from {
77982
- opacity: 0;
77983
- transform: translateY(10px);
77984
- }
77985
- to {
77986
- opacity: 1;
77987
- transform: translateY(0);
77988
- }
77989
- }
77990
-
77991
- /* Reduced motion */
77992
- @media (prefers-reduced-motion: reduce) {
77993
- :where(.theme-scope)
77994
- :where(
77995
- [data-block='event-registration'],
77996
- [data-block='course-registration']
77997
- )
77998
- .er-whole-series-modal-overlay,
77999
- :where(.theme-scope)
78000
- :where(
78001
- [data-block='event-registration'],
78002
- [data-block='course-registration']
78003
- )
78004
- .er-whole-series-modal {
78005
- animation: none;
78006
- }
78007
- }
78008
-
78009
- /* =============================================================================
78010
- * Center States
78011
- * =============================================================================
78012
- */
78013
- :where(.theme-scope)
78014
- :where([data-block='event-registration'], [data-block='course-registration'])
78015
- .er-whole-series-center {
78016
- display: grid;
78017
- place-items: center;
78018
- gap: 0.75rem;
78019
- padding: 2rem 0;
78020
- }
78021
-
78022
- /* =============================================================================
78023
- * Success/Waitlist/Error States
78024
- * =============================================================================
78025
- */
78026
- :where(.theme-scope)
78027
- :where([data-block='event-registration'], [data-block='course-registration'])
78028
- .er-whole-series-success,
78029
- :where(.theme-scope)
78030
- :where([data-block='event-registration'], [data-block='course-registration'])
78031
- .er-whole-series-waitlist,
78032
- :where(.theme-scope)
78033
- :where([data-block='event-registration'], [data-block='course-registration'])
78034
- .er-whole-series-error,
78035
- :where(.theme-scope)
78036
- :where([data-block='event-registration'], [data-block='course-registration'])
78037
- .er-whole-series-payment-failed {
78038
- text-align: center;
78039
- padding: 2rem 1rem;
78040
- }
78041
-
78042
- /* State icon color variants (layout from registration-surface.css) */
78043
- :where(.theme-scope)
78044
- :where([data-block='event-registration'], [data-block='course-registration'])
78045
- .rb-state-icon--success {
78046
- background: var(--er-success-bg);
78047
- color: var(--er-success-text);
78048
- }
78049
-
78050
- :where(.theme-scope)
78051
- :where([data-block='event-registration'], [data-block='course-registration'])
78052
- .rb-state-icon--error {
78053
- background: var(--er-error-bg);
78054
- color: var(--er-error-text);
78055
- }
78056
-
78057
- :where(.theme-scope)
78058
- :where([data-block='event-registration'], [data-block='course-registration'])
78059
- .rb-state-icon--waitlist,
78060
- :where(.theme-scope)
78061
- :where([data-block='event-registration'], [data-block='course-registration'])
78062
- .rb-state-icon--warning {
78063
- background: var(--er-waitlist-bg);
78064
- color: var(--er-waitlist-text);
78065
- }
78066
-
78067
- :where(.theme-scope)
78068
- :where([data-block='event-registration'], [data-block='course-registration'])
78069
- .er-whole-series-success__title,
78070
- :where(.theme-scope)
78071
- :where([data-block='event-registration'], [data-block='course-registration'])
78072
- .er-whole-series-waitlist__title,
78073
- :where(.theme-scope)
78074
- :where([data-block='event-registration'], [data-block='course-registration'])
78075
- .er-whole-series-error__title,
78076
- :where(.theme-scope)
78077
- :where([data-block='event-registration'], [data-block='course-registration'])
78078
- .er-whole-series-payment-failed__title {
78079
- margin: 0.75rem 0 0.5rem 0;
78080
- font-size: 1.125rem;
78081
- font-weight: 700;
78082
- }
78083
-
78084
- :where(.theme-scope)
78085
- :where([data-block='event-registration'], [data-block='course-registration'])
78086
- .er-whole-series-success__message,
78087
- :where(.theme-scope)
78088
- :where([data-block='event-registration'], [data-block='course-registration'])
78089
- .er-whole-series-waitlist__message,
78090
- :where(.theme-scope)
78091
- :where([data-block='event-registration'], [data-block='course-registration'])
78092
- .er-whole-series-error__message,
78093
- :where(.theme-scope)
78094
- :where([data-block='event-registration'], [data-block='course-registration'])
78095
- .er-whole-series-payment-failed__message {
78096
- margin: 0;
78097
- opacity: 0.7;
78098
- }
78099
-
78100
- :where(.theme-scope)
78101
- :where([data-block='event-registration'], [data-block='course-registration'])
78102
- .er-whole-series-success__membership {
78103
- margin-top: 0.5rem;
78104
- font-size: 0.875rem;
78105
- color: var(--er-success-text);
78106
- }
78107
-
78108
- :where(.theme-scope)
78109
- :where([data-block='event-registration'], [data-block='course-registration'])
78110
- .er-whole-series-error__retry,
78111
- :where(.theme-scope)
78112
- :where([data-block='event-registration'], [data-block='course-registration'])
78113
- .er-whole-series-payment-failed__retry {
78114
- margin-top: 1rem;
78115
- }
78116
-
78117
- /* =============================================================================
78118
- * Discount Code Section
78119
- * =============================================================================
78120
- */
78121
- :where(.theme-scope)
78122
- :where([data-block='event-registration'], [data-block='course-registration'])
78123
- .er-whole-series-discount {
78124
- margin-top: 0.5rem;
78125
- }
78126
-
78127
- :where(.theme-scope)
78128
- :where([data-block='event-registration'], [data-block='course-registration'])
78129
- .er-whole-series-discount__form {
78130
- display: grid;
78131
- gap: 0.5rem;
78132
- }
78133
-
78134
- :where(.theme-scope)
78135
- :where([data-block='event-registration'], [data-block='course-registration'])
78136
- .er-whole-series-discount__toggle {
78137
- background: transparent;
78138
- border: 0;
78139
- padding: 0;
78140
- color: rgb(var(--tb-primary));
78141
- cursor: pointer;
78142
- font-size: 0.875rem;
78143
- text-decoration: underline;
78144
- }
78145
-
78146
- :where(.theme-scope)
78147
- :where([data-block='event-registration'], [data-block='course-registration'])
78148
- .er-whole-series-discount__toggle:hover {
78149
- text-decoration: none;
78150
- }
78151
-
78152
- :where(.theme-scope)
78153
- :where([data-block='event-registration'], [data-block='course-registration'])
78154
- .er-whole-series-discount__label {
78155
- font-size: 0.875rem;
78156
- font-weight: 600;
78157
- }
78158
-
78159
- :where(.theme-scope)
78160
- :where([data-block='event-registration'], [data-block='course-registration'])
78161
- .er-whole-series-discount__row {
78162
- display: flex;
78163
- gap: 0.5rem;
78164
- }
78165
-
78166
- :where(.theme-scope)
78167
- :where([data-block='event-registration'], [data-block='course-registration'])
78168
- .er-whole-series-discount__input {
78169
- flex: 1;
78170
- border-radius: calc(var(--rb-block-radius) * 0.6);
78171
- border: 1px solid var(--er-border);
78172
- padding: 0.5rem 0.75rem;
78173
- background: rgb(var(--tb-background));
78174
- color: rgb(var(--tb-foreground));
78175
- font-size: 0.875rem;
78176
- }
78177
-
78178
- :where(.theme-scope)
78179
- :where([data-block='event-registration'], [data-block='course-registration'])
78180
- .er-whole-series-discount__input:focus {
78181
- outline: 2px solid var(--er-focus-ring);
78182
- outline-offset: 2px;
78183
- }
78184
-
78185
- :where(.theme-scope)
78186
- :where([data-block='event-registration'], [data-block='course-registration'])
78187
- .er-whole-series-discount__remove {
78188
- background: transparent;
78189
- border: 0;
78190
- padding: 0.25rem;
78191
- cursor: pointer;
78192
- opacity: 0.6;
78193
- }
78194
-
78195
- :where(.theme-scope)
78196
- :where([data-block='event-registration'], [data-block='course-registration'])
78197
- .er-whole-series-discount__apply {
78198
- background: transparent;
78199
- border: 0;
78200
- padding: 0.25rem;
78201
- cursor: pointer;
78202
- opacity: 0.8;
78203
- }
78204
-
78205
- :where(.theme-scope)
78206
- :where([data-block='event-registration'], [data-block='course-registration'])
78207
- .er-whole-series-discount__remove:hover {
78208
- opacity: 1;
78209
- }
78210
-
78211
- :where(.theme-scope)
78212
- :where([data-block='event-registration'], [data-block='course-registration'])
78213
- .er-whole-series-discount__apply:hover {
78214
- opacity: 1;
78215
- }
78216
-
78217
- :where(.theme-scope)
78218
- :where([data-block='event-registration'], [data-block='course-registration'])
78219
- .er-whole-series-discount__hint {
78220
- margin: 0;
78221
- font-size: 0.875rem;
78222
- opacity: 0.7;
78223
- }
78224
-
78225
- :where(.theme-scope)
78226
- :where([data-block='event-registration'], [data-block='course-registration'])
78227
- .er-whole-series-discount__feedback {
78228
- margin: 0;
78229
- font-size: 0.875rem;
78230
- }
78231
-
78232
- /* =============================================================================
78233
- * Altcha (Spam Protection)
78234
- * =============================================================================
78235
- */
78236
- :where(.theme-scope)
78237
- :where([data-block='event-registration'], [data-block='course-registration'])
78238
- .er-whole-series-altcha {
78239
- margin-top: 1rem;
78240
- }
78241
-
78242
- /* =============================================================================
78243
- * Magic Link Form
78244
- * =============================================================================
78245
- */
78246
- :where(.theme-scope)
78247
- :where([data-block='event-registration'], [data-block='course-registration'])
78248
- .er-whole-series-magic-link-form {
78249
- display: flex;
78250
- flex-direction: column;
78251
- gap: 0.75rem;
78252
- }
78253
-
78254
- :where(.theme-scope)
78255
- :where([data-block='event-registration'], [data-block='course-registration'])
78256
- .er-whole-series-magic-link-title {
78257
- margin: 0;
78258
- font-size: 1.25rem;
78259
- font-weight: 700;
78260
- }
78261
-
78262
- :where(.theme-scope)
78263
- :where([data-block='event-registration'], [data-block='course-registration'])
78264
- .er-whole-series-magic-link-success {
78265
- display: flex;
78266
- flex-direction: column;
78267
- gap: 0.75rem;
78268
- }
78269
-
78270
- :where(.theme-scope)
78271
- :where([data-block='event-registration'], [data-block='course-registration'])
78272
- .er-whole-series-portal-auth-text {
78273
- margin: 0;
78274
- font-size: 0.875rem;
78275
- opacity: 0.8;
78276
- }
78277
-
78278
- :where(.theme-scope)
78279
- :where([data-block='event-registration'], [data-block='course-registration'])
78280
- .er-whole-series-portal-auth-text--success {
78281
- color: var(--er-success-text);
78282
- }
78283
-
78284
- :where(.theme-scope)
78285
- :where([data-block='event-registration'], [data-block='course-registration'])
78286
- .er-whole-series-portal-auth-text--error {
78287
- color: var(--er-error-text);
78288
- }
78289
-
78290
- :where(.theme-scope)
78291
- :where([data-block='event-registration'], [data-block='course-registration'])
78292
- .er-whole-series-modal-btn {
78293
- border-radius: calc(var(--rb-block-radius) * 0.6);
78294
- border: 0;
78295
- padding: 0.6rem 1rem;
78296
- font-size: 0.875rem;
78297
- font-weight: 600;
78298
- cursor: pointer;
78299
- transition: opacity 0.15s ease;
78300
- background: rgb(var(--tb-primary));
78301
- color: rgb(var(--tb-primaryText, 255 255 255));
78302
- }
78303
-
78304
- :where(.theme-scope)
78305
- :where([data-block='event-registration'], [data-block='course-registration'])
78306
- .er-whole-series-modal-btn:hover {
78307
- opacity: 0.9;
78308
- }
78309
-
78310
- :where(.theme-scope)
78311
- :where([data-block='event-registration'], [data-block='course-registration'])
78312
- .er-whole-series-modal-btn:disabled {
78313
- opacity: 0.5;
78314
- cursor: not-allowed;
78315
- }
78316
-
78317
- :where(.theme-scope)
78318
- :where([data-block='event-registration'], [data-block='course-registration'])
78319
- .er-whole-series-modal-btn--secondary {
78320
- background: transparent;
78321
- color: var(--er-on-surface);
78322
- border: 1px solid var(--er-border);
78323
- }
78324
-
78325
- :where(.theme-scope)
78326
- :where([data-block='event-registration'], [data-block='course-registration'])
78327
- .er-whole-series-modal-btn--secondary:hover {
78328
- background: var(--er-on-surface-hover-bg);
78329
- }
78330
-
78331
- /* =============================================================================
78332
- * Utility Classes
78333
- * =============================================================================
78334
- */
78335
- :where(.theme-scope)
78336
- :where([data-block='event-registration'], [data-block='course-registration'])
78337
- .er-whole-series-text--muted {
78338
- opacity: 0.7;
78339
- }
78340
-
78341
- :where(.theme-scope)
78342
- :where([data-block='event-registration'], [data-block='course-registration'])
78343
- .er-whole-series-text--error {
78344
- color: var(--er-error-text);
78345
- }
78346
-
78347
- :where(.theme-scope)
78348
- :where([data-block='event-registration'], [data-block='course-registration'])
78349
- .er-whole-series-text--success {
78350
- color: var(--er-success-text);
78351
- }
78352
-
78353
- :where(.theme-scope)
78354
- :where([data-block='event-registration'], [data-block='course-registration'])
78355
- .er-whole-series-sr-only {
78356
- position: absolute;
78357
- width: 1px;
78358
- height: 1px;
78359
- padding: 0;
78360
- margin: -1px;
78361
- overflow: hidden;
78362
- clip: rect(0, 0, 0, 0);
78363
- white-space: nowrap;
78364
- border-width: 0;
78365
- }
78366
-
78367
- /* Stack utility */
78368
- :where(.theme-scope)
78369
- :where([data-block='event-registration'], [data-block='course-registration'])
78370
- .er-whole-series-stack {
78371
- display: flex;
78372
- flex-direction: column;
78373
- }
78374
-
78375
- :where(.theme-scope)
78376
- :where([data-block='event-registration'], [data-block='course-registration'])
78377
- .er-whole-series-stack--gap-sm {
78378
- gap: 0.5rem;
78379
- }
78380
-
78381
- :where(.theme-scope)
78382
- :where([data-block='event-registration'], [data-block='course-registration'])
78383
- .er-whole-series-stack--gap-md {
78384
- gap: 1rem;
78385
- }
78386
-
78387
- :where(.theme-scope)
78388
- :where([data-block='event-registration'], [data-block='course-registration'])
78389
- .er-whole-series-stack--gap-lg {
78390
- gap: 1.5rem;
78391
- }
78392
-
78393
- /* =============================================================================
78394
- * Block: Newsletter Signup
78395
- * =============================================================================
78396
- */
78397
-
78398
- /* Newsletter copy styling */
78399
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
78400
- font-size: 1.5rem;
78401
- font-weight: 600;
78402
- }
78403
-
78404
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
78405
- font-size: 1rem;
78406
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78407
- opacity: 0.85;
78408
- }
78409
-
78410
- /* Newsletter form container */
78411
- :where(.theme-scope) .newsletter-form {
78412
- width: 100%;
78413
- max-width: 32rem;
78414
- margin-left: auto;
78415
- margin-right: auto;
78416
- }
78417
-
78418
- /* Newsletter form fields container */
78419
- :where(.theme-scope) .newsletter-form-fields {
78420
- display: flex;
78421
- flex-direction: column;
78422
- gap: var(--rb-gap-sm, 0.75rem);
78423
- }
78424
-
78425
- /* Individual field styling */
78426
- :where(.theme-scope) .newsletter-field {
78427
- display: flex;
78428
- flex-direction: column;
78429
- gap: 0.25rem;
78430
- }
78431
-
78432
- /* Required indicator */
78433
- :where(.theme-scope) .newsletter-required {
78434
- color: rgb(var(--tb-primary));
78435
- margin-left: 0.125rem;
78436
- }
78437
-
78438
- /* Submit button container */
78439
- :where(.theme-scope) .newsletter-submit {
78440
- margin-top: 0.5rem;
78441
- }
78442
-
78443
- /* ALTCHA widget container */
78444
- :where(.theme-scope) .newsletter-altcha {
78445
- margin-top: 0.75rem;
78446
- display: flex;
78447
- justify-content: center;
78448
- }
78449
-
78450
- /* Privacy note */
78451
- :where(.theme-scope) .newsletter-privacy-note {
78452
- margin-top: 0.75rem;
78453
- font-size: 1rem;
78454
- line-height: 1.6;
78455
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78456
- text-align: center;
78457
- }
78458
-
78459
- /* =============================================================================
78460
- * Inline Variant - Horizontal layout
78461
- * =============================================================================
78462
- */
78463
-
78464
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
78465
- flex-direction: row;
78466
- align-items: flex-end;
78467
- flex-wrap: wrap;
78468
- gap: var(--rb-gap-sm, 0.75rem);
78469
- }
78470
-
78471
- :where(.theme-scope) .newsletter-inline .newsletter-field {
78472
- flex: 1 1 auto;
78473
- min-width: 10rem;
78474
- }
78475
-
78476
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
78477
- margin-top: 0;
78478
- flex-shrink: 0;
78479
- }
78480
-
78481
- /* Mobile fallback for inline variant */
78482
- @container rb-site (max-width: 640px) {
78483
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
78484
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
78485
- flex-direction: column;
78486
- }
78487
-
78488
- :where(.theme-scope) .newsletter-inline .newsletter-field {
78489
- min-width: 100%;
78490
- }
78491
- }
78492
- }
78493
-
78494
- /* =============================================================================
78495
- * Editorial Split Variant
78496
- * =============================================================================
78497
- */
78498
-
78499
- :where(.theme-scope) .newsletter-editorial-split {
78500
- display: grid;
78501
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
78502
- gap: clamp(2.5rem, 7vw, 7rem);
78503
- align-items: center;
78504
- text-align: left;
78505
- }
78506
-
78507
- :where(.theme-scope) .newsletter-editorial-split-copy {
78508
- display: flex;
78509
- flex-direction: column;
78510
- gap: var(--rb-gap-sm, 0.75rem);
78511
- }
78512
-
78513
- :where(.theme-scope) .newsletter-editorial-split-form {
78514
- min-width: 0;
78515
- }
78516
-
78517
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
78518
- max-width: none;
78519
- margin-inline: 0;
78520
- }
78521
-
78522
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
78523
- font-size: clamp(2rem, 4vw, 3.5rem);
78524
- font-weight: 500;
78525
- }
78526
-
78527
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
78528
- text-align: left;
78529
- }
78530
-
78531
- @container rb-site (max-width: 767px) {
78532
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
78533
- :where(.theme-scope) .newsletter-editorial-split {
78534
- grid-template-columns: minmax(0, 1fr);
78535
- gap: 2rem;
78536
- }
78537
- }
78538
- }
78539
-
78540
- /* =============================================================================
78541
- * Success State
78542
- * =============================================================================
78543
- */
78544
-
78545
- :where(.theme-scope) .newsletter-success {
78546
- text-align: center;
78547
- }
78548
-
78549
- :where(.theme-scope) .newsletter-success .fb-success {
78550
- padding: 1rem 1.5rem;
78551
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
78552
- border-radius: var(--radius-md, 0.5rem);
78553
- color: rgb(var(--tb-text));
78554
- }
78555
-
78556
- /* =============================================================================
78557
- * Block: Contact + Newsletter
78558
- * =============================================================================
78559
- */
78560
-
78561
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
78562
- display: grid;
78563
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
78564
- gap: clamp(2.5rem, 6vw, 4rem);
78565
- align-items: start;
78566
- }
78567
-
78568
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
78569
- min-width: 0;
78570
- }
78571
-
78572
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
78573
- margin-bottom: 1.5rem;
78574
- }
78575
-
78576
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
78577
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
78578
- margin: 0 0 0.75rem;
78579
- }
78580
-
78581
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
78582
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
78583
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78584
- }
78585
-
78586
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
78587
- display: flex;
78588
- flex-direction: column;
78589
- align-items: flex-start;
78590
- }
78591
-
78592
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
78593
- max-width: none;
78594
- margin-left: 0;
78595
- margin-right: 0;
78596
- }
78597
-
78598
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
78599
- text-align: left;
78600
- }
78601
-
78602
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
78603
- display: flex;
78604
- flex-direction: column;
78605
- gap: 1rem;
78606
- }
78607
-
78608
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
78609
- display: grid;
78610
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
78611
- gap: 1rem;
78612
- }
78613
-
78614
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
78615
- display: flex;
78616
- flex-direction: column;
78617
- gap: 0.25rem;
78618
- }
78619
-
78620
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
78621
- display: flex;
78622
- flex-direction: column;
78623
- gap: 0.5rem;
78624
- border: none;
78625
- padding: 0;
78626
- margin: 0;
78627
- }
78628
-
78629
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
78630
- display: flex;
78631
- align-items: center;
78632
- gap: 0.5rem;
78633
- }
78634
-
78635
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
78636
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
78637
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
78638
- border-radius: var(--rb-block-radius);
78639
- padding: 1rem;
78640
- font-size: 0.875rem;
78641
- }
78642
-
78643
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
78644
- background-color: var(--fb-success-bg);
78645
- color: var(--fb-success-text);
78646
- border: 1px solid var(--fb-success-border);
78647
- }
78648
-
78649
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
78650
- background-color: var(--fb-error-bg);
78651
- color: var(--fb-error-text);
78652
- border: 1px solid var(--fb-error-border);
78653
- }
78654
-
78655
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
78656
- background-color: var(--fb-empty-bg);
78657
- color: var(--fb-empty-text);
78658
- border: 1px dashed var(--fb-empty-border);
78659
- text-align: center;
78660
- }
78661
-
78662
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
78663
- margin-top: 0.5rem;
78664
- }
78665
-
78666
- /* =============================================================================
78667
- * Block: Team Members
78668
- * =============================================================================
78669
- *
78670
- * Site/theme authors sometimes need different thumbnail shapes/sizes without
78671
- * changing global fragment defaults. We expose these controls on the block and
78672
- * style them via data attributes on the \`.rb-team-members\` wrapper.
78673
- */
78674
-
78675
- /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
78676
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
78677
- text-align: left;
78678
- }
78679
-
78680
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
78681
- align-items: flex-start;
78682
- text-align: left;
78683
- }
78684
-
78685
- @container rb-site (min-width: 1024px) {
78686
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
78687
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
78688
- width: 75%;
78689
- margin-left: 0;
78690
- margin-right: auto;
78691
- }
78692
- }
78693
- }
78694
-
78695
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
78696
- display: block;
78697
- width: 100%;
78698
- height: auto;
78699
- }
78700
-
78701
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
78702
- font-weight: 600;
78703
- }
78704
-
78705
- /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
78706
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
78707
- --rb-team-thumb-max: 11.25rem; /* ~180px default */
78708
- --rb-team-image-basis: 33.333%;
78709
- }
78710
-
78711
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
78712
- --rb-team-thumb-max: 8.75rem; /* ~140px */
78713
- --rb-team-image-basis: 25%;
78714
- }
78715
-
78716
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
78717
- --rb-team-thumb-max: 11.25rem; /* ~180px */
78718
- --rb-team-image-basis: 33.333%;
78719
- }
78720
-
78721
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
78722
- --rb-team-thumb-max: 13.75rem; /* ~220px */
78723
- --rb-team-image-basis: 40%;
78724
- }
78725
-
78726
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
78727
- --rb-team-thumb-max: 17.5rem; /* ~280px */
78728
- --rb-team-image-basis: 50%;
78729
- }
78730
-
78731
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
78732
- --rb-team-thumb-max: 22.5rem; /* ~360px */
78733
- --rb-team-image-basis: 66.667%;
78734
- }
78735
-
78736
- /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
78737
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo-wrap {
78738
- width: 100%;
78739
- overflow: hidden;
78740
- }
78741
-
78742
- /* In grid mode, cap thumbnail width so headshots don't dominate the card. */
78743
- :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-member-photo-wrap) {
78744
- max-width: var(--rb-team-thumb-max);
78745
- }
78746
-
78747
- :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) {
78748
- margin-left: auto;
78749
- margin-right: auto;
76364
+ :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) {
76365
+ margin-left: auto;
76366
+ margin-right: auto;
78750
76367
  }
78751
76368
 
78752
76369
  /* Stack variant: always left-aligned, regardless of the block alignment field. */
@@ -82455,6 +80072,68 @@ function parsePublicProductCategorySelector(value) {
82455
80072
  };
82456
80073
  }
82457
80074
  //#endregion
80075
+ //#region ../api/src/bookingPaymentTermSchemas.ts
80076
+ const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
80077
+ const bookingInstalmentPlanSchema = z$1.discriminatedUnion("kind", [
80078
+ z$1.object({
80079
+ kind: z$1.literal("deposit_plus_one_remainder"),
80080
+ depositAmountCents: z$1.number().int().nonnegative(),
80081
+ depositRefundability: bookingDepositRefundPolicySchema,
80082
+ remainderDueCount: z$1.number().int().positive(),
80083
+ intervalUnit: z$1.enum([
80084
+ "day",
80085
+ "week",
80086
+ "month"
80087
+ ])
80088
+ }),
80089
+ z$1.object({
80090
+ kind: z$1.literal("deposit_plus_scheduled_instalments"),
80091
+ depositAmountCents: z$1.number().int().nonnegative(),
80092
+ depositRefundability: bookingDepositRefundPolicySchema,
80093
+ instalmentCount: z$1.number().int().positive(),
80094
+ intervalCount: z$1.number().int().positive(),
80095
+ intervalUnit: z$1.enum([
80096
+ "day",
80097
+ "week",
80098
+ "month"
80099
+ ])
80100
+ }),
80101
+ z$1.object({
80102
+ kind: z$1.literal("equal_scheduled_instalments"),
80103
+ instalmentCount: z$1.number().int().positive(),
80104
+ intervalCount: z$1.number().int().positive(),
80105
+ intervalUnit: z$1.enum([
80106
+ "day",
80107
+ "week",
80108
+ "month"
80109
+ ])
80110
+ })
80111
+ ]);
80112
+ const bookingFlexibleBalanceDueDateRuleSchema = z$1.discriminatedUnion("kind", [z$1.object({
80113
+ kind: z$1.literal("relative_to_start_date"),
80114
+ daysBeforeStart: z$1.number().int().positive()
80115
+ }), z$1.object({
80116
+ kind: z$1.literal("fixed_calendar_date"),
80117
+ dueAt: z$1.string().datetime()
80118
+ })]);
80119
+ const bookingFlexibleBalanceConfigSchema = z$1.object({
80120
+ upfrontAmountCents: z$1.number().int().nonnegative(),
80121
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
80122
+ depositRefundability: bookingDepositRefundPolicySchema
80123
+ });
80124
+ z$1.discriminatedUnion("kind", [
80125
+ z$1.object({ kind: z$1.literal("upfront") }),
80126
+ z$1.object({ kind: z$1.literal("deferred_manual") }),
80127
+ z$1.object({
80128
+ kind: z$1.literal("instalment_plan"),
80129
+ plan: bookingInstalmentPlanSchema
80130
+ }),
80131
+ z$1.object({
80132
+ kind: z$1.literal("flexible_balance"),
80133
+ config: bookingFlexibleBalanceConfigSchema
80134
+ })
80135
+ ]);
80136
+ //#endregion
82458
80137
  //#region ../api/src/navigationMenuValidation.ts
82459
80138
  function hasChildren(item) {
82460
80139
  return Array.isArray(item.children) && item.children.length > 0;
@@ -84022,40 +81701,6 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
84022
81701
  plural: "Events"
84023
81702
  }
84024
81703
  },
84025
- course: {
84026
- version: 1,
84027
- fields: [
84028
- {
84029
- id: "summary",
84030
- type: "textarea",
84031
- label: "Summary",
84032
- description: "Short teaser shown in listings.",
84033
- rows: 3
84034
- },
84035
- {
84036
- id: "image",
84037
- type: "media",
84038
- label: "Listing image",
84039
- description: "Optional image used for course cards and previews."
84040
- },
84041
- {
84042
- id: "body",
84043
- type: "richText",
84044
- label: "Details",
84045
- description: "Full course details and curriculum."
84046
- }
84047
- ],
84048
- routing: {
84049
- enabled: true,
84050
- pattern: "/courses/{slug}",
84051
- slugField: "slug",
84052
- prefix: "/courses/"
84053
- },
84054
- labels: {
84055
- singular: "Course",
84056
- plural: "Courses"
84057
- }
84058
- },
84059
81704
  "team-member": {
84060
81705
  version: 1,
84061
81706
  fields: [
@@ -84255,7 +81900,7 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
84255
81900
  function deriveFieldIdSet(schema) {
84256
81901
  return new Set(schema.fields.map((f) => f.id));
84257
81902
  }
84258
- 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"]);
81903
+ 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"]);
84259
81904
  //#endregion
84260
81905
  //#region ../field-primitives/src/bindings/index.ts
84261
81906
  const BINDING_TRANSFORMS$1 = {
@@ -84338,7 +81983,6 @@ function selectBlocksForDeclaredEntrySlot(input) {
84338
81983
  //#region ../content-model/src/templates/defaults.ts
84339
81984
  const POST_EXCERPT_FALLBACK = fallbackBinding$1(fieldBinding$1("excerpt"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84340
81985
  const EVENT_SUBHEADLINE_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84341
- const COURSE_SUMMARY_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84342
81986
  const ENTRY_TITLE_INLINE_TEXT = transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.TEXT_INLINE_TEXT, { input: metaBinding$1("title") });
84343
81987
  const POST_BODY_TEXT_BINDINGS = {
84344
81988
  body: fieldBinding$1("body"),
@@ -84453,7 +82097,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
84453
82097
  showVenue: true,
84454
82098
  showCapacity: true,
84455
82099
  successMessage: "Thank you for registering! Check your email for confirmation details.",
84456
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
84457
82100
  buttonText: "Complete Registration",
84458
82101
  buttonVariant: "primary"
84459
82102
  },
@@ -84464,64 +82107,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
84464
82107
  }
84465
82108
  ]
84466
82109
  },
84467
- course: {
84468
- templateKey: "default",
84469
- name: "Course detail",
84470
- description: "Standard landing page for multi-session courses.",
84471
- metadata: {},
84472
- blocks: [
84473
- {
84474
- blockKind: "block.hero",
84475
- scope: "entry",
84476
- bindings: {
84477
- eyebrow: literalBinding$1("Course"),
84478
- headline: metaBinding$1("title"),
84479
- headlineInline: ENTRY_TITLE_INLINE_TEXT,
84480
- subheadline: COURSE_SUMMARY_FALLBACK
84481
- }
84482
- },
84483
- {
84484
- blockKind: "block.course-details",
84485
- scope: "entry",
84486
- content: {
84487
- heading: "Course details",
84488
- showTitle: false,
84489
- showDescription: false,
84490
- showSessions: true,
84491
- sessionsLimit: "10",
84492
- showVenue: true,
84493
- showPrice: true,
84494
- showCapacity: true,
84495
- showEnrollmentStatus: true,
84496
- showMembershipNote: true
84497
- }
84498
- },
84499
- {
84500
- blockKind: SYSTEM_ENTRY_SLOT_BLOCK_KIND,
84501
- scope: "template",
84502
- content: {
84503
- slotKey: "main",
84504
- label: "Page content"
84505
- }
84506
- },
84507
- {
84508
- blockKind: "block.course-registration",
84509
- scope: "entry",
84510
- content: {
84511
- heading: "Enroll in this course",
84512
- showSessions: true,
84513
- showPrice: true,
84514
- showCapacity: true,
84515
- showVenue: true,
84516
- successMessage: "You're enrolled! Check your email for confirmation and session details.",
84517
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
84518
- membershipMessage: "Enrolled using your membership! Check your email for session details.",
84519
- buttonText: "Complete Enrollment",
84520
- buttonVariant: "primary"
84521
- }
84522
- }
84523
- ]
84524
- },
84525
82110
  "team-member": {
84526
82111
  templateKey: "default",
84527
82112
  name: "Team member profile",
@@ -87480,7 +85065,7 @@ var CircuitOpenError = class extends Error {
87480
85065
  * 1. This constant
87481
85066
  * 2. The "version" field in package.json
87482
85067
  */
87483
- const SDK_VERSION = "0.134.0";
85068
+ const SDK_VERSION = "0.135.0";
87484
85069
  //#endregion
87485
85070
  //#region src/next/content-load-failure.ts
87486
85071
  const SdkContentLoadError = RiverbankContentLoadError;