@riverbankcms/sdk 0.104.1 → 0.107.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 (265) hide show
  1. package/README.md +84 -51
  2. package/dist/{PreviewEditorSidebar-CmaPXdKu.mjs → PreviewEditorSidebar-DpAbAl08.mjs} +1811 -1179
  3. package/dist/{PreviewEditorUI-C5xRTh2b.mjs → PreviewEditorUI-O7cn6Xxv.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-CStABBUh.mjs → PreviewQueryProvider-D0tnKl0t.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-Eks51NcN.mjs → SdkPreviewModeRuntime-CVB7urtl.mjs} +3244 -528
  6. package/dist/{SiteChromeCustomizeContext-Bt8zb3qu.mjs → SiteChromeCustomizeContext-C_sizso-.mjs} +4945 -3010
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +32945 -1329
  8. package/dist/_dts/api/src/bookingConfig.d.ts +2 -0
  9. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +5 -1
  10. package/dist/_dts/api/src/contentRuntime.d.ts +6 -15
  11. package/dist/_dts/api/src/courses.d.ts +68 -10
  12. package/dist/_dts/api/src/endpoints.d.ts +29 -0
  13. package/dist/_dts/api/src/index.d.ts +124 -124
  14. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +9 -0
  15. package/dist/_dts/api/src/sdkContracts.d.ts +116 -6
  16. package/dist/_dts/api/src/siteOperations.d.ts +1 -0
  17. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +26 -4
  18. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +31 -46
  19. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +36 -4
  20. package/dist/_dts/blocks/src/definitions.d.ts +1 -1
  21. package/dist/_dts/blocks/src/portal/types.d.ts +25 -7
  22. package/dist/_dts/blocks/src/primitives/layout/Grid.d.ts +12 -8
  23. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +2 -2
  24. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -0
  25. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +2 -0
  26. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +7 -0
  27. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule-projection.d.ts +52 -0
  28. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule.d.ts +22 -0
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +11 -1
  30. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +45 -0
  31. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +10 -0
  32. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -1
  33. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  34. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +9 -0
  35. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +8 -2
  36. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +8 -8
  37. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +24 -24
  38. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +29 -0
  39. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -1
  40. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  41. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  42. package/dist/_dts/blocks/src/system/constants/events.d.ts +1 -1
  43. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +2 -5
  44. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  45. package/dist/_dts/blocks/src/system/designCapabilities.d.ts +1 -0
  46. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +2 -2
  47. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +12 -0
  48. package/dist/_dts/blocks/src/system/node/fragments/styledCard.d.ts +3 -0
  49. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  51. package/dist/_dts/blocks/src/system/runtime/blockComposition.d.ts +2 -0
  52. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +90 -6
  53. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +45 -3
  54. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +15 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/buttonAffordance.d.ts +33 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/commerce/shared/display.d.ts +2 -2
  57. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +2 -1
  58. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +1 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +2 -1
  60. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +17 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +3 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +5 -0
  63. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +9 -18
  65. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +106 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/events/RecurringSchedule.d.ts +11 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +32 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +32 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +3 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +11 -1
  71. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  72. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +3 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +6 -6
  74. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +11 -5
  76. package/dist/_dts/blocks/src/system/runtime/nodes/shop.types.d.ts +2 -1
  77. package/dist/_dts/blocks/src/system/runtime/nodes/svg.d.ts +84 -0
  78. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +2 -0
  79. package/dist/_dts/blocks/src/system/transforms/registry/boxStyles.d.ts +3 -40
  80. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +14 -0
  81. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +11 -0
  82. package/dist/_dts/core/src/branded.d.ts +49 -0
  83. package/dist/_dts/core/src/dated-offering-settlement.d.ts +47 -0
  84. package/dist/_dts/core/src/event-page-surface-subject.d.ts +44 -0
  85. package/dist/_dts/core/src/index.d.ts +49 -47
  86. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +1469 -14
  87. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +1 -1
  88. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +4 -1
  89. package/dist/_dts/media-core/src/index.d.ts +2 -1
  90. package/dist/_dts/media-core/src/storagePathDomain.d.ts +47 -0
  91. package/dist/_dts/media-core/src/url.d.ts +1 -21
  92. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  93. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -1
  94. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
  95. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -9
  96. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +7 -11
  97. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -9
  98. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +2 -6
  99. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +5 -9
  100. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +81 -43
  101. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.typography.d.ts +61 -0
  102. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +7 -17
  103. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +15 -8
  104. package/dist/_dts/preview-next/src/client/preview/typographyFontCatalog.d.ts +57 -0
  105. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -1
  106. package/dist/_dts/sdk/src/cli/commands/push/execute/theme.d.ts +4 -7
  107. package/dist/_dts/sdk/src/cli/commands/style.d.ts +24 -10
  108. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +3 -3
  109. package/dist/_dts/sdk/src/cli/sync/media.d.ts +16 -2
  110. package/dist/_dts/sdk/src/client/management/blocks.d.ts +1 -1
  111. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  112. package/dist/_dts/sdk/src/client/management/types.d.ts +132 -23
  113. package/dist/_dts/sdk/src/client/types.d.ts +2 -0
  114. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  115. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  116. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  117. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +25 -5
  118. package/dist/_dts/sdk/src/data/dataLoaderContext.d.ts +17 -0
  119. package/dist/_dts/sdk/src/data/dataLoaderValue.d.ts +36 -0
  120. package/dist/_dts/sdk/src/data/defineOwnDataProperty.d.ts +2 -0
  121. package/dist/_dts/sdk/src/data/executeCodeLoaders.d.ts +36 -40
  122. package/dist/_dts/sdk/src/data/index.d.ts +3 -3
  123. package/dist/_dts/sdk/src/data/resolveBlockData.d.ts +54 -0
  124. package/dist/_dts/sdk/src/data/types.d.ts +43 -78
  125. package/dist/_dts/sdk/src/next/index.d.ts +1 -0
  126. package/dist/_dts/sdk/src/next/redirect-destination.d.ts +1 -1
  127. package/dist/_dts/sdk/src/next/resolveTheme.d.ts +2 -1
  128. package/dist/_dts/sdk/src/next/types.d.ts +10 -1
  129. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -8
  130. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +9 -4
  131. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +6 -10
  132. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -0
  133. package/dist/_dts/sdk/src/server.d.ts +4 -3
  134. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  135. package/dist/_dts/sdk/src/version.d.ts +1 -1
  136. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +2 -2
  137. package/dist/_dts/site-commands/src/commands.d.ts +921 -30
  138. package/dist/_dts/theme-core/src/ThemeScope.d.ts +1 -1
  139. package/dist/_dts/theme-core/src/buttons/affordanceIcons.d.ts +29 -0
  140. package/dist/_dts/theme-core/src/buttons/generateButtonCss.d.ts +6 -0
  141. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +5 -1
  142. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  143. package/dist/_dts/theme-core/src/buttons/personalities/flat-ink.d.ts +20 -0
  144. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +22 -0
  145. package/dist/_dts/theme-core/src/buttons/personalities/quiet-arrow.d.ts +17 -0
  146. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +6 -2
  147. package/dist/_dts/theme-core/src/buttons/types.d.ts +43 -5
  148. package/dist/_dts/theme-core/src/data.d.ts +12 -0
  149. package/dist/_dts/theme-core/src/fonts/index.d.ts +1 -1
  150. package/dist/_dts/theme-core/src/fonts/types.d.ts +6 -0
  151. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  152. package/dist/_dts/theme-core/src/gradients/types.d.ts +27 -3
  153. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +87 -39
  154. package/dist/_dts/theme-core/src/palette/colors.d.ts +12 -0
  155. package/dist/_dts/theme-core/src/palette/curated/brand-led.d.ts +22 -4
  156. package/dist/_dts/theme-core/src/palette/curated/high-contrast.d.ts +6 -3
  157. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +31 -224
  158. package/dist/_dts/theme-core/src/palette/curated/soft-natural.d.ts +8 -4
  159. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +14 -12
  160. package/dist/_dts/theme-core/src/palette/curated/warm-dark.d.ts +4 -2
  161. package/dist/_dts/theme-core/src/palette/curated/warm-neutral.d.ts +8 -4
  162. package/dist/_dts/theme-core/src/palette/editorState.d.ts +33 -3
  163. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -3
  164. package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +12 -6
  165. package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +20 -57
  166. package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +29 -4
  167. package/dist/_dts/theme-core/src/palette/selection.d.ts +6 -4
  168. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +3 -4
  169. package/dist/_dts/theme-core/src/runtime/themeCssVarNames.d.ts +1 -0
  170. package/dist/_dts/theme-core/src/schema.d.ts +229 -30
  171. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +2 -1
  172. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +218 -158
  173. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +5 -6
  174. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +218 -158
  175. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +1 -0
  176. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  177. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +208 -49
  178. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +8 -2
  179. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +6 -2
  180. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +56 -1
  181. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -1
  182. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +24 -1
  183. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +14 -48
  184. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +10 -23
  185. package/dist/_dts/theme-core/src/site-styles/siteStyleThemeCompiler.d.ts +1 -2
  186. package/dist/_dts/theme-core/src/site-styles/siteStyleTypography.d.ts +456 -0
  187. package/dist/_dts/theme-core/src/site-styles/types.d.ts +52 -3
  188. package/dist/_dts/theme-core/src/status/index.d.ts +0 -1
  189. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +19 -0
  190. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +9 -0
  191. package/dist/_dts/theme-core/src/surfaces/index.d.ts +2 -0
  192. package/dist/_dts/ui/src/button.d.ts +1 -1
  193. package/dist/cli/index.mjs +4146 -1602
  194. package/dist/client/{DiscountCodeDisclosure-Dit2aItR.mjs → DiscountCodeDisclosure-BwGkvmVH.mjs} +1 -1
  195. package/dist/client/{EventCombined.client-BnREyCjf.mjs → EventCombined.client-JnWE6Hzc.mjs} +4 -4
  196. package/dist/client/{EventListing.client-0uHld51x.mjs → EventListing.client-DQewc_kg.mjs} +2 -2
  197. package/dist/client/{LeafletStaticMap-DJcvSfmj.mjs → LeafletStaticMap-DPAU3SFt.mjs} +1 -1
  198. package/dist/client/{MagicLinkForm-EAsIktfw.mjs → MagicLinkForm-D4kpWCbW.mjs} +2 -2
  199. package/dist/client/{StepIndicator-CRR17tYI.mjs → StepIndicator-CBlkb4rA.mjs} +2 -2
  200. package/dist/client/{accordion-B47HIuuH.mjs → accordion-DAIBVpTS.mjs} +1 -1
  201. package/dist/client/{bookingForm-I1E-8F9P.mjs → bookingForm-DZ-4l5_1.mjs} +7 -7
  202. package/dist/client/bookings.mjs +360 -95
  203. package/dist/client/{buttons-BbPn8OKA.mjs → buttons-DJgynGHQ.mjs} +243 -43
  204. package/dist/client/{carousel-OlM7SyBs.mjs → carousel-D-SLfX8r.mjs} +1 -1
  205. package/dist/client/{cart-BKpG5jz6.mjs → cart-CEgbgJhX.mjs} +3 -3
  206. package/dist/client/{checkout-Dmmr6qoU.mjs → checkout-CXWrCRAA.mjs} +3 -3
  207. package/dist/client/client.mjs +6019 -1494
  208. package/dist/client/{colorStyles-DuW4Fjqd.mjs → colorStyles-jZS6KfkP.mjs} +46 -5
  209. package/dist/client/{colorTokenParts-dT8MISgJ.mjs → colorTokenParts-CMugwvX_.mjs} +3 -1
  210. package/dist/client/{courseRegistration-CflZiqGk.mjs → courseRegistration-DVmLrRVz.mjs} +56 -21
  211. package/dist/client/{eventCalendar-BvoLWcp-.mjs → eventCalendar-DCuyPY_c.mjs} +173 -5
  212. package/dist/client/{eventCombined-DsrO8t_t.mjs → eventCombined-kP2CA2D4.mjs} +2 -2
  213. package/dist/client/{eventDetails-C3hxgcJm.mjs → eventDetails-DU0LeF5e.mjs} +4 -4
  214. package/dist/client/{eventListing-C-hb237X.mjs → eventListing-CcHF87BI.mjs} +2 -2
  215. package/dist/client/{eventRegistration-B0gyzDGi.mjs → eventRegistration-DJnR0yFH.mjs} +8 -8
  216. package/dist/client/{form-C_RUi6oJ.mjs → form-CH1lCusH.mjs} +2 -2
  217. package/dist/client/{headerSection-IKQiD2U0.mjs → headerSection-CBPFZoku.mjs} +3 -3
  218. package/dist/client/hooks.mjs +3645 -1857
  219. package/dist/client/{locationMap-8ZBrMzRJ.mjs → locationMap-Cx1hBg5n.mjs} +3 -3
  220. package/dist/client/{media-CZJKL7fi.mjs → media-DHtSxS5V.mjs} +61 -56
  221. package/dist/client/{newsletterForm-CYk3ucwj.mjs → newsletterForm-1ZL_ti9u.mjs} +3 -3
  222. package/dist/client/{pricing-B5GmvfIH.mjs → pricing-BIbzmV0G.mjs} +1 -1
  223. package/dist/client/{productDetail-BjS2Dqzo.mjs → productDetail-BTh5gHBV.mjs} +3 -3
  224. package/dist/client/{productList-BOHvC8My.mjs → productList-Cc7OMrqN.mjs} +3 -3
  225. package/dist/client/{propsDecoder-WS6UEJwZ.mjs → propsDecoder-oR-M-ISN.mjs} +228 -60
  226. package/dist/client/rendering/client.mjs +3231 -1477
  227. package/dist/client/rendering/islands.mjs +20 -20
  228. package/dist/client/rendering.mjs +6889 -1927
  229. package/dist/client/{shop-CON03-wN.mjs → shop-CQ_YbCnn.mjs} +8 -8
  230. package/dist/client/{shop-commerce-DlqrFgH8.mjs → shop-commerce-BM-AoD3M.mjs} +6 -6
  231. package/dist/client/{shop-commerce-store-l74-Kne6.mjs → shop-commerce-store-DFMQhU5p.mjs} +1 -1
  232. package/dist/client/{shopShared-CQheEXSg.mjs → shopShared-D0SKO2Cu.mjs} +3 -3
  233. package/dist/client/{useDiscountCodeUi-v6OluyWl.mjs → useDiscountCodeUi-CrG4_ARt.mjs} +1 -1
  234. package/dist/client/{useEventFilters-BqSTcNOf.mjs → useEventFilters-CxK8Fekl.mjs} +6 -6
  235. package/dist/client/{usePolling-DMfADjIF.mjs → usePolling-jcVryNgZ.mjs} +2 -2
  236. package/dist/preview-next/before-render.mjs +40 -1
  237. package/dist/preview-next/client/runtime.mjs +4 -4
  238. package/dist/preview-next/middleware.mjs +40 -1
  239. package/dist/{previewAuthStore-CfquDtTh.mjs → previewAuthStore-BPcJPzdz.mjs} +40 -1
  240. package/dist/{sdk-runtime-BUmJ0DaT.mjs → sdk-runtime-C39Rsk-x.mjs} +2 -2
  241. package/dist/{separator-Dd-JYok7.mjs → separator-BoMSQnsP.mjs} +1 -1
  242. package/dist/server/components.mjs +6345 -2084
  243. package/dist/server/config-validation.mjs +3420 -1856
  244. package/dist/server/config.mjs +3420 -1856
  245. package/dist/server/data.mjs +4067 -1923
  246. package/dist/server/index.mjs +46 -4
  247. package/dist/server/next/middleware.mjs +1 -1
  248. package/dist/server/next.mjs +7239 -2147
  249. package/dist/server/page-converter.mjs +3189 -1619
  250. package/dist/server/prebuild.mjs +1 -1
  251. package/dist/server/rendering/server.mjs +6540 -2058
  252. package/dist/server/rendering.mjs +7339 -2377
  253. package/dist/server/routing.mjs +3373 -1101
  254. package/dist/server/server.mjs +4307 -2002
  255. package/dist/server/theme-bridge.mjs +9844 -7325
  256. package/dist/server/theme.mjs +300 -47
  257. package/dist/styles/index.css +1863 -94
  258. package/package.json +1 -1
  259. package/dist/_dts/blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.d.ts +0 -2
  260. package/dist/_dts/preview-next/src/client/preview/typographySelectionInput.d.ts +0 -16
  261. package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +0 -55
  262. package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +0 -34
  263. package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +0 -232
  264. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +0 -219
  265. package/dist/_dts/theme-core/src/status/contextualColors.d.ts +0 -6
