@riverbankcms/sdk 0.75.0 → 0.77.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 (177) hide show
  1. package/README.md +2 -0
  2. package/dist/{PreviewEditorSidebar-U2IHCBYN.mjs → PreviewEditorSidebar-XSX7QKHQ.mjs} +1179 -519
  3. package/dist/{PreviewEditorUI-ZGH2RQNP.mjs → PreviewEditorUI-YZNEZ3QD.mjs} +2 -2
  4. package/dist/SdkPreviewModeRuntime-5FS5E6BI.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +528 -20
  6. package/dist/_dts/api/src/bookingOperations.d.ts +12 -0
  7. package/dist/_dts/api/src/contentRuntime.d.ts +5 -0
  8. package/dist/_dts/api/src/index.d.ts +1 -1
  9. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +11 -3
  10. package/dist/_dts/api/src/siteAssets.d.ts +1 -0
  11. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +26 -2
  12. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +28 -1
  13. package/dist/_dts/block-form/src/client/index.d.ts +2 -2
  14. package/dist/_dts/block-form/src/index.d.ts +2 -1
  15. package/dist/_dts/block-form/src/manifest/utils.d.ts +24 -0
  16. package/dist/_dts/block-form/src/widgets/DateField/dateFieldSchema.d.ts +1 -1
  17. package/dist/_dts/block-form/src/widgets/DateTimeField/dateTimeFieldSchema.d.ts +1 -1
  18. package/dist/_dts/block-form/src/widgets/TimeField/timeFieldSchema.d.ts +1 -1
  19. package/dist/_dts/blocks/src/PageRenderer.d.ts +10 -10
  20. package/dist/_dts/blocks/src/client/events.d.ts +3 -1
  21. package/dist/_dts/blocks/src/client/site-chrome.d.ts +22 -0
  22. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  23. package/dist/_dts/blocks/src/customBlockRegistry.d.ts +38 -0
  24. package/dist/_dts/blocks/src/index.d.ts +2 -0
  25. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +20 -2
  26. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +25 -0
  27. package/dist/_dts/blocks/src/system/blocks/index.d.ts +2 -0
  28. package/dist/_dts/blocks/src/system/blocks/intro.d.ts +24 -0
  29. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +3 -34
  30. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  31. package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +30 -0
  32. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +4 -1
  33. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +7 -0
  34. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +11 -2
  35. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -6
  37. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  38. package/dist/_dts/blocks/src/system/runtime/nodes/accordion.d.ts +2 -0
  39. package/dist/_dts/blocks/src/system/runtime/nodes/accordion.server.d.ts +2 -0
  40. package/dist/_dts/blocks/src/system/runtime/nodes/accordionIconTreatment.d.ts +5 -0
  41. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +3 -27
  42. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +163 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +5 -5
  44. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionCompactRow.d.ts +29 -0
  45. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionList.d.ts +13 -0
  46. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +4 -0
  47. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +4 -3
  48. package/dist/_dts/blocks/src/system/runtime/shared/utils/bookingRoute.d.ts +20 -0
  49. package/dist/_dts/blocks/src/system/runtime/shared/utils/index.d.ts +2 -1
  50. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -0
  51. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +2 -1
  52. package/dist/_dts/blocks/src/system/types/link.d.ts +12 -0
  53. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +2 -0
  54. package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +48 -0
  55. package/dist/_dts/content-editor/src/hooks/invalidBlockSelectors.d.ts +4 -0
  56. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +47 -0
  57. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  58. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +20 -0
  59. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +4 -1
  60. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +3 -1
  61. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +3 -1
  62. package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +5 -1
  63. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +4 -1
  64. package/dist/_dts/editor-blocks/src/block-editor/actionControlMode.d.ts +2 -0
  65. package/dist/_dts/editor-blocks/src/block-editor/customBlockRegistry.d.ts +2 -0
  66. package/dist/_dts/editor-blocks/src/block-editor/sdkBlockMerger.d.ts +9 -37
  67. package/dist/_dts/editor-blocks/src/index.d.ts +3 -3
  68. package/dist/_dts/preview-next/src/client/index.d.ts +3 -0
  69. package/dist/_dts/preview-next/src/client/layout/PreviewLayoutContext.d.ts +5 -1
  70. package/dist/_dts/preview-next/src/client/preview/PreviewDesignCoordinatorContext.d.ts +20 -0
  71. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +7 -2
  72. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +7 -2
  73. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +7 -2
  74. package/dist/_dts/preview-next/src/client/preview/PreviewThemedSiteDocument.d.ts +18 -0
  75. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +20 -3
  76. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +6 -1
  77. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +14 -4
  78. package/dist/_dts/preview-next/src/client/preview/previewDesignCoordinator.d.ts +73 -0
  79. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +12 -4
  80. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +46 -0
  81. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +6 -1
  82. package/dist/_dts/preview-next/src/client/preview/themeOverlay.d.ts +21 -3
  83. package/dist/_dts/preview-next/src/client/preview/typographySelectionInput.d.ts +14 -0
  84. package/dist/_dts/preview-next/src/client/sdk/SdkPreviewModeRuntime.d.ts +1 -1
  85. package/dist/_dts/sdk/src/cli/commands/style.d.ts +8 -0
  86. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -1
  87. package/dist/_dts/sdk/src/client/types.d.ts +9 -0
  88. package/dist/_dts/sdk/src/client.d.ts +1 -1
  89. package/dist/_dts/sdk/src/components.d.ts +2 -2
  90. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +35 -0
  91. package/dist/_dts/sdk/src/index.d.ts +2 -1
  92. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -0
  93. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -2
  94. package/dist/_dts/sdk/src/rendering/overrideResolution.d.ts +6 -0
  95. package/dist/_dts/sdk/src/rendering/overrides.d.ts +21 -1
  96. package/dist/_dts/sdk/src/rendering/server.d.ts +4 -3
  97. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  98. package/dist/_dts/sdk/src/version.d.ts +1 -1
  99. package/dist/_dts/site-commands/src/commands.d.ts +15 -0
  100. package/dist/_dts/theme-core/src/buttons/personalities/earth-pill.d.ts +16 -0
  101. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  102. package/dist/_dts/theme-core/src/fonts/types.d.ts +1 -1
  103. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +45 -0
  104. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  105. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +16 -0
  106. package/dist/_dts/theme-core/src/schema.d.ts +280 -0
  107. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +81 -0
  108. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +6 -4
  109. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +81 -0
  110. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +118 -2
  111. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +13 -0
  112. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  113. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +364 -5
  114. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +6 -0
  115. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -0
  116. package/dist/_dts/theme-core/src/site-styles/persistedIdParseResult.d.ts +9 -0
  117. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +20 -4
  118. package/dist/_dts/theme-core/src/site-styles/types.d.ts +74 -2
  119. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +189 -0
  120. package/dist/{chunk-Z7JLNTJR.mjs → chunk-6SMUFTXD.mjs} +2 -1
  121. package/dist/{chunk-ZSHFGFUG.mjs → chunk-ANKDYZ2E.mjs} +1 -1
  122. package/dist/{chunk-BGMNDF6T.mjs → chunk-EAWHBECW.mjs} +476 -153
  123. package/dist/{chunk-RWXQBRQZ.mjs → chunk-GSQX43EZ.mjs} +450 -63
  124. package/dist/{chunk-GFE74WRD.mjs → chunk-WLQBJN2Z.mjs} +3275 -435
  125. package/dist/cli/index.mjs +2023 -181
  126. package/dist/client/{accordion-T2UD2ZTH.mjs → accordion-RZMQSYLR.mjs} +1 -1
  127. package/dist/client/{bookingForm-GUP75FKN.mjs → bookingForm-NF4ASVNV.mjs} +3 -13
  128. package/dist/client/bookings.mjs +103 -11
  129. package/dist/client/{carousel-2NQA6V57.mjs → carousel-LDX47ZIK.mjs} +1 -1
  130. package/dist/client/{cart-5TFIAFDS.mjs → cart-RGXDS5F4.mjs} +4 -4
  131. package/dist/client/{checkout-TP4WAHZE.mjs → checkout-P7WWSNNY.mjs} +4 -4
  132. package/dist/client/{chunk-ZLMS67RR.mjs → chunk-E2TDNXCL.mjs} +1 -1
  133. package/dist/client/{chunk-NWOUL6JY.mjs → chunk-GMVTOKYG.mjs} +3 -3
  134. package/dist/client/{chunk-CY2ZTSE5.mjs → chunk-JNC7CGHX.mjs} +1 -1
  135. package/dist/client/{chunk-VUAOE3AG.mjs → chunk-L3DNHIJX.mjs} +4 -4
  136. package/dist/client/{chunk-FU2QRZMX.mjs → chunk-R56FQ3RR.mjs} +163 -24
  137. package/dist/client/{chunk-WJXXNDSE.mjs → chunk-UFSWADAO.mjs} +1 -1
  138. package/dist/client/client.mjs +4392 -2504
  139. package/dist/client/{courseRegistration-5DPU6PDY.mjs → courseRegistration-7F65K5ZR.mjs} +3 -3
  140. package/dist/client/{eventCalendar-F3GZGTEF.mjs → eventCalendar-GLSC5KTL.mjs} +5 -5
  141. package/dist/client/{eventCombined-BQOB6QMY.mjs → eventCombined-ZHK4WKUR.mjs} +5 -5
  142. package/dist/client/{eventDetails-PEM2EJWE.mjs → eventDetails-E3PJYBIN.mjs} +5 -5
  143. package/dist/client/{eventListing-YMIQPVME.mjs → eventListing-EMS3WC3E.mjs} +5 -5
  144. package/dist/client/{eventRegistration-4I6ZNDUF.mjs → eventRegistration-NZOTVNPI.mjs} +5 -5
  145. package/dist/client/{form-ZJVAYZ6G.mjs → form-ETFZFATW.mjs} +1 -1
  146. package/dist/client/{headerSection-TOT5MGTF.mjs → headerSection-4LBP7ULT.mjs} +2 -2
  147. package/dist/client/hooks.mjs +1918 -293
  148. package/dist/client/{locationMap-J66NZREU.mjs → locationMap-5M655YSJ.mjs} +1 -1
  149. package/dist/client/{newsletterForm-ET2XUMRO.mjs → newsletterForm-QOUYW44O.mjs} +1 -1
  150. package/dist/client/{productDetail-C2XIH7C5.mjs → productDetail-O4DOCWQG.mjs} +4 -4
  151. package/dist/client/{productList-T2AZLFTP.mjs → productList-A5RO5WIS.mjs} +4 -4
  152. package/dist/client/rendering/client.mjs +3328 -3177
  153. package/dist/client/rendering/islands.mjs +18 -18
  154. package/dist/client/rendering.mjs +5461 -3584
  155. package/dist/client/{shop-UZ6IUZXD.mjs → shop-L4MZH4I2.mjs} +4 -4
  156. package/dist/preview-next/chrome.css +1 -1
  157. package/dist/preview-next/client/runtime.mjs +4 -4
  158. package/dist/preview-next/editor-base.css +2 -148
  159. package/dist/preview-next/editor-chrome.css +179 -0
  160. package/dist/{sdk-runtime-JCUQM63Y.mjs → sdk-runtime-Q6MTR4KL.mjs} +5 -5
  161. package/dist/server/components.mjs +2983 -1093
  162. package/dist/server/config-validation.mjs +1921 -293
  163. package/dist/server/config.mjs +1921 -293
  164. package/dist/server/data.mjs +1918 -293
  165. package/dist/server/index.mjs +31 -2
  166. package/dist/server/next.mjs +2951 -1043
  167. package/dist/server/page-converter.mjs +1894 -281
  168. package/dist/server/prebuild.mjs +1 -1
  169. package/dist/server/rendering/server.mjs +2995 -1096
  170. package/dist/server/rendering.mjs +2988 -1098
  171. package/dist/server/routing.mjs +1963 -275
  172. package/dist/server/server.mjs +1932 -288
  173. package/dist/server/theme-bridge.mjs +158 -1
  174. package/dist/server/theme.mjs +158 -1
  175. package/package.json +1 -1
  176. package/dist/SdkPreviewModeRuntime-MTUGBTLQ.mjs +0 -8
  177. /package/dist/client/{chunk-2PHQZ666.mjs → chunk-JEZECJ3W.mjs} +0 -0
@@ -7467,6 +7467,47 @@ var eyebrowTreatmentValues = [
7467
7467
  "pill-bounce",
7468
7468
  "accent-pill-bounce"
7469
7469
  ];
7470
+ var visibleHeadingDecorationFamilyValues = [
7471
+ "organic-squiggle",
7472
+ "short-center-rule"
7473
+ ];
7474
+ var visibleHeadingDecorationPlacementValues = [
7475
+ "after-heading",
7476
+ "between-heading-and-body",
7477
+ "under-centered-heading"
7478
+ ];
7479
+ var headingDecorationOverrideValues = [
7480
+ "site-default",
7481
+ "on",
7482
+ "off"
7483
+ ];
7484
+ var headingDecorationColorTokenValues = [
7485
+ "text",
7486
+ "primary",
7487
+ "secondary",
7488
+ "accent",
7489
+ "border",
7490
+ "muted"
7491
+ ];
7492
+ var accordionIconSetValues = [
7493
+ "plus",
7494
+ "chevron",
7495
+ "caret",
7496
+ "minimal-cross"
7497
+ ];
7498
+ var accordionIconColorTokenValues = [
7499
+ "text",
7500
+ "muted",
7501
+ "primary",
7502
+ "secondary",
7503
+ "accent",
7504
+ "current"
7505
+ ];
7506
+ var accordionIconMotionValues = [
7507
+ "none",
7508
+ "rotate",
7509
+ "swap"
7510
+ ];
7470
7511
  function defineBlockDesignCapability(capability) {
7471
7512
  return {
7472
7513
  ...capability,
@@ -7476,7 +7517,9 @@ function defineBlockDesignCapability(capability) {
7476
7517
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
7477
7518
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
7478
7519
  tileTreatments: capability.tileTreatments ?? ["default"],
7479
- eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
7520
+ eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7521
+ ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
7522
+ ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
7480
7523
  };
7481
7524
  }
7482
7525
 
@@ -7667,6 +7710,25 @@ var blockAppearancePresets = [
7667
7710
  emphasis: "high"
7668
7711
  }
7669
7712
  }),
