@riverbankcms/sdk 0.101.0 → 0.103.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +10 -2
  2. package/dist/{PreviewEditorSidebar-DBpy0KTh.mjs → PreviewEditorSidebar-DkNpCPja.mjs} +430 -74
  3. package/dist/{PreviewEditorUI-Fg6I2R2T.mjs → PreviewEditorUI-DeNKtqk3.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BICQLAUF.mjs → PreviewQueryProvider-ZF6TXq5Q.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-DFQP-Q53.mjs → SdkPreviewModeRuntime-5bCsXK2y.mjs} +694 -329
  6. package/dist/{SiteChromeCustomizeContext-GwZc89KN.mjs → SiteChromeCustomizeContext-CO1sTK_W.mjs} +538 -69
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +298 -298
  8. package/dist/_dts/ai/src/designer/rfc6902.d.ts +57 -1
  9. package/dist/_dts/ai/src/designer/themePatch.d.ts +16 -6
  10. package/dist/_dts/api/src/bookingVerticals.d.ts +53 -1
  11. package/dist/_dts/api/src/index.d.ts +1 -1
  12. package/dist/_dts/api/src/navigation/contracts.d.ts +6 -6
  13. package/dist/_dts/api/src/siteBanner.d.ts +2 -2
  14. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +1 -0
  15. package/dist/_dts/blocks/src/PageRenderer.d.ts +6 -1
  16. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  17. package/dist/_dts/blocks/src/index.d.ts +1 -1
  18. package/dist/_dts/blocks/src/server.d.ts +1 -1
  19. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +7 -7
  20. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
  21. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +14 -14
  22. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +5 -5
  23. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +227 -227
  24. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +1 -1
  25. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  26. package/dist/_dts/blocks/src/system/customize/facets.d.ts +2 -2
  27. package/dist/_dts/blocks/src/system/inlineText.d.ts +2 -2
  28. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +177 -177
  29. package/dist/_dts/blocks/src/system/node/schema.d.ts +1 -1
  30. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
  31. package/dist/_dts/blocks/src/system/runtime/nodes/layout.d.ts +1 -0
  32. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +7 -7
  33. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -1
  34. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  35. package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
  36. package/dist/_dts/core/src/branded.d.ts +4 -0
  37. package/dist/_dts/core/src/person-records.d.ts +6 -1
  38. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +154 -18
  39. package/dist/_dts/db/src/schemas/forms.d.ts +15 -15
  40. package/dist/_dts/media-core/src/identifiers.d.ts +14 -1
  41. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +1 -1
  42. package/dist/_dts/preview-next/src/client/blocks/previewProjection/applyPreviewProjections.d.ts +3 -1
  43. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  44. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -1
  45. package/dist/_dts/preview-next/src/client/preview/CustomizeColorTokenPicker.d.ts +27 -0
  46. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
  47. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +2 -1
  48. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +10 -2
  49. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +43 -7
  50. package/dist/_dts/preview-next/src/client/preview/sidebarTabPreference.d.ts +1 -1
  51. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +16 -1
  52. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +3 -2
  53. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +4 -4
  54. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -1
  55. package/dist/_dts/preview-next/src/client/preview/typographySelectionInput.d.ts +4 -2
  56. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  57. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  58. package/dist/_dts/sdk/src/contracts/page.d.ts +2 -0
  59. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +10 -10
  60. package/dist/_dts/sdk/src/next/revalidate.d.ts +14 -1
  61. package/dist/_dts/sdk/src/public-api/contracts.d.ts +4 -4
  62. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -1
  63. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -2
  64. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +3 -4
  65. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +1 -0
  66. package/dist/_dts/sdk/src/version.d.ts +1 -1
  67. package/dist/_dts/site-commands/src/commands.d.ts +19 -19
  68. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  69. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +3 -3
  70. package/dist/_dts/theme-core/src/buttons/types.d.ts +7 -7
  71. package/dist/_dts/theme-core/src/cards/types.d.ts +6 -6
  72. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  73. package/dist/_dts/theme-core/src/inputs/types.d.ts +4 -4
  74. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +150 -144
  75. package/dist/_dts/theme-core/src/navigation/types.d.ts +6 -6
  76. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +5 -5
  77. package/dist/_dts/theme-core/src/schema.d.ts +199 -169
  78. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  79. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  80. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +28 -26
  81. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +2 -2
  82. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +4 -4
  83. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  84. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +9 -2
  85. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +3 -3
  86. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +50 -2
  87. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +77 -0
  88. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +44 -0
  89. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  90. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +3 -3
  92. package/dist/_dts/ui/src/badge.d.ts +1 -1
  93. package/dist/_dts/ui/src/button.d.ts +1 -1
  94. package/dist/_dts/ui/src/card.d.ts +1 -1
  95. package/dist/_dts/ui/src/toggle.d.ts +2 -2
  96. package/dist/cli/index.mjs +58 -21
  97. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +9 -1
  98. package/dist/client/client.mjs +379 -83
  99. package/dist/client/hooks.mjs +27 -6
  100. package/dist/client/rendering/client.mjs +46 -17
  101. package/dist/client/rendering.mjs +378 -82
  102. package/dist/preview-next/before-render.mjs +1 -1
  103. package/dist/preview-next/client/runtime.mjs +4 -4
  104. package/dist/{previewAuthStore-Da74OL0X.mjs → previewAuthStore-ByPPZqmp.mjs} +1 -0
  105. package/dist/{sdk-runtime-CP6Kwalv.mjs → sdk-runtime-C8whifOy.mjs} +2 -2
  106. package/dist/{separator-BVk7GvGN.mjs → separator-CM2C5Axs.mjs} +1 -1
  107. package/dist/server/components.mjs +357 -77
  108. package/dist/server/config-validation.mjs +26 -6
  109. package/dist/server/config.mjs +26 -6
  110. package/dist/server/data.mjs +26 -6
  111. package/dist/server/index.mjs +2 -2
  112. package/dist/server/next/revalidate.mjs +31 -1
  113. package/dist/server/next.mjs +361 -78
  114. package/dist/server/page-converter.mjs +19 -5
  115. package/dist/server/prebuild.mjs +1 -1
  116. package/dist/server/rendering/server.mjs +359 -77
  117. package/dist/server/rendering.mjs +359 -77
  118. package/dist/server/routing.mjs +40 -9
  119. package/dist/server/server.mjs +29 -7
  120. package/dist/server/theme-bridge.mjs +158 -36
  121. package/dist/server/theme.mjs +3 -0
  122. package/dist/styles/index.css +123 -30
  123. package/package.json +1 -1
