@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
@@ -11221,6 +11221,7 @@ const themeV2RuntimeStyleFieldNames = [
11221
11221
  "_sectionStyles",
11222
11222
  "_containerStyles",
11223
11223
  "_cardStyles",
11224
+ "_transitionStyles",
11224
11225
  "styleGroup"
11225
11226
  ];
11226
11227
  const themeV2BlockSpecificRawStyleFieldNames = [
@@ -11969,6 +11970,8 @@ const headerSchema = z$1.object({
11969
11970
  navStyle: headerNavStyle,
11970
11971
  navColor: themeColorTokenSchema.nullable().optional(),
11971
11972
  navWeight: navFontWeight.default("medium"),
11973
+ navTypography: z$1.enum(["body", "heading"]).optional(),
11974
+ navTextSize: navLinkStyleSchema.shape.textSize,
11972
11975
  container: headerContainerSchema,
11973
11976
  border: headerBorderSchema,
11974
11977
  shadow: componentShadowSchema.optional(),
@@ -13574,6 +13577,31 @@ function uniqueStrings(values) {
13574
13577
  }
13575
13578
  //#endregion
13576
13579
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
13580
+ function boundaryRuntimeMetrics(family, size, heightExpression) {
13581
+ return {
13582
+ family,
13583
+ size,
13584
+ heightCss: heightExpression.includes(" ") ? `calc(${heightExpression})` : heightExpression,
13585
+ reserveCss: `calc((${heightExpression}) / 2)`
13586
+ };
13587
+ }
13588
+ const sectionBoundaryRuntimeMetricsByTransition = {
13589
+ none: null,
13590
+ "soft-fade-short": boundaryRuntimeMetrics("gradient", "medium", "6rem + 2px"),
13591
+ "soft-fade-long": boundaryRuntimeMetrics("gradient", "spacious", "10rem"),
13592
+ "soft-fade-expansive": boundaryRuntimeMetrics("gradient", "expansive", "14rem"),
13593
+ "wave-edge": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13594
+ "wave-edge-balanced": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13595
+ "wave-edge-gentle": boundaryRuntimeMetrics("wave", "compact", "4.5rem + 2px"),
13596
+ "wave-edge-bold": boundaryRuntimeMetrics("wave", "large", "7rem + 2px"),
13597
+ "wave-edge-drift": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13598
+ "angle-edge": boundaryRuntimeMetrics("angle", "medium", "6rem + 2px"),
13599
+ "angle-edge-subtle": boundaryRuntimeMetrics("angle", "compact", "4.5rem + 2px"),
13600
+ "angle-edge-steep": boundaryRuntimeMetrics("angle", "large", "7rem + 2px")
13601
+ };
13602
+ function boundaryRuntimeMetricsForTransition(transition) {
13603
+ return sectionBoundaryRuntimeMetricsByTransition[transition];
13604
+ }
13577
13605
  const noneBoundaryOption = {
13578
13606
  id: asBoundaryOptionId("break:none"),
13579
13607
  label: "None",
@@ -13735,12 +13763,12 @@ function validateUniquePageDesignPins(intent, ctx) {
13735
13763
  label: "block Look pin"
13736
13764
  });
13737
13765
  addDuplicateStringIssues(ctx, {
13738
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
13766
+ values: intent.boundaryPins.map((pin) => boundaryKey$1(pin.previousBlockId, pin.nextBlockId)),
13739
13767
  path: ["boundaryPins"],
13740
13768
  label: "boundary pin"
13741
13769
  });
13742
13770
  }
13743
- function boundaryKey(previousBlockId, nextBlockId) {
13771
+ function boundaryKey$1(previousBlockId, nextBlockId) {
13744
13772
  return makeBoundaryId(previousBlockId, nextBlockId);
13745
13773
  }
13746
13774
  //#endregion
@@ -14261,7 +14289,7 @@ const overlayLogoAccommodations = [
14261
14289
  * optional nested styling fields that would otherwise leak from another Look.
14262
14290
  */
14263
14291
  function baseHeader(theme) {
14264
- const { navLinkStyle: _navLinkStyle, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
14292
+ 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;
14265
14293
  return {
14266
14294
  ...header,
14267
14295
  navContainer: {
@@ -14334,12 +14362,12 @@ const headerStyleCatalog = defineExactCatalog()([
14334
14362
  },
14335
14363
  {
14336
14364
  id: asHeaderStyleId("fine-line"),
14337
- label: "Fine Line",
14338
- description: "Light surface with a crisp lower rule and underline hover.",
14365
+ label: "Seamless",
14366
+ description: "Borderless surface with underline hover for a quieter page transition.",
14339
14367
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14340
14368
  navInteraction: "underline-grow",
14341
- surface: "bordered",
14342
- defaultDepth: "line",
14369
+ surface: "neutral",
14370
+ defaultDepth: "none",
14343
14371
  navTypography: "plain",
14344
14372
  moods: [
14345
14373
  "calm",
@@ -17950,6 +17978,15 @@ function toSiteChromeBackgroundColorTokens(tokenNames) {
17950
17978
  });
17951
17979
  }
17952
17980
  //#endregion
17981
+ //#region ../theme-core/src/site-styles/siteChromeNavPreferences.ts
17982
+ function mergeHeaderNavTypographyPreference(style, preferences) {
17983
+ return preferences.typography === "inherit" && preferences.fontSize === "inherit" ? style : {
17984
+ ...style,
17985
+ ...preferences.typography === "inherit" ? {} : { typography: preferences.typography },
17986
+ ...preferences.fontSize === "inherit" ? {} : { textSize: preferences.fontSize }
17987
+ };
17988
+ }
17989
+ //#endregion
17953
17990
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
17954
17991
  const themeTokenRecipeOptions = {
17955
17992
  palette: [
@@ -33869,6 +33906,7 @@ const eventListingBlockDefinition = {
33869
33906
  } },
33870
33907
  seeAllUrl: { $bind: {
33871
33908
  from: "content.seeAllUrl",
33909
+ fallback: "",
33872
33910
  transforms: [{ id: "links.resolve" }]
33873
33911
  } },
33874
33912
  loadMoreText: { $bind: {
@@ -34205,6 +34243,7 @@ const eventCalendarLayout = [styledSection({
34205
34243
  } },
34206
34244
  seeAllUrl: { $bind: {
34207
34245
  from: "content.seeAllUrl",
34246
+ fallback: "",
34208
34247
  transforms: [{ id: "links.resolve" }]
34209
34248
  } },
34210
34249
  loadMoreText: { $bind: {
@@ -41664,15 +41703,15 @@ function Grid({ as: Comp = "div", cols = {
41664
41703
  }
41665
41704
  //#endregion
41666
41705
  //#region ../blocks/src/system/runtime/nodes/layout.tsx
41667
- const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
41706
+ const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
41668
41707
  ...props,
41669
41708
  allowOverflow
41670
41709
  });
41671
- const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
41672
- const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
41673
- const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
41674
- const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
41675
- const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
41710
+ const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
41711
+ const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
41712
+ const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
41713
+ const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
41714
+ const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
41676
41715
  //#endregion
41677
41716
  //#region ../path-utils/src/index.ts
41678
41717
  const PATH_SEPARATOR_REGEX$1 = /\./g;
@@ -46920,6 +46959,7 @@ function applyTransformsAndFallback(value, binding, context) {
46920
46959
  viewModel: context.viewModel
46921
46960
  }, transforms);
46922
46961
  if (binding.transforms && binding.transforms.length > 0 && transformed === null) {
46962
+ if (binding.fallback !== void 0) return binding.fallback;
46923
46963
  if (process.env.NODE_ENV === "development") console.warn("[block-system] Transform returned null for binding", {
46924
46964
  bindingFrom: binding.from,
46925
46965
  transforms: binding.transforms?.map((t) => t.id)
@@ -48848,7 +48888,7 @@ function generateHeaderRootStyles(header, themeId, tokens, _theme) {
48848
48888
  }
48849
48889
  }
48850
48890
  if (header.positioning === "sticky" || header.positioning === "fixed") {
48851
- const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "sm");
48891
+ const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
48852
48892
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
48853
48893
  }
48854
48894
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
@@ -48931,15 +48971,19 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
48931
48971
  * legacy navStyle, navWeight, navColor, and navEffects settings.
48932
48972
  */
48933
48973
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
48974
+ const navPreferences = {
48975
+ typography: header.navTypography ?? "inherit",
48976
+ fontSize: header.navTextSize ?? "inherit"
48977
+ };
48934
48978
  if (header.navLinkStyle) return generateNavLinkCSS({
48935
48979
  themeId,
48936
48980
  tokens,
48937
48981
  theme,
48938
- style: contrastTreatment || navTextSize ? {
48982
+ style: mergeHeaderNavTypographyPreference(contrastTreatment || navTextSize ? {
48939
48983
  ...header.navLinkStyle,
48940
48984
  ...contrastTreatment ? { contrastTreatment } : {},
48941
48985
  ...navTextSize ? { textSize: navTextSize } : {}
48942
- } : header.navLinkStyle,
48986
+ } : header.navLinkStyle, navPreferences),
48943
48987
  className: "header-nav-link"
48944
48988
  });
48945
48989
  const navStyle = header.navStyle ?? "minimal";
@@ -49011,7 +49055,7 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
49011
49055
  themeId,
49012
49056
  tokens,
49013
49057
  theme,
49014
- style: mergedStyle,
49058
+ style: mergeHeaderNavTypographyPreference(mergedStyle, navPreferences),
49015
49059
  className: "header-nav-link"
49016
49060
  });
49017
49061
  }
@@ -49402,6 +49446,9 @@ const boldWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='htt
49402
49446
  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>");
49403
49447
  function generateSiteStyleTransitionCss(themeId) {
49404
49448
  const selector = `:where([data-theme-scope="${themeId}"])`;
49449
+ const compactBoundaryHeight = requiredBoundaryHeightCss("wave-edge-gentle");
49450
+ const mediumBoundaryHeight = requiredBoundaryHeightCss("wave-edge");
49451
+ const largeBoundaryHeight = requiredBoundaryHeightCss("wave-edge-bold");
49405
49452
  return `${selector} [data-style-group^='site-style-transition-'] {
49406
49453
  position: relative;
49407
49454
  z-index: 2;
@@ -49409,23 +49456,48 @@ function generateSiteStyleTransitionCss(themeId) {
49409
49456
  --site-style-transition-to: rgb(var(--tb-background));
49410
49457
  }
49411
49458
 
49412
- ${selector} [data-block-transition][data-style-group^='site-style-transition-'] {
49459
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-'] {
49413
49460
  position: relative;
49414
49461
  z-index: 3;
49415
49462
  height: 0;
49416
49463
  pointer-events: none;
49464
+ --site-style-boundary-height: ${mediumBoundaryHeight};
49465
+ }
49466
+
49467
+ ${selector} [data-block][data-site-style-boundary-before] > :where([data-slot='section']) {
49468
+ padding-top: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-before-reserve, 0rem));
49469
+ }
49470
+
49471
+ ${selector} [data-block][data-site-style-boundary-after] > :where([data-slot='section']) {
49472
+ padding-bottom: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-after-reserve, 0rem));
49473
+ }
49474
+
49475
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::before,
49476
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::before,
49477
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::before {
49478
+ content: '';
49479
+ position: absolute;
49480
+ left: 0;
49481
+ right: 0;
49482
+ top: 0;
49483
+ transform: translateY(-50%);
49484
+ z-index: 0;
49485
+ height: var(--site-style-boundary-height);
49486
+ background: var(--site-style-transition-from);
49487
+ pointer-events: none;
49417
49488
  }
49418
49489
 
49419
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after,
49420
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after,
49421
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
49490
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after,
49491
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after,
49492
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
49422
49493
  content: '';
49423
49494
  position: absolute;
49424
49495
  left: 0;
49425
49496
  right: 0;
49426
- bottom: -2px;
49497
+ top: 0;
49498
+ transform: translateY(-50%);
49427
49499
  z-index: 1;
49428
- height: calc(6rem + 2px);
49500
+ height: var(--site-style-boundary-height);
49429
49501
  pointer-events: none;
49430
49502
  }
49431
49503
 
@@ -49463,7 +49535,7 @@ ${selector} [data-style-group$='-to-brand-depth-band'] {
49463
49535
  --site-style-transition-to: rgb(var(--tb-primary-800));
49464
49536
  }
49465
49537
 
49466
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
49538
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
49467
49539
  /* Fallback for browsers without color-mix(). */
49468
49540
  background: linear-gradient(
49469
49541
  to bottom,
@@ -49479,30 +49551,37 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-sof
49479
49551
  );
49480
49552
  }
49481
49553
 
49482
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-long-']::after {
49483
- height: 10rem;
49554
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-long-'] {
49555
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-long")};
49484
49556
  }
49485
49557
 
49486
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-expansive-']::after {
49487
- height: 14rem;
49558
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-expansive-'] {
49559
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-expansive")};
49488
49560
  }
49489
49561
 
49490
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after {
49562
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after {
49563
+ height: calc(var(--site-style-boundary-height) + 2px);
49491
49564
  background: var(--site-style-transition-to);
49492
49565
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
49493
49566
  }
49494
49567
 
49495
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
49496
- height: calc(4.5rem + 2px);
49568
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-'] {
49569
+ --site-style-boundary-height: ${compactBoundaryHeight};
49570
+ }
49571
+
49572
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
49497
49573
  clip-path: polygon(0 34%, 100% 18%, 100% 100%, 0 100%);
49498
49574
  }
49499
49575
 
49500
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-steep-']::after {
49501
- height: calc(7rem + 2px);
49576
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-'] {
49577
+ --site-style-boundary-height: ${largeBoundaryHeight};
49578
+ }
49579
+
49580
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-']::after {
49502
49581
  clip-path: polygon(0 54%, 100% 0%, 100% 100%, 0 100%);
49503
49582
  }
49504
49583
 
49505
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after {
49584
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after {
49506
49585
  background: var(--site-style-transition-to);
49507
49586
  mask-image: url("${classicWaveTransitionMask}");
49508
49587
  mask-repeat: no-repeat;
@@ -49512,28 +49591,39 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-wav
49512
49591
  -webkit-mask-size: 100% 100%;
49513
49592
  }
49514
49593
 
49515
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
49594
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
49516
49595
  mask-image: url("${balancedWaveTransitionMask}");
49517
49596
  -webkit-mask-image: url("${balancedWaveTransitionMask}");
49518
49597
  }
49519
49598
 
49520
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
49521
- height: calc(4.5rem + 2px);
49599
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-'] {
49600
+ --site-style-boundary-height: ${compactBoundaryHeight};
49601
+ }
49602
+
49603
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
49522
49604
  mask-image: url("${gentleWaveTransitionMask}");
49523
49605
  -webkit-mask-image: url("${gentleWaveTransitionMask}");
49524
49606
  }
49525
49607
 
49526
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-bold-']::after {
49527
- height: calc(7rem + 2px);
49608
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-'] {
49609
+ --site-style-boundary-height: ${largeBoundaryHeight};
49610
+ }
49611
+
49612
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-']::after {
49528
49613
  mask-image: url("${boldWaveTransitionMask}");
49529
49614
  -webkit-mask-image: url("${boldWaveTransitionMask}");
49530
49615
  }
49531
49616
 
49532
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-drift-']::after {
49617
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-drift-']::after {
49533
49618
  mask-image: url("${driftWaveTransitionMask}");
49534
49619
  -webkit-mask-image: url("${driftWaveTransitionMask}");
49535
49620
  }`;
49536
49621
  }
49622
+ function requiredBoundaryHeightCss(transition) {
49623
+ const metrics = boundaryRuntimeMetricsForTransition(transition);
49624
+ if (!metrics) throw new Error(`Missing boundary runtime metrics for ${transition}`);
49625
+ return metrics.heightCss;
49626
+ }
49537
49627
  function svgDataUrl(svg) {
49538
49628
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
49539
49629
  }
@@ -51656,13 +51746,15 @@ function sourceLabel(source) {
51656
51746
  }
51657
51747
  //#endregion
51658
51748
  //#region ../blocks/src/PageRenderer.tsx
51659
- function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
51749
+ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
51660
51750
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
51661
51751
  dataContext?.imageResolveContext,
51662
51752
  dataContext?.mediaAssets,
51663
51753
  dataContext?.siteId,
51664
51754
  dataContext?.supabaseUrl
51665
51755
  ]);
51756
+ const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
51757
+ const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
51666
51758
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
51667
51759
  className: "rb-p-6 rb-caption",
51668
51760
  style: textColorStyle("mutedText"),
@@ -51674,6 +51766,17 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
51674
51766
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
51675
51767
  const blockPosition = pageBlockPosition(index, page.blocks.length);
51676
51768
  const blockKey = block.id ?? `${block.kind}-${index}`;
51769
+ const previousBlock = page.blocks[index - 1] ?? null;
51770
+ const nextBlock = page.blocks[index + 1] ?? null;
51771
+ const boundaryBefore = boundaryBetweenBlocks(previousBlock, block, boundaryByAdjacentBlockIds);
51772
+ const boundaryAfter = boundaryBetweenBlocks(block, nextBlock, boundaryByAdjacentBlockIds);
51773
+ const boundaryElement = renderBoundaryAfterBlock({
51774
+ block,
51775
+ nextBlock,
51776
+ blockKey,
51777
+ boundaryByAdjacentBlockIds,
51778
+ wrapBoundary
51779
+ });
51677
51780
  const cleanKind = block.kind.replace(/^block\./, "");
51678
51781
  const definition = getBlockDefinition(block.kind);
51679
51782
  const managesOwnWrapper = definition?.manifest.behaviours?.managesOwnWrapper;
@@ -51696,10 +51799,18 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
51696
51799
  imageResolveContext,
51697
51800
  previewAuthoring
51698
51801
  };
51699
- if (!shouldUseWrapper) return /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, blockKey);
51802
+ if (!shouldUseWrapper) {
51803
+ const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
51804
+ return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
51805
+ }
51700
51806
  const wrapperClassName = [`block-${cleanKind}`, wrapBlock ? "group relative" : null].filter(Boolean).join(" ");
51701
51807
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
51702
51808
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
51809
+ const transitionStyle = transitionCssVarsStyle(renderableContent);
51810
+ const blockStyle = mergeStyleObjects(transitionStyle, boundaryReserveCssVarsStyle({
51811
+ before: boundaryBefore,
51812
+ after: boundaryAfter
51813
+ }));
51703
51814
  const blockElement = /* @__PURE__ */ jsx("div", {
51704
51815
  className: wrapperClassName,
51705
51816
  "data-block": cleanKind,
@@ -51709,21 +51820,92 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
51709
51820
  "data-block-variant": variantKey ?? void 0,
51710
51821
  "data-block-look": blockLook,
51711
51822
  "data-page-block-position": blockPosition,
51823
+ "data-site-style-boundary-before": boundaryBefore?.metrics.size,
51824
+ "data-site-style-boundary-after": boundaryAfter?.metrics.size,
51712
51825
  "data-style-group": styleGroup,
51826
+ style: blockStyle,
51713
51827
  children: /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps })
51714
51828
  }, blockKey);
51715
- if (!isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
51829
+ if (boundaryElement) return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, boundaryElement] }, blockKey);
51830
+ if (usesRuntimeBoundaries || !isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
51716
51831
  return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, /* @__PURE__ */ jsx("div", {
51717
51832
  "aria-hidden": "true",
51718
51833
  "data-block-transition": "",
51719
51834
  "data-block-transition-for": block.id ?? blockKey,
51720
- "data-style-group": styleGroup
51835
+ "data-style-group": styleGroup,
51836
+ style: transitionStyle
51721
51837
  })] }, blockKey);
51722
51838
  }) });
