@riverbankcms/sdk 0.79.0 → 0.81.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 (327) hide show
  1. package/dist/PreviewEditorSidebar-RDCMEXIJ.mjs +3163 -0
  2. package/dist/{PreviewEditorUI-27KJVEET.mjs → PreviewEditorUI-NYGQ6K7B.mjs} +194 -30
  3. package/dist/SdkPreviewModeRuntime-AKCSCZEC.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +20 -0
  5. package/dist/_dts/api/src/contentRuntime.d.ts +12 -0
  6. package/dist/_dts/api/src/contentTypes.d.ts +6 -0
  7. package/dist/_dts/api/src/endpoints.d.ts +24 -0
  8. package/dist/_dts/api/src/index.d.ts +3 -3
  9. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +53 -0
  10. package/dist/_dts/api/src/siteInfrastructure.d.ts +124 -0
  11. package/dist/_dts/api/src/siteOnboarding.d.ts +13 -0
  12. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +10 -1
  13. package/dist/_dts/block-form/src/backend/store-backend.d.ts +3 -1
  14. package/dist/_dts/block-form/src/backend/types.d.ts +3 -3
  15. package/dist/_dts/block-form/src/client/index.d.ts +2 -0
  16. package/dist/_dts/block-form/src/index.d.ts +2 -0
  17. package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +2 -1
  18. package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -0
  19. package/dist/_dts/blocks/src/client/header.d.ts +1 -1
  20. package/dist/_dts/blocks/src/client.d.ts +12 -12
  21. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +20 -28
  22. package/dist/_dts/blocks/src/index.d.ts +7 -5
  23. package/dist/_dts/blocks/src/primitives/content/components/Text.d.ts +1 -1
  24. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +1 -0
  25. package/dist/_dts/blocks/src/server.d.ts +1 -1
  26. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +3 -2
  27. package/dist/_dts/blocks/src/system/blocks/events/event-listing.d.ts +2 -2
  28. package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -1
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +135 -0
  30. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +9 -1
  31. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +2 -0
  32. package/dist/_dts/blocks/src/system/blocks/form.d.ts +20 -1
  33. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +2 -0
  34. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +19 -0
  35. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +134 -0
  36. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  37. package/dist/_dts/blocks/src/system/componentFactory.d.ts +1 -0
  38. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  39. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  40. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +34 -15
  41. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -0
  42. package/dist/_dts/blocks/src/system/data/linkedContentEntries.d.ts +64 -0
  43. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  44. package/dist/_dts/blocks/src/system/designCapabilities.d.ts +2 -2
  45. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +10 -3
  46. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +5 -0
  47. package/dist/_dts/blocks/src/system/media/slotContracts.d.ts +2 -0
  48. package/dist/_dts/blocks/src/system/node/fragments/headingDecoration.d.ts +1 -4
  49. package/dist/_dts/blocks/src/system/node/types.d.ts +8 -1
  50. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +2 -2
  51. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  52. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +51 -57
  53. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -27
  54. package/dist/_dts/blocks/src/system/runtime/header/enhanceHeaderSection.d.ts +10 -2
  55. package/dist/_dts/blocks/src/system/runtime/headingDecoration.d.ts +21 -0
  56. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +45 -14
  57. package/dist/_dts/blocks/src/system/runtime/hooks/useEventFilters.d.ts +2 -9
  58. package/dist/_dts/blocks/src/system/runtime/hooks/useEventPagination.d.ts +1 -10
  59. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +1 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +21 -16
  61. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +3 -2
  62. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +21 -16
  63. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +22 -33
  64. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.server.d.ts +2 -2
  65. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventSpotlight.d.ts +2 -2
  66. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +2 -2
  67. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventDetailModal.d.ts +2 -2
  68. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModals.d.ts +2 -2
  69. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventPaginatedListView.client.d.ts +2 -3
  70. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +3 -3
  71. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listOptions.d.ts +50 -0
  72. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +2 -1
  73. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +2 -2
  74. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +29 -14
  75. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +21 -0
  76. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +7 -0
  77. package/dist/_dts/blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.d.ts +2 -0
  78. package/dist/_dts/blocks/src/system/transforms/registry/boxStyles.d.ts +7 -2
  79. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +9 -0
  80. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +14 -1
  81. package/dist/_dts/calendar/src/grid.d.ts +27 -0
  82. package/dist/_dts/calendar/src/index.d.ts +2 -2
  83. package/dist/_dts/content-editor/src/controller/useAutosaveTriggers.d.ts +3 -1
  84. package/dist/_dts/content-editor/src/editorTransactionState.d.ts +1 -0
  85. package/dist/_dts/content-editor/src/hooks/autosaveScopePlanning.d.ts +26 -0
  86. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +1 -0
  87. package/dist/_dts/content-editor/src/hooks/useLinkedEntryAutosave.d.ts +23 -0
  88. package/dist/_dts/content-editor/src/hooks/useReactiveToolbar.d.ts +1 -1
  89. package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +2 -2
  90. package/dist/_dts/content-editor/src/index.d.ts +3 -1
  91. package/dist/_dts/content-editor/src/lib/json.d.ts +2 -0
  92. package/dist/_dts/content-editor/src/linkedEntries/domain.d.ts +8 -0
  93. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +58 -0
  94. package/dist/_dts/content-editor/src/ui/editorTransactionState.d.ts +93 -0
  95. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +60 -3
  96. package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +2 -0
  97. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +1 -1
  98. package/dist/_dts/content-model/src/content-types/builtins.d.ts +43 -0
  99. package/dist/_dts/content-model/src/metadataConfig.d.ts +87 -47
  100. package/dist/_dts/core/src/branded.d.ts +5 -0
  101. package/dist/_dts/core/src/index.d.ts +1 -0
  102. package/dist/_dts/core/src/stable-json.d.ts +1 -0
  103. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +9 -3
  104. package/dist/_dts/editor/src/EditorProvider.d.ts +26 -0
  105. package/dist/_dts/editor/src/chrome/EditorChrome.d.ts +26 -0
  106. package/dist/_dts/editor/src/chrome/EditorStatusBar.d.ts +45 -0
  107. package/dist/_dts/editor/src/chrome/statusBarPresentation.d.ts +25 -0
  108. package/dist/_dts/editor/src/components/EditingToggle.d.ts +9 -0
  109. package/dist/_dts/editor/src/hooks/useEditableElement.d.ts +18 -0
  110. package/dist/_dts/editor/src/index.d.ts +29 -0
  111. package/dist/_dts/editor/src/inline/InlineTextEditor.d.ts +1 -0
  112. package/dist/_dts/editor/src/lib/utils.d.ts +1 -0
  113. package/dist/_dts/editor/src/primitives/EditorPrimitivesProvider.d.ts +20 -0
  114. package/dist/_dts/editor/src/primitives/InlineFieldContext.d.ts +11 -0
  115. package/dist/_dts/editor/src/primitives/SaveContext.d.ts +12 -0
  116. package/dist/_dts/editor/src/primitives/helpers.d.ts +1 -0
  117. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +26 -0
  118. package/dist/_dts/editor/src/primitives/rich-text/RichTextToolbar.d.ts +16 -0
  119. package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +23 -0
  120. package/dist/_dts/editor/src/primitives/rich-text/extensions/RichTextImage.d.ts +2 -0
  121. package/dist/_dts/editor/src/primitives/rich-text/extensions/RichTextLink.d.ts +1 -0
  122. package/dist/_dts/editor/src/primitives/rich-text/imageActions.d.ts +22 -0
  123. package/dist/_dts/editor/src/primitives/rich-text/sanitize.d.ts +23 -0
  124. package/dist/_dts/editor/src/primitives/rich-text/toolbar/BlockTypeDropdown.d.ts +6 -0
  125. package/dist/_dts/editor/src/primitives/rich-text/toolbar/LinkPopover.d.ts +10 -0
  126. package/dist/_dts/editor/src/primitives/rich-text/toolbar/ToolbarIconButton.d.ts +11 -0
  127. package/dist/_dts/editor/src/primitives/rich-text/toolbar/linkPopoverUtils.d.ts +58 -0
  128. package/dist/_dts/editor/src/primitives/rich-text/useRichTextEditor.d.ts +19 -0
  129. package/dist/_dts/editor/src/primitives/rich-text/utils.d.ts +20 -0
  130. package/dist/_dts/editor/src/utils/optimisticTokens.d.ts +27 -0
  131. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +2 -2
  132. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +5 -9
  133. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +2 -6
  134. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +6 -10
  135. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +2 -6
  136. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +6 -4
  137. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +4 -8
  138. package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +15 -0
  139. package/dist/_dts/editor-blocks/src/block-editor/blockHeaderActionPlan.d.ts +49 -0
  140. package/dist/_dts/editor-blocks/src/index.d.ts +2 -0
  141. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +1 -0
  142. package/dist/_dts/editor-blocks/src/widgets/rich-text/RichTextWidgetProvider.d.ts +1 -1
  143. package/dist/_dts/editor-blocks/src/widgets/rich-text/useImagePicker.d.ts +1 -1
  144. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/SiteOptionPickerField.d.ts +3 -0
  145. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/SiteOptionWidgetProvider.d.ts +14 -0
  146. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/index.d.ts +6 -0
  147. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +51 -0
  148. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/types.d.ts +20 -0
  149. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +5 -0
  150. package/dist/_dts/media-core/src/index.d.ts +1 -0
  151. package/dist/_dts/media-core/src/renderableMediaAsset.d.ts +18 -0
  152. package/dist/_dts/media-editor/src/MediaEditor.d.ts +4 -1
  153. package/dist/_dts/media-editor/src/MediaPickerDialog.d.ts +2 -1
  154. package/dist/_dts/media-editor/src/index.d.ts +1 -1
  155. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +7 -2
  156. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +5 -1
  157. package/dist/_dts/preview-next/src/client/blocks/blockCustomizePopoverRows.d.ts +25 -0
  158. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +2 -1
  159. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +4 -30
  160. package/dist/_dts/preview-next/src/client/blocks/linkedEntryRenderOverlay.d.ts +11 -0
  161. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +3 -9
  162. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeControlPlan.d.ts +24 -0
  163. package/dist/_dts/preview-next/src/client/blocks/useBlockCustomizeControls.d.ts +35 -0
  164. package/dist/_dts/preview-next/src/client/index.d.ts +0 -1
  165. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
  166. package/dist/_dts/preview-next/src/client/preview/LinkedEntryEditEventBridge.d.ts +1 -0
  167. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +5 -6
  168. package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +4 -1
  169. package/dist/_dts/preview-next/src/client/preview/PreviewBlockCustomizeSelectionContext.d.ts +20 -0
  170. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +20 -0
  171. package/dist/_dts/preview-next/src/client/preview/PreviewDesignHistoryOrderContext.d.ts +13 -0
  172. package/dist/_dts/preview-next/src/client/preview/PreviewOpenEditorButton.d.ts +2 -0
  173. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +19 -19
  174. package/dist/_dts/preview-next/src/client/preview/PreviewSidebarSection.d.ts +13 -0
  175. package/dist/_dts/preview-next/src/client/preview/SelectedBlockCustomizePanel.d.ts +13 -0
  176. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +47 -4
  177. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +14 -1
  178. package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +5 -0
  179. package/dist/_dts/preview-next/src/client/preview/previewChromePlacement.d.ts +46 -0
  180. package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +68 -0
  181. package/dist/_dts/preview-next/src/client/preview/previewCustomizeEditorDraftPatch.d.ts +13 -0
  182. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +8 -1
  183. package/dist/_dts/preview-next/src/client/preview/previewCustomizeRuntimePatch.d.ts +2 -0
  184. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +11 -9
  185. package/dist/_dts/preview-next/src/client/preview/previewDesignHistoryOrder.d.ts +18 -0
  186. package/dist/_dts/preview-next/src/client/preview/previewUndoDomains.d.ts +1 -1
  187. package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +41 -0
  188. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +101 -0
  189. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +29 -0
  190. package/dist/_dts/preview-next/src/client/preview/siteStyleHistoryState.d.ts +55 -0
  191. package/dist/_dts/preview-next/src/client/preview/storeTypes.d.ts +4 -0
  192. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -0
  193. package/dist/_dts/preview-next/src/client/widgets/widgetAdapters.d.ts +2 -1
  194. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +6 -3
  195. package/dist/_dts/preview-next/src/constants.d.ts +0 -1
  196. package/dist/_dts/sdk/src/cli/commands/webhooks.d.ts +44 -0
  197. package/dist/_dts/sdk/src/cli/config-loader.d.ts +3 -1
  198. package/dist/_dts/sdk/src/cli/content/reader.d.ts +5 -3
  199. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +1 -0
  200. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +3 -1
  201. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +1 -0
  202. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  203. package/dist/_dts/sdk/src/client/management/types.d.ts +56 -0
  204. package/dist/_dts/sdk/src/client/management/webhooks.d.ts +3 -0
  205. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  206. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  207. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +34 -5
  208. package/dist/_dts/sdk/src/public-api/contracts.d.ts +10 -0
  209. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +42 -0
  210. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +4 -0
  211. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  212. package/dist/_dts/sdk/src/version.d.ts +1 -1
  213. package/dist/_dts/theme-core/src/accordions/siteStyleDefaults.d.ts +220 -0
  214. package/dist/_dts/theme-core/src/accordions/types.d.ts +45 -2
  215. package/dist/_dts/theme-core/src/blockOverrides.d.ts +8 -0
  216. package/dist/_dts/theme-core/src/blocks/types.d.ts +1 -1
  217. package/dist/_dts/theme-core/src/blocks/vars/testimonials.d.ts +4 -1
  218. package/dist/_dts/theme-core/src/buttons/constants.d.ts +26 -1
  219. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  220. package/dist/_dts/theme-core/src/buttons/personalities/joy-stamp.d.ts +22 -0
  221. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +2 -1
  222. package/dist/_dts/theme-core/src/buttons/types.d.ts +9 -0
  223. package/dist/_dts/theme-core/src/cards/core.d.ts +20 -0
  224. package/dist/_dts/theme-core/src/cards/generateDefaultCardSystem.d.ts +6 -3
  225. package/dist/_dts/theme-core/src/cards/siteStyleDefaults.d.ts +149 -0
  226. package/dist/_dts/theme-core/src/cards/types.d.ts +177 -0
  227. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  228. package/dist/_dts/theme-core/src/interactive/types.d.ts +10 -0
  229. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +180 -21
  230. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +30 -0
  231. package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +16 -0
  232. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +1 -1
  233. package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +27 -0
  234. package/dist/_dts/theme-core/src/schema.d.ts +486 -55
  235. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +4 -1
  236. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +172 -47
  237. package/dist/_dts/theme-core/src/site-styles/appearancePresetResolution.d.ts +6 -2
  238. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +2 -3
  239. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +172 -47
  240. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +140 -2
  241. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +18 -2
  242. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +20 -1
  243. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +10 -2
  244. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +291 -6
  245. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  246. package/dist/_dts/theme-core/src/site-styles/logoBranding.d.ts +193 -0
  247. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +3 -23
  248. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +276 -4
  249. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +2 -8
  250. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +2 -0
  251. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +43 -10
  252. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +508 -0
  253. package/dist/_dts/theme-core/src/site-styles/siteStyleThemeCompiler.d.ts +11 -0
  254. package/dist/_dts/theme-core/src/site-styles/sourceCatalogs.d.ts +10 -10
  255. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  256. package/dist/_dts/theme-core/src/site-styles/testimonialQuotePresets.d.ts +15 -0
  257. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  258. package/dist/_dts/theme-core/src/site-styles/types.d.ts +28 -32
  259. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
  260. package/dist/{chunk-4HCW7FHJ.mjs → chunk-3PTVPAT4.mjs} +1984 -1142
  261. package/dist/{PreviewEditorSidebar-56NMJMIK.mjs → chunk-3QWQ2MUQ.mjs} +1050 -2609
  262. package/dist/{chunk-GP555I66.mjs → chunk-3VT7LZY2.mjs} +413 -157
  263. package/dist/{chunk-A3HHFKVT.mjs → chunk-4T5JIPWY.mjs} +1 -1
  264. package/dist/{chunk-K2IIF34C.mjs → chunk-E3NZYEKF.mjs} +25 -7
  265. package/dist/{chunk-V47ZU33I.mjs → chunk-WUHKQBB6.mjs} +12062 -3211
  266. package/dist/cli/index.mjs +3395 -817
  267. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +16 -4
  268. package/dist/client/{accordion-QLA7KBYO.mjs → accordion-SFIIZWNH.mjs} +2 -2
  269. package/dist/client/{bookingForm-PYZIPA5G.mjs → bookingForm-CFKZVWGA.mjs} +5 -5
  270. package/dist/client/bookings.mjs +1422 -345
  271. package/dist/client/{carousel-5EIULWBI.mjs → carousel-ELXWSBLA.mjs} +3 -3
  272. package/dist/client/{cart-DOP3FNI4.mjs → cart-6SSCPYY5.mjs} +6 -6
  273. package/dist/client/{checkout-BVMF6FBV.mjs → checkout-UFQ34HPV.mjs} +6 -6
  274. package/dist/client/{chunk-44K2U3QI.mjs → chunk-76JUETXQ.mjs} +139 -186
  275. package/dist/client/{chunk-AUJ5DBZJ.mjs → chunk-7BXX7WXH.mjs} +112 -28
  276. package/dist/client/{chunk-UDS3NTWA.mjs → chunk-G56BSZAM.mjs} +2 -2
  277. package/dist/client/{chunk-V6M5FCR5.mjs → chunk-IUEDYLFJ.mjs} +1 -1
  278. package/dist/client/{chunk-YLDYVRZL.mjs → chunk-NP47RHIX.mjs} +5 -5
  279. package/dist/client/{chunk-R5ESWNKX.mjs → chunk-NX6X3GRF.mjs} +419 -85
  280. package/dist/client/{chunk-CCNTDRCF.mjs → chunk-PA2LJH2M.mjs} +2 -2
  281. package/dist/client/{chunk-CE7IBGVW.mjs → chunk-RMWMT3ZD.mjs} +1 -1
  282. package/dist/client/{chunk-TYONZMST.mjs → chunk-TCJS3NY5.mjs} +1 -1
  283. package/dist/client/{chunk-GG4M2NP6.mjs → chunk-V6XI4M2Q.mjs} +1 -1
  284. package/dist/client/client.mjs +9077 -4410
  285. package/dist/client/{courseRegistration-E6EAA6NL.mjs → courseRegistration-HJIISAAG.mjs} +5 -5
  286. package/dist/client/{eventCalendar-HBG3HAK6.mjs → eventCalendar-F6YVUCZR.mjs} +7 -7
  287. package/dist/client/{eventCombined-6K5ZZWAK.mjs → eventCombined-B5DSTIOK.mjs} +7 -7
  288. package/dist/client/{eventDetails-Q75ICXLT.mjs → eventDetails-SEJDDHQC.mjs} +7 -7
  289. package/dist/client/{eventListing-27P5F7DZ.mjs → eventListing-TPMWIIBO.mjs} +7 -7
  290. package/dist/client/{eventRegistration-IQ7AMASR.mjs → eventRegistration-QU6W2PV6.mjs} +7 -7
  291. package/dist/client/{form-JRTD65FN.mjs → form-LVTYNTDE.mjs} +2 -2
  292. package/dist/client/{headerSection-7FPSSZHS.mjs → headerSection-SO3MFC4U.mjs} +110 -28
  293. package/dist/client/hooks.mjs +4695 -2260
  294. package/dist/client/{locationMap-7NGFNYBH.mjs → locationMap-5E5FLAKO.mjs} +2 -2
  295. package/dist/client/{newsletterForm-F3BADCI2.mjs → newsletterForm-GN32JEBQ.mjs} +2 -2
  296. package/dist/client/{productDetail-V3HP7ITJ.mjs → productDetail-Q346KSVR.mjs} +6 -6
  297. package/dist/client/{productList-L3EGJUF2.mjs → productList-DTDMQYGZ.mjs} +6 -6
  298. package/dist/client/rendering/client.mjs +5795 -3582
  299. package/dist/client/rendering/islands.mjs +32 -20
  300. package/dist/client/rendering.mjs +7988 -3317
  301. package/dist/client/{shop-DQUB5E2C.mjs → shop-OFUW7KPN.mjs} +6 -6
  302. package/dist/preview-next/before-render.mjs +24 -0
  303. package/dist/preview-next/client/runtime.mjs +5 -5
  304. package/dist/preview-next/constants.mjs +0 -2
  305. package/dist/preview-next/index.mjs +0 -2
  306. package/dist/preview-next/middleware.mjs +24 -0
  307. package/dist/{sdk-runtime-AF6KXJU4.mjs → sdk-runtime-2GIX6I7X.mjs} +6 -6
  308. package/dist/server/components.mjs +7384 -3089
  309. package/dist/server/config-validation.mjs +4747 -2418
  310. package/dist/server/config.mjs +4747 -2418
  311. package/dist/server/data.mjs +4695 -2260
  312. package/dist/server/index.mjs +26 -1
  313. package/dist/server/next.mjs +7430 -3039
  314. package/dist/server/page-converter.mjs +3985 -2070
  315. package/dist/server/prebuild.mjs +1 -1
  316. package/dist/server/rendering/server.mjs +7489 -3094
  317. package/dist/server/rendering.mjs +7491 -3096
  318. package/dist/server/routing.mjs +4965 -2386
  319. package/dist/server/server.mjs +4713 -2278
  320. package/dist/server/theme-bridge.mjs +2181 -383
  321. package/dist/server/theme.mjs +477 -222
  322. package/dist/styles/index.css +747 -71
  323. package/package.json +1 -1
  324. package/dist/SdkPreviewModeRuntime-H4BSP6E7.mjs +0 -8
  325. package/dist/_dts/editor-blocks/src/block-editor/actionControlMode.d.ts +0 -2
  326. package/dist/_dts/preview-next/src/client/preview/previewSurface.d.ts +0 -3
  327. package/dist/chunk-LCY32PXF.mjs +0 -1175
@@ -2,7 +2,7 @@
2
2
  import * as React2 from "react";
3
3
 
4
4
  // ../theme-core/src/schema.ts
5
- import { z as z16 } from "zod";
5
+ import { z as z17 } from "zod";
6
6
 
7
7
  // ../theme-core/src/lib/media.ts
8
8
  import z from "zod";
@@ -284,7 +284,9 @@ var buttonBorderSchema = z3.object({
284
284
  var variantShadowSchema = z3.object({
285
285
  elevation: z3.enum(["none", "low", "medium", "high"]),
286
286
  softness: z3.enum(["crisp", "soft", "hard"]).nullable(),
287
- position: z3.enum(["bottom", "bottom-right"]).default("bottom")
287
+ position: z3.enum(["bottom", "bottom-right"]).default("bottom"),
288
+ // Optional palette token for a coloured offset shadow; omit for neutral black.
289
+ colorToken: themeColorTokenSchema.optional()
288
290
  });
289
291
  var variantEffectsSchema = z3.object({
290
292
  base: z3.array(effectApplicationSchema).optional(),
@@ -814,6 +816,65 @@ var inkStamp = defineButtonPersonality({
814
816
  }
815
817
  });
816
818
 
819
+ // ../theme-core/src/buttons/personalities/joy-stamp.ts
820
+ var joyStamp = defineButtonPersonality({
821
+ id: "joy-stamp",
822
+ name: "Joy Stamp",
823
+ description: "Pill buttons with a hard, brand-coloured offset shadow that presses in on hover.",
824
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "organic" },
825
+ buttonSystem: {
826
+ global: {
827
+ cornerStyle: "pill",
828
+ shadow: "high",
829
+ textTransform: "none",
830
+ // Bold display type on the buttons: use the heading font (Bricolage) at
831
+ // 700, matching the mockup's chunky button labels.
832
+ typography: "heading",
833
+ fontWeight: 700,
834
+ borderWidth: 2,
835
+ hoverTransform: "none",
836
+ hoverColor: "none"
837
+ },
838
+ sizes: {
839
+ sm: { padding: "0.625rem 1.25rem", fontSize: "text-sm" },
840
+ md: { padding: "0.875rem 1.75rem", fontSize: "text-base" },
841
+ lg: { padding: "1.125rem 2.25rem", fontSize: "text-lg" },
842
+ xl: { padding: "1.25rem 2.75rem", fontSize: "text-xl" }
843
+ },
844
+ variants: [
845
+ {
846
+ id: "primary",
847
+ name: "Primary",
848
+ enabled: true,
849
+ priority: 1,
850
+ background: { type: "solid", colorToken: "primary" },
851
+ textColorToken: "primaryForeground",
852
+ borderRadius: "rounded-full",
853
+ // Cream stamp shadow under the burnt-orange fill.
854
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "text" },
855
+ effects: {
856
+ hover: [{ effectId: "press-down" }]
857
+ }
858
+ },
859
+ {
860
+ id: "secondary",
861
+ name: "Secondary",
862
+ enabled: true,
863
+ priority: 2,
864
+ background: { type: "transparent" },
865
+ textColorToken: "text",
866
+ borderRadius: "rounded-full",
867
+ border: { widthClass: "border-2", colorToken: "text" },
868
+ // Brown stamp shadow under the cream outline.
869
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "secondary" },
870
+ effects: {
871
+ hover: [{ effectId: "press-down" }]
872
+ }
873
+ }
874
+ ]
875
+ }
876
+ });
877
+
817
878
  // ../theme-core/src/buttons/personalities/pebble.ts
