@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
@@ -11728,8 +11728,7 @@ var init_typeGuards = __esmMin((() => {}));
11728
11728
  function isRichTextDoc(value) {
11729
11729
  return RichTextDocSchema.safeParse(value).success;
11730
11730
  }
11731
- var TipTapMarkSchema, TipTapNodeSchema, RichTextDocSchema;
11732
- var init_richTextSchema = __esmMin((() => {
11731
+ var TipTapMarkSchema, TipTapNodeSchema, RichTextDocSchema, init_richTextSchema = __esmMin((() => {
11733
11732
  init_typeGuards();
11734
11733
  TipTapMarkSchema = z$1.object({
11735
11734
  type: z$1.string().min(1),
@@ -11770,11 +11769,103 @@ var init_richTextSchema = __esmMin((() => {
11770
11769
  type: z$1.literal("doc"),
11771
11770
  content: z$1.array(TipTapNodeSchema)
11772
11771
  }).strict();
11772
+ })), PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema$1, rotationSchema$1, rectSchema$1, aspectCropSchema$1, transformSchema$1, mediaPosterSchema, mediaBaseSchema, mediaIdentifierSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema$1, persistableMediaBaseSchema;
11773
+ var init_media$2 = __esmMin((() => {
11774
+ init_src$2();
11775
+ PUBLIC_DOWNLOAD_MEDIA_TYPES = [
11776
+ "document",
11777
+ "spreadsheet",
11778
+ "archive",
11779
+ "audio"
11780
+ ];
11781
+ hotspotSchema$1 = z.object({
11782
+ x: z.number().min(0).max(1),
11783
+ y: z.number().min(0).max(1),
11784
+ radius: z.number().optional()
11785
+ });
11786
+ rotationSchema$1 = z.union([
11787
+ z.literal(0),
11788
+ z.literal(90),
11789
+ z.literal(180),
11790
+ z.literal(270)
11791
+ ]);
11792
+ rectSchema$1 = z.tuple([
11793
+ z.number(),
11794
+ z.number(),
11795
+ z.number(),
11796
+ z.number()
11797
+ ]);
11798
+ aspectCropSchema$1 = z.object({
11799
+ aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
11800
+ rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema$1.optional()),
11801
+ hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema$1.optional()),
11802
+ rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema$1.optional())
11803
+ });
11804
+ transformSchema$1 = z.object({
11805
+ aspectCrops: z.preprocess((value) => {
11806
+ if (!value || typeof value !== "object" || Array.isArray(value)) return;
11807
+ return value;
11808
+ }, z.record(z.string(), aspectCropSchema$1.catch({}))).optional(),
11809
+ rect: rectSchema$1.optional(),
11810
+ hotspot: hotspotSchema$1.optional(),
11811
+ rotation: rotationSchema$1.optional()
11812
+ });
11813
+ mediaPosterSchema = z.discriminatedUnion("tag", [z.object({
11814
+ tag: z.literal("storage"),
11815
+ assetId: z.string().optional(),
11816
+ storageBucket: z.string().min(1),
11817
+ storagePath: z.string().min(1)
11818
+ }), z.object({
11819
+ tag: z.literal("external-src"),
11820
+ assetId: z.string().optional(),
11821
+ src: z.string().url()
11822
+ })]);
11823
+ mediaBaseSchema = z.object({
11824
+ purpose: z.string().optional(),
11825
+ placeholder: z.boolean().default(true).optional(),
11826
+ assetId: z.string().optional(),
11827
+ identifier: z.string().optional(),
11828
+ src: z.string().optional(),
11829
+ alt: z.string().optional(),
11830
+ filename: z.string().optional(),
11831
+ mimeType: z.string().optional(),
11832
+ width: z.number().optional(),
11833
+ height: z.number().optional(),
11834
+ storageBucket: z.string().optional(),
11835
+ storagePath: z.string().optional(),
11836
+ poster: mediaPosterSchema.optional(),
11837
+ transform: transformSchema$1.optional()
11838
+ });
11839
+ mediaIdentifierSchema = z.string().trim().min(1).brand();
11840
+ imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
11841
+ videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
11842
+ audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
11843
+ documentMediaSchema = mediaBaseSchema.extend({ type: z.literal("document") });
11844
+ spreadsheetMediaSchema = mediaBaseSchema.extend({ type: z.literal("spreadsheet") });
11845
+ archiveMediaSchema = mediaBaseSchema.extend({ type: z.literal("archive") });
11846
+ mediaSchema$1 = z.discriminatedUnion("type", [
11847
+ imageMediaSchema,
11848
+ videoMediaSchema,
11849
+ audioMediaSchema,
11850
+ documentMediaSchema,
11851
+ spreadsheetMediaSchema,
11852
+ archiveMediaSchema
11853
+ ]);
11854
+ persistableMediaBaseSchema = mediaBaseSchema.extend({ identifier: mediaIdentifierSchema });
11855
+ z.discriminatedUnion("type", [
11856
+ persistableMediaBaseSchema.extend({ type: z.literal("image") }),
11857
+ persistableMediaBaseSchema.extend({ type: z.literal("video") }),
11858
+ persistableMediaBaseSchema.extend({ type: z.literal("audio") }),
11859
+ persistableMediaBaseSchema.extend({ type: z.literal("document") }),
11860
+ persistableMediaBaseSchema.extend({ type: z.literal("spreadsheet") }),
11861
+ persistableMediaBaseSchema.extend({ type: z.literal("archive") })
11862
+ ]);
11773
11863
  }));
11774
11864
  //#endregion
11775
11865
  //#region ../blocks/src/system/manifest/fieldValidation/index.ts
11776
11866
  init_src$2();
11777
11867
  init_richTextSchema();
11868
+ init_media$2();
11778
11869
  const TEL_RE = /^[+()0-9\s-]{3,}$/;
11779
11870
  const SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
11780
11871
  const ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
@@ -12062,7 +12153,7 @@ function canonicalizeFieldValueForWrite(plan, value) {
12062
12153
  case "media": {
12063
12154
  if (!isPlainObject$4(value)) return value;
12064
12155
  const canonical = { ...value };
12065
- if (typeof canonical.identifier === "string" && canonical.identifier.trim().length > 0) deleteEnvSpecificKeys(canonical);
12156
+ if (mediaIdentifierSchema.safeParse(canonical.identifier).success) deleteEnvSpecificKeys(canonical);
12066
12157
  return canonical;
12067
12158
  }
12068
12159
  case "group": return canonicalizeObjectForWrite(selectedGroupChildPlans(plan, value), value);
@@ -12157,7 +12248,7 @@ function normalizeObjectChildren(children, value, ctx) {
12157
12248
  function normalizeInlineTextFallbacks(plans, values, ctx) {
12158
12249
  for (const plan of plans) {
12159
12250
  if (plan.kind !== "inlineText" || !plan.plainTextFallbackPath) continue;
12160
- if (!isMissingForPlan(plan, values[plan.fieldId])) continue;
12251
+ if (!isMissingForPlan(plan, values[plan.fieldId]) && !(ctx.allowIncomplete && !parseInlineTextFromUnknown(values[plan.fieldId]).ok)) continue;
12161
12252
  const fallback = getAtFieldPath(values, plan.plainTextFallbackPath);
12162
12253
  if (typeof fallback !== "string" || fallback.trim().length === 0) continue;
12163
12254
  values[plan.fieldId] = normalizeFieldValue(plan, plainTextToInlineText(fallback), ctx);
@@ -12198,7 +12289,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
12198
12289
  case "select": return validateSelectPlan(plan, value);
12199
12290
  case "richText": return isValidRichTextDoc(value) ? [] : [issue(plan, "invalidRichText")];
12200
12291
  case "inlineText": return validateInlineTextPlan(plan, value);
12201
- case "media": return isPlainObject$4(value) && typeof value.identifier === "string" && value.identifier.trim().length > 0 && (value.type === void 0 || typeof value.type === "string" && plan.allowedMediaTypes.includes(value.type)) ? [] : [issue(plan, "invalidMedia")];
12292
+ case "media": return isPlainObject$4(value) && mediaIdentifierSchema.safeParse(value.identifier).success && (value.type === void 0 || typeof value.type === "string" && plan.allowedMediaTypes.includes(value.type)) ? [] : [issue(plan, "invalidMedia")];
12202
12293
  case "link": return linkSchema.safeParse(value).success ? [] : [issue(plan, "invalidLink")];
12203
12294
  case "repeater": return validateRepeaterPlan(plan, value, ctx);
12204
12295
  case "group": return validateGroupPlan(plan, value, ctx);
@@ -12936,6 +13027,18 @@ var init_accessibleSurfaces = __esmMin((() => {
12936
13027
  init_onColor();
12937
13028
  }));
12938
13029
  //#endregion
13030
+ //#region ../theme-core/src/site-styles/lookOptionGroups.ts
13031
+ function defineLookOptionGroup(group) {
13032
+ defaultOption(group);
13033
+ return group;
13034
+ }
13035
+ function defaultOption(group) {
13036
+ const option = group.options.find((candidate) => candidate.id === group.defaultOptionId);
13037
+ if (option) return option;
13038
+ throw new Error(`Look option group "${group.id}" defaults to missing option "${group.defaultOptionId}".`);
13039
+ }
13040
+ var init_lookOptionGroups = __esmMin((() => {}));
13041
+ //#endregion
12939
13042
  //#region ../theme-core/src/site-styles/types.ts
12940
13043
  /**
12941
13044
  * Defines a literal-preserving catalog while rejecting top-level extra keys on
@@ -13084,7 +13187,7 @@ var init_types$15 = __esmMin((() => {
13084
13187
  //#region ../theme-core/src/site-styles/appearancePresetResolution.ts
13085
13188
  function assertValidOptionGroups(preset) {
13086
13189
  preset.optionGroups?.forEach((group) => {
13087
- if (!group.options.find((option) => option.id === group.selectedOptionId)) throw new Error(`Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`);
13190
+ defineLookOptionGroup(group);
13088
13191
  });
13089
13192
  }
13090
13193
  function defineBlockAppearancePreset(preset) {
@@ -13092,772 +13195,655 @@ function defineBlockAppearancePreset(preset) {
13092
13195
  return preset;
13093
13196
  }
13094
13197
  var init_appearancePresetResolution = __esmMin((() => {
13198
+ init_lookOptionGroups();
13095
13199
  init_types$15();
13096
- }));
13097
- //#endregion
13098
- //#region ../theme-core/src/site-styles/blockAppearancePresets.ts
13099
- var blockAppearancePresets;
13200
+ })), brandScrimOptionGroups, microBannerLayoutPatches;
13100
13201
  var init_blockAppearancePresets = __esmMin((() => {
13101
13202
  init_appearancePresetResolution();
13102
13203
  init_types$15();
13103
- blockAppearancePresets = [
13104
- defineBlockAppearancePreset({
13105
- kind: "block-design",
13106
- id: "hero-immersive-image",
13107
- target: "hero",
13108
- label: "Immersive image hero",
13109
- blockKinds: ["block.hero"],
13110
- constraints: { layoutFamilies: ["centered", "compact"] },
13111
- layoutPatches: [{
13112
- constraints: { layoutVariantKeys: ["micro"] },
13113
- designPatch: {
13114
- sectionHeight: "banner",
13115
- heroTypographyScale: "display"
13116
- }
13117
- }],
13118
- design: {
13119
- sectionSurface: "hero-image",
13120
- contentFrame: plainFrame,
13121
- itemSurface: "none",
13122
- sectionHeight: "hero",
13123
- heroComposition: "center",
13124
- heroTypographyScale: "display",
13125
- imageSurfaceTreatment: { kind: "neutral-wash" }
13204
+ brandScrimOptionGroups = [{
13205
+ id: "image-surface-treatment",
13206
+ label: "Treatment",
13207
+ defaultOptionId: "brand-scrim-primary",
13208
+ options: [{
13209
+ id: "brand-scrim-primary",
13210
+ label: "Brand scrim",
13211
+ designPatch: { imageSurfaceTreatment: {
13212
+ kind: "brand-scrim",
13213
+ token: "primary"
13214
+ } }
13215
+ }, {
13216
+ id: "neutral-scrim",
13217
+ label: "Neutral scrim",
13218
+ designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
13219
+ }]
13220
+ }];
13221
+ microBannerLayoutPatches = [{
13222
+ constraints: { layoutVariantKeys: ["micro"] },
13223
+ designPatch: { sectionHeight: "banner" }
13224
+ }];
13225
+ defineBlockAppearancePreset({
13226
+ id: "hero-immersive-image",
13227
+ target: "hero",
13228
+ label: "Immersive image hero",
13229
+ blockKinds: ["block.hero"],
13230
+ constraints: { layoutFamilies: ["centered", "compact"] },
13231
+ layoutPatches: [{
13232
+ constraints: { layoutVariantKeys: ["micro"] },
13233
+ designPatch: {
13234
+ sectionHeight: "banner",
13235
+ heroTypographyScale: "display"
13126
13236
  }
13127
- }),
13128
- defineBlockAppearancePreset({
13129
- kind: "block-design",
13130
- id: "hero-bottom-left-panel",
13131
- target: "hero",
13132
- label: "Bottom-left panel hero",
13133
- blockKinds: ["block.hero"],
13134
- constraints: { layoutFamilies: ["centered", "compact"] },
13135
- optionGroups: [{
13136
- id: "image-surface-treatment",
13137
- label: "Treatment",
13138
- selectedOptionId: "neutral-scrim",
13139
- options: [{
13140
- id: "neutral-scrim",
13141
- label: "Neutral scrim",
13142
- designPatch: { imageSurfaceTreatment: {
13143
- kind: "neutral-scrim",
13144
- intensity: "balanced"
13145
- } }
13146
- }, {
13147
- id: "brand-scrim-primary",
13148
- label: "Brand scrim",
13149
- designPatch: { imageSurfaceTreatment: {
13150
- kind: "brand-scrim",
13151
- token: "primary",
13152
- intensity: "balanced"
13153
- } }
13154
- }]
13155
- }],
13156
- layoutPatches: [{
13157
- constraints: { layoutVariantKeys: ["micro"] },
13158
- designPatch: {
13159
- sectionHeight: "banner",
13160
- heroTypographyScale: "editorial"
13161
- }
13162
- }],
13163
- design: {
13164
- sectionSurface: "hero-image",
13165
- contentFrame: panelFrame("raised"),
13166
- itemSurface: "none",
13167
- sectionHeight: "immersive",
13168
- heroComposition: "bottom-left",
13169
- heroTypographyScale: "display",
13170
- imageSurfaceTreatment: {
13237
+ }],
13238
+ design: {
13239
+ sectionSurface: "hero-image",
13240
+ contentFrame: plainFrame,
13241
+ itemSurface: "none",
13242
+ sectionHeight: "hero",
13243
+ heroComposition: "center",
13244
+ heroTypographyScale: "display",
13245
+ imageSurfaceTreatment: { kind: "neutral-wash" }
13246
+ }
13247
+ }), defineBlockAppearancePreset({
13248
+ id: "hero-bottom-left-panel",
13249
+ target: "hero",
13250
+ label: "Bottom-left panel hero",
13251
+ blockKinds: ["block.hero"],
13252
+ constraints: { layoutFamilies: ["centered", "compact"] },
13253
+ optionGroups: [{
13254
+ id: "image-surface-treatment",
13255
+ label: "Treatment",
13256
+ defaultOptionId: "neutral-scrim",
13257
+ options: [{
13258
+ id: "neutral-scrim",
13259
+ label: "Neutral scrim",
13260
+ designPatch: { imageSurfaceTreatment: {
13171
13261
  kind: "neutral-scrim",
13172
13262
  intensity: "balanced"
13173
- }
13174
- }
13175
- }),
13176
- defineBlockAppearancePreset({
13177
- kind: "block-design",
13178
- id: "hero-poster-image",
13179
- target: "hero",
13180
- label: "Poster image hero",
13181
- blockKinds: ["block.hero"],
13182
- constraints: { layoutFamilies: ["centered", "compact"] },
13183
- layoutPatches: [{
13184
- constraints: { layoutVariantKeys: ["micro"] },
13185
- designPatch: {
13186
- sectionHeight: "banner",
13187
- heroTypographyScale: "display"
13188
- }
13189
- }],
13190
- design: {
13191
- sectionSurface: "hero-image",
13192
- contentFrame: plainFrame,
13193
- itemSurface: "none",
13194
- sectionHeight: "immersive",
13195
- heroComposition: "center",
13196
- heroTypographyScale: "poster",
13197
- imageSurfaceTreatment: {
13263
+ } }
13264
+ }, {
13265
+ id: "brand-scrim-primary",
13266
+ label: "Brand scrim",
13267
+ designPatch: { imageSurfaceTreatment: {
13198
13268
  kind: "brand-scrim",
13199
13269
  token: "primary",
13200
- intensity: "strong"
13201
- }
13202
- }
13203
- }),
13204
- defineBlockAppearancePreset({
13205
- kind: "block-design",
13206
- id: "hero-brand-scrim",
13207
- target: "hero",
13208
- label: "Brand scrim image hero",
13209
- blockKinds: ["block.hero"],
13210
- constraints: { layoutFamilies: ["centered", "compact"] },
13211
- optionGroups: [{
13212
- id: "image-surface-treatment",
13213
- label: "Treatment",
13214
- selectedOptionId: "brand-scrim-primary",
13215
- options: [{
13216
- id: "brand-scrim-primary",
13217
- label: "Brand scrim",
13218
- designPatch: { imageSurfaceTreatment: {
13219
- kind: "brand-scrim",
13220
- token: "primary"
13221
- } }
13222
- }, {
13223
- id: "neutral-scrim",
13224
- label: "Neutral scrim",
13225
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
13226
- }]
13227
- }],
13228
- layoutPatches: [{
13229
- constraints: { layoutVariantKeys: ["micro"] },
13230
- designPatch: { sectionHeight: "banner" }
13231
- }],
13232
- design: {
13233
- sectionSurface: "hero-image",
13234
- contentFrame: plainFrame,
13235
- itemSurface: "none",
13236
- sectionHeight: "immersive",
13237
- heroComposition: "center",
13238
- heroTypographyScale: "display",
13239
- imageSurfaceTreatment: {
13240
- kind: "brand-scrim",
13241
- token: "primary"
13242
- }
13243
- }
13244
- }),
13245
- defineBlockAppearancePreset({
13246
- kind: "block-design",
13247
- id: "hero-brand-scrim-fixed-frame",
13248
- target: "hero",
13249
- label: "Fixed-frame brand scrim hero",
13250
- blockKinds: ["block.hero"],
13251
- constraints: { layoutFamilies: ["centered", "compact"] },
13252
- optionGroups: [{
13253
- id: "image-surface-treatment",
13254
- label: "Treatment",
13255
- selectedOptionId: "brand-scrim-primary",
13256
- options: [{
13257
- id: "brand-scrim-primary",
13258
- label: "Brand scrim",
13259
- designPatch: { imageSurfaceTreatment: {
13260
- kind: "brand-scrim",
13261
- token: "primary"
13262
- } }
13263
- }, {
13264
- id: "neutral-scrim",
13265
- label: "Neutral scrim",
13266
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
13267
- }]
13268
- }],
13269
- layoutPatches: [{
13270
- constraints: { layoutVariantKeys: ["micro"] },
13271
- designPatch: { sectionHeight: "banner" }
13272
- }],
13273
- design: {
13274
- sectionSurface: "hero-image",
13275
- contentFrame: plainFrame,
13276
- itemSurface: "none",
13277
- sectionHeight: "immersive",
13278
- heroComposition: "center",
13279
- heroTypographyScale: "display",
13280
- imageSurfaceTreatment: {
13281
- kind: "brand-scrim",
13282
- token: "primary"
13283
- },
13284
- imageSurfaceMotion: "fixed-frame",
13285
- eyebrowTreatment: "accent-pill-bounce"
13286
- }
13287
- }),
13288
- defineBlockAppearancePreset({
13289
- kind: "block-design",
13290
- id: "hero-brand-depth-expressive",
13291
- target: "hero",
13292
- label: "Expressive brand-depth hero",
13293
- blockKinds: ["block.hero"],
13294
- constraints: { layoutFamilies: ["centered", "compact"] },
13295
- design: {
13296
- sectionSurface: "brand-depth-band",
13297
- contentFrame: plainFrame,
13298
- itemSurface: "none",
13299
- heroComposition: "center",
13300
- heroTypographyScale: "editorial",
13301
- eyebrowTreatment: "accent-pill-bounce"
13302
- }
13303
- }),
13304
- defineBlockAppearancePreset({
13305
- kind: "block-design",
13306
- id: "hero-contained-intro",
13307
- target: "hero",
13308
- label: "Contained intro hero",
13309
- blockKinds: ["block.hero"],
13310
- design: {
13311
- sectionSurface: "muted-band",
13312
- contentFrame: panelFrame("inset"),
13313
- itemSurface: "none",
13314
- heroComposition: "center",
13315
- heroTypographyScale: "editorial"
13316
- }
13317
- }),
13318
- defineBlockAppearancePreset({
13319
- kind: "block-design",
13320
- id: "hero-split-editorial",
13321
- target: "hero",
13322
- label: "Editorial split hero",
13323
- blockKinds: ["block.hero"],
13324
- constraints: { layoutFamilies: ["split"] },
13325
- design: {
13326
- sectionSurface: "base",
13327
- contentFrame: plainFrame,
13328
- itemSurface: "none",
13270
+ intensity: "balanced"
13271
+ } }
13272
+ }]
13273
+ }],
13274
+ layoutPatches: [{
13275
+ constraints: { layoutVariantKeys: ["micro"] },
13276
+ designPatch: {
13277
+ sectionHeight: "banner",
13329
13278
  heroTypographyScale: "editorial"
13330
13279
  }
13331
- }),
13332
- defineBlockAppearancePreset({
13333
- kind: "block-design",
13334
- id: "hero-split-brand",
13335
- target: "hero",
13336
- label: "Brand split hero",
13337
- blockKinds: ["block.hero"],
13338
- constraints: { layoutFamilies: ["split"] },
13339
- design: {
13340
- sectionSurface: "brand-depth-band",
13341
- contentFrame: plainFrame,
13342
- itemSurface: "none",
13343
- heroTypographyScale: "display",
13344
- eyebrowTreatment: "accent-pill-bounce"
13345
- }
13346
- }),
13347
- defineBlockAppearancePreset({
13348
- kind: "block-design",
13349
- id: "hero-split-soft-panel",
13350
- target: "hero",
13351
- label: "Soft panel split hero",
13352
- blockKinds: ["block.hero"],
13353
- constraints: { layoutFamilies: ["split"] },
13354
- design: {
13355
- sectionSurface: "muted-band",
13356
- contentFrame: panelFrame("raised"),
13357
- itemSurface: "none",
13358
- heroTypographyScale: "editorial"
13280
+ }],
13281
+ design: {
13282
+ sectionSurface: "hero-image",
13283
+ contentFrame: panelFrame("raised"),
13284
+ itemSurface: "none",
13285
+ sectionHeight: "immersive",
13286
+ heroComposition: "bottom-left",
13287
+ heroTypographyScale: "display",
13288
+ imageSurfaceTreatment: {
13289
+ kind: "neutral-scrim",
13290
+ intensity: "balanced"
13359
13291
  }
13360
- }),
13361
- defineBlockAppearancePreset({
13362
- kind: "block-design",
13363
- id: "hero-split-accent",
13364
- target: "hero",
13365
- label: "Accent split hero",
13366
- blockKinds: ["block.hero"],
13367
- constraints: { layoutFamilies: ["split"] },
13368
- design: {
13369
- sectionSurface: "accent-band",
13370
- contentFrame: panelFrame("raised"),
13371
- itemSurface: "none",
13292
+ }
13293
+ }), defineBlockAppearancePreset({
13294
+ id: "hero-poster-image",
13295
+ target: "hero",
13296
+ label: "Poster image hero",
13297
+ blockKinds: ["block.hero"],
13298
+ constraints: { layoutFamilies: ["centered", "compact"] },
13299
+ layoutPatches: [{
13300
+ constraints: { layoutVariantKeys: ["micro"] },
13301
+ designPatch: {
13302
+ sectionHeight: "banner",
13372
13303
  heroTypographyScale: "display"
13373
13304
  }
13374
- }),
13375
- defineBlockAppearancePreset({
13376
- kind: "block-design",
13377
- id: "intro-editorial-statement",
13378
- target: "intro",
13379
- label: "Editorial intro statement",
13380
- blockKinds: ["block.intro"],
13381
- constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
13382
- design: {
13383
- sectionSurface: "base",
13384
- contentFrame: plainFrame,
13385
- itemSurface: "none",
13386
- composition: {
13387
- kind: "intro",
13388
- treatment: "editorial-statement"
13389
- }
13390
- }
13391
- }),
13392
- defineBlockAppearancePreset({
13393
- kind: "block-design",
13394
- id: "intro-portrait-bio",
13395
- target: "intro",
13396
- label: "Portrait and bio",
13397
- blockKinds: ["block.intro"],
13398
- constraints: { layoutVariantKeys: ["media-copy"] },
13399
- design: {
13400
- sectionSurface: "base",
13401
- contentFrame: plainFrame,
13402
- itemSurface: "none",
13403
- composition: {
13404
- kind: "intro",
13405
- treatment: "portrait-bio"
13406
- }
13407
- }
13408
- }),
13409
- defineBlockAppearancePreset({
13410
- kind: "block-design",
13411
- id: "offerings-preview-default-cards",
13412
- target: "offerings",
13413
- label: "Default offering cards",
13414
- blockKinds: ["block.offerings-preview"],
13415
- design: {
13416
- sectionSurface: "base",
13417
- contentFrame: plainFrame,
13418
- itemSurface: "default"
13419
- }
13420
- }),
13421
- defineBlockAppearancePreset({
13422
- kind: "block-design",
13423
- id: "offerings-preview-secondary-cards",
13424
- target: "offerings",
13425
- label: "Secondary offering cards",
13426
- blockKinds: ["block.offerings-preview"],
13427
- design: {
13428
- sectionSurface: "muted-band",
13429
- contentFrame: plainFrame,
13430
- itemSurface: "inset"
13431
- }
13432
- }),
13433
- defineBlockAppearancePreset({
13434
- kind: "block-design",
13435
- id: "offerings-preview-non-carded",
13436
- target: "offerings",
13437
- label: "Non-carded offerings",
13438
- blockKinds: ["block.offerings-preview"],
13439
- design: {
13440
- sectionSurface: "muted-band",
13441
- contentFrame: plainFrame,
13442
- itemSurface: "editorial"
13443
- }
13444
- }),
13445
- defineBlockAppearancePreset({
13446
- kind: "block-design",
13447
- id: "offerings-preview-paired-feature-cards",
13448
- target: "offerings",
13449
- label: "Paired feature cards",
13450
- blockKinds: ["block.offerings-preview"],
13451
- constraints: { layoutVariantKeys: ["cards"] },
13452
- design: {
13453
- sectionSurface: "base",
13454
- contentFrame: plainFrame,
13455
- itemSurface: "none"
13456
- }
13457
- }),
13458
- defineBlockAppearancePreset({
13459
- kind: "block-design",
13460
- id: "offerings-preview-open-editorial-columns",
13461
- target: "offerings",
13462
- label: "Open editorial columns",
13463
- blockKinds: ["block.offerings-preview"],
13464
- constraints: { layoutVariantKeys: ["cards"] },
13465
- design: {
13466
- sectionSurface: "base",
13467
- contentFrame: plainFrame,
13468
- itemSurface: "none"
13469
- }
13470
- }),
13471
- defineBlockAppearancePreset({
13472
- kind: "block-design",
13473
- id: "offerings-preview-joined-programme-panel",
13474
- target: "offerings",
13475
- label: "Joined programme panel",
13476
- blockKinds: ["block.offerings-preview"],
13477
- constraints: { layoutVariantKeys: ["cards"] },
13478
- design: {
13479
- sectionSurface: "base",
13480
- contentFrame: plainFrame,
13481
- itemSurface: "none"
13482
- }
13483
- }),
13484
- defineBlockAppearancePreset({
13485
- kind: "block-design",
13486
- id: "feature-cards-raised-rule",
13487
- target: "feature-cards",
13488
- label: "Raised cards with rule",
13489
- blockKinds: ["block.feature-cards"],
13490
- design: {
13491
- sectionSurface: "base",
13492
- contentFrame: plainFrame,
13493
- itemSurface: "raised"
13494
- }
13495
- }),
13496
- defineBlockAppearancePreset({
13497
- kind: "block-design",
13498
- id: "feature-cards-bold-colors",
13499
- target: "feature-cards",
13500
- label: "Bold colour-blocked cards",
13501
- blockKinds: ["block.feature-cards"],
13502
- design: {
13503
- sectionSurface: "base",
13504
- contentFrame: plainFrame,
13505
- itemSurface: "color-blocked"
13506
- }
13507
- }),
13508
- defineBlockAppearancePreset({
13509
- kind: "block-design",
13510
- id: "feature-cards-editorial-columns",
13511
- target: "feature-cards",
13512
- label: "Editorial open columns",
13513
- blockKinds: ["block.feature-cards"],
13514
- design: {
13515
- sectionSurface: "base",
13516
- contentFrame: plainFrame,
13517
- itemSurface: "editorial"
13518
- }
13519
- }),
13520
- defineBlockAppearancePreset({
13521
- kind: "block-design",
13522
- id: "feature-cards-asymmetric-emphasis",
13523
- target: "feature-cards",
13524
- label: "Asymmetric emphasis pair",
13525
- blockKinds: ["block.feature-cards"],
13526
- constraints: { layoutFamilies: ["grid"] },
13527
- design: {
13528
- sectionSurface: "base",
13529
- contentFrame: plainFrame,
13530
- itemSurface: "none",
13531
- composition: {
13532
- kind: "feature-cards",
13533
- treatment: "asymmetric-emphasis"
13534
- }
13535
- }
13536
- }),
13537
- defineBlockAppearancePreset({
13538
- kind: "block-design",
13539
- id: "feature-cards-framed-programme",
13540
- target: "feature-cards",
13541
- label: "Framed programme cards",
13542
- blockKinds: ["block.feature-cards"],
13543
- constraints: { layoutFamilies: ["grid"] },
13544
- design: {
13545
- sectionSurface: "brand-depth-band",
13546
- contentFrame: plainFrame,
13547
- itemSurface: "inset",
13548
- composition: {
13549
- kind: "feature-cards",
13550
- treatment: "framed-programme"
13551
- }
13552
- }
13553
- }),
13554
- defineBlockAppearancePreset({
13555
- kind: "block-design",
13556
- id: "feature-cards-soft-panels",
13557
- target: "feature-cards",
13558
- label: "Soft tinted panels",
13559
- blockKinds: ["block.feature-cards"],
13560
- design: {
13561
- sectionSurface: "base",
13562
- contentFrame: plainFrame,
13563
- itemSurface: "inset"
13564
- }
13565
- }),
13566
- defineBlockAppearancePreset({
13567
- kind: "block-design",
13568
- id: "feature-cards-editorial-diptych",
13569
- target: "feature-cards",
13570
- label: "Editorial diptych",
13571
- blockKinds: ["block.feature-cards"],
13572
- constraints: { layoutVariantKeys: ["editorial-diptych"] },
13573
- design: {
13574
- sectionSurface: "base",
13575
- contentFrame: plainFrame,
13576
- itemSurface: "flat"
13577
- }
13578
- }),
13579
- defineBlockAppearancePreset({
13580
- kind: "block-design",
13581
- id: "feature-cards-editorial-pathways",
13582
- target: "feature-cards",
13583
- label: "Editorial pathways",
13584
- blockKinds: ["block.feature-cards"],
13585
- constraints: { layoutVariantKeys: ["editorial-pathways"] },
13586
- design: {
13587
- sectionSurface: "base",
13588
- contentFrame: plainFrame,
13589
- itemSurface: "flat"
13590
- }
13591
- }),
13592
- defineBlockAppearancePreset({
13593
- kind: "block-design",
13594
- id: "feature-cards-photo-tiles",
13595
- target: "feature-cards",
13596
- label: "Photo tiles",
13597
- blockKinds: ["block.feature-cards"],
13598
- design: {
13599
- sectionSurface: "base",
13600
- contentFrame: plainFrame,
13601
- itemSurface: "raised"
13602
- }
13603
- }),
13604
- defineBlockAppearancePreset({
13605
- kind: "block-design",
13606
- id: "events-lined-panel",
13607
- target: "events",
13608
- label: "Raised event panel",
13609
- blockKinds: ["block.event-calendar", "block.event-listing"],
13610
- design: {
13611
- sectionSurface: "base",
13612
- contentFrame: panelFrame("raised"),
13613
- itemSurface: "none"
13614
- }
13615
- }),
13616
- defineBlockAppearancePreset({
13617
- kind: "block-design",
13618
- id: "events-ruled-register",
13619
- target: "events",
13620
- label: "Ruled event register",
13621
- blockKinds: ["block.event-calendar", "block.event-listing"],
13622
- design: {
13623
- sectionSurface: "brand-depth-band",
13624
- contentFrame: plainFrame,
13625
- itemSurface: "none",
13626
- eventListTreatment: "ruled-register"
13627
- }
13628
- }),
13629
- defineBlockAppearancePreset({
13630
- kind: "block-design",
13631
- id: "events-editorial-register",
13632
- target: "events",
13633
- label: "Editorial event register",
13634
- blockKinds: ["block.event-calendar", "block.event-listing"],
13635
- design: {
13636
- sectionSurface: "base",
13637
- contentFrame: plainFrame,
13638
- itemSurface: "none",
13639
- eventListTreatment: "editorial-register"
13640
- }
13641
- }),
13642
- defineBlockAppearancePreset({
13643
- kind: "block-design",
13644
- id: "events-dense-index",
13645
- target: "events",
13646
- label: "Dense event index",
13647
- blockKinds: ["block.event-calendar", "block.event-listing"],
13648
- design: {
13649
- sectionSurface: "accent-band",
13650
- contentFrame: plainFrame,
13651
- itemSurface: "none",
13652
- eventListTreatment: "dense-index"
13653
- }
13654
- }),
13655
- defineBlockAppearancePreset({
13656
- kind: "block-design",
13657
- id: "schedule-details-brand-depth",
13658
- target: "events",
13659
- label: "Brand-depth schedule details",
13660
- blockKinds: ["block.event-details", "block.course-details"],
13661
- design: {
13662
- sectionSurface: "brand-depth-band",
13663
- contentFrame: plainFrame,
13664
- itemSurface: "none",
13665
- tileTreatment: "brand-depth"
13666
- }
13667
- }),
13668
- defineBlockAppearancePreset({
13669
- kind: "block-design",
13670
- id: "media-text-flush-feature",
13671
- target: "media-text",
13672
- label: "Flush media feature",
13673
- blockKinds: ["block.media-text"],
13674
- design: {
13675
- sectionSurface: "muted-band",
13676
- contentFrame: flushPanelFrame({ bleed: "start" }),
13677
- itemSurface: "none"
13678
- }
13679
- }),
13680
- defineBlockAppearancePreset({
13681
- kind: "block-design",
13682
- id: "testimonials-simple-cards",
13683
- target: "testimonials",
13684
- label: "Simple testimonial cards",
13685
- blockKinds: ["block.testimonials"],
13686
- design: {
13687
- sectionSurface: "base",
13688
- contentFrame: plainFrame,
13689
- itemSurface: "default"
13690
- }
13691
- }),
13692
- defineBlockAppearancePreset({
13693
- kind: "block-design",
13694
- id: "testimonials-raised-panel",
13695
- target: "testimonials",
13696
- label: "Raised testimonial panel",
13697
- blockKinds: ["block.testimonials"],
13698
- design: {
13699
- sectionSurface: "muted-band",
13700
- contentFrame: panelFrame("raised"),
13701
- itemSurface: "raised"
13702
- }
13703
- }),
13704
- defineBlockAppearancePreset({
13705
- kind: "block-design",
13706
- id: "testimonials-accent-panel",
13707
- target: "testimonials",
13708
- label: "Accent testimonial panel",
13709
- blockKinds: ["block.testimonials"],
13710
- design: {
13711
- sectionSurface: "accent-band",
13712
- contentFrame: panelFrame("raised"),
13713
- itemSurface: "raised"
13714
- }
13715
- }),
13716
- defineBlockAppearancePreset({
13717
- kind: "block-design",
13718
- id: "testimonials-default-cards",
13719
- target: "testimonials",
13720
- label: "Default cards",
13721
- blockKinds: ["block.testimonials"],
13722
- design: {
13723
- sectionSurface: "base",
13724
- contentFrame: plainFrame,
13725
- itemSurface: "none",
13726
- testimonialCardTreatment: "default"
13727
- }
13728
- }),
13729
- defineBlockAppearancePreset({
13730
- kind: "block-design",
13731
- id: "testimonials-statement-cards",
13732
- target: "testimonials",
13733
- label: "Statement cards",
13734
- blockKinds: ["block.testimonials"],
13735
- design: {
13736
- sectionSurface: "accent-band",
13737
- contentFrame: plainFrame,
13738
- itemSurface: "raised",
13739
- testimonialCardTreatment: "statement"
13740
- }
13741
- }),
13742
- defineBlockAppearancePreset({
13743
- kind: "block-design",
13744
- id: "testimonials-brand-statement-cards",
13745
- target: "testimonials",
13746
- label: "Brand statement cards",
13747
- blockKinds: ["block.testimonials"],
13748
- design: {
13749
- sectionSurface: "brand-depth-band",
13750
- contentFrame: plainFrame,
13751
- itemSurface: "raised",
13752
- testimonialCardTreatment: "statement"
13753
- }
13754
- }),
13755
- defineBlockAppearancePreset({
13756
- kind: "block-design",
13757
- id: "testimonials-non-carded",
13758
- target: "testimonials",
13759
- label: "Non-carded",
13760
- blockKinds: ["block.testimonials"],
13761
- design: {
13762
- sectionSurface: "muted-band",
13763
- contentFrame: plainFrame,
13764
- itemSurface: "none",
13765
- testimonialCardTreatment: "non-carded"
13766
- }
13767
- }),
13768
- defineBlockAppearancePreset({
13769
- kind: "block-design",
13770
- id: "testimonials-evergreen-lead",
13771
- target: "testimonials",
13772
- label: "Evergreen lead",
13773
- blockKinds: ["block.testimonials"],
13774
- constraints: { layoutVariantKeys: ["featured-editorial"] },
13775
- design: {
13776
- sectionSurface: "base",
13777
- contentFrame: plainFrame,
13778
- itemSurface: "none"
13779
- }
13780
- }),
13781
- defineBlockAppearancePreset({
13782
- kind: "block-design",
13783
- id: "testimonials-room-and-response",
13784
- target: "testimonials",
13785
- label: "Room and response",
13786
- blockKinds: ["block.testimonials"],
13787
- constraints: { layoutVariantKeys: ["featured-editorial"] },
13788
- design: {
13789
- sectionSurface: "base",
13790
- contentFrame: plainFrame,
13791
- itemSurface: "none"
13305
+ }],
13306
+ design: {
13307
+ sectionSurface: "hero-image",
13308
+ contentFrame: plainFrame,
13309
+ itemSurface: "none",
13310
+ sectionHeight: "immersive",
13311
+ heroComposition: "center",
13312
+ heroTypographyScale: "poster",
13313
+ imageSurfaceTreatment: {
13314
+ kind: "brand-scrim",
13315
+ token: "primary",
13316
+ intensity: "strong"
13792
13317
  }
13793
- }),
13794
- defineBlockAppearancePreset({
13795
- kind: "block-design",
13796
- id: "testimonials-open-floor",
13797
- target: "testimonials",
13798
- label: "Open floor",
13799
- blockKinds: ["block.testimonials"],
13800
- constraints: { layoutVariantKeys: ["featured-editorial"] },
13801
- design: {
13802
- sectionSurface: "base",
13803
- contentFrame: plainFrame,
13804
- itemSurface: "none"
13318
+ }
13319
+ }), defineBlockAppearancePreset({
13320
+ id: "hero-brand-scrim",
13321
+ target: "hero",
13322
+ label: "Brand scrim image hero",
13323
+ blockKinds: ["block.hero"],
13324
+ constraints: { layoutFamilies: ["centered", "compact"] },
13325
+ optionGroups: brandScrimOptionGroups,
13326
+ layoutPatches: microBannerLayoutPatches,
13327
+ design: {
13328
+ sectionSurface: "hero-image",
13329
+ contentFrame: plainFrame,
13330
+ itemSurface: "none",
13331
+ sectionHeight: "immersive",
13332
+ heroComposition: "center",
13333
+ heroTypographyScale: "display",
13334
+ imageSurfaceTreatment: {
13335
+ kind: "brand-scrim",
13336
+ token: "primary"
13805
13337
  }
13806
- }),
13807
- defineBlockAppearancePreset({
13808
- kind: "block-design",
13809
- id: "faq-base-accordion",
13810
- target: "faq",
13811
- label: "Base accordion FAQ",
13812
- blockKinds: ["block.faq"],
13813
- design: {
13814
- sectionSurface: "base",
13815
- contentFrame: plainFrame,
13816
- itemSurface: "default"
13338
+ }
13339
+ }), defineBlockAppearancePreset({
13340
+ id: "hero-brand-scrim-fixed-frame",
13341
+ target: "hero",
13342
+ label: "Fixed-frame brand scrim hero",
13343
+ blockKinds: ["block.hero"],
13344
+ constraints: { layoutFamilies: ["centered", "compact"] },
13345
+ optionGroups: brandScrimOptionGroups,
13346
+ layoutPatches: microBannerLayoutPatches,
13347
+ design: {
13348
+ sectionSurface: "hero-image",
13349
+ contentFrame: plainFrame,
13350
+ itemSurface: "none",
13351
+ sectionHeight: "immersive",
13352
+ heroComposition: "center",
13353
+ heroTypographyScale: "display",
13354
+ imageSurfaceTreatment: {
13355
+ kind: "brand-scrim",
13356
+ token: "primary"
13357
+ },
13358
+ imageSurfaceMotion: "fixed-frame",
13359
+ eyebrowTreatment: "accent-pill-bounce"
13360
+ }
13361
+ }), defineBlockAppearancePreset({
13362
+ id: "hero-brand-depth-expressive",
13363
+ target: "hero",
13364
+ label: "Expressive brand-depth hero",
13365
+ blockKinds: ["block.hero"],
13366
+ constraints: { layoutFamilies: ["centered", "compact"] },
13367
+ design: {
13368
+ sectionSurface: "brand-depth-band",
13369
+ contentFrame: plainFrame,
13370
+ itemSurface: "none",
13371
+ heroComposition: "center",
13372
+ heroTypographyScale: "editorial",
13373
+ eyebrowTreatment: "accent-pill-bounce"
13374
+ }
13375
+ }), defineBlockAppearancePreset({
13376
+ id: "hero-contained-intro",
13377
+ target: "hero",
13378
+ label: "Contained intro hero",
13379
+ blockKinds: ["block.hero"],
13380
+ design: {
13381
+ sectionSurface: "muted-band",
13382
+ contentFrame: panelFrame("inset"),
13383
+ itemSurface: "none",
13384
+ heroComposition: "center",
13385
+ heroTypographyScale: "editorial"
13386
+ }
13387
+ }), defineBlockAppearancePreset({
13388
+ id: "hero-split-editorial",
13389
+ target: "hero",
13390
+ label: "Editorial split hero",
13391
+ blockKinds: ["block.hero"],
13392
+ constraints: { layoutFamilies: ["split"] },
13393
+ design: {
13394
+ sectionSurface: "base",
13395
+ contentFrame: plainFrame,
13396
+ itemSurface: "none",
13397
+ heroTypographyScale: "editorial"
13398
+ }
13399
+ }), defineBlockAppearancePreset({
13400
+ id: "hero-split-brand",
13401
+ target: "hero",
13402
+ label: "Brand split hero",
13403
+ blockKinds: ["block.hero"],
13404
+ constraints: { layoutFamilies: ["split"] },
13405
+ design: {
13406
+ sectionSurface: "brand-depth-band",
13407
+ contentFrame: plainFrame,
13408
+ itemSurface: "none",
13409
+ heroTypographyScale: "display",
13410
+ eyebrowTreatment: "accent-pill-bounce"
13411
+ }
13412
+ }), defineBlockAppearancePreset({
13413
+ id: "hero-split-soft-panel",
13414
+ target: "hero",
13415
+ label: "Soft panel split hero",
13416
+ blockKinds: ["block.hero"],
13417
+ constraints: { layoutFamilies: ["split"] },
13418
+ design: {
13419
+ sectionSurface: "muted-band",
13420
+ contentFrame: panelFrame("raised"),
13421
+ itemSurface: "none",
13422
+ heroTypographyScale: "editorial"
13423
+ }
13424
+ }), defineBlockAppearancePreset({
13425
+ id: "hero-split-accent",
13426
+ target: "hero",
13427
+ label: "Accent split hero",
13428
+ blockKinds: ["block.hero"],
13429
+ constraints: { layoutFamilies: ["split"] },
13430
+ design: {
13431
+ sectionSurface: "accent-band",
13432
+ contentFrame: panelFrame("raised"),
13433
+ itemSurface: "none",
13434
+ heroTypographyScale: "display"
13435
+ }
13436
+ }), defineBlockAppearancePreset({
13437
+ id: "intro-editorial-statement",
13438
+ target: "intro",
13439
+ label: "Editorial intro statement",
13440
+ blockKinds: ["block.intro"],
13441
+ constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
13442
+ design: {
13443
+ sectionSurface: "base",
13444
+ contentFrame: plainFrame,
13445
+ itemSurface: "none",
13446
+ composition: {
13447
+ kind: "intro",
13448
+ treatment: "editorial-statement"
13817
13449
  }
13818
- }),
13819
- defineBlockAppearancePreset({
13820
- kind: "block-design",
13821
- id: "faq-contained-help",
13822
- target: "faq",
13823
- label: "Contained help panel",
13824
- blockKinds: ["block.faq"],
13825
- design: {
13826
- sectionSurface: "muted-band",
13827
- contentFrame: panelFrame("inset"),
13828
- itemSurface: "default"
13450
+ }
13451
+ }), defineBlockAppearancePreset({
13452
+ id: "intro-portrait-bio",
13453
+ target: "intro",
13454
+ label: "Portrait and bio",
13455
+ blockKinds: ["block.intro"],
13456
+ constraints: { layoutVariantKeys: ["media-copy"] },
13457
+ design: {
13458
+ sectionSurface: "base",
13459
+ contentFrame: plainFrame,
13460
+ itemSurface: "none",
13461
+ composition: {
13462
+ kind: "intro",
13463
+ treatment: "portrait-bio"
13829
13464
  }
13830
- }),
13831
- defineBlockAppearancePreset({
13832
- kind: "block-design",
13833
- id: "contact-form-panel",
13834
- target: "contact-form",
13835
- label: "Raised form panel",
13836
- blockKinds: ["block.form"],
13837
- design: {
13838
- sectionSurface: "muted-band",
13839
- contentFrame: panelFrame("raised"),
13840
- itemSurface: "none"
13465
+ }
13466
+ }), defineBlockAppearancePreset({
13467
+ id: "offerings-preview-default-cards",
13468
+ target: "offerings",
13469
+ label: "Default offering cards",
13470
+ blockKinds: ["block.offerings-preview"],
13471
+ design: {
13472
+ sectionSurface: "base",
13473
+ contentFrame: plainFrame,
13474
+ itemSurface: "default"
13475
+ }
13476
+ }), defineBlockAppearancePreset({
13477
+ id: "offerings-preview-secondary-cards",
13478
+ target: "offerings",
13479
+ label: "Secondary offering cards",
13480
+ blockKinds: ["block.offerings-preview"],
13481
+ design: {
13482
+ sectionSurface: "muted-band",
13483
+ contentFrame: plainFrame,
13484
+ itemSurface: "inset"
13485
+ }
13486
+ }), defineBlockAppearancePreset({
13487
+ id: "offerings-preview-non-carded",
13488
+ target: "offerings",
13489
+ label: "Non-carded offerings",
13490
+ blockKinds: ["block.offerings-preview"],
13491
+ design: {
13492
+ sectionSurface: "muted-band",
13493
+ contentFrame: plainFrame,
13494
+ itemSurface: "editorial"
13495
+ }
13496
+ }), defineBlockAppearancePreset({
13497
+ id: "offerings-preview-paired-feature-cards",
13498
+ target: "offerings",
13499
+ label: "Paired feature cards",
13500
+ blockKinds: ["block.offerings-preview"],
13501
+ constraints: { layoutVariantKeys: ["cards"] },
13502
+ design: {
13503
+ sectionSurface: "base",
13504
+ contentFrame: plainFrame,
13505
+ itemSurface: "none"
13506
+ }
13507
+ }), defineBlockAppearancePreset({
13508
+ id: "offerings-preview-open-editorial-columns",
13509
+ target: "offerings",
13510
+ label: "Open editorial columns",
13511
+ blockKinds: ["block.offerings-preview"],
13512
+ constraints: { layoutVariantKeys: ["cards"] },
13513
+ design: {
13514
+ sectionSurface: "base",
13515
+ contentFrame: plainFrame,
13516
+ itemSurface: "none"
13517
+ }
13518
+ }), defineBlockAppearancePreset({
13519
+ id: "offerings-preview-joined-programme-panel",
13520
+ target: "offerings",
13521
+ label: "Joined programme panel",
13522
+ blockKinds: ["block.offerings-preview"],
13523
+ constraints: { layoutVariantKeys: ["cards"] },
13524
+ design: {
13525
+ sectionSurface: "base",
13526
+ contentFrame: plainFrame,
13527
+ itemSurface: "none"
13528
+ }
13529
+ }), defineBlockAppearancePreset({
13530
+ id: "feature-cards-raised-rule",
13531
+ target: "feature-cards",
13532
+ label: "Raised cards with rule",
13533
+ blockKinds: ["block.feature-cards"],
13534
+ design: {
13535
+ sectionSurface: "base",
13536
+ contentFrame: plainFrame,
13537
+ itemSurface: "raised"
13538
+ }
13539
+ }), defineBlockAppearancePreset({
13540
+ id: "feature-cards-bold-colors",
13541
+ target: "feature-cards",
13542
+ label: "Bold colour-blocked cards",
13543
+ blockKinds: ["block.feature-cards"],
13544
+ design: {
13545
+ sectionSurface: "base",
13546
+ contentFrame: plainFrame,
13547
+ itemSurface: "color-blocked"
13548
+ }
13549
+ }), defineBlockAppearancePreset({
13550
+ id: "feature-cards-editorial-columns",
13551
+ target: "feature-cards",
13552
+ label: "Editorial open columns",
13553
+ blockKinds: ["block.feature-cards"],
13554
+ design: {
13555
+ sectionSurface: "base",
13556
+ contentFrame: plainFrame,
13557
+ itemSurface: "editorial"
13558
+ }
13559
+ }), defineBlockAppearancePreset({
13560
+ id: "feature-cards-asymmetric-emphasis",
13561
+ target: "feature-cards",
13562
+ label: "Asymmetric emphasis pair",
13563
+ blockKinds: ["block.feature-cards"],
13564
+ constraints: { layoutFamilies: ["grid"] },
13565
+ design: {
13566
+ sectionSurface: "base",
13567
+ contentFrame: plainFrame,
13568
+ itemSurface: "none",
13569
+ composition: {
13570
+ kind: "feature-cards",
13571
+ treatment: "asymmetric-emphasis"
13841
13572
  }
13842
- }),
13843
- defineBlockAppearancePreset({
13844
- kind: "block-design",
13845
- id: "cta-accent-band",
13846
- target: "cta",
13847
- label: "Accent CTA band",
13848
- blockKinds: ["block.cta-full"],
13849
- design: {
13850
- sectionSurface: "accent-band",
13851
- contentFrame: plainFrame,
13852
- itemSurface: "none",
13853
- eyebrowTreatment: "accent"
13573
+ }
13574
+ }), defineBlockAppearancePreset({
13575
+ id: "feature-cards-framed-programme",
13576
+ target: "feature-cards",
13577
+ label: "Framed programme cards",
13578
+ blockKinds: ["block.feature-cards"],
13579
+ constraints: { layoutFamilies: ["grid"] },
13580
+ design: {
13581
+ sectionSurface: "brand-depth-band",
13582
+ contentFrame: plainFrame,
13583
+ itemSurface: "inset",
13584
+ composition: {
13585
+ kind: "feature-cards",
13586
+ treatment: "framed-programme"
13854
13587
  }
13855
- })
13856
- ];
13588
+ }
13589
+ }), defineBlockAppearancePreset({
13590
+ id: "feature-cards-soft-panels",
13591
+ target: "feature-cards",
13592
+ label: "Soft tinted panels",
13593
+ blockKinds: ["block.feature-cards"],
13594
+ design: {
13595
+ sectionSurface: "base",
13596
+ contentFrame: plainFrame,
13597
+ itemSurface: "inset"
13598
+ }
13599
+ }), defineBlockAppearancePreset({
13600
+ id: "feature-cards-editorial-diptych",
13601
+ target: "feature-cards",
13602
+ label: "Editorial diptych",
13603
+ blockKinds: ["block.feature-cards"],
13604
+ constraints: { layoutVariantKeys: ["editorial-diptych"] },
13605
+ design: {
13606
+ sectionSurface: "base",
13607
+ contentFrame: plainFrame,
13608
+ itemSurface: "flat"
13609
+ }
13610
+ }), defineBlockAppearancePreset({
13611
+ id: "feature-cards-editorial-pathways",
13612
+ target: "feature-cards",
13613
+ label: "Editorial pathways",
13614
+ blockKinds: ["block.feature-cards"],
13615
+ constraints: { layoutVariantKeys: ["editorial-pathways"] },
13616
+ design: {
13617
+ sectionSurface: "base",
13618
+ contentFrame: plainFrame,
13619
+ itemSurface: "flat"
13620
+ }
13621
+ }), defineBlockAppearancePreset({
13622
+ id: "feature-cards-photo-tiles",
13623
+ target: "feature-cards",
13624
+ label: "Photo tiles",
13625
+ blockKinds: ["block.feature-cards"],
13626
+ design: {
13627
+ sectionSurface: "base",
13628
+ contentFrame: plainFrame,
13629
+ itemSurface: "raised"
13630
+ }
13631
+ }), defineBlockAppearancePreset({
13632
+ id: "events-lined-panel",
13633
+ target: "events",
13634
+ label: "Raised event panel",
13635
+ blockKinds: ["block.event-calendar", "block.event-listing"],
13636
+ design: {
13637
+ sectionSurface: "base",
13638
+ contentFrame: panelFrame("raised"),
13639
+ itemSurface: "none"
13640
+ }
13641
+ }), defineBlockAppearancePreset({
13642
+ id: "events-ruled-register",
13643
+ target: "events",
13644
+ label: "Ruled event register",
13645
+ blockKinds: ["block.event-calendar", "block.event-listing"],
13646
+ design: {
13647
+ sectionSurface: "brand-depth-band",
13648
+ contentFrame: plainFrame,
13649
+ itemSurface: "none",
13650
+ eventListTreatment: "ruled-register"
13651
+ }
13652
+ }), defineBlockAppearancePreset({
13653
+ id: "events-editorial-register",
13654
+ target: "events",
13655
+ label: "Editorial event register",
13656
+ blockKinds: ["block.event-calendar", "block.event-listing"],
13657
+ design: {
13658
+ sectionSurface: "base",
13659
+ contentFrame: plainFrame,
13660
+ itemSurface: "none",
13661
+ eventListTreatment: "editorial-register"
13662
+ }
13663
+ }), defineBlockAppearancePreset({
13664
+ id: "events-dense-index",
13665
+ target: "events",
13666
+ label: "Dense event index",
13667
+ blockKinds: ["block.event-calendar", "block.event-listing"],
13668
+ design: {
13669
+ sectionSurface: "accent-band",
13670
+ contentFrame: plainFrame,
13671
+ itemSurface: "none",
13672
+ eventListTreatment: "dense-index"
13673
+ }
13674
+ }), defineBlockAppearancePreset({
13675
+ id: "schedule-details-brand-depth",
13676
+ target: "events",
13677
+ label: "Brand-depth schedule details",
13678
+ blockKinds: ["block.event-details", "block.course-details"],
13679
+ design: {
13680
+ sectionSurface: "brand-depth-band",
13681
+ contentFrame: plainFrame,
13682
+ itemSurface: "none",
13683
+ tileTreatment: "brand-depth"
13684
+ }
13685
+ }), defineBlockAppearancePreset({
13686
+ id: "media-text-flush-feature",
13687
+ target: "media-text",
13688
+ label: "Flush media feature",
13689
+ blockKinds: ["block.media-text"],
13690
+ design: {
13691
+ sectionSurface: "muted-band",
13692
+ contentFrame: flushPanelFrame({ bleed: "start" }),
13693
+ itemSurface: "none"
13694
+ }
13695
+ }), defineBlockAppearancePreset({
13696
+ id: "testimonials-simple-cards",
13697
+ target: "testimonials",
13698
+ label: "Simple testimonial cards",
13699
+ blockKinds: ["block.testimonials"],
13700
+ design: {
13701
+ sectionSurface: "base",
13702
+ contentFrame: plainFrame,
13703
+ itemSurface: "default"
13704
+ }
13705
+ }), defineBlockAppearancePreset({
13706
+ id: "testimonials-raised-panel",
13707
+ target: "testimonials",
13708
+ label: "Raised testimonial panel",
13709
+ blockKinds: ["block.testimonials"],
13710
+ design: {
13711
+ sectionSurface: "muted-band",
13712
+ contentFrame: panelFrame("raised"),
13713
+ itemSurface: "raised"
13714
+ }
13715
+ }), defineBlockAppearancePreset({
13716
+ id: "testimonials-accent-panel",
13717
+ target: "testimonials",
13718
+ label: "Accent testimonial panel",
13719
+ blockKinds: ["block.testimonials"],
13720
+ design: {
13721
+ sectionSurface: "accent-band",
13722
+ contentFrame: panelFrame("raised"),
13723
+ itemSurface: "raised"
13724
+ }
13725
+ }), defineBlockAppearancePreset({
13726
+ id: "testimonials-default-cards",
13727
+ target: "testimonials",
13728
+ label: "Default cards",
13729
+ blockKinds: ["block.testimonials"],
13730
+ design: {
13731
+ sectionSurface: "base",
13732
+ contentFrame: plainFrame,
13733
+ itemSurface: "none",
13734
+ testimonialCardTreatment: "default"
13735
+ }
13736
+ }), defineBlockAppearancePreset({
13737
+ id: "testimonials-statement-cards",
13738
+ target: "testimonials",
13739
+ label: "Statement cards",
13740
+ blockKinds: ["block.testimonials"],
13741
+ design: {
13742
+ sectionSurface: "accent-band",
13743
+ contentFrame: plainFrame,
13744
+ itemSurface: "raised",
13745
+ testimonialCardTreatment: "statement"
13746
+ }
13747
+ }), defineBlockAppearancePreset({
13748
+ id: "testimonials-brand-statement-cards",
13749
+ target: "testimonials",
13750
+ label: "Brand statement cards",
13751
+ blockKinds: ["block.testimonials"],
13752
+ design: {
13753
+ sectionSurface: "brand-depth-band",
13754
+ contentFrame: plainFrame,
13755
+ itemSurface: "raised",
13756
+ testimonialCardTreatment: "statement"
13757
+ }
13758
+ }), defineBlockAppearancePreset({
13759
+ id: "testimonials-non-carded",
13760
+ target: "testimonials",
13761
+ label: "Non-carded",
13762
+ blockKinds: ["block.testimonials"],
13763
+ design: {
13764
+ sectionSurface: "muted-band",
13765
+ contentFrame: plainFrame,
13766
+ itemSurface: "none",
13767
+ testimonialCardTreatment: "non-carded"
13768
+ }
13769
+ }), defineBlockAppearancePreset({
13770
+ id: "testimonials-evergreen-lead",
13771
+ target: "testimonials",
13772
+ label: "Evergreen lead",
13773
+ blockKinds: ["block.testimonials"],
13774
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
13775
+ design: {
13776
+ sectionSurface: "base",
13777
+ contentFrame: plainFrame,
13778
+ itemSurface: "none"
13779
+ }
13780
+ }), defineBlockAppearancePreset({
13781
+ id: "testimonials-room-and-response",
13782
+ target: "testimonials",
13783
+ label: "Room and response",
13784
+ blockKinds: ["block.testimonials"],
13785
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
13786
+ design: {
13787
+ sectionSurface: "base",
13788
+ contentFrame: plainFrame,
13789
+ itemSurface: "none"
13790
+ }
13791
+ }), defineBlockAppearancePreset({
13792
+ id: "testimonials-open-floor",
13793
+ target: "testimonials",
13794
+ label: "Open floor",
13795
+ blockKinds: ["block.testimonials"],
13796
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
13797
+ design: {
13798
+ sectionSurface: "base",
13799
+ contentFrame: plainFrame,
13800
+ itemSurface: "none"
13801
+ }
13802
+ }), defineBlockAppearancePreset({
13803
+ id: "faq-base-accordion",
13804
+ target: "faq",
13805
+ label: "Base accordion FAQ",
13806
+ blockKinds: ["block.faq"],
13807
+ design: {
13808
+ sectionSurface: "base",
13809
+ contentFrame: plainFrame,
13810
+ itemSurface: "default"
13811
+ }
13812
+ }), defineBlockAppearancePreset({
13813
+ id: "faq-contained-help",
13814
+ target: "faq",
13815
+ label: "Contained help panel",
13816
+ blockKinds: ["block.faq"],
13817
+ design: {
13818
+ sectionSurface: "muted-band",
13819
+ contentFrame: panelFrame("inset"),
13820
+ itemSurface: "default"
13821
+ }
13822
+ }), defineBlockAppearancePreset({
13823
+ id: "contact-form-panel",
13824
+ target: "contact-form",
13825
+ label: "Raised form panel",
13826
+ blockKinds: ["block.form"],
13827
+ design: {
13828
+ sectionSurface: "muted-band",
13829
+ contentFrame: panelFrame("raised"),
13830
+ itemSurface: "none"
13831
+ }
13832
+ }), defineBlockAppearancePreset({
13833
+ id: "cta-accent-band",
13834
+ target: "cta",
13835
+ label: "Accent CTA band",
13836
+ blockKinds: ["block.cta-full"],
13837
+ design: {
13838
+ sectionSurface: "accent-band",
13839
+ contentFrame: plainFrame,
13840
+ itemSurface: "none",
13841
+ eyebrowTreatment: "accent"
13842
+ }
13843
+ });
13857
13844
  }));
13858
13845
  var init_appearancePresetCatalog = __esmMin((() => {
13859
13846
  init_blockAppearancePresets();
13860
- [...blockAppearancePresets];
13861
13847
  }));
13862
13848
  var init_appearancePresetTypes = __esmMin((() => {}));
13863
13849
  //#endregion
@@ -15589,7 +15575,7 @@ function canonicalPaletteHashInput(colors, mode) {
15589
15575
  return `${mode}|${paletteColorFingerprint(colors)}`;
15590
15576
  }
15591
15577
  /**
15592
- * The shared TypeScript/SQL protocol. Do not reorder roles: the order comes
15578
+ * Stable curated-catalogue identity. Do not reorder roles: the order comes
15593
15579
  * from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
15594
15580
  */
15595
15581
  function paletteValueKey(colors, mode) {
@@ -17250,6 +17236,47 @@ var init_backgroundAppearance = __esmMin((() => {
17250
17236
  var init_compositionBudget = __esmMin((() => {
17251
17237
  init_types$15();
17252
17238
  }));
17239
+ var init_headerStyleParts = __esmMin((() => {}));
17240
+ var headerInteractionPaletteValues, headerInteractionPaletteSchema;
17241
+ var init_interactionPalette = __esmMin((() => {
17242
+ headerInteractionPaletteValues = [
17243
+ "primary",
17244
+ "secondary",
17245
+ "accent"
17246
+ ];
17247
+ headerInteractionPaletteSchema = z$1.enum(headerInteractionPaletteValues);
17248
+ }));
17249
+ var clearSplitInteractionPalette;
17250
+ var init_headerInteractionPalette = __esmMin((() => {
17251
+ init_interactionPalette();
17252
+ init_lookOptionGroups();
17253
+ clearSplitInteractionPalette = defineLookOptionGroup({
17254
+ id: "interaction-palette",
17255
+ label: "Hover colour",
17256
+ defaultOptionId: "accent",
17257
+ options: [
17258
+ {
17259
+ id: "accent",
17260
+ label: "Accent"
17261
+ },
17262
+ {
17263
+ id: "primary",
17264
+ label: "Primary"
17265
+ },
17266
+ {
17267
+ id: "secondary",
17268
+ label: "Secondary"
17269
+ }
17270
+ ]
17271
+ });
17272
+ }));
17273
+ var init_headerOpeningForeground = __esmMin((() => {
17274
+ init_expandPalette();
17275
+ init_colorConversion();
17276
+ init_tokens();
17277
+ init_colorTokenParts();
17278
+ init_types$15();
17279
+ }));
17253
17280
  var init_customizableSurfaces = __esmMin((() => {
17254
17281
  init_types$15();
17255
17282
  })), logoTextConfidenceValues, logoAssetShapeValues, logoKindValues, logoDensityValues, logoContainsTextSchema, logoAnalysisSourceSchema, brandDisplayModeValues, logoAccommodationPatternValues, logoSizePolicyValues;
@@ -17360,7 +17387,7 @@ function asHeaderStyleId(value) {
17360
17387
  * optional nested styling fields that would otherwise leak from another Look.
17361
17388
  */
17362
17389
  function baseHeader(theme) {
17363
- const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
17390
+ const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, interactionPalette: _interactionPalette, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
17364
17391
  return {
17365
17392
  ...header,
17366
17393
  navContainer: {
@@ -17719,12 +17746,12 @@ function floatingGlassHeader(theme) {
17719
17746
  }
17720
17747
  };
17721
17748
  }
17722
- function headerConfigurationKey(configuration) {
17723
- return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
17724
- }
17725
17749
  var titleOnlyLogoAccommodation, inlineWordmarkLogoAccommodation, inlineMarkWithTitleLogoAccommodation, logoPlateAccommodation, centeredBadgeAccommodation, popoutBadgeAccommodation, centeredMastheadAccommodation, unbackedOverlayLogoAccommodation, inlineClassicLogoAccommodations, centeredLogoAccommodations, overlayLogoAccommodations, headerLayoutCatalog, headerStyleCatalog, headerStylesById, headerStyleCompatibilityOrder, legacyHeaderLookAliases, legacyHeaderLookAliasesById, headerLookCatalog;
17726
17750
  var init_headerLooks = __esmMin((() => {
17727
17751
  init_headerCtaVariants();
17752
+ init_headerStyleParts();
17753
+ init_headerInteractionPalette();
17754
+ init_headerOpeningForeground();
17728
17755
  init_customizableSurfaces();
17729
17756
  init_logoBranding();
17730
17757
  init_types$15();
@@ -17851,7 +17878,6 @@ var init_headerLooks = __esmMin((() => {
17851
17878
  id: asHeaderLayoutId("classic"),
17852
17879
  label: "Classic",
17853
17880
  description: "Logo and navigation in one practical horizontal row.",
17854
- structure: "inline-classic",
17855
17881
  variant: "classic",
17856
17882
  defaultPositioning: "sticky",
17857
17883
  shrinkOnScroll: false
@@ -17860,7 +17886,6 @@ var init_headerLooks = __esmMin((() => {
17860
17886
  id: asHeaderLayoutId("centered"),
17861
17887
  label: "Centered",
17862
17888
  description: "Logo centered above a balanced navigation row.",
17863
- structure: "centered-stack",
17864
17889
  variant: "centered",
17865
17890
  defaultPositioning: "static",
17866
17891
  shrinkOnScroll: false,
@@ -17876,7 +17901,6 @@ var init_headerLooks = __esmMin((() => {
17876
17901
  id: asHeaderLayoutId("floating"),
17877
17902
  label: "Floating",
17878
17903
  description: "Detached header chrome that sits over the opening section.",
17879
- structure: "floating-shell",
17880
17904
  variant: "floating",
17881
17905
  defaultPositioning: "sticky",
17882
17906
  shrinkOnScroll: true,
@@ -18035,10 +18059,13 @@ var init_headerLooks = __esmMin((() => {
18035
18059
  label: "Clear Split",
18036
18060
  description: "Floating logo with transparent navigation and no shared shell.",
18037
18061
  supportedLayoutIds: supportedLayouts(["floating"]),
18038
- navInteraction: "color-change",
18062
+ navInteraction: "pill-background",
18039
18063
  surface: "floating",
18040
- defaultDepth: "none",
18064
+ defaultDepth: "line",
18041
18065
  navTypography: "plain",
18066
+ openingForegroundTarget: "all",
18067
+ scrollTreatment: "contrast-glass",
18068
+ interactionPalette: clearSplitInteractionPalette,
18042
18069
  moods: ["editorial", "calm"]
18043
18070
  },
18044
18071
  {
@@ -18061,6 +18088,7 @@ var init_headerLooks = __esmMin((() => {
18061
18088
  surface: "floating",
18062
18089
  defaultDepth: "shadow",
18063
18090
  navTypography: "quiet-caps",
18091
+ openingForegroundTarget: "brand-only",
18064
18092
  moods: ["expressive"]
18065
18093
  },
18066
18094
  {
@@ -18072,6 +18100,7 @@ var init_headerLooks = __esmMin((() => {
18072
18100
  surface: "floating",
18073
18101
  defaultDepth: "shadow",
18074
18102
  navTypography: "heading",
18103
+ openingForegroundTarget: "brand-only",
18075
18104
  moods: ["calm", "editorial"]
18076
18105
  }
18077
18106
  ]);
@@ -18227,13 +18256,6 @@ var init_headerLooks = __esmMin((() => {
18227
18256
  {
18228
18257
  id: asHeaderLookId("clean-base"),
18229
18258
  label: "Clean base",
18230
- visualTreatment: "solid-neutral",
18231
- layoutBehavior: "sticky",
18232
- configuration: {
18233
- structure: "inline-classic",
18234
- treatment: "solid-neutral",
18235
- behavior: "sticky"
18236
- },
18237
18259
  openingRequirement: "none",
18238
18260
  logoAccommodations: inlineClassicLogoAccommodations,
18239
18261
  compile: cleanBaseHeader
@@ -18241,13 +18263,6 @@ var init_headerLooks = __esmMin((() => {
18241
18263
  {
18242
18264
  id: asHeaderLookId("classic-centered-nav"),
18243
18265
  label: "Centered nav",
18244
- visualTreatment: "solid-neutral",
18245
- layoutBehavior: "sticky",
18246
- configuration: {
18247
- structure: "inline-classic",
18248
- treatment: "solid-neutral",
18249
- behavior: "sticky"
18250
- },
18251
18266
  openingRequirement: "none",
18252
18267
  maxRecommendedNavItems: 6,
18253
18268
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -18256,13 +18271,6 @@ var init_headerLooks = __esmMin((() => {
18256
18271
  {
18257
18272
  id: asHeaderLookId("brand-solid"),
18258
18273
  label: "Brand solid",
18259
- visualTreatment: "solid-brand",
18260
- layoutBehavior: "sticky-shrink",
18261
- configuration: {
18262
- structure: "inline-classic",
18263
- treatment: "solid-brand",
18264
- behavior: "sticky-shrink"
18265
- },
18266
18274
  openingRequirement: "none",
18267
18275
  logoAccommodations: inlineClassicLogoAccommodations,
18268
18276
  compile: solidBrandHeader
@@ -18270,13 +18278,6 @@ var init_headerLooks = __esmMin((() => {
18270
18278
  {
18271
18279
  id: asHeaderLookId("serif-line"),
18272
18280
  label: "Serif line",
18273
- visualTreatment: "light-serif",
18274
- layoutBehavior: "sticky",
18275
- configuration: {
18276
- structure: "centered-stack",
18277
- treatment: "light-serif",
18278
- behavior: "sticky"
18279
- },
18280
18281
  openingRequirement: "none",
18281
18282
  maxRecommendedNavItems: 6,
18282
18283
  logoAccommodations: centeredLogoAccommodations,
@@ -18285,13 +18286,6 @@ var init_headerLooks = __esmMin((() => {
18285
18286
  {
18286
18287
  id: asHeaderLookId("centered-calm"),
18287
18288
  label: "Centered calm",
18288
- visualTreatment: "light-serif",
18289
- layoutBehavior: "normal-flow",
18290
- configuration: {
18291
- structure: "centered-stack",
18292
- treatment: "light-serif",
18293
- behavior: "normal-flow"
18294
- },
18295
18289
  openingRequirement: "none",
18296
18290
  maxRecommendedNavItems: 5,
18297
18291
  logoAccommodations: centeredLogoAccommodations,
@@ -18300,13 +18294,6 @@ var init_headerLooks = __esmMin((() => {
18300
18294
  {
18301
18295
  id: asHeaderLookId("practical-utility"),
18302
18296
  label: "Practical utility",
18303
- visualTreatment: "solid-neutral",
18304
- layoutBehavior: "sticky-shrink",
18305
- configuration: {
18306
- structure: "inline-classic",
18307
- treatment: "solid-neutral",
18308
- behavior: "sticky-shrink"
18309
- },
18310
18297
  openingRequirement: "none",
18311
18298
  requiresProminentCta: true,
18312
18299
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -18315,13 +18302,6 @@ var init_headerLooks = __esmMin((() => {
18315
18302
  {
18316
18303
  id: asHeaderLookId("minimal-transparent"),
18317
18304
  label: "Minimal transparent",
18318
- visualTreatment: "minimal-transparent",
18319
- layoutBehavior: "normal-flow",
18320
- configuration: {
18321
- structure: "inline-classic",
18322
- treatment: "minimal-transparent",
18323
- behavior: "normal-flow"
18324
- },
18325
18305
  openingRequirement: "reserved-space-ok",
18326
18306
  logoAccommodations: inlineClassicLogoAccommodations,
18327
18307
  compile: minimalTransparentHeader
@@ -18329,13 +18309,6 @@ var init_headerLooks = __esmMin((() => {
18329
18309
  {
18330
18310
  id: asHeaderLookId("transparent-overlay"),
18331
18311
  label: "Transparent overlay",
18332
- visualTreatment: "transparent-overlay",
18333
- layoutBehavior: "fixed-overlay",
18334
- configuration: {
18335
- structure: "inline-classic",
18336
- treatment: "transparent-overlay",
18337
- behavior: "fixed-overlay"
18338
- },
18339
18312
  openingRequirement: "requires-image-hero-with-contrast-overlay",
18340
18313
  maxRecommendedNavItems: 5,
18341
18314
  logoAccommodations: overlayLogoAccommodations,
@@ -18344,20 +18317,12 @@ var init_headerLooks = __esmMin((() => {
18344
18317
  {
18345
18318
  id: asHeaderLookId("floating-glass"),
18346
18319
  label: "Floating glass",
18347
- visualTreatment: "floating-glass",
18348
- layoutBehavior: "fixed-floating",
18349
- configuration: {
18350
- structure: "floating-shell",
18351
- treatment: "floating-glass",
18352
- behavior: "fixed-floating"
18353
- },
18354
18320
  openingRequirement: "requires-image-hero-with-contrast-overlay",
18355
18321
  maxRecommendedNavItems: 5,
18356
18322
  logoAccommodations: overlayLogoAccommodations,
18357
18323
  compile: floatingGlassHeader
18358
18324
  }
18359
18325
  ]);
18360
- new Set(headerLookCatalog.map((look) => headerConfigurationKey(look.configuration)));
18361
18326
  new Map(headerLookCatalog.map((look) => [look.id, look]));
18362
18327
  }));
18363
18328
  var init_compilationPlan = __esmMin((() => {
@@ -18603,11 +18568,9 @@ var init_types$12 = __esmMin((() => {
18603
18568
  "secondary",
18604
18569
  "outline",
18605
18570
  "ghost",
18606
- "link",
18607
- "tertiary",
18608
18571
  "accent"
18609
18572
  ];
18610
- buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only");
18573
+ buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only").refine((value) => value !== "link" && value !== "tertiary", { message: "Retired button role IDs are not valid variant IDs" });
18611
18574
  DEFAULT_VARIANT_ALIAS_ID = "default";
18612
18575
  opaqueButtonColourTokenSchema = themeColorTokenSchema.refine((value) => parseOpaqueButtonColourToken(value) !== null, "Button colour tokens must be opaque").transform((value) => {
18613
18576
  const token = parseOpaqueButtonColourToken(value);
@@ -21725,41 +21688,41 @@ var init_siteStyleTypography = __esmMin((() => {
21725
21688
  }));
21726
21689
  //#endregion
21727
21690
  //#region ../theme-core/src/lib/media.ts
21728
- var hotspotSchema$1, rotationSchema$1, rectSchema$1, aspectCropSchema$1, transformSchema$1, mediaSchema$1;
21729
- var init_media$2 = __esmMin((() => {
21730
- hotspotSchema$1 = z.object({
21691
+ var hotspotSchema, rotationSchema, rectSchema, aspectCropSchema, transformSchema, mediaSchema;
21692
+ var init_media$1 = __esmMin((() => {
21693
+ hotspotSchema = z.object({
21731
21694
  x: z.number().min(0).max(1),
21732
21695
  y: z.number().min(0).max(1),
21733
21696
  radius: z.number().optional()
21734
21697
  });
21735
- rotationSchema$1 = z.union([
21698
+ rotationSchema = z.union([
21736
21699
  z.literal(0),
21737
21700
  z.literal(90),
21738
21701
  z.literal(180),
21739
21702
  z.literal(270)
21740
21703
  ]);
21741
- rectSchema$1 = z.tuple([
21704
+ rectSchema = z.tuple([
21742
21705
  z.number(),
21743
21706
  z.number(),
21744
21707
  z.number(),
21745
21708
  z.number()
21746
21709
  ]);
21747
- aspectCropSchema$1 = z.object({
21710
+ aspectCropSchema = z.object({
21748
21711
  aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
21749
- rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema$1.optional()),
21750
- hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema$1.optional()),
21751
- rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema$1.optional())
21712
+ rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
21713
+ hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
21714
+ rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
21752
21715
  });
21753
- transformSchema$1 = z.object({
21716
+ transformSchema = z.object({
21754
21717
  aspectCrops: z.preprocess((value) => {
21755
21718
  if (!value || typeof value !== "object" || Array.isArray(value)) return;
21756
21719
  return value;
21757
- }, z.record(z.string(), aspectCropSchema$1.catch({}))).optional(),
21758
- rect: rectSchema$1.optional(),
21759
- hotspot: hotspotSchema$1.optional(),
21760
- rotation: rotationSchema$1.optional()
21720
+ }, z.record(z.string(), aspectCropSchema.catch({}))).optional(),
21721
+ rect: rectSchema.optional(),
21722
+ hotspot: hotspotSchema.optional(),
21723
+ rotation: rotationSchema.optional()
21761
21724
  });
21762
- mediaSchema$1 = z.object({
21725
+ mediaSchema = z.object({
21763
21726
  type: z.enum([
21764
21727
  "image",
21765
21728
  "video",
@@ -21780,7 +21743,7 @@ var init_media$2 = __esmMin((() => {
21780
21743
  height: z.number().optional(),
21781
21744
  storageBucket: z.string().optional(),
21782
21745
  storagePath: z.string().optional(),
21783
- transform: transformSchema$1.optional()
21746
+ transform: transformSchema.optional()
21784
21747
  });
21785
21748
  }));
21786
21749
  //#endregion
@@ -22615,20 +22578,61 @@ var init_generateBaseCSS = __esmMin((() => {
22615
22578
  };
22616
22579
  }));
22617
22580
  //#endregion
22581
+ //#region ../theme-core/src/buttons/effects/cssUtils.ts
22582
+ /**
22583
+ * Generate CSS selector for a state with dual support for hover
22584
+ *
22585
+ * @param themeId - Theme scope ID
22586
+ * @param variantId - Variant class name
22587
+ * @param state - State group (hover, active, focus, base)
22588
+ * @returns CSS selector string
22589
+ */
22590
+ function getStateSelector(themeId, variantId, state) {
22591
+ const stateSelector = STATE_SELECTORS[state];
22592
+ if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
22593
+ if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
22594
+ :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
22595
+ return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
22596
+ }
22597
+ /**
22598
+ * Generate CSS rule block for a state
22599
+ *
22600
+ * @param themeId - Theme scope ID
22601
+ * @param variantId - Variant class name
22602
+ * @param state - State group
22603
+ * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
22604
+ * @returns Complete CSS rule block
22605
+ */
22606
+ function generateStateCSS(themeId, variantId, state, cssProperties) {
22607
+ return `
22608
+ ${getStateSelector(themeId, variantId, state)} {
22609
+ ${cssProperties}
22610
+ }
22611
+ `;
22612
+ }
22613
+ var STATE_SELECTORS;
22614
+ var init_cssUtils = __esmMin((() => {
22615
+ STATE_SELECTORS = {
22616
+ hover: ":hover, [data-force-hover=\"true\"]",
22617
+ active: ":active",
22618
+ focus: ":focus-visible",
22619
+ base: ""
22620
+ };
22621
+ }));
22622
+ //#endregion
22618
22623
  //#region ../theme-core/src/buttons/effects/presets/background.ts
22619
- var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
22620
- var init_background$2 = __esmMin((() => {
22621
- darkenBackgroundEffect = {
22622
- id: "darken-background",
22623
- name: "Darken on Hover",
22624
- description: "Darkens the background color on hover",
22624
+ function shadeBackgroundEffect(config) {
22625
+ return {
22626
+ id: config.id,
22627
+ name: config.name,
22628
+ description: config.description,
22625
22629
  category: "background",
22626
22630
  pseudoElement: "none",
22627
22631
  applicableTo: ["button"],
22628
22632
  customizableOption: {
22629
22633
  name: "amount",
22630
22634
  type: "select",
22631
- label: "Darken Amount (shade step)",
22635
+ label: config.label,
22632
22636
  default: 100,
22633
22637
  options: [
22634
22638
  0,
@@ -22643,63 +22647,36 @@ var init_background$2 = __esmMin((() => {
22643
22647
  900
22644
22648
  ]
22645
22649
  },
22646
- isApplicable: (buttonConfig) => {
22647
- return buttonConfig.background.type === "solid";
22648
- },
22649
- generateCSS: (ctx) => {
22650
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
22650
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
22651
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
22651
22652
  if (buttonConfig.background.type !== "solid") return "";
22652
- const amount = options.amount || 100;
22653
+ const amount = (options.amount || 100) * config.shadeDirection;
22653
22654
  const baseToken = buttonConfig.background.colorToken ?? "primary-500";
22654
- const darkerToken = tokens.adjustShade(baseToken, amount);
22655
22655
  return `
22656
22656
  :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
22657
- background-color: ${tokens.getColor(darkerToken)};
22657
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
22658
22658
  }
22659
22659
  `;
22660
22660
  }
22661
22661
  };
22662
- lightenBackgroundEffect = {
22662
+ }
22663
+ var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
22664
+ var init_background$2 = __esmMin((() => {
22665
+ init_cssUtils();
22666
+ darkenBackgroundEffect = shadeBackgroundEffect({
22667
+ id: "darken-background",
22668
+ name: "Darken on Hover",
22669
+ description: "Darkens the background color on hover",
22670
+ label: "Darken Amount (shade step)",
22671
+ shadeDirection: 1
22672
+ });
22673
+ lightenBackgroundEffect = shadeBackgroundEffect({
22663
22674
  id: "lighten-background",
22664
22675
  name: "Lighten on Hover",
22665
22676
  description: "Lightens the background color on hover",
22666
- category: "background",
22667
- pseudoElement: "none",
22668
- applicableTo: ["button"],
22669
- customizableOption: {
22670
- name: "amount",
22671
- type: "select",
22672
- label: "Lighten Amount (shade step)",
22673
- default: 100,
22674
- options: [
22675
- 0,
22676
- 100,
22677
- 200,
22678
- 300,
22679
- 400,
22680
- 500,
22681
- 600,
22682
- 700,
22683
- 800,
22684
- 900
22685
- ]
22686
- },
22687
- isApplicable: (buttonConfig) => {
22688
- return buttonConfig.background.type === "solid";
22689
- },
22690
- generateCSS: (ctx) => {
22691
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
22692
- if (buttonConfig.background.type !== "solid") return "";
22693
- const amount = options.amount || 100;
22694
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
22695
- const lighterToken = tokens.adjustShade(baseToken, -amount);
22696
- return `
22697
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
22698
- background-color: ${tokens.getColor(lighterToken)};
22699
- }
22700
- `;
22701
- }
22702
- };
22677
+ label: "Lighten Amount (shade step)",
22678
+ shadeDirection: -1
22679
+ });
22703
22680
  fadeBackgroundEffect = {
22704
22681
  id: "fade-background",
22705
22682
  name: "Fade on Hover",
@@ -22800,12 +22777,14 @@ var init_background$2 = __esmMin((() => {
22800
22777
  ]
22801
22778
  },
22802
22779
  generateCSS: (ctx) => {
22803
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
22780
+ const { themeId, variantId, stateGroup, options, tokens, buttonConfig } = ctx;
22804
22781
  const colorToken = options.colorToken || "neutral-800";
22782
+ const color = tokens.getColor(colorToken);
22783
+ const navForeground = "textColorToken" in buttonConfig && typeof options.textColorToken === "string" ? `\n color: ${tokens.getColor(options.textColorToken)};` : "";
22805
22784
  return `
22806
22785
  /* Add background on hover */
22807
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
22808
- background-color: ${tokens.getColor(colorToken)};${"textColorToken" in buttonConfig && typeof options.textColorToken === "string" ? `\n color: ${tokens.getColor(options.textColorToken)};` : ""}
22786
+ ${getStateSelector(themeId, variantId, stateGroup)} {
22787
+ background-color: ${color};${navForeground}
22809
22788
  }
22810
22789
  `;
22811
22790
  }
@@ -22838,48 +22817,6 @@ var init_background$2 = __esmMin((() => {
22838
22817
  };
22839
22818
  }));
22840
22819
  //#endregion
22841
- //#region ../theme-core/src/buttons/effects/cssUtils.ts
22842
- /**
22843
- * Generate CSS selector for a state with dual support for hover
22844
- *
22845
- * @param themeId - Theme scope ID
22846
- * @param variantId - Variant class name
22847
- * @param state - State group (hover, active, focus, base)
22848
- * @returns CSS selector string
22849
- */
22850
- function getStateSelector(themeId, variantId, state) {
22851
- const stateSelector = STATE_SELECTORS[state];
22852
- if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
22853
- if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
22854
- :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
22855
- return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
22856
- }
22857
- /**
22858
- * Generate CSS rule block for a state
22859
- *
22860
- * @param themeId - Theme scope ID
22861
- * @param variantId - Variant class name
22862
- * @param state - State group
22863
- * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
22864
- * @returns Complete CSS rule block
22865
- */
22866
- function generateStateCSS(themeId, variantId, state, cssProperties) {
22867
- return `
22868
- ${getStateSelector(themeId, variantId, state)} {
22869
- ${cssProperties}
22870
- }
22871
- `;
22872
- }
22873
- var STATE_SELECTORS;
22874
- var init_cssUtils = __esmMin((() => {
22875
- STATE_SELECTORS = {
22876
- hover: ":hover, [data-force-hover=\"true\"]",
22877
- active: ":active",
22878
- focus: ":focus-visible",
22879
- base: ""
22880
- };
22881
- }));
22882
- //#endregion
22883
22820
  //#region ../theme-core/src/buttons/effects/presets/shadow.ts
22884
22821
  var borderGlowEffect, dropShadowEffect, innerShadowEffect, neumorphicShadowEffect, outerGlowEffect, retro3DShadowEffect;
22885
22822
  var init_shadow = __esmMin((() => {
@@ -25807,6 +25744,157 @@ var init_tokenOrColor = __esmMin((() => {
25807
25744
  ]);
25808
25745
  }));
25809
25746
  //#endregion
25747
+ //#region ../theme-core/src/header/paintTargets.ts
25748
+ /** Resolve the element that owns the visible header surface for each layout. */
25749
+ function getHeaderPaintTargets(variant, themeId, state = "base") {
25750
+ const scope = `:where([data-theme-scope="${themeId}"])`;
25751
+ const scrolledRoot = state === "scrolled" ? ".header-root.header-scrolled " : "";
25752
+ if (variant === "floating") {
25753
+ if (state === "scrolled") {
25754
+ const desktopOwner = `${scope} ${scrolledRoot}.header-floating-container`;
25755
+ const mobileOwner = `${scope} ${scrolledRoot}.header-mobile-bar`;
25756
+ return [{
25757
+ kind: "viewport-band",
25758
+ clipSelector: `${scope}:has(.header-root.header-scrolled)`,
25759
+ ownerSelector: desktopOwner,
25760
+ selector: `${desktopOwner}::before`,
25761
+ mediaQuery: MQ_MD_UP,
25762
+ topExtension: {
25763
+ customProperty: "--rb-header-floating-top-gap",
25764
+ value: "1rem",
25765
+ ownerProperty: "top"
25766
+ },
25767
+ ownerNeedsPositioning: false
25768
+ }, {
25769
+ kind: "viewport-band",
25770
+ clipSelector: `${scope}:has(.header-root.header-scrolled)`,
25771
+ ownerSelector: mobileOwner,
25772
+ selector: `${mobileOwner}::before`,
25773
+ mediaQuery: MQ_MD_DOWN,
25774
+ topExtension: {
25775
+ customProperty: "--rb-header-floating-top-gap",
25776
+ value: "0.75rem",
25777
+ ownerProperty: "margin-top"
25778
+ },
25779
+ ownerNeedsPositioning: true
25780
+ }];
25781
+ }
25782
+ return [{
25783
+ kind: "element-box",
25784
+ selector: `${scope} ${scrolledRoot}.header-floating-container`,
25785
+ mediaQuery: MQ_MD_UP
25786
+ }, {
25787
+ kind: "element-box",
25788
+ selector: `${scope} ${scrolledRoot}.header-mobile-bar`,
25789
+ mediaQuery: MQ_MD_DOWN
25790
+ }];
25791
+ }
25792
+ return [{
25793
+ kind: "element-box",
25794
+ selector: `${scope} .header-root${state === "scrolled" ? ".header-scrolled" : ""}::before`,
25795
+ pseudoElement: "inset"
25796
+ }];
25797
+ }
25798
+ function renderHeaderPaintTargetRules(targets, rules) {
25799
+ return targets.map((target) => {
25800
+ const block = renderHeaderPaintTargetRule(target, rules);
25801
+ return target.mediaQuery ? `@media ${target.mediaQuery} {\n${block}\n}` : block;
25802
+ }).join("\n");
25803
+ }
25804
+ function renderHeaderPaintTargetRule(target, rules) {
25805
+ switch (target.kind) {
25806
+ case "element-box": {
25807
+ const pseudoElementSetup = target.pseudoElement === "inset" ? [
25808
+ "content: \"\";",
25809
+ "position: absolute;",
25810
+ "inset: 0;",
25811
+ "pointer-events: none;",
25812
+ "border-radius: inherit;",
25813
+ "z-index: -1;"
25814
+ ] : [];
25815
+ return `${target.selector} {\n ${[...pseudoElementSetup, ...rules].join("\n ")}\n}`;
25816
+ }
25817
+ case "viewport-band": {
25818
+ const gap = target.topExtension;
25819
+ const ownerRules = [
25820
+ `${gap.customProperty}: ${gap.value};`,
25821
+ `${gap.ownerProperty}: var(${gap.customProperty});`,
25822
+ ...target.ownerNeedsPositioning ? ["position: relative;"] : [],
25823
+ "isolation: isolate;",
25824
+ "background: none;",
25825
+ "backdrop-filter: none;",
25826
+ "-webkit-backdrop-filter: none;",
25827
+ "border: 0;",
25828
+ "box-shadow: none;"
25829
+ ];
25830
+ const bandRules = [
25831
+ "content: \"\";",
25832
+ "position: absolute;",
25833
+ `top: calc(-1 * var(${gap.customProperty}));`,
25834
+ "bottom: 0;",
25835
+ "left: 50%;",
25836
+ "width: 100vw;",
25837
+ "transform: translateX(-50%);",
25838
+ "pointer-events: none;",
25839
+ "border-radius: 0;",
25840
+ "z-index: -1;",
25841
+ ...rules
25842
+ ];
25843
+ return `${target.clipSelector} {\n overflow-x: clip;\n}\n${target.ownerSelector} {\n ${ownerRules.join("\n ")}\n}\n${target.selector} {\n ${bandRules.join("\n ")}\n}`;
25844
+ }
25845
+ }
25846
+ }
25847
+ var init_paintTargets = __esmMin((() => {
25848
+ init_breakpoints();
25849
+ }));
25850
+ //#endregion
25851
+ //#region ../theme-core/src/header/scrollTreatment.ts
25852
+ function generateMobileOverlayBackdropFilterFix(themeId, variant) {
25853
+ const root = `:where([data-theme-scope="${themeId}"]) .header-root:has([data-nav-mobile-overlay][aria-hidden="false"])`;
25854
+ return `\n${(variant === "floating" ? [`${root} .header-mobile-bar`, `${root} .header-mobile-bar::before`] : [`${root}::before`]).join(",\n")} {\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n`;
25855
+ }
25856
+ function generateHeaderScrollTreatmentStyles(treatment, themeId, variant, surfaceRules = []) {
25857
+ if (!treatment) return "";
25858
+ switch (treatment.kind) {
25859
+ case "contrast-glass": {
25860
+ const backgroundChannels = treatment.backgroundTone === "dark" ? "0 0 0" : "255 255 255";
25861
+ return renderHeaderPaintTargetRules(getHeaderPaintTargets(variant, themeId, "scrolled"), [`background-color: rgb(${backgroundChannels} / 0.60);`, ...surfaceRules]);
25862
+ }
25863
+ }
25864
+ }
25865
+ var headerScrollTreatmentSchema;
25866
+ var init_scrollTreatment = __esmMin((() => {
25867
+ init_paintTargets();
25868
+ headerScrollTreatmentSchema = z$1.discriminatedUnion("kind", [z$1.object({
25869
+ kind: z$1.literal("contrast-glass"),
25870
+ backgroundTone: z$1.enum(["light", "dark"])
25871
+ })]).optional();
25872
+ }));
25873
+ //#endregion
25874
+ //#region ../theme-core/src/header/containerSchema.ts
25875
+ var headerContainerSchema;
25876
+ var init_containerSchema = __esmMin((() => {
25877
+ headerContainerSchema = z$1.object({
25878
+ rounded: z$1.enum([
25879
+ "none",
25880
+ "sm",
25881
+ "md",
25882
+ "lg",
25883
+ "xl",
25884
+ "2xl"
25885
+ ]).default("xl"),
25886
+ border: z$1.boolean().default(true),
25887
+ shadow: z$1.boolean().default(true),
25888
+ padding: z$1.enum([
25889
+ "sm",
25890
+ "md",
25891
+ "lg"
25892
+ ]).default("md"),
25893
+ tint: z$1.string().nullable().optional(),
25894
+ opacity: z$1.number().min(0).max(1).default(.12)
25895
+ }).optional();
25896
+ }));
25897
+ //#endregion
25810
25898
  //#region ../theme-core/src/schema.ts
25811
25899
  /**
25812
25900
  * Normalises the legacy `navTypography` font-role alias into the canonical
@@ -25822,9 +25910,9 @@ function normaliseHeaderNavFontRole(header) {
25822
25910
  navFontRole: navTypography
25823
25911
  } : rest;
25824
25912
  }
25825
- 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;
25913
+ var axesSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
25826
25914
  var init_schema = __esmMin((() => {
25827
- init_media$2();
25915
+ init_media$1();
25828
25916
  init_schema$1();
25829
25917
  init_buttons();
25830
25918
  init_cards();
@@ -25840,6 +25928,9 @@ var init_schema = __esmMin((() => {
25840
25928
  init_rawStyleFields();
25841
25929
  init_themeColorTokens();
25842
25930
  init_tokenOrColor();
25931
+ init_scrollTreatment();
25932
+ init_containerSchema();
25933
+ init_interactionPalette();
25843
25934
  axesSchema = z$1.object({
25844
25935
  tone: z$1.enum([
25845
25936
  "minimal",
@@ -25999,7 +26090,7 @@ var init_schema = __esmMin((() => {
25999
26090
  color: tokenOrCssColorValueSchema.nullable().optional(),
26000
26091
  gradient: z$1.string().nullable().optional(),
26001
26092
  gradientPresetId: z$1.string().min(1).nullable().optional(),
26002
- image: mediaSchema$1.nullable().optional(),
26093
+ image: mediaSchema.nullable().optional(),
26003
26094
  objectFit: z$1.enum([
26004
26095
  "fill",
26005
26096
  "fit",
@@ -26247,25 +26338,6 @@ var init_schema = __esmMin((() => {
26247
26338
  ]);
26248
26339
  headerMaxWidth = z$1.enum(["container", "full"]);
26249
26340
  headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
26250
- headerContainerSchema = z$1.object({
26251
- rounded: z$1.enum([
26252
- "none",
26253
- "sm",
26254
- "md",
26255
- "lg",
26256
- "xl",
26257
- "2xl"
26258
- ]).default("xl"),
26259
- border: z$1.boolean().default(true),
26260
- shadow: z$1.boolean().default(true),
26261
- padding: z$1.enum([
26262
- "sm",
26263
- "md",
26264
- "lg"
26265
- ]).default("md"),
26266
- tint: z$1.string().nullable().optional(),
26267
- opacity: z$1.number().min(0).max(1).default(.12)
26268
- }).optional();
26269
26341
  headerBorderSchema = componentBorderSchema.extend({ position: z$1.enum([
26270
26342
  "bottom",
26271
26343
  "top",
@@ -26379,7 +26451,7 @@ var init_schema = __esmMin((() => {
26379
26451
  contentOwner: z$1.literal(siteChromeBackgroundOverrideOwner).optional(),
26380
26452
  color: tokenOrCssColorValueSchema.nullable().optional(),
26381
26453
  gradient: gradientConfigSchema.nullable().optional(),
26382
- image: mediaSchema$1.nullable().optional(),
26454
+ image: mediaSchema.nullable().optional(),
26383
26455
  textColor: tokenOrCssColorValueSchema.nullable().optional()
26384
26456
  });
26385
26457
  headerSchema = z$1.object({
@@ -26388,7 +26460,8 @@ var init_schema = __esmMin((() => {
26388
26460
  shrinkOnScroll: z$1.boolean(),
26389
26461
  maxWidth: headerMaxWidth,
26390
26462
  barFrame: headerBarFrame.optional(),
26391
- logoOverride: mediaSchema$1.nullable().optional(),
26463
+ scrollTreatment: headerScrollTreatmentSchema,
26464
+ logoOverride: mediaSchema.nullable().optional(),
26392
26465
  background: headerBackgroundSchema.default({
26393
26466
  type: "color",
26394
26467
  color: "surface"
@@ -26400,6 +26473,7 @@ var init_schema = __esmMin((() => {
26400
26473
  navFontRole: z$1.enum(["body", "heading"]).optional(),
26401
26474
  navTypography: z$1.enum(["body", "heading"]).optional(),
26402
26475
  navTextSize: navLinkStyleSchema.shape.textSize,
26476
+ interactionPalette: headerInteractionPaletteSchema.optional(),
26403
26477
  navPlacement: z$1.enum(["end", "center"]).optional(),
26404
26478
  container: headerContainerSchema,
26405
26479
  border: headerBorderSchema,
@@ -28834,6 +28908,7 @@ var init_records = __esmMin((() => {}));
28834
28908
  var init_headerOpeningSection = __esmMin((() => {
28835
28909
  init_headerLooks();
28836
28910
  init_records();
28911
+ init_tokens();
28837
28912
  }));
28838
28913
  var init_generatedDesignPipeline = __esmMin((() => {
28839
28914
  init_compositionBudget();
@@ -29154,8 +29229,11 @@ var init_site_styles = __esmMin((() => {
29154
29229
  init_generatedSchemas();
29155
29230
  init_generatedDesignPipeline();
29156
29231
  init_headerLooks();
29232
+ init_headerInteractionPalette();
29233
+ init_headerOpeningForeground();
29157
29234
  init_headerOpeningSection();
29158
29235
  init_lookResolution();
29236
+ init_lookOptionGroups();
29159
29237
  init_logoBranding();
29160
29238
  init_pageDesignAuthority();
29161
29239
  init_pageDesignEditorErrors();
@@ -32010,23 +32088,14 @@ var init_heroCopy = __esmMin((() => {
32010
32088
  }));
32011
32089
  //#endregion
32012
32090
  //#region ../blocks/src/system/constants/buttonRoles.ts
32013
- /**
32014
- * Temporary rollout boundary for persisted content written before issue #1220.
32015
- * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
32016
- * only until the post-deploy role rewrite has been audited in production.
32017
- */
32018
- function canonicalizePersistedBlockButtonRole(value) {
32019
- return value === "link" || value === "tertiary" ? "ghost" : value;
32020
- }
32021
32091
  function isBlockButtonRole(value) {
32022
32092
  return blockButtonRoleSchema.safeParse(value).success;
32023
32093
  }
32024
- var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, persistedBlockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
32094
+ var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
32025
32095
  var init_buttonRoles = __esmMin((() => {
32026
32096
  init_buttons();
32027
32097
  BLOCK_BUTTON_ROLES = PUBLIC_BUTTON_ROLES;
32028
32098
  blockButtonRoleSchema = z$1.enum(BLOCK_BUTTON_ROLES);
32029
- persistedBlockButtonRoleSchema = z$1.preprocess((value) => typeof value === "string" ? canonicalizePersistedBlockButtonRole(value) : value, blockButtonRoleSchema);
32030
32099
  BLOCK_BUTTON_ROLE_LABELS = {
32031
32100
  primary: "Primary",
32032
32101
  secondary: "Secondary",
@@ -40236,88 +40305,7 @@ const weeklySlotAvailabilityBlockDefinition = {
40236
40305
  };
40237
40306
  //#endregion
40238
40307
  //#region ../blocks/src/system/blocks/events/shared/types.ts
40239
- var init_types$4 = __esmMin((() => {})), PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema, rotationSchema, rectSchema, aspectCropSchema, transformSchema, mediaPosterSchema, mediaBaseSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema;
40240
- var init_media$1 = __esmMin((() => {
40241
- init_src$2();
40242
- PUBLIC_DOWNLOAD_MEDIA_TYPES = [
40243
- "document",
40244
- "spreadsheet",
40245
- "archive",
40246
- "audio"
40247
- ];
40248
- hotspotSchema = z.object({
40249
- x: z.number().min(0).max(1),
40250
- y: z.number().min(0).max(1),
40251
- radius: z.number().optional()
40252
- });
40253
- rotationSchema = z.union([
40254
- z.literal(0),
40255
- z.literal(90),
40256
- z.literal(180),
40257
- z.literal(270)
40258
- ]);
40259
- rectSchema = z.tuple([
40260
- z.number(),
40261
- z.number(),
40262
- z.number(),
40263
- z.number()
40264
- ]);
40265
- aspectCropSchema = z.object({
40266
- aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
40267
- rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
40268
- hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
40269
- rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
40270
- });
40271
- transformSchema = z.object({
40272
- aspectCrops: z.preprocess((value) => {
40273
- if (!value || typeof value !== "object" || Array.isArray(value)) return;
40274
- return value;
40275
- }, z.record(z.string(), aspectCropSchema.catch({}))).optional(),
40276
- rect: rectSchema.optional(),
40277
- hotspot: hotspotSchema.optional(),
40278
- rotation: rotationSchema.optional()
40279
- });
40280
- mediaPosterSchema = z.discriminatedUnion("tag", [z.object({
40281
- tag: z.literal("storage"),
40282
- assetId: z.string().optional(),
40283
- storageBucket: z.string().min(1),
40284
- storagePath: z.string().min(1)
40285
- }), z.object({
40286
- tag: z.literal("external-src"),
40287
- assetId: z.string().optional(),
40288
- src: z.string().url()
40289
- })]);
40290
- mediaBaseSchema = z.object({
40291
- purpose: z.string().optional(),
40292
- placeholder: z.boolean().default(true).optional(),
40293
- assetId: z.string().optional(),
40294
- identifier: z.string().optional(),
40295
- src: z.string().optional(),
40296
- alt: z.string().optional(),
40297
- filename: z.string().optional(),
40298
- mimeType: z.string().optional(),
40299
- width: z.number().optional(),
40300
- height: z.number().optional(),
40301
- storageBucket: z.string().optional(),
40302
- storagePath: z.string().optional(),
40303
- poster: mediaPosterSchema.optional(),
40304
- transform: transformSchema.optional()
40305
- });
40306
- imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
40307
- videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
40308
- audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
40309
- documentMediaSchema = mediaBaseSchema.extend({ type: z.literal("document") });
40310
- spreadsheetMediaSchema = mediaBaseSchema.extend({ type: z.literal("spreadsheet") });
40311
- archiveMediaSchema = mediaBaseSchema.extend({ type: z.literal("archive") });
40312
- mediaSchema = z.discriminatedUnion("type", [
40313
- imageMediaSchema,
40314
- videoMediaSchema,
40315
- audioMediaSchema,
40316
- documentMediaSchema,
40317
- spreadsheetMediaSchema,
40318
- archiveMediaSchema
40319
- ]);
40320
- }));
40308
+ var init_types$4 = __esmMin((() => {}));
40321
40309
  //#endregion
40322
40310
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
40323
40311
  var bookingDepositRefundPolicySchema, bookingInstalmentPlanSchema, bookingFlexibleBalanceDueDateRuleSchema, bookingFlexibleBalanceConfigSchema, blockBookingPaymentCollectionOptionSchema, blockBookingPaymentTermsSchema;
@@ -40470,7 +40458,7 @@ var init_schemas$1 = __esmMin((() => {
40470
40458
  publicCoursesArraySchema = publicWholeSeriesOfferingsArraySchema;
40471
40459
  })), eventPresetSchema, eventScheduleScopeSchema$2, publicEventRecurrenceSchema, eventDestinationModeSchema, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, publicCoursePriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
40472
40460
  var init_schemas = __esmMin((() => {
40473
- init_media$1();
40461
+ init_media$2();
40474
40462
  init_richTextSchema();
40475
40463
  init_bookingPaymentTerms();
40476
40464
  init_schemas$1();
@@ -40746,7 +40734,7 @@ var init_schemas = __esmMin((() => {
40746
40734
  presentation: z$1.object({
40747
40735
  cardTitleOverride: z$1.string().nullable().optional(),
40748
40736
  summary: z$1.string().nullable().optional(),
40749
- image: mediaSchema.nullable().optional()
40737
+ image: mediaSchema$1.nullable().optional()
40750
40738
  }).optional(),
40751
40739
  slug: z$1.string(),
40752
40740
  path: z$1.string().nullable(),
@@ -41394,7 +41382,7 @@ var init_contract_schemas = __esmMin((() => {
41394
41382
  init_buttonRoles();
41395
41383
  previewStageSchema = z$1.enum(["preview", "published"]);
41396
41384
  registrationButtonVariantSchema = blockButtonRoleSchema;
41397
- eventButtonVariantSchema = persistedBlockButtonRoleSchema;
41385
+ eventButtonVariantSchema = blockButtonRoleSchema;
41398
41386
  eventLayoutSchema = z$1.enum(eventCalendarListLayoutValues);
41399
41387
  eventCalendarDisplayModeSchema = z$1.enum(eventCalendarDisplayModeValues);
41400
41388
  eventCalendarDefaultViewSchema = z$1.enum(eventCalendarDefaultViewValues);
@@ -49800,7 +49788,7 @@ const audioPlayerBlockDefinition = { manifest: createBlockManifest({
49800
49788
  }) };
49801
49789
  //#endregion
49802
49790
  //#region ../blocks/src/system/blocks/file-download.ts
49803
- init_media$1();
49791
+ init_media$2();
49804
49792
  init_defineBlock();
49805
49793
  init_button();
49806
49794
  init_builder$1();
@@ -52299,9 +52287,9 @@ init_schema$2();
52299
52287
  init_defineBlock();
52300
52288
  init_builder$1();
52301
52289
  init_fragments$1();
52302
- init_media$1();
52290
+ init_media$2();
52303
52291
  const ITEM_NAME = "member";
52304
- const teamMemberPhotoSchema = mediaSchema.refine((media) => media.type === "image", { message: "Team member photos must be image media" }).nullable();
52292
+ const teamMemberPhotoSchema = mediaSchema$1.refine((media) => media.type === "image", { message: "Team member photos must be image media" }).nullable();
52305
52293
  const teamMemberDataSchema = z$1.object({
52306
52294
  _type: z$1.literal("teamMember"),
52307
52295
  id: z$1.string(),
@@ -53889,9 +53877,9 @@ function getBlockDefinition(name) {
53889
53877
  init_tokens();
53890
53878
  //#endregion
53891
53879
  //#region ../blocks/src/system/helpers/backgroundMedia.ts
53892
- init_media$1();
53880
+ init_media$2();
53893
53881
  function resolveBackgroundMedia(input) {
53894
- const parsedMedia = mediaSchema.safeParse(input.image);
53882
+ const parsedMedia = mediaSchema$1.safeParse(input.image);
53895
53883
  if (!parsedMedia.success) return null;
53896
53884
  switch (parsedMedia.data.type) {
53897
53885
  case "image":
@@ -55152,7 +55140,6 @@ function renderMark(mark, key, child) {
55152
55140
  //#endregion
55153
55141
  //#region ../blocks/src/system/runtime/nodes/basic.tsx
55154
55142
  init_buttons();
55155
- init_buttonRoles();
55156
55143
  const TextNode = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, inlineTextFallbackPath, ...rest }) => {
55157
55144
  const inlineText = parseInlineTextFromUnknown(value);
55158
55145
  if (inlineText.ok && !isInlineTextEmpty(inlineText.value)) return /* @__PURE__ */ jsx(Text$2, {
@@ -55192,6 +55179,9 @@ function renderTrailingAffordanceIcon(affordance) {
55192
55179
  className: "rb-ml-2 rb-h-4 rb-w-4 rb-inline-block"
55193
55180
  });
55194
55181
  }
55182
+ function isMissingRequiredLink(linkRequired, resolvedHref) {
55183
+ return linkRequired && resolvedHref.length === 0;
55184
+ }
55195
55185
  const ButtonNode = ({ value, children, href, variantId = "primary", size = "md", disabled, type = "button", target, rel, linkRequired = false, trailingIcon, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, className, ...rest }) => {
55196
55186
  const content = value ?? children;
55197
55187
  if (!content) {
@@ -55200,12 +55190,16 @@ const ButtonNode = ({ value, children, href, variantId = "primary", size = "md",
55200
55190
  }
55201
55191
  const affordanceIcon = renderTrailingAffordanceIcon(resolveButtonAffordance({ trailingIcon }));
55202
55192
  const resolvedHref = typeof href === "string" ? href.trim() : "";
55203
- if (linkRequired && resolvedHref.length === 0) {
55193
+ if (isMissingRequiredLink(linkRequired, resolvedHref)) {
55204
55194
  console.warn("[ButtonNode] Missing href for link-required button");
55205
55195
  return null;
55206
55196
  }
55207
55197
  const extraClassName = affordanceIcon ? [className, AFFORDANCE_SUPPRESS_CLASS].filter(Boolean).join(" ") : className;
55208
- const resolvedVariantId = parseThemeButtonVariantId(canonicalizePersistedBlockButtonRole(variantId));
55198
+ const resolvedVariantId = parseThemeButtonVariantId(variantId);
55199
+ if (variantId && !resolvedVariantId) {
55200
+ console.error("[ButtonNode] Invalid button variant", { variantId });
55201
+ return null;
55202
+ }
55209
55203
  const combinedClassName = resolvedVariantId ? themeButtonClassName({
55210
55204
  variant: resolvedVariantId,
55211
55205
  size,
@@ -55310,7 +55304,7 @@ const FeatureCardIconNode = ({ value, treatment, generatedIconSizePx, className,
55310
55304
  //#region ../blocks/src/system/runtime/nodes/file-download.tsx
55311
55305
  init_svg();
55312
55306
  init_colorStyles();
55313
- init_media$1();
55307
+ init_media$2();
55314
55308
  init_buttons();
55315
55309
  init_media();
55316
55310
  init_buttonRoles();
@@ -55344,8 +55338,9 @@ function iconForMediaType(type) {
55344
55338
  });
55345
55339
  }
55346
55340
  }
55347
- function normalizeButtonVariant(value) {
55348
- return isBlockButtonRole(value) ? value : "primary";
55341
+ function parseButtonVariant(value) {
55342
+ if (value === null || value === void 0) return "primary";
55343
+ return isBlockButtonRole(value) ? value : null;
55349
55344
  }
55350
55345
  function FileDownloadNode({ value, title, description, buttonLabel, buttonVariant, className }) {
55351
55346
  if (!value || !isDownloadableMediaType(value.type)) return null;
@@ -55355,7 +55350,11 @@ function FileDownloadNode({ value, title, description, buttonLabel, buttonVarian
55355
55350
  const heading = title?.trim() || filename;
55356
55351
  const body = description?.trim();
55357
55352
  const label = buttonLabel?.trim() || "Download";
55358
- const variant = normalizeButtonVariant(buttonVariant);
55353
+ const variant = parseButtonVariant(buttonVariant);
55354
+ if (!variant) {
55355
+ console.error("[FileDownloadNode] Invalid button variant", { buttonVariant });
55356
+ return null;
55357
+ }
55359
55358
  return /* @__PURE__ */ jsx("div", {
55360
55359
  className,
55361
55360
  children: /* @__PURE__ */ jsxs("div", {
@@ -62820,6 +62819,51 @@ function resolveColorTokenHex(theme, colorToken) {
62820
62819
  return expandPalette(theme.palette)[colorToken] ?? null;
62821
62820
  }
62822
62821
  //#endregion
62822
+ //#region ../theme-core/src/header/navDropdownSizing.ts
62823
+ var NAV_DROPDOWN_SHIFT_PROPERTY, NAV_DROPDOWN_MAX_WIDTH_CSS, NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES;
62824
+ var init_navDropdownSizing = __esmMin((() => {
62825
+ NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
62826
+ NAV_DROPDOWN_MAX_WIDTH_CSS = `min(22rem, calc(100vw - 2rem))`;
62827
+ NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
62828
+ `min-width: 12rem;`,
62829
+ `width: max-content;`,
62830
+ `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
62831
+ `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
62832
+ ];
62833
+ }));
62834
+ //#endregion
62835
+ //#region ../theme-core/src/header/surfaceRules.ts
62836
+ init_navDropdownSizing();
62837
+ init_shared$5();
62838
+ init_colorStyles();
62839
+ /** Compile the visual surface declarations independently of paint geometry. */
62840
+ function buildHeaderSurfaceRules(header, tokens, blur) {
62841
+ const base = [];
62842
+ const scrolled = [];
62843
+ const background = header.background;
62844
+ if (background.type === "color") base.push(`background-color: ${tokens.getColor(background.color || "surface")};`);
62845
+ else if (background.type === "gradient" && background.gradient) {
62846
+ const stops = background.gradient.stops.map((stop) => tokens.getColor(stop.color)).join(", ");
62847
+ base.push(`background-image: linear-gradient(${background.gradient.angle ?? 180}deg, ${stops});`);
62848
+ }
62849
+ const blurRules = [`backdrop-filter: ${blur};`, `-webkit-backdrop-filter: ${blur};`];
62850
+ base.push(...blurRules);
62851
+ scrolled.push(...blurRules);
62852
+ const borderWidth = getComponentBorderWidthPx(header.border?.width ?? "none");
62853
+ if (!header.border || borderWidth === "0") return {
62854
+ base,
62855
+ scrolled,
62856
+ border: []
62857
+ };
62858
+ const color = rgbColorValue(header.border.colorToken?.trim() || "border");
62859
+ const style = header.border.style === "dashed" ? "dashed" : "solid";
62860
+ return {
62861
+ base,
62862
+ scrolled,
62863
+ border: header.border.position === "both" ? [`border-top: ${borderWidth} ${style} ${color};`, `border-bottom: ${borderWidth} ${style} ${color};`] : [`border-${header.border.position}: ${borderWidth} ${style} ${color};`]
62864
+ };
62865
+ }
62866
+ //#endregion
62823
62867
  //#region ../theme-core/src/navigation/presets.ts
62824
62868
  /**
62825
62869
  * Built-in nav link style presets
@@ -62981,25 +63025,78 @@ function getNavLinkPreset(presetId) {
62981
63025
  }
62982
63026
  Object.keys(NAV_LINK_PRESETS);
62983
63027
  //#endregion
62984
- //#region ../theme-core/src/header/navDropdownSizing.ts
62985
- var NAV_DROPDOWN_SHIFT_PROPERTY, NAV_DROPDOWN_MAX_WIDTH_CSS, NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES;
62986
- var init_navDropdownSizing = __esmMin((() => {
62987
- NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
62988
- NAV_DROPDOWN_MAX_WIDTH_CSS = `min(22rem, calc(100vw - 2rem))`;
62989
- NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
62990
- `min-width: 12rem;`,
62991
- `width: max-content;`,
62992
- `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
62993
- `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
62994
- ];
62995
- }));
63028
+ //#region ../theme-core/src/header/legacyNavLinkStyle.ts
63029
+ function buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize) {
63030
+ const navStyle = header.navStyle ?? "minimal";
63031
+ const basePreset = getNavLinkPreset(navStyle);
63032
+ if (!basePreset) return null;
63033
+ const style = {
63034
+ ...basePreset,
63035
+ fontWeight: header.navWeight ?? basePreset.fontWeight,
63036
+ colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
63037
+ ...contrastTreatment ? { contrastTreatment } : {},
63038
+ ...navTextSize ? { textSize: navTextSize } : {}
63039
+ };
63040
+ if (header.navWeight === "bold" && navStyle === "solid") style.textTransform = "uppercase";
63041
+ applyLegacyNavEffects(style, header);
63042
+ applyLegacyGlassTreatment(style, header, navStyle);
63043
+ return style;
63044
+ }
63045
+ function applyLegacyNavEffects(style, header) {
63046
+ if (!header.navEffects) return;
63047
+ const effects = style.effects = {
63048
+ ...style.effects,
63049
+ hover: [...style.effects?.hover ?? []],
63050
+ active: [...style.effects?.active ?? []]
63051
+ };
63052
+ if (header.navEffects.glow) effects.hover.push({
63053
+ effectId: "outer-glow",
63054
+ options: { spread: 5 }
63055
+ });
63056
+ if (header.navEffects.neumorphic) {
63057
+ effects.hover.push({
63058
+ effectId: "neumorphic-shadow",
63059
+ options: { mode: "pressed" }
63060
+ });
63061
+ effects.hover.push({
63062
+ effectId: "text-color-change",
63063
+ options: { hoverColorToken: "primary" }
63064
+ });
63065
+ }
63066
+ if (header.navEffects.underlineGradient) effects.hover.push({
63067
+ effectId: "border-bottom-grow",
63068
+ options: { origin: "center" }
63069
+ });
63070
+ }
63071
+ function applyLegacyGlassTreatment(style, header, navStyle) {
63072
+ if (header.navContainer?.type !== "glass" || navStyle !== "minimal") return;
63073
+ style.borderRadius = "full";
63074
+ style.effects = {
63075
+ ...style.effects,
63076
+ hover: glassStateEffects(10),
63077
+ active: glassStateEffects(18)
63078
+ };
63079
+ }
63080
+ function glassStateEffects(opacity) {
63081
+ return [{
63082
+ effectId: "background-on-hover-alpha",
63083
+ options: {
63084
+ colorToken: "neutral-50",
63085
+ opacity
63086
+ }
63087
+ }, {
63088
+ effectId: "text-color-change",
63089
+ options: { hoverColorToken: "neutral-50" }
63090
+ }];
63091
+ }
62996
63092
  //#endregion
62997
63093
  //#region ../theme-core/src/header/generateHeaderCss.ts
62998
63094
  init_resolver$1();
62999
63095
  init_siteChromeNavPreferences();
63000
63096
  init_shared$5();
63001
63097
  init_breakpoints();
63002
- init_navDropdownSizing();
63098
+ init_scrollTreatment();
63099
+ init_paintTargets();
63003
63100
  const HEADER_BLUR = "blur(12px)";
63004
63101
  const FLOATING_BLUR = "blur(16px)";
63005
63102
  const INSET_SHELL_MARKER_CLASS = "header-bar-frame-inset-shell";
@@ -63027,8 +63124,8 @@ function generateHeaderCss(options) {
63027
63124
  const cssChunks = [];
63028
63125
  const headerContrastTreatment = resolveHeaderContrastTreatment(header);
63029
63126
  const headerNavTextSize = resolveHeaderNavTextSize(header);
63030
- cssChunks.push(generateHeaderRootStyles(header, themeId, tokens, theme));
63031
- cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId));
63127
+ cssChunks.push(generateHeaderRootStyles(header, themeId, tokens));
63128
+ cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId, header.variant));
63032
63129
  cssChunks.push(generateLogoStyles({
63033
63130
  logo: header.logo,
63034
63131
  themeId,
@@ -63066,56 +63163,34 @@ function isClearSplitHeaderShape(header) {
63066
63163
  function isDetachedFloatingHeaderShape(header) {
63067
63164
  return header.variant === "floating" && !header.container;
63068
63165
  }
63069
- function generateMobileOverlayBackdropFilterFix(themeId) {
63070
- 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`;
63071
- }
63072
63166
  /**
63073
63167
  * Generate root header container styles
63074
63168
  */
63075
- function generateHeaderRootStyles(header, themeId, tokens, _theme) {
63169
+ function generateHeaderRootStyles(header, themeId, tokens) {
63076
63170
  const selector = `:where([data-theme-scope="${themeId}"]) .header-root`;
63077
- const backgroundSelector = `:where([data-theme-scope="${themeId}"]) .header-root::before`;
63078
63171
  const rules = [];
63079
- const backgroundRules = [];
63080
63172
  const navContainerType = header.navContainer?.type ?? "none";
63081
63173
  const isContainedNav = navContainerType === "pill" || navContainerType === "glass";
63082
63174
  rules.push("position: relative;");
63083
63175
  rules.push("isolation: isolate;");
63084
- if (!isContainedNav) {
63085
- const bg = header.background;
63086
- if (bg.type === "color") {
63087
- const bgColor = tokens.getColor(bg.color || "surface");
63088
- backgroundRules.push(`background-color: ${bgColor};`);
63089
- } else if (bg.type === "gradient" && bg.gradient) {
63090
- const stops = bg.gradient.stops.map((s) => tokens.getColor(s.color)).join(", ");
63091
- const angle = bg.gradient.angle ?? 180;
63092
- backgroundRules.push(`background-image: linear-gradient(${angle}deg, ${stops});`);
63093
- }
63094
- backgroundRules.push(`backdrop-filter: ${HEADER_BLUR};`);
63095
- backgroundRules.push(`-webkit-backdrop-filter: ${HEADER_BLUR};`);
63096
- if (header.border) {
63097
- const borderWidth = getComponentBorderWidthPx(header.border.width);
63098
- if (borderWidth !== "0") {
63099
- const borderToken = header.border?.colorToken?.trim() || "border";
63100
- const borderColor = tokens.getColor(borderToken);
63101
- const borderStyle = header.border.style === "dashed" ? "dashed" : "solid";
63102
- if (header.border.position === "bottom") rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`);
63103
- else if (header.border.position === "top") rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`);
63104
- else if (header.border.position === "both") {
63105
- rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`);
63106
- rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`);
63107
- }
63108
- }
63109
- }
63110
- }
63176
+ const surfaceRules = isContainedNav ? {
63177
+ base: [],
63178
+ scrolled: [],
63179
+ border: []
63180
+ } : buildHeaderSurfaceRules(header, tokens, HEADER_BLUR);
63181
+ const floatingSurfaceBorder = header.variant === "floating";
63182
+ if (!floatingSurfaceBorder) rules.push(...surfaceRules.border);
63183
+ const basePaintRules = floatingSurfaceBorder ? [...surfaceRules.base, ...surfaceRules.border] : surfaceRules.base;
63184
+ const scrolledPaintRules = floatingSurfaceBorder ? [...surfaceRules.scrolled, ...surfaceRules.border] : surfaceRules.scrolled;
63111
63185
  if (header.positioning === "sticky" || header.positioning === "fixed") {
63112
63186
  const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
63113
63187
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
63114
63188
  }
63115
63189
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
63116
63190
  const overlayFix = `\n${`${selector}:has([data-nav-mobile-overlay][aria-hidden="false"])`} {\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n`;
63117
- if (isContainedNav || backgroundRules.length === 0) return `${baseBlock}\n${overlayFix}`;
63118
- return `${baseBlock}\n${`\n${backgroundSelector} {\n content: \"\";\n position: absolute;\n inset: 0;\n pointer-events: none;\n border-radius: inherit;\n z-index: -1;\n ${backgroundRules.join("\n ")}\n}\n`}\n${overlayFix}${usesInsetShell(header) ? generateInsetShellStyles(header, themeId) : ""}`;
63191
+ const scrollTreatmentStyles = generateHeaderScrollTreatmentStyles(header.scrollTreatment, themeId, header.variant, scrolledPaintRules);
63192
+ if (isContainedNav || basePaintRules.length === 0) return `${baseBlock}\n${overlayFix}${scrollTreatmentStyles}`;
63193
+ return `${baseBlock}\n${renderHeaderPaintTargetRules(getHeaderPaintTargets(header.variant, themeId), basePaintRules)}\n${overlayFix}${usesInsetShell(header) ? generateInsetShellStyles(header, themeId) : ""}${scrollTreatmentStyles}`;
63119
63194
  }
63120
63195
  /**
63121
63196
  * Reshapes the full-bleed header paint layer into a contained brand capsule at
@@ -63160,10 +63235,10 @@ function generateLogoStyles(input) {
63160
63235
  else rules.push(`font-family: var(--font-heading);`);
63161
63236
  if (logo) {
63162
63237
  if (logo.letterSpacing && logo.letterSpacing !== "normal") rules.push(`letter-spacing: ${{
63163
- "normal": "0em",
63164
- "wide": "0.05em",
63165
- "wider": "0.1em",
63166
- "widest": "0.15em"
63238
+ normal: "0em",
63239
+ wide: "0.05em",
63240
+ wider: "0.1em",
63241
+ widest: "0.15em"
63167
63242
  }[logo.letterSpacing]};`);
63168
63243
  if (logo.gradient) {
63169
63244
  rules.push(`background: linear-gradient(to right, ${primaryColor}, ${accentColor});`);
@@ -63236,71 +63311,11 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
63236
63311
  } : header.navLinkStyle, navPreferences),
63237
63312
  className: "header-nav-link"
63238
63313
  });
63239
- const navStyle = header.navStyle ?? "minimal";
63240
- const basePreset = getNavLinkPreset(navStyle);
63241
- if (!basePreset) {
63242
- console.warn(`[generateHeaderCss] Nav link preset not found: ${navStyle}`);
63314
+ const mergedStyle = buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize);
63315
+ if (!mergedStyle) {
63316
+ console.warn(`[generateHeaderCss] Nav link preset not found: ${header.navStyle}`);
63243
63317
  return "";
63244
63318
  }
63245
- const mergedStyle = {
63246
- ...basePreset,
63247
- fontWeight: header.navWeight ?? basePreset.fontWeight,
63248
- colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
63249
- ...contrastTreatment ? { contrastTreatment } : {},
63250
- ...navTextSize ? { textSize: navTextSize } : {}
63251
- };
63252
- if (header.navWeight === "bold" && navStyle === "solid") mergedStyle.textTransform = "uppercase";
63253
- if (header.navEffects) {
63254
- const effects = mergedStyle.effects = {
63255
- ...mergedStyle.effects,
63256
- hover: [...mergedStyle.effects?.hover || []],
63257
- active: [...mergedStyle.effects?.active || []]
63258
- };
63259
- if (header.navEffects.glow) effects.hover.push({
63260
- effectId: "outer-glow",
63261
- options: { spread: 5 }
63262
- });
63263
- if (header.navEffects.neumorphic) {
63264
- effects.hover.push({
63265
- effectId: "neumorphic-shadow",
63266
- options: { mode: "pressed" }
63267
- });
63268
- effects.hover.push({
63269
- effectId: "text-color-change",
63270
- options: { hoverColorToken: "primary" }
63271
- });
63272
- }
63273
- if (header.navEffects.underlineGradient) effects.hover.push({
63274
- effectId: "border-bottom-grow",
63275
- options: { origin: "center" }
63276
- });
63277
- }
63278
- if ((header.navContainer?.type ?? "none") === "glass" && navStyle === "minimal") {
63279
- mergedStyle.borderRadius = "full";
63280
- mergedStyle.effects = {
63281
- ...mergedStyle.effects,
63282
- hover: [{
63283
- effectId: "background-on-hover-alpha",
63284
- options: {
63285
- colorToken: "neutral-50",
63286
- opacity: 10
63287
- }
63288
- }, {
63289
- effectId: "text-color-change",
63290
- options: { hoverColorToken: "neutral-50" }
63291
- }],
63292
- active: [{
63293
- effectId: "background-on-hover-alpha",
63294
- options: {
63295
- colorToken: "neutral-50",
63296
- opacity: 18
63297
- }
63298
- }, {
63299
- effectId: "text-color-change",
63300
- options: { hoverColorToken: "neutral-50" }
63301
- }]
63302
- };
63303
- }
63304
63319
  return generateNavLinkCSS({
63305
63320
  themeId,
63306
63321
  tokens,
@@ -63328,10 +63343,10 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
63328
63343
  if (shadowVar) rules.push(`box-shadow: ${shadowVar};`);
63329
63344
  const borderRadius = dropdownStyle?.borderRadius ?? "md";
63330
63345
  rules.push(`border-radius: ${{
63331
- "none": "0",
63332
- "sm": "0.25rem",
63333
- "md": "0.5rem",
63334
- "lg": "0.75rem"
63346
+ none: "0",
63347
+ sm: "0.25rem",
63348
+ md: "0.5rem",
63349
+ lg: "0.75rem"
63335
63350
  }[borderRadius]};`);
63336
63351
  rules.push(`padding: 0.5rem 0;`);
63337
63352
  return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
@@ -63386,16 +63401,16 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
63386
63401
  const additionalRules = [];
63387
63402
  const letterSpacing = configuredDropdownStyle?.letterSpacing ?? "normal";
63388
63403
  if (letterSpacing !== "normal") additionalRules.push(`letter-spacing: ${{
63389
- "normal": "0em",
63390
- "wide": "0.05em",
63391
- "wider": "0.1em"
63404
+ normal: "0em",
63405
+ wide: "0.05em",
63406
+ wider: "0.1em"
63392
63407
  }[letterSpacing]};`);
63393
63408
  const textSize = configuredDropdownStyle?.textSize ?? "sm";
63394
63409
  additionalRules.push(`font-size: ${{
63395
- "xs": "0.75rem",
63396
- "sm": "0.875rem",
63397
- "base": "1rem",
63398
- "lg": "1.125rem"
63410
+ xs: "0.75rem",
63411
+ sm: "0.875rem",
63412
+ base: "1rem",
63413
+ lg: "1.125rem"
63399
63414
  }[textSize]};`);
63400
63415
  if (additionalRules.length > 0) return baseCSS + `\n${`:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`} {\n ${additionalRules.join("\n ")}\n}\n`;
63401
63416
  return baseCSS;
@@ -63491,18 +63506,18 @@ function generateFloatingContainerStyles(header, themeId, tokens) {
63491
63506
  rules.push(`-webkit-backdrop-filter: ${FLOATING_BLUR};`);
63492
63507
  if (container.border) rules.push(`border: 1px solid rgb(255 255 255 / 0.2);`);
63493
63508
  rules.push(`border-radius: ${{
63494
- "none": "0",
63495
- "sm": "0.375rem",
63496
- "md": "0.5rem",
63497
- "lg": "0.75rem",
63498
- "xl": "1rem",
63509
+ none: "0",
63510
+ sm: "0.375rem",
63511
+ md: "0.5rem",
63512
+ lg: "0.75rem",
63513
+ xl: "1rem",
63499
63514
  "2xl": "1.5rem"
63500
63515
  }[container.rounded]};`);
63501
63516
  if (container.shadow) rules.push(`box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);`);
63502
63517
  rules.push(`padding: ${{
63503
- "sm": "1rem 1.5rem",
63504
- "md": "1.5rem 2rem",
63505
- "lg": "2rem 2.5rem"
63518
+ sm: "1rem 1.5rem",
63519
+ md: "1.5rem 2rem",
63520
+ lg: "2rem 2.5rem"
63506
63521
  }[container.padding]};`);
63507
63522
  return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
63508
63523
  }
@@ -80165,6 +80180,9 @@ function normalizeLoaderParams(endpoint, params, context) {
80165
80180
  //#region ../blocks/src/primitives/content/primitives.tsx
80166
80181
  init_RichText();
80167
80182
  //#endregion
80183
+ //#region ../blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.ts
80184
+ init_src$2();
80185
+ //#endregion
80168
80186
  //#region ../blocks/src/system/helpers/resolveBackground.tsx
80169
80187
  /**
80170
80188
  * Helper utilities for resolving background data in custom block components.
@@ -80239,7 +80257,7 @@ init_tokens();
80239
80257
  init_gradients();
80240
80258
  init_richTextSchema();
80241
80259
  init_media();
80242
- init_media$1();
80260
+ init_media$2();
80243
80261
  init_slotContracts();
80244
80262
  init_typeGuards();
80245
80263
  init_booking_form_reserved_fields();
@@ -159883,7 +159901,7 @@ var SimpleCache = class {
159883
159901
  * 1. This constant
159884
159902
  * 2. The "version" field in package.json
159885
159903
  */
159886
- const SDK_VERSION = "0.126.0";
159904
+ const SDK_VERSION = "0.127.0";
159887
159905
  //#endregion
159888
159906
  //#region src/client/error.ts
159889
159907
  let _Symbol$for;