@riverbankcms/sdk 0.152.0 → 0.154.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 (303) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{EventEmbeddedCheckoutStep-DVQXWFm6.mjs → EventEmbeddedCheckoutStep-ba9npQtb.mjs} +1 -1
  3. package/dist/{PreviewEditorSidebar-Dr4NJi3Q.mjs → PreviewEditorSidebar-C7FiaxlF.mjs} +194 -22
  4. package/dist/{PreviewEditorUI-DSZXQbyh.mjs → PreviewEditorUI-DFst50q1.mjs} +20 -44
  5. package/dist/{SdkPreviewModeRuntime-Dl4GyMc3.mjs → SdkPreviewModeRuntime-BUNV_YHZ.mjs} +266 -143
  6. package/dist/{SiteChromeCustomizeContext-DgBe-FlM.mjs → SiteChromeCustomizeContext-DEj7qppF.mjs} +5340 -4329
  7. package/dist/{ThemedButton-B8ViBnLK.mjs → ThemedButton-C8kzu0hY.mjs} +610 -116
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +416 -182
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +3270 -8214
  10. package/dist/_dts/api/src/billing.d.ts +2 -0
  11. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +78 -0
  12. package/dist/_dts/api/src/bookingAdjustments.d.ts +3 -2
  13. package/dist/_dts/api/src/bookingOperations.d.ts +7 -2
  14. package/dist/_dts/api/src/bookingPeople.d.ts +19 -0
  15. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +8 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +4 -106
  17. package/dist/_dts/api/src/bookings.d.ts +2 -3
  18. package/dist/_dts/api/src/communications.d.ts +19 -5
  19. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  20. package/dist/_dts/api/src/endpoints.d.ts +88 -43
  21. package/dist/_dts/api/src/index.d.ts +4 -2
  22. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
  23. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  24. package/dist/_dts/api/src/moneyPayments.d.ts +116 -0
  25. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +2 -0
  26. package/dist/_dts/api/src/sdk-event-upsert.d.ts +2 -2
  27. package/dist/_dts/api/src/sdkThemeWire.d.ts +348 -1537
  28. package/dist/_dts/api/src/shared-contracts.d.ts +10 -0
  29. package/dist/_dts/api/src/siteInfrastructure.d.ts +2 -1
  30. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +18 -0
  31. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +17 -16
  32. package/dist/_dts/api/src/siteSettings.d.ts +1 -0
  33. package/dist/_dts/api/src/stripeConnectSetup.d.ts +90 -0
  34. package/dist/_dts/api/src/teamMembers.d.ts +2 -27
  35. package/dist/_dts/api/src/types.d.ts +11 -31
  36. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -4
  37. package/dist/_dts/block-form/src/widgets/RepeaterField/components/layoutGridDomain.d.ts +3 -13
  38. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  39. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -0
  40. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -96
  41. package/dist/_dts/blocks/src/index.d.ts +1 -0
  42. package/dist/_dts/blocks/src/lib/media.d.ts +1 -0
  43. package/dist/_dts/blocks/src/lib/picsum.d.ts +2 -2
  44. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -1
  45. package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +1 -1
  46. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +4 -1
  47. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +1 -0
  48. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
  49. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/blocks/events/shared/fields.d.ts +0 -4
  51. package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +0 -1
  52. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +276 -884
  53. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +2 -2
  54. package/dist/_dts/blocks/src/system/blocks/form.d.ts +10 -0
  55. package/dist/_dts/blocks/src/system/blocks/image-gallery/fields.d.ts +1 -0
  56. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +6 -1
  57. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  58. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +92 -90
  59. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +12 -0
  60. package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +4 -7
  61. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime-layout.d.ts +23 -0
  62. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime-profile.d.ts +20 -0
  63. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +17 -16
  64. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +1 -1
  65. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  66. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +6 -6
  67. package/dist/_dts/blocks/src/system/customize/facets.d.ts +75 -9
  68. package/dist/_dts/blocks/src/system/fields/backgroundContent.d.ts +377 -1
  69. package/dist/_dts/blocks/src/system/helpers/backgroundMedia.d.ts +6 -2
  70. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -3
  71. package/dist/_dts/blocks/src/system/layout/repeaterGrid.d.ts +12 -5
  72. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +3 -3
  73. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +48 -48
  74. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -0
  75. package/dist/_dts/blocks/src/system/node/fragments/index.d.ts +1 -0
  76. package/dist/_dts/blocks/src/system/node/fragments/lookSlot.d.ts +1 -1
  77. package/dist/_dts/blocks/src/system/node/fragments/responsiveTwoColumn.d.ts +3 -1
  78. package/dist/_dts/blocks/src/system/node/fragments/sectionHead.d.ts +15 -0
  79. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +18 -198
  80. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +9 -99
  81. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingFlowController.d.ts +1 -1
  82. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +2 -0
  83. package/dist/_dts/blocks/src/system/runtime/lookSurfaces.d.ts +18 -6
  84. package/dist/_dts/blocks/src/system/runtime/nodes/ImageResolveContext.d.ts +1 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +50 -202
  86. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +2 -1
  87. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +28 -1
  88. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/lookPresentation.d.ts +12 -6
  89. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +1 -1
  90. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +1 -1
  91. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CardListItem.d.ts +1 -1
  92. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +289 -885
  93. package/dist/_dts/blocks/src/system/runtime/nodes/file-download.d.ts +3 -2
  94. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -2
  95. package/dist/_dts/blocks/src/system/runtime/nodes/form.interactive.d.ts +11 -79
  96. package/dist/_dts/blocks/src/system/runtime/nodes/form.parts.d.ts +7 -0
  97. package/dist/_dts/blocks/src/system/runtime/nodes/form.server.d.ts +2 -13
  98. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +22 -90
  99. package/dist/_dts/blocks/src/system/runtime/nodes/mediaContext.d.ts +69 -0
  100. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +8 -72
  101. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +6 -6
  102. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +3 -2
  103. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  104. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -0
  105. package/dist/_dts/blocks/src/system/transforms/registry/footerArrangement.d.ts +6 -0
  106. package/dist/_dts/blocks/src/system/transforms/registry/index.d.ts +1 -0
  107. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +0 -11
  108. package/dist/_dts/blocks/src/system/transforms/registry/links.d.ts +3 -3
  109. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -10
  110. package/dist/_dts/commerce/src/purchase/orderConfirmationPlanning.d.ts +1 -0
  111. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +5 -2
  112. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +1 -1
  113. package/dist/_dts/content-editor/src/FooterNavigationLayoutControl.d.ts +6 -3
  114. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +1 -1
  115. package/dist/_dts/content-editor/src/footerComposer.d.ts +2 -1
  116. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +3 -1
  117. package/dist/_dts/content-editor/src/footerNavigationLayoutState.d.ts +56 -0
  118. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +2 -1
  119. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +3 -4
  120. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +11 -8
  121. package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
  122. package/dist/_dts/core/src/booking-refunds.d.ts +2 -0
  123. package/dist/_dts/core/src/date-display.d.ts +85 -0
  124. package/dist/_dts/core/src/date-time-formatter.d.ts +2 -0
  125. package/dist/_dts/core/src/footer-arrangement.d.ts +8 -1
  126. package/dist/_dts/core/src/footer-composition-types.d.ts +6 -1
  127. package/dist/_dts/core/src/footer-composition.d.ts +1 -1
  128. package/dist/_dts/core/src/footer-navigation-layout.d.ts +3 -0
  129. package/dist/_dts/core/src/index.d.ts +2 -0
  130. package/dist/_dts/core/src/mailing-list-runtime.d.ts +2 -2
  131. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +9 -1
  132. package/dist/_dts/core/src/mailing-list-setup.d.ts +12 -1
  133. package/dist/_dts/core/src/mailing-list-submission.d.ts +7 -2
  134. package/dist/_dts/core/src/mailing-list-targeting.d.ts +9 -1
  135. package/dist/_dts/core/src/public-profile.d.ts +3 -1
  136. package/dist/_dts/core/src/scheduled-date-time.d.ts +69 -0
  137. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +105 -13
  138. package/dist/_dts/db/src/schemas/forms.d.ts +16 -16
  139. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  140. package/dist/_dts/editor-blocks/src/media/MediaField.d.ts +2 -2
  141. package/dist/_dts/editor-blocks/src/media/admitEditorMediaField.d.ts +4 -0
  142. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +2 -2
  143. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +6 -0
  144. package/dist/_dts/media-core/src/contentMediaAudit.d.ts +3 -2
  145. package/dist/_dts/media-core/src/index.d.ts +4 -0
  146. package/dist/_dts/media-core/src/media.d.ts +406 -0
  147. package/dist/_dts/media-core/src/mediaIdentifierSchema.d.ts +3 -0
  148. package/dist/_dts/media-core/src/mediaKinds.d.ts +2 -0
  149. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +13 -1
  150. package/dist/_dts/media-core/src/mediaWriteNormalizer.d.ts +2 -6
  151. package/dist/_dts/media-core/src/portableMediaReferences.d.ts +8 -21
  152. package/dist/_dts/media-core/src/renderableMediaAsset.d.ts +28 -14
  153. package/dist/_dts/media-core/src/renderableMediaAssetAdmission.d.ts +15 -0
  154. package/dist/_dts/media-editor/src/CropDialog.d.ts +6 -3
  155. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -1
  156. package/dist/_dts/media-editor/src/MediaPreview.d.ts +3 -3
  157. package/dist/_dts/media-editor/src/cropEditorSource.d.ts +5 -7
  158. package/dist/_dts/media-editor/src/editorMediaState.d.ts +29 -0
  159. package/dist/_dts/media-editor/src/mediaSelection.d.ts +1 -2
  160. package/dist/_dts/media-editor/src/runtimeMediaAssetState.d.ts +4 -5
  161. package/dist/_dts/media-editor/src/types.d.ts +1 -1
  162. package/dist/_dts/media-editor/src/utils.d.ts +0 -1
  163. package/dist/_dts/media-react/src/components/cropChangePolicy.d.ts +4 -1
  164. package/dist/_dts/media-react/src/components/cropGeometry.d.ts +1 -0
  165. package/dist/_dts/media-react/src/components/useImageCropperController.d.ts +1 -0
  166. package/dist/_dts/preview-next/src/client/blocks/ArrangementBlockToolbar.d.ts +2 -1
  167. package/dist/_dts/preview-next/src/client/blocks/BlockBackgroundChooser.d.ts +2 -1
  168. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeSelectedMedia.d.ts +11 -12
  169. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  170. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  171. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  172. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +27 -5
  173. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +2 -0
  174. package/dist/_dts/preview-next/src/client/preview/useConfirmedPreferenceRecord.d.ts +12 -0
  175. package/dist/_dts/preview-next/src/client/preview/usePersistedFooterPreferences.d.ts +26 -0
  176. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +40 -2
  177. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  178. package/dist/_dts/sdk/src/contracts/content.d.ts +2 -45
  179. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  180. package/dist/_dts/sdk/src/contracts/rendering.d.ts +3 -3
  181. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -46
  182. package/dist/_dts/sdk/src/date-time/index.d.ts +2 -68
  183. package/dist/_dts/sdk/src/index.d.ts +1 -0
  184. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  185. package/dist/_dts/sdk/src/rendering/image.d.ts +5 -5
  186. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -1
  187. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -1
  188. package/dist/_dts/sdk/src/rendering/link.d.ts +3 -7
  189. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +2 -4
  190. package/dist/_dts/sdk/src/version.d.ts +1 -1
  191. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  192. package/dist/_dts/theme-core/src/boxBackgroundSchema.d.ts +397 -26
  193. package/dist/_dts/theme-core/src/buttons/buttonColourContract.d.ts +2 -0
  194. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +2 -0
  195. package/dist/_dts/theme-core/src/buttons/styles/recipes/lanternRecipes.d.ts +60 -0
  196. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +57 -0
  197. package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +10 -1
  198. package/dist/_dts/theme-core/src/buttons/types.d.ts +378 -66
  199. package/dist/_dts/theme-core/src/buttons/typography.d.ts +24 -0
  200. package/dist/_dts/theme-core/src/cards/types.d.ts +42 -42
  201. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +1 -1
  202. package/dist/_dts/theme-core/src/footer/generateFooterCss.d.ts +4 -1
  203. package/dist/_dts/theme-core/src/footer/mode.d.ts +2 -11
  204. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  205. package/dist/_dts/theme-core/src/inputs/types.d.ts +3 -3
  206. package/dist/_dts/theme-core/src/lib/media.d.ts +2 -616
  207. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +495 -2766
  208. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
  209. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +1 -1
  210. package/dist/_dts/theme-core/src/schema.d.ts +838 -3369
  211. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +23 -7
  212. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  213. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +4 -6
  214. package/dist/_dts/theme-core/src/site-styles/compileFooterAgainstRow.d.ts +121 -0
  215. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -0
  216. package/dist/_dts/theme-core/src/site-styles/footerLookDefaults.d.ts +45 -0
  217. package/dist/_dts/theme-core/src/site-styles/footerLookRecipe.d.ts +50 -0
  218. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +9 -35
  219. package/dist/_dts/theme-core/src/site-styles/footerPreferences.d.ts +29 -0
  220. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +2 -3
  221. package/dist/_dts/theme-core/src/site-styles/index.d.ts +4 -0
  222. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +2 -2
  223. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  224. package/dist/_dts/theme-core/src/site-styles/runtimeBackgroundResolution.d.ts +9 -9
  225. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +8 -0
  226. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  227. package/dist/_dts/theme-core/src/site-styles/themeParity.d.ts +1 -1
  228. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +2 -2
  229. package/dist/_dts/theme-core/src/styles/skinTokens.d.ts +2 -2
  230. package/dist/_dts/theme-core/src/typography/schema.d.ts +2 -2
  231. package/dist/_dts/ui/src/card.d.ts +1 -1
  232. package/dist/client/{BookingMailingListNote-CBuMKN0w.mjs → BookingMailingListNote-CNoSqFtf.mjs} +2 -2
  233. package/dist/client/{CardListItem-Dc9XTXhB.mjs → CardListItem-BkTkqBkh.mjs} +5 -4
  234. package/dist/client/{CheckboxChoice-CIqx_o0E.mjs → CheckboxChoice-CHJpsty4.mjs} +1 -1
  235. package/dist/client/{DemoBookingPortalAccess-D3VQ_kLj.mjs → DemoBookingPortalAccess-C7KQKFNt.mjs} +2 -2
  236. package/dist/client/{EventCombined.client-BHGEKise.mjs → EventCombined.client-BgeYMjHJ.mjs} +5 -6
  237. package/dist/client/{EventEmbeddedCheckoutStep-Bo1Cm23R.mjs → EventEmbeddedCheckoutStep-BTc_lTkM.mjs} +2 -2
  238. package/dist/client/{EventListing.client-D5OQgVPr.mjs → EventListing.client-ChRs9Hl2.mjs} +2 -2
  239. package/dist/client/{LeafletStaticMap-CLL5cWrr.mjs → LeafletStaticMap-C_dNQgd0.mjs} +1 -1
  240. package/dist/client/{RichText-BoDmnopf.mjs → RichText-BI9bzbjo.mjs} +106 -60
  241. package/dist/client/{ThemedButton-Ciltp0IK.mjs → ThemedButton-wl3Z3wkH.mjs} +1 -2
  242. package/dist/client/{accordion-DOkRS64-.mjs → accordion-6Yz8Wd83.mjs} +1 -1
  243. package/dist/client/{bookingForm-wlMVwo9h.mjs → bookingForm-i_pKIGiY.mjs} +42 -15
  244. package/dist/client/bookings.mjs +118357 -22833
  245. package/dist/client/{carousel-CGWk-Z0u.mjs → carousel-DNqd_PjC.mjs} +2 -2
  246. package/dist/client/{carousel.client-kX5mN1Eg.mjs → carousel.client-BUgjPbb6.mjs} +1 -1
  247. package/dist/client/{cart-OBBPlaH4.mjs → cart-D8OBHuF4.mjs} +3 -3
  248. package/dist/client/{checkout-Bmw2WjQX.mjs → checkout-F3-9IGLU.mjs} +3 -3
  249. package/dist/client/client.mjs +20785 -19238
  250. package/dist/client/{context-BI77UFAn.mjs → context-Dg4ZrxDD.mjs} +1 -1
  251. package/dist/client/{eventCalendar-qkej2Edn.mjs → eventCalendar-BUc7YIBM.mjs} +8 -9
  252. package/dist/client/{eventCombined-DApKHvat.mjs → eventCombined-BwfShk2a.mjs} +4 -4
  253. package/dist/client/{eventDetails-BQyUDPH0.mjs → eventDetails-BMOVC3go.mjs} +3 -3
  254. package/dist/client/{eventListing-CeAnshlZ.mjs → eventListing-BwE9PM-t.mjs} +4 -4
  255. package/dist/client/{eventRegistration-C3A3NyBO.mjs → eventRegistration-CCWPYDc7.mjs} +10 -10
  256. package/dist/client/{form-DW8rU7jO.mjs → form-CXFr0Gd5.mjs} +115 -52
  257. package/dist/client/{headerSection-CkIhsoNm.mjs → headerSection-BX8qw8kH.mjs} +3 -3
  258. package/dist/client/hooks.mjs +17908 -16797
  259. package/dist/client/{locationMap-D4O8wbli.mjs → locationMap-B3La71m0.mjs} +3 -4
  260. package/dist/client/{media-C5K_0xPd.mjs → media-B1Cbv721.mjs} +183 -362
  261. package/dist/client/mediaContext-CwbbimYB.mjs +135 -0
  262. package/dist/client/{newsletterForm-B7IxSPuz.mjs → newsletterForm-DnGyR0x7.mjs} +51 -15
  263. package/dist/client/{productDetail-Bqxpwy5N.mjs → productDetail-BVgTqvkb.mjs} +3 -3
  264. package/dist/client/{productList-u9Lz8V15.mjs → productList-CcO7kUQw.mjs} +3 -3
  265. package/dist/client/{propsDecoder-Bf1jucUp.mjs → propsDecoder-B1OeWavE.mjs} +2193 -374
  266. package/dist/client/renderableMediaAssetAdmission-CHkXYDC_.mjs +143 -0
  267. package/dist/client/rendering/client.mjs +22424 -21488
  268. package/dist/client/rendering/islands.mjs +20 -23
  269. package/dist/client/rendering.mjs +21025 -19413
  270. package/dist/client/{routeIslandApiConfig-BgP-aPMl.mjs → routeIslandApiConfig-Dl4vglJm.mjs} +1 -1
  271. package/dist/client/{shop-B_eykR-_.mjs → shop-P72nX5Fs.mjs} +7 -7
  272. package/dist/client/{shop-commerce-CT0APkFV.mjs → shop-commerce-Bt7uraDx.mjs} +8 -8
  273. package/dist/client/{shop-commerce-store-DcvZxdEK.mjs → shop-commerce-store-C1-mxSye.mjs} +1 -1
  274. package/dist/client/{shopShared-BVJOiUiJ.mjs → shopShared-Db-cRGu3.mjs} +5 -5
  275. package/dist/client/{useDiscountCodeUi-DPmYDunz.mjs → useDiscountCodeUi-jvAiUoUX.mjs} +1 -1
  276. package/dist/client/{useEventPagination-8-U55vH5.mjs → useEventPagination-BdWpCniq.mjs} +6 -7
  277. package/dist/preview-next/before-render.mjs +222 -55
  278. package/dist/preview-next/client/runtime.mjs +3 -3
  279. package/dist/preview-next/editor-chrome.css +5 -2
  280. package/dist/preview-next/keepAlive.mjs +133 -51
  281. package/dist/preview-next/middleware.mjs +133 -51
  282. package/dist/{sdk-runtime-C5jPdSrk.mjs → sdk-runtime-DLhjF2Nw.mjs} +1 -1
  283. package/dist/server/components.mjs +21541 -20118
  284. package/dist/server/config-validation.mjs +2466 -1403
  285. package/dist/server/config.mjs +2466 -1403
  286. package/dist/server/data.mjs +17842 -16759
  287. package/dist/server/date-time.mjs +258 -116
  288. package/dist/server/index.mjs +360 -53
  289. package/dist/server/next.mjs +21913 -20539
  290. package/dist/server/page-converter.mjs +8121 -7322
  291. package/dist/server/prebuild.mjs +1 -1
  292. package/dist/server/rendering/server.mjs +21196 -19760
  293. package/dist/server/rendering.mjs +21554 -20123
  294. package/dist/server/routing.mjs +19806 -18607
  295. package/dist/server/server.mjs +2907 -1845
  296. package/dist/server/theme-bridge.mjs +991 -160
  297. package/dist/server/theme.mjs +501 -100
  298. package/dist/{spinner-B-ab2rJp.mjs → spinner-MTooKfck.mjs} +1 -1
  299. package/dist/styles/index.css +254 -1
  300. package/package.json +1 -1
  301. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +0 -12
  302. package/dist/client/aspectTransforms-D-TnDdq4.mjs +0 -93
  303. package/dist/client/colorStyles-ECDNPE_P.mjs +0 -1253