7713
+ defineBlockAppearancePreset({
7714
+ kind: "block-design",
7715
+ id: "intro-soft-earth-statement",
7716
+ target: "intro",
7717
+ label: "Soft Earth intro statement",
7718
+ blockKinds: ["block.intro"],
7719
+ design: {
7720
+ sectionSurface: "base",
7721
+ contentFrame: plainFrame,
7722
+ itemSurface: "none",
7723
+ transitionAfter: "soft-fade-short",
7724
+ emphasis: "high",
7725
+ headingDecoration: {
7726
+ family: "organic-squiggle",
7727
+ placement: "after-heading",
7728
+ colorToken: "primary"
7729
+ }
7730
+ }
7731
+ }),
7670
7732
  defineBlockAppearancePreset({
7671
7733
  kind: "block-design",
7672
7734
  id: "offerings-calm-list",
@@ -7681,6 +7743,25 @@ var blockAppearancePresets = [
7681
7743
  emphasis: "medium"
7682
7744
  }
7683
7745
  }),
7746
+ defineBlockAppearancePreset({
7747
+ kind: "block-design",
7748
+ id: "feature-cards-soft-earth-offerings",
7749
+ target: "feature-cards",
7750
+ label: "Soft Earth offering cards",
7751
+ blockKinds: ["block.feature-cards"],
7752
+ design: {
7753
+ sectionSurface: "base",
7754
+ contentFrame: plainFrame,
7755
+ itemSurface: "raised",
7756
+ transitionAfter: "none",
7757
+ emphasis: "high",
7758
+ headingDecoration: {
7759
+ family: "short-center-rule",
7760
+ placement: "under-centered-heading",
7761
+ colorToken: "primary"
7762
+ }
7763
+ }
7764
+ }),
7684
7765
  defineBlockAppearancePreset({
7685
7766
  kind: "block-design",
7686
7767
  id: "events-base-calendar",
@@ -7809,6 +7890,26 @@ var blockAppearancePresets = [
7809
7890
  testimonialCardTreatment: "accent-quote"
7810
7891
  }
7811
7892
  }),
7893
+ defineBlockAppearancePreset({
7894
+ kind: "block-design",
7895
+ id: "testimonials-soft-earth-proof-band",
7896
+ target: "testimonials",
7897
+ label: "Soft Earth proof band",
7898
+ blockKinds: ["block.testimonials"],
7899
+ design: {
7900
+ sectionSurface: "brand-depth-band",
7901
+ contentFrame: plainFrame,
7902
+ itemSurface: "none",
7903
+ transitionAfter: "soft-fade-short",
7904
+ emphasis: "high",
7905
+ testimonialCardTreatment: "accent-quote",
7906
+ headingDecoration: {
7907
+ family: "short-center-rule",
7908
+ placement: "under-centered-heading",
7909
+ colorToken: "border"
7910
+ }
7911
+ }
7912
+ }),
7812
7913
  defineBlockAppearancePreset({
7813
7914
  kind: "block-design",
7814
7915
  id: "faq-base-accordion",
@@ -7837,6 +7938,25 @@ var blockAppearancePresets = [
7837
7938
  emphasis: "low"
7838
7939
  }
7839
7940
  }),
