@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
@@ -7467,6 +7467,47 @@ var eyebrowTreatmentValues = [
7467
7467
  "pill-bounce",
7468
7468
  "accent-pill-bounce"
7469
7469
  ];
7470
+ var visibleHeadingDecorationFamilyValues = [
7471
+ "organic-squiggle",
7472
+ "short-center-rule"
7473
+ ];
7474
+ var visibleHeadingDecorationPlacementValues = [
7475
+ "after-heading",
7476
+ "between-heading-and-body",
7477
+ "under-centered-heading"
7478
+ ];
7479
+ var headingDecorationOverrideValues = [
7480
+ "site-default",
7481
+ "on",
7482
+ "off"
7483
+ ];
7484
+ var headingDecorationColorTokenValues = [
7485
+ "text",
7486
+ "primary",
7487
+ "secondary",
7488
+ "accent",
7489
+ "border",
7490
+ "muted"
7491
+ ];
7492
+ var accordionIconSetValues = [
7493
+ "plus",
7494
+ "chevron",
7495
+ "caret",
7496
+ "minimal-cross"
7497
+ ];
7498
+ var accordionIconColorTokenValues = [
7499
+ "text",
7500
+ "muted",
7501
+ "primary",
7502
+ "secondary",
7503
+ "accent",
7504
+ "current"
7505
+ ];
7506
+ var accordionIconMotionValues = [
7507
+ "none",
7508
+ "rotate",
7509
+ "swap"
7510
+ ];
7470
7511
  function defineBlockDesignCapability(capability) {
7471
7512
  return {
7472
7513
  ...capability,
@@ -7476,7 +7517,9 @@ function defineBlockDesignCapability(capability) {
7476
7517
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
7477
7518
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
7478
7519
  tileTreatments: capability.tileTreatments ?? ["default"],
7479
- eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
7520
+ eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7521
+ ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
7522
+ ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
7480
7523
  };
7481
7524
  }
7482
7525
 
@@ -7667,6 +7710,25 @@ var blockAppearancePresets = [
7667
7710
  emphasis: "high"
7668
7711
  }
7669
7712
  }),
7713
+ defineBlockAppearancePreset({
7714
+ kind: "block-design",
7715
+ id: "intro-soft-earth-statement",
7716
+ target: "intro",
7717
+ label: "Soft Earth intro statement",
7718
+ blockKinds: ["block.intro"],
7719
+ design: {
7720
+ sectionSurface: "base",
7721
+ contentFrame: plainFrame,
7722
+ itemSurface: "none",
7723
+ transitionAfter: "soft-fade-short",
7724
+ emphasis: "high",
7725
+ headingDecoration: {
7726
+ family: "organic-squiggle",
7727
+ placement: "after-heading",
7728
+ colorToken: "primary"
7729
+ }
7730
+ }
7731
+ }),
7670
7732
  defineBlockAppearancePreset({
7671
7733
  kind: "block-design",
7672
7734
  id: "offerings-calm-list",
@@ -7681,6 +7743,25 @@ var blockAppearancePresets = [
7681
7743
  emphasis: "medium"
7682
7744
  }
7683
7745
  }),
7746
+ defineBlockAppearancePreset({
7747
+ kind: "block-design",
7748
+ id: "feature-cards-soft-earth-offerings",
7749
+ target: "feature-cards",
7750
+ label: "Soft Earth offering cards",
7751
+ blockKinds: ["block.feature-cards"],
7752
+ design: {
7753
+ sectionSurface: "base",
7754
+ contentFrame: plainFrame,
7755
+ itemSurface: "raised",
7756
+ transitionAfter: "none",
7757
+ emphasis: "high",
7758
+ headingDecoration: {
7759
+ family: "short-center-rule",
7760
+ placement: "under-centered-heading",
7761
+ colorToken: "primary"
7762
+ }
7763
+ }
7764
+ }),
7684
7765
  defineBlockAppearancePreset({
7685
7766
  kind: "block-design",
7686
7767
  id: "events-base-calendar",
@@ -7809,6 +7890,26 @@ var blockAppearancePresets = [
7809
7890
  testimonialCardTreatment: "accent-quote"
7810
7891
  }
7811
7892
  }),
7893
+ defineBlockAppearancePreset({
7894
+ kind: "block-design",
7895
+ id: "testimonials-soft-earth-proof-band",
7896
+ target: "testimonials",
7897
+ label: "Soft Earth proof band",
7898
+ blockKinds: ["block.testimonials"],
7899
+ design: {
7900
+ sectionSurface: "brand-depth-band",
7901
+ contentFrame: plainFrame,
7902
+ itemSurface: "none",
7903
+ transitionAfter: "soft-fade-short",
7904
+ emphasis: "high",
7905
+ testimonialCardTreatment: "accent-quote",
7906
+ headingDecoration: {
7907
+ family: "short-center-rule",
7908
+ placement: "under-centered-heading",
7909
+ colorToken: "border"
7910
+ }
7911
+ }
7912
+ }),
7812
7913
  defineBlockAppearancePreset({
7813
7914
  kind: "block-design",
7814
7915
  id: "faq-base-accordion",
@@ -7837,6 +7938,25 @@ var blockAppearancePresets = [
7837
7938
  emphasis: "low"
7838
7939
  }
7839
7940
  }),