@@ -506,15 +506,108 @@ const themeLookMetadataSchema = z.object({
506
506
  skinMarks: skinMarksSchema.optional()
507
507
  });
508
508
  //#endregion
509
- //#region ../theme-core/src/footer/mode.ts
510
- const footerModeSchema = z.enum([
511
- "default",
512
- "blocks",
513
- "default+blocks",
514
- "none"
515
- ]);
509
+ //#region ../core/src/result.ts
510
+ function ok(value) {
511
+ return {
512
+ ok: true,
513
+ value
514
+ };
515
+ }
516
+ function err(error) {
517
+ return {
518
+ ok: false,
519
+ error
520
+ };
521
+ }
522
+ //#endregion
523
+ //#region ../core/src/branded.ts
524
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
525
+ function parseUuidBrand(value, unsafeConstructor) {
526
+ if (typeof value !== "string") return err({ kind: "not_string" });
527
+ const normalized = value.trim().toLowerCase();
528
+ if (normalized.length === 0) return err({ kind: "empty_string" });
529
+ if (!UUID_PATTERN.test(normalized)) return err({ kind: "invalid_uuid" });
530
+ return ok(unsafeConstructor(normalized));
531
+ }
532
+ const unsafeAsMediaAssetId = (id) => id;
533
+ const parseMediaAssetId = (value) => parseUuidBrand(value, unsafeAsMediaAssetId);
534
+ //#endregion
535
+ //#region ../media-core/src/identifiers.ts
536
+ function slugifyMediaIdentifier(value) {
537
+ return value.toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-");
538
+ }
539
+ function parseMediaIdentifier(value) {
540
+ if (typeof value !== "string") return err({ kind: "not_string" });
541
+ const trimmed = value.trim();
542
+ if (trimmed.length === 0) return err({ kind: "empty_identifier" });
543
+ const normalized = slugifyMediaIdentifier(trimmed);
544
+ if (normalized.length === 0) return err({
545
+ kind: "empty_after_normalization",
546
+ value
547
+ });
548
+ return ok(normalized);
549
+ }
550
+ /**
551
+ * Admits identifiers read from trusted persistence without repairing dirty data in memory.
552
+ * User input should use parseMediaIdentifier, which intentionally canonicalizes it.
553
+ */
554
+ function parseCanonicalMediaIdentifier(value) {
555
+ if (typeof value !== "string") return err({ kind: "not_string" });
556
+ const parsed = parseMediaIdentifier(value);
557
+ if (!parsed.ok) return parsed;
558
+ if (value !== parsed.value) return err({
559
+ kind: "non_canonical_identifier",
560
+ value,
561
+ canonical: parsed.value
562
+ });
563
+ return parsed;
564
+ }
565
+ //#endregion
566
+ //#region ../media-core/src/mediaIdentifierSchema.ts
567
+ /** Strict stored-reference admission delegates the canonical identifier decision. */
568
+ const mediaIdentifierSchema = z.string().transform((value, context) => {
569
+ const parsed = parseCanonicalMediaIdentifier(value);
570
+ if (parsed.ok) return parsed.value;
571
+ context.addIssue({
572
+ code: "custom",
573
+ message: "Expected a canonical media identifier"
574
+ });
575
+ return z.NEVER;
576
+ });
577
+ //#endregion
578
+ //#region ../media-core/src/mediaKinds.ts
579
+ const mediaTypeDiscriminants = [
580
+ "image",
581
+ "video",
582
+ "audio",
583
+ "document",
584
+ "spreadsheet",
585
+ "archive"
586
+ ];
587
+ //#endregion
588
+ //#region ../media-core/src/renderableMediaAssetAdmission.ts
589
+ const mediaAssetIdSchema = z.string().transform((value, context) => {
590
+ const parsed = parseMediaAssetId(value);
591
+ if (parsed.ok) return parsed.value;
592
+ context.addIssue({
593
+ code: "custom",
594
+ message: "Expected a media asset ID"
595
+ });
596
+ return z.NEVER;
597
+ });
598
+ const nonemptyStorageValue = z.string().refine((value) => value.trim().length > 0);
599
+ const renderableMediaAssetSchema = z.object({
600
+ id: mediaAssetIdSchema,
601
+ identifier: mediaIdentifierSchema,
602
+ storageBucket: nonemptyStorageValue,
603
+ storagePath: nonemptyStorageValue,
604
+ mimeType: nonemptyStorageValue,
605
+ filename: z.string().optional(),
606
+ width: z.number().positive().nullable(),
607
+ height: z.number().positive().nullable()
608
+ });
516
609
  //#endregion
