@riverbankcms/sdk 0.60.12 → 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 (91) hide show
  1. package/README.md +10 -7
  2. package/dist/_dts/api/src/bookingConfig.d.ts +31 -1
  3. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +38 -1
  4. package/dist/_dts/api/src/bookingOperations.d.ts +3 -0
  5. package/dist/_dts/api/src/bookingRecords.d.ts +45 -0
  6. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  7. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +1 -5
  8. package/dist/_dts/api/src/communications.d.ts +1 -1
  9. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  10. package/dist/_dts/api/src/endpoints.d.ts +89 -9
  11. package/dist/_dts/api/src/index.d.ts +2 -1
  12. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  13. package/dist/_dts/api/src/seoEndpoints.d.ts +2 -0
  14. package/dist/_dts/api/src/siteAssets.d.ts +0 -10
  15. package/dist/_dts/api/src/types.d.ts +1 -1
  16. package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
  17. package/dist/_dts/blocks/src/index.d.ts +1 -0
  18. package/dist/_dts/blocks/src/portal/types.d.ts +1 -1
  19. package/dist/_dts/blocks/src/server.d.ts +1 -0
  20. package/dist/_dts/blocks/src/subroutes/fold.d.ts +40 -0
  21. package/dist/_dts/blocks/src/subroutes/formatDate.d.ts +12 -0
  22. package/dist/_dts/blocks/src/subroutes/index.d.ts +3 -0
  23. package/dist/_dts/blocks/src/subroutes/kinds.d.ts +32 -0
  24. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +3 -1
  25. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +2 -0
  26. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +1 -0
  27. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +1 -0
  28. package/dist/_dts/blocks/src/system/spacing.d.ts +2 -1
  29. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +5 -0
  30. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +5 -1
  31. package/dist/_dts/core/src/booking-refunds.d.ts +8 -0
  32. package/dist/_dts/core/src/participant-identity.d.ts +1 -73
  33. package/dist/_dts/core/src/participants.d.ts +19 -7
  34. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +188 -36
  35. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -3
  36. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -3
  37. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +3 -3
  38. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -3
  39. package/dist/_dts/preview-next/src/client/preview/SubrouteNoticePanel.d.ts +13 -0
  40. package/dist/_dts/preview-next/src/client/preview/subrouteNotice.d.ts +26 -0
  41. package/dist/_dts/sdk/src/contracts/page.d.ts +1 -0
  42. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  43. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -0
  44. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +4 -5
  45. package/dist/_dts/sdk/src/version.d.ts +1 -1
  46. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  47. package/dist/_dts/theme-core/src/buttons/personalities/showtime-pill.d.ts +17 -0
  48. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -1
  49. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  50. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +66 -30
  51. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +16 -0
  52. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  53. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  54. package/dist/_dts/theme-core/src/schema.d.ts +174 -6
  55. package/dist/_dts/theme-core/src/site-styles/appearancePresets.d.ts +328 -15
  56. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +54 -2
  57. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +124 -0
  58. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  59. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  60. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +21 -0
  61. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +2 -1
  62. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  63. package/dist/_dts/theme-core/src/site-styles/types.d.ts +135 -2
  64. package/dist/_dts/ui/src/badge.d.ts +1 -1
  65. package/dist/_dts/ui/src/button.d.ts +1 -1
  66. package/dist/cli/index.mjs +744 -176
  67. package/dist/client/bookings.mjs +115 -63
  68. package/dist/client/client.mjs +848 -227
  69. package/dist/client/hooks.mjs +737 -173
  70. package/dist/client/rendering/client.mjs +179 -100
  71. package/dist/client/rendering/islands.mjs +179 -99
  72. package/dist/client/rendering.mjs +847 -226
  73. package/dist/preview-next/before-render.mjs +103 -16
  74. package/dist/preview-next/client/runtime.mjs +1615 -319
  75. package/dist/preview-next/middleware.mjs +103 -16
  76. package/dist/server/components.mjs +838 -227
  77. package/dist/server/config-validation.mjs +737 -173
  78. package/dist/server/config.mjs +737 -173
  79. package/dist/server/data.mjs +737 -173
  80. package/dist/server/index.mjs +106 -79
  81. package/dist/server/next.mjs +841 -229
  82. package/dist/server/page-converter.mjs +589 -144
  83. package/dist/server/prebuild.mjs +1 -1
  84. package/dist/server/rendering/server.mjs +838 -227
  85. package/dist/server/rendering.mjs +838 -227
  86. package/dist/server/routing.mjs +771 -178
  87. package/dist/server/server.mjs +738 -174
  88. package/dist/server/theme-bridge.mjs +216 -39
  89. package/dist/server/theme.mjs +139 -37
  90. package/dist/styles/index.css +44 -2
  91. package/package.json +1 -1
@@ -609,71 +609,10 @@ var init_participants = __esm({
609
609
  });
610
610
 
611
611
  // ../core/src/participant-identity.ts
612
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD, PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS;
613
612
  var init_participant_identity = __esm({
614
613
  "../core/src/participant-identity.ts"() {
615
614
  "use strict";
616
615
  init_assertNever();
617
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
618
- participant_id: {
619
- field: "participant_id",
620
- role: "canonical_link",
621
- canonicalSource: "booking_participants.id",
622
- contractAction: "tighten_in_839",
623
- notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
624
- },
625
- display_name: {
626
- field: "display_name",
627
- role: "contextual_snapshot",
628
- canonicalSource: "booking_participants.display_name for live identity",
629
- contractAction: "retain_as_snapshot",
630
- notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
631
- },
632
- email: {
633
- field: "email",
634
- role: "contextual_snapshot",
635
- canonicalSource: "booking_participants.email_normalized for live email identity",
636
- contractAction: "retain_as_snapshot",
637
- notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
638
- },
639
- email_normalized: {
640
- field: "email_normalized",
641
- role: "contextual_snapshot",
642
- canonicalSource: "booking_participants.email_normalized for live email identity",
643
- contractAction: "retain_as_snapshot",
644
- notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
645
- },
646
- phone: {
647
- field: "phone",
648
- role: "contextual_snapshot",
649
- canonicalSource: "booking_participants.phone for live phone identity",
650
- contractAction: "retain_as_snapshot",
651
- notes: "Participation-time phone context. Live identity belongs to the participant row."
652
- },
653
- identity_state: {
654
- field: "identity_state",
655
- role: "materialization_state",
656
- canonicalSource: "booking_participants.identity_state for subject state",
657
- contractAction: "review_for_later_contract_cleanup",
658
- notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
659
- },
660
- event_attendee_guest_id: {
661
- field: "event_attendee_guest_id",
662
- role: "compatibility_projection",
663
- canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
664
- contractAction: "retain_as_projection",
665
- notes: "Compatibility FK for event guest read models. It is not person identity authority."
666
- }
667
- };
668
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
669
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
670
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
671
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
672
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
673
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
674
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
675
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
676
- ];
677
616
  }