@@ -11554,6 +11554,7 @@ const themeV2RuntimeStyleFieldNames = [
11554
11554
  "_sectionStyles",
11555
11555
  "_containerStyles",
11556
11556
  "_cardStyles",
11557
+ "_transitionStyles",
11557
11558
  "styleGroup"
11558
11559
  ];
11559
11560
  const themeV2BlockSpecificRawStyleFieldNames = [
@@ -12302,6 +12303,8 @@ const headerSchema = z$1.object({
12302
12303
  navStyle: headerNavStyle,
12303
12304
  navColor: themeColorTokenSchema.nullable().optional(),
12304
12305
  navWeight: navFontWeight.default("medium"),
12306
+ navTypography: z$1.enum(["body", "heading"]).optional(),
12307
+ navTextSize: navLinkStyleSchema.shape.textSize,
12305
12308
  container: headerContainerSchema,
12306
12309
  border: headerBorderSchema,
12307
12310
  shadow: componentShadowSchema.optional(),
@@ -13903,6 +13906,31 @@ function uniqueStrings(values) {
13903
13906
  }
13904
13907
  //#endregion
13905
13908
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
13909
+ function boundaryRuntimeMetrics(family, size, heightExpression) {
13910
+ return {
13911
+ family,
13912
+ size,
13913
+ heightCss: heightExpression.includes(" ") ? `calc(${heightExpression})` : heightExpression,
13914
+ reserveCss: `calc((${heightExpression}) / 2)`
13915
+ };
13916
+ }
13917
+ const sectionBoundaryRuntimeMetricsByTransition = {
13918
+ none: null,
13919
+ "soft-fade-short": boundaryRuntimeMetrics("gradient", "medium", "6rem + 2px"),
13920
+ "soft-fade-long": boundaryRuntimeMetrics("gradient", "spacious", "10rem"),
13921
+ "soft-fade-expansive": boundaryRuntimeMetrics("gradient", "expansive", "14rem"),
13922
+ "wave-edge": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13923
+ "wave-edge-balanced": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13924
+ "wave-edge-gentle": boundaryRuntimeMetrics("wave", "compact", "4.5rem + 2px"),
13925
+ "wave-edge-bold": boundaryRuntimeMetrics("wave", "large", "7rem + 2px"),
13926
+ "wave-edge-drift": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13927
+ "angle-edge": boundaryRuntimeMetrics("angle", "medium", "6rem + 2px"),
13928
+ "angle-edge-subtle": boundaryRuntimeMetrics("angle", "compact", "4.5rem + 2px"),
13929
+ "angle-edge-steep": boundaryRuntimeMetrics("angle", "large", "7rem + 2px")
13930
+ };
13931
+ function boundaryRuntimeMetricsForTransition(transition) {
13932
+ return sectionBoundaryRuntimeMetricsByTransition[transition];
13933
+ }
13906
13934
  const noneBoundaryOption = {
13907
13935
  id: asBoundaryOptionId("break:none"),
13908
13936
  label: "None",
@@ -14058,12 +14086,12 @@ function validateUniquePageDesignPins(intent, ctx) {
14058
14086
  label: "block Look pin"
14059
14087
  });
14060
14088
  addDuplicateStringIssues(ctx, {
14061
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
14089
+ values: intent.boundaryPins.map((pin) => boundaryKey$1(pin.previousBlockId, pin.nextBlockId)),
14062
14090
  path: ["boundaryPins"],
14063
14091
  label: "boundary pin"
14064
14092
  });
14065
14093
  }
14066
- function boundaryKey(previousBlockId, nextBlockId) {
14094
+ function boundaryKey$1(previousBlockId, nextBlockId) {
14067
14095
  return makeBoundaryId(previousBlockId, nextBlockId);
14068
14096
  }
14069
14097
  //#endregion
@@ -14582,7 +14610,7 @@ const overlayLogoAccommodations = [
14582
14610
  * optional nested styling fields that would otherwise leak from another Look.
14583
14611
  */
14584
14612
  function baseHeader(theme) {
14585
- const { navLinkStyle: _navLinkStyle, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
14613
+ const { navLinkStyle: _navLinkStyle, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
14586
14614
  return {
14587
14615
  ...header,
14588
14616
  navContainer: {
@@ -14655,12 +14683,12 @@ const headerStyleCatalog = defineExactCatalog()([
14655
14683
  },
14656
14684
  {
14657
14685
  id: asHeaderStyleId("fine-line"),
14658
- label: "Fine Line",
14659
- description: "Light surface with a crisp lower rule and underline hover.",
14686
+ label: "Seamless",
14687
+ description: "Borderless surface with underline hover for a quieter page transition.",
14660
14688
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14661
14689
  navInteraction: "underline-grow",
14662
- surface: "bordered",
14663
- defaultDepth: "line",
14690
+ surface: "neutral",
14691
+ defaultDepth: "none",
14664
14692
  navTypography: "plain",
14665
14693
  moods: [
14666
14694
  "calm",
@@ -18264,6 +18292,13 @@ function toSiteChromeBackgroundColorTokens(tokenNames) {
18264
18292
  return token ? [token] : [];
18265
18293
  });
18266
18294
  }
18295
+ function mergeHeaderNavTypographyPreference(style, preferences) {
18296
+ return preferences.typography === "inherit" && preferences.fontSize === "inherit" ? style : {
18297
+ ...style,
18298
+ ...preferences.typography === "inherit" ? {} : { typography: preferences.typography },
18299
+ ...preferences.fontSize === "inherit" ? {} : { textSize: preferences.fontSize }
18300
+ };
18301
+ }
18267
18302
  //#endregion
18268
18303
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
18269
18304
  const themeTokenRecipeOptions = {
@@ -34428,6 +34463,7 @@ const eventListingBlockDefinition = {
34428
34463
  } },
34429
34464
  seeAllUrl: { $bind: {
34430
34465
  from: "content.seeAllUrl",
34466
+ fallback: "",
34431
34467
  transforms: [{ id: "links.resolve" }]
34432
34468
  } },
34433
34469
  loadMoreText: { $bind: {
@@ -34764,6 +34800,7 @@ const eventCalendarLayout = [styledSection({
34764
34800
  } },
34765
34801
  seeAllUrl: { $bind: {
34766
34802
  from: "content.seeAllUrl",
34803
+ fallback: "",
34767
34804
  transforms: [{ id: "links.resolve" }]
34768
34805
  } },
34769
34806
  loadMoreText: { $bind: {
@@ -42082,15 +42119,15 @@ function Grid({ as: Comp = "div", cols = {
42082
42119
  }
42083
42120
  //#endregion
42084
42121
  //#region ../blocks/src/system/runtime/nodes/layout.tsx
42085
- const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
42122
+ const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
42086
42123
  ...props,
42087
42124
  allowOverflow
42088
42125
  });
42089
- const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
42090
- const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
42091
- const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
42092
- const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
42093
- const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
42126
+ const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
42127
+ const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
42128
+ const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
42129
+ const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
42130
+ const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
42094
42131
  //#endregion
42095
42132
  //#region ../path-utils/src/index.ts
42096
42133
  const PATH_SEPARATOR_REGEX$1 = /\./g;
@@ -49811,6 +49848,7 @@ function applyTransformsAndFallback(value, binding, context) {
49811
49848
  viewModel: context.viewModel
49812
49849
  }, transforms);
49813
49850
  if (binding.transforms && binding.transforms.length > 0 && transformed === null) {
49851
+ if (binding.fallback !== void 0) return binding.fallback;
49814
49852
  if (process.env.NODE_ENV === "development") console.warn("[block-system] Transform returned null for binding", {
49815
49853
  bindingFrom: binding.from,
49816
49854
  transforms: binding.transforms?.map((t) => t.id)
@@ -51824,7 +51862,7 @@ function generateHeaderRootStyles(header, themeId, tokens, _theme) {
51824
51862
  }
51825
51863
  }
51826
51864
  if (header.positioning === "sticky" || header.positioning === "fixed") {
51827
- const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "sm");
51865
+ const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
51828
51866
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
51829
51867
  }
51830
51868
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
@@ -51907,15 +51945,19 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
51907
51945
  * legacy navStyle, navWeight, navColor, and navEffects settings.
51908
51946
  */
51909
51947
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
51948
+ const navPreferences = {
51949
+ typography: header.navTypography ?? "inherit",
51950
+ fontSize: header.navTextSize ?? "inherit"
51951
+ };
51910
51952
  if (header.navLinkStyle) return generateNavLinkCSS({
51911
51953
  themeId,
51912
51954
  tokens,
51913
51955
  theme,
51914
- style: contrastTreatment || navTextSize ? {
51956
+ style: mergeHeaderNavTypographyPreference(contrastTreatment || navTextSize ? {
51915
51957
  ...header.navLinkStyle,
51916
51958
  ...contrastTreatment ? { contrastTreatment } : {},
51917
51959
  ...navTextSize ? { textSize: navTextSize } : {}
51918
- } : header.navLinkStyle,
51960
+ } : header.navLinkStyle, navPreferences),
51919
51961
  className: "header-nav-link"
51920
51962
  });
51921
51963
  const navStyle = header.navStyle ?? "minimal";
@@ -51987,7 +52029,7 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
51987
52029
  themeId,
51988
52030
  tokens,
51989
52031
  theme,
51990
- style: mergedStyle,
52032
+ style: mergeHeaderNavTypographyPreference(mergedStyle, navPreferences),
51991
52033
  className: "header-nav-link"
51992
52034
  });
51993
52035
  }
@@ -52378,6 +52420,9 @@ const boldWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='htt
52378
52420
  const driftWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V39C115 31 205 54 340 48C505 41 610 16 760 33C920 51 1015 64 1160 44C1280 27 1375 35 1440 50V72H0Z' fill='white'/></svg>");
52379
52421
  function generateSiteStyleTransitionCss(themeId) {
52380
52422
  const selector = `:where([data-theme-scope="${themeId}"])`;
52423
+ const compactBoundaryHeight = requiredBoundaryHeightCss("wave-edge-gentle");
52424
+ const mediumBoundaryHeight = requiredBoundaryHeightCss("wave-edge");
52425
+ const largeBoundaryHeight = requiredBoundaryHeightCss("wave-edge-bold");
52381
52426
  return `${selector} [data-style-group^='site-style-transition-'] {
52382
52427
  position: relative;
52383
52428
  z-index: 2;
@@ -52385,23 +52430,48 @@ function generateSiteStyleTransitionCss(themeId) {
52385
52430
  --site-style-transition-to: rgb(var(--tb-background));
52386
52431
  }
52387
52432
 
52388
- ${selector} [data-block-transition][data-style-group^='site-style-transition-'] {
52433
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-'] {
52389
52434
  position: relative;
52390
52435
  z-index: 3;
52391
52436
  height: 0;
52392
52437
  pointer-events: none;
52438
+ --site-style-boundary-height: ${mediumBoundaryHeight};
52439
+ }
52440
+
52441
+ ${selector} [data-block][data-site-style-boundary-before] > :where([data-slot='section']) {
52442
+ padding-top: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-before-reserve, 0rem));
52443
+ }
52444
+
52445
+ ${selector} [data-block][data-site-style-boundary-after] > :where([data-slot='section']) {
52446
+ padding-bottom: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-after-reserve, 0rem));
52447
+ }
52448
+
52449
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::before,
52450
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::before,
52451
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::before {
52452
+ content: '';
52453
+ position: absolute;
52454
+ left: 0;
52455
+ right: 0;
52456
+ top: 0;
52457
+ transform: translateY(-50%);
52458
+ z-index: 0;
52459
+ height: var(--site-style-boundary-height);
52460
+ background: var(--site-style-transition-from);
52461
+ pointer-events: none;
52393
52462
  }
52394
52463
 
52395
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after,
52396
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after,
52397
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
52464
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after,
52465
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after,
52466
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
52398
52467
  content: '';
52399
52468
  position: absolute;
52400
52469
  left: 0;
52401
52470
  right: 0;
52402
- bottom: -2px;
52471
+ top: 0;
52472
+ transform: translateY(-50%);
52403
52473
  z-index: 1;
52404
- height: calc(6rem + 2px);
52474
+ height: var(--site-style-boundary-height);
52405
52475
  pointer-events: none;
52406
52476
  }
52407
52477
 
@@ -52439,7 +52509,7 @@ ${selector} [data-style-group$='-to-brand-depth-band'] {
52439
52509
  --site-style-transition-to: rgb(var(--tb-primary-800));
52440
52510
  }
52441
52511
 
52442
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
52512
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
52443
52513
  /* Fallback for browsers without color-mix(). */
52444
52514
  background: linear-gradient(
52445
52515
  to bottom,
@@ -52455,30 +52525,37 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-sof
52455
52525
  );
52456
52526
  }
52457
52527
 
52458
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-long-']::after {
52459
- height: 10rem;
52528
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-long-'] {
52529
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-long")};
52460
52530
  }
52461
52531
 
52462
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-expansive-']::after {
52463
- height: 14rem;
52532
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-expansive-'] {
52533
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-expansive")};
52464
52534
  }
52465
52535
 
52466
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after {
52536
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after {
52537
+ height: calc(var(--site-style-boundary-height) + 2px);
52467
52538
  background: var(--site-style-transition-to);
52468
52539
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
52469
52540
  }
52470
52541
 
52471
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
52472
- height: calc(4.5rem + 2px);
52542
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-'] {
52543
+ --site-style-boundary-height: ${compactBoundaryHeight};
52544
+ }
52545
+
52546
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
52473
52547
  clip-path: polygon(0 34%, 100% 18%, 100% 100%, 0 100%);
52474
52548
  }
52475
52549
 
52476
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-steep-']::after {
52477
- height: calc(7rem + 2px);
52550
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-'] {
52551
+ --site-style-boundary-height: ${largeBoundaryHeight};
52552
+ }
52553
+
52554
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-']::after {
52478
52555
  clip-path: polygon(0 54%, 100% 0%, 100% 100%, 0 100%);
52479
52556
  }
52480
52557
 
52481
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after {
52558
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after {
52482
52559
  background: var(--site-style-transition-to);
52483
52560
  mask-image: url("${classicWaveTransitionMask}");
52484
52561
  mask-repeat: no-repeat;
@@ -52488,28 +52565,39 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-wav
52488
52565
  -webkit-mask-size: 100% 100%;
52489
52566
  }
52490
52567
 
52491
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
52568
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
52492
52569
  mask-image: url("${balancedWaveTransitionMask}");
52493
52570
  -webkit-mask-image: url("${balancedWaveTransitionMask}");
52494
52571
  }
52495
52572
 
52496
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
52497
- height: calc(4.5rem + 2px);
52573
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-'] {
52574
+ --site-style-boundary-height: ${compactBoundaryHeight};
52575
+ }
52576
+
52577
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
52498
52578
  mask-image: url("${gentleWaveTransitionMask}");
52499
52579
  -webkit-mask-image: url("${gentleWaveTransitionMask}");
52500
52580
  }
52501
52581
 
52502
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-bold-']::after {
52503
- height: calc(7rem + 2px);
52582
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-'] {
52583
+ --site-style-boundary-height: ${largeBoundaryHeight};
52584
+ }
52585
+
52586
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-']::after {
52504
52587
  mask-image: url("${boldWaveTransitionMask}");
52505
52588
  -webkit-mask-image: url("${boldWaveTransitionMask}");
52506
52589
  }
52507
52590
 
52508
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-drift-']::after {
52591
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-drift-']::after {
52509
52592
  mask-image: url("${driftWaveTransitionMask}");
52510
52593
  -webkit-mask-image: url("${driftWaveTransitionMask}");
52511
52594
  }`;
52512
52595
  }
52596
+ function requiredBoundaryHeightCss(transition) {
52597
+ const metrics = boundaryRuntimeMetricsForTransition(transition);
52598
+ if (!metrics) throw new Error(`Missing boundary runtime metrics for ${transition}`);
52599
+ return metrics.heightCss;
52600
+ }
52513
52601
  function svgDataUrl(svg) {
52514
52602
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
52515
52603
  }
@@ -54632,13 +54720,15 @@ function sourceLabel(source) {
54632
54720
  }
54633
54721
  //#endregion
54634
54722
  //#region ../blocks/src/PageRenderer.tsx
54635
- function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
54723
+ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
54636
54724
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
54637
54725
  dataContext?.imageResolveContext,
54638
54726
  dataContext?.mediaAssets,
54639
54727
  dataContext?.siteId,
54640
54728
  dataContext?.supabaseUrl
54641
54729
  ]);
54730
+ const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
54731
+ const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
54642
54732
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
54643
54733
  className: "rb-p-6 rb-caption",
54644
54734
  style: textColorStyle("mutedText"),
@@ -54650,6 +54740,17 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54650
54740
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
54651
54741
  const blockPosition = pageBlockPosition(index, page.blocks.length);
54652
54742
  const blockKey = block.id ?? `${block.kind}-${index}`;
54743
+ const previousBlock = page.blocks[index - 1] ?? null;
54744
+ const nextBlock = page.blocks[index + 1] ?? null;
54745
+ const boundaryBefore = boundaryBetweenBlocks(previousBlock, block, boundaryByAdjacentBlockIds);
54746
+ const boundaryAfter = boundaryBetweenBlocks(block, nextBlock, boundaryByAdjacentBlockIds);
54747
+ const boundaryElement = renderBoundaryAfterBlock({
54748
+ block,
54749
+ nextBlock,
54750
+ blockKey,
54751
+ boundaryByAdjacentBlockIds,
54752
+ wrapBoundary
54753
+ });
54653
54754
  const cleanKind = block.kind.replace(/^block\./, "");
54654
54755
  const definition = getBlockDefinition(block.kind);
54655
54756
  const managesOwnWrapper = definition?.manifest.behaviours?.managesOwnWrapper;
@@ -54672,10 +54773,18 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54672
54773
  imageResolveContext,
54673
54774
  previewAuthoring
54674
54775
  };
54675
- if (!shouldUseWrapper) return /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, blockKey);
54776
+ if (!shouldUseWrapper) {
54777
+ const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
54778
+ return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
54779
+ }
54676
54780
  const wrapperClassName = [`block-${cleanKind}`, wrapBlock ? "group relative" : null].filter(Boolean).join(" ");
54677
54781
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
54678
54782
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
54783
+ const transitionStyle = transitionCssVarsStyle(renderableContent);
54784
+ const blockStyle = mergeStyleObjects(transitionStyle, boundaryReserveCssVarsStyle({
54785
+ before: boundaryBefore,
54786
+ after: boundaryAfter
54787
+ }));
54679
54788
  const blockElement = /* @__PURE__ */ jsx("div", {
54680
54789
  className: wrapperClassName,
54681
54790
  "data-block": cleanKind,
@@ -54685,21 +54794,92 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54685
54794
  "data-block-variant": variantKey ?? void 0,
54686
54795
  "data-block-look": blockLook,
54687
54796
  "data-page-block-position": blockPosition,
54797
+ "data-site-style-boundary-before": boundaryBefore?.metrics.size,
54798
+ "data-site-style-boundary-after": boundaryAfter?.metrics.size,
54688
54799
  "data-style-group": styleGroup,
54800
+ style: blockStyle,
54689
54801
  children: /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps })
54690
54802
  }, blockKey);
54691
- if (!isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
54803
+ if (boundaryElement) return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, boundaryElement] }, blockKey);
54804
+ if (usesRuntimeBoundaries || !isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
54692
54805
  return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, /* @__PURE__ */ jsx("div", {
54693
54806
  "aria-hidden": "true",
54694
54807
  "data-block-transition": "",
54695
54808
  "data-block-transition-for": block.id ?? blockKey,
54696
- "data-style-group": styleGroup
54809
+ "data-style-group": styleGroup,
54810
+ style: transitionStyle
54697
54811
  })] }, blockKey);
54698
54812
  }) });