51723
51839
  }
51724
51840
  function isSiteStyleTransitionStyleGroup(value) {
51725
51841
  return value?.startsWith("site-style-transition-") === true;
51726
51842
  }
51843
+ function boundaryMapForAdjacentBlockIds(boundaries) {
51844
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
51845
+ }
51846
+ function boundaryKey(previousBlockId, nextBlockId) {
51847
+ return `${previousBlockId}\u0000${nextBlockId}`;
51848
+ }
51849
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
51850
+ const previousBlockId = previousBlock?.id ?? null;
51851
+ const nextBlockId = nextBlock?.id ?? null;
51852
+ if (!previousBlockId || !nextBlockId) return null;
51853
+ return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
51854
+ }
51855
+ function renderBoundaryAfterBlock(input) {
51856
+ const previousBlockId = input.block.id;
51857
+ const nextBlockId = input.nextBlock?.id ?? null;
51858
+ if (!previousBlockId || !nextBlockId) return null;
51859
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
51860
+ if (!boundary) return null;
51861
+ const rendered = /* @__PURE__ */ jsx("div", {
51862
+ "aria-hidden": "true",
51863
+ "data-block-boundary": "",
51864
+ "data-boundary-id": boundary.boundaryId,
51865
+ "data-boundary-previous-block-id": boundary.previousBlockId,
51866
+ "data-boundary-next-block-id": boundary.nextBlockId,
51867
+ "data-style-group": boundary.styleGroup,
51868
+ style: boundaryCssVarsStyle(boundary)
51869
+ }, `${input.blockKey}:boundary`);
51870
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
51871
+ }
51872
+ function boundaryCssVarsStyle(boundary) {
51873
+ return {
51874
+ "--site-style-transition-from": boundary.cssVars.from,
51875
+ "--site-style-transition-to": boundary.cssVars.to
51876
+ };
51877
+ }
51878
+ function boundaryReserveCssVarsStyle(input) {
51879
+ const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
51880
+ const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
51881
+ if (!before && !after) return void 0;
51882
+ return {
51883
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
51884
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
51885
+ };
51886
+ }
51887
+ function boundaryReserveValueForTreatment(boundary) {
51888
+ return boundary.metrics.reserveCss;
51889
+ }
51890
+ function transitionCssVarsStyle(content) {
51891
+ const transitionStyles = isObjectRecord(content._transitionStyles) ? content._transitionStyles : null;
51892
+ const cssVars = isObjectRecord(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
51893
+ const from = typeof cssVars?.from === "string" ? cssVars.from : null;
51894
+ const to = typeof cssVars?.to === "string" ? cssVars.to : null;
51895
+ if (!from && !to) return void 0;
51896
+ return {
51897
+ ...from ? { "--site-style-transition-from": from } : {},
51898
+ ...to ? { "--site-style-transition-to": to } : {}
51899
+ };
51900
+ }
51901
+ function mergeStyleObjects(left, right) {
51902
+ if (!left) return right;
51903
+ if (!right) return left;
51904
+ return {
51905
+ ...left,
51906
+ ...right
51907
+ };
51908
+ }
51727
51909
  function pageBlockPosition(index, blockCount) {
51728
51910
  if (blockCount <= 1) return "only";
51729
51911
  if (index === 0) return "first";
@@ -53672,52 +53854,53 @@ const containerResponsiveThemeCss = `/*
53672
53854
 
53673
53855
  /* Semantic spacing tokens (replaces Tailwind maps in src/system/spacing.ts) */
53674
53856
  .rb-section-pad-none {
53675
- padding-top: 0;
53676
- padding-bottom: 0;
53857
+ --rb-section-pad-y: 0rem;
53858
+ padding-top: var(--rb-section-pad-y);
53859
+ padding-bottom: var(--rb-section-pad-y);
53677
53860
  }
53678
53861
  .rb-section-pad-compact {
53679
- padding-top: 1.5rem;
53680
- padding-bottom: 1.5rem;
53862
+ --rb-section-pad-y: 1.5rem;
53863
+ padding-top: var(--rb-section-pad-y);
53864
+ padding-bottom: var(--rb-section-pad-y);
53681
53865
  }
53682
53866
  .rb-section-pad-cozy {
53683
- padding-top: 2.5rem;
53684
- padding-bottom: 2.5rem;
53867
+ --rb-section-pad-y: 2.5rem;
53868
+ padding-top: var(--rb-section-pad-y);
53869
+ padding-bottom: var(--rb-section-pad-y);
53685
53870
  }
53686
53871
  .rb-section-pad-medium {
53687
- padding-top: 3rem;
53688
- padding-bottom: 3rem;
53872
+ --rb-section-pad-y: 3rem;
53873
+ padding-top: var(--rb-section-pad-y);
53874
+ padding-bottom: var(--rb-section-pad-y);
53689
53875
  }
53690
53876
  .rb-section-pad-comfortable {
53691
- padding-top: 4rem;
53692
- padding-bottom: 4rem;
53877
+ --rb-section-pad-y: 4rem;
53878
+ padding-top: var(--rb-section-pad-y);
53879
+ padding-bottom: var(--rb-section-pad-y);
53693
53880
  }
53694
53881
  .rb-section-pad-spacious {
53695
- padding-top: 5rem;
53696
- padding-bottom: 5rem;
53882
+ --rb-section-pad-y: 5rem;
53883
+ padding-top: var(--rb-section-pad-y);
53884
+ padding-bottom: var(--rb-section-pad-y);
53697
53885
  }
53698
53886
 
53699
53887
  @container rb-site (min-width: 640px) {
53700
53888
 
53701
53889
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
53702
53890
  .rb-section-pad-compact {
53703
- padding-top: 2rem;
53704
- padding-bottom: 2rem;
53891
+ --rb-section-pad-y: 2rem;
53705
53892
  }
53706
53893
  .rb-section-pad-cozy {
53707
- padding-top: 3.5rem;
53708
- padding-bottom: 3.5rem;
53894
+ --rb-section-pad-y: 3.5rem;
53709
53895
  }
53710
53896
  .rb-section-pad-medium {
53711
- padding-top: 4rem;
53712
- padding-bottom: 4rem;
53897
+ --rb-section-pad-y: 4rem;
53713
53898
  }
53714
53899
  .rb-section-pad-comfortable {
53715
- padding-top: 5rem;
53716
- padding-bottom: 5rem;
53900
+ --rb-section-pad-y: 5rem;
53717
53901
  }
53718
53902
  .rb-section-pad-spacious {
53719
- padding-top: 7rem;
53720
- padding-bottom: 7rem;
53903
+ --rb-section-pad-y: 7rem;
53721
53904
  }
53722
53905
  }
53723
53906
 
@@ -55107,30 +55290,122 @@ const containerResponsiveThemeCss = `/*
55107
55290
  :where(.theme-scope) .header-logo-text {
55108
55291
  font-size: 1.125rem; /* matches rb-text-lg */
55109
55292
  line-height: 1.75rem;
55293
+ margin-inline: -0.18em;
55294
+ padding-inline: 0.18em;
55110
55295
  transition: font-size 300ms var(--motion-ease, ease);
55111
55296
  }
55112
55297
 
55113
- /* Mobile: reduce site title size (~30%) to keep header compact */
55298
+ /* Centered variant uses larger title */
55299
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
55300
+ font-size: 1.25rem; /* matches rb-text-xl */
55301
+ line-height: 1.75rem;
55302
+ }
55303
+
55304
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
55305
+ font-size: 0.95rem;
55306
+ line-height: 1.5rem;
55307
+ }
55308
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
55309
+ font-size: 1.125rem;
55310
+ line-height: 1.75rem;
55311
+ }
55312
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
55313
+ font-size: 1.35rem;
55314
+ line-height: 1.9rem;
55315
+ }
55316
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
55317
+ font-size: 1.75rem;
55318
+ line-height: 2.25rem;
55319
+ }
55320
+
55321
+ :where(.theme-scope)
55322
+ .header-variant-centered
55323
+ .header-logo-size-compact
55324
+ .header-logo-text {
55325
+ font-size: 1.125rem;
55326
+ line-height: 1.75rem;
55327
+ }
55328
+ :where(.theme-scope)
55329
+ .header-variant-centered
55330
+ .header-logo-size-standard
55331
+ .header-logo-text {
55332
+ font-size: 1.25rem;
55333
+ line-height: 1.75rem;
55334
+ }
55335
+ :where(.theme-scope)
55336
+ .header-variant-centered
55337
+ .header-logo-size-generous
55338
+ .header-logo-text {
55339
+ font-size: 1.6rem;
55340
+ line-height: 2rem;
55341
+ }
55342
+ :where(.theme-scope)
55343
+ .header-variant-centered
55344
+ .header-logo-size-display
55345
+ .header-logo-text {
55346
+ font-size: 2.1rem;
55347
+ line-height: 2.5rem;
55348
+ }
55349
+
55350
+ /* Mobile: reduce site title size to keep header compact */
55114
55351
  @container rb-site (max-width: 767px) {
55115
55352
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
55116
- :where(.theme-scope) .header-logo-text {
55353
+ :where(.theme-scope) .header-logo-text,
55354
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
55117
55355
  font-size: 0.8rem;
55118
55356
  line-height: 1.25rem;
55119
55357
  }
55120
55358
 
55121
- :where(.theme-scope) .header-variant-centered .header-logo-text {
55359
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
55360
+ font-size: 0.75rem;
55361
+ line-height: 1.15rem;
55362
+ }
55363
+
55364
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
55365
+ font-size: 1rem;
55366
+ line-height: 1.4rem;
55367
+ }
55368
+
55369
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
55370
+ font-size: 1.25rem;
55371
+ line-height: 1.65rem;
55372
+ }
55373
+
55374
+ :where(.theme-scope) .header-variant-centered .header-logo-text,
55375
+ :where(.theme-scope)
55376
+ .header-variant-centered
55377
+ .header-logo-size-standard
55378
+ .header-logo-text {
55122
55379
  font-size: 0.875rem;
55123
55380
  line-height: 1.25rem;
55124
55381
  }
