@riverbankcms/sdk 0.82.0 → 0.84.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 (194) hide show
  1. package/README.md +16 -0
  2. package/dist/{PreviewEditorSidebar-LHGK6RIO.mjs → PreviewEditorSidebar-HML67UDA.mjs} +330 -11
  3. package/dist/{PreviewEditorUI-AXZG2SDC.mjs → PreviewEditorUI-I4BQUU6K.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-MCKMVDTK.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +200 -0
  6. package/dist/_dts/api/src/blocks.d.ts +36 -0
  7. package/dist/_dts/api/src/contentRuntime.d.ts +46 -0
  8. package/dist/_dts/api/src/endpoints.d.ts +40 -0
  9. package/dist/_dts/api/src/index.d.ts +2 -2
  10. package/dist/_dts/api/src/sdk-event-pricing.d.ts +61 -0
  11. package/dist/_dts/api/src/sdk-event-schedule.d.ts +52 -0
  12. package/dist/_dts/api/src/sdk-event-upsert.d.ts +50 -0
  13. package/dist/_dts/api/src/sdkContracts.d.ts +67 -33
  14. package/dist/_dts/api/src/shared-contracts.d.ts +13 -0
  15. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +22 -36
  16. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +46 -1
  17. package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +6 -1
  18. package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +3 -2
  19. package/dist/_dts/block-form/src/utils/visibleWhen.d.ts +7 -0
  20. package/dist/_dts/blocks/src/PageRenderer.d.ts +11 -0
  21. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
  22. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  23. package/dist/_dts/blocks/src/client.d.ts +4 -0
  24. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
  25. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -2016
  26. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -2016
  27. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -2016
  28. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -2016
  29. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -2016
  30. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +171 -0
  31. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -2016
  32. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -2016
  33. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +3 -2
  34. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  35. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -7
  36. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +2534 -151
  37. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -2016
  38. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -2016
  39. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -2016
  40. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +36 -3
  41. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  42. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  43. package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +4 -1
  44. package/dist/_dts/blocks/src/system/fields/imageShape.d.ts +30 -0
  45. package/dist/_dts/blocks/src/system/fragments/library/heroLayoutControls.d.ts +25 -0
  46. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +35 -161
  47. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -6
  48. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -3
  49. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +33 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +303 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +20 -1
  52. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -3
  53. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +26 -6
  55. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +14 -0
  56. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +1 -1
  57. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +1 -1
  58. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +1 -1
  59. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +1 -1
  60. package/dist/_dts/content-editor/src/controller/useInvalidBlockRecovery.d.ts +1 -1
  61. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +2 -1
  62. package/dist/_dts/content-editor/src/primitives/PreviewTextEditor.d.ts +1 -0
  63. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  64. package/dist/_dts/content-model/src/entry-slots/types.d.ts +356 -0
  65. package/dist/_dts/content-model/src/index.d.ts +1 -0
  66. package/dist/_dts/content-model/src/templates/defaults.d.ts +7 -0
  67. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +100 -5
  68. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +6 -1
  69. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
  70. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +3 -2
  71. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +3 -2
  72. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +3 -2
  73. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +27 -0
  74. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  75. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +8 -0
  76. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +37 -3
  77. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  78. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  79. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
  80. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +19 -0
  81. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +8 -0
  82. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  83. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -1
  84. package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +9 -0
  85. package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +9 -8
  86. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +10 -1
  87. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +5 -1
  88. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
  89. package/dist/_dts/sdk/src/bookings/types.d.ts +2 -2
  90. package/dist/_dts/sdk/src/cli/content/reader.d.ts +9 -8
  91. package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -1
  92. package/dist/_dts/sdk/src/cli/helpers.d.ts +10 -5
  93. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +2 -2
  94. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +2 -1
  95. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -2
  96. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  97. package/dist/_dts/sdk/src/client/management/types.d.ts +40 -10
  98. package/dist/_dts/sdk/src/config/field-definitions.d.ts +13 -7
  99. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +26 -3
  100. package/dist/_dts/sdk/src/public-api/contracts.d.ts +13 -0
  101. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  102. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +6 -1
  103. package/dist/_dts/sdk/src/rendering/overrides.d.ts +6 -1
  104. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  105. package/dist/_dts/sdk/src/version.d.ts +1 -1
  106. package/dist/_dts/site-commands/src/commands.d.ts +15 -0
  107. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  108. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  109. package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +16 -0
  110. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  111. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  112. package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
  113. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  114. package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
  115. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +33 -33
  116. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  117. package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +16 -0
  118. package/dist/_dts/theme-core/src/schema.d.ts +30 -25
  119. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  120. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +141 -1
  121. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -0
  122. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +110 -5
  123. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  124. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  125. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +5 -1
  126. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  127. package/dist/_dts/theme-core/src/site-styles/types.d.ts +1 -1
  128. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
  129. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +1 -0
  130. package/dist/_dts/theme-core/src/utils/colorStyles.d.ts +6 -6
  131. package/dist/{chunk-2BUMISSH.mjs → chunk-3LXFQS7T.mjs} +1 -1
  132. package/dist/{chunk-G35HOQEN.mjs → chunk-5E33VO6J.mjs} +132 -46
  133. package/dist/{chunk-HKB6XVIP.mjs → chunk-6X2OVO3S.mjs} +2 -2
  134. package/dist/{chunk-6FWNF3DJ.mjs → chunk-HFMGVJCE.mjs} +158 -20
  135. package/dist/{chunk-FIREV57T.mjs → chunk-LBBPD2IW.mjs} +40 -0
  136. package/dist/{chunk-XQR6THQJ.mjs → chunk-MSHZO4SL.mjs} +3193 -1216
  137. package/dist/cli/index.mjs +2635 -575
  138. package/dist/cli/init-docs/content/getting-started.md +2 -0
  139. package/dist/cli/init-docs/content/workflow-templates.md +93 -2
  140. package/dist/client/{accordion-G34C45TW.mjs → accordion-ESY65T56.mjs} +2 -2
  141. package/dist/client/{bookingForm-BLBVKSAQ.mjs → bookingForm-JRFNZUHD.mjs} +5 -5
  142. package/dist/client/bookings.mjs +3539 -269
  143. package/dist/client/{carousel-7ZVTBRMD.mjs → carousel-CPR5VWIP.mjs} +3 -3
  144. package/dist/client/{cart-Q6S6LZUO.mjs → cart-ZUX5BA7O.mjs} +6 -6
  145. package/dist/client/{checkout-5QJLDE4I.mjs → checkout-RULGBADZ.mjs} +6 -6
  146. package/dist/client/{chunk-CHAB5ACD.mjs → chunk-52I7BGEK.mjs} +2 -2
  147. package/dist/client/{chunk-CSZGLBYR.mjs → chunk-5ZEAZ33K.mjs} +1 -1
  148. package/dist/client/{chunk-ZF4XEWDM.mjs → chunk-BT6AEIKN.mjs} +1 -1
  149. package/dist/client/{chunk-RJHTCTCZ.mjs → chunk-HXPWP5EN.mjs} +268 -15
  150. package/dist/client/{chunk-5PQH4Y75.mjs → chunk-JWEYB4V6.mjs} +2 -2
  151. package/dist/client/{chunk-EQKYMX4N.mjs → chunk-RDJFCPY3.mjs} +158 -51
  152. package/dist/client/{chunk-SBBSMFFG.mjs → chunk-SYIJ5JO2.mjs} +1 -1
  153. package/dist/client/{chunk-WJFHDTYF.mjs → chunk-URQCZD5W.mjs} +5 -5
  154. package/dist/client/{chunk-U2EW7RSR.mjs → chunk-Z5OBQ5I4.mjs} +1 -1
  155. package/dist/client/{chunk-S3MKFGOG.mjs → chunk-ZE5G642V.mjs} +1 -1
  156. package/dist/client/client.mjs +2391 -673
  157. package/dist/client/{courseRegistration-VUG2JJDB.mjs → courseRegistration-QTUDC35T.mjs} +5 -5
  158. package/dist/client/{eventCalendar-E7D2LD4N.mjs → eventCalendar-Q7NS4XLD.mjs} +7 -7
  159. package/dist/client/{eventCombined-FUZ2Z3CS.mjs → eventCombined-QAO7VUO5.mjs} +7 -7
  160. package/dist/client/{eventDetails-QRITJAOW.mjs → eventDetails-WTNNU6Q3.mjs} +7 -7
  161. package/dist/client/{eventListing-INMQMJZ5.mjs → eventListing-5TA2ELDT.mjs} +7 -7
  162. package/dist/client/{eventRegistration-TOOJD4WU.mjs → eventRegistration-M6USZGRF.mjs} +7 -7
  163. package/dist/client/{form-BOWN7ZNQ.mjs → form-DGVGXLMH.mjs} +2 -2
  164. package/dist/client/{headerSection-HFQNZOUU.mjs → headerSection-O2AGMPCU.mjs} +3 -3
  165. package/dist/client/hooks.mjs +1636 -385
  166. package/dist/client/{locationMap-VUZGC7Y5.mjs → locationMap-EJRNRIKJ.mjs} +2 -2
  167. package/dist/client/{newsletterForm-X2XQTPCB.mjs → newsletterForm-7NTC2DTR.mjs} +2 -2
  168. package/dist/client/{productDetail-TA7D2G2B.mjs → productDetail-HH4LP53D.mjs} +6 -6
  169. package/dist/client/{productList-AZOLOZKM.mjs → productList-YVHYM2AF.mjs} +6 -6
  170. package/dist/client/rendering/client.mjs +2303 -1068
  171. package/dist/client/rendering/islands.mjs +19 -19
  172. package/dist/client/rendering.mjs +2587 -796
  173. package/dist/client/{shop-ZDLO7IIG.mjs → shop-UIFX7XRK.mjs} +6 -6
  174. package/dist/preview-next/before-render.mjs +40 -0
  175. package/dist/preview-next/client/runtime.mjs +5 -5
  176. package/dist/preview-next/middleware.mjs +40 -0
  177. package/dist/{sdk-runtime-CTWKNBDQ.mjs → sdk-runtime-ZENAOYMN.mjs} +6 -6
  178. package/dist/server/components.mjs +2028 -457
  179. package/dist/server/config-validation.mjs +1629 -377
  180. package/dist/server/config.mjs +1629 -377
  181. package/dist/server/data.mjs +1636 -385
  182. package/dist/server/index.mjs +42 -1
  183. package/dist/server/next.mjs +2215 -571
  184. package/dist/server/page-converter.mjs +2068 -884
  185. package/dist/server/prebuild.mjs +1 -1
  186. package/dist/server/rendering/server.mjs +2040 -469
  187. package/dist/server/rendering.mjs +2119 -475
  188. package/dist/server/routing.mjs +1711 -419
  189. package/dist/server/server.mjs +1718 -394
  190. package/dist/server/theme-bridge.mjs +1180 -101
  191. package/dist/server/theme.mjs +92 -1
  192. package/dist/styles/index.css +292 -36
  193. package/package.json +1 -1
  194. package/dist/SdkPreviewModeRuntime-RNVRHFFR.mjs +0 -8
@@ -3246,6 +3246,46 @@ var ENDPOINT_DEFINITIONS = {
3246
3246
  auth: "user",
3247
3247
  responseKind: "json"
3248
3248
  },
3249
+ listEntrySlotBlocks: {
3250
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3251
+ method: "GET",
3252
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3253
+ auth: "user",
3254
+ responseKind: "json",
3255
+ errors: ["resource:not_found"]
3256
+ },
3257
+ listEntryPageContentSlots: {
3258
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
3259
+ method: "GET",
3260
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
3261
+ auth: "user",
3262
+ responseKind: "json",
3263
+ errors: ["resource:not_found"]
3264
+ },
3265
+ createEntrySlotBlock: {
3266
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3267
+ method: "POST",
3268
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3269
+ auth: "user",
3270
+ responseKind: "json",
3271
+ errors: ["validation:invalid_input", "resource:not_found"]
3272
+ },
3273
+ reorderEntrySlotBlocks: {
3274
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
3275
+ method: "POST",
3276
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3277
+ auth: "user",
3278
+ responseKind: "json",
3279
+ errors: ["validation:invalid_input", "resource:not_found"]
3280
+ },
3281
+ deleteEntrySlotBlock: {
3282
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
3283
+ method: "DELETE",
3284
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3285
+ auth: "user",
3286
+ responseKind: "json",
3287
+ errors: ["resource:not_found"]
3288
+ },
3249
3289
  createBlock: {
3250
3290
  path: "/sites/{siteId}/pages/{pageId}/blocks",
3251
3291
  method: "POST",
@@ -6882,6 +6922,21 @@ var selectSourceSchema = z4.discriminatedUnion("kind", [
6882
6922
  function assertNeverSelectSource(value) {
6883
6923
  throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
6884
6924
  }
6925
+ var visibleWhenPredicateSchema = z4.object({
6926
+ field: z4.string().min(1),
6927
+ equals: z4.any().optional(),
6928
+ notEquals: z4.any().optional(),
6929
+ oneOf: z4.array(z4.any()).optional(),
6930
+ notIn: z4.array(z4.any()).optional(),
6931
+ minItems: z4.number().int().nonnegative().optional(),
6932
+ maxItems: z4.number().int().nonnegative().optional()
6933
+ });
6934
+ var visibleWhenSchema = z4.union([
6935
+ visibleWhenPredicateSchema,
6936
+ z4.object({
6937
+ allOf: z4.array(visibleWhenPredicateSchema).min(1)
6938
+ })
6939
+ ]);
6885
6940
  var uiSchema = z4.object({
6886
6941
  widget: z4.string().optional(),
6887
6942
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -6914,13 +6969,7 @@ var uiSchema = z4.object({
6914
6969
  showValue: z4.boolean().optional(),
6915
6970
  pattern: z4.string().optional(),
6916
6971
  placeholder: z4.string().optional(),
6917
- visibleWhen: z4.object({
6918
- field: z4.string().min(1),
6919
- equals: z4.any().optional(),
6920
- notEquals: z4.any().optional(),
6921
- oneOf: z4.array(z4.any()).optional(),
6922
- notIn: z4.array(z4.any()).optional()
6923
- }).optional(),
6972
+ visibleWhen: visibleWhenSchema.optional(),
6924
6973
  // Modal configuration for modal and group fields
6925
6974
  modalConfig: z4.object({
6926
6975
  buttonLabel: z4.string().optional(),
@@ -7687,6 +7736,7 @@ var eventListTreatmentValues = [
7687
7736
  ];
7688
7737
  var eyebrowTreatmentValues = [
7689
7738
  "plain",
7739
+ "accent",
7690
7740
  "pill",
7691
7741
  "accent-pill",
7692
7742
  "pill-bounce",
@@ -10701,6 +10751,95 @@ var joyStamp = defineButtonPersonality({
10701
10751
  }
10702
10752
  });
10703
10753
 
10754
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
10755
+ var ornateRitual = defineButtonPersonality({
10756
+ id: "ornate-ritual",
10757
+ name: "Ornate Ritual",
10758
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
10759
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
10760
+ buttonSystem: {
10761
+ global: {
10762
+ cornerStyle: "rounded",
10763
+ shadow: "none",
10764
+ textTransform: "uppercase",
10765
+ fontWeight: 600,
10766
+ borderWidth: 1,
10767
+ hoverTransform: "none",
10768
+ hoverColor: "none",
10769
+ letterSpacing: "loose"
10770
+ },
10771
+ sizes: {
10772
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
10773
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
10774
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
10775
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
10776
+ },
10777
+ variants: [
10778
+ {
10779
+ id: "primary",
10780
+ name: "Primary",
10781
+ enabled: true,
10782
+ priority: 1,
10783
+ background: { type: "solid", colorToken: "primary" },
10784
+ textColorToken: "primaryForeground",
10785
+ borderRadius: "rounded-md",
10786
+ border: { widthClass: "border", colorToken: "primary" },
10787
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10788
+ effects: {
10789
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
10790
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
10791
+ }
10792
+ },
10793
+ {
10794
+ id: "secondary",
10795
+ name: "Secondary",
10796
+ enabled: true,
10797
+ priority: 2,
10798
+ background: { type: "solid", colorToken: "secondary" },
10799
+ textColorToken: "primaryForeground",
10800
+ borderRadius: "rounded-md",
10801
+ border: { widthClass: "border", colorToken: "primary" },
10802
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10803
+ effects: {
10804
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10805
+ }
10806
+ },
10807
+ {
10808
+ id: "outline",
10809
+ name: "Outline",
10810
+ enabled: true,
10811
+ priority: 3,
10812
+ background: { type: "transparent" },
10813
+ textColorToken: "primary",
10814
+ borderRadius: "rounded-md",
10815
+ border: { widthClass: "border", colorToken: "primary" },
10816
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10817
+ effects: {
10818
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
10819
+ }
10820
+ },
10821
+ {
10822
+ id: "ghost",
10823
+ name: "Ghost",
10824
+ enabled: true,
10825
+ priority: 3,
10826
+ background: { type: "transparent" },
10827
+ textColorToken: "accent",
10828
+ borderRadius: "rounded-none",
10829
+ sizes: {
10830
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
10831
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
10832
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
10833
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
10834
+ },
10835
+ effects: {
10836
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
10837
+ }
10838
+ }
10839
+ ]
10840
+ }
10841
+ });
10842
+
10704
10843
  // ../theme-core/src/buttons/personalities/pebble.ts
10705
10844
  var pebble = defineButtonPersonality({
10706
10845
  id: "pebble",
@@ -10974,7 +11113,8 @@ var buttonPersonalities = [
10974
11113
  inkStamp,
10975
11114
  brushedWash,
10976
11115
  showtimePill,
10977
- joyStamp
11116
+ joyStamp,
11117
+ ornateRitual
10978
11118
  ];
10979
11119
  var personalitiesById = new Map(
10980
11120
  buttonPersonalities.map((p) => [p.id, p])
@@ -11604,7 +11744,7 @@ function rgbColorValue(token) {
11604
11744
  if (alpha === void 0) {
11605
11745
  return `rgb(var(${cssVar}))`;
11606
11746
  }
11607
- return `rgba(var(${cssVar}), ${alpha})`;
11747
+ return `rgb(var(${cssVar}) / ${alpha})`;
11608
11748
  }
11609
11749
  function backgroundColorStyle(token) {
11610
11750
  return { backgroundColor: rgbColorValue(token) };
@@ -12709,6 +12849,28 @@ var warmDarkEmber = definePaletteVariant({
12709
12849
  { name: "border", hex: "#894e31" }
12710
12850
  ]
12711
12851
  });
12852
+ var warmDarkKirtanGold = definePaletteVariant({
12853
+ id: "warm-dark-kirtan-gold",
12854
+ name: "Warm Dark \u2014 Kirtan Gold",
12855
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
12856
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
12857
+ mode: "dark",
12858
+ colors: [
12859
+ { name: "primary", hex: "#ffcdb2" },
12860
+ { name: "secondary", hex: "#b5838d" },
12861
+ { name: "accent", hex: "#e5989b" },
12862
+ { name: "success", hex: "#8fbf8f" },
12863
+ { name: "warning", hex: "#f2b86b" },
12864
+ { name: "destructive", hex: "#d96b6b" },
12865
+ { name: "background", hex: "#403944" },
12866
+ { name: "surface", hex: "#403944" },
12867
+ { name: "surfaceAlt", hex: "#372f3b" },
12868
+ { name: "muted", hex: "#4d4550" },
12869
+ { name: "text", hex: "#e6d2d5" },
12870
+ { name: "primaryForeground", hex: "#403944" },
12871
+ { name: "border", hex: "#8d747a" }
12872
+ ]
12873
+ });
12712
12874
 
12713
12875
  // ../theme-core/src/palette/variants/index.ts
12714
12876
  var paletteVariants = [
@@ -12732,7 +12894,8 @@ var paletteVariants = [
12732
12894
  softNaturalWatercolor,
12733
12895
  softNaturalLilac,
12734
12896
  // Warm-dark family (dark mode)
12735
- warmDarkEmber
12897
+ warmDarkEmber,
12898
+ warmDarkKirtanGold
12736
12899
  ];
12737
12900
  var paletteVariantsById = new Map(
12738
12901
  paletteVariants.map((v) => [v.id, v])
@@ -14231,9 +14394,125 @@ function headerConfigurationKey(configuration) {
14231
14394
  function asFooterLookId(value) {
14232
14395
  return value;
14233
14396
  }
14234
- var guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
14397
+ function asFooterLayoutId(value) {
14398
+ return value;
14399
+ }
14400
+ function asFooterStyleId(value) {
14401
+ return value;
14402
+ }
14403
+ var guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
14404
+ var footerLayoutCatalog = defineExactCatalog()([
14405
+ {
14406
+ id: asFooterLayoutId("identity"),
14407
+ label: "Identity",
14408
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
14409
+ },
14410
+ {
14411
+ id: asFooterLayoutId("centered"),
14412
+ label: "Centered",
14413
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
14414
+ maxRecommendedNavDensity: "sparse"
14415
+ },
14416
+ {
14417
+ id: asFooterLayoutId("split"),
14418
+ label: "Split",
14419
+ description: "Navigation and brand signoff separated into a wider split footer.",
14420
+ requiresFooterNav: true,
14421
+ maxRecommendedNavDensity: "balanced"
14422
+ },
14423
+ {
14424
+ id: asFooterLayoutId("columns"),
14425
+ label: "Columns",
14426
+ description: "Grouped footer navigation columns with a supporting bottom line.",
14427
+ requiresFooterNav: true,
14428
+ requiresFooterNavGroups: true
14429
+ }
14430
+ ]);
14431
+ var footerStyleCatalog = defineExactCatalog()([
14432
+ {
14433
+ id: asFooterStyleId("quiet"),
14434
+ label: "Quiet",
14435
+ description: "Lightweight, practical footer treatment."
14436
+ },
14437
+ {
14438
+ id: asFooterStyleId("calm"),
14439
+ label: "Calm",
14440
+ description: "Soft centered treatment with restrained dividers."
14441
+ },
14442
+ {
14443
+ id: asFooterStyleId("editorial"),
14444
+ label: "Editorial",
14445
+ description: "Text-forward treatment with fine-line structure."
14446
+ },
14447
+ {
14448
+ id: asFooterStyleId("brand-band"),
14449
+ label: "Brand band",
14450
+ description: "High-contrast brand treatment with a stronger bottom bar."
14451
+ }
14452
+ ]);
14453
+ var footerLayoutsById = new Map(
14454
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
14455
+ );
14456
+ var footerStylesById = new Map(
14457
+ footerStyleCatalog.map((style) => [style.id, style])
14458
+ );
14459
+ function identityQuietFooter(theme) {
14460
+ return {
14461
+ ...theme.footer,
14462
+ variant: "simple",
14463
+ maxWidth: "container",
14464
+ background: {
14465
+ type: "color",
14466
+ color: "surface"
14467
+ },
14468
+ navStyle: "minimal",
14469
+ navWeight: "regular",
14470
+ navColor: "text",
14471
+ navLinkStyle: {
14472
+ typography: "body",
14473
+ fontWeight: "regular",
14474
+ textTransform: "none",
14475
+ italic: false,
14476
+ colorToken: "text",
14477
+ hoverColorToken: "primary",
14478
+ padding: "none",
14479
+ borderRadius: "none"
14480
+ },
14481
+ navLayout: {
14482
+ layout: "inline-wrap",
14483
+ align: "start",
14484
+ gapX: "default",
14485
+ gapY: "tight"
14486
+ },
14487
+ logo: {
14488
+ showLogo: true,
14489
+ showLogoText: true,
14490
+ placement: "left",
14491
+ size: "sm",
14492
+ align: "start"
14493
+ },
14494
+ bottomBar: {
14495
+ enabled: false,
14496
+ fullBleed: false,
14497
+ textAlign: "left",
14498
+ paddingX: "default",
14499
+ paddingY: "compact",
14500
+ borderTop: {
14501
+ width: "none"
14502
+ }
14503
+ }
14504
+ };
14505
+ }
14235
14506
  function mutedGroundingFooter(theme) {
14236
- return theme.footer;
14507
+ return {
14508
+ ...identityQuietFooter(theme),
14509
+ background: theme.footer.background,
14510
+ navStyle: theme.footer.navStyle,
14511
+ navColor: theme.footer.navColor,
14512
+ navWeight: theme.footer.navWeight,
14513
+ navLinkStyle: theme.footer.navLinkStyle,
14514
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
14515
+ };
14237
14516
  }
14238
14517
  function brandTwoBandFooter(theme) {
14239
14518
  return {
@@ -14338,6 +14617,53 @@ function centeredCalmFooter(theme) {
14338
14617
  }
14339
14618
  };
14340
14619
  }
14620
+ function splitEditorialFooter(theme) {
14621
+ return {
14622
+ ...theme.footer,
14623
+ variant: "split",
14624
+ maxWidth: "container",
14625
+ background: {
14626
+ type: "color",
14627
+ color: "surface"
14628
+ },
14629
+ navStyle: "minimal",
14630
+ navWeight: "regular",
14631
+ navColor: "text",
14632
+ navLinkStyle: {
14633
+ typography: "body",
14634
+ fontWeight: "regular",
14635
+ textTransform: "none",
14636
+ italic: false,
14637
+ colorToken: "text",
14638
+ hoverColorToken: "primary",
14639
+ padding: "none",
14640
+ borderRadius: "none"
14641
+ },
14642
+ navLayout: {
14643
+ layout: "inline-wrap",
14644
+ align: "start",
14645
+ gapX: "relaxed",
14646
+ gapY: "tight"
14647
+ },
14648
+ logo: {
14649
+ showLogo: true,
14650
+ showLogoText: true,
14651
+ placement: "right",
14652
+ size: "sm",
14653
+ align: "end"
14654
+ },
14655
+ bottomBar: {
14656
+ enabled: true,
14657
+ fullBleed: false,
14658
+ textAlign: "left",
14659
+ paddingX: "default",
14660
+ paddingY: "compact",
14661
+ borderTop: {
14662
+ width: "thin"
14663
+ }
14664
+ }
14665
+ };
14666
+ }
14341
14667
  function editorialColumnsFooter(theme) {
14342
14668
  return {
14343
14669
  ...theme.footer,
@@ -14380,25 +14706,47 @@ function editorialColumnsFooter(theme) {
14380
14706
  };
14381
14707
  }
14382
14708
  var footerLookCatalog = defineExactCatalog()([
14709
+ {
14710
+ id: asFooterLookId("footer-identity-quiet"),
14711
+ label: "Identity footer",
14712
+ layoutId: asFooterLayoutId("identity"),
14713
+ styleId: asFooterStyleId("quiet"),
14714
+ compile: identityQuietFooter
14715
+ },
14383
14716
  {
14384
14717
  id: asFooterLookId("footer-muted-grounding"),
14385
14718
  label: "Muted grounding footer",
14719
+ layoutId: asFooterLayoutId("identity"),
14720
+ styleId: asFooterStyleId("quiet"),
14721
+ hiddenFromLayoutStyleControls: true,
14386
14722
  compile: mutedGroundingFooter
14387
14723
  },
14388
14724
  {
14389
14725
  id: asFooterLookId("footer-centered-calm"),
14390
14726
  label: "Centered calm footer",
14727
+ layoutId: asFooterLayoutId("centered"),
14728
+ styleId: asFooterStyleId("calm"),
14391
14729
  compile: centeredCalmFooter
14392
14730
  },
14731
+ {
14732
+ id: asFooterLookId("footer-split-editorial"),
14733
+ label: "Split editorial footer",
14734
+ layoutId: asFooterLayoutId("split"),
14735
+ styleId: asFooterStyleId("editorial"),
14736
+ compile: splitEditorialFooter
14737
+ },
14393
14738
  {
14394
14739
  id: asFooterLookId("footer-editorial-columns"),
14395
14740
  label: "Editorial columns footer",
14741
+ layoutId: asFooterLayoutId("columns"),
14742
+ styleId: asFooterStyleId("editorial"),
14396
14743
  compile: editorialColumnsFooter
14397
14744
  },
14398
14745
  {
14399
14746
  id: asFooterLookId("site-footer-brand-two-band"),
14400
14747
  label: "Two-band brand footer",
14401
- maxRecommendedNavDensity: "balanced",
14748
+ layoutId: asFooterLayoutId("split"),
14749
+ styleId: asFooterStyleId("brand-band"),
14402
14750
  allowedContentPresence: ["default-footer", "default-and-blocks"],
14403
14751
  compile: brandTwoBandFooter
14404
14752
  }
@@ -14601,6 +14949,30 @@ var luxeContrastTypography = {
14601
14949
  },
14602
14950
  scale: "spacious"
14603
14951
  };
14952
+ var kirtanOrnateTypography = {
14953
+ body: {
14954
+ family: "Jost, system-ui, sans-serif",
14955
+ size: "md",
14956
+ weight: "regular",
14957
+ lineHeight: "relaxed",
14958
+ letterSpacing: "normal"
14959
+ },
14960
+ headings: {
14961
+ default: {
14962
+ family: "Marcellus, Georgia, serif",
14963
+ weight: "regular",
14964
+ lineHeight: "normal",
14965
+ letterSpacing: "normal",
14966
+ colorToken: "primary",
14967
+ italic: null,
14968
+ case: null
14969
+ },
14970
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14971
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14972
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
14973
+ },
14974
+ scale: "spacious"
14975
+ };
14604
14976
  var boldDisplayTypography = {
14605
14977
  body: {
14606
14978
  family: "Manrope, system-ui, sans-serif",
@@ -14635,16 +15007,16 @@ var originalJoyTypography = {
14635
15007
  },
14636
15008
  headings: {
14637
15009
  default: {
14638
- family: "Bricolage Grotesque, system-ui, sans-serif",
14639
- weight: "bold",
15010
+ family: "Lobster, cursive",
15011
+ weight: "regular",
14640
15012
  lineHeight: "normal",
14641
- letterSpacing: "tight",
15013
+ letterSpacing: "normal",
14642
15014
  italic: null,
14643
15015
  case: null
14644
15016
  },
14645
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14646
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14647
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
15017
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15018
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15019
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
14648
15020
  },
14649
15021
  scale: "balanced"
14650
15022
  };
@@ -14709,6 +15081,32 @@ var typographyPresets = [
14709
15081
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14710
15082
  typography: luxeContrastTypography
14711
15083
  }),
15084
+ defineTypographyPreset({
15085
+ id: "typography-preset:kirtan-ornate",
15086
+ name: "Kirtan Ornate",
15087
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
15088
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
15089
+ recommendedFonts: {
15090
+ body: ["Jost", "Manrope", "Inter"],
15091
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
15092
+ },
15093
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
15094
+ typography: kirtanOrnateTypography,
15095
+ heroTypography: {
15096
+ headlineSize: "6xl",
15097
+ headlineLineHeight: "normal",
15098
+ subheadlineSize: "xl",
15099
+ subheadlineLineHeight: "relaxed",
15100
+ microHeadlineSize: "5xl",
15101
+ microHeadlineLineHeight: "normal",
15102
+ microSubheadlineSize: "lg",
15103
+ microSubheadlineLineHeight: "relaxed",
15104
+ responsive: {
15105
+ tablet: { headlineSize: "5xl" },
15106
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
15107
+ }
15108
+ }
15109
+ }),
14712
15110
  defineTypographyPreset({
14713
15111
  id: "typography-preset:bold-display",
14714
15112
  name: "Bold Display",
@@ -14738,11 +15136,11 @@ var typographyPresets = [
14738
15136
  defineTypographyPreset({
14739
15137
  id: "typography-preset:original-joy",
14740
15138
  name: "Original Joy",
14741
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
14742
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
15139
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
15140
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
14743
15141
  recommendedFonts: {
14744
15142
  body: ["DM Sans", "Inter", "Manrope"],
14745
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
15143
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
14746
15144
  },
14747
15145
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14748
15146
  typography: originalJoyTypography,
@@ -14766,6 +15164,319 @@ var typographyPresetsById = new Map(
14766
15164
  typographyPresets.map((preset2) => [preset2.id, preset2])
14767
15165
  );
14768
15166
 
15167
+ // ../theme-core/src/site-styles/designState.ts
15168
+ import { z as z24 } from "zod";
15169
+ var themeV2DesignStateSchemaVersion = 1;
15170
+ var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
15171
+ var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
15172
+ var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
15173
+ fields3[0],
15174
+ ...fields3.slice(1)
15175
+ ]);
15176
+ var heroLegibilityStrategySchema = z24.enum([
15177
+ "none",
15178
+ "scrim-gradient",
15179
+ "solid-panel"
15180
+ ]);
15181
+ var heroCompositionIntentSchema = z24.enum([
15182
+ "center",
15183
+ "bottom-left"
15184
+ ]);
15185
+ var heroTypographyScaleIntentSchema = z24.enum([
15186
+ "quiet",
15187
+ "editorial",
15188
+ "display",
15189
+ "poster"
15190
+ ]);
15191
+ var sectionHeightIntentSchema = z24.enum([
15192
+ "default",
15193
+ "banner",
15194
+ "hero",
15195
+ "immersive"
15196
+ ]);
15197
+ var imageSurfaceTreatmentIntensitySchema = z24.enum(["soft", "balanced", "strong"]);
15198
+ var imageSurfaceMotionSchema = z24.enum(["static", "fixed-frame"]);
15199
+ var imageSurfaceTreatmentSchema = z24.discriminatedUnion("kind", [
15200
+ z24.object({ kind: z24.literal("none") }).strict(),
15201
+ z24.object({
15202
+ kind: z24.literal("brand-scrim"),
15203
+ token: z24.enum(["primary", "secondary", "accent"]),
15204
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15205
+ }).strict(),
15206
+ z24.object({
15207
+ kind: z24.literal("brand-wash"),
15208
+ token: z24.enum(["primary", "secondary", "accent"]),
15209
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15210
+ }).strict(),
15211
+ z24.object({
15212
+ kind: z24.literal("neutral-scrim"),
15213
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15214
+ }).strict(),
15215
+ z24.object({
15216
+ kind: z24.literal("neutral-wash"),
15217
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15218
+ }).strict(),
15219
+ z24.object({
15220
+ kind: z24.literal("solid-panel"),
15221
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15222
+ }).strict()
15223
+ ]);
15224
+ var testimonialCardTreatmentSchema = z24.enum(["default", "accent-quote"]);
15225
+ var tileTreatmentSchema = z24.enum(tileTreatmentValues);
15226
+ var eventListTreatmentSchema = z24.enum(eventListTreatmentValues);
15227
+ var eyebrowTreatmentSchema = z24.enum(eyebrowTreatmentValues);
15228
+ function uniqueNonEmpty(values) {
15229
+ const uniqueValues = [...new Set(values)];
15230
+ const firstValue = uniqueValues[0];
15231
+ if (!firstValue) {
15232
+ throw new Error("Expected at least one Theme V2 design state option.");
15233
+ }
15234
+ return [firstValue, ...uniqueValues.slice(1)];
15235
+ }
15236
+ var userPanelTreatments = uniqueNonEmpty(
15237
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
15238
+ );
15239
+ var userFlushTreatments = uniqueNonEmpty(
15240
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
15241
+ );
15242
+ var userFlushBleeds = uniqueNonEmpty(
15243
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
15244
+ );
15245
+ var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
15246
+ z24.object({ kind: z24.literal("plain") }).strict(),
15247
+ z24.object({
15248
+ kind: z24.literal("panel"),
15249
+ treatment: z24.enum(userPanelTreatments)
15250
+ }).strict(),
15251
+ z24.object({
15252
+ kind: z24.literal("flush-panel"),
15253
+ treatment: z24.enum(userFlushTreatments),
15254
+ bleed: z24.enum(userFlushBleeds)
15255
+ }).strict()
15256
+ ]);
15257
+ var blockDesignPlanSchema = z24.object({
15258
+ blockId: z24.string().min(1).transform(asDesignBlockId),
15259
+ blockKind: z24.string().min(1),
15260
+ purpose: z24.string().min(1),
15261
+ sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
15262
+ contentFrame: contentFrameIntentSchema,
15263
+ itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
15264
+ transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
15265
+ emphasis: z24.enum(userDesignOptionCatalog.emphases),
15266
+ sectionHeight: sectionHeightIntentSchema.optional(),
15267
+ heroLegibility: heroLegibilityStrategySchema.optional(),
15268
+ heroComposition: heroCompositionIntentSchema.optional(),
15269
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
15270
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
15271
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
15272
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
15273
+ tileTreatment: tileTreatmentSchema.optional(),
15274
+ eventListTreatment: eventListTreatmentSchema.optional(),
15275
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
15276
+ }).strict();
15277
+ var styleAuthoritySchema = z24.discriminatedUnion("kind", [
15278
+ z24.object({
15279
+ kind: z24.literal("theme-v2"),
15280
+ source: designResolutionPolicySchema,
15281
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
15282
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
15283
+ templateVersion: z24.number().int().nonnegative(),
15284
+ resolverVersion: z24.number().int().nonnegative()
15285
+ }).strict(),
15286
+ z24.object({
15287
+ kind: z24.literal("legacy-raw"),
15288
+ reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
15289
+ }).strict(),
15290
+ z24.object({
15291
+ kind: z24.literal("advanced-detached"),
15292
+ reason: z24.literal("detached-custom-runtime-fields")
15293
+ }).strict()
15294
+ ]);
15295
+ var blockRuntimeStyleAuthoritySchema = z24.object({
15296
+ unit: z24.literal("block-runtime-fields"),
15297
+ blockId: z24.string().min(1).transform(asDesignBlockId),
15298
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
15299
+ authority: styleAuthoritySchema
15300
+ }).strict();
15301
+ var persistedPageDesignStateV1Schema = z24.object({
15302
+ schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
15303
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
15304
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
15305
+ templateVersion: z24.number().int().nonnegative(),
15306
+ resolverVersion: z24.number().int().nonnegative(),
15307
+ rhythmPresetId: z24.string().min(1),
15308
+ blocks: z24.array(blockDesignPlanSchema),
15309
+ styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
15310
+ }).strict();
15311
+
15312
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
15313
+ function defineDesignRuntimeRules(rules) {
15314
+ return rules;
15315
+ }
15316
+ function defineComponentRuntimeRules(rules) {
15317
+ return rules;
15318
+ }
15319
+ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
15320
+ sectionSurfaces: {
15321
+ base: {},
15322
+ "muted-band": {
15323
+ background: {
15324
+ type: "color",
15325
+ color: "muted"
15326
+ }
15327
+ },
15328
+ "accent-band": {
15329
+ background: {
15330
+ type: "color",
15331
+ color: "primary"
15332
+ }
15333
+ },
15334
+ "brand-depth-band": {
15335
+ background: {
15336
+ type: "color",
15337
+ color: "primary-800"
15338
+ }
15339
+ },
15340
+ "hero-image": {
15341
+ background: {
15342
+ type: "image",
15343
+ opacity: 1,
15344
+ position: "center center",
15345
+ ...uniformSectionForeground("text")
15346
+ }
15347
+ }
15348
+ },
15349
+ heroLegibility: {
15350
+ "scrim-gradient": {
15351
+ type: "gradient",
15352
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
15353
+ opacity: 1
15354
+ },
15355
+ "solid-panel": {
15356
+ type: "color",
15357
+ color: "surface",
15358
+ opacity: 0.88
15359
+ }
15360
+ },
15361
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
15362
+ });
15363
+ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
15364
+ panelFrames: {
15365
+ inset: {
15366
+ spacing: "comfortable",
15367
+ rounded: "xl",
15368
+ raised: false,
15369
+ background: {
15370
+ type: "color",
15371
+ color: "surfaceAlt",
15372
+ textColor: "text"
15373
+ }
15374
+ },
15375
+ raised: {
15376
+ spacing: "comfortable",
15377
+ rounded: "xl",
15378
+ raised: true,
15379
+ background: {
15380
+ type: "color",
15381
+ color: "surfaceAlt",
15382
+ textColor: "text"
15383
+ }
15384
+ },
15385
+ editorial: {
15386
+ spacing: "medium",
15387
+ rounded: "xl",
15388
+ raised: false,
15389
+ background: {
15390
+ type: "color",
15391
+ color: "surface",
15392
+ textColor: "text"
15393
+ }
15394
+ }
15395
+ },
15396
+ flushFrames: {
15397
+ "media-panel": {
15398
+ fullWidth: true,
15399
+ spacing: "none",
15400
+ rounded: "none",
15401
+ raised: false
15402
+ }
15403
+ },
15404
+ itemSurfaces: {
15405
+ none: null,
15406
+ default: {
15407
+ spacing: "medium",
15408
+ rounded: "lg",
15409
+ raised: false
15410
+ },
15411
+ flat: {
15412
+ spacing: "medium",
15413
+ rounded: "lg",
15414
+ raised: false
15415
+ },
15416
+ outlined: {
15417
+ spacing: "medium",
15418
+ rounded: "lg",
15419
+ raised: false,
15420
+ border: {
15421
+ enabled: true,
15422
+ width: "1",
15423
+ colorToken: "border"
15424
+ }
15425
+ },
15426
+ raised: {
15427
+ spacing: "medium",
15428
+ rounded: "xl",
15429
+ raised: true
15430
+ },
15431
+ inset: {
15432
+ treatment: "soft-panel",
15433
+ spacing: "comfortable",
15434
+ rounded: "xl",
15435
+ raised: false,
15436
+ border: {
15437
+ enabled: false
15438
+ },
15439
+ background: {
15440
+ type: "color",
15441
+ color: "surfaceAlt",
15442
+ textColor: "text"
15443
+ }
15444
+ },
15445
+ editorial: {
15446
+ // Boxless open column with a short rule on top; the visual treatment
15447
+ // lives in blocks-static/card-treatments.css.
15448
+ treatment: "editorial-rule",
15449
+ spacing: "none",
15450
+ rounded: "none",
15451
+ raised: false,
15452
+ border: {
15453
+ enabled: false
15454
+ }
15455
+ },
15456
+ "color-blocked": {
15457
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
15458
+ // (by position) and staggered offset live in
15459
+ // blocks-static/card-treatments.css; here we set the shared shape:
15460
+ // generous padding, large radius, no border, flat (no shadow).
15461
+ treatment: "color-blocked",
15462
+ spacing: "spacious",
15463
+ rounded: "2xl",
15464
+ raised: false,
15465
+ border: {
15466
+ enabled: false
15467
+ }
15468
+ }
15469
+ }
15470
+ });
15471
+ function uniformSectionForeground(token) {
15472
+ return {
15473
+ textColor: token,
15474
+ headingColor: token,
15475
+ linkColor: token,
15476
+ supportingColor: token
15477
+ };
15478
+ }
15479
+
14769
15480
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
14770
15481
  var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
14771
15482
  var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
@@ -14784,6 +15495,7 @@ var curatedSiteStyleIdValues = [
14784
15495
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
14785
15496
  "site-style:bold-launch",
14786
15497
  "site-style:south-west-twerk-school",
15498
+ "site-style:kirtan-ornate",
14787
15499
  "site-style:original-joy"
14788
15500
  ];
14789
15501
  var quietBudget = {
@@ -14810,6 +15522,50 @@ var expressiveBudget = {
14810
15522
  mediaDensity: "high",
14811
15523
  decorativeRepetition: "medium"
14812
15524
  };
15525
+ var kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
15526
+ ...defaultDesignRuntimeRules,
15527
+ defaultEyebrowTreatment: "accent",
15528
+ sectionSurfaces: {
15529
+ ...defaultDesignRuntimeRules.sectionSurfaces,
15530
+ "muted-band": {
15531
+ background: {
15532
+ type: "color",
15533
+ color: "muted"
15534
+ },
15535
+ foreground: {
15536
+ textColor: "text",
15537
+ headingColor: "primary",
15538
+ linkColor: "primary",
15539
+ supportingColor: "text"
15540
+ }
15541
+ },
15542
+ "brand-depth-band": {
15543
+ background: {
15544
+ type: "color",
15545
+ color: "primary-800"
15546
+ },
15547
+ foreground: {
15548
+ textColor: "text",
15549
+ headingColor: "primary",
15550
+ linkColor: "primary",
15551
+ supportingColor: "text"
15552
+ }
15553
+ },
15554
+ "hero-image": {
15555
+ background: {
15556
+ type: "image",
15557
+ opacity: 1,
15558
+ position: "center center"
15559
+ },
15560
+ foreground: {
15561
+ textColor: "text",
15562
+ headingColor: "primary",
15563
+ linkColor: "primary",
15564
+ supportingColor: "text"
15565
+ }
15566
+ }
15567
+ }
15568
+ });
14813
15569
  var expressiveUnderlineInputs = {
14814
15570
  base: {
14815
15571
  background: { type: "transparent" },
@@ -14847,6 +15603,43 @@ var expressiveUnderlineInputs = {
14847
15603
  opacity: 0.6
14848
15604
  }
14849
15605
  };
15606
+ var ornateDarkInputs = {
15607
+ base: {
15608
+ background: { type: "solid", colorToken: "surfaceAlt" },
15609
+ textColorToken: "text",
15610
+ border: {
15611
+ widthClass: "border",
15612
+ colorToken: "primary/45",
15613
+ style: "all"
15614
+ },
15615
+ corners: "square",
15616
+ shadow: null,
15617
+ spacing: "medium",
15618
+ fontSize: "base"
15619
+ },
15620
+ label: {
15621
+ textColorToken: "primary",
15622
+ fontWeight: "semibold",
15623
+ fontSize: "xs",
15624
+ textTransform: "uppercase",
15625
+ letterSpacing: "wider",
15626
+ opacity: 1
15627
+ },
15628
+ focus: {
15629
+ ringColorToken: "primary/18",
15630
+ ringWidth: "2",
15631
+ borderColorToken: "primary/70"
15632
+ },
15633
+ error: {
15634
+ borderColorToken: "destructive",
15635
+ textColorToken: "destructive"
15636
+ },
15637
+ disabled: {
15638
+ backgroundColorToken: "muted",
15639
+ textColorToken: "mutedText",
15640
+ opacity: 0.6
15641
+ }
15642
+ };
14850
15643
  function uniqueContentFrameKinds() {
14851
15644
  const kinds = [
14852
15645
  ...new Set(
@@ -14904,6 +15697,7 @@ function defineCuratedSiteStyle(input) {
14904
15697
  // clean/minimal styles default to none.
14905
15698
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
14906
15699
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
15700
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
14907
15701
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
14908
15702
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
14909
15703
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -15854,6 +16648,80 @@ var curatedSiteStyles = [
15854
16648
  paletteChoice("high-contrast-ink")
15855
16649
  ]
15856
16650
  }),
16651
+ defineCuratedSiteStyle({
16652
+ id: "site-style:kirtan-ornate",
16653
+ name: "Kirtan Ornate",
16654
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
16655
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
16656
+ generationBrief: "Use a deep plum ground with pale gold as the main brand color, rose accent details, cream text, spacious split hero sections, devotional editorial headings, compact event lists, and framed conversion sections. The mood should feel soulful and ceremonial, not gothic or theatrical.",
16657
+ selectionKeywordRules: [
16658
+ { kind: "word", value: "kirtan" },
16659
+ { kind: "word", value: "chanting" },
16660
+ { kind: "word", value: "ceremony" },
16661
+ { kind: "word", value: "devotional" }
16662
+ ],
16663
+ tokenRecipes: {
16664
+ palette: "brand-led",
16665
+ contrast: "strong",
16666
+ radius: "soft",
16667
+ shadow: "subtle",
16668
+ typography: "serif-editorial",
16669
+ spacing: "airy",
16670
+ motion: "subtle"
16671
+ },
16672
+ compositionBudget: expressiveBudget,
16673
+ typographyPresetChoices: [
16674
+ typographyChoice("typography-preset:kirtan-ornate"),
16675
+ typographyChoice("typography-preset:luxe-contrast"),
16676
+ typographyChoice("typography-preset:editorial-serif")
16677
+ ],
16678
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
16679
+ themeOverrides: {
16680
+ accordions: warmInsetAccordionSystem,
16681
+ cards: originalJoyCardSystem,
16682
+ testimonialQuote: serifDisplayQuote,
16683
+ bodyText: {
16684
+ intro: {
16685
+ paragraphSize: "editorial",
16686
+ headingSize: "editorial"
16687
+ }
16688
+ },
16689
+ inputs: ornateDarkInputs
16690
+ },
16691
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
16692
+ recommendedAppearancePresetIds: [
16693
+ "hero-brand-scrim-fixed-frame",
16694
+ "media-text-quiet-story",
16695
+ "events-lined-panel",
16696
+ "schedule-details-brand-depth",
16697
+ "testimonials-statement-cards",
16698
+ "contact-form-panel"
16699
+ ],
16700
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
16701
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
16702
+ recommendedHeaderStyleChoicesByLayout: {
16703
+ floating: [
16704
+ headerStyleChoice("minimal-surface"),
16705
+ headerStyleChoice("split-glass"),
16706
+ headerStyleChoice("glass")
16707
+ ]
16708
+ },
16709
+ recommendedHeaderLookIds: ["minimal-transparent"],
16710
+ recommendedFooterLookIds: [
16711
+ "site-footer-brand-two-band",
16712
+ "footer-muted-grounding"
16713
+ ],
16714
+ buttonPersonalityChoices: [
16715
+ buttonChoice("ornate-ritual"),
16716
+ buttonChoice("joy-stamp"),
16717
+ buttonChoice("ink-stamp")
16718
+ ],
16719
+ paletteVariantChoices: [
16720
+ paletteChoice("warm-dark-kirtan-gold"),
16721
+ paletteChoice("warm-dark-ember"),
16722
+ paletteChoice("brand-led-burgundy-gold")
16723
+ ]
16724
+ }),
15857
16725
  defineCuratedSiteStyle({
15858
16726
  id: "site-style:original-joy",
15859
16727
  name: "Original Joy",
@@ -15957,319 +16825,6 @@ var pageFlowPresets = [
15957
16825
  }
15958
16826
  ];
15959
16827
 
15960
- // ../theme-core/src/site-styles/designState.ts
15961
- import { z as z24 } from "zod";
15962
- var themeV2DesignStateSchemaVersion = 1;
15963
- var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
15964
- var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
15965
- var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
15966
- fields3[0],
15967
- ...fields3.slice(1)
15968
- ]);
15969
- var heroLegibilityStrategySchema = z24.enum([
15970
- "none",
15971
- "scrim-gradient",
15972
- "solid-panel"
15973
- ]);
15974
- var heroCompositionIntentSchema = z24.enum([
15975
- "center",
15976
- "bottom-left"
15977
- ]);
15978
- var heroTypographyScaleIntentSchema = z24.enum([
15979
- "quiet",
15980
- "editorial",
15981
- "display",
15982
- "poster"
15983
- ]);
15984
- var sectionHeightIntentSchema = z24.enum([
15985
- "default",
15986
- "banner",
15987
- "hero",
15988
- "immersive"
15989
- ]);
15990
- var imageSurfaceTreatmentIntensitySchema = z24.enum(["soft", "balanced", "strong"]);
15991
- var imageSurfaceMotionSchema = z24.enum(["static", "fixed-frame"]);
15992
- var imageSurfaceTreatmentSchema = z24.discriminatedUnion("kind", [
15993
- z24.object({ kind: z24.literal("none") }).strict(),
15994
- z24.object({
15995
- kind: z24.literal("brand-scrim"),
15996
- token: z24.enum(["primary", "secondary", "accent"]),
15997
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15998
- }).strict(),
15999
- z24.object({
16000
- kind: z24.literal("brand-wash"),
16001
- token: z24.enum(["primary", "secondary", "accent"]),
16002
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16003
- }).strict(),
16004
- z24.object({
16005
- kind: z24.literal("neutral-scrim"),
16006
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16007
- }).strict(),
16008
- z24.object({
16009
- kind: z24.literal("neutral-wash"),
16010
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16011
- }).strict(),
16012
- z24.object({
16013
- kind: z24.literal("solid-panel"),
16014
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16015
- }).strict()
16016
- ]);
16017
- var testimonialCardTreatmentSchema = z24.enum(["default", "accent-quote"]);
16018
- var tileTreatmentSchema = z24.enum(tileTreatmentValues);
16019
- var eventListTreatmentSchema = z24.enum(eventListTreatmentValues);
16020
- var eyebrowTreatmentSchema = z24.enum(eyebrowTreatmentValues);
16021
- function uniqueNonEmpty(values) {
16022
- const uniqueValues = [...new Set(values)];
16023
- const firstValue = uniqueValues[0];
16024
- if (!firstValue) {
16025
- throw new Error("Expected at least one Theme V2 design state option.");
16026
- }
16027
- return [firstValue, ...uniqueValues.slice(1)];
16028
- }
16029
- var userPanelTreatments = uniqueNonEmpty(
16030
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
16031
- );
16032
- var userFlushTreatments = uniqueNonEmpty(
16033
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
16034
- );
16035
- var userFlushBleeds = uniqueNonEmpty(
16036
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
16037
- );
16038
- var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
16039
- z24.object({ kind: z24.literal("plain") }).strict(),
16040
- z24.object({
16041
- kind: z24.literal("panel"),
16042
- treatment: z24.enum(userPanelTreatments)
16043
- }).strict(),
16044
- z24.object({
16045
- kind: z24.literal("flush-panel"),
16046
- treatment: z24.enum(userFlushTreatments),
16047
- bleed: z24.enum(userFlushBleeds)
16048
- }).strict()
16049
- ]);
16050
- var blockDesignPlanSchema = z24.object({
16051
- blockId: z24.string().min(1).transform(asDesignBlockId),
16052
- blockKind: z24.string().min(1),
16053
- purpose: z24.string().min(1),
16054
- sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
16055
- contentFrame: contentFrameIntentSchema,
16056
- itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
16057
- transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
16058
- emphasis: z24.enum(userDesignOptionCatalog.emphases),
16059
- sectionHeight: sectionHeightIntentSchema.optional(),
16060
- heroLegibility: heroLegibilityStrategySchema.optional(),
16061
- heroComposition: heroCompositionIntentSchema.optional(),
16062
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
16063
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
16064
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
16065
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
16066
- tileTreatment: tileTreatmentSchema.optional(),
16067
- eventListTreatment: eventListTreatmentSchema.optional(),
16068
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
16069
- }).strict();
16070
- var styleAuthoritySchema = z24.discriminatedUnion("kind", [
16071
- z24.object({
16072
- kind: z24.literal("theme-v2"),
16073
- source: designResolutionPolicySchema,
16074
- siteStyleId: z24.string().min(1).transform(asSiteStyleId),
16075
- templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
16076
- templateVersion: z24.number().int().nonnegative(),
16077
- resolverVersion: z24.number().int().nonnegative()
16078
- }).strict(),
16079
- z24.object({
16080
- kind: z24.literal("legacy-raw"),
16081
- reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
16082
- }).strict(),
16083
- z24.object({
16084
- kind: z24.literal("advanced-detached"),
16085
- reason: z24.literal("detached-custom-runtime-fields")
16086
- }).strict()
16087
- ]);
16088
- var blockRuntimeStyleAuthoritySchema = z24.object({
16089
- unit: z24.literal("block-runtime-fields"),
16090
- blockId: z24.string().min(1).transform(asDesignBlockId),
16091
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
16092
- authority: styleAuthoritySchema
16093
- }).strict();
16094
- var persistedPageDesignStateV1Schema = z24.object({
16095
- schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
16096
- siteStyleId: z24.string().min(1).transform(asSiteStyleId),
16097
- templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
16098
- templateVersion: z24.number().int().nonnegative(),
16099
- resolverVersion: z24.number().int().nonnegative(),
16100
- rhythmPresetId: z24.string().min(1),
16101
- blocks: z24.array(blockDesignPlanSchema),
16102
- styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
16103
- }).strict();
16104
-
16105
- // ../theme-core/src/site-styles/runtimeCompiler.ts
16106
- function defineDesignRuntimeRules(rules) {
16107
- return rules;
16108
- }
16109
- function defineComponentRuntimeRules(rules) {
16110
- return rules;
16111
- }
16112
- var defaultDesignRuntimeRules = defineDesignRuntimeRules({
16113
- sectionSurfaces: {
16114
- base: {},
16115
- "muted-band": {
16116
- background: {
16117
- type: "color",
16118
- color: "muted"
16119
- }
16120
- },
16121
- "accent-band": {
16122
- background: {
16123
- type: "color",
16124
- color: "primary"
16125
- }
16126
- },
16127
- "brand-depth-band": {
16128
- background: {
16129
- type: "color",
16130
- color: "primary-800"
16131
- }
16132
- },
16133
- "hero-image": {
16134
- background: {
16135
- type: "image",
16136
- opacity: 1,
16137
- position: "center center",
16138
- ...uniformSectionForeground("text")
16139
- }
16140
- }
16141
- },
16142
- heroLegibility: {
16143
- "scrim-gradient": {
16144
- type: "gradient",
16145
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
16146
- opacity: 1
16147
- },
16148
- "solid-panel": {
16149
- type: "color",
16150
- color: "surface",
16151
- opacity: 0.88
16152
- }
16153
- },
16154
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
16155
- });
16156
- var defaultComponentRuntimeRules = defineComponentRuntimeRules({
16157
- panelFrames: {
16158
- inset: {
16159
- spacing: "comfortable",
16160
- rounded: "xl",
16161
- raised: false,
16162
- background: {
16163
- type: "color",
16164
- color: "surfaceAlt",
16165
- textColor: "text"
16166
- }
16167
- },
16168
- raised: {
16169
- spacing: "comfortable",
16170
- rounded: "xl",
16171
- raised: true,
16172
- background: {
16173
- type: "color",
16174
- color: "surfaceAlt",
16175
- textColor: "text"
16176
- }
16177
- },
16178
- editorial: {
16179
- spacing: "medium",
16180
- rounded: "xl",
16181
- raised: false,
16182
- background: {
16183
- type: "color",
16184
- color: "surface",
16185
- textColor: "text"
16186
- }
16187
- }
16188
- },
16189
- flushFrames: {
16190
- "media-panel": {
16191
- fullWidth: true,
16192
- spacing: "none",
16193
- rounded: "none",
16194
- raised: false
16195
- }
16196
- },
16197
- itemSurfaces: {
16198
- none: null,
16199
- default: {
16200
- spacing: "medium",
16201
- rounded: "lg",
16202
- raised: false
16203
- },
16204
- flat: {
16205
- spacing: "medium",
16206
- rounded: "lg",
16207
- raised: false
16208
- },
16209
- outlined: {
16210
- spacing: "medium",
16211
- rounded: "lg",
16212
- raised: false,
16213
- border: {
16214
- enabled: true,
16215
- width: "1",
16216
- colorToken: "border"
16217
- }
16218
- },
16219
- raised: {
16220
- spacing: "medium",
16221
- rounded: "xl",
16222
- raised: true
16223
- },
16224
- inset: {
16225
- treatment: "soft-panel",
16226
- spacing: "comfortable",
16227
- rounded: "xl",
16228
- raised: false,
16229
- border: {
16230
- enabled: false
16231
- },
16232
- background: {
16233
- type: "color",
16234
- color: "surfaceAlt",
16235
- textColor: "text"
16236
- }
16237
- },
16238
- editorial: {
16239
- // Boxless open column with a short rule on top; the visual treatment
16240
- // lives in blocks-static/card-treatments.css.
16241
- treatment: "editorial-rule",
16242
- spacing: "none",
16243
- rounded: "none",
16244
- raised: false,
16245
- border: {
16246
- enabled: false
16247
- }
16248
- },
16249
- "color-blocked": {
16250
- // Bold, flat colour-blocked cards. The per-card background colour cycle
16251
- // (by position) and staggered offset live in
16252
- // blocks-static/card-treatments.css; here we set the shared shape:
16253
- // generous padding, large radius, no border, flat (no shadow).
16254
- treatment: "color-blocked",
16255
- spacing: "spacious",
16256
- rounded: "2xl",
16257
- raised: false,
16258
- border: {
16259
- enabled: false
16260
- }
16261
- }
16262
- }
16263
- });
16264
- function uniformSectionForeground(token) {
16265
- return {
16266
- textColor: token,
16267
- headingColor: token,
16268
- linkColor: token,
16269
- supportingColor: token
16270
- };
16271
- }
16272
-
16273
16828
  // ../theme-core/src/site-styles/generatedSchemas.ts
16274
16829
  import { z as z25 } from "zod";
16275
16830
  function uniqueNonEmpty2(values) {
@@ -17081,6 +17636,31 @@ function cardStylesField(options = {}) {
17081
17636
  return createBoxStylesFieldWithDepth("card", options);
17082
17637
  }
17083
17638
 
17639
+ // ../blocks/src/system/fields/imageShape.ts
17640
+ var standardImageShapeOptions = [
17641
+ { value: "default", label: "Default" },
17642
+ { value: "square", label: "Square corners" },
17643
+ { value: "rounded", label: "Rounded corners" },
17644
+ { value: "circle", label: "Circle" },
17645
+ { value: "arch", label: "Arch" }
17646
+ ];
17647
+ function createImageShapeField(options = {}) {
17648
+ return {
17649
+ id: options.id ?? "imageShape",
17650
+ type: "select",
17651
+ label: options.label ?? "Image shape",
17652
+ ...options.description ? { description: options.description } : {},
17653
+ required: false,
17654
+ defaultValue: options.defaultValue ?? "default",
17655
+ multiple: false,
17656
+ options: [...standardImageShapeOptions],
17657
+ ui: {
17658
+ intent: options.uiIntent ?? "display",
17659
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
17660
+ }
17661
+ };
17662
+ }
17663
+
17084
17664
  // ../blocks/src/utils/env.ts
17085
17665
  function isDevEnvironment() {
17086
17666
  try {
@@ -17895,7 +18475,7 @@ function buildFooterNavAll(common) {
17895
18475
  return stack(
17896
18476
  { className: common.className, gap: common.gap, align: "stretch" },
17897
18477
  [item],
17898
- when(collectionPath)
18478
+ whenCollectionHasItems(collectionPath)
17899
18479
  );
17900
18480
  }
17901
18481
  function buildFooterNavLinksOnly(common) {
@@ -17928,7 +18508,7 @@ function buildFooterNavLinksOnly(common) {
17928
18508
  return stack(
17929
18509
  { className: common.className, gap: common.gap, align: "stretch" },
17930
18510
  [item],
17931
- when(collectionPath)
18511
+ whenCollectionHasItems(collectionPath)
17932
18512
  );
17933
18513
  }
17934
18514
  function buildFooterNavFlatten(common) {
@@ -17977,9 +18557,20 @@ function buildFooterNavFlatten(common) {
17977
18557
  return stack(
17978
18558
  { className: common.className, gap: common.gap, align: "stretch" },
17979
18559
  [item],
17980
- when(collectionPath)
18560
+ whenCollectionHasItems(collectionPath)
17981
18561
  );
17982
18562
  }
18563
+ var whenCollectionHasItems = (collectionPath) => (node) => ({
18564
+ ...node,
18565
+ $when: {
18566
+ when: {
18567
+ from: collectionPath,
18568
+ transforms: [{ id: "array.length" }]
18569
+ },
18570
+ equals: 0,
18571
+ not: true
18572
+ }
18573
+ });
17983
18574
  function footerNav(opts) {
17984
18575
  const mode = opts?.mode ?? "all";
17985
18576
  const collectionPath = opts?.collectionPath ?? "footerMenu.items";
@@ -20551,8 +21142,23 @@ function fragmentsToRepeaterField(id, label, fragments, options = {}) {
20551
21142
  var heroLayoutControlsFragment = defineFragment({
20552
21143
  id: "heroLayoutControls",
20553
21144
  title: "Hero Layout",
20554
- description: "Alignment and content width controls for hero layouts.",
21145
+ description: "Title scale, alignment, and content width controls for hero layouts.",
20555
21146
  fields: [
21147
+ {
21148
+ id: "titleSize",
21149
+ type: "select",
21150
+ label: "Title size",
21151
+ description: "Adjust the visual scale of the hero title.",
21152
+ required: false,
21153
+ ui: { intent: "display" },
21154
+ options: [
21155
+ { value: "auto", label: "Auto" },
21156
+ { value: "quiet", label: "Normal" },
21157
+ { value: "editorial", label: "Large" },
21158
+ { value: "display", label: "Huge" },
21159
+ { value: "poster", label: "Poster" }
21160
+ ]
21161
+ },
20556
21162
  {
20557
21163
  id: "contentAlignment",
20558
21164
  type: "select",
@@ -21347,7 +21953,18 @@ function heroSplitImagePane() {
21347
21953
  return stack(
21348
21954
  {
21349
21955
  gap: "none",
21350
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
21956
+ className: {
21957
+ $bind: {
21958
+ from: "content.imageShape",
21959
+ transforms: [
21960
+ {
21961
+ id: "ui.imageShapeClassName",
21962
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
21963
+ }
21964
+ ],
21965
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
21966
+ }
21967
+ },
21351
21968
  style: {
21352
21969
  minHeight: "clamp(18rem, 36vw, 34rem)"
21353
21970
  }
@@ -21465,6 +22082,12 @@ var heroConfig = {
21465
22082
  label: "Content card",
21466
22083
  renderInHeader: true,
21467
22084
  intent: "style"
22085
+ }),
22086
+ createImageShapeField({
22087
+ id: "imageShape",
22088
+ label: "Image shape",
22089
+ defaultValue: "default",
22090
+ uiIntent: "display"
21468
22091
  })
21469
22092
  ],
21470
22093
  layout: classicLayout,
@@ -21479,6 +22102,15 @@ var heroConfig = {
21479
22102
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
21480
22103
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
21481
22104
  icon: "Sparkles",
22105
+ previewCustomize: {
22106
+ quickFieldPriority: [
22107
+ "titleSize",
22108
+ "contentAlignment",
22109
+ "contentMaxWidth",
22110
+ "verticalAlignment",
22111
+ "imageShape"
22112
+ ]
22113
+ },
21482
22114
  styleTokens: {
21483
22115
  typography: "display",
21484
22116
  spacing: "xl"
@@ -21495,7 +22127,8 @@ var standardAspectRatioOptions = [
21495
22127
  { value: "16/9", label: "16:9 (Landscape)" },
21496
22128
  { value: "4/3", label: "4:3 (Standard)" },
21497
22129
  { value: "1/1", label: "1:1 (Square)" },
21498
- { value: "3/4", label: "3:4 (Portrait)" }
22130
+ { value: "3/4", label: "3:4 (Portrait)" },
22131
+ { value: "9/16", label: "9:16 (Tall portrait)" }
21499
22132
  ];
21500
22133
  function createAspectRatioField(options = {}) {
21501
22134
  return {
@@ -22715,6 +23348,258 @@ var formBlockDefinition = {
22715
23348
  runtime: formBlockRuntime
22716
23349
  };
22717
23350
 
23351
+ // ../blocks/src/system/blocks/contact-newsletter.ts
23352
+ var contactNewsletterLayout = styledSection({
23353
+ children: sectionContainer([
23354
+ el(
23355
+ "div",
23356
+ { className: "contact-newsletter-grid" },
23357
+ [
23358
+ el(
23359
+ "div",
23360
+ { className: "contact-newsletter-column contact-newsletter-contact" },
23361
+ [
23362
+ el(
23363
+ "div",
23364
+ { className: "contact-newsletter-copy" },
23365
+ [
23366
+ text(
23367
+ {
23368
+ as: "h2",
23369
+ className: "form-copy-title"
23370
+ },
23371
+ when("contactTitle"),
23372
+ bind("contactTitle")
23373
+ ),
23374
+ richText(
23375
+ {
23376
+ className: "form-copy-intro rb-prose rb-max-w-none"
23377
+ },
23378
+ when("contactIntro"),
23379
+ bind("contactIntro")
23380
+ )
23381
+ ]
23382
+ ),
23383
+ el(
23384
+ "form",
23385
+ withApiBindings({
23386
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
23387
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
23388
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
23389
+ }),
23390
+ [],
23391
+ bind("data.form")
23392
+ )
23393
+ ]
23394
+ ),
23395
+ el(
23396
+ "div",
23397
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
23398
+ [
23399
+ el(
23400
+ "div",
23401
+ { className: "contact-newsletter-copy" },
23402
+ [
23403
+ text(
23404
+ {
23405
+ as: "h2",
23406
+ className: "newsletter-copy-title"
23407
+ },
23408
+ when("newsletterTitle"),
23409
+ bind("newsletterTitle")
23410
+ ),
23411
+ richText(
23412
+ {
23413
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
23414
+ },
23415
+ when("newsletterSubtitle"),
23416
+ bind("newsletterSubtitle")
23417
+ )
23418
+ ]
23419
+ ),
23420
+ el(
23421
+ "newsletter-form",
23422
+ withApiBindings({
23423
+ listId: { $bind: { from: "listId" } },
23424
+ preset: { $bind: { from: "preset" } },
23425
+ includePhone: { $bind: { from: "includePhone" } },
23426
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
23427
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
23428
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
23429
+ tags: { $bind: { from: "newsletterTags" } },
23430
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
23431
+ }),
23432
+ []
23433
+ )
23434
+ ]
23435
+ )
23436
+ ]
23437
+ )
23438
+ ], {
23439
+ className: "contact-newsletter-container"
23440
+ }),
23441
+ baseClass: "",
23442
+ spacing: "medium",
23443
+ background: "surface"
23444
+ });
23445
+ var contactNewsletterManifest = createBlockManifest({
23446
+ id: "block.contact-newsletter",
23447
+ title: "Contact + Newsletter",
23448
+ titleSource: "contactTitle",
23449
+ description: "Two-column newsletter signup and contact form section.",
23450
+ category: "interactive",
23451
+ layout: contactNewsletterLayout,
23452
+ defaultVariant: "default",
23453
+ variants: {
23454
+ default: contactNewsletterLayout
23455
+ },
23456
+ variantOptions: {
23457
+ default: {
23458
+ label: "Two column",
23459
+ description: "Newsletter and contact form side by side.",
23460
+ icon: "Columns2"
23461
+ }
23462
+ },
23463
+ additionalFields: [
23464
+ {
23465
+ id: "newsletterTitle",
23466
+ type: "text",
23467
+ label: "Newsletter title",
23468
+ defaultValue: "Stay connected"
23469
+ },
23470
+ {
23471
+ id: "newsletterSubtitle",
23472
+ type: "richText",
23473
+ label: "Newsletter intro"
23474
+ },
23475
+ {
23476
+ id: "listId",
23477
+ type: "reference",
23478
+ label: "Newsletter list",
23479
+ description: "Select the list new subscribers should be added to.",
23480
+ required: true,
23481
+ referenceKind: "newsletterList",
23482
+ allowManualEntry: false,
23483
+ ui: { intent: "behavior" }
23484
+ },
23485
+ {
23486
+ id: "preset",
23487
+ type: "select",
23488
+ label: "Newsletter fields",
23489
+ defaultValue: "emailOnly",
23490
+ ui: { intent: "display" },
23491
+ options: [
23492
+ { value: "emailOnly", label: "Email only" },
23493
+ { value: "emailName", label: "Email + Name" },
23494
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
23495
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
23496
+ ]
23497
+ },
23498
+ {
23499
+ id: "includePhone",
23500
+ type: "boolean",
23501
+ label: "Include phone field",
23502
+ defaultValue: false,
23503
+ ui: { intent: "display" }
23504
+ },
23505
+ {
23506
+ id: "newsletterButtonLabel",
23507
+ type: "text",
23508
+ label: "Newsletter button label",
23509
+ defaultValue: "Subscribe",
23510
+ ui: { intent: "display" }
23511
+ },
23512
+ {
23513
+ id: "newsletterSuccessMessage",
23514
+ type: "text",
23515
+ label: "Newsletter success message",
23516
+ defaultValue: "Thanks for subscribing!",
23517
+ ui: { intent: "behavior" }
23518
+ },
23519
+ {
23520
+ id: "newsletterPrivacyNote",
23521
+ type: "text",
23522
+ label: "Privacy note",
23523
+ ui: { intent: "display" }
23524
+ },
23525
+ {
23526
+ id: "newsletterTags",
23527
+ type: "text",
23528
+ label: "Newsletter tags",
23529
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
23530
+ ui: { intent: "behavior" }
23531
+ },
23532
+ {
23533
+ id: "contactTitle",
23534
+ type: "text",
23535
+ label: "Contact title",
23536
+ defaultValue: "Get in touch"
23537
+ },
23538
+ {
23539
+ id: "contactIntro",
23540
+ type: "richText",
23541
+ label: "Contact intro"
23542
+ },
23543
+ {
23544
+ id: "formSlug",
23545
+ type: "reference",
23546
+ label: "Contact form",
23547
+ description: "Pick a saved form to render.",
23548
+ required: true,
23549
+ referenceKind: "form",
23550
+ allowManualEntry: false,
23551
+ ui: { intent: "behavior" }
23552
+ },
23553
+ {
23554
+ id: "contactSubmitLabel",
23555
+ type: "text",
23556
+ label: "Contact button label",
23557
+ defaultValue: "Send message",
23558
+ ui: { intent: "display" }
23559
+ },
23560
+ {
23561
+ id: "contactSuccessMessage",
23562
+ type: "text",
23563
+ label: "Contact success message",
23564
+ defaultValue: "Thanks - we received your message.",
23565
+ ui: { intent: "behavior" }
23566
+ }
23567
+ ],
23568
+ styleTokens: {
23569
+ background: "surface",
23570
+ typography: "body",
23571
+ spacing: "md"
23572
+ },
23573
+ behaviours: {
23574
+ supportsThemeSwitching: true,
23575
+ inlineEditing: true,
23576
+ animation: false,
23577
+ paletteHidden: false
23578
+ },
23579
+ tags: [
23580
+ "contact",
23581
+ "newsletter",
23582
+ "signup",
23583
+ "email",
23584
+ "form",
23585
+ "lead-capture"
23586
+ ],
23587
+ icon: "MailPlus"
23588
+ });
23589
+ var contactNewsletterBlockDefinition = {
23590
+ manifest: contactNewsletterManifest,
23591
+ dataSchemas: { form: formDataSchema.optional() },
23592
+ dataLoaders: {
23593
+ form: {
23594
+ endpoint: "getPublicFormById",
23595
+ params: {
23596
+ formSlug: { $bind: { from: "formSlug" } }
23597
+ },
23598
+ mode: "server"
23599
+ }
23600
+ }
23601
+ };
23602
+
22718
23603
  // ../blocks/src/system/blocks/faq.ts
22719
23604
  function fragmentLayoutNode2(layout) {
22720
23605
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -22943,6 +23828,7 @@ var joinClasses3 = (parts) => parts.filter(
22943
23828
  ).join(" ").replace(/\s+/g, " ").trim();
22944
23829
  var eyebrowTreatmentClassMap = {
22945
23830
  plain: "",
23831
+ accent: "rb-eyebrow-treatment-accent",
22946
23832
  pill: "rb-eyebrow-treatment-pill",
22947
23833
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
22948
23834
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -22969,6 +23855,13 @@ var imageGalleryCornerClassMap = {
22969
23855
  "2xl": "rb-rounded-2xl",
22970
23856
  "3xl": "rb-rounded-3xl"
22971
23857
  };
23858
+ var imageShapeClassMap = {
23859
+ default: "",
23860
+ square: "rb-media-shape-square",
23861
+ rounded: "rb-media-shape-rounded",
23862
+ circle: "rb-media-shape-circle",
23863
+ arch: "rb-media-shape-arch"
23864
+ };
22972
23865
  var parseRatio = (raw) => {
22973
23866
  if (typeof raw !== "string") return null;
22974
23867
  const value = raw.trim();
@@ -23113,6 +24006,10 @@ function resolveHeroContentMaxWidth(content) {
23113
24006
  return "default";
23114
24007
  }
23115
24008
  function resolveHeroTypographyScale(content) {
24009
+ const titleSize = readString(content, "titleSize");
24010
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
24011
+ return titleSize;
24012
+ }
23116
24013
  const raw = readHeroLayoutString(
23117
24014
  content,
23118
24015
  "typographyScale",
@@ -23354,6 +24251,16 @@ var uiTransforms = [
23354
24251
  heroGridClassFromVerticalAlignmentTransform,
23355
24252
  imageFragmentClassTransform,
23356
24253
  imageFragmentSizeTransform,
24254
+ {
24255
+ id: "ui.imageShapeClassName",
24256
+ kind: "string",
24257
+ summary: "Apply a constrained media shape class",
24258
+ run: (value, options) => {
24259
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
24260
+ const shape = typeof value === "string" ? value.trim() : "default";
24261
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
24262
+ }
24263
+ },
23357
24264
  conditionalClassTransform,
23358
24265
  twoColumnContainerClassTransform,
23359
24266
  twoColumnFlexBasisTransform,
@@ -24697,6 +25604,21 @@ var siteHeaderManifest = createBlockManifest({
24697
25604
  id: "block.site-header",
24698
25605
  title: "Site Header",
24699
25606
  category: "layout",
25607
+ additionalFields: [
25608
+ {
25609
+ id: "mode",
25610
+ type: "select",
25611
+ label: "Header display",
25612
+ required: false,
25613
+ multiple: false,
25614
+ defaultValue: "default",
25615
+ options: [
25616
+ { value: "default", label: "Show header" },
25617
+ { value: "hidden", label: "Hide header" }
25618
+ ],
25619
+ ui: { intent: "display" }
25620
+ }
25621
+ ],
24700
25622
  // Skip section styles - this block uses theme-based styling
24701
25623
  skipSectionStyles: true,
24702
25624
  // Block manages its own wrapper - enables sticky positioning
@@ -26099,6 +27021,9 @@ var mediaTextManifest = createBlockManifest({
26099
27021
  category: "layout",
26100
27022
  includeContainerStyles: true,
26101
27023
  titleSource: "title",
27024
+ previewCustomize: {
27025
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
27026
+ },
26102
27027
  additionalFields: [
26103
27028
  {
26104
27029
  id: "images",
@@ -26137,7 +27062,7 @@ var mediaTextManifest = createBlockManifest({
26137
27062
  {
26138
27063
  id: "titleAlignment",
26139
27064
  type: "select",
26140
- label: "Title alignment",
27065
+ label: "Content alignment",
26141
27066
  required: false,
26142
27067
  defaultValue: "left",
26143
27068
  multiple: false,
@@ -26195,7 +27120,18 @@ var mediaTextManifest = createBlockManifest({
26195
27120
  transition: "slide"
26196
27121
  },
26197
27122
  ui: { intent: "behavior" }
26198
- }),
27123
+ }).map((field) => ({
27124
+ ...field,
27125
+ ui: {
27126
+ ...field.ui ?? {},
27127
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
27128
+ allOf: [
27129
+ { field: "images", minItems: 2 },
27130
+ { field: "carouselAutoplay", equals: true }
27131
+ ]
27132
+ } : { field: "images", minItems: 2 }
27133
+ }
27134
+ })),
26199
27135
  createAspectRatioField({
26200
27136
  id: "aspectRatio",
26201
27137
  label: "Media aspect ratio",
@@ -26203,6 +27139,12 @@ var mediaTextManifest = createBlockManifest({
26203
27139
  defaultValue: "auto",
26204
27140
  visibleWhen: { field: "images", notEquals: null }
26205
27141
  }),
27142
+ createImageShapeField({
27143
+ id: "imageShape",
27144
+ label: "Media shape",
27145
+ defaultValue: "default",
27146
+ visibleWhen: { field: "images", notEquals: null }
27147
+ }),
26206
27148
  {
26207
27149
  id: "text",
26208
27150
  type: "richText",
@@ -26236,6 +27178,30 @@ var mediaTextManifest = createBlockManifest({
26236
27178
  ...options?.not ? { not: true } : {}
26237
27179
  }
26238
27180
  });
27181
+ const bodyClassNameFromAlignment = {
27182
+ $bind: {
27183
+ from: "content.titleAlignment",
27184
+ transforms: [
27185
+ {
27186
+ id: "ui.bodyClassFromAlignment",
27187
+ options: { base: "rb-prose rb-max-w-none" }
27188
+ }
27189
+ ],
27190
+ fallback: "rb-prose rb-max-w-none"
27191
+ }
27192
+ };
27193
+ const titleClassNameFromAlignment = {
27194
+ $bind: {
27195
+ from: "content.titleAlignment",
27196
+ transforms: [
27197
+ {
27198
+ id: "ui.headingClassFromAlignment",
27199
+ options: { base: "" }
27200
+ }
27201
+ ],
27202
+ fallback: ""
27203
+ }
27204
+ };
26239
27205
  const defaultTextColumn = el("div", {}, [
26240
27206
  styledCard(
26241
27207
  [
@@ -26260,8 +27226,55 @@ var mediaTextManifest = createBlockManifest({
26260
27226
  bind("content.text")
26261
27227
  )
26262
27228
  ]);
27229
+ const bioTextColumn = el(
27230
+ "div",
27231
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
27232
+ [
27233
+ text(
27234
+ {
27235
+ as: "h2",
27236
+ className: titleClassNameFromAlignment
27237
+ },
27238
+ when("content.title"),
27239
+ bind("content.title")
27240
+ ),
27241
+ styledCard(
27242
+ [
27243
+ richText(
27244
+ {
27245
+ className: bodyClassNameFromAlignment
27246
+ },
27247
+ bind("content.text")
27248
+ )
27249
+ ],
27250
+ {
27251
+ stylesFrom: "content._textCardStyles",
27252
+ backgroundFrom: "content._textCardStyles.background"
27253
+ },
27254
+ when("content.wrapTextInCard")
27255
+ ),
27256
+ richText(
27257
+ {
27258
+ className: bodyClassNameFromAlignment
27259
+ },
27260
+ when("content.wrapTextInCard", { not: true }),
27261
+ bind("content.text")
27262
+ )
27263
+ ]
27264
+ );
26263
27265
  const defaultImageCommonProps = {
26264
- className: "rb-w-full rb-h-auto rb-object-cover",
27266
+ className: {
27267
+ $bind: {
27268
+ from: "content.imageShape",
27269
+ transforms: [
27270
+ {
27271
+ id: "ui.imageShapeClassName",
27272
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
27273
+ }
27274
+ ],
27275
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
27276
+ }
27277
+ },
26265
27278
  style: {
26266
27279
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
26267
27280
  }
@@ -26302,6 +27315,27 @@ var mediaTextManifest = createBlockManifest({
26302
27315
  ],
26303
27316
  whenImagesLength(0, { not: true })
26304
27317
  );
27318
+ const bioImagesLayout = el(
27319
+ "div",
27320
+ {},
27321
+ [
27322
+ responsiveTwoColumn({
27323
+ image: el("div", {}, [
27324
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
27325
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
27326
+ ]),
27327
+ text: bioTextColumn,
27328
+ ratioFrom: "content.ratio",
27329
+ imagePositionFrom: "content.imagePosition",
27330
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
27331
+ gapFrom: "content.gap",
27332
+ gapFallback: "comfortable",
27333
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
27334
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
27335
+ })
27336
+ ],
27337
+ whenImagesLength(0, { not: true })
27338
+ );
26305
27339
  const defaultTextOnlyLayout = el(
26306
27340
  "div",
26307
27341
  {},
@@ -26331,7 +27365,45 @@ var mediaTextManifest = createBlockManifest({
26331
27365
  ],
26332
27366
  whenImagesLength(0)
26333
27367
  );
27368
+ const bioTextOnlyLayout = el(
27369
+ "div",
27370
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
27371
+ [
27372
+ text(
27373
+ {
27374
+ as: "h2",
27375
+ className: titleClassNameFromAlignment
27376
+ },
27377
+ when("content.title"),
27378
+ bind("content.title")
27379
+ ),
27380
+ styledCard(
27381
+ [
27382
+ richText(
27383
+ {
27384
+ className: bodyClassNameFromAlignment
27385
+ },
27386
+ bind("content.text")
27387
+ )
27388
+ ],
27389
+ {
27390
+ stylesFrom: "content._textCardStyles",
27391
+ backgroundFrom: "content._textCardStyles.background"
27392
+ },
27393
+ when("content.wrapTextInCard")
27394
+ ),
27395
+ richText(
27396
+ {
27397
+ className: bodyClassNameFromAlignment
27398
+ },
27399
+ when("content.wrapTextInCard", { not: true }),
27400
+ bind("content.text")
27401
+ )
27402
+ ],
27403
+ whenImagesLength(0)
27404
+ );
26334
27405
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
27406
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
26335
27407
  const defaultLayout2 = styledSection({
26336
27408
  children: styledContainer({
26337
27409
  rootType: "stack",
@@ -26340,18 +27412,7 @@ var mediaTextManifest = createBlockManifest({
26340
27412
  text(
26341
27413
  {
26342
27414
  as: "h2",
26343
- className: {
26344
- $bind: {
26345
- from: "content.titleAlignment",
26346
- transforms: [
26347
- {
26348
- id: "ui.headingClassFromAlignment",
26349
- options: { base: "" }
26350
- }
26351
- ],
26352
- fallback: ""
26353
- }
26354
- }
27415
+ className: titleClassNameFromAlignment
26355
27416
  },
26356
27417
  when("content.title"),
26357
27418
  bind("content.title")
@@ -26363,14 +27424,28 @@ var mediaTextManifest = createBlockManifest({
26363
27424
  baseClass: "",
26364
27425
  spacing: "medium"
26365
27426
  });
27427
+ const bioLayout = styledSection({
27428
+ children: styledContainer({
27429
+ rootType: "stack",
27430
+ rootProps: { gap: "lg" },
27431
+ children: [bioInner]
27432
+ }),
27433
+ baseClass: "",
27434
+ spacing: "medium"
27435
+ });
26366
27436
  return {
26367
27437
  layout: defaultLayout2,
26368
27438
  variants: {
26369
- default: defaultLayout2
27439
+ default: defaultLayout2,
27440
+ bio: bioLayout
26370
27441
  },
26371
27442
  defaultVariant: "default",
26372
27443
  variantOptions: {
26373
- default: { label: "Default" }
27444
+ default: { label: "Default" },
27445
+ bio: {
27446
+ label: "Bio",
27447
+ description: "Vertically centered title and copy beside media."
27448
+ }
26374
27449
  }
26375
27450
  };
26376
27451
  })(),
@@ -27076,6 +28151,126 @@ var occurrenceContextSchema = z43.object({
27076
28151
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
27077
28152
  import { z as z45 } from "zod";
27078
28153
 
28154
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
28155
+ var DEFAULT_EVENT_CURRENCY = "USD";
28156
+ function resolveRuntimeEventPricing(event) {
28157
+ if (isPublicEventPricing(event.pricing)) {
28158
+ return event.pricing;
28159
+ }
28160
+ const legacy = event;
28161
+ const currency = readCurrency(legacy.currency);
28162
+ if (event.requiresRegistration === false) {
28163
+ return {
28164
+ kind: "drop_in",
28165
+ currency,
28166
+ display: { kind: "free", currency }
28167
+ };
28168
+ }
28169
+ if (legacy.pricingMode === "ticket_types") {
28170
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
28171
+ return {
28172
+ kind: "ticket_types",
28173
+ currency,
28174
+ ticketTypes,
28175
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
28176
+ };
28177
+ }
28178
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
28179
+ if (legacy.pricingType === "paid" && amount > 0) {
28180
+ return {
28181
+ kind: "single_paid",
28182
+ amount,
28183
+ currency,
28184
+ display: { kind: "exact", amount, currency }
28185
+ };
28186
+ }
28187
+ return {
28188
+ kind: "free_registration",
28189
+ currency,
28190
+ display: { kind: "free", currency }
28191
+ };
28192
+ }
28193
+ function readCurrency(value) {
28194
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
28195
+ }
28196
+ function isRecord3(value) {
28197
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28198
+ }
28199
+ function isPublicEventPricing(value) {
28200
+ if (!isRecord3(value) || typeof value.kind !== "string") return false;
28201
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
28202
+ }
28203
+ function isPublicEventTicketType(value) {
28204
+ return isRecord3(value) && typeof value.id === "string";
28205
+ }
28206
+ function readTicketTypePriceDisplay(value, currency) {
28207
+ const display = readLegacyPriceDisplay(value, currency);
28208
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
28209
+ }
28210
+ function readLegacyPriceDisplay(value, currency) {
28211
+ if (!isRecord3(value) || typeof value.kind !== "string") {
28212
+ return { kind: "unavailable", currency };
28213
+ }
28214
+ const displayCurrency = readCurrency(value.currency);
28215
+ switch (value.kind) {
28216
+ case "free":
28217
+ return { kind: "free", currency: displayCurrency };
28218
+ case "exact":
28219
+ return readAmount(value.amount) !== null ? {
28220
+ kind: "exact",
28221
+ amount: readAmount(value.amount) ?? 0,
28222
+ currency: displayCurrency
28223
+ } : { kind: "unavailable", currency };
28224
+ case "from":
28225
+ return readAmount(value.amount) !== null ? {
28226
+ kind: "from",
28227
+ amount: readAmount(value.amount) ?? 0,
28228
+ currency: displayCurrency
28229
+ } : { kind: "unavailable", currency };
28230
+ case "mixed":
28231
+ return readAmount(value.paidFromAmount) !== null ? {
28232
+ kind: "mixed",
28233
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
28234
+ currency: displayCurrency
28235
+ } : { kind: "unavailable", currency };
28236
+ case "unavailable":
28237
+ return { kind: "unavailable", currency: displayCurrency };
28238
+ case "course":
28239
+ return isRecord3(value.display) ? {
28240
+ kind: "course",
28241
+ display: readCoursePriceDisplay(value.display, displayCurrency)
28242
+ } : {
28243
+ kind: "course",
28244
+ display: { kind: "unavailable", currency: displayCurrency }
28245
+ };
28246
+ default:
28247
+ return { kind: "unavailable", currency };
28248
+ }
28249
+ }
28250
+ function readCoursePriceDisplay(value, currency) {
28251
+ switch (value.kind) {
28252
+ case "free":
28253
+ return { kind: "free", currency: readCurrency(value.currency) };
28254
+ case "exact":
28255
+ return readAmount(value.amount) !== null ? {
28256
+ kind: "exact",
28257
+ amount: readAmount(value.amount) ?? 0,
28258
+ currency: readCurrency(value.currency)
28259
+ } : { kind: "unavailable", currency };
28260
+ case "from":
28261
+ return readAmount(value.amount) !== null ? {
28262
+ kind: "from",
28263
+ amount: readAmount(value.amount) ?? 0,
28264
+ currency: readCurrency(value.currency)
28265
+ } : { kind: "unavailable", currency };
28266
+ default:
28267
+ return { kind: "unavailable", currency };
28268
+ }
28269
+ }
28270
+ function readAmount(value) {
28271
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
28272
+ }
28273
+
27079
28274
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
27080
28275
  import { z as z44 } from "zod";
27081
28276
 
@@ -27106,11 +28301,21 @@ var filterAutoShowSchema = z44.enum(["auto", "always", "never"]);
27106
28301
  var calendarTabViewsSchema = z44.enum(["both", "month", "week"]);
27107
28302
 
27108
28303
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28304
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
28305
+ var [
28306
+ eventRegistrationGenericDateStepLabel,
28307
+ eventRegistrationGenericTicketsStepLabel,
28308
+ eventRegistrationGenericDetailsStepLabel
28309
+ ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
27109
28310
  var contentEntrySchema = z45.object({
27110
28311
  id: z45.string(),
27111
28312
  slug: z45.string(),
27112
28313
  contentTypeSlug: z45.string()
27113
28314
  });
28315
+ var eventRegistrationPublicEventSchema = z45.preprocess(
28316
+ normalizeEventRegistrationEventInput,
28317
+ publicEventSchema
28318
+ );
27114
28319
  var eventRegistrationSourceSchema = z45.object({
27115
28320
  siteId: z45.string().optional(),
27116
28321
  apiBaseUrl: z45.string().optional(),
@@ -27118,7 +28323,7 @@ var eventRegistrationSourceSchema = z45.object({
27118
28323
  previewToken: z45.string().nullable().optional(),
27119
28324
  occurrenceContext: occurrenceContextSchema.optional(),
27120
28325
  contentEntry: contentEntrySchema.nullable().optional(),
27121
- events: z45.array(publicEventSchema).nullable().optional(),
28326
+ events: z45.array(eventRegistrationPublicEventSchema).nullable().optional(),
27122
28327
  className: z45.string().nullable().optional(),
27123
28328
  buttonText: z45.string().nullable().optional(),
27124
28329
  maxTickets: z45.string().nullable().optional(),
@@ -27133,14 +28338,21 @@ var eventRegistrationSourceSchema = z45.object({
27133
28338
  });
27134
28339
  var eventRegistrationDisplaySchema = z45.object({
27135
28340
  kind: z45.literal("event-registration"),
27136
- state: z45.literal("shell"),
28341
+ state: z45.literal("generic-shell"),
27137
28342
  className: z45.string().nullable(),
28343
+ titleText: z45.string(),
28344
+ bodyText: z45.string(),
28345
+ stepLabels: z45.tuple([
28346
+ z45.literal(eventRegistrationGenericDateStepLabel),
28347
+ z45.literal(eventRegistrationGenericTicketsStepLabel),
28348
+ z45.literal(eventRegistrationGenericDetailsStepLabel)
28349
+ ]),
27138
28350
  summaryButtonText: z45.string()
27139
28351
  });
27140
28352
  var eventRegistrationHydrationSchema = z45.object({
27141
28353
  occurrenceContext: occurrenceContextSchema.optional(),
27142
28354
  contentEntry: contentEntrySchema.nullable().optional(),
27143
- events: z45.array(publicEventSchema).nullable().optional(),
28355
+ events: z45.array(eventRegistrationPublicEventSchema).nullable().optional(),
27144
28356
  maxTickets: z45.string().optional(),
27145
28357
  showVenue: z45.boolean().optional(),
27146
28358
  showCapacity: z45.boolean().optional(),
@@ -27171,8 +28383,11 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
27171
28383
  function buildEventRegistrationDisplay(source) {
27172
28384
  return {
27173
28385
  kind: "event-registration",
27174
- state: "shell",
28386
+ state: "generic-shell",
27175
28387
  className: source.className ?? null,
28388
+ titleText: "Event registration",
28389
+ bodyText: "Preparing dates, tickets, and booking details.",
28390
+ stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
27176
28391
  summaryButtonText: source.buttonText?.trim() || "Register"
27177
28392
  };
27178
28393
  }
@@ -27199,6 +28414,18 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
27199
28414
  }
27200
28415
  })
27201
28416
  });
28417
+ function normalizeEventRegistrationEventInput(value) {
28418
+ if (!isRecord4(value)) {
28419
+ return value;
28420
+ }
28421
+ return {
28422
+ ...value,
28423
+ pricing: resolveRuntimeEventPricing(value)
28424
+ };
28425
+ }
28426
+ function isRecord4(value) {
28427
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28428
+ }
27202
28429
  var eventRegistrationInteractiveIslandPropsCodec = createInteractiveIslandCodec({
27203
28430
  runtime: eventRegistrationBlockRuntime,
27204
28431
  mode: "event-registration",
@@ -29697,7 +30924,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
29697
30924
  return keys.length >= 2 ? keys : [];
29698
30925
  }
29699
30926
  function normalizeOfferingsPreviewContentForWrite(value) {
29700
- if (!isRecord3(value)) return null;
30927
+ if (!isRecord5(value)) return null;
29701
30928
  const groupOrderValue = value.groupOrder;
29702
30929
  if (Array.isArray(groupOrderValue)) {
29703
30930
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -29710,7 +30937,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
29710
30937
  return { ...value, groupOrder: [] };
29711
30938
  }
29712
30939
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
29713
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord3) : []
30940
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
29714
30941
  );
29715
30942
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
29716
30943
  }
@@ -29724,7 +30951,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
29724
30951
  }
29725
30952
  return keys;
29726
30953
  }
29727
- function isRecord3(value) {
30954
+ function isRecord5(value) {
29728
30955
  return typeof value === "object" && value !== null && !Array.isArray(value);
29729
30956
  }
29730
30957
 
@@ -30091,7 +31318,7 @@ function isOfferingsPreviewItemLimit(value) {
30091
31318
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
30092
31319
  }
30093
31320
  function normalizeOfferingsPreviewGroupOverride(value) {
30094
- if (!isRecord4(value)) return [];
31321
+ if (!isRecord6(value)) return [];
30095
31322
  const override = {};
30096
31323
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
30097
31324
  override.sourceKey = value.sourceKey;
@@ -30123,12 +31350,12 @@ function isButtonVariant(value) {
30123
31350
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
30124
31351
  }
30125
31352
  function normalizeCardStylesContent(value) {
30126
- return isRecord4(value) || value === null ? value : void 0;
31353
+ return isRecord6(value) || value === null ? value : void 0;
30127
31354
  }
30128
31355
  function normalizeSectionStylesContent(value) {
30129
- return isRecord4(value) || value === null ? value : void 0;
31356
+ return isRecord6(value) || value === null ? value : void 0;
30130
31357
  }
30131
- function isRecord4(value) {
31358
+ function isRecord6(value) {
30132
31359
  return typeof value === "object" && value !== null && !Array.isArray(value);
30133
31360
  }
30134
31361
 
@@ -34088,11 +35315,13 @@ var heroImageSurfaceMotions = [
34088
35315
  ];
34089
35316
  var standardEyebrowTreatments = [
34090
35317
  "plain",
35318
+ "accent",
34091
35319
  "pill",
34092
35320
  "accent-pill"
34093
35321
  ];
34094
35322
  var animatedEyebrowTreatments = [
34095
35323
  "plain",
35324
+ "accent",
34096
35325
  "pill",
34097
35326
  "accent-pill",
34098
35327
  "pill-bounce",
@@ -34393,6 +35622,17 @@ var systemBlockDefinitionsRaw = [
34393
35622
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
34394
35623
  ]
34395
35624
  })),
35625
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
35626
+ flow: conversionFlow,
35627
+ layoutProfiles: [
35628
+ layoutProfile({
35629
+ variantKey: "default",
35630
+ family: "split",
35631
+ weight: "featured",
35632
+ bias: "soft"
35633
+ })
35634
+ ]
35635
+ })),
34396
35636
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
34397
35637
  sectionSurfaces: "supported",
34398
35638
  contentFrames: ["plain", "panel"],
@@ -34484,6 +35724,12 @@ var systemBlockDefinitionsRaw = [
34484
35724
  family: "media-text",
34485
35725
  weight: "featured",
34486
35726
  bias: "soft"
35727
+ }),
35728
+ layoutProfile({
35729
+ variantKey: "bio",
35730
+ family: "media-text",
35731
+ weight: "featured",
35732
+ bias: "soft"
34487
35733
  })
34488
35734
  ]
34489
35735
  })),
@@ -35516,6 +36762,11 @@ ${root} {
35516
36762
  --er-event-card-bg: rgb(var(--tb-surface));
35517
36763
  --er-event-card-border-width: var(--rb-border-width, 1px);
35518
36764
  --er-event-card-hover-opacity: 1;
36765
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
36766
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
36767
+ --er-radius: var(--rb-block-radius);
36768
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
36769
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
35519
36770
 
35520
36771
  /* Step indicator */
35521
36772
  --er-step-active: rgb(var(--tb-primary));
@@ -36747,7 +37998,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
36747
37998
  }
36748
37999
 
36749
38000
  // ../api/src/utils/isRecord.ts
36750
- function isRecord5(value) {
38001
+ function isRecord7(value) {
36751
38002
  return typeof value === "object" && value !== null && !Array.isArray(value);
36752
38003
  }
36753
38004
 
@@ -37054,7 +38305,7 @@ function sanitizeMarks(marks) {
37054
38305
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
37055
38306
  return [{ type: mark.type }];
37056
38307
  }
37057
- if (mark.type === "link" && isRecord5(mark.attrs) && typeof mark.attrs.href === "string") {
38308
+ if (mark.type === "link" && isRecord7(mark.attrs) && typeof mark.attrs.href === "string") {
37058
38309
  const attrs = { href: mark.attrs.href };
37059
38310
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
37060
38311
  attrs.target = mark.attrs.target;
@@ -37069,10 +38320,10 @@ function sanitizeMarks(marks) {
37069
38320
  return sanitized.length > 0 ? sanitized : void 0;
37070
38321
  }
37071
38322
  function unwrapRichTextValue(value) {
37072
- if (isRecord5(value) && isRecord5(value.doc)) {
38323
+ if (isRecord7(value) && isRecord7(value.doc)) {
37073
38324
  return unwrapRichTextValue(value.doc);
37074
38325
  }
37075
- if (isRecord5(value) && value.type === "doc") {
38326
+ if (isRecord7(value) && value.type === "doc") {
37076
38327
  return {
37077
38328
  type: "doc",
37078
38329
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -37081,7 +38332,7 @@ function unwrapRichTextValue(value) {
37081
38332
  return EMPTY_SITE_BANNER_BODY;
37082
38333
  }
37083
38334
  function isTipTapNodeLike(value) {
37084
- return isRecord5(value) && typeof value.type === "string";
38335
+ return isRecord7(value) && typeof value.type === "string";
37085
38336
  }
37086
38337
  function coerceTipTapNode(value) {
37087
38338
  return {
@@ -37089,9 +38340,9 @@ function coerceTipTapNode(value) {
37089
38340
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
37090
38341
  ...typeof value.text === "string" ? { text: value.text } : {},
37091
38342
  ...Array.isArray(value.marks) ? {
37092
- marks: value.marks.filter((mark) => isRecord5(mark) && typeof mark.type === "string").map((mark) => ({
38343
+ marks: value.marks.filter((mark) => isRecord7(mark) && typeof mark.type === "string").map((mark) => ({
37093
38344
  type: mark.type,
37094
- ...isRecord5(mark.attrs) ? { attrs: mark.attrs } : {}
38345
+ ...isRecord7(mark.attrs) ? { attrs: mark.attrs } : {}
37095
38346
  }))
37096
38347
  } : {}
37097
38348
  };
@@ -37185,7 +38436,7 @@ function collectCartLinkStats(items, depth = 0) {
37185
38436
  return result;
37186
38437
  }
37187
38438
  function isNavigationMenuValidationItem(value) {
37188
- if (!isRecord5(value)) return false;
38439
+ if (!isRecord7(value)) return false;
37189
38440
  return typeof value.label === "string";
37190
38441
  }
37191
38442
 
@@ -37324,6 +38575,7 @@ var SYSTEM_BLOCK_KINDS = [
37324
38575
  "block.site-footer",
37325
38576
  // Form/booking blocks
37326
38577
  "block.form",
38578
+ "block.contact-newsletter",
37327
38579
  "block.appointment-booking",
37328
38580
  "block.event-registration",
37329
38581
  "block.event-details",