@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
@@ -18751,6 +18751,7 @@ const themeV2RuntimeStyleFieldNames = [
18751
18751
  "_sectionStyles",
18752
18752
  "_containerStyles",
18753
18753
  "_cardStyles",
18754
+ "_transitionStyles",
18754
18755
  "styleGroup"
18755
18756
  ];
18756
18757
  const themeV2BlockSpecificRawStyleFieldNames = [
@@ -19499,6 +19500,8 @@ const headerSchema = z$1.object({
19499
19500
  navStyle: headerNavStyle,
19500
19501
  navColor: themeColorTokenSchema.nullable().optional(),
19501
19502
  navWeight: navFontWeight.default("medium"),
19503
+ navTypography: z$1.enum(["body", "heading"]).optional(),
19504
+ navTextSize: navLinkStyleSchema.shape.textSize,
19502
19505
  container: headerContainerSchema,
19503
19506
  border: headerBorderSchema,
19504
19507
  shadow: componentShadowSchema.optional(),
@@ -21100,6 +21103,31 @@ function uniqueStrings(values) {
21100
21103
  }
21101
21104
  //#endregion
21102
21105
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
21106
+ function boundaryRuntimeMetrics(family, size, heightExpression) {
21107
+ return {
21108
+ family,
21109
+ size,
21110
+ heightCss: heightExpression.includes(" ") ? `calc(${heightExpression})` : heightExpression,
21111
+ reserveCss: `calc((${heightExpression}) / 2)`
21112
+ };
21113
+ }
21114
+ const sectionBoundaryRuntimeMetricsByTransition = {
21115
+ none: null,
21116
+ "soft-fade-short": boundaryRuntimeMetrics("gradient", "medium", "6rem + 2px"),
21117
+ "soft-fade-long": boundaryRuntimeMetrics("gradient", "spacious", "10rem"),
21118
+ "soft-fade-expansive": boundaryRuntimeMetrics("gradient", "expansive", "14rem"),
21119
+ "wave-edge": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
21120
+ "wave-edge-balanced": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
21121
+ "wave-edge-gentle": boundaryRuntimeMetrics("wave", "compact", "4.5rem + 2px"),
21122
+ "wave-edge-bold": boundaryRuntimeMetrics("wave", "large", "7rem + 2px"),
21123
+ "wave-edge-drift": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
21124
+ "angle-edge": boundaryRuntimeMetrics("angle", "medium", "6rem + 2px"),
21125
+ "angle-edge-subtle": boundaryRuntimeMetrics("angle", "compact", "4.5rem + 2px"),
21126
+ "angle-edge-steep": boundaryRuntimeMetrics("angle", "large", "7rem + 2px")
21127
+ };
21128
+ function boundaryRuntimeMetricsForTransition(transition) {
21129
+ return sectionBoundaryRuntimeMetricsByTransition[transition];
21130
+ }
21103
21131
  const noneBoundaryOption = {
21104
21132
  id: asBoundaryOptionId("break:none"),
21105
21133
  label: "None",
@@ -21255,12 +21283,12 @@ function validateUniquePageDesignPins(intent, ctx) {
21255
21283
  label: "block Look pin"
21256
21284
  });
21257
21285
  addDuplicateStringIssues(ctx, {
21258
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
21286
+ values: intent.boundaryPins.map((pin) => boundaryKey$1(pin.previousBlockId, pin.nextBlockId)),
21259
21287
  path: ["boundaryPins"],
21260
21288
  label: "boundary pin"
21261
21289
  });
21262
21290
  }
21263
- function boundaryKey(previousBlockId, nextBlockId) {
21291
+ function boundaryKey$1(previousBlockId, nextBlockId) {
21264
21292
  return makeBoundaryId(previousBlockId, nextBlockId);
21265
21293
  }
21266
21294
  //#endregion
@@ -21779,7 +21807,7 @@ const overlayLogoAccommodations = [
21779
21807
  * optional nested styling fields that would otherwise leak from another Look.
21780
21808
  */
21781
21809
  function baseHeader(theme) {
21782
- const { navLinkStyle: _navLinkStyle, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
21810
+ 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;
21783
21811
  return {
21784
21812
  ...header,
21785
21813
  navContainer: {
@@ -21852,12 +21880,12 @@ const headerStyleCatalog = defineExactCatalog()([
21852
21880
  },
21853
21881
  {
21854
21882
  id: asHeaderStyleId("fine-line"),
21855
- label: "Fine Line",
21856
- description: "Light surface with a crisp lower rule and underline hover.",
21883
+ label: "Seamless",
21884
+ description: "Borderless surface with underline hover for a quieter page transition.",
21857
21885
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
21858
21886
  navInteraction: "underline-grow",
21859
- surface: "bordered",
21860
- defaultDepth: "line",
21887
+ surface: "neutral",
21888
+ defaultDepth: "none",
21861
21889
  navTypography: "plain",
21862
21890
  moods: [
21863
21891
  "calm",
@@ -25461,6 +25489,13 @@ function toSiteChromeBackgroundColorTokens(tokenNames) {
25461
25489
  return token ? [token] : [];
25462
25490
  });
25463
25491
  }
25492
+ function mergeHeaderNavTypographyPreference(style, preferences) {
25493
+ return preferences.typography === "inherit" && preferences.fontSize === "inherit" ? style : {
25494
+ ...style,
25495
+ ...preferences.typography === "inherit" ? {} : { typography: preferences.typography },
25496
+ ...preferences.fontSize === "inherit" ? {} : { textSize: preferences.fontSize }
25497
+ };
25498
+ }
25464
25499
  //#endregion
25465
25500
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
25466
25501
  const themeTokenRecipeOptions = {
@@ -41598,6 +41633,7 @@ const eventListingBlockDefinition = {
41598
41633
  } },
41599
41634
  seeAllUrl: { $bind: {
41600
41635
  from: "content.seeAllUrl",
41636
+ fallback: "",
41601
41637
  transforms: [{ id: "links.resolve" }]
41602
41638
  } },
41603
41639
  loadMoreText: { $bind: {
@@ -41934,6 +41970,7 @@ const eventCalendarLayout = [styledSection({
41934
41970
  } },
41935
41971
  seeAllUrl: { $bind: {
41936
41972
  from: "content.seeAllUrl",
41973
+ fallback: "",
41937
41974
  transforms: [{ id: "links.resolve" }]
41938
41975
  } },
41939
41976
  loadMoreText: { $bind: {
@@ -49406,15 +49443,15 @@ function Grid({ as: Comp = "div", cols = {
49406
49443
  }
49407
49444
  //#endregion
49408
49445
  //#region ../blocks/src/system/runtime/nodes/layout.tsx
49409
- const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
49446
+ const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
49410
49447
  ...props,
49411
49448
  allowOverflow
49412
49449
  });
49413
- const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
49414
- const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
49415
- const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
49416
- const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
49417
- const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
49450
+ const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
49451
+ const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
49452
+ const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
49453
+ const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
49454
+ const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
49418
49455
  //#endregion
49419
49456
  //#region ../blocks/src/primitives/content/utils/sanitizeHref.ts
49420
49457
  const SAFE_PROTOCOLS = /* @__PURE__ */ new Set([
@@ -57091,6 +57128,7 @@ function applyTransformsAndFallback(value, binding, context) {
57091
57128
  viewModel: context.viewModel
57092
57129
  }, transforms);
57093
57130
  if (binding.transforms && binding.transforms.length > 0 && transformed === null) {
57131
+ if (binding.fallback !== void 0) return binding.fallback;
57094
57132
  if (process.env.NODE_ENV === "development") console.warn("[block-system] Transform returned null for binding", {
57095
57133
  bindingFrom: binding.from,
57096
57134
  transforms: binding.transforms?.map((t) => t.id)
@@ -59070,7 +59108,7 @@ function generateHeaderRootStyles(header, themeId, tokens, _theme) {
59070
59108
  }
59071
59109
  }
59072
59110
  if (header.positioning === "sticky" || header.positioning === "fixed") {
59073
- const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "sm");
59111
+ const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
59074
59112
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
59075
59113
  }
59076
59114
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
@@ -59153,15 +59191,19 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
59153
59191
  * legacy navStyle, navWeight, navColor, and navEffects settings.
59154
59192
  */
59155
59193
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
59194
+ const navPreferences = {
59195
+ typography: header.navTypography ?? "inherit",
59196
+ fontSize: header.navTextSize ?? "inherit"
59197
+ };
59156
59198
  if (header.navLinkStyle) return generateNavLinkCSS({
59157
59199
  themeId,
59158
59200
  tokens,
59159
59201
  theme,
59160
- style: contrastTreatment || navTextSize ? {
59202
+ style: mergeHeaderNavTypographyPreference(contrastTreatment || navTextSize ? {
59161
59203
  ...header.navLinkStyle,
59162
59204
  ...contrastTreatment ? { contrastTreatment } : {},
59163
59205
  ...navTextSize ? { textSize: navTextSize } : {}
59164
- } : header.navLinkStyle,
59206
+ } : header.navLinkStyle, navPreferences),
59165
59207
  className: "header-nav-link"
59166
59208
  });
59167
59209
  const navStyle = header.navStyle ?? "minimal";
@@ -59233,7 +59275,7 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
59233
59275
  themeId,
59234
59276
  tokens,
59235
59277
  theme,
59236
- style: mergedStyle,
59278
+ style: mergeHeaderNavTypographyPreference(mergedStyle, navPreferences),
59237
59279
  className: "header-nav-link"
59238
59280
  });
59239
59281
  }
@@ -59624,6 +59666,9 @@ const boldWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='htt
59624
59666
  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>");
59625
59667
  function generateSiteStyleTransitionCss(themeId) {
59626
59668
  const selector = `:where([data-theme-scope="${themeId}"])`;
59669
+ const compactBoundaryHeight = requiredBoundaryHeightCss("wave-edge-gentle");
59670
+ const mediumBoundaryHeight = requiredBoundaryHeightCss("wave-edge");
59671
+ const largeBoundaryHeight = requiredBoundaryHeightCss("wave-edge-bold");
59627
59672
  return `${selector} [data-style-group^='site-style-transition-'] {
59628
59673
  position: relative;
59629
59674
  z-index: 2;
@@ -59631,23 +59676,48 @@ function generateSiteStyleTransitionCss(themeId) {
59631
59676
  --site-style-transition-to: rgb(var(--tb-background));
59632
59677
  }
59633
59678
 
59634
- ${selector} [data-block-transition][data-style-group^='site-style-transition-'] {
59679
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-'] {
59635
59680
  position: relative;
59636
59681
  z-index: 3;
59637
59682
  height: 0;
59638
59683
  pointer-events: none;
59684
+ --site-style-boundary-height: ${mediumBoundaryHeight};
59685
+ }
59686
+
59687
+ ${selector} [data-block][data-site-style-boundary-before] > :where([data-slot='section']) {
59688
+ padding-top: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-before-reserve, 0rem));
59689
+ }
59690
+
59691
+ ${selector} [data-block][data-site-style-boundary-after] > :where([data-slot='section']) {
59692
+ padding-bottom: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-after-reserve, 0rem));
59693
+ }
59694
+
59695
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::before,
59696
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::before,
59697
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::before {
59698
+ content: '';
59699
+ position: absolute;
59700
+ left: 0;
59701
+ right: 0;
59702
+ top: 0;
59703
+ transform: translateY(-50%);
59704
+ z-index: 0;
59705
+ height: var(--site-style-boundary-height);
59706
+ background: var(--site-style-transition-from);
59707
+ pointer-events: none;
59639
59708
  }
59640
59709
 
59641
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after,
59642
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after,
59643
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
59710
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after,
59711
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after,
59712
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
59644
59713
  content: '';
59645
59714
  position: absolute;
59646
59715
  left: 0;
59647
59716
  right: 0;
59648
- bottom: -2px;
59717
+ top: 0;
59718
+ transform: translateY(-50%);
59649
59719
  z-index: 1;
59650
- height: calc(6rem + 2px);
59720
+ height: var(--site-style-boundary-height);
59651
59721
  pointer-events: none;
59652
59722
  }
59653
59723
 
@@ -59685,7 +59755,7 @@ ${selector} [data-style-group$='-to-brand-depth-band'] {
59685
59755
  --site-style-transition-to: rgb(var(--tb-primary-800));
59686
59756
  }
59687
59757
 
59688
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
59758
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
59689
59759
  /* Fallback for browsers without color-mix(). */
59690
59760
  background: linear-gradient(
59691
59761
  to bottom,
@@ -59701,30 +59771,37 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-sof
59701
59771
  );
59702
59772
  }
59703
59773
 
59704
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-long-']::after {
59705
- height: 10rem;
59774
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-long-'] {
59775
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-long")};
59706
59776
  }
59707
59777
 
59708
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-expansive-']::after {
59709
- height: 14rem;
59778
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-expansive-'] {
59779
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-expansive")};
59710
59780
  }
59711
59781
 
59712
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after {
59782
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after {
59783
+ height: calc(var(--site-style-boundary-height) + 2px);
59713
59784
  background: var(--site-style-transition-to);
59714
59785
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
59715
59786
  }
59716
59787
 
59717
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
59718
- height: calc(4.5rem + 2px);
59788
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-'] {
59789
+ --site-style-boundary-height: ${compactBoundaryHeight};
59790
+ }
59791
+
59792
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
59719
59793
  clip-path: polygon(0 34%, 100% 18%, 100% 100%, 0 100%);
59720
59794
  }
59721
59795
 
59722
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-steep-']::after {
59723
- height: calc(7rem + 2px);
59796
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-'] {
59797
+ --site-style-boundary-height: ${largeBoundaryHeight};
59798
+ }
59799
+
59800
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-']::after {
59724
59801
  clip-path: polygon(0 54%, 100% 0%, 100% 100%, 0 100%);
59725
59802
  }
59726
59803
 
59727
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after {
59804
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after {
59728
59805
  background: var(--site-style-transition-to);
59729
59806
  mask-image: url("${classicWaveTransitionMask}");
59730
59807
  mask-repeat: no-repeat;
@@ -59734,28 +59811,39 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-wav
59734
59811
  -webkit-mask-size: 100% 100%;
59735
59812
  }
59736
59813
 
59737
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
59814
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
59738
59815
  mask-image: url("${balancedWaveTransitionMask}");
59739
59816
  -webkit-mask-image: url("${balancedWaveTransitionMask}");
59740
59817
  }
59741
59818
 
59742
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
59743
- height: calc(4.5rem + 2px);
59819
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-'] {
59820
+ --site-style-boundary-height: ${compactBoundaryHeight};
59821
+ }
59822
+
59823
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
59744
59824
  mask-image: url("${gentleWaveTransitionMask}");
59745
59825
  -webkit-mask-image: url("${gentleWaveTransitionMask}");
59746
59826
  }
59747
59827
 
59748
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-bold-']::after {
59749
- height: calc(7rem + 2px);
59828
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-'] {
59829
+ --site-style-boundary-height: ${largeBoundaryHeight};
59830
+ }
59831
+
59832
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-']::after {
59750
59833
  mask-image: url("${boldWaveTransitionMask}");
59751
59834
  -webkit-mask-image: url("${boldWaveTransitionMask}");
59752
59835
  }
59753
59836
 
59754
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-drift-']::after {
59837
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-drift-']::after {
59755
59838
  mask-image: url("${driftWaveTransitionMask}");
59756
59839
  -webkit-mask-image: url("${driftWaveTransitionMask}");
59757
59840
  }`;
59758
59841
  }
59842
+ function requiredBoundaryHeightCss(transition) {
59843
+ const metrics = boundaryRuntimeMetricsForTransition(transition);
59844
+ if (!metrics) throw new Error(`Missing boundary runtime metrics for ${transition}`);
59845
+ return metrics.heightCss;
59846
+ }
59759
59847
  function svgDataUrl(svg) {
59760
59848
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
59761
59849
  }
@@ -61878,13 +61966,15 @@ function sourceLabel(source) {
61878
61966
  }
61879
61967
  //#endregion
61880
61968
  //#region ../blocks/src/PageRenderer.tsx
61881
- function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
61969
+ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
61882
61970
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
61883
61971
  dataContext?.imageResolveContext,
61884
61972
  dataContext?.mediaAssets,
61885
61973
  dataContext?.siteId,
61886
61974
  dataContext?.supabaseUrl
61887
61975
  ]);
61976
+ const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
61977
+ const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
61888
61978
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
61889
61979
  className: "rb-p-6 rb-caption",
61890
61980
  style: textColorStyle("mutedText"),
@@ -61896,6 +61986,17 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
61896
61986
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
61897
61987
  const blockPosition = pageBlockPosition(index, page.blocks.length);
61898
61988
  const blockKey = block.id ?? `${block.kind}-${index}`;
61989
+ const previousBlock = page.blocks[index - 1] ?? null;
61990
+ const nextBlock = page.blocks[index + 1] ?? null;
61991
+ const boundaryBefore = boundaryBetweenBlocks(previousBlock, block, boundaryByAdjacentBlockIds);
61992
+ const boundaryAfter = boundaryBetweenBlocks(block, nextBlock, boundaryByAdjacentBlockIds);
61993
+ const boundaryElement = renderBoundaryAfterBlock({
61994
+ block,
61995
+ nextBlock,
61996
+ blockKey,
61997
+ boundaryByAdjacentBlockIds,
61998
+ wrapBoundary
61999
+ });
61899
62000
  const cleanKind = block.kind.replace(/^block\./, "");
61900
62001
  const definition = getBlockDefinition(block.kind);
61901
62002
  const managesOwnWrapper = definition?.manifest.behaviours?.managesOwnWrapper;
@@ -61918,10 +62019,18 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
61918
62019
  imageResolveContext,
61919
62020
  previewAuthoring
61920
62021
  };
61921
- if (!shouldUseWrapper) return /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, blockKey);
62022
+ if (!shouldUseWrapper) {
62023
+ const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
62024
+ return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
62025
+ }
61922
62026
  const wrapperClassName = [`block-${cleanKind}`, wrapBlock ? "group relative" : null].filter(Boolean).join(" ");
61923
62027
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
61924
62028
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
62029
+ const transitionStyle = transitionCssVarsStyle(renderableContent);
62030
+ const blockStyle = mergeStyleObjects(transitionStyle, boundaryReserveCssVarsStyle({
62031
+ before: boundaryBefore,
62032
+ after: boundaryAfter
62033
+ }));
61925
62034
  const blockElement = /* @__PURE__ */ jsx("div", {
61926
62035
  className: wrapperClassName,
61927
62036
  "data-block": cleanKind,
@@ -61931,21 +62040,92 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
61931
62040
  "data-block-variant": variantKey ?? void 0,
61932
62041
  "data-block-look": blockLook,
61933
62042
  "data-page-block-position": blockPosition,
62043
+ "data-site-style-boundary-before": boundaryBefore?.metrics.size,
62044
+ "data-site-style-boundary-after": boundaryAfter?.metrics.size,
61934
62045
  "data-style-group": styleGroup,
62046
+ style: blockStyle,
61935
62047
  children: /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps })
61936
62048
  }, blockKey);
61937
- if (!isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
62049
+ if (boundaryElement) return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, boundaryElement] }, blockKey);
62050
+ if (usesRuntimeBoundaries || !isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
61938
62051
  return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, /* @__PURE__ */ jsx("div", {
61939
62052
  "aria-hidden": "true",
61940
62053
  "data-block-transition": "",
61941
62054
  "data-block-transition-for": block.id ?? blockKey,
61942
- "data-style-group": styleGroup
62055
+ "data-style-group": styleGroup,
62056
+ style: transitionStyle
61943
62057
  })] }, blockKey);
61944
62058
  }) });
