@riverbankcms/sdk 0.135.1 → 0.137.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 (220) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/README.md +4 -8
  3. package/dist/{PreviewEditorSidebar-D4p_5TdY.mjs → PreviewEditorSidebar-Bn6cONPa.mjs} +8 -8
  4. package/dist/{PreviewEditorUI-D0cRoTX1.mjs → PreviewEditorUI-LAwXZPSx.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-DcgaESkm.mjs → PreviewQueryProvider-ztQUdsNo.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-BKLtM3Nz.mjs → SdkPreviewModeRuntime-BbbGsI_v.mjs} +621 -238
  7. package/dist/{SiteChromeCustomizeContext-61X2m7QV.mjs → SiteChromeCustomizeContext-BbkNSt5a.mjs} +5041 -2407
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +18 -850
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +412 -2316
  10. package/dist/_dts/ai/src/designer/themePatch.d.ts +5 -10
  11. package/dist/_dts/api/src/accessAdmin.d.ts +1 -9
  12. package/dist/_dts/api/src/accountApi.d.ts +49 -2
  13. package/dist/_dts/api/src/contentRuntime.d.ts +7 -4
  14. package/dist/_dts/api/src/domainConnection.d.ts +41 -0
  15. package/dist/_dts/api/src/endpoints.d.ts +201 -181
  16. package/dist/_dts/api/src/index.d.ts +5 -3
  17. package/dist/_dts/api/src/media.d.ts +19 -2
  18. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +7 -0
  19. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +26 -0
  20. package/dist/_dts/api/src/sdkBlockContentAdmission.d.ts +5 -0
  21. package/dist/_dts/api/src/sdkContracts.d.ts +2 -15
  22. package/dist/_dts/api/src/sdkMediaContracts.d.ts +40 -0
  23. package/dist/_dts/api/src/sdkMediaEndpointDefinitions.d.ts +61 -0
  24. package/dist/_dts/api/src/sdkThemeWire.d.ts +21 -436
  25. package/dist/_dts/api/src/siteInfrastructure.d.ts +17 -23
  26. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +7 -21
  27. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +27 -3
  28. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +37 -17
  29. package/dist/_dts/api/src/types.d.ts +1 -1
  30. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +2 -3
  31. package/dist/_dts/block-form/src/utils/slug.d.ts +6 -0
  32. package/dist/_dts/blocks/src/PageRenderer.d.ts +13 -7
  33. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +48 -0
  34. package/dist/_dts/blocks/src/definitions.d.ts +14 -0
  35. package/dist/_dts/blocks/src/index.d.ts +4 -3
  36. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +49 -0
  37. package/dist/_dts/blocks/src/pageRendererBlockSupport.d.ts +75 -0
  38. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +2 -0
  39. package/dist/_dts/blocks/src/server.d.ts +2 -2
  40. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +1 -1
  41. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -0
  42. package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +78 -0
  43. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +2 -18
  44. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +103 -16
  45. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  46. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +4 -2
  47. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  48. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  49. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +19 -0
  50. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +52 -0
  51. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -0
  52. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +47 -21
  53. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +38 -9
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/ErrorStep.d.ts +3 -5
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/VerifyingTimeoutStep.d.ts +3 -1
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +1 -1
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +2 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorPresentation.d.ts +5 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +25 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +4 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +8 -3
  63. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +2 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +5 -2
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +2 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.client.d.ts +2 -2
  67. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +40 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +2 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +43 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/capacity.d.ts +164 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/cta.d.ts +29 -0
  72. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +47 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +14 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/people.d.ts +6 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/pricing.d.ts +31 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.d.ts +3 -1
  77. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarNavigationChevron.d.ts +4 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DayEventsModal.d.ts +2 -1
  79. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModalContext.d.ts +3 -2
  80. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/OfferingTitle.d.ts +11 -0
  81. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +4 -1
  82. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +31 -3
  83. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekTimetableView.d.ts +3 -1
  84. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +9 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +3 -1
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listingLayout.d.ts +23 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/timetableModel.d.ts +4 -3
  88. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +0 -1
  89. package/dist/_dts/calendar/src/grid.d.ts +24 -66
  90. package/dist/_dts/calendar/src/index.d.ts +2 -2
  91. package/dist/_dts/calendar/src/timetable.d.ts +5 -9
  92. package/dist/_dts/commerce/src/purchase/allocation.d.ts +11 -0
  93. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +57 -0
  94. package/dist/_dts/commerce/src/purchase/index.d.ts +3 -0
  95. package/dist/_dts/commerce/src/purchase/settlement.d.ts +33 -0
  96. package/dist/_dts/commerce/src/purchase/stripeCheckoutReturnUrl.d.ts +8 -0
  97. package/dist/_dts/content-model/src/templates/defaults.d.ts +6 -0
  98. package/dist/_dts/core/src/slug.d.ts +20 -5
  99. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +8 -40
  100. package/dist/_dts/db/src/index.d.ts +1 -0
  101. package/dist/_dts/db/src/utils/postgrestFilter.d.ts +2 -0
  102. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +4 -0
  103. package/dist/_dts/media-core/src/fileDomain.d.ts +3 -0
  104. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +1 -1
  105. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  106. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  107. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -2
  108. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +2 -1
  109. package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +1 -1
  110. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +2 -0
  111. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlSaveRequest.d.ts +51 -0
  112. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +24 -2
  113. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +23 -1
  114. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +8 -0
  115. package/dist/_dts/sdk/src/client/publicLoaderCacheAccess.d.ts +6 -0
  116. package/dist/_dts/sdk/src/public-api/contracts.d.ts +7 -2
  117. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +10 -6
  118. package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +0 -1
  119. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -4
  120. package/dist/_dts/sdk/src/rendering/helpers/footerPageOutline.d.ts +3 -0
  121. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +3 -0
  122. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
  123. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +17 -0
  124. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +9 -3
  125. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +1 -1
  126. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -2
  127. package/dist/_dts/sdk/src/rendering/overrideResolution.d.ts +7 -4
  128. package/dist/_dts/sdk/src/version.d.ts +1 -1
  129. package/dist/_dts/theme-core/src/cards/types.d.ts +8 -8
  130. package/dist/_dts/theme-core/src/data.d.ts +12 -0
  131. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  132. package/dist/_dts/theme-core/src/gradients/types.d.ts +5 -0
  133. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +25 -2
  134. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -6
  135. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -810
  136. package/dist/_dts/theme-core/src/schema.d.ts +460 -1285
  137. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +43 -3
  138. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +223 -1
  139. package/dist/_dts/theme-core/src/site-styles/headerBrandPresentation.d.ts +63 -0
  140. package/dist/_dts/theme-core/src/site-styles/headerBytesComparison.d.ts +30 -0
  141. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +50 -1
  142. package/dist/_dts/theme-core/src/site-styles/headerLayoutCatalog.d.ts +48 -38
  143. package/dist/_dts/theme-core/src/site-styles/headerLayoutStyles.d.ts +10 -0
  144. package/dist/_dts/theme-core/src/site-styles/headerLayoutTypes.d.ts +8 -5
  145. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +4 -4
  146. package/dist/_dts/theme-core/src/site-styles/headerPreferences.d.ts +162 -0
  147. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +73 -0
  148. package/dist/_dts/theme-core/src/site-styles/headerRecompile.d.ts +118 -0
  149. package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +25 -2
  150. package/dist/_dts/theme-core/src/site-styles/headerStyleDefaults.d.ts +465 -0
  151. package/dist/_dts/theme-core/src/site-styles/headerStyleRecipe.d.ts +168 -0
  152. package/dist/_dts/theme-core/src/site-styles/index.d.ts +5 -0
  153. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  154. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +20 -1
  155. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +43 -2
  156. package/dist/client/{BookingConsentAgreement-Bz9znbpn.mjs → BookingConsentAgreement--_fUCZe-.mjs} +2 -2
  157. package/dist/client/{DiscountCodeDisclosure-35Ru8yB9.mjs → DiscountCodeDisclosure-BMipSoDJ.mjs} +1 -1
  158. package/dist/client/{EventCombined.client-BKB0ZxRR.mjs → EventCombined.client-CwJOxn7A.mjs} +274 -278
  159. package/dist/client/{EventListing.client-Dx8I21ok.mjs → EventListing.client-eVwiylPW.mjs} +2 -2
  160. package/dist/client/{LeafletStaticMap-CEWx-Bhe.mjs → LeafletStaticMap-IKenna5u.mjs} +1 -1
  161. package/dist/client/{accordion-KIDsKTwS.mjs → accordion-MGAO3PuE.mjs} +1 -1
  162. package/dist/client/{bookingForm-D96Rmp-5.mjs → bookingForm-CudlQPUu.mjs} +5 -5
  163. package/dist/client/bookings.mjs +476 -98
  164. package/dist/client/capacity-BW00PO7s.mjs +271 -0
  165. package/dist/client/{carousel-YwUgyL66.mjs → carousel-BrbGJ2Jl.mjs} +1 -1
  166. package/dist/client/{cart-BbwuNrUT.mjs → cart-Bq5eU0xZ.mjs} +3 -3
  167. package/dist/client/{checkout-hp1ucmEY.mjs → checkout-BAFVRdrK.mjs} +3 -3
  168. package/dist/client/client.mjs +4641 -2721
  169. package/dist/client/{context-DljQn8L5.mjs → context-DCkiHVdD.mjs} +20 -5
  170. package/dist/client/dates-2RPXHQy4.mjs +264 -0
  171. package/dist/client/{eventCalendar-DU4iNLpo.mjs → eventCalendar-B0O-hPF7.mjs} +261 -126
  172. package/dist/client/{eventCombined-CZuupW8m.mjs → eventCombined-DCkDaoDI.mjs} +3 -3
  173. package/dist/client/{eventDetails-DPQWwCIi.mjs → eventDetails-D8GG2dnD.mjs} +7 -4
  174. package/dist/client/{eventListing-C7oMidwS.mjs → eventListing-3ssV_bxz.mjs} +3 -3
  175. package/dist/client/{eventRegistration-zEiunlUs.mjs → eventRegistration-bPQo3kVw.mjs} +610 -313
  176. package/dist/client/{form-D2KIyCVJ.mjs → form-qMv8RDkk.mjs} +2 -2
  177. package/dist/client/{headerSection-CK5uChUK.mjs → headerSection-CH0Sc5hX.mjs} +2 -2
  178. package/dist/client/hooks.mjs +2514 -308
  179. package/dist/client/{locationMap-DLQNH1ln.mjs → locationMap-0_xlBnNI.mjs} +2 -2
  180. package/dist/client/{newsletterForm-ZuhIG7fZ.mjs → newsletterForm-NUW7m9RI.mjs} +2 -2
  181. package/dist/client/{productDetail-7hIcGeae.mjs → productDetail-FBEOM7jW.mjs} +3 -3
  182. package/dist/client/{productList-T4Cii1ot.mjs → productList-R0OSGhnn.mjs} +3 -3
  183. package/dist/client/{propsDecoder-mB0aC_Fi.mjs → propsDecoder-pYvx_Srl.mjs} +179 -401
  184. package/dist/client/rendering/client.mjs +3496 -2223
  185. package/dist/client/rendering/islands.mjs +17 -17
  186. package/dist/client/rendering.mjs +4400 -2510
  187. package/dist/client/{scrollToBlock-Du5mHgvL.mjs → scrollToBlock-ByQv96M2.mjs} +1 -1
  188. package/dist/client/{shop-B5zAcKZn.mjs → shop-RUG9DmRE.mjs} +6 -6
  189. package/dist/client/{shop-commerce-BKBZB6l5.mjs → shop-commerce-B76Jz23B.mjs} +5 -5
  190. package/dist/client/{shop-commerce-store-Cq4qlNtQ.mjs → shop-commerce-store-QuQNdDsD.mjs} +1 -1
  191. package/dist/client/{shopShared-DYGzEs9D.mjs → shopShared-vXU1omwJ.mjs} +3 -3
  192. package/dist/client/{useEventFilters-Bphkda8m.mjs → useEventFilters-ByuU6HLA.mjs} +33 -18
  193. package/dist/preview-next/before-render.mjs +86 -51
  194. package/dist/preview-next/client/runtime.mjs +4 -4
  195. package/dist/preview-next/keepAlive.mjs +86 -51
  196. package/dist/preview-next/middleware.mjs +86 -51
  197. package/dist/{previewAuthStore-C7ksxt5b.mjs → previewAuthStore-L_cKW8Sb.mjs} +86 -51
  198. package/dist/{sdk-runtime-BbIC8G4J.mjs → sdk-runtime-sUMr5d70.mjs} +2 -2
  199. package/dist/{separator-CadhAtI7.mjs → separator-BIHkie5i.mjs} +1 -1
  200. package/dist/server/components.mjs +4397 -2960
  201. package/dist/server/config-validation.mjs +354 -145
  202. package/dist/server/config.mjs +354 -145
  203. package/dist/server/data.mjs +354 -144
  204. package/dist/server/index.mjs +201 -55
  205. package/dist/server/manifest.mjs +0 -1
  206. package/dist/server/next.mjs +4046 -2611
  207. package/dist/server/page-converter.mjs +225 -122
  208. package/dist/server/prebuild.mjs +1 -1
  209. package/dist/server/rendering/server.mjs +4105 -2636
  210. package/dist/server/rendering.mjs +4522 -3087
  211. package/dist/server/routing.mjs +3289 -1637
  212. package/dist/server/server.mjs +23175 -21079
  213. package/dist/server/theme-bridge.mjs +708 -272
  214. package/dist/server/theme.mjs +29 -25
  215. package/dist/styles/index.css +624 -181
  216. package/package.json +1 -1
  217. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +0 -48
  218. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +0 -17
  219. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +0 -100
  220. /package/dist/_dts/blocks/src/system/runtime/nodes/events/{shared → domain}/destination.d.ts +0 -0
