@riverbankcms/sdk 0.79.0 → 0.80.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 (160) hide show
  1. package/dist/PreviewEditorSidebar-QZG37QIF.mjs +2655 -0
  2. package/dist/{PreviewEditorUI-27KJVEET.mjs → PreviewEditorUI-AXIKSMZA.mjs} +27 -4
  3. package/dist/SdkPreviewModeRuntime-XE5M4UKM.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +20 -0
  5. package/dist/_dts/api/src/endpoints.d.ts +24 -0
  6. package/dist/_dts/api/src/index.d.ts +1 -1
  7. package/dist/_dts/api/src/siteInfrastructure.d.ts +124 -0
  8. package/dist/_dts/api/src/siteOnboarding.d.ts +13 -0
  9. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +10 -1
  10. package/dist/_dts/block-form/src/client/index.d.ts +2 -0
  11. package/dist/_dts/block-form/src/index.d.ts +2 -0
  12. package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +2 -1
  13. package/dist/_dts/blocks/src/client/header.d.ts +1 -1
  14. package/dist/_dts/blocks/src/client.d.ts +12 -12
  15. package/dist/_dts/blocks/src/index.d.ts +1 -1
  16. package/dist/_dts/blocks/src/system/blocks/events/event-listing.d.ts +2 -2
  17. package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -1
  18. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -1
  19. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  20. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +21 -12
  21. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +4 -2
  22. package/dist/_dts/blocks/src/system/fragments/library/faqHeading.d.ts +1 -0
  23. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +5 -0
  24. package/dist/_dts/blocks/src/system/node/fragments/headingDecoration.d.ts +1 -4
  25. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  26. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +7 -7
  27. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  28. package/dist/_dts/blocks/src/system/runtime/header/enhanceHeaderSection.d.ts +10 -2
  29. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +5 -5
  30. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.server.d.ts +2 -2
  31. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventSpotlight.d.ts +2 -2
  32. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +2 -2
  33. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventDetailModal.d.ts +2 -2
  34. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModals.d.ts +2 -2
  35. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +2 -2
  36. package/dist/_dts/blocks/src/system/transforms/registry/boxStyles.d.ts +3 -0
  37. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +9 -0
  38. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +14 -1
  39. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +9 -3
  40. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +2 -6
  41. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +2 -6
  42. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +2 -6
  43. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +2 -6
  44. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +6 -4
  45. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -6
  46. package/dist/_dts/editor-blocks/src/index.d.ts +2 -0
  47. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +5 -1
  48. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeControlPlan.d.ts +24 -0
  49. package/dist/_dts/preview-next/src/client/blocks/useBlockCustomizeControls.d.ts +34 -0
  50. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -5
  51. package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +4 -1
  52. package/dist/_dts/preview-next/src/client/preview/PreviewBlockCustomizeSelectionContext.d.ts +20 -0
  53. package/dist/_dts/preview-next/src/client/preview/PreviewOpenEditorButton.d.ts +2 -0
  54. package/dist/_dts/preview-next/src/client/preview/SelectedBlockCustomizePanel.d.ts +13 -0
  55. package/dist/_dts/preview-next/src/client/preview/previewCustomizeEditorDraftPatch.d.ts +13 -0
  56. package/dist/_dts/preview-next/src/client/preview/previewCustomizeRuntimePatch.d.ts +2 -0
  57. package/dist/_dts/preview-next/src/client/preview/storeTypes.d.ts +4 -0
  58. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +3 -1
  59. package/dist/_dts/sdk/src/cli/commands/webhooks.d.ts +44 -0
  60. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  61. package/dist/_dts/sdk/src/client/management/types.d.ts +56 -0
  62. package/dist/_dts/sdk/src/client/management/webhooks.d.ts +3 -0
  63. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +6 -3
  64. package/dist/_dts/sdk/src/version.d.ts +1 -1
  65. package/dist/_dts/theme-core/src/accordions/siteStyleDefaults.d.ts +220 -0
  66. package/dist/_dts/theme-core/src/accordions/types.d.ts +45 -2
  67. package/dist/_dts/theme-core/src/blockOverrides.d.ts +8 -0
  68. package/dist/_dts/theme-core/src/blocks/types.d.ts +1 -1
  69. package/dist/_dts/theme-core/src/blocks/vars/testimonials.d.ts +4 -1
  70. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  71. package/dist/_dts/theme-core/src/cards/core.d.ts +20 -0
  72. package/dist/_dts/theme-core/src/cards/generateDefaultCardSystem.d.ts +6 -3
  73. package/dist/_dts/theme-core/src/cards/siteStyleDefaults.d.ts +105 -0
  74. package/dist/_dts/theme-core/src/cards/types.d.ts +177 -0
  75. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  76. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +156 -18
  77. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  78. package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +16 -0
  79. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +1 -1
  80. package/dist/_dts/theme-core/src/schema.d.ts +446 -52
  81. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +86 -17
  82. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +2 -3
  83. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +86 -17
  84. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +110 -1
  85. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +20 -1
  86. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -0
  87. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +286 -6
  88. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -0
  89. package/dist/_dts/theme-core/src/site-styles/logoBranding.d.ts +193 -0
  90. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +2 -8
  91. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +2 -0
  92. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +10 -7
  93. package/dist/_dts/theme-core/src/site-styles/siteStyleThemeCompiler.d.ts +11 -0
  94. package/dist/_dts/theme-core/src/site-styles/sourceCatalogs.d.ts +2 -2
  95. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  96. package/dist/_dts/theme-core/src/site-styles/testimonialQuotePresets.d.ts +15 -0
  97. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  98. package/dist/_dts/theme-core/src/site-styles/types.d.ts +7 -29
  99. package/dist/{PreviewEditorSidebar-56NMJMIK.mjs → chunk-5NZGBSJF.mjs} +1423 -2451
  100. package/dist/{chunk-4HCW7FHJ.mjs → chunk-7PCYG6YV.mjs} +215 -137
  101. package/dist/{chunk-K2IIF34C.mjs → chunk-BBLZSQEY.mjs} +24 -0
  102. package/dist/{chunk-V47ZU33I.mjs → chunk-GYXKAUFV.mjs} +2785 -785
  103. package/dist/{chunk-GP555I66.mjs → chunk-HTB4BMKD.mjs} +94 -46
  104. package/dist/{chunk-A3HHFKVT.mjs → chunk-MPBNEVPB.mjs} +1 -1
  105. package/dist/cli/index.mjs +2100 -545
  106. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +16 -4
  107. package/dist/client/{accordion-QLA7KBYO.mjs → accordion-QFZMNB7O.mjs} +1 -1
  108. package/dist/client/{bookingForm-PYZIPA5G.mjs → bookingForm-NCIXFWIG.mjs} +3 -3
  109. package/dist/client/bookings.mjs +1144 -329
  110. package/dist/client/{carousel-5EIULWBI.mjs → carousel-EO4BJMWD.mjs} +2 -2
  111. package/dist/client/{cart-DOP3FNI4.mjs → cart-FTYCLYUW.mjs} +5 -5
  112. package/dist/client/{checkout-BVMF6FBV.mjs → checkout-NFGLVCOX.mjs} +5 -5
  113. package/dist/client/{chunk-TYONZMST.mjs → chunk-4W66ALYT.mjs} +1 -1
  114. package/dist/client/{chunk-44K2U3QI.mjs → chunk-6GVVWSPU.mjs} +4 -4
  115. package/dist/client/{chunk-UDS3NTWA.mjs → chunk-IWFZSQNZ.mjs} +1 -1
  116. package/dist/client/{chunk-R5ESWNKX.mjs → chunk-PUOELU4O.mjs} +89 -5
  117. package/dist/client/{chunk-YLDYVRZL.mjs → chunk-PYRBIURC.mjs} +4 -4
  118. package/dist/client/{chunk-GG4M2NP6.mjs → chunk-T6UIP6UZ.mjs} +1 -1
  119. package/dist/client/{chunk-V6M5FCR5.mjs → chunk-VDS5YFLX.mjs} +1 -1
  120. package/dist/client/{chunk-CCNTDRCF.mjs → chunk-Y37KDO7P.mjs} +1 -1
  121. package/dist/client/client.mjs +4205 -2324
  122. package/dist/client/{courseRegistration-E6EAA6NL.mjs → courseRegistration-2EORROPS.mjs} +3 -3
  123. package/dist/client/{eventCalendar-HBG3HAK6.mjs → eventCalendar-WZI4VL6N.mjs} +5 -5
  124. package/dist/client/{eventCombined-6K5ZZWAK.mjs → eventCombined-QCB2TCNL.mjs} +5 -5
  125. package/dist/client/{eventDetails-Q75ICXLT.mjs → eventDetails-TFTATAPH.mjs} +5 -5
  126. package/dist/client/{eventListing-27P5F7DZ.mjs → eventListing-A2CQEHEQ.mjs} +5 -5
  127. package/dist/client/{eventRegistration-IQ7AMASR.mjs → eventRegistration-OELPVLUY.mjs} +5 -5
  128. package/dist/client/{form-JRTD65FN.mjs → form-NTIFD6WQ.mjs} +1 -1
  129. package/dist/client/{headerSection-7FPSSZHS.mjs → headerSection-7TBNKCLA.mjs} +65 -24
  130. package/dist/client/hooks.mjs +3354 -2006
  131. package/dist/client/{locationMap-7NGFNYBH.mjs → locationMap-LRLB5A3H.mjs} +1 -1
  132. package/dist/client/{newsletterForm-F3BADCI2.mjs → newsletterForm-XI52RZSN.mjs} +1 -1
  133. package/dist/client/{productDetail-V3HP7ITJ.mjs → productDetail-GSNKBFLY.mjs} +5 -5
  134. package/dist/client/{productList-L3EGJUF2.mjs → productList-BGCGT4KZ.mjs} +5 -5
  135. package/dist/client/rendering/client.mjs +2570 -1657
  136. package/dist/client/rendering/islands.mjs +18 -18
  137. package/dist/client/rendering.mjs +4275 -2394
  138. package/dist/client/{shop-DQUB5E2C.mjs → shop-RQHUCLNY.mjs} +5 -5
  139. package/dist/preview-next/before-render.mjs +24 -0
  140. package/dist/preview-next/client/runtime.mjs +5 -5
  141. package/dist/preview-next/middleware.mjs +24 -0
  142. package/dist/{sdk-runtime-AF6KXJU4.mjs → sdk-runtime-A4LHT2RS.mjs} +6 -6
  143. package/dist/server/components.mjs +4063 -2293
  144. package/dist/server/config-validation.mjs +3525 -2176
  145. package/dist/server/config.mjs +3525 -2176
  146. package/dist/server/data.mjs +3354 -2006
  147. package/dist/server/index.mjs +25 -1
  148. package/dist/server/next.mjs +4006 -2236
  149. package/dist/server/page-converter.mjs +2747 -1816
  150. package/dist/server/prebuild.mjs +1 -1
  151. package/dist/server/rendering/server.mjs +4063 -2293
  152. package/dist/server/rendering.mjs +4063 -2293
  153. package/dist/server/routing.mjs +3508 -2111
  154. package/dist/server/server.mjs +3372 -2024
  155. package/dist/server/theme-bridge.mjs +1436 -310
  156. package/dist/server/theme.mjs +409 -219
  157. package/dist/styles/index.css +300 -33
  158. package/package.json +1 -1
  159. package/dist/SdkPreviewModeRuntime-H4BSP6E7.mjs +0 -8
  160. package/dist/chunk-LCY32PXF.mjs +0 -1175
