@riverbankcms/sdk 0.60.11 → 0.60.14

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 (96) hide show
  1. package/README.md +10 -7
  2. package/dist/_dts/api/src/accessAdmin.d.ts +102 -0
  3. package/dist/_dts/api/src/bookingConfig.d.ts +31 -1
  4. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +38 -1
  5. package/dist/_dts/api/src/bookingOperations.d.ts +3 -0
  6. package/dist/_dts/api/src/bookingRecords.d.ts +45 -0
  7. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  8. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +1 -5
  9. package/dist/_dts/api/src/common/envelope.d.ts +1 -1
  10. package/dist/_dts/api/src/communications.d.ts +1 -1
  11. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  12. package/dist/_dts/api/src/domains.d.ts +14 -13
  13. package/dist/_dts/api/src/endpoints.d.ts +121 -9
  14. package/dist/_dts/api/src/index.d.ts +3 -2
  15. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  16. package/dist/_dts/api/src/seoEndpoints.d.ts +2 -0
  17. package/dist/_dts/api/src/siteAssets.d.ts +0 -10
  18. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -1
  19. package/dist/_dts/api/src/types.d.ts +1 -1
  20. package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
  21. package/dist/_dts/blocks/src/index.d.ts +1 -0
  22. package/dist/_dts/blocks/src/portal/types.d.ts +1 -1
  23. package/dist/_dts/blocks/src/server.d.ts +1 -0
  24. package/dist/_dts/blocks/src/subroutes/fold.d.ts +40 -0
  25. package/dist/_dts/blocks/src/subroutes/formatDate.d.ts +12 -0
  26. package/dist/_dts/blocks/src/subroutes/index.d.ts +3 -0
  27. package/dist/_dts/blocks/src/subroutes/kinds.d.ts +32 -0
  28. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +3 -1
  29. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +2 -0
  30. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +1 -0
  31. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +1 -0
  32. package/dist/_dts/blocks/src/system/spacing.d.ts +2 -1
  33. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +5 -0
  34. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +5 -1
  35. package/dist/_dts/core/src/booking-refunds.d.ts +8 -0
  36. package/dist/_dts/core/src/participant-identity.d.ts +1 -1
  37. package/dist/_dts/core/src/participants.d.ts +19 -7
  38. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +284 -96
  39. package/dist/_dts/db/src/schemas/forms.d.ts +135 -24
  40. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -3
  41. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -3
  42. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +3 -3
  43. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -3
  44. package/dist/_dts/preview-next/src/client/preview/SubrouteNoticePanel.d.ts +13 -0
  45. package/dist/_dts/preview-next/src/client/preview/subrouteNotice.d.ts +26 -0
  46. package/dist/_dts/sdk/src/contracts/page.d.ts +1 -0
  47. package/dist/_dts/sdk/src/public-api/contracts.d.ts +2 -1
  48. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -0
  49. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +4 -5
  50. package/dist/_dts/sdk/src/version.d.ts +1 -1
  51. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  52. package/dist/_dts/theme-core/src/buttons/personalities/showtime-pill.d.ts +17 -0
  53. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -1
  54. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  55. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +66 -30
  56. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +16 -0
  57. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  58. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  59. package/dist/_dts/theme-core/src/schema.d.ts +174 -6
  60. package/dist/_dts/theme-core/src/site-styles/appearancePresets.d.ts +328 -15
  61. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +54 -2
  62. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +124 -0
  63. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  64. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  65. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +21 -0
  66. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +2 -1
  67. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  68. package/dist/_dts/theme-core/src/site-styles/types.d.ts +135 -2
  69. package/dist/_dts/ui/src/badge.d.ts +1 -1
  70. package/dist/_dts/ui/src/button.d.ts +1 -1
  71. package/dist/cli/index.mjs +801 -115
  72. package/dist/client/bookings.mjs +115 -1
  73. package/dist/client/client.mjs +905 -166
  74. package/dist/client/hooks.mjs +794 -111
  75. package/dist/client/rendering/client.mjs +179 -39
  76. package/dist/client/rendering/islands.mjs +179 -38
  77. package/dist/client/rendering.mjs +904 -165
  78. package/dist/preview-next/before-render.mjs +160 -16
  79. package/dist/preview-next/client/runtime.mjs +1674 -260
  80. package/dist/preview-next/middleware.mjs +160 -16
  81. package/dist/server/components.mjs +895 -165
  82. package/dist/server/config-validation.mjs +794 -111
  83. package/dist/server/config.mjs +794 -111
  84. package/dist/server/data.mjs +794 -111
  85. package/dist/server/index.mjs +163 -17
  86. package/dist/server/next.mjs +898 -167
  87. package/dist/server/page-converter.mjs +589 -82
  88. package/dist/server/prebuild.mjs +1 -1
  89. package/dist/server/rendering/server.mjs +895 -165
  90. package/dist/server/rendering.mjs +895 -165
  91. package/dist/server/routing.mjs +828 -117
  92. package/dist/server/server.mjs +795 -112
  93. package/dist/server/theme-bridge.mjs +216 -39
  94. package/dist/server/theme.mjs +139 -37
  95. package/dist/styles/index.css +44 -2
  96. package/package.json +1 -1
@@ -2780,6 +2780,118 @@ var init_pebble = __esm({
2780
2780
  }
2781
2781
  });
2782
2782
 
2783
+ // ../theme-core/src/buttons/personalities/showtime-pill.ts
2784
+ var showtimePill;
2785
+ var init_showtime_pill = __esm({
2786
+ "../theme-core/src/buttons/personalities/showtime-pill.ts"() {
2787
+ "use strict";
2788
+ init_types3();
2789
+ showtimePill = defineButtonPersonality({
2790
+ id: "showtime-pill",
2791
+ name: "Showtime Pill",
2792
+ description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
2793
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "modern" },
2794
+ buttonSystem: {
2795
+ global: {
2796
+ cornerStyle: "pill",
2797
+ shadow: "low",
2798
+ textTransform: "uppercase",
2799
+ fontWeight: 700,
2800
+ borderWidth: 2,
2801
+ hoverTransform: "lift",
2802
+ hoverColor: "darken",
2803
+ typography: "body",
2804
+ paddingPreset: "spacious",
2805
+ italic: false
2806
+ },
2807
+ sizes: {
2808
+ sm: { padding: "0.625rem 1.25rem", fontSize: "0.875rem" },
2809
+ md: { padding: "0.875rem 1.75rem", fontSize: "1rem" },
2810
+ lg: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" },
2811
+ xl: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" }
2812
+ },
2813
+ variants: [
2814
+ {
2815
+ id: "primary",
2816
+ name: "Primary",
2817
+ enabled: true,
2818
+ priority: 1,
2819
+ background: { type: "solid", colorToken: "primary" },
2820
+ textColorToken: "background",
2821
+ borderRadius: "rounded-full",
2822
+ effects: {
2823
+ hover: [{ effectId: "pop" }]
2824
+ }
2825
+ },
2826
+ {
2827
+ id: "secondary",
2828
+ name: "Secondary",
2829
+ enabled: true,
2830
+ priority: 2,
2831
+ background: { type: "transparent" },
2832
+ textColorToken: "primary",
2833
+ borderRadius: "rounded-full",
2834
+ border: { widthClass: "border-2", colorToken: "primary" },
2835
+ effects: {
2836
+ hover: [{ effectId: "pop" }]
2837
+ }
2838
+ },
2839
+ {
2840
+ id: "hero",
2841
+ name: "Hero",
2842
+ enabled: true,
2843
+ priority: 1,
2844
+ background: { type: "solid", colorToken: "secondary" },
2845
+ textColorToken: "primary",
2846
+ borderRadius: "rounded-full",
2847
+ effects: {
2848
+ hover: [{ effectId: "pop" }]
2849
+ }
2850
+ },
2851
+ {
2852
+ id: "header",
2853
+ name: "Header",
2854
+ enabled: true,
2855
+ priority: 2,
2856
+ background: { type: "solid", colorToken: "background" },
2857
+ textColorToken: "primary",
2858
+ borderRadius: "rounded-full",
2859
+ border: { widthClass: "border-2", colorToken: "primary" },
2860
+ effects: {
2861
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
2862
+ }
2863
+ },
2864
+ {
2865
+ id: "outline",
2866
+ name: "Outline",
2867
+ enabled: true,
2868
+ priority: 3,
2869
+ background: { type: "transparent" },
2870
+ textColorToken: "primary",
2871
+ borderRadius: "rounded-full",
2872
+ border: { widthClass: "border-2", colorToken: "primary" },
2873
+ effects: {
2874
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
2875
+ }
2876
+ },
2877
+ {
2878
+ id: "ghost",
2879
+ name: "Ghost",
2880
+ enabled: true,
2881
+ priority: 3,
2882
+ background: { type: "transparent" },
2883
+ textColorToken: "primary",
2884
+ borderRadius: "rounded-full",
2885
+ effects: {
2886
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
2887
+ }
2888
+ }
2889
+ ]
2890
+ }
2891
+ });
2892
+ }
2893
+ });
2894
+
2783
2895
  // ../theme-core/src/buttons/personalities/soft-pill.ts
2784
2896
  var softPill;
