@riverbankcms/sdk 0.125.0 → 0.127.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 (177) hide show
  1. package/README.md +3 -1
  2. package/dist/{PreviewEditorSidebar-BezDOtQ7.mjs → PreviewEditorSidebar-BXtfF7tp.mjs} +122 -301
  3. package/dist/{PreviewEditorUI-CgSqmfo2.mjs → PreviewEditorUI-Dou73Q0K.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BH-3-jSj.mjs → PreviewQueryProvider-DgFDIwvK.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-Co3AHfj0.mjs → SdkPreviewModeRuntime-B0HPXr-l.mjs} +141 -63
  6. package/dist/{SiteChromeCustomizeContext-BHF-KANn.mjs → SiteChromeCustomizeContext-DZiDBAYu.mjs} +5330 -5841
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +1552 -202
  8. package/dist/_dts/api/src/common/envelope.d.ts +1 -1
  9. package/dist/_dts/api/src/contentRuntime.d.ts +1 -7
  10. package/dist/_dts/api/src/endpoints.d.ts +0 -7
  11. package/dist/_dts/api/src/sdk-event-upsert.d.ts +42 -0
  12. package/dist/_dts/api/src/sdkContracts.d.ts +11 -9
  13. package/dist/_dts/api/src/siteOperations.d.ts +18 -1
  14. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +1 -14
  15. package/dist/_dts/block-form/src/backend/store-backend.d.ts +2 -1
  16. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +1 -0
  17. package/dist/_dts/blocks/src/index.d.ts +3 -2
  18. package/dist/_dts/blocks/src/lib/media.d.ts +267 -0
  19. package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +0 -13
  20. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +15 -2
  21. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +4 -4
  22. package/dist/_dts/blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.d.ts +7 -0
  23. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  24. package/dist/_dts/content-editor/src/ui/blockValidationManifestRegistry.d.ts +17 -0
  25. package/dist/_dts/content-editor/src/ui/blockValidationView.d.ts +1 -1
  26. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +4 -0
  27. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +322 -171
  28. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +4 -0
  29. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockValidationManifests.d.ts +26 -0
  30. package/dist/_dts/editor-blocks/src/widgets/rich-text/imageInsert.d.ts +3 -3
  31. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -2
  32. package/dist/_dts/media-editor/src/context.d.ts +1 -2
  33. package/dist/_dts/media-editor/src/index.d.ts +3 -1
  34. package/dist/_dts/media-editor/src/mediaSelection.d.ts +32 -0
  35. package/dist/_dts/media-editor/src/types.d.ts +3 -1
  36. package/dist/_dts/media-editor/src/useMediaSelection.d.ts +26 -0
  37. package/dist/_dts/preview-next/src/client/index.d.ts +2 -0
  38. package/dist/_dts/preview-next/src/client/preview/HeaderMenuControls.d.ts +12 -0
  39. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +1 -2
  40. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +13 -3
  41. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +7 -2
  42. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +6 -60
  43. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +3 -13
  44. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +8 -100
  45. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +8 -0
  46. package/dist/_dts/preview-next/src/client/preview/previewThemeRoles.d.ts +15 -0
  47. package/dist/_dts/preview-next/src/client/preview/siteChromeCustomizeTypes.d.ts +54 -0
  48. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +13 -3
  49. package/dist/_dts/preview-next/src/client/preview/siteChromeNavQuickControlHistory.d.ts +3 -0
  50. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +6 -3
  51. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +1 -4
  52. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -15
  53. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +11 -21
  54. package/dist/_dts/sdk/src/cli/commands/event.d.ts +2 -2
  55. package/dist/_dts/sdk/src/cli/commands/eventOccurrenceSchedule.d.ts +12 -0
  56. package/dist/_dts/sdk/src/cli/commands/push/pushAllExtras.d.ts +6 -0
  57. package/dist/_dts/sdk/src/cli/commands/style.d.ts +1 -1
  58. package/dist/_dts/sdk/src/cli/content/legacyEventScheduleShapeError.d.ts +5 -0
  59. package/dist/_dts/sdk/src/cli/content/localEventSchedule.d.ts +17 -0
  60. package/dist/_dts/sdk/src/cli/content/reader.d.ts +5 -10
  61. package/dist/_dts/sdk/src/cli/migrations/events.d.ts +1 -1
  62. package/dist/_dts/sdk/src/cli/site-commands/eventScheduleCompiler.d.ts +24 -0
  63. package/dist/_dts/sdk/src/client/management/http.d.ts +1 -1
  64. package/dist/_dts/sdk/src/client/management/types.d.ts +3 -28
  65. package/dist/_dts/sdk/src/config/index.d.ts +1 -1
  66. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -20
  67. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -1
  68. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -2
  69. package/dist/_dts/sdk/src/version.d.ts +1 -1
  70. package/dist/_dts/site-commands/src/commandContract.d.ts +33 -5
  71. package/dist/_dts/site-commands/src/commandDomain.d.ts +2 -2
  72. package/dist/_dts/site-commands/src/commands.d.ts +38 -9
  73. package/dist/_dts/site-commands/src/siteStyleCommandSchema.d.ts +28 -1
  74. package/dist/_dts/site-commands/src/siteStyleSelectionSchemaBuilder.d.ts +4 -4
  75. package/dist/_dts/theme-core/src/buttons/effects/presets/background.d.ts +1 -1
  76. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +0 -18
  77. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -3
  78. package/dist/_dts/theme-core/src/header/containerSchema.d.ts +20 -0
  79. package/dist/_dts/theme-core/src/header/generateHeaderCss.d.ts +1 -1
  80. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +14 -0
  81. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +3 -0
  82. package/dist/_dts/theme-core/src/header/paintTargets.d.ts +25 -0
  83. package/dist/_dts/theme-core/src/header/scrollTreatment.d.ts +11 -0
  84. package/dist/_dts/theme-core/src/header/surfaceRules.d.ts +9 -0
  85. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +15 -0
  86. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  87. package/dist/_dts/theme-core/src/palette/concretePalette.d.ts +20 -0
  88. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +2 -17
  89. package/dist/_dts/theme-core/src/palette/index.d.ts +1 -6
  90. package/dist/_dts/theme-core/src/palette/schema.d.ts +39 -0
  91. package/dist/_dts/theme-core/src/schema.d.ts +105 -45
  92. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +3 -51
  93. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +4 -11
  94. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +3 -51
  95. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +32 -0
  96. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +19 -106
  97. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +22 -0
  98. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +2 -0
  99. package/dist/_dts/theme-core/src/site-styles/headerStyleParts.d.ts +4 -0
  100. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  101. package/dist/_dts/theme-core/src/site-styles/lookOptionGroups.d.ts +24 -0
  102. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +1 -2
  103. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +4 -22
  104. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorOptions.d.ts +21 -0
  105. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +5 -7
  106. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +5 -6
  107. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +4 -1
  108. package/dist/cli/index.mjs +1583 -1601
  109. package/dist/cli/init-docs/content/cli-reference.md +6 -3
  110. package/dist/cli/init-docs/content/content-management.md +24 -13
  111. package/dist/client/{DiscountCodeDisclosure-CyPpekBp.mjs → DiscountCodeDisclosure-BDFRp8Y7.mjs} +1 -1
  112. package/dist/client/{EventCombined.client-zywit-60.mjs → EventCombined.client-DJgF1_lf.mjs} +2 -2
  113. package/dist/client/{EventListing.client-J2nLhkKT.mjs → EventListing.client-CnWGNjOr.mjs} +2 -2
  114. package/dist/client/{LeafletStaticMap-CSubXWt6.mjs → LeafletStaticMap-BISs9Bl7.mjs} +1 -1
  115. package/dist/client/{MagicLinkForm-DDLIfiq9.mjs → MagicLinkForm-b5E_HoG9.mjs} +1 -1
  116. package/dist/client/{StepIndicator-DE8EvHIp.mjs → StepIndicator-D8gVYkK-.mjs} +2 -2
  117. package/dist/client/{accordion-Ct5T5NiA.mjs → accordion-DFDajgDz.mjs} +1 -1
  118. package/dist/client/{bookingForm-DMxtLPxw.mjs → bookingForm-Bdqj9-52.mjs} +5 -6
  119. package/dist/client/bookings.mjs +315 -46
  120. package/dist/client/{carousel--FMqgvob.mjs → carousel-Cvqf-kN8.mjs} +1 -1
  121. package/dist/client/{cart-BKX1bWiU.mjs → cart-CuH2TJXP.mjs} +3 -3
  122. package/dist/client/{checkout-B_jxi4WW.mjs → checkout-CMNPpejZ.mjs} +3 -3
  123. package/dist/client/client.mjs +1381 -1427
  124. package/dist/client/{courseRegistration-DH4MlkRD.mjs → courseRegistration-DTEYWL6Z.mjs} +6 -7
  125. package/dist/client/{eventCalendar-BQILwAcL.mjs → eventCalendar-BW-XoxZ0.mjs} +4 -4
  126. package/dist/client/{eventCombined-DFFW_Vmo.mjs → eventCombined-Bpn7s0y9.mjs} +2 -2
  127. package/dist/client/{eventDetails-B045CTSJ.mjs → eventDetails-D2uUSTMH.mjs} +3 -3
  128. package/dist/client/{eventListing-BDMYNVzS.mjs → eventListing-CVr1c094.mjs} +2 -2
  129. package/dist/client/{eventRegistration-CQ2-BSnB.mjs → eventRegistration-Dv4AvkMw.mjs} +30 -22
  130. package/dist/client/{form-DJKuyZgN.mjs → form-DxdKf9fs.mjs} +1 -1
  131. package/dist/client/{headerSection-DeTjfiDo.mjs → headerSection-BaXI5Sro.mjs} +2 -2
  132. package/dist/client/hooks.mjs +851 -976
  133. package/dist/client/{locationMap-i2wDA8gB.mjs → locationMap-BEtW2fKz.mjs} +2 -2
  134. package/dist/client/{newsletterForm-DKiueauk.mjs → newsletterForm-BKKs0S4R.mjs} +1 -1
  135. package/dist/client/{pricing-C01J3Epx.mjs → pricing-ClkqcElA.mjs} +1 -1
  136. package/dist/client/{productDetail-Dfc1sZaX.mjs → productDetail-H-ru8dyy.mjs} +3 -3
  137. package/dist/client/{productList-BXbvXWTF.mjs → productList-Buyi5c0C.mjs} +3 -3
  138. package/dist/client/{propsDecoder-CIR5DQ1l.mjs → propsDecoder-BF7i6Ijg.mjs} +293 -65
  139. package/dist/client/rendering/client.mjs +1145 -1190
  140. package/dist/client/rendering/islands.mjs +18 -18
  141. package/dist/client/rendering.mjs +1257 -1298
  142. package/dist/client/{useDiscountCodeUi-Bcyh4508.mjs → scrollToBlock-D_7t8yWb.mjs} +18 -2
  143. package/dist/client/{shop-BbNwPKM-.mjs → shop-CF7SZQNX.mjs} +5 -6
  144. package/dist/client/{shop-commerce-XO-XMFEt.mjs → shop-commerce-DA7_Rq5p.mjs} +4 -4
  145. package/dist/client/{shop-commerce-store-Byh6OUGK.mjs → shop-commerce-store-BmLqW7Gh.mjs} +1 -1
  146. package/dist/client/{shopShared-Bbq39mwr.mjs → shopShared-WL-E1znM.mjs} +2 -2
  147. package/dist/client/{useEventFilters-C8OOJ3el.mjs → useEventFilters-rc8VLeLV.mjs} +2 -2
  148. package/dist/client/{usePolling-CyJVo9kF.mjs → usePolling-1ncrfd4S.mjs} +2 -2
  149. package/dist/preview-next/before-render.mjs +0 -7
  150. package/dist/preview-next/client/runtime.mjs +4 -4
  151. package/dist/preview-next/middleware.mjs +0 -7
  152. package/dist/{previewAuthStore-CJX21dGi.mjs → previewAuthStore-Dev9CdG9.mjs} +0 -7
  153. package/dist/{sdk-runtime-BGhyuE-E.mjs → sdk-runtime-BnrCCFJq.mjs} +2 -2
  154. package/dist/{separator-BFs-Kmv5.mjs → separator-CFvBx2yl.mjs} +1 -1
  155. package/dist/server/components.mjs +1389 -1489
  156. package/dist/server/config-validation.mjs +851 -976
  157. package/dist/server/config.mjs +851 -976
  158. package/dist/server/data.mjs +851 -976
  159. package/dist/server/index.mjs +1 -8
  160. package/dist/server/next.mjs +1393 -1500
  161. package/dist/server/page-converter.mjs +851 -976
  162. package/dist/server/prebuild.mjs +1 -1
  163. package/dist/server/rendering/server.mjs +1346 -1446
  164. package/dist/server/rendering.mjs +1390 -1490
  165. package/dist/server/routing.mjs +939 -1041
  166. package/dist/server/server.mjs +852 -984
  167. package/dist/server/theme-bridge.mjs +322 -279
  168. package/dist/server/theme.mjs +277 -33
  169. package/package.json +1 -1
  170. package/dist/_dts/editor-blocks/src/widgets/rich-text/ensureRichTextImageAssetIdentifier.d.ts +0 -8
  171. package/dist/_dts/theme-core/src/palette/editorState.d.ts +0 -75
  172. package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +0 -64
  173. package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +0 -81
  174. package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +0 -75
  175. package/dist/_dts/theme-core/src/palette/selection.d.ts +0 -74
  176. package/dist/_dts/theme-core/src/palette/sitePalettePersistence.d.ts +0 -34
  177. package/dist/client/scrollToBlock-C86BYkyV.mjs +0 -17
@@ -6205,13 +6205,6 @@ const API_ENDPOINTS$1 = {
6205
6205
  auth: "user",
6206
6206
  responseKind: "json"
6207
6207
  },
