@riverbankcms/sdk 0.126.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 (126) hide show
  1. package/dist/{PreviewEditorSidebar-DcYJxTgc.mjs → PreviewEditorSidebar-BXtfF7tp.mjs} +58 -38
  2. package/dist/{PreviewEditorUI-Ctt1yTJr.mjs → PreviewEditorUI-Dou73Q0K.mjs} +2 -2
  3. package/dist/{SdkPreviewModeRuntime-CvW1vdQ4.mjs → SdkPreviewModeRuntime-B0HPXr-l.mjs} +119 -41
  4. package/dist/{SiteChromeCustomizeContext-C87qlKWw.mjs → SiteChromeCustomizeContext-DZiDBAYu.mjs} +9961 -9583
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +198 -0
  6. package/dist/_dts/api/src/contentRuntime.d.ts +1 -5
  7. package/dist/_dts/block-form/src/backend/store-backend.d.ts +2 -1
  8. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +1 -0
  9. package/dist/_dts/blocks/src/index.d.ts +3 -2
  10. package/dist/_dts/blocks/src/lib/media.d.ts +267 -0
  11. package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +0 -13
  12. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +4 -4
  13. package/dist/_dts/blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.d.ts +7 -0
  14. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  15. package/dist/_dts/content-editor/src/ui/blockValidationManifestRegistry.d.ts +17 -0
  16. package/dist/_dts/content-editor/src/ui/blockValidationView.d.ts +1 -1
  17. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +4 -0
  18. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +143 -155
  19. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +4 -0
  20. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockValidationManifests.d.ts +26 -0
  21. package/dist/_dts/editor-blocks/src/widgets/rich-text/imageInsert.d.ts +3 -3
  22. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -2
  23. package/dist/_dts/media-editor/src/context.d.ts +1 -2
  24. package/dist/_dts/media-editor/src/index.d.ts +3 -1
  25. package/dist/_dts/media-editor/src/mediaSelection.d.ts +32 -0
  26. package/dist/_dts/media-editor/src/types.d.ts +3 -1
  27. package/dist/_dts/media-editor/src/useMediaSelection.d.ts +26 -0
  28. package/dist/_dts/preview-next/src/client/index.d.ts +2 -0
  29. package/dist/_dts/preview-next/src/client/preview/HeaderMenuControls.d.ts +12 -0
  30. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +12 -1
  31. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +7 -1
  32. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -49
  33. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +8 -0
  34. package/dist/_dts/preview-next/src/client/preview/previewThemeRoles.d.ts +15 -0
  35. package/dist/_dts/preview-next/src/client/preview/siteChromeCustomizeTypes.d.ts +54 -0
  36. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +13 -3
  37. package/dist/_dts/preview-next/src/client/preview/siteChromeNavQuickControlHistory.d.ts +3 -0
  38. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +6 -3
  39. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -2
  40. package/dist/_dts/sdk/src/version.d.ts +1 -1
  41. package/dist/_dts/theme-core/src/buttons/effects/presets/background.d.ts +1 -1
  42. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +0 -18
  43. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -3
  44. package/dist/_dts/theme-core/src/header/containerSchema.d.ts +20 -0
  45. package/dist/_dts/theme-core/src/header/generateHeaderCss.d.ts +1 -1
  46. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +14 -0
  47. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +3 -0
  48. package/dist/_dts/theme-core/src/header/paintTargets.d.ts +25 -0
  49. package/dist/_dts/theme-core/src/header/scrollTreatment.d.ts +11 -0
  50. package/dist/_dts/theme-core/src/header/surfaceRules.d.ts +9 -0
  51. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +15 -0
  52. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  53. package/dist/_dts/theme-core/src/schema.d.ts +67 -19
  54. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +3 -51
  55. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +4 -11
  56. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +3 -51
  57. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +32 -0
  58. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +19 -106
  59. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +22 -0
  60. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +2 -0
  61. package/dist/_dts/theme-core/src/site-styles/headerStyleParts.d.ts +4 -0
  62. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  63. package/dist/_dts/theme-core/src/site-styles/lookOptionGroups.d.ts +24 -0
  64. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +1 -2
  65. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +4 -22
  66. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorOptions.d.ts +21 -0
  67. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  68. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +4 -1
  69. package/dist/cli/index.mjs +973 -1081
  70. package/dist/client/{DiscountCodeDisclosure-DS0AuFWW.mjs → DiscountCodeDisclosure-BDFRp8Y7.mjs} +1 -1
  71. package/dist/client/{EventCombined.client-DtMxLr7q.mjs → EventCombined.client-DJgF1_lf.mjs} +2 -2
  72. package/dist/client/{EventListing.client-BdLSRNg1.mjs → EventListing.client-CnWGNjOr.mjs} +2 -2
  73. package/dist/client/{LeafletStaticMap-BrpC6vsT.mjs → LeafletStaticMap-BISs9Bl7.mjs} +1 -1
  74. package/dist/client/{MagicLinkForm-Bt3IuLMy.mjs → MagicLinkForm-b5E_HoG9.mjs} +1 -1
  75. package/dist/client/{StepIndicator-CBYPFVoy.mjs → StepIndicator-D8gVYkK-.mjs} +2 -2
  76. package/dist/client/{accordion-BqqwPJWM.mjs → accordion-DFDajgDz.mjs} +1 -1
  77. package/dist/client/{bookingForm-SneP3yxC.mjs → bookingForm-Bdqj9-52.mjs} +5 -5
  78. package/dist/client/bookings.mjs +126 -23
  79. package/dist/client/{carousel-BTIR9L3I.mjs → carousel-Cvqf-kN8.mjs} +1 -1
  80. package/dist/client/{cart-bqiqd8SX.mjs → cart-CuH2TJXP.mjs} +3 -3
  81. package/dist/client/{checkout-WbTFV5v4.mjs → checkout-CMNPpejZ.mjs} +3 -3
  82. package/dist/client/client.mjs +1227 -1209
  83. package/dist/client/{courseRegistration-BcemLAdN.mjs → courseRegistration-DTEYWL6Z.mjs} +6 -6
  84. package/dist/client/{eventCalendar-CsxIw0V_.mjs → eventCalendar-BW-XoxZ0.mjs} +4 -4
  85. package/dist/client/{eventCombined-B6XMoHfa.mjs → eventCombined-Bpn7s0y9.mjs} +2 -2
  86. package/dist/client/{eventDetails-BJaoPPfo.mjs → eventDetails-D2uUSTMH.mjs} +3 -3
  87. package/dist/client/{eventListing-DgwdYHRT.mjs → eventListing-CVr1c094.mjs} +2 -2
  88. package/dist/client/{eventRegistration-C0O3folu.mjs → eventRegistration-Dv4AvkMw.mjs} +6 -6
  89. package/dist/client/{form-Bk9txGFt.mjs → form-DxdKf9fs.mjs} +1 -1
  90. package/dist/client/{headerSection-yIBt0yTv.mjs → headerSection-BaXI5Sro.mjs} +2 -2
  91. package/dist/client/hooks.mjs +801 -874
  92. package/dist/client/{locationMap-C-3KIpv-.mjs → locationMap-BEtW2fKz.mjs} +2 -2
  93. package/dist/client/{newsletterForm-CzB8g8h2.mjs → newsletterForm-BKKs0S4R.mjs} +1 -1
  94. package/dist/client/{pricing-C1QeDes_.mjs → pricing-ClkqcElA.mjs} +1 -1
  95. package/dist/client/{productDetail-w7SBp5uc.mjs → productDetail-H-ru8dyy.mjs} +3 -3
  96. package/dist/client/{productList-D0tGKHGf.mjs → productList-Buyi5c0C.mjs} +3 -3
  97. package/dist/client/{propsDecoder-Bcin2DB3.mjs → propsDecoder-BF7i6Ijg.mjs} +127 -55
  98. package/dist/client/rendering/client.mjs +928 -916
  99. package/dist/client/rendering/islands.mjs +18 -18
  100. package/dist/client/rendering.mjs +1130 -1114
  101. package/dist/client/{scrollToBlock-h-o_STf_.mjs → scrollToBlock-D_7t8yWb.mjs} +1 -1
  102. package/dist/client/{shop-BGzmL8O_.mjs → shop-CF7SZQNX.mjs} +5 -5
  103. package/dist/client/{shop-commerce-lX8QxjX-.mjs → shop-commerce-DA7_Rq5p.mjs} +4 -4
  104. package/dist/client/{shop-commerce-store-CEurARtu.mjs → shop-commerce-store-BmLqW7Gh.mjs} +1 -1
  105. package/dist/client/{shopShared-DXxH8xxw.mjs → shopShared-WL-E1znM.mjs} +2 -2
  106. package/dist/client/{useEventFilters-B591g9vd.mjs → useEventFilters-rc8VLeLV.mjs} +2 -2
  107. package/dist/client/{usePolling-BvnChV4m.mjs → usePolling-1ncrfd4S.mjs} +2 -2
  108. package/dist/preview-next/client/runtime.mjs +3 -3
  109. package/dist/{sdk-runtime-M__i3Jce.mjs → sdk-runtime-BnrCCFJq.mjs} +1 -1
  110. package/dist/{separator-VSlnI9bc.mjs → separator-CFvBx2yl.mjs} +1 -1
  111. package/dist/server/components.mjs +1302 -1350
  112. package/dist/server/config-validation.mjs +801 -874
  113. package/dist/server/config.mjs +801 -874
  114. package/dist/server/data.mjs +801 -874
  115. package/dist/server/index.mjs +1 -1
  116. package/dist/server/next.mjs +1303 -1351
  117. package/dist/server/page-converter.mjs +801 -874
  118. package/dist/server/prebuild.mjs +1 -1
  119. package/dist/server/rendering/server.mjs +1296 -1344
  120. package/dist/server/rendering.mjs +1302 -1350
  121. package/dist/server/routing.mjs +869 -895
  122. package/dist/server/server.mjs +802 -875
  123. package/dist/server/theme-bridge.mjs +151 -118
  124. package/dist/server/theme.mjs +111 -23
  125. package/package.json +1 -1
  126. package/dist/_dts/editor-blocks/src/widgets/rich-text/ensureRichTextImageAssetIdentifier.d.ts +0 -8