55382
+
55383
+ :where(.theme-scope)
55384
+ .header-variant-centered
55385
+ .header-logo-size-compact
55386
+ .header-logo-text {
55387
+ font-size: 0.8rem;
55388
+ line-height: 1.2rem;
55389
+ }
55390
+
55391
+ :where(.theme-scope)
55392
+ .header-variant-centered
55393
+ .header-logo-size-generous
55394
+ .header-logo-text {
55395
+ font-size: 1.125rem;
55396
+ line-height: 1.5rem;
55397
+ }
55398
+
55399
+ :where(.theme-scope)
55400
+ .header-variant-centered
55401
+ .header-logo-size-display
55402
+ .header-logo-text {
55403
+ font-size: 1.35rem;
55404
+ line-height: 1.75rem;
55405
+ }
55125
55406
  }
55126
55407
  }
55127
55408
 
55128
- /* Centered variant uses larger title */
55129
- :where(.theme-scope) .header-variant-centered .header-logo-text {
55130
- font-size: 1.25rem; /* matches rb-text-xl */
55131
- line-height: 1.75rem;
55132
- }
55133
-
55134
55409
  /* =================================================================
55135
55410
  Shrink on Scroll - Logo & Title
55136
55411
  ================================================================= */
@@ -63427,7 +63702,7 @@ function renderWithSdkThemeRuntime({ themeRuntime, theme, children }) {
63427
63702
  }
