@riverbankcms/sdk 0.77.0 → 0.78.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 (237) hide show
  1. package/README.md +69 -0
  2. package/dist/{PreviewEditorSidebar-XSX7QKHQ.mjs → PreviewEditorSidebar-RIKFQ72L.mjs} +4916 -4847
  3. package/dist/{PreviewEditorUI-YZNEZ3QD.mjs → PreviewEditorUI-XO7TUWKK.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-LAGYMPNF.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +194 -184
  6. package/dist/_dts/api/src/accessAdmin.d.ts +5 -0
  7. package/dist/_dts/api/src/billing.d.ts +3 -26
  8. package/dist/_dts/api/src/bookingVerticals.d.ts +4 -0
  9. package/dist/_dts/api/src/content-editor.d.ts +1 -0
  10. package/dist/_dts/api/src/demoDashboardMutationSurfaces.d.ts +46 -0
  11. package/dist/_dts/api/src/endpoints.d.ts +8 -0
  12. package/dist/_dts/api/src/index.d.ts +14 -2
  13. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +87 -0
  14. package/dist/_dts/api/src/navigation/dashboardDemoNav.d.ts +5 -0
  15. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +45 -0
  16. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +42 -0
  17. package/dist/_dts/api/src/navigation/dashboardTeamMemberNav.d.ts +24 -0
  18. package/dist/_dts/api/src/navigation/linkUrlType.d.ts +3 -0
  19. package/dist/_dts/api/src/navigation.d.ts +12 -0
  20. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +55 -26
  21. package/dist/_dts/api/src/staffAccess.d.ts +79 -0
  22. package/dist/_dts/api/src/types.d.ts +3 -1
  23. package/dist/_dts/api/src/workflows/automaticWorkflowTriggers.d.ts +21 -0
  24. package/dist/_dts/blocks/src/client/site-chrome.d.ts +4 -1
  25. package/dist/_dts/blocks/src/customBlockRegistry.d.ts +20 -1
  26. package/dist/_dts/blocks/src/index.d.ts +3 -2
  27. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
  28. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
  29. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
  30. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
  31. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
  32. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -2
  33. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +294 -289
  34. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
  35. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +21 -21
  37. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
  38. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
  39. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
  40. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +2 -2
  41. package/dist/_dts/blocks/src/system/data/index.d.ts +5 -3
  42. package/dist/_dts/blocks/src/system/data/previewResolvedDataState.d.ts +45 -0
  43. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +2 -1
  44. package/dist/_dts/blocks/src/system/fragments/library/faqAccordion.d.ts +5 -0
  45. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +5 -0
  46. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -29
  47. package/dist/_dts/blocks/src/system/node/fragments/headingDecoration.d.ts +10 -0
  48. package/dist/_dts/blocks/src/system/node/fragments/index.d.ts +1 -0
  49. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +9 -0
  50. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +3 -2
  51. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  52. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  53. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +43 -8
  54. package/dist/_dts/blocks/src/system/runtime/components/multi-step/runtimeFormValidation.d.ts +28 -0
  55. package/dist/_dts/blocks/src/system/runtime/header/shared.d.ts +8 -7
  56. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCompactRow.d.ts +1 -4
  57. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +7 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +2 -8
  59. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.server.d.ts +2 -9
  60. package/dist/_dts/blocks/src/system/runtime/nodes/shop-cart-discount-ui.d.ts +5 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout-form.d.ts +76 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout.state.d.ts +1 -4
  63. package/dist/_dts/blocks/src/system/runtime/nodes/shop-commerce-store.d.ts +2 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/shop-commerce.shared.d.ts +1 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/shop-discount-apply.state.d.ts +52 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/shop.state.d.ts +2 -4
  67. package/dist/_dts/blocks/src/system/runtime/nodes/useDiscountApply.d.ts +21 -0
  68. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +54 -0
  69. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -0
  70. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  71. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +4 -4
  72. package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
  73. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -1
  74. package/dist/_dts/content-editor/src/contentTypeEditorContentState.d.ts +26 -0
  75. package/dist/_dts/content-editor/src/definitions/factory.d.ts +75 -0
  76. package/dist/_dts/content-editor/src/entryWorkflows.d.ts +2 -0
  77. package/dist/_dts/content-editor/src/footerBlocksEditorState.d.ts +76 -0
  78. package/dist/_dts/content-editor/src/index.d.ts +5 -0
  79. package/dist/_dts/content-editor/src/pageWorkflowContent.d.ts +29 -0
  80. package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
  81. package/dist/_dts/content-model/src/index.d.ts +1 -0
  82. package/dist/_dts/content-model/src/routeTemplate.d.ts +4 -0
  83. package/dist/_dts/content-model/src/templates/editorState.d.ts +25 -0
  84. package/dist/_dts/core/src/csv-cells.d.ts +10 -0
  85. package/dist/_dts/core/src/csv-date-filter.d.ts +27 -0
  86. package/dist/_dts/core/src/csv-escape.d.ts +1 -0
  87. package/dist/_dts/core/src/csv-filename.d.ts +18 -0
  88. package/dist/_dts/core/src/csv-render.d.ts +4 -0
  89. package/dist/_dts/core/src/csv-types.d.ts +116 -0
  90. package/dist/_dts/core/src/currency-format.d.ts +4 -0
  91. package/dist/_dts/core/src/demo-capability-policy.d.ts +29 -0
  92. package/dist/_dts/core/src/demo-claim-access.d.ts +14 -0
  93. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +11 -0
  94. package/dist/_dts/core/src/demo-runtime.d.ts +47 -0
  95. package/dist/_dts/core/src/duration.d.ts +14 -0
  96. package/dist/_dts/core/src/email-format.d.ts +10 -0
  97. package/dist/_dts/core/src/field-errors.d.ts +1 -0
  98. package/dist/_dts/core/src/form-submission-preview.d.ts +24 -0
  99. package/dist/_dts/core/src/index.d.ts +20 -0
  100. package/dist/_dts/core/src/number-input.d.ts +22 -0
  101. package/dist/_dts/core/src/public-url-validation.d.ts +12 -0
  102. package/dist/_dts/core/src/slug.d.ts +39 -0
  103. package/dist/_dts/core/src/string.d.ts +19 -0
  104. package/dist/_dts/core/src/uuid.d.ts +6 -0
  105. package/dist/_dts/db/src/schemas/forms.d.ts +50 -50
  106. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +34 -0
  107. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +24 -0
  108. package/dist/_dts/media-core/src/canonicalCropReview.d.ts +66 -0
  109. package/dist/_dts/media-core/src/classifyAllPlanning.d.ts +48 -0
  110. package/dist/_dts/media-core/src/filename.d.ts +1 -0
  111. package/dist/_dts/media-core/src/index.d.ts +10 -0
  112. package/dist/_dts/media-core/src/mediaAssetUsageStatus.d.ts +47 -0
  113. package/dist/_dts/media-core/src/mediaSettingsState.d.ts +3 -0
  114. package/dist/_dts/media-core/src/portableMediaReferences.d.ts +38 -0
  115. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +28 -0
  116. package/dist/_dts/media-core/src/videoAssetRepair.d.ts +38 -0
  117. package/dist/_dts/media-editor/src/mediaEditorDebug.d.ts +1 -0
  118. package/dist/_dts/path-utils/src/index.d.ts +8 -0
  119. package/dist/_dts/path-utils/src/redirectPaths.d.ts +26 -0
  120. package/dist/_dts/path-utils/src/safeAppPath.d.ts +26 -0
  121. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +2 -1
  122. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -0
  123. package/dist/_dts/preview-next/src/client/preview/previewDocumentFrame.d.ts +31 -0
  124. package/dist/_dts/sdk/src/client/error.d.ts +3 -0
  125. package/dist/_dts/sdk/src/client/index.d.ts +2 -2
  126. package/dist/_dts/sdk/src/client/types.d.ts +37 -19
  127. package/dist/_dts/sdk/src/contracts/theme.d.ts +1 -1
  128. package/dist/_dts/sdk/src/index.d.ts +2 -2
  129. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +16 -16
  130. package/dist/_dts/sdk/src/next/content-load-failure.d.ts +51 -0
  131. package/dist/_dts/sdk/src/next/index.d.ts +2 -1
  132. package/dist/_dts/sdk/src/next/types.d.ts +19 -0
  133. package/dist/_dts/sdk/src/portal/redirects.d.ts +1 -1
  134. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -2
  135. package/dist/_dts/sdk/src/routing/index.d.ts +3 -2
  136. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +71 -6
  137. package/dist/_dts/sdk/src/version.d.ts +1 -1
  138. package/dist/_dts/site-commands/src/commands.d.ts +12 -12
  139. package/dist/_dts/site-commands/src/index.d.ts +1 -0
  140. package/dist/_dts/site-commands/src/pagePaths.d.ts +6 -0
  141. package/dist/_dts/theme-core/src/accordions/siteStyleDefaults.d.ts +26 -0
  142. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -0
  143. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +1 -0
  144. package/dist/_dts/theme-core/src/fonts/index.d.ts +1 -0
  145. package/dist/_dts/theme-core/src/fonts/uploadFormat.d.ts +44 -0
  146. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  147. package/dist/_dts/theme-core/src/index.d.ts +3 -1
  148. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +63 -51
  149. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +6 -1
  150. package/dist/_dts/theme-core/src/navigation/types.d.ts +12 -0
  151. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  152. package/dist/_dts/theme-core/src/runtime/themeCssVarNames.d.ts +7 -0
  153. package/dist/_dts/theme-core/src/schema.d.ts +90 -48
  154. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +214 -34
  155. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +5 -2
  156. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +214 -34
  157. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -1
  158. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +35 -7
  159. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
  160. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +96 -34
  161. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +4 -2
  162. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -1
  163. package/dist/_dts/theme-core/src/site-styles/types.d.ts +27 -2
  164. package/dist/_dts/theme-core/src/siteChrome.d.ts +17 -34
  165. package/dist/_dts/theme-core/src/siteChromeOverlayClearance.d.ts +22 -0
  166. package/dist/_dts/theme-core/src/siteChromePlacement.d.ts +22 -0
  167. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +32 -0
  168. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -2
  169. package/dist/{chunk-EAWHBECW.mjs → chunk-F7RTCZYN.mjs} +229 -50
  170. package/dist/{chunk-GSQX43EZ.mjs → chunk-NIDXI46P.mjs} +22 -41
  171. package/dist/{chunk-WLQBJN2Z.mjs → chunk-OECWLDHN.mjs} +4538 -1911
  172. package/dist/{chunk-VX7B5VAC.mjs → chunk-SVMMM2NA.mjs} +8 -0
  173. package/dist/{chunk-6SMUFTXD.mjs → chunk-SXOLGNMX.mjs} +1 -1
  174. package/dist/{chunk-ANKDYZ2E.mjs → chunk-TXDES5P2.mjs} +2 -2
  175. package/dist/cli/index.mjs +2036 -594
  176. package/dist/client/{accordion-RZMQSYLR.mjs → accordion-EVDEOUPR.mjs} +2 -2
  177. package/dist/client/{bookingForm-NF4ASVNV.mjs → bookingForm-DIHBLC64.mjs} +27 -30
  178. package/dist/client/bookings.mjs +3707 -259
  179. package/dist/client/{carousel-LDX47ZIK.mjs → carousel-FEBQHIWI.mjs} +3 -4
  180. package/dist/client/{cart-RGXDS5F4.mjs → cart-7CKSXAE4.mjs} +8 -8
  181. package/dist/client/{checkout-P7WWSNNY.mjs → checkout-WKYCANLV.mjs} +8 -8
  182. package/dist/client/{chunk-JNC7CGHX.mjs → chunk-2SAVKN2M.mjs} +2 -2
  183. package/dist/client/{chunk-TQ5MSPDX.mjs → chunk-36WJCERQ.mjs} +1 -1
  184. package/dist/client/{chunk-R56FQ3RR.mjs → chunk-65F47D7Y.mjs} +280 -71
  185. package/dist/client/{chunk-L3DNHIJX.mjs → chunk-GUK2FPXQ.mjs} +23 -45
  186. package/dist/client/{chunk-PMAIXMAB.mjs → chunk-IVNCUVAV.mjs} +26 -21
  187. package/dist/client/{chunk-II7O4XN3.mjs → chunk-OFMSCGNY.mjs} +2 -2
  188. package/dist/client/chunk-PD6NBCEY.mjs +66 -0
  189. package/dist/client/{chunk-GMVTOKYG.mjs → chunk-RV6FX7UH.mjs} +510 -64
  190. package/dist/client/{chunk-E2TDNXCL.mjs → chunk-RZDWX7QW.mjs} +2 -1
  191. package/dist/client/{chunk-M3L3KYYR.mjs → chunk-UDNSI5PY.mjs} +12 -0
  192. package/dist/client/{chunk-JEZECJ3W.mjs → chunk-VPPMNXCF.mjs} +129 -3
  193. package/dist/client/{chunk-UFSWADAO.mjs → chunk-YDSEG6GZ.mjs} +5 -66
  194. package/dist/client/client.mjs +8983 -6152
  195. package/dist/client/{courseRegistration-7F65K5ZR.mjs → courseRegistration-5QF2PHKM.mjs} +14 -11
  196. package/dist/client/{eventCalendar-GLSC5KTL.mjs → eventCalendar-4ZOSETDU.mjs} +9 -9
  197. package/dist/client/{eventCombined-ZHK4WKUR.mjs → eventCombined-WQGU7JUX.mjs} +9 -9
  198. package/dist/client/{eventDetails-E3PJYBIN.mjs → eventDetails-AYWVUJ5Y.mjs} +9 -9
  199. package/dist/client/{eventListing-EMS3WC3E.mjs → eventListing-NT7C6UT5.mjs} +9 -9
  200. package/dist/client/{eventRegistration-NZOTVNPI.mjs → eventRegistration-OH24F4ZJ.mjs} +9 -9
  201. package/dist/client/{form-ETFZFATW.mjs → form-7L42SRBB.mjs} +6 -6
  202. package/dist/client/{headerSection-4LBP7ULT.mjs → headerSection-OZRZNZ52.mjs} +3 -3
  203. package/dist/client/hooks.mjs +1388 -427
  204. package/dist/client/{locationMap-5M655YSJ.mjs → locationMap-ZBXRPQ7C.mjs} +2 -2
  205. package/dist/client/{newsletterForm-QOUYW44O.mjs → newsletterForm-SNAGFF2I.mjs} +3 -3
  206. package/dist/client/{productDetail-O4DOCWQG.mjs → productDetail-I46BOFGV.mjs} +8 -8
  207. package/dist/client/{productList-A5RO5WIS.mjs → productList-BOYHTYI6.mjs} +8 -8
  208. package/dist/client/rendering/client.mjs +7090 -2645
  209. package/dist/client/rendering/islands.mjs +19 -19
  210. package/dist/client/rendering.mjs +7395 -4767
  211. package/dist/client/{shop-L4MZH4I2.mjs → shop-XTXPZTKR.mjs} +8 -8
  212. package/dist/preview-next/before-render.mjs +8 -0
  213. package/dist/preview-next/client/runtime.mjs +5 -5
  214. package/dist/preview-next/editor-chrome.css +10 -0
  215. package/dist/preview-next/middleware.mjs +8 -0
  216. package/dist/{sdk-runtime-Q6MTR4KL.mjs → sdk-runtime-ZJLKC6DR.mjs} +6 -6
  217. package/dist/server/components.mjs +4175 -2480
  218. package/dist/server/config-validation.mjs +1619 -658
  219. package/dist/server/config.mjs +1619 -658
  220. package/dist/server/data.mjs +1388 -427
  221. package/dist/server/index.mjs +488 -246
  222. package/dist/server/next.mjs +5607 -3354
  223. package/dist/server/page-converter.mjs +912 -259
  224. package/dist/server/prebuild.mjs +1 -1
  225. package/dist/server/rendering/server.mjs +4176 -2481
  226. package/dist/server/rendering.mjs +4194 -2486
  227. package/dist/server/routing.mjs +2078 -639
  228. package/dist/server/server.mjs +1886 -685
  229. package/dist/server/theme-bridge.mjs +4441 -1300
  230. package/dist/server/theme.mjs +89 -12
  231. package/dist/styles/index.css +1576 -1083
  232. package/package.json +2 -1
  233. package/dist/SdkPreviewModeRuntime-5FS5E6BI.mjs +0 -8
  234. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/DiscountCodeSection.d.ts +0 -7
  235. package/dist/_dts/preview-next/src/client/widgets/PreviewMediaField.d.ts +0 -4
  236. package/dist/client/chunk-OJPZEZU2.mjs +0 -31
  237. package/dist/client/chunk-RTZ3JKKX.mjs +0 -178
@@ -3900,6 +3900,14 @@ var ENDPOINT_DEFINITIONS = {
3900
3900
  responseKind: "json",
3901
3901
  errors: []
3902
3902
  },
3903
+ applyDiscountCode: {
3904
+ path: "/public/sites/{siteId}/bookings/discounts/apply",
3905
+ method: "POST",
3906
+ tags: ["site-{siteId}", "booking-discounts"],
3907
+ auth: "public",
3908
+ responseKind: "json",
3909
+ errors: ["validation:invalid_input", "rate_limit:exceeded"]
3910
+ },
3903
3911
  // Batch endpoint for block loader requests (reduces SSR fan-out)
3904
3912
  batchBlockLoaders: {
3905
3913
  path: "/public/sites/{siteId}/block-loaders/batch",
@@ -6239,6 +6247,27 @@ var ENDPOINT_DEFINITIONS = {
6239
6247
  }
6240
6248
  };
6241
6249
 
6250
+ // ../core/src/location.ts
6251
+ function normalizeLocationAddressText(value) {
6252
+ if (typeof value !== "string") {
6253
+ return null;
6254
+ }
6255
+ const trimmed = value.trim();
6256
+ return trimmed ? trimmed : null;
6257
+ }
6258
+ function hasLocationCoordinates(value) {
6259
+ return typeof value?.lat === "number" && typeof value?.lng === "number";
6260
+ }
6261
+ function toLocationCoordinates(value) {
6262
+ if (!hasLocationCoordinates(value)) {
6263
+ return null;
6264
+ }
6265
+ return {
6266
+ lat: value.lat,
6267
+ lng: value.lng
6268
+ };
6269
+ }
6270
+
6242
6271
  // ../api/src/accessAdmin.ts
6243
6272
  import { z } from "zod";
6244
6273
  var managedDomainAddOnPricingSnapshotSchema = z.object({
@@ -6381,27 +6410,6 @@ function formatKeyAsLabel(key) {
6381
6410
  // ../blocks/src/system/manifest/schema.ts
6382
6411
  import { z as z4 } from "zod";
6383
6412
 
6384
- // ../core/src/location.ts
6385
- function normalizeLocationAddressText(value) {
6386
- if (typeof value !== "string") {
6387
- return null;
6388
- }
6389
- const trimmed = value.trim();
6390
- return trimmed ? trimmed : null;
6391
- }
6392
- function hasLocationCoordinates(value) {
6393
- return typeof value?.lat === "number" && typeof value?.lng === "number";
6394
- }
6395
- function toLocationCoordinates(value) {
6396
- if (!hasLocationCoordinates(value)) {
6397
- return null;
6398
- }
6399
- return {
6400
- lat: value.lat,
6401
- lng: value.lng
6402
- };
6403
- }
6404
-
6405
6413
  // ../media-core/src/transformRect.ts
6406
6414
  function isValidTransformRectStructure(rect) {
6407
6415
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -7426,6 +7434,9 @@ function makeBoundaryId(previousBlockId, nextBlockId) {
7426
7434
  const next = encodeURIComponent(nextBlockId);
7427
7435
  return asDesignBoundaryId(`boundary:${previous}:${next}`);
7428
7436
  }
7437
+ function assertNever(value, message = "Unhandled Theme V2 variant") {
7438
+ throw new Error(`${message}: ${String(value)}`);
7439
+ }
7429
7440
  function brandNonEmptyString(value, label) {
7430
7441
  if (value.length === 0) {
7431
7442
  throw new Error(`${label} must be a non-empty string.`);
@@ -7453,6 +7464,10 @@ var tileTreatmentValues = [
7453
7464
  "quiet",
7454
7465
  "brand-depth"
7455
7466
  ];
7467
+ var eventListTreatmentValues = [
7468
+ "plain",
7469
+ "lined-panel"
7470
+ ];
7456
7471
  var eyebrowTreatmentValues = [
7457
7472
  "plain",
7458
7473
  "pill",
@@ -7510,6 +7525,7 @@ function defineBlockDesignCapability(capability) {
7510
7525
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
7511
7526
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
7512
7527
  tileTreatments: capability.tileTreatments ?? ["default"],
7528
+ eventListTreatments: capability.eventListTreatments ?? ["plain"],
7513
7529
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7514
7530
  ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
7515
7531
  ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
@@ -7534,9 +7550,98 @@ var blockAppearancePresets = [
7534
7550
  transitionAfter: "soft-fade-short",
7535
7551
  emphasis: "high",
7536
7552
  sectionHeight: "hero",
7553
+ heroComposition: "center",
7554
+ heroTypographyScale: "display",
7537
7555
  imageSurfaceTreatment: { kind: "neutral-wash" }
7538
7556
  }
7539
7557
  }),
7558
+ defineBlockAppearancePreset({
7559
+ kind: "block-design",
7560
+ id: "hero-bottom-left-panel",
7561
+ target: "hero",
7562
+ label: "Bottom-left panel hero",
7563
+ blockKinds: ["block.hero"],
7564
+ constraints: {
7565
+ layoutFamilies: ["centered", "compact"]
7566
+ },
7567
+ optionGroups: [
7568
+ {
7569
+ id: "image-surface-treatment",
7570
+ label: "Treatment",
7571
+ selectedOptionId: "neutral-scrim",
7572
+ options: [
7573
+ {
7574
+ id: "neutral-scrim",
7575
+ label: "Neutral scrim",
7576
+ designPatch: {
7577
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
7578
+ }
7579
+ },
7580
+ {
7581
+ id: "brand-scrim-primary",
7582
+ label: "Brand scrim",
7583
+ designPatch: {
7584
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "balanced" }
7585
+ }
7586
+ }
7587
+ ]
7588
+ }
7589
+ ],
7590
+ layoutPatches: [
7591
+ {
7592
+ constraints: {
7593
+ layoutVariantKeys: ["micro"]
7594
+ },
7595
+ designPatch: {
7596
+ sectionHeight: "banner",
7597
+ heroTypographyScale: "editorial"
7598
+ }
7599
+ }
7600
+ ],
7601
+ design: {
7602
+ sectionSurface: "hero-image",
7603
+ contentFrame: panelFrame("raised"),
7604
+ itemSurface: "none",
7605
+ transitionAfter: "soft-fade-short",
7606
+ emphasis: "high",
7607
+ sectionHeight: "immersive",
7608
+ heroComposition: "bottom-left",
7609
+ heroTypographyScale: "display",
7610
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
7611
+ }
7612
+ }),
7613
+ defineBlockAppearancePreset({
7614
+ kind: "block-design",
7615
+ id: "hero-poster-image",
7616
+ target: "hero",
7617
+ label: "Poster image hero",
7618
+ blockKinds: ["block.hero"],
7619
+ constraints: {
7620
+ layoutFamilies: ["centered", "compact"]
7621
+ },
7622
+ layoutPatches: [
7623
+ {
7624
+ constraints: {
7625
+ layoutVariantKeys: ["micro"]
7626
+ },
7627
+ designPatch: {
7628
+ sectionHeight: "banner",
7629
+ heroTypographyScale: "display"
7630
+ }
7631
+ }
7632
+ ],
7633
+ design: {
7634
+ sectionSurface: "hero-image",
7635
+ contentFrame: plainFrame,
7636
+ itemSurface: "none",
7637
+ transitionAfter: "soft-fade-short",
7638
+ emphasis: "high",
7639
+ sectionHeight: "immersive",
7640
+ heroComposition: "center",
7641
+ heroTypographyScale: "poster",
7642
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "strong" }
7643
+ }
7644
+ }),
7540
7645
  defineBlockAppearancePreset({
7541
7646
  kind: "block-design",
7542
7647
  id: "hero-brand-scrim",
@@ -7586,6 +7691,8 @@ var blockAppearancePresets = [
7586
7691
  transitionAfter: "soft-fade-short",
7587
7692
  emphasis: "high",
7588
7693
  sectionHeight: "immersive",
7694
+ heroComposition: "center",
7695
+ heroTypographyScale: "display",
7589
7696
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
7590
7697
  }
7591
7698
  }),
@@ -7638,6 +7745,8 @@ var blockAppearancePresets = [
7638
7745
  transitionAfter: "soft-fade-short",
7639
7746
  emphasis: "high",
7640
7747
  sectionHeight: "immersive",
7748
+ heroComposition: "center",
7749
+ heroTypographyScale: "display",
7641
7750
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
7642
7751
  imageSurfaceMotion: "fixed-frame",
7643
7752
  eyebrowTreatment: "accent-pill-bounce"
@@ -7658,6 +7767,8 @@ var blockAppearancePresets = [
7658
7767
  itemSurface: "none",
7659
7768
  transitionAfter: "soft-fade-short",
7660
7769
  emphasis: "high",
7770
+ heroComposition: "center",
7771
+ heroTypographyScale: "editorial",
7661
7772
  eyebrowTreatment: "accent-pill-bounce"
7662
7773
  }
7663
7774
  }),
@@ -7672,7 +7783,82 @@ var blockAppearancePresets = [
7672
7783
  contentFrame: panelFrame("inset"),
7673
7784
  itemSurface: "none",
7674
7785
  transitionAfter: "none",
7675
- emphasis: "high"
7786
+ emphasis: "high",
7787
+ heroComposition: "center",
7788
+ heroTypographyScale: "editorial"
7789
+ }
7790
+ }),
7791
+ defineBlockAppearancePreset({
7792
+ kind: "block-design",
7793
+ id: "hero-split-editorial",
7794
+ target: "hero",
7795
+ label: "Editorial split hero",
7796
+ blockKinds: ["block.hero"],
7797
+ constraints: {
7798
+ layoutFamilies: ["split"]
7799
+ },
7800
+ design: {
7801
+ sectionSurface: "base",
7802
+ contentFrame: plainFrame,
7803
+ itemSurface: "none",
7804
+ transitionAfter: "soft-fade-short",
7805
+ emphasis: "high",
7806
+ heroTypographyScale: "editorial"
7807
+ }
7808
+ }),
7809
+ defineBlockAppearancePreset({
7810
+ kind: "block-design",
7811
+ id: "hero-split-brand",
7812
+ target: "hero",
7813
+ label: "Brand split hero",
7814
+ blockKinds: ["block.hero"],
7815
+ constraints: {
7816
+ layoutFamilies: ["split"]
7817
+ },
7818
+ design: {
7819
+ sectionSurface: "brand-depth-band",
7820
+ contentFrame: plainFrame,
7821
+ itemSurface: "none",
7822
+ transitionAfter: "soft-fade-short",
7823
+ emphasis: "high",
7824
+ heroTypographyScale: "display",
7825
+ eyebrowTreatment: "accent-pill-bounce"
7826
+ }
7827
+ }),
7828
+ defineBlockAppearancePreset({
7829
+ kind: "block-design",
7830
+ id: "hero-split-soft-panel",
7831
+ target: "hero",
7832
+ label: "Soft panel split hero",
7833
+ blockKinds: ["block.hero"],
7834
+ constraints: {
7835
+ layoutFamilies: ["split"]
7836
+ },
7837
+ design: {
7838
+ sectionSurface: "muted-band",
7839
+ contentFrame: panelFrame("raised"),
7840
+ itemSurface: "none",
7841
+ transitionAfter: "soft-fade-short",
7842
+ emphasis: "high",
7843
+ heroTypographyScale: "editorial"
7844
+ }
7845
+ }),
7846
+ defineBlockAppearancePreset({
7847
+ kind: "block-design",
7848
+ id: "hero-split-accent",
7849
+ target: "hero",
7850
+ label: "Accent split hero",
7851
+ blockKinds: ["block.hero"],
7852
+ constraints: {
7853
+ layoutFamilies: ["split"]
7854
+ },
7855
+ design: {
7856
+ sectionSurface: "accent-band",
7857
+ contentFrame: panelFrame("raised"),
7858
+ itemSurface: "none",
7859
+ transitionAfter: "soft-fade-short",
7860
+ emphasis: "high",
7861
+ heroTypographyScale: "display"
7676
7862
  }
7677
7863
  }),
7678
7864
  defineBlockAppearancePreset({
@@ -7705,9 +7891,9 @@ var blockAppearancePresets = [
7705
7891
  }),
7706
7892
  defineBlockAppearancePreset({
7707
7893
  kind: "block-design",
7708
- id: "intro-soft-earth-statement",
7894
+ id: "intro-organic-statement",
7709
7895
  target: "intro",
7710
- label: "Soft Earth intro statement",
7896
+ label: "Organic intro statement",
7711
7897
  blockKinds: ["block.intro"],
7712
7898
  design: {
7713
7899
  sectionSurface: "base",
@@ -7738,9 +7924,9 @@ var blockAppearancePresets = [
7738
7924
  }),
7739
7925
  defineBlockAppearancePreset({
7740
7926
  kind: "block-design",
7741
- id: "feature-cards-soft-earth-offerings",
7927
+ id: "feature-cards-raised-rule",
7742
7928
  target: "feature-cards",
7743
- label: "Soft Earth offering cards",
7929
+ label: "Raised cards with rule",
7744
7930
  blockKinds: ["block.feature-cards"],
7745
7931
  design: {
7746
7932
  sectionSurface: "base",
@@ -7769,6 +7955,21 @@ var blockAppearancePresets = [
7769
7955
  emphasis: "medium"
7770
7956
  }
7771
7957
  }),
7958
+ defineBlockAppearancePreset({
7959
+ kind: "block-design",
7960
+ id: "events-lined-panel",
7961
+ target: "events",
7962
+ label: "Lined event panel",
7963
+ blockKinds: ["block.event-calendar", "block.event-listing"],
7964
+ design: {
7965
+ sectionSurface: "base",
7966
+ contentFrame: plainFrame,
7967
+ itemSurface: "none",
7968
+ transitionAfter: "none",
7969
+ emphasis: "medium",
7970
+ eventListTreatment: "lined-panel"
7971
+ }
7972
+ }),
7772
7973
  defineBlockAppearancePreset({
7773
7974
  kind: "block-design",
7774
7975
  id: "schedule-details-accent-section",
@@ -7828,9 +8029,9 @@ var blockAppearancePresets = [
7828
8029
  }),
7829
8030
  defineBlockAppearancePreset({
7830
8031
  kind: "block-design",
7831
- id: "testimonials-carded-proof",
8032
+ id: "testimonials-simple-cards",
7832
8033
  target: "testimonials",
7833
- label: "Carded social proof",
8034
+ label: "Simple testimonial cards",
7834
8035
  blockKinds: ["block.testimonials"],
7835
8036
  design: {
7836
8037
  sectionSurface: "base",
@@ -7842,9 +8043,9 @@ var blockAppearancePresets = [
7842
8043
  }),
7843
8044
  defineBlockAppearancePreset({
7844
8045
  kind: "block-design",
7845
- id: "testimonials-contained-proof",
8046
+ id: "testimonials-raised-panel",
7846
8047
  target: "testimonials",
7847
- label: "Contained social proof",
8048
+ label: "Raised testimonial panel",
7848
8049
  blockKinds: ["block.testimonials"],
7849
8050
  design: {
7850
8051
  sectionSurface: "muted-band",
@@ -7856,9 +8057,9 @@ var blockAppearancePresets = [
7856
8057
  }),
7857
8058
  defineBlockAppearancePreset({
7858
8059
  kind: "block-design",
7859
- id: "testimonials-dark-proof",
8060
+ id: "testimonials-accent-panel",
7860
8061
  target: "testimonials",
7861
- label: "Dark proof panel",
8062
+ label: "Accent testimonial panel",
7862
8063
  blockKinds: ["block.testimonials"],
7863
8064
  design: {
7864
8065
  sectionSurface: "accent-band",
@@ -7870,9 +8071,9 @@ var blockAppearancePresets = [
7870
8071
  }),
7871
8072
  defineBlockAppearancePreset({
7872
8073
  kind: "block-design",
7873
- id: "testimonials-accent-quote-proof",
8074
+ id: "testimonials-accent-quote-cards",
7874
8075
  target: "testimonials",
7875
- label: "Accent quote proof",
8076
+ label: "Accent quote cards",
7876
8077
  blockKinds: ["block.testimonials"],
7877
8078
  design: {
7878
8079
  sectionSurface: "accent-band",
@@ -7885,9 +8086,9 @@ var blockAppearancePresets = [
7885
8086
  }),
7886
8087
  defineBlockAppearancePreset({
7887
8088
  kind: "block-design",
7888
- id: "testimonials-soft-earth-proof-band",
8089
+ id: "testimonials-brand-background-quotes",
7889
8090
  target: "testimonials",
7890
- label: "Soft Earth proof band",
8091
+ label: "Brand background quotes",
7891
8092
  blockKinds: ["block.testimonials"],
7892
8093
  design: {
7893
8094
  sectionSurface: "brand-depth-band",
@@ -7931,25 +8132,6 @@ var blockAppearancePresets = [
7931
8132
  emphasis: "low"
7932
8133
  }
7933
8134
  }),
7934
- defineBlockAppearancePreset({
7935
- kind: "block-design",
7936
- id: "faq-soft-earth-two-column",
7937
- target: "faq",
7938
- label: "Soft Earth two-column FAQ",
7939
- blockKinds: ["block.faq"],
7940
- design: {
7941
- sectionSurface: "base",
7942
- contentFrame: plainFrame,
7943
- itemSurface: "flat",
7944
- transitionAfter: "none",
7945
- emphasis: "medium",
7946
- accordionIconTreatment: {
7947
- iconSet: "plus",
7948
- colorToken: "primary",
7949
- motion: "swap"
7950
- }
7951
- }
7952
- }),
7953
8135
  defineBlockAppearancePreset({
7954
8136
  kind: "block-design",
7955
8137
  id: "contact-form-panel",
@@ -9328,7 +9510,8 @@ var accordionSystemSchema = z12.object({
9328
9510
  icon: z12.object({
9329
9511
  style: accordionIconSchema,
9330
9512
  position: z12.enum(["left", "right"]),
9331
- size: z12.enum(["sm", "md", "lg"])
9513
+ size: z12.enum(["sm", "md", "lg"]),
9514
+ colorToken: themeColorTokenSchema.optional()
9332
9515
  }),
9333
9516
  // Trigger (question) styling
9334
9517
  trigger: z12.object({
@@ -9462,6 +9645,7 @@ var navLinkPaddingXSchema = z16.enum(["none", "tight", "compact", "default", "re
9462
9645
  var navLinkBorderRadiusSchema = z16.enum(["none", "sm", "md", "full"]);
9463
9646
  var navLinkTextSizeSchema = z16.enum(["xs", "sm", "base", "lg"]);
9464
9647
  var navLinkLetterSpacingSchema = z16.enum(["normal", "wide", "wider", "widest"]);
9648
+ var navLinkContrastTreatmentSchema = z16.enum(["none", "soft-glow"]);
9465
9649
  var navLinkStyleSchema = z16.object({
9466
9650
  /** Display name for the style */
9467
9651
  name: z16.string().min(1).max(30).optional(),
@@ -9473,6 +9657,8 @@ var navLinkStyleSchema = z16.object({
9473
9657
  textSize: navLinkTextSizeSchema.optional(),
9474
9658
  /** Optional letter spacing override */
9475
9659
  letterSpacing: navLinkLetterSpacingSchema.optional(),
9660
+ /** Optional text-only contrast treatment for transparent/overlay navigation */
9661
+ contrastTreatment: navLinkContrastTreatmentSchema.optional(),
9476
9662
  /** Hover/active color token (for color-change effects) */
9477
9663
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
9478
9664
  /** Padding preset */
@@ -9826,8 +10012,19 @@ var headingTypographyStyleSchema = typographyStyleSchema.extend({
9826
10012
  colorToken: themeColorTokenSchema.nullable().optional()
9827
10013
  });
9828
10014
  var proseLinkUnderlineStyleSchema = z21.enum(["solid", "dotted", "dashed"]);
9829
- var proseLinkUnderlineThicknessSchema = z21.enum(["auto", "fromFont", "thin", "medium", "thick"]);
9830
- var proseLinkUnderlineOffsetSchema = z21.enum(["auto", "tight", "normal", "loose"]);
10015
+ var proseLinkUnderlineThicknessSchema = z21.enum([
10016
+ "auto",
10017
+ "fromFont",
10018
+ "thin",
10019
+ "medium",
10020
+ "thick"
10021
+ ]);
10022
+ var proseLinkUnderlineOffsetSchema = z21.enum([
10023
+ "auto",
10024
+ "tight",
10025
+ "normal",
10026
+ "loose"
10027
+ ]);
9831
10028
  var proseLinkStyleSchema = z21.object({
9832
10029
  colorToken: themeColorTokenSchema.optional(),
9833
10030
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -9838,7 +10035,14 @@ var proseLinkStyleSchema = z21.object({
9838
10035
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
9839
10036
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
9840
10037
  });
9841
- var semanticSpacingSchema = z21.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
10038
+ var semanticSpacingSchema = z21.enum([
10039
+ "none",
10040
+ "compact",
10041
+ "cozy",
10042
+ "medium",
10043
+ "comfortable",
10044
+ "spacious"
10045
+ ]);
9842
10046
  var boxRoundedSchema = z21.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
9843
10047
  var boxBackgroundOverlaySchema = z21.object({
9844
10048
  type: z21.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -9884,6 +10088,7 @@ var sectionStylesOverrideSchema = z21.object({
9884
10088
  spacing: semanticSpacingSchema.nullable().optional(),
9885
10089
  minHeight: z21.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
9886
10090
  tileTreatment: z21.enum(tileTreatmentValues).nullable().optional(),
10091
+ eventListTreatment: z21.enum(eventListTreatmentValues).nullable().optional(),
9887
10092
  eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional(),
9888
10093
  headingDecoration: headingDecorationSchema.nullable().optional(),
9889
10094
  // Author-level override consumed by later block/editor rendering phases.
@@ -9982,9 +10187,17 @@ var inputStyle = z21.object({
9982
10187
  focus: z21.enum(["glow", "ring", "underline"]),
9983
10188
  label: z21.enum(["inside", "above"])
9984
10189
  });
9985
- var headerVariant = z21.enum(["classic", "centered", "transparent", "floating", "editorial"]);
10190
+ var headerVariant = z21.enum(["classic", "centered", "transparent", "floating"]);
9986
10191
  var headerPositioning = z21.enum(["static", "sticky", "fixed"]);
9987
- var headerNavStyle = z21.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
10192
+ var headerNavStyle = z21.enum([
10193
+ "minimal",
10194
+ "underline",
10195
+ "underline-grow",
10196
+ "capsule",
10197
+ "scale",
10198
+ "frosted",
10199
+ "solid"
10200
+ ]);
9988
10201
  var navFontWeight = z21.enum(["regular", "medium", "semibold", "bold"]);
9989
10202
  var headerMaxWidth = z21.enum(["container", "full"]);
9990
10203
  var headerContainerSchema = z21.object({
@@ -10032,8 +10245,22 @@ var dropdownStyleSchema = z21.object({
10032
10245
  textSize: z21.enum(["xs", "sm", "base", "lg"]).optional()
10033
10246
  // optional = no override (browser default)
10034
10247
  }).optional();
10035
- var headerCtaGapSchema = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10036
- var headerCtaTreatmentSchema = z21.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
10248
+ var headerCtaGapSchema = z21.enum([
10249
+ "none",
10250
+ "tight",
10251
+ "compact",
10252
+ "default",
10253
+ "relaxed",
10254
+ "spacious"
10255
+ ]);
10256
+ var headerCtaTreatmentSchema = z21.enum([
10257
+ "default",
10258
+ "primary",
10259
+ "secondary",
10260
+ "inverted",
10261
+ "outline",
10262
+ "ghost"
10263
+ ]);
10037
10264
  var navContainerSchema = z21.object({
10038
10265
  type: z21.enum(["none", "pill", "glass"]).default("none"),
10039
10266
  tint: z21.string().nullable().optional(),
@@ -10088,7 +10315,14 @@ var footerMaxWidth = z21.enum(["container", "full"]);
10088
10315
  var footerMode = z21.enum(["default", "blocks", "default+blocks", "none"]);
10089
10316
  var footerNavLayoutMode = z21.enum(["stack", "inline", "inline-wrap"]);
10090
10317
  var footerNavLayoutAlign = z21.enum(["start", "center", "end", "space-between"]);
10091
- var footerSpacing = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10318
+ var footerSpacing = z21.enum([
10319
+ "none",
10320
+ "tight",
10321
+ "compact",
10322
+ "default",
10323
+ "relaxed",
10324
+ "spacious"
10325
+ ]);
10092
10326
  var footerLogoPlacement = z21.enum(["left", "right", "above", "below"]);
10093
10327
  var footerLogoSize = z21.enum(["sm", "md", "lg", "xl"]);
10094
10328
  var footerLogoMaxHeight = z21.enum(["sm", "md", "lg", "xl"]);
@@ -10153,7 +10387,12 @@ var footerSchema = z21.object({
10153
10387
  logo: footerLogoSchema.optional(),
10154
10388
  bottomBar: footerBottomBarSchema.optional()
10155
10389
  });
10156
- var containerPaddingPresetSchema = z21.enum(["tight", "compact", "default", "relaxed"]);
10390
+ var containerPaddingPresetSchema = z21.enum([
10391
+ "tight",
10392
+ "compact",
10393
+ "default",
10394
+ "relaxed"
10395
+ ]);
10157
10396
  var layoutSchema = z21.object({
10158
10397
  containerPadding: z21.object({
10159
10398
  mobile: containerPaddingPresetSchema.optional(),
@@ -10161,8 +10400,24 @@ var layoutSchema = z21.object({
10161
10400
  desktop: containerPaddingPresetSchema.optional()
10162
10401
  }).optional()
10163
10402
  }).optional();
10164
- var heroTypographySizeSchema = z21.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
10165
- var heroTypographyLineHeightSchema = z21.enum(["tight", "snug", "normal", "relaxed"]);
10403
+ var heroTypographySizeSchema = z21.enum([
10404
+ "sm",
10405
+ "base",
10406
+ "lg",
10407
+ "xl",
10408
+ "2xl",
10409
+ "3xl",
10410
+ "4xl",
10411
+ "5xl",
10412
+ "6xl",
10413
+ "editorial"
10414
+ ]);
10415
+ var heroTypographyLineHeightSchema = z21.enum([
10416
+ "tight",
10417
+ "snug",
10418
+ "normal",
10419
+ "relaxed"
10420
+ ]);
10166
10421
  var heroResponsiveTypographySchema = z21.object({
10167
10422
  headlineSize: heroTypographySizeSchema.optional(),
10168
10423
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -10667,6 +10922,34 @@ var paletteVariantsById = new Map(
10667
10922
  paletteVariants.map((v) => [v.id, v])
10668
10923
  );
10669
10924
 
10925
+ // ../theme-core/src/accordions/siteStyleDefaults.ts
10926
+ var softEarthAccordionSystem = {
10927
+ background: {
10928
+ type: "solid",
10929
+ colorToken: "background"
10930
+ },
10931
+ spacing: "comfortable",
10932
+ corners: "square",
10933
+ border: null,
10934
+ shadow: null,
10935
+ icon: {
10936
+ style: "plus-minus",
10937
+ position: "right",
10938
+ size: "md",
10939
+ colorToken: "primary"
10940
+ },
10941
+ trigger: {
10942
+ textColorToken: "text",
10943
+ fontWeight: "medium"
10944
+ },
10945
+ hover: {
10946
+ textColorToken: "primary"
10947
+ },
10948
+ content: {
10949
+ textColorToken: "neutral-700"
10950
+ }
10951
+ };
10952
+
10670
10953
  // ../theme-core/src/site-styles/headerLooks.ts
10671
10954
  function asHeaderLookId(value) {
10672
10955
  return value;
@@ -10716,23 +10999,13 @@ var headerLayoutCatalog = [
10716
10999
  maxRecommendedNavItems: 5,
10717
11000
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
10718
11001
  },
10719
- {
10720
- id: asHeaderLayoutId("editorial"),
10721
- label: "Editorial",
10722
- description: "A composed, magazine-like stacked header treatment.",
10723
- structure: "editorial-stack",
10724
- variant: "editorial",
10725
- defaultPositioning: "static",
10726
- shrinkOnScroll: false,
10727
- maxRecommendedNavItems: 6
10728
- },
10729
11002
  {
10730
11003
  id: asHeaderLayoutId("floating"),
10731
11004
  label: "Floating",
10732
11005
  description: "Detached header chrome that sits over the opening section.",
10733
11006
  structure: "floating-shell",
10734
11007
  variant: "floating",
10735
- defaultPositioning: "fixed",
11008
+ defaultPositioning: "sticky",
10736
11009
  shrinkOnScroll: true,
10737
11010
  maxRecommendedNavItems: 5,
10738
11011
  allowedLogoShapes: ["none", "text-only", "horizontal"]
@@ -10746,17 +11019,23 @@ var headerStyleCatalog = [
10746
11019
  id: asHeaderStyleId("minimal"),
10747
11020
  label: "Minimal",
10748
11021
  description: "Quiet surface with simple color-change navigation.",
10749
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11022
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10750
11023
  navInteraction: "color-change",
10751
- surface: "neutral"
11024
+ surface: "neutral",
11025
+ defaultDepth: "none",
11026
+ navTypography: "plain",
11027
+ moods: ["calm", "professional", "editorial"]
10752
11028
  },
10753
11029
  {
10754
11030
  id: asHeaderStyleId("fine-line"),
10755
11031
  label: "Fine Line",
10756
11032
  description: "Light surface with a crisp lower rule and underline hover.",
10757
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11033
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10758
11034
  navInteraction: "underline-grow",
10759
- surface: "bordered"
11035
+ surface: "bordered",
11036
+ defaultDepth: "line",
11037
+ navTypography: "plain",
11038
+ moods: ["calm", "professional", "editorial"]
10760
11039
  },
10761
11040
  {
10762
11041
  id: asHeaderStyleId("soft-bar"),
@@ -10764,7 +11043,10 @@ var headerStyleCatalog = [
10764
11043
  description: "Soft tinted surface with gentle pill hover states.",
10765
11044
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10766
11045
  navInteraction: "pill-background",
10767
- surface: "soft"
11046
+ surface: "soft",
11047
+ defaultDepth: "line",
11048
+ navTypography: "plain",
11049
+ moods: ["calm", "professional"]
10768
11050
  },
10769
11051
  {
10770
11052
  id: asHeaderStyleId("pill-nav"),
@@ -10772,23 +11054,32 @@ var headerStyleCatalog = [
10772
11054
  description: "A calm pill navigation rail over a neutral header.",
10773
11055
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10774
11056
  navInteraction: "pill-background",
10775
- surface: "soft"
11057
+ surface: "soft",
11058
+ defaultDepth: "none",
11059
+ navTypography: "plain",
11060
+ moods: ["calm"]
10776
11061
  },
10777
11062
  {
10778
11063
  id: asHeaderStyleId("brand-bar"),
10779
11064
  label: "Brand Bar",
10780
11065
  description: "Solid brand surface with high-contrast navigation.",
10781
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11066
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10782
11067
  navInteraction: "color-change",
10783
- surface: "brand-solid"
11068
+ surface: "brand-solid",
11069
+ defaultDepth: "none",
11070
+ navTypography: "brand-caps",
11071
+ moods: ["professional", "expressive", "utility"]
10784
11072
  },
10785
11073
  {
10786
11074
  id: asHeaderStyleId("brand-underline"),
10787
11075
  label: "Brand Underline",
10788
11076
  description: "Brand surface with underline-grow navigation.",
10789
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
11077
+ supportedLayoutIds: supportedLayouts(["classic"]),
10790
11078
  navInteraction: "underline-grow",
10791
- surface: "brand-solid"
11079
+ surface: "brand-solid",
11080
+ defaultDepth: "none",
11081
+ navTypography: "brand-caps",
11082
+ moods: ["expressive"]
10792
11083
  },
10793
11084
  {
10794
11085
  id: asHeaderStyleId("brand-pill"),
@@ -10796,41 +11087,54 @@ var headerStyleCatalog = [
10796
11087
  description: "Solid brand surface with rounded active and hover states.",
10797
11088
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
10798
11089
  navInteraction: "pill-background",
10799
- surface: "brand-solid"
11090
+ surface: "brand-solid",
11091
+ defaultDepth: "none",
11092
+ navTypography: "brand-caps",
11093
+ moods: ["expressive"]
10800
11094
  },
10801
11095
  {
10802
- id: asHeaderStyleId("editorial-line"),
10803
- label: "Editorial Line",
11096
+ id: asHeaderStyleId("serif-line"),
11097
+ label: "Serif Line",
10804
11098
  description: "Typographic logo treatment with understated underline navigation.",
10805
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11099
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10806
11100
  navInteraction: "underline-grow",
10807
- surface: "bordered"
11101
+ surface: "bordered",
11102
+ defaultDepth: "line",
11103
+ navTypography: "heading",
11104
+ moods: ["editorial", "calm"]
10808
11105
  },
10809
11106
  {
10810
11107
  id: asHeaderStyleId("flat-tabs"),
10811
11108
  label: "Flat Tabs",
10812
11109
  description: "Flat block hover and active states with a Swiss utility feel.",
10813
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11110
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10814
11111
  navInteraction: "flat-block",
10815
- surface: "bordered"
11112
+ surface: "bordered",
11113
+ defaultDepth: "shadow",
11114
+ navTypography: "quiet-caps",
11115
+ moods: ["professional", "utility", "expressive"]
10816
11116
  },
10817
11117
  {
10818
11118
  id: asHeaderStyleId("glass"),
10819
11119
  label: "Glass",
10820
- description: "Floating translucent chrome with frosted navigation backing.",
11120
+ description: "Translucent chrome with frosted navigation backing.",
10821
11121
  supportedLayoutIds: supportedLayouts(["floating"]),
10822
11122
  navInteraction: "glass-backed",
10823
11123
  surface: "floating",
10824
- requiresFloatingLayout: true
11124
+ defaultDepth: "shadow",
11125
+ navTypography: "plain",
11126
+ moods: ["expressive", "calm"]
10825
11127
  },
10826
11128
  {
10827
11129
  id: asHeaderStyleId("minimal-surface"),
10828
- label: "Minimal Surface",
10829
- description: "Floating chrome with a restrained translucent surface.",
11130
+ label: "Clear Split",
11131
+ description: "Floating logo with transparent navigation and no shared shell.",
10830
11132
  supportedLayoutIds: supportedLayouts(["floating"]),
10831
11133
  navInteraction: "color-change",
10832
11134
  surface: "floating",
10833
- requiresFloatingLayout: true
11135
+ defaultDepth: "none",
11136
+ navTypography: "plain",
11137
+ moods: ["editorial", "calm"]
10834
11138
  },
10835
11139
  {
10836
11140
  id: asHeaderStyleId("soft-shell"),
@@ -10839,7 +11143,31 @@ var headerStyleCatalog = [
10839
11143
  supportedLayoutIds: supportedLayouts(["floating"]),
10840
11144
  navInteraction: "pill-background",
10841
11145
  surface: "floating",
10842
- requiresFloatingLayout: true
11146
+ defaultDepth: "shadow",
11147
+ navTypography: "plain",
11148
+ moods: ["calm", "professional"]
11149
+ },
11150
+ {
11151
+ id: asHeaderStyleId("split-glass"),
11152
+ label: "Split Glass",
11153
+ description: "Logo floats independently while the navigation sits in a glass rail.",
11154
+ supportedLayoutIds: supportedLayouts(["floating"]),
11155
+ navInteraction: "glass-backed",
11156
+ surface: "floating",
11157
+ defaultDepth: "shadow",
11158
+ navTypography: "quiet-caps",
11159
+ moods: ["expressive"]
11160
+ },
11161
+ {
11162
+ id: asHeaderStyleId("split-pill"),
11163
+ label: "Split Pill",
11164
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
11165
+ supportedLayoutIds: supportedLayouts(["floating"]),
11166
+ navInteraction: "pill-background",
11167
+ surface: "floating",
11168
+ defaultDepth: "shadow",
11169
+ navTypography: "heading",
11170
+ moods: ["calm", "editorial"]
10843
11171
  }
10844
11172
  ];
10845
11173
  var headerLayoutsById = new Map(
@@ -10859,7 +11187,7 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10859
11187
  "brand-bar",
10860
11188
  "brand-underline",
10861
11189
  "brand-pill",
10862
- "editorial-line",
11190
+ "serif-line",
10863
11191
  "flat-tabs"
10864
11192
  ])
10865
11193
  ],
@@ -10872,19 +11200,7 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10872
11200
  "pill-nav",
10873
11201
  "brand-bar",
10874
11202
  "brand-pill",
10875
- "editorial-line",
10876
- "flat-tabs"
10877
- ])
10878
- ],
10879
- [
10880
- asHeaderLayoutId("editorial"),
10881
- headerStyleRepairChain([
10882
- "minimal",
10883
- "fine-line",
10884
- "soft-bar",
10885
- "brand-bar",
10886
- "brand-underline",
10887
- "editorial-line",
11203
+ "serif-line",
10888
11204
  "flat-tabs"
10889
11205
  ])
10890
11206
  ],
@@ -10893,6 +11209,8 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10893
11209
  headerStyleRepairChain([
10894
11210
  "glass",
10895
11211
  "minimal-surface",
11212
+ "split-glass",
11213
+ "split-pill",
10896
11214
  "soft-shell",
10897
11215
  "brand-pill"
10898
11216
  ])
@@ -10901,20 +11219,69 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10901
11219
  function headerStyleRepairChain(values) {
10902
11220
  return values.map(asHeaderStyleId);
10903
11221
  }
10904
- var headerStyleRepairOrder = /* @__PURE__ */ new Map([
10905
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
10906
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
10907
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
10908
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
10909
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
10910
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
10911
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
10912
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
10913
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
10914
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
10915
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
10916
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
10917
- ]);
11222
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
11223
+ [
11224
+ [
11225
+ asHeaderStyleId("brand-bar"),
11226
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
11227
+ ],
11228
+ [
11229
+ asHeaderStyleId("brand-underline"),
11230
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
11231
+ ],
11232
+ [
11233
+ asHeaderStyleId("brand-pill"),
11234
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
11235
+ ],
11236
+ [
11237
+ asHeaderStyleId("pill-nav"),
11238
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
11239
+ ],
11240
+ [
11241
+ asHeaderStyleId("flat-tabs"),
11242
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
11243
+ ],
11244
+ [
11245
+ asHeaderStyleId("serif-line"),
11246
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
11247
+ ],
11248
+ [
11249
+ asHeaderStyleId("glass"),
11250
+ headerStyleRepairChain([
11251
+ "glass",
11252
+ "soft-shell",
11253
+ "fine-line",
11254
+ "minimal-surface",
11255
+ "minimal"
11256
+ ])
11257
+ ],
11258
+ [
11259
+ asHeaderStyleId("soft-shell"),
11260
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
11261
+ ],
11262
+ [
11263
+ asHeaderStyleId("minimal-surface"),
11264
+ headerStyleRepairChain(["minimal-surface", "minimal"])
11265
+ ],
11266
+ [
11267
+ asHeaderStyleId("split-glass"),
11268
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
11269
+ ],
11270
+ [
11271
+ asHeaderStyleId("split-pill"),
11272
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
11273
+ ],
11274
+ [
11275
+ asHeaderStyleId("fine-line"),
11276
+ headerStyleRepairChain(["fine-line", "minimal"])
11277
+ ],
11278
+ [
11279
+ asHeaderStyleId("soft-bar"),
11280
+ headerStyleRepairChain(["soft-bar", "minimal"])
11281
+ ],
11282
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
11283
+ ]
11284
+ );
10918
11285
  var legacyHeaderLookAliases = [
10919
11286
  {
10920
11287
  lookId: asHeaderLookId("clean-base"),
@@ -10931,10 +11298,10 @@ var legacyHeaderLookAliases = [
10931
11298
  }
10932
11299
  },
10933
11300
  {
10934
- lookId: asHeaderLookId("editorial-line"),
11301
+ lookId: asHeaderLookId("serif-line"),
10935
11302
  selection: {
10936
- layoutId: asHeaderLayoutId("editorial"),
10937
- styleId: asHeaderStyleId("editorial-line")
11303
+ layoutId: asHeaderLayoutId("centered"),
11304
+ styleId: asHeaderStyleId("serif-line")
10938
11305
  }
10939
11306
  },
10940
11307
  {
@@ -10973,9 +11340,7 @@ var legacyHeaderLookAliases = [
10973
11340
  }
10974
11341
  }
10975
11342
  ];
10976
- var legacyHeaderLookAliasesById = new Map(
10977
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
10978
- );
11343
+ var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
10979
11344
  function getHeaderStyle(id) {
10980
11345
  return headerStylesById.get(id) ?? null;
10981
11346
  }
@@ -10993,10 +11358,29 @@ function resolveLegacyHeaderLookAlias(lookId) {
10993
11358
  return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
10994
11359
  }
10995
11360
  function getCompatibleHeaderStyleIds(layoutId) {
10996
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
10997
- const style = getHeaderStyleOrThrow(styleId);
10998
- return isHeaderStyleCompatibleWithLayout(style, layoutId);
10999
- });
11361
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
11362
+ (styleId) => {
11363
+ const style = getHeaderStyleOrThrow(styleId);
11364
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
11365
+ }
11366
+ );
11367
+ }
11368
+ function themedHeaderShadow(theme) {
11369
+ switch (theme.shadow.elevation) {
11370
+ case "none":
11371
+ return void 0;
11372
+ case "low":
11373
+ return { elevation: "sm" };
11374
+ case "medium":
11375
+ return { elevation: "md" };
11376
+ case "high":
11377
+ return { elevation: "lg" };
11378
+ default:
11379
+ return assertNever(
11380
+ theme.shadow.elevation,
11381
+ "Unhandled theme shadow elevation"
11382
+ );
11383
+ }
11000
11384
  }
11001
11385
  function solidBrandHeader(theme) {
11002
11386
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
@@ -11027,8 +11411,14 @@ function solidBrandHeader(theme) {
11027
11411
  borderRadius: "none",
11028
11412
  effects: {
11029
11413
  hover: [
11030
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
11031
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
11414
+ {
11415
+ effectId: "text-color-change",
11416
+ options: { hoverColorToken: "secondary" }
11417
+ },
11418
+ {
11419
+ effectId: "nav-underline",
11420
+ options: { style: "grow", colorToken: "secondary" }
11421
+ }
11032
11422
  ]
11033
11423
  }
11034
11424
  },
@@ -11084,10 +11474,10 @@ function cleanBaseHeader(theme) {
11084
11474
  ctaGap: "default"
11085
11475
  };
11086
11476
  }
11087
- function editorialLineHeader(theme) {
11477
+ function serifLineHeader(theme) {
11088
11478
  return {
11089
11479
  ...baseHeader(theme),
11090
- variant: "editorial",
11480
+ variant: "centered",
11091
11481
  positioning: "sticky",
11092
11482
  shrinkOnScroll: false,
11093
11483
  background: {
@@ -11141,9 +11531,7 @@ function practicalUtilityHeader(theme) {
11141
11531
  navColor: "text",
11142
11532
  navStyle: "solid",
11143
11533
  navWeight: "semibold",
11144
- shadow: {
11145
- elevation: "sm"
11146
- },
11534
+ shadow: themedHeaderShadow(theme),
11147
11535
  border: {
11148
11536
  style: "solid",
11149
11537
  width: "thin",
@@ -11212,6 +11600,7 @@ function floatingGlassHeader(theme) {
11212
11600
  return {
11213
11601
  ...transparentOverlayHeader(theme),
11214
11602
  variant: "floating",
11603
+ positioning: "sticky",
11215
11604
  navStyle: "frosted",
11216
11605
  navContainer: {
11217
11606
  type: "glass",
@@ -11256,27 +11645,27 @@ var headerLookCatalog = [
11256
11645
  compile: solidBrandHeader
11257
11646
  },
11258
11647
  {
11259
- id: asHeaderLookId("editorial-line"),
11260
- label: "Editorial line",
11261
- visualTreatment: "light-editorial",
11648
+ id: asHeaderLookId("serif-line"),
11649
+ label: "Serif line",
11650
+ visualTreatment: "light-serif",
11262
11651
  layoutBehavior: "sticky",
11263
11652
  configuration: {
11264
- structure: "editorial-stack",
11265
- treatment: "light-editorial",
11653
+ structure: "centered-stack",
11654
+ treatment: "light-serif",
11266
11655
  behavior: "sticky"
11267
11656
  },
11268
11657
  openingRequirement: "none",
11269
11658
  maxRecommendedNavItems: 6,
11270
- compile: editorialLineHeader
11659
+ compile: serifLineHeader
11271
11660
  },
11272
11661
  {
11273
11662
  id: asHeaderLookId("centered-calm"),
11274
11663
  label: "Centered calm",
11275
- visualTreatment: "light-editorial",
11664
+ visualTreatment: "light-serif",
11276
11665
  layoutBehavior: "normal-flow",
11277
11666
  configuration: {
11278
11667
  structure: "centered-stack",
11279
- treatment: "light-editorial",
11668
+ treatment: "light-serif",
11280
11669
  behavior: "normal-flow"
11281
11670
  },
11282
11671
  openingRequirement: "none",
@@ -11727,7 +12116,7 @@ var typographyPresets = [
11727
12116
  heroTypography: {
11728
12117
  headlineSize: "6xl",
11729
12118
  headlineLineHeight: "tight",
11730
- subheadlineSize: "editorial",
12119
+ subheadlineSize: "2xl",
11731
12120
  subheadlineLineHeight: "normal",
11732
12121
  microHeadlineSize: "6xl",
11733
12122
  microHeadlineLineHeight: "tight",
@@ -11745,6 +12134,8 @@ var typographyPresetsById = new Map(
11745
12134
  );
11746
12135
 
11747
12136
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
12137
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
12138
+ var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
11748
12139
  var curatedSiteStyleIdValues = [
11749
12140
  "site-style:calm-studio",
11750
12141
  "site-style:clear-professional",
@@ -11756,7 +12147,7 @@ var curatedSiteStyleIdValues = [
11756
12147
  "site-style:personal-retreat-journal",
11757
12148
  "site-style:tactile-workshop",
11758
12149
  "site-style:modern-wellness",
11759
- "site-style:soft-earth",
12150
+ SOFT_EARTH_SITE_STYLE_ID_VALUE,
11760
12151
  "site-style:bold-launch",
11761
12152
  "site-style:south-west-twerk-school"
11762
12153
  ];
@@ -11822,22 +12213,31 @@ var expressiveUnderlineInputs = {
11822
12213
  }
11823
12214
  };
11824
12215
  function uniqueContentFrameKinds() {
11825
- const kinds = [...new Set(
11826
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
11827
- )];
12216
+ const kinds = [
12217
+ ...new Set(
12218
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
12219
+ )
12220
+ ];
11828
12221
  const firstKind = kinds[0];
11829
12222
  if (!firstKind) {
11830
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
12223
+ throw new Error(
12224
+ "Expected generated design option catalog to expose at least one content frame kind."
12225
+ );
11831
12226
  }
11832
12227
  return [firstKind, ...kinds.slice(1)];
11833
12228
  }
11834
12229
  var generatedContentFrameKinds = uniqueContentFrameKinds();
11835
12230
  function defineCuratedSiteStyle(input) {
11836
12231
  const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
11837
- const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
12232
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(
12233
+ legacyHeaderLookIds,
12234
+ input.tokenRecipes
12235
+ );
11838
12236
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
11839
12237
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
11840
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
12238
+ if (!typographyPresetChoices.some(
12239
+ (choice) => choice.id === defaultTypographyPresetId
12240
+ )) {
11841
12241
  throw new Error(
11842
12242
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
11843
12243
  );
@@ -11848,9 +12248,13 @@ function defineCuratedSiteStyle(input) {
11848
12248
  description: input.description,
11849
12249
  generationBrief: input.generationBrief,
11850
12250
  selectionKeywordRules: input.selectionKeywordRules ?? [],
11851
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
12251
+ siteCreatorSelection: input.siteCreatorSelection ?? {
12252
+ kind: "explicit_only"
12253
+ },
11852
12254
  template: {
11853
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
12255
+ id: asDesignSystemTemplateId(
12256
+ `template:${input.id.replace("site-style:", "")}`
12257
+ ),
11854
12258
  name: input.name,
11855
12259
  version: 1,
11856
12260
  tokenRecipes: input.tokenRecipes,
@@ -11861,6 +12265,7 @@ function defineCuratedSiteStyle(input) {
11861
12265
  supportedTransitions: generatedDesignOptionCatalog.transitions
11862
12266
  },
11863
12267
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
12268
+ ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
11864
12269
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
11865
12270
  defaultHeaderSelection: input.defaultHeaderSelection ? {
11866
12271
  layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
@@ -11868,13 +12273,17 @@ function defineCuratedSiteStyle(input) {
11868
12273
  } : inferredHeaderCuration.defaultHeaderSelection,
11869
12274
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
11870
12275
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
11871
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
11872
- layoutId: asHeaderLayoutId(selection.layoutId),
11873
- styleId: asHeaderStyleId(selection.styleId)
11874
- })),
12276
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
12277
+ (selection) => ({
12278
+ layoutId: asHeaderLayoutId(selection.layoutId),
12279
+ styleId: asHeaderStyleId(selection.styleId)
12280
+ })
12281
+ ),
11875
12282
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
11876
12283
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
11877
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
12284
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
12285
+ asFooterLookId
12286
+ ),
11878
12287
  buttonPersonalityChoices: input.buttonPersonalityChoices,
11879
12288
  paletteVariantChoices: input.paletteVariantChoices,
11880
12289
  typographyPresetChoices,
@@ -11893,7 +12302,7 @@ function headerLayoutChoice(id, note) {
11893
12302
  function headerStyleChoice(id, note) {
11894
12303
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
11895
12304
  }
11896
- function headerLayoutRecordKey(id) {
12305
+ function unbrandHeaderLayoutId(id) {
11897
12306
  return id;
11898
12307
  }
11899
12308
  function uniqueHeaderLayoutChoices(choices) {
@@ -11915,8 +12324,72 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
11915
12324
  };
11916
12325
  return [first, ...choices.slice(1)];
11917
12326
  }
11918
- function inferHeaderCurationFromLegacyLooks(lookIds) {
11919
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
12327
+ function uniqueCompatibleHeaderStyleChoices(choices, fallbackLayoutId) {
12328
+ const compatible = new Set(getCompatibleHeaderStyleIds(fallbackLayoutId));
12329
+ const seen = /* @__PURE__ */ new Set();
12330
+ const unique = choices.filter((choice) => {
12331
+ if (!compatible.has(choice.id)) return false;
12332
+ if (seen.has(choice.id)) return false;
12333
+ seen.add(choice.id);
12334
+ return true;
12335
+ });
12336
+ return nonEmptyHeaderStyleChoices(unique, fallbackLayoutId);
12337
+ }
12338
+ function inferredHeaderStyleValuesForRecipes(layoutId, recipes) {
12339
+ switch (layoutId) {
12340
+ case "classic":
12341
+ if (isExpressiveRecipe(recipes)) {
12342
+ return [
12343
+ "brand-bar",
12344
+ "brand-underline",
12345
+ "flat-tabs",
12346
+ "brand-pill",
12347
+ "fine-line"
12348
+ ];
12349
+ }
12350
+ if (recipes.spacing === "compact") {
12351
+ return ["flat-tabs", "fine-line", "minimal", "brand-bar"];
12352
+ }
12353
+ if (isSerifTypographyRecipe(recipes)) {
12354
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
12355
+ }
12356
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
12357
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
12358
+ }
12359
+ return ["fine-line", "minimal", "soft-bar", "brand-bar"];
12360
+ case "centered":
12361
+ if (isSerifTypographyRecipe(recipes)) {
12362
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
12363
+ }
12364
+ if (isExpressiveRecipe(recipes)) {
12365
+ return ["brand-pill", "flat-tabs", "brand-bar", "fine-line"];
12366
+ }
12367
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
12368
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
12369
+ }
12370
+ return ["minimal", "fine-line", "soft-bar"];
12371
+ case "floating":
12372
+ if (isExpressiveRecipe(recipes)) {
12373
+ return ["glass", "split-glass", "brand-pill", "soft-shell"];
12374
+ }
12375
+ if (isSerifTypographyRecipe(recipes)) {
12376
+ return ["split-pill", "minimal-surface", "soft-shell"];
12377
+ }
12378
+ return ["soft-shell", "minimal-surface", "glass"];
12379
+ default:
12380
+ return [];
12381
+ }
12382
+ }
12383
+ function isExpressiveRecipe(recipes) {
12384
+ return recipes.contrast === "maximum" || recipes.shadow === "layered" || recipes.motion === "expressive";
12385
+ }
12386
+ function isSerifTypographyRecipe(recipes) {
12387
+ return recipes.typography === "serif-editorial" || recipes.typography === "classic-serif";
12388
+ }
12389
+ function inferHeaderCurationFromLegacyLooks(lookIds, recipes) {
12390
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
12391
+ (selection) => Boolean(selection)
12392
+ );
11920
12393
  const defaultHeaderSelection = selections[0] ?? {
11921
12394
  layoutId: asHeaderLayoutId("classic"),
11922
12395
  styleId: asHeaderStyleId("minimal")
@@ -11926,9 +12399,13 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
11926
12399
  );
11927
12400
  const stylesByLayout = {};
11928
12401
  for (const layoutChoice of layoutChoices) {
11929
- const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
11930
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
11931
- styleChoices,
12402
+ const legacyStyleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12403
+ const inferredStyleChoices = inferredHeaderStyleValuesForRecipes(
12404
+ layoutChoice.id,
12405
+ recipes
12406
+ ).map((styleId) => headerStyleChoice(styleId));
12407
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = uniqueCompatibleHeaderStyleChoices(
12408
+ [...legacyStyleChoices, ...inferredStyleChoices],
11932
12409
  layoutChoice.id
11933
12410
  );
11934
12411
  }
@@ -11985,7 +12462,11 @@ var curatedSiteStyles = [
11985
12462
  motion: "subtle"
11986
12463
  },
11987
12464
  compositionBudget: quietBudget,
11988
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
12465
+ recommendedHeaderLookIds: [
12466
+ "centered-calm",
12467
+ "minimal-transparent",
12468
+ "clean-base"
12469
+ ],
11989
12470
  buttonPersonalityChoices: [
11990
12471
  buttonChoice("soft-pill"),
11991
12472
  buttonChoice("pebble"),
@@ -12014,7 +12495,11 @@ var curatedSiteStyles = [
12014
12495
  motion: "subtle"
12015
12496
  },
12016
12497
  compositionBudget: balancedBudget,
12017
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
12498
+ recommendedHeaderLookIds: [
12499
+ "practical-utility",
12500
+ "brand-solid",
12501
+ "clean-base"
12502
+ ],
12018
12503
  buttonPersonalityChoices: [
12019
12504
  buttonChoice("confident-chip"),
12020
12505
  buttonChoice("soft-pill"),
@@ -12041,7 +12526,11 @@ var curatedSiteStyles = [
12041
12526
  motion: "subtle"
12042
12527
  },
12043
12528
  compositionBudget: balancedBudget,
12044
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
12529
+ recommendedHeaderLookIds: [
12530
+ "serif-line",
12531
+ "minimal-transparent",
12532
+ "centered-calm"
12533
+ ],
12045
12534
  buttonPersonalityChoices: [
12046
12535
  buttonChoice("editorial-link"),
12047
12536
  buttonChoice("soft-pill"),
@@ -12069,7 +12558,11 @@ var curatedSiteStyles = [
12069
12558
  motion: "expressive"
12070
12559
  },
12071
12560
  compositionBudget: balancedBudget,
12072
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12561
+ recommendedHeaderLookIds: [
12562
+ "brand-solid",
12563
+ "practical-utility",
12564
+ "clean-base"
12565
+ ],
12073
12566
  buttonPersonalityChoices: [
12074
12567
  buttonChoice("pebble"),
12075
12568
  buttonChoice("brushed-wash"),
@@ -12086,7 +12579,10 @@ var curatedSiteStyles = [
12086
12579
  name: "Quiet Luxury",
12087
12580
  description: "Minimal, confident, and refined for premium experiences and private services.",
12088
12581
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
12089
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
12582
+ siteCreatorSelection: {
12583
+ kind: "site_creator_keyword_heuristic",
12584
+ priority: 20
12585
+ },
12090
12586
  selectionKeywordRules: [
12091
12587
  { kind: "word", value: "luxury" },
12092
12588
  { kind: "word", value: "premium" },
@@ -12104,7 +12600,11 @@ var curatedSiteStyles = [
12104
12600
  motion: "none"
12105
12601
  },
12106
12602
  compositionBudget: quietBudget,
12107
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
12603
+ recommendedHeaderLookIds: [
12604
+ "minimal-transparent",
12605
+ "serif-line",
12606
+ "clean-base"
12607
+ ],
12108
12608
  buttonPersonalityChoices: [
12109
12609
  buttonChoice("editorial-link"),
12110
12610
  buttonChoice("confident-chip"),
@@ -12140,7 +12640,11 @@ var curatedSiteStyles = [
12140
12640
  motion: "none"
12141
12641
  },
12142
12642
  compositionBudget: quietBudget,
12143
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
12643
+ recommendedHeaderLookIds: [
12644
+ "practical-utility",
12645
+ "brand-solid",
12646
+ "clean-base"
12647
+ ],
12144
12648
  buttonPersonalityChoices: [
12145
12649
  buttonChoice("confident-chip"),
12146
12650
  buttonChoice("pebble"),
@@ -12167,7 +12671,11 @@ var curatedSiteStyles = [
12167
12671
  motion: "subtle"
12168
12672
  },
12169
12673
  compositionBudget: balancedBudget,
12170
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
12674
+ recommendedHeaderLookIds: [
12675
+ "centered-calm",
12676
+ "minimal-transparent",
12677
+ "clean-base"
12678
+ ],
12171
12679
  buttonPersonalityChoices: [
12172
12680
  buttonChoice("soft-pill"),
12173
12681
  buttonChoice("pebble"),
@@ -12184,7 +12692,10 @@ var curatedSiteStyles = [
12184
12692
  name: "Quiet Practice",
12185
12693
  description: "Grounded, calm, and practical for small appointment-first practices.",
12186
12694
  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.",
12187
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
12695
+ siteCreatorSelection: {
12696
+ kind: "site_creator_keyword_heuristic",
12697
+ priority: 30
12698
+ },
12188
12699
  selectionKeywordRules: [
12189
12700
  { kind: "substring", value: "massage" },
12190
12701
  { kind: "word", value: "bodywork" },
@@ -12205,7 +12716,11 @@ var curatedSiteStyles = [
12205
12716
  motion: "subtle"
12206
12717
  },
12207
12718
  compositionBudget: quietBudget,
12208
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
12719
+ recommendedHeaderLookIds: [
12720
+ "practical-utility",
12721
+ "clean-base",
12722
+ "centered-calm"
12723
+ ],
12209
12724
  buttonPersonalityChoices: [
12210
12725
  buttonChoice("pebble"),
12211
12726
  buttonChoice("soft-pill"),
@@ -12222,7 +12737,10 @@ var curatedSiteStyles = [
12222
12737
  name: "Personal Retreat Journal",
12223
12738
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
12224
12739
  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.",
12225
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
12740
+ siteCreatorSelection: {
12741
+ kind: "site_creator_keyword_heuristic",
12742
+ priority: 40
12743
+ },
12226
12744
  selectionKeywordRules: [
12227
12745
  { kind: "substring", value: "retreat" },
12228
12746
  { kind: "phrase", value: "solo practitioner" },
@@ -12242,7 +12760,11 @@ var curatedSiteStyles = [
12242
12760
  motion: "subtle"
12243
12761
  },
12244
12762
  compositionBudget: balancedBudget,
12245
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
12763
+ recommendedHeaderLookIds: [
12764
+ "serif-line",
12765
+ "centered-calm",
12766
+ "minimal-transparent"
12767
+ ],
12246
12768
  buttonPersonalityChoices: [
12247
12769
  buttonChoice("editorial-link"),
12248
12770
  buttonChoice("soft-pill"),
@@ -12259,7 +12781,10 @@ var curatedSiteStyles = [
12259
12781
  name: "Tactile Workshop",
12260
12782
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
12261
12783
  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.",
12262
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
12784
+ siteCreatorSelection: {
12785
+ kind: "site_creator_keyword_heuristic",
12786
+ priority: 50
12787
+ },
12263
12788
  selectionKeywordRules: [
12264
12789
  { kind: "substring", value: "ceramic" },
12265
12790
  { kind: "word", value: "pottery" },
@@ -12279,8 +12804,15 @@ var curatedSiteStyles = [
12279
12804
  motion: "subtle"
12280
12805
  },
12281
12806
  compositionBudget: balancedBudget,
12282
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12283
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12807
+ recommendedHeaderLookIds: [
12808
+ "brand-solid",
12809
+ "practical-utility",
12810
+ "clean-base"
12811
+ ],
12812
+ recommendedFooterLookIds: [
12813
+ "site-footer-brand-two-band",
12814
+ "footer-muted-grounding"
12815
+ ],
12284
12816
  buttonPersonalityChoices: [
12285
12817
  buttonChoice("pebble"),
12286
12818
  buttonChoice("confident-chip"),
@@ -12295,11 +12827,14 @@ var curatedSiteStyles = [
12295
12827
  ]
12296
12828
  }),
12297
12829
  defineCuratedSiteStyle({
12298
- id: "site-style:soft-earth",
12830
+ id: SOFT_EARTH_SITE_STYLE_ID,
12299
12831
  name: "Soft Earth",
12300
12832
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
12301
- generationBrief: "Use cream space, terracotta CTAs, olive proof bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community proof, and a simple two-column FAQ when content allows.",
12302
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
12833
+ 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.",
12834
+ siteCreatorSelection: {
12835
+ kind: "site_creator_keyword_heuristic",
12836
+ priority: 45
12837
+ },
12303
12838
  selectionKeywordRules: [
12304
12839
  { kind: "word", value: "meditation" },
12305
12840
  { kind: "word", value: "wellbeing" },
@@ -12365,18 +12900,29 @@ var curatedSiteStyles = [
12365
12900
  paragraphSize: "default",
12366
12901
  headingSize: "editorial"
12367
12902
  }
12368
- }
12903
+ },
12904
+ accordions: softEarthAccordionSystem
12905
+ },
12906
+ defaultBlockVariants: {
12907
+ "block.faq": "question-columns"
12369
12908
  },
12370
12909
  recommendedAppearancePresetIds: [
12371
12910
  "hero-brand-scrim",
12372
- "intro-soft-earth-statement",
12373
- "feature-cards-soft-earth-offerings",
12374
- "testimonials-soft-earth-proof-band",
12375
- "faq-soft-earth-two-column",
12911
+ "intro-organic-statement",
12912
+ "feature-cards-raised-rule",
12913
+ "events-lined-panel",
12914
+ "testimonials-brand-background-quotes",
12376
12915
  "contact-form-panel"
12377
12916
  ],
12378
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
12379
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
12917
+ recommendedHeaderLookIds: [
12918
+ "centered-calm",
12919
+ "minimal-transparent",
12920
+ "serif-line"
12921
+ ],
12922
+ recommendedFooterLookIds: [
12923
+ "footer-muted-grounding",
12924
+ "site-footer-brand-two-band"
12925
+ ],
12380
12926
  buttonPersonalityChoices: [
12381
12927
  buttonChoice("earth-pill"),
12382
12928
  buttonChoice("soft-pill"),
@@ -12395,7 +12941,10 @@ var curatedSiteStyles = [
12395
12941
  name: "Bold Launch",
12396
12942
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
12397
12943
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
12398
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
12944
+ siteCreatorSelection: {
12945
+ kind: "site_creator_keyword_heuristic",
12946
+ priority: 10
12947
+ },
12399
12948
  selectionKeywordRules: [
12400
12949
  { kind: "substring", value: "launch" },
12401
12950
  { kind: "substring", value: "campaign" },
@@ -12414,7 +12963,11 @@ var curatedSiteStyles = [
12414
12963
  motion: "expressive"
12415
12964
  },
12416
12965
  compositionBudget: expressiveBudget,
12417
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
12966
+ recommendedHeaderLookIds: [
12967
+ "transparent-overlay",
12968
+ "floating-glass",
12969
+ "brand-solid"
12970
+ ],
12418
12971
  buttonPersonalityChoices: [
12419
12972
  buttonChoice("ink-stamp"),
12420
12973
  buttonChoice("confident-chip"),
@@ -12462,11 +13015,18 @@ var curatedSiteStyles = [
12462
13015
  "hero-brand-scrim-fixed-frame",
12463
13016
  "body-text-editorial-intro",
12464
13017
  "schedule-details-brand-depth",
12465
- "testimonials-accent-quote-proof",
13018
+ "testimonials-accent-quote-cards",
12466
13019
  "contact-form-brand-depth-card"
12467
13020
  ],
12468
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
12469
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
13021
+ recommendedHeaderLookIds: [
13022
+ "brand-solid",
13023
+ "transparent-overlay",
13024
+ "practical-utility"
13025
+ ],
13026
+ recommendedFooterLookIds: [
13027
+ "site-footer-brand-two-band",
13028
+ "footer-muted-grounding"
13029
+ ],
12470
13030
  buttonPersonalityChoices: [
12471
13031
  buttonChoice("showtime-pill"),
12472
13032
  buttonChoice("confident-chip"),
@@ -12550,6 +13110,7 @@ var themeV2RuntimeStyleFieldNames = [
12550
13110
  ];
12551
13111
  var themeV2BlockSpecificRawStyleFieldNames = [
12552
13112
  "_contentCardStyles",
13113
+ "_heroLayoutStyles",
12553
13114
  "_textCardStyles"
12554
13115
  ];
12555
13116
  var themeV2NormalEditorRawStyleFieldNames = [
@@ -12559,6 +13120,10 @@ var themeV2NormalEditorRawStyleFieldNames = [
12559
13120
  var themeV2NormalEditorRawStyleFieldNameSet = new Set(
12560
13121
  themeV2NormalEditorRawStyleFieldNames
12561
13122
  );
13123
+ var themeV2CompilerOwnedFieldNames = [
13124
+ ...themeV2RuntimeStyleFieldNames,
13125
+ ...themeV2BlockSpecificRawStyleFieldNames
13126
+ ];
12562
13127
 
12563
13128
  // ../theme-core/src/site-styles/designState.ts
12564
13129
  var themeV2DesignStateSchemaVersion = 1;
@@ -12573,6 +13138,16 @@ var heroLegibilityStrategySchema = z23.enum([
12573
13138
  "scrim-gradient",
12574
13139
  "solid-panel"
12575
13140
  ]);
13141
+ var heroCompositionIntentSchema = z23.enum([
13142
+ "center",
13143
+ "bottom-left"
13144
+ ]);
13145
+ var heroTypographyScaleIntentSchema = z23.enum([
13146
+ "quiet",
13147
+ "editorial",
13148
+ "display",
13149
+ "poster"
13150
+ ]);
12576
13151
  var sectionHeightIntentSchema = z23.enum([
12577
13152
  "default",
12578
13153
  "banner",
@@ -12608,6 +13183,7 @@ var imageSurfaceTreatmentSchema = z23.discriminatedUnion("kind", [
12608
13183
  ]);
12609
13184
  var testimonialCardTreatmentSchema = z23.enum(["default", "accent-quote"]);
12610
13185
  var tileTreatmentSchema = z23.enum(tileTreatmentValues);
13186
+ var eventListTreatmentSchema = z23.enum(eventListTreatmentValues);
12611
13187
  var eyebrowTreatmentSchema = z23.enum(eyebrowTreatmentValues);
12612
13188
  function uniqueNonEmpty(values) {
12613
13189
  const uniqueValues = [...new Set(values)];
@@ -12649,10 +13225,13 @@ var blockDesignPlanSchema = z23.object({
12649
13225
  emphasis: z23.enum(userDesignOptionCatalog.emphases),
12650
13226
  sectionHeight: sectionHeightIntentSchema.optional(),
12651
13227
  heroLegibility: heroLegibilityStrategySchema.optional(),
13228
+ heroComposition: heroCompositionIntentSchema.optional(),
13229
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
12652
13230
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
12653
13231
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
12654
13232
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
12655
13233
  tileTreatment: tileTreatmentSchema.optional(),
13234
+ eventListTreatment: eventListTreatmentSchema.optional(),
12656
13235
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
12657
13236
  }).strict();
12658
13237
  var styleAuthoritySchema = z23.discriminatedUnion("kind", [
@@ -14052,6 +14631,7 @@ function styledSection(config) {
14052
14631
  renderBackgroundImage = true,
14053
14632
  backgroundImageLoading,
14054
14633
  backgroundImageFetchPriority,
14634
+ allowOverflow = false,
14055
14635
  fullWidthPath
14056
14636
  } = config;
14057
14637
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
@@ -14086,7 +14666,7 @@ function styledSection(config) {
14086
14666
  // No fallback needed - transform handles all cases via defaultSpacing
14087
14667
  }
14088
14668
  },
14089
- allowOverflow: {
14669
+ allowOverflow: allowOverflow ? true : {
14090
14670
  $bind: {
14091
14671
  from: `${bindFrom}.background`,
14092
14672
  transforms: [{ id: "background.resolveAllowOverflow" }],
@@ -14781,6 +15361,14 @@ var tileTreatmentSet = new Set(tileTreatmentValues);
14781
15361
  function isTileTreatment(value) {
14782
15362
  return typeof value === "string" && tileTreatmentSet.has(value);
14783
15363
  }
15364
+ var eventListTreatmentClassMap = {
15365
+ plain: "",
15366
+ "lined-panel": "rb-event-list-treatment-lined-panel"
15367
+ };
15368
+ var eventListTreatmentSet = new Set(eventListTreatmentValues);
15369
+ function isEventListTreatment(value) {
15370
+ return typeof value === "string" && eventListTreatmentSet.has(value);
15371
+ }
14784
15372
  var sectionClassNameTransform = {
14785
15373
  id: "sectionStyles.resolveClassName",
14786
15374
  kind: "string",
@@ -14848,6 +15436,17 @@ var sectionClassNameTransform = {
14848
15436
  `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
14849
15437
  );
14850
15438
  }
15439
+ const eventListTreatment = input?.eventListTreatment;
15440
+ if (isEventListTreatment(eventListTreatment)) {
15441
+ const eventListTreatmentClass = eventListTreatmentClassMap[eventListTreatment];
15442
+ if (eventListTreatmentClass) {
15443
+ classes.push(eventListTreatmentClass);
15444
+ }
15445
+ } else if (typeof eventListTreatment === "string" && process.env.NODE_ENV !== "production") {
15446
+ console.warn(
15447
+ `[sectionStyles] Invalid eventListTreatment value in _sectionStyles: "${eventListTreatment}". Expected one of: ${eventListTreatmentValues.join(", ")}.`
15448
+ );
15449
+ }
14851
15450
  if (hasFixedFrameBackgroundMotion(input)) {
14852
15451
  classes.push(fixedFrameScopeClass);
14853
15452
  }
@@ -15283,6 +15882,35 @@ function sectionState(opts) {
15283
15882
  );
15284
15883
  }
15285
15884
 
15885
+ // ../blocks/src/system/node/fragments/headingDecoration.ts
15886
+ var defaultBindFrom = "_sectionStyles.headingDecoration";
15887
+ function headingDecoration({
15888
+ bindFrom = defaultBindFrom,
15889
+ family,
15890
+ placement,
15891
+ className
15892
+ }) {
15893
+ return el(
15894
+ "div",
15895
+ {
15896
+ "aria-hidden": "true",
15897
+ className: {
15898
+ $bind: {
15899
+ from: bindFrom,
15900
+ transforms: [
15901
+ {
15902
+ id: "ui.headingDecorationClassName",
15903
+ options: { baseClass: className, family }
15904
+ }
15905
+ ]
15906
+ }
15907
+ }
15908
+ },
15909
+ null,
15910
+ when(`${bindFrom}.placement`, { equals: placement })
15911
+ );
15912
+ }
15913
+
15286
15914
  // ../blocks/src/system/fragments/types.ts
15287
15915
  import { z as z27 } from "zod";
15288
15916
  var FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;
@@ -16061,6 +16689,10 @@ var testimonialsHeadingFragment = defineFragment({
16061
16689
  when("content.heading"),
16062
16690
  bind("content.heading")
16063
16691
  ),
16692
+ headingDecoration({
16693
+ family: "short-center-rule",
16694
+ placement: "under-centered-heading"
16695
+ }),
16064
16696
  text(
16065
16697
  {
16066
16698
  as: "p",
@@ -16732,6 +17364,41 @@ var faqHeadingFragment = defineFragment({
16732
17364
  });
16733
17365
 
16734
17366
  // ../blocks/src/system/fragments/library/faqAccordion.ts
17367
+ function createFaqAccordionLayout(options = {}) {
17368
+ return accordionList({
17369
+ collection: "content.items",
17370
+ itemName: "faqItem",
17371
+ indexName: "faqIndex",
17372
+ accordionProps: {
17373
+ className: options.rootClassName ?? "accordion-root",
17374
+ type: "single",
17375
+ collapsible: true
17376
+ },
17377
+ itemProps: {
17378
+ className: {
17379
+ $bind: {
17380
+ from: "content._cardStyles",
17381
+ transforms: [
17382
+ {
17383
+ id: "boxStyles.all",
17384
+ options: {
17385
+ axis: "all",
17386
+ includeSpacing: false,
17387
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
17388
+ }
17389
+ }
17390
+ ]
17391
+ },
17392
+ fallback: "rb-faq-item"
17393
+ },
17394
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
17395
+ // Legacy theme accordion style
17396
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
17397
+ },
17398
+ triggerFrom: "faqItem.question",
17399
+ contentFrom: "faqItem.answer"
17400
+ });
17401
+ }
16735
17402
  var faqAccordionFragment = defineFragment({
16736
17403
  id: "faqAccordion",
16737
17404
  title: "FAQ Accordion",
@@ -16765,40 +17432,7 @@ var faqAccordionFragment = defineFragment({
16765
17432
  }
16766
17433
  }
16767
17434
  ],
16768
- layout: accordionList({
16769
- collection: "content.items",
16770
- itemName: "faqItem",
16771
- indexName: "faqIndex",
16772
- accordionProps: {
16773
- className: "accordion-root",
16774
- // CSS-first: all styling handled by theme CSS
16775
- type: "single",
16776
- collapsible: true
16777
- },
16778
- itemProps: {
16779
- className: {
16780
- $bind: {
16781
- from: "content._cardStyles",
16782
- transforms: [
16783
- {
16784
- id: "boxStyles.all",
16785
- options: {
16786
- axis: "all",
16787
- includeSpacing: false,
16788
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden rb-border"
16789
- }
16790
- }
16791
- ]
16792
- },
16793
- fallback: "rb-faq-item"
16794
- },
16795
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
16796
- // Legacy theme accordion style
16797
- iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
16798
- },
16799
- triggerFrom: "faqItem.question",
16800
- contentFrom: "faqItem.answer"
16801
- })
17435
+ layout: createFaqAccordionLayout()
16802
17436
  });
16803
17437
 
16804
17438
  // ../blocks/src/system/fragments/library/card.ts
@@ -17851,6 +18485,7 @@ var microLayout = styledSection({
17851
18485
  function splitLayoutWith(children) {
17852
18486
  return styledSection({
17853
18487
  children: styledContainer({
18488
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
17854
18489
  children: {
17855
18490
  type: "grid",
17856
18491
  props: {
@@ -17875,6 +18510,7 @@ function splitLayoutWith(children) {
17875
18510
  // The split variants render the image as a real grid column, so suppress
17876
18511
  // the default absolute background image layer while keeping color/overlay.
17877
18512
  renderBackgroundImage: false,
18513
+ allowOverflow: true,
17878
18514
  baseClass: ""
17879
18515
  });
17880
18516
  }
@@ -18028,6 +18664,21 @@ function introHeading(className) {
18028
18664
  bind("content.title")
18029
18665
  );
18030
18666
  }
18667
+ function introHeadingGroup(className) {
18668
+ return stack(
18669
+ {
18670
+ gap: "sm",
18671
+ className: "rb-intro-heading-group"
18672
+ },
18673
+ [
18674
+ introHeading(className),
18675
+ headingDecoration({
18676
+ family: "organic-squiggle",
18677
+ placement: "after-heading"
18678
+ })
18679
+ ]
18680
+ );
18681
+ }
18031
18682
  function introBody(className = "rb-prose rb-max-w-none") {
18032
18683
  return richText({ className }, bind("content.body"));
18033
18684
  }
@@ -18046,6 +18697,10 @@ function introCopyStack(options = {}) {
18046
18697
  },
18047
18698
  [
18048
18699
  introHeading(options.headingClassName ?? "rb-intro-title"),
18700
+ headingDecoration({
18701
+ family: "organic-squiggle",
18702
+ placement: "after-heading"
18703
+ }),
18049
18704
  introBody(options.bodyClassName),
18050
18705
  introCtas(options.ctaJustify)
18051
18706
  ]
@@ -18085,7 +18740,7 @@ var statementCopyLayout = styledSection({
18085
18740
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
18086
18741
  },
18087
18742
  [
18088
- introHeading("rb-intro-title rb-max-w-xl"),
18743
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
18089
18744
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18090
18745
  introBody(),
18091
18746
  introCtas("start")
@@ -18106,7 +18761,7 @@ var statementMediaLayout = styledSection({
18106
18761
  className: "rb-intro rb-intro-statement-media rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-3 rb-lg-items-center"
18107
18762
  },
18108
18763
  [
18109
- introHeading("rb-intro-title rb-max-w-xl"),
18764
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
18110
18765
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18111
18766
  introBody(),
18112
18767
  introCtas("start")
@@ -19108,6 +19763,9 @@ function isNodeDefinitionArray(layout) {
19108
19763
  }
19109
19764
  var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
19110
19765
  var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
19766
+ var questionColumnsAccordionLayout = createFaqAccordionLayout({
19767
+ rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
19768
+ });
19111
19769
  var defaultLayout = styledSection({
19112
19770
  children: styledContainer({
19113
19771
  baseClassName: "rb-relative rb-isolate",
@@ -19121,11 +19779,24 @@ var twoColumnLayout = styledSection({
19121
19779
  children: el(
19122
19780
  "div",
19123
19781
  {
19124
- className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19782
+ className: "rb-faq-split-heading rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19125
19783
  },
19126
19784
  [
19127
- el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
19128
- el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
19785
+ el("div", { className: "rb-faq-split-heading-copy" }, [headingLayout]),
19786
+ el("div", { className: "rb-faq-split-heading-accordion" }, [accordionLayout])
19787
+ ]
19788
+ )
19789
+ }),
19790
+ baseClass: ""
19791
+ });
19792
+ var questionColumnsLayout = styledSection({
19793
+ children: styledContainer({
19794
+ baseClassName: "rb-relative rb-isolate",
19795
+ children: stack(
19796
+ { gap: "xl", className: "rb-w-full" },
19797
+ [
19798
+ headingLayout,
19799
+ questionColumnsAccordionLayout
19129
19800
  ]
19130
19801
  )
19131
19802
  }),
@@ -19150,7 +19821,8 @@ var faqManifest = createBlockManifest({
19150
19821
  layout: defaultLayout,
19151
19822
  variants: {
19152
19823
  default: defaultLayout,
19153
- "two-column": twoColumnLayout
19824
+ "two-column": twoColumnLayout,
19825
+ "question-columns": questionColumnsLayout
19154
19826
  },
19155
19827
  defaultVariant: "default",
19156
19828
  variantOptions: {
@@ -19161,6 +19833,10 @@ var faqManifest = createBlockManifest({
19161
19833
  "two-column": {
19162
19834
  label: "Two column",
19163
19835
  description: "A left heading column with FAQ items on the right."
19836
+ },
19837
+ "question-columns": {
19838
+ label: "Question columns",
19839
+ description: "A full-width heading above FAQ items split into two columns."
19164
19840
  }
19165
19841
  },
19166
19842
  description: "Accordion of frequently asked questions and answers.",
@@ -19282,9 +19958,21 @@ var eyebrowTreatmentClassMap = {
19282
19958
  "accent-pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent rb-eyebrow-treatment-pill-bounce"
19283
19959
  };
19284
19960
  var eyebrowTreatmentSet = new Set(eyebrowTreatmentValues);
19961
+ var headingDecorationFamilySet = new Set(visibleHeadingDecorationFamilyValues);
19962
+ var headingDecorationPlacementSet = new Set(visibleHeadingDecorationPlacementValues);
19963
+ var headingDecorationColorTokenSet = new Set(headingDecorationColorTokenValues);
19285
19964
  function isEyebrowTreatment(value) {
19286
19965
  return typeof value === "string" && eyebrowTreatmentSet.has(value);
19287
19966
  }
19967
+ function isHeadingDecorationFamily(value) {
19968
+ return typeof value === "string" && headingDecorationFamilySet.has(value);
19969
+ }
19970
+ function isHeadingDecorationPlacement(value) {
19971
+ return typeof value === "string" && headingDecorationPlacementSet.has(value);
19972
+ }
19973
+ function isHeadingDecorationColorToken(value) {
19974
+ return typeof value === "string" && headingDecorationColorTokenSet.has(value);
19975
+ }
19288
19976
  var imageGalleryCornerClassMap = {
19289
19977
  none: "",
19290
19978
  sm: "rb-rounded-sm",
@@ -19388,6 +20076,10 @@ var sectionStateToneTransform = {
19388
20076
  summary: "Map semantic section-state kind to feedback tone",
19389
20077
  run: (value) => sectionStateToneFromUnknown(value)
19390
20078
  };
20079
+ var heroTitleLengthThresholds = {
20080
+ medium: { maxCharacters: 42, maxWords: 6 },
20081
+ long: { maxCharacters: 78, maxWords: 11 }
20082
+ };
19391
20083
  function isPlainObject(value) {
19392
20084
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
19393
20085
  }
@@ -19395,6 +20087,14 @@ function readString(obj, key) {
19395
20087
  const v = obj[key];
19396
20088
  return typeof v === "string" ? v : void 0;
19397
20089
  }
20090
+ function resolveGeneratedHeroLayoutStyles(content) {
20091
+ const raw = content._heroLayoutStyles;
20092
+ return isPlainObject(raw) ? raw : null;
20093
+ }
20094
+ function readHeroLayoutString(content, generatedKey, fallbackKey = generatedKey) {
20095
+ const generated = resolveGeneratedHeroLayoutStyles(content);
20096
+ return generated && typeof generated[generatedKey] === "string" ? generated[generatedKey] : readString(content, fallbackKey);
20097
+ }
19398
20098
  function resolveHeroVariant(content) {
19399
20099
  const variant = readString(content, "variant");
19400
20100
  if (variant && variant.trim()) return variant.trim();
@@ -19403,14 +20103,14 @@ function resolveHeroVariant(content) {
19403
20103
  return null;
19404
20104
  }
19405
20105
  function resolveHeroContentAlignment(content) {
19406
- const raw = readString(content, "contentAlignment");
20106
+ const raw = readHeroLayoutString(content, "contentAlignment");
19407
20107
  if (raw === "left" || raw === "center" || raw === "right") return raw;
19408
20108
  const variant = resolveHeroVariant(content);
19409
20109
  if (variant === "split" || variant === "splitReverse") return "left";
19410
20110
  return "center";
19411
20111
  }
19412
20112
  function resolveHeroVerticalAlignment(content) {
19413
- const raw = readString(content, "verticalAlignment");
20113
+ const raw = readHeroLayoutString(content, "verticalAlignment");
19414
20114
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
19415
20115
  const sectionStyles = asPartialObject(content._sectionStyles);
19416
20116
  const minHeight = sectionStyles?.minHeight;
@@ -19420,11 +20120,29 @@ function resolveHeroVerticalAlignment(content) {
19420
20120
  return "top";
19421
20121
  }
19422
20122
  function resolveHeroContentMaxWidth(content) {
19423
- const raw = readString(content, "contentMaxWidth");
20123
+ const raw = readHeroLayoutString(content, "contentMaxWidth");
19424
20124
  if (raw === "default" || raw === "narrow" || raw === "medium" || raw === "wide")
19425
20125
  return raw;
19426
20126
  return "default";
19427
20127
  }
20128
+ function resolveHeroTypographyScale(content) {
20129
+ const raw = readHeroLayoutString(
20130
+ content,
20131
+ "typographyScale",
20132
+ "heroTypographyScale"
20133
+ );
20134
+ if (raw === "quiet" || raw === "editorial" || raw === "display" || raw === "poster") {
20135
+ return raw;
20136
+ }
20137
+ return null;
20138
+ }
20139
+ function resolveHeroTitleLength(content) {
20140
+ const headline = readString(content, "headline")?.trim() ?? "";
20141
+ const wordCount = headline.length === 0 ? 0 : headline.split(/\s+/).length;
20142
+ if (headline.length > heroTitleLengthThresholds.long.maxCharacters || wordCount > heroTitleLengthThresholds.long.maxWords) return "long";
20143
+ if (headline.length > heroTitleLengthThresholds.medium.maxCharacters || wordCount > heroTitleLengthThresholds.medium.maxWords) return "medium";
20144
+ return "short";
20145
+ }
19428
20146
  var heroContentWrapperClassSchema = z33.object({
19429
20147
  base: z33.string().optional()
19430
20148
  });
@@ -19437,6 +20155,8 @@ var heroContentWrapperClassTransform = {
19437
20155
  const content = isPlainObject(value) ? value : isPlainObject(context.data) ? context.data : {};
19438
20156
  const alignment = resolveHeroContentAlignment(content);
19439
20157
  const maxWidth = resolveHeroContentMaxWidth(content);
20158
+ const typographyScale = resolveHeroTypographyScale(content);
20159
+ const titleLength = resolveHeroTitleLength(content);
19440
20160
  const textAlignClass = alignment === "center" ? "rb-text-center" : alignment === "right" ? "rb-text-right" : "rb-text-left";
19441
20161
  const maxWidthClass = maxWidth === "narrow" ? "rb-max-w-2xl" : maxWidth === "medium" ? "rb-max-w-3xl" : maxWidth === "wide" ? "rb-max-w-5xl" : "";
19442
20162
  const positionClass = alignment === "center" ? "rb-mx-auto" : alignment === "right" ? "rb-ml-auto" : "";
@@ -19444,7 +20164,9 @@ var heroContentWrapperClassTransform = {
19444
20164
  options?.base,
19445
20165
  textAlignClass,
19446
20166
  maxWidthClass,
19447
- positionClass
20167
+ positionClass,
20168
+ typographyScale ? `rb-hero-typography-${typographyScale}` : "",
20169
+ `rb-hero-title-${titleLength}`
19448
20170
  ]);
19449
20171
  }
19450
20172
  };
@@ -19744,11 +20466,67 @@ var uiTransforms = [
19744
20466
  const treatment = isEyebrowTreatment(value) ? value : "plain";
19745
20467
  return joinClasses3([baseClass, eyebrowTreatmentClassMap[treatment]]);
19746
20468
  }
20469
+ },
20470
+ {
20471
+ id: "ui.headingDecorationClassName",
20472
+ kind: "string",
20473
+ summary: "Apply constrained Theme V2 heading decoration classes",
20474
+ run: (value, options) => {
20475
+ const baseClass = typeof options?.baseClass === "string" && options.baseClass.trim() ? options.baseClass : "rb-heading-decoration";
20476
+ const decoration = asPartialObject(value);
20477
+ const family = isHeadingDecorationFamily(decoration?.family) ? decoration.family : null;
20478
+ const allowedFamily = isHeadingDecorationFamily(options?.family) ? options.family : null;
20479
+ const placement = isHeadingDecorationPlacement(decoration?.placement) ? decoration.placement : null;
20480
+ const colorToken = isHeadingDecorationColorToken(decoration?.colorToken) ? decoration.colorToken : "primary";
20481
+ if (!family || !placement) return "rb-hidden";
20482
+ if (allowedFamily && family !== allowedFamily) return "rb-hidden";
20483
+ return joinClasses3([
20484
+ baseClass,
20485
+ `rb-heading-decoration-${family}`,
20486
+ `rb-heading-decoration-placement-${placement}`,
20487
+ `rb-heading-decoration-color-${colorToken}`
20488
+ ]);
20489
+ }
19747
20490
  }
19748
20491
  ];
19749
20492
 
19750
20493
  // ../blocks/src/system/transforms/registry/layout.ts
19751
20494
  import { z as z34 } from "zod";
20495
+
20496
+ // ../theme-core/src/siteChromePlacement.ts
20497
+ var HEADER_POSITIONINGS = ["static", "sticky", "fixed"];
20498
+ function parseHeaderPositioning(value) {
20499
+ return isHeaderPositioning(value) ? value : "static";
20500
+ }
20501
+ function isHeaderPositioning(value) {
20502
+ return typeof value === "string" && HEADER_POSITIONINGS.includes(value);
20503
+ }
20504
+ function planSiteChromePlacement(positioning) {
20505
+ switch (positioning) {
20506
+ case "static":
20507
+ return {
20508
+ kind: "static",
20509
+ headerRootClassName: null,
20510
+ standaloneShellClassName: null
20511
+ };
20512
+ case "sticky":
20513
+ return {
20514
+ kind: "sticky",
20515
+ headerRootClassName: "rb-sticky rb-top-0",
20516
+ standaloneShellClassName: "sticky top-0 z-40 w-full"
20517
+ };
20518
+ case "fixed":
20519
+ return {
20520
+ kind: "fixed",
20521
+ headerRootClassName: "rb-fixed rb-top-0 rb-left-0 rb-right-0",
20522
+ standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
20523
+ };
20524
+ default:
20525
+ return assertNever(positioning);
20526
+ }
20527
+ }
20528
+
20529
+ // ../blocks/src/system/transforms/registry/layout.ts
19752
20530
  var joinClasses4 = (parts) => parts.filter(
19753
20531
  (part) => typeof part === "string" && part.trim().length > 0
19754
20532
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -19864,32 +20642,35 @@ var headerRootClassTransform = {
19864
20642
  ...options
19865
20643
  };
19866
20644
  const content = asPartialObject(value) ?? {};
19867
- const positioning = typeof content.positioning === "string" ? content.positioning : "static";
20645
+ const positioning = parseHeaderPositioning(content.positioning);
20646
+ const placement = planSiteChromePlacement(positioning);
19868
20647
  const shrinkOnScroll = Boolean(content.shrinkOnScroll);
19869
20648
  const header = asPartialObject(value);
19870
20649
  const visuals = resolveHeaderVisualStyles(header, context.theme);
19871
20650
  const navContainerType = header?.navContainer?.type ?? "none";
19872
20651
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
19873
20652
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
19874
- const classes = [
19875
- config.base,
19876
- backgroundClass
19877
- ];
20653
+ const classes = [config.base, backgroundClass];
19878
20654
  if (!hasContainedNav) {
19879
20655
  if (config.blur) classes.push(config.blur);
19880
20656
  if (config.blurSupport) classes.push(config.blurSupport);
19881
20657
  }
19882
- if (positioning === "sticky") {
20658
+ if (placement.kind === "sticky") {
19883
20659
  classes.push(
19884
20660
  visuals.isTransparent ? config.stickyTransparent : config.sticky
19885
20661
  );
19886
- } else if (positioning === "fixed") {
20662
+ } else if (placement.kind === "fixed") {
19887
20663
  classes.push(config.fixed);
19888
20664
  }
19889
- if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
20665
+ if (shrinkOnScroll && placement.kind !== "static") {
19890
20666
  classes.push(config.shrink);
19891
20667
  }
19892
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
20668
+ const VALID_VARIANTS = [
20669
+ "classic",
20670
+ "centered",
20671
+ "transparent",
20672
+ "floating"
20673
+ ];
19893
20674
  const variant = header?.variant;
19894
20675
  if (variant && VALID_VARIANTS.includes(variant)) {
19895
20676
  classes.push(`header-variant-${variant}`);
@@ -20416,6 +21197,10 @@ function desktopOnlyDisplay(display) {
20416
21197
  return `rb-hidden ${LARGE_DISPLAY_CLASSES[display]}`;
20417
21198
  }
20418
21199
 
21200
+ // ../theme-core/src/siteChromeOverlayClearance.ts
21201
+ var SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
21202
+ var SITE_CHROME_VISIBLE_HEADER_SELECTOR = `[${SITE_CHROME_VISIBLE_HEADER_ATTR}="true"]`;
21203
+
20419
21204
  // ../blocks/src/system/blocks/site-header.ts
20420
21205
  var logoRow = link(
20421
21206
  {
@@ -20510,15 +21295,21 @@ var mobileCta = ctaButton({
20510
21295
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
20511
21296
  {
20512
21297
  type: "div",
20513
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
21298
+ props: {
21299
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
21300
+ }
20514
21301
  },
20515
21302
  {
20516
21303
  type: "div",
20517
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
21304
+ props: {
21305
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
21306
+ }
20518
21307
  },
20519
21308
  {
20520
21309
  type: "div",
20521
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
21310
+ props: {
21311
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
21312
+ }
20522
21313
  }
20523
21314
  ]);
20524
21315
  var mobileToggleButton = {
@@ -20682,6 +21473,7 @@ var transparentLayout = inline(
20682
21473
  );
20683
21474
  var floatingLayout = inline(
20684
21475
  {
21476
+ [SITE_CHROME_VISIBLE_HEADER_ATTR]: "true",
20685
21477
  className: bindProp("$root.theme.header.maxWidth", {
20686
21478
  transforms: pipe(
20687
21479
  tx("layout.maxWidthClass", {
@@ -20701,28 +21493,6 @@ var floatingLayout = inline(
20701
21493
  ],
20702
21494
  when("$root.theme.header.variant", { equals: "floating" })
20703
21495
  );
20704
- var editorialLayout = stack(
20705
- {
20706
- gap: "md",
20707
- align: "center",
20708
- className: bindProp("$root.theme.header.maxWidth", {
20709
- transforms: pipe(
20710
- tx("layout.maxWidthClass", {
20711
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
20712
- })
20713
- ),
20714
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
20715
- })
20716
- },
20717
- [
20718
- centeredLogoRow,
20719
- createNavRow(
20720
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
20721
- "center"
20722
- )
20723
- ],
20724
- when("$root.theme.header.variant", { equals: "editorial" })
20725
- );
20726
21496
  var headerLayout = headerSection(
20727
21497
  {
20728
21498
  background: bindProp("$root.theme.header", {
@@ -20736,10 +21506,7 @@ var headerLayout = headerSection(
20736
21506
  }),
20737
21507
  style: bindProp("$root.theme.header", {
20738
21508
  transforms: pipe(tx("layout.headerRootStyle")),
20739
- fallback: mergeStyles(
20740
- textColorStyle("text"),
20741
- borderColorStyle("border")
20742
- )
21509
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
20743
21510
  })
20744
21511
  },
20745
21512
  [
@@ -20748,7 +21515,6 @@ var headerLayout = headerSection(
20748
21515
  centeredLayout,
20749
21516
  transparentLayout,
20750
21517
  floatingLayout,
20751
- editorialLayout,
20752
21518
  mobileOverlay
20753
21519
  ],
20754
21520
  props({
@@ -21653,6 +22419,10 @@ var sectionHeading = stack(
21653
22419
  when("content.title"),
21654
22420
  bind("content.title")
21655
22421
  ),
22422
+ headingDecoration({
22423
+ family: "short-center-rule",
22424
+ placement: "under-centered-heading"
22425
+ }),
21656
22426
  richText(
21657
22427
  {
21658
22428
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -24076,7 +24846,7 @@ var COLUMN_CLASSES = {
24076
24846
  };
24077
24847
  function getContainerClass(layout, columns) {
24078
24848
  if (layout === "compact") {
24079
- return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
24849
+ return "event-listing-compact-container rb-flex rb-flex-col";
24080
24850
  }
24081
24851
  if (layout === "stack") {
24082
24852
  return "rb-flex rb-flex-col rb-gap-6";
@@ -26904,6 +27674,7 @@ import { z as z53 } from "zod";
26904
27674
  var storedProductCartItemSchema = z53.object({
26905
27675
  kind: z53.literal("product"),
26906
27676
  productId: z53.string().min(1),
27677
+ productCategoryId: z53.string().min(1).optional().nullable(),
26907
27678
  variantId: z53.string().min(1).optional().nullable(),
26908
27679
  title: z53.string().min(1),
26909
27680
  variantTitle: z53.string().optional().nullable(),
@@ -29408,6 +30179,10 @@ var scheduleTileTreatments = [
29408
30179
  "quiet",
29409
30180
  "brand-depth"
29410
30181
  ];
30182
+ var eventListTreatments = [
30183
+ "plain",
30184
+ "lined-panel"
30185
+ ];
29411
30186
  function scheduleDetailsCapable() {
29412
30187
  return declareBlockDesignCapability({
29413
30188
  sectionSurfaces: "supported",
@@ -29416,6 +30191,14 @@ function scheduleDetailsCapable() {
29416
30191
  tileTreatments: scheduleTileTreatments
29417
30192
  });
29418
30193
  }
30194
+ function eventListCapable() {
30195
+ return declareBlockDesignCapability({
30196
+ sectionSurfaces: "supported",
30197
+ contentFrames: ["plain"],
30198
+ itemSurfaces: "unsupported",
30199
+ eventListTreatments
30200
+ });
30201
+ }
29419
30202
  function defaultBoundaryBias(visualWeight) {
29420
30203
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
29421
30204
  }
@@ -29635,7 +30418,8 @@ var systemBlockDefinitionsRaw = [
29635
30418
  flow: bodyFlow,
29636
30419
  layoutProfiles: [
29637
30420
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
29638
- layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
30421
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
30422
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
29639
30423
  ]
29640
30424
  })),
29641
30425
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -29729,11 +30513,11 @@ var systemBlockDefinitionsRaw = [
29729
30513
  flow: offeringsFlow,
29730
30514
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "centered", weight: "featured" })]
29731
30515
  })),
29732
- withDesignCapability("block.event-listing", eventListingBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
30516
+ withDesignCapability("block.event-listing", eventListingBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
29733
30517
  flow: offeringsFlow,
29734
30518
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
29735
30519
  })),
29736
- withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
30520
+ withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
29737
30521
  flow: offeringsFlow,
29738
30522
  layoutProfiles: [
29739
30523
  layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
@@ -30830,6 +31614,15 @@ ${root} {
30830
31614
  `;
30831
31615
  }
30832
31616
 
31617
+ // ../theme-core/src/runtime/themeCssVarNames.ts
31618
+ var THEME_RADIUS_CSS_VARS = {
31619
+ block: "--rb-block-radius",
31620
+ button: "--rb-button-radius",
31621
+ input: "--rb-input-radius",
31622
+ legacyCard: "--radius-card",
31623
+ legacyControl: "--radius-control"
31624
+ };
31625
+
30833
31626
  // ../theme-core/src/blocks/vars/customer-portal.ts
30834
31627
  function generateCustomerPortalVars({
30835
31628
  themeId
@@ -30843,6 +31636,11 @@ ${root} {
30843
31636
  --cp-muted: rgb(var(--tb-mutedText));
30844
31637
  --cp-border: rgb(var(--tb-border));
30845
31638
  --cp-shadow: var(--shadow-elev);
31639
+ --cp-primary: rgb(var(--tb-primary));
31640
+ --cp-primary-hover: rgb(var(--tb-primary-700, var(--tb-primary)));
31641
+ --cp-error: rgb(var(--tb-destructive));
31642
+ --cp-card-radius: var(${THEME_RADIUS_CSS_VARS.block}, var(${THEME_RADIUS_CSS_VARS.legacyCard}, 0.75rem));
31643
+ --cp-control-radius: var(${THEME_RADIUS_CSS_VARS.input}, var(${THEME_RADIUS_CSS_VARS.legacyControl}, 0.5rem));
30846
31644
 
30847
31645
  /* Shared tab bar (underline style) */
30848
31646
  --rb-tab-border-width: 1px;
@@ -30893,7 +31691,7 @@ ${root} {
30893
31691
  --rb-modal-bg: var(--cp-card-bg);
30894
31692
  --rb-modal-border: var(--cp-card-border);
30895
31693
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
30896
- --rb-modal-radius: var(--radius-card);
31694
+ --rb-modal-radius: var(--cp-card-radius);
30897
31695
  --rb-modal-max-width: 560px;
30898
31696
 
30899
31697
  /* Header */
@@ -32274,6 +33072,9 @@ import { jsx as jsx5 } from "react/jsx-runtime";
32274
33072
  import * as React from "react";
32275
33073
  import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
32276
33074
 
33075
+ // ../theme-core/src/fonts/uploadFormat.ts
33076
+ var MAX_FONT_UPLOAD_BYTES = 5 * 1024 * 1024;
33077
+
32277
33078
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
32278
33079
  import { z as z60 } from "zod";
32279
33080
  var themeBridgeConfigSchema = z60.object({
@@ -33054,6 +33855,7 @@ var COURSE_ENROLLMENT_REFUND_FAILED_CODES = [
33054
33855
  ];
33055
33856
 
33056
33857
  // ../api/src/bookingVerticals.ts
33858
+ import { z as z63 } from "zod";
33057
33859
  var VERTICAL_IDS = [
33058
33860
  "yoga_wellness",
33059
33861
  "fitness_pt",
@@ -33132,6 +33934,132 @@ var VERTICAL_ID_SET = new Set(VERTICAL_IDS);
33132
33934
  var VERTICAL_PRESET_ID_SET = new Set(
33133
33935
  VERTICAL_BOOKING_PRESETS.map((presetDefinition) => presetDefinition.id)
33134
33936
  );
33937
+ function parseVerticalId(value) {
33938
+ return typeof value === "string" && VERTICAL_ID_SET.has(value) ? value : null;
33939
+ }
33940
+ function parseVerticalPresetId(value) {
33941
+ return typeof value === "string" && VERTICAL_PRESET_ID_SET.has(value) ? value : null;
33942
+ }
33943
+ function getVerticalPresetDefinition(presetId) {
33944
+ const definition = VERTICAL_BOOKING_PRESETS.find((presetDefinition) => presetDefinition.id === presetId);
33945
+ if (!definition) {
33946
+ throw new Error(`Unhandled vertical preset id: ${presetId}`);
33947
+ }
33948
+ return definition;
33949
+ }
33950
+ function toNonEmptyVerticalPresetIds(presetIds) {
33951
+ const firstPresetId = presetIds[0];
33952
+ return firstPresetId ? [firstPresetId, ...presetIds.slice(1)] : null;
33953
+ }
33954
+ function createConfiguredSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
33955
+ return {
33956
+ verticalId,
33957
+ selectedPresetIds
33958
+ };
33959
+ }
33960
+ function createSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
33961
+ const nonEmptyPresetIds = toNonEmptyVerticalPresetIds(selectedPresetIds);
33962
+ return nonEmptyPresetIds ? createConfiguredSiteVerticalBookingConfig(verticalId, nonEmptyPresetIds) : null;
33963
+ }
33964
+ function resolveSiteVerticalBookingConfig(rawConfig) {
33965
+ if (!rawConfig) {
33966
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
33967
+ }
33968
+ const verticalId = parseVerticalId(rawConfig.verticalId);
33969
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
33970
+ const selectedPresetIds = rawPresetIds.map(parseVerticalPresetId).filter((presetId) => Boolean(presetId));
33971
+ const config = {
33972
+ verticalId,
33973
+ selectedPresetIds
33974
+ };
33975
+ if (!verticalId && selectedPresetIds.length === 0) {
33976
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
33977
+ }
33978
+ const issues = getSiteVerticalConfigIssues(rawConfig, config);
33979
+ if (issues.length > 0) {
33980
+ return { kind: "invalid", config, issues };
33981
+ }
33982
+ const configuredConfig = verticalId ? createSiteVerticalBookingConfig(verticalId, selectedPresetIds) : null;
33983
+ if (!configuredConfig) {
33984
+ return { kind: "invalid", config, issues: ["empty_selected_presets"] };
33985
+ }
33986
+ return {
33987
+ kind: "configured",
33988
+ config: configuredConfig,
33989
+ selectedPresets: configuredConfig.selectedPresetIds.map(getVerticalPresetDefinition)
33990
+ };
33991
+ }
33992
+ function getSiteVerticalConfigIssues(rawConfig, config) {
33993
+ const issues = /* @__PURE__ */ new Set();
33994
+ if (rawConfig.verticalId != null && !config.verticalId) {
33995
+ issues.add("unknown_vertical");
33996
+ }
33997
+ if (!config.verticalId && config.selectedPresetIds.length > 0) {
33998
+ issues.add("missing_vertical");
33999
+ }
34000
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
34001
+ if (rawPresetIds.some((presetId) => parseVerticalPresetId(presetId) === null)) {
34002
+ issues.add("unknown_preset");
34003
+ }
34004
+ if (config.verticalId && config.selectedPresetIds.length === 0) {
34005
+ issues.add("empty_selected_presets");
34006
+ }
34007
+ const seenBehaviours = /* @__PURE__ */ new Set();
34008
+ for (const presetId of config.selectedPresetIds) {
34009
+ const presetDefinition = getVerticalPresetDefinition(presetId);
34010
+ if (config.verticalId && presetDefinition.verticalId !== config.verticalId) {
34011
+ issues.add("preset_vertical_mismatch");
34012
+ }
34013
+ if (presetDefinition.availability === "future") {
34014
+ issues.add("future_preset_selected");
34015
+ }
34016
+ if (seenBehaviours.has(presetDefinition.canonicalBehaviour)) {
34017
+ issues.add("duplicate_canonical_behaviour");
34018
+ }
34019
+ seenBehaviours.add(presetDefinition.canonicalBehaviour);
34020
+ }
34021
+ return [...issues];
34022
+ }
34023
+ var VerticalIdSchema = z63.string().trim().transform((value, ctx) => {
34024
+ const parsed = parseVerticalId(value);
34025
+ if (!parsed) {
34026
+ ctx.addIssue({
34027
+ code: z63.ZodIssueCode.custom,
34028
+ message: "Unknown booking vertical"
34029
+ });
34030
+ return z63.NEVER;
34031
+ }
34032
+ return parsed;
34033
+ });
34034
+ var VerticalPresetIdSchema = z63.string().trim().transform((value, ctx) => {
34035
+ const parsed = parseVerticalPresetId(value);
34036
+ if (!parsed) {
34037
+ ctx.addIssue({
34038
+ code: z63.ZodIssueCode.custom,
34039
+ message: "Unknown booking preset"
34040
+ });
34041
+ return z63.NEVER;
34042
+ }
34043
+ return parsed;
34044
+ });
34045
+ var BookingVerticalConfigSchema = z63.object({
34046
+ verticalId: VerticalIdSchema.nullable(),
34047
+ selectedPresetIds: z63.array(VerticalPresetIdSchema).max(20)
34048
+ }).transform((value, ctx) => {
34049
+ const resolved = resolveSiteVerticalBookingConfig(value);
34050
+ if (resolved.kind === "invalid") {
34051
+ ctx.addIssue({
34052
+ code: z63.ZodIssueCode.custom,
34053
+ message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
34054
+ });
34055
+ return z63.NEVER;
34056
+ }
34057
+ return resolved.config;
34058
+ });
34059
+ var DEFAULT_SITE_VERTICAL_BOOKING_CONFIG = {
34060
+ verticalId: null,
34061
+ selectedPresetIds: []
34062
+ };
33135
34063
  function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, description, availability = "onboarding") {
33136
34064
  return {
33137
34065
  id,
@@ -33151,51 +34079,51 @@ function isRecord3(value) {
33151
34079
  }
33152
34080
 
33153
34081
  // ../api/src/appointmentSetup.ts
33154
- import { z as z63 } from "zod";
34082
+ import { z as z64 } from "zod";
33155
34083
  var APPOINTMENT_SETUP_MAX_MINUTES = 1440;
33156
- var appointmentSetupRefSchema = z63.discriminatedUnion("kind", [
33157
- z63.object({ kind: z63.literal("existing"), id: z63.string().min(1) }),
33158
- z63.object({ kind: z63.literal("new"), draftId: z63.string().min(1) })
34084
+ var appointmentSetupRefSchema = z64.discriminatedUnion("kind", [
34085
+ z64.object({ kind: z64.literal("existing"), id: z64.string().min(1) }),
34086
+ z64.object({ kind: z64.literal("new"), draftId: z64.string().min(1) })
33159
34087
  ]);
33160
- var appointmentSetupVenueChoiceSchema = z63.discriminatedUnion("kind", [
33161
- z63.object({ kind: z63.literal("none") }),
33162
- z63.object({ kind: z63.literal("existing"), venueId: z63.string().min(1) }),
33163
- z63.object({
33164
- kind: z63.literal("create"),
33165
- draftId: z63.string().min(1),
33166
- title: z63.string().trim().min(1),
33167
- description: z63.string().nullable(),
33168
- timezone: z63.string().trim().min(1).nullable(),
33169
- addressJson: z63.record(z63.string(), z63.unknown()),
33170
- locationJson: z63.object({ lat: z63.number(), lng: z63.number() }).nullable()
34088
+ var appointmentSetupVenueChoiceSchema = z64.discriminatedUnion("kind", [
34089
+ z64.object({ kind: z64.literal("none") }),
34090
+ z64.object({ kind: z64.literal("existing"), venueId: z64.string().min(1) }),
34091
+ z64.object({
34092
+ kind: z64.literal("create"),
34093
+ draftId: z64.string().min(1),
34094
+ title: z64.string().trim().min(1),
34095
+ description: z64.string().nullable(),
34096
+ timezone: z64.string().trim().min(1).nullable(),
34097
+ addressJson: z64.record(z64.string(), z64.unknown()),
34098
+ locationJson: z64.object({ lat: z64.number(), lng: z64.number() }).nullable()
33171
34099
  })
33172
34100
  ]);
33173
- var appointmentSetupPaymentDraftSchema = z63.object({
33174
- priceType: z63.union([z63.literal("free"), z63.literal("paid")])
33175
- });
33176
- var appointmentSetupServiceAssignmentDraftSchema = z63.discriminatedUnion("kind", [
33177
- z63.object({ kind: z63.literal("all_practitioners") }),
33178
- z63.object({
33179
- kind: z63.literal("selected_practitioners"),
33180
- resourceRefs: z63.array(appointmentSetupRefSchema)
34101
+ var appointmentSetupPaymentDraftSchema = z64.object({
34102
+ priceType: z64.union([z64.literal("free"), z64.literal("paid")])
34103
+ });
34104
+ var appointmentSetupServiceAssignmentDraftSchema = z64.discriminatedUnion("kind", [
34105
+ z64.object({ kind: z64.literal("all_practitioners") }),
34106
+ z64.object({
34107
+ kind: z64.literal("selected_practitioners"),
34108
+ resourceRefs: z64.array(appointmentSetupRefSchema)
33181
34109
  })
33182
34110
  ]);
33183
- var appointmentSetupServiceDraftSchema = z63.object({
34111
+ var appointmentSetupServiceDraftSchema = z64.object({
33184
34112
  ref: appointmentSetupRefSchema,
33185
- title: z63.string().trim().min(1),
33186
- description: z63.string().nullable(),
33187
- durationMinutes: z63.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
33188
- prepMinutes: z63.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
33189
- cleanupMinutes: z63.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
33190
- priceAmount: z63.number().int().nonnegative().nullable(),
33191
- isActive: z63.boolean(),
33192
- locationType: z63.union([
33193
- z63.literal("virtual"),
33194
- z63.literal("in_person"),
33195
- z63.literal("hybrid")
34113
+ title: z64.string().trim().min(1),
34114
+ description: z64.string().nullable(),
34115
+ durationMinutes: z64.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
34116
+ prepMinutes: z64.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
34117
+ cleanupMinutes: z64.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
34118
+ priceAmount: z64.number().int().nonnegative().nullable(),
34119
+ isActive: z64.boolean(),
34120
+ locationType: z64.union([
34121
+ z64.literal("virtual"),
34122
+ z64.literal("in_person"),
34123
+ z64.literal("hybrid")
33196
34124
  ]),
33197
34125
  venue: appointmentSetupVenueChoiceSchema,
33198
- timezone: z63.string().trim().min(1).nullable(),
34126
+ timezone: z64.string().trim().min(1).nullable(),
33199
34127
  payment: appointmentSetupPaymentDraftSchema,
33200
34128
  assignment: appointmentSetupServiceAssignmentDraftSchema
33201
34129
  }).superRefine((service, ctx) => {
@@ -33214,49 +34142,49 @@ var appointmentSetupServiceDraftSchema = z63.object({
33214
34142
  });
33215
34143
  }
33216
34144
  });
33217
- var appointmentSetupPractitionerDraftSchema = z63.object({
34145
+ var appointmentSetupPractitionerDraftSchema = z64.object({
33218
34146
  ref: appointmentSetupRefSchema,
33219
- displayName: z63.string().trim().min(1),
33220
- bio: z63.string().nullable(),
33221
- timezone: z63.string().trim().min(1),
33222
- colorHex: z63.string().nullable()
33223
- });
33224
- var appointmentSetupWeeklyWindowDraftSchema = z63.object({
33225
- weekday: z63.number().int().min(0).max(6),
33226
- startTime: z63.string(),
33227
- endTime: z63.string()
33228
- });
33229
- var appointmentSetupStartTimePolicyDraftSchema = z63.discriminatedUnion("kind", [
33230
- z63.object({ kind: z63.literal("automatic_spacing") }),
33231
- z63.object({
33232
- kind: z63.literal("regular_interval"),
33233
- intervalMinutes: z63.union([
33234
- z63.literal(10),
33235
- z63.literal(15),
33236
- z63.literal(20),
33237
- z63.literal(30),
33238
- z63.literal(45),
33239
- z63.literal(60)
34147
+ displayName: z64.string().trim().min(1),
34148
+ bio: z64.string().nullable(),
34149
+ timezone: z64.string().trim().min(1),
34150
+ colorHex: z64.string().nullable()
34151
+ });
34152
+ var appointmentSetupWeeklyWindowDraftSchema = z64.object({
34153
+ weekday: z64.number().int().min(0).max(6),
34154
+ startTime: z64.string(),
34155
+ endTime: z64.string()
34156
+ });
34157
+ var appointmentSetupStartTimePolicyDraftSchema = z64.discriminatedUnion("kind", [
34158
+ z64.object({ kind: z64.literal("automatic_spacing") }),
34159
+ z64.object({
34160
+ kind: z64.literal("regular_interval"),
34161
+ intervalMinutes: z64.union([
34162
+ z64.literal(10),
34163
+ z64.literal(15),
34164
+ z64.literal(20),
34165
+ z64.literal(30),
34166
+ z64.literal(45),
34167
+ z64.literal(60)
33240
34168
  ])
33241
34169
  })
33242
34170
  ]);
33243
- var appointmentSetupAvailabilityDraftSchema = z63.object({
33244
- kind: z63.literal("weekly_windows"),
34171
+ var appointmentSetupAvailabilityDraftSchema = z64.object({
34172
+ kind: z64.literal("weekly_windows"),
33245
34173
  resourceRef: appointmentSetupRefSchema,
33246
34174
  serviceRef: appointmentSetupRefSchema.nullable(),
33247
- windows: z63.array(appointmentSetupWeeklyWindowDraftSchema),
34175
+ windows: z64.array(appointmentSetupWeeklyWindowDraftSchema),
33248
34176
  startTimePolicy: appointmentSetupStartTimePolicyDraftSchema.optional()
33249
34177
  });
33250
34178
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
33251
34179
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
33252
- var appointmentSetupBookingNoticeSchema = z63.object({
33253
- minLeadMinutes: z63.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
33254
- maxBookingNoticeMinutes: z63.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
33255
- });
33256
- var applyAppointmentSetupRequestSchema = z63.object({
33257
- services: z63.array(appointmentSetupServiceDraftSchema),
33258
- practitioners: z63.array(appointmentSetupPractitionerDraftSchema),
33259
- availability: z63.array(appointmentSetupAvailabilityDraftSchema),
34180
+ var appointmentSetupBookingNoticeSchema = z64.object({
34181
+ minLeadMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
34182
+ maxBookingNoticeMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
34183
+ });
34184
+ var applyAppointmentSetupRequestSchema = z64.object({
34185
+ services: z64.array(appointmentSetupServiceDraftSchema),
34186
+ practitioners: z64.array(appointmentSetupPractitionerDraftSchema),
34187
+ availability: z64.array(appointmentSetupAvailabilityDraftSchema),
33260
34188
  bookingNotice: appointmentSetupBookingNoticeSchema
33261
34189
  });
33262
34190
 
@@ -33289,24 +34217,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
33289
34217
  ];
33290
34218
 
33291
34219
  // ../api/src/siteBanner.ts
33292
- import { z as z64 } from "zod";
34220
+ import { z as z65 } from "zod";
33293
34221
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
33294
34222
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
33295
34223
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
33296
34224
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
33297
- var siteBannerScopeSchema = z64.enum(SITE_BANNER_SCOPE_VALUES);
33298
- var siteBannerToneSchema = z64.enum(SITE_BANNER_TONE_VALUES);
33299
- var siteBannerBodySchema = z64.unknown().transform(unwrapRichTextValue);
33300
- var siteBannerCtaSchema = z64.object({
33301
- label: z64.string().trim().min(1),
34225
+ var siteBannerScopeSchema = z65.enum(SITE_BANNER_SCOPE_VALUES);
34226
+ var siteBannerToneSchema = z65.enum(SITE_BANNER_TONE_VALUES);
34227
+ var siteBannerBodySchema = z65.unknown().transform(unwrapRichTextValue);
34228
+ var siteBannerCtaSchema = z65.object({
34229
+ label: z65.string().trim().min(1),
33302
34230
  link: linkPayloadSchema
33303
34231
  });
33304
- var siteBannerSettingsSchema = z64.discriminatedUnion("enabled", [
33305
- z64.object({
33306
- enabled: z64.literal(false)
34232
+ var siteBannerSettingsSchema = z65.discriminatedUnion("enabled", [
34233
+ z65.object({
34234
+ enabled: z65.literal(false)
33307
34235
  }),
33308
- z64.object({
33309
- enabled: z64.literal(true),
34236
+ z65.object({
34237
+ enabled: z65.literal(true),
33310
34238
  scope: siteBannerScopeSchema,
33311
34239
  tone: siteBannerToneSchema,
33312
34240
  body: siteBannerBodySchema,
@@ -33320,7 +34248,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
33320
34248
  const analysis = analyzeSiteBannerBody(value.body);
33321
34249
  for (const issue of analysis.issues) {
33322
34250
  ctx.addIssue({
33323
- code: z64.ZodIssueCode.custom,
34251
+ code: z65.ZodIssueCode.custom,
33324
34252
  path: ["body"],
33325
34253
  message: siteBannerBodyIssueMessage(issue)
33326
34254
  });
@@ -33543,72 +34471,105 @@ function parsePublicProductCategorySelector(value) {
33543
34471
  return void 0;
33544
34472
  }
33545
34473
 
34474
+ // ../api/src/navigation/dashboardSiteNav.ts
34475
+ var hiddenDemoSiteNavSurfaceIds = [
34476
+ "site.newsletter"
34477
+ ];
34478
+ var hiddenDemoSiteNavIds = new Set(
34479
+ hiddenDemoSiteNavSurfaceIds
34480
+ );
34481
+ var websiteSurfaceIds = [
34482
+ "site.content",
34483
+ "site.footerBlocks",
34484
+ "site.navigation",
34485
+ "site.media",
34486
+ "site.style",
34487
+ "site.performance"
34488
+ ];
34489
+ var websiteSurfaceIdSet = new Set(
34490
+ websiteSurfaceIds
34491
+ );
34492
+
34493
+ // ../api/src/navigation/dashboardSettingsNav.ts
34494
+ var hiddenDemoSettingsNavSurfaceIds = [
34495
+ "settings.features",
34496
+ "settings.domains",
34497
+ "settings.bookings",
34498
+ "settings.emails",
34499
+ "settings.team",
34500
+ "settings.billing",
34501
+ "settings.developer",
34502
+ "settings.apiKeys",
34503
+ "settings.backup"
34504
+ ];
34505
+ var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
34506
+
33546
34507
  // ../api/src/aiPlayground.ts
33547
- import { z as z65 } from "zod";
33548
- var Rfc6902PatchOp = z65.discriminatedUnion("op", [
34508
+ import { z as z66 } from "zod";
34509
+ var Rfc6902PatchOp = z66.discriminatedUnion("op", [
33549
34510
  // Standard RFC-6902 operations
33550
- z65.object({
33551
- op: z65.literal("add"),
33552
- path: z65.string(),
33553
- value: z65.unknown()
34511
+ z66.object({
34512
+ op: z66.literal("add"),
34513
+ path: z66.string(),
34514
+ value: z66.unknown()
33554
34515
  }),
33555
- z65.object({
33556
- op: z65.literal("remove"),
33557
- path: z65.string()
34516
+ z66.object({
34517
+ op: z66.literal("remove"),
34518
+ path: z66.string()
33558
34519
  }),
33559
- z65.object({
33560
- op: z65.literal("replace"),
33561
- path: z65.string(),
33562
- value: z65.unknown()
34520
+ z66.object({
34521
+ op: z66.literal("replace"),
34522
+ path: z66.string(),
34523
+ value: z66.unknown()
33563
34524
  }),
33564
- z65.object({
33565
- op: z65.literal("move"),
33566
- from: z65.string(),
33567
- path: z65.string()
34525
+ z66.object({
34526
+ op: z66.literal("move"),
34527
+ from: z66.string(),
34528
+ path: z66.string()
33568
34529
  }),
33569
- z65.object({
33570
- op: z65.literal("copy"),
33571
- from: z65.string(),
33572
- path: z65.string()
34530
+ z66.object({
34531
+ op: z66.literal("copy"),
34532
+ from: z66.string(),
34533
+ path: z66.string()
33573
34534
  }),
33574
34535
  // Block-level operations (Phase 2)
33575
- z65.object({
33576
- op: z65.literal("add_block"),
33577
- blockKind: z65.string(),
33578
- afterBlockId: z65.string().nullable(),
33579
- content: z65.record(z65.string(), z65.unknown()),
33580
- rationale: z65.string()
34536
+ z66.object({
34537
+ op: z66.literal("add_block"),
34538
+ blockKind: z66.string(),
34539
+ afterBlockId: z66.string().nullable(),
34540
+ content: z66.record(z66.string(), z66.unknown()),
34541
+ rationale: z66.string()
33581
34542
  }),
33582
- z65.object({
33583
- op: z65.literal("delete_block"),
33584
- blockId: z65.string(),
33585
- rationale: z65.string()
34543
+ z66.object({
34544
+ op: z66.literal("delete_block"),
34545
+ blockId: z66.string(),
34546
+ rationale: z66.string()
33586
34547
  }),
33587
- z65.object({
33588
- op: z65.literal("reorder_block"),
33589
- blockId: z65.string(),
33590
- afterBlockId: z65.string().nullable(),
33591
- rationale: z65.string()
34548
+ z66.object({
34549
+ op: z66.literal("reorder_block"),
34550
+ blockId: z66.string(),
34551
+ afterBlockId: z66.string().nullable(),
34552
+ rationale: z66.string()
33592
34553
  })
33593
34554
  ]);
33594
- var PlaygroundProposeRequest = z65.object({
33595
- request: z65.string().min(1).max(2e3)
34555
+ var PlaygroundProposeRequest = z66.object({
34556
+ request: z66.string().min(1).max(2e3)
33596
34557
  });
33597
- var MultiPagePatchEnvelope = z65.object({
33598
- pageId: z65.string(),
33599
- blockId: z65.string().optional(),
34558
+ var MultiPagePatchEnvelope = z66.object({
34559
+ pageId: z66.string(),
34560
+ blockId: z66.string().optional(),
33600
34561
  // Not present for page-level ops
33601
- blockKind: z65.string().optional(),
33602
- blockPurpose: z65.string().optional().nullable(),
33603
- ops: z65.array(Rfc6902PatchOp),
33604
- rationale: z65.string(),
33605
- currentContent: z65.record(z65.string(), z65.unknown()).optional()
33606
- });
33607
- var MultiPageUpdateResponse = z65.object({
33608
- patches: z65.array(MultiPagePatchEnvelope),
33609
- assistantMessage: z65.string(),
33610
- pagesModified: z65.number(),
33611
- toolCallsUsed: z65.number()
34562
+ blockKind: z66.string().optional(),
34563
+ blockPurpose: z66.string().optional().nullable(),
34564
+ ops: z66.array(Rfc6902PatchOp),
34565
+ rationale: z66.string(),
34566
+ currentContent: z66.record(z66.string(), z66.unknown()).optional()
34567
+ });
34568
+ var MultiPageUpdateResponse = z66.object({
34569
+ patches: z66.array(MultiPagePatchEnvelope),
34570
+ assistantMessage: z66.string(),
34571
+ pagesModified: z66.number(),
34572
+ toolCallsUsed: z66.number()
33612
34573
  });
33613
34574
 
33614
34575
  // src/data/prefetchBlockData.ts