2785
2897
  var init_soft_pill = __esm({
@@ -2870,6 +2982,7 @@ var init_personalities = __esm({
2870
2982
  init_editorial_link();
2871
2983
  init_ink_stamp();
2872
2984
  init_pebble();
2985
+ init_showtime_pill();
2873
2986
  init_soft_pill();
2874
2987
  init_types3();
2875
2988
  buttonPersonalities = [
@@ -2878,7 +2991,8 @@ var init_personalities = __esm({
2878
2991
  editorialLink,
2879
2992
  pebble,
2880
2993
  inkStamp,
2881
- brushedWash
2994
+ brushedWash,
2995
+ showtimePill
2882
2996
  ];
2883
2997
  personalitiesById = new Map(
2884
2998
  buttonPersonalities.map((p) => [p.id, p])
@@ -6519,6 +6633,7 @@ var init_spacing = __esm({
6519
6633
  ];
6520
6634
  SECTION_MIN_HEIGHT_VALUES = [
6521
6635
  "none",
6636
+ "banner",
6522
6637
  "hero",
6523
6638
  "immersive"
6524
6639
  ];
@@ -6540,6 +6655,7 @@ var init_spacing = __esm({
6540
6655
  };
6541
6656
  SECTION_MIN_HEIGHT_MAP = {
6542
6657
  none: "",
6658
+ banner: "rb-section-min-h-banner",
6543
6659
  hero: "rb-section-min-h-hero",
6544
6660
  immersive: "rb-section-min-h-immersive"
6545
6661
  };
@@ -7432,6 +7548,9 @@ var init_boxStyles2 = __esm({
7432
7548
  classes.push(roundedResult);
7433
7549
  }
7434
7550
  }
7551
+ if (input.treatment === "accent-quote") {
7552
+ classes.push("rb-card-treatment-accent-quote");
7553
+ }
7435
7554
  return classes.join(" ").trim() || "";
7436
7555
  }
7437
7556
  };
@@ -7501,7 +7620,7 @@ var init_boxStyles2 = __esm({
7501
7620
  minHeight = input.minHeight;
7502
7621
  } else if (true) {
7503
7622
  console.warn(
7504
- `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, hero, immersive.`
7623
+ `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, banner, hero, immersive.`
7505
7624
  );
7506
7625
  }
7507
7626
  }
@@ -7841,25 +7960,9 @@ var init_styledCard = __esm({
7841
7960
  });
7842
7961
 
7843
7962
  // ../blocks/src/system/node/fragments/typography.ts
7844
- function mergeClassName(base, extra) {
7845
- return [base, extra ?? ""].filter(Boolean).join(" ");
7846
- }
7847
- function captionText(opts, ...mods) {
7848
- const {
7849
- as: asProp,
7850
- className: classNameProp,
7851
- color,
7852
- ...rest
7853
- } = opts ?? {};
7854
- const as = asProp ?? "p";
7855
- const className = mergeClassName("rb-caption", classNameProp);
7856
- const style = textColorStyle(color ?? "mutedText");
7857
- return text({ ...rest, as, className, style }, ...mods);
7858
- }
7859
7963
  var init_typography = __esm({
7860
7964
  "../blocks/src/system/node/fragments/typography.ts"() {
7861
7965
  "use strict";
7862
- init_builder();
7863
7966
  init_colorStyles();
7864
7967
  }
7865
7968
  });
@@ -8893,18 +8996,17 @@ function buildAttributionNodes() {
8893
8996
  const name = text(
8894
8997
  {
8895
8998
  as: "strong",
8896
- className: "rb-block",
8897
- style: textColorStyle("text")
8999
+ className: "rb-block"
8898
9000
  },
8899
9001
  bind("testimonial.content.name", { fallback: "Anonymous" })
8900
9002
  );
8901
- const jobTitle = captionText(
8902
- null,
9003
+ const jobTitle = text(
9004
+ { as: "p", className: "rb-caption" },
8903
9005
  when("testimonial.content.jobTitle"),
8904
9006
  bind("testimonial.content.jobTitle")
8905
9007
  );
8906
- const company = captionText(
8907
- null,
9008
+ const company = text(
9009
+ { as: "p", className: "rb-caption" },
8908
9010
  when("testimonial.content.company"),
8909
9011
  bind("testimonial.content.company")
8910
9012
  );
@@ -8938,8 +9040,7 @@ function buildTestimonialCard(...mods) {
8938
9040
  );
8939
9041
  const body = richText(
8940
9042
  {
8941
- className: "rb-prose rb-max-w-none",
8942
- style: textColorStyle("text")
9043
+ className: "rb-prose rb-max-w-none"
8943
9044
  },
8944
9045
  bind("testimonial.content.body"),
8945
9046
  when("testimonial.content.body")
@@ -9024,7 +9125,6 @@ var init_testimonialsCarousel = __esm({
9024
9125
  "use strict";
9025
9126
  init_types9();
9026
9127
  init_builder();
9027
- init_colorStyles();
9028
9128
  init_fragments();
9029
9129
  grid = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
9030
9130
  testimonialsCarouselFragment = defineFragment({
@@ -12864,7 +12964,8 @@ var init_course_registration_interactive = __esm({
12864
12964
  run: z50.object({
12865
12965
  courseId: z50.string(),
12866
12966
  seriesId: z50.string(),
12867
- runSlug: z50.string()
12967
+ runSlug: z50.string(),
12968
+ runName: z50.string().nullable()
12868
12969
  })
12869
12970
  }),
12870
12971
  z50.object({
@@ -26281,16 +26382,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
26281
26382
  };
26282
26383
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
26283
26384
  }
26284
- const textSize = configuredDropdownStyle?.textSize;
26285
- if (textSize) {
26286
- const textSizeMap = {
26287
- "xs": "0.75rem",
26288
- "sm": "0.875rem",
26289
- "base": "1rem",
26290
- "lg": "1.125rem"
26291
- };
26292
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
26293
- }
26385
+ const textSize = configuredDropdownStyle?.textSize ?? "sm";
26386
+ const textSizeMap = {
26387
+ "xs": "0.75rem",
26388
+ "sm": "0.875rem",
26389
+ "base": "1rem",
26390
+ "lg": "1.125rem"
26391
+ };
26392
+ additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
26294
26393
  if (additionalRules.length > 0) {
26295
26394
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
26296
26395
  return baseCSS + `
@@ -26616,12 +26715,10 @@ ${selector} .rb-container-full`;
26616
26715
  ${rootRules.join("\n ")}
26617
26716
  }`);
26618
26717
  if (containerPadding?.mobile) {
26619
- cssChunks.push(
26620
- `${containerSelector} {
26718
+ cssChunks.push(`${containerSelector} {
26621
26719
  padding-left: ${toPaddingValue(containerPadding.mobile)};
26622
26720
  padding-right: ${toPaddingValue(containerPadding.mobile)};
26623
- }`
26624
- );
26721
+ }`);
26625
26722
  }
26626
26723
  if (containerPadding?.tablet) {
26627
26724
  cssChunks.push(
@@ -26647,6 +26744,10 @@ ${selector} .rb-container-full`;
26647
26744
  if (heroTypographyCss) {
26648
26745
  cssChunks.push(heroTypographyCss);
26649
26746
  }
26747
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
26748
+ if (bodyTextTypographyCss) {
26749
+ cssChunks.push(bodyTextTypographyCss);
26750
+ }
26650
26751
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
26651
26752
  return cssChunks.join("\n\n");
26652
26753
  }
@@ -26726,21 +26827,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
26726
26827
 
26727
26828
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
26728
26829
  background: var(--site-style-transition-to);
26729
- clip-path: polygon(
26730
- 0 42%,
26731
- 10% 34%,
26732
- 21% 42%,
26733
- 34% 31%,
26734
- 48% 39%,
26735
- 63% 29%,
26736
- 78% 37%,
26737
- 90% 30%,
26738
- 100% 36%,
26739
- 100% 100%,
26740
- 0 100%
26741
- );
26830
+ mask-image: url("${waveTransitionMask}");
26831
+ mask-repeat: no-repeat;
26832
+ mask-size: 100% 100%;
26833
+ -webkit-mask-image: url("${waveTransitionMask}");
26834
+ -webkit-mask-repeat: no-repeat;
26835
+ -webkit-mask-size: 100% 100%;
26742
26836
  }`;
26743
26837
  }
26838
+ function svgDataUrl(svg) {
26839
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
26840
+ }
26744
26841
  function generateHeroTypographyCss(themeId, theme) {
26745
26842
  const typography = theme.hero?.typography;
26746
26843
  if (!typography) return "";
@@ -26763,33 +26860,21 @@ function generateHeroTypographyCss(themeId, theme) {
26763
26860
  ${subheadlineRules.join("\n ")}
26764
26861
  }`);
26765
26862
  }
26766
- const microHeadlineRules = buildTypographyRules(
26767
- typography.microHeadlineSize,
26768
- typography.microHeadlineLineHeight
26769
- );
26863
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
26770
26864
  if (microHeadlineRules.length > 0) {
26771
26865
  chunks.push(`${microHeadlineSelector} {
26772
26866
  ${microHeadlineRules.join("\n ")}
26773
26867
  }`);
26774
26868
  }
26775
- const microSubheadlineRules = buildTypographyRules(
26776
- typography.microSubheadlineSize,
26777
- typography.microSubheadlineLineHeight
26778
- );
26869
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
26779
26870
  if (microSubheadlineRules.length > 0) {
26780
26871
  chunks.push(`${microSubheadlineSelector} {
26781
26872
  ${microSubheadlineRules.join("\n ")}
26782
26873
  }`);
26783
26874
  }
26784
26875
  if (typography.responsive?.tablet) {
26785
- const tabletHeadlineRules = buildTypographyRules(
26786
- typography.responsive.tablet.headlineSize,
26787
- typography.responsive.tablet.headlineLineHeight
26788
- );
26789
- const tabletSubheadlineRules = buildTypographyRules(
26790
- typography.responsive.tablet.subheadlineSize,
26791
- typography.responsive.tablet.subheadlineLineHeight
26792
- );
26876
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
26877
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
26793
26878
  const tabletChunks = [];
26794
26879
  if (tabletHeadlineRules.length > 0) {
26795
26880
  tabletChunks.push(`${headlineSelector} {
@@ -26808,14 +26893,8 @@ function generateHeroTypographyCss(themeId, theme) {
26808
26893
  }
26809
26894
  }
26810
26895
  if (typography.responsive?.mobile) {
26811
- const mobileHeadlineRules = buildTypographyRules(
26812
- typography.responsive.mobile.headlineSize,
26813
- typography.responsive.mobile.headlineLineHeight
26814
- );
26815
- const mobileSubheadlineRules = buildTypographyRules(
26816
- typography.responsive.mobile.subheadlineSize,
26817
- typography.responsive.mobile.subheadlineLineHeight
26818
- );
26896
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
26897
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
26819
26898
  const mobileChunks = [];
26820
26899
  if (mobileHeadlineRules.length > 0) {
26821
26900
  mobileChunks.push(`${headlineSelector} {
@@ -26845,6 +26924,27 @@ function buildTypographyRules(size, lineHeight) {
26845
26924
  }
26846
26925
  return rules;
26847
26926
  }
26927
+ function generateBodyTextTypographyCss(themeId, theme) {
26928
+ const intro = theme.bodyText?.intro;
26929
+ if (!intro) return "";
26930
+ const rootSelector = `:where([data-theme-scope="${themeId}"]) :where([data-block="body-text"][data-block-variant="intro"])`;
26931
+ const chunks = [];
26932
+ if (intro.headingSize === "editorial") {
26933
+ chunks.push(`${rootSelector} .body-copy-heading {
26934
+ font-size: clamp(1.75rem, 1.15rem + 2.2vw, 3rem);
26935
+ line-height: 1.08;
26936
+ }`);
26937
+ }
26938
+ if (intro.paragraphSize === "editorial") {
26939
+ chunks.push(`${rootSelector} .body-copy-body {
26940
+ --rb-prose-lg-font-size: clamp(1.35rem, 1.05rem + 1.3vw, 2rem);
26941
+ --rb-prose-lg-line-height: 1.55;
26942
+ --rb-prose-xl-sm-font-size: clamp(1.45rem, 1.1rem + 1.4vw, 2rem);
26943
+ --rb-prose-xl-sm-line-height: 1.55;
26944
+ }`);
26945
+ }
26946
+ return chunks.join("\n\n");
26947
+ }
26848
26948
  function toHeroSize(size) {
26849
26949
  const map = {
26850
26950
  sm: "0.875rem",
@@ -26855,7 +26955,8 @@ function toHeroSize(size) {
26855
26955
  "3xl": "1.875rem",
26856
26956
  "4xl": "2.25rem",
26857
26957
  "5xl": "3rem",
26858
- "6xl": "3.75rem"
26958
+ "6xl": "3.75rem",
26959
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
26859
26960
  };
26860
26961
  return map[size];
26861
26962
  }
@@ -26868,10 +26969,14 @@ function toHeroLineHeight(lineHeight) {
26868
26969
  };
26869
26970
  return map[lineHeight];
26870
26971
  }
26972
+ var waveTransitionMask;
26871
26973
  var init_generateLayoutCss = __esm({
26872
26974
  "../theme-core/src/layout/generateLayoutCss.ts"() {
26873
26975
  "use strict";
26874
26976
  init_breakpoints();
26977
+ waveTransitionMask = svgDataUrl(
26978
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>"
26979
+ );
26875
26980
  }
26876
26981
  });
26877
26982
 
@@ -28850,12 +28955,16 @@ var init_containerResponsiveThemeCss = __esm({
28850
28955
  .rb-h-full {
28851
28956
  height: 100%;
28852
28957
  }
28958
+ .rb-section-min-h-banner {
28959
+ min-height: clamp(16rem, 34svh, 24rem);
28960
+ }
28853
28961
  .rb-section-min-h-hero {
28854
28962
  min-height: clamp(32rem, 62svh, 44rem);
28855
28963
  }
28856
28964
  .rb-section-min-h-immersive {
28857
28965
  min-height: clamp(38rem, 78svh, 54rem);
28858
28966
  }
28967
+ .rb-section-min-h-banner > .rb-container,
28859
28968
  .rb-section-min-h-hero > .rb-container,
28860
28969
  .rb-section-min-h-immersive > .rb-container {
28861
28970
  min-height: inherit;
@@ -29965,6 +30074,19 @@ var init_containerResponsiveThemeCss = __esm({
29965
30074
  .rb-object-contain {
29966
30075
  object-fit: contain;
29967
30076
  }
30077
+ .rb-bg-motion-fixed-frame {
30078
+ position: fixed;
30079
+ inset: 0;
30080
+ width: 100vw;
30081
+ height: 100svh;
30082
+ }
30083
+ @media (hover: none), (prefers-reduced-motion: reduce) {
30084
+ .rb-bg-motion-fixed-frame {
30085
+ position: absolute;
30086
+ width: 100%;
30087
+ height: 100%;
30088
+ }
30089
+ }
29968
30090
 
29969
30091
  /* Line clamp */
29970
30092
  .rb-line-clamp-2,
@@ -34475,13 +34597,13 @@ var init_containerResponsiveThemeCss = __esm({
34475
34597
 
34476
34598
  /* Eyebrow - color only (typography via .rb-eyebrow) */
34477
34599
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
34478
- color: rgb(var(--tb-text));
34600
+ color: var(--section-text-color, rgb(var(--tb-text)));
34479
34601
  }
34480
34602
 
34481
34603
  /* Subheadline - supporting text below headline */
34482
34604
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
34483
34605
  font-size: 1.125rem;
34484
- color: rgb(var(--tb-text));
34606
+ color: var(--section-text-color, rgb(var(--tb-text)));
34485
34607
  }
34486
34608
 
34487
34609
  @container rb-site (min-width: 640px) {
@@ -34555,6 +34677,20 @@ var init_containerResponsiveThemeCss = __esm({
34555
34677
  max-width: 60rem;
34556
34678
  }
34557
34679
 
34680
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
34681
+ font-size: var(--rb-prose-lg-font-size);
34682
+ line-height: var(--rb-prose-lg-line-height);
34683
+ }
34684
+
34685
+ @container rb-site (min-width: 640px) {
34686
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
34687
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
34688
+ font-size: var(--rb-prose-xl-sm-font-size);
34689
+ line-height: var(--rb-prose-xl-sm-line-height);
34690
+ }
34691
+ }
34692
+ }
34693
+
34558
34694
  /* Variant: Narrow (left-aligned, shorter line length) */
34559
34695
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
34560
34696
  max-width: 34rem;
@@ -35897,6 +36033,13 @@ var init_containerResponsiveThemeCss = __esm({
35897
36033
  border-radius: var(--rb-block-radius);
35898
36034
  }
35899
36035
 
36036
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-accent-quote {
36037
+ border: 0;
36038
+ border-left: 5px solid rgb(var(--tb-secondary));
36039
+ border-radius: 0 calc(var(--rb-block-radius) * 3) 0 0;
36040
+ color: rgb(var(--tb-primaryForeground));
36041
+ }
36042
+
35900
36043
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
35901
36044
  font-size: var(--rb-testimonial-quote-size);
35902
36045
  line-height: 1;
@@ -35905,6 +36048,12 @@ var init_containerResponsiveThemeCss = __esm({
35905
36048
  color: rgb(var(--tb-primary));
35906
36049
  }
35907
36050
 
36051
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-accent-quote .rb-testimonial-quote {
36052
+ color: rgb(var(--tb-secondary));
36053
+ font-size: calc(var(--rb-testimonial-quote-size) * 1.25);
36054
+ opacity: 1;
36055
+ }
36056
+
35908
36057
 
35909
36058
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
35910
36059
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -59294,7 +59443,7 @@ var ENDPOINT_DEFINITIONS = {
59294
59443
  method: "GET",
59295
59444
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
59296
59445
  auth: "user",
59297
- responseKind: "text"
59446
+ responseKind: "blob"
59298
59447
  },
59299
59448
  getNewsletterSubscriber: {
59300
59449
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -59625,12 +59774,7 @@ var ENDPOINT_DEFINITIONS = {
59625
59774
  ],
59626
59775
  auth: "user",
59627
59776
  responseKind: "json",
59628
- errors: [
59629
- "validation:invalid_input",
59630
- "resource:not_found",
59631
- "resource:conflict",
59632
- "server:internal_error"
59633
- ]
59777
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
59634
59778
  },
59635
59779
  unpublishTeamMemberProfile: {
59636
59780
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -59883,6 +60027,13 @@ var ENDPOINT_DEFINITIONS = {
59883
60027
  auth: "user",
59884
60028
  responseKind: "json"
59885
60029
  },
60030
+ exportBookingAppointmentsCsv: {
60031
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
60032
+ method: "GET",
60033
+ auth: "user",
60034
+ errors: [],
60035
+ responseKind: "blob"
60036
+ },
59886
60037
  createAppointment: {
59887
60038
  path: "/sites/{siteId}/bookings/appointments",
59888
60039
  method: "POST",
@@ -60010,6 +60161,13 @@ var ENDPOINT_DEFINITIONS = {
60010
60161
  auth: "user",
60011
60162
  responseKind: "json"
60012
60163
  },
60164
+ exportCourseEnrollmentsCsv: {
60165
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
60166
+ method: "GET",
60167
+ auth: "user",
60168
+ errors: [],
60169
+ responseKind: "blob"
60170
+ },
60013
60171
  listCourseWaitlist: {
60014
60172
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
60015
60173
  method: "GET",
@@ -60768,6 +60926,63 @@ var ENDPOINT_DEFINITIONS = {
60768
60926
  auth: "user",
60769
60927
  responseKind: "json"
60770
60928
  },
60929
+ updateRegisteredDomainContact: {
60930
+ path: "/domains/{domainId}/registrar/contact",
60931
+ method: "POST",
60932
+ errors: [
60933
+ "validation:invalid_input",
60934
+ "resource:not_found",
60935
+ "auth:forbidden",
60936
+ "external:service_error",
60937
+ "external:registrar_orphaned_contact_profile",
60938
+ "server:internal_error"
60939
+ ],
60940
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
60941
+ auth: "user",
60942
+ responseKind: "json"
60943
+ },
60944
+ setRegisteredDomainPrivacy: {
60945
+ path: "/domains/{domainId}/registrar/privacy",
60946
+ method: "POST",
60947
+ errors: [
60948
+ "validation:invalid_input",
60949
+ "resource:not_found",
60950
+ "auth:forbidden",
60951
+ "external:service_error",
60952
+ "server:internal_error"
60953
+ ],
60954
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
60955
+ auth: "user",
60956
+ responseKind: "json"
60957
+ },
60958
+ setRegisteredDomainAutoRenew: {
60959
+ path: "/domains/{domainId}/registrar/auto-renew",
60960
+ method: "POST",
60961
+ errors: [
60962
+ "validation:invalid_input",
60963
+ "resource:not_found",
60964
+ "auth:forbidden",
60965
+ "external:service_error",
60966
+ "server:internal_error"
60967
+ ],
60968
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
60969
+ auth: "user",
60970
+ responseKind: "json"
60971
+ },
60972
+ getRegisteredDomainRenewalPosture: {
60973
+ path: "/domains/{domainId}/registrar/renewal",
60974
+ method: "GET",
60975
+ errors: [
60976
+ "validation:invalid_input",
60977
+ "resource:not_found",
60978
+ "auth:forbidden",
60979
+ "external:service_error",
60980
+ "server:internal_error"
60981
+ ],
60982
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
60983
+ auth: "user",
60984
+ responseKind: "json"
60985
+ },
60771
60986
  retryDomainVercel: {
60772
60987
  path: "/domains/{domainId}/vercel",
60773
60988
  method: "POST",
@@ -61315,6 +61530,14 @@ var ENDPOINT_DEFINITIONS = {
61315
61530
  auth: "user",
61316
61531
  responseKind: "json"
61317
61532
  },
61533
+ exportSeoPagesCsv: {
61534
+ path: "/sites/{siteId}/seo/pages",
61535
+ method: "GET",
61536
+ tags: ["site-{siteId}", "seo-pages-{siteId}"],
61537
+ auth: "user",
61538
+ responseKind: "blob",
61539
+ errors: []
61540
+ },
61318
61541
  getSeoQueries: {
61319
61542
  path: "/sites/{siteId}/seo/queries",
61320
61543
  method: "GET",
@@ -61323,6 +61546,14 @@ var ENDPOINT_DEFINITIONS = {
61323
61546
  auth: "user",
61324
61547
  responseKind: "json"
61325
61548
  },
61549
+ exportSeoQueriesCsv: {
61550
+ path: "/sites/{siteId}/seo/queries",
61551
+ method: "GET",
61552
+ tags: ["site-{siteId}", "seo-queries-{siteId}"],
61553
+ auth: "user",
61554
+ responseKind: "blob",
61555
+ errors: []
61556
+ },
61326
61557
  getPerformanceOverview: {
61327
61558
  path: "/sites/{siteId}/performance/overview",
61328
61559
  method: "GET",
@@ -61371,7 +61602,12 @@ var ENDPOINT_DEFINITIONS = {
61371
61602
  path: "/media/{assetId}/canonical-crop",
61372
61603
  method: "POST",
61373
61604
  tags: ["media", "media-{assetId}"],
61374
- errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"],
61605
+ errors: [
61606
+ "validation:invalid_input",
61607
+ "resource:not_found",
61608
+ "resource:conflict",
61609
+ "server:internal_error"
61610
+ ],
61375
61611
  auth: "user",
61376
61612
  responseKind: "json"
61377
61613
  },
@@ -61703,7 +61939,7 @@ var ENDPOINT_DEFINITIONS = {
61703
61939
  method: "GET",
61704
61940
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
61705
61941
  auth: "user",
61706
- responseKind: "text"
61942
+ responseKind: "blob"
61707
61943
  },
61708
61944
  // Public submit
61709
61945
  submitForm: {
@@ -62586,6 +62822,14 @@ var ENDPOINT_DEFINITIONS = {
62586
62822
  auth: "user",
62587
62823
  responseKind: "json"
62588
62824
  },
62825
+ exportEventSeriesAttendeesCsv: {
62826
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/attendees/export.csv",
62827
+ method: "GET",
62828
+ tags: ["site-{siteId}", "event-series-{seriesId}"],
62829
+ auth: "user",
62830
+ errors: [],
62831
+ responseKind: "blob"
62832
+ },
62589
62833
  listEventSeriesWaitlist: {
62590
62834
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
62591
62835
  method: "GET",
@@ -63149,6 +63393,14 @@ var ENDPOINT_DEFINITIONS = {
63149
63393
  auth: "user",
63150
63394
  responseKind: "json"
63151
63395
  },
63396
+ exportBookingCustomersCsv: {
63397
+ path: "/sites/{siteId}/bookings/customers/export.csv",
63398
+ method: "GET",
63399
+ tags: ["site-{siteId}", "customers-{siteId}"],
63400
+ auth: "user",
63401
+ errors: [],
63402
+ responseKind: "blob"
63403
+ },
63152
63404
  createBookingCustomer: {
63153
63405
  path: "/sites/{siteId}/bookings/customers",
63154
63406
  method: "POST",
@@ -63176,6 +63428,21 @@ var ENDPOINT_DEFINITIONS = {
63176
63428
  "server:internal_error"
63177
63429
  ]
63178
63430
  },
63431
+ rectifyBookingParticipantIdentity: {
63432
+ path: "/sites/{siteId}/bookings/participants/{participantId}/identity",
63433
+ method: "PATCH",
63434
+ tags: ["site-{siteId}", "customers-{siteId}"],
63435
+ auth: "user",
63436
+ responseKind: "json",
63437
+ errors: [
63438
+ "validation:invalid_input",
63439
+ "auth:forbidden",
63440
+ "resource:not_found",
63441
+ "resource:already_exists",
63442
+ "resource:conflict",
63443
+ "server:internal_error"
63444
+ ]
63445
+ },
63179
63446
  listCustomerPasses: {
63180
63447
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
63181
63448
  method: "GET",
@@ -63310,13 +63577,46 @@ var ENDPOINT_DEFINITIONS = {
63310
63577
  auth: "user",
63311
63578
  responseKind: "json"
63312
63579
  },
63580
+ exportMoneyPaymentsCsv: {
63581
+ path: "/sites/{siteId}/bookings/money/payments/export.csv",
63582
+ method: "GET",
63583
+ tags: ["site-{siteId}", "bookings", "money-payments-{siteId}"],
63584
+ errors: [],
63585
+ auth: "user",
63586
+ responseKind: "blob"
63587
+ },
63588
+ exportMoneyBreakdownsCsv: {
63589
+ path: "/sites/{siteId}/bookings/money/report/breakdowns/export.csv",
63590
+ method: "GET",
63591
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
63592
+ errors: [],
63593
+ auth: "user",
63594
+ responseKind: "blob"
63595
+ },
63596
+ exportMoneyTimeSeriesCsv: {
63597
+ path: "/sites/{siteId}/bookings/money/report/time-series/export.csv",
63598
+ method: "GET",
63599
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
63600
+ errors: [],
63601
+ auth: "user",
63602
+ responseKind: "blob"
63603
+ },
63313
63604
  listBookingActivity: {
63314
63605
  path: "/sites/{siteId}/bookings/activity",
63315
63606
  method: "GET",
63316
63607
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
63608
+ errors: [],
63317
63609
  auth: "user",
63318
63610
  responseKind: "json"
63319
63611
  },
63612
+ exportBookingActivityCsv: {
63613
+ path: "/sites/{siteId}/bookings/activity/export.csv",
63614
+ method: "GET",
63615
+ tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
63616
+ errors: [],
63617
+ auth: "user",
63618
+ responseKind: "blob"
63619
+ },
63320
63620
  // Site logs
63321
63621
  listSiteActivityLogs: {
63322
63622
  path: "/sites/{siteId}/logs/activity",
@@ -63468,13 +63768,6 @@ var ENDPOINT_DEFINITIONS = {
63468
63768
  auth: "user",
63469
63769
  responseKind: "blob"
63470
63770
  },
63471
- exportSeoCsv: {
63472
- path: "/sites/{siteId}/seo/export",
63473
- method: "GET",
63474
- tags: ["site-{siteId}", "seo"],
63475
- auth: "user",
63476
- responseKind: "blob"
63477
- },
63478
63771
  // Admin site cost (for admin panel)
63479
63772
  adminSiteCost: {
63480
63773
  path: "/admin/sites/{siteId}/cost",
@@ -65220,6 +65513,8 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
65220
65513
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
65221
65514
  "missing_amount",
65222
65515
  "amount_exceeds_remaining",
65516
+ "credit_refunds_disabled",
65517
+ "missing_credit_customer",
65223
65518
  "deposit_refund_override_required",
65224
65519
  "refund_revoke_requires_full_line_refund",
65225
65520
  "unified_order_link_required"
@@ -66491,12 +66786,29 @@ function defineFrameCapability(capability) {
66491
66786
  function defineBlockDesignCapability(capability) {
66492
66787
  return {
66493
66788
  ...capability,
66494
- kind: "designed"
66789
+ kind: "designed",
66790
+ sectionHeights: capability.sectionHeights ?? ["default"],
66791
+ imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
66792
+ imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
66793
+ testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"]
66495
66794
  };
66496
66795
  }
66497
66796
 
66498
66797
  // ../theme-core/src/site-styles/appearancePresets.ts
66798
+ function assertValidOptionGroups(preset2) {
66799
+ preset2.optionGroups?.forEach((group) => {
66800
+ const selectedOption = group.options.find(
66801
+ (option) => option.id === group.selectedOptionId
66802
+ );
66803
+ if (!selectedOption) {
66804
+ throw new Error(
66805
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
66806
+ );
66807
+ }
66808
+ });
66809
+ }
66499
66810
  function defineBlockAppearancePreset(preset2) {
66811
+ assertValidOptionGroups(preset2);
66500
66812
  return preset2;
66501
66813
  }
66502
66814
  function defineSiteChromeAppearancePreset(preset2) {
@@ -66509,13 +66821,122 @@ var appearancePresets = [
66509
66821
  target: "hero",
66510
66822
  label: "Immersive image hero",
66511
66823
  blockKinds: ["block.hero"],
66824
+ constraints: {
66825
+ layoutFamilies: ["centered", "compact"]
66826
+ },
66827
+ design: {
66828
+ sectionSurface: "hero-image",
66829
+ contentFrame: plainFrame,
66830
+ itemSurface: "none",
66831
+ transitionAfter: "soft-fade-short",
66832
+ emphasis: "high",
66833
+ sectionHeight: "hero",
66834
+ imageSurfaceTreatment: { kind: "neutral-wash" }
66835
+ }
66836
+ }),
66837
+ defineBlockAppearancePreset({
66838
+ kind: "block-design",
66839
+ id: "hero-brand-scrim",
66840
+ target: "hero",
66841
+ label: "Brand scrim image hero",
66842
+ blockKinds: ["block.hero"],
66843
+ constraints: {
66844
+ layoutFamilies: ["centered", "compact"]
66845
+ },
66846
+ optionGroups: [
66847
+ {
66848
+ id: "image-surface-treatment",
66849
+ label: "Treatment",
66850
+ selectedOptionId: "brand-scrim-primary",
66851
+ options: [
66852
+ {
66853
+ id: "brand-scrim-primary",
66854
+ label: "Brand scrim",
66855
+ designPatch: {
66856
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
66857
+ }
66858
+ },
66859
+ {
66860
+ id: "neutral-scrim",
66861
+ label: "Neutral scrim",
66862
+ designPatch: {
66863
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
66864
+ }
66865
+ }
66866
+ ]
66867
+ }
66868
+ ],
66869
+ layoutPatches: [
66870
+ {
66871
+ constraints: {
66872
+ layoutVariantKeys: ["micro"]
66873
+ },
66874
+ designPatch: {
66875
+ sectionHeight: "banner"
66876
+ }
66877
+ }
66878
+ ],
66879
+ design: {
66880
+ sectionSurface: "hero-image",
66881
+ contentFrame: plainFrame,
66882
+ itemSurface: "none",
66883
+ transitionAfter: "soft-fade-short",
66884
+ emphasis: "high",
66885
+ sectionHeight: "immersive",
66886
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
66887
+ }
66888
+ }),
66889
+ defineBlockAppearancePreset({
66890
+ kind: "block-design",
66891
+ id: "hero-brand-scrim-fixed-frame",
66892
+ target: "hero",
66893
+ label: "Fixed-frame brand scrim hero",
66894
+ blockKinds: ["block.hero"],
66895
+ constraints: {
66896
+ layoutFamilies: ["centered", "compact"]
66897
+ },
66898
+ optionGroups: [
66899
+ {
66900
+ id: "image-surface-treatment",
66901
+ label: "Treatment",
66902
+ selectedOptionId: "brand-scrim-primary",
66903
+ options: [
66904
+ {
66905
+ id: "brand-scrim-primary",
66906
+ label: "Brand scrim",
66907
+ designPatch: {
66908
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
66909
+ }
66910
+ },
66911
+ {
66912
+ id: "neutral-scrim",
66913
+ label: "Neutral scrim",
66914
+ designPatch: {
66915
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
66916
+ }
66917
+ }
66918
+ ]
66919
+ }
66920
+ ],
66921
+ layoutPatches: [
66922
+ {
66923
+ constraints: {
66924
+ layoutVariantKeys: ["micro"]
66925
+ },
66926
+ designPatch: {
66927
+ sectionHeight: "banner"
66928
+ }
66929
+ }
66930
+ ],
66512
66931
  design: {
66513
66932
  sectionSurface: "hero-image",
66514
66933
  contentFrame: plainFrame,
66515
66934
  itemSurface: "none",
66516
66935
  transitionAfter: "soft-fade-short",
66517
66936
  emphasis: "high",
66518
- heroLegibility: "scrim-gradient"
66937
+ sectionHeight: "immersive",
66938
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
66939
+ imageSurfaceMotion: "fixed-frame"
66519
66940
  }
66520
66941
  }),
66521
66942
  defineBlockAppearancePreset({
@@ -66532,17 +66953,26 @@ var appearancePresets = [
66532
66953
  emphasis: "high"
66533
66954
  }
66534
66955
  }),
66956
+ defineBlockAppearancePreset({
66957
+ kind: "block-design",
66958
+ id: "body-text-editorial-intro",
66959
+ target: "body-text",
66960
+ label: "Editorial intro copy",
66961
+ blockKinds: ["block.body-text"],
66962
+ design: {
66963
+ sectionSurface: "base",
66964
+ contentFrame: plainFrame,
66965
+ itemSurface: "none",
66966
+ transitionAfter: "soft-fade-short",
66967
+ emphasis: "high"
66968
+ }
66969
+ }),
66535
66970
  defineBlockAppearancePreset({
66536
66971
  kind: "block-design",
66537
66972
  id: "offerings-calm-list",
66538
66973
  target: "offerings",
66539
66974
  label: "Calm offerings list",
66540
- blockKinds: [
66541
- "block.event-listing",
66542
- "block.event-calendar",
66543
- "block.event-spotlight",
66544
- "block.product-list"
66545
- ],
66975
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
66546
66976
  design: {
66547
66977
  sectionSurface: "muted-band",
66548
66978
  contentFrame: plainFrame,
@@ -66621,6 +67051,35 @@ var appearancePresets = [
66621
67051
  emphasis: "high"
66622
67052
  }
66623
67053
  }),
67054
+ defineBlockAppearancePreset({
67055
+ kind: "block-design",
67056
+ id: "testimonials-dark-proof",
67057
+ target: "testimonials",
67058
+ label: "Dark proof panel",
67059
+ blockKinds: ["block.testimonials"],
67060
+ design: {
67061
+ sectionSurface: "accent-band",
67062
+ contentFrame: panelFrame("raised"),
67063
+ itemSurface: "raised",
67064
+ transitionAfter: "soft-fade-short",
67065
+ emphasis: "high"
67066
+ }
67067
+ }),
67068
+ defineBlockAppearancePreset({
67069
+ kind: "block-design",
67070
+ id: "testimonials-accent-quote-proof",
67071
+ target: "testimonials",
67072
+ label: "Accent quote proof",
67073
+ blockKinds: ["block.testimonials"],
67074
+ design: {
67075
+ sectionSurface: "accent-band",
67076
+ contentFrame: plainFrame,
67077
+ itemSurface: "raised",
67078
+ transitionAfter: "soft-fade-short",
67079
+ emphasis: "high",
67080
+ testimonialCardTreatment: "accent-quote"
67081
+ }
67082
+ }),
66624
67083
  defineBlockAppearancePreset({
66625
67084
  kind: "block-design",
66626
67085
  id: "faq-contained-help",
@@ -66649,6 +67108,20 @@ var appearancePresets = [
66649
67108
  emphasis: "medium"
66650
67109
  }
66651
67110
  }),
67111
+ defineBlockAppearancePreset({
67112
+ kind: "block-design",
67113
+ id: "contact-form-dark-card",
67114
+ target: "contact-form",
67115
+ label: "Dark form card",
67116
+ blockKinds: ["block.form"],
67117
+ design: {
67118
+ sectionSurface: "accent-band",
67119
+ contentFrame: panelFrame("raised"),
67120
+ itemSurface: "none",
67121
+ transitionAfter: "soft-fade-short",
67122
+ emphasis: "high"
67123
+ }
67124
+ }),
66652
67125
  defineBlockAppearancePreset({
66653
67126
  kind: "block-design",
66654
67127
  id: "cta-accent-band",
@@ -66668,9 +67141,33 @@ var appearancePresets = [
66668
67141
  id: "header-clean-base",
66669
67142
  target: "site-header",
66670
67143
  label: "Clean base header",
66671
- chrome: {
66672
- surface: "base",
66673
- emphasis: "medium"
67144
+ header: {
67145
+ surface: {
67146
+ kind: "neutral-solid",
67147
+ token: "surface",
67148
+ textColorToken: "text"
67149
+ },
67150
+ navTreatment: "minimal",
67151
+ dropdownTreatment: "surface",
67152
+ ctaTreatment: "default",
67153
+ behavior: "default"
67154
+ }
67155
+ }),
67156
+ defineSiteChromeAppearancePreset({
67157
+ kind: "site-chrome",
67158
+ id: "site-header-brand-solid-inverted-cta",
67159
+ target: "site-header",
67160
+ label: "Brand solid header with inverted CTA",
67161
+ header: {
67162
+ surface: {
67163
+ kind: "brand-solid",
67164
+ token: "primary",
67165
+ textColorToken: "primaryForeground"
67166
+ },
67167
+ navTreatment: "uppercase-underline",
67168
+ dropdownTreatment: "matched-solid",
67169
+ ctaTreatment: "inverted",
67170
+ behavior: "sticky-shrink"
66674
67171
  }
66675
67172
  }),
66676
67173
  defineSiteChromeAppearancePreset({
@@ -66678,10 +67175,31 @@ var appearancePresets = [
66678
67175
  id: "footer-muted-grounding",
66679
67176
  target: "site-footer",
66680
67177
  label: "Muted grounding footer",
66681
- chrome: {
67178
+ footer: {
67179
+ kind: "grounding",
66682
67180
  surface: "muted-band",
66683
67181
  emphasis: "low"
66684
67182
  }
67183
+ }),
67184
+ defineSiteChromeAppearancePreset({
67185
+ kind: "site-chrome",
67186
+ id: "site-footer-brand-two-band",
67187
+ target: "site-footer",
67188
+ label: "Two-band brand footer",
67189
+ footer: {
67190
+ kind: "brand-two-band",
67191
+ surface: {
67192
+ token: "primary",
67193
+ shade: "800",
67194
+ textColorToken: "primaryForeground"
67195
+ },
67196
+ bottomBand: {
67197
+ token: "primary",
67198
+ shade: "900",
67199
+ textColorToken: "primaryForeground"
67200
+ },
67201
+ emphasis: "high"
67202
+ }
66685
67203
  })
66686
67204
  ];
66687
67205
 
@@ -66898,14 +67416,7 @@ var proseLinkStyleSchema = z24.object({
66898
67416
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
66899
67417
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
66900
67418
  });
66901
- var semanticSpacingSchema = z24.enum([
66902
- "none",
66903
- "compact",
66904
- "cozy",
66905
- "medium",
66906
- "comfortable",
66907
- "spacious"
66908
- ]);
67419
+ var semanticSpacingSchema = z24.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
66909
67420
  var boxRoundedSchema = z24.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
66910
67421
  var boxBackgroundOverlaySchema = z24.object({
66911
67422
  type: z24.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -66922,6 +67433,7 @@ var boxBackgroundSchema = z24.object({
66922
67433
  scale: z24.string().nullable().optional(),
66923
67434
  position: z24.string().nullable().optional(),
66924
67435
  opacity: z24.number().min(0).max(1).nullable().optional(),
67436
+ motion: z24.enum(["static", "fixed-frame"]).nullable().optional(),
66925
67437
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
66926
67438
  textColor: z24.string().nullable().optional(),
66927
67439
  headingColor: z24.string().nullable().optional()
@@ -66929,7 +67441,7 @@ var boxBackgroundSchema = z24.object({
66929
67441
  var sectionStylesOverrideSchema = z24.object({
66930
67442
  background: boxBackgroundSchema.nullable().optional(),
66931
67443
  spacing: semanticSpacingSchema.nullable().optional(),
66932
- minHeight: z24.enum(["none", "hero", "immersive"]).nullable().optional()
67444
+ minHeight: z24.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
66933
67445
  });
66934
67446
  var containerStylesOverrideSchema = z24.object({
66935
67447
  background: boxBackgroundSchema.nullable().optional(),
@@ -66948,7 +67460,8 @@ var cardStylesOverrideSchema = z24.object({
66948
67460
  border: cardBorderOverrideSchema.nullable().optional(),
66949
67461
  spacing: semanticSpacingSchema.nullable().optional(),
66950
67462
  raised: z24.boolean().nullable().optional(),
66951
- rounded: boxRoundedSchema.nullable().optional()
67463
+ rounded: boxRoundedSchema.nullable().optional(),
67464
+ treatment: z24.enum(["accent-quote"]).nullable().optional()
66952
67465
  });
66953
67466
  var blockStyleOverridesSchema = z24.object({
66954
67467
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -67023,15 +67536,7 @@ var inputStyle = z24.object({
67023
67536
  });
67024
67537
  var headerVariant = z24.enum(["classic", "centered", "transparent", "floating", "editorial"]);
67025
67538
  var headerPositioning = z24.enum(["static", "sticky", "fixed"]);
67026
- var headerNavStyle = z24.enum([
67027
- "minimal",
67028
- "underline",
67029
- "underline-grow",
67030
- "capsule",
67031
- "scale",
67032
- "frosted",
67033
- "solid"
67034
- ]);
67539
+ var headerNavStyle = z24.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
67035
67540
  var navFontWeight = z24.enum(["regular", "medium", "semibold", "bold"]);
67036
67541
  var headerMaxWidth = z24.enum(["container", "full"]);
67037
67542
  var headerContainerSchema = z24.object({
@@ -67085,6 +67590,7 @@ var dropdownStyleSchema = z24.object({
67085
67590
  // optional = no override (browser default)
67086
67591
  }).optional();
67087
67592
  var headerCtaGapSchema = z24.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
67593
+ var headerCtaTreatmentSchema = z24.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
67088
67594
  var navContainerSchema = z24.object({
67089
67595
  type: z24.enum(["none", "pill", "glass"]).default("none"),
67090
67596
  tint: z24.string().nullable().optional(),
@@ -67103,7 +67609,10 @@ var headerSchema = z24.object({
67103
67609
  shrinkOnScroll: z24.boolean(),
67104
67610
  maxWidth: headerMaxWidth,
67105
67611
  logoOverride: mediaSchema.nullable().optional(),
67106
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
67612
+ background: headerBackgroundSchema.default({
67613
+ type: "color",
67614
+ color: "surface"
67615
+ }),
67107
67616
  textColor: z24.string().nullable().optional(),
67108
67617
  // Site title and general header text
67109
67618
  navStyle: headerNavStyle,
@@ -67123,6 +67632,13 @@ var headerSchema = z24.object({
67123
67632
  navLinkStyle: navLinkStyleSchema.optional(),
67124
67633
  // CTA button spacing (desktop left margin)
67125
67634
  ctaGap: headerCtaGapSchema.optional(),
67635
+ // Semantic CTA treatment for header/nav CTA buttons. The Theme V2 compiler
67636
+ // materializes this to ctaVariant against the active button personality.
67637
+ ctaTreatment: headerCtaTreatmentSchema.optional(),
67638
+ // Optional theme-level CTA variant for header/nav CTA buttons.
67639
+ // Internal runtime bridge for the block renderer; prefer ctaTreatment in
67640
+ // authored Theme V2 concepts.
67641
+ ctaVariant: z24.string().min(1).optional(),
67126
67642
  // Dropdown menu styling (nav dropdowns and mobile drawer)
67127
67643
  dropdownStyle: dropdownStyleSchema
67128
67644
  });
@@ -67179,7 +67695,10 @@ var footerSchema = z24.object({
67179
67695
  variant: footerVariant,
67180
67696
  maxWidth: footerMaxWidth,
67181
67697
  showLogoText: z24.boolean().optional(),
67182
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
67698
+ background: headerBackgroundSchema.default({
67699
+ type: "color",
67700
+ color: "surface"
67701
+ }),
67183
67702
  // Footer nav styling (independent from header)
67184
67703
  navStyle: headerNavStyle.default("minimal"),
67185
67704
  navColor: z24.string().nullable().optional(),
@@ -67201,17 +67720,7 @@ var layoutSchema = z24.object({
67201
67720
  desktop: containerPaddingPresetSchema.optional()
67202
67721
  }).optional()
67203
67722
  }).optional();
67204
- var heroTypographySizeSchema = z24.enum([
67205
- "sm",
67206
- "base",
67207
- "lg",
67208
- "xl",
67209
- "2xl",
67210
- "3xl",
67211
- "4xl",
67212
- "5xl",
67213
- "6xl"
67214
- ]);
67723
+ var heroTypographySizeSchema = z24.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
67215
67724
  var heroTypographyLineHeightSchema = z24.enum(["tight", "snug", "normal", "relaxed"]);
67216
67725
  var heroResponsiveTypographySchema = z24.object({
67217
67726
  headlineSize: heroTypographySizeSchema.optional(),
@@ -67236,6 +67745,13 @@ var heroTypographySchema = z24.object({
67236
67745
  var heroSchema = z24.object({
67237
67746
  typography: heroTypographySchema.optional()
67238
67747
  }).optional();
67748
+ var bodyTextIntroTypographySizeSchema = z24.enum(["default", "editorial"]);
67749
+ var bodyTextSchema = z24.object({
67750
+ intro: z24.object({
67751
+ paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
67752
+ headingSize: bodyTextIntroTypographySizeSchema.optional()
67753
+ }).optional()
67754
+ }).optional();
67239
67755
  var gradientsSchema = z24.object({
67240
67756
  button: z24.string().min(1).nullable().optional(),
67241
67757
  hero: z24.string().min(1).nullable().optional(),
@@ -67257,6 +67773,7 @@ var themeSchema = z24.object({
67257
67773
  gradients: gradientsSchema.optional(),
67258
67774
  layout: layoutSchema,
67259
67775
  hero: heroSchema,
67776
+ bodyText: bodyTextSchema,
67260
67777
  header: headerSchema,
67261
67778
  footer: footerSchema,
67262
67779
  buttons: buttonSystemSchema.optional(),
@@ -67280,10 +67797,7 @@ var themeSchema = z24.object({
67280
67797
  ).optional(),
67281
67798
  // Structured block-kind theme overrides (v1: typography prose-link style only)
67282
67799
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
67283
- blockOverrides: z24.record(
67284
- z24.string(),
67285
- blockThemeOverrideSchema
67286
- ).optional(),
67800
+ blockOverrides: z24.record(z24.string(), blockThemeOverrideSchema).optional(),
67287
67801
  // Structured custom CSS rules
67288
67802
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
67289
67803
  customCssRules: customCssRulesSchema,
@@ -67454,6 +67968,28 @@ var brandLedJewel = definePaletteVariant({
67454
67968
  { name: "border", hex: "#a8a29e" }
67455
67969
  ]
67456
67970
  });
67971
+ var brandLedBurgundyGold = definePaletteVariant({
67972
+ id: "brand-led-burgundy-gold",
67973
+ name: "Brand-led \u2014 Burgundy Gold",
67974
+ description: "Deep burgundy with warm gold accents and soft neutral grounds.",
67975
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
67976
+ mode: "light",
67977
+ colors: [
67978
+ { name: "primary", hex: "#7c2e38" },
67979
+ { name: "secondary", hex: "#d4af37" },
67980
+ { name: "accent", hex: "#b8e19a" },
67981
+ { name: "success", hex: "#10b981" },
67982
+ { name: "warning", hex: "#f59e0b" },
67983
+ { name: "destructive", hex: "#ef4444" },
67984
+ { name: "background", hex: "#f1dfd0" },
67985
+ { name: "surface", hex: "#f5e6db" },
67986
+ { name: "surfaceAlt", hex: "#f8ece3" },
67987
+ { name: "muted", hex: "#c9b8a8" },
67988
+ { name: "text", hex: "#400000" },
67989
+ { name: "primaryForeground", hex: "#ffffff" },
67990
+ { name: "border", hex: "#c9b8a8" }
67991
+ ]
67992
+ });
67457
67993
 
67458
67994
  // ../theme-core/src/palette/variants/high-contrast.ts
67459
67995
  var highContrastInk = definePaletteVariant({
@@ -67665,6 +68201,7 @@ var paletteVariants = [
67665
68201
  brandLedCool,
67666
68202
  brandLedWarm,
67667
68203
  brandLedJewel,
68204
+ brandLedBurgundyGold,
67668
68205
  // Warm-neutral family
67669
68206
  warmNeutralClay,
67670
68207
  warmNeutralCream,
@@ -67740,7 +68277,8 @@ var curatedSiteStyleIdValues = [
67740
68277
  "site-style:quiet-luxury",
67741
68278
  "site-style:practical-services",
67742
68279
  "site-style:modern-wellness",
67743
- "site-style:bold-launch"
68280
+ "site-style:bold-launch",
68281
+ "site-style:south-west-twerk-school"
67744
68282
  ];
67745
68283
  var quietBudget = {
67746
68284
  accentDensity: "low",
@@ -67795,6 +68333,8 @@ function defineCuratedSiteStyle(input) {
67795
68333
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
67796
68334
  supportedTransitions: generatedDesignOptionCatalog.transitions
67797
68335
  },
68336
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
68337
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
67798
68338
  buttonPersonalityChoices: input.buttonPersonalityChoices,
67799
68339
  paletteVariantChoices: input.paletteVariantChoices
67800
68340
  };
@@ -68041,6 +68581,101 @@ var curatedSiteStyles = [
68041
68581
  paletteChoice("brand-led-jewel"),
68042
68582
  paletteChoice("brand-led-warm")
68043
68583
  ]
68584
+ }),
68585
+ defineCuratedSiteStyle({
68586
+ id: "site-style:south-west-twerk-school",
68587
+ name: "South West Twerk School",
68588
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
68589
+ 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.",
68590
+ selectionKeywords: [
68591
+ "dance",
68592
+ "classes",
68593
+ "workshop",
68594
+ "school",
68595
+ "movement",
68596
+ "performance",
68597
+ "community"
68598
+ ],
68599
+ tokenRecipes: {
68600
+ palette: "brand-led",
68601
+ contrast: "maximum",
68602
+ radius: "soft",
68603
+ shadow: "layered",
68604
+ typography: "clean-sans",
68605
+ spacing: "airy",
68606
+ motion: "expressive"
68607
+ },
68608
+ compositionBudget: expressiveBudget,
68609
+ themeOverrides: {
68610
+ typography: {
68611
+ body: {
68612
+ family: "Manrope, system-ui, sans-serif",
68613
+ size: "lg",
68614
+ weight: "regular",
68615
+ lineHeight: "relaxed",
68616
+ letterSpacing: "normal"
68617
+ },
68618
+ headings: {
68619
+ default: {
68620
+ family: '"TAN - PEARL", sans-serif',
68621
+ weight: "bold",
68622
+ lineHeight: "normal",
68623
+ letterSpacing: "tight",
68624
+ colorToken: "primary",
68625
+ italic: null,
68626
+ case: null
68627
+ },
68628
+ h1: {
68629
+ size: "xl",
68630
+ weight: "bold",
68631
+ lineHeight: "normal",
68632
+ letterSpacing: "tight",
68633
+ italic: null
68634
+ },
68635
+ h2: {
68636
+ size: "lg",
68637
+ weight: "bold",
68638
+ lineHeight: "normal",
68639
+ letterSpacing: "normal",
68640
+ italic: null
68641
+ },
68642
+ h3: {
68643
+ size: "md",
68644
+ weight: "bold",
68645
+ lineHeight: "normal",
68646
+ letterSpacing: "normal",
68647
+ italic: null
68648
+ }
68649
+ },
68650
+ scale: "balanced"
68651
+ },
68652
+ bodyText: {
68653
+ intro: {
68654
+ paragraphSize: "editorial",
68655
+ headingSize: "editorial"
68656
+ }
68657
+ }
68658
+ },
68659
+ recommendedAppearancePresetIds: [
68660
+ "site-header-brand-solid-inverted-cta",
68661
+ "site-footer-brand-two-band",
68662
+ "hero-brand-scrim-fixed-frame",
68663
+ "body-text-editorial-intro",
68664
+ "testimonials-accent-quote-proof",
68665
+ "contact-form-dark-card"
68666
+ ],
68667
+ buttonPersonalityChoices: [
68668
+ buttonChoice("showtime-pill"),
68669
+ buttonChoice("confident-chip"),
68670
+ buttonChoice("ink-stamp"),
68671
+ buttonChoice("brushed-wash")
68672
+ ],
68673
+ paletteVariantChoices: [
68674
+ paletteChoice("brand-led-burgundy-gold"),
68675
+ paletteChoice("brand-led-jewel"),
68676
+ paletteChoice("brand-led-warm"),
68677
+ paletteChoice("high-contrast-ink")
68678
+ ]
68044
68679
  })
68045
68680
  ];
68046
68681
  var curatedSiteStylesById = new Map(
@@ -68085,6 +68720,40 @@ var heroLegibilityStrategySchema = z26.enum([
68085
68720
  "scrim-gradient",
68086
68721
  "solid-panel"
68087
68722
  ]);
68723
+ var sectionHeightIntentSchema = z26.enum([
68724
+ "default",
68725
+ "banner",
68726
+ "hero",
68727
+ "immersive"
68728
+ ]);
68729
+ var imageSurfaceTreatmentIntensitySchema = z26.enum(["soft", "balanced", "strong"]);
68730
+ var imageSurfaceMotionSchema = z26.enum(["static", "fixed-frame"]);
68731
+ var imageSurfaceTreatmentSchema = z26.discriminatedUnion("kind", [
68732
+ z26.object({ kind: z26.literal("none") }).strict(),
68733
+ z26.object({
68734
+ kind: z26.literal("brand-scrim"),
68735
+ token: z26.enum(["primary", "secondary", "accent"]),
68736
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
68737
+ }).strict(),
68738
+ z26.object({
68739
+ kind: z26.literal("brand-wash"),
68740
+ token: z26.enum(["primary", "secondary", "accent"]),
68741
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
68742
+ }).strict(),
68743
+ z26.object({
68744
+ kind: z26.literal("neutral-scrim"),
68745
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
68746
+ }).strict(),
68747
+ z26.object({
68748
+ kind: z26.literal("neutral-wash"),
68749
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
68750
+ }).strict(),
68751
+ z26.object({
68752
+ kind: z26.literal("solid-panel"),
68753
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
68754
+ }).strict()
68755
+ ]);
68756
+ var testimonialCardTreatmentSchema = z26.enum(["default", "accent-quote"]);
68088
68757
  function uniqueNonEmpty(values) {
68089
68758
  const uniqueValues = [...new Set(values)];
68090
68759
  const firstValue = uniqueValues[0];
@@ -68123,7 +68792,11 @@ var blockDesignPlanSchema = z26.object({
68123
68792
  itemSurface: z26.enum(userDesignOptionCatalog.itemSurfaces),
68124
68793
  transitionAfter: z26.enum(userDesignOptionCatalog.transitions),
68125
68794
  emphasis: z26.enum(userDesignOptionCatalog.emphases),
68126
- heroLegibility: heroLegibilityStrategySchema.optional()
68795
+ sectionHeight: sectionHeightIntentSchema.optional(),
68796
+ heroLegibility: heroLegibilityStrategySchema.optional(),
68797
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
68798
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
68799
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
68127
68800
  }).strict();
68128
68801
  var styleAuthoritySchema = z26.discriminatedUnion("kind", [
68129
68802
  z26.object({
@@ -68790,6 +69463,7 @@ function heroContentCard(children, gap) {
68790
69463
  return styledContainer({
68791
69464
  bindFrom: "_contentCardStyles",
68792
69465
  constrainWidth: false,
69466
+ baseClassName: "rb-relative rb-isolate",
68793
69467
  rootType: "stack",
68794
69468
  rootProps: {
68795
69469
  gap
@@ -68820,6 +69494,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
68820
69494
  function heroContainerStack(children, gap) {
68821
69495
  return styledContainer({
68822
69496
  rootType: "stack",
69497
+ baseClassName: "rb-relative rb-isolate",
68823
69498
  rootProps: {
68824
69499
  gap: "none",
68825
69500
  justify: {
@@ -69746,7 +70421,7 @@ function resolveHeroVerticalAlignment(content) {
69746
70421
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
69747
70422
  const sectionStyles = asPartialObject(content._sectionStyles);
69748
70423
  const minHeight = sectionStyles?.minHeight;
69749
- if (minHeight === "hero" || minHeight === "immersive") return "center";
70424
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
69750
70425
  const variant = resolveHeroVariant(content);
69751
70426
  if (variant === "split" || variant === "splitReverse") return "center";
69752
70427
  return "top";
@@ -70440,6 +71115,26 @@ var footerSplitNavSingleClassTransform = {
70440
71115
  ]);
70441
71116
  }
70442
71117
  };
71118
+ var footerSplitMainClassSchema = z38.object({
71119
+ base: z38.string().optional(),
71120
+ reverseClass: z38.string().optional()
71121
+ });
71122
+ var footerSplitMainClassTransform = {
71123
+ id: "layout.footerSplitMainClass",
71124
+ kind: "string",
71125
+ summary: "Compose split-footer main row classes from footer logo placement",
71126
+ schema: footerSplitMainClassSchema,
71127
+ run: (value, options) => {
71128
+ const logo = asPartialObject(value);
71129
+ const placement = logo?.placement ?? "right";
71130
+ const shouldPlaceLogoFirst = placement === "left" || placement === "above";
71131
+ const baseClass = shouldPlaceLogoFirst ? "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-end rb-gap-8 rb-md-flex-row rb-md-items-end" : "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end";
71132
+ return joinClasses4([
71133
+ options.base ?? baseClass,
71134
+ shouldPlaceLogoFirst ? options.reverseClass ?? "rb-md-flex-row-reverse" : null
71135
+ ]);
71136
+ }
71137
+ };
70443
71138
  var footerLogoClassSchema = z38.object({
70444
71139
  base: z38.string().optional()
70445
71140
  });
@@ -70450,14 +71145,11 @@ var footerLogoClassTransform = {
70450
71145
  schema: footerLogoClassSchema,
70451
71146
  run: (value, options) => {
70452
71147
  const logo = asPartialObject(value);
70453
- const placement = logo?.placement ?? "right";
70454
71148
  const align = logo?.align ?? "end";
70455
71149
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
70456
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
70457
71150
  const selfAlignClass = align === "start" ? "rb-self-start rb-text-left" : align === "center" ? "rb-self-center rb-text-center" : "rb-self-end rb-text-right";
70458
71151
  return joinClasses4([
70459
71152
  options.base ?? "footer-logo rb-inline-flex rb-items-center rb-justify-end rb-gap-3 rb-no-underline rb-transition-opacity rb-hover-opacity-80",
70460
- orderClass,
70461
71153
  selfAlignClass,
70462
71154
  hiddenClass
70463
71155
  ]);
@@ -70512,6 +71204,7 @@ var layoutTransforms = [
70512
71204
  footerBottomBarContainerClassTransform,
70513
71205
  footerBottomBarStyleTransform,
70514
71206
  footerSplitNavSingleClassTransform,
71207
+ footerSplitMainClassTransform,
70515
71208
  footerLogoClassTransform,
70516
71209
  footerLogoMediaClassTransform,
70517
71210
  footerLogoTextVisibleTransform
@@ -70760,7 +71453,7 @@ var createNavRow = (className, align = "end") => navRow({
70760
71453
  var headerCta = ctaButton({
70761
71454
  basePath: "menu.ctaItem",
70762
71455
  whenPath: "menu.ctaItem.label",
70763
- variantPath: "menu.ctaItem.variant",
71456
+ variantPath: "$root.theme.header.ctaVariant",
70764
71457
  linkPath: "menu.ctaItem.link",
70765
71458
  sizeFallback: "sm",
70766
71459
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -70768,7 +71461,7 @@ var headerCta = ctaButton({
70768
71461
  var mobileCta = ctaButton({
70769
71462
  basePath: "menu.ctaItem",
70770
71463
  whenPath: "menu.ctaItem.label",
70771
- variantPath: "menu.ctaItem.variant",
71464
+ variantPath: "$root.theme.header.ctaVariant",
70772
71465
  linkPath: "menu.ctaItem.link",
70773
71466
  sizeFallback: "md",
70774
71467
  className: "nav-mobile-cta rb-w-full"
@@ -71238,7 +71931,13 @@ var splitFooterLayout = stack(
71238
71931
  [
71239
71932
  inline(
71240
71933
  {
71241
- className: "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end"
71934
+ className: {
71935
+ $bind: {
71936
+ from: "$root.theme.footer.logo",
71937
+ transforms: [{ id: "layout.footerSplitMainClass" }],
71938
+ fallback: "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end"
71939
+ }
71940
+ }
71242
71941
  },
71243
71942
  [
71244
71943
  stack(
@@ -75037,6 +75736,34 @@ function panelCapable() {
75037
75736
  itemSurfaces: "unsupported"
75038
75737
  });
75039
75738
  }
75739
+ var heroSectionHeights = [
75740
+ "default",
75741
+ "banner",
75742
+ "hero",
75743
+ "immersive"
75744
+ ];
75745
+ var heroImageSurfaceTreatments = [
75746
+ "none",
75747
+ "brand-scrim",
75748
+ "brand-wash",
75749
+ "neutral-scrim",
75750
+ "neutral-wash",
75751
+ "solid-panel"
75752
+ ];
75753
+ var heroImageSurfaceMotions = [
75754
+ "static",
75755
+ "fixed-frame"
75756
+ ];
75757
+ function heroCapable() {
75758
+ return declareBlockDesignCapability({
75759
+ sectionSurfaces: "supported",
75760
+ contentFrames: ["plain", "panel"],
75761
+ itemSurfaces: "unsupported",
75762
+ sectionHeights: heroSectionHeights,
75763
+ imageSurfaceTreatments: heroImageSurfaceTreatments,
75764
+ imageSurfaceMotions: heroImageSurfaceMotions
75765
+ });
75766
+ }
75040
75767
  function plainItemsCapable() {
75041
75768
  return declareBlockDesignCapability({
75042
75769
  sectionSurfaces: "supported",
@@ -75153,7 +75880,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
75153
75880
  };
75154
75881
  }
75155
75882
  var systemBlockDefinitionsRaw = [
75156
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
75883
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
75157
75884
  flow: heroFlow,
75158
75885
  layoutProfiles: [
75159
75886
  layoutProfile({
@@ -75257,7 +75984,12 @@ var systemBlockDefinitionsRaw = [
75257
75984
  flow: siteChromeFlow,
75258
75985
  layoutProfiles: []
75259
75986
  })),
75260
- withDesignCapability("block.testimonials", testimonialsBlockDefinition, panelAndItemsCapable(), defineBlockDesignMetadata({
75987
+ withDesignCapability("block.testimonials", testimonialsBlockDefinition, declareBlockDesignCapability({
75988
+ sectionSurfaces: "supported",
75989
+ contentFrames: ["plain", "panel"],
75990
+ itemSurfaces: "supported",
75991
+ testimonialCardTreatments: ["default", "accent-quote"]
75992
+ }), defineBlockDesignMetadata({
75261
75993
  flow: proofFlow,
75262
75994
  layoutProfiles: [
75263
75995
  layoutProfile({
@@ -75508,8 +76240,15 @@ function parseOpacity(value) {
75508
76240
  }
75509
76241
  return opacity <= 1 ? opacity : opacity / 100;
75510
76242
  }
75511
- function appendOptionalClasses(baseClassName, optionalClassName) {
75512
- return optionalClassName ? `${baseClassName} ${optionalClassName}` : baseClassName;
76243
+ function backgroundMotionClassNames(input) {
76244
+ return input.motion === "fixed-frame" ? "rb-bg-motion-fixed-frame" : "";
76245
+ }
76246
+ function appendBackgroundMediaClasses(baseClassName, input) {
76247
+ return [
76248
+ baseClassName,
76249
+ backgroundMotionClassNames(input),
76250
+ backgroundVideoMobileClassNames(input)
76251
+ ].filter(Boolean).join(" ");
75513
76252
  }
75514
76253
  var resolveImageStyleTransform = {
75515
76254
  id: "background.resolveImageStyle",
@@ -75586,9 +76325,9 @@ var resolveImageClassNameTransform = {
75586
76325
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
75587
76326
  const position = isString(input.position) ? input.position.trim() : null;
75588
76327
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
75589
- return appendOptionalClasses(
76328
+ return appendBackgroundMediaClasses(
75590
76329
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
75591
- backgroundVideoMobileClassNames(input)
76330
+ input
75592
76331
  );
75593
76332
  }
75594
76333
  let needsAnchoring = false;
@@ -75601,18 +76340,18 @@ var resolveImageClassNameTransform = {
75601
76340
  }
75602
76341
  }
75603
76342
  if (!needsAnchoring) {
75604
- return appendOptionalClasses(
76343
+ return appendBackgroundMediaClasses(
75605
76344
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
75606
- backgroundVideoMobileClassNames(input)
76345
+ input
75607
76346
  );
75608
76347
  }
75609
76348
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
75610
76349
  const isCustom = position && !isPreset;
75611
76350
  if (isCustom) {
75612
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
76351
+ return appendBackgroundMediaClasses(baseClass, input);
75613
76352
  }
75614
76353
  const anchorClasses = getAnchorClasses(position);
75615
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
76354
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
75616
76355
  }
75617
76356
  };
75618
76357
  var resolveOverlayStyleTransform = {
@@ -80102,7 +80841,7 @@ var SimpleCache = class {
80102
80841
  };
80103
80842
 
80104
80843
  // src/version.ts
80105
- var SDK_VERSION = "0.60.11";
80844
+ var SDK_VERSION = "0.60.14";
80106
80845
 
80107
80846
  // src/client/error.ts
80108
80847
  var RiverbankApiError = class _RiverbankApiError extends Error {