@@ -64,12 +64,17 @@
64
64
  text-transform: uppercase;
65
65
  }
66
66
 
67
- /* Eyebrow text - small uppercase labels for section introductions */
67
+ /* Eyebrow text - small uppercase labels for section introductions.
68
+ Each property resolves from the optional eyebrow typographic role
69
+ (--fs/--fw/--ls/--tt-eyebrow, emitted only when the theme sets them),
70
+ with the historical hardcoded values as fallbacks so existing themes
71
+ are unchanged. font-family falls back to the body font likewise. */
68
72
  .rb-eyebrow {
69
- font-size: 0.875rem;
70
- font-weight: 600;
71
- letter-spacing: 0.025em;
72
- text-transform: uppercase;
73
+ font-family: var(--font-eyebrow, var(--font-body));
74
+ font-size: var(--fs-eyebrow, 0.875rem);
75
+ font-weight: var(--fw-eyebrow, 600);
76
+ letter-spacing: var(--ls-eyebrow, 0.025em);
77
+ text-transform: var(--tt-eyebrow, uppercase);
73
78
  }
74
79
  .rb-eyebrow-treatment-accent {
75
80
  color: rgb(var(--tb-accent));
@@ -80,11 +85,11 @@
80
85
  width: fit-content;
81
86
  align-items: center;
82
87
  justify-content: center;
83
- border: 1px solid color-mix(in srgb, var(--section-text-color, rgb(var(--tb-text))) 46%, transparent);
88
+ border: 1px solid color-mix(in srgb, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))) 46%, transparent);
84
89
  border-radius: 9999px;
85
- background: color-mix(in srgb, var(--section-text-color, rgb(var(--tb-text))) 14%, transparent);
90
+ background: color-mix(in srgb, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))) 14%, transparent);
86
91
  padding: 0.5rem 1rem;
87
- color: var(--section-text-color, rgb(var(--tb-text)));
92
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
88
93
  line-height: 1;
89
94
  }
90
95
  .rb-eyebrow-treatment-pill.rb-eyebrow-treatment-accent {
@@ -576,6 +581,50 @@
576
581
  }
577
582
  }
578
583
 
584
+ /*
585
+ * Responsive fractional grid tracks (rb-grid-tracks).
586
+ *
587
+ * Asymmetric AND responsive grid-template-columns, driven by inline custom
588
+ * properties the Grid primitive sets per breakpoint from string track
589
+ * templates:
590
+ * --rb-gtc-base / --rb-gtc-sm / --rb-gtc-md / --rb-gtc-lg / --rb-gtc-xl
591
+ * Each breakpoint falls back to the next smaller one, so only the breakpoints
592
+ * an author actually sets take effect (e.g. base '1fr' + lg '1fr 0.9fr'
593
+ * collapses to a single column below lg). Authored here (not per node) so the
594
+ * @media -> @container conversion (container responsive mode) applies too.
595
+ */
596
+ .rb-grid-tracks {
597
+ grid-template-columns: var(--rb-gtc-base, 1fr);
598
+ }
599
+ @media (min-width: 640px) {
600
+ @scope ([data-rb-responsive-mode="viewport"]) to (:scope [data-rb-responsive-mode]) {
601
+ .rb-grid-tracks {
602
+ grid-template-columns: var(--rb-gtc-sm, var(--rb-gtc-base, 1fr));
603
+ }
604
+ }
605
+ }
606
+ @media (min-width: 768px) {
607
+ @scope ([data-rb-responsive-mode="viewport"]) to (:scope [data-rb-responsive-mode]) {
608
+ .rb-grid-tracks {
609
+ grid-template-columns: var(--rb-gtc-md, var(--rb-gtc-sm, var(--rb-gtc-base, 1fr)));
610
+ }
611
+ }
612
+ }
613
+ @media (min-width: 1024px) {
614
+ @scope ([data-rb-responsive-mode="viewport"]) to (:scope [data-rb-responsive-mode]) {
615
+ .rb-grid-tracks {
616
+ grid-template-columns: var(--rb-gtc-lg, var(--rb-gtc-md, var(--rb-gtc-sm, var(--rb-gtc-base, 1fr))));
617
+ }
618
+ }
619
+ }
620
+ @media (min-width: 1280px) {
621
+ @scope ([data-rb-responsive-mode="viewport"]) to (:scope [data-rb-responsive-mode]) {
622
+ .rb-grid-tracks {
623
+ grid-template-columns: var(--rb-gtc-xl, var(--rb-gtc-lg, var(--rb-gtc-md, var(--rb-gtc-sm, var(--rb-gtc-base, 1fr)))));
624
+ }
625
+ }
626
+ }
627
+
579
628
  /* Alignment */
580
629
  .rb-items-start {
581
630
  align-items: flex-start;
@@ -1761,6 +1810,11 @@
1761
1810
  :where(.theme-scope) .rb-modal {
1762
1811
  width: min(var(--rb-modal-max-width, 560px), 100%);
1763
1812
  background: var(--rb-modal-bg, rgb(var(--tb-surface)));
1813
+ color: var(--rb-modal-text, rgb(var(--tb-text, 17 24 39)));
1814
+ --rb-surface-text-color: var(--rb-modal-text, rgb(var(--tb-text, 17 24 39)));
1815
+ --rb-surface-heading-color: var(--rb-modal-heading, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
1816
+ --rb-surface-link-color: var(--rb-modal-link, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
1817
+ --rb-surface-supporting-color: var(--rb-modal-supporting, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
1764
1818
  border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
1765
1819
  border-radius: var(--rb-modal-radius, var(--radius-card));
1766
1820
  box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
@@ -1780,7 +1834,7 @@
1780
1834
  font-family: var(--font-heading);
1781
1835
  font-size: 1.0625rem;
1782
1836
  font-weight: 600;
1783
- color: rgb(var(--tb-text));
1837
+ color: var(--rb-surface-heading-color, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))));
1784
1838
  }
1785
1839
 
1786
1840
  :where(.theme-scope) .rb-modal__close {
@@ -1790,7 +1844,7 @@
1790
1844
  height: 2.25rem;
1791
1845
  padding: 0;
1792
1846
  line-height: 1;
1793
- color: rgb(var(--tb-mutedText));
1847
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText, 100 116 139))));
1794
1848
  cursor: pointer;
1795
1849
  display: grid;
1796
1850
  place-items: center;
@@ -1798,7 +1852,7 @@
1798
1852
  }
1799
1853
 
1800
1854
  :where(.theme-scope) .rb-modal__close:hover {
1801
- color: rgb(var(--tb-text));
1855
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
1802
1856
  background: rgba(var(--tb-border), 0.2);
1803
1857
  }
1804
1858
 
@@ -1809,7 +1863,7 @@
1809
1863
 
1810
1864
  :where(.theme-scope) .rb-modal__body {
1811
1865
  padding: 0.875rem 1rem 1rem;
1812
- color: rgb(var(--tb-text));
1866
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
1813
1867
  font-size: 0.9375rem;
1814
1868
  line-height: 1.45;
1815
1869
  }
@@ -1969,7 +2023,7 @@
1969
2023
  & h6 {
1970
2024
  font-family: var(--font-heading);
1971
2025
  /* Color is set by generateTypographyCss.ts with full cascade:
1972
- --section-heading-color -> --section-text-color -> --hc-hN -> --hc-heading -> inherit */
2026
+ --rb-surface-heading-color -> --rb-surface-text-color -> --hc-hN -> --hc-heading -> global text */
1973
2027
  font-weight: var(--font-weight-heading);
1974
2028
  text-transform: var(--tt-heading);
1975
2029
  font-variant-caps: var(--fv-heading);
@@ -2115,7 +2169,7 @@
2115
2169
 
2116
2170
  /* Neutral prose uses theme text color by default */
2117
2171
  :where(.theme-scope) .rb-prose-neutral {
2118
- color: var(--section-text-color, rgb(var(--tb-text)));
2172
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
2119
2173
  }
2120
2174
 
2121
2175
  :where(.theme-scope) .rb-prose p,
@@ -2149,8 +2203,14 @@
2149
2203
 
2150
2204
  :where(.theme-scope) .rb-prose a {
2151
2205
  --rb-prose-effective-link-color: var(
2152
- --section-link-color,
2153
- var(--rb-prose-link-color, rgb(var(--tb-primary)))
2206
+ --rb-surface-link-color,
2207
+ var(
2208
+ --rb-surface-text-color,
2209
+ var(
2210
+ --rb-prose-link-color,
2211
+ rgb(var(--tb-primary, var(--tb-text, 17 24 39)))
2212
+ )
2213
+ )
2154
2214
  );
2155
2215
  color: var(--rb-prose-effective-link-color);
2156
2216
  text-decoration-line: var(--rb-prose-link-decoration-line, underline);
@@ -2161,14 +2221,11 @@
2161
2221
  );
2162
2222
  text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
2163
2223
  text-decoration-color: var(
2164
- --section-link-decoration-color,
2165
- var(
2166
- --rb-prose-link-decoration-color,
2167
- color-mix(
2168
- in srgb,
2169
- var(--rb-prose-effective-link-color) 35%,
2170
- transparent
2171
- )
2224
+ --rb-prose-link-decoration-color,
2225
+ color-mix(
2226
+ in srgb,
2227
+ var(--rb-prose-effective-link-color) 35%,
2228
+ transparent
2172
2229
  )
2173
2230
  );
2174
2231
  transition:
@@ -2192,7 +2249,7 @@
2192
2249
 
2193
2250
  :where(.theme-scope) .rb-prose blockquote {
2194
2251
  /* Blockquotes use muted text color */
2195
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
2252
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText, 100 116 139))));
2196
2253
  border-left-color: rgb(var(--tb-border));
2197
2254
  }
2198
2255
 
@@ -3216,6 +3273,10 @@
3216
3273
  :where(.theme-scope) .card-surface {
3217
3274
  background: rgb(var(--tb-surface));
3218
3275
  color: rgb(var(--tb-onSurface, var(--tb-text)));
3276
+ --rb-surface-text-color: rgb(var(--tb-onSurface, var(--tb-text)));
3277
+ --rb-surface-heading-color: rgb(var(--tb-onSurface, var(--tb-text)));
3278
+ --rb-surface-link-color: rgb(var(--tb-onSurface, var(--tb-text)));
3279
+ --rb-surface-supporting-color: rgb(var(--tb-onSurface, var(--tb-text)));
3219
3280
  border: 1px solid rgb(var(--tb-border));
3220
3281
  border-radius: var(--radius-card);
3221
3282
  box-shadow: var(--shadow-elev);
@@ -3353,6 +3414,10 @@
3353
3414
  padding: clamp(1rem, 2vw, 1.5rem);
3354
3415
  background: var(--rb-reg-surface-bg, rgb(var(--tb-surface, 248 250 252)));
3355
3416
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
3417
+ --rb-surface-text-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
3418
+ --rb-surface-heading-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
3419
+ --rb-surface-link-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
3420
+ --rb-surface-supporting-color: var(--rb-reg-on-surface-muted, var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42)))));
3356
3421
  transition: border-color var(--rb-block-transition, 150ms) ease;
3357
3422
  width: 100%;
3358
3423
  max-width: 800px;
@@ -6425,6 +6490,357 @@
6425
6490
  }
6426
6491
  }
6427
6492
 
