@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: {
@@ -42239,15 +42276,15 @@ function Grid({ as: Comp = "div", cols = {
42239
42276
  }
42240
42277
  //#endregion
42241
42278
  //#region ../blocks/src/system/runtime/nodes/layout.tsx
42242
- const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
42279
+ const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
42243
42280
  ...props,
42244
42281
  allowOverflow
42245
42282
  });
42246
- const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
42247
- const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
42248
- const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
42249
- const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
42250
- const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
42283
+ const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
42284
+ const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
42285
+ const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
42286
+ const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
42287
+ const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
42251
42288
  //#endregion
42252
42289
  //#region ../path-utils/src/index.ts
42253
42290
  const PATH_SEPARATOR_REGEX$1 = /\./g;
@@ -49968,6 +50005,7 @@ function applyTransformsAndFallback(value, binding, context) {
49968
50005
  viewModel: context.viewModel
49969
50006
  }, transforms);
49970
50007
  if (binding.transforms && binding.transforms.length > 0 && transformed === null) {
50008
+ if (binding.fallback !== void 0) return binding.fallback;
49971
50009
  if (process.env.NODE_ENV === "development") console.warn("[block-system] Transform returned null for binding", {
49972
50010
  bindingFrom: binding.from,
49973
50011
  transforms: binding.transforms?.map((t) => t.id)
@@ -51981,7 +52019,7 @@ function generateHeaderRootStyles(header, themeId, tokens, _theme) {
51981
52019
  }
51982
52020
  }
51983
52021
  if (header.positioning === "sticky" || header.positioning === "fixed") {
51984
- const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "sm");
52022
+ const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
51985
52023
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
51986
52024
  }
51987
52025
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
@@ -52064,15 +52102,19 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
52064
52102
  * legacy navStyle, navWeight, navColor, and navEffects settings.
52065
52103
  */
52066
52104
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
52105
+ const navPreferences = {
52106
+ typography: header.navTypography ?? "inherit",
52107
+ fontSize: header.navTextSize ?? "inherit"
52108
+ };
52067
52109
  if (header.navLinkStyle) return generateNavLinkCSS({
52068
52110
  themeId,
52069
52111
  tokens,
52070
52112
  theme,
52071
- style: contrastTreatment || navTextSize ? {
52113
+ style: mergeHeaderNavTypographyPreference(contrastTreatment || navTextSize ? {
52072
52114
  ...header.navLinkStyle,
52073
52115
  ...contrastTreatment ? { contrastTreatment } : {},
52074
52116
  ...navTextSize ? { textSize: navTextSize } : {}
52075
- } : header.navLinkStyle,
52117
+ } : header.navLinkStyle, navPreferences),
52076
52118
  className: "header-nav-link"
52077
52119
  });
52078
52120
  const navStyle = header.navStyle ?? "minimal";
@@ -52144,7 +52186,7 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
52144
52186
  themeId,
52145
52187
  tokens,
52146
52188
  theme,
52147
- style: mergedStyle,
52189
+ style: mergeHeaderNavTypographyPreference(mergedStyle, navPreferences),
52148
52190
  className: "header-nav-link"
52149
52191
  });
52150
52192
  }
@@ -52535,6 +52577,9 @@ const boldWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='htt
52535
52577
  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>");