@@ -4348,6 +4348,11 @@ const gradientConfigSchema = z.object({
4348
4348
  position: z.string().optional(),
4349
4349
  stops: z.array(gradientStopSchema).min(2)
4350
4350
  });
4351
+ const gradientsSchema = z.object({
4352
+ button: z.string().min(1).nullable().optional(),
4353
+ hero: z.string().min(1).nullable().optional(),
4354
+ background: z.string().min(1).nullable().optional()
4355
+ });
4351
4356
  //#endregion
4352
4357
  //#region ../theme-core/src/interactive/baseSchema.ts
4353
4358
  /**
@@ -5006,12 +5011,8 @@ const legacyHeaderVariantValues = Object.keys(legacyHeaderVariants);
5006
5011
  * `@riverbankcms/api` is `z.input<typeof themeSchema>`, so a widened input here
5007
5012
  * would leak straight into a public type.
5008
5013
  *
5009
- * Not every read of a persisted theme goes through the schema:
5010
- * `resolveRuntimeTheme` in
5011
- * `apps/dashboard/src/server/services/sites/runtimeSiteResponse.ts` returns the
5012
- * raw database JSON asserted as `Theme` with no parse, so a theme still
5013
- * carrying a legacy spelling reaches the theme editor un-aliased. That gap
5014
- * predates this alias and is harmless while persisted usage is zero.
5014
+ * Persisted runtime themes are admitted through `parseThemeForPersistence`
5015
+ * before reaching consumers, so legacy spellings normalize at that boundary.
5015
5016
  */
5016
5017
  const headerVariantWithLegacyAliasSchema = z.enum([...headerVariantValues, ...legacyHeaderVariantValues]).transform((value) => value in legacyHeaderVariants ? legacyHeaderVariants[value] : value);
5017
5018
  const BREAKPOINT_LG = 1024;
@@ -5063,11 +5064,30 @@ const headerContainerSchema = z.object({
5063
5064
  tint: z.string().nullable().optional(),
5064
5065
  opacity: z.number().min(0).max(1).default(.12)
5065
5066
  }).optional();
5066
- const headerInteractionPaletteSchema = z.enum([
5067
+ //#endregion
5068
+ //#region ../theme-core/src/header/interactionPalette.ts
5069
+ /**
5070
+ * The palettes that fill the nav link with a colour on hover and focus. Each
5071
+ * one names a background/foreground token pair.
5072
+ */
5073
+ const headerInteractionPillPaletteValues = [
5067
5074
  "primary",
5068
5075
  "secondary",
5069
5076
  "accent"
5070
- ]);
5077
+ ];
5078
+ /**
5079
+ * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
5080
+ * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
5081
+ *
5082
+ * It exists because "a colour change on hover, no filled background" was not
5083
+ * expressible in the vocabulary, and it is what
5084
+ * `anna-raven-therapy-and-yoga` and `kirtan-lucy` have rendered since before
5085
+ * the palette existed. Without it those two rows can only be classified as a
5086
+ * conscious visual change.
5087
+ */
5088
+ const headerInteractionQuietPalette = "quiet";
5089
+ const headerInteractionPaletteValues = [...headerInteractionPillPaletteValues, headerInteractionQuietPalette];
5090
+ const headerInteractionPaletteSchema = z.enum(headerInteractionPaletteValues);
5071
5091
  //#endregion
5072
5092
  //#region ../theme-core/src/boxBackgroundSchema.ts