61945
62059
  }
61946
62060
  function isSiteStyleTransitionStyleGroup(value) {
61947
62061
  return value?.startsWith("site-style-transition-") === true;
61948
62062
  }
62063
+ function boundaryMapForAdjacentBlockIds(boundaries) {
62064
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
62065
+ }
62066
+ function boundaryKey(previousBlockId, nextBlockId) {
62067
+ return `${previousBlockId}\u0000${nextBlockId}`;
62068
+ }
62069
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
62070
+ const previousBlockId = previousBlock?.id ?? null;
62071
+ const nextBlockId = nextBlock?.id ?? null;
62072
+ if (!previousBlockId || !nextBlockId) return null;
62073
+ return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
62074
+ }
62075
+ function renderBoundaryAfterBlock(input) {
62076
+ const previousBlockId = input.block.id;
62077
+ const nextBlockId = input.nextBlock?.id ?? null;
62078
+ if (!previousBlockId || !nextBlockId) return null;
62079
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
62080
+ if (!boundary) return null;
62081
+ const rendered = /* @__PURE__ */ jsx("div", {
62082
+ "aria-hidden": "true",
62083
+ "data-block-boundary": "",
62084
+ "data-boundary-id": boundary.boundaryId,
62085
+ "data-boundary-previous-block-id": boundary.previousBlockId,
62086
+ "data-boundary-next-block-id": boundary.nextBlockId,
62087
+ "data-style-group": boundary.styleGroup,
62088
+ style: boundaryCssVarsStyle(boundary)
62089
+ }, `${input.blockKey}:boundary`);
62090
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
62091
+ }
62092
+ function boundaryCssVarsStyle(boundary) {
62093
+ return {
62094
+ "--site-style-transition-from": boundary.cssVars.from,
62095
+ "--site-style-transition-to": boundary.cssVars.to
62096
+ };
62097
+ }
62098
+ function boundaryReserveCssVarsStyle(input) {
62099
+ const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
62100
+ const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
62101
+ if (!before && !after) return void 0;
62102
+ return {
62103
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
62104
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
62105
+ };
62106
+ }
62107
+ function boundaryReserveValueForTreatment(boundary) {
62108
+ return boundary.metrics.reserveCss;
62109
+ }
62110
+ function transitionCssVarsStyle(content) {
62111
+ const transitionStyles = isObjectRecord(content._transitionStyles) ? content._transitionStyles : null;
62112
+ const cssVars = isObjectRecord(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
62113
+ const from = typeof cssVars?.from === "string" ? cssVars.from : null;
62114
+ const to = typeof cssVars?.to === "string" ? cssVars.to : null;
62115
+ if (!from && !to) return void 0;
62116
+ return {
62117
+ ...from ? { "--site-style-transition-from": from } : {},
62118
+ ...to ? { "--site-style-transition-to": to } : {}
62119
+ };
62120
+ }
62121
+ function mergeStyleObjects(left, right) {
62122
+ if (!left) return right;
62123
+ if (!right) return left;
62124
+ return {
62125
+ ...left,
62126
+ ...right
62127
+ };
62128
+ }
61949
62129
  function pageBlockPosition(index, blockCount) {
61950
62130
  if (blockCount <= 1) return "only";
61951
62131
  if (index === 0) return "first";
@@ -63875,52 +64055,53 @@ const containerResponsiveThemeCss = `/*
63875
64055
 
63876
64056
  /* Semantic spacing tokens (replaces Tailwind maps in src/system/spacing.ts) */
63877
64057
  .rb-section-pad-none {
63878
- padding-top: 0;
63879
- padding-bottom: 0;
64058
+ --rb-section-pad-y: 0rem;
64059
+ padding-top: var(--rb-section-pad-y);
64060
+ padding-bottom: var(--rb-section-pad-y);
63880
64061
  }
63881
64062
  .rb-section-pad-compact {
63882
- padding-top: 1.5rem;
63883
- padding-bottom: 1.5rem;
64063
+ --rb-section-pad-y: 1.5rem;
64064
+ padding-top: var(--rb-section-pad-y);
64065
+ padding-bottom: var(--rb-section-pad-y);
63884
64066
  }
63885
64067
  .rb-section-pad-cozy {
63886
- padding-top: 2.5rem;
63887
- padding-bottom: 2.5rem;
64068
+ --rb-section-pad-y: 2.5rem;
64069
+ padding-top: var(--rb-section-pad-y);
64070
+ padding-bottom: var(--rb-section-pad-y);
63888
64071
  }
63889
64072
  .rb-section-pad-medium {
63890
- padding-top: 3rem;
63891
- padding-bottom: 3rem;
64073
+ --rb-section-pad-y: 3rem;
64074
+ padding-top: var(--rb-section-pad-y);
64075
+ padding-bottom: var(--rb-section-pad-y);
63892
64076
  }
63893
64077
  .rb-section-pad-comfortable {
63894
- padding-top: 4rem;
63895
- padding-bottom: 4rem;
64078
+ --rb-section-pad-y: 4rem;
64079
+ padding-top: var(--rb-section-pad-y);
64080
+ padding-bottom: var(--rb-section-pad-y);
63896
64081
  }
63897
64082
  .rb-section-pad-spacious {
63898
- padding-top: 5rem;
63899
- padding-bottom: 5rem;
64083
+ --rb-section-pad-y: 5rem;
64084
+ padding-top: var(--rb-section-pad-y);
64085
+ padding-bottom: var(--rb-section-pad-y);
63900
64086
  }
63901
64087
 
63902
64088
  @container rb-site (min-width: 640px) {
63903
64089
 
63904
64090
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
63905
64091
  .rb-section-pad-compact {
63906
- padding-top: 2rem;
63907
- padding-bottom: 2rem;
64092
+ --rb-section-pad-y: 2rem;
63908
64093
  }
63909
64094
  .rb-section-pad-cozy {
63910
- padding-top: 3.5rem;
63911
- padding-bottom: 3.5rem;
64095
+ --rb-section-pad-y: 3.5rem;
63912
64096
  }
63913
64097
  .rb-section-pad-medium {
63914
- padding-top: 4rem;
63915
- padding-bottom: 4rem;
64098
+ --rb-section-pad-y: 4rem;
63916
64099
  }
63917
64100
  .rb-section-pad-comfortable {
63918
- padding-top: 5rem;
63919
- padding-bottom: 5rem;
64101
+ --rb-section-pad-y: 5rem;
63920
64102
  }
63921
64103
  .rb-section-pad-spacious {
63922
- padding-top: 7rem;
63923
- padding-bottom: 7rem;
64104
+ --rb-section-pad-y: 7rem;
63924
64105
  }
63925
64106
  }
63926
64107
 
@@ -65310,30 +65491,122 @@ const containerResponsiveThemeCss = `/*
65310
65491
  :where(.theme-scope) .header-logo-text {
65311
65492
  font-size: 1.125rem; /* matches rb-text-lg */
65312
65493
  line-height: 1.75rem;
65494
+ margin-inline: -0.18em;
65495
+ padding-inline: 0.18em;
65313
65496
  transition: font-size 300ms var(--motion-ease, ease);
65314
65497
  }
65315
65498
 
65316
- /* Mobile: reduce site title size (~30%) to keep header compact */
65499
+ /* Centered variant uses larger title */
65500
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
65501
+ font-size: 1.25rem; /* matches rb-text-xl */
65502
+ line-height: 1.75rem;
65503
+ }
65504
+
65505
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
65506
+ font-size: 0.95rem;
65507
+ line-height: 1.5rem;
65508
+ }
65509
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
65510
+ font-size: 1.125rem;
65511
+ line-height: 1.75rem;
65512
+ }
65513
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
65514
+ font-size: 1.35rem;
65515
+ line-height: 1.9rem;
65516
+ }
65517
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
65518
+ font-size: 1.75rem;
65519
+ line-height: 2.25rem;
65520
+ }
65521
+
65522
+ :where(.theme-scope)
65523
+ .header-variant-centered
65524
+ .header-logo-size-compact
65525
+ .header-logo-text {
65526
+ font-size: 1.125rem;
65527
+ line-height: 1.75rem;
65528
+ }
65529
+ :where(.theme-scope)
65530
+ .header-variant-centered
65531
+ .header-logo-size-standard
65532
+ .header-logo-text {
65533
+ font-size: 1.25rem;
65534
+ line-height: 1.75rem;
65535
+ }
65536
+ :where(.theme-scope)
65537
+ .header-variant-centered
65538
+ .header-logo-size-generous
65539
+ .header-logo-text {
65540
+ font-size: 1.6rem;
65541
+ line-height: 2rem;
65542
+ }
65543
+ :where(.theme-scope)
65544
+ .header-variant-centered
65545
+ .header-logo-size-display
65546
+ .header-logo-text {
65547
+ font-size: 2.1rem;
65548
+ line-height: 2.5rem;
65549
+ }
65550
+
65551
+ /* Mobile: reduce site title size to keep header compact */
65317
65552
  @container rb-site (max-width: 767px) {
65318
65553
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
65319
- :where(.theme-scope) .header-logo-text {
65554
+ :where(.theme-scope) .header-logo-text,
65555
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
65320
65556
  font-size: 0.8rem;
65321
65557
  line-height: 1.25rem;
65322
65558
  }
65323
65559
 
65324
- :where(.theme-scope) .header-variant-centered .header-logo-text {
65560
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
65561
+ font-size: 0.75rem;
65562
+ line-height: 1.15rem;
65563
+ }
65564
+
65565
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
65566
+ font-size: 1rem;
65567
+ line-height: 1.4rem;
65568
+ }
65569
+
65570
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
65571
+ font-size: 1.25rem;
65572
+ line-height: 1.65rem;
65573
+ }
65574
+
65575
+ :where(.theme-scope) .header-variant-centered .header-logo-text,
65576
+ :where(.theme-scope)
65577
+ .header-variant-centered
65578
+ .header-logo-size-standard
65579
+ .header-logo-text {
65325
65580
  font-size: 0.875rem;
65326
65581
  line-height: 1.25rem;
65327
65582
  }
