@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
@@ -2,7 +2,7 @@
2
2
  import * as React2 from "react";
3
3
 
4
4
  // ../theme-core/src/schema.ts
5
- import { z as z16 } from "zod";
5
+ import { z as z17 } from "zod";
6
6
 
7
7
  // ../theme-core/src/lib/media.ts
8
8
  import z from "zod";
@@ -1221,8 +1221,15 @@ function getDefaultButtonVariants() {
1221
1221
 
1222
1222
  // ../theme-core/src/cards/types.ts
1223
1223
  import { z as z6 } from "zod";
1224
+ var cardVariantRoleValues = ["default", "alternative"];
1225
+ var boxlessCardVariantValue = "none";
1224
1226
  var cardSpacingSchema = z6.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
1225
1227
  var gradientDirectionSchema2 = z6.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
1228
+ var cardVariantRoleSchema = z6.enum(cardVariantRoleValues);
1229
+ var boxStylesCardVariantSchema = z6.enum([
1230
+ ...cardVariantRoleValues,
1231
+ boxlessCardVariantValue
1232
+ ]);
1226
1233
  var cardBackgroundSchema = z6.discriminatedUnion("type", [
1227
1234
  z6.object({ type: z6.literal("solid"), colorToken: themeColorTokenSchema }),
1228
1235
  z6.object({
@@ -1237,6 +1244,24 @@ var cardBorderSchema = z6.object({
1237
1244
  widthClass: z6.string(),
1238
1245
  colorToken: themeColorTokenSchema
1239
1246
  });
1247
+ var cardCornerValueSchema = z6.enum([
1248
+ "square",
1249
+ "soft",
1250
+ "rounded",
1251
+ "pill",
1252
+ "expressive"
1253
+ ]);
1254
+ var cardAccentEdgeSchema = z6.object({
1255
+ edge: z6.enum(["left", "top", "right", "bottom"]),
1256
+ colorToken: themeColorTokenSchema,
1257
+ width: z6.enum(["thin", "medium", "thick", "heavy"])
1258
+ });
1259
+ var cardCornerRadiiSchema = z6.object({
1260
+ topLeft: cardCornerValueSchema.optional(),
1261
+ topRight: cardCornerValueSchema.optional(),
1262
+ bottomLeft: cardCornerValueSchema.optional(),
1263
+ bottomRight: cardCornerValueSchema.optional()
1264
+ });
1240
1265
  var cardVariantSchema = z6.object({
1241
1266
  id: z6.string(),
1242
1267
  name: z6.string().min(1).max(20),
@@ -1245,6 +1270,8 @@ var cardVariantSchema = z6.object({
1245
1270
  // Appearance (token-based)
1246
1271
  background: cardBackgroundSchema,
1247
1272
  spacing: cardSpacingSchema,
1273
+ // Optional foreground (card text) color, for cards on a strong fill.
1274
+ foregroundToken: themeColorTokenSchema.optional(),
1248
1275
  // Optional overrides (uses theme defaults if not specified)
1249
1276
  shadow: z6.object({
1250
1277
  elevation: z6.enum(["none", "low", "medium", "high"]),
@@ -1252,8 +1279,12 @@ var cardVariantSchema = z6.object({
1252
1279
  position: z6.enum(["bottom", "bottom-right"]).default("bottom")
1253
1280
  }).optional(),
1254
1281
  corners: z6.enum(["square", "soft", "rounded", "pill"]).optional(),
1282
+ // Per-corner radius override; wins over `corners` when set.
1283
+ cornerRadii: cardCornerRadiiSchema.optional(),
1255
1284
  // Border (optional)
1256
- border: cardBorderSchema.optional()
1285
+ border: cardBorderSchema.optional(),
1286
+ // Single accent edge; replaces `border` when set.
1287
+ accentEdge: cardAccentEdgeSchema.optional()
1257
1288
  });
1258
1289
  var cardSystemSchema = z6.object({
1259
1290
  variants: z6.array(cardVariantSchema).min(1).max(3)
@@ -1272,6 +1303,33 @@ var BORDER_WIDTH_MAP3 = {
1272
1303
  medium: "2px",
1273
1304
  thick: "4px"
1274
1305
  };
1306
+ var PER_CORNER_RADIUS_MAP = {
1307
+ square: "0",
1308
+ soft: "0.5rem",
1309
+ rounded: "1rem",
1310
+ pill: "1.5rem",
1311
+ // A large block-radius multiple for expressive, asymmetric card corners.
1312
+ expressive: "calc(var(--rb-block-radius) * 3)"
1313
+ };
1314
+ var ACCENT_EDGE_WIDTH_MAP = {
1315
+ thin: "2px",
1316
+ medium: "3px",
1317
+ thick: "4px",
1318
+ heavy: "5px"
1319
+ };
1320
+ var ACCENT_EDGE_SIDE_MAP = {
1321
+ left: "border-left",
1322
+ top: "border-top",
1323
+ right: "border-right",
1324
+ bottom: "border-bottom"
1325
+ };
1326
+ function resolveCornerRadiiCss(cornerRadii, fallback) {
1327
+ const fallbackValue = CORNER_RADIUS_MAP3[fallback];
1328
+ const at = (value) => value ? PER_CORNER_RADIUS_MAP[value] : fallbackValue;
1329
+ return `${at(cornerRadii.topLeft)} ${at(cornerRadii.topRight)} ${at(
1330
+ cornerRadii.bottomRight
1331
+ )} ${at(cornerRadii.bottomLeft)}`;
1332
+ }
1275
1333
  var GRADIENT_DIRECTION_MAP4 = {
1276
1334
  "to-r": "to right",
1277
1335
  "to-l": "to left",
@@ -1319,11 +1377,25 @@ function generateVariantCss2(scopeId, variant, settings) {
1319
1377
  } else {
1320
1378
  containerRules.push("background: transparent");
1321
1379
  }
1322
- const borderWidth = variant.borderWidth ? BORDER_WIDTH_MAP3[variant.borderWidth] : variant.borderToken ? BORDER_WIDTH_MAP3[settings.borderWidth] : "0";
1323
- if (variant.borderToken && borderWidth !== "0") {
1324
- containerRules.push(`border: ${borderWidth} solid rgb(var(--tb-${variant.borderToken}))`);
1380
+ if (variant.foregroundToken) {
1381
+ containerRules.push(`color: rgb(var(--tb-${variant.foregroundToken}))`);
1325
1382
  }
1326
- containerRules.push(`border-radius: ${CORNER_RADIUS_MAP3[settings.corners]}`);
1383
+ if (variant.accentEdge) {
1384
+ const side = ACCENT_EDGE_SIDE_MAP[variant.accentEdge.edge];
1385
+ const width = ACCENT_EDGE_WIDTH_MAP[variant.accentEdge.width];
1386
+ containerRules.push("border: 0");
1387
+ containerRules.push(
1388
+ `${side}: ${width} solid rgb(var(--tb-${variant.accentEdge.colorToken}))`
1389
+ );
1390
+ } else {
1391
+ const borderWidth = variant.borderWidth ? BORDER_WIDTH_MAP3[variant.borderWidth] : variant.borderToken ? BORDER_WIDTH_MAP3[settings.borderWidth] : "0";
1392
+ if (variant.borderToken && borderWidth !== "0") {
1393
+ containerRules.push(`border: ${borderWidth} solid rgb(var(--tb-${variant.borderToken}))`);
1394
+ }
1395
+ }
1396
+ containerRules.push(
1397
+ `border-radius: ${variant.cornerRadii ? resolveCornerRadiiCss(variant.cornerRadii, settings.corners) : CORNER_RADIUS_MAP3[settings.corners]}`
1398
+ );
1327
1399
  if (settings.shadow !== "none") {
1328
1400
  containerRules.push(`box-shadow: ${SHADOW_VALUES2[settings.shadow]}`);
1329
1401
  }
@@ -1392,11 +1464,13 @@ var accordionIconSchema = z7.enum([
1392
1464
  // ⊕ becomes ⊖ (swap with fade)
1393
1465
  ]);
1394
1466
  var accordionSystemSchema = z7.object({
1395
- // Visual styling (solid color only - gradients can be added later if needed)
1467
+ // Visual styling (solid color only - gradients can be added later if needed).
1468
+ // null = no fill, so the accordion sits transparently on the section
1469
+ // surface (used by open, boxless "divided" looks).
1396
1470
  background: z7.object({
1397
1471
  type: z7.literal("solid"),
1398
1472
  colorToken: themeColorTokenSchema
1399
- }),
1473
+ }).nullable(),
1400
1474
  // Spacing (padding inside items)
1401
1475
  spacing: z7.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
1402
1476
  // Border radius (null = inherit from theme.corners)
@@ -1423,8 +1497,16 @@ var accordionSystemSchema = z7.object({
1423
1497
  // Trigger (question) styling
1424
1498
  trigger: z7.object({
1425
1499
  textColorToken: themeColorTokenSchema,
1426
- fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).nullable()
1500
+ fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).nullable(),
1427
1501
  // null = inherit from theme
1502
+ // Question typography. Defaults keep the historical body-font look; set
1503
+ // fontFamily 'heading' + a larger scale to give questions real presence.
1504
+ fontFamily: z7.enum(["body", "heading"]).optional(),
1505
+ // default 'body'
1506
+ fontScale: z7.enum(["body", "md", "lg"]).optional(),
1507
+ // default 'body'
1508
+ letterSpacing: z7.enum(["normal", "tight", "wide"]).optional(),
1509
+ textTransform: z7.enum(["none", "uppercase"]).optional()
1428
1510
  }),
1429
1511
  // Hover state styling
1430
1512
  hover: z7.object({
@@ -1432,6 +1514,17 @@ var accordionSystemSchema = z7.object({
1432
1514
  textColorToken: themeColorTokenSchema.optional(),
1433
1515
  borderColorToken: themeColorTokenSchema.optional()
1434
1516
  }),
1517
+ // Open-state emphasis: how an expanded item is visually rewarded. All
1518
+ // optional; omit for the historical "only the text recolors" behaviour.
1519
+ openState: z7.object({
1520
+ backgroundColorToken: themeColorTokenSchema.optional(),
1521
+ triggerColorToken: themeColorTokenSchema.optional(),
1522
+ accent: z7.object({
1523
+ edge: z7.enum(["left", "top", "bottom"]),
1524
+ colorToken: themeColorTokenSchema,
1525
+ thickness: z7.enum(["thin", "medium", "thick"])
1526
+ }).optional()
1527
+ }).optional(),
1435
1528
  // Content (answer) styling
1436
1529
  content: z7.object({
1437
1530
  textColorToken: themeColorTokenSchema
@@ -1837,14 +1930,8 @@ var visibleHeadingDecorationFamilyValues = [
1837
1930
  "organic-squiggle",
1838
1931
  "short-center-rule"
1839
1932
  ];
1840
- var visibleHeadingDecorationPlacementValues = [
1841
- "after-heading",
1842
- "between-heading-and-body",
1843
- "under-centered-heading"
1844
- ];
1845
1933
  var headingDecorationOverrideValues = [
1846
1934
  "site-default",
1847
- "on",
1848
1935
  "off"
1849
1936
  ];
1850
1937
  var headingDecorationColorTokenValues = [
@@ -1855,6 +1942,9 @@ var headingDecorationColorTokenValues = [
1855
1942
  "border",
1856
1943
  "muted"
1857
1944
  ];
1945
+ var noHeadingDecoration = {
1946
+ family: "none"
1947
+ };
1858
1948
  var accordionIconSetValues = [
1859
1949
  "plus",
1860
1950
  "chevron",
@@ -1875,79 +1965,219 @@ var accordionIconMotionValues = [
1875
1965
  "swap"
1876
1966
  ];
1877
1967
 
1878
- // ../theme-core/src/utils/tokenOrColor.ts
1968
+ // ../theme-core/src/site-styles/logoBranding.ts
1879
1969
  import { z as z15 } from "zod";
1880
- var tokenOrCssColorValueSchema = z15.string();
1970
+ var logoTextConfidenceValues = ["low", "medium", "high"];
1971
+ var logoAssetShapeValues = [
1972
+ "none",
1973
+ "horizontal",
1974
+ "square",
1975
+ "portrait",
1976
+ "tall"
1977
+ ];
1978
+ var logoKindValues = [
1979
+ "mark",
1980
+ "wordmark",
1981
+ "lockup",
1982
+ "badge",
1983
+ "stacked-wordmark",
1984
+ "unknown"
1985
+ ];
1986
+ var logoDensityValues = ["simple", "detailed", "unknown"];
1987
+ var logoContainsTextSchema = z15.discriminatedUnion("kind", [
1988
+ z15.object({
1989
+ kind: z15.literal("contains-text"),
1990
+ confidence: z15.enum(logoTextConfidenceValues),
1991
+ text: z15.string().trim().min(1).max(200).optional()
1992
+ }),
1993
+ z15.object({
1994
+ kind: z15.literal("no-text"),
1995
+ confidence: z15.enum(logoTextConfidenceValues)
1996
+ }),
1997
+ z15.object({
1998
+ kind: z15.literal("unknown"),
1999
+ reason: z15.enum([
2000
+ "analysis-unavailable",
2001
+ "unsupported-file",
2002
+ "low-confidence"
2003
+ ])
2004
+ })
2005
+ ]);
2006
+ var logoAnalysisSourceSchema = z15.discriminatedUnion("kind", [
2007
+ z15.object({ kind: z15.literal("none") }),
2008
+ z15.object({
2009
+ kind: z15.literal("deterministic"),
2010
+ reason: z15.enum(["dimensions", "fallback"])
2011
+ }),
2012
+ z15.object({
2013
+ kind: z15.literal("llm"),
2014
+ model: z15.literal("gpt-5.4-mini"),
2015
+ analyzedAt: z15.string().trim().min(1).max(80).optional()
2016
+ }),
2017
+ z15.object({ kind: z15.literal("manual-override") })
2018
+ ]);
2019
+ var logoFactsSchema = z15.object({
2020
+ shape: z15.enum(logoAssetShapeValues),
2021
+ containsText: logoContainsTextSchema,
2022
+ kind: z15.enum(logoKindValues),
2023
+ density: z15.enum(logoDensityValues),
2024
+ source: logoAnalysisSourceSchema
2025
+ });
2026
+ var brandDisplayModeValues = [
2027
+ "auto",
2028
+ "logo-only",
2029
+ "logo-plus-title",
2030
+ "title-only"
2031
+ ];
2032
+ var logoAccommodationPatternValues = [
2033
+ "title-only",
2034
+ "inline-logo-only",
2035
+ "inline-wordmark",
2036
+ "inline-mark-with-title",
2037
+ "logo-plate",
2038
+ "centered-badge",
2039
+ "popout-badge",
2040
+ "centered-masthead",
2041
+ "hero-badge"
2042
+ ];
2043
+ var logoSizePolicyValues = [
2044
+ "auto",
2045
+ "compact",
2046
+ "standard",
2047
+ "generous",
2048
+ "display"
2049
+ ];
2050
+
2051
+ // ../theme-core/src/site-styles/rawStyleFields.ts
2052
+ var themeV2RuntimeStyleFieldNames = [
2053
+ "_frameStyles",
2054
+ "_sectionStyles",
2055
+ "_containerStyles",
2056
+ "_cardStyles",
2057
+ // styleGroup is legacy runtime transition wiring rather than a nested
2058
+ // override object, but normal editors should still never see it directly.
2059
+ "styleGroup"
2060
+ ];
2061
+ var themeV2BlockSpecificRawStyleFieldNames = [
2062
+ "_contentCardStyles",
2063
+ "_heroLayoutStyles",
2064
+ "_textCardStyles"
2065
+ ];
2066
+ var themeV2NormalEditorRawStyleFieldNames = [
2067
+ ...themeV2RuntimeStyleFieldNames,
2068
+ ...themeV2BlockSpecificRawStyleFieldNames
2069
+ ];
2070
+ var themeV2NormalEditorRawStyleFieldNameSet = new Set(
2071
+ themeV2NormalEditorRawStyleFieldNames
2072
+ );
2073
+ var themeV2CompilerOwnedFieldNames = [
2074
+ ...themeV2RuntimeStyleFieldNames,
2075
+ ...themeV2BlockSpecificRawStyleFieldNames
2076
+ ];
2077
+ var pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
2078
+
2079
+ // ../theme-core/src/utils/tokenOrColor.ts
2080
+ import { z as z16 } from "zod";
2081
+
2082
+ // ../theme-core/src/utils/colorStyles.ts
2083
+ var COLOR_VAR_PREFIX = "--tb-";
2084
+ function parseToken(source) {
2085
+ const parts = parseColorTokenParts(source);
2086
+ if (parts.kind === "raw") {
2087
+ return { token: source, raw: parts.value };
2088
+ }
2089
+ if (parts.kind === "invalid") {
2090
+ return { token: source };
2091
+ }
2092
+ return {
2093
+ token: parts.token,
2094
+ alpha: parts.opacityPercent === null ? void 0 : parts.opacityPercent / 100
2095
+ };
2096
+ }
2097
+ function rgbColorValue(token) {
2098
+ const { token: baseToken, alpha, raw } = parseToken(token);
2099
+ if (raw) {
2100
+ return raw;
2101
+ }
2102
+ const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
2103
+ if (alpha === void 0) {
2104
+ return `rgb(var(${cssVar}))`;
2105
+ }
2106
+ return `rgba(var(${cssVar}), ${alpha})`;
2107
+ }
2108
+
2109
+ // ../theme-core/src/utils/tokenOrColor.ts
2110
+ var tokenOrCssColorValueSchema = z16.string();
1881
2111
 
1882
2112
  // ../theme-core/src/schema.ts
1883
- var axesSchema = z16.object({
1884
- tone: z16.enum(["minimal", "classic", "bold"]),
1885
- energy: z16.enum(["calm", "vibrant"]),
1886
- density: z16.enum(["airy", "regular", "compact"]),
1887
- mediaBias: z16.enum(["text", "media", "mixed"]),
1888
- conversionBias: z16.enum(["low", "med", "high"]),
1889
- motion: z16.enum(["subtle", "standard", "expressive"])
2113
+ var axesSchema = z17.object({
2114
+ tone: z17.enum(["minimal", "classic", "bold"]),
2115
+ energy: z17.enum(["calm", "vibrant"]),
2116
+ density: z17.enum(["airy", "regular", "compact"]),
2117
+ mediaBias: z17.enum(["text", "media", "mixed"]),
2118
+ conversionBias: z17.enum(["low", "med", "high"]),
2119
+ motion: z17.enum(["subtle", "standard", "expressive"])
1890
2120
  });
1891
- var colourHexString = z16.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
1892
- var paletteColorSchema = z16.object({
1893
- name: z16.string().min(1),
2121
+ var colourHexString = z17.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
2122
+ var paletteColorSchema = z17.object({
2123
+ name: z17.string().min(1),
1894
2124
  hex: colourHexString
1895
2125
  });
1896
- var paletteMetaSchema = z16.object({
1897
- mode: z16.enum(["light", "dark"])
2126
+ var paletteMetaSchema = z17.object({
2127
+ mode: z17.enum(["light", "dark"])
1898
2128
  });
1899
- var paletteSchema = z16.object({
1900
- colors: z16.array(paletteColorSchema),
2129
+ var paletteSchema = z17.object({
2130
+ colors: z17.array(paletteColorSchema),
1901
2131
  meta: paletteMetaSchema
1902
2132
  });
1903
- var typographyStyleSchema = z16.object({
1904
- family: z16.string().min(1),
1905
- weight: z16.enum(["light", "regular", "medium", "semibold", "bold"]),
1906
- letterSpacing: z16.enum(["tight", "normal", "loose"]),
1907
- lineHeight: z16.enum(["normal", "relaxed", "loose"])
2133
+ var typographyStyleSchema = z17.object({
2134
+ family: z17.string().min(1),
2135
+ weight: z17.enum(["light", "regular", "medium", "semibold", "bold"]),
2136
+ letterSpacing: z17.enum(["tight", "normal", "loose"]),
2137
+ lineHeight: z17.enum(["normal", "relaxed", "loose"])
1908
2138
  });
1909
2139
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
1910
- size: z16.enum(["md", "lg", "xl"])
2140
+ size: z17.enum(["md", "lg", "xl"])
1911
2141
  });
1912
- var headingSizeSchema = z16.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
1913
- var headingTypographyOverridesSchema = z16.object({
1914
- weight: z16.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
1915
- letterSpacing: z16.enum(["tight", "normal", "loose"]).nullable().optional(),
2142
+ var headingSizeSchema = z17.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
2143
+ var headingTypographyOverridesSchema = z17.object({
2144
+ weight: z17.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
2145
+ letterSpacing: z17.enum(["tight", "normal", "loose"]).nullable().optional(),
1916
2146
  size: headingSizeSchema.nullable().optional(),
1917
- lineHeight: z16.enum(["normal", "relaxed", "loose"]).nullable().optional(),
1918
- italic: z16.boolean().nullable().optional(),
2147
+ lineHeight: z17.enum(["normal", "relaxed", "loose"]).nullable().optional(),
2148
+ italic: z17.boolean().nullable().optional(),
1919
2149
  colorToken: themeColorTokenSchema.nullable().optional()
1920
2150
  });
1921
2151
  var headingTypographyStyleSchema = typographyStyleSchema.extend({
1922
- case: z16.enum(["uppercase", "normal", "smallCaps"]).nullable(),
1923
- italic: z16.boolean().nullable(),
2152
+ case: z17.enum(["uppercase", "normal", "smallCaps"]).nullable(),
2153
+ italic: z17.boolean().nullable(),
1924
2154
  colorToken: themeColorTokenSchema.nullable().optional()
1925
2155
  });
1926
- var proseLinkUnderlineStyleSchema = z16.enum(["solid", "dotted", "dashed"]);
1927
- var proseLinkUnderlineThicknessSchema = z16.enum([
2156
+ var proseLinkUnderlineStyleSchema = z17.enum(["solid", "dotted", "dashed"]);
2157
+ var proseLinkUnderlineThicknessSchema = z17.enum([
1928
2158
  "auto",
1929
2159
  "fromFont",
1930
2160
  "thin",
1931
2161
  "medium",
1932
2162
  "thick"
1933
2163
  ]);
1934
- var proseLinkUnderlineOffsetSchema = z16.enum([
2164
+ var proseLinkUnderlineOffsetSchema = z17.enum([
1935
2165
  "auto",
1936
2166
  "tight",
1937
2167
  "normal",
1938
2168
  "loose"
1939
2169
  ]);
1940
- var proseLinkStyleSchema = z16.object({
2170
+ var proseLinkStyleSchema = z17.object({
1941
2171
  colorToken: themeColorTokenSchema.optional(),
1942
2172
  hoverColorToken: themeColorTokenSchema.optional(),
1943
- underline: z16.boolean().optional(),
2173
+ underline: z17.boolean().optional(),
1944
2174
  decorationColorToken: themeColorTokenSchema.optional(),
1945
2175
  hoverDecorationColorToken: themeColorTokenSchema.optional(),
1946
2176
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
1947
2177
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
1948
2178
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
1949
2179
  });
1950
- var semanticSpacingSchema = z16.enum([
2180
+ var semanticSpacingSchema = z17.enum([
1951
2181
  "none",
1952
2182
  "compact",
1953
2183
  "cozy",
@@ -1955,91 +2185,108 @@ var semanticSpacingSchema = z16.enum([
1955
2185
  "comfortable",
1956
2186
  "spacious"
1957
2187
  ]);
1958
- var boxRoundedSchema = z16.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
1959
- var boxBackgroundOverlaySchema = z16.object({
1960
- type: z16.enum(["none", "color", "gradient"]).nullable().optional(),
2188
+ var boxRoundedSchema = z17.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
2189
+ var boxBackgroundOverlaySchema = z17.object({
2190
+ type: z17.enum(["none", "color", "gradient"]).nullable().optional(),
1961
2191
  color: tokenOrCssColorValueSchema.nullable().optional(),
1962
- gradient: z16.string().nullable().optional(),
1963
- opacity: z16.number().min(0).max(1).nullable().optional()
2192
+ gradient: z17.string().nullable().optional(),
2193
+ opacity: z17.number().min(0).max(1).nullable().optional()
1964
2194
  });
1965
- var boxBackgroundSchema = z16.object({
1966
- type: z16.enum(["color", "gradient", "image"]).optional(),
2195
+ var boxBackgroundSchema = z17.object({
2196
+ type: z17.enum(["color", "gradient", "image"]).optional(),
2197
+ contentOwner: z17.literal(pageDesignEditorBackgroundOverrideOwner).optional(),
1967
2198
  color: tokenOrCssColorValueSchema.nullable().optional(),
1968
- gradient: z16.string().nullable().optional(),
2199
+ gradient: z17.string().nullable().optional(),
2200
+ gradientPresetId: z17.string().min(1).nullable().optional(),
1969
2201
  image: mediaSchema.nullable().optional(),
1970
- objectFit: z16.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
1971
- scale: z16.string().nullable().optional(),
1972
- position: z16.string().nullable().optional(),
1973
- opacity: z16.number().min(0).max(1).nullable().optional(),
1974
- motion: z16.enum(["static", "fixed-frame"]).nullable().optional(),
2202
+ objectFit: z17.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
2203
+ scale: z17.string().nullable().optional(),
2204
+ position: z17.string().nullable().optional(),
2205
+ opacity: z17.number().min(0).max(1).nullable().optional(),
2206
+ motion: z17.enum(["static", "fixed-frame"]).nullable().optional(),
1975
2207
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
1976
2208
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
1977
2209
  headingColor: tokenOrCssColorValueSchema.nullable().optional()
1978
2210
  });
1979
- var noHeadingDecorationSchema = z16.object({
1980
- family: z16.literal("none"),
1981
- placement: z16.literal("none")
2211
+ var noHeadingDecorationSchema = z17.object({
2212
+ family: z17.literal("none")
1982
2213
  });
1983
- var visibleHeadingDecorationSchema = z16.object({
1984
- family: z16.enum(visibleHeadingDecorationFamilyValues),
1985
- placement: z16.enum(visibleHeadingDecorationPlacementValues),
1986
- colorToken: z16.enum(headingDecorationColorTokenValues).optional()
2214
+ var visibleHeadingDecorationSchema = z17.object({
2215
+ family: z17.enum(visibleHeadingDecorationFamilyValues),
2216
+ colorToken: z17.enum(headingDecorationColorTokenValues).optional()
1987
2217
  });
1988
- var headingDecorationSchema = z16.union([
2218
+ var headingDecorationSchema = z17.union([
1989
2219
  noHeadingDecorationSchema,
1990
2220
  visibleHeadingDecorationSchema
1991
2221
  ]);
1992
- var accordionIconTreatmentSchema = z16.object({
1993
- iconSet: z16.enum(accordionIconSetValues),
1994
- colorToken: z16.enum(accordionIconColorTokenValues),
1995
- openColorToken: z16.enum(accordionIconColorTokenValues).optional(),
1996
- motion: z16.enum(accordionIconMotionValues)
2222
+ var headingDecorationOverrideSchema = z17.union([
2223
+ z17.enum(headingDecorationOverrideValues),
2224
+ // Legacy authoring value from the earlier model. In the render-time model
2225
+ // "on" cannot force a fragment into a block, so it is equivalent to default.
2226
+ z17.literal("on").transform(() => "site-default")
2227
+ ]);
2228
+ var accordionIconTreatmentSchema = z17.object({
2229
+ iconSet: z17.enum(accordionIconSetValues),
2230
+ colorToken: z17.enum(accordionIconColorTokenValues),
2231
+ openColorToken: z17.enum(accordionIconColorTokenValues).optional(),
2232
+ motion: z17.enum(accordionIconMotionValues)
1997
2233
  });
1998
- var sectionStylesOverrideSchema = z16.object({
2234
+ var sectionStylesOverrideSchema = z17.object({
1999
2235
  background: boxBackgroundSchema.nullable().optional(),
2000
2236
  spacing: semanticSpacingSchema.nullable().optional(),
2001
- minHeight: z16.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
2002
- tileTreatment: z16.enum(tileTreatmentValues).nullable().optional(),
2003
- eventListTreatment: z16.enum(eventListTreatmentValues).nullable().optional(),
2004
- eyebrowTreatment: z16.enum(eyebrowTreatmentValues).nullable().optional(),
2237
+ minHeight: z17.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
2238
+ tileTreatment: z17.enum(tileTreatmentValues).nullable().optional(),
2239
+ eventListTreatment: z17.enum(eventListTreatmentValues).nullable().optional(),
2240
+ eyebrowTreatment: z17.enum(eyebrowTreatmentValues).nullable().optional(),
2005
2241
  headingDecoration: headingDecorationSchema.nullable().optional(),
2006
- // Author-level override consumed by later block/editor rendering phases.
2007
- // Keeping it in section styles lets existing block save APIs persist it.
2008
- headingDecorationOverride: z16.enum(headingDecorationOverrideValues).nullable().optional(),
2242
+ // Author-level opt-out consumed by render-time theme projection. Persisted
2243
+ // content may also carry legacy `headingDecoration` / `on` values; those are
2244
+ // tolerated at the schema boundary but the renderer treats the compiled theme
2245
+ // as the only source of the resolved signature.
2246
+ headingDecorationOverride: headingDecorationOverrideSchema.nullable().optional(),
2009
2247
  accordionIconTreatment: accordionIconTreatmentSchema.nullable().optional()
2010
2248
  });
2011
- var containerStylesOverrideSchema = z16.object({
2249
+ var containerStylesOverrideSchema = z17.object({
2012
2250
  background: boxBackgroundSchema.nullable().optional(),
2013
2251
  spacing: semanticSpacingSchema.nullable().optional(),
2014
- raised: z16.boolean().nullable().optional(),
2252
+ raised: z17.boolean().nullable().optional(),
2015
2253
  rounded: boxRoundedSchema.nullable().optional(),
2016
- fullWidth: z16.boolean().nullable().optional()
2254
+ fullWidth: z17.boolean().nullable().optional()
2017
2255
  });
2018
- var cardBorderOverrideSchema = z16.object({
2019
- enabled: z16.boolean().nullable().optional(),
2020
- width: z16.enum(["none", "1", "2", "3"]).nullable().optional(),
2256
+ var cardBorderOverrideSchema = z17.object({
2257
+ enabled: z17.boolean().nullable().optional(),
2258
+ width: z17.enum(["none", "1", "2", "3"]).nullable().optional(),
2021
2259
  colorToken: themeColorTokenSchema.nullable().optional()
2022
2260
  });
2023
- var cardStylesOverrideSchema = z16.object({
2261
+ var cardStylesOverrideSchema = z17.object({
2024
2262
  background: boxBackgroundSchema.nullable().optional(),
2025
2263
  border: cardBorderOverrideSchema.nullable().optional(),
2026
2264
  spacing: semanticSpacingSchema.nullable().optional(),
2027
- raised: z16.boolean().nullable().optional(),
2265
+ raised: z17.boolean().nullable().optional(),
2028
2266
  rounded: boxRoundedSchema.nullable().optional(),
2029
- treatment: z16.enum(["accent-quote"]).nullable().optional()
2267
+ treatment: z17.enum([
2268
+ "accent-quote",
2269
+ "editorial-rule",
2270
+ "soft-panel",
2271
+ "editorial-serif-quote",
2272
+ "editorial-open"
2273
+ ]).nullable().optional(),
2274
+ // Which site-style card variant the card adopts (emits a `.card-{id}` class).
2275
+ // 'none' is boxless. Driven by the block look via testimonialCardTreatment.
2276
+ cardVariant: boxStylesCardVariantSchema.nullable().optional()
2030
2277
  });
2031
- var blockStyleOverridesSchema = z16.object({
2278
+ var blockStyleOverridesSchema = z17.object({
2032
2279
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
2033
2280
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
2034
2281
  cardStyles: cardStylesOverrideSchema.nullable().optional()
2035
2282
  });
2036
- var blockThemeOverrideSchema = z16.object({
2037
- typography: z16.object({
2283
+ var blockThemeOverrideSchema = z17.object({
2284
+ typography: z17.object({
2038
2285
  proseLinkStyle: proseLinkStyleSchema.optional()
2039
2286
  }).optional(),
2040
2287
  styles: blockStyleOverridesSchema.optional()
2041
2288
  });
2042
- var typographyScaleSchema = z16.enum([
2289
+ var typographyScaleSchema = z17.enum([
2043
2290
  // New intuitive names
2044
2291
  "compact",
2045
2292
  // ratio 1.2 (was minorThird)
@@ -2052,9 +2299,9 @@ var typographyScaleSchema = z16.enum([
2052
2299
  "majorThird",
2053
2300
  "perfectFourth"
2054
2301
  ]);
2055
- var typographySchema = z16.object({
2302
+ var typographySchema = z17.object({
2056
2303
  body: bodyTypographyStyleSchema,
2057
- headings: z16.object({
2304
+ headings: z17.object({
2058
2305
  default: headingTypographyStyleSchema,
2059
2306
  h1: headingTypographyOverridesSchema,
2060
2307
  h2: headingTypographyOverridesSchema,
@@ -2067,41 +2314,41 @@ var typographySchema = z16.object({
2067
2314
  scale: typographyScaleSchema,
2068
2315
  proseLinkStyle: proseLinkStyleSchema.optional()
2069
2316
  });
2070
- var spaceSchema = z16.enum(["comfortable", "standard", "dense"]);
2071
- var corners = z16.enum(["square", "soft", "rounded", "pill"]);
2072
- var shadow = z16.object({
2073
- elevation: z16.enum(["none", "low", "medium", "high"]),
2074
- softness: z16.enum(["crisp", "soft", "hard"]).nullable(),
2075
- position: z16.enum(["bottom", "bottom-right"]).default("bottom")
2317
+ var spaceSchema = z17.enum(["comfortable", "standard", "dense"]);
2318
+ var corners = z17.enum(["square", "soft", "rounded", "pill"]);
2319
+ var shadow = z17.object({
2320
+ elevation: z17.enum(["none", "low", "medium", "high"]),
2321
+ softness: z17.enum(["crisp", "soft", "hard"]).nullable(),
2322
+ position: z17.enum(["bottom", "bottom-right"]).default("bottom")
2076
2323
  });
2077
- var border = z16.object({
2078
- width: z16.enum(["none", "hairline", "thin", "thick"]),
2079
- style: z16.enum(["solid", "dashed"])
2324
+ var border = z17.object({
2325
+ width: z17.enum(["none", "hairline", "thin", "thick"]),
2326
+ style: z17.enum(["solid", "dashed"])
2080
2327
  });
2081
- var motion = z16.object({
2082
- level: z16.enum(["off", "low", "medium", "high"]),
2083
- easing: z16.enum(["standard", "snappy", "gentle"]).nullable()
2328
+ var motion = z17.object({
2329
+ level: z17.enum(["off", "low", "medium", "high"]),
2330
+ easing: z17.enum(["standard", "snappy", "gentle"]).nullable()
2084
2331
  });
2085
- var buttonStyle = z16.object({
2332
+ var buttonStyle = z17.object({
2086
2333
  shape: corners
2087
2334
  // Used for --radius-control CSS variable
2088
2335
  });
2089
- var cardStyle = z16.object({
2090
- elevation: z16.enum(["none", "low", "medium", "high"]),
2091
- border: z16.enum(["none", "subtle", "defined"]),
2336
+ var cardStyle = z17.object({
2337
+ elevation: z17.enum(["none", "low", "medium", "high"]),
2338
+ border: z17.enum(["none", "subtle", "defined"]),
2092
2339
  shape: corners,
2093
- headerStyle: z16.enum(["plain", "accentBar", "subtleBg"]).nullable(),
2094
- mediaTreatment: z16.enum(["square", "rounded", "bleed"]).nullable()
2340
+ headerStyle: z17.enum(["plain", "accentBar", "subtleBg"]).nullable(),
2341
+ mediaTreatment: z17.enum(["square", "rounded", "bleed"]).nullable()
2095
2342
  });
2096
- var inputStyle = z16.object({
2343
+ var inputStyle = z17.object({
2097
2344
  shape: corners,
2098
- border: z16.enum(["subtle", "defined", "underline"]),
2099
- focus: z16.enum(["glow", "ring", "underline"]),
2100
- label: z16.enum(["inside", "above"])
2345
+ border: z17.enum(["subtle", "defined", "underline"]),
2346
+ focus: z17.enum(["glow", "ring", "underline"]),
2347
+ label: z17.enum(["inside", "above"])
2101
2348
  });
2102
- var headerVariant = z16.enum(["classic", "centered", "transparent", "floating"]);
2103
- var headerPositioning = z16.enum(["static", "sticky", "fixed"]);
2104
- var headerNavStyle = z16.enum([
2349
+ var headerVariant = z17.enum(["classic", "centered", "transparent", "floating"]);
2350
+ var headerPositioning = z17.enum(["static", "sticky", "fixed"]);
2351
+ var headerNavStyle = z17.enum([
2105
2352
  "minimal",
2106
2353
  "underline",
2107
2354
  "underline-grow",
@@ -2110,54 +2357,57 @@ var headerNavStyle = z16.enum([
2110
2357
  "frosted",
2111
2358
  "solid"
2112
2359
  ]);
2113
- var navFontWeight = z16.enum(["regular", "medium", "semibold", "bold"]);
2114
- var headerMaxWidth = z16.enum(["container", "full"]);
2115
- var headerContainerSchema = z16.object({
2116
- rounded: z16.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
2117
- border: z16.boolean().default(true),
2118
- shadow: z16.boolean().default(true),
2119
- padding: z16.enum(["sm", "md", "lg"]).default("md"),
2120
- tint: z16.string().nullable().optional(),
2121
- opacity: z16.number().min(0).max(1).default(0.12)
2360
+ var navFontWeight = z17.enum(["regular", "medium", "semibold", "bold"]);
2361
+ var headerMaxWidth = z17.enum(["container", "full"]);
2362
+ var headerContainerSchema = z17.object({
2363
+ rounded: z17.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
2364
+ border: z17.boolean().default(true),
2365
+ shadow: z17.boolean().default(true),
2366
+ padding: z17.enum(["sm", "md", "lg"]).default("md"),
2367
+ tint: z17.string().nullable().optional(),
2368
+ opacity: z17.number().min(0).max(1).default(0.12)
2122
2369
  }).optional();
2123
2370
  var headerBorderSchema = componentBorderSchema.extend({
2124
- position: z16.enum(["bottom", "top", "both", "none"]).default("bottom")
2371
+ position: z17.enum(["bottom", "top", "both", "none"]).default("bottom")
2125
2372
  }).optional();
2126
- var logoStyleSchema = z16.object({
2127
- fontFamily: z16.enum(["heading", "body"]).default("heading"),
2128
- letterSpacing: z16.enum(["normal", "wide", "wider", "widest"]).default("normal"),
2129
- gradient: z16.boolean().default(false)
2373
+ var logoStyleSchema = z17.object({
2374
+ fontFamily: z17.enum(["heading", "body"]).default("heading"),
2375
+ letterSpacing: z17.enum(["normal", "wide", "wider", "widest"]).default("normal"),
2376
+ gradient: z17.boolean().default(false),
2377
+ brandDisplay: z17.enum(brandDisplayModeValues).optional(),
2378
+ size: z17.enum(logoSizePolicyValues).optional(),
2379
+ accommodation: z17.enum(logoAccommodationPatternValues).optional()
2130
2380
  }).optional();
2131
- var headerLogoTextSchema = z16.object({
2132
- mobileWrapLines: z16.union([z16.literal(1), z16.literal(2)]).optional(),
2133
- mobileMaxWidth: z16.enum(["xs", "sm", "md"]).optional(),
2134
- hideOnShrink: z16.boolean().optional()
2381
+ var headerLogoTextSchema = z17.object({
2382
+ mobileWrapLines: z17.union([z17.literal(1), z17.literal(2)]).optional(),
2383
+ mobileMaxWidth: z17.enum(["xs", "sm", "md"]).optional(),
2384
+ hideOnShrink: z17.boolean().optional()
2135
2385
  }).optional();
2136
- var navEffectsSchema = z16.object({
2137
- underlineGradient: z16.boolean().default(false),
2138
- glow: z16.boolean().default(false),
2139
- glowColor: z16.string().optional(),
2140
- neumorphic: z16.boolean().default(false)
2386
+ var navEffectsSchema = z17.object({
2387
+ underlineGradient: z17.boolean().default(false),
2388
+ glow: z17.boolean().default(false),
2389
+ glowColor: z17.string().optional(),
2390
+ neumorphic: z17.boolean().default(false)
2141
2391
  }).optional();
2142
- var dropdownStyleSchema = z16.object({
2392
+ var dropdownStyleSchema = z17.object({
2143
2393
  // Container styling
2144
2394
  background: themeColorTokenSchema.default("surface"),
2145
2395
  textColor: themeColorTokenSchema.default("text"),
2146
2396
  borderColor: themeColorTokenSchema.nullable().default("border"),
2147
- shadow: z16.enum(["none", "sm", "md", "lg"]).default("md"),
2148
- borderRadius: z16.enum(["none", "sm", "md", "lg"]).default("md"),
2397
+ shadow: z17.enum(["none", "sm", "md", "lg"]).default("md"),
2398
+ borderRadius: z17.enum(["none", "sm", "md", "lg"]).default("md"),
2149
2399
  // Link hover states (explicit control)
2150
2400
  hoverBackground: themeColorTokenSchema.nullable().optional(),
2151
2401
  hoverTextColor: themeColorTokenSchema.nullable().optional(),
2152
2402
  // Typography
2153
- textTransform: z16.enum(["none", "uppercase", "capitalize"]).default("none"),
2154
- letterSpacing: z16.enum(["normal", "wide", "wider"]).default("normal"),
2155
- fontWeight: z16.enum(["regular", "medium", "semibold", "bold"]).optional(),
2403
+ textTransform: z17.enum(["none", "uppercase", "capitalize"]).default("none"),
2404
+ letterSpacing: z17.enum(["normal", "wide", "wider"]).default("normal"),
2405
+ fontWeight: z17.enum(["regular", "medium", "semibold", "bold"]).optional(),
2156
2406
  // optional = inherit from navWeight
2157
- textSize: z16.enum(["xs", "sm", "base", "lg"]).optional()
2407
+ textSize: z17.enum(["xs", "sm", "base", "lg"]).optional()
2158
2408
  // optional = no override (browser default)
2159
2409
  }).optional();
2160
- var headerCtaGapSchema = z16.enum([
2410
+ var headerCtaGapSchema = z17.enum([
2161
2411
  "none",
2162
2412
  "tight",
2163
2413
  "compact",
@@ -2165,7 +2415,7 @@ var headerCtaGapSchema = z16.enum([
2165
2415
  "relaxed",
2166
2416
  "spacious"
2167
2417
  ]);
2168
- var headerCtaTreatmentSchema = z16.enum([
2418
+ var headerCtaTreatmentSchema = z17.enum([
2169
2419
  "default",
2170
2420
  "primary",
2171
2421
  "secondary",
@@ -2173,22 +2423,22 @@ var headerCtaTreatmentSchema = z16.enum([
2173
2423
  "outline",
2174
2424
  "ghost"
2175
2425
  ]);
2176
- var navContainerSchema = z16.object({
2177
- type: z16.enum(["none", "pill", "glass"]).default("none"),
2178
- tint: z16.string().nullable().optional(),
2179
- opacity: z16.number().min(0).max(1).default(0.15)
2426
+ var navContainerSchema = z17.object({
2427
+ type: z17.enum(["none", "pill", "glass"]).default("none"),
2428
+ tint: z17.string().nullable().optional(),
2429
+ opacity: z17.number().min(0).max(1).default(0.15)
2180
2430
  }).default({ type: "none", tint: null, opacity: 0.15 });
2181
- var headerBackgroundSchema = z16.object({
2182
- type: z16.enum(["color", "gradient", "image"]),
2431
+ var headerBackgroundSchema = z17.object({
2432
+ type: z17.enum(["color", "gradient", "image"]),
2183
2433
  color: tokenOrCssColorValueSchema.nullable().optional(),
2184
2434
  gradient: gradientConfigSchema.nullable().optional(),
2185
2435
  image: mediaSchema.nullable().optional(),
2186
2436
  textColor: tokenOrCssColorValueSchema.nullable().optional()
2187
2437
  });
2188
- var headerSchema = z16.object({
2438
+ var headerSchema = z17.object({
2189
2439
  variant: headerVariant,
2190
2440
  positioning: headerPositioning,
2191
- shrinkOnScroll: z16.boolean(),
2441
+ shrinkOnScroll: z17.boolean(),
2192
2442
  maxWidth: headerMaxWidth,
2193
2443
  logoOverride: mediaSchema.nullable().optional(),
2194
2444
  background: headerBackgroundSchema.default({
@@ -2218,16 +2468,16 @@ var headerSchema = z16.object({
2218
2468
  // Optional theme-level CTA variant for header/nav CTA buttons.
2219
2469
  // Internal runtime bridge for the block renderer; prefer ctaTreatment in
2220
2470
  // authored Theme V2 concepts.
2221
- ctaVariant: z16.string().min(1).optional(),
2471
+ ctaVariant: z17.string().min(1).optional(),
2222
2472
  // Dropdown menu styling (nav dropdowns and mobile drawer)
2223
2473
  dropdownStyle: dropdownStyleSchema
2224
2474
  });
2225
- var footerVariant = z16.enum(["simple", "columns", "split"]);
2226
- var footerMaxWidth = z16.enum(["container", "full"]);
2227
- var footerMode = z16.enum(["default", "blocks", "default+blocks", "none"]);
2228
- var footerNavLayoutMode = z16.enum(["stack", "inline", "inline-wrap"]);
2229
- var footerNavLayoutAlign = z16.enum(["start", "center", "end", "space-between"]);
2230
- var footerSpacing = z16.enum([
2475
+ var footerVariant = z17.enum(["simple", "columns", "split"]);
2476
+ var footerMaxWidth = z17.enum(["container", "full"]);
2477
+ var footerMode = z17.enum(["default", "blocks", "default+blocks", "none"]);
2478
+ var footerNavLayoutMode = z17.enum(["stack", "inline", "inline-wrap"]);
2479
+ var footerNavLayoutAlign = z17.enum(["start", "center", "end", "space-between"]);
2480
+ var footerSpacing = z17.enum([
2231
2481
  "none",
2232
2482
  "tight",
2233
2483
  "compact",
@@ -2235,44 +2485,44 @@ var footerSpacing = z16.enum([
2235
2485
  "relaxed",
2236
2486
  "spacious"
2237
2487
  ]);
2238
- var footerLogoPlacement = z16.enum(["left", "right", "above", "below"]);
2239
- var footerLogoSize = z16.enum(["sm", "md", "lg", "xl"]);
2240
- var footerLogoMaxHeight = z16.enum(["sm", "md", "lg", "xl"]);
2241
- var footerBottomTextLinkStyleSchema = z16.object({
2488
+ var footerLogoPlacement = z17.enum(["left", "right", "above", "below"]);
2489
+ var footerLogoSize = z17.enum(["sm", "md", "lg", "xl"]);
2490
+ var footerLogoMaxHeight = z17.enum(["sm", "md", "lg", "xl"]);
2491
+ var footerBottomTextLinkStyleSchema = z17.object({
2242
2492
  colorToken: themeColorTokenSchema.optional(),
2243
2493
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
2244
2494
  decorationColorToken: themeColorTokenSchema.nullable().optional(),
2245
- underline: z16.boolean().optional()
2495
+ underline: z17.boolean().optional()
2246
2496
  });
2247
- var footerBottomBarSchema = z16.object({
2248
- enabled: z16.boolean().optional(),
2249
- fullBleed: z16.boolean().optional(),
2497
+ var footerBottomBarSchema = z17.object({
2498
+ enabled: z17.boolean().optional(),
2499
+ fullBleed: z17.boolean().optional(),
2250
2500
  background: headerBackgroundSchema.optional(),
2251
2501
  textColor: themeColorTokenSchema.nullable().optional(),
2252
- textAlign: z16.enum(["left", "center", "right"]).optional(),
2502
+ textAlign: z17.enum(["left", "center", "right"]).optional(),
2253
2503
  paddingY: footerSpacing.optional(),
2254
2504
  paddingX: footerSpacing.optional(),
2255
- borderTop: z16.object({
2505
+ borderTop: z17.object({
2256
2506
  colorToken: themeColorTokenSchema.nullable().optional(),
2257
- width: z16.enum(["none", "thin", "medium", "thick"]).optional()
2507
+ width: z17.enum(["none", "thin", "medium", "thick"]).optional()
2258
2508
  }).optional()
2259
2509
  });
2260
- var footerNavLayoutSchema = z16.object({
2510
+ var footerNavLayoutSchema = z17.object({
2261
2511
  layout: footerNavLayoutMode.optional(),
2262
2512
  align: footerNavLayoutAlign.optional(),
2263
2513
  gapX: footerSpacing.optional(),
2264
2514
  gapY: footerSpacing.optional(),
2265
- columns: z16.number().int().min(1).max(6).optional()
2515
+ columns: z17.number().int().min(1).max(6).optional()
2266
2516
  });
2267
- var footerLogoSchema = z16.object({
2268
- showLogo: z16.boolean().default(true),
2269
- showLogoText: z16.boolean().optional(),
2517
+ var footerLogoSchema = z17.object({
2518
+ showLogo: z17.boolean().default(true),
2519
+ showLogoText: z17.boolean().optional(),
2270
2520
  placement: footerLogoPlacement.optional(),
2271
2521
  size: footerLogoSize.optional(),
2272
2522
  maxHeight: footerLogoMaxHeight.optional(),
2273
- align: z16.enum(["start", "center", "end"]).optional()
2523
+ align: z17.enum(["start", "center", "end"]).optional()
2274
2524
  });
2275
- var footerSchema = z16.object({
2525
+ var footerSchema = z17.object({
2276
2526
  /**
2277
2527
  * SDK-only footer rendering mode.
2278
2528
  *
@@ -2281,7 +2531,7 @@ var footerSchema = z16.object({
2281
2531
  mode: footerMode.optional(),
2282
2532
  variant: footerVariant,
2283
2533
  maxWidth: footerMaxWidth,
2284
- showLogoText: z16.boolean().optional(),
2534
+ showLogoText: z17.boolean().optional(),
2285
2535
  background: headerBackgroundSchema.default({
2286
2536
  type: "color",
2287
2537
  color: "surface"
@@ -2299,20 +2549,20 @@ var footerSchema = z16.object({
2299
2549
  logo: footerLogoSchema.optional(),
2300
2550
  bottomBar: footerBottomBarSchema.optional()
2301
2551
  });
2302
- var containerPaddingPresetSchema = z16.enum([
2552
+ var containerPaddingPresetSchema = z17.enum([
2303
2553
  "tight",
2304
2554
  "compact",
2305
2555
  "default",
2306
2556
  "relaxed"
2307
2557
  ]);
2308
- var layoutSchema = z16.object({
2309
- containerPadding: z16.object({
2558
+ var layoutSchema = z17.object({
2559
+ containerPadding: z17.object({
2310
2560
  mobile: containerPaddingPresetSchema.optional(),
2311
2561
  tablet: containerPaddingPresetSchema.optional(),
2312
2562
  desktop: containerPaddingPresetSchema.optional()
2313
2563
  }).optional()
2314
2564
  }).optional();
2315
- var heroTypographySizeSchema = z16.enum([
2565
+ var heroTypographySizeSchema = z17.enum([
2316
2566
  "sm",
2317
2567
  "base",
2318
2568
  "lg",
@@ -2324,19 +2574,19 @@ var heroTypographySizeSchema = z16.enum([
2324
2574
  "6xl",
2325
2575
  "editorial"
2326
2576
  ]);
2327
- var heroTypographyLineHeightSchema = z16.enum([
2577
+ var heroTypographyLineHeightSchema = z17.enum([
2328
2578
  "tight",
2329
2579
  "snug",
2330
2580
  "normal",
2331
2581
  "relaxed"
2332
2582
  ]);
2333
- var heroResponsiveTypographySchema = z16.object({
2583
+ var heroResponsiveTypographySchema = z17.object({
2334
2584
  headlineSize: heroTypographySizeSchema.optional(),
2335
2585
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
2336
2586
  subheadlineSize: heroTypographySizeSchema.optional(),
2337
2587
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
2338
2588
  });
2339
- var heroTypographySchema = z16.object({
2589
+ var heroTypographySchema = z17.object({
2340
2590
  headlineSize: heroTypographySizeSchema.optional(),
2341
2591
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
2342
2592
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -2345,31 +2595,38 @@ var heroTypographySchema = z16.object({
2345
2595
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
2346
2596
  microSubheadlineSize: heroTypographySizeSchema.optional(),
2347
2597
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
2348
- responsive: z16.object({
2598
+ responsive: z17.object({
2349
2599
  tablet: heroResponsiveTypographySchema.optional(),
2350
2600
  mobile: heroResponsiveTypographySchema.optional()
2351
2601
  }).optional()
2352
2602
  });
2353
- var heroSchema = z16.object({
2603
+ var heroSchema = z17.object({
2354
2604
  typography: heroTypographySchema.optional()
2355
2605
  }).optional();
2356
- var bodyTextIntroTypographySizeSchema = z16.enum(["default", "editorial"]);
2357
- var bodyTextSchema = z16.object({
2358
- intro: z16.object({
2606
+ var bodyTextIntroTypographySizeSchema = z17.enum(["default", "editorial"]);
2607
+ var bodyTextSchema = z17.object({
2608
+ intro: z17.object({
2359
2609
  paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
2360
2610
  headingSize: bodyTextIntroTypographySizeSchema.optional()
2361
2611
  }).optional()
2362
2612
  }).optional();
2363
- var gradientsSchema = z16.object({
2364
- button: z16.string().min(1).nullable().optional(),
2365
- hero: z16.string().min(1).nullable().optional(),
2366
- background: z16.string().min(1).nullable().optional()
2613
+ var gradientsSchema = z17.object({
2614
+ button: z17.string().min(1).nullable().optional(),
2615
+ hero: z17.string().min(1).nullable().optional(),
2616
+ background: z17.string().min(1).nullable().optional()
2617
+ });
2618
+ var testimonialQuoteTreatmentSchema = z17.object({
2619
+ style: z17.enum(["serif-display", "accent-glyph", "none"]),
2620
+ fontFamily: z17.enum(["heading", "body"]).optional(),
2621
+ scale: z17.enum(["sm", "md", "lg", "xl"]).optional(),
2622
+ colorToken: themeColorTokenSchema.optional(),
2623
+ opacity: z17.number().min(0).max(1).optional()
2367
2624
  });
2368
- var themeSchema = z16.object({
2369
- name: z16.string().min(1).max(30),
2370
- description: z16.string().min(1).max(400),
2371
- rationale: z16.string().min(1).max(400),
2372
- siteStyleId: z16.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
2625
+ var themeSchema = z17.object({
2626
+ name: z17.string().min(1).max(30),
2627
+ description: z17.string().min(1).max(400),
2628
+ rationale: z17.string().min(1).max(400),
2629
+ siteStyleId: z17.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
2373
2630
  axes: axesSchema,
2374
2631
  palette: paletteSchema,
2375
2632
  typography: typographySchema,
@@ -2390,6 +2647,8 @@ var themeSchema = z16.object({
2390
2647
  // Card variant system (optional for backwards compatibility)
2391
2648
  accordions: accordionSystemSchema.optional(),
2392
2649
  // Accordion system (optional - generated if not provided)
2650
+ testimonialQuote: testimonialQuoteTreatmentSchema.optional(),
2651
+ // Testimonial quote-mark treatment (site-style-owned)
2393
2652
  inputs: inputSystemSchema.optional(),
2394
2653
  // Input system (optional - generated if not provided)
2395
2654
  inputStyle: inputStyle.optional(),
@@ -2397,15 +2656,19 @@ var themeSchema = z16.object({
2397
2656
  // Block-specific customization (Tier 3)
2398
2657
  // blockCustomVars: Per-block CSS variable overrides as bare values
2399
2658
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
2400
- blockCustomVars: z16.record(
2401
- z16.string(),
2659
+ blockCustomVars: z17.record(
2660
+ z17.string(),
2402
2661
  // block kind (matches data-block attribute)
2403
- z16.record(z16.string(), z16.string())
2662
+ z17.record(z17.string(), z17.string())
2404
2663
  // { '--var-name': 'value' }
2405
2664
  ).optional(),
2406
2665
  // Structured block-kind theme overrides (v1: typography prose-link style only)
2407
2666
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
2408
- blockOverrides: z16.record(z16.string(), blockThemeOverrideSchema).optional(),
2667
+ blockOverrides: z17.record(z17.string(), blockThemeOverrideSchema).optional(),
2668
+ // Site-wide heading decoration signature (family + colour). Set once per Look
2669
+ // and projected transiently onto eligible block headings at render time.
2670
+ // Alignment is inherited from the heading, so no placement is stored.
2671
+ headingDecoration: headingDecorationSchema.optional(),
2409
2672
  // Structured custom CSS rules
2410
2673
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
2411
2674
  customCssRules: customCssRulesSchema,
@@ -2439,11 +2702,11 @@ var themeSchema = z16.object({
2439
2702
  * }
2440
2703
  * ```
2441
2704
  */
2442
- styleGroups: z16.record(z16.string(), z16.array(z16.string())).optional()
2705
+ styleGroups: z17.record(z17.string(), z17.array(z17.string())).optional()
2443
2706
  });
2444
- var themesTurnSchema = z16.object({
2445
- message: z16.string().min(1),
2446
- themes: z16.array(themeSchema).length(3)
2707
+ var themesTurnSchema = z17.object({
2708
+ message: z17.string().min(1),
2709
+ themes: z17.array(themeSchema).length(3)
2447
2710
  });
2448
2711
 
2449
2712
  // ../theme-core/src/fonts/uploadFormat.ts
@@ -2511,26 +2774,26 @@ function generateShadowCssVars(theme) {
2511
2774
  }
2512
2775
 
2513
2776
  // ../theme-core/src/palette/variants/types.ts
2514
- import { z as z17 } from "zod";
2777
+ import { z as z18 } from "zod";
2515
2778
  function asPaletteVariantId(value) {
2516
2779
  if (value.length === 0) {
2517
2780
  throw new Error("PaletteVariantId must be a non-empty string");
2518
2781
  }
2519
2782
  return value;
2520
2783
  }
2521
- var paletteVariantIdSchema = z17.string().min(1).transform((value) => asPaletteVariantId(value));
2784
+ var paletteVariantIdSchema = z18.string().min(1).transform((value) => asPaletteVariantId(value));
2522
2785
  var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
2523
- var hexColorSchema = z17.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
2786
+ var hexColorSchema = z18.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
2524
2787
  var variantPaletteColorSchema = paletteColorSchema.extend({
2525
2788
  name: paletteTokenNameSchema
2526
2789
  });
2527
- var paletteVariantSchema = z17.object({
2790
+ var paletteVariantSchema = z18.object({
2528
2791
  id: paletteVariantIdSchema,
2529
- name: z17.string().min(1),
2530
- description: z17.string().min(1),
2792
+ name: z18.string().min(1),
2793
+ description: z18.string().min(1),
2531
2794
  tags: styleTagsSchema,
2532
- mode: z17.enum(["light", "dark"]),
2533
- colors: z17.array(variantPaletteColorSchema).min(1)
2795
+ mode: z18.enum(["light", "dark"]),
2796
+ colors: z18.array(variantPaletteColorSchema).min(1)
2534
2797
  });
2535
2798
  function definePaletteVariant(input) {
2536
2799
  return {
@@ -2542,7 +2805,7 @@ function definePaletteVariant(input) {
2542
2805
  colors: input.colors
2543
2806
  };
2544
2807
  }
2545
- var paletteOverridesSchema = z17.object({
2808
+ var paletteOverridesSchema = z18.object({
2546
2809
  primary: hexColorSchema.optional(),
2547
2810
  primaryForeground: hexColorSchema.optional(),
2548
2811
  secondary: hexColorSchema.optional(),
@@ -2783,6 +3046,28 @@ var softNaturalWatercolor = definePaletteVariant({
2783
3046
  { name: "border", hex: "#d8c9a8" }
2784
3047
  ]
2785
3048
  });
3049
+ var softNaturalLilac = definePaletteVariant({
3050
+ id: "soft-natural-lilac",
3051
+ name: "Soft Natural \u2014 Lilac",
3052
+ description: "Watercolour periwinkle-lilac primary with warm ivory grounds and a sage accent.",
3053
+ tags: { tone: "classic", energy: "calm", era: "organic" },
3054
+ mode: "light",
3055
+ colors: [
3056
+ { name: "primary", hex: "#5c68a8" },
3057
+ { name: "secondary", hex: "#8189ad" },
3058
+ { name: "accent", hex: "#75835a" },
3059
+ { name: "success", hex: "#5f7d62" },
3060
+ { name: "warning", hex: "#a8884f" },
3061
+ { name: "destructive", hex: "#a3503e" },
3062
+ { name: "background", hex: "#faf9f6" },
3063
+ { name: "surface", hex: "#ffffff" },
3064
+ { name: "surfaceAlt", hex: "#f1f0f7" },
3065
+ { name: "muted", hex: "#e9e8f2" },
3066
+ { name: "text", hex: "#262633" },
3067
+ { name: "primaryForeground", hex: "#ffffff" },
3068
+ { name: "border", hex: "#d6d5e3" }
3069
+ ]
3070
+ });
2786
3071
 
2787
3072
  // ../theme-core/src/palette/variants/warm-neutral.ts
2788
3073
  var warmNeutralClay = definePaletteVariant({
@@ -2893,13 +3178,190 @@ var paletteVariants = [
2893
3178
  // Soft-natural family
2894
3179
  softNaturalSage,
2895
3180
  softNaturalStone,
2896
- softNaturalWatercolor
3181
+ softNaturalWatercolor,
3182
+ softNaturalLilac
2897
3183
  ];
2898
3184
  var paletteVariantsById = new Map(
2899
3185
  paletteVariants.map((v) => [v.id, v])
2900
3186
  );
2901
3187
 
2902
3188
  // ../theme-core/src/accordions/siteStyleDefaults.ts
3189
+ var editorialDividedAccordionSystem = {
3190
+ background: null,
3191
+ spacing: "comfortable",
3192
+ corners: "square",
3193
+ border: null,
3194
+ shadow: null,
3195
+ icon: {
3196
+ style: "plus-minus",
3197
+ position: "right",
3198
+ size: "md",
3199
+ colorToken: "primary"
3200
+ },
3201
+ trigger: {
3202
+ textColorToken: "text",
3203
+ fontWeight: "regular",
3204
+ fontFamily: "heading",
3205
+ fontScale: "lg"
3206
+ },
3207
+ hover: {
3208
+ textColorToken: "primary"
3209
+ },
3210
+ openState: {
3211
+ backgroundColorToken: "surfaceAlt",
3212
+ triggerColorToken: "primary",
3213
+ accent: {
3214
+ edge: "left",
3215
+ colorToken: "primary",
3216
+ thickness: "medium"
3217
+ }
3218
+ },
3219
+ content: {
3220
+ textColorToken: "neutral-700"
3221
+ }
3222
+ };
3223
+ var quietUnderlinedAccordionSystem = {
3224
+ background: null,
3225
+ spacing: "spacious",
3226
+ corners: "square",
3227
+ border: null,
3228
+ shadow: null,
3229
+ icon: {
3230
+ style: "chevron",
3231
+ position: "right",
3232
+ size: "sm",
3233
+ colorToken: "muted"
3234
+ },
3235
+ trigger: {
3236
+ textColorToken: "text",
3237
+ fontWeight: "regular",
3238
+ fontFamily: "heading",
3239
+ fontScale: "lg"
3240
+ },
3241
+ hover: {
3242
+ textColorToken: "primary"
3243
+ },
3244
+ openState: {
3245
+ triggerColorToken: "primary"
3246
+ },
3247
+ content: {
3248
+ textColorToken: "neutral-700"
3249
+ }
3250
+ };
3251
+ var calmPanelAccordionSystem = {
3252
+ background: {
3253
+ type: "solid",
3254
+ colorToken: "surface"
3255
+ },
3256
+ spacing: "comfortable",
3257
+ corners: "soft",
3258
+ border: {
3259
+ widthClass: "border",
3260
+ colorToken: "border"
3261
+ },
3262
+ shadow: {
3263
+ elevation: "low",
3264
+ softness: "soft",
3265
+ position: "bottom"
3266
+ },
3267
+ icon: {
3268
+ style: "chevron",
3269
+ position: "right",
3270
+ size: "md",
3271
+ colorToken: "primary"
3272
+ },
3273
+ trigger: {
3274
+ textColorToken: "text",
3275
+ fontWeight: "medium",
3276
+ fontFamily: "heading",
3277
+ fontScale: "md"
3278
+ },
3279
+ hover: {
3280
+ backgroundColorToken: "primary/5",
3281
+ textColorToken: "primary"
3282
+ },
3283
+ openState: {
3284
+ backgroundColorToken: "primary/5",
3285
+ triggerColorToken: "primary"
3286
+ },
3287
+ content: {
3288
+ textColorToken: "neutral-700"
3289
+ }
3290
+ };
3291
+ var boldBorderedAccordionSystem = {
3292
+ background: {
3293
+ type: "solid",
3294
+ colorToken: "surface"
3295
+ },
3296
+ spacing: "comfortable",
3297
+ corners: "soft",
3298
+ border: {
3299
+ widthClass: "border-2",
3300
+ colorToken: "border"
3301
+ },
3302
+ shadow: null,
3303
+ icon: {
3304
+ style: "plus-minus",
3305
+ position: "right",
3306
+ size: "lg",
3307
+ colorToken: "primary"
3308
+ },
3309
+ trigger: {
3310
+ textColorToken: "text",
3311
+ fontWeight: "bold",
3312
+ fontFamily: "heading",
3313
+ fontScale: "md"
3314
+ },
3315
+ hover: {
3316
+ backgroundColorToken: "primary/10",
3317
+ textColorToken: "primary"
3318
+ },
3319
+ openState: {
3320
+ backgroundColorToken: "primary/10",
3321
+ triggerColorToken: "primary",
3322
+ accent: {
3323
+ edge: "left",
3324
+ colorToken: "primary",
3325
+ thickness: "thick"
3326
+ }
3327
+ },
3328
+ content: {
3329
+ textColorToken: "neutral-700"
3330
+ }
3331
+ };
3332
+ var warmInsetAccordionSystem = {
3333
+ background: {
3334
+ type: "solid",
3335
+ colorToken: "surfaceAlt"
3336
+ },
3337
+ spacing: "comfortable",
3338
+ corners: "rounded",
3339
+ border: null,
3340
+ shadow: null,
3341
+ icon: {
3342
+ style: "circle-plus-minus",
3343
+ position: "right",
3344
+ size: "md",
3345
+ colorToken: "primary"
3346
+ },
3347
+ trigger: {
3348
+ textColorToken: "text",
3349
+ fontWeight: "semibold",
3350
+ fontFamily: "heading",
3351
+ fontScale: "md"
3352
+ },
3353
+ hover: {
3354
+ backgroundColorToken: "primary/5",
3355
+ textColorToken: "primary"
3356
+ },
3357
+ openState: {
3358
+ backgroundColorToken: "surface",
3359
+ triggerColorToken: "primary"
3360
+ },
3361
+ content: {
3362
+ textColorToken: "neutral-700"
3363
+ }
3364
+ };
2903
3365
  var softEarthAccordionSystem = {
2904
3366
  background: {
2905
3367
  type: "solid",
@@ -2917,16 +3379,96 @@ var softEarthAccordionSystem = {
2917
3379
  },
2918
3380
  trigger: {
2919
3381
  textColorToken: "text",
2920
- fontWeight: "medium"
3382
+ fontWeight: "medium",
3383
+ fontFamily: "heading",
3384
+ fontScale: "md"
2921
3385
  },
2922
3386
  hover: {
2923
3387
  textColorToken: "primary"
2924
3388
  },
3389
+ openState: {
3390
+ triggerColorToken: "primary"
3391
+ },
2925
3392
  content: {
2926
3393
  textColorToken: "neutral-700"
2927
3394
  }
2928
3395
  };
2929
3396
 
3397
+ // ../theme-core/src/cards/siteStyleDefaults.ts
3398
+ var southWestCardSystem = {
3399
+ variants: [
3400
+ {
3401
+ id: "default",
3402
+ name: "Default",
3403
+ enabled: true,
3404
+ priority: 1,
3405
+ background: { type: "solid", colorToken: "surface" },
3406
+ foregroundToken: "text",
3407
+ spacing: "comfortable",
3408
+ corners: "soft",
3409
+ shadow: { elevation: "low", softness: "soft", position: "bottom" }
3410
+ },
3411
+ {
3412
+ id: "alternative",
3413
+ name: "Statement",
3414
+ enabled: true,
3415
+ priority: 2,
3416
+ background: { type: "solid", colorToken: "primary-700" },
3417
+ foregroundToken: "primaryForeground",
3418
+ spacing: "comfortable",
3419
+ // No shadow on the variant itself: the elevation comes from the look's
3420
+ // 'raised' item surface (rb-shadow-md = var(--shadow-md)), reproducing the
3421
+ // legacy accent-quote card's shadow exactly.
3422
+ shadow: { elevation: "none", softness: null, position: "bottom" },
3423
+ accentEdge: { edge: "left", colorToken: "secondary", width: "heavy" },
3424
+ cornerRadii: {
3425
+ topLeft: "square",
3426
+ topRight: "expressive",
3427
+ bottomLeft: "square",
3428
+ bottomRight: "square"
3429
+ }
3430
+ }
3431
+ ]
3432
+ };
3433
+ var clarityZenCardSystem = {
3434
+ variants: [
3435
+ {
3436
+ id: "default",
3437
+ name: "Default",
3438
+ enabled: true,
3439
+ priority: 1,
3440
+ background: { type: "solid", colorToken: "surface" },
3441
+ // A filled card establishes its own text colour so it stays legible on a
3442
+ // coloured section band (which sets a contrasting section-text colour).
3443
+ foregroundToken: "text",
3444
+ spacing: "comfortable",
3445
+ corners: "rounded",
3446
+ shadow: { elevation: "low", softness: "soft", position: "bottom" }
3447
+ },
3448
+ {
3449
+ id: "alternative",
3450
+ name: "Statement",
3451
+ enabled: true,
3452
+ priority: 2,
3453
+ // Themed surfaceAlt tint + a touch more elevation so an emphasised
3454
+ // section reads as a deliberate "statement" against the default card.
3455
+ background: { type: "solid", colorToken: "surfaceAlt" },
3456
+ foregroundToken: "text",
3457
+ spacing: "comfortable",
3458
+ corners: "rounded",
3459
+ shadow: { elevation: "medium", softness: "soft", position: "bottom" }
3460
+ }
3461
+ ]
3462
+ };
3463
+
3464
+ // ../theme-core/src/site-styles/testimonialQuotePresets.ts
3465
+ var serifDisplayQuote = {
3466
+ style: "serif-display"
3467
+ };
3468
+ var accentGlyphQuote = {
3469
+ style: "accent-glyph"
3470
+ };
3471
+
2930
3472
  // ../theme-core/src/site-styles/headerCtaVariants.ts
2931
3473
  function hasButtonVariant(theme, variantId) {
2932
3474
  return theme.buttons?.variants.some((variant) => variant.enabled && variant.id === variantId) ?? false;
@@ -2961,6 +3503,89 @@ function asHeaderLayoutId(value) {
2961
3503
  function asHeaderStyleId(value) {
2962
3504
  return value;
2963
3505
  }
3506
+ var titleOnlyLogoAccommodation = {
3507
+ pattern: "title-only",
3508
+ supportedShapes: ["none", "horizontal", "square", "portrait", "tall"],
3509
+ supportedTextPresence: ["contains-text", "no-text", "unknown"],
3510
+ supportedDisplayModes: ["title-only"],
3511
+ size: "compact"
3512
+ };
3513
+ var inlineWordmarkLogoAccommodation = {
3514
+ pattern: "inline-wordmark",
3515
+ supportedShapes: ["horizontal"],
3516
+ supportedTextPresence: ["contains-text", "no-text", "unknown"],
3517
+ supportedDisplayModes: ["logo-only"],
3518
+ size: "standard",
3519
+ maxDensity: "detailed"
3520
+ };
3521
+ var inlineMarkWithTitleLogoAccommodation = {
3522
+ pattern: "inline-mark-with-title",
3523
+ supportedShapes: ["horizontal", "square", "portrait", "tall"],
3524
+ supportedTextPresence: ["no-text"],
3525
+ supportedDisplayModes: ["logo-plus-title"],
3526
+ size: "compact",
3527
+ maxDensity: "simple"
3528
+ };
3529
+ var logoPlateAccommodation = {
3530
+ pattern: "logo-plate",
3531
+ supportedShapes: ["square", "portrait", "tall"],
3532
+ supportedTextPresence: ["contains-text", "unknown"],
3533
+ supportedDisplayModes: ["logo-only"],
3534
+ size: "display",
3535
+ providesBacking: true
3536
+ };
3537
+ var centeredBadgeAccommodation = {
3538
+ pattern: "centered-badge",
3539
+ supportedShapes: ["square", "portrait", "tall"],
3540
+ supportedTextPresence: ["contains-text", "unknown"],
3541
+ supportedDisplayModes: ["logo-only"],
3542
+ size: "display",
3543
+ providesBacking: true
3544
+ };
3545
+ var popoutBadgeAccommodation = {
3546
+ pattern: "popout-badge",
3547
+ supportedShapes: ["square", "portrait", "tall"],
3548
+ supportedTextPresence: ["contains-text", "unknown"],
3549
+ supportedDisplayModes: ["logo-only"],
3550
+ size: "display",
3551
+ providesBacking: true
3552
+ };
3553
+ var centeredMastheadAccommodation = {
3554
+ pattern: "centered-masthead",
3555
+ supportedShapes: ["square", "portrait", "tall"],
3556
+ supportedTextPresence: ["contains-text", "unknown"],
3557
+ supportedDisplayModes: ["logo-only"],
3558
+ size: "display",
3559
+ providesBacking: true
3560
+ };
3561
+ var unbackedOverlayLogoAccommodation = {
3562
+ pattern: "inline-logo-only",
3563
+ supportedShapes: ["square"],
3564
+ supportedTextPresence: ["contains-text", "unknown"],
3565
+ supportedDisplayModes: ["logo-only"],
3566
+ size: "compact",
3567
+ providesBacking: false
3568
+ };
3569
+ var inlineClassicLogoAccommodations = [
3570
+ titleOnlyLogoAccommodation,
3571
+ inlineWordmarkLogoAccommodation,
3572
+ inlineMarkWithTitleLogoAccommodation,
3573
+ popoutBadgeAccommodation,
3574
+ logoPlateAccommodation
3575
+ ];
3576
+ var centeredLogoAccommodations = [
3577
+ titleOnlyLogoAccommodation,
3578
+ inlineWordmarkLogoAccommodation,
3579
+ inlineMarkWithTitleLogoAccommodation,
3580
+ centeredMastheadAccommodation,
3581
+ centeredBadgeAccommodation
3582
+ ];
3583
+ var overlayLogoAccommodations = [
3584
+ titleOnlyLogoAccommodation,
3585
+ inlineWordmarkLogoAccommodation,
3586
+ inlineMarkWithTitleLogoAccommodation,
3587
+ unbackedOverlayLogoAccommodation
3588
+ ];
2964
3589
  function baseHeader(theme) {
2965
3590
  const {
2966
3591
  navLinkStyle: _navLinkStyle,
@@ -3630,6 +4255,7 @@ var headerLookCatalog = [
3630
4255
  behavior: "sticky"
3631
4256
  },
3632
4257
  openingRequirement: "none",
4258
+ logoAccommodations: inlineClassicLogoAccommodations,
3633
4259
  compile: cleanBaseHeader
3634
4260
  },
3635
4261
  {
@@ -3643,6 +4269,7 @@ var headerLookCatalog = [
3643
4269
  behavior: "sticky-shrink"
3644
4270
  },
3645
4271
  openingRequirement: "none",
4272
+ logoAccommodations: inlineClassicLogoAccommodations,
3646
4273
  compile: solidBrandHeader
3647
4274
  },
3648
4275
  {
@@ -3657,6 +4284,7 @@ var headerLookCatalog = [
3657
4284
  },
3658
4285
  openingRequirement: "none",
3659
4286
  maxRecommendedNavItems: 6,
4287
+ logoAccommodations: centeredLogoAccommodations,
3660
4288
  compile: serifLineHeader
3661
4289
  },
3662
4290
  {
@@ -3671,7 +4299,7 @@ var headerLookCatalog = [
3671
4299
  },
3672
4300
  openingRequirement: "none",
3673
4301
  maxRecommendedNavItems: 5,
3674
- allowedLogoShapes: ["none", "text-only", "horizontal", "square"],
4302
+ logoAccommodations: centeredLogoAccommodations,
3675
4303
  compile: centeredCalmHeader
3676
4304
  },
3677
4305
  {
@@ -3686,6 +4314,7 @@ var headerLookCatalog = [
3686
4314
  },
3687
4315
  openingRequirement: "none",
3688
4316
  requiresProminentCta: true,
4317
+ logoAccommodations: inlineClassicLogoAccommodations,
3689
4318
  compile: practicalUtilityHeader
3690
4319
  },
3691
4320
  {
@@ -3699,6 +4328,7 @@ var headerLookCatalog = [
3699
4328
  behavior: "normal-flow"
3700
4329
  },
3701
4330
  openingRequirement: "reserved-space-ok",
4331
+ logoAccommodations: inlineClassicLogoAccommodations,
3702
4332
  compile: minimalTransparentHeader
3703
4333
  },
3704
4334
  {
@@ -3713,7 +4343,7 @@ var headerLookCatalog = [
3713
4343
  },
3714
4344
  openingRequirement: "requires-image-hero-with-contrast-overlay",
3715
4345
  maxRecommendedNavItems: 5,
3716
- allowedLogoShapes: ["none", "text-only", "horizontal"],
4346
+ logoAccommodations: overlayLogoAccommodations,
3717
4347
  compile: transparentOverlayHeader
3718
4348
  },
3719
4349
  {
@@ -3728,7 +4358,7 @@ var headerLookCatalog = [
3728
4358
  },
3729
4359
  openingRequirement: "requires-image-hero-with-contrast-overlay",
3730
4360
  maxRecommendedNavItems: 5,
3731
- allowedLogoShapes: ["none", "text-only", "horizontal"],
4361
+ logoAccommodations: overlayLogoAccommodations,
3732
4362
  compile: floatingGlassHeader
3733
4363
  }
3734
4364
  ];
@@ -3809,12 +4439,110 @@ function brandTwoBandFooter(theme) {
3809
4439
  }
3810
4440
  };
3811
4441
  }
4442
+ function centeredCalmFooter(theme) {
4443
+ return {
4444
+ ...theme.footer,
4445
+ variant: "simple",
4446
+ maxWidth: "container",
4447
+ background: {
4448
+ type: "color",
4449
+ color: "surfaceAlt"
4450
+ },
4451
+ navStyle: "minimal",
4452
+ navWeight: "regular",
4453
+ navColor: "text",
4454
+ navLinkStyle: {
4455
+ typography: "body",
4456
+ fontWeight: "regular",
4457
+ textTransform: "none",
4458
+ italic: false,
4459
+ colorToken: "text",
4460
+ hoverColorToken: "primary",
4461
+ padding: "none",
4462
+ borderRadius: "none"
4463
+ },
4464
+ navLayout: {
4465
+ layout: "inline-wrap",
4466
+ align: "center",
4467
+ gapX: "relaxed",
4468
+ gapY: "tight"
4469
+ },
4470
+ logo: {
4471
+ showLogo: true,
4472
+ showLogoText: false,
4473
+ placement: "above",
4474
+ size: "sm",
4475
+ align: "center"
4476
+ },
4477
+ bottomBar: {
4478
+ enabled: true,
4479
+ fullBleed: false,
4480
+ textAlign: "center",
4481
+ paddingX: "default",
4482
+ paddingY: "compact",
4483
+ borderTop: {
4484
+ width: "thin"
4485
+ }
4486
+ }
4487
+ };
4488
+ }
4489
+ function editorialColumnsFooter(theme) {
4490
+ return {
4491
+ ...theme.footer,
4492
+ variant: "columns",
4493
+ maxWidth: "container",
4494
+ background: {
4495
+ type: "color",
4496
+ color: "surface"
4497
+ },
4498
+ navStyle: "minimal",
4499
+ navWeight: "regular",
4500
+ navColor: "text",
4501
+ navLinkStyle: {
4502
+ typography: "body",
4503
+ fontWeight: "regular",
4504
+ textTransform: "none",
4505
+ italic: false,
4506
+ colorToken: "text",
4507
+ hoverColorToken: "primary",
4508
+ padding: "none",
4509
+ borderRadius: "none"
4510
+ },
4511
+ logo: {
4512
+ showLogo: true,
4513
+ showLogoText: true,
4514
+ placement: "left",
4515
+ size: "sm",
4516
+ align: "start"
4517
+ },
4518
+ bottomBar: {
4519
+ enabled: true,
4520
+ fullBleed: false,
4521
+ textAlign: "center",
4522
+ paddingX: "default",
4523
+ paddingY: "compact",
4524
+ borderTop: {
4525
+ width: "thin"
4526
+ }
4527
+ }
4528
+ };
4529
+ }
3812
4530
  var footerLookCatalog = [
3813
4531
  {
3814
4532
  id: asFooterLookId("footer-muted-grounding"),
3815
4533
  label: "Muted grounding footer",
3816
4534
  compile: mutedGroundingFooter
3817
4535
  },
4536
+ {
4537
+ id: asFooterLookId("footer-centered-calm"),
4538
+ label: "Centered calm footer",
4539
+ compile: centeredCalmFooter
4540
+ },
4541
+ {
4542
+ id: asFooterLookId("footer-editorial-columns"),
4543
+ label: "Editorial columns footer",
4544
+ compile: editorialColumnsFooter
4545
+ },
3818
4546
  {
3819
4547
  id: asFooterLookId("site-footer-brand-two-band"),
3820
4548
  label: "Two-band brand footer",
@@ -3844,7 +4572,7 @@ var generatedDesignOptionCatalog = {
3844
4572
  source: "generated",
3845
4573
  sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
3846
4574
  contentFrames: generatedContentFrames,
3847
- itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
4575
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial"],
3848
4576
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
3849
4577
  emphases: ["low", "medium", "high"],
3850
4578
  detachedCustom: false
@@ -3853,11 +4581,7 @@ var userDesignOptionCatalog = {
3853
4581
  source: "user",
3854
4582
  sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
3855
4583
  contentFrames: userContentFrames,
3856
- itemSurfaces: [
3857
- ...generatedDesignOptionCatalog.itemSurfaces,
3858
- "inset",
3859
- "editorial"
3860
- ],
4584
+ itemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
3861
4585
  transitions: [
3862
4586
  ...generatedDesignOptionCatalog.transitions,
3863
4587
  "wave-edge",
@@ -4250,6 +4974,10 @@ function defineCuratedSiteStyle(input) {
4250
4974
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
4251
4975
  supportedTransitions: generatedDesignOptionCatalog.transitions
4252
4976
  },
4977
+ // Decoration is opt-in per style so it stays a distinguishing feature, not
4978
+ // wallpaper. Styles that want a mark set `headingDecoration` explicitly;
4979
+ // clean/minimal styles default to none.
4980
+ headingDecoration: input.headingDecoration ?? noHeadingDecoration,
4253
4981
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
4254
4982
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
4255
4983
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
@@ -4436,6 +5164,11 @@ var curatedSiteStyles = [
4436
5164
  defineCuratedSiteStyle({
4437
5165
  id: "site-style:calm-studio",
4438
5166
  name: "Calm Studio",
5167
+ themeOverrides: {
5168
+ accordions: calmPanelAccordionSystem,
5169
+ testimonialQuote: serifDisplayQuote
5170
+ },
5171
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4439
5172
  description: "Soft, measured, and spacious for intimate appointment or class businesses.",
4440
5173
  generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
4441
5174
  tokenRecipes: {
@@ -4469,6 +5202,10 @@ var curatedSiteStyles = [
4469
5202
  defineCuratedSiteStyle({
4470
5203
  id: "site-style:clear-professional",
4471
5204
  name: "Clear Professional",
5205
+ themeOverrides: {
5206
+ accordions: calmPanelAccordionSystem,
5207
+ testimonialQuote: accentGlyphQuote
5208
+ },
4472
5209
  description: "Crisp, trustworthy, and direct for local services and consultancies.",
4473
5210
  generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
4474
5211
  tokenRecipes: {
@@ -4500,6 +5237,11 @@ var curatedSiteStyles = [
4500
5237
  defineCuratedSiteStyle({
4501
5238
  id: "site-style:warm-editorial",
4502
5239
  name: "Warm Editorial",
5240
+ themeOverrides: {
5241
+ accordions: editorialDividedAccordionSystem,
5242
+ testimonialQuote: serifDisplayQuote
5243
+ },
5244
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4503
5245
  description: "Story-led and textured for educators, makers, venues, and retreats.",
4504
5246
  generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
4505
5247
  tokenRecipes: {
@@ -4532,6 +5274,11 @@ var curatedSiteStyles = [
4532
5274
  defineCuratedSiteStyle({
4533
5275
  id: "site-style:bright-community",
4534
5276
  name: "Bright Community",
5277
+ themeOverrides: {
5278
+ accordions: warmInsetAccordionSystem,
5279
+ testimonialQuote: accentGlyphQuote
5280
+ },
5281
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4535
5282
  description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
4536
5283
  generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
4537
5284
  tokenRecipes: {
@@ -4563,6 +5310,10 @@ var curatedSiteStyles = [
4563
5310
  defineCuratedSiteStyle({
4564
5311
  id: "site-style:quiet-luxury",
4565
5312
  name: "Quiet Luxury",
5313
+ themeOverrides: {
5314
+ accordions: quietUnderlinedAccordionSystem,
5315
+ testimonialQuote: serifDisplayQuote
5316
+ },
4566
5317
  description: "Minimal, confident, and refined for premium experiences and private services.",
4567
5318
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
4568
5319
  siteCreatorSelection: {
@@ -4605,6 +5356,10 @@ var curatedSiteStyles = [
4605
5356
  defineCuratedSiteStyle({
4606
5357
  id: "site-style:practical-services",
4607
5358
  name: "Practical Services",
5359
+ themeOverrides: {
5360
+ accordions: boldBorderedAccordionSystem,
5361
+ testimonialQuote: accentGlyphQuote
5362
+ },
4608
5363
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
4609
5364
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
4610
5365
  siteCreatorSelection: { kind: "primary_goal_support" },
@@ -4645,6 +5400,11 @@ var curatedSiteStyles = [
4645
5400
  defineCuratedSiteStyle({
4646
5401
  id: "site-style:modern-wellness",
4647
5402
  name: "Modern Wellness",
5403
+ themeOverrides: {
5404
+ accordions: quietUnderlinedAccordionSystem,
5405
+ testimonialQuote: serifDisplayQuote
5406
+ },
5407
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4648
5408
  description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
4649
5409
  generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
4650
5410
  tokenRecipes: {
@@ -4676,6 +5436,10 @@ var curatedSiteStyles = [
4676
5436
  defineCuratedSiteStyle({
4677
5437
  id: "site-style:quiet-practice",
4678
5438
  name: "Quiet Practice",
5439
+ themeOverrides: {
5440
+ accordions: quietUnderlinedAccordionSystem,
5441
+ testimonialQuote: serifDisplayQuote
5442
+ },
4679
5443
  description: "Grounded, calm, and practical for small appointment-first practices.",
4680
5444
  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.",
4681
5445
  siteCreatorSelection: {
@@ -4721,6 +5485,7 @@ var curatedSiteStyles = [
4721
5485
  defineCuratedSiteStyle({
4722
5486
  id: "site-style:clarity-zen-blue",
4723
5487
  name: "Clarity Zen",
5488
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4724
5489
  description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
4725
5490
  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.",
4726
5491
  siteCreatorSelection: {
@@ -4744,17 +5509,22 @@ var curatedSiteStyles = [
4744
5509
  },
4745
5510
  compositionBudget: balancedBudget,
4746
5511
  themeOverrides: {
5512
+ accordions: editorialDividedAccordionSystem,
5513
+ cards: clarityZenCardSystem,
5514
+ testimonialQuote: serifDisplayQuote,
4747
5515
  typography: {
4748
5516
  body: {
4749
- family: "Inter, system-ui, sans-serif",
5517
+ family: "Roboto, system-ui, sans-serif",
4750
5518
  size: "md",
4751
5519
  weight: "regular",
4752
5520
  lineHeight: "relaxed",
4753
5521
  letterSpacing: "normal"
4754
5522
  },
4755
5523
  headings: {
5524
+ // Forum ships a single 400 weight; keep every heading weight
5525
+ // 'regular' so the Google Fonts request stays valid.
4756
5526
  default: {
4757
- family: '"Cormorant Garamond", Georgia, serif',
5527
+ family: "Forum, Georgia, serif",
4758
5528
  weight: "regular",
4759
5529
  lineHeight: "normal",
4760
5530
  letterSpacing: "normal",
@@ -4770,7 +5540,7 @@ var curatedSiteStyles = [
4770
5540
  italic: null
4771
5541
  },
4772
5542
  h2: {
4773
- size: "lg",
5543
+ size: "xl",
4774
5544
  weight: "regular",
4775
5545
  lineHeight: "normal",
4776
5546
  letterSpacing: "normal",
@@ -4798,10 +5568,13 @@ var curatedSiteStyles = [
4798
5568
  },
4799
5569
  recommendedAppearancePresetIds: [
4800
5570
  "hero-split-editorial",
5571
+ "intro-portrait-bio",
4801
5572
  "intro-organic-statement",
4802
- "feature-cards-raised-rule",
5573
+ "feature-cards-soft-panels",
5574
+ "feature-cards-editorial-columns",
5575
+ "feature-cards-photo-tiles",
4803
5576
  "media-text-quiet-story",
4804
- "testimonials-brand-background-quotes",
5577
+ "testimonials-non-carded",
4805
5578
  "faq-contained-help",
4806
5579
  "contact-form-panel"
4807
5580
  ],
@@ -4811,8 +5584,9 @@ var curatedSiteStyles = [
4811
5584
  "minimal-transparent"
4812
5585
  ],
4813
5586
  recommendedFooterLookIds: [
4814
- "footer-muted-grounding",
4815
- "site-footer-brand-two-band"
5587
+ "footer-centered-calm",
5588
+ "footer-editorial-columns",
5589
+ "footer-muted-grounding"
4816
5590
  ],
4817
5591
  buttonPersonalityChoices: [
4818
5592
  buttonChoice("soft-pill"),
@@ -4820,7 +5594,7 @@ var curatedSiteStyles = [
4820
5594
  buttonChoice("editorial-link")
4821
5595
  ],
4822
5596
  paletteVariantChoices: [
4823
- paletteChoice("brand-led-cool"),
5597
+ paletteChoice("soft-natural-lilac"),
4824
5598
  paletteChoice("soft-natural-watercolor"),
4825
5599
  paletteChoice("soft-natural-stone"),
4826
5600
  paletteChoice("warm-neutral-cream")
@@ -4829,6 +5603,11 @@ var curatedSiteStyles = [
4829
5603
  defineCuratedSiteStyle({
4830
5604
  id: "site-style:personal-retreat-journal",
4831
5605
  name: "Personal Retreat Journal",
5606
+ themeOverrides: {
5607
+ accordions: editorialDividedAccordionSystem,
5608
+ testimonialQuote: serifDisplayQuote
5609
+ },
5610
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
4832
5611
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
4833
5612
  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.",
4834
5613
  siteCreatorSelection: {
@@ -4873,6 +5652,11 @@ var curatedSiteStyles = [
4873
5652
  defineCuratedSiteStyle({
4874
5653
  id: "site-style:tactile-workshop",
4875
5654
  name: "Tactile Workshop",
5655
+ themeOverrides: {
5656
+ accordions: warmInsetAccordionSystem,
5657
+ testimonialQuote: accentGlyphQuote
5658
+ },
5659
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
4876
5660
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
4877
5661
  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.",
4878
5662
  siteCreatorSelection: {
@@ -4923,6 +5707,7 @@ var curatedSiteStyles = [
4923
5707
  defineCuratedSiteStyle({
4924
5708
  id: SOFT_EARTH_SITE_STYLE_ID,
4925
5709
  name: "Soft Earth",
5710
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
4926
5711
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
4927
5712
  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.",
4928
5713
  siteCreatorSelection: {
@@ -4995,7 +5780,8 @@ var curatedSiteStyles = [
4995
5780
  headingSize: "editorial"
4996
5781
  }
4997
5782
  },
4998
- accordions: softEarthAccordionSystem
5783
+ accordions: softEarthAccordionSystem,
5784
+ testimonialQuote: accentGlyphQuote
4999
5785
  },
5000
5786
  defaultBlockVariants: {
5001
5787
  "block.faq": "question-columns"
@@ -5005,7 +5791,7 @@ var curatedSiteStyles = [
5005
5791
  "intro-organic-statement",
5006
5792
  "feature-cards-raised-rule",
5007
5793
  "events-lined-panel",
5008
- "testimonials-brand-background-quotes",
5794
+ "testimonials-non-carded",
5009
5795
  "contact-form-panel"
5010
5796
  ],
5011
5797
  recommendedHeaderLookIds: [
@@ -5033,6 +5819,11 @@ var curatedSiteStyles = [
5033
5819
  defineCuratedSiteStyle({
5034
5820
  id: "site-style:bold-launch",
5035
5821
  name: "Bold Launch",
5822
+ themeOverrides: {
5823
+ accordions: boldBorderedAccordionSystem,
5824
+ testimonialQuote: accentGlyphQuote
5825
+ },
5826
+ headingDecoration: { family: "short-center-rule", colorToken: "primary" },
5036
5827
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
5037
5828
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
5038
5829
  siteCreatorSelection: {
@@ -5078,6 +5869,7 @@ var curatedSiteStyles = [
5078
5869
  defineCuratedSiteStyle({
5079
5870
  id: "site-style:south-west-twerk-school",
5080
5871
  name: "South West Twerk School",
5872
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
5081
5873
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
5082
5874
  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.",
5083
5875
  tokenRecipes: {
@@ -5097,6 +5889,9 @@ var curatedSiteStyles = [
5097
5889
  ],
5098
5890
  defaultTypographyPresetId: "typography-preset:bold-display",
5099
5891
  themeOverrides: {
5892
+ accordions: boldBorderedAccordionSystem,
5893
+ cards: southWestCardSystem,
5894
+ testimonialQuote: accentGlyphQuote,
5100
5895
  bodyText: {
5101
5896
  intro: {
5102
5897
  paragraphSize: "editorial",
@@ -5109,7 +5904,7 @@ var curatedSiteStyles = [
5109
5904
  "hero-brand-scrim-fixed-frame",
5110
5905
  "body-text-editorial-intro",
5111
5906
  "schedule-details-brand-depth",
5112
- "testimonials-accent-quote-cards",
5907
+ "testimonials-statement-cards",
5113
5908
  "contact-form-brand-depth-card"
5114
5909
  ],
5115
5910
  recommendedHeaderLookIds: [
@@ -5812,14 +6607,77 @@ ${root} {
5812
6607
  }
5813
6608
 
5814
6609
  // ../theme-core/src/blocks/vars/testimonials.ts
5815
- function generateTestimonialsVars({ themeId }) {
6610
+ var QUOTE_SCALE_SIZE = {
6611
+ sm: "2.5rem",
6612
+ md: "3.5rem",
6613
+ // 4.375rem == 3.5rem * 1.25, matching the legacy accent-quote mark size.
6614
+ lg: "4.375rem",
6615
+ xl: "clamp(3.5rem, 2rem + 4vw, 5.5rem)"
6616
+ };
6617
+ function resolveTestimonialQuoteVars(treatment) {
6618
+ if (!treatment) {
6619
+ return {
6620
+ size: QUOTE_SCALE_SIZE.md,
6621
+ opacity: "0.08",
6622
+ color: "rgb(var(--tb-primary))",
6623
+ font: "inherit",
6624
+ weight: "700",
6625
+ display: "block"
6626
+ };
6627
+ }
6628
+ if (treatment.style === "none") {
6629
+ return {
6630
+ size: QUOTE_SCALE_SIZE.md,
6631
+ opacity: "0",
6632
+ color: "rgb(var(--tb-primary))",
6633
+ font: "inherit",
6634
+ weight: "700",
6635
+ display: "none"
6636
+ };
6637
+ }
6638
+ const base = treatment.style === "serif-display" ? {
6639
+ fontFamily: "heading",
6640
+ scale: "xl",
6641
+ colorToken: "primary",
6642
+ opacity: 1
6643
+ } : {
6644
+ // accent-glyph
6645
+ fontFamily: "body",
6646
+ scale: "lg",
6647
+ colorToken: "secondary",
6648
+ opacity: 1
6649
+ };
6650
+ const fontFamily = treatment.fontFamily ?? base.fontFamily;
6651
+ const scale = treatment.scale ?? base.scale;
6652
+ const colorToken = treatment.colorToken ?? base.colorToken;
6653
+ const opacity = treatment.opacity ?? base.opacity;
6654
+ return {
6655
+ size: QUOTE_SCALE_SIZE[scale],
6656
+ opacity: String(opacity),
6657
+ color: rgbColorValue(colorToken),
6658
+ font: fontFamily === "heading" ? "var(--font-heading)" : "var(--font-body, inherit)",
6659
+ // Heading-font display marks render at the family's natural weight (Forum
6660
+ // ships a single 400) to avoid synthetic bold; glyph marks stay heavy.
6661
+ weight: fontFamily === "heading" ? "400" : "700",
6662
+ display: "block"
6663
+ };
6664
+ }
6665
+ function generateTestimonialsVars({
6666
+ themeId,
6667
+ theme
6668
+ }) {
5816
6669
  const root = `:where([data-theme-scope="${themeId}"]) :where([data-block="testimonials"])`;
6670
+ const quote = resolveTestimonialQuoteVars(theme.testimonialQuote);
5817
6671
  return `
5818
6672
  ${root} {
5819
6673
  --rb-testimonial-avatar-size: 3rem;
5820
6674
  --rb-testimonial-avatar-border-radius: 9999px;
5821
- --rb-testimonial-quote-size: 3.5rem;
5822
- --rb-testimonial-quote-opacity: 0.08;
6675
+ --rb-testimonial-quote-size: ${quote.size};
6676
+ --rb-testimonial-quote-opacity: ${quote.opacity};
6677
+ --rb-testimonial-quote-color: ${quote.color};
6678
+ --rb-testimonial-quote-font: ${quote.font};
6679
+ --rb-testimonial-quote-weight: ${quote.weight};
6680
+ --rb-testimonial-quote-display: ${quote.display};
5823
6681
 
5824
6682
  /* Carousel arrows (defaults: primary background + onPrimary icon) */
5825
6683
  --rb-testimonial-carousel-arrow-bg: rgb(var(--tb-primary));
@@ -7616,41 +8474,52 @@ var containerResponsiveThemeCss = `/*
7616
8474
  }
7617
8475
 
7618
8476
  .rb-container-pad-none {
7619
- padding: 0;
8477
+ --rb-card-pad: 0rem;
8478
+ padding: var(--rb-card-pad);
7620
8479
  }
7621
8480
  .rb-container-pad-compact {
7622
- padding: 1rem;
8481
+ --rb-card-pad: 1rem;
8482
+ padding: var(--rb-card-pad);
7623
8483
  }
7624
8484
  .rb-container-pad-cozy {
7625
- padding: 1.5rem;
8485
+ --rb-card-pad: 1.5rem;
8486
+ padding: var(--rb-card-pad);
7626
8487
  }
7627
8488
  .rb-container-pad-medium {
7628
- padding: 1.5rem;
8489
+ --rb-card-pad: 1.5rem;
8490
+ padding: var(--rb-card-pad);
7629
8491
  }
7630
8492
  .rb-container-pad-comfortable {
7631
- padding: 2rem;
8493
+ --rb-card-pad: 2rem;
8494
+ padding: var(--rb-card-pad);
7632
8495
  }
7633
8496
  .rb-container-pad-spacious {
7634
- padding: 2.5rem;
8497
+ --rb-card-pad: 2.5rem;
8498
+ padding: var(--rb-card-pad);
7635
8499
  }
7636
8500
 
7637
8501
  @container rb-site (min-width: 640px) {
7638
8502
 
7639
8503
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
7640
8504
  .rb-container-pad-compact {
7641
- padding: 1.5rem;
8505
+ --rb-card-pad: 1.5rem;
8506
+ padding: var(--rb-card-pad);
7642
8507
  }
7643
8508
  .rb-container-pad-cozy {
7644
- padding: 2rem;
8509
+ --rb-card-pad: 2rem;
8510
+ padding: var(--rb-card-pad);
7645
8511
  }
7646
8512
  .rb-container-pad-medium {
7647
- padding: 2rem;
8513
+ --rb-card-pad: 2rem;
8514
+ padding: var(--rb-card-pad);
7648
8515
  }
7649
8516
  .rb-container-pad-comfortable {
7650
- padding: 2.5rem;
8517
+ --rb-card-pad: 2.5rem;
8518
+ padding: var(--rb-card-pad);
7651
8519
  }
7652
8520
  .rb-container-pad-spacious {
7653
- padding: 3.5rem;
8521
+ --rb-card-pad: 3.5rem;
8522
+ padding: var(--rb-card-pad);
7654
8523
  }
7655
8524
  }
7656
8525
 
@@ -7825,8 +8694,15 @@ var containerResponsiveThemeCss = `/*
7825
8694
  /* Shared: Site document overlay header clearance */
7826
8695
  /* -------------------------------------------------------------------------- */
7827
8696
 
7828
- :where(.theme-scope) :where([data-site-document-overlay-content='true']) :where([data-block]):first-of-type > :where([data-slot='section']) > :where(.rb-container) {
7829
- padding-top: calc(var(--site-overlay-header-clearance, 0px) + var(--site-overlay-opening-content-extra-pad, 0px));
8697
+ :where(.theme-scope)
8698
+ :where([data-site-document-overlay-content='true'])
8699
+ :where([data-block]):first-of-type
8700
+ > :where([data-slot='section'])
8701
+ > :where(.rb-container) {
8702
+ padding-top: calc(
8703
+ var(--site-overlay-header-clearance, 0px) +
8704
+ var(--site-overlay-opening-content-extra-pad, 0px)
8705
+ );
7830
8706
  }
7831
8707
 
7832
8708
  /* -------------------------------------------------------------------------- */
@@ -7912,6 +8788,22 @@ var containerResponsiveThemeCss = `/*
7912
8788
  }
7913
8789
  }
7914
8790
 
8791
+ /* -------------------------------------------------------------------------- */
8792
+ /* Header: Mobile floating/glass backing */
8793
+ /* -------------------------------------------------------------------------- */
8794
+
8795
+ :where(.theme-scope) .header-variant-floating .header-mobile-bar {
8796
+ align-items: flex-start;
8797
+ margin-top: 0.75rem;
8798
+ }
8799
+
8800
+ :where(.theme-scope) .header-variant-floating .nav-mobile-toggle {
8801
+ border: 1px solid rgb(var(--tb-border) / 0.82);
8802
+ background: rgb(var(--tb-surface) / 0.96);
8803
+ color: rgb(var(--tb-text));
8804
+ box-shadow: 0 10px 28px rgb(var(--tb-neutral-950) / 0.12);
8805
+ }
8806
+
7915
8807
  /*
7916
8808
  * Theme Scope Styles
7917
8809
  *
@@ -8848,6 +9740,56 @@ var containerResponsiveThemeCss = `/*
8848
9740
  transition: height 300ms var(--motion-ease, ease);
8849
9741
  }
8850
9742
 
9743
+ :where(.theme-scope) .header-logo-size-compact.rb-header-logo-sm {
9744
+ height: 2rem;
9745
+ }
9746
+ :where(.theme-scope) .header-logo-size-compact.rb-header-logo-lg {
9747
+ height: 2.5rem;
9748
+ }
9749
+ :where(.theme-scope) .header-logo-size-standard.rb-header-logo-sm {
9750
+ height: 2.5rem;
9751
+ }
9752
+ :where(.theme-scope) .header-logo-size-standard.rb-header-logo-lg {
9753
+ height: 3rem;
9754
+ }
9755
+ :where(.theme-scope) .header-logo-size-generous.rb-header-logo-sm {
9756
+ height: 3.5rem;
9757
+ }
9758
+ :where(.theme-scope) .header-logo-size-generous.rb-header-logo-lg {
9759
+ height: 4.5rem;
9760
+ }
9761
+ :where(.theme-scope) .header-logo-size-display.rb-header-logo-sm {
9762
+ height: 7.5rem;
9763
+ }
9764
+ :where(.theme-scope) .header-logo-size-display.rb-header-logo-lg {
9765
+ height: 8rem;
9766
+ }
9767
+
9768
+ :where(.theme-scope) .header-logo-accommodation-plate,
9769
+ :where(.theme-scope) .header-logo-accommodation-centered-badge,
9770
+ :where(.theme-scope) .header-logo-accommodation-popout-badge,
9771
+ :where(.theme-scope) .header-logo-accommodation-centered-masthead {
9772
+ border-radius: var(--radius-md, 0.5rem);
9773
+ background: var(--color-surface, #fff);
9774
+ box-shadow: var(--shadow-sm, 0 1px 2px rgb(0 0 0 / 0.08));
9775
+ padding: 0.5rem;
9776
+ }
9777
+
9778
+ :where(.theme-scope) .header-logo-accommodation-popout-badge {
9779
+ position: relative;
9780
+ z-index: 1;
9781
+ margin-block: -0.35rem -0.9rem;
9782
+ }
9783
+
9784
+ :where(.theme-scope)
9785
+ .header-logo-size-display.header-logo-accommodation-popout-badge {
9786
+ margin-block: -0.75rem -2rem;
9787
+ }
9788
+
9789
+ :where(.theme-scope) .header-logo-accommodation-centered-masthead {
9790
+ padding: 0.75rem 1rem;
9791
+ }
9792
+
8851
9793
  /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
8852
9794
  :where(.theme-scope) .header-logo-text {
8853
9795
  font-size: 1.125rem; /* matches rb-text-lg */
@@ -8886,13 +9828,45 @@ var containerResponsiveThemeCss = `/*
8886
9828
  :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
8887
9829
  height: 2.5rem;
8888
9830
  }
9831
+ :where(.theme-scope)
9832
+ .rb-header-shrink.header-scrolled
9833
+ .header-logo-size-generous.rb-header-logo-sm {
9834
+ height: 2.75rem;
9835
+ }
9836
+ :where(.theme-scope)
9837
+ .rb-header-shrink.header-scrolled
9838
+ .header-logo-size-generous.rb-header-logo-lg {
9839
+ height: 3.25rem;
9840
+ }
9841
+ :where(.theme-scope)
9842
+ .rb-header-shrink.header-scrolled
9843
+ .header-logo-size-display.rb-header-logo-sm,
9844
+ :where(.theme-scope)
9845
+ .rb-header-shrink.header-scrolled
9846
+ .header-logo-size-display.rb-header-logo-lg {
9847
+ height: 5rem;
9848
+ }
8889
9849
  :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
8890
9850
  font-size: 0.875rem;
8891
9851
  }
8892
9852
 
8893
9853
  @container rb-site (max-width: 767px) {
8894
9854
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
8895
- :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
9855
+ :where(.theme-scope) .header-logo-size-generous.rb-header-logo-sm,
9856
+ :where(.theme-scope) .header-logo-size-generous.rb-header-logo-lg {
9857
+ height: 3rem;
9858
+ }
9859
+
9860
+ :where(.theme-scope) .header-logo-size-display.rb-header-logo-sm,
9861
+ :where(.theme-scope) .header-logo-size-display.rb-header-logo-lg {
9862
+ height: 5.5rem;
9863
+ }
9864
+
9865
+ :where(.theme-scope) .header-logo-accommodation-popout-badge {
9866
+ margin-block: 0;
9867
+ }
9868
+
9869
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
8896
9870
  font-size: 0.75rem;
8897
9871
  }
8898
9872
  }
@@ -13682,11 +14656,13 @@ var containerResponsiveThemeCss = `/*
13682
14656
  }
13683
14657
 
13684
14658
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
14659
+ display: var(--rb-testimonial-quote-display, block);
14660
+ font-family: var(--rb-testimonial-quote-font, inherit);
13685
14661
  font-size: var(--rb-testimonial-quote-size);
13686
14662
  line-height: 1;
13687
- font-weight: 700;
14663
+ font-weight: var(--rb-testimonial-quote-weight, 700);
13688
14664
  opacity: var(--rb-testimonial-quote-opacity);
13689
- color: rgb(var(--tb-primary));
14665
+ color: var(--rb-testimonial-quote-color, rgb(var(--tb-primary)));
13690
14666
  }
13691
14667
 
13692
14668
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-accent-quote .rb-testimonial-quote {
@@ -13695,6 +14671,61 @@ var containerResponsiveThemeCss = `/*
13695
14671
  opacity: 1;
13696
14672
  }
13697
14673
 
14674
+ /* Open editorial testimonial card: boxless, with a hairline rule before the
14675
+ * attribution, an accent ring on the avatar, and comfortable prose. The quote
14676
+ * mark itself is owned by the site-style quote treatment (see the
14677
+ * --rb-testimonial-quote-* vars), not by these rules.
14678
+ *
14679
+ * \`editorial-open\` is the current non-carded look; \`editorial-serif-quote\` is
14680
+ * retained for content saved before the decomposition. */
14681
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-editorial-open,
14682
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-editorial-serif-quote {
14683
+ background: transparent;
14684
+ border: 0;
14685
+ border-radius: 0;
14686
+ padding: 0.25rem clamp(0.5rem, 1.5vw, 1.5rem);
14687
+ }
14688
+
14689
+ /* styledCard always renders an inner white rb-bg-surface fill layer; a boxless
14690
+ * card must clear it so the section band shows through (otherwise: white box). */
14691
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-open > .rb-bg-surface,
14692
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-serif-quote > .rb-bg-surface {
14693
+ background: transparent;
14694
+ }
14695
+
14696
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-open .rb-prose,
14697
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-serif-quote .rb-prose {
14698
+ font-size: 1.0625rem;
14699
+ line-height: 1.7;
14700
+ }
14701
+
14702
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-open .rb-testimonial-attribution,
14703
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-serif-quote .rb-testimonial-attribution {
14704
+ margin-top: 1.25rem;
14705
+ padding-top: 1.25rem;
14706
+ border-top: 1px solid rgba(var(--tb-border), 0.75);
14707
+ }
14708
+
14709
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-open .rb-testimonial-avatar,
14710
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-editorial-serif-quote .rb-testimonial-avatar {
14711
+ box-shadow:
14712
+ 0 0 0 2px rgb(var(--tb-surface)),
14713
+ 0 0 0 4px rgba(var(--tb-primary), 0.3);
14714
+ }
14715
+
14716
+
14717
+ /* Split grid: title column + cards. On desktop the title takes one quarter and
14718
+ * the cards fill the remaining three quarters (so title + 3 cards each read as
14719
+ * a quarter). Stacks on mobile. */
14720
+ @container rb-site (min-width: 1024px) {
14721
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
14722
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-split-grid {
14723
+ grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
14724
+ align-items: start;
14725
+ }
14726
+ }
14727
+ }
14728
+
13698
14729
 
13699
14730
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
13700
14731
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -15180,10 +16211,10 @@ var containerResponsiveThemeCss = `/*
15180
16211
 
15181
16212
  :where(.theme-scope) .event-compact-row {
15182
16213
  display: grid;
15183
- grid-template-columns: clamp(5.5rem, 8vw, 8rem) minmax(0, 1fr) clamp(15rem, 24vw, 21rem);
16214
+ grid-template-columns: clamp(5rem, 7vw, 7rem) minmax(0, 1fr) clamp(15rem, 24vw, 21rem);
15184
16215
  align-items: center;
15185
- min-height: 8.75rem;
15186
- padding: 1.55rem clamp(1.5rem, 3vw, 2.6rem);
16216
+ min-height: 6.75rem;
16217
+ padding: 1.35rem clamp(1.5rem, 3vw, 2.6rem);
15187
16218
  border-bottom: 1px solid var(--event-compact-divider-color);
15188
16219
  transition: background-color 150ms ease;
15189
16220
  }
@@ -15222,10 +16253,10 @@ var containerResponsiveThemeCss = `/*
15222
16253
  :where(.theme-scope) .event-compact-row-date-day {
15223
16254
  display: grid;
15224
16255
  place-items: center;
15225
- min-block-size: clamp(2.7rem, 4.5vw, 3.7rem);
16256
+ min-block-size: clamp(2rem, 3vw, 2.6rem);
15226
16257
  color: rgb(var(--tb-text, 17 24 39));
15227
16258
  font-family: var(--font-heading, var(--font-body, inherit));
15228
- font-size: clamp(2.3rem, 4.2vw, 3.35rem);
16259
+ font-size: clamp(1.7rem, 1.35rem + 1.1vw, 2.35rem);
15229
16260
  font-weight: 400;
15230
16261
  line-height: 1;
15231
16262
  }
@@ -15245,9 +16276,10 @@ var containerResponsiveThemeCss = `/*
15245
16276
  margin: 0;
15246
16277
  color: rgb(var(--tb-text, 17 24 39));
15247
16278
  font-family: var(--font-heading, var(--font-body, inherit));
15248
- font-size: clamp(1.55rem, 2.6vw, 2.4rem);
16279
+ /* Row titles sit at the theme's h3 scale so section headings stay dominant */
16280
+ font-size: var(--fs-h3-fluid, clamp(1.1rem, 1rem + 0.7vw, 1.5rem));
15249
16281
  font-weight: 400;
15250
- line-height: 1.05;
16282
+ line-height: 1.2;
15251
16283
  overflow: hidden;
15252
16284
  text-overflow: ellipsis;
15253
16285
  white-space: nowrap;
@@ -15360,7 +16392,7 @@ var containerResponsiveThemeCss = `/*
15360
16392
  }
15361
16393
 
15362
16394
  :where(.theme-scope) .event-compact-row-date-day {
15363
- font-size: 2.35rem;
16395
+ font-size: 1.85rem;
15364
16396
  }
15365
16397
 
15366
16398
  :where(.theme-scope) .event-compact-row-content {
@@ -15370,7 +16402,7 @@ var containerResponsiveThemeCss = `/*
15370
16402
  }
15371
16403
 
15372
16404
  :where(.theme-scope) .event-compact-row-title {
15373
- font-size: clamp(1.35rem, 8vw, 1.9rem);
16405
+ font-size: clamp(1.15rem, 5vw, 1.35rem);
15374
16406
  white-space: normal;
15375
16407
  }
15376
16408
 
@@ -15450,19 +16482,23 @@ var containerResponsiveThemeCss = `/*
15450
16482
  * =============================================================================
15451
16483
  */
15452
16484
 
15453
- :where(.theme-scope) .rb-heading-decoration {
16485
+ /*
16486
+ * The mark sits inside a full-width block row so it inherits the heading group's
16487
+ * \`text-align\`: a centred heading centres the mark, a left-aligned heading keeps
16488
+ * it at the start. The heading stacks are flexbox, where \`text-align\` positions
16489
+ * inline content but not flex items \u2014 so the row (a stretched block flex item)
16490
+ * is what carries the alignment, and the inline-block mark follows it. Alignment
16491
+ * is never configured directly; it follows the heading.
16492
+ */
16493
+ :where(.theme-scope) .rb-heading-decoration-row {
15454
16494
  display: block;
15455
- flex: 0 0 auto;
15456
- pointer-events: none;
15457
- }
15458
-
15459
- :where(.theme-scope) .rb-heading-decoration-placement-after-heading {
16495
+ width: 100%;
15460
16496
  margin-top: 0.35rem;
16497
+ pointer-events: none;
15461
16498
  }
15462
16499
 
15463
- :where(.theme-scope) .rb-heading-decoration-placement-under-centered-heading {
15464
- margin-left: auto;
15465
- margin-right: auto;
16500
+ :where(.theme-scope) .rb-heading-decoration {
16501
+ display: inline-block;
15466
16502
  }
15467
16503
 
15468
16504
  :where(.theme-scope) .rb-heading-decoration-organic-squiggle {
@@ -15558,6 +16594,96 @@ var containerResponsiveThemeCss = `/*
15558
16594
  :where(.theme-scope) .rb-feature-card-icon-zone--plain .rb-feature-card-icon {
15559
16595
  width: 1.5rem;
15560
16596
  height: 1.5rem;
16597
+ }
16598
+
16599
+ /* =============================================================================
16600
+ * Shared: Card treatments
16601
+ *
16602
+ * Visual treatments referenced from \`_cardStyles.treatment\` (see
16603
+ * cardStylesOverrideSchema). Class names are emitted by the boxStyles
16604
+ * transform in @riverbankcms/blocks.
16605
+ *
16606
+ * Also contains feature-card media/padding behaviour shared by all looks:
16607
+ * - card images bleed to the card edges (flush photo tops)
16608
+ * - card-level padding replaces the content stack's fallback padding so the
16609
+ * two never stack up
16610
+ * ============================================================================= */
16611
+
16612
+ /* --- Feature card media + padding behaviour (all looks) -------------------- */
16613
+
16614
+ /*
16615
+ * When a look gives the card real padding (rb-container-pad-*), the image
16616
+ * bleeds to the card edges and the inner content stack drops its fallback
16617
+ * padding so insets don't double up.
16618
+ */
16619
+ :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-media {
16620
+ width: calc(100% + 2 * var(--rb-card-pad, 0rem));
16621
+ max-width: none;
16622
+ margin: calc(-1 * var(--rb-card-pad, 0rem)) calc(-1 * var(--rb-card-pad, 0rem)) 0;
16623
+ }
16624
+
16625
+ :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-media + .rb-feature-card-content {
16626
+ margin-top: 1.4rem;
16627
+ }
16628
+
16629
+ :where(.theme-scope) .rb-feature-card[class*="rb-container-pad-"]:not(.rb-container-pad-none) > .rb-feature-card-content {
16630
+ padding: 0;
16631
+ }
16632
+
16633
+ /* --- Soft panel ------------------------------------------------------------ */
16634
+
16635
+ :where(.theme-scope) .rb-card-treatment-soft-panel {
16636
+ transition: transform 250ms ease, box-shadow 250ms ease;
16637
+ }
16638
+
16639
+ @media (prefers-reduced-motion: no-preference) {
16640
+ :where(.theme-scope) .rb-card-treatment-soft-panel:hover {
16641
+ transform: translateY(-3px);
16642
+ box-shadow: 0 0.875rem 1.875rem rgba(var(--tb-shadow, 0 0 0), 0.1);
16643
+ }
16644
+ }
16645
+
16646
+ :where(.theme-scope) .rb-card-treatment-soft-panel .cta-row .button-ghost {
16647
+ padding-inline: 0;
16648
+ }
16649
+
16650
+ /* --- Editorial rule --------------------------------------------------------- */
16651
+
16652
+ /*
16653
+ * Boxless open column: no background, no border box, a short brand rule
16654
+ * sitting on a full-width hairline at the top of the column.
16655
+ */
16656
+ :where(.theme-scope) .rb-card-treatment-editorial-rule {
16657
+ margin-top: 1rem;
16658
+ border-top: 1px solid
16659
+ color-mix(in oklab, rgb(var(--tb-border, 229 231 235)), transparent 25%);
16660
+ }
16661
+
16662
+ :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-bg-surface {
16663
+ background: transparent;
16664
+ }
16665
+
16666
+ :where(.theme-scope) .rb-card-treatment-editorial-rule::before {
16667
+ content: "";
16668
+ position: absolute;
16669
+ top: 0;
16670
+ left: 0;
16671
+ width: 2.75rem;
16672
+ height: 2px;
16673
+ background: rgb(var(--tb-primary, 0 0 0));
16674
+ }
16675
+
16676
+ :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-feature-card-media {
16677
+ margin-top: 1.6rem;
16678
+ border-radius: calc(var(--rb-block-radius, 0.75rem) * 0.5);
16679
+ }
16680
+
16681
+ :where(.theme-scope) .rb-card-treatment-editorial-rule > .rb-feature-card-content {
16682
+ padding: 1.6rem 0 0.25rem;
16683
+ }
16684
+
16685
+ :where(.theme-scope) .rb-card-treatment-editorial-rule .cta-row .button-ghost {
16686
+ padding-inline: 0;
15561
16687
  }`;
15562
16688
 
15563
16689
  // ../theme-core/src/ThemeScopeCore.tsx
@@ -15752,7 +16878,7 @@ var SITE_CHROME_VISIBLE_HEADER_SELECTOR = `[${SITE_CHROME_VISIBLE_HEADER_ATTR}="
15752
16878
  import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
15753
16879
 
15754
16880
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
15755
- import { z as z18 } from "zod";
16881
+ import { z as z19 } from "zod";
15756
16882
 
15757
16883
  // ../theme-core/src/inputs/core.ts
15758
16884
  var CORNER_RADIUS_MAP4 = {
@@ -15945,33 +17071,33 @@ var CSS_DECLARATION_PROPERTY_PATTERN = /^(?:-[a-zA-Z][a-zA-Z0-9-]*|[a-zA-Z][a-zA
15945
17071
  var UNSAFE_CSS_MARKUP_PATTERN = /[{}<>]|<\/|<script/i;
15946
17072
  var EXTERNAL_URL_PATTERN = /url\s*\(\s*['"]?(?:https?:|\/\/)/i;
15947
17073
  var JAVASCRIPT_URL_PATTERN2 = /javascript\s*:/i;
15948
- var themeBridgeConfigSchema = z18.object({
15949
- tokens: z18.record(z18.string(), z18.string()),
15950
- typography: z18.object({
15951
- headingFamily: z18.string().optional(),
15952
- bodyFamily: z18.string().optional(),
15953
- headingWeight: z18.number().optional(),
15954
- bodyWeight: z18.number().optional()
17074
+ var themeBridgeConfigSchema = z19.object({
17075
+ tokens: z19.record(z19.string(), z19.string()),
17076
+ typography: z19.object({
17077
+ headingFamily: z19.string().optional(),
17078
+ bodyFamily: z19.string().optional(),
17079
+ headingWeight: z19.number().optional(),
17080
+ bodyWeight: z19.number().optional()
15955
17081
  }).optional(),
15956
- spacing: z18.enum(["comfortable", "standard", "dense"]).optional(),
15957
- corners: z18.enum(["square", "soft", "rounded", "pill"]).optional(),
15958
- shadows: z18.enum(["none", "low", "medium", "high"]).optional(),
15959
- components: z18.object({
15960
- buttons: z18.union([
15961
- z18.boolean(),
15962
- z18.object({
15963
- variants: z18.array(z18.enum(["primary", "secondary", "outline", "ghost"])).optional()
17082
+ spacing: z19.enum(["comfortable", "standard", "dense"]).optional(),
17083
+ corners: z19.enum(["square", "soft", "rounded", "pill"]).optional(),
17084
+ shadows: z19.enum(["none", "low", "medium", "high"]).optional(),
17085
+ components: z19.object({
17086
+ buttons: z19.union([
17087
+ z19.boolean(),
17088
+ z19.object({
17089
+ variants: z19.array(z19.enum(["primary", "secondary", "outline", "ghost"])).optional()
15964
17090
  })
15965
17091
  ]).optional(),
15966
- cards: z18.union([
15967
- z18.boolean(),
15968
- z18.object({
15969
- variants: z18.array(z18.enum(["default", "elevated", "outlined"])).optional()
17092
+ cards: z19.union([
17093
+ z19.boolean(),
17094
+ z19.object({
17095
+ variants: z19.array(z19.enum(["default", "elevated", "outlined"])).optional()
15970
17096
  })
15971
17097
  ]).optional(),
15972
- inputs: z18.boolean().optional()
17098
+ inputs: z19.boolean().optional()
15973
17099
  }).optional(),
15974
- overrides: z18.record(z18.string(), z18.string()).optional()
17100
+ overrides: z19.record(z19.string(), z19.string()).optional()
15975
17101
  }).passthrough();
15976
17102
  var TOKEN_ALIASES = [
15977
17103
  { source: "text", target: "foreground" },