@riverbankcms/sdk 0.76.0 → 0.77.1

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 (151) hide show
  1. package/dist/{PreviewEditorSidebar-X2HWXFOL.mjs → PreviewEditorSidebar-DVUG7GK4.mjs} +1019 -442
  2. package/dist/{PreviewEditorUI-AQXIXPOH.mjs → PreviewEditorUI-P7RN4CDS.mjs} +2 -2
  3. package/dist/SdkPreviewModeRuntime-KLPX47SE.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +538 -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 +57 -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/blocks/site-header.d.ts +2 -2
  24. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  25. package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +30 -0
  26. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +4 -1
  27. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +7 -0
  28. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +16 -2
  29. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  30. package/dist/_dts/blocks/src/system/runtime/components/multi-step/runtimeFormValidation.d.ts +28 -0
  31. package/dist/_dts/blocks/src/system/runtime/nodes/accordion.d.ts +2 -0
  32. package/dist/_dts/blocks/src/system/runtime/nodes/accordion.server.d.ts +2 -0
  33. package/dist/_dts/blocks/src/system/runtime/nodes/accordionIconTreatment.d.ts +5 -0
  34. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +5 -4
  35. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +2 -1
  36. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +2 -0
  37. package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +48 -0
  38. package/dist/_dts/content-editor/src/hooks/invalidBlockSelectors.d.ts +4 -0
  39. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +47 -0
  40. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  41. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +20 -0
  42. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +2 -1
  43. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -1
  44. package/dist/_dts/editor-blocks/src/block-editor/customBlockRegistry.d.ts +2 -0
  45. package/dist/_dts/editor-blocks/src/block-editor/sdkBlockMerger.d.ts +9 -37
  46. package/dist/_dts/editor-blocks/src/index.d.ts +2 -2
  47. package/dist/_dts/preview-next/src/client/index.d.ts +3 -0
  48. package/dist/_dts/preview-next/src/client/layout/PreviewLayoutContext.d.ts +5 -1
  49. package/dist/_dts/preview-next/src/client/preview/PreviewDesignCoordinatorContext.d.ts +20 -0
  50. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +7 -2
  51. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +7 -2
  52. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +7 -2
  53. package/dist/_dts/preview-next/src/client/preview/PreviewThemedSiteDocument.d.ts +18 -0
  54. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +20 -3
  55. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +6 -1
  56. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +14 -4
  57. package/dist/_dts/preview-next/src/client/preview/previewDesignCoordinator.d.ts +73 -0
  58. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +12 -4
  59. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +46 -0
  60. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +6 -1
  61. package/dist/_dts/preview-next/src/client/preview/typographySelectionInput.d.ts +14 -0
  62. package/dist/_dts/preview-next/src/client/sdk/SdkPreviewModeRuntime.d.ts +1 -1
  63. package/dist/_dts/sdk/src/cli/commands/style.d.ts +8 -0
  64. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -1
  65. package/dist/_dts/sdk/src/client/types.d.ts +9 -0
  66. package/dist/_dts/sdk/src/client.d.ts +1 -1
  67. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +35 -0
  68. package/dist/_dts/sdk/src/contracts/theme.d.ts +1 -1
  69. package/dist/_dts/sdk/src/index.d.ts +2 -1
  70. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -0
  71. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -2
  72. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  73. package/dist/_dts/sdk/src/version.d.ts +1 -1
  74. package/dist/_dts/site-commands/src/commands.d.ts +15 -0
  75. package/dist/_dts/theme-core/src/buttons/personalities/earth-pill.d.ts +16 -0
  76. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  77. package/dist/_dts/theme-core/src/fonts/types.d.ts +1 -1
  78. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  79. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +72 -27
  80. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  81. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +16 -0
  82. package/dist/_dts/theme-core/src/schema.d.ts +306 -30
  83. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +81 -0
  84. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +6 -4
  85. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +81 -0
  86. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +119 -3
  87. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +4 -4
  88. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +13 -0
  89. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  90. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +402 -13
  91. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +6 -0
  92. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -0
  93. package/dist/_dts/theme-core/src/site-styles/persistedIdParseResult.d.ts +9 -0
  94. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +20 -4
  95. package/dist/_dts/theme-core/src/site-styles/types.d.ts +74 -2
  96. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +189 -0
  97. package/dist/{chunk-Q4OLG66B.mjs → chunk-2SPENC5M.mjs} +476 -153
  98. package/dist/{chunk-Z7JLNTJR.mjs → chunk-6SMUFTXD.mjs} +2 -1
  99. package/dist/{chunk-TW2Y4RR5.mjs → chunk-IENWFSLO.mjs} +365 -52
  100. package/dist/{chunk-LYI7TEMH.mjs → chunk-KWJPDZH2.mjs} +4682 -1463
  101. package/dist/{chunk-V5VORNEJ.mjs → chunk-ZYEJLCTN.mjs} +1 -1
  102. package/dist/cli/index.mjs +2314 -267
  103. package/dist/client/{accordion-2YHIBOZH.mjs → accordion-RZMQSYLR.mjs} +1 -1
  104. package/dist/client/{bookingForm-35IBDWAS.mjs → bookingForm-NF4ASVNV.mjs} +2 -2
  105. package/dist/client/bookings.mjs +92 -0
  106. package/dist/client/{carousel-K6XG7NZQ.mjs → carousel-LDX47ZIK.mjs} +1 -1
  107. package/dist/client/{cart-HCFYUTTU.mjs → cart-RGXDS5F4.mjs} +3 -3
  108. package/dist/client/{checkout-J3U4XR7K.mjs → checkout-P7WWSNNY.mjs} +3 -3
  109. package/dist/client/{chunk-BOIHIU7E.mjs → chunk-E2TDNXCL.mjs} +1 -1
  110. package/dist/client/{chunk-PFBX3IQL.mjs → chunk-GMVTOKYG.mjs} +2 -2
  111. package/dist/client/{chunk-FGUIVT2B.mjs → chunk-JNC7CGHX.mjs} +1 -1
  112. package/dist/client/{chunk-SNSWVZEP.mjs → chunk-L3DNHIJX.mjs} +3 -3
  113. package/dist/client/{chunk-7UOSCYY4.mjs → chunk-R56FQ3RR.mjs} +92 -0
  114. package/dist/client/{chunk-J227A3CQ.mjs → chunk-UFSWADAO.mjs} +1 -1
  115. package/dist/client/client.mjs +3579 -1351
  116. package/dist/client/{courseRegistration-ZBXS7VGI.mjs → courseRegistration-7F65K5ZR.mjs} +2 -2
  117. package/dist/client/{eventCalendar-EQQZHJBA.mjs → eventCalendar-GLSC5KTL.mjs} +4 -4
  118. package/dist/client/{eventCombined-JCFTGBFQ.mjs → eventCombined-ZHK4WKUR.mjs} +4 -4
  119. package/dist/client/{eventDetails-HLUTQSYY.mjs → eventDetails-E3PJYBIN.mjs} +4 -4
  120. package/dist/client/{eventListing-FG4MICVB.mjs → eventListing-EMS3WC3E.mjs} +4 -4
  121. package/dist/client/{eventRegistration-GUEB7LBT.mjs → eventRegistration-NZOTVNPI.mjs} +4 -4
  122. package/dist/client/{form-YQEW4YIT.mjs → form-ETFZFATW.mjs} +1 -1
  123. package/dist/client/{headerSection-GTR3TTRM.mjs → headerSection-4LBP7ULT.mjs} +2 -2
  124. package/dist/client/hooks.mjs +2226 -402
  125. package/dist/client/{locationMap-SPC7VGUH.mjs → locationMap-5M655YSJ.mjs} +1 -1
  126. package/dist/client/{newsletterForm-4IW5BLID.mjs → newsletterForm-QOUYW44O.mjs} +1 -1
  127. package/dist/client/{productDetail-KP5H2WJO.mjs → productDetail-O4DOCWQG.mjs} +3 -3
  128. package/dist/client/{productList-3M3M72XZ.mjs → productList-A5RO5WIS.mjs} +3 -3
  129. package/dist/client/rendering/client.mjs +198 -32
  130. package/dist/client/rendering/islands.mjs +18 -18
  131. package/dist/client/rendering.mjs +3573 -1355
  132. package/dist/client/{shop-ACQKVGOM.mjs → shop-L4MZH4I2.mjs} +3 -3
  133. package/dist/preview-next/client/runtime.mjs +4 -4
  134. package/dist/{sdk-runtime-K7HNB4U2.mjs → sdk-runtime-6UT2S7KZ.mjs} +5 -5
  135. package/dist/server/components.mjs +3497 -1333
  136. package/dist/server/config-validation.mjs +2229 -402
  137. package/dist/server/config.mjs +2229 -402
  138. package/dist/server/data.mjs +2226 -402
  139. package/dist/server/index.mjs +31 -2
  140. package/dist/server/next.mjs +3503 -1329
  141. package/dist/server/page-converter.mjs +2213 -403
  142. package/dist/server/prebuild.mjs +1 -1
  143. package/dist/server/rendering/server.mjs +3497 -1333
  144. package/dist/server/rendering.mjs +3497 -1333
  145. package/dist/server/routing.mjs +2250 -363
  146. package/dist/server/server.mjs +2243 -400
  147. package/dist/server/theme-bridge.mjs +1313 -1035
  148. package/dist/server/theme.mjs +237 -12
  149. package/dist/styles/index.css +1081 -1028
  150. package/package.json +1 -1
  151. package/dist/SdkPreviewModeRuntime-ZQNDCASH.mjs +0 -8
@@ -7460,6 +7460,47 @@ var eyebrowTreatmentValues = [
7460
7460
  "pill-bounce",
7461
7461
  "accent-pill-bounce"
7462
7462
  ];
7463
+ var visibleHeadingDecorationFamilyValues = [
7464
+ "organic-squiggle",
7465
+ "short-center-rule"
7466
+ ];
7467
+ var visibleHeadingDecorationPlacementValues = [
7468
+ "after-heading",
7469
+ "between-heading-and-body",
7470
+ "under-centered-heading"
7471
+ ];
7472
+ var headingDecorationOverrideValues = [
7473
+ "site-default",
7474
+ "on",
7475
+ "off"
7476
+ ];
7477
+ var headingDecorationColorTokenValues = [
7478
+ "text",
7479
+ "primary",
7480
+ "secondary",
7481
+ "accent",
7482
+ "border",
7483
+ "muted"
7484
+ ];
7485
+ var accordionIconSetValues = [
7486
+ "plus",
7487
+ "chevron",
7488
+ "caret",
7489
+ "minimal-cross"
7490
+ ];
7491
+ var accordionIconColorTokenValues = [
7492
+ "text",
7493
+ "muted",
7494
+ "primary",
7495
+ "secondary",
7496
+ "accent",
7497
+ "current"
7498
+ ];
7499
+ var accordionIconMotionValues = [
7500
+ "none",
7501
+ "rotate",
7502
+ "swap"
7503
+ ];
7463
7504
  function defineBlockDesignCapability(capability) {
7464
7505
  return {
7465
7506
  ...capability,
@@ -7469,7 +7510,9 @@ function defineBlockDesignCapability(capability) {
7469
7510
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
7470
7511
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
7471
7512
  tileTreatments: capability.tileTreatments ?? ["default"],
7472
- eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
7513
+ eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7514
+ ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
7515
+ ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
7473
7516
  };
7474
7517
  }
7475
7518
 
@@ -7660,6 +7703,25 @@ var blockAppearancePresets = [
7660
7703
  emphasis: "high"
7661
7704
  }
7662
7705
  }),
7706
+ defineBlockAppearancePreset({
7707
+ kind: "block-design",
7708
+ id: "intro-soft-earth-statement",
7709
+ target: "intro",
7710
+ label: "Soft Earth intro statement",
7711
+ blockKinds: ["block.intro"],
7712
+ design: {
7713
+ sectionSurface: "base",
7714
+ contentFrame: plainFrame,
7715
+ itemSurface: "none",
7716
+ transitionAfter: "soft-fade-short",
7717
+ emphasis: "high",
7718
+ headingDecoration: {
7719
+ family: "organic-squiggle",
7720
+ placement: "after-heading",
7721
+ colorToken: "primary"
7722
+ }
7723
+ }
7724
+ }),
7663
7725
  defineBlockAppearancePreset({
7664
7726
  kind: "block-design",
7665
7727
  id: "offerings-calm-list",
@@ -7674,6 +7736,25 @@ var blockAppearancePresets = [
7674
7736
  emphasis: "medium"
7675
7737
  }
7676
7738
  }),
7739
+ defineBlockAppearancePreset({
7740
+ kind: "block-design",
7741
+ id: "feature-cards-soft-earth-offerings",
7742
+ target: "feature-cards",
7743
+ label: "Soft Earth offering cards",
7744
+ blockKinds: ["block.feature-cards"],
7745
+ design: {
7746
+ sectionSurface: "base",
7747
+ contentFrame: plainFrame,
7748
+ itemSurface: "raised",
7749
+ transitionAfter: "none",
7750
+ emphasis: "high",
7751
+ headingDecoration: {
7752
+ family: "short-center-rule",
7753
+ placement: "under-centered-heading",
7754
+ colorToken: "primary"
7755
+ }
7756
+ }
7757
+ }),
7677
7758
  defineBlockAppearancePreset({
7678
7759
  kind: "block-design",
7679
7760
  id: "events-base-calendar",
@@ -7802,6 +7883,26 @@ var blockAppearancePresets = [
7802
7883
  testimonialCardTreatment: "accent-quote"
7803
7884
  }
7804
7885
  }),
7886
+ defineBlockAppearancePreset({
7887
+ kind: "block-design",
7888
+ id: "testimonials-soft-earth-proof-band",
7889
+ target: "testimonials",
7890
+ label: "Soft Earth proof band",
7891
+ blockKinds: ["block.testimonials"],
7892
+ design: {
7893
+ sectionSurface: "brand-depth-band",
7894
+ contentFrame: plainFrame,
7895
+ itemSurface: "none",
7896
+ transitionAfter: "soft-fade-short",
7897
+ emphasis: "high",
7898
+ testimonialCardTreatment: "accent-quote",
7899
+ headingDecoration: {
7900
+ family: "short-center-rule",
7901
+ placement: "under-centered-heading",
7902
+ colorToken: "border"
7903
+ }
7904
+ }
7905
+ }),
7805
7906
  defineBlockAppearancePreset({
7806
7907
  kind: "block-design",
7807
7908
  id: "faq-base-accordion",
@@ -7830,6 +7931,25 @@ var blockAppearancePresets = [
7830
7931
  emphasis: "low"
7831
7932
  }
7832
7933
  }),