54699
54813
  }
54700
54814
  function isSiteStyleTransitionStyleGroup(value) {
54701
54815
  return value?.startsWith("site-style-transition-") === true;
54702
54816
  }
54817
+ function boundaryMapForAdjacentBlockIds(boundaries) {
54818
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
54819
+ }
54820
+ function boundaryKey(previousBlockId, nextBlockId) {
54821
+ return `${previousBlockId}\u0000${nextBlockId}`;
54822
+ }
54823
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
54824
+ const previousBlockId = previousBlock?.id ?? null;
54825
+ const nextBlockId = nextBlock?.id ?? null;
54826
+ if (!previousBlockId || !nextBlockId) return null;
54827
+ return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
54828
+ }
54829
+ function renderBoundaryAfterBlock(input) {
54830
+ const previousBlockId = input.block.id;
54831
+ const nextBlockId = input.nextBlock?.id ?? null;
54832
+ if (!previousBlockId || !nextBlockId) return null;
54833
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
54834
+ if (!boundary) return null;
54835
+ const rendered = /* @__PURE__ */ jsx("div", {
54836
+ "aria-hidden": "true",
54837
+ "data-block-boundary": "",
54838
+ "data-boundary-id": boundary.boundaryId,
54839
+ "data-boundary-previous-block-id": boundary.previousBlockId,
54840
+ "data-boundary-next-block-id": boundary.nextBlockId,
54841
+ "data-style-group": boundary.styleGroup,
54842
+ style: boundaryCssVarsStyle(boundary)
54843
+ }, `${input.blockKey}:boundary`);
54844
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
54845
+ }
54846
+ function boundaryCssVarsStyle(boundary) {
54847
+ return {
54848
+ "--site-style-transition-from": boundary.cssVars.from,
54849
+ "--site-style-transition-to": boundary.cssVars.to
54850
+ };
54851
+ }
54852
+ function boundaryReserveCssVarsStyle(input) {
54853
+ const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
54854
+ const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
54855
+ if (!before && !after) return void 0;
54856
+ return {
54857
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
54858
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
54859
+ };
54860
+ }
54861
+ function boundaryReserveValueForTreatment(boundary) {
54862
+ return boundary.metrics.reserveCss;
54863
+ }
54864
+ function transitionCssVarsStyle(content) {
54865
+ const transitionStyles = isObjectRecord(content._transitionStyles) ? content._transitionStyles : null;
54866
+ const cssVars = isObjectRecord(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
54867
+ const from = typeof cssVars?.from === "string" ? cssVars.from : null;
54868
+ const to = typeof cssVars?.to === "string" ? cssVars.to : null;
54869
+ if (!from && !to) return void 0;
54870
+ return {
54871
+ ...from ? { "--site-style-transition-from": from } : {},
54872
+ ...to ? { "--site-style-transition-to": to } : {}
54873
+ };
54874
+ }
54875
+ function mergeStyleObjects(left, right) {
54876
+ if (!left) return right;
54877
+ if (!right) return left;
54878
+ return {
54879
+ ...left,
54880
+ ...right
54881
+ };
54882
+ }
54703
54883
  function pageBlockPosition(index, blockCount) {
54704
54884
  if (blockCount <= 1) return "only";
54705
54885
  if (index === 0) return "first";
@@ -56611,52 +56791,53 @@ const containerResponsiveThemeCss = `/*
56611
56791
 
56612
56792
  /* Semantic spacing tokens (replaces Tailwind maps in src/system/spacing.ts) */
56613
56793
  .rb-section-pad-none {
56614
- padding-top: 0;
56615
- padding-bottom: 0;
56794
+ --rb-section-pad-y: 0rem;
56795
+ padding-top: var(--rb-section-pad-y);
56796
+ padding-bottom: var(--rb-section-pad-y);
56616
56797
  }
56617
56798
  .rb-section-pad-compact {
56618
- padding-top: 1.5rem;
56619
- padding-bottom: 1.5rem;
56799
+ --rb-section-pad-y: 1.5rem;
56800
+ padding-top: var(--rb-section-pad-y);
56801
+ padding-bottom: var(--rb-section-pad-y);
56620
56802
  }
56621
56803
  .rb-section-pad-cozy {
56622
- padding-top: 2.5rem;
56623
- padding-bottom: 2.5rem;
56804
+ --rb-section-pad-y: 2.5rem;
56805
+ padding-top: var(--rb-section-pad-y);
56806
+ padding-bottom: var(--rb-section-pad-y);
56624
56807
  }
56625
56808
  .rb-section-pad-medium {
56626
- padding-top: 3rem;
56627
- padding-bottom: 3rem;
56809
+ --rb-section-pad-y: 3rem;
56810
+ padding-top: var(--rb-section-pad-y);
56811
+ padding-bottom: var(--rb-section-pad-y);
56628
56812
  }
56629
56813
  .rb-section-pad-comfortable {
56630
- padding-top: 4rem;
56631
- padding-bottom: 4rem;
56814
+ --rb-section-pad-y: 4rem;
56815
+ padding-top: var(--rb-section-pad-y);
56816
+ padding-bottom: var(--rb-section-pad-y);
56632
56817
  }
56633
56818
  .rb-section-pad-spacious {
56634
- padding-top: 5rem;
56635
- padding-bottom: 5rem;
56819
+ --rb-section-pad-y: 5rem;
56820
+ padding-top: var(--rb-section-pad-y);
56821
+ padding-bottom: var(--rb-section-pad-y);
56636
56822
  }
56637
56823
 
56638
56824
  @container rb-site (min-width: 640px) {
56639
56825
 
56640
56826
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56641
56827
  .rb-section-pad-compact {
56642
- padding-top: 2rem;
56643
- padding-bottom: 2rem;
56828
+ --rb-section-pad-y: 2rem;
56644
56829
  }
56645
56830
  .rb-section-pad-cozy {
56646
- padding-top: 3.5rem;
56647
- padding-bottom: 3.5rem;
56831
+ --rb-section-pad-y: 3.5rem;
56648
56832
  }
56649
56833
  .rb-section-pad-medium {
56650
- padding-top: 4rem;
56651
- padding-bottom: 4rem;
56834
+ --rb-section-pad-y: 4rem;
56652
56835
  }
56653
56836
  .rb-section-pad-comfortable {
56654
- padding-top: 5rem;
56655
- padding-bottom: 5rem;
56837
+ --rb-section-pad-y: 5rem;
56656
56838
  }
56657
56839
  .rb-section-pad-spacious {
56658
- padding-top: 7rem;
56659
- padding-bottom: 7rem;
56840
+ --rb-section-pad-y: 7rem;
56660
56841
  }
56661
56842
  }
56662
56843
 
@@ -58046,30 +58227,122 @@ const containerResponsiveThemeCss = `/*
58046
58227
  :where(.theme-scope) .header-logo-text {
58047
58228
  font-size: 1.125rem; /* matches rb-text-lg */
58048
58229
  line-height: 1.75rem;
58230
+ margin-inline: -0.18em;
58231
+ padding-inline: 0.18em;
58049
58232
  transition: font-size 300ms var(--motion-ease, ease);
58050
58233
  }
58051
58234
 
58052
- /* Mobile: reduce site title size (~30%) to keep header compact */
58235
+ /* Centered variant uses larger title */
58236
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
58237
+ font-size: 1.25rem; /* matches rb-text-xl */
58238
+ line-height: 1.75rem;
58239
+ }
58240
+
58241
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
58242
+ font-size: 0.95rem;
58243
+ line-height: 1.5rem;
58244
+ }
58245
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
58246
+ font-size: 1.125rem;
58247
+ line-height: 1.75rem;
58248
+ }
58249
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
58250
+ font-size: 1.35rem;
58251
+ line-height: 1.9rem;
58252
+ }
58253
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
58254
+ font-size: 1.75rem;
58255
+ line-height: 2.25rem;
58256
+ }
58257
+
58258
+ :where(.theme-scope)
58259
+ .header-variant-centered
58260
+ .header-logo-size-compact
58261
+ .header-logo-text {
58262
+ font-size: 1.125rem;
58263
+ line-height: 1.75rem;
58264
+ }
58265
+ :where(.theme-scope)
58266
+ .header-variant-centered
58267
+ .header-logo-size-standard
58268
+ .header-logo-text {
58269
+ font-size: 1.25rem;
58270
+ line-height: 1.75rem;
58271
+ }
58272
+ :where(.theme-scope)
58273
+ .header-variant-centered
58274
+ .header-logo-size-generous
58275
+ .header-logo-text {
58276
+ font-size: 1.6rem;
58277
+ line-height: 2rem;
58278
+ }
58279
+ :where(.theme-scope)
58280
+ .header-variant-centered
58281
+ .header-logo-size-display
58282
+ .header-logo-text {
58283
+ font-size: 2.1rem;
58284
+ line-height: 2.5rem;
58285
+ }
58286
+
58287
+ /* Mobile: reduce site title size to keep header compact */
58053
58288
  @container rb-site (max-width: 767px) {
58054
58289
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
58055
- :where(.theme-scope) .header-logo-text {
58290
+ :where(.theme-scope) .header-logo-text,
58291
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
58056
58292
  font-size: 0.8rem;
58057
58293
  line-height: 1.25rem;
58058
58294
  }
58059
58295
 
58060
- :where(.theme-scope) .header-variant-centered .header-logo-text {
58296
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
58297
+ font-size: 0.75rem;
58298
+ line-height: 1.15rem;
58299
+ }
58300
+
58301
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
58302
+ font-size: 1rem;
58303
+ line-height: 1.4rem;
58304
+ }
58305
+
58306
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
58307
+ font-size: 1.25rem;
58308
+ line-height: 1.65rem;
58309
+ }
58310
+
58311
+ :where(.theme-scope) .header-variant-centered .header-logo-text,
58312
+ :where(.theme-scope)
58313
+ .header-variant-centered
58314
+ .header-logo-size-standard
58315
+ .header-logo-text {
58061
58316
  font-size: 0.875rem;
58062
58317
  line-height: 1.25rem;
58063
58318
  }