678
617
  });
679
618
 
@@ -2841,6 +2780,118 @@ var init_pebble = __esm({
2841
2780
  }
2842
2781
  });
2843
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
+
2844
2895
  // ../theme-core/src/buttons/personalities/soft-pill.ts
2845
2896
  var softPill;
2846
2897
  var init_soft_pill = __esm({
@@ -2931,6 +2982,7 @@ var init_personalities = __esm({
2931
2982
  init_editorial_link();
2932
2983
  init_ink_stamp();
2933
2984
  init_pebble();
2985
+ init_showtime_pill();
2934
2986
  init_soft_pill();
2935
2987
  init_types3();
2936
2988
  buttonPersonalities = [
@@ -2939,7 +2991,8 @@ var init_personalities = __esm({
2939
2991
  editorialLink,
2940
2992
  pebble,
2941
2993
  inkStamp,
2942
- brushedWash
2994
+ brushedWash,
2995
+ showtimePill
2943
2996
  ];
2944
2997
  personalitiesById = new Map(
2945
2998
  buttonPersonalities.map((p) => [p.id, p])
@@ -6580,6 +6633,7 @@ var init_spacing = __esm({
6580
6633
  ];
6581
6634
  SECTION_MIN_HEIGHT_VALUES = [
6582
6635
  "none",
6636
+ "banner",
6583
6637
  "hero",
6584
6638
  "immersive"
6585
6639
  ];
@@ -6601,6 +6655,7 @@ var init_spacing = __esm({
6601
6655
  };
6602
6656
  SECTION_MIN_HEIGHT_MAP = {
6603
6657
  none: "",
6658
+ banner: "rb-section-min-h-banner",
6604
6659
  hero: "rb-section-min-h-hero",
6605
6660
  immersive: "rb-section-min-h-immersive"
6606
6661
  };
@@ -7493,6 +7548,9 @@ var init_boxStyles2 = __esm({
7493
7548
  classes.push(roundedResult);
7494
7549
  }
7495
7550
  }
7551
+ if (input.treatment === "accent-quote") {
7552
+ classes.push("rb-card-treatment-accent-quote");
7553
+ }
7496
7554
  return classes.join(" ").trim() || "";
7497
7555
  }
7498
7556
  };
@@ -7562,7 +7620,7 @@ var init_boxStyles2 = __esm({
7562
7620
  minHeight = input.minHeight;
7563
7621
  } else if (true) {
7564
7622
  console.warn(
7565
- `[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.`
7566
7624
  );
7567
7625
  }
7568
7626
  }
@@ -7902,25 +7960,9 @@ var init_styledCard = __esm({
7902
7960
  });
7903
7961
 
7904
7962
  // ../blocks/src/system/node/fragments/typography.ts
7905
- function mergeClassName(base, extra) {
7906
- return [base, extra ?? ""].filter(Boolean).join(" ");
7907
- }
7908
- function captionText(opts, ...mods) {
7909
- const {
7910
- as: asProp,
7911
- className: classNameProp,
7912
- color,
7913
- ...rest
7914
- } = opts ?? {};
7915
- const as = asProp ?? "p";
7916
- const className = mergeClassName("rb-caption", classNameProp);
7917
- const style = textColorStyle(color ?? "mutedText");
7918
- return text({ ...rest, as, className, style }, ...mods);
7919
- }
7920
7963
  var init_typography = __esm({
7921
7964
  "../blocks/src/system/node/fragments/typography.ts"() {
7922
7965
  "use strict";
7923
- init_builder();
7924
7966
  init_colorStyles();
7925
7967
  }
7926
7968
  });
@@ -8954,18 +8996,17 @@ function buildAttributionNodes() {
8954
8996
  const name = text(
8955
8997
  {
8956
8998
  as: "strong",
8957
- className: "rb-block",
8958
- style: textColorStyle("text")
8999
+ className: "rb-block"
8959
9000
  },
8960
9001
  bind("testimonial.content.name", { fallback: "Anonymous" })
8961
9002
  );
8962
- const jobTitle = captionText(
8963
- null,
9003
+ const jobTitle = text(
9004
+ { as: "p", className: "rb-caption" },
8964
9005
  when("testimonial.content.jobTitle"),
8965
9006
  bind("testimonial.content.jobTitle")
8966
9007
  );
8967
- const company = captionText(
8968
- null,
9008
+ const company = text(
9009
+ { as: "p", className: "rb-caption" },
8969
9010
  when("testimonial.content.company"),
8970
9011
  bind("testimonial.content.company")
8971
9012
  );
@@ -8999,8 +9040,7 @@ function buildTestimonialCard(...mods) {
8999
9040
  );
9000
9041
  const body = richText(
9001
9042
  {
9002
- className: "rb-prose rb-max-w-none",
9003
- style: textColorStyle("text")
9043
+ className: "rb-prose rb-max-w-none"
9004
9044
  },
9005
9045
  bind("testimonial.content.body"),
9006
9046
  when("testimonial.content.body")
@@ -9085,7 +9125,6 @@ var init_testimonialsCarousel = __esm({
9085
9125
  "use strict";
9086
9126
  init_types9();
9087
9127
  init_builder();
9088
- init_colorStyles();
9089
9128
  init_fragments();
9090
9129
  grid = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
9091
9130
  testimonialsCarouselFragment = defineFragment({
@@ -12925,7 +12964,8 @@ var init_course_registration_interactive = __esm({
12925
12964
  run: z50.object({
12926
12965
  courseId: z50.string(),
12927
12966
  seriesId: z50.string(),
12928
- runSlug: z50.string()
12967
+ runSlug: z50.string(),
12968
+ runName: z50.string().nullable()
12929
12969
  })
12930
12970
  }),
12931
12971
  z50.object({
@@ -26342,16 +26382,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
26342
26382
  };
26343
26383
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
26344
26384
  }
26345
- const textSize = configuredDropdownStyle?.textSize;
26346
- if (textSize) {
26347
- const textSizeMap = {
26348
- "xs": "0.75rem",
26349
- "sm": "0.875rem",
26350
- "base": "1rem",
26351
- "lg": "1.125rem"
26352
- };
26353
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
26354
- }
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]};`);
26355
26393
  if (additionalRules.length > 0) {
26356
26394
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
26357
26395
  return baseCSS + `
@@ -26677,12 +26715,10 @@ ${selector} .rb-container-full`;
26677
26715
  ${rootRules.join("\n ")}
26678
26716
  }`);
26679
26717
  if (containerPadding?.mobile) {
26680
- cssChunks.push(
26681
- `${containerSelector} {
26718
+ cssChunks.push(`${containerSelector} {
26682
26719
  padding-left: ${toPaddingValue(containerPadding.mobile)};
26683
26720
  padding-right: ${toPaddingValue(containerPadding.mobile)};
26684
- }`
26685
- );
26721
+ }`);
26686
26722
  }
26687
26723
  if (containerPadding?.tablet) {
26688
26724
  cssChunks.push(
@@ -26708,6 +26744,10 @@ ${selector} .rb-container-full`;
26708
26744
  if (heroTypographyCss) {
26709
26745
  cssChunks.push(heroTypographyCss);
26710
26746
  }
26747
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
26748
+ if (bodyTextTypographyCss) {
26749
+ cssChunks.push(bodyTextTypographyCss);
26750
+ }
26711
26751
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
26712
26752
  return cssChunks.join("\n\n");
26713
26753
  }
@@ -26787,21 +26827,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
26787
26827
 
26788
26828
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
26789
26829
  background: var(--site-style-transition-to);
26790
- clip-path: polygon(
26791
- 0 42%,
26792
- 10% 34%,
26793
- 21% 42%,
26794
- 34% 31%,
26795
- 48% 39%,
26796
- 63% 29%,
26797
- 78% 37%,
26798
- 90% 30%,
26799
- 100% 36%,
26800
- 100% 100%,
26801
- 0 100%
26802
- );
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%;
26803
26836
  }`;
26804
26837
  }
26838
+ function svgDataUrl(svg) {
26839
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
26840
+ }
26805
26841
  function generateHeroTypographyCss(themeId, theme) {
26806
26842
  const typography = theme.hero?.typography;
26807
26843
  if (!typography) return "";
@@ -26824,33 +26860,21 @@ function generateHeroTypographyCss(themeId, theme) {
26824
26860
  ${subheadlineRules.join("\n ")}
26825
26861
  }`);
26826
26862
  }
26827
- const microHeadlineRules = buildTypographyRules(
26828
- typography.microHeadlineSize,
26829
- typography.microHeadlineLineHeight
26830
- );
26863
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
26831
26864
  if (microHeadlineRules.length > 0) {
26832
26865
  chunks.push(`${microHeadlineSelector} {
26833
26866
  ${microHeadlineRules.join("\n ")}
26834
26867
  }`);
26835
26868
  }
26836
- const microSubheadlineRules = buildTypographyRules(
26837
- typography.microSubheadlineSize,
26838
- typography.microSubheadlineLineHeight
26839
- );
26869
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
26840
26870
  if (microSubheadlineRules.length > 0) {
26841
26871
  chunks.push(`${microSubheadlineSelector} {
26842
26872
  ${microSubheadlineRules.join("\n ")}
26843
26873
  }`);
26844
26874
  }
26845
26875
  if (typography.responsive?.tablet) {
26846
- const tabletHeadlineRules = buildTypographyRules(
26847
- typography.responsive.tablet.headlineSize,
26848
- typography.responsive.tablet.headlineLineHeight
26849
- );
26850
- const tabletSubheadlineRules = buildTypographyRules(
26851
- typography.responsive.tablet.subheadlineSize,
26852
- typography.responsive.tablet.subheadlineLineHeight
26853
- );
26876
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
26877
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
26854
26878
  const tabletChunks = [];
26855
26879
  if (tabletHeadlineRules.length > 0) {
26856
26880
  tabletChunks.push(`${headlineSelector} {
@@ -26869,14 +26893,8 @@ function generateHeroTypographyCss(themeId, theme) {
26869
26893
  }
26870
26894
  }
26871
26895
  if (typography.responsive?.mobile) {
26872
- const mobileHeadlineRules = buildTypographyRules(
26873
- typography.responsive.mobile.headlineSize,
26874
- typography.responsive.mobile.headlineLineHeight
26875
- );
26876
- const mobileSubheadlineRules = buildTypographyRules(
26877
- typography.responsive.mobile.subheadlineSize,
26878
- typography.responsive.mobile.subheadlineLineHeight
26879
- );
26896
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
26897
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
26880
26898
  const mobileChunks = [];
26881
26899
  if (mobileHeadlineRules.length > 0) {
26882
26900
  mobileChunks.push(`${headlineSelector} {
@@ -26906,6 +26924,27 @@ function buildTypographyRules(size, lineHeight) {
26906
26924
  }
26907
26925
  return rules;
26908
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
+ }
26909
26948
  function toHeroSize(size) {
26910
26949
  const map = {
26911
26950
  sm: "0.875rem",
@@ -26916,7 +26955,8 @@ function toHeroSize(size) {
26916
26955
  "3xl": "1.875rem",
26917
26956
  "4xl": "2.25rem",
26918
26957
  "5xl": "3rem",
26919
- "6xl": "3.75rem"
26958
+ "6xl": "3.75rem",
26959
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
26920
26960
  };
26921
26961
  return map[size];
26922
26962
  }
@@ -26929,10 +26969,14 @@ function toHeroLineHeight(lineHeight) {
26929
26969
  };
26930
26970
  return map[lineHeight];
26931
26971
  }
26972
+ var waveTransitionMask;
26932
26973
  var init_generateLayoutCss = __esm({
26933
26974
  "../theme-core/src/layout/generateLayoutCss.ts"() {
26934
26975
  "use strict";
26935
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
+ );
26936
26980
  }
26937
26981
  });
26938
26982
 
@@ -28911,12 +28955,16 @@ var init_containerResponsiveThemeCss = __esm({
28911
28955
  .rb-h-full {
28912
28956
  height: 100%;
28913
28957
  }
28958
+ .rb-section-min-h-banner {
28959
+ min-height: clamp(16rem, 34svh, 24rem);
28960
+ }
28914
28961
  .rb-section-min-h-hero {
28915
28962
  min-height: clamp(32rem, 62svh, 44rem);
28916
28963
  }
28917
28964
  .rb-section-min-h-immersive {
28918
28965
  min-height: clamp(38rem, 78svh, 54rem);
28919
28966
  }
28967
+ .rb-section-min-h-banner > .rb-container,
28920
28968
  .rb-section-min-h-hero > .rb-container,
28921
28969
  .rb-section-min-h-immersive > .rb-container {
28922
28970
  min-height: inherit;
@@ -30026,6 +30074,19 @@ var init_containerResponsiveThemeCss = __esm({
30026
30074
  .rb-object-contain {
30027
30075
  object-fit: contain;
30028
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
+ }
30029
30090
 
30030
30091
  /* Line clamp */
30031
30092
  .rb-line-clamp-2,
@@ -34536,13 +34597,13 @@ var init_containerResponsiveThemeCss = __esm({
34536
34597
 
34537
34598
  /* Eyebrow - color only (typography via .rb-eyebrow) */
34538
34599
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
34539
- color: rgb(var(--tb-text));
34600
+ color: var(--section-text-color, rgb(var(--tb-text)));
34540
34601
  }
34541
34602
 
34542
34603
  /* Subheadline - supporting text below headline */
34543
34604
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
34544
34605
  font-size: 1.125rem;
34545
- color: rgb(var(--tb-text));
34606
+ color: var(--section-text-color, rgb(var(--tb-text)));
34546
34607
  }
34547
34608
 
34548
34609
  @container rb-site (min-width: 640px) {
@@ -34616,6 +34677,20 @@ var init_containerResponsiveThemeCss = __esm({
34616
34677
  max-width: 60rem;
34617
34678
  }
34618
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
+
34619
34694
  /* Variant: Narrow (left-aligned, shorter line length) */
34620
34695
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
34621
34696
  max-width: 34rem;
@@ -35958,6 +36033,13 @@ var init_containerResponsiveThemeCss = __esm({
35958
36033
  border-radius: var(--rb-block-radius);
35959
36034
  }
35960
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
+
35961
36043
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
35962
36044
  font-size: var(--rb-testimonial-quote-size);
35963
36045
  line-height: 1;
@@ -35966,6 +36048,12 @@ var init_containerResponsiveThemeCss = __esm({
35966
36048
  color: rgb(var(--tb-primary));
35967
36049
  }
35968
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
+
35969
36057
 
35970
36058
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
35971
36059
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -59355,7 +59443,7 @@ var ENDPOINT_DEFINITIONS = {
59355
59443
  method: "GET",
59356
59444
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
59357
59445
  auth: "user",
59358
- responseKind: "text"
59446
+ responseKind: "blob"
59359
59447
  },
59360
59448
  getNewsletterSubscriber: {
59361
59449
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -59686,12 +59774,7 @@ var ENDPOINT_DEFINITIONS = {
59686
59774
  ],
59687
59775
  auth: "user",
59688
59776
  responseKind: "json",
59689
- errors: [
59690
- "validation:invalid_input",
59691
- "resource:not_found",
59692
- "resource:conflict",
59693
- "server:internal_error"
59694
- ]
59777
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
59695
59778
  },
59696
59779
  unpublishTeamMemberProfile: {
59697
59780
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -59944,6 +60027,13 @@ var ENDPOINT_DEFINITIONS = {
59944
60027
  auth: "user",
59945
60028
  responseKind: "json"
59946
60029
  },
60030
+ exportBookingAppointmentsCsv: {
60031
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
60032
+ method: "GET",
60033
+ auth: "user",
60034
+ errors: [],
60035
+ responseKind: "blob"
60036
+ },
59947
60037
  createAppointment: {
59948
60038
  path: "/sites/{siteId}/bookings/appointments",
59949
60039
  method: "POST",
@@ -60071,6 +60161,13 @@ var ENDPOINT_DEFINITIONS = {
60071
60161
  auth: "user",
60072
60162
  responseKind: "json"
60073
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
+ },
60074
60171
  listCourseWaitlist: {
60075
60172
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
60076
60173
  method: "GET",
@@ -61433,6 +61530,14 @@ var ENDPOINT_DEFINITIONS = {
61433
61530
  auth: "user",
61434
61531
  responseKind: "json"
61435
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
+ },
61436
61541
  getSeoQueries: {
61437
61542
  path: "/sites/{siteId}/seo/queries",
61438
61543
  method: "GET",
@@ -61441,6 +61546,14 @@ var ENDPOINT_DEFINITIONS = {
61441
61546
  auth: "user",
61442
61547
  responseKind: "json"
61443
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
+ },
61444
61557
  getPerformanceOverview: {
61445
61558
  path: "/sites/{siteId}/performance/overview",
61446
61559
  method: "GET",
@@ -61489,7 +61602,12 @@ var ENDPOINT_DEFINITIONS = {
61489
61602
  path: "/media/{assetId}/canonical-crop",
61490
61603
  method: "POST",
61491
61604
  tags: ["media", "media-{assetId}"],
61492
- 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
+ ],
61493
61611
  auth: "user",
61494
61612
  responseKind: "json"
61495
61613
  },
@@ -61821,7 +61939,7 @@ var ENDPOINT_DEFINITIONS = {
61821
61939
  method: "GET",
61822
61940
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
61823
61941
  auth: "user",
61824
- responseKind: "text"
61942
+ responseKind: "blob"
61825
61943
  },
61826
61944
  // Public submit
61827
61945
  submitForm: {
@@ -62704,6 +62822,14 @@ var ENDPOINT_DEFINITIONS = {
62704
62822
  auth: "user",
62705
62823
  responseKind: "json"
62706
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
+ },
62707
62833
  listEventSeriesWaitlist: {
62708
62834
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
62709
62835
  method: "GET",
@@ -63267,6 +63393,14 @@ var ENDPOINT_DEFINITIONS = {
63267
63393
  auth: "user",
63268
63394
  responseKind: "json"
63269
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
+ },
63270
63404
  createBookingCustomer: {
63271
63405
  path: "/sites/{siteId}/bookings/customers",
63272
63406
  method: "POST",
@@ -63294,6 +63428,21 @@ var ENDPOINT_DEFINITIONS = {
63294
63428
  "server:internal_error"
63295
63429
  ]
63296
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
+ },
63297
63446
  listCustomerPasses: {
63298
63447
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
63299
63448
  method: "GET",
@@ -63428,13 +63577,46 @@ var ENDPOINT_DEFINITIONS = {
63428
63577
  auth: "user",
63429
63578
  responseKind: "json"
63430
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
+ },
63431
63604
  listBookingActivity: {
63432
63605
  path: "/sites/{siteId}/bookings/activity",
63433
63606
  method: "GET",
63434
63607
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
63608
+ errors: [],
63435
63609
  auth: "user",
63436
63610
  responseKind: "json"
63437
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
+ },
63438
63620
  // Site logs
63439
63621
  listSiteActivityLogs: {
63440
63622
  path: "/sites/{siteId}/logs/activity",
@@ -63586,13 +63768,6 @@ var ENDPOINT_DEFINITIONS = {
63586
63768
  auth: "user",
63587
63769
  responseKind: "blob"
63588
63770
  },
63589
- exportSeoCsv: {
63590
- path: "/sites/{siteId}/seo/export",
63591
- method: "GET",
63592
- tags: ["site-{siteId}", "seo"],
63593
- auth: "user",
63594
- responseKind: "blob"
63595
- },
63596
63771
  // Admin site cost (for admin panel)
63597
63772
  adminSiteCost: {
63598
63773
  path: "/admin/sites/{siteId}/cost",
@@ -65338,6 +65513,8 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
65338
65513
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
65339
65514
  "missing_amount",
65340
65515
  "amount_exceeds_remaining",
65516
+ "credit_refunds_disabled",
65517
+ "missing_credit_customer",
65341
65518
  "deposit_refund_override_required",
65342
65519
  "refund_revoke_requires_full_line_refund",
65343
65520
  "unified_order_link_required"
@@ -66609,12 +66786,29 @@ function defineFrameCapability(capability) {
66609
66786
  function defineBlockDesignCapability(capability) {
66610
66787
  return {
66611
66788
  ...capability,
66612
- 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"]
66613
66794
  };
66614
66795
  }
66615
66796
 
66616
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
+ }
66617
66810
  function defineBlockAppearancePreset(preset2) {
66811
+ assertValidOptionGroups(preset2);
66618
66812
  return preset2;
66619
66813
  }
66620
66814
  function defineSiteChromeAppearancePreset(preset2) {
@@ -66627,13 +66821,122 @@ var appearancePresets = [
66627
66821
  target: "hero",
66628
66822
  label: "Immersive image hero",
66629
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
+ ],
66630
66879
  design: {
66631
66880
  sectionSurface: "hero-image",
66632
66881
  contentFrame: plainFrame,
66633
66882
  itemSurface: "none",
66634
66883
  transitionAfter: "soft-fade-short",
66635
66884
  emphasis: "high",
66636
- heroLegibility: "scrim-gradient"
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
+ ],
66931
+ design: {
66932
+ sectionSurface: "hero-image",
66933
+ contentFrame: plainFrame,
66934
+ itemSurface: "none",
66935
+ transitionAfter: "soft-fade-short",
66936
+ emphasis: "high",
66937
+ sectionHeight: "immersive",
66938
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
66939
+ imageSurfaceMotion: "fixed-frame"
66637
66940
  }
66638
66941
  }),
66639
66942
  defineBlockAppearancePreset({
@@ -66650,17 +66953,26 @@ var appearancePresets = [
66650
66953
  emphasis: "high"
66651
66954
  }
66652
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
+ }),
66653
66970
  defineBlockAppearancePreset({
66654
66971
  kind: "block-design",
66655
66972
  id: "offerings-calm-list",
66656
66973
  target: "offerings",
66657
66974
  label: "Calm offerings list",
66658
- blockKinds: [
66659
- "block.event-listing",
66660
- "block.event-calendar",
66661
- "block.event-spotlight",
66662
- "block.product-list"
66663
- ],
66975
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
66664
66976
  design: {
66665
66977
  sectionSurface: "muted-band",
66666
66978
  contentFrame: plainFrame,
@@ -66739,6 +67051,35 @@ var appearancePresets = [
66739
67051
  emphasis: "high"
66740
67052
  }
66741
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
+ }),
66742
67083
  defineBlockAppearancePreset({
66743
67084
  kind: "block-design",
66744
67085
  id: "faq-contained-help",
@@ -66767,6 +67108,20 @@ var appearancePresets = [
66767
67108
  emphasis: "medium"
66768
67109
  }
66769
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
+ }),
66770
67125
  defineBlockAppearancePreset({
66771
67126
  kind: "block-design",
66772
67127
  id: "cta-accent-band",
@@ -66786,9 +67141,33 @@ var appearancePresets = [
66786
67141
  id: "header-clean-base",
66787
67142
  target: "site-header",
66788
67143
  label: "Clean base header",
66789
- chrome: {
66790
- surface: "base",
66791
- 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"
66792
67171
  }
66793
67172
  }),
66794
67173
  defineSiteChromeAppearancePreset({
@@ -66796,10 +67175,31 @@ var appearancePresets = [
66796
67175
  id: "footer-muted-grounding",
66797
67176
  target: "site-footer",
66798
67177
  label: "Muted grounding footer",
66799
- chrome: {
67178
+ footer: {
67179
+ kind: "grounding",
66800
67180
  surface: "muted-band",
66801
67181
  emphasis: "low"
66802
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
+ }
66803
67203
  })
66804
67204
  ];
66805
67205
 
@@ -67016,14 +67416,7 @@ var proseLinkStyleSchema = z24.object({
67016
67416
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
67017
67417
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
67018
67418
  });
67019
- var semanticSpacingSchema = z24.enum([
67020
- "none",
67021
- "compact",
67022
- "cozy",
67023
- "medium",
67024
- "comfortable",
67025
- "spacious"
67026
- ]);
67419
+ var semanticSpacingSchema = z24.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
67027
67420
  var boxRoundedSchema = z24.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
67028
67421
  var boxBackgroundOverlaySchema = z24.object({
67029
67422
  type: z24.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -67040,6 +67433,7 @@ var boxBackgroundSchema = z24.object({
67040
67433
  scale: z24.string().nullable().optional(),
67041
67434
  position: z24.string().nullable().optional(),
67042
67435
  opacity: z24.number().min(0).max(1).nullable().optional(),
67436
+ motion: z24.enum(["static", "fixed-frame"]).nullable().optional(),
67043
67437
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
67044
67438
  textColor: z24.string().nullable().optional(),
67045
67439
  headingColor: z24.string().nullable().optional()
@@ -67047,7 +67441,7 @@ var boxBackgroundSchema = z24.object({
67047
67441
  var sectionStylesOverrideSchema = z24.object({
67048
67442
  background: boxBackgroundSchema.nullable().optional(),
67049
67443
  spacing: semanticSpacingSchema.nullable().optional(),
67050
- minHeight: z24.enum(["none", "hero", "immersive"]).nullable().optional()
67444
+ minHeight: z24.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
67051
67445
  });
67052
67446
  var containerStylesOverrideSchema = z24.object({
67053
67447
  background: boxBackgroundSchema.nullable().optional(),
@@ -67066,7 +67460,8 @@ var cardStylesOverrideSchema = z24.object({
67066
67460
  border: cardBorderOverrideSchema.nullable().optional(),
67067
67461
  spacing: semanticSpacingSchema.nullable().optional(),
67068
67462
  raised: z24.boolean().nullable().optional(),
67069
- rounded: boxRoundedSchema.nullable().optional()
67463
+ rounded: boxRoundedSchema.nullable().optional(),
67464
+ treatment: z24.enum(["accent-quote"]).nullable().optional()
67070
67465
  });
67071
67466
  var blockStyleOverridesSchema = z24.object({
67072
67467
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -67141,15 +67536,7 @@ var inputStyle = z24.object({
67141
67536
  });
67142
67537
  var headerVariant = z24.enum(["classic", "centered", "transparent", "floating", "editorial"]);
67143
67538
  var headerPositioning = z24.enum(["static", "sticky", "fixed"]);
67144
- var headerNavStyle = z24.enum([
67145
- "minimal",
67146
- "underline",
67147
- "underline-grow",
67148
- "capsule",
67149
- "scale",
67150
- "frosted",
67151
- "solid"
67152
- ]);
67539
+ var headerNavStyle = z24.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
67153
67540
  var navFontWeight = z24.enum(["regular", "medium", "semibold", "bold"]);
67154
67541
  var headerMaxWidth = z24.enum(["container", "full"]);
67155
67542
  var headerContainerSchema = z24.object({
@@ -67203,6 +67590,7 @@ var dropdownStyleSchema = z24.object({
67203
67590
  // optional = no override (browser default)
67204
67591
  }).optional();
67205
67592
  var headerCtaGapSchema = z24.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
67593
+ var headerCtaTreatmentSchema = z24.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
67206
67594
  var navContainerSchema = z24.object({
67207
67595
  type: z24.enum(["none", "pill", "glass"]).default("none"),
67208
67596
  tint: z24.string().nullable().optional(),
@@ -67221,7 +67609,10 @@ var headerSchema = z24.object({
67221
67609
  shrinkOnScroll: z24.boolean(),
67222
67610
  maxWidth: headerMaxWidth,
67223
67611
  logoOverride: mediaSchema.nullable().optional(),
67224
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
67612
+ background: headerBackgroundSchema.default({
67613
+ type: "color",
67614
+ color: "surface"
67615
+ }),
67225
67616
  textColor: z24.string().nullable().optional(),
67226
67617
  // Site title and general header text
67227
67618
  navStyle: headerNavStyle,
@@ -67241,6 +67632,13 @@ var headerSchema = z24.object({
67241
67632
  navLinkStyle: navLinkStyleSchema.optional(),
67242
67633
  // CTA button spacing (desktop left margin)
67243
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(),
67244
67642
  // Dropdown menu styling (nav dropdowns and mobile drawer)
67245
67643
  dropdownStyle: dropdownStyleSchema
67246
67644
  });
@@ -67297,7 +67695,10 @@ var footerSchema = z24.object({
67297
67695
  variant: footerVariant,
67298
67696
  maxWidth: footerMaxWidth,
67299
67697
  showLogoText: z24.boolean().optional(),
67300
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
67698
+ background: headerBackgroundSchema.default({
67699
+ type: "color",
67700
+ color: "surface"
67701
+ }),
67301
67702
  // Footer nav styling (independent from header)
67302
67703
  navStyle: headerNavStyle.default("minimal"),
67303
67704
  navColor: z24.string().nullable().optional(),
@@ -67319,17 +67720,7 @@ var layoutSchema = z24.object({
67319
67720
  desktop: containerPaddingPresetSchema.optional()
67320
67721
  }).optional()
67321
67722
  }).optional();
67322
- var heroTypographySizeSchema = z24.enum([
67323
- "sm",
67324
- "base",
67325
- "lg",
67326
- "xl",
67327
- "2xl",
67328
- "3xl",
67329
- "4xl",
67330
- "5xl",
67331
- "6xl"
67332
- ]);
67723
+ var heroTypographySizeSchema = z24.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
67333
67724
  var heroTypographyLineHeightSchema = z24.enum(["tight", "snug", "normal", "relaxed"]);
67334
67725
  var heroResponsiveTypographySchema = z24.object({
67335
67726
  headlineSize: heroTypographySizeSchema.optional(),
@@ -67354,6 +67745,13 @@ var heroTypographySchema = z24.object({
67354
67745
  var heroSchema = z24.object({
67355
67746
  typography: heroTypographySchema.optional()
67356
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();
67357
67755
  var gradientsSchema = z24.object({
67358
67756
  button: z24.string().min(1).nullable().optional(),
67359
67757
  hero: z24.string().min(1).nullable().optional(),
@@ -67375,6 +67773,7 @@ var themeSchema = z24.object({
67375
67773
  gradients: gradientsSchema.optional(),
67376
67774
  layout: layoutSchema,
67377
67775
  hero: heroSchema,
67776
+ bodyText: bodyTextSchema,
67378
67777
  header: headerSchema,
67379
67778
  footer: footerSchema,
67380
67779
  buttons: buttonSystemSchema.optional(),
@@ -67398,10 +67797,7 @@ var themeSchema = z24.object({
67398
67797
  ).optional(),
67399
67798
  // Structured block-kind theme overrides (v1: typography prose-link style only)
67400
67799
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
67401
- blockOverrides: z24.record(
67402
- z24.string(),
67403
- blockThemeOverrideSchema
67404
- ).optional(),
67800
+ blockOverrides: z24.record(z24.string(), blockThemeOverrideSchema).optional(),
67405
67801
  // Structured custom CSS rules
67406
67802
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
67407
67803
  customCssRules: customCssRulesSchema,
@@ -67572,6 +67968,28 @@ var brandLedJewel = definePaletteVariant({
67572
67968
  { name: "border", hex: "#a8a29e" }
67573
67969
  ]
67574
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
+ });
67575
67993
 
67576
67994
  // ../theme-core/src/palette/variants/high-contrast.ts
67577
67995
  var highContrastInk = definePaletteVariant({
@@ -67783,6 +68201,7 @@ var paletteVariants = [
67783
68201
  brandLedCool,
67784
68202
  brandLedWarm,
67785
68203
  brandLedJewel,
68204
+ brandLedBurgundyGold,
67786
68205
  // Warm-neutral family
67787
68206
  warmNeutralClay,
67788
68207
  warmNeutralCream,
@@ -67858,7 +68277,8 @@ var curatedSiteStyleIdValues = [
67858
68277
  "site-style:quiet-luxury",
67859
68278
  "site-style:practical-services",
67860
68279
  "site-style:modern-wellness",
67861
- "site-style:bold-launch"
68280
+ "site-style:bold-launch",
68281
+ "site-style:south-west-twerk-school"
67862
68282
  ];
67863
68283
  var quietBudget = {
67864
68284
  accentDensity: "low",
@@ -67913,6 +68333,8 @@ function defineCuratedSiteStyle(input) {
67913
68333
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
67914
68334
  supportedTransitions: generatedDesignOptionCatalog.transitions
67915
68335
  },
68336
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
68337
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
67916
68338
  buttonPersonalityChoices: input.buttonPersonalityChoices,
67917
68339
  paletteVariantChoices: input.paletteVariantChoices
67918
68340
  };
@@ -68159,6 +68581,101 @@ var curatedSiteStyles = [
68159
68581
  paletteChoice("brand-led-jewel"),
68160
68582
  paletteChoice("brand-led-warm")
68161
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
+ ]
68162
68679
  })
68163
68680
  ];
68164
68681
  var curatedSiteStylesById = new Map(
@@ -68203,6 +68720,40 @@ var heroLegibilityStrategySchema = z26.enum([
68203
68720
  "scrim-gradient",
68204
68721
  "solid-panel"
68205
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"]);
68206
68757
  function uniqueNonEmpty(values) {
68207
68758
  const uniqueValues = [...new Set(values)];
68208
68759
  const firstValue = uniqueValues[0];
@@ -68241,7 +68792,11 @@ var blockDesignPlanSchema = z26.object({
68241
68792
  itemSurface: z26.enum(userDesignOptionCatalog.itemSurfaces),
68242
68793
  transitionAfter: z26.enum(userDesignOptionCatalog.transitions),
68243
68794
  emphasis: z26.enum(userDesignOptionCatalog.emphases),
68244
- heroLegibility: heroLegibilityStrategySchema.optional()
68795
+ sectionHeight: sectionHeightIntentSchema.optional(),
68796
+ heroLegibility: heroLegibilityStrategySchema.optional(),
68797
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
68798
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
68799
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
68245
68800
  }).strict();
68246
68801
  var styleAuthoritySchema = z26.discriminatedUnion("kind", [
68247
68802
  z26.object({
@@ -68908,6 +69463,7 @@ function heroContentCard(children, gap) {
68908
69463
  return styledContainer({
68909
69464
  bindFrom: "_contentCardStyles",
68910
69465
  constrainWidth: false,
69466
+ baseClassName: "rb-relative rb-isolate",
68911
69467
  rootType: "stack",
68912
69468
  rootProps: {
68913
69469
  gap
@@ -68938,6 +69494,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
68938
69494
  function heroContainerStack(children, gap) {
68939
69495
  return styledContainer({
68940
69496
  rootType: "stack",
69497
+ baseClassName: "rb-relative rb-isolate",
68941
69498
  rootProps: {
68942
69499
  gap: "none",
68943
69500
  justify: {
@@ -69864,7 +70421,7 @@ function resolveHeroVerticalAlignment(content) {
69864
70421
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
69865
70422
  const sectionStyles = asPartialObject(content._sectionStyles);
69866
70423
  const minHeight = sectionStyles?.minHeight;
69867
- if (minHeight === "hero" || minHeight === "immersive") return "center";
70424
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
69868
70425
  const variant = resolveHeroVariant(content);
69869
70426
  if (variant === "split" || variant === "splitReverse") return "center";
69870
70427
  return "top";
@@ -70558,6 +71115,26 @@ var footerSplitNavSingleClassTransform = {
70558
71115
  ]);
70559
71116
  }
70560
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
+ };
70561
71138
  var footerLogoClassSchema = z38.object({
70562
71139
  base: z38.string().optional()
70563
71140
  });
@@ -70568,14 +71145,11 @@ var footerLogoClassTransform = {
70568
71145
  schema: footerLogoClassSchema,
70569
71146
  run: (value, options) => {
70570
71147
  const logo = asPartialObject(value);
70571
- const placement = logo?.placement ?? "right";
70572
71148
  const align = logo?.align ?? "end";
70573
71149
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
70574
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
70575
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";
70576
71151
  return joinClasses4([
70577
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",
70578
- orderClass,
70579
71153
  selfAlignClass,
70580
71154
  hiddenClass
70581
71155
  ]);
@@ -70630,6 +71204,7 @@ var layoutTransforms = [
70630
71204
  footerBottomBarContainerClassTransform,
70631
71205
  footerBottomBarStyleTransform,
70632
71206
  footerSplitNavSingleClassTransform,
71207
+ footerSplitMainClassTransform,
70633
71208
  footerLogoClassTransform,
70634
71209
  footerLogoMediaClassTransform,
70635
71210
  footerLogoTextVisibleTransform
@@ -70878,7 +71453,7 @@ var createNavRow = (className, align = "end") => navRow({
70878
71453
  var headerCta = ctaButton({
70879
71454
  basePath: "menu.ctaItem",
70880
71455
  whenPath: "menu.ctaItem.label",
70881
- variantPath: "menu.ctaItem.variant",
71456
+ variantPath: "$root.theme.header.ctaVariant",
70882
71457
  linkPath: "menu.ctaItem.link",
70883
71458
  sizeFallback: "sm",
70884
71459
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -70886,7 +71461,7 @@ var headerCta = ctaButton({
70886
71461
  var mobileCta = ctaButton({
70887
71462
  basePath: "menu.ctaItem",
70888
71463
  whenPath: "menu.ctaItem.label",
70889
- variantPath: "menu.ctaItem.variant",
71464
+ variantPath: "$root.theme.header.ctaVariant",
70890
71465
  linkPath: "menu.ctaItem.link",
70891
71466
  sizeFallback: "md",
70892
71467
  className: "nav-mobile-cta rb-w-full"
@@ -71356,7 +71931,13 @@ var splitFooterLayout = stack(
71356
71931
  [
71357
71932
  inline(
71358
71933
  {
71359
- 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
+ }
71360
71941
  },
71361
71942
  [
71362
71943
  stack(
@@ -75155,6 +75736,34 @@ function panelCapable() {
75155
75736
  itemSurfaces: "unsupported"
75156
75737
  });
75157
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
+ }
75158
75767
  function plainItemsCapable() {
75159
75768
  return declareBlockDesignCapability({
75160
75769
  sectionSurfaces: "supported",
@@ -75271,7 +75880,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
75271
75880
  };
75272
75881
  }
75273
75882
  var systemBlockDefinitionsRaw = [
75274
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
75883
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
75275
75884
  flow: heroFlow,
75276
75885
  layoutProfiles: [
75277
75886
  layoutProfile({
@@ -75375,7 +75984,12 @@ var systemBlockDefinitionsRaw = [
75375
75984
  flow: siteChromeFlow,
75376
75985
  layoutProfiles: []
75377
75986
  })),
75378
- 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({
75379
75993
  flow: proofFlow,
75380
75994
  layoutProfiles: [
75381
75995
  layoutProfile({
@@ -75626,8 +76240,15 @@ function parseOpacity(value) {
75626
76240
  }
75627
76241
  return opacity <= 1 ? opacity : opacity / 100;
75628
76242
  }
75629
- function appendOptionalClasses(baseClassName, optionalClassName) {
75630
- 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(" ");
75631
76252
  }
75632
76253
  var resolveImageStyleTransform = {
75633
76254
  id: "background.resolveImageStyle",
@@ -75704,9 +76325,9 @@ var resolveImageClassNameTransform = {
75704
76325
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
75705
76326
  const position = isString(input.position) ? input.position.trim() : null;
75706
76327
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
75707
- return appendOptionalClasses(
76328
+ return appendBackgroundMediaClasses(
75708
76329
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
75709
- backgroundVideoMobileClassNames(input)
76330
+ input
75710
76331
  );
75711
76332
  }
75712
76333
  let needsAnchoring = false;
@@ -75719,18 +76340,18 @@ var resolveImageClassNameTransform = {
75719
76340
  }
75720
76341
  }
75721
76342
  if (!needsAnchoring) {
75722
- return appendOptionalClasses(
76343
+ return appendBackgroundMediaClasses(
75723
76344
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
75724
- backgroundVideoMobileClassNames(input)
76345
+ input
75725
76346
  );
75726
76347
  }
75727
76348
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
75728
76349
  const isCustom = position && !isPreset;
75729
76350
  if (isCustom) {
75730
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
76351
+ return appendBackgroundMediaClasses(baseClass, input);
75731
76352
  }
75732
76353
  const anchorClasses = getAnchorClasses(position);
75733
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
76354
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
75734
76355
  }
75735
76356
  };
75736
76357
  var resolveOverlayStyleTransform = {
@@ -80220,7 +80841,7 @@ var SimpleCache = class {
80220
80841
  };
80221
80842
 
80222
80843
  // src/version.ts
80223
- var SDK_VERSION = "0.60.12";
80844
+ var SDK_VERSION = "0.60.14";
80224
80845
 
80225
80846
  // src/client/error.ts
80226
80847
  var RiverbankApiError = class _RiverbankApiError extends Error {