7934
+ defineBlockAppearancePreset({
7935
+ kind: "block-design",
7936
+ id: "faq-soft-earth-two-column",
7937
+ target: "faq",
7938
+ label: "Soft Earth two-column FAQ",
7939
+ blockKinds: ["block.faq"],
7940
+ design: {
7941
+ sectionSurface: "base",
7942
+ contentFrame: plainFrame,
7943
+ itemSurface: "flat",
7944
+ transitionAfter: "none",
7945
+ emphasis: "medium",
7946
+ accordionIconTreatment: {
7947
+ iconSet: "plus",
7948
+ colorToken: "primary",
7949
+ motion: "swap"
7950
+ }
7951
+ }
7952
+ }),
7833
7953
  defineBlockAppearancePreset({
7834
7954
  kind: "block-design",
7835
7955
  id: "contact-form-panel",
@@ -8515,6 +8635,97 @@ var confidentChip = defineButtonPersonality({
8515
8635
  }
8516
8636
  });
8517
8637
 
8638
+ // ../theme-core/src/buttons/personalities/earth-pill.ts
8639
+ var earthPill = defineButtonPersonality({
8640
+ id: "earth-pill",
8641
+ name: "Earth Pill",
8642
+ description: "Compact terracotta pills with quiet primary-coloured ghost CTAs.",
8643
+ tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
8644
+ buttonSystem: {
8645
+ global: {
8646
+ cornerStyle: "pill",
8647
+ shadow: "low",
8648
+ textTransform: "none",
8649
+ fontWeight: 500,
8650
+ borderWidth: 1,
8651
+ hoverTransform: "lift",
8652
+ hoverColor: "none",
8653
+ typography: "body",
8654
+ paddingPreset: "default"
8655
+ },
8656
+ sizes: {
8657
+ sm: { padding: "0.5rem 1rem", fontSize: "text-sm" },
8658
+ md: { padding: "0.625rem 1.35rem" },
8659
+ lg: { padding: "0.75rem 1.65rem", fontSize: "text-lg" },
8660
+ xl: { padding: "0.875rem 2rem", fontSize: "text-xl" }
8661
+ },
8662
+ variants: [
8663
+ {
8664
+ id: "primary",
8665
+ name: "Primary",
8666
+ enabled: true,
8667
+ priority: 1,
8668
+ background: { type: "solid", colorToken: "primary" },
8669
+ textColorToken: "primaryForeground",
8670
+ borderRadius: "rounded-full",
8671
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
8672
+ effects: {
8673
+ hover: [
8674
+ { effectId: "lift", options: { translateY: "-1px" } },
8675
+ { effectId: "background-on-hover", options: { colorToken: "accent" } }
8676
+ ],
8677
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8678
+ }
8679
+ },
8680
+ {
8681
+ id: "secondary",
8682
+ name: "Secondary",
8683
+ enabled: true,
8684
+ priority: 2,
8685
+ background: { type: "transparent" },
8686
+ textColorToken: "primary",
8687
+ borderRadius: "rounded-full",
8688
+ border: { widthClass: "border", colorToken: "primary" },
8689
+ effects: {
8690
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
8691
+ }
8692
+ },
8693
+ {
8694
+ id: "outline",
8695
+ name: "Outline",
8696
+ enabled: true,
8697
+ priority: 3,
8698
+ background: { type: "transparent" },
8699
+ textColorToken: "text",
8700
+ borderRadius: "rounded-full",
8701
+ border: { widthClass: "border", colorToken: "border" },
8702
+ effects: {
8703
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surfaceAlt" } }]
8704
+ }
8705
+ },
8706
+ {
8707
+ id: "ghost",
8708
+ name: "Ghost",
8709
+ enabled: true,
8710
+ priority: 3,
8711
+ background: { type: "transparent" },
8712
+ textColorToken: "primary",
8713
+ borderRadius: "rounded-full",
8714
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8715
+ sizes: {
8716
+ sm: { padding: "0.25rem 0", fontSize: "text-sm" },
8717
+ md: { padding: "0.375rem 0" },
8718
+ lg: { padding: "0.5rem 0", fontSize: "text-lg" },
8719
+ xl: { padding: "0.625rem 0", fontSize: "text-xl" }
8720
+ },
8721
+ effects: {
8722
+ hover: [{ effectId: "opacity-reduce", options: { reduction: 25 } }]
8723
+ }
8724
+ }
8725
+ ]
8726
+ }
8727
+ });
8728
+
8518
8729
  // ../theme-core/src/buttons/personalities/editorial-link.ts
8519
8730
  var editorialLink = defineButtonPersonality({
8520
8731
  id: "editorial-link",
@@ -8973,6 +9184,7 @@ var softPill = defineButtonPersonality({
8973
9184
  // ../theme-core/src/buttons/personalities/index.ts
8974
9185
  var buttonPersonalities = [
8975
9186
  softPill,
9187
+ earthPill,
8976
9188
  confidentChip,
8977
9189
  editorialLink,
8978
9190
  pebble,
@@ -9614,8 +9826,19 @@ var headingTypographyStyleSchema = typographyStyleSchema.extend({
9614
9826
  colorToken: themeColorTokenSchema.nullable().optional()
9615
9827
  });
9616
9828
  var proseLinkUnderlineStyleSchema = z21.enum(["solid", "dotted", "dashed"]);
9617
- var proseLinkUnderlineThicknessSchema = z21.enum(["auto", "fromFont", "thin", "medium", "thick"]);
9618
- var proseLinkUnderlineOffsetSchema = z21.enum(["auto", "tight", "normal", "loose"]);
9829
+ var proseLinkUnderlineThicknessSchema = z21.enum([
9830
+ "auto",
9831
+ "fromFont",
9832
+ "thin",
9833
+ "medium",
9834
+ "thick"
9835
+ ]);
9836
+ var proseLinkUnderlineOffsetSchema = z21.enum([
9837
+ "auto",
9838
+ "tight",
9839
+ "normal",
9840
+ "loose"
9841
+ ]);
9619
9842
  var proseLinkStyleSchema = z21.object({
9620
9843
  colorToken: themeColorTokenSchema.optional(),
9621
9844
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -9626,7 +9849,14 @@ var proseLinkStyleSchema = z21.object({
9626
9849
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
9627
9850
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
9628
9851
  });
9629
- var semanticSpacingSchema = z21.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
9852
+ var semanticSpacingSchema = z21.enum([
9853
+ "none",
9854
+ "compact",
9855
+ "cozy",
9856
+ "medium",
9857
+ "comfortable",
9858
+ "spacious"
9859
+ ]);
9630
9860
  var boxRoundedSchema = z21.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
9631
9861
  var boxBackgroundOverlaySchema = z21.object({
9632
9862
  type: z21.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -9648,12 +9878,36 @@ var boxBackgroundSchema = z21.object({
9648
9878
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
9649
9879
  headingColor: tokenOrCssColorValueSchema.nullable().optional()
9650
9880
  });
9881
+ var noHeadingDecorationSchema = z21.object({
9882
+ family: z21.literal("none"),
9883
+ placement: z21.literal("none")
9884
+ });
9885
+ var visibleHeadingDecorationSchema = z21.object({
9886
+ family: z21.enum(visibleHeadingDecorationFamilyValues),
9887
+ placement: z21.enum(visibleHeadingDecorationPlacementValues),
9888
+ colorToken: z21.enum(headingDecorationColorTokenValues).optional()
9889
+ });
9890
+ var headingDecorationSchema = z21.union([
9891
+ noHeadingDecorationSchema,
9892
+ visibleHeadingDecorationSchema
9893
+ ]);
9894
+ var accordionIconTreatmentSchema = z21.object({
9895
+ iconSet: z21.enum(accordionIconSetValues),
9896
+ colorToken: z21.enum(accordionIconColorTokenValues),
9897
+ openColorToken: z21.enum(accordionIconColorTokenValues).optional(),
9898
+ motion: z21.enum(accordionIconMotionValues)
9899
+ });
9651
9900
  var sectionStylesOverrideSchema = z21.object({
9652
9901
  background: boxBackgroundSchema.nullable().optional(),
9653
9902
  spacing: semanticSpacingSchema.nullable().optional(),
9654
9903
  minHeight: z21.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
9655
9904
  tileTreatment: z21.enum(tileTreatmentValues).nullable().optional(),
9656
- eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional()
9905
+ eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional(),
9906
+ headingDecoration: headingDecorationSchema.nullable().optional(),
9907
+ // Author-level override consumed by later block/editor rendering phases.
9908
+ // Keeping it in section styles lets existing block save APIs persist it.
9909
+ headingDecorationOverride: z21.enum(headingDecorationOverrideValues).nullable().optional(),
9910
+ accordionIconTreatment: accordionIconTreatmentSchema.nullable().optional()
9657
9911
  });
9658
9912
  var containerStylesOverrideSchema = z21.object({
9659
9913
  background: boxBackgroundSchema.nullable().optional(),
@@ -9746,9 +10000,17 @@ var inputStyle = z21.object({
9746
10000
  focus: z21.enum(["glow", "ring", "underline"]),
9747
10001
  label: z21.enum(["inside", "above"])
9748
10002
  });
9749
- var headerVariant = z21.enum(["classic", "centered", "transparent", "floating", "editorial"]);
10003
+ var headerVariant = z21.enum(["classic", "centered", "transparent", "floating"]);
9750
10004
  var headerPositioning = z21.enum(["static", "sticky", "fixed"]);
9751
- var headerNavStyle = z21.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
10005
+ var headerNavStyle = z21.enum([
10006
+ "minimal",
10007
+ "underline",
10008
+ "underline-grow",
10009
+ "capsule",
10010
+ "scale",
10011
+ "frosted",
10012
+ "solid"
10013
+ ]);
9752
10014
  var navFontWeight = z21.enum(["regular", "medium", "semibold", "bold"]);
9753
10015
  var headerMaxWidth = z21.enum(["container", "full"]);
9754
10016
  var headerContainerSchema = z21.object({
@@ -9796,8 +10058,22 @@ var dropdownStyleSchema = z21.object({
9796
10058
  textSize: z21.enum(["xs", "sm", "base", "lg"]).optional()
9797
10059
  // optional = no override (browser default)
9798
10060
  }).optional();
9799
- var headerCtaGapSchema = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
9800
- var headerCtaTreatmentSchema = z21.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
10061
+ var headerCtaGapSchema = z21.enum([
10062
+ "none",
10063
+ "tight",
10064
+ "compact",
10065
+ "default",
10066
+ "relaxed",
10067
+ "spacious"
10068
+ ]);
10069
+ var headerCtaTreatmentSchema = z21.enum([
10070
+ "default",
10071
+ "primary",
10072
+ "secondary",
10073
+ "inverted",
10074
+ "outline",
10075
+ "ghost"
10076
+ ]);
9801
10077
  var navContainerSchema = z21.object({
9802
10078
  type: z21.enum(["none", "pill", "glass"]).default("none"),
9803
10079
  tint: z21.string().nullable().optional(),
@@ -9852,7 +10128,14 @@ var footerMaxWidth = z21.enum(["container", "full"]);
9852
10128
  var footerMode = z21.enum(["default", "blocks", "default+blocks", "none"]);
9853
10129
  var footerNavLayoutMode = z21.enum(["stack", "inline", "inline-wrap"]);
9854
10130
  var footerNavLayoutAlign = z21.enum(["start", "center", "end", "space-between"]);
9855
- var footerSpacing = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10131
+ var footerSpacing = z21.enum([
10132
+ "none",
10133
+ "tight",
10134
+ "compact",
10135
+ "default",
10136
+ "relaxed",
10137
+ "spacious"
10138
+ ]);
9856
10139
  var footerLogoPlacement = z21.enum(["left", "right", "above", "below"]);
9857
10140
  var footerLogoSize = z21.enum(["sm", "md", "lg", "xl"]);
9858
10141
  var footerLogoMaxHeight = z21.enum(["sm", "md", "lg", "xl"]);
@@ -9917,7 +10200,12 @@ var footerSchema = z21.object({
9917
10200
  logo: footerLogoSchema.optional(),
9918
10201
  bottomBar: footerBottomBarSchema.optional()
9919
10202
  });
9920
- var containerPaddingPresetSchema = z21.enum(["tight", "compact", "default", "relaxed"]);
10203
+ var containerPaddingPresetSchema = z21.enum([
10204
+ "tight",
10205
+ "compact",
10206
+ "default",
10207
+ "relaxed"
10208
+ ]);
9921
10209
  var layoutSchema = z21.object({
9922
10210
  containerPadding: z21.object({
9923
10211
  mobile: containerPaddingPresetSchema.optional(),
@@ -9925,8 +10213,24 @@ var layoutSchema = z21.object({
9925
10213
  desktop: containerPaddingPresetSchema.optional()
9926
10214
  }).optional()
9927
10215
  }).optional();
9928
- var heroTypographySizeSchema = z21.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
9929
- var heroTypographyLineHeightSchema = z21.enum(["tight", "snug", "normal", "relaxed"]);
10216
+ var heroTypographySizeSchema = z21.enum([
10217
+ "sm",
10218
+ "base",
10219
+ "lg",
10220
+ "xl",
10221
+ "2xl",
10222
+ "3xl",
10223
+ "4xl",
10224
+ "5xl",
10225
+ "6xl",
10226
+ "editorial"
10227
+ ]);
10228
+ var heroTypographyLineHeightSchema = z21.enum([
10229
+ "tight",
10230
+ "snug",
10231
+ "normal",
10232
+ "relaxed"
10233
+ ]);
9930
10234
  var heroResponsiveTypographySchema = z21.object({
9931
10235
  headlineSize: heroTypographySizeSchema.optional(),
9932
10236
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -10361,6 +10665,28 @@ var warmNeutralCream = definePaletteVariant({
10361
10665
  { name: "border", hex: "#e0d2b8" }
10362
10666
  ]
10363
10667
  });
10668
+ var warmNeutralSoftEarth = definePaletteVariant({
10669
+ id: "warm-neutral-soft-earth",
10670
+ name: "Warm Neutral \u2014 Soft Earth",
10671
+ description: "Cream ground with terracotta primary, clay accents, and olive depth.",
10672
+ tags: { tone: "classic", energy: "calm", era: "organic" },
10673
+ mode: "light",
10674
+ colors: [
10675
+ { name: "primary", hex: "#a8573d" },
10676
+ { name: "secondary", hex: "#72765c" },
10677
+ { name: "accent", hex: "#c87557" },
10678
+ { name: "success", hex: "#687854" },
10679
+ { name: "warning", hex: "#b7863e" },
10680
+ { name: "destructive", hex: "#a54b3c" },
10681
+ { name: "background", hex: "#fbf6eb" },
10682
+ { name: "surface", hex: "#fffdf7" },
10683
+ { name: "surfaceAlt", hex: "#f0e4d3" },
10684
+ { name: "muted", hex: "#eadbc6" },
10685
+ { name: "text", hex: "#30281f" },
10686
+ { name: "primaryForeground", hex: "#fffaf3" },
10687
+ { name: "border", hex: "#d9c8b2" }
10688
+ ]
10689
+ });
10364
10690
  var warmNeutralForest = definePaletteVariant({
10365
10691
  id: "warm-neutral-forest",
10366
10692
  name: "Warm Neutral \u2014 Forest",
@@ -10394,6 +10720,7 @@ var paletteVariants = [
10394
10720
  // Warm-neutral family
10395
10721
  warmNeutralClay,
10396
10722
  warmNeutralCream,
10723
+ warmNeutralSoftEarth,
10397
10724
  warmNeutralForest,
10398
10725
  // High-contrast family
10399
10726
  highContrastInk,
@@ -10412,6 +10739,12 @@ var paletteVariantsById = new Map(
10412
10739
  function asHeaderLookId(value) {
10413
10740
  return value;
10414
10741
  }
10742
+ function asHeaderLayoutId(value) {
10743
+ return value;
10744
+ }
10745
+ function asHeaderStyleId(value) {
10746
+ return value;
10747
+ }
10415
10748
  function baseHeader(theme) {
10416
10749
  const {
10417
10750
  navLinkStyle: _navLinkStyle,
@@ -10430,67 +10763,427 @@ function baseHeader(theme) {
10430
10763
  navContainer: { type: "none", tint: null, opacity: 0.15 }
10431
10764
  };
10432
10765
  }
10433
- function solidBrandHeader(theme) {
10434
- const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
10435
- return {
10436
- ...baseHeader(theme),
10766
+ var headerLayoutCatalog = [
10767
+ {
10768
+ id: asHeaderLayoutId("classic"),
10769
+ label: "Classic",
10770
+ description: "Logo and navigation in one practical horizontal row.",
10771
+ structure: "inline-classic",
10437
10772
  variant: "classic",
10438
- positioning: "sticky",
10773
+ defaultPositioning: "sticky",
10774
+ shrinkOnScroll: false
10775
+ },
10776
+ {
10777
+ id: asHeaderLayoutId("centered"),
10778
+ label: "Centered",
10779
+ description: "Logo centered above a balanced navigation row.",
10780
+ structure: "centered-stack",
10781
+ variant: "centered",
10782
+ defaultPositioning: "static",
10783
+ shrinkOnScroll: false,
10784
+ maxRecommendedNavItems: 5,
10785
+ allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
10786
+ },
10787
+ {
10788
+ id: asHeaderLayoutId("floating"),
10789
+ label: "Floating",
10790
+ description: "Detached header chrome that sits over the opening section.",
10791
+ structure: "floating-shell",
10792
+ variant: "floating",
10793
+ defaultPositioning: "fixed",
10439
10794
  shrinkOnScroll: true,
10440
- background: {
10441
- type: "color",
10442
- color: "primary"
10443
- },
10444
- textColor: "primaryForeground",
10445
- navColor: "primaryForeground",
10446
- navStyle: "underline-grow",
10447
- navWeight: "bold",
10448
- navLinkStyle: {
10449
- typography: "body",
10450
- fontWeight: "bold",
10451
- textTransform: "uppercase",
10452
- italic: false,
10453
- colorToken: "primaryForeground",
10454
- hoverColorToken: "secondary",
10455
- textSize: "sm",
10456
- letterSpacing: "wider",
10457
- padding: "compact",
10458
- paddingX: "compact",
10459
- borderRadius: "none",
10460
- effects: {
10461
- hover: [
10462
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
10463
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
10464
- ]
10465
- }
10466
- },
10467
- dropdownStyle: {
10468
- background: "primary-700",
10469
- textColor: "primaryForeground",
10470
- borderColor: null,
10471
- shadow: "md",
10472
- borderRadius: "md",
10473
- hoverBackground: "primary-900",
10474
- hoverTextColor: "secondary",
10475
- textTransform: "uppercase",
10476
- letterSpacing: "wider",
10477
- fontWeight: "bold",
10478
- textSize: "sm"
10479
- },
10480
- border: {
10481
- style: "solid",
10482
- width: "none",
10483
- position: "none"
10484
- },
10485
- logoText: {
10486
- hideOnShrink: true,
10487
- mobileMaxWidth: "sm",
10488
- mobileWrapLines: 2
10489
- },
10490
- ctaGap: "compact",
10491
- ctaTreatment: "inverted",
10492
- ...ctaVariant ? { ctaVariant } : {}
10493
- };
10795
+ maxRecommendedNavItems: 5,
10796
+ allowedLogoShapes: ["none", "text-only", "horizontal"]
10797
+ }
10798
+ ];
10799
+ function supportedLayouts(ids) {
10800
+ return ids.map(asHeaderLayoutId);
10801
+ }
10802
+ var headerStyleCatalog = [
10803
+ {
10804
+ id: asHeaderStyleId("minimal"),
10805
+ label: "Minimal",
10806
+ description: "Quiet surface with simple color-change navigation.",
10807
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10808
+ navInteraction: "color-change",
10809
+ surface: "neutral",
10810
+ navTypography: "plain"
10811
+ },
10812
+ {
10813
+ id: asHeaderStyleId("fine-line"),
10814
+ label: "Fine Line",
10815
+ description: "Light surface with a crisp lower rule and underline hover.",
10816
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10817
+ navInteraction: "underline-grow",
10818
+ surface: "bordered",
10819
+ navTypography: "plain"
10820
+ },
10821
+ {
10822
+ id: asHeaderStyleId("soft-bar"),
10823
+ label: "Soft Bar",
10824
+ description: "Soft tinted surface with gentle pill hover states.",
10825
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10826
+ navInteraction: "pill-background",
10827
+ surface: "soft",
10828
+ navTypography: "plain"
10829
+ },
10830
+ {
10831
+ id: asHeaderStyleId("pill-nav"),
10832
+ label: "Pill Nav",
10833
+ description: "A calm pill navigation rail over a neutral header.",
10834
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10835
+ navInteraction: "pill-background",
10836
+ surface: "soft",
10837
+ navTypography: "plain"
10838
+ },
10839
+ {
10840
+ id: asHeaderStyleId("brand-bar"),
10841
+ label: "Brand Bar",
10842
+ description: "Solid brand surface with high-contrast navigation.",
10843
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10844
+ navInteraction: "color-change",
10845
+ surface: "brand-solid",
10846
+ navTypography: "brand-caps"
10847
+ },
10848
+ {
10849
+ id: asHeaderStyleId("brand-underline"),
10850
+ label: "Brand Underline",
10851
+ description: "Brand surface with underline-grow navigation.",
10852
+ supportedLayoutIds: supportedLayouts(["classic"]),
10853
+ navInteraction: "underline-grow",
10854
+ surface: "brand-solid",
10855
+ navTypography: "brand-caps"
10856
+ },
10857
+ {
10858
+ id: asHeaderStyleId("brand-pill"),
10859
+ label: "Brand Pill",
10860
+ description: "Solid brand surface with rounded active and hover states.",
10861
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
10862
+ navInteraction: "pill-background",
10863
+ surface: "brand-solid",
10864
+ navTypography: "brand-caps"
10865
+ },
10866
+ {
10867
+ id: asHeaderStyleId("serif-line"),
10868
+ label: "Serif Line",
10869
+ description: "Typographic logo treatment with understated underline navigation.",
10870
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10871
+ navInteraction: "underline-grow",
10872
+ surface: "bordered",
10873
+ navTypography: "heading"
10874
+ },
10875
+ {
10876
+ id: asHeaderStyleId("flat-tabs"),
10877
+ label: "Flat Tabs",
10878
+ description: "Flat block hover and active states with a Swiss utility feel.",
10879
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10880
+ navInteraction: "flat-block",
10881
+ surface: "bordered",
10882
+ navTypography: "quiet-caps"
10883
+ },
10884
+ {
10885
+ id: asHeaderStyleId("glass"),
10886
+ label: "Glass",
10887
+ description: "Translucent chrome with frosted navigation backing.",
10888
+ supportedLayoutIds: supportedLayouts(["classic", "floating"]),
10889
+ navInteraction: "glass-backed",
10890
+ surface: "floating",
10891
+ navTypography: "plain"
10892
+ },
10893
+ {
10894
+ id: asHeaderStyleId("minimal-surface"),
10895
+ label: "Clear Split",
10896
+ description: "Floating logo with transparent navigation and no shared shell.",
10897
+ supportedLayoutIds: supportedLayouts(["floating"]),
10898
+ navInteraction: "color-change",
10899
+ surface: "floating",
10900
+ navTypography: "plain"
10901
+ },
10902
+ {
10903
+ id: asHeaderStyleId("soft-shell"),
10904
+ label: "Soft Shell",
10905
+ description: "Floating rounded shell with soft pill navigation states.",
10906
+ supportedLayoutIds: supportedLayouts(["floating"]),
10907
+ navInteraction: "pill-background",
10908
+ surface: "floating",
10909
+ navTypography: "plain"
10910
+ },
10911
+ {
10912
+ id: asHeaderStyleId("split-glass"),
10913
+ label: "Split Glass",
10914
+ description: "Logo floats independently while the navigation sits in a glass rail.",
10915
+ supportedLayoutIds: supportedLayouts(["floating"]),
10916
+ navInteraction: "glass-backed",
10917
+ surface: "floating",
10918
+ navTypography: "quiet-caps"
10919
+ },
10920
+ {
10921
+ id: asHeaderStyleId("split-pill"),
10922
+ label: "Split Pill",
10923
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
10924
+ supportedLayoutIds: supportedLayouts(["floating"]),
10925
+ navInteraction: "pill-background",
10926
+ surface: "floating",
10927
+ navTypography: "heading"
10928
+ }
10929
+ ];
10930
+ var headerLayoutsById = new Map(
10931
+ headerLayoutCatalog.map((layout) => [layout.id, layout])
10932
+ );
10933
+ var headerStylesById = new Map(
10934
+ headerStyleCatalog.map((style) => [style.id, style])
10935
+ );
10936
+ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10937
+ [
10938
+ asHeaderLayoutId("classic"),
10939
+ headerStyleRepairChain([
10940
+ "minimal",
10941
+ "glass",
10942
+ "fine-line",
10943
+ "soft-bar",
10944
+ "pill-nav",
10945
+ "brand-bar",
10946
+ "brand-underline",
10947
+ "brand-pill",
10948
+ "serif-line",
10949
+ "flat-tabs"
10950
+ ])
10951
+ ],
10952
+ [
10953
+ asHeaderLayoutId("centered"),
10954
+ headerStyleRepairChain([
10955
+ "minimal",
10956
+ "fine-line",
10957
+ "soft-bar",
10958
+ "pill-nav",
10959
+ "brand-bar",
10960
+ "brand-pill",
10961
+ "serif-line",
10962
+ "flat-tabs"
10963
+ ])
10964
+ ],
10965
+ [
10966
+ asHeaderLayoutId("floating"),
10967
+ headerStyleRepairChain([
10968
+ "glass",
10969
+ "minimal-surface",
10970
+ "split-glass",
10971
+ "split-pill",
10972
+ "soft-shell",
10973
+ "brand-pill"
10974
+ ])
10975
+ ]
10976
+ ]);
10977
+ function headerStyleRepairChain(values) {
10978
+ return values.map(asHeaderStyleId);
10979
+ }
10980
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
10981
+ [
10982
+ [
10983
+ asHeaderStyleId("brand-bar"),
10984
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
10985
+ ],
10986
+ [
10987
+ asHeaderStyleId("brand-underline"),
10988
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
10989
+ ],
10990
+ [
10991
+ asHeaderStyleId("brand-pill"),
10992
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
10993
+ ],
10994
+ [
10995
+ asHeaderStyleId("pill-nav"),
10996
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
10997
+ ],
10998
+ [
10999
+ asHeaderStyleId("flat-tabs"),
11000
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
11001
+ ],
11002
+ [
11003
+ asHeaderStyleId("serif-line"),
11004
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
11005
+ ],
11006
+ [
11007
+ asHeaderStyleId("glass"),
11008
+ headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
11009
+ ],
11010
+ [
11011
+ asHeaderStyleId("soft-shell"),
11012
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
11013
+ ],
11014
+ [
11015
+ asHeaderStyleId("minimal-surface"),
11016
+ headerStyleRepairChain(["minimal-surface", "minimal"])
11017
+ ],
11018
+ [
11019
+ asHeaderStyleId("split-glass"),
11020
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
11021
+ ],
11022
+ [
11023
+ asHeaderStyleId("split-pill"),
11024
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
11025
+ ],
11026
+ [
11027
+ asHeaderStyleId("fine-line"),
11028
+ headerStyleRepairChain(["fine-line", "minimal"])
11029
+ ],
11030
+ [
11031
+ asHeaderStyleId("soft-bar"),
11032
+ headerStyleRepairChain(["soft-bar", "minimal"])
11033
+ ],
11034
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
11035
+ ]
11036
+ );
11037
+ var legacyHeaderLookAliases = [
11038
+ {
11039
+ lookId: asHeaderLookId("clean-base"),
11040
+ selection: {
11041
+ layoutId: asHeaderLayoutId("classic"),
11042
+ styleId: asHeaderStyleId("minimal")
11043
+ }
11044
+ },
11045
+ {
11046
+ lookId: asHeaderLookId("brand-solid"),
11047
+ selection: {
11048
+ layoutId: asHeaderLayoutId("classic"),
11049
+ styleId: asHeaderStyleId("brand-bar")
11050
+ }
11051
+ },
11052
+ {
11053
+ lookId: asHeaderLookId("serif-line"),
11054
+ selection: {
11055
+ layoutId: asHeaderLayoutId("centered"),
11056
+ styleId: asHeaderStyleId("serif-line")
11057
+ }
11058
+ },
11059
+ {
11060
+ lookId: asHeaderLookId("centered-calm"),
11061
+ selection: {
11062
+ layoutId: asHeaderLayoutId("centered"),
11063
+ styleId: asHeaderStyleId("minimal")
11064
+ }
11065
+ },
11066
+ {
11067
+ lookId: asHeaderLookId("practical-utility"),
11068
+ selection: {
11069
+ layoutId: asHeaderLayoutId("classic"),
11070
+ styleId: asHeaderStyleId("flat-tabs")
11071
+ }
11072
+ },
11073
+ {
11074
+ lookId: asHeaderLookId("minimal-transparent"),
11075
+ selection: {
11076
+ layoutId: asHeaderLayoutId("classic"),
11077
+ styleId: asHeaderStyleId("minimal")
11078
+ }
11079
+ },
11080
+ {
11081
+ lookId: asHeaderLookId("transparent-overlay"),
11082
+ selection: {
11083
+ layoutId: asHeaderLayoutId("floating"),
11084
+ styleId: asHeaderStyleId("glass")
11085
+ }
11086
+ },
11087
+ {
11088
+ lookId: asHeaderLookId("floating-glass"),
11089
+ selection: {
11090
+ layoutId: asHeaderLayoutId("floating"),
11091
+ styleId: asHeaderStyleId("glass")
11092
+ }
11093
+ }
11094
+ ];
11095
+ var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
11096
+ function getHeaderStyle(id) {
11097
+ return headerStylesById.get(id) ?? null;
11098
+ }
11099
+ function isHeaderStyleCompatibleWithLayout(style, layoutId) {
11100
+ return style.supportedLayoutIds.includes(layoutId);
11101
+ }
11102
+ function getHeaderStyleOrThrow(id) {
11103
+ const style = getHeaderStyle(id);
11104
+ if (!style) {
11105
+ throw new Error(`Unknown Theme V2 header style: ${id}`);
11106
+ }
11107
+ return style;
11108
+ }
11109
+ function resolveLegacyHeaderLookAlias(lookId) {
11110
+ return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
11111
+ }
11112
+ function getCompatibleHeaderStyleIds(layoutId) {
11113
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
11114
+ (styleId) => {
11115
+ const style = getHeaderStyleOrThrow(styleId);
11116
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
11117
+ }
11118
+ );
11119
+ }
11120
+ function solidBrandHeader(theme) {
11121
+ const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
11122
+ return {
11123
+ ...baseHeader(theme),
11124
+ variant: "classic",
11125
+ positioning: "sticky",
11126
+ shrinkOnScroll: true,
11127
+ background: {
11128
+ type: "color",
11129
+ color: "primary"
11130
+ },
11131
+ textColor: "primaryForeground",
11132
+ navColor: "primaryForeground",
11133
+ navStyle: "underline-grow",
11134
+ navWeight: "bold",
11135
+ navLinkStyle: {
11136
+ typography: "body",
11137
+ fontWeight: "bold",
11138
+ textTransform: "uppercase",
11139
+ italic: false,
11140
+ colorToken: "primaryForeground",
11141
+ hoverColorToken: "secondary",
11142
+ textSize: "sm",
11143
+ letterSpacing: "wider",
11144
+ padding: "compact",
11145
+ paddingX: "compact",
11146
+ borderRadius: "none",
11147
+ effects: {
11148
+ hover: [
11149
+ {
11150
+ effectId: "text-color-change",
11151
+ options: { hoverColorToken: "secondary" }
11152
+ },
11153
+ {
11154
+ effectId: "nav-underline",
11155
+ options: { style: "grow", colorToken: "secondary" }
11156
+ }
11157
+ ]
11158
+ }
11159
+ },
11160
+ dropdownStyle: {
11161
+ background: "primary-700",
11162
+ textColor: "primaryForeground",
11163
+ borderColor: null,
11164
+ shadow: "md",
11165
+ borderRadius: "md",
11166
+ hoverBackground: "primary-900",
11167
+ hoverTextColor: "secondary",
11168
+ textTransform: "uppercase",
11169
+ letterSpacing: "wider",
11170
+ fontWeight: "bold",
11171
+ textSize: "sm"
11172
+ },
11173
+ border: {
11174
+ style: "solid",
11175
+ width: "none",
11176
+ position: "none"
11177
+ },
11178
+ logoText: {
11179
+ hideOnShrink: true,
11180
+ mobileMaxWidth: "sm",
11181
+ mobileWrapLines: 2
11182
+ },
11183
+ ctaGap: "compact",
11184
+ ctaTreatment: "inverted",
11185
+ ...ctaVariant ? { ctaVariant } : {}
11186
+ };
10494
11187
  }
10495
11188
  function cleanBaseHeader(theme) {
10496
11189
  return {
@@ -10516,10 +11209,10 @@ function cleanBaseHeader(theme) {
10516
11209
  ctaGap: "default"
10517
11210
  };
10518
11211
  }
10519
- function editorialLineHeader(theme) {
11212
+ function serifLineHeader(theme) {
10520
11213
  return {
10521
11214
  ...baseHeader(theme),
10522
- variant: "editorial",
11215
+ variant: "centered",
10523
11216
  positioning: "sticky",
10524
11217
  shrinkOnScroll: false,
10525
11218
  background: {
@@ -10666,6 +11359,11 @@ var headerLookCatalog = [
10666
11359
  label: "Clean base",
10667
11360
  visualTreatment: "solid-neutral",
10668
11361
  layoutBehavior: "sticky",
11362
+ configuration: {
11363
+ structure: "inline-classic",
11364
+ treatment: "solid-neutral",
11365
+ behavior: "sticky"
11366
+ },
10669
11367
  openingRequirement: "none",
10670
11368
  compile: cleanBaseHeader
10671
11369
  },
@@ -10674,23 +11372,38 @@ var headerLookCatalog = [
10674
11372
  label: "Brand solid",
10675
11373
  visualTreatment: "solid-brand",
10676
11374
  layoutBehavior: "sticky-shrink",
11375
+ configuration: {
11376
+ structure: "inline-classic",
11377
+ treatment: "solid-brand",
11378
+ behavior: "sticky-shrink"
11379
+ },
10677
11380
  openingRequirement: "none",
10678
11381
  compile: solidBrandHeader
10679
11382
  },
10680
11383
  {
10681
- id: asHeaderLookId("editorial-line"),
10682
- label: "Editorial line",
10683
- visualTreatment: "light-editorial",
11384
+ id: asHeaderLookId("serif-line"),
11385
+ label: "Serif line",
11386
+ visualTreatment: "light-serif",
10684
11387
  layoutBehavior: "sticky",
11388
+ configuration: {
11389
+ structure: "centered-stack",
11390
+ treatment: "light-serif",
11391
+ behavior: "sticky"
11392
+ },
10685
11393
  openingRequirement: "none",
10686
11394
  maxRecommendedNavItems: 6,
10687
- compile: editorialLineHeader
11395
+ compile: serifLineHeader
10688
11396
  },
10689
11397
  {
10690
11398
  id: asHeaderLookId("centered-calm"),
10691
11399
  label: "Centered calm",
10692
- visualTreatment: "light-editorial",
11400
+ visualTreatment: "light-serif",
10693
11401
  layoutBehavior: "normal-flow",
11402
+ configuration: {
11403
+ structure: "centered-stack",
11404
+ treatment: "light-serif",
11405
+ behavior: "normal-flow"
11406
+ },
10694
11407
  openingRequirement: "none",
10695
11408
  maxRecommendedNavItems: 5,
10696
11409
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"],
@@ -10701,6 +11414,11 @@ var headerLookCatalog = [
10701
11414
  label: "Practical utility",
10702
11415
  visualTreatment: "solid-neutral",
10703
11416
  layoutBehavior: "sticky-shrink",
11417
+ configuration: {
11418
+ structure: "inline-classic",
11419
+ treatment: "solid-neutral",
11420
+ behavior: "sticky-shrink"
11421
+ },
10704
11422
  openingRequirement: "none",
10705
11423
  requiresProminentCta: true,
10706
11424
  compile: practicalUtilityHeader
@@ -10710,6 +11428,11 @@ var headerLookCatalog = [
10710
11428
  label: "Minimal transparent",
10711
11429
  visualTreatment: "minimal-transparent",
10712
11430
  layoutBehavior: "normal-flow",
11431
+ configuration: {
11432
+ structure: "inline-classic",
11433
+ treatment: "minimal-transparent",
11434
+ behavior: "normal-flow"
11435
+ },
10713
11436
  openingRequirement: "reserved-space-ok",
10714
11437
  compile: minimalTransparentHeader
10715
11438
  },
@@ -10718,6 +11441,11 @@ var headerLookCatalog = [
10718
11441
  label: "Transparent overlay",
10719
11442
  visualTreatment: "transparent-overlay",
10720
11443
  layoutBehavior: "fixed-overlay",
11444
+ configuration: {
11445
+ structure: "inline-classic",
11446
+ treatment: "transparent-overlay",
11447
+ behavior: "fixed-overlay"
11448
+ },
10721
11449
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10722
11450
  maxRecommendedNavItems: 5,
10723
11451
  allowedLogoShapes: ["none", "text-only", "horizontal"],
@@ -10728,6 +11456,11 @@ var headerLookCatalog = [
10728
11456
  label: "Floating glass",
10729
11457
  visualTreatment: "floating-glass",
10730
11458
  layoutBehavior: "fixed-floating",
11459
+ configuration: {
11460
+ structure: "floating-shell",
11461
+ treatment: "floating-glass",
11462
+ behavior: "fixed-floating"
11463
+ },
10731
11464
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10732
11465
  maxRecommendedNavItems: 5,
10733
11466
  allowedLogoShapes: ["none", "text-only", "horizontal"],
@@ -10735,9 +11468,17 @@ var headerLookCatalog = [
10735
11468
  }
10736
11469
  ];
10737
11470
  var guaranteedFallbackHeaderLookId = asHeaderLookId("clean-base");
11471
+ var guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
11472
+ var guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
11473
+ var allowedHeaderConfigurationKeys = new Set(
11474
+ headerLookCatalog.map((look) => headerConfigurationKey(look.configuration))
11475
+ );
10738
11476
  var headerLooksById = new Map(
10739
11477
  headerLookCatalog.map((look) => [look.id, look])
10740
11478
  );
11479
+ function headerConfigurationKey(configuration) {
11480
+ return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
11481
+ }
10741
11482
 
10742
11483
  // ../theme-core/src/site-styles/footerLooks.ts
10743
11484
  function asFooterLookId(value) {
@@ -10870,6 +11611,264 @@ var advancedDesignOptionCatalog = {
10870
11611
  detachedCustom: true
10871
11612
  };
10872
11613
 
11614
+ // ../theme-core/src/site-styles/typographyPresets.ts
11615
+ var bodyReadablePolicy = {
11616
+ recommendedCategories: ["sans-serif", "serif"],
11617
+ allowedCategories: ["sans-serif", "serif"],
11618
+ requiresItalicForBody: true,
11619
+ requiresBoldForBody: true
11620
+ };
11621
+ var headingFlexiblePolicy = {
11622
+ recommendedCategories: ["sans-serif", "serif", "display"],
11623
+ allowedCategories: ["sans-serif", "serif", "display"]
11624
+ };
11625
+ var displayHeadingPolicy = {
11626
+ recommendedCategories: ["display", "sans-serif", "serif"],
11627
+ allowedCategories: ["display", "sans-serif", "serif"]
11628
+ };
11629
+ function asTypographyPresetId(value) {
11630
+ if (!value.startsWith("typography-preset:")) {
11631
+ throw new Error(`TypographyPresetId must start with "typography-preset:". Received: ${value}`);
11632
+ }
11633
+ return value;
11634
+ }
11635
+ function defineTypographyPreset(preset2) {
11636
+ return {
11637
+ ...preset2,
11638
+ id: asTypographyPresetId(preset2.id)
11639
+ };
11640
+ }
11641
+ var modernSansTypography = {
11642
+ body: {
11643
+ family: "Inter, system-ui, sans-serif",
11644
+ size: "md",
11645
+ weight: "regular",
11646
+ lineHeight: "relaxed",
11647
+ letterSpacing: "normal"
11648
+ },
11649
+ headings: {
11650
+ default: {
11651
+ family: "Inter, system-ui, sans-serif",
11652
+ weight: "semibold",
11653
+ lineHeight: "normal",
11654
+ letterSpacing: "tight",
11655
+ italic: null,
11656
+ case: null
11657
+ },
11658
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11659
+ h2: { size: "lg", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11660
+ h3: { size: "md", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null }
11661
+ },
11662
+ scale: "balanced"
11663
+ };
11664
+ var warmRoundedTypography = {
11665
+ body: {
11666
+ family: "Nunito Sans, system-ui, sans-serif",
11667
+ size: "lg",
11668
+ weight: "regular",
11669
+ lineHeight: "relaxed",
11670
+ letterSpacing: "normal"
11671
+ },
11672
+ headings: {
11673
+ default: {
11674
+ family: "Nunito Sans, system-ui, sans-serif",
11675
+ weight: "bold",
11676
+ lineHeight: "normal",
11677
+ letterSpacing: "normal",
11678
+ italic: null,
11679
+ case: null
11680
+ },
11681
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11682
+ h2: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11683
+ h3: { size: "md", weight: "semibold", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11684
+ },
11685
+ scale: "balanced"
11686
+ };
11687
+ var editorialSerifTypography = {
11688
+ body: {
11689
+ family: "Lora, Georgia, serif",
11690
+ size: "lg",
11691
+ weight: "regular",
11692
+ lineHeight: "loose",
11693
+ letterSpacing: "normal"
11694
+ },
11695
+ headings: {
11696
+ default: {
11697
+ family: "Playfair Display, Georgia, serif",
11698
+ weight: "semibold",
11699
+ lineHeight: "normal",
11700
+ letterSpacing: "tight",
11701
+ italic: null,
11702
+ case: null
11703
+ },
11704
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11705
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11706
+ h3: { size: "md", weight: "semibold", lineHeight: "relaxed", letterSpacing: "normal", italic: true }
11707
+ },
11708
+ scale: "spacious"
11709
+ };
11710
+ var classicSerifTypography = {
11711
+ body: {
11712
+ family: "Libre Baskerville, Georgia, serif",
11713
+ size: "md",
11714
+ weight: "regular",
11715
+ lineHeight: "relaxed",
11716
+ letterSpacing: "normal"
11717
+ },
11718
+ headings: {
11719
+ default: {
11720
+ family: "Cormorant Garamond, Georgia, serif",
11721
+ weight: "semibold",
11722
+ lineHeight: "normal",
11723
+ letterSpacing: "normal",
11724
+ italic: null,
11725
+ case: null
11726
+ },
11727
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11728
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11729
+ h3: { size: "md", weight: "medium", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11730
+ },
11731
+ scale: "balanced"
11732
+ };
11733
+ var luxeContrastTypography = {
11734
+ body: {
11735
+ family: "Manrope, system-ui, sans-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: "tight",
11747
+ italic: null,
11748
+ case: null
11749
+ },
11750
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11751
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11752
+ h3: { size: "md", weight: "medium", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11753
+ },
11754
+ scale: "spacious"
11755
+ };
11756
+ var boldDisplayTypography = {
11757
+ body: {
11758
+ family: "Manrope, system-ui, sans-serif",
11759
+ size: "lg",
11760
+ weight: "regular",
11761
+ lineHeight: "relaxed",
11762
+ letterSpacing: "normal"
11763
+ },
11764
+ headings: {
11765
+ default: {
11766
+ family: '"TAN - PEARL", sans-serif',
11767
+ weight: "bold",
11768
+ lineHeight: "normal",
11769
+ letterSpacing: "tight",
11770
+ colorToken: "primary",
11771
+ italic: null,
11772
+ case: null
11773
+ },
11774
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11775
+ h2: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11776
+ h3: { size: "md", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null }
11777
+ },
11778
+ scale: "balanced"
11779
+ };
11780
+ var typographyPresets = [
11781
+ defineTypographyPreset({
11782
+ id: "typography-preset:modern-sans",
11783
+ name: "Modern Sans",
11784
+ description: "Crisp, neutral type for clear service pages and practical editorial structure.",
11785
+ defaultFonts: { body: "Inter, system-ui, sans-serif", heading: "Inter, system-ui, sans-serif" },
11786
+ recommendedFonts: {
11787
+ body: ["Inter", "Source Sans 3", "IBM Plex Sans"],
11788
+ heading: ["Inter", "Manrope", "Source Sans 3"]
11789
+ },
11790
+ slotPolicies: { body: bodyReadablePolicy, heading: headingFlexiblePolicy },
11791
+ typography: modernSansTypography
11792
+ }),
11793
+ defineTypographyPreset({
11794
+ id: "typography-preset:warm-rounded",
11795
+ name: "Warm Rounded",
11796
+ description: "Soft, friendly type for welcoming studios, classes, and community businesses.",
11797
+ defaultFonts: { body: "Nunito Sans, system-ui, sans-serif", heading: "Nunito Sans, system-ui, sans-serif" },
11798
+ recommendedFonts: {
11799
+ body: ["Nunito Sans", "Atkinson Hyperlegible", "Lato"],
11800
+ heading: ["Nunito Sans", "Quicksand", "Manrope"]
11801
+ },
11802
+ slotPolicies: { body: bodyReadablePolicy, heading: headingFlexiblePolicy },
11803
+ typography: warmRoundedTypography
11804
+ }),
11805
+ defineTypographyPreset({
11806
+ id: "typography-preset:editorial-serif",
11807
+ name: "Editorial Serif",
11808
+ description: "Story-led type with warm reading rhythm and expressive headings.",
11809
+ defaultFonts: { body: "Lora, Georgia, serif", heading: "Playfair Display, Georgia, serif" },
11810
+ recommendedFonts: {
11811
+ body: ["Lora", "Source Serif 4", "Libre Baskerville"],
11812
+ heading: ["Playfair Display", "Cormorant Garamond", "Fraunces"]
11813
+ },
11814
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11815
+ typography: editorialSerifTypography
11816
+ }),
11817
+ defineTypographyPreset({
11818
+ id: "typography-preset:classic-serif",
11819
+ name: "Classic Serif",
11820
+ description: "Measured, polished type for premium and established offers.",
11821
+ defaultFonts: { body: "Libre Baskerville, Georgia, serif", heading: "Cormorant Garamond, Georgia, serif" },
11822
+ recommendedFonts: {
11823
+ body: ["Libre Baskerville", "Source Serif 4", "Lora"],
11824
+ heading: ["Cormorant Garamond", "Playfair Display", "Libre Baskerville"]
11825
+ },
11826
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11827
+ typography: classicSerifTypography
11828
+ }),
11829
+ defineTypographyPreset({
11830
+ id: "typography-preset:luxe-contrast",
11831
+ name: "Luxe Contrast",
11832
+ description: "A restrained sans body paired with elegant high-contrast headings.",
11833
+ defaultFonts: { body: "Manrope, system-ui, sans-serif", heading: "Cormorant Garamond, Georgia, serif" },
11834
+ recommendedFonts: {
11835
+ body: ["Manrope", "Inter", "Source Sans 3"],
11836
+ heading: ["Cormorant Garamond", "Playfair Display", "Bodoni Moda"]
11837
+ },
11838
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11839
+ typography: luxeContrastTypography
11840
+ }),
11841
+ defineTypographyPreset({
11842
+ id: "typography-preset:bold-display",
11843
+ name: "Bold Display",
11844
+ description: "Punchy display headings with readable sans body copy for branded launches.",
11845
+ defaultFonts: { body: "Manrope, system-ui, sans-serif", heading: '"TAN - PEARL", sans-serif' },
11846
+ recommendedFonts: {
11847
+ body: ["Manrope", "Inter", "Space Grotesk"],
11848
+ heading: ["Anton", "Bebas Neue", "Archivo Black"]
11849
+ },
11850
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11851
+ typography: boldDisplayTypography,
11852
+ heroTypography: {
11853
+ headlineSize: "6xl",
11854
+ headlineLineHeight: "tight",
11855
+ subheadlineSize: "editorial",
11856
+ subheadlineLineHeight: "normal",
11857
+ microHeadlineSize: "6xl",
11858
+ microHeadlineLineHeight: "tight",
11859
+ microSubheadlineSize: "xl",
11860
+ microSubheadlineLineHeight: "normal",
11861
+ responsive: {
11862
+ tablet: { headlineSize: "5xl" },
11863
+ mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
11864
+ }
11865
+ }
11866
+ })
11867
+ ];
11868
+ var typographyPresetsById = new Map(
11869
+ typographyPresets.map((preset2) => [preset2.id, preset2])
11870
+ );
11871
+
10873
11872
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
10874
11873
  var curatedSiteStyleIdValues = [
10875
11874
  "site-style:calm-studio",
@@ -10882,6 +11881,7 @@ var curatedSiteStyleIdValues = [
10882
11881
  "site-style:personal-retreat-journal",
10883
11882
  "site-style:tactile-workshop",
10884
11883
  "site-style:modern-wellness",
11884
+ "site-style:soft-earth",
10885
11885
  "site-style:bold-launch",
10886
11886
  "site-style:south-west-twerk-school"
10887
11887
  ];
@@ -10947,26 +11947,45 @@ var expressiveUnderlineInputs = {
10947
11947
  }
10948
11948
  };
10949
11949
  function uniqueContentFrameKinds() {
10950
- const kinds = [...new Set(
10951
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
10952
- )];
11950
+ const kinds = [
11951
+ ...new Set(
11952
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
11953
+ )
11954
+ ];
10953
11955
  const firstKind = kinds[0];
10954
11956
  if (!firstKind) {
10955
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
11957
+ throw new Error(
11958
+ "Expected generated design option catalog to expose at least one content frame kind."
11959
+ );
10956
11960
  }
10957
11961
  return [firstKind, ...kinds.slice(1)];
10958
11962
  }
10959
11963
  var generatedContentFrameKinds = uniqueContentFrameKinds();
10960
11964
  function defineCuratedSiteStyle(input) {
11965
+ const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
11966
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
11967
+ const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
11968
+ const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
11969
+ if (!typographyPresetChoices.some(
11970
+ (choice) => choice.id === defaultTypographyPresetId
11971
+ )) {
11972
+ throw new Error(
11973
+ `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
11974
+ );
11975
+ }
10961
11976
  return {
10962
11977
  id: asSiteStyleId(input.id),
10963
11978
  name: input.name,
10964
11979
  description: input.description,
10965
11980
  generationBrief: input.generationBrief,
10966
11981
  selectionKeywordRules: input.selectionKeywordRules ?? [],
10967
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
11982
+ siteCreatorSelection: input.siteCreatorSelection ?? {
11983
+ kind: "explicit_only"
11984
+ },
10968
11985
  template: {
10969
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
11986
+ id: asDesignSystemTemplateId(
11987
+ `template:${input.id.replace("site-style:", "")}`
11988
+ ),
10970
11989
  name: input.name,
10971
11990
  version: 1,
10972
11991
  tokenRecipes: input.tokenRecipes,
@@ -10978,11 +11997,27 @@ function defineCuratedSiteStyle(input) {
10978
11997
  },
10979
11998
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
10980
11999
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
10981
- recommendedHeaderLookIds: (input.recommendedHeaderLookIds ?? ["clean-base"]).map(asHeaderLookId),
12000
+ defaultHeaderSelection: input.defaultHeaderSelection ? {
12001
+ layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
12002
+ styleId: asHeaderStyleId(input.defaultHeaderSelection.styleId)
12003
+ } : inferredHeaderCuration.defaultHeaderSelection,
12004
+ recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
12005
+ recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
12006
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
12007
+ (selection) => ({
12008
+ layoutId: asHeaderLayoutId(selection.layoutId),
12009
+ styleId: asHeaderStyleId(selection.styleId)
12010
+ })
12011
+ ),
12012
+ recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
10982
12013
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
10983
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
12014
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
12015
+ asFooterLookId
12016
+ ),
10984
12017
  buttonPersonalityChoices: input.buttonPersonalityChoices,
10985
- paletteVariantChoices: input.paletteVariantChoices
12018
+ paletteVariantChoices: input.paletteVariantChoices,
12019
+ typographyPresetChoices,
12020
+ defaultTypographyPresetId
10986
12021
  };
10987
12022
  }
10988
12023
  function buttonChoice(id, note) {
@@ -10991,6 +12026,87 @@ function buttonChoice(id, note) {
10991
12026
  function paletteChoice(id, note) {
10992
12027
  return note ? { id: asPaletteVariantId(id), note } : { id: asPaletteVariantId(id) };
10993
12028
  }
12029
+ function headerLayoutChoice(id, note) {
12030
+ return note ? { id: asHeaderLayoutId(id), note } : { id: asHeaderLayoutId(id) };
12031
+ }
12032
+ function headerStyleChoice(id, note) {
12033
+ return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
12034
+ }
12035
+ function unbrandHeaderLayoutId(id) {
12036
+ return id;
12037
+ }
12038
+ function uniqueHeaderLayoutChoices(choices) {
12039
+ const seen = /* @__PURE__ */ new Set();
12040
+ const unique = choices.filter((choice) => {
12041
+ if (seen.has(choice.id)) return false;
12042
+ seen.add(choice.id);
12043
+ return true;
12044
+ });
12045
+ const first = unique[0];
12046
+ if (!first) {
12047
+ throw new Error("Expected at least one curated header layout choice.");
12048
+ }
12049
+ return [first, ...unique.slice(1)];
12050
+ }
12051
+ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
12052
+ const first = choices[0] ?? {
12053
+ id: getCompatibleHeaderStyleIds(fallbackLayoutId)[0] ?? asHeaderStyleId("minimal")
12054
+ };
12055
+ return [first, ...choices.slice(1)];
12056
+ }
12057
+ function inferHeaderCurationFromLegacyLooks(lookIds) {
12058
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
12059
+ (selection) => Boolean(selection)
12060
+ );
12061
+ const defaultHeaderSelection = selections[0] ?? {
12062
+ layoutId: asHeaderLayoutId("classic"),
12063
+ styleId: asHeaderStyleId("minimal")
12064
+ };
12065
+ const layoutChoices = uniqueHeaderLayoutChoices(
12066
+ selections.map((selection) => headerLayoutChoice(selection.layoutId))
12067
+ );
12068
+ const stylesByLayout = {};
12069
+ for (const layoutChoice of layoutChoices) {
12070
+ const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12071
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
12072
+ }
12073
+ return {
12074
+ defaultHeaderSelection,
12075
+ recommendedHeaderLayoutChoices: layoutChoices,
12076
+ recommendedHeaderStyleChoicesByLayout: stylesByLayout
12077
+ };
12078
+ }
12079
+ function typographyChoice(id, note) {
12080
+ return note ? { id: asTypographyPresetId(id), note } : { id: asTypographyPresetId(id) };
12081
+ }
12082
+ function defaultTypographyPresetChoicesForRecipe(recipe) {
12083
+ switch (recipe) {
12084
+ case "clean-sans":
12085
+ return [
12086
+ typographyChoice("typography-preset:modern-sans"),
12087
+ typographyChoice("typography-preset:luxe-contrast"),
12088
+ typographyChoice("typography-preset:bold-display")
12089
+ ];
12090
+ case "friendly-sans":
12091
+ return [
12092
+ typographyChoice("typography-preset:warm-rounded"),
12093
+ typographyChoice("typography-preset:modern-sans"),
12094
+ typographyChoice("typography-preset:editorial-serif")
12095
+ ];
12096
+ case "serif-editorial":
12097
+ return [
12098
+ typographyChoice("typography-preset:editorial-serif"),
12099
+ typographyChoice("typography-preset:classic-serif"),
12100
+ typographyChoice("typography-preset:warm-rounded")
12101
+ ];
12102
+ case "classic-serif":
12103
+ return [
12104
+ typographyChoice("typography-preset:classic-serif"),
12105
+ typographyChoice("typography-preset:luxe-contrast"),
12106
+ typographyChoice("typography-preset:editorial-serif")
12107
+ ];
12108
+ }
12109
+ }
10994
12110
  var curatedSiteStyles = [
10995
12111
  defineCuratedSiteStyle({
10996
12112
  id: "site-style:calm-studio",
@@ -11007,7 +12123,11 @@ var curatedSiteStyles = [
11007
12123
  motion: "subtle"
11008
12124
  },
11009
12125
  compositionBudget: quietBudget,
11010
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
12126
+ recommendedHeaderLookIds: [
12127
+ "centered-calm",
12128
+ "minimal-transparent",
12129
+ "clean-base"
12130
+ ],
11011
12131
  buttonPersonalityChoices: [
11012
12132
  buttonChoice("soft-pill"),
11013
12133
  buttonChoice("pebble"),
@@ -11036,7 +12156,11 @@ var curatedSiteStyles = [
11036
12156
  motion: "subtle"
11037
12157
  },
11038
12158
  compositionBudget: balancedBudget,
11039
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
12159
+ recommendedHeaderLookIds: [
12160
+ "practical-utility",
12161
+ "brand-solid",
12162
+ "clean-base"
12163
+ ],
11040
12164
  buttonPersonalityChoices: [
11041
12165
  buttonChoice("confident-chip"),
11042
12166
  buttonChoice("soft-pill"),
@@ -11063,7 +12187,11 @@ var curatedSiteStyles = [
11063
12187
  motion: "subtle"
11064
12188
  },
11065
12189
  compositionBudget: balancedBudget,
11066
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
12190
+ recommendedHeaderLookIds: [
12191
+ "serif-line",
12192
+ "minimal-transparent",
12193
+ "centered-calm"
12194
+ ],
11067
12195
  buttonPersonalityChoices: [
11068
12196
  buttonChoice("editorial-link"),
11069
12197
  buttonChoice("soft-pill"),
@@ -11091,7 +12219,11 @@ var curatedSiteStyles = [
11091
12219
  motion: "expressive"
11092
12220
  },
11093
12221
  compositionBudget: balancedBudget,
11094
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12222
+ recommendedHeaderLookIds: [
12223
+ "brand-solid",
12224
+ "practical-utility",
12225
+ "clean-base"
12226
+ ],
11095
12227
  buttonPersonalityChoices: [
11096
12228
  buttonChoice("pebble"),
11097
12229
  buttonChoice("brushed-wash"),
@@ -11108,7 +12240,10 @@ var curatedSiteStyles = [
11108
12240
  name: "Quiet Luxury",
11109
12241
  description: "Minimal, confident, and refined for premium experiences and private services.",
11110
12242
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
11111
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
12243
+ siteCreatorSelection: {
12244
+ kind: "site_creator_keyword_heuristic",
12245
+ priority: 20
12246
+ },
11112
12247
  selectionKeywordRules: [
11113
12248
  { kind: "word", value: "luxury" },
11114
12249
  { kind: "word", value: "premium" },
@@ -11126,7 +12261,11 @@ var curatedSiteStyles = [
11126
12261
  motion: "none"
11127
12262
  },
11128
12263
  compositionBudget: quietBudget,
11129
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
12264
+ recommendedHeaderLookIds: [
12265
+ "minimal-transparent",
12266
+ "serif-line",
12267
+ "clean-base"
12268
+ ],
11130
12269
  buttonPersonalityChoices: [
11131
12270
  buttonChoice("editorial-link"),
11132
12271
  buttonChoice("confident-chip"),
@@ -11162,7 +12301,11 @@ var curatedSiteStyles = [
11162
12301
  motion: "none"
11163
12302
  },
11164
12303
  compositionBudget: quietBudget,
11165
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
12304
+ recommendedHeaderLookIds: [
12305
+ "practical-utility",
12306
+ "brand-solid",
12307
+ "clean-base"
12308
+ ],
11166
12309
  buttonPersonalityChoices: [
11167
12310
  buttonChoice("confident-chip"),
11168
12311
  buttonChoice("pebble"),
@@ -11189,7 +12332,11 @@ var curatedSiteStyles = [
11189
12332
  motion: "subtle"
11190
12333
  },
11191
12334
  compositionBudget: balancedBudget,
11192
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
12335
+ recommendedHeaderLookIds: [
12336
+ "centered-calm",
12337
+ "minimal-transparent",
12338
+ "clean-base"
12339
+ ],
11193
12340
  buttonPersonalityChoices: [
11194
12341
  buttonChoice("soft-pill"),
11195
12342
  buttonChoice("pebble"),
@@ -11206,7 +12353,10 @@ var curatedSiteStyles = [
11206
12353
  name: "Quiet Practice",
11207
12354
  description: "Grounded, calm, and practical for small appointment-first practices.",
11208
12355
  generationBrief: "Make services, practitioner trust, preparation notes, and booking routes easy to scan. Keep the tone warm and specific, with quiet confidence rather than spa cliches or medical claims.",
11209
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
12356
+ siteCreatorSelection: {
12357
+ kind: "site_creator_keyword_heuristic",
12358
+ priority: 30
12359
+ },
11210
12360
  selectionKeywordRules: [
11211
12361
  { kind: "substring", value: "massage" },
11212
12362
  { kind: "word", value: "bodywork" },
@@ -11227,7 +12377,11 @@ var curatedSiteStyles = [
11227
12377
  motion: "subtle"
11228
12378
  },
11229
12379
  compositionBudget: quietBudget,
11230
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
12380
+ recommendedHeaderLookIds: [
12381
+ "practical-utility",
12382
+ "clean-base",
12383
+ "centered-calm"
12384
+ ],
11231
12385
  buttonPersonalityChoices: [
11232
12386
  buttonChoice("pebble"),
11233
12387
  buttonChoice("soft-pill"),
@@ -11244,7 +12398,10 @@ var curatedSiteStyles = [
11244
12398
  name: "Personal Retreat Journal",
11245
12399
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
11246
12400
  generationBrief: "Center the practitioner as the guide, then make private sessions, classes, retreats, and resources feel like clear pathways. Keep retreat copy grounded and practical, with enough editorial warmth for longer reading.",
11247
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
12401
+ siteCreatorSelection: {
12402
+ kind: "site_creator_keyword_heuristic",
12403
+ priority: 40
12404
+ },
11248
12405
  selectionKeywordRules: [
11249
12406
  { kind: "substring", value: "retreat" },
11250
12407
  { kind: "phrase", value: "solo practitioner" },
@@ -11264,7 +12421,11 @@ var curatedSiteStyles = [
11264
12421
  motion: "subtle"
11265
12422
  },
11266
12423
  compositionBudget: balancedBudget,
11267
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
12424
+ recommendedHeaderLookIds: [
12425
+ "serif-line",
12426
+ "centered-calm",
12427
+ "minimal-transparent"
12428
+ ],
11268
12429
  buttonPersonalityChoices: [
11269
12430
  buttonChoice("editorial-link"),
11270
12431
  buttonChoice("soft-pill"),
@@ -11281,7 +12442,10 @@ var curatedSiteStyles = [
11281
12442
  name: "Tactile Workshop",
11282
12443
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
11283
12444
  generationBrief: "Lead with objects, materials, studio process, and practical booking detail. Keep the tone warm and direct, with useful mess, clear dates, and enough gallery rhythm to feel like a real creative studio.",
11284
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
12445
+ siteCreatorSelection: {
12446
+ kind: "site_creator_keyword_heuristic",
12447
+ priority: 50
12448
+ },
11285
12449
  selectionKeywordRules: [
11286
12450
  { kind: "substring", value: "ceramic" },
11287
12451
  { kind: "word", value: "pottery" },
@@ -11301,8 +12465,15 @@ var curatedSiteStyles = [
11301
12465
  motion: "subtle"
11302
12466
  },
11303
12467
  compositionBudget: balancedBudget,
11304
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
11305
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12468
+ recommendedHeaderLookIds: [
12469
+ "brand-solid",
12470
+ "practical-utility",
12471
+ "clean-base"
12472
+ ],
12473
+ recommendedFooterLookIds: [
12474
+ "site-footer-brand-two-band",
12475
+ "footer-muted-grounding"
12476
+ ],
11306
12477
  buttonPersonalityChoices: [
11307
12478
  buttonChoice("pebble"),
11308
12479
  buttonChoice("confident-chip"),
@@ -11317,101 +12488,178 @@ var curatedSiteStyles = [
11317
12488
  ]
11318
12489
  }),
11319
12490
  defineCuratedSiteStyle({
11320
- id: "site-style:bold-launch",
11321
- name: "Bold Launch",
11322
- description: "High-energy and punchy for launches, campaigns, and creative offers.",
11323
- generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
11324
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
11325
- selectionKeywordRules: [
11326
- { kind: "substring", value: "launch" },
11327
- { kind: "substring", value: "campaign" },
11328
- { kind: "word", value: "preorder" },
11329
- { kind: "phrase", value: "pre-order" },
11330
- { kind: "substring", value: "waitlist" },
11331
- { kind: "word", value: "drop" }
11332
- ],
11333
- tokenRecipes: {
11334
- palette: "high-contrast",
11335
- contrast: "maximum",
11336
- radius: "pill",
11337
- shadow: "layered",
11338
- typography: "clean-sans",
11339
- spacing: "regular",
11340
- motion: "expressive"
12491
+ id: "site-style:soft-earth",
12492
+ name: "Soft Earth",
12493
+ description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
12494
+ 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.",
12495
+ siteCreatorSelection: {
12496
+ kind: "site_creator_keyword_heuristic",
12497
+ priority: 45
11341
12498
  },
11342
- compositionBudget: expressiveBudget,
11343
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
11344
- buttonPersonalityChoices: [
11345
- buttonChoice("ink-stamp"),
11346
- buttonChoice("confident-chip"),
11347
- buttonChoice("brushed-wash"),
11348
- buttonChoice("pebble")
12499
+ selectionKeywordRules: [
12500
+ { kind: "word", value: "meditation" },
12501
+ { kind: "word", value: "wellbeing" },
12502
+ { kind: "substring", value: "retreat" },
12503
+ { kind: "phrase", value: "yoga studio" },
12504
+ { kind: "phrase", value: "mindful movement" }
11349
12505
  ],
11350
- paletteVariantChoices: [
11351
- paletteChoice("high-contrast-monochrome"),
11352
- paletteChoice("high-contrast-ink"),
11353
- paletteChoice("brand-led-jewel"),
11354
- paletteChoice("brand-led-warm")
11355
- ]
11356
- }),
11357
- defineCuratedSiteStyle({
11358
- id: "site-style:south-west-twerk-school",
11359
- name: "South West Twerk School",
11360
- description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
11361
- generationBrief: "Use confident rhythm, bold burgundy-and-gold accents, large editorial intro copy, strong booking routes, and dark feature sections where proof or forms need emphasis.",
11362
12506
  tokenRecipes: {
11363
- palette: "brand-led",
11364
- contrast: "maximum",
12507
+ palette: "warm-neutral",
12508
+ contrast: "standard",
11365
12509
  radius: "soft",
11366
- shadow: "layered",
11367
- typography: "clean-sans",
12510
+ shadow: "subtle",
12511
+ typography: "serif-editorial",
11368
12512
  spacing: "airy",
11369
- motion: "expressive"
12513
+ motion: "subtle"
11370
12514
  },
11371
- compositionBudget: expressiveBudget,
12515
+ compositionBudget: balancedBudget,
11372
12516
  themeOverrides: {
11373
12517
  typography: {
11374
12518
  body: {
11375
- family: "Manrope, system-ui, sans-serif",
11376
- size: "lg",
12519
+ family: "Inter, system-ui, sans-serif",
12520
+ size: "md",
11377
12521
  weight: "regular",
11378
12522
  lineHeight: "relaxed",
11379
12523
  letterSpacing: "normal"
11380
12524
  },
11381
12525
  headings: {
11382
12526
  default: {
11383
- family: '"TAN - PEARL", sans-serif',
11384
- weight: "bold",
12527
+ family: '"Cormorant Garamond", Georgia, serif',
12528
+ weight: "regular",
11385
12529
  lineHeight: "normal",
11386
- letterSpacing: "tight",
11387
- colorToken: "primary",
12530
+ letterSpacing: "normal",
12531
+ colorToken: "text",
11388
12532
  italic: null,
11389
12533
  case: null
11390
12534
  },
11391
12535
  h1: {
11392
12536
  size: "xl",
11393
- weight: "bold",
12537
+ weight: "regular",
11394
12538
  lineHeight: "normal",
11395
- letterSpacing: "tight",
12539
+ letterSpacing: "normal",
11396
12540
  italic: null
11397
12541
  },
11398
12542
  h2: {
11399
12543
  size: "lg",
11400
- weight: "bold",
12544
+ weight: "regular",
11401
12545
  lineHeight: "normal",
11402
12546
  letterSpacing: "normal",
11403
12547
  italic: null
11404
12548
  },
11405
12549
  h3: {
11406
12550
  size: "md",
11407
- weight: "bold",
12551
+ weight: "regular",
11408
12552
  lineHeight: "normal",
11409
12553
  letterSpacing: "normal",
11410
12554
  italic: null
11411
12555
  }
11412
12556
  },
11413
- scale: "balanced"
12557
+ scale: "majorThird"
11414
12558
  },
12559
+ bodyText: {
12560
+ intro: {
12561
+ paragraphSize: "default",
12562
+ headingSize: "editorial"
12563
+ }
12564
+ }
12565
+ },
12566
+ recommendedAppearancePresetIds: [
12567
+ "hero-brand-scrim",
12568
+ "intro-soft-earth-statement",
12569
+ "feature-cards-soft-earth-offerings",
12570
+ "testimonials-soft-earth-proof-band",
12571
+ "faq-soft-earth-two-column",
12572
+ "contact-form-panel"
12573
+ ],
12574
+ recommendedHeaderLookIds: [
12575
+ "centered-calm",
12576
+ "minimal-transparent",
12577
+ "serif-line"
12578
+ ],
12579
+ recommendedFooterLookIds: [
12580
+ "footer-muted-grounding",
12581
+ "site-footer-brand-two-band"
12582
+ ],
12583
+ buttonPersonalityChoices: [
12584
+ buttonChoice("earth-pill"),
12585
+ buttonChoice("soft-pill"),
12586
+ buttonChoice("pebble"),
12587
+ buttonChoice("editorial-link")
12588
+ ],
12589
+ paletteVariantChoices: [
12590
+ paletteChoice("warm-neutral-soft-earth"),
12591
+ paletteChoice("warm-neutral-clay"),
12592
+ paletteChoice("warm-neutral-forest"),
12593
+ paletteChoice("soft-natural-sage")
12594
+ ]
12595
+ }),
12596
+ defineCuratedSiteStyle({
12597
+ id: "site-style:bold-launch",
12598
+ name: "Bold Launch",
12599
+ description: "High-energy and punchy for launches, campaigns, and creative offers.",
12600
+ generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
12601
+ siteCreatorSelection: {
12602
+ kind: "site_creator_keyword_heuristic",
12603
+ priority: 10
12604
+ },
12605
+ selectionKeywordRules: [
12606
+ { kind: "substring", value: "launch" },
12607
+ { kind: "substring", value: "campaign" },
12608
+ { kind: "word", value: "preorder" },
12609
+ { kind: "phrase", value: "pre-order" },
12610
+ { kind: "substring", value: "waitlist" },
12611
+ { kind: "word", value: "drop" }
12612
+ ],
12613
+ tokenRecipes: {
12614
+ palette: "high-contrast",
12615
+ contrast: "maximum",
12616
+ radius: "pill",
12617
+ shadow: "layered",
12618
+ typography: "clean-sans",
12619
+ spacing: "regular",
12620
+ motion: "expressive"
12621
+ },
12622
+ compositionBudget: expressiveBudget,
12623
+ recommendedHeaderLookIds: [
12624
+ "transparent-overlay",
12625
+ "floating-glass",
12626
+ "brand-solid"
12627
+ ],
12628
+ buttonPersonalityChoices: [
12629
+ buttonChoice("ink-stamp"),
12630
+ buttonChoice("confident-chip"),
12631
+ buttonChoice("brushed-wash"),
12632
+ buttonChoice("pebble")
12633
+ ],
12634
+ paletteVariantChoices: [
12635
+ paletteChoice("high-contrast-monochrome"),
12636
+ paletteChoice("high-contrast-ink"),
12637
+ paletteChoice("brand-led-jewel"),
12638
+ paletteChoice("brand-led-warm")
12639
+ ]
12640
+ }),
12641
+ defineCuratedSiteStyle({
12642
+ id: "site-style:south-west-twerk-school",
12643
+ name: "South West Twerk School",
12644
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
12645
+ generationBrief: "Use confident rhythm, bold burgundy-and-gold accents, large editorial intro copy, strong booking routes, and dark feature sections where proof or forms need emphasis.",
12646
+ tokenRecipes: {
12647
+ palette: "brand-led",
12648
+ contrast: "maximum",
12649
+ radius: "soft",
12650
+ shadow: "layered",
12651
+ typography: "clean-sans",
12652
+ spacing: "airy",
12653
+ motion: "expressive"
12654
+ },
12655
+ compositionBudget: expressiveBudget,
12656
+ typographyPresetChoices: [
12657
+ typographyChoice("typography-preset:bold-display"),
12658
+ typographyChoice("typography-preset:modern-sans"),
12659
+ typographyChoice("typography-preset:luxe-contrast")
12660
+ ],
12661
+ defaultTypographyPresetId: "typography-preset:bold-display",
12662
+ themeOverrides: {
11415
12663
  bodyText: {
11416
12664
  intro: {
11417
12665
  paragraphSize: "editorial",
@@ -11427,8 +12675,15 @@ var curatedSiteStyles = [
11427
12675
  "testimonials-accent-quote-proof",
11428
12676
  "contact-form-brand-depth-card"
11429
12677
  ],
11430
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
11431
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12678
+ recommendedHeaderLookIds: [
12679
+ "brand-solid",
12680
+ "transparent-overlay",
12681
+ "practical-utility"
12682
+ ],
12683
+ recommendedFooterLookIds: [
12684
+ "site-footer-brand-two-band",
12685
+ "footer-muted-grounding"
12686
+ ],
11432
12687
  buttonPersonalityChoices: [
11433
12688
  buttonChoice("showtime-pill"),
11434
12689
  buttonChoice("confident-chip"),
@@ -15754,8 +17009,9 @@ var faqAccordionFragment = defineFragment({
15754
17009
  },
15755
17010
  fallback: "rb-faq-item"
15756
17011
  },
15757
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } }
15758
- // Pass icon style from theme
17012
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
17013
+ // Legacy theme accordion style
17014
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
15759
17015
  },
15760
17016
  triggerFrom: "faqItem.question",
15761
17017
  contentFrom: "faqItem.answer"
@@ -16833,61 +18089,389 @@ function splitLayoutWith(children) {
16833
18089
  children
16834
18090
  }
16835
18091
  }),
16836
- // The split variants render the image as a real grid column, so suppress
16837
- // the default absolute background image layer while keeping color/overlay.
16838
- renderBackgroundImage: false,
16839
- baseClass: ""
16840
- });
16841
- }
16842
- var splitContentColumn = heroContentWrapper(heroContentNodes, "md", "rb-w-full rb-text-left");
16843
- var splitImageColumn = heroSplitImagePane();
16844
- var splitLayout = splitLayoutWith([
16845
- splitContentColumn,
16846
- splitImageColumn
16847
- ]);
16848
- var splitReverseLayout = splitLayoutWith([
16849
- splitImageColumn,
16850
- splitContentColumn
16851
- ]);
16852
- var heroConfig = {
16853
- id: "block.hero",
16854
- title: "Hero",
16855
- titleSource: "headline",
16856
- category: "layout",
16857
- includeContainerStyles: true,
16858
- promotedFields: ["_sectionStyles.background.image"],
16859
- fragments: [
16860
- { fragment: heroCopyFragment, fieldPriority: 0 },
16861
- { fragment: heroLayoutControlsFragment, fieldPriority: 1 },
16862
- { fragment: heroCtaRowFragment, fieldPriority: 2 }
16863
- ],
16864
- additionalFields: [
16865
- containerStylesField({
16866
- id: "_contentCardStyles",
16867
- label: "Content card",
16868
- renderInHeader: true,
16869
- intent: "style"
18092
+ // The split variants render the image as a real grid column, so suppress
18093
+ // the default absolute background image layer while keeping color/overlay.
18094
+ renderBackgroundImage: false,
18095
+ baseClass: ""
18096
+ });
18097
+ }
18098
+ var splitContentColumn = heroContentWrapper(heroContentNodes, "md", "rb-w-full rb-text-left");
18099
+ var splitImageColumn = heroSplitImagePane();
18100
+ var splitLayout = splitLayoutWith([
18101
+ splitContentColumn,
18102
+ splitImageColumn
18103
+ ]);
18104
+ var splitReverseLayout = splitLayoutWith([
18105
+ splitImageColumn,
18106
+ splitContentColumn
18107
+ ]);
18108
+ var heroConfig = {
18109
+ id: "block.hero",
18110
+ title: "Hero",
18111
+ titleSource: "headline",
18112
+ category: "layout",
18113
+ includeContainerStyles: true,
18114
+ promotedFields: ["_sectionStyles.background.image"],
18115
+ fragments: [
18116
+ { fragment: heroCopyFragment, fieldPriority: 0 },
18117
+ { fragment: heroLayoutControlsFragment, fieldPriority: 1 },
18118
+ { fragment: heroCtaRowFragment, fieldPriority: 2 }
18119
+ ],
18120
+ additionalFields: [
18121
+ containerStylesField({
18122
+ id: "_contentCardStyles",
18123
+ label: "Content card",
18124
+ renderInHeader: true,
18125
+ intent: "style"
18126
+ })
18127
+ ],
18128
+ layout: classicLayout,
18129
+ variants: {
18130
+ classic: classicLayout,
18131
+ micro: microLayout,
18132
+ split: splitLayout,
18133
+ splitReverse: splitReverseLayout
18134
+ },
18135
+ defaultVariant: "classic",
18136
+ description: "Hero section with headline, subtitle, and repeatable CTAs.",
18137
+ tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
18138
+ icon: "Sparkles",
18139
+ styleTokens: {
18140
+ typography: "display",
18141
+ spacing: "xl"
18142
+ }
18143
+ };
18144
+ var heroManifest = createBlockManifest(heroConfig);
18145
+ var heroBlockDefinition = {
18146
+ manifest: heroManifest
18147
+ };
18148
+
18149
+ // ../blocks/src/system/fields/aspectRatio.ts
18150
+ var standardAspectRatioOptions = [
18151
+ { value: "auto", label: "Auto (original)" },
18152
+ { value: "16/9", label: "16:9 (Landscape)" },
18153
+ { value: "4/3", label: "4:3 (Standard)" },
18154
+ { value: "1/1", label: "1:1 (Square)" },
18155
+ { value: "3/4", label: "3:4 (Portrait)" }
18156
+ ];
18157
+ function createAspectRatioField(options = {}) {
18158
+ return {
18159
+ id: options.id ?? "aspectRatio",
18160
+ type: "select",
18161
+ label: options.label ?? "Aspect ratio",
18162
+ ...options.description ? { description: options.description } : {},
18163
+ required: false,
18164
+ defaultValue: options.defaultValue ?? "auto",
18165
+ multiple: false,
18166
+ options: [...standardAspectRatioOptions],
18167
+ ui: {
18168
+ intent: options.uiIntent ?? "display",
18169
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
18170
+ }
18171
+ };
18172
+ }
18173
+
18174
+ // ../blocks/src/system/fields/imageLayout.ts
18175
+ function createImageColSizeField(options = {}) {
18176
+ const {
18177
+ id = "imageColSize",
18178
+ label = "Image column size",
18179
+ description = "Controls how large the image/thumbnail column is at desktop breakpoints.",
18180
+ defaultValue = "1/3",
18181
+ uiIntent = "display",
18182
+ visibleWhen
18183
+ } = options;
18184
+ return {
18185
+ id,
18186
+ type: "select",
18187
+ label,
18188
+ description,
18189
+ required: false,
18190
+ defaultValue,
18191
+ multiple: false,
18192
+ options: [
18193
+ { value: "1/4", label: "Small (1/4)" },
18194
+ { value: "1/3", label: "Medium (1/3)" },
18195
+ { value: "2/5", label: "Large (2/5)" },
18196
+ { value: "1/2", label: "Extra large (1/2)" },
18197
+ { value: "2/3", label: "Huge (2/3)" }
18198
+ ],
18199
+ ui: {
18200
+ intent: uiIntent,
18201
+ ...visibleWhen ? { visibleWhen } : {}
18202
+ }
18203
+ };
18204
+ }
18205
+ function createImagePositionField(options = {}) {
18206
+ const {
18207
+ id = "imagePosition",
18208
+ label = "Image position",
18209
+ description = "Choose which side the image appears on.",
18210
+ defaultValue = "left",
18211
+ includeAlternate = false,
18212
+ uiIntent = "display",
18213
+ visibleWhen
18214
+ } = options;
18215
+ const positionOptions = [
18216
+ { value: "left", label: "Left" },
18217
+ { value: "right", label: "Right" },
18218
+ ...includeAlternate ? [{ value: "alternate", label: "Alternate" }] : []
18219
+ ];
18220
+ return {
18221
+ id,
18222
+ type: "select",
18223
+ label,
18224
+ description,
18225
+ required: false,
18226
+ defaultValue,
18227
+ multiple: false,
18228
+ // Spread to get a mutable array type without unsafe casts.
18229
+ options: [...positionOptions],
18230
+ ui: {
18231
+ intent: uiIntent,
18232
+ ...visibleWhen ? { visibleWhen } : {}
18233
+ }
18234
+ };
18235
+ }
18236
+
18237
+ // ../blocks/src/system/blocks/intro.ts
18238
+ function introHeading(className) {
18239
+ return text(
18240
+ {
18241
+ as: "h2",
18242
+ className
18243
+ },
18244
+ when("content.title"),
18245
+ bind("content.title")
18246
+ );
18247
+ }
18248
+ function introBody(className = "rb-prose rb-max-w-none") {
18249
+ return richText({ className }, bind("content.body"));
18250
+ }
18251
+ function introCtas(justify = "start") {
18252
+ return ctaRow({
18253
+ justify,
18254
+ gap: "md",
18255
+ containerClassName: "rb-mt-2"
18256
+ });
18257
+ }
18258
+ function introCopyStack(options = {}) {
18259
+ return stack(
18260
+ {
18261
+ gap: "md",
18262
+ className: options.className ?? "rb-intro-copy"
18263
+ },
18264
+ [
18265
+ introHeading(options.headingClassName ?? "rb-intro-title"),
18266
+ introBody(options.bodyClassName),
18267
+ introCtas(options.ctaJustify)
18268
+ ]
18269
+ );
18270
+ }
18271
+ var introMedia = media(
18272
+ {
18273
+ className: "rb-intro-media rb-w-full rb-h-auto rb-object-cover",
18274
+ style: {
18275
+ aspectRatio: { $bind: { from: "content.aspectRatio" } }
18276
+ }
18277
+ },
18278
+ bind("content.media")
18279
+ );
18280
+ var centeredCopyLayout = styledSection({
18281
+ children: styledContainer({
18282
+ rootType: "stack",
18283
+ rootProps: { gap: "lg" },
18284
+ children: [
18285
+ introCopyStack({
18286
+ className: "rb-intro-copy rb-mx-auto rb-max-w-3xl rb-text-center",
18287
+ headingClassName: "rb-intro-title rb-text-center",
18288
+ bodyClassName: "rb-prose rb-mx-auto rb-max-w-none",
18289
+ ctaJustify: "center"
18290
+ })
18291
+ ]
18292
+ }),
18293
+ baseClass: "",
18294
+ spacing: "medium"
18295
+ });
18296
+ var statementCopyLayout = styledSection({
18297
+ children: styledContainer({
18298
+ children: [
18299
+ el(
18300
+ "div",
18301
+ {
18302
+ className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
18303
+ },
18304
+ [
18305
+ introHeading("rb-intro-title rb-max-w-xl"),
18306
+ stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18307
+ introBody(),
18308
+ introCtas("start")
18309
+ ])
18310
+ ]
18311
+ )
18312
+ ]
18313
+ }),
18314
+ baseClass: "",
18315
+ spacing: "medium"
18316
+ });
18317
+ var statementMediaLayout = styledSection({
18318
+ children: styledContainer({
18319
+ children: [
18320
+ el(
18321
+ "div",
18322
+ {
18323
+ 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"
18324
+ },
18325
+ [
18326
+ introHeading("rb-intro-title rb-max-w-xl"),
18327
+ stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18328
+ introBody(),
18329
+ introCtas("start")
18330
+ ]),
18331
+ el("div", { className: "rb-intro-media-wrap rb-w-full" }, [introMedia], when("content.media"))
18332
+ ]
18333
+ )
18334
+ ]
18335
+ }),
18336
+ baseClass: "",
18337
+ spacing: "medium"
18338
+ });
18339
+ var mediaCopyLayout = styledSection({
18340
+ children: styledContainer({
18341
+ children: [
18342
+ responsiveTwoColumn({
18343
+ image: el("div", { className: "rb-intro-media-wrap rb-w-full" }, [introMedia]),
18344
+ text: introCopyStack({
18345
+ className: "rb-intro-copy rb-max-w-xl",
18346
+ headingClassName: "rb-intro-title"
18347
+ }),
18348
+ ratioFrom: "content.ratio",
18349
+ imagePositionFrom: "content.imagePosition",
18350
+ gapFrom: "content.gap",
18351
+ gapFallback: "comfortable",
18352
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
18353
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-center"
18354
+ })
18355
+ ]
18356
+ }),
18357
+ baseClass: "",
18358
+ spacing: "medium"
18359
+ });
18360
+ var introConfig = {
18361
+ id: "block.intro",
18362
+ title: "Intro",
18363
+ category: "layout",
18364
+ includeContainerStyles: true,
18365
+ titleSource: "title",
18366
+ additionalFields: [
18367
+ {
18368
+ id: "title",
18369
+ type: "text",
18370
+ label: "Statement",
18371
+ required: false,
18372
+ multiline: true,
18373
+ maxLength: 160
18374
+ },
18375
+ {
18376
+ id: "body",
18377
+ type: "richText",
18378
+ label: "Text",
18379
+ required: true,
18380
+ ui: {
18381
+ richTextVariant: "limited"
18382
+ }
18383
+ },
18384
+ {
18385
+ id: "media",
18386
+ type: "media",
18387
+ label: "Media",
18388
+ required: false,
18389
+ mediaKinds: ["image"],
18390
+ ui: {
18391
+ intent: "content",
18392
+ visibleWhen: { field: "variant", notEquals: "statement-copy" }
18393
+ }
18394
+ },
18395
+ createImagePositionField({
18396
+ id: "imagePosition",
18397
+ label: "Image position",
18398
+ defaultValue: "left",
18399
+ uiIntent: "display",
18400
+ visibleWhen: { field: "variant", equals: "media-copy" }
18401
+ }),
18402
+ {
18403
+ id: "gap",
18404
+ type: "select",
18405
+ label: "Gap between media and text",
18406
+ required: false,
18407
+ defaultValue: "comfortable",
18408
+ multiple: false,
18409
+ options: [
18410
+ { value: "none", label: "None" },
18411
+ { value: "compact", label: "Compact" },
18412
+ { value: "cozy", label: "Cozy" },
18413
+ { value: "medium", label: "Medium" },
18414
+ { value: "comfortable", label: "Comfortable" },
18415
+ { value: "spacious", label: "Spacious" }
18416
+ ],
18417
+ ui: {
18418
+ intent: "display",
18419
+ visibleWhen: { field: "variant", equals: "media-copy" }
18420
+ }
18421
+ },
18422
+ createImageColSizeField({
18423
+ id: "ratio",
18424
+ label: "Media column size",
18425
+ defaultValue: "1/2",
18426
+ uiIntent: "display",
18427
+ visibleWhen: { field: "variant", equals: "media-copy" }
18428
+ }),
18429
+ createAspectRatioField({
18430
+ id: "aspectRatio",
18431
+ label: "Media aspect ratio",
18432
+ description: "Crop media to a consistent aspect ratio.",
18433
+ defaultValue: "auto",
18434
+ visibleWhen: { field: "media", notEquals: null }
18435
+ }),
18436
+ createCtasRepeater({
18437
+ label: "Calls to action",
18438
+ itemLabel: "CTA",
18439
+ maxItems: 2
16870
18440
  })
16871
18441
  ],
16872
- layout: classicLayout,
18442
+ layout: centeredCopyLayout,
16873
18443
  variants: {
16874
- classic: classicLayout,
16875
- micro: microLayout,
16876
- split: splitLayout,
16877
- splitReverse: splitReverseLayout
18444
+ "centered-copy": centeredCopyLayout,
18445
+ "statement-copy": statementCopyLayout,
18446
+ "statement-media": statementMediaLayout,
18447
+ "media-copy": mediaCopyLayout
16878
18448
  },
16879
- defaultVariant: "classic",
16880
- description: "Hero section with headline, subtitle, and repeatable CTAs.",
16881
- tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
16882
- icon: "Sparkles",
16883
- styleTokens: {
16884
- typography: "display",
16885
- spacing: "xl"
16886
- }
18449
+ defaultVariant: "statement-copy",
18450
+ variantOptions: {
18451
+ "centered-copy": {
18452
+ label: "Centered copy",
18453
+ description: "A focused intro with centered text and optional calls to action."
18454
+ },
18455
+ "statement-copy": {
18456
+ label: "Statement and copy",
18457
+ description: "A large statement on the left with supporting copy on the right."
18458
+ },
18459
+ "statement-media": {
18460
+ label: "Statement, copy and media",
18461
+ description: "A three-part intro with statement, copy and a small image."
18462
+ },
18463
+ "media-copy": {
18464
+ label: "Media and copy",
18465
+ description: "A compact media/text intro for softer transitions after a hero."
18466
+ }
18467
+ },
18468
+ description: "A flexible introductory section for statement copy, supporting text, media, and CTAs.",
18469
+ tags: ["intro", "introduction", "about", "welcome", "statement", "media", "text"],
18470
+ icon: "PanelTopOpen"
16887
18471
  };
16888
- var heroManifest = createBlockManifest(heroConfig);
16889
- var heroBlockDefinition = {
16890
- manifest: heroManifest
18472
+ var introManifest = createBlockManifest(introConfig);
18473
+ var introBlockDefinition = {
18474
+ manifest: introManifest
16891
18475
  };
16892
18476
 
16893
18477
  // ../blocks/src/system/blocks/body-text.ts
@@ -17733,6 +19317,37 @@ var faqComposition = composeFragments([
17733
19317
  { fragment: faqHeadingFragment, fieldPriority: 0 },
17734
19318
  { fragment: faqAccordionFragment, fieldPriority: 1 }
17735
19319
  ]);
19320
+ function fragmentLayoutNode(layout) {
19321
+ return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
19322
+ }
19323
+ function isNodeDefinitionArray(layout) {
19324
+ return Array.isArray(layout);
19325
+ }
19326
+ var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
19327
+ var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
19328
+ var defaultLayout = styledSection({
19329
+ children: styledContainer({
19330
+ baseClassName: "rb-relative rb-isolate",
19331
+ children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, faqComposition.layout)
19332
+ }),
19333
+ baseClass: ""
19334
+ });
19335
+ var twoColumnLayout = styledSection({
19336
+ children: styledContainer({
19337
+ baseClassName: "rb-relative rb-isolate",
19338
+ children: el(
19339
+ "div",
19340
+ {
19341
+ className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19342
+ },
19343
+ [
19344
+ el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
19345
+ el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
19346
+ ]
19347
+ )
19348
+ }),
19349
+ baseClass: ""
19350
+ });
17736
19351
  var faqManifest = createBlockManifest({
17737
19352
  id: "block.faq",
17738
19353
  title: "FAQ",
@@ -17749,13 +19364,22 @@ var faqManifest = createBlockManifest({
17749
19364
  label: "FAQ item styles"
17750
19365
  })
17751
19366
  ],
17752
- layout: styledSection({
17753
- children: styledContainer({
17754
- baseClassName: "rb-relative rb-isolate",
17755
- children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, faqComposition.layout)
17756
- }),
17757
- baseClass: ""
17758
- }),
19367
+ layout: defaultLayout,
19368
+ variants: {
19369
+ default: defaultLayout,
19370
+ "two-column": twoColumnLayout
19371
+ },
19372
+ defaultVariant: "default",
19373
+ variantOptions: {
19374
+ default: {
19375
+ label: "Default",
19376
+ description: "A centered heading above one FAQ accordion."
19377
+ },
19378
+ "two-column": {
19379
+ label: "Two column",
19380
+ description: "A left heading column with FAQ items on the right."
19381
+ }
19382
+ },
17759
19383
  description: "Accordion of frequently asked questions and answers.",
17760
19384
  tags: ["faq", "questions", "answers", "help", "support", "accordion", "q&a"],
17761
19385
  icon: "HelpCircle"
@@ -18405,7 +20029,8 @@ function resolveBackgroundVisualStyles(backgroundColor, tokens, defaultToken = "
18405
20029
  function resolveHeaderVisualStyles(header, tokens) {
18406
20030
  const navContainerType = header?.navContainer?.type ?? "none";
18407
20031
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
18408
- if (hasContainedNav) {
20032
+ const hasTransparentVariant = header?.variant === "transparent" || header?.variant === "floating";
20033
+ if (hasContainedNav || hasTransparentVariant) {
18409
20034
  return {
18410
20035
  backgroundToken: "transparent",
18411
20036
  paletteHex: null,
@@ -18463,10 +20088,7 @@ var headerRootClassTransform = {
18463
20088
  const navContainerType = header?.navContainer?.type ?? "none";
18464
20089
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
18465
20090
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
18466
- const classes = [
18467
- config.base,
18468
- backgroundClass
18469
- ];
20091
+ const classes = [config.base, backgroundClass];
18470
20092
  if (!hasContainedNav) {
18471
20093
  if (config.blur) classes.push(config.blur);
18472
20094
  if (config.blurSupport) classes.push(config.blurSupport);
@@ -18481,7 +20103,12 @@ var headerRootClassTransform = {
18481
20103
  if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
18482
20104
  classes.push(config.shrink);
18483
20105
  }
18484
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
20106
+ const VALID_VARIANTS = [
20107
+ "classic",
20108
+ "centered",
20109
+ "transparent",
20110
+ "floating"
20111
+ ];
18485
20112
  const variant = header?.variant;
18486
20113
  if (variant && VALID_VARIANTS.includes(variant)) {
18487
20114
  classes.push(`header-variant-${variant}`);
@@ -18534,6 +20161,17 @@ var headerRootStyleTransform = {
18534
20161
  return mergeStyles(...styleParts);
18535
20162
  }
18536
20163
  };
20164
+ var headerSectionBackgroundTransform = {
20165
+ id: "layout.headerSectionBackground",
20166
+ kind: "string",
20167
+ summary: "Resolve the inner site-header section background token",
20168
+ run: (value) => {
20169
+ const header = asPartialObject(value);
20170
+ const navContainerType = header?.navContainer?.type ?? "none";
20171
+ const usesTransparentRoot = header?.variant === "transparent" || header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill";
20172
+ return usesTransparentRoot ? "raw:transparent" : "background";
20173
+ }
20174
+ };
18537
20175
  var footerRootStyleTransform = {
18538
20176
  id: "layout.footerRootStyle",
18539
20177
  kind: "formatter",
@@ -18792,6 +20430,7 @@ var layoutTransforms = [
18792
20430
  headerRootClassTransform,
18793
20431
  footerRootClassTransform,
18794
20432
  headerRootStyleTransform,
20433
+ headerSectionBackgroundTransform,
18795
20434
  footerRootStyleTransform,
18796
20435
  footerBottomBarClassTransform,
18797
20436
  footerBottomBarContainerClassTransform,
@@ -19090,15 +20729,21 @@ var mobileCta = ctaButton({
19090
20729
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
19091
20730
  {
19092
20731
  type: "div",
19093
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
20732
+ props: {
20733
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
20734
+ }
19094
20735
  },
19095
20736
  {
19096
20737
  type: "div",
19097
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
20738
+ props: {
20739
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
20740
+ }
19098
20741
  },
19099
20742
  {
19100
20743
  type: "div",
19101
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
20744
+ props: {
20745
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
20746
+ }
19102
20747
  }
19103
20748
  ]);
19104
20749
  var mobileToggleButton = {
@@ -19281,31 +20926,12 @@ var floatingLayout = inline(
19281
20926
  ],
19282
20927
  when("$root.theme.header.variant", { equals: "floating" })
19283
20928
  );
19284
- var editorialLayout = stack(
19285
- {
19286
- gap: "md",
19287
- align: "center",
19288
- className: bindProp("$root.theme.header.maxWidth", {
19289
- transforms: pipe(
19290
- tx("layout.maxWidthClass", {
19291
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
19292
- })
19293
- ),
19294
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
19295
- })
19296
- },
19297
- [
19298
- centeredLogoRow,
19299
- createNavRow(
19300
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
19301
- "center"
19302
- )
19303
- ],
19304
- when("$root.theme.header.variant", { equals: "editorial" })
19305
- );
19306
20929
  var headerLayout = headerSection(
19307
20930
  {
19308
- background: "background",
20931
+ background: bindProp("$root.theme.header", {
20932
+ transforms: pipe(tx("layout.headerSectionBackground")),
20933
+ fallback: "background"
20934
+ }),
19309
20935
  allowOverflow: true,
19310
20936
  className: bindProp("$root.theme.header", {
19311
20937
  transforms: pipe(tx("layout.headerRootClass")),
@@ -19313,10 +20939,7 @@ var headerLayout = headerSection(
19313
20939
  }),
19314
20940
  style: bindProp("$root.theme.header", {
19315
20941
  transforms: pipe(tx("layout.headerRootStyle")),
19316
- fallback: mergeStyles(
19317
- textColorStyle("text"),
19318
- borderColorStyle("border")
19319
- )
20942
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
19320
20943
  })
19321
20944
  },
19322
20945
  [
@@ -19325,7 +20948,6 @@ var headerLayout = headerSection(
19325
20948
  centeredLayout,
19326
20949
  transparentLayout,
19327
20950
  floatingLayout,
19328
- editorialLayout,
19329
20951
  mobileOverlay
19330
20952
  ],
19331
20953
  props({
@@ -20140,79 +21762,298 @@ var collectionLayout = styledSection({
20140
21762
  { gap: "md" }
20141
21763
  ),
20142
21764
  baseClass: "",
20143
- spacing: "comfortable"
21765
+ spacing: "comfortable"
21766
+ });
21767
+ var collectionManifest = createBlockManifest({
21768
+ id: "block.collection",
21769
+ title: "Collection",
21770
+ category: "layout",
21771
+ additionalFields: [
21772
+ parseFieldDefinition({
21773
+ id: "layout",
21774
+ type: "select",
21775
+ label: "Layout",
21776
+ defaultValue: "grid",
21777
+ options: [
21778
+ { value: "grid", label: "Grid" },
21779
+ { value: "stack", label: "Stack" }
21780
+ ],
21781
+ ui: { intent: "display" }
21782
+ }),
21783
+ parseFieldDefinition({
21784
+ id: "columns",
21785
+ type: "select",
21786
+ label: "Columns",
21787
+ description: "Number of columns in the grid layout.",
21788
+ defaultValue: "3",
21789
+ options: [
21790
+ { value: "2", label: "2 columns" },
21791
+ { value: "3", label: "3 columns" },
21792
+ { value: "4", label: "4 columns" }
21793
+ ],
21794
+ ui: {
21795
+ intent: "display",
21796
+ visibleWhen: { field: "layout", equals: "grid" }
21797
+ }
21798
+ }),
21799
+ parseFieldDefinition({
21800
+ id: "gap",
21801
+ type: "select",
21802
+ label: "Gap",
21803
+ defaultValue: "medium",
21804
+ options: [
21805
+ { value: "none", label: "None" },
21806
+ { value: "compact", label: "Compact" },
21807
+ { value: "cozy", label: "Cozy" },
21808
+ { value: "medium", label: "Medium" },
21809
+ { value: "comfortable", label: "Comfortable" },
21810
+ { value: "spacious", label: "Spacious" }
21811
+ ],
21812
+ ui: { intent: "display" }
21813
+ }),
21814
+ fragmentsToRepeaterField(
21815
+ "items",
21816
+ "Items",
21817
+ collectionFragments,
21818
+ {
21819
+ minItems: 0,
21820
+ maxItems: 50,
21821
+ itemLabel: "Item",
21822
+ description: "Add items to this collection."
21823
+ }
21824
+ ),
21825
+ cardStylesField({
21826
+ id: "_cardStyles",
21827
+ label: "Item styles"
21828
+ })
21829
+ ],
21830
+ layout: collectionLayout,
21831
+ description: "Repeat items in a grid or stack layout.",
21832
+ tags: ["collection", "grid", "stack", "repeater"],
21833
+ icon: "LayoutList",
21834
+ styleTokens: { spacing: "lg" }
21835
+ });
21836
+ var collectionBlockDefinition = {
21837
+ manifest: collectionManifest
21838
+ };
21839
+
21840
+ // ../blocks/src/system/blocks/feature-cards.ts
21841
+ function grid3(props2, children) {
21842
+ return el("grid", props2 ?? void 0, children ?? void 0);
21843
+ }
21844
+ var sectionHeading = stack(
21845
+ { gap: "sm", className: "rb-feature-cards-heading rb-mx-auto rb-max-w-3xl rb-text-center" },
21846
+ [
21847
+ text(
21848
+ {
21849
+ as: "h2",
21850
+ className: "rb-feature-cards-title rb-text-center"
21851
+ },
21852
+ when("content.title"),
21853
+ bind("content.title")
21854
+ ),
21855
+ richText(
21856
+ {
21857
+ className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
21858
+ style: textColorStyle("mutedText")
21859
+ },
21860
+ when("content.description"),
21861
+ bind("content.description")
21862
+ )
21863
+ ]
21864
+ );
21865
+ var featureCard = styledCard(
21866
+ [
21867
+ media(
21868
+ {
21869
+ className: "rb-feature-card-media rb-w-full rb-h-auto rb-object-cover",
21870
+ style: {
21871
+ aspectRatio: { $bind: { from: "card.aspectRatio" } }
21872
+ }
21873
+ },
21874
+ when("card.media"),
21875
+ bind("card.media")
21876
+ ),
21877
+ stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
21878
+ text(
21879
+ {
21880
+ as: "h3",
21881
+ className: "rb-feature-card-title"
21882
+ },
21883
+ bind("card.title")
21884
+ ),
21885
+ richText(
21886
+ {
21887
+ className: "rb-feature-card-body rb-prose rb-max-w-none",
21888
+ style: textColorStyle("mutedText")
21889
+ },
21890
+ when("card.body"),
21891
+ bind("card.body")
21892
+ ),
21893
+ ctaRow({
21894
+ collectionPath: "ctas",
21895
+ itemName: "cta",
21896
+ gap: "sm",
21897
+ justify: "start",
21898
+ containerClassName: "rb-mt-auto"
21899
+ })
21900
+ ])
21901
+ ],
21902
+ {
21903
+ stylesFrom: "content._cardStyles",
21904
+ backgroundFrom: "content._cardStyles.background",
21905
+ baseClassName: "rb-feature-card rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-h-full rb-flex-col"
21906
+ },
21907
+ repeat("content.cards", "card")
21908
+ );
21909
+ var cardsLayout = styledSection({
21910
+ children: styledContainer({
21911
+ rootType: "stack",
21912
+ rootProps: { gap: "xl" },
21913
+ children: [
21914
+ sectionHeading,
21915
+ grid3(
21916
+ {
21917
+ cols: {
21918
+ $bind: {
21919
+ from: "content.columns",
21920
+ fallback: 3,
21921
+ coerce: "number"
21922
+ }
21923
+ },
21924
+ gap: "lg"
21925
+ },
21926
+ [featureCard]
21927
+ )
21928
+ ]
21929
+ }),
21930
+ baseClass: "",
21931
+ spacing: "medium"
20144
21932
  });
20145
- var collectionManifest = createBlockManifest({
20146
- id: "block.collection",
20147
- title: "Collection",
21933
+ var featureCardsConfig = {
21934
+ id: "block.feature-cards",
21935
+ title: "Feature Cards",
20148
21936
  category: "layout",
21937
+ includeContainerStyles: true,
21938
+ titleSource: "title",
20149
21939
  additionalFields: [
20150
- parseFieldDefinition({
20151
- id: "layout",
20152
- type: "select",
20153
- label: "Layout",
20154
- defaultValue: "grid",
20155
- options: [
20156
- { value: "grid", label: "Grid" },
20157
- { value: "stack", label: "Stack" }
20158
- ],
20159
- ui: { intent: "display" }
20160
- }),
20161
- parseFieldDefinition({
21940
+ {
21941
+ id: "title",
21942
+ type: "text",
21943
+ label: "Title",
21944
+ required: false,
21945
+ multiline: false,
21946
+ maxLength: 120
21947
+ },
21948
+ {
21949
+ id: "description",
21950
+ type: "richText",
21951
+ label: "Description",
21952
+ required: false,
21953
+ ui: {
21954
+ richTextVariant: "limited"
21955
+ }
21956
+ },
21957
+ {
20162
21958
  id: "columns",
20163
21959
  type: "select",
20164
21960
  label: "Columns",
20165
- description: "Number of columns in the grid layout.",
21961
+ required: false,
20166
21962
  defaultValue: "3",
21963
+ multiple: false,
20167
21964
  options: [
20168
21965
  { value: "2", label: "2 columns" },
20169
21966
  { value: "3", label: "3 columns" },
20170
21967
  { value: "4", label: "4 columns" }
20171
21968
  ],
20172
- ui: {
20173
- intent: "display",
20174
- visibleWhen: { field: "layout", equals: "grid" }
20175
- }
20176
- }),
20177
- parseFieldDefinition({
20178
- id: "gap",
20179
- type: "select",
20180
- label: "Gap",
20181
- defaultValue: "medium",
20182
- options: [
20183
- { value: "none", label: "None" },
20184
- { value: "compact", label: "Compact" },
20185
- { value: "cozy", label: "Cozy" },
20186
- { value: "medium", label: "Medium" },
20187
- { value: "comfortable", label: "Comfortable" },
20188
- { value: "spacious", label: "Spacious" }
20189
- ],
20190
21969
  ui: { intent: "display" }
20191
- }),
20192
- fragmentsToRepeaterField(
20193
- "items",
20194
- "Items",
20195
- collectionFragments,
20196
- {
20197
- minItems: 0,
20198
- maxItems: 50,
20199
- itemLabel: "Item",
20200
- description: "Add items to this collection."
21970
+ },
21971
+ {
21972
+ id: "cards",
21973
+ type: "repeater",
21974
+ label: "Cards",
21975
+ required: false,
21976
+ minItems: 1,
21977
+ maxItems: 8,
21978
+ itemLabel: "Card",
21979
+ itemLabelSource: "title",
21980
+ allowConversion: true,
21981
+ ui: {
21982
+ intent: "content"
21983
+ },
21984
+ schema: {
21985
+ fields: [
21986
+ {
21987
+ id: "media",
21988
+ type: "media",
21989
+ label: "Image",
21990
+ required: false,
21991
+ mediaKinds: ["image"]
21992
+ },
21993
+ createAspectRatioField({
21994
+ id: "aspectRatio",
21995
+ label: "Image aspect ratio",
21996
+ defaultValue: "4/3",
21997
+ visibleWhen: { field: "media", notEquals: null }
21998
+ }),
21999
+ {
22000
+ id: "title",
22001
+ type: "text",
22002
+ label: "Title",
22003
+ required: true,
22004
+ multiline: false,
22005
+ maxLength: 120
22006
+ },
22007
+ {
22008
+ id: "body",
22009
+ type: "richText",
22010
+ label: "Text",
22011
+ required: false,
22012
+ ui: {
22013
+ richTextVariant: "limited"
22014
+ }
22015
+ },
22016
+ createCtasRepeater({
22017
+ label: "Calls to action",
22018
+ itemLabel: "CTA",
22019
+ maxItems: 1,
22020
+ button: {
22021
+ variants: [
22022
+ { value: "primary", label: "Primary" },
22023
+ { value: "secondary", label: "Secondary" },
22024
+ { value: "outline", label: "Outline" },
22025
+ { value: "ghost", label: "Ghost" },
22026
+ { value: "link", label: "Link" }
22027
+ ],
22028
+ defaultVariant: "ghost"
22029
+ }
22030
+ })
22031
+ ]
20201
22032
  }
20202
- ),
22033
+ },
20203
22034
  cardStylesField({
20204
22035
  id: "_cardStyles",
20205
- label: "Item styles"
22036
+ label: "Card styles"
20206
22037
  })
20207
22038
  ],
20208
- layout: collectionLayout,
20209
- description: "Repeat items in a grid or stack layout.",
20210
- tags: ["collection", "grid", "stack", "repeater"],
20211
- icon: "LayoutList",
20212
- styleTokens: { spacing: "lg" }
20213
- });
20214
- var collectionBlockDefinition = {
20215
- manifest: collectionManifest
22039
+ layout: cardsLayout,
22040
+ variants: {
22041
+ cards: cardsLayout
22042
+ },
22043
+ defaultVariant: "cards",
22044
+ variantOptions: {
22045
+ cards: {
22046
+ label: "Cards",
22047
+ description: "A responsive grid of image cards with optional calls to action."
22048
+ }
22049
+ },
22050
+ description: "A card grid for offerings, services, classes, benefits, or featured links.",
22051
+ tags: ["cards", "features", "offerings", "services", "classes", "grid", "links"],
22052
+ icon: "PanelsTopLeft"
22053
+ };
22054
+ var featureCardsManifest = createBlockManifest(featureCardsConfig);
22055
+ var featureCardsBlockDefinition = {
22056
+ manifest: featureCardsManifest
20216
22057
  };
20217
22058
 
20218
22059
  // ../blocks/src/system/fields/carousel.ts
@@ -20300,69 +22141,6 @@ function createCarouselBehaviorFields(options = {}) {
20300
22141
  return fields3;
20301
22142
  }
20302
22143
 
20303
- // ../blocks/src/system/fields/imageLayout.ts
20304
- function createImageColSizeField(options = {}) {
20305
- const {
20306
- id = "imageColSize",
20307
- label = "Image column size",
20308
- description = "Controls how large the image/thumbnail column is at desktop breakpoints.",
20309
- defaultValue = "1/3",
20310
- uiIntent = "display",
20311
- visibleWhen
20312
- } = options;
20313
- return {
20314
- id,
20315
- type: "select",
20316
- label,
20317
- description,
20318
- required: false,
20319
- defaultValue,
20320
- multiple: false,
20321
- options: [
20322
- { value: "1/4", label: "Small (1/4)" },
20323
- { value: "1/3", label: "Medium (1/3)" },
20324
- { value: "2/5", label: "Large (2/5)" },
20325
- { value: "1/2", label: "Extra large (1/2)" },
20326
- { value: "2/3", label: "Huge (2/3)" }
20327
- ],
20328
- ui: {
20329
- intent: uiIntent,
20330
- ...visibleWhen ? { visibleWhen } : {}
20331
- }
20332
- };
20333
- }
20334
- function createImagePositionField(options = {}) {
20335
- const {
20336
- id = "imagePosition",
20337
- label = "Image position",
20338
- description = "Choose which side the image appears on.",
20339
- defaultValue = "left",
20340
- includeAlternate = false,
20341
- uiIntent = "display",
20342
- visibleWhen
20343
- } = options;
20344
- const positionOptions = [
20345
- { value: "left", label: "Left" },
20346
- { value: "right", label: "Right" },
20347
- ...includeAlternate ? [{ value: "alternate", label: "Alternate" }] : []
20348
- ];
20349
- return {
20350
- id,
20351
- type: "select",
20352
- label,
20353
- description,
20354
- required: false,
20355
- defaultValue,
20356
- multiple: false,
20357
- // Spread to get a mutable array type without unsafe casts.
20358
- options: [...positionOptions],
20359
- ui: {
20360
- intent: uiIntent,
20361
- ...visibleWhen ? { visibleWhen } : {}
20362
- }
20363
- };
20364
- }
20365
-
20366
22144
  // ../blocks/src/system/blocks/media-text.ts
20367
22145
  var mediaTextFrameCapability = defineFrameCapability([
20368
22146
  "plain",
@@ -20486,26 +22264,13 @@ var mediaTextManifest = createBlockManifest({
20486
22264
  },
20487
22265
  ui: { intent: "behavior" }
20488
22266
  }),
20489
- {
22267
+ createAspectRatioField({
20490
22268
  id: "aspectRatio",
20491
- type: "select",
20492
22269
  label: "Media aspect ratio",
20493
22270
  description: "Crop media to a consistent aspect ratio.",
20494
- required: false,
20495
22271
  defaultValue: "auto",
20496
- multiple: false,
20497
- options: [
20498
- { value: "auto", label: "Auto (original)" },
20499
- { value: "16/9", label: "16:9 (Landscape)" },
20500
- { value: "4/3", label: "4:3 (Standard)" },
20501
- { value: "1/1", label: "1:1 (Square)" },
20502
- { value: "3/4", label: "3:4 (Portrait)" }
20503
- ],
20504
- ui: {
20505
- intent: "display",
20506
- visibleWhen: { field: "images", notEquals: null }
20507
- }
20508
- },
22272
+ visibleWhen: { field: "images", notEquals: null }
22273
+ }),
20509
22274
  {
20510
22275
  id: "text",
20511
22276
  type: "richText",
@@ -20635,7 +22400,7 @@ var mediaTextManifest = createBlockManifest({
20635
22400
  whenImagesLength(0)
20636
22401
  );
20637
22402
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
20638
- const defaultLayout = styledSection({
22403
+ const defaultLayout2 = styledSection({
20639
22404
  children: styledContainer({
20640
22405
  rootType: "stack",
20641
22406
  rootProps: { gap: "lg" },
@@ -20667,9 +22432,9 @@ var mediaTextManifest = createBlockManifest({
20667
22432
  spacing: "medium"
20668
22433
  });
20669
22434
  return {
20670
- layout: defaultLayout,
22435
+ layout: defaultLayout2,
20671
22436
  variants: {
20672
- default: defaultLayout
22437
+ default: defaultLayout2
20673
22438
  },
20674
22439
  defaultVariant: "default",
20675
22440
  variantOptions: {
@@ -24069,7 +25834,7 @@ var embedBlockDefinition = {
24069
25834
  };
24070
25835
 
24071
25836
  // ../blocks/src/system/blocks/image-gallery.ts
24072
- var grid3 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
25837
+ var grid4 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
24073
25838
  var galleryContainer = (children, opts) => {
24074
25839
  const gap = opts?.gap ?? "md";
24075
25840
  const withExtraClass = (baseClass) => opts?.className ? `${baseClass} ${opts.className}` : baseClass;
@@ -24149,7 +25914,7 @@ var galleryItem = (options) => stack(
24149
25914
  ],
24150
25915
  repeat("content.images", "item")
24151
25916
  );
24152
- var gridLayout3 = grid3(
25917
+ var gridLayout3 = grid4(
24153
25918
  {
24154
25919
  className: "rb-grid rb-grid-cols-1 rb-gap-4 rb-sm-grid-cols-2 rb-md-grid-cols-3"
24155
25920
  },
@@ -24752,7 +26517,7 @@ var imageGalleryBlockDefinition = {
24752
26517
  };
24753
26518
 
24754
26519
  // ../blocks/src/system/blocks/video-grid.ts
24755
- var grid4 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
26520
+ var grid5 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
24756
26521
  var videoItem = (options) => stack(
24757
26522
  { gap: "xs", className: options.containerClassName },
24758
26523
  [
@@ -24802,7 +26567,7 @@ var gridColumnsClass = (columns) => {
24802
26567
  return "rb-grid rb-grid-cols-1 rb-gap-6 rb-sm-grid-cols-2 rb-md-grid-cols-3";
24803
26568
  }
24804
26569
  };
24805
- var createGridLayout = (columns) => grid4(
26570
+ var createGridLayout = (columns) => grid5(
24806
26571
  {
24807
26572
  className: gridColumnsClass(columns)
24808
26573
  },
@@ -27966,6 +29731,40 @@ var systemBlockDefinitionsRaw = [
27966
29731
  })
27967
29732
  ]
27968
29733
  })),
29734
+ withDesignCapability("block.intro", introBlockDefinition, declareBlockDesignCapability({
29735
+ sectionSurfaces: "supported",
29736
+ contentFrames: ["plain", "panel"],
29737
+ itemSurfaces: "unsupported",
29738
+ headingDecorations: ["organic-squiggle"]
29739
+ }), defineBlockDesignMetadata({
29740
+ flow: bodyFlow,
29741
+ layoutProfiles: [
29742
+ layoutProfile({
29743
+ variantKey: "centered-copy",
29744
+ family: "centered",
29745
+ weight: "featured",
29746
+ bias: "soft"
29747
+ }),
29748
+ layoutProfile({
29749
+ variantKey: "statement-copy",
29750
+ family: "split",
29751
+ weight: "featured",
29752
+ bias: "merge"
29753
+ }),
29754
+ layoutProfile({
29755
+ variantKey: "statement-media",
29756
+ family: "media-text",
29757
+ weight: "featured",
29758
+ bias: "soft"
29759
+ }),
29760
+ layoutProfile({
29761
+ variantKey: "media-copy",
29762
+ family: "media-text",
29763
+ weight: "featured",
29764
+ bias: "soft"
29765
+ })
29766
+ ]
29767
+ })),
27969
29768
  withDesignCapability("block.body-text", bodyTextBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
27970
29769
  flow: bodyFlow,
27971
29770
  layoutProfiles: [
@@ -28026,9 +29825,17 @@ var systemBlockDefinitionsRaw = [
28026
29825
  flow: conversionFlow,
28027
29826
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
28028
29827
  })),
28029
- withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(panelAndItemsCapable(), standardEyebrowTreatments), defineBlockDesignMetadata({
29828
+ withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
29829
+ sectionSurfaces: "supported",
29830
+ contentFrames: ["plain", "panel"],
29831
+ itemSurfaces: "supported",
29832
+ accordionIconSets: ["plus", "chevron", "caret", "minimal-cross"]
29833
+ }), standardEyebrowTreatments), defineBlockDesignMetadata({
28030
29834
  flow: bodyFlow,
28031
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
29835
+ layoutProfiles: [
29836
+ layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
29837
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
29838
+ ]
28032
29839
  })),
28033
29840
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
28034
29841
  flow: siteChromeFlow,
@@ -28042,7 +29849,8 @@ var systemBlockDefinitionsRaw = [
28042
29849
  sectionSurfaces: "supported",
28043
29850
  contentFrames: ["plain", "panel"],
28044
29851
  itemSurfaces: "supported",
28045
- testimonialCardTreatments: ["default", "accent-quote"]
29852
+ testimonialCardTreatments: ["default", "accent-quote"],
29853
+ headingDecorations: ["short-center-rule"]
28046
29854
  }), defineBlockDesignMetadata({
28047
29855
  flow: proofFlow,
28048
29856
  layoutProfiles: [
@@ -28068,6 +29876,22 @@ var systemBlockDefinitionsRaw = [
28068
29876
  flow: offeringsFlow,
28069
29877
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
28070
29878
  })),
29879
+ withDesignCapability("block.feature-cards", featureCardsBlockDefinition, declareBlockDesignCapability({
29880
+ sectionSurfaces: "supported",
29881
+ contentFrames: ["plain", "panel"],
29882
+ itemSurfaces: "supported",
29883
+ headingDecorations: ["short-center-rule"]
29884
+ }), defineBlockDesignMetadata({
29885
+ flow: offeringsFlow,
29886
+ layoutProfiles: [
29887
+ layoutProfile({
29888
+ variantKey: "cards",
29889
+ family: "grid",
29890
+ weight: "standard",
29891
+ bias: "soft"
29892
+ })
29893
+ ]
29894
+ })),
28071
29895
  withDesignCapability("block.media-text", mediaTextBlockDefinition, mediaPanelCapable(), defineBlockDesignMetadata({
28072
29896
  flow: mediaFlow,
28073
29897
  layoutProfiles: [