58319
+
58320
+ :where(.theme-scope)
58321
+ .header-variant-centered
58322
+ .header-logo-size-compact
58323
+ .header-logo-text {
58324
+ font-size: 0.8rem;
58325
+ line-height: 1.2rem;
58326
+ }
58327
+
58328
+ :where(.theme-scope)
58329
+ .header-variant-centered
58330
+ .header-logo-size-generous
58331
+ .header-logo-text {
58332
+ font-size: 1.125rem;
58333
+ line-height: 1.5rem;
58334
+ }
58335
+
58336
+ :where(.theme-scope)
58337
+ .header-variant-centered
58338
+ .header-logo-size-display
58339
+ .header-logo-text {
58340
+ font-size: 1.35rem;
58341
+ line-height: 1.75rem;
58342
+ }
58064
58343
  }
58065
58344
  }
58066
58345
 
58067
- /* Centered variant uses larger title */
58068
- :where(.theme-scope) .header-variant-centered .header-logo-text {
58069
- font-size: 1.25rem; /* matches rb-text-xl */
58070
- line-height: 1.75rem;
58071
- }
58072
-
58073
58346
  /* =================================================================
58074
58347
  Shrink on Scroll - Logo & Title
58075
58348
  ================================================================= */
@@ -66410,7 +66683,7 @@ function toPageHydrationBootstrapConfig(props) {
66410
66683
  mediaAssets: props.mediaAssets
66411
66684
  };