6493
+ /* -----------------------------------------------------------------------------
6494
+ * Week Board View
6495
+ * Compact "class day-board": day columns side by side, one card per class,
6496
+ * three-state availability (available / filling / waitlist), and a footer CTA.
6497
+ * ----------------------------------------------------------------------------- */
6498
+
6499
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board {
6500
+ /* Status accent tokens — map the three availability states onto theme colours.
6501
+ * available -> secondary, filling -> accent, waitlist -> muted text. */
6502
+ --ec-status-available: rgb(var(--tb-secondary));
6503
+ --ec-status-filling: rgb(var(--tb-accent));
6504
+ --ec-status-waitlist: rgba(var(--tb-text), 0.4);
6505
+ --event-week-board-cols: 7;
6506
+
6507
+ border: 1px solid var(--ec-border);
6508
+ border-radius: var(--rb-block-radius);
6509
+ background-color: var(--ec-surface);
6510
+ color: var(--ec-text);
6511
+ overflow: hidden;
6512
+ }
6513
+
6514
+ /* Opt-in raised look: a soft drop shadow so the board lifts off the page.
6515
+ * Generic default (no [data-elevated]) stays flat. */
6516
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board[data-elevated] {
6517
+ box-shadow: 0 14px 34px -24px rgba(var(--tb-text), 0.35);
6518
+ }
6519
+
6520
+ /* Top bar: title + legend */
6521
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-top {
6522
+ display: flex;
6523
+ align-items: center;
6524
+ justify-content: space-between;
6525
+ gap: 1rem;
6526
+ flex-wrap: wrap;
6527
+ padding: 1.1rem 1.5rem;
6528
+ /* surfaceAlt gives the header/footer a legible tint against the white day-grid
6529
+ * body — the faint `--ec-header-bg` (5% text) is invisible on light palettes. */
6530
+ background-color: rgb(var(--tb-surfaceAlt));
6531
+ border-bottom: 1px solid var(--ec-border-subtle);
6532
+ }
6533
+
6534
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-title {
6535
+ font-size: 0.8125rem;
6536
+ font-weight: 600;
6537
+ letter-spacing: 0.12em;
6538
+ text-transform: uppercase;
6539
+ color: rgb(var(--tb-primary));
6540
+ }
6541
+
6542
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend {
6543
+ display: flex;
6544
+ align-items: center;
6545
+ gap: 1.1rem;
6546
+ flex-wrap: wrap;
6547
+ font-size: 0.6875rem;
6548
+ letter-spacing: 0.03em;
6549
+ opacity: 0.75;
6550
+ }
6551
+
6552
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-item {
6553
+ display: inline-flex;
6554
+ align-items: center;
6555
+ gap: 0.4rem;
6556
+ }
6557
+
6558
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot {
6559
+ width: 0.55rem;
6560
+ height: 0.55rem;
6561
+ border-radius: 50%;
6562
+ display: inline-block;
6563
+ }
6564
+
6565
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="available"] {
6566
+ background-color: var(--ec-status-available);
6567
+ }
6568
+
6569
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="filling"] {
6570
+ background-color: var(--ec-status-filling);
6571
+ }
6572
+
6573
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="waitlist"] {
6574
+ background-color: var(--ec-status-waitlist);
6575
+ }
6576
+
6577
+ /* Day columns grid */
6578
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-grid {
6579
+ display: grid;
6580
+ grid-template-columns: repeat(var(--event-week-board-cols), minmax(0, 1fr));
6581
+ }
6582
+
6583
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day {
6584
+ display: flex;
6585
+ flex-direction: column;
6586
+ min-height: 15rem;
6587
+ /* Tabular column rule. Driven by the theme border tokens so borderless site
6588
+ * styles (border.width: 'none' -> --rb-border-width: 0) render no grid at all,
6589
+ * while hairline/thin/thick themes get a crisp full-strength divider. */
6590
+ border-right: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
6591
+ }
6592
+
6593
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day:last-child {
6594
+ border-right: none;
6595
+ }
6596
+
6597
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-head {
6598
+ display: flex;
6599
+ align-items: baseline;
6600
+ gap: 0.4rem;
6601
+ padding: 0.9rem 0.9rem 0.65rem;
6602
+ /* Header-row underline — same border-token gating as the column rules. */
6603
+ border-bottom: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
6604
+ }
6605
+
6606
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--today .event-week-board-day-head {
6607
+ background-color: var(--ec-today-bg);
6608
+ }
6609
+
6610
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-abbr {
6611
+ font-size: 0.6875rem;
6612
+ font-weight: 600;
6613
+ letter-spacing: 0.1em;
6614
+ text-transform: uppercase;
6615
+ opacity: 0.65;
6616
+ }
6617
+
6618
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--today .event-week-board-day-abbr {
6619
+ opacity: 1;
6620
+ color: var(--ec-today-text);
6621
+ }
6622
+
6623
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-num {
6624
+ font-size: 0.8125rem;
6625
+ font-weight: 600;
6626
+ opacity: 0.5;
6627
+ }
6628
+
6629
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-body {
6630
+ display: flex;
6631
+ flex-direction: column;
6632
+ gap: 0.65rem;
6633
+ padding: 0.9rem;
6634
+ flex: 1;
6635
+ }
6636
+
6637
+ /* Class card */
6638
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
6639
+ display: flex;
6640
+ flex-direction: column;
6641
+ gap: 0.45rem;
6642
+ padding: 0.8rem 0.85rem;
6643
+ /* Full hairline border at the site style's border strength (0 on borderless
6644
+ * styles), alongside the exaggerated status stripe on the left. `--ec-border-subtle`
6645
+ * (half-strength) reads as no border at all on light palettes. */
6646
+ border: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
6647
+ border-left: 3px solid var(--ec-status-available);
6648
+ border-radius: calc(var(--rb-block-radius) / 1.5);
6649
+ background-color: var(--ec-surface);
6650
+ color: inherit;
6651
+ text-decoration: none;
6652
+ transition:
6653
+ transform var(--rb-block-transition) ease,
6654
+ box-shadow var(--rb-block-transition) ease,
6655
+ border-color var(--rb-block-transition) ease;
6656
+ }
6657
+
6658
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card[data-status="filling"] {
6659
+ border-left-color: var(--ec-status-filling);
6660
+ }
6661
+
6662
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card[data-status="waitlist"] {
6663
+ border-left-color: var(--ec-status-waitlist);
6664
+ }
6665
+
6666
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card:hover {
6667
+ transform: translateY(-2px);
6668
+ box-shadow: 0 6px 16px -8px rgba(var(--tb-text), 0.28);
6669
+ border-color: rgba(var(--tb-primary), 0.4);
6670
+ }
6671
+
6672
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card:focus-visible {
6673
+ outline: 2px solid rgb(var(--tb-primary));
6674
+ outline-offset: 2px;
6675
+ }
6676
+
6677
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-title {
6678
+ font-family: var(--font-heading, inherit);
6679
+ font-size: 0.9375rem;
6680
+ font-weight: 600;
6681
+ line-height: 1.2;
6682
+ }
6683
+
6684
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-time {
6685
+ font-size: 0.75rem;
6686
+ letter-spacing: 0.01em;
6687
+ opacity: 0.7;
6688
+ }
6689
+
6690
+ /* Capacity pill */
6691
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill {
6692
+ align-self: flex-start;
6693
+ display: inline-flex;
6694
+ align-items: center;
6695
+ padding: 0.15rem 0.6rem;
6696
+ border-radius: 999px;
6697
+ font-size: 0.6875rem;
6698
+ font-weight: 600;
6699
+ letter-spacing: 0.02em;
6700
+ /* Available (default): a calm neutral/muted pill — not a coloured outline.
6701
+ * Filling -> amber and waitlist -> muted outline are handled by the
6702
+ * data-status overrides below. */
6703
+ border: 1px solid var(--ec-border);
6704
+ background-color: rgba(var(--tb-text), 0.06);
6705
+ color: rgba(var(--tb-text), 0.62);
6706
+ border-color: var(--ec-border);
6707
+ }
6708
+
6709
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill[data-status="filling"] {
6710
+ background-color: rgba(var(--tb-accent), 0.14);
6711
+ color: var(--ec-status-filling);
6712
+ border-color: rgba(var(--tb-accent), 0.32);
6713
+ }
6714
+
6715
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill[data-status="waitlist"] {
6716
+ background-color: transparent;
6717
+ color: rgba(var(--tb-text), 0.6);
6718
+ border-color: var(--ec-border);
6719
+ }
6720
+
6721
+ /* Footer */
6722
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-foot {
6723
+ display: flex;
6724
+ align-items: center;
6725
+ justify-content: space-between;
6726
+ gap: 1rem;
6727
+ flex-wrap: wrap;
6728
+ padding: 1.1rem 1.5rem;
6729
+ /* Matches the header tint (see .event-week-board-top). */
6730
+ background-color: rgb(var(--tb-surfaceAlt));
6731
+ border-top: 1px solid var(--ec-border-subtle);
6732
+ }
6733
+
6734
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-foot-note {
6735
+ margin: 0;
6736
+ font-size: 0.875rem;
6737
+ opacity: 0.75;
6738
+ }
6739
+
6740
+ /* Responsive: collapse day columns to a stacked list on narrow viewports */
6741
+ @media (max-width: 1023px) {
6742
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-grid {
6743
+ grid-template-columns: 1fr;
6744
+ }
6745
+
6746
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day {
6747
+ min-height: 0;
6748
+ border-right: none;
6749
+ border-bottom: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
6750
+ }
6751
+
6752
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day:last-child {
6753
+ border-bottom: none;
6754
+ }
6755
+
6756
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--empty {
6757
+ display: none;
6758
+ }
6759
+
6760
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-head {
6761
+ border-bottom: none;
6762
+ padding-bottom: 0.25rem;
6763
+ }
6764
+
6765
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-body {
6766
+ flex-direction: row;
6767
+ flex-wrap: wrap;
6768
+ padding-top: 0.35rem;
6769
+ }
6770
+
6771
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
6772
+ flex: 1 1 14rem;
6773
+ }
6774
+ }
6775
+
6776
+ @media (max-width: 639px) {
6777
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend {
6778
+ display: none;
6779
+ }
6780
+
6781
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
6782
+ flex: 1 1 100%;
6783
+ }
6784
+ }
6785
+
6786
+ /* -----------------------------------------------------------------------------
6787
+ * Week-board section band
6788
+ * Give the whole week-board section (head + panel) a subtle surface band so it
6789
+ * reads as a distinct zone from the page — the "testimonials band" pattern.
6790
+ * Painted as a pseudo-element above the section's fallback background layer
6791
+ * (z-index -10) but behind the content, so no block-content wiring is needed.
6792
+ * Surface + hairline rules are token-referenced: on a borderless site style
6793
+ * (--rb-border-width: 0) the band keeps its surface tint but drops the rules.
6794
+ * Opt-in only: the band paints when the board root carries [data-banded];
6795
+ * the generic default is bandless.
6796
+ * ----------------------------------------------------------------------------- */
6797
+ :where(.theme-scope) [data-slot="section"]:has(.event-calendar--week-board[data-banded])::before {
6798
+ content: "";
6799
+ position: absolute;
6800
+ inset: 0;
6801
+ z-index: -9;
6802
+ background-color: rgb(var(--tb-surfaceAlt));
6803
+ border-block: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
6804
+ pointer-events: none;
6805
+ }
6806
+
6807
+ /* -----------------------------------------------------------------------------
6808
+ * Event section head — split (heading left, intro right)
6809
+ * Rendered by the block frame (outside [data-block="event-calendar"]) via
6810
+ * eventSectionHeaderLayoutNodes({ splitClassName }). Lays the heading and its
6811
+ * supporting intro out as a two-column head on wide viewports, stacking on
6812
+ * narrow ones. The section band above provides the distinct background.
6813
+ * ----------------------------------------------------------------------------- */
6814
+ :where(.theme-scope) .event-section-head--split {
6815
+ display: flex;
6816
+ align-items: flex-end;
6817
+ justify-content: space-between;
6818
+ gap: clamp(1.5rem, 4vw, 3.5rem);
6819
+ flex-wrap: wrap;
6820
+ }
6821
+
6822
+ :where(.theme-scope) .event-section-head--split > :where(h1, h2, h3) {
6823
+ margin: 0;
6824
+ }
6825
+
6826
+ :where(.theme-scope) .event-section-head--split > .rb-prose {
6827
+ flex: 1 1 22rem;
6828
+ max-width: 34rem;
6829
+ margin: 0;
6830
+ }
6831
+
6832
+ @media (max-width: 767px) {
6833
+ :where(.theme-scope) .event-section-head--split {
6834
+ flex-direction: column;
6835
+ align-items: flex-start;
6836
+ gap: 0.75rem;
6837
+ }
6838
+
6839
+ :where(.theme-scope) .event-section-head--split > .rb-prose {
6840
+ flex-basis: auto;
6841
+ }
6842
+ }
6843
+
6428
6844
  /* -----------------------------------------------------------------------------
6429
6845
  * Event Calendar Modals
6430
6846
  * Modal overlays for event details and day events list
@@ -6854,7 +7270,7 @@
6854
7270
  }
6855
7271
 
6856
7272
  :where(.theme-scope) .rb-inline-text-accent-contrast {
6857
- color: var(--section-text-color, rgb(var(--tb-text)));
7273
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
6858
7274
  }
6859
7275
 
6860
7276
  :where(.theme-scope) .rb-inline-text-highlight {
@@ -6865,7 +7281,7 @@
6865
7281
  }
6866
7282
 
6867
7283
  :where(.theme-scope) .rb-inline-text-highlight-soft {
6868
- background: color-mix(in oklab, var(--section-text-color, rgb(var(--tb-text))) 14%, transparent);
7284
+ background: color-mix(in oklab, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))) 14%, transparent);
6869
7285
  }
6870
7286
 
6871
7287
  :where(.theme-scope) .rb-inline-text-highlight-accent {
@@ -6886,7 +7302,7 @@
6886
7302
 
6887
7303
  /* Eyebrow - color only (typography via .rb-eyebrow) */
6888
7304
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow:not(.rb-eyebrow-treatment-accent) {
6889
- color: var(--section-text-color, rgb(var(--tb-text)));
7305
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
6890
7306
  }
6891
7307
 
6892
7308
  /* Subheadline - supporting text below headline */
@@ -6896,7 +7312,7 @@
6896
7312
 
6897
7313
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
6898
7314
  font-size: 1.125rem;
6899
- color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
7315
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText, 100 116 139))));
6900
7316
  }
6901
7317
 
6902
7318
  @media (min-width: 640px) {
@@ -6985,7 +7401,7 @@
6985
7401
 
6986
7402
  /* CTA content/body text */
6987
7403
  :where(.theme-scope) :where([data-block="cta-full"]) .cta-content {
6988
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
7404
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText, 100 116 139))));
6989
7405
  }
6990
7406
 
6991
7407
  /* CTA button row container */
@@ -7087,7 +7503,7 @@
7087
7503
  /* Form intro text */
7088
7504
  :where(.theme-scope) :where([data-block="form"]) .form-copy-intro {
7089
7505
  font-size: 1rem;
7090
- color: var(--section-text-color, rgb(var(--tb-text)));
7506
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
7091
7507
  }
7092
7508
 