52536
52578
  function generateSiteStyleTransitionCss(themeId) {
52537
52579
  const selector = `:where([data-theme-scope="${themeId}"])`;
52580
+ const compactBoundaryHeight = requiredBoundaryHeightCss("wave-edge-gentle");
52581
+ const mediumBoundaryHeight = requiredBoundaryHeightCss("wave-edge");
52582
+ const largeBoundaryHeight = requiredBoundaryHeightCss("wave-edge-bold");
52538
52583
  return `${selector} [data-style-group^='site-style-transition-'] {
52539
52584
  position: relative;
52540
52585
  z-index: 2;
@@ -52542,23 +52587,48 @@ function generateSiteStyleTransitionCss(themeId) {
52542
52587
  --site-style-transition-to: rgb(var(--tb-background));
52543
52588
  }
52544
52589
 
52545
- ${selector} [data-block-transition][data-style-group^='site-style-transition-'] {
52590
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-'] {
52546
52591
  position: relative;
52547
52592
  z-index: 3;
52548
52593
  height: 0;
52549
52594
  pointer-events: none;
52595
+ --site-style-boundary-height: ${mediumBoundaryHeight};
52596
+ }
52597
+
52598
+ ${selector} [data-block][data-site-style-boundary-before] > :where([data-slot='section']) {
52599
+ padding-top: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-before-reserve, 0rem));
52600
+ }
52601
+
52602
+ ${selector} [data-block][data-site-style-boundary-after] > :where([data-slot='section']) {
52603
+ padding-bottom: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-after-reserve, 0rem));
52550
52604
  }
52551
52605
 
52552
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after,
52553
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after,
52554
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
52606
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::before,
52607
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::before,
52608
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::before {
52555
52609
  content: '';
52556
52610
  position: absolute;
52557
52611
  left: 0;
52558
52612
  right: 0;
52559
- bottom: -2px;
52613
+ top: 0;
52614
+ transform: translateY(-50%);
52615
+ z-index: 0;
52616
+ height: var(--site-style-boundary-height);
52617
+ background: var(--site-style-transition-from);
52618
+ pointer-events: none;
52619
+ }
52620
+
52621
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after,
52622
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after,
52623
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
52624
+ content: '';
52625
+ position: absolute;
52626
+ left: 0;
52627
+ right: 0;
52628
+ top: 0;
52629
+ transform: translateY(-50%);
52560
52630
  z-index: 1;
52561
- height: calc(6rem + 2px);
52631
+ height: var(--site-style-boundary-height);
52562
52632
  pointer-events: none;
52563
52633
  }
52564
52634
 
@@ -52596,7 +52666,7 @@ ${selector} [data-style-group$='-to-brand-depth-band'] {
52596
52666
  --site-style-transition-to: rgb(var(--tb-primary-800));
52597
52667
  }
52598
52668
 
52599
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
52669
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
52600
52670
  /* Fallback for browsers without color-mix(). */
52601
52671
  background: linear-gradient(
52602
52672
  to bottom,
@@ -52612,30 +52682,37 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-sof
52612
52682
  );
52613
52683
  }
52614
52684
 
52615
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-long-']::after {
52616
- height: 10rem;
52685
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-long-'] {
52686
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-long")};
52617
52687
  }
52618
52688
 
52619
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-expansive-']::after {
52620
- height: 14rem;
52689
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-expansive-'] {
52690
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-expansive")};
52621
52691
  }
52622
52692
 
52623
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after {
52693
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after {
52694
+ height: calc(var(--site-style-boundary-height) + 2px);
52624
52695
  background: var(--site-style-transition-to);
52625
52696
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
52626
52697
  }
52627
52698
 
52628
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
52629
- height: calc(4.5rem + 2px);
52699
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-'] {
52700
+ --site-style-boundary-height: ${compactBoundaryHeight};
52701
+ }
52702
+
52703
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
52630
52704
  clip-path: polygon(0 34%, 100% 18%, 100% 100%, 0 100%);
52631
52705
  }
52632
52706
 
52633
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-steep-']::after {
52634
- height: calc(7rem + 2px);
52707
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-'] {
52708
+ --site-style-boundary-height: ${largeBoundaryHeight};
52709
+ }
52710
+
52711
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-']::after {
52635
52712
  clip-path: polygon(0 54%, 100% 0%, 100% 100%, 0 100%);
52636
52713
  }
52637
52714
 
52638
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after {
52715
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after {
52639
52716
  background: var(--site-style-transition-to);
52640
52717
  mask-image: url("${classicWaveTransitionMask}");
52641
52718
  mask-repeat: no-repeat;
@@ -52645,28 +52722,39 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-wav
52645
52722
  -webkit-mask-size: 100% 100%;
52646
52723
  }
52647
52724
 
52648
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
52725
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
52649
52726
  mask-image: url("${balancedWaveTransitionMask}");
52650
52727
  -webkit-mask-image: url("${balancedWaveTransitionMask}");
52651
52728
  }
52652
52729
 
52653
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
52654
- height: calc(4.5rem + 2px);
52730
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-'] {
52731
+ --site-style-boundary-height: ${compactBoundaryHeight};
52732
+ }
52733
+
52734
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
52655
52735
  mask-image: url("${gentleWaveTransitionMask}");
52656
52736
  -webkit-mask-image: url("${gentleWaveTransitionMask}");
52657
52737
  }
52658
52738
 
52659
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-bold-']::after {
52660
- height: calc(7rem + 2px);
52739
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-'] {
52740
+ --site-style-boundary-height: ${largeBoundaryHeight};
52741
+ }
52742
+
52743
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-']::after {
52661
52744
  mask-image: url("${boldWaveTransitionMask}");
52662
52745
  -webkit-mask-image: url("${boldWaveTransitionMask}");
52663
52746
  }
52664
52747
 
52665
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-drift-']::after {
52748
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-drift-']::after {
52666
52749
  mask-image: url("${driftWaveTransitionMask}");
52667
52750
  -webkit-mask-image: url("${driftWaveTransitionMask}");
52668
52751
  }`;
52669
52752
  }