@@ -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
@@ -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
@@ -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
@@ -6723,7 +6625,7 @@ function canonicalPaletteHashInput(colors, mode) {
6723
6625
  return `${mode}|${paletteColorFingerprint(colors)}`;
6724
6626
  }
6725
6627
  /**
6726
- * The shared TypeScript/SQL protocol. Do not reorder roles: the order comes
6628
+ * Stable curated-catalogue identity. Do not reorder roles: the order comes
6727
6629
  * from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
6728
6630
  */
6729
6631
  function paletteValueKey(colors, mode) {
@@ -8384,6 +8286,47 @@ var init_backgroundAppearance = __esmMin((() => {
8384
8286
  var init_compositionBudget = __esmMin((() => {
8385
8287
  init_types$14();
8386
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
+ }));
8387
8330
  var init_customizableSurfaces = __esmMin((() => {
8388
8331
  init_types$14();
8389
8332
  })), logoTextConfidenceValues, logoAssetShapeValues, logoKindValues, logoDensityValues, logoContainsTextSchema, logoAnalysisSourceSchema, brandDisplayModeValues, logoAccommodationPatternValues, logoSizePolicyValues;
@@ -8494,7 +8437,7 @@ function asHeaderStyleId(value) {
8494
8437
  * optional nested styling fields that would otherwise leak from another Look.
8495
8438
  */
8496
8439
  function baseHeader(theme) {
8497
- 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;
8498
8441
  return {
8499
8442
  ...header,
8500
8443
  navContainer: {
@@ -8853,12 +8796,12 @@ function floatingGlassHeader(theme) {
8853
8796
  }
8854
8797
  };
8855
8798
  }
8856
- function headerConfigurationKey(configuration) {
8857
- return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
8858
- }
8859
8799
  var titleOnlyLogoAccommodation, inlineWordmarkLogoAccommodation, inlineMarkWithTitleLogoAccommodation, logoPlateAccommodation, centeredBadgeAccommodation, popoutBadgeAccommodation, centeredMastheadAccommodation, unbackedOverlayLogoAccommodation, inlineClassicLogoAccommodations, centeredLogoAccommodations, overlayLogoAccommodations, headerLayoutCatalog, headerStyleCatalog, headerStylesById, headerStyleCompatibilityOrder, legacyHeaderLookAliases, legacyHeaderLookAliasesById, headerLookCatalog;
8860
8800
  var init_headerLooks = __esmMin((() => {
8861
8801
  init_headerCtaVariants();
8802
+ init_headerStyleParts();
8803
+ init_headerInteractionPalette();
8804
+ init_headerOpeningForeground();
8862
8805
  init_customizableSurfaces();
8863
8806
  init_logoBranding();
8864
8807
  init_types$14();
@@ -8985,7 +8928,6 @@ var init_headerLooks = __esmMin((() => {
8985
8928
  id: asHeaderLayoutId("classic"),
8986
8929
  label: "Classic",
8987
8930
  description: "Logo and navigation in one practical horizontal row.",
8988
- structure: "inline-classic",
8989
8931
  variant: "classic",
8990
8932
  defaultPositioning: "sticky",
8991
8933
  shrinkOnScroll: false
@@ -8994,7 +8936,6 @@ var init_headerLooks = __esmMin((() => {
8994
8936
  id: asHeaderLayoutId("centered"),
8995
8937
  label: "Centered",
8996
8938
  description: "Logo centered above a balanced navigation row.",
8997
- structure: "centered-stack",
8998
8939
  variant: "centered",
8999
8940
  defaultPositioning: "static",
9000
8941
  shrinkOnScroll: false,
@@ -9010,7 +8951,6 @@ var init_headerLooks = __esmMin((() => {
9010
8951
  id: asHeaderLayoutId("floating"),
9011
8952
  label: "Floating",
9012
8953
  description: "Detached header chrome that sits over the opening section.",
9013
- structure: "floating-shell",
9014
8954
  variant: "floating",
9015
8955
  defaultPositioning: "sticky",
9016
8956
  shrinkOnScroll: true,
@@ -9169,10 +9109,13 @@ var init_headerLooks = __esmMin((() => {
9169
9109
  label: "Clear Split",
9170
9110
  description: "Floating logo with transparent navigation and no shared shell.",
9171
9111
  supportedLayoutIds: supportedLayouts(["floating"]),
9172
- navInteraction: "color-change",
9112
+ navInteraction: "pill-background",
9173
9113
  surface: "floating",
9174
- defaultDepth: "none",
9114
+ defaultDepth: "line",
9175
9115
  navTypography: "plain",
9116
+ openingForegroundTarget: "all",
9117
+ scrollTreatment: "contrast-glass",
9118
+ interactionPalette: clearSplitInteractionPalette,
9176
9119
  moods: ["editorial", "calm"]
9177
9120
  },
9178
9121
  {
@@ -9195,6 +9138,7 @@ var init_headerLooks = __esmMin((() => {
9195
9138
  surface: "floating",
9196
9139
  defaultDepth: "shadow",
9197
9140
  navTypography: "quiet-caps",
9141
+ openingForegroundTarget: "brand-only",
9198
9142
  moods: ["expressive"]
9199
9143
  },
9200
9144
  {
@@ -9206,6 +9150,7 @@ var init_headerLooks = __esmMin((() => {
9206
9150
  surface: "floating",
9207
9151
  defaultDepth: "shadow",
9208
9152
  navTypography: "heading",
9153
+ openingForegroundTarget: "brand-only",
9209
9154
  moods: ["calm", "editorial"]
9210
9155
  }
9211
9156
  ]);
@@ -9361,13 +9306,6 @@ var init_headerLooks = __esmMin((() => {
9361
9306
  {
9362
9307
  id: asHeaderLookId("clean-base"),
9363
9308
  label: "Clean base",
9364
- visualTreatment: "solid-neutral",
9365
- layoutBehavior: "sticky",
9366
- configuration: {
9367
- structure: "inline-classic",
9368
- treatment: "solid-neutral",
9369
- behavior: "sticky"
9370
- },
9371
9309
  openingRequirement: "none",
9372
9310
  logoAccommodations: inlineClassicLogoAccommodations,
9373
9311
  compile: cleanBaseHeader
@@ -9375,13 +9313,6 @@ var init_headerLooks = __esmMin((() => {
9375
9313
  {
9376
9314
  id: asHeaderLookId("classic-centered-nav"),
9377
9315
  label: "Centered nav",
9378
- visualTreatment: "solid-neutral",
9379
- layoutBehavior: "sticky",
9380
- configuration: {
9381
- structure: "inline-classic",
9382
- treatment: "solid-neutral",
9383
- behavior: "sticky"
9384
- },
9385
9316
  openingRequirement: "none",
9386
9317
  maxRecommendedNavItems: 6,
9387
9318
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -9390,13 +9321,6 @@ var init_headerLooks = __esmMin((() => {
9390
9321
  {
9391
9322
  id: asHeaderLookId("brand-solid"),
9392
9323
  label: "Brand solid",
9393
- visualTreatment: "solid-brand",
9394
- layoutBehavior: "sticky-shrink",
9395
- configuration: {
9396
- structure: "inline-classic",
9397
- treatment: "solid-brand",
9398
- behavior: "sticky-shrink"
9399
- },
9400
9324
  openingRequirement: "none",
9401
9325
  logoAccommodations: inlineClassicLogoAccommodations,
9402
9326
  compile: solidBrandHeader
@@ -9404,13 +9328,6 @@ var init_headerLooks = __esmMin((() => {
9404
9328
  {
9405
9329
  id: asHeaderLookId("serif-line"),
9406
9330
  label: "Serif line",
9407
- visualTreatment: "light-serif",
9408
- layoutBehavior: "sticky",
9409
- configuration: {
9410
- structure: "centered-stack",
9411
- treatment: "light-serif",
9412
- behavior: "sticky"
9413
- },
9414
9331
  openingRequirement: "none",
9415
9332
  maxRecommendedNavItems: 6,
9416
9333
  logoAccommodations: centeredLogoAccommodations,
@@ -9419,13 +9336,6 @@ var init_headerLooks = __esmMin((() => {
9419
9336
  {
9420
9337
  id: asHeaderLookId("centered-calm"),
9421
9338
  label: "Centered calm",
9422
- visualTreatment: "light-serif",
9423
- layoutBehavior: "normal-flow",
9424
- configuration: {
9425
- structure: "centered-stack",
9426
- treatment: "light-serif",
9427
- behavior: "normal-flow"
9428
- },
9429
9339
  openingRequirement: "none",
9430
9340
  maxRecommendedNavItems: 5,
9431
9341
  logoAccommodations: centeredLogoAccommodations,
@@ -9434,13 +9344,6 @@ var init_headerLooks = __esmMin((() => {
9434
9344
  {
9435
9345
  id: asHeaderLookId("practical-utility"),
9436
9346
  label: "Practical utility",
9437
- visualTreatment: "solid-neutral",
9438
- layoutBehavior: "sticky-shrink",
9439
- configuration: {
9440
- structure: "inline-classic",
9441
- treatment: "solid-neutral",
9442
- behavior: "sticky-shrink"
9443
- },
9444
9347
  openingRequirement: "none",
9445
9348
  requiresProminentCta: true,
9446
9349
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -9449,13 +9352,6 @@ var init_headerLooks = __esmMin((() => {
9449
9352
  {
9450
9353
  id: asHeaderLookId("minimal-transparent"),
9451
9354
  label: "Minimal transparent",
9452
- visualTreatment: "minimal-transparent",
9453
- layoutBehavior: "normal-flow",
9454
- configuration: {
9455
- structure: "inline-classic",
9456
- treatment: "minimal-transparent",
9457
- behavior: "normal-flow"
9458
- },
9459
9355
  openingRequirement: "reserved-space-ok",
9460
9356
  logoAccommodations: inlineClassicLogoAccommodations,
9461
9357
  compile: minimalTransparentHeader
@@ -9463,13 +9359,6 @@ var init_headerLooks = __esmMin((() => {
9463
9359
  {
9464
9360
  id: asHeaderLookId("transparent-overlay"),
9465
9361
  label: "Transparent overlay",
9466
- visualTreatment: "transparent-overlay",
9467
- layoutBehavior: "fixed-overlay",
9468
- configuration: {
9469
- structure: "inline-classic",
9470
- treatment: "transparent-overlay",
9471
- behavior: "fixed-overlay"
9472
- },
9473
9362
  openingRequirement: "requires-image-hero-with-contrast-overlay",
9474
9363
  maxRecommendedNavItems: 5,
9475
9364
  logoAccommodations: overlayLogoAccommodations,
@@ -9478,20 +9367,12 @@ var init_headerLooks = __esmMin((() => {
9478
9367
  {
9479
9368
  id: asHeaderLookId("floating-glass"),
9480
9369
  label: "Floating glass",
9481
- visualTreatment: "floating-glass",
9482
- layoutBehavior: "fixed-floating",
9483
- configuration: {
9484
- structure: "floating-shell",
9485
- treatment: "floating-glass",
9486
- behavior: "fixed-floating"
9487
- },
9488
9370
  openingRequirement: "requires-image-hero-with-contrast-overlay",
9489
9371
  maxRecommendedNavItems: 5,
9490
9372
  logoAccommodations: overlayLogoAccommodations,
9491
9373
  compile: floatingGlassHeader
9492
9374
  }
9493
9375
  ]);
9494
- new Set(headerLookCatalog.map((look) => headerConfigurationKey(look.configuration)));
9495
9376
  new Map(headerLookCatalog.map((look) => [look.id, look]));
9496
9377
  }));
9497
9378
  var init_compilationPlan = __esmMin((() => {
@@ -9737,11 +9618,9 @@ var init_types$11 = __esmMin((() => {
9737
9618
  "secondary",
9738
9619
  "outline",
9739
9620
  "ghost",
9740
- "link",
9741
- "tertiary",
9742
9621
  "accent"
9743
9622
  ];
9744
- 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" });
9745
9624
  DEFAULT_VARIANT_ALIAS_ID = "default";
9746
9625
  opaqueButtonColourTokenSchema = themeColorTokenSchema.refine((value) => parseOpaqueButtonColourToken(value) !== null, "Button colour tokens must be opaque").transform((value) => {
9747
9626
  const token = parseOpaqueButtonColourToken(value);
@@ -13679,20 +13558,61 @@ var init_generateBaseCSS = __esmMin((() => {
13679
13558
  };
13680
13559
  }));
13681
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
13682
13603
  //#region ../theme-core/src/buttons/effects/presets/background.ts
13683
- var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
13684
- var init_background$2 = __esmMin((() => {
13685
- darkenBackgroundEffect = {
13686
- id: "darken-background",
13687
- name: "Darken on Hover",
13688
- 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,
13689
13609
  category: "background",
13690
13610
  pseudoElement: "none",
13691
13611
  applicableTo: ["button"],
13692
13612
  customizableOption: {
13693
13613
  name: "amount",
13694
13614
  type: "select",
13695
- label: "Darken Amount (shade step)",
13615
+ label: config.label,
13696
13616
  default: 100,
13697
13617
  options: [
13698
13618
  0,
@@ -13707,63 +13627,36 @@ var init_background$2 = __esmMin((() => {
13707
13627
  900
13708
13628
  ]
13709
13629
  },
13710
- isApplicable: (buttonConfig) => {
13711
- return buttonConfig.background.type === "solid";
13712
- },
13713
- generateCSS: (ctx) => {
13714
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
13630
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
13631
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
13715
13632
  if (buttonConfig.background.type !== "solid") return "";
13716
- const amount = options.amount || 100;
13633
+ const amount = (options.amount || 100) * config.shadeDirection;
13717
13634
  const baseToken = buttonConfig.background.colorToken ?? "primary-500";
13718
- const darkerToken = tokens.adjustShade(baseToken, amount);
13719
13635
  return `
13720
13636
  :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
13721
- background-color: ${tokens.getColor(darkerToken)};
13637
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
13722
13638
  }
13723
13639
  `;
13724
13640
  }
13725
13641
  };
13726
- 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({
13727
13654
  id: "lighten-background",
13728
13655
  name: "Lighten on Hover",
13729
13656
  description: "Lightens the background color on hover",
13730
- category: "background",
13731
- pseudoElement: "none",
13732
- applicableTo: ["button"],
13733
- customizableOption: {
13734
- name: "amount",
13735
- type: "select",
13736
- label: "Lighten Amount (shade step)",
13737
- default: 100,
13738
- options: [
13739
- 0,
13740
- 100,
13741
- 200,
13742
- 300,
13743
- 400,
13744
- 500,
13745
- 600,
13746
- 700,
13747
- 800,
13748
- 900
13749
- ]
13750
- },
13751
- isApplicable: (buttonConfig) => {
13752
- return buttonConfig.background.type === "solid";
13753
- },
13754
- generateCSS: (ctx) => {
13755
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
13756
- if (buttonConfig.background.type !== "solid") return "";
13757
- const amount = options.amount || 100;
13758
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
13759
- const lighterToken = tokens.adjustShade(baseToken, -amount);
13760
- return `
13761
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
13762
- background-color: ${tokens.getColor(lighterToken)};
13763
- }
13764
- `;
13765
- }
13766
- };
13657
+ label: "Lighten Amount (shade step)",
13658
+ shadeDirection: -1
13659
+ });
13767
13660
  fadeBackgroundEffect = {
13768
13661
  id: "fade-background",
13769
13662
  name: "Fade on Hover",
@@ -13864,12 +13757,14 @@ var init_background$2 = __esmMin((() => {
13864
13757
  ]
13865
13758
  },
13866
13759
  generateCSS: (ctx) => {
13867
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
13760
+ const { themeId, variantId, stateGroup, options, tokens, buttonConfig } = ctx;
13868
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)};` : "";
13869
13764
  return `
13870
13765
  /* Add background on hover */
13871
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
13872
- 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}
13873
13768
  }
13874
13769
  `;
13875
13770
  }
@@ -13902,48 +13797,6 @@ var init_background$2 = __esmMin((() => {
13902
13797
  };
13903
13798
  }));
13904
13799
  //#endregion
13905
- //#region ../theme-core/src/buttons/effects/cssUtils.ts
13906
- /**
13907
- * Generate CSS selector for a state with dual support for hover
13908
- *
13909
- * @param themeId - Theme scope ID
13910
- * @param variantId - Variant class name
13911
- * @param state - State group (hover, active, focus, base)
13912
- * @returns CSS selector string
13913
- */
13914
- function getStateSelector(themeId, variantId, state) {
13915
- const stateSelector = STATE_SELECTORS[state];
13916
- if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
13917
- if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
13918
- :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
13919
- return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
13920
- }
13921
- /**
13922
- * Generate CSS rule block for a state
13923
- *
13924
- * @param themeId - Theme scope ID
13925
- * @param variantId - Variant class name
13926
- * @param state - State group
13927
- * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
13928
- * @returns Complete CSS rule block
13929
- */
13930
- function generateStateCSS(themeId, variantId, state, cssProperties) {
13931
- return `
13932
- ${getStateSelector(themeId, variantId, state)} {
13933
- ${cssProperties}
13934
- }
13935
- `;
13936
- }
13937
- var STATE_SELECTORS;
13938
- var init_cssUtils = __esmMin((() => {
13939
- STATE_SELECTORS = {
13940
- hover: ":hover, [data-force-hover=\"true\"]",
13941
- active: ":active",
13942
- focus: ":focus-visible",
13943
- base: ""
13944
- };
13945
- }));
13946
- //#endregion
13947
13800
  //#region ../theme-core/src/buttons/effects/presets/shadow.ts
13948
13801
  var borderGlowEffect, dropShadowEffect, innerShadowEffect, neumorphicShadowEffect, outerGlowEffect, retro3DShadowEffect;
13949
13802
  var init_shadow = __esmMin((() => {
@@ -16749,6 +16602,184 @@ var init_tokenOrColor = __esmMin((() => {
16749
16602
  ]);
16750
16603
  }));
16751
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
16752
16783
  //#region ../theme-core/src/schema.ts
16753
16784
  /**
16754
16785
  * Normalises the legacy `navTypography` font-role alias into the canonical
@@ -16764,7 +16795,7 @@ function normaliseHeaderNavFontRole(header) {
16764
16795
  navFontRole: navTypography
16765
16796
  } : rest;
16766
16797
  }
16767
- 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, 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;
16768
16799
  var init_schema$1 = __esmMin((() => {
16769
16800
  init_media$1();
16770
16801
  init_schema$2();
@@ -16782,6 +16813,9 @@ var init_schema$1 = __esmMin((() => {
16782
16813
  init_rawStyleFields();
16783
16814
  init_themeColorTokens();
16784
16815
  init_tokenOrColor();
16816
+ init_scrollTreatment();
16817
+ init_containerSchema();
16818
+ init_interactionPalette();
16785
16819
  axesSchema = z$1.object({
16786
16820
  tone: z$1.enum([
16787
16821
  "minimal",
@@ -17189,25 +17223,6 @@ var init_schema$1 = __esmMin((() => {
17189
17223
  ]);
17190
17224
  headerMaxWidth = z$1.enum(["container", "full"]);
17191
17225
  headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
17192
- headerContainerSchema = z$1.object({
17193
- rounded: z$1.enum([
17194
- "none",
17195
- "sm",
17196
- "md",
17197
- "lg",
17198
- "xl",
17199
- "2xl"
17200
- ]).default("xl"),
17201
- border: z$1.boolean().default(true),
17202
- shadow: z$1.boolean().default(true),
17203
- padding: z$1.enum([
17204
- "sm",
17205
- "md",
17206
- "lg"
17207
- ]).default("md"),
17208
- tint: z$1.string().nullable().optional(),
17209
- opacity: z$1.number().min(0).max(1).default(.12)
17210
- }).optional();
17211
17226
  headerBorderSchema = componentBorderSchema.extend({ position: z$1.enum([
17212
17227
  "bottom",
17213
17228
  "top",
@@ -17330,6 +17345,7 @@ var init_schema$1 = __esmMin((() => {
17330
17345
  shrinkOnScroll: z$1.boolean(),
17331
17346
  maxWidth: headerMaxWidth,
17332
17347
  barFrame: headerBarFrame.optional(),
17348
+ scrollTreatment: headerScrollTreatmentSchema,
17333
17349
  logoOverride: mediaSchema.nullable().optional(),
17334
17350
  background: headerBackgroundSchema.default({
17335
17351
  type: "color",
@@ -17342,6 +17358,7 @@ var init_schema$1 = __esmMin((() => {
17342
17358
  navFontRole: z$1.enum(["body", "heading"]).optional(),
17343
17359
  navTypography: z$1.enum(["body", "heading"]).optional(),
17344
17360
  navTextSize: navLinkStyleSchema.shape.textSize,
17361
+ interactionPalette: headerInteractionPaletteSchema.optional(),
17345
17362
  navPlacement: z$1.enum(["end", "center"]).optional(),
17346
17363
  container: headerContainerSchema,
17347
17364
  border: headerBorderSchema,
@@ -19776,6 +19793,7 @@ var init_records = __esmMin((() => {}));
19776
19793
  var init_headerOpeningSection = __esmMin((() => {
19777
19794
  init_headerLooks();
19778
19795
  init_records();
19796
+ init_tokens();
19779
19797
  }));
19780
19798
  var init_generatedDesignPipeline = __esmMin((() => {
19781
19799
  init_compositionBudget();
@@ -20096,8 +20114,11 @@ var init_site_styles = __esmMin((() => {
20096
20114
  init_generatedSchemas();
20097
20115
  init_generatedDesignPipeline();
20098
20116
  init_headerLooks();
20117
+ init_headerInteractionPalette();
20118
+ init_headerOpeningForeground();
20099
20119
  init_headerOpeningSection();
20100
20120
  init_lookResolution();
20121
+ init_lookOptionGroups();
20101
20122
  init_logoBranding();
20102
20123
  init_pageDesignAuthority();
20103
20124
  init_pageDesignEditorErrors();
@@ -20735,23 +20756,14 @@ var init_fragments$1 = __esmMin((() => {
20735
20756
  var init_types$5 = __esmMin((() => {}));
20736
20757
  //#endregion
20737
20758
  //#region ../blocks/src/system/constants/buttonRoles.ts
20738
- /**
20739
- * Temporary rollout boundary for persisted content written before issue #1220.
20740
- * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
20741
- * only until the post-deploy role rewrite has been audited in production.
20742
- */
20743
- function canonicalizePersistedBlockButtonRole(value) {
20744
- return value === "link" || value === "tertiary" ? "ghost" : value;
20745
- }
20746
20759
  function isBlockButtonRole(value) {
20747
20760
  return blockButtonRoleSchema.safeParse(value).success;
20748
20761
  }
20749
- 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;
20750
20763
  var init_buttonRoles = __esmMin((() => {
20751
20764
  init_buttons();
20752
20765
  BLOCK_BUTTON_ROLES = PUBLIC_BUTTON_ROLES;
20753
20766
  blockButtonRoleSchema = z$1.enum(BLOCK_BUTTON_ROLES);
20754
- persistedBlockButtonRoleSchema = z$1.preprocess((value) => typeof value === "string" ? canonicalizePersistedBlockButtonRole(value) : value, blockButtonRoleSchema);
20755
20767
  BLOCK_BUTTON_ROLE_LABELS = {
20756
20768
  primary: "Primary",
20757
20769
  secondary: "Secondary",
@@ -21275,33 +21287,6 @@ var init_node = __esmMin((() => {
21275
21287
  init_typeBasedLayout();
21276
21288
  init_validation_constants();
21277
21289
  }));
21278
- //#endregion
21279
- //#region ../theme-core/src/responsive/breakpoints.ts
21280
- function mqUp(px) {
21281
- return `(min-width: ${px}px)`;
21282
- }
21283
- function mqDown(px) {
21284
- return `(max-width: ${px}px)`;
21285
- }
21286
- function mqBetween(minPx, maxPx) {
21287
- return `${mqUp(minPx)} and ${mqDown(maxPx)}`;
21288
- }
21289
- 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;
21290
- var init_breakpoints = __esmMin((() => {
21291
- BREAKPOINT_LG = 1024;
21292
- BREAKPOINT_XL = 1280;
21293
- BREAKPOINT_LG_DOWN = BREAKPOINT_LG - 1;
21294
- MQ_SM_UP = mqUp(640);
21295
- MQ_MD_UP = mqUp(768);
21296
- MQ_LG_UP = mqUp(BREAKPOINT_LG);
21297
- mqUp(BREAKPOINT_XL);
21298
- MQ_SM_DOWN = mqDown(639);
21299
- MQ_MD_DOWN = mqDown(767);
21300
- mqDown(BREAKPOINT_LG_DOWN);
21301
- MQ_TABLET_ONLY = mqBetween(640, BREAKPOINT_LG_DOWN);
21302
- mqDown(640);
21303
- mqDown(768);
21304
- }));
21305
21290
  function asNonEmptyString(value) {
21306
21291
  if (typeof value !== "string") return null;
21307
21292
  const trimmed = value.trim();
@@ -27002,7 +26987,7 @@ var init_contract_schemas = __esmMin((() => {
27002
26987
  init_buttonRoles();
27003
26988
  previewStageSchema = z$1.enum(["preview", "published"]);
27004
26989
  registrationButtonVariantSchema = blockButtonRoleSchema;
27005
- eventButtonVariantSchema = persistedBlockButtonRoleSchema;
26990
+ eventButtonVariantSchema = blockButtonRoleSchema;
27006
26991
  eventLayoutSchema = z$1.enum(eventCalendarListLayoutValues);
27007
26992
  eventCalendarDisplayModeSchema = z$1.enum(eventCalendarDisplayModeValues);
27008
26993
  eventCalendarDefaultViewSchema = z$1.enum(eventCalendarDefaultViewValues);
@@ -112345,6 +112330,7 @@ function resolveBlockIconRenderValue(value, generatedAssets = /* @__PURE__ */ ne
112345
112330
  init_src$2();
112346
112331
  init_schema();
112347
112332
  init_richTextSchema();
112333
+ init_media$2();
112348
112334
  const TEL_RE = /^[+()0-9\s-]{3,}$/;
112349
112335
  const SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
112350
112336
  const ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
@@ -112632,7 +112618,7 @@ function canonicalizeFieldValueForWrite(plan, value) {
112632
112618
  case "media": {
112633
112619
  if (!isPlainObject$5(value)) return value;
112634
112620
  const canonical = { ...value };
112635
- if (typeof canonical.identifier === "string" && canonical.identifier.trim().length > 0) deleteEnvSpecificKeys(canonical);
112621
+ if (mediaIdentifierSchema.safeParse(canonical.identifier).success) deleteEnvSpecificKeys(canonical);
112636
112622
  return canonical;
112637
112623
  }
112638
112624
  case "group": return canonicalizeObjectForWrite(selectedGroupChildPlans(plan, value), value);
@@ -112727,7 +112713,7 @@ function normalizeObjectChildren(children, value, ctx) {
112727
112713
  function normalizeInlineTextFallbacks(plans, values, ctx) {
112728
112714
  for (const plan of plans) {
112729
112715
  if (plan.kind !== "inlineText" || !plan.plainTextFallbackPath) continue;
112730
- if (!isMissingForPlan(plan, values[plan.fieldId])) continue;
112716
+ if (!isMissingForPlan(plan, values[plan.fieldId]) && !(ctx.allowIncomplete && !parseInlineTextFromUnknown(values[plan.fieldId]).ok)) continue;
112731
112717
  const fallback = getAtFieldPath(values, plan.plainTextFallbackPath);
112732
112718
  if (typeof fallback !== "string" || fallback.trim().length === 0) continue;
112733
112719
  values[plan.fieldId] = normalizeFieldValue(plan, plainTextToInlineText(fallback), ctx);
@@ -112768,7 +112754,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
112768
112754
  case "select": return validateSelectPlan(plan, value);
112769
112755
  case "richText": return isValidRichTextDoc(value) ? [] : [issue(plan, "invalidRichText")];
112770
112756
  case "inlineText": return validateInlineTextPlan(plan, value);
112771
- 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")];
112772
112758
  case "link": return linkSchema.safeParse(value).success ? [] : [issue(plan, "invalidLink")];
112773
112759
  case "repeater": return validateRepeaterPlan(plan, value, ctx);
112774
112760
  case "group": return validateGroupPlan(plan, value, ctx);
@@ -126916,7 +126902,6 @@ function renderMark(mark, key, child) {
126916
126902
  //#region ../blocks/src/system/runtime/nodes/basic.tsx
126917
126903
  init_buttons();
126918
126904
  init_RichText();
126919
- init_buttonRoles();
126920
126905
  init_richText_coerce();
126921
126906
  const TextNode = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, inlineTextFallbackPath, ...rest }) => {
126922
126907
  const inlineText = parseInlineTextFromUnknown(value);
@@ -126957,6 +126942,9 @@ function renderTrailingAffordanceIcon(affordance) {
126957
126942
  className: "rb-ml-2 rb-h-4 rb-w-4 rb-inline-block"
126958
126943
  });
126959
126944
  }
126945
+ function isMissingRequiredLink(linkRequired, resolvedHref) {
126946
+ return linkRequired && resolvedHref.length === 0;
126947
+ }
126960
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 }) => {
126961
126949
  const content = value ?? children;
126962
126950
  if (!content) {
@@ -126965,12 +126953,16 @@ const ButtonNode = ({ value, children, href, variantId = "primary", size = "md",
126965
126953
  }
126966
126954
  const affordanceIcon = renderTrailingAffordanceIcon(resolveButtonAffordance({ trailingIcon }));
126967
126955
  const resolvedHref = typeof href === "string" ? href.trim() : "";
126968
- if (linkRequired && resolvedHref.length === 0) {
126956
+ if (isMissingRequiredLink(linkRequired, resolvedHref)) {
126969
126957
  console.warn("[ButtonNode] Missing href for link-required button");
126970
126958
  return null;
126971
126959
  }
126972
126960
  const extraClassName = affordanceIcon ? [className, AFFORDANCE_SUPPRESS_CLASS].filter(Boolean).join(" ") : className;
126973
- 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
+ }
126974
126966
  const combinedClassName = resolvedVariantId ? themeButtonClassName({
126975
126967
  variant: resolvedVariantId,
126976
126968
  size,
@@ -127109,8 +127101,9 @@ function iconForMediaType(type) {
127109
127101
  });
127110
127102
  }
127111
127103
  }
127112
- function normalizeButtonVariant(value) {
127113
- return isBlockButtonRole(value) ? value : "primary";
127104
+ function parseButtonVariant(value) {
127105
+ if (value === null || value === void 0) return "primary";
127106
+ return isBlockButtonRole(value) ? value : null;
127114
127107
  }
127115
127108
  function FileDownloadNode({ value, title, description, buttonLabel, buttonVariant, className }) {
127116
127109
  if (!value || !isDownloadableMediaType(value.type)) return null;
@@ -127120,7 +127113,11 @@ function FileDownloadNode({ value, title, description, buttonLabel, buttonVarian
127120
127113
  const heading = title?.trim() || filename;
127121
127114
  const body = description?.trim();
127122
127115
  const label = buttonLabel?.trim() || "Download";
127123
- const variant = normalizeButtonVariant(buttonVariant);
127116
+ const variant = parseButtonVariant(buttonVariant);
127117
+ if (!variant) {
127118
+ console.error("[FileDownloadNode] Invalid button variant", { buttonVariant });
127119
+ return null;
127120
+ }
127124
127121
  return /* @__PURE__ */ jsx("div", {
127125
127122
  className,
127126
127123
  children: /* @__PURE__ */ jsxs("div", {
@@ -132510,6 +132507,37 @@ function resolveColorTokenHex(theme, colorToken) {
132510
132507
  return expandPalette(theme.palette)[colorToken] ?? null;
132511
132508
  }
132512
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
132513
132541
  //#region ../theme-core/src/navigation/presets.ts
132514
132542
  /**
132515
132543
  * Built-in nav link style presets
@@ -132671,12 +132699,79 @@ function getNavLinkPreset(presetId) {
132671
132699
  }
132672
132700
  Object.keys(NAV_LINK_PRESETS);
132673
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
132674
132767
  //#region ../theme-core/src/header/generateHeaderCss.ts
132675
132768
  init_resolver$1();
132676
132769
  init_siteChromeNavPreferences();
132677
132770
  init_shared$5();
132678
132771
  init_breakpoints();
132679
132772
  init_navDropdownSizing();
132773
+ init_scrollTreatment();
132774
+ init_paintTargets();
132680
132775
  const HEADER_BLUR = "blur(12px)";
132681
132776
  const FLOATING_BLUR = "blur(16px)";
132682
132777
  const INSET_SHELL_MARKER_CLASS = "header-bar-frame-inset-shell";
@@ -132704,8 +132799,8 @@ function generateHeaderCss(options) {
132704
132799
  const cssChunks = [];
132705
132800
  const headerContrastTreatment = resolveHeaderContrastTreatment(header);
132706
132801
  const headerNavTextSize = resolveHeaderNavTextSize(header);
132707
- cssChunks.push(generateHeaderRootStyles(header, themeId, tokens, theme));
132708
- cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId));
132802
+ cssChunks.push(generateHeaderRootStyles(header, themeId, tokens));
132803
+ cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId, header.variant));
132709
132804
  cssChunks.push(generateLogoStyles({
132710
132805
  logo: header.logo,
132711
132806
  themeId,
@@ -132743,56 +132838,34 @@ function isClearSplitHeaderShape(header) {
132743
132838
  function isDetachedFloatingHeaderShape(header) {
132744
132839
  return header.variant === "floating" && !header.container;
132745
132840
  }
132746
- function generateMobileOverlayBackdropFilterFix(themeId) {
132747
- 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`;
132748
- }
132749
132841
  /**
132750
132842
  * Generate root header container styles
132751
132843
  */
132752
- function generateHeaderRootStyles(header, themeId, tokens, _theme) {
132844
+ function generateHeaderRootStyles(header, themeId, tokens) {
132753
132845
  const selector = `:where([data-theme-scope="${themeId}"]) .header-root`;
132754
- const backgroundSelector = `:where([data-theme-scope="${themeId}"]) .header-root::before`;
132755
132846
  const rules = [];
132756
- const backgroundRules = [];
132757
132847
  const navContainerType = header.navContainer?.type ?? "none";
132758
132848
  const isContainedNav = navContainerType === "pill" || navContainerType === "glass";
132759
132849
  rules.push("position: relative;");
132760
132850
  rules.push("isolation: isolate;");
132761
- if (!isContainedNav) {
132762
- const bg = header.background;
132763
- if (bg.type === "color") {
132764
- const bgColor = tokens.getColor(bg.color || "surface");
132765
- backgroundRules.push(`background-color: ${bgColor};`);
132766
- } else if (bg.type === "gradient" && bg.gradient) {
132767
- const stops = bg.gradient.stops.map((s) => tokens.getColor(s.color)).join(", ");
132768
- const angle = bg.gradient.angle ?? 180;
132769
- backgroundRules.push(`background-image: linear-gradient(${angle}deg, ${stops});`);
132770
- }
132771
- backgroundRules.push(`backdrop-filter: ${HEADER_BLUR};`);
132772
- backgroundRules.push(`-webkit-backdrop-filter: ${HEADER_BLUR};`);
132773
- if (header.border) {
132774
- const borderWidth = getComponentBorderWidthPx(header.border.width);
132775
- if (borderWidth !== "0") {
132776
- const borderToken = header.border?.colorToken?.trim() || "border";
132777
- const borderColor = tokens.getColor(borderToken);
132778
- const borderStyle = header.border.style === "dashed" ? "dashed" : "solid";
132779
- if (header.border.position === "bottom") rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`);
132780
- else if (header.border.position === "top") rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`);
132781
- else if (header.border.position === "both") {
132782
- rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`);
132783
- rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`);
132784
- }
132785
- }
132786
- }
132787
- }
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;
132788
132860
  if (header.positioning === "sticky" || header.positioning === "fixed") {
132789
132861
  const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
132790
132862
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
132791
132863
  }
132792
132864
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
132793
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`;
132794
- if (isContainedNav || backgroundRules.length === 0) return `${baseBlock}\n${overlayFix}`;
132795
- 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}`;
132796
132869
  }
132797
132870
  /**
132798
132871
  * Reshapes the full-bleed header paint layer into a contained brand capsule at
@@ -132837,10 +132910,10 @@ function generateLogoStyles(input) {
132837
132910
  else rules.push(`font-family: var(--font-heading);`);
132838
132911
  if (logo) {
132839
132912
  if (logo.letterSpacing && logo.letterSpacing !== "normal") rules.push(`letter-spacing: ${{
132840
- "normal": "0em",
132841
- "wide": "0.05em",
132842
- "wider": "0.1em",
132843
- "widest": "0.15em"
132913
+ normal: "0em",
132914
+ wide: "0.05em",
132915
+ wider: "0.1em",
132916
+ widest: "0.15em"
132844
132917
  }[logo.letterSpacing]};`);
132845
132918
  if (logo.gradient) {
132846
132919
  rules.push(`background: linear-gradient(to right, ${primaryColor}, ${accentColor});`);
@@ -132913,71 +132986,11 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
132913
132986
  } : header.navLinkStyle, navPreferences),
132914
132987
  className: "header-nav-link"
132915
132988
  });
132916
- const navStyle = header.navStyle ?? "minimal";
132917
- const basePreset = getNavLinkPreset(navStyle);
132918
- if (!basePreset) {
132919
- 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}`);
132920
132992
  return "";
132921
132993
  }
132922
- const mergedStyle = {
132923
- ...basePreset,
132924
- fontWeight: header.navWeight ?? basePreset.fontWeight,
132925
- colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
132926
- ...contrastTreatment ? { contrastTreatment } : {},
132927
- ...navTextSize ? { textSize: navTextSize } : {}
132928
- };
132929
- if (header.navWeight === "bold" && navStyle === "solid") mergedStyle.textTransform = "uppercase";
132930
- if (header.navEffects) {
132931
- const effects = mergedStyle.effects = {
132932
- ...mergedStyle.effects,
132933
- hover: [...mergedStyle.effects?.hover || []],
132934
- active: [...mergedStyle.effects?.active || []]
132935
- };
132936
- if (header.navEffects.glow) effects.hover.push({
132937
- effectId: "outer-glow",
132938
- options: { spread: 5 }
132939
- });
132940
- if (header.navEffects.neumorphic) {
132941
- effects.hover.push({
132942
- effectId: "neumorphic-shadow",
132943
- options: { mode: "pressed" }
132944
- });
132945
- effects.hover.push({
132946
- effectId: "text-color-change",
132947
- options: { hoverColorToken: "primary" }
132948
- });
132949
- }
132950
- if (header.navEffects.underlineGradient) effects.hover.push({
132951
- effectId: "border-bottom-grow",
132952
- options: { origin: "center" }
132953
- });
132954
- }
132955
- if ((header.navContainer?.type ?? "none") === "glass" && navStyle === "minimal") {
132956
- mergedStyle.borderRadius = "full";
132957
- mergedStyle.effects = {
132958
- ...mergedStyle.effects,
132959
- hover: [{
132960
- effectId: "background-on-hover-alpha",
132961
- options: {
132962
- colorToken: "neutral-50",
132963
- opacity: 10
132964
- }
132965
- }, {
132966
- effectId: "text-color-change",
132967
- options: { hoverColorToken: "neutral-50" }
132968
- }],
132969
- active: [{
132970
- effectId: "background-on-hover-alpha",
132971
- options: {
132972
- colorToken: "neutral-50",
132973
- opacity: 18
132974
- }
132975
- }, {
132976
- effectId: "text-color-change",
132977
- options: { hoverColorToken: "neutral-50" }
132978
- }]
132979
- };
132980
- }
132981
132994
  return generateNavLinkCSS({
132982
132995
  themeId,
132983
132996
  tokens,
@@ -133005,10 +133018,10 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
133005
133018
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
133006
133019
  const borderRadius = dropdownStyle?.borderRadius ?? "md";
133007
133020
  rules.push(`border-radius: ${{
133008
- "none": "0",
133009
- "sm": "0.25rem",
133010
- "md": "0.5rem",
133011
- "lg": "0.75rem"
133021
+ none: "0",
133022
+ sm: "0.25rem",
133023
+ md: "0.5rem",
133024
+ lg: "0.75rem"
133012
133025
  }[borderRadius]};`);
133013
133026
  rules.push(`padding: 0.5rem 0;`);
133014
133027
  return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
@@ -133063,16 +133076,16 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
133063
133076
  const additionalRules = [];
133064
133077
  const letterSpacing = configuredDropdownStyle?.letterSpacing ?? "normal";
133065
133078
  if (letterSpacing !== "normal") additionalRules.push(`letter-spacing: ${{
133066
- "normal": "0em",
133067
- "wide": "0.05em",
133068
- "wider": "0.1em"
133079
+ normal: "0em",
133080
+ wide: "0.05em",
133081
+ wider: "0.1em"
133069
133082
  }[letterSpacing]};`);
133070
133083
  const textSize = configuredDropdownStyle?.textSize ?? "sm";
133071
133084
  additionalRules.push(`font-size: ${{
133072
- "xs": "0.75rem",
133073
- "sm": "0.875rem",
133074
- "base": "1rem",
133075
- "lg": "1.125rem"
133085
+ xs: "0.75rem",
133086
+ sm: "0.875rem",
133087
+ base: "1rem",
133088
+ lg: "1.125rem"
133076
133089
  }[textSize]};`);
133077
133090
  if (additionalRules.length > 0) return baseCSS + `\n${`:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`} {\n ${additionalRules.join("\n ")}\n}\n`;
133078
133091
  return baseCSS;
@@ -133168,18 +133181,18 @@ function generateFloatingContainerStyles(header, themeId, tokens) {
133168
133181
  rules.push(`-webkit-backdrop-filter: ${FLOATING_BLUR};`);
133169
133182
  if (container.border) rules.push(`border: 1px solid rgb(255 255 255 / 0.2);`);
133170
133183
  rules.push(`border-radius: ${{
133171
- "none": "0",
133172
- "sm": "0.375rem",
133173
- "md": "0.5rem",
133174
- "lg": "0.75rem",
133175
- "xl": "1rem",
133184
+ none: "0",
133185
+ sm: "0.375rem",
133186
+ md: "0.5rem",
133187
+ lg: "0.75rem",
133188
+ xl: "1rem",
133176
133189
  "2xl": "1.5rem"
133177
133190
  }[container.rounded]};`);
133178
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);`);
133179
133192
  rules.push(`padding: ${{
133180
- "sm": "1rem 1.5rem",
133181
- "md": "1.5rem 2rem",
133182
- "lg": "2rem 2.5rem"
133193
+ sm: "1rem 1.5rem",
133194
+ md: "1.5rem 2rem",
133195
+ lg: "2rem 2.5rem"
133183
133196
  }[container.padding]};`);
133184
133197
  return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
133185
133198
  }
@@ -150741,6 +150754,9 @@ function normalizeLoaderParams(endpoint, params, context) {
150741
150754
  init_RichText();
150742
150755
  const RichText$1 = RichText$2;
150743
150756
  //#endregion
150757
+ //#region ../blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.ts
150758
+ init_src$2();
150759
+ //#endregion
150744
150760
  //#region ../blocks/src/system/helpers/resolveBackground.tsx
150745
150761
  /**
150746
150762
  * Helper utilities for resolving background data in custom block components.