65583
+
65584
+ :where(.theme-scope)
65585
+ .header-variant-centered
65586
+ .header-logo-size-compact
65587
+ .header-logo-text {
65588
+ font-size: 0.8rem;
65589
+ line-height: 1.2rem;
65590
+ }
65591
+
65592
+ :where(.theme-scope)
65593
+ .header-variant-centered
65594
+ .header-logo-size-generous
65595
+ .header-logo-text {
65596
+ font-size: 1.125rem;
65597
+ line-height: 1.5rem;
65598
+ }
65599
+
65600
+ :where(.theme-scope)
65601
+ .header-variant-centered
65602
+ .header-logo-size-display
65603
+ .header-logo-text {
65604
+ font-size: 1.35rem;
65605
+ line-height: 1.75rem;
65606
+ }
65328
65607
  }
65329
65608
  }
65330
65609
 
65331
- /* Centered variant uses larger title */
65332
- :where(.theme-scope) .header-variant-centered .header-logo-text {
65333
- font-size: 1.25rem; /* matches rb-text-xl */
65334
- line-height: 1.75rem;
65335
- }
65336
-
65337
65610
  /* =================================================================
65338
65611
  Shrink on Scroll - Logo & Title
65339
65612
  ================================================================= */
@@ -74197,7 +74470,7 @@ z$1.object({ acceptExtraSiteCharge: z$1.boolean().optional() });
74197
74470
  //#region ../surfaces/src/index.ts