818
879
  var pebble = defineButtonPersonality({
819
880
  id: "pebble",
@@ -1087,7 +1148,8 @@ var buttonPersonalities = [
1087
1148
  pebble,
1088
1149
  inkStamp,
1089
1150
  brushedWash,
1090
- showtimePill
1151
+ showtimePill,
1152
+ joyStamp
1091
1153
  ];
1092
1154
  var personalitiesById = new Map(
1093
1155
  buttonPersonalities.map((p) => [p.id, p])
@@ -1221,8 +1283,15 @@ function getDefaultButtonVariants() {
1221
1283
 
1222
1284
  // ../theme-core/src/cards/types.ts
1223
1285
  import { z as z6 } from "zod";
1286
+ var cardVariantRoleValues = ["default", "alternative"];
1287
+ var boxlessCardVariantValue = "none";
1224
1288
  var cardSpacingSchema = z6.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
1225
1289
  var gradientDirectionSchema2 = z6.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
1290
+ var cardVariantRoleSchema = z6.enum(cardVariantRoleValues);
1291
+ var boxStylesCardVariantSchema = z6.enum([
1292
+ ...cardVariantRoleValues,
1293
+ boxlessCardVariantValue
1294
+ ]);
1226
1295
  var cardBackgroundSchema = z6.discriminatedUnion("type", [
1227
1296
  z6.object({ type: z6.literal("solid"), colorToken: themeColorTokenSchema }),
1228
1297
  z6.object({
@@ -1237,6 +1306,24 @@ var cardBorderSchema = z6.object({
1237
1306
  widthClass: z6.string(),
1238
1307
  colorToken: themeColorTokenSchema
1239
1308
  });
1309
+ var cardCornerValueSchema = z6.enum([
1310
+ "square",
1311
+ "soft",
1312
+ "rounded",
1313
+ "pill",
1314
+ "expressive"
1315
+ ]);
1316
+ var cardAccentEdgeSchema = z6.object({
1317
+ edge: z6.enum(["left", "top", "right", "bottom"]),
1318
+ colorToken: themeColorTokenSchema,
1319
+ width: z6.enum(["thin", "medium", "thick", "heavy"])
1320
+ });
1321
+ var cardCornerRadiiSchema = z6.object({
1322
+ topLeft: cardCornerValueSchema.optional(),
1323
+ topRight: cardCornerValueSchema.optional(),
1324
+ bottomLeft: cardCornerValueSchema.optional(),
1325
+ bottomRight: cardCornerValueSchema.optional()
1326
+ });
1240
1327
  var cardVariantSchema = z6.object({
1241
1328
  id: z6.string(),
1242
1329
  name: z6.string().min(1).max(20),
@@ -1245,6 +1332,8 @@ var cardVariantSchema = z6.object({
1245
1332
  // Appearance (token-based)
1246
1333
  background: cardBackgroundSchema,
1247
1334
  spacing: cardSpacingSchema,
1335
+ // Optional foreground (card text) color, for cards on a strong fill.
1336
+ foregroundToken: themeColorTokenSchema.optional(),
1248
1337
  // Optional overrides (uses theme defaults if not specified)
1249
1338
  shadow: z6.object({
1250
1339
  elevation: z6.enum(["none", "low", "medium", "high"]),
@@ -1252,8 +1341,12 @@ var cardVariantSchema = z6.object({
1252
1341
  position: z6.enum(["bottom", "bottom-right"]).default("bottom")
1253
1342
  }).optional(),
1254
1343
  corners: z6.enum(["square", "soft", "rounded", "pill"]).optional(),
1344
+ // Per-corner radius override; wins over `corners` when set.
1345
+ cornerRadii: cardCornerRadiiSchema.optional(),
1255
1346
  // Border (optional)
1256
- border: cardBorderSchema.optional()
1347
+ border: cardBorderSchema.optional(),
1348
+ // Single accent edge; replaces `border` when set.
1349
+ accentEdge: cardAccentEdgeSchema.optional()
1257
1350
  });
1258
1351
  var cardSystemSchema = z6.object({
1259
1352
  variants: z6.array(cardVariantSchema).min(1).max(3)
@@ -1272,6 +1365,33 @@ var BORDER_WIDTH_MAP3 = {
1272
1365
  medium: "2px",
1273
1366
  thick: "4px"
1274
1367
  };
1368
+ var PER_CORNER_RADIUS_MAP = {
1369
+ square: "0",
1370
+ soft: "0.5rem",
1371
+ rounded: "1rem",
1372
+ pill: "1.5rem",
1373
+ // A large block-radius multiple for expressive, asymmetric card corners.
1374
+ expressive: "calc(var(--rb-block-radius) * 3)"
1375
+ };
1376
+ var ACCENT_EDGE_WIDTH_MAP = {
1377
+ thin: "2px",
1378
+ medium: "3px",
1379
+ thick: "4px",
1380
+ heavy: "5px"
1381
+ };
1382
+ var ACCENT_EDGE_SIDE_MAP = {
1383
+ left: "border-left",
1384
+ top: "border-top",
1385
+ right: "border-right",
1386
+ bottom: "border-bottom"
1387
+ };
1388
+ function resolveCornerRadiiCss(cornerRadii, fallback) {
1389
+ const fallbackValue = CORNER_RADIUS_MAP3[fallback];
1390
+ const at = (value) => value ? PER_CORNER_RADIUS_MAP[value] : fallbackValue;
1391
+ return `${at(cornerRadii.topLeft)} ${at(cornerRadii.topRight)} ${at(
1392
+ cornerRadii.bottomRight
1393
+ )} ${at(cornerRadii.bottomLeft)}`;
1394
+ }
1275
1395
  var GRADIENT_DIRECTION_MAP4 = {
1276
1396
  "to-r": "to right",
1277
1397
  "to-l": "to left",
@@ -1319,11 +1439,25 @@ function generateVariantCss2(scopeId, variant, settings) {
1319
1439
  } else {
1320
1440
  containerRules.push("background: transparent");
1321
1441
  }
1322
- const borderWidth = variant.borderWidth ? BORDER_WIDTH_MAP3[variant.borderWidth] : variant.borderToken ? BORDER_WIDTH_MAP3[settings.borderWidth] : "0";
1323
- if (variant.borderToken && borderWidth !== "0") {
1324
- containerRules.push(`border: ${borderWidth} solid rgb(var(--tb-${variant.borderToken}))`);
1442
+ if (variant.foregroundToken) {
1443
+ containerRules.push(`color: rgb(var(--tb-${variant.foregroundToken}))`);
1444
+ }
1445
+ if (variant.accentEdge) {
1446
+ const side = ACCENT_EDGE_SIDE_MAP[variant.accentEdge.edge];
1447
+ const width = ACCENT_EDGE_WIDTH_MAP[variant.accentEdge.width];
1448
+ containerRules.push("border: 0");
1449
+ containerRules.push(
1450
+ `${side}: ${width} solid rgb(var(--tb-${variant.accentEdge.colorToken}))`
1451
+ );
1452
+ } else {
1453
+ const borderWidth = variant.borderWidth ? BORDER_WIDTH_MAP3[variant.borderWidth] : variant.borderToken ? BORDER_WIDTH_MAP3[settings.borderWidth] : "0";
1454
+ if (variant.borderToken && borderWidth !== "0") {
1455
+ containerRules.push(`border: ${borderWidth} solid rgb(var(--tb-${variant.borderToken}))`);
1456
+ }
1325
1457
  }
1326
- containerRules.push(`border-radius: ${CORNER_RADIUS_MAP3[settings.corners]}`);
1458
+ containerRules.push(
1459
+ `border-radius: ${variant.cornerRadii ? resolveCornerRadiiCss(variant.cornerRadii, settings.corners) : CORNER_RADIUS_MAP3[settings.corners]}`
1460
+ );
1327
1461
  if (settings.shadow !== "none") {
1328
1462
  containerRules.push(`box-shadow: ${SHADOW_VALUES2[settings.shadow]}`);
1329
1463
  }
@@ -1392,11 +1526,13 @@ var accordionIconSchema = z7.enum([
1392
1526
  // ⊕ becomes ⊖ (swap with fade)
1393
1527
  ]);
1394
1528
  var accordionSystemSchema = z7.object({
1395
- // Visual styling (solid color only - gradients can be added later if needed)
1529
+ // Visual styling (solid color only - gradients can be added later if needed).
1530
+ // null = no fill, so the accordion sits transparently on the section
1531
+ // surface (used by open, boxless "divided" looks).
1396
1532
  background: z7.object({
1397
1533
  type: z7.literal("solid"),
1398
1534
  colorToken: themeColorTokenSchema
1399
- }),
1535
+ }).nullable(),
1400
1536
  // Spacing (padding inside items)
1401
1537
  spacing: z7.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
1402
1538
  // Border radius (null = inherit from theme.corners)
@@ -1423,8 +1559,16 @@ var accordionSystemSchema = z7.object({
1423
1559
  // Trigger (question) styling
1424
1560
  trigger: z7.object({
1425
1561
  textColorToken: themeColorTokenSchema,
1426
- fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).nullable()
1562
+ fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).nullable(),
1427
1563
  // null = inherit from theme
1564
+ // Question typography. Defaults keep the historical body-font look; set
1565
+ // fontFamily 'heading' + a larger scale to give questions real presence.
1566
+ fontFamily: z7.enum(["body", "heading"]).optional(),
1567
+ // default 'body'
1568
+ fontScale: z7.enum(["body", "md", "lg"]).optional(),
1569
+ // default 'body'
1570
+ letterSpacing: z7.enum(["normal", "tight", "wide"]).optional(),
1571
+ textTransform: z7.enum(["none", "uppercase"]).optional()
1428
1572
  }),
1429
1573
  // Hover state styling
1430
1574
  hover: z7.object({
@@ -1432,6 +1576,17 @@ var accordionSystemSchema = z7.object({
1432
1576
  textColorToken: themeColorTokenSchema.optional(),
1433
1577
  borderColorToken: themeColorTokenSchema.optional()
1434
1578
  }),
1579
+ // Open-state emphasis: how an expanded item is visually rewarded. All
1580
+ // optional; omit for the historical "only the text recolors" behaviour.
1581
+ openState: z7.object({
1582
+ backgroundColorToken: themeColorTokenSchema.optional(),
1583
+ triggerColorToken: themeColorTokenSchema.optional(),
1584
+ accent: z7.object({
1585
+ edge: z7.enum(["left", "top", "bottom"]),
1586
+ colorToken: themeColorTokenSchema,
1587
+ thickness: z7.enum(["thin", "medium", "thick"])
1588
+ }).optional()
1589
+ }).optional(),
1435
1590
  // Content (answer) styling
1436
1591
  content: z7.object({
1437
1592
  textColorToken: themeColorTokenSchema
@@ -1780,6 +1935,9 @@ var componentShadowSchema = z14.object({
1780
1935
  });
1781
1936
 
1782
1937
  // ../theme-core/src/site-styles/types.ts
1938
+ function defineExactCatalog() {
1939
+ return (entries) => entries;
1940
+ }
1783
1941
  function asAppearancePresetId(value) {
1784
1942
  return brandNonEmptyString(value, "AppearancePresetId");
1785
1943
  }
@@ -1837,14 +1995,8 @@ var visibleHeadingDecorationFamilyValues = [
1837
1995
  "organic-squiggle",
1838
1996
  "short-center-rule"
1839
1997
  ];
1840
- var visibleHeadingDecorationPlacementValues = [
1841
- "after-heading",
1842
- "between-heading-and-body",
1843
- "under-centered-heading"
1844
- ];
1845
1998
  var headingDecorationOverrideValues = [
1846
1999
  "site-default",
1847
- "on",
1848
2000
  "off"
1849
2001
  ];
1850
2002
  var headingDecorationColorTokenValues = [
@@ -1855,6 +2007,9 @@ var headingDecorationColorTokenValues = [
1855
2007
  "border",
1856
2008
  "muted"
1857
2009
  ];
2010
+ var noHeadingDecoration = {
2011
+ family: "none"
2012
+ };
1858
2013
  var accordionIconSetValues = [
1859
2014
  "plus",
1860
2015
  "chevron",
@@ -1875,79 +2030,219 @@ var accordionIconMotionValues = [
1875
2030
  "swap"
1876
2031
  ];
1877
2032
 
1878
- // ../theme-core/src/utils/tokenOrColor.ts
2033
+ // ../theme-core/src/site-styles/logoBranding.ts
1879
2034
  import { z as z15 } from "zod";
1880
- var tokenOrCssColorValueSchema = z15.string();
2035
+ var logoTextConfidenceValues = ["low", "medium", "high"];
2036
+ var logoAssetShapeValues = [
2037
+ "none",
2038
+ "horizontal",
2039
+ "square",
2040
+ "portrait",
2041
+ "tall"
2042
+ ];
2043
+ var logoKindValues = [
2044
+ "mark",
2045
+ "wordmark",
2046
+ "lockup",
2047
+ "badge",
2048
+ "stacked-wordmark",
2049
+ "unknown"
2050
+ ];
2051
+ var logoDensityValues = ["simple", "detailed", "unknown"];
2052
+ var logoContainsTextSchema = z15.discriminatedUnion("kind", [
2053
+ z15.object({
2054
+ kind: z15.literal("contains-text"),
2055
+ confidence: z15.enum(logoTextConfidenceValues),
2056
+ text: z15.string().trim().min(1).max(200).optional()
2057
+ }),
2058
+ z15.object({
2059
+ kind: z15.literal("no-text"),
2060
+ confidence: z15.enum(logoTextConfidenceValues)
2061
+ }),
2062
+ z15.object({
2063
+ kind: z15.literal("unknown"),
2064
+ reason: z15.enum([
2065
+ "analysis-unavailable",
2066
+ "unsupported-file",
2067
+ "low-confidence"
2068
+ ])
2069
+ })
2070
+ ]);
2071
+ var logoAnalysisSourceSchema = z15.discriminatedUnion("kind", [
2072
+ z15.object({ kind: z15.literal("none") }),
2073
+ z15.object({
2074
+ kind: z15.literal("deterministic"),
2075
+ reason: z15.enum(["dimensions", "fallback"])
2076
+ }),
2077
+ z15.object({
2078
+ kind: z15.literal("llm"),
2079
+ model: z15.literal("gpt-5.4-mini"),
2080
+ analyzedAt: z15.string().trim().min(1).max(80).optional()
2081
+ }),
2082
+ z15.object({ kind: z15.literal("manual-override") })
2083
+ ]);
2084
+ var logoFactsSchema = z15.object({
2085
+ shape: z15.enum(logoAssetShapeValues),
2086
+ containsText: logoContainsTextSchema,
2087
+ kind: z15.enum(logoKindValues),
2088
+ density: z15.enum(logoDensityValues),
2089
+ source: logoAnalysisSourceSchema
2090
+ });
2091
+ var brandDisplayModeValues = [
2092
+ "auto",
2093
+ "logo-only",
2094
+ "logo-plus-title",
2095
+ "title-only"
2096
+ ];
2097
+ var logoAccommodationPatternValues = [
2098
+ "title-only",
2099
+ "inline-logo-only",
2100
+ "inline-wordmark",
2101
+ "inline-mark-with-title",
2102
+ "logo-plate",
2103
+ "centered-badge",
2104
+ "popout-badge",
2105
+ "centered-masthead",
2106
+ "hero-badge"
2107
+ ];
2108
+ var logoSizePolicyValues = [
2109
+ "auto",
2110
+ "compact",
2111
+ "standard",
2112
+ "generous",
2113
+ "display"
2114
+ ];
2115
+
2116
+ // ../theme-core/src/site-styles/rawStyleFields.ts
2117
+ var themeV2RuntimeStyleFieldNames = [
2118
+ "_frameStyles",
2119
+ "_sectionStyles",
2120
+ "_containerStyles",
2121
+ "_cardStyles",
2122
+ // styleGroup is legacy runtime transition wiring rather than a nested
2123
+ // override object, but normal editors should still never see it directly.
2124
+ "styleGroup"
2125
+ ];
2126
+ var themeV2BlockSpecificRawStyleFieldNames = [
2127
+ "_contentCardStyles",
2128
+ "_heroLayoutStyles",
2129
+ "_textCardStyles"
2130
+ ];
2131
+ var themeV2NormalEditorRawStyleFieldNames = [
2132
+ ...themeV2RuntimeStyleFieldNames,
2133
+ ...themeV2BlockSpecificRawStyleFieldNames
2134
+ ];
2135
+ var themeV2NormalEditorRawStyleFieldNameSet = new Set(
2136
+ themeV2NormalEditorRawStyleFieldNames
2137
+ );
2138
+ var themeV2CompilerOwnedFieldNames = [
2139
+ ...themeV2RuntimeStyleFieldNames,
2140
+ ...themeV2BlockSpecificRawStyleFieldNames
2141
+ ];
2142
+ var pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
2143
+
2144
+ // ../theme-core/src/utils/tokenOrColor.ts
2145
+ import { z as z16 } from "zod";
2146
+
2147
+ // ../theme-core/src/utils/colorStyles.ts
2148
+ var COLOR_VAR_PREFIX = "--tb-";
2149
+ function parseToken(source) {
2150
+ const parts = parseColorTokenParts(source);
2151
+ if (parts.kind === "raw") {
2152
+ return { token: source, raw: parts.value };
2153
+ }
2154
+ if (parts.kind === "invalid") {
2155
+ return { token: source };
2156
+ }
2157
+ return {
2158
+ token: parts.token,
2159
+ alpha: parts.opacityPercent === null ? void 0 : parts.opacityPercent / 100
2160
+ };
2161
+ }
2162
+ function rgbColorValue(token) {
2163
+ const { token: baseToken, alpha, raw } = parseToken(token);
2164
+ if (raw) {
2165
+ return raw;
2166
+ }
2167
+ const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
2168
+ if (alpha === void 0) {
2169
+ return `rgb(var(${cssVar}))`;
2170
+ }
2171
+ return `rgba(var(${cssVar}), ${alpha})`;
2172
+ }
2173
+
2174
+ // ../theme-core/src/utils/tokenOrColor.ts
2175
+ var tokenOrCssColorValueSchema = z16.string();
1881
2176
 
1882
2177
  // ../theme-core/src/schema.ts
1883
- var axesSchema = z16.object({
1884
- tone: z16.enum(["minimal", "classic", "bold"]),
1885
- energy: z16.enum(["calm", "vibrant"]),
1886
- density: z16.enum(["airy", "regular", "compact"]),
1887
- mediaBias: z16.enum(["text", "media", "mixed"]),
1888
- conversionBias: z16.enum(["low", "med", "high"]),
1889
- motion: z16.enum(["subtle", "standard", "expressive"])
2178
+ var axesSchema = z17.object({
2179
+ tone: z17.enum(["minimal", "classic", "bold"]),
2180
+ energy: z17.enum(["calm", "vibrant"]),
2181
+ density: z17.enum(["airy", "regular", "compact"]),
2182
+ mediaBias: z17.enum(["text", "media", "mixed"]),
2183
+ conversionBias: z17.enum(["low", "med", "high"]),
2184
+ motion: z17.enum(["subtle", "standard", "expressive"])
1890
2185
  });
1891
- var colourHexString = z16.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
1892
- var paletteColorSchema = z16.object({
1893
- name: z16.string().min(1),
2186
+ var colourHexString = z17.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
2187
+ var paletteColorSchema = z17.object({
2188
+ name: z17.string().min(1),
1894
2189
  hex: colourHexString
1895
2190
  });
1896
- var paletteMetaSchema = z16.object({
1897
- mode: z16.enum(["light", "dark"])
2191
+ var paletteMetaSchema = z17.object({
2192
+ mode: z17.enum(["light", "dark"])
1898
2193
  });
1899
- var paletteSchema = z16.object({
1900
- colors: z16.array(paletteColorSchema),
2194
+ var paletteSchema = z17.object({
2195
+ colors: z17.array(paletteColorSchema),
1901
2196
  meta: paletteMetaSchema
1902
2197
  });
1903
- var typographyStyleSchema = z16.object({
1904
- family: z16.string().min(1),
1905
- weight: z16.enum(["light", "regular", "medium", "semibold", "bold"]),
1906
- letterSpacing: z16.enum(["tight", "normal", "loose"]),
1907
- lineHeight: z16.enum(["normal", "relaxed", "loose"])
2198
+ var typographyStyleSchema = z17.object({
2199
+ family: z17.string().min(1),
2200
+ weight: z17.enum(["light", "regular", "medium", "semibold", "bold"]),
2201
+ letterSpacing: z17.enum(["tight", "normal", "loose"]),
2202
+ lineHeight: z17.enum(["normal", "relaxed", "loose"])
1908
2203
  });
1909
2204
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
1910
- size: z16.enum(["md", "lg", "xl"])
2205
+ size: z17.enum(["md", "lg", "xl"])
1911
2206
  });
1912
- var headingSizeSchema = z16.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
1913
- var headingTypographyOverridesSchema = z16.object({
1914
- weight: z16.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
1915
- letterSpacing: z16.enum(["tight", "normal", "loose"]).nullable().optional(),
2207
+ var headingSizeSchema = z17.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
2208
+ var headingTypographyOverridesSchema = z17.object({
2209
+ weight: z17.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
2210
+ letterSpacing: z17.enum(["tight", "normal", "loose"]).nullable().optional(),
1916
2211
  size: headingSizeSchema.nullable().optional(),
1917
- lineHeight: z16.enum(["normal", "relaxed", "loose"]).nullable().optional(),
1918
- italic: z16.boolean().nullable().optional(),
2212
+ lineHeight: z17.enum(["normal", "relaxed", "loose"]).nullable().optional(),
2213
+ italic: z17.boolean().nullable().optional(),
1919
2214
  colorToken: themeColorTokenSchema.nullable().optional()
1920
2215
  });
1921
2216
  var headingTypographyStyleSchema = typographyStyleSchema.extend({
1922
- case: z16.enum(["uppercase", "normal", "smallCaps"]).nullable(),
1923
- italic: z16.boolean().nullable(),
2217
+ case: z17.enum(["uppercase", "normal", "smallCaps"]).nullable(),
2218
+ italic: z17.boolean().nullable(),
1924
2219
  colorToken: themeColorTokenSchema.nullable().optional()
1925
2220
  });
1926
- var proseLinkUnderlineStyleSchema = z16.enum(["solid", "dotted", "dashed"]);
1927
- var proseLinkUnderlineThicknessSchema = z16.enum([
2221
+ var proseLinkUnderlineStyleSchema = z17.enum(["solid", "dotted", "dashed"]);
2222
+ var proseLinkUnderlineThicknessSchema = z17.enum([
1928
2223
  "auto",
1929
2224
  "fromFont",
1930
2225
  "thin",
1931
2226
  "medium",
1932
2227
  "thick"
1933
2228
  ]);
1934
- var proseLinkUnderlineOffsetSchema = z16.enum([
2229
+ var proseLinkUnderlineOffsetSchema = z17.enum([
1935
2230
  "auto",
1936
2231
  "tight",
1937
2232
  "normal",
1938
2233
  "loose"
1939
2234
  ]);
1940
- var proseLinkStyleSchema = z16.object({
2235
+ var proseLinkStyleSchema = z17.object({
1941
2236
  colorToken: themeColorTokenSchema.optional(),
1942
2237
  hoverColorToken: themeColorTokenSchema.optional(),
1943
- underline: z16.boolean().optional(),
2238
+ underline: z17.boolean().optional(),
1944
2239
  decorationColorToken: themeColorTokenSchema.optional(),
1945
2240
  hoverDecorationColorToken: themeColorTokenSchema.optional(),
1946
2241
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
1947
2242
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
1948
2243
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
1949
2244
  });
1950
- var semanticSpacingSchema = z16.enum([
2245
+ var semanticSpacingSchema = z17.enum([
1951
2246
  "none",
1952
2247
  "compact",
1953
2248
  "cozy",
@@ -1955,91 +2250,111 @@ var semanticSpacingSchema = z16.enum([
1955
2250
  "comfortable",
1956
2251
  "spacious"
1957
2252
  ]);
1958
- var boxRoundedSchema = z16.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
1959
- var boxBackgroundOverlaySchema = z16.object({
1960
- type: z16.enum(["none", "color", "gradient"]).nullable().optional(),
2253
+ var boxRoundedSchema = z17.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
2254
+ var boxBackgroundOverlaySchema = z17.object({
2255
+ type: z17.enum(["none", "color", "gradient"]).nullable().optional(),
1961
2256
  color: tokenOrCssColorValueSchema.nullable().optional(),
1962
- gradient: z16.string().nullable().optional(),
1963
- opacity: z16.number().min(0).max(1).nullable().optional()
2257
+ gradient: z17.string().nullable().optional(),
2258
+ opacity: z17.number().min(0).max(1).nullable().optional()
1964
2259
  });
1965
- var boxBackgroundSchema = z16.object({
1966
- type: z16.enum(["color", "gradient", "image"]).optional(),
2260
+ var boxBackgroundSchema = z17.object({
2261
+ type: z17.enum(["color", "gradient", "image"]).optional(),
2262
+ contentOwner: z17.literal(pageDesignEditorBackgroundOverrideOwner).optional(),
1967
2263
  color: tokenOrCssColorValueSchema.nullable().optional(),
1968
- gradient: z16.string().nullable().optional(),
2264
+ gradient: z17.string().nullable().optional(),
2265
+ gradientPresetId: z17.string().min(1).nullable().optional(),
1969
2266
  image: mediaSchema.nullable().optional(),
1970
- objectFit: z16.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
1971
- scale: z16.string().nullable().optional(),
1972
- position: z16.string().nullable().optional(),
1973
- opacity: z16.number().min(0).max(1).nullable().optional(),
1974
- motion: z16.enum(["static", "fixed-frame"]).nullable().optional(),
2267
+ objectFit: z17.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
2268
+ scale: z17.string().nullable().optional(),
2269
+ position: z17.string().nullable().optional(),
2270
+ opacity: z17.number().min(0).max(1).nullable().optional(),
2271
+ motion: z17.enum(["static", "fixed-frame"]).nullable().optional(),
1975
2272
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
1976
2273
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
1977
- headingColor: tokenOrCssColorValueSchema.nullable().optional()
2274
+ headingColor: tokenOrCssColorValueSchema.nullable().optional(),
2275
+ linkColor: tokenOrCssColorValueSchema.nullable().optional(),
2276
+ supportingColor: tokenOrCssColorValueSchema.nullable().optional()
1978
2277
  });
1979
- var noHeadingDecorationSchema = z16.object({
1980
- family: z16.literal("none"),
1981
- placement: z16.literal("none")
2278
+ var noHeadingDecorationSchema = z17.object({
2279
+ family: z17.literal("none")
1982
2280
  });
1983
- var visibleHeadingDecorationSchema = z16.object({
1984
- family: z16.enum(visibleHeadingDecorationFamilyValues),
1985
- placement: z16.enum(visibleHeadingDecorationPlacementValues),
1986
- colorToken: z16.enum(headingDecorationColorTokenValues).optional()
2281
+ var visibleHeadingDecorationSchema = z17.object({
2282
+ family: z17.enum(visibleHeadingDecorationFamilyValues),
2283
+ colorToken: z17.enum(headingDecorationColorTokenValues).optional()
1987
2284
  });
1988
- var headingDecorationSchema = z16.union([
2285
+ var headingDecorationSchema = z17.union([
1989
2286
  noHeadingDecorationSchema,
1990
2287
  visibleHeadingDecorationSchema
1991
2288
  ]);
1992
- var accordionIconTreatmentSchema = z16.object({
1993
- iconSet: z16.enum(accordionIconSetValues),
1994
- colorToken: z16.enum(accordionIconColorTokenValues),
1995
- openColorToken: z16.enum(accordionIconColorTokenValues).optional(),
1996
- motion: z16.enum(accordionIconMotionValues)
2289
+ var headingDecorationOverrideSchema = z17.union([
2290
+ z17.enum(headingDecorationOverrideValues),
2291
+ // Legacy authoring value from the earlier model. In the render-time model
2292
+ // "on" cannot force a fragment into a block, so it is equivalent to default.
2293
+ z17.literal("on").transform(() => "site-default")
2294
+ ]);
2295
+ var accordionIconTreatmentSchema = z17.object({
2296
+ iconSet: z17.enum(accordionIconSetValues),
2297
+ colorToken: z17.enum(accordionIconColorTokenValues),
2298
+ openColorToken: z17.enum(accordionIconColorTokenValues).optional(),
2299
+ motion: z17.enum(accordionIconMotionValues)
1997
2300
  });
1998
- var sectionStylesOverrideSchema = z16.object({
2301
+ var sectionStylesOverrideSchema = z17.object({
1999
2302
  background: boxBackgroundSchema.nullable().optional(),
2000
2303
  spacing: semanticSpacingSchema.nullable().optional(),
2001
- minHeight: z16.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
2002
- tileTreatment: z16.enum(tileTreatmentValues).nullable().optional(),
2003
- eventListTreatment: z16.enum(eventListTreatmentValues).nullable().optional(),
2004
- eyebrowTreatment: z16.enum(eyebrowTreatmentValues).nullable().optional(),
2304
+ minHeight: z17.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
2305
+ tileTreatment: z17.enum(tileTreatmentValues).nullable().optional(),
2306
+ eventListTreatment: z17.enum(eventListTreatmentValues).nullable().optional(),
2307
+ eyebrowTreatment: z17.enum(eyebrowTreatmentValues).nullable().optional(),
2005
2308
  headingDecoration: headingDecorationSchema.nullable().optional(),
2006
- // Author-level override consumed by later block/editor rendering phases.
2007
- // Keeping it in section styles lets existing block save APIs persist it.
2008
- headingDecorationOverride: z16.enum(headingDecorationOverrideValues).nullable().optional(),
2309
+ // Author-level opt-out consumed by render-time theme projection. Persisted
2310
+ // content may also carry legacy `headingDecoration` / `on` values; those are
2311
+ // tolerated at the schema boundary but the renderer treats the compiled theme
2312
+ // as the only source of the resolved signature.
2313
+ headingDecorationOverride: headingDecorationOverrideSchema.nullable().optional(),
2009
2314
  accordionIconTreatment: accordionIconTreatmentSchema.nullable().optional()
2010
2315
  });
2011
- var containerStylesOverrideSchema = z16.object({
2316
+ var containerStylesOverrideSchema = z17.object({
2012
2317
  background: boxBackgroundSchema.nullable().optional(),
2013
2318
  spacing: semanticSpacingSchema.nullable().optional(),
2014
- raised: z16.boolean().nullable().optional(),
2319
+ raised: z17.boolean().nullable().optional(),
2015
2320
  rounded: boxRoundedSchema.nullable().optional(),
2016
- fullWidth: z16.boolean().nullable().optional()
2321
+ fullWidth: z17.boolean().nullable().optional()
2017
2322
  });
2018
- var cardBorderOverrideSchema = z16.object({
2019
- enabled: z16.boolean().nullable().optional(),
2020
- width: z16.enum(["none", "1", "2", "3"]).nullable().optional(),
2323
+ var cardBorderOverrideSchema = z17.object({
2324
+ enabled: z17.boolean().nullable().optional(),
2325
+ width: z17.enum(["none", "1", "2", "3"]).nullable().optional(),
2021
2326
  colorToken: themeColorTokenSchema.nullable().optional()
2022
2327
  });
2023
- var cardStylesOverrideSchema = z16.object({
2328
+ var cardStylesOverrideSchema = z17.object({
2024
2329
  background: boxBackgroundSchema.nullable().optional(),
2025
2330
  border: cardBorderOverrideSchema.nullable().optional(),
2026
2331
  spacing: semanticSpacingSchema.nullable().optional(),
2027
- raised: z16.boolean().nullable().optional(),
2332
+ raised: z17.boolean().nullable().optional(),
2028
2333
  rounded: boxRoundedSchema.nullable().optional(),
2029
- treatment: z16.enum(["accent-quote"]).nullable().optional()
2334
+ treatment: z17.enum([
2335
+ "accent-quote",
2336
+ "editorial-rule",
2337
+ "soft-panel",
2338
+ "editorial-serif-quote",
2339
+ "editorial-open",
2340
+ "color-blocked"
2341
+ ]).nullable().optional(),
2342
+ // Which site-style card variant the card adopts (emits a `.card-{id}` class).
2343
+ // 'none' is boxless. Driven by the block look via testimonialCardTreatment.
2344
+ cardVariant: boxStylesCardVariantSchema.nullable().optional()
2030
2345
  });
2031
- var blockStyleOverridesSchema = z16.object({
2346
+ var blockStyleOverridesSchema = z17.object({
2032
2347
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
2033
2348
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
2034
2349
  cardStyles: cardStylesOverrideSchema.nullable().optional()
2035
2350
  });
2036
- var blockThemeOverrideSchema = z16.object({
2037
- typography: z16.object({
2351
+ var blockThemeOverrideSchema = z17.object({
2352
+ typography: z17.object({
2038
2353
  proseLinkStyle: proseLinkStyleSchema.optional()
2039
2354
  }).optional(),
2040
2355
  styles: blockStyleOverridesSchema.optional()
2041
2356
  });
2042
- var typographyScaleSchema = z16.enum([
2357
+ var typographyScaleSchema = z17.enum([
2043
2358
  // New intuitive names
2044
2359
  "compact",
2045
2360
  // ratio 1.2 (was minorThird)
@@ -2052,9 +2367,9 @@ var typographyScaleSchema = z16.enum([
2052
2367
  "majorThird",
2053
2368
  "perfectFourth"
2054
2369
  ]);
2055
- var typographySchema = z16.object({
2370
+ var typographySchema = z17.object({
2056
2371
  body: bodyTypographyStyleSchema,
2057
- headings: z16.object({
2372
+ headings: z17.object({
2058
2373
  default: headingTypographyStyleSchema,
2059
2374
  h1: headingTypographyOverridesSchema,
2060
2375
  h2: headingTypographyOverridesSchema,
@@ -2067,41 +2382,41 @@ var typographySchema = z16.object({
2067
2382
  scale: typographyScaleSchema,
2068
2383
  proseLinkStyle: proseLinkStyleSchema.optional()
2069
2384
  });
2070
- var spaceSchema = z16.enum(["comfortable", "standard", "dense"]);
2071
- var corners = z16.enum(["square", "soft", "rounded", "pill"]);
2072
- var shadow = z16.object({
2073
- elevation: z16.enum(["none", "low", "medium", "high"]),
2074
- softness: z16.enum(["crisp", "soft", "hard"]).nullable(),
2075
- position: z16.enum(["bottom", "bottom-right"]).default("bottom")
2385
+ var spaceSchema = z17.enum(["comfortable", "standard", "dense"]);
2386
+ var corners = z17.enum(["square", "soft", "rounded", "pill"]);
2387
+ var shadow = z17.object({
2388
+ elevation: z17.enum(["none", "low", "medium", "high"]),
2389
+ softness: z17.enum(["crisp", "soft", "hard"]).nullable(),
2390
+ position: z17.enum(["bottom", "bottom-right"]).default("bottom")
2076
2391
  });
2077
- var border = z16.object({
2078
- width: z16.enum(["none", "hairline", "thin", "thick"]),
2079
- style: z16.enum(["solid", "dashed"])
2392
+ var border = z17.object({
2393
+ width: z17.enum(["none", "hairline", "thin", "thick"]),
2394
+ style: z17.enum(["solid", "dashed"])
2080
2395
  });
2081
- var motion = z16.object({
2082
- level: z16.enum(["off", "low", "medium", "high"]),
2083
- easing: z16.enum(["standard", "snappy", "gentle"]).nullable()
2396
+ var motion = z17.object({
2397
+ level: z17.enum(["off", "low", "medium", "high"]),
2398
+ easing: z17.enum(["standard", "snappy", "gentle"]).nullable()
2084
2399
  });
2085
- var buttonStyle = z16.object({
2400
+ var buttonStyle = z17.object({
2086
2401
  shape: corners
2087
2402
  // Used for --radius-control CSS variable
2088
2403
  });
2089
- var cardStyle = z16.object({
2090
- elevation: z16.enum(["none", "low", "medium", "high"]),
2091
- border: z16.enum(["none", "subtle", "defined"]),
2404
+ var cardStyle = z17.object({
2405
+ elevation: z17.enum(["none", "low", "medium", "high"]),
2406
+ border: z17.enum(["none", "subtle", "defined"]),
2092
2407
  shape: corners,
2093
- headerStyle: z16.enum(["plain", "accentBar", "subtleBg"]).nullable(),
2094
- mediaTreatment: z16.enum(["square", "rounded", "bleed"]).nullable()
2408
+ headerStyle: z17.enum(["plain", "accentBar", "subtleBg"]).nullable(),
2409
+ mediaTreatment: z17.enum(["square", "rounded", "bleed"]).nullable()
2095
2410
  });
2096
- var inputStyle = z16.object({
2411
+ var inputStyle = z17.object({
2097
2412
  shape: corners,
2098
- border: z16.enum(["subtle", "defined", "underline"]),
2099
- focus: z16.enum(["glow", "ring", "underline"]),
2100
- label: z16.enum(["inside", "above"])
2413
+ border: z17.enum(["subtle", "defined", "underline"]),
2414
+ focus: z17.enum(["glow", "ring", "underline"]),
2415
+ label: z17.enum(["inside", "above"])
2101
2416
  });
2102
- var headerVariant = z16.enum(["classic", "centered", "transparent", "floating"]);
2103
- var headerPositioning = z16.enum(["static", "sticky", "fixed"]);
2104
- var headerNavStyle = z16.enum([
2417
+ var headerVariant = z17.enum(["classic", "centered", "transparent", "floating"]);
2418
+ var headerPositioning = z17.enum(["static", "sticky", "fixed"]);
2419
+ var headerNavStyle = z17.enum([
2105
2420
  "minimal",
2106
2421
  "underline",
2107
2422
  "underline-grow",
@@ -2110,54 +2425,57 @@ var headerNavStyle = z16.enum([
2110
2425
  "frosted",
2111
2426
  "solid"
2112
2427
  ]);
2113
- var navFontWeight = z16.enum(["regular", "medium", "semibold", "bold"]);
2114
- var headerMaxWidth = z16.enum(["container", "full"]);
2115
- var headerContainerSchema = z16.object({
2116
- rounded: z16.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
2117
- border: z16.boolean().default(true),
2118
- shadow: z16.boolean().default(true),
2119
- padding: z16.enum(["sm", "md", "lg"]).default("md"),
2120
- tint: z16.string().nullable().optional(),
2121
- opacity: z16.number().min(0).max(1).default(0.12)
2428
+ var navFontWeight = z17.enum(["regular", "medium", "semibold", "bold"]);
2429
+ var headerMaxWidth = z17.enum(["container", "full"]);
2430
+ var headerContainerSchema = z17.object({
2431
+ rounded: z17.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
2432
+ border: z17.boolean().default(true),
2433
+ shadow: z17.boolean().default(true),
2434
+ padding: z17.enum(["sm", "md", "lg"]).default("md"),
2435
+ tint: z17.string().nullable().optional(),
2436
+ opacity: z17.number().min(0).max(1).default(0.12)
2122
2437
  }).optional();
2123
2438
  var headerBorderSchema = componentBorderSchema.extend({
2124
- position: z16.enum(["bottom", "top", "both", "none"]).default("bottom")
2439
+ position: z17.enum(["bottom", "top", "both", "none"]).default("bottom")
2125
2440
  }).optional();
2126
- var logoStyleSchema = z16.object({
2127
- fontFamily: z16.enum(["heading", "body"]).default("heading"),
2128
- letterSpacing: z16.enum(["normal", "wide", "wider", "widest"]).default("normal"),
2129
- gradient: z16.boolean().default(false)
2441
+ var logoStyleSchema = z17.object({
2442
+ fontFamily: z17.enum(["heading", "body"]).default("heading"),
2443
+ letterSpacing: z17.enum(["normal", "wide", "wider", "widest"]).default("normal"),
2444
+ gradient: z17.boolean().default(false),
2445
+ brandDisplay: z17.enum(brandDisplayModeValues).optional(),
2446
+ size: z17.enum(logoSizePolicyValues).optional(),
2447
+ accommodation: z17.enum(logoAccommodationPatternValues).optional()
2130
2448
  }).optional();
2131
- var headerLogoTextSchema = z16.object({
2132
- mobileWrapLines: z16.union([z16.literal(1), z16.literal(2)]).optional(),
2133
- mobileMaxWidth: z16.enum(["xs", "sm", "md"]).optional(),
2134
- hideOnShrink: z16.boolean().optional()
2449
+ var headerLogoTextSchema = z17.object({
2450
+ mobileWrapLines: z17.union([z17.literal(1), z17.literal(2)]).optional(),
2451
+ mobileMaxWidth: z17.enum(["xs", "sm", "md"]).optional(),
2452
+ hideOnShrink: z17.boolean().optional()
2135
2453
  }).optional();
2136
- var navEffectsSchema = z16.object({
2137
- underlineGradient: z16.boolean().default(false),
2138
- glow: z16.boolean().default(false),
2139
- glowColor: z16.string().optional(),
2140
- neumorphic: z16.boolean().default(false)
2454
+ var navEffectsSchema = z17.object({
2455
+ underlineGradient: z17.boolean().default(false),
2456
+ glow: z17.boolean().default(false),
2457
+ glowColor: z17.string().optional(),
2458
+ neumorphic: z17.boolean().default(false)
2141
2459
  }).optional();
2142
- var dropdownStyleSchema = z16.object({
2460
+ var dropdownStyleSchema = z17.object({
2143
2461
  // Container styling
2144
2462
  background: themeColorTokenSchema.default("surface"),
2145
2463
  textColor: themeColorTokenSchema.default("text"),
2146
2464
  borderColor: themeColorTokenSchema.nullable().default("border"),
2147
- shadow: z16.enum(["none", "sm", "md", "lg"]).default("md"),
2148
- borderRadius: z16.enum(["none", "sm", "md", "lg"]).default("md"),
2465
+ shadow: z17.enum(["none", "sm", "md", "lg"]).default("md"),
2466
+ borderRadius: z17.enum(["none", "sm", "md", "lg"]).default("md"),
2149
2467
  // Link hover states (explicit control)
2150
2468
  hoverBackground: themeColorTokenSchema.nullable().optional(),
2151
2469
  hoverTextColor: themeColorTokenSchema.nullable().optional(),
2152
2470
  // Typography
2153
- textTransform: z16.enum(["none", "uppercase", "capitalize"]).default("none"),
2154
- letterSpacing: z16.enum(["normal", "wide", "wider"]).default("normal"),
2155
- fontWeight: z16.enum(["regular", "medium", "semibold", "bold"]).optional(),
2471
+ textTransform: z17.enum(["none", "uppercase", "capitalize"]).default("none"),
2472
+ letterSpacing: z17.enum(["normal", "wide", "wider"]).default("normal"),
2473
+ fontWeight: z17.enum(["regular", "medium", "semibold", "bold"]).optional(),
2156
2474
  // optional = inherit from navWeight
2157
- textSize: z16.enum(["xs", "sm", "base", "lg"]).optional()
2475
+ textSize: z17.enum(["xs", "sm", "base", "lg"]).optional()
2158
2476
  // optional = no override (browser default)
2159
2477
  }).optional();
2160
- var headerCtaGapSchema = z16.enum([
2478
+ var headerCtaGapSchema = z17.enum([
2161
2479
  "none",
2162
2480
  "tight",
2163
2481
  "compact",
@@ -2165,7 +2483,7 @@ var headerCtaGapSchema = z16.enum([
2165
2483
  "relaxed",
2166
2484
  "spacious"
2167
2485
  ]);
2168
- var headerCtaTreatmentSchema = z16.enum([
2486
+ var headerCtaTreatmentSchema = z17.enum([
2169
2487
  "default",
2170
2488
  "primary",
2171
2489
  "secondary",
@@ -2173,22 +2491,22 @@ var headerCtaTreatmentSchema = z16.enum([
2173
2491
  "outline",
2174
2492
  "ghost"
2175
2493
  ]);
2176
- var navContainerSchema = z16.object({
2177
- type: z16.enum(["none", "pill", "glass"]).default("none"),
2178
- tint: z16.string().nullable().optional(),
2179
- opacity: z16.number().min(0).max(1).default(0.15)
2494
+ var navContainerSchema = z17.object({
2495
+ type: z17.enum(["none", "pill", "glass"]).default("none"),
2496
+ tint: z17.string().nullable().optional(),
2497
+ opacity: z17.number().min(0).max(1).default(0.15)
2180
2498
  }).default({ type: "none", tint: null, opacity: 0.15 });
2181
- var headerBackgroundSchema = z16.object({
2182
- type: z16.enum(["color", "gradient", "image"]),
2499
+ var headerBackgroundSchema = z17.object({
2500
+ type: z17.enum(["color", "gradient", "image"]),
2183
2501
  color: tokenOrCssColorValueSchema.nullable().optional(),
2184
2502
  gradient: gradientConfigSchema.nullable().optional(),
2185
2503
  image: mediaSchema.nullable().optional(),
2186
2504
  textColor: tokenOrCssColorValueSchema.nullable().optional()
2187
2505
  });
2188
- var headerSchema = z16.object({
2506
+ var headerSchema = z17.object({
2189
2507
  variant: headerVariant,
2190
2508
  positioning: headerPositioning,
2191
- shrinkOnScroll: z16.boolean(),
2509
+ shrinkOnScroll: z17.boolean(),
2192
2510
  maxWidth: headerMaxWidth,
2193
2511
  logoOverride: mediaSchema.nullable().optional(),
2194
2512
  background: headerBackgroundSchema.default({
@@ -2218,16 +2536,16 @@ var headerSchema = z16.object({
2218
2536
  // Optional theme-level CTA variant for header/nav CTA buttons.
2219
2537
  // Internal runtime bridge for the block renderer; prefer ctaTreatment in
2220
2538
  // authored Theme V2 concepts.
2221
- ctaVariant: z16.string().min(1).optional(),
2539
+ ctaVariant: z17.string().min(1).optional(),
2222
2540
  // Dropdown menu styling (nav dropdowns and mobile drawer)
2223
2541
  dropdownStyle: dropdownStyleSchema
2224
2542
  });
2225
- var footerVariant = z16.enum(["simple", "columns", "split"]);
2226
- var footerMaxWidth = z16.enum(["container", "full"]);
2227
- var footerMode = z16.enum(["default", "blocks", "default+blocks", "none"]);
2228
- var footerNavLayoutMode = z16.enum(["stack", "inline", "inline-wrap"]);
2229
- var footerNavLayoutAlign = z16.enum(["start", "center", "end", "space-between"]);
2230
- var footerSpacing = z16.enum([
2543
+ var footerVariant = z17.enum(["simple", "columns", "split"]);
2544
+ var footerMaxWidth = z17.enum(["container", "full"]);
2545
+ var footerMode = z17.enum(["default", "blocks", "default+blocks", "none"]);
2546
+ var footerNavLayoutMode = z17.enum(["stack", "inline", "inline-wrap"]);
2547
+ var footerNavLayoutAlign = z17.enum(["start", "center", "end", "space-between"]);
2548
+ var footerSpacing = z17.enum([
2231
2549
  "none",
2232
2550
  "tight",
2233
2551
  "compact",
@@ -2235,44 +2553,44 @@ var footerSpacing = z16.enum([
2235
2553
  "relaxed",
2236
2554
  "spacious"
2237
2555
  ]);
2238
- var footerLogoPlacement = z16.enum(["left", "right", "above", "below"]);
2239
- var footerLogoSize = z16.enum(["sm", "md", "lg", "xl"]);
2240
- var footerLogoMaxHeight = z16.enum(["sm", "md", "lg", "xl"]);
2241
- var footerBottomTextLinkStyleSchema = z16.object({
2556
+ var footerLogoPlacement = z17.enum(["left", "right", "above", "below"]);
2557
+ var footerLogoSize = z17.enum(["sm", "md", "lg", "xl"]);
2558
+ var footerLogoMaxHeight = z17.enum(["sm", "md", "lg", "xl"]);
2559
+ var footerBottomTextLinkStyleSchema = z17.object({
2242
2560
  colorToken: themeColorTokenSchema.optional(),
2243
2561
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
2244
2562
  decorationColorToken: themeColorTokenSchema.nullable().optional(),
2245
- underline: z16.boolean().optional()
2563
+ underline: z17.boolean().optional()
2246
2564
  });
2247
- var footerBottomBarSchema = z16.object({
2248
- enabled: z16.boolean().optional(),
2249
- fullBleed: z16.boolean().optional(),
2565
+ var footerBottomBarSchema = z17.object({
2566
+ enabled: z17.boolean().optional(),
2567
+ fullBleed: z17.boolean().optional(),
2250
2568
  background: headerBackgroundSchema.optional(),
2251
2569
  textColor: themeColorTokenSchema.nullable().optional(),
2252
- textAlign: z16.enum(["left", "center", "right"]).optional(),
2570
+ textAlign: z17.enum(["left", "center", "right"]).optional(),
2253
2571
  paddingY: footerSpacing.optional(),
2254
2572
  paddingX: footerSpacing.optional(),
2255
- borderTop: z16.object({
2573
+ borderTop: z17.object({
2256
2574
  colorToken: themeColorTokenSchema.nullable().optional(),
2257
- width: z16.enum(["none", "thin", "medium", "thick"]).optional()
2575
+ width: z17.enum(["none", "thin", "medium", "thick"]).optional()
2258
2576
  }).optional()
2259
2577
  });
2260
- var footerNavLayoutSchema = z16.object({
2578
+ var footerNavLayoutSchema = z17.object({
2261
2579
  layout: footerNavLayoutMode.optional(),
2262
2580
  align: footerNavLayoutAlign.optional(),
2263
2581
  gapX: footerSpacing.optional(),
2264
2582
  gapY: footerSpacing.optional(),
2265
- columns: z16.number().int().min(1).max(6).optional()
2583
+ columns: z17.number().int().min(1).max(6).optional()
2266
2584
  });
2267
- var footerLogoSchema = z16.object({
2268
- showLogo: z16.boolean().default(true),
2269
- showLogoText: z16.boolean().optional(),
2585
+ var footerLogoSchema = z17.object({
2586
+ showLogo: z17.boolean().default(true),
2587
+ showLogoText: z17.boolean().optional(),
2270
2588
  placement: footerLogoPlacement.optional(),
2271
2589
  size: footerLogoSize.optional(),
2272
2590
  maxHeight: footerLogoMaxHeight.optional(),
2273
- align: z16.enum(["start", "center", "end"]).optional()
2591
+ align: z17.enum(["start", "center", "end"]).optional()
2274
2592
  });
2275
- var footerSchema = z16.object({
2593
+ var footerSchema = z17.object({
2276
2594
  /**
2277
2595
  * SDK-only footer rendering mode.
2278
2596
  *
@@ -2281,7 +2599,7 @@ var footerSchema = z16.object({
2281
2599
  mode: footerMode.optional(),
2282
2600
  variant: footerVariant,
2283
2601
  maxWidth: footerMaxWidth,
2284
- showLogoText: z16.boolean().optional(),
2602
+ showLogoText: z17.boolean().optional(),
2285
2603
  background: headerBackgroundSchema.default({
2286
2604
  type: "color",
2287
2605
  color: "surface"
@@ -2299,20 +2617,20 @@ var footerSchema = z16.object({
2299
2617
  logo: footerLogoSchema.optional(),
2300
2618
  bottomBar: footerBottomBarSchema.optional()
2301
2619
  });
2302
- var containerPaddingPresetSchema = z16.enum([
2620
+ var containerPaddingPresetSchema = z17.enum([
2303
2621
  "tight",
2304
2622
  "compact",
2305
2623
  "default",
2306
2624
  "relaxed"
2307
2625
  ]);
2308
- var layoutSchema = z16.object({
2309
- containerPadding: z16.object({
2626
+ var layoutSchema = z17.object({
2627
+ containerPadding: z17.object({
2310
2628
  mobile: containerPaddingPresetSchema.optional(),
2311
2629
  tablet: containerPaddingPresetSchema.optional(),
2312
2630
  desktop: containerPaddingPresetSchema.optional()
2313
2631
  }).optional()
2314
2632
  }).optional();
2315
- var heroTypographySizeSchema = z16.enum([
2633
+ var heroTypographySizeSchema = z17.enum([
2316
2634
  "sm",
2317
2635
  "base",
2318
2636
  "lg",
@@ -2324,19 +2642,19 @@ var heroTypographySizeSchema = z16.enum([
2324
2642
  "6xl",
2325
2643
  "editorial"
2326
2644
  ]);
2327
- var heroTypographyLineHeightSchema = z16.enum([
2645
+ var heroTypographyLineHeightSchema = z17.enum([
2328
2646
  "tight",
2329
2647
  "snug",
2330
2648
  "normal",
2331
2649
  "relaxed"
2332
2650
  ]);
2333
- var heroResponsiveTypographySchema = z16.object({
2651
+ var heroResponsiveTypographySchema = z17.object({
2334
2652
  headlineSize: heroTypographySizeSchema.optional(),
2335
2653
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
2336
2654
  subheadlineSize: heroTypographySizeSchema.optional(),
2337
2655
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
2338
2656
  });
2339
- var heroTypographySchema = z16.object({
2657
+ var heroTypographySchema = z17.object({
2340
2658
  headlineSize: heroTypographySizeSchema.optional(),
2341
2659
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
2342
2660
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -2345,31 +2663,38 @@ var heroTypographySchema = z16.object({
2345
2663
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
2346
2664
  microSubheadlineSize: heroTypographySizeSchema.optional(),
2347
2665
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
2348
- responsive: z16.object({
2666
+ responsive: z17.object({
2349
2667
  tablet: heroResponsiveTypographySchema.optional(),
2350
2668
  mobile: heroResponsiveTypographySchema.optional()
2351
2669
  }).optional()
2352
2670
  });
2353
- var heroSchema = z16.object({
2671
+ var heroSchema = z17.object({
2354
2672
  typography: heroTypographySchema.optional()
2355
2673
  }).optional();
2356
- var bodyTextIntroTypographySizeSchema = z16.enum(["default", "editorial"]);
2357
- var bodyTextSchema = z16.object({
2358
- intro: z16.object({
2674
+ var bodyTextIntroTypographySizeSchema = z17.enum(["default", "editorial"]);
2675
+ var bodyTextSchema = z17.object({
2676
+ intro: z17.object({
2359
2677
  paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
2360
2678
  headingSize: bodyTextIntroTypographySizeSchema.optional()
2361
2679
  }).optional()
2362
2680
  }).optional();
2363
- var gradientsSchema = z16.object({
2364
- button: z16.string().min(1).nullable().optional(),
2365
- hero: z16.string().min(1).nullable().optional(),
2366
- background: z16.string().min(1).nullable().optional()
2681
+ var gradientsSchema = z17.object({
2682
+ button: z17.string().min(1).nullable().optional(),
2683
+ hero: z17.string().min(1).nullable().optional(),
2684
+ background: z17.string().min(1).nullable().optional()
2367
2685
  });
2368
- var themeSchema = z16.object({
2369
- name: z16.string().min(1).max(30),
2370
- description: z16.string().min(1).max(400),
2371
- rationale: z16.string().min(1).max(400),
2372
- siteStyleId: z16.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
2686
+ var testimonialQuoteTreatmentSchema = z17.object({
2687
+ style: z17.enum(["serif-display", "accent-glyph", "none"]),
2688
+ fontFamily: z17.enum(["heading", "body"]).optional(),
2689
+ scale: z17.enum(["sm", "md", "lg", "xl"]).optional(),
2690
+ colorToken: themeColorTokenSchema.optional(),
2691
+ opacity: z17.number().min(0).max(1).optional()
2692
+ });
2693
+ var themeSchema = z17.object({
2694
+ name: z17.string().min(1).max(30),
2695
+ description: z17.string().min(1).max(400),
2696
+ rationale: z17.string().min(1).max(400),
2697
+ siteStyleId: z17.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
2373
2698
  axes: axesSchema,
2374
2699
  palette: paletteSchema,
2375
2700
  typography: typographySchema,
@@ -2390,6 +2715,8 @@ var themeSchema = z16.object({
2390
2715
  // Card variant system (optional for backwards compatibility)
2391
2716
  accordions: accordionSystemSchema.optional(),
2392
2717
  // Accordion system (optional - generated if not provided)
2718
+ testimonialQuote: testimonialQuoteTreatmentSchema.optional(),
2719
+ // Testimonial quote-mark treatment (site-style-owned)
2393
2720
  inputs: inputSystemSchema.optional(),
2394
2721
  // Input system (optional - generated if not provided)
2395
2722
  inputStyle: inputStyle.optional(),
@@ -2397,15 +2724,19 @@ var themeSchema = z16.object({
2397
2724
  // Block-specific customization (Tier 3)
2398
2725
  // blockCustomVars: Per-block CSS variable overrides as bare values
2399
2726
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
2400
- blockCustomVars: z16.record(
2401
- z16.string(),
2727
+ blockCustomVars: z17.record(
2728
+ z17.string(),
2402
2729
  // block kind (matches data-block attribute)
2403
- z16.record(z16.string(), z16.string())
2730
+ z17.record(z17.string(), z17.string())
2404
2731
  // { '--var-name': 'value' }
2405
2732
  ).optional(),
2406
2733
  // Structured block-kind theme overrides (v1: typography prose-link style only)
2407
2734
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
2408
- blockOverrides: z16.record(z16.string(), blockThemeOverrideSchema).optional(),
2735
+ blockOverrides: z17.record(z17.string(), blockThemeOverrideSchema).optional(),
2736
+ // Site-wide heading decoration signature (family + colour). Set once per Look
2737
+ // and projected transiently onto eligible block headings at render time.
2738
+ // Alignment is inherited from the heading, so no placement is stored.
2739
+ headingDecoration: headingDecorationSchema.optional(),
2409
2740
  // Structured custom CSS rules
2410
2741
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
2411
2742
  customCssRules: customCssRulesSchema,
@@ -2439,11 +2770,11 @@ var themeSchema = z16.object({
2439
2770
  * }
2440
2771
  * ```
2441
2772
  */
2442
- styleGroups: z16.record(z16.string(), z16.array(z16.string())).optional()
2773
+ styleGroups: z17.record(z17.string(), z17.array(z17.string())).optional()
2443
2774
  });
2444
- var themesTurnSchema = z16.object({
2445
- message: z16.string().min(1),
2446
- themes: z16.array(themeSchema).length(3)
2775
+ var themesTurnSchema = z17.object({
2776
+ message: z17.string().min(1),
2777
+ themes: z17.array(themeSchema).length(3)
2447
2778
  });
2448
2779
 
2449
2780
  // ../theme-core/src/fonts/uploadFormat.ts
@@ -2511,26 +2842,26 @@ function generateShadowCssVars(theme) {
2511
2842
  }
2512
2843
 
2513
2844
  // ../theme-core/src/palette/variants/types.ts
2514
- import { z as z17 } from "zod";
2845
+ import { z as z18 } from "zod";
2515
2846
  function asPaletteVariantId(value) {
2516
2847
  if (value.length === 0) {
2517
2848
  throw new Error("PaletteVariantId must be a non-empty string");
2518
2849
  }
2519
2850
  return value;
2520
2851
  }
2521
- var paletteVariantIdSchema = z17.string().min(1).transform((value) => asPaletteVariantId(value));
2852
+ var paletteVariantIdSchema = z18.string().min(1).transform((value) => asPaletteVariantId(value));
2522
2853
  var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
2523
- var hexColorSchema = z17.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
2854
+ var hexColorSchema = z18.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
2524
2855
  var variantPaletteColorSchema = paletteColorSchema.extend({
2525
2856
  name: paletteTokenNameSchema
2526
2857
  });
2527
- var paletteVariantSchema = z17.object({
2858
+ var paletteVariantSchema = z18.object({
2528
2859
  id: paletteVariantIdSchema,
2529
- name: z17.string().min(1),
2530
- description: z17.string().min(1),
2860
+ name: z18.string().min(1),
2861
+ description: z18.string().min(1),
2531
2862
  tags: styleTagsSchema,
2532
- mode: z17.enum(["light", "dark"]),
2533
- colors: z17.array(variantPaletteColorSchema).min(1)
2863
+ mode: z18.enum(["light", "dark"]),
2864
+ colors: z18.array(variantPaletteColorSchema).min(1)
2534
2865
  });
2535
2866
  function definePaletteVariant(input) {
2536
2867
  return {
@@ -2542,7 +2873,7 @@ function definePaletteVariant(input) {
2542
2873
  colors: input.colors
2543
2874
  };
2544
2875
  }
2545
- var paletteOverridesSchema = z17.object({
2876
+ var paletteOverridesSchema = z18.object({
2546
2877
  primary: hexColorSchema.optional(),
2547
2878
  primaryForeground: hexColorSchema.optional(),
2548
2879
  secondary: hexColorSchema.optional(),
@@ -2783,6 +3114,28 @@ var softNaturalWatercolor = definePaletteVariant({
2783
3114
  { name: "border", hex: "#d8c9a8" }
2784
3115
  ]
2785
3116
  });
3117
+ var softNaturalLilac = definePaletteVariant({
3118
+ id: "soft-natural-lilac",
3119
+ name: "Soft Natural \u2014 Lilac",
3120
+ description: "Watercolour periwinkle-lilac primary with warm ivory grounds and a sage accent.",
3121
+ tags: { tone: "classic", energy: "calm", era: "organic" },
3122
+ mode: "light",
3123
+ colors: [
3124
+ { name: "primary", hex: "#5c68a8" },
3125
+ { name: "secondary", hex: "#8189ad" },
3126
+ { name: "accent", hex: "#75835a" },
3127
+ { name: "success", hex: "#5f7d62" },
3128
+ { name: "warning", hex: "#a8884f" },
3129
+ { name: "destructive", hex: "#a3503e" },
3130
+ { name: "background", hex: "#faf9f6" },
3131
+ { name: "surface", hex: "#ffffff" },
3132
+ { name: "surfaceAlt", hex: "#f1f0f7" },
3133
+ { name: "muted", hex: "#e9e8f2" },
3134
+ { name: "text", hex: "#262633" },
3135
+ { name: "primaryForeground", hex: "#ffffff" },
3136
+ { name: "border", hex: "#d6d5e3" }
3137
+ ]
3138
+ });
2786
3139
 
2787
3140
  // ../theme-core/src/palette/variants/warm-neutral.ts
2788
3141
  var warmNeutralClay = definePaletteVariant({
@@ -2874,6 +3227,30 @@ var warmNeutralForest = definePaletteVariant({
2874
3227
  ]
2875
3228
  });
2876
3229
 
3230
+ // ../theme-core/src/palette/variants/warm-dark.ts
3231
+ var warmDarkEmber = definePaletteVariant({
3232
+ id: "warm-dark-ember",
3233
+ name: "Warm Dark \u2014 Ember",
3234
+ description: "Deep clay-brown ground with burnt-orange accent and warm cream text.",
3235
+ tags: { tone: "bold", energy: "vibrant", era: "organic" },
3236
+ mode: "dark",
3237
+ colors: [
3238
+ { name: "primary", hex: "#ce612f" },
3239
+ { name: "secondary", hex: "#894e31" },
3240
+ { name: "accent", hex: "#ce612f" },
3241
+ { name: "success", hex: "#6f8f57" },
3242
+ { name: "warning", hex: "#c98a3c" },
3243
+ { name: "destructive", hex: "#c0492f" },
3244
+ { name: "background", hex: "#4f2415" },
3245
+ { name: "surface", hex: "#5c3320" },
3246
+ { name: "surfaceAlt", hex: "#693a25" },
3247
+ { name: "muted", hex: "#6a3d27" },
3248
+ { name: "text", hex: "#f0e1d0" },
3249
+ { name: "primaryForeground", hex: "#4f2415" },
3250
+ { name: "border", hex: "#894e31" }
3251
+ ]
3252
+ });
3253
+
2877
3254
  // ../theme-core/src/palette/variants/index.ts
2878
3255
  var paletteVariants = [
2879
3256
  // Brand-led family
@@ -2893,13 +3270,192 @@ var paletteVariants = [
2893
3270
  // Soft-natural family
2894
3271
  softNaturalSage,
2895
3272
  softNaturalStone,
2896
- softNaturalWatercolor
3273
+ softNaturalWatercolor,
3274
+ softNaturalLilac,
3275
+ // Warm-dark family (dark mode)
3276
+ warmDarkEmber
2897
3277
  ];
2898
3278
  var paletteVariantsById = new Map(
2899
3279
  paletteVariants.map((v) => [v.id, v])
2900
3280
  );
2901
3281
 
2902
3282
  // ../theme-core/src/accordions/siteStyleDefaults.ts
3283
+ var editorialDividedAccordionSystem = {
3284
+ background: null,
3285
+ spacing: "comfortable",
3286
+ corners: "square",
3287
+ border: null,
3288
+ shadow: null,
3289
+ icon: {
3290
+ style: "plus-minus",
3291
+ position: "right",
3292
+ size: "md",
3293
+ colorToken: "primary"
3294
+ },
3295
+ trigger: {
3296
+ textColorToken: "text",
3297
+ fontWeight: "regular",
3298
+ fontFamily: "heading",
3299
+ fontScale: "lg"
3300
+ },
3301
+ hover: {
3302
+ textColorToken: "primary"
3303
+ },
3304
+ openState: {
3305
+ backgroundColorToken: "surfaceAlt",
3306
+ triggerColorToken: "primary",
3307
+ accent: {
3308
+ edge: "left",
3309
+ colorToken: "primary",
3310
+ thickness: "medium"
3311
+ }
3312
+ },
3313
+ content: {
3314
+ textColorToken: "neutral-700"
3315
+ }
3316
+ };
3317
+ var quietUnderlinedAccordionSystem = {
3318
+ background: null,
3319
+ spacing: "spacious",
3320
+ corners: "square",
3321
+ border: null,
3322
+ shadow: null,
3323
+ icon: {
3324
+ style: "chevron",
3325
+ position: "right",
3326
+ size: "sm",
3327
+ colorToken: "muted"
3328
+ },
3329
+ trigger: {
3330
+ textColorToken: "text",
3331
+ fontWeight: "regular",
3332
+ fontFamily: "heading",
3333
+ fontScale: "lg"
3334
+ },
3335
+ hover: {
3336
+ textColorToken: "primary"
3337
+ },
3338
+ openState: {
3339
+ triggerColorToken: "primary"
3340
+ },
3341
+ content: {
3342
+ textColorToken: "neutral-700"
3343
+ }
3344
+ };
3345
+ var calmPanelAccordionSystem = {
3346
+ background: {
3347
+ type: "solid",
3348
+ colorToken: "surface"
3349
+ },
3350
+ spacing: "comfortable",
3351
+ corners: "soft",
3352
+ border: {
3353
+ widthClass: "border",
3354
+ colorToken: "border"
3355
+ },
3356
+ shadow: {
3357
+ elevation: "low",
3358
+ softness: "soft",
3359
+ position: "bottom"
3360
+ },
3361
+ icon: {
3362
+ style: "chevron",
3363
+ position: "right",
3364
+ size: "md",
3365
+ colorToken: "primary"
3366
+ },
3367
+ trigger: {
3368
+ textColorToken: "text",
3369
+ fontWeight: "medium",
3370
+ fontFamily: "heading",
3371
+ fontScale: "md"
3372
+ },
3373
+ hover: {
3374
+ backgroundColorToken: "primary/5",
3375
+ textColorToken: "primary"
3376
+ },
3377
+ openState: {
3378
+ backgroundColorToken: "primary/5",
3379
+ triggerColorToken: "primary"
3380
+ },
3381
+ content: {
3382
+ textColorToken: "neutral-700"
3383
+ }
3384
+ };
3385
+ var boldBorderedAccordionSystem = {
3386
+ background: {
3387
+ type: "solid",
3388
+ colorToken: "surface"
3389
+ },
3390
+ spacing: "comfortable",
3391
+ corners: "soft",
3392
+ border: {
3393
+ widthClass: "border-2",
3394
+ colorToken: "border"
3395
+ },
3396
+ shadow: null,
3397
+ icon: {
3398
+ style: "plus-minus",
3399
+ position: "right",
3400
+ size: "lg",
3401
+ colorToken: "primary"
3402
+ },
3403
+ trigger: {
3404
+ textColorToken: "text",
3405
+ fontWeight: "bold",
3406
+ fontFamily: "heading",
3407
+ fontScale: "md"
3408
+ },
3409
+ hover: {
3410
+ backgroundColorToken: "primary/10",
3411
+ textColorToken: "primary"
3412
+ },
3413
+ openState: {
3414
+ backgroundColorToken: "primary/10",
3415
+ triggerColorToken: "primary",
3416
+ accent: {
3417
+ edge: "left",
3418
+ colorToken: "primary",
3419
+ thickness: "thick"
3420
+ }
3421
+ },
3422
+ content: {
3423
+ textColorToken: "neutral-700"
3424
+ }
3425
+ };
3426
+ var warmInsetAccordionSystem = {
3427
+ background: {
3428
+ type: "solid",
3429
+ colorToken: "surfaceAlt"
3430
+ },
3431
+ spacing: "comfortable",
3432
+ corners: "rounded",
3433
+ border: null,
3434
+ shadow: null,
3435
+ icon: {
3436
+ style: "circle-plus-minus",
3437
+ position: "right",
3438
+ size: "md",
3439
+ colorToken: "primary"
3440
+ },
3441
+ trigger: {
3442
+ textColorToken: "text",
3443
+ fontWeight: "semibold",
3444
+ fontFamily: "heading",
3445
+ fontScale: "md"
3446
+ },
3447
+ hover: {
3448
+ backgroundColorToken: "primary/5",
3449
+ textColorToken: "primary"
3450
+ },
3451
+ openState: {
3452
+ backgroundColorToken: "surface",
3453
+ triggerColorToken: "primary"
3454
+ },
3455
+ content: {
3456
+ textColorToken: "neutral-700"
3457
+ }
3458
+ };
2903
3459
  var softEarthAccordionSystem = {
2904
3460
  background: {
2905
3461
  type: "solid",
@@ -2917,34 +3473,140 @@ var softEarthAccordionSystem = {
2917
3473
  },
2918
3474
  trigger: {
2919
3475
  textColorToken: "text",
2920
- fontWeight: "medium"
3476
+ fontWeight: "medium",
3477
+ fontFamily: "heading",
3478
+ fontScale: "md"
2921
3479
  },
2922
3480
  hover: {
2923
3481
  textColorToken: "primary"
2924
3482
  },
3483
+ openState: {
3484
+ triggerColorToken: "primary"
3485
+ },
2925
3486
  content: {
2926
3487
  textColorToken: "neutral-700"
2927
3488
  }
2928
3489
  };
2929
3490
 
2930
- // ../theme-core/src/site-styles/headerCtaVariants.ts
2931
- function hasButtonVariant(theme, variantId) {
2932
- return theme.buttons?.variants.some((variant) => variant.enabled && variant.id === variantId) ?? false;
2933
- }
2934
- function resolveHeaderCtaVariant(theme, treatment) {
2935
- switch (treatment) {
2936
- case "default":
2937
- return void 0;
2938
- case "primary":
2939
- return "primary";
2940
- case "secondary":
2941
- return hasButtonVariant(theme, "secondary") ? "secondary" : "primary";
2942
- case "inverted":
2943
- if (hasButtonVariant(theme, "header")) return "header";
2944
- if (hasButtonVariant(theme, "secondary")) return "secondary";
2945
- if (hasButtonVariant(theme, "outline")) return "outline";
2946
- return "primary";
2947
- case "outline":
3491
+ // ../theme-core/src/cards/siteStyleDefaults.ts
3492
+ var southWestCardSystem = {
3493
+ variants: [
3494
+ {
3495
+ id: "default",
3496
+ name: "Default",
3497
+ enabled: true,
3498
+ priority: 1,
3499
+ background: { type: "solid", colorToken: "surface" },
3500
+ foregroundToken: "text",
3501
+ spacing: "comfortable",
3502
+ corners: "soft",
3503
+ shadow: { elevation: "low", softness: "soft", position: "bottom" }
3504
+ },
3505
+ {
3506
+ id: "alternative",
3507
+ name: "Statement",
3508
+ enabled: true,
3509
+ priority: 2,
3510
+ background: { type: "solid", colorToken: "primary-700" },
3511
+ foregroundToken: "primaryForeground",
3512
+ spacing: "comfortable",
3513
+ // No shadow on the variant itself: the elevation comes from the look's
3514
+ // 'raised' item surface (rb-shadow-md = var(--shadow-md)), reproducing the
3515
+ // legacy accent-quote card's shadow exactly.
3516
+ shadow: { elevation: "none", softness: null, position: "bottom" },
3517
+ accentEdge: { edge: "left", colorToken: "secondary", width: "heavy" },
3518
+ cornerRadii: {
3519
+ topLeft: "square",
3520
+ topRight: "expressive",
3521
+ bottomLeft: "square",
3522
+ bottomRight: "square"
3523
+ }
3524
+ }
3525
+ ]
3526
+ };
3527
+ var clarityZenCardSystem = {
3528
+ variants: [
3529
+ {
3530
+ id: "default",
3531
+ name: "Default",
3532
+ enabled: true,
3533
+ priority: 1,
3534
+ background: { type: "solid", colorToken: "surface" },
3535
+ // A filled card establishes its own text colour so it stays legible on a
3536
+ // coloured section band (which sets a contrasting section-text colour).
3537
+ foregroundToken: "text",
3538
+ spacing: "comfortable",
3539
+ corners: "rounded",
3540
+ shadow: { elevation: "low", softness: "soft", position: "bottom" }
3541
+ },
3542
+ {
3543
+ id: "alternative",
3544
+ name: "Statement",
3545
+ enabled: true,
3546
+ priority: 2,
3547
+ // Themed surfaceAlt tint + a touch more elevation so an emphasised
3548
+ // section reads as a deliberate "statement" against the default card.
3549
+ background: { type: "solid", colorToken: "surfaceAlt" },
3550
+ foregroundToken: "text",
3551
+ spacing: "comfortable",
3552
+ corners: "rounded",
3553
+ shadow: { elevation: "medium", softness: "soft", position: "bottom" }
3554
+ }
3555
+ ]
3556
+ };
3557
+ var originalJoyCardSystem = {
3558
+ variants: [
3559
+ {
3560
+ id: "default",
3561
+ name: "Default",
3562
+ enabled: true,
3563
+ priority: 1,
3564
+ background: { type: "solid", colorToken: "surface" },
3565
+ foregroundToken: "text",
3566
+ spacing: "comfortable",
3567
+ corners: "rounded",
3568
+ shadow: { elevation: "none", softness: null, position: "bottom" }
3569
+ },
3570
+ {
3571
+ id: "alternative",
3572
+ name: "Statement",
3573
+ enabled: true,
3574
+ priority: 2,
3575
+ background: { type: "solid", colorToken: "primary" },
3576
+ foregroundToken: "primaryForeground",
3577
+ spacing: "comfortable",
3578
+ corners: "rounded",
3579
+ shadow: { elevation: "none", softness: null, position: "bottom" }
3580
+ }
3581
+ ]
3582
+ };
3583
+
3584
+ // ../theme-core/src/site-styles/testimonialQuotePresets.ts
3585
+ var serifDisplayQuote = {
3586
+ style: "serif-display"
3587
+ };
3588
+ var accentGlyphQuote = {
3589
+ style: "accent-glyph"
3590
+ };
3591
+
3592
+ // ../theme-core/src/site-styles/headerCtaVariants.ts
3593
+ function hasButtonVariant(theme, variantId) {
3594
+ return theme.buttons?.variants.some((variant) => variant.enabled && variant.id === variantId) ?? false;
3595
+ }
3596
+ function resolveHeaderCtaVariant(theme, treatment) {
3597
+ switch (treatment) {
3598
+ case "default":
3599
+ return void 0;
3600
+ case "primary":
3601
+ return "primary";
3602
+ case "secondary":
3603
+ return hasButtonVariant(theme, "secondary") ? "secondary" : "primary";
3604
+ case "inverted":
3605
+ if (hasButtonVariant(theme, "header")) return "header";
3606
+ if (hasButtonVariant(theme, "secondary")) return "secondary";
3607
+ if (hasButtonVariant(theme, "outline")) return "outline";
3608
+ return "primary";
3609
+ case "outline":
2948
3610
  return hasButtonVariant(theme, "outline") ? "outline" : "secondary";
2949
3611
  case "ghost":
2950
3612
  return hasButtonVariant(theme, "ghost") ? "ghost" : "secondary";
@@ -2961,6 +3623,89 @@ function asHeaderLayoutId(value) {
2961
3623
  function asHeaderStyleId(value) {
2962
3624
  return value;
2963
3625
  }
3626
+ var titleOnlyLogoAccommodation = {
3627
+ pattern: "title-only",
3628
+ supportedShapes: ["none", "horizontal", "square", "portrait", "tall"],
3629
+ supportedTextPresence: ["contains-text", "no-text", "unknown"],
3630
+ supportedDisplayModes: ["title-only"],
3631
+ size: "compact"
3632
+ };
3633
+ var inlineWordmarkLogoAccommodation = {
3634
+ pattern: "inline-wordmark",
3635
+ supportedShapes: ["horizontal"],
3636
+ supportedTextPresence: ["contains-text", "no-text", "unknown"],
3637
+ supportedDisplayModes: ["logo-only"],
3638
+ size: "standard",
3639
+ maxDensity: "detailed"
3640
+ };
3641
+ var inlineMarkWithTitleLogoAccommodation = {
3642
+ pattern: "inline-mark-with-title",
3643
+ supportedShapes: ["horizontal", "square", "portrait", "tall"],
3644
+ supportedTextPresence: ["no-text"],
3645
+ supportedDisplayModes: ["logo-plus-title"],
3646
+ size: "compact",
3647
+ maxDensity: "simple"
3648
+ };
3649
+ var logoPlateAccommodation = {
3650
+ pattern: "logo-plate",
3651
+ supportedShapes: ["square", "portrait", "tall"],
3652
+ supportedTextPresence: ["contains-text", "unknown"],
3653
+ supportedDisplayModes: ["logo-only"],
3654
+ size: "display",
3655
+ providesBacking: true
3656
+ };
3657
+ var centeredBadgeAccommodation = {
3658
+ pattern: "centered-badge",
3659
+ supportedShapes: ["square", "portrait", "tall"],
3660
+ supportedTextPresence: ["contains-text", "unknown"],
3661
+ supportedDisplayModes: ["logo-only"],
3662
+ size: "display",
3663
+ providesBacking: true
3664
+ };
3665
+ var popoutBadgeAccommodation = {
3666
+ pattern: "popout-badge",
3667
+ supportedShapes: ["square", "portrait", "tall"],
3668
+ supportedTextPresence: ["contains-text", "unknown"],
3669
+ supportedDisplayModes: ["logo-only"],
3670
+ size: "display",
3671
+ providesBacking: true
3672
+ };
3673
+ var centeredMastheadAccommodation = {
3674
+ pattern: "centered-masthead",
3675
+ supportedShapes: ["square", "portrait", "tall"],
3676
+ supportedTextPresence: ["contains-text", "unknown"],
3677
+ supportedDisplayModes: ["logo-only"],
3678
+ size: "display",
3679
+ providesBacking: true
3680
+ };
3681
+ var unbackedOverlayLogoAccommodation = {
3682
+ pattern: "inline-logo-only",
3683
+ supportedShapes: ["square"],
3684
+ supportedTextPresence: ["contains-text", "unknown"],
3685
+ supportedDisplayModes: ["logo-only"],
3686
+ size: "compact",
3687
+ providesBacking: false
3688
+ };
3689
+ var inlineClassicLogoAccommodations = [
3690
+ titleOnlyLogoAccommodation,
3691
+ inlineWordmarkLogoAccommodation,
3692
+ inlineMarkWithTitleLogoAccommodation,
3693
+ popoutBadgeAccommodation,
3694
+ logoPlateAccommodation
3695
+ ];
3696
+ var centeredLogoAccommodations = [
3697
+ titleOnlyLogoAccommodation,
3698
+ inlineWordmarkLogoAccommodation,
3699
+ inlineMarkWithTitleLogoAccommodation,
3700
+ centeredMastheadAccommodation,
3701
+ centeredBadgeAccommodation
3702
+ ];
3703
+ var overlayLogoAccommodations = [
3704
+ titleOnlyLogoAccommodation,
3705
+ inlineWordmarkLogoAccommodation,
3706
+ inlineMarkWithTitleLogoAccommodation,
3707
+ unbackedOverlayLogoAccommodation
3708
+ ];
2964
3709
  function baseHeader(theme) {
2965
3710
  const {
2966
3711
  navLinkStyle: _navLinkStyle,
@@ -2979,7 +3724,7 @@ function baseHeader(theme) {
2979
3724
  navContainer: { type: "none", tint: null, opacity: 0.15 }
2980
3725
  };
2981
3726
  }
2982
- var headerLayoutCatalog = [
3727
+ var headerLayoutCatalog = defineExactCatalog()([
2983
3728
  {
2984
3729
  id: asHeaderLayoutId("classic"),
2985
3730
  label: "Classic",
@@ -3011,11 +3756,11 @@ var headerLayoutCatalog = [
3011
3756
  maxRecommendedNavItems: 5,
3012
3757
  allowedLogoShapes: ["none", "text-only", "horizontal"]
3013
3758
  }
3014
- ];
3759
+ ]);
3015
3760
  function supportedLayouts(ids) {
3016
3761
  return ids.map(asHeaderLayoutId);
3017
3762
  }
3018
- var headerStyleCatalog = [
3763
+ var headerStyleCatalog = defineExactCatalog()([
3019
3764
  {
3020
3765
  id: asHeaderStyleId("minimal"),
3021
3766
  label: "Minimal",
@@ -3170,7 +3915,7 @@ var headerStyleCatalog = [
3170
3915
  navTypography: "heading",
3171
3916
  moods: ["calm", "editorial"]
3172
3917
  }
3173
- ];
3918
+ ]);
3174
3919
  var headerLayoutsById = new Map(
3175
3920
  headerLayoutCatalog.map((layout) => [layout.id, layout])
3176
3921
  );
@@ -3283,7 +4028,7 @@ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
3283
4028
  [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
3284
4029
  ]
3285
4030
  );
3286
- var legacyHeaderLookAliases = [
4031
+ var legacyHeaderLookAliases = defineExactCatalog()([
3287
4032
  {
3288
4033
  lookId: asHeaderLookId("clean-base"),
3289
4034
  selection: {
@@ -3340,7 +4085,7 @@ var legacyHeaderLookAliases = [
3340
4085
  styleId: asHeaderStyleId("glass")
3341
4086
  }
3342
4087
  }
3343
- ];
4088
+ ]);
3344
4089
  var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
3345
4090
  function getHeaderStyle(id) {
3346
4091
  return headerStylesById.get(id) ?? null;
@@ -3494,6 +4239,12 @@ function serifLineHeader(theme) {
3494
4239
  letterSpacing: "wide",
3495
4240
  gradient: false
3496
4241
  },
4242
+ border: {
4243
+ style: "solid",
4244
+ width: "none",
4245
+ position: "none"
4246
+ },
4247
+ shadow: { elevation: "none" },
3497
4248
  ctaTreatment: "outline",
3498
4249
  ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
3499
4250
  ctaGap: "relaxed"
@@ -3618,7 +4369,7 @@ function floatingGlassHeader(theme) {
3618
4369
  }
3619
4370
  };
3620
4371
  }
3621
- var headerLookCatalog = [
4372
+ var headerLookCatalog = defineExactCatalog()([
3622
4373
  {
3623
4374
  id: asHeaderLookId("clean-base"),
3624
4375
  label: "Clean base",
@@ -3630,6 +4381,7 @@ var headerLookCatalog = [
3630
4381
  behavior: "sticky"
3631
4382
  },
3632
4383
  openingRequirement: "none",
4384
+ logoAccommodations: inlineClassicLogoAccommodations,
3633
4385
  compile: cleanBaseHeader
3634
4386
  },
3635
4387
  {
@@ -3643,6 +4395,7 @@ var headerLookCatalog = [
3643
4395
  behavior: "sticky-shrink"
3644
4396
  },
3645
4397
  openingRequirement: "none",
4398
+ logoAccommodations: inlineClassicLogoAccommodations,
3646
4399
  compile: solidBrandHeader
3647
4400
  },
3648
4401
  {
@@ -3657,6 +4410,7 @@ var headerLookCatalog = [
3657
4410
  },
3658
4411
  openingRequirement: "none",
3659
4412
  maxRecommendedNavItems: 6,
4413
+ logoAccommodations: centeredLogoAccommodations,
3660
4414
  compile: serifLineHeader
3661
4415
  },
3662
4416
  {
@@ -3671,7 +4425,7 @@ var headerLookCatalog = [
3671
4425
  },
3672
4426
  openingRequirement: "none",
3673
4427
  maxRecommendedNavItems: 5,
3674
- allowedLogoShapes: ["none", "text-only", "horizontal", "square"],
4428
+ logoAccommodations: centeredLogoAccommodations,
3675
4429
  compile: centeredCalmHeader
3676
4430
  },
3677
4431
  {
@@ -3686,6 +4440,7 @@ var headerLookCatalog = [
3686
4440
  },
3687
4441
  openingRequirement: "none",
3688
4442
  requiresProminentCta: true,
4443
+ logoAccommodations: inlineClassicLogoAccommodations,
3689
4444
  compile: practicalUtilityHeader
3690
4445
  },
3691
4446
  {
@@ -3699,6 +4454,7 @@ var headerLookCatalog = [
3699
4454
  behavior: "normal-flow"
3700
4455
  },
3701
4456
  openingRequirement: "reserved-space-ok",
4457
+ logoAccommodations: inlineClassicLogoAccommodations,
3702
4458
  compile: minimalTransparentHeader
3703
4459
  },
3704
4460
  {
@@ -3713,7 +4469,7 @@ var headerLookCatalog = [
3713
4469
  },
3714
4470
  openingRequirement: "requires-image-hero-with-contrast-overlay",
3715
4471
  maxRecommendedNavItems: 5,
3716
- allowedLogoShapes: ["none", "text-only", "horizontal"],
4472
+ logoAccommodations: overlayLogoAccommodations,
3717
4473
  compile: transparentOverlayHeader
3718
4474
  },
3719
4475
  {
@@ -3728,10 +4484,10 @@ var headerLookCatalog = [
3728
4484
  },
3729
4485
  openingRequirement: "requires-image-hero-with-contrast-overlay",
3730
4486
  maxRecommendedNavItems: 5,
3731
- allowedLogoShapes: ["none", "text-only", "horizontal"],
4487
+ logoAccommodations: overlayLogoAccommodations,
3732
4488
  compile: floatingGlassHeader
3733
4489
  }
3734
- ];
4490
+ ]);
3735
4491
  var guaranteedFallbackHeaderLookId = asHeaderLookId("clean-base");
3736
4492
  var guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
3737
4493
  var guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
@@ -3809,12 +4565,110 @@ function brandTwoBandFooter(theme) {
3809
4565
  }
3810
4566
  };
3811
4567
  }
3812
- var footerLookCatalog = [
4568
+ function centeredCalmFooter(theme) {
4569
+ return {
4570
+ ...theme.footer,
4571
+ variant: "simple",
4572
+ maxWidth: "container",
4573
+ background: {
4574
+ type: "color",
4575
+ color: "surfaceAlt"
4576
+ },
4577
+ navStyle: "minimal",
4578
+ navWeight: "regular",
4579
+ navColor: "text",
4580
+ navLinkStyle: {
4581
+ typography: "body",
4582
+ fontWeight: "regular",
4583
+ textTransform: "none",
4584
+ italic: false,
4585
+ colorToken: "text",
4586
+ hoverColorToken: "primary",
4587
+ padding: "none",
4588
+ borderRadius: "none"
4589
+ },
4590
+ navLayout: {
4591
+ layout: "inline-wrap",
4592
+ align: "center",
4593
+ gapX: "relaxed",
4594
+ gapY: "tight"
4595
+ },
4596
+ logo: {
4597
+ showLogo: true,
4598
+ showLogoText: false,
4599
+ placement: "above",
4600
+ size: "sm",
4601
+ align: "center"
4602
+ },
4603
+ bottomBar: {
4604
+ enabled: true,
4605
+ fullBleed: false,
4606
+ textAlign: "center",
4607
+ paddingX: "default",
4608
+ paddingY: "compact",
4609
+ borderTop: {
4610
+ width: "thin"
4611
+ }
4612
+ }
4613
+ };
4614
+ }
4615
+ function editorialColumnsFooter(theme) {
4616
+ return {
4617
+ ...theme.footer,
4618
+ variant: "columns",
4619
+ maxWidth: "container",
4620
+ background: {
4621
+ type: "color",
4622
+ color: "surface"
4623
+ },
4624
+ navStyle: "minimal",
4625
+ navWeight: "regular",
4626
+ navColor: "text",
4627
+ navLinkStyle: {
4628
+ typography: "body",
4629
+ fontWeight: "regular",
4630
+ textTransform: "none",
4631
+ italic: false,
4632
+ colorToken: "text",
4633
+ hoverColorToken: "primary",
4634
+ padding: "none",
4635
+ borderRadius: "none"
4636
+ },
4637
+ logo: {
4638
+ showLogo: true,
4639
+ showLogoText: true,
4640
+ placement: "left",
4641
+ size: "sm",
4642
+ align: "start"
4643
+ },
4644
+ bottomBar: {
4645
+ enabled: true,
4646
+ fullBleed: false,
4647
+ textAlign: "center",
4648
+ paddingX: "default",
4649
+ paddingY: "compact",
4650
+ borderTop: {
4651
+ width: "thin"
4652
+ }
4653
+ }
4654
+ };
4655
+ }
4656
+ var footerLookCatalog = defineExactCatalog()([
3813
4657
  {
3814
4658
  id: asFooterLookId("footer-muted-grounding"),
3815
4659
  label: "Muted grounding footer",
3816
4660
  compile: mutedGroundingFooter
3817
4661
  },
4662
+ {
4663
+ id: asFooterLookId("footer-centered-calm"),
4664
+ label: "Centered calm footer",
4665
+ compile: centeredCalmFooter
4666
+ },
4667
+ {
4668
+ id: asFooterLookId("footer-editorial-columns"),
4669
+ label: "Editorial columns footer",
4670
+ compile: editorialColumnsFooter
4671
+ },
3818
4672
  {
3819
4673
  id: asFooterLookId("site-footer-brand-two-band"),
3820
4674
  label: "Two-band brand footer",
@@ -3822,7 +4676,7 @@ var footerLookCatalog = [
3822
4676
  allowedContentPresence: ["default-footer", "default-and-blocks"],
3823
4677
  compile: brandTwoBandFooter
3824
4678
  }
3825
- ];
4679
+ ]);
3826
4680
  var footerLooksById = new Map(
3827
4681
  footerLookCatalog.map((look) => [look.id, look])
3828
4682
  );
@@ -3844,7 +4698,7 @@ var generatedDesignOptionCatalog = {
3844
4698
  source: "generated",
3845
4699
  sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
3846
4700
  contentFrames: generatedContentFrames,
3847
- itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
4701
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial", "color-blocked"],
3848
4702
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
3849
4703
  emphases: ["low", "medium", "high"],
3850
4704
  detachedCustom: false
@@ -3853,15 +4707,18 @@ var userDesignOptionCatalog = {
3853
4707
  source: "user",
3854
4708
  sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
3855
4709
  contentFrames: userContentFrames,
3856
- itemSurfaces: [
3857
- ...generatedDesignOptionCatalog.itemSurfaces,
3858
- "inset",
3859
- "editorial"
3860
- ],
4710
+ itemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
3861
4711
  transitions: [
3862
4712
  ...generatedDesignOptionCatalog.transitions,
4713
+ "soft-fade-expansive",
3863
4714
  "wave-edge",
3864
- "angle-edge"
4715
+ "wave-edge-balanced",
4716
+ "wave-edge-gentle",
4717
+ "wave-edge-bold",
4718
+ "wave-edge-drift",
4719
+ "angle-edge",
4720
+ "angle-edge-subtle",
4721
+ "angle-edge-steep"
3865
4722
  ],
3866
4723
  emphases: generatedDesignOptionCatalog.emphases,
3867
4724
  detachedCustom: false
@@ -4042,6 +4899,29 @@ var boldDisplayTypography = {
4042
4899
  },
4043
4900
  scale: "balanced"
4044
4901
  };
4902
+ var originalJoyTypography = {
4903
+ body: {
4904
+ family: "DM Sans, system-ui, sans-serif",
4905
+ size: "md",
4906
+ weight: "regular",
4907
+ lineHeight: "relaxed",
4908
+ letterSpacing: "normal"
4909
+ },
4910
+ headings: {
4911
+ default: {
4912
+ family: "Bricolage Grotesque, system-ui, sans-serif",
4913
+ weight: "bold",
4914
+ lineHeight: "normal",
4915
+ letterSpacing: "tight",
4916
+ italic: null,
4917
+ case: null
4918
+ },
4919
+ h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
4920
+ h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
4921
+ h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
4922
+ },
4923
+ scale: "balanced"
4924
+ };
4045
4925
  var typographyPresets = [
4046
4926
  defineTypographyPreset({
4047
4927
  id: "typography-preset:modern-sans",
@@ -4128,6 +5008,32 @@ var typographyPresets = [
4128
5008
  mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
4129
5009
  }
4130
5010
  }
5011
+ }),
5012
+ defineTypographyPreset({
5013
+ id: "typography-preset:original-joy",
5014
+ name: "Original Joy",
5015
+ description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
5016
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
5017
+ recommendedFonts: {
5018
+ body: ["DM Sans", "Inter", "Manrope"],
5019
+ heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
5020
+ },
5021
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
5022
+ typography: originalJoyTypography,
5023
+ heroTypography: {
5024
+ headlineSize: "6xl",
5025
+ headlineLineHeight: "tight",
5026
+ subheadlineSize: "xl",
5027
+ subheadlineLineHeight: "normal",
5028
+ microHeadlineSize: "6xl",
5029
+ microHeadlineLineHeight: "tight",
5030
+ microSubheadlineSize: "lg",
5031
+ microSubheadlineLineHeight: "normal",
5032
+ responsive: {
5033
+ tablet: { headlineSize: "5xl" },
5034
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
5035
+ }
5036
+ }
4131
5037
  })
4132
5038
  ];
4133
5039
  var typographyPresetsById = new Map(
@@ -4250,6 +5156,10 @@ function defineCuratedSiteStyle(input) {
4250
5156
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
4251
5157
  supportedTransitions: generatedDesignOptionCatalog.transitions
4252
5158
  },
5159
+ // Decoration is opt-in per style so it stays a distinguishing feature, not
5160
+ // wallpaper. Styles that want a mark set `headingDecoration` explicitly;
5161
+ // clean/minimal styles default to none.
5162
+ headingDecoration: input.headingDecoration ?? noHeadingDecoration,
4253
5163
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
4254
5164
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
4255
5165
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
@@ -4436,6 +5346,11 @@ var curatedSiteStyles = [
4436
5346
  defineCuratedSiteStyle({
4437
5347
  id: "site-style:calm-studio",
4438
5348
  name: "Calm Studio",
5349
+ themeOverrides: {
5350
+ accordions: calmPanelAccordionSystem,
5351
+ testimonialQuote: serifDisplayQuote
5352
+ },
5353
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4439
5354
  description: "Soft, measured, and spacious for intimate appointment or class businesses.",
4440
5355
  generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
4441
5356
  tokenRecipes: {
@@ -4469,6 +5384,10 @@ var curatedSiteStyles = [
4469
5384
  defineCuratedSiteStyle({
4470
5385
  id: "site-style:clear-professional",
4471
5386
  name: "Clear Professional",
5387
+ themeOverrides: {
5388
+ accordions: calmPanelAccordionSystem,
5389
+ testimonialQuote: accentGlyphQuote
5390
+ },
4472
5391
  description: "Crisp, trustworthy, and direct for local services and consultancies.",
4473
5392
  generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
4474
5393
  tokenRecipes: {
@@ -4500,6 +5419,11 @@ var curatedSiteStyles = [
4500
5419
  defineCuratedSiteStyle({
4501
5420
  id: "site-style:warm-editorial",
4502
5421
  name: "Warm Editorial",
5422
+ themeOverrides: {
5423
+ accordions: editorialDividedAccordionSystem,
5424
+ testimonialQuote: serifDisplayQuote
5425
+ },
5426
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4503
5427
  description: "Story-led and textured for educators, makers, venues, and retreats.",
4504
5428
  generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
4505
5429
  tokenRecipes: {
@@ -4532,6 +5456,11 @@ var curatedSiteStyles = [
4532
5456
  defineCuratedSiteStyle({
4533
5457
  id: "site-style:bright-community",
4534
5458
  name: "Bright Community",
5459
+ themeOverrides: {
5460
+ accordions: warmInsetAccordionSystem,
5461
+ testimonialQuote: accentGlyphQuote
5462
+ },
5463
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4535
5464
  description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
4536
5465
  generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
4537
5466
  tokenRecipes: {
@@ -4563,6 +5492,10 @@ var curatedSiteStyles = [
4563
5492
  defineCuratedSiteStyle({
4564
5493
  id: "site-style:quiet-luxury",
4565
5494
  name: "Quiet Luxury",
5495
+ themeOverrides: {
5496
+ accordions: quietUnderlinedAccordionSystem,
5497
+ testimonialQuote: serifDisplayQuote
5498
+ },
4566
5499
  description: "Minimal, confident, and refined for premium experiences and private services.",
4567
5500
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
4568
5501
  siteCreatorSelection: {
@@ -4605,6 +5538,10 @@ var curatedSiteStyles = [
4605
5538
  defineCuratedSiteStyle({
4606
5539
  id: "site-style:practical-services",
4607
5540
  name: "Practical Services",
5541
+ themeOverrides: {
5542
+ accordions: boldBorderedAccordionSystem,
5543
+ testimonialQuote: accentGlyphQuote
5544
+ },
4608
5545
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
4609
5546
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
4610
5547
  siteCreatorSelection: { kind: "primary_goal_support" },
@@ -4645,6 +5582,11 @@ var curatedSiteStyles = [
4645
5582
  defineCuratedSiteStyle({
4646
5583
  id: "site-style:modern-wellness",
4647
5584
  name: "Modern Wellness",
5585
+ themeOverrides: {
5586
+ accordions: quietUnderlinedAccordionSystem,
5587
+ testimonialQuote: serifDisplayQuote
5588
+ },
5589
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4648
5590
  description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
4649
5591
  generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
4650
5592
  tokenRecipes: {
@@ -4676,6 +5618,10 @@ var curatedSiteStyles = [
4676
5618
  defineCuratedSiteStyle({
4677
5619
  id: "site-style:quiet-practice",
4678
5620
  name: "Quiet Practice",
5621
+ themeOverrides: {
5622
+ accordions: quietUnderlinedAccordionSystem,
5623
+ testimonialQuote: serifDisplayQuote
5624
+ },
4679
5625
  description: "Grounded, calm, and practical for small appointment-first practices.",
4680
5626
  generationBrief: "Make services, practitioner trust, preparation notes, and booking routes easy to scan. Keep the tone warm and specific, with quiet confidence rather than spa cliches or medical claims.",
4681
5627
  siteCreatorSelection: {
@@ -4721,6 +5667,7 @@ var curatedSiteStyles = [
4721
5667
  defineCuratedSiteStyle({
4722
5668
  id: "site-style:clarity-zen-blue",
4723
5669
  name: "Clarity Zen",
5670
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4724
5671
  description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
4725
5672
  generationBrief: "Use a calm, soft palette, editorial serif headings, warm grounded copy, rounded cards, calm proof sections, and clear booking routes. Keep the tone compassionate and straightforward, with professional trust rather than hard-sell wellness language.",
4726
5673
  siteCreatorSelection: {
@@ -4744,17 +5691,22 @@ var curatedSiteStyles = [
4744
5691
  },
4745
5692
  compositionBudget: balancedBudget,
4746
5693
  themeOverrides: {
5694
+ accordions: editorialDividedAccordionSystem,
5695
+ cards: clarityZenCardSystem,
5696
+ testimonialQuote: serifDisplayQuote,
4747
5697
  typography: {
4748
5698
  body: {
4749
- family: "Inter, system-ui, sans-serif",
5699
+ family: "Roboto, system-ui, sans-serif",
4750
5700
  size: "md",
4751
5701
  weight: "regular",
4752
5702
  lineHeight: "relaxed",
4753
5703
  letterSpacing: "normal"
4754
5704
  },
4755
5705
  headings: {
5706
+ // Forum ships a single 400 weight; keep every heading weight
5707
+ // 'regular' so the Google Fonts request stays valid.
4756
5708
  default: {
4757
- family: '"Cormorant Garamond", Georgia, serif',
5709
+ family: "Forum, Georgia, serif",
4758
5710
  weight: "regular",
4759
5711
  lineHeight: "normal",
4760
5712
  letterSpacing: "normal",
@@ -4770,7 +5722,7 @@ var curatedSiteStyles = [
4770
5722
  italic: null
4771
5723
  },
4772
5724
  h2: {
4773
- size: "lg",
5725
+ size: "xl",
4774
5726
  weight: "regular",
4775
5727
  lineHeight: "normal",
4776
5728
  letterSpacing: "normal",
@@ -4798,10 +5750,13 @@ var curatedSiteStyles = [
4798
5750
  },
4799
5751
  recommendedAppearancePresetIds: [
4800
5752
  "hero-split-editorial",
5753
+ "intro-portrait-bio",
4801
5754
  "intro-organic-statement",
4802
- "feature-cards-raised-rule",
5755
+ "feature-cards-soft-panels",
5756
+ "feature-cards-editorial-columns",
5757
+ "feature-cards-photo-tiles",
4803
5758
  "media-text-quiet-story",
4804
- "testimonials-brand-background-quotes",
5759
+ "testimonials-non-carded",
4805
5760
  "faq-contained-help",
4806
5761
  "contact-form-panel"
4807
5762
  ],
@@ -4811,8 +5766,9 @@ var curatedSiteStyles = [
4811
5766
  "minimal-transparent"
4812
5767
  ],
4813
5768
  recommendedFooterLookIds: [
4814
- "footer-muted-grounding",
4815
- "site-footer-brand-two-band"
5769
+ "footer-centered-calm",
5770
+ "footer-editorial-columns",
5771
+ "footer-muted-grounding"
4816
5772
  ],
4817
5773
  buttonPersonalityChoices: [
4818
5774
  buttonChoice("soft-pill"),
@@ -4820,7 +5776,7 @@ var curatedSiteStyles = [
4820
5776
  buttonChoice("editorial-link")
4821
5777
  ],
4822
5778
  paletteVariantChoices: [
4823
- paletteChoice("brand-led-cool"),
5779
+ paletteChoice("soft-natural-lilac"),
4824
5780
  paletteChoice("soft-natural-watercolor"),
4825
5781
  paletteChoice("soft-natural-stone"),
4826
5782
  paletteChoice("warm-neutral-cream")
@@ -4829,6 +5785,11 @@ var curatedSiteStyles = [
4829
5785
  defineCuratedSiteStyle({
4830
5786
  id: "site-style:personal-retreat-journal",
4831
5787
  name: "Personal Retreat Journal",
5788
+ themeOverrides: {
5789
+ accordions: editorialDividedAccordionSystem,
5790
+ testimonialQuote: serifDisplayQuote
5791
+ },
5792
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4832
5793
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
4833
5794
  generationBrief: "Center the practitioner as the guide, then make private sessions, classes, retreats, and resources feel like clear pathways. Keep retreat copy grounded and practical, with enough editorial warmth for longer reading.",
4834
5795
  siteCreatorSelection: {
@@ -4873,6 +5834,11 @@ var curatedSiteStyles = [
4873
5834
  defineCuratedSiteStyle({
4874
5835
  id: "site-style:tactile-workshop",
4875
5836
  name: "Tactile Workshop",
5837
+ themeOverrides: {
5838
+ accordions: warmInsetAccordionSystem,
5839
+ testimonialQuote: accentGlyphQuote
5840
+ },
5841
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
4876
5842
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
4877
5843
  generationBrief: "Lead with objects, materials, studio process, and practical booking detail. Keep the tone warm and direct, with useful mess, clear dates, and enough gallery rhythm to feel like a real creative studio.",
4878
5844
  siteCreatorSelection: {
@@ -4923,6 +5889,7 @@ var curatedSiteStyles = [
4923
5889
  defineCuratedSiteStyle({
4924
5890
  id: SOFT_EARTH_SITE_STYLE_ID,
4925
5891
  name: "Soft Earth",
5892
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
4926
5893
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
4927
5894
  generationBrief: "Use cream space, terracotta CTAs, olive quote bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community quotes, and an FAQ with a full-width intro above two columns of questions when content allows.",
4928
5895
  siteCreatorSelection: {
@@ -4995,7 +5962,8 @@ var curatedSiteStyles = [
4995
5962
  headingSize: "editorial"
4996
5963
  }
4997
5964
  },
4998
- accordions: softEarthAccordionSystem
5965
+ accordions: softEarthAccordionSystem,
5966
+ testimonialQuote: accentGlyphQuote
4999
5967
  },
5000
5968
  defaultBlockVariants: {
5001
5969
  "block.faq": "question-columns"
@@ -5005,7 +5973,7 @@ var curatedSiteStyles = [
5005
5973
  "intro-organic-statement",
5006
5974
  "feature-cards-raised-rule",
5007
5975
  "events-lined-panel",
5008
- "testimonials-brand-background-quotes",
5976
+ "testimonials-non-carded",
5009
5977
  "contact-form-panel"
5010
5978
  ],
5011
5979
  recommendedHeaderLookIds: [
@@ -5033,6 +6001,11 @@ var curatedSiteStyles = [
5033
6001
  defineCuratedSiteStyle({
5034
6002
  id: "site-style:bold-launch",
5035
6003
  name: "Bold Launch",
6004
+ themeOverrides: {
6005
+ accordions: boldBorderedAccordionSystem,
6006
+ testimonialQuote: accentGlyphQuote
6007
+ },
6008
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
5036
6009
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
5037
6010
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
5038
6011
  siteCreatorSelection: {
@@ -5078,6 +6051,7 @@ var curatedSiteStyles = [
5078
6051
  defineCuratedSiteStyle({
5079
6052
  id: "site-style:south-west-twerk-school",
5080
6053
  name: "South West Twerk School",
6054
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
5081
6055
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
5082
6056
  generationBrief: "Use confident rhythm, bold burgundy-and-gold accents, large editorial intro copy, strong booking routes, and dark feature sections where proof or forms need emphasis.",
5083
6057
  tokenRecipes: {
@@ -5097,6 +6071,9 @@ var curatedSiteStyles = [
5097
6071
  ],
5098
6072
  defaultTypographyPresetId: "typography-preset:bold-display",
5099
6073
  themeOverrides: {
6074
+ accordions: boldBorderedAccordionSystem,
6075
+ cards: southWestCardSystem,
6076
+ testimonialQuote: accentGlyphQuote,
5100
6077
  bodyText: {
5101
6078
  intro: {
5102
6079
  paragraphSize: "editorial",
@@ -5109,8 +6086,8 @@ var curatedSiteStyles = [
5109
6086
  "hero-brand-scrim-fixed-frame",
5110
6087
  "body-text-editorial-intro",
5111
6088
  "schedule-details-brand-depth",
5112
- "testimonials-accent-quote-cards",
5113
- "contact-form-brand-depth-card"
6089
+ "testimonials-statement-cards",
6090
+ "contact-form-panel"
5114
6091
  ],
5115
6092
  recommendedHeaderLookIds: [
5116
6093
  "brand-solid",
@@ -5133,6 +6110,74 @@ var curatedSiteStyles = [
5133
6110
  paletteChoice("brand-led-warm"),
5134
6111
  paletteChoice("high-contrast-ink")
5135
6112
  ]
6113
+ }),
6114
+ defineCuratedSiteStyle({
6115
+ id: "site-style:original-joy",
6116
+ name: "Original Joy",
6117
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
6118
+ description: "Warm, dark, and editorial: deep clay grounds, cream type, and bold burnt-orange accents for soulful community brands.",
6119
+ generationBrief: "Use a deep brown ground with cream text and burnt-orange accents, large display headings, generous spacing, organic rounded shapes, and bold colour-blocked feature sections. Lead with warmth and belonging; calls to action should feel strong but unhurried.",
6120
+ tokenRecipes: {
6121
+ palette: "brand-led",
6122
+ contrast: "maximum",
6123
+ radius: "rounded",
6124
+ shadow: "subtle",
6125
+ typography: "clean-sans",
6126
+ spacing: "airy",
6127
+ motion: "expressive"
6128
+ },
6129
+ compositionBudget: expressiveBudget,
6130
+ typographyPresetChoices: [
6131
+ typographyChoice("typography-preset:original-joy"),
6132
+ typographyChoice("typography-preset:bold-display"),
6133
+ typographyChoice("typography-preset:modern-sans")
6134
+ ],
6135
+ defaultTypographyPresetId: "typography-preset:original-joy",
6136
+ themeOverrides: {
6137
+ accordions: boldBorderedAccordionSystem,
6138
+ // Shared card system: warm rounded brown cards (event + testimonial cards
6139
+ // pick this up automatically) with a burnt-orange statement variant.
6140
+ cards: originalJoyCardSystem,
6141
+ testimonialQuote: accentGlyphQuote,
6142
+ bodyText: {
6143
+ intro: {
6144
+ paragraphSize: "editorial",
6145
+ headingSize: "editorial"
6146
+ }
6147
+ }
6148
+ },
6149
+ // Recommended block looks: the bold colour-blocked feature cards, a calm
6150
+ // band for the events spotlight, and statement testimonial cards.
6151
+ recommendedAppearancePresetIds: [
6152
+ "feature-cards-bold-colors",
6153
+ "offerings-calm-list",
6154
+ "testimonials-statement-cards"
6155
+ ],
6156
+ // Floating, transparent "Clear Split" header (no fill behind the nav links).
6157
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
6158
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
6159
+ recommendedHeaderStyleChoicesByLayout: {
6160
+ floating: [
6161
+ headerStyleChoice("minimal-surface"),
6162
+ headerStyleChoice("split-glass"),
6163
+ headerStyleChoice("glass")
6164
+ ]
6165
+ },
6166
+ // Legacy bridge only (the real curation is the explicit selection above).
6167
+ // Kept to a reserved-space, non-overlay look on purpose: the split hero
6168
+ // flows below the Clear Split header, so we must NOT trigger the immersive
6169
+ // overlay-hero promotion that looks like `floating-glass` would force.
6170
+ recommendedHeaderLookIds: ["minimal-transparent"],
6171
+ recommendedFooterLookIds: [
6172
+ "site-footer-brand-two-band",
6173
+ "footer-muted-grounding"
6174
+ ],
6175
+ buttonPersonalityChoices: [
6176
+ buttonChoice("joy-stamp"),
6177
+ buttonChoice("ink-stamp"),
6178
+ buttonChoice("showtime-pill")
6179
+ ],
6180
+ paletteVariantChoices: [paletteChoice("warm-dark-ember")]
5136
6181
  })
5137
6182
  ];
5138
6183
  var curatedSiteStylesById = new Map(
@@ -5325,9 +6370,21 @@ var NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
5325
6370
  ];
5326
6371
 
5327
6372
  // ../theme-core/src/layout/generateLayoutCss.ts
5328
- var waveTransitionMask = svgDataUrl(
6373
+ var classicWaveTransitionMask = svgDataUrl(
5329
6374
  "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>"
5330
6375
  );
6376
+ var balancedWaveTransitionMask = svgDataUrl(
6377
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V42C120 24 240 24 360 42C480 60 600 60 720 42C840 24 960 24 1080 42C1200 60 1320 60 1440 42V72H0Z' fill='white'/></svg>"
6378
+ );
6379
+ var gentleWaveTransitionMask = svgDataUrl(
6380
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V43C180 32 300 32 480 43C660 54 780 54 960 43C1140 32 1260 32 1440 43V72H0Z' fill='white'/></svg>"
6381
+ );
6382
+ var boldWaveTransitionMask = svgDataUrl(
6383
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V44C90 14 270 14 360 44C450 74 630 74 720 44C810 14 990 14 1080 44C1170 74 1350 74 1440 44V72H0Z' fill='white'/></svg>"
6384
+ );
6385
+ var driftWaveTransitionMask = svgDataUrl(
6386
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V39C115 31 205 54 340 48C505 41 610 16 760 33C920 51 1015 64 1160 44C1280 27 1375 35 1440 50V72H0Z' fill='white'/></svg>"
6387
+ );
5331
6388
  function svgDataUrl(svg) {
5332
6389
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
5333
6390
  }
@@ -5812,14 +6869,77 @@ ${root} {
5812
6869
  }
5813
6870
 
5814
6871
  // ../theme-core/src/blocks/vars/testimonials.ts
5815
- function generateTestimonialsVars({ themeId }) {
6872
+ var QUOTE_SCALE_SIZE = {
6873
+ sm: "2.5rem",
6874
+ md: "3.5rem",
6875
+ // 4.375rem == 3.5rem * 1.25, matching the legacy accent-quote mark size.
6876
+ lg: "4.375rem",
6877
+ xl: "clamp(3.5rem, 2rem + 4vw, 5.5rem)"
6878
+ };
6879
+ function resolveTestimonialQuoteVars(treatment) {
6880
+ if (!treatment) {
6881
+ return {
6882
+ size: QUOTE_SCALE_SIZE.md,
6883
+ opacity: "0.08",
6884
+ color: "rgb(var(--tb-primary))",
6885
+ font: "inherit",
6886
+ weight: "700",
6887
+ display: "block"
6888
+ };
6889
+ }
6890
+ if (treatment.style === "none") {
6891
+ return {
6892
+ size: QUOTE_SCALE_SIZE.md,
6893
+ opacity: "0",
6894
+ color: "rgb(var(--tb-primary))",
6895
+ font: "inherit",
6896
+ weight: "700",
6897
+ display: "none"
6898
+ };
6899
+ }
6900
+ const base = treatment.style === "serif-display" ? {
6901
+ fontFamily: "heading",
6902
+ scale: "xl",
6903
+ colorToken: "primary",
6904
+ opacity: 1
6905
+ } : {
6906
+ // accent-glyph
6907
+ fontFamily: "body",
6908
+ scale: "lg",
6909
+ colorToken: "secondary",
6910
+ opacity: 1
6911
+ };
6912
+ const fontFamily = treatment.fontFamily ?? base.fontFamily;
6913
+ const scale = treatment.scale ?? base.scale;
6914
+ const colorToken = treatment.colorToken ?? base.colorToken;
6915
+ const opacity = treatment.opacity ?? base.opacity;
6916
+ return {
6917
+ size: QUOTE_SCALE_SIZE[scale],
6918
+ opacity: String(opacity),
6919
+ color: rgbColorValue(colorToken),
6920
+ font: fontFamily === "heading" ? "var(--font-heading)" : "var(--font-body, inherit)",
6921
+ // Heading-font display marks render at the family's natural weight (Forum
6922
+ // ships a single 400) to avoid synthetic bold; glyph marks stay heavy.
6923
+ weight: fontFamily === "heading" ? "400" : "700",
6924
+ display: "block"
6925
+ };
6926
+ }
6927
+ function generateTestimonialsVars({
6928
+ themeId,
6929
+ theme
6930
+ }) {
5816
6931
  const root = `:where([data-theme-scope="${themeId}"]) :where([data-block="testimonials"])`;
6932
+ const quote = resolveTestimonialQuoteVars(theme.testimonialQuote);
5817
6933
  return `
5818
6934
  ${root} {
5819
6935
  --rb-testimonial-avatar-size: 3rem;
5820
6936
  --rb-testimonial-avatar-border-radius: 9999px;
5821
- --rb-testimonial-quote-size: 3.5rem;
5822
- --rb-testimonial-quote-opacity: 0.08;
6937
+ --rb-testimonial-quote-size: ${quote.size};
6938
+ --rb-testimonial-quote-opacity: ${quote.opacity};
6939
+ --rb-testimonial-quote-color: ${quote.color};
6940
+ --rb-testimonial-quote-font: ${quote.font};
6941
+ --rb-testimonial-quote-weight: ${quote.weight};
6942
+ --rb-testimonial-quote-display: ${quote.display};
5823
6943
 
5824
6944
  /* Carousel arrows (defaults: primary background + onPrimary icon) */
5825
6945
  --rb-testimonial-carousel-arrow-bg: rgb(var(--tb-primary));
@@ -7616,41 +8736,52 @@ var containerResponsiveThemeCss = `/*
7616
8736
  }
7617
8737
 
7618
8738
  .rb-container-pad-none {
7619
- padding: 0;
8739
+ --rb-card-pad: 0rem;
8740
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7620
8741
  }
7621
8742
  .rb-container-pad-compact {
7622
- padding: 1rem;
8743
+ --rb-card-pad: 1rem;
8744
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7623
8745
  }
7624
8746
  .rb-container-pad-cozy {
7625
- padding: 1.5rem;
8747
+ --rb-card-pad: 1.5rem;
8748
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7626
8749
  }
7627
8750
  .rb-container-pad-medium {
7628
- padding: 1.5rem;
8751
+ --rb-card-pad: 1.5rem;
8752
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7629
8753
  }
7630
8754
  .rb-container-pad-comfortable {
7631
- padding: 2rem;
8755
+ --rb-card-pad: 2rem;
8756
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7632
8757
  }
7633
8758
  .rb-container-pad-spacious {
7634
- padding: 2.5rem;
8759
+ --rb-card-pad: 2.5rem;
8760
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7635
8761
  }
7636
8762
 
7637
8763
  @container rb-site (min-width: 640px) {
7638
8764
 
7639
8765
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
7640
8766
  .rb-container-pad-compact {
7641
- padding: 1.5rem;
8767
+ --rb-card-pad: 1.5rem;
8768
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7642
8769
  }
7643
8770
  .rb-container-pad-cozy {
7644
- padding: 2rem;
8771
+ --rb-card-pad: 2rem;
8772
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7645
8773
  }
7646
8774
  .rb-container-pad-medium {
7647
- padding: 2rem;
8775
+ --rb-card-pad: 2rem;
8776
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7648
8777
  }
7649
8778
  .rb-container-pad-comfortable {
7650
- padding: 2.5rem;
8779
+ --rb-card-pad: 2.5rem;
8780
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7651
8781
  }
7652
8782
  .rb-container-pad-spacious {
7653
- padding: 3.5rem;
8783
+ --rb-card-pad: 3.5rem;
8784
+ padding: calc(var(--rb-card-pad) + var(--rb-opening-content-clearance, 0px)) var(--rb-card-pad) var(--rb-card-pad);
7654
8785
  }
7655
8786
  }
7656
8787
 
@@ -7825,8 +8956,32 @@ var containerResponsiveThemeCss = `/*
7825
8956
  /* Shared: Site document overlay header clearance */
7826
8957
  /* -------------------------------------------------------------------------- */
7827
8958
 
7828
- :where(.theme-scope) :where([data-site-document-overlay-content='true']) :where([data-block]):first-of-type > :where([data-slot='section']) > :where(.rb-container) {
7829
- padding-top: calc(var(--site-overlay-header-clearance, 0px) + var(--site-overlay-opening-content-extra-pad, 0px));
8959
+ :where(.theme-scope)
8960
+ :where([data-site-document-overlay-content='true'])
8961
+ :where([data-page-block-position='first'], [data-page-block-position='only'])
8962
+ > :where([data-slot='section'])
8963
+ > .rb-container {
8964
+ --rb-opening-content-clearance: calc(
8965
+ var(--site-overlay-header-clearance, 0px) +
8966
+ var(--site-overlay-opening-content-extra-pad, clamp(1rem, 2vw, 1.75rem))
8967
+ );
8968
+ }
8969
+
8970
+ :where(.theme-scope)
8971
+ :where([data-site-document-overlay-content='true'])
8972
+ :where([data-page-block-position='first'], [data-page-block-position='only'])
8973
+ > :where([data-slot='section'])
8974
+ > .rb-container:not([class*='rb-container-pad-']) {
8975
+ padding-top: var(--rb-opening-content-clearance, 0px);
8976
+ }
8977
+
8978
+ :where(.theme-scope)
8979
+ :where([data-site-document-overlay-content='true'])
8980
+ :where([data-page-block-position='first'], [data-page-block-position='only'])
8981
+ > :where([data-slot='section'])
8982
+ > .rb-container
8983
+ :where([class*='rb-container-pad-']) {
8984
+ --rb-opening-content-clearance: 0px;
7830
8985
  }
7831
8986
 
7832
8987
  /* -------------------------------------------------------------------------- */
@@ -7912,6 +9067,22 @@ var containerResponsiveThemeCss = `/*
7912
9067
  }
7913
9068
  }
7914
9069
 
9070
+ /* -------------------------------------------------------------------------- */
9071
+ /* Header: Mobile floating/glass backing */
9072
+ /* -------------------------------------------------------------------------- */
9073
+
9074
+ :where(.theme-scope) .header-variant-floating .header-mobile-bar {
9075
+ align-items: flex-start;
9076
+ margin-top: 0.75rem;
9077
+ }
9078
+
9079
+ :where(.theme-scope) .header-variant-floating .nav-mobile-toggle {
9080
+ border: 1px solid rgb(var(--tb-border) / 0.82);
9081
+ background: rgb(var(--tb-surface) / 0.96);
9082
+ color: rgb(var(--tb-text));
9083
+ box-shadow: none;
9084
+ }
9085
+
7915
9086
  /*
7916
9087
  * Theme Scope Styles
7917
9088
  *
@@ -8084,7 +9255,7 @@ var containerResponsiveThemeCss = `/*
8084
9255
 
8085
9256
  /* Neutral prose uses theme text color by default */
8086
9257
  :where(.theme-scope) .rb-prose-neutral {
8087
- color: rgb(var(--tb-text));
9258
+ color: var(--section-text-color, rgb(var(--tb-text)));
8088
9259
  }
8089
9260
 
8090
9261
  :where(.theme-scope) .rb-prose p,
@@ -8117,8 +9288,11 @@ var containerResponsiveThemeCss = `/*
8117
9288
  }
8118
9289
 
8119
9290
  :where(.theme-scope) .rb-prose a {
8120
- /* Global prose link style with theme-level overrides */
8121
- color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
9291
+ --rb-prose-effective-link-color: var(
9292
+ --section-link-color,
9293
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
9294
+ );
9295
+ color: var(--rb-prose-effective-link-color);
8122
9296
  text-decoration-line: var(--rb-prose-link-decoration-line, underline);
8123
9297
  text-decoration-style: var(--rb-prose-link-underline-style, solid);
8124
9298
  text-decoration-thickness: var(
@@ -8127,8 +9301,15 @@ var containerResponsiveThemeCss = `/*
8127
9301
  );
8128
9302
  text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
8129
9303
  text-decoration-color: var(
8130
- --rb-prose-link-decoration-color,
8131
- rgba(var(--tb-primary), 0.3)
9304
+ --section-link-decoration-color,
9305
+ var(
9306
+ --rb-prose-link-decoration-color,
9307
+ color-mix(
9308
+ in srgb,
9309
+ var(--rb-prose-effective-link-color) 35%,
9310
+ transparent
9311
+ )
9312
+ )
8132
9313
  );
8133
9314
  transition:
8134
9315
  color 150ms ease,
@@ -8138,20 +9319,20 @@ var containerResponsiveThemeCss = `/*
8138
9319
  :where(.theme-scope) .rb-prose a:hover {
8139
9320
  color: var(
8140
9321
  --rb-prose-link-hover-color,
8141
- var(--rb-prose-link-color, rgb(var(--tb-primary)))
9322
+ var(--rb-prose-effective-link-color)
8142
9323
  );
8143
9324
  text-decoration-color: var(
8144
9325
  --rb-prose-link-hover-decoration-color,
8145
9326
  var(
8146
9327
  --rb-prose-link-hover-color,
8147
- var(--rb-prose-link-color, rgb(var(--tb-primary)))
9328
+ var(--rb-prose-effective-link-color)
8148
9329
  )
8149
9330
  );
8150
9331
  }
8151
9332
 
8152
9333
  :where(.theme-scope) .rb-prose blockquote {
8153
9334
  /* Blockquotes use muted text color */
8154
- color: rgb(var(--tb-mutedText));
9335
+ color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
8155
9336
  border-left-color: rgb(var(--tb-border));
8156
9337
  }
8157
9338
 
@@ -8788,6 +9969,13 @@ var containerResponsiveThemeCss = `/*
8788
9969
  transition: padding 300ms var(--motion-ease, ease);
8789
9970
  }
8790
9971
 
9972
+ :where(.theme-scope)
9973
+ .header-variant-classic
9974
+ .rb-header-layout:has(.header-logo-accommodation-popout-badge) {
9975
+ padding-top: 0.5rem;
9976
+ padding-bottom: 0.5rem;
9977
+ }
9978
+
8791
9979
  /* Vertical variants need more breathing room
8792
9980
  Note: header-variant-* is on Section (ancestor), rb-header-layout on inner div */
8793
9981
  :where(.theme-scope) .header-variant-centered .rb-header-layout {
@@ -8848,6 +10036,85 @@ var containerResponsiveThemeCss = `/*
8848
10036
  transition: height 300ms var(--motion-ease, ease);
8849
10037
  }
8850
10038
 
10039
+ :where(.theme-scope) .header-logo-size-compact.rb-header-logo-sm {
10040
+ height: 2rem;
10041
+ }
10042
+ :where(.theme-scope) .header-logo-size-compact.rb-header-logo-lg {
10043
+ height: 2.5rem;
10044
+ }
10045
+ :where(.theme-scope) .header-logo-size-standard.rb-header-logo-sm {
10046
+ height: 2.5rem;
10047
+ }
10048
+ :where(.theme-scope) .header-logo-size-standard.rb-header-logo-lg {
10049
+ height: 3rem;
10050
+ }
10051
+ :where(.theme-scope) .header-logo-size-generous.rb-header-logo-sm {
10052
+ height: 3.5rem;
10053
+ }
10054
+ :where(.theme-scope) .header-logo-size-generous.rb-header-logo-lg {
10055
+ height: 4.5rem;
10056
+ }
10057
+ :where(.theme-scope) .header-logo-size-display.rb-header-logo-sm {
10058
+ height: 7.5rem;
10059
+ }
10060
+ :where(.theme-scope) .header-logo-size-display.rb-header-logo-lg {
10061
+ height: 8rem;
10062
+ }
10063
+
10064
+ :where(.theme-scope) .header-logo-accommodation-plate,
10065
+ :where(.theme-scope) .header-logo-accommodation-centered-badge,
10066
+ :where(.theme-scope) .header-logo-accommodation-popout-badge,
10067
+ :where(.theme-scope) .header-logo-accommodation-centered-masthead {
10068
+ border-radius: var(--radius-md, 0.5rem);
10069
+ background: var(--color-surface, #fff);
10070
+ box-shadow: var(--shadow-sm, 0 1px 2px rgb(0 0 0 / 0.08));
10071
+ padding: 0.5rem;
10072
+ transition:
10073
+ margin 300ms var(--motion-ease, ease),
10074
+ padding 300ms var(--motion-ease, ease);
10075
+ }
10076
+
10077
+ :where(.theme-scope) .header-logo-accommodation-popout-badge {
10078
+ position: relative;
10079
+ z-index: 1;
10080
+ margin-block: 0 -1.25rem;
10081
+ }
10082
+
10083
+ :where(.theme-scope)
10084
+ .header-logo-size-display.header-logo-accommodation-popout-badge {
10085
+ margin-block: 0 -4rem;
10086
+ }
10087
+
10088
+ :where(.theme-scope)
10089
+ .rb-header-shrink.header-scrolled.header-variant-classic
10090
+ .header-logo-size-display.header-logo-accommodation-plate,
10091
+ :where(.theme-scope)
10092
+ .rb-header-shrink.header-scrolled.header-variant-classic
10093
+ .header-logo-size-display.header-logo-accommodation-popout-badge,
10094
+ :where(.theme-scope)
10095
+ .rb-header-shrink.header-scrolled.header-variant-classic
10096
+ .header-logo-size-display.header-logo-accommodation-centered-masthead,
10097
+ :where(.theme-scope)
10098
+ .rb-header-shrink.header-scrolled.header-variant-centered
10099
+ .header-logo-size-display.header-logo-accommodation-centered-badge,
10100
+ :where(.theme-scope)
10101
+ .rb-header-shrink.header-scrolled.header-variant-centered
10102
+ .header-logo-size-display.header-logo-accommodation-centered-masthead {
10103
+ position: relative;
10104
+ z-index: 1;
10105
+ margin-block: 0 -2.75rem;
10106
+ }
10107
+
10108
+ :where(.theme-scope)
10109
+ .rb-header-shrink.header-scrolled.header-variant-centered
10110
+ .rb-header-layout {
10111
+ gap: 0.75rem;
10112
+ }
10113
+
10114
+ :where(.theme-scope) .header-logo-accommodation-centered-masthead {
10115
+ padding: 0.75rem 1rem;
10116
+ }
10117
+
8851
10118
  /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
8852
10119
  :where(.theme-scope) .header-logo-text {
8853
10120
  font-size: 1.125rem; /* matches rb-text-lg */
@@ -8886,13 +10153,74 @@ var containerResponsiveThemeCss = `/*
8886
10153
  :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
8887
10154
  height: 2.5rem;
8888
10155
  }
10156
+ :where(.theme-scope)
10157
+ .rb-header-shrink.header-scrolled
10158
+ .header-logo-size-generous.rb-header-logo-sm {
10159
+ height: 2.75rem;
10160
+ }
10161
+ :where(.theme-scope)
10162
+ .rb-header-shrink.header-scrolled
10163
+ .header-logo-size-generous.rb-header-logo-lg {
10164
+ height: 3.25rem;
10165
+ }
10166
+ :where(.theme-scope)
10167
+ .rb-header-shrink.header-scrolled
10168
+ .header-logo-size-display.rb-header-logo-sm,
10169
+ :where(.theme-scope)
10170
+ .rb-header-shrink.header-scrolled
10171
+ .header-logo-size-display.rb-header-logo-lg {
10172
+ height: 3.75rem;
10173
+ }
8889
10174
  :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
8890
10175
  font-size: 0.875rem;
8891
10176
  }
8892
10177
 
8893
10178
  @container rb-site (max-width: 767px) {
8894
10179
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
8895
- :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
10180
+ :where(.theme-scope) .header-logo-size-generous.rb-header-logo-sm,
10181
+ :where(.theme-scope) .header-logo-size-generous.rb-header-logo-lg {
10182
+ height: 3rem;
10183
+ }
10184
+
10185
+ :where(.theme-scope) .header-logo-size-display.rb-header-logo-sm,
10186
+ :where(.theme-scope) .header-logo-size-display.rb-header-logo-lg {
10187
+ height: 5.5rem;
10188
+ }
10189
+
10190
+ :where(.theme-scope)
10191
+ .rb-header-shrink.header-scrolled
10192
+ .header-logo-size-display.rb-header-logo-sm,
10193
+ :where(.theme-scope)
10194
+ .rb-header-shrink.header-scrolled
10195
+ .header-logo-size-display.rb-header-logo-lg {
10196
+ height: 3.5rem;
10197
+ }
10198
+
10199
+ :where(.theme-scope) .header-logo-accommodation-popout-badge {
10200
+ margin-block: 0;
10201
+ }
10202
+
10203
+ :where(.theme-scope)
10204
+ .rb-header-shrink.header-scrolled
10205
+ .header-logo-size-display.header-logo-accommodation-plate,
10206
+ :where(.theme-scope)
10207
+ .rb-header-shrink.header-scrolled
10208
+ .header-logo-size-display.header-logo-accommodation-popout-badge,
10209
+ :where(.theme-scope)
10210
+ .rb-header-shrink.header-scrolled
10211
+ .header-logo-size-display.header-logo-accommodation-centered-masthead,
10212
+ :where(.theme-scope)
10213
+ .rb-header-shrink.header-scrolled
10214
+ .header-logo-size-display.header-logo-accommodation-centered-badge,
10215
+ :where(.theme-scope)
10216
+ .rb-header-shrink.header-scrolled
10217
+ .header-logo-size-display.header-logo-accommodation-centered-masthead {
10218
+ position: relative;
10219
+ z-index: 1;
10220
+ margin-block: 0 -2.75rem;
10221
+ }
10222
+
10223
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
8896
10224
  font-size: 0.75rem;
8897
10225
  }
8898
10226
  }
@@ -12168,7 +13496,7 @@ var containerResponsiveThemeCss = `/*
12168
13496
  /* Subheadline - supporting text below headline */
12169
13497
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
12170
13498
  font-size: 1.125rem;
12171
- color: var(--section-text-color, rgb(var(--tb-text)));
13499
+ color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
12172
13500
  }
12173
13501
 
12174
13502
  @container rb-site (min-width: 640px) {
@@ -12259,7 +13587,7 @@ var containerResponsiveThemeCss = `/*
12259
13587
 
12260
13588
  /* CTA content/body text */
12261
13589
  :where(.theme-scope) :where([data-block="cta-full"]) .cta-content {
12262
- color: rgb(var(--tb-mutedText));
13590
+ color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
12263
13591
  }
12264
13592
 
12265
13593
  /* CTA button row container */
@@ -12359,7 +13687,7 @@ var containerResponsiveThemeCss = `/*
12359
13687
  /* Form intro text */
12360
13688
  :where(.theme-scope) :where([data-block="form"]) .form-copy-intro {
12361
13689
  font-size: 1rem;
12362
- color: rgb(var(--tb-text));
13690
+ color: var(--section-text-color, rgb(var(--tb-text)));
12363
13691
  }
12364
13692
 
12365
13693
  /* =============================================================================
@@ -13682,11 +15010,13 @@ var containerResponsiveThemeCss = `/*
13682
15010
  }
13683
15011
 
13684
15012
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
15013
+ display: var(--rb-testimonial-quote-display, block);
15014
+ font-family: var(--rb-testimonial-quote-font, inherit);
13685
15015
  font-size: var(--rb-testimonial-quote-size);
13686
15016
  line-height: 1;
13687
- font-weight: 700;
15017
+ font-weight: var(--rb-testimonial-quote-weight, 700);
13688
15018
  opacity: var(--rb-testimonial-quote-opacity);
13689
- color: rgb(var(--tb-primary));
15019
+ color: var(--rb-testimonial-quote-color, rgb(var(--tb-primary)));
13690
15020
  }
13691
15021
 
13692
15022
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-accent-quote .rb-testimonial-quote {
@@ -13695,6 +15025,61 @@ var containerResponsiveThemeCss = `/*
13695
15025
  opacity: 1;
13696
15026
  }
13697
15027
 
15028
+ /* Open editorial testimonial card: boxless, with a hairline rule before the
15029
+ * attribution, an accent ring on the avatar, and comfortable prose. The quote
15030
+ * mark itself is owned by the site-style quote treatment (see the
15031
+ * --rb-testimonial-quote-* vars), not by these rules.
15032
+ *
15033
+ * \`editorial-open\` is the current non-carded look; \`editorial-serif-quote\` is
15034
+ * retained for content saved before the decomposition. */
15035
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-editorial-open,
15036
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-editorial-serif-quote {
15037
+ background: transparent;
15038
+ border: 0;
15039
+ border-radius: 0;
15040
+ padding: 0.25rem clamp(0.5rem, 1.5vw, 1.5rem);
15041
+ }
15042
+
15043
+ /* styledCard always renders an inner white rb-bg-surface fill layer; a boxless
15044
+ * card must clear it so the section band shows through (otherwise: white box). */
15045
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-open > .rb-bg-surface,
15046
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-serif-quote > .rb-bg-surface {
15047
+ background: transparent;
15048
+ }
15049
+
15050
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-open .rb-prose,
15051
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-serif-quote .rb-prose {
15052
+ font-size: 1.0625rem;
15053
+ line-height: 1.7;
15054
+ }
15055
+
15056
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-open .rb-testimonial-attribution,
15057
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-serif-quote .rb-testimonial-attribution {
15058
+ margin-top: 1.25rem;
15059
+ padding-top: 1.25rem;
15060
+ border-top: 1px solid rgba(var(--tb-border), 0.75);
15061
+ }
15062
+
15063
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-open .rb-testimonial-avatar,
15064
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-serif-quote .rb-testimonial-avatar {
15065
+ box-shadow:
15066
+ 0 0 0 2px rgb(var(--tb-surface)),
15067
+ 0 0 0 4px rgba(var(--tb-primary), 0.3);
15068
+ }
15069
+
15070
+
15071
+ /* Split grid: title column + cards. On desktop the title takes one quarter and
15072
+ * the cards fill the remaining three quarters (so title + 3 cards each read as
15073
+ * a quarter). Stacks on mobile. */
15074
+ @container rb-site (min-width: 1024px) {
15075
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
15076
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-split-grid {
15077
+ grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
15078
+ align-items: start;
15079
+ }
15080
+ }
15081
+ }
15082
+
13698
15083
 
13699
15084
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
13700
15085
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -14845,7 +16230,7 @@ var containerResponsiveThemeCss = `/*
14845
16230
 
14846
16231
  :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
14847
16232
  font-size: 1rem;
14848
- color: rgb(var(--tb-text));
16233
+ color: var(--section-text-color, rgb(var(--tb-text)));
14849
16234
  opacity: 0.85;
14850
16235
  }
14851
16236
 
@@ -14893,7 +16278,7 @@ var containerResponsiveThemeCss = `/*
14893
16278
  :where(.theme-scope) .newsletter-privacy-note {
14894
16279
  margin-top: 0.75rem;
14895
16280
  font-size: 0.75rem;
14896
- color: rgb(var(--tb-muted-text));
16281
+ color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
14897
16282
  text-align: center;
14898
16283
  }
14899
16284
 
@@ -15160,10 +16545,16 @@ var containerResponsiveThemeCss = `/*
15160
16545
  rgb(var(--tb-border, 229 231 235)),
15161
16546
  rgb(var(--tb-text, 17 24 39)) 4%
15162
16547
  );
16548
+ --event-compact-secondary-text: color-mix(
16549
+ in oklab,
16550
+ rgb(var(--tb-text, 17 24 39)),
16551
+ rgb(var(--tb-background, 255 255 255)) 28%
16552
+ );
15163
16553
 
15164
16554
  width: min(100%, 92rem);
15165
16555
  margin-inline: auto;
15166
16556
  overflow: hidden;
16557
+ container: event-compact-list / inline-size;
15167
16558
  border: 1px solid var(--event-compact-divider-color);
15168
16559
  border-radius: 1rem;
15169
16560
  background: rgb(var(--tb-background, 255 255 255));
@@ -15180,10 +16571,10 @@ var containerResponsiveThemeCss = `/*
15180
16571
 
15181
16572
  :where(.theme-scope) .event-compact-row {
15182
16573
  display: grid;
15183
- grid-template-columns: clamp(5.5rem, 8vw, 8rem) minmax(0, 1fr) clamp(15rem, 24vw, 21rem);
16574
+ grid-template-columns: clamp(4.5rem, 6vw, 6.25rem) minmax(0, 1fr);
15184
16575
  align-items: center;
15185
- min-height: 8.75rem;
15186
- padding: 1.55rem clamp(1.5rem, 3vw, 2.6rem);
16576
+ min-height: 6rem;
16577
+ padding: 1rem clamp(1.25rem, 2.6vw, 2.25rem);
15187
16578
  border-bottom: 1px solid var(--event-compact-divider-color);
15188
16579
  transition: background-color 150ms ease;
15189
16580
  }
@@ -15200,13 +16591,21 @@ var containerResponsiveThemeCss = `/*
15200
16591
  display: grid;
15201
16592
  grid-template-rows: 1rem minmax(2.7rem, auto) 1rem;
15202
16593
  place-items: center;
15203
- gap: 0.35rem;
16594
+ gap: 0;
15204
16595
  min-width: 0;
15205
- padding-right: clamp(1rem, 2vw, 1.75rem);
16596
+ padding-right: clamp(0.8rem, 1.6vw, 1.35rem);
15206
16597
  text-align: center;
15207
16598
  text-decoration: none;
15208
16599
  }
15209
16600
 
16601
+ :where(.theme-scope) .event-compact-row-body {
16602
+ min-width: 0;
16603
+ display: flex;
16604
+ align-items: center;
16605
+ height: 100%;
16606
+ border-left: 1px solid var(--event-compact-divider-color);
16607
+ }
16608
+
15210
16609
  :where(.theme-scope) .event-compact-row-date-weekday,
15211
16610
  :where(.theme-scope) .event-compact-row-date-month {
15212
16611
  display: grid;
@@ -15222,10 +16621,10 @@ var containerResponsiveThemeCss = `/*
15222
16621
  :where(.theme-scope) .event-compact-row-date-day {
15223
16622
  display: grid;
15224
16623
  place-items: center;
15225
- min-block-size: clamp(2.7rem, 4.5vw, 3.7rem);
16624
+ min-block-size: clamp(2rem, 3vw, 2.6rem);
15226
16625
  color: rgb(var(--tb-text, 17 24 39));
15227
16626
  font-family: var(--font-heading, var(--font-body, inherit));
15228
- font-size: clamp(2.3rem, 4.2vw, 3.35rem);
16627
+ font-size: clamp(1.7rem, 1.35rem + 1.1vw, 2.35rem);
15229
16628
  font-weight: 400;
15230
16629
  line-height: 1;
15231
16630
  }
@@ -15233,21 +16632,21 @@ var containerResponsiveThemeCss = `/*
15233
16632
  :where(.theme-scope) .event-compact-row-content {
15234
16633
  min-width: 0;
15235
16634
  display: flex;
16635
+ flex: 1 1 18rem;
15236
16636
  flex-direction: column;
15237
- gap: 1rem;
16637
+ gap: 0.625rem;
15238
16638
  height: 100%;
15239
16639
  justify-content: center;
15240
- padding-inline: clamp(1.4rem, 3vw, 3.2rem);
15241
- border-left: 1px solid var(--event-compact-divider-color);
16640
+ padding-inline: clamp(1rem, 2.4vw, 2.4rem);
15242
16641
  }
15243
16642
 
15244
16643
  :where(.theme-scope) .event-compact-row-title {
15245
16644
  margin: 0;
15246
16645
  color: rgb(var(--tb-text, 17 24 39));
15247
16646
  font-family: var(--font-heading, var(--font-body, inherit));
15248
- font-size: clamp(1.55rem, 2.6vw, 2.4rem);
16647
+ font-size: clamp(1.05rem, 1rem + 0.35vw, 1.3rem);
15249
16648
  font-weight: 400;
15250
- line-height: 1.05;
16649
+ line-height: 1.2;
15251
16650
  overflow: hidden;
15252
16651
  text-overflow: ellipsis;
15253
16652
  white-space: nowrap;
@@ -15258,8 +16657,8 @@ var containerResponsiveThemeCss = `/*
15258
16657
  align-items: center;
15259
16658
  gap: 0.9rem;
15260
16659
  min-width: 0;
15261
- color: rgb(var(--tb-text, 17 24 39));
15262
- font-size: clamp(0.9375rem, 1.4vw, 1.0625rem);
16660
+ color: var(--event-compact-secondary-text);
16661
+ font-size: 0.875rem;
15263
16662
  line-height: 1.35;
15264
16663
  }
15265
16664
 
@@ -15292,16 +16691,17 @@ var containerResponsiveThemeCss = `/*
15292
16691
  }
15293
16692
 
15294
16693
  :where(.theme-scope) .event-compact-row-price {
15295
- color: rgb(var(--tb-secondary, var(--tb-primary, 0 0 0)));
15296
- font-weight: 600;
16694
+ color: inherit;
16695
+ font-weight: inherit;
15297
16696
  }
15298
16697
 
15299
16698
  :where(.theme-scope) .event-compact-row-action {
15300
16699
  display: grid;
16700
+ flex: 0 1 clamp(14rem, 22vw, 19rem);
15301
16701
  align-content: center;
15302
- gap: 1rem;
16702
+ gap: 0.75rem;
15303
16703
  height: 100%;
15304
- padding-left: clamp(1.5rem, 3vw, 3.2rem);
16704
+ padding-left: clamp(1.1rem, 2.4vw, 2.4rem);
15305
16705
  border-left: 1px solid var(--event-compact-divider-color);
15306
16706
  }
15307
16707
 
@@ -15309,8 +16709,8 @@ var containerResponsiveThemeCss = `/*
15309
16709
  display: inline-flex;
15310
16710
  align-items: center;
15311
16711
  gap: 0.65rem;
15312
- color: rgb(var(--tb-text, 17 24 39));
15313
- font-size: clamp(0.9375rem, 1.45vw, 1.0625rem);
16712
+ color: var(--event-compact-secondary-text);
16713
+ font-size: 0.875rem;
15314
16714
  line-height: 1.3;
15315
16715
  white-space: nowrap;
15316
16716
  }
@@ -15321,6 +16721,10 @@ var containerResponsiveThemeCss = `/*
15321
16721
  flex-shrink: 0;
15322
16722
  }
15323
16723
 
16724
+ :where(.theme-scope) .event-compact-row-action-price {
16725
+ display: none;
16726
+ }
16727
+
15324
16728
  :where(.theme-scope) .event-compact-row-status {
15325
16729
  color: rgb(var(--tb-muted, var(--tb-text, 17 24 39)));
15326
16730
  font-weight: 500;
@@ -15349,54 +16753,215 @@ var containerResponsiveThemeCss = `/*
15349
16753
  }
15350
16754
 
15351
16755
  :where(.theme-scope) .event-compact-row {
15352
- grid-template-columns: 4.75rem minmax(0, 1fr);
16756
+ grid-template-columns: 4.25rem minmax(0, 1fr);
15353
16757
  min-height: 0;
15354
- padding: 1.25rem;
15355
- row-gap: 1.1rem;
16758
+ padding: 1rem;
16759
+ row-gap: 0.85rem;
15356
16760
  }
15357
16761
 
15358
16762
  :where(.theme-scope) .event-compact-row-date {
15359
- padding-right: 0.9rem;
16763
+ align-self: start;
16764
+ grid-row: 1;
16765
+ padding-right: 0.75rem;
16766
+ }
16767
+
16768
+ :where(.theme-scope) .event-compact-row-body {
16769
+ flex-direction: column;
16770
+ align-items: stretch;
16771
+ gap: 0.85rem;
16772
+ height: auto;
16773
+ padding-left: 0.9rem;
15360
16774
  }
15361
16775
 
15362
16776
  :where(.theme-scope) .event-compact-row-date-day {
15363
- font-size: 2.35rem;
16777
+ font-size: 1.65rem;
15364
16778
  }
15365
16779
 
15366
16780
  :where(.theme-scope) .event-compact-row-content {
15367
- gap: 0.75rem;
15368
- padding-left: 1.1rem;
15369
- padding-right: 0;
16781
+ flex: none;
16782
+ gap: 0.625rem;
16783
+ height: auto;
16784
+ padding-inline: 0;
15370
16785
  }
15371
16786
 
15372
16787
  :where(.theme-scope) .event-compact-row-title {
15373
- font-size: clamp(1.35rem, 8vw, 1.9rem);
16788
+ font-size: 1.15rem;
16789
+ overflow: visible;
16790
+ text-overflow: clip;
15374
16791
  white-space: normal;
16792
+ overflow-wrap: break-word;
16793
+ }
16794
+
16795
+ :where(.theme-scope) .event-compact-row-venue {
16796
+ max-width: 100%;
16797
+ }
16798
+
16799
+ :where(.theme-scope) .event-compact-row-venue svg {
16800
+ flex-shrink: 0;
15375
16801
  }
15376
16802
 
15377
16803
  :where(.theme-scope) .event-compact-row-meta {
16804
+ flex-direction: column;
16805
+ align-items: flex-start;
15378
16806
  flex-wrap: wrap;
15379
- gap: 0.5rem 0.8rem;
16807
+ gap: 0.35rem;
16808
+ }
16809
+
16810
+ :where(.theme-scope) .event-compact-row-meta .event-compact-row-price {
16811
+ display: none;
16812
+ }
16813
+
16814
+ :where(.theme-scope) .event-compact-row-teacher::before,
16815
+ :where(.theme-scope) .event-compact-row-price::before {
16816
+ content: none;
15380
16817
  }
15381
16818
 
15382
16819
  :where(.theme-scope) .event-compact-row-action {
15383
- grid-column: 1 / -1;
16820
+ flex: none;
15384
16821
  grid-template-columns: minmax(0, 1fr);
15385
- gap: 0.85rem;
16822
+ gap: 0.7rem;
16823
+ height: auto;
16824
+ width: 100%;
15386
16825
  padding-left: 0;
15387
- padding-top: 1rem;
15388
- border-left: none;
15389
- border-top: 1px solid var(--event-compact-divider-color);
16826
+ padding-top: 0;
16827
+ border-left: 0;
16828
+ border-top: 0;
15390
16829
  }
15391
16830
 
15392
16831
  :where(.theme-scope) .event-compact-row-datetime {
16832
+ display: flex;
16833
+ flex-wrap: wrap;
15393
16834
  white-space: normal;
15394
16835
  }
15395
16836
 
16837
+ :where(.theme-scope) .event-compact-row-action-price {
16838
+ display: inline-flex;
16839
+ align-items: center;
16840
+ gap: 0.55rem;
16841
+ }
16842
+
16843
+ :where(.theme-scope) .event-compact-row-action-price::before {
16844
+ content: "\\00b7";
16845
+ }
16846
+
15396
16847
  :where(.theme-scope) .event-compact-row-cta {
15397
- width: 100%;
16848
+ width: min(100%, 12rem);
16849
+ min-height: 2.65rem;
16850
+ justify-content: space-between;
16851
+ gap: 0.65rem;
16852
+ padding-inline: 1rem;
15398
16853
  }
16854
+
16855
+ :where(.theme-scope) .event-compact-row-cta span {
16856
+ min-width: 0;
16857
+ }
16858
+ }
15399
16859
  }
16860
+
16861
+ @container event-compact-list (max-width: 48rem) {
16862
+ :where(.theme-scope) .event-compact-row {
16863
+ grid-template-columns: 4.25rem minmax(0, 1fr);
16864
+ min-height: 0;
16865
+ padding: 1rem;
16866
+ row-gap: 0.85rem;
16867
+ }
16868
+
16869
+ :where(.theme-scope) .event-compact-row-date {
16870
+ align-self: start;
16871
+ grid-row: 1;
16872
+ padding-right: 0.75rem;
16873
+ }
16874
+
16875
+ :where(.theme-scope) .event-compact-row-body {
16876
+ flex-direction: column;
16877
+ align-items: stretch;
16878
+ gap: 0.85rem;
16879
+ height: auto;
16880
+ padding-left: 0.9rem;
16881
+ }
16882
+
16883
+ :where(.theme-scope) .event-compact-row-date-day {
16884
+ font-size: 1.65rem;
16885
+ }
16886
+
16887
+ :where(.theme-scope) .event-compact-row-content {
16888
+ flex: none;
16889
+ gap: 0.625rem;
16890
+ height: auto;
16891
+ padding-inline: 0;
16892
+ }
16893
+
16894
+ :where(.theme-scope) .event-compact-row-title {
16895
+ font-size: 1.15rem;
16896
+ overflow: visible;
16897
+ text-overflow: clip;
16898
+ white-space: normal;
16899
+ overflow-wrap: break-word;
16900
+ }
16901
+
16902
+ :where(.theme-scope) .event-compact-row-venue {
16903
+ max-width: 100%;
16904
+ }
16905
+
16906
+ :where(.theme-scope) .event-compact-row-venue svg {
16907
+ flex-shrink: 0;
16908
+ }
16909
+
16910
+ :where(.theme-scope) .event-compact-row-meta {
16911
+ flex-direction: column;
16912
+ align-items: flex-start;
16913
+ flex-wrap: wrap;
16914
+ gap: 0.35rem;
16915
+ }
16916
+
16917
+ :where(.theme-scope) .event-compact-row-meta .event-compact-row-price {
16918
+ display: none;
16919
+ }
16920
+
16921
+ :where(.theme-scope) .event-compact-row-teacher::before,
16922
+ :where(.theme-scope) .event-compact-row-price::before {
16923
+ content: none;
16924
+ }
16925
+
16926
+ :where(.theme-scope) .event-compact-row-action {
16927
+ flex: none;
16928
+ grid-template-columns: minmax(0, 1fr);
16929
+ gap: 0.7rem;
16930
+ height: auto;
16931
+ width: 100%;
16932
+ padding-left: 0;
16933
+ padding-top: 0;
16934
+ border-left: 0;
16935
+ border-top: 0;
16936
+ }
16937
+
16938
+ :where(.theme-scope) .event-compact-row-datetime {
16939
+ display: flex;
16940
+ flex-wrap: wrap;
16941
+ white-space: normal;
16942
+ }
16943
+
16944
+ :where(.theme-scope) .event-compact-row-action-price {
16945
+ display: inline-flex;
16946
+ align-items: center;
16947
+ gap: 0.55rem;
16948
+ }
16949
+
16950
+ :where(.theme-scope) .event-compact-row-action-price::before {
16951
+ content: "\\00b7";
16952
+ }
16953
+
16954
+ :where(.theme-scope) .event-compact-row-cta {
16955
+ width: min(100%, 12rem);
16956
+ min-height: 2.65rem;
16957
+ justify-content: space-between;
16958
+ gap: 0.65rem;
16959
+ padding-inline: 1rem;
16960
+ }
16961
+
16962
+ :where(.theme-scope) .event-compact-row-cta span {
16963
+ min-width: 0;
16964
+ }
15400
16965
  }
15401
16966
 
15402
16967
  :where(.theme-scope) .section-state__callout {
@@ -15450,19 +17015,31 @@ var containerResponsiveThemeCss = `/*
15450
17015
  * =============================================================================
15451
17016
  */
15452
17017
 
15453
- :where(.theme-scope) .rb-heading-decoration {
15454
- display: block;
15455
- flex: 0 0 auto;
15456
- pointer-events: none;
17018
+ /*
17019
+ * The mark sits inside a full-width block row so it inherits the heading group's
17020
+ * \`text-align\`: a centred heading centres the mark, a left-aligned heading keeps
17021
+ * it at the start. The heading stacks are flexbox, where \`text-align\` positions
17022
+ * inline content but not flex items \u2014 so the row (a stretched block flex item)
17023
+ * is what carries the alignment, and the inline-block mark follows it. Alignment
17024
+ * is never configured directly; it follows the heading.
17025
+ */
17026
+ :where(.theme-scope) .rb-heading-decoration-group {
17027
+ display: flex;
17028
+ flex-direction: column;
17029
+ gap: 0;
15457
17030
  }
15458
17031
 
15459
- :where(.theme-scope) .rb-heading-decoration-placement-after-heading {
17032
+ :where(.theme-scope) .rb-heading-decoration-row {
17033
+ display: block;
17034
+ width: 100%;
15460
17035
  margin-top: 0.35rem;
17036
+ line-height: 0;
17037
+ pointer-events: none;
15461
17038
  }
15462
17039
 
15463
- :where(.theme-scope) .rb-heading-decoration-placement-under-centered-heading {
15464
- margin-left: auto;
15465
- margin-right: auto;
17040
+ :where(.theme-scope) .rb-heading-decoration {
17041
+ display: inline-block;
17042
+ vertical-align: top;
15466
17043
  }
15467
17044
 
15468
17045
  :where(.theme-scope) .rb-heading-decoration-organic-squiggle {
@@ -15558,6 +17135,227 @@ var containerResponsiveThemeCss = `/*
15558
17135
  :where(.theme-scope) .rb-feature-card-icon-zone--plain .rb-feature-card-icon {
15559
17136
  width: 1.5rem;
15560
17137
  height: 1.5rem;
17138
+ }
17139
+
17140
+ /* --- Card marker mode (icons / numbers / none) -----------------------------
17141
+ *
17142
+ * The icon zone and the number zone both sit in the DOM; the grid's
17143
+ * \`data-card-marker\` attribute decides which shows. The default (legacy
17144
+ * content with no attribute) shows icons and hides the number zone.
17145
+ */
17146
+ :where(.theme-scope) .rb-feature-card-number-zone {
17147
+ display: none; /* shown only in numbers mode */
17148
+ align-items: center;
17149
+ justify-content: center;
17150
+ flex: 0 0 auto;
17151
+ width: 2.5rem;
17152
+ height: 2.5rem;
17153
+ margin-bottom: 0.125rem;
17154
+ border-radius: var(--rb-block-radius, 0.75rem);
17155
+ background-color: rgb(var(--tb-primary) / 10%);
17156
+ color: rgb(var(--tb-primary));
17157
+ counter-increment: rb-feature-card-number;
17158
+ }
17159
+ :where(.theme-scope) .rb-feature-card-number-zone::before {
17160
+ content: counter(rb-feature-card-number, decimal-leading-zero);
17161
+ font-weight: 700;
17162
+ font-size: 0.95rem;
17163
+ line-height: 1;
17164
+ }
17165
+
17166
+ :where(.theme-scope) .rb-feature-cards-grid {
17167
+ counter-reset: rb-feature-card-number;
17168
+ }
17169
+
17170
+ :where(.theme-scope) [data-card-marker="numbers"] .rb-feature-card-number-zone {
17171
+ display: inline-flex;
17172
+ }
17173
+ :where(.theme-scope) [data-card-marker="numbers"] .rb-feature-card-icon-zone {
17174
+ display: none;
17175
+ }
17176
+ :where(.theme-scope) [data-card-marker="none"] .rb-feature-card-icon-zone,
17177
+ :where(.theme-scope) [data-card-marker="none"] .rb-feature-card-number-zone {
17178
+ display: none;
17179
+ }
17180
+
17181
+ /* =============================================================================
17182
+ * Shared: Card treatments
17183
+ *
17184
+ * Visual treatments referenced from \`_cardStyles.treatment\` (see
17185
+ * cardStylesOverrideSchema). Class names are emitted by the boxStyles
17186
+ * transform in @riverbankcms/blocks.
17187
+ *
17188
+ * Also contains feature-card media/padding behaviour shared by all looks:
17189
+ * - card images bleed to the card edges (flush photo tops)
17190
+ * - card-level padding replaces the content stack's fallback padding so the
17191
+ * two never stack up
17192
+ * ============================================================================= */
17193
+
17194
+ /* --- Feature card media + padding behaviour (all looks) -------------------- */
17195
+
17196
+ /*
17197
+ * When a look gives the card real padding (rb-container-pad-*), the image
17198
+ * bleeds to the card edges and the inner content stack drops its fallback
17199
+ * padding so insets don't double up.
17200
+ */
17201
+ :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-media {
17202
+ width: calc(100% + 2 * var(--rb-card-pad, 0rem));
17203
+ max-width: none;
17204
+ margin: calc(-1 * var(--rb-card-pad, 0rem)) calc(-1 * var(--rb-card-pad, 0rem)) 0;
17205
+ }
17206
+
17207
+ :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-media + .rb-feature-card-content {
17208
+ margin-top: 1.4rem;
17209
+ }
17210
+
17211
+ :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-content {
17212
+ padding: 0;
17213
+ }
17214
+
17215
+ /* --- Soft panel ------------------------------------------------------------ */
17216
+
17217
+ :where(.theme-scope) .rb-card-treatment-soft-panel {
17218
+ transition: transform 250ms ease, box-shadow 250ms ease;
17219
+ }
17220
+
17221
+ @media (prefers-reduced-motion: no-preference) {
17222
+ :where(.theme-scope) .rb-card-treatment-soft-panel:hover {
17223
+ transform: translateY(-3px);
17224
+ box-shadow: 0 0.875rem 1.875rem rgba(var(--tb-shadow, 0 0 0), 0.1);
17225
+ }
17226
+ }
17227
+
17228
+ :where(.theme-scope) .rb-card-treatment-soft-panel .cta-row .button-ghost {
17229
+ padding-inline: 0;
17230
+ }
17231
+
17232
+ /* --- Editorial rule --------------------------------------------------------- */
17233
+
17234
+ /*
17235
+ * Boxless open column: no background, no border box, a short brand rule
17236
+ * sitting on a full-width hairline at the top of the column.
17237
+ */
17238
+ :where(.theme-scope) .rb-card-treatment-editorial-rule {
17239
+ margin-top: 1rem;
17240
+ border-top: 1px solid
17241
+ color-mix(in oklab, rgb(var(--tb-border, 229 231 235)), transparent 25%);
17242
+ }
17243
+
17244
+ :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-bg-surface {
17245
+ background: transparent;
17246
+ }
17247
+
17248
+ :where(.theme-scope) .rb-card-treatment-editorial-rule::before {
17249
+ content: "";
17250
+ position: absolute;
17251
+ top: 0;
17252
+ left: 0;
17253
+ width: 2.75rem;
17254
+ height: 2px;
17255
+ background: rgb(var(--tb-primary, 0 0 0));
17256
+ }
17257
+
17258
+ :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-feature-card-media {
17259
+ margin-top: 1.6rem;
17260
+ border-radius: calc(var(--rb-block-radius, 0.75rem) * 0.5);
17261
+ }
17262
+
17263
+ :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-feature-card-content {
17264
+ padding: 1.6rem 0 0.25rem;
17265
+ }
17266
+
17267
+ :where(.theme-scope) .rb-card-treatment-editorial-rule .cta-row .button-ghost {
17268
+ padding-inline: 0;
17269
+ }
17270
+
17271
+ /* --- Colour-blocked --------------------------------------------------------- */
17272
+
17273
+ /*
17274
+ * Bold, flat cards that each take a different palette colour by position,
17275
+ * cycled across the grid, with a staggered vertical offset on wider screens.
17276
+ * The background layer (\`.rb-bg-surface\`) is recoloured per card; the card's
17277
+ * text colour is set to the matching on-colour so content stays readable.
17278
+ */
17279
+ :where(.theme-scope) .rb-card-treatment-color-blocked {
17280
+ box-shadow: none;
17281
+ }
17282
+
17283
+ /* Per-card colour cycle. The \`on*\` colours are always derived by the palette
17284
+ * (expandPalette emits onSurface/onSecondary/onPrimary), so no fallback. */
17285
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 1) > .rb-bg-surface {
17286
+ background: rgb(var(--tb-surface));
17287
+ }
17288
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 1) {
17289
+ color: rgb(var(--tb-onSurface));
17290
+ }
17291
+
17292
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 2) > .rb-bg-surface {
17293
+ background: rgb(var(--tb-secondary));
17294
+ }
17295
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 2) {
17296
+ color: rgb(var(--tb-onSecondary));
17297
+ }
17298
+
17299
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 3) > .rb-bg-surface {
17300
+ background: rgb(var(--tb-primary));
17301
+ }
17302
+ :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 3) {
17303
+ color: rgb(var(--tb-onPrimary));
17304
+ }
17305
+
17306
+ /* Body copy carries an inline muted colour from the block; force it to the
17307
+ * card's on-colour so it reads on every block (inline style needs !important). */
17308
+ :where(.theme-scope) .rb-card-treatment-color-blocked .rb-feature-card-body {
17309
+ color: inherit !important;
17310
+ opacity: 0.9;
17311
+ }
17312
+
17313
+ /* The number marker defaults to the brand accent, which collides with the
17314
+ * primary-coloured card in the cycle. On colour-blocked cards use the card's
17315
+ * own on-colour (the palette guarantees it's legible on that background) and a
17316
+ * faint tint of it for the badge, so the number always contrasts. */
17317
+ :where(.theme-scope) .rb-card-treatment-color-blocked .rb-feature-card-number-zone {
17318
+ color: inherit;
17319
+ background-color: color-mix(in oklab, currentColor, transparent 88%);
17320
+ }
17321
+
17322
+ /* Staggered offset: drop the middle column on wider screens. Scoped to a 3-up
17323
+ * grid (\`.rb-grid-cols-3\`) so 2-/4-column grids don't get a misaligned stagger;
17324
+ * the colour cycle still reads as a diagonal at any column count. */
17325
+ @container rb-site (min-width: 768px) {
17326
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
17327
+ :where(.theme-scope) .rb-grid-cols-3 .rb-card-treatment-color-blocked:nth-child(3n + 2) {
17328
+ margin-top: 2.75rem;
17329
+ /* Override the card's \`h-full\` so the grid's stretch shrinks the card by the
17330
+ * margin (a genuinely shorter card) instead of keeping full height and
17331
+ * overflowing the section, which clips the rounded bottom corners. */
17332
+ height: auto;
17333
+ }
17334
+ }
17335
+ }
17336
+
17337
+ :where(.theme-scope) [data-block="intro"][data-block-look="intro-portrait-bio"][data-block-variant="media-copy"] .rb-intro-media-wrap {
17338
+ max-width: min(100%, 24rem);
17339
+ margin-inline: auto;
17340
+ }
17341
+
17342
+ :where(.theme-scope) [data-block="intro"][data-block-look="intro-portrait-bio"][data-block-variant="media-copy"] .rb-intro-media {
17343
+ aspect-ratio: 1 / 1 !important;
17344
+ border-radius: 9999px;
17345
+ }
17346
+
17347
+ :where(.theme-scope) [data-block="intro"][data-block-look="intro-editorial-statement"] .rb-intro-title {
17348
+ font-size: clamp(2rem, 1.56rem + 1.4vw, 3rem);
17349
+ line-height: 1.14;
17350
+ }
17351
+
17352
+ :where(.theme-scope) [data-block="intro"][data-block-look="intro-editorial-statement"] .rb-intro-copy {
17353
+ gap: var(--rb-space-5, 1.25rem);
17354
+ }
17355
+
17356
+ :where(.theme-scope) [data-block="intro"][data-block-look="intro-editorial-statement"] .rb-intro-copy .rb-prose {
17357
+ font-size: clamp(1.125rem, 1.02rem + 0.35vw, 1.375rem);
17358
+ line-height: 1.65;
15561
17359
  }`;
15562
17360
 
15563
17361
  // ../theme-core/src/ThemeScopeCore.tsx
@@ -15752,7 +17550,7 @@ var SITE_CHROME_VISIBLE_HEADER_SELECTOR = `[${SITE_CHROME_VISIBLE_HEADER_ATTR}="
15752
17550
  import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
15753
17551
 
15754
17552
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
15755
- import { z as z18 } from "zod";
17553
+ import { z as z19 } from "zod";
15756
17554
 
15757
17555
  // ../theme-core/src/inputs/core.ts
15758
17556
  var CORNER_RADIUS_MAP4 = {
@@ -15945,33 +17743,33 @@ var CSS_DECLARATION_PROPERTY_PATTERN = /^(?:-[a-zA-Z][a-zA-Z0-9-]*|[a-zA-Z][a-zA
15945
17743
  var UNSAFE_CSS_MARKUP_PATTERN = /[{}<>]|<\/|<script/i;
15946
17744
  var EXTERNAL_URL_PATTERN = /url\s*\(\s*['"]?(?:https?:|\/\/)/i;
15947
17745
  var JAVASCRIPT_URL_PATTERN2 = /javascript\s*:/i;
15948
- var themeBridgeConfigSchema = z18.object({
15949
- tokens: z18.record(z18.string(), z18.string()),
15950
- typography: z18.object({
15951
- headingFamily: z18.string().optional(),
15952
- bodyFamily: z18.string().optional(),
15953
- headingWeight: z18.number().optional(),
15954
- bodyWeight: z18.number().optional()
17746
+ var themeBridgeConfigSchema = z19.object({
17747
+ tokens: z19.record(z19.string(), z19.string()),
17748
+ typography: z19.object({
17749
+ headingFamily: z19.string().optional(),
17750
+ bodyFamily: z19.string().optional(),
17751
+ headingWeight: z19.number().optional(),
17752
+ bodyWeight: z19.number().optional()
15955
17753
  }).optional(),
15956
- spacing: z18.enum(["comfortable", "standard", "dense"]).optional(),
15957
- corners: z18.enum(["square", "soft", "rounded", "pill"]).optional(),
15958
- shadows: z18.enum(["none", "low", "medium", "high"]).optional(),
15959
- components: z18.object({
15960
- buttons: z18.union([
15961
- z18.boolean(),
15962
- z18.object({
15963
- variants: z18.array(z18.enum(["primary", "secondary", "outline", "ghost"])).optional()
17754
+ spacing: z19.enum(["comfortable", "standard", "dense"]).optional(),
17755
+ corners: z19.enum(["square", "soft", "rounded", "pill"]).optional(),
17756
+ shadows: z19.enum(["none", "low", "medium", "high"]).optional(),
17757
+ components: z19.object({
17758
+ buttons: z19.union([
17759
+ z19.boolean(),
17760
+ z19.object({
17761
+ variants: z19.array(z19.enum(["primary", "secondary", "outline", "ghost"])).optional()
15964
17762
  })
15965
17763
  ]).optional(),
15966
- cards: z18.union([
15967
- z18.boolean(),
15968
- z18.object({
15969
- variants: z18.array(z18.enum(["default", "elevated", "outlined"])).optional()
17764
+ cards: z19.union([
17765
+ z19.boolean(),
17766
+ z19.object({
17767
+ variants: z19.array(z19.enum(["default", "elevated", "outlined"])).optional()
15970
17768
  })
15971
17769
  ]).optional(),
15972
- inputs: z18.boolean().optional()
17770
+ inputs: z19.boolean().optional()
15973
17771
  }).optional(),
15974
- overrides: z18.record(z18.string(), z18.string()).optional()
17772
+ overrides: z19.record(z19.string(), z19.string()).optional()
15975
17773
  }).passthrough();
15976
17774
  var TOKEN_ALIASES = [
15977
17775
  { source: "text", target: "foreground" },