7093
7509
  /* =============================================================================
@@ -7448,6 +7864,10 @@
7448
7864
  --rb-modal-overlay-bg: rgb(var(--tb-text, 0 0 0) / 0.6);
7449
7865
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
7450
7866
  --rb-modal-z-index: 20000;
7867
+ --rb-modal-text: rgb(var(--tb-text, 17 24 39));
7868
+ --rb-modal-heading: rgb(var(--tb-text, 17 24 39));
7869
+ --rb-modal-link: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
7870
+ --rb-modal-supporting: rgb(var(--tb-mutedText, 100 116 139));
7451
7871
  --shop-card-radius: var(--rb-block-radius, var(--radius-card, 0.75rem));
7452
7872
  --shop-control-radius: var(--rb-input-radius, var(--radius-control, 0.375rem));
7453
7873
  }
@@ -7458,7 +7878,7 @@
7458
7878
  }
7459
7879
 
7460
7880
  :where(.theme-scope) .shop__empty-text {
7461
- color: rgb(var(--tb-mutedText));
7881
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText))));
7462
7882
  font-size: var(--fs-body, 1rem);
7463
7883
  }
7464
7884
 
@@ -7484,7 +7904,7 @@
7484
7904
  :where(.theme-scope) .shop__section-heading {
7485
7905
  font-size: var(--fs-h3, 1.25rem);
7486
7906
  font-weight: 600;
7487
- color: rgb(var(--tb-text));
7907
+ color: var(--rb-surface-heading-color, var(--rb-surface-text-color, rgb(var(--tb-text))));
7488
7908
  margin-bottom: 1rem;
7489
7909
  font-family: var(--font-heading);
7490
7910
  }
@@ -7502,15 +7922,136 @@
7502
7922
  gap: 1rem;
7503
7923
  }
7504
7924
 
7505
- /* Product card */
7506
- :where(.theme-scope) .shop__card {
7507
- background: rgb(var(--tb-surface));
7508
- border: 1px solid rgb(var(--tb-border));
7509
- border-radius: var(--shop-card-radius);
7510
- padding: 1.5rem;
7511
- display: flex;
7512
- flex-direction: column;
7513
- gap: 0.75rem;
7925
+ /* Compact product register: useful for small, scannable pass/package sets. */
7926
+ :where(.theme-scope) .shop--register .shop__section {
7927
+ margin-bottom: 0;
7928
+ }
7929
+
7930
+ :where(.theme-scope) .shop--register .shop__section-heading {
7931
+ margin-bottom: 1rem;
7932
+ font-size: clamp(1.4rem, 2.2vw, 1.7rem);
7933
+ }
7934
+
7935
+ :where(.theme-scope) .shop--register .shop__products--register {
7936
+ display: flex;
7937
+ flex-direction: column;
7938
+ border-top: 1px solid color-mix(in oklab, currentColor, transparent 78%);
7939
+ }
7940
+
7941
+ :where(.theme-scope) .shop--register .shop__card {
7942
+ display: grid;
7943
+ grid-template-columns: minmax(8rem, 0.85fr) auto minmax(12rem, 1.5fr) auto;
7944
+ grid-template-rows: auto;
7945
+ align-items: center;
7946
+ column-gap: clamp(1rem, 3vw, 2.5rem);
7947
+ padding: 1rem 0;
7948
+ border: 0;
7949
+ border-bottom: 1px solid color-mix(in oklab, currentColor, transparent 78%);
7950
+ border-radius: 0;
7951
+ background: transparent;
7952
+ color: inherit;
7953
+ --rb-surface-text-color: inherit;
7954
+ --rb-surface-heading-color: inherit;
7955
+ --rb-surface-link-color: inherit;
7956
+ --rb-surface-supporting-color: inherit;
7957
+ }
7958
+
7959
+ :where(.theme-scope) .shop--register .shop__card-header {
7960
+ display: contents;
7961
+ }
7962
+
7963
+ :where(.theme-scope) .shop--register .shop__card-name,
7964
+ :where(.theme-scope) .shop--register .shop__card-price,
7965
+ :where(.theme-scope) .shop--register .shop__card-details,
7966
+ :where(.theme-scope) .shop--register .shop__cta {
7967
+ margin: 0;
7968
+ }
7969
+
7970
+ :where(.theme-scope) .shop--register .shop__card-name {
7971
+ grid-column: 1;
7972
+ grid-row: 1;
7973
+ font-family: var(--font-heading);
7974
+ font-size: 1.15rem;
7975
+ font-weight: 400;
7976
+ }
7977
+
7978
+ :where(.theme-scope) .shop--register .shop__card-price {
7979
+ grid-column: 2;
7980
+ grid-row: 1;
7981
+ font-size: 0.98rem;
7982
+ font-weight: 500;
7983
+ white-space: nowrap;
7984
+ color: var(--rb-surface-link-color, var(--rb-surface-text-color, inherit));
7985
+ }
7986
+
7987
+ :where(.theme-scope) .shop--register .shop__card-description {
7988
+ grid-column: 1 / -1;
7989
+ margin-top: 0.35rem;
7990
+ }
7991
+
7992
+ :where(.theme-scope) .shop--register .shop__card-details {
7993
+ grid-column: 3;
7994
+ grid-row: 1;
7995
+ display: flex;
7996
+ flex-wrap: wrap;
7997
+ gap: 0.35rem 1rem;
7998
+ color: var(--rb-surface-supporting-color, rgb(var(--tb-mutedText)));
7999
+ font-size: 0.86rem;
8000
+ }
8001
+
8002
+ :where(.theme-scope) .shop--register .shop__cta {
8003
+ grid-column: 4;
8004
+ grid-row: 1;
8005
+ align-self: center;
8006
+ margin-left: auto;
8007
+ }
8008
+
8009
+ :where(.theme-scope) .shop--register .shop__card > [role='status'] {
8010
+ grid-column: 1 / -1;
8011
+ }
8012
+
8013
+ @media (max-width: 767px) {
8014
+ :where(.theme-scope) .shop--register .shop__card {
8015
+ grid-template-columns: minmax(0, 1fr) auto;
8016
+ row-gap: 0.45rem;
8017
+ }
8018
+
8019
+ :where(.theme-scope) .shop--register .shop__card-name {
8020
+ grid-column: 1;
8021
+ }
8022
+
8023
+ :where(.theme-scope) .shop--register .shop__card-price {
8024
+ grid-column: 2;
8025
+ grid-row: 1;
8026
+ }
8027
+
8028
+ :where(.theme-scope) .shop--register .shop__card-details {
8029
+ grid-column: 1 / -1;
8030
+ grid-row: 2;
8031
+ }
8032
+
8033
+ :where(.theme-scope) .shop--register .shop__cta {
8034
+ grid-column: 1 / -1;
8035
+ grid-row: 3;
8036
+ justify-self: start;
8037
+ margin-left: 0;
8038
+ }
8039
+ }
8040
+
8041
+ /* Product card */
8042
+ :where(.theme-scope) .shop__card {
8043
+ background: rgb(var(--tb-surface));
8044
+ color: rgb(var(--tb-text, 17 24 39));
8045
+ --rb-surface-text-color: rgb(var(--tb-text, 17 24 39));
8046
+ --rb-surface-heading-color: rgb(var(--tb-text, 17 24 39));
8047
+ --rb-surface-link-color: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
8048
+ --rb-surface-supporting-color: rgb(var(--tb-mutedText, 100 116 139));
8049
+ border: 1px solid rgb(var(--tb-border));
8050
+ border-radius: var(--shop-card-radius);
8051
+ padding: 1.5rem;
8052
+ display: flex;
8053
+ flex-direction: column;
8054
+ gap: 0.75rem;
7514
8055
  }
7515
8056
 
7516
8057
  /* No hover shadow (buttons + theme do the emphasis) */
@@ -7525,7 +8066,7 @@
7525
8066
  :where(.theme-scope) .shop__card-name {
7526
8067
  font-size: 1.125rem;
7527
8068
  font-weight: 600;
7528
- color: rgb(var(--tb-text));
8069
+ color: var(--rb-surface-heading-color, rgb(var(--tb-text)));
7529
8070
  margin: 0;
7530
8071
  font-family: var(--font-heading);
7531
8072
  }
@@ -7533,19 +8074,19 @@
7533
8074
  :where(.theme-scope) .shop__card-price {
7534
8075
  font-size: 1.125rem;
7535
8076
  font-weight: 700;
7536
- color: rgb(var(--tb-primary));
8077
+ color: var(--rb-surface-link-color, rgb(var(--tb-primary)));
7537
8078
  white-space: nowrap;
7538
8079
  }
7539
8080
 
7540
8081
  :where(.theme-scope) .shop__card-interval {
7541
8082
  font-size: 0.875rem;
7542
8083
  font-weight: 400;
7543
- color: rgb(var(--tb-mutedText));
8084
+ color: var(--rb-surface-supporting-color, rgb(var(--tb-mutedText)));
7544
8085
  }
7545
8086
 
7546
8087
  :where(.theme-scope) .shop__card-description {
7547
8088
  font-size: 0.875rem;
7548
- color: rgb(var(--tb-mutedText));
8089
+ color: var(--rb-surface-supporting-color, rgb(var(--tb-mutedText)));
7549
8090
  line-height: 1.5;
7550
8091
  margin: 0;
7551
8092
  }
@@ -7555,7 +8096,7 @@
7555
8096
  flex-wrap: wrap;
7556
8097
  gap: 0.5rem 1rem;
7557
8098
  font-size: 0.875rem;
7558
- color: rgb(var(--tb-text));
8099
+ color: var(--rb-surface-text-color, rgb(var(--tb-text)));
7559
8100
  }
7560
8101
 
7561
8102
  :where(.theme-scope) .shop__card-credits {
@@ -7563,16 +8104,16 @@
7563
8104
  }
7564
8105
 
7565
8106
  :where(.theme-scope) .shop__card-per-credit {
7566
- color: rgb(var(--tb-mutedText));
8107
+ color: var(--rb-surface-supporting-color, rgb(var(--tb-mutedText)));
7567
8108
  }
7568
8109
 
7569
8110
  :where(.theme-scope) .shop__card-validity {
7570
- color: rgb(var(--tb-mutedText));
8111
+ color: var(--rb-surface-supporting-color, rgb(var(--tb-mutedText)));
7571
8112
  }
7572
8113
 
7573
8114
  :where(.theme-scope) .shop__card-unlimited {
7574
8115
  font-weight: 500;
7575
- color: rgb(var(--tb-secondary, var(--tb-primary)));
8116
+ color: var(--rb-surface-link-color, rgb(var(--tb-secondary, var(--tb-primary))));
7576
8117
  }
7577
8118
 
7578
8119
  /* CTA layout: use theme button classes for visuals */
@@ -7657,6 +8198,11 @@
7657
8198
  border: 1px solid rgb(var(--tb-border));
7658
8199
  border-radius: var(--shop-card-radius);
7659
8200
  background: rgb(var(--tb-surface));
8201
+ color: rgb(var(--tb-text, 17 24 39));
8202
+ --rb-surface-text-color: rgb(var(--tb-text, 17 24 39));
8203
+ --rb-surface-heading-color: rgb(var(--tb-text, 17 24 39));
8204
+ --rb-surface-link-color: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
8205
+ --rb-surface-supporting-color: rgb(var(--tb-mutedText, 100 116 139));
7660
8206
  }
7661
8207
 
7662
8208
  :where(.theme-scope) :where([data-block="shop"]) .rb-state-icon--success {
@@ -7729,6 +8275,11 @@
7729
8275
  margin: 0 auto;
7730
8276
  padding: 2rem;
7731
8277
  background: var(--cp-card-bg);
8278
+ color: var(--cp-text);
8279
+ --rb-surface-text-color: var(--cp-text);
8280
+ --rb-surface-heading-color: var(--cp-text);
8281
+ --rb-surface-link-color: var(--cp-primary);
8282
+ --rb-surface-supporting-color: var(--cp-muted);
7732
8283
  border: 1px solid var(--cp-card-border);
7733
8284
  border-radius: var(--cp-card-radius);
7734
8285
  }
@@ -7857,6 +8408,11 @@
7857
8408
  padding: 3rem 2rem;
7858
8409
  text-align: center;
7859
8410
  background: var(--cp-card-bg);
8411
+ color: var(--cp-text);
8412
+ --rb-surface-text-color: var(--cp-text);
8413
+ --rb-surface-heading-color: var(--cp-text);
8414
+ --rb-surface-link-color: var(--cp-primary);
8415
+ --rb-surface-supporting-color: var(--cp-muted);
7860
8416
  border: 1px dashed var(--cp-card-border);
7861
8417
  border-radius: var(--cp-card-radius);
7862
8418
  }
@@ -7869,6 +8425,11 @@
7869
8425
  /* Card */
7870
8426
  :where(.theme-scope) :where([data-block="customer-portal"]) .cp-card {
7871
8427
  background: var(--cp-card-bg);
8428
+ color: var(--cp-text);
8429
+ --rb-surface-text-color: var(--cp-text);
8430
+ --rb-surface-heading-color: var(--cp-text);
8431
+ --rb-surface-link-color: var(--cp-primary);
8432
+ --rb-surface-supporting-color: var(--cp-muted);
7872
8433
  border: 1px solid var(--cp-card-border);
7873
8434
  border-radius: var(--cp-card-radius);
7874
8435
  padding: 1.25rem;
@@ -8033,6 +8594,11 @@
8033
8594
  /* Table */
8034
8595
  :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table-wrap {
8035
8596
  background: var(--cp-card-bg);
8597
+ color: var(--cp-text);
8598
+ --rb-surface-text-color: var(--cp-text);
8599
+ --rb-surface-heading-color: var(--cp-text);
8600
+ --rb-surface-link-color: var(--cp-primary);
8601
+ --rb-surface-supporting-color: var(--cp-muted);
8036
8602
  border: 1px solid var(--cp-card-border);
8037
8603
  border-radius: var(--cp-card-radius);
8038
8604
  }
@@ -8594,6 +9160,149 @@
8594
9160
  }
8595
9161
 
8596
9162
 