63428
63703
  //#endregion
63429
63704
  //#region src/rendering/components/pageShared.tsx
63430
- 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 }) {
63705
+ 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 }) {
63431
63706
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
63432
63707
  return renderWithSdkThemeRuntime({
63433
63708
  themeRuntime,
@@ -63435,6 +63710,7 @@ function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolve
63435
63710
  children: /* @__PURE__ */ jsx(PageRenderer, {
63436
63711
  theme,
63437
63712
  page,
63713
+ runtimeBoundaries,
63438
63714
  themeTokens: sdkConfig?.theme?.palette ? {
63439
63715
  ...baseTokens,
63440
63716
  palette: {
@@ -64913,7 +65189,7 @@ z$1.object({ acceptExtraSiteCharge: z$1.boolean().optional() });
64913
65189
  //#region ../surfaces/src/index.ts
64914
65190
  const SURFACE_IDS = ["core", "macadamia"];
64915
65191
  const DEFAULT_SURFACE_ID = "core";
64916
- SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID);
65192
+ [...SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID)];
64917
65193
  const CANONICAL_REFUND_PLANNER_ERROR_CODES = [
64918
65194
  ...[
64919
65195
  "already_refunded",
@@ -64962,6 +65238,7 @@ const VERTICAL_IDS = [
64962
65238
  "training_provider",
64963
65239
  "retreat_centre",
64964
65240
  "music_school",
65241
+ "voice_singing",
64965
65242
  "performing_arts_school",
64966
65243
  "community_wellbeing",
64967
65244
  "venue_event_space"
@@ -65014,6 +65291,11 @@ const VERTICAL_BOOKING_PRESETS = [
65014
65291
  preset("music_school.terms", "music_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date group courses."),
65015
65292
  preset("music_school.workshops", "music_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
65016
65293
  preset("music_school.performances", "music_school", "performance", "Performance", "Performances", "Concerts, recitals, showcases, or ticketed performances."),
65294
+ preset("voice_singing.lessons", "voice_singing", "appointment", "Voice session", "Voice sessions", "One-to-one singing lessons, voice coaching, or private practice sessions."),
65295
+ preset("voice_singing.classes", "voice_singing", "class", "Ongoing weekly session", "Ongoing weekly sessions", "Regular choirs, voice circles, community singing, or group practice."),
65296
+ preset("voice_singing.terms", "voice_singing", "course", "Singing term", "Singing terms", "Multi-week choir terms, voice courses, or fixed-date group programmes."),
65297
+ preset("voice_singing.workshops", "voice_singing", "workshop", "Workshop", "Workshops", "One-off singing workshops, voice journeys, or devotional singing sessions."),
65298
+ preset("voice_singing.performances", "voice_singing", "performance", "Performance", "Performances", "Choir concerts, sharing events, recitals, or community performances."),
65017
65299
  preset("performing_arts_school.classes", "performing_arts_school", "class", "Class", "Classes", "Regular group classes, rehearsals, or weekly sessions."),
65018
65300
  preset("performing_arts_school.terms", "performing_arts_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date course groups."),
65019
65301
  preset("performing_arts_school.workshops", "performing_arts_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),