517
- //#region ../theme-core/src/lib/media.ts
610
+ //#region ../media-core/src/media.ts
518
611
  const hotspotSchema = z.object({
519
612
  x: z.number().min(0).max(1),
520
613
  y: z.number().min(0).max(1),
@@ -548,54 +641,56 @@ const transformSchema = z.object({
548
641
  rotation: rotationSchema.optional()
549
642
  });
550
643
  const mediaPosterSchema = z.discriminatedUnion("tag", [z.object({
551
- tag: z.literal("storage"),
552
- assetId: z.string().optional(),
553
- storageBucket: z.string().min(1),
554
- storagePath: z.string().min(1)
555
- }), z.object({
644
+ tag: z.literal("media"),
645
+ identifier: mediaIdentifierSchema
646
+ }).strict(), z.object({
556
647
  tag: z.literal("external-src"),
557
- assetId: z.string().optional(),
558
648
  src: z.string().url()
559
- })]);
560
- const mediaBaseSchema = z.object({
649
+ }).strict()]);
650
+ const mediaUsageShape = {
561
651
  purpose: z.string().optional(),
562
652
  placeholder: z.boolean().default(true).optional(),
563
- assetId: z.string().optional(),
564
- identifier: z.string().optional(),
565
- src: z.string().optional(),
566
653
  alt: z.string().optional(),
567
654
  filename: z.string().optional(),
568
- mimeType: z.string().optional(),
569
655
  width: z.number().optional(),
570
656
  height: z.number().optional(),
571
- storageBucket: z.string().optional(),
572
- storagePath: z.string().optional(),
573
657
  poster: mediaPosterSchema.optional(),
574
658
  transform: transformSchema.optional()
575
- });
576
- const mediaIdentifierSchema = z.string().trim().min(1).brand();
659
+ };
660
+ const environmentExclusions = {
661
+ assetId: z.never().optional(),
662
+ id: z.never().optional(),
663
+ src: z.never().optional(),
664
+ storageBucket: z.never().optional(),
665
+ storagePath: z.never().optional(),
666
+ mimeType: z.never().optional()
667
+ };
668
+ const mediaBaseSchema = z.object({
669
+ ...mediaUsageShape,
670
+ ...environmentExclusions,
671
+ identifier: mediaIdentifierSchema
672
+ }).strict();
577
673
  const imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
578
674
  const videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