52753
+ function requiredBoundaryHeightCss(transition) {
52754
+ const metrics = boundaryRuntimeMetricsForTransition(transition);
52755
+ if (!metrics) throw new Error(`Missing boundary runtime metrics for ${transition}`);
52756
+ return metrics.heightCss;
52757
+ }
52670
52758
  function svgDataUrl(svg) {
52671
52759
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
52672
52760
  }
@@ -54789,13 +54877,15 @@ function sourceLabel(source) {
54789
54877
  }
54790
54878
  //#endregion
54791
54879
  //#region ../blocks/src/PageRenderer.tsx
54792
- function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
54880
+ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
54793
54881
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
54794
54882
  dataContext?.imageResolveContext,
54795
54883
  dataContext?.mediaAssets,
54796
54884
  dataContext?.siteId,
54797
54885
  dataContext?.supabaseUrl
54798
54886
  ]);
54887
+ const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
54888
+ const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
54799
54889
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
54800
54890
  className: "rb-p-6 rb-caption",
54801
54891
  style: textColorStyle("mutedText"),
@@ -54807,6 +54897,17 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54807
54897
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
54808
54898
  const blockPosition = pageBlockPosition(index, page.blocks.length);
54809
54899
  const blockKey = block.id ?? `${block.kind}-${index}`;
54900
+ const previousBlock = page.blocks[index - 1] ?? null;
54901
+ const nextBlock = page.blocks[index + 1] ?? null;
54902
+ const boundaryBefore = boundaryBetweenBlocks(previousBlock, block, boundaryByAdjacentBlockIds);
54903
+ const boundaryAfter = boundaryBetweenBlocks(block, nextBlock, boundaryByAdjacentBlockIds);
54904
+ const boundaryElement = renderBoundaryAfterBlock({
54905
+ block,
54906
+ nextBlock,
54907
+ blockKey,
54908
+ boundaryByAdjacentBlockIds,
54909
+ wrapBoundary
54910
+ });
54810
54911
  const cleanKind = block.kind.replace(/^block\./, "");
54811
54912
  const definition = getBlockDefinition(block.kind);
54812
54913
  const managesOwnWrapper = definition?.manifest.behaviours?.managesOwnWrapper;
@@ -54829,10 +54930,18 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54829
54930
  imageResolveContext,
54830
54931
  previewAuthoring
54831
54932
  };
54832
- if (!shouldUseWrapper) return /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, blockKey);
54933
+ if (!shouldUseWrapper) {
54934
+ const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
54935
+ return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
54936
+ }
54833
54937
  const wrapperClassName = [`block-${cleanKind}`, wrapBlock ? "group relative" : null].filter(Boolean).join(" ");
54834
54938
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
54835
54939
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
54940
+ const transitionStyle = transitionCssVarsStyle(renderableContent);
54941
+ const blockStyle = mergeStyleObjects(transitionStyle, boundaryReserveCssVarsStyle({
54942
+ before: boundaryBefore,
54943
+ after: boundaryAfter
54944
+ }));
54836
54945
  const blockElement = /* @__PURE__ */ jsx("div", {
54837
54946
  className: wrapperClassName,
54838
54947
  "data-block": cleanKind,
@@ -54842,21 +54951,92 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54842
54951
  "data-block-variant": variantKey ?? void 0,
54843
54952
  "data-block-look": blockLook,
54844
54953
  "data-page-block-position": blockPosition,
54954
+ "data-site-style-boundary-before": boundaryBefore?.metrics.size,
54955
+ "data-site-style-boundary-after": boundaryAfter?.metrics.size,
54845
54956
  "data-style-group": styleGroup,
54957
+ style: blockStyle,
54846
54958
  children: /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps })
54847
54959
  }, blockKey);
54848
- if (!isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
54960
+ if (boundaryElement) return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, boundaryElement] }, blockKey);
54961
+ if (usesRuntimeBoundaries || !isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
54849
54962
  return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, /* @__PURE__ */ jsx("div", {
54850
54963
  "aria-hidden": "true",
54851
54964
  "data-block-transition": "",
54852
54965
  "data-block-transition-for": block.id ?? blockKey,
54853
- "data-style-group": styleGroup
54966
+ "data-style-group": styleGroup,
54967
+ style: transitionStyle
54854
54968
  })] }, blockKey);
54855
54969
  }) });
54856
54970
  }
54857
54971
  function isSiteStyleTransitionStyleGroup(value) {
54858
54972
  return value?.startsWith("site-style-transition-") === true;
54859
54973
  }
54974
+ function boundaryMapForAdjacentBlockIds(boundaries) {
54975
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
54976
+ }
54977
+ function boundaryKey(previousBlockId, nextBlockId) {
54978
+ return `${previousBlockId}\u0000${nextBlockId}`;
54979
+ }
54980
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
54981
+ const previousBlockId = previousBlock?.id ?? null;
54982
+ const nextBlockId = nextBlock?.id ?? null;
54983
+ if (!previousBlockId || !nextBlockId) return null;
54984
+ return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
54985
+ }
54986
+ function renderBoundaryAfterBlock(input) {
54987
+ const previousBlockId = input.block.id;
54988
+ const nextBlockId = input.nextBlock?.id ?? null;
54989
+ if (!previousBlockId || !nextBlockId) return null;
54990
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
54991
+ if (!boundary) return null;
54992
+ const rendered = /* @__PURE__ */ jsx("div", {
54993
+ "aria-hidden": "true",
54994
+ "data-block-boundary": "",
54995
+ "data-boundary-id": boundary.boundaryId,
54996
+ "data-boundary-previous-block-id": boundary.previousBlockId,
54997
+ "data-boundary-next-block-id": boundary.nextBlockId,
54998
+ "data-style-group": boundary.styleGroup,
54999
+ style: boundaryCssVarsStyle(boundary)
55000
+ }, `${input.blockKey}:boundary`);
55001
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
55002
+ }
55003
+ function boundaryCssVarsStyle(boundary) {
55004
+ return {
55005
+ "--site-style-transition-from": boundary.cssVars.from,
55006
+ "--site-style-transition-to": boundary.cssVars.to
55007
+ };
55008
+ }
55009
+ function boundaryReserveCssVarsStyle(input) {
55010
+ const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
55011
+ const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
55012
+ if (!before && !after) return void 0;
55013
+ return {
55014
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
55015
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
55016
+ };
55017
+ }
55018
+ function boundaryReserveValueForTreatment(boundary) {
55019
+ return boundary.metrics.reserveCss;
55020
+ }
55021
+ function transitionCssVarsStyle(content) {
55022
+ const transitionStyles = isObjectRecord(content._transitionStyles) ? content._transitionStyles : null;
55023
+ const cssVars = isObjectRecord(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
55024
+ const from = typeof cssVars?.from === "string" ? cssVars.from : null;
55025
+ const to = typeof cssVars?.to === "string" ? cssVars.to : null;
55026
+ if (!from && !to) return void 0;
55027
+ return {
55028
+ ...from ? { "--site-style-transition-from": from } : {},
55029
+ ...to ? { "--site-style-transition-to": to } : {}
55030
+ };
55031
+ }
55032
+ function mergeStyleObjects(left, right) {
55033
+ if (!left) return right;
55034
+ if (!right) return left;
55035
+ return {
55036
+ ...left,
55037
+ ...right
55038
+ };
55039
+ }
54860
55040
  function pageBlockPosition(index, blockCount) {
54861
55041
  if (blockCount <= 1) return "only";
54862
55042
  if (index === 0) return "first";
@@ -56768,52 +56948,53 @@ const containerResponsiveThemeCss = `/*
56768
56948
 
56769
56949
  /* Semantic spacing tokens (replaces Tailwind maps in src/system/spacing.ts) */
56770
56950
  .rb-section-pad-none {
56771
- padding-top: 0;
56772
- padding-bottom: 0;
56951
+ --rb-section-pad-y: 0rem;
56952
+ padding-top: var(--rb-section-pad-y);
56953
+ padding-bottom: var(--rb-section-pad-y);
56773
56954
  }
56774
56955
  .rb-section-pad-compact {
56775
- padding-top: 1.5rem;
56776
- padding-bottom: 1.5rem;
56956
+ --rb-section-pad-y: 1.5rem;
56957
+ padding-top: var(--rb-section-pad-y);
56958
+ padding-bottom: var(--rb-section-pad-y);
56777
56959
  }
56778
56960
  .rb-section-pad-cozy {
56779
- padding-top: 2.5rem;
56780
- padding-bottom: 2.5rem;
56961
+ --rb-section-pad-y: 2.5rem;
56962
+ padding-top: var(--rb-section-pad-y);
56963
+ padding-bottom: var(--rb-section-pad-y);
56781
56964
  }
56782
56965
  .rb-section-pad-medium {
56783
- padding-top: 3rem;
56784
- padding-bottom: 3rem;
56966
+ --rb-section-pad-y: 3rem;
56967
+ padding-top: var(--rb-section-pad-y);
56968
+ padding-bottom: var(--rb-section-pad-y);
56785
56969
  }
56786
56970
  .rb-section-pad-comfortable {
56787
- padding-top: 4rem;
56788
- padding-bottom: 4rem;
56971
+ --rb-section-pad-y: 4rem;
56972
+ padding-top: var(--rb-section-pad-y);
56973
+ padding-bottom: var(--rb-section-pad-y);
56789
56974
  }
56790
56975
  .rb-section-pad-spacious {
56791
- padding-top: 5rem;
56792
- padding-bottom: 5rem;
56976
+ --rb-section-pad-y: 5rem;
56977
+ padding-top: var(--rb-section-pad-y);
56978
+ padding-bottom: var(--rb-section-pad-y);
56793
56979
  }
56794
56980
 
56795
56981
  @container rb-site (min-width: 640px) {
56796
56982
 
56797
56983
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56798
56984
  .rb-section-pad-compact {
56799
- padding-top: 2rem;
56800
- padding-bottom: 2rem;
56985
+ --rb-section-pad-y: 2rem;
56801
56986
  }
56802
56987
  .rb-section-pad-cozy {
56803
- padding-top: 3.5rem;
56804
- padding-bottom: 3.5rem;
56988
+ --rb-section-pad-y: 3.5rem;
56805
56989
  }
56806
56990
  .rb-section-pad-medium {
56807
- padding-top: 4rem;
56808
- padding-bottom: 4rem;
56991
+ --rb-section-pad-y: 4rem;
56809
56992
  }
56810
56993
  .rb-section-pad-comfortable {
56811
- padding-top: 5rem;
56812
- padding-bottom: 5rem;
56994
+ --rb-section-pad-y: 5rem;
56813
56995
  }
56814
56996
  .rb-section-pad-spacious {
56815
- padding-top: 7rem;
56816
- padding-bottom: 7rem;
56997
+ --rb-section-pad-y: 7rem;
56817
56998
  }
56818
56999
  }
56819
57000
 
@@ -58203,30 +58384,122 @@ const containerResponsiveThemeCss = `/*
58203
58384
  :where(.theme-scope) .header-logo-text {
58204
58385
  font-size: 1.125rem; /* matches rb-text-lg */
58205
58386
  line-height: 1.75rem;
58387
+ margin-inline: -0.18em;
58388
+ padding-inline: 0.18em;
58206
58389
  transition: font-size 300ms var(--motion-ease, ease);
58207
58390
  }
58208
58391
 
58209
- /* Mobile: reduce site title size (~30%) to keep header compact */
58392
+ /* Centered variant uses larger title */
58393
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
58394
+ font-size: 1.25rem; /* matches rb-text-xl */
58395
+ line-height: 1.75rem;
58396
+ }
58397
+
58398
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
58399
+ font-size: 0.95rem;
58400
+ line-height: 1.5rem;
58401
+ }
58402
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
58403
+ font-size: 1.125rem;
58404
+ line-height: 1.75rem;
58405
+ }
58406
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
58407
+ font-size: 1.35rem;
58408
+ line-height: 1.9rem;
58409
+ }
58410
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
58411
+ font-size: 1.75rem;
58412
+ line-height: 2.25rem;
58413
+ }
58414
+
58415
+ :where(.theme-scope)
58416
+ .header-variant-centered
58417
+ .header-logo-size-compact
58418
+ .header-logo-text {
58419
+ font-size: 1.125rem;
58420
+ line-height: 1.75rem;
58421
+ }
58422
+ :where(.theme-scope)
58423
+ .header-variant-centered
58424
+ .header-logo-size-standard
58425
+ .header-logo-text {
58426
+ font-size: 1.25rem;
58427
+ line-height: 1.75rem;
58428
+ }
58429
+ :where(.theme-scope)
58430
+ .header-variant-centered
58431
+ .header-logo-size-generous
58432
+ .header-logo-text {
58433
+ font-size: 1.6rem;
58434
+ line-height: 2rem;
58435
+ }
58436
+ :where(.theme-scope)
58437
+ .header-variant-centered
58438
+ .header-logo-size-display
58439
+ .header-logo-text {
58440
+ font-size: 2.1rem;
58441
+ line-height: 2.5rem;
58442
+ }
58443
+
58444
+ /* Mobile: reduce site title size to keep header compact */
58210
58445
  @container rb-site (max-width: 767px) {
58211
58446
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
58212
- :where(.theme-scope) .header-logo-text {
58447
+ :where(.theme-scope) .header-logo-text,
58448
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
58213
58449
  font-size: 0.8rem;
58214
58450
  line-height: 1.25rem;
58215
58451
  }
58216
58452
 
58217
- :where(.theme-scope) .header-variant-centered .header-logo-text {
58453
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
58454
+ font-size: 0.75rem;
58455
+ line-height: 1.15rem;
58456
+ }
58457
+
58458
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
58459
+ font-size: 1rem;
58460
+ line-height: 1.4rem;
58461
+ }
58462
+
58463
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
58464
+ font-size: 1.25rem;
58465
+ line-height: 1.65rem;
58466
+ }
58467
+
58468
+ :where(.theme-scope) .header-variant-centered .header-logo-text,
58469
+ :where(.theme-scope)
58470
+ .header-variant-centered
58471
+ .header-logo-size-standard
58472
+ .header-logo-text {
58218
58473
  font-size: 0.875rem;
58219
58474
  line-height: 1.25rem;
58220
58475
  }
