@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
@@ -236,7 +236,7 @@ var init_demo_runtime = __esmMin((() => {}));
236
236
  var init_collections = __esmMin((() => {}));
237
237
  //#endregion
238
238
  //#region ../core/src/assert-never.ts
239
- function assertNever$21(value, message = "Unexpected variant") {
239
+ function assertNever$20(value, message = "Unexpected variant") {
240
240
  throw new Error(`${message}: ${String(value)}`);
241
241
  }
242
242
  var init_assert_never = __esmMin((() => {}));
@@ -348,7 +348,7 @@ function formatCoursePriceDisplayLabel(display, options) {
348
348
  case "exact": return `Course (${formatCurrencyAmount(display.amount, display.currency, options)})`;
349
349
  case "from": return `Course (From ${formatCurrencyAmount(display.amount, display.currency, options)})`;
350
350
  case "range": return `Course (${formatCurrencyAmount(display.minAmount, display.currency, options)} - ${formatCurrencyAmount(display.maxAmount, display.currency, options)})`;
351
- default: return assertNever$21(display);
351
+ default: return assertNever$20(display);
352
352
  }
353
353
  }
354
354
  /**
@@ -368,7 +368,7 @@ function formatBookingPriceDisplay(display, options = {}) {
368
368
  case "unavailable": return "Pricing unavailable";
369
369
  case "external": return display.label;
370
370
  case "course": return formatCoursePriceDisplayLabel(display.display, options);
371
- default: return assertNever$21(display);
371
+ default: return assertNever$20(display);
372
372
  }
373
373
  }
374
374
  /** Render an event's price directly from its pricing value. */
@@ -447,10 +447,10 @@ function resolveFlexibleBalanceDueAt(input) {
447
447
  switch (input.dueDateRule.kind) {
448
448
  case "relative_to_start_date": return subtractDaysFromIso(input.bookingStartAt, input.dueDateRule.daysBeforeStart);
449
449
  case "fixed_calendar_date": return input.dueDateRule.dueAt;
450
- default: return assertNever$20(input.dueDateRule);
450
+ default: return assertNever$19(input.dueDateRule);
451
451
  }
452
452
  }