7941
+ defineBlockAppearancePreset({
7942
+ kind: "block-design",
7943
+ id: "faq-soft-earth-two-column",
7944
+ target: "faq",
7945
+ label: "Soft Earth two-column FAQ",
7946
+ blockKinds: ["block.faq"],
7947
+ design: {
7948
+ sectionSurface: "base",
7949
+ contentFrame: plainFrame,
7950
+ itemSurface: "flat",
7951
+ transitionAfter: "none",
7952
+ emphasis: "medium",
7953
+ accordionIconTreatment: {
7954
+ iconSet: "plus",
7955
+ colorToken: "primary",
7956
+ motion: "swap"
7957
+ }
7958
+ }
7959
+ }),
7840
7960
  defineBlockAppearancePreset({
7841
7961
  kind: "block-design",
7842
7962
  id: "contact-form-panel",
@@ -8522,6 +8642,97 @@ var confidentChip = defineButtonPersonality({
8522
8642
  }
8523
8643
  });
8524
8644
 
8645
+ // ../theme-core/src/buttons/personalities/earth-pill.ts
8646
+ var earthPill = defineButtonPersonality({
8647
+ id: "earth-pill",
8648
+ name: "Earth Pill",
8649
+ description: "Compact terracotta pills with quiet primary-coloured ghost CTAs.",
8650
+ tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
8651
+ buttonSystem: {
8652
+ global: {
8653
+ cornerStyle: "pill",
8654
+ shadow: "low",
8655
+ textTransform: "none",
8656
+ fontWeight: 500,
8657
+ borderWidth: 1,
8658
+ hoverTransform: "lift",
8659
+ hoverColor: "none",
8660
+ typography: "body",
8661
+ paddingPreset: "default"
8662
+ },
8663
+ sizes: {
8664
+ sm: { padding: "0.5rem 1rem", fontSize: "text-sm" },
8665
+ md: { padding: "0.625rem 1.35rem" },
8666
+ lg: { padding: "0.75rem 1.65rem", fontSize: "text-lg" },
8667
+ xl: { padding: "0.875rem 2rem", fontSize: "text-xl" }
8668
+ },
8669
+ variants: [
8670
+ {
8671
+ id: "primary",
8672
+ name: "Primary",
8673
+ enabled: true,
8674
+ priority: 1,
8675
+ background: { type: "solid", colorToken: "primary" },
8676
+ textColorToken: "primaryForeground",
8677
+ borderRadius: "rounded-full",
8678
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
8679
+ effects: {
8680
+ hover: [
8681
+ { effectId: "lift", options: { translateY: "-1px" } },
8682
+ { effectId: "background-on-hover", options: { colorToken: "accent" } }
8683
+ ],
8684
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8685
+ }
8686
+ },
8687
+ {
8688
+ id: "secondary",
8689
+ name: "Secondary",
8690
+ enabled: true,
8691
+ priority: 2,
8692
+ background: { type: "transparent" },
8693
+ textColorToken: "primary",
8694
+ borderRadius: "rounded-full",
8695
+ border: { widthClass: "border", colorToken: "primary" },
8696
+ effects: {
8697
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
8698
+ }
8699
+ },
8700
+ {
8701
+ id: "outline",
8702
+ name: "Outline",
8703
+ enabled: true,
8704
+ priority: 3,
8705
+ background: { type: "transparent" },
8706
+ textColorToken: "text",
8707
+ borderRadius: "rounded-full",
8708
+ border: { widthClass: "border", colorToken: "border" },
8709
+ effects: {
8710
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surfaceAlt" } }]
8711
+ }
8712
+ },
8713
+ {
8714
+ id: "ghost",
8715
+ name: "Ghost",
8716
+ enabled: true,
8717
+ priority: 3,
8718
+ background: { type: "transparent" },
8719
+ textColorToken: "primary",
8720
+ borderRadius: "rounded-full",
8721
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8722
+ sizes: {
8723
+ sm: { padding: "0.25rem 0", fontSize: "text-sm" },
8724
+ md: { padding: "0.375rem 0" },
8725
+ lg: { padding: "0.5rem 0", fontSize: "text-lg" },
8726
+ xl: { padding: "0.625rem 0", fontSize: "text-xl" }
8727
+ },
8728
+ effects: {
8729
+ hover: [{ effectId: "opacity-reduce", options: { reduction: 25 } }]
8730
+ }
8731
+ }
8732
+ ]
8733
+ }
8734
+ });
8735
+
8525
8736
  // ../theme-core/src/buttons/personalities/editorial-link.ts
8526
8737
  var editorialLink = defineButtonPersonality({
8527
8738
  id: "editorial-link",
@@ -8980,6 +9191,7 @@ var softPill = defineButtonPersonality({
8980
9191
  // ../theme-core/src/buttons/personalities/index.ts
8981
9192
  var buttonPersonalities = [
8982
9193
  softPill,
9194
+ earthPill,
8983
9195
  confidentChip,
8984
9196
  editorialLink,
8985
9197
  pebble,
@@ -9621,8 +9833,19 @@ var headingTypographyStyleSchema = typographyStyleSchema.extend({
9621
9833
  colorToken: themeColorTokenSchema.nullable().optional()
9622
9834
  });
9623
9835
  var proseLinkUnderlineStyleSchema = z21.enum(["solid", "dotted", "dashed"]);
9624
- var proseLinkUnderlineThicknessSchema = z21.enum(["auto", "fromFont", "thin", "medium", "thick"]);
9625
- var proseLinkUnderlineOffsetSchema = z21.enum(["auto", "tight", "normal", "loose"]);
9836
+ var proseLinkUnderlineThicknessSchema = z21.enum([
9837
+ "auto",
9838
+ "fromFont",
9839
+ "thin",
9840
+ "medium",
9841
+ "thick"
9842
+ ]);
9843
+ var proseLinkUnderlineOffsetSchema = z21.enum([
9844
+ "auto",
9845
+ "tight",
9846
+ "normal",
9847
+ "loose"
9848
+ ]);
9626
9849
  var proseLinkStyleSchema = z21.object({
9627
9850
  colorToken: themeColorTokenSchema.optional(),
9628
9851
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -9633,7 +9856,14 @@ var proseLinkStyleSchema = z21.object({
9633
9856
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
9634
9857
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
9635
9858
  });
9636
- var semanticSpacingSchema = z21.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
9859
+ var semanticSpacingSchema = z21.enum([
9860
+ "none",
9861
+ "compact",
9862
+ "cozy",
9863
+ "medium",
9864
+ "comfortable",
9865
+ "spacious"
9866
+ ]);
9637
9867
  var boxRoundedSchema = z21.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
9638
9868
  var boxBackgroundOverlaySchema = z21.object({
9639
9869
  type: z21.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -9655,12 +9885,36 @@ var boxBackgroundSchema = z21.object({
9655
9885
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
9656
9886
  headingColor: tokenOrCssColorValueSchema.nullable().optional()
9657
9887
  });
9888
+ var noHeadingDecorationSchema = z21.object({
9889
+ family: z21.literal("none"),
9890
+ placement: z21.literal("none")
9891
+ });
9892
+ var visibleHeadingDecorationSchema = z21.object({
9893
+ family: z21.enum(visibleHeadingDecorationFamilyValues),
9894
+ placement: z21.enum(visibleHeadingDecorationPlacementValues),
9895
+ colorToken: z21.enum(headingDecorationColorTokenValues).optional()
9896
+ });
9897
+ var headingDecorationSchema = z21.union([
9898
+ noHeadingDecorationSchema,
9899
+ visibleHeadingDecorationSchema
9900
+ ]);
9901
+ var accordionIconTreatmentSchema = z21.object({
9902
+ iconSet: z21.enum(accordionIconSetValues),
9903
+ colorToken: z21.enum(accordionIconColorTokenValues),
9904
+ openColorToken: z21.enum(accordionIconColorTokenValues).optional(),
9905
+ motion: z21.enum(accordionIconMotionValues)
9906
+ });
9658
9907
  var sectionStylesOverrideSchema = z21.object({
9659
9908
  background: boxBackgroundSchema.nullable().optional(),
9660
9909
  spacing: semanticSpacingSchema.nullable().optional(),
9661
9910
  minHeight: z21.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
9662
9911
  tileTreatment: z21.enum(tileTreatmentValues).nullable().optional(),
9663
- eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional()
9912
+ eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional(),
9913
+ headingDecoration: headingDecorationSchema.nullable().optional(),
9914
+ // Author-level override consumed by later block/editor rendering phases.
9915
+ // Keeping it in section styles lets existing block save APIs persist it.
9916
+ headingDecorationOverride: z21.enum(headingDecorationOverrideValues).nullable().optional(),
9917
+ accordionIconTreatment: accordionIconTreatmentSchema.nullable().optional()
9664
9918
  });
9665
9919
  var containerStylesOverrideSchema = z21.object({
9666
9920
  background: boxBackgroundSchema.nullable().optional(),
@@ -9753,9 +10007,17 @@ var inputStyle = z21.object({
9753
10007
  focus: z21.enum(["glow", "ring", "underline"]),
9754
10008
  label: z21.enum(["inside", "above"])
9755
10009
  });
9756
- var headerVariant = z21.enum(["classic", "centered", "transparent", "floating", "editorial"]);
10010
+ var headerVariant = z21.enum(["classic", "centered", "transparent", "floating"]);
9757
10011
  var headerPositioning = z21.enum(["static", "sticky", "fixed"]);
9758
- var headerNavStyle = z21.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
10012
+ var headerNavStyle = z21.enum([
10013
+ "minimal",
10014
+ "underline",
10015
+ "underline-grow",
10016
+ "capsule",
10017
+ "scale",
10018
+ "frosted",
10019
+ "solid"
10020
+ ]);
9759
10021
  var navFontWeight = z21.enum(["regular", "medium", "semibold", "bold"]);
9760
10022
  var headerMaxWidth = z21.enum(["container", "full"]);
9761
10023
  var headerContainerSchema = z21.object({
@@ -9803,8 +10065,22 @@ var dropdownStyleSchema = z21.object({
9803
10065
  textSize: z21.enum(["xs", "sm", "base", "lg"]).optional()
9804
10066
  // optional = no override (browser default)
9805
10067
  }).optional();
9806
- var headerCtaGapSchema = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
9807
- var headerCtaTreatmentSchema = z21.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
10068
+ var headerCtaGapSchema = z21.enum([
10069
+ "none",
10070
+ "tight",
10071
+ "compact",
10072
+ "default",
10073
+ "relaxed",
10074
+ "spacious"
10075
+ ]);
10076
+ var headerCtaTreatmentSchema = z21.enum([
10077
+ "default",
10078
+ "primary",
10079
+ "secondary",
10080
+ "inverted",
10081
+ "outline",
10082
+ "ghost"
10083
+ ]);
9808
10084
  var navContainerSchema = z21.object({
9809
10085
  type: z21.enum(["none", "pill", "glass"]).default("none"),
9810
10086
  tint: z21.string().nullable().optional(),
@@ -9859,7 +10135,14 @@ var footerMaxWidth = z21.enum(["container", "full"]);
9859
10135
  var footerMode = z21.enum(["default", "blocks", "default+blocks", "none"]);
9860
10136
  var footerNavLayoutMode = z21.enum(["stack", "inline", "inline-wrap"]);
9861
10137
  var footerNavLayoutAlign = z21.enum(["start", "center", "end", "space-between"]);
9862
- var footerSpacing = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10138
+ var footerSpacing = z21.enum([
10139
+ "none",
10140
+ "tight",
10141
+ "compact",
10142
+ "default",
10143
+ "relaxed",
10144
+ "spacious"
10145
+ ]);
9863
10146
  var footerLogoPlacement = z21.enum(["left", "right", "above", "below"]);
9864
10147
  var footerLogoSize = z21.enum(["sm", "md", "lg", "xl"]);
9865
10148
  var footerLogoMaxHeight = z21.enum(["sm", "md", "lg", "xl"]);
@@ -9924,7 +10207,12 @@ var footerSchema = z21.object({
9924
10207
  logo: footerLogoSchema.optional(),
9925
10208
  bottomBar: footerBottomBarSchema.optional()
9926
10209
  });
9927
- var containerPaddingPresetSchema = z21.enum(["tight", "compact", "default", "relaxed"]);
10210
+ var containerPaddingPresetSchema = z21.enum([
10211
+ "tight",
10212
+ "compact",
10213
+ "default",
10214
+ "relaxed"
10215
+ ]);
9928
10216
  var layoutSchema = z21.object({
9929
10217
  containerPadding: z21.object({
9930
10218
  mobile: containerPaddingPresetSchema.optional(),
@@ -9932,8 +10220,24 @@ var layoutSchema = z21.object({
9932
10220
  desktop: containerPaddingPresetSchema.optional()
9933
10221
  }).optional()
9934
10222
  }).optional();
9935
- var heroTypographySizeSchema = z21.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
9936
- var heroTypographyLineHeightSchema = z21.enum(["tight", "snug", "normal", "relaxed"]);
10223
+ var heroTypographySizeSchema = z21.enum([
10224
+ "sm",
10225
+ "base",
10226
+ "lg",
10227
+ "xl",
10228
+ "2xl",
10229
+ "3xl",
10230
+ "4xl",
10231
+ "5xl",
10232
+ "6xl",
10233
+ "editorial"
10234
+ ]);
10235
+ var heroTypographyLineHeightSchema = z21.enum([
10236
+ "tight",
10237
+ "snug",
10238
+ "normal",
10239
+ "relaxed"
10240
+ ]);
9937
10241
  var heroResponsiveTypographySchema = z21.object({
9938
10242
  headlineSize: heroTypographySizeSchema.optional(),
9939
10243
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -10368,6 +10672,28 @@ var warmNeutralCream = definePaletteVariant({
10368
10672
  { name: "border", hex: "#e0d2b8" }
10369
10673
  ]
10370
10674
  });
10675
+ var warmNeutralSoftEarth = definePaletteVariant({
10676
+ id: "warm-neutral-soft-earth",
10677
+ name: "Warm Neutral \u2014 Soft Earth",
10678
+ description: "Cream ground with terracotta primary, clay accents, and olive depth.",
10679
+ tags: { tone: "classic", energy: "calm", era: "organic" },
10680
+ mode: "light",
10681
+ colors: [
10682
+ { name: "primary", hex: "#a8573d" },
10683
+ { name: "secondary", hex: "#72765c" },
10684
+ { name: "accent", hex: "#c87557" },
10685
+ { name: "success", hex: "#687854" },
10686
+ { name: "warning", hex: "#b7863e" },
10687
+ { name: "destructive", hex: "#a54b3c" },
10688
+ { name: "background", hex: "#fbf6eb" },
10689
+ { name: "surface", hex: "#fffdf7" },
10690
+ { name: "surfaceAlt", hex: "#f0e4d3" },
10691
+ { name: "muted", hex: "#eadbc6" },
10692
+ { name: "text", hex: "#30281f" },
10693
+ { name: "primaryForeground", hex: "#fffaf3" },
10694
+ { name: "border", hex: "#d9c8b2" }
10695
+ ]
10696
+ });
10371
10697
  var warmNeutralForest = definePaletteVariant({
10372
10698
  id: "warm-neutral-forest",
10373
10699
  name: "Warm Neutral \u2014 Forest",
@@ -10401,6 +10727,7 @@ var paletteVariants = [
10401
10727
  // Warm-neutral family
10402
10728
  warmNeutralClay,
10403
10729
  warmNeutralCream,
10730
+ warmNeutralSoftEarth,
10404
10731
  warmNeutralForest,
10405
10732
  // High-contrast family
10406
10733
  highContrastInk,
@@ -10419,6 +10746,12 @@ var paletteVariantsById = new Map(
10419
10746
  function asHeaderLookId(value) {
10420
10747
  return value;
10421
10748
  }
10749
+ function asHeaderLayoutId(value) {
10750
+ return value;
10751
+ }
10752
+ function asHeaderStyleId(value) {
10753
+ return value;
10754
+ }
10422
10755
  function baseHeader(theme) {
10423
10756
  const {
10424
10757
  navLinkStyle: _navLinkStyle,
@@ -10437,67 +10770,427 @@ function baseHeader(theme) {
10437
10770
  navContainer: { type: "none", tint: null, opacity: 0.15 }
10438
10771
  };
10439
10772
  }
10440
- function solidBrandHeader(theme) {
10441
- const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
10442
- return {
10443
- ...baseHeader(theme),
10773
+ var headerLayoutCatalog = [
10774
+ {
10775
+ id: asHeaderLayoutId("classic"),
10776
+ label: "Classic",
10777
+ description: "Logo and navigation in one practical horizontal row.",
10778
+ structure: "inline-classic",
10444
10779
  variant: "classic",
10445
- positioning: "sticky",
10780
+ defaultPositioning: "sticky",
10781
+ shrinkOnScroll: false
10782
+ },
10783
+ {
10784
+ id: asHeaderLayoutId("centered"),
10785
+ label: "Centered",
10786
+ description: "Logo centered above a balanced navigation row.",
10787
+ structure: "centered-stack",
10788
+ variant: "centered",
10789
+ defaultPositioning: "static",
10790
+ shrinkOnScroll: false,
10791
+ maxRecommendedNavItems: 5,
10792
+ allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
10793
+ },
10794
+ {
10795
+ id: asHeaderLayoutId("floating"),
10796
+ label: "Floating",
10797
+ description: "Detached header chrome that sits over the opening section.",
10798
+ structure: "floating-shell",
10799
+ variant: "floating",
10800
+ defaultPositioning: "fixed",
10446
10801
  shrinkOnScroll: true,
10447
- background: {
10448
- type: "color",
10449
- color: "primary"
10450
- },
10451
- textColor: "primaryForeground",
10452
- navColor: "primaryForeground",
10453
- navStyle: "underline-grow",
10454
- navWeight: "bold",
10455
- navLinkStyle: {
10456
- typography: "body",
10457
- fontWeight: "bold",
10458
- textTransform: "uppercase",
10459
- italic: false,
10460
- colorToken: "primaryForeground",
10461
- hoverColorToken: "secondary",
10462
- textSize: "sm",
10463
- letterSpacing: "wider",
10464
- padding: "compact",
10465
- paddingX: "compact",
10466
- borderRadius: "none",
10467
- effects: {
10468
- hover: [
10469
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
10470
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
10471
- ]
10472
- }
10473
- },
10474
- dropdownStyle: {
10475
- background: "primary-700",
10476
- textColor: "primaryForeground",
10477
- borderColor: null,
10478
- shadow: "md",
10479
- borderRadius: "md",
10480
- hoverBackground: "primary-900",
10481
- hoverTextColor: "secondary",
10482
- textTransform: "uppercase",
10483
- letterSpacing: "wider",
10484
- fontWeight: "bold",
10485
- textSize: "sm"
10486
- },
10487
- border: {
10488
- style: "solid",
10489
- width: "none",
10490
- position: "none"
10491
- },
10492
- logoText: {
10493
- hideOnShrink: true,
10494
- mobileMaxWidth: "sm",
10495
- mobileWrapLines: 2
10496
- },
10497
- ctaGap: "compact",
10498
- ctaTreatment: "inverted",
10499
- ...ctaVariant ? { ctaVariant } : {}
10500
- };
10802
+ maxRecommendedNavItems: 5,
10803
+ allowedLogoShapes: ["none", "text-only", "horizontal"]
10804
+ }
10805
+ ];
10806
+ function supportedLayouts(ids) {
10807
+ return ids.map(asHeaderLayoutId);
10808
+ }
10809
+ var headerStyleCatalog = [
10810
+ {
10811
+ id: asHeaderStyleId("minimal"),
10812
+ label: "Minimal",
10813
+ description: "Quiet surface with simple color-change navigation.",
10814
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10815
+ navInteraction: "color-change",
10816
+ surface: "neutral",
10817
+ navTypography: "plain"
10818
+ },
10819
+ {
10820
+ id: asHeaderStyleId("fine-line"),
10821
+ label: "Fine Line",
10822
+ description: "Light surface with a crisp lower rule and underline hover.",
10823
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10824
+ navInteraction: "underline-grow",
10825
+ surface: "bordered",
10826
+ navTypography: "plain"
10827
+ },
10828
+ {
10829
+ id: asHeaderStyleId("soft-bar"),
10830
+ label: "Soft Bar",
10831
+ description: "Soft tinted surface with gentle pill hover states.",
10832
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10833
+ navInteraction: "pill-background",
10834
+ surface: "soft",
10835
+ navTypography: "plain"
10836
+ },
10837
+ {
10838
+ id: asHeaderStyleId("pill-nav"),
10839
+ label: "Pill Nav",
10840
+ description: "A calm pill navigation rail over a neutral header.",
10841
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10842
+ navInteraction: "pill-background",
10843
+ surface: "soft",
10844
+ navTypography: "plain"
10845
+ },
10846
+ {
10847
+ id: asHeaderStyleId("brand-bar"),
10848
+ label: "Brand Bar",
10849
+ description: "Solid brand surface with high-contrast navigation.",
10850
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10851
+ navInteraction: "color-change",
10852
+ surface: "brand-solid",
10853
+ navTypography: "brand-caps"
10854
+ },
10855
+ {
10856
+ id: asHeaderStyleId("brand-underline"),
10857
+ label: "Brand Underline",
10858
+ description: "Brand surface with underline-grow navigation.",
10859
+ supportedLayoutIds: supportedLayouts(["classic"]),
10860
+ navInteraction: "underline-grow",
10861
+ surface: "brand-solid",
10862
+ navTypography: "brand-caps"
10863
+ },
10864
+ {
10865
+ id: asHeaderStyleId("brand-pill"),
10866
+ label: "Brand Pill",
10867
+ description: "Solid brand surface with rounded active and hover states.",
10868
+ supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
10869
+ navInteraction: "pill-background",
10870
+ surface: "brand-solid",
10871
+ navTypography: "brand-caps"
10872
+ },
10873
+ {
10874
+ id: asHeaderStyleId("serif-line"),
10875
+ label: "Serif Line",
10876
+ description: "Typographic logo treatment with understated underline navigation.",
10877
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10878
+ navInteraction: "underline-grow",
10879
+ surface: "bordered",
10880
+ navTypography: "heading"
10881
+ },
10882
+ {
10883
+ id: asHeaderStyleId("flat-tabs"),
10884
+ label: "Flat Tabs",
10885
+ description: "Flat block hover and active states with a Swiss utility feel.",
10886
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10887
+ navInteraction: "flat-block",
10888
+ surface: "bordered",
10889
+ navTypography: "quiet-caps"
10890
+ },
10891
+ {
10892
+ id: asHeaderStyleId("glass"),
10893
+ label: "Glass",
10894
+ description: "Translucent chrome with frosted navigation backing.",
10895
+ supportedLayoutIds: supportedLayouts(["classic", "floating"]),
10896
+ navInteraction: "glass-backed",
10897
+ surface: "floating",
10898
+ navTypography: "plain"
10899
+ },
10900
+ {
10901
+ id: asHeaderStyleId("minimal-surface"),
10902
+ label: "Clear Split",
10903
+ description: "Floating logo with transparent navigation and no shared shell.",
10904
+ supportedLayoutIds: supportedLayouts(["floating"]),
10905
+ navInteraction: "color-change",
10906
+ surface: "floating",
10907
+ navTypography: "plain"
10908
+ },
10909
+ {
10910
+ id: asHeaderStyleId("soft-shell"),
10911
+ label: "Soft Shell",
10912
+ description: "Floating rounded shell with soft pill navigation states.",
10913
+ supportedLayoutIds: supportedLayouts(["floating"]),
10914
+ navInteraction: "pill-background",
10915
+ surface: "floating",
10916
+ navTypography: "plain"
10917
+ },
10918
+ {
10919
+ id: asHeaderStyleId("split-glass"),
10920
+ label: "Split Glass",
10921
+ description: "Logo floats independently while the navigation sits in a glass rail.",
10922
+ supportedLayoutIds: supportedLayouts(["floating"]),
10923
+ navInteraction: "glass-backed",
10924
+ surface: "floating",
10925
+ navTypography: "quiet-caps"
10926
+ },
10927
+ {
10928
+ id: asHeaderStyleId("split-pill"),
10929
+ label: "Split Pill",
10930
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
10931
+ supportedLayoutIds: supportedLayouts(["floating"]),
10932
+ navInteraction: "pill-background",
10933
+ surface: "floating",
10934
+ navTypography: "heading"
10935
+ }
10936
+ ];
10937
+ var headerLayoutsById = new Map(
10938
+ headerLayoutCatalog.map((layout) => [layout.id, layout])
10939
+ );
10940
+ var headerStylesById = new Map(
10941
+ headerStyleCatalog.map((style) => [style.id, style])
10942
+ );
10943
+ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10944
+ [
10945
+ asHeaderLayoutId("classic"),
10946
+ headerStyleRepairChain([
10947
+ "minimal",
10948
+ "glass",
10949
+ "fine-line",
10950
+ "soft-bar",
10951
+ "pill-nav",
10952
+ "brand-bar",
10953
+ "brand-underline",
10954
+ "brand-pill",
10955
+ "serif-line",
10956
+ "flat-tabs"
10957
+ ])
10958
+ ],
10959
+ [
10960
+ asHeaderLayoutId("centered"),
10961
+ headerStyleRepairChain([
10962
+ "minimal",
10963
+ "fine-line",
10964
+ "soft-bar",
10965
+ "pill-nav",
10966
+ "brand-bar",
10967
+ "brand-pill",
10968
+ "serif-line",
10969
+ "flat-tabs"
10970
+ ])
10971
+ ],
10972
+ [
10973
+ asHeaderLayoutId("floating"),
10974
+ headerStyleRepairChain([
10975
+ "glass",
10976
+ "minimal-surface",
10977
+ "split-glass",
10978
+ "split-pill",
10979
+ "soft-shell",
10980
+ "brand-pill"
10981
+ ])
10982
+ ]
10983
+ ]);
10984
+ function headerStyleRepairChain(values) {
10985
+ return values.map(asHeaderStyleId);
10986
+ }
10987
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
10988
+ [
10989
+ [
10990
+ asHeaderStyleId("brand-bar"),
10991
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
10992
+ ],
10993
+ [
10994
+ asHeaderStyleId("brand-underline"),
10995
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
10996
+ ],
10997
+ [
10998
+ asHeaderStyleId("brand-pill"),
10999
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
11000
+ ],
11001
+ [
11002
+ asHeaderStyleId("pill-nav"),
11003
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
11004
+ ],
11005
+ [
11006
+ asHeaderStyleId("flat-tabs"),
11007
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
11008
+ ],
11009
+ [
11010
+ asHeaderStyleId("serif-line"),
11011
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
11012
+ ],
11013
+ [
11014
+ asHeaderStyleId("glass"),
11015
+ headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
11016
+ ],
11017
+ [
11018
+ asHeaderStyleId("soft-shell"),
11019
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
11020
+ ],
11021
+ [
11022
+ asHeaderStyleId("minimal-surface"),
11023
+ headerStyleRepairChain(["minimal-surface", "minimal"])
11024
+ ],
11025
+ [
11026
+ asHeaderStyleId("split-glass"),
11027
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
11028
+ ],
11029
+ [
11030
+ asHeaderStyleId("split-pill"),
11031
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
11032
+ ],
11033
+ [
11034
+ asHeaderStyleId("fine-line"),
11035
+ headerStyleRepairChain(["fine-line", "minimal"])
11036
+ ],
11037
+ [
11038
+ asHeaderStyleId("soft-bar"),
11039
+ headerStyleRepairChain(["soft-bar", "minimal"])
11040
+ ],
11041
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
11042
+ ]
11043
+ );
11044
+ var legacyHeaderLookAliases = [
11045
+ {
11046
+ lookId: asHeaderLookId("clean-base"),
11047
+ selection: {
11048
+ layoutId: asHeaderLayoutId("classic"),
11049
+ styleId: asHeaderStyleId("minimal")
11050
+ }
11051
+ },
11052
+ {
11053
+ lookId: asHeaderLookId("brand-solid"),
11054
+ selection: {
11055
+ layoutId: asHeaderLayoutId("classic"),
11056
+ styleId: asHeaderStyleId("brand-bar")
11057
+ }
11058
+ },
11059
+ {
11060
+ lookId: asHeaderLookId("serif-line"),
11061
+ selection: {
11062
+ layoutId: asHeaderLayoutId("centered"),
11063
+ styleId: asHeaderStyleId("serif-line")
11064
+ }
11065
+ },
11066
+ {
11067
+ lookId: asHeaderLookId("centered-calm"),
11068
+ selection: {
11069
+ layoutId: asHeaderLayoutId("centered"),
11070
+ styleId: asHeaderStyleId("minimal")
11071
+ }
11072
+ },
11073
+ {
11074
+ lookId: asHeaderLookId("practical-utility"),
11075
+ selection: {
11076
+ layoutId: asHeaderLayoutId("classic"),
11077
+ styleId: asHeaderStyleId("flat-tabs")
11078
+ }
11079
+ },
11080
+ {
11081
+ lookId: asHeaderLookId("minimal-transparent"),
11082
+ selection: {
11083
+ layoutId: asHeaderLayoutId("classic"),
11084
+ styleId: asHeaderStyleId("minimal")
11085
+ }
11086
+ },
11087
+ {
11088
+ lookId: asHeaderLookId("transparent-overlay"),
11089
+ selection: {
11090
+ layoutId: asHeaderLayoutId("floating"),
11091
+ styleId: asHeaderStyleId("glass")
11092
+ }
11093
+ },
11094
+ {
11095
+ lookId: asHeaderLookId("floating-glass"),
11096
+ selection: {
11097
+ layoutId: asHeaderLayoutId("floating"),
11098
+ styleId: asHeaderStyleId("glass")
11099
+ }
11100
+ }
11101
+ ];
11102
+ var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
11103
+ function getHeaderStyle(id) {
11104
+ return headerStylesById.get(id) ?? null;
11105
+ }
11106
+ function isHeaderStyleCompatibleWithLayout(style, layoutId) {
11107
+ return style.supportedLayoutIds.includes(layoutId);
11108
+ }
11109
+ function getHeaderStyleOrThrow(id) {
11110
+ const style = getHeaderStyle(id);
11111
+ if (!style) {
11112
+ throw new Error(`Unknown Theme V2 header style: ${id}`);
11113
+ }
11114
+ return style;
11115
+ }
11116
+ function resolveLegacyHeaderLookAlias(lookId) {
11117
+ return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
11118
+ }
11119
+ function getCompatibleHeaderStyleIds(layoutId) {
11120
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
11121
+ (styleId) => {
11122
+ const style = getHeaderStyleOrThrow(styleId);
11123
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
11124
+ }
11125
+ );
11126
+ }
11127
+ function solidBrandHeader(theme) {
11128
+ const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
11129
+ return {
11130
+ ...baseHeader(theme),
11131
+ variant: "classic",
11132
+ positioning: "sticky",
11133
+ shrinkOnScroll: true,
11134
+ background: {
11135
+ type: "color",
11136
+ color: "primary"
11137
+ },
11138
+ textColor: "primaryForeground",
11139
+ navColor: "primaryForeground",
11140
+ navStyle: "underline-grow",
11141
+ navWeight: "bold",
11142
+ navLinkStyle: {
11143
+ typography: "body",
11144
+ fontWeight: "bold",
11145
+ textTransform: "uppercase",
11146
+ italic: false,
11147
+ colorToken: "primaryForeground",
11148
+ hoverColorToken: "secondary",
11149
+ textSize: "sm",
11150
+ letterSpacing: "wider",
11151
+ padding: "compact",
11152
+ paddingX: "compact",
11153
+ borderRadius: "none",
11154
+ effects: {
11155
+ hover: [
11156
+ {
11157
+ effectId: "text-color-change",
11158
+ options: { hoverColorToken: "secondary" }
11159
+ },
11160
+ {
11161
+ effectId: "nav-underline",
11162
+ options: { style: "grow", colorToken: "secondary" }
11163
+ }
11164
+ ]
11165
+ }
11166
+ },
11167
+ dropdownStyle: {
11168
+ background: "primary-700",
11169
+ textColor: "primaryForeground",
11170
+ borderColor: null,
11171
+ shadow: "md",
11172
+ borderRadius: "md",
11173
+ hoverBackground: "primary-900",
11174
+ hoverTextColor: "secondary",
11175
+ textTransform: "uppercase",
11176
+ letterSpacing: "wider",
11177
+ fontWeight: "bold",
11178
+ textSize: "sm"
11179
+ },
11180
+ border: {
11181
+ style: "solid",
11182
+ width: "none",
11183
+ position: "none"
11184
+ },
11185
+ logoText: {
11186
+ hideOnShrink: true,
11187
+ mobileMaxWidth: "sm",
11188
+ mobileWrapLines: 2
11189
+ },
11190
+ ctaGap: "compact",
11191
+ ctaTreatment: "inverted",
11192
+ ...ctaVariant ? { ctaVariant } : {}
11193
+ };
10501
11194
  }
10502
11195
  function cleanBaseHeader(theme) {
10503
11196
  return {
@@ -10523,10 +11216,10 @@ function cleanBaseHeader(theme) {
10523
11216
  ctaGap: "default"
10524
11217
  };
10525
11218
  }
10526
- function editorialLineHeader(theme) {
11219
+ function serifLineHeader(theme) {
10527
11220
  return {
10528
11221
  ...baseHeader(theme),
10529
- variant: "editorial",
11222
+ variant: "centered",
10530
11223
  positioning: "sticky",
10531
11224
  shrinkOnScroll: false,
10532
11225
  background: {
@@ -10673,6 +11366,11 @@ var headerLookCatalog = [
10673
11366
  label: "Clean base",
10674
11367
  visualTreatment: "solid-neutral",
10675
11368
  layoutBehavior: "sticky",
11369
+ configuration: {
11370
+ structure: "inline-classic",
11371
+ treatment: "solid-neutral",
11372
+ behavior: "sticky"
11373
+ },
10676
11374
  openingRequirement: "none",
10677
11375
  compile: cleanBaseHeader
10678
11376
  },
@@ -10681,23 +11379,38 @@ var headerLookCatalog = [
10681
11379
  label: "Brand solid",
10682
11380
  visualTreatment: "solid-brand",
10683
11381
  layoutBehavior: "sticky-shrink",
11382
+ configuration: {
11383
+ structure: "inline-classic",
11384
+ treatment: "solid-brand",
11385
+ behavior: "sticky-shrink"
11386
+ },
10684
11387
  openingRequirement: "none",
10685
11388
  compile: solidBrandHeader
10686
11389
  },
10687
11390
  {
10688
- id: asHeaderLookId("editorial-line"),
10689
- label: "Editorial line",
10690
- visualTreatment: "light-editorial",
11391
+ id: asHeaderLookId("serif-line"),
11392
+ label: "Serif line",
11393
+ visualTreatment: "light-serif",
10691
11394
  layoutBehavior: "sticky",
11395
+ configuration: {
11396
+ structure: "centered-stack",
11397
+ treatment: "light-serif",
11398
+ behavior: "sticky"
11399
+ },
10692
11400
  openingRequirement: "none",
10693
11401
  maxRecommendedNavItems: 6,
10694
- compile: editorialLineHeader
11402
+ compile: serifLineHeader
10695
11403
  },
10696
11404
  {
10697
11405
  id: asHeaderLookId("centered-calm"),
10698
11406
  label: "Centered calm",
10699
- visualTreatment: "light-editorial",
11407
+ visualTreatment: "light-serif",
10700
11408
  layoutBehavior: "normal-flow",
11409
+ configuration: {
11410
+ structure: "centered-stack",
11411
+ treatment: "light-serif",
11412
+ behavior: "normal-flow"
11413
+ },
10701
11414
  openingRequirement: "none",
10702
11415
  maxRecommendedNavItems: 5,
10703
11416
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"],
@@ -10708,6 +11421,11 @@ var headerLookCatalog = [
10708
11421
  label: "Practical utility",
10709
11422
  visualTreatment: "solid-neutral",
10710
11423
  layoutBehavior: "sticky-shrink",
11424
+ configuration: {
11425
+ structure: "inline-classic",
11426
+ treatment: "solid-neutral",
11427
+ behavior: "sticky-shrink"
11428
+ },
10711
11429
  openingRequirement: "none",
10712
11430
  requiresProminentCta: true,
10713
11431
  compile: practicalUtilityHeader
@@ -10717,6 +11435,11 @@ var headerLookCatalog = [
10717
11435
  label: "Minimal transparent",
10718
11436
  visualTreatment: "minimal-transparent",
10719
11437
  layoutBehavior: "normal-flow",
11438
+ configuration: {
11439
+ structure: "inline-classic",
11440
+ treatment: "minimal-transparent",
11441
+ behavior: "normal-flow"
11442
+ },
10720
11443
  openingRequirement: "reserved-space-ok",
10721
11444
  compile: minimalTransparentHeader
10722
11445
  },
@@ -10725,6 +11448,11 @@ var headerLookCatalog = [
10725
11448
  label: "Transparent overlay",
10726
11449
  visualTreatment: "transparent-overlay",
10727
11450
  layoutBehavior: "fixed-overlay",
11451
+ configuration: {
11452
+ structure: "inline-classic",
11453
+ treatment: "transparent-overlay",
11454
+ behavior: "fixed-overlay"
11455
+ },
10728
11456
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10729
11457
  maxRecommendedNavItems: 5,
10730
11458
  allowedLogoShapes: ["none", "text-only", "horizontal"],
@@ -10735,6 +11463,11 @@ var headerLookCatalog = [
10735
11463
  label: "Floating glass",
10736
11464
  visualTreatment: "floating-glass",
10737
11465
  layoutBehavior: "fixed-floating",
11466
+ configuration: {
11467
+ structure: "floating-shell",
11468
+ treatment: "floating-glass",
11469
+ behavior: "fixed-floating"
11470
+ },
10738
11471
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10739
11472
  maxRecommendedNavItems: 5,
10740
11473
  allowedLogoShapes: ["none", "text-only", "horizontal"],
@@ -10742,9 +11475,17 @@ var headerLookCatalog = [
10742
11475
  }
10743
11476
  ];
10744
11477
  var guaranteedFallbackHeaderLookId = asHeaderLookId("clean-base");
11478
+ var guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
11479
+ var guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
11480
+ var allowedHeaderConfigurationKeys = new Set(
11481
+ headerLookCatalog.map((look) => headerConfigurationKey(look.configuration))
11482
+ );
10745
11483
  var headerLooksById = new Map(
10746
11484
  headerLookCatalog.map((look) => [look.id, look])
10747
11485
  );
11486
+ function headerConfigurationKey(configuration) {
11487
+ return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
11488
+ }
10748
11489
 
10749
11490
  // ../theme-core/src/site-styles/footerLooks.ts
10750
11491
  function asFooterLookId(value) {
@@ -10877,6 +11618,264 @@ var advancedDesignOptionCatalog = {
10877
11618
  detachedCustom: true
10878
11619
  };
10879
11620
 
11621
+ // ../theme-core/src/site-styles/typographyPresets.ts
11622
+ var bodyReadablePolicy = {
11623
+ recommendedCategories: ["sans-serif", "serif"],
11624
+ allowedCategories: ["sans-serif", "serif"],
11625
+ requiresItalicForBody: true,
11626
+ requiresBoldForBody: true
11627
+ };
11628
+ var headingFlexiblePolicy = {
11629
+ recommendedCategories: ["sans-serif", "serif", "display"],
11630
+ allowedCategories: ["sans-serif", "serif", "display"]
11631
+ };
11632
+ var displayHeadingPolicy = {
11633
+ recommendedCategories: ["display", "sans-serif", "serif"],
11634
+ allowedCategories: ["display", "sans-serif", "serif"]
11635
+ };
11636
+ function asTypographyPresetId(value) {
11637
+ if (!value.startsWith("typography-preset:")) {
11638
+ throw new Error(`TypographyPresetId must start with "typography-preset:". Received: ${value}`);
11639
+ }
11640
+ return value;
11641
+ }
11642
+ function defineTypographyPreset(preset2) {
11643
+ return {
11644
+ ...preset2,
11645
+ id: asTypographyPresetId(preset2.id)
11646
+ };
11647
+ }
11648
+ var modernSansTypography = {
11649
+ body: {
11650
+ family: "Inter, system-ui, sans-serif",
11651
+ size: "md",
11652
+ weight: "regular",
11653
+ lineHeight: "relaxed",
11654
+ letterSpacing: "normal"
11655
+ },
11656
+ headings: {
11657
+ default: {
11658
+ family: "Inter, system-ui, sans-serif",
11659
+ weight: "semibold",
11660
+ lineHeight: "normal",
11661
+ letterSpacing: "tight",
11662
+ italic: null,
11663
+ case: null
11664
+ },
11665
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11666
+ h2: { size: "lg", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11667
+ h3: { size: "md", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null }
11668
+ },
11669
+ scale: "balanced"
11670
+ };
11671
+ var warmRoundedTypography = {
11672
+ body: {
11673
+ family: "Nunito Sans, system-ui, sans-serif",
11674
+ size: "lg",
11675
+ weight: "regular",
11676
+ lineHeight: "relaxed",
11677
+ letterSpacing: "normal"
11678
+ },
11679
+ headings: {
11680
+ default: {
11681
+ family: "Nunito Sans, system-ui, sans-serif",
11682
+ weight: "bold",
11683
+ lineHeight: "normal",
11684
+ letterSpacing: "normal",
11685
+ italic: null,
11686
+ case: null
11687
+ },
11688
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11689
+ h2: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11690
+ h3: { size: "md", weight: "semibold", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11691
+ },
11692
+ scale: "balanced"
11693
+ };
11694
+ var editorialSerifTypography = {
11695
+ body: {
11696
+ family: "Lora, Georgia, serif",
11697
+ size: "lg",
11698
+ weight: "regular",
11699
+ lineHeight: "loose",
11700
+ letterSpacing: "normal"
11701
+ },
11702
+ headings: {
11703
+ default: {
11704
+ family: "Playfair Display, Georgia, serif",
11705
+ weight: "semibold",
11706
+ lineHeight: "normal",
11707
+ letterSpacing: "tight",
11708
+ italic: null,
11709
+ case: null
11710
+ },
11711
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11712
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11713
+ h3: { size: "md", weight: "semibold", lineHeight: "relaxed", letterSpacing: "normal", italic: true }
11714
+ },
11715
+ scale: "spacious"
11716
+ };
11717
+ var classicSerifTypography = {
11718
+ body: {
11719
+ family: "Libre Baskerville, Georgia, serif",
11720
+ size: "md",
11721
+ weight: "regular",
11722
+ lineHeight: "relaxed",
11723
+ letterSpacing: "normal"
11724
+ },
11725
+ headings: {
11726
+ default: {
11727
+ family: "Cormorant Garamond, Georgia, serif",
11728
+ weight: "semibold",
11729
+ lineHeight: "normal",
11730
+ letterSpacing: "normal",
11731
+ italic: null,
11732
+ case: null
11733
+ },
11734
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11735
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11736
+ h3: { size: "md", weight: "medium", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11737
+ },
11738
+ scale: "balanced"
11739
+ };
11740
+ var luxeContrastTypography = {
11741
+ body: {
11742
+ family: "Manrope, system-ui, sans-serif",
11743
+ size: "md",
11744
+ weight: "regular",
11745
+ lineHeight: "relaxed",
11746
+ letterSpacing: "normal"
11747
+ },
11748
+ headings: {
11749
+ default: {
11750
+ family: "Cormorant Garamond, Georgia, serif",
11751
+ weight: "semibold",
11752
+ lineHeight: "normal",
11753
+ letterSpacing: "tight",
11754
+ italic: null,
11755
+ case: null
11756
+ },
11757
+ h1: { size: "2xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11758
+ h2: { size: "xl", weight: "semibold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11759
+ h3: { size: "md", weight: "medium", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
11760
+ },
11761
+ scale: "spacious"
11762
+ };
11763
+ var boldDisplayTypography = {
11764
+ body: {
11765
+ family: "Manrope, system-ui, sans-serif",
11766
+ size: "lg",
11767
+ weight: "regular",
11768
+ lineHeight: "relaxed",
11769
+ letterSpacing: "normal"
11770
+ },
11771
+ headings: {
11772
+ default: {
11773
+ family: '"TAN - PEARL", sans-serif',
11774
+ weight: "bold",
11775
+ lineHeight: "normal",
11776
+ letterSpacing: "tight",
11777
+ colorToken: "primary",
11778
+ italic: null,
11779
+ case: null
11780
+ },
11781
+ h1: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
11782
+ h2: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null },
11783
+ h3: { size: "md", weight: "bold", lineHeight: "normal", letterSpacing: "normal", italic: null }
11784
+ },
11785
+ scale: "balanced"
11786
+ };
11787
+ var typographyPresets = [
11788
+ defineTypographyPreset({
11789
+ id: "typography-preset:modern-sans",
11790
+ name: "Modern Sans",
11791
+ description: "Crisp, neutral type for clear service pages and practical editorial structure.",
11792
+ defaultFonts: { body: "Inter, system-ui, sans-serif", heading: "Inter, system-ui, sans-serif" },
11793
+ recommendedFonts: {
11794
+ body: ["Inter", "Source Sans 3", "IBM Plex Sans"],
11795
+ heading: ["Inter", "Manrope", "Source Sans 3"]
11796
+ },
11797
+ slotPolicies: { body: bodyReadablePolicy, heading: headingFlexiblePolicy },
11798
+ typography: modernSansTypography
11799
+ }),
11800
+ defineTypographyPreset({
11801
+ id: "typography-preset:warm-rounded",
11802
+ name: "Warm Rounded",
11803
+ description: "Soft, friendly type for welcoming studios, classes, and community businesses.",
11804
+ defaultFonts: { body: "Nunito Sans, system-ui, sans-serif", heading: "Nunito Sans, system-ui, sans-serif" },
11805
+ recommendedFonts: {
11806
+ body: ["Nunito Sans", "Atkinson Hyperlegible", "Lato"],
11807
+ heading: ["Nunito Sans", "Quicksand", "Manrope"]
11808
+ },
11809
+ slotPolicies: { body: bodyReadablePolicy, heading: headingFlexiblePolicy },
11810
+ typography: warmRoundedTypography
11811
+ }),
11812
+ defineTypographyPreset({
11813
+ id: "typography-preset:editorial-serif",
11814
+ name: "Editorial Serif",
11815
+ description: "Story-led type with warm reading rhythm and expressive headings.",
11816
+ defaultFonts: { body: "Lora, Georgia, serif", heading: "Playfair Display, Georgia, serif" },
11817
+ recommendedFonts: {
11818
+ body: ["Lora", "Source Serif 4", "Libre Baskerville"],
11819
+ heading: ["Playfair Display", "Cormorant Garamond", "Fraunces"]
11820
+ },
11821
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11822
+ typography: editorialSerifTypography
11823
+ }),
11824
+ defineTypographyPreset({
11825
+ id: "typography-preset:classic-serif",
11826
+ name: "Classic Serif",
11827
+ description: "Measured, polished type for premium and established offers.",
11828
+ defaultFonts: { body: "Libre Baskerville, Georgia, serif", heading: "Cormorant Garamond, Georgia, serif" },
11829
+ recommendedFonts: {
11830
+ body: ["Libre Baskerville", "Source Serif 4", "Lora"],
11831
+ heading: ["Cormorant Garamond", "Playfair Display", "Libre Baskerville"]
11832
+ },
11833
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11834
+ typography: classicSerifTypography
11835
+ }),
11836
+ defineTypographyPreset({
11837
+ id: "typography-preset:luxe-contrast",
11838
+ name: "Luxe Contrast",
11839
+ description: "A restrained sans body paired with elegant high-contrast headings.",
11840
+ defaultFonts: { body: "Manrope, system-ui, sans-serif", heading: "Cormorant Garamond, Georgia, serif" },
11841
+ recommendedFonts: {
11842
+ body: ["Manrope", "Inter", "Source Sans 3"],
11843
+ heading: ["Cormorant Garamond", "Playfair Display", "Bodoni Moda"]
11844
+ },
11845
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11846
+ typography: luxeContrastTypography
11847
+ }),
11848
+ defineTypographyPreset({
11849
+ id: "typography-preset:bold-display",
11850
+ name: "Bold Display",
11851
+ description: "Punchy display headings with readable sans body copy for branded launches.",
11852
+ defaultFonts: { body: "Manrope, system-ui, sans-serif", heading: '"TAN - PEARL", sans-serif' },
11853
+ recommendedFonts: {
11854
+ body: ["Manrope", "Inter", "Space Grotesk"],
11855
+ heading: ["Anton", "Bebas Neue", "Archivo Black"]
11856
+ },
11857
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
11858
+ typography: boldDisplayTypography,
11859
+ heroTypography: {
11860
+ headlineSize: "6xl",
11861
+ headlineLineHeight: "tight",
11862
+ subheadlineSize: "editorial",
11863
+ subheadlineLineHeight: "normal",
11864
+ microHeadlineSize: "6xl",
11865
+ microHeadlineLineHeight: "tight",
11866
+ microSubheadlineSize: "xl",
11867
+ microSubheadlineLineHeight: "normal",
11868
+ responsive: {
11869
+ tablet: { headlineSize: "5xl" },
11870
+ mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
11871
+ }
11872
+ }
11873
+ })
11874
+ ];
11875
+ var typographyPresetsById = new Map(
11876
+ typographyPresets.map((preset2) => [preset2.id, preset2])
11877
+ );
11878
+
10880
11879
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
10881
11880
  var curatedSiteStyleIdValues = [
10882
11881
  "site-style:calm-studio",
@@ -10889,6 +11888,7 @@ var curatedSiteStyleIdValues = [
10889
11888
  "site-style:personal-retreat-journal",
10890
11889
  "site-style:tactile-workshop",
10891
11890
  "site-style:modern-wellness",
11891
+ "site-style:soft-earth",
10892
11892
  "site-style:bold-launch",
10893
11893
  "site-style:south-west-twerk-school"
10894
11894
  ];
@@ -10954,26 +11954,45 @@ var expressiveUnderlineInputs = {
10954
11954
  }
10955
11955
  };
10956
11956
  function uniqueContentFrameKinds() {
10957
- const kinds = [...new Set(
10958
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
10959
- )];
11957
+ const kinds = [
11958
+ ...new Set(
11959
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
11960
+ )
11961
+ ];
10960
11962
  const firstKind = kinds[0];
10961
11963
  if (!firstKind) {
10962
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
11964
+ throw new Error(
11965
+ "Expected generated design option catalog to expose at least one content frame kind."
11966
+ );
10963
11967
  }
10964
11968
  return [firstKind, ...kinds.slice(1)];
10965
11969
  }
10966
11970
  var generatedContentFrameKinds = uniqueContentFrameKinds();
10967
11971
  function defineCuratedSiteStyle(input) {
11972
+ const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
11973
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
11974
+ const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
11975
+ const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
11976
+ if (!typographyPresetChoices.some(
11977
+ (choice) => choice.id === defaultTypographyPresetId
11978
+ )) {
11979
+ throw new Error(
11980
+ `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
11981
+ );
11982
+ }
10968
11983
  return {
10969
11984
  id: asSiteStyleId(input.id),
10970
11985
  name: input.name,
10971
11986
  description: input.description,
10972
11987
  generationBrief: input.generationBrief,
10973
11988
  selectionKeywordRules: input.selectionKeywordRules ?? [],
10974
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
11989
+ siteCreatorSelection: input.siteCreatorSelection ?? {
11990
+ kind: "explicit_only"
11991
+ },
10975
11992
  template: {
10976
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
11993
+ id: asDesignSystemTemplateId(
11994
+ `template:${input.id.replace("site-style:", "")}`
11995
+ ),
10977
11996
  name: input.name,
10978
11997
  version: 1,
10979
11998
  tokenRecipes: input.tokenRecipes,
@@ -10985,11 +12004,27 @@ function defineCuratedSiteStyle(input) {
10985
12004
  },
10986
12005
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
10987
12006
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
10988
- recommendedHeaderLookIds: (input.recommendedHeaderLookIds ?? ["clean-base"]).map(asHeaderLookId),
12007
+ defaultHeaderSelection: input.defaultHeaderSelection ? {
12008
+ layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
12009
+ styleId: asHeaderStyleId(input.defaultHeaderSelection.styleId)
12010
+ } : inferredHeaderCuration.defaultHeaderSelection,
12011
+ recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
12012
+ recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
12013
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
12014
+ (selection) => ({
12015
+ layoutId: asHeaderLayoutId(selection.layoutId),
12016
+ styleId: asHeaderStyleId(selection.styleId)
12017
+ })
12018
+ ),
12019
+ recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
10989
12020
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
10990
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
12021
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
12022
+ asFooterLookId
12023
+ ),
10991
12024
  buttonPersonalityChoices: input.buttonPersonalityChoices,
10992
- paletteVariantChoices: input.paletteVariantChoices
12025
+ paletteVariantChoices: input.paletteVariantChoices,
12026
+ typographyPresetChoices,
12027
+ defaultTypographyPresetId
10993
12028
  };
10994
12029
  }
10995
12030
  function buttonChoice(id, note) {
@@ -10998,6 +12033,87 @@ function buttonChoice(id, note) {
10998
12033
  function paletteChoice(id, note) {
10999
12034
  return note ? { id: asPaletteVariantId(id), note } : { id: asPaletteVariantId(id) };
11000
12035
  }
12036
+ function headerLayoutChoice(id, note) {
12037
+ return note ? { id: asHeaderLayoutId(id), note } : { id: asHeaderLayoutId(id) };
12038
+ }
12039
+ function headerStyleChoice(id, note) {
12040
+ return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
12041
+ }
12042
+ function unbrandHeaderLayoutId(id) {
12043
+ return id;
12044
+ }
12045
+ function uniqueHeaderLayoutChoices(choices) {
12046
+ const seen = /* @__PURE__ */ new Set();
12047
+ const unique = choices.filter((choice) => {
12048
+ if (seen.has(choice.id)) return false;
12049
+ seen.add(choice.id);
12050
+ return true;
12051
+ });
12052
+ const first = unique[0];
12053
+ if (!first) {
12054
+ throw new Error("Expected at least one curated header layout choice.");
12055
+ }
12056
+ return [first, ...unique.slice(1)];
12057
+ }
12058
+ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
12059
+ const first = choices[0] ?? {
12060
+ id: getCompatibleHeaderStyleIds(fallbackLayoutId)[0] ?? asHeaderStyleId("minimal")
12061
+ };
12062
+ return [first, ...choices.slice(1)];
12063
+ }
12064
+ function inferHeaderCurationFromLegacyLooks(lookIds) {
12065
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
12066
+ (selection) => Boolean(selection)
12067
+ );
12068
+ const defaultHeaderSelection = selections[0] ?? {
12069
+ layoutId: asHeaderLayoutId("classic"),
12070
+ styleId: asHeaderStyleId("minimal")
12071
+ };
12072
+ const layoutChoices = uniqueHeaderLayoutChoices(
12073
+ selections.map((selection) => headerLayoutChoice(selection.layoutId))
12074
+ );
12075
+ const stylesByLayout = {};
12076
+ for (const layoutChoice of layoutChoices) {
12077
+ const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12078
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
12079
+ }
12080
+ return {
12081
+ defaultHeaderSelection,
12082
+ recommendedHeaderLayoutChoices: layoutChoices,
12083
+ recommendedHeaderStyleChoicesByLayout: stylesByLayout
12084
+ };
12085
+ }
12086
+ function typographyChoice(id, note) {
12087
+ return note ? { id: asTypographyPresetId(id), note } : { id: asTypographyPresetId(id) };
12088
+ }
12089
+ function defaultTypographyPresetChoicesForRecipe(recipe) {
12090
+ switch (recipe) {
12091
+ case "clean-sans":
12092
+ return [
12093
+ typographyChoice("typography-preset:modern-sans"),
12094
+ typographyChoice("typography-preset:luxe-contrast"),
12095
+ typographyChoice("typography-preset:bold-display")
12096
+ ];
12097
+ case "friendly-sans":
12098
+ return [
12099
+ typographyChoice("typography-preset:warm-rounded"),
12100
+ typographyChoice("typography-preset:modern-sans"),
12101
+ typographyChoice("typography-preset:editorial-serif")
12102
+ ];
12103
+ case "serif-editorial":
12104
+ return [
12105
+ typographyChoice("typography-preset:editorial-serif"),
12106
+ typographyChoice("typography-preset:classic-serif"),
12107
+ typographyChoice("typography-preset:warm-rounded")
12108
+ ];
12109
+ case "classic-serif":
12110
+ return [
12111
+ typographyChoice("typography-preset:classic-serif"),
12112
+ typographyChoice("typography-preset:luxe-contrast"),
12113
+ typographyChoice("typography-preset:editorial-serif")
12114
+ ];
12115
+ }
12116
+ }
11001
12117
  var curatedSiteStyles = [
11002
12118
  defineCuratedSiteStyle({
11003
12119
  id: "site-style:calm-studio",
@@ -11014,7 +12130,11 @@ var curatedSiteStyles = [
11014
12130
  motion: "subtle"
11015
12131
  },
11016
12132
  compositionBudget: quietBudget,
11017
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
12133
+ recommendedHeaderLookIds: [
12134
+ "centered-calm",
12135
+ "minimal-transparent",
12136
+ "clean-base"
12137
+ ],
11018
12138
  buttonPersonalityChoices: [
11019
12139
  buttonChoice("soft-pill"),
11020
12140
  buttonChoice("pebble"),
@@ -11043,7 +12163,11 @@ var curatedSiteStyles = [
11043
12163
  motion: "subtle"
11044
12164
  },
11045
12165
  compositionBudget: balancedBudget,
11046
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
12166
+ recommendedHeaderLookIds: [
12167
+ "practical-utility",
12168
+ "brand-solid",
12169
+ "clean-base"
12170
+ ],
11047
12171
  buttonPersonalityChoices: [
11048
12172
  buttonChoice("confident-chip"),
11049
12173
  buttonChoice("soft-pill"),
@@ -11070,7 +12194,11 @@ var curatedSiteStyles = [
11070
12194
  motion: "subtle"
11071
12195
  },
11072
12196
  compositionBudget: balancedBudget,
11073
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
12197
+ recommendedHeaderLookIds: [
12198
+ "serif-line",
12199
+ "minimal-transparent",
12200
+ "centered-calm"
12201
+ ],
11074
12202
  buttonPersonalityChoices: [
11075
12203
  buttonChoice("editorial-link"),
11076
12204
  buttonChoice("soft-pill"),
@@ -11098,7 +12226,11 @@ var curatedSiteStyles = [
11098
12226
  motion: "expressive"
11099
12227
  },
11100
12228
  compositionBudget: balancedBudget,
11101
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12229
+ recommendedHeaderLookIds: [
12230
+ "brand-solid",
12231
+ "practical-utility",
12232
+ "clean-base"
12233
+ ],
11102
12234
  buttonPersonalityChoices: [
11103
12235
  buttonChoice("pebble"),
11104
12236
  buttonChoice("brushed-wash"),
@@ -11115,7 +12247,10 @@ var curatedSiteStyles = [
11115
12247
  name: "Quiet Luxury",
11116
12248
  description: "Minimal, confident, and refined for premium experiences and private services.",
11117
12249
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
11118
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
12250
+ siteCreatorSelection: {
12251
+ kind: "site_creator_keyword_heuristic",
12252
+ priority: 20
12253
+ },
11119
12254
  selectionKeywordRules: [
11120
12255
  { kind: "word", value: "luxury" },
11121
12256
  { kind: "word", value: "premium" },
@@ -11133,7 +12268,11 @@ var curatedSiteStyles = [
11133
12268
  motion: "none"
11134
12269
  },
11135
12270
  compositionBudget: quietBudget,
11136
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
12271
+ recommendedHeaderLookIds: [
12272
+ "minimal-transparent",
12273
+ "serif-line",
12274
+ "clean-base"
12275
+ ],
11137
12276
  buttonPersonalityChoices: [
11138
12277
  buttonChoice("editorial-link"),
11139
12278
  buttonChoice("confident-chip"),
@@ -11169,7 +12308,11 @@ var curatedSiteStyles = [
11169
12308
  motion: "none"
11170
12309
  },
11171
12310
  compositionBudget: quietBudget,
11172
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
12311
+ recommendedHeaderLookIds: [
12312
+ "practical-utility",
12313
+ "brand-solid",
12314
+ "clean-base"
12315
+ ],
11173
12316
  buttonPersonalityChoices: [
11174
12317
  buttonChoice("confident-chip"),
11175
12318
  buttonChoice("pebble"),
@@ -11196,7 +12339,11 @@ var curatedSiteStyles = [
11196
12339
  motion: "subtle"
11197
12340
  },
11198
12341
  compositionBudget: balancedBudget,
11199
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
12342
+ recommendedHeaderLookIds: [
12343
+ "centered-calm",
12344
+ "minimal-transparent",
12345
+ "clean-base"
12346
+ ],
11200
12347
  buttonPersonalityChoices: [
11201
12348
  buttonChoice("soft-pill"),
11202
12349
  buttonChoice("pebble"),
@@ -11213,7 +12360,10 @@ var curatedSiteStyles = [
11213
12360
  name: "Quiet Practice",
11214
12361
  description: "Grounded, calm, and practical for small appointment-first practices.",
11215
12362
  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.",
11216
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
12363
+ siteCreatorSelection: {
12364
+ kind: "site_creator_keyword_heuristic",
12365
+ priority: 30
12366
+ },
11217
12367
  selectionKeywordRules: [
11218
12368
  { kind: "substring", value: "massage" },
11219
12369
  { kind: "word", value: "bodywork" },
@@ -11234,7 +12384,11 @@ var curatedSiteStyles = [
11234
12384
  motion: "subtle"
11235
12385
  },
11236
12386
  compositionBudget: quietBudget,
11237
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
12387
+ recommendedHeaderLookIds: [
12388
+ "practical-utility",
12389
+ "clean-base",
12390
+ "centered-calm"
12391
+ ],
11238
12392
  buttonPersonalityChoices: [
11239
12393
  buttonChoice("pebble"),
11240
12394
  buttonChoice("soft-pill"),
@@ -11251,7 +12405,10 @@ var curatedSiteStyles = [
11251
12405
  name: "Personal Retreat Journal",
11252
12406
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
11253
12407
  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.",
11254
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
12408
+ siteCreatorSelection: {
12409
+ kind: "site_creator_keyword_heuristic",
12410
+ priority: 40
12411
+ },
11255
12412
  selectionKeywordRules: [
11256
12413
  { kind: "substring", value: "retreat" },
11257
12414
  { kind: "phrase", value: "solo practitioner" },
@@ -11271,7 +12428,11 @@ var curatedSiteStyles = [
11271
12428
  motion: "subtle"
11272
12429
  },
11273
12430
  compositionBudget: balancedBudget,
11274
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
12431
+ recommendedHeaderLookIds: [
12432
+ "serif-line",
12433
+ "centered-calm",
12434
+ "minimal-transparent"
12435
+ ],
11275
12436
  buttonPersonalityChoices: [
11276
12437
  buttonChoice("editorial-link"),
11277
12438
  buttonChoice("soft-pill"),
@@ -11288,7 +12449,10 @@ var curatedSiteStyles = [
11288
12449
  name: "Tactile Workshop",
11289
12450
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
11290
12451
  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.",
11291
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
12452
+ siteCreatorSelection: {
12453
+ kind: "site_creator_keyword_heuristic",
12454
+ priority: 50
12455
+ },
11292
12456
  selectionKeywordRules: [
11293
12457
  { kind: "substring", value: "ceramic" },
11294
12458
  { kind: "word", value: "pottery" },
@@ -11308,8 +12472,15 @@ var curatedSiteStyles = [
11308
12472
  motion: "subtle"
11309
12473
  },
11310
12474
  compositionBudget: balancedBudget,
11311
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
11312
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12475
+ recommendedHeaderLookIds: [
12476
+ "brand-solid",
12477
+ "practical-utility",
12478
+ "clean-base"
12479
+ ],
12480
+ recommendedFooterLookIds: [
12481
+ "site-footer-brand-two-band",
12482
+ "footer-muted-grounding"
12483
+ ],
11313
12484
  buttonPersonalityChoices: [
11314
12485
  buttonChoice("pebble"),
11315
12486
  buttonChoice("confident-chip"),
@@ -11324,101 +12495,178 @@ var curatedSiteStyles = [
11324
12495
  ]
11325
12496
  }),
11326
12497
  defineCuratedSiteStyle({
11327
- id: "site-style:bold-launch",
11328
- name: "Bold Launch",
11329
- description: "High-energy and punchy for launches, campaigns, and creative offers.",
11330
- generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
11331
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
11332
- selectionKeywordRules: [
11333
- { kind: "substring", value: "launch" },
11334
- { kind: "substring", value: "campaign" },
11335
- { kind: "word", value: "preorder" },
11336
- { kind: "phrase", value: "pre-order" },
11337
- { kind: "substring", value: "waitlist" },
11338
- { kind: "word", value: "drop" }
11339
- ],
11340
- tokenRecipes: {
11341
- palette: "high-contrast",
11342
- contrast: "maximum",
11343
- radius: "pill",
11344
- shadow: "layered",
11345
- typography: "clean-sans",
11346
- spacing: "regular",
11347
- motion: "expressive"
12498
+ id: "site-style:soft-earth",
12499
+ name: "Soft Earth",
12500
+ description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
12501
+ 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.",
12502
+ siteCreatorSelection: {
12503
+ kind: "site_creator_keyword_heuristic",
12504
+ priority: 45
11348
12505
  },
11349
- compositionBudget: expressiveBudget,
11350
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
11351
- buttonPersonalityChoices: [
11352
- buttonChoice("ink-stamp"),
11353
- buttonChoice("confident-chip"),
11354
- buttonChoice("brushed-wash"),
11355
- buttonChoice("pebble")
12506
+ selectionKeywordRules: [
12507
+ { kind: "word", value: "meditation" },
12508
+ { kind: "word", value: "wellbeing" },
12509
+ { kind: "substring", value: "retreat" },
12510
+ { kind: "phrase", value: "yoga studio" },
12511
+ { kind: "phrase", value: "mindful movement" }
11356
12512
  ],
11357
- paletteVariantChoices: [
11358
- paletteChoice("high-contrast-monochrome"),
11359
- paletteChoice("high-contrast-ink"),
11360
- paletteChoice("brand-led-jewel"),
11361
- paletteChoice("brand-led-warm")
11362
- ]
11363
- }),
11364
- defineCuratedSiteStyle({
11365
- id: "site-style:south-west-twerk-school",
11366
- name: "South West Twerk School",
11367
- description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
11368
- 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.",
11369
12513
  tokenRecipes: {
11370
- palette: "brand-led",
11371
- contrast: "maximum",
12514
+ palette: "warm-neutral",
12515
+ contrast: "standard",
11372
12516
  radius: "soft",
11373
- shadow: "layered",
11374
- typography: "clean-sans",
12517
+ shadow: "subtle",
12518
+ typography: "serif-editorial",
11375
12519
  spacing: "airy",
11376
- motion: "expressive"
12520
+ motion: "subtle"
11377
12521
  },
11378
- compositionBudget: expressiveBudget,
12522
+ compositionBudget: balancedBudget,
11379
12523
  themeOverrides: {
11380
12524
  typography: {
11381
12525
  body: {
11382
- family: "Manrope, system-ui, sans-serif",
11383
- size: "lg",
12526
+ family: "Inter, system-ui, sans-serif",
12527
+ size: "md",
11384
12528
  weight: "regular",
11385
12529
  lineHeight: "relaxed",
11386
12530
  letterSpacing: "normal"
11387
12531
  },
11388
12532
  headings: {
11389
12533
  default: {
11390
- family: '"TAN - PEARL", sans-serif',
11391
- weight: "bold",
12534
+ family: '"Cormorant Garamond", Georgia, serif',
12535
+ weight: "regular",
11392
12536
  lineHeight: "normal",
11393
- letterSpacing: "tight",
11394
- colorToken: "primary",
12537
+ letterSpacing: "normal",
12538
+ colorToken: "text",
11395
12539
  italic: null,
11396
12540
  case: null
11397
12541
  },
11398
12542
  h1: {
11399
12543
  size: "xl",
11400
- weight: "bold",
12544
+ weight: "regular",
11401
12545
  lineHeight: "normal",
11402
- letterSpacing: "tight",
12546
+ letterSpacing: "normal",
11403
12547
  italic: null
11404
12548
  },
11405
12549
  h2: {
11406
12550
  size: "lg",
11407
- weight: "bold",
12551
+ weight: "regular",
11408
12552
  lineHeight: "normal",
11409
12553
  letterSpacing: "normal",
11410
12554
  italic: null
11411
12555
  },
11412
12556
  h3: {
11413
12557
  size: "md",
11414
- weight: "bold",
12558
+ weight: "regular",
11415
12559
  lineHeight: "normal",
11416
12560
  letterSpacing: "normal",
11417
12561
  italic: null
11418
12562
  }
11419
12563
  },
11420
- scale: "balanced"
12564
+ scale: "majorThird"
11421
12565
  },
12566
+ bodyText: {
12567
+ intro: {
12568
+ paragraphSize: "default",
12569
+ headingSize: "editorial"
12570
+ }
12571
+ }
12572
+ },
12573
+ recommendedAppearancePresetIds: [
12574
+ "hero-brand-scrim",
12575
+ "intro-soft-earth-statement",
12576
+ "feature-cards-soft-earth-offerings",
12577
+ "testimonials-soft-earth-proof-band",
12578
+ "faq-soft-earth-two-column",
12579
+ "contact-form-panel"
12580
+ ],
12581
+ recommendedHeaderLookIds: [
12582
+ "centered-calm",
12583
+ "minimal-transparent",
12584
+ "serif-line"
12585
+ ],
12586
+ recommendedFooterLookIds: [
12587
+ "footer-muted-grounding",
12588
+ "site-footer-brand-two-band"
12589
+ ],
12590
+ buttonPersonalityChoices: [
12591
+ buttonChoice("earth-pill"),
12592
+ buttonChoice("soft-pill"),
12593
+ buttonChoice("pebble"),
12594
+ buttonChoice("editorial-link")
12595
+ ],
12596
+ paletteVariantChoices: [
12597
+ paletteChoice("warm-neutral-soft-earth"),
12598
+ paletteChoice("warm-neutral-clay"),
12599
+ paletteChoice("warm-neutral-forest"),
12600
+ paletteChoice("soft-natural-sage")
12601
+ ]
12602
+ }),
12603
+ defineCuratedSiteStyle({
12604
+ id: "site-style:bold-launch",
12605
+ name: "Bold Launch",
12606
+ description: "High-energy and punchy for launches, campaigns, and creative offers.",
12607
+ generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
12608
+ siteCreatorSelection: {
12609
+ kind: "site_creator_keyword_heuristic",
12610
+ priority: 10
12611
+ },
12612
+ selectionKeywordRules: [
12613
+ { kind: "substring", value: "launch" },
12614
+ { kind: "substring", value: "campaign" },
12615
+ { kind: "word", value: "preorder" },
12616
+ { kind: "phrase", value: "pre-order" },
12617
+ { kind: "substring", value: "waitlist" },
12618
+ { kind: "word", value: "drop" }
12619
+ ],
12620
+ tokenRecipes: {
12621
+ palette: "high-contrast",
12622
+ contrast: "maximum",
12623
+ radius: "pill",
12624
+ shadow: "layered",
12625
+ typography: "clean-sans",
12626
+ spacing: "regular",
12627
+ motion: "expressive"
12628
+ },
12629
+ compositionBudget: expressiveBudget,
12630
+ recommendedHeaderLookIds: [
12631
+ "transparent-overlay",
12632
+ "floating-glass",
12633
+ "brand-solid"
12634
+ ],
12635
+ buttonPersonalityChoices: [
12636
+ buttonChoice("ink-stamp"),
12637
+ buttonChoice("confident-chip"),
12638
+ buttonChoice("brushed-wash"),
12639
+ buttonChoice("pebble")
12640
+ ],
12641
+ paletteVariantChoices: [
12642
+ paletteChoice("high-contrast-monochrome"),
12643
+ paletteChoice("high-contrast-ink"),
12644
+ paletteChoice("brand-led-jewel"),
12645
+ paletteChoice("brand-led-warm")
12646
+ ]
12647
+ }),
12648
+ defineCuratedSiteStyle({
12649
+ id: "site-style:south-west-twerk-school",
12650
+ name: "South West Twerk School",
12651
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
12652
+ 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.",
12653
+ tokenRecipes: {
12654
+ palette: "brand-led",
12655
+ contrast: "maximum",
12656
+ radius: "soft",
12657
+ shadow: "layered",
12658
+ typography: "clean-sans",
12659
+ spacing: "airy",
12660
+ motion: "expressive"
12661
+ },
12662
+ compositionBudget: expressiveBudget,
12663
+ typographyPresetChoices: [
12664
+ typographyChoice("typography-preset:bold-display"),
12665
+ typographyChoice("typography-preset:modern-sans"),
12666
+ typographyChoice("typography-preset:luxe-contrast")
12667
+ ],
12668
+ defaultTypographyPresetId: "typography-preset:bold-display",
12669
+ themeOverrides: {
11422
12670
  bodyText: {
11423
12671
  intro: {
11424
12672
  paragraphSize: "editorial",
@@ -11434,8 +12682,15 @@ var curatedSiteStyles = [
11434
12682
  "testimonials-accent-quote-proof",
11435
12683
  "contact-form-brand-depth-card"
11436
12684
  ],
11437
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
11438
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12685
+ recommendedHeaderLookIds: [
12686
+ "brand-solid",
12687
+ "transparent-overlay",
12688
+ "practical-utility"
12689
+ ],
12690
+ recommendedFooterLookIds: [
12691
+ "site-footer-brand-two-band",
12692
+ "footer-muted-grounding"
12693
+ ],
11439
12694
  buttonPersonalityChoices: [
11440
12695
  buttonChoice("showtime-pill"),
11441
12696
  buttonChoice("confident-chip"),
@@ -15761,8 +17016,9 @@ var faqAccordionFragment = defineFragment({
15761
17016
  },
15762
17017
  fallback: "rb-faq-item"
15763
17018
  },
15764
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } }
15765
- // Pass icon style from theme
17019
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
17020
+ // Legacy theme accordion style
17021
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
15766
17022
  },
15767
17023
  triggerFrom: "faqItem.question",
15768
17024
  contentFrom: "faqItem.answer"
@@ -16840,61 +18096,389 @@ function splitLayoutWith(children) {
16840
18096
  children
16841
18097
  }
16842
18098
  }),
16843
- // The split variants render the image as a real grid column, so suppress
16844
- // the default absolute background image layer while keeping color/overlay.
16845
- renderBackgroundImage: false,
16846
- baseClass: ""
16847
- });
16848
- }
16849
- var splitContentColumn = heroContentWrapper(heroContentNodes, "md", "rb-w-full rb-text-left");
16850
- var splitImageColumn = heroSplitImagePane();
16851
- var splitLayout = splitLayoutWith([
16852
- splitContentColumn,
16853
- splitImageColumn
16854
- ]);
16855
- var splitReverseLayout = splitLayoutWith([
16856
- splitImageColumn,
16857
- splitContentColumn
16858
- ]);
16859
- var heroConfig = {
16860
- id: "block.hero",
16861
- title: "Hero",
16862
- titleSource: "headline",
16863
- category: "layout",
16864
- includeContainerStyles: true,
16865
- promotedFields: ["_sectionStyles.background.image"],
16866
- fragments: [
16867
- { fragment: heroCopyFragment, fieldPriority: 0 },
16868
- { fragment: heroLayoutControlsFragment, fieldPriority: 1 },
16869
- { fragment: heroCtaRowFragment, fieldPriority: 2 }
16870
- ],
16871
- additionalFields: [
16872
- containerStylesField({
16873
- id: "_contentCardStyles",
16874
- label: "Content card",
16875
- renderInHeader: true,
16876
- intent: "style"
18099
+ // The split variants render the image as a real grid column, so suppress
18100
+ // the default absolute background image layer while keeping color/overlay.
18101
+ renderBackgroundImage: false,
18102
+ baseClass: ""
18103
+ });
18104
+ }
18105
+ var splitContentColumn = heroContentWrapper(heroContentNodes, "md", "rb-w-full rb-text-left");
18106
+ var splitImageColumn = heroSplitImagePane();
18107
+ var splitLayout = splitLayoutWith([
18108
+ splitContentColumn,
18109
+ splitImageColumn
18110
+ ]);
18111
+ var splitReverseLayout = splitLayoutWith([
18112
+ splitImageColumn,
18113
+ splitContentColumn
18114
+ ]);
18115
+ var heroConfig = {
18116
+ id: "block.hero",
18117
+ title: "Hero",
18118
+ titleSource: "headline",
18119
+ category: "layout",
18120
+ includeContainerStyles: true,
18121
+ promotedFields: ["_sectionStyles.background.image"],
18122
+ fragments: [
18123
+ { fragment: heroCopyFragment, fieldPriority: 0 },
18124
+ { fragment: heroLayoutControlsFragment, fieldPriority: 1 },
18125
+ { fragment: heroCtaRowFragment, fieldPriority: 2 }
18126
+ ],
18127
+ additionalFields: [
18128
+ containerStylesField({
18129
+ id: "_contentCardStyles",
18130
+ label: "Content card",
18131
+ renderInHeader: true,
18132
+ intent: "style"
18133
+ })
18134
+ ],
18135
+ layout: classicLayout,
18136
+ variants: {
18137
+ classic: classicLayout,
18138
+ micro: microLayout,
18139
+ split: splitLayout,
18140
+ splitReverse: splitReverseLayout
18141
+ },
18142
+ defaultVariant: "classic",
18143
+ description: "Hero section with headline, subtitle, and repeatable CTAs.",
18144
+ tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
18145
+ icon: "Sparkles",
18146
+ styleTokens: {
18147
+ typography: "display",
18148
+ spacing: "xl"
18149
+ }
18150
+ };
18151
+ var heroManifest = createBlockManifest(heroConfig);
18152
+ var heroBlockDefinition = {
18153
+ manifest: heroManifest
18154
+ };
18155
+
18156
+ // ../blocks/src/system/fields/aspectRatio.ts
18157
+ var standardAspectRatioOptions = [
18158
+ { value: "auto", label: "Auto (original)" },
18159
+ { value: "16/9", label: "16:9 (Landscape)" },
18160
+ { value: "4/3", label: "4:3 (Standard)" },
18161
+ { value: "1/1", label: "1:1 (Square)" },
18162
+ { value: "3/4", label: "3:4 (Portrait)" }
18163
+ ];
18164
+ function createAspectRatioField(options = {}) {
18165
+ return {
18166
+ id: options.id ?? "aspectRatio",
18167
+ type: "select",
18168
+ label: options.label ?? "Aspect ratio",
18169
+ ...options.description ? { description: options.description } : {},
18170
+ required: false,
18171
+ defaultValue: options.defaultValue ?? "auto",
18172
+ multiple: false,
18173
+ options: [...standardAspectRatioOptions],
18174
+ ui: {
18175
+ intent: options.uiIntent ?? "display",
18176
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
18177
+ }
18178
+ };
18179
+ }
18180
+
18181
+ // ../blocks/src/system/fields/imageLayout.ts
18182
+ function createImageColSizeField(options = {}) {
18183
+ const {
18184
+ id = "imageColSize",
18185
+ label = "Image column size",
18186
+ description = "Controls how large the image/thumbnail column is at desktop breakpoints.",
18187
+ defaultValue = "1/3",
18188
+ uiIntent = "display",
18189
+ visibleWhen
18190
+ } = options;
18191
+ return {
18192
+ id,
18193
+ type: "select",
18194
+ label,
18195
+ description,
18196
+ required: false,
18197
+ defaultValue,
18198
+ multiple: false,
18199
+ options: [
18200
+ { value: "1/4", label: "Small (1/4)" },
18201
+ { value: "1/3", label: "Medium (1/3)" },
18202
+ { value: "2/5", label: "Large (2/5)" },
18203
+ { value: "1/2", label: "Extra large (1/2)" },
18204
+ { value: "2/3", label: "Huge (2/3)" }
18205
+ ],
18206
+ ui: {
18207
+ intent: uiIntent,
18208
+ ...visibleWhen ? { visibleWhen } : {}
18209
+ }
18210
+ };
18211
+ }
18212
+ function createImagePositionField(options = {}) {
18213
+ const {
18214
+ id = "imagePosition",
18215
+ label = "Image position",
18216
+ description = "Choose which side the image appears on.",
18217
+ defaultValue = "left",
18218
+ includeAlternate = false,
18219
+ uiIntent = "display",
18220
+ visibleWhen
18221
+ } = options;
18222
+ const positionOptions = [
18223
+ { value: "left", label: "Left" },
18224
+ { value: "right", label: "Right" },
18225
+ ...includeAlternate ? [{ value: "alternate", label: "Alternate" }] : []
18226
+ ];
18227
+ return {
18228
+ id,
18229
+ type: "select",
18230
+ label,
18231
+ description,
18232
+ required: false,
18233
+ defaultValue,
18234
+ multiple: false,
18235
+ // Spread to get a mutable array type without unsafe casts.
18236
+ options: [...positionOptions],
18237
+ ui: {
18238
+ intent: uiIntent,
18239
+ ...visibleWhen ? { visibleWhen } : {}
18240
+ }
18241
+ };
18242
+ }
18243
+
18244
+ // ../blocks/src/system/blocks/intro.ts
18245
+ function introHeading(className) {
18246
+ return text(
18247
+ {
18248
+ as: "h2",
18249
+ className
18250
+ },
18251
+ when("content.title"),
18252
+ bind("content.title")
18253
+ );
18254
+ }
18255
+ function introBody(className = "rb-prose rb-max-w-none") {
18256
+ return richText({ className }, bind("content.body"));
18257
+ }
18258
+ function introCtas(justify = "start") {
18259
+ return ctaRow({
18260
+ justify,
18261
+ gap: "md",
18262
+ containerClassName: "rb-mt-2"
18263
+ });
18264
+ }
18265
+ function introCopyStack(options = {}) {
18266
+ return stack(
18267
+ {
18268
+ gap: "md",
18269
+ className: options.className ?? "rb-intro-copy"
18270
+ },
18271
+ [
18272
+ introHeading(options.headingClassName ?? "rb-intro-title"),
18273
+ introBody(options.bodyClassName),
18274
+ introCtas(options.ctaJustify)
18275
+ ]
18276
+ );
18277
+ }
18278
+ var introMedia = media(
18279
+ {
18280
+ className: "rb-intro-media rb-w-full rb-h-auto rb-object-cover",
18281
+ style: {
18282
+ aspectRatio: { $bind: { from: "content.aspectRatio" } }
18283
+ }
18284
+ },
18285
+ bind("content.media")
18286
+ );
18287
+ var centeredCopyLayout = styledSection({
18288
+ children: styledContainer({
18289
+ rootType: "stack",
18290
+ rootProps: { gap: "lg" },
18291
+ children: [
18292
+ introCopyStack({
18293
+ className: "rb-intro-copy rb-mx-auto rb-max-w-3xl rb-text-center",
18294
+ headingClassName: "rb-intro-title rb-text-center",
18295
+ bodyClassName: "rb-prose rb-mx-auto rb-max-w-none",
18296
+ ctaJustify: "center"
18297
+ })
18298
+ ]
18299
+ }),
18300
+ baseClass: "",
18301
+ spacing: "medium"
18302
+ });
18303
+ var statementCopyLayout = styledSection({
18304
+ children: styledContainer({
18305
+ children: [
18306
+ el(
18307
+ "div",
18308
+ {
18309
+ className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
18310
+ },
18311
+ [
18312
+ introHeading("rb-intro-title rb-max-w-xl"),
18313
+ stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18314
+ introBody(),
18315
+ introCtas("start")
18316
+ ])
18317
+ ]
18318
+ )
18319
+ ]
18320
+ }),
18321
+ baseClass: "",
18322
+ spacing: "medium"
18323
+ });
18324
+ var statementMediaLayout = styledSection({
18325
+ children: styledContainer({
18326
+ children: [
18327
+ el(
18328
+ "div",
18329
+ {
18330
+ 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"
18331
+ },
18332
+ [
18333
+ introHeading("rb-intro-title rb-max-w-xl"),
18334
+ stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18335
+ introBody(),
18336
+ introCtas("start")
18337
+ ]),
18338
+ el("div", { className: "rb-intro-media-wrap rb-w-full" }, [introMedia], when("content.media"))
18339
+ ]
18340
+ )
18341
+ ]
18342
+ }),
18343
+ baseClass: "",
18344
+ spacing: "medium"
18345
+ });
18346
+ var mediaCopyLayout = styledSection({
18347
+ children: styledContainer({
18348
+ children: [
18349
+ responsiveTwoColumn({
18350
+ image: el("div", { className: "rb-intro-media-wrap rb-w-full" }, [introMedia]),
18351
+ text: introCopyStack({
18352
+ className: "rb-intro-copy rb-max-w-xl",
18353
+ headingClassName: "rb-intro-title"
18354
+ }),
18355
+ ratioFrom: "content.ratio",
18356
+ imagePositionFrom: "content.imagePosition",
18357
+ gapFrom: "content.gap",
18358
+ gapFallback: "comfortable",
18359
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
18360
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-center"
18361
+ })
18362
+ ]
18363
+ }),
18364
+ baseClass: "",
18365
+ spacing: "medium"
18366
+ });
18367
+ var introConfig = {
18368
+ id: "block.intro",
18369
+ title: "Intro",
18370
+ category: "layout",
18371
+ includeContainerStyles: true,
18372
+ titleSource: "title",
18373
+ additionalFields: [
18374
+ {
18375
+ id: "title",
18376
+ type: "text",
18377
+ label: "Statement",
18378
+ required: false,
18379
+ multiline: true,
18380
+ maxLength: 160
18381
+ },
18382
+ {
18383
+ id: "body",
18384
+ type: "richText",
18385
+ label: "Text",
18386
+ required: true,
18387
+ ui: {
18388
+ richTextVariant: "limited"
18389
+ }
18390
+ },
18391
+ {
18392
+ id: "media",
18393
+ type: "media",
18394
+ label: "Media",
18395
+ required: false,
18396
+ mediaKinds: ["image"],
18397
+ ui: {
18398
+ intent: "content",
18399
+ visibleWhen: { field: "variant", notEquals: "statement-copy" }
18400
+ }
18401
+ },
18402
+ createImagePositionField({
18403
+ id: "imagePosition",
18404
+ label: "Image position",
18405
+ defaultValue: "left",
18406
+ uiIntent: "display",
18407
+ visibleWhen: { field: "variant", equals: "media-copy" }
18408
+ }),
18409
+ {
18410
+ id: "gap",
18411
+ type: "select",
18412
+ label: "Gap between media and text",
18413
+ required: false,
18414
+ defaultValue: "comfortable",
18415
+ multiple: false,
18416
+ options: [
18417
+ { value: "none", label: "None" },
18418
+ { value: "compact", label: "Compact" },
18419
+ { value: "cozy", label: "Cozy" },
18420
+ { value: "medium", label: "Medium" },
18421
+ { value: "comfortable", label: "Comfortable" },
18422
+ { value: "spacious", label: "Spacious" }
18423
+ ],
18424
+ ui: {
18425
+ intent: "display",
18426
+ visibleWhen: { field: "variant", equals: "media-copy" }
18427
+ }
18428
+ },
18429
+ createImageColSizeField({
18430
+ id: "ratio",
18431
+ label: "Media column size",
18432
+ defaultValue: "1/2",
18433
+ uiIntent: "display",
18434
+ visibleWhen: { field: "variant", equals: "media-copy" }
18435
+ }),
18436
+ createAspectRatioField({
18437
+ id: "aspectRatio",
18438
+ label: "Media aspect ratio",
18439
+ description: "Crop media to a consistent aspect ratio.",
18440
+ defaultValue: "auto",
18441
+ visibleWhen: { field: "media", notEquals: null }
18442
+ }),
18443
+ createCtasRepeater({
18444
+ label: "Calls to action",
18445
+ itemLabel: "CTA",
18446
+ maxItems: 2
16877
18447
  })
16878
18448
  ],
16879
- layout: classicLayout,
18449
+ layout: centeredCopyLayout,
16880
18450
  variants: {
16881
- classic: classicLayout,
16882
- micro: microLayout,
16883
- split: splitLayout,
16884
- splitReverse: splitReverseLayout
18451
+ "centered-copy": centeredCopyLayout,
18452
+ "statement-copy": statementCopyLayout,
18453
+ "statement-media": statementMediaLayout,
18454
+ "media-copy": mediaCopyLayout
16885
18455
  },
16886
- defaultVariant: "classic",
16887
- description: "Hero section with headline, subtitle, and repeatable CTAs.",
16888
- tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
16889
- icon: "Sparkles",
16890
- styleTokens: {
16891
- typography: "display",
16892
- spacing: "xl"
16893
- }
18456
+ defaultVariant: "statement-copy",
18457
+ variantOptions: {
18458
+ "centered-copy": {
18459
+ label: "Centered copy",
18460
+ description: "A focused intro with centered text and optional calls to action."
18461
+ },
18462
+ "statement-copy": {
18463
+ label: "Statement and copy",
18464
+ description: "A large statement on the left with supporting copy on the right."
18465
+ },
18466
+ "statement-media": {
18467
+ label: "Statement, copy and media",
18468
+ description: "A three-part intro with statement, copy and a small image."
18469
+ },
18470
+ "media-copy": {
18471
+ label: "Media and copy",
18472
+ description: "A compact media/text intro for softer transitions after a hero."
18473
+ }
18474
+ },
18475
+ description: "A flexible introductory section for statement copy, supporting text, media, and CTAs.",
18476
+ tags: ["intro", "introduction", "about", "welcome", "statement", "media", "text"],
18477
+ icon: "PanelTopOpen"
16894
18478
  };
16895
- var heroManifest = createBlockManifest(heroConfig);
16896
- var heroBlockDefinition = {
16897
- manifest: heroManifest
18479
+ var introManifest = createBlockManifest(introConfig);
18480
+ var introBlockDefinition = {
18481
+ manifest: introManifest
16898
18482
  };
16899
18483
 
16900
18484
  // ../blocks/src/system/blocks/body-text.ts
@@ -17740,6 +19324,37 @@ var faqComposition = composeFragments([
17740
19324
  { fragment: faqHeadingFragment, fieldPriority: 0 },
17741
19325
  { fragment: faqAccordionFragment, fieldPriority: 1 }
17742
19326
  ]);
19327
+ function fragmentLayoutNode(layout) {
19328
+ return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
19329
+ }
19330
+ function isNodeDefinitionArray(layout) {
19331
+ return Array.isArray(layout);
19332
+ }
19333
+ var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
19334
+ var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
19335
+ var defaultLayout = styledSection({
19336
+ children: styledContainer({
19337
+ baseClassName: "rb-relative rb-isolate",
19338
+ children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, faqComposition.layout)
19339
+ }),
19340
+ baseClass: ""
19341
+ });
19342
+ var twoColumnLayout = styledSection({
19343
+ children: styledContainer({
19344
+ baseClassName: "rb-relative rb-isolate",
19345
+ children: el(
19346
+ "div",
19347
+ {
19348
+ className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19349
+ },
19350
+ [
19351
+ el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
19352
+ el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
19353
+ ]
19354
+ )
19355
+ }),
19356
+ baseClass: ""
19357
+ });
17743
19358
  var faqManifest = createBlockManifest({
17744
19359
  id: "block.faq",
17745
19360
  title: "FAQ",
@@ -17756,13 +19371,22 @@ var faqManifest = createBlockManifest({
17756
19371
  label: "FAQ item styles"
17757
19372
  })
17758
19373
  ],
17759
- layout: styledSection({
17760
- children: styledContainer({
17761
- baseClassName: "rb-relative rb-isolate",
17762
- children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, faqComposition.layout)
17763
- }),
17764
- baseClass: ""
17765
- }),
19374
+ layout: defaultLayout,
19375
+ variants: {
19376
+ default: defaultLayout,
19377
+ "two-column": twoColumnLayout
19378
+ },
19379
+ defaultVariant: "default",
19380
+ variantOptions: {
19381
+ default: {
19382
+ label: "Default",
19383
+ description: "A centered heading above one FAQ accordion."
19384
+ },
19385
+ "two-column": {
19386
+ label: "Two column",
19387
+ description: "A left heading column with FAQ items on the right."
19388
+ }
19389
+ },
17766
19390
  description: "Accordion of frequently asked questions and answers.",
17767
19391
  tags: ["faq", "questions", "answers", "help", "support", "accordion", "q&a"],
17768
19392
  icon: "HelpCircle"
@@ -18412,7 +20036,8 @@ function resolveBackgroundVisualStyles(backgroundColor, tokens, defaultToken = "
18412
20036
  function resolveHeaderVisualStyles(header, tokens) {
18413
20037
  const navContainerType = header?.navContainer?.type ?? "none";
18414
20038
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
18415
- if (hasContainedNav) {
20039
+ const hasTransparentVariant = header?.variant === "transparent" || header?.variant === "floating";
20040
+ if (hasContainedNav || hasTransparentVariant) {
18416
20041
  return {
18417
20042
  backgroundToken: "transparent",
18418
20043
  paletteHex: null,
@@ -18470,10 +20095,7 @@ var headerRootClassTransform = {
18470
20095
  const navContainerType = header?.navContainer?.type ?? "none";
18471
20096
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
18472
20097
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
18473
- const classes = [
18474
- config.base,
18475
- backgroundClass
18476
- ];
20098
+ const classes = [config.base, backgroundClass];
18477
20099
  if (!hasContainedNav) {
18478
20100
  if (config.blur) classes.push(config.blur);
18479
20101
  if (config.blurSupport) classes.push(config.blurSupport);
@@ -18488,7 +20110,12 @@ var headerRootClassTransform = {
18488
20110
  if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
18489
20111
  classes.push(config.shrink);
18490
20112
  }
18491
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
20113
+ const VALID_VARIANTS = [
20114
+ "classic",
20115
+ "centered",
20116
+ "transparent",
20117
+ "floating"
20118
+ ];
18492
20119
  const variant = header?.variant;
18493
20120
  if (variant && VALID_VARIANTS.includes(variant)) {
18494
20121
  classes.push(`header-variant-${variant}`);
@@ -18541,6 +20168,17 @@ var headerRootStyleTransform = {
18541
20168
  return mergeStyles(...styleParts);
18542
20169
  }
18543
20170
  };
20171
+ var headerSectionBackgroundTransform = {
20172
+ id: "layout.headerSectionBackground",
20173
+ kind: "string",
20174
+ summary: "Resolve the inner site-header section background token",
20175
+ run: (value) => {
20176
+ const header = asPartialObject(value);
20177
+ const navContainerType = header?.navContainer?.type ?? "none";
20178
+ const usesTransparentRoot = header?.variant === "transparent" || header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill";
20179
+ return usesTransparentRoot ? "raw:transparent" : "background";
20180
+ }
20181
+ };
18544
20182
  var footerRootStyleTransform = {
18545
20183
  id: "layout.footerRootStyle",
18546
20184
  kind: "formatter",
@@ -18799,6 +20437,7 @@ var layoutTransforms = [
18799
20437
  headerRootClassTransform,
18800
20438
  footerRootClassTransform,
18801
20439
  headerRootStyleTransform,
20440
+ headerSectionBackgroundTransform,
18802
20441
  footerRootStyleTransform,
18803
20442
  footerBottomBarClassTransform,
18804
20443
  footerBottomBarContainerClassTransform,
@@ -19097,15 +20736,21 @@ var mobileCta = ctaButton({
19097
20736
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
19098
20737
  {
19099
20738
  type: "div",
19100
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
20739
+ props: {
20740
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
20741
+ }
19101
20742
  },
19102
20743
  {
19103
20744
  type: "div",
19104
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
20745
+ props: {
20746
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
20747
+ }
19105
20748
  },
19106
20749
  {
19107
20750
  type: "div",
19108
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
20751
+ props: {
20752
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
20753
+ }
19109
20754
  }
19110
20755
  ]);
19111
20756
  var mobileToggleButton = {
@@ -19288,31 +20933,12 @@ var floatingLayout = inline(
19288
20933
  ],
19289
20934
  when("$root.theme.header.variant", { equals: "floating" })
19290
20935
  );
19291
- var editorialLayout = stack(
19292
- {
19293
- gap: "md",
19294
- align: "center",
19295
- className: bindProp("$root.theme.header.maxWidth", {
19296
- transforms: pipe(
19297
- tx("layout.maxWidthClass", {
19298
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
19299
- })
19300
- ),
19301
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
19302
- })
19303
- },
19304
- [
19305
- centeredLogoRow,
19306
- createNavRow(
19307
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
19308
- "center"
19309
- )
19310
- ],
19311
- when("$root.theme.header.variant", { equals: "editorial" })
19312
- );
19313
20936
  var headerLayout = headerSection(
19314
20937
  {
19315
- background: "background",
20938
+ background: bindProp("$root.theme.header", {
20939
+ transforms: pipe(tx("layout.headerSectionBackground")),
20940
+ fallback: "background"
20941
+ }),
19316
20942
  allowOverflow: true,
19317
20943
  className: bindProp("$root.theme.header", {
19318
20944
  transforms: pipe(tx("layout.headerRootClass")),
@@ -19320,10 +20946,7 @@ var headerLayout = headerSection(
19320
20946
  }),
19321
20947
  style: bindProp("$root.theme.header", {
19322
20948
  transforms: pipe(tx("layout.headerRootStyle")),
19323
- fallback: mergeStyles(
19324
- textColorStyle("text"),
19325
- borderColorStyle("border")
19326
- )
20949
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
19327
20950
  })
19328
20951
  },
19329
20952
  [
@@ -19332,7 +20955,6 @@ var headerLayout = headerSection(
19332
20955
  centeredLayout,
19333
20956
  transparentLayout,
19334
20957
  floatingLayout,
19335
- editorialLayout,
19336
20958
  mobileOverlay
19337
20959
  ],
19338
20960
  props({
@@ -20147,79 +21769,298 @@ var collectionLayout = styledSection({
20147
21769
  { gap: "md" }
20148
21770
  ),
20149
21771
  baseClass: "",
20150
- spacing: "comfortable"
21772
+ spacing: "comfortable"
21773
+ });
21774
+ var collectionManifest = createBlockManifest({
21775
+ id: "block.collection",
21776
+ title: "Collection",
21777
+ category: "layout",
21778
+ additionalFields: [
21779
+ parseFieldDefinition({
21780
+ id: "layout",
21781
+ type: "select",
21782
+ label: "Layout",
21783
+ defaultValue: "grid",
21784
+ options: [
21785
+ { value: "grid", label: "Grid" },
21786
+ { value: "stack", label: "Stack" }
21787
+ ],
21788
+ ui: { intent: "display" }
21789
+ }),
21790
+ parseFieldDefinition({
21791
+ id: "columns",
21792
+ type: "select",
21793
+ label: "Columns",
21794
+ description: "Number of columns in the grid layout.",
21795
+ defaultValue: "3",
21796
+ options: [
21797
+ { value: "2", label: "2 columns" },
21798
+ { value: "3", label: "3 columns" },
21799
+ { value: "4", label: "4 columns" }
21800
+ ],
21801
+ ui: {
21802
+ intent: "display",
21803
+ visibleWhen: { field: "layout", equals: "grid" }
21804
+ }
21805
+ }),
21806
+ parseFieldDefinition({
21807
+ id: "gap",
21808
+ type: "select",
21809
+ label: "Gap",
21810
+ defaultValue: "medium",
21811
+ options: [
21812
+ { value: "none", label: "None" },
21813
+ { value: "compact", label: "Compact" },
21814
+ { value: "cozy", label: "Cozy" },
21815
+ { value: "medium", label: "Medium" },
21816
+ { value: "comfortable", label: "Comfortable" },
21817
+ { value: "spacious", label: "Spacious" }
21818
+ ],
21819
+ ui: { intent: "display" }
21820
+ }),
21821
+ fragmentsToRepeaterField(
21822
+ "items",
21823
+ "Items",
21824
+ collectionFragments,
21825
+ {
21826
+ minItems: 0,
21827
+ maxItems: 50,
21828
+ itemLabel: "Item",
21829
+ description: "Add items to this collection."
21830
+ }
21831
+ ),
21832
+ cardStylesField({
21833
+ id: "_cardStyles",
21834
+ label: "Item styles"
21835
+ })
21836
+ ],
21837
+ layout: collectionLayout,
21838
+ description: "Repeat items in a grid or stack layout.",
21839
+ tags: ["collection", "grid", "stack", "repeater"],
21840
+ icon: "LayoutList",
21841
+ styleTokens: { spacing: "lg" }
21842
+ });
21843
+ var collectionBlockDefinition = {
21844
+ manifest: collectionManifest
21845
+ };
21846
+
21847
+ // ../blocks/src/system/blocks/feature-cards.ts
21848
+ function grid3(props2, children) {
21849
+ return el("grid", props2 ?? void 0, children ?? void 0);
21850
+ }
21851
+ var sectionHeading = stack(
21852
+ { gap: "sm", className: "rb-feature-cards-heading rb-mx-auto rb-max-w-3xl rb-text-center" },
21853
+ [
21854
+ text(
21855
+ {
21856
+ as: "h2",
21857
+ className: "rb-feature-cards-title rb-text-center"
21858
+ },
21859
+ when("content.title"),
21860
+ bind("content.title")
21861
+ ),
21862
+ richText(
21863
+ {
21864
+ className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
21865
+ style: textColorStyle("mutedText")
21866
+ },
21867
+ when("content.description"),
21868
+ bind("content.description")
21869
+ )
21870
+ ]
21871
+ );
21872
+ var featureCard = styledCard(
21873
+ [
21874
+ media(
21875
+ {
21876
+ className: "rb-feature-card-media rb-w-full rb-h-auto rb-object-cover",
21877
+ style: {
21878
+ aspectRatio: { $bind: { from: "card.aspectRatio" } }
21879
+ }
21880
+ },
21881
+ when("card.media"),
21882
+ bind("card.media")
21883
+ ),
21884
+ stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
21885
+ text(
21886
+ {
21887
+ as: "h3",
21888
+ className: "rb-feature-card-title"
21889
+ },
21890
+ bind("card.title")
21891
+ ),
21892
+ richText(
21893
+ {
21894
+ className: "rb-feature-card-body rb-prose rb-max-w-none",
21895
+ style: textColorStyle("mutedText")
21896
+ },
21897
+ when("card.body"),
21898
+ bind("card.body")
21899
+ ),
21900
+ ctaRow({
21901
+ collectionPath: "ctas",
21902
+ itemName: "cta",
21903
+ gap: "sm",
21904
+ justify: "start",
21905
+ containerClassName: "rb-mt-auto"
21906
+ })
21907
+ ])
21908
+ ],
21909
+ {
21910
+ stylesFrom: "content._cardStyles",
21911
+ backgroundFrom: "content._cardStyles.background",
21912
+ baseClassName: "rb-feature-card rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-h-full rb-flex-col"
21913
+ },
21914
+ repeat("content.cards", "card")
21915
+ );
21916
+ var cardsLayout = styledSection({
21917
+ children: styledContainer({
21918
+ rootType: "stack",
21919
+ rootProps: { gap: "xl" },
21920
+ children: [
21921
+ sectionHeading,
21922
+ grid3(
21923
+ {
21924
+ cols: {
21925
+ $bind: {
21926
+ from: "content.columns",
21927
+ fallback: 3,
21928
+ coerce: "number"
21929
+ }
21930
+ },
21931
+ gap: "lg"
21932
+ },
21933
+ [featureCard]
21934
+ )
21935
+ ]
21936
+ }),
21937
+ baseClass: "",
21938
+ spacing: "medium"
20151
21939
  });
20152
- var collectionManifest = createBlockManifest({
20153
- id: "block.collection",
20154
- title: "Collection",
21940
+ var featureCardsConfig = {
21941
+ id: "block.feature-cards",
21942
+ title: "Feature Cards",
20155
21943
  category: "layout",
21944
+ includeContainerStyles: true,
21945
+ titleSource: "title",
20156
21946
  additionalFields: [
20157
- parseFieldDefinition({
20158
- id: "layout",
20159
- type: "select",
20160
- label: "Layout",
20161
- defaultValue: "grid",
20162
- options: [
20163
- { value: "grid", label: "Grid" },
20164
- { value: "stack", label: "Stack" }
20165
- ],
20166
- ui: { intent: "display" }
20167
- }),
20168
- parseFieldDefinition({
21947
+ {
21948
+ id: "title",
21949
+ type: "text",
21950
+ label: "Title",
21951
+ required: false,
21952
+ multiline: false,
21953
+ maxLength: 120
21954
+ },
21955
+ {
21956
+ id: "description",
21957
+ type: "richText",
21958
+ label: "Description",
21959
+ required: false,
21960
+ ui: {
21961
+ richTextVariant: "limited"
21962
+ }
21963
+ },
21964
+ {
20169
21965
  id: "columns",
20170
21966
  type: "select",
20171
21967
  label: "Columns",
20172
- description: "Number of columns in the grid layout.",
21968
+ required: false,
20173
21969
  defaultValue: "3",
21970
+ multiple: false,
20174
21971
  options: [
20175
21972
  { value: "2", label: "2 columns" },
20176
21973
  { value: "3", label: "3 columns" },
20177
21974
  { value: "4", label: "4 columns" }
20178
21975
  ],
20179
- ui: {
20180
- intent: "display",
20181
- visibleWhen: { field: "layout", equals: "grid" }
20182
- }
20183
- }),
20184
- parseFieldDefinition({
20185
- id: "gap",
20186
- type: "select",
20187
- label: "Gap",
20188
- defaultValue: "medium",
20189
- options: [
20190
- { value: "none", label: "None" },
20191
- { value: "compact", label: "Compact" },
20192
- { value: "cozy", label: "Cozy" },
20193
- { value: "medium", label: "Medium" },
20194
- { value: "comfortable", label: "Comfortable" },
20195
- { value: "spacious", label: "Spacious" }
20196
- ],
20197
21976
  ui: { intent: "display" }
20198
- }),
20199
- fragmentsToRepeaterField(
20200
- "items",
20201
- "Items",
20202
- collectionFragments,
20203
- {
20204
- minItems: 0,
20205
- maxItems: 50,
20206
- itemLabel: "Item",
20207
- description: "Add items to this collection."
21977
+ },
21978
+ {
21979
+ id: "cards",
21980
+ type: "repeater",
21981
+ label: "Cards",
21982
+ required: false,
21983
+ minItems: 1,
21984
+ maxItems: 8,
21985
+ itemLabel: "Card",
21986
+ itemLabelSource: "title",
21987
+ allowConversion: true,
21988
+ ui: {
21989
+ intent: "content"
21990
+ },
21991
+ schema: {
21992
+ fields: [
21993
+ {
21994
+ id: "media",
21995
+ type: "media",
21996
+ label: "Image",
21997
+ required: false,
21998
+ mediaKinds: ["image"]
21999
+ },
22000
+ createAspectRatioField({
22001
+ id: "aspectRatio",
22002
+ label: "Image aspect ratio",
22003
+ defaultValue: "4/3",
22004
+ visibleWhen: { field: "media", notEquals: null }
22005
+ }),
22006
+ {
22007
+ id: "title",
22008
+ type: "text",
22009
+ label: "Title",
22010
+ required: true,
22011
+ multiline: false,
22012
+ maxLength: 120
22013
+ },
22014
+ {
22015
+ id: "body",
22016
+ type: "richText",
22017
+ label: "Text",
22018
+ required: false,
22019
+ ui: {
22020
+ richTextVariant: "limited"
22021
+ }
22022
+ },
22023
+ createCtasRepeater({
22024
+ label: "Calls to action",
22025
+ itemLabel: "CTA",
22026
+ maxItems: 1,
22027
+ button: {
22028
+ variants: [
22029
+ { value: "primary", label: "Primary" },
22030
+ { value: "secondary", label: "Secondary" },
22031
+ { value: "outline", label: "Outline" },
22032
+ { value: "ghost", label: "Ghost" },
22033
+ { value: "link", label: "Link" }
22034
+ ],
22035
+ defaultVariant: "ghost"
22036
+ }
22037
+ })
22038
+ ]
20208
22039
  }
20209
- ),
22040
+ },
20210
22041
  cardStylesField({
20211
22042
  id: "_cardStyles",
20212
- label: "Item styles"
22043
+ label: "Card styles"
20213
22044
  })
20214
22045
  ],
20215
- layout: collectionLayout,
20216
- description: "Repeat items in a grid or stack layout.",
20217
- tags: ["collection", "grid", "stack", "repeater"],
20218
- icon: "LayoutList",
20219
- styleTokens: { spacing: "lg" }
20220
- });
20221
- var collectionBlockDefinition = {
20222
- manifest: collectionManifest
22046
+ layout: cardsLayout,
22047
+ variants: {
22048
+ cards: cardsLayout
22049
+ },
22050
+ defaultVariant: "cards",
22051
+ variantOptions: {
22052
+ cards: {
22053
+ label: "Cards",
22054
+ description: "A responsive grid of image cards with optional calls to action."
22055
+ }
22056
+ },
22057
+ description: "A card grid for offerings, services, classes, benefits, or featured links.",
22058
+ tags: ["cards", "features", "offerings", "services", "classes", "grid", "links"],
22059
+ icon: "PanelsTopLeft"
22060
+ };
22061
+ var featureCardsManifest = createBlockManifest(featureCardsConfig);
22062
+ var featureCardsBlockDefinition = {
22063
+ manifest: featureCardsManifest
20223
22064
  };
20224
22065
 
20225
22066
  // ../blocks/src/system/fields/carousel.ts
@@ -20307,69 +22148,6 @@ function createCarouselBehaviorFields(options = {}) {
20307
22148
  return fields3;
20308
22149
  }
20309
22150
 
20310
- // ../blocks/src/system/fields/imageLayout.ts
20311
- function createImageColSizeField(options = {}) {
20312
- const {
20313
- id = "imageColSize",
20314
- label = "Image column size",
20315
- description = "Controls how large the image/thumbnail column is at desktop breakpoints.",
20316
- defaultValue = "1/3",
20317
- uiIntent = "display",
20318
- visibleWhen
20319
- } = options;
20320
- return {
20321
- id,
20322
- type: "select",
20323
- label,
20324
- description,
20325
- required: false,
20326
- defaultValue,
20327
- multiple: false,
20328
- options: [
20329
- { value: "1/4", label: "Small (1/4)" },
20330
- { value: "1/3", label: "Medium (1/3)" },
20331
- { value: "2/5", label: "Large (2/5)" },
20332
- { value: "1/2", label: "Extra large (1/2)" },
20333
- { value: "2/3", label: "Huge (2/3)" }
20334
- ],
20335
- ui: {
20336
- intent: uiIntent,
20337
- ...visibleWhen ? { visibleWhen } : {}
20338
- }
20339
- };
20340
- }
20341
- function createImagePositionField(options = {}) {
20342
- const {
20343
- id = "imagePosition",
20344
- label = "Image position",
20345
- description = "Choose which side the image appears on.",
20346
- defaultValue = "left",
20347
- includeAlternate = false,
20348
- uiIntent = "display",
20349
- visibleWhen
20350
- } = options;
20351
- const positionOptions = [
20352
- { value: "left", label: "Left" },
20353
- { value: "right", label: "Right" },
20354
- ...includeAlternate ? [{ value: "alternate", label: "Alternate" }] : []
20355
- ];
20356
- return {
20357
- id,
20358
- type: "select",
20359
- label,
20360
- description,
20361
- required: false,
20362
- defaultValue,
20363
- multiple: false,
20364
- // Spread to get a mutable array type without unsafe casts.
20365
- options: [...positionOptions],
20366
- ui: {
20367
- intent: uiIntent,
20368
- ...visibleWhen ? { visibleWhen } : {}
20369
- }
20370
- };
20371
- }
20372
-
20373
22151
  // ../blocks/src/system/blocks/media-text.ts
20374
22152
  var mediaTextFrameCapability = defineFrameCapability([
20375
22153
  "plain",
@@ -20493,26 +22271,13 @@ var mediaTextManifest = createBlockManifest({
20493
22271
  },
20494
22272
  ui: { intent: "behavior" }
20495
22273
  }),
20496
- {
22274
+ createAspectRatioField({
20497
22275
  id: "aspectRatio",
20498
- type: "select",
20499
22276
  label: "Media aspect ratio",
20500
22277
  description: "Crop media to a consistent aspect ratio.",
20501
- required: false,
20502
22278
  defaultValue: "auto",
20503
- multiple: false,
20504
- options: [
20505
- { value: "auto", label: "Auto (original)" },
20506
- { value: "16/9", label: "16:9 (Landscape)" },
20507
- { value: "4/3", label: "4:3 (Standard)" },
20508
- { value: "1/1", label: "1:1 (Square)" },
20509
- { value: "3/4", label: "3:4 (Portrait)" }
20510
- ],
20511
- ui: {
20512
- intent: "display",
20513
- visibleWhen: { field: "images", notEquals: null }
20514
- }
20515
- },
22279
+ visibleWhen: { field: "images", notEquals: null }
22280
+ }),
20516
22281
  {
20517
22282
  id: "text",
20518
22283
  type: "richText",
@@ -20642,7 +22407,7 @@ var mediaTextManifest = createBlockManifest({
20642
22407
  whenImagesLength(0)
20643
22408
  );
20644
22409
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
20645
- const defaultLayout = styledSection({
22410
+ const defaultLayout2 = styledSection({
20646
22411
  children: styledContainer({
20647
22412
  rootType: "stack",
20648
22413
  rootProps: { gap: "lg" },
@@ -20674,9 +22439,9 @@ var mediaTextManifest = createBlockManifest({
20674
22439
  spacing: "medium"
20675
22440
  });
20676
22441
  return {
20677
- layout: defaultLayout,
22442
+ layout: defaultLayout2,
20678
22443
  variants: {
20679
- default: defaultLayout
22444
+ default: defaultLayout2
20680
22445
  },
20681
22446
  defaultVariant: "default",
20682
22447
  variantOptions: {
@@ -24076,7 +25841,7 @@ var embedBlockDefinition = {
24076
25841
  };
24077
25842
 
24078
25843
  // ../blocks/src/system/blocks/image-gallery.ts
24079
- var grid3 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
25844
+ var grid4 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
24080
25845
  var galleryContainer = (children, opts) => {
24081
25846
  const gap = opts?.gap ?? "md";
24082
25847
  const withExtraClass = (baseClass) => opts?.className ? `${baseClass} ${opts.className}` : baseClass;
@@ -24156,7 +25921,7 @@ var galleryItem = (options) => stack(
24156
25921
  ],
24157
25922
  repeat("content.images", "item")
24158
25923
  );
24159
- var gridLayout3 = grid3(
25924
+ var gridLayout3 = grid4(
24160
25925
  {
24161
25926
  className: "rb-grid rb-grid-cols-1 rb-gap-4 rb-sm-grid-cols-2 rb-md-grid-cols-3"
24162
25927
  },
@@ -24759,7 +26524,7 @@ var imageGalleryBlockDefinition = {
24759
26524
  };
24760
26525
 
24761
26526
  // ../blocks/src/system/blocks/video-grid.ts
24762
- var grid4 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
26527
+ var grid5 = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
24763
26528
  var videoItem = (options) => stack(
24764
26529
  { gap: "xs", className: options.containerClassName },
24765
26530
  [
@@ -24809,7 +26574,7 @@ var gridColumnsClass = (columns) => {
24809
26574
  return "rb-grid rb-grid-cols-1 rb-gap-6 rb-sm-grid-cols-2 rb-md-grid-cols-3";
24810
26575
  }
24811
26576
  };
24812
- var createGridLayout = (columns) => grid4(
26577
+ var createGridLayout = (columns) => grid5(
24813
26578
  {
24814
26579
  className: gridColumnsClass(columns)
24815
26580
  },
@@ -27973,6 +29738,40 @@ var systemBlockDefinitionsRaw = [
27973
29738
  })
27974
29739
  ]
27975
29740
  })),
29741
+ withDesignCapability("block.intro", introBlockDefinition, declareBlockDesignCapability({
29742
+ sectionSurfaces: "supported",
29743
+ contentFrames: ["plain", "panel"],
29744
+ itemSurfaces: "unsupported",
29745
+ headingDecorations: ["organic-squiggle"]
29746
+ }), defineBlockDesignMetadata({
29747
+ flow: bodyFlow,
29748
+ layoutProfiles: [
29749
+ layoutProfile({
29750
+ variantKey: "centered-copy",
29751
+ family: "centered",
29752
+ weight: "featured",
29753
+ bias: "soft"
29754
+ }),
29755
+ layoutProfile({
29756
+ variantKey: "statement-copy",
29757
+ family: "split",
29758
+ weight: "featured",
29759
+ bias: "merge"
29760
+ }),
29761
+ layoutProfile({
29762
+ variantKey: "statement-media",
29763
+ family: "media-text",
29764
+ weight: "featured",
29765
+ bias: "soft"
29766
+ }),
29767
+ layoutProfile({
29768
+ variantKey: "media-copy",
29769
+ family: "media-text",
29770
+ weight: "featured",
29771
+ bias: "soft"
29772
+ })
29773
+ ]
29774
+ })),
27976
29775
  withDesignCapability("block.body-text", bodyTextBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
27977
29776
  flow: bodyFlow,
27978
29777
  layoutProfiles: [
@@ -28033,9 +29832,17 @@ var systemBlockDefinitionsRaw = [
28033
29832
  flow: conversionFlow,
28034
29833
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
28035
29834
  })),
28036
- withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(panelAndItemsCapable(), standardEyebrowTreatments), defineBlockDesignMetadata({
29835
+ withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
29836
+ sectionSurfaces: "supported",
29837
+ contentFrames: ["plain", "panel"],
29838
+ itemSurfaces: "supported",
29839
+ accordionIconSets: ["plus", "chevron", "caret", "minimal-cross"]
29840
+ }), standardEyebrowTreatments), defineBlockDesignMetadata({
28037
29841
  flow: bodyFlow,
28038
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
29842
+ layoutProfiles: [
29843
+ layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
29844
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
29845
+ ]
28039
29846
  })),
28040
29847
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
28041
29848
  flow: siteChromeFlow,
@@ -28049,7 +29856,8 @@ var systemBlockDefinitionsRaw = [
28049
29856
  sectionSurfaces: "supported",
28050
29857
  contentFrames: ["plain", "panel"],
28051
29858
  itemSurfaces: "supported",
28052
- testimonialCardTreatments: ["default", "accent-quote"]
29859
+ testimonialCardTreatments: ["default", "accent-quote"],
29860
+ headingDecorations: ["short-center-rule"]
28053
29861
  }), defineBlockDesignMetadata({
28054
29862
  flow: proofFlow,
28055
29863
  layoutProfiles: [
@@ -28075,6 +29883,22 @@ var systemBlockDefinitionsRaw = [
28075
29883
  flow: offeringsFlow,
28076
29884
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
28077
29885
  })),
29886
+ withDesignCapability("block.feature-cards", featureCardsBlockDefinition, declareBlockDesignCapability({
29887
+ sectionSurfaces: "supported",
29888
+ contentFrames: ["plain", "panel"],
29889
+ itemSurfaces: "supported",
29890
+ headingDecorations: ["short-center-rule"]
29891
+ }), defineBlockDesignMetadata({
29892
+ flow: offeringsFlow,
29893
+ layoutProfiles: [
29894
+ layoutProfile({
29895
+ variantKey: "cards",
29896
+ family: "grid",
29897
+ weight: "standard",
29898
+ bias: "soft"
29899
+ })
29900
+ ]
29901
+ })),
28078
29902
  withDesignCapability("block.media-text", mediaTextBlockDefinition, mediaPanelCapable(), defineBlockDesignMetadata({
28079
29903
  flow: mediaFlow,
28080
29904
  layoutProfiles: [