@riverbankcms/sdk 0.153.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 (216) hide show
  1. package/dist/{EventEmbeddedCheckoutStep-veN-QiAE.mjs → EventEmbeddedCheckoutStep-ba9npQtb.mjs} +1 -1
  2. package/dist/{PreviewEditorSidebar-jI_4DTZY.mjs → PreviewEditorSidebar-C7FiaxlF.mjs} +194 -22
  3. package/dist/{PreviewEditorUI-ORkVZhfu.mjs → PreviewEditorUI-DFst50q1.mjs} +20 -44
  4. package/dist/{SdkPreviewModeRuntime-DaNqevI1.mjs → SdkPreviewModeRuntime-BUNV_YHZ.mjs} +49 -32
  5. package/dist/{SiteChromeCustomizeContext-CgNuBHC0.mjs → SiteChromeCustomizeContext-DEj7qppF.mjs} +3558 -2321
  6. package/dist/{ThemedButton-X2UxhW6F.mjs → ThemedButton-C8kzu0hY.mjs} +400 -81
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +364 -130
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +1035 -477
  9. package/dist/_dts/api/src/billing.d.ts +2 -0
  10. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +78 -0
  11. package/dist/_dts/api/src/bookingAdjustments.d.ts +3 -2
  12. package/dist/_dts/api/src/bookingOperations.d.ts +7 -2
  13. package/dist/_dts/api/src/bookingPeople.d.ts +19 -0
  14. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +8 -0
  15. package/dist/_dts/api/src/bookingRecords.d.ts +4 -106
  16. package/dist/_dts/api/src/bookings.d.ts +2 -3
  17. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  18. package/dist/_dts/api/src/endpoints.d.ts +88 -43
  19. package/dist/_dts/api/src/index.d.ts +4 -2
  20. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
  21. package/dist/_dts/api/src/moneyPayments.d.ts +116 -0
  22. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +2 -0
  23. package/dist/_dts/api/src/sdk-event-upsert.d.ts +2 -2
  24. package/dist/_dts/api/src/sdkThemeWire.d.ts +162 -103
  25. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +18 -0
  26. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +17 -16
  27. package/dist/_dts/api/src/siteSettings.d.ts +1 -0
  28. package/dist/_dts/api/src/stripeConnectSetup.d.ts +90 -0
  29. package/dist/_dts/api/src/types.d.ts +11 -31
  30. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -4
  31. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  32. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -96
  33. package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +1 -1
  34. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +4 -1
  35. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +1 -0
  36. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/blocks/events/shared/fields.d.ts +0 -4
  39. package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +0 -1
  40. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +4 -4
  41. package/dist/_dts/blocks/src/system/blocks/form.d.ts +10 -0
  42. package/dist/_dts/blocks/src/system/blocks/image-gallery/fields.d.ts +1 -0
  43. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +6 -1
  44. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  45. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -45
  46. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +12 -0
  47. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime-layout.d.ts +23 -0
  48. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime-profile.d.ts +20 -0
  49. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +17 -16
  50. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +1 -1
  51. package/dist/_dts/blocks/src/system/customize/facets.d.ts +75 -9
  52. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +24 -24
  53. package/dist/_dts/blocks/src/system/node/fragments/index.d.ts +1 -0
  54. package/dist/_dts/blocks/src/system/node/fragments/lookSlot.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/node/fragments/responsiveTwoColumn.d.ts +3 -1
  56. package/dist/_dts/blocks/src/system/node/fragments/sectionHead.d.ts +15 -0
  57. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +18 -198
  58. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +9 -99
  59. package/dist/_dts/blocks/src/system/runtime/lookSurfaces.d.ts +16 -4
  60. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +2 -1
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/lookPresentation.d.ts +10 -4
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +1 -1
  63. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +29 -17
  65. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -2
  66. package/dist/_dts/blocks/src/system/runtime/nodes/form.interactive.d.ts +11 -79
  67. package/dist/_dts/blocks/src/system/runtime/nodes/form.parts.d.ts +7 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/form.server.d.ts +2 -13
  69. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +8 -72
  70. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +6 -6
  71. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +3 -2
  72. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  73. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -0
  74. package/dist/_dts/blocks/src/system/transforms/registry/footerArrangement.d.ts +6 -0
  75. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +0 -11
  76. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -10
  77. package/dist/_dts/commerce/src/purchase/orderConfirmationPlanning.d.ts +1 -0
  78. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +5 -2
  79. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +1 -1
  80. package/dist/_dts/content-editor/src/FooterNavigationLayoutControl.d.ts +6 -3
  81. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +1 -1
  82. package/dist/_dts/content-editor/src/footerComposer.d.ts +2 -1
  83. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +3 -1
  84. package/dist/_dts/content-editor/src/footerNavigationLayoutState.d.ts +56 -0
  85. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +2 -1
  86. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +3 -4
  87. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +11 -8
  88. package/dist/_dts/core/src/booking-refunds.d.ts +2 -0
  89. package/dist/_dts/core/src/date-display.d.ts +85 -0
  90. package/dist/_dts/core/src/date-time-formatter.d.ts +2 -0
  91. package/dist/_dts/core/src/footer-arrangement.d.ts +8 -1
  92. package/dist/_dts/core/src/footer-composition-types.d.ts +6 -1
  93. package/dist/_dts/core/src/footer-composition.d.ts +1 -1
  94. package/dist/_dts/core/src/footer-navigation-layout.d.ts +3 -0
  95. package/dist/_dts/core/src/index.d.ts +2 -0
  96. package/dist/_dts/core/src/mailing-list-setup.d.ts +3 -0
  97. package/dist/_dts/core/src/mailing-list-submission.d.ts +6 -1
  98. package/dist/_dts/core/src/public-profile.d.ts +3 -1
  99. package/dist/_dts/core/src/scheduled-date-time.d.ts +69 -0
  100. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +50 -9
  101. package/dist/_dts/db/src/schemas/forms.d.ts +16 -16
  102. package/dist/_dts/preview-next/src/client/blocks/ArrangementBlockToolbar.d.ts +2 -1
  103. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  104. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  105. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  106. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +27 -5
  107. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +2 -0
  108. package/dist/_dts/preview-next/src/client/preview/useConfirmedPreferenceRecord.d.ts +12 -0
  109. package/dist/_dts/preview-next/src/client/preview/usePersistedFooterPreferences.d.ts +26 -0
  110. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +40 -2
  111. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  112. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -46
  113. package/dist/_dts/sdk/src/date-time/index.d.ts +2 -68
  114. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  115. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -1
  116. package/dist/_dts/sdk/src/version.d.ts +1 -1
  117. package/dist/_dts/theme-core/src/buttons/buttonColourContract.d.ts +2 -0
  118. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +2 -0
  119. package/dist/_dts/theme-core/src/buttons/styles/recipes/lanternRecipes.d.ts +60 -0
  120. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +57 -0
  121. package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +10 -1
  122. package/dist/_dts/theme-core/src/buttons/types.d.ts +358 -46
  123. package/dist/_dts/theme-core/src/buttons/typography.d.ts +24 -0
  124. package/dist/_dts/theme-core/src/cards/types.d.ts +8 -8
  125. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +1 -1
  126. package/dist/_dts/theme-core/src/footer/generateFooterCss.d.ts +4 -1
  127. package/dist/_dts/theme-core/src/footer/mode.d.ts +2 -11
  128. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  129. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +234 -147
  130. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
  131. package/dist/_dts/theme-core/src/schema.d.ts +300 -192
  132. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +23 -7
  133. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  134. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +4 -6
  135. package/dist/_dts/theme-core/src/site-styles/compileFooterAgainstRow.d.ts +121 -0
  136. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -0
  137. package/dist/_dts/theme-core/src/site-styles/footerLookDefaults.d.ts +45 -0
  138. package/dist/_dts/theme-core/src/site-styles/footerLookRecipe.d.ts +50 -0
  139. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +9 -35
  140. package/dist/_dts/theme-core/src/site-styles/footerPreferences.d.ts +29 -0
  141. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +2 -3
  142. package/dist/_dts/theme-core/src/site-styles/index.d.ts +4 -0
  143. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +2 -2
  144. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  145. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +8 -0
  146. package/dist/_dts/theme-core/src/site-styles/themeParity.d.ts +1 -1
  147. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  148. package/dist/_dts/ui/src/card.d.ts +1 -1
  149. package/dist/client/{BookingMailingListNote-DrchYW1m.mjs → BookingMailingListNote-CNoSqFtf.mjs} +2 -2
  150. package/dist/client/{CardListItem-CC_GVmF6.mjs → CardListItem-BkTkqBkh.mjs} +3 -3
  151. package/dist/client/{CheckboxChoice-Dq30m3DO.mjs → CheckboxChoice-CHJpsty4.mjs} +1 -1
  152. package/dist/client/{DemoBookingPortalAccess-ojwbVUmx.mjs → DemoBookingPortalAccess-C7KQKFNt.mjs} +2 -2
  153. package/dist/client/{EventCombined.client-DyN0v0Xk.mjs → EventCombined.client-BgeYMjHJ.mjs} +5 -5
  154. package/dist/client/{EventEmbeddedCheckoutStep-CgfpKc3n.mjs → EventEmbeddedCheckoutStep-BTc_lTkM.mjs} +2 -2
  155. package/dist/client/{EventListing.client-CuOuvYMz.mjs → EventListing.client-ChRs9Hl2.mjs} +2 -2
  156. package/dist/client/{LeafletStaticMap-B0WhRr3j.mjs → LeafletStaticMap-C_dNQgd0.mjs} +1 -1
  157. package/dist/client/{RichText-C1fIXBzA.mjs → RichText-BI9bzbjo.mjs} +75 -42
  158. package/dist/client/{ThemedButton-B7HFqFBg.mjs → ThemedButton-wl3Z3wkH.mjs} +1 -1
  159. package/dist/client/{accordion-DCDVWSye.mjs → accordion-6Yz8Wd83.mjs} +1 -1
  160. package/dist/client/{bookingForm-BJ3C4GlM.mjs → bookingForm-i_pKIGiY.mjs} +8 -8
  161. package/dist/client/bookings.mjs +12565 -11839
  162. package/dist/client/{carousel-BSCBhfHY.mjs → carousel-DNqd_PjC.mjs} +2 -2
  163. package/dist/client/{carousel.client-GEtOGsxo.mjs → carousel.client-BUgjPbb6.mjs} +1 -1
  164. package/dist/client/{cart-Yv-aAtck.mjs → cart-D8OBHuF4.mjs} +3 -3
  165. package/dist/client/{checkout-B9xDkl30.mjs → checkout-F3-9IGLU.mjs} +3 -3
  166. package/dist/client/client.mjs +6109 -4778
  167. package/dist/client/{context-BOGe3rIA.mjs → context-Dg4ZrxDD.mjs} +1 -1
  168. package/dist/client/{eventCalendar-D6M0T9hs.mjs → eventCalendar-BUc7YIBM.mjs} +8 -8
  169. package/dist/client/{eventCombined-NM4UFBq8.mjs → eventCombined-BwfShk2a.mjs} +4 -4
  170. package/dist/client/{eventDetails-f_FhV4O8.mjs → eventDetails-BMOVC3go.mjs} +3 -3
  171. package/dist/client/{eventListing-WLkfAROh.mjs → eventListing-BwE9PM-t.mjs} +4 -4
  172. package/dist/client/{eventRegistration-D3ejfLvW.mjs → eventRegistration-CCWPYDc7.mjs} +9 -9
  173. package/dist/client/{form-D5Or2Jyu.mjs → form-CXFr0Gd5.mjs} +115 -51
  174. package/dist/client/{headerSection-hWgnv27V.mjs → headerSection-BX8qw8kH.mjs} +3 -3
  175. package/dist/client/hooks.mjs +2041 -1193
  176. package/dist/client/{locationMap-Di1K0O2S.mjs → locationMap-B3La71m0.mjs} +3 -3
  177. package/dist/client/{media-D29-F1u_.mjs → media-B1Cbv721.mjs} +1 -1
  178. package/dist/client/{newsletterForm-CwxcwTNO.mjs → newsletterForm-DnGyR0x7.mjs} +50 -14
  179. package/dist/client/{productDetail-BLSnhPdA.mjs → productDetail-BVgTqvkb.mjs} +3 -3
  180. package/dist/client/{productList-oGytONOX.mjs → productList-CcO7kUQw.mjs} +3 -3
  181. package/dist/client/{propsDecoder-lf_dTeZS.mjs → propsDecoder-B1OeWavE.mjs} +706 -229
  182. package/dist/client/rendering/client.mjs +11868 -11098
  183. package/dist/client/rendering/islands.mjs +17 -17
  184. package/dist/client/rendering.mjs +6058 -4676
  185. package/dist/client/{routeIslandApiConfig-Bc_WVPS8.mjs → routeIslandApiConfig-Dl4vglJm.mjs} +1 -1
  186. package/dist/client/{shop-BQ3bR7fA.mjs → shop-P72nX5Fs.mjs} +7 -7
  187. package/dist/client/{shop-commerce-DDPll6ZC.mjs → shop-commerce-Bt7uraDx.mjs} +8 -8
  188. package/dist/client/{shop-commerce-store-DO-e1pTe.mjs → shop-commerce-store-C1-mxSye.mjs} +1 -1
  189. package/dist/client/{shopShared-BylM9jh1.mjs → shopShared-Db-cRGu3.mjs} +4 -4
  190. package/dist/client/{useDiscountCodeUi-B1Puub2v.mjs → useDiscountCodeUi-jvAiUoUX.mjs} +1 -1
  191. package/dist/client/{useEventPagination-BBhkmQaT.mjs → useEventPagination-BdWpCniq.mjs} +6 -6
  192. package/dist/preview-next/before-render.mjs +133 -51
  193. package/dist/preview-next/client/runtime.mjs +3 -3
  194. package/dist/preview-next/editor-chrome.css +5 -2
  195. package/dist/preview-next/keepAlive.mjs +133 -51
  196. package/dist/preview-next/middleware.mjs +133 -51
  197. package/dist/{sdk-runtime-DWCvhJGu.mjs → sdk-runtime-DLhjF2Nw.mjs} +1 -1
  198. package/dist/server/components.mjs +11284 -10014
  199. package/dist/server/config-validation.mjs +2016 -1188
  200. package/dist/server/config.mjs +2016 -1188
  201. package/dist/server/data.mjs +2041 -1193
  202. package/dist/server/date-time.mjs +258 -116
  203. package/dist/server/index.mjs +134 -52
  204. package/dist/server/next.mjs +10571 -9350
  205. package/dist/server/page-converter.mjs +1629 -941
  206. package/dist/server/prebuild.mjs +1 -1
  207. package/dist/server/rendering/server.mjs +11156 -9872
  208. package/dist/server/rendering.mjs +11284 -10014
  209. package/dist/server/routing.mjs +2204 -1283
  210. package/dist/server/server.mjs +2369 -1570
  211. package/dist/server/theme-bridge.mjs +838 -124
  212. package/dist/server/theme.mjs +348 -64
  213. package/dist/{spinner-BYM-Y81w.mjs → spinner-MTooKfck.mjs} +1 -1
  214. package/dist/styles/index.css +254 -1
  215. package/package.json +1 -1
  216. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +0 -12