9163
+ /* =============================================================================
9164
+ * Variant: featured-editorial
9165
+ *
9166
+ * An asymmetric layout: a large featured (spruce-ink) quote card beside a
9167
+ * column of stacked white cards. Renders NO avatars. Colours are palette
9168
+ * tokens only. Node structure is built in testimonialsCarousel.ts.
9169
+ * ============================================================================= */
9170
+
9171
+ /* Establish an inline-size query container so the head and grid below respond
9172
+ * to the block's own width, not the browser viewport. A viewport @media query
9173
+ * collapses to 1-col in the dashboard's scaled preview canvas (which reads the
9174
+ * dashboard window, not the canvas) and when the block sits in a narrow column;
9175
+ * @container tracks the actual laid-out width — matching the split-grid variant. */
9176
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe {
9177
+ container-type: inline-size;
9178
+ container-name: rb-testimonials-fe;
9179
+ }
9180
+
9181
+ /* Section head: heading left, lead-in line to the right; stacks on mobile. */
9182
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-head {
9183
+ display: flex;
9184
+ flex-direction: column;
9185
+ align-items: flex-start;
9186
+ gap: 0.875rem;
9187
+ }
9188
+
9189
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-leadin {
9190
+ max-width: 30rem;
9191
+ }
9192
+
9193
+ @container rb-testimonials-fe (min-width: 768px) {
9194
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-head {
9195
+ flex-direction: row;
9196
+ align-items: flex-end;
9197
+ justify-content: space-between;
9198
+ gap: 1.5rem;
9199
+ }
9200
+ }
9201
+
9202
+ /* Card grid: featured (wider) beside the stacked column. Single column on
9203
+ * small screens. */
9204
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-grid {
9205
+ display: grid;
9206
+ grid-template-columns: minmax(0, 1fr);
9207
+ gap: 1.25rem;
9208
+ align-items: stretch;
9209
+ }
9210
+
9211
+ @container rb-testimonials-fe (min-width: 1024px) {
9212
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-grid {
9213
+ grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
9214
+ }
9215
+ }
9216
+
9217
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-col {
9218
+ display: grid;
9219
+ gap: 1.25rem;
9220
+ align-content: start;
9221
+ }
9222
+
9223
+ /* Base card (white surface) */
9224
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card {
9225
+ display: flex;
9226
+ flex-direction: column;
9227
+ height: 100%;
9228
+ border-radius: var(--rb-block-radius);
9229
+ padding: 1.875rem 1.875rem 1.625rem;
9230
+ background: rgb(var(--tb-surface));
9231
+ border: 1px solid rgba(var(--tb-border), 0.9);
9232
+ box-shadow: 0 1px 2px rgba(var(--tb-shadow, 0 0 0), 0.05);
9233
+ }
9234
+
9235
+ /* Featured (spruce-ink) card */
9236
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card--feature {
9237
+ padding: 2.5rem;
9238
+ background: rgb(var(--tb-primary));
9239
+ border-color: transparent;
9240
+ color: rgb(var(--tb-onPrimary));
9241
+ }
9242
+
9243
+ /* Amber quote mark, oversized serif */
9244
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-qmark {
9245
+ display: block;
9246
+ height: 1.6rem;
9247
+ font-family: var(--font-heading, Georgia, serif);
9248
+ font-style: italic;
9249
+ font-size: 3.375rem;
9250
+ line-height: 0.6;
9251
+ color: rgb(var(--tb-secondary));
9252
+ }
9253
+
9254
+ /* Quote body. The inner <p> is targeted directly (not via :where) so the
9255
+ * serif display font and sizing win over the theme's base paragraph rule. */
9256
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-quote {
9257
+ flex: 1 1 auto;
9258
+ margin-top: 1.25rem;
9259
+ }
9260
+
9261
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-quote p {
9262
+ margin: 0;
9263
+ font-family: var(--font-heading, Georgia, serif);
9264
+ font-size: 1.15rem;
9265
+ line-height: 1.5;
9266
+ color: rgb(var(--tb-text));
9267
+ }
9268
+
9269
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card--feature .rb-testimonials-fe-quote p {
9270
+ color: rgb(var(--tb-onPrimary));
9271
+ font-size: clamp(1.375rem, 2.4vw, 1.6875rem);
9272
+ line-height: 1.42;
9273
+ letter-spacing: -0.01em;
9274
+ }
9275
+
9276
+ /* Attribution: name (bold) + context line, no avatar */
9277
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-meta {
9278
+ display: flex;
9279
+ flex-direction: column;
9280
+ gap: 0.25rem;
9281
+ margin-top: 1.625rem;
9282
+ }
9283
+
9284
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-name {
9285
+ font-weight: 600;
9286
+ font-size: 0.97rem;
9287
+ color: rgb(var(--tb-text));
9288
+ }
9289
+
9290
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-context {
9291
+ font-size: 0.78rem;
9292
+ letter-spacing: 0.02em;
9293
+ color: rgb(var(--tb-mutedText));
9294
+ }
9295
+
9296
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card--feature .rb-testimonials-fe-name {
9297
+ color: rgb(var(--tb-onPrimary));
9298
+ }
9299
+
9300
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card--feature .rb-testimonials-fe-context {
9301
+ color: rgb(var(--tb-onPrimary));
9302
+ opacity: 0.7;
9303
+ }
9304
+
9305
+
8597
9306
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
8598
9307
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
8599
9308
  height: var(--rb-testimonial-carousel-arrow-size);
@@ -9737,7 +10446,7 @@
9737
10446
 
9738
10447
  :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
9739
10448
  font-size: 1rem;
9740
- color: var(--section-text-color, rgb(var(--tb-text)));
10449
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
9741
10450
  opacity: 0.85;
9742
10451
  }
9743
10452
 
@@ -9786,7 +10495,7 @@
9786
10495
  margin-top: 0.75rem;
9787
10496
  font-size: 1rem;
9788
10497
  line-height: 1.6;
9789
- color: var(--section-text-color, rgb(var(--tb-text)));
10498
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
9790
10499
  text-align: center;
9791
10500
  }
9792
10501
 
@@ -9823,6 +10532,50 @@
9823
10532
  }
9824
10533
  }
9825
10534
 
10535
+ /* =============================================================================
10536
+ * Editorial Split Variant
10537
+ * =============================================================================
10538
+ */
10539
+
10540
+ :where(.theme-scope) .newsletter-editorial-split {
10541
+ display: grid;
10542
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
10543
+ gap: clamp(2.5rem, 7vw, 7rem);
10544
+ align-items: center;
10545
+ text-align: left;
10546
+ }
10547
+
10548
+ :where(.theme-scope) .newsletter-editorial-split-copy {
10549
+ display: flex;
10550
+ flex-direction: column;
10551
+ gap: var(--rb-gap-sm, 0.75rem);
10552
+ }
10553
+
10554
+ :where(.theme-scope) .newsletter-editorial-split-form {
10555
+ min-width: 0;
10556
+ }
10557
+
10558
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
10559
+ max-width: none;
10560
+ margin-inline: 0;
10561
+ }
10562
+
10563
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
10564
+ font-size: clamp(2rem, 4vw, 3.5rem);
10565
+ font-weight: 500;
10566
+ }
10567
+
10568
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
10569
+ text-align: left;
10570
+ }
10571
+
10572
+ @media (max-width: 767px) {
10573
+ :where(.theme-scope) .newsletter-editorial-split {
10574
+ grid-template-columns: minmax(0, 1fr);
10575
+ gap: 2rem;
10576
+ }
10577
+ }
10578
+
9826
10579
  /* =============================================================================
9827
10580
  * Success State
9828
10581
  * =============================================================================
@@ -9867,7 +10620,7 @@
9867
10620
 
9868
10621
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
9869
10622
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
9870
- color: var(--section-text-color, rgb(var(--tb-text)));
10623
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
9871
10624
  }
9872
10625
 
9873
10626
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
@@ -10264,7 +11017,7 @@
10264
11017
 
10265
11018
  :where(.theme-scope) .event-compact-row-title {
10266
11019
  margin: 0;
10267
- color: var(--section-heading-color, rgb(var(--tb-primary, 0 0 0)));
11020
+ color: var(--rb-surface-heading-color, var(--rb-surface-text-color, rgb(var(--tb-primary, var(--tb-text, 17 24 39)))));
10268
11021
  font-family: var(--font-heading, var(--font-body, inherit));
10269
11022
  font-size: clamp(1.05rem, 1rem + 0.35vw, 1.3rem);
10270
11023
  font-weight: 400;
@@ -10842,13 +11595,13 @@
10842
11595
  * bleeds to the card edges and the inner content stack drops its fallback
10843
11596
  * padding so insets don't double up.
10844
11597
  */
10845
- :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-media {
11598
+ :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-media-frame {
10846
11599
  width: calc(100% + 2 * var(--rb-card-pad, 0rem));
10847
11600
  max-width: none;
10848
11601
  margin: calc(-1 * var(--rb-card-pad, 0rem)) calc(-1 * var(--rb-card-pad, 0rem)) 0;
10849
11602
  }
10850
11603
 
10851
- :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-media + .rb-feature-card-content {
11604
+ :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-media-frame + .rb-feature-card-content {
10852
11605
  margin-top: 1.4rem;
10853
11606
  }
10854
11607
 
@@ -10899,63 +11652,184 @@
10899
11652
  background: rgb(var(--tb-primary, 0 0 0));
10900
11653
  }
10901
11654
 
10902
- :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-feature-card-media {
11655
+ :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-feature-card-media-frame {
10903
11656
  margin-top: 1.6rem;
10904
11657
  border-radius: calc(var(--rb-block-radius, 0.75rem) * 0.5);
10905
11658
  }
10906
11659
 
10907
- :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-feature-card-content {
10908
- padding: 1.6rem 0 0.25rem;
11660
+ :where(.theme-scope) .rb-feature-card > .rb-bg-surface,
11661
+ :where(.theme-scope) .rb-feature-card > .rb-feature-card-media-frame {
11662
+ border-start-start-radius: inherit;
11663
+ border-start-end-radius: inherit;
10909
11664
  }
10910
11665
 
10911
- :where(.theme-scope) .rb-card-treatment-editorial-rule .cta-row .button-ghost {
10912
- padding-inline: 0;
11666
+ /* --- Editorial diptych + pathways ----------------------------------------- */
11667
+
11668
+ :where(.theme-scope) .rb-feature-cards-heading--editorial {
11669
+ margin-inline: 0;
11670
+ text-align: left;
10913
11671
  }
10914
11672
 
10915
- /* --- Colour-blocked --------------------------------------------------------- */
11673
+ :where(.theme-scope) .rb-feature-cards-eyebrow {
11674
+ margin: 0;
11675
+ color: rgb(var(--tb-accent));
11676
+ font-size: 0.72rem;
11677
+ font-weight: 600;
11678
+ letter-spacing: 0.14em;
11679
+ text-transform: uppercase;
11680
+ }
10916
11681
 
10917
- /*
10918
- * Bold, flat cards that each take a different palette colour by position,
10919
- * cycled across the grid, with a staggered vertical offset on wider screens.
10920
- * The background layer (`.rb-bg-surface`) is recoloured per card; the card's
10921
- * text colour is set to the matching on-colour so content stays readable.
10922
- */
10923
- :where(.theme-scope) .rb-card-treatment-color-blocked {
11682
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-diptych {
11683
+ grid-template-columns: minmax(0, 1.12fr) minmax(0, 0.88fr);
11684
+ align-items: stretch;
11685
+ }
11686
+
11687
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-pathways {
11688
+ grid-template-columns: repeat(2, minmax(0, 1fr));
11689
+ align-items: start;
11690
+ }
11691
+
11692
+ :where(.theme-scope) .rb-feature-cards-grid:is(
11693
+ .rb-feature-cards-grid--editorial-diptych,
11694
+ .rb-feature-cards-grid--editorial-pathways
11695
+ ) .rb-feature-card {
11696
+ border: 0;
10924
11697
  box-shadow: none;
11698
+ height: auto;
11699
+ min-width: 0;
10925
11700
  }
10926
11701
 
10927
- /* Per-card colour cycle. The `on*` colours are always derived by the palette
10928
- * (expandPalette emits onSurface/onSecondary/onPrimary), so no fallback. */
10929
- :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 1) > .rb-bg-surface {
10930
- background: rgb(var(--tb-surface));
11702
+ :where(.theme-scope) .rb-feature-cards-grid:is(
11703
+ .rb-feature-cards-grid--editorial-diptych,
11704
+ .rb-feature-cards-grid--editorial-pathways
11705
+ ) .rb-feature-card[data-surface-role="open"] > .rb-bg-surface {
11706
+ background: transparent;
10931
11707
  }
10932
- :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 1) {
10933
- color: rgb(var(--tb-onSurface));
11708
+
11709
+ :where(.theme-scope) .rb-feature-cards-grid:is(
11710
+ .rb-feature-cards-grid--editorial-diptych,
11711
+ .rb-feature-cards-grid--editorial-pathways
11712
+ ) .rb-feature-card[data-surface-role="open"] > .rb-feature-card-content {
11713
+ padding-inline: 0;
10934
11714
  }
10935
11715
 
10936
- :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 2) > .rb-bg-surface {
10937
- background: rgb(var(--tb-secondary));
11716
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-pathways .rb-feature-card > .rb-bg-surface {
11717
+ background: transparent;
10938
11718
  }
10939
- :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 2) {
10940
- color: rgb(var(--tb-onSecondary));
11719
+
11720
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-pathways .rb-feature-card > .rb-feature-card-content {
11721
+ padding-inline: 0;
10941
11722
  }
10942
11723
 
10943
- :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 3) > .rb-bg-surface {
11724
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-diptych .rb-feature-card[data-surface-role="panel"] {
11725
+ color: rgb(var(--tb-onPrimary));
11726
+ --rb-surface-text-color: rgb(var(--tb-onPrimary));
11727
+ --rb-surface-heading-color: rgb(var(--tb-onPrimary));
11728
+ --rb-surface-link-color: rgb(var(--tb-onPrimary));
11729
+ --rb-surface-supporting-color: color-mix(in oklab, rgb(var(--tb-onPrimary)), transparent 18%);
11730
+ }
11731
+
11732
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-diptych .rb-feature-card[data-surface-role="panel"] > .rb-bg-surface {
10944
11733
  background: rgb(var(--tb-primary));
11734
+ border-radius: inherit;
10945
11735
  }
10946
- :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 3) {
10947
- color: rgb(var(--tb-onPrimary));
11736
+
11737
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-diptych .rb-feature-card[data-surface-role="panel"] > .rb-feature-card-media-frame {
11738
+ width: calc(100% - 2.5rem);
11739
+ margin: 1.25rem 1.25rem 0;
11740
+ border-radius: calc(var(--rb-block-radius, 0.75rem) * 0.55);
10948
11741
  }
10949
11742
 
10950
- /* Body copy carries an inline muted colour from the block; force it to the
10951
- * card's on-colour so it reads on every block (inline style needs !important). */
10952
- :where(.theme-scope) .rb-card-treatment-color-blocked .rb-feature-card-body {
10953
- color: inherit !important;
10954
- opacity: 0.9;
11743
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-pathways .rb-feature-card-content {
11744
+ padding-top: 1.35rem;
10955
11745
  }
10956
11746
 
10957
- /* The number marker defaults to the brand accent, which collides with the
10958
- * primary-coloured card in the cycle. On colour-blocked cards use the card's
11747
+ @media (min-width: 768px) {
11748
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-diptych .rb-feature-card[data-surface-role="panel"] {
11749
+ margin-top: clamp(2rem, 5vw, 4.5rem);
11750
+ }
11751
+
11752
+ :where(.theme-scope) .rb-feature-cards-grid--editorial-pathways .rb-feature-card + .rb-feature-card {
11753
+ border-left: 1px solid color-mix(in oklab, currentColor, transparent 82%);
11754
+ padding-left: clamp(1.5rem, 4vw, 4rem);
11755
+ }
11756
+ }
11757
+
11758
+ @media (max-width: 767px) {
11759
+ :where(.theme-scope) .rb-feature-cards-grid:is(
11760
+ .rb-feature-cards-grid--editorial-diptych,
11761
+ .rb-feature-cards-grid--editorial-pathways
11762
+ ) {
11763
+ grid-template-columns: minmax(0, 1fr);
11764
+ }
11765
+ }
11766
+
11767
+ :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-feature-card-content {
11768
+ padding: 1.6rem 0 0.25rem;
11769
+ }
11770
+
11771
+ :where(.theme-scope) .rb-card-treatment-editorial-rule .cta-row .button-ghost {
11772
+ padding-inline: 0;
11773
+ }
11774
+
11775
+ /* --- Colour-blocked --------------------------------------------------------- */
11776
+
11777
+ /*
11778
+ * Bold, flat cards that each take a different palette colour by position,
11779
+ * cycled across the grid, with a staggered vertical offset on wider screens.
11780
+ * The background layer (`.rb-bg-surface`) is recoloured per card; the card's
11781
+ * text colour is set to the matching on-colour so content stays readable.
11782
+ */
11783
+ :where(.theme-scope) .rb-card-treatment-color-blocked {
11784
+ box-shadow: none;
11785
+ }
11786
+
11787
+ /* Per-card colour cycle. The `on*` colours are always derived by the palette
11788
+ * (expandPalette emits onSurface/onSecondary/onPrimary), so no fallback. */
11789
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 1) > .rb-bg-surface {
11790
+ background: rgb(var(--tb-surface));
11791
+ }
11792
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 1) {
11793
+ background: rgb(var(--tb-surface));
11794
+ color: rgb(var(--tb-onSurface));
11795
+ --rb-surface-text-color: rgb(var(--tb-onSurface));
11796
+ --rb-surface-heading-color: rgb(var(--tb-onSurface));
11797
+ --rb-surface-link-color: rgb(var(--tb-onSurface));
11798
+ --rb-surface-supporting-color: rgb(var(--tb-onSurface));
11799
+ }
11800
+
11801
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 2) > .rb-bg-surface {
11802
+ background: rgb(var(--tb-secondary));
11803
+ }
11804
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 2) {
11805
+ background: rgb(var(--tb-secondary));
11806
+ color: rgb(var(--tb-onSecondary));
11807
+ --rb-surface-text-color: rgb(var(--tb-onSecondary));
11808
+ --rb-surface-heading-color: rgb(var(--tb-onSecondary));
11809
+ --rb-surface-link-color: rgb(var(--tb-onSecondary));
11810
+ --rb-surface-supporting-color: rgb(var(--tb-onSecondary));
11811
+ }
11812
+
11813
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 3) > .rb-bg-surface {
11814
+ background: rgb(var(--tb-primary));
11815
+ }
11816
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 3) {
11817
+ background: rgb(var(--tb-primary));
11818
+ color: rgb(var(--tb-onPrimary));
11819
+ --rb-surface-text-color: rgb(var(--tb-onPrimary));
11820
+ --rb-surface-heading-color: rgb(var(--tb-onPrimary));
11821
+ --rb-surface-link-color: rgb(var(--tb-onPrimary));
11822
+ --rb-surface-supporting-color: rgb(var(--tb-onPrimary));
11823
+ }
11824
+
11825
+ /* Keep the intended visual hierarchy; the body color itself now resolves via
11826
+ * the nearest surface provider instead of requiring an inline override. */
11827
+ :where(.theme-scope) .rb-card-treatment-color-blocked .rb-feature-card-body {
11828
+ opacity: 0.9;
11829
+ }
11830
+
11831
+ /* The number marker defaults to the brand accent, which collides with the
11832
+ * primary-coloured card in the cycle. On colour-blocked cards use the card's
10959
11833
  * own on-colour (the palette guarantees it's legible on that background) and a
10960
11834
  * faint tint of it for the badge, so the number always contrasts. */
