@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
@@ -3907,6 +3907,14 @@ var ENDPOINT_DEFINITIONS = {
3907
3907
  responseKind: "json",
3908
3908
  errors: []
3909
3909
  },
3910
+ applyDiscountCode: {
3911
+ path: "/public/sites/{siteId}/bookings/discounts/apply",
3912
+ method: "POST",
3913
+ tags: ["site-{siteId}", "booking-discounts"],
3914
+ auth: "public",
3915
+ responseKind: "json",
3916
+ errors: ["validation:invalid_input", "rate_limit:exceeded"]
3917
+ },
3910
3918
  // Batch endpoint for block loader requests (reduces SSR fan-out)
3911
3919
  batchBlockLoaders: {
3912
3920
  path: "/public/sites/{siteId}/block-loaders/batch",
@@ -6246,6 +6254,27 @@ var ENDPOINT_DEFINITIONS = {
6246
6254
  }
6247
6255
  };
6248
6256
 
6257
+ // ../core/src/location.ts
6258
+ function normalizeLocationAddressText(value) {
6259
+ if (typeof value !== "string") {
6260
+ return null;
6261
+ }
6262
+ const trimmed = value.trim();
6263
+ return trimmed ? trimmed : null;
6264
+ }
6265
+ function hasLocationCoordinates(value) {
6266
+ return typeof value?.lat === "number" && typeof value?.lng === "number";
6267
+ }
6268
+ function toLocationCoordinates(value) {
6269
+ if (!hasLocationCoordinates(value)) {
6270
+ return null;
6271
+ }
6272
+ return {
6273
+ lat: value.lat,
6274
+ lng: value.lng
6275
+ };
6276
+ }
6277
+
6249
6278
  // ../api/src/accessAdmin.ts
6250
6279
  import { z } from "zod";
