@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
@@ -86,7 +86,7 @@ function ze() {
86
86
  /* @__PURE__ */ Te(P)
87
87
  );
88
88
  }
89
- function z18(e) {
89
+ function z19(e) {
90
90
  if (L) {
91
91
  if (/* @__PURE__ */ Te(P) !== null)
92
92
  throw Tt(), Je;
@@ -2115,12 +2115,12 @@ function ha(e, t) {
2115
2115
  var mt = we(Dr, 2);
2116
2116
  let Pr;
2117
2117
  var We = X(mt);
2118
- en(We), We.__change = ui, z18(mt);
2118
+ en(We), We.__change = ui, z19(mt);
2119
2119
  var Ut = we(mt, 2), wi = X(Ut);
2120
2120
  {
2121
2121
  var pi = (n) => {
2122
2122
  var u = na(), _ = Gr(u), y = X(_);
2123
- Ge(y, () => c(re).verified), z18(_);
2123
+ Ge(y, () => c(re).verified), z19(_);
2124
2124
  var T = we(_, 2);
2125
2125
  en(T), Pe(() => {
2126
2126
  se(T, "name", V()), jo(T, c(Le));
@@ -2129,10 +2129,10 @@ function ha(e, t) {
2129
2129
  {
2130
2130
  var _ = (T) => {
2131
2131
  var E = ia(), p = X(E);
2132
- Ge(p, () => c(re).verifying), z18(E), ne(T, E);
2132
+ Ge(p, () => c(re).verifying), z19(E), ne(T, E);
2133
2133
  }, y = (T) => {
2134
2134
  var E = oa(), p = X(E);
2135
- Ge(p, () => c(re).label), z18(E), Pe(() => se(E, "for", c(cr))), ne(T, E);
2135
+ Ge(p, () => c(re).label), z19(E), Pe(() => se(E, "for", c(cr))), ne(T, E);
2136
2136
  };
2137
2137
  $e(
2138
2138
  n,
@@ -2147,18 +2147,18 @@ function ha(e, t) {
2147
2147
  c(C) === b.VERIFIED ? n(pi) : n(bi, false);
2148
2148
  });
2149
2149
  }
2150
- z18(Ut);
2150
+ z19(Ut);
2151
2151
  var yi = we(Ut, 2);
2152
2152
  {
2153
2153
  var Ei = (n) => {
2154
2154
  var u = aa(), _ = X(u);
2155
- se(_, "href", sr), z18(u), Pe(() => se(_, "aria-label", c(re).ariaLinkLabel)), ne(n, u);
2155
+ se(_, "href", sr), z19(u), Pe(() => se(_, "aria-label", c(re).ariaLinkLabel)), ne(n, u);
2156
2156
  };
2157
2157
  $e(yi, (n) => {
2158
2158
  (N() !== true || c(Dt)) && n(Ei);
2159
2159
  });
2160
2160
  }
2161
- z18(Mt);
2161
+ z19(Mt);
2162
2162
  var Or = we(Mt, 2);
2163
2163
  {
2164
2164
  var xi = (n) => {
@@ -2166,16 +2166,16 @@ function ha(e, t) {
2166
2166
  {
2167
2167
  var y = (E) => {
2168
2168
  var p = la(), x = X(p);
2169
- Ge(x, () => c(re).expired), z18(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2169
+ Ge(x, () => c(re).expired), z19(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2170
2170
  }, T = (E) => {
2171
2171
  var p = sa(), x = X(p);
2172
- Ge(x, () => c(re).error), z18(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2172
+ Ge(x, () => c(re).error), z19(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2173
2173
  };
2174
2174
  $e(_, (E) => {
2175
2175
  c(C) === b.EXPIRED ? E(y) : E(T, false);
2176
2176
  });
2177
2177
  }
2178
- z18(u), ne(n, u);
2178
+ z19(u), ne(n, u);
2179
2179
  };
2180
2180
  $e(Or, (n) => {
2181
2181
  (c(He) || c(C) === b.EXPIRED) && n(xi);
@@ -2185,7 +2185,7 @@ function ha(e, t) {
2185
2185
  {
2186
2186
  var $i = (n) => {
2187
2187
  var u = ua(), _ = X(u), y = X(_);
2188
- Ge(y, () => c(re).footer), z18(_), z18(u), ne(n, u);
2188
+ Ge(y, () => c(re).footer), z19(_), z19(u), ne(n, u);
2189
2189
  };
2190
2190
  $e(Fr, (n) => {
2191
2191
  c(re).footer && (k() !== true || c(Dt)) && n($i);
@@ -2201,7 +2201,7 @@ function ha(e, t) {
2201
2201
  v() && n(Ci);
2202
2202
  });
2203
2203
  }
2204
- return z18(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(
2204
+ return z19(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(
2205
2205
  (n) => {
2206
2206
  se(ot, "data-state", c(C)), se(ot, "data-floating", v()), Pr = Fo(mt, 1, "altcha-checkbox", null, Pr, n), se(We, "id", c(cr)), We.required = r2() !== "onsubmit" && (!v() || r2() !== "off");
2207
2207
  },
@@ -3977,6 +3977,33 @@ function parseColorTokenParts(source) {
3977
3977
  return { kind: "token", token, opacityPercent };
3978
3978
  }
3979
3979
 
3980
+ // ../theme-core/src/utils/colorStyles.ts
3981
+ var COLOR_VAR_PREFIX = "--tb-";
3982
+ function parseToken(source) {
3983
+ const parts = parseColorTokenParts(source);
3984
+ if (parts.kind === "raw") {
3985
+ return { token: source, raw: parts.value };
3986
+ }
3987
+ if (parts.kind === "invalid") {
3988
+ return { token: source };
3989
+ }
3990
+ return {
3991
+ token: parts.token,
3992
+ alpha: parts.opacityPercent === null ? void 0 : parts.opacityPercent / 100
3993
+ };
3994
+ }
3995
+ function rgbColorValue(token) {
3996
+ const { token: baseToken, alpha, raw } = parseToken(token);
3997
+ if (raw) {
3998
+ return raw;
3999
+ }
4000
+ const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
4001
+ if (alpha === void 0) {
4002
+ return `rgb(var(${cssVar}))`;
4003
+ }
4004
+ return `rgba(var(${cssVar}), ${alpha})`;
4005
+ }
4006
+
3980
4007
  // ../theme-core/src/buttons/types.ts
3981
4008
  import { z as z2 } from "zod";
3982
4009
 
@@ -5243,11 +5270,13 @@ var accordionIconSchema = z5.enum([
5243
5270
  // ⊕ becomes ⊖ (swap with fade)
5244
5271
  ]);
5245
5272
  var accordionSystemSchema = z5.object({
5246
- // Visual styling (solid color only - gradients can be added later if needed)
5273
+ // Visual styling (solid color only - gradients can be added later if needed).
5274
+ // null = no fill, so the accordion sits transparently on the section
5275
+ // surface (used by open, boxless "divided" looks).
5247
5276
  background: z5.object({
5248
5277
  type: z5.literal("solid"),
5249
5278
  colorToken: themeColorTokenSchema
5250
- }),
5279
+ }).nullable(),
5251
5280
  // Spacing (padding inside items)
5252
5281
  spacing: z5.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
5253
5282
  // Border radius (null = inherit from theme.corners)
@@ -5274,8 +5303,16 @@ var accordionSystemSchema = z5.object({
5274
5303
  // Trigger (question) styling
5275
5304
  trigger: z5.object({
5276
5305
  textColorToken: themeColorTokenSchema,
5277
- fontWeight: z5.enum(["regular", "medium", "semibold", "bold"]).nullable()
5306
+ fontWeight: z5.enum(["regular", "medium", "semibold", "bold"]).nullable(),
5278
5307
  // null = inherit from theme
5308
+ // Question typography. Defaults keep the historical body-font look; set
5309
+ // fontFamily 'heading' + a larger scale to give questions real presence.
5310
+ fontFamily: z5.enum(["body", "heading"]).optional(),
5311
+ // default 'body'
5312
+ fontScale: z5.enum(["body", "md", "lg"]).optional(),
5313
+ // default 'body'
5314
+ letterSpacing: z5.enum(["normal", "tight", "wide"]).optional(),
5315
+ textTransform: z5.enum(["none", "uppercase"]).optional()
5279
5316
  }),
5280
5317
  // Hover state styling
5281
5318
  hover: z5.object({
@@ -5283,6 +5320,17 @@ var accordionSystemSchema = z5.object({
5283
5320
  textColorToken: themeColorTokenSchema.optional(),
5284
5321
  borderColorToken: themeColorTokenSchema.optional()
5285
5322
  }),
5323
+ // Open-state emphasis: how an expanded item is visually rewarded. All
5324
+ // optional; omit for the historical "only the text recolors" behaviour.
5325
+ openState: z5.object({
5326
+ backgroundColorToken: themeColorTokenSchema.optional(),
5327
+ triggerColorToken: themeColorTokenSchema.optional(),
5328
+ accent: z5.object({
5329
+ edge: z5.enum(["left", "top", "bottom"]),
5330
+ colorToken: themeColorTokenSchema,
5331
+ thickness: z5.enum(["thin", "medium", "thick"])
5332
+ }).optional()
5333
+ }).optional(),
5286
5334
  // Content (answer) styling
5287
5335
  content: z5.object({
5288
5336
  textColorToken: themeColorTokenSchema
@@ -5347,14 +5395,8 @@ var visibleHeadingDecorationFamilyValues = [
5347
5395
  "organic-squiggle",
5348
5396
  "short-center-rule"
5349
5397
  ];
5350
- var visibleHeadingDecorationPlacementValues = [
5351
- "after-heading",
5352
- "between-heading-and-body",
5353
- "under-centered-heading"
5354
- ];
5355
5398
  var headingDecorationOverrideValues = [
5356
5399
  "site-default",
5357
- "on",
5358
5400
  "off"
5359
5401
  ];
5360
5402
  var headingDecorationColorTokenValues = [
@@ -5365,6 +5407,9 @@ var headingDecorationColorTokenValues = [
5365
5407
  "border",
5366
5408
  "muted"
5367
5409
  ];
5410
+ var noHeadingDecoration = {
5411
+ family: "none"
5412
+ };
5368
5413
  var accordionIconSetValues = [
5369
5414
  "plus",
5370
5415
  "chevron",
@@ -6046,6 +6091,77 @@ var logger = {
6046
6091
  import { z as z6 } from "zod";
6047
6092
  var tokenOrCssColorValueSchema = z6.string();
6048
6093
 
6094
+ // ../theme-core/src/cards/types.ts
6095
+ import { z as z7 } from "zod";
6096
+ var cardVariantRoleValues = ["default", "alternative"];
6097
+ var boxlessCardVariantValue = "none";
6098
+ var cardSpacingSchema = z7.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
6099
+ var gradientDirectionSchema2 = z7.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
6100
+ var cardVariantRoleSchema = z7.enum(cardVariantRoleValues);
6101
+ var boxStylesCardVariantSchema = z7.enum([
6102
+ ...cardVariantRoleValues,
6103
+ boxlessCardVariantValue
6104
+ ]);
6105
+ var cardBackgroundSchema = z7.discriminatedUnion("type", [
6106
+ z7.object({ type: z7.literal("solid"), colorToken: themeColorTokenSchema }),
6107
+ z7.object({
6108
+ type: z7.literal("gradient"),
6109
+ fromToken: themeColorTokenSchema,
6110
+ toToken: themeColorTokenSchema,
6111
+ direction: gradientDirectionSchema2
6112
+ }),
6113
+ z7.object({ type: z7.literal("transparent") })
6114
+ ]);
6115
+ var cardBorderSchema = z7.object({
6116
+ widthClass: z7.string(),
6117
+ colorToken: themeColorTokenSchema
6118
+ });
6119
+ var cardCornerValueSchema = z7.enum([
6120
+ "square",
6121
+ "soft",
6122
+ "rounded",
6123
+ "pill",
6124
+ "expressive"
6125
+ ]);
6126
+ var cardAccentEdgeSchema = z7.object({
6127
+ edge: z7.enum(["left", "top", "right", "bottom"]),
6128
+ colorToken: themeColorTokenSchema,
6129
+ width: z7.enum(["thin", "medium", "thick", "heavy"])
6130
+ });
6131
+ var cardCornerRadiiSchema = z7.object({
6132
+ topLeft: cardCornerValueSchema.optional(),
6133
+ topRight: cardCornerValueSchema.optional(),
6134
+ bottomLeft: cardCornerValueSchema.optional(),
6135
+ bottomRight: cardCornerValueSchema.optional()
6136
+ });
6137
+ var cardVariantSchema = z7.object({
6138
+ id: z7.string(),
6139
+ name: z7.string().min(1).max(20),
6140
+ enabled: z7.boolean(),
6141
+ priority: z7.union([z7.literal(1), z7.literal(2), z7.literal(3)]),
6142
+ // Appearance (token-based)
6143
+ background: cardBackgroundSchema,
6144
+ spacing: cardSpacingSchema,
6145
+ // Optional foreground (card text) color, for cards on a strong fill.
6146
+ foregroundToken: themeColorTokenSchema.optional(),
6147
+ // Optional overrides (uses theme defaults if not specified)
6148
+ shadow: z7.object({
6149
+ elevation: z7.enum(["none", "low", "medium", "high"]),
6150
+ softness: z7.enum(["crisp", "soft", "hard"]).nullable(),
6151
+ position: z7.enum(["bottom", "bottom-right"]).default("bottom")
6152
+ }).optional(),
6153
+ corners: z7.enum(["square", "soft", "rounded", "pill"]).optional(),
6154
+ // Per-corner radius override; wins over `corners` when set.
6155
+ cornerRadii: cardCornerRadiiSchema.optional(),
6156
+ // Border (optional)
6157
+ border: cardBorderSchema.optional(),
6158
+ // Single accent edge; replaces `border` when set.
6159
+ accentEdge: cardAccentEdgeSchema.optional()
6160
+ });
6161
+ var cardSystemSchema = z7.object({
6162
+ variants: z7.array(cardVariantSchema).min(1).max(3)
6163
+ });
6164
+
6049
6165
  // ../theme-core/src/site-styles/headerCtaVariants.ts
6050
6166
  function hasButtonVariant(theme, variantId) {
6051
6167
  return theme.buttons?.variants.some((variant) => variant.enabled && variant.id === variantId) ?? false;
@@ -6071,94 +6187,54 @@ function resolveHeaderCtaVariant(theme, treatment) {
6071
6187
  }
6072
6188
 
6073
6189
  // ../theme-core/src/palette/variants/types.ts
6074
- import { z as z17 } from "zod";
6190
+ import { z as z18 } from "zod";
6075
6191
 
6076
6192
  // ../theme-core/src/schema.ts
6077
- import { z as z16 } from "zod";
6193
+ import { z as z17 } from "zod";
6078
6194
 
6079
6195
  // ../theme-core/src/lib/media.ts
6080
- import z7 from "zod";
6081
- var hotspotSchema = z7.object({
6082
- x: z7.number().min(0).max(1),
6083
- y: z7.number().min(0).max(1),
6084
- radius: z7.number().optional()
6196
+ import z8 from "zod";
6197
+ var hotspotSchema = z8.object({
6198
+ x: z8.number().min(0).max(1),
6199
+ y: z8.number().min(0).max(1),
6200
+ radius: z8.number().optional()
6085
6201
  });
6086
- var rotationSchema = z7.union([z7.literal(0), z7.literal(90), z7.literal(180), z7.literal(270)]);
6087
- var rectSchema = z7.tuple([z7.number(), z7.number(), z7.number(), z7.number()]);
6088
- var aspectCropSchema = z7.object({
6089
- aspect: z7.preprocess((value) => value == null ? void 0 : value, z7.string().optional()),
6090
- rect: z7.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
6091
- hotspot: z7.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
6092
- rotation: z7.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
6202
+ var rotationSchema = z8.union([z8.literal(0), z8.literal(90), z8.literal(180), z8.literal(270)]);
6203
+ var rectSchema = z8.tuple([z8.number(), z8.number(), z8.number(), z8.number()]);
6204
+ var aspectCropSchema = z8.object({
6205
+ aspect: z8.preprocess((value) => value == null ? void 0 : value, z8.string().optional()),
6206
+ rect: z8.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
6207
+ hotspot: z8.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
6208
+ rotation: z8.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
6093
6209
  });
6094
- var transformSchema = z7.object({
6095
- aspectCrops: z7.preprocess((value) => {
6210
+ var transformSchema = z8.object({
6211
+ aspectCrops: z8.preprocess((value) => {
6096
6212
  if (!value || typeof value !== "object" || Array.isArray(value)) {
6097
6213
  return void 0;
6098
6214
  }
6099
6215
  return value;
6100
- }, z7.record(z7.string(), aspectCropSchema.catch({}))).optional(),
6216
+ }, z8.record(z8.string(), aspectCropSchema.catch({}))).optional(),
6101
6217
  rect: rectSchema.optional(),
6102
6218
  hotspot: hotspotSchema.optional(),
6103
6219
  rotation: rotationSchema.optional()
6104
6220
  });
6105
- var mediaSchema = z7.object({
6106
- type: z7.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
6107
- purpose: z7.string().optional(),
6108
- placeholder: z7.boolean().default(true).optional(),
6109
- assetId: z7.string().optional(),
6110
- identifier: z7.string().optional(),
6111
- src: z7.string().optional(),
6112
- alt: z7.string().optional(),
6113
- filename: z7.string().optional(),
6114
- mimeType: z7.string().optional(),
6115
- width: z7.number().optional(),
6116
- height: z7.number().optional(),
6117
- storageBucket: z7.string().optional(),
6118
- storagePath: z7.string().optional(),
6221
+ var mediaSchema = z8.object({
6222
+ type: z8.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
6223
+ purpose: z8.string().optional(),
6224
+ placeholder: z8.boolean().default(true).optional(),
6225
+ assetId: z8.string().optional(),
6226
+ identifier: z8.string().optional(),
6227
+ src: z8.string().optional(),
6228
+ alt: z8.string().optional(),
6229
+ filename: z8.string().optional(),
6230
+ mimeType: z8.string().optional(),
6231
+ width: z8.number().optional(),
6232
+ height: z8.number().optional(),
6233
+ storageBucket: z8.string().optional(),
6234
+ storagePath: z8.string().optional(),
6119
6235
  transform: transformSchema.optional()
6120
6236
  });
6121
6237
 
6122
- // ../theme-core/src/cards/types.ts
6123
- import { z as z8 } from "zod";
6124
- var cardSpacingSchema = z8.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
6125
- var gradientDirectionSchema2 = z8.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
6126
- var cardBackgroundSchema = z8.discriminatedUnion("type", [
6127
- z8.object({ type: z8.literal("solid"), colorToken: themeColorTokenSchema }),
6128
- z8.object({
6129
- type: z8.literal("gradient"),
6130
- fromToken: themeColorTokenSchema,
6131
- toToken: themeColorTokenSchema,
6132
- direction: gradientDirectionSchema2
6133
- }),
6134
- z8.object({ type: z8.literal("transparent") })
6135
- ]);
6136
- var cardBorderSchema = z8.object({
6137
- widthClass: z8.string(),
6138
- colorToken: themeColorTokenSchema
6139
- });
6140
- var cardVariantSchema = z8.object({
6141
- id: z8.string(),
6142
- name: z8.string().min(1).max(20),
6143
- enabled: z8.boolean(),
6144
- priority: z8.union([z8.literal(1), z8.literal(2), z8.literal(3)]),
6145
- // Appearance (token-based)
6146
- background: cardBackgroundSchema,
6147
- spacing: cardSpacingSchema,
6148
- // Optional overrides (uses theme defaults if not specified)
6149
- shadow: z8.object({
6150
- elevation: z8.enum(["none", "low", "medium", "high"]),
6151
- softness: z8.enum(["crisp", "soft", "hard"]).nullable(),
6152
- position: z8.enum(["bottom", "bottom-right"]).default("bottom")
6153
- }).optional(),
6154
- corners: z8.enum(["square", "soft", "rounded", "pill"]).optional(),
6155
- // Border (optional)
6156
- border: cardBorderSchema.optional()
6157
- });
6158
- var cardSystemSchema = z8.object({
6159
- variants: z8.array(cardVariantSchema).min(1).max(3)
6160
- });
6161
-
6162
6238
  // ../theme-core/src/inputs/types.ts
6163
6239
  import { z as z9 } from "zod";
6164
6240
  var inputSystemSchema = z9.object({
@@ -6475,75 +6551,186 @@ var componentShadowSchema = z15.object({
6475
6551
  elevation: z15.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
6476
6552
  });
6477
6553
 
6554
+ // ../theme-core/src/site-styles/logoBranding.ts
6555
+ import { z as z16 } from "zod";
6556
+ var logoTextConfidenceValues = ["low", "medium", "high"];
6557
+ var logoAssetShapeValues = [
6558
+ "none",
6559
+ "horizontal",
6560
+ "square",
6561
+ "portrait",
6562
+ "tall"
6563
+ ];
6564
+ var logoKindValues = [
6565
+ "mark",
6566
+ "wordmark",
6567
+ "lockup",
6568
+ "badge",
6569
+ "stacked-wordmark",
6570
+ "unknown"
6571
+ ];
6572
+ var logoDensityValues = ["simple", "detailed", "unknown"];
6573
+ var logoContainsTextSchema = z16.discriminatedUnion("kind", [
6574
+ z16.object({
6575
+ kind: z16.literal("contains-text"),
6576
+ confidence: z16.enum(logoTextConfidenceValues),
6577
+ text: z16.string().trim().min(1).max(200).optional()
6578
+ }),
6579
+ z16.object({
6580
+ kind: z16.literal("no-text"),
6581
+ confidence: z16.enum(logoTextConfidenceValues)
6582
+ }),
6583
+ z16.object({
6584
+ kind: z16.literal("unknown"),
6585
+ reason: z16.enum([
6586
+ "analysis-unavailable",
6587
+ "unsupported-file",
6588
+ "low-confidence"
6589
+ ])
6590
+ })
6591
+ ]);
6592
+ var logoAnalysisSourceSchema = z16.discriminatedUnion("kind", [
6593
+ z16.object({ kind: z16.literal("none") }),
6594
+ z16.object({
6595
+ kind: z16.literal("deterministic"),
6596
+ reason: z16.enum(["dimensions", "fallback"])
6597
+ }),
6598
+ z16.object({
6599
+ kind: z16.literal("llm"),
6600
+ model: z16.literal("gpt-5.4-mini"),
6601
+ analyzedAt: z16.string().trim().min(1).max(80).optional()
6602
+ }),
6603
+ z16.object({ kind: z16.literal("manual-override") })
6604
+ ]);
6605
+ var logoFactsSchema = z16.object({
6606
+ shape: z16.enum(logoAssetShapeValues),
6607
+ containsText: logoContainsTextSchema,
6608
+ kind: z16.enum(logoKindValues),
6609
+ density: z16.enum(logoDensityValues),
6610
+ source: logoAnalysisSourceSchema
6611
+ });
6612
+ var brandDisplayModeValues = [
6613
+ "auto",
6614
+ "logo-only",
6615
+ "logo-plus-title",
6616
+ "title-only"
6617
+ ];
6618
+ var logoAccommodationPatternValues = [
6619
+ "title-only",
6620
+ "inline-logo-only",
6621
+ "inline-wordmark",
6622
+ "inline-mark-with-title",
6623
+ "logo-plate",
6624
+ "centered-badge",
6625
+ "popout-badge",
6626
+ "centered-masthead",
6627
+ "hero-badge"
6628
+ ];
6629
+ var logoSizePolicyValues = [
6630
+ "auto",
6631
+ "compact",
6632
+ "standard",
6633
+ "generous",
6634
+ "display"
6635
+ ];
6636
+
6637
+ // ../theme-core/src/site-styles/rawStyleFields.ts
6638
+ var themeV2RuntimeStyleFieldNames = [
6639
+ "_frameStyles",
6640
+ "_sectionStyles",
6641
+ "_containerStyles",
6642
+ "_cardStyles",
6643
+ // styleGroup is legacy runtime transition wiring rather than a nested
6644
+ // override object, but normal editors should still never see it directly.
6645
+ "styleGroup"
6646
+ ];
6647
+ var themeV2BlockSpecificRawStyleFieldNames = [
6648
+ "_contentCardStyles",
6649
+ "_heroLayoutStyles",
6650
+ "_textCardStyles"
6651
+ ];
6652
+ var themeV2NormalEditorRawStyleFieldNames = [
6653
+ ...themeV2RuntimeStyleFieldNames,
6654
+ ...themeV2BlockSpecificRawStyleFieldNames
6655
+ ];
6656
+ var themeV2NormalEditorRawStyleFieldNameSet = new Set(
6657
+ themeV2NormalEditorRawStyleFieldNames
6658
+ );
6659
+ var themeV2CompilerOwnedFieldNames = [
6660
+ ...themeV2RuntimeStyleFieldNames,
6661
+ ...themeV2BlockSpecificRawStyleFieldNames
6662
+ ];
6663
+ var pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
6664
+
6478
6665
  // ../theme-core/src/schema.ts
6479
- var axesSchema = z16.object({
6480
- tone: z16.enum(["minimal", "classic", "bold"]),
6481
- energy: z16.enum(["calm", "vibrant"]),
6482
- density: z16.enum(["airy", "regular", "compact"]),
6483
- mediaBias: z16.enum(["text", "media", "mixed"]),
6484
- conversionBias: z16.enum(["low", "med", "high"]),
6485
- motion: z16.enum(["subtle", "standard", "expressive"])
6666
+ var axesSchema = z17.object({
6667
+ tone: z17.enum(["minimal", "classic", "bold"]),
6668
+ energy: z17.enum(["calm", "vibrant"]),
6669
+ density: z17.enum(["airy", "regular", "compact"]),
6670
+ mediaBias: z17.enum(["text", "media", "mixed"]),
6671
+ conversionBias: z17.enum(["low", "med", "high"]),
6672
+ motion: z17.enum(["subtle", "standard", "expressive"])
6486
6673
  });
6487
- var colourHexString = z16.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
6488
- var paletteColorSchema = z16.object({
6489
- name: z16.string().min(1),
6674
+ var colourHexString = z17.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
6675
+ var paletteColorSchema = z17.object({
6676
+ name: z17.string().min(1),
6490
6677
  hex: colourHexString
6491
6678
  });
6492
- var paletteMetaSchema = z16.object({
6493
- mode: z16.enum(["light", "dark"])
6679
+ var paletteMetaSchema = z17.object({
6680
+ mode: z17.enum(["light", "dark"])
6494
6681
  });
6495
- var paletteSchema = z16.object({
6496
- colors: z16.array(paletteColorSchema),
6682
+ var paletteSchema = z17.object({
6683
+ colors: z17.array(paletteColorSchema),
6497
6684
  meta: paletteMetaSchema
6498
6685
  });
6499
- var typographyStyleSchema = z16.object({
6500
- family: z16.string().min(1),
6501
- weight: z16.enum(["light", "regular", "medium", "semibold", "bold"]),
6502
- letterSpacing: z16.enum(["tight", "normal", "loose"]),
6503
- lineHeight: z16.enum(["normal", "relaxed", "loose"])
6686
+ var typographyStyleSchema = z17.object({
6687
+ family: z17.string().min(1),
6688
+ weight: z17.enum(["light", "regular", "medium", "semibold", "bold"]),
6689
+ letterSpacing: z17.enum(["tight", "normal", "loose"]),
6690
+ lineHeight: z17.enum(["normal", "relaxed", "loose"])
6504
6691
  });
6505
6692
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
6506
- size: z16.enum(["md", "lg", "xl"])
6693
+ size: z17.enum(["md", "lg", "xl"])
6507
6694
  });
6508
- var headingSizeSchema = z16.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
6509
- var headingTypographyOverridesSchema = z16.object({
6510
- weight: z16.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
6511
- letterSpacing: z16.enum(["tight", "normal", "loose"]).nullable().optional(),
6695
+ var headingSizeSchema = z17.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
6696
+ var headingTypographyOverridesSchema = z17.object({
6697
+ weight: z17.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
6698
+ letterSpacing: z17.enum(["tight", "normal", "loose"]).nullable().optional(),
6512
6699
  size: headingSizeSchema.nullable().optional(),
6513
- lineHeight: z16.enum(["normal", "relaxed", "loose"]).nullable().optional(),
6514
- italic: z16.boolean().nullable().optional(),
6700
+ lineHeight: z17.enum(["normal", "relaxed", "loose"]).nullable().optional(),
6701
+ italic: z17.boolean().nullable().optional(),
6515
6702
  colorToken: themeColorTokenSchema.nullable().optional()
6516
6703
  });
6517
6704
  var headingTypographyStyleSchema = typographyStyleSchema.extend({
6518
- case: z16.enum(["uppercase", "normal", "smallCaps"]).nullable(),
6519
- italic: z16.boolean().nullable(),
6705
+ case: z17.enum(["uppercase", "normal", "smallCaps"]).nullable(),
6706
+ italic: z17.boolean().nullable(),
6520
6707
  colorToken: themeColorTokenSchema.nullable().optional()
6521
6708
  });
6522
- var proseLinkUnderlineStyleSchema = z16.enum(["solid", "dotted", "dashed"]);
6523
- var proseLinkUnderlineThicknessSchema = z16.enum([
6709
+ var proseLinkUnderlineStyleSchema = z17.enum(["solid", "dotted", "dashed"]);
6710
+ var proseLinkUnderlineThicknessSchema = z17.enum([
6524
6711
  "auto",
6525
6712
  "fromFont",
6526
6713
  "thin",
6527
6714
  "medium",
6528
6715
  "thick"
6529
6716
  ]);
6530
- var proseLinkUnderlineOffsetSchema = z16.enum([
6717
+ var proseLinkUnderlineOffsetSchema = z17.enum([
6531
6718
  "auto",
6532
6719
  "tight",
6533
6720
  "normal",
6534
6721
  "loose"
6535
6722
  ]);
6536
- var proseLinkStyleSchema = z16.object({
6723
+ var proseLinkStyleSchema = z17.object({
6537
6724
  colorToken: themeColorTokenSchema.optional(),
6538
6725
  hoverColorToken: themeColorTokenSchema.optional(),
6539
- underline: z16.boolean().optional(),
6726
+ underline: z17.boolean().optional(),
6540
6727
  decorationColorToken: themeColorTokenSchema.optional(),
6541
6728
  hoverDecorationColorToken: themeColorTokenSchema.optional(),
6542
6729
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
6543
6730
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
6544
6731
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
6545
6732
  });
6546
- var semanticSpacingSchema = z16.enum([
6733
+ var semanticSpacingSchema = z17.enum([
6547
6734
  "none",
6548
6735
  "compact",
6549
6736
  "cozy",
@@ -6551,91 +6738,108 @@ var semanticSpacingSchema = z16.enum([
6551
6738
  "comfortable",
6552
6739
  "spacious"
6553
6740
  ]);
6554
- var boxRoundedSchema = z16.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
6555
- var boxBackgroundOverlaySchema = z16.object({
6556
- type: z16.enum(["none", "color", "gradient"]).nullable().optional(),
6741
+ var boxRoundedSchema = z17.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
6742
+ var boxBackgroundOverlaySchema = z17.object({
6743
+ type: z17.enum(["none", "color", "gradient"]).nullable().optional(),
6557
6744
  color: tokenOrCssColorValueSchema.nullable().optional(),
6558
- gradient: z16.string().nullable().optional(),
6559
- opacity: z16.number().min(0).max(1).nullable().optional()
6745
+ gradient: z17.string().nullable().optional(),
6746
+ opacity: z17.number().min(0).max(1).nullable().optional()
6560
6747
  });
6561
- var boxBackgroundSchema = z16.object({
6562
- type: z16.enum(["color", "gradient", "image"]).optional(),
6748
+ var boxBackgroundSchema = z17.object({
6749
+ type: z17.enum(["color", "gradient", "image"]).optional(),
6750
+ contentOwner: z17.literal(pageDesignEditorBackgroundOverrideOwner).optional(),
6563
6751
  color: tokenOrCssColorValueSchema.nullable().optional(),
6564
- gradient: z16.string().nullable().optional(),
6752
+ gradient: z17.string().nullable().optional(),
6753
+ gradientPresetId: z17.string().min(1).nullable().optional(),
6565
6754
  image: mediaSchema.nullable().optional(),
6566
- objectFit: z16.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
6567
- scale: z16.string().nullable().optional(),
6568
- position: z16.string().nullable().optional(),
6569
- opacity: z16.number().min(0).max(1).nullable().optional(),
6570
- motion: z16.enum(["static", "fixed-frame"]).nullable().optional(),
6755
+ objectFit: z17.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
6756
+ scale: z17.string().nullable().optional(),
6757
+ position: z17.string().nullable().optional(),
6758
+ opacity: z17.number().min(0).max(1).nullable().optional(),
6759
+ motion: z17.enum(["static", "fixed-frame"]).nullable().optional(),
6571
6760
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
6572
6761
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
6573
6762
  headingColor: tokenOrCssColorValueSchema.nullable().optional()
6574
6763
  });
6575
- var noHeadingDecorationSchema = z16.object({
6576
- family: z16.literal("none"),
6577
- placement: z16.literal("none")
6764
+ var noHeadingDecorationSchema = z17.object({
6765
+ family: z17.literal("none")
6578
6766
  });
6579
- var visibleHeadingDecorationSchema = z16.object({
6580
- family: z16.enum(visibleHeadingDecorationFamilyValues),
6581
- placement: z16.enum(visibleHeadingDecorationPlacementValues),
6582
- colorToken: z16.enum(headingDecorationColorTokenValues).optional()
6767
+ var visibleHeadingDecorationSchema = z17.object({
6768
+ family: z17.enum(visibleHeadingDecorationFamilyValues),
6769
+ colorToken: z17.enum(headingDecorationColorTokenValues).optional()
6583
6770
  });
6584
- var headingDecorationSchema = z16.union([
6771
+ var headingDecorationSchema = z17.union([
6585
6772
  noHeadingDecorationSchema,
6586
6773
  visibleHeadingDecorationSchema
6587
6774
  ]);
6588
- var accordionIconTreatmentSchema = z16.object({
6589
- iconSet: z16.enum(accordionIconSetValues),
6590
- colorToken: z16.enum(accordionIconColorTokenValues),
6591
- openColorToken: z16.enum(accordionIconColorTokenValues).optional(),
6592
- motion: z16.enum(accordionIconMotionValues)
6775
+ var headingDecorationOverrideSchema = z17.union([
6776
+ z17.enum(headingDecorationOverrideValues),
6777
+ // Legacy authoring value from the earlier model. In the render-time model
6778
+ // "on" cannot force a fragment into a block, so it is equivalent to default.
6779
+ z17.literal("on").transform(() => "site-default")
6780
+ ]);
6781
+ var accordionIconTreatmentSchema = z17.object({
6782
+ iconSet: z17.enum(accordionIconSetValues),
6783
+ colorToken: z17.enum(accordionIconColorTokenValues),
6784
+ openColorToken: z17.enum(accordionIconColorTokenValues).optional(),
6785
+ motion: z17.enum(accordionIconMotionValues)
6593
6786
  });
6594
- var sectionStylesOverrideSchema = z16.object({
6787
+ var sectionStylesOverrideSchema = z17.object({
6595
6788
  background: boxBackgroundSchema.nullable().optional(),
6596
6789
  spacing: semanticSpacingSchema.nullable().optional(),
6597
- minHeight: z16.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
6598
- tileTreatment: z16.enum(tileTreatmentValues).nullable().optional(),
6599
- eventListTreatment: z16.enum(eventListTreatmentValues).nullable().optional(),
6600
- eyebrowTreatment: z16.enum(eyebrowTreatmentValues).nullable().optional(),
6790
+ minHeight: z17.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
6791
+ tileTreatment: z17.enum(tileTreatmentValues).nullable().optional(),
6792
+ eventListTreatment: z17.enum(eventListTreatmentValues).nullable().optional(),
6793
+ eyebrowTreatment: z17.enum(eyebrowTreatmentValues).nullable().optional(),
6601
6794
  headingDecoration: headingDecorationSchema.nullable().optional(),
6602
- // Author-level override consumed by later block/editor rendering phases.
6603
- // Keeping it in section styles lets existing block save APIs persist it.
6604
- headingDecorationOverride: z16.enum(headingDecorationOverrideValues).nullable().optional(),
6795
+ // Author-level opt-out consumed by render-time theme projection. Persisted
6796
+ // content may also carry legacy `headingDecoration` / `on` values; those are
6797
+ // tolerated at the schema boundary but the renderer treats the compiled theme
6798
+ // as the only source of the resolved signature.
6799
+ headingDecorationOverride: headingDecorationOverrideSchema.nullable().optional(),
6605
6800
  accordionIconTreatment: accordionIconTreatmentSchema.nullable().optional()
6606
6801
  });
6607
- var containerStylesOverrideSchema = z16.object({
6802
+ var containerStylesOverrideSchema = z17.object({
6608
6803
  background: boxBackgroundSchema.nullable().optional(),
6609
6804
  spacing: semanticSpacingSchema.nullable().optional(),
6610
- raised: z16.boolean().nullable().optional(),
6805
+ raised: z17.boolean().nullable().optional(),
6611
6806
  rounded: boxRoundedSchema.nullable().optional(),
6612
- fullWidth: z16.boolean().nullable().optional()
6807
+ fullWidth: z17.boolean().nullable().optional()
6613
6808
  });
6614
- var cardBorderOverrideSchema = z16.object({
6615
- enabled: z16.boolean().nullable().optional(),
6616
- width: z16.enum(["none", "1", "2", "3"]).nullable().optional(),
6809
+ var cardBorderOverrideSchema = z17.object({
6810
+ enabled: z17.boolean().nullable().optional(),
6811
+ width: z17.enum(["none", "1", "2", "3"]).nullable().optional(),
6617
6812
  colorToken: themeColorTokenSchema.nullable().optional()
6618
6813
  });
6619
- var cardStylesOverrideSchema = z16.object({
6814
+ var cardStylesOverrideSchema = z17.object({
6620
6815
  background: boxBackgroundSchema.nullable().optional(),
6621
6816
  border: cardBorderOverrideSchema.nullable().optional(),
6622
6817
  spacing: semanticSpacingSchema.nullable().optional(),
6623
- raised: z16.boolean().nullable().optional(),
6818
+ raised: z17.boolean().nullable().optional(),
6624
6819
  rounded: boxRoundedSchema.nullable().optional(),
6625
- treatment: z16.enum(["accent-quote"]).nullable().optional()
6820
+ treatment: z17.enum([
6821
+ "accent-quote",
6822
+ "editorial-rule",
6823
+ "soft-panel",
6824
+ "editorial-serif-quote",
6825
+ "editorial-open"
6826
+ ]).nullable().optional(),
6827
+ // Which site-style card variant the card adopts (emits a `.card-{id}` class).
6828
+ // 'none' is boxless. Driven by the block look via testimonialCardTreatment.
6829
+ cardVariant: boxStylesCardVariantSchema.nullable().optional()
6626
6830
  });
6627
- var blockStyleOverridesSchema = z16.object({
6831
+ var blockStyleOverridesSchema = z17.object({
6628
6832
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
6629
6833
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
6630
6834
  cardStyles: cardStylesOverrideSchema.nullable().optional()
6631
6835
  });
6632
- var blockThemeOverrideSchema = z16.object({
6633
- typography: z16.object({
6836
+ var blockThemeOverrideSchema = z17.object({
6837
+ typography: z17.object({
6634
6838
  proseLinkStyle: proseLinkStyleSchema.optional()
6635
6839
  }).optional(),
6636
6840
  styles: blockStyleOverridesSchema.optional()
6637
6841
  });
6638
- var typographyScaleSchema = z16.enum([
6842
+ var typographyScaleSchema = z17.enum([
6639
6843
  // New intuitive names
6640
6844
  "compact",
6641
6845
  // ratio 1.2 (was minorThird)
@@ -6648,9 +6852,9 @@ var typographyScaleSchema = z16.enum([
6648
6852
  "majorThird",
6649
6853
  "perfectFourth"
6650
6854
  ]);
6651
- var typographySchema = z16.object({
6855
+ var typographySchema = z17.object({
6652
6856
  body: bodyTypographyStyleSchema,
6653
- headings: z16.object({
6857
+ headings: z17.object({
6654
6858
  default: headingTypographyStyleSchema,
6655
6859
  h1: headingTypographyOverridesSchema,
6656
6860
  h2: headingTypographyOverridesSchema,
@@ -6663,41 +6867,41 @@ var typographySchema = z16.object({
6663
6867
  scale: typographyScaleSchema,
6664
6868
  proseLinkStyle: proseLinkStyleSchema.optional()
6665
6869
  });
6666
- var spaceSchema = z16.enum(["comfortable", "standard", "dense"]);
6667
- var corners = z16.enum(["square", "soft", "rounded", "pill"]);
6668
- var shadow = z16.object({
6669
- elevation: z16.enum(["none", "low", "medium", "high"]),
6670
- softness: z16.enum(["crisp", "soft", "hard"]).nullable(),
6671
- position: z16.enum(["bottom", "bottom-right"]).default("bottom")
6870
+ var spaceSchema = z17.enum(["comfortable", "standard", "dense"]);
6871
+ var corners = z17.enum(["square", "soft", "rounded", "pill"]);
6872
+ var shadow = z17.object({
6873
+ elevation: z17.enum(["none", "low", "medium", "high"]),
6874
+ softness: z17.enum(["crisp", "soft", "hard"]).nullable(),
6875
+ position: z17.enum(["bottom", "bottom-right"]).default("bottom")
6672
6876
  });
6673
- var border = z16.object({
6674
- width: z16.enum(["none", "hairline", "thin", "thick"]),
6675
- style: z16.enum(["solid", "dashed"])
6877
+ var border = z17.object({
6878
+ width: z17.enum(["none", "hairline", "thin", "thick"]),
6879
+ style: z17.enum(["solid", "dashed"])
6676
6880
  });
6677
- var motion = z16.object({
6678
- level: z16.enum(["off", "low", "medium", "high"]),
6679
- easing: z16.enum(["standard", "snappy", "gentle"]).nullable()
6881
+ var motion = z17.object({
6882
+ level: z17.enum(["off", "low", "medium", "high"]),
6883
+ easing: z17.enum(["standard", "snappy", "gentle"]).nullable()
6680
6884
  });
6681
- var buttonStyle = z16.object({
6885
+ var buttonStyle = z17.object({
6682
6886
  shape: corners
6683
6887
  // Used for --radius-control CSS variable
6684
6888
  });
6685
- var cardStyle = z16.object({
6686
- elevation: z16.enum(["none", "low", "medium", "high"]),
6687
- border: z16.enum(["none", "subtle", "defined"]),
6889
+ var cardStyle = z17.object({
6890
+ elevation: z17.enum(["none", "low", "medium", "high"]),
6891
+ border: z17.enum(["none", "subtle", "defined"]),
6688
6892
  shape: corners,
6689
- headerStyle: z16.enum(["plain", "accentBar", "subtleBg"]).nullable(),
6690
- mediaTreatment: z16.enum(["square", "rounded", "bleed"]).nullable()
6893
+ headerStyle: z17.enum(["plain", "accentBar", "subtleBg"]).nullable(),
6894
+ mediaTreatment: z17.enum(["square", "rounded", "bleed"]).nullable()
6691
6895
  });
6692
- var inputStyle = z16.object({
6896
+ var inputStyle = z17.object({
6693
6897
  shape: corners,
6694
- border: z16.enum(["subtle", "defined", "underline"]),
6695
- focus: z16.enum(["glow", "ring", "underline"]),
6696
- label: z16.enum(["inside", "above"])
6898
+ border: z17.enum(["subtle", "defined", "underline"]),
6899
+ focus: z17.enum(["glow", "ring", "underline"]),
6900
+ label: z17.enum(["inside", "above"])
6697
6901
  });
6698
- var headerVariant = z16.enum(["classic", "centered", "transparent", "floating"]);
6699
- var headerPositioning = z16.enum(["static", "sticky", "fixed"]);
6700
- var headerNavStyle = z16.enum([
6902
+ var headerVariant = z17.enum(["classic", "centered", "transparent", "floating"]);
6903
+ var headerPositioning = z17.enum(["static", "sticky", "fixed"]);
6904
+ var headerNavStyle = z17.enum([
6701
6905
  "minimal",
6702
6906
  "underline",
6703
6907
  "underline-grow",
@@ -6706,54 +6910,57 @@ var headerNavStyle = z16.enum([
6706
6910
  "frosted",
6707
6911
  "solid"
6708
6912
  ]);
6709
- var navFontWeight = z16.enum(["regular", "medium", "semibold", "bold"]);
6710
- var headerMaxWidth = z16.enum(["container", "full"]);
6711
- var headerContainerSchema = z16.object({
6712
- rounded: z16.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
6713
- border: z16.boolean().default(true),
6714
- shadow: z16.boolean().default(true),
6715
- padding: z16.enum(["sm", "md", "lg"]).default("md"),
6716
- tint: z16.string().nullable().optional(),
6717
- opacity: z16.number().min(0).max(1).default(0.12)
6913
+ var navFontWeight = z17.enum(["regular", "medium", "semibold", "bold"]);
6914
+ var headerMaxWidth = z17.enum(["container", "full"]);
6915
+ var headerContainerSchema = z17.object({
6916
+ rounded: z17.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
6917
+ border: z17.boolean().default(true),
6918
+ shadow: z17.boolean().default(true),
6919
+ padding: z17.enum(["sm", "md", "lg"]).default("md"),
6920
+ tint: z17.string().nullable().optional(),
6921
+ opacity: z17.number().min(0).max(1).default(0.12)
6718
6922
  }).optional();
6719
6923
  var headerBorderSchema = componentBorderSchema.extend({
6720
- position: z16.enum(["bottom", "top", "both", "none"]).default("bottom")
6924
+ position: z17.enum(["bottom", "top", "both", "none"]).default("bottom")
6721
6925
  }).optional();
6722
- var logoStyleSchema = z16.object({
6723
- fontFamily: z16.enum(["heading", "body"]).default("heading"),
6724
- letterSpacing: z16.enum(["normal", "wide", "wider", "widest"]).default("normal"),
6725
- gradient: z16.boolean().default(false)
6926
+ var logoStyleSchema = z17.object({
6927
+ fontFamily: z17.enum(["heading", "body"]).default("heading"),
6928
+ letterSpacing: z17.enum(["normal", "wide", "wider", "widest"]).default("normal"),
6929
+ gradient: z17.boolean().default(false),
6930
+ brandDisplay: z17.enum(brandDisplayModeValues).optional(),
6931
+ size: z17.enum(logoSizePolicyValues).optional(),
6932
+ accommodation: z17.enum(logoAccommodationPatternValues).optional()
6726
6933
  }).optional();
6727
- var headerLogoTextSchema = z16.object({
6728
- mobileWrapLines: z16.union([z16.literal(1), z16.literal(2)]).optional(),
6729
- mobileMaxWidth: z16.enum(["xs", "sm", "md"]).optional(),
6730
- hideOnShrink: z16.boolean().optional()
6934
+ var headerLogoTextSchema = z17.object({
6935
+ mobileWrapLines: z17.union([z17.literal(1), z17.literal(2)]).optional(),
6936
+ mobileMaxWidth: z17.enum(["xs", "sm", "md"]).optional(),
6937
+ hideOnShrink: z17.boolean().optional()
6731
6938
  }).optional();
6732
- var navEffectsSchema = z16.object({
6733
- underlineGradient: z16.boolean().default(false),
6734
- glow: z16.boolean().default(false),
6735
- glowColor: z16.string().optional(),
6736
- neumorphic: z16.boolean().default(false)
6939
+ var navEffectsSchema = z17.object({
6940
+ underlineGradient: z17.boolean().default(false),
6941
+ glow: z17.boolean().default(false),
6942
+ glowColor: z17.string().optional(),
6943
+ neumorphic: z17.boolean().default(false)
6737
6944
  }).optional();
6738
- var dropdownStyleSchema = z16.object({
6945
+ var dropdownStyleSchema = z17.object({
6739
6946
  // Container styling
6740
6947
  background: themeColorTokenSchema.default("surface"),
6741
6948
  textColor: themeColorTokenSchema.default("text"),
6742
6949
  borderColor: themeColorTokenSchema.nullable().default("border"),
6743
- shadow: z16.enum(["none", "sm", "md", "lg"]).default("md"),
6744
- borderRadius: z16.enum(["none", "sm", "md", "lg"]).default("md"),
6950
+ shadow: z17.enum(["none", "sm", "md", "lg"]).default("md"),
6951
+ borderRadius: z17.enum(["none", "sm", "md", "lg"]).default("md"),
6745
6952
  // Link hover states (explicit control)
6746
6953
  hoverBackground: themeColorTokenSchema.nullable().optional(),
6747
6954
  hoverTextColor: themeColorTokenSchema.nullable().optional(),
6748
6955
  // Typography
6749
- textTransform: z16.enum(["none", "uppercase", "capitalize"]).default("none"),
6750
- letterSpacing: z16.enum(["normal", "wide", "wider"]).default("normal"),
6751
- fontWeight: z16.enum(["regular", "medium", "semibold", "bold"]).optional(),
6956
+ textTransform: z17.enum(["none", "uppercase", "capitalize"]).default("none"),
6957
+ letterSpacing: z17.enum(["normal", "wide", "wider"]).default("normal"),
6958
+ fontWeight: z17.enum(["regular", "medium", "semibold", "bold"]).optional(),
6752
6959
  // optional = inherit from navWeight
6753
- textSize: z16.enum(["xs", "sm", "base", "lg"]).optional()
6960
+ textSize: z17.enum(["xs", "sm", "base", "lg"]).optional()
6754
6961
  // optional = no override (browser default)
6755
6962
  }).optional();
6756
- var headerCtaGapSchema = z16.enum([
6963
+ var headerCtaGapSchema = z17.enum([
6757
6964
  "none",
6758
6965
  "tight",
6759
6966
  "compact",
@@ -6761,7 +6968,7 @@ var headerCtaGapSchema = z16.enum([
6761
6968
  "relaxed",
6762
6969
  "spacious"
6763
6970
  ]);
6764
- var headerCtaTreatmentSchema = z16.enum([
6971
+ var headerCtaTreatmentSchema = z17.enum([
6765
6972
  "default",
6766
6973
  "primary",
6767
6974
  "secondary",
@@ -6769,22 +6976,22 @@ var headerCtaTreatmentSchema = z16.enum([
6769
6976
  "outline",
6770
6977
  "ghost"
6771
6978
  ]);
6772
- var navContainerSchema = z16.object({
6773
- type: z16.enum(["none", "pill", "glass"]).default("none"),
6774
- tint: z16.string().nullable().optional(),
6775
- opacity: z16.number().min(0).max(1).default(0.15)
6979
+ var navContainerSchema = z17.object({
6980
+ type: z17.enum(["none", "pill", "glass"]).default("none"),
6981
+ tint: z17.string().nullable().optional(),
6982
+ opacity: z17.number().min(0).max(1).default(0.15)
6776
6983
  }).default({ type: "none", tint: null, opacity: 0.15 });
6777
- var headerBackgroundSchema = z16.object({
6778
- type: z16.enum(["color", "gradient", "image"]),
6984
+ var headerBackgroundSchema = z17.object({
6985
+ type: z17.enum(["color", "gradient", "image"]),
6779
6986
  color: tokenOrCssColorValueSchema.nullable().optional(),
6780
6987
  gradient: gradientConfigSchema.nullable().optional(),
6781
6988
  image: mediaSchema.nullable().optional(),
6782
6989
  textColor: tokenOrCssColorValueSchema.nullable().optional()
6783
6990
  });
6784
- var headerSchema = z16.object({
6991
+ var headerSchema = z17.object({
6785
6992
  variant: headerVariant,
6786
6993
  positioning: headerPositioning,
6787
- shrinkOnScroll: z16.boolean(),
6994
+ shrinkOnScroll: z17.boolean(),
6788
6995
  maxWidth: headerMaxWidth,
6789
6996
  logoOverride: mediaSchema.nullable().optional(),
6790
6997
  background: headerBackgroundSchema.default({
@@ -6814,16 +7021,16 @@ var headerSchema = z16.object({
6814
7021
  // Optional theme-level CTA variant for header/nav CTA buttons.
6815
7022
  // Internal runtime bridge for the block renderer; prefer ctaTreatment in
6816
7023
  // authored Theme V2 concepts.
6817
- ctaVariant: z16.string().min(1).optional(),
7024
+ ctaVariant: z17.string().min(1).optional(),
6818
7025
  // Dropdown menu styling (nav dropdowns and mobile drawer)
6819
7026
  dropdownStyle: dropdownStyleSchema
6820
7027
  });
6821
- var footerVariant = z16.enum(["simple", "columns", "split"]);
6822
- var footerMaxWidth = z16.enum(["container", "full"]);
6823
- var footerMode = z16.enum(["default", "blocks", "default+blocks", "none"]);
6824
- var footerNavLayoutMode = z16.enum(["stack", "inline", "inline-wrap"]);
6825
- var footerNavLayoutAlign = z16.enum(["start", "center", "end", "space-between"]);
6826
- var footerSpacing = z16.enum([
7028
+ var footerVariant = z17.enum(["simple", "columns", "split"]);
7029
+ var footerMaxWidth = z17.enum(["container", "full"]);
7030
+ var footerMode = z17.enum(["default", "blocks", "default+blocks", "none"]);
7031
+ var footerNavLayoutMode = z17.enum(["stack", "inline", "inline-wrap"]);
7032
+ var footerNavLayoutAlign = z17.enum(["start", "center", "end", "space-between"]);
7033
+ var footerSpacing = z17.enum([
6827
7034
  "none",
6828
7035
  "tight",
6829
7036
  "compact",
@@ -6831,44 +7038,44 @@ var footerSpacing = z16.enum([
6831
7038
  "relaxed",
6832
7039
  "spacious"
6833
7040
  ]);
6834
- var footerLogoPlacement = z16.enum(["left", "right", "above", "below"]);
6835
- var footerLogoSize = z16.enum(["sm", "md", "lg", "xl"]);
6836
- var footerLogoMaxHeight = z16.enum(["sm", "md", "lg", "xl"]);
6837
- var footerBottomTextLinkStyleSchema = z16.object({
7041
+ var footerLogoPlacement = z17.enum(["left", "right", "above", "below"]);
7042
+ var footerLogoSize = z17.enum(["sm", "md", "lg", "xl"]);
7043
+ var footerLogoMaxHeight = z17.enum(["sm", "md", "lg", "xl"]);
7044
+ var footerBottomTextLinkStyleSchema = z17.object({
6838
7045
  colorToken: themeColorTokenSchema.optional(),
6839
7046
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
6840
7047
  decorationColorToken: themeColorTokenSchema.nullable().optional(),
6841
- underline: z16.boolean().optional()
7048
+ underline: z17.boolean().optional()
6842
7049
  });
6843
- var footerBottomBarSchema = z16.object({
6844
- enabled: z16.boolean().optional(),
6845
- fullBleed: z16.boolean().optional(),
7050
+ var footerBottomBarSchema = z17.object({
7051
+ enabled: z17.boolean().optional(),
7052
+ fullBleed: z17.boolean().optional(),
6846
7053
  background: headerBackgroundSchema.optional(),
6847
7054
  textColor: themeColorTokenSchema.nullable().optional(),
6848
- textAlign: z16.enum(["left", "center", "right"]).optional(),
7055
+ textAlign: z17.enum(["left", "center", "right"]).optional(),
6849
7056
  paddingY: footerSpacing.optional(),
6850
7057
  paddingX: footerSpacing.optional(),
6851
- borderTop: z16.object({
7058
+ borderTop: z17.object({
6852
7059
  colorToken: themeColorTokenSchema.nullable().optional(),
6853
- width: z16.enum(["none", "thin", "medium", "thick"]).optional()
7060
+ width: z17.enum(["none", "thin", "medium", "thick"]).optional()
6854
7061
  }).optional()
6855
7062
  });
6856
- var footerNavLayoutSchema = z16.object({
7063
+ var footerNavLayoutSchema = z17.object({
6857
7064
  layout: footerNavLayoutMode.optional(),
6858
7065
  align: footerNavLayoutAlign.optional(),
6859
7066
  gapX: footerSpacing.optional(),
6860
7067
  gapY: footerSpacing.optional(),
6861
- columns: z16.number().int().min(1).max(6).optional()
7068
+ columns: z17.number().int().min(1).max(6).optional()
6862
7069
  });
6863
- var footerLogoSchema = z16.object({
6864
- showLogo: z16.boolean().default(true),
6865
- showLogoText: z16.boolean().optional(),
7070
+ var footerLogoSchema = z17.object({
7071
+ showLogo: z17.boolean().default(true),
7072
+ showLogoText: z17.boolean().optional(),
6866
7073
  placement: footerLogoPlacement.optional(),
6867
7074
  size: footerLogoSize.optional(),
6868
7075
  maxHeight: footerLogoMaxHeight.optional(),
6869
- align: z16.enum(["start", "center", "end"]).optional()
7076
+ align: z17.enum(["start", "center", "end"]).optional()
6870
7077
  });
6871
- var footerSchema = z16.object({
7078
+ var footerSchema = z17.object({
6872
7079
  /**
6873
7080
  * SDK-only footer rendering mode.
6874
7081
  *
@@ -6877,7 +7084,7 @@ var footerSchema = z16.object({
6877
7084
  mode: footerMode.optional(),
6878
7085
  variant: footerVariant,
6879
7086
  maxWidth: footerMaxWidth,
6880
- showLogoText: z16.boolean().optional(),
7087
+ showLogoText: z17.boolean().optional(),
6881
7088
  background: headerBackgroundSchema.default({
6882
7089
  type: "color",
6883
7090
  color: "surface"
@@ -6895,20 +7102,20 @@ var footerSchema = z16.object({
6895
7102
  logo: footerLogoSchema.optional(),
6896
7103
  bottomBar: footerBottomBarSchema.optional()
6897
7104
  });
6898
- var containerPaddingPresetSchema = z16.enum([
7105
+ var containerPaddingPresetSchema = z17.enum([
6899
7106
  "tight",
6900
7107
  "compact",
6901
7108
  "default",
6902
7109
  "relaxed"
6903
7110
  ]);
6904
- var layoutSchema = z16.object({
6905
- containerPadding: z16.object({
7111
+ var layoutSchema = z17.object({
7112
+ containerPadding: z17.object({
6906
7113
  mobile: containerPaddingPresetSchema.optional(),
6907
7114
  tablet: containerPaddingPresetSchema.optional(),
6908
7115
  desktop: containerPaddingPresetSchema.optional()
6909
7116
  }).optional()
6910
7117
  }).optional();
6911
- var heroTypographySizeSchema = z16.enum([
7118
+ var heroTypographySizeSchema = z17.enum([
6912
7119
  "sm",
6913
7120
  "base",
6914
7121
  "lg",
@@ -6920,19 +7127,19 @@ var heroTypographySizeSchema = z16.enum([
6920
7127
  "6xl",
6921
7128
  "editorial"
6922
7129
  ]);
6923
- var heroTypographyLineHeightSchema = z16.enum([
7130
+ var heroTypographyLineHeightSchema = z17.enum([
6924
7131
  "tight",
6925
7132
  "snug",
6926
7133
  "normal",
6927
7134
  "relaxed"
6928
7135
  ]);
6929
- var heroResponsiveTypographySchema = z16.object({
7136
+ var heroResponsiveTypographySchema = z17.object({
6930
7137
  headlineSize: heroTypographySizeSchema.optional(),
6931
7138
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
6932
7139
  subheadlineSize: heroTypographySizeSchema.optional(),
6933
7140
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
6934
7141
  });
6935
- var heroTypographySchema = z16.object({
7142
+ var heroTypographySchema = z17.object({
6936
7143
  headlineSize: heroTypographySizeSchema.optional(),
6937
7144
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
6938
7145
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -6941,31 +7148,38 @@ var heroTypographySchema = z16.object({
6941
7148
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
6942
7149
  microSubheadlineSize: heroTypographySizeSchema.optional(),
6943
7150
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
6944
- responsive: z16.object({
7151
+ responsive: z17.object({
6945
7152
  tablet: heroResponsiveTypographySchema.optional(),
6946
7153
  mobile: heroResponsiveTypographySchema.optional()
6947
7154
  }).optional()
6948
7155
  });
6949
- var heroSchema = z16.object({
7156
+ var heroSchema = z17.object({
6950
7157
  typography: heroTypographySchema.optional()
6951
7158
  }).optional();
6952
- var bodyTextIntroTypographySizeSchema = z16.enum(["default", "editorial"]);
6953
- var bodyTextSchema = z16.object({
6954
- intro: z16.object({
7159
+ var bodyTextIntroTypographySizeSchema = z17.enum(["default", "editorial"]);
7160
+ var bodyTextSchema = z17.object({
7161
+ intro: z17.object({
6955
7162
  paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
6956
7163
  headingSize: bodyTextIntroTypographySizeSchema.optional()
6957
7164
  }).optional()
6958
7165
  }).optional();
6959
- var gradientsSchema = z16.object({
6960
- button: z16.string().min(1).nullable().optional(),
6961
- hero: z16.string().min(1).nullable().optional(),
6962
- background: z16.string().min(1).nullable().optional()
7166
+ var gradientsSchema = z17.object({
7167
+ button: z17.string().min(1).nullable().optional(),
7168
+ hero: z17.string().min(1).nullable().optional(),
7169
+ background: z17.string().min(1).nullable().optional()
7170
+ });
7171
+ var testimonialQuoteTreatmentSchema = z17.object({
7172
+ style: z17.enum(["serif-display", "accent-glyph", "none"]),
7173
+ fontFamily: z17.enum(["heading", "body"]).optional(),
7174
+ scale: z17.enum(["sm", "md", "lg", "xl"]).optional(),
7175
+ colorToken: themeColorTokenSchema.optional(),
7176
+ opacity: z17.number().min(0).max(1).optional()
6963
7177
  });
6964
- var themeSchema = z16.object({
6965
- name: z16.string().min(1).max(30),
6966
- description: z16.string().min(1).max(400),
6967
- rationale: z16.string().min(1).max(400),
6968
- siteStyleId: z16.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
7178
+ var themeSchema = z17.object({
7179
+ name: z17.string().min(1).max(30),
7180
+ description: z17.string().min(1).max(400),
7181
+ rationale: z17.string().min(1).max(400),
7182
+ siteStyleId: z17.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
6969
7183
  axes: axesSchema,
6970
7184
  palette: paletteSchema,
6971
7185
  typography: typographySchema,
@@ -6986,6 +7200,8 @@ var themeSchema = z16.object({
6986
7200
  // Card variant system (optional for backwards compatibility)
6987
7201
  accordions: accordionSystemSchema.optional(),
6988
7202
  // Accordion system (optional - generated if not provided)
7203
+ testimonialQuote: testimonialQuoteTreatmentSchema.optional(),
7204
+ // Testimonial quote-mark treatment (site-style-owned)
6989
7205
  inputs: inputSystemSchema.optional(),
6990
7206
  // Input system (optional - generated if not provided)
6991
7207
  inputStyle: inputStyle.optional(),
@@ -6993,15 +7209,19 @@ var themeSchema = z16.object({
6993
7209
  // Block-specific customization (Tier 3)
6994
7210
  // blockCustomVars: Per-block CSS variable overrides as bare values
6995
7211
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
6996
- blockCustomVars: z16.record(
6997
- z16.string(),
7212
+ blockCustomVars: z17.record(
7213
+ z17.string(),
6998
7214
  // block kind (matches data-block attribute)
6999
- z16.record(z16.string(), z16.string())
7215
+ z17.record(z17.string(), z17.string())
7000
7216
  // { '--var-name': 'value' }
7001
7217
  ).optional(),
7002
7218
  // Structured block-kind theme overrides (v1: typography prose-link style only)
7003
7219
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
7004
- blockOverrides: z16.record(z16.string(), blockThemeOverrideSchema).optional(),
7220
+ blockOverrides: z17.record(z17.string(), blockThemeOverrideSchema).optional(),
7221
+ // Site-wide heading decoration signature (family + colour). Set once per Look
7222
+ // and projected transiently onto eligible block headings at render time.
7223
+ // Alignment is inherited from the heading, so no placement is stored.
7224
+ headingDecoration: headingDecorationSchema.optional(),
7005
7225
  // Structured custom CSS rules
7006
7226
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
7007
7227
  customCssRules: customCssRulesSchema,
@@ -7035,11 +7255,11 @@ var themeSchema = z16.object({
7035
7255
  * }
7036
7256
  * ```
7037
7257
  */
7038
- styleGroups: z16.record(z16.string(), z16.array(z16.string())).optional()
7258
+ styleGroups: z17.record(z17.string(), z17.array(z17.string())).optional()
7039
7259
  });
7040
- var themesTurnSchema = z16.object({
7041
- message: z16.string().min(1),
7042
- themes: z16.array(themeSchema).length(3)
7260
+ var themesTurnSchema = z17.object({
7261
+ message: z17.string().min(1),
7262
+ themes: z17.array(themeSchema).length(3)
7043
7263
  });
7044
7264
 
7045
7265
  // ../theme-core/src/palette/variants/types.ts
@@ -7049,19 +7269,19 @@ function asPaletteVariantId(value) {
7049
7269
  }
7050
7270
  return value;
7051
7271
  }
7052
- var paletteVariantIdSchema = z17.string().min(1).transform((value) => asPaletteVariantId(value));
7272
+ var paletteVariantIdSchema = z18.string().min(1).transform((value) => asPaletteVariantId(value));
7053
7273
  var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
7054
- var hexColorSchema = z17.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
7274
+ var hexColorSchema = z18.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
7055
7275
  var variantPaletteColorSchema = paletteColorSchema.extend({
7056
7276
  name: paletteTokenNameSchema
7057
7277
  });
7058
- var paletteVariantSchema = z17.object({
7278
+ var paletteVariantSchema = z18.object({
7059
7279
  id: paletteVariantIdSchema,
7060
- name: z17.string().min(1),
7061
- description: z17.string().min(1),
7280
+ name: z18.string().min(1),
7281
+ description: z18.string().min(1),
7062
7282
  tags: styleTagsSchema,
7063
- mode: z17.enum(["light", "dark"]),
7064
- colors: z17.array(variantPaletteColorSchema).min(1)
7283
+ mode: z18.enum(["light", "dark"]),
7284
+ colors: z18.array(variantPaletteColorSchema).min(1)
7065
7285
  });
7066
7286
  function definePaletteVariant(input) {
7067
7287
  return {
@@ -7073,7 +7293,7 @@ function definePaletteVariant(input) {
7073
7293
  colors: input.colors
7074
7294
  };
7075
7295
  }
7076
- var paletteOverridesSchema = z17.object({
7296
+ var paletteOverridesSchema = z18.object({
7077
7297
  primary: hexColorSchema.optional(),
7078
7298
  primaryForeground: hexColorSchema.optional(),
7079
7299
  secondary: hexColorSchema.optional(),
@@ -7314,6 +7534,28 @@ var softNaturalWatercolor = definePaletteVariant({
7314
7534
  { name: "border", hex: "#d8c9a8" }
7315
7535
  ]
7316
7536
  });
7537
+ var softNaturalLilac = definePaletteVariant({
7538
+ id: "soft-natural-lilac",
7539
+ name: "Soft Natural \u2014 Lilac",
7540
+ description: "Watercolour periwinkle-lilac primary with warm ivory grounds and a sage accent.",
7541
+ tags: { tone: "classic", energy: "calm", era: "organic" },
7542
+ mode: "light",
7543
+ colors: [
7544
+ { name: "primary", hex: "#5c68a8" },
7545
+ { name: "secondary", hex: "#8189ad" },
7546
+ { name: "accent", hex: "#75835a" },
7547
+ { name: "success", hex: "#5f7d62" },
7548
+ { name: "warning", hex: "#a8884f" },
7549
+ { name: "destructive", hex: "#a3503e" },
7550
+ { name: "background", hex: "#faf9f6" },
7551
+ { name: "surface", hex: "#ffffff" },
7552
+ { name: "surfaceAlt", hex: "#f1f0f7" },
7553
+ { name: "muted", hex: "#e9e8f2" },
7554
+ { name: "text", hex: "#262633" },
7555
+ { name: "primaryForeground", hex: "#ffffff" },
7556
+ { name: "border", hex: "#d6d5e3" }
7557
+ ]
7558
+ });
7317
7559
 
7318
7560
  // ../theme-core/src/palette/variants/warm-neutral.ts
7319
7561
  var warmNeutralClay = definePaletteVariant({
@@ -7424,13 +7666,190 @@ var paletteVariants = [
7424
7666
  // Soft-natural family
7425
7667
  softNaturalSage,
7426
7668
  softNaturalStone,
7427
- softNaturalWatercolor
7669
+ softNaturalWatercolor,
7670
+ softNaturalLilac
7428
7671
  ];
7429
7672
  var paletteVariantsById = new Map(
7430
7673
  paletteVariants.map((v) => [v.id, v])
7431
7674
  );
7432
7675
 
7433
7676
  // ../theme-core/src/accordions/siteStyleDefaults.ts
7677
+ var editorialDividedAccordionSystem = {
7678
+ background: null,
7679
+ spacing: "comfortable",
7680
+ corners: "square",
7681
+ border: null,
7682
+ shadow: null,
7683
+ icon: {
7684
+ style: "plus-minus",
7685
+ position: "right",
7686
+ size: "md",
7687
+ colorToken: "primary"
7688
+ },
7689
+ trigger: {
7690
+ textColorToken: "text",
7691
+ fontWeight: "regular",
7692
+ fontFamily: "heading",
7693
+ fontScale: "lg"
7694
+ },
7695
+ hover: {
7696
+ textColorToken: "primary"
7697
+ },
7698
+ openState: {
7699
+ backgroundColorToken: "surfaceAlt",
7700
+ triggerColorToken: "primary",
7701
+ accent: {
7702
+ edge: "left",
7703
+ colorToken: "primary",
7704
+ thickness: "medium"
7705
+ }
7706
+ },
7707
+ content: {
7708
+ textColorToken: "neutral-700"
7709
+ }
7710
+ };
7711
+ var quietUnderlinedAccordionSystem = {
7712
+ background: null,
7713
+ spacing: "spacious",
7714
+ corners: "square",
7715
+ border: null,
7716
+ shadow: null,
7717
+ icon: {
7718
+ style: "chevron",
7719
+ position: "right",
7720
+ size: "sm",
7721
+ colorToken: "muted"
7722
+ },
7723
+ trigger: {
7724
+ textColorToken: "text",
7725
+ fontWeight: "regular",
7726
+ fontFamily: "heading",
7727
+ fontScale: "lg"
7728
+ },
7729
+ hover: {
7730
+ textColorToken: "primary"
7731
+ },
7732
+ openState: {
7733
+ triggerColorToken: "primary"
7734
+ },
7735
+ content: {
7736
+ textColorToken: "neutral-700"
7737
+ }
7738
+ };
7739
+ var calmPanelAccordionSystem = {
7740
+ background: {
7741
+ type: "solid",
7742
+ colorToken: "surface"
7743
+ },
7744
+ spacing: "comfortable",
7745
+ corners: "soft",
7746
+ border: {
7747
+ widthClass: "border",
7748
+ colorToken: "border"
7749
+ },
7750
+ shadow: {
7751
+ elevation: "low",
7752
+ softness: "soft",
7753
+ position: "bottom"
7754
+ },
7755
+ icon: {
7756
+ style: "chevron",
7757
+ position: "right",
7758
+ size: "md",
7759
+ colorToken: "primary"
7760
+ },
7761
+ trigger: {
7762
+ textColorToken: "text",
7763
+ fontWeight: "medium",
7764
+ fontFamily: "heading",
7765
+ fontScale: "md"
7766
+ },
7767
+ hover: {
7768
+ backgroundColorToken: "primary/5",
7769
+ textColorToken: "primary"
7770
+ },
7771
+ openState: {
7772
+ backgroundColorToken: "primary/5",
7773
+ triggerColorToken: "primary"
7774
+ },
7775
+ content: {
7776
+ textColorToken: "neutral-700"
7777
+ }
7778
+ };
7779
+ var boldBorderedAccordionSystem = {
7780
+ background: {
7781
+ type: "solid",
7782
+ colorToken: "surface"
7783
+ },
7784
+ spacing: "comfortable",
7785
+ corners: "soft",
7786
+ border: {
7787
+ widthClass: "border-2",
7788
+ colorToken: "border"
7789
+ },
7790
+ shadow: null,
7791
+ icon: {
7792
+ style: "plus-minus",
7793
+ position: "right",
7794
+ size: "lg",
7795
+ colorToken: "primary"
7796
+ },
7797
+ trigger: {
7798
+ textColorToken: "text",
7799
+ fontWeight: "bold",
7800
+ fontFamily: "heading",
7801
+ fontScale: "md"
7802
+ },
7803
+ hover: {
7804
+ backgroundColorToken: "primary/10",
7805
+ textColorToken: "primary"
7806
+ },
7807
+ openState: {
7808
+ backgroundColorToken: "primary/10",
7809
+ triggerColorToken: "primary",
7810
+ accent: {
7811
+ edge: "left",
7812
+ colorToken: "primary",
7813
+ thickness: "thick"
7814
+ }
7815
+ },
7816
+ content: {
7817
+ textColorToken: "neutral-700"
7818
+ }
7819
+ };
7820
+ var warmInsetAccordionSystem = {
7821
+ background: {
7822
+ type: "solid",
7823
+ colorToken: "surfaceAlt"
7824
+ },
7825
+ spacing: "comfortable",
7826
+ corners: "rounded",
7827
+ border: null,
7828
+ shadow: null,
7829
+ icon: {
7830
+ style: "circle-plus-minus",
7831
+ position: "right",
7832
+ size: "md",
7833
+ colorToken: "primary"
7834
+ },
7835
+ trigger: {
7836
+ textColorToken: "text",
7837
+ fontWeight: "semibold",
7838
+ fontFamily: "heading",
7839
+ fontScale: "md"
7840
+ },
7841
+ hover: {
7842
+ backgroundColorToken: "primary/5",
7843
+ textColorToken: "primary"
7844
+ },
7845
+ openState: {
7846
+ backgroundColorToken: "surface",
7847
+ triggerColorToken: "primary"
7848
+ },
7849
+ content: {
7850
+ textColorToken: "neutral-700"
7851
+ }
7852
+ };
7434
7853
  var softEarthAccordionSystem = {
7435
7854
  background: {
7436
7855
  type: "solid",
@@ -7448,16 +7867,96 @@ var softEarthAccordionSystem = {
7448
7867
  },
7449
7868
  trigger: {
7450
7869
  textColorToken: "text",
7451
- fontWeight: "medium"
7870
+ fontWeight: "medium",
7871
+ fontFamily: "heading",
7872
+ fontScale: "md"
7452
7873
  },
7453
7874
  hover: {
7454
7875
  textColorToken: "primary"
7455
7876
  },
7877
+ openState: {
7878
+ triggerColorToken: "primary"
7879
+ },
7456
7880
  content: {
7457
7881
  textColorToken: "neutral-700"
7458
7882
  }
7459
7883
  };
7460
7884
 
7885
+ // ../theme-core/src/cards/siteStyleDefaults.ts
7886
+ var southWestCardSystem = {
7887
+ variants: [
7888
+ {
7889
+ id: "default",
7890
+ name: "Default",
7891
+ enabled: true,
7892
+ priority: 1,
7893
+ background: { type: "solid", colorToken: "surface" },
7894
+ foregroundToken: "text",
7895
+ spacing: "comfortable",
7896
+ corners: "soft",
7897
+ shadow: { elevation: "low", softness: "soft", position: "bottom" }
7898
+ },
7899
+ {
7900
+ id: "alternative",
7901
+ name: "Statement",
7902
+ enabled: true,
7903
+ priority: 2,
7904
+ background: { type: "solid", colorToken: "primary-700" },
7905
+ foregroundToken: "primaryForeground",
7906
+ spacing: "comfortable",
7907
+ // No shadow on the variant itself: the elevation comes from the look's
7908
+ // 'raised' item surface (rb-shadow-md = var(--shadow-md)), reproducing the
7909
+ // legacy accent-quote card's shadow exactly.
7910
+ shadow: { elevation: "none", softness: null, position: "bottom" },
7911
+ accentEdge: { edge: "left", colorToken: "secondary", width: "heavy" },
7912
+ cornerRadii: {
7913
+ topLeft: "square",
7914
+ topRight: "expressive",
7915
+ bottomLeft: "square",
7916
+ bottomRight: "square"
7917
+ }
7918
+ }
7919
+ ]
7920
+ };
7921
+ var clarityZenCardSystem = {
7922
+ variants: [
7923
+ {
7924
+ id: "default",
7925
+ name: "Default",
7926
+ enabled: true,
7927
+ priority: 1,
7928
+ background: { type: "solid", colorToken: "surface" },
7929
+ // A filled card establishes its own text colour so it stays legible on a
7930
+ // coloured section band (which sets a contrasting section-text colour).
7931
+ foregroundToken: "text",
7932
+ spacing: "comfortable",
7933
+ corners: "rounded",
7934
+ shadow: { elevation: "low", softness: "soft", position: "bottom" }
7935
+ },
7936
+ {
7937
+ id: "alternative",
7938
+ name: "Statement",
7939
+ enabled: true,
7940
+ priority: 2,
7941
+ // Themed surfaceAlt tint + a touch more elevation so an emphasised
7942
+ // section reads as a deliberate "statement" against the default card.
7943
+ background: { type: "solid", colorToken: "surfaceAlt" },
7944
+ foregroundToken: "text",
7945
+ spacing: "comfortable",
7946
+ corners: "rounded",
7947
+ shadow: { elevation: "medium", softness: "soft", position: "bottom" }
7948
+ }
7949
+ ]
7950
+ };
7951
+
7952
+ // ../theme-core/src/site-styles/testimonialQuotePresets.ts
7953
+ var serifDisplayQuote = {
7954
+ style: "serif-display"
7955
+ };
7956
+ var accentGlyphQuote = {
7957
+ style: "accent-glyph"
7958
+ };
7959
+
7461
7960
  // ../theme-core/src/site-styles/headerLooks.ts
7462
7961
  function asHeaderLookId(value) {
7463
7962
  return value;
@@ -7468,6 +7967,89 @@ function asHeaderLayoutId(value) {
7468
7967
  function asHeaderStyleId(value) {
7469
7968
  return value;
7470
7969
  }
7970
+ var titleOnlyLogoAccommodation = {
7971
+ pattern: "title-only",
7972
+ supportedShapes: ["none", "horizontal", "square", "portrait", "tall"],
7973
+ supportedTextPresence: ["contains-text", "no-text", "unknown"],
7974
+ supportedDisplayModes: ["title-only"],
7975
+ size: "compact"
7976
+ };
7977
+ var inlineWordmarkLogoAccommodation = {
7978
+ pattern: "inline-wordmark",
7979
+ supportedShapes: ["horizontal"],
7980
+ supportedTextPresence: ["contains-text", "no-text", "unknown"],
7981
+ supportedDisplayModes: ["logo-only"],
7982
+ size: "standard",
7983
+ maxDensity: "detailed"
7984
+ };
7985
+ var inlineMarkWithTitleLogoAccommodation = {
7986
+ pattern: "inline-mark-with-title",
7987
+ supportedShapes: ["horizontal", "square", "portrait", "tall"],
7988
+ supportedTextPresence: ["no-text"],
7989
+ supportedDisplayModes: ["logo-plus-title"],
7990
+ size: "compact",
7991
+ maxDensity: "simple"
7992
+ };
7993
+ var logoPlateAccommodation = {
7994
+ pattern: "logo-plate",
7995
+ supportedShapes: ["square", "portrait", "tall"],
7996
+ supportedTextPresence: ["contains-text", "unknown"],
7997
+ supportedDisplayModes: ["logo-only"],
7998
+ size: "display",
7999
+ providesBacking: true
8000
+ };
8001
+ var centeredBadgeAccommodation = {
8002
+ pattern: "centered-badge",
8003
+ supportedShapes: ["square", "portrait", "tall"],
8004
+ supportedTextPresence: ["contains-text", "unknown"],
8005
+ supportedDisplayModes: ["logo-only"],
8006
+ size: "display",
8007
+ providesBacking: true
8008
+ };
8009
+ var popoutBadgeAccommodation = {
8010
+ pattern: "popout-badge",
8011
+ supportedShapes: ["square", "portrait", "tall"],
8012
+ supportedTextPresence: ["contains-text", "unknown"],
8013
+ supportedDisplayModes: ["logo-only"],
8014
+ size: "display",
8015
+ providesBacking: true
8016
+ };
8017
+ var centeredMastheadAccommodation = {
8018
+ pattern: "centered-masthead",
8019
+ supportedShapes: ["square", "portrait", "tall"],
8020
+ supportedTextPresence: ["contains-text", "unknown"],
8021
+ supportedDisplayModes: ["logo-only"],
8022
+ size: "display",
8023
+ providesBacking: true
8024
+ };
8025
+ var unbackedOverlayLogoAccommodation = {
8026
+ pattern: "inline-logo-only",
8027
+ supportedShapes: ["square"],
8028
+ supportedTextPresence: ["contains-text", "unknown"],
8029
+ supportedDisplayModes: ["logo-only"],
8030
+ size: "compact",
8031
+ providesBacking: false
8032
+ };
8033
+ var inlineClassicLogoAccommodations = [
8034
+ titleOnlyLogoAccommodation,
8035
+ inlineWordmarkLogoAccommodation,
8036
+ inlineMarkWithTitleLogoAccommodation,
8037
+ popoutBadgeAccommodation,
8038
+ logoPlateAccommodation
8039
+ ];
8040
+ var centeredLogoAccommodations = [
8041
+ titleOnlyLogoAccommodation,
8042
+ inlineWordmarkLogoAccommodation,
8043
+ inlineMarkWithTitleLogoAccommodation,
8044
+ centeredMastheadAccommodation,
8045
+ centeredBadgeAccommodation
8046
+ ];
8047
+ var overlayLogoAccommodations = [
8048
+ titleOnlyLogoAccommodation,
8049
+ inlineWordmarkLogoAccommodation,
8050
+ inlineMarkWithTitleLogoAccommodation,
8051
+ unbackedOverlayLogoAccommodation
8052
+ ];
7471
8053
  function baseHeader(theme) {
7472
8054
  const {
7473
8055
  navLinkStyle: _navLinkStyle,
@@ -8137,6 +8719,7 @@ var headerLookCatalog = [
8137
8719
  behavior: "sticky"
8138
8720
  },
8139
8721
  openingRequirement: "none",
8722
+ logoAccommodations: inlineClassicLogoAccommodations,
8140
8723
  compile: cleanBaseHeader
8141
8724
  },
8142
8725
  {
@@ -8150,6 +8733,7 @@ var headerLookCatalog = [
8150
8733
  behavior: "sticky-shrink"
8151
8734
  },
8152
8735
  openingRequirement: "none",
8736
+ logoAccommodations: inlineClassicLogoAccommodations,
8153
8737
  compile: solidBrandHeader
8154
8738
  },
8155
8739
  {
@@ -8164,6 +8748,7 @@ var headerLookCatalog = [
8164
8748
  },
8165
8749
  openingRequirement: "none",
8166
8750
  maxRecommendedNavItems: 6,
8751
+ logoAccommodations: centeredLogoAccommodations,
8167
8752
  compile: serifLineHeader
8168
8753
  },
8169
8754
  {
@@ -8178,7 +8763,7 @@ var headerLookCatalog = [
8178
8763
  },
8179
8764
  openingRequirement: "none",
8180
8765
  maxRecommendedNavItems: 5,
8181
- allowedLogoShapes: ["none", "text-only", "horizontal", "square"],
8766
+ logoAccommodations: centeredLogoAccommodations,
8182
8767
  compile: centeredCalmHeader
8183
8768
  },
8184
8769
  {
@@ -8193,6 +8778,7 @@ var headerLookCatalog = [
8193
8778
  },
8194
8779
  openingRequirement: "none",
8195
8780
  requiresProminentCta: true,
8781
+ logoAccommodations: inlineClassicLogoAccommodations,
8196
8782
  compile: practicalUtilityHeader
8197
8783
  },
8198
8784
  {
@@ -8206,6 +8792,7 @@ var headerLookCatalog = [
8206
8792
  behavior: "normal-flow"
8207
8793
  },
8208
8794
  openingRequirement: "reserved-space-ok",
8795
+ logoAccommodations: inlineClassicLogoAccommodations,
8209
8796
  compile: minimalTransparentHeader
8210
8797
  },
8211
8798
  {
@@ -8220,7 +8807,7 @@ var headerLookCatalog = [
8220
8807
  },
8221
8808
  openingRequirement: "requires-image-hero-with-contrast-overlay",
8222
8809
  maxRecommendedNavItems: 5,
8223
- allowedLogoShapes: ["none", "text-only", "horizontal"],
8810
+ logoAccommodations: overlayLogoAccommodations,
8224
8811
  compile: transparentOverlayHeader
8225
8812
  },
8226
8813
  {
@@ -8235,7 +8822,7 @@ var headerLookCatalog = [
8235
8822
  },
8236
8823
  openingRequirement: "requires-image-hero-with-contrast-overlay",
8237
8824
  maxRecommendedNavItems: 5,
8238
- allowedLogoShapes: ["none", "text-only", "horizontal"],
8825
+ logoAccommodations: overlayLogoAccommodations,
8239
8826
  compile: floatingGlassHeader
8240
8827
  }
8241
8828
  ];
@@ -8316,12 +8903,110 @@ function brandTwoBandFooter(theme) {
8316
8903
  }
8317
8904
  };
8318
8905
  }
8906
+ function centeredCalmFooter(theme) {
8907
+ return {
8908
+ ...theme.footer,
8909
+ variant: "simple",
8910
+ maxWidth: "container",
8911
+ background: {
8912
+ type: "color",
8913
+ color: "surfaceAlt"
8914
+ },
8915
+ navStyle: "minimal",
8916
+ navWeight: "regular",
8917
+ navColor: "text",
8918
+ navLinkStyle: {
8919
+ typography: "body",
8920
+ fontWeight: "regular",
8921
+ textTransform: "none",
8922
+ italic: false,
8923
+ colorToken: "text",
8924
+ hoverColorToken: "primary",
8925
+ padding: "none",
8926
+ borderRadius: "none"
8927
+ },
8928
+ navLayout: {
8929
+ layout: "inline-wrap",
8930
+ align: "center",
8931
+ gapX: "relaxed",
8932
+ gapY: "tight"
8933
+ },
8934
+ logo: {
8935
+ showLogo: true,
8936
+ showLogoText: false,
8937
+ placement: "above",
8938
+ size: "sm",
8939
+ align: "center"
8940
+ },
8941
+ bottomBar: {
8942
+ enabled: true,
8943
+ fullBleed: false,
8944
+ textAlign: "center",
8945
+ paddingX: "default",
8946
+ paddingY: "compact",
8947
+ borderTop: {
8948
+ width: "thin"
8949
+ }
8950
+ }
8951
+ };
8952
+ }
8953
+ function editorialColumnsFooter(theme) {
8954
+ return {
8955
+ ...theme.footer,
8956
+ variant: "columns",
8957
+ maxWidth: "container",
8958
+ background: {
8959
+ type: "color",
8960
+ color: "surface"
8961
+ },
8962
+ navStyle: "minimal",
8963
+ navWeight: "regular",
8964
+ navColor: "text",
8965
+ navLinkStyle: {
8966
+ typography: "body",
8967
+ fontWeight: "regular",
8968
+ textTransform: "none",
8969
+ italic: false,
8970
+ colorToken: "text",
8971
+ hoverColorToken: "primary",
8972
+ padding: "none",
8973
+ borderRadius: "none"
8974
+ },
8975
+ logo: {
8976
+ showLogo: true,
8977
+ showLogoText: true,
8978
+ placement: "left",
8979
+ size: "sm",
8980
+ align: "start"
8981
+ },
8982
+ bottomBar: {
8983
+ enabled: true,
8984
+ fullBleed: false,
8985
+ textAlign: "center",
8986
+ paddingX: "default",
8987
+ paddingY: "compact",
8988
+ borderTop: {
8989
+ width: "thin"
8990
+ }
8991
+ }
8992
+ };
8993
+ }
8319
8994
  var footerLookCatalog = [
8320
8995
  {
8321
8996
  id: asFooterLookId("footer-muted-grounding"),
8322
8997
  label: "Muted grounding footer",
8323
8998
  compile: mutedGroundingFooter
8324
8999
  },
9000
+ {
9001
+ id: asFooterLookId("footer-centered-calm"),
9002
+ label: "Centered calm footer",
9003
+ compile: centeredCalmFooter
9004
+ },
9005
+ {
9006
+ id: asFooterLookId("footer-editorial-columns"),
9007
+ label: "Editorial columns footer",
9008
+ compile: editorialColumnsFooter
9009
+ },
8325
9010
  {
8326
9011
  id: asFooterLookId("site-footer-brand-two-band"),
8327
9012
  label: "Two-band brand footer",
@@ -8351,7 +9036,7 @@ var generatedDesignOptionCatalog = {
8351
9036
  source: "generated",
8352
9037
  sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
8353
9038
  contentFrames: generatedContentFrames,
8354
- itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
9039
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial"],
8355
9040
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
8356
9041
  emphases: ["low", "medium", "high"],
8357
9042
  detachedCustom: false
@@ -8360,11 +9045,7 @@ var userDesignOptionCatalog = {
8360
9045
  source: "user",
8361
9046
  sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
8362
9047
  contentFrames: userContentFrames,
8363
- itemSurfaces: [
8364
- ...generatedDesignOptionCatalog.itemSurfaces,
8365
- "inset",
8366
- "editorial"
8367
- ],
9048
+ itemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
8368
9049
  transitions: [
8369
9050
  ...generatedDesignOptionCatalog.transitions,
8370
9051
  "wave-edge",
@@ -8757,6 +9438,10 @@ function defineCuratedSiteStyle(input) {
8757
9438
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
8758
9439
  supportedTransitions: generatedDesignOptionCatalog.transitions
8759
9440
  },
9441
+ // Decoration is opt-in per style so it stays a distinguishing feature, not
9442
+ // wallpaper. Styles that want a mark set `headingDecoration` explicitly;
9443
+ // clean/minimal styles default to none.
9444
+ headingDecoration: input.headingDecoration ?? noHeadingDecoration,
8760
9445
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
8761
9446
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
8762
9447
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
@@ -8943,6 +9628,11 @@ var curatedSiteStyles = [
8943
9628
  defineCuratedSiteStyle({
8944
9629
  id: "site-style:calm-studio",
8945
9630
  name: "Calm Studio",
9631
+ themeOverrides: {
9632
+ accordions: calmPanelAccordionSystem,
9633
+ testimonialQuote: serifDisplayQuote
9634
+ },
9635
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
8946
9636
  description: "Soft, measured, and spacious for intimate appointment or class businesses.",
8947
9637
  generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
8948
9638
  tokenRecipes: {
@@ -8976,6 +9666,10 @@ var curatedSiteStyles = [
8976
9666
  defineCuratedSiteStyle({
8977
9667
  id: "site-style:clear-professional",
8978
9668
  name: "Clear Professional",
9669
+ themeOverrides: {
9670
+ accordions: calmPanelAccordionSystem,
9671
+ testimonialQuote: accentGlyphQuote
9672
+ },
8979
9673
  description: "Crisp, trustworthy, and direct for local services and consultancies.",
8980
9674
  generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
8981
9675
  tokenRecipes: {
@@ -9007,6 +9701,11 @@ var curatedSiteStyles = [
9007
9701
  defineCuratedSiteStyle({
9008
9702
  id: "site-style:warm-editorial",
9009
9703
  name: "Warm Editorial",
9704
+ themeOverrides: {
9705
+ accordions: editorialDividedAccordionSystem,
9706
+ testimonialQuote: serifDisplayQuote
9707
+ },
9708
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
9010
9709
  description: "Story-led and textured for educators, makers, venues, and retreats.",
9011
9710
  generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
9012
9711
  tokenRecipes: {
@@ -9039,6 +9738,11 @@ var curatedSiteStyles = [
9039
9738
  defineCuratedSiteStyle({
9040
9739
  id: "site-style:bright-community",
9041
9740
  name: "Bright Community",
9741
+ themeOverrides: {
9742
+ accordions: warmInsetAccordionSystem,
9743
+ testimonialQuote: accentGlyphQuote
9744
+ },
9745
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
9042
9746
  description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
9043
9747
  generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
9044
9748
  tokenRecipes: {
@@ -9070,6 +9774,10 @@ var curatedSiteStyles = [
9070
9774
  defineCuratedSiteStyle({
9071
9775
  id: "site-style:quiet-luxury",
9072
9776
  name: "Quiet Luxury",
9777
+ themeOverrides: {
9778
+ accordions: quietUnderlinedAccordionSystem,
9779
+ testimonialQuote: serifDisplayQuote
9780
+ },
9073
9781
  description: "Minimal, confident, and refined for premium experiences and private services.",
9074
9782
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
9075
9783
  siteCreatorSelection: {
@@ -9112,6 +9820,10 @@ var curatedSiteStyles = [
9112
9820
  defineCuratedSiteStyle({
9113
9821
  id: "site-style:practical-services",
9114
9822
  name: "Practical Services",
9823
+ themeOverrides: {
9824
+ accordions: boldBorderedAccordionSystem,
9825
+ testimonialQuote: accentGlyphQuote
9826
+ },
9115
9827
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
9116
9828
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
9117
9829
  siteCreatorSelection: { kind: "primary_goal_support" },
@@ -9152,6 +9864,11 @@ var curatedSiteStyles = [
9152
9864
  defineCuratedSiteStyle({
9153
9865
  id: "site-style:modern-wellness",
9154
9866
  name: "Modern Wellness",
9867
+ themeOverrides: {
9868
+ accordions: quietUnderlinedAccordionSystem,
9869
+ testimonialQuote: serifDisplayQuote
9870
+ },
9871
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
9155
9872
  description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
9156
9873
  generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
9157
9874
  tokenRecipes: {
@@ -9183,6 +9900,10 @@ var curatedSiteStyles = [
9183
9900
  defineCuratedSiteStyle({
9184
9901
  id: "site-style:quiet-practice",
9185
9902
  name: "Quiet Practice",
9903
+ themeOverrides: {
9904
+ accordions: quietUnderlinedAccordionSystem,
9905
+ testimonialQuote: serifDisplayQuote
9906
+ },
9186
9907
  description: "Grounded, calm, and practical for small appointment-first practices.",
9187
9908
  generationBrief: "Make services, practitioner trust, preparation notes, and booking routes easy to scan. Keep the tone warm and specific, with quiet confidence rather than spa cliches or medical claims.",
9188
9909
  siteCreatorSelection: {
@@ -9228,6 +9949,7 @@ var curatedSiteStyles = [
9228
9949
  defineCuratedSiteStyle({
9229
9950
  id: "site-style:clarity-zen-blue",
9230
9951
  name: "Clarity Zen",
9952
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
9231
9953
  description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
9232
9954
  generationBrief: "Use a calm, soft palette, editorial serif headings, warm grounded copy, rounded cards, calm proof sections, and clear booking routes. Keep the tone compassionate and straightforward, with professional trust rather than hard-sell wellness language.",
9233
9955
  siteCreatorSelection: {
@@ -9251,17 +9973,22 @@ var curatedSiteStyles = [
9251
9973
  },
9252
9974
  compositionBudget: balancedBudget,
9253
9975
  themeOverrides: {
9976
+ accordions: editorialDividedAccordionSystem,
9977
+ cards: clarityZenCardSystem,
9978
+ testimonialQuote: serifDisplayQuote,
9254
9979
  typography: {
9255
9980
  body: {
9256
- family: "Inter, system-ui, sans-serif",
9981
+ family: "Roboto, system-ui, sans-serif",
9257
9982
  size: "md",
9258
9983
  weight: "regular",
9259
9984
  lineHeight: "relaxed",
9260
9985
  letterSpacing: "normal"
9261
9986
  },
9262
9987
  headings: {
9988
+ // Forum ships a single 400 weight; keep every heading weight
9989
+ // 'regular' so the Google Fonts request stays valid.
9263
9990
  default: {
9264
- family: '"Cormorant Garamond", Georgia, serif',
9991
+ family: "Forum, Georgia, serif",
9265
9992
  weight: "regular",
9266
9993
  lineHeight: "normal",
9267
9994
  letterSpacing: "normal",
@@ -9277,7 +10004,7 @@ var curatedSiteStyles = [
9277
10004
  italic: null
9278
10005
  },
9279
10006
  h2: {
9280
- size: "lg",
10007
+ size: "xl",
9281
10008
  weight: "regular",
9282
10009
  lineHeight: "normal",
9283
10010
  letterSpacing: "normal",
@@ -9305,10 +10032,13 @@ var curatedSiteStyles = [
9305
10032
  },
9306
10033
  recommendedAppearancePresetIds: [
9307
10034
  "hero-split-editorial",
10035
+ "intro-portrait-bio",
9308
10036
  "intro-organic-statement",
9309
- "feature-cards-raised-rule",
10037
+ "feature-cards-soft-panels",
10038
+ "feature-cards-editorial-columns",
10039
+ "feature-cards-photo-tiles",
9310
10040
  "media-text-quiet-story",
9311
- "testimonials-brand-background-quotes",
10041
+ "testimonials-non-carded",
9312
10042
  "faq-contained-help",
9313
10043
  "contact-form-panel"
9314
10044
  ],
@@ -9318,8 +10048,9 @@ var curatedSiteStyles = [
9318
10048
  "minimal-transparent"
9319
10049
  ],
9320
10050
  recommendedFooterLookIds: [
9321
- "footer-muted-grounding",
9322
- "site-footer-brand-two-band"
10051
+ "footer-centered-calm",
10052
+ "footer-editorial-columns",
10053
+ "footer-muted-grounding"
9323
10054
  ],
9324
10055
  buttonPersonalityChoices: [
9325
10056
  buttonChoice("soft-pill"),
@@ -9327,7 +10058,7 @@ var curatedSiteStyles = [
9327
10058
  buttonChoice("editorial-link")
9328
10059
  ],
9329
10060
  paletteVariantChoices: [
9330
- paletteChoice("brand-led-cool"),
10061
+ paletteChoice("soft-natural-lilac"),
9331
10062
  paletteChoice("soft-natural-watercolor"),
9332
10063
  paletteChoice("soft-natural-stone"),
9333
10064
  paletteChoice("warm-neutral-cream")
@@ -9336,6 +10067,11 @@ var curatedSiteStyles = [
9336
10067
  defineCuratedSiteStyle({
9337
10068
  id: "site-style:personal-retreat-journal",
9338
10069
  name: "Personal Retreat Journal",
10070
+ themeOverrides: {
10071
+ accordions: editorialDividedAccordionSystem,
10072
+ testimonialQuote: serifDisplayQuote
10073
+ },
10074
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
9339
10075
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
9340
10076
  generationBrief: "Center the practitioner as the guide, then make private sessions, classes, retreats, and resources feel like clear pathways. Keep retreat copy grounded and practical, with enough editorial warmth for longer reading.",
9341
10077
  siteCreatorSelection: {
@@ -9380,6 +10116,11 @@ var curatedSiteStyles = [
9380
10116
  defineCuratedSiteStyle({
9381
10117
  id: "site-style:tactile-workshop",
9382
10118
  name: "Tactile Workshop",
10119
+ themeOverrides: {
10120
+ accordions: warmInsetAccordionSystem,
10121
+ testimonialQuote: accentGlyphQuote
10122
+ },
10123
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
9383
10124
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
9384
10125
  generationBrief: "Lead with objects, materials, studio process, and practical booking detail. Keep the tone warm and direct, with useful mess, clear dates, and enough gallery rhythm to feel like a real creative studio.",
9385
10126
  siteCreatorSelection: {
@@ -9430,6 +10171,7 @@ var curatedSiteStyles = [
9430
10171
  defineCuratedSiteStyle({
9431
10172
  id: SOFT_EARTH_SITE_STYLE_ID,
9432
10173
  name: "Soft Earth",
10174
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
9433
10175
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
9434
10176
  generationBrief: "Use cream space, terracotta CTAs, olive quote bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community quotes, and an FAQ with a full-width intro above two columns of questions when content allows.",
9435
10177
  siteCreatorSelection: {
@@ -9502,7 +10244,8 @@ var curatedSiteStyles = [
9502
10244
  headingSize: "editorial"
9503
10245
  }
9504
10246
  },
9505
- accordions: softEarthAccordionSystem
10247
+ accordions: softEarthAccordionSystem,
10248
+ testimonialQuote: accentGlyphQuote
9506
10249
  },
9507
10250
  defaultBlockVariants: {
9508
10251
  "block.faq": "question-columns"
@@ -9512,7 +10255,7 @@ var curatedSiteStyles = [
9512
10255
  "intro-organic-statement",
9513
10256
  "feature-cards-raised-rule",
9514
10257
  "events-lined-panel",
9515
- "testimonials-brand-background-quotes",
10258
+ "testimonials-non-carded",
9516
10259
  "contact-form-panel"
9517
10260
  ],
9518
10261
  recommendedHeaderLookIds: [
@@ -9540,6 +10283,11 @@ var curatedSiteStyles = [
9540
10283
  defineCuratedSiteStyle({
9541
10284
  id: "site-style:bold-launch",
9542
10285
  name: "Bold Launch",
10286
+ themeOverrides: {
10287
+ accordions: boldBorderedAccordionSystem,
10288
+ testimonialQuote: accentGlyphQuote
10289
+ },
10290
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
9543
10291
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
9544
10292
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
9545
10293
  siteCreatorSelection: {
@@ -9585,6 +10333,7 @@ var curatedSiteStyles = [
9585
10333
  defineCuratedSiteStyle({
9586
10334
  id: "site-style:south-west-twerk-school",
9587
10335
  name: "South West Twerk School",
10336
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
9588
10337
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
9589
10338
  generationBrief: "Use confident rhythm, bold burgundy-and-gold accents, large editorial intro copy, strong booking routes, and dark feature sections where proof or forms need emphasis.",
9590
10339
  tokenRecipes: {
@@ -9604,6 +10353,9 @@ var curatedSiteStyles = [
9604
10353
  ],
9605
10354
  defaultTypographyPresetId: "typography-preset:bold-display",
9606
10355
  themeOverrides: {
10356
+ accordions: boldBorderedAccordionSystem,
10357
+ cards: southWestCardSystem,
10358
+ testimonialQuote: accentGlyphQuote,
9607
10359
  bodyText: {
9608
10360
  intro: {
9609
10361
  paragraphSize: "editorial",
@@ -9616,7 +10368,7 @@ var curatedSiteStyles = [
9616
10368
  "hero-brand-scrim-fixed-frame",
9617
10369
  "body-text-editorial-intro",
9618
10370
  "schedule-details-brand-depth",
9619
- "testimonials-accent-quote-cards",
10371
+ "testimonials-statement-cards",
9620
10372
  "contact-form-brand-depth-card"
9621
10373
  ],
9622
10374
  recommendedHeaderLookIds: [
@@ -13848,14 +14600,77 @@ ${root} {
13848
14600
  }
13849
14601
 
13850
14602
  // ../theme-core/src/blocks/vars/testimonials.ts
13851
- function generateTestimonialsVars({ themeId }) {
14603
+ var QUOTE_SCALE_SIZE = {
14604
+ sm: "2.5rem",
14605
+ md: "3.5rem",
14606
+ // 4.375rem == 3.5rem * 1.25, matching the legacy accent-quote mark size.
14607
+ lg: "4.375rem",
14608
+ xl: "clamp(3.5rem, 2rem + 4vw, 5.5rem)"
14609
+ };
14610
+ function resolveTestimonialQuoteVars(treatment) {
14611
+ if (!treatment) {
14612
+ return {
14613
+ size: QUOTE_SCALE_SIZE.md,
14614
+ opacity: "0.08",
14615
+ color: "rgb(var(--tb-primary))",
14616
+ font: "inherit",
14617
+ weight: "700",
14618
+ display: "block"
14619
+ };
14620
+ }
14621
+ if (treatment.style === "none") {
14622
+ return {
14623
+ size: QUOTE_SCALE_SIZE.md,
14624
+ opacity: "0",
14625
+ color: "rgb(var(--tb-primary))",
14626
+ font: "inherit",
14627
+ weight: "700",
14628
+ display: "none"
14629
+ };
14630
+ }
14631
+ const base = treatment.style === "serif-display" ? {
14632
+ fontFamily: "heading",
14633
+ scale: "xl",
14634
+ colorToken: "primary",
14635
+ opacity: 1
14636
+ } : {
14637
+ // accent-glyph
14638
+ fontFamily: "body",
14639
+ scale: "lg",
14640
+ colorToken: "secondary",
14641
+ opacity: 1
14642
+ };
14643
+ const fontFamily = treatment.fontFamily ?? base.fontFamily;
14644
+ const scale = treatment.scale ?? base.scale;
14645
+ const colorToken = treatment.colorToken ?? base.colorToken;
14646
+ const opacity = treatment.opacity ?? base.opacity;
14647
+ return {
14648
+ size: QUOTE_SCALE_SIZE[scale],
14649
+ opacity: String(opacity),
14650
+ color: rgbColorValue(colorToken),
14651
+ font: fontFamily === "heading" ? "var(--font-heading)" : "var(--font-body, inherit)",
14652
+ // Heading-font display marks render at the family's natural weight (Forum
14653
+ // ships a single 400) to avoid synthetic bold; glyph marks stay heavy.
14654
+ weight: fontFamily === "heading" ? "400" : "700",
14655
+ display: "block"
14656
+ };
14657
+ }
14658
+ function generateTestimonialsVars({
14659
+ themeId,
14660
+ theme
14661
+ }) {
13852
14662
  const root = `:where([data-theme-scope="${themeId}"]) :where([data-block="testimonials"])`;
14663
+ const quote = resolveTestimonialQuoteVars(theme.testimonialQuote);
13853
14664
  return `
13854
14665
  ${root} {
13855
14666
  --rb-testimonial-avatar-size: 3rem;
13856
14667
  --rb-testimonial-avatar-border-radius: 9999px;
13857
- --rb-testimonial-quote-size: 3.5rem;
13858
- --rb-testimonial-quote-opacity: 0.08;
14668
+ --rb-testimonial-quote-size: ${quote.size};
14669
+ --rb-testimonial-quote-opacity: ${quote.opacity};
14670
+ --rb-testimonial-quote-color: ${quote.color};
14671
+ --rb-testimonial-quote-font: ${quote.font};
14672
+ --rb-testimonial-quote-weight: ${quote.weight};
14673
+ --rb-testimonial-quote-display: ${quote.display};
13859
14674
 
13860
14675
  /* Carousel arrows (defaults: primary background + onPrimary icon) */
13861
14676
  --rb-testimonial-carousel-arrow-bg: rgb(var(--tb-primary));