@@ -34,14 +34,8 @@ var visibleHeadingDecorationFamilyValues = [
34
34
  "organic-squiggle",
35
35
  "short-center-rule"
36
36
  ];
37
- var visibleHeadingDecorationPlacementValues = [
38
- "after-heading",
39
- "between-heading-and-body",
40
- "under-centered-heading"
41
- ];
42
37
  var headingDecorationOverrideValues = [
43
38
  "site-default",
44
- "on",
45
39
  "off"
46
40
  ];
47
41
  var headingDecorationColorTokenValues = [
@@ -1116,7 +1110,7 @@ var personalitiesById = new Map(
1116
1110
  );
1117
1111
 
1118
1112
  // ../theme-core/src/schema.ts
1119
- import { z as z16 } from "zod";
1113
+ import { z as z17 } from "zod";
1120
1114
 
1121
1115
  // ../theme-core/src/lib/media.ts
1122
1116
  import z5 from "zod";
@@ -1166,8 +1160,15 @@ var BUTTON_SIZE_NAMES = buttonSizeNameSchema.options;
1166
1160
 
1167
1161
  // ../theme-core/src/cards/types.ts
1168
1162
  import { z as z6 } from "zod";
1163
+ var cardVariantRoleValues = ["default", "alternative"];
1164
+ var boxlessCardVariantValue = "none";
1169
1165
  var cardSpacingSchema = z6.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
1170
1166
  var gradientDirectionSchema2 = z6.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
1167
+ var cardVariantRoleSchema = z6.enum(cardVariantRoleValues);
1168
+ var boxStylesCardVariantSchema = z6.enum([
1169
+ ...cardVariantRoleValues,
1170
+ boxlessCardVariantValue
1171
+ ]);
1171
1172
  var cardBackgroundSchema = z6.discriminatedUnion("type", [
1172
1173
  z6.object({ type: z6.literal("solid"), colorToken: themeColorTokenSchema }),
1173
1174
  z6.object({
@@ -1182,6 +1183,24 @@ var cardBorderSchema = z6.object({
1182
1183
  widthClass: z6.string(),
1183
1184
  colorToken: themeColorTokenSchema
1184
1185
  });
1186
+ var cardCornerValueSchema = z6.enum([
1187
+ "square",
1188
+ "soft",
1189
+ "rounded",
1190
+ "pill",
1191
+ "expressive"
1192
+ ]);
1193
+ var cardAccentEdgeSchema = z6.object({
1194
+ edge: z6.enum(["left", "top", "right", "bottom"]),
1195
+ colorToken: themeColorTokenSchema,
1196
+ width: z6.enum(["thin", "medium", "thick", "heavy"])
1197
+ });
1198
+ var cardCornerRadiiSchema = z6.object({
1199
+ topLeft: cardCornerValueSchema.optional(),
1200
+ topRight: cardCornerValueSchema.optional(),
1201
+ bottomLeft: cardCornerValueSchema.optional(),
1202
+ bottomRight: cardCornerValueSchema.optional()
1203
+ });
1185
1204
  var cardVariantSchema = z6.object({
1186
1205
  id: z6.string(),
1187
1206
  name: z6.string().min(1).max(20),
@@ -1190,6 +1209,8 @@ var cardVariantSchema = z6.object({
1190
1209
  // Appearance (token-based)
1191
1210
  background: cardBackgroundSchema,
1192
1211
  spacing: cardSpacingSchema,
1212
+ // Optional foreground (card text) color, for cards on a strong fill.
1213
+ foregroundToken: themeColorTokenSchema.optional(),
1193
1214
  // Optional overrides (uses theme defaults if not specified)
1194
1215
  shadow: z6.object({
1195
1216
  elevation: z6.enum(["none", "low", "medium", "high"]),
@@ -1197,8 +1218,12 @@ var cardVariantSchema = z6.object({
1197
1218
  position: z6.enum(["bottom", "bottom-right"]).default("bottom")
1198
1219
  }).optional(),
1199
1220
  corners: z6.enum(["square", "soft", "rounded", "pill"]).optional(),
1221
+ // Per-corner radius override; wins over `corners` when set.
1222
+ cornerRadii: cardCornerRadiiSchema.optional(),
1200
1223
  // Border (optional)
1201
- border: cardBorderSchema.optional()
1224
+ border: cardBorderSchema.optional(),
1225
+ // Single accent edge; replaces `border` when set.
1226
+ accentEdge: cardAccentEdgeSchema.optional()
1202
1227
  });
1203
1228
  var cardSystemSchema = z6.object({
1204
1229
  variants: z6.array(cardVariantSchema).min(1).max(3)
@@ -1219,11 +1244,13 @@ var accordionIconSchema = z7.enum([
1219
1244
  // ⊕ becomes ⊖ (swap with fade)
1220
1245
  ]);
1221
1246
  var accordionSystemSchema = z7.object({
1222
- // Visual styling (solid color only - gradients can be added later if needed)
1247
+ // Visual styling (solid color only - gradients can be added later if needed).
1248
+ // null = no fill, so the accordion sits transparently on the section
1249
+ // surface (used by open, boxless "divided" looks).
1223
1250
  background: z7.object({
1224
1251
  type: z7.literal("solid"),
1225
1252
  colorToken: themeColorTokenSchema
1226
- }),
1253
+ }).nullable(),
1227
1254
  // Spacing (padding inside items)
1228
1255
  spacing: z7.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
1229
1256
  // Border radius (null = inherit from theme.corners)
@@ -1250,8 +1277,16 @@ var accordionSystemSchema = z7.object({
1250
1277
  // Trigger (question) styling
1251
1278
  trigger: z7.object({
1252
1279
  textColorToken: themeColorTokenSchema,
1253
- fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).nullable()
1280
+ fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).nullable(),
1254
1281
  // null = inherit from theme
1282
+ // Question typography. Defaults keep the historical body-font look; set
1283
+ // fontFamily 'heading' + a larger scale to give questions real presence.
1284
+ fontFamily: z7.enum(["body", "heading"]).optional(),
1285
+ // default 'body'
1286
+ fontScale: z7.enum(["body", "md", "lg"]).optional(),
1287
+ // default 'body'
1288
+ letterSpacing: z7.enum(["normal", "tight", "wide"]).optional(),
1289
+ textTransform: z7.enum(["none", "uppercase"]).optional()
1255
1290
  }),
1256
1291
  // Hover state styling
1257
1292
  hover: z7.object({
@@ -1259,6 +1294,17 @@ var accordionSystemSchema = z7.object({
1259
1294
  textColorToken: themeColorTokenSchema.optional(),
1260
1295
  borderColorToken: themeColorTokenSchema.optional()
1261
1296
  }),
1297
+ // Open-state emphasis: how an expanded item is visually rewarded. All
1298
+ // optional; omit for the historical "only the text recolors" behaviour.
1299
+ openState: z7.object({
1300
+ backgroundColorToken: themeColorTokenSchema.optional(),
1301
+ triggerColorToken: themeColorTokenSchema.optional(),
1302
+ accent: z7.object({
1303
+ edge: z7.enum(["left", "top", "bottom"]),
1304
+ colorToken: themeColorTokenSchema,
1305
+ thickness: z7.enum(["thin", "medium", "thick"])
1306
+ }).optional()
1307
+ }).optional(),
1262
1308
  // Content (answer) styling
1263
1309
  content: z7.object({
1264
1310
  textColorToken: themeColorTokenSchema
@@ -1581,79 +1627,190 @@ var componentShadowSchema = z14.object({
1581
1627
  elevation: z14.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
1582
1628
  });
1583
1629
 
1584
- // ../theme-core/src/utils/tokenOrColor.ts
1630
+ // ../theme-core/src/site-styles/logoBranding.ts
1585
1631
  import { z as z15 } from "zod";
1586
- var tokenOrCssColorValueSchema = z15.string();
1632
+ var logoTextConfidenceValues = ["low", "medium", "high"];
1633
+ var logoAssetShapeValues = [
1634
+ "none",
1635
+ "horizontal",
1636
+ "square",
1637
+ "portrait",
1638
+ "tall"
1639
+ ];
1640
+ var logoKindValues = [
1641
+ "mark",
1642
+ "wordmark",
1643
+ "lockup",
1644
+ "badge",
1645
+ "stacked-wordmark",
1646
+ "unknown"
1647
+ ];
1648
+ var logoDensityValues = ["simple", "detailed", "unknown"];
1649
+ var logoContainsTextSchema = z15.discriminatedUnion("kind", [
1650
+ z15.object({
1651
+ kind: z15.literal("contains-text"),
1652
+ confidence: z15.enum(logoTextConfidenceValues),
1653
+ text: z15.string().trim().min(1).max(200).optional()
1654
+ }),
1655
+ z15.object({
1656
+ kind: z15.literal("no-text"),
1657
+ confidence: z15.enum(logoTextConfidenceValues)
1658
+ }),
1659
+ z15.object({
1660
+ kind: z15.literal("unknown"),
1661
+ reason: z15.enum([
1662
+ "analysis-unavailable",
1663
+ "unsupported-file",
1664
+ "low-confidence"
1665
+ ])
1666
+ })
1667
+ ]);
1668
+ var logoAnalysisSourceSchema = z15.discriminatedUnion("kind", [
1669
+ z15.object({ kind: z15.literal("none") }),
1670
+ z15.object({
1671
+ kind: z15.literal("deterministic"),
1672
+ reason: z15.enum(["dimensions", "fallback"])
1673
+ }),
1674
+ z15.object({
1675
+ kind: z15.literal("llm"),
1676
+ model: z15.literal("gpt-5.4-mini"),
1677
+ analyzedAt: z15.string().trim().min(1).max(80).optional()
1678
+ }),
1679
+ z15.object({ kind: z15.literal("manual-override") })
1680
+ ]);
1681
+ var logoFactsSchema = z15.object({
1682
+ shape: z15.enum(logoAssetShapeValues),
1683
+ containsText: logoContainsTextSchema,
1684
+ kind: z15.enum(logoKindValues),
1685
+ density: z15.enum(logoDensityValues),
1686
+ source: logoAnalysisSourceSchema
1687
+ });
1688
+ var brandDisplayModeValues = [
1689
+ "auto",
1690
+ "logo-only",
1691
+ "logo-plus-title",
1692
+ "title-only"
1693
+ ];
1694
+ var logoAccommodationPatternValues = [
1695
+ "title-only",
1696
+ "inline-logo-only",
1697
+ "inline-wordmark",
1698
+ "inline-mark-with-title",
1699
+ "logo-plate",
1700
+ "centered-badge",
1701
+ "popout-badge",
1702
+ "centered-masthead",
1703
+ "hero-badge"
1704
+ ];
1705
+ var logoSizePolicyValues = [
1706
+ "auto",
1707
+ "compact",
1708
+ "standard",
1709
+ "generous",
1710
+ "display"
1711
+ ];
1712
+
1713
+ // ../theme-core/src/site-styles/rawStyleFields.ts
1714
+ var themeV2RuntimeStyleFieldNames = [
1715
+ "_frameStyles",
1716
+ "_sectionStyles",
1717
+ "_containerStyles",
1718
+ "_cardStyles",
1719
+ // styleGroup is legacy runtime transition wiring rather than a nested
1720
+ // override object, but normal editors should still never see it directly.
1721
+ "styleGroup"
1722
+ ];
1723
+ var themeV2BlockSpecificRawStyleFieldNames = [
1724
+ "_contentCardStyles",
1725
+ "_heroLayoutStyles",
1726
+ "_textCardStyles"
1727
+ ];
1728
+ var themeV2NormalEditorRawStyleFieldNames = [
1729
+ ...themeV2RuntimeStyleFieldNames,
1730
+ ...themeV2BlockSpecificRawStyleFieldNames
1731
+ ];
1732
+ var themeV2NormalEditorRawStyleFieldNameSet = new Set(
1733
+ themeV2NormalEditorRawStyleFieldNames
1734
+ );
1735
+ var themeV2CompilerOwnedFieldNames = [
1736
+ ...themeV2RuntimeStyleFieldNames,
1737
+ ...themeV2BlockSpecificRawStyleFieldNames
1738
+ ];
1739
+ var pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
1740
+
1741
+ // ../theme-core/src/utils/tokenOrColor.ts
1742
+ import { z as z16 } from "zod";
1743
+ var tokenOrCssColorValueSchema = z16.string();
1587
1744
 
1588
1745
  // ../theme-core/src/schema.ts
1589
- var axesSchema = z16.object({
1590
- tone: z16.enum(["minimal", "classic", "bold"]),
1591
- energy: z16.enum(["calm", "vibrant"]),
1592
- density: z16.enum(["airy", "regular", "compact"]),
1593
- mediaBias: z16.enum(["text", "media", "mixed"]),
1594
- conversionBias: z16.enum(["low", "med", "high"]),
1595
- motion: z16.enum(["subtle", "standard", "expressive"])
1596
- });
1597
- var colourHexString = z16.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
1598
- var paletteColorSchema = z16.object({
1599
- name: z16.string().min(1),
1746
+ var axesSchema = z17.object({
1747
+ tone: z17.enum(["minimal", "classic", "bold"]),
1748
+ energy: z17.enum(["calm", "vibrant"]),
1749
+ density: z17.enum(["airy", "regular", "compact"]),
1750
+ mediaBias: z17.enum(["text", "media", "mixed"]),
1751
+ conversionBias: z17.enum(["low", "med", "high"]),
1752
+ motion: z17.enum(["subtle", "standard", "expressive"])
1753
+ });
1754
+ var colourHexString = z17.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
1755
+ var paletteColorSchema = z17.object({
1756
+ name: z17.string().min(1),
1600
1757
  hex: colourHexString
1601
1758
  });
1602
- var paletteMetaSchema = z16.object({
1603
- mode: z16.enum(["light", "dark"])
1759
+ var paletteMetaSchema = z17.object({
1760
+ mode: z17.enum(["light", "dark"])
1604
1761
  });
1605
- var paletteSchema = z16.object({
1606
- colors: z16.array(paletteColorSchema),
1762
+ var paletteSchema = z17.object({
1763
+ colors: z17.array(paletteColorSchema),
1607
1764
  meta: paletteMetaSchema
1608
1765
  });
1609
- var typographyStyleSchema = z16.object({
1610
- family: z16.string().min(1),
1611
- weight: z16.enum(["light", "regular", "medium", "semibold", "bold"]),
1612
- letterSpacing: z16.enum(["tight", "normal", "loose"]),
1613
- lineHeight: z16.enum(["normal", "relaxed", "loose"])
1766
+ var typographyStyleSchema = z17.object({
1767
+ family: z17.string().min(1),
1768
+ weight: z17.enum(["light", "regular", "medium", "semibold", "bold"]),
1769
+ letterSpacing: z17.enum(["tight", "normal", "loose"]),
1770
+ lineHeight: z17.enum(["normal", "relaxed", "loose"])
1614
1771
  });
1615
1772
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
1616
- size: z16.enum(["md", "lg", "xl"])
1773
+ size: z17.enum(["md", "lg", "xl"])
1617
1774
  });
1618
- var headingSizeSchema = z16.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
1619
- var headingTypographyOverridesSchema = z16.object({
1620
- weight: z16.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
1621
- letterSpacing: z16.enum(["tight", "normal", "loose"]).nullable().optional(),
1775
+ var headingSizeSchema = z17.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
1776
+ var headingTypographyOverridesSchema = z17.object({
1777
+ weight: z17.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
1778
+ letterSpacing: z17.enum(["tight", "normal", "loose"]).nullable().optional(),
1622
1779
  size: headingSizeSchema.nullable().optional(),
1623
- lineHeight: z16.enum(["normal", "relaxed", "loose"]).nullable().optional(),
1624
- italic: z16.boolean().nullable().optional(),
1780
+ lineHeight: z17.enum(["normal", "relaxed", "loose"]).nullable().optional(),
1781
+ italic: z17.boolean().nullable().optional(),
1625
1782
  colorToken: themeColorTokenSchema.nullable().optional()
1626
1783
  });
1627
1784
  var headingTypographyStyleSchema = typographyStyleSchema.extend({
1628
- case: z16.enum(["uppercase", "normal", "smallCaps"]).nullable(),
1629
- italic: z16.boolean().nullable(),
1785
+ case: z17.enum(["uppercase", "normal", "smallCaps"]).nullable(),
1786
+ italic: z17.boolean().nullable(),
1630
1787
  colorToken: themeColorTokenSchema.nullable().optional()
1631
1788
  });
1632
- var proseLinkUnderlineStyleSchema = z16.enum(["solid", "dotted", "dashed"]);
1633
- var proseLinkUnderlineThicknessSchema = z16.enum([
1789
+ var proseLinkUnderlineStyleSchema = z17.enum(["solid", "dotted", "dashed"]);
1790
+ var proseLinkUnderlineThicknessSchema = z17.enum([
1634
1791
  "auto",
1635
1792
  "fromFont",
1636
1793
  "thin",
1637
1794
  "medium",
1638
1795
  "thick"
1639
1796
  ]);
1640
- var proseLinkUnderlineOffsetSchema = z16.enum([
1797
+ var proseLinkUnderlineOffsetSchema = z17.enum([
1641
1798
  "auto",
1642
1799
  "tight",
1643
1800
  "normal",
1644
1801
  "loose"
1645
1802
  ]);
1646
- var proseLinkStyleSchema = z16.object({
1803
+ var proseLinkStyleSchema = z17.object({
1647
1804
  colorToken: themeColorTokenSchema.optional(),
1648
1805
  hoverColorToken: themeColorTokenSchema.optional(),
1649
- underline: z16.boolean().optional(),
1806
+ underline: z17.boolean().optional(),
1650
1807
  decorationColorToken: themeColorTokenSchema.optional(),
1651
1808
  hoverDecorationColorToken: themeColorTokenSchema.optional(),
1652
1809
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
1653
1810
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
1654
1811
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
1655
1812
  });
1656
- var semanticSpacingSchema = z16.enum([
1813
+ var semanticSpacingSchema = z17.enum([
1657
1814
  "none",
1658
1815
  "compact",
1659
1816
  "cozy",
@@ -1661,91 +1818,108 @@ var semanticSpacingSchema = z16.enum([
1661
1818
  "comfortable",
1662
1819
  "spacious"
1663
1820
  ]);
1664
- var boxRoundedSchema = z16.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
1665
- var boxBackgroundOverlaySchema = z16.object({
1666
- type: z16.enum(["none", "color", "gradient"]).nullable().optional(),
1821
+ var boxRoundedSchema = z17.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
1822
+ var boxBackgroundOverlaySchema = z17.object({
1823
+ type: z17.enum(["none", "color", "gradient"]).nullable().optional(),
1667
1824
  color: tokenOrCssColorValueSchema.nullable().optional(),
1668
- gradient: z16.string().nullable().optional(),
1669
- opacity: z16.number().min(0).max(1).nullable().optional()
1825
+ gradient: z17.string().nullable().optional(),
1826
+ opacity: z17.number().min(0).max(1).nullable().optional()
1670
1827
  });
1671
- var boxBackgroundSchema = z16.object({
1672
- type: z16.enum(["color", "gradient", "image"]).optional(),
1828
+ var boxBackgroundSchema = z17.object({
1829
+ type: z17.enum(["color", "gradient", "image"]).optional(),
1830
+ contentOwner: z17.literal(pageDesignEditorBackgroundOverrideOwner).optional(),
1673
1831
  color: tokenOrCssColorValueSchema.nullable().optional(),
1674
- gradient: z16.string().nullable().optional(),
1832
+ gradient: z17.string().nullable().optional(),
1833
+ gradientPresetId: z17.string().min(1).nullable().optional(),
1675
1834
  image: mediaSchema.nullable().optional(),
1676
- objectFit: z16.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
1677
- scale: z16.string().nullable().optional(),
1678
- position: z16.string().nullable().optional(),
1679
- opacity: z16.number().min(0).max(1).nullable().optional(),
1680
- motion: z16.enum(["static", "fixed-frame"]).nullable().optional(),
1835
+ objectFit: z17.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
1836
+ scale: z17.string().nullable().optional(),
1837
+ position: z17.string().nullable().optional(),
1838
+ opacity: z17.number().min(0).max(1).nullable().optional(),
1839
+ motion: z17.enum(["static", "fixed-frame"]).nullable().optional(),
1681
1840
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
1682
1841
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
1683
1842
  headingColor: tokenOrCssColorValueSchema.nullable().optional()
1684
1843
  });
1685
- var noHeadingDecorationSchema = z16.object({
1686
- family: z16.literal("none"),
1687
- placement: z16.literal("none")
1844
+ var noHeadingDecorationSchema = z17.object({
1845
+ family: z17.literal("none")
1688
1846
  });
1689
- var visibleHeadingDecorationSchema = z16.object({
1690
- family: z16.enum(visibleHeadingDecorationFamilyValues),
1691
- placement: z16.enum(visibleHeadingDecorationPlacementValues),
1692
- colorToken: z16.enum(headingDecorationColorTokenValues).optional()
1847
+ var visibleHeadingDecorationSchema = z17.object({
1848
+ family: z17.enum(visibleHeadingDecorationFamilyValues),
1849
+ colorToken: z17.enum(headingDecorationColorTokenValues).optional()
1693
1850
  });
1694
- var headingDecorationSchema = z16.union([
1851
+ var headingDecorationSchema = z17.union([
1695
1852
  noHeadingDecorationSchema,
1696
1853
  visibleHeadingDecorationSchema
1697
1854
  ]);
1698
- var accordionIconTreatmentSchema = z16.object({
1699
- iconSet: z16.enum(accordionIconSetValues),
1700
- colorToken: z16.enum(accordionIconColorTokenValues),
1701
- openColorToken: z16.enum(accordionIconColorTokenValues).optional(),
1702
- motion: z16.enum(accordionIconMotionValues)
1855
+ var headingDecorationOverrideSchema = z17.union([
1856
+ z17.enum(headingDecorationOverrideValues),
1857
+ // Legacy authoring value from the earlier model. In the render-time model
1858
+ // "on" cannot force a fragment into a block, so it is equivalent to default.
1859
+ z17.literal("on").transform(() => "site-default")
1860
+ ]);
1861
+ var accordionIconTreatmentSchema = z17.object({
1862
+ iconSet: z17.enum(accordionIconSetValues),
1863
+ colorToken: z17.enum(accordionIconColorTokenValues),
1864
+ openColorToken: z17.enum(accordionIconColorTokenValues).optional(),
1865
+ motion: z17.enum(accordionIconMotionValues)
1703
1866
  });
1704
- var sectionStylesOverrideSchema = z16.object({
1867
+ var sectionStylesOverrideSchema = z17.object({
1705
1868
  background: boxBackgroundSchema.nullable().optional(),
1706
1869
  spacing: semanticSpacingSchema.nullable().optional(),
1707
- minHeight: z16.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
1708
- tileTreatment: z16.enum(tileTreatmentValues).nullable().optional(),
1709
- eventListTreatment: z16.enum(eventListTreatmentValues).nullable().optional(),
1710
- eyebrowTreatment: z16.enum(eyebrowTreatmentValues).nullable().optional(),
1870
+ minHeight: z17.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
1871
+ tileTreatment: z17.enum(tileTreatmentValues).nullable().optional(),
1872
+ eventListTreatment: z17.enum(eventListTreatmentValues).nullable().optional(),
1873
+ eyebrowTreatment: z17.enum(eyebrowTreatmentValues).nullable().optional(),
1711
1874
  headingDecoration: headingDecorationSchema.nullable().optional(),
1712
- // Author-level override consumed by later block/editor rendering phases.
1713
- // Keeping it in section styles lets existing block save APIs persist it.
1714
- headingDecorationOverride: z16.enum(headingDecorationOverrideValues).nullable().optional(),
1875
+ // Author-level opt-out consumed by render-time theme projection. Persisted
1876
+ // content may also carry legacy `headingDecoration` / `on` values; those are
1877
+ // tolerated at the schema boundary but the renderer treats the compiled theme
1878
+ // as the only source of the resolved signature.
1879
+ headingDecorationOverride: headingDecorationOverrideSchema.nullable().optional(),
1715
1880
  accordionIconTreatment: accordionIconTreatmentSchema.nullable().optional()
1716
1881
  });
1717
- var containerStylesOverrideSchema = z16.object({
1882
+ var containerStylesOverrideSchema = z17.object({
1718
1883
  background: boxBackgroundSchema.nullable().optional(),
1719
1884
  spacing: semanticSpacingSchema.nullable().optional(),
1720
- raised: z16.boolean().nullable().optional(),
1885
+ raised: z17.boolean().nullable().optional(),
1721
1886
  rounded: boxRoundedSchema.nullable().optional(),
1722
- fullWidth: z16.boolean().nullable().optional()
1887
+ fullWidth: z17.boolean().nullable().optional()
1723
1888
  });
1724
- var cardBorderOverrideSchema = z16.object({
1725
- enabled: z16.boolean().nullable().optional(),
1726
- width: z16.enum(["none", "1", "2", "3"]).nullable().optional(),
1889
+ var cardBorderOverrideSchema = z17.object({
1890
+ enabled: z17.boolean().nullable().optional(),
1891
+ width: z17.enum(["none", "1", "2", "3"]).nullable().optional(),
1727
1892
  colorToken: themeColorTokenSchema.nullable().optional()
1728
1893
  });
1729
- var cardStylesOverrideSchema = z16.object({
1894
+ var cardStylesOverrideSchema = z17.object({
1730
1895
  background: boxBackgroundSchema.nullable().optional(),
1731
1896
  border: cardBorderOverrideSchema.nullable().optional(),
1732
1897
  spacing: semanticSpacingSchema.nullable().optional(),
1733
- raised: z16.boolean().nullable().optional(),
1898
+ raised: z17.boolean().nullable().optional(),
1734
1899
  rounded: boxRoundedSchema.nullable().optional(),
1735
- treatment: z16.enum(["accent-quote"]).nullable().optional()
1736
- });
1737
- var blockStyleOverridesSchema = z16.object({
1900
+ treatment: z17.enum([
1901
+ "accent-quote",
1902
+ "editorial-rule",
1903
+ "soft-panel",
1904
+ "editorial-serif-quote",
1905
+ "editorial-open"
1906
+ ]).nullable().optional(),
1907
+ // Which site-style card variant the card adopts (emits a `.card-{id}` class).
1908
+ // 'none' is boxless. Driven by the block look via testimonialCardTreatment.
1909
+ cardVariant: boxStylesCardVariantSchema.nullable().optional()
1910
+ });
1911
+ var blockStyleOverridesSchema = z17.object({
1738
1912
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
1739
1913
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
1740
1914
  cardStyles: cardStylesOverrideSchema.nullable().optional()
1741
1915
  });
1742
- var blockThemeOverrideSchema = z16.object({
1743
- typography: z16.object({
1916
+ var blockThemeOverrideSchema = z17.object({
1917
+ typography: z17.object({
1744
1918
  proseLinkStyle: proseLinkStyleSchema.optional()
1745
1919
  }).optional(),
1746
1920
  styles: blockStyleOverridesSchema.optional()
1747
1921
  });
1748
- var typographyScaleSchema = z16.enum([
1922
+ var typographyScaleSchema = z17.enum([
1749
1923
  // New intuitive names
1750
1924
  "compact",
1751
1925
  // ratio 1.2 (was minorThird)
@@ -1758,9 +1932,9 @@ var typographyScaleSchema = z16.enum([
1758
1932
  "majorThird",
1759
1933
  "perfectFourth"
1760
1934
  ]);
1761
- var typographySchema = z16.object({
1935
+ var typographySchema = z17.object({
1762
1936
  body: bodyTypographyStyleSchema,
1763
- headings: z16.object({
1937
+ headings: z17.object({
1764
1938
  default: headingTypographyStyleSchema,
1765
1939
  h1: headingTypographyOverridesSchema,
1766
1940
  h2: headingTypographyOverridesSchema,
@@ -1773,41 +1947,41 @@ var typographySchema = z16.object({
1773
1947
  scale: typographyScaleSchema,
1774
1948
  proseLinkStyle: proseLinkStyleSchema.optional()
1775
1949
  });
1776
- var spaceSchema = z16.enum(["comfortable", "standard", "dense"]);
1777
- var corners = z16.enum(["square", "soft", "rounded", "pill"]);
1778
- var shadow = z16.object({
1779
- elevation: z16.enum(["none", "low", "medium", "high"]),
1780
- softness: z16.enum(["crisp", "soft", "hard"]).nullable(),
1781
- position: z16.enum(["bottom", "bottom-right"]).default("bottom")
1950
+ var spaceSchema = z17.enum(["comfortable", "standard", "dense"]);
1951
+ var corners = z17.enum(["square", "soft", "rounded", "pill"]);
1952
+ var shadow = z17.object({
1953
+ elevation: z17.enum(["none", "low", "medium", "high"]),
1954
+ softness: z17.enum(["crisp", "soft", "hard"]).nullable(),
1955
+ position: z17.enum(["bottom", "bottom-right"]).default("bottom")
1782
1956
  });
1783
- var border = z16.object({
1784
- width: z16.enum(["none", "hairline", "thin", "thick"]),
1785
- style: z16.enum(["solid", "dashed"])
1957
+ var border = z17.object({
1958
+ width: z17.enum(["none", "hairline", "thin", "thick"]),
1959
+ style: z17.enum(["solid", "dashed"])
1786
1960
  });
1787
- var motion = z16.object({
1788
- level: z16.enum(["off", "low", "medium", "high"]),
1789
- easing: z16.enum(["standard", "snappy", "gentle"]).nullable()
1961
+ var motion = z17.object({
1962
+ level: z17.enum(["off", "low", "medium", "high"]),
1963
+ easing: z17.enum(["standard", "snappy", "gentle"]).nullable()
1790
1964
  });
1791
- var buttonStyle = z16.object({
1965
+ var buttonStyle = z17.object({
1792
1966
  shape: corners
1793
1967
  // Used for --radius-control CSS variable
1794
1968
  });
1795
- var cardStyle = z16.object({
1796
- elevation: z16.enum(["none", "low", "medium", "high"]),
1797
- border: z16.enum(["none", "subtle", "defined"]),
1969
+ var cardStyle = z17.object({
1970
+ elevation: z17.enum(["none", "low", "medium", "high"]),
1971
+ border: z17.enum(["none", "subtle", "defined"]),
1798
1972
  shape: corners,
1799
- headerStyle: z16.enum(["plain", "accentBar", "subtleBg"]).nullable(),
1800
- mediaTreatment: z16.enum(["square", "rounded", "bleed"]).nullable()
1973
+ headerStyle: z17.enum(["plain", "accentBar", "subtleBg"]).nullable(),
1974
+ mediaTreatment: z17.enum(["square", "rounded", "bleed"]).nullable()
1801
1975
  });
1802
- var inputStyle = z16.object({
1976
+ var inputStyle = z17.object({
1803
1977
  shape: corners,
1804
- border: z16.enum(["subtle", "defined", "underline"]),
1805
- focus: z16.enum(["glow", "ring", "underline"]),
1806
- label: z16.enum(["inside", "above"])
1978
+ border: z17.enum(["subtle", "defined", "underline"]),
1979
+ focus: z17.enum(["glow", "ring", "underline"]),
1980
+ label: z17.enum(["inside", "above"])
1807
1981
  });
1808
- var headerVariant = z16.enum(["classic", "centered", "transparent", "floating"]);
1809
- var headerPositioning = z16.enum(["static", "sticky", "fixed"]);
1810
- var headerNavStyle = z16.enum([
1982
+ var headerVariant = z17.enum(["classic", "centered", "transparent", "floating"]);
1983
+ var headerPositioning = z17.enum(["static", "sticky", "fixed"]);
1984
+ var headerNavStyle = z17.enum([
1811
1985
  "minimal",
1812
1986
  "underline",
1813
1987
  "underline-grow",
@@ -1816,54 +1990,57 @@ var headerNavStyle = z16.enum([
1816
1990
  "frosted",
1817
1991
  "solid"
1818
1992
  ]);
1819
- var navFontWeight = z16.enum(["regular", "medium", "semibold", "bold"]);
1820
- var headerMaxWidth = z16.enum(["container", "full"]);
1821
- var headerContainerSchema = z16.object({
1822
- rounded: z16.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
1823
- border: z16.boolean().default(true),
1824
- shadow: z16.boolean().default(true),
1825
- padding: z16.enum(["sm", "md", "lg"]).default("md"),
1826
- tint: z16.string().nullable().optional(),
1827
- opacity: z16.number().min(0).max(1).default(0.12)
1993
+ var navFontWeight = z17.enum(["regular", "medium", "semibold", "bold"]);
1994
+ var headerMaxWidth = z17.enum(["container", "full"]);
1995
+ var headerContainerSchema = z17.object({
1996
+ rounded: z17.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
1997
+ border: z17.boolean().default(true),
1998
+ shadow: z17.boolean().default(true),
1999
+ padding: z17.enum(["sm", "md", "lg"]).default("md"),
2000
+ tint: z17.string().nullable().optional(),
2001
+ opacity: z17.number().min(0).max(1).default(0.12)
1828
2002
  }).optional();
1829
2003
  var headerBorderSchema = componentBorderSchema.extend({
1830
- position: z16.enum(["bottom", "top", "both", "none"]).default("bottom")
2004
+ position: z17.enum(["bottom", "top", "both", "none"]).default("bottom")
1831
2005
  }).optional();
1832
- var logoStyleSchema = z16.object({
1833
- fontFamily: z16.enum(["heading", "body"]).default("heading"),
1834
- letterSpacing: z16.enum(["normal", "wide", "wider", "widest"]).default("normal"),
1835
- gradient: z16.boolean().default(false)
2006
+ var logoStyleSchema = z17.object({
2007
+ fontFamily: z17.enum(["heading", "body"]).default("heading"),
2008
+ letterSpacing: z17.enum(["normal", "wide", "wider", "widest"]).default("normal"),
2009
+ gradient: z17.boolean().default(false),
2010
+ brandDisplay: z17.enum(brandDisplayModeValues).optional(),
2011
+ size: z17.enum(logoSizePolicyValues).optional(),
2012
+ accommodation: z17.enum(logoAccommodationPatternValues).optional()
1836
2013
  }).optional();
1837
- var headerLogoTextSchema = z16.object({
1838
- mobileWrapLines: z16.union([z16.literal(1), z16.literal(2)]).optional(),
1839
- mobileMaxWidth: z16.enum(["xs", "sm", "md"]).optional(),
1840
- hideOnShrink: z16.boolean().optional()
2014
+ var headerLogoTextSchema = z17.object({
2015
+ mobileWrapLines: z17.union([z17.literal(1), z17.literal(2)]).optional(),
2016
+ mobileMaxWidth: z17.enum(["xs", "sm", "md"]).optional(),
2017
+ hideOnShrink: z17.boolean().optional()
1841
2018
  }).optional();
1842
- var navEffectsSchema = z16.object({
1843
- underlineGradient: z16.boolean().default(false),
1844
- glow: z16.boolean().default(false),
1845
- glowColor: z16.string().optional(),
1846
- neumorphic: z16.boolean().default(false)
2019
+ var navEffectsSchema = z17.object({
2020
+ underlineGradient: z17.boolean().default(false),
2021
+ glow: z17.boolean().default(false),
2022
+ glowColor: z17.string().optional(),
2023
+ neumorphic: z17.boolean().default(false)
1847
2024
  }).optional();
1848
- var dropdownStyleSchema = z16.object({
2025
+ var dropdownStyleSchema = z17.object({
1849
2026
  // Container styling
1850
2027
  background: themeColorTokenSchema.default("surface"),
1851
2028
  textColor: themeColorTokenSchema.default("text"),
1852
2029
  borderColor: themeColorTokenSchema.nullable().default("border"),
1853
- shadow: z16.enum(["none", "sm", "md", "lg"]).default("md"),
1854
- borderRadius: z16.enum(["none", "sm", "md", "lg"]).default("md"),
2030
+ shadow: z17.enum(["none", "sm", "md", "lg"]).default("md"),
2031
+ borderRadius: z17.enum(["none", "sm", "md", "lg"]).default("md"),
1855
2032
  // Link hover states (explicit control)
1856
2033
  hoverBackground: themeColorTokenSchema.nullable().optional(),
1857
2034
  hoverTextColor: themeColorTokenSchema.nullable().optional(),
1858
2035
  // Typography
1859
- textTransform: z16.enum(["none", "uppercase", "capitalize"]).default("none"),
1860
- letterSpacing: z16.enum(["normal", "wide", "wider"]).default("normal"),
1861
- fontWeight: z16.enum(["regular", "medium", "semibold", "bold"]).optional(),
2036
+ textTransform: z17.enum(["none", "uppercase", "capitalize"]).default("none"),
2037
+ letterSpacing: z17.enum(["normal", "wide", "wider"]).default("normal"),
2038
+ fontWeight: z17.enum(["regular", "medium", "semibold", "bold"]).optional(),
1862
2039
  // optional = inherit from navWeight
1863
- textSize: z16.enum(["xs", "sm", "base", "lg"]).optional()
2040
+ textSize: z17.enum(["xs", "sm", "base", "lg"]).optional()
1864
2041
  // optional = no override (browser default)
1865
2042
  }).optional();
1866
- var headerCtaGapSchema = z16.enum([
2043
+ var headerCtaGapSchema = z17.enum([
1867
2044
  "none",
1868
2045
  "tight",
1869
2046
  "compact",
@@ -1871,7 +2048,7 @@ var headerCtaGapSchema = z16.enum([
1871
2048
  "relaxed",
1872
2049
  "spacious"
1873
2050
  ]);
1874
- var headerCtaTreatmentSchema = z16.enum([
2051
+ var headerCtaTreatmentSchema = z17.enum([
1875
2052
  "default",
1876
2053
  "primary",
1877
2054
  "secondary",
@@ -1879,22 +2056,22 @@ var headerCtaTreatmentSchema = z16.enum([
1879
2056
  "outline",
1880
2057
  "ghost"
1881
2058
  ]);
1882
- var navContainerSchema = z16.object({
1883
- type: z16.enum(["none", "pill", "glass"]).default("none"),
1884
- tint: z16.string().nullable().optional(),
1885
- opacity: z16.number().min(0).max(1).default(0.15)
2059
+ var navContainerSchema = z17.object({
2060
+ type: z17.enum(["none", "pill", "glass"]).default("none"),
2061
+ tint: z17.string().nullable().optional(),
2062
+ opacity: z17.number().min(0).max(1).default(0.15)
1886
2063
  }).default({ type: "none", tint: null, opacity: 0.15 });
1887
- var headerBackgroundSchema = z16.object({
1888
- type: z16.enum(["color", "gradient", "image"]),
2064
+ var headerBackgroundSchema = z17.object({
2065
+ type: z17.enum(["color", "gradient", "image"]),
1889
2066
  color: tokenOrCssColorValueSchema.nullable().optional(),
1890
2067
  gradient: gradientConfigSchema.nullable().optional(),
1891
2068
  image: mediaSchema.nullable().optional(),
1892
2069
  textColor: tokenOrCssColorValueSchema.nullable().optional()
1893
2070
  });
1894
- var headerSchema = z16.object({
2071
+ var headerSchema = z17.object({
1895
2072
  variant: headerVariant,
1896
2073
  positioning: headerPositioning,
1897
- shrinkOnScroll: z16.boolean(),
2074
+ shrinkOnScroll: z17.boolean(),
1898
2075
  maxWidth: headerMaxWidth,
1899
2076
  logoOverride: mediaSchema.nullable().optional(),
1900
2077
  background: headerBackgroundSchema.default({
@@ -1924,16 +2101,16 @@ var headerSchema = z16.object({
1924
2101
  // Optional theme-level CTA variant for header/nav CTA buttons.
1925
2102
  // Internal runtime bridge for the block renderer; prefer ctaTreatment in
1926
2103
  // authored Theme V2 concepts.
1927
- ctaVariant: z16.string().min(1).optional(),
2104
+ ctaVariant: z17.string().min(1).optional(),
1928
2105
  // Dropdown menu styling (nav dropdowns and mobile drawer)
1929
2106
  dropdownStyle: dropdownStyleSchema
1930
2107
  });
1931
- var footerVariant = z16.enum(["simple", "columns", "split"]);
1932
- var footerMaxWidth = z16.enum(["container", "full"]);
1933
- var footerMode = z16.enum(["default", "blocks", "default+blocks", "none"]);
1934
- var footerNavLayoutMode = z16.enum(["stack", "inline", "inline-wrap"]);
1935
- var footerNavLayoutAlign = z16.enum(["start", "center", "end", "space-between"]);
1936
- var footerSpacing = z16.enum([
2108
+ var footerVariant = z17.enum(["simple", "columns", "split"]);
2109
+ var footerMaxWidth = z17.enum(["container", "full"]);
2110
+ var footerMode = z17.enum(["default", "blocks", "default+blocks", "none"]);
2111
+ var footerNavLayoutMode = z17.enum(["stack", "inline", "inline-wrap"]);
2112
+ var footerNavLayoutAlign = z17.enum(["start", "center", "end", "space-between"]);
2113
+ var footerSpacing = z17.enum([
1937
2114
  "none",
1938
2115
  "tight",
1939
2116
  "compact",
@@ -1941,44 +2118,44 @@ var footerSpacing = z16.enum([
1941
2118
  "relaxed",
1942
2119
  "spacious"
1943
2120
  ]);
1944
- var footerLogoPlacement = z16.enum(["left", "right", "above", "below"]);
1945
- var footerLogoSize = z16.enum(["sm", "md", "lg", "xl"]);
1946
- var footerLogoMaxHeight = z16.enum(["sm", "md", "lg", "xl"]);
1947
- var footerBottomTextLinkStyleSchema = z16.object({
2121
+ var footerLogoPlacement = z17.enum(["left", "right", "above", "below"]);
2122
+ var footerLogoSize = z17.enum(["sm", "md", "lg", "xl"]);
2123
+ var footerLogoMaxHeight = z17.enum(["sm", "md", "lg", "xl"]);
2124
+ var footerBottomTextLinkStyleSchema = z17.object({
1948
2125
  colorToken: themeColorTokenSchema.optional(),
1949
2126
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
1950
2127
  decorationColorToken: themeColorTokenSchema.nullable().optional(),
1951
- underline: z16.boolean().optional()
2128
+ underline: z17.boolean().optional()
1952
2129
  });
1953
- var footerBottomBarSchema = z16.object({
1954
- enabled: z16.boolean().optional(),
1955
- fullBleed: z16.boolean().optional(),
2130
+ var footerBottomBarSchema = z17.object({
2131
+ enabled: z17.boolean().optional(),
2132
+ fullBleed: z17.boolean().optional(),
1956
2133
  background: headerBackgroundSchema.optional(),
1957
2134
  textColor: themeColorTokenSchema.nullable().optional(),
1958
- textAlign: z16.enum(["left", "center", "right"]).optional(),
2135
+ textAlign: z17.enum(["left", "center", "right"]).optional(),
1959
2136
  paddingY: footerSpacing.optional(),
1960
2137
  paddingX: footerSpacing.optional(),
1961
- borderTop: z16.object({
2138
+ borderTop: z17.object({
1962
2139
  colorToken: themeColorTokenSchema.nullable().optional(),
1963
- width: z16.enum(["none", "thin", "medium", "thick"]).optional()
2140
+ width: z17.enum(["none", "thin", "medium", "thick"]).optional()
1964
2141
  }).optional()
1965
2142
  });
1966
- var footerNavLayoutSchema = z16.object({
2143
+ var footerNavLayoutSchema = z17.object({
1967
2144
  layout: footerNavLayoutMode.optional(),
1968
2145
  align: footerNavLayoutAlign.optional(),
1969
2146
  gapX: footerSpacing.optional(),
1970
2147
  gapY: footerSpacing.optional(),
1971
- columns: z16.number().int().min(1).max(6).optional()
2148
+ columns: z17.number().int().min(1).max(6).optional()
1972
2149
  });
1973
- var footerLogoSchema = z16.object({
1974
- showLogo: z16.boolean().default(true),
1975
- showLogoText: z16.boolean().optional(),
2150
+ var footerLogoSchema = z17.object({
2151
+ showLogo: z17.boolean().default(true),
2152
+ showLogoText: z17.boolean().optional(),
1976
2153
  placement: footerLogoPlacement.optional(),
1977
2154
  size: footerLogoSize.optional(),
1978
2155
  maxHeight: footerLogoMaxHeight.optional(),
1979
- align: z16.enum(["start", "center", "end"]).optional()
2156
+ align: z17.enum(["start", "center", "end"]).optional()
1980
2157
  });
1981
- var footerSchema = z16.object({
2158
+ var footerSchema = z17.object({
1982
2159
  /**
1983
2160
  * SDK-only footer rendering mode.
1984
2161
  *
@@ -1987,7 +2164,7 @@ var footerSchema = z16.object({
1987
2164
  mode: footerMode.optional(),
1988
2165
  variant: footerVariant,
1989
2166
  maxWidth: footerMaxWidth,
1990
- showLogoText: z16.boolean().optional(),
2167
+ showLogoText: z17.boolean().optional(),
1991
2168
  background: headerBackgroundSchema.default({
1992
2169
  type: "color",
1993
2170
  color: "surface"
@@ -2005,20 +2182,20 @@ var footerSchema = z16.object({
2005
2182
  logo: footerLogoSchema.optional(),
2006
2183
  bottomBar: footerBottomBarSchema.optional()
2007
2184
  });
2008
- var containerPaddingPresetSchema = z16.enum([
2185
+ var containerPaddingPresetSchema = z17.enum([
2009
2186
  "tight",
2010
2187
  "compact",
2011
2188
  "default",
2012
2189
  "relaxed"
2013
2190
  ]);
2014
- var layoutSchema = z16.object({
2015
- containerPadding: z16.object({
2191
+ var layoutSchema = z17.object({
2192
+ containerPadding: z17.object({
2016
2193
  mobile: containerPaddingPresetSchema.optional(),
2017
2194
  tablet: containerPaddingPresetSchema.optional(),
2018
2195
  desktop: containerPaddingPresetSchema.optional()
2019
2196
  }).optional()
2020
2197
  }).optional();
2021
- var heroTypographySizeSchema = z16.enum([
2198
+ var heroTypographySizeSchema = z17.enum([
2022
2199
  "sm",
2023
2200
  "base",
2024
2201
  "lg",
@@ -2030,19 +2207,19 @@ var heroTypographySizeSchema = z16.enum([
2030
2207
  "6xl",
2031
2208
  "editorial"
2032
2209
  ]);
2033
- var heroTypographyLineHeightSchema = z16.enum([
2210
+ var heroTypographyLineHeightSchema = z17.enum([
2034
2211
  "tight",
2035
2212
  "snug",
2036
2213
  "normal",
2037
2214
  "relaxed"
2038
2215
  ]);
2039
- var heroResponsiveTypographySchema = z16.object({
2216
+ var heroResponsiveTypographySchema = z17.object({
2040
2217
  headlineSize: heroTypographySizeSchema.optional(),
2041
2218
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
2042
2219
  subheadlineSize: heroTypographySizeSchema.optional(),
2043
2220
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
2044
2221
  });
2045
- var heroTypographySchema = z16.object({
2222
+ var heroTypographySchema = z17.object({
2046
2223
  headlineSize: heroTypographySizeSchema.optional(),
2047
2224
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
2048
2225
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -2051,31 +2228,38 @@ var heroTypographySchema = z16.object({
2051
2228
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
2052
2229
  microSubheadlineSize: heroTypographySizeSchema.optional(),
2053
2230
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
2054
- responsive: z16.object({
2231
+ responsive: z17.object({
2055
2232
  tablet: heroResponsiveTypographySchema.optional(),
2056
2233
  mobile: heroResponsiveTypographySchema.optional()
2057
2234
  }).optional()
2058
2235
  });
2059
- var heroSchema = z16.object({
2236
+ var heroSchema = z17.object({
2060
2237
  typography: heroTypographySchema.optional()
2061
2238
  }).optional();
2062
- var bodyTextIntroTypographySizeSchema = z16.enum(["default", "editorial"]);
2063
- var bodyTextSchema = z16.object({
2064
- intro: z16.object({
2239
+ var bodyTextIntroTypographySizeSchema = z17.enum(["default", "editorial"]);
2240
+ var bodyTextSchema = z17.object({
2241
+ intro: z17.object({
2065
2242
  paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
2066
2243
  headingSize: bodyTextIntroTypographySizeSchema.optional()
2067
2244
  }).optional()
2068
2245
  }).optional();
2069
- var gradientsSchema = z16.object({
2070
- button: z16.string().min(1).nullable().optional(),
2071
- hero: z16.string().min(1).nullable().optional(),
2072
- background: z16.string().min(1).nullable().optional()
2073
- });
2074
- var themeSchema = z16.object({
2075
- name: z16.string().min(1).max(30),
2076
- description: z16.string().min(1).max(400),
2077
- rationale: z16.string().min(1).max(400),
2078
- siteStyleId: z16.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
2246
+ var gradientsSchema = z17.object({
2247
+ button: z17.string().min(1).nullable().optional(),
2248
+ hero: z17.string().min(1).nullable().optional(),
2249
+ background: z17.string().min(1).nullable().optional()
2250
+ });
2251
+ var testimonialQuoteTreatmentSchema = z17.object({
2252
+ style: z17.enum(["serif-display", "accent-glyph", "none"]),
2253
+ fontFamily: z17.enum(["heading", "body"]).optional(),
2254
+ scale: z17.enum(["sm", "md", "lg", "xl"]).optional(),
2255
+ colorToken: themeColorTokenSchema.optional(),
2256
+ opacity: z17.number().min(0).max(1).optional()
2257
+ });
2258
+ var themeSchema = z17.object({
2259
+ name: z17.string().min(1).max(30),
2260
+ description: z17.string().min(1).max(400),
2261
+ rationale: z17.string().min(1).max(400),
2262
+ siteStyleId: z17.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
2079
2263
  axes: axesSchema,
2080
2264
  palette: paletteSchema,
2081
2265
  typography: typographySchema,
@@ -2096,6 +2280,8 @@ var themeSchema = z16.object({
2096
2280
  // Card variant system (optional for backwards compatibility)
2097
2281
  accordions: accordionSystemSchema.optional(),
2098
2282
  // Accordion system (optional - generated if not provided)
2283
+ testimonialQuote: testimonialQuoteTreatmentSchema.optional(),
2284
+ // Testimonial quote-mark treatment (site-style-owned)
2099
2285
  inputs: inputSystemSchema.optional(),
2100
2286
  // Input system (optional - generated if not provided)
2101
2287
  inputStyle: inputStyle.optional(),
@@ -2103,15 +2289,19 @@ var themeSchema = z16.object({
2103
2289
  // Block-specific customization (Tier 3)
2104
2290
  // blockCustomVars: Per-block CSS variable overrides as bare values
2105
2291
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
2106
- blockCustomVars: z16.record(
2107
- z16.string(),
2292
+ blockCustomVars: z17.record(
2293
+ z17.string(),
2108
2294
  // block kind (matches data-block attribute)
2109
- z16.record(z16.string(), z16.string())
2295
+ z17.record(z17.string(), z17.string())
2110
2296
  // { '--var-name': 'value' }
2111
2297
  ).optional(),
2112
2298
  // Structured block-kind theme overrides (v1: typography prose-link style only)
2113
2299
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
2114
- blockOverrides: z16.record(z16.string(), blockThemeOverrideSchema).optional(),
2300
+ blockOverrides: z17.record(z17.string(), blockThemeOverrideSchema).optional(),
2301
+ // Site-wide heading decoration signature (family + colour). Set once per Look
2302
+ // and projected transiently onto eligible block headings at render time.
2303
+ // Alignment is inherited from the heading, so no placement is stored.
2304
+ headingDecoration: headingDecorationSchema.optional(),
2115
2305
  // Structured custom CSS rules
2116
2306
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
2117
2307
  customCssRules: customCssRulesSchema,
@@ -2145,11 +2335,11 @@ var themeSchema = z16.object({
2145
2335
  * }
2146
2336
  * ```
2147
2337
  */
2148
- styleGroups: z16.record(z16.string(), z16.array(z16.string())).optional()
2338
+ styleGroups: z17.record(z17.string(), z17.array(z17.string())).optional()
2149
2339
  });
2150
- var themesTurnSchema = z16.object({
2151
- message: z16.string().min(1),
2152
- themes: z16.array(themeSchema).length(3)
2340
+ var themesTurnSchema = z17.object({
2341
+ message: z17.string().min(1),
2342
+ themes: z17.array(themeSchema).length(3)
2153
2343
  });
2154
2344
 
2155
2345
  // src/theme/loader.ts