7941
+ defineBlockAppearancePreset({
7942
+ kind: "block-design",
7943
+ id: "faq-soft-earth-two-column",
7944
+ target: "faq",
7945
+ label: "Soft Earth two-column FAQ",
7946
+ blockKinds: ["block.faq"],
7947
+ design: {
7948
+ sectionSurface: "base",
7949
+ contentFrame: plainFrame,
7950
+ itemSurface: "flat",
7951
+ transitionAfter: "none",
7952
+ emphasis: "medium",
7953
+ accordionIconTreatment: {
7954
+ iconSet: "plus",
7955
+ colorToken: "primary",
7956
+ motion: "swap"
7957
+ }
7958
+ }
7959
+ }),
7840
7960
  defineBlockAppearancePreset({
7841
7961
  kind: "block-design",
7842
7962
  id: "contact-form-panel",
@@ -8522,6 +8642,97 @@ var confidentChip = defineButtonPersonality({
8522
8642
  }
8523
8643
  });
8524
8644
 
8645
+ // ../theme-core/src/buttons/personalities/earth-pill.ts
8646
+ var earthPill = defineButtonPersonality({
8647
+ id: "earth-pill",
8648
+ name: "Earth Pill",
8649
+ description: "Compact terracotta pills with quiet primary-coloured ghost CTAs.",
8650
+ tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
8651
+ buttonSystem: {
8652
+ global: {
8653
+ cornerStyle: "pill",
8654
+ shadow: "low",
8655
+ textTransform: "none",
8656
+ fontWeight: 500,
8657
+ borderWidth: 1,
8658
+ hoverTransform: "lift",
8659
+ hoverColor: "none",
8660
+ typography: "body",
8661
+ paddingPreset: "default"
8662
+ },
8663
+ sizes: {
8664
+ sm: { padding: "0.5rem 1rem", fontSize: "text-sm" },
8665
+ md: { padding: "0.625rem 1.35rem" },
8666
+ lg: { padding: "0.75rem 1.65rem", fontSize: "text-lg" },
8667
+ xl: { padding: "0.875rem 2rem", fontSize: "text-xl" }
8668
+ },
8669
+ variants: [
8670
+ {
8671
+ id: "primary",
8672
+ name: "Primary",
8673
+ enabled: true,
8674
+ priority: 1,
8675
+ background: { type: "solid", colorToken: "primary" },
8676
+ textColorToken: "primaryForeground",
8677
+ borderRadius: "rounded-full",
8678
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
8679
+ effects: {
8680
+ hover: [
8681
+ { effectId: "lift", options: { translateY: "-1px" } },
8682
+ { effectId: "background-on-hover", options: { colorToken: "accent" } }
8683
+ ],
8684
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8685
+ }
8686
+ },
8687
+ {
8688
+ id: "secondary",
8689
+ name: "Secondary",
8690
+ enabled: true,
8691
+ priority: 2,
8692
+ background: { type: "transparent" },
8693
+ textColorToken: "primary",
8694
+ borderRadius: "rounded-full",
8695
+ border: { widthClass: "border", colorToken: "primary" },
8696
+ effects: {
8697
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
8698
+ }
8699
+ },
8700
+ {
8701
+ id: "outline",
8702
+ name: "Outline",
8703
+ enabled: true,
8704
+ priority: 3,
8705
+ background: { type: "transparent" },
8706
+ textColorToken: "text",
8707
+ borderRadius: "rounded-full",
8708
+ border: { widthClass: "border", colorToken: "border" },
8709
+ effects: {
8710
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surfaceAlt" } }]
8711
+ }
8712
+ },
8713
+ {
8714
+ id: "ghost",
8715
+ name: "Ghost",
8716
+ enabled: true,
8717
+ priority: 3,
8718
+ background: { type: "transparent" },
8719
+ textColorToken: "primary",
8720
+ borderRadius: "rounded-full",
8721
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8722
+ sizes: {
8723
+ sm: { padding: "0.25rem 0", fontSize: "text-sm" },
8724
+ md: { padding: "0.375rem 0" },
8725
+ lg: { padding: "0.5rem 0", fontSize: "text-lg" },
8726
+ xl: { padding: "0.625rem 0", fontSize: "text-xl" }
8727
+ },
8728
+ effects: {
8729
+ hover: [{ effectId: "opacity-reduce", options: { reduction: 25 } }]
8730
+ }
8731
+ }
8732
+ ]
8733
+ }
8734
+ });
8735
+
8525
8736
  // ../theme-core/src/buttons/personalities/editorial-link.ts
8526
8737
  var editorialLink = defineButtonPersonality({
8527
8738
  id: "editorial-link",
@@ -8980,6 +9191,7 @@ var softPill = defineButtonPersonality({
8980
9191
  // ../theme-core/src/buttons/personalities/index.ts
8981
9192
  var buttonPersonalities = [
8982
9193
  softPill,
9194
+ earthPill,
8983
9195
  confidentChip,
8984
9196
  editorialLink,
8985
9197
  pebble,
@@ -9655,12 +9867,36 @@ var boxBackgroundSchema = z21.object({
9655
9867
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
9656
9868
  headingColor: tokenOrCssColorValueSchema.nullable().optional()
9657
9869
  });
9870
+ var noHeadingDecorationSchema = z21.object({
9871
+ family: z21.literal("none"),
9872
+ placement: z21.literal("none")
9873
+ });
9874
+ var visibleHeadingDecorationSchema = z21.object({
9875
+ family: z21.enum(visibleHeadingDecorationFamilyValues),
9876
+ placement: z21.enum(visibleHeadingDecorationPlacementValues),
9877
+ colorToken: z21.enum(headingDecorationColorTokenValues).optional()
9878
+ });
9879
+ var headingDecorationSchema = z21.union([
9880
+ noHeadingDecorationSchema,
9881
+ visibleHeadingDecorationSchema
9882
+ ]);
9883
+ var accordionIconTreatmentSchema = z21.object({
9884
+ iconSet: z21.enum(accordionIconSetValues),
9885
+ colorToken: z21.enum(accordionIconColorTokenValues),
9886
+ openColorToken: z21.enum(accordionIconColorTokenValues).optional(),
9887
+ motion: z21.enum(accordionIconMotionValues)
9888
+ });
9658
9889
  var sectionStylesOverrideSchema = z21.object({
9659
9890
  background: boxBackgroundSchema.nullable().optional(),
9660
9891
  spacing: semanticSpacingSchema.nullable().optional(),
9661
9892
  minHeight: z21.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
9662
9893
  tileTreatment: z21.enum(tileTreatmentValues).nullable().optional(),
9663
- eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional()
9894
+ eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional(),
9895
+ headingDecoration: headingDecorationSchema.nullable().optional(),
9896
+ // Author-level override consumed by later block/editor rendering phases.
9897
+ // Keeping it in section styles lets existing block save APIs persist it.
9898
+ headingDecorationOverride: z21.enum(headingDecorationOverrideValues).nullable().optional(),
9899
+ accordionIconTreatment: accordionIconTreatmentSchema.nullable().optional()
9664
9900
  });
9665
9901
  var containerStylesOverrideSchema = z21.object({
9666
9902
  background: boxBackgroundSchema.nullable().optional(),
@@ -10368,6 +10604,28 @@ var warmNeutralCream = definePaletteVariant({
10368
10604
  { name: "border", hex: "#e0d2b8" }
10369
10605
  ]
10370
10606
  });
10607
+ var warmNeutralSoftEarth = definePaletteVariant({
10608
+ id: "warm-neutral-soft-earth",
10609
+ name: "Warm Neutral \u2014 Soft Earth",
10610
+ description: "Cream ground with terracotta primary, clay accents, and olive depth.",
10611
+ tags: { tone: "classic", energy: "calm", era: "organic" },
10612
+ mode: "light",
10613
+ colors: [
10614
+ { name: "primary", hex: "#a8573d" },
10615
+ { name: "secondary", hex: "#72765c" },
10616
+ { name: "accent", hex: "#c87557" },
10617
+ { name: "success", hex: "#687854" },
10618
+ { name: "warning", hex: "#b7863e" },
10619
+ { name: "destructive", hex: "#a54b3c" },
10620
+ { name: "background", hex: "#fbf6eb" },
10621
+ { name: "surface", hex: "#fffdf7" },
10622
+ { name: "surfaceAlt", hex: "#f0e4d3" },
10623
+ { name: "muted", hex: "#eadbc6" },
10624
+ { name: "text", hex: "#30281f" },
10625
+ { name: "primaryForeground", hex: "#fffaf3" },
10626
+ { name: "border", hex: "#d9c8b2" }
10627
+ ]
10628
+ });
10371
10629
  var warmNeutralForest = definePaletteVariant({
10372
10630
  id: "warm-neutral-forest",
10373
10631
  name: "Warm Neutral \u2014 Forest",
@@ -10401,6 +10659,7 @@ var paletteVariants = [
10401
10659
  // Warm-neutral family
10402
10660
  warmNeutralClay,
10403
10661
  warmNeutralCream,
10662
+ warmNeutralSoftEarth,
10404
10663
  warmNeutralForest,
10405
10664
  // High-contrast family
10406
10665
  highContrastInk,
@@ -10419,6 +10678,12 @@ var paletteVariantsById = new Map(
10419
10678
  function asHeaderLookId(value) {
10420
10679
  return value;
10421
10680
  }
10681
+ function asHeaderLayoutId(value) {
10682
+ return value;
10683
+ }
10684
+ function asHeaderStyleId(value) {
10685
+ return value;
10686
+ }
10422
10687
  function baseHeader(theme) {
10423
10688
  const {
10424
10689
  navLinkStyle: _navLinkStyle,
@@ -10437,6 +10702,309 @@ function baseHeader(theme) {
10437
10702
  navContainer: { type: "none", tint: null, opacity: 0.15 }
10438
10703
  };
10439
10704
  }
10705
+ var headerLayoutCatalog = [
10706
+ {
10707
+ id: asHeaderLayoutId("classic"),
10708
+ label: "Classic",
10709
+ description: "Logo and navigation in one practical horizontal row.",
10710
+ structure: "inline-classic",
10711
+ variant: "classic",
10712
+ defaultPositioning: "sticky",
10713
+ shrinkOnScroll: false
10714
+ },
10715
+ {
10716
+ id: asHeaderLayoutId("centered"),
10717
+ label: "Centered",
10718
+ description: "Logo centered above a balanced navigation row.",
10719
+ structure: "centered-stack",
10720
+ variant: "centered",
10721
+ defaultPositioning: "static",
10722
+ shrinkOnScroll: false,
10723
+ maxRecommendedNavItems: 5,
10724
+ allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
10725
+ },
10726
+ {
10727
+ id: asHeaderLayoutId("editorial"),
10728
+ label: "Editorial",
10729
+ description: "A composed, magazine-like stacked header treatment.",
10730
+ structure: "editorial-stack",
10731
+ variant: "editorial",
10732
+ defaultPositioning: "static",
10733
+ shrinkOnScroll: false,
10734
+ maxRecommendedNavItems: 6
10735
+ },
10736
+ {
10737
+ id: asHeaderLayoutId("floating"),
10738
+ label: "Floating",
10739
+ description: "Detached header chrome that sits over the opening section.",
10740
+ structure: "floating-shell",
10741
+ variant: "floating",
10742
+ defaultPositioning: "fixed",
10743
+ shrinkOnScroll: true,
10744
+ maxRecommendedNavItems: 5,
10745
+ allowedLogoShapes: ["none", "text-only", "horizontal"]
10746
+ }
10747
+ ];
10748
+ function supportedLayouts(ids) {
10749
+ return ids.map(asHeaderLayoutId);
10750
+ }
10751
+ var headerStyleCatalog = [
10752
+ {
10753
+ id: asHeaderStyleId("minimal"),
10754
+ label: "Minimal",
10755
+ description: "Quiet surface with simple color-change navigation.",
10756
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10757
+ navInteraction: "color-change",
10758
+ surface: "neutral"
10759
+ },
10760
+ {
10761
+ id: asHeaderStyleId("fine-line"),
10762
+ label: "Fine Line",
10763
+ description: "Light surface with a crisp lower rule and underline hover.",
10764
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10765
+ navInteraction: "underline-grow",
10766
+ surface: "bordered"
10767
+ },
10768
+ {
10769
+ id: asHeaderStyleId("soft-bar"),
10770
+ label: "Soft Bar",
10771
+ description: "Soft tinted surface with gentle pill hover states.",
10772
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10773
+ navInteraction: "pill-background",
10774
+ surface: "soft"
10775
+ },
10776
+ {
10777
+ id: asHeaderStyleId("pill-nav"),
10778
+ label: "Pill Nav",
10779
+ description: "A calm pill navigation rail over a neutral header.",
10780
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10781
+ navInteraction: "pill-background",
10782
+ surface: "soft"
10783
+ },
10784
+ {
10785
+ id: asHeaderStyleId("brand-bar"),
10786
+ label: "Brand Bar",
10787
+ description: "Solid brand surface with high-contrast navigation.",
10788
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10789
+ navInteraction: "color-change",
10790
+ surface: "brand-solid"
10791
+ },
10792
+ {
10793
+ id: asHeaderStyleId("brand-underline"),
10794
+ label: "Brand Underline",
10795
+ description: "Brand surface with underline-grow navigation.",
10796
+ supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
10797
+ navInteraction: "underline-grow",
10798
+ surface: "brand-solid"
10799
+ },
10800
+ {
10801
+ id: asHeaderStyleId("brand-pill"),
10802
+ label: "Brand Pill",
10803
+ description: "Solid brand surface with rounded active and hover states.",
10804
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
10805
+ navInteraction: "pill-background",
10806
+ surface: "brand-solid"
10807
+ },
10808
+ {
10809
+ id: asHeaderStyleId("editorial-line"),
10810
+ label: "Editorial Line",
10811
+ description: "Typographic logo treatment with understated underline navigation.",
10812
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10813
+ navInteraction: "underline-grow",
10814
+ surface: "bordered"
10815
+ },
10816
+ {
10817
+ id: asHeaderStyleId("flat-tabs"),
10818
+ label: "Flat Tabs",
10819
+ description: "Flat block hover and active states with a Swiss utility feel.",
10820
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10821
+ navInteraction: "flat-block",
10822
+ surface: "bordered"
10823
+ },
10824
+ {
10825
+ id: asHeaderStyleId("glass"),
10826
+ label: "Glass",
10827
+ description: "Floating translucent chrome with frosted navigation backing.",
10828
+ supportedLayoutIds: supportedLayouts(["floating"]),
10829
+ navInteraction: "glass-backed",
10830
+ surface: "floating",
10831
+ requiresFloatingLayout: true
10832
+ },
10833
+ {
10834
+ id: asHeaderStyleId("minimal-surface"),
10835
+ label: "Minimal Surface",
10836
+ description: "Floating chrome with a restrained translucent surface.",
10837
+ supportedLayoutIds: supportedLayouts(["floating"]),
10838
+ navInteraction: "color-change",
10839
+ surface: "floating",
10840
+ requiresFloatingLayout: true
10841
+ },
10842
+ {
10843
+ id: asHeaderStyleId("soft-shell"),
10844
+ label: "Soft Shell",
10845
+ description: "Floating rounded shell with soft pill navigation states.",
10846
+ supportedLayoutIds: supportedLayouts(["floating"]),
10847
+ navInteraction: "pill-background",
10848
+ surface: "floating",
10849
+ requiresFloatingLayout: true
10850
+ }
10851
+ ];
10852
+ var headerLayoutsById = new Map(
10853
+ headerLayoutCatalog.map((layout) => [layout.id, layout])
10854
+ );
10855
+ var headerStylesById = new Map(
10856
+ headerStyleCatalog.map((style) => [style.id, style])
10857
+ );
10858
+ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10859
+ [
10860
+ asHeaderLayoutId("classic"),
10861
+ headerStyleRepairChain([
10862
+ "minimal",
10863
+ "fine-line",
10864
+ "soft-bar",
10865
+ "pill-nav",
10866
+ "brand-bar",
10867
+ "brand-underline",
10868
+ "brand-pill",
10869
+ "editorial-line",
10870
+ "flat-tabs"
10871
+ ])
10872
+ ],
10873
+ [
10874
+ asHeaderLayoutId("centered"),
10875
+ headerStyleRepairChain([
10876
+ "minimal",
10877
+ "fine-line",
10878
+ "soft-bar",
10879
+ "pill-nav",
10880
+ "brand-bar",
10881
+ "brand-pill",
10882
+ "editorial-line",
10883
+ "flat-tabs"
10884
+ ])
10885
+ ],
10886
+ [
10887
+ asHeaderLayoutId("editorial"),
10888
+ headerStyleRepairChain([
10889
+ "minimal",
10890
+ "fine-line",
10891
+ "soft-bar",
10892
+ "brand-bar",
10893
+ "brand-underline",
10894
+ "editorial-line",
10895
+ "flat-tabs"
10896
+ ])
10897
+ ],
10898
+ [
10899
+ asHeaderLayoutId("floating"),
10900
+ headerStyleRepairChain([
10901
+ "glass",
10902
+ "minimal-surface",
10903
+ "soft-shell",
10904
+ "brand-pill"
10905
+ ])
10906
+ ]
10907
+ ]);
10908
+ function headerStyleRepairChain(values) {
10909
+ return values.map(asHeaderStyleId);
10910
+ }
10911
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map([
10912
+ [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
10913
+ [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
10914
+ [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
10915
+ [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
10916
+ [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
10917
+ [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
10918
+ [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
10919
+ [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
10920
+ [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
10921
+ [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
10922
+ [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
10923
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
10924
+ ]);
10925
+ var legacyHeaderLookAliases = [
10926
+ {
10927
+ lookId: asHeaderLookId("clean-base"),
10928
+ selection: {
10929
+ layoutId: asHeaderLayoutId("classic"),
10930
+ styleId: asHeaderStyleId("minimal")
10931
+ }
10932
+ },
10933
+ {
10934
+ lookId: asHeaderLookId("brand-solid"),
10935
+ selection: {
10936
+ layoutId: asHeaderLayoutId("classic"),
10937
+ styleId: asHeaderStyleId("brand-bar")
10938
+ }
10939
+ },
10940
+ {
10941
+ lookId: asHeaderLookId("editorial-line"),
10942
+ selection: {
10943
+ layoutId: asHeaderLayoutId("editorial"),
10944
+ styleId: asHeaderStyleId("editorial-line")
10945
+ }
10946
+ },
10947
+ {
10948
+ lookId: asHeaderLookId("centered-calm"),
10949
+ selection: {
10950
+ layoutId: asHeaderLayoutId("centered"),
10951
+ styleId: asHeaderStyleId("minimal")
10952
+ }
10953
+ },
10954
+ {
10955
+ lookId: asHeaderLookId("practical-utility"),
10956
+ selection: {
10957
+ layoutId: asHeaderLayoutId("classic"),
10958
+ styleId: asHeaderStyleId("flat-tabs")
10959
+ }
10960
+ },
10961
+ {
10962
+ lookId: asHeaderLookId("minimal-transparent"),
10963
+ selection: {
10964
+ layoutId: asHeaderLayoutId("classic"),
10965
+ styleId: asHeaderStyleId("minimal")
10966
+ }
10967
+ },
10968
+ {
10969
+ lookId: asHeaderLookId("transparent-overlay"),
10970
+ selection: {
10971
+ layoutId: asHeaderLayoutId("floating"),
10972
+ styleId: asHeaderStyleId("glass")
10973
+ }
10974
+ },
10975
+ {
10976
+ lookId: asHeaderLookId("floating-glass"),
10977
+ selection: {
10978
+ layoutId: asHeaderLayoutId("floating"),
10979
+ styleId: asHeaderStyleId("glass")
10980
+ }
10981
+ }
10982
+ ];
10983
+ var legacyHeaderLookAliasesById = new Map(
10984
+ legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
10985
+ );
10986
+ function getHeaderStyle(id) {
10987
+ return headerStylesById.get(id) ?? null;
10988
+ }
10989
+ function isHeaderStyleCompatibleWithLayout(style, layoutId) {
10990
+ return style.supportedLayoutIds.includes(layoutId);
10991
+ }
10992
+ function getHeaderStyleOrThrow(id) {
10993
+ const style = getHeaderStyle(id);
10994
+ if (!style) {
10995
+ throw new Error(`Unknown Theme V2 header style: ${id}`);
10996
+ }
10997
+ return style;
10998
+ }
10999
+ function resolveLegacyHeaderLookAlias(lookId) {
11000
+ return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
11001
+ }
11002
+ function getCompatibleHeaderStyleIds(layoutId) {
11003
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
11004
+ const style = getHeaderStyleOrThrow(styleId);
11005
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
11006
+ });
11007
+ }
10440
11008
  function solidBrandHeader(theme) {
10441
11009
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
10442
11010
  return {
@@ -10673,6 +11241,11 @@ var headerLookCatalog = [
10673
11241
  label: "Clean base",
10674
11242
  visualTreatment: "solid-neutral",
10675
11243
  layoutBehavior: "sticky",
11244
+ configuration: {
11245
+ structure: "inline-classic",
11246
+ treatment: "solid-neutral",
11247
+ behavior: "sticky"
11248
+ },
10676
11249
  openingRequirement: "none",
10677
11250
  compile: cleanBaseHeader
10678
11251
  },
@@ -10681,6 +11254,11 @@ var headerLookCatalog = [
10681
11254
  label: "Brand solid",
10682
11255
  visualTreatment: "solid-brand",
10683
11256
  layoutBehavior: "sticky-shrink",
11257
+ configuration: {
11258
+ structure: "inline-classic",
11259
+ treatment: "solid-brand",
11260
+ behavior: "sticky-shrink"
11261
+ },
10684
11262
  openingRequirement: "none",
10685
11263
  compile: solidBrandHeader
10686
11264
  },
@@ -10689,6 +11267,11 @@ var headerLookCatalog = [
10689
11267
  label: "Editorial line",
10690
11268
  visualTreatment: "light-editorial",
10691
11269
  layoutBehavior: "sticky",
11270
+ configuration: {
11271
+ structure: "editorial-stack",
11272
+ treatment: "light-editorial",
11273
+ behavior: "sticky"
11274
+ },
10692
11275
  openingRequirement: "none",
10693
11276
  maxRecommendedNavItems: 6,
10694
11277
  compile: editorialLineHeader
@@ -10698,6 +11281,11 @@ var headerLookCatalog = [
10698
11281
  label: "Centered calm",
10699
11282
  visualTreatment: "light-editorial",
10700
11283
  layoutBehavior: "normal-flow",
11284
+ configuration: {
11285
+ structure: "centered-stack",
11286
+ treatment: "light-editorial",
11287
+ behavior: "normal-flow"
11288
+ },
10701
11289
  openingRequirement: "none",
10702
11290
  maxRecommendedNavItems: 5,
10703
11291
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"],
@@ -10708,6 +11296,11 @@ var headerLookCatalog = [
10708
11296
  label: "Practical utility",
10709
11297
  visualTreatment: "solid-neutral",
10710
11298
  layoutBehavior: "sticky-shrink",
11299
+ configuration: {
11300
+ structure: "inline-classic",
11301
+ treatment: "solid-neutral",
11302
+ behavior: "sticky-shrink"
11303
+ },
10711
11304
  openingRequirement: "none",
10712
11305
  requiresProminentCta: true,
10713
11306
  compile: practicalUtilityHeader
@@ -10717,6 +11310,11 @@ var headerLookCatalog = [
10717
11310
  label: "Minimal transparent",
10718
11311
  visualTreatment: "minimal-transparent",
10719
11312
  layoutBehavior: "normal-flow",
11313
+ configuration: {
11314
+ structure: "inline-classic",
11315
+ treatment: "minimal-transparent",
11316
+ behavior: "normal-flow"
11317
+ },
10720
11318
  openingRequirement: "reserved-space-ok",
10721
11319
  compile: minimalTransparentHeader
10722
11320
  },
@@ -10725,6 +11323,11 @@ var headerLookCatalog = [
10725
11323
  label: "Transparent overlay",
10726
11324
  visualTreatment: "transparent-overlay",
10727
11325
  layoutBehavior: "fixed-overlay",
11326
+ configuration: {
11327
+ structure: "inline-classic",
11328
+ treatment: "transparent-overlay",
11329
+ behavior: "fixed-overlay"
11330
+ },
10728
11331
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10729
11332
  maxRecommendedNavItems: 5,
10730
11333
  allowedLogoShapes: ["none", "text-only", "horizontal"],
@@ -10735,6 +11338,11 @@ var headerLookCatalog = [
10735
11338
  label: "Floating glass",
10736
11339
  visualTreatment: "floating-glass",
10737
11340
  layoutBehavior: "fixed-floating",
11341
+ configuration: {
11342
+ structure: "floating-shell",
11343
+ treatment: "floating-glass",
11344
+ behavior: "fixed-floating"
11345
+ },
10738
11346
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10739
11347
  maxRecommendedNavItems: 5,
10740
11348
  allowedLogoShapes: ["none", "text-only", "horizontal"],
@@ -10742,9 +11350,17 @@ var headerLookCatalog = [
10742
11350
  }
10743
11351
  ];
10744
11352
  var guaranteedFallbackHeaderLookId = asHeaderLookId("clean-base");
11353
+ var guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
11354
+ var guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
11355
+ var allowedHeaderConfigurationKeys = new Set(
11356
+ headerLookCatalog.map((look) => headerConfigurationKey(look.configuration))
11357
+ );
10745
11358
  var headerLooksById = new Map(
10746
11359
  headerLookCatalog.map((look) => [look.id, look])
10747
11360
  );
11361
+ function headerConfigurationKey(configuration) {
11362
+ return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
11363
+ }
10748
11364
 
10749
11365
  // ../theme-core/src/site-styles/footerLooks.ts
10750
11366
  function asFooterLookId(value) {
@@ -10877,6 +11493,264 @@ var advancedDesignOptionCatalog = {
10877
11493
  detachedCustom: true
10878
11494
  };
10879
11495
 
11496
+ // ../theme-core/src/site-styles/typographyPresets.ts
11497
+ var bodyReadablePolicy = {
11498
+ recommendedCategories: ["sans-serif", "serif"],
11499
+ allowedCategories: ["sans-serif", "serif"],
11500
+ requiresItalicForBody: true,
11501
+ requiresBoldForBody: true
11502
+ };
11503
+ var headingFlexiblePolicy = {
11504
+ recommendedCategories: ["sans-serif", "serif", "display"],
11505
+ allowedCategories: ["sans-serif", "serif", "display"]
11506
+ };
11507
+ var displayHeadingPolicy = {
11508
+ recommendedCategories: ["display", "sans-serif", "serif"],
11509
+ allowedCategories: ["display", "sans-serif", "serif"]
11510
+ };
11511
+ function asTypographyPresetId(value) {
11512
+ if (!value.startsWith("typography-preset:")) {
11513
+ throw new Error(`TypographyPresetId must start with "typography-preset:". Received: ${value}`);
11514
+ }
11515
+ return value;
11516
+ }
11517
+ function defineTypographyPreset(preset2) {
11518
+ return {
11519
+ ...preset2,
11520
+ id: asTypographyPresetId(preset2.id)
11521
+ };
11522
+ }
11523
+ var modernSansTypography = {
11524
+ body: {
11525
+ family: "Inter, system-ui, sans-serif",
11526
+ size: "md",
11527
+ weight: "regular",
11528
+ lineHeight: "relaxed",
11529
+ letterSpacing: "normal"
11530
+ },
11531
+ headings: {
11532
+ default: {
11533
+ family: "Inter, system-ui, sans-serif",
11534
+ weight: "semibold",
11535
+ lineHeight: "normal",
11536
+ letterSpacing: "tight",
11537
+ italic: null,
11538
+ case: null
11539
+ },
11540
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11541
+ h2: { size: "lg", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11542
+ h3: { size: "md", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null }
11543
+ },
11544
+ scale: "balanced"
11545
+ };
11546
+ var warmRoundedTypography = {
11547
+ body: {
11548
+ family: "Nunito Sans, system-ui, sans-serif",
11549
+ size: "lg",
11550
+ weight: "regular",
11551
+ lineHeight: "relaxed",
11552
+ letterSpacing: "normal"
11553
+ },
11554
+ headings: {
11555
+ default: {
11556
+ family: "Nunito Sans, system-ui, sans-serif",
11557
+ weight: "bold",
11558
+ lineHeight: "normal",
11559
+ letterSpacing: "normal",
11560
+ italic: null,
11561
+ case: null
11562
+ },
11563
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11564
+ h2: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11565
+ h3: { size: "md", weight: "semibold", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11566
+ },
11567
+ scale: "balanced"
11568
+ };
11569
+ var editorialSerifTypography = {
11570
+ body: {
11571
+ family: "Lora, Georgia, serif",
11572
+ size: "lg",
11573
+ weight: "regular",
11574
+ lineHeight: "loose",
11575
+ letterSpacing: "normal"
11576
+ },
11577
+ headings: {
11578
+ default: {
11579
+ family: "Playfair Display, Georgia, serif",
11580
+ weight: "semibold",
11581
+ lineHeight: "normal",
11582
+ letterSpacing: "tight",
11583
+ italic: null,
11584
+ case: null
11585
+ },
11586
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11587
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11588
+ h3: { size: "md", weight: "semibold", lineHeight: "relaxed", letterSpacing: "normal", italic: true }
11589
+ },
11590
+ scale: "spacious"
11591
+ };
11592
+ var classicSerifTypography = {
11593
+ body: {
11594
+ family: "Libre Baskerville, Georgia, serif",
11595
+ size: "md",
11596
+ weight: "regular",
11597
+ lineHeight: "relaxed",
11598
+ letterSpacing: "normal"
11599
+ },
11600
+ headings: {
11601
+ default: {
11602
+ family: "Cormorant Garamond, Georgia, serif",
11603
+ weight: "semibold",
11604
+ lineHeight: "normal",
11605
+ letterSpacing: "normal",
11606
+ italic: null,
11607
+ case: null
11608
+ },
11609
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11610
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11611
+ h3: { size: "md", weight: "medium", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11612
+ },
11613
+ scale: "balanced"
11614
+ };
11615
+ var luxeContrastTypography = {
11616
+ body: {
11617
+ family: "Manrope, system-ui, sans-serif",
11618
+ size: "md",
11619
+ weight: "regular",
11620
+ lineHeight: "relaxed",
11621
+ letterSpacing: "normal"
11622
+ },
11623
+ headings: {
11624
+ default: {
11625
+ family: "Cormorant Garamond, Georgia, serif",
11626
+ weight: "semibold",
11627
+ lineHeight: "normal",
11628
+ letterSpacing: "tight",
11629
+ italic: null,
11630
+ case: null
11631
+ },
11632
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11633
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11634
+ h3: { size: "md", weight: "medium", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11635
+ },
11636
+ scale: "spacious"
11637
+ };
11638
+ var boldDisplayTypography = {
11639
+ body: {
11640
+ family: "Manrope, system-ui, sans-serif",
11641
+ size: "lg",
11642
+ weight: "regular",
11643
+ lineHeight: "relaxed",
11644
+ letterSpacing: "normal"
11645
+ },
11646
+ headings: {
11647
+ default: {
11648
+ family: '"TAN - PEARL", sans-serif',
11649
+ weight: "bold",
11650
+ lineHeight: "normal",
11651
+ letterSpacing: "tight",
11652
+ colorToken: "primary",
11653
+ italic: null,
11654
+ case: null
11655
+ },
11656
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11657
+ h2: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11658
+ h3: { size: "md", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null }
11659
+ },
11660
+ scale: "balanced"
11661
+ };
11662
+ var typographyPresets = [
11663
+ defineTypographyPreset({
11664
+ id: "typography-preset:modern-sans",
11665
+ name: "Modern Sans",
11666
+ description: "Crisp, neutral type for clear service pages and practical editorial structure.",
11667
+ defaultFonts: { body: "Inter, system-ui, sans-serif", heading: "Inter, system-ui, sans-serif" },
11668
+ recommendedFonts: {
11669
+ body: ["Inter", "Source Sans 3", "IBM Plex Sans"],
11670
+ heading: ["Inter", "Manrope", "Source Sans 3"]
11671
+ },
11672
+ slotPolicies: { body: bodyReadablePolicy, heading: headingFlexiblePolicy },
11673
+ typography: modernSansTypography
11674
+ }),
11675
+ defineTypographyPreset({
11676
+ id: "typography-preset:warm-rounded",
11677
+ name: "Warm Rounded",
11678
+ description: "Soft, friendly type for welcoming studios, classes, and community businesses.",
11679
+ defaultFonts: { body: "Nunito Sans, system-ui, sans-serif", heading: "Nunito Sans, system-ui, sans-serif" },
11680
+ recommendedFonts: {
11681
+ body: ["Nunito Sans", "Atkinson Hyperlegible", "Lato"],
11682
+ heading: ["Nunito Sans", "Quicksand", "Manrope"]
11683
+ },
11684
+ slotPolicies: { body: bodyReadablePolicy, heading: headingFlexiblePolicy },
11685
+ typography: warmRoundedTypography
11686
+ }),
11687
+ defineTypographyPreset({
11688
+ id: "typography-preset:editorial-serif",
11689
+ name: "Editorial Serif",
11690
+ description: "Story-led type with warm reading rhythm and expressive headings.",
11691
+ defaultFonts: { body: "Lora, Georgia, serif", heading: "Playfair Display, Georgia, serif" },
11692
+ recommendedFonts: {
11693
+ body: ["Lora", "Source Serif 4", "Libre Baskerville"],
11694
+ heading: ["Playfair Display", "Cormorant Garamond", "Fraunces"]
11695
+ },
11696
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11697
+ typography: editorialSerifTypography
11698
+ }),
11699
+ defineTypographyPreset({
11700
+ id: "typography-preset:classic-serif",
11701
+ name: "Classic Serif",
11702
+ description: "Measured, polished type for premium and established offers.",
11703
+ defaultFonts: { body: "Libre Baskerville, Georgia, serif", heading: "Cormorant Garamond, Georgia, serif" },
11704
+ recommendedFonts: {
11705
+ body: ["Libre Baskerville", "Source Serif 4", "Lora"],
11706
+ heading: ["Cormorant Garamond", "Playfair Display", "Libre Baskerville"]
11707
+ },
11708
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11709
+ typography: classicSerifTypography
11710
+ }),
11711
+ defineTypographyPreset({
11712
+ id: "typography-preset:luxe-contrast",
11713
+ name: "Luxe Contrast",
11714
+ description: "A restrained sans body paired with elegant high-contrast headings.",
11715
+ defaultFonts: { body: "Manrope, system-ui, sans-serif", heading: "Cormorant Garamond, Georgia, serif" },
11716
+ recommendedFonts: {
11717
+ body: ["Manrope", "Inter", "Source Sans 3"],
11718
+ heading: ["Cormorant Garamond", "Playfair Display", "Bodoni Moda"]
11719
+ },
11720
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11721
+ typography: luxeContrastTypography
11722
+ }),
11723
+ defineTypographyPreset({
11724
+ id: "typography-preset:bold-display",
11725
+ name: "Bold Display",
11726
+ description: "Punchy display headings with readable sans body copy for branded launches.",
11727
+ defaultFonts: { body: "Manrope, system-ui, sans-serif", heading: '"TAN - PEARL", sans-serif' },
11728
+ recommendedFonts: {
11729
+ body: ["Manrope", "Inter", "Space Grotesk"],
11730
+ heading: ["Anton", "Bebas Neue", "Archivo Black"]
11731
+ },
11732
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11733
+ typography: boldDisplayTypography,
11734
+ heroTypography: {
11735
+ headlineSize: "6xl",
11736
+ headlineLineHeight: "tight",
11737
+ subheadlineSize: "editorial",
11738
+ subheadlineLineHeight: "normal",
11739
+ microHeadlineSize: "6xl",
11740
+ microHeadlineLineHeight: "tight",
11741
+ microSubheadlineSize: "xl",
11742
+ microSubheadlineLineHeight: "normal",
11743
+ responsive: {
11744
+ tablet: { headlineSize: "5xl" },
11745
+ mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
11746
+ }
11747
+ }
11748
+ })
11749
+ ];
11750
+ var typographyPresetsById = new Map(
11751
+ typographyPresets.map((preset2) => [preset2.id, preset2])
11752
+ );
11753
+
10880
11754
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
10881
11755
  var curatedSiteStyleIdValues = [
10882
11756
  "site-style:calm-studio",
@@ -10889,6 +11763,7 @@ var curatedSiteStyleIdValues = [
10889
11763
  "site-style:personal-retreat-journal",
10890
11764
  "site-style:tactile-workshop",
10891
11765
  "site-style:modern-wellness",
11766
+ "site-style:soft-earth",
10892
11767
  "site-style:bold-launch",
10893
11768
  "site-style:south-west-twerk-school"
10894
11769
  ];
@@ -10965,6 +11840,15 @@ function uniqueContentFrameKinds() {
10965
11840
  }
10966
11841
  var generatedContentFrameKinds = uniqueContentFrameKinds();
10967
11842
  function defineCuratedSiteStyle(input) {
11843
+ const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
11844
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
11845
+ const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
11846
+ const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
11847
+ if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
11848
+ throw new Error(
11849
+ `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
11850
+ );
11851
+ }
10968
11852
  return {
10969
11853
  id: asSiteStyleId(input.id),
10970
11854
  name: input.name,
@@ -10985,11 +11869,23 @@ function defineCuratedSiteStyle(input) {
10985
11869
  },
10986
11870
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
10987
11871
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
10988
- recommendedHeaderLookIds: (input.recommendedHeaderLookIds ?? ["clean-base"]).map(asHeaderLookId),
11872
+ defaultHeaderSelection: input.defaultHeaderSelection ? {
11873
+ layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
11874
+ styleId: asHeaderStyleId(input.defaultHeaderSelection.styleId)
11875
+ } : inferredHeaderCuration.defaultHeaderSelection,
11876
+ recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
11877
+ recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
11878
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
11879
+ layoutId: asHeaderLayoutId(selection.layoutId),
11880
+ styleId: asHeaderStyleId(selection.styleId)
11881
+ })),
11882
+ recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
10989
11883
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
10990
11884
  recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
10991
11885
  buttonPersonalityChoices: input.buttonPersonalityChoices,
10992
- paletteVariantChoices: input.paletteVariantChoices
11886
+ paletteVariantChoices: input.paletteVariantChoices,
11887
+ typographyPresetChoices,
11888
+ defaultTypographyPresetId
10993
11889
  };
10994
11890
  }
10995
11891
  function buttonChoice(id, note) {
@@ -10998,6 +11894,88 @@ function buttonChoice(id, note) {
10998
11894
  function paletteChoice(id, note) {
10999
11895
  return note ? { id: asPaletteVariantId(id), note } : { id: asPaletteVariantId(id) };
11000
11896
  }
11897
+ function headerLayoutChoice(id, note) {
11898
+ return note ? { id: asHeaderLayoutId(id), note } : { id: asHeaderLayoutId(id) };
11899
+ }
11900
+ function headerStyleChoice(id, note) {
11901
+ return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
11902
+ }
11903
+ function headerLayoutRecordKey(id) {
11904
+ return id;
11905
+ }
11906
+ function uniqueHeaderLayoutChoices(choices) {
11907
+ const seen = /* @__PURE__ */ new Set();
11908
+ const unique = choices.filter((choice) => {
11909
+ if (seen.has(choice.id)) return false;
11910
+ seen.add(choice.id);
11911
+ return true;
11912
+ });
11913
+ const first = unique[0];
11914
+ if (!first) {
11915
+ throw new Error("Expected at least one curated header layout choice.");
11916
+ }
11917
+ return [first, ...unique.slice(1)];
11918
+ }
11919
+ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
11920
+ const first = choices[0] ?? {
11921
+ id: getCompatibleHeaderStyleIds(fallbackLayoutId)[0] ?? asHeaderStyleId("minimal")
11922
+ };
11923
+ return [first, ...choices.slice(1)];
11924
+ }
11925
+ function inferHeaderCurationFromLegacyLooks(lookIds) {
11926
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
11927
+ const defaultHeaderSelection = selections[0] ?? {
11928
+ layoutId: asHeaderLayoutId("classic"),
11929
+ styleId: asHeaderStyleId("minimal")
11930
+ };
11931
+ const layoutChoices = uniqueHeaderLayoutChoices(
11932
+ selections.map((selection) => headerLayoutChoice(selection.layoutId))
11933
+ );
11934
+ const stylesByLayout = {};
11935
+ for (const layoutChoice of layoutChoices) {
11936
+ const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
11937
+ stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
11938
+ styleChoices,
11939
+ layoutChoice.id
11940
+ );
11941
+ }
11942
+ return {
11943
+ defaultHeaderSelection,
11944
+ recommendedHeaderLayoutChoices: layoutChoices,
11945
+ recommendedHeaderStyleChoicesByLayout: stylesByLayout
11946
+ };
11947
+ }
11948
+ function typographyChoice(id, note) {
11949
+ return note ? { id: asTypographyPresetId(id), note } : { id: asTypographyPresetId(id) };
11950
+ }
11951
+ function defaultTypographyPresetChoicesForRecipe(recipe) {
11952
+ switch (recipe) {
11953
+ case "clean-sans":
11954
+ return [
11955
+ typographyChoice("typography-preset:modern-sans"),
11956
+ typographyChoice("typography-preset:luxe-contrast"),
11957
+ typographyChoice("typography-preset:bold-display")
11958
+ ];
11959
+ case "friendly-sans":
11960
+ return [
11961
+ typographyChoice("typography-preset:warm-rounded"),
11962
+ typographyChoice("typography-preset:modern-sans"),
11963
+ typographyChoice("typography-preset:editorial-serif")
11964
+ ];
11965
+ case "serif-editorial":
11966
+ return [
11967
+ typographyChoice("typography-preset:editorial-serif"),
11968
+ typographyChoice("typography-preset:classic-serif"),
11969
+ typographyChoice("typography-preset:warm-rounded")
11970
+ ];
11971
+ case "classic-serif":
11972
+ return [
11973
+ typographyChoice("typography-preset:classic-serif"),
11974
+ typographyChoice("typography-preset:luxe-contrast"),
11975
+ typographyChoice("typography-preset:editorial-serif")
11976
+ ];
11977
+ }
11978
+ }
11001
11979
  var curatedSiteStyles = [
11002
11980
  defineCuratedSiteStyle({
11003
11981
  id: "site-style:calm-studio",
@@ -11323,6 +12301,102 @@ var curatedSiteStyles = [
11323
12301
  paletteChoice("warm-neutral-clay")
11324
12302
  ]
11325
12303
  }),
12304
+ defineCuratedSiteStyle({
12305
+ id: "site-style:soft-earth",
12306
+ name: "Soft Earth",
12307
+ description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
12308
+ generationBrief: "Use cream space, terracotta CTAs, olive proof bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community proof, and a simple two-column FAQ when content allows.",
12309
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
12310
+ selectionKeywordRules: [
12311
+ { kind: "word", value: "meditation" },
12312
+ { kind: "word", value: "wellbeing" },
12313
+ { kind: "substring", value: "retreat" },
12314
+ { kind: "phrase", value: "yoga studio" },
12315
+ { kind: "phrase", value: "mindful movement" }
12316
+ ],
12317
+ tokenRecipes: {
12318
+ palette: "warm-neutral",
12319
+ contrast: "standard",
12320
+ radius: "soft",
12321
+ shadow: "subtle",
12322
+ typography: "serif-editorial",
12323
+ spacing: "airy",
12324
+ motion: "subtle"
12325
+ },
12326
+ compositionBudget: balancedBudget,
12327
+ themeOverrides: {
12328
+ typography: {
12329
+ body: {
12330
+ family: "Inter, system-ui, sans-serif",
12331
+ size: "md",
12332
+ weight: "regular",
12333
+ lineHeight: "relaxed",
12334
+ letterSpacing: "normal"
12335
+ },
12336
+ headings: {
12337
+ default: {
12338
+ family: '"Cormorant Garamond", Georgia, serif',
12339
+ weight: "regular",
12340
+ lineHeight: "normal",
12341
+ letterSpacing: "normal",
12342
+ colorToken: "text",
12343
+ italic: null,
12344
+ case: null
12345
+ },
12346
+ h1: {
12347
+ size: "xl",
12348
+ weight: "regular",
12349
+ lineHeight: "normal",
12350
+ letterSpacing: "normal",
12351
+ italic: null
12352
+ },
12353
+ h2: {
12354
+ size: "lg",
12355
+ weight: "regular",
12356
+ lineHeight: "normal",
12357
+ letterSpacing: "normal",
12358
+ italic: null
12359
+ },
12360
+ h3: {
12361
+ size: "md",
12362
+ weight: "regular",
12363
+ lineHeight: "normal",
12364
+ letterSpacing: "normal",
12365
+ italic: null
12366
+ }
12367
+ },
12368
+ scale: "majorThird"
12369
+ },
12370
+ bodyText: {
12371
+ intro: {
12372
+ paragraphSize: "default",
12373
+ headingSize: "editorial"
12374
+ }
12375
+ }
12376
+ },
12377
+ recommendedAppearancePresetIds: [
12378
+ "hero-brand-scrim",
12379
+ "intro-soft-earth-statement",
12380
+ "feature-cards-soft-earth-offerings",
12381
+ "testimonials-soft-earth-proof-band",
12382
+ "faq-soft-earth-two-column",
12383
+ "contact-form-panel"
12384
+ ],
12385
+ recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
12386
+ recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
12387
+ buttonPersonalityChoices: [
12388
+ buttonChoice("earth-pill"),
12389
+ buttonChoice("soft-pill"),
12390
+ buttonChoice("pebble"),
12391
+ buttonChoice("editorial-link")
12392
+ ],
12393
+ paletteVariantChoices: [
12394
+ paletteChoice("warm-neutral-soft-earth"),
12395
+ paletteChoice("warm-neutral-clay"),
12396
+ paletteChoice("warm-neutral-forest"),
12397
+ paletteChoice("soft-natural-sage")
12398
+ ]
12399
+ }),
11326
12400
  defineCuratedSiteStyle({
11327
12401
  id: "site-style:bold-launch",
11328
12402
  name: "Bold Launch",
@@ -11376,49 +12450,13 @@ var curatedSiteStyles = [
11376
12450
  motion: "expressive"
11377
12451
  },
11378
12452
  compositionBudget: expressiveBudget,
12453
+ typographyPresetChoices: [
12454
+ typographyChoice("typography-preset:bold-display"),
12455
+ typographyChoice("typography-preset:modern-sans"),
12456
+ typographyChoice("typography-preset:luxe-contrast")
12457
+ ],
12458
+ defaultTypographyPresetId: "typography-preset:bold-display",
11379
12459
  themeOverrides: {
11380
- typography: {
11381
- body: {
11382
- family: "Manrope, system-ui, sans-serif",
11383
- size: "lg",
11384
- weight: "regular",
11385
- lineHeight: "relaxed",
11386
- letterSpacing: "normal"
11387
- },
11388
- headings: {
11389
- default: {
11390
- family: '"TAN - PEARL", sans-serif',
11391
- weight: "bold",
11392
- lineHeight: "normal",
11393
- letterSpacing: "tight",
11394
- colorToken: "primary",
11395
- italic: null,
11396
- case: null
11397
- },
11398
- h1: {
11399
- size: "xl",
11400
- weight: "bold",
11401
- lineHeight: "normal",
11402
- letterSpacing: "tight",
11403
- italic: null
11404
- },
11405
- h2: {
11406
- size: "lg",
11407
- weight: "bold",
11408
- lineHeight: "normal",
11409
- letterSpacing: "normal",
11410
- italic: null
11411
- },
11412
- h3: {
11413
- size: "md",
11414
- weight: "bold",
11415
- lineHeight: "normal",
11416
- letterSpacing: "normal",
11417
- italic: null
11418
- }
11419
- },
11420
- scale: "balanced"
11421
- },
11422
12460
  bodyText: {
11423
12461
  intro: {
11424
12462
  paragraphSize: "editorial",
@@ -15761,8 +16799,9 @@ var faqAccordionFragment = defineFragment({
15761
16799
  },
15762
16800
  fallback: "rb-faq-item"
15763
16801
  },
15764
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } }
15765
- // Pass icon style from theme
16802
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
16803
+ // Legacy theme accordion style
16804
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
15766
16805
  },
15767
16806
  triggerFrom: "faqItem.question",
15768
16807
  contentFrom: "faqItem.answer"
@@ -16897,100 +17936,428 @@ var heroBlockDefinition = {
16897
17936
  manifest: heroManifest
16898
17937
  };
16899
17938
 
16900
- // ../blocks/src/system/blocks/body-text.ts
16901
- var bodyCopyComposition = composeFragments([{ fragment: bodyCopyFragment }]);
16902
- var proseLayout = styledSection({
16903
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
16904
- spacing: "medium",
16905
- baseClass: ""
16906
- });
16907
- var introLayout = styledSection({
16908
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
16909
- spacing: "medium",
16910
- baseClass: ""
16911
- });
16912
- var narrowLayout = styledSection({
16913
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
16914
- spacing: "medium",
16915
- baseClass: ""
16916
- });
16917
- var bodyTextManifest = createBlockManifest({
16918
- id: "block.body-text",
16919
- title: "Body Text",
16920
- titleSource: "heading",
16921
- category: "content",
16922
- fragments: [
16923
- { fragment: bodyCopyFragment, fieldPriority: 0 }
16924
- ],
16925
- layout: proseLayout,
16926
- variants: {
16927
- prose: proseLayout,
16928
- intro: introLayout,
16929
- narrow: narrowLayout
16930
- },
16931
- defaultVariant: "prose",
16932
- variantOptions: {
16933
- prose: {
16934
- label: "Prose",
16935
- description: "Long-form rich text for pages and posts.",
16936
- icon: "Type"
16937
- },
16938
- intro: {
16939
- label: "Intro",
16940
- description: "Narrower, larger text for above-the-fold intros.",
16941
- icon: "AlignCenter"
16942
- },
16943
- narrow: {
16944
- label: "Narrow",
16945
- description: "Left-aligned lead copy with a shorter max width.",
16946
- icon: "AlignLeft"
17939
+ // ../blocks/src/system/fields/aspectRatio.ts
17940
+ var standardAspectRatioOptions = [
17941
+ { value: "auto", label: "Auto (original)" },
17942
+ { value: "16/9", label: "16:9 (Landscape)" },
17943
+ { value: "4/3", label: "4:3 (Standard)" },
17944
+ { value: "1/1", label: "1:1 (Square)" },
17945
+ { value: "3/4", label: "3:4 (Portrait)" }
17946
+ ];
17947
+ function createAspectRatioField(options = {}) {
17948
+ return {
17949
+ id: options.id ?? "aspectRatio",
17950
+ type: "select",
17951
+ label: options.label ?? "Aspect ratio",
17952
+ ...options.description ? { description: options.description } : {},
17953
+ required: false,
17954
+ defaultValue: options.defaultValue ?? "auto",
17955
+ multiple: false,
17956
+ options: [...standardAspectRatioOptions],
17957
+ ui: {
17958
+ intent: options.uiIntent ?? "display",
17959
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
16947
17960
  }
16948
- },
16949
- description: "Simple text block with optional heading and alignment controls.",
16950
- tags: ["text", "paragraph", "content", "copy", "article", "writing", "rich-text"],
16951
- icon: "Type",
16952
- styleTokens: {
16953
- spacing: "md"
16954
- }
16955
- });
16956
- var bodyTextBlockDefinition = {
16957
- manifest: bodyTextManifest
16958
- };
17961
+ };
17962
+ }
16959
17963
 
16960
- // ../blocks/src/system/blocks/blog-post.tsx
16961
- import { z as z28 } from "zod";
16962
- var composition = composeFragments([{ fragment: blogFeaturedPostFragment }]);
16963
- var blogPostLayout = section(
16964
- { background: "background", className: "rb-px-6 rb-py-12" },
16965
- [...composition.layout]
16966
- );
16967
- var blogPostManifest = createBlockManifest({
16968
- id: "block.blog-post",
16969
- version: "0.1.0",
16970
- title: "Blog post",
16971
- description: "Highlights a single blog post with title, image, and excerpt.",
16972
- category: "blog",
16973
- contentTypes: ["post"],
16974
- tags: ["blog", "post", "featured", "highlight", "article", "single"],
16975
- icon: "FileText",
16976
- styleTokens: {
16977
- background: "surface",
16978
- typography: "body",
16979
- spacing: "md"
16980
- },
16981
- behaviours: {
16982
- supportsThemeSwitching: true,
16983
- inlineEditing: false,
16984
- animation: false,
16985
- paletteHidden: false
16986
- },
16987
- additionalFields: composition.fields,
16988
- layout: blogPostLayout
16989
- });
16990
- var blogPostDataSchema = z28.object({
16991
- id: z28.string(),
16992
- title: z28.string(),
16993
- slug: z28.string(),
17964
+ // ../blocks/src/system/fields/imageLayout.ts
17965
+ function createImageColSizeField(options = {}) {
17966
+ const {
17967
+ id = "imageColSize",
17968
+ label = "Image column size",
17969
+ description = "Controls how large the image/thumbnail column is at desktop breakpoints.",
17970
+ defaultValue = "1/3",
17971
+ uiIntent = "display",
17972
+ visibleWhen
17973
+ } = options;
17974
+ return {
17975
+ id,
17976
+ type: "select",
17977
+ label,
17978
+ description,
17979
+ required: false,
17980
+ defaultValue,
17981
+ multiple: false,
17982
+ options: [
17983
+ { value: "1/4", label: "Small (1/4)" },
17984
+ { value: "1/3", label: "Medium (1/3)" },
17985
+ { value: "2/5", label: "Large (2/5)" },
17986
+ { value: "1/2", label: "Extra large (1/2)" },
17987
+ { value: "2/3", label: "Huge (2/3)" }
17988
+ ],
17989
+ ui: {
17990
+ intent: uiIntent,
17991
+ ...visibleWhen ? { visibleWhen } : {}
17992
+ }
17993
+ };
17994
+ }
17995
+ function createImagePositionField(options = {}) {
17996
+ const {
17997
+ id = "imagePosition",
17998
+ label = "Image position",
17999
+ description = "Choose which side the image appears on.",
18000
+ defaultValue = "left",
18001
+ includeAlternate = false,
18002
+ uiIntent = "display",
18003
+ visibleWhen
18004
+ } = options;
18005
+ const positionOptions = [
18006
+ { value: "left", label: "Left" },
18007
+ { value: "right", label: "Right" },
18008
+ ...includeAlternate ? [{ value: "alternate", label: "Alternate" }] : []
18009
+ ];
18010
+ return {
18011
+ id,
18012
+ type: "select",
18013
+ label,
18014
+ description,
18015
+ required: false,
18016
+ defaultValue,
18017
+ multiple: false,
18018
+ // Spread to get a mutable array type without unsafe casts.
18019
+ options: [...positionOptions],
18020
+ ui: {
18021
+ intent: uiIntent,
18022
+ ...visibleWhen ? { visibleWhen } : {}
18023
+ }
18024
+ };
18025
+ }
18026
+
18027
+ // ../blocks/src/system/blocks/intro.ts
18028
+ function introHeading(className) {
18029
+ return text(
18030
+ {
18031
+ as: "h2",
18032
+ className
18033
+ },
18034
+ when("content.title"),
18035
+ bind("content.title")
18036
+ );
18037
+ }
18038
+ function introBody(className = "rb-prose rb-max-w-none") {
18039
+ return richText({ className }, bind("content.body"));
18040
+ }
18041
+ function introCtas(justify = "start") {
18042
+ return ctaRow({
18043
+ justify,
18044
+ gap: "md",
18045
+ containerClassName: "rb-mt-2"
18046
+ });
18047
+ }
18048
+ function introCopyStack(options = {}) {
18049
+ return stack(
18050
+ {
18051
+ gap: "md",
18052
+ className: options.className ?? "rb-intro-copy"
18053
+ },
18054
+ [
18055
+ introHeading(options.headingClassName ?? "rb-intro-title"),
18056
+ introBody(options.bodyClassName),
18057
+ introCtas(options.ctaJustify)
18058
+ ]
18059
+ );
18060
+ }
18061
+ var introMedia = media(
18062
+ {
18063
+ className: "rb-intro-media rb-w-full rb-h-auto rb-object-cover",
18064
+ style: {
18065
+ aspectRatio: { $bind: { from: "content.aspectRatio" } }
18066
+ }
18067
+ },
18068
+ bind("content.media")
18069
+ );
18070
+ var centeredCopyLayout = styledSection({
18071
+ children: styledContainer({
18072
+ rootType: "stack",
18073
+ rootProps: { gap: "lg" },
18074
+ children: [
18075
+ introCopyStack({
18076
+ className: "rb-intro-copy rb-mx-auto rb-max-w-3xl rb-text-center",
18077
+ headingClassName: "rb-intro-title rb-text-center",
18078
+ bodyClassName: "rb-prose rb-mx-auto rb-max-w-none",
18079
+ ctaJustify: "center"
18080
+ })
18081
+ ]
18082
+ }),
18083
+ baseClass: "",
18084
+ spacing: "medium"
18085
+ });
18086
+ var statementCopyLayout = styledSection({
18087
+ children: styledContainer({
18088
+ children: [
18089
+ el(
18090
+ "div",
18091
+ {
18092
+ className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
18093
+ },
18094
+ [
18095
+ introHeading("rb-intro-title rb-max-w-xl"),
18096
+ stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18097
+ introBody(),
18098
+ introCtas("start")
18099
+ ])
18100
+ ]
18101
+ )
18102
+ ]
18103
+ }),
18104
+ baseClass: "",
18105
+ spacing: "medium"
18106
+ });
18107
+ var statementMediaLayout = styledSection({
18108
+ children: styledContainer({
18109
+ children: [
18110
+ el(
18111
+ "div",
18112
+ {
18113
+ className: "rb-intro rb-intro-statement-media rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-3 rb-lg-items-center"
18114
+ },
18115
+ [
18116
+ introHeading("rb-intro-title rb-max-w-xl"),
18117
+ stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18118
+ introBody(),
18119
+ introCtas("start")
18120
+ ]),
18121
+ el("div", { className: "rb-intro-media-wrap rb-w-full" }, [introMedia], when("content.media"))
18122
+ ]
18123
+ )
18124
+ ]
18125
+ }),
18126
+ baseClass: "",
18127
+ spacing: "medium"
18128
+ });
18129
+ var mediaCopyLayout = styledSection({
18130
+ children: styledContainer({
18131
+ children: [
18132
+ responsiveTwoColumn({
18133
+ image: el("div", { className: "rb-intro-media-wrap rb-w-full" }, [introMedia]),
18134
+ text: introCopyStack({
18135
+ className: "rb-intro-copy rb-max-w-xl",
18136
+ headingClassName: "rb-intro-title"
18137
+ }),
18138
+ ratioFrom: "content.ratio",
18139
+ imagePositionFrom: "content.imagePosition",
18140
+ gapFrom: "content.gap",
18141
+ gapFallback: "comfortable",
18142
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
18143
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-center"
18144
+ })
18145
+ ]
18146
+ }),
18147
+ baseClass: "",
18148
+ spacing: "medium"
18149
+ });
18150
+ var introConfig = {
18151
+ id: "block.intro",
18152
+ title: "Intro",
18153
+ category: "layout",
18154
+ includeContainerStyles: true,
18155
+ titleSource: "title",
18156
+ additionalFields: [
18157
+ {
18158
+ id: "title",
18159
+ type: "text",
18160
+ label: "Statement",
18161
+ required: false,
18162
+ multiline: true,
18163
+ maxLength: 160
18164
+ },
18165
+ {
18166
+ id: "body",
18167
+ type: "richText",
18168
+ label: "Text",
18169
+ required: true,
18170
+ ui: {
18171
+ richTextVariant: "limited"
18172
+ }
18173
+ },
18174
+ {
18175
+ id: "media",
18176
+ type: "media",
18177
+ label: "Media",
18178
+ required: false,
18179
+ mediaKinds: ["image"],
18180
+ ui: {
18181
+ intent: "content",
18182
+ visibleWhen: { field: "variant", notEquals: "statement-copy" }
18183
+ }
18184
+ },
18185
+ createImagePositionField({
18186
+ id: "imagePosition",
18187
+ label: "Image position",
18188
+ defaultValue: "left",
18189
+ uiIntent: "display",
18190
+ visibleWhen: { field: "variant", equals: "media-copy" }
18191
+ }),
18192
+ {
18193
+ id: "gap",
18194
+ type: "select",
18195
+ label: "Gap between media and text",
18196
+ required: false,
18197
+ defaultValue: "comfortable",
18198
+ multiple: false,
18199
+ options: [
18200
+ { value: "none", label: "None" },
18201
+ { value: "compact", label: "Compact" },
18202
+ { value: "cozy", label: "Cozy" },
18203
+ { value: "medium", label: "Medium" },
18204
+ { value: "comfortable", label: "Comfortable" },
18205
+ { value: "spacious", label: "Spacious" }
18206
+ ],
18207
+ ui: {
18208
+ intent: "display",
18209
+ visibleWhen: { field: "variant", equals: "media-copy" }
18210
+ }
18211
+ },
18212
+ createImageColSizeField({
18213
+ id: "ratio",
18214
+ label: "Media column size",
18215
+ defaultValue: "1/2",
18216
+ uiIntent: "display",
18217
+ visibleWhen: { field: "variant", equals: "media-copy" }
18218
+ }),
18219
+ createAspectRatioField({
18220
+ id: "aspectRatio",
18221
+ label: "Media aspect ratio",
18222
+ description: "Crop media to a consistent aspect ratio.",
18223
+ defaultValue: "auto",
18224
+ visibleWhen: { field: "media", notEquals: null }
18225
+ }),
18226
+ createCtasRepeater({
18227
+ label: "Calls to action",
18228
+ itemLabel: "CTA",
18229
+ maxItems: 2
18230
+ })
18231
+ ],
18232
+ layout: centeredCopyLayout,
18233
+ variants: {
18234
+ "centered-copy": centeredCopyLayout,
18235
+ "statement-copy": statementCopyLayout,
18236
+ "statement-media": statementMediaLayout,
18237
+ "media-copy": mediaCopyLayout
18238
+ },
18239
+ defaultVariant: "statement-copy",
18240
+ variantOptions: {
18241
+ "centered-copy": {
18242
+ label: "Centered copy",
18243
+ description: "A focused intro with centered text and optional calls to action."
18244
+ },
18245
+ "statement-copy": {
18246
+ label: "Statement and copy",
18247
+ description: "A large statement on the left with supporting copy on the right."
18248
+ },
18249
+ "statement-media": {
18250
+ label: "Statement, copy and media",
18251
+ description: "A three-part intro with statement, copy and a small image."
18252
+ },
18253
+ "media-copy": {
18254
+ label: "Media and copy",
18255
+ description: "A compact media/text intro for softer transitions after a hero."
18256
+ }
18257
+ },
18258
+ description: "A flexible introductory section for statement copy, supporting text, media, and CTAs.",
18259
+ tags: ["intro", "introduction", "about", "welcome", "statement", "media", "text"],
18260
+ icon: "PanelTopOpen"
18261
+ };
18262
+ var introManifest = createBlockManifest(introConfig);
18263
+ var introBlockDefinition = {
18264
+ manifest: introManifest
18265
+ };
18266
+
18267
+ // ../blocks/src/system/blocks/body-text.ts
18268
+ var bodyCopyComposition = composeFragments([{ fragment: bodyCopyFragment }]);
18269
+ var proseLayout = styledSection({
18270
+ children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
18271
+ spacing: "medium",
18272
+ baseClass: ""
18273
+ });
18274
+ var introLayout = styledSection({
18275
+ children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
18276
+ spacing: "medium",
18277
+ baseClass: ""
18278
+ });
18279
+ var narrowLayout = styledSection({
18280
+ children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
18281
+ spacing: "medium",
18282
+ baseClass: ""
18283
+ });
18284
+ var bodyTextManifest = createBlockManifest({
18285
+ id: "block.body-text",
18286
+ title: "Body Text",
18287
+ titleSource: "heading",
18288
+ category: "content",
18289
+ fragments: [
18290
+ { fragment: bodyCopyFragment, fieldPriority: 0 }
18291
+ ],
18292
+ layout: proseLayout,
18293
+ variants: {
18294
+ prose: proseLayout,
18295
+ intro: introLayout,
18296
+ narrow: narrowLayout
18297
+ },
18298
+ defaultVariant: "prose",
18299
+ variantOptions: {
18300
+ prose: {
18301
+ label: "Prose",
18302
+ description: "Long-form rich text for pages and posts.",
18303
+ icon: "Type"
18304
+ },
18305
+ intro: {
18306
+ label: "Intro",
18307
+ description: "Narrower, larger text for above-the-fold intros.",
18308
+ icon: "AlignCenter"
18309
+ },
18310
+ narrow: {
18311
+ label: "Narrow",
18312
+ description: "Left-aligned lead copy with a shorter max width.",
18313
+ icon: "AlignLeft"
18314
+ }
18315
+ },
18316
+ description: "Simple text block with optional heading and alignment controls.",
18317
+ tags: ["text", "paragraph", "content", "copy", "article", "writing", "rich-text"],
18318
+ icon: "Type",
18319
+ styleTokens: {
18320
+ spacing: "md"
18321
+ }
18322
+ });
18323
+ var bodyTextBlockDefinition = {
18324
+ manifest: bodyTextManifest
18325
+ };
18326
+
18327
+ // ../blocks/src/system/blocks/blog-post.tsx
18328
+ import { z as z28 } from "zod";
18329
+ var composition = composeFragments([{ fragment: blogFeaturedPostFragment }]);
18330
+ var blogPostLayout = section(
18331
+ { background: "background", className: "rb-px-6 rb-py-12" },
18332
+ [...composition.layout]
18333
+ );
18334
+ var blogPostManifest = createBlockManifest({
18335
+ id: "block.blog-post",
18336
+ version: "0.1.0",
18337
+ title: "Blog post",
18338
+ description: "Highlights a single blog post with title, image, and excerpt.",
18339
+ category: "blog",
18340
+ contentTypes: ["post"],
18341
+ tags: ["blog", "post", "featured", "highlight", "article", "single"],
18342
+ icon: "FileText",
18343
+ styleTokens: {
18344
+ background: "surface",
18345
+ typography: "body",
18346
+ spacing: "md"
18347
+ },
18348
+ behaviours: {
18349
+ supportsThemeSwitching: true,
18350
+ inlineEditing: false,
18351
+ animation: false,
18352
+ paletteHidden: false
18353
+ },
18354
+ additionalFields: composition.fields,
18355
+ layout: blogPostLayout
18356
+ });
18357
+ var blogPostDataSchema = z28.object({
18358
+ id: z28.string(),
18359
+ title: z28.string(),
18360
+ slug: z28.string(),
16994
18361
  path: z28.string(),
16995
18362
  excerpt: z28.string().nullable().optional(),
16996
18363
  image: z28.object({
@@ -17740,6 +19107,37 @@ var faqComposition = composeFragments([
17740
19107
  { fragment: faqHeadingFragment, fieldPriority: 0 },
17741
19108
  { fragment: faqAccordionFragment, fieldPriority: 1 }
17742
19109
  ]);
19110
+ function fragmentLayoutNode(layout) {
19111
+ return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
19112
+ }
19113
+ function isNodeDefinitionArray(layout) {
19114
+ return Array.isArray(layout);
19115
+ }
19116
+ var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
19117
+ var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
19118
+ var defaultLayout = styledSection({
19119
+ children: styledContainer({
19120
+ baseClassName: "rb-relative rb-isolate",
19121
+ children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, faqComposition.layout)
19122
+ }),
19123
+ baseClass: ""
19124
+ });
19125
+ var twoColumnLayout = styledSection({
19126
+ children: styledContainer({
19127
+ baseClassName: "rb-relative rb-isolate",
19128
+ children: el(
19129
+ "div",
19130
+ {
19131
+ className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19132
+ },
19133
+ [
19134
+ el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
19135
+ el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
19136
+ ]
19137
+ )
19138
+ }),
19139
+ baseClass: ""
19140
+ });
17743
19141
  var faqManifest = createBlockManifest({
17744
19142
  id: "block.faq",
17745
19143
  title: "FAQ",
@@ -17756,13 +19154,22 @@ var faqManifest = createBlockManifest({
17756
19154
  label: "FAQ item styles"
17757
19155
  })
17758
19156
  ],
17759
- layout: styledSection({
17760
- children: styledContainer({
17761
- baseClassName: "rb-relative rb-isolate",
17762
- children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, faqComposition.layout)
17763
- }),
17764
- baseClass: ""
17765
- }),
19157
+ layout: defaultLayout,
19158
+ variants: {
19159
+ default: defaultLayout,
19160
+ "two-column": twoColumnLayout
19161
+ },
19162
+ defaultVariant: "default",
19163
+ variantOptions: {
19164
+ default: {
19165
+ label: "Default",
19166
+ description: "A centered heading above one FAQ accordion."
19167
+ },
19168
+ "two-column": {
19169
+ label: "Two column",
19170
+ description: "A left heading column with FAQ items on the right."
19171
+ }
19172
+ },
17766
19173
  description: "Accordion of frequently asked questions and answers.",
17767
19174
  tags: ["faq", "questions", "answers", "help", "support", "accordion", "q&a"],
17768
19175
  icon: "HelpCircle"
@@ -18412,7 +19819,8 @@ function resolveBackgroundVisualStyles(backgroundColor, tokens, defaultToken = "
18412
19819
  function resolveHeaderVisualStyles(header, tokens) {
18413
19820
  const navContainerType = header?.navContainer?.type ?? "none";
18414
19821
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
18415
- if (hasContainedNav) {
19822
+ const hasTransparentVariant = header?.variant === "transparent" || header?.variant === "floating";
19823
+ if (hasContainedNav || hasTransparentVariant) {
18416
19824
  return {
18417
19825
  backgroundToken: "transparent",
18418
19826
  paletteHex: null,
@@ -18541,6 +19949,17 @@ var headerRootStyleTransform = {
18541
19949
  return mergeStyles(...styleParts);
18542
19950
  }
18543
19951
  };
19952
+ var headerSectionBackgroundTransform = {
19953
+ id: "layout.headerSectionBackground",
19954
+ kind: "string",
19955
+ summary: "Resolve the inner site-header section background token",
19956
+ run: (value) => {
19957
+ const header = asPartialObject(value);
19958
+ const navContainerType = header?.navContainer?.type ?? "none";
19959
+ const usesTransparentRoot = header?.variant === "transparent" || header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill";
19960
+ return usesTransparentRoot ? "raw:transparent" : "background";
19961
+ }
19962
+ };
18544
19963
  var footerRootStyleTransform = {
18545
19964
  id: "layout.footerRootStyle",
18546
19965
  kind: "formatter",
@@ -18799,6 +20218,7 @@ var layoutTransforms = [
18799
20218
  headerRootClassTransform,
18800
20219
  footerRootClassTransform,
18801
20220
  headerRootStyleTransform,
20221
+ headerSectionBackgroundTransform,
18802
20222
  footerRootStyleTransform,
18803
20223
  footerBottomBarClassTransform,
18804
20224
  footerBottomBarContainerClassTransform,
@@ -19312,7 +20732,10 @@ var editorialLayout = stack(
19312
20732
  );
19313
20733
  var headerLayout = headerSection(
19314
20734
  {
19315
- background: "background",
20735
+ background: bindProp("$root.theme.header", {
20736
+ transforms: pipe(tx("layout.headerSectionBackground")),
20737
+ fallback: "background"
20738
+ }),
19316
20739
  allowOverflow: true,
19317
20740
  className: bindProp("$root.theme.header", {
19318
20741
  transforms: pipe(tx("layout.headerRootClass")),
@@ -20147,79 +21570,298 @@ var collectionLayout = styledSection({
20147
21570
  { gap: "md" }
20148
21571
  ),
20149
21572
  baseClass: "",
20150
- spacing: "comfortable"
21573
+ spacing: "comfortable"
21574
+ });
21575
+ var collectionManifest = createBlockManifest({
21576
+ id: "block.collection",
21577
+ title: "Collection",
21578
+ category: "layout",
21579
+ additionalFields: [
21580
+ parseFieldDefinition({
21581
+ id: "layout",
21582
+ type: "select",
21583
+ label: "Layout",
21584
+ defaultValue: "grid",
21585
+ options: [
21586
+ { value: "grid", label: "Grid" },
21587
+ { value: "stack", label: "Stack" }
21588
+ ],
21589
+ ui: { intent: "display" }
21590
+ }),
21591
+ parseFieldDefinition({
21592
+ id: "columns",
21593
+ type: "select",
21594
+ label: "Columns",
21595
+ description: "Number of columns in the grid layout.",
21596
+ defaultValue: "3",
21597
+ options: [
21598
+ { value: "2", label: "2 columns" },
21599
+ { value: "3", label: "3 columns" },
21600
+ { value: "4", label: "4 columns" }
21601
+ ],
21602
+ ui: {
21603
+ intent: "display",
21604
+ visibleWhen: { field: "layout", equals: "grid" }
21605
+ }
21606
+ }),
21607
+ parseFieldDefinition({
21608
+ id: "gap",
21609
+ type: "select",
21610
+ label: "Gap",
21611
+ defaultValue: "medium",
21612
+ options: [
21613
+ { value: "none", label: "None" },
21614
+ { value: "compact", label: "Compact" },
21615
+ { value: "cozy", label: "Cozy" },
21616
+ { value: "medium", label: "Medium" },
21617
+ { value: "comfortable", label: "Comfortable" },
21618
+ { value: "spacious", label: "Spacious" }
21619
+ ],
21620
+ ui: { intent: "display" }
21621
+ }),
21622
+ fragmentsToRepeaterField(
21623
+ "items",
21624
+ "Items",
21625
+ collectionFragments,
21626
+ {
21627
+ minItems: 0,
21628
+ maxItems: 50,
21629
+ itemLabel: "Item",
21630
+ description: "Add items to this collection."
21631
+ }
21632
+ ),
21633
+ cardStylesField({
21634
+ id: "_cardStyles",
21635
+ label: "Item styles"
21636
+ })
21637
+ ],
21638
+ layout: collectionLayout,
21639
+ description: "Repeat items in a grid or stack layout.",
21640
+ tags: ["collection", "grid", "stack", "repeater"],
21641
+ icon: "LayoutList",
21642
+ styleTokens: { spacing: "lg" }
21643
+ });
21644
+ var collectionBlockDefinition = {
21645
+ manifest: collectionManifest
21646
+ };
21647
+
21648
+ // ../blocks/src/system/blocks/feature-cards.ts
21649
+ function grid3(props2, children) {
21650
+ return el("grid", props2 ?? void 0, children ?? void 0);
21651
+ }
21652
+ var sectionHeading = stack(
21653
+ { gap: "sm", className: "rb-feature-cards-heading rb-mx-auto rb-max-w-3xl rb-text-center" },
21654
+ [
21655
+ text(
21656
+ {
21657
+ as: "h2",
21658
+ className: "rb-feature-cards-title rb-text-center"
21659
+ },
21660
+ when("content.title"),
21661
+ bind("content.title")
21662
+ ),
21663
+ richText(
21664
+ {
21665
+ className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
21666
+ style: textColorStyle("mutedText")
21667
+ },
21668
+ when("content.description"),
21669
+ bind("content.description")
21670
+ )
21671
+ ]
21672
+ );
21673
+ var featureCard = styledCard(
21674
+ [
21675
+ media(
21676
+ {
21677
+ className: "rb-feature-card-media rb-w-full rb-h-auto rb-object-cover",
21678
+ style: {
21679
+ aspectRatio: { $bind: { from: "card.aspectRatio" } }
21680
+ }
21681
+ },
21682
+ when("card.media"),
21683
+ bind("card.media")
21684
+ ),
21685
+ stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
21686
+ text(
21687
+ {
21688
+ as: "h3",
21689
+ className: "rb-feature-card-title"
21690
+ },
21691
+ bind("card.title")
21692
+ ),
21693
+ richText(
21694
+ {
21695
+ className: "rb-feature-card-body rb-prose rb-max-w-none",
21696
+ style: textColorStyle("mutedText")
21697
+ },
21698
+ when("card.body"),
21699
+ bind("card.body")
21700
+ ),
21701
+ ctaRow({
21702
+ collectionPath: "ctas",
21703
+ itemName: "cta",
21704
+ gap: "sm",
21705
+ justify: "start",
21706
+ containerClassName: "rb-mt-auto"
21707
+ })
21708
+ ])
21709
+ ],
21710
+ {
21711
+ stylesFrom: "content._cardStyles",
21712
+ backgroundFrom: "content._cardStyles.background",
21713
+ baseClassName: "rb-feature-card rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-h-full rb-flex-col"
21714
+ },
21715
+ repeat("content.cards", "card")
21716
+ );
21717
+ var cardsLayout = styledSection({
21718
+ children: styledContainer({
21719
+ rootType: "stack",
21720
+ rootProps: { gap: "xl" },
21721
+ children: [
21722
+ sectionHeading,
21723
+ grid3(
21724
+ {
21725
+ cols: {
21726
+ $bind: {
21727
+ from: "content.columns",
21728
+ fallback: 3,
21729
+ coerce: "number"
21730
+ }
21731
+ },
21732
+ gap: "lg"
21733
+ },
21734
+ [featureCard]
21735
+ )
21736
+ ]
21737
+ }),
21738
+ baseClass: "",
21739
+ spacing: "medium"
20151
21740
  });
20152
- var collectionManifest = createBlockManifest({
20153
- id: "block.collection",
20154
- title: "Collection",
21741
+ var featureCardsConfig = {
21742
+ id: "block.feature-cards",
21743
+ title: "Feature Cards",
20155
21744
  category: "layout",
21745
+ includeContainerStyles: true,
21746
+ titleSource: "title",
20156
21747
  additionalFields: [
20157
- parseFieldDefinition({
20158
- id: "layout",
20159
- type: "select",
20160
- label: "Layout",
20161
- defaultValue: "grid",
20162
- options: [
20163
- { value: "grid", label: "Grid" },
20164
- { value: "stack", label: "Stack" }
20165
- ],
20166
- ui: { intent: "display" }
20167
- }),
20168
- parseFieldDefinition({
21748
+ {
21749
+ id: "title",
21750
+ type: "text",
21751
+ label: "Title",
21752
+ required: false,
21753
+ multiline: false,
21754
+ maxLength: 120
21755
+ },
21756
+ {
21757
+ id: "description",
21758
+ type: "richText",
21759
+ label: "Description",
21760
+ required: false,
21761
+ ui: {
21762
+ richTextVariant: "limited"
21763
+ }
21764
+ },
21765
+ {
20169
21766
  id: "columns",
20170
21767
  type: "select",
20171
21768
  label: "Columns",
20172
- description: "Number of columns in the grid layout.",
21769
+ required: false,
20173
21770
  defaultValue: "3",
21771
+ multiple: false,
20174
21772
  options: [
20175
21773
  { value: "2", label: "2 columns" },
20176
21774
  { value: "3", label: "3 columns" },
20177
21775
  { value: "4", label: "4 columns" }
20178
21776
  ],
20179
- ui: {
20180
- intent: "display",
20181
- visibleWhen: { field: "layout", equals: "grid" }
20182
- }
20183
- }),
20184
- parseFieldDefinition({
20185
- id: "gap",
20186
- type: "select",
20187
- label: "Gap",
20188
- defaultValue: "medium",
20189
- options: [
20190
- { value: "none", label: "None" },
20191
- { value: "compact", label: "Compact" },
20192
- { value: "cozy", label: "Cozy" },
20193
- { value: "medium", label: "Medium" },
20194
- { value: "comfortable", label: "Comfortable" },
20195
- { value: "spacious", label: "Spacious" }
20196
- ],
20197
21777
  ui: { intent: "display" }
20198
- }),
20199
- fragmentsToRepeaterField(
20200
- "items",
20201
- "Items",
20202
- collectionFragments,
20203
- {
20204
- minItems: 0,
20205
- maxItems: 50,
20206
- itemLabel: "Item",
20207
- description: "Add items to this collection."
21778
+ },
21779
+ {
21780
+ id: "cards",
21781
+ type: "repeater",
21782
+ label: "Cards",
21783
+ required: false,
21784
+ minItems: 1,
21785
+ maxItems: 8,
21786
+ itemLabel: "Card",
21787
+ itemLabelSource: "title",
21788
+ allowConversion: true,
21789
+ ui: {
21790
+ intent: "content"
21791
+ },
21792
+ schema: {
21793
+ fields: [
21794
+ {
21795
+ id: "media",
21796
+ type: "media",
21797
+ label: "Image",
21798
+ required: false,
21799
+ mediaKinds: ["image"]
21800
+ },
21801
+ createAspectRatioField({
21802
+ id: "aspectRatio",
21803
+ label: "Image aspect ratio",
21804
+ defaultValue: "4/3",
21805
+ visibleWhen: { field: "media", notEquals: null }
21806
+ }),
21807
+ {
21808
+ id: "title",
21809
+ type: "text",
21810
+ label: "Title",
21811
+ required: true,
21812
+ multiline: false,
21813
+ maxLength: 120
21814
+ },
21815
+ {
21816
+ id: "body",
21817
+ type: "richText",
21818
+ label: "Text",
21819
+ required: false,
21820
+ ui: {
21821
+ richTextVariant: "limited"
21822
+ }
21823
+ },
21824
+ createCtasRepeater({
21825
+ label: "Calls to action",
21826
+ itemLabel: "CTA",
21827
+ maxItems: 1,
21828
+ button: {
21829
+ variants: [
21830
+ { value: "primary", label: "Primary" },
21831
+ { value: "secondary", label: "Secondary" },
21832
+ { value: "outline", label: "Outline" },
21833
+ { value: "ghost", label: "Ghost" },
21834
+ { value: "link", label: "Link" }
21835
+ ],
21836
+ defaultVariant: "ghost"
21837
+ }
21838
+ })
21839
+ ]
20208
21840
  }
20209
- ),
21841
+ },
20210
21842
  cardStylesField({
20211
21843
  id: "_cardStyles",
20212
- label: "Item styles"
21844
+ label: "Card styles"
20213
21845
  })
20214
21846
  ],
20215
- layout: collectionLayout,
20216
- description: "Repeat items in a grid or stack layout.",
20217
- tags: ["collection", "grid", "stack", "repeater"],
20218
- icon: "LayoutList",
20219
- styleTokens: { spacing: "lg" }
20220
- });
20221
- var collectionBlockDefinition = {
20222
- manifest: collectionManifest
21847
+ layout: cardsLayout,
21848
+ variants: {
21849
+ cards: cardsLayout
21850
+ },
21851
+ defaultVariant: "cards",
21852
+ variantOptions: {
21853
+ cards: {
21854
+ label: "Cards",
21855
+ description: "A responsive grid of image cards with optional calls to action."
21856
+ }
21857
+ },
21858
+ description: "A card grid for offerings, services, classes, benefits, or featured links.",
21859
+ tags: ["cards", "features", "offerings", "services", "classes", "grid", "links"],
21860
+ icon: "PanelsTopLeft"
21861
+ };
21862
+ var featureCardsManifest = createBlockManifest(featureCardsConfig);
21863
+ var featureCardsBlockDefinition = {
21864
+ manifest: featureCardsManifest
20223
21865
  };
20224
21866
 
20225
21867
  // ../blocks/src/system/fields/carousel.ts
@@ -20307,69 +21949,6 @@ function createCarouselBehaviorFields(options = {}) {
20307
21949
  return fields3;
20308
21950
  }
20309
21951
 
20310
- // ../blocks/src/system/fields/imageLayout.ts
20311
- function createImageColSizeField(options = {}) {
20312
- const {
20313
- id = "imageColSize",
20314
- label = "Image column size",
20315
- description = "Controls how large the image/thumbnail column is at desktop breakpoints.",
20316
- defaultValue = "1/3",
20317
- uiIntent = "display",
20318
- visibleWhen
20319
- } = options;
20320
- return {
20321
- id,
20322
- type: "select",
20323
- label,
20324
- description,
20325
- required: false,
20326
- defaultValue,
20327
- multiple: false,
20328
- options: [
20329
- { value: "1/4", label: "Small (1/4)" },
20330
- { value: "1/3", label: "Medium (1/3)" },
20331
- { value: "2/5", label: "Large (2/5)" },
20332
- { value: "1/2", label: "Extra large (1/2)" },
20333
- { value: "2/3", label: "Huge (2/3)" }
20334
- ],
20335
- ui: {
20336
- intent: uiIntent,
20337
- ...visibleWhen ? { visibleWhen } : {}
20338
- }
20339
- };
20340
- }
20341
- function createImagePositionField(options = {}) {
20342
- const {
20343
- id = "imagePosition",
20344
- label = "Image position",
20345
- description = "Choose which side the image appears on.",
20346
- defaultValue = "left",
20347
- includeAlternate = false,
20348
- uiIntent = "display",
20349
- visibleWhen
20350
- } = options;
20351
- const positionOptions = [
20352
- { value: "left", label: "Left" },
20353
- { value: "right", label: "Right" },
20354
- ...includeAlternate ? [{ value: "alternate", label: "Alternate" }] : []
20355
- ];
20356
- return {
20357
- id,
20358
- type: "select",
20359
- label,
20360
- description,
20361
- required: false,
20362
- defaultValue,
20363
- multiple: false,
20364
- // Spread to get a mutable array type without unsafe casts.
20365
- options: [...positionOptions],
20366
- ui: {
20367
- intent: uiIntent,
20368
- ...visibleWhen ? { visibleWhen } : {}
20369
- }
20370
- };
20371
- }
20372
-
20373
21952
  // ../blocks/src/system/blocks/media-text.ts
20374
21953
  var mediaTextFrameCapability = defineFrameCapability([
20375
21954
  "plain",
@@ -20493,26 +22072,13 @@ var mediaTextManifest = createBlockManifest({
20493
22072
  },
20494
22073
  ui: { intent: "behavior" }
20495
22074
  }),
20496
- {
22075
+ createAspectRatioField({
20497
22076
  id: "aspectRatio",
20498
- type: "select",
20499
22077
  label: "Media aspect ratio",
20500
22078
  description: "Crop media to a consistent aspect ratio.",
20501
- required: false,
20502
22079
  defaultValue: "auto",
20503
- multiple: false,
20504
- options: [
20505
- { value: "auto", label: "Auto (original)" },
20506
- { value: "16/9", label: "16:9 (Landscape)" },
20507
- { value: "4/3", label: "4:3 (Standard)" },
20508
- { value: "1/1", label: "1:1 (Square)" },
20509
- { value: "3/4", label: "3:4 (Portrait)" }
20510
- ],
20511
- ui: {
20512
- intent: "display",
20513
- visibleWhen: { field: "images", notEquals: null }
20514
- }
20515
- },
22080
+ visibleWhen: { field: "images", notEquals: null }
22081
+ }),
20516
22082
  {
20517
22083
  id: "text",
20518
22084
  type: "richText",
@@ -20642,7 +22208,7 @@ var mediaTextManifest = createBlockManifest({
20642
22208
  whenImagesLength(0)
20643
22209
  );
20644
22210
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
20645
- const defaultLayout = styledSection({
22211
+ const defaultLayout2 = styledSection({
20646
22212
  children: styledContainer({
20647
22213
  rootType: "stack",
20648
22214
  rootProps: { gap: "lg" },
@@ -20674,9 +22240,9 @@ var mediaTextManifest = createBlockManifest({
20674
22240
  spacing: "medium"
20675
22241
  });
20676
22242
  return {
20677
- layout: defaultLayout,
22243
+ layout: defaultLayout2,
20678
22244
  variants: {
20679
- default: defaultLayout
22245
+ default: defaultLayout2
20680
22246
  },
20681
22247
  defaultVariant: "default",
20682
22248
  variantOptions: {
@@ -24076,7 +25642,7 @@ var embedBlockDefinition = {
24076
25642
  };
24077
25643
 
24078
25644
  // ../blocks/src/system/blocks/image-gallery.ts
24079
- var grid3 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
25645
+ var grid4 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
24080
25646
  var galleryContainer = (children, opts) => {
24081
25647
  const gap = opts?.gap ?? "md";
24082
25648
  const withExtraClass = (baseClass) => opts?.className ? `${baseClass} ${opts.className}` : baseClass;
@@ -24156,7 +25722,7 @@ var galleryItem = (options) => stack(
24156
25722
  ],
24157
25723
  repeat("content.images", "item")
24158
25724
  );
24159
- var gridLayout3 = grid3(
25725
+ var gridLayout3 = grid4(
24160
25726
  {
24161
25727
  className: "rb-grid rb-grid-cols-1 rb-gap-4 rb-sm-grid-cols-2 rb-md-grid-cols-3"
24162
25728
  },
@@ -24759,7 +26325,7 @@ var imageGalleryBlockDefinition = {
24759
26325
  };
24760
26326
 
24761
26327
  // ../blocks/src/system/blocks/video-grid.ts
24762
- var grid4 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
26328
+ var grid5 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
24763
26329
  var videoItem = (options) => stack(
24764
26330
  { gap: "xs", className: options.containerClassName },
24765
26331
  [
@@ -24809,7 +26375,7 @@ var gridColumnsClass = (columns) => {
24809
26375
  return "rb-grid rb-grid-cols-1 rb-gap-6 rb-sm-grid-cols-2 rb-md-grid-cols-3";
24810
26376
  }
24811
26377
  };
24812
- var createGridLayout = (columns) => grid4(
26378
+ var createGridLayout = (columns) => grid5(
24813
26379
  {
24814
26380
  className: gridColumnsClass(columns)
24815
26381
  },
@@ -27973,6 +29539,40 @@ var systemBlockDefinitionsRaw = [
27973
29539
  })
27974
29540
  ]
27975
29541
  })),
29542
+ withDesignCapability("block.intro", introBlockDefinition, declareBlockDesignCapability({
29543
+ sectionSurfaces: "supported",
29544
+ contentFrames: ["plain", "panel"],
29545
+ itemSurfaces: "unsupported",
29546
+ headingDecorations: ["organic-squiggle"]
29547
+ }), defineBlockDesignMetadata({
29548
+ flow: bodyFlow,
29549
+ layoutProfiles: [
29550
+ layoutProfile({
29551
+ variantKey: "centered-copy",
29552
+ family: "centered",
29553
+ weight: "featured",
29554
+ bias: "soft"
29555
+ }),
29556
+ layoutProfile({
29557
+ variantKey: "statement-copy",
29558
+ family: "split",
29559
+ weight: "featured",
29560
+ bias: "merge"
29561
+ }),
29562
+ layoutProfile({
29563
+ variantKey: "statement-media",
29564
+ family: "media-text",
29565
+ weight: "featured",
29566
+ bias: "soft"
29567
+ }),
29568
+ layoutProfile({
29569
+ variantKey: "media-copy",
29570
+ family: "media-text",
29571
+ weight: "featured",
29572
+ bias: "soft"
29573
+ })
29574
+ ]
29575
+ })),
27976
29576
  withDesignCapability("block.body-text", bodyTextBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
27977
29577
  flow: bodyFlow,
27978
29578
  layoutProfiles: [
@@ -28033,9 +29633,17 @@ var systemBlockDefinitionsRaw = [
28033
29633
  flow: conversionFlow,
28034
29634
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
28035
29635
  })),
28036
- withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(panelAndItemsCapable(), standardEyebrowTreatments), defineBlockDesignMetadata({
29636
+ withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
29637
+ sectionSurfaces: "supported",
29638
+ contentFrames: ["plain", "panel"],
29639
+ itemSurfaces: "supported",
29640
+ accordionIconSets: ["plus", "chevron", "caret", "minimal-cross"]
29641
+ }), standardEyebrowTreatments), defineBlockDesignMetadata({
28037
29642
  flow: bodyFlow,
28038
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
29643
+ layoutProfiles: [
29644
+ layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
29645
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
29646
+ ]
28039
29647
  })),
28040
29648
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
28041
29649
  flow: siteChromeFlow,
@@ -28049,7 +29657,8 @@ var systemBlockDefinitionsRaw = [
28049
29657
  sectionSurfaces: "supported",
28050
29658
  contentFrames: ["plain", "panel"],
28051
29659
  itemSurfaces: "supported",
28052
- testimonialCardTreatments: ["default", "accent-quote"]
29660
+ testimonialCardTreatments: ["default", "accent-quote"],
29661
+ headingDecorations: ["short-center-rule"]
28053
29662
  }), defineBlockDesignMetadata({
28054
29663
  flow: proofFlow,
28055
29664
  layoutProfiles: [
@@ -28075,6 +29684,22 @@ var systemBlockDefinitionsRaw = [
28075
29684
  flow: offeringsFlow,
28076
29685
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
28077
29686
  })),
29687
+ withDesignCapability("block.feature-cards", featureCardsBlockDefinition, declareBlockDesignCapability({
29688
+ sectionSurfaces: "supported",
29689
+ contentFrames: ["plain", "panel"],
29690
+ itemSurfaces: "supported",
29691
+ headingDecorations: ["short-center-rule"]
29692
+ }), defineBlockDesignMetadata({
29693
+ flow: offeringsFlow,
29694
+ layoutProfiles: [
29695
+ layoutProfile({
29696
+ variantKey: "cards",
29697
+ family: "grid",
29698
+ weight: "standard",
29699
+ bias: "soft"
29700
+ })
29701
+ ]
29702
+ })),
28078
29703
  withDesignCapability("block.media-text", mediaTextBlockDefinition, mediaPanelCapable(), defineBlockDesignMetadata({
28079
29704
  flow: mediaFlow,
28080
29705
  layoutProfiles: [