@riverbankcms/sdk 0.76.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 (144) hide show
  1. package/dist/{PreviewEditorSidebar-X2HWXFOL.mjs → PreviewEditorSidebar-XSX7QKHQ.mjs} +1019 -442
  2. package/dist/{PreviewEditorUI-AQXIXPOH.mjs → PreviewEditorUI-YZNEZ3QD.mjs} +2 -2
  3. package/dist/SdkPreviewModeRuntime-5FS5E6BI.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +528 -20
  5. package/dist/_dts/api/src/contentRuntime.d.ts +5 -0
  6. package/dist/_dts/api/src/siteAssets.d.ts +1 -0
  7. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +26 -2
  8. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +28 -0
  9. package/dist/_dts/block-form/src/client/index.d.ts +2 -2
  10. package/dist/_dts/block-form/src/index.d.ts +2 -1
  11. package/dist/_dts/block-form/src/widgets/DateField/dateFieldSchema.d.ts +1 -1
  12. package/dist/_dts/block-form/src/widgets/DateTimeField/dateTimeFieldSchema.d.ts +1 -1
  13. package/dist/_dts/block-form/src/widgets/TimeField/timeFieldSchema.d.ts +1 -1
  14. package/dist/_dts/blocks/src/PageRenderer.d.ts +10 -10
  15. package/dist/_dts/blocks/src/client/site-chrome.d.ts +22 -0
  16. package/dist/_dts/blocks/src/customBlockRegistry.d.ts +38 -0
  17. package/dist/_dts/blocks/src/index.d.ts +2 -0
  18. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +20 -2
  19. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +25 -0
  20. package/dist/_dts/blocks/src/system/blocks/index.d.ts +2 -0
  21. package/dist/_dts/blocks/src/system/blocks/intro.d.ts +24 -0
  22. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +3 -34
  23. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  24. package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +30 -0
  25. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +4 -1
  26. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +7 -0
  27. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +11 -2
  28. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  29. package/dist/_dts/blocks/src/system/runtime/nodes/accordion.d.ts +2 -0
  30. package/dist/_dts/blocks/src/system/runtime/nodes/accordion.server.d.ts +2 -0
  31. package/dist/_dts/blocks/src/system/runtime/nodes/accordionIconTreatment.d.ts +5 -0
  32. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -0
  33. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +2 -1
  34. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +2 -0
  35. package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +48 -0
  36. package/dist/_dts/content-editor/src/hooks/invalidBlockSelectors.d.ts +4 -0
  37. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +47 -0
  38. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  39. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +20 -0
  40. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +2 -1
  41. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -1
  42. package/dist/_dts/editor-blocks/src/block-editor/customBlockRegistry.d.ts +2 -0
  43. package/dist/_dts/editor-blocks/src/block-editor/sdkBlockMerger.d.ts +9 -37
  44. package/dist/_dts/editor-blocks/src/index.d.ts +2 -2
  45. package/dist/_dts/preview-next/src/client/index.d.ts +3 -0
  46. package/dist/_dts/preview-next/src/client/layout/PreviewLayoutContext.d.ts +5 -1
  47. package/dist/_dts/preview-next/src/client/preview/PreviewDesignCoordinatorContext.d.ts +20 -0
  48. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +7 -2
  49. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +7 -2
  50. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +7 -2
  51. package/dist/_dts/preview-next/src/client/preview/PreviewThemedSiteDocument.d.ts +18 -0
  52. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +20 -3
  53. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +6 -1
  54. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +14 -4
  55. package/dist/_dts/preview-next/src/client/preview/previewDesignCoordinator.d.ts +73 -0
  56. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +12 -4
  57. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +46 -0
  58. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +6 -1
  59. package/dist/_dts/preview-next/src/client/preview/typographySelectionInput.d.ts +14 -0
  60. package/dist/_dts/preview-next/src/client/sdk/SdkPreviewModeRuntime.d.ts +1 -1
  61. package/dist/_dts/sdk/src/cli/commands/style.d.ts +8 -0
  62. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -1
  63. package/dist/_dts/sdk/src/client/types.d.ts +9 -0
  64. package/dist/_dts/sdk/src/client.d.ts +1 -1
  65. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +35 -0
  66. package/dist/_dts/sdk/src/index.d.ts +2 -1
  67. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -0
  68. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  69. package/dist/_dts/sdk/src/version.d.ts +1 -1
  70. package/dist/_dts/site-commands/src/commands.d.ts +15 -0
  71. package/dist/_dts/theme-core/src/buttons/personalities/earth-pill.d.ts +16 -0
  72. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  73. package/dist/_dts/theme-core/src/fonts/types.d.ts +1 -1
  74. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +45 -0
  75. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  76. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +16 -0
  77. package/dist/_dts/theme-core/src/schema.d.ts +280 -0
  78. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +81 -0
  79. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +6 -4
  80. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +81 -0
  81. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +118 -2
  82. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +13 -0
  83. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  84. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +364 -5
  85. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +6 -0
  86. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -0
  87. package/dist/_dts/theme-core/src/site-styles/persistedIdParseResult.d.ts +9 -0
  88. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +20 -4
  89. package/dist/_dts/theme-core/src/site-styles/types.d.ts +74 -2
  90. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +189 -0
  91. package/dist/{chunk-Z7JLNTJR.mjs → chunk-6SMUFTXD.mjs} +2 -1
  92. package/dist/{chunk-V5VORNEJ.mjs → chunk-ANKDYZ2E.mjs} +1 -1
  93. package/dist/{chunk-Q4OLG66B.mjs → chunk-EAWHBECW.mjs} +476 -153
  94. package/dist/{chunk-TW2Y4RR5.mjs → chunk-GSQX43EZ.mjs} +383 -51
  95. package/dist/{chunk-LYI7TEMH.mjs → chunk-WLQBJN2Z.mjs} +3096 -354
  96. package/dist/cli/index.mjs +2023 -181
  97. package/dist/client/{accordion-2YHIBOZH.mjs → accordion-RZMQSYLR.mjs} +1 -1
  98. package/dist/client/{bookingForm-35IBDWAS.mjs → bookingForm-NF4ASVNV.mjs} +2 -2
  99. package/dist/client/bookings.mjs +92 -0
  100. package/dist/client/{carousel-K6XG7NZQ.mjs → carousel-LDX47ZIK.mjs} +1 -1
  101. package/dist/client/{cart-HCFYUTTU.mjs → cart-RGXDS5F4.mjs} +3 -3
  102. package/dist/client/{checkout-J3U4XR7K.mjs → checkout-P7WWSNNY.mjs} +3 -3
  103. package/dist/client/{chunk-BOIHIU7E.mjs → chunk-E2TDNXCL.mjs} +1 -1
  104. package/dist/client/{chunk-PFBX3IQL.mjs → chunk-GMVTOKYG.mjs} +2 -2
  105. package/dist/client/{chunk-FGUIVT2B.mjs → chunk-JNC7CGHX.mjs} +1 -1
  106. package/dist/client/{chunk-SNSWVZEP.mjs → chunk-L3DNHIJX.mjs} +3 -3
  107. package/dist/client/{chunk-7UOSCYY4.mjs → chunk-R56FQ3RR.mjs} +92 -0
  108. package/dist/client/{chunk-J227A3CQ.mjs → chunk-UFSWADAO.mjs} +1 -1
  109. package/dist/client/client.mjs +2134 -228
  110. package/dist/client/{courseRegistration-ZBXS7VGI.mjs → courseRegistration-7F65K5ZR.mjs} +2 -2
  111. package/dist/client/{eventCalendar-EQQZHJBA.mjs → eventCalendar-GLSC5KTL.mjs} +4 -4
  112. package/dist/client/{eventCombined-JCFTGBFQ.mjs → eventCombined-ZHK4WKUR.mjs} +4 -4
  113. package/dist/client/{eventDetails-HLUTQSYY.mjs → eventDetails-E3PJYBIN.mjs} +4 -4
  114. package/dist/client/{eventListing-FG4MICVB.mjs → eventListing-EMS3WC3E.mjs} +4 -4
  115. package/dist/client/{eventRegistration-GUEB7LBT.mjs → eventRegistration-NZOTVNPI.mjs} +4 -4
  116. package/dist/client/{form-YQEW4YIT.mjs → form-ETFZFATW.mjs} +1 -1
  117. package/dist/client/{headerSection-GTR3TTRM.mjs → headerSection-4LBP7ULT.mjs} +2 -2
  118. package/dist/client/hooks.mjs +1918 -293
  119. package/dist/client/{locationMap-SPC7VGUH.mjs → locationMap-5M655YSJ.mjs} +1 -1
  120. package/dist/client/{newsletterForm-4IW5BLID.mjs → newsletterForm-QOUYW44O.mjs} +1 -1
  121. package/dist/client/{productDetail-KP5H2WJO.mjs → productDetail-O4DOCWQG.mjs} +3 -3
  122. package/dist/client/{productList-3M3M72XZ.mjs → productList-A5RO5WIS.mjs} +3 -3
  123. package/dist/client/rendering/client.mjs +198 -32
  124. package/dist/client/rendering/islands.mjs +18 -18
  125. package/dist/client/rendering.mjs +2095 -208
  126. package/dist/client/{shop-ACQKVGOM.mjs → shop-L4MZH4I2.mjs} +3 -3
  127. package/dist/preview-next/client/runtime.mjs +4 -4
  128. package/dist/{sdk-runtime-K7HNB4U2.mjs → sdk-runtime-Q6MTR4KL.mjs} +5 -5
  129. package/dist/server/components.mjs +2046 -204
  130. package/dist/server/config-validation.mjs +1921 -293
  131. package/dist/server/config.mjs +1921 -293
  132. package/dist/server/data.mjs +1918 -293
  133. package/dist/server/index.mjs +31 -2
  134. package/dist/server/next.mjs +2067 -206
  135. package/dist/server/page-converter.mjs +1894 -281
  136. package/dist/server/prebuild.mjs +1 -1
  137. package/dist/server/rendering/server.mjs +2046 -204
  138. package/dist/server/rendering.mjs +2046 -204
  139. package/dist/server/routing.mjs +1963 -275
  140. package/dist/server/server.mjs +1932 -288
  141. package/dist/server/theme-bridge.mjs +158 -1
  142. package/dist/server/theme.mjs +158 -1
  143. package/package.json +1 -1
  144. package/dist/SdkPreviewModeRuntime-ZQNDCASH.mjs +0 -8
@@ -6659,6 +6659,7 @@ var ALLOWED_TRANSFORM_IDS = [
6659
6659
  "layout.headerRootClass",
6660
6660
  "layout.footerRootClass",
6661
6661
  "layout.headerRootStyle",
6662
+ "layout.headerSectionBackground",
6662
6663
  "layout.footerRootStyle",
6663
6664
  // UI (ui.ts)
6664
6665
  "ui.headerNavLinkClass",
@@ -7607,6 +7608,47 @@ var eyebrowTreatmentValues = [
7607
7608
  "pill-bounce",
7608
7609
  "accent-pill-bounce"
7609
7610
  ];
7611
+ var visibleHeadingDecorationFamilyValues = [
7612
+ "organic-squiggle",
7613
+ "short-center-rule"
7614
+ ];
7615
+ var visibleHeadingDecorationPlacementValues = [
7616
+ "after-heading",
7617
+ "between-heading-and-body",
7618
+ "under-centered-heading"
7619
+ ];
7620
+ var headingDecorationOverrideValues = [
7621
+ "site-default",
7622
+ "on",
7623
+ "off"
7624
+ ];
7625
+ var headingDecorationColorTokenValues = [
7626
+ "text",
7627
+ "primary",
7628
+ "secondary",
7629
+ "accent",
7630
+ "border",
7631
+ "muted"
7632
+ ];
7633
+ var accordionIconSetValues = [
7634
+ "plus",
7635
+ "chevron",
7636
+ "caret",
7637
+ "minimal-cross"
7638
+ ];
7639
+ var accordionIconColorTokenValues = [
7640
+ "text",
7641
+ "muted",
7642
+ "primary",
7643
+ "secondary",
7644
+ "accent",
7645
+ "current"
7646
+ ];
7647
+ var accordionIconMotionValues = [
7648
+ "none",
7649
+ "rotate",
7650
+ "swap"
7651
+ ];
7610
7652
  function defineBlockDesignCapability(capability) {
7611
7653
  return {
7612
7654
  ...capability,
@@ -7616,7 +7658,9 @@ function defineBlockDesignCapability(capability) {
7616
7658
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
7617
7659
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
7618
7660
  tileTreatments: capability.tileTreatments ?? ["default"],
7619
- eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
7661
+ eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7662
+ ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
7663
+ ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
7620
7664
  };
7621
7665
  }
7622
7666
 
@@ -7807,6 +7851,25 @@ var blockAppearancePresets = [
7807
7851
  emphasis: "high"
7808
7852
  }
7809
7853
  }),
7854
+ defineBlockAppearancePreset({
7855
+ kind: "block-design",
7856
+ id: "intro-soft-earth-statement",
7857
+ target: "intro",
7858
+ label: "Soft Earth intro statement",
7859
+ blockKinds: ["block.intro"],
7860
+ design: {
7861
+ sectionSurface: "base",
7862
+ contentFrame: plainFrame,
7863
+ itemSurface: "none",
7864
+ transitionAfter: "soft-fade-short",
7865
+ emphasis: "high",
7866
+ headingDecoration: {
7867
+ family: "organic-squiggle",
7868
+ placement: "after-heading",
7869
+ colorToken: "primary"
7870
+ }
7871
+ }
7872
+ }),
7810
7873
  defineBlockAppearancePreset({
7811
7874
  kind: "block-design",
7812
7875
  id: "offerings-calm-list",
@@ -7821,6 +7884,25 @@ var blockAppearancePresets = [
7821
7884
  emphasis: "medium"
7822
7885
  }
7823
7886
  }),