6251
6280
  var managedDomainAddOnPricingSnapshotSchema = z.object({
@@ -6388,27 +6417,6 @@ function formatKeyAsLabel(key) {
6388
6417
  // ../blocks/src/system/manifest/schema.ts
6389
6418
  import { z as z4 } from "zod";
6390
6419
 
6391
- // ../core/src/location.ts
6392
- function normalizeLocationAddressText(value) {
6393
- if (typeof value !== "string") {
6394
- return null;
6395
- }
6396
- const trimmed = value.trim();
6397
- return trimmed ? trimmed : null;
6398
- }
6399
- function hasLocationCoordinates(value) {
6400
- return typeof value?.lat === "number" && typeof value?.lng === "number";
6401
- }
6402
- function toLocationCoordinates(value) {
6403
- if (!hasLocationCoordinates(value)) {
6404
- return null;
6405
- }
6406
- return {
6407
- lat: value.lat,
6408
- lng: value.lng
6409
- };
6410
- }
6411
-
6412
6420
  // ../media-core/src/transformRect.ts
6413
6421
  function isValidTransformRectStructure(rect) {
6414
6422
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -7433,6 +7441,9 @@ function makeBoundaryId(previousBlockId, nextBlockId) {
7433
7441
  const next = encodeURIComponent(nextBlockId);
7434
7442
  return asDesignBoundaryId(`boundary:${previous}:${next}`);
7435
7443
  }
7444
+ function assertNever(value, message = "Unhandled Theme V2 variant") {
7445
+ throw new Error(`${message}: ${String(value)}`);
7446
+ }
7436
7447
  function brandNonEmptyString(value, label) {
7437
7448
  if (value.length === 0) {
7438
7449
  throw new Error(`${label} must be a non-empty string.`);
@@ -7460,6 +7471,10 @@ var tileTreatmentValues = [
7460
7471
  "quiet",
7461
7472
  "brand-depth"
7462
7473
  ];
7474
+ var eventListTreatmentValues = [
7475
+ "plain",
7476
+ "lined-panel"
7477
+ ];
7463
7478
  var eyebrowTreatmentValues = [
7464
7479
  "plain",
7465
7480
  "pill",
@@ -7517,6 +7532,7 @@ function defineBlockDesignCapability(capability) {
7517
7532
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
7518
7533
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
7519
7534
  tileTreatments: capability.tileTreatments ?? ["default"],
7535
+ eventListTreatments: capability.eventListTreatments ?? ["plain"],
7520
7536
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7521
7537
  ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
7522
7538
  ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
@@ -7541,9 +7557,98 @@ var blockAppearancePresets = [
7541
7557
  transitionAfter: "soft-fade-short",
7542
7558
  emphasis: "high",
7543
7559
  sectionHeight: "hero",
7560
+ heroComposition: "center",
7561
+ heroTypographyScale: "display",
7544
7562
  imageSurfaceTreatment: { kind: "neutral-wash" }
7545
7563
  }
7546
7564
  }),
7565
+ defineBlockAppearancePreset({
7566
+ kind: "block-design",
7567
+ id: "hero-bottom-left-panel",
7568
+ target: "hero",
7569
+ label: "Bottom-left panel hero",
7570
+ blockKinds: ["block.hero"],
7571
+ constraints: {
7572
+ layoutFamilies: ["centered", "compact"]
7573
+ },
7574
+ optionGroups: [
7575
+ {
7576
+ id: "image-surface-treatment",
7577
+ label: "Treatment",
7578
+ selectedOptionId: "neutral-scrim",
7579
+ options: [
7580
+ {
7581
+ id: "neutral-scrim",
7582
+ label: "Neutral scrim",
7583
+ designPatch: {
7584
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
7585
+ }
7586
+ },
7587
+ {
7588
+ id: "brand-scrim-primary",
7589
+ label: "Brand scrim",
7590
+ designPatch: {
7591
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "balanced" }
7592
+ }
7593
+ }
7594
+ ]
7595
+ }
7596
+ ],
7597
+ layoutPatches: [
7598
+ {
7599
+ constraints: {
7600
+ layoutVariantKeys: ["micro"]
7601
+ },
7602
+ designPatch: {
7603
+ sectionHeight: "banner",
7604
+ heroTypographyScale: "editorial"
7605
+ }
7606
+ }
7607
+ ],
7608
+ design: {
7609
+ sectionSurface: "hero-image",
7610
+ contentFrame: panelFrame("raised"),
7611
+ itemSurface: "none",
7612
+ transitionAfter: "soft-fade-short",
7613
+ emphasis: "high",
7614
+ sectionHeight: "immersive",
7615
+ heroComposition: "bottom-left",
7616
+ heroTypographyScale: "display",
7617
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
7618
+ }
7619
+ }),
7620
+ defineBlockAppearancePreset({
7621
+ kind: "block-design",
7622
+ id: "hero-poster-image",
7623
+ target: "hero",
7624
+ label: "Poster image hero",
7625
+ blockKinds: ["block.hero"],
7626
+ constraints: {
7627
+ layoutFamilies: ["centered", "compact"]
7628
+ },
7629
+ layoutPatches: [
7630
+ {
7631
+ constraints: {
7632
+ layoutVariantKeys: ["micro"]
7633
+ },
7634
+ designPatch: {
7635
+ sectionHeight: "banner",
7636
+ heroTypographyScale: "display"
7637
+ }
7638
+ }
7639
+ ],
7640
+ design: {
7641
+ sectionSurface: "hero-image",
7642
+ contentFrame: plainFrame,
7643
+ itemSurface: "none",
7644
+ transitionAfter: "soft-fade-short",
7645
+ emphasis: "high",
7646
+ sectionHeight: "immersive",
7647
+ heroComposition: "center",
7648
+ heroTypographyScale: "poster",
7649
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "strong" }
7650
+ }
7651
+ }),
7547
7652
  defineBlockAppearancePreset({
7548
7653
  kind: "block-design",
7549
7654
  id: "hero-brand-scrim",
@@ -7593,6 +7698,8 @@ var blockAppearancePresets = [
7593
7698
  transitionAfter: "soft-fade-short",
7594
7699
  emphasis: "high",
7595
7700
  sectionHeight: "immersive",
7701
+ heroComposition: "center",
7702
+ heroTypographyScale: "display",
7596
7703
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
7597
7704
  }
7598
7705
  }),
@@ -7645,6 +7752,8 @@ var blockAppearancePresets = [
7645
7752
  transitionAfter: "soft-fade-short",
7646
7753
  emphasis: "high",
7647
7754
  sectionHeight: "immersive",
7755
+ heroComposition: "center",
7756
+ heroTypographyScale: "display",
7648
7757
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
7649
7758
  imageSurfaceMotion: "fixed-frame",
7650
7759
  eyebrowTreatment: "accent-pill-bounce"
@@ -7665,6 +7774,8 @@ var blockAppearancePresets = [
7665
7774
  itemSurface: "none",
7666
7775
  transitionAfter: "soft-fade-short",
7667
7776
  emphasis: "high",
7777
+ heroComposition: "center",
7778
+ heroTypographyScale: "editorial",
7668
7779
  eyebrowTreatment: "accent-pill-bounce"
7669
7780
  }
7670
7781
  }),
@@ -7679,7 +7790,82 @@ var blockAppearancePresets = [
7679
7790
  contentFrame: panelFrame("inset"),
7680
7791
  itemSurface: "none",
7681
7792
  transitionAfter: "none",
7682
- emphasis: "high"
7793
+ emphasis: "high",
7794
+ heroComposition: "center",
7795
+ heroTypographyScale: "editorial"
7796
+ }
7797
+ }),
7798
+ defineBlockAppearancePreset({
7799
+ kind: "block-design",
7800
+ id: "hero-split-editorial",
7801
+ target: "hero",
7802
+ label: "Editorial split hero",
7803
+ blockKinds: ["block.hero"],
7804
+ constraints: {
7805
+ layoutFamilies: ["split"]
7806
+ },
7807
+ design: {
7808
+ sectionSurface: "base",
7809
+ contentFrame: plainFrame,
7810
+ itemSurface: "none",
7811
+ transitionAfter: "soft-fade-short",
7812
+ emphasis: "high",
7813
+ heroTypographyScale: "editorial"
7814
+ }
7815
+ }),
7816
+ defineBlockAppearancePreset({
7817
+ kind: "block-design",
7818
+ id: "hero-split-brand",
7819
+ target: "hero",
7820
+ label: "Brand split hero",
7821
+ blockKinds: ["block.hero"],
7822
+ constraints: {
7823
+ layoutFamilies: ["split"]
7824
+ },
7825
+ design: {
7826
+ sectionSurface: "brand-depth-band",
7827
+ contentFrame: plainFrame,
7828
+ itemSurface: "none",
7829
+ transitionAfter: "soft-fade-short",
7830
+ emphasis: "high",
7831
+ heroTypographyScale: "display",
7832
+ eyebrowTreatment: "accent-pill-bounce"
7833
+ }
7834
+ }),
7835
+ defineBlockAppearancePreset({
7836
+ kind: "block-design",
7837
+ id: "hero-split-soft-panel",
7838
+ target: "hero",
7839
+ label: "Soft panel split hero",
7840
+ blockKinds: ["block.hero"],
7841
+ constraints: {
7842
+ layoutFamilies: ["split"]
7843
+ },
7844
+ design: {
7845
+ sectionSurface: "muted-band",
7846
+ contentFrame: panelFrame("raised"),
7847
+ itemSurface: "none",
7848
+ transitionAfter: "soft-fade-short",
7849
+ emphasis: "high",
7850
+ heroTypographyScale: "editorial"
7851
+ }
7852
+ }),
7853
+ defineBlockAppearancePreset({
7854
+ kind: "block-design",
7855
+ id: "hero-split-accent",
7856
+ target: "hero",
7857
+ label: "Accent split hero",
7858
+ blockKinds: ["block.hero"],
7859
+ constraints: {
7860
+ layoutFamilies: ["split"]
7861
+ },
7862
+ design: {
7863
+ sectionSurface: "accent-band",
7864
+ contentFrame: panelFrame("raised"),
7865
+ itemSurface: "none",
7866
+ transitionAfter: "soft-fade-short",
7867
+ emphasis: "high",
7868
+ heroTypographyScale: "display"
7683
7869
  }
7684
7870
  }),
7685
7871
  defineBlockAppearancePreset({
@@ -7712,9 +7898,9 @@ var blockAppearancePresets = [
7712
7898
  }),
7713
7899
  defineBlockAppearancePreset({
7714
7900
  kind: "block-design",
7715
- id: "intro-soft-earth-statement",
7901
+ id: "intro-organic-statement",
7716
7902
  target: "intro",
7717
- label: "Soft Earth intro statement",
7903
+ label: "Organic intro statement",
7718
7904
  blockKinds: ["block.intro"],
7719
7905
  design: {
7720
7906
  sectionSurface: "base",
@@ -7745,9 +7931,9 @@ var blockAppearancePresets = [
7745
7931
  }),
7746
7932
  defineBlockAppearancePreset({
7747
7933
  kind: "block-design",
7748
- id: "feature-cards-soft-earth-offerings",
7934
+ id: "feature-cards-raised-rule",
7749
7935
  target: "feature-cards",
7750
- label: "Soft Earth offering cards",
7936
+ label: "Raised cards with rule",
7751
7937
  blockKinds: ["block.feature-cards"],
7752
7938
  design: {
7753
7939
  sectionSurface: "base",
@@ -7776,6 +7962,21 @@ var blockAppearancePresets = [
7776
7962
  emphasis: "medium"
7777
7963
  }
7778
7964
  }),
7965
+ defineBlockAppearancePreset({
7966
+ kind: "block-design",
7967
+ id: "events-lined-panel",
7968
+ target: "events",
7969
+ label: "Lined event panel",
7970
+ blockKinds: ["block.event-calendar", "block.event-listing"],
7971
+ design: {
7972
+ sectionSurface: "base",
7973
+ contentFrame: plainFrame,
7974
+ itemSurface: "none",
7975
+ transitionAfter: "none",
7976
+ emphasis: "medium",
7977
+ eventListTreatment: "lined-panel"
7978
+ }
7979
+ }),
7779
7980
  defineBlockAppearancePreset({
7780
7981
  kind: "block-design",
7781
7982
  id: "schedule-details-accent-section",
@@ -7835,9 +8036,9 @@ var blockAppearancePresets = [
7835
8036
  }),
7836
8037
  defineBlockAppearancePreset({
7837
8038
  kind: "block-design",
7838
- id: "testimonials-carded-proof",
8039
+ id: "testimonials-simple-cards",
7839
8040
  target: "testimonials",
7840
- label: "Carded social proof",
8041
+ label: "Simple testimonial cards",
7841
8042
  blockKinds: ["block.testimonials"],
7842
8043
  design: {
7843
8044
  sectionSurface: "base",
@@ -7849,9 +8050,9 @@ var blockAppearancePresets = [
7849
8050
  }),
7850
8051
  defineBlockAppearancePreset({
7851
8052
  kind: "block-design",
7852
- id: "testimonials-contained-proof",
8053
+ id: "testimonials-raised-panel",
7853
8054
  target: "testimonials",
7854
- label: "Contained social proof",
8055
+ label: "Raised testimonial panel",
7855
8056
  blockKinds: ["block.testimonials"],
7856
8057
  design: {
7857
8058
  sectionSurface: "muted-band",
@@ -7863,9 +8064,9 @@ var blockAppearancePresets = [
7863
8064
  }),
7864
8065
  defineBlockAppearancePreset({
7865
8066
  kind: "block-design",
7866
- id: "testimonials-dark-proof",
8067
+ id: "testimonials-accent-panel",
7867
8068
  target: "testimonials",
7868
- label: "Dark proof panel",
8069
+ label: "Accent testimonial panel",
7869
8070
  blockKinds: ["block.testimonials"],
7870
8071
  design: {
7871
8072
  sectionSurface: "accent-band",
@@ -7877,9 +8078,9 @@ var blockAppearancePresets = [
7877
8078
  }),
7878
8079
  defineBlockAppearancePreset({
7879
8080
  kind: "block-design",
7880
- id: "testimonials-accent-quote-proof",
8081
+ id: "testimonials-accent-quote-cards",
7881
8082
  target: "testimonials",
7882
- label: "Accent quote proof",
8083
+ label: "Accent quote cards",
7883
8084
  blockKinds: ["block.testimonials"],
7884
8085
  design: {
7885
8086
  sectionSurface: "accent-band",
@@ -7892,9 +8093,9 @@ var blockAppearancePresets = [
7892
8093
  }),
7893
8094
  defineBlockAppearancePreset({
7894
8095
  kind: "block-design",
7895
- id: "testimonials-soft-earth-proof-band",
8096
+ id: "testimonials-brand-background-quotes",
7896
8097
  target: "testimonials",
7897
- label: "Soft Earth proof band",
8098
+ label: "Brand background quotes",
7898
8099
  blockKinds: ["block.testimonials"],
7899
8100
  design: {
7900
8101
  sectionSurface: "brand-depth-band",
@@ -7938,25 +8139,6 @@ var blockAppearancePresets = [
7938
8139
  emphasis: "low"
7939
8140
  }
7940
8141
  }),
7941
- defineBlockAppearancePreset({
7942
- kind: "block-design",
7943
- id: "faq-soft-earth-two-column",
7944
- target: "faq",
7945
- label: "Soft Earth two-column FAQ",
7946
- blockKinds: ["block.faq"],
7947
- design: {
7948
- sectionSurface: "base",
7949
- contentFrame: plainFrame,
7950
- itemSurface: "flat",
7951
- transitionAfter: "none",
7952
- emphasis: "medium",
7953
- accordionIconTreatment: {
7954
- iconSet: "plus",
7955
- colorToken: "primary",
7956
- motion: "swap"
7957
- }
7958
- }
7959
- }),
7960
8142
  defineBlockAppearancePreset({
7961
8143
  kind: "block-design",
7962
8144
  id: "contact-form-panel",
@@ -9335,7 +9517,8 @@ var accordionSystemSchema = z12.object({
9335
9517
  icon: z12.object({
9336
9518
  style: accordionIconSchema,
9337
9519
  position: z12.enum(["left", "right"]),
9338
- size: z12.enum(["sm", "md", "lg"])
9520
+ size: z12.enum(["sm", "md", "lg"]),
9521
+ colorToken: themeColorTokenSchema.optional()
9339
9522
  }),
9340
9523
  // Trigger (question) styling
9341
9524
  trigger: z12.object({
@@ -9469,6 +9652,7 @@ var navLinkPaddingXSchema = z16.enum(["none", "tight", "compact", "default", "re
9469
9652
  var navLinkBorderRadiusSchema = z16.enum(["none", "sm", "md", "full"]);
9470
9653
  var navLinkTextSizeSchema = z16.enum(["xs", "sm", "base", "lg"]);
9471
9654
  var navLinkLetterSpacingSchema = z16.enum(["normal", "wide", "wider", "widest"]);
9655
+ var navLinkContrastTreatmentSchema = z16.enum(["none", "soft-glow"]);
9472
9656
  var navLinkStyleSchema = z16.object({
9473
9657
  /** Display name for the style */
9474
9658
  name: z16.string().min(1).max(30).optional(),
@@ -9480,6 +9664,8 @@ var navLinkStyleSchema = z16.object({
9480
9664
  textSize: navLinkTextSizeSchema.optional(),
9481
9665
  /** Optional letter spacing override */
9482
9666
  letterSpacing: navLinkLetterSpacingSchema.optional(),
9667
+ /** Optional text-only contrast treatment for transparent/overlay navigation */
9668
+ contrastTreatment: navLinkContrastTreatmentSchema.optional(),
9483
9669
  /** Hover/active color token (for color-change effects) */
9484
9670
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
9485
9671
  /** Padding preset */
@@ -9833,8 +10019,19 @@ var headingTypographyStyleSchema = typographyStyleSchema.extend({
9833
10019
  colorToken: themeColorTokenSchema.nullable().optional()
9834
10020
  });
9835
10021
  var proseLinkUnderlineStyleSchema = z21.enum(["solid", "dotted", "dashed"]);
9836
- var proseLinkUnderlineThicknessSchema = z21.enum(["auto", "fromFont", "thin", "medium", "thick"]);
9837
- var proseLinkUnderlineOffsetSchema = z21.enum(["auto", "tight", "normal", "loose"]);
10022
+ var proseLinkUnderlineThicknessSchema = z21.enum([
10023
+ "auto",
10024
+ "fromFont",
10025
+ "thin",
10026
+ "medium",
10027
+ "thick"
10028
+ ]);
10029
+ var proseLinkUnderlineOffsetSchema = z21.enum([
10030
+ "auto",
10031
+ "tight",
10032
+ "normal",
10033
+ "loose"
10034
+ ]);
9838
10035
  var proseLinkStyleSchema = z21.object({
9839
10036
  colorToken: themeColorTokenSchema.optional(),
9840
10037
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -9845,7 +10042,14 @@ var proseLinkStyleSchema = z21.object({
9845
10042
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
9846
10043
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
9847
10044
  });
9848
- var semanticSpacingSchema = z21.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
10045
+ var semanticSpacingSchema = z21.enum([
10046
+ "none",
10047
+ "compact",
10048
+ "cozy",
10049
+ "medium",
10050
+ "comfortable",
10051
+ "spacious"
10052
+ ]);
9849
10053
  var boxRoundedSchema = z21.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
9850
10054
  var boxBackgroundOverlaySchema = z21.object({
9851
10055
  type: z21.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -9891,6 +10095,7 @@ var sectionStylesOverrideSchema = z21.object({
9891
10095
  spacing: semanticSpacingSchema.nullable().optional(),
9892
10096
  minHeight: z21.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
9893
10097
  tileTreatment: z21.enum(tileTreatmentValues).nullable().optional(),
10098
+ eventListTreatment: z21.enum(eventListTreatmentValues).nullable().optional(),
9894
10099
  eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional(),
9895
10100
  headingDecoration: headingDecorationSchema.nullable().optional(),
9896
10101
  // Author-level override consumed by later block/editor rendering phases.
@@ -9989,9 +10194,17 @@ var inputStyle = z21.object({
9989
10194
  focus: z21.enum(["glow", "ring", "underline"]),
9990
10195
  label: z21.enum(["inside", "above"])
9991
10196
  });
9992
- var headerVariant = z21.enum(["classic", "centered", "transparent", "floating", "editorial"]);
10197
+ var headerVariant = z21.enum(["classic", "centered", "transparent", "floating"]);
9993
10198
  var headerPositioning = z21.enum(["static", "sticky", "fixed"]);
9994
- var headerNavStyle = z21.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
10199
+ var headerNavStyle = z21.enum([
10200
+ "minimal",
10201
+ "underline",
10202
+ "underline-grow",
10203
+ "capsule",
10204
+ "scale",
10205
+ "frosted",
10206
+ "solid"
10207
+ ]);
9995
10208
  var navFontWeight = z21.enum(["regular", "medium", "semibold", "bold"]);
9996
10209
  var headerMaxWidth = z21.enum(["container", "full"]);
9997
10210
  var headerContainerSchema = z21.object({
@@ -10039,8 +10252,22 @@ var dropdownStyleSchema = z21.object({
10039
10252
  textSize: z21.enum(["xs", "sm", "base", "lg"]).optional()
10040
10253
  // optional = no override (browser default)
10041
10254
  }).optional();
10042
- var headerCtaGapSchema = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10043
- var headerCtaTreatmentSchema = z21.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
10255
+ var headerCtaGapSchema = z21.enum([
10256
+ "none",
10257
+ "tight",
10258
+ "compact",
10259
+ "default",
10260
+ "relaxed",
10261
+ "spacious"
10262
+ ]);
10263
+ var headerCtaTreatmentSchema = z21.enum([
10264
+ "default",
10265
+ "primary",
10266
+ "secondary",
10267
+ "inverted",
10268
+ "outline",
10269
+ "ghost"
10270
+ ]);
10044
10271
  var navContainerSchema = z21.object({
10045
10272
  type: z21.enum(["none", "pill", "glass"]).default("none"),
10046
10273
  tint: z21.string().nullable().optional(),
@@ -10095,7 +10322,14 @@ var footerMaxWidth = z21.enum(["container", "full"]);
10095
10322
  var footerMode = z21.enum(["default", "blocks", "default+blocks", "none"]);
10096
10323
  var footerNavLayoutMode = z21.enum(["stack", "inline", "inline-wrap"]);
10097
10324
  var footerNavLayoutAlign = z21.enum(["start", "center", "end", "space-between"]);
10098
- var footerSpacing = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10325
+ var footerSpacing = z21.enum([
10326
+ "none",
10327
+ "tight",
10328
+ "compact",
10329
+ "default",
10330
+ "relaxed",
10331
+ "spacious"
10332
+ ]);
10099
10333
  var footerLogoPlacement = z21.enum(["left", "right", "above", "below"]);
10100
10334
  var footerLogoSize = z21.enum(["sm", "md", "lg", "xl"]);
10101
10335
  var footerLogoMaxHeight = z21.enum(["sm", "md", "lg", "xl"]);
@@ -10160,7 +10394,12 @@ var footerSchema = z21.object({
10160
10394
  logo: footerLogoSchema.optional(),
10161
10395
  bottomBar: footerBottomBarSchema.optional()
10162
10396
  });
10163
- var containerPaddingPresetSchema = z21.enum(["tight", "compact", "default", "relaxed"]);
10397
+ var containerPaddingPresetSchema = z21.enum([
10398
+ "tight",
10399
+ "compact",
10400
+ "default",
10401
+ "relaxed"
10402
+ ]);
10164
10403
  var layoutSchema = z21.object({
10165
10404
  containerPadding: z21.object({
10166
10405
  mobile: containerPaddingPresetSchema.optional(),
@@ -10168,8 +10407,24 @@ var layoutSchema = z21.object({
10168
10407
  desktop: containerPaddingPresetSchema.optional()
10169
10408
  }).optional()
10170
10409
  }).optional();
10171
- var heroTypographySizeSchema = z21.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
10172
- var heroTypographyLineHeightSchema = z21.enum(["tight", "snug", "normal", "relaxed"]);
10410
+ var heroTypographySizeSchema = z21.enum([
10411
+ "sm",
10412
+ "base",
10413
+ "lg",
10414
+ "xl",
10415
+ "2xl",
10416
+ "3xl",
10417
+ "4xl",
10418
+ "5xl",
10419
+ "6xl",
10420
+ "editorial"
10421
+ ]);
10422
+ var heroTypographyLineHeightSchema = z21.enum([
10423
+ "tight",
10424
+ "snug",
10425
+ "normal",
10426
+ "relaxed"
10427
+ ]);
10173
10428
  var heroResponsiveTypographySchema = z21.object({
10174
10429
  headlineSize: heroTypographySizeSchema.optional(),
10175
10430
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -10674,6 +10929,34 @@ var paletteVariantsById = new Map(
10674
10929
  paletteVariants.map((v) => [v.id, v])
10675
10930
  );
10676
10931
 
10932
+ // ../theme-core/src/accordions/siteStyleDefaults.ts
10933
+ var softEarthAccordionSystem = {
10934
+ background: {
10935
+ type: "solid",
10936
+ colorToken: "background"
10937
+ },
10938
+ spacing: "comfortable",
10939
+ corners: "square",
10940
+ border: null,
10941
+ shadow: null,
10942
+ icon: {
10943
+ style: "plus-minus",
10944
+ position: "right",
10945
+ size: "md",
10946
+ colorToken: "primary"
10947
+ },
10948
+ trigger: {
10949
+ textColorToken: "text",
10950
+ fontWeight: "medium"
10951
+ },
10952
+ hover: {
10953
+ textColorToken: "primary"
10954
+ },
10955
+ content: {
10956
+ textColorToken: "neutral-700"
10957
+ }
10958
+ };
10959
+
10677
10960
  // ../theme-core/src/site-styles/headerLooks.ts
10678
10961
  function asHeaderLookId(value) {
10679
10962
  return value;
@@ -10723,23 +11006,13 @@ var headerLayoutCatalog = [
10723
11006
  maxRecommendedNavItems: 5,
10724
11007
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
10725
11008
  },
10726
- {
10727
- id: asHeaderLayoutId("editorial"),
10728
- label: "Editorial",
10729
- description: "A composed, magazine-like stacked header treatment.",
10730
- structure: "editorial-stack",
10731
- variant: "editorial",
10732
- defaultPositioning: "static",
10733
- shrinkOnScroll: false,
10734
- maxRecommendedNavItems: 6
10735
- },
10736
11009
  {
10737
11010
  id: asHeaderLayoutId("floating"),
10738
11011
  label: "Floating",
10739
11012
  description: "Detached header chrome that sits over the opening section.",
10740
11013
  structure: "floating-shell",
10741
11014
  variant: "floating",
10742
- defaultPositioning: "fixed",
11015
+ defaultPositioning: "sticky",
10743
11016
  shrinkOnScroll: true,
10744
11017
  maxRecommendedNavItems: 5,
10745
11018
  allowedLogoShapes: ["none", "text-only", "horizontal"]
@@ -10753,17 +11026,23 @@ var headerStyleCatalog = [
10753
11026
  id: asHeaderStyleId("minimal"),
10754
11027
  label: "Minimal",
10755
11028
  description: "Quiet surface with simple color-change navigation.",
10756
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11029
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10757
11030
  navInteraction: "color-change",
10758
- surface: "neutral"
11031
+ surface: "neutral",
11032
+ defaultDepth: "none",
11033
+ navTypography: "plain",
11034
+ moods: ["calm", "professional", "editorial"]
10759
11035
  },
10760
11036
  {
10761
11037
  id: asHeaderStyleId("fine-line"),
10762
11038
  label: "Fine Line",
10763
11039
  description: "Light surface with a crisp lower rule and underline hover.",
10764
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11040
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10765
11041
  navInteraction: "underline-grow",
10766
- surface: "bordered"
11042
+ surface: "bordered",
11043
+ defaultDepth: "line",
11044
+ navTypography: "plain",
11045
+ moods: ["calm", "professional", "editorial"]
10767
11046
  },
10768
11047
  {
10769
11048
  id: asHeaderStyleId("soft-bar"),
@@ -10771,7 +11050,10 @@ var headerStyleCatalog = [
10771
11050
  description: "Soft tinted surface with gentle pill hover states.",
10772
11051
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10773
11052
  navInteraction: "pill-background",
10774
- surface: "soft"
11053
+ surface: "soft",
11054
+ defaultDepth: "line",
11055
+ navTypography: "plain",
11056
+ moods: ["calm", "professional"]
10775
11057
  },
10776
11058
  {
10777
11059
  id: asHeaderStyleId("pill-nav"),
@@ -10779,23 +11061,32 @@ var headerStyleCatalog = [
10779
11061
  description: "A calm pill navigation rail over a neutral header.",
10780
11062
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10781
11063
  navInteraction: "pill-background",
10782
- surface: "soft"
11064
+ surface: "soft",
11065
+ defaultDepth: "none",
11066
+ navTypography: "plain",
11067
+ moods: ["calm"]
10783
11068
  },
10784
11069
  {
10785
11070
  id: asHeaderStyleId("brand-bar"),
10786
11071
  label: "Brand Bar",
10787
11072
  description: "Solid brand surface with high-contrast navigation.",
10788
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11073
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10789
11074
  navInteraction: "color-change",
10790
- surface: "brand-solid"
11075
+ surface: "brand-solid",
11076
+ defaultDepth: "none",
11077
+ navTypography: "brand-caps",
11078
+ moods: ["professional", "expressive", "utility"]
10791
11079
  },
10792
11080
  {
10793
11081
  id: asHeaderStyleId("brand-underline"),
10794
11082
  label: "Brand Underline",
10795
11083
  description: "Brand surface with underline-grow navigation.",
10796
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
11084
+ supportedLayoutIds: supportedLayouts(["classic"]),
10797
11085
  navInteraction: "underline-grow",
10798
- surface: "brand-solid"
11086
+ surface: "brand-solid",
11087
+ defaultDepth: "none",
11088
+ navTypography: "brand-caps",
11089
+ moods: ["expressive"]
10799
11090
  },
10800
11091
  {
10801
11092
  id: asHeaderStyleId("brand-pill"),
@@ -10803,41 +11094,54 @@ var headerStyleCatalog = [
10803
11094
  description: "Solid brand surface with rounded active and hover states.",
10804
11095
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
10805
11096
  navInteraction: "pill-background",
10806
- surface: "brand-solid"
11097
+ surface: "brand-solid",
11098
+ defaultDepth: "none",
11099
+ navTypography: "brand-caps",
11100
+ moods: ["expressive"]
10807
11101
  },
10808
11102
  {
10809
- id: asHeaderStyleId("editorial-line"),
10810
- label: "Editorial Line",
11103
+ id: asHeaderStyleId("serif-line"),
11104
+ label: "Serif Line",
10811
11105
  description: "Typographic logo treatment with understated underline navigation.",
10812
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11106
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10813
11107
  navInteraction: "underline-grow",
10814
- surface: "bordered"
11108
+ surface: "bordered",
11109
+ defaultDepth: "line",
11110
+ navTypography: "heading",
11111
+ moods: ["editorial", "calm"]
10815
11112
  },
10816
11113
  {
10817
11114
  id: asHeaderStyleId("flat-tabs"),
10818
11115
  label: "Flat Tabs",
10819
11116
  description: "Flat block hover and active states with a Swiss utility feel.",
10820
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
11117
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10821
11118
  navInteraction: "flat-block",
10822
- surface: "bordered"
11119
+ surface: "bordered",
11120
+ defaultDepth: "shadow",
11121
+ navTypography: "quiet-caps",
11122
+ moods: ["professional", "utility", "expressive"]
10823
11123
  },
10824
11124
  {
10825
11125
  id: asHeaderStyleId("glass"),
10826
11126
  label: "Glass",
10827
- description: "Floating translucent chrome with frosted navigation backing.",
11127
+ description: "Translucent chrome with frosted navigation backing.",
10828
11128
  supportedLayoutIds: supportedLayouts(["floating"]),
10829
11129
  navInteraction: "glass-backed",
10830
11130
  surface: "floating",
10831
- requiresFloatingLayout: true
11131
+ defaultDepth: "shadow",
11132
+ navTypography: "plain",
11133
+ moods: ["expressive", "calm"]
10832
11134
  },
10833
11135
  {
10834
11136
  id: asHeaderStyleId("minimal-surface"),
10835
- label: "Minimal Surface",
10836
- description: "Floating chrome with a restrained translucent surface.",
11137
+ label: "Clear Split",
11138
+ description: "Floating logo with transparent navigation and no shared shell.",
10837
11139
  supportedLayoutIds: supportedLayouts(["floating"]),
10838
11140
  navInteraction: "color-change",
10839
11141
  surface: "floating",
10840
- requiresFloatingLayout: true
11142
+ defaultDepth: "none",
11143
+ navTypography: "plain",
11144
+ moods: ["editorial", "calm"]
10841
11145
  },
10842
11146
  {
10843
11147
  id: asHeaderStyleId("soft-shell"),
@@ -10846,7 +11150,31 @@ var headerStyleCatalog = [
10846
11150
  supportedLayoutIds: supportedLayouts(["floating"]),
10847
11151
  navInteraction: "pill-background",
10848
11152
  surface: "floating",
10849
- requiresFloatingLayout: true
11153
+ defaultDepth: "shadow",
11154
+ navTypography: "plain",
11155
+ moods: ["calm", "professional"]
11156
+ },
11157
+ {
11158
+ id: asHeaderStyleId("split-glass"),
11159
+ label: "Split Glass",
11160
+ description: "Logo floats independently while the navigation sits in a glass rail.",
11161
+ supportedLayoutIds: supportedLayouts(["floating"]),
11162
+ navInteraction: "glass-backed",
11163
+ surface: "floating",
11164
+ defaultDepth: "shadow",
11165
+ navTypography: "quiet-caps",
11166
+ moods: ["expressive"]
11167
+ },
11168
+ {
11169
+ id: asHeaderStyleId("split-pill"),
11170
+ label: "Split Pill",
11171
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
11172
+ supportedLayoutIds: supportedLayouts(["floating"]),
11173
+ navInteraction: "pill-background",
11174
+ surface: "floating",
11175
+ defaultDepth: "shadow",
11176
+ navTypography: "heading",
11177
+ moods: ["calm", "editorial"]
10850
11178
  }
10851
11179
  ];
10852
11180
  var headerLayoutsById = new Map(
@@ -10866,7 +11194,7 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10866
11194
  "brand-bar",
10867
11195
  "brand-underline",
10868
11196
  "brand-pill",
10869
- "editorial-line",
11197
+ "serif-line",
10870
11198
  "flat-tabs"
10871
11199
  ])
10872
11200
  ],
@@ -10879,19 +11207,7 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10879
11207
  "pill-nav",
10880
11208
  "brand-bar",
10881
11209
  "brand-pill",
10882
- "editorial-line",
10883
- "flat-tabs"
10884
- ])
10885
- ],
10886
- [
10887
- asHeaderLayoutId("editorial"),
10888
- headerStyleRepairChain([
10889
- "minimal",
10890
- "fine-line",
10891
- "soft-bar",
10892
- "brand-bar",
10893
- "brand-underline",
10894
- "editorial-line",
11210
+ "serif-line",
10895
11211
  "flat-tabs"
10896
11212
  ])
10897
11213
  ],
@@ -10900,6 +11216,8 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10900
11216
  headerStyleRepairChain([
10901
11217
  "glass",
10902
11218
  "minimal-surface",
11219
+ "split-glass",
11220
+ "split-pill",
10903
11221
  "soft-shell",
10904
11222
  "brand-pill"
10905
11223
  ])
@@ -10908,20 +11226,69 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10908
11226
  function headerStyleRepairChain(values) {
10909
11227
  return values.map(asHeaderStyleId);
10910
11228
  }
10911
- var headerStyleRepairOrder = /* @__PURE__ */ new Map([
10912
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
10913
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
10914
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
10915
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
10916
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
10917
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
10918
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
10919
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
10920
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
10921
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
10922
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
10923
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
10924
- ]);
11229
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
11230
+ [
11231
+ [
11232
+ asHeaderStyleId("brand-bar"),
11233
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
11234
+ ],
11235
+ [
11236
+ asHeaderStyleId("brand-underline"),
11237
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
11238
+ ],
11239
+ [
11240
+ asHeaderStyleId("brand-pill"),
11241
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
11242
+ ],
11243
+ [
11244
+ asHeaderStyleId("pill-nav"),
11245
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
11246
+ ],
11247
+ [
11248
+ asHeaderStyleId("flat-tabs"),
11249
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
11250
+ ],
11251
+ [
11252
+ asHeaderStyleId("serif-line"),
11253
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
11254
+ ],
11255
+ [
11256
+ asHeaderStyleId("glass"),
11257
+ headerStyleRepairChain([
11258
+ "glass",
11259
+ "soft-shell",
11260
+ "fine-line",
11261
+ "minimal-surface",
11262
+ "minimal"
11263
+ ])
11264
+ ],
11265
+ [
11266
+ asHeaderStyleId("soft-shell"),
11267
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
11268
+ ],
11269
+ [
11270
+ asHeaderStyleId("minimal-surface"),
11271
+ headerStyleRepairChain(["minimal-surface", "minimal"])
11272
+ ],
11273
+ [
11274
+ asHeaderStyleId("split-glass"),
11275
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
11276
+ ],
11277
+ [
11278
+ asHeaderStyleId("split-pill"),
11279
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
11280
+ ],
11281
+ [
11282
+ asHeaderStyleId("fine-line"),
11283
+ headerStyleRepairChain(["fine-line", "minimal"])
11284
+ ],
11285
+ [
11286
+ asHeaderStyleId("soft-bar"),
11287
+ headerStyleRepairChain(["soft-bar", "minimal"])
11288
+ ],
11289
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
11290
+ ]
11291
+ );
10925
11292
  var legacyHeaderLookAliases = [
10926
11293
  {
10927
11294
  lookId: asHeaderLookId("clean-base"),
@@ -10938,10 +11305,10 @@ var legacyHeaderLookAliases = [
10938
11305
  }
10939
11306
  },
10940
11307
  {
10941
- lookId: asHeaderLookId("editorial-line"),
11308
+ lookId: asHeaderLookId("serif-line"),
10942
11309
  selection: {
10943
- layoutId: asHeaderLayoutId("editorial"),
10944
- styleId: asHeaderStyleId("editorial-line")
11310
+ layoutId: asHeaderLayoutId("centered"),
11311
+ styleId: asHeaderStyleId("serif-line")
10945
11312
  }
10946
11313
  },
10947
11314
  {
@@ -10980,9 +11347,7 @@ var legacyHeaderLookAliases = [
10980
11347
  }
10981
11348
  }
10982
11349
  ];
10983
- var legacyHeaderLookAliasesById = new Map(
10984
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
10985
- );
11350
+ var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
10986
11351
  function getHeaderStyle(id) {
10987
11352
  return headerStylesById.get(id) ?? null;
10988
11353
  }
@@ -11000,10 +11365,29 @@ function resolveLegacyHeaderLookAlias(lookId) {
11000
11365
  return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
11001
11366
  }
11002
11367
  function getCompatibleHeaderStyleIds(layoutId) {
11003
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
11004
- const style = getHeaderStyleOrThrow(styleId);
11005
- return isHeaderStyleCompatibleWithLayout(style, layoutId);
11006
- });
11368
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
11369
+ (styleId) => {
11370
+ const style = getHeaderStyleOrThrow(styleId);
11371
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
11372
+ }
11373
+ );
11374
+ }
11375
+ function themedHeaderShadow(theme) {
11376
+ switch (theme.shadow.elevation) {
11377
+ case "none":
11378
+ return void 0;
11379
+ case "low":
11380
+ return { elevation: "sm" };
11381
+ case "medium":
11382
+ return { elevation: "md" };
11383
+ case "high":
11384
+ return { elevation: "lg" };
11385
+ default:
11386
+ return assertNever(
11387
+ theme.shadow.elevation,
11388
+ "Unhandled theme shadow elevation"
11389
+ );
11390
+ }
11007
11391
  }
11008
11392
  function solidBrandHeader(theme) {
11009
11393
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
@@ -11034,8 +11418,14 @@ function solidBrandHeader(theme) {
11034
11418
  borderRadius: "none",
11035
11419
  effects: {
11036
11420
  hover: [
11037
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
11038
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
11421
+ {
11422
+ effectId: "text-color-change",
11423
+ options: { hoverColorToken: "secondary" }
11424
+ },
11425
+ {
11426
+ effectId: "nav-underline",
11427
+ options: { style: "grow", colorToken: "secondary" }
11428
+ }
11039
11429
  ]
11040
11430
  }
11041
11431
  },
@@ -11091,10 +11481,10 @@ function cleanBaseHeader(theme) {
11091
11481
  ctaGap: "default"
11092
11482
  };
11093
11483
  }
11094
- function editorialLineHeader(theme) {
11484
+ function serifLineHeader(theme) {
11095
11485
  return {
11096
11486
  ...baseHeader(theme),
11097
- variant: "editorial",
11487
+ variant: "centered",
11098
11488
  positioning: "sticky",
11099
11489
  shrinkOnScroll: false,
11100
11490
  background: {
@@ -11148,9 +11538,7 @@ function practicalUtilityHeader(theme) {
11148
11538
  navColor: "text",
11149
11539
  navStyle: "solid",
11150
11540
  navWeight: "semibold",
11151
- shadow: {
11152
- elevation: "sm"
11153
- },
11541
+ shadow: themedHeaderShadow(theme),
11154
11542
  border: {
11155
11543
  style: "solid",
11156
11544
  width: "thin",
@@ -11219,6 +11607,7 @@ function floatingGlassHeader(theme) {
11219
11607
  return {
11220
11608
  ...transparentOverlayHeader(theme),
11221
11609
  variant: "floating",
11610
+ positioning: "sticky",
11222
11611
  navStyle: "frosted",
11223
11612
  navContainer: {
11224
11613
  type: "glass",
@@ -11263,27 +11652,27 @@ var headerLookCatalog = [
11263
11652
  compile: solidBrandHeader
11264
11653
  },
11265
11654
  {
11266
- id: asHeaderLookId("editorial-line"),
11267
- label: "Editorial line",
11268
- visualTreatment: "light-editorial",
11655
+ id: asHeaderLookId("serif-line"),
11656
+ label: "Serif line",
11657
+ visualTreatment: "light-serif",
11269
11658
  layoutBehavior: "sticky",
11270
11659
  configuration: {
11271
- structure: "editorial-stack",
11272
- treatment: "light-editorial",
11660
+ structure: "centered-stack",
11661
+ treatment: "light-serif",
11273
11662
  behavior: "sticky"
11274
11663
  },
11275
11664
  openingRequirement: "none",
11276
11665
  maxRecommendedNavItems: 6,
11277
- compile: editorialLineHeader
11666
+ compile: serifLineHeader
11278
11667
  },
11279
11668
  {
11280
11669
  id: asHeaderLookId("centered-calm"),
11281
11670
  label: "Centered calm",
11282
- visualTreatment: "light-editorial",
11671
+ visualTreatment: "light-serif",
11283
11672
  layoutBehavior: "normal-flow",
11284
11673
  configuration: {
11285
11674
  structure: "centered-stack",
11286
- treatment: "light-editorial",
11675
+ treatment: "light-serif",
11287
11676
  behavior: "normal-flow"
11288
11677
  },
11289
11678
  openingRequirement: "none",
@@ -11734,7 +12123,7 @@ var typographyPresets = [
11734
12123
  heroTypography: {
11735
12124
  headlineSize: "6xl",
11736
12125
  headlineLineHeight: "tight",
11737
- subheadlineSize: "editorial",
12126
+ subheadlineSize: "2xl",
11738
12127
  subheadlineLineHeight: "normal",
11739
12128
  microHeadlineSize: "6xl",
11740
12129
  microHeadlineLineHeight: "tight",
@@ -11752,6 +12141,8 @@ var typographyPresetsById = new Map(
11752
12141
  );
11753
12142
 
11754
12143
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
12144
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
12145
+ var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
11755
12146
  var curatedSiteStyleIdValues = [
11756
12147
  "site-style:calm-studio",
11757
12148
  "site-style:clear-professional",
@@ -11763,7 +12154,7 @@ var curatedSiteStyleIdValues = [
11763
12154
  "site-style:personal-retreat-journal",
11764
12155
  "site-style:tactile-workshop",
11765
12156
  "site-style:modern-wellness",
11766
- "site-style:soft-earth",
12157
+ SOFT_EARTH_SITE_STYLE_ID_VALUE,
11767
12158
  "site-style:bold-launch",
11768
12159
  "site-style:south-west-twerk-school"
11769
12160
  ];
@@ -11829,22 +12220,31 @@ var expressiveUnderlineInputs = {
11829
12220
  }
11830
12221
  };
11831
12222
  function uniqueContentFrameKinds() {
11832
- const kinds = [...new Set(
11833
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
11834
- )];
12223
+ const kinds = [
12224
+ ...new Set(
12225
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
12226
+ )
12227
+ ];
11835
12228
  const firstKind = kinds[0];
11836
12229
  if (!firstKind) {
11837
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
12230
+ throw new Error(
12231
+ "Expected generated design option catalog to expose at least one content frame kind."
12232
+ );
11838
12233
  }
11839
12234
  return [firstKind, ...kinds.slice(1)];
11840
12235
  }
11841
12236
  var generatedContentFrameKinds = uniqueContentFrameKinds();
11842
12237
  function defineCuratedSiteStyle(input) {
11843
12238
  const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
11844
- const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
12239
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(
12240
+ legacyHeaderLookIds,
12241
+ input.tokenRecipes
12242
+ );
11845
12243
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
11846
12244
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
11847
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
12245
+ if (!typographyPresetChoices.some(
12246
+ (choice) => choice.id === defaultTypographyPresetId
12247
+ )) {
11848
12248
  throw new Error(
11849
12249
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
11850
12250
  );
@@ -11855,9 +12255,13 @@ function defineCuratedSiteStyle(input) {
11855
12255
  description: input.description,
11856
12256
  generationBrief: input.generationBrief,
11857
12257
  selectionKeywordRules: input.selectionKeywordRules ?? [],
11858
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
12258
+ siteCreatorSelection: input.siteCreatorSelection ?? {
12259
+ kind: "explicit_only"
12260
+ },
11859
12261
  template: {
11860
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
12262
+ id: asDesignSystemTemplateId(
12263
+ `template:${input.id.replace("site-style:", "")}`
12264
+ ),
11861
12265
  name: input.name,
11862
12266
  version: 1,
11863
12267
  tokenRecipes: input.tokenRecipes,
@@ -11868,6 +12272,7 @@ function defineCuratedSiteStyle(input) {
11868
12272
  supportedTransitions: generatedDesignOptionCatalog.transitions
11869
12273
  },
11870
12274
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
12275
+ ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
11871
12276
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
11872
12277
  defaultHeaderSelection: input.defaultHeaderSelection ? {
11873
12278
  layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
@@ -11875,13 +12280,17 @@ function defineCuratedSiteStyle(input) {
11875
12280
  } : inferredHeaderCuration.defaultHeaderSelection,
11876
12281
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
11877
12282
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
11878
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
11879
- layoutId: asHeaderLayoutId(selection.layoutId),
11880
- styleId: asHeaderStyleId(selection.styleId)
11881
- })),
12283
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
12284
+ (selection) => ({
12285
+ layoutId: asHeaderLayoutId(selection.layoutId),
12286
+ styleId: asHeaderStyleId(selection.styleId)
12287
+ })
12288
+ ),
11882
12289
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
11883
12290
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
11884
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
12291
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
12292
+ asFooterLookId
12293
+ ),
11885
12294
  buttonPersonalityChoices: input.buttonPersonalityChoices,
11886
12295
  paletteVariantChoices: input.paletteVariantChoices,
11887
12296
  typographyPresetChoices,
@@ -11900,7 +12309,7 @@ function headerLayoutChoice(id, note) {
11900
12309
  function headerStyleChoice(id, note) {
11901
12310
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
11902
12311
  }
11903
- function headerLayoutRecordKey(id) {
12312
+ function unbrandHeaderLayoutId(id) {
11904
12313
  return id;
11905
12314
  }
11906
12315
  function uniqueHeaderLayoutChoices(choices) {
@@ -11922,8 +12331,72 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
11922
12331
  };
11923
12332
  return [first, ...choices.slice(1)];
11924
12333
  }
11925
- function inferHeaderCurationFromLegacyLooks(lookIds) {
11926
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
12334
+ function uniqueCompatibleHeaderStyleChoices(choices, fallbackLayoutId) {
12335
+ const compatible = new Set(getCompatibleHeaderStyleIds(fallbackLayoutId));
12336
+ const seen = /* @__PURE__ */ new Set();
12337
+ const unique = choices.filter((choice) => {
12338
+ if (!compatible.has(choice.id)) return false;
12339
+ if (seen.has(choice.id)) return false;
12340
+ seen.add(choice.id);
12341
+ return true;
12342
+ });
12343
+ return nonEmptyHeaderStyleChoices(unique, fallbackLayoutId);
12344
+ }
12345
+ function inferredHeaderStyleValuesForRecipes(layoutId, recipes) {
12346
+ switch (layoutId) {
12347
+ case "classic":
12348
+ if (isExpressiveRecipe(recipes)) {
12349
+ return [
12350
+ "brand-bar",
12351
+ "brand-underline",
12352
+ "flat-tabs",
12353
+ "brand-pill",
12354
+ "fine-line"
12355
+ ];
12356
+ }
12357
+ if (recipes.spacing === "compact") {
12358
+ return ["flat-tabs", "fine-line", "minimal", "brand-bar"];
12359
+ }
12360
+ if (isSerifTypographyRecipe(recipes)) {
12361
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
12362
+ }
12363
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
12364
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
12365
+ }
12366
+ return ["fine-line", "minimal", "soft-bar", "brand-bar"];
12367
+ case "centered":
12368
+ if (isSerifTypographyRecipe(recipes)) {
12369
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
12370
+ }
12371
+ if (isExpressiveRecipe(recipes)) {
12372
+ return ["brand-pill", "flat-tabs", "brand-bar", "fine-line"];
12373
+ }
12374
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
12375
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
12376
+ }
12377
+ return ["minimal", "fine-line", "soft-bar"];
12378
+ case "floating":
12379
+ if (isExpressiveRecipe(recipes)) {
12380
+ return ["glass", "split-glass", "brand-pill", "soft-shell"];
12381
+ }
12382
+ if (isSerifTypographyRecipe(recipes)) {
12383
+ return ["split-pill", "minimal-surface", "soft-shell"];
12384
+ }
12385
+ return ["soft-shell", "minimal-surface", "glass"];
12386
+ default:
12387
+ return [];
12388
+ }
12389
+ }
12390
+ function isExpressiveRecipe(recipes) {
12391
+ return recipes.contrast === "maximum" || recipes.shadow === "layered" || recipes.motion === "expressive";
12392
+ }
12393
+ function isSerifTypographyRecipe(recipes) {
12394
+ return recipes.typography === "serif-editorial" || recipes.typography === "classic-serif";
12395
+ }
12396
+ function inferHeaderCurationFromLegacyLooks(lookIds, recipes) {
12397
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
12398
+ (selection) => Boolean(selection)
12399
+ );
11927
12400
  const defaultHeaderSelection = selections[0] ?? {
11928
12401
  layoutId: asHeaderLayoutId("classic"),
11929
12402
  styleId: asHeaderStyleId("minimal")
@@ -11933,9 +12406,13 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
11933
12406
  );
11934
12407
  const stylesByLayout = {};
11935
12408
  for (const layoutChoice of layoutChoices) {
11936
- const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
11937
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
11938
- styleChoices,
12409
+ const legacyStyleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12410
+ const inferredStyleChoices = inferredHeaderStyleValuesForRecipes(
12411
+ layoutChoice.id,
12412
+ recipes
12413
+ ).map((styleId) => headerStyleChoice(styleId));
12414
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = uniqueCompatibleHeaderStyleChoices(
12415
+ [...legacyStyleChoices, ...inferredStyleChoices],
11939
12416
  layoutChoice.id
11940
12417
  );
11941
12418
  }
@@ -11992,7 +12469,11 @@ var curatedSiteStyles = [
11992
12469
  motion: "subtle"
11993
12470
  },
11994
12471
  compositionBudget: quietBudget,
11995
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
12472
+ recommendedHeaderLookIds: [
12473
+ "centered-calm",
12474
+ "minimal-transparent",
12475
+ "clean-base"
12476
+ ],
11996
12477
  buttonPersonalityChoices: [
11997
12478
  buttonChoice("soft-pill"),
11998
12479
  buttonChoice("pebble"),
@@ -12021,7 +12502,11 @@ var curatedSiteStyles = [
12021
12502
  motion: "subtle"
12022
12503
  },
12023
12504
  compositionBudget: balancedBudget,
12024
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
12505
+ recommendedHeaderLookIds: [
12506
+ "practical-utility",
12507
+ "brand-solid",
12508
+ "clean-base"
12509
+ ],
12025
12510
  buttonPersonalityChoices: [
12026
12511
  buttonChoice("confident-chip"),
12027
12512
  buttonChoice("soft-pill"),
@@ -12048,7 +12533,11 @@ var curatedSiteStyles = [
12048
12533
  motion: "subtle"
12049
12534
  },
12050
12535
  compositionBudget: balancedBudget,
12051
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
12536
+ recommendedHeaderLookIds: [
12537
+ "serif-line",
12538
+ "minimal-transparent",
12539
+ "centered-calm"
12540
+ ],
12052
12541
  buttonPersonalityChoices: [
12053
12542
  buttonChoice("editorial-link"),
12054
12543
  buttonChoice("soft-pill"),
@@ -12076,7 +12565,11 @@ var curatedSiteStyles = [
12076
12565
  motion: "expressive"
12077
12566
  },
12078
12567
  compositionBudget: balancedBudget,
12079
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12568
+ recommendedHeaderLookIds: [
12569
+ "brand-solid",
12570
+ "practical-utility",
12571
+ "clean-base"
12572
+ ],
12080
12573
  buttonPersonalityChoices: [
12081
12574
  buttonChoice("pebble"),
12082
12575
  buttonChoice("brushed-wash"),
@@ -12093,7 +12586,10 @@ var curatedSiteStyles = [
12093
12586
  name: "Quiet Luxury",
12094
12587
  description: "Minimal, confident, and refined for premium experiences and private services.",
12095
12588
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
12096
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
12589
+ siteCreatorSelection: {
12590
+ kind: "site_creator_keyword_heuristic",
12591
+ priority: 20
12592
+ },
12097
12593
  selectionKeywordRules: [
12098
12594
  { kind: "word", value: "luxury" },
12099
12595
  { kind: "word", value: "premium" },
@@ -12111,7 +12607,11 @@ var curatedSiteStyles = [
12111
12607
  motion: "none"
12112
12608
  },
12113
12609
  compositionBudget: quietBudget,
12114
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
12610
+ recommendedHeaderLookIds: [
12611
+ "minimal-transparent",
12612
+ "serif-line",
12613
+ "clean-base"
12614
+ ],
12115
12615
  buttonPersonalityChoices: [
12116
12616
  buttonChoice("editorial-link"),
12117
12617
  buttonChoice("confident-chip"),
@@ -12147,7 +12647,11 @@ var curatedSiteStyles = [
12147
12647
  motion: "none"
12148
12648
  },
12149
12649
  compositionBudget: quietBudget,
12150
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
12650
+ recommendedHeaderLookIds: [
12651
+ "practical-utility",
12652
+ "brand-solid",
12653
+ "clean-base"
12654
+ ],
12151
12655
  buttonPersonalityChoices: [
12152
12656
  buttonChoice("confident-chip"),
12153
12657
  buttonChoice("pebble"),
@@ -12174,7 +12678,11 @@ var curatedSiteStyles = [
12174
12678
  motion: "subtle"
12175
12679
  },
12176
12680
  compositionBudget: balancedBudget,
12177
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
12681
+ recommendedHeaderLookIds: [
12682
+ "centered-calm",
12683
+ "minimal-transparent",
12684
+ "clean-base"
12685
+ ],
12178
12686
  buttonPersonalityChoices: [
12179
12687
  buttonChoice("soft-pill"),
12180
12688
  buttonChoice("pebble"),
@@ -12191,7 +12699,10 @@ var curatedSiteStyles = [
12191
12699
  name: "Quiet Practice",
12192
12700
  description: "Grounded, calm, and practical for small appointment-first practices.",
12193
12701
  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.",
12194
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
12702
+ siteCreatorSelection: {
12703
+ kind: "site_creator_keyword_heuristic",
12704
+ priority: 30
12705
+ },
12195
12706
  selectionKeywordRules: [
12196
12707
  { kind: "substring", value: "massage" },
12197
12708
  { kind: "word", value: "bodywork" },
@@ -12212,7 +12723,11 @@ var curatedSiteStyles = [
12212
12723
  motion: "subtle"
12213
12724
  },
12214
12725
  compositionBudget: quietBudget,
12215
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
12726
+ recommendedHeaderLookIds: [
12727
+ "practical-utility",
12728
+ "clean-base",
12729
+ "centered-calm"
12730
+ ],
12216
12731
  buttonPersonalityChoices: [
12217
12732
  buttonChoice("pebble"),
12218
12733
  buttonChoice("soft-pill"),
@@ -12229,7 +12744,10 @@ var curatedSiteStyles = [
12229
12744
  name: "Personal Retreat Journal",
12230
12745
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
12231
12746
  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.",
12232
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
12747
+ siteCreatorSelection: {
12748
+ kind: "site_creator_keyword_heuristic",
12749
+ priority: 40
12750
+ },
12233
12751
  selectionKeywordRules: [
12234
12752
  { kind: "substring", value: "retreat" },
12235
12753
  { kind: "phrase", value: "solo practitioner" },
@@ -12249,7 +12767,11 @@ var curatedSiteStyles = [
12249
12767
  motion: "subtle"
12250
12768
  },
12251
12769
  compositionBudget: balancedBudget,
12252
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
12770
+ recommendedHeaderLookIds: [
12771
+ "serif-line",
12772
+ "centered-calm",
12773
+ "minimal-transparent"
12774
+ ],
12253
12775
  buttonPersonalityChoices: [
12254
12776
  buttonChoice("editorial-link"),
12255
12777
  buttonChoice("soft-pill"),
@@ -12266,7 +12788,10 @@ var curatedSiteStyles = [
12266
12788
  name: "Tactile Workshop",
12267
12789
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
12268
12790
  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.",
12269
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
12791
+ siteCreatorSelection: {
12792
+ kind: "site_creator_keyword_heuristic",
12793
+ priority: 50
12794
+ },
12270
12795
  selectionKeywordRules: [
12271
12796
  { kind: "substring", value: "ceramic" },
12272
12797
  { kind: "word", value: "pottery" },
@@ -12286,8 +12811,15 @@ var curatedSiteStyles = [
12286
12811
  motion: "subtle"
12287
12812
  },
12288
12813
  compositionBudget: balancedBudget,
12289
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12290
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12814
+ recommendedHeaderLookIds: [
12815
+ "brand-solid",
12816
+ "practical-utility",
12817
+ "clean-base"
12818
+ ],
12819
+ recommendedFooterLookIds: [
12820
+ "site-footer-brand-two-band",
12821
+ "footer-muted-grounding"
12822
+ ],
12291
12823
  buttonPersonalityChoices: [
12292
12824
  buttonChoice("pebble"),
12293
12825
  buttonChoice("confident-chip"),
@@ -12302,11 +12834,14 @@ var curatedSiteStyles = [
12302
12834
  ]
12303
12835
  }),
12304
12836
  defineCuratedSiteStyle({
12305
- id: "site-style:soft-earth",
12837
+ id: SOFT_EARTH_SITE_STYLE_ID,
12306
12838
  name: "Soft Earth",
12307
12839
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
12308
- 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.",
12309
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
12840
+ 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.",
12841
+ siteCreatorSelection: {
12842
+ kind: "site_creator_keyword_heuristic",
12843
+ priority: 45
12844
+ },
12310
12845
  selectionKeywordRules: [
12311
12846
  { kind: "word", value: "meditation" },
12312
12847
  { kind: "word", value: "wellbeing" },
@@ -12372,18 +12907,29 @@ var curatedSiteStyles = [
12372
12907
  paragraphSize: "default",
12373
12908
  headingSize: "editorial"
12374
12909
  }
12375
- }
12910
+ },
12911
+ accordions: softEarthAccordionSystem
12912
+ },
12913
+ defaultBlockVariants: {
12914
+ "block.faq": "question-columns"
12376
12915
  },
12377
12916
  recommendedAppearancePresetIds: [
12378
12917
  "hero-brand-scrim",
12379
- "intro-soft-earth-statement",
12380
- "feature-cards-soft-earth-offerings",
12381
- "testimonials-soft-earth-proof-band",
12382
- "faq-soft-earth-two-column",
12918
+ "intro-organic-statement",
12919
+ "feature-cards-raised-rule",
12920
+ "events-lined-panel",
12921
+ "testimonials-brand-background-quotes",
12383
12922
  "contact-form-panel"
12384
12923
  ],
12385
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
12386
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
12924
+ recommendedHeaderLookIds: [
12925
+ "centered-calm",
12926
+ "minimal-transparent",
12927
+ "serif-line"
12928
+ ],
12929
+ recommendedFooterLookIds: [
12930
+ "footer-muted-grounding",
12931
+ "site-footer-brand-two-band"
12932
+ ],
12387
12933
  buttonPersonalityChoices: [
12388
12934
  buttonChoice("earth-pill"),
12389
12935
  buttonChoice("soft-pill"),
@@ -12402,7 +12948,10 @@ var curatedSiteStyles = [
12402
12948
  name: "Bold Launch",
12403
12949
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
12404
12950
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
12405
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
12951
+ siteCreatorSelection: {
12952
+ kind: "site_creator_keyword_heuristic",
12953
+ priority: 10
12954
+ },
12406
12955
  selectionKeywordRules: [
12407
12956
  { kind: "substring", value: "launch" },
12408
12957
  { kind: "substring", value: "campaign" },
@@ -12421,7 +12970,11 @@ var curatedSiteStyles = [
12421
12970
  motion: "expressive"
12422
12971
  },
12423
12972
  compositionBudget: expressiveBudget,
12424
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
12973
+ recommendedHeaderLookIds: [
12974
+ "transparent-overlay",
12975
+ "floating-glass",
12976
+ "brand-solid"
12977
+ ],
12425
12978
  buttonPersonalityChoices: [
12426
12979
  buttonChoice("ink-stamp"),
12427
12980
  buttonChoice("confident-chip"),
@@ -12469,11 +13022,18 @@ var curatedSiteStyles = [
12469
13022
  "hero-brand-scrim-fixed-frame",
12470
13023
  "body-text-editorial-intro",
12471
13024
  "schedule-details-brand-depth",
12472
- "testimonials-accent-quote-proof",
13025
+ "testimonials-accent-quote-cards",
12473
13026
  "contact-form-brand-depth-card"
12474
13027
  ],
12475
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
12476
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
13028
+ recommendedHeaderLookIds: [
13029
+ "brand-solid",
13030
+ "transparent-overlay",
13031
+ "practical-utility"
13032
+ ],
13033
+ recommendedFooterLookIds: [
13034
+ "site-footer-brand-two-band",
13035
+ "footer-muted-grounding"
13036
+ ],
12477
13037
  buttonPersonalityChoices: [
12478
13038
  buttonChoice("showtime-pill"),
12479
13039
  buttonChoice("confident-chip"),
@@ -12557,6 +13117,7 @@ var themeV2RuntimeStyleFieldNames = [
12557
13117
  ];
12558
13118
  var themeV2BlockSpecificRawStyleFieldNames = [
12559
13119
  "_contentCardStyles",
13120
+ "_heroLayoutStyles",
12560
13121
  "_textCardStyles"
12561
13122
  ];
12562
13123
  var themeV2NormalEditorRawStyleFieldNames = [
@@ -12566,6 +13127,10 @@ var themeV2NormalEditorRawStyleFieldNames = [
12566
13127
  var themeV2NormalEditorRawStyleFieldNameSet = new Set(
12567
13128
  themeV2NormalEditorRawStyleFieldNames
12568
13129
  );
13130
+ var themeV2CompilerOwnedFieldNames = [
13131
+ ...themeV2RuntimeStyleFieldNames,
13132
+ ...themeV2BlockSpecificRawStyleFieldNames
13133
+ ];
12569
13134
 
12570
13135
  // ../theme-core/src/site-styles/designState.ts
12571
13136
  var themeV2DesignStateSchemaVersion = 1;
@@ -12580,6 +13145,16 @@ var heroLegibilityStrategySchema = z23.enum([
12580
13145
  "scrim-gradient",
12581
13146
  "solid-panel"
12582
13147
  ]);
13148
+ var heroCompositionIntentSchema = z23.enum([
13149
+ "center",
13150
+ "bottom-left"
13151
+ ]);
13152
+ var heroTypographyScaleIntentSchema = z23.enum([
13153
+ "quiet",
13154
+ "editorial",
13155
+ "display",
13156
+ "poster"
13157
+ ]);
12583
13158
  var sectionHeightIntentSchema = z23.enum([
12584
13159
  "default",
12585
13160
  "banner",
@@ -12615,6 +13190,7 @@ var imageSurfaceTreatmentSchema = z23.discriminatedUnion("kind", [
12615
13190
  ]);
12616
13191
  var testimonialCardTreatmentSchema = z23.enum(["default", "accent-quote"]);
12617
13192
  var tileTreatmentSchema = z23.enum(tileTreatmentValues);
13193
+ var eventListTreatmentSchema = z23.enum(eventListTreatmentValues);
12618
13194
  var eyebrowTreatmentSchema = z23.enum(eyebrowTreatmentValues);
12619
13195
  function uniqueNonEmpty(values) {
12620
13196
  const uniqueValues = [...new Set(values)];
@@ -12656,10 +13232,13 @@ var blockDesignPlanSchema = z23.object({
12656
13232
  emphasis: z23.enum(userDesignOptionCatalog.emphases),
12657
13233
  sectionHeight: sectionHeightIntentSchema.optional(),
12658
13234
  heroLegibility: heroLegibilityStrategySchema.optional(),
13235
+ heroComposition: heroCompositionIntentSchema.optional(),
13236
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
12659
13237
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
12660
13238
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
12661
13239
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
12662
13240
  tileTreatment: tileTreatmentSchema.optional(),
13241
+ eventListTreatment: eventListTreatmentSchema.optional(),
12663
13242
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
12664
13243
  }).strict();
12665
13244
  var styleAuthoritySchema = z23.discriminatedUnion("kind", [
@@ -14059,6 +14638,7 @@ function styledSection(config) {
14059
14638
  renderBackgroundImage = true,
14060
14639
  backgroundImageLoading,
14061
14640
  backgroundImageFetchPriority,
14641
+ allowOverflow = false,
14062
14642
  fullWidthPath
14063
14643
  } = config;
14064
14644
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
@@ -14093,7 +14673,7 @@ function styledSection(config) {
14093
14673
  // No fallback needed - transform handles all cases via defaultSpacing
14094
14674
  }
14095
14675
  },
14096
- allowOverflow: {
14676
+ allowOverflow: allowOverflow ? true : {
14097
14677
  $bind: {
14098
14678
  from: `${bindFrom}.background`,
14099
14679
  transforms: [{ id: "background.resolveAllowOverflow" }],
@@ -14788,6 +15368,14 @@ var tileTreatmentSet = new Set(tileTreatmentValues);
14788
15368
  function isTileTreatment(value) {
14789
15369
  return typeof value === "string" && tileTreatmentSet.has(value);
14790
15370
  }
15371
+ var eventListTreatmentClassMap = {
15372
+ plain: "",
15373
+ "lined-panel": "rb-event-list-treatment-lined-panel"
15374
+ };
15375
+ var eventListTreatmentSet = new Set(eventListTreatmentValues);
15376
+ function isEventListTreatment(value) {
15377
+ return typeof value === "string" && eventListTreatmentSet.has(value);
15378
+ }
14791
15379
  var sectionClassNameTransform = {
14792
15380
  id: "sectionStyles.resolveClassName",
14793
15381
  kind: "string",
@@ -14855,6 +15443,17 @@ var sectionClassNameTransform = {
14855
15443
  `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
14856
15444
  );
14857
15445
  }
15446
+ const eventListTreatment = input?.eventListTreatment;
15447
+ if (isEventListTreatment(eventListTreatment)) {
15448
+ const eventListTreatmentClass = eventListTreatmentClassMap[eventListTreatment];
15449
+ if (eventListTreatmentClass) {
15450
+ classes.push(eventListTreatmentClass);
15451
+ }
15452
+ } else if (typeof eventListTreatment === "string" && true) {
15453
+ console.warn(
15454
+ `[sectionStyles] Invalid eventListTreatment value in _sectionStyles: "${eventListTreatment}". Expected one of: ${eventListTreatmentValues.join(", ")}.`
15455
+ );
15456
+ }
14858
15457
  if (hasFixedFrameBackgroundMotion(input)) {
14859
15458
  classes.push(fixedFrameScopeClass);
14860
15459
  }
@@ -15290,6 +15889,35 @@ function sectionState(opts) {
15290
15889
  );
15291
15890
  }
15292
15891
 
15892
+ // ../blocks/src/system/node/fragments/headingDecoration.ts
15893
+ var defaultBindFrom = "_sectionStyles.headingDecoration";
15894
+ function headingDecoration({
15895
+ bindFrom = defaultBindFrom,
15896
+ family,
15897
+ placement,
15898
+ className
15899
+ }) {
15900
+ return el(
15901
+ "div",
15902
+ {
15903
+ "aria-hidden": "true",
15904
+ className: {
15905
+ $bind: {
15906
+ from: bindFrom,
15907
+ transforms: [
15908
+ {
15909
+ id: "ui.headingDecorationClassName",
15910
+ options: { baseClass: className, family }
15911
+ }
15912
+ ]
15913
+ }
15914
+ }
15915
+ },
15916
+ null,
15917
+ when(`${bindFrom}.placement`, { equals: placement })
15918
+ );
15919
+ }
15920
+
15293
15921
  // ../blocks/src/system/fragments/types.ts
15294
15922
  import { z as z27 } from "zod";
15295
15923
  var FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;
@@ -16068,6 +16696,10 @@ var testimonialsHeadingFragment = defineFragment({
16068
16696
  when("content.heading"),
16069
16697
  bind("content.heading")
16070
16698
  ),
16699
+ headingDecoration({
16700
+ family: "short-center-rule",
16701
+ placement: "under-centered-heading"
16702
+ }),
16071
16703
  text(
16072
16704
  {
16073
16705
  as: "p",
@@ -16739,6 +17371,41 @@ var faqHeadingFragment = defineFragment({
16739
17371
  });
16740
17372
 
16741
17373
  // ../blocks/src/system/fragments/library/faqAccordion.ts
17374
+ function createFaqAccordionLayout(options = {}) {
17375
+ return accordionList({
17376
+ collection: "content.items",
17377
+ itemName: "faqItem",
17378
+ indexName: "faqIndex",
17379
+ accordionProps: {
17380
+ className: options.rootClassName ?? "accordion-root",
17381
+ type: "single",
17382
+ collapsible: true
17383
+ },
17384
+ itemProps: {
17385
+ className: {
17386
+ $bind: {
17387
+ from: "content._cardStyles",
17388
+ transforms: [
17389
+ {
17390
+ id: "boxStyles.all",
17391
+ options: {
17392
+ axis: "all",
17393
+ includeSpacing: false,
17394
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
17395
+ }
17396
+ }
17397
+ ]
17398
+ },
17399
+ fallback: "rb-faq-item"
17400
+ },
17401
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
17402
+ // Legacy theme accordion style
17403
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
17404
+ },
17405
+ triggerFrom: "faqItem.question",
17406
+ contentFrom: "faqItem.answer"
17407
+ });
17408
+ }
16742
17409
  var faqAccordionFragment = defineFragment({
16743
17410
  id: "faqAccordion",
16744
17411
  title: "FAQ Accordion",
@@ -16772,40 +17439,7 @@ var faqAccordionFragment = defineFragment({
16772
17439
  }
16773
17440
  }
16774
17441
  ],
16775
- layout: accordionList({
16776
- collection: "content.items",
16777
- itemName: "faqItem",
16778
- indexName: "faqIndex",
16779
- accordionProps: {
16780
- className: "accordion-root",
16781
- // CSS-first: all styling handled by theme CSS
16782
- type: "single",
16783
- collapsible: true
16784
- },
16785
- itemProps: {
16786
- className: {
16787
- $bind: {
16788
- from: "content._cardStyles",
16789
- transforms: [
16790
- {
16791
- id: "boxStyles.all",
16792
- options: {
16793
- axis: "all",
16794
- includeSpacing: false,
16795
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden rb-border"
16796
- }
16797
- }
16798
- ]
16799
- },
16800
- fallback: "rb-faq-item"
16801
- },
16802
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
16803
- // Legacy theme accordion style
16804
- iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
16805
- },
16806
- triggerFrom: "faqItem.question",
16807
- contentFrom: "faqItem.answer"
16808
- })
17442
+ layout: createFaqAccordionLayout()
16809
17443
  });
16810
17444
 
16811
17445
  // ../blocks/src/system/fragments/library/card.ts
@@ -17858,6 +18492,7 @@ var microLayout = styledSection({
17858
18492
  function splitLayoutWith(children) {
17859
18493
  return styledSection({
17860
18494
  children: styledContainer({
18495
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
17861
18496
  children: {
17862
18497
  type: "grid",
17863
18498
  props: {
@@ -17882,6 +18517,7 @@ function splitLayoutWith(children) {
17882
18517
  // The split variants render the image as a real grid column, so suppress
17883
18518
  // the default absolute background image layer while keeping color/overlay.
17884
18519
  renderBackgroundImage: false,
18520
+ allowOverflow: true,
17885
18521
  baseClass: ""
17886
18522
  });
17887
18523
  }
@@ -18035,6 +18671,21 @@ function introHeading(className) {
18035
18671
  bind("content.title")
18036
18672
  );
18037
18673
  }
18674
+ function introHeadingGroup(className) {
18675
+ return stack(
18676
+ {
18677
+ gap: "sm",
18678
+ className: "rb-intro-heading-group"
18679
+ },
18680
+ [
18681
+ introHeading(className),
18682
+ headingDecoration({
18683
+ family: "organic-squiggle",
18684
+ placement: "after-heading"
18685
+ })
18686
+ ]
18687
+ );
18688
+ }
18038
18689
  function introBody(className = "rb-prose rb-max-w-none") {
18039
18690
  return richText({ className }, bind("content.body"));
18040
18691
  }
@@ -18053,6 +18704,10 @@ function introCopyStack(options = {}) {
18053
18704
  },
18054
18705
  [
18055
18706
  introHeading(options.headingClassName ?? "rb-intro-title"),
18707
+ headingDecoration({
18708
+ family: "organic-squiggle",
18709
+ placement: "after-heading"
18710
+ }),
18056
18711
  introBody(options.bodyClassName),
18057
18712
  introCtas(options.ctaJustify)
18058
18713
  ]
@@ -18092,7 +18747,7 @@ var statementCopyLayout = styledSection({
18092
18747
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
18093
18748
  },
18094
18749
  [
18095
- introHeading("rb-intro-title rb-max-w-xl"),
18750
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
18096
18751
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18097
18752
  introBody(),
18098
18753
  introCtas("start")
@@ -18113,7 +18768,7 @@ var statementMediaLayout = styledSection({
18113
18768
  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"
18114
18769
  },
18115
18770
  [
18116
- introHeading("rb-intro-title rb-max-w-xl"),
18771
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
18117
18772
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18118
18773
  introBody(),
18119
18774
  introCtas("start")
@@ -19115,6 +19770,9 @@ function isNodeDefinitionArray(layout) {
19115
19770
  }
19116
19771
  var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
19117
19772
  var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
19773
+ var questionColumnsAccordionLayout = createFaqAccordionLayout({
19774
+ rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
19775
+ });
19118
19776
  var defaultLayout = styledSection({
19119
19777
  children: styledContainer({
19120
19778
  baseClassName: "rb-relative rb-isolate",
@@ -19128,11 +19786,24 @@ var twoColumnLayout = styledSection({
19128
19786
  children: el(
19129
19787
  "div",
19130
19788
  {
19131
- className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19789
+ className: "rb-faq-split-heading rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19132
19790
  },
19133
19791
  [
19134
- el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
19135
- el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
19792
+ el("div", { className: "rb-faq-split-heading-copy" }, [headingLayout]),
19793
+ el("div", { className: "rb-faq-split-heading-accordion" }, [accordionLayout])
19794
+ ]
19795
+ )
19796
+ }),
19797
+ baseClass: ""
19798
+ });
19799
+ var questionColumnsLayout = styledSection({
19800
+ children: styledContainer({
19801
+ baseClassName: "rb-relative rb-isolate",
19802
+ children: stack(
19803
+ { gap: "xl", className: "rb-w-full" },
19804
+ [
19805
+ headingLayout,
19806
+ questionColumnsAccordionLayout
19136
19807
  ]
19137
19808
  )
19138
19809
  }),
@@ -19157,7 +19828,8 @@ var faqManifest = createBlockManifest({
19157
19828
  layout: defaultLayout,
19158
19829
  variants: {
19159
19830
  default: defaultLayout,
19160
- "two-column": twoColumnLayout
19831
+ "two-column": twoColumnLayout,
19832
+ "question-columns": questionColumnsLayout
19161
19833
  },
19162
19834
  defaultVariant: "default",
19163
19835
  variantOptions: {
@@ -19168,6 +19840,10 @@ var faqManifest = createBlockManifest({
19168
19840
  "two-column": {
19169
19841
  label: "Two column",
19170
19842
  description: "A left heading column with FAQ items on the right."
19843
+ },
19844
+ "question-columns": {
19845
+ label: "Question columns",
19846
+ description: "A full-width heading above FAQ items split into two columns."
19171
19847
  }
19172
19848
  },
19173
19849
  description: "Accordion of frequently asked questions and answers.",
@@ -19289,9 +19965,21 @@ var eyebrowTreatmentClassMap = {
19289
19965
  "accent-pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent rb-eyebrow-treatment-pill-bounce"
19290
19966
  };
19291
19967
  var eyebrowTreatmentSet = new Set(eyebrowTreatmentValues);
19968
+ var headingDecorationFamilySet = new Set(visibleHeadingDecorationFamilyValues);
19969
+ var headingDecorationPlacementSet = new Set(visibleHeadingDecorationPlacementValues);
19970
+ var headingDecorationColorTokenSet = new Set(headingDecorationColorTokenValues);
19292
19971
  function isEyebrowTreatment(value) {
19293
19972
  return typeof value === "string" && eyebrowTreatmentSet.has(value);
19294
19973
  }
19974
+ function isHeadingDecorationFamily(value) {
19975
+ return typeof value === "string" && headingDecorationFamilySet.has(value);
19976
+ }
19977
+ function isHeadingDecorationPlacement(value) {
19978
+ return typeof value === "string" && headingDecorationPlacementSet.has(value);
19979
+ }
19980
+ function isHeadingDecorationColorToken(value) {
19981
+ return typeof value === "string" && headingDecorationColorTokenSet.has(value);
19982
+ }
19295
19983
  var imageGalleryCornerClassMap = {
19296
19984
  none: "",
19297
19985
  sm: "rb-rounded-sm",
@@ -19395,6 +20083,10 @@ var sectionStateToneTransform = {
19395
20083
  summary: "Map semantic section-state kind to feedback tone",
19396
20084
  run: (value) => sectionStateToneFromUnknown(value)
19397
20085
  };
20086
+ var heroTitleLengthThresholds = {
20087
+ medium: { maxCharacters: 42, maxWords: 6 },
20088
+ long: { maxCharacters: 78, maxWords: 11 }
20089
+ };
19398
20090
  function isPlainObject(value) {
19399
20091
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
19400
20092
  }
@@ -19402,6 +20094,14 @@ function readString(obj, key) {
19402
20094
  const v = obj[key];
19403
20095
  return typeof v === "string" ? v : void 0;
19404
20096
  }
20097
+ function resolveGeneratedHeroLayoutStyles(content) {
20098
+ const raw = content._heroLayoutStyles;
20099
+ return isPlainObject(raw) ? raw : null;
20100
+ }
20101
+ function readHeroLayoutString(content, generatedKey, fallbackKey = generatedKey) {
20102
+ const generated = resolveGeneratedHeroLayoutStyles(content);
20103
+ return generated && typeof generated[generatedKey] === "string" ? generated[generatedKey] : readString(content, fallbackKey);
20104
+ }
19405
20105
  function resolveHeroVariant(content) {
19406
20106
  const variant = readString(content, "variant");
19407
20107
  if (variant && variant.trim()) return variant.trim();
@@ -19410,14 +20110,14 @@ function resolveHeroVariant(content) {
19410
20110
  return null;
19411
20111
  }
19412
20112
  function resolveHeroContentAlignment(content) {
19413
- const raw = readString(content, "contentAlignment");
20113
+ const raw = readHeroLayoutString(content, "contentAlignment");
19414
20114
  if (raw === "left" || raw === "center" || raw === "right") return raw;
19415
20115
  const variant = resolveHeroVariant(content);
19416
20116
  if (variant === "split" || variant === "splitReverse") return "left";
19417
20117
  return "center";
19418
20118
  }
19419
20119
  function resolveHeroVerticalAlignment(content) {
19420
- const raw = readString(content, "verticalAlignment");
20120
+ const raw = readHeroLayoutString(content, "verticalAlignment");
19421
20121
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
19422
20122
  const sectionStyles = asPartialObject(content._sectionStyles);
19423
20123
  const minHeight = sectionStyles?.minHeight;
@@ -19427,11 +20127,29 @@ function resolveHeroVerticalAlignment(content) {
19427
20127
  return "top";
19428
20128
  }
19429
20129
  function resolveHeroContentMaxWidth(content) {
19430
- const raw = readString(content, "contentMaxWidth");
20130
+ const raw = readHeroLayoutString(content, "contentMaxWidth");
19431
20131
  if (raw === "default" || raw === "narrow" || raw === "medium" || raw === "wide")
19432
20132
  return raw;
19433
20133
  return "default";
19434
20134
  }
20135
+ function resolveHeroTypographyScale(content) {
20136
+ const raw = readHeroLayoutString(
20137
+ content,
20138
+ "typographyScale",
20139
+ "heroTypographyScale"
20140
+ );
20141
+ if (raw === "quiet" || raw === "editorial" || raw === "display" || raw === "poster") {
20142
+ return raw;
20143
+ }
20144
+ return null;
20145
+ }
20146
+ function resolveHeroTitleLength(content) {
20147
+ const headline = readString(content, "headline")?.trim() ?? "";
20148
+ const wordCount = headline.length === 0 ? 0 : headline.split(/\s+/).length;
20149
+ if (headline.length > heroTitleLengthThresholds.long.maxCharacters || wordCount > heroTitleLengthThresholds.long.maxWords) return "long";
20150
+ if (headline.length > heroTitleLengthThresholds.medium.maxCharacters || wordCount > heroTitleLengthThresholds.medium.maxWords) return "medium";
20151
+ return "short";
20152
+ }
19435
20153
  var heroContentWrapperClassSchema = z33.object({
19436
20154
  base: z33.string().optional()
19437
20155
  });
@@ -19444,6 +20162,8 @@ var heroContentWrapperClassTransform = {
19444
20162
  const content = isPlainObject(value) ? value : isPlainObject(context.data) ? context.data : {};
19445
20163
  const alignment = resolveHeroContentAlignment(content);
19446
20164
  const maxWidth = resolveHeroContentMaxWidth(content);
20165
+ const typographyScale = resolveHeroTypographyScale(content);
20166
+ const titleLength = resolveHeroTitleLength(content);
19447
20167
  const textAlignClass = alignment === "center" ? "rb-text-center" : alignment === "right" ? "rb-text-right" : "rb-text-left";
19448
20168
  const maxWidthClass = maxWidth === "narrow" ? "rb-max-w-2xl" : maxWidth === "medium" ? "rb-max-w-3xl" : maxWidth === "wide" ? "rb-max-w-5xl" : "";
19449
20169
  const positionClass = alignment === "center" ? "rb-mx-auto" : alignment === "right" ? "rb-ml-auto" : "";
@@ -19451,7 +20171,9 @@ var heroContentWrapperClassTransform = {
19451
20171
  options?.base,
19452
20172
  textAlignClass,
19453
20173
  maxWidthClass,
19454
- positionClass
20174
+ positionClass,
20175
+ typographyScale ? `rb-hero-typography-${typographyScale}` : "",
20176
+ `rb-hero-title-${titleLength}`
19455
20177
  ]);
19456
20178
  }
19457
20179
  };
@@ -19751,11 +20473,67 @@ var uiTransforms = [
19751
20473
  const treatment = isEyebrowTreatment(value) ? value : "plain";
19752
20474
  return joinClasses3([baseClass, eyebrowTreatmentClassMap[treatment]]);
19753
20475
  }
20476
+ },
20477
+ {
20478
+ id: "ui.headingDecorationClassName",
20479
+ kind: "string",
20480
+ summary: "Apply constrained Theme V2 heading decoration classes",
20481
+ run: (value, options) => {
20482
+ const baseClass = typeof options?.baseClass === "string" && options.baseClass.trim() ? options.baseClass : "rb-heading-decoration";
20483
+ const decoration = asPartialObject(value);
20484
+ const family = isHeadingDecorationFamily(decoration?.family) ? decoration.family : null;
20485
+ const allowedFamily = isHeadingDecorationFamily(options?.family) ? options.family : null;
20486
+ const placement = isHeadingDecorationPlacement(decoration?.placement) ? decoration.placement : null;
20487
+ const colorToken = isHeadingDecorationColorToken(decoration?.colorToken) ? decoration.colorToken : "primary";
20488
+ if (!family || !placement) return "rb-hidden";
20489
+ if (allowedFamily && family !== allowedFamily) return "rb-hidden";
20490
+ return joinClasses3([
20491
+ baseClass,
20492
+ `rb-heading-decoration-${family}`,
20493
+ `rb-heading-decoration-placement-${placement}`,
20494
+ `rb-heading-decoration-color-${colorToken}`
20495
+ ]);
20496
+ }
19754
20497
  }
19755
20498
  ];
19756
20499
 
19757
20500
  // ../blocks/src/system/transforms/registry/layout.ts
19758
20501
  import { z as z34 } from "zod";
20502
+
20503
+ // ../theme-core/src/siteChromePlacement.ts
20504
+ var HEADER_POSITIONINGS = ["static", "sticky", "fixed"];
20505
+ function parseHeaderPositioning(value) {
20506
+ return isHeaderPositioning(value) ? value : "static";
20507
+ }
20508
+ function isHeaderPositioning(value) {
20509
+ return typeof value === "string" && HEADER_POSITIONINGS.includes(value);
20510
+ }
20511
+ function planSiteChromePlacement(positioning) {
20512
+ switch (positioning) {
20513
+ case "static":
20514
+ return {
20515
+ kind: "static",
20516
+ headerRootClassName: null,
20517
+ standaloneShellClassName: null
20518
+ };
20519
+ case "sticky":
20520
+ return {
20521
+ kind: "sticky",
20522
+ headerRootClassName: "rb-sticky rb-top-0",
20523
+ standaloneShellClassName: "sticky top-0 z-40 w-full"
20524
+ };
20525
+ case "fixed":
20526
+ return {
20527
+ kind: "fixed",
20528
+ headerRootClassName: "rb-fixed rb-top-0 rb-left-0 rb-right-0",
20529
+ standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
20530
+ };
20531
+ default:
20532
+ return assertNever(positioning);
20533
+ }
20534
+ }
20535
+
20536
+ // ../blocks/src/system/transforms/registry/layout.ts
19759
20537
  var joinClasses4 = (parts) => parts.filter(
19760
20538
  (part) => typeof part === "string" && part.trim().length > 0
19761
20539
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -19871,32 +20649,35 @@ var headerRootClassTransform = {
19871
20649
  ...options
19872
20650
  };
19873
20651
  const content = asPartialObject(value) ?? {};
19874
- const positioning = typeof content.positioning === "string" ? content.positioning : "static";
20652
+ const positioning = parseHeaderPositioning(content.positioning);
20653
+ const placement = planSiteChromePlacement(positioning);
19875
20654
  const shrinkOnScroll = Boolean(content.shrinkOnScroll);
19876
20655
  const header = asPartialObject(value);
19877
20656
  const visuals = resolveHeaderVisualStyles(header, context.theme);
19878
20657
  const navContainerType = header?.navContainer?.type ?? "none";
19879
20658
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
19880
20659
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
19881
- const classes = [
19882
- config.base,
19883
- backgroundClass
19884
- ];
20660
+ const classes = [config.base, backgroundClass];
19885
20661
  if (!hasContainedNav) {
19886
20662
  if (config.blur) classes.push(config.blur);
19887
20663
  if (config.blurSupport) classes.push(config.blurSupport);
19888
20664
  }
19889
- if (positioning === "sticky") {
20665
+ if (placement.kind === "sticky") {
19890
20666
  classes.push(
19891
20667
  visuals.isTransparent ? config.stickyTransparent : config.sticky
19892
20668
  );
19893
- } else if (positioning === "fixed") {
20669
+ } else if (placement.kind === "fixed") {
19894
20670
  classes.push(config.fixed);
19895
20671
  }
19896
- if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
20672
+ if (shrinkOnScroll && placement.kind !== "static") {
19897
20673
  classes.push(config.shrink);
19898
20674
  }
19899
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
20675
+ const VALID_VARIANTS = [
20676
+ "classic",
20677
+ "centered",
20678
+ "transparent",
20679
+ "floating"
20680
+ ];
19900
20681
  const variant = header?.variant;
19901
20682
  if (variant && VALID_VARIANTS.includes(variant)) {
19902
20683
  classes.push(`header-variant-${variant}`);
@@ -20423,6 +21204,10 @@ function desktopOnlyDisplay(display) {
20423
21204
  return `rb-hidden ${LARGE_DISPLAY_CLASSES[display]}`;
20424
21205
  }
20425
21206
 
21207
+ // ../theme-core/src/siteChromeOverlayClearance.ts
21208
+ var SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
21209
+ var SITE_CHROME_VISIBLE_HEADER_SELECTOR = `[${SITE_CHROME_VISIBLE_HEADER_ATTR}="true"]`;
21210
+
20426
21211
  // ../blocks/src/system/blocks/site-header.ts
20427
21212
  var logoRow = link(
20428
21213
  {
@@ -20517,15 +21302,21 @@ var mobileCta = ctaButton({
20517
21302
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
20518
21303
  {
20519
21304
  type: "div",
20520
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
21305
+ props: {
21306
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
21307
+ }
20521
21308
  },
20522
21309
  {
20523
21310
  type: "div",
20524
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
21311
+ props: {
21312
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
21313
+ }
20525
21314
  },
20526
21315
  {
20527
21316
  type: "div",
20528
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
21317
+ props: {
21318
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
21319
+ }
20529
21320
  }
20530
21321
  ]);
20531
21322
  var mobileToggleButton = {
@@ -20689,6 +21480,7 @@ var transparentLayout = inline(
20689
21480
  );
20690
21481
  var floatingLayout = inline(
20691
21482
  {
21483
+ [SITE_CHROME_VISIBLE_HEADER_ATTR]: "true",
20692
21484
  className: bindProp("$root.theme.header.maxWidth", {
20693
21485
  transforms: pipe(
20694
21486
  tx("layout.maxWidthClass", {
@@ -20708,28 +21500,6 @@ var floatingLayout = inline(
20708
21500
  ],
20709
21501
  when("$root.theme.header.variant", { equals: "floating" })
20710
21502
  );
20711
- var editorialLayout = stack(
20712
- {
20713
- gap: "md",
20714
- align: "center",
20715
- className: bindProp("$root.theme.header.maxWidth", {
20716
- transforms: pipe(
20717
- tx("layout.maxWidthClass", {
20718
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
20719
- })
20720
- ),
20721
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
20722
- })
20723
- },
20724
- [
20725
- centeredLogoRow,
20726
- createNavRow(
20727
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
20728
- "center"
20729
- )
20730
- ],
20731
- when("$root.theme.header.variant", { equals: "editorial" })
20732
- );
20733
21503
  var headerLayout = headerSection(
20734
21504
  {
20735
21505
  background: bindProp("$root.theme.header", {
@@ -20743,10 +21513,7 @@ var headerLayout = headerSection(
20743
21513
  }),
20744
21514
  style: bindProp("$root.theme.header", {
20745
21515
  transforms: pipe(tx("layout.headerRootStyle")),
20746
- fallback: mergeStyles(
20747
- textColorStyle("text"),
20748
- borderColorStyle("border")
20749
- )
21516
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
20750
21517
  })
20751
21518
  },
20752
21519
  [
@@ -20755,7 +21522,6 @@ var headerLayout = headerSection(
20755
21522
  centeredLayout,
20756
21523
  transparentLayout,
20757
21524
  floatingLayout,
20758
- editorialLayout,
20759
21525
  mobileOverlay
20760
21526
  ],
20761
21527
  props({
@@ -21660,6 +22426,10 @@ var sectionHeading = stack(
21660
22426
  when("content.title"),
21661
22427
  bind("content.title")
21662
22428
  ),
22429
+ headingDecoration({
22430
+ family: "short-center-rule",
22431
+ placement: "under-centered-heading"
22432
+ }),
21663
22433
  richText(
21664
22434
  {
21665
22435
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -24083,7 +24853,7 @@ var COLUMN_CLASSES = {
24083
24853
  };
24084
24854
  function getContainerClass(layout, columns) {
24085
24855
  if (layout === "compact") {
24086
- return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
24856
+ return "event-listing-compact-container rb-flex rb-flex-col";
24087
24857
  }
24088
24858
  if (layout === "stack") {
24089
24859
  return "rb-flex rb-flex-col rb-gap-6";
@@ -26911,6 +27681,7 @@ import { z as z53 } from "zod";
26911
27681
  var storedProductCartItemSchema = z53.object({
26912
27682
  kind: z53.literal("product"),
26913
27683
  productId: z53.string().min(1),
27684
+ productCategoryId: z53.string().min(1).optional().nullable(),
26914
27685
  variantId: z53.string().min(1).optional().nullable(),
26915
27686
  title: z53.string().min(1),
26916
27687
  variantTitle: z53.string().optional().nullable(),
@@ -29415,6 +30186,10 @@ var scheduleTileTreatments = [
29415
30186
  "quiet",
29416
30187
  "brand-depth"
29417
30188
  ];
30189
+ var eventListTreatments = [
30190
+ "plain",
30191
+ "lined-panel"
30192
+ ];
29418
30193
  function scheduleDetailsCapable() {
29419
30194
  return declareBlockDesignCapability({
29420
30195
  sectionSurfaces: "supported",
@@ -29423,6 +30198,14 @@ function scheduleDetailsCapable() {
29423
30198
  tileTreatments: scheduleTileTreatments
29424
30199
  });
29425
30200
  }
30201
+ function eventListCapable() {
30202
+ return declareBlockDesignCapability({
30203
+ sectionSurfaces: "supported",
30204
+ contentFrames: ["plain"],
30205
+ itemSurfaces: "unsupported",
30206
+ eventListTreatments
30207
+ });
30208
+ }
29426
30209
  function defaultBoundaryBias(visualWeight) {
29427
30210
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
29428
30211
  }
@@ -29642,7 +30425,8 @@ var systemBlockDefinitionsRaw = [
29642
30425
  flow: bodyFlow,
29643
30426
  layoutProfiles: [
29644
30427
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
29645
- layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
30428
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
30429
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
29646
30430
  ]
29647
30431
  })),
29648
30432
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -29736,11 +30520,11 @@ var systemBlockDefinitionsRaw = [
29736
30520
  flow: offeringsFlow,
29737
30521
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "centered", weight: "featured" })]
29738
30522
  })),
29739
- withDesignCapability("block.event-listing", eventListingBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
30523
+ withDesignCapability("block.event-listing", eventListingBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
29740
30524
  flow: offeringsFlow,
29741
30525
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
29742
30526
  })),
29743
- withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
30527
+ withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
29744
30528
  flow: offeringsFlow,
29745
30529
  layoutProfiles: [
29746
30530
  layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
@@ -30837,6 +31621,15 @@ ${root} {
30837
31621
  `;
30838
31622
  }
30839
31623
 
31624
+ // ../theme-core/src/runtime/themeCssVarNames.ts
31625
+ var THEME_RADIUS_CSS_VARS = {
31626
+ block: "--rb-block-radius",
31627
+ button: "--rb-button-radius",
31628
+ input: "--rb-input-radius",
31629
+ legacyCard: "--radius-card",
31630
+ legacyControl: "--radius-control"
31631
+ };
31632
+
30840
31633
  // ../theme-core/src/blocks/vars/customer-portal.ts
30841
31634
  function generateCustomerPortalVars({
30842
31635
  themeId
@@ -30850,6 +31643,11 @@ ${root} {
30850
31643
  --cp-muted: rgb(var(--tb-mutedText));
30851
31644
  --cp-border: rgb(var(--tb-border));
30852
31645
  --cp-shadow: var(--shadow-elev);
31646
+ --cp-primary: rgb(var(--tb-primary));
31647
+ --cp-primary-hover: rgb(var(--tb-primary-700, var(--tb-primary)));
31648
+ --cp-error: rgb(var(--tb-destructive));
31649
+ --cp-card-radius: var(${THEME_RADIUS_CSS_VARS.block}, var(${THEME_RADIUS_CSS_VARS.legacyCard}, 0.75rem));
31650
+ --cp-control-radius: var(${THEME_RADIUS_CSS_VARS.input}, var(${THEME_RADIUS_CSS_VARS.legacyControl}, 0.5rem));
30853
31651
 
30854
31652
  /* Shared tab bar (underline style) */
30855
31653
  --rb-tab-border-width: 1px;
@@ -30900,7 +31698,7 @@ ${root} {
30900
31698
  --rb-modal-bg: var(--cp-card-bg);
30901
31699
  --rb-modal-border: var(--cp-card-border);
30902
31700
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
30903
- --rb-modal-radius: var(--radius-card);
31701
+ --rb-modal-radius: var(--cp-card-radius);
30904
31702
  --rb-modal-max-width: 560px;
30905
31703
 
30906
31704
  /* Header */
@@ -32281,6 +33079,9 @@ import { jsx as jsx5 } from "react/jsx-runtime";
32281
33079
  import * as React from "react";
32282
33080
  import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
32283
33081
 
33082
+ // ../theme-core/src/fonts/uploadFormat.ts
33083
+ var MAX_FONT_UPLOAD_BYTES = 5 * 1024 * 1024;
33084
+
32284
33085
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
32285
33086
  import { z as z60 } from "zod";
32286
33087
  var themeBridgeConfigSchema = z60.object({
@@ -33061,6 +33862,7 @@ var COURSE_ENROLLMENT_REFUND_FAILED_CODES = [
33061
33862
  ];
33062
33863
 
33063
33864
  // ../api/src/bookingVerticals.ts
33865
+ import { z as z63 } from "zod";
33064
33866
  var VERTICAL_IDS = [
33065
33867
  "yoga_wellness",
33066
33868
  "fitness_pt",
@@ -33139,6 +33941,132 @@ var VERTICAL_ID_SET = new Set(VERTICAL_IDS);
33139
33941
  var VERTICAL_PRESET_ID_SET = new Set(
33140
33942
  VERTICAL_BOOKING_PRESETS.map((presetDefinition) => presetDefinition.id)
33141
33943
  );
33944
+ function parseVerticalId(value) {
33945
+ return typeof value === "string" && VERTICAL_ID_SET.has(value) ? value : null;
33946
+ }
33947
+ function parseVerticalPresetId(value) {
33948
+ return typeof value === "string" && VERTICAL_PRESET_ID_SET.has(value) ? value : null;
33949
+ }
33950
+ function getVerticalPresetDefinition(presetId) {
33951
+ const definition = VERTICAL_BOOKING_PRESETS.find((presetDefinition) => presetDefinition.id === presetId);
33952
+ if (!definition) {
33953
+ throw new Error(`Unhandled vertical preset id: ${presetId}`);
33954
+ }
33955
+ return definition;
33956
+ }
33957
+ function toNonEmptyVerticalPresetIds(presetIds) {
33958
+ const firstPresetId = presetIds[0];
33959
+ return firstPresetId ? [firstPresetId, ...presetIds.slice(1)] : null;
33960
+ }
33961
+ function createConfiguredSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
33962
+ return {
33963
+ verticalId,
33964
+ selectedPresetIds
33965
+ };
33966
+ }
33967
+ function createSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
33968
+ const nonEmptyPresetIds = toNonEmptyVerticalPresetIds(selectedPresetIds);
33969
+ return nonEmptyPresetIds ? createConfiguredSiteVerticalBookingConfig(verticalId, nonEmptyPresetIds) : null;
33970
+ }
33971
+ function resolveSiteVerticalBookingConfig(rawConfig) {
33972
+ if (!rawConfig) {
33973
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
33974
+ }
33975
+ const verticalId = parseVerticalId(rawConfig.verticalId);
33976
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
33977
+ const selectedPresetIds = rawPresetIds.map(parseVerticalPresetId).filter((presetId) => Boolean(presetId));
33978
+ const config = {
33979
+ verticalId,
33980
+ selectedPresetIds
33981
+ };
33982
+ if (!verticalId && selectedPresetIds.length === 0) {
33983
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
33984
+ }
33985
+ const issues = getSiteVerticalConfigIssues(rawConfig, config);
33986
+ if (issues.length > 0) {
33987
+ return { kind: "invalid", config, issues };
33988
+ }
33989
+ const configuredConfig = verticalId ? createSiteVerticalBookingConfig(verticalId, selectedPresetIds) : null;
33990
+ if (!configuredConfig) {
33991
+ return { kind: "invalid", config, issues: ["empty_selected_presets"] };
33992
+ }
33993
+ return {
33994
+ kind: "configured",
33995
+ config: configuredConfig,
33996
+ selectedPresets: configuredConfig.selectedPresetIds.map(getVerticalPresetDefinition)
33997
+ };
33998
+ }
33999
+ function getSiteVerticalConfigIssues(rawConfig, config) {
34000
+ const issues = /* @__PURE__ */ new Set();
34001
+ if (rawConfig.verticalId != null && !config.verticalId) {
34002
+ issues.add("unknown_vertical");
34003
+ }
34004
+ if (!config.verticalId && config.selectedPresetIds.length > 0) {
34005
+ issues.add("missing_vertical");
34006
+ }
34007
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
34008
+ if (rawPresetIds.some((presetId) => parseVerticalPresetId(presetId) === null)) {
34009
+ issues.add("unknown_preset");
34010
+ }
34011
+ if (config.verticalId && config.selectedPresetIds.length === 0) {
34012
+ issues.add("empty_selected_presets");
34013
+ }
34014
+ const seenBehaviours = /* @__PURE__ */ new Set();
34015
+ for (const presetId of config.selectedPresetIds) {
34016
+ const presetDefinition = getVerticalPresetDefinition(presetId);
34017
+ if (config.verticalId && presetDefinition.verticalId !== config.verticalId) {
34018
+ issues.add("preset_vertical_mismatch");
34019
+ }
34020
+ if (presetDefinition.availability === "future") {
34021
+ issues.add("future_preset_selected");
34022
+ }
34023
+ if (seenBehaviours.has(presetDefinition.canonicalBehaviour)) {
34024
+ issues.add("duplicate_canonical_behaviour");
34025
+ }
34026
+ seenBehaviours.add(presetDefinition.canonicalBehaviour);
34027
+ }
34028
+ return [...issues];
34029
+ }
34030
+ var VerticalIdSchema = z63.string().trim().transform((value, ctx) => {
34031
+ const parsed = parseVerticalId(value);
34032
+ if (!parsed) {
34033
+ ctx.addIssue({
34034
+ code: z63.ZodIssueCode.custom,
34035
+ message: "Unknown booking vertical"
34036
+ });
34037
+ return z63.NEVER;
34038
+ }
34039
+ return parsed;
34040
+ });
34041
+ var VerticalPresetIdSchema = z63.string().trim().transform((value, ctx) => {
34042
+ const parsed = parseVerticalPresetId(value);
34043
+ if (!parsed) {
34044
+ ctx.addIssue({
34045
+ code: z63.ZodIssueCode.custom,
34046
+ message: "Unknown booking preset"
34047
+ });
34048
+ return z63.NEVER;
34049
+ }
34050
+ return parsed;
34051
+ });
34052
+ var BookingVerticalConfigSchema = z63.object({
34053
+ verticalId: VerticalIdSchema.nullable(),
34054
+ selectedPresetIds: z63.array(VerticalPresetIdSchema).max(20)
34055
+ }).transform((value, ctx) => {
34056
+ const resolved = resolveSiteVerticalBookingConfig(value);
34057
+ if (resolved.kind === "invalid") {
34058
+ ctx.addIssue({
34059
+ code: z63.ZodIssueCode.custom,
34060
+ message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
34061
+ });
34062
+ return z63.NEVER;
34063
+ }
34064
+ return resolved.config;
34065
+ });
34066
+ var DEFAULT_SITE_VERTICAL_BOOKING_CONFIG = {
34067
+ verticalId: null,
34068
+ selectedPresetIds: []
34069
+ };
33142
34070
  function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, description, availability = "onboarding") {
33143
34071
  return {
33144
34072
  id,
@@ -33158,51 +34086,51 @@ function isRecord3(value) {
33158
34086
  }
33159
34087
 
33160
34088
  // ../api/src/appointmentSetup.ts
33161
- import { z as z63 } from "zod";
34089
+ import { z as z64 } from "zod";
33162
34090
  var APPOINTMENT_SETUP_MAX_MINUTES = 1440;
33163
- var appointmentSetupRefSchema = z63.discriminatedUnion("kind", [
33164
- z63.object({ kind: z63.literal("existing"), id: z63.string().min(1) }),
33165
- z63.object({ kind: z63.literal("new"), draftId: z63.string().min(1) })
34091
+ var appointmentSetupRefSchema = z64.discriminatedUnion("kind", [
34092
+ z64.object({ kind: z64.literal("existing"), id: z64.string().min(1) }),
34093
+ z64.object({ kind: z64.literal("new"), draftId: z64.string().min(1) })
33166
34094
  ]);
33167
- var appointmentSetupVenueChoiceSchema = z63.discriminatedUnion("kind", [
33168
- z63.object({ kind: z63.literal("none") }),
33169
- z63.object({ kind: z63.literal("existing"), venueId: z63.string().min(1) }),
33170
- z63.object({
33171
- kind: z63.literal("create"),
33172
- draftId: z63.string().min(1),
33173
- title: z63.string().trim().min(1),
33174
- description: z63.string().nullable(),
33175
- timezone: z63.string().trim().min(1).nullable(),
33176
- addressJson: z63.record(z63.string(), z63.unknown()),
33177
- locationJson: z63.object({ lat: z63.number(), lng: z63.number() }).nullable()
34095
+ var appointmentSetupVenueChoiceSchema = z64.discriminatedUnion("kind", [
34096
+ z64.object({ kind: z64.literal("none") }),
34097
+ z64.object({ kind: z64.literal("existing"), venueId: z64.string().min(1) }),
34098
+ z64.object({
34099
+ kind: z64.literal("create"),
34100
+ draftId: z64.string().min(1),
34101
+ title: z64.string().trim().min(1),
34102
+ description: z64.string().nullable(),
34103
+ timezone: z64.string().trim().min(1).nullable(),
34104
+ addressJson: z64.record(z64.string(), z64.unknown()),
34105
+ locationJson: z64.object({ lat: z64.number(), lng: z64.number() }).nullable()
33178
34106
  })
33179
34107
  ]);
33180
- var appointmentSetupPaymentDraftSchema = z63.object({
33181
- priceType: z63.union([z63.literal("free"), z63.literal("paid")])
33182
- });
33183
- var appointmentSetupServiceAssignmentDraftSchema = z63.discriminatedUnion("kind", [
33184
- z63.object({ kind: z63.literal("all_practitioners") }),
33185
- z63.object({
33186
- kind: z63.literal("selected_practitioners"),
33187
- resourceRefs: z63.array(appointmentSetupRefSchema)
34108
+ var appointmentSetupPaymentDraftSchema = z64.object({
34109
+ priceType: z64.union([z64.literal("free"), z64.literal("paid")])
34110
+ });
34111
+ var appointmentSetupServiceAssignmentDraftSchema = z64.discriminatedUnion("kind", [
34112
+ z64.object({ kind: z64.literal("all_practitioners") }),
34113
+ z64.object({
34114
+ kind: z64.literal("selected_practitioners"),
34115
+ resourceRefs: z64.array(appointmentSetupRefSchema)
33188
34116
  })
33189
34117
  ]);
33190
- var appointmentSetupServiceDraftSchema = z63.object({
34118
+ var appointmentSetupServiceDraftSchema = z64.object({
33191
34119
  ref: appointmentSetupRefSchema,
33192
- title: z63.string().trim().min(1),
33193
- description: z63.string().nullable(),
33194
- durationMinutes: z63.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
33195
- prepMinutes: z63.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
33196
- cleanupMinutes: z63.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
33197
- priceAmount: z63.number().int().nonnegative().nullable(),
33198
- isActive: z63.boolean(),
33199
- locationType: z63.union([
33200
- z63.literal("virtual"),
33201
- z63.literal("in_person"),
33202
- z63.literal("hybrid")
34120
+ title: z64.string().trim().min(1),
34121
+ description: z64.string().nullable(),
34122
+ durationMinutes: z64.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
34123
+ prepMinutes: z64.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
34124
+ cleanupMinutes: z64.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
34125
+ priceAmount: z64.number().int().nonnegative().nullable(),
34126
+ isActive: z64.boolean(),
34127
+ locationType: z64.union([
34128
+ z64.literal("virtual"),
34129
+ z64.literal("in_person"),
34130
+ z64.literal("hybrid")
33203
34131
  ]),
33204
34132
  venue: appointmentSetupVenueChoiceSchema,
33205
- timezone: z63.string().trim().min(1).nullable(),
34133
+ timezone: z64.string().trim().min(1).nullable(),
33206
34134
  payment: appointmentSetupPaymentDraftSchema,
33207
34135
  assignment: appointmentSetupServiceAssignmentDraftSchema
33208
34136
  }).superRefine((service, ctx) => {
@@ -33221,49 +34149,49 @@ var appointmentSetupServiceDraftSchema = z63.object({
33221
34149
  });
33222
34150
  }
33223
34151
  });
33224
- var appointmentSetupPractitionerDraftSchema = z63.object({
34152
+ var appointmentSetupPractitionerDraftSchema = z64.object({
33225
34153
  ref: appointmentSetupRefSchema,
33226
- displayName: z63.string().trim().min(1),
33227
- bio: z63.string().nullable(),
33228
- timezone: z63.string().trim().min(1),
33229
- colorHex: z63.string().nullable()
33230
- });
33231
- var appointmentSetupWeeklyWindowDraftSchema = z63.object({
33232
- weekday: z63.number().int().min(0).max(6),
33233
- startTime: z63.string(),
33234
- endTime: z63.string()
33235
- });
33236
- var appointmentSetupStartTimePolicyDraftSchema = z63.discriminatedUnion("kind", [
33237
- z63.object({ kind: z63.literal("automatic_spacing") }),
33238
- z63.object({
33239
- kind: z63.literal("regular_interval"),
33240
- intervalMinutes: z63.union([
33241
- z63.literal(10),
33242
- z63.literal(15),
33243
- z63.literal(20),
33244
- z63.literal(30),
33245
- z63.literal(45),
33246
- z63.literal(60)
34154
+ displayName: z64.string().trim().min(1),
34155
+ bio: z64.string().nullable(),
34156
+ timezone: z64.string().trim().min(1),
34157
+ colorHex: z64.string().nullable()
34158
+ });
34159
+ var appointmentSetupWeeklyWindowDraftSchema = z64.object({
34160
+ weekday: z64.number().int().min(0).max(6),
34161
+ startTime: z64.string(),
34162
+ endTime: z64.string()
34163
+ });
34164
+ var appointmentSetupStartTimePolicyDraftSchema = z64.discriminatedUnion("kind", [
34165
+ z64.object({ kind: z64.literal("automatic_spacing") }),
34166
+ z64.object({
34167
+ kind: z64.literal("regular_interval"),
34168
+ intervalMinutes: z64.union([
34169
+ z64.literal(10),
34170
+ z64.literal(15),
34171
+ z64.literal(20),
34172
+ z64.literal(30),
34173
+ z64.literal(45),
34174
+ z64.literal(60)
33247
34175
  ])
33248
34176
  })
33249
34177
  ]);
33250
- var appointmentSetupAvailabilityDraftSchema = z63.object({
33251
- kind: z63.literal("weekly_windows"),
34178
+ var appointmentSetupAvailabilityDraftSchema = z64.object({
34179
+ kind: z64.literal("weekly_windows"),
33252
34180
  resourceRef: appointmentSetupRefSchema,
33253
34181
  serviceRef: appointmentSetupRefSchema.nullable(),
33254
- windows: z63.array(appointmentSetupWeeklyWindowDraftSchema),
34182
+ windows: z64.array(appointmentSetupWeeklyWindowDraftSchema),
33255
34183
  startTimePolicy: appointmentSetupStartTimePolicyDraftSchema.optional()
33256
34184
  });
33257
34185
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
33258
34186
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
33259
- var appointmentSetupBookingNoticeSchema = z63.object({
33260
- minLeadMinutes: z63.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
33261
- maxBookingNoticeMinutes: z63.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
33262
- });
33263
- var applyAppointmentSetupRequestSchema = z63.object({
33264
- services: z63.array(appointmentSetupServiceDraftSchema),
33265
- practitioners: z63.array(appointmentSetupPractitionerDraftSchema),
33266
- availability: z63.array(appointmentSetupAvailabilityDraftSchema),
34187
+ var appointmentSetupBookingNoticeSchema = z64.object({
34188
+ minLeadMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
34189
+ maxBookingNoticeMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
34190
+ });
34191
+ var applyAppointmentSetupRequestSchema = z64.object({
34192
+ services: z64.array(appointmentSetupServiceDraftSchema),
34193
+ practitioners: z64.array(appointmentSetupPractitionerDraftSchema),
34194
+ availability: z64.array(appointmentSetupAvailabilityDraftSchema),
33267
34195
  bookingNotice: appointmentSetupBookingNoticeSchema
33268
34196
  });
33269
34197
 
@@ -33296,24 +34224,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
33296
34224
  ];
33297
34225
 
33298
34226
  // ../api/src/siteBanner.ts
33299
- import { z as z64 } from "zod";
34227
+ import { z as z65 } from "zod";
33300
34228
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
33301
34229
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
33302
34230
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
33303
34231
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
33304
- var siteBannerScopeSchema = z64.enum(SITE_BANNER_SCOPE_VALUES);
33305
- var siteBannerToneSchema = z64.enum(SITE_BANNER_TONE_VALUES);
33306
- var siteBannerBodySchema = z64.unknown().transform(unwrapRichTextValue);
33307
- var siteBannerCtaSchema = z64.object({
33308
- label: z64.string().trim().min(1),
34232
+ var siteBannerScopeSchema = z65.enum(SITE_BANNER_SCOPE_VALUES);
34233
+ var siteBannerToneSchema = z65.enum(SITE_BANNER_TONE_VALUES);
34234
+ var siteBannerBodySchema = z65.unknown().transform(unwrapRichTextValue);
34235
+ var siteBannerCtaSchema = z65.object({
34236
+ label: z65.string().trim().min(1),
33309
34237
  link: linkPayloadSchema
33310
34238
  });
33311
- var siteBannerSettingsSchema = z64.discriminatedUnion("enabled", [
33312
- z64.object({
33313
- enabled: z64.literal(false)
34239
+ var siteBannerSettingsSchema = z65.discriminatedUnion("enabled", [
34240
+ z65.object({
34241
+ enabled: z65.literal(false)
33314
34242
  }),
33315
- z64.object({
33316
- enabled: z64.literal(true),
34243
+ z65.object({
34244
+ enabled: z65.literal(true),
33317
34245
  scope: siteBannerScopeSchema,
33318
34246
  tone: siteBannerToneSchema,
33319
34247
  body: siteBannerBodySchema,
@@ -33327,7 +34255,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
33327
34255
  const analysis = analyzeSiteBannerBody(value.body);
33328
34256
  for (const issue of analysis.issues) {
33329
34257
  ctx.addIssue({
33330
- code: z64.ZodIssueCode.custom,
34258
+ code: z65.ZodIssueCode.custom,
33331
34259
  path: ["body"],
33332
34260
  message: siteBannerBodyIssueMessage(issue)
33333
34261
  });
@@ -33550,72 +34478,105 @@ function parsePublicProductCategorySelector(value) {
33550
34478
  return void 0;
33551
34479
  }
33552
34480
 
34481
+ // ../api/src/navigation/dashboardSiteNav.ts
34482
+ var hiddenDemoSiteNavSurfaceIds = [
34483
+ "site.newsletter"
34484
+ ];
34485
+ var hiddenDemoSiteNavIds = new Set(
34486
+ hiddenDemoSiteNavSurfaceIds
34487
+ );
34488
+ var websiteSurfaceIds = [
34489
+ "site.content",
34490
+ "site.footerBlocks",
34491
+ "site.navigation",
34492
+ "site.media",
34493
+ "site.style",
34494
+ "site.performance"
34495
+ ];
34496
+ var websiteSurfaceIdSet = new Set(
34497
+ websiteSurfaceIds
34498
+ );
34499
+
34500
+ // ../api/src/navigation/dashboardSettingsNav.ts
34501
+ var hiddenDemoSettingsNavSurfaceIds = [
34502
+ "settings.features",
34503
+ "settings.domains",
34504
+ "settings.bookings",
34505
+ "settings.emails",
34506
+ "settings.team",
34507
+ "settings.billing",
34508
+ "settings.developer",
34509
+ "settings.apiKeys",
34510
+ "settings.backup"
34511
+ ];
34512
+ var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
34513
+
33553
34514
  // ../api/src/aiPlayground.ts
33554
- import { z as z65 } from "zod";
33555
- var Rfc6902PatchOp = z65.discriminatedUnion("op", [
34515
+ import { z as z66 } from "zod";
34516
+ var Rfc6902PatchOp = z66.discriminatedUnion("op", [
33556
34517
  // Standard RFC-6902 operations
33557
- z65.object({
33558
- op: z65.literal("add"),
33559
- path: z65.string(),
33560
- value: z65.unknown()
34518
+ z66.object({
34519
+ op: z66.literal("add"),
34520
+ path: z66.string(),
34521
+ value: z66.unknown()
33561
34522
  }),
33562
- z65.object({
33563
- op: z65.literal("remove"),
33564
- path: z65.string()
34523
+ z66.object({
34524
+ op: z66.literal("remove"),
34525
+ path: z66.string()
33565
34526
  }),
33566
- z65.object({
33567
- op: z65.literal("replace"),
33568
- path: z65.string(),
33569
- value: z65.unknown()
34527
+ z66.object({
34528
+ op: z66.literal("replace"),
34529
+ path: z66.string(),
34530
+ value: z66.unknown()
33570
34531
  }),
33571
- z65.object({
33572
- op: z65.literal("move"),
33573
- from: z65.string(),
33574
- path: z65.string()
34532
+ z66.object({
34533
+ op: z66.literal("move"),
34534
+ from: z66.string(),
34535
+ path: z66.string()
33575
34536
  }),
33576
- z65.object({
33577
- op: z65.literal("copy"),
33578
- from: z65.string(),
33579
- path: z65.string()
34537
+ z66.object({
34538
+ op: z66.literal("copy"),
34539
+ from: z66.string(),
34540
+ path: z66.string()
33580
34541
  }),
33581
34542
  // Block-level operations (Phase 2)
33582
- z65.object({
33583
- op: z65.literal("add_block"),
33584
- blockKind: z65.string(),
33585
- afterBlockId: z65.string().nullable(),
33586
- content: z65.record(z65.string(), z65.unknown()),
33587
- rationale: z65.string()
34543
+ z66.object({
34544
+ op: z66.literal("add_block"),
34545
+ blockKind: z66.string(),
34546
+ afterBlockId: z66.string().nullable(),
34547
+ content: z66.record(z66.string(), z66.unknown()),
34548
+ rationale: z66.string()
33588
34549
  }),
33589
- z65.object({
33590
- op: z65.literal("delete_block"),
33591
- blockId: z65.string(),
33592
- rationale: z65.string()
34550
+ z66.object({
34551
+ op: z66.literal("delete_block"),
34552
+ blockId: z66.string(),
34553
+ rationale: z66.string()
33593
34554
  }),
33594
- z65.object({
33595
- op: z65.literal("reorder_block"),
33596
- blockId: z65.string(),
33597
- afterBlockId: z65.string().nullable(),
33598
- rationale: z65.string()
34555
+ z66.object({
34556
+ op: z66.literal("reorder_block"),
34557
+ blockId: z66.string(),
34558
+ afterBlockId: z66.string().nullable(),
34559
+ rationale: z66.string()
33599
34560
  })
33600
34561
  ]);
33601
- var PlaygroundProposeRequest = z65.object({
33602
- request: z65.string().min(1).max(2e3)
34562
+ var PlaygroundProposeRequest = z66.object({
34563
+ request: z66.string().min(1).max(2e3)
33603
34564
  });
33604
- var MultiPagePatchEnvelope = z65.object({
33605
- pageId: z65.string(),
33606
- blockId: z65.string().optional(),
34565
+ var MultiPagePatchEnvelope = z66.object({
34566
+ pageId: z66.string(),
34567
+ blockId: z66.string().optional(),
33607
34568
  // Not present for page-level ops
33608
- blockKind: z65.string().optional(),
33609
- blockPurpose: z65.string().optional().nullable(),
33610
- ops: z65.array(Rfc6902PatchOp),
33611
- rationale: z65.string(),
33612
- currentContent: z65.record(z65.string(), z65.unknown()).optional()
33613
- });
33614
- var MultiPageUpdateResponse = z65.object({
33615
- patches: z65.array(MultiPagePatchEnvelope),
33616
- assistantMessage: z65.string(),
33617
- pagesModified: z65.number(),
33618
- toolCallsUsed: z65.number()
34569
+ blockKind: z66.string().optional(),
34570
+ blockPurpose: z66.string().optional().nullable(),
34571
+ ops: z66.array(Rfc6902PatchOp),
34572
+ rationale: z66.string(),
34573
+ currentContent: z66.record(z66.string(), z66.unknown()).optional()
34574
+ });
34575
+ var MultiPageUpdateResponse = z66.object({
34576
+ patches: z66.array(MultiPagePatchEnvelope),
34577
+ assistantMessage: z66.string(),
34578
+ pagesModified: z66.number(),
34579
+ toolCallsUsed: z66.number()
33619
34580
  });
33620
34581
 
33621
34582
  // src/data/prefetchBlockData.ts