453
- function assertNever$20(value) {
453
+ function assertNever$19(value) {
454
454
  throw new Error(`Unexpected value: ${String(value)}`);
455
455
  }
456
456
  var init_booking_flexible_balance = __esmMin((() => {
@@ -464,7 +464,7 @@ function isDepositBearingBookingInstalmentPlan(plan) {
464
464
  case "deposit_plus_one_remainder":
465
465
  case "deposit_plus_scheduled_instalments": return true;
466
466
  case "equal_scheduled_instalments": return false;
467
- default: return assertNever$19(plan);
467
+ default: return assertNever$18(plan);
468
468
  }
469
469
  }
470
470
  function getBookingInstalmentDepositRefundability(plan) {
@@ -490,7 +490,7 @@ function addIntervalPreservingMonthAnchor(isoString, intervalCount, intervalUnit
490
490
  date.setUTCDate(date.getUTCDate() + intervalCount * 7);
491
491
  return date.toISOString();
492
492
  case "month": return addMonthsPreservingAnchorDay(date, intervalCount).toISOString();
493
- default: return assertNever$19(intervalUnit);
493
+ default: return assertNever$18(intervalUnit);
494
494
  }
495
495
  }
496
496
  function getBookingInstalmentPlanIntervalCount(plan) {
@@ -498,7 +498,7 @@ function getBookingInstalmentPlanIntervalCount(plan) {
498
498
  case "deposit_plus_one_remainder": return plan.remainderDueCount;
499
499
  case "deposit_plus_scheduled_instalments":
500
500
  case "equal_scheduled_instalments": return plan.intervalCount;
501
- default: return assertNever$19(plan);
501
+ default: return assertNever$18(plan);
502
502
  }
503
503
  }
504
504
  function omitZeroAmountFutureRows(rows) {
@@ -514,7 +514,7 @@ function addMonthsPreservingAnchorDay(date, intervalCount) {
514
514
  nextMonth.setUTCDate(Math.min(anchorDay, lastDayOfTargetMonth));
515
515
  return nextMonth;
516
516
  }
517
- function assertNever$19(value) {
517
+ function assertNever$18(value) {
518
518
  throw new Error(`Unexpected value: ${String(value)}`);
519
519
  }
520
520
  var init_booking_instalments = __esmMin((() => {}));
@@ -1853,10 +1853,7 @@ var init_contentMediaSnapshotAudit = __esmMin((() => {
1853
1853
  init_contentMediaAudit();
1854
1854
  init_contentMediaAuditFieldAdapter();
1855
1855
  init_identifiers();
1856
- }));
1857
- //#endregion
1858
- //#region ../media-core/src/index.ts
1859
- var init_src$2 = __esmMin((() => {
1856
+ })), init_src$2 = __esmMin((() => {
1860
1857
  init_types$16();
1861
1858
  init_fileDomain();
1862
1859
  init_fileStorage();
@@ -1906,7 +1903,7 @@ var init_src$2 = __esmMin((() => {
1906
1903
  init_contentMediaAudit();
1907
1904
  init_contentMediaAuditFieldAdapter();
1908
1905
  init_contentMediaSnapshotAudit();
1909
- })), PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema$1, rotationSchema$1, rectSchema$1, aspectCropSchema$1, transformSchema$1, mediaPosterSchema, mediaBaseSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema$1;
1906
+ })), 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;
1910
1907
  var init_media$2 = __esmMin((() => {
1911
1908
  init_src$2();
1912
1909
  PUBLIC_DOWNLOAD_MEDIA_TYPES = [
@@ -1973,6 +1970,7 @@ var init_media$2 = __esmMin((() => {
1973
1970
  poster: mediaPosterSchema.optional(),
1974
1971
  transform: transformSchema$1.optional()
1975
1972
  });
1973
+ mediaIdentifierSchema = z.string().trim().min(1).brand();
1976
1974
  imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
1977
1975
  videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
1978
1976
  audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
@@ -1987,6 +1985,15 @@ var init_media$2 = __esmMin((() => {
1987
1985
  spreadsheetMediaSchema,
1988
1986
  archiveMediaSchema
1989
1987
  ]);
1988
+ persistableMediaBaseSchema = mediaBaseSchema.extend({ identifier: mediaIdentifierSchema });
1989
+ z.discriminatedUnion("type", [
1990
+ persistableMediaBaseSchema.extend({ type: z.literal("image") }),
1991
+ persistableMediaBaseSchema.extend({ type: z.literal("video") }),
1992
+ persistableMediaBaseSchema.extend({ type: z.literal("audio") }),
1993
+ persistableMediaBaseSchema.extend({ type: z.literal("document") }),
1994
+ persistableMediaBaseSchema.extend({ type: z.literal("spreadsheet") }),
1995
+ persistableMediaBaseSchema.extend({ type: z.literal("archive") })
1996
+ ]);
1990
1997
  }));
1991
1998
  //#endregion
1992
1999
  //#region ../blocks/src/lib/typeGuards.ts
@@ -2561,7 +2568,7 @@ var init_schemas = __esmMin((() => {
2561
2568
  //#endregion
2562
2569
  //#region ../blocks/src/system/node/schema.ts
2563
2570
  var transformStepSchema, bindingPathSchema, bindingSchema, repeatSchema, conditionalAuthoringPresenceSchema, conditionSchema, dataScopeSchema, nodePropsSchema, nodeSchema, nodeTreeSchema, NodeSchema, NodeTreeSchema;
2564
- var init_schema$2 = __esmMin((() => {
2571
+ var init_schema$3 = __esmMin((() => {
2565
2572
  transformStepSchema = z$1.object({
2566
2573
  id: z$1.string().min(1, "Transform requires an identifier"),
2567
2574
  options: z$1.record(z$1.string(), z$1.unknown()).optional()
@@ -2777,7 +2784,7 @@ function devValidate(node) {
2777
2784
  }
2778
2785
  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;
2779
2786
  var init_builder$2 = __esmMin((() => {
2780
- init_schema$2();
2787
+ init_schema$3();
2781
2788
  init_types$15();
2782
2789
  init_env();
2783
2790
  section$1 = (props, children, ...mods) => el("section", props, children, ...mods);
@@ -4109,6 +4116,18 @@ var init_accessibleSurfaces = __esmMin((() => {
4109
4116
  init_onColor();
4110
4117
  }));
4111
4118
  //#endregion
4119
+ //#region ../theme-core/src/site-styles/lookOptionGroups.ts
4120
+ function defineLookOptionGroup(group) {
4121
+ defaultOption(group);
4122
+ return group;
4123
+ }
4124
+ function defaultOption(group) {
4125
+ const option = group.options.find((candidate) => candidate.id === group.defaultOptionId);
4126
+ if (option) return option;
4127
+ throw new Error(`Look option group "${group.id}" defaults to missing option "${group.defaultOptionId}".`);
4128
+ }
4129
+ var init_lookOptionGroups = __esmMin((() => {}));
4130
+ //#endregion
4112
4131
  //#region ../theme-core/src/site-styles/types.ts
4113
4132
  /**
4114
4133
  * Defines a literal-preserving catalog while rejecting top-level extra keys on
@@ -4161,7 +4180,7 @@ function asDesignSystemTemplateId(value) {
4161
4180
  function makeBoundaryId(previousBlockId, nextBlockId) {
4162
4181
  return asDesignBoundaryId(`boundary:${encodeURIComponent(previousBlockId)}:${encodeURIComponent(nextBlockId)}`);
4163
4182
  }
4164
- function assertNever$13(value, message = "Unhandled Theme V2 variant") {
4183
+ function assertNever$12(value, message = "Unhandled Theme V2 variant") {
4165
4184
  throw new Error(`${message}: ${String(value)}`);
4166
4185
  }
4167
4186
  function brandNonEmptyString(value, label) {
@@ -4257,7 +4276,7 @@ var init_types$14 = __esmMin((() => {
4257
4276
  //#region ../theme-core/src/site-styles/appearancePresetResolution.ts
4258
4277
  function assertValidOptionGroups(preset) {
4259
4278
  preset.optionGroups?.forEach((group) => {
4260
- 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}".`);
4279
+ defineLookOptionGroup(group);
4261
4280
  });
4262
4281
  }
4263
4282
  function defineBlockAppearancePreset(preset) {
@@ -4265,772 +4284,655 @@ function defineBlockAppearancePreset(preset) {
4265
4284
  return preset;
4266
4285
  }
4267
4286
  var init_appearancePresetResolution = __esmMin((() => {
4287
+ init_lookOptionGroups();
4268
4288
  init_types$14();
4269
- }));
4270
- //#endregion
4271
- //#region ../theme-core/src/site-styles/blockAppearancePresets.ts
4272
- var blockAppearancePresets;
4289
+ })), brandScrimOptionGroups, microBannerLayoutPatches;
4273
4290
  var init_blockAppearancePresets = __esmMin((() => {
4274
4291
  init_appearancePresetResolution();
4275
4292
  init_types$14();
4276
- blockAppearancePresets = [
4277
- defineBlockAppearancePreset({
4278
- kind: "block-design",
4279
- id: "hero-immersive-image",
4280
- target: "hero",
4281
- label: "Immersive image hero",
4282
- blockKinds: ["block.hero"],
4283
- constraints: { layoutFamilies: ["centered", "compact"] },
4284
- layoutPatches: [{
4285
- constraints: { layoutVariantKeys: ["micro"] },
4286
- designPatch: {
4287
- sectionHeight: "banner",
4288
- heroTypographyScale: "display"
4289
- }
4290
- }],
4291
- design: {
4292
- sectionSurface: "hero-image",
4293
- contentFrame: plainFrame,
4294
- itemSurface: "none",
4295
- sectionHeight: "hero",
4296
- heroComposition: "center",
4297
- heroTypographyScale: "display",
4298
- imageSurfaceTreatment: { kind: "neutral-wash" }
4293
+ brandScrimOptionGroups = [{
4294
+ id: "image-surface-treatment",
4295
+ label: "Treatment",
4296
+ defaultOptionId: "brand-scrim-primary",
4297
+ options: [{
4298
+ id: "brand-scrim-primary",
4299
+ label: "Brand scrim",
4300
+ designPatch: { imageSurfaceTreatment: {
4301
+ kind: "brand-scrim",
4302
+ token: "primary"
4303
+ } }
4304
+ }, {
4305
+ id: "neutral-scrim",
4306
+ label: "Neutral scrim",
4307
+ designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
4308
+ }]
4309
+ }];
4310
+ microBannerLayoutPatches = [{
4311
+ constraints: { layoutVariantKeys: ["micro"] },
4312
+ designPatch: { sectionHeight: "banner" }
4313
+ }];
4314
+ defineBlockAppearancePreset({
4315
+ id: "hero-immersive-image",
4316
+ target: "hero",
4317
+ label: "Immersive image hero",
4318
+ blockKinds: ["block.hero"],
4319
+ constraints: { layoutFamilies: ["centered", "compact"] },
4320
+ layoutPatches: [{
4321
+ constraints: { layoutVariantKeys: ["micro"] },
4322
+ designPatch: {
4323
+ sectionHeight: "banner",
4324
+ heroTypographyScale: "display"
4299
4325
  }
4300
- }),
4301
- defineBlockAppearancePreset({
4302
- kind: "block-design",
4303
- id: "hero-bottom-left-panel",
4304
- target: "hero",
4305
- label: "Bottom-left panel hero",
4306
- blockKinds: ["block.hero"],
4307
- constraints: { layoutFamilies: ["centered", "compact"] },
4308
- optionGroups: [{
4309
- id: "image-surface-treatment",
4310
- label: "Treatment",
4311
- selectedOptionId: "neutral-scrim",
4312
- options: [{
4313
- id: "neutral-scrim",
4314
- label: "Neutral scrim",
4315
- designPatch: { imageSurfaceTreatment: {
4316
- kind: "neutral-scrim",
4317
- intensity: "balanced"
4318
- } }
4319
- }, {
4320
- id: "brand-scrim-primary",
4321
- label: "Brand scrim",
4322
- designPatch: { imageSurfaceTreatment: {
4323
- kind: "brand-scrim",
4324
- token: "primary",
4325
- intensity: "balanced"
4326
- } }
4327
- }]
4328
- }],
4329
- layoutPatches: [{
4330
- constraints: { layoutVariantKeys: ["micro"] },
4331
- designPatch: {
4332
- sectionHeight: "banner",
4333
- heroTypographyScale: "editorial"
4334
- }
4335
- }],
4336
- design: {
4337
- sectionSurface: "hero-image",
4338
- contentFrame: panelFrame("raised"),
4339
- itemSurface: "none",
4340
- sectionHeight: "immersive",
4341
- heroComposition: "bottom-left",
4342
- heroTypographyScale: "display",
4343
- imageSurfaceTreatment: {
4326
+ }],
4327
+ design: {
4328
+ sectionSurface: "hero-image",
4329
+ contentFrame: plainFrame,
4330
+ itemSurface: "none",
4331
+ sectionHeight: "hero",
4332
+ heroComposition: "center",
4333
+ heroTypographyScale: "display",
4334
+ imageSurfaceTreatment: { kind: "neutral-wash" }
4335
+ }
4336
+ }), defineBlockAppearancePreset({
4337
+ id: "hero-bottom-left-panel",
4338
+ target: "hero",
4339
+ label: "Bottom-left panel hero",
4340
+ blockKinds: ["block.hero"],
4341
+ constraints: { layoutFamilies: ["centered", "compact"] },
4342
+ optionGroups: [{
4343
+ id: "image-surface-treatment",
4344
+ label: "Treatment",
4345
+ defaultOptionId: "neutral-scrim",
4346
+ options: [{
4347
+ id: "neutral-scrim",
4348
+ label: "Neutral scrim",
4349
+ designPatch: { imageSurfaceTreatment: {
4344
4350
  kind: "neutral-scrim",
4345
4351
  intensity: "balanced"
4346
- }
4347
- }
4348
- }),
4349
- defineBlockAppearancePreset({
4350
- kind: "block-design",
4351
- id: "hero-poster-image",
4352
- target: "hero",
4353
- label: "Poster image hero",
4354
- blockKinds: ["block.hero"],
4355
- constraints: { layoutFamilies: ["centered", "compact"] },
4356
- layoutPatches: [{
4357
- constraints: { layoutVariantKeys: ["micro"] },
4358
- designPatch: {
4359
- sectionHeight: "banner",
4360
- heroTypographyScale: "display"
4361
- }
4362
- }],
4363
- design: {
4364
- sectionSurface: "hero-image",
4365
- contentFrame: plainFrame,
4366
- itemSurface: "none",
4367
- sectionHeight: "immersive",
4368
- heroComposition: "center",
4369
- heroTypographyScale: "poster",
4370
- imageSurfaceTreatment: {
4352
+ } }
4353
+ }, {
4354
+ id: "brand-scrim-primary",
4355
+ label: "Brand scrim",
4356
+ designPatch: { imageSurfaceTreatment: {
4371
4357
  kind: "brand-scrim",
4372
4358
  token: "primary",
4373
- intensity: "strong"
4374
- }
4375
- }
4376
- }),
4377
- defineBlockAppearancePreset({
4378
- kind: "block-design",
4379
- id: "hero-brand-scrim",
4380
- target: "hero",
4381
- label: "Brand scrim image hero",
4382
- blockKinds: ["block.hero"],
4383
- constraints: { layoutFamilies: ["centered", "compact"] },
4384
- optionGroups: [{
4385
- id: "image-surface-treatment",
4386
- label: "Treatment",
4387
- selectedOptionId: "brand-scrim-primary",
4388
- options: [{
4389
- id: "brand-scrim-primary",
4390
- label: "Brand scrim",
4391
- designPatch: { imageSurfaceTreatment: {
4392
- kind: "brand-scrim",
4393
- token: "primary"
4394
- } }
4395
- }, {
4396
- id: "neutral-scrim",
4397
- label: "Neutral scrim",
4398
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
4399
- }]
4400
- }],
4401
- layoutPatches: [{
4402
- constraints: { layoutVariantKeys: ["micro"] },
4403
- designPatch: { sectionHeight: "banner" }
4404
- }],
4405
- design: {
4406
- sectionSurface: "hero-image",
4407
- contentFrame: plainFrame,
4408
- itemSurface: "none",
4409
- sectionHeight: "immersive",
4410
- heroComposition: "center",
4411
- heroTypographyScale: "display",
4412
- imageSurfaceTreatment: {
4413
- kind: "brand-scrim",
4414
- token: "primary"
4415
- }
4416
- }
4417
- }),
4418
- defineBlockAppearancePreset({
4419
- kind: "block-design",
4420
- id: "hero-brand-scrim-fixed-frame",
4421
- target: "hero",
4422
- label: "Fixed-frame brand scrim hero",
4423
- blockKinds: ["block.hero"],
4424
- constraints: { layoutFamilies: ["centered", "compact"] },
4425
- optionGroups: [{
4426
- id: "image-surface-treatment",
4427
- label: "Treatment",
4428
- selectedOptionId: "brand-scrim-primary",
4429
- options: [{
4430
- id: "brand-scrim-primary",
4431
- label: "Brand scrim",
4432
- designPatch: { imageSurfaceTreatment: {
4433
- kind: "brand-scrim",
4434
- token: "primary"
4435
- } }
4436
- }, {
4437
- id: "neutral-scrim",
4438
- label: "Neutral scrim",
4439
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
4440
- }]
4441
- }],
4442
- layoutPatches: [{
4443
- constraints: { layoutVariantKeys: ["micro"] },
4444
- designPatch: { sectionHeight: "banner" }
4445
- }],
4446
- design: {
4447
- sectionSurface: "hero-image",
4448
- contentFrame: plainFrame,
4449
- itemSurface: "none",
4450
- sectionHeight: "immersive",
4451
- heroComposition: "center",
4452
- heroTypographyScale: "display",
4453
- imageSurfaceTreatment: {
4454
- kind: "brand-scrim",
4455
- token: "primary"
4456
- },
4457
- imageSurfaceMotion: "fixed-frame",
4458
- eyebrowTreatment: "accent-pill-bounce"
4459
- }
4460
- }),
4461
- defineBlockAppearancePreset({
4462
- kind: "block-design",
4463
- id: "hero-brand-depth-expressive",
4464
- target: "hero",
4465
- label: "Expressive brand-depth hero",
4466
- blockKinds: ["block.hero"],
4467
- constraints: { layoutFamilies: ["centered", "compact"] },
4468
- design: {
4469
- sectionSurface: "brand-depth-band",
4470
- contentFrame: plainFrame,
4471
- itemSurface: "none",
4472
- heroComposition: "center",
4473
- heroTypographyScale: "editorial",
4474
- eyebrowTreatment: "accent-pill-bounce"
4475
- }
4476
- }),
4477
- defineBlockAppearancePreset({
4478
- kind: "block-design",
4479
- id: "hero-contained-intro",
4480
- target: "hero",
4481
- label: "Contained intro hero",
4482
- blockKinds: ["block.hero"],
4483
- design: {
4484
- sectionSurface: "muted-band",
4485
- contentFrame: panelFrame("inset"),
4486
- itemSurface: "none",
4487
- heroComposition: "center",
4488
- heroTypographyScale: "editorial"
4489
- }
4490
- }),
4491
- defineBlockAppearancePreset({
4492
- kind: "block-design",
4493
- id: "hero-split-editorial",
4494
- target: "hero",
4495
- label: "Editorial split hero",
4496
- blockKinds: ["block.hero"],
4497
- constraints: { layoutFamilies: ["split"] },
4498
- design: {
4499
- sectionSurface: "base",
4500
- contentFrame: plainFrame,
4501
- itemSurface: "none",
4359
+ intensity: "balanced"
4360
+ } }
4361
+ }]
4362
+ }],
4363
+ layoutPatches: [{
4364
+ constraints: { layoutVariantKeys: ["micro"] },
4365
+ designPatch: {
4366
+ sectionHeight: "banner",
4502
4367
  heroTypographyScale: "editorial"
4503
4368
  }
4504
- }),
4505
- defineBlockAppearancePreset({
4506
- kind: "block-design",
4507
- id: "hero-split-brand",
4508
- target: "hero",
4509
- label: "Brand split hero",
4510
- blockKinds: ["block.hero"],
4511
- constraints: { layoutFamilies: ["split"] },
4512
- design: {
4513
- sectionSurface: "brand-depth-band",
4514
- contentFrame: plainFrame,
4515
- itemSurface: "none",
4516
- heroTypographyScale: "display",
4517
- eyebrowTreatment: "accent-pill-bounce"
4518
- }
4519
- }),
4520
- defineBlockAppearancePreset({
4521
- kind: "block-design",
4522
- id: "hero-split-soft-panel",
4523
- target: "hero",
4524
- label: "Soft panel split hero",
4525
- blockKinds: ["block.hero"],
4526
- constraints: { layoutFamilies: ["split"] },
4527
- design: {
4528
- sectionSurface: "muted-band",
4529
- contentFrame: panelFrame("raised"),
4530
- itemSurface: "none",
4531
- heroTypographyScale: "editorial"
4369
+ }],
4370
+ design: {
4371
+ sectionSurface: "hero-image",
4372
+ contentFrame: panelFrame("raised"),
4373
+ itemSurface: "none",
4374
+ sectionHeight: "immersive",
4375
+ heroComposition: "bottom-left",
4376
+ heroTypographyScale: "display",
4377
+ imageSurfaceTreatment: {
4378
+ kind: "neutral-scrim",
4379
+ intensity: "balanced"
4532
4380
  }
4533
- }),
4534
- defineBlockAppearancePreset({
4535
- kind: "block-design",
4536
- id: "hero-split-accent",
4537
- target: "hero",
4538
- label: "Accent split hero",
4539
- blockKinds: ["block.hero"],
4540
- constraints: { layoutFamilies: ["split"] },
4541
- design: {
4542
- sectionSurface: "accent-band",
4543
- contentFrame: panelFrame("raised"),
4544
- itemSurface: "none",
4381
+ }
4382
+ }), defineBlockAppearancePreset({
4383
+ id: "hero-poster-image",
4384
+ target: "hero",
4385
+ label: "Poster image hero",
4386
+ blockKinds: ["block.hero"],
4387
+ constraints: { layoutFamilies: ["centered", "compact"] },
4388
+ layoutPatches: [{
4389
+ constraints: { layoutVariantKeys: ["micro"] },
4390
+ designPatch: {
4391
+ sectionHeight: "banner",
4545
4392
  heroTypographyScale: "display"
4546
4393
  }
4547
- }),
4548
- defineBlockAppearancePreset({
4549
- kind: "block-design",
4550
- id: "intro-editorial-statement",
4551
- target: "intro",
4552
- label: "Editorial intro statement",
4553
- blockKinds: ["block.intro"],
4554
- constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
4555
- design: {
4556
- sectionSurface: "base",
4557
- contentFrame: plainFrame,
4558
- itemSurface: "none",
4559
- composition: {
4560
- kind: "intro",
4561
- treatment: "editorial-statement"
4562
- }
4563
- }
4564
- }),
4565
- defineBlockAppearancePreset({
4566
- kind: "block-design",
4567
- id: "intro-portrait-bio",
4568
- target: "intro",
4569
- label: "Portrait and bio",
4570
- blockKinds: ["block.intro"],
4571
- constraints: { layoutVariantKeys: ["media-copy"] },
4572
- design: {
4573
- sectionSurface: "base",
4574
- contentFrame: plainFrame,
4575
- itemSurface: "none",
4576
- composition: {
4577
- kind: "intro",
4578
- treatment: "portrait-bio"
4579
- }
4580
- }
4581
- }),
4582
- defineBlockAppearancePreset({
4583
- kind: "block-design",
4584
- id: "offerings-preview-default-cards",
4585
- target: "offerings",
4586
- label: "Default offering cards",
4587
- blockKinds: ["block.offerings-preview"],
4588
- design: {
4589
- sectionSurface: "base",
4590
- contentFrame: plainFrame,
4591
- itemSurface: "default"
4592
- }
4593
- }),
4594
- defineBlockAppearancePreset({
4595
- kind: "block-design",
4596
- id: "offerings-preview-secondary-cards",
4597
- target: "offerings",
4598
- label: "Secondary offering cards",
4599
- blockKinds: ["block.offerings-preview"],
4600
- design: {
4601
- sectionSurface: "muted-band",
4602
- contentFrame: plainFrame,
4603
- itemSurface: "inset"
4604
- }
4605
- }),
4606
- defineBlockAppearancePreset({
4607
- kind: "block-design",
4608
- id: "offerings-preview-non-carded",
4609
- target: "offerings",
4610
- label: "Non-carded offerings",
4611
- blockKinds: ["block.offerings-preview"],
4612
- design: {
4613
- sectionSurface: "muted-band",
4614
- contentFrame: plainFrame,
4615
- itemSurface: "editorial"
4616
- }
4617
- }),
4618
- defineBlockAppearancePreset({
4619
- kind: "block-design",
4620
- id: "offerings-preview-paired-feature-cards",
4621
- target: "offerings",
4622
- label: "Paired feature cards",
4623
- blockKinds: ["block.offerings-preview"],
4624
- constraints: { layoutVariantKeys: ["cards"] },
4625
- design: {
4626
- sectionSurface: "base",
4627
- contentFrame: plainFrame,
4628
- itemSurface: "none"
4629
- }
4630
- }),
4631
- defineBlockAppearancePreset({
4632
- kind: "block-design",
4633
- id: "offerings-preview-open-editorial-columns",
4634
- target: "offerings",
4635
- label: "Open editorial columns",
4636
- blockKinds: ["block.offerings-preview"],
4637
- constraints: { layoutVariantKeys: ["cards"] },
4638
- design: {
4639
- sectionSurface: "base",
4640
- contentFrame: plainFrame,
4641
- itemSurface: "none"
4642
- }
4643
- }),
4644
- defineBlockAppearancePreset({
4645
- kind: "block-design",
4646
- id: "offerings-preview-joined-programme-panel",
4647
- target: "offerings",
4648
- label: "Joined programme panel",
4649
- blockKinds: ["block.offerings-preview"],
4650
- constraints: { layoutVariantKeys: ["cards"] },
4651
- design: {
4652
- sectionSurface: "base",
4653
- contentFrame: plainFrame,
4654
- itemSurface: "none"
4655
- }
4656
- }),
4657
- defineBlockAppearancePreset({
4658
- kind: "block-design",
4659
- id: "feature-cards-raised-rule",
4660
- target: "feature-cards",
4661
- label: "Raised cards with rule",
4662
- blockKinds: ["block.feature-cards"],
4663
- design: {
4664
- sectionSurface: "base",
4665
- contentFrame: plainFrame,
4666
- itemSurface: "raised"
4667
- }
4668
- }),
4669
- defineBlockAppearancePreset({
4670
- kind: "block-design",
4671
- id: "feature-cards-bold-colors",
4672
- target: "feature-cards",
4673
- label: "Bold colour-blocked cards",
4674
- blockKinds: ["block.feature-cards"],
4675
- design: {
4676
- sectionSurface: "base",
4677
- contentFrame: plainFrame,
4678
- itemSurface: "color-blocked"
4679
- }
4680
- }),
4681
- defineBlockAppearancePreset({
4682
- kind: "block-design",
4683
- id: "feature-cards-editorial-columns",
4684
- target: "feature-cards",
4685
- label: "Editorial open columns",
4686
- blockKinds: ["block.feature-cards"],
4687
- design: {
4688
- sectionSurface: "base",
4689
- contentFrame: plainFrame,
4690
- itemSurface: "editorial"
4691
- }
4692
- }),
4693
- defineBlockAppearancePreset({
4694
- kind: "block-design",
4695
- id: "feature-cards-asymmetric-emphasis",
4696
- target: "feature-cards",
4697
- label: "Asymmetric emphasis pair",
4698
- blockKinds: ["block.feature-cards"],
4699
- constraints: { layoutFamilies: ["grid"] },
4700
- design: {
4701
- sectionSurface: "base",
4702
- contentFrame: plainFrame,
4703
- itemSurface: "none",
4704
- composition: {
4705
- kind: "feature-cards",
4706
- treatment: "asymmetric-emphasis"
4707
- }
4708
- }
4709
- }),
4710
- defineBlockAppearancePreset({
4711
- kind: "block-design",
4712
- id: "feature-cards-framed-programme",
4713
- target: "feature-cards",
4714
- label: "Framed programme cards",
4715
- blockKinds: ["block.feature-cards"],
4716
- constraints: { layoutFamilies: ["grid"] },
4717
- design: {
4718
- sectionSurface: "brand-depth-band",
4719
- contentFrame: plainFrame,
4720
- itemSurface: "inset",
4721
- composition: {
4722
- kind: "feature-cards",
4723
- treatment: "framed-programme"
4724
- }
4725
- }
4726
- }),
4727
- defineBlockAppearancePreset({
4728
- kind: "block-design",
4729
- id: "feature-cards-soft-panels",
4730
- target: "feature-cards",
4731
- label: "Soft tinted panels",
4732
- blockKinds: ["block.feature-cards"],
4733
- design: {
4734
- sectionSurface: "base",
4735
- contentFrame: plainFrame,
4736
- itemSurface: "inset"
4737
- }
4738
- }),
4739
- defineBlockAppearancePreset({
4740
- kind: "block-design",
4741
- id: "feature-cards-editorial-diptych",
4742
- target: "feature-cards",
4743
- label: "Editorial diptych",
4744
- blockKinds: ["block.feature-cards"],
4745
- constraints: { layoutVariantKeys: ["editorial-diptych"] },
4746
- design: {
4747
- sectionSurface: "base",
4748
- contentFrame: plainFrame,
4749
- itemSurface: "flat"
4750
- }
4751
- }),
4752
- defineBlockAppearancePreset({
4753
- kind: "block-design",
4754
- id: "feature-cards-editorial-pathways",
4755
- target: "feature-cards",
4756
- label: "Editorial pathways",
4757
- blockKinds: ["block.feature-cards"],
4758
- constraints: { layoutVariantKeys: ["editorial-pathways"] },
4759
- design: {
4760
- sectionSurface: "base",
4761
- contentFrame: plainFrame,
4762
- itemSurface: "flat"
4763
- }
4764
- }),
4765
- defineBlockAppearancePreset({
4766
- kind: "block-design",
4767
- id: "feature-cards-photo-tiles",
4768
- target: "feature-cards",
4769
- label: "Photo tiles",
4770
- blockKinds: ["block.feature-cards"],
4771
- design: {
4772
- sectionSurface: "base",
4773
- contentFrame: plainFrame,
4774
- itemSurface: "raised"
4775
- }
4776
- }),
4777
- defineBlockAppearancePreset({
4778
- kind: "block-design",
4779
- id: "events-lined-panel",
4780
- target: "events",
4781
- label: "Raised event panel",
4782
- blockKinds: ["block.event-calendar", "block.event-listing"],
4783
- design: {
4784
- sectionSurface: "base",
4785
- contentFrame: panelFrame("raised"),
4786
- itemSurface: "none"
4787
- }
4788
- }),
4789
- defineBlockAppearancePreset({
4790
- kind: "block-design",
4791
- id: "events-ruled-register",
4792
- target: "events",
4793
- label: "Ruled event register",
4794
- blockKinds: ["block.event-calendar", "block.event-listing"],
4795
- design: {
4796
- sectionSurface: "brand-depth-band",
4797
- contentFrame: plainFrame,
4798
- itemSurface: "none",
4799
- eventListTreatment: "ruled-register"
4800
- }
4801
- }),
4802
- defineBlockAppearancePreset({
4803
- kind: "block-design",
4804
- id: "events-editorial-register",
4805
- target: "events",
4806
- label: "Editorial event register",
4807
- blockKinds: ["block.event-calendar", "block.event-listing"],
4808
- design: {
4809
- sectionSurface: "base",
4810
- contentFrame: plainFrame,
4811
- itemSurface: "none",
4812
- eventListTreatment: "editorial-register"
4813
- }
4814
- }),
4815
- defineBlockAppearancePreset({
4816
- kind: "block-design",
4817
- id: "events-dense-index",
4818
- target: "events",
4819
- label: "Dense event index",
4820
- blockKinds: ["block.event-calendar", "block.event-listing"],
4821
- design: {
4822
- sectionSurface: "accent-band",
4823
- contentFrame: plainFrame,
4824
- itemSurface: "none",
4825
- eventListTreatment: "dense-index"
4826
- }
4827
- }),
4828
- defineBlockAppearancePreset({
4829
- kind: "block-design",
4830
- id: "schedule-details-brand-depth",
4831
- target: "events",
4832
- label: "Brand-depth schedule details",
4833
- blockKinds: ["block.event-details", "block.course-details"],
4834
- design: {
4835
- sectionSurface: "brand-depth-band",
4836
- contentFrame: plainFrame,
4837
- itemSurface: "none",
4838
- tileTreatment: "brand-depth"
4839
- }
4840
- }),
4841
- defineBlockAppearancePreset({
4842
- kind: "block-design",
4843
- id: "media-text-flush-feature",
4844
- target: "media-text",
4845
- label: "Flush media feature",
4846
- blockKinds: ["block.media-text"],
4847
- design: {
4848
- sectionSurface: "muted-band",
4849
- contentFrame: flushPanelFrame({ bleed: "start" }),
4850
- itemSurface: "none"
4851
- }
4852
- }),
4853
- defineBlockAppearancePreset({
4854
- kind: "block-design",
4855
- id: "testimonials-simple-cards",
4856
- target: "testimonials",
4857
- label: "Simple testimonial cards",
4858
- blockKinds: ["block.testimonials"],
4859
- design: {
4860
- sectionSurface: "base",
4861
- contentFrame: plainFrame,
4862
- itemSurface: "default"
4863
- }
4864
- }),
4865
- defineBlockAppearancePreset({
4866
- kind: "block-design",
4867
- id: "testimonials-raised-panel",
4868
- target: "testimonials",
4869
- label: "Raised testimonial panel",
4870
- blockKinds: ["block.testimonials"],
4871
- design: {
4872
- sectionSurface: "muted-band",
4873
- contentFrame: panelFrame("raised"),
4874
- itemSurface: "raised"
4875
- }
4876
- }),
4877
- defineBlockAppearancePreset({
4878
- kind: "block-design",
4879
- id: "testimonials-accent-panel",
4880
- target: "testimonials",
4881
- label: "Accent testimonial panel",
4882
- blockKinds: ["block.testimonials"],
4883
- design: {
4884
- sectionSurface: "accent-band",
4885
- contentFrame: panelFrame("raised"),
4886
- itemSurface: "raised"
4887
- }
4888
- }),
4889
- defineBlockAppearancePreset({
4890
- kind: "block-design",
4891
- id: "testimonials-default-cards",
4892
- target: "testimonials",
4893
- label: "Default cards",
4894
- blockKinds: ["block.testimonials"],
4895
- design: {
4896
- sectionSurface: "base",
4897
- contentFrame: plainFrame,
4898
- itemSurface: "none",
4899
- testimonialCardTreatment: "default"
4900
- }
4901
- }),
4902
- defineBlockAppearancePreset({
4903
- kind: "block-design",
4904
- id: "testimonials-statement-cards",
4905
- target: "testimonials",
4906
- label: "Statement cards",
4907
- blockKinds: ["block.testimonials"],
4908
- design: {
4909
- sectionSurface: "accent-band",
4910
- contentFrame: plainFrame,
4911
- itemSurface: "raised",
4912
- testimonialCardTreatment: "statement"
4913
- }
4914
- }),
4915
- defineBlockAppearancePreset({
4916
- kind: "block-design",
4917
- id: "testimonials-brand-statement-cards",
4918
- target: "testimonials",
4919
- label: "Brand statement cards",
4920
- blockKinds: ["block.testimonials"],
4921
- design: {
4922
- sectionSurface: "brand-depth-band",
4923
- contentFrame: plainFrame,
4924
- itemSurface: "raised",
4925
- testimonialCardTreatment: "statement"
4926
- }
4927
- }),
4928
- defineBlockAppearancePreset({
4929
- kind: "block-design",
4930
- id: "testimonials-non-carded",
4931
- target: "testimonials",
4932
- label: "Non-carded",
4933
- blockKinds: ["block.testimonials"],
4934
- design: {
4935
- sectionSurface: "muted-band",
4936
- contentFrame: plainFrame,
4937
- itemSurface: "none",
4938
- testimonialCardTreatment: "non-carded"
4939
- }
4940
- }),
4941
- defineBlockAppearancePreset({
4942
- kind: "block-design",
4943
- id: "testimonials-evergreen-lead",
4944
- target: "testimonials",
4945
- label: "Evergreen lead",
4946
- blockKinds: ["block.testimonials"],
4947
- constraints: { layoutVariantKeys: ["featured-editorial"] },
4948
- design: {
4949
- sectionSurface: "base",
4950
- contentFrame: plainFrame,
4951
- itemSurface: "none"
4952
- }
4953
- }),
4954
- defineBlockAppearancePreset({
4955
- kind: "block-design",
4956
- id: "testimonials-room-and-response",
4957
- target: "testimonials",
4958
- label: "Room and response",
4959
- blockKinds: ["block.testimonials"],
4960
- constraints: { layoutVariantKeys: ["featured-editorial"] },
4961
- design: {
4962
- sectionSurface: "base",
4963
- contentFrame: plainFrame,
4964
- itemSurface: "none"
4394
+ }],
4395
+ design: {
4396
+ sectionSurface: "hero-image",
4397
+ contentFrame: plainFrame,
4398
+ itemSurface: "none",
4399
+ sectionHeight: "immersive",
4400
+ heroComposition: "center",
4401
+ heroTypographyScale: "poster",
4402
+ imageSurfaceTreatment: {
4403
+ kind: "brand-scrim",
4404
+ token: "primary",
4405
+ intensity: "strong"
4965
4406
  }
4966
- }),
4967
- defineBlockAppearancePreset({
4968
- kind: "block-design",
4969
- id: "testimonials-open-floor",
4970
- target: "testimonials",
4971
- label: "Open floor",
4972
- blockKinds: ["block.testimonials"],
4973
- constraints: { layoutVariantKeys: ["featured-editorial"] },
4974
- design: {
4975
- sectionSurface: "base",
4976
- contentFrame: plainFrame,
4977
- itemSurface: "none"
4407
+ }
4408
+ }), defineBlockAppearancePreset({
4409
+ id: "hero-brand-scrim",
4410
+ target: "hero",
4411
+ label: "Brand scrim image hero",
4412
+ blockKinds: ["block.hero"],
4413
+ constraints: { layoutFamilies: ["centered", "compact"] },
4414
+ optionGroups: brandScrimOptionGroups,
4415
+ layoutPatches: microBannerLayoutPatches,
4416
+ design: {
4417
+ sectionSurface: "hero-image",
4418
+ contentFrame: plainFrame,
4419
+ itemSurface: "none",
4420
+ sectionHeight: "immersive",
4421
+ heroComposition: "center",
4422
+ heroTypographyScale: "display",
4423
+ imageSurfaceTreatment: {
4424
+ kind: "brand-scrim",
4425
+ token: "primary"
4978
4426
  }
4979
- }),
4980
- defineBlockAppearancePreset({
4981
- kind: "block-design",
4982
- id: "faq-base-accordion",
4983
- target: "faq",
4984
- label: "Base accordion FAQ",
4985
- blockKinds: ["block.faq"],
4986
- design: {
4987
- sectionSurface: "base",
4988
- contentFrame: plainFrame,
4989
- itemSurface: "default"
4427
+ }
4428
+ }), defineBlockAppearancePreset({
4429
+ id: "hero-brand-scrim-fixed-frame",
4430
+ target: "hero",
4431
+ label: "Fixed-frame brand scrim hero",
4432
+ blockKinds: ["block.hero"],
4433
+ constraints: { layoutFamilies: ["centered", "compact"] },
4434
+ optionGroups: brandScrimOptionGroups,
4435
+ layoutPatches: microBannerLayoutPatches,
4436
+ design: {
4437
+ sectionSurface: "hero-image",
4438
+ contentFrame: plainFrame,
4439
+ itemSurface: "none",
4440
+ sectionHeight: "immersive",
4441
+ heroComposition: "center",
4442
+ heroTypographyScale: "display",
4443
+ imageSurfaceTreatment: {
4444
+ kind: "brand-scrim",
4445
+ token: "primary"
4446
+ },
4447
+ imageSurfaceMotion: "fixed-frame",
4448
+ eyebrowTreatment: "accent-pill-bounce"
4449
+ }
4450
+ }), defineBlockAppearancePreset({
4451
+ id: "hero-brand-depth-expressive",
4452
+ target: "hero",
4453
+ label: "Expressive brand-depth hero",
4454
+ blockKinds: ["block.hero"],
4455
+ constraints: { layoutFamilies: ["centered", "compact"] },
4456
+ design: {
4457
+ sectionSurface: "brand-depth-band",
4458
+ contentFrame: plainFrame,
4459
+ itemSurface: "none",
4460
+ heroComposition: "center",
4461
+ heroTypographyScale: "editorial",
4462
+ eyebrowTreatment: "accent-pill-bounce"
4463
+ }
4464
+ }), defineBlockAppearancePreset({
4465
+ id: "hero-contained-intro",
4466
+ target: "hero",
4467
+ label: "Contained intro hero",
4468
+ blockKinds: ["block.hero"],
4469
+ design: {
4470
+ sectionSurface: "muted-band",
4471
+ contentFrame: panelFrame("inset"),
4472
+ itemSurface: "none",
4473
+ heroComposition: "center",
4474
+ heroTypographyScale: "editorial"
4475
+ }
4476
+ }), defineBlockAppearancePreset({
4477
+ id: "hero-split-editorial",
4478
+ target: "hero",
4479
+ label: "Editorial split hero",
4480
+ blockKinds: ["block.hero"],
4481
+ constraints: { layoutFamilies: ["split"] },
4482
+ design: {
4483
+ sectionSurface: "base",
4484
+ contentFrame: plainFrame,
4485
+ itemSurface: "none",
4486
+ heroTypographyScale: "editorial"
4487
+ }
4488
+ }), defineBlockAppearancePreset({
4489
+ id: "hero-split-brand",
4490
+ target: "hero",
4491
+ label: "Brand split hero",
4492
+ blockKinds: ["block.hero"],
4493
+ constraints: { layoutFamilies: ["split"] },
4494
+ design: {
4495
+ sectionSurface: "brand-depth-band",
4496
+ contentFrame: plainFrame,
4497
+ itemSurface: "none",
4498
+ heroTypographyScale: "display",
4499
+ eyebrowTreatment: "accent-pill-bounce"
4500
+ }
4501
+ }), defineBlockAppearancePreset({
4502
+ id: "hero-split-soft-panel",
4503
+ target: "hero",
4504
+ label: "Soft panel split hero",
4505
+ blockKinds: ["block.hero"],
4506
+ constraints: { layoutFamilies: ["split"] },
4507
+ design: {
4508
+ sectionSurface: "muted-band",
4509
+ contentFrame: panelFrame("raised"),
4510
+ itemSurface: "none",
4511
+ heroTypographyScale: "editorial"
4512
+ }
4513
+ }), defineBlockAppearancePreset({
4514
+ id: "hero-split-accent",
4515
+ target: "hero",
4516
+ label: "Accent split hero",
4517
+ blockKinds: ["block.hero"],
4518
+ constraints: { layoutFamilies: ["split"] },
4519
+ design: {
4520
+ sectionSurface: "accent-band",
4521
+ contentFrame: panelFrame("raised"),
4522
+ itemSurface: "none",
4523
+ heroTypographyScale: "display"
4524
+ }
4525
+ }), defineBlockAppearancePreset({
4526
+ id: "intro-editorial-statement",
4527
+ target: "intro",
4528
+ label: "Editorial intro statement",
4529
+ blockKinds: ["block.intro"],
4530
+ constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
4531
+ design: {
4532
+ sectionSurface: "base",
4533
+ contentFrame: plainFrame,
4534
+ itemSurface: "none",
4535
+ composition: {
4536
+ kind: "intro",
4537
+ treatment: "editorial-statement"
4990
4538
  }
4991
- }),
4992
- defineBlockAppearancePreset({
4993
- kind: "block-design",
4994
- id: "faq-contained-help",
4995
- target: "faq",
4996
- label: "Contained help panel",
4997
- blockKinds: ["block.faq"],
4998
- design: {
4999
- sectionSurface: "muted-band",
5000
- contentFrame: panelFrame("inset"),
5001
- itemSurface: "default"
4539
+ }
4540
+ }), defineBlockAppearancePreset({
4541
+ id: "intro-portrait-bio",
4542
+ target: "intro",
4543
+ label: "Portrait and bio",
4544
+ blockKinds: ["block.intro"],
4545
+ constraints: { layoutVariantKeys: ["media-copy"] },
4546
+ design: {
4547
+ sectionSurface: "base",
4548
+ contentFrame: plainFrame,
4549
+ itemSurface: "none",
4550
+ composition: {
4551
+ kind: "intro",
4552
+ treatment: "portrait-bio"
5002
4553
  }
5003
- }),
5004
- defineBlockAppearancePreset({
5005
- kind: "block-design",
5006
- id: "contact-form-panel",
5007
- target: "contact-form",
5008
- label: "Raised form panel",
5009
- blockKinds: ["block.form"],
5010
- design: {
5011
- sectionSurface: "muted-band",
5012
- contentFrame: panelFrame("raised"),
5013
- itemSurface: "none"
4554
+ }
4555
+ }), defineBlockAppearancePreset({
4556
+ id: "offerings-preview-default-cards",
4557
+ target: "offerings",
4558
+ label: "Default offering cards",
4559
+ blockKinds: ["block.offerings-preview"],
4560
+ design: {
4561
+ sectionSurface: "base",
4562
+ contentFrame: plainFrame,
4563
+ itemSurface: "default"
4564
+ }
4565
+ }), defineBlockAppearancePreset({
4566
+ id: "offerings-preview-secondary-cards",
4567
+ target: "offerings",
4568
+ label: "Secondary offering cards",
4569
+ blockKinds: ["block.offerings-preview"],
4570
+ design: {
4571
+ sectionSurface: "muted-band",
4572
+ contentFrame: plainFrame,
4573
+ itemSurface: "inset"
4574
+ }
4575
+ }), defineBlockAppearancePreset({
4576
+ id: "offerings-preview-non-carded",
4577
+ target: "offerings",
4578
+ label: "Non-carded offerings",
4579
+ blockKinds: ["block.offerings-preview"],
4580
+ design: {
4581
+ sectionSurface: "muted-band",
4582
+ contentFrame: plainFrame,
4583
+ itemSurface: "editorial"
4584
+ }
4585
+ }), defineBlockAppearancePreset({
4586
+ id: "offerings-preview-paired-feature-cards",
4587
+ target: "offerings",
4588
+ label: "Paired feature cards",
4589
+ blockKinds: ["block.offerings-preview"],
4590
+ constraints: { layoutVariantKeys: ["cards"] },
4591
+ design: {
4592
+ sectionSurface: "base",
4593
+ contentFrame: plainFrame,
4594
+ itemSurface: "none"
4595
+ }
4596
+ }), defineBlockAppearancePreset({
4597
+ id: "offerings-preview-open-editorial-columns",
4598
+ target: "offerings",
4599
+ label: "Open editorial columns",
4600
+ blockKinds: ["block.offerings-preview"],
4601
+ constraints: { layoutVariantKeys: ["cards"] },
4602
+ design: {
4603
+ sectionSurface: "base",
4604
+ contentFrame: plainFrame,
4605
+ itemSurface: "none"
4606
+ }
4607
+ }), defineBlockAppearancePreset({
4608
+ id: "offerings-preview-joined-programme-panel",
4609
+ target: "offerings",
4610
+ label: "Joined programme panel",
4611
+ blockKinds: ["block.offerings-preview"],
4612
+ constraints: { layoutVariantKeys: ["cards"] },
4613
+ design: {
4614
+ sectionSurface: "base",
4615
+ contentFrame: plainFrame,
4616
+ itemSurface: "none"
4617
+ }
4618
+ }), defineBlockAppearancePreset({
4619
+ id: "feature-cards-raised-rule",
4620
+ target: "feature-cards",
4621
+ label: "Raised cards with rule",
4622
+ blockKinds: ["block.feature-cards"],
4623
+ design: {
4624
+ sectionSurface: "base",
4625
+ contentFrame: plainFrame,
4626
+ itemSurface: "raised"
4627
+ }
4628
+ }), defineBlockAppearancePreset({
4629
+ id: "feature-cards-bold-colors",
4630
+ target: "feature-cards",
4631
+ label: "Bold colour-blocked cards",
4632
+ blockKinds: ["block.feature-cards"],
4633
+ design: {
4634
+ sectionSurface: "base",
4635
+ contentFrame: plainFrame,
4636
+ itemSurface: "color-blocked"
4637
+ }
4638
+ }), defineBlockAppearancePreset({
4639
+ id: "feature-cards-editorial-columns",
4640
+ target: "feature-cards",
4641
+ label: "Editorial open columns",
4642
+ blockKinds: ["block.feature-cards"],
4643
+ design: {
4644
+ sectionSurface: "base",
4645
+ contentFrame: plainFrame,
4646
+ itemSurface: "editorial"
4647
+ }
4648
+ }), defineBlockAppearancePreset({
4649
+ id: "feature-cards-asymmetric-emphasis",
4650
+ target: "feature-cards",
4651
+ label: "Asymmetric emphasis pair",
4652
+ blockKinds: ["block.feature-cards"],
4653
+ constraints: { layoutFamilies: ["grid"] },
4654
+ design: {
4655
+ sectionSurface: "base",
4656
+ contentFrame: plainFrame,
4657
+ itemSurface: "none",
4658
+ composition: {
4659
+ kind: "feature-cards",
4660
+ treatment: "asymmetric-emphasis"
5014
4661
  }
5015
- }),
5016
- defineBlockAppearancePreset({
5017
- kind: "block-design",
5018
- id: "cta-accent-band",
5019
- target: "cta",
5020
- label: "Accent CTA band",
5021
- blockKinds: ["block.cta-full"],
5022
- design: {
5023
- sectionSurface: "accent-band",
5024
- contentFrame: plainFrame,
5025
- itemSurface: "none",
5026
- eyebrowTreatment: "accent"
4662
+ }
4663
+ }), defineBlockAppearancePreset({
4664
+ id: "feature-cards-framed-programme",
4665
+ target: "feature-cards",
4666
+ label: "Framed programme cards",
4667
+ blockKinds: ["block.feature-cards"],
4668
+ constraints: { layoutFamilies: ["grid"] },
4669
+ design: {
4670
+ sectionSurface: "brand-depth-band",
4671
+ contentFrame: plainFrame,
4672
+ itemSurface: "inset",
4673
+ composition: {
4674
+ kind: "feature-cards",
4675
+ treatment: "framed-programme"
5027
4676
  }
5028
- })
5029
- ];
4677
+ }
4678
+ }), defineBlockAppearancePreset({
4679
+ id: "feature-cards-soft-panels",
4680
+ target: "feature-cards",
4681
+ label: "Soft tinted panels",
4682
+ blockKinds: ["block.feature-cards"],
4683
+ design: {
4684
+ sectionSurface: "base",
4685
+ contentFrame: plainFrame,
4686
+ itemSurface: "inset"
4687
+ }
4688
+ }), defineBlockAppearancePreset({
4689
+ id: "feature-cards-editorial-diptych",
4690
+ target: "feature-cards",
4691
+ label: "Editorial diptych",
4692
+ blockKinds: ["block.feature-cards"],
4693
+ constraints: { layoutVariantKeys: ["editorial-diptych"] },
4694
+ design: {
4695
+ sectionSurface: "base",
4696
+ contentFrame: plainFrame,
4697
+ itemSurface: "flat"
4698
+ }
4699
+ }), defineBlockAppearancePreset({
4700
+ id: "feature-cards-editorial-pathways",
4701
+ target: "feature-cards",
4702
+ label: "Editorial pathways",
4703
+ blockKinds: ["block.feature-cards"],
4704
+ constraints: { layoutVariantKeys: ["editorial-pathways"] },
4705
+ design: {
4706
+ sectionSurface: "base",
4707
+ contentFrame: plainFrame,
4708
+ itemSurface: "flat"
4709
+ }
4710
+ }), defineBlockAppearancePreset({
4711
+ id: "feature-cards-photo-tiles",
4712
+ target: "feature-cards",
4713
+ label: "Photo tiles",
4714
+ blockKinds: ["block.feature-cards"],
4715
+ design: {
4716
+ sectionSurface: "base",
4717
+ contentFrame: plainFrame,
4718
+ itemSurface: "raised"
4719
+ }
4720
+ }), defineBlockAppearancePreset({
4721
+ id: "events-lined-panel",
4722
+ target: "events",
4723
+ label: "Raised event panel",
4724
+ blockKinds: ["block.event-calendar", "block.event-listing"],
4725
+ design: {
4726
+ sectionSurface: "base",
4727
+ contentFrame: panelFrame("raised"),
4728
+ itemSurface: "none"
4729
+ }
4730
+ }), defineBlockAppearancePreset({
4731
+ id: "events-ruled-register",
4732
+ target: "events",
4733
+ label: "Ruled event register",
4734
+ blockKinds: ["block.event-calendar", "block.event-listing"],
4735
+ design: {
4736
+ sectionSurface: "brand-depth-band",
4737
+ contentFrame: plainFrame,
4738
+ itemSurface: "none",
4739
+ eventListTreatment: "ruled-register"
4740
+ }
4741
+ }), defineBlockAppearancePreset({
4742
+ id: "events-editorial-register",
4743
+ target: "events",
4744
+ label: "Editorial event register",
4745
+ blockKinds: ["block.event-calendar", "block.event-listing"],
4746
+ design: {
4747
+ sectionSurface: "base",
4748
+ contentFrame: plainFrame,
4749
+ itemSurface: "none",
4750
+ eventListTreatment: "editorial-register"
4751
+ }
4752
+ }), defineBlockAppearancePreset({
4753
+ id: "events-dense-index",
4754
+ target: "events",
4755
+ label: "Dense event index",
4756
+ blockKinds: ["block.event-calendar", "block.event-listing"],
4757
+ design: {
4758
+ sectionSurface: "accent-band",
4759
+ contentFrame: plainFrame,
4760
+ itemSurface: "none",
4761
+ eventListTreatment: "dense-index"
4762
+ }
4763
+ }), defineBlockAppearancePreset({
4764
+ id: "schedule-details-brand-depth",
4765
+ target: "events",
4766
+ label: "Brand-depth schedule details",
4767
+ blockKinds: ["block.event-details", "block.course-details"],
4768
+ design: {
4769
+ sectionSurface: "brand-depth-band",
4770
+ contentFrame: plainFrame,
4771
+ itemSurface: "none",
4772
+ tileTreatment: "brand-depth"
4773
+ }
4774
+ }), defineBlockAppearancePreset({
4775
+ id: "media-text-flush-feature",
4776
+ target: "media-text",
4777
+ label: "Flush media feature",
4778
+ blockKinds: ["block.media-text"],
4779
+ design: {
4780
+ sectionSurface: "muted-band",
4781
+ contentFrame: flushPanelFrame({ bleed: "start" }),
4782
+ itemSurface: "none"
4783
+ }
4784
+ }), defineBlockAppearancePreset({
4785
+ id: "testimonials-simple-cards",
4786
+ target: "testimonials",
4787
+ label: "Simple testimonial cards",
4788
+ blockKinds: ["block.testimonials"],
4789
+ design: {
4790
+ sectionSurface: "base",
4791
+ contentFrame: plainFrame,
4792
+ itemSurface: "default"
4793
+ }
4794
+ }), defineBlockAppearancePreset({
4795
+ id: "testimonials-raised-panel",
4796
+ target: "testimonials",
4797
+ label: "Raised testimonial panel",
4798
+ blockKinds: ["block.testimonials"],
4799
+ design: {
4800
+ sectionSurface: "muted-band",
4801
+ contentFrame: panelFrame("raised"),
4802
+ itemSurface: "raised"
4803
+ }
4804
+ }), defineBlockAppearancePreset({
4805
+ id: "testimonials-accent-panel",
4806
+ target: "testimonials",
4807
+ label: "Accent testimonial panel",
4808
+ blockKinds: ["block.testimonials"],
4809
+ design: {
4810
+ sectionSurface: "accent-band",
4811
+ contentFrame: panelFrame("raised"),
4812
+ itemSurface: "raised"
4813
+ }
4814
+ }), defineBlockAppearancePreset({
4815
+ id: "testimonials-default-cards",
4816
+ target: "testimonials",
4817
+ label: "Default cards",
4818
+ blockKinds: ["block.testimonials"],
4819
+ design: {
4820
+ sectionSurface: "base",
4821
+ contentFrame: plainFrame,
4822
+ itemSurface: "none",
4823
+ testimonialCardTreatment: "default"
4824
+ }
4825
+ }), defineBlockAppearancePreset({
4826
+ id: "testimonials-statement-cards",
4827
+ target: "testimonials",
4828
+ label: "Statement cards",
4829
+ blockKinds: ["block.testimonials"],
4830
+ design: {
4831
+ sectionSurface: "accent-band",
4832
+ contentFrame: plainFrame,
4833
+ itemSurface: "raised",
4834
+ testimonialCardTreatment: "statement"
4835
+ }
4836
+ }), defineBlockAppearancePreset({
4837
+ id: "testimonials-brand-statement-cards",
4838
+ target: "testimonials",
4839
+ label: "Brand statement cards",
4840
+ blockKinds: ["block.testimonials"],
4841
+ design: {
4842
+ sectionSurface: "brand-depth-band",
4843
+ contentFrame: plainFrame,
4844
+ itemSurface: "raised",
4845
+ testimonialCardTreatment: "statement"
4846
+ }
4847
+ }), defineBlockAppearancePreset({
4848
+ id: "testimonials-non-carded",
4849
+ target: "testimonials",
4850
+ label: "Non-carded",
4851
+ blockKinds: ["block.testimonials"],
4852
+ design: {
4853
+ sectionSurface: "muted-band",
4854
+ contentFrame: plainFrame,
4855
+ itemSurface: "none",
4856
+ testimonialCardTreatment: "non-carded"
4857
+ }
4858
+ }), defineBlockAppearancePreset({
4859
+ id: "testimonials-evergreen-lead",
4860
+ target: "testimonials",
4861
+ label: "Evergreen lead",
4862
+ blockKinds: ["block.testimonials"],
4863
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
4864
+ design: {
4865
+ sectionSurface: "base",
4866
+ contentFrame: plainFrame,
4867
+ itemSurface: "none"
4868
+ }
4869
+ }), defineBlockAppearancePreset({
4870
+ id: "testimonials-room-and-response",
4871
+ target: "testimonials",
4872
+ label: "Room and response",
4873
+ blockKinds: ["block.testimonials"],
4874
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
4875
+ design: {
4876
+ sectionSurface: "base",
4877
+ contentFrame: plainFrame,
4878
+ itemSurface: "none"
4879
+ }
4880
+ }), defineBlockAppearancePreset({
4881
+ id: "testimonials-open-floor",
4882
+ target: "testimonials",
4883
+ label: "Open floor",
4884
+ blockKinds: ["block.testimonials"],
4885
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
4886
+ design: {
4887
+ sectionSurface: "base",
4888
+ contentFrame: plainFrame,
4889
+ itemSurface: "none"
4890
+ }
4891
+ }), defineBlockAppearancePreset({
4892
+ id: "faq-base-accordion",
4893
+ target: "faq",
4894
+ label: "Base accordion FAQ",
4895
+ blockKinds: ["block.faq"],
4896
+ design: {
4897
+ sectionSurface: "base",
4898
+ contentFrame: plainFrame,
4899
+ itemSurface: "default"
4900
+ }
4901
+ }), defineBlockAppearancePreset({
4902
+ id: "faq-contained-help",
4903
+ target: "faq",
4904
+ label: "Contained help panel",
4905
+ blockKinds: ["block.faq"],
4906
+ design: {
4907
+ sectionSurface: "muted-band",
4908
+ contentFrame: panelFrame("inset"),
4909
+ itemSurface: "default"
4910
+ }
4911
+ }), defineBlockAppearancePreset({
4912
+ id: "contact-form-panel",
4913
+ target: "contact-form",
4914
+ label: "Raised form panel",
4915
+ blockKinds: ["block.form"],
4916
+ design: {
4917
+ sectionSurface: "muted-band",
4918
+ contentFrame: panelFrame("raised"),
4919
+ itemSurface: "none"
4920
+ }
4921
+ }), defineBlockAppearancePreset({
4922
+ id: "cta-accent-band",
4923
+ target: "cta",
4924
+ label: "Accent CTA band",
4925
+ blockKinds: ["block.cta-full"],
4926
+ design: {
4927
+ sectionSurface: "accent-band",
4928
+ contentFrame: plainFrame,
4929
+ itemSurface: "none",
4930
+ eyebrowTreatment: "accent"
4931
+ }
4932
+ });
5030
4933
  }));
5031
4934
  var init_appearancePresetCatalog = __esmMin((() => {
5032
4935
  init_blockAppearancePresets();
5033
- [...blockAppearancePresets];
5034
4936
  }));
5035
4937
  var init_appearancePresetTypes = __esmMin((() => {}));
5036
4938
  //#endregion
@@ -6710,6 +6612,12 @@ function requirePaletteColorsFromEntries(entries) {
6710
6612
  if (result.ok) return result.colors;
6711
6613
  throw new Error(`Invalid complete palette: ${result.error.kind}`);
6712
6614
  }
6615
+ function paletteColorEntries(colors) {
6616
+ return THEME_PALETTE_COLOR_ORDER.map((name) => ({
6617
+ name,
6618
+ hex: colors[name]
6619
+ }));
6620
+ }
6713
6621
  function paletteColorFingerprint(colors) {
6714
6622
  return PALETTE_TOKEN_NAMES.map((name) => `${name}:${colors[name]}`).join("|");
6715
6623
  }
@@ -6717,7 +6625,7 @@ function canonicalPaletteHashInput(colors, mode) {
6717
6625
  return `${mode}|${paletteColorFingerprint(colors)}`;
6718
6626
  }
6719
6627
  /**
6720
- * The shared TypeScript/SQL protocol. Do not reorder roles: the order comes
6628
+ * Stable curated-catalogue identity. Do not reorder roles: the order comes
6721
6629
  * from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
6722
6630
  */
6723
6631
  function paletteValueKey(colors, mode) {
@@ -6742,11 +6650,26 @@ function parsePaletteValueKey(value) {
6742
6650
  if (!colors.ok || paletteValueKey(colors.colors, mode.data) !== value) return null;
6743
6651
  return value;
6744
6652
  }
6745
- var HEX_COLOR_REGEX, NORMALIZABLE_HEX_REGEX, hexColorSchema, paletteModeSchema, PALETTE_VALUE_KEY_PREFIX, paletteColorsSchema, paletteValueKeySchema;
6653
+ var HEX_COLOR_REGEX, NORMALIZABLE_HEX_REGEX, THEME_PALETTE_COLOR_ORDER, hexColorSchema, paletteModeSchema, PALETTE_VALUE_KEY_PREFIX, paletteColorsSchema, paletteValueKeySchema;
6746
6654
  var init_colors = __esmMin((() => {
6747
6655
  init_themeColorTokens();
6748
6656
  HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
6749
6657
  NORMALIZABLE_HEX_REGEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
6658
+ THEME_PALETTE_COLOR_ORDER = [
6659
+ "primary",
6660
+ "secondary",
6661
+ "accent",
6662
+ "success",
6663
+ "warning",
6664
+ "destructive",
6665
+ "background",
6666
+ "surface",
6667
+ "surfaceAlt",
6668
+ "muted",
6669
+ "text",
6670
+ "primaryForeground",
6671
+ "border"
6672
+ ];
6750
6673
  hexColorSchema = z$1.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
6751
6674
  paletteModeSchema = z$1.enum(["light", "dark"]);
6752
6675
  PALETTE_VALUE_KEY_PREFIX = "palette-value:v1|";
@@ -6776,8 +6699,12 @@ var init_colors = __esmMin((() => {
6776
6699
  return z$1.NEVER;
6777
6700
  });
6778
6701
  }));
6779
- var init_editorState = __esmMin((() => {}));
6780
- var init_libraryModel = __esmMin((() => {}));
6702
+ var init_concretePalette = __esmMin((() => {
6703
+ init_colors();
6704
+ }));
6705
+ var init_fromVibrant = __esmMin((() => {
6706
+ init_utils$6();
6707
+ }));
6781
6708
  //#endregion
6782
6709
  //#region ../theme-core/src/site-styles/styleTags.ts
6783
6710
  var STYLE_AXIS_VALUES, styleTagsSchema;
@@ -8067,22 +7994,12 @@ var init_warm_dark = __esmMin((() => {
8067
7994
  }));
8068
7995
  //#endregion
8069
7996
  //#region ../theme-core/src/palette/curated/index.ts
8070
- /**
8071
- * Curated palette library.
8072
- *
8073
- * Authoring keys are readable source aliases. Value keys are derived from the
8074
- * complete mode and semantic colours and are the only curated identity used at
8075
- * persistence and runtime boundaries.
8076
- */
8077
7997
  function admitCuratedPaletteDefinition(definition) {
8078
7998
  return {
8079
7999
  ...definition,
8080
8000
  valueKey: definition.valueKey
8081
8001
  };
8082
8002
  }
8083
- function findCuratedPalette(valueKey) {
8084
- return curatedPalettesByValueKey.get(valueKey);
8085
- }
8086
8003
  function findCuratedPaletteByAuthoringKey(authoringKey) {
8087
8004
  return curatedPalettesByAuthoringKey.get(authoringKey);
8088
8005
  }
@@ -8091,9 +8008,8 @@ function requireCuratedPaletteValueKey(authoringKey) {
8091
8008
  if (!palette) throw new Error(`Unknown curated palette authoring key "${authoringKey}"`);
8092
8009
  return palette.valueKey;
8093
8010
  }
8094
- var curatedPalettes, curatedPalettesByValueKey, curatedPalettesByAuthoringKey, knownCuratedPaletteValueKeySchema;
8011
+ var curatedPalettes, curatedPalettesByAuthoringKey;
8095
8012
  var init_curated = __esmMin((() => {
8096
- init_colors();
8097
8013
  init_brand_led();
8098
8014
  init_high_contrast();
8099
8015
  init_soft_natural();
@@ -8120,107 +8036,8 @@ var init_curated = __esmMin((() => {
8120
8036
  admitCuratedPaletteDefinition(warmDarkEmber),
8121
8037
  admitCuratedPaletteDefinition(warmDarkKirtanGold)
8122
8038
  ];
8123
- curatedPalettesByValueKey = new Map(curatedPalettes.map((palette) => [palette.valueKey, palette]));
8039
+ new Map(curatedPalettes.map((palette) => [palette.valueKey, palette]));
8124
8040
  curatedPalettesByAuthoringKey = new Map(curatedPalettes.map((palette) => [palette.authoringKey, palette]));
8125
- knownCuratedPaletteValueKeySchema = z$1.string().transform((value, ctx) => {
8126
- const valueKey = parsePaletteValueKey(value);
8127
- if (!valueKey) {
8128
- ctx.addIssue({
8129
- code: "custom",
8130
- message: "Invalid canonical palette value key"
8131
- });
8132
- return z$1.NEVER;
8133
- }
8134
- const palette = findCuratedPalette(valueKey);
8135
- if (!palette) {
8136
- ctx.addIssue({
8137
- code: "custom",
8138
- message: "Unknown curated palette value key"
8139
- });
8140
- return z$1.NEVER;
8141
- }
8142
- return palette.valueKey;
8143
- });
8144
- }));
8145
- var init_resolveSelection = __esmMin((() => {
8146
- init_curated();
8147
- })), sitePaletteIdSchema, sitePaletteVersionSchema, paletteSelectionSchema, onboardingPaletteOriginSchema, curatedForkPaletteOriginSchema, manualPaletteOriginSchema, legacyCustomizedPaletteOriginSchema, sitePaletteOriginSchema, editorSitePaletteOriginSchema;
8148
- var init_selection$1 = __esmMin((() => {
8149
- init_colors();
8150
- init_curated();
8151
- sitePaletteIdSchema = z$1.string().uuid().transform((value) => value);
8152
- sitePaletteVersionSchema = z$1.number().int().nonnegative().transform((value) => value);
8153
- paletteSelectionSchema = z$1.discriminatedUnion("kind", [z$1.object({
8154
- kind: z$1.literal("curated"),
8155
- valueKey: knownCuratedPaletteValueKeySchema
8156
- }), z$1.object({
8157
- kind: z$1.literal("site"),
8158
- paletteId: sitePaletteIdSchema
8159
- })]);
8160
- onboardingPaletteOriginSchema = z$1.object({
8161
- kind: z$1.literal("onboarding"),
8162
- sourceKey: z$1.string().min(1).nullable()
8163
- });
8164
- curatedForkPaletteOriginSchema = z$1.object({
8165
- kind: z$1.literal("curated-fork"),
8166
- sourceValueKey: paletteValueKeySchema
8167
- });
8168
- manualPaletteOriginSchema = z$1.object({ kind: z$1.literal("manual") });
8169
- legacyCustomizedPaletteOriginSchema = z$1.object({
8170
- kind: z$1.literal("legacy-customized"),
8171
- sourceKey: z$1.string().min(1).nullable()
8172
- });
8173
- sitePaletteOriginSchema = z$1.discriminatedUnion("kind", [
8174
- onboardingPaletteOriginSchema,
8175
- curatedForkPaletteOriginSchema,
8176
- manualPaletteOriginSchema,
8177
- legacyCustomizedPaletteOriginSchema
8178
- ]);
8179
- editorSitePaletteOriginSchema = z$1.discriminatedUnion("kind", [z$1.object({
8180
- kind: z$1.literal("curated-fork"),
8181
- sourceValueKey: knownCuratedPaletteValueKeySchema
8182
- }), manualPaletteOriginSchema]);
8183
- z$1.object({
8184
- id: sitePaletteIdSchema,
8185
- colors: paletteColorsSchema,
8186
- mode: paletteModeSchema,
8187
- origin: sitePaletteOriginSchema,
8188
- version: sitePaletteVersionSchema
8189
- });
8190
- z$1.discriminatedUnion("kind", [
8191
- z$1.object({ kind: z$1.literal("preserve") }),
8192
- z$1.object({
8193
- kind: z$1.literal("select"),
8194
- selection: paletteSelectionSchema
8195
- }),
8196
- z$1.object({
8197
- kind: z$1.literal("create-site"),
8198
- colors: paletteColorsSchema,
8199
- mode: paletteModeSchema,
8200
- origin: editorSitePaletteOriginSchema
8201
- }),
8202
- z$1.object({
8203
- kind: z$1.literal("update-site"),
8204
- paletteId: sitePaletteIdSchema,
8205
- expectedVersion: sitePaletteVersionSchema,
8206
- colors: paletteColorsSchema,
8207
- mode: paletteModeSchema
8208
- })
8209
- ]);
8210
- }));
8211
- var init_persistenceReadSource = __esmMin((() => {
8212
- init_curated();
8213
- init_colors();
8214
- init_resolveSelection();
8215
- init_selection$1();
8216
- }));
8217
- var init_sitePalettePersistence = __esmMin((() => {
8218
- init_curated();
8219
- init_colors();
8220
- init_selection$1();
8221
- }));
8222
- var init_fromVibrant = __esmMin((() => {
8223
- init_utils$6();
8224
8041
  }));
8225
8042
  //#endregion
8226
8043
  //#region ../theme-core/src/palette/index.ts
@@ -8236,12 +8053,7 @@ var init_palette$1 = __esmMin((() => {
8236
8053
  init_paletteAccess();
8237
8054
  init_extractPalette();
8238
8055
  init_colors();
8239
- init_editorState();
8240
- init_libraryModel();
8241
- init_persistenceReadSource();
8242
- init_resolveSelection();
8243
- init_selection$1();
8244
- init_sitePalettePersistence();
8056
+ init_concretePalette();
8245
8057
  init_fromVibrant();
8246
8058
  init_suggestRecipes();
8247
8059
  init_allRecipes();
@@ -8474,6 +8286,47 @@ var init_backgroundAppearance = __esmMin((() => {
8474
8286
  var init_compositionBudget = __esmMin((() => {
8475
8287
  init_types$14();
8476
8288
  }));
8289
+ var init_headerStyleParts = __esmMin((() => {}));
8290
+ var headerInteractionPaletteValues, headerInteractionPaletteSchema;
8291
+ var init_interactionPalette = __esmMin((() => {
8292
+ headerInteractionPaletteValues = [
8293
+ "primary",
8294
+ "secondary",
8295
+ "accent"
8296
+ ];
8297
+ headerInteractionPaletteSchema = z$1.enum(headerInteractionPaletteValues);
8298
+ }));
8299
+ var clearSplitInteractionPalette;
8300
+ var init_headerInteractionPalette = __esmMin((() => {
8301
+ init_interactionPalette();
8302
+ init_lookOptionGroups();
8303
+ clearSplitInteractionPalette = defineLookOptionGroup({
8304
+ id: "interaction-palette",
8305
+ label: "Hover colour",
8306
+ defaultOptionId: "accent",
8307
+ options: [
8308
+ {
8309
+ id: "accent",
8310
+ label: "Accent"
8311
+ },
8312
+ {
8313
+ id: "primary",
8314
+ label: "Primary"
8315
+ },
8316
+ {
8317
+ id: "secondary",
8318
+ label: "Secondary"
8319
+ }
8320
+ ]
8321
+ });
8322
+ }));
8323
+ var init_headerOpeningForeground = __esmMin((() => {
8324
+ init_expandPalette();
8325
+ init_colorConversion();
8326
+ init_tokens();
8327
+ init_colorTokenParts();
8328
+ init_types$14();
8329
+ }));
8477
8330
  var init_customizableSurfaces = __esmMin((() => {
8478
8331
  init_types$14();
8479
8332
  })), logoTextConfidenceValues, logoAssetShapeValues, logoKindValues, logoDensityValues, logoContainsTextSchema, logoAnalysisSourceSchema, brandDisplayModeValues, logoAccommodationPatternValues, logoSizePolicyValues;
@@ -8584,7 +8437,7 @@ function asHeaderStyleId(value) {
8584
8437
  * optional nested styling fields that would otherwise leak from another Look.
8585
8438
  */
8586
8439
  function baseHeader(theme) {
8587
- 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;
8440
+ 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;
8588
8441
  return {
8589
8442
  ...header,
8590
8443
  navContainer: {
@@ -8640,7 +8493,7 @@ function applyNavTypography(style, typography) {
8640
8493
  textSize: "sm",
8641
8494
  letterSpacing: "wider"
8642
8495
  };
8643
- default: return assertNever$13(typography, "Unhandled header nav typography");
8496
+ default: return assertNever$12(typography, "Unhandled header nav typography");
8644
8497
  }
8645
8498
  }
8646
8499
  function underlineNavLinkStyle(colorToken, underlineColorToken, typography = "plain") {
@@ -8669,7 +8522,7 @@ function themedHeaderShadow(theme) {
8669
8522
  case "low": return { elevation: "sm" };
8670
8523
  case "medium": return { elevation: "md" };
8671
8524
  case "high": return { elevation: "lg" };
8672
- default: return assertNever$13(theme.shadow.elevation, "Unhandled theme shadow elevation");
8525
+ default: return assertNever$12(theme.shadow.elevation, "Unhandled theme shadow elevation");
8673
8526
  }
8674
8527
  }
8675
8528
  function solidBrandHeader(theme) {
@@ -8943,12 +8796,12 @@ function floatingGlassHeader(theme) {
8943
8796
  }
8944
8797
  };
8945
8798
  }
8946
- function headerConfigurationKey(configuration) {
8947
- return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
8948
- }
8949
8799
  var titleOnlyLogoAccommodation, inlineWordmarkLogoAccommodation, inlineMarkWithTitleLogoAccommodation, logoPlateAccommodation, centeredBadgeAccommodation, popoutBadgeAccommodation, centeredMastheadAccommodation, unbackedOverlayLogoAccommodation, inlineClassicLogoAccommodations, centeredLogoAccommodations, overlayLogoAccommodations, headerLayoutCatalog, headerStyleCatalog, headerStylesById, headerStyleCompatibilityOrder, legacyHeaderLookAliases, legacyHeaderLookAliasesById, headerLookCatalog;
8950
8800
  var init_headerLooks = __esmMin((() => {
8951
8801
  init_headerCtaVariants();
8802
+ init_headerStyleParts();
8803
+ init_headerInteractionPalette();
8804
+ init_headerOpeningForeground();
8952
8805
  init_customizableSurfaces();
8953
8806
  init_logoBranding();
8954
8807
  init_types$14();
@@ -9075,7 +8928,6 @@ var init_headerLooks = __esmMin((() => {
9075
8928
  id: asHeaderLayoutId("classic"),
9076
8929
  label: "Classic",
9077
8930
  description: "Logo and navigation in one practical horizontal row.",
9078
- structure: "inline-classic",
9079
8931
  variant: "classic",
9080
8932
  defaultPositioning: "sticky",
9081
8933
  shrinkOnScroll: false
@@ -9084,7 +8936,6 @@ var init_headerLooks = __esmMin((() => {
9084
8936
  id: asHeaderLayoutId("centered"),
9085
8937
  label: "Centered",
9086
8938
  description: "Logo centered above a balanced navigation row.",
9087
- structure: "centered-stack",
9088
8939
  variant: "centered",
9089
8940
  defaultPositioning: "static",
9090
8941
  shrinkOnScroll: false,
@@ -9100,7 +8951,6 @@ var init_headerLooks = __esmMin((() => {
9100
8951
  id: asHeaderLayoutId("floating"),
9101
8952
  label: "Floating",
9102
8953
  description: "Detached header chrome that sits over the opening section.",
9103
- structure: "floating-shell",
9104
8954
  variant: "floating",
9105
8955
  defaultPositioning: "sticky",
9106
8956
  shrinkOnScroll: true,
@@ -9259,10 +9109,13 @@ var init_headerLooks = __esmMin((() => {
9259
9109
  label: "Clear Split",
9260
9110
  description: "Floating logo with transparent navigation and no shared shell.",
9261
9111
  supportedLayoutIds: supportedLayouts(["floating"]),
9262
- navInteraction: "color-change",
9112
+ navInteraction: "pill-background",
9263
9113
  surface: "floating",
9264
- defaultDepth: "none",
9114
+ defaultDepth: "line",
9265
9115
  navTypography: "plain",
9116
+ openingForegroundTarget: "all",
9117
+ scrollTreatment: "contrast-glass",
9118
+ interactionPalette: clearSplitInteractionPalette,
9266
9119
  moods: ["editorial", "calm"]
9267
9120
  },
9268
9121
  {
@@ -9285,6 +9138,7 @@ var init_headerLooks = __esmMin((() => {
9285
9138
  surface: "floating",
9286
9139
  defaultDepth: "shadow",
9287
9140
  navTypography: "quiet-caps",
9141
+ openingForegroundTarget: "brand-only",
9288
9142
  moods: ["expressive"]
9289
9143
  },
9290
9144
  {
@@ -9296,6 +9150,7 @@ var init_headerLooks = __esmMin((() => {
9296
9150
  surface: "floating",
9297
9151
  defaultDepth: "shadow",
9298
9152
  navTypography: "heading",
9153
+ openingForegroundTarget: "brand-only",
9299
9154
  moods: ["calm", "editorial"]
9300
9155
  }
9301
9156
  ]);
@@ -9451,13 +9306,6 @@ var init_headerLooks = __esmMin((() => {
9451
9306
  {
9452
9307
  id: asHeaderLookId("clean-base"),
9453
9308
  label: "Clean base",
9454
- visualTreatment: "solid-neutral",
9455
- layoutBehavior: "sticky",
9456
- configuration: {
9457
- structure: "inline-classic",
9458
- treatment: "solid-neutral",
9459
- behavior: "sticky"
9460
- },
9461
9309
  openingRequirement: "none",
9462
9310
  logoAccommodations: inlineClassicLogoAccommodations,
9463
9311
  compile: cleanBaseHeader
@@ -9465,13 +9313,6 @@ var init_headerLooks = __esmMin((() => {
9465
9313
  {
9466
9314
  id: asHeaderLookId("classic-centered-nav"),
9467
9315
  label: "Centered nav",
9468
- visualTreatment: "solid-neutral",
9469
- layoutBehavior: "sticky",
9470
- configuration: {
9471
- structure: "inline-classic",
9472
- treatment: "solid-neutral",
9473
- behavior: "sticky"
9474
- },
9475
9316
  openingRequirement: "none",
9476
9317
  maxRecommendedNavItems: 6,
9477
9318
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -9480,13 +9321,6 @@ var init_headerLooks = __esmMin((() => {
9480
9321
  {
9481
9322
  id: asHeaderLookId("brand-solid"),
9482
9323
  label: "Brand solid",
9483
- visualTreatment: "solid-brand",
9484
- layoutBehavior: "sticky-shrink",
9485
- configuration: {
9486
- structure: "inline-classic",
9487
- treatment: "solid-brand",
9488
- behavior: "sticky-shrink"
9489
- },
9490
9324
  openingRequirement: "none",
9491
9325
  logoAccommodations: inlineClassicLogoAccommodations,
9492
9326
  compile: solidBrandHeader
@@ -9494,13 +9328,6 @@ var init_headerLooks = __esmMin((() => {
9494
9328
  {
9495
9329
  id: asHeaderLookId("serif-line"),
9496
9330
  label: "Serif line",
9497
- visualTreatment: "light-serif",
9498
- layoutBehavior: "sticky",
9499
- configuration: {
9500
- structure: "centered-stack",
9501
- treatment: "light-serif",
9502
- behavior: "sticky"
9503
- },
9504
9331
  openingRequirement: "none",
9505
9332
  maxRecommendedNavItems: 6,
9506
9333
  logoAccommodations: centeredLogoAccommodations,
@@ -9509,13 +9336,6 @@ var init_headerLooks = __esmMin((() => {
9509
9336
  {
9510
9337
  id: asHeaderLookId("centered-calm"),
9511
9338
  label: "Centered calm",
9512
- visualTreatment: "light-serif",
9513
- layoutBehavior: "normal-flow",
9514
- configuration: {
9515
- structure: "centered-stack",
9516
- treatment: "light-serif",
9517
- behavior: "normal-flow"
9518
- },
9519
9339
  openingRequirement: "none",
9520
9340
  maxRecommendedNavItems: 5,
9521
9341
  logoAccommodations: centeredLogoAccommodations,
@@ -9524,13 +9344,6 @@ var init_headerLooks = __esmMin((() => {
9524
9344
  {
9525
9345
  id: asHeaderLookId("practical-utility"),
9526
9346
  label: "Practical utility",
9527
- visualTreatment: "solid-neutral",
9528
- layoutBehavior: "sticky-shrink",
9529
- configuration: {
9530
- structure: "inline-classic",
9531
- treatment: "solid-neutral",
9532
- behavior: "sticky-shrink"
9533
- },
9534
9347
  openingRequirement: "none",
9535
9348
  requiresProminentCta: true,
9536
9349
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -9539,13 +9352,6 @@ var init_headerLooks = __esmMin((() => {
9539
9352
  {
9540
9353
  id: asHeaderLookId("minimal-transparent"),
9541
9354
  label: "Minimal transparent",
9542
- visualTreatment: "minimal-transparent",
9543
- layoutBehavior: "normal-flow",
9544
- configuration: {
9545
- structure: "inline-classic",
9546
- treatment: "minimal-transparent",
9547
- behavior: "normal-flow"
9548
- },
9549
9355
  openingRequirement: "reserved-space-ok",
9550
9356
  logoAccommodations: inlineClassicLogoAccommodations,
9551
9357
  compile: minimalTransparentHeader
@@ -9553,13 +9359,6 @@ var init_headerLooks = __esmMin((() => {
9553
9359
  {
9554
9360
  id: asHeaderLookId("transparent-overlay"),
9555
9361
  label: "Transparent overlay",
9556
- visualTreatment: "transparent-overlay",
9557
- layoutBehavior: "fixed-overlay",
9558
- configuration: {
9559
- structure: "inline-classic",
9560
- treatment: "transparent-overlay",
9561
- behavior: "fixed-overlay"
9562
- },
9563
9362
  openingRequirement: "requires-image-hero-with-contrast-overlay",
9564
9363
  maxRecommendedNavItems: 5,
9565
9364
  logoAccommodations: overlayLogoAccommodations,
@@ -9568,20 +9367,12 @@ var init_headerLooks = __esmMin((() => {
9568
9367
  {
9569
9368
  id: asHeaderLookId("floating-glass"),
9570
9369
  label: "Floating glass",
9571
- visualTreatment: "floating-glass",
9572
- layoutBehavior: "fixed-floating",
9573
- configuration: {
9574
- structure: "floating-shell",
9575
- treatment: "floating-glass",
9576
- behavior: "fixed-floating"
9577
- },
9578
9370
  openingRequirement: "requires-image-hero-with-contrast-overlay",
9579
9371
  maxRecommendedNavItems: 5,
9580
9372
  logoAccommodations: overlayLogoAccommodations,
9581
9373
  compile: floatingGlassHeader
9582
9374
  }
9583
9375
  ]);
9584
- new Set(headerLookCatalog.map((look) => headerConfigurationKey(look.configuration)));
9585
9376
  new Map(headerLookCatalog.map((look) => [look.id, look]));
9586
9377
  }));
9587
9378
  var init_compilationPlan = __esmMin((() => {
@@ -9827,11 +9618,9 @@ var init_types$11 = __esmMin((() => {
9827
9618
  "secondary",
9828
9619
  "outline",
9829
9620
  "ghost",
9830
- "link",
9831
- "tertiary",
9832
9621
  "accent"
9833
9622
  ];
9834
- buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only");
9623
+ 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" });
9835
9624
  DEFAULT_VARIANT_ALIAS_ID = "default";
9836
9625
  opaqueButtonColourTokenSchema = themeColorTokenSchema.refine((value) => parseOpaqueButtonColourToken(value) !== null, "Button colour tokens must be opaque").transform((value) => {
9837
9626
  const token = parseOpaqueButtonColourToken(value);
@@ -13008,6 +12797,38 @@ var init_media$1 = __esmMin((() => {
13008
12797
  });
13009
12798
  }));
13010
12799
  //#endregion
12800
+ //#region ../theme-core/src/palette/schema.ts
12801
+ var colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema;
12802
+ var init_schema$2 = __esmMin((() => {
12803
+ init_colors();
12804
+ colourHexString = z$1.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
12805
+ paletteColorSchema = z$1.object({
12806
+ name: z$1.string().min(1),
12807
+ hex: colourHexString
12808
+ });
12809
+ paletteMetaSchema = z$1.object({ mode: z$1.enum(["light", "dark"]) });
12810
+ paletteSchema = z$1.object({
12811
+ colors: z$1.array(paletteColorSchema),
12812
+ meta: paletteMetaSchema
12813
+ }).transform((palette, ctx) => {
12814
+ const colors = paletteColorsFromEntries(palette.colors);
12815
+ if (!colors.ok) {
12816
+ ctx.addIssue({
12817
+ code: "custom",
12818
+ message: `Invalid complete palette: ${colors.error.kind}`
12819
+ });
12820
+ return z$1.NEVER;
12821
+ }
12822
+ return {
12823
+ colors: paletteColorEntries(colors.colors).map(({ name, hex }) => ({
12824
+ name: String(name),
12825
+ hex: String(hex)
12826
+ })),
12827
+ meta: palette.meta
12828
+ };
12829
+ });
12830
+ }));
12831
+ //#endregion
13011
12832
  //#region ../theme-core/src/buttons/constants.ts
13012
12833
  /**
13013
12834
  * Generate shadow CSS value dynamically based on elevation, softness, and position
@@ -13737,20 +13558,61 @@ var init_generateBaseCSS = __esmMin((() => {
13737
13558
  };
13738
13559
  }));
13739
13560
  //#endregion
13561
+ //#region ../theme-core/src/buttons/effects/cssUtils.ts
13562
+ /**
13563
+ * Generate CSS selector for a state with dual support for hover
13564
+ *
13565
+ * @param themeId - Theme scope ID
13566
+ * @param variantId - Variant class name
13567
+ * @param state - State group (hover, active, focus, base)
13568
+ * @returns CSS selector string
13569
+ */
13570
+ function getStateSelector(themeId, variantId, state) {
13571
+ const stateSelector = STATE_SELECTORS[state];
13572
+ if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
13573
+ if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
13574
+ :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
13575
+ return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
13576
+ }
13577
+ /**
13578
+ * Generate CSS rule block for a state
13579
+ *
13580
+ * @param themeId - Theme scope ID
13581
+ * @param variantId - Variant class name
13582
+ * @param state - State group
13583
+ * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
13584
+ * @returns Complete CSS rule block
13585
+ */
13586
+ function generateStateCSS(themeId, variantId, state, cssProperties) {
13587
+ return `
13588
+ ${getStateSelector(themeId, variantId, state)} {
13589
+ ${cssProperties}
13590
+ }
13591
+ `;
13592
+ }
13593
+ var STATE_SELECTORS;
13594
+ var init_cssUtils = __esmMin((() => {
13595
+ STATE_SELECTORS = {
13596
+ hover: ":hover, [data-force-hover=\"true\"]",
13597
+ active: ":active",
13598
+ focus: ":focus-visible",
13599
+ base: ""
13600
+ };
13601
+ }));
13602
+ //#endregion
13740
13603
  //#region ../theme-core/src/buttons/effects/presets/background.ts
13741
- var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
13742
- var init_background$2 = __esmMin((() => {
13743
- darkenBackgroundEffect = {
13744
- id: "darken-background",
13745
- name: "Darken on Hover",
13746
- description: "Darkens the background color on hover",
13604
+ function shadeBackgroundEffect(config) {
13605
+ return {
13606
+ id: config.id,
13607
+ name: config.name,
13608
+ description: config.description,
13747
13609
  category: "background",
13748
13610
  pseudoElement: "none",
13749
13611
  applicableTo: ["button"],
13750
13612
  customizableOption: {
13751
13613
  name: "amount",
13752
13614
  type: "select",
13753
- label: "Darken Amount (shade step)",
13615
+ label: config.label,
13754
13616
  default: 100,
13755
13617
  options: [
13756
13618
  0,
@@ -13765,63 +13627,36 @@ var init_background$2 = __esmMin((() => {
13765
13627
  900
13766
13628
  ]
13767
13629
  },
13768
- isApplicable: (buttonConfig) => {
13769
- return buttonConfig.background.type === "solid";
13770
- },
13771
- generateCSS: (ctx) => {
13772
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
13630
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
13631
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
13773
13632
  if (buttonConfig.background.type !== "solid") return "";
13774
- const amount = options.amount || 100;
13633
+ const amount = (options.amount || 100) * config.shadeDirection;
13775
13634
  const baseToken = buttonConfig.background.colorToken ?? "primary-500";
13776
- const darkerToken = tokens.adjustShade(baseToken, amount);
13777
13635
  return `
13778
13636
  :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
13779
- background-color: ${tokens.getColor(darkerToken)};
13637
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
13780
13638
  }
13781
13639
  `;
13782
13640
  }
13783
13641
  };
13784
- lightenBackgroundEffect = {
13642
+ }
13643
+ var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
13644
+ var init_background$2 = __esmMin((() => {
13645
+ init_cssUtils();
13646
+ darkenBackgroundEffect = shadeBackgroundEffect({
13647
+ id: "darken-background",
13648
+ name: "Darken on Hover",
13649
+ description: "Darkens the background color on hover",
13650
+ label: "Darken Amount (shade step)",
13651
+ shadeDirection: 1
13652
+ });
13653
+ lightenBackgroundEffect = shadeBackgroundEffect({
13785
13654
  id: "lighten-background",
13786
13655
  name: "Lighten on Hover",
13787
13656
  description: "Lightens the background color on hover",
13788
- category: "background",
13789
- pseudoElement: "none",
13790
- applicableTo: ["button"],
13791
- customizableOption: {
13792
- name: "amount",
13793
- type: "select",
13794
- label: "Lighten Amount (shade step)",
13795
- default: 100,
13796
- options: [
13797
- 0,
13798
- 100,
13799
- 200,
13800
- 300,
13801
- 400,
13802
- 500,
13803
- 600,
13804
- 700,
13805
- 800,
13806
- 900
13807
- ]
13808
- },
13809
- isApplicable: (buttonConfig) => {
13810
- return buttonConfig.background.type === "solid";
13811
- },
13812
- generateCSS: (ctx) => {
13813
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
13814
- if (buttonConfig.background.type !== "solid") return "";
13815
- const amount = options.amount || 100;
13816
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
13817
- const lighterToken = tokens.adjustShade(baseToken, -amount);
13818
- return `
13819
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
13820
- background-color: ${tokens.getColor(lighterToken)};
13821
- }
13822
- `;
13823
- }
13824
- };
13657
+ label: "Lighten Amount (shade step)",
13658
+ shadeDirection: -1
13659
+ });
13825
13660
  fadeBackgroundEffect = {
13826
13661
  id: "fade-background",
13827
13662
  name: "Fade on Hover",
@@ -13922,12 +13757,14 @@ var init_background$2 = __esmMin((() => {
13922
13757
  ]
13923
13758
  },
13924
13759
  generateCSS: (ctx) => {
13925
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
13760
+ const { themeId, variantId, stateGroup, options, tokens, buttonConfig } = ctx;
13926
13761
  const colorToken = options.colorToken || "neutral-800";
13762
+ const color = tokens.getColor(colorToken);
13763
+ const navForeground = "textColorToken" in buttonConfig && typeof options.textColorToken === "string" ? `\n color: ${tokens.getColor(options.textColorToken)};` : "";
13927
13764
  return `
13928
13765
  /* Add background on hover */
13929
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
13930
- background-color: ${tokens.getColor(colorToken)};${"textColorToken" in buttonConfig && typeof options.textColorToken === "string" ? `\n color: ${tokens.getColor(options.textColorToken)};` : ""}
13766
+ ${getStateSelector(themeId, variantId, stateGroup)} {
13767
+ background-color: ${color};${navForeground}
13931
13768
  }
13932
13769
  `;
13933
13770
  }
@@ -13960,48 +13797,6 @@ var init_background$2 = __esmMin((() => {
13960
13797
  };
13961
13798
  }));
13962
13799
  //#endregion
13963
- //#region ../theme-core/src/buttons/effects/cssUtils.ts
13964
- /**
13965
- * Generate CSS selector for a state with dual support for hover
13966
- *
13967
- * @param themeId - Theme scope ID
13968
- * @param variantId - Variant class name
13969
- * @param state - State group (hover, active, focus, base)
13970
- * @returns CSS selector string
13971
- */
13972
- function getStateSelector(themeId, variantId, state) {
13973
- const stateSelector = STATE_SELECTORS[state];
13974
- if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
13975
- if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
13976
- :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
13977
- return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
13978
- }
13979
- /**
13980
- * Generate CSS rule block for a state
13981
- *
13982
- * @param themeId - Theme scope ID
13983
- * @param variantId - Variant class name
13984
- * @param state - State group
13985
- * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
13986
- * @returns Complete CSS rule block
13987
- */
13988
- function generateStateCSS(themeId, variantId, state, cssProperties) {
13989
- return `
13990
- ${getStateSelector(themeId, variantId, state)} {
13991
- ${cssProperties}
13992
- }
13993
- `;
13994
- }
13995
- var STATE_SELECTORS;
13996
- var init_cssUtils = __esmMin((() => {
13997
- STATE_SELECTORS = {
13998
- hover: ":hover, [data-force-hover=\"true\"]",
13999
- active: ":active",
14000
- focus: ":focus-visible",
14001
- base: ""
14002
- };
14003
- }));
14004
- //#endregion
14005
13800
  //#region ../theme-core/src/buttons/effects/presets/shadow.ts
14006
13801
  var borderGlowEffect, dropShadowEffect, innerShadowEffect, neumorphicShadowEffect, outerGlowEffect, retro3DShadowEffect;
14007
13802
  var init_shadow = __esmMin((() => {
@@ -16807,6 +16602,184 @@ var init_tokenOrColor = __esmMin((() => {
16807
16602
  ]);
16808
16603
  }));
16809
16604
  //#endregion
16605
+ //#region ../theme-core/src/responsive/breakpoints.ts
16606
+ function mqUp(px) {
16607
+ return `(min-width: ${px}px)`;
16608
+ }
16609
+ function mqDown(px) {
16610
+ return `(max-width: ${px}px)`;
16611
+ }
16612
+ function mqBetween(minPx, maxPx) {
16613
+ return `${mqUp(minPx)} and ${mqDown(maxPx)}`;
16614
+ }
16615
+ var BREAKPOINT_LG, BREAKPOINT_XL, BREAKPOINT_LG_DOWN, MQ_SM_UP, MQ_MD_UP, MQ_LG_UP, MQ_SM_DOWN, MQ_MD_DOWN, MQ_TABLET_ONLY;
16616
+ var init_breakpoints = __esmMin((() => {
16617
+ BREAKPOINT_LG = 1024;
16618
+ BREAKPOINT_XL = 1280;
16619
+ BREAKPOINT_LG_DOWN = BREAKPOINT_LG - 1;
16620
+ MQ_SM_UP = mqUp(640);
16621
+ MQ_MD_UP = mqUp(768);
16622
+ MQ_LG_UP = mqUp(BREAKPOINT_LG);
16623
+ mqUp(BREAKPOINT_XL);
16624
+ MQ_SM_DOWN = mqDown(639);
16625
+ MQ_MD_DOWN = mqDown(767);
16626
+ mqDown(BREAKPOINT_LG_DOWN);
16627
+ MQ_TABLET_ONLY = mqBetween(640, BREAKPOINT_LG_DOWN);
16628
+ mqDown(640);
16629
+ mqDown(768);
16630
+ }));
16631
+ //#endregion
16632
+ //#region ../theme-core/src/header/paintTargets.ts
16633
+ /** Resolve the element that owns the visible header surface for each layout. */
16634
+ function getHeaderPaintTargets(variant, themeId, state = "base") {
16635
+ const scope = `:where([data-theme-scope="${themeId}"])`;
16636
+ const scrolledRoot = state === "scrolled" ? ".header-root.header-scrolled " : "";
16637
+ if (variant === "floating") {
16638
+ if (state === "scrolled") {
16639
+ const desktopOwner = `${scope} ${scrolledRoot}.header-floating-container`;
16640
+ const mobileOwner = `${scope} ${scrolledRoot}.header-mobile-bar`;
16641
+ return [{
16642
+ kind: "viewport-band",
16643
+ clipSelector: `${scope}:has(.header-root.header-scrolled)`,
16644
+ ownerSelector: desktopOwner,
16645
+ selector: `${desktopOwner}::before`,
16646
+ mediaQuery: MQ_MD_UP,
16647
+ topExtension: {
16648
+ customProperty: "--rb-header-floating-top-gap",
16649
+ value: "1rem",
16650
+ ownerProperty: "top"
16651
+ },
16652
+ ownerNeedsPositioning: false
16653
+ }, {
16654
+ kind: "viewport-band",
16655
+ clipSelector: `${scope}:has(.header-root.header-scrolled)`,
16656
+ ownerSelector: mobileOwner,
16657
+ selector: `${mobileOwner}::before`,
16658
+ mediaQuery: MQ_MD_DOWN,
16659
+ topExtension: {
16660
+ customProperty: "--rb-header-floating-top-gap",
16661
+ value: "0.75rem",
16662
+ ownerProperty: "margin-top"
16663
+ },
16664
+ ownerNeedsPositioning: true
16665
+ }];
16666
+ }
16667
+ return [{
16668
+ kind: "element-box",
16669
+ selector: `${scope} ${scrolledRoot}.header-floating-container`,
16670
+ mediaQuery: MQ_MD_UP
16671
+ }, {
16672
+ kind: "element-box",
16673
+ selector: `${scope} ${scrolledRoot}.header-mobile-bar`,
16674
+ mediaQuery: MQ_MD_DOWN
16675
+ }];
16676
+ }
16677
+ return [{
16678
+ kind: "element-box",
16679
+ selector: `${scope} .header-root${state === "scrolled" ? ".header-scrolled" : ""}::before`,
16680
+ pseudoElement: "inset"
16681
+ }];
16682
+ }
16683
+ function renderHeaderPaintTargetRules(targets, rules) {
16684
+ return targets.map((target) => {
16685
+ const block = renderHeaderPaintTargetRule(target, rules);
16686
+ return target.mediaQuery ? `@media ${target.mediaQuery} {\n${block}\n}` : block;
16687
+ }).join("\n");
16688
+ }
16689
+ function renderHeaderPaintTargetRule(target, rules) {
16690
+ switch (target.kind) {
16691
+ case "element-box": {
16692
+ const pseudoElementSetup = target.pseudoElement === "inset" ? [
16693
+ "content: \"\";",
16694
+ "position: absolute;",
16695
+ "inset: 0;",
16696
+ "pointer-events: none;",
16697
+ "border-radius: inherit;",
16698
+ "z-index: -1;"
16699
+ ] : [];
16700
+ return `${target.selector} {\n ${[...pseudoElementSetup, ...rules].join("\n ")}\n}`;
16701
+ }
16702
+ case "viewport-band": {
16703
+ const gap = target.topExtension;
16704
+ const ownerRules = [
16705
+ `${gap.customProperty}: ${gap.value};`,
16706
+ `${gap.ownerProperty}: var(${gap.customProperty});`,
16707
+ ...target.ownerNeedsPositioning ? ["position: relative;"] : [],
16708
+ "isolation: isolate;",
16709
+ "background: none;",
16710
+ "backdrop-filter: none;",
16711
+ "-webkit-backdrop-filter: none;",
16712
+ "border: 0;",
16713
+ "box-shadow: none;"
16714
+ ];
16715
+ const bandRules = [
16716
+ "content: \"\";",
16717
+ "position: absolute;",
16718
+ `top: calc(-1 * var(${gap.customProperty}));`,
16719
+ "bottom: 0;",
16720
+ "left: 50%;",
16721
+ "width: 100vw;",
16722
+ "transform: translateX(-50%);",
16723
+ "pointer-events: none;",
16724
+ "border-radius: 0;",
16725
+ "z-index: -1;",
16726
+ ...rules
16727
+ ];
16728
+ return `${target.clipSelector} {\n overflow-x: clip;\n}\n${target.ownerSelector} {\n ${ownerRules.join("\n ")}\n}\n${target.selector} {\n ${bandRules.join("\n ")}\n}`;
16729
+ }
16730
+ }
16731
+ }
16732
+ var init_paintTargets = __esmMin((() => {
16733
+ init_breakpoints();
16734
+ }));
16735
+ //#endregion
16736
+ //#region ../theme-core/src/header/scrollTreatment.ts
16737
+ function generateMobileOverlayBackdropFilterFix(themeId, variant) {
16738
+ const root = `:where([data-theme-scope="${themeId}"]) .header-root:has([data-nav-mobile-overlay][aria-hidden="false"])`;
16739
+ 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`;
16740
+ }
16741
+ function generateHeaderScrollTreatmentStyles(treatment, themeId, variant, surfaceRules = []) {
16742
+ if (!treatment) return "";
16743
+ switch (treatment.kind) {
16744
+ case "contrast-glass": {
16745
+ const backgroundChannels = treatment.backgroundTone === "dark" ? "0 0 0" : "255 255 255";
16746
+ return renderHeaderPaintTargetRules(getHeaderPaintTargets(variant, themeId, "scrolled"), [`background-color: rgb(${backgroundChannels} / 0.60);`, ...surfaceRules]);
16747
+ }
16748
+ }
16749
+ }
16750
+ var headerScrollTreatmentSchema;
16751
+ var init_scrollTreatment = __esmMin((() => {
16752
+ init_paintTargets();
16753
+ headerScrollTreatmentSchema = z$1.discriminatedUnion("kind", [z$1.object({
16754
+ kind: z$1.literal("contrast-glass"),
16755
+ backgroundTone: z$1.enum(["light", "dark"])
16756
+ })]).optional();
16757
+ }));
16758
+ //#endregion
16759
+ //#region ../theme-core/src/header/containerSchema.ts
16760
+ var headerContainerSchema;
16761
+ var init_containerSchema = __esmMin((() => {
16762
+ headerContainerSchema = z$1.object({
16763
+ rounded: z$1.enum([
16764
+ "none",
16765
+ "sm",
16766
+ "md",
16767
+ "lg",
16768
+ "xl",
16769
+ "2xl"
16770
+ ]).default("xl"),
16771
+ border: z$1.boolean().default(true),
16772
+ shadow: z$1.boolean().default(true),
16773
+ padding: z$1.enum([
16774
+ "sm",
16775
+ "md",
16776
+ "lg"
16777
+ ]).default("md"),
16778
+ tint: z$1.string().nullable().optional(),
16779
+ opacity: z$1.number().min(0).max(1).default(.12)
16780
+ }).optional();
16781
+ }));
16782
+ //#endregion
16810
16783
  //#region ../theme-core/src/schema.ts
16811
16784
  /**
16812
16785
  * Normalises the legacy `navTypography` font-role alias into the canonical
@@ -16822,9 +16795,10 @@ function normaliseHeaderNavFontRole(header) {
16822
16795
  navFontRole: navTypography
16823
16796
  } : rest;
16824
16797
  }
16825
- 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;
16798
+ 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;
16826
16799
  var init_schema$1 = __esmMin((() => {
16827
16800
  init_media$1();
16801
+ init_schema$2();
16828
16802
  init_buttons();
16829
16803
  init_cards();
16830
16804
  init_types$8();
@@ -16839,6 +16813,9 @@ var init_schema$1 = __esmMin((() => {
16839
16813
  init_rawStyleFields();
16840
16814
  init_themeColorTokens();
16841
16815
  init_tokenOrColor();
16816
+ init_scrollTreatment();
16817
+ init_containerSchema();
16818
+ init_interactionPalette();
16842
16819
  axesSchema = z$1.object({
16843
16820
  tone: z$1.enum([
16844
16821
  "minimal",
@@ -16867,16 +16844,6 @@ var init_schema$1 = __esmMin((() => {
16867
16844
  "expressive"
16868
16845
  ])
16869
16846
  });
16870
- colourHexString = z$1.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
16871
- paletteColorSchema = z$1.object({
16872
- name: z$1.string().min(1),
16873
- hex: colourHexString
16874
- });
16875
- paletteMetaSchema = z$1.object({ mode: z$1.enum(["light", "dark"]) });
16876
- paletteSchema = z$1.object({
16877
- colors: z$1.array(paletteColorSchema),
16878
- meta: paletteMetaSchema
16879
- });
16880
16847
  typographyStyleSchema = z$1.object({
16881
16848
  family: z$1.string().min(1),
16882
16849
  weight: z$1.enum([
@@ -17256,25 +17223,6 @@ var init_schema$1 = __esmMin((() => {
17256
17223
  ]);
17257
17224
  headerMaxWidth = z$1.enum(["container", "full"]);
17258
17225
  headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
17259
- headerContainerSchema = z$1.object({
17260
- rounded: z$1.enum([
17261
- "none",
17262
- "sm",
17263
- "md",
17264
- "lg",
17265
- "xl",
17266
- "2xl"
17267
- ]).default("xl"),
17268
- border: z$1.boolean().default(true),
17269
- shadow: z$1.boolean().default(true),
17270
- padding: z$1.enum([
17271
- "sm",
17272
- "md",
17273
- "lg"
17274
- ]).default("md"),
17275
- tint: z$1.string().nullable().optional(),
17276
- opacity: z$1.number().min(0).max(1).default(.12)
17277
- }).optional();
17278
17226
  headerBorderSchema = componentBorderSchema.extend({ position: z$1.enum([
17279
17227
  "bottom",
17280
17228
  "top",
@@ -17397,6 +17345,7 @@ var init_schema$1 = __esmMin((() => {
17397
17345
  shrinkOnScroll: z$1.boolean(),
17398
17346
  maxWidth: headerMaxWidth,
17399
17347
  barFrame: headerBarFrame.optional(),
17348
+ scrollTreatment: headerScrollTreatmentSchema,
17400
17349
  logoOverride: mediaSchema.nullable().optional(),
17401
17350
  background: headerBackgroundSchema.default({
17402
17351
  type: "color",
@@ -17409,6 +17358,7 @@ var init_schema$1 = __esmMin((() => {
17409
17358
  navFontRole: z$1.enum(["body", "heading"]).optional(),
17410
17359
  navTypography: z$1.enum(["body", "heading"]).optional(),
17411
17360
  navTextSize: navLinkStyleSchema.shape.textSize,
17361
+ interactionPalette: headerInteractionPaletteSchema.optional(),
17412
17362
  navPlacement: z$1.enum(["end", "center"]).optional(),
17413
17363
  container: headerContainerSchema,
17414
17364
  border: headerBorderSchema,
@@ -17869,7 +17819,6 @@ var init_runtimeCompiler = __esmMin((() => {
17869
17819
  init_modern_minimal();
17870
17820
  init_expandPalette();
17871
17821
  init_styles();
17872
- init_colors();
17873
17822
  init_designState();
17874
17823
  init_types$14();
17875
17824
  init_accessibleSurfaces();
@@ -19735,7 +19684,7 @@ var init_siteStyleThemeCompiler = __esmMin((() => {
19735
19684
  init_curatedSiteStyles();
19736
19685
  init_runtimeCompiler();
19737
19686
  init_curated();
19738
- init_resolveSelection();
19687
+ init_concretePalette();
19739
19688
  }));
19740
19689
  var init_previewCustomization = __esmMin((() => {
19741
19690
  init_types$14();
@@ -19745,7 +19694,7 @@ var init_previewCompiler = __esmMin((() => {
19745
19694
  init_onColor();
19746
19695
  init_tokens();
19747
19696
  init_curated();
19748
- init_resolveSelection();
19697
+ init_concretePalette();
19749
19698
  init_curatedSiteStyles();
19750
19699
  init_resolver();
19751
19700
  init_types$14();
@@ -19844,6 +19793,7 @@ var init_records = __esmMin((() => {}));
19844
19793
  var init_headerOpeningSection = __esmMin((() => {
19845
19794
  init_headerLooks();
19846
19795
  init_records();
19796
+ init_tokens();
19847
19797
  }));
19848
19798
  var init_generatedDesignPipeline = __esmMin((() => {
19849
19799
  init_compositionBudget();
@@ -20164,8 +20114,11 @@ var init_site_styles = __esmMin((() => {
20164
20114
  init_generatedSchemas();
20165
20115
  init_generatedDesignPipeline();
20166
20116
  init_headerLooks();
20117
+ init_headerInteractionPalette();
20118
+ init_headerOpeningForeground();
20167
20119
  init_headerOpeningSection();
20168
20120
  init_lookResolution();
20121
+ init_lookOptionGroups();
20169
20122
  init_logoBranding();
20170
20123
  init_pageDesignAuthority();
20171
20124
  init_pageDesignEditorErrors();
@@ -20803,23 +20756,14 @@ var init_fragments$1 = __esmMin((() => {
20803
20756
  var init_types$5 = __esmMin((() => {}));
20804
20757
  //#endregion
20805
20758
  //#region ../blocks/src/system/constants/buttonRoles.ts
20806
- /**
20807
- * Temporary rollout boundary for persisted content written before issue #1220.
20808
- * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
20809
- * only until the post-deploy role rewrite has been audited in production.
20810
- */
20811
- function canonicalizePersistedBlockButtonRole(value) {
20812
- return value === "link" || value === "tertiary" ? "ghost" : value;
20813
- }
20814
20759
  function isBlockButtonRole(value) {
20815
20760
  return blockButtonRoleSchema.safeParse(value).success;
20816
20761
  }
20817
- var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, persistedBlockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
20762
+ var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
20818
20763
  var init_buttonRoles = __esmMin((() => {
20819
20764
  init_buttons();
20820
20765
  BLOCK_BUTTON_ROLES = PUBLIC_BUTTON_ROLES;
20821
20766
  blockButtonRoleSchema = z$1.enum(BLOCK_BUTTON_ROLES);
20822
- persistedBlockButtonRoleSchema = z$1.preprocess((value) => typeof value === "string" ? canonicalizePersistedBlockButtonRole(value) : value, blockButtonRoleSchema);
20823
20767
  BLOCK_BUTTON_ROLE_LABELS = {
20824
20768
  primary: "Primary",
20825
20769
  secondary: "Secondary",
@@ -21339,37 +21283,10 @@ var init_validation_constants = __esmMin((() => {
21339
21283
  //#endregion
21340
21284
  //#region ../blocks/src/system/node/index.ts
21341
21285
  var init_node = __esmMin((() => {
21342
- init_schema$2();
21286
+ init_schema$3();
21343
21287
  init_typeBasedLayout();
21344
21288
  init_validation_constants();
21345
21289
  }));
21346
- //#endregion
21347
- //#region ../theme-core/src/responsive/breakpoints.ts
21348
- function mqUp(px) {
21349
- return `(min-width: ${px}px)`;
21350
- }
21351
- function mqDown(px) {
21352
- return `(max-width: ${px}px)`;
21353
- }
21354
- function mqBetween(minPx, maxPx) {
21355
- return `${mqUp(minPx)} and ${mqDown(maxPx)}`;
21356
- }
21357
- var BREAKPOINT_LG, BREAKPOINT_XL, BREAKPOINT_LG_DOWN, MQ_SM_UP, MQ_MD_UP, MQ_LG_UP, MQ_SM_DOWN, MQ_MD_DOWN, MQ_TABLET_ONLY;
21358
- var init_breakpoints = __esmMin((() => {
21359
- BREAKPOINT_LG = 1024;
21360
- BREAKPOINT_XL = 1280;
21361
- BREAKPOINT_LG_DOWN = BREAKPOINT_LG - 1;
21362
- MQ_SM_UP = mqUp(640);
21363
- MQ_MD_UP = mqUp(768);
21364
- MQ_LG_UP = mqUp(BREAKPOINT_LG);
21365
- mqUp(BREAKPOINT_XL);
21366
- MQ_SM_DOWN = mqDown(639);
21367
- MQ_MD_DOWN = mqDown(767);
21368
- mqDown(BREAKPOINT_LG_DOWN);
21369
- MQ_TABLET_ONLY = mqBetween(640, BREAKPOINT_LG_DOWN);
21370
- mqDown(640);
21371
- mqDown(768);
21372
- }));
21373
21290
  function asNonEmptyString(value) {
21374
21291
  if (typeof value !== "string") return null;
21375
21292
  const trimmed = value.trim();
@@ -27070,7 +26987,7 @@ var init_contract_schemas = __esmMin((() => {
27070
26987
  init_buttonRoles();
27071
26988
  previewStageSchema = z$1.enum(["preview", "published"]);
27072
26989
  registrationButtonVariantSchema = blockButtonRoleSchema;
27073
- eventButtonVariantSchema = persistedBlockButtonRoleSchema;
26990
+ eventButtonVariantSchema = blockButtonRoleSchema;
27074
26991
  eventLayoutSchema = z$1.enum(eventCalendarListLayoutValues);
27075
26992
  eventCalendarDisplayModeSchema = z$1.enum(eventCalendarDisplayModeValues);
27076
26993
  eventCalendarDefaultViewSchema = z$1.enum(eventCalendarDefaultViewValues);
@@ -101585,17 +101502,28 @@ var init_usePaymentVerification = __esmMin((() => {
101585
101502
  paymentVerificationDeps = { useBlockApi };
101586
101503
  }));
101587
101504
  //#endregion
101505
+ //#region ../blocks/src/system/runtime/nodes/event-registration/constants.ts
101506
+ var EVENT_REGISTRATION_ANCHOR_ID;
101507
+ var init_constants = __esmMin((() => {
101508
+ EVENT_REGISTRATION_ANCHOR_ID = "event-registration";
101509
+ }));
101510
+ //#endregion
101588
101511
  //#region ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.ts
101589
101512
  function useEventRegistrationStripeReturn(options) {
101513
+ return useEventRegistrationStripeReturnWithDeps(options, eventRegistrationStripeReturnDeps);
101514
+ }
101515
+ function useEventRegistrationStripeReturnWithDeps(options, deps) {
101590
101516
  const { api, events, occurrenceId, pendingAttendeeId, setErrorMessage, setFormData, setPaymentSelection, setPendingAttendeeId, setRegistrationResult, setSelectedEvent, setSelectedAttendanceMode, setTicketSelections, setStep, setTicketsCount, step } = options;
101591
- const verification = usePaymentVerification(useMemo(() => step === "verifying-payment" && pendingAttendeeId ? { transactionId: pendingAttendeeId } : null, [step, pendingAttendeeId]));
101517
+ const verificationConfig = useMemo(() => step === "verifying-payment" && pendingAttendeeId ? { transactionId: pendingAttendeeId } : null, [step, pendingAttendeeId]);
101518
+ const verification = deps.usePaymentVerification(verificationConfig);
101592
101519
  useEffect(() => {
101593
- cleanupStaleRegistrations();
101594
- const registrationStatus = consumeSearchParam("registration");
101595
- if (!registrationStatus) return;
101520
+ deps.cleanupStaleRegistrations();
101521
+ const registrationStatus = deps.consumeSearchParam("registration");
101522
+ if (registrationStatus !== "cancelled" && registrationStatus !== "success") return;
101523
+ deps.scrollToBlock(EVENT_REGISTRATION_ANCHOR_ID);
101596
101524
  const siteId = api.config.siteId;
101597
101525
  if (!siteId) return;
101598
- const pending = getPendingRegistration(siteId, occurrenceId || void 0);
101526
+ const pending = deps.getPendingRegistration(siteId, occurrenceId || void 0);
101599
101527
  if (!pending) return;
101600
101528
  setFormData(pending.formData);
101601
101529
  setTicketSelections(pending.ticketSelections);
@@ -101615,7 +101543,7 @@ function useEventRegistrationStripeReturn(options) {
101615
101543
  useEffect(() => {
101616
101544
  if (verification.status === "completed") {
101617
101545
  const siteId = api.config.siteId;
101618
- if (siteId && occurrenceId) clearPendingRegistration(siteId, occurrenceId);
101546
+ if (siteId && occurrenceId) deps.clearPendingRegistration(siteId, occurrenceId);
101619
101547
  setRegistrationResult({ status: "confirmed" });
101620
101548
  setStep("success");
101621
101549
  } else if (verification.status === "failed") {
@@ -101635,11 +101563,21 @@ function useEventRegistrationStripeReturn(options) {
101635
101563
  ]);
101636
101564
  return verification;
101637
101565
  }
101566
+ var eventRegistrationStripeReturnDeps;
101638
101567
  var init_useEventRegistrationStripeReturn = __esmMin((() => {
101639
101568
  init_usePaymentVerification();
101640
101569
  init_shared$1();
101570
+ init_constants();
101641
101571
  init_sessionStorage();
101642
101572
  init_ticketSelectionLines();
101573
+ eventRegistrationStripeReturnDeps = {
101574
+ usePaymentVerification,
101575
+ consumeSearchParam,
101576
+ scrollToBlock,
101577
+ cleanupStaleRegistrations,
101578
+ clearPendingRegistration,
101579
+ getPendingRegistration
101580
+ };
101643
101581
  }));
101644
101582
  //#endregion
101645
101583
  //#region ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.ts
@@ -101731,13 +101669,7 @@ function useEventRegistrationSubmitWithDeps(options, deps) {
101731
101669
  if (!result.alreadyRegistered && result.status === "confirmed" && result.pendingPayment && (method === "stripe" || method === "pass_bundle" || method === "membership_bundle")) {
101732
101670
  options.setPendingAttendeeId(result.attendeeId);
101733
101671
  options.setStep("redirecting");
101734
- const currentUrl = new URL(window.location.href);
101735
- const successParams = new URLSearchParams(currentUrl.search);
101736
- successParams.set("registration", "success");
101737
- const successUrl = `${currentUrl.origin}${currentUrl.pathname}?${successParams.toString()}${currentUrl.hash}`;
101738
- const cancelParams = new URLSearchParams(currentUrl.search);
101739
- cancelParams.set("registration", "cancelled");
101740
- const cancelUrl = `${currentUrl.origin}${currentUrl.pathname}?${cancelParams.toString()}${currentUrl.hash}`;
101672
+ const { successUrl, cancelUrl } = buildCheckoutReturnUrls("registration", EVENT_REGISTRATION_ANCHOR_ID);
101741
101673
  const checkoutType = method === "pass_bundle" ? "pass_bundle" : method === "membership_bundle" ? "membership_bundle" : "event";
101742
101674
  const checkoutResult = await options.api.createEventCheckout({
101743
101675
  attendeeId: result.attendeeId,
@@ -101802,6 +101734,8 @@ function useEventRegistrationSubmitWithDeps(options, deps) {
101802
101734
  }
101803
101735
  var eventRegistrationSubmitDeps;
101804
101736
  var init_useEventRegistrationSubmit = __esmMin((() => {
101737
+ init_shared$1();
101738
+ init_constants();
101805
101739
  init_sessionStorage();
101806
101740
  init_ticketSelectionLines();
101807
101741
  eventRegistrationSubmitDeps = { savePendingRegistration };
@@ -102678,12 +102612,6 @@ function filterMembershipsForEvent(siteMemberships, event) {
102678
102612
  }
102679
102613
  var init_eventProductEligibility = __esmMin((() => {}));
102680
102614
  //#endregion
102681
- //#region ../blocks/src/system/runtime/nodes/event-registration/constants.ts
102682
- var EVENT_REGISTRATION_ANCHOR_ID;
102683
- var init_constants = __esmMin((() => {
102684
- EVENT_REGISTRATION_ANCHOR_ID = "event-registration";
102685
- }));
102686
- //#endregion
102687
102615
  //#region ../blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.tsx
102688
102616
  function EventPortalAuthPrompt(props) {
102689
102617
  return /* @__PURE__ */ jsxs("div", {
@@ -107711,7 +107639,7 @@ function eventSeriesIdsForSubject(subject) {
107711
107639
  switch (subject.kind) {
107712
107640
  case "eventSeries": return [subject.eventSeriesId];
107713
107641
  case "eventOffering": return subject.availableEventSeriesIds;
107714
- default: return assertNever$21(subject);
107642
+ default: return assertNever$20(subject);
107715
107643
  }
107716
107644
  }
107717
107645
  var init_course_page_surface_scope = __esmMin((() => {
@@ -110410,7 +110338,7 @@ function PassesMembershipsController({ render }) {
110410
110338
  case "redirect":
110411
110339
  window.location.href = result.checkoutUrl;
110412
110340
  return;
110413
- default: return assertNever$21(result);
110341
+ default: return assertNever$20(result);
110414
110342
  }
110415
110343
  } catch (submitError) {
110416
110344
  dispatch({
@@ -112402,6 +112330,7 @@ function resolveBlockIconRenderValue(value, generatedAssets = /* @__PURE__ */ ne
112402
112330
  init_src$2();
112403
112331
  init_schema();
112404
112332
  init_richTextSchema();
112333
+ init_media$2();
112405
112334
  const TEL_RE = /^[+()0-9\s-]{3,}$/;
112406
112335
  const SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
112407
112336
  const ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
@@ -112689,7 +112618,7 @@ function canonicalizeFieldValueForWrite(plan, value) {
112689
112618
  case "media": {
112690
112619
  if (!isPlainObject$5(value)) return value;
112691
112620
  const canonical = { ...value };
112692
- if (typeof canonical.identifier === "string" && canonical.identifier.trim().length > 0) deleteEnvSpecificKeys(canonical);
112621
+ if (mediaIdentifierSchema.safeParse(canonical.identifier).success) deleteEnvSpecificKeys(canonical);
112693
112622
  return canonical;
112694
112623
  }
112695
112624
  case "group": return canonicalizeObjectForWrite(selectedGroupChildPlans(plan, value), value);
@@ -112784,7 +112713,7 @@ function normalizeObjectChildren(children, value, ctx) {
112784
112713
  function normalizeInlineTextFallbacks(plans, values, ctx) {
112785
112714
  for (const plan of plans) {
112786
112715
  if (plan.kind !== "inlineText" || !plan.plainTextFallbackPath) continue;
112787
- if (!isMissingForPlan(plan, values[plan.fieldId])) continue;
112716
+ if (!isMissingForPlan(plan, values[plan.fieldId]) && !(ctx.allowIncomplete && !parseInlineTextFromUnknown(values[plan.fieldId]).ok)) continue;
112788
112717
  const fallback = getAtFieldPath(values, plan.plainTextFallbackPath);
112789
112718
  if (typeof fallback !== "string" || fallback.trim().length === 0) continue;
112790
112719
  values[plan.fieldId] = normalizeFieldValue(plan, plainTextToInlineText(fallback), ctx);
@@ -112825,7 +112754,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
112825
112754
  case "select": return validateSelectPlan(plan, value);
112826
112755
  case "richText": return isValidRichTextDoc(value) ? [] : [issue(plan, "invalidRichText")];
112827
112756
  case "inlineText": return validateInlineTextPlan(plan, value);
112828
- case "media": return isPlainObject$5(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")];
112757
+ case "media": return isPlainObject$5(value) && mediaIdentifierSchema.safeParse(value.identifier).success && (value.type === void 0 || typeof value.type === "string" && plan.allowedMediaTypes.includes(value.type)) ? [] : [issue(plan, "invalidMedia")];
112829
112758
  case "link": return linkSchema.safeParse(value).success ? [] : [issue(plan, "invalidLink")];
112830
112759
  case "repeater": return validateRepeaterPlan(plan, value, ctx);
112831
112760
  case "group": return validateGroupPlan(plan, value, ctx);
@@ -115583,7 +115512,7 @@ function planSiteChromePlacement(positioning) {
115583
115512
  headerRootClassName: "rb-fixed rb-top-0 rb-left-0 rb-right-0",
115584
115513
  standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
115585
115514
  };
115586
- default: return assertNever$13(positioning);
115515
+ default: return assertNever$12(positioning);
115587
115516
  }
115588
115517
  }
115589
115518
  function splitSiteChromePlacementClasses(className) {
@@ -121470,10 +121399,10 @@ function preferredPathsForSource(source) {
121470
121399
  case "workshop": return ["/workshops", "/workshop"];
121471
121400
  case "retreat": return ["/retreats", "/retreat"];
121472
121401
  case "performance": return ["/performances", "/performance"];
121473
- default: return assertNever$21(source.preset, "Unhandled offerings preview event preset");
121402
+ default: return assertNever$20(source.preset, "Unhandled offerings preview event preset");
121474
121403
  }
121475
121404
  case "course": return ["/courses", "/course"];
121476
- default: return assertNever$21(source, "Unhandled offerings preview source");
121405
+ default: return assertNever$20(source, "Unhandled offerings preview source");
121477
121406
  }
121478
121407
  }
121479
121408
  function normalizeRoutePath(value) {
@@ -126470,7 +126399,7 @@ function resolveLinkedContentEditSupport(contentType) {
126470
126399
  kind: "unsupported-domain-backed",
126471
126400
  reason: metadata.reason
126472
126401
  };
126473
- default: return assertNever$21(metadata);
126402
+ default: return assertNever$20(metadata);
126474
126403
  }
126475
126404
  }
126476
126405
  function contentTypeKeyToLabel(key) {
@@ -126973,7 +126902,6 @@ function renderMark(mark, key, child) {
126973
126902
  //#region ../blocks/src/system/runtime/nodes/basic.tsx
126974
126903
  init_buttons();
126975
126904
  init_RichText();
126976
- init_buttonRoles();
126977
126905
  init_richText_coerce();
126978
126906
  const TextNode = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, inlineTextFallbackPath, ...rest }) => {
126979
126907
  const inlineText = parseInlineTextFromUnknown(value);
@@ -127014,6 +126942,9 @@ function renderTrailingAffordanceIcon(affordance) {
127014
126942
  className: "rb-ml-2 rb-h-4 rb-w-4 rb-inline-block"
127015
126943
  });
127016
126944
  }
126945
+ function isMissingRequiredLink(linkRequired, resolvedHref) {
126946
+ return linkRequired && resolvedHref.length === 0;
126947
+ }
127017
126948
  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 }) => {
127018
126949
  const content = value ?? children;
127019
126950
  if (!content) {
@@ -127022,12 +126953,16 @@ const ButtonNode = ({ value, children, href, variantId = "primary", size = "md",
127022
126953
  }
127023
126954
  const affordanceIcon = renderTrailingAffordanceIcon(resolveButtonAffordance({ trailingIcon }));
127024
126955
  const resolvedHref = typeof href === "string" ? href.trim() : "";
127025
- if (linkRequired && resolvedHref.length === 0) {
126956
+ if (isMissingRequiredLink(linkRequired, resolvedHref)) {
127026
126957
  console.warn("[ButtonNode] Missing href for link-required button");
127027
126958
  return null;
127028
126959
  }
127029
126960
  const extraClassName = affordanceIcon ? [className, AFFORDANCE_SUPPRESS_CLASS].filter(Boolean).join(" ") : className;
127030
- const resolvedVariantId = parseThemeButtonVariantId(canonicalizePersistedBlockButtonRole(variantId));
126961
+ const resolvedVariantId = parseThemeButtonVariantId(variantId);
126962
+ if (variantId && !resolvedVariantId) {
126963
+ console.error("[ButtonNode] Invalid button variant", { variantId });
126964
+ return null;
126965
+ }
127031
126966
  const combinedClassName = resolvedVariantId ? themeButtonClassName({
127032
126967
  variant: resolvedVariantId,
127033
126968
  size,
@@ -127166,8 +127101,9 @@ function iconForMediaType(type) {
127166
127101
  });
127167
127102
  }
127168
127103
  }
127169
- function normalizeButtonVariant(value) {
127170
- return isBlockButtonRole(value) ? value : "primary";
127104
+ function parseButtonVariant(value) {
127105
+ if (value === null || value === void 0) return "primary";
127106
+ return isBlockButtonRole(value) ? value : null;
127171
127107
  }
127172
127108
  function FileDownloadNode({ value, title, description, buttonLabel, buttonVariant, className }) {
127173
127109
  if (!value || !isDownloadableMediaType(value.type)) return null;
@@ -127177,7 +127113,11 @@ function FileDownloadNode({ value, title, description, buttonLabel, buttonVarian
127177
127113
  const heading = title?.trim() || filename;
127178
127114
  const body = description?.trim();
127179
127115
  const label = buttonLabel?.trim() || "Download";
127180
- const variant = normalizeButtonVariant(buttonVariant);
127116
+ const variant = parseButtonVariant(buttonVariant);
127117
+ if (!variant) {
127118
+ console.error("[FileDownloadNode] Invalid button variant", { buttonVariant });
127119
+ return null;
127120
+ }
127181
127121
  return /* @__PURE__ */ jsx("div", {
127182
127122
  className,
127183
127123
  children: /* @__PURE__ */ jsxs("div", {
@@ -128656,7 +128596,7 @@ function renderOfferingGroupItems(presentation, items, options) {
128656
128596
  children: items.map((item) => renderOfferingCompactItem(item, options))
128657
128597
  })
128658
128598
  });
128659
- default: return assertNever$21(presentation, "Unhandled offerings preview presentation");
128599
+ default: return assertNever$20(presentation, "Unhandled offerings preview presentation");
128660
128600
  }
128661
128601
  }
128662
128602
  function compareCoursesByNextSession(left, right) {
@@ -128701,7 +128641,7 @@ function featuredSummaryDetails(item) {
128701
128641
  const summary = deriveCourseScheduleSummary(item.course);
128702
128642
  return summary ? formatFeaturedSummary(summary, item.course.venue?.name ?? null) : null;
128703
128643
  }
128704
- default: return assertNever$21(item, "Unhandled offerings preview item");
128644
+ default: return assertNever$20(item, "Unhandled offerings preview item");
128705
128645
  }
128706
128646
  }
128707
128647
  function formatFeaturedSummary(summary, venue) {
@@ -128710,7 +128650,7 @@ function formatFeaturedSummary(summary, venue) {
128710
128650
  case "multi-day-span": return detailsFromOccurrences(summary.occurrence, summary.occurrence, venue, null, null, true);
128711
128651
  case "fixed-recurring-run": return detailsFromOccurrences(summary.first, summary.last, venue, summary.recurrenceLabel, null);
128712
128652
  case "irregular-multi-session-run": return detailsFromOccurrences(summary.first, summary.last, venue, null, `${summary.sessionCount} dates`);
128713
- default: return assertNever$21(summary, "Unhandled offerings preview schedule summary");
128653
+ default: return assertNever$20(summary, "Unhandled offerings preview schedule summary");
128714
128654
  }
128715
128655
  }
128716
128656
  function detailsFromOccurrences(first, last, venue, recurrence, sessionCount, spanUsesEndDate = false) {
@@ -129109,7 +129049,7 @@ function bookingActionContent(input) {
129109
129049
  children: input.buttonText
129110
129050
  });
129111
129051
  case "unavailable": return null;
129112
- default: return assertNever$21(input.booking);
129052
+ default: return assertNever$20(input.booking);
129113
129053
  }
129114
129054
  }
129115
129055
  function RecurringSchedule({ schedule, buttonText = "Book", buttonVariant = "primary", showVenue = true, emptyMessage = "Regular schedule details will be added shortly." }) {
@@ -130581,7 +130521,7 @@ function previewEditableTargetToPath(target) {
130581
130521
  case "current-entry-field":
130582
130522
  case "current-entry-metadata": return target.path;
130583
130523
  case "read-only": return;
130584
- default: return assertNever$21(target);
130524
+ default: return assertNever$20(target);
130585
130525
  }
130586
130526
  }
130587
130527
  function previewEditableTargetToFieldKey(target) {
@@ -131658,7 +131598,7 @@ function collectNestedPreviewFieldConstraintEntries(field, path) {
131658
131598
  case "text":
131659
131599
  case "time":
131660
131600
  case "url": return [];
131661
- default: return assertNever$21(field);
131601
+ default: return assertNever$20(field);
131662
131602
  }
131663
131603
  }
131664
131604
  function makeDefaultBlockComponent(args) {
@@ -132567,6 +132507,37 @@ function resolveColorTokenHex(theme, colorToken) {
132567
132507
  return expandPalette(theme.palette)[colorToken] ?? null;
132568
132508
  }
132569
132509
  //#endregion
132510
+ //#region ../theme-core/src/header/surfaceRules.ts
132511
+ init_shared$5();
132512
+ init_colorStyles();
132513
+ /** Compile the visual surface declarations independently of paint geometry. */
132514
+ function buildHeaderSurfaceRules(header, tokens, blur) {
132515
+ const base = [];
132516
+ const scrolled = [];
132517
+ const background = header.background;
132518
+ if (background.type === "color") base.push(`background-color: ${tokens.getColor(background.color || "surface")};`);
132519
+ else if (background.type === "gradient" && background.gradient) {
132520
+ const stops = background.gradient.stops.map((stop) => tokens.getColor(stop.color)).join(", ");
132521
+ base.push(`background-image: linear-gradient(${background.gradient.angle ?? 180}deg, ${stops});`);
132522
+ }
132523
+ const blurRules = [`backdrop-filter: ${blur};`, `-webkit-backdrop-filter: ${blur};`];
132524
+ base.push(...blurRules);
132525
+ scrolled.push(...blurRules);
132526
+ const borderWidth = getComponentBorderWidthPx(header.border?.width ?? "none");
132527
+ if (!header.border || borderWidth === "0") return {
132528
+ base,
132529
+ scrolled,
132530
+ border: []
132531
+ };
132532
+ const color = rgbColorValue(header.border.colorToken?.trim() || "border");
132533
+ const style = header.border.style === "dashed" ? "dashed" : "solid";
132534
+ return {
132535
+ base,
132536
+ scrolled,
132537
+ border: header.border.position === "both" ? [`border-top: ${borderWidth} ${style} ${color};`, `border-bottom: ${borderWidth} ${style} ${color};`] : [`border-${header.border.position}: ${borderWidth} ${style} ${color};`]
132538
+ };
132539
+ }
132540
+ //#endregion
132570
132541
  //#region ../theme-core/src/navigation/presets.ts
132571
132542
  /**
132572
132543
  * Built-in nav link style presets
@@ -132728,12 +132699,79 @@ function getNavLinkPreset(presetId) {
132728
132699
  }
132729
132700
  Object.keys(NAV_LINK_PRESETS);
132730
132701
  //#endregion
132702
+ //#region ../theme-core/src/header/legacyNavLinkStyle.ts
132703
+ function buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize) {
132704
+ const navStyle = header.navStyle ?? "minimal";
132705
+ const basePreset = getNavLinkPreset(navStyle);
132706
+ if (!basePreset) return null;
132707
+ const style = {
132708
+ ...basePreset,
132709
+ fontWeight: header.navWeight ?? basePreset.fontWeight,
132710
+ colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
132711
+ ...contrastTreatment ? { contrastTreatment } : {},
132712
+ ...navTextSize ? { textSize: navTextSize } : {}
132713
+ };
132714
+ if (header.navWeight === "bold" && navStyle === "solid") style.textTransform = "uppercase";
132715
+ applyLegacyNavEffects(style, header);
132716
+ applyLegacyGlassTreatment(style, header, navStyle);
132717
+ return style;
132718
+ }
132719
+ function applyLegacyNavEffects(style, header) {
132720
+ if (!header.navEffects) return;
132721
+ const effects = style.effects = {
132722
+ ...style.effects,
132723
+ hover: [...style.effects?.hover ?? []],
132724
+ active: [...style.effects?.active ?? []]
132725
+ };
132726
+ if (header.navEffects.glow) effects.hover.push({
132727
+ effectId: "outer-glow",
132728
+ options: { spread: 5 }
132729
+ });
132730
+ if (header.navEffects.neumorphic) {
132731
+ effects.hover.push({
132732
+ effectId: "neumorphic-shadow",
132733
+ options: { mode: "pressed" }
132734
+ });
132735
+ effects.hover.push({
132736
+ effectId: "text-color-change",
132737
+ options: { hoverColorToken: "primary" }
132738
+ });
132739
+ }
132740
+ if (header.navEffects.underlineGradient) effects.hover.push({
132741
+ effectId: "border-bottom-grow",
132742
+ options: { origin: "center" }
132743
+ });
132744
+ }
132745
+ function applyLegacyGlassTreatment(style, header, navStyle) {
132746
+ if (header.navContainer?.type !== "glass" || navStyle !== "minimal") return;
132747
+ style.borderRadius = "full";
132748
+ style.effects = {
132749
+ ...style.effects,
132750
+ hover: glassStateEffects(10),
132751
+ active: glassStateEffects(18)
132752
+ };
132753
+ }
132754
+ function glassStateEffects(opacity) {
132755
+ return [{
132756
+ effectId: "background-on-hover-alpha",
132757
+ options: {
132758
+ colorToken: "neutral-50",
132759
+ opacity
132760
+ }
132761
+ }, {
132762
+ effectId: "text-color-change",
132763
+ options: { hoverColorToken: "neutral-50" }
132764
+ }];
132765
+ }
132766
+ //#endregion
132731
132767
  //#region ../theme-core/src/header/generateHeaderCss.ts
132732
132768
  init_resolver$1();
132733
132769
  init_siteChromeNavPreferences();
132734
132770
  init_shared$5();
132735
132771
  init_breakpoints();
132736
132772
  init_navDropdownSizing();
132773
+ init_scrollTreatment();
132774
+ init_paintTargets();
132737
132775
  const HEADER_BLUR = "blur(12px)";
132738
132776
  const FLOATING_BLUR = "blur(16px)";
132739
132777
  const INSET_SHELL_MARKER_CLASS = "header-bar-frame-inset-shell";
@@ -132761,8 +132799,8 @@ function generateHeaderCss(options) {
132761
132799
  const cssChunks = [];
132762
132800
  const headerContrastTreatment = resolveHeaderContrastTreatment(header);
132763
132801
  const headerNavTextSize = resolveHeaderNavTextSize(header);
132764
- cssChunks.push(generateHeaderRootStyles(header, themeId, tokens, theme));
132765
- cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId));
132802
+ cssChunks.push(generateHeaderRootStyles(header, themeId, tokens));
132803
+ cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId, header.variant));
132766
132804
  cssChunks.push(generateLogoStyles({
132767
132805
  logo: header.logo,
132768
132806
  themeId,
@@ -132800,56 +132838,34 @@ function isClearSplitHeaderShape(header) {
132800
132838
  function isDetachedFloatingHeaderShape(header) {
132801
132839
  return header.variant === "floating" && !header.container;
132802
132840
  }
132803
- function generateMobileOverlayBackdropFilterFix(themeId) {
132804
- 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`;
132805
- }
132806
132841
  /**
132807
132842
  * Generate root header container styles
132808
132843
  */
132809
- function generateHeaderRootStyles(header, themeId, tokens, _theme) {
132844
+ function generateHeaderRootStyles(header, themeId, tokens) {
132810
132845
  const selector = `:where([data-theme-scope="${themeId}"]) .header-root`;
132811
- const backgroundSelector = `:where([data-theme-scope="${themeId}"]) .header-root::before`;
132812
132846
  const rules = [];
132813
- const backgroundRules = [];
132814
132847
  const navContainerType = header.navContainer?.type ?? "none";
132815
132848
  const isContainedNav = navContainerType === "pill" || navContainerType === "glass";
132816
132849
  rules.push("position: relative;");
132817
132850
  rules.push("isolation: isolate;");
132818
- if (!isContainedNav) {
132819
- const bg = header.background;
132820
- if (bg.type === "color") {
132821
- const bgColor = tokens.getColor(bg.color || "surface");
132822
- backgroundRules.push(`background-color: ${bgColor};`);
132823
- } else if (bg.type === "gradient" && bg.gradient) {
132824
- const stops = bg.gradient.stops.map((s) => tokens.getColor(s.color)).join(", ");
132825
- const angle = bg.gradient.angle ?? 180;
132826
- backgroundRules.push(`background-image: linear-gradient(${angle}deg, ${stops});`);
132827
- }
132828
- backgroundRules.push(`backdrop-filter: ${HEADER_BLUR};`);
132829
- backgroundRules.push(`-webkit-backdrop-filter: ${HEADER_BLUR};`);
132830
- if (header.border) {
132831
- const borderWidth = getComponentBorderWidthPx(header.border.width);
132832
- if (borderWidth !== "0") {
132833
- const borderToken = header.border?.colorToken?.trim() || "border";
132834
- const borderColor = tokens.getColor(borderToken);
132835
- const borderStyle = header.border.style === "dashed" ? "dashed" : "solid";
132836
- if (header.border.position === "bottom") rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`);
132837
- else if (header.border.position === "top") rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`);
132838
- else if (header.border.position === "both") {
132839
- rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`);
132840
- rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`);
132841
- }
132842
- }
132843
- }
132844
- }
132851
+ const surfaceRules = isContainedNav ? {
132852
+ base: [],
132853
+ scrolled: [],
132854
+ border: []
132855
+ } : buildHeaderSurfaceRules(header, tokens, HEADER_BLUR);
132856
+ const floatingSurfaceBorder = header.variant === "floating";
132857
+ if (!floatingSurfaceBorder) rules.push(...surfaceRules.border);
132858
+ const basePaintRules = floatingSurfaceBorder ? [...surfaceRules.base, ...surfaceRules.border] : surfaceRules.base;
132859
+ const scrolledPaintRules = floatingSurfaceBorder ? [...surfaceRules.scrolled, ...surfaceRules.border] : surfaceRules.scrolled;
132845
132860
  if (header.positioning === "sticky" || header.positioning === "fixed") {
132846
132861
  const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
132847
132862
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
132848
132863
  }
132849
132864
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
132850
132865
  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`;
132851
- if (isContainedNav || backgroundRules.length === 0) return `${baseBlock}\n${overlayFix}`;
132852
- 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) : ""}`;
132866
+ const scrollTreatmentStyles = generateHeaderScrollTreatmentStyles(header.scrollTreatment, themeId, header.variant, scrolledPaintRules);
132867
+ if (isContainedNav || basePaintRules.length === 0) return `${baseBlock}\n${overlayFix}${scrollTreatmentStyles}`;
132868
+ return `${baseBlock}\n${renderHeaderPaintTargetRules(getHeaderPaintTargets(header.variant, themeId), basePaintRules)}\n${overlayFix}${usesInsetShell(header) ? generateInsetShellStyles(header, themeId) : ""}${scrollTreatmentStyles}`;
132853
132869
  }
132854
132870
  /**
132855
132871
  * Reshapes the full-bleed header paint layer into a contained brand capsule at
@@ -132894,10 +132910,10 @@ function generateLogoStyles(input) {
132894
132910
  else rules.push(`font-family: var(--font-heading);`);
132895
132911
  if (logo) {
132896
132912
  if (logo.letterSpacing && logo.letterSpacing !== "normal") rules.push(`letter-spacing: ${{
132897
- "normal": "0em",
132898
- "wide": "0.05em",
132899
- "wider": "0.1em",
132900
- "widest": "0.15em"
132913
+ normal: "0em",
132914
+ wide: "0.05em",
132915
+ wider: "0.1em",
132916
+ widest: "0.15em"
132901
132917
  }[logo.letterSpacing]};`);
132902
132918
  if (logo.gradient) {
132903
132919
  rules.push(`background: linear-gradient(to right, ${primaryColor}, ${accentColor});`);
@@ -132970,71 +132986,11 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
132970
132986
  } : header.navLinkStyle, navPreferences),
132971
132987
  className: "header-nav-link"
132972
132988
  });
132973
- const navStyle = header.navStyle ?? "minimal";
132974
- const basePreset = getNavLinkPreset(navStyle);
132975
- if (!basePreset) {
132976
- console.warn(`[generateHeaderCss] Nav link preset not found: ${navStyle}`);
132989
+ const mergedStyle = buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize);
132990
+ if (!mergedStyle) {
132991
+ console.warn(`[generateHeaderCss] Nav link preset not found: ${header.navStyle}`);
132977
132992
  return "";
132978
132993
  }
132979
- const mergedStyle = {
132980
- ...basePreset,
132981
- fontWeight: header.navWeight ?? basePreset.fontWeight,
132982
- colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
132983
- ...contrastTreatment ? { contrastTreatment } : {},
132984
- ...navTextSize ? { textSize: navTextSize } : {}
132985
- };
132986
- if (header.navWeight === "bold" && navStyle === "solid") mergedStyle.textTransform = "uppercase";
132987
- if (header.navEffects) {
132988
- const effects = mergedStyle.effects = {
132989
- ...mergedStyle.effects,
132990
- hover: [...mergedStyle.effects?.hover || []],
132991
- active: [...mergedStyle.effects?.active || []]
132992
- };
132993
- if (header.navEffects.glow) effects.hover.push({
132994
- effectId: "outer-glow",
132995
- options: { spread: 5 }
132996
- });
132997
- if (header.navEffects.neumorphic) {
132998
- effects.hover.push({
132999
- effectId: "neumorphic-shadow",
133000
- options: { mode: "pressed" }
133001
- });
133002
- effects.hover.push({
133003
- effectId: "text-color-change",
133004
- options: { hoverColorToken: "primary" }
133005
- });
133006
- }
133007
- if (header.navEffects.underlineGradient) effects.hover.push({
133008
- effectId: "border-bottom-grow",
133009
- options: { origin: "center" }
133010
- });
133011
- }
133012
- if ((header.navContainer?.type ?? "none") === "glass" && navStyle === "minimal") {
133013
- mergedStyle.borderRadius = "full";
133014
- mergedStyle.effects = {
133015
- ...mergedStyle.effects,
133016
- hover: [{
133017
- effectId: "background-on-hover-alpha",
133018
- options: {
133019
- colorToken: "neutral-50",
133020
- opacity: 10
133021
- }
133022
- }, {
133023
- effectId: "text-color-change",
133024
- options: { hoverColorToken: "neutral-50" }
133025
- }],
133026
- active: [{
133027
- effectId: "background-on-hover-alpha",
133028
- options: {
133029
- colorToken: "neutral-50",
133030
- opacity: 18
133031
- }
133032
- }, {
133033
- effectId: "text-color-change",
133034
- options: { hoverColorToken: "neutral-50" }
133035
- }]
133036
- };
133037
- }
133038
132994
  return generateNavLinkCSS({
133039
132995
  themeId,
133040
132996
  tokens,
@@ -133062,10 +133018,10 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
133062
133018
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
133063
133019
  const borderRadius = dropdownStyle?.borderRadius ?? "md";
133064
133020
  rules.push(`border-radius: ${{
133065
- "none": "0",
133066
- "sm": "0.25rem",
133067
- "md": "0.5rem",
133068
- "lg": "0.75rem"
133021
+ none: "0",
133022
+ sm: "0.25rem",
133023
+ md: "0.5rem",
133024
+ lg: "0.75rem"
133069
133025
  }[borderRadius]};`);
133070
133026
  rules.push(`padding: 0.5rem 0;`);
133071
133027
  return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
@@ -133120,16 +133076,16 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
133120
133076
  const additionalRules = [];
133121
133077
  const letterSpacing = configuredDropdownStyle?.letterSpacing ?? "normal";
133122
133078
  if (letterSpacing !== "normal") additionalRules.push(`letter-spacing: ${{
133123
- "normal": "0em",
133124
- "wide": "0.05em",
133125
- "wider": "0.1em"
133079
+ normal: "0em",
133080
+ wide: "0.05em",
133081
+ wider: "0.1em"
133126
133082
  }[letterSpacing]};`);
133127
133083
  const textSize = configuredDropdownStyle?.textSize ?? "sm";
133128
133084
  additionalRules.push(`font-size: ${{
133129
- "xs": "0.75rem",
133130
- "sm": "0.875rem",
133131
- "base": "1rem",
133132
- "lg": "1.125rem"
133085
+ xs: "0.75rem",
133086
+ sm: "0.875rem",
133087
+ base: "1rem",
133088
+ lg: "1.125rem"
133133
133089
  }[textSize]};`);
133134
133090
  if (additionalRules.length > 0) return baseCSS + `\n${`:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`} {\n ${additionalRules.join("\n ")}\n}\n`;
133135
133091
  return baseCSS;
@@ -133225,18 +133181,18 @@ function generateFloatingContainerStyles(header, themeId, tokens) {
133225
133181
  rules.push(`-webkit-backdrop-filter: ${FLOATING_BLUR};`);
133226
133182
  if (container.border) rules.push(`border: 1px solid rgb(255 255 255 / 0.2);`);
133227
133183
  rules.push(`border-radius: ${{
133228
- "none": "0",
133229
- "sm": "0.375rem",
133230
- "md": "0.5rem",
133231
- "lg": "0.75rem",
133232
- "xl": "1rem",
133184
+ none: "0",
133185
+ sm: "0.375rem",
133186
+ md: "0.5rem",
133187
+ lg: "0.75rem",
133188
+ xl: "1rem",
133233
133189
  "2xl": "1.5rem"
133234
133190
  }[container.rounded]};`);
133235
133191
  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);`);
133236
133192
  rules.push(`padding: ${{
133237
- "sm": "1rem 1.5rem",
133238
- "md": "1.5rem 2rem",
133239
- "lg": "2rem 2.5rem"
133193
+ sm: "1rem 1.5rem",
133194
+ md: "1.5rem 2rem",
133195
+ lg: "2rem 2.5rem"
133240
133196
  }[container.padding]};`);
133241
133197
  return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
133242
133198
  }
@@ -135853,7 +135809,7 @@ function sourceLabel(source) {
135853
135809
  case "managed-database": return "DB";
135854
135810
  case "sdk-synced": return "SDK-synced DB";
135855
135811
  case "sdk-config": return "SDK config";
135856
- default: return assertNever$21(source);
135812
+ default: return assertNever$20(source);
135857
135813
  }
135858
135814
  }
135859
135815
  //#endregion
@@ -149625,7 +149581,7 @@ function renderWithSdkThemeRuntime({ themeRuntime, theme, children }) {
149625
149581
  children
149626
149582
  });
149627
149583
  case "none": return /* @__PURE__ */ jsx(Fragment, { children });
149628
- default: return assertNever$21(themeRuntime);
149584
+ default: return assertNever$20(themeRuntime);
149629
149585
  }
149630
149586
  }
149631
149587
  //#endregion
@@ -150798,6 +150754,9 @@ function normalizeLoaderParams(endpoint, params, context) {
150798
150754
  init_RichText();
150799
150755
  const RichText$1 = RichText$2;
150800
150756
  //#endregion
150757
+ //#region ../blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.ts
150758
+ init_src$2();
150759
+ //#endregion
150801
150760
  //#region ../blocks/src/system/helpers/resolveBackground.tsx
150802
150761
  /**
150803
150762
  * Helper utilities for resolving background data in custom block components.
@@ -152317,7 +152276,7 @@ function navigationAuthoringLinkToCommandLink(link) {
152317
152276
  badge: link.badge,
152318
152277
  label: link.label
152319
152278
  };
152320
- default: return assertNever$21(link);
152279
+ default: return assertNever$20(link);
152321
152280
  }
152322
152281
  }
152323
152282
  function portalLabelsForCommand(labels) {
@@ -152360,7 +152319,7 @@ function navigationReadLinkToLocalLink(item) {
152360
152319
  badge: link.badge,
152361
152320
  label: link.label
152362
152321
  };
152363
- default: return assertNever$21(link);
152322
+ default: return assertNever$20(link);
152364
152323
  }
152365
152324
  }
152366
152325
  function internalNavigationLinkToLocalLink(item) {