58476
+
58477
+ :where(.theme-scope)
58478
+ .header-variant-centered
58479
+ .header-logo-size-compact
58480
+ .header-logo-text {
58481
+ font-size: 0.8rem;
58482
+ line-height: 1.2rem;
58483
+ }
58484
+
58485
+ :where(.theme-scope)
58486
+ .header-variant-centered
58487
+ .header-logo-size-generous
58488
+ .header-logo-text {
58489
+ font-size: 1.125rem;
58490
+ line-height: 1.5rem;
58491
+ }
58492
+
58493
+ :where(.theme-scope)
58494
+ .header-variant-centered
58495
+ .header-logo-size-display
58496
+ .header-logo-text {
58497
+ font-size: 1.35rem;
58498
+ line-height: 1.75rem;
58499
+ }
58221
58500
  }
58222
58501
  }
58223
58502
 
58224
- /* Centered variant uses larger title */
58225
- :where(.theme-scope) .header-variant-centered .header-logo-text {
58226
- font-size: 1.25rem; /* matches rb-text-xl */
58227
- line-height: 1.75rem;
58228
- }
58229
-
58230
58503
  /* =================================================================
58231
58504
  Shrink on Scroll - Logo & Title
58232
58505
  ================================================================= */
@@ -66567,7 +66840,7 @@ function toPageHydrationBootstrapConfig(props) {
66567
66840
  mediaAssets: props.mediaAssets
66568
66841
  };
66569
66842
  }
66570
- 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 }) {
66843
+ 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 }) {
66571
66844
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
66572
66845
  return renderWithSdkThemeRuntime({
66573
66846
  themeRuntime,
@@ -66575,6 +66848,7 @@ function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolve
66575
66848
  children: /* @__PURE__ */ jsx(PageRenderer, {
66576
66849
  theme,
66577
66850
  page,
66851
+ runtimeBoundaries,
66578
66852
  themeTokens: sdkConfig?.theme?.palette ? {
66579
66853
  ...baseTokens,
66580
66854
  palette: {
@@ -68301,7 +68575,7 @@ z$1.object({ acceptExtraSiteCharge: z$1.boolean().optional() });
68301
68575
  //#region ../surfaces/src/index.ts
68302
68576
  const SURFACE_IDS = ["core", "macadamia"];
68303
68577
  const DEFAULT_SURFACE_ID = "core";
68304
- SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID);
68578
+ [...SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID)];
68305
68579
  const CANONICAL_REFUND_PLANNER_ERROR_CODES = [
68306
68580
  ...[
68307
68581
  "already_refunded",
@@ -68348,6 +68622,7 @@ const VERTICAL_IDS = [
68348
68622
  "training_provider",
68349
68623
  "retreat_centre",
68350
68624
  "music_school",
68625
+ "voice_singing",
68351
68626
  "performing_arts_school",
68352
68627
  "community_wellbeing",
68353
68628
  "venue_event_space"
@@ -68400,6 +68675,11 @@ const VERTICAL_BOOKING_PRESETS = [
68400
68675
  preset("music_school.terms", "music_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date group courses."),
68401
68676
  preset("music_school.workshops", "music_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
68402
68677
  preset("music_school.performances", "music_school", "performance", "Performance", "Performances", "Concerts, recitals, showcases, or ticketed performances."),
68678
+ preset("voice_singing.lessons", "voice_singing", "appointment", "Voice session", "Voice sessions", "One-to-one singing lessons, voice coaching, or private practice sessions."),
68679
+ preset("voice_singing.classes", "voice_singing", "class", "Ongoing weekly session", "Ongoing weekly sessions", "Regular choirs, voice circles, community singing, or group practice."),
68680
+ preset("voice_singing.terms", "voice_singing", "course", "Singing term", "Singing terms", "Multi-week choir terms, voice courses, or fixed-date group programmes."),
68681
+ preset("voice_singing.workshops", "voice_singing", "workshop", "Workshop", "Workshops", "One-off singing workshops, voice journeys, or devotional singing sessions."),
68682
+ preset("voice_singing.performances", "voice_singing", "performance", "Performance", "Performances", "Choir concerts, sharing events, recitals, or community performances."),
68403
68683
  preset("performing_arts_school.classes", "performing_arts_school", "class", "Class", "Classes", "Regular group classes, rehearsals, or weekly sessions."),
68404
68684
  preset("performing_arts_school.terms", "performing_arts_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date course groups."),
68405
68685
  preset("performing_arts_school.workshops", "performing_arts_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
@@ -69757,6 +70037,7 @@ async function loadPageWithDeps(deps, params) {
69757
70037
  }
69758
70038
  return {
69759
70039
  page: pageOutline,
70040
+ runtimeBoundaries: pageData.runtimeBoundaries,
69760
70041
  theme: support.theme,
69761
70042
  sdkConfig: support.sdkConfig,
69762
70043
  siteId,
@@ -72478,6 +72759,7 @@ async function loadContentFromContentResponseWithDeps(deps, params) {
72478
72759
  ogImageId: pageRecord.ogImageId ?? null
72479
72760
  },
72480
72761
  page: pageOutline,
72762
+ runtimeBoundaries: pageData.runtimeBoundaries,
72481
72763
  theme: support.theme,
72482
72764
  siteId,
72483
72765
  ...support.customBlocks ? { customBlocks: support.customBlocks } : {},