66412
66685
  }
66413
- function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolvedData, bookingOfferingPresets, routeMap, pagesByIdentifier, entriesByIdentifier, wrapBlock, registry, usePlaceholders = false, blockOverrides, sdkConfig, customBlocks, supabaseUrl, mediaAssets, apiBaseUrl, portalToken, previewToken, dataContext, themeRuntime = defaultPageThemeRuntime }) {
66686
+ function PageContent({ page, runtimeBoundaries, theme, themeTokens: providedTokens, siteId, resolvedData, bookingOfferingPresets, routeMap, pagesByIdentifier, entriesByIdentifier, wrapBlock, registry, usePlaceholders = false, blockOverrides, sdkConfig, customBlocks, supabaseUrl, mediaAssets, apiBaseUrl, portalToken, previewToken, dataContext, themeRuntime = defaultPageThemeRuntime }) {
66414
66687
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
66415
66688
  return renderWithSdkThemeRuntime({
66416
66689
  themeRuntime,
@@ -66418,6 +66691,7 @@ function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolve
66418
66691
  children: /* @__PURE__ */ jsx(PageRenderer, {
66419
66692
  theme,
66420
66693
  page,
66694
+ runtimeBoundaries,
66421
66695
  themeTokens: sdkConfig?.theme?.palette ? {
66422
66696
  ...baseTokens,
66423
66697
  palette: {
@@ -67934,7 +68208,7 @@ z$1.object({ acceptExtraSiteCharge: z$1.boolean().optional() });
67934
68208
  //#region ../surfaces/src/index.ts
67935
68209
  const SURFACE_IDS = ["core", "macadamia"];
67936
68210
  const DEFAULT_SURFACE_ID = "core";
67937
- SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID);
68211
+ [...SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID)];
67938
68212
  const CANONICAL_REFUND_PLANNER_ERROR_CODES = [
67939
68213
  ...[
67940
68214
  "already_refunded",
@@ -67981,6 +68255,7 @@ const VERTICAL_IDS = [
67981
68255
  "training_provider",
67982
68256
  "retreat_centre",
67983
68257
  "music_school",
68258
+ "voice_singing",
67984
68259
  "performing_arts_school",
67985
68260
  "community_wellbeing",
67986
68261
  "venue_event_space"
@@ -68033,6 +68308,11 @@ const VERTICAL_BOOKING_PRESETS = [
68033
68308
  preset("music_school.terms", "music_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date group courses."),
68034
68309
  preset("music_school.workshops", "music_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
68035
68310
  preset("music_school.performances", "music_school", "performance", "Performance", "Performances", "Concerts, recitals, showcases, or ticketed performances."),
68311
+ preset("voice_singing.lessons", "voice_singing", "appointment", "Voice session", "Voice sessions", "One-to-one singing lessons, voice coaching, or private practice sessions."),
68312
+ preset("voice_singing.classes", "voice_singing", "class", "Ongoing weekly session", "Ongoing weekly sessions", "Regular choirs, voice circles, community singing, or group practice."),
68313
+ preset("voice_singing.terms", "voice_singing", "course", "Singing term", "Singing terms", "Multi-week choir terms, voice courses, or fixed-date group programmes."),
68314
+ preset("voice_singing.workshops", "voice_singing", "workshop", "Workshop", "Workshops", "One-off singing workshops, voice journeys, or devotional singing sessions."),
68315
+ preset("voice_singing.performances", "voice_singing", "performance", "Performance", "Performances", "Choir concerts, sharing events, recitals, or community performances."),
68036
68316
  preset("performing_arts_school.classes", "performing_arts_school", "class", "Class", "Classes", "Regular group classes, rehearsals, or weekly sessions."),
68037
68317
  preset("performing_arts_school.terms", "performing_arts_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date course groups."),
68038
68318
  preset("performing_arts_school.workshops", "performing_arts_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),