10961
11835
  :where(.theme-scope) .rb-card-treatment-color-blocked .rb-feature-card-number-zone {
@@ -10977,12 +11851,12 @@
10977
11851
  }
10978
11852
 
10979
11853
 
10980
- :where(.theme-scope) [data-block="intro"][data-block-look="intro-portrait-bio"][data-block-variant="media-copy"] .rb-intro-media-wrap {
11854
+ :where(.theme-scope) [data-block="intro"][data-block-composition="portrait-bio"][data-block-variant="media-copy"] .rb-intro-media-wrap {
10981
11855
  max-width: min(100%, 24rem);
10982
11856
  margin-inline: auto;
10983
11857
  }
10984
11858
 
10985
- :where(.theme-scope) [data-block="intro"][data-block-look="intro-portrait-bio"][data-block-variant="media-copy"] .rb-intro-media {
11859
+ :where(.theme-scope) [data-block="intro"][data-block-composition="portrait-bio"][data-block-variant="media-copy"] .rb-intro-media {
10986
11860
  aspect-ratio: 1 / 1 !important;
10987
11861
  border-radius: 9999px;
10988
11862
  }
@@ -10999,18 +11873,913 @@
10999
11873
  }
11000
11874
  }
11001
11875
 
11002
- :where(.theme-scope) [data-block="intro"][data-block-look="intro-editorial-statement"] .rb-intro-title {
11876
+ :where(.theme-scope) [data-block="intro"][data-block-composition="editorial-statement"] .rb-intro-title {
11003
11877
  font-size: clamp(2rem, 1.56rem + 1.4vw, 3rem);
11004
11878
  line-height: 1.14;
11005
11879
  }
11006
11880
 
11007
- :where(.theme-scope) [data-block="intro"][data-block-look="intro-editorial-statement"] .rb-intro-copy {
11881
+ :where(.theme-scope) [data-block="intro"][data-block-composition="editorial-statement"] .rb-intro-copy {
11008
11882
  gap: var(--rb-space-5, 1.25rem);
11009
11883
  }
11010
11884
 
11011
- :where(.theme-scope) [data-block="intro"][data-block-look="intro-editorial-statement"] .rb-intro-copy .rb-prose {
11885
+ :where(.theme-scope) [data-block="intro"][data-block-composition="editorial-statement"] .rb-intro-copy .rb-prose {
11012
11886
  font-size: clamp(1.125rem, 1.02rem + 0.35vw, 1.375rem);
11013
11887
  line-height: 1.65;
11014
11888
  }
11015
11889
 
11016
11890
 
11891
+ :where(.theme-scope) :where([data-block="recurring-schedule"]) .recurring-schedule-section {
11892
+ width: min(100%, 66rem);
11893
+ margin-inline: auto;
11894
+ }
11895
+
11896
+ :where(.theme-scope) :where([data-block="recurring-schedule"]) .recurring-schedule-heading {
11897
+ max-width: 44rem;
11898
+ }
11899
+
11900
+ :where(.theme-scope) :where([data-block="recurring-schedule"]) .recurring-schedule-header {
11901
+ display: flex;
11902
+ gap: 2rem;
11903
+ align-items: end;
11904
+ justify-content: space-between;
11905
+ }
11906
+
11907
+ :where(.theme-scope) :where([data-block="recurring-schedule"]) .recurring-schedule-eyebrow {
11908
+ margin: 0;
11909
+ color: rgb(var(--tb-accent));
11910
+ font-size: 0.72rem;
11911
+ font-weight: 600;
11912
+ letter-spacing: 0.14em;
11913
+ text-transform: uppercase;
11914
+ }
11915
+
11916
+ :where(.theme-scope) :where([data-block="recurring-schedule"]) .recurring-schedule-heading-title {
11917
+ margin: 0;
11918
+ font-size: clamp(2rem, 4.6vw, 3.3rem);
11919
+ line-height: 1.08;
11920
+ }
11921
+
11922
+ :where(.theme-scope) .recurring-schedule {
11923
+ border-top: 1px solid color-mix(in oklab, currentColor, transparent 78%);
11924
+ }
11925
+
11926
+ :where(.theme-scope) .recurring-schedule-row {
11927
+ display: grid;
11928
+ grid-template-columns: minmax(9rem, 0.82fr) minmax(16rem, 1.5fr) auto;
11929
+ grid-template-rows: auto auto;
11930
+ column-gap: clamp(1.5rem, 4vw, 2.75rem);
11931
+ row-gap: 0.15rem;
11932
+ align-items: center;
11933
+ padding: 1.4rem 0.75rem;
11934
+ border-bottom: 1px solid color-mix(in oklab, currentColor, transparent 78%);
11935
+ color: inherit;
11936
+ }
11937
+
11938
+ :where(.theme-scope) .recurring-schedule-day,
11939
+ :where(.theme-scope) .recurring-schedule-time,
11940
+ :where(.theme-scope) .recurring-schedule-title,
11941
+ :where(.theme-scope) .recurring-schedule-venue {
11942
+ margin: 0;
11943
+ }
11944
+
11945
+ :where(.theme-scope) .recurring-schedule-day {
11946
+ grid-column: 1;
11947
+ grid-row: 1;
11948
+ font-family: var(--font-heading);
11949
+ font-size: clamp(1.25rem, 2vw, 1.5rem);
11950
+ line-height: 1;
11951
+ }
11952
+
11953
+ :where(.theme-scope) .recurring-schedule-time {
11954
+ grid-column: 1;
11955
+ grid-row: 2;
11956
+ display: flex;
11957
+ gap: 0.35rem;
11958
+ color: var(--rb-surface-supporting-color, rgb(var(--tb-mutedText)));
11959
+ font-size: 0.86rem;
11960
+ font-variant-numeric: tabular-nums;
11961
+ }
11962
+
11963
+ :where(.theme-scope) .recurring-schedule-details {
11964
+ grid-column: 2;
11965
+ grid-row: 1 / span 2;
11966
+ align-self: center;
11967
+ }
11968
+
11969
+ :where(.theme-scope) .recurring-schedule-title {
11970
+ font-size: 1.06rem;
11971
+ font-weight: 500;
11972
+ }
11973
+
11974
+ :where(.theme-scope) .recurring-schedule-venue {
11975
+ margin-top: 0.2rem;
11976
+ color: var(--rb-surface-supporting-color, rgb(var(--tb-mutedText)));
11977
+ font-size: 0.92rem;
11978
+ }
11979
+
11980
+ :where(.theme-scope) .recurring-schedule-action {
11981
+ grid-column: 3;
11982
+ grid-row: 1 / span 2;
11983
+ min-width: 4.5rem;
11984
+ text-align: right;
11985
+ }
11986
+
11987
+ :where(.theme-scope) .recurring-schedule-see-all {
11988
+ width: fit-content;
11989
+ color: inherit;
11990
+ text-underline-offset: 0.3em;
11991
+ }
11992
+
11993
+ :where(.theme-scope) .recurring-schedule-empty {
11994
+ margin: 0;
11995
+ color: var(--rb-surface-supporting-color, rgb(var(--tb-mutedText)));
11996
+ }
11997
+
11998
+ @media (max-width: 767px) {
11999
+ :where(.theme-scope) :where([data-block="recurring-schedule"]) .recurring-schedule-header {
12000
+ align-items: start;
12001
+ flex-direction: column;
12002
+ gap: 1rem;
12003
+ }
12004
+
12005
+ :where(.theme-scope) .recurring-schedule-row {
12006
+ grid-template-columns: 1fr auto;
12007
+ grid-template-rows: auto auto auto;
12008
+ gap: 0.5rem 1rem;
12009
+ align-items: start;
12010
+ }
12011
+
12012
+ :where(.theme-scope) .recurring-schedule-day {
12013
+ grid-column: 1;
12014
+ }
12015
+
12016
+ :where(.theme-scope) .recurring-schedule-time {
12017
+ grid-column: 1;
12018
+ }
12019
+
12020
+ :where(.theme-scope) .recurring-schedule-details {
12021
+ grid-column: 1 / -1;
12022
+ grid-row: 3;
12023
+ margin-top: 0.35rem;
12024
+ }
12025
+
12026
+ :where(.theme-scope) .recurring-schedule-action {
12027
+ grid-column: 2;
12028
+ grid-row: 1 / span 2;
12029
+ }
12030
+ }
12031
+
12032
+
12033
+ /* =============================================================================
12034
+ * Event list treatments: registers and dense indexes
12035
+ *
12036
+ * These treatments retain the event list's content and structural layout.
12037
+ * Their contrast relationships come exclusively from the active semantic
12038
+ * section surface and named palette tokens.
12039
+ * ============================================================================= */
12040
+
12041
+ :where(.theme-scope)
12042
+ :where(
12043
+ .rb-event-list-treatment-ruled-register,
12044
+ .rb-event-list-treatment-editorial-register,
12045
+ .rb-event-list-treatment-dense-index
12046
+ )
12047
+ .event-card.event-card {
12048
+ position: relative;
12049
+ overflow: visible;
12050
+ border: 0;
12051
+ border-radius: 0;
12052
+ background: transparent;
12053
+ box-shadow: none;
12054
+ color: inherit;
12055
+ }
12056
+
12057
+ /* Register treatments intentionally prioritise schedule data over imagery. */
12058
+ :where(.theme-scope)
12059
+ :where(
12060
+ .rb-event-list-treatment-ruled-register,
12061
+ .rb-event-list-treatment-editorial-register,
12062
+ .rb-event-list-treatment-dense-index
12063
+ )
12064
+ .event-card.event-card
12065
+ .event-card-media {
12066
+ display: none;
12067
+ }
12068
+
12069
+ :where(.theme-scope)
12070
+ :where(
12071
+ .rb-event-list-treatment-ruled-register,
12072
+ .rb-event-list-treatment-editorial-register,
12073
+ .rb-event-list-treatment-dense-index
12074
+ )
12075
+ .event-card.event-card
12076
+ .card-content {
12077
+ min-width: 0;
12078
+ padding: 1.5rem 0.625rem;
12079
+ }
12080
+
12081
+ :where(.theme-scope)
12082
+ :where(
12083
+ .rb-event-list-treatment-ruled-register,
12084
+ .rb-event-list-treatment-editorial-register,
12085
+ .rb-event-list-treatment-dense-index
12086
+ )
12087
+ .event-card.event-card
12088
+ .card-title {
12089
+ min-width: 0;
12090
+ margin-bottom: 0.25rem;
12091
+ }
12092
+
12093
+ :where(.theme-scope)
12094
+ :where(
12095
+ .rb-event-list-treatment-ruled-register,
12096
+ .rb-event-list-treatment-editorial-register,
12097
+ .rb-event-list-treatment-dense-index
12098
+ )
12099
+ .event-card.event-card
12100
+ .event-card-footer {
12101
+ min-width: 8rem;
12102
+ padding-top: 0;
12103
+ }
12104
+
12105
+ :where(.theme-scope)
12106
+ :where(
12107
+ .rb-event-list-treatment-ruled-register,
12108
+ .rb-event-list-treatment-editorial-register,
12109
+ .rb-event-list-treatment-dense-index
12110
+ )
12111
+ .event-card.event-card
12112
+ .event-card-cta {
12113
+ width: 100%;
12114
+ }
12115
+
12116
+ /* Ruled register: open rows with quiet rules on the current section surface. */
12117
+ :where(.theme-scope)
12118
+ .rb-event-list-treatment-ruled-register
12119
+ .event-card.event-card {
12120
+ border-top: 1px solid color-mix(in oklab, currentColor, transparent 78%);
12121
+ }
12122
+
12123
+ :where(.theme-scope)
12124
+ .rb-event-list-treatment-ruled-register
12125
+ .event-card.event-card:last-child {
12126
+ border-bottom: 1px solid color-mix(in oklab, currentColor, transparent 78%);
12127
+ }
12128
+
12129
+ /* Editorial register: generous rows, an accent marker and display-led titles. */
12130
+ :where(.theme-scope)
12131
+ .rb-event-list-treatment-editorial-register
12132
+ .event-card.event-card {
12133
+ border-top: 1px solid color-mix(in oklab, rgb(var(--tb-border)), transparent 20%);
12134
+ }
12135
+
12136
+ :where(.theme-scope)
12137
+ .rb-event-list-treatment-editorial-register
12138
+ .event-card.event-card:last-child {
12139
+ border-bottom: 1px solid color-mix(in oklab, rgb(var(--tb-border)), transparent 20%);
12140
+ }
12141
+
12142
+ :where(.theme-scope)
12143
+ .rb-event-list-treatment-editorial-register
12144
+ .event-card.event-card::before {
12145
+ content: "";
12146
+ position: absolute;
12147
+ inset-block: 1.75rem;
12148
+ inset-inline-start: 0;
12149
+ width: 0.25rem;
12150
+ border-radius: var(--rb-block-radius, 0.75rem);
12151
+ background: rgb(var(--tb-accent));
12152
+ }
12153
+
12154
+ :where(.theme-scope)
12155
+ .rb-event-list-treatment-editorial-register
12156
+ .event-card.event-card
12157
+ .card-content {
12158
+ padding-block: 1.875rem;
12159
+ padding-inline-start: clamp(1.25rem, 2.5vw, 2rem);
12160
+ }
12161
+
12162
+ :where(.theme-scope)
12163
+ .rb-event-list-treatment-editorial-register
12164
+ .event-card.event-card
12165
+ .card-title {
12166
+ font-family: var(--font-heading, var(--font-body, inherit));
12167
+ font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem);
12168
+ font-weight: 500;
12169
+ line-height: 1.15;
12170
+ }
12171
+
12172
+ /* Dense index: stronger outside rule and reduced row rhythm, without opting
12173
+ * the block into its structurally different compact-list facet. */
12174
+ :where(.theme-scope)
12175
+ .rb-event-list-treatment-dense-index
12176
+ .event-card.event-card {
12177
+ border-bottom: 1px solid color-mix(in oklab, currentColor, transparent 62%);
12178
+ }
12179
+
12180
+ :where(.theme-scope)
12181
+ .rb-event-list-treatment-dense-index
12182
+ .event-card.event-card:first-child {
12183
+ border-top: 2px solid currentColor;
12184
+ }
12185
+
12186
+ :where(.theme-scope)
12187
+ .rb-event-list-treatment-dense-index
12188
+ .event-card.event-card
12189
+ .card-content {
12190
+ padding-block: 1.125rem;
12191
+ }
12192
+
12193
+ :where(.theme-scope)
12194
+ .rb-event-list-treatment-dense-index
12195
+ .event-card.event-card
12196
+ .card-title {
12197
+ font-size: 1rem;
12198
+ line-height: 1.35;
12199
+ }
12200
+
12201
+ @media (min-width: 768px) {
12202
+ :where(.theme-scope)
12203
+ :where(
12204
+ .rb-event-list-treatment-ruled-register,
12205
+ .rb-event-list-treatment-editorial-register,
12206
+ .rb-event-list-treatment-dense-index
12207
+ )
12208
+ .event-card.event-card.event-card--horizontal {
12209
+ display: block;
12210
+ }
12211
+
12212
+ :where(.theme-scope)
12213
+ :where(
12214
+ .rb-event-list-treatment-ruled-register,
12215
+ .rb-event-list-treatment-editorial-register,
12216
+ .rb-event-list-treatment-dense-index
12217
+ )
12218
+ .event-card.event-card.event-card--horizontal
12219
+ .card-content {
12220
+ display: grid;
12221
+ grid-template-columns: minmax(8.5rem, 0.7fr) minmax(15rem, 1.55fr) auto;
12222
+ grid-template-rows: auto auto auto;
12223
+ align-items: center;
12224
+ column-gap: clamp(1.25rem, 3vw, 2.625rem);
12225
+ }
12226
+
12227
+ :where(.theme-scope)
12228
+ :where(
12229
+ .rb-event-list-treatment-ruled-register,
12230
+ .rb-event-list-treatment-editorial-register,
12231
+ .rb-event-list-treatment-dense-index
12232
+ )
12233
+ .event-card.event-card.event-card--horizontal
12234
+ .card-title {
12235
+ grid-column: 2;
12236
+ }
12237
+
12238
+ :where(.theme-scope)
12239
+ :where(
12240
+ .rb-event-list-treatment-ruled-register,
12241
+ .rb-event-list-treatment-editorial-register,
12242
+ .rb-event-list-treatment-dense-index
12243
+ )
12244
+ .event-card.event-card.event-card--horizontal
12245
+ .card-content > div.rb-caption {
12246
+ grid-column: 1;
12247
+ grid-row: 1 / span 6;
12248
+ margin-bottom: 0;
12249
+ }
12250
+
12251
+ :where(.theme-scope)
12252
+ :where(
12253
+ .rb-event-list-treatment-ruled-register,
12254
+ .rb-event-list-treatment-editorial-register,
12255
+ .rb-event-list-treatment-dense-index
12256
+ )
12257
+ .event-card.event-card.event-card--horizontal
12258
+ .card-content > div.rb-mb-3 {
12259
+ grid-column: 2;
12260
+ margin-bottom: 0;
12261
+ }
12262
+
12263
+ :where(.theme-scope)
12264
+ :where(
12265
+ .rb-event-list-treatment-ruled-register,
12266
+ .rb-event-list-treatment-editorial-register,
12267
+ .rb-event-list-treatment-dense-index
12268
+ )
12269
+ .event-card.event-card.event-card--horizontal
12270
+ .card-content > .event-category-badge {
12271
+ grid-column: 2;
12272
+ }
12273
+
12274
+ :where(.theme-scope)
12275
+ :where(
12276
+ .rb-event-list-treatment-ruled-register,
12277
+ .rb-event-list-treatment-editorial-register,
12278
+ .rb-event-list-treatment-dense-index
12279
+ )
12280
+ .event-card.event-card.event-card--horizontal
12281
+ .card-content > .card-body,
12282
+ :where(.theme-scope)
12283
+ :where(
12284
+ .rb-event-list-treatment-ruled-register,
12285
+ .rb-event-list-treatment-editorial-register,
12286
+ .rb-event-list-treatment-dense-index
12287
+ )
12288
+ .event-card.event-card.event-card--horizontal
12289
+ .card-content > .status-muted:not(.event-card-capacity) {
12290
+ grid-column: 2;
12291
+ }
12292
+
12293
+ :where(.theme-scope)
12294
+ :where(
12295
+ .rb-event-list-treatment-ruled-register,
12296
+ .rb-event-list-treatment-editorial-register,
12297
+ .rb-event-list-treatment-dense-index
12298
+ )
12299
+ .event-card.event-card.event-card--horizontal
12300
+ .event-card-footer {
12301
+ grid-column: 3;
12302
+ grid-row: 1 / span 6;
12303
+ flex-direction: column;
12304
+ justify-content: center;
12305
+ align-items: stretch;
12306
+ }
12307
+ }
12308
+
12309
+
12310
+ /* =============================================================================
12311
+ * Feature-card composition Looks promoted from block-treatment studies.
12312
+ * Palette relationships use named semantic tokens; copy and media stay in the
12313
+ * existing feature-card content contract.
12314
+ * ============================================================================= */
12315
+
12316
+ /* Asymmetric emphasis: repeat a 5/7 pair rhythm and give each even card a
12317
+ * semantic secondary surface. This remains useful with more than two cards. */
12318
+ :where(.theme-scope)
12319
+ [data-block="feature-cards"][data-block-composition="asymmetric-emphasis"]
12320
+ .rb-feature-cards-grid {
12321
+ align-items: start;
12322
+ }
12323
+ :where(.theme-scope)
12324
+ [data-block="feature-cards"][data-block-composition="asymmetric-emphasis"]
12325
+ .rb-feature-card {
12326
+ height: auto;
12327
+ overflow: hidden;
12328
+ border: 0;
12329
+ border-radius: 0;
12330
+ background: transparent;
12331
+ }
12332
+
12333
+ :where(.theme-scope)
12334
+ [data-block="feature-cards"][data-block-composition="asymmetric-emphasis"]
12335
+ .rb-feature-card > .rb-feature-card-content {
12336
+ padding-inline: 0;
12337
+ }
12338
+
12339
+ :where(.theme-scope)
12340
+ [data-block="feature-cards"][data-block-composition="asymmetric-emphasis"]
12341
+ .rb-feature-card:nth-child(even) {
12342
+ padding: clamp(1.125rem, 2.5vw, 1.875rem);
12343
+ border-radius: calc(var(--rb-block-radius, 0.75rem) * 1.5);
12344
+ background: rgb(var(--tb-secondary));
12345
+ color: rgb(var(--tb-onSecondary));
12346
+ --rb-surface-text-color: rgb(var(--tb-onSecondary));
12347
+ --rb-surface-heading-color: rgb(var(--tb-onSecondary));
12348
+ --rb-surface-link-color: rgb(var(--tb-onSecondary));
12349
+ --rb-surface-supporting-color: rgb(var(--tb-onSecondary));
12350
+ }
12351
+
12352
+ :where(.theme-scope)
12353
+ [data-block="feature-cards"][data-block-composition="asymmetric-emphasis"]
12354
+ .rb-feature-card:nth-child(even) > .rb-feature-card-media {
12355
+ border-radius: var(--rb-block-radius, 0.75rem);
12356
+ }
12357
+
12358
+ /* Framed programme: a close-set family of inset cards on a semantic depth
12359
+ * section. The itemSurface recipe supplies each complete surface provider. */
12360
+ :where(.theme-scope)
12361
+ [data-block="feature-cards"][data-block-composition="framed-programme"]
12362
+ .rb-feature-cards-grid {
12363
+ gap: clamp(1rem, 2vw, 1.5rem);
12364
+ }
12365
+
12366
+ :where(.theme-scope)
12367
+ [data-block="feature-cards"][data-block-composition="framed-programme"]
12368
+ .rb-feature-card > .rb-feature-card-media {
12369
+ width: 100%;
12370
+ max-width: 100%;
12371
+ margin: 0;
12372
+ border-radius: var(--rb-block-radius, 0.75rem);
12373
+ }
12374
+
12375
+ :where(.theme-scope)
12376
+ [data-block="feature-cards"][data-block-composition="framed-programme"]
12377
+ .rb-feature-card > .rb-feature-card-content {
12378
+ padding-inline: 0;
12379
+ padding-bottom: 0;
12380
+ }
12381
+
12382
+ @media (min-width: 768px) {
12383
+ :where(.theme-scope)
12384
+ [data-block="feature-cards"][data-block-composition="asymmetric-emphasis"]
12385
+ .rb-feature-cards-grid.rb-grid-cols-2 {
12386
+ grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
12387
+ }
12388
+ }
12389
+
12390
+
12391
+ /* =============================================================================
12392
+ * Offerings Preview composition Looks promoted from the Fran André treatment
12393
+ * study. The outer section surface remains independently configurable. These
12394
+ * rules use expanded semantic palette tokens only.
12395
+ * ============================================================================= */
12396
+
12397
+ :where(.theme-scope)
12398
+ [data-block="offerings-preview"]
12399
+ [data-offering-presentation="featured-summary"]
12400
+ .offerings-preview-card-header {
12401
+ text-align: left;
12402
+ }
12403
+
12404
+ :where(.theme-scope)
12405
+ [data-block="offerings-preview"]
12406
+ .offerings-preview-summary-date {
12407
+ margin: 0;
12408
+ font-family: var(--font-heading, inherit);
12409
+ font-size: clamp(1.125rem, 2.2vw, 1.5rem);
12410
+ font-weight: 650;
12411
+ line-height: 1.22;
12412
+ }
12413
+
12414
+ :where(.theme-scope)
12415
+ [data-block="offerings-preview"]
12416
+ .offerings-preview-summary-date time {
12417
+ display: inline-block;
12418
+ }
12419
+
12420
+ :where(.theme-scope)
12421
+ [data-block="offerings-preview"]
12422
+ .offerings-preview-summary-facts {
12423
+ display: grid;
12424
+ gap: 0;
12425
+ margin: clamp(1.25rem, 3vw, 2rem) 0 0;
12426
+ }
12427
+
12428
+ :where(.theme-scope)
12429
+ [data-block="offerings-preview"]
12430
+ .offerings-preview-summary-facts > div {
12431
+ display: grid;
12432
+ grid-template-columns: minmax(5.5rem, 0.65fr) minmax(0, 1.35fr);
12433
+ gap: 1rem;
12434
+ padding-block: 0.6rem;
12435
+ border-top: 1px solid rgba(var(--tb-border), 0.72);
12436
+ }
12437
+
12438
+ :where(.theme-scope)
12439
+ [data-block="offerings-preview"]
12440
+ .offerings-preview-summary-facts dt {
12441
+ font-size: 0.72rem;
12442
+ font-weight: 750;
12443
+ letter-spacing: 0.1em;
12444
+ text-transform: uppercase;
12445
+ }
12446
+
12447
+ :where(.theme-scope)
12448
+ [data-block="offerings-preview"]
12449
+ .offerings-preview-summary-facts dd {
12450
+ min-width: 0;
12451
+ margin: 0;
12452
+ font-weight: 600;
12453
+ }
12454
+
12455
+ :where(.theme-scope)
12456
+ [data-block="offerings-preview"]:is(
12457
+ [data-block-look="offerings-preview-paired-feature-cards"],
12458
+ [data-block-look="offerings-preview-open-editorial-columns"],
12459
+ [data-block-look="offerings-preview-joined-programme-panel"]
12460
+ )
12461
+ .offerings-preview {
12462
+ container: rb-offerings-preview / inline-size;
12463
+ }
12464
+
12465
+ :where(.theme-scope)
12466
+ [data-block="offerings-preview"]:is(
12467
+ [data-block-look="offerings-preview-paired-feature-cards"],
12468
+ [data-block-look="offerings-preview-open-editorial-columns"],
12469
+ [data-block-look="offerings-preview-joined-programme-panel"]
12470
+ )
12471
+ .offerings-preview-card {
12472
+ min-width: 0;
12473
+ }
12474
+
12475
+ :where(.theme-scope)
12476
+ [data-block="offerings-preview"]:is(
12477
+ [data-block-look="offerings-preview-paired-feature-cards"],
12478
+ [data-block-look="offerings-preview-open-editorial-columns"],
12479
+ [data-block-look="offerings-preview-joined-programme-panel"]
12480
+ )
12481
+ .offerings-preview-card-content {
12482
+ padding: clamp(1.4rem, 3.5vw, 2.75rem);
12483
+ }
12484
+
12485
+ :where(.theme-scope)
12486
+ [data-block="offerings-preview"]:is(
12487
+ [data-block-look="offerings-preview-paired-feature-cards"],
12488
+ [data-block-look="offerings-preview-open-editorial-columns"],
12489
+ [data-block-look="offerings-preview-joined-programme-panel"]
12490
+ )
12491
+ .offerings-preview-card-footer {
12492
+ margin-top: auto;
12493
+ padding-top: clamp(1.25rem, 3vw, 2rem);
12494
+ }
12495
+
12496
+ /* Paired feature cards: one editorial lead and one supporting route. With a
12497
+ * third group the grid returns to equal columns rather than implying a new
12498
+ * source hierarchy. */
12499
+ :where(.theme-scope)
12500
+ [data-block="offerings-preview"][data-block-look="offerings-preview-paired-feature-cards"]
12501
+ .offerings-preview-grid {
12502
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr)) !important;
12503
+ gap: clamp(1rem, 2.5vw, 1.5rem);
12504
+ }
12505
+
12506
+ :where(.theme-scope)
12507
+ [data-block="offerings-preview"][data-block-look="offerings-preview-paired-feature-cards"]
12508
+ .offerings-preview-card {
12509
+ overflow: hidden;
12510
+ border: 1px solid rgb(var(--tb-border));
12511
+ border-radius: calc(var(--rb-block-radius, 0.75rem) * 1.75);
12512
+ background: rgb(var(--tb-accent-200));
12513
+ color: rgb(var(--tb-onAccent200));
12514
+ --rb-surface-text-color: rgb(var(--tb-onAccent200));
12515
+ --rb-surface-heading-color: rgb(var(--tb-onAccent200));
12516
+ --rb-surface-link-color: rgb(var(--tb-onAccent200));
12517
+ --rb-surface-supporting-color: rgb(var(--tb-onAccent200));
12518
+ }
12519
+
12520
+ :where(.theme-scope)
12521
+ [data-block="offerings-preview"][data-block-look="offerings-preview-paired-feature-cards"]
12522
+ .offerings-preview-card:first-child {
12523
+ border-color: transparent;
12524
+ background: rgb(var(--tb-primary-950));
12525
+ color: rgb(var(--tb-onPrimary950));
12526
+ box-shadow: 0.55rem 0.55rem 0 rgb(var(--tb-secondary-100));
12527
+ --rb-surface-text-color: rgb(var(--tb-onPrimary950));
12528
+ --rb-surface-heading-color: rgb(var(--tb-onPrimary950));
12529
+ --rb-surface-link-color: rgb(var(--tb-onPrimary950));
12530
+ --rb-surface-supporting-color: rgb(var(--tb-onPrimary950));
12531
+ }
12532
+
12533
+ :where(.theme-scope)
12534
+ [data-block="offerings-preview"][data-block-look="offerings-preview-paired-feature-cards"]
12535
+ .offerings-preview-card:first-child
12536
+ .offerings-preview-card-title {
12537
+ color: rgb(var(--tb-primary-200));
12538
+ }
12539
+
12540
+ @container rb-offerings-preview (min-width: 52rem) {
12541
+ :where(.theme-scope)
12542
+ [data-block="offerings-preview"][data-block-look="offerings-preview-paired-feature-cards"]
12543
+ .offerings-preview-grid:has(> .offerings-preview-card:nth-child(2):last-child) {
12544
+ grid-template-columns: minmax(0, 1.22fr) minmax(18rem, 0.78fr) !important;
12545
+ }
12546
+ }
12547
+
12548
+ /* Open editorial columns: composition and hierarchy without an item fill. */
12549
+ :where(.theme-scope)
12550
+ [data-block="offerings-preview"][data-block-look="offerings-preview-open-editorial-columns"]
12551
+ .offerings-preview-grid {
12552
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 19rem), 1fr)) !important;
12553
+ gap: 0;
12554
+ border-block: 1px solid rgb(var(--tb-border));
12555
+ }
12556
+
12557
+ :where(.theme-scope)
12558
+ [data-block="offerings-preview"][data-block-look="offerings-preview-open-editorial-columns"]
12559
+ .offerings-preview-card {
12560
+ border: 0;
12561
+ border-radius: 0;
12562
+ background: transparent;
12563
+ color: var(--rb-surface-text-color, rgb(var(--tb-text)));
12564
+ }
12565
+
12566
+ :where(.theme-scope)
12567
+ [data-block="offerings-preview"][data-block-look="offerings-preview-open-editorial-columns"]
12568
+ .offerings-preview-card + .offerings-preview-card {
12569
+ border-top: 1px solid rgb(var(--tb-border));
12570
+ }
12571
+
12572
+ @container rb-offerings-preview (min-width: 46rem) {
12573
+ :where(.theme-scope)
12574
+ [data-block="offerings-preview"][data-block-look="offerings-preview-open-editorial-columns"]
12575
+ .offerings-preview-card + .offerings-preview-card {
12576
+ border-top: 0;
12577
+ border-left: 1px solid rgb(var(--tb-border));
12578
+ }
12579
+ }
12580
+
12581
+ /* Joined programme panel: every group remains independently editable but the
12582
+ * close-set bands read as one upcoming programme. */
12583
+ :where(.theme-scope)
12584
+ [data-block="offerings-preview"][data-block-look="offerings-preview-joined-programme-panel"]
12585
+ .offerings-preview {
12586
+ overflow: hidden;
12587
+ gap: 0;
12588
+ border: 1px solid rgb(var(--tb-border));
12589
+ border-radius: calc(var(--rb-block-radius, 0.75rem) * 1.75);
12590
+ background: rgb(var(--tb-surface));
12591
+ }
12592
+
12593
+ :where(.theme-scope)
12594
+ [data-block="offerings-preview"][data-block-look="offerings-preview-joined-programme-panel"]
12595
+ .offerings-preview-grid {
12596
+ grid-template-columns: minmax(0, 1fr) !important;
12597
+ gap: 0;
12598
+ }
12599
+
12600
+ :where(.theme-scope)
12601
+ [data-block="offerings-preview"][data-block-look="offerings-preview-joined-programme-panel"]
12602
+ .offerings-preview-card {
12603
+ border: 0;
12604
+ border-radius: 0;
12605
+ background: rgb(var(--tb-secondary-100));
12606
+ color: rgb(var(--tb-onSecondary100));
12607
+ --rb-surface-text-color: rgb(var(--tb-onSecondary100));
12608
+ --rb-surface-heading-color: rgb(var(--tb-onSecondary100));
12609
+ --rb-surface-link-color: rgb(var(--tb-onSecondary100));
12610
+ --rb-surface-supporting-color: rgb(var(--tb-onSecondary100));
12611
+ }
12612
+
12613
+ :where(.theme-scope)
12614
+ [data-block="offerings-preview"][data-block-look="offerings-preview-joined-programme-panel"]
12615
+ .offerings-preview-card:nth-child(2) {
12616
+ background: rgb(var(--tb-accent-200));
12617
+ color: rgb(var(--tb-onAccent200));
12618
+ --rb-surface-text-color: rgb(var(--tb-onAccent200));
12619
+ --rb-surface-heading-color: rgb(var(--tb-onAccent200));
12620
+ --rb-surface-link-color: rgb(var(--tb-onAccent200));
12621
+ --rb-surface-supporting-color: rgb(var(--tb-onAccent200));
12622
+ }
12623
+
12624
+ :where(.theme-scope)
12625
+ [data-block="offerings-preview"][data-block-look="offerings-preview-joined-programme-panel"]
12626
+ .offerings-preview-card:nth-child(3) {
12627
+ background: rgb(var(--tb-primary-100));
12628
+ color: rgb(var(--tb-onPrimary100));
12629
+ --rb-surface-text-color: rgb(var(--tb-onPrimary100));
12630
+ --rb-surface-heading-color: rgb(var(--tb-onPrimary100));
12631
+ --rb-surface-link-color: rgb(var(--tb-onPrimary100));
12632
+ --rb-surface-supporting-color: rgb(var(--tb-onPrimary100));
12633
+ }
12634
+
12635
+ :where(.theme-scope)
12636
+ [data-block="offerings-preview"][data-block-look="offerings-preview-joined-programme-panel"]
12637
+ .offerings-preview-card + .offerings-preview-card {
12638
+ border-top: 1px solid rgb(var(--tb-border));
12639
+ }
12640
+
12641
+ @container rb-offerings-preview (min-width: 58rem) {
12642
+ :where(.theme-scope)
12643
+ [data-block="offerings-preview"][data-block-look="offerings-preview-joined-programme-panel"]
12644
+ .offerings-preview-card-content {
12645
+ display: grid;
12646
+ grid-template-columns: minmax(15rem, 1.1fr) minmax(19rem, 1.4fr) minmax(10rem, auto);
12647
+ align-items: center;
12648
+ gap: clamp(1.5rem, 4vw, 4rem);
12649
+ }
12650
+
12651
+ :where(.theme-scope)
12652
+ [data-block="offerings-preview"][data-block-look="offerings-preview-joined-programme-panel"]
12653
+ .offerings-preview-card-footer {
12654
+ margin-top: 0;
12655
+ padding-top: 0;
12656
+ justify-content: flex-end;
12657
+ }
12658
+ }
12659
+
12660
+
12661
+ /* =============================================================================
12662
+ * Featured-editorial testimonial Looks promoted from the Fran André treatment
12663
+ * study. These rules do not set the outer section background.
12664
+ * ============================================================================= */
12665
+
12666
+ :where(.theme-scope)
12667
+ [data-block="testimonials"]:is(
12668
+ [data-block-look="testimonials-evergreen-lead"],
12669
+ [data-block-look="testimonials-room-and-response"],
12670
+ [data-block-look="testimonials-open-floor"]
12671
+ )
12672
+ .rb-testimonials-fe-card--feature {
12673
+ background: rgb(var(--tb-secondary-900));
12674
+ color: rgb(var(--tb-onSecondary900));
12675
+ --rb-surface-text-color: rgb(var(--tb-onSecondary900));
12676
+ --rb-surface-heading-color: rgb(var(--tb-onSecondary900));
12677
+ --rb-surface-link-color: rgb(var(--tb-onSecondary900));
12678
+ --rb-surface-supporting-color: rgb(var(--tb-onSecondary900));
12679
+ }
12680
+
12681
+ :where(.theme-scope)
12682
+ [data-block="testimonials"]:is(
12683
+ [data-block-look="testimonials-evergreen-lead"],
12684
+ [data-block-look="testimonials-room-and-response"],
12685
+ [data-block-look="testimonials-open-floor"]
12686
+ )
12687
+ .rb-testimonials-fe-card--feature
12688
+ .rb-testimonials-fe-qmark {
12689
+ color: rgb(var(--tb-primary-200));
12690
+ }
12691
+
12692
+ :where(.theme-scope)
12693
+ [data-block="testimonials"]:is(
12694
+ [data-block-look="testimonials-evergreen-lead"],
12695
+ [data-block-look="testimonials-room-and-response"],
12696
+ [data-block-look="testimonials-open-floor"]
12697
+ )
12698
+ .rb-testimonials-fe-card--feature
12699
+ :is(.rb-testimonials-fe-quote p, .rb-testimonials-fe-name, .rb-testimonials-fe-context) {
12700
+ color: rgb(var(--tb-onSecondary900));
12701
+ }
12702
+
12703
+ /* Evergreen lead: the feature remains dominant while the supporting column
12704
+ * opens into two equal compact voices at wider widths. */
12705
+ @container rb-testimonials-fe (min-width: 1024px) {
12706
+ :where(.theme-scope)
12707
+ [data-block="testimonials"][data-block-look="testimonials-evergreen-lead"]
12708
+ .rb-testimonials-fe-grid {
12709
+ grid-template-columns: minmax(0, 1.15fr) minmax(0, 1.55fr);
12710
+ }
12711
+
12712
+ :where(.theme-scope)
12713
+ [data-block="testimonials"][data-block-look="testimonials-evergreen-lead"]
12714
+ .rb-testimonials-fe-col {
12715
+ grid-template-columns: repeat(2, minmax(0, 1fr));
12716
+ }
12717
+ }
12718
+
12719
+ /* Room and response: a tall lead voice with one soft brand response and one
12720
+ * neutral response in the existing stacked support column. */
12721
+ :where(.theme-scope)
12722
+ [data-block="testimonials"][data-block-look="testimonials-room-and-response"]
12723
+ .rb-testimonials-fe-card--feature {
12724
+ min-height: 27rem;
12725
+ }
12726
+
12727
+ :where(.theme-scope)
12728
+ [data-block="testimonials"][data-block-look="testimonials-room-and-response"]
12729
+ .rb-testimonials-fe-col
12730
+ .rb-testimonials-fe-card:first-child {
12731
+ border-color: transparent;
12732
+ background: rgb(var(--tb-primary-100));
12733
+ color: rgb(var(--tb-onPrimary100));
12734
+ --rb-surface-text-color: rgb(var(--tb-onPrimary100));
12735
+ --rb-surface-heading-color: rgb(var(--tb-onPrimary100));
12736
+ --rb-surface-link-color: rgb(var(--tb-onPrimary100));
12737
+ --rb-surface-supporting-color: rgb(var(--tb-onPrimary100));
12738
+ }
12739
+
12740
+ :where(.theme-scope)
12741
+ [data-block="testimonials"][data-block-look="testimonials-room-and-response"]
12742
+ .rb-testimonials-fe-col
12743
+ .rb-testimonials-fe-card:first-child
12744
+ :is(.rb-testimonials-fe-quote p, .rb-testimonials-fe-name, .rb-testimonials-fe-context) {
12745
+ color: rgb(var(--tb-onPrimary100));
12746
+ }
12747
+
12748
+ /* Open floor: the section head becomes an editorial rail while proof occupies
12749
+ * a feature-over-supporting field. */
12750
+ @container rb-testimonials-fe (min-width: 1024px) {
12751
+ :where(.theme-scope)
12752
+ [data-block="testimonials"][data-block-look="testimonials-open-floor"]
12753
+ .rb-testimonials-fe {
12754
+ display: grid;
12755
+ grid-template-columns: minmax(15rem, 0.72fr) minmax(0, 1.6fr);
12756
+ align-items: start;
12757
+ gap: clamp(2rem, 5vw, 5rem);
12758
+ }
12759
+
12760
+ :where(.theme-scope)
12761
+ [data-block="testimonials"][data-block-look="testimonials-open-floor"]
12762
+ .rb-testimonials-fe-head {
12763
+ display: block;
12764
+ }
12765
+
12766
+ :where(.theme-scope)
12767
+ [data-block="testimonials"][data-block-look="testimonials-open-floor"]
12768
+ .rb-testimonials-fe-leadin {
12769
+ margin-top: 1.5rem;
12770
+ }
12771
+
12772
+ :where(.theme-scope)
12773
+ [data-block="testimonials"][data-block-look="testimonials-open-floor"]
12774
+ .rb-testimonials-fe-grid {
12775
+ grid-template-columns: minmax(0, 1fr);
12776
+ }
12777
+
12778
+ :where(.theme-scope)
12779
+ [data-block="testimonials"][data-block-look="testimonials-open-floor"]
12780
+ .rb-testimonials-fe-col {
12781
+ grid-template-columns: repeat(2, minmax(0, 1fr));
12782
+ }
12783
+ }
12784
+
12785
+