74198
74471
  const SURFACE_IDS = ["core", "macadamia"];
74199
74472
  const DEFAULT_SURFACE_ID = "core";
74200
- SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID);
74473
+ [...SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID)];
74201
74474
  //#endregion
74202
74475
  //#region ../api/src/url.ts
74203
74476
  /**
@@ -74746,6 +75019,7 @@ const VERTICAL_IDS = [
74746
75019
  "training_provider",
74747
75020
  "retreat_centre",
74748
75021
  "music_school",
75022
+ "voice_singing",
74749
75023
  "performing_arts_school",
74750
75024
  "community_wellbeing",
74751
75025
  "venue_event_space"
@@ -74798,6 +75072,11 @@ const VERTICAL_BOOKING_PRESETS = [
74798
75072
  preset("music_school.terms", "music_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date group courses."),
74799
75073
  preset("music_school.workshops", "music_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
74800
75074
  preset("music_school.performances", "music_school", "performance", "Performance", "Performances", "Concerts, recitals, showcases, or ticketed performances."),
75075
+ preset("voice_singing.lessons", "voice_singing", "appointment", "Voice session", "Voice sessions", "One-to-one singing lessons, voice coaching, or private practice sessions."),
75076
+ preset("voice_singing.classes", "voice_singing", "class", "Ongoing weekly session", "Ongoing weekly sessions", "Regular choirs, voice circles, community singing, or group practice."),
75077
+ preset("voice_singing.terms", "voice_singing", "course", "Singing term", "Singing terms", "Multi-week choir terms, voice courses, or fixed-date group programmes."),
75078
+ preset("voice_singing.workshops", "voice_singing", "workshop", "Workshop", "Workshops", "One-off singing workshops, voice journeys, or devotional singing sessions."),
75079
+ preset("voice_singing.performances", "voice_singing", "performance", "Performance", "Performances", "Choir concerts, sharing events, recitals, or community performances."),
74801
75080
  preset("performing_arts_school.classes", "performing_arts_school", "class", "Class", "Classes", "Regular group classes, rehearsals, or weekly sessions."),
74802
75081
  preset("performing_arts_school.terms", "performing_arts_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date course groups."),
74803
75082
  preset("performing_arts_school.workshops", "performing_arts_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
@@ -78541,6 +78820,7 @@ async function loadContentFromContentResponseWithDeps(deps, params) {
78541
78820
  ogImageId: pageRecord.ogImageId ?? null
78542
78821
  },
78543
78822
  page: pageOutline,
78823
+ runtimeBoundaries: pageData.runtimeBoundaries,
78544
78824
  theme: support.theme,
78545
78825
  siteId,
78546
78826
  ...support.customBlocks ? { customBlocks: support.customBlocks } : {},
@@ -78818,7 +79098,7 @@ function toPageHydrationBootstrapConfig(props) {
78818
79098
  mediaAssets: props.mediaAssets
78819
79099
  };
78820
79100
  }
78821
- 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 }) {
79101
+ 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 }) {
78822
79102
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
78823
79103
  return renderWithSdkThemeRuntime({
78824
79104
  themeRuntime,
@@ -78826,6 +79106,7 @@ function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolve
78826
79106
  children: /* @__PURE__ */ jsx(PageRenderer, {
78827
79107
  theme,
78828
79108
  page,
79109
+ runtimeBoundaries,
78829
79110
  themeTokens: sdkConfig?.theme?.palette ? {
78830
79111
  ...baseTokens,
78831
79112
  palette: {
@@ -80123,7 +80404,7 @@ var CircuitOpenError = class extends Error {
80123
80404
  * 1. This constant
80124
80405
  * 2. The "version" field in package.json
80125
80406
  */
80126
- const SDK_VERSION = "0.101.0";
80407
+ const SDK_VERSION = "0.103.0";
80127
80408
  //#endregion
80128
80409
  //#region src/next/content-load-failure.ts
80129
80410
  const SdkContentLoadError = RiverbankContentLoadError;
@@ -80583,6 +80864,8 @@ function createCatchAllPage(options) {
80583
80864
  content,
80584
80865
  dataContext: {
80585
80866
  contentEntry: content.dataContext.contentEntry,
80867
+ occurrenceContext,
80868
+ entrySubrouteContext,
80586
80869
  pageSurface: content.dataContext.pageSurface,
80587
80870
  subject: content.dataContext.subject,
80588
80871
  previewStage: preview ? "preview" : "published"