6208
- listSiteThemePalettes: {
6209
- path: "/sites/{siteId}/theme/palettes",
6210
- method: "GET",
6211
- auth: "user",
6212
- errors: [],
6213
- responseKind: "json"
6214
- },
6215
6208
  createSiteFontUploadUrl: {
6216
6209
  path: "/sites/{siteId}/fonts/upload-url",
6217
6210
  method: "POST",
@@ -7485,7 +7478,7 @@ var init_demo_runtime = __esmMin((() => {}));
7485
7478
  var init_collections = __esmMin((() => {}));
7486
7479
  //#endregion
7487
7480
  //#region ../core/src/assert-never.ts
7488
- function assertNever$25(value, message = "Unexpected variant") {
7481
+ function assertNever$24(value, message = "Unexpected variant") {
7489
7482
  throw new Error(`${message}: ${String(value)}`);
7490
7483
  }
7491
7484
  var init_assert_never = __esmMin((() => {}));
@@ -7597,7 +7590,7 @@ function formatCoursePriceDisplayLabel(display, options) {
7597
7590
  case "exact": return `Course (${formatCurrencyAmount(display.amount, display.currency, options)})`;
7598
7591
  case "from": return `Course (From ${formatCurrencyAmount(display.amount, display.currency, options)})`;
7599
7592
  case "range": return `Course (${formatCurrencyAmount(display.minAmount, display.currency, options)} - ${formatCurrencyAmount(display.maxAmount, display.currency, options)})`;
7600
- default: return assertNever$25(display);
7593
+ default: return assertNever$24(display);
7601
7594
  }
7602
7595
  }
7603
7596
  /**
@@ -7617,7 +7610,7 @@ function formatBookingPriceDisplay(display, options = {}) {
7617
7610
  case "unavailable": return "Pricing unavailable";
7618
7611
  case "external": return display.label;
7619
7612
  case "course": return formatCoursePriceDisplayLabel(display.display, options);
7620
- default: return assertNever$25(display);
7613
+ default: return assertNever$24(display);
7621
7614
  }
7622
7615
  }
7623
7616
  /** Render an event's price directly from its pricing value. */
@@ -7696,10 +7689,10 @@ function resolveFlexibleBalanceDueAt(input) {
7696
7689
  switch (input.dueDateRule.kind) {
7697
7690
  case "relative_to_start_date": return subtractDaysFromIso(input.bookingStartAt, input.dueDateRule.daysBeforeStart);
7698
7691
  case "fixed_calendar_date": return input.dueDateRule.dueAt;
7699
- default: return assertNever$24(input.dueDateRule);
7692
+ default: return assertNever$23(input.dueDateRule);
7700
7693
  }
7701
7694
  }
7702
- function assertNever$24(value) {
7695
+ function assertNever$23(value) {
7703
7696
  throw new Error(`Unexpected value: ${String(value)}`);
7704
7697
  }
7705
7698
  var init_booking_flexible_balance = __esmMin((() => {
@@ -7713,7 +7706,7 @@ function isDepositBearingBookingInstalmentPlan(plan) {
7713
7706
  case "deposit_plus_one_remainder":
7714
7707
  case "deposit_plus_scheduled_instalments": return true;
7715
7708
  case "equal_scheduled_instalments": return false;
7716
- default: return assertNever$23(plan);
7709
+ default: return assertNever$22(plan);
7717
7710
  }
7718
7711
  }
7719
7712
  function getBookingInstalmentDepositRefundability(plan) {
@@ -7739,7 +7732,7 @@ function addIntervalPreservingMonthAnchor(isoString, intervalCount, intervalUnit
7739
7732
  date.setUTCDate(date.getUTCDate() + intervalCount * 7);
7740
7733
  return date.toISOString();
7741
7734
  case "month": return addMonthsPreservingAnchorDay(date, intervalCount).toISOString();
7742
- default: return assertNever$23(intervalUnit);
7735
+ default: return assertNever$22(intervalUnit);
7743
7736
  }
7744
7737
  }
7745
7738
  function getBookingInstalmentPlanIntervalCount(plan) {
@@ -7747,7 +7740,7 @@ function getBookingInstalmentPlanIntervalCount(plan) {
7747
7740
  case "deposit_plus_one_remainder": return plan.remainderDueCount;
7748
7741
  case "deposit_plus_scheduled_instalments":
7749
7742
  case "equal_scheduled_instalments": return plan.intervalCount;
7750
- default: return assertNever$23(plan);
7743
+ default: return assertNever$22(plan);
7751
7744
  }
7752
7745
  }
7753
7746
  function omitZeroAmountFutureRows(rows) {
@@ -7763,7 +7756,7 @@ function addMonthsPreservingAnchorDay(date, intervalCount) {
7763
7756
  nextMonth.setUTCDate(Math.min(anchorDay, lastDayOfTargetMonth));
7764
7757
  return nextMonth;
7765
7758
  }
7766
- function assertNever$23(value) {
7759
+ function assertNever$22(value) {
7767
7760
  throw new Error(`Unexpected value: ${String(value)}`);
7768
7761
  }
7769
7762
  var init_booking_instalments = __esmMin((() => {}));
@@ -8405,7 +8398,7 @@ function navigationAuthoringLinkToCommandLink(link) {
8405
8398
  badge: link.badge,
8406
8399
  label: link.label
8407
8400
  };
8408
- default: return assertNever$25(link);
8401
+ default: return assertNever$24(link);
8409
8402
  }
8410
8403
  }
8411
8404
  function portalLabelsForCommand(labels) {
@@ -8448,7 +8441,7 @@ function navigationReadLinkToLocalLink(item) {
8448
8441
  badge: link.badge,
8449
8442
  label: link.label
8450
8443
  };
8451
- default: return assertNever$25(link);
8444
+ default: return assertNever$24(link);
8452
8445
  }
8453
8446
  }
8454
8447
  function internalNavigationLinkToLocalLink(item) {
@@ -9498,7 +9491,7 @@ const linkSchema = z$1.union([
9498
9491
  //#endregion
9499
9492
  //#region ../blocks/src/system/node/schema.ts
9500
9493
  var transformStepSchema, bindingPathSchema, bindingSchema, repeatSchema, conditionalAuthoringPresenceSchema, conditionSchema, dataScopeSchema, nodePropsSchema, nodeSchema, nodeTreeSchema, NodeSchema, NodeTreeSchema;
9501
- var init_schema$2 = __esmMin((() => {
9494
+ var init_schema$3 = __esmMin((() => {
9502
9495
  transformStepSchema = z$1.object({
9503
9496
  id: z$1.string().min(1, "Transform requires an identifier"),
9504
9497
  options: z$1.record(z$1.string(), z$1.unknown()).optional()
@@ -9702,7 +9695,7 @@ var init_validation_constants = __esmMin((() => {
9702
9695
  //#endregion
9703
9696
  //#region ../blocks/src/system/node/index.ts
9704
9697
  var init_node = __esmMin((() => {
9705
- init_schema$2();
9698
+ init_schema$3();
9706
9699
  init_typeBasedLayout();
9707
9700
  init_validation_constants();
9708
9701
  }));
@@ -9853,7 +9846,7 @@ function createSdkSelectField(input) {
9853
9846
  }));
9854
9847
  }
9855
9848
  var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, DEFAULT_MEDIA_FIELD_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, visibleWhenPredicateSchema, visibleWhenSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, inlineTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens$1, colorTokens$1, spacingTokens$1, radiusTokens$1, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum, blockContentSourceKinds, blockContentSourceSchema;
9856
- var init_schema$1 = __esmMin((() => {
9849
+ var init_schema$2 = __esmMin((() => {
9857
9850
  init_node();
9858
9851
  init_repeaterGrid();
9859
9852
  init_presets$2();
@@ -10440,7 +10433,7 @@ var init_schema$1 = __esmMin((() => {
10440
10433
  }));
10441
10434
  //#endregion
10442
10435
  //#region ../blocks/src/system/inlineText.ts
10443
- init_schema$1();
10436
+ init_schema$2();
10444
10437
  const inlineTextMarkSchema = z$1.discriminatedUnion("kind", [
10445
10438
  z$1.object({ kind: z$1.literal("strong") }),
10446
10439
  z$1.object({ kind: z$1.literal("emphasis") }),
@@ -11735,8 +11728,7 @@ var init_typeGuards = __esmMin((() => {}));
11735
11728
  function isRichTextDoc(value) {
11736
11729
  return RichTextDocSchema.safeParse(value).success;
11737
11730
  }
11738
- var TipTapMarkSchema, TipTapNodeSchema, RichTextDocSchema;
11739
- var init_richTextSchema = __esmMin((() => {
11731
+ var TipTapMarkSchema, TipTapNodeSchema, RichTextDocSchema, init_richTextSchema = __esmMin((() => {
11740
11732
  init_typeGuards();
11741
11733
  TipTapMarkSchema = z$1.object({
11742
11734
  type: z$1.string().min(1),
@@ -11777,18 +11769,110 @@ var init_richTextSchema = __esmMin((() => {
11777
11769
  type: z$1.literal("doc"),
11778
11770
  content: z$1.array(TipTapNodeSchema)
11779
11771
  }).strict();
11772
+ })), PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema$1, rotationSchema$1, rectSchema$1, aspectCropSchema$1, transformSchema$1, mediaPosterSchema, mediaBaseSchema, mediaIdentifierSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema$1, persistableMediaBaseSchema;
11773
+ var init_media$2 = __esmMin((() => {
11774
+ init_src$2();
11775
+ PUBLIC_DOWNLOAD_MEDIA_TYPES = [
11776
+ "document",
11777
+ "spreadsheet",
11778
+ "archive",
11779
+ "audio"
11780
+ ];
11781
+ hotspotSchema$1 = z.object({
11782
+ x: z.number().min(0).max(1),
11783
+ y: z.number().min(0).max(1),
11784
+ radius: z.number().optional()
11785
+ });
11786
+ rotationSchema$1 = z.union([
11787
+ z.literal(0),
11788
+ z.literal(90),
11789
+ z.literal(180),
11790
+ z.literal(270)
11791
+ ]);
11792
+ rectSchema$1 = z.tuple([
11793
+ z.number(),
11794
+ z.number(),
11795
+ z.number(),
11796
+ z.number()
11797
+ ]);
11798
+ aspectCropSchema$1 = z.object({
11799
+ aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
11800
+ rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema$1.optional()),
11801
+ hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema$1.optional()),
11802
+ rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema$1.optional())
11803
+ });
11804
+ transformSchema$1 = z.object({
11805
+ aspectCrops: z.preprocess((value) => {
11806
+ if (!value || typeof value !== "object" || Array.isArray(value)) return;
11807
+ return value;
11808
+ }, z.record(z.string(), aspectCropSchema$1.catch({}))).optional(),
11809
+ rect: rectSchema$1.optional(),
11810
+ hotspot: hotspotSchema$1.optional(),
11811
+ rotation: rotationSchema$1.optional()
11812
+ });
11813
+ mediaPosterSchema = z.discriminatedUnion("tag", [z.object({
11814
+ tag: z.literal("storage"),
11815
+ assetId: z.string().optional(),
11816
+ storageBucket: z.string().min(1),
11817
+ storagePath: z.string().min(1)
11818
+ }), z.object({
11819
+ tag: z.literal("external-src"),
11820
+ assetId: z.string().optional(),
11821
+ src: z.string().url()
11822
+ })]);
11823
+ mediaBaseSchema = z.object({
11824
+ purpose: z.string().optional(),
11825
+ placeholder: z.boolean().default(true).optional(),
11826
+ assetId: z.string().optional(),
11827
+ identifier: z.string().optional(),
11828
+ src: z.string().optional(),
11829
+ alt: z.string().optional(),
11830
+ filename: z.string().optional(),
11831
+ mimeType: z.string().optional(),
11832
+ width: z.number().optional(),
11833
+ height: z.number().optional(),
11834
+ storageBucket: z.string().optional(),
11835
+ storagePath: z.string().optional(),
11836
+ poster: mediaPosterSchema.optional(),
11837
+ transform: transformSchema$1.optional()
11838
+ });
11839
+ mediaIdentifierSchema = z.string().trim().min(1).brand();
11840
+ imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
11841
+ videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
11842
+ audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
11843
+ documentMediaSchema = mediaBaseSchema.extend({ type: z.literal("document") });
11844
+ spreadsheetMediaSchema = mediaBaseSchema.extend({ type: z.literal("spreadsheet") });
11845
+ archiveMediaSchema = mediaBaseSchema.extend({ type: z.literal("archive") });
11846
+ mediaSchema$1 = z.discriminatedUnion("type", [
11847
+ imageMediaSchema,
11848
+ videoMediaSchema,
11849
+ audioMediaSchema,
11850
+ documentMediaSchema,
11851
+ spreadsheetMediaSchema,
11852
+ archiveMediaSchema
11853
+ ]);
11854
+ persistableMediaBaseSchema = mediaBaseSchema.extend({ identifier: mediaIdentifierSchema });
11855
+ z.discriminatedUnion("type", [
11856
+ persistableMediaBaseSchema.extend({ type: z.literal("image") }),
11857
+ persistableMediaBaseSchema.extend({ type: z.literal("video") }),
11858
+ persistableMediaBaseSchema.extend({ type: z.literal("audio") }),
11859
+ persistableMediaBaseSchema.extend({ type: z.literal("document") }),
11860
+ persistableMediaBaseSchema.extend({ type: z.literal("spreadsheet") }),
11861
+ persistableMediaBaseSchema.extend({ type: z.literal("archive") })
11862
+ ]);
11780
11863
  }));
11781
11864
  //#endregion
11782
11865
  //#region ../blocks/src/system/manifest/fieldValidation/index.ts
11783
11866
  init_src$2();
11784
11867
  init_richTextSchema();
11868
+ init_media$2();
11785
11869
  const TEL_RE = /^[+()0-9\s-]{3,}$/;
11786
11870
  const SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
11787
11871
  const ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
11788
11872
  const DATE_PATTERN = /^(?<year>[1-9]\d{3})-(?<month>\d{2})-(?<day>\d{2})$/;
11789
11873
  const TIME_PATTERN = /^(?<hours>[01]\d|2[0-3]):(?<minutes>[0-5]\d)$/;
11790
11874
  const DATETIME_PATTERN = /^(?<date>[1-9]\d{3}-\d{2}-\d{2})T(?<time>(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d)(?:\.\d+)?(?<offset>Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/;
11791
- function assertNever$17(value) {
11875
+ function assertNever$16(value) {
11792
11876
  throw new Error(`Unhandled field validation variant: ${JSON.stringify(value)}`);
11793
11877
  }
11794
11878
  function validationContext(options = {}) {
@@ -11841,7 +11925,7 @@ function fieldIssueToMessage(issue) {
11841
11925
  case "invalidMedia": return `${issue.label} must be a media object with an identifier`;
11842
11926
  case "invalidLink": return `${issue.label} must be a valid link`;
11843
11927
  case "invalidReference": return `${issue.label} must reference a valid item`;
11844
- default: return assertNever$17(issue);
11928
+ default: return assertNever$16(issue);
11845
11929
  }
11846
11930
  }
11847
11931
  function pluralize(label, count) {
@@ -11961,7 +12045,7 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
11961
12045
  case "presetOrCustom":
11962
12046
  case "contentTypeSelect":
11963
12047
  case "entryPicker": return makePlan("passthrough", "unknown", field, path, false, []);
11964
- default: return assertNever$17(field);
12048
+ default: return assertNever$16(field);
11965
12049
  }
11966
12050
  }
11967
12051
  function deriveFieldValidationPlans(fields, parentPath = []) {
@@ -12036,7 +12120,7 @@ function resolveSelectConstraintSource(field) {
12036
12120
  kind: "runtime",
12037
12121
  source: source.kind
12038
12122
  };
12039
- default: return assertNever$17(source);
12123
+ default: return assertNever$16(source);
12040
12124
  }
12041
12125
  }
12042
12126
  function normalizeStoredContentValues(plans, content, options = {}) {
@@ -12055,7 +12139,7 @@ function allGroupChildPlans(plan) {
12055
12139
  switch (plan.childSelection.kind) {
12056
12140
  case "all": return plan.childSelection.fields;
12057
12141
  case "discriminatedTabs": return plan.childSelection.tabs.flatMap((tab) => tab.fields);
12058
- default: return assertNever$17(plan.childSelection);
12142
+ default: return assertNever$16(plan.childSelection);
12059
12143
  }
12060
12144
  }
12061
12145
  function selectedGroupChildPlans(plan, value) {
@@ -12069,7 +12153,7 @@ function canonicalizeFieldValueForWrite(plan, value) {
12069
12153
  case "media": {
12070
12154
  if (!isPlainObject$4(value)) return value;
12071
12155
  const canonical = { ...value };
12072
- if (typeof canonical.identifier === "string" && canonical.identifier.trim().length > 0) deleteEnvSpecificKeys(canonical);
12156
+ if (mediaIdentifierSchema.safeParse(canonical.identifier).success) deleteEnvSpecificKeys(canonical);
12073
12157
  return canonical;
12074
12158
  }
12075
12159
  case "group": return canonicalizeObjectForWrite(selectedGroupChildPlans(plan, value), value);
@@ -12088,7 +12172,7 @@ function canonicalizeFieldValueForWrite(plan, value) {
12088
12172
  case "link":
12089
12173
  case "select":
12090
12174
  case "passthrough": return value;
12091
- default: return assertNever$17(plan);
12175
+ default: return assertNever$16(plan);
12092
12176
  }
12093
12177
  }
12094
12178
  function canonicalizeObjectForWrite(plans, value) {
@@ -12114,7 +12198,7 @@ function normalizeStoredFieldValueWithContext(plan, value, ctx) {
12114
12198
  case "link":
12115
12199
  case "select":
12116
12200
  case "passthrough": return normalizeFieldValue(plan, value, ctx);
12117
- default: return assertNever$17(plan);
12201
+ default: return assertNever$16(plan);
12118
12202
  }
12119
12203
  }
12120
12204
  function normalizeStoredObjectChildren(children, value, ctx) {
@@ -12151,7 +12235,7 @@ function normalizeFieldValue(plan, value, ctx) {
12151
12235
  case "select":
12152
12236
  case "passthrough": return value;
12153
12237
  case "media": return value;
12154
- default: return assertNever$17(plan);
12238
+ default: return assertNever$16(plan);
12155
12239
  }
12156
12240
  }
12157
12241
  function normalizeObjectChildren(children, value, ctx) {
@@ -12164,7 +12248,7 @@ function normalizeObjectChildren(children, value, ctx) {
12164
12248
  function normalizeInlineTextFallbacks(plans, values, ctx) {
12165
12249
  for (const plan of plans) {
12166
12250
  if (plan.kind !== "inlineText" || !plan.plainTextFallbackPath) continue;
12167
- if (!isMissingForPlan(plan, values[plan.fieldId])) continue;
12251
+ if (!isMissingForPlan(plan, values[plan.fieldId]) && !(ctx.allowIncomplete && !parseInlineTextFromUnknown(values[plan.fieldId]).ok)) continue;
12168
12252
  const fallback = getAtFieldPath(values, plan.plainTextFallbackPath);
12169
12253
  if (typeof fallback !== "string" || fallback.trim().length === 0) continue;
12170
12254
  values[plan.fieldId] = normalizeFieldValue(plan, plainTextToInlineText(fallback), ctx);
@@ -12205,12 +12289,12 @@ function validateNormalizedFieldValue(plan, value, ctx) {
12205
12289
  case "select": return validateSelectPlan(plan, value);
12206
12290
  case "richText": return isValidRichTextDoc(value) ? [] : [issue(plan, "invalidRichText")];
12207
12291
  case "inlineText": return validateInlineTextPlan(plan, value);
12208
- case "media": return isPlainObject$4(value) && typeof value.identifier === "string" && value.identifier.trim().length > 0 && (value.type === void 0 || typeof value.type === "string" && plan.allowedMediaTypes.includes(value.type)) ? [] : [issue(plan, "invalidMedia")];
12292
+ case "media": return isPlainObject$4(value) && mediaIdentifierSchema.safeParse(value.identifier).success && (value.type === void 0 || typeof value.type === "string" && plan.allowedMediaTypes.includes(value.type)) ? [] : [issue(plan, "invalidMedia")];
12209
12293
  case "link": return linkSchema.safeParse(value).success ? [] : [issue(plan, "invalidLink")];
12210
12294
  case "repeater": return validateRepeaterPlan(plan, value, ctx);
12211
12295
  case "group": return validateGroupPlan(plan, value, ctx);
12212
12296
  case "passthrough": return [];
12213
- default: return assertNever$17(plan);
12297
+ default: return assertNever$16(plan);
12214
12298
  }
12215
12299
  }
12216
12300
  function shouldRequireValue(plan, value, ctx) {
@@ -12252,7 +12336,7 @@ function validateStringConstraint(plan, constraint, value) {
12252
12336
  case "timeFormat": return typeof value === "string" && isValidTimeString(value) ? [] : [issue(plan, "invalidTime")];
12253
12337
  case "datetimeFormat": return typeof value === "string" && isValidDateTimeInstantString(value) ? [] : [issue(plan, "invalidDateTime")];
12254
12338
  case "slugFormat": return typeof value === "string" && SLUG_PATTERN.test(value) ? [] : [issue(plan, "invalidSlug")];
12255
- default: return assertNever$17(constraint);
12339
+ default: return assertNever$16(constraint);
12256
12340
  }
12257
12341
  }
12258
12342
  function isValidIconPickerValue(value) {
@@ -12271,7 +12355,7 @@ function validateNumberConstraint(plan, constraint, value) {
12271
12355
  case "numberType": return [];
12272
12356
  case "numberMin": return value < constraint.minimum ? [issue(plan, "tooSmall", { minimum: constraint.minimum })] : [];
12273
12357
  case "numberMax": return value > constraint.maximum ? [issue(plan, "tooLarge", { maximum: constraint.maximum })] : [];
12274
- default: return assertNever$17(constraint);
12358
+ default: return assertNever$16(constraint);
12275
12359
  }
12276
12360
  }
12277
12361
  function validateSelectPlan(plan, value) {
@@ -12293,7 +12377,7 @@ function validateRepeaterPlan(plan, value, ctx) {
12293
12377
  maximum: constraint.maximum,
12294
12378
  itemLabel: "item"
12295
12379
  })] : [];
12296
- default: return assertNever$17(constraint);
12380
+ default: return assertNever$16(constraint);
12297
12381
  }
12298
12382
  }), ...value.flatMap((item, index) => validateRepeaterItem(plan, item, index, ctx))];
12299
12383
  }
@@ -12384,7 +12468,7 @@ function rebaseFieldPlanPath(plan, fromPrefix, toPrefix) {
12384
12468
  ...plan,
12385
12469
  path
12386
12470
  };
12387
- default: return assertNever$17(plan);
12471
+ default: return assertNever$16(plan);
12388
12472
  }
12389
12473
  }
12390
12474
  function validateInlineTextPlan(plan, value) {
@@ -12431,7 +12515,7 @@ function fieldPlanToObjectPropertyZod(plan, options = {}) {
12431
12515
  switch (presence.kind) {
12432
12516
  case "required": return schema;
12433
12517
  case "optional": return schema.optional();
12434
- default: return assertNever$17(presence);
12518
+ default: return assertNever$16(presence);
12435
12519
  }
12436
12520
  }
12437
12521
  function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
@@ -12501,7 +12585,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
12501
12585
  message
12502
12586
  });
12503
12587
  return;
12504
- default: assertNever$17(validationIssue);
12588
+ default: assertNever$16(validationIssue);
12505
12589
  }
12506
12590
  }
12507
12591
  function relativeZodIssuePath(path, rootPath) {
@@ -12532,7 +12616,7 @@ function findNestedFieldValidationPlan(plan, path) {
12532
12616
  case "link":
12533
12617
  case "select":
12534
12618
  case "passthrough": return null;
12535
- default: return assertNever$17(plan);
12619
+ default: return assertNever$16(plan);
12536
12620
  }
12537
12621
  }
12538
12622
  function sameFieldPath(left, right) {
@@ -12556,7 +12640,7 @@ function validateExplicitNullForPushPlan(plan, value, ctx) {
12556
12640
  case "link":
12557
12641
  case "select":
12558
12642
  case "passthrough": return [];
12559
- default: return assertNever$17(plan);
12643
+ default: return assertNever$16(plan);
12560
12644
  }
12561
12645
  }
12562
12646
  function validateExplicitNullsForPushRepeater(plan, value, ctx) {
@@ -12730,7 +12814,7 @@ function resolveVariantKey(manifest, content) {
12730
12814
  //#endregion
12731
12815
  //#region ../blocks/src/system/manifest/index.ts
12732
12816
  init_augmentManifest();
12733
- init_schema$1();
12817
+ init_schema$2();
12734
12818
  //#endregion
12735
12819
  //#region ../theme-core/src/palette/utils/colorConversion.ts
12736
12820
  function hexToRgb$1(hex) {
@@ -12943,6 +13027,18 @@ var init_accessibleSurfaces = __esmMin((() => {
12943
13027
  init_onColor();
12944
13028
  }));
12945
13029
  //#endregion
13030
+ //#region ../theme-core/src/site-styles/lookOptionGroups.ts
13031
+ function defineLookOptionGroup(group) {
13032
+ defaultOption(group);
13033
+ return group;
13034
+ }
13035
+ function defaultOption(group) {
13036
+ const option = group.options.find((candidate) => candidate.id === group.defaultOptionId);
13037
+ if (option) return option;
13038
+ throw new Error(`Look option group "${group.id}" defaults to missing option "${group.defaultOptionId}".`);
13039
+ }
13040
+ var init_lookOptionGroups = __esmMin((() => {}));
13041
+ //#endregion
12946
13042
  //#region ../theme-core/src/site-styles/types.ts
12947
13043
  /**
12948
13044
  * Defines a literal-preserving catalog while rejecting top-level extra keys on
@@ -12995,7 +13091,7 @@ function asDesignSystemTemplateId(value) {
12995
13091
  function makeBoundaryId(previousBlockId, nextBlockId) {
12996
13092
  return asDesignBoundaryId(`boundary:${encodeURIComponent(previousBlockId)}:${encodeURIComponent(nextBlockId)}`);
12997
13093
  }
12998
- function assertNever$16(value, message = "Unhandled Theme V2 variant") {
13094
+ function assertNever$15(value, message = "Unhandled Theme V2 variant") {
12999
13095
  throw new Error(`${message}: ${String(value)}`);
13000
13096
  }
13001
13097
  function brandNonEmptyString(value, label) {
@@ -13091,7 +13187,7 @@ var init_types$15 = __esmMin((() => {
13091
13187
  //#region ../theme-core/src/site-styles/appearancePresetResolution.ts
13092
13188
  function assertValidOptionGroups(preset) {
13093
13189
  preset.optionGroups?.forEach((group) => {
13094
- if (!group.options.find((option) => option.id === group.selectedOptionId)) throw new Error(`Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`);
13190
+ defineLookOptionGroup(group);
13095
13191
  });
13096
13192
  }
13097
13193
  function defineBlockAppearancePreset(preset) {
@@ -13099,772 +13195,655 @@ function defineBlockAppearancePreset(preset) {
13099
13195
  return preset;
13100
13196
  }
13101
13197
  var init_appearancePresetResolution = __esmMin((() => {
13198
+ init_lookOptionGroups();
13102
13199
  init_types$15();
13103
- }));
13104
- //#endregion
13105
- //#region ../theme-core/src/site-styles/blockAppearancePresets.ts
13106
- var blockAppearancePresets;
13200
+ })), brandScrimOptionGroups, microBannerLayoutPatches;
13107
13201
  var init_blockAppearancePresets = __esmMin((() => {
13108
13202
  init_appearancePresetResolution();
13109
13203
  init_types$15();
13110
- blockAppearancePresets = [
13111
- defineBlockAppearancePreset({
13112
- kind: "block-design",
13113
- id: "hero-immersive-image",
13114
- target: "hero",
13115
- label: "Immersive image hero",
13116
- blockKinds: ["block.hero"],
13117
- constraints: { layoutFamilies: ["centered", "compact"] },
13118
- layoutPatches: [{
13119
- constraints: { layoutVariantKeys: ["micro"] },
13120
- designPatch: {
13121
- sectionHeight: "banner",
13122
- heroTypographyScale: "display"
13123
- }
13124
- }],
13125
- design: {
13126
- sectionSurface: "hero-image",
13127
- contentFrame: plainFrame,
13128
- itemSurface: "none",
13129
- sectionHeight: "hero",
13130
- heroComposition: "center",
13131
- heroTypographyScale: "display",
13132
- imageSurfaceTreatment: { kind: "neutral-wash" }
13204
+ brandScrimOptionGroups = [{
13205
+ id: "image-surface-treatment",
13206
+ label: "Treatment",
13207
+ defaultOptionId: "brand-scrim-primary",
13208
+ options: [{
13209
+ id: "brand-scrim-primary",
13210
+ label: "Brand scrim",
13211
+ designPatch: { imageSurfaceTreatment: {
13212
+ kind: "brand-scrim",
13213
+ token: "primary"
13214
+ } }
13215
+ }, {
13216
+ id: "neutral-scrim",
13217
+ label: "Neutral scrim",
13218
+ designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
13219
+ }]
13220
+ }];
13221
+ microBannerLayoutPatches = [{
13222
+ constraints: { layoutVariantKeys: ["micro"] },
13223
+ designPatch: { sectionHeight: "banner" }
13224
+ }];
13225
+ defineBlockAppearancePreset({
13226
+ id: "hero-immersive-image",
13227
+ target: "hero",
13228
+ label: "Immersive image hero",
13229
+ blockKinds: ["block.hero"],
13230
+ constraints: { layoutFamilies: ["centered", "compact"] },
13231
+ layoutPatches: [{
13232
+ constraints: { layoutVariantKeys: ["micro"] },
13233
+ designPatch: {
13234
+ sectionHeight: "banner",
13235
+ heroTypographyScale: "display"
13133
13236
  }
13134
- }),
13135
- defineBlockAppearancePreset({
13136
- kind: "block-design",
13137
- id: "hero-bottom-left-panel",
13138
- target: "hero",
13139
- label: "Bottom-left panel hero",
13140
- blockKinds: ["block.hero"],
13141
- constraints: { layoutFamilies: ["centered", "compact"] },
13142
- optionGroups: [{
13143
- id: "image-surface-treatment",
13144
- label: "Treatment",
13145
- selectedOptionId: "neutral-scrim",
13146
- options: [{
13147
- id: "neutral-scrim",
13148
- label: "Neutral scrim",
13149
- designPatch: { imageSurfaceTreatment: {
13150
- kind: "neutral-scrim",
13151
- intensity: "balanced"
13152
- } }
13153
- }, {
13154
- id: "brand-scrim-primary",
13155
- label: "Brand scrim",
13156
- designPatch: { imageSurfaceTreatment: {
13157
- kind: "brand-scrim",
13158
- token: "primary",
13159
- intensity: "balanced"
13160
- } }
13161
- }]
13162
- }],
13163
- layoutPatches: [{
13164
- constraints: { layoutVariantKeys: ["micro"] },
13165
- designPatch: {
13166
- sectionHeight: "banner",
13167
- heroTypographyScale: "editorial"
13168
- }
13169
- }],
13170
- design: {
13171
- sectionSurface: "hero-image",
13172
- contentFrame: panelFrame("raised"),
13173
- itemSurface: "none",
13174
- sectionHeight: "immersive",
13175
- heroComposition: "bottom-left",
13176
- heroTypographyScale: "display",
13177
- imageSurfaceTreatment: {
13237
+ }],
13238
+ design: {
13239
+ sectionSurface: "hero-image",
13240
+ contentFrame: plainFrame,
13241
+ itemSurface: "none",
13242
+ sectionHeight: "hero",
13243
+ heroComposition: "center",
13244
+ heroTypographyScale: "display",
13245
+ imageSurfaceTreatment: { kind: "neutral-wash" }
13246
+ }
13247
+ }), defineBlockAppearancePreset({
13248
+ id: "hero-bottom-left-panel",
13249
+ target: "hero",
13250
+ label: "Bottom-left panel hero",
13251
+ blockKinds: ["block.hero"],
13252
+ constraints: { layoutFamilies: ["centered", "compact"] },
13253
+ optionGroups: [{
13254
+ id: "image-surface-treatment",
13255
+ label: "Treatment",
13256
+ defaultOptionId: "neutral-scrim",
13257
+ options: [{
13258
+ id: "neutral-scrim",
13259
+ label: "Neutral scrim",
13260
+ designPatch: { imageSurfaceTreatment: {
13178
13261
  kind: "neutral-scrim",
13179
13262
  intensity: "balanced"
13180
- }
13181
- }
13182
- }),
13183
- defineBlockAppearancePreset({
13184
- kind: "block-design",
13185
- id: "hero-poster-image",
13186
- target: "hero",
13187
- label: "Poster image hero",
13188
- blockKinds: ["block.hero"],
13189
- constraints: { layoutFamilies: ["centered", "compact"] },
13190
- layoutPatches: [{
13191
- constraints: { layoutVariantKeys: ["micro"] },
13192
- designPatch: {
13193
- sectionHeight: "banner",
13194
- heroTypographyScale: "display"
13195
- }
13196
- }],
13197
- design: {
13198
- sectionSurface: "hero-image",
13199
- contentFrame: plainFrame,
13200
- itemSurface: "none",
13201
- sectionHeight: "immersive",
13202
- heroComposition: "center",
13203
- heroTypographyScale: "poster",
13204
- imageSurfaceTreatment: {
13263
+ } }
13264
+ }, {
13265
+ id: "brand-scrim-primary",
13266
+ label: "Brand scrim",
13267
+ designPatch: { imageSurfaceTreatment: {
13205
13268
  kind: "brand-scrim",
13206
13269
  token: "primary",
13207
- intensity: "strong"
13208
- }
13209
- }
13210
- }),
13211
- defineBlockAppearancePreset({
13212
- kind: "block-design",
13213
- id: "hero-brand-scrim",
13214
- target: "hero",
13215
- label: "Brand scrim image hero",
13216
- blockKinds: ["block.hero"],
13217
- constraints: { layoutFamilies: ["centered", "compact"] },
13218
- optionGroups: [{
13219
- id: "image-surface-treatment",
13220
- label: "Treatment",
13221
- selectedOptionId: "brand-scrim-primary",
13222
- options: [{
13223
- id: "brand-scrim-primary",
13224
- label: "Brand scrim",
13225
- designPatch: { imageSurfaceTreatment: {
13226
- kind: "brand-scrim",
13227
- token: "primary"
13228
- } }
13229
- }, {
13230
- id: "neutral-scrim",
13231
- label: "Neutral scrim",
13232
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
13233
- }]
13234
- }],
13235
- layoutPatches: [{
13236
- constraints: { layoutVariantKeys: ["micro"] },
13237
- designPatch: { sectionHeight: "banner" }
13238
- }],
13239
- design: {
13240
- sectionSurface: "hero-image",
13241
- contentFrame: plainFrame,
13242
- itemSurface: "none",
13243
- sectionHeight: "immersive",
13244
- heroComposition: "center",
13245
- heroTypographyScale: "display",
13246
- imageSurfaceTreatment: {
13247
- kind: "brand-scrim",
13248
- token: "primary"
13249
- }
13250
- }
13251
- }),
13252
- defineBlockAppearancePreset({
13253
- kind: "block-design",
13254
- id: "hero-brand-scrim-fixed-frame",
13255
- target: "hero",
13256
- label: "Fixed-frame brand scrim hero",
13257
- blockKinds: ["block.hero"],
13258
- constraints: { layoutFamilies: ["centered", "compact"] },
13259
- optionGroups: [{
13260
- id: "image-surface-treatment",
13261
- label: "Treatment",
13262
- selectedOptionId: "brand-scrim-primary",
13263
- options: [{
13264
- id: "brand-scrim-primary",
13265
- label: "Brand scrim",
13266
- designPatch: { imageSurfaceTreatment: {
13267
- kind: "brand-scrim",
13268
- token: "primary"
13269
- } }
13270
- }, {
13271
- id: "neutral-scrim",
13272
- label: "Neutral scrim",
13273
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
13274
- }]
13275
- }],
13276
- layoutPatches: [{
13277
- constraints: { layoutVariantKeys: ["micro"] },
13278
- designPatch: { sectionHeight: "banner" }
13279
- }],
13280
- design: {
13281
- sectionSurface: "hero-image",
13282
- contentFrame: plainFrame,
13283
- itemSurface: "none",
13284
- sectionHeight: "immersive",
13285
- heroComposition: "center",
13286
- heroTypographyScale: "display",
13287
- imageSurfaceTreatment: {
13288
- kind: "brand-scrim",
13289
- token: "primary"
13290
- },
13291
- imageSurfaceMotion: "fixed-frame",
13292
- eyebrowTreatment: "accent-pill-bounce"
13293
- }
13294
- }),
13295
- defineBlockAppearancePreset({
13296
- kind: "block-design",
13297
- id: "hero-brand-depth-expressive",
13298
- target: "hero",
13299
- label: "Expressive brand-depth hero",
13300
- blockKinds: ["block.hero"],
13301
- constraints: { layoutFamilies: ["centered", "compact"] },
13302
- design: {
13303
- sectionSurface: "brand-depth-band",
13304
- contentFrame: plainFrame,
13305
- itemSurface: "none",
13306
- heroComposition: "center",
13307
- heroTypographyScale: "editorial",
13308
- eyebrowTreatment: "accent-pill-bounce"
13309
- }
13310
- }),
13311
- defineBlockAppearancePreset({
13312
- kind: "block-design",
13313
- id: "hero-contained-intro",
13314
- target: "hero",
13315
- label: "Contained intro hero",
13316
- blockKinds: ["block.hero"],
13317
- design: {
13318
- sectionSurface: "muted-band",
13319
- contentFrame: panelFrame("inset"),
13320
- itemSurface: "none",
13321
- heroComposition: "center",
13322
- heroTypographyScale: "editorial"
13323
- }
13324
- }),
13325
- defineBlockAppearancePreset({
13326
- kind: "block-design",
13327
- id: "hero-split-editorial",
13328
- target: "hero",
13329
- label: "Editorial split hero",
13330
- blockKinds: ["block.hero"],
13331
- constraints: { layoutFamilies: ["split"] },
13332
- design: {
13333
- sectionSurface: "base",
13334
- contentFrame: plainFrame,
13335
- itemSurface: "none",
13270
+ intensity: "balanced"
13271
+ } }
13272
+ }]
13273
+ }],
13274
+ layoutPatches: [{
13275
+ constraints: { layoutVariantKeys: ["micro"] },
13276
+ designPatch: {
13277
+ sectionHeight: "banner",
13336
13278
  heroTypographyScale: "editorial"
13337
13279
  }
13338
- }),
13339
- defineBlockAppearancePreset({
13340
- kind: "block-design",
13341
- id: "hero-split-brand",
13342
- target: "hero",
13343
- label: "Brand split hero",
13344
- blockKinds: ["block.hero"],
13345
- constraints: { layoutFamilies: ["split"] },
13346
- design: {
13347
- sectionSurface: "brand-depth-band",
13348
- contentFrame: plainFrame,
13349
- itemSurface: "none",
13350
- heroTypographyScale: "display",
13351
- eyebrowTreatment: "accent-pill-bounce"
13352
- }
13353
- }),
13354
- defineBlockAppearancePreset({
13355
- kind: "block-design",
13356
- id: "hero-split-soft-panel",
13357
- target: "hero",
13358
- label: "Soft panel split hero",
13359
- blockKinds: ["block.hero"],
13360
- constraints: { layoutFamilies: ["split"] },
13361
- design: {
13362
- sectionSurface: "muted-band",
13363
- contentFrame: panelFrame("raised"),
13364
- itemSurface: "none",
13365
- heroTypographyScale: "editorial"
13280
+ }],
13281
+ design: {
13282
+ sectionSurface: "hero-image",
13283
+ contentFrame: panelFrame("raised"),
13284
+ itemSurface: "none",
13285
+ sectionHeight: "immersive",
13286
+ heroComposition: "bottom-left",
13287
+ heroTypographyScale: "display",
13288
+ imageSurfaceTreatment: {
13289
+ kind: "neutral-scrim",
13290
+ intensity: "balanced"
13366
13291
  }
13367
- }),
13368
- defineBlockAppearancePreset({
13369
- kind: "block-design",
13370
- id: "hero-split-accent",
13371
- target: "hero",
13372
- label: "Accent split hero",
13373
- blockKinds: ["block.hero"],
13374
- constraints: { layoutFamilies: ["split"] },
13375
- design: {
13376
- sectionSurface: "accent-band",
13377
- contentFrame: panelFrame("raised"),
13378
- itemSurface: "none",
13292
+ }
13293
+ }), defineBlockAppearancePreset({
13294
+ id: "hero-poster-image",
13295
+ target: "hero",
13296
+ label: "Poster image hero",
13297
+ blockKinds: ["block.hero"],
13298
+ constraints: { layoutFamilies: ["centered", "compact"] },
13299
+ layoutPatches: [{
13300
+ constraints: { layoutVariantKeys: ["micro"] },
13301
+ designPatch: {
13302
+ sectionHeight: "banner",
13379
13303
  heroTypographyScale: "display"
13380
13304
  }
13381
- }),
13382
- defineBlockAppearancePreset({
13383
- kind: "block-design",
13384
- id: "intro-editorial-statement",
13385
- target: "intro",
13386
- label: "Editorial intro statement",
13387
- blockKinds: ["block.intro"],
13388
- constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
13389
- design: {
13390
- sectionSurface: "base",
13391
- contentFrame: plainFrame,
13392
- itemSurface: "none",
13393
- composition: {
13394
- kind: "intro",
13395
- treatment: "editorial-statement"
13396
- }
13397
- }
13398
- }),
13399
- defineBlockAppearancePreset({
13400
- kind: "block-design",
13401
- id: "intro-portrait-bio",
13402
- target: "intro",
13403
- label: "Portrait and bio",
13404
- blockKinds: ["block.intro"],
13405
- constraints: { layoutVariantKeys: ["media-copy"] },
13406
- design: {
13407
- sectionSurface: "base",
13408
- contentFrame: plainFrame,
13409
- itemSurface: "none",
13410
- composition: {
13411
- kind: "intro",
13412
- treatment: "portrait-bio"
13413
- }
13414
- }
13415
- }),
13416
- defineBlockAppearancePreset({
13417
- kind: "block-design",
13418
- id: "offerings-preview-default-cards",
13419
- target: "offerings",
13420
- label: "Default offering cards",
13421
- blockKinds: ["block.offerings-preview"],
13422
- design: {
13423
- sectionSurface: "base",
13424
- contentFrame: plainFrame,
13425
- itemSurface: "default"
13426
- }
13427
- }),
13428
- defineBlockAppearancePreset({
13429
- kind: "block-design",
13430
- id: "offerings-preview-secondary-cards",
13431
- target: "offerings",
13432
- label: "Secondary offering cards",
13433
- blockKinds: ["block.offerings-preview"],
13434
- design: {
13435
- sectionSurface: "muted-band",
13436
- contentFrame: plainFrame,
13437
- itemSurface: "inset"
13438
- }
13439
- }),
13440
- defineBlockAppearancePreset({
13441
- kind: "block-design",
13442
- id: "offerings-preview-non-carded",
13443
- target: "offerings",
13444
- label: "Non-carded offerings",
13445
- blockKinds: ["block.offerings-preview"],
13446
- design: {
13447
- sectionSurface: "muted-band",
13448
- contentFrame: plainFrame,
13449
- itemSurface: "editorial"
13450
- }
13451
- }),
13452
- defineBlockAppearancePreset({
13453
- kind: "block-design",
13454
- id: "offerings-preview-paired-feature-cards",
13455
- target: "offerings",
13456
- label: "Paired feature cards",
13457
- blockKinds: ["block.offerings-preview"],
13458
- constraints: { layoutVariantKeys: ["cards"] },
13459
- design: {
13460
- sectionSurface: "base",
13461
- contentFrame: plainFrame,
13462
- itemSurface: "none"
13463
- }
13464
- }),
13465
- defineBlockAppearancePreset({
13466
- kind: "block-design",
13467
- id: "offerings-preview-open-editorial-columns",
13468
- target: "offerings",
13469
- label: "Open editorial columns",
13470
- blockKinds: ["block.offerings-preview"],
13471
- constraints: { layoutVariantKeys: ["cards"] },
13472
- design: {
13473
- sectionSurface: "base",
13474
- contentFrame: plainFrame,
13475
- itemSurface: "none"
13476
- }
13477
- }),
13478
- defineBlockAppearancePreset({
13479
- kind: "block-design",
13480
- id: "offerings-preview-joined-programme-panel",
13481
- target: "offerings",
13482
- label: "Joined programme panel",
13483
- blockKinds: ["block.offerings-preview"],
13484
- constraints: { layoutVariantKeys: ["cards"] },
13485
- design: {
13486
- sectionSurface: "base",
13487
- contentFrame: plainFrame,
13488
- itemSurface: "none"
13489
- }
13490
- }),
13491
- defineBlockAppearancePreset({
13492
- kind: "block-design",
13493
- id: "feature-cards-raised-rule",
13494
- target: "feature-cards",
13495
- label: "Raised cards with rule",
13496
- blockKinds: ["block.feature-cards"],
13497
- design: {
13498
- sectionSurface: "base",
13499
- contentFrame: plainFrame,
13500
- itemSurface: "raised"
13501
- }
13502
- }),
13503
- defineBlockAppearancePreset({
13504
- kind: "block-design",
13505
- id: "feature-cards-bold-colors",
13506
- target: "feature-cards",
13507
- label: "Bold colour-blocked cards",
13508
- blockKinds: ["block.feature-cards"],
13509
- design: {
13510
- sectionSurface: "base",
13511
- contentFrame: plainFrame,
13512
- itemSurface: "color-blocked"
13513
- }
13514
- }),
13515
- defineBlockAppearancePreset({
13516
- kind: "block-design",
13517
- id: "feature-cards-editorial-columns",
13518
- target: "feature-cards",
13519
- label: "Editorial open columns",
13520
- blockKinds: ["block.feature-cards"],
13521
- design: {
13522
- sectionSurface: "base",
13523
- contentFrame: plainFrame,
13524
- itemSurface: "editorial"
13525
- }
13526
- }),
13527
- defineBlockAppearancePreset({
13528
- kind: "block-design",
13529
- id: "feature-cards-asymmetric-emphasis",
13530
- target: "feature-cards",
13531
- label: "Asymmetric emphasis pair",
13532
- blockKinds: ["block.feature-cards"],
13533
- constraints: { layoutFamilies: ["grid"] },
13534
- design: {
13535
- sectionSurface: "base",
13536
- contentFrame: plainFrame,
13537
- itemSurface: "none",
13538
- composition: {
13539
- kind: "feature-cards",
13540
- treatment: "asymmetric-emphasis"
13541
- }
13542
- }
13543
- }),
13544
- defineBlockAppearancePreset({
13545
- kind: "block-design",
13546
- id: "feature-cards-framed-programme",
13547
- target: "feature-cards",
13548
- label: "Framed programme cards",
13549
- blockKinds: ["block.feature-cards"],
13550
- constraints: { layoutFamilies: ["grid"] },
13551
- design: {
13552
- sectionSurface: "brand-depth-band",
13553
- contentFrame: plainFrame,
13554
- itemSurface: "inset",
13555
- composition: {
13556
- kind: "feature-cards",
13557
- treatment: "framed-programme"
13558
- }
13559
- }
13560
- }),
13561
- defineBlockAppearancePreset({
13562
- kind: "block-design",
13563
- id: "feature-cards-soft-panels",
13564
- target: "feature-cards",
13565
- label: "Soft tinted panels",
13566
- blockKinds: ["block.feature-cards"],
13567
- design: {
13568
- sectionSurface: "base",
13569
- contentFrame: plainFrame,
13570
- itemSurface: "inset"
13571
- }
13572
- }),
13573
- defineBlockAppearancePreset({
13574
- kind: "block-design",
13575
- id: "feature-cards-editorial-diptych",
13576
- target: "feature-cards",
13577
- label: "Editorial diptych",
13578
- blockKinds: ["block.feature-cards"],
13579
- constraints: { layoutVariantKeys: ["editorial-diptych"] },
13580
- design: {
13581
- sectionSurface: "base",
13582
- contentFrame: plainFrame,
13583
- itemSurface: "flat"
13584
- }
13585
- }),
13586
- defineBlockAppearancePreset({
13587
- kind: "block-design",
13588
- id: "feature-cards-editorial-pathways",
13589
- target: "feature-cards",
13590
- label: "Editorial pathways",
13591
- blockKinds: ["block.feature-cards"],
13592
- constraints: { layoutVariantKeys: ["editorial-pathways"] },
13593
- design: {
13594
- sectionSurface: "base",
13595
- contentFrame: plainFrame,
13596
- itemSurface: "flat"
13597
- }
13598
- }),
13599
- defineBlockAppearancePreset({
13600
- kind: "block-design",
13601
- id: "feature-cards-photo-tiles",
13602
- target: "feature-cards",
13603
- label: "Photo tiles",
13604
- blockKinds: ["block.feature-cards"],
13605
- design: {
13606
- sectionSurface: "base",
13607
- contentFrame: plainFrame,
13608
- itemSurface: "raised"
13609
- }
13610
- }),
13611
- defineBlockAppearancePreset({
13612
- kind: "block-design",
13613
- id: "events-lined-panel",
13614
- target: "events",
13615
- label: "Raised event panel",
13616
- blockKinds: ["block.event-calendar", "block.event-listing"],
13617
- design: {
13618
- sectionSurface: "base",
13619
- contentFrame: panelFrame("raised"),
13620
- itemSurface: "none"
13621
- }
13622
- }),
13623
- defineBlockAppearancePreset({
13624
- kind: "block-design",
13625
- id: "events-ruled-register",
13626
- target: "events",
13627
- label: "Ruled event register",
13628
- blockKinds: ["block.event-calendar", "block.event-listing"],
13629
- design: {
13630
- sectionSurface: "brand-depth-band",
13631
- contentFrame: plainFrame,
13632
- itemSurface: "none",
13633
- eventListTreatment: "ruled-register"
13634
- }
13635
- }),
13636
- defineBlockAppearancePreset({
13637
- kind: "block-design",
13638
- id: "events-editorial-register",
13639
- target: "events",
13640
- label: "Editorial event register",
13641
- blockKinds: ["block.event-calendar", "block.event-listing"],
13642
- design: {
13643
- sectionSurface: "base",
13644
- contentFrame: plainFrame,
13645
- itemSurface: "none",
13646
- eventListTreatment: "editorial-register"
13647
- }
13648
- }),
13649
- defineBlockAppearancePreset({
13650
- kind: "block-design",
13651
- id: "events-dense-index",
13652
- target: "events",
13653
- label: "Dense event index",
13654
- blockKinds: ["block.event-calendar", "block.event-listing"],
13655
- design: {
13656
- sectionSurface: "accent-band",
13657
- contentFrame: plainFrame,
13658
- itemSurface: "none",
13659
- eventListTreatment: "dense-index"
13660
- }
13661
- }),
13662
- defineBlockAppearancePreset({
13663
- kind: "block-design",
13664
- id: "schedule-details-brand-depth",
13665
- target: "events",
13666
- label: "Brand-depth schedule details",
13667
- blockKinds: ["block.event-details", "block.course-details"],
13668
- design: {
13669
- sectionSurface: "brand-depth-band",
13670
- contentFrame: plainFrame,
13671
- itemSurface: "none",
13672
- tileTreatment: "brand-depth"
13673
- }
13674
- }),
13675
- defineBlockAppearancePreset({
13676
- kind: "block-design",
13677
- id: "media-text-flush-feature",
13678
- target: "media-text",
13679
- label: "Flush media feature",
13680
- blockKinds: ["block.media-text"],
13681
- design: {
13682
- sectionSurface: "muted-band",
13683
- contentFrame: flushPanelFrame({ bleed: "start" }),
13684
- itemSurface: "none"
13685
- }
13686
- }),
13687
- defineBlockAppearancePreset({
13688
- kind: "block-design",
13689
- id: "testimonials-simple-cards",
13690
- target: "testimonials",
13691
- label: "Simple testimonial cards",
13692
- blockKinds: ["block.testimonials"],
13693
- design: {
13694
- sectionSurface: "base",
13695
- contentFrame: plainFrame,
13696
- itemSurface: "default"
13697
- }
13698
- }),
13699
- defineBlockAppearancePreset({
13700
- kind: "block-design",
13701
- id: "testimonials-raised-panel",
13702
- target: "testimonials",
13703
- label: "Raised testimonial panel",
13704
- blockKinds: ["block.testimonials"],
13705
- design: {
13706
- sectionSurface: "muted-band",
13707
- contentFrame: panelFrame("raised"),
13708
- itemSurface: "raised"
13709
- }
13710
- }),
13711
- defineBlockAppearancePreset({
13712
- kind: "block-design",
13713
- id: "testimonials-accent-panel",
13714
- target: "testimonials",
13715
- label: "Accent testimonial panel",
13716
- blockKinds: ["block.testimonials"],
13717
- design: {
13718
- sectionSurface: "accent-band",
13719
- contentFrame: panelFrame("raised"),
13720
- itemSurface: "raised"
13721
- }
13722
- }),
13723
- defineBlockAppearancePreset({
13724
- kind: "block-design",
13725
- id: "testimonials-default-cards",
13726
- target: "testimonials",
13727
- label: "Default cards",
13728
- blockKinds: ["block.testimonials"],
13729
- design: {
13730
- sectionSurface: "base",
13731
- contentFrame: plainFrame,
13732
- itemSurface: "none",
13733
- testimonialCardTreatment: "default"
13734
- }
13735
- }),
13736
- defineBlockAppearancePreset({
13737
- kind: "block-design",
13738
- id: "testimonials-statement-cards",
13739
- target: "testimonials",
13740
- label: "Statement cards",
13741
- blockKinds: ["block.testimonials"],
13742
- design: {
13743
- sectionSurface: "accent-band",
13744
- contentFrame: plainFrame,
13745
- itemSurface: "raised",
13746
- testimonialCardTreatment: "statement"
13747
- }
13748
- }),
13749
- defineBlockAppearancePreset({
13750
- kind: "block-design",
13751
- id: "testimonials-brand-statement-cards",
13752
- target: "testimonials",
13753
- label: "Brand statement cards",
13754
- blockKinds: ["block.testimonials"],
13755
- design: {
13756
- sectionSurface: "brand-depth-band",
13757
- contentFrame: plainFrame,
13758
- itemSurface: "raised",
13759
- testimonialCardTreatment: "statement"
13760
- }
13761
- }),
13762
- defineBlockAppearancePreset({
13763
- kind: "block-design",
13764
- id: "testimonials-non-carded",
13765
- target: "testimonials",
13766
- label: "Non-carded",
13767
- blockKinds: ["block.testimonials"],
13768
- design: {
13769
- sectionSurface: "muted-band",
13770
- contentFrame: plainFrame,
13771
- itemSurface: "none",
13772
- testimonialCardTreatment: "non-carded"
13773
- }
13774
- }),
13775
- defineBlockAppearancePreset({
13776
- kind: "block-design",
13777
- id: "testimonials-evergreen-lead",
13778
- target: "testimonials",
13779
- label: "Evergreen lead",
13780
- blockKinds: ["block.testimonials"],
13781
- constraints: { layoutVariantKeys: ["featured-editorial"] },
13782
- design: {
13783
- sectionSurface: "base",
13784
- contentFrame: plainFrame,
13785
- itemSurface: "none"
13786
- }
13787
- }),
13788
- defineBlockAppearancePreset({
13789
- kind: "block-design",
13790
- id: "testimonials-room-and-response",
13791
- target: "testimonials",
13792
- label: "Room and response",
13793
- blockKinds: ["block.testimonials"],
13794
- constraints: { layoutVariantKeys: ["featured-editorial"] },
13795
- design: {
13796
- sectionSurface: "base",
13797
- contentFrame: plainFrame,
13798
- itemSurface: "none"
13305
+ }],
13306
+ design: {
13307
+ sectionSurface: "hero-image",
13308
+ contentFrame: plainFrame,
13309
+ itemSurface: "none",
13310
+ sectionHeight: "immersive",
13311
+ heroComposition: "center",
13312
+ heroTypographyScale: "poster",
13313
+ imageSurfaceTreatment: {
13314
+ kind: "brand-scrim",
13315
+ token: "primary",
13316
+ intensity: "strong"
13799
13317
  }
13800
- }),
13801
- defineBlockAppearancePreset({
13802
- kind: "block-design",
13803
- id: "testimonials-open-floor",
13804
- target: "testimonials",
13805
- label: "Open floor",
13806
- blockKinds: ["block.testimonials"],
13807
- constraints: { layoutVariantKeys: ["featured-editorial"] },
13808
- design: {
13809
- sectionSurface: "base",
13810
- contentFrame: plainFrame,
13811
- itemSurface: "none"
13318
+ }
13319
+ }), defineBlockAppearancePreset({
13320
+ id: "hero-brand-scrim",
13321
+ target: "hero",
13322
+ label: "Brand scrim image hero",
13323
+ blockKinds: ["block.hero"],
13324
+ constraints: { layoutFamilies: ["centered", "compact"] },
13325
+ optionGroups: brandScrimOptionGroups,
13326
+ layoutPatches: microBannerLayoutPatches,
13327
+ design: {
13328
+ sectionSurface: "hero-image",
13329
+ contentFrame: plainFrame,
13330
+ itemSurface: "none",
13331
+ sectionHeight: "immersive",
13332
+ heroComposition: "center",
13333
+ heroTypographyScale: "display",
13334
+ imageSurfaceTreatment: {
13335
+ kind: "brand-scrim",
13336
+ token: "primary"
13812
13337
  }
13813
- }),
13814
- defineBlockAppearancePreset({
13815
- kind: "block-design",
13816
- id: "faq-base-accordion",
13817
- target: "faq",
13818
- label: "Base accordion FAQ",
13819
- blockKinds: ["block.faq"],
13820
- design: {
13821
- sectionSurface: "base",
13822
- contentFrame: plainFrame,
13823
- itemSurface: "default"
13338
+ }
13339
+ }), defineBlockAppearancePreset({
13340
+ id: "hero-brand-scrim-fixed-frame",
13341
+ target: "hero",
13342
+ label: "Fixed-frame brand scrim hero",
13343
+ blockKinds: ["block.hero"],
13344
+ constraints: { layoutFamilies: ["centered", "compact"] },
13345
+ optionGroups: brandScrimOptionGroups,
13346
+ layoutPatches: microBannerLayoutPatches,
13347
+ design: {
13348
+ sectionSurface: "hero-image",
13349
+ contentFrame: plainFrame,
13350
+ itemSurface: "none",
13351
+ sectionHeight: "immersive",
13352
+ heroComposition: "center",
13353
+ heroTypographyScale: "display",
13354
+ imageSurfaceTreatment: {
13355
+ kind: "brand-scrim",
13356
+ token: "primary"
13357
+ },
13358
+ imageSurfaceMotion: "fixed-frame",
13359
+ eyebrowTreatment: "accent-pill-bounce"
13360
+ }
13361
+ }), defineBlockAppearancePreset({
13362
+ id: "hero-brand-depth-expressive",
13363
+ target: "hero",
13364
+ label: "Expressive brand-depth hero",
13365
+ blockKinds: ["block.hero"],
13366
+ constraints: { layoutFamilies: ["centered", "compact"] },
13367
+ design: {
13368
+ sectionSurface: "brand-depth-band",
13369
+ contentFrame: plainFrame,
13370
+ itemSurface: "none",
13371
+ heroComposition: "center",
13372
+ heroTypographyScale: "editorial",
13373
+ eyebrowTreatment: "accent-pill-bounce"
13374
+ }
13375
+ }), defineBlockAppearancePreset({
13376
+ id: "hero-contained-intro",
13377
+ target: "hero",
13378
+ label: "Contained intro hero",
13379
+ blockKinds: ["block.hero"],
13380
+ design: {
13381
+ sectionSurface: "muted-band",
13382
+ contentFrame: panelFrame("inset"),
13383
+ itemSurface: "none",
13384
+ heroComposition: "center",
13385
+ heroTypographyScale: "editorial"
13386
+ }
13387
+ }), defineBlockAppearancePreset({
13388
+ id: "hero-split-editorial",
13389
+ target: "hero",
13390
+ label: "Editorial split hero",
13391
+ blockKinds: ["block.hero"],
13392
+ constraints: { layoutFamilies: ["split"] },
13393
+ design: {
13394
+ sectionSurface: "base",
13395
+ contentFrame: plainFrame,
13396
+ itemSurface: "none",
13397
+ heroTypographyScale: "editorial"
13398
+ }
13399
+ }), defineBlockAppearancePreset({
13400
+ id: "hero-split-brand",
13401
+ target: "hero",
13402
+ label: "Brand split hero",
13403
+ blockKinds: ["block.hero"],
13404
+ constraints: { layoutFamilies: ["split"] },
13405
+ design: {
13406
+ sectionSurface: "brand-depth-band",
13407
+ contentFrame: plainFrame,
13408
+ itemSurface: "none",
13409
+ heroTypographyScale: "display",
13410
+ eyebrowTreatment: "accent-pill-bounce"
13411
+ }
13412
+ }), defineBlockAppearancePreset({
13413
+ id: "hero-split-soft-panel",
13414
+ target: "hero",
13415
+ label: "Soft panel split hero",
13416
+ blockKinds: ["block.hero"],
13417
+ constraints: { layoutFamilies: ["split"] },
13418
+ design: {
13419
+ sectionSurface: "muted-band",
13420
+ contentFrame: panelFrame("raised"),
13421
+ itemSurface: "none",
13422
+ heroTypographyScale: "editorial"
13423
+ }
13424
+ }), defineBlockAppearancePreset({
13425
+ id: "hero-split-accent",
13426
+ target: "hero",
13427
+ label: "Accent split hero",
13428
+ blockKinds: ["block.hero"],
13429
+ constraints: { layoutFamilies: ["split"] },
13430
+ design: {
13431
+ sectionSurface: "accent-band",
13432
+ contentFrame: panelFrame("raised"),
13433
+ itemSurface: "none",
13434
+ heroTypographyScale: "display"
13435
+ }
13436
+ }), defineBlockAppearancePreset({
13437
+ id: "intro-editorial-statement",
13438
+ target: "intro",
13439
+ label: "Editorial intro statement",
13440
+ blockKinds: ["block.intro"],
13441
+ constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
13442
+ design: {
13443
+ sectionSurface: "base",
13444
+ contentFrame: plainFrame,
13445
+ itemSurface: "none",
13446
+ composition: {
13447
+ kind: "intro",
13448
+ treatment: "editorial-statement"
13824
13449
  }
13825
- }),
13826
- defineBlockAppearancePreset({
13827
- kind: "block-design",
13828
- id: "faq-contained-help",
13829
- target: "faq",
13830
- label: "Contained help panel",
13831
- blockKinds: ["block.faq"],
13832
- design: {
13833
- sectionSurface: "muted-band",
13834
- contentFrame: panelFrame("inset"),
13835
- itemSurface: "default"
13450
+ }
13451
+ }), defineBlockAppearancePreset({
13452
+ id: "intro-portrait-bio",
13453
+ target: "intro",
13454
+ label: "Portrait and bio",
13455
+ blockKinds: ["block.intro"],
13456
+ constraints: { layoutVariantKeys: ["media-copy"] },
13457
+ design: {
13458
+ sectionSurface: "base",
13459
+ contentFrame: plainFrame,
13460
+ itemSurface: "none",
13461
+ composition: {
13462
+ kind: "intro",
13463
+ treatment: "portrait-bio"
13836
13464
  }
13837
- }),
13838
- defineBlockAppearancePreset({
13839
- kind: "block-design",
13840
- id: "contact-form-panel",
13841
- target: "contact-form",
13842
- label: "Raised form panel",
13843
- blockKinds: ["block.form"],
13844
- design: {
13845
- sectionSurface: "muted-band",
13846
- contentFrame: panelFrame("raised"),
13847
- itemSurface: "none"
13465
+ }
13466
+ }), defineBlockAppearancePreset({
13467
+ id: "offerings-preview-default-cards",
13468
+ target: "offerings",
13469
+ label: "Default offering cards",
13470
+ blockKinds: ["block.offerings-preview"],
13471
+ design: {
13472
+ sectionSurface: "base",
13473
+ contentFrame: plainFrame,
13474
+ itemSurface: "default"
13475
+ }
13476
+ }), defineBlockAppearancePreset({
13477
+ id: "offerings-preview-secondary-cards",
13478
+ target: "offerings",
13479
+ label: "Secondary offering cards",
13480
+ blockKinds: ["block.offerings-preview"],
13481
+ design: {
13482
+ sectionSurface: "muted-band",
13483
+ contentFrame: plainFrame,
13484
+ itemSurface: "inset"
13485
+ }
13486
+ }), defineBlockAppearancePreset({
13487
+ id: "offerings-preview-non-carded",
13488
+ target: "offerings",
13489
+ label: "Non-carded offerings",
13490
+ blockKinds: ["block.offerings-preview"],
13491
+ design: {
13492
+ sectionSurface: "muted-band",
13493
+ contentFrame: plainFrame,
13494
+ itemSurface: "editorial"
13495
+ }
13496
+ }), defineBlockAppearancePreset({
13497
+ id: "offerings-preview-paired-feature-cards",
13498
+ target: "offerings",
13499
+ label: "Paired feature cards",
13500
+ blockKinds: ["block.offerings-preview"],
13501
+ constraints: { layoutVariantKeys: ["cards"] },
13502
+ design: {
13503
+ sectionSurface: "base",
13504
+ contentFrame: plainFrame,
13505
+ itemSurface: "none"
13506
+ }
13507
+ }), defineBlockAppearancePreset({
13508
+ id: "offerings-preview-open-editorial-columns",
13509
+ target: "offerings",
13510
+ label: "Open editorial columns",
13511
+ blockKinds: ["block.offerings-preview"],
13512
+ constraints: { layoutVariantKeys: ["cards"] },
13513
+ design: {
13514
+ sectionSurface: "base",
13515
+ contentFrame: plainFrame,
13516
+ itemSurface: "none"
13517
+ }
13518
+ }), defineBlockAppearancePreset({
13519
+ id: "offerings-preview-joined-programme-panel",
13520
+ target: "offerings",
13521
+ label: "Joined programme panel",
13522
+ blockKinds: ["block.offerings-preview"],
13523
+ constraints: { layoutVariantKeys: ["cards"] },
13524
+ design: {
13525
+ sectionSurface: "base",
13526
+ contentFrame: plainFrame,
13527
+ itemSurface: "none"
13528
+ }
13529
+ }), defineBlockAppearancePreset({
13530
+ id: "feature-cards-raised-rule",
13531
+ target: "feature-cards",
13532
+ label: "Raised cards with rule",
13533
+ blockKinds: ["block.feature-cards"],
13534
+ design: {
13535
+ sectionSurface: "base",
13536
+ contentFrame: plainFrame,
13537
+ itemSurface: "raised"
13538
+ }
13539
+ }), defineBlockAppearancePreset({
13540
+ id: "feature-cards-bold-colors",
13541
+ target: "feature-cards",
13542
+ label: "Bold colour-blocked cards",
13543
+ blockKinds: ["block.feature-cards"],
13544
+ design: {
13545
+ sectionSurface: "base",
13546
+ contentFrame: plainFrame,
13547
+ itemSurface: "color-blocked"
13548
+ }
13549
+ }), defineBlockAppearancePreset({
13550
+ id: "feature-cards-editorial-columns",
13551
+ target: "feature-cards",
13552
+ label: "Editorial open columns",
13553
+ blockKinds: ["block.feature-cards"],
13554
+ design: {
13555
+ sectionSurface: "base",
13556
+ contentFrame: plainFrame,
13557
+ itemSurface: "editorial"
13558
+ }
13559
+ }), defineBlockAppearancePreset({
13560
+ id: "feature-cards-asymmetric-emphasis",
13561
+ target: "feature-cards",
13562
+ label: "Asymmetric emphasis pair",
13563
+ blockKinds: ["block.feature-cards"],
13564
+ constraints: { layoutFamilies: ["grid"] },
13565
+ design: {
13566
+ sectionSurface: "base",
13567
+ contentFrame: plainFrame,
13568
+ itemSurface: "none",
13569
+ composition: {
13570
+ kind: "feature-cards",
13571
+ treatment: "asymmetric-emphasis"
13848
13572
  }
13849
- }),
13850
- defineBlockAppearancePreset({
13851
- kind: "block-design",
13852
- id: "cta-accent-band",
13853
- target: "cta",
13854
- label: "Accent CTA band",
13855
- blockKinds: ["block.cta-full"],
13856
- design: {
13857
- sectionSurface: "accent-band",
13858
- contentFrame: plainFrame,
13859
- itemSurface: "none",
13860
- eyebrowTreatment: "accent"
13573
+ }
13574
+ }), defineBlockAppearancePreset({
13575
+ id: "feature-cards-framed-programme",
13576
+ target: "feature-cards",
13577
+ label: "Framed programme cards",
13578
+ blockKinds: ["block.feature-cards"],
13579
+ constraints: { layoutFamilies: ["grid"] },
13580
+ design: {
13581
+ sectionSurface: "brand-depth-band",
13582
+ contentFrame: plainFrame,
13583
+ itemSurface: "inset",
13584
+ composition: {
13585
+ kind: "feature-cards",
13586
+ treatment: "framed-programme"
13861
13587
  }
13862
- })
13863
- ];
13588
+ }
13589
+ }), defineBlockAppearancePreset({
13590
+ id: "feature-cards-soft-panels",
13591
+ target: "feature-cards",
13592
+ label: "Soft tinted panels",
13593
+ blockKinds: ["block.feature-cards"],
13594
+ design: {
13595
+ sectionSurface: "base",
13596
+ contentFrame: plainFrame,
13597
+ itemSurface: "inset"
13598
+ }
13599
+ }), defineBlockAppearancePreset({
13600
+ id: "feature-cards-editorial-diptych",
13601
+ target: "feature-cards",
13602
+ label: "Editorial diptych",
13603
+ blockKinds: ["block.feature-cards"],
13604
+ constraints: { layoutVariantKeys: ["editorial-diptych"] },
13605
+ design: {
13606
+ sectionSurface: "base",
13607
+ contentFrame: plainFrame,
13608
+ itemSurface: "flat"
13609
+ }
13610
+ }), defineBlockAppearancePreset({
13611
+ id: "feature-cards-editorial-pathways",
13612
+ target: "feature-cards",
13613
+ label: "Editorial pathways",
13614
+ blockKinds: ["block.feature-cards"],
13615
+ constraints: { layoutVariantKeys: ["editorial-pathways"] },
13616
+ design: {
13617
+ sectionSurface: "base",
13618
+ contentFrame: plainFrame,
13619
+ itemSurface: "flat"
13620
+ }
13621
+ }), defineBlockAppearancePreset({
13622
+ id: "feature-cards-photo-tiles",
13623
+ target: "feature-cards",
13624
+ label: "Photo tiles",
13625
+ blockKinds: ["block.feature-cards"],
13626
+ design: {
13627
+ sectionSurface: "base",
13628
+ contentFrame: plainFrame,
13629
+ itemSurface: "raised"
13630
+ }
13631
+ }), defineBlockAppearancePreset({
13632
+ id: "events-lined-panel",
13633
+ target: "events",
13634
+ label: "Raised event panel",
13635
+ blockKinds: ["block.event-calendar", "block.event-listing"],
13636
+ design: {
13637
+ sectionSurface: "base",
13638
+ contentFrame: panelFrame("raised"),
13639
+ itemSurface: "none"
13640
+ }
13641
+ }), defineBlockAppearancePreset({
13642
+ id: "events-ruled-register",
13643
+ target: "events",
13644
+ label: "Ruled event register",
13645
+ blockKinds: ["block.event-calendar", "block.event-listing"],
13646
+ design: {
13647
+ sectionSurface: "brand-depth-band",
13648
+ contentFrame: plainFrame,
13649
+ itemSurface: "none",
13650
+ eventListTreatment: "ruled-register"
13651
+ }
13652
+ }), defineBlockAppearancePreset({
13653
+ id: "events-editorial-register",
13654
+ target: "events",
13655
+ label: "Editorial event register",
13656
+ blockKinds: ["block.event-calendar", "block.event-listing"],
13657
+ design: {
13658
+ sectionSurface: "base",
13659
+ contentFrame: plainFrame,
13660
+ itemSurface: "none",
13661
+ eventListTreatment: "editorial-register"
13662
+ }
13663
+ }), defineBlockAppearancePreset({
13664
+ id: "events-dense-index",
13665
+ target: "events",
13666
+ label: "Dense event index",
13667
+ blockKinds: ["block.event-calendar", "block.event-listing"],
13668
+ design: {
13669
+ sectionSurface: "accent-band",
13670
+ contentFrame: plainFrame,
13671
+ itemSurface: "none",
13672
+ eventListTreatment: "dense-index"
13673
+ }
13674
+ }), defineBlockAppearancePreset({
13675
+ id: "schedule-details-brand-depth",
13676
+ target: "events",
13677
+ label: "Brand-depth schedule details",
13678
+ blockKinds: ["block.event-details", "block.course-details"],
13679
+ design: {
13680
+ sectionSurface: "brand-depth-band",
13681
+ contentFrame: plainFrame,
13682
+ itemSurface: "none",
13683
+ tileTreatment: "brand-depth"
13684
+ }
13685
+ }), defineBlockAppearancePreset({
13686
+ id: "media-text-flush-feature",
13687
+ target: "media-text",
13688
+ label: "Flush media feature",
13689
+ blockKinds: ["block.media-text"],
13690
+ design: {
13691
+ sectionSurface: "muted-band",
13692
+ contentFrame: flushPanelFrame({ bleed: "start" }),
13693
+ itemSurface: "none"
13694
+ }
13695
+ }), defineBlockAppearancePreset({
13696
+ id: "testimonials-simple-cards",
13697
+ target: "testimonials",
13698
+ label: "Simple testimonial cards",
13699
+ blockKinds: ["block.testimonials"],
13700
+ design: {
13701
+ sectionSurface: "base",
13702
+ contentFrame: plainFrame,
13703
+ itemSurface: "default"
13704
+ }
13705
+ }), defineBlockAppearancePreset({
13706
+ id: "testimonials-raised-panel",
13707
+ target: "testimonials",
13708
+ label: "Raised testimonial panel",
13709
+ blockKinds: ["block.testimonials"],
13710
+ design: {
13711
+ sectionSurface: "muted-band",
13712
+ contentFrame: panelFrame("raised"),
13713
+ itemSurface: "raised"
13714
+ }
13715
+ }), defineBlockAppearancePreset({
13716
+ id: "testimonials-accent-panel",
13717
+ target: "testimonials",
13718
+ label: "Accent testimonial panel",
13719
+ blockKinds: ["block.testimonials"],
13720
+ design: {
13721
+ sectionSurface: "accent-band",
13722
+ contentFrame: panelFrame("raised"),
13723
+ itemSurface: "raised"
13724
+ }
13725
+ }), defineBlockAppearancePreset({
13726
+ id: "testimonials-default-cards",
13727
+ target: "testimonials",
13728
+ label: "Default cards",
13729
+ blockKinds: ["block.testimonials"],
13730
+ design: {
13731
+ sectionSurface: "base",
13732
+ contentFrame: plainFrame,
13733
+ itemSurface: "none",
13734
+ testimonialCardTreatment: "default"
13735
+ }
13736
+ }), defineBlockAppearancePreset({
13737
+ id: "testimonials-statement-cards",
13738
+ target: "testimonials",
13739
+ label: "Statement cards",
13740
+ blockKinds: ["block.testimonials"],
13741
+ design: {
13742
+ sectionSurface: "accent-band",
13743
+ contentFrame: plainFrame,
13744
+ itemSurface: "raised",
13745
+ testimonialCardTreatment: "statement"
13746
+ }
13747
+ }), defineBlockAppearancePreset({
13748
+ id: "testimonials-brand-statement-cards",
13749
+ target: "testimonials",
13750
+ label: "Brand statement cards",
13751
+ blockKinds: ["block.testimonials"],
13752
+ design: {
13753
+ sectionSurface: "brand-depth-band",
13754
+ contentFrame: plainFrame,
13755
+ itemSurface: "raised",
13756
+ testimonialCardTreatment: "statement"
13757
+ }
13758
+ }), defineBlockAppearancePreset({
13759
+ id: "testimonials-non-carded",
13760
+ target: "testimonials",
13761
+ label: "Non-carded",
13762
+ blockKinds: ["block.testimonials"],
13763
+ design: {
13764
+ sectionSurface: "muted-band",
13765
+ contentFrame: plainFrame,
13766
+ itemSurface: "none",
13767
+ testimonialCardTreatment: "non-carded"
13768
+ }
13769
+ }), defineBlockAppearancePreset({
13770
+ id: "testimonials-evergreen-lead",
13771
+ target: "testimonials",
13772
+ label: "Evergreen lead",
13773
+ blockKinds: ["block.testimonials"],
13774
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
13775
+ design: {
13776
+ sectionSurface: "base",
13777
+ contentFrame: plainFrame,
13778
+ itemSurface: "none"
13779
+ }
13780
+ }), defineBlockAppearancePreset({
13781
+ id: "testimonials-room-and-response",
13782
+ target: "testimonials",
13783
+ label: "Room and response",
13784
+ blockKinds: ["block.testimonials"],
13785
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
13786
+ design: {
13787
+ sectionSurface: "base",
13788
+ contentFrame: plainFrame,
13789
+ itemSurface: "none"
13790
+ }
13791
+ }), defineBlockAppearancePreset({
13792
+ id: "testimonials-open-floor",
13793
+ target: "testimonials",
13794
+ label: "Open floor",
13795
+ blockKinds: ["block.testimonials"],
13796
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
13797
+ design: {
13798
+ sectionSurface: "base",
13799
+ contentFrame: plainFrame,
13800
+ itemSurface: "none"
13801
+ }
13802
+ }), defineBlockAppearancePreset({
13803
+ id: "faq-base-accordion",
13804
+ target: "faq",
13805
+ label: "Base accordion FAQ",
13806
+ blockKinds: ["block.faq"],
13807
+ design: {
13808
+ sectionSurface: "base",
13809
+ contentFrame: plainFrame,
13810
+ itemSurface: "default"
13811
+ }
13812
+ }), defineBlockAppearancePreset({
13813
+ id: "faq-contained-help",
13814
+ target: "faq",
13815
+ label: "Contained help panel",
13816
+ blockKinds: ["block.faq"],
13817
+ design: {
13818
+ sectionSurface: "muted-band",
13819
+ contentFrame: panelFrame("inset"),
13820
+ itemSurface: "default"
13821
+ }
13822
+ }), defineBlockAppearancePreset({
13823
+ id: "contact-form-panel",
13824
+ target: "contact-form",
13825
+ label: "Raised form panel",
13826
+ blockKinds: ["block.form"],
13827
+ design: {
13828
+ sectionSurface: "muted-band",
13829
+ contentFrame: panelFrame("raised"),
13830
+ itemSurface: "none"
13831
+ }
13832
+ }), defineBlockAppearancePreset({
13833
+ id: "cta-accent-band",
13834
+ target: "cta",
13835
+ label: "Accent CTA band",
13836
+ blockKinds: ["block.cta-full"],
13837
+ design: {
13838
+ sectionSurface: "accent-band",
13839
+ contentFrame: plainFrame,
13840
+ itemSurface: "none",
13841
+ eyebrowTreatment: "accent"
13842
+ }
13843
+ });
13864
13844
  }));
13865
13845
  var init_appearancePresetCatalog = __esmMin((() => {
13866
13846
  init_blockAppearancePresets();
13867
- [...blockAppearancePresets];
13868
13847
  }));
13869
13848
  var init_appearancePresetTypes = __esmMin((() => {}));
13870
13849
  //#endregion
@@ -15583,6 +15562,12 @@ function requirePaletteColorsFromEntries(entries) {
15583
15562
  if (result.ok) return result.colors;
15584
15563
  throw new Error(`Invalid complete palette: ${result.error.kind}`);
15585
15564
  }
15565
+ function paletteColorEntries(colors) {
15566
+ return THEME_PALETTE_COLOR_ORDER.map((name) => ({
15567
+ name,
15568
+ hex: colors[name]
15569
+ }));
15570
+ }
15586
15571
  function paletteColorFingerprint(colors) {
15587
15572
  return PALETTE_TOKEN_NAMES.map((name) => `${name}:${colors[name]}`).join("|");
15588
15573
  }
@@ -15590,7 +15575,7 @@ function canonicalPaletteHashInput(colors, mode) {
15590
15575
  return `${mode}|${paletteColorFingerprint(colors)}`;
15591
15576
  }
15592
15577
  /**
15593
- * The shared TypeScript/SQL protocol. Do not reorder roles: the order comes
15578
+ * Stable curated-catalogue identity. Do not reorder roles: the order comes
15594
15579
  * from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
15595
15580
  */
15596
15581
  function paletteValueKey(colors, mode) {
@@ -15615,11 +15600,26 @@ function parsePaletteValueKey(value) {
15615
15600
  if (!colors.ok || paletteValueKey(colors.colors, mode.data) !== value) return null;
15616
15601
  return value;
15617
15602
  }
15618
- var HEX_COLOR_REGEX, NORMALIZABLE_HEX_REGEX, hexColorSchema, paletteModeSchema, PALETTE_VALUE_KEY_PREFIX, paletteColorsSchema, paletteValueKeySchema;
15603
+ var HEX_COLOR_REGEX, NORMALIZABLE_HEX_REGEX, THEME_PALETTE_COLOR_ORDER, hexColorSchema, paletteModeSchema, PALETTE_VALUE_KEY_PREFIX, paletteColorsSchema, paletteValueKeySchema;
15619
15604
  var init_colors = __esmMin((() => {
15620
15605
  init_themeColorTokens();
15621
15606
  HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
15622
15607
  NORMALIZABLE_HEX_REGEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
15608
+ THEME_PALETTE_COLOR_ORDER = [
15609
+ "primary",
15610
+ "secondary",
15611
+ "accent",
15612
+ "success",
15613
+ "warning",
15614
+ "destructive",
15615
+ "background",
15616
+ "surface",
15617
+ "surfaceAlt",
15618
+ "muted",
15619
+ "text",
15620
+ "primaryForeground",
15621
+ "border"
15622
+ ];
15623
15623
  hexColorSchema = z$1.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
15624
15624
  paletteModeSchema = z$1.enum(["light", "dark"]);
15625
15625
  PALETTE_VALUE_KEY_PREFIX = "palette-value:v1|";
@@ -15649,8 +15649,12 @@ var init_colors = __esmMin((() => {
15649
15649
  return z$1.NEVER;
15650
15650
  });
15651
15651
  }));
15652
- var init_editorState = __esmMin((() => {}));
15653
- var init_libraryModel = __esmMin((() => {}));
15652
+ var init_concretePalette = __esmMin((() => {
15653
+ init_colors();
15654
+ }));
15655
+ var init_fromVibrant = __esmMin((() => {
15656
+ init_utils$6();
15657
+ }));
15654
15658
  //#endregion
15655
15659
  //#region ../theme-core/src/site-styles/styleTags.ts
15656
15660
  var STYLE_AXIS_VALUES, styleTagsSchema;
@@ -16940,22 +16944,12 @@ var init_warm_dark = __esmMin((() => {
16940
16944
  }));
16941
16945
  //#endregion
16942
16946
  //#region ../theme-core/src/palette/curated/index.ts
16943
- /**
16944
- * Curated palette library.
16945
- *
16946
- * Authoring keys are readable source aliases. Value keys are derived from the
16947
- * complete mode and semantic colours and are the only curated identity used at
16948
- * persistence and runtime boundaries.
16949
- */
16950
16947
  function admitCuratedPaletteDefinition(definition) {
16951
16948
  return {
16952
16949
  ...definition,
16953
16950
  valueKey: definition.valueKey
16954
16951
  };
16955
16952
  }
16956
- function findCuratedPalette(valueKey) {
16957
- return curatedPalettesByValueKey.get(valueKey);
16958
- }
16959
16953
  function findCuratedPaletteByAuthoringKey(authoringKey) {
16960
16954
  return curatedPalettesByAuthoringKey.get(authoringKey);
16961
16955
  }
@@ -16964,9 +16958,8 @@ function requireCuratedPaletteValueKey(authoringKey) {
16964
16958
  if (!palette) throw new Error(`Unknown curated palette authoring key "${authoringKey}"`);
16965
16959
  return palette.valueKey;
16966
16960
  }
16967
- var curatedPalettes, curatedPalettesByValueKey, curatedPalettesByAuthoringKey, knownCuratedPaletteValueKeySchema;
16961
+ var curatedPalettes, curatedPalettesByAuthoringKey;
16968
16962
  var init_curated = __esmMin((() => {
16969
- init_colors();
16970
16963
  init_brand_led();
16971
16964
  init_high_contrast();
16972
16965
  init_soft_natural();
@@ -16993,107 +16986,8 @@ var init_curated = __esmMin((() => {
16993
16986
  admitCuratedPaletteDefinition(warmDarkEmber),
16994
16987
  admitCuratedPaletteDefinition(warmDarkKirtanGold)
16995
16988
  ];
16996
- curatedPalettesByValueKey = new Map(curatedPalettes.map((palette) => [palette.valueKey, palette]));
16989
+ new Map(curatedPalettes.map((palette) => [palette.valueKey, palette]));
16997
16990
  curatedPalettesByAuthoringKey = new Map(curatedPalettes.map((palette) => [palette.authoringKey, palette]));
16998
- knownCuratedPaletteValueKeySchema = z$1.string().transform((value, ctx) => {
16999
- const valueKey = parsePaletteValueKey(value);
17000
- if (!valueKey) {
17001
- ctx.addIssue({
17002
- code: "custom",
17003
- message: "Invalid canonical palette value key"
17004
- });
17005
- return z$1.NEVER;
17006
- }
17007
- const palette = findCuratedPalette(valueKey);
17008
- if (!palette) {
17009
- ctx.addIssue({
17010
- code: "custom",
17011
- message: "Unknown curated palette value key"
17012
- });
17013
- return z$1.NEVER;
17014
- }
17015
- return palette.valueKey;
17016
- });
17017
- }));
17018
- var init_resolveSelection = __esmMin((() => {
17019
- init_curated();
17020
- })), sitePaletteIdSchema, sitePaletteVersionSchema, paletteSelectionSchema, onboardingPaletteOriginSchema, curatedForkPaletteOriginSchema, manualPaletteOriginSchema, legacyCustomizedPaletteOriginSchema, sitePaletteOriginSchema, editorSitePaletteOriginSchema;
17021
- var init_selection$1 = __esmMin((() => {
17022
- init_colors();
17023
- init_curated();
17024
- sitePaletteIdSchema = z$1.string().uuid().transform((value) => value);
17025
- sitePaletteVersionSchema = z$1.number().int().nonnegative().transform((value) => value);
17026
- paletteSelectionSchema = z$1.discriminatedUnion("kind", [z$1.object({
17027
- kind: z$1.literal("curated"),
17028
- valueKey: knownCuratedPaletteValueKeySchema
17029
- }), z$1.object({
17030
- kind: z$1.literal("site"),
17031
- paletteId: sitePaletteIdSchema
17032
- })]);
17033
- onboardingPaletteOriginSchema = z$1.object({
17034
- kind: z$1.literal("onboarding"),
17035
- sourceKey: z$1.string().min(1).nullable()
17036
- });
17037
- curatedForkPaletteOriginSchema = z$1.object({
17038
- kind: z$1.literal("curated-fork"),
17039
- sourceValueKey: paletteValueKeySchema
17040
- });
17041
- manualPaletteOriginSchema = z$1.object({ kind: z$1.literal("manual") });
17042
- legacyCustomizedPaletteOriginSchema = z$1.object({
17043
- kind: z$1.literal("legacy-customized"),
17044
- sourceKey: z$1.string().min(1).nullable()
17045
- });
17046
- sitePaletteOriginSchema = z$1.discriminatedUnion("kind", [
17047
- onboardingPaletteOriginSchema,
17048
- curatedForkPaletteOriginSchema,
17049
- manualPaletteOriginSchema,
17050
- legacyCustomizedPaletteOriginSchema
17051
- ]);
17052
- editorSitePaletteOriginSchema = z$1.discriminatedUnion("kind", [z$1.object({
17053
- kind: z$1.literal("curated-fork"),
17054
- sourceValueKey: knownCuratedPaletteValueKeySchema
17055
- }), manualPaletteOriginSchema]);
17056
- z$1.object({
17057
- id: sitePaletteIdSchema,
17058
- colors: paletteColorsSchema,
17059
- mode: paletteModeSchema,
17060
- origin: sitePaletteOriginSchema,
17061
- version: sitePaletteVersionSchema
17062
- });
17063
- z$1.discriminatedUnion("kind", [
17064
- z$1.object({ kind: z$1.literal("preserve") }),
17065
- z$1.object({
17066
- kind: z$1.literal("select"),
17067
- selection: paletteSelectionSchema
17068
- }),
17069
- z$1.object({
17070
- kind: z$1.literal("create-site"),
17071
- colors: paletteColorsSchema,
17072
- mode: paletteModeSchema,
17073
- origin: editorSitePaletteOriginSchema
17074
- }),
17075
- z$1.object({
17076
- kind: z$1.literal("update-site"),
17077
- paletteId: sitePaletteIdSchema,
17078
- expectedVersion: sitePaletteVersionSchema,
17079
- colors: paletteColorsSchema,
17080
- mode: paletteModeSchema
17081
- })
17082
- ]);
17083
- }));
17084
- var init_persistenceReadSource = __esmMin((() => {
17085
- init_curated();
17086
- init_colors();
17087
- init_resolveSelection();
17088
- init_selection$1();
17089
- }));
17090
- var init_sitePalettePersistence = __esmMin((() => {
17091
- init_curated();
17092
- init_colors();
17093
- init_selection$1();
17094
- }));
17095
- var init_fromVibrant = __esmMin((() => {
17096
- init_utils$6();
17097
16991
  }));
17098
16992
  //#endregion
17099
16993
  //#region ../theme-core/src/palette/index.ts
@@ -17109,12 +17003,7 @@ var init_palette$1 = __esmMin((() => {
17109
17003
  init_paletteAccess();
17110
17004
  init_extractPalette();
17111
17005
  init_colors();
17112
- init_editorState();
17113
- init_libraryModel();
17114
- init_persistenceReadSource();
17115
- init_resolveSelection();
17116
- init_selection$1();
17117
- init_sitePalettePersistence();
17006
+ init_concretePalette();
17118
17007
  init_fromVibrant();
17119
17008
  init_suggestRecipes();
17120
17009
  init_allRecipes();
@@ -17347,6 +17236,47 @@ var init_backgroundAppearance = __esmMin((() => {
17347
17236
  var init_compositionBudget = __esmMin((() => {
17348
17237
  init_types$15();
17349
17238
  }));
17239
+ var init_headerStyleParts = __esmMin((() => {}));
17240
+ var headerInteractionPaletteValues, headerInteractionPaletteSchema;
17241
+ var init_interactionPalette = __esmMin((() => {
17242
+ headerInteractionPaletteValues = [
17243
+ "primary",
17244
+ "secondary",
17245
+ "accent"
17246
+ ];
17247
+ headerInteractionPaletteSchema = z$1.enum(headerInteractionPaletteValues);
17248
+ }));
17249
+ var clearSplitInteractionPalette;
17250
+ var init_headerInteractionPalette = __esmMin((() => {
17251
+ init_interactionPalette();
17252
+ init_lookOptionGroups();
17253
+ clearSplitInteractionPalette = defineLookOptionGroup({
17254
+ id: "interaction-palette",
17255
+ label: "Hover colour",
17256
+ defaultOptionId: "accent",
17257
+ options: [
17258
+ {
17259
+ id: "accent",
17260
+ label: "Accent"
17261
+ },
17262
+ {
17263
+ id: "primary",
17264
+ label: "Primary"
17265
+ },
17266
+ {
17267
+ id: "secondary",
17268
+ label: "Secondary"
17269
+ }
17270
+ ]
17271
+ });
17272
+ }));
17273
+ var init_headerOpeningForeground = __esmMin((() => {
17274
+ init_expandPalette();
17275
+ init_colorConversion();
17276
+ init_tokens();
17277
+ init_colorTokenParts();
17278
+ init_types$15();
17279
+ }));
17350
17280
  var init_customizableSurfaces = __esmMin((() => {
17351
17281
  init_types$15();
17352
17282
  })), logoTextConfidenceValues, logoAssetShapeValues, logoKindValues, logoDensityValues, logoContainsTextSchema, logoAnalysisSourceSchema, brandDisplayModeValues, logoAccommodationPatternValues, logoSizePolicyValues;
@@ -17457,7 +17387,7 @@ function asHeaderStyleId(value) {
17457
17387
  * optional nested styling fields that would otherwise leak from another Look.
17458
17388
  */
17459
17389
  function baseHeader(theme) {
17460
- const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
17390
+ const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, interactionPalette: _interactionPalette, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
17461
17391
  return {
17462
17392
  ...header,
17463
17393
  navContainer: {
@@ -17513,7 +17443,7 @@ function applyNavTypography(style, typography) {
17513
17443
  textSize: "sm",
17514
17444
  letterSpacing: "wider"
17515
17445
  };
17516
- default: return assertNever$16(typography, "Unhandled header nav typography");
17446
+ default: return assertNever$15(typography, "Unhandled header nav typography");
17517
17447
  }
17518
17448
  }
17519
17449
  function underlineNavLinkStyle(colorToken, underlineColorToken, typography = "plain") {
@@ -17542,7 +17472,7 @@ function themedHeaderShadow(theme) {
17542
17472
  case "low": return { elevation: "sm" };
17543
17473
  case "medium": return { elevation: "md" };
17544
17474
  case "high": return { elevation: "lg" };
17545
- default: return assertNever$16(theme.shadow.elevation, "Unhandled theme shadow elevation");
17475
+ default: return assertNever$15(theme.shadow.elevation, "Unhandled theme shadow elevation");
17546
17476
  }
17547
17477
  }
17548
17478
  function solidBrandHeader(theme) {
@@ -17816,12 +17746,12 @@ function floatingGlassHeader(theme) {
17816
17746
  }
17817
17747
  };
17818
17748
  }
17819
- function headerConfigurationKey(configuration) {
17820
- return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
17821
- }
17822
17749
  var titleOnlyLogoAccommodation, inlineWordmarkLogoAccommodation, inlineMarkWithTitleLogoAccommodation, logoPlateAccommodation, centeredBadgeAccommodation, popoutBadgeAccommodation, centeredMastheadAccommodation, unbackedOverlayLogoAccommodation, inlineClassicLogoAccommodations, centeredLogoAccommodations, overlayLogoAccommodations, headerLayoutCatalog, headerStyleCatalog, headerStylesById, headerStyleCompatibilityOrder, legacyHeaderLookAliases, legacyHeaderLookAliasesById, headerLookCatalog;
17823
17750
  var init_headerLooks = __esmMin((() => {
17824
17751
  init_headerCtaVariants();
17752
+ init_headerStyleParts();
17753
+ init_headerInteractionPalette();
17754
+ init_headerOpeningForeground();
17825
17755
  init_customizableSurfaces();
17826
17756
  init_logoBranding();
17827
17757
  init_types$15();
@@ -17948,7 +17878,6 @@ var init_headerLooks = __esmMin((() => {
17948
17878
  id: asHeaderLayoutId("classic"),
17949
17879
  label: "Classic",
17950
17880
  description: "Logo and navigation in one practical horizontal row.",
17951
- structure: "inline-classic",
17952
17881
  variant: "classic",
17953
17882
  defaultPositioning: "sticky",
17954
17883
  shrinkOnScroll: false
@@ -17957,7 +17886,6 @@ var init_headerLooks = __esmMin((() => {
17957
17886
  id: asHeaderLayoutId("centered"),
17958
17887
  label: "Centered",
17959
17888
  description: "Logo centered above a balanced navigation row.",
17960
- structure: "centered-stack",
17961
17889
  variant: "centered",
17962
17890
  defaultPositioning: "static",
17963
17891
  shrinkOnScroll: false,
@@ -17973,7 +17901,6 @@ var init_headerLooks = __esmMin((() => {
17973
17901
  id: asHeaderLayoutId("floating"),
17974
17902
  label: "Floating",
17975
17903
  description: "Detached header chrome that sits over the opening section.",
17976
- structure: "floating-shell",
17977
17904
  variant: "floating",
17978
17905
  defaultPositioning: "sticky",
17979
17906
  shrinkOnScroll: true,
@@ -18132,10 +18059,13 @@ var init_headerLooks = __esmMin((() => {
18132
18059
  label: "Clear Split",
18133
18060
  description: "Floating logo with transparent navigation and no shared shell.",
18134
18061
  supportedLayoutIds: supportedLayouts(["floating"]),
18135
- navInteraction: "color-change",
18062
+ navInteraction: "pill-background",
18136
18063
  surface: "floating",
18137
- defaultDepth: "none",
18064
+ defaultDepth: "line",
18138
18065
  navTypography: "plain",
18066
+ openingForegroundTarget: "all",
18067
+ scrollTreatment: "contrast-glass",
18068
+ interactionPalette: clearSplitInteractionPalette,
18139
18069
  moods: ["editorial", "calm"]
18140
18070
  },
18141
18071
  {
@@ -18158,6 +18088,7 @@ var init_headerLooks = __esmMin((() => {
18158
18088
  surface: "floating",
18159
18089
  defaultDepth: "shadow",
18160
18090
  navTypography: "quiet-caps",
18091
+ openingForegroundTarget: "brand-only",
18161
18092
  moods: ["expressive"]
18162
18093
  },
18163
18094
  {
@@ -18169,6 +18100,7 @@ var init_headerLooks = __esmMin((() => {
18169
18100
  surface: "floating",
18170
18101
  defaultDepth: "shadow",
18171
18102
  navTypography: "heading",
18103
+ openingForegroundTarget: "brand-only",
18172
18104
  moods: ["calm", "editorial"]
18173
18105
  }
18174
18106
  ]);
@@ -18324,13 +18256,6 @@ var init_headerLooks = __esmMin((() => {
18324
18256
  {
18325
18257
  id: asHeaderLookId("clean-base"),
18326
18258
  label: "Clean base",
18327
- visualTreatment: "solid-neutral",
18328
- layoutBehavior: "sticky",
18329
- configuration: {
18330
- structure: "inline-classic",
18331
- treatment: "solid-neutral",
18332
- behavior: "sticky"
18333
- },
18334
18259
  openingRequirement: "none",
18335
18260
  logoAccommodations: inlineClassicLogoAccommodations,
18336
18261
  compile: cleanBaseHeader
@@ -18338,13 +18263,6 @@ var init_headerLooks = __esmMin((() => {
18338
18263
  {
18339
18264
  id: asHeaderLookId("classic-centered-nav"),
18340
18265
  label: "Centered nav",
18341
- visualTreatment: "solid-neutral",
18342
- layoutBehavior: "sticky",
18343
- configuration: {
18344
- structure: "inline-classic",
18345
- treatment: "solid-neutral",
18346
- behavior: "sticky"
18347
- },
18348
18266
  openingRequirement: "none",
18349
18267
  maxRecommendedNavItems: 6,
18350
18268
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -18353,13 +18271,6 @@ var init_headerLooks = __esmMin((() => {
18353
18271
  {
18354
18272
  id: asHeaderLookId("brand-solid"),
18355
18273
  label: "Brand solid",
18356
- visualTreatment: "solid-brand",
18357
- layoutBehavior: "sticky-shrink",
18358
- configuration: {
18359
- structure: "inline-classic",
18360
- treatment: "solid-brand",
18361
- behavior: "sticky-shrink"
18362
- },
18363
18274
  openingRequirement: "none",
18364
18275
  logoAccommodations: inlineClassicLogoAccommodations,
18365
18276
  compile: solidBrandHeader
@@ -18367,13 +18278,6 @@ var init_headerLooks = __esmMin((() => {
18367
18278
  {
18368
18279
  id: asHeaderLookId("serif-line"),
18369
18280
  label: "Serif line",
18370
- visualTreatment: "light-serif",
18371
- layoutBehavior: "sticky",
18372
- configuration: {
18373
- structure: "centered-stack",
18374
- treatment: "light-serif",
18375
- behavior: "sticky"
18376
- },
18377
18281
  openingRequirement: "none",
18378
18282
  maxRecommendedNavItems: 6,
18379
18283
  logoAccommodations: centeredLogoAccommodations,
@@ -18382,13 +18286,6 @@ var init_headerLooks = __esmMin((() => {
18382
18286
  {
18383
18287
  id: asHeaderLookId("centered-calm"),
18384
18288
  label: "Centered calm",
18385
- visualTreatment: "light-serif",
18386
- layoutBehavior: "normal-flow",
18387
- configuration: {
18388
- structure: "centered-stack",
18389
- treatment: "light-serif",
18390
- behavior: "normal-flow"
18391
- },
18392
18289
  openingRequirement: "none",
18393
18290
  maxRecommendedNavItems: 5,
18394
18291
  logoAccommodations: centeredLogoAccommodations,
@@ -18397,13 +18294,6 @@ var init_headerLooks = __esmMin((() => {
18397
18294
  {
18398
18295
  id: asHeaderLookId("practical-utility"),
18399
18296
  label: "Practical utility",
18400
- visualTreatment: "solid-neutral",
18401
- layoutBehavior: "sticky-shrink",
18402
- configuration: {
18403
- structure: "inline-classic",
18404
- treatment: "solid-neutral",
18405
- behavior: "sticky-shrink"
18406
- },
18407
18297
  openingRequirement: "none",
18408
18298
  requiresProminentCta: true,
18409
18299
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -18412,13 +18302,6 @@ var init_headerLooks = __esmMin((() => {
18412
18302
  {
18413
18303
  id: asHeaderLookId("minimal-transparent"),
18414
18304
  label: "Minimal transparent",
18415
- visualTreatment: "minimal-transparent",
18416
- layoutBehavior: "normal-flow",
18417
- configuration: {
18418
- structure: "inline-classic",
18419
- treatment: "minimal-transparent",
18420
- behavior: "normal-flow"
18421
- },
18422
18305
  openingRequirement: "reserved-space-ok",
18423
18306
  logoAccommodations: inlineClassicLogoAccommodations,
18424
18307
  compile: minimalTransparentHeader
@@ -18426,13 +18309,6 @@ var init_headerLooks = __esmMin((() => {
18426
18309
  {
18427
18310
  id: asHeaderLookId("transparent-overlay"),
18428
18311
  label: "Transparent overlay",
18429
- visualTreatment: "transparent-overlay",
18430
- layoutBehavior: "fixed-overlay",
18431
- configuration: {
18432
- structure: "inline-classic",
18433
- treatment: "transparent-overlay",
18434
- behavior: "fixed-overlay"
18435
- },
18436
18312
  openingRequirement: "requires-image-hero-with-contrast-overlay",
18437
18313
  maxRecommendedNavItems: 5,
18438
18314
  logoAccommodations: overlayLogoAccommodations,
@@ -18441,20 +18317,12 @@ var init_headerLooks = __esmMin((() => {
18441
18317
  {
18442
18318
  id: asHeaderLookId("floating-glass"),
18443
18319
  label: "Floating glass",
18444
- visualTreatment: "floating-glass",
18445
- layoutBehavior: "fixed-floating",
18446
- configuration: {
18447
- structure: "floating-shell",
18448
- treatment: "floating-glass",
18449
- behavior: "fixed-floating"
18450
- },
18451
18320
  openingRequirement: "requires-image-hero-with-contrast-overlay",
18452
18321
  maxRecommendedNavItems: 5,
18453
18322
  logoAccommodations: overlayLogoAccommodations,
18454
18323
  compile: floatingGlassHeader
18455
18324
  }
18456
18325
  ]);
18457
- new Set(headerLookCatalog.map((look) => headerConfigurationKey(look.configuration)));
18458
18326
  new Map(headerLookCatalog.map((look) => [look.id, look]));
18459
18327
  }));
18460
18328
  var init_compilationPlan = __esmMin((() => {
@@ -18700,11 +18568,9 @@ var init_types$12 = __esmMin((() => {
18700
18568
  "secondary",
18701
18569
  "outline",
18702
18570
  "ghost",
18703
- "link",
18704
- "tertiary",
18705
18571
  "accent"
18706
18572
  ];
18707
- buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only");
18573
+ buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only").refine((value) => value !== "link" && value !== "tertiary", { message: "Retired button role IDs are not valid variant IDs" });
18708
18574
  DEFAULT_VARIANT_ALIAS_ID = "default";
18709
18575
  opaqueButtonColourTokenSchema = themeColorTokenSchema.refine((value) => parseOpaqueButtonColourToken(value) !== null, "Button colour tokens must be opaque").transform((value) => {
18710
18576
  const token = parseOpaqueButtonColourToken(value);
@@ -21822,41 +21688,41 @@ var init_siteStyleTypography = __esmMin((() => {
21822
21688
  }));
21823
21689
  //#endregion
21824
21690
  //#region ../theme-core/src/lib/media.ts
21825
- var hotspotSchema$1, rotationSchema$1, rectSchema$1, aspectCropSchema$1, transformSchema$1, mediaSchema$1;
21826
- var init_media$2 = __esmMin((() => {
21827
- hotspotSchema$1 = z.object({
21691
+ var hotspotSchema, rotationSchema, rectSchema, aspectCropSchema, transformSchema, mediaSchema;
21692
+ var init_media$1 = __esmMin((() => {
21693
+ hotspotSchema = z.object({
21828
21694
  x: z.number().min(0).max(1),
21829
21695
  y: z.number().min(0).max(1),
21830
21696
  radius: z.number().optional()
21831
21697
  });
21832
- rotationSchema$1 = z.union([
21698
+ rotationSchema = z.union([
21833
21699
  z.literal(0),
21834
21700
  z.literal(90),
21835
21701
  z.literal(180),
21836
21702
  z.literal(270)
21837
21703
  ]);
21838
- rectSchema$1 = z.tuple([
21704
+ rectSchema = z.tuple([
21839
21705
  z.number(),
21840
21706
  z.number(),
21841
21707
  z.number(),
21842
21708
  z.number()
21843
21709
  ]);
21844
- aspectCropSchema$1 = z.object({
21710
+ aspectCropSchema = z.object({
21845
21711
  aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
21846
- rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema$1.optional()),
21847
- hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema$1.optional()),
21848
- rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema$1.optional())
21712
+ rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
21713
+ hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
21714
+ rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
21849
21715
  });
21850
- transformSchema$1 = z.object({
21716
+ transformSchema = z.object({
21851
21717
  aspectCrops: z.preprocess((value) => {
21852
21718
  if (!value || typeof value !== "object" || Array.isArray(value)) return;
21853
21719
  return value;
21854
- }, z.record(z.string(), aspectCropSchema$1.catch({}))).optional(),
21855
- rect: rectSchema$1.optional(),
21856
- hotspot: hotspotSchema$1.optional(),
21857
- rotation: rotationSchema$1.optional()
21720
+ }, z.record(z.string(), aspectCropSchema.catch({}))).optional(),
21721
+ rect: rectSchema.optional(),
21722
+ hotspot: hotspotSchema.optional(),
21723
+ rotation: rotationSchema.optional()
21858
21724
  });
21859
- mediaSchema$1 = z.object({
21725
+ mediaSchema = z.object({
21860
21726
  type: z.enum([
21861
21727
  "image",
21862
21728
  "video",
@@ -21877,7 +21743,39 @@ var init_media$2 = __esmMin((() => {
21877
21743
  height: z.number().optional(),
21878
21744
  storageBucket: z.string().optional(),
21879
21745
  storagePath: z.string().optional(),
21880
- transform: transformSchema$1.optional()
21746
+ transform: transformSchema.optional()
21747
+ });
21748
+ }));
21749
+ //#endregion
21750
+ //#region ../theme-core/src/palette/schema.ts
21751
+ var colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema;
21752
+ var init_schema$1 = __esmMin((() => {
21753
+ init_colors();
21754
+ colourHexString = z$1.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
21755
+ paletteColorSchema = z$1.object({
21756
+ name: z$1.string().min(1),
21757
+ hex: colourHexString
21758
+ });
21759
+ paletteMetaSchema = z$1.object({ mode: z$1.enum(["light", "dark"]) });
21760
+ paletteSchema = z$1.object({
21761
+ colors: z$1.array(paletteColorSchema),
21762
+ meta: paletteMetaSchema
21763
+ }).transform((palette, ctx) => {
21764
+ const colors = paletteColorsFromEntries(palette.colors);
21765
+ if (!colors.ok) {
21766
+ ctx.addIssue({
21767
+ code: "custom",
21768
+ message: `Invalid complete palette: ${colors.error.kind}`
21769
+ });
21770
+ return z$1.NEVER;
21771
+ }
21772
+ return {
21773
+ colors: paletteColorEntries(colors.colors).map(({ name, hex }) => ({
21774
+ name: String(name),
21775
+ hex: String(hex)
21776
+ })),
21777
+ meta: palette.meta
21778
+ };
21881
21779
  });
21882
21780
  }));
21883
21781
  //#endregion
@@ -22680,20 +22578,61 @@ var init_generateBaseCSS = __esmMin((() => {
22680
22578
  };
22681
22579
  }));
22682
22580
  //#endregion
22581
+ //#region ../theme-core/src/buttons/effects/cssUtils.ts
22582
+ /**
22583
+ * Generate CSS selector for a state with dual support for hover
22584
+ *
22585
+ * @param themeId - Theme scope ID
22586
+ * @param variantId - Variant class name
22587
+ * @param state - State group (hover, active, focus, base)
22588
+ * @returns CSS selector string
22589
+ */
22590
+ function getStateSelector(themeId, variantId, state) {
22591
+ const stateSelector = STATE_SELECTORS[state];
22592
+ if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
22593
+ if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
22594
+ :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
22595
+ return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
22596
+ }
22597
+ /**
22598
+ * Generate CSS rule block for a state
22599
+ *
22600
+ * @param themeId - Theme scope ID
22601
+ * @param variantId - Variant class name
22602
+ * @param state - State group
22603
+ * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
22604
+ * @returns Complete CSS rule block
22605
+ */
22606
+ function generateStateCSS(themeId, variantId, state, cssProperties) {
22607
+ return `
22608
+ ${getStateSelector(themeId, variantId, state)} {
22609
+ ${cssProperties}
22610
+ }
22611
+ `;
22612
+ }
22613
+ var STATE_SELECTORS;
22614
+ var init_cssUtils = __esmMin((() => {
22615
+ STATE_SELECTORS = {
22616
+ hover: ":hover, [data-force-hover=\"true\"]",
22617
+ active: ":active",
22618
+ focus: ":focus-visible",
22619
+ base: ""
22620
+ };
22621
+ }));
22622
+ //#endregion
22683
22623
  //#region ../theme-core/src/buttons/effects/presets/background.ts
22684
- var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
22685
- var init_background$2 = __esmMin((() => {
22686
- darkenBackgroundEffect = {
22687
- id: "darken-background",
22688
- name: "Darken on Hover",
22689
- description: "Darkens the background color on hover",
22624
+ function shadeBackgroundEffect(config) {
22625
+ return {
22626
+ id: config.id,
22627
+ name: config.name,
22628
+ description: config.description,
22690
22629
  category: "background",
22691
22630
  pseudoElement: "none",
22692
22631
  applicableTo: ["button"],
22693
22632
  customizableOption: {
22694
22633
  name: "amount",
22695
22634
  type: "select",
22696
- label: "Darken Amount (shade step)",
22635
+ label: config.label,
22697
22636
  default: 100,
22698
22637
  options: [
22699
22638
  0,
@@ -22708,63 +22647,36 @@ var init_background$2 = __esmMin((() => {
22708
22647
  900
22709
22648
  ]
22710
22649
  },
22711
- isApplicable: (buttonConfig) => {
22712
- return buttonConfig.background.type === "solid";
22713
- },
22714
- generateCSS: (ctx) => {
22715
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
22650
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
22651
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
22716
22652
  if (buttonConfig.background.type !== "solid") return "";
22717
- const amount = options.amount || 100;
22653
+ const amount = (options.amount || 100) * config.shadeDirection;
22718
22654
  const baseToken = buttonConfig.background.colorToken ?? "primary-500";
22719
- const darkerToken = tokens.adjustShade(baseToken, amount);
22720
22655
  return `
22721
22656
  :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
22722
- background-color: ${tokens.getColor(darkerToken)};
22657
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
22723
22658
  }
22724
22659
  `;
22725
22660
  }
22726
22661
  };
22727
- lightenBackgroundEffect = {
22662
+ }
22663
+ var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
22664
+ var init_background$2 = __esmMin((() => {
22665
+ init_cssUtils();
22666
+ darkenBackgroundEffect = shadeBackgroundEffect({
22667
+ id: "darken-background",
22668
+ name: "Darken on Hover",
22669
+ description: "Darkens the background color on hover",
22670
+ label: "Darken Amount (shade step)",
22671
+ shadeDirection: 1
22672
+ });
22673
+ lightenBackgroundEffect = shadeBackgroundEffect({
22728
22674
  id: "lighten-background",
22729
22675
  name: "Lighten on Hover",
22730
22676
  description: "Lightens the background color on hover",
22731
- category: "background",
22732
- pseudoElement: "none",
22733
- applicableTo: ["button"],
22734
- customizableOption: {
22735
- name: "amount",
22736
- type: "select",
22737
- label: "Lighten Amount (shade step)",
22738
- default: 100,
22739
- options: [
22740
- 0,
22741
- 100,
22742
- 200,
22743
- 300,
22744
- 400,
22745
- 500,
22746
- 600,
22747
- 700,
22748
- 800,
22749
- 900
22750
- ]
22751
- },
22752
- isApplicable: (buttonConfig) => {
22753
- return buttonConfig.background.type === "solid";
22754
- },
22755
- generateCSS: (ctx) => {
22756
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
22757
- if (buttonConfig.background.type !== "solid") return "";
22758
- const amount = options.amount || 100;
22759
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
22760
- const lighterToken = tokens.adjustShade(baseToken, -amount);
22761
- return `
22762
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
22763
- background-color: ${tokens.getColor(lighterToken)};
22764
- }
22765
- `;
22766
- }
22767
- };
22677
+ label: "Lighten Amount (shade step)",
22678
+ shadeDirection: -1
22679
+ });
22768
22680
  fadeBackgroundEffect = {
22769
22681
  id: "fade-background",
22770
22682
  name: "Fade on Hover",
@@ -22865,12 +22777,14 @@ var init_background$2 = __esmMin((() => {
22865
22777
  ]
22866
22778
  },
22867
22779
  generateCSS: (ctx) => {
22868
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
22780
+ const { themeId, variantId, stateGroup, options, tokens, buttonConfig } = ctx;
22869
22781
  const colorToken = options.colorToken || "neutral-800";
22782
+ const color = tokens.getColor(colorToken);
22783
+ const navForeground = "textColorToken" in buttonConfig && typeof options.textColorToken === "string" ? `\n color: ${tokens.getColor(options.textColorToken)};` : "";
22870
22784
  return `
22871
22785
  /* Add background on hover */
22872
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
22873
- background-color: ${tokens.getColor(colorToken)};${"textColorToken" in buttonConfig && typeof options.textColorToken === "string" ? `\n color: ${tokens.getColor(options.textColorToken)};` : ""}
22786
+ ${getStateSelector(themeId, variantId, stateGroup)} {
22787
+ background-color: ${color};${navForeground}
22874
22788
  }
22875
22789
  `;
22876
22790
  }
@@ -22903,48 +22817,6 @@ var init_background$2 = __esmMin((() => {
22903
22817
  };
22904
22818
  }));
22905
22819
  //#endregion
22906
- //#region ../theme-core/src/buttons/effects/cssUtils.ts
22907
- /**
22908
- * Generate CSS selector for a state with dual support for hover
22909
- *
22910
- * @param themeId - Theme scope ID
22911
- * @param variantId - Variant class name
22912
- * @param state - State group (hover, active, focus, base)
22913
- * @returns CSS selector string
22914
- */
22915
- function getStateSelector(themeId, variantId, state) {
22916
- const stateSelector = STATE_SELECTORS[state];
22917
- if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
22918
- if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
22919
- :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
22920
- return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
22921
- }
22922
- /**
22923
- * Generate CSS rule block for a state
22924
- *
22925
- * @param themeId - Theme scope ID
22926
- * @param variantId - Variant class name
22927
- * @param state - State group
22928
- * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
22929
- * @returns Complete CSS rule block
22930
- */
22931
- function generateStateCSS(themeId, variantId, state, cssProperties) {
22932
- return `
22933
- ${getStateSelector(themeId, variantId, state)} {
22934
- ${cssProperties}
22935
- }
22936
- `;
22937
- }
22938
- var STATE_SELECTORS;
22939
- var init_cssUtils = __esmMin((() => {
22940
- STATE_SELECTORS = {
22941
- hover: ":hover, [data-force-hover=\"true\"]",
22942
- active: ":active",
22943
- focus: ":focus-visible",
22944
- base: ""
22945
- };
22946
- }));
22947
- //#endregion
22948
22820
  //#region ../theme-core/src/buttons/effects/presets/shadow.ts
22949
22821
  var borderGlowEffect, dropShadowEffect, innerShadowEffect, neumorphicShadowEffect, outerGlowEffect, retro3DShadowEffect;
22950
22822
  var init_shadow = __esmMin((() => {
@@ -25872,6 +25744,157 @@ var init_tokenOrColor = __esmMin((() => {
25872
25744
  ]);
25873
25745
  }));
25874
25746
  //#endregion
25747
+ //#region ../theme-core/src/header/paintTargets.ts
25748
+ /** Resolve the element that owns the visible header surface for each layout. */
25749
+ function getHeaderPaintTargets(variant, themeId, state = "base") {
25750
+ const scope = `:where([data-theme-scope="${themeId}"])`;
25751
+ const scrolledRoot = state === "scrolled" ? ".header-root.header-scrolled " : "";
25752
+ if (variant === "floating") {
25753
+ if (state === "scrolled") {
25754
+ const desktopOwner = `${scope} ${scrolledRoot}.header-floating-container`;
25755
+ const mobileOwner = `${scope} ${scrolledRoot}.header-mobile-bar`;
25756
+ return [{
25757
+ kind: "viewport-band",
25758
+ clipSelector: `${scope}:has(.header-root.header-scrolled)`,
25759
+ ownerSelector: desktopOwner,
25760
+ selector: `${desktopOwner}::before`,
25761
+ mediaQuery: MQ_MD_UP,
25762
+ topExtension: {
25763
+ customProperty: "--rb-header-floating-top-gap",
25764
+ value: "1rem",
25765
+ ownerProperty: "top"
25766
+ },
25767
+ ownerNeedsPositioning: false
25768
+ }, {
25769
+ kind: "viewport-band",
25770
+ clipSelector: `${scope}:has(.header-root.header-scrolled)`,
25771
+ ownerSelector: mobileOwner,
25772
+ selector: `${mobileOwner}::before`,
25773
+ mediaQuery: MQ_MD_DOWN,
25774
+ topExtension: {
25775
+ customProperty: "--rb-header-floating-top-gap",
25776
+ value: "0.75rem",
25777
+ ownerProperty: "margin-top"
25778
+ },
25779
+ ownerNeedsPositioning: true
25780
+ }];
25781
+ }
25782
+ return [{
25783
+ kind: "element-box",
25784
+ selector: `${scope} ${scrolledRoot}.header-floating-container`,
25785
+ mediaQuery: MQ_MD_UP
25786
+ }, {
25787
+ kind: "element-box",
25788
+ selector: `${scope} ${scrolledRoot}.header-mobile-bar`,
25789
+ mediaQuery: MQ_MD_DOWN
25790
+ }];
25791
+ }
25792
+ return [{
25793
+ kind: "element-box",
25794
+ selector: `${scope} .header-root${state === "scrolled" ? ".header-scrolled" : ""}::before`,
25795
+ pseudoElement: "inset"
25796
+ }];
25797
+ }
25798
+ function renderHeaderPaintTargetRules(targets, rules) {
25799
+ return targets.map((target) => {
25800
+ const block = renderHeaderPaintTargetRule(target, rules);
25801
+ return target.mediaQuery ? `@media ${target.mediaQuery} {\n${block}\n}` : block;
25802
+ }).join("\n");
25803
+ }
25804
+ function renderHeaderPaintTargetRule(target, rules) {
25805
+ switch (target.kind) {
25806
+ case "element-box": {
25807
+ const pseudoElementSetup = target.pseudoElement === "inset" ? [
25808
+ "content: \"\";",
25809
+ "position: absolute;",
25810
+ "inset: 0;",
25811
+ "pointer-events: none;",
25812
+ "border-radius: inherit;",
25813
+ "z-index: -1;"
25814
+ ] : [];
25815
+ return `${target.selector} {\n ${[...pseudoElementSetup, ...rules].join("\n ")}\n}`;
25816
+ }
25817
+ case "viewport-band": {
25818
+ const gap = target.topExtension;
25819
+ const ownerRules = [
25820
+ `${gap.customProperty}: ${gap.value};`,
25821
+ `${gap.ownerProperty}: var(${gap.customProperty});`,
25822
+ ...target.ownerNeedsPositioning ? ["position: relative;"] : [],
25823
+ "isolation: isolate;",
25824
+ "background: none;",
25825
+ "backdrop-filter: none;",
25826
+ "-webkit-backdrop-filter: none;",
25827
+ "border: 0;",
25828
+ "box-shadow: none;"
25829
+ ];
25830
+ const bandRules = [
25831
+ "content: \"\";",
25832
+ "position: absolute;",
25833
+ `top: calc(-1 * var(${gap.customProperty}));`,
25834
+ "bottom: 0;",
25835
+ "left: 50%;",
25836
+ "width: 100vw;",
25837
+ "transform: translateX(-50%);",
25838
+ "pointer-events: none;",
25839
+ "border-radius: 0;",
25840
+ "z-index: -1;",
25841
+ ...rules
25842
+ ];
25843
+ return `${target.clipSelector} {\n overflow-x: clip;\n}\n${target.ownerSelector} {\n ${ownerRules.join("\n ")}\n}\n${target.selector} {\n ${bandRules.join("\n ")}\n}`;
25844
+ }
25845
+ }
25846
+ }
25847
+ var init_paintTargets = __esmMin((() => {
25848
+ init_breakpoints();
25849
+ }));
25850
+ //#endregion
25851
+ //#region ../theme-core/src/header/scrollTreatment.ts
25852
+ function generateMobileOverlayBackdropFilterFix(themeId, variant) {
25853
+ const root = `:where([data-theme-scope="${themeId}"]) .header-root:has([data-nav-mobile-overlay][aria-hidden="false"])`;
25854
+ return `\n${(variant === "floating" ? [`${root} .header-mobile-bar`, `${root} .header-mobile-bar::before`] : [`${root}::before`]).join(",\n")} {\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n`;
25855
+ }
25856
+ function generateHeaderScrollTreatmentStyles(treatment, themeId, variant, surfaceRules = []) {
25857
+ if (!treatment) return "";
25858
+ switch (treatment.kind) {
25859
+ case "contrast-glass": {
25860
+ const backgroundChannels = treatment.backgroundTone === "dark" ? "0 0 0" : "255 255 255";
25861
+ return renderHeaderPaintTargetRules(getHeaderPaintTargets(variant, themeId, "scrolled"), [`background-color: rgb(${backgroundChannels} / 0.60);`, ...surfaceRules]);
25862
+ }
25863
+ }
25864
+ }
25865
+ var headerScrollTreatmentSchema;
25866
+ var init_scrollTreatment = __esmMin((() => {
25867
+ init_paintTargets();
25868
+ headerScrollTreatmentSchema = z$1.discriminatedUnion("kind", [z$1.object({
25869
+ kind: z$1.literal("contrast-glass"),
25870
+ backgroundTone: z$1.enum(["light", "dark"])
25871
+ })]).optional();
25872
+ }));
25873
+ //#endregion
25874
+ //#region ../theme-core/src/header/containerSchema.ts
25875
+ var headerContainerSchema;
25876
+ var init_containerSchema = __esmMin((() => {
25877
+ headerContainerSchema = z$1.object({
25878
+ rounded: z$1.enum([
25879
+ "none",
25880
+ "sm",
25881
+ "md",
25882
+ "lg",
25883
+ "xl",
25884
+ "2xl"
25885
+ ]).default("xl"),
25886
+ border: z$1.boolean().default(true),
25887
+ shadow: z$1.boolean().default(true),
25888
+ padding: z$1.enum([
25889
+ "sm",
25890
+ "md",
25891
+ "lg"
25892
+ ]).default("md"),
25893
+ tint: z$1.string().nullable().optional(),
25894
+ opacity: z$1.number().min(0).max(1).default(.12)
25895
+ }).optional();
25896
+ }));
25897
+ //#endregion
25875
25898
  //#region ../theme-core/src/schema.ts
25876
25899
  /**
25877
25900
  * Normalises the legacy `navTypography` font-role alias into the canonical
@@ -25887,9 +25910,10 @@ function normaliseHeaderNavFontRole(header) {
25887
25910
  navFontRole: navTypography
25888
25911
  } : rest;
25889
25912
  }
25890
- var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
25913
+ var axesSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
25891
25914
  var init_schema = __esmMin((() => {
25892
- init_media$2();
25915
+ init_media$1();
25916
+ init_schema$1();
25893
25917
  init_buttons();
25894
25918
  init_cards();
25895
25919
  init_types$9();
@@ -25904,6 +25928,9 @@ var init_schema = __esmMin((() => {
25904
25928
  init_rawStyleFields();
25905
25929
  init_themeColorTokens();
25906
25930
  init_tokenOrColor();
25931
+ init_scrollTreatment();
25932
+ init_containerSchema();
25933
+ init_interactionPalette();
25907
25934
  axesSchema = z$1.object({
25908
25935
  tone: z$1.enum([
25909
25936
  "minimal",
@@ -25932,16 +25959,6 @@ var init_schema = __esmMin((() => {
25932
25959
  "expressive"
25933
25960
  ])
25934
25961
  });
25935
- colourHexString = z$1.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
25936
- paletteColorSchema = z$1.object({
25937
- name: z$1.string().min(1),
25938
- hex: colourHexString
25939
- });
25940
- paletteMetaSchema = z$1.object({ mode: z$1.enum(["light", "dark"]) });
25941
- paletteSchema = z$1.object({
25942
- colors: z$1.array(paletteColorSchema),
25943
- meta: paletteMetaSchema
25944
- });
25945
25962
  typographyStyleSchema = z$1.object({
25946
25963
  family: z$1.string().min(1),
25947
25964
  weight: z$1.enum([
@@ -26073,7 +26090,7 @@ var init_schema = __esmMin((() => {
26073
26090
  color: tokenOrCssColorValueSchema.nullable().optional(),
26074
26091
  gradient: z$1.string().nullable().optional(),
26075
26092
  gradientPresetId: z$1.string().min(1).nullable().optional(),
26076
- image: mediaSchema$1.nullable().optional(),
26093
+ image: mediaSchema.nullable().optional(),
26077
26094
  objectFit: z$1.enum([
26078
26095
  "fill",
26079
26096
  "fit",
@@ -26321,25 +26338,6 @@ var init_schema = __esmMin((() => {
26321
26338
  ]);
26322
26339
  headerMaxWidth = z$1.enum(["container", "full"]);
26323
26340
  headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
26324
- headerContainerSchema = z$1.object({
26325
- rounded: z$1.enum([
26326
- "none",
26327
- "sm",
26328
- "md",
26329
- "lg",
26330
- "xl",
26331
- "2xl"
26332
- ]).default("xl"),
26333
- border: z$1.boolean().default(true),
26334
- shadow: z$1.boolean().default(true),
26335
- padding: z$1.enum([
26336
- "sm",
26337
- "md",
26338
- "lg"
26339
- ]).default("md"),
26340
- tint: z$1.string().nullable().optional(),
26341
- opacity: z$1.number().min(0).max(1).default(.12)
26342
- }).optional();
26343
26341
  headerBorderSchema = componentBorderSchema.extend({ position: z$1.enum([
26344
26342
  "bottom",
26345
26343
  "top",
@@ -26453,7 +26451,7 @@ var init_schema = __esmMin((() => {
26453
26451
  contentOwner: z$1.literal(siteChromeBackgroundOverrideOwner).optional(),
26454
26452
  color: tokenOrCssColorValueSchema.nullable().optional(),
26455
26453
  gradient: gradientConfigSchema.nullable().optional(),
26456
- image: mediaSchema$1.nullable().optional(),
26454
+ image: mediaSchema.nullable().optional(),
26457
26455
  textColor: tokenOrCssColorValueSchema.nullable().optional()
26458
26456
  });
26459
26457
  headerSchema = z$1.object({
@@ -26462,7 +26460,8 @@ var init_schema = __esmMin((() => {
26462
26460
  shrinkOnScroll: z$1.boolean(),
26463
26461
  maxWidth: headerMaxWidth,
26464
26462
  barFrame: headerBarFrame.optional(),
26465
- logoOverride: mediaSchema$1.nullable().optional(),
26463
+ scrollTreatment: headerScrollTreatmentSchema,
26464
+ logoOverride: mediaSchema.nullable().optional(),
26466
26465
  background: headerBackgroundSchema.default({
26467
26466
  type: "color",
26468
26467
  color: "surface"
@@ -26474,6 +26473,7 @@ var init_schema = __esmMin((() => {
26474
26473
  navFontRole: z$1.enum(["body", "heading"]).optional(),
26475
26474
  navTypography: z$1.enum(["body", "heading"]).optional(),
26476
26475
  navTextSize: navLinkStyleSchema.shape.textSize,
26476
+ interactionPalette: headerInteractionPaletteSchema.optional(),
26477
26477
  navPlacement: z$1.enum(["end", "center"]).optional(),
26478
26478
  container: headerContainerSchema,
26479
26479
  border: headerBorderSchema,
@@ -26934,7 +26934,6 @@ var init_runtimeCompiler = __esmMin((() => {
26934
26934
  init_modern_minimal();
26935
26935
  init_expandPalette();
26936
26936
  init_styles();
26937
- init_colors();
26938
26937
  init_designState();
26939
26938
  init_types$15();
26940
26939
  init_accessibleSurfaces();
@@ -28800,7 +28799,7 @@ var init_siteStyleThemeCompiler = __esmMin((() => {
28800
28799
  init_curatedSiteStyles();
28801
28800
  init_runtimeCompiler();
28802
28801
  init_curated();
28803
- init_resolveSelection();
28802
+ init_concretePalette();
28804
28803
  }));
28805
28804
  var init_previewCustomization = __esmMin((() => {
28806
28805
  init_types$15();
@@ -28810,7 +28809,7 @@ var init_previewCompiler = __esmMin((() => {
28810
28809
  init_onColor();
28811
28810
  init_tokens();
28812
28811
  init_curated();
28813
- init_resolveSelection();
28812
+ init_concretePalette();
28814
28813
  init_curatedSiteStyles();
28815
28814
  init_resolver();
28816
28815
  init_types$15();
@@ -28909,6 +28908,7 @@ var init_records = __esmMin((() => {}));
28909
28908
  var init_headerOpeningSection = __esmMin((() => {
28910
28909
  init_headerLooks();
28911
28910
  init_records();
28911
+ init_tokens();
28912
28912
  }));
28913
28913
  var init_generatedDesignPipeline = __esmMin((() => {
28914
28914
  init_compositionBudget();
@@ -29229,8 +29229,11 @@ var init_site_styles = __esmMin((() => {
29229
29229
  init_generatedSchemas();
29230
29230
  init_generatedDesignPipeline();
29231
29231
  init_headerLooks();
29232
+ init_headerInteractionPalette();
29233
+ init_headerOpeningForeground();
29232
29234
  init_headerOpeningSection();
29233
29235
  init_lookResolution();
29236
+ init_lookOptionGroups();
29234
29237
  init_logoBranding();
29235
29238
  init_pageDesignAuthority();
29236
29239
  init_pageDesignEditorErrors();
@@ -30197,7 +30200,7 @@ function devValidate(node) {
30197
30200
  }
30198
30201
  var section$1, headerSection, stack, inline, accordion, accordionItem, carousel, text, richText, icon, media, fileDownload, videoEmbed, spinner, button, link, form, bookingForm, eventRegistration, shop, productList, productDetail, cart, checkout$1, gifting, courseRegistration;
30199
30202
  var init_builder$1 = __esmMin((() => {
30200
- init_schema$2();
30203
+ init_schema$3();
30201
30204
  init_types$6();
30202
30205
  init_env();
30203
30206
  section$1 = (props, children, ...mods) => el("section", props, children, ...mods);
@@ -31831,7 +31834,7 @@ function scopeContentPath(path, scope) {
31831
31834
  }
31832
31835
  var FRAGMENT_ID_PATTERN, FIELD_ID_PATTERN, dataLoaderSchema, fragmentDataSchema, fragmentConfigSchema, FragmentConfigError;
31833
31836
  var init_types$5 = __esmMin((() => {
31834
- init_schema$1();
31837
+ init_schema$2();
31835
31838
  init_node();
31836
31839
  FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;
31837
31840
  FIELD_ID_PATTERN = /^[a-z][a-zA-Z0-9_-]*$/;
@@ -32085,23 +32088,14 @@ var init_heroCopy = __esmMin((() => {
32085
32088
  }));
32086
32089
  //#endregion
32087
32090
  //#region ../blocks/src/system/constants/buttonRoles.ts
32088
- /**
32089
- * Temporary rollout boundary for persisted content written before issue #1220.
32090
- * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
32091
- * only until the post-deploy role rewrite has been audited in production.
32092
- */
32093
- function canonicalizePersistedBlockButtonRole(value) {
32094
- return value === "link" || value === "tertiary" ? "ghost" : value;
32095
- }
32096
32091
  function isBlockButtonRole(value) {
32097
32092
  return blockButtonRoleSchema.safeParse(value).success;
32098
32093
  }
32099
- var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, persistedBlockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
32094
+ var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
32100
32095
  var init_buttonRoles = __esmMin((() => {
32101
32096
  init_buttons();
32102
32097
  BLOCK_BUTTON_ROLES = PUBLIC_BUTTON_ROLES;
32103
32098
  blockButtonRoleSchema = z$1.enum(BLOCK_BUTTON_ROLES);
32104
- persistedBlockButtonRoleSchema = z$1.preprocess((value) => typeof value === "string" ? canonicalizePersistedBlockButtonRole(value) : value, blockButtonRoleSchema);
32105
32099
  BLOCK_BUTTON_ROLE_LABELS = {
32106
32100
  primary: "Primary",
32107
32101
  secondary: "Secondary",
@@ -34765,7 +34759,7 @@ function deriveComponentName(id) {
34765
34759
  return `${id.replace(/^block\./, "").replace(/-/g, ".").replace(/([a-z])([A-Z])/g, "$1.$2").toLowerCase()}.default`;
34766
34760
  }
34767
34761
  var init_defineBlock = __esmMin((() => {
34768
- init_schema$1();
34762
+ init_schema$2();
34769
34763
  init_fragments();
34770
34764
  init_augmentManifest();
34771
34765
  }));
@@ -35461,7 +35455,7 @@ const blogPostBlockDefinition = {
35461
35455
  //#region ../blocks/src/system/blocks/blog-listing.ts
35462
35456
  init_defineBlock();
35463
35457
  init_boxStyles$1();
35464
- init_schema$1();
35458
+ init_schema$2();
35465
35459
  init_builder$1();
35466
35460
  init_fragments$1();
35467
35461
  init_colorStyles();
@@ -37210,7 +37204,7 @@ function planSiteChromePlacement(positioning) {
37210
37204
  headerRootClassName: "rb-fixed rb-top-0 rb-left-0 rb-right-0",
37211
37205
  standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
37212
37206
  };
37213
- default: return assertNever$16(positioning);
37207
+ default: return assertNever$15(positioning);
37214
37208
  }
37215
37209
  }
37216
37210
  function splitSiteChromePlacementClasses(className) {
@@ -38433,7 +38427,7 @@ const siteFooterBlockDefinition = { manifest: createBlockManifest({
38433
38427
  }) };
38434
38428
  //#endregion
38435
38429
  //#region ../blocks/src/system/blocks/testimonials.tsx
38436
- init_schema$1();
38430
+ init_schema$2();
38437
38431
  init_fragments$1();
38438
38432
  init_styledSection();
38439
38433
  init_boxStyles$1();
@@ -38644,7 +38638,7 @@ const testimonialsBlockDefinition = {
38644
38638
  //#endregion
38645
38639
  //#region ../blocks/src/system/blocks/columns.ts
38646
38640
  init_fragments();
38647
- init_schema$1();
38641
+ init_schema$2();
38648
38642
  init_defineBlock();
38649
38643
  init_node();
38650
38644
  init_builder$1();
@@ -38902,7 +38896,7 @@ function repeaterFragmentLayout(args) {
38902
38896
  //#endregion
38903
38897
  //#region ../blocks/src/system/blocks/collection.ts
38904
38898
  init_fragments();
38905
- init_schema$1();
38899
+ init_schema$2();
38906
38900
  init_defineBlock();
38907
38901
  init_builder$1();
38908
38902
  init_fragments$1();
@@ -40311,88 +40305,7 @@ const weeklySlotAvailabilityBlockDefinition = {
40311
40305
  };
40312
40306
  //#endregion
40313
40307
  //#region ../blocks/src/system/blocks/events/shared/types.ts
40314
- var init_types$4 = __esmMin((() => {})), PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema, rotationSchema, rectSchema, aspectCropSchema, transformSchema, mediaPosterSchema, mediaBaseSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema;
40315
- var init_media$1 = __esmMin((() => {
40316
- init_src$2();
40317
- PUBLIC_DOWNLOAD_MEDIA_TYPES = [
40318
- "document",
40319
- "spreadsheet",
40320
- "archive",
40321
- "audio"
40322
- ];
40323
- hotspotSchema = z.object({
40324
- x: z.number().min(0).max(1),
40325
- y: z.number().min(0).max(1),
40326
- radius: z.number().optional()
40327
- });
40328
- rotationSchema = z.union([
40329
- z.literal(0),
40330
- z.literal(90),
40331
- z.literal(180),
40332
- z.literal(270)
40333
- ]);
40334
- rectSchema = z.tuple([
40335
- z.number(),
40336
- z.number(),
40337
- z.number(),
40338
- z.number()
40339
- ]);
40340
- aspectCropSchema = z.object({
40341
- aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
40342
- rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
40343
- hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
40344
- rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
40345
- });
40346
- transformSchema = z.object({
40347
- aspectCrops: z.preprocess((value) => {
40348
- if (!value || typeof value !== "object" || Array.isArray(value)) return;
40349
- return value;
40350
- }, z.record(z.string(), aspectCropSchema.catch({}))).optional(),
40351
- rect: rectSchema.optional(),
40352
- hotspot: hotspotSchema.optional(),
40353
- rotation: rotationSchema.optional()
40354
- });
40355
- mediaPosterSchema = z.discriminatedUnion("tag", [z.object({
40356
- tag: z.literal("storage"),
40357
- assetId: z.string().optional(),
40358
- storageBucket: z.string().min(1),
40359
- storagePath: z.string().min(1)
40360
- }), z.object({
40361
- tag: z.literal("external-src"),
40362
- assetId: z.string().optional(),
40363
- src: z.string().url()
40364
- })]);
40365
- mediaBaseSchema = z.object({
40366
- purpose: z.string().optional(),
40367
- placeholder: z.boolean().default(true).optional(),
40368
- assetId: z.string().optional(),
40369
- identifier: z.string().optional(),
40370
- src: z.string().optional(),
40371
- alt: z.string().optional(),
40372
- filename: z.string().optional(),
40373
- mimeType: z.string().optional(),
40374
- width: z.number().optional(),
40375
- height: z.number().optional(),
40376
- storageBucket: z.string().optional(),
40377
- storagePath: z.string().optional(),
40378
- poster: mediaPosterSchema.optional(),
40379
- transform: transformSchema.optional()
40380
- });
40381
- imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
40382
- videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
40383
- audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
40384
- documentMediaSchema = mediaBaseSchema.extend({ type: z.literal("document") });
40385
- spreadsheetMediaSchema = mediaBaseSchema.extend({ type: z.literal("spreadsheet") });
40386
- archiveMediaSchema = mediaBaseSchema.extend({ type: z.literal("archive") });
40387
- mediaSchema = z.discriminatedUnion("type", [
40388
- imageMediaSchema,
40389
- videoMediaSchema,
40390
- audioMediaSchema,
40391
- documentMediaSchema,
40392
- spreadsheetMediaSchema,
40393
- archiveMediaSchema
40394
- ]);
40395
- }));
40308
+ var init_types$4 = __esmMin((() => {}));
40396
40309
  //#endregion
40397
40310
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
40398
40311
  var bookingDepositRefundPolicySchema, bookingInstalmentPlanSchema, bookingFlexibleBalanceDueDateRuleSchema, bookingFlexibleBalanceConfigSchema, blockBookingPaymentCollectionOptionSchema, blockBookingPaymentTermsSchema;
@@ -40545,7 +40458,7 @@ var init_schemas$1 = __esmMin((() => {
40545
40458
  publicCoursesArraySchema = publicWholeSeriesOfferingsArraySchema;
40546
40459
  })), eventPresetSchema, eventScheduleScopeSchema$2, publicEventRecurrenceSchema, eventDestinationModeSchema, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, publicCoursePriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
40547
40460
  var init_schemas = __esmMin((() => {
40548
- init_media$1();
40461
+ init_media$2();
40549
40462
  init_richTextSchema();
40550
40463
  init_bookingPaymentTerms();
40551
40464
  init_schemas$1();
@@ -40821,7 +40734,7 @@ var init_schemas = __esmMin((() => {
40821
40734
  presentation: z$1.object({
40822
40735
  cardTitleOverride: z$1.string().nullable().optional(),
40823
40736
  summary: z$1.string().nullable().optional(),
40824
- image: mediaSchema.nullable().optional()
40737
+ image: mediaSchema$1.nullable().optional()
40825
40738
  }).optional(),
40826
40739
  slug: z$1.string(),
40827
40740
  path: z$1.string().nullable(),
@@ -41469,7 +41382,7 @@ var init_contract_schemas = __esmMin((() => {
41469
41382
  init_buttonRoles();
41470
41383
  previewStageSchema = z$1.enum(["preview", "published"]);
41471
41384
  registrationButtonVariantSchema = blockButtonRoleSchema;
41472
- eventButtonVariantSchema = persistedBlockButtonRoleSchema;
41385
+ eventButtonVariantSchema = blockButtonRoleSchema;
41473
41386
  eventLayoutSchema = z$1.enum(eventCalendarListLayoutValues);
41474
41387
  eventCalendarDisplayModeSchema = z$1.enum(eventCalendarDisplayModeValues);
41475
41388
  eventCalendarDefaultViewSchema = z$1.enum(eventCalendarDefaultViewValues);
@@ -46364,7 +46277,7 @@ var init_EventCalendar_interactive = __esmMin((() => {
46364
46277
  }));
46365
46278
  //#endregion
46366
46279
  //#region ../blocks/src/system/blocks/events/event-calendar.ts
46367
- init_schema$1();
46280
+ init_schema$2();
46368
46281
  init_builder$1();
46369
46282
  init_styledSection();
46370
46283
  init_fragments$1();
@@ -48019,10 +47932,10 @@ function preferredPathsForSource(source) {
48019
47932
  case "workshop": return ["/workshops", "/workshop"];
48020
47933
  case "retreat": return ["/retreats", "/retreat"];
48021
47934
  case "performance": return ["/performances", "/performance"];
48022
- default: return assertNever$25(source.preset, "Unhandled offerings preview event preset");
47935
+ default: return assertNever$24(source.preset, "Unhandled offerings preview event preset");
48023
47936
  }
48024
47937
  case "course": return ["/courses", "/course"];
48025
- default: return assertNever$25(source, "Unhandled offerings preview source");
47938
+ default: return assertNever$24(source, "Unhandled offerings preview source");
48026
47939
  }
48027
47940
  }
48028
47941
  function normalizeRoutePath(value) {
@@ -48449,7 +48362,7 @@ function isRecord$17(value) {
48449
48362
  }
48450
48363
  //#endregion
48451
48364
  //#region ../blocks/src/system/blocks/embed.ts
48452
- init_schema$1();
48365
+ init_schema$2();
48453
48366
  init_builder$1();
48454
48367
  init_fragments$1();
48455
48368
  init_defineBlock();
@@ -48720,7 +48633,7 @@ const embedBlockDefinition = {
48720
48633
  };
48721
48634
  //#endregion
48722
48635
  //#region ../blocks/src/system/blocks/image-gallery.ts
48723
- init_schema$1();
48636
+ init_schema$2();
48724
48637
  init_builder$1();
48725
48638
  init_colorStyles();
48726
48639
  init_defineBlock();
@@ -49513,7 +49426,7 @@ const imageGalleryBlockDefinition = { manifest: createBlockManifest({
49513
49426
  }) };
49514
49427
  //#endregion
49515
49428
  //#region ../blocks/src/system/blocks/video-grid.ts
49516
- init_schema$1();
49429
+ init_schema$2();
49517
49430
  init_builder$1();
49518
49431
  init_fragments$1();
49519
49432
  init_colorStyles();
@@ -49875,7 +49788,7 @@ const audioPlayerBlockDefinition = { manifest: createBlockManifest({
49875
49788
  }) };
49876
49789
  //#endregion
49877
49790
  //#region ../blocks/src/system/blocks/file-download.ts
49878
- init_media$1();
49791
+ init_media$2();
49879
49792
  init_defineBlock();
49880
49793
  init_button();
49881
49794
  init_builder$1();
@@ -52370,13 +52283,13 @@ const newsletterSignupBlockDefinition = {
52370
52283
  //#endregion
52371
52284
  //#region ../blocks/src/system/blocks/team-members.ts
52372
52285
  init_fragments();
52373
- init_schema$1();
52286
+ init_schema$2();
52374
52287
  init_defineBlock();
52375
52288
  init_builder$1();
52376
52289
  init_fragments$1();
52377
- init_media$1();
52290
+ init_media$2();
52378
52291
  const ITEM_NAME = "member";
52379
- const teamMemberPhotoSchema = mediaSchema.refine((media) => media.type === "image", { message: "Team member photos must be image media" }).nullable();
52292
+ const teamMemberPhotoSchema = mediaSchema$1.refine((media) => media.type === "image", { message: "Team member photos must be image media" }).nullable();
52380
52293
  const teamMemberDataSchema = z$1.object({
52381
52294
  _type: z$1.literal("teamMember"),
52382
52295
  id: z$1.string(),
@@ -52913,7 +52826,7 @@ var init_location_map_shared = __esmMin((() => {
52913
52826
  }));
52914
52827
  //#endregion
52915
52828
  //#region ../blocks/src/system/blocks/location-map.ts
52916
- init_schema$1();
52829
+ init_schema$2();
52917
52830
  init_builder$1();
52918
52831
  init_fragments$1();
52919
52832
  init_defineBlock();
@@ -53964,9 +53877,9 @@ function getBlockDefinition(name) {
53964
53877
  init_tokens();
53965
53878
  //#endregion
53966
53879
  //#region ../blocks/src/system/helpers/backgroundMedia.ts
53967
- init_media$1();
53880
+ init_media$2();
53968
53881
  function resolveBackgroundMedia(input) {
53969
- const parsedMedia = mediaSchema.safeParse(input.image);
53882
+ const parsedMedia = mediaSchema$1.safeParse(input.image);
53970
53883
  if (!parsedMedia.success) return null;
53971
53884
  switch (parsedMedia.data.type) {
53972
53885
  case "image":
@@ -54517,7 +54430,7 @@ function resolveLinkedContentEditSupport(contentType) {
54517
54430
  kind: "unsupported-domain-backed",
54518
54431
  reason: metadata.reason
54519
54432
  };
54520
- default: return assertNever$25(metadata);
54433
+ default: return assertNever$24(metadata);
54521
54434
  }
54522
54435
  }
54523
54436
  function contentTypeKeyToLabel(key) {
@@ -55227,7 +55140,6 @@ function renderMark(mark, key, child) {
55227
55140
  //#endregion
55228
55141
  //#region ../blocks/src/system/runtime/nodes/basic.tsx
55229
55142
  init_buttons();
55230
- init_buttonRoles();
55231
55143
  const TextNode = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, inlineTextFallbackPath, ...rest }) => {
55232
55144
  const inlineText = parseInlineTextFromUnknown(value);
55233
55145
  if (inlineText.ok && !isInlineTextEmpty(inlineText.value)) return /* @__PURE__ */ jsx(Text$2, {
@@ -55267,6 +55179,9 @@ function renderTrailingAffordanceIcon(affordance) {
55267
55179
  className: "rb-ml-2 rb-h-4 rb-w-4 rb-inline-block"
55268
55180
  });
55269
55181
  }
55182
+ function isMissingRequiredLink(linkRequired, resolvedHref) {
55183
+ return linkRequired && resolvedHref.length === 0;
55184
+ }
55270
55185
  const ButtonNode = ({ value, children, href, variantId = "primary", size = "md", disabled, type = "button", target, rel, linkRequired = false, trailingIcon, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, className, ...rest }) => {
55271
55186
  const content = value ?? children;
55272
55187
  if (!content) {
@@ -55275,12 +55190,16 @@ const ButtonNode = ({ value, children, href, variantId = "primary", size = "md",
55275
55190
  }
55276
55191
  const affordanceIcon = renderTrailingAffordanceIcon(resolveButtonAffordance({ trailingIcon }));
55277
55192
  const resolvedHref = typeof href === "string" ? href.trim() : "";
55278
- if (linkRequired && resolvedHref.length === 0) {
55193
+ if (isMissingRequiredLink(linkRequired, resolvedHref)) {
55279
55194
  console.warn("[ButtonNode] Missing href for link-required button");
55280
55195
  return null;
55281
55196
  }
55282
55197
  const extraClassName = affordanceIcon ? [className, AFFORDANCE_SUPPRESS_CLASS].filter(Boolean).join(" ") : className;
55283
- const resolvedVariantId = parseThemeButtonVariantId(canonicalizePersistedBlockButtonRole(variantId));
55198
+ const resolvedVariantId = parseThemeButtonVariantId(variantId);
55199
+ if (variantId && !resolvedVariantId) {
55200
+ console.error("[ButtonNode] Invalid button variant", { variantId });
55201
+ return null;
55202
+ }
55284
55203
  const combinedClassName = resolvedVariantId ? themeButtonClassName({
55285
55204
  variant: resolvedVariantId,
55286
55205
  size,
@@ -55385,7 +55304,7 @@ const FeatureCardIconNode = ({ value, treatment, generatedIconSizePx, className,
55385
55304
  //#region ../blocks/src/system/runtime/nodes/file-download.tsx
55386
55305
  init_svg();
55387
55306
  init_colorStyles();
55388
- init_media$1();
55307
+ init_media$2();
55389
55308
  init_buttons();
55390
55309
  init_media();
55391
55310
  init_buttonRoles();
@@ -55419,8 +55338,9 @@ function iconForMediaType(type) {
55419
55338
  });
55420
55339
  }
55421
55340
  }
55422
- function normalizeButtonVariant(value) {
55423
- return isBlockButtonRole(value) ? value : "primary";
55341
+ function parseButtonVariant(value) {
55342
+ if (value === null || value === void 0) return "primary";
55343
+ return isBlockButtonRole(value) ? value : null;
55424
55344
  }
55425
55345
  function FileDownloadNode({ value, title, description, buttonLabel, buttonVariant, className }) {
55426
55346
  if (!value || !isDownloadableMediaType(value.type)) return null;
@@ -55430,7 +55350,11 @@ function FileDownloadNode({ value, title, description, buttonLabel, buttonVarian
55430
55350
  const heading = title?.trim() || filename;
55431
55351
  const body = description?.trim();
55432
55352
  const label = buttonLabel?.trim() || "Download";
55433
- const variant = normalizeButtonVariant(buttonVariant);
55353
+ const variant = parseButtonVariant(buttonVariant);
55354
+ if (!variant) {
55355
+ console.error("[FileDownloadNode] Invalid button variant", { buttonVariant });
55356
+ return null;
55357
+ }
55434
55358
  return /* @__PURE__ */ jsx("div", {
55435
55359
  className,
55436
55360
  children: /* @__PURE__ */ jsxs("div", {
@@ -57515,7 +57439,7 @@ function eventSeriesIdsForSubject(subject) {
57515
57439
  switch (subject.kind) {
57516
57440
  case "eventSeries": return [subject.eventSeriesId];
57517
57441
  case "eventOffering": return subject.availableEventSeriesIds;
57518
- default: return assertNever$25(subject);
57442
+ default: return assertNever$24(subject);
57519
57443
  }
57520
57444
  }
57521
57445
  var init_course_page_surface_scope = __esmMin((() => {
@@ -58275,7 +58199,7 @@ function renderOfferingGroupItems(presentation, items, options) {
58275
58199
  children: items.map((item) => renderOfferingCompactItem(item, options))
58276
58200
  })
58277
58201
  });
58278
- default: return assertNever$25(presentation, "Unhandled offerings preview presentation");
58202
+ default: return assertNever$24(presentation, "Unhandled offerings preview presentation");
58279
58203
  }
58280
58204
  }
58281
58205
  function compareCoursesByNextSession(left, right) {
@@ -58320,7 +58244,7 @@ function featuredSummaryDetails(item) {
58320
58244
  const summary = deriveCourseScheduleSummary(item.course);
58321
58245
  return summary ? formatFeaturedSummary(summary, item.course.venue?.name ?? null) : null;
58322
58246
  }
58323
- default: return assertNever$25(item, "Unhandled offerings preview item");
58247
+ default: return assertNever$24(item, "Unhandled offerings preview item");
58324
58248
  }
58325
58249
  }
58326
58250
  function formatFeaturedSummary(summary, venue) {
@@ -58329,7 +58253,7 @@ function formatFeaturedSummary(summary, venue) {
58329
58253
  case "multi-day-span": return detailsFromOccurrences(summary.occurrence, summary.occurrence, venue, null, null, true);
58330
58254
  case "fixed-recurring-run": return detailsFromOccurrences(summary.first, summary.last, venue, summary.recurrenceLabel, null);
58331
58255
  case "irregular-multi-session-run": return detailsFromOccurrences(summary.first, summary.last, venue, null, `${summary.sessionCount} dates`);
58332
- default: return assertNever$25(summary, "Unhandled offerings preview schedule summary");
58256
+ default: return assertNever$24(summary, "Unhandled offerings preview schedule summary");
58333
58257
  }
58334
58258
  }
58335
58259
  function detailsFromOccurrences(first, last, venue, recurrence, sessionCount, spanUsesEndDate = false) {
@@ -58728,7 +58652,7 @@ function bookingActionContent(input) {
58728
58652
  children: input.buttonText
58729
58653
  });
58730
58654
  case "unavailable": return null;
58731
- default: return assertNever$25(input.booking);
58655
+ default: return assertNever$24(input.booking);
58732
58656
  }
58733
58657
  }
58734
58658
  function RecurringSchedule({ schedule, buttonText = "Book", buttonVariant = "primary", showVenue = true, emptyMessage = "Regular schedule details will be added shortly." }) {
@@ -60948,7 +60872,7 @@ function previewEditableTargetToPath(target) {
60948
60872
  case "current-entry-field":
60949
60873
  case "current-entry-metadata": return target.path;
60950
60874
  case "read-only": return;
60951
- default: return assertNever$25(target);
60875
+ default: return assertNever$24(target);
60952
60876
  }
60953
60877
  }
60954
60878
  function previewEditableTargetToFieldKey(target) {
@@ -62025,7 +61949,7 @@ function collectNestedPreviewFieldConstraintEntries(field, path) {
62025
61949
  case "text":
62026
61950
  case "time":
62027
61951
  case "url": return [];
62028
- default: return assertNever$25(field);
61952
+ default: return assertNever$24(field);
62029
61953
  }
62030
61954
  }
62031
61955
  function makeDefaultBlockComponent(args) {
@@ -62895,6 +62819,51 @@ function resolveColorTokenHex(theme, colorToken) {
62895
62819
  return expandPalette(theme.palette)[colorToken] ?? null;
62896
62820
  }
62897
62821
  //#endregion
62822
+ //#region ../theme-core/src/header/navDropdownSizing.ts
62823
+ var NAV_DROPDOWN_SHIFT_PROPERTY, NAV_DROPDOWN_MAX_WIDTH_CSS, NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES;
62824
+ var init_navDropdownSizing = __esmMin((() => {
62825
+ NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
62826
+ NAV_DROPDOWN_MAX_WIDTH_CSS = `min(22rem, calc(100vw - 2rem))`;
62827
+ NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
62828
+ `min-width: 12rem;`,
62829
+ `width: max-content;`,
62830
+ `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
62831
+ `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
62832
+ ];
62833
+ }));
62834
+ //#endregion
62835
+ //#region ../theme-core/src/header/surfaceRules.ts
62836
+ init_navDropdownSizing();
62837
+ init_shared$5();
62838
+ init_colorStyles();
62839
+ /** Compile the visual surface declarations independently of paint geometry. */
62840
+ function buildHeaderSurfaceRules(header, tokens, blur) {
62841
+ const base = [];
62842
+ const scrolled = [];
62843
+ const background = header.background;
62844
+ if (background.type === "color") base.push(`background-color: ${tokens.getColor(background.color || "surface")};`);
62845
+ else if (background.type === "gradient" && background.gradient) {
62846
+ const stops = background.gradient.stops.map((stop) => tokens.getColor(stop.color)).join(", ");
62847
+ base.push(`background-image: linear-gradient(${background.gradient.angle ?? 180}deg, ${stops});`);
62848
+ }
62849
+ const blurRules = [`backdrop-filter: ${blur};`, `-webkit-backdrop-filter: ${blur};`];
62850
+ base.push(...blurRules);
62851
+ scrolled.push(...blurRules);
62852
+ const borderWidth = getComponentBorderWidthPx(header.border?.width ?? "none");
62853
+ if (!header.border || borderWidth === "0") return {
62854
+ base,
62855
+ scrolled,
62856
+ border: []
62857
+ };
62858
+ const color = rgbColorValue(header.border.colorToken?.trim() || "border");
62859
+ const style = header.border.style === "dashed" ? "dashed" : "solid";
62860
+ return {
62861
+ base,
62862
+ scrolled,
62863
+ border: header.border.position === "both" ? [`border-top: ${borderWidth} ${style} ${color};`, `border-bottom: ${borderWidth} ${style} ${color};`] : [`border-${header.border.position}: ${borderWidth} ${style} ${color};`]
62864
+ };
62865
+ }
62866
+ //#endregion
62898
62867
  //#region ../theme-core/src/navigation/presets.ts
62899
62868
  /**
62900
62869
  * Built-in nav link style presets
@@ -63056,25 +63025,78 @@ function getNavLinkPreset(presetId) {
63056
63025
  }
63057
63026
  Object.keys(NAV_LINK_PRESETS);
63058
63027
  //#endregion
63059
- //#region ../theme-core/src/header/navDropdownSizing.ts
63060
- var NAV_DROPDOWN_SHIFT_PROPERTY, NAV_DROPDOWN_MAX_WIDTH_CSS, NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES;
63061
- var init_navDropdownSizing = __esmMin((() => {
63062
- NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
63063
- NAV_DROPDOWN_MAX_WIDTH_CSS = `min(22rem, calc(100vw - 2rem))`;
63064
- NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
63065
- `min-width: 12rem;`,
63066
- `width: max-content;`,
63067
- `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
63068
- `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
63069
- ];
63070
- }));
63028
+ //#region ../theme-core/src/header/legacyNavLinkStyle.ts
63029
+ function buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize) {
63030
+ const navStyle = header.navStyle ?? "minimal";
63031
+ const basePreset = getNavLinkPreset(navStyle);
63032
+ if (!basePreset) return null;
63033
+ const style = {
63034
+ ...basePreset,
63035
+ fontWeight: header.navWeight ?? basePreset.fontWeight,
63036
+ colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
63037
+ ...contrastTreatment ? { contrastTreatment } : {},
63038
+ ...navTextSize ? { textSize: navTextSize } : {}
63039
+ };
63040
+ if (header.navWeight === "bold" && navStyle === "solid") style.textTransform = "uppercase";
63041
+ applyLegacyNavEffects(style, header);
63042
+ applyLegacyGlassTreatment(style, header, navStyle);
63043
+ return style;
63044
+ }
63045
+ function applyLegacyNavEffects(style, header) {
63046
+ if (!header.navEffects) return;
63047
+ const effects = style.effects = {
63048
+ ...style.effects,
63049
+ hover: [...style.effects?.hover ?? []],
63050
+ active: [...style.effects?.active ?? []]
63051
+ };
63052
+ if (header.navEffects.glow) effects.hover.push({
63053
+ effectId: "outer-glow",
63054
+ options: { spread: 5 }
63055
+ });
63056
+ if (header.navEffects.neumorphic) {
63057
+ effects.hover.push({
63058
+ effectId: "neumorphic-shadow",
63059
+ options: { mode: "pressed" }
63060
+ });
63061
+ effects.hover.push({
63062
+ effectId: "text-color-change",
63063
+ options: { hoverColorToken: "primary" }
63064
+ });
63065
+ }
63066
+ if (header.navEffects.underlineGradient) effects.hover.push({
63067
+ effectId: "border-bottom-grow",
63068
+ options: { origin: "center" }
63069
+ });
63070
+ }
63071
+ function applyLegacyGlassTreatment(style, header, navStyle) {
63072
+ if (header.navContainer?.type !== "glass" || navStyle !== "minimal") return;
63073
+ style.borderRadius = "full";
63074
+ style.effects = {
63075
+ ...style.effects,
63076
+ hover: glassStateEffects(10),
63077
+ active: glassStateEffects(18)
63078
+ };
63079
+ }
63080
+ function glassStateEffects(opacity) {
63081
+ return [{
63082
+ effectId: "background-on-hover-alpha",
63083
+ options: {
63084
+ colorToken: "neutral-50",
63085
+ opacity
63086
+ }
63087
+ }, {
63088
+ effectId: "text-color-change",
63089
+ options: { hoverColorToken: "neutral-50" }
63090
+ }];
63091
+ }
63071
63092
  //#endregion
63072
63093
  //#region ../theme-core/src/header/generateHeaderCss.ts
63073
63094
  init_resolver$1();
63074
63095
  init_siteChromeNavPreferences();
63075
63096
  init_shared$5();
63076
63097
  init_breakpoints();
63077
- init_navDropdownSizing();
63098
+ init_scrollTreatment();
63099
+ init_paintTargets();
63078
63100
  const HEADER_BLUR = "blur(12px)";
63079
63101
  const FLOATING_BLUR = "blur(16px)";
63080
63102
  const INSET_SHELL_MARKER_CLASS = "header-bar-frame-inset-shell";
@@ -63102,8 +63124,8 @@ function generateHeaderCss(options) {
63102
63124
  const cssChunks = [];
63103
63125
  const headerContrastTreatment = resolveHeaderContrastTreatment(header);
63104
63126
  const headerNavTextSize = resolveHeaderNavTextSize(header);
63105
- cssChunks.push(generateHeaderRootStyles(header, themeId, tokens, theme));
63106
- cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId));
63127
+ cssChunks.push(generateHeaderRootStyles(header, themeId, tokens));
63128
+ cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId, header.variant));
63107
63129
  cssChunks.push(generateLogoStyles({
63108
63130
  logo: header.logo,
63109
63131
  themeId,
@@ -63141,56 +63163,34 @@ function isClearSplitHeaderShape(header) {
63141
63163
  function isDetachedFloatingHeaderShape(header) {
63142
63164
  return header.variant === "floating" && !header.container;
63143
63165
  }
63144
- function generateMobileOverlayBackdropFilterFix(themeId) {
63145
- return `\n${`:where([data-theme-scope="${themeId}"]) .header-root:has([data-nav-mobile-overlay][aria-hidden="false"])::before`} {\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n`;
63146
- }
63147
63166
  /**
63148
63167
  * Generate root header container styles
63149
63168
  */
63150
- function generateHeaderRootStyles(header, themeId, tokens, _theme) {
63169
+ function generateHeaderRootStyles(header, themeId, tokens) {
63151
63170
  const selector = `:where([data-theme-scope="${themeId}"]) .header-root`;
63152
- const backgroundSelector = `:where([data-theme-scope="${themeId}"]) .header-root::before`;
63153
63171
  const rules = [];
63154
- const backgroundRules = [];
63155
63172
  const navContainerType = header.navContainer?.type ?? "none";
63156
63173
  const isContainedNav = navContainerType === "pill" || navContainerType === "glass";
63157
63174
  rules.push("position: relative;");
63158
63175
  rules.push("isolation: isolate;");
63159
- if (!isContainedNav) {
63160
- const bg = header.background;
63161
- if (bg.type === "color") {
63162
- const bgColor = tokens.getColor(bg.color || "surface");
63163
- backgroundRules.push(`background-color: ${bgColor};`);
63164
- } else if (bg.type === "gradient" && bg.gradient) {
63165
- const stops = bg.gradient.stops.map((s) => tokens.getColor(s.color)).join(", ");
63166
- const angle = bg.gradient.angle ?? 180;
63167
- backgroundRules.push(`background-image: linear-gradient(${angle}deg, ${stops});`);
63168
- }
63169
- backgroundRules.push(`backdrop-filter: ${HEADER_BLUR};`);
63170
- backgroundRules.push(`-webkit-backdrop-filter: ${HEADER_BLUR};`);
63171
- if (header.border) {
63172
- const borderWidth = getComponentBorderWidthPx(header.border.width);
63173
- if (borderWidth !== "0") {
63174
- const borderToken = header.border?.colorToken?.trim() || "border";
63175
- const borderColor = tokens.getColor(borderToken);
63176
- const borderStyle = header.border.style === "dashed" ? "dashed" : "solid";
63177
- if (header.border.position === "bottom") rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`);
63178
- else if (header.border.position === "top") rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`);
63179
- else if (header.border.position === "both") {
63180
- rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`);
63181
- rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`);
63182
- }
63183
- }
63184
- }
63185
- }
63176
+ const surfaceRules = isContainedNav ? {
63177
+ base: [],
63178
+ scrolled: [],
63179
+ border: []
63180
+ } : buildHeaderSurfaceRules(header, tokens, HEADER_BLUR);
63181
+ const floatingSurfaceBorder = header.variant === "floating";
63182
+ if (!floatingSurfaceBorder) rules.push(...surfaceRules.border);
63183
+ const basePaintRules = floatingSurfaceBorder ? [...surfaceRules.base, ...surfaceRules.border] : surfaceRules.base;
63184
+ const scrolledPaintRules = floatingSurfaceBorder ? [...surfaceRules.scrolled, ...surfaceRules.border] : surfaceRules.scrolled;
63186
63185
  if (header.positioning === "sticky" || header.positioning === "fixed") {
63187
63186
  const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
63188
63187
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
63189
63188
  }
63190
63189
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
63191
63190
  const overlayFix = `\n${`${selector}:has([data-nav-mobile-overlay][aria-hidden="false"])`} {\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n`;
63192
- if (isContainedNav || backgroundRules.length === 0) return `${baseBlock}\n${overlayFix}`;
63193
- return `${baseBlock}\n${`\n${backgroundSelector} {\n content: \"\";\n position: absolute;\n inset: 0;\n pointer-events: none;\n border-radius: inherit;\n z-index: -1;\n ${backgroundRules.join("\n ")}\n}\n`}\n${overlayFix}${usesInsetShell(header) ? generateInsetShellStyles(header, themeId) : ""}`;
63191
+ const scrollTreatmentStyles = generateHeaderScrollTreatmentStyles(header.scrollTreatment, themeId, header.variant, scrolledPaintRules);
63192
+ if (isContainedNav || basePaintRules.length === 0) return `${baseBlock}\n${overlayFix}${scrollTreatmentStyles}`;
63193
+ return `${baseBlock}\n${renderHeaderPaintTargetRules(getHeaderPaintTargets(header.variant, themeId), basePaintRules)}\n${overlayFix}${usesInsetShell(header) ? generateInsetShellStyles(header, themeId) : ""}${scrollTreatmentStyles}`;
63194
63194
  }
63195
63195
  /**
63196
63196
  * Reshapes the full-bleed header paint layer into a contained brand capsule at
@@ -63235,10 +63235,10 @@ function generateLogoStyles(input) {
63235
63235
  else rules.push(`font-family: var(--font-heading);`);
63236
63236
  if (logo) {
63237
63237
  if (logo.letterSpacing && logo.letterSpacing !== "normal") rules.push(`letter-spacing: ${{
63238
- "normal": "0em",
63239
- "wide": "0.05em",
63240
- "wider": "0.1em",
63241
- "widest": "0.15em"
63238
+ normal: "0em",
63239
+ wide: "0.05em",
63240
+ wider: "0.1em",
63241
+ widest: "0.15em"
63242
63242
  }[logo.letterSpacing]};`);
63243
63243
  if (logo.gradient) {
63244
63244
  rules.push(`background: linear-gradient(to right, ${primaryColor}, ${accentColor});`);
@@ -63311,71 +63311,11 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
63311
63311
  } : header.navLinkStyle, navPreferences),
63312
63312
  className: "header-nav-link"
63313
63313
  });
63314
- const navStyle = header.navStyle ?? "minimal";
63315
- const basePreset = getNavLinkPreset(navStyle);
63316
- if (!basePreset) {
63317
- console.warn(`[generateHeaderCss] Nav link preset not found: ${navStyle}`);
63314
+ const mergedStyle = buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize);
63315
+ if (!mergedStyle) {
63316
+ console.warn(`[generateHeaderCss] Nav link preset not found: ${header.navStyle}`);
63318
63317
  return "";
63319
63318
  }
63320
- const mergedStyle = {
63321
- ...basePreset,
63322
- fontWeight: header.navWeight ?? basePreset.fontWeight,
63323
- colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
63324
- ...contrastTreatment ? { contrastTreatment } : {},
63325
- ...navTextSize ? { textSize: navTextSize } : {}
63326
- };
63327
- if (header.navWeight === "bold" && navStyle === "solid") mergedStyle.textTransform = "uppercase";
63328
- if (header.navEffects) {
63329
- const effects = mergedStyle.effects = {
63330
- ...mergedStyle.effects,
63331
- hover: [...mergedStyle.effects?.hover || []],
63332
- active: [...mergedStyle.effects?.active || []]
63333
- };
63334
- if (header.navEffects.glow) effects.hover.push({
63335
- effectId: "outer-glow",
63336
- options: { spread: 5 }
63337
- });
63338
- if (header.navEffects.neumorphic) {
63339
- effects.hover.push({
63340
- effectId: "neumorphic-shadow",
63341
- options: { mode: "pressed" }
63342
- });
63343
- effects.hover.push({
63344
- effectId: "text-color-change",
63345
- options: { hoverColorToken: "primary" }
63346
- });
63347
- }
63348
- if (header.navEffects.underlineGradient) effects.hover.push({
63349
- effectId: "border-bottom-grow",
63350
- options: { origin: "center" }
63351
- });
63352
- }
63353
- if ((header.navContainer?.type ?? "none") === "glass" && navStyle === "minimal") {
63354
- mergedStyle.borderRadius = "full";
63355
- mergedStyle.effects = {
63356
- ...mergedStyle.effects,
63357
- hover: [{
63358
- effectId: "background-on-hover-alpha",
63359
- options: {
63360
- colorToken: "neutral-50",
63361
- opacity: 10
63362
- }
63363
- }, {
63364
- effectId: "text-color-change",
63365
- options: { hoverColorToken: "neutral-50" }
63366
- }],
63367
- active: [{
63368
- effectId: "background-on-hover-alpha",
63369
- options: {
63370
- colorToken: "neutral-50",
63371
- opacity: 18
63372
- }
63373
- }, {
63374
- effectId: "text-color-change",
63375
- options: { hoverColorToken: "neutral-50" }
63376
- }]
63377
- };
63378
- }
63379
63319
  return generateNavLinkCSS({
63380
63320
  themeId,
63381
63321
  tokens,
@@ -63403,10 +63343,10 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
63403
63343
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
63404
63344
  const borderRadius = dropdownStyle?.borderRadius ?? "md";
63405
63345
  rules.push(`border-radius: ${{
63406
- "none": "0",
63407
- "sm": "0.25rem",
63408
- "md": "0.5rem",
63409
- "lg": "0.75rem"
63346
+ none: "0",
63347
+ sm: "0.25rem",
63348
+ md: "0.5rem",
63349
+ lg: "0.75rem"
63410
63350
  }[borderRadius]};`);
63411
63351
  rules.push(`padding: 0.5rem 0;`);
63412
63352
  return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
@@ -63461,16 +63401,16 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
63461
63401
  const additionalRules = [];
63462
63402
  const letterSpacing = configuredDropdownStyle?.letterSpacing ?? "normal";
63463
63403
  if (letterSpacing !== "normal") additionalRules.push(`letter-spacing: ${{
63464
- "normal": "0em",
63465
- "wide": "0.05em",
63466
- "wider": "0.1em"
63404
+ normal: "0em",
63405
+ wide: "0.05em",
63406
+ wider: "0.1em"
63467
63407
  }[letterSpacing]};`);
63468
63408
  const textSize = configuredDropdownStyle?.textSize ?? "sm";
63469
63409
  additionalRules.push(`font-size: ${{
63470
- "xs": "0.75rem",
63471
- "sm": "0.875rem",
63472
- "base": "1rem",
63473
- "lg": "1.125rem"
63410
+ xs: "0.75rem",
63411
+ sm: "0.875rem",
63412
+ base: "1rem",
63413
+ lg: "1.125rem"
63474
63414
  }[textSize]};`);
63475
63415
  if (additionalRules.length > 0) return baseCSS + `\n${`:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`} {\n ${additionalRules.join("\n ")}\n}\n`;
63476
63416
  return baseCSS;
@@ -63566,18 +63506,18 @@ function generateFloatingContainerStyles(header, themeId, tokens) {
63566
63506
  rules.push(`-webkit-backdrop-filter: ${FLOATING_BLUR};`);
63567
63507
  if (container.border) rules.push(`border: 1px solid rgb(255 255 255 / 0.2);`);
63568
63508
  rules.push(`border-radius: ${{
63569
- "none": "0",
63570
- "sm": "0.375rem",
63571
- "md": "0.5rem",
63572
- "lg": "0.75rem",
63573
- "xl": "1rem",
63509
+ none: "0",
63510
+ sm: "0.375rem",
63511
+ md: "0.5rem",
63512
+ lg: "0.75rem",
63513
+ xl: "1rem",
63574
63514
  "2xl": "1.5rem"
63575
63515
  }[container.rounded]};`);
63576
63516
  if (container.shadow) rules.push(`box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);`);
63577
63517
  rules.push(`padding: ${{
63578
- "sm": "1rem 1.5rem",
63579
- "md": "1.5rem 2rem",
63580
- "lg": "2rem 2.5rem"
63518
+ sm: "1rem 1.5rem",
63519
+ md: "1.5rem 2rem",
63520
+ lg: "2rem 2.5rem"
63581
63521
  }[container.padding]};`);
63582
63522
  return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
63583
63523
  }
@@ -66194,7 +66134,7 @@ function sourceLabel(source) {
66194
66134
  case "managed-database": return "DB";
66195
66135
  case "sdk-synced": return "SDK-synced DB";
66196
66136
  case "sdk-config": return "SDK config";
66197
- default: return assertNever$25(source);
66137
+ default: return assertNever$24(source);
66198
66138
  }
66199
66139
  }
66200
66140
  //#endregion
@@ -80240,6 +80180,9 @@ function normalizeLoaderParams(endpoint, params, context) {
80240
80180
  //#region ../blocks/src/primitives/content/primitives.tsx
80241
80181
  init_RichText();
80242
80182
  //#endregion
80183
+ //#region ../blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.ts
80184
+ init_src$2();
80185
+ //#endregion
80243
80186
  //#region ../blocks/src/system/helpers/resolveBackground.tsx
80244
80187
  /**
80245
80188
  * Helper utilities for resolving background data in custom block components.
@@ -80314,7 +80257,7 @@ init_tokens();
80314
80257
  init_gradients();
80315
80258
  init_richTextSchema();
80316
80259
  init_media();
80317
- init_media$1();
80260
+ init_media$2();
80318
80261
  init_slotContracts();
80319
80262
  init_typeGuards();
80320
80263
  init_booking_form_reserved_fields();
@@ -151495,15 +151438,20 @@ var init_usePaymentVerification = __esmMin((() => {
151495
151438
  //#endregion
151496
151439
  //#region ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.ts
151497
151440
  function useEventRegistrationStripeReturn(options) {
151441
+ return useEventRegistrationStripeReturnWithDeps(options, eventRegistrationStripeReturnDeps);
151442
+ }
151443
+ function useEventRegistrationStripeReturnWithDeps(options, deps) {
151498
151444
  const { api, events, occurrenceId, pendingAttendeeId, setErrorMessage, setFormData, setPaymentSelection, setPendingAttendeeId, setRegistrationResult, setSelectedEvent, setSelectedAttendanceMode, setTicketSelections, setStep, setTicketsCount, step } = options;
151499
- const verification = usePaymentVerification(useMemo(() => step === "verifying-payment" && pendingAttendeeId ? { transactionId: pendingAttendeeId } : null, [step, pendingAttendeeId]));
151445
+ const verificationConfig = useMemo(() => step === "verifying-payment" && pendingAttendeeId ? { transactionId: pendingAttendeeId } : null, [step, pendingAttendeeId]);
151446
+ const verification = deps.usePaymentVerification(verificationConfig);
151500
151447
  useEffect(() => {
151501
- cleanupStaleRegistrations();
151502
- const registrationStatus = consumeSearchParam("registration");
151503
- if (!registrationStatus) return;
151448
+ deps.cleanupStaleRegistrations();
151449
+ const registrationStatus = deps.consumeSearchParam("registration");
151450
+ if (registrationStatus !== "cancelled" && registrationStatus !== "success") return;
151451
+ deps.scrollToBlock(EVENT_REGISTRATION_ANCHOR_ID);
151504
151452
  const siteId = api.config.siteId;
151505
151453
  if (!siteId) return;
151506
- const pending = getPendingRegistration(siteId, occurrenceId || void 0);
151454
+ const pending = deps.getPendingRegistration(siteId, occurrenceId || void 0);
151507
151455
  if (!pending) return;
151508
151456
  setFormData(pending.formData);
151509
151457
  setTicketSelections(pending.ticketSelections);
@@ -151523,7 +151471,7 @@ function useEventRegistrationStripeReturn(options) {
151523
151471
  useEffect(() => {
151524
151472
  if (verification.status === "completed") {
151525
151473
  const siteId = api.config.siteId;
151526
- if (siteId && occurrenceId) clearPendingRegistration(siteId, occurrenceId);
151474
+ if (siteId && occurrenceId) deps.clearPendingRegistration(siteId, occurrenceId);
151527
151475
  setRegistrationResult({ status: "confirmed" });
151528
151476
  setStep("success");
151529
151477
  } else if (verification.status === "failed") {
@@ -151543,11 +151491,21 @@ function useEventRegistrationStripeReturn(options) {
151543
151491
  ]);
151544
151492
  return verification;
151545
151493
  }
151494
+ var eventRegistrationStripeReturnDeps;
151546
151495
  var init_useEventRegistrationStripeReturn = __esmMin((() => {
151547
151496
  init_usePaymentVerification();
151548
151497
  init_shared();
151498
+ init_constants();
151549
151499
  init_sessionStorage();
151550
151500
  init_ticketSelectionLines();
151501
+ eventRegistrationStripeReturnDeps = {
151502
+ usePaymentVerification,
151503
+ consumeSearchParam,
151504
+ scrollToBlock,
151505
+ cleanupStaleRegistrations,
151506
+ clearPendingRegistration,
151507
+ getPendingRegistration
151508
+ };
151551
151509
  }));
151552
151510
  //#endregion
151553
151511
  //#region ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.ts
@@ -151639,13 +151597,7 @@ function useEventRegistrationSubmitWithDeps(options, deps) {
151639
151597
  if (!result.alreadyRegistered && result.status === "confirmed" && result.pendingPayment && (method === "stripe" || method === "pass_bundle" || method === "membership_bundle")) {
151640
151598
  options.setPendingAttendeeId(result.attendeeId);
151641
151599
  options.setStep("redirecting");
151642
- const currentUrl = new URL(window.location.href);
151643
- const successParams = new URLSearchParams(currentUrl.search);
151644
- successParams.set("registration", "success");
151645
- const successUrl = `${currentUrl.origin}${currentUrl.pathname}?${successParams.toString()}${currentUrl.hash}`;
151646
- const cancelParams = new URLSearchParams(currentUrl.search);
151647
- cancelParams.set("registration", "cancelled");
151648
- const cancelUrl = `${currentUrl.origin}${currentUrl.pathname}?${cancelParams.toString()}${currentUrl.hash}`;
151600
+ const { successUrl, cancelUrl } = buildCheckoutReturnUrls("registration", EVENT_REGISTRATION_ANCHOR_ID);
151649
151601
  const checkoutType = method === "pass_bundle" ? "pass_bundle" : method === "membership_bundle" ? "membership_bundle" : "event";
151650
151602
  const checkoutResult = await options.api.createEventCheckout({
151651
151603
  attendeeId: result.attendeeId,
@@ -151710,6 +151662,8 @@ function useEventRegistrationSubmitWithDeps(options, deps) {
151710
151662
  }
151711
151663
  var eventRegistrationSubmitDeps;
151712
151664
  var init_useEventRegistrationSubmit = __esmMin((() => {
151665
+ init_shared();
151666
+ init_constants();
151713
151667
  init_sessionStorage();
151714
151668
  init_ticketSelectionLines();
151715
151669
  eventRegistrationSubmitDeps = { savePendingRegistration };
@@ -158651,7 +158605,7 @@ function PassesMembershipsController({ render }) {
158651
158605
  case "redirect":
158652
158606
  window.location.href = result.checkoutUrl;
158653
158607
  return;
158654
- default: return assertNever$25(result);
158608
+ default: return assertNever$24(result);
158655
158609
  }
158656
158610
  } catch (submitError) {
158657
158611
  dispatch({
@@ -159630,7 +159584,7 @@ function BlocksIslandsHydrator(props = {}) {
159630
159584
  init_src$3();
159631
159585
  //#endregion
159632
159586
  //#region ../blocks/src/rendering/server.ts
159633
- init_schema$1();
159587
+ init_schema$2();
159634
159588
  //#endregion
159635
159589
  //#region ../theme-core/src/index.ts
159636
159590
  init_schema();
@@ -159721,7 +159675,7 @@ function renderWithSdkThemeRuntime({ themeRuntime, theme, children }) {
159721
159675
  children
159722
159676
  });
159723
159677
  case "none": return /* @__PURE__ */ jsx(Fragment, { children });
159724
- default: return assertNever$25(themeRuntime);
159678
+ default: return assertNever$24(themeRuntime);
159725
159679
  }
159726
159680
  }
159727
159681
  //#endregion
@@ -159947,7 +159901,7 @@ var SimpleCache = class {
159947
159901
  * 1. This constant
159948
159902
  * 2. The "version" field in package.json
159949
159903
  */
159950
- const SDK_VERSION = "0.125.0";
159904
+ const SDK_VERSION = "0.127.0";
159951
159905
  //#endregion
159952
159906
  //#region src/client/error.ts
159953
159907
  let _Symbol$for;