5073
5093
  const boxBackgroundOverlaySchema = z.preprocess(normalizeAuthoringOpacity, z.discriminatedUnion("type", [
@@ -5470,7 +5490,6 @@ const navFontWeight = z.enum([
5470
5490
  "bold"
5471
5491
  ]);
5472
5492
  const headerMaxWidth = z.enum(["container", "full"]);
5473
- const headerBarFrame = z.enum(["full-bleed", "inset-shell"]);
5474
5493
  const headerBorderSchema = componentBorderSchema.extend({ position: z.enum([
5475
5494
  "bottom",
5476
5495
  "top",
@@ -5499,12 +5518,6 @@ const headerLogoTextSchema = z.object({
5499
5518
  ]).optional(),
5500
5519
  hideOnShrink: z.boolean().optional()
5501
5520
  }).optional();
5502
- const navEffectsSchema = z.object({
5503
- underlineGradient: z.boolean().default(false),
5504
- glow: z.boolean().default(false),
5505
- glowColor: z.string().optional(),
5506
- neumorphic: z.boolean().default(false)
5507
- }).optional();
5508
5521
  const dropdownStyleSchema = z.object({
5509
5522
  background: themeColorTokenSchema.default("surface"),
5510
5523
  textColor: themeColorTokenSchema.default("text"),
@@ -5595,10 +5608,8 @@ const headerSchema = z.object({
5595
5608
  variant: headerVariantWithLegacyAliasSchema,
5596
5609
  positioning: headerPositioning,
5597
5610
  shrinkOnScroll: z.boolean(),
5598
- maxWidth: headerMaxWidth,
5599
- barFrame: headerBarFrame.optional(),
5611
+ maxWidth: headerMaxWidth.default("container"),
5600
5612
  scrollTreatment: headerScrollTreatmentSchema,
5601
- logoOverride: mediaSchema.nullable().optional(),
5602
5613
  background: headerBackgroundSchema.default({
5603
5614
  type: "color",
5604
5615
  color: "surface"
@@ -5610,13 +5621,11 @@ const headerSchema = z.object({
5610
5621
  navFontRole: z.enum(["body", "heading"]).optional(),
5611
5622
  navTextSize: navLinkStyleSchema.shape.textSize,
5612
5623
  interactionPalette: headerInteractionPaletteSchema.optional(),
5613
- navPlacement: z.enum(["end", "center"]).optional(),
5614
5624
  container: headerContainerSchema,
5615
5625
  border: headerBorderSchema,
5616
5626
  shadow: componentShadowSchema.optional(),
5617
5627
  logo: logoStyleSchema,
5618
5628
  logoText: headerLogoTextSchema,
5619
- navEffects: navEffectsSchema,
5620
5629
  navContainer: navContainerSchema,
5621
5630
  navLinkStyle: navLinkStyleSchema.optional(),
5622
5631
  ctaGap: headerCtaGapSchema.optional(),
@@ -5798,11 +5807,6 @@ const bodyTextSchema = z.object({ intro: z.object({
5798
5807
  paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
5799
5808
  headingSize: bodyTextIntroTypographySizeSchema.optional()
5800
5809
  }).optional() }).optional();
5801
- const gradientsSchema = z.object({
5802
- button: z.string().min(1).nullable().optional(),
5803
- hero: z.string().min(1).nullable().optional(),
5804
- background: z.string().min(1).nullable().optional()
5805
- });
5806
5810
  /**
5807
5811
  * Testimonial quote-mark treatment, owned by the site style (analogous to the
5808
5812
  * accordion icon). `style` is the coarse selector; the optional fields fine-tune
@@ -8011,38 +8015,6 @@ function asHeaderStyleId(value) {
8011
8015
  return value;
8012
8016
  }
8013
8017
  //#endregion
8014
- //#region ../theme-core/src/site-styles/lookOptionGroups.ts
8015
- function defineLookOptionGroup(group) {
8016
- defaultOption(group);
8017
- return group;
8018
- }
8019
- function defaultOption(group) {
8020
- const option = group.options.find((candidate) => candidate.id === group.defaultOptionId);
8021
- if (option) return option;
8022
- throw new Error(`Look option group "${group.id}" defaults to missing option "${group.defaultOptionId}".`);
8023
- }
8024
- //#endregion
8025
- //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
8026
- const clearSplitInteractionPalette = defineLookOptionGroup({
8027
- id: "interaction-palette",
8028
- label: "Hover colour",
8029
- defaultOptionId: "accent",
8030
- options: [
8031
- {
8032
- id: "accent",
8033
- label: "Accent"
8034
- },
8035
- {
8036
- id: "primary",
8037
- label: "Primary"
8038
- },
8039
- {
8040
- id: "secondary",
8041
- label: "Secondary"
8042
- }
8043
- ]
8044
- });
8045
- //#endregion
8046
8018
  //#region ../theme-core/src/site-styles/headerLayoutCatalog.ts
8047
8019
  const titleOnlyLogoAccommodation = {
8048
8020
  pattern: "title-only",
@@ -8162,6 +8134,12 @@ const overlayLogoAccommodations = [
8162
8134
  inlineMarkWithTitleLogoAccommodation,
8163
8135
  unbackedOverlayLogoAccommodation
8164
8136
  ];
8137
+ const allCuratedLogoAccommodations = [
8138
+ ...inlineClassicLogoAccommodations,
8139
+ ...centeredLogoAccommodations,
8140
+ ...overlayLogoAccommodations
8141
+ ];
8142
+ new Set(allCuratedLogoAccommodations.filter((option) => option.providesBacking === true).map((option) => option.pattern));
8165
8143
  const headerLayoutCatalog = defineExactCatalog()([
8166
8144
  {
8167
8145
  id: asHeaderLayoutId("classic"),
@@ -8202,43 +8180,37 @@ const headerStyleCatalog = defineExactCatalog()([
8202
8180
  id: asHeaderStyleId("minimal"),
8203
8181
  label: "Minimal",
8204
8182
  description: "Quiet surface with simple color-change navigation.",
8205
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8206
- navTypography: "plain"
8183
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8207
8184
  },
8208
8185
  {
8209
8186
  id: asHeaderStyleId("fine-line"),
8210
8187
  label: "Seamless",
8211
8188
  description: "Borderless surface with underline hover for a quieter page transition.",
8212
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8213
- navTypography: "plain"
8189
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8214
8190
  },
8215
8191
  {
8216
8192
  id: asHeaderStyleId("soft-bar"),
8217
8193
  label: "Soft Bar",
8218
8194
  description: "Soft tinted surface with gentle pill hover states.",
8219
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8220
- navTypography: "plain"
8195
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8221
8196
  },
8222
8197
  {
8223
8198
  id: asHeaderStyleId("pill-nav"),
8224
8199
  label: "Pill Nav",
8225
8200
  description: "A calm pill navigation rail over a neutral header.",
8226
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8227
- navTypography: "plain"
8201
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8228
8202
  },
8229
8203
  {
8230
8204
  id: asHeaderStyleId("brand-bar"),
8231
8205
  label: "Brand Bar",
8232
8206
  description: "Solid brand surface with high-contrast navigation.",
8233
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8234
- navTypography: "brand-caps"
8207
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8235
8208
  },
8236
8209
  {
8237
8210
  id: asHeaderStyleId("brand-underline"),
8238
8211
  label: "Brand Underline",
8239
8212
  description: "Brand surface with underline-grow navigation.",
8240
- supportedLayoutIds: supportedLayouts(["classic"]),
8241
- navTypography: "brand-caps"
8213
+ supportedLayoutIds: supportedLayouts(["classic"])
8242
8214
  },
8243
8215
  {
8244
8216
  id: asHeaderStyleId("brand-pill"),
@@ -8248,74 +8220,94 @@ const headerStyleCatalog = defineExactCatalog()([
8248
8220
  "classic",
8249
8221
  "centered",
8250
8222
  "floating"
8251
- ]),
8252
- navTypography: "brand-caps"
8223
+ ])
8253
8224
  },
8254
8225
  {
8255
8226
  id: asHeaderStyleId("brand-capsule"),
8256
8227
  label: "Brand Capsule",
8257
8228
  description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
8258
- supportedLayoutIds: supportedLayouts(["classic"]),
8259
- navTypography: "quiet-caps"
8229
+ supportedLayoutIds: supportedLayouts(["classic"])
8260
8230
  },
8261
8231
  {
8262
8232
  id: asHeaderStyleId("serif-line"),
8263
8233
  label: "Serif Line",
8264
8234
  description: "Typographic logo treatment with understated underline navigation.",
8265
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8266
- navTypography: "heading"
8235
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8267
8236
  },
8268
8237
  {
8269
8238
  id: asHeaderStyleId("flat-tabs"),
8270
8239
  label: "Flat Tabs",
8271
8240
  description: "Flat block hover and active states with a Swiss utility feel.",
8272
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8273
- navTypography: "quiet-caps"
8241
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8274
8242
  },
8275
8243
  {
8276
8244
  id: asHeaderStyleId("glass"),
8277
8245
  label: "Glass",
8278
8246
  description: "Translucent chrome with frosted navigation backing.",
8279
- supportedLayoutIds: supportedLayouts(["floating"]),
8280
- navTypography: "plain"
8247
+ supportedLayoutIds: supportedLayouts(["floating"])
8281
8248
  },
8282
8249
  {
8283
8250
  id: asHeaderStyleId("minimal-surface"),
8284
8251
  label: "Clear Split",
8285
8252
  description: "Floating logo with transparent navigation and no shared shell.",
8286
- supportedLayoutIds: supportedLayouts(["floating"]),
8287
- navTypography: "plain",
8288
- openingForegroundTarget: "all",
8289
- scrollTreatment: "contrast-glass",
8290
- interactionPalette: clearSplitInteractionPalette
8253
+ supportedLayoutIds: supportedLayouts(["floating"])
8291
8254
  },
8292
8255
  {
8293
8256
  id: asHeaderStyleId("soft-shell"),
8294
8257
  label: "Soft Shell",
8295
8258
  description: "Floating rounded shell with soft pill navigation states.",
8296
- supportedLayoutIds: supportedLayouts(["floating"]),
8297
- navTypography: "plain"
8259
+ supportedLayoutIds: supportedLayouts(["floating"])
8298
8260
  },
8299
8261
  {
8300
8262
  id: asHeaderStyleId("split-glass"),
8301
8263
  label: "Split Glass",
8302
8264
  description: "Logo floats independently while the navigation sits in a glass rail.",
8303
- supportedLayoutIds: supportedLayouts(["floating"]),
8304
- navTypography: "quiet-caps",
8305
- openingForegroundTarget: "brand-only"
8265
+ supportedLayoutIds: supportedLayouts(["floating"])
8306
8266
  },
8307
8267
  {
8308
8268
  id: asHeaderStyleId("split-pill"),
8309
8269
  label: "Split Pill",
8310
8270
  description: "Logo floats independently with a soft pill-backed navigation rail.",
8311
- supportedLayoutIds: supportedLayouts(["floating"]),
8312
- navTypography: "heading",
8313
- openingForegroundTarget: "brand-only"
8271
+ supportedLayoutIds: supportedLayouts(["floating"])
8314
8272
  }
8315
8273
  ]);
8316
8274
  new Map(headerLayoutCatalog.map((layout) => [layout.id, layout]));
8317
8275
  new Map(headerStyleCatalog.map((style) => [style.id, style]));
8318
8276
  //#endregion
8277
+ //#region ../theme-core/src/site-styles/lookOptionGroups.ts
8278
+ function defineLookOptionGroup(group) {
8279
+ defaultOption(group);
8280
+ return group;
8281
+ }
8282
+ function defaultOption(group) {
8283
+ const option = group.options.find((candidate) => candidate.id === group.defaultOptionId);
8284
+ if (option) return option;
8285
+ throw new Error(`Look option group "${group.id}" defaults to missing option "${group.defaultOptionId}".`);
8286
+ }
8287
+ defineLookOptionGroup({
8288
+ id: "interaction-palette",
8289
+ label: "Hover colour",
8290
+ defaultOptionId: "accent",
8291
+ options: [
8292
+ {
8293
+ id: "accent",
8294
+ label: "Accent"
8295
+ },
8296
+ {
8297
+ id: "primary",
8298
+ label: "Primary"
8299
+ },
8300
+ {
8301
+ id: "secondary",
8302
+ label: "Secondary"
8303
+ },
8304
+ {
8305
+ id: headerInteractionQuietPalette,
8306
+ label: "Text only"
8307
+ }
8308
+ ]
8309
+ });
8310
+ //#endregion
8319
8311
  //#region ../theme-core/src/site-styles/footerLooks.ts
8320
8312
  function asFooterLookId(value) {
8321
8313
  return value;
@@ -18178,31 +18170,37 @@ const containerResponsiveThemeCss = `/*
18178
18170
  */
18179
18171
 
18180
18172
  /* Main container */
18181
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar {
18173
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-calendar {
18182
18174
  width: 100%;
18183
18175
  }
18184
18176
 
18185
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-container {
18177
+ :where(.theme-scope)
18178
+ :where([data-block='event-calendar'])
18179
+ .event-calendar-container {
18186
18180
  border: 1px solid var(--ec-border);
18187
18181
  border-radius: var(--rb-block-radius);
18188
18182
  overflow: hidden;
18189
18183
  }
18190
18184
 
18191
18185
  /* Calendar navigation */
18192
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-header {
18186
+ :where(.theme-scope)
18187
+ :where([data-block='event-calendar'])
18188
+ .event-calendar-header {
18193
18189
  display: flex;
18194
18190
  align-items: center;
18195
18191
  justify-content: space-between;
18196
18192
  margin-bottom: 1rem;
18197
18193
  }
18198
18194
 
18199
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-nav {
18195
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-calendar-nav {
18200
18196
  display: flex;
18201
18197
  align-items: center;
18202
18198
  gap: 0.5rem;
18203
18199
  }
18204
18200
 
18205
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-nav-btn {
18201
+ :where(.theme-scope)
18202
+ :where([data-block='event-calendar'])
18203
+ .event-calendar-nav-btn {
18206
18204
  display: flex;
18207
18205
  align-items: center;
18208
18206
  justify-content: center;
@@ -18217,11 +18215,15 @@ const containerResponsiveThemeCss = `/*
18217
18215
  transition: background-color var(--rb-block-transition) ease;
18218
18216
  }
18219
18217
 
18220
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-nav-btn:hover {
18218
+ :where(.theme-scope)
18219
+ :where([data-block='event-calendar'])
18220
+ .event-calendar-nav-btn:hover {
18221
18221
  background-color: var(--ec-nav-hover-bg);
18222
18222
  }
18223
18223
 
18224
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-title {
18224
+ :where(.theme-scope)
18225
+ :where([data-block='event-calendar'])
18226
+ .event-calendar-title {
18225
18227
  font-size: 1.125rem;
18226
18228
  font-weight: 600;
18227
18229
  min-width: 200px;
@@ -18229,13 +18231,17 @@ const containerResponsiveThemeCss = `/*
18229
18231
  }
18230
18232
 
18231
18233
  /* Day headers */
18232
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day-headers {
18234
+ :where(.theme-scope)
18235
+ :where([data-block='event-calendar'])
18236
+ .event-calendar-day-headers {
18233
18237
  display: grid;
18234
18238
  grid-template-columns: repeat(7, minmax(0, 1fr));
18235
18239
  background-color: var(--ec-header-bg);
18236
18240
  }
18237
18241
 
18238
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day-header {
18242
+ :where(.theme-scope)
18243
+ :where([data-block='event-calendar'])
18244
+ .event-calendar-day-header {
18239
18245
  text-align: center;
18240
18246
  padding: 0.5rem;
18241
18247
  font-size: 0.875rem;
@@ -18245,33 +18251,43 @@ const containerResponsiveThemeCss = `/*
18245
18251
  }
18246
18252
 
18247
18253
  /* Calendar grid */
18248
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-grid {
18254
+ :where(.theme-scope)
18255
+ :where([data-block='event-calendar'])
18256
+ .event-calendar-grid {
18249
18257
  display: grid;
18250
18258
  grid-template-columns: repeat(7, minmax(0, 1fr));
18251
18259
  }
18252
18260
 
18253
18261
  /* Day cells */
18254
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day {
18262
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-calendar-day {
18255
18263
  min-height: 100px;
18256
18264
  border-bottom: 1px solid var(--ec-border-subtle);
18257
18265
  border-right: 1px solid var(--ec-border-subtle);
18258
18266
  padding: 0.25rem;
18259
18267
  }
18260
18268
 
18261
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day:nth-child(7n) {
18269
+ :where(.theme-scope)
18270
+ :where([data-block='event-calendar'])
18271
+ .event-calendar-day:nth-child(7n) {
18262
18272
  border-right: none;
18263
18273
  }
18264
18274
 
18265
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day--today {
18275
+ :where(.theme-scope)
18276
+ :where([data-block='event-calendar'])
18277
+ .event-calendar-day--today {
18266
18278
  background-color: var(--ec-today-bg);
18267
18279
  }
18268
18280
 
18269
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day--other-month {
18281
+ :where(.theme-scope)
18282
+ :where([data-block='event-calendar'])
18283
+ .event-calendar-day--other-month {
18270
18284
  opacity: var(--ec-other-month-opacity);
18271
18285
  }
18272
18286
 
18273
18287
  /* Day number */
18274
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day-number {
18288
+ :where(.theme-scope)
18289
+ :where([data-block='event-calendar'])
18290
+ .event-calendar-day-number {
18275
18291
  font-size: 0.875rem;
18276
18292
  font-weight: 500;
18277
18293
  margin-bottom: 0.25rem;
@@ -18279,21 +18295,28 @@ const containerResponsiveThemeCss = `/*
18279
18295
  opacity: var(--ec-day-number-opacity);
18280
18296
  }
18281
18297
 
18282
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day--today .event-calendar-day-number {
18298
+ :where(.theme-scope)
18299
+ :where([data-block='event-calendar'])
18300
+ .event-calendar-day--today
18301
+ .event-calendar-day-number {
18283
18302
  font-weight: 700;
18284
18303
  opacity: 1;
18285
18304
  color: var(--ec-today-text);
18286
18305
  }
18287
18306
 
18288
18307
  /* Events list */
18289
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-events {
18308
+ :where(.theme-scope)
18309
+ :where([data-block='event-calendar'])
18310
+ .event-calendar-events {
18290
18311
  display: flex;
18291
18312
  flex-direction: column;
18292
18313
  gap: 0.25rem;
18293
18314
  }
18294
18315
 
18295
18316
  /* Event item - solid primary background */
18296
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-event {
18317
+ :where(.theme-scope)
18318
+ :where([data-block='event-calendar'])
18319
+ .event-calendar-event {
18297
18320
  display: flex;
18298
18321
  align-items: center;
18299
18322
  gap: 0.375rem;
@@ -18314,24 +18337,32 @@ const containerResponsiveThemeCss = `/*
18314
18337
  transform var(--rb-block-transition) ease;
18315
18338
  }
18316
18339
 
18317
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-event:hover {
18340
+ :where(.theme-scope)
18341
+ :where([data-block='event-calendar'])
18342
+ .event-calendar-event:hover {
18318
18343
  background-color: var(--ec-event-solid-hover-bg);
18319
18344
  transform: translateY(-1px);
18320
18345
  }
18321
18346
 
18322
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-event:focus-visible {
18347
+ :where(.theme-scope)
18348
+ :where([data-block='event-calendar'])
18349
+ .event-calendar-event:focus-visible {
18323
18350
  outline: 2px solid var(--ec-event-solid-bg);
18324
18351
  outline-offset: 2px;
18325
18352
  }
18326
18353
 
18327
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-event-time {
18354
+ :where(.theme-scope)
18355
+ :where([data-block='event-calendar'])
18356
+ .event-calendar-event-time {
18328
18357
  flex-shrink: 0;
18329
18358
  white-space: nowrap;
18330
18359
  font-weight: 600;
18331
18360
  opacity: 0.9;
18332
18361
  }
18333
18362
 
18334
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-event-title {
18363
+ :where(.theme-scope)
18364
+ :where([data-block='event-calendar'])
18365
+ .event-calendar-event-title {
18335
18366
  min-width: 0;
18336
18367
  overflow: hidden;
18337
18368
  text-overflow: ellipsis;
@@ -18339,7 +18370,9 @@ const containerResponsiveThemeCss = `/*
18339
18370
  }
18340
18371
 
18341
18372
  /* More indicator - clickable button style */
18342
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-more {
18373
+ :where(.theme-scope)
18374
+ :where([data-block='event-calendar'])
18375
+ .event-calendar-more {
18343
18376
  font-size: 0.75rem;
18344
18377
  padding: 0.25rem 0.5rem;
18345
18378
  color: rgb(var(--tb-primary));
@@ -18351,16 +18384,22 @@ const containerResponsiveThemeCss = `/*
18351
18384
  transition: background-color var(--rb-block-transition) ease;
18352
18385
  }
18353
18386
 
18354
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-more:hover {
18387
+ :where(.theme-scope)
18388
+ :where([data-block='event-calendar'])
18389
+ .event-calendar-more:hover {
18355
18390
  background-color: rgba(var(--tb-primary), 0.1);
18356
18391
  }
18357
18392
 
18358
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-more:focus-visible {
18393
+ :where(.theme-scope)
18394
+ :where([data-block='event-calendar'])
18395
+ .event-calendar-more:focus-visible {
18359
18396
  outline: 2px solid rgb(var(--tb-primary));
18360
18397
  outline-offset: 2px;
18361
18398
  }
18362
18399
 
18363
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-empty {
18400
+ :where(.theme-scope)
18401
+ :where([data-block='event-calendar'])
18402
+ .event-calendar-empty {
18364
18403
  text-align: center;
18365
18404
  font-size: 0.875rem;
18366
18405
  opacity: var(--ec-empty-opacity);
@@ -18368,21 +18407,21 @@ const containerResponsiveThemeCss = `/*
18368
18407
  }
18369
18408
 
18370
18409
  /* Filters container */
18371
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-filters {
18410
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-filters {
18372
18411
  display: flex;
18373
18412
  flex-wrap: wrap;
18374
18413
  gap: 1rem;
18375
18414
  margin-bottom: 1.5rem;
18376
18415
  }
18377
18416
 
18378
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-filter {
18417
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-filter {
18379
18418
  display: flex;
18380
18419
  flex-direction: column;
18381
18420
  gap: 0.375rem;
18382
18421
  min-width: 180px;
18383
18422
  }
18384
18423
 
18385
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-filter-label {
18424
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-filter-label {
18386
18425
  font-size: 0.75rem;
18387
18426
  font-weight: 500;
18388
18427
  text-transform: uppercase;
@@ -18391,19 +18430,23 @@ const containerResponsiveThemeCss = `/*
18391
18430
  }
18392
18431
 
18393
18432
  /* Event filter select inherits base styling from .form-select, only block-specific overrides here */
18394
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-filter-select {
18433
+ :where(.theme-scope)
18434
+ :where([data-block='event-calendar'])
18435
+ .event-filter-select {
18395
18436
  /* Use theme input radius instead of block radius for consistency with other form inputs */
18396
18437
  border-radius: var(--rb-input-radius, var(--rb-block-radius));
18397
18438
  }
18398
18439
 
18399
18440
  /* Category filter buttons */
18400
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-category-buttons {
18441
+ :where(.theme-scope)
18442
+ :where([data-block='event-calendar'])
18443
+ .event-category-buttons {
18401
18444
  display: flex;
18402
18445
  flex-wrap: wrap;
18403
18446
  gap: 0.5rem;
18404
18447
  }
18405
18448
 
18406
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-category-btn {
18449
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-category-btn {
18407
18450
  padding: 0.5rem 1rem;
18408
18451
  font-size: 0.875rem;
18409
18452
  font-weight: 500;
@@ -18415,50 +18458,66 @@ const containerResponsiveThemeCss = `/*
18415
18458
  transition: all var(--rb-block-transition) ease;
18416
18459
  }
18417
18460
 
18418
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-category-btn:hover:not(:disabled) {
18461
+ :where(.theme-scope)
18462
+ :where([data-block='event-calendar'])
18463
+ .event-category-btn:hover:not(:disabled) {
18419
18464
  border-color: rgba(var(--tb-primary), 0.5);
18420
18465
  }
18421
18466
 
18422
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-category-btn:focus-visible {
18467
+ :where(.theme-scope)
18468
+ :where([data-block='event-calendar'])
18469
+ .event-category-btn:focus-visible {
18423
18470
  outline: 2px solid rgb(var(--tb-primary));
18424
18471
  outline-offset: 2px;
18425
18472
  }
18426
18473
 
18427
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-category-btn--active {
18474
+ :where(.theme-scope)
18475
+ :where([data-block='event-calendar'])
18476
+ .event-category-btn--active {
18428
18477
  background-color: rgb(var(--tb-primary));
18429
18478
  border-color: rgb(var(--tb-primary));
18430
18479
  color: var(--ec-event-solid-text);
18431
18480
  }
18432
18481
 
18433
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-category-btn:disabled {
18482
+ :where(.theme-scope)
18483
+ :where([data-block='event-calendar'])
18484
+ .event-category-btn:disabled {
18434
18485
  opacity: 0.5;
18435
18486
  cursor: not-allowed;
18436
18487
  }
18437
18488
 
18438
18489
  /* Allow category filter to be wider for button group */
18439
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-filter:has(.event-category-buttons) {
18490
+ :where(.theme-scope)
18491
+ :where([data-block='event-calendar'])
18492
+ .event-filter:has(.event-category-buttons) {
18440
18493
  min-width: auto;
18441
18494
  flex: 1 1 auto;
18442
18495
  }
18443
18496
 
18444
18497
  /* Combined mode container */
18445
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-combined {
18498
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-combined {
18446
18499
  width: 100%;
18447
18500
  }
18448
18501
 
18449
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-combined-content {
18502
+ :where(.theme-scope)
18503
+ :where([data-block='event-calendar'])
18504
+ .event-combined-content {
18450
18505
  display: flex;
18451
18506
  flex-direction: column;
18452
18507
  }
18453
18508
 
18454
18509
  /* Calendar view toggle (Month/Week) in Combined mode */
18455
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-view-toggle {
18510
+ :where(.theme-scope)
18511
+ :where([data-block='event-calendar'])
18512
+ .event-calendar-view-toggle {
18456
18513
  display: flex;
18457
18514
  gap: 0.25rem;
18458
18515
  margin-bottom: 1rem;
18459
18516
  }
18460
18517
 
18461
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-view-btn {
18518
+ :where(.theme-scope)
18519
+ :where([data-block='event-calendar'])
18520
+ .event-calendar-view-btn {
18462
18521
  padding: 0.5rem 1rem;
18463
18522
  font-size: 0.875rem;
18464
18523
  font-weight: 500;
@@ -18471,12 +18530,16 @@ const containerResponsiveThemeCss = `/*
18471
18530
  transition: all var(--rb-block-transition) ease;
18472
18531
  }
18473
18532
 
18474
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-view-btn:hover {
18533
+ :where(.theme-scope)
18534
+ :where([data-block='event-calendar'])
18535
+ .event-calendar-view-btn:hover {
18475
18536
  opacity: 1;
18476
18537
  border-color: rgba(var(--tb-primary), 0.5);
18477
18538
  }
18478
18539
 
18479
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-view-btn--active {
18540
+ :where(.theme-scope)
18541
+ :where([data-block='event-calendar'])
18542
+ .event-calendar-view-btn--active {
18480
18543
  opacity: 1;
18481
18544
  background-color: rgb(var(--tb-primary));
18482
18545
  border-color: rgb(var(--tb-primary));
@@ -18489,29 +18552,35 @@ const containerResponsiveThemeCss = `/*
18489
18552
  * ----------------------------------------------------------------------------- */
18490
18553
 
18491
18554
  /* Agenda week container */
18492
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-week {
18555
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-agenda-week {
18493
18556
  display: flex;
18494
18557
  flex-direction: column;
18495
18558
  gap: 0;
18496
18559
  }
18497
18560
 
18498
18561
  /* Individual day section */
18499
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day {
18562
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-agenda-day {
18500
18563
  border-bottom: 1px solid var(--ec-border-subtle);
18501
18564
  }
18502
18565
 
18503
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day:last-child {
18566
+ :where(.theme-scope)
18567
+ :where([data-block='event-calendar'])
18568
+ .event-agenda-day:last-child {
18504
18569
  border-bottom: none;
18505
18570
  }
18506
18571
 
18507
18572
  /* Day header */
18508
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day-header {
18573
+ :where(.theme-scope)
18574
+ :where([data-block='event-calendar'])
18575
+ .event-agenda-day-header {
18509
18576
  padding: 0.75rem 0;
18510
18577
  background-color: var(--ec-header-bg);
18511
18578
  border-bottom: 1px solid var(--ec-border-subtle);
18512
18579
  }
18513
18580
 
18514
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day-title {
18581
+ :where(.theme-scope)
18582
+ :where([data-block='event-calendar'])
18583
+ .event-agenda-day-title {
18515
18584
  font-size: 0.875rem;
18516
18585
  font-weight: 600;
18517
18586
  margin: 0;
@@ -18521,7 +18590,9 @@ const containerResponsiveThemeCss = `/*
18521
18590
  }
18522
18591
 
18523
18592
  /* Today badge */
18524
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day-today-badge {
18593
+ :where(.theme-scope)
18594
+ :where([data-block='event-calendar'])
18595
+ .event-agenda-day-today-badge {
18525
18596
  display: inline-flex;
18526
18597
  align-items: center;
18527
18598
  padding: 0.125rem 0.5rem;
@@ -18535,24 +18606,33 @@ const containerResponsiveThemeCss = `/*
18535
18606
  }
18536
18607
 
18537
18608
  /* Today highlight for entire day section */
18538
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day--today .event-agenda-day-header {
18609
+ :where(.theme-scope)
18610
+ :where([data-block='event-calendar'])
18611
+ .event-agenda-day--today
18612
+ .event-agenda-day-header {
18539
18613
  background-color: var(--ec-today-bg);
18540
18614
  }
18541
18615
 
18542
18616
  /* Day content area */
18543
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day-content {
18617
+ :where(.theme-scope)
18618
+ :where([data-block='event-calendar'])
18619
+ .event-agenda-day-content {
18544
18620
  padding: 0.75rem 0;
18545
18621
  }
18546
18622
 
18547
18623
  /* Events list within a day */
18548
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day-events {
18624
+ :where(.theme-scope)
18625
+ :where([data-block='event-calendar'])
18626
+ .event-agenda-day-events {
18549
18627
  display: flex;
18550
18628
  flex-direction: column;
18551
18629
  gap: 0.5rem;
18552
18630
  }
18553
18631
 
18554
18632
  /* Empty day message */
18555
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-day-empty {
18633
+ :where(.theme-scope)
18634
+ :where([data-block='event-calendar'])
18635
+ .event-agenda-day-empty {
18556
18636
  font-size: 0.875rem;
18557
18637
  opacity: var(--ec-empty-opacity);
18558
18638
  margin: 0;
@@ -18564,7 +18644,7 @@ const containerResponsiveThemeCss = `/*
18564
18644
  * Rich event card for agenda view
18565
18645
  * ----------------------------------------------------------------------------- */
18566
18646
 
18567
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card {
18647
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-agenda-card {
18568
18648
  display: flex;
18569
18649
  align-items: flex-start;
18570
18650
  gap: 0.75rem;
@@ -18577,13 +18657,17 @@ const containerResponsiveThemeCss = `/*
18577
18657
  transition: all var(--rb-block-transition) ease;
18578
18658
  }
18579
18659
 
18580
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card:hover {
18660
+ :where(.theme-scope)
18661
+ :where([data-block='event-calendar'])
18662
+ .event-agenda-card:hover {
18581
18663
  border-color: rgba(var(--tb-primary), 0.5);
18582
18664
  background-color: var(--ec-event-bg);
18583
18665
  }
18584
18666
 
18585
18667
  /* Category color indicator */
18586
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-indicator {
18668
+ :where(.theme-scope)
18669
+ :where([data-block='event-calendar'])
18670
+ .event-agenda-card-indicator {
18587
18671
  flex-shrink: 0;
18588
18672
  width: 4px;
18589
18673
  align-self: stretch;
@@ -18592,7 +18676,9 @@ const containerResponsiveThemeCss = `/*
18592
18676
  }
18593
18677
 
18594
18678
  /* Card content wrapper */
18595
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-content {
18679
+ :where(.theme-scope)
18680
+ :where([data-block='event-calendar'])
18681
+ .event-agenda-card-content {
18596
18682
  flex: 1;
18597
18683
  min-width: 0;
18598
18684
  display: flex;
@@ -18601,28 +18687,36 @@ const containerResponsiveThemeCss = `/*
18601
18687
  }
18602
18688
 
18603
18689
  /* Header row: time + title */
18604
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-header {
18690
+ :where(.theme-scope)
18691
+ :where([data-block='event-calendar'])
18692
+ .event-agenda-card-header {
18605
18693
  display: flex;
18606
18694
  align-items: baseline;
18607
18695
  gap: 0.5rem;
18608
18696
  flex-wrap: wrap;
18609
18697
  }
18610
18698
 
18611
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-time {
18699
+ :where(.theme-scope)
18700
+ :where([data-block='event-calendar'])
18701
+ .event-agenda-card-time {
18612
18702
  font-size: 0.75rem;
18613
18703
  font-weight: 600;
18614
18704
  opacity: var(--ec-time-opacity);
18615
18705
  white-space: nowrap;
18616
18706
  }
18617
18707
 
18618
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-title {
18708
+ :where(.theme-scope)
18709
+ :where([data-block='event-calendar'])
18710
+ .event-agenda-card-title {
18619
18711
  font-size: 0.875rem;
18620
18712
  font-weight: 500;
18621
18713
  line-height: 1.3;
18622
18714
  }
18623
18715
 
18624
18716
  /* Details row: venue, price, capacity */
18625
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-details {
18717
+ :where(.theme-scope)
18718
+ :where([data-block='event-calendar'])
18719
+ .event-agenda-card-details {
18626
18720
  display: flex;
18627
18721
  align-items: center;
18628
18722
  gap: 0.75rem;
@@ -18631,26 +18725,36 @@ const containerResponsiveThemeCss = `/*
18631
18725
  opacity: 0.7;
18632
18726
  }
18633
18727
 
18634
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-venue {
18728
+ :where(.theme-scope)
18729
+ :where([data-block='event-calendar'])
18730
+ .event-agenda-card-venue {
18635
18731
  display: inline-flex;
18636
18732
  align-items: center;
18637
18733
  gap: 0.25rem;
18638
18734
  }
18639
18735
 
18640
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-icon {
18736
+ :where(.theme-scope)
18737
+ :where([data-block='event-calendar'])
18738
+ .event-agenda-card-icon {
18641
18739
  flex-shrink: 0;
18642
18740
  opacity: 0.7;
18643
18741
  }
18644
18742
 
18645
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-price {
18743
+ :where(.theme-scope)
18744
+ :where([data-block='event-calendar'])
18745
+ .event-agenda-card-price {
18646
18746
  font-weight: 500;
18647
18747
  }
18648
18748
 
18649
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-capacity {
18749
+ :where(.theme-scope)
18750
+ :where([data-block='event-calendar'])
18751
+ .event-agenda-card-capacity {
18650
18752
  font-weight: 500;
18651
18753
  }
18652
18754
 
18653
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-agenda-card-capacity--full {
18755
+ :where(.theme-scope)
18756
+ :where([data-block='event-calendar'])
18757
+ .event-agenda-card-capacity--full {
18654
18758
  color: rgb(var(--tb-error, 239 68 68));
18655
18759
  opacity: 1;
18656
18760
  }
@@ -18660,20 +18764,24 @@ const containerResponsiveThemeCss = `/*
18660
18764
  * Time-grid layout for recurring class schedules
18661
18765
  * ----------------------------------------------------------------------------- */
18662
18766
 
18663
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable {
18767
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-timetable {
18664
18768
  display: flex;
18665
18769
  flex-direction: column;
18666
18770
  gap: 0.75rem;
18667
18771
  }
18668
18772
 
18669
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day-selector {
18773
+ :where(.theme-scope)
18774
+ :where([data-block='event-calendar'])
18775
+ .event-timetable-day-selector {
18670
18776
  display: none;
18671
18777
  gap: 0.375rem;
18672
18778
  overflow-x: auto;
18673
18779
  padding-bottom: 0.125rem;
18674
18780
  }
18675
18781
 
18676
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day-tab {
18782
+ :where(.theme-scope)
18783
+ :where([data-block='event-calendar'])
18784
+ .event-timetable-day-tab {
18677
18785
  flex: 0 0 auto;
18678
18786
  padding: 0.5rem 0.75rem;
18679
18787
  border: 1px solid var(--ec-border);
@@ -18688,35 +18796,49 @@ const containerResponsiveThemeCss = `/*
18688
18796
  border-color var(--rb-block-transition) ease;
18689
18797
  }
18690
18798
 
18691
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day-tab--active {
18799
+ :where(.theme-scope)
18800
+ :where([data-block='event-calendar'])
18801
+ .event-timetable-day-tab--active {
18692
18802
  background-color: rgb(var(--tb-primary));
18693
18803
  border-color: rgb(var(--tb-primary));
18694
18804
  color: rgb(var(--tb-primaryText, 255 255 255));
18695
18805
  }
18696
18806
 
18697
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-container {
18807
+ :where(.theme-scope)
18808
+ :where([data-block='event-calendar'])
18809
+ .event-timetable-container {
18698
18810
  border: 1px solid var(--ec-border);
18699
18811
  border-radius: var(--rb-block-radius);
18700
18812
  overflow-x: auto;
18701
18813
  overflow-y: hidden;
18702
18814
  }
18703
18815
 
18704
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-grid {
18816
+ :where(.theme-scope)
18817
+ :where([data-block='event-calendar'])
18818
+ .event-timetable-grid {
18705
18819
  display: grid;
18706
18820
  grid-template-columns: 4.5rem repeat(7, minmax(8rem, 1fr));
18707
18821
  min-width: 62rem;
18708
18822
  }
18709
18823
 
18710
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-time-rail,
18711
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day {
18824
+ :where(.theme-scope)
18825
+ :where([data-block='event-calendar'])
18826
+ .event-timetable-time-rail,
18827
+ :where(.theme-scope)
18828
+ :where([data-block='event-calendar'])
18829
+ .event-timetable-day {
18712
18830
  border-right: 1px solid var(--ec-border-subtle);
18713
18831
  }
18714
18832
 
18715
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day:last-child {
18833
+ :where(.theme-scope)
18834
+ :where([data-block='event-calendar'])
18835
+ .event-timetable-day:last-child {
18716
18836
  border-right: none;
18717
18837
  }
18718
18838
 
18719
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day-heading {
18839
+ :where(.theme-scope)
18840
+ :where([data-block='event-calendar'])
18841
+ .event-timetable-day-heading {
18720
18842
  min-height: 3.25rem;
18721
18843
  margin: 0;
18722
18844
  padding: 0.75rem 0.5rem;
@@ -18731,12 +18853,17 @@ const containerResponsiveThemeCss = `/*
18731
18853
  font-weight: 600;
18732
18854
  }
18733
18855
 
18734
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day--today .event-timetable-day-heading {
18856
+ :where(.theme-scope)
18857
+ :where([data-block='event-calendar'])
18858
+ .event-timetable-day--today
18859
+ .event-timetable-day-heading {
18735
18860
  background-color: var(--ec-today-bg);
18736
18861
  color: var(--ec-today-text);
18737
18862
  }
18738
18863
 
18739
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-today-badge {
18864
+ :where(.theme-scope)
18865
+ :where([data-block='event-calendar'])
18866
+ .event-timetable-today-badge {
18740
18867
  padding: 0.125rem 0.375rem;
18741
18868
  border-radius: var(--rb-button-radius);
18742
18869
  background-color: rgb(var(--tb-primary));
@@ -18746,17 +18873,29 @@ const containerResponsiveThemeCss = `/*
18746
18873
  text-transform: uppercase;
18747
18874
  }
18748
18875
 
18749
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-time-body,
18750
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day-body {
18876
+ :where(.theme-scope)
18877
+ :where([data-block='event-calendar'])
18878
+ .event-timetable-time-body,
18879
+ :where(.theme-scope)
18880
+ :where([data-block='event-calendar'])
18881
+ .event-timetable-day-body {
18751
18882
  position: relative;
18752
- height: clamp(34rem, calc(var(--event-timetable-range-minutes, 900) * 0.055rem), 56rem);
18883
+ height: clamp(
18884
+ 34rem,
18885
+ calc(var(--event-timetable-range-minutes, 900) * 0.055rem),
18886
+ 56rem
18887
+ );
18753
18888
  }
18754
18889
 
18755
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-time-body {
18890
+ :where(.theme-scope)
18891
+ :where([data-block='event-calendar'])
18892
+ .event-timetable-time-body {
18756
18893
  background-color: var(--ec-header-bg);
18757
18894
  }
18758
18895
 
18759
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-time-label {
18896
+ :where(.theme-scope)
18897
+ :where([data-block='event-calendar'])
18898
+ .event-timetable-time-label {
18760
18899
  position: absolute;
18761
18900
  left: 0.625rem;
18762
18901
  transform: translateY(-50%);
@@ -18765,14 +18904,18 @@ const containerResponsiveThemeCss = `/*
18765
18904
  white-space: nowrap;
18766
18905
  }
18767
18906
 
18768
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-hour-line {
18907
+ :where(.theme-scope)
18908
+ :where([data-block='event-calendar'])
18909
+ .event-timetable-hour-line {
18769
18910
  position: absolute;
18770
18911
  left: 0;
18771
18912
  right: 0;
18772
18913
  border-top: 1px solid var(--ec-border-subtle);
18773
18914
  }
18774
18915
 
18775
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event {
18916
+ :where(.theme-scope)
18917
+ :where([data-block='event-calendar'])
18918
+ .event-timetable-event {
18776
18919
  position: absolute;
18777
18920
  min-height: 2.75rem;
18778
18921
  padding: 0.375rem 0.5rem;
@@ -18792,21 +18935,35 @@ const containerResponsiveThemeCss = `/*
18792
18935
  transform var(--rb-block-transition) ease;
18793
18936
  }
18794
18937
 
18795
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event:hover {
18938
+ :where(.theme-scope)
18939
+ :where([data-block='event-calendar'])
18940
+ .event-timetable-event:hover {
18796
18941
  box-shadow: 0 4px 12px rgba(var(--tb-text), 0.12);
18797
18942
  transform: translateY(-1px);
18798
18943
  }
18799
18944
 
18800
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event:focus-visible {
18945
+ :where(.theme-scope)
18946
+ :where([data-block='event-calendar'])
18947
+ .event-timetable-event:focus-visible {
18801
18948
  outline: 2px solid rgb(var(--tb-primary));
18802
18949
  outline-offset: 2px;
18803
18950
  }
18804
18951
 
18805
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-time,
18806
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-title,
18807
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-teacher,
18808
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-meta,
18809
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-capacity {
18952
+ :where(.theme-scope)
18953
+ :where([data-block='event-calendar'])
18954
+ .event-timetable-event-time,
18955
+ :where(.theme-scope)
18956
+ :where([data-block='event-calendar'])
18957
+ .event-timetable-event-title,
18958
+ :where(.theme-scope)
18959
+ :where([data-block='event-calendar'])
18960
+ .event-timetable-event-teacher,
18961
+ :where(.theme-scope)
18962
+ :where([data-block='event-calendar'])
18963
+ .event-timetable-event-meta,
18964
+ :where(.theme-scope)
18965
+ :where([data-block='event-calendar'])
18966
+ .event-timetable-event-capacity {
18810
18967
  display: block;
18811
18968
  min-width: 0;
18812
18969
  overflow: hidden;
@@ -18814,36 +18971,50 @@ const containerResponsiveThemeCss = `/*
18814
18971
  white-space: nowrap;
18815
18972
  }
18816
18973
 
18817
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-time {
18974
+ :where(.theme-scope)
18975
+ :where([data-block='event-calendar'])
18976
+ .event-timetable-event-time {
18818
18977
  font-size: 0.6875rem;
18819
18978
  font-weight: 700;
18820
18979
  opacity: var(--ec-time-opacity);
18821
18980
  }
18822
18981
 
18823
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-title {
18982
+ :where(.theme-scope)
18983
+ :where([data-block='event-calendar'])
18984
+ .event-timetable-event-title {
18824
18985
  font-size: 0.8125rem;
18825
18986
  font-weight: 700;
18826
18987
  line-height: 1.25;
18827
18988
  }
18828
18989
 
18829
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-teacher,
18830
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-meta {
18990
+ :where(.theme-scope)
18991
+ :where([data-block='event-calendar'])
18992
+ .event-timetable-event-teacher,
18993
+ :where(.theme-scope)
18994
+ :where([data-block='event-calendar'])
18995
+ .event-timetable-event-meta {
18831
18996
  font-size: 0.6875rem;
18832
18997
  opacity: 0.72;
18833
18998
  }
18834
18999
 
18835
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-capacity {
19000
+ :where(.theme-scope)
19001
+ :where([data-block='event-calendar'])
19002
+ .event-timetable-event-capacity {
18836
19003
  font-size: 0.6875rem;
18837
19004
  font-weight: 600;
18838
19005
  opacity: 0.85;
18839
19006
  }
18840
19007
 
18841
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-event-capacity--full {
19008
+ :where(.theme-scope)
19009
+ :where([data-block='event-calendar'])
19010
+ .event-timetable-event-capacity--full {
18842
19011
  color: rgb(var(--tb-danger, 220 38 38));
18843
19012
  opacity: 1;
18844
19013
  }
18845
19014
 
18846
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day-empty {
19015
+ :where(.theme-scope)
19016
+ :where([data-block='event-calendar'])
19017
+ .event-timetable-day-empty {
18847
19018
  margin: 0;
18848
19019
  padding: 1rem 0.5rem;
18849
19020
  text-align: center;
@@ -18851,7 +19022,9 @@ const containerResponsiveThemeCss = `/*
18851
19022
  opacity: var(--ec-empty-opacity);
18852
19023
  }
18853
19024
 
18854
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-empty {
19025
+ :where(.theme-scope)
19026
+ :where([data-block='event-calendar'])
19027
+ .event-timetable-empty {
18855
19028
  margin: 0.25rem 0 0;
18856
19029
  text-align: center;
18857
19030
  font-size: 0.875rem;
@@ -18860,32 +19033,46 @@ const containerResponsiveThemeCss = `/*
18860
19033
 
18861
19034
  @container rb-site (max-width: 767px) {
18862
19035
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
18863
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day-selector {
19036
+ :where(.theme-scope)
19037
+ :where([data-block='event-calendar'])
19038
+ .event-timetable-day-selector {
18864
19039
  display: flex;
18865
19040
  }
18866
19041
 
18867
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-container {
19042
+ :where(.theme-scope)
19043
+ :where([data-block='event-calendar'])
19044
+ .event-timetable-container {
18868
19045
  overflow: hidden;
18869
19046
  }
18870
19047
 
18871
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-grid {
19048
+ :where(.theme-scope)
19049
+ :where([data-block='event-calendar'])
19050
+ .event-timetable-grid {
18872
19051
  grid-template-columns: 4rem minmax(0, 1fr);
18873
19052
  min-width: 0;
18874
19053
  }
18875
19054
 
18876
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day[data-selected="false"] {
19055
+ :where(.theme-scope)
19056
+ :where([data-block='event-calendar'])
19057
+ .event-timetable-day[data-selected='false'] {
18877
19058
  display: none;
18878
19059
  }
18879
19060
 
18880
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day {
19061
+ :where(.theme-scope)
19062
+ :where([data-block='event-calendar'])
19063
+ .event-timetable-day {
18881
19064
  border-right: none;
18882
19065
  }
18883
19066
 
18884
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-time-rail {
19067
+ :where(.theme-scope)
19068
+ :where([data-block='event-calendar'])
19069
+ .event-timetable-time-rail {
18885
19070
  border-right: 1px solid var(--ec-border-subtle);
18886
19071
  }
18887
19072
 
18888
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-timetable-day-heading {
19073
+ :where(.theme-scope)
19074
+ :where([data-block='event-calendar'])
19075
+ .event-timetable-day-heading {
18889
19076
  justify-content: flex-start;
18890
19077
  padding-inline: 0.75rem;
18891
19078
  }
@@ -18898,7 +19085,7 @@ const containerResponsiveThemeCss = `/*
18898
19085
  * three-state availability (available / filling / waitlist), and a footer CTA.
18899
19086
  * ----------------------------------------------------------------------------- */
18900
19087
 
18901
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board {
19088
+ :where(.theme-scope) :where([data-block='event-calendar']) .event-week-board {
18902
19089
  /* Status accent tokens — map the three availability states onto theme colours.
18903
19090
  * available -> secondary, filling -> accent, waitlist -> muted text. */
18904
19091
  --ec-status-available: rgb(var(--tb-secondary));
@@ -18915,17 +19102,20 @@ const containerResponsiveThemeCss = `/*
18915
19102
 
18916
19103
  /* Opt-in raised look: a soft drop shadow so the board lifts off the page.
18917
19104
  * Generic default (no [data-elevated]) stays flat. */
18918
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board[data-elevated] {
19105
+ :where(.theme-scope)
19106
+ :where([data-block='event-calendar'])
19107
+ .event-week-board[data-elevated] {
18919
19108
  box-shadow: 0 14px 34px -24px rgba(var(--tb-text), 0.35);
18920
19109
  }
18921
19110
 
18922
- /* Top bar: title + legend */
18923
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-top {
18924
- display: flex;
19111
+ /* Top bar: authored title + week navigation + legend */
19112
+ :where(.theme-scope)
19113
+ :where([data-block='event-calendar'])
19114
+ .event-week-board-top {
19115
+ display: grid;
19116
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
18925
19117
  align-items: center;
18926
- justify-content: space-between;
18927
19118
  gap: 1rem;
18928
- flex-wrap: wrap;
18929
19119
  padding: 1.1rem 1.5rem;
18930
19120
  /* surfaceAlt gives the header/footer a legible tint against the white day-grid
18931
19121
  * body — the faint \`--ec-header-bg\` (5% text) is invisible on light palettes. */
@@ -18933,7 +19123,10 @@ const containerResponsiveThemeCss = `/*
18933
19123
  border-bottom: 1px solid var(--ec-border-subtle);
18934
19124
  }
18935
19125
 
18936
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-title {
19126
+ :where(.theme-scope)
19127
+ :where([data-block='event-calendar'])
19128
+ .event-week-board-title {
19129
+ grid-column: 1;
18937
19130
  font-size: 0.8125rem;
18938
19131
  font-weight: 600;
18939
19132
  letter-spacing: 0.12em;
@@ -18941,7 +19134,67 @@ const containerResponsiveThemeCss = `/*
18941
19134
  color: rgb(var(--tb-primary));
18942
19135
  }
18943
19136
 
18944
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend {
19137
+ :where(.theme-scope)
19138
+ :where([data-block='event-calendar'])
19139
+ .event-week-board-navigation {
19140
+ grid-column: 2;
19141
+ display: flex;
19142
+ align-items: center;
19143
+ justify-content: center;
19144
+ gap: 0.65rem;
19145
+ }
19146
+
19147
+ :where(.theme-scope)
19148
+ :where([data-block='event-calendar'])
19149
+ .event-week-board-nav-button {
19150
+ display: inline-flex;
19151
+ align-items: center;
19152
+ justify-content: center;
19153
+ width: 2.25rem;
19154
+ height: 2.25rem;
19155
+ padding: 0;
19156
+ border: 1px solid var(--ec-border);
19157
+ border-radius: 999px;
19158
+ background: transparent;
19159
+ color: inherit;
19160
+ cursor: pointer;
19161
+ }
19162
+
19163
+ :where(.theme-scope)
19164
+ :where([data-block='event-calendar'])
19165
+ .event-week-board-nav-button:hover {
19166
+ background-color: var(--ec-hover-bg);
19167
+ }
19168
+
19169
+ :where(.theme-scope)
19170
+ :where([data-block='event-calendar'])
19171
+ .event-week-board-nav-button:focus-visible {
19172
+ outline: 2px solid rgb(var(--tb-primary));
19173
+ outline-offset: 2px;
19174
+ }
19175
+
19176
+ :where(.theme-scope)
19177
+ :where([data-block='event-calendar'])
19178
+ .event-week-board-range {
19179
+ min-width: 12rem;
19180
+ margin: 0;
19181
+ text-align: center;
19182
+ font-size: 0.875rem;
19183
+ font-weight: 600;
19184
+ }
19185
+
19186
+ :where(.theme-scope)
19187
+ :where([data-block='event-calendar'])
19188
+ .event-week-board-loading {
19189
+ font-weight: 400;
19190
+ opacity: 0.65;
19191
+ }
19192
+
19193
+ :where(.theme-scope)
19194
+ :where([data-block='event-calendar'])
19195
+ .event-week-board-legend {
19196
+ grid-column: 3;
19197
+ justify-self: end;
18945
19198
  display: flex;
18946
19199
  align-items: center;
18947
19200
  gap: 1.1rem;
@@ -18951,38 +19204,72 @@ const containerResponsiveThemeCss = `/*
18951
19204
  opacity: 0.75;
18952
19205
  }
18953
19206
 
18954
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-item {
19207
+ :where(.theme-scope)
19208
+ :where([data-block='event-calendar'])
19209
+ .event-week-board-error {
19210
+ display: flex;
19211
+ align-items: center;
19212
+ justify-content: center;
19213
+ gap: 0.75rem;
19214
+ padding: 0.75rem 1.5rem;
19215
+ border-bottom: 1px solid var(--ec-border-subtle);
19216
+ color: rgb(var(--tb-error, var(--tb-text)));
19217
+ }
19218
+
19219
+ :where(.theme-scope)
19220
+ :where([data-block='event-calendar'])
19221
+ .event-week-board-error
19222
+ p {
19223
+ margin: 0;
19224
+ font-size: 0.8125rem;
19225
+ }
19226
+
19227
+ :where(.theme-scope)
19228
+ :where([data-block='event-calendar'])
19229
+ .event-week-board-legend-item {
18955
19230
  display: inline-flex;
18956
19231
  align-items: center;
18957
19232
  gap: 0.4rem;
18958
19233
  }
18959
19234
 
18960
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot {
19235
+ :where(.theme-scope)
19236
+ :where([data-block='event-calendar'])
19237
+ .event-week-board-legend-dot {
18961
19238
  width: 0.55rem;
18962
19239
  height: 0.55rem;
18963
19240
  border-radius: 50%;
18964
19241
  display: inline-block;
18965
19242
  }
18966
19243
 
18967
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="available"] {
19244
+ :where(.theme-scope)
19245
+ :where([data-block='event-calendar'])
19246
+ .event-week-board-legend-dot[data-status='available'] {
18968
19247
  background-color: var(--ec-status-available);
18969
19248
  }
18970
19249
 
18971
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="filling"] {
19250
+ :where(.theme-scope)
19251
+ :where([data-block='event-calendar'])
19252
+ .event-week-board-legend-dot[data-status='filling'] {
18972
19253
  background-color: var(--ec-status-filling);
18973
19254
  }
18974
19255
 
18975
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="waitlist"] {
19256
+ :where(.theme-scope)
19257
+ :where([data-block='event-calendar'])
19258
+ .event-week-board-legend-dot[data-status='waitlist'] {
18976
19259
  background-color: var(--ec-status-waitlist);
18977
19260
  }
18978
19261
 
18979
19262
  /* Day columns grid */
18980
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-grid {
19263
+ :where(.theme-scope)
19264
+ :where([data-block='event-calendar'])
19265
+ .event-week-board-grid {
18981
19266
  display: grid;
18982
19267
  grid-template-columns: repeat(var(--event-week-board-cols), minmax(0, 1fr));
18983
19268
  }
18984
19269
 
18985
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day {
19270
+ :where(.theme-scope)
19271
+ :where([data-block='event-calendar'])
19272
+ .event-week-board-day {
18986
19273
  display: flex;
18987
19274
  flex-direction: column;
18988
19275
  min-height: 15rem;
@@ -18992,11 +19279,15 @@ const containerResponsiveThemeCss = `/*
18992
19279
  border-right: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
18993
19280
  }
18994
19281
 
18995
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day:last-child {
19282
+ :where(.theme-scope)
19283
+ :where([data-block='event-calendar'])
19284
+ .event-week-board-day:last-child {
18996
19285
  border-right: none;
18997
19286
  }
18998
19287
 
18999
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-head {
19288
+ :where(.theme-scope)
19289
+ :where([data-block='event-calendar'])
19290
+ .event-week-board-day-head {
19000
19291
  display: flex;
19001
19292
  align-items: baseline;
19002
19293
  gap: 0.4rem;
@@ -19005,11 +19296,16 @@ const containerResponsiveThemeCss = `/*
19005
19296
  border-bottom: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
19006
19297
  }
19007
19298
 
19008
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--today .event-week-board-day-head {
19299
+ :where(.theme-scope)
19300
+ :where([data-block='event-calendar'])
19301
+ .event-week-board-day--today
19302
+ .event-week-board-day-head {
19009
19303
  background-color: var(--ec-today-bg);
19010
19304
  }
19011
19305
 
19012
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-abbr {
19306
+ :where(.theme-scope)
19307
+ :where([data-block='event-calendar'])
19308
+ .event-week-board-day-abbr {
19013
19309
  font-size: 0.6875rem;
19014
19310
  font-weight: 600;
19015
19311
  letter-spacing: 0.1em;
@@ -19017,18 +19313,25 @@ const containerResponsiveThemeCss = `/*
19017
19313
  opacity: 0.65;
19018
19314
  }
19019
19315
 
19020
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--today .event-week-board-day-abbr {
19316
+ :where(.theme-scope)
19317
+ :where([data-block='event-calendar'])
19318
+ .event-week-board-day--today
19319
+ .event-week-board-day-abbr {
19021
19320
  opacity: 1;
19022
19321
  color: var(--ec-today-text);
19023
19322
  }
19024
19323
 
19025
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-num {
19324
+ :where(.theme-scope)
19325
+ :where([data-block='event-calendar'])
19326
+ .event-week-board-day-num {
19026
19327
  font-size: 0.8125rem;
19027
19328
  font-weight: 600;
19028
19329
  opacity: 0.5;
19029
19330
  }
19030
19331
 
19031
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-body {
19332
+ :where(.theme-scope)
19333
+ :where([data-block='event-calendar'])
19334
+ .event-week-board-day-body {
19032
19335
  display: flex;
19033
19336
  flex-direction: column;
19034
19337
  gap: 0.65rem;
@@ -19037,7 +19340,9 @@ const containerResponsiveThemeCss = `/*
19037
19340
  }
19038
19341
 
19039
19342
  /* Class card */
19040
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
19343
+ :where(.theme-scope)
19344
+ :where([data-block='event-calendar'])
19345
+ .event-week-board-card {
19041
19346
  display: flex;
19042
19347
  flex-direction: column;
19043
19348
  gap: 0.45rem;
@@ -19057,40 +19362,54 @@ const containerResponsiveThemeCss = `/*
19057
19362
  border-color var(--rb-block-transition) ease;
19058
19363
  }
19059
19364
 
19060
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card[data-status="filling"] {
19365
+ :where(.theme-scope)
19366
+ :where([data-block='event-calendar'])
19367
+ .event-week-board-card[data-status='filling'] {
19061
19368
  border-left-color: var(--ec-status-filling);
19062
19369
  }
19063
19370
 
19064
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card[data-status="waitlist"] {
19371
+ :where(.theme-scope)
19372
+ :where([data-block='event-calendar'])
19373
+ .event-week-board-card[data-status='waitlist'] {
19065
19374
  border-left-color: var(--ec-status-waitlist);
19066
19375
  }
19067
19376
 
19068
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card:hover {
19377
+ :where(.theme-scope)
19378
+ :where([data-block='event-calendar'])
19379
+ .event-week-board-card:hover {
19069
19380
  transform: translateY(-2px);
19070
19381
  box-shadow: 0 6px 16px -8px rgba(var(--tb-text), 0.28);
19071
19382
  border-color: rgba(var(--tb-primary), 0.4);
19072
19383
  }
19073
19384
 
19074
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card:focus-visible {
19385
+ :where(.theme-scope)
19386
+ :where([data-block='event-calendar'])
19387
+ .event-week-board-card:focus-visible {
19075
19388
  outline: 2px solid rgb(var(--tb-primary));
19076
19389
  outline-offset: 2px;
19077
19390
  }
19078
19391
 
19079
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-title {
19392
+ :where(.theme-scope)
19393
+ :where([data-block='event-calendar'])
19394
+ .event-week-board-card-title {
19080
19395
  font-family: var(--font-heading, inherit);
19081
19396
  font-size: 0.9375rem;
19082
19397
  font-weight: 600;
19083
19398
  line-height: 1.2;
19084
19399
  }
19085
19400
 
19086
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-time {
19401
+ :where(.theme-scope)
19402
+ :where([data-block='event-calendar'])
19403
+ .event-week-board-card-time {
19087
19404
  font-size: 0.75rem;
19088
19405
  letter-spacing: 0.01em;
19089
19406
  opacity: 0.7;
19090
19407
  }
19091
19408
 
19092
19409
  /* Capacity pill */
19093
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill {
19410
+ :where(.theme-scope)
19411
+ :where([data-block='event-calendar'])
19412
+ .event-week-board-card-pill {
19094
19413
  align-self: flex-start;
19095
19414
  display: inline-flex;
19096
19415
  align-items: center;
@@ -19108,20 +19427,26 @@ const containerResponsiveThemeCss = `/*
19108
19427
  border-color: var(--ec-border);
19109
19428
  }
19110
19429
 
19111
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill[data-status="filling"] {
19430
+ :where(.theme-scope)
19431
+ :where([data-block='event-calendar'])
19432
+ .event-week-board-card-pill[data-status='filling'] {
19112
19433
  background-color: rgba(var(--tb-accent), 0.14);
19113
19434
  color: var(--ec-status-filling);
19114
19435
  border-color: rgba(var(--tb-accent), 0.32);
19115
19436
  }
19116
19437
 
19117
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill[data-status="waitlist"] {
19438
+ :where(.theme-scope)
19439
+ :where([data-block='event-calendar'])
19440
+ .event-week-board-card-pill[data-status='waitlist'] {
19118
19441
  background-color: transparent;
19119
19442
  color: rgba(var(--tb-text), 0.6);
19120
19443
  border-color: var(--ec-border);
19121
19444
  }
19122
19445
 
19123
19446
  /* Footer */
19124
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-foot {
19447
+ :where(.theme-scope)
19448
+ :where([data-block='event-calendar'])
19449
+ .event-week-board-foot {
19125
19450
  display: flex;
19126
19451
  align-items: center;
19127
19452
  justify-content: space-between;
@@ -19133,7 +19458,9 @@ const containerResponsiveThemeCss = `/*
19133
19458
  border-top: 1px solid var(--ec-border-subtle);
19134
19459
  }
19135
19460
 
19136
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-foot-note {
19461
+ :where(.theme-scope)
19462
+ :where([data-block='event-calendar'])
19463
+ .event-week-board-foot-note {
19137
19464
  margin: 0;
19138
19465
  font-size: 0.875rem;
19139
19466
  opacity: 0.75;
@@ -19142,36 +19469,69 @@ const containerResponsiveThemeCss = `/*
19142
19469
  /* Responsive: collapse day columns to a stacked list on narrow viewports */
19143
19470
  @container rb-site (max-width: 1023px) {
19144
19471
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
19145
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-grid {
19472
+ :where(.theme-scope)
19473
+ :where([data-block='event-calendar'])
19474
+ .event-week-board-top {
19146
19475
  grid-template-columns: 1fr;
19147
19476
  }
19148
19477
 
19149
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day {
19478
+ :where(.theme-scope)
19479
+ :where([data-block='event-calendar'])
19480
+ .event-week-board-title,
19481
+ :where(.theme-scope)
19482
+ :where([data-block='event-calendar'])
19483
+ .event-week-board-navigation,
19484
+ :where(.theme-scope)
19485
+ :where([data-block='event-calendar'])
19486
+ .event-week-board-legend {
19487
+ grid-column: 1;
19488
+ justify-self: center;
19489
+ }
19490
+
19491
+ :where(.theme-scope)
19492
+ :where([data-block='event-calendar'])
19493
+ .event-week-board-grid {
19494
+ grid-template-columns: 1fr;
19495
+ }
19496
+
19497
+ :where(.theme-scope)
19498
+ :where([data-block='event-calendar'])
19499
+ .event-week-board-day {
19150
19500
  min-height: 0;
19151
19501
  border-right: none;
19152
19502
  border-bottom: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
19153
19503
  }
19154
19504
 
19155
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day:last-child {
19505
+ :where(.theme-scope)
19506
+ :where([data-block='event-calendar'])
19507
+ .event-week-board-day:last-child {
19156
19508
  border-bottom: none;
19157
19509
  }
19158
19510
 
19159
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--empty {
19511
+ :where(.theme-scope)
19512
+ :where([data-block='event-calendar'])
19513
+ .event-week-board-day--empty {
19160
19514
  display: none;
19161
19515
  }
19162
19516
 
19163
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-head {
19517
+ :where(.theme-scope)
19518
+ :where([data-block='event-calendar'])
19519
+ .event-week-board-day-head {
19164
19520
  border-bottom: none;
19165
19521
  padding-bottom: 0.25rem;
19166
19522
  }
19167
19523
 
19168
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-body {
19524
+ :where(.theme-scope)
19525
+ :where([data-block='event-calendar'])
19526
+ .event-week-board-day-body {
19169
19527
  flex-direction: row;
19170
19528
  flex-wrap: wrap;
19171
19529
  padding-top: 0.35rem;
19172
19530
  }
19173
19531
 
19174
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
19532
+ :where(.theme-scope)
19533
+ :where([data-block='event-calendar'])
19534
+ .event-week-board-card {
19175
19535
  flex: 1 1 14rem;
19176
19536
  }
19177
19537
  }
@@ -19179,11 +19539,37 @@ const containerResponsiveThemeCss = `/*
19179
19539
 
19180
19540
  @container rb-site (max-width: 639px) {
19181
19541
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
19182
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend {
19542
+ :where(.theme-scope)
19543
+ :where([data-block='event-calendar'])
19544
+ .event-week-board-navigation {
19545
+ display: grid;
19546
+ grid-template-columns: 2.25rem minmax(0, 1fr) 2.25rem;
19547
+ width: 100%;
19548
+ }
19549
+
19550
+ :where(.theme-scope)
19551
+ :where([data-block='event-calendar'])
19552
+ .event-week-board-navigation
19553
+ > :last-child {
19554
+ grid-column: 1 / -1;
19555
+ justify-self: center;
19556
+ }
19557
+
19558
+ :where(.theme-scope)
19559
+ :where([data-block='event-calendar'])
19560
+ .event-week-board-range {
19561
+ min-width: 0;
19562
+ }
19563
+
19564
+ :where(.theme-scope)
19565
+ :where([data-block='event-calendar'])
19566
+ .event-week-board-legend {
19183
19567
  display: none;
19184
19568
  }
19185
19569
 
19186
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
19570
+ :where(.theme-scope)
19571
+ :where([data-block='event-calendar'])
19572
+ .event-week-board-card {
19187
19573
  flex: 1 1 100%;
19188
19574
  }
19189
19575
  }
@@ -19200,8 +19586,9 @@ const containerResponsiveThemeCss = `/*
19200
19586
  * Opt-in only: the band paints when the board root carries [data-banded];
19201
19587
  * the generic default is bandless.
19202
19588
  * ----------------------------------------------------------------------------- */
19203
- :where(.theme-scope) [data-slot="section"]:has(.event-calendar--week-board[data-banded])::before {
19204
- content: "";
19589
+ :where(.theme-scope)
19590
+ [data-slot='section']:has(.event-calendar--week-board[data-banded])::before {
19591
+ content: '';
19205
19592
  position: absolute;
19206
19593
  inset: 0;
19207
19594
  z-index: -9;
@@ -19255,7 +19642,7 @@ const containerResponsiveThemeCss = `/*
19255
19642
  * ----------------------------------------------------------------------------- */
19256
19643
 
19257
19644
  /* Modal overlay */
19258
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal-overlay {
19645
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal-overlay {
19259
19646
  position: fixed;
19260
19647
  inset: 0;
19261
19648
  background: var(--ec-modal-overlay-bg);
@@ -19269,12 +19656,16 @@ const containerResponsiveThemeCss = `/*
19269
19656
  }
19270
19657
 
19271
19658
  @keyframes ec-modal-fade-in {
19272
- from { opacity: 0; }
19273
- to { opacity: 1; }
19659
+ from {
19660
+ opacity: 0;
19661
+ }
19662
+ to {
19663
+ opacity: 1;
19664
+ }
19274
19665
  }
19275
19666
 
19276
19667
  /* Modal dialog */
19277
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal {
19668
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal {
19278
19669
  position: relative;
19279
19670
  background: var(--ec-modal-bg);
19280
19671
  border-radius: var(--rb-block-radius);
@@ -19298,17 +19689,17 @@ const containerResponsiveThemeCss = `/*
19298
19689
  }
19299
19690
 
19300
19691
  /* Event modal - constrained width for card */
19301
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal--event {
19692
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal--event {
19302
19693
  max-width: 26rem;
19303
19694
  }
19304
19695
 
19305
19696
  /* Day modal */
19306
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal--day {
19697
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal--day {
19307
19698
  max-width: 28rem;
19308
19699
  }
19309
19700
 
19310
19701
  /* Close button */
19311
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal-close {
19702
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal-close {
19312
19703
  position: absolute;
19313
19704
  top: 0.75rem;
19314
19705
  right: 0.75rem;
@@ -19329,31 +19720,35 @@ const containerResponsiveThemeCss = `/*
19329
19720
  z-index: 10;
19330
19721
  }
19331
19722
 
19332
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal-close:hover {
19723
+ :where(.theme-scope)
19724
+ :where([data-block='event-calendar'])
19725
+ .ec-modal-close:hover {
19333
19726
  opacity: 1;
19334
19727
  background-color: rgba(var(--tb-text), 0.1);
19335
19728
  }
19336
19729
 
19337
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal-close:focus-visible {
19730
+ :where(.theme-scope)
19731
+ :where([data-block='event-calendar'])
19732
+ .ec-modal-close:focus-visible {
19338
19733
  outline: 2px solid rgb(var(--tb-primary));
19339
19734
  outline-offset: 2px;
19340
19735
  }
19341
19736
 
19342
19737
  /* Modal header (for day modal) */
19343
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal-header {
19738
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal-header {
19344
19739
  padding: 1.5rem 1.5rem 1rem;
19345
19740
  padding-right: 3rem; /* Space for close button */
19346
19741
  border-bottom: 1px solid var(--ec-border);
19347
19742
  }
19348
19743
 
19349
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal-title {
19744
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal-title {
19350
19745
  font-size: 1.125rem;
19351
19746
  font-weight: 600;
19352
19747
  color: var(--ec-text);
19353
19748
  margin: 0;
19354
19749
  }
19355
19750
 
19356
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal-subtitle {
19751
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal-subtitle {
19357
19752
  font-size: 0.875rem;
19358
19753
  color: var(--ec-text);
19359
19754
  opacity: 0.7;
@@ -19361,17 +19756,20 @@ const containerResponsiveThemeCss = `/*
19361
19756
  }
19362
19757
 
19363
19758
  /* Modal content */
19364
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal-content {
19759
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal-content {
19365
19760
  padding: 1rem;
19366
19761
  }
19367
19762
 
19368
19763
  /* Event modal: tighter padding for card */
19369
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal--event .ec-modal-content {
19764
+ :where(.theme-scope)
19765
+ :where([data-block='event-calendar'])
19766
+ .ec-modal--event
19767
+ .ec-modal-content {
19370
19768
  padding: 0.5rem;
19371
19769
  }
19372
19770
 
19373
19771
  /* Day events list */
19374
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-day-events-list {
19772
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-day-events-list {
19375
19773
  display: flex;
19376
19774
  flex-direction: column;
19377
19775
  gap: 0.5rem;
@@ -19379,7 +19777,9 @@ const containerResponsiveThemeCss = `/*
19379
19777
  }
19380
19778
 
19381
19779
  /* AgendaEventCard in button mode inherits most styles, just needs cursor */
19382
- :where(.theme-scope) :where([data-block="event-calendar"]) button.event-agenda-card {
19780
+ :where(.theme-scope)
19781
+ :where([data-block='event-calendar'])
19782
+ button.event-agenda-card {
19383
19783
  cursor: pointer;
19384
19784
  text-align: left;
19385
19785
  font-family: inherit;
@@ -19388,7 +19788,9 @@ const containerResponsiveThemeCss = `/*
19388
19788
  /* Responsive adjustments */
19389
19789
  @container rb-site (max-width: 640px) {
19390
19790
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
19391
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-container {
19791
+ :where(.theme-scope)
19792
+ :where([data-block='event-calendar'])
19793
+ .event-calendar-container {
19392
19794
  margin-left: -1.5rem;
19393
19795
  margin-right: -1.5rem;
19394
19796
  border-left: none;
@@ -19396,28 +19798,38 @@ const containerResponsiveThemeCss = `/*
19396
19798
  border-radius: 0;
19397
19799
  }
19398
19800
 
19399
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day-header {
19801
+ :where(.theme-scope)
19802
+ :where([data-block='event-calendar'])
19803
+ .event-calendar-day-header {
19400
19804
  font-size: 0.75rem;
19401
19805
  padding: 0.375rem 0.125rem;
19402
19806
  }
19403
19807
 
19404
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day {
19808
+ :where(.theme-scope)
19809
+ :where([data-block='event-calendar'])
19810
+ .event-calendar-day {
19405
19811
  min-height: 88px;
19406
19812
  padding: 0.125rem;
19407
19813
  }
19408
19814
 
19409
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-title {
19815
+ :where(.theme-scope)
19816
+ :where([data-block='event-calendar'])
19817
+ .event-calendar-title {
19410
19818
  font-size: 0.9375rem;
19411
19819
  min-width: 0;
19412
19820
  }
19413
19821
 
19414
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-day-number {
19822
+ :where(.theme-scope)
19823
+ :where([data-block='event-calendar'])
19824
+ .event-calendar-day-number {
19415
19825
  font-size: 0.75rem;
19416
19826
  margin-bottom: 0.125rem;
19417
19827
  padding: 0 0.125rem;
19418
19828
  }
19419
19829
 
19420
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-event {
19830
+ :where(.theme-scope)
19831
+ :where([data-block='event-calendar'])
19832
+ .event-calendar-event {
19421
19833
  justify-content: center;
19422
19834
  gap: 0.25rem;
19423
19835
  padding: 0.1875rem 0.25rem;
@@ -19425,25 +19837,34 @@ const containerResponsiveThemeCss = `/*
19425
19837
  border-radius: calc(var(--rb-block-radius) / 3);
19426
19838
  }
19427
19839
 
19428
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-event-time {
19840
+ :where(.theme-scope)
19841
+ :where([data-block='event-calendar'])
19842
+ .event-calendar-event-time {
19429
19843
  text-align: center;
19430
19844
  font-size: 0.625rem;
19431
19845
  }
19432
19846
 
19433
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-event-title {
19847
+ :where(.theme-scope)
19848
+ :where([data-block='event-calendar'])
19849
+ .event-calendar-event-title {
19434
19850
  display: none;
19435
19851
  }
19436
19852
 
19437
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-more {
19853
+ :where(.theme-scope)
19854
+ :where([data-block='event-calendar'])
19855
+ .event-calendar-more {
19438
19856
  padding: 0.125rem 0.25rem;
19439
19857
  font-size: 0.6875rem;
19440
19858
  }
19441
19859
 
19442
- :where(.theme-scope) :where([data-block="event-calendar"]) .event-calendar-header > button {
19860
+ :where(.theme-scope)
19861
+ :where([data-block='event-calendar'])
19862
+ .event-calendar-header
19863
+ > button {
19443
19864
  margin-right: 0.25rem;
19444
19865
  }
19445
19866
 
19446
- :where(.theme-scope) :where([data-block="event-calendar"]) .ec-modal {
19867
+ :where(.theme-scope) :where([data-block='event-calendar']) .ec-modal {
19447
19868
  max-width: 100%;
19448
19869
  max-height: 85vh;
19449
19870
  margin: 0 0.5rem;
@@ -20077,6 +20498,21 @@ const containerResponsiveThemeCss = `/*
20077
20498
  outline-offset: 2px;
20078
20499
  }
20079
20500
 
20501
+ /* Event titles always link to the event page, so a card or row whose CTA is
20502
+ hidden (sold out, closed) is never a dead end (issue 1372). The link inherits
20503
+ the heading's colour and only reveals itself on hover or keyboard focus.
20504
+ Shared by EventCard, EventCompactRow and the offerings-preview course cards via \`.event-title-link\`. */
20505
+ :where(.theme-scope) .event-title-link {
20506
+ color: inherit;
20507
+ text-decoration: none;
20508
+ }
20509
+
20510
+ :where(.theme-scope) .event-title-link:hover,
20511
+ :where(.theme-scope) .event-title-link:focus-visible {
20512
+ text-decoration: underline;
20513
+ text-underline-offset: 0.12em;
20514
+ }
20515
+
20080
20516
  /* =============================================================================
20081
20517
  * Block: Carousel Navigation (Phase 3 client component migration)
20082
20518
  * =============================================================================