@@ -506,14 +506,6 @@ 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
- ]);
516
- //#endregion
517
509
  //#region ../core/src/result.ts
518
510
  function ok(value) {
519
511
  return {
@@ -872,6 +864,29 @@ const paletteSchema = z.object({
872
864
  };
873
865
  });
874
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
875
890
  //#region ../theme-core/src/buttons/types.ts
876
891
  /**
877
892
  * Standard semantic variant roles a theme exposes.
@@ -987,6 +1002,7 @@ const buttonEffectApplicationSchema = z.discriminatedUnion("effectId", [
987
1002
  z.strictObject({
988
1003
  effectId: z.literal("lift"),
989
1004
  options: z.strictObject({ amount: z.enum([
1005
+ "0.125",
990
1006
  "0.25",
991
1007
  "0.5",
992
1008
  "1"
@@ -1033,24 +1049,6 @@ const shadowSizeSchema = z.enum([
1033
1049
  "medium",
1034
1050
  "high"
1035
1051
  ]);
1036
- const textTransformSchema = z.enum([
1037
- "none",
1038
- "uppercase",
1039
- "lowercase",
1040
- "capitalize"
1041
- ]);
1042
- const fontWeightSchema = z.union([
1043
- z.literal(500),
1044
- z.literal(600),
1045
- z.literal(700),
1046
- z.literal(800)
1047
- ]);
1048
- const buttonTypographySchema = z.enum(["body", "heading"]);
1049
- const letterSpacingSchema = z.enum([
1050
- "tight",
1051
- "normal",
1052
- "loose"
1053
- ]);
1054
1052
  const hoverTransformSchema = z.enum([
1055
1053
  "none",
1056
1054
  "lift",
@@ -1122,7 +1120,8 @@ const paddingShorthandSchema = z.string().refine((value) => {
1122
1120
  }, { message: "Padding must be two space-separated CSS length tokens (e.g. \"0.5rem 1rem\"). Use `0` for zero." });
1123
1121
  const buttonSizeConfigSchema = z.object({
1124
1122
  padding: paddingShorthandSchema,
1125
- fontSize: z.string().optional()
1123
+ fontSize: z.string().optional(),
1124
+ borderRadius: z.string().optional()
1126
1125
  });
1127
1126
  /**
1128
1127
  * `xl` is optional on the wire so themes persisted before the `xl` size was
@@ -1245,12 +1244,20 @@ const buttonVisualAppearanceSchema = z.strictObject({
1245
1244
  textTransform: textTransformSchema
1246
1245
  }),
1247
1246
  effects: z.array(buttonEffectApplicationSchema),
1247
+ transform: z.literal("none").optional(),
1248
1248
  contextualHover: contextualButtonHoverSchema.optional()
1249
1249
  });
1250
1250
  const buttonVisualStatesSchema = z.strictObject({
1251
1251
  base: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
1252
1252
  hover: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
1253
- 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
+ }),
1254
1261
  active: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
1255
1262
  disabled: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema })
1256
1263
  });
@@ -1875,6 +1882,10 @@ function validateButtonTextContrast(input) {
1875
1882
  }
1876
1883
  };
1877
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
+ }
1878
1889
  //#endregion
1879
1890
  //#region ../theme-core/src/buttons/contextualHover.ts
1880
1891
  function resolveContextualHoverPreference(input) {
@@ -1972,7 +1983,7 @@ function candidate(family, shade, currentShade, direction, seedHex, palette) {
1972
1983
  }
1973
1984
  function hasSafeTextContrast(token, palette) {
1974
1985
  const background = palette[token];
1975
- const foreground = palette[onColorTokenName(token)];
1986
+ const foreground = palette[solidForegroundToken(token)];
1976
1987
  return typeof background === "string" && typeof foreground === "string" && contrastRatio(background, foreground) >= BUTTON_CONTRAST_POLICY.textMinimumRatio;
1977
1988
  }
1978
1989
  function isSafeCandidate(token, palette, surface) {
@@ -2067,6 +2078,13 @@ function compileDeclaredVisualStates(input, states) {
2067
2078
  const colours = collectStateColours(mapVisualStates((state) => compileDeclaredVisualState(input, states, state, state === "hover" ? hover.treatment : states[state].background)));
2068
2079
  return colours.ok ? {
2069
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,
2070
2088
  contextualHoverRepair: hover.repair
2071
2089
  } : colours;
2072
2090
  }
@@ -2204,7 +2222,7 @@ function resolveFocusIndicator(colour) {
2204
2222
  function resolveSolid(input, backgroundToken, edge) {
2205
2223
  const backgroundHex = paletteHex(input, backgroundToken);
2206
2224
  if (!backgroundHex.ok) return backgroundHex;
2207
- const foregroundToken = unsafeAsOpaqueButtonColourToken(onColorTokenName(backgroundToken));
2225
+ const foregroundToken = unsafeAsOpaqueButtonColourToken(solidForegroundToken(backgroundToken));
2208
2226
  const foregroundHex = input.palette[foregroundToken];
2209
2227
  if (typeof foregroundHex !== "string") return {
2210
2228
  ok: false,
@@ -3420,7 +3438,7 @@ function resolvedButtonFocusDeclarations(indicator, role) {
3420
3438
  ["outline", value("outline", `2px solid ${indicator.innerCss}`)],
3421
3439
  ["outline-offset", value("outline-offset", "2px")],
3422
3440
  ["box-shadow", value("box-shadow", `0 0 0 4px ${indicator.outerCss}`)]
3423
- ] : [["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`)]];
3424
3442
  }
3425
3443
  /**
3426
3444
  * Disabled buttons are deliberately muted as unavailable controls. Native
@@ -3463,6 +3481,287 @@ function normalizeAppearance(appearance) {
3463
3481
  };
3464
3482
  }
3465
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
3466
3765
  //#region ../theme-core/src/buttons/styles/recipes/fulcrumRecipe.ts
3467
3766
  const fulcrumSizes = {
3468
3767
  sm: {
@@ -4204,7 +4503,10 @@ const BUTTON_STYLE_IDS = [
4204
4503
  "offset-block",
4205
4504
  "ringed-pill",
4206
4505
  "square-outline",
4207
- "fulcrum"
4506
+ "fulcrum",
4507
+ "gilt-slab",
4508
+ "hairline-tab",
4509
+ "marquee"
4208
4510
  ];
4209
4511
  const quietArrowParametersSchema = z.object({ secondaryTreatment: z.enum(["outlined", "solid-accent"]) }).strict();
4210
4512
  const flatInkHoverTreatmentSchema = z.enum([
@@ -4241,7 +4543,10 @@ const buttonStyleSelectionSchema = z.discriminatedUnion("styleId", [
4241
4543
  selectionBranch("offset-block", emptyParametersSchema),
4242
4544
  selectionBranch("ringed-pill", emptyParametersSchema),
4243
4545
  selectionBranch("square-outline", emptyParametersSchema),
4244
- selectionBranch("fulcrum", emptyParametersSchema)
4546
+ selectionBranch("fulcrum", emptyParametersSchema),
4547
+ selectionBranch("gilt-slab", emptyParametersSchema),
4548
+ selectionBranch("hairline-tab", emptyParametersSchema),
4549
+ selectionBranch("marquee", emptyParametersSchema)
4245
4550
  ]);
4246
4551
  //#endregion
4247
4552
  //#region ../theme-core/src/buttons/styles/recipes/quietArrow.ts
@@ -7757,7 +8062,10 @@ const buttonStyleRecipes = [
7757
8062
  offsetBlockRecipe,
7758
8063
  ringedPillRecipe,
7759
8064
  squareOutlineRecipe,
7760
- fulcrumRecipe
8065
+ fulcrumRecipe,
8066
+ giltSlabRecipe,
8067
+ hairlineTabRecipe,
8068
+ marqueeRecipe
7761
8069
  ];
7762
8070
  const recipesById = new Map(buttonStyleRecipes.map((recipe) => [recipe.id, recipe]));
7763
8071
  function findButtonStyleRecipe(id) {
@@ -7773,6 +8081,9 @@ function resolveButtonStyleSelection(selection) {
7773
8081
  case "editorial-link": return resolveButtonStyleRecipe(editorialLinkRecipe, selection.parameters);
7774
8082
  case "pebble": return resolveButtonStyleRecipe(pebbleRecipe, selection.parameters);
7775
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);
7776
8087
  case "fulcrum": return resolveButtonStyleRecipe(fulcrumRecipe, selection.parameters);
7777
8088
  case "flat-ink": return resolveButtonStyleRecipe(flatInkRecipe, selection.parameters);
7778
8089
  case "brushed-wash": return resolveButtonStyleRecipe(brushedWashRecipe, selection.parameters);
@@ -10298,20 +10609,15 @@ const headerSchema = z.object({
10298
10609
  const footerVariant = z.enum([
10299
10610
  "simple",
10300
10611
  "columns",
10301
- "split"
10302
- ]);
10612
+ "split",
10613
+ "centred"
10614
+ ]).transform((value) => value === "columns" ? "simple" : value);
10303
10615
  const footerMaxWidth = z.enum(["container", "full"]);
10304
10616
  const footerNavLayoutMode = z.enum([
10305
10617
  "stack",
10306
10618
  "inline",
10307
10619
  "inline-wrap"
10308
10620
  ]);
10309
- const footerNavLayoutAlign = z.enum([
10310
- "start",
10311
- "center",
10312
- "end",
10313
- "space-between"
10314
- ]);
10315
10621
  const footerSpacing = z.enum([
10316
10622
  "none",
10317
10623
  "tight",
@@ -10320,12 +10626,6 @@ const footerSpacing = z.enum([
10320
10626
  "relaxed",
10321
10627
  "spacious"
10322
10628
  ]);
10323
- const footerLogoPlacement = z.enum([
10324
- "left",
10325
- "right",
10326
- "above",
10327
- "below"
10328
- ]);
10329
10629
  const footerLogoSize = z.enum([
10330
10630
  "sm",
10331
10631
  "md",
@@ -10366,17 +10666,8 @@ const footerBottomBarSchema = z.object({
10366
10666
  ]).optional()
10367
10667
  }).optional()
10368
10668
  });
10369
- const footerNavLayoutSchema = z.object({
10370
- layout: footerNavLayoutMode.optional(),
10371
- align: footerNavLayoutAlign.optional(),
10372
- gapX: footerSpacing.optional(),
10373
- gapY: footerSpacing.optional(),
10374
- columns: z.number().int().min(1).max(6).optional()
10375
- });
10669
+ const footerNavLayoutSchema = z.object({ layout: footerNavLayoutMode.optional() });
10376
10670
  const footerLogoSchema = z.object({
10377
- showLogo: z.boolean().default(true),
10378
- showLogoText: z.boolean().optional(),
10379
- placement: footerLogoPlacement.optional(),
10380
10671
  size: footerLogoSize.optional(),
10381
10672
  maxHeight: footerLogoMaxHeight.optional(),
10382
10673
  align: z.enum([
@@ -10386,15 +10677,8 @@ const footerLogoSchema = z.object({
10386
10677
  ]).optional()
10387
10678
  });
10388
10679
  const footerSchema = z.object({
10389
- /**
10390
- * SDK-only footer rendering mode.
10391
- *
10392
- * Historical persisted field; SDK rendering mode now lives in layout.footerMode.
10393
- */
10394
- mode: footerModeSchema.optional(),
10395
10680
  variant: footerVariant,
10396
10681
  maxWidth: footerMaxWidth,
10397
- showLogoText: z.boolean().optional(),
10398
10682
  background: headerBackgroundSchema.default({
10399
10683
  type: "color",
10400
10684
  color: "surface"
@@ -10789,6 +11073,55 @@ function generateOpaquePanelCss(input) {
10789
11073
  return `:where([data-theme-scope="${input.themeId}"]) ${panel.selector} {\n ${renderCssDeclarations(declarations)}\n}`;
10790
11074
  }).join("\n\n");
10791
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
+ }
10792
11125
  /** Block supply is capability, never a second Look catalogue. */
10793
11126
  const cardListBlockParts = {
10794
11127
  "block.feature-cards": [
@@ -10822,7 +11155,9 @@ const cardListKnobBlocks = [...cardListFamilyBlocks, "block.event-calendar"];
10822
11155
  const lookKnobBlocks = {
10823
11156
  actionStyle: cardListKnobBlocks,
10824
11157
  titleSize: "block.hero",
10825
- imagePosition: "block.hero",
11158
+ imagePosition: ["block.hero", "block.media-text"],
11159
+ imageShape: "block.media-text",
11160
+ aspectRatio: "block.media-text",
10826
11161
  stickerLine: "block.hero",
10827
11162
  smallCaption: "block.hero",
10828
11163
  candleGlow: "block.hero",
@@ -10832,7 +11167,11 @@ const lookKnobBlocks = {
10832
11167
  dates: "block.offerings-preview",
10833
11168
  showCapacity: "block.event-calendar",
10834
11169
  quoteCount: "block.testimonials",
10835
- archFrame: "block.testimonials",
11170
+ archFrame: [
11171
+ "block.testimonials",
11172
+ "block.newsletter-signup",
11173
+ "block.form"
11174
+ ],
10836
11175
  tilt: "block.testimonials"
10837
11176
  };
10838
11177
  function isArrangementAppearancePreset(preset) {
@@ -10859,13 +11198,25 @@ function cardListKnobDefaults(block, arrangement, knobs, defaults) {
10859
11198
  }
10860
11199
  };
10861
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
+ };
10862
11213
  function defineArrangementLook(id, block, name, arrangement, knobs, input = {}) {
10863
11214
  const mode = block === "event-calendar" ? "list" : null;
10864
11215
  return {
10865
11216
  id: asAppearancePresetId(id),
10866
11217
  blockKinds: [`block.${block}`],
10867
11218
  label: name,
10868
- target: block === "event-calendar" || block === "event-details" ? "events" : block === "hero" ? "hero" : block === "testimonials" ? "testimonials" : "feature-cards",
11219
+ target: arrangementLookTargets[block],
10869
11220
  structure: {
10870
11221
  kind: "arrangement",
10871
11222
  byMode: { [mode ?? "default"]: arrangement },
@@ -11685,6 +12036,15 @@ const appearancePresets = [
11685
12036
  eyebrowTreatment: "accent"
11686
12037
  }
11687
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
+ } }),
11688
12048
  defineArrangementLook("hero-photo-beside-text", "hero", "Photo beside the text", "split", heroKnobs, { slotRoles: { sticker: "highlight" } }),
11689
12049
  defineArrangementLook("hero-headline-row", "hero", "Big headline, then text and photo", "headline-row", heroKnobs, {
11690
12050
  slotRoles: { sticker: "highlight" },
@@ -14756,52 +15116,14 @@ defineLookOptionGroup({
14756
15116
  function asFooterLookId(value) {
14757
15117
  return value;
14758
15118
  }
14759
- function quietFooterLinks(theme) {
14760
- return {
14761
- ...theme.footer,
14762
- navStyle: "minimal",
14763
- navWeight: "regular",
14764
- navColor: "text",
14765
- navLinkStyle: {
14766
- typography: "body",
14767
- fontWeight: "regular",
14768
- textTransform: "none",
14769
- italic: false,
14770
- colorToken: "text",
14771
- hoverColorToken: "primary",
14772
- padding: "none",
14773
- borderRadius: "none"
14774
- }
14775
- };
14776
- }
14777
- function emphasizedFooterLinks(theme) {
14778
- return {
14779
- ...theme.footer,
14780
- navStyle: "minimal",
14781
- navWeight: "medium",
14782
- navColor: "text",
14783
- navLinkStyle: {
14784
- typography: "body",
14785
- fontWeight: "medium",
14786
- textTransform: "none",
14787
- italic: false,
14788
- colorToken: "text",
14789
- hoverColorToken: "primary",
14790
- padding: "none",
14791
- borderRadius: "none"
14792
- }
14793
- };
14794
- }
14795
15119
  const footerLookCatalog = defineExactCatalog()([{
14796
- id: asFooterLookId("footer-links-quiet"),
14797
- label: "Quiet links",
14798
- description: "Regular-weight footer navigation with a restrained hover.",
14799
- 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."
14800
15123
  }, {
14801
- id: asFooterLookId("footer-links-emphasized"),
14802
- label: "Emphasized links",
14803
- description: "Medium-weight footer navigation with a clearer emphasis.",
14804
- 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."
14805
15127
  }]);
14806
15128
  new Map(footerLookCatalog.map((look) => [look.id, look]));
14807
15129
  //#endregion
@@ -16643,6 +16965,7 @@ function defineCuratedSiteStyle(input) {
16643
16965
  recommendedAppearancePresetIds
16644
16966
  },
16645
16967
  headerCuration: headerCurationBySiteStyle[input.id],
16968
+ footerLookRecipes: input.footerLookRecipes,
16646
16969
  recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
16647
16970
  buttonStyleChoices: input.buttonStyleChoices,
16648
16971
  paletteRecommendations: input.paletteRecommendations,
@@ -17128,7 +17451,11 @@ const lanternLooks = {
17128
17451
  margin: "40px"
17129
17452
  },
17130
17453
  fontLoading: {
17131
- extraBodyFontWeights: [500, 700],
17454
+ extraBodyFontWeights: [
17455
+ 500,
17456
+ 700,
17457
+ 800
17458
+ ],
17132
17459
  italicBodyFontWeights: [400]
17133
17460
  },
17134
17461
  surfaces: {
@@ -17178,6 +17505,38 @@ const lanternLooks = {
17178
17505
  ]
17179
17506
  },
17180
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
+ },
17181
17540
  {
17182
17541
  id: id("event-details-panel"),
17183
17542
  treatment: "quiet",
@@ -17616,7 +17975,7 @@ const curatedSiteStyles = [
17616
17975
  "faq-contained-help",
17617
17976
  "contact-form-panel"
17618
17977
  ],
17619
- recommendedFooterLookIds: ["footer-links-quiet"],
17978
+ recommendedFooterLookIds: ["footer-links-row"],
17620
17979
  buttonStyleChoices: [
17621
17980
  buttonChoice("soft-pill"),
17622
17981
  buttonChoice("pebble"),
@@ -17735,7 +18094,7 @@ const curatedSiteStyles = [
17735
18094
  "testimonials-non-carded",
17736
18095
  "contact-form-panel"
17737
18096
  ],
17738
- recommendedFooterLookIds: ["footer-links-quiet", "footer-links-emphasized"],
18097
+ recommendedFooterLookIds: ["footer-links-row"],
17739
18098
  buttonStyleChoices: [
17740
18099
  buttonChoice("earth-pill"),
17741
18100
  buttonChoice("soft-pill"),
@@ -17790,7 +18149,41 @@ const curatedSiteStyles = [
17790
18149
  "testimonials-brand-statement-cards",
17791
18150
  "contact-form-panel"
17792
18151
  ],
17793
- 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"],
17794
18187
  buttonStyleChoices: [
17795
18188
  buttonChoice("showtime-pill"),
17796
18189
  buttonChoice("confident-chip"),
@@ -17861,7 +18254,7 @@ const curatedSiteStyles = [
17861
18254
  "testimonials-statement-cards",
17862
18255
  "contact-form-panel"
17863
18256
  ],
17864
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
18257
+ recommendedFooterLookIds: ["footer-links-row"],
17865
18258
  buttonStyleChoices: [
17866
18259
  buttonChoice("ornate-ritual"),
17867
18260
  buttonChoice("joy-stamp"),
@@ -17908,7 +18301,22 @@ const curatedSiteStyles = [
17908
18301
  } }
17909
18302
  },
17910
18303
  recommendedAppearancePresetIds: ["feature-cards-bold-colors", "testimonials-statement-cards"],
17911
- 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"],
17912
18320
  buttonStyleChoices: [
17913
18321
  buttonChoice("joy-stamp"),
17914
18322
  buttonChoice("ink-stamp"),
@@ -17960,7 +18368,7 @@ const curatedSiteStyles = [
17960
18368
  },
17961
18369
  testimonialQuote: serifDisplayQuote
17962
18370
  },
17963
- recommendedFooterLookIds: ["footer-links-quiet"],
18371
+ recommendedFooterLookIds: ["footer-links-row"],
17964
18372
  buttonStyleChoices: [
17965
18373
  buttonChoice("fulcrum"),
17966
18374
  buttonChoice("editorial-link"),
@@ -18037,7 +18445,7 @@ const curatedSiteStyles = [
18037
18445
  "faq-base-accordion",
18038
18446
  "booking-brand-band"
18039
18447
  ],
18040
- recommendedFooterLookIds: ["footer-links-quiet"],
18448
+ recommendedFooterLookIds: ["footer-links-row"],
18041
18449
  buttonStyleChoices: [
18042
18450
  buttonChoice("quiet-arrow", void 0, { secondaryTreatment: "solid-accent" }),
18043
18451
  buttonChoice("flat-ink"),
@@ -18075,7 +18483,22 @@ const curatedSiteStyles = [
18075
18483
  accordions: boldBorderedAccordionSystem,
18076
18484
  testimonialQuote: accentGlyphQuote
18077
18485
  },
18078
- 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"],
18079
18502
  buttonStyleChoices: [
18080
18503
  buttonChoice("offset-block"),
18081
18504
  buttonChoice("ink-stamp"),
@@ -18114,8 +18537,29 @@ const curatedSiteStyles = [
18114
18537
  accordions: warmInsetAccordionSystem,
18115
18538
  testimonialQuote: serifDisplayQuote
18116
18539
  },
18117
- 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"],
18118
18559
  buttonStyleChoices: [
18560
+ buttonChoice("gilt-slab"),
18561
+ buttonChoice("hairline-tab"),
18562
+ buttonChoice("marquee"),
18119
18563
  buttonChoice("ringed-pill"),
18120
18564
  buttonChoice("earth-pill"),
18121
18565
  buttonChoice("editorial-link")
@@ -18150,7 +18594,7 @@ const curatedSiteStyles = [
18150
18594
  accordions: editorialDividedAccordionSystem,
18151
18595
  testimonialQuote: serifDisplayQuote
18152
18596
  },
18153
- recommendedFooterLookIds: ["footer-links-quiet"],
18597
+ recommendedFooterLookIds: ["footer-links-row"],
18154
18598
  buttonStyleChoices: [
18155
18599
  buttonChoice("flat-ink", void 0, { corners: "square" }),
18156
18600
  buttonChoice("editorial-link"),
@@ -18178,6 +18622,7 @@ function curatedStyleTemplate(input) {
18178
18622
  }
18179
18623
  curatedSiteStyles.forEach((style) => {
18180
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));
18181
18626
  });
18182
18627
  //#endregion
18183
18628
  //#region ../theme-core/src/inputs/checkable.ts
@@ -27897,7 +28342,7 @@ const containerResponsiveThemeCss = `/*
27897
28342
  /* -----------------------------------------------------------------------------
27898
28343
  * Event section head — split (heading left, intro right)
27899
28344
  * Rendered by the block frame (outside [data-block="event-calendar"]) via
27900
- * eventSectionHeaderLayoutNodes({ splitClassName }). Lays the heading and its
28345
+ * sectionHeaderLayoutNodes({ splitClassName }). Lays the heading and its
27901
28346
  * supporting intro out as a two-column head on wide viewports, stacking on
27902
28347
  * narrow ones. The section band above provides the distinct background.
27903
28348
  * ----------------------------------------------------------------------------- */
@@ -33596,6 +34041,26 @@ const containerResponsiveThemeCss = `/*
33596
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; }
33597
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; }
33598
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
+
33599
34064
  /* Bounded style skins (issue 1575, D14): one stylesheet per arrangement style, keyed on data-skin. */
33600
34065
 
33601
34066
  /* =============================================================================
@@ -34639,6 +35104,7 @@ const containerResponsiveThemeCss = `/*
34639
35104
 
34640
35105
  /* Section heads: centred under the lozenge rule. */
34641
35106
  [data-skin="lantern"] [data-arrangement] [data-slot="head"] {
35107
+ grid-template-columns: minmax(0, 1fr);
34642
35108
  position: relative;
34643
35109
  justify-items: center;
34644
35110
  text-align: center;
@@ -35324,6 +35790,254 @@ const containerResponsiveThemeCss = `/*
35324
35790
  [data-skin="lantern"] [data-card-list-item] [data-slot="dates"] { gap: 0.5rem; }
35325
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); }
35326
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
+
35327
36041
  /* =============================================================================
35328
36042
  * Measure skin (issue 1575 Phase 1b, D14).
35329
36043
  *