579
- const audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
580
- const documentMediaSchema = mediaBaseSchema.extend({ type: z.literal("document") });
581
- const spreadsheetMediaSchema = mediaBaseSchema.extend({ type: z.literal("spreadsheet") });
582
- const archiveMediaSchema = mediaBaseSchema.extend({ type: z.literal("archive") });
583
- const mediaSchema = z.discriminatedUnion("type", [
584
- imageMediaSchema,
585
- videoMediaSchema,
586
- audioMediaSchema,
587
- documentMediaSchema,
588
- spreadsheetMediaSchema,
589
- archiveMediaSchema
590
- ]);
591
- const persistableMediaBaseSchema = mediaBaseSchema.extend({ identifier: mediaIdentifierSchema });
592
- z.discriminatedUnion("type", [
593
- persistableMediaBaseSchema.extend({ type: z.literal("image") }),
594
- persistableMediaBaseSchema.extend({ type: z.literal("video") }),
595
- persistableMediaBaseSchema.extend({ type: z.literal("audio") }),
596
- persistableMediaBaseSchema.extend({ type: z.literal("document") }),
597
- persistableMediaBaseSchema.extend({ type: z.literal("spreadsheet") }),
598
- persistableMediaBaseSchema.extend({ type: z.literal("archive") })
675
+ const mediaSchema = mediaBaseSchema.extend({ type: z.enum(mediaTypeDiscriminants) });
676
+ const externalMediaSchema = z.object({
677
+ ...mediaUsageShape,
678
+ ...environmentExclusions,
679
+ type: z.enum(mediaTypeDiscriminants),
680
+ src: z.string().min(1),
681
+ identifier: z.never().optional()
682
+ }).strict();
683
+ const assetMediaSchema = z.object({
684
+ ...mediaUsageShape,
685
+ ...environmentExclusions,
686
+ type: z.enum(mediaTypeDiscriminants),
687
+ asset: renderableMediaAssetSchema,
688
+ identifier: z.never().optional()
689
+ }).strict();
690
+ z.union([
691
+ mediaSchema,
692
+ externalMediaSchema,
693
+ assetMediaSchema
599
694
  ]);
600
695
  //#endregion
601
696
  //#region ../theme-core/src/palette/colors.ts
@@ -769,6 +864,29 @@ const paletteSchema = z.object({
769
864
  };
770
865
  });
771
866
  //#endregion
867
+ //#region ../theme-core/src/buttons/typography.ts
868
+ const textTransformSchema = z.enum([
869
+ "none",
870
+ "uppercase",
871
+ "lowercase",
872
+ "capitalize"
873
+ ]);
874
+ const fontWeightSchema = z.union([
875
+ z.literal(400),
876
+ z.literal(500),
877
+ z.literal(600),
878
+ z.literal(700),
879
+ z.literal(800)
880
+ ]);
881
+ const buttonTypographySchema = z.enum(["body", "heading"]);
882
+ const letterSpacingSchema = z.enum([
883
+ "tight",
884
+ "normal",
885
+ "slight",
886
+ "loose",
887
+ "wide"
888
+ ]);
889
+ //#endregion
772
890
  //#region ../theme-core/src/buttons/types.ts
773
891
  /**
774
892
  * Standard semantic variant roles a theme exposes.
@@ -884,6 +1002,7 @@ const buttonEffectApplicationSchema = z.discriminatedUnion("effectId", [
884
1002
  z.strictObject({
885
1003
  effectId: z.literal("lift"),
886
1004
  options: z.strictObject({ amount: z.enum([
1005
+ "0.125",
887
1006
  "0.25",
888
1007
  "0.5",
889
1008
  "1"
@@ -930,24 +1049,6 @@ const shadowSizeSchema = z.enum([
930
1049
  "medium",
931
1050
  "high"
932
1051
  ]);
933
- const textTransformSchema = z.enum([
934
- "none",
935
- "uppercase",
936
- "lowercase",
937
- "capitalize"
938
- ]);
939
- const fontWeightSchema = z.union([
940
- z.literal(500),
941
- z.literal(600),
942
- z.literal(700),
943
- z.literal(800)
944
- ]);
945
- const buttonTypographySchema = z.enum(["body", "heading"]);
946
- const letterSpacingSchema = z.enum([
947
- "tight",
948
- "normal",
949
- "loose"
950
- ]);
951
1052
  const hoverTransformSchema = z.enum([
952
1053
  "none",
953
1054
  "lift",
@@ -1019,7 +1120,8 @@ const paddingShorthandSchema = z.string().refine((value) => {
1019
1120
  }, { message: "Padding must be two space-separated CSS length tokens (e.g. \"0.5rem 1rem\"). Use `0` for zero." });
1020
1121
  const buttonSizeConfigSchema = z.object({
1021
1122
  padding: paddingShorthandSchema,
1022
- fontSize: z.string().optional()
1123
+ fontSize: z.string().optional(),
1124
+ borderRadius: z.string().optional()
1023
1125
  });
1024
1126
  /**
1025
1127
  * `xl` is optional on the wire so themes persisted before the `xl` size was
@@ -1142,12 +1244,20 @@ const buttonVisualAppearanceSchema = z.strictObject({
1142
1244
  textTransform: textTransformSchema
1143
1245
  }),
1144
1246
  effects: z.array(buttonEffectApplicationSchema),
1247
+ transform: z.literal("none").optional(),
1145
1248
  contextualHover: contextualButtonHoverSchema.optional()
1146
1249
  });
1147
1250
  const buttonVisualStatesSchema = z.strictObject({
1148
1251
  base: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
1149
1252
  hover: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
1150
- focus: buttonVisualAppearanceSchema.extend({ shadow: z.literal("focus-indicator") }),
1253
+ focus: buttonVisualAppearanceSchema.extend({
1254
+ shadow: z.literal("focus-indicator"),
1255
+ indicator: z.strictObject({
1256
+ kind: z.literal("surface-ink"),
1257
+ width: z.union([z.literal(2), z.literal(3)]),
1258
+ offset: z.union([z.literal(3), z.literal(4)])
1259
+ }).optional()
1260
+ }),
1151
1261
  active: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
1152
1262
  disabled: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema })
1153
1263
  });
@@ -1772,6 +1882,10 @@ function validateButtonTextContrast(input) {
1772
1882
  }
1773
1883
  };
1774
1884
  }
1885
+ /** A text-token slab inverts the palette's text/background pair, including text shades. */
1886
+ function solidForegroundToken(backgroundToken) {
1887
+ return /^text(?:-\d+)?$/.test(backgroundToken) ? "background" : onColorTokenName(backgroundToken);
1888
+ }
1775
1889
  //#endregion
1776
1890
  //#region ../theme-core/src/buttons/contextualHover.ts
1777
1891
  function resolveContextualHoverPreference(input) {
@@ -1869,7 +1983,7 @@ function candidate(family, shade, currentShade, direction, seedHex, palette) {
1869
1983
  }
1870
1984
  function hasSafeTextContrast(token, palette) {
1871
1985
  const background = palette[token];
1872
- const foreground = palette[onColorTokenName(token)];
1986
+ const foreground = palette[solidForegroundToken(token)];
1873
1987
  return typeof background === "string" && typeof foreground === "string" && contrastRatio(background, foreground) >= BUTTON_CONTRAST_POLICY.textMinimumRatio;
1874
1988
  }
1875
1989
  function isSafeCandidate(token, palette, surface) {
@@ -1964,6 +2078,13 @@ function compileDeclaredVisualStates(input, states) {
1964
2078
  const colours = collectStateColours(mapVisualStates((state) => compileDeclaredVisualState(input, states, state, state === "hover" ? hover.treatment : states[state].background)));
1965
2079
  return colours.ok ? {
1966
2080
  ...colours,
2081
+ focusIndicator: states.focus.indicator ? {
2082
+ kind: "surface-role",
2083
+ colorCss: input.surface?.foregroundCss ?? surfaceForegroundValue("text"),
2084
+ width: states.focus.indicator.width,
2085
+ offset: states.focus.indicator.offset,
2086
+ minimumSurfaceContrast: BUTTON_CONTRAST_POLICY.nonTextMinimumRatio
2087
+ } : colours.focusIndicator,
1967
2088
  contextualHoverRepair: hover.repair
1968
2089
  } : colours;
1969
2090
  }
@@ -2101,7 +2222,7 @@ function resolveFocusIndicator(colour) {
2101
2222
  function resolveSolid(input, backgroundToken, edge) {
2102
2223
  const backgroundHex = paletteHex(input, backgroundToken);
2103
2224
  if (!backgroundHex.ok) return backgroundHex;
2104
- const foregroundToken = unsafeAsOpaqueButtonColourToken(onColorTokenName(backgroundToken));
2225
+ const foregroundToken = unsafeAsOpaqueButtonColourToken(solidForegroundToken(backgroundToken));
2105
2226
  const foregroundHex = input.palette[foregroundToken];
2106
2227
  if (typeof foregroundHex !== "string") return {
2107
2228
  ok: false,
@@ -3317,7 +3438,7 @@ function resolvedButtonFocusDeclarations(indicator, role) {
3317
3438
  ["outline", value("outline", `2px solid ${indicator.innerCss}`)],
3318
3439
  ["outline-offset", value("outline-offset", "2px")],
3319
3440
  ["box-shadow", value("box-shadow", `0 0 0 4px ${indicator.outerCss}`)]
3320
- ] : [["outline", value("outline", `3px solid ${indicator.colorCss}`)], ["outline-offset", value("outline-offset", "3px")]];
3441
+ ] : [["outline", value("outline", `${indicator.width ?? 3}px solid ${indicator.colorCss}`)], ["outline-offset", value("outline-offset", `${indicator.offset ?? 3}px`)]];
3321
3442
  }
3322
3443
  /**
3323
3444
  * Disabled buttons are deliberately muted as unavailable controls. Native
@@ -3360,6 +3481,287 @@ function normalizeAppearance(appearance) {
3360
3481
  };
3361
3482
  }
3362
3483
  //#endregion
3484
+ //#region ../theme-core/src/buttons/styles/recipes/lanternRecipes.ts
3485
+ const flatShadow = {
3486
+ elevation: "none",
3487
+ softness: null,
3488
+ position: "bottom"
3489
+ };
3490
+ const lift$1 = {
3491
+ effectId: "lift",
3492
+ options: { amount: "0.125" }
3493
+ };
3494
+ const tags = {
3495
+ tone: "classic",
3496
+ energy: "calm",
3497
+ motion: "subtle",
3498
+ era: "editorial"
3499
+ };
3500
+ /** Each role supplies complete states, including a flat surface-ink focus ring. */
3501
+ function states(base, hover, offset = 4, width = 2) {
3502
+ return {
3503
+ base,
3504
+ hover,
3505
+ focus: {
3506
+ ...base,
3507
+ shadow: "focus-indicator",
3508
+ indicator: {
3509
+ kind: "surface-ink",
3510
+ width,
3511
+ offset
3512
+ }
3513
+ },
3514
+ active: {
3515
+ ...base,
3516
+ transform: "none"
3517
+ },
3518
+ disabled: {
3519
+ ...base,
3520
+ effects: []
3521
+ }
3522
+ };
3523
+ }
3524
+ const gilt = {
3525
+ text: "treatment",
3526
+ border: "none",
3527
+ borderRadius: "rounded-10px",
3528
+ shadow: flatShadow,
3529
+ sizes: {
3530
+ sm: {
3531
+ padding: "10px 20px",
3532
+ fontSize: "text-base",
3533
+ borderRadius: "rounded-lg"
3534
+ },
3535
+ md: {
3536
+ padding: "18px 36px",
3537
+ fontSize: "text-19px"
3538
+ },
3539
+ lg: {
3540
+ padding: "18px 36px",
3541
+ fontSize: "text-19px"
3542
+ },
3543
+ xl: {
3544
+ padding: "18px 36px",
3545
+ fontSize: "text-19px"
3546
+ }
3547
+ },
3548
+ typography: {
3549
+ fontWeight: 400,
3550
+ typography: "heading",
3551
+ fontSize: "text-19px",
3552
+ letterSpacing: "slight",
3553
+ italic: false,
3554
+ textTransform: "none"
3555
+ },
3556
+ effects: []
3557
+ };
3558
+ const giltPrimary = {
3559
+ ...gilt,
3560
+ background: {
3561
+ type: "gradient",
3562
+ stops: ["accent", "primary"],
3563
+ direction: "to-br",
3564
+ foregroundToken: "onAccent"
3565
+ }
3566
+ };
3567
+ const giltPrimaryHover = {
3568
+ ...giltPrimary,
3569
+ background: {
3570
+ ...giltPrimary.background,
3571
+ stops: ["accent-400", "primary-400"],
3572
+ foregroundToken: "secondary-950"
3573
+ },
3574
+ effects: [lift$1]
3575
+ };
3576
+ const giltSecondary = {
3577
+ ...gilt,
3578
+ background: {
3579
+ type: "solid",
3580
+ colorToken: "text"
3581
+ }
3582
+ };
3583
+ const giltSecondaryHover = {
3584
+ ...giltSecondary,
3585
+ effects: [lift$1],
3586
+ contextualHover: {
3587
+ kind: "shade-shift",
3588
+ seedToken: unsafeAsOpaqueButtonColourToken("text"),
3589
+ fallbackDirection: "lighter"
3590
+ }
3591
+ };
3592
+ const giltPrimaryStates = states(giltPrimary, giltPrimaryHover);
3593
+ const giltSecondaryStates = states(giltSecondary, giltSecondaryHover);
3594
+ const giltSlabRecipe = defineStaticButtonStyleRecipe({
3595
+ id: "gilt-slab",
3596
+ accessibilityLabel: "Gilt slab",
3597
+ tags,
3598
+ system: { roles: {
3599
+ primary: { states: giltPrimaryStates },
3600
+ secondary: { states: giltSecondaryStates },
3601
+ outline: { states: giltSecondaryStates },
3602
+ ghost: { states: giltSecondaryStates },
3603
+ accent: { states: giltPrimaryStates }
3604
+ } }
3605
+ });
3606
+ const hairline = {
3607
+ text: "treatment",
3608
+ borderRadius: "rounded-3px",
3609
+ shadow: flatShadow,
3610
+ sizes: {
3611
+ sm: {
3612
+ padding: "9px 16px",
3613
+ fontSize: "text-xs"
3614
+ },
3615
+ md: {
3616
+ padding: "15px 28px",
3617
+ fontSize: "text-13px"
3618
+ },
3619
+ lg: {
3620
+ padding: "15px 28px",
3621
+ fontSize: "text-13px"
3622
+ },
3623
+ xl: {
3624
+ padding: "15px 28px",
3625
+ fontSize: "text-13px"
3626
+ }
3627
+ },
3628
+ typography: {
3629
+ fontWeight: 700,
3630
+ typography: "body",
3631
+ fontSize: "text-13px",
3632
+ letterSpacing: "wide",
3633
+ italic: false,
3634
+ textTransform: "uppercase"
3635
+ },
3636
+ effects: []
3637
+ };
3638
+ const hairlinePrimary = {
3639
+ ...hairline,
3640
+ background: {
3641
+ type: "solid",
3642
+ colorToken: "primary"
3643
+ },
3644
+ border: {
3645
+ widthClass: "border",
3646
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
3647
+ }
3648
+ };
3649
+ const hairlineOutline = {
3650
+ ...hairline,
3651
+ background: {
3652
+ type: "surface",
3653
+ role: "link"
3654
+ },
3655
+ border: {
3656
+ widthClass: "border",
3657
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
3658
+ }
3659
+ };
3660
+ const hairlineSecondary = {
3661
+ ...hairlineOutline,
3662
+ border: {
3663
+ widthClass: "border",
3664
+ boundaryInk: unsafeAsOpaqueButtonColourToken("accent")
3665
+ }
3666
+ };
3667
+ const hairlineFilled = {
3668
+ ...hairlineSecondary,
3669
+ background: {
3670
+ type: "solid",
3671
+ colorToken: "accent"
3672
+ }
3673
+ };
3674
+ const hairlinePrimaryStates = states(hairlinePrimary, hairlineOutline, 3);
3675
+ const hairlineSecondaryStates = states(hairlineSecondary, hairlineFilled, 3);
3676
+ const hairlineTabRecipe = defineStaticButtonStyleRecipe({
3677
+ id: "hairline-tab",
3678
+ accessibilityLabel: "Hairline tab",
3679
+ tags,
3680
+ system: { roles: {
3681
+ primary: { states: hairlinePrimaryStates },
3682
+ secondary: { states: hairlineSecondaryStates },
3683
+ outline: { states: hairlineSecondaryStates },
3684
+ ghost: { states: hairlineSecondaryStates },
3685
+ accent: { states: states(hairlineFilled, hairlineSecondary, 3) }
3686
+ } }
3687
+ });
3688
+ const marqueeAccent = {
3689
+ text: "treatment",
3690
+ borderRadius: "rounded-none",
3691
+ shadow: flatShadow,
3692
+ sizes: {
3693
+ sm: {
3694
+ padding: "8px 17px",
3695
+ fontSize: "text-15px"
3696
+ },
3697
+ md: {
3698
+ padding: "14px 25px",
3699
+ fontSize: "text-17px"
3700
+ },
3701
+ lg: {
3702
+ padding: "14px 25px",
3703
+ fontSize: "text-17px"
3704
+ },
3705
+ xl: {
3706
+ padding: "14px 25px",
3707
+ fontSize: "text-17px"
3708
+ }
3709
+ },
3710
+ typography: {
3711
+ fontWeight: 800,
3712
+ typography: "body",
3713
+ fontSize: "text-17px",
3714
+ letterSpacing: "loose",
3715
+ italic: false,
3716
+ textTransform: "uppercase"
3717
+ },
3718
+ effects: [],
3719
+ background: {
3720
+ type: "solid",
3721
+ colorToken: "accent"
3722
+ },
3723
+ border: {
3724
+ widthClass: "border-2",
3725
+ boundaryInk: unsafeAsOpaqueButtonColourToken("accent")
3726
+ }
3727
+ };
3728
+ const marqueePrimary = {
3729
+ ...marqueeAccent,
3730
+ background: {
3731
+ type: "solid",
3732
+ colorToken: "primary"
3733
+ },
3734
+ border: {
3735
+ widthClass: "border-2",
3736
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
3737
+ }
3738
+ };
3739
+ const marqueeSecondary = {
3740
+ ...marqueeAccent,
3741
+ background: {
3742
+ type: "solid",
3743
+ colorToken: "text"
3744
+ },
3745
+ border: {
3746
+ widthClass: "border-2",
3747
+ boundaryInk: unsafeAsOpaqueButtonColourToken("text")
3748
+ }
3749
+ };
3750
+ const marqueePrimaryStates = states(marqueeAccent, marqueePrimary, 4, 3);
3751
+ const marqueeSecondaryStates = states(marqueeSecondary, marqueeAccent, 4, 3);
3752
+ const marqueeRecipe = defineStaticButtonStyleRecipe({
3753
+ id: "marquee",
3754
+ accessibilityLabel: "Marquee",
3755
+ tags,
3756
+ system: { roles: {
3757
+ primary: { states: marqueePrimaryStates },
3758
+ secondary: { states: marqueeSecondaryStates },
3759
+ outline: { states: marqueeSecondaryStates },
3760
+ ghost: { states: marqueeSecondaryStates },
3761
+ accent: { states: marqueePrimaryStates }
3762
+ } }
3763
+ });
3764
+ //#endregion
3363
3765
  //#region ../theme-core/src/buttons/styles/recipes/fulcrumRecipe.ts
3364
3766
  const fulcrumSizes = {
3365
3767
  sm: {
@@ -4101,7 +4503,10 @@ const BUTTON_STYLE_IDS = [
4101
4503
  "offset-block",
4102
4504
  "ringed-pill",
4103
4505
  "square-outline",
4104
- "fulcrum"
4506
+ "fulcrum",
4507
+ "gilt-slab",
4508
+ "hairline-tab",
4509
+ "marquee"
4105
4510
  ];
4106
4511
  const quietArrowParametersSchema = z.object({ secondaryTreatment: z.enum(["outlined", "solid-accent"]) }).strict();
4107
4512
  const flatInkHoverTreatmentSchema = z.enum([
@@ -4138,7 +4543,10 @@ const buttonStyleSelectionSchema = z.discriminatedUnion("styleId", [
4138
4543
  selectionBranch("offset-block", emptyParametersSchema),
4139
4544
  selectionBranch("ringed-pill", emptyParametersSchema),
4140
4545
  selectionBranch("square-outline", emptyParametersSchema),
4141
- selectionBranch("fulcrum", emptyParametersSchema)
4546
+ selectionBranch("fulcrum", emptyParametersSchema),
4547
+ selectionBranch("gilt-slab", emptyParametersSchema),
4548
+ selectionBranch("hairline-tab", emptyParametersSchema),
4549
+ selectionBranch("marquee", emptyParametersSchema)
4142
4550
  ]);
4143
4551
  //#endregion
4144
4552
  //#region ../theme-core/src/buttons/styles/recipes/quietArrow.ts
@@ -7654,7 +8062,10 @@ const buttonStyleRecipes = [
7654
8062
  offsetBlockRecipe,
7655
8063
  ringedPillRecipe,
7656
8064
  squareOutlineRecipe,
7657
- fulcrumRecipe
8065
+ fulcrumRecipe,
8066
+ giltSlabRecipe,
8067
+ hairlineTabRecipe,
8068
+ marqueeRecipe
7658
8069
  ];
7659
8070
  const recipesById = new Map(buttonStyleRecipes.map((recipe) => [recipe.id, recipe]));
7660
8071
  function findButtonStyleRecipe(id) {
@@ -7670,6 +8081,9 @@ function resolveButtonStyleSelection(selection) {
7670
8081
  case "editorial-link": return resolveButtonStyleRecipe(editorialLinkRecipe, selection.parameters);
7671
8082
  case "pebble": return resolveButtonStyleRecipe(pebbleRecipe, selection.parameters);
7672
8083
  case "ink-stamp": return resolveButtonStyleRecipe(inkStampRecipe, selection.parameters);
8084
+ case "gilt-slab": return resolveButtonStyleRecipe(giltSlabRecipe, selection.parameters);
8085
+ case "hairline-tab": return resolveButtonStyleRecipe(hairlineTabRecipe, selection.parameters);
8086
+ case "marquee": return resolveButtonStyleRecipe(marqueeRecipe, selection.parameters);
7673
8087
  case "fulcrum": return resolveButtonStyleRecipe(fulcrumRecipe, selection.parameters);
7674
8088
  case "flat-ink": return resolveButtonStyleRecipe(flatInkRecipe, selection.parameters);
7675
8089
  case "brushed-wash": return resolveButtonStyleRecipe(brushedWashRecipe, selection.parameters);
@@ -9828,6 +10242,20 @@ const boxBackgroundSchema = z.discriminatedUnion("type", [
9828
10242
  showVideoOnMobile: z.boolean().nullable().optional()
9829
10243
  })
9830
10244
  ]);
10245
+ z.discriminatedUnion("type", [
10246
+ boxBackgroundSchema.options[0],
10247
+ boxBackgroundSchema.options[1],
10248
+ boxBackgroundSchema.options[2].extend({ image: z.union([
10249
+ imageMediaSchema,
10250
+ externalMediaSchema.extend({ type: z.literal("image") }),
10251
+ assetMediaSchema.extend({ type: z.literal("image") })
10252
+ ]).nullable().optional() }),
10253
+ boxBackgroundSchema.options[3].extend({ image: z.union([
10254
+ videoMediaSchema,
10255
+ externalMediaSchema.extend({ type: z.literal("video") }),
10256
+ assetMediaSchema.extend({ type: z.literal("video") })
10257
+ ]).nullable().optional() })
10258
+ ]);
9831
10259
  function normalizeAuthoringOpacity(value) {
9832
10260
  if (!isRecord(value)) return value;
9833
10261
  return {
@@ -10181,20 +10609,15 @@ const headerSchema = z.object({
10181
10609
  const footerVariant = z.enum([
10182
10610
  "simple",
10183
10611
  "columns",
10184
- "split"
10185
- ]);
10612
+ "split",
10613
+ "centred"
10614
+ ]).transform((value) => value === "columns" ? "simple" : value);
10186
10615
  const footerMaxWidth = z.enum(["container", "full"]);
10187
10616
  const footerNavLayoutMode = z.enum([
10188
10617
  "stack",
10189
10618
  "inline",
10190
10619
  "inline-wrap"
10191
10620
  ]);
10192
- const footerNavLayoutAlign = z.enum([
10193
- "start",
10194
- "center",
10195
- "end",
10196
- "space-between"
10197
- ]);
10198
10621
  const footerSpacing = z.enum([
10199
10622
  "none",
10200
10623
  "tight",
@@ -10203,12 +10626,6 @@ const footerSpacing = z.enum([
10203
10626
  "relaxed",
10204
10627
  "spacious"
10205
10628
  ]);
10206
- const footerLogoPlacement = z.enum([
10207
- "left",
10208
- "right",
10209
- "above",
10210
- "below"
10211
- ]);
10212
10629
  const footerLogoSize = z.enum([
10213
10630
  "sm",
10214
10631
  "md",
@@ -10249,17 +10666,8 @@ const footerBottomBarSchema = z.object({
10249
10666
  ]).optional()
10250
10667
  }).optional()
10251
10668
  });
10252
- const footerNavLayoutSchema = z.object({
10253
- layout: footerNavLayoutMode.optional(),
10254
- align: footerNavLayoutAlign.optional(),
10255
- gapX: footerSpacing.optional(),
10256
- gapY: footerSpacing.optional(),
10257
- columns: z.number().int().min(1).max(6).optional()
10258
- });
10669
+ const footerNavLayoutSchema = z.object({ layout: footerNavLayoutMode.optional() });
10259
10670
  const footerLogoSchema = z.object({
10260
- showLogo: z.boolean().default(true),
10261
- showLogoText: z.boolean().optional(),
10262
- placement: footerLogoPlacement.optional(),
10263
10671
  size: footerLogoSize.optional(),
10264
10672
  maxHeight: footerLogoMaxHeight.optional(),
10265
10673
  align: z.enum([
@@ -10269,15 +10677,8 @@ const footerLogoSchema = z.object({
10269
10677
  ]).optional()
10270
10678
  });
10271
10679
  const footerSchema = z.object({
10272
- /**
10273
- * SDK-only footer rendering mode.
10274
- *
10275
- * Historical persisted field; SDK rendering mode now lives in layout.footerMode.
10276
- */
10277
- mode: footerModeSchema.optional(),
10278
10680
  variant: footerVariant,
10279
10681
  maxWidth: footerMaxWidth,
10280
- showLogoText: z.boolean().optional(),
10281
10682
  background: headerBackgroundSchema.default({
10282
10683
  type: "color",
10283
10684
  color: "surface"
@@ -10672,6 +11073,55 @@ function generateOpaquePanelCss(input) {
10672
11073
  return `:where([data-theme-scope="${input.themeId}"]) ${panel.selector} {\n ${renderCssDeclarations(declarations)}\n}`;
10673
11074
  }).join("\n\n");
10674
11075
  }
11076
+ //#endregion
11077
+ //#region ../theme-core/src/site-styles/footerLookDefaults.ts
11078
+ const defaultFooterLookRecipes = {
11079
+ "footer-centred-name": {
11080
+ arrangement: "centred",
11081
+ ground: {
11082
+ kind: "token",
11083
+ token: "surface"
11084
+ },
11085
+ nav: {
11086
+ weight: "regular",
11087
+ colorToken: "text",
11088
+ hoverColorToken: "primary",
11089
+ typography: "body"
11090
+ },
11091
+ legal: {
11092
+ kind: "separate",
11093
+ bar: null
11094
+ },
11095
+ brandAlign: "center"
11096
+ },
11097
+ "footer-links-row": {
11098
+ arrangement: "simple",
11099
+ ground: {
11100
+ kind: "token",
11101
+ token: "surface"
11102
+ },
11103
+ nav: {
11104
+ weight: "regular",
11105
+ colorToken: "text",
11106
+ hoverColorToken: "primary",
11107
+ typography: "body"
11108
+ },
11109
+ legal: { kind: "integrated" },
11110
+ brandAlign: "start"
11111
+ }
11112
+ };
11113
+ /** A whole authored recipe replaces the default; facets are never deep-merged. */
11114
+ function resolveFooterLookRecipe(style, id) {
11115
+ return style?.footerLookRecipes?.[id] ?? defaultFooterLookRecipes[id];
11116
+ }
11117
+ //#endregion
11118
+ //#region ../theme-core/src/site-styles/footerLookRecipe.ts
11119
+ /** Reject undeclared references when the curated catalogue is loaded, before rendering. */
11120
+ function validateFooterRecipeSurfaces(style, recipe) {
11121
+ [recipe.ground, ...recipe.legal.kind === "separate" && recipe.legal.bar ? [recipe.legal.bar.background] : []].forEach((ground) => {
11122
+ if (ground.kind === "style-surface" && (style.looks.kind !== "offers" || !style.looks.surfaces[ground.surface])) throw new Error(`Undeclared footer surface: ${ground.surface}`);
11123
+ });
11124
+ }
10675
11125
  /** Block supply is capability, never a second Look catalogue. */
10676
11126
  const cardListBlockParts = {
10677
11127
  "block.feature-cards": [
@@ -10705,7 +11155,9 @@ const cardListKnobBlocks = [...cardListFamilyBlocks, "block.event-calendar"];
10705
11155
  const lookKnobBlocks = {
10706
11156
  actionStyle: cardListKnobBlocks,
10707
11157
  titleSize: "block.hero",
10708
- imagePosition: "block.hero",
11158
+ imagePosition: ["block.hero", "block.media-text"],
11159
+ imageShape: "block.media-text",
11160
+ aspectRatio: "block.media-text",
10709
11161
  stickerLine: "block.hero",
10710
11162
  smallCaption: "block.hero",
10711
11163
  candleGlow: "block.hero",
@@ -10715,7 +11167,11 @@ const lookKnobBlocks = {
10715
11167
  dates: "block.offerings-preview",
10716
11168
  showCapacity: "block.event-calendar",
10717
11169
  quoteCount: "block.testimonials",
10718
- archFrame: "block.testimonials",
11170
+ archFrame: [
11171
+ "block.testimonials",
11172
+ "block.newsletter-signup",
11173
+ "block.form"
11174
+ ],
10719
11175
  tilt: "block.testimonials"
10720
11176
  };
10721
11177
  function isArrangementAppearancePreset(preset) {
@@ -10742,13 +11198,25 @@ function cardListKnobDefaults(block, arrangement, knobs, defaults) {
10742
11198
  }
10743
11199
  };
10744
11200
  }
11201
+ const arrangementLookTargets = {
11202
+ hero: "hero",
11203
+ "feature-cards": "feature-cards",
11204
+ "event-calendar": "events",
11205
+ testimonials: "testimonials",
11206
+ "event-details": "events",
11207
+ "media-text": "media-text",
11208
+ "image-gallery": "image-gallery",
11209
+ "newsletter-signup": "newsletter",
11210
+ form: "contact-form",
11211
+ "body-text": "body-text"
11212
+ };
10745
11213
  function defineArrangementLook(id, block, name, arrangement, knobs, input = {}) {
10746
11214
  const mode = block === "event-calendar" ? "list" : null;
10747
11215
  return {
10748
11216
  id: asAppearancePresetId(id),
10749
11217
  blockKinds: [`block.${block}`],
10750
11218
  label: name,
10751
- target: block === "event-calendar" || block === "event-details" ? "events" : block === "hero" ? "hero" : block === "testimonials" ? "testimonials" : "feature-cards",
11219
+ target: arrangementLookTargets[block],
10752
11220
  structure: {
10753
11221
  kind: "arrangement",
10754
11222
  byMode: { [mode ?? "default"]: arrangement },
@@ -11568,6 +12036,15 @@ const appearancePresets = [
11568
12036
  eyebrowTreatment: "accent"
11569
12037
  }
11570
12038
  }),
12039
+ defineArrangementLook("body-text-reading-column", "body-text", "Reading column", "prose", []),
12040
+ defineArrangementLook("form-beside-introduction-arched-panel", "form", "Introduction beside an arched form", "two-column", [], { slotRoles: { panel: "card" } }),
12041
+ defineArrangementLook("newsletter-signup-in-arch", "newsletter-signup", "Signup in an arch", "arch", []),
12042
+ defineArrangementLook("image-gallery-square-tiles", "image-gallery", "Square tiles", "tiles", []),
12043
+ defineArrangementLook("image-gallery-arched-captions", "image-gallery", "Arched photos with captions", "tiles", [], { styleFallback: [id$1("image-gallery-square-tiles")] }),
12044
+ defineArrangementLook("media-text-circle-beside-text", "media-text", "Circle beside the text", "circle-beside", ["imagePosition"], { forcedKnobs: {
12045
+ imageShape: "circle",
12046
+ aspectRatio: "1/1"
12047
+ } }),
11571
12048
  defineArrangementLook("hero-photo-beside-text", "hero", "Photo beside the text", "split", heroKnobs, { slotRoles: { sticker: "highlight" } }),
11572
12049
  defineArrangementLook("hero-headline-row", "hero", "Big headline, then text and photo", "headline-row", heroKnobs, {
11573
12050
  slotRoles: { sticker: "highlight" },
@@ -14639,52 +15116,14 @@ defineLookOptionGroup({
14639
15116
  function asFooterLookId(value) {
14640
15117
  return value;
14641
15118
  }
14642
- function quietFooterLinks(theme) {
14643
- return {
14644
- ...theme.footer,
14645
- navStyle: "minimal",
14646
- navWeight: "regular",
14647
- navColor: "text",
14648
- navLinkStyle: {
14649
- typography: "body",
14650
- fontWeight: "regular",
14651
- textTransform: "none",
14652
- italic: false,
14653
- colorToken: "text",
14654
- hoverColorToken: "primary",
14655
- padding: "none",
14656
- borderRadius: "none"
14657
- }
14658
- };
14659
- }
14660
- function emphasizedFooterLinks(theme) {
14661
- return {
14662
- ...theme.footer,
14663
- navStyle: "minimal",
14664
- navWeight: "medium",
14665
- navColor: "text",
14666
- navLinkStyle: {
14667
- typography: "body",
14668
- fontWeight: "medium",
14669
- textTransform: "none",
14670
- italic: false,
14671
- colorToken: "text",
14672
- hoverColorToken: "primary",
14673
- padding: "none",
14674
- borderRadius: "none"
14675
- }
14676
- };
14677
- }
14678
15119
  const footerLookCatalog = defineExactCatalog()([{
14679
- id: asFooterLookId("footer-links-quiet"),
14680
- label: "Quiet links",
14681
- description: "Regular-weight footer navigation with a restrained hover.",
14682
- compile: quietFooterLinks
15120
+ id: asFooterLookId("footer-links-row"),
15121
+ label: "Links in a row",
15122
+ description: "Your links in a row, with the other footer sections in columns beside them."
14683
15123
  }, {
14684
- id: asFooterLookId("footer-links-emphasized"),
14685
- label: "Emphasized links",
14686
- description: "Medium-weight footer navigation with a clearer emphasis.",
14687
- compile: emphasizedFooterLinks
15124
+ id: asFooterLookId("footer-centred-name"),
15125
+ label: "Centred name, links beneath",
15126
+ description: "Your site name centred, with your links, contact details and social links beneath it."
14688
15127
  }]);
14689
15128
  new Map(footerLookCatalog.map((look) => [look.id, look]));
14690
15129
  //#endregion
@@ -16526,6 +16965,7 @@ function defineCuratedSiteStyle(input) {
16526
16965
  recommendedAppearancePresetIds
16527
16966
  },
16528
16967
  headerCuration: headerCurationBySiteStyle[input.id],
16968
+ footerLookRecipes: input.footerLookRecipes,
16529
16969
  recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
16530
16970
  buttonStyleChoices: input.buttonStyleChoices,
16531
16971
  paletteRecommendations: input.paletteRecommendations,
@@ -17011,7 +17451,11 @@ const lanternLooks = {
17011
17451
  margin: "40px"
17012
17452
  },
17013
17453
  fontLoading: {
17014
- extraBodyFontWeights: [500, 700],
17454
+ extraBodyFontWeights: [
17455
+ 500,
17456
+ 700,
17457
+ 800
17458
+ ],
17015
17459
  italicBodyFontWeights: [400]
17016
17460
  },
17017
17461
  surfaces: {
@@ -17061,6 +17505,38 @@ const lanternLooks = {
17061
17505
  ]
17062
17506
  },
17063
17507
  offers: [
17508
+ {
17509
+ id: id("body-text-reading-column"),
17510
+ treatment: "reading-column",
17511
+ roleMap: lanternRoles
17512
+ },
17513
+ {
17514
+ id: id("form-beside-introduction-arched-panel"),
17515
+ treatment: "arched-panel",
17516
+ addKnobs: ["archFrame"],
17517
+ roleMap: lanternRoles
17518
+ },
17519
+ {
17520
+ id: id("newsletter-signup-in-arch"),
17521
+ treatment: "signup-arch",
17522
+ addKnobs: ["archFrame"],
17523
+ roleMap: lanternRoles
17524
+ },
17525
+ {
17526
+ id: id("image-gallery-square-tiles"),
17527
+ treatment: "square-tiles",
17528
+ roleMap: lanternRoles
17529
+ },
17530
+ {
17531
+ id: id("image-gallery-arched-captions"),
17532
+ treatment: "arched-captions",
17533
+ roleMap: lanternRoles
17534
+ },
17535
+ {
17536
+ id: id("media-text-circle-beside-text"),
17537
+ treatment: "circle-beside",
17538
+ roleMap: lanternRoles
17539
+ },
17064
17540
  {
17065
17541
  id: id("event-details-panel"),
17066
17542
  treatment: "quiet",
@@ -17499,7 +17975,7 @@ const curatedSiteStyles = [
17499
17975
  "faq-contained-help",
17500
17976
  "contact-form-panel"
17501
17977
  ],
17502
- recommendedFooterLookIds: ["footer-links-quiet"],
17978
+ recommendedFooterLookIds: ["footer-links-row"],
17503
17979
  buttonStyleChoices: [
17504
17980
  buttonChoice("soft-pill"),
17505
17981
  buttonChoice("pebble"),
@@ -17618,7 +18094,7 @@ const curatedSiteStyles = [
17618
18094
  "testimonials-non-carded",
17619
18095
  "contact-form-panel"
17620
18096
  ],
17621
- recommendedFooterLookIds: ["footer-links-quiet", "footer-links-emphasized"],
18097
+ recommendedFooterLookIds: ["footer-links-row"],
17622
18098
  buttonStyleChoices: [
17623
18099
  buttonChoice("earth-pill"),
17624
18100
  buttonChoice("soft-pill"),
@@ -17673,7 +18149,41 @@ const curatedSiteStyles = [
17673
18149
  "testimonials-brand-statement-cards",
17674
18150
  "contact-form-panel"
17675
18151
  ],
17676
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
18152
+ footerLookRecipes: { "footer-links-row": {
18153
+ arrangement: "split",
18154
+ ground: {
18155
+ kind: "token",
18156
+ token: "primary-800"
18157
+ },
18158
+ nav: {
18159
+ weight: "medium",
18160
+ colorToken: "primaryForeground",
18161
+ hoverColorToken: "secondary",
18162
+ typography: "body"
18163
+ },
18164
+ legal: {
18165
+ kind: "separate",
18166
+ bar: {
18167
+ fullBleed: true,
18168
+ background: {
18169
+ kind: "token",
18170
+ token: "primary-900"
18171
+ },
18172
+ textColor: "primaryForeground",
18173
+ textAlign: "center",
18174
+ paddingY: "compact",
18175
+ paddingX: "default",
18176
+ borderTop: { width: "none" }
18177
+ },
18178
+ linkStyle: {
18179
+ colorToken: "secondary",
18180
+ decorationColorToken: "secondary"
18181
+ }
18182
+ },
18183
+ brandAlign: "start",
18184
+ brandLogoSize: "sm"
18185
+ } },
18186
+ recommendedFooterLookIds: ["footer-links-row"],
17677
18187
  buttonStyleChoices: [
17678
18188
  buttonChoice("showtime-pill"),
17679
18189
  buttonChoice("confident-chip"),
@@ -17744,7 +18254,7 @@ const curatedSiteStyles = [
17744
18254
  "testimonials-statement-cards",
17745
18255
  "contact-form-panel"
17746
18256
  ],
17747
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
18257
+ recommendedFooterLookIds: ["footer-links-row"],
17748
18258
  buttonStyleChoices: [
17749
18259
  buttonChoice("ornate-ritual"),
17750
18260
  buttonChoice("joy-stamp"),
@@ -17791,7 +18301,22 @@ const curatedSiteStyles = [
17791
18301
  } }
17792
18302
  },
17793
18303
  recommendedAppearancePresetIds: ["feature-cards-bold-colors", "testimonials-statement-cards"],
17794
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
18304
+ footerLookRecipes: { "footer-links-row": {
18305
+ arrangement: "simple",
18306
+ ground: {
18307
+ kind: "token",
18308
+ token: "surface"
18309
+ },
18310
+ nav: {
18311
+ weight: "medium",
18312
+ colorToken: "text",
18313
+ hoverColorToken: "primary",
18314
+ typography: "body"
18315
+ },
18316
+ legal: { kind: "integrated" },
18317
+ brandAlign: "start"
18318
+ } },
18319
+ recommendedFooterLookIds: ["footer-links-row"],
17795
18320
  buttonStyleChoices: [
17796
18321
  buttonChoice("joy-stamp"),
17797
18322
  buttonChoice("ink-stamp"),
@@ -17843,7 +18368,7 @@ const curatedSiteStyles = [
17843
18368
  },
17844
18369
  testimonialQuote: serifDisplayQuote
17845
18370
  },
17846
- recommendedFooterLookIds: ["footer-links-quiet"],
18371
+ recommendedFooterLookIds: ["footer-links-row"],
17847
18372
  buttonStyleChoices: [
17848
18373
  buttonChoice("fulcrum"),
17849
18374
  buttonChoice("editorial-link"),
@@ -17920,7 +18445,7 @@ const curatedSiteStyles = [
17920
18445
  "faq-base-accordion",
17921
18446
  "booking-brand-band"
17922
18447
  ],
17923
- recommendedFooterLookIds: ["footer-links-quiet"],
18448
+ recommendedFooterLookIds: ["footer-links-row"],
17924
18449
  buttonStyleChoices: [
17925
18450
  buttonChoice("quiet-arrow", void 0, { secondaryTreatment: "solid-accent" }),
17926
18451
  buttonChoice("flat-ink"),
@@ -17958,7 +18483,22 @@ const curatedSiteStyles = [
17958
18483
  accordions: boldBorderedAccordionSystem,
17959
18484
  testimonialQuote: accentGlyphQuote
17960
18485
  },
17961
- recommendedFooterLookIds: ["footer-links-emphasized"],
18486
+ footerLookRecipes: { "footer-links-row": {
18487
+ arrangement: "simple",
18488
+ ground: {
18489
+ kind: "token",
18490
+ token: "surface"
18491
+ },
18492
+ nav: {
18493
+ weight: "medium",
18494
+ colorToken: "text",
18495
+ hoverColorToken: "primary",
18496
+ typography: "body"
18497
+ },
18498
+ legal: { kind: "integrated" },
18499
+ brandAlign: "start"
18500
+ } },
18501
+ recommendedFooterLookIds: ["footer-links-row"],
17962
18502
  buttonStyleChoices: [
17963
18503
  buttonChoice("offset-block"),
17964
18504
  buttonChoice("ink-stamp"),
@@ -17997,8 +18537,29 @@ const curatedSiteStyles = [
17997
18537
  accordions: warmInsetAccordionSystem,
17998
18538
  testimonialQuote: serifDisplayQuote
17999
18539
  },
18000
- recommendedFooterLookIds: ["footer-links-quiet"],
18540
+ footerLookRecipes: { "footer-centred-name": {
18541
+ arrangement: "centred",
18542
+ ground: {
18543
+ kind: "style-surface",
18544
+ surface: "deep"
18545
+ },
18546
+ nav: {
18547
+ weight: "regular",
18548
+ colorToken: "text",
18549
+ hoverColorToken: "primary",
18550
+ typography: "heading"
18551
+ },
18552
+ legal: {
18553
+ kind: "separate",
18554
+ bar: null
18555
+ },
18556
+ brandAlign: "center"
18557
+ } },
18558
+ recommendedFooterLookIds: ["footer-centred-name", "footer-links-row"],
18001
18559
  buttonStyleChoices: [
18560
+ buttonChoice("gilt-slab"),
18561
+ buttonChoice("hairline-tab"),
18562
+ buttonChoice("marquee"),
18002
18563
  buttonChoice("ringed-pill"),
18003
18564
  buttonChoice("earth-pill"),
18004
18565
  buttonChoice("editorial-link")
@@ -18033,7 +18594,7 @@ const curatedSiteStyles = [
18033
18594
  accordions: editorialDividedAccordionSystem,
18034
18595
  testimonialQuote: serifDisplayQuote
18035
18596
  },
18036
- recommendedFooterLookIds: ["footer-links-quiet"],
18597
+ recommendedFooterLookIds: ["footer-links-row"],
18037
18598
  buttonStyleChoices: [
18038
18599
  buttonChoice("flat-ink", void 0, { corners: "square" }),
18039
18600
  buttonChoice("editorial-link"),
@@ -18061,6 +18622,7 @@ function curatedStyleTemplate(input) {
18061
18622
  }
18062
18623
  curatedSiteStyles.forEach((style) => {
18063
18624
  if (style.looks.kind === "offers") validateLookFallbacks(style.looks);
18625
+ (/* @__PURE__ */ new Set([...Object.values(style.footerLookRecipes ?? {}), ...style.recommendedFooterLookIds.map((id) => resolveFooterLookRecipe(style, id))])).forEach((recipe) => validateFooterRecipeSurfaces(style, recipe));
18064
18626
  });
18065
18627
  //#endregion
18066
18628
  //#region ../theme-core/src/inputs/checkable.ts
@@ -27780,7 +28342,7 @@ const containerResponsiveThemeCss = `/*
27780
28342
  /* -----------------------------------------------------------------------------
27781
28343
  * Event section head — split (heading left, intro right)
27782
28344
  * Rendered by the block frame (outside [data-block="event-calendar"]) via
27783
- * eventSectionHeaderLayoutNodes({ splitClassName }). Lays the heading and its
28345
+ * sectionHeaderLayoutNodes({ splitClassName }). Lays the heading and its
27784
28346
  * supporting intro out as a two-column head on wide viewports, stacking on
27785
28347
  * narrow ones. The section band above provides the distinct background.
27786
28348
  * ----------------------------------------------------------------------------- */
@@ -33479,6 +34041,26 @@ const containerResponsiveThemeCss = `/*
33479
34041
  .theme-scope [data-arrangement] [data-event-list-empty] [data-slot="action"] { margin: 0; padding: 0; border: 0; background: none; color: var(--rb-surface-text-color); font: inherit; text-decoration: underline; text-underline-offset: 0.2em; cursor: pointer; }
33480
34042
  .theme-scope [data-arrangement] [data-event-list-empty] [data-slot="action"] button { margin: 0; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-decoration: inherit; cursor: pointer; }
33481
34043
 
34044
+ /* ---------------------------------------------------- image gallery: tiles */
34045
+ .theme-scope [data-arrangement="tiles"]:not(:has([data-slot="heading"], [data-slot="intro"], [data-slot="photo"], [data-placeholder-field])) { display: none; }
34046
+ .theme-scope [data-arrangement="tiles"] [data-slot="items"] {
34047
+ display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
34048
+ gap: var(--rb-skin-gallery-gap, 1.5rem); list-style: none; padding: 0;
34049
+ margin: 0 auto; max-width: 64rem;
34050
+ }
34051
+ .theme-scope [data-arrangement="tiles"] [data-slot="item"] { min-width: 0; margin: 0; }
34052
+ .theme-scope [data-arrangement="tiles"] [data-slot="figure"] { display: grid; gap: 0; align-items: stretch; min-width: 0; margin: 0; }
34053
+ .theme-scope [data-arrangement="tiles"] [data-slot="media"] { aspect-ratio: 1; overflow: hidden; }
34054
+ .theme-scope [data-arrangement="tiles"] [data-slot="photo"] { width: 100%; height: 100%; object-fit: cover; }
34055
+ .theme-scope [data-arrangement="tiles"] [data-slot="item"]:not(:has([data-slot="photo"], [data-placeholder-field])),
34056
+ .theme-scope [data-arrangement="tiles"] [data-slot="items"]:not(:has([data-slot="photo"], [data-placeholder-field])) { display: none; }
34057
+ .theme-scope [data-arrangement="tiles"] [data-slot="head"]:not(:has(*)) { display: none; }
34058
+ @container rb-site (max-width: 767px) {
34059
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
34060
+ .theme-scope:is(*, :scope) [data-arrangement="tiles"] [data-slot="items"] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
34061
+ }
34062
+ }
34063
+
33482
34064
  /* Bounded style skins (issue 1575, D14): one stylesheet per arrangement style, keyed on data-skin. */
33483
34065
 
33484
34066
  /* =============================================================================
@@ -34522,6 +35104,7 @@ const containerResponsiveThemeCss = `/*
34522
35104
 
34523
35105
  /* Section heads: centred under the lozenge rule. */
34524
35106
  [data-skin="lantern"] [data-arrangement] [data-slot="head"] {
35107
+ grid-template-columns: minmax(0, 1fr);
34525
35108
  position: relative;
34526
35109
  justify-items: center;
34527
35110
  text-align: center;
@@ -35207,6 +35790,254 @@ const containerResponsiveThemeCss = `/*
35207
35790
  [data-skin="lantern"] [data-card-list-item] [data-slot="dates"] { gap: 0.5rem; }
35208
35791
  [data-skin="lantern"] [data-card-list-item] [data-slot="dates"] [data-slot="date"] { padding: 0.625rem 0.75rem; border: 1px solid var(--rb-surface-line-color); border-radius: var(--lantern-tablet); }
35209
35792
 
35793
+ /* Centred footer: the same lozenge head over a quiet, deep-ground ending. */
35794
+ [data-skin="lantern"] [data-arrangement="footer-centred"] { padding-block: 5.5rem 2.25rem; border-top: 0; text-align: center; }
35795
+ [data-skin="lantern"] [data-arrangement="footer-centred"] > [data-slot="stack"] { padding-block: 0; gap: 0; }
35796
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="head"] { margin-bottom: 0; gap: 0.75rem; width: 100%; }
35797
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="heading"] { font-size: clamp(2rem, 3cqi, 2.5rem); line-height: 1.1; margin-top: 0.25rem; }
35798
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="intro"] { --rb-surface-text-color: var(--rb-surface-muted-color); font-size: 1.125rem; line-height: 1.55; color: var(--rb-surface-muted-color); }
35799
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="navigation"] { font-family: var(--font-heading); font-size: 1.125rem; }
35800
+ [data-skin="lantern"] [data-arrangement="footer-centred"] > [data-slot="stack"] > [data-slot="navigation"] { margin-top: 2.25rem; }
35801
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="navigation"] [data-slot="stack"]:has(> :not([data-slot])) { flex-direction: row; flex-wrap: wrap; justify-content: center; gap: 0.5rem 2.5rem; }
35802
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="contact"] { margin-top: 1.75rem; gap: 0.5rem 1.75rem; font-size: 1.0625rem; }
35803
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="contact"] [data-slot="stack"] { gap: 0.5rem 1.75rem; }
35804
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="schedule"] { margin-top: 0.75rem; width: min(100%, 20rem); align-self: center; }
35805
+ [data-skin="lantern"] [data-arrangement="footer-centred"] > [data-slot="stack"] > [data-slot="social"] { margin-top: 1.75rem; }
35806
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="social"] [data-slot="social"] { justify-content: center; gap: 0.75rem; }
35807
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="social"] [data-slot="social"] > * { display: grid; place-items: center; width: 44px; height: 44px; border: 1px solid var(--rb-surface-mark-color); border-radius: 50%; }
35808
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="social"] [data-slot="social"] > * > * { width: 19px; height: 19px; }
35809
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="panel"] { margin-top: 2.5rem; max-width: 36rem; width: 100%; margin-inline: auto; }
35810
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="base"] { --rb-surface-text-color: var(--rb-surface-muted-color); --rb-surface-link-color: var(--rb-surface-muted-color); gap: 0.5rem 1.5rem; font-size: 0.9375rem; color: var(--rb-surface-muted-color); }
35811
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="stack"] > [data-slot="base"] { margin-top: 3.5rem; padding: 1.5rem 0 0; border-top: 1px solid var(--rb-surface-line-color); }
35812
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="base"] > [data-slot="base"] { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: space-between; width: 100%; }
35813
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="base"] [data-slot="navigation"] { font-family: var(--font-body); font-size: inherit; }
35814
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="caption"] { font-size: inherit; letter-spacing: normal; }
35815
+
35816
+ @container rb-site (max-width: 767px) {
35817
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
35818
+ [data-skin="lantern"]:is(*, :scope) [data-arrangement="footer-centred"] { padding-top: 4rem; }
35819
+ [data-skin="lantern"]:is(*, :scope) [data-arrangement="footer-centred"] [data-slot="navigation"] [data-slot="stack"]:has(> :not([data-slot])) { gap: 0.5rem 1.5rem; }
35820
+ [data-skin="lantern"]:is(*, :scope) [data-arrangement="footer-centred"] [data-slot="base"] > [data-slot="base"] { justify-content: center; text-align: center; }
35821
+ }
35822
+ }
35823
+
35824
+ /* Leaf utilities inherit the decided footer type, including the quieter legal row. */
35825
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="navigation"] * { font-family: inherit; font-size: inherit; }
35826
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="contact"] * { font-family: var(--font-body); font-size: inherit; }
35827
+
35828
+ /* Visual review: contact emphasis, quiet hours, and balanced sparse/panel endings. */
35829
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="contact"] > [data-slot="stack"] > [data-slot="stack"] > * { text-decoration: underline; text-decoration-color: var(--rb-surface-mark-color); text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
35830
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="contact"] > [data-slot="stack"] > :not([data-slot]) { font-style: normal; opacity: 1; color: var(--rb-surface-muted-color); }
35831
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="schedule"] [data-slot="inline"] > :first-child { text-transform: none; letter-spacing: normal; font-weight: 500; font-size: inherit; }
35832
+ [data-skin="lantern"] [data-arrangement="footer-centred"]:not(:has([data-slot="base"])) { padding-bottom: 4rem; }
35833
+ [data-skin="lantern"] [data-arrangement="footer-centred"] > [data-slot="panel"] { margin-bottom: 3.5rem; }
35834
+ [data-skin="lantern"] [data-arrangement="footer-centred"][data-slot="section"] [data-slot="head"]::after { border-width: 1.5px; }
35835
+ [data-skin="lantern"] [data-arrangement="footer-centred"] [data-slot="panel"] [data-slot="group-label"] { font-family: var(--font-body); font-weight: 500; font-size: 0.8125rem; letter-spacing: 0.08em; color: var(--rb-surface-text-color); }
35836
+
35837
+ /* ================================================= MEDIA TEXT: CIRCLE BESIDE
35838
+ * Kept separate from footer dressing for concurrent footer work.
35839
+ */
35840
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="frame"] {
35841
+ display: grid;
35842
+ grid-template-columns: repeat(12, minmax(0, 1fr));
35843
+ column-gap: var(--rb-skin-gutter);
35844
+ align-items: center;
35845
+ }
35846
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="media"] { grid-column: 1 / 6; min-width: 0; }
35847
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="copy"] {
35848
+ grid-column: 7 / 13;
35849
+ display: grid;
35850
+ gap: var(--rb-skin-copy-gap);
35851
+ justify-items: start;
35852
+ max-width: 34rem;
35853
+ }
35854
+ [data-skin="lantern"] [data-treat="circle-beside"][data-knob-image-position="right"] [data-slot="media"] { grid-column: 8 / 13; grid-row: 1; }
35855
+ [data-skin="lantern"] [data-treat="circle-beside"][data-knob-image-position="right"] [data-slot="copy"] { grid-column: 1 / 7; grid-row: 1; }
35856
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="head"]:not(:has(*)) { display: none; }
35857
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="head"] {
35858
+ justify-self: start;
35859
+ justify-items: start;
35860
+ text-align: start;
35861
+ margin: 0;
35862
+ padding-top: 2rem;
35863
+ }
35864
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="head"] > [data-slot="heading"] { text-align: start; }
35865
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="head"]::before {
35866
+ left: 0;
35867
+ transform: none;
35868
+ background: linear-gradient(to right, transparent 0 18px, var(--rb-surface-mark-color) 18px) center 4px / 52px 1px no-repeat;
35869
+ width: 52px;
35870
+ height: 9px;
35871
+ }
35872
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="head"]::after { left: 1px; transform: rotate(45deg); }
35873
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="intro"] { font-size: 1.1875rem; line-height: 1.65; max-width: none; color: var(--rb-surface-muted-color); }
35874
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="intro"] > [data-slot="lede"] { font-size: inherit; line-height: inherit; color: var(--rb-surface-text-color); }
35875
+ [data-skin="lantern"] [data-treat="circle-beside"][data-has-photo="false"] [data-slot="media"]:not(:has([data-placeholder-field])) { display: none; }
35876
+ [data-skin="lantern"] [data-treat="circle-beside"][data-has-photo="false"] [data-slot="frame"]:not(:has([data-placeholder-field])) > [data-slot="copy"] { grid-column: 1 / -1; grid-row: auto; }
35877
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-placeholder-field] { aspect-ratio: 1; height: auto; border-radius: 50%; overflow: hidden; }
35878
+ @container rb-site (max-width: 767px) {
35879
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
35880
+ [data-skin="lantern"]:is(*, :scope) [data-treat="circle-beside"] [data-slot="frame"] { grid-template-columns: minmax(0, 1fr); row-gap: 2.5rem; }
35881
+ [data-skin="lantern"]:is(*, :scope) [data-treat="circle-beside"] [data-slot="frame"] > [data-slot="media"] { grid-column: 1 / -1; grid-row: auto; width: 76%; justify-self: center; }
35882
+ [data-skin="lantern"]:is(*, :scope) [data-treat="circle-beside"] [data-slot="frame"] > [data-slot="copy"] { grid-column: 1 / -1; grid-row: auto; }
35883
+ }
35884
+ }
35885
+
35886
+ /* ---------------------------------------------------- image gallery: Lucy Looks */
35887
+ [data-skin="lantern"] [data-arrangement="tiles"] [data-slot="head"] { width: 100%; }
35888
+ [data-skin="lantern"] [data-arrangement="tiles"] [data-slot="head"]:not(:has([data-slot="heading"])) { padding-top: 0; }
35889
+ [data-skin="lantern"] [data-arrangement="tiles"] [data-slot="head"]:not(:has([data-slot="heading"]))::before,
35890
+ [data-skin="lantern"] [data-arrangement="tiles"] [data-slot="head"]:not(:has([data-slot="heading"]))::after { display: none; }
35891
+ [data-skin="lantern"] [data-treat="square-tiles"] [data-slot="items"] { --rb-skin-gallery-gap: 0; border-radius: var(--rb-skin-radius, 10px); overflow: hidden; }
35892
+ [data-skin="lantern"] [data-treat="square-tiles"] [data-slot="caption"] { display: none; }
35893
+ [data-skin="lantern"] [data-treat="arched-captions"] [data-slot="items"] { --rb-skin-gallery-gap: clamp(1rem, 3cqi, 2.5rem); align-items: start; }
35894
+ [data-skin="lantern"] [data-treat="arched-captions"] [data-slot="item"]:nth-child(3n + 2) { transform: translateY(4.5rem); }
35895
+ [data-skin="lantern"] [data-treat="arched-captions"] [data-slot="items"]:has([data-slot="item"]:nth-child(3n + 2)) { padding-bottom: 4.5rem; }
35896
+ [data-skin="lantern"] [data-treat="arched-captions"] [data-slot="media"] { aspect-ratio: 3 / 4; border-radius: var(--lantern-arch); }
35897
+ [data-skin="lantern"] [data-treat="arched-captions"] [data-slot="caption"] { margin-top: 1rem; text-align: center; font-size: 1rem; line-height: 1.5; color: var(--rb-surface-muted-color); }
35898
+ @container rb-site (max-width: 767px) {
35899
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
35900
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-captions"] [data-slot="item"]:nth-child(3n + 2) { transform: none; }
35901
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-captions"] [data-slot="item"]:nth-child(2n) { transform: translateY(3rem); }
35902
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-captions"] [data-slot="items"]:has([data-slot="item"]:nth-child(3n + 2)) { padding-bottom: 0; }
35903
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-captions"] [data-slot="items"]:has([data-slot="item"]:nth-child(2n)) { padding-bottom: 3rem; }
35904
+ }
35905
+ }
35906
+
35907
+ /* ---------------------------------------------------- newsletter: Signup in an arch */
35908
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="frame"] {
35909
+ display: grid; grid-template-columns: minmax(0, 1fr); justify-items: center;
35910
+ text-align: center; gap: 1.125rem; width: 100%; max-width: 53.75rem; margin-inline: auto;
35911
+ padding: 7rem clamp(1.5rem, 5cqi, 5rem) 3rem;
35912
+ border: 1px solid var(--rb-surface-mark-color); border-bottom: 0; border-radius: var(--lantern-arch-wide);
35913
+ }
35914
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="frame"]::before {
35915
+ content: ""; position: absolute; inset: 8px 8px 0; pointer-events: none;
35916
+ border: 1px solid var(--rb-surface-mark-color); border-bottom: 0; border-radius: var(--lantern-arch-wide); opacity: 0.55;
35917
+ }
35918
+ [data-skin="lantern"] [data-treat="signup-arch"][data-knob-arch-frame="false"] [data-slot="frame"] { border-color: transparent; }
35919
+ [data-skin="lantern"] [data-treat="signup-arch"][data-knob-arch-frame="false"] [data-slot="frame"]::before { display: none; }
35920
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="head"] { margin: 0; width: 100%; }
35921
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="head"]:not(:has(*)) { display: none; }
35922
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="head"]:not(:has([data-slot="heading"])) { padding-top: 0; }
35923
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="head"]:not(:has([data-slot="heading"]))::before,
35924
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="head"]:not(:has([data-slot="heading"]))::after { display: none; }
35925
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="intro"] { --rb-surface-text-color: var(--rb-surface-muted-color); color: var(--rb-surface-muted-color); }
35926
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="panel"] { width: 100%; max-width: 44rem; margin-top: 1.25rem; text-align: left; }
35927
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="grid"] { display: flex; flex-direction: row; flex-wrap: wrap; gap: 1rem; align-items: end; }
35928
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="items"] { display: contents; }
35929
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="item"] { display: grid; gap: 0.4rem; min-width: 0; flex: 1 1 12rem; margin: 0; }
35930
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="row"] { display: grid; gap: 0.4rem; min-width: 0; flex: 1.35 1 16rem; margin: 0; }
35931
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="fact-label"] { font-size: 1rem; font-weight: 500; color: var(--rb-surface-text-color); }
35932
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="control"] {
35933
+ width: 100%; min-width: 0; min-height: 52px; padding: 0.8rem 1.25rem;
35934
+ border: 1px solid var(--rb-surface-muted-color); border-radius: 9999px;
35935
+ background: transparent; color: var(--rb-surface-text-color); font-family: var(--font-body); font-size: 1.0625rem; line-height: 1.4;
35936
+ }
35937
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="control"]::placeholder { color: var(--rb-surface-muted-color); opacity: 1; }
35938
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="control"]:focus-visible { outline: 2px solid var(--rb-surface-mark-color); outline-offset: 2px; border-color: var(--rb-surface-mark-color); }
35939
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="actions"] { margin: 0; flex: 0 0 auto; }
35940
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="action"] { min-height: 52px; padding-block: 0; }
35941
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="grid"] > :not([data-slot]) { flex-basis: 100%; }
35942
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="caption"] { margin-top: 1.25rem; font-size: 1rem; line-height: 1.5; color: var(--rb-surface-muted-color); text-align: center; }
35943
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="outcome"] { width: 100%; margin-top: 1rem; font-family: var(--font-heading); font-size: 1.5rem; line-height: 1.3; text-align: center; }
35944
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="frame"]:not(:has([data-slot="heading"])) { padding-top: 4.5rem; }
35945
+ [data-skin="lantern"] [data-treat="signup-arch"][data-knob-arch-frame="false"] [data-slot="frame"] { padding-top: 0; }
35946
+ [data-skin="lantern"] [data-treat="signup-arch"] [data-slot="panel"]:not(:has([data-slot="item"])) { max-width: 34rem; }
35947
+ @container rb-site (max-width: 767px) {
35948
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
35949
+ [data-skin="lantern"]:is(*, :scope) [data-treat="signup-arch"] [data-slot="frame"] { padding: 5rem 1.25rem 2.5rem; }
35950
+ [data-skin="lantern"]:is(*, :scope) [data-treat="signup-arch"] [data-slot="grid"] { flex-direction: column; align-items: stretch; }
35951
+ [data-skin="lantern"]:is(*, :scope) [data-treat="signup-arch"] :is([data-slot="item"], [data-slot="row"], [data-slot="actions"]) { flex: none; width: 100%; }
35952
+ [data-skin="lantern"]:is(*, :scope) [data-treat="signup-arch"] [data-slot="action"] { width: 100%; }
35953
+ }
35954
+ }
35955
+
35956
+ /* ---------------------------------------------------- form: beside introduction, arched panel */
35957
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="frame"] { grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 2rem; align-items: start; }
35958
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="copy"] { grid-column: 1 / 6; padding-top: 0; min-width: 0; }
35959
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="head"] { padding-top: 5rem; display: grid; justify-items: start; justify-self: start; margin-inline: 0; width: 100%; text-align: left; }
35960
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="head"] > :is([data-slot="heading"], [data-slot="intro"]) { text-align: left; }
35961
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="head"]::before { width: 52px; height: 9px; left: 0; transform: none; background: linear-gradient(to right, transparent 0 18px, var(--rb-surface-mark-color) 18px) center 4px / 52px 1px no-repeat; }
35962
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="head"]::after { left: 0; transform: rotate(45deg); }
35963
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="intro"] { font-size: 1.1875rem; line-height: 1.65; }
35964
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="head"]:not(:has([data-slot="heading"])) { padding-top: 0; }
35965
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="head"]:not(:has([data-slot="heading"]))::before,
35966
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="head"]:not(:has([data-slot="heading"]))::after { display: none; }
35967
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="copy"]:not(:has([data-slot="heading"], [data-slot="intro"])) { display: none; }
35968
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="panel"] {
35969
+ grid-column: 7 / 13; min-width: 0; padding: 5.5rem clamp(1.5rem, 3cqi, 2.75rem) 2.5rem;
35970
+ border: 1px solid var(--rb-surface-mark-color); border-radius: 50% 50% var(--rb-skin-radius, 10px) var(--rb-skin-radius, 10px) / 140px 140px var(--rb-skin-radius, 10px) var(--rb-skin-radius, 10px);
35971
+ }
35972
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="panel"]::before {
35973
+ content: ""; position: absolute; inset: 8px 8px auto; height: 160px; pointer-events: none;
35974
+ border: 1px solid var(--rb-surface-mark-color); border-bottom: 0; border-radius: 50% 50% 0 0 / 132px 132px 0 0; opacity: 0.55;
35975
+ mask-image: linear-gradient(currentcolor 40%, transparent);
35976
+ }
35977
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="frame"]:not(:has([data-slot="heading"], [data-slot="intro"])) > [data-slot="panel"] { grid-column: 1 / -1; width: 100%; max-width: 44rem; margin-inline: auto; }
35978
+ [data-skin="lantern"] [data-treat="arched-panel"][data-knob-arch-frame="false"] [data-slot="panel"] { border-color: transparent; border-radius: var(--rb-skin-radius, 10px); padding-top: 2.5rem; }
35979
+ [data-skin="lantern"] [data-treat="arched-panel"][data-knob-arch-frame="false"] [data-slot="panel"]::before { display: none; }
35980
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="grid"] { display: grid; gap: 1.25rem; }
35981
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="group"] { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; }
35982
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="item"] { min-width: 0; margin: 0; }
35983
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="fact-label"] { font-weight: 500; color: var(--rb-surface-text-color); font-size: 1rem; }
35984
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="control"] {
35985
+ width: 100%; min-width: 0; padding: 0.875rem 1rem; border: 1px solid var(--rb-surface-muted-color);
35986
+ border-radius: var(--rb-skin-radius, 10px); background: transparent; color: var(--rb-surface-text-color); font-family: var(--font-body); font-size: 1.0625rem;
35987
+ }
35988
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-control="select"] { padding-right: 2.5rem; background-image: linear-gradient(45deg, transparent 50%, var(--rb-surface-text-color) 50%), linear-gradient(135deg, var(--rb-surface-text-color) 50%, transparent 50%); background-position: calc(100% - 22px) 50%, calc(100% - 16px) 50%; background-size: 6px 6px; background-repeat: no-repeat; }
35989
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="intro"] > [data-slot="lede"] { font-size: inherit; line-height: inherit; color: var(--rb-surface-text-color); }
35990
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="control"]::placeholder { color: var(--rb-surface-muted-color); opacity: 1; }
35991
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="mark"] { border-color: var(--rb-surface-muted-color); }
35992
+ [data-skin="lantern"] [data-treat="arched-panel"] :is([data-slot="control"], [data-slot="mark"]):focus-visible { outline: 2px solid var(--rb-surface-mark-color); outline-offset: 2px; }
35993
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="actions"] { margin-top: 0.5rem; }
35994
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="inline"] { display: flex; flex-wrap: wrap; gap: 1rem; }
35995
+ [data-skin="lantern"] [data-treat="arched-panel"] [data-slot="outcome"] { padding: 1rem 0 2rem; text-align: center; font-family: var(--font-heading); font-size: 1.5rem; line-height: 1.3; color: var(--rb-surface-text-color); }
35996
+ @container rb-site (max-width: 1023px) {
35997
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
35998
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-panel"] [data-slot="frame"] { grid-template-columns: minmax(0, 1fr); }
35999
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-panel"] :is([data-slot="copy"], [data-slot="panel"]) { grid-column: 1 / -1; }
36000
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-panel"] [data-slot="copy"] { padding-top: 0; }
36001
+ }
36002
+ }
36003
+ @container rb-site (max-width: 767px) {
36004
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
36005
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-panel"] [data-slot="panel"] { padding: 4.5rem 1.125rem 1.75rem; border-radius: 50% 50% var(--rb-skin-radius, 10px) var(--rb-skin-radius, 10px) / 90px 90px var(--rb-skin-radius, 10px) var(--rb-skin-radius, 10px); }
36006
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-panel"] [data-slot="panel"]::before { border-radius: 50% 50% 0 0 / 84px 84px 0 0; height: 110px; }
36007
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-panel"][data-knob-arch-frame="false"] [data-slot="panel"] { padding-top: 1.75rem; border-radius: var(--rb-skin-radius, 10px); }
36008
+ [data-skin="lantern"]:is(*, :scope) [data-treat="arched-panel"] [data-slot="group"] { grid-template-columns: minmax(0, 1fr); }
36009
+ }
36010
+ }
36011
+
36012
+ /* Lucy slice 5 — Reading column. Existing rich-text nodes carry semantic hooks. */
36013
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="copy"] { width: 100%; max-width: 36rem; margin-inline: auto; align-items: stretch; gap: 1.25rem; text-align: left; }
36014
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="item-body"] { width: 100%; font-size: 1.1875rem; line-height: 1.7; text-align: left; }
36015
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="lede"] { font-size: clamp(1.3125rem, 1.8cqi, 1.5rem); line-height: 1.55; color: var(--rb-surface-text-color); }
36016
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="heading"] { position: relative; padding-top: 2rem; margin-block: 2.25rem 1.25rem; font-size: clamp(1.75rem, 2.6cqi, 2.125rem); line-height: 1.12; text-align: center; color: var(--rb-surface-heading-color); }
36017
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="heading"]::before { content: ""; position: absolute; top: 0; left: 50%; width: 92px; height: 9px; transform: translateX(-50%); background: linear-gradient(to right, var(--rb-surface-mark-color) 0 34px, transparent 34px 58px, var(--rb-surface-mark-color) 58px) center 4px / 92px 1px no-repeat; }
36018
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="heading"]::after { content: ""; position: absolute; top: 1px; left: 50%; width: 7px; height: 7px; border: 1.5px solid var(--rb-surface-mark-color); transform: translateX(-50%) rotate(45deg); }
36019
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="quote"] { position: relative; margin: 2rem 0; padding: 2.25rem 0.5rem 2rem; border: 0; border-bottom: 1px solid var(--rb-surface-line-color); text-align: center; font-family: var(--font-heading); font-size: clamp(1.5rem, 2.3cqi, 1.875rem); line-height: 1.3; text-wrap: balance; color: var(--rb-surface-heading-color); }
36020
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="quote"] > * { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; color: inherit; }
36021
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="quote"]::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 1px; background: linear-gradient(to right, var(--rb-surface-line-color) 0 calc(50% - 12px), transparent calc(50% - 12px) calc(50% + 12px), var(--rb-surface-line-color) calc(50% + 12px)); }
36022
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="quote"]::after { content: ""; position: absolute; top: -4px; left: 50%; width: 9px; height: 9px; border: 1.5px solid var(--rb-surface-mark-color); transform: translateX(-50%) rotate(45deg); }
36023
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="photo"] { display: block; width: 100%; max-width: none; height: auto; aspect-ratio: 4 / 3; object-fit: cover; margin: 1.5rem 0; border-radius: 50% 50% 0 0 / 90px 90px 0 0; }
36024
+ @container rb-site (min-width: 1024px) {
36025
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
36026
+ [data-skin="lantern"]:is(*, :scope) [data-treat="reading-column"] [data-slot="photo"] { width: calc(100% + 12rem); margin-inline: -6rem; border-radius: var(--lantern-arch-wide); }
36027
+ }
36028
+ }
36029
+
36030
+ /* Reading-column flow owns one gap; optional title spans the whole column. */
36031
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="item-body"] { display: grid; gap: 1.25rem; }
36032
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="item-body"] > * { margin-block: 0; }
36033
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="item-body"] > [data-slot="heading"] { margin-top: 2.25rem; }
36034
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="item-body"] > [data-slot="quote"] { margin-block: 2rem; }
36035
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="item-body"] > [data-slot="photo"] { margin-block: 1.5rem; }
36036
+ [data-skin="lantern"] [data-treat="reading-column"] [data-slot="copy"] > [data-slot="heading"] { width: 100%; margin-top: 0; font-size: clamp(2.25rem, 3.9cqi, 3.375rem); }
36037
+
36038
+ /* Rich-text links use the same ink and decorative underline as the mockup. */
36039
+ [data-skin="lantern"] [data-treat="circle-beside"] [data-slot="intro"] [data-control="link"] { color: var(--rb-surface-text-color); text-decoration-color: var(--rb-surface-mark-color); text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
36040
+
35210
36041
  /* =============================================================================
35211
36042
  * Measure skin (issue 1575 Phase 1b, D14).
35212
36043
  *