7887
+ defineBlockAppearancePreset({
7888
+ kind: "block-design",
7889
+ id: "feature-cards-soft-earth-offerings",
7890
+ target: "feature-cards",
7891
+ label: "Soft Earth offering cards",
7892
+ blockKinds: ["block.feature-cards"],
7893
+ design: {
7894
+ sectionSurface: "base",
7895
+ contentFrame: plainFrame,
7896
+ itemSurface: "raised",
7897
+ transitionAfter: "none",
7898
+ emphasis: "high",
7899
+ headingDecoration: {
7900
+ family: "short-center-rule",
7901
+ placement: "under-centered-heading",
7902
+ colorToken: "primary"
7903
+ }
7904
+ }
7905
+ }),
7824
7906
  defineBlockAppearancePreset({
7825
7907
  kind: "block-design",
7826
7908
  id: "events-base-calendar",
@@ -7949,6 +8031,26 @@ var blockAppearancePresets = [
7949
8031
  testimonialCardTreatment: "accent-quote"
7950
8032
  }
7951
8033
  }),
8034
+ defineBlockAppearancePreset({
8035
+ kind: "block-design",
8036
+ id: "testimonials-soft-earth-proof-band",
8037
+ target: "testimonials",
8038
+ label: "Soft Earth proof band",
8039
+ blockKinds: ["block.testimonials"],
8040
+ design: {
8041
+ sectionSurface: "brand-depth-band",
8042
+ contentFrame: plainFrame,
8043
+ itemSurface: "none",
8044
+ transitionAfter: "soft-fade-short",
8045
+ emphasis: "high",
8046
+ testimonialCardTreatment: "accent-quote",
8047
+ headingDecoration: {
8048
+ family: "short-center-rule",
8049
+ placement: "under-centered-heading",
8050
+ colorToken: "border"
8051
+ }
8052
+ }
8053
+ }),
7952
8054
  defineBlockAppearancePreset({
7953
8055
  kind: "block-design",
7954
8056
  id: "faq-base-accordion",
@@ -7977,6 +8079,25 @@ var blockAppearancePresets = [
7977
8079
  emphasis: "low"
7978
8080
  }
7979
8081
  }),
8082
+ defineBlockAppearancePreset({
8083
+ kind: "block-design",
8084
+ id: "faq-soft-earth-two-column",
8085
+ target: "faq",
8086
+ label: "Soft Earth two-column FAQ",
8087
+ blockKinds: ["block.faq"],
8088
+ design: {
8089
+ sectionSurface: "base",
8090
+ contentFrame: plainFrame,
8091
+ itemSurface: "flat",
8092
+ transitionAfter: "none",
8093
+ emphasis: "medium",
8094
+ accordionIconTreatment: {
8095
+ iconSet: "plus",
8096
+ colorToken: "primary",
8097
+ motion: "swap"
8098
+ }
8099
+ }
8100
+ }),
7980
8101
  defineBlockAppearancePreset({
7981
8102
  kind: "block-design",
7982
8103
  id: "contact-form-panel",
@@ -8662,6 +8783,97 @@ var confidentChip = defineButtonPersonality({
8662
8783
  }
8663
8784
  });
8664
8785
 
8786
+ // ../theme-core/src/buttons/personalities/earth-pill.ts
8787
+ var earthPill = defineButtonPersonality({
8788
+ id: "earth-pill",
8789
+ name: "Earth Pill",
8790
+ description: "Compact terracotta pills with quiet primary-coloured ghost CTAs.",
8791
+ tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
8792
+ buttonSystem: {
8793
+ global: {
8794
+ cornerStyle: "pill",
8795
+ shadow: "low",
8796
+ textTransform: "none",
8797
+ fontWeight: 500,
8798
+ borderWidth: 1,
8799
+ hoverTransform: "lift",
8800
+ hoverColor: "none",
8801
+ typography: "body",
8802
+ paddingPreset: "default"
8803
+ },
8804
+ sizes: {
8805
+ sm: { padding: "0.5rem 1rem", fontSize: "text-sm" },
8806
+ md: { padding: "0.625rem 1.35rem" },
8807
+ lg: { padding: "0.75rem 1.65rem", fontSize: "text-lg" },
8808
+ xl: { padding: "0.875rem 2rem", fontSize: "text-xl" }
8809
+ },
8810
+ variants: [
8811
+ {
8812
+ id: "primary",
8813
+ name: "Primary",
8814
+ enabled: true,
8815
+ priority: 1,
8816
+ background: { type: "solid", colorToken: "primary" },
8817
+ textColorToken: "primaryForeground",
8818
+ borderRadius: "rounded-full",
8819
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
8820
+ effects: {
8821
+ hover: [
8822
+ { effectId: "lift", options: { translateY: "-1px" } },
8823
+ { effectId: "background-on-hover", options: { colorToken: "accent" } }
8824
+ ],
8825
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8826
+ }
8827
+ },
8828
+ {
8829
+ id: "secondary",
8830
+ name: "Secondary",
8831
+ enabled: true,
8832
+ priority: 2,
8833
+ background: { type: "transparent" },
8834
+ textColorToken: "primary",
8835
+ borderRadius: "rounded-full",
8836
+ border: { widthClass: "border", colorToken: "primary" },
8837
+ effects: {
8838
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
8839
+ }
8840
+ },
8841
+ {
8842
+ id: "outline",
8843
+ name: "Outline",
8844
+ enabled: true,
8845
+ priority: 3,
8846
+ background: { type: "transparent" },
8847
+ textColorToken: "text",
8848
+ borderRadius: "rounded-full",
8849
+ border: { widthClass: "border", colorToken: "border" },
8850
+ effects: {
8851
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surfaceAlt" } }]
8852
+ }
8853
+ },
8854
+ {
8855
+ id: "ghost",
8856
+ name: "Ghost",
8857
+ enabled: true,
8858
+ priority: 3,
8859
+ background: { type: "transparent" },
8860
+ textColorToken: "primary",
8861
+ borderRadius: "rounded-full",
8862
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8863
+ sizes: {
8864
+ sm: { padding: "0.25rem 0", fontSize: "text-sm" },
8865
+ md: { padding: "0.375rem 0" },
8866
+ lg: { padding: "0.5rem 0", fontSize: "text-lg" },
8867
+ xl: { padding: "0.625rem 0", fontSize: "text-xl" }
8868
+ },
8869
+ effects: {
8870
+ hover: [{ effectId: "opacity-reduce", options: { reduction: 25 } }]
8871
+ }
8872
+ }
8873
+ ]
8874
+ }
8875
+ });
8876
+
8665
8877
  // ../theme-core/src/buttons/personalities/editorial-link.ts
8666
8878
  var editorialLink = defineButtonPersonality({
8667
8879
  id: "editorial-link",
@@ -9120,6 +9332,7 @@ var softPill = defineButtonPersonality({
9120
9332
  // ../theme-core/src/buttons/personalities/index.ts
9121
9333
  var buttonPersonalities = [
9122
9334
  softPill,
9335
+ earthPill,
9123
9336
  confidentChip,
9124
9337
  editorialLink,
9125
9338
  pebble,
@@ -9795,12 +10008,36 @@ var boxBackgroundSchema = z21.object({
9795
10008
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
9796
10009
  headingColor: tokenOrCssColorValueSchema.nullable().optional()
9797
10010
  });
10011
+ var noHeadingDecorationSchema = z21.object({
10012
+ family: z21.literal("none"),
10013
+ placement: z21.literal("none")
10014
+ });
10015
+ var visibleHeadingDecorationSchema = z21.object({
10016
+ family: z21.enum(visibleHeadingDecorationFamilyValues),
10017
+ placement: z21.enum(visibleHeadingDecorationPlacementValues),
10018
+ colorToken: z21.enum(headingDecorationColorTokenValues).optional()
10019
+ });
10020
+ var headingDecorationSchema = z21.union([
10021
+ noHeadingDecorationSchema,
10022
+ visibleHeadingDecorationSchema
10023
+ ]);
10024
+ var accordionIconTreatmentSchema = z21.object({
10025
+ iconSet: z21.enum(accordionIconSetValues),
10026
+ colorToken: z21.enum(accordionIconColorTokenValues),
10027
+ openColorToken: z21.enum(accordionIconColorTokenValues).optional(),
10028
+ motion: z21.enum(accordionIconMotionValues)
10029
+ });
9798
10030
  var sectionStylesOverrideSchema = z21.object({
9799
10031
  background: boxBackgroundSchema.nullable().optional(),
9800
10032
  spacing: semanticSpacingSchema.nullable().optional(),
9801
10033
  minHeight: z21.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
9802
10034
  tileTreatment: z21.enum(tileTreatmentValues).nullable().optional(),
9803
- eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional()
10035
+ eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional(),
10036
+ headingDecoration: headingDecorationSchema.nullable().optional(),
10037
+ // Author-level override consumed by later block/editor rendering phases.
10038
+ // Keeping it in section styles lets existing block save APIs persist it.
10039
+ headingDecorationOverride: z21.enum(headingDecorationOverrideValues).nullable().optional(),
10040
+ accordionIconTreatment: accordionIconTreatmentSchema.nullable().optional()
9804
10041
  });
9805
10042
  var containerStylesOverrideSchema = z21.object({
9806
10043
  background: boxBackgroundSchema.nullable().optional(),
@@ -10508,6 +10745,28 @@ var warmNeutralCream = definePaletteVariant({
10508
10745
  { name: "border", hex: "#e0d2b8" }
10509
10746
  ]
10510
10747
  });
10748
+ var warmNeutralSoftEarth = definePaletteVariant({
10749
+ id: "warm-neutral-soft-earth",
10750
+ name: "Warm Neutral \u2014 Soft Earth",
10751
+ description: "Cream ground with terracotta primary, clay accents, and olive depth.",
10752
+ tags: { tone: "classic", energy: "calm", era: "organic" },
10753
+ mode: "light",
10754
+ colors: [
10755
+ { name: "primary", hex: "#a8573d" },
10756
+ { name: "secondary", hex: "#72765c" },
10757
+ { name: "accent", hex: "#c87557" },
10758
+ { name: "success", hex: "#687854" },
10759
+ { name: "warning", hex: "#b7863e" },
10760
+ { name: "destructive", hex: "#a54b3c" },
10761
+ { name: "background", hex: "#fbf6eb" },
10762
+ { name: "surface", hex: "#fffdf7" },
10763
+ { name: "surfaceAlt", hex: "#f0e4d3" },
10764
+ { name: "muted", hex: "#eadbc6" },
10765
+ { name: "text", hex: "#30281f" },
10766
+ { name: "primaryForeground", hex: "#fffaf3" },
10767
+ { name: "border", hex: "#d9c8b2" }
10768
+ ]
10769
+ });
10511
10770
  var warmNeutralForest = definePaletteVariant({
10512
10771
  id: "warm-neutral-forest",
10513
10772
  name: "Warm Neutral \u2014 Forest",
@@ -10541,6 +10800,7 @@ var paletteVariants = [
10541
10800
  // Warm-neutral family
10542
10801
  warmNeutralClay,
10543
10802
  warmNeutralCream,
10803
+ warmNeutralSoftEarth,
10544
10804
  warmNeutralForest,
10545
10805
  // High-contrast family
10546
10806
  highContrastInk,
@@ -10559,6 +10819,12 @@ var paletteVariantsById = new Map(
10559
10819
  function asHeaderLookId(value) {
10560
10820
  return value;
10561
10821
  }
10822
+ function asHeaderLayoutId(value) {
10823
+ return value;
10824
+ }
10825
+ function asHeaderStyleId(value) {
10826
+ return value;
10827
+ }
10562
10828
  function baseHeader(theme) {
10563
10829
  const {
10564
10830
  navLinkStyle: _navLinkStyle,
@@ -10577,6 +10843,309 @@ function baseHeader(theme) {
10577
10843
  navContainer: { type: "none", tint: null, opacity: 0.15 }
10578
10844
  };
10579
10845
  }
10846
+ var headerLayoutCatalog = [
10847
+ {
10848
+ id: asHeaderLayoutId("classic"),
10849
+ label: "Classic",
10850
+ description: "Logo and navigation in one practical horizontal row.",
10851
+ structure: "inline-classic",
10852
+ variant: "classic",
10853
+ defaultPositioning: "sticky",
10854
+ shrinkOnScroll: false
10855
+ },
10856
+ {
10857
+ id: asHeaderLayoutId("centered"),
10858
+ label: "Centered",
10859
+ description: "Logo centered above a balanced navigation row.",
10860
+ structure: "centered-stack",
10861
+ variant: "centered",
10862
+ defaultPositioning: "static",
10863
+ shrinkOnScroll: false,
10864
+ maxRecommendedNavItems: 5,
10865
+ allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
10866
+ },
10867
+ {
10868
+ id: asHeaderLayoutId("editorial"),
10869
+ label: "Editorial",
10870
+ description: "A composed, magazine-like stacked header treatment.",
10871
+ structure: "editorial-stack",
10872
+ variant: "editorial",
10873
+ defaultPositioning: "static",
10874
+ shrinkOnScroll: false,
10875
+ maxRecommendedNavItems: 6
10876
+ },
10877
+ {
10878
+ id: asHeaderLayoutId("floating"),
10879
+ label: "Floating",
10880
+ description: "Detached header chrome that sits over the opening section.",
10881
+ structure: "floating-shell",
10882
+ variant: "floating",
10883
+ defaultPositioning: "fixed",
10884
+ shrinkOnScroll: true,
10885
+ maxRecommendedNavItems: 5,
10886
+ allowedLogoShapes: ["none", "text-only", "horizontal"]
10887
+ }
10888
+ ];
10889
+ function supportedLayouts(ids) {
10890
+ return ids.map(asHeaderLayoutId);
10891
+ }
10892
+ var headerStyleCatalog = [
10893
+ {
10894
+ id: asHeaderStyleId("minimal"),
10895
+ label: "Minimal",
10896
+ description: "Quiet surface with simple color-change navigation.",
10897
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10898
+ navInteraction: "color-change",
10899
+ surface: "neutral"
10900
+ },
10901
+ {
10902
+ id: asHeaderStyleId("fine-line"),
10903
+ label: "Fine Line",
10904
+ description: "Light surface with a crisp lower rule and underline hover.",
10905
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10906
+ navInteraction: "underline-grow",
10907
+ surface: "bordered"
10908
+ },
10909
+ {
10910
+ id: asHeaderStyleId("soft-bar"),
10911
+ label: "Soft Bar",
10912
+ description: "Soft tinted surface with gentle pill hover states.",
10913
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10914
+ navInteraction: "pill-background",
10915
+ surface: "soft"
10916
+ },
10917
+ {
10918
+ id: asHeaderStyleId("pill-nav"),
10919
+ label: "Pill Nav",
10920
+ description: "A calm pill navigation rail over a neutral header.",
10921
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10922
+ navInteraction: "pill-background",
10923
+ surface: "soft"
10924
+ },
10925
+ {
10926
+ id: asHeaderStyleId("brand-bar"),
10927
+ label: "Brand Bar",
10928
+ description: "Solid brand surface with high-contrast navigation.",
10929
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10930
+ navInteraction: "color-change",
10931
+ surface: "brand-solid"
10932
+ },
10933
+ {
10934
+ id: asHeaderStyleId("brand-underline"),
10935
+ label: "Brand Underline",
10936
+ description: "Brand surface with underline-grow navigation.",
10937
+ supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
10938
+ navInteraction: "underline-grow",
10939
+ surface: "brand-solid"
10940
+ },
10941
+ {
10942
+ id: asHeaderStyleId("brand-pill"),
10943
+ label: "Brand Pill",
10944
+ description: "Solid brand surface with rounded active and hover states.",
10945
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
10946
+ navInteraction: "pill-background",
10947
+ surface: "brand-solid"
10948
+ },
10949
+ {
10950
+ id: asHeaderStyleId("editorial-line"),
10951
+ label: "Editorial Line",
10952
+ description: "Typographic logo treatment with understated underline navigation.",
10953
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10954
+ navInteraction: "underline-grow",
10955
+ surface: "bordered"
10956
+ },
10957
+ {
10958
+ id: asHeaderStyleId("flat-tabs"),
10959
+ label: "Flat Tabs",
10960
+ description: "Flat block hover and active states with a Swiss utility feel.",
10961
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
10962
+ navInteraction: "flat-block",
10963
+ surface: "bordered"
10964
+ },
10965
+ {
10966
+ id: asHeaderStyleId("glass"),
10967
+ label: "Glass",
10968
+ description: "Floating translucent chrome with frosted navigation backing.",
10969
+ supportedLayoutIds: supportedLayouts(["floating"]),
10970
+ navInteraction: "glass-backed",
10971
+ surface: "floating",
10972
+ requiresFloatingLayout: true
10973
+ },
10974
+ {
10975
+ id: asHeaderStyleId("minimal-surface"),
10976
+ label: "Minimal Surface",
10977
+ description: "Floating chrome with a restrained translucent surface.",
10978
+ supportedLayoutIds: supportedLayouts(["floating"]),
10979
+ navInteraction: "color-change",
10980
+ surface: "floating",
10981
+ requiresFloatingLayout: true
10982
+ },
10983
+ {
10984
+ id: asHeaderStyleId("soft-shell"),
10985
+ label: "Soft Shell",
10986
+ description: "Floating rounded shell with soft pill navigation states.",
10987
+ supportedLayoutIds: supportedLayouts(["floating"]),
10988
+ navInteraction: "pill-background",
10989
+ surface: "floating",
10990
+ requiresFloatingLayout: true
10991
+ }
10992
+ ];
10993
+ var headerLayoutsById = new Map(
10994
+ headerLayoutCatalog.map((layout) => [layout.id, layout])
10995
+ );
10996
+ var headerStylesById = new Map(
10997
+ headerStyleCatalog.map((style) => [style.id, style])
10998
+ );
10999
+ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
11000
+ [
11001
+ asHeaderLayoutId("classic"),
11002
+ headerStyleRepairChain([
11003
+ "minimal",
11004
+ "fine-line",
11005
+ "soft-bar",
11006
+ "pill-nav",
11007
+ "brand-bar",
11008
+ "brand-underline",
11009
+ "brand-pill",
11010
+ "editorial-line",
11011
+ "flat-tabs"
11012
+ ])
11013
+ ],
11014
+ [
11015
+ asHeaderLayoutId("centered"),
11016
+ headerStyleRepairChain([
11017
+ "minimal",
11018
+ "fine-line",
11019
+ "soft-bar",
11020
+ "pill-nav",
11021
+ "brand-bar",
11022
+ "brand-pill",
11023
+ "editorial-line",
11024
+ "flat-tabs"
11025
+ ])
11026
+ ],
11027
+ [
11028
+ asHeaderLayoutId("editorial"),
11029
+ headerStyleRepairChain([
11030
+ "minimal",
11031
+ "fine-line",
11032
+ "soft-bar",
11033
+ "brand-bar",
11034
+ "brand-underline",
11035
+ "editorial-line",
11036
+ "flat-tabs"
11037
+ ])
11038
+ ],
11039
+ [
11040
+ asHeaderLayoutId("floating"),
11041
+ headerStyleRepairChain([
11042
+ "glass",
11043
+ "minimal-surface",
11044
+ "soft-shell",
11045
+ "brand-pill"
11046
+ ])
11047
+ ]
11048
+ ]);
11049
+ function headerStyleRepairChain(values) {
11050
+ return values.map(asHeaderStyleId);
11051
+ }
11052
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map([
11053
+ [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
11054
+ [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
11055
+ [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
11056
+ [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
11057
+ [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
11058
+ [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
11059
+ [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
11060
+ [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
11061
+ [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
11062
+ [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
11063
+ [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
11064
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
11065
+ ]);
11066
+ var legacyHeaderLookAliases = [
11067
+ {
11068
+ lookId: asHeaderLookId("clean-base"),
11069
+ selection: {
11070
+ layoutId: asHeaderLayoutId("classic"),
11071
+ styleId: asHeaderStyleId("minimal")
11072
+ }
11073
+ },
11074
+ {
11075
+ lookId: asHeaderLookId("brand-solid"),
11076
+ selection: {
11077
+ layoutId: asHeaderLayoutId("classic"),
11078
+ styleId: asHeaderStyleId("brand-bar")
11079
+ }
11080
+ },
11081
+ {
11082
+ lookId: asHeaderLookId("editorial-line"),
11083
+ selection: {
11084
+ layoutId: asHeaderLayoutId("editorial"),
11085
+ styleId: asHeaderStyleId("editorial-line")
11086
+ }
11087
+ },
11088
+ {
11089
+ lookId: asHeaderLookId("centered-calm"),
11090
+ selection: {
11091
+ layoutId: asHeaderLayoutId("centered"),
11092
+ styleId: asHeaderStyleId("minimal")
11093
+ }
11094
+ },
11095
+ {
11096
+ lookId: asHeaderLookId("practical-utility"),
11097
+ selection: {
11098
+ layoutId: asHeaderLayoutId("classic"),
11099
+ styleId: asHeaderStyleId("flat-tabs")
11100
+ }
11101
+ },
11102
+ {
11103
+ lookId: asHeaderLookId("minimal-transparent"),
11104
+ selection: {
11105
+ layoutId: asHeaderLayoutId("classic"),
11106
+ styleId: asHeaderStyleId("minimal")
11107
+ }
11108
+ },
11109
+ {
11110
+ lookId: asHeaderLookId("transparent-overlay"),
11111
+ selection: {
11112
+ layoutId: asHeaderLayoutId("floating"),
11113
+ styleId: asHeaderStyleId("glass")
11114
+ }
11115
+ },
11116
+ {
11117
+ lookId: asHeaderLookId("floating-glass"),
11118
+ selection: {
11119
+ layoutId: asHeaderLayoutId("floating"),
11120
+ styleId: asHeaderStyleId("glass")
11121
+ }
11122
+ }
11123
+ ];
11124
+ var legacyHeaderLookAliasesById = new Map(
11125
+ legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
11126
+ );
11127
+ function getHeaderStyle(id) {
11128
+ return headerStylesById.get(id) ?? null;
11129
+ }
11130
+ function isHeaderStyleCompatibleWithLayout(style, layoutId) {
11131
+ return style.supportedLayoutIds.includes(layoutId);
11132
+ }
11133
+ function getHeaderStyleOrThrow(id) {
11134
+ const style = getHeaderStyle(id);
11135
+ if (!style) {
11136
+ throw new Error(`Unknown Theme V2 header style: ${id}`);
11137
+ }
11138
+ return style;
11139
+ }
11140
+ function resolveLegacyHeaderLookAlias(lookId) {
11141
+ return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
11142
+ }
11143
+ function getCompatibleHeaderStyleIds(layoutId) {
11144
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
11145
+ const style = getHeaderStyleOrThrow(styleId);
11146
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
11147
+ });
11148
+ }
10580
11149
  function solidBrandHeader(theme) {
10581
11150
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
10582
11151
  return {
@@ -10813,6 +11382,11 @@ var headerLookCatalog = [
10813
11382
  label: "Clean base",
10814
11383
  visualTreatment: "solid-neutral",
10815
11384
  layoutBehavior: "sticky",
11385
+ configuration: {
11386
+ structure: "inline-classic",
11387
+ treatment: "solid-neutral",
11388
+ behavior: "sticky"
11389
+ },
10816
11390
  openingRequirement: "none",
10817
11391
  compile: cleanBaseHeader
10818
11392
  },
@@ -10821,6 +11395,11 @@ var headerLookCatalog = [
10821
11395
  label: "Brand solid",
10822
11396
  visualTreatment: "solid-brand",
10823
11397
  layoutBehavior: "sticky-shrink",
11398
+ configuration: {
11399
+ structure: "inline-classic",
11400
+ treatment: "solid-brand",
11401
+ behavior: "sticky-shrink"
11402
+ },
10824
11403
  openingRequirement: "none",
10825
11404
  compile: solidBrandHeader
10826
11405
  },
@@ -10829,6 +11408,11 @@ var headerLookCatalog = [
10829
11408
  label: "Editorial line",
10830
11409
  visualTreatment: "light-editorial",
10831
11410
  layoutBehavior: "sticky",
11411
+ configuration: {
11412
+ structure: "editorial-stack",
11413
+ treatment: "light-editorial",
11414
+ behavior: "sticky"
11415
+ },
10832
11416
  openingRequirement: "none",
10833
11417
  maxRecommendedNavItems: 6,
10834
11418
  compile: editorialLineHeader
@@ -10838,6 +11422,11 @@ var headerLookCatalog = [
10838
11422
  label: "Centered calm",
10839
11423
  visualTreatment: "light-editorial",
10840
11424
  layoutBehavior: "normal-flow",
11425
+ configuration: {
11426
+ structure: "centered-stack",
11427
+ treatment: "light-editorial",
11428
+ behavior: "normal-flow"
11429
+ },
10841
11430
  openingRequirement: "none",
10842
11431
  maxRecommendedNavItems: 5,
10843
11432
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"],
@@ -10848,6 +11437,11 @@ var headerLookCatalog = [
10848
11437
  label: "Practical utility",
10849
11438
  visualTreatment: "solid-neutral",
10850
11439
  layoutBehavior: "sticky-shrink",
11440
+ configuration: {
11441
+ structure: "inline-classic",
11442
+ treatment: "solid-neutral",
11443
+ behavior: "sticky-shrink"
11444
+ },
10851
11445
  openingRequirement: "none",
10852
11446
  requiresProminentCta: true,
10853
11447
  compile: practicalUtilityHeader
@@ -10857,6 +11451,11 @@ var headerLookCatalog = [
10857
11451
  label: "Minimal transparent",
10858
11452
  visualTreatment: "minimal-transparent",
10859
11453
  layoutBehavior: "normal-flow",
11454
+ configuration: {
11455
+ structure: "inline-classic",
11456
+ treatment: "minimal-transparent",
11457
+ behavior: "normal-flow"
11458
+ },
10860
11459
  openingRequirement: "reserved-space-ok",
10861
11460
  compile: minimalTransparentHeader
10862
11461
  },
@@ -10865,6 +11464,11 @@ var headerLookCatalog = [
10865
11464
  label: "Transparent overlay",
10866
11465
  visualTreatment: "transparent-overlay",
10867
11466
  layoutBehavior: "fixed-overlay",
11467
+ configuration: {
11468
+ structure: "inline-classic",
11469
+ treatment: "transparent-overlay",
11470
+ behavior: "fixed-overlay"
11471
+ },
10868
11472
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10869
11473
  maxRecommendedNavItems: 5,
10870
11474
  allowedLogoShapes: ["none", "text-only", "horizontal"],
@@ -10875,6 +11479,11 @@ var headerLookCatalog = [
10875
11479
  label: "Floating glass",
10876
11480
  visualTreatment: "floating-glass",
10877
11481
  layoutBehavior: "fixed-floating",
11482
+ configuration: {
11483
+ structure: "floating-shell",
11484
+ treatment: "floating-glass",
11485
+ behavior: "fixed-floating"
11486
+ },
10878
11487
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10879
11488
  maxRecommendedNavItems: 5,
10880
11489
  allowedLogoShapes: ["none", "text-only", "horizontal"],
@@ -10882,9 +11491,17 @@ var headerLookCatalog = [
10882
11491
  }
10883
11492
  ];
10884
11493
  var guaranteedFallbackHeaderLookId = asHeaderLookId("clean-base");
11494
+ var guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
11495
+ var guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
11496
+ var allowedHeaderConfigurationKeys = new Set(
11497
+ headerLookCatalog.map((look) => headerConfigurationKey(look.configuration))
11498
+ );
10885
11499
  var headerLooksById = new Map(
10886
11500
  headerLookCatalog.map((look) => [look.id, look])
10887
11501
  );
11502
+ function headerConfigurationKey(configuration) {
11503
+ return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
11504
+ }
10888
11505
 
10889
11506
  // ../theme-core/src/site-styles/footerLooks.ts
10890
11507
  function asFooterLookId(value) {
@@ -11017,6 +11634,264 @@ var advancedDesignOptionCatalog = {
11017
11634
  detachedCustom: true
11018
11635
  };
11019
11636
 
11637
+ // ../theme-core/src/site-styles/typographyPresets.ts
11638
+ var bodyReadablePolicy = {
11639
+ recommendedCategories: ["sans-serif", "serif"],
11640
+ allowedCategories: ["sans-serif", "serif"],
11641
+ requiresItalicForBody: true,
11642
+ requiresBoldForBody: true
11643
+ };
11644
+ var headingFlexiblePolicy = {
11645
+ recommendedCategories: ["sans-serif", "serif", "display"],
11646
+ allowedCategories: ["sans-serif", "serif", "display"]
11647
+ };
11648
+ var displayHeadingPolicy = {
11649
+ recommendedCategories: ["display", "sans-serif", "serif"],
11650
+ allowedCategories: ["display", "sans-serif", "serif"]
11651
+ };
11652
+ function asTypographyPresetId(value) {
11653
+ if (!value.startsWith("typography-preset:")) {
11654
+ throw new Error(`TypographyPresetId must start with "typography-preset:". Received: ${value}`);
11655
+ }
11656
+ return value;
11657
+ }
11658
+ function defineTypographyPreset(preset2) {
11659
+ return {
11660
+ ...preset2,
11661
+ id: asTypographyPresetId(preset2.id)
11662
+ };
11663
+ }
11664
+ var modernSansTypography = {
11665
+ body: {
11666
+ family: "Inter, system-ui, sans-serif",
11667
+ size: "md",
11668
+ weight: "regular",
11669
+ lineHeight: "relaxed",
11670
+ letterSpacing: "normal"
11671
+ },
11672
+ headings: {
11673
+ default: {
11674
+ family: "Inter, system-ui, sans-serif",
11675
+ weight: "semibold",
11676
+ lineHeight: "normal",
11677
+ letterSpacing: "tight",
11678
+ italic: null,
11679
+ case: null
11680
+ },
11681
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11682
+ h2: { size: "lg", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11683
+ h3: { size: "md", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null }
11684
+ },
11685
+ scale: "balanced"
11686
+ };
11687
+ var warmRoundedTypography = {
11688
+ body: {
11689
+ family: "Nunito Sans, system-ui, sans-serif",
11690
+ size: "lg",
11691
+ weight: "regular",
11692
+ lineHeight: "relaxed",
11693
+ letterSpacing: "normal"
11694
+ },
11695
+ headings: {
11696
+ default: {
11697
+ family: "Nunito Sans, system-ui, sans-serif",
11698
+ weight: "bold",
11699
+ lineHeight: "normal",
11700
+ letterSpacing: "normal",
11701
+ italic: null,
11702
+ case: null
11703
+ },
11704
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11705
+ h2: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11706
+ h3: { size: "md", weight: "semibold", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11707
+ },
11708
+ scale: "balanced"
11709
+ };
11710
+ var editorialSerifTypography = {
11711
+ body: {
11712
+ family: "Lora, Georgia, serif",
11713
+ size: "lg",
11714
+ weight: "regular",
11715
+ lineHeight: "loose",
11716
+ letterSpacing: "normal"
11717
+ },
11718
+ headings: {
11719
+ default: {
11720
+ family: "Playfair Display, Georgia, serif",
11721
+ weight: "semibold",
11722
+ lineHeight: "normal",
11723
+ letterSpacing: "tight",
11724
+ italic: null,
11725
+ case: null
11726
+ },
11727
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11728
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11729
+ h3: { size: "md", weight: "semibold", lineHeight: "relaxed", letterSpacing: "normal", italic: true }
11730
+ },
11731
+ scale: "spacious"
11732
+ };
11733
+ var classicSerifTypography = {
11734
+ body: {
11735
+ family: "Libre Baskerville, Georgia, serif",
11736
+ size: "md",
11737
+ weight: "regular",
11738
+ lineHeight: "relaxed",
11739
+ letterSpacing: "normal"
11740
+ },
11741
+ headings: {
11742
+ default: {
11743
+ family: "Cormorant Garamond, Georgia, serif",
11744
+ weight: "semibold",
11745
+ lineHeight: "normal",
11746
+ letterSpacing: "normal",
11747
+ italic: null,
11748
+ case: null
11749
+ },
11750
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11751
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11752
+ h3: { size: "md", weight: "medium", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11753
+ },
11754
+ scale: "balanced"
11755
+ };
11756
+ var luxeContrastTypography = {
11757
+ body: {
11758
+ family: "Manrope, system-ui, sans-serif",
11759
+ size: "md",
11760
+ weight: "regular",
11761
+ lineHeight: "relaxed",
11762
+ letterSpacing: "normal"
11763
+ },
11764
+ headings: {
11765
+ default: {
11766
+ family: "Cormorant Garamond, Georgia, serif",
11767
+ weight: "semibold",
11768
+ lineHeight: "normal",
11769
+ letterSpacing: "tight",
11770
+ italic: null,
11771
+ case: null
11772
+ },
11773
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11774
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11775
+ h3: { size: "md", weight: "medium", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11776
+ },
11777
+ scale: "spacious"
11778
+ };
11779
+ var boldDisplayTypography = {
11780
+ body: {
11781
+ family: "Manrope, system-ui, sans-serif",
11782
+ size: "lg",
11783
+ weight: "regular",
11784
+ lineHeight: "relaxed",
11785
+ letterSpacing: "normal"
11786
+ },
11787
+ headings: {
11788
+ default: {
11789
+ family: '"TAN - PEARL", sans-serif',
11790
+ weight: "bold",
11791
+ lineHeight: "normal",
11792
+ letterSpacing: "tight",
11793
+ colorToken: "primary",
11794
+ italic: null,
11795
+ case: null
11796
+ },
11797
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11798
+ h2: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11799
+ h3: { size: "md", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null }
11800
+ },
11801
+ scale: "balanced"
11802
+ };
11803
+ var typographyPresets = [
11804
+ defineTypographyPreset({
11805
+ id: "typography-preset:modern-sans",
11806
+ name: "Modern Sans",
11807
+ description: "Crisp, neutral type for clear service pages and practical editorial structure.",
11808
+ defaultFonts: { body: "Inter, system-ui, sans-serif", heading: "Inter, system-ui, sans-serif" },
11809
+ recommendedFonts: {
11810
+ body: ["Inter", "Source Sans 3", "IBM Plex Sans"],
11811
+ heading: ["Inter", "Manrope", "Source Sans 3"]
11812
+ },
11813
+ slotPolicies: { body: bodyReadablePolicy, heading: headingFlexiblePolicy },
11814
+ typography: modernSansTypography
11815
+ }),
11816
+ defineTypographyPreset({
11817
+ id: "typography-preset:warm-rounded",
11818
+ name: "Warm Rounded",
11819
+ description: "Soft, friendly type for welcoming studios, classes, and community businesses.",
11820
+ defaultFonts: { body: "Nunito Sans, system-ui, sans-serif", heading: "Nunito Sans, system-ui, sans-serif" },
11821
+ recommendedFonts: {
11822
+ body: ["Nunito Sans", "Atkinson Hyperlegible", "Lato"],
11823
+ heading: ["Nunito Sans", "Quicksand", "Manrope"]
11824
+ },
11825
+ slotPolicies: { body: bodyReadablePolicy, heading: headingFlexiblePolicy },
11826
+ typography: warmRoundedTypography
11827
+ }),
11828
+ defineTypographyPreset({
11829
+ id: "typography-preset:editorial-serif",
11830
+ name: "Editorial Serif",
11831
+ description: "Story-led type with warm reading rhythm and expressive headings.",
11832
+ defaultFonts: { body: "Lora, Georgia, serif", heading: "Playfair Display, Georgia, serif" },
11833
+ recommendedFonts: {
11834
+ body: ["Lora", "Source Serif 4", "Libre Baskerville"],
11835
+ heading: ["Playfair Display", "Cormorant Garamond", "Fraunces"]
11836
+ },
11837
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11838
+ typography: editorialSerifTypography
11839
+ }),
11840
+ defineTypographyPreset({
11841
+ id: "typography-preset:classic-serif",
11842
+ name: "Classic Serif",
11843
+ description: "Measured, polished type for premium and established offers.",
11844
+ defaultFonts: { body: "Libre Baskerville, Georgia, serif", heading: "Cormorant Garamond, Georgia, serif" },
11845
+ recommendedFonts: {
11846
+ body: ["Libre Baskerville", "Source Serif 4", "Lora"],
11847
+ heading: ["Cormorant Garamond", "Playfair Display", "Libre Baskerville"]
11848
+ },
11849
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11850
+ typography: classicSerifTypography
11851
+ }),
11852
+ defineTypographyPreset({
11853
+ id: "typography-preset:luxe-contrast",
11854
+ name: "Luxe Contrast",
11855
+ description: "A restrained sans body paired with elegant high-contrast headings.",
11856
+ defaultFonts: { body: "Manrope, system-ui, sans-serif", heading: "Cormorant Garamond, Georgia, serif" },
11857
+ recommendedFonts: {
11858
+ body: ["Manrope", "Inter", "Source Sans 3"],
11859
+ heading: ["Cormorant Garamond", "Playfair Display", "Bodoni Moda"]
11860
+ },
11861
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11862
+ typography: luxeContrastTypography
11863
+ }),
11864
+ defineTypographyPreset({
11865
+ id: "typography-preset:bold-display",
11866
+ name: "Bold Display",
11867
+ description: "Punchy display headings with readable sans body copy for branded launches.",
11868
+ defaultFonts: { body: "Manrope, system-ui, sans-serif", heading: '"TAN - PEARL", sans-serif' },
11869
+ recommendedFonts: {
11870
+ body: ["Manrope", "Inter", "Space Grotesk"],
11871
+ heading: ["Anton", "Bebas Neue", "Archivo Black"]
11872
+ },
11873
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11874
+ typography: boldDisplayTypography,
11875
+ heroTypography: {
11876
+ headlineSize: "6xl",
11877
+ headlineLineHeight: "tight",
11878
+ subheadlineSize: "editorial",
11879
+ subheadlineLineHeight: "normal",
11880
+ microHeadlineSize: "6xl",
11881
+ microHeadlineLineHeight: "tight",
11882
+ microSubheadlineSize: "xl",
11883
+ microSubheadlineLineHeight: "normal",
11884
+ responsive: {
11885
+ tablet: { headlineSize: "5xl" },
11886
+ mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
11887
+ }
11888
+ }
11889
+ })
11890
+ ];
11891
+ var typographyPresetsById = new Map(
11892
+ typographyPresets.map((preset2) => [preset2.id, preset2])
11893
+ );
11894
+
11020
11895
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
11021
11896
  var curatedSiteStyleIdValues = [
11022
11897
  "site-style:calm-studio",
@@ -11029,6 +11904,7 @@ var curatedSiteStyleIdValues = [
11029
11904
  "site-style:personal-retreat-journal",
11030
11905
  "site-style:tactile-workshop",
11031
11906
  "site-style:modern-wellness",
11907
+ "site-style:soft-earth",
11032
11908
  "site-style:bold-launch",
11033
11909
  "site-style:south-west-twerk-school"
11034
11910
  ];
@@ -11105,6 +11981,15 @@ function uniqueContentFrameKinds() {
11105
11981
  }
11106
11982
  var generatedContentFrameKinds = uniqueContentFrameKinds();
11107
11983
  function defineCuratedSiteStyle(input) {
11984
+ const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
11985
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
11986
+ const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
11987
+ const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
11988
+ if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
11989
+ throw new Error(
11990
+ `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
11991
+ );
11992
+ }
11108
11993
  return {
11109
11994
  id: asSiteStyleId(input.id),
11110
11995
  name: input.name,
@@ -11125,11 +12010,23 @@ function defineCuratedSiteStyle(input) {
11125
12010
  },
11126
12011
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
11127
12012
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
11128
- recommendedHeaderLookIds: (input.recommendedHeaderLookIds ?? ["clean-base"]).map(asHeaderLookId),
12013
+ defaultHeaderSelection: input.defaultHeaderSelection ? {
12014
+ layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
12015
+ styleId: asHeaderStyleId(input.defaultHeaderSelection.styleId)
12016
+ } : inferredHeaderCuration.defaultHeaderSelection,
12017
+ recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
12018
+ recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
12019
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
12020
+ layoutId: asHeaderLayoutId(selection.layoutId),
12021
+ styleId: asHeaderStyleId(selection.styleId)
12022
+ })),
12023
+ recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
11129
12024
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
11130
12025
  recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
11131
12026
  buttonPersonalityChoices: input.buttonPersonalityChoices,
11132
- paletteVariantChoices: input.paletteVariantChoices
12027
+ paletteVariantChoices: input.paletteVariantChoices,
12028
+ typographyPresetChoices,
12029
+ defaultTypographyPresetId
11133
12030
  };
11134
12031
  }
11135
12032
  function buttonChoice(id, note) {
@@ -11138,6 +12035,88 @@ function buttonChoice(id, note) {
11138
12035
  function paletteChoice(id, note) {
11139
12036
  return note ? { id: asPaletteVariantId(id), note } : { id: asPaletteVariantId(id) };
11140
12037
  }
12038
+ function headerLayoutChoice(id, note) {
12039
+ return note ? { id: asHeaderLayoutId(id), note } : { id: asHeaderLayoutId(id) };
12040
+ }
12041
+ function headerStyleChoice(id, note) {
12042
+ return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
12043
+ }
12044
+ function headerLayoutRecordKey(id) {
12045
+ return id;
12046
+ }
12047
+ function uniqueHeaderLayoutChoices(choices) {
12048
+ const seen = /* @__PURE__ */ new Set();
12049
+ const unique = choices.filter((choice) => {
12050
+ if (seen.has(choice.id)) return false;
12051
+ seen.add(choice.id);
12052
+ return true;
12053
+ });
12054
+ const first = unique[0];
12055
+ if (!first) {
12056
+ throw new Error("Expected at least one curated header layout choice.");
12057
+ }
12058
+ return [first, ...unique.slice(1)];
12059
+ }
12060
+ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
12061
+ const first = choices[0] ?? {
12062
+ id: getCompatibleHeaderStyleIds(fallbackLayoutId)[0] ?? asHeaderStyleId("minimal")
12063
+ };
12064
+ return [first, ...choices.slice(1)];
12065
+ }
12066
+ function inferHeaderCurationFromLegacyLooks(lookIds) {
12067
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
12068
+ const defaultHeaderSelection = selections[0] ?? {
12069
+ layoutId: asHeaderLayoutId("classic"),
12070
+ styleId: asHeaderStyleId("minimal")
12071
+ };
12072
+ const layoutChoices = uniqueHeaderLayoutChoices(
12073
+ selections.map((selection) => headerLayoutChoice(selection.layoutId))
12074
+ );
12075
+ const stylesByLayout = {};
12076
+ for (const layoutChoice of layoutChoices) {
12077
+ const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12078
+ stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
12079
+ styleChoices,
12080
+ layoutChoice.id
12081
+ );
12082
+ }
12083
+ return {
12084
+ defaultHeaderSelection,
12085
+ recommendedHeaderLayoutChoices: layoutChoices,
12086
+ recommendedHeaderStyleChoicesByLayout: stylesByLayout
12087
+ };
12088
+ }
12089
+ function typographyChoice(id, note) {
12090
+ return note ? { id: asTypographyPresetId(id), note } : { id: asTypographyPresetId(id) };
12091
+ }
12092
+ function defaultTypographyPresetChoicesForRecipe(recipe) {
12093
+ switch (recipe) {
12094
+ case "clean-sans":
12095
+ return [
12096
+ typographyChoice("typography-preset:modern-sans"),
12097
+ typographyChoice("typography-preset:luxe-contrast"),
12098
+ typographyChoice("typography-preset:bold-display")
12099
+ ];
12100
+ case "friendly-sans":
12101
+ return [
12102
+ typographyChoice("typography-preset:warm-rounded"),
12103
+ typographyChoice("typography-preset:modern-sans"),
12104
+ typographyChoice("typography-preset:editorial-serif")
12105
+ ];
12106
+ case "serif-editorial":
12107
+ return [
12108
+ typographyChoice("typography-preset:editorial-serif"),
12109
+ typographyChoice("typography-preset:classic-serif"),
12110
+ typographyChoice("typography-preset:warm-rounded")
12111
+ ];
12112
+ case "classic-serif":
12113
+ return [
12114
+ typographyChoice("typography-preset:classic-serif"),
12115
+ typographyChoice("typography-preset:luxe-contrast"),
12116
+ typographyChoice("typography-preset:editorial-serif")
12117
+ ];
12118
+ }
12119
+ }
11141
12120
  var curatedSiteStyles = [
11142
12121
  defineCuratedSiteStyle({
11143
12122
  id: "site-style:calm-studio",
@@ -11463,6 +12442,102 @@ var curatedSiteStyles = [
11463
12442
  paletteChoice("warm-neutral-clay")
11464
12443
  ]
11465
12444
  }),
12445
+ defineCuratedSiteStyle({
12446
+ id: "site-style:soft-earth",
12447
+ name: "Soft Earth",
12448
+ description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
12449
+ 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.",
12450
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
12451
+ selectionKeywordRules: [
12452
+ { kind: "word", value: "meditation" },
12453
+ { kind: "word", value: "wellbeing" },
12454
+ { kind: "substring", value: "retreat" },
12455
+ { kind: "phrase", value: "yoga studio" },
12456
+ { kind: "phrase", value: "mindful movement" }
12457
+ ],
12458
+ tokenRecipes: {
12459
+ palette: "warm-neutral",
12460
+ contrast: "standard",
12461
+ radius: "soft",
12462
+ shadow: "subtle",
12463
+ typography: "serif-editorial",
12464
+ spacing: "airy",
12465
+ motion: "subtle"
12466
+ },
12467
+ compositionBudget: balancedBudget,
12468
+ themeOverrides: {
12469
+ typography: {
12470
+ body: {
12471
+ family: "Inter, system-ui, sans-serif",
12472
+ size: "md",
12473
+ weight: "regular",
12474
+ lineHeight: "relaxed",
12475
+ letterSpacing: "normal"
12476
+ },
12477
+ headings: {
12478
+ default: {
12479
+ family: '"Cormorant Garamond", Georgia, serif',
12480
+ weight: "regular",
12481
+ lineHeight: "normal",
12482
+ letterSpacing: "normal",
12483
+ colorToken: "text",
12484
+ italic: null,
12485
+ case: null
12486
+ },
12487
+ h1: {
12488
+ size: "xl",
12489
+ weight: "regular",
12490
+ lineHeight: "normal",
12491
+ letterSpacing: "normal",
12492
+ italic: null
12493
+ },
12494
+ h2: {
12495
+ size: "lg",
12496
+ weight: "regular",
12497
+ lineHeight: "normal",
12498
+ letterSpacing: "normal",
12499
+ italic: null
12500
+ },
12501
+ h3: {
12502
+ size: "md",
12503
+ weight: "regular",
12504
+ lineHeight: "normal",
12505
+ letterSpacing: "normal",
12506
+ italic: null
12507
+ }
12508
+ },
12509
+ scale: "majorThird"
12510
+ },
12511
+ bodyText: {
12512
+ intro: {
12513
+ paragraphSize: "default",
12514
+ headingSize: "editorial"
12515
+ }
12516
+ }
12517
+ },
12518
+ recommendedAppearancePresetIds: [
12519
+ "hero-brand-scrim",
12520
+ "intro-soft-earth-statement",
12521
+ "feature-cards-soft-earth-offerings",
12522
+ "testimonials-soft-earth-proof-band",
12523
+ "faq-soft-earth-two-column",
12524
+ "contact-form-panel"
12525
+ ],
12526
+ recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
12527
+ recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
12528
+ buttonPersonalityChoices: [
12529
+ buttonChoice("earth-pill"),
12530
+ buttonChoice("soft-pill"),
12531
+ buttonChoice("pebble"),
12532
+ buttonChoice("editorial-link")
12533
+ ],
12534
+ paletteVariantChoices: [
12535
+ paletteChoice("warm-neutral-soft-earth"),
12536
+ paletteChoice("warm-neutral-clay"),
12537
+ paletteChoice("warm-neutral-forest"),
12538
+ paletteChoice("soft-natural-sage")
12539
+ ]
12540
+ }),
11466
12541
  defineCuratedSiteStyle({
11467
12542
  id: "site-style:bold-launch",
11468
12543
  name: "Bold Launch",
@@ -11516,49 +12591,13 @@ var curatedSiteStyles = [
11516
12591
  motion: "expressive"
11517
12592
  },
11518
12593
  compositionBudget: expressiveBudget,
12594
+ typographyPresetChoices: [
12595
+ typographyChoice("typography-preset:bold-display"),
12596
+ typographyChoice("typography-preset:modern-sans"),
12597
+ typographyChoice("typography-preset:luxe-contrast")
12598
+ ],
12599
+ defaultTypographyPresetId: "typography-preset:bold-display",
11519
12600
  themeOverrides: {
11520
- typography: {
11521
- body: {
11522
- family: "Manrope, system-ui, sans-serif",
11523
- size: "lg",
11524
- weight: "regular",
11525
- lineHeight: "relaxed",
11526
- letterSpacing: "normal"
11527
- },
11528
- headings: {
11529
- default: {
11530
- family: '"TAN - PEARL", sans-serif',
11531
- weight: "bold",
11532
- lineHeight: "normal",
11533
- letterSpacing: "tight",
11534
- colorToken: "primary",
11535
- italic: null,
11536
- case: null
11537
- },
11538
- h1: {
11539
- size: "xl",
11540
- weight: "bold",
11541
- lineHeight: "normal",
11542
- letterSpacing: "tight",
11543
- italic: null
11544
- },
11545
- h2: {
11546
- size: "lg",
11547
- weight: "bold",
11548
- lineHeight: "normal",
11549
- letterSpacing: "normal",
11550
- italic: null
11551
- },
11552
- h3: {
11553
- size: "md",
11554
- weight: "bold",
11555
- lineHeight: "normal",
11556
- letterSpacing: "normal",
11557
- italic: null
11558
- }
11559
- },
11560
- scale: "balanced"
11561
- },
11562
12601
  bodyText: {
11563
12602
  intro: {
11564
12603
  paragraphSize: "editorial",
@@ -15890,8 +16929,9 @@ var faqAccordionFragment = defineFragment({
15890
16929
  },
15891
16930
  fallback: "rb-faq-item"
15892
16931
  },
15893
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } }
15894
- // Pass icon style from theme
16932
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
16933
+ // Legacy theme accordion style
16934
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
15895
16935
  },
15896
16936
  triggerFrom: "faqItem.question",
15897
16937
  contentFrom: "faqItem.answer"
@@ -17026,100 +18066,428 @@ var heroBlockDefinition = {
17026
18066
  manifest: heroManifest
17027
18067
  };
17028
18068
 
17029
- // ../blocks/src/system/blocks/body-text.ts
17030
- var bodyCopyComposition = composeFragments([{ fragment: bodyCopyFragment }]);
17031
- var proseLayout = styledSection({
17032
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
17033
- spacing: "medium",
17034
- baseClass: ""
17035
- });
17036
- var introLayout = styledSection({
17037
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
17038
- spacing: "medium",
17039
- baseClass: ""
17040
- });
17041
- var narrowLayout = styledSection({
17042
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
17043
- spacing: "medium",
17044
- baseClass: ""
17045
- });
17046
- var bodyTextManifest = createBlockManifest({
17047
- id: "block.body-text",
17048
- title: "Body Text",
17049
- titleSource: "heading",
17050
- category: "content",
17051
- fragments: [
17052
- { fragment: bodyCopyFragment, fieldPriority: 0 }
17053
- ],
17054
- layout: proseLayout,
17055
- variants: {
17056
- prose: proseLayout,
17057
- intro: introLayout,
17058
- narrow: narrowLayout
17059
- },
17060
- defaultVariant: "prose",
17061
- variantOptions: {
17062
- prose: {
17063
- label: "Prose",
17064
- description: "Long-form rich text for pages and posts.",
17065
- icon: "Type"
17066
- },
17067
- intro: {
17068
- label: "Intro",
17069
- description: "Narrower, larger text for above-the-fold intros.",
17070
- icon: "AlignCenter"
17071
- },
17072
- narrow: {
17073
- label: "Narrow",
17074
- description: "Left-aligned lead copy with a shorter max width.",
17075
- icon: "AlignLeft"
18069
+ // ../blocks/src/system/fields/aspectRatio.ts
18070
+ var standardAspectRatioOptions = [
18071
+ { value: "auto", label: "Auto (original)" },
18072
+ { value: "16/9", label: "16:9 (Landscape)" },
18073
+ { value: "4/3", label: "4:3 (Standard)" },
18074
+ { value: "1/1", label: "1:1 (Square)" },
18075
+ { value: "3/4", label: "3:4 (Portrait)" }
18076
+ ];
18077
+ function createAspectRatioField(options = {}) {
18078
+ return {
18079
+ id: options.id ?? "aspectRatio",
18080
+ type: "select",
18081
+ label: options.label ?? "Aspect ratio",
18082
+ ...options.description ? { description: options.description } : {},
18083
+ required: false,
18084
+ defaultValue: options.defaultValue ?? "auto",
18085
+ multiple: false,
18086
+ options: [...standardAspectRatioOptions],
18087
+ ui: {
18088
+ intent: options.uiIntent ?? "display",
18089
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
17076
18090
  }
17077
- },
17078
- description: "Simple text block with optional heading and alignment controls.",
17079
- tags: ["text", "paragraph", "content", "copy", "article", "writing", "rich-text"],
17080
- icon: "Type",
17081
- styleTokens: {
17082
- spacing: "md"
17083
- }
17084
- });
17085
- var bodyTextBlockDefinition = {
17086
- manifest: bodyTextManifest
17087
- };
18091
+ };
18092
+ }
17088
18093
 
17089
- // ../blocks/src/system/blocks/blog-post.tsx
17090
- import { z as z28 } from "zod";
17091
- var composition = composeFragments([{ fragment: blogFeaturedPostFragment }]);
17092
- var blogPostLayout = section(
17093
- { background: "background", className: "rb-px-6 rb-py-12" },
17094
- [...composition.layout]
17095
- );
17096
- var blogPostManifest = createBlockManifest({
17097
- id: "block.blog-post",
17098
- version: "0.1.0",
17099
- title: "Blog post",
17100
- description: "Highlights a single blog post with title, image, and excerpt.",
17101
- category: "blog",
17102
- contentTypes: ["post"],
17103
- tags: ["blog", "post", "featured", "highlight", "article", "single"],
17104
- icon: "FileText",
17105
- styleTokens: {
17106
- background: "surface",
17107
- typography: "body",
17108
- spacing: "md"
17109
- },
17110
- behaviours: {
17111
- supportsThemeSwitching: true,
17112
- inlineEditing: false,
17113
- animation: false,
17114
- paletteHidden: false
17115
- },
17116
- additionalFields: composition.fields,
17117
- layout: blogPostLayout
17118
- });
17119
- var blogPostDataSchema = z28.object({
17120
- id: z28.string(),
17121
- title: z28.string(),
17122
- slug: z28.string(),
18094
+ // ../blocks/src/system/fields/imageLayout.ts
18095
+ function createImageColSizeField(options = {}) {
18096
+ const {
18097
+ id = "imageColSize",
18098
+ label = "Image column size",
18099
+ description = "Controls how large the image/thumbnail column is at desktop breakpoints.",
18100
+ defaultValue = "1/3",
18101
+ uiIntent = "display",
18102
+ visibleWhen
18103
+ } = options;
18104
+ return {
18105
+ id,
18106
+ type: "select",
18107
+ label,
18108
+ description,
18109
+ required: false,
18110
+ defaultValue,
18111
+ multiple: false,
18112
+ options: [
18113
+ { value: "1/4", label: "Small (1/4)" },
18114
+ { value: "1/3", label: "Medium (1/3)" },
18115
+ { value: "2/5", label: "Large (2/5)" },
18116
+ { value: "1/2", label: "Extra large (1/2)" },
18117
+ { value: "2/3", label: "Huge (2/3)" }
18118
+ ],
18119
+ ui: {
18120
+ intent: uiIntent,
18121
+ ...visibleWhen ? { visibleWhen } : {}
18122
+ }
18123
+ };
18124
+ }
18125
+ function createImagePositionField(options = {}) {
18126
+ const {
18127
+ id = "imagePosition",
18128
+ label = "Image position",
18129
+ description = "Choose which side the image appears on.",
18130
+ defaultValue = "left",
18131
+ includeAlternate = false,
18132
+ uiIntent = "display",
18133
+ visibleWhen
18134
+ } = options;
18135
+ const positionOptions = [
18136
+ { value: "left", label: "Left" },
18137
+ { value: "right", label: "Right" },
18138
+ ...includeAlternate ? [{ value: "alternate", label: "Alternate" }] : []
18139
+ ];
18140
+ return {
18141
+ id,
18142
+ type: "select",
18143
+ label,
18144
+ description,
18145
+ required: false,
18146
+ defaultValue,
18147
+ multiple: false,
18148
+ // Spread to get a mutable array type without unsafe casts.
18149
+ options: [...positionOptions],
18150
+ ui: {
18151
+ intent: uiIntent,
18152
+ ...visibleWhen ? { visibleWhen } : {}
18153
+ }
18154
+ };
18155
+ }
18156
+
18157
+ // ../blocks/src/system/blocks/intro.ts
18158
+ function introHeading(className) {
18159
+ return text(
18160
+ {
18161
+ as: "h2",
18162
+ className
18163
+ },
18164
+ when("content.title"),
18165
+ bind("content.title")
18166
+ );
18167
+ }
18168
+ function introBody(className = "rb-prose rb-max-w-none") {
18169
+ return richText({ className }, bind("content.body"));
18170
+ }
18171
+ function introCtas(justify = "start") {
18172
+ return ctaRow({
18173
+ justify,
18174
+ gap: "md",
18175
+ containerClassName: "rb-mt-2"
18176
+ });
18177
+ }
18178
+ function introCopyStack(options = {}) {
18179
+ return stack(
18180
+ {
18181
+ gap: "md",
18182
+ className: options.className ?? "rb-intro-copy"
18183
+ },
18184
+ [
18185
+ introHeading(options.headingClassName ?? "rb-intro-title"),
18186
+ introBody(options.bodyClassName),
18187
+ introCtas(options.ctaJustify)
18188
+ ]
18189
+ );
18190
+ }
18191
+ var introMedia = media(
18192
+ {
18193
+ className: "rb-intro-media rb-w-full rb-h-auto rb-object-cover",
18194
+ style: {
18195
+ aspectRatio: { $bind: { from: "content.aspectRatio" } }
18196
+ }
18197
+ },
18198
+ bind("content.media")
18199
+ );
18200
+ var centeredCopyLayout = styledSection({
18201
+ children: styledContainer({
18202
+ rootType: "stack",
18203
+ rootProps: { gap: "lg" },
18204
+ children: [
18205
+ introCopyStack({
18206
+ className: "rb-intro-copy rb-mx-auto rb-max-w-3xl rb-text-center",
18207
+ headingClassName: "rb-intro-title rb-text-center",
18208
+ bodyClassName: "rb-prose rb-mx-auto rb-max-w-none",
18209
+ ctaJustify: "center"
18210
+ })
18211
+ ]
18212
+ }),
18213
+ baseClass: "",
18214
+ spacing: "medium"
18215
+ });
18216
+ var statementCopyLayout = styledSection({
18217
+ children: styledContainer({
18218
+ children: [
18219
+ el(
18220
+ "div",
18221
+ {
18222
+ className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
18223
+ },
18224
+ [
18225
+ introHeading("rb-intro-title rb-max-w-xl"),
18226
+ stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18227
+ introBody(),
18228
+ introCtas("start")
18229
+ ])
18230
+ ]
18231
+ )
18232
+ ]
18233
+ }),
18234
+ baseClass: "",
18235
+ spacing: "medium"
18236
+ });
18237
+ var statementMediaLayout = styledSection({
18238
+ children: styledContainer({
18239
+ children: [
18240
+ el(
18241
+ "div",
18242
+ {
18243
+ 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"
18244
+ },
18245
+ [
18246
+ introHeading("rb-intro-title rb-max-w-xl"),
18247
+ stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18248
+ introBody(),
18249
+ introCtas("start")
18250
+ ]),
18251
+ el("div", { className: "rb-intro-media-wrap rb-w-full" }, [introMedia], when("content.media"))
18252
+ ]
18253
+ )
18254
+ ]
18255
+ }),
18256
+ baseClass: "",
18257
+ spacing: "medium"
18258
+ });
18259
+ var mediaCopyLayout = styledSection({
18260
+ children: styledContainer({
18261
+ children: [
18262
+ responsiveTwoColumn({
18263
+ image: el("div", { className: "rb-intro-media-wrap rb-w-full" }, [introMedia]),
18264
+ text: introCopyStack({
18265
+ className: "rb-intro-copy rb-max-w-xl",
18266
+ headingClassName: "rb-intro-title"
18267
+ }),
18268
+ ratioFrom: "content.ratio",
18269
+ imagePositionFrom: "content.imagePosition",
18270
+ gapFrom: "content.gap",
18271
+ gapFallback: "comfortable",
18272
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
18273
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-center"
18274
+ })
18275
+ ]
18276
+ }),
18277
+ baseClass: "",
18278
+ spacing: "medium"
18279
+ });
18280
+ var introConfig = {
18281
+ id: "block.intro",
18282
+ title: "Intro",
18283
+ category: "layout",
18284
+ includeContainerStyles: true,
18285
+ titleSource: "title",
18286
+ additionalFields: [
18287
+ {
18288
+ id: "title",
18289
+ type: "text",
18290
+ label: "Statement",
18291
+ required: false,
18292
+ multiline: true,
18293
+ maxLength: 160
18294
+ },
18295
+ {
18296
+ id: "body",
18297
+ type: "richText",
18298
+ label: "Text",
18299
+ required: true,
18300
+ ui: {
18301
+ richTextVariant: "limited"
18302
+ }
18303
+ },
18304
+ {
18305
+ id: "media",
18306
+ type: "media",
18307
+ label: "Media",
18308
+ required: false,
18309
+ mediaKinds: ["image"],
18310
+ ui: {
18311
+ intent: "content",
18312
+ visibleWhen: { field: "variant", notEquals: "statement-copy" }
18313
+ }
18314
+ },
18315
+ createImagePositionField({
18316
+ id: "imagePosition",
18317
+ label: "Image position",
18318
+ defaultValue: "left",
18319
+ uiIntent: "display",
18320
+ visibleWhen: { field: "variant", equals: "media-copy" }
18321
+ }),
18322
+ {
18323
+ id: "gap",
18324
+ type: "select",
18325
+ label: "Gap between media and text",
18326
+ required: false,
18327
+ defaultValue: "comfortable",
18328
+ multiple: false,
18329
+ options: [
18330
+ { value: "none", label: "None" },
18331
+ { value: "compact", label: "Compact" },
18332
+ { value: "cozy", label: "Cozy" },
18333
+ { value: "medium", label: "Medium" },
18334
+ { value: "comfortable", label: "Comfortable" },
18335
+ { value: "spacious", label: "Spacious" }
18336
+ ],
18337
+ ui: {
18338
+ intent: "display",
18339
+ visibleWhen: { field: "variant", equals: "media-copy" }
18340
+ }
18341
+ },
18342
+ createImageColSizeField({
18343
+ id: "ratio",
18344
+ label: "Media column size",
18345
+ defaultValue: "1/2",
18346
+ uiIntent: "display",
18347
+ visibleWhen: { field: "variant", equals: "media-copy" }
18348
+ }),
18349
+ createAspectRatioField({
18350
+ id: "aspectRatio",
18351
+ label: "Media aspect ratio",
18352
+ description: "Crop media to a consistent aspect ratio.",
18353
+ defaultValue: "auto",
18354
+ visibleWhen: { field: "media", notEquals: null }
18355
+ }),
18356
+ createCtasRepeater({
18357
+ label: "Calls to action",
18358
+ itemLabel: "CTA",
18359
+ maxItems: 2
18360
+ })
18361
+ ],
18362
+ layout: centeredCopyLayout,
18363
+ variants: {
18364
+ "centered-copy": centeredCopyLayout,
18365
+ "statement-copy": statementCopyLayout,
18366
+ "statement-media": statementMediaLayout,
18367
+ "media-copy": mediaCopyLayout
18368
+ },
18369
+ defaultVariant: "statement-copy",
18370
+ variantOptions: {
18371
+ "centered-copy": {
18372
+ label: "Centered copy",
18373
+ description: "A focused intro with centered text and optional calls to action."
18374
+ },
18375
+ "statement-copy": {
18376
+ label: "Statement and copy",
18377
+ description: "A large statement on the left with supporting copy on the right."
18378
+ },
18379
+ "statement-media": {
18380
+ label: "Statement, copy and media",
18381
+ description: "A three-part intro with statement, copy and a small image."
18382
+ },
18383
+ "media-copy": {
18384
+ label: "Media and copy",
18385
+ description: "A compact media/text intro for softer transitions after a hero."
18386
+ }
18387
+ },
18388
+ description: "A flexible introductory section for statement copy, supporting text, media, and CTAs.",
18389
+ tags: ["intro", "introduction", "about", "welcome", "statement", "media", "text"],
18390
+ icon: "PanelTopOpen"
18391
+ };
18392
+ var introManifest = createBlockManifest(introConfig);
18393
+ var introBlockDefinition = {
18394
+ manifest: introManifest
18395
+ };
18396
+
18397
+ // ../blocks/src/system/blocks/body-text.ts
18398
+ var bodyCopyComposition = composeFragments([{ fragment: bodyCopyFragment }]);
18399
+ var proseLayout = styledSection({
18400
+ children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
18401
+ spacing: "medium",
18402
+ baseClass: ""
18403
+ });
18404
+ var introLayout = styledSection({
18405
+ children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
18406
+ spacing: "medium",
18407
+ baseClass: ""
18408
+ });
18409
+ var narrowLayout = styledSection({
18410
+ children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
18411
+ spacing: "medium",
18412
+ baseClass: ""
18413
+ });
18414
+ var bodyTextManifest = createBlockManifest({
18415
+ id: "block.body-text",
18416
+ title: "Body Text",
18417
+ titleSource: "heading",
18418
+ category: "content",
18419
+ fragments: [
18420
+ { fragment: bodyCopyFragment, fieldPriority: 0 }
18421
+ ],
18422
+ layout: proseLayout,
18423
+ variants: {
18424
+ prose: proseLayout,
18425
+ intro: introLayout,
18426
+ narrow: narrowLayout
18427
+ },
18428
+ defaultVariant: "prose",
18429
+ variantOptions: {
18430
+ prose: {
18431
+ label: "Prose",
18432
+ description: "Long-form rich text for pages and posts.",
18433
+ icon: "Type"
18434
+ },
18435
+ intro: {
18436
+ label: "Intro",
18437
+ description: "Narrower, larger text for above-the-fold intros.",
18438
+ icon: "AlignCenter"
18439
+ },
18440
+ narrow: {
18441
+ label: "Narrow",
18442
+ description: "Left-aligned lead copy with a shorter max width.",
18443
+ icon: "AlignLeft"
18444
+ }
18445
+ },
18446
+ description: "Simple text block with optional heading and alignment controls.",
18447
+ tags: ["text", "paragraph", "content", "copy", "article", "writing", "rich-text"],
18448
+ icon: "Type",
18449
+ styleTokens: {
18450
+ spacing: "md"
18451
+ }
18452
+ });
18453
+ var bodyTextBlockDefinition = {
18454
+ manifest: bodyTextManifest
18455
+ };
18456
+
18457
+ // ../blocks/src/system/blocks/blog-post.tsx
18458
+ import { z as z28 } from "zod";
18459
+ var composition = composeFragments([{ fragment: blogFeaturedPostFragment }]);
18460
+ var blogPostLayout = section(
18461
+ { background: "background", className: "rb-px-6 rb-py-12" },
18462
+ [...composition.layout]
18463
+ );
18464
+ var blogPostManifest = createBlockManifest({
18465
+ id: "block.blog-post",
18466
+ version: "0.1.0",
18467
+ title: "Blog post",
18468
+ description: "Highlights a single blog post with title, image, and excerpt.",
18469
+ category: "blog",
18470
+ contentTypes: ["post"],
18471
+ tags: ["blog", "post", "featured", "highlight", "article", "single"],
18472
+ icon: "FileText",
18473
+ styleTokens: {
18474
+ background: "surface",
18475
+ typography: "body",
18476
+ spacing: "md"
18477
+ },
18478
+ behaviours: {
18479
+ supportsThemeSwitching: true,
18480
+ inlineEditing: false,
18481
+ animation: false,
18482
+ paletteHidden: false
18483
+ },
18484
+ additionalFields: composition.fields,
18485
+ layout: blogPostLayout
18486
+ });
18487
+ var blogPostDataSchema = z28.object({
18488
+ id: z28.string(),
18489
+ title: z28.string(),
18490
+ slug: z28.string(),
17123
18491
  path: z28.string(),
17124
18492
  excerpt: z28.string().nullable().optional(),
17125
18493
  image: z28.object({
@@ -17869,6 +19237,37 @@ var faqComposition = composeFragments([
17869
19237
  { fragment: faqHeadingFragment, fieldPriority: 0 },
17870
19238
  { fragment: faqAccordionFragment, fieldPriority: 1 }
17871
19239
  ]);
19240
+ function fragmentLayoutNode(layout) {
19241
+ return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
19242
+ }
19243
+ function isNodeDefinitionArray(layout) {
19244
+ return Array.isArray(layout);
19245
+ }
19246
+ var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
19247
+ var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
19248
+ var defaultLayout = styledSection({
19249
+ children: styledContainer({
19250
+ baseClassName: "rb-relative rb-isolate",
19251
+ children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, faqComposition.layout)
19252
+ }),
19253
+ baseClass: ""
19254
+ });
19255
+ var twoColumnLayout = styledSection({
19256
+ children: styledContainer({
19257
+ baseClassName: "rb-relative rb-isolate",
19258
+ children: el(
19259
+ "div",
19260
+ {
19261
+ className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19262
+ },
19263
+ [
19264
+ el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
19265
+ el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
19266
+ ]
19267
+ )
19268
+ }),
19269
+ baseClass: ""
19270
+ });
17872
19271
  var faqManifest = createBlockManifest({
17873
19272
  id: "block.faq",
17874
19273
  title: "FAQ",
@@ -17885,13 +19284,22 @@ var faqManifest = createBlockManifest({
17885
19284
  label: "FAQ item styles"
17886
19285
  })
17887
19286
  ],
17888
- layout: styledSection({
17889
- children: styledContainer({
17890
- baseClassName: "rb-relative rb-isolate",
17891
- children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, faqComposition.layout)
17892
- }),
17893
- baseClass: ""
17894
- }),
19287
+ layout: defaultLayout,
19288
+ variants: {
19289
+ default: defaultLayout,
19290
+ "two-column": twoColumnLayout
19291
+ },
19292
+ defaultVariant: "default",
19293
+ variantOptions: {
19294
+ default: {
19295
+ label: "Default",
19296
+ description: "A centered heading above one FAQ accordion."
19297
+ },
19298
+ "two-column": {
19299
+ label: "Two column",
19300
+ description: "A left heading column with FAQ items on the right."
19301
+ }
19302
+ },
17895
19303
  description: "Accordion of frequently asked questions and answers.",
17896
19304
  tags: ["faq", "questions", "answers", "help", "support", "accordion", "q&a"],
17897
19305
  icon: "HelpCircle"
@@ -18541,7 +19949,8 @@ function resolveBackgroundVisualStyles(backgroundColor, tokens, defaultToken = "
18541
19949
  function resolveHeaderVisualStyles(header, tokens) {
18542
19950
  const navContainerType = header?.navContainer?.type ?? "none";
18543
19951
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
18544
- if (hasContainedNav) {
19952
+ const hasTransparentVariant = header?.variant === "transparent" || header?.variant === "floating";
19953
+ if (hasContainedNav || hasTransparentVariant) {
18545
19954
  return {
18546
19955
  backgroundToken: "transparent",
18547
19956
  paletteHex: null,
@@ -18670,6 +20079,17 @@ var headerRootStyleTransform = {
18670
20079
  return mergeStyles(...styleParts);
18671
20080
  }
18672
20081
  };
20082
+ var headerSectionBackgroundTransform = {
20083
+ id: "layout.headerSectionBackground",
20084
+ kind: "string",
20085
+ summary: "Resolve the inner site-header section background token",
20086
+ run: (value) => {
20087
+ const header = asPartialObject(value);
20088
+ const navContainerType = header?.navContainer?.type ?? "none";
20089
+ const usesTransparentRoot = header?.variant === "transparent" || header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill";
20090
+ return usesTransparentRoot ? "raw:transparent" : "background";
20091
+ }
20092
+ };
18673
20093
  var footerRootStyleTransform = {
18674
20094
  id: "layout.footerRootStyle",
18675
20095
  kind: "formatter",
@@ -18928,6 +20348,7 @@ var layoutTransforms = [
18928
20348
  headerRootClassTransform,
18929
20349
  footerRootClassTransform,
18930
20350
  headerRootStyleTransform,
20351
+ headerSectionBackgroundTransform,
18931
20352
  footerRootStyleTransform,
18932
20353
  footerBottomBarClassTransform,
18933
20354
  footerBottomBarContainerClassTransform,
@@ -19438,7 +20859,10 @@ var editorialLayout = stack(
19438
20859
  );
19439
20860
  var headerLayout = headerSection(
19440
20861
  {
19441
- background: "background",
20862
+ background: bindProp("$root.theme.header", {
20863
+ transforms: pipe(tx("layout.headerSectionBackground")),
20864
+ fallback: "background"
20865
+ }),
19442
20866
  allowOverflow: true,
19443
20867
  className: bindProp("$root.theme.header", {
19444
20868
  transforms: pipe(tx("layout.headerRootClass")),
@@ -20273,79 +21697,298 @@ var collectionLayout = styledSection({
20273
21697
  { gap: "md" }
20274
21698
  ),
20275
21699
  baseClass: "",
20276
- spacing: "comfortable"
21700
+ spacing: "comfortable"
21701
+ });
21702
+ var collectionManifest = createBlockManifest({
21703
+ id: "block.collection",
21704
+ title: "Collection",
21705
+ category: "layout",
21706
+ additionalFields: [
21707
+ parseFieldDefinition({
21708
+ id: "layout",
21709
+ type: "select",
21710
+ label: "Layout",
21711
+ defaultValue: "grid",
21712
+ options: [
21713
+ { value: "grid", label: "Grid" },
21714
+ { value: "stack", label: "Stack" }
21715
+ ],
21716
+ ui: { intent: "display" }
21717
+ }),
21718
+ parseFieldDefinition({
21719
+ id: "columns",
21720
+ type: "select",
21721
+ label: "Columns",
21722
+ description: "Number of columns in the grid layout.",
21723
+ defaultValue: "3",
21724
+ options: [
21725
+ { value: "2", label: "2 columns" },
21726
+ { value: "3", label: "3 columns" },
21727
+ { value: "4", label: "4 columns" }
21728
+ ],
21729
+ ui: {
21730
+ intent: "display",
21731
+ visibleWhen: { field: "layout", equals: "grid" }
21732
+ }
21733
+ }),
21734
+ parseFieldDefinition({
21735
+ id: "gap",
21736
+ type: "select",
21737
+ label: "Gap",
21738
+ defaultValue: "medium",
21739
+ options: [
21740
+ { value: "none", label: "None" },
21741
+ { value: "compact", label: "Compact" },
21742
+ { value: "cozy", label: "Cozy" },
21743
+ { value: "medium", label: "Medium" },
21744
+ { value: "comfortable", label: "Comfortable" },
21745
+ { value: "spacious", label: "Spacious" }
21746
+ ],
21747
+ ui: { intent: "display" }
21748
+ }),
21749
+ fragmentsToRepeaterField(
21750
+ "items",
21751
+ "Items",
21752
+ collectionFragments,
21753
+ {
21754
+ minItems: 0,
21755
+ maxItems: 50,
21756
+ itemLabel: "Item",
21757
+ description: "Add items to this collection."
21758
+ }
21759
+ ),
21760
+ cardStylesField({
21761
+ id: "_cardStyles",
21762
+ label: "Item styles"
21763
+ })
21764
+ ],
21765
+ layout: collectionLayout,
21766
+ description: "Repeat items in a grid or stack layout.",
21767
+ tags: ["collection", "grid", "stack", "repeater"],
21768
+ icon: "LayoutList",
21769
+ styleTokens: { spacing: "lg" }
21770
+ });
21771
+ var collectionBlockDefinition = {
21772
+ manifest: collectionManifest
21773
+ };
21774
+
21775
+ // ../blocks/src/system/blocks/feature-cards.ts
21776
+ function grid3(props2, children) {
21777
+ return el("grid", props2 ?? void 0, children ?? void 0);
21778
+ }
21779
+ var sectionHeading = stack(
21780
+ { gap: "sm", className: "rb-feature-cards-heading rb-mx-auto rb-max-w-3xl rb-text-center" },
21781
+ [
21782
+ text(
21783
+ {
21784
+ as: "h2",
21785
+ className: "rb-feature-cards-title rb-text-center"
21786
+ },
21787
+ when("content.title"),
21788
+ bind("content.title")
21789
+ ),
21790
+ richText(
21791
+ {
21792
+ className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
21793
+ style: textColorStyle("mutedText")
21794
+ },
21795
+ when("content.description"),
21796
+ bind("content.description")
21797
+ )
21798
+ ]
21799
+ );
21800
+ var featureCard = styledCard(
21801
+ [
21802
+ media(
21803
+ {
21804
+ className: "rb-feature-card-media rb-w-full rb-h-auto rb-object-cover",
21805
+ style: {
21806
+ aspectRatio: { $bind: { from: "card.aspectRatio" } }
21807
+ }
21808
+ },
21809
+ when("card.media"),
21810
+ bind("card.media")
21811
+ ),
21812
+ stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
21813
+ text(
21814
+ {
21815
+ as: "h3",
21816
+ className: "rb-feature-card-title"
21817
+ },
21818
+ bind("card.title")
21819
+ ),
21820
+ richText(
21821
+ {
21822
+ className: "rb-feature-card-body rb-prose rb-max-w-none",
21823
+ style: textColorStyle("mutedText")
21824
+ },
21825
+ when("card.body"),
21826
+ bind("card.body")
21827
+ ),
21828
+ ctaRow({
21829
+ collectionPath: "ctas",
21830
+ itemName: "cta",
21831
+ gap: "sm",
21832
+ justify: "start",
21833
+ containerClassName: "rb-mt-auto"
21834
+ })
21835
+ ])
21836
+ ],
21837
+ {
21838
+ stylesFrom: "content._cardStyles",
21839
+ backgroundFrom: "content._cardStyles.background",
21840
+ baseClassName: "rb-feature-card rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-h-full rb-flex-col"
21841
+ },
21842
+ repeat("content.cards", "card")
21843
+ );
21844
+ var cardsLayout = styledSection({
21845
+ children: styledContainer({
21846
+ rootType: "stack",
21847
+ rootProps: { gap: "xl" },
21848
+ children: [
21849
+ sectionHeading,
21850
+ grid3(
21851
+ {
21852
+ cols: {
21853
+ $bind: {
21854
+ from: "content.columns",
21855
+ fallback: 3,
21856
+ coerce: "number"
21857
+ }
21858
+ },
21859
+ gap: "lg"
21860
+ },
21861
+ [featureCard]
21862
+ )
21863
+ ]
21864
+ }),
21865
+ baseClass: "",
21866
+ spacing: "medium"
20277
21867
  });
20278
- var collectionManifest = createBlockManifest({
20279
- id: "block.collection",
20280
- title: "Collection",
21868
+ var featureCardsConfig = {
21869
+ id: "block.feature-cards",
21870
+ title: "Feature Cards",
20281
21871
  category: "layout",
21872
+ includeContainerStyles: true,
21873
+ titleSource: "title",
20282
21874
  additionalFields: [
20283
- parseFieldDefinition({
20284
- id: "layout",
20285
- type: "select",
20286
- label: "Layout",
20287
- defaultValue: "grid",
20288
- options: [
20289
- { value: "grid", label: "Grid" },
20290
- { value: "stack", label: "Stack" }
20291
- ],
20292
- ui: { intent: "display" }
20293
- }),
20294
- parseFieldDefinition({
21875
+ {
21876
+ id: "title",
21877
+ type: "text",
21878
+ label: "Title",
21879
+ required: false,
21880
+ multiline: false,
21881
+ maxLength: 120
21882
+ },
21883
+ {
21884
+ id: "description",
21885
+ type: "richText",
21886
+ label: "Description",
21887
+ required: false,
21888
+ ui: {
21889
+ richTextVariant: "limited"
21890
+ }
21891
+ },
21892
+ {
20295
21893
  id: "columns",
20296
21894
  type: "select",
20297
21895
  label: "Columns",
20298
- description: "Number of columns in the grid layout.",
21896
+ required: false,
20299
21897
  defaultValue: "3",
21898
+ multiple: false,
20300
21899
  options: [
20301
21900
  { value: "2", label: "2 columns" },
20302
21901
  { value: "3", label: "3 columns" },
20303
21902
  { value: "4", label: "4 columns" }
20304
21903
  ],
20305
- ui: {
20306
- intent: "display",
20307
- visibleWhen: { field: "layout", equals: "grid" }
20308
- }
20309
- }),
20310
- parseFieldDefinition({
20311
- id: "gap",
20312
- type: "select",
20313
- label: "Gap",
20314
- defaultValue: "medium",
20315
- options: [
20316
- { value: "none", label: "None" },
20317
- { value: "compact", label: "Compact" },
20318
- { value: "cozy", label: "Cozy" },
20319
- { value: "medium", label: "Medium" },
20320
- { value: "comfortable", label: "Comfortable" },
20321
- { value: "spacious", label: "Spacious" }
20322
- ],
20323
21904
  ui: { intent: "display" }
20324
- }),
20325
- fragmentsToRepeaterField(
20326
- "items",
20327
- "Items",
20328
- collectionFragments,
20329
- {
20330
- minItems: 0,
20331
- maxItems: 50,
20332
- itemLabel: "Item",
20333
- description: "Add items to this collection."
21905
+ },
21906
+ {
21907
+ id: "cards",
21908
+ type: "repeater",
21909
+ label: "Cards",
21910
+ required: false,
21911
+ minItems: 1,
21912
+ maxItems: 8,
21913
+ itemLabel: "Card",
21914
+ itemLabelSource: "title",
21915
+ allowConversion: true,
21916
+ ui: {
21917
+ intent: "content"
21918
+ },
21919
+ schema: {
21920
+ fields: [
21921
+ {
21922
+ id: "media",
21923
+ type: "media",
21924
+ label: "Image",
21925
+ required: false,
21926
+ mediaKinds: ["image"]
21927
+ },
21928
+ createAspectRatioField({
21929
+ id: "aspectRatio",
21930
+ label: "Image aspect ratio",
21931
+ defaultValue: "4/3",
21932
+ visibleWhen: { field: "media", notEquals: null }
21933
+ }),
21934
+ {
21935
+ id: "title",
21936
+ type: "text",
21937
+ label: "Title",
21938
+ required: true,
21939
+ multiline: false,
21940
+ maxLength: 120
21941
+ },
21942
+ {
21943
+ id: "body",
21944
+ type: "richText",
21945
+ label: "Text",
21946
+ required: false,
21947
+ ui: {
21948
+ richTextVariant: "limited"
21949
+ }
21950
+ },
21951
+ createCtasRepeater({
21952
+ label: "Calls to action",
21953
+ itemLabel: "CTA",
21954
+ maxItems: 1,
21955
+ button: {
21956
+ variants: [
21957
+ { value: "primary", label: "Primary" },
21958
+ { value: "secondary", label: "Secondary" },
21959
+ { value: "outline", label: "Outline" },
21960
+ { value: "ghost", label: "Ghost" },
21961
+ { value: "link", label: "Link" }
21962
+ ],
21963
+ defaultVariant: "ghost"
21964
+ }
21965
+ })
21966
+ ]
20334
21967
  }
20335
- ),
21968
+ },
20336
21969
  cardStylesField({
20337
21970
  id: "_cardStyles",
20338
- label: "Item styles"
21971
+ label: "Card styles"
20339
21972
  })
20340
21973
  ],
20341
- layout: collectionLayout,
20342
- description: "Repeat items in a grid or stack layout.",
20343
- tags: ["collection", "grid", "stack", "repeater"],
20344
- icon: "LayoutList",
20345
- styleTokens: { spacing: "lg" }
20346
- });
20347
- var collectionBlockDefinition = {
20348
- manifest: collectionManifest
21974
+ layout: cardsLayout,
21975
+ variants: {
21976
+ cards: cardsLayout
21977
+ },
21978
+ defaultVariant: "cards",
21979
+ variantOptions: {
21980
+ cards: {
21981
+ label: "Cards",
21982
+ description: "A responsive grid of image cards with optional calls to action."
21983
+ }
21984
+ },
21985
+ description: "A card grid for offerings, services, classes, benefits, or featured links.",
21986
+ tags: ["cards", "features", "offerings", "services", "classes", "grid", "links"],
21987
+ icon: "PanelsTopLeft"
21988
+ };
21989
+ var featureCardsManifest = createBlockManifest(featureCardsConfig);
21990
+ var featureCardsBlockDefinition = {
21991
+ manifest: featureCardsManifest
20349
21992
  };
20350
21993
 
20351
21994
  // ../blocks/src/system/fields/carousel.ts
@@ -20433,69 +22076,6 @@ function createCarouselBehaviorFields(options = {}) {
20433
22076
  return fields3;
20434
22077
  }
20435
22078
 
20436
- // ../blocks/src/system/fields/imageLayout.ts
20437
- function createImageColSizeField(options = {}) {
20438
- const {
20439
- id = "imageColSize",
20440
- label = "Image column size",
20441
- description = "Controls how large the image/thumbnail column is at desktop breakpoints.",
20442
- defaultValue = "1/3",
20443
- uiIntent = "display",
20444
- visibleWhen
20445
- } = options;
20446
- return {
20447
- id,
20448
- type: "select",
20449
- label,
20450
- description,
20451
- required: false,
20452
- defaultValue,
20453
- multiple: false,
20454
- options: [
20455
- { value: "1/4", label: "Small (1/4)" },
20456
- { value: "1/3", label: "Medium (1/3)" },
20457
- { value: "2/5", label: "Large (2/5)" },
20458
- { value: "1/2", label: "Extra large (1/2)" },
20459
- { value: "2/3", label: "Huge (2/3)" }
20460
- ],
20461
- ui: {
20462
- intent: uiIntent,
20463
- ...visibleWhen ? { visibleWhen } : {}
20464
- }
20465
- };
20466
- }
20467
- function createImagePositionField(options = {}) {
20468
- const {
20469
- id = "imagePosition",
20470
- label = "Image position",
20471
- description = "Choose which side the image appears on.",
20472
- defaultValue = "left",
20473
- includeAlternate = false,
20474
- uiIntent = "display",
20475
- visibleWhen
20476
- } = options;
20477
- const positionOptions = [
20478
- { value: "left", label: "Left" },
20479
- { value: "right", label: "Right" },
20480
- ...includeAlternate ? [{ value: "alternate", label: "Alternate" }] : []
20481
- ];
20482
- return {
20483
- id,
20484
- type: "select",
20485
- label,
20486
- description,
20487
- required: false,
20488
- defaultValue,
20489
- multiple: false,
20490
- // Spread to get a mutable array type without unsafe casts.
20491
- options: [...positionOptions],
20492
- ui: {
20493
- intent: uiIntent,
20494
- ...visibleWhen ? { visibleWhen } : {}
20495
- }
20496
- };
20497
- }
20498
-
20499
22079
  // ../blocks/src/system/blocks/media-text.ts
20500
22080
  var mediaTextFrameCapability = defineFrameCapability([
20501
22081
  "plain",
@@ -20619,26 +22199,13 @@ var mediaTextManifest = createBlockManifest({
20619
22199
  },
20620
22200
  ui: { intent: "behavior" }
20621
22201
  }),
20622
- {
22202
+ createAspectRatioField({
20623
22203
  id: "aspectRatio",
20624
- type: "select",
20625
22204
  label: "Media aspect ratio",
20626
22205
  description: "Crop media to a consistent aspect ratio.",
20627
- required: false,
20628
22206
  defaultValue: "auto",
20629
- multiple: false,
20630
- options: [
20631
- { value: "auto", label: "Auto (original)" },
20632
- { value: "16/9", label: "16:9 (Landscape)" },
20633
- { value: "4/3", label: "4:3 (Standard)" },
20634
- { value: "1/1", label: "1:1 (Square)" },
20635
- { value: "3/4", label: "3:4 (Portrait)" }
20636
- ],
20637
- ui: {
20638
- intent: "display",
20639
- visibleWhen: { field: "images", notEquals: null }
20640
- }
20641
- },
22207
+ visibleWhen: { field: "images", notEquals: null }
22208
+ }),
20642
22209
  {
20643
22210
  id: "text",
20644
22211
  type: "richText",
@@ -20768,7 +22335,7 @@ var mediaTextManifest = createBlockManifest({
20768
22335
  whenImagesLength(0)
20769
22336
  );
20770
22337
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
20771
- const defaultLayout = styledSection({
22338
+ const defaultLayout2 = styledSection({
20772
22339
  children: styledContainer({
20773
22340
  rootType: "stack",
20774
22341
  rootProps: { gap: "lg" },
@@ -20800,9 +22367,9 @@ var mediaTextManifest = createBlockManifest({
20800
22367
  spacing: "medium"
20801
22368
  });
20802
22369
  return {
20803
- layout: defaultLayout,
22370
+ layout: defaultLayout2,
20804
22371
  variants: {
20805
- default: defaultLayout
22372
+ default: defaultLayout2
20806
22373
  },
20807
22374
  defaultVariant: "default",
20808
22375
  variantOptions: {
@@ -24202,7 +25769,7 @@ var embedBlockDefinition = {
24202
25769
  };
24203
25770
 
24204
25771
  // ../blocks/src/system/blocks/image-gallery.ts
24205
- var grid3 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
25772
+ var grid4 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
24206
25773
  var galleryContainer = (children, opts) => {
24207
25774
  const gap = opts?.gap ?? "md";
24208
25775
  const withExtraClass = (baseClass) => opts?.className ? `${baseClass} ${opts.className}` : baseClass;
@@ -24282,7 +25849,7 @@ var galleryItem = (options) => stack(
24282
25849
  ],
24283
25850
  repeat("content.images", "item")
24284
25851
  );
24285
- var gridLayout3 = grid3(
25852
+ var gridLayout3 = grid4(
24286
25853
  {
24287
25854
  className: "rb-grid rb-grid-cols-1 rb-gap-4 rb-sm-grid-cols-2 rb-md-grid-cols-3"
24288
25855
  },
@@ -24885,7 +26452,7 @@ var imageGalleryBlockDefinition = {
24885
26452
  };
24886
26453
 
24887
26454
  // ../blocks/src/system/blocks/video-grid.ts
24888
- var grid4 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
26455
+ var grid5 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
24889
26456
  var videoItem = (options) => stack(
24890
26457
  { gap: "xs", className: options.containerClassName },
24891
26458
  [
@@ -24935,7 +26502,7 @@ var gridColumnsClass = (columns) => {
24935
26502
  return "rb-grid rb-grid-cols-1 rb-gap-6 rb-sm-grid-cols-2 rb-md-grid-cols-3";
24936
26503
  }
24937
26504
  };
24938
- var createGridLayout = (columns) => grid4(
26505
+ var createGridLayout = (columns) => grid5(
24939
26506
  {
24940
26507
  className: gridColumnsClass(columns)
24941
26508
  },
@@ -28099,6 +29666,40 @@ var systemBlockDefinitionsRaw = [
28099
29666
  })
28100
29667
  ]
28101
29668
  })),
29669
+ withDesignCapability("block.intro", introBlockDefinition, declareBlockDesignCapability({
29670
+ sectionSurfaces: "supported",
29671
+ contentFrames: ["plain", "panel"],
29672
+ itemSurfaces: "unsupported",
29673
+ headingDecorations: ["organic-squiggle"]
29674
+ }), defineBlockDesignMetadata({
29675
+ flow: bodyFlow,
29676
+ layoutProfiles: [
29677
+ layoutProfile({
29678
+ variantKey: "centered-copy",
29679
+ family: "centered",
29680
+ weight: "featured",
29681
+ bias: "soft"
29682
+ }),
29683
+ layoutProfile({
29684
+ variantKey: "statement-copy",
29685
+ family: "split",
29686
+ weight: "featured",
29687
+ bias: "merge"
29688
+ }),
29689
+ layoutProfile({
29690
+ variantKey: "statement-media",
29691
+ family: "media-text",
29692
+ weight: "featured",
29693
+ bias: "soft"
29694
+ }),
29695
+ layoutProfile({
29696
+ variantKey: "media-copy",
29697
+ family: "media-text",
29698
+ weight: "featured",
29699
+ bias: "soft"
29700
+ })
29701
+ ]
29702
+ })),
28102
29703
  withDesignCapability("block.body-text", bodyTextBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
28103
29704
  flow: bodyFlow,
28104
29705
  layoutProfiles: [
@@ -28159,9 +29760,17 @@ var systemBlockDefinitionsRaw = [
28159
29760
  flow: conversionFlow,
28160
29761
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
28161
29762
  })),
28162
- withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(panelAndItemsCapable(), standardEyebrowTreatments), defineBlockDesignMetadata({
29763
+ withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
29764
+ sectionSurfaces: "supported",
29765
+ contentFrames: ["plain", "panel"],
29766
+ itemSurfaces: "supported",
29767
+ accordionIconSets: ["plus", "chevron", "caret", "minimal-cross"]
29768
+ }), standardEyebrowTreatments), defineBlockDesignMetadata({
28163
29769
  flow: bodyFlow,
28164
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
29770
+ layoutProfiles: [
29771
+ layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
29772
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
29773
+ ]
28165
29774
  })),
28166
29775
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
28167
29776
  flow: siteChromeFlow,
@@ -28175,7 +29784,8 @@ var systemBlockDefinitionsRaw = [
28175
29784
  sectionSurfaces: "supported",
28176
29785
  contentFrames: ["plain", "panel"],
28177
29786
  itemSurfaces: "supported",
28178
- testimonialCardTreatments: ["default", "accent-quote"]
29787
+ testimonialCardTreatments: ["default", "accent-quote"],
29788
+ headingDecorations: ["short-center-rule"]
28179
29789
  }), defineBlockDesignMetadata({
28180
29790
  flow: proofFlow,
28181
29791
  layoutProfiles: [
@@ -28201,6 +29811,22 @@ var systemBlockDefinitionsRaw = [
28201
29811
  flow: offeringsFlow,
28202
29812
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
28203
29813
  })),
29814
+ withDesignCapability("block.feature-cards", featureCardsBlockDefinition, declareBlockDesignCapability({
29815
+ sectionSurfaces: "supported",
29816
+ contentFrames: ["plain", "panel"],
29817
+ itemSurfaces: "supported",
29818
+ headingDecorations: ["short-center-rule"]
29819
+ }), defineBlockDesignMetadata({
29820
+ flow: offeringsFlow,
29821
+ layoutProfiles: [
29822
+ layoutProfile({
29823
+ variantKey: "cards",
29824
+ family: "grid",
29825
+ weight: "standard",
29826
+ bias: "soft"
29827
+ })
29828
+ ]
29829
+ })),
28204
29830
  withDesignCapability("block.media-text", mediaTextBlockDefinition, mediaPanelCapable(), defineBlockDesignMetadata({
28205
29831
  flow: mediaFlow,
28206
29832
  layoutProfiles: [
@@ -31812,8 +33438,10 @@ import { z as z66 } from "zod";
31812
33438
  var SYSTEM_BLOCK_KINDS = [
31813
33439
  // Layout blocks
31814
33440
  "block.hero",
33441
+ "block.intro",
31815
33442
  "block.columns",
31816
33443
  "block.collection",
33444
+ "block.feature-cards",
31817
33445
  "block.media-text",
31818
33446
  "block.cta-full",
31819
33447
  "block.single-button",