@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
@@ -3291,6 +3291,46 @@ var ENDPOINT_DEFINITIONS = {
3291
3291
  auth: "user",
3292
3292
  responseKind: "json"
3293
3293
  },
3294
+ listEntrySlotBlocks: {
3295
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3296
+ method: "GET",
3297
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3298
+ auth: "user",
3299
+ responseKind: "json",
3300
+ errors: ["resource:not_found"]
3301
+ },
3302
+ listEntryPageContentSlots: {
3303
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
3304
+ method: "GET",
3305
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
3306
+ auth: "user",
3307
+ responseKind: "json",
3308
+ errors: ["resource:not_found"]
3309
+ },
3310
+ createEntrySlotBlock: {
3311
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3312
+ method: "POST",
3313
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3314
+ auth: "user",
3315
+ responseKind: "json",
3316
+ errors: ["validation:invalid_input", "resource:not_found"]
3317
+ },
3318
+ reorderEntrySlotBlocks: {
3319
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
3320
+ method: "POST",
3321
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3322
+ auth: "user",
3323
+ responseKind: "json",
3324
+ errors: ["validation:invalid_input", "resource:not_found"]
3325
+ },
3326
+ deleteEntrySlotBlock: {
3327
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
3328
+ method: "DELETE",
3329
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3330
+ auth: "user",
3331
+ responseKind: "json",
3332
+ errors: ["resource:not_found"]
3333
+ },
3294
3334
  createBlock: {
3295
3335
  path: "/sites/{siteId}/pages/{pageId}/blocks",
3296
3336
  method: "POST",
@@ -6927,6 +6967,21 @@ var selectSourceSchema = z4.discriminatedUnion("kind", [
6927
6967
  function assertNeverSelectSource(value) {
6928
6968
  throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
6929
6969
  }
6970
+ var visibleWhenPredicateSchema = z4.object({
6971
+ field: z4.string().min(1),
6972
+ equals: z4.any().optional(),
6973
+ notEquals: z4.any().optional(),
6974
+ oneOf: z4.array(z4.any()).optional(),
6975
+ notIn: z4.array(z4.any()).optional(),
6976
+ minItems: z4.number().int().nonnegative().optional(),
6977
+ maxItems: z4.number().int().nonnegative().optional()
6978
+ });
6979
+ var visibleWhenSchema = z4.union([
6980
+ visibleWhenPredicateSchema,
6981
+ z4.object({
6982
+ allOf: z4.array(visibleWhenPredicateSchema).min(1)
6983
+ })
6984
+ ]);
6930
6985
  var uiSchema = z4.object({
6931
6986
  widget: z4.string().optional(),
6932
6987
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -6959,13 +7014,7 @@ var uiSchema = z4.object({
6959
7014
  showValue: z4.boolean().optional(),
6960
7015
  pattern: z4.string().optional(),
6961
7016
  placeholder: z4.string().optional(),
6962
- visibleWhen: z4.object({
6963
- field: z4.string().min(1),
6964
- equals: z4.any().optional(),
6965
- notEquals: z4.any().optional(),
6966
- oneOf: z4.array(z4.any()).optional(),
6967
- notIn: z4.array(z4.any()).optional()
6968
- }).optional(),
7017
+ visibleWhen: visibleWhenSchema.optional(),
6969
7018
  // Modal configuration for modal and group fields
6970
7019
  modalConfig: z4.object({
6971
7020
  buttonLabel: z4.string().optional(),
@@ -7732,6 +7781,7 @@ var eventListTreatmentValues = [
7732
7781
  ];
7733
7782
  var eyebrowTreatmentValues = [
7734
7783
  "plain",
7784
+ "accent",
7735
7785
  "pill",
7736
7786
  "accent-pill",
7737
7787
  "pill-bounce",
@@ -10746,6 +10796,95 @@ var joyStamp = defineButtonPersonality({
10746
10796
  }
10747
10797
  });
10748
10798
 
10799
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
10800
+ var ornateRitual = defineButtonPersonality({
10801
+ id: "ornate-ritual",
10802
+ name: "Ornate Ritual",
10803
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
10804
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
10805
+ buttonSystem: {
10806
+ global: {
10807
+ cornerStyle: "rounded",
10808
+ shadow: "none",
10809
+ textTransform: "uppercase",
10810
+ fontWeight: 600,
10811
+ borderWidth: 1,
10812
+ hoverTransform: "none",
10813
+ hoverColor: "none",
10814
+ letterSpacing: "loose"
10815
+ },
10816
+ sizes: {
10817
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
10818
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
10819
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
10820
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
10821
+ },
10822
+ variants: [
10823
+ {
10824
+ id: "primary",
10825
+ name: "Primary",
10826
+ enabled: true,
10827
+ priority: 1,
10828
+ background: { type: "solid", colorToken: "primary" },
10829
+ textColorToken: "primaryForeground",
10830
+ borderRadius: "rounded-md",
10831
+ border: { widthClass: "border", colorToken: "primary" },
10832
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10833
+ effects: {
10834
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
10835
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
10836
+ }
10837
+ },
10838
+ {
10839
+ id: "secondary",
10840
+ name: "Secondary",
10841
+ enabled: true,
10842
+ priority: 2,
10843
+ background: { type: "solid", colorToken: "secondary" },
10844
+ textColorToken: "primaryForeground",
10845
+ borderRadius: "rounded-md",
10846
+ border: { widthClass: "border", colorToken: "primary" },
10847
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10848
+ effects: {
10849
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10850
+ }
10851
+ },
10852
+ {
10853
+ id: "outline",
10854
+ name: "Outline",
10855
+ enabled: true,
10856
+ priority: 3,
10857
+ background: { type: "transparent" },
10858
+ textColorToken: "primary",
10859
+ borderRadius: "rounded-md",
10860
+ border: { widthClass: "border", colorToken: "primary" },
10861
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10862
+ effects: {
10863
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
10864
+ }
10865
+ },
10866
+ {
10867
+ id: "ghost",
10868
+ name: "Ghost",
10869
+ enabled: true,
10870
+ priority: 3,
10871
+ background: { type: "transparent" },
10872
+ textColorToken: "accent",
10873
+ borderRadius: "rounded-none",
10874
+ sizes: {
10875
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
10876
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
10877
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
10878
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
10879
+ },
10880
+ effects: {
10881
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
10882
+ }
10883
+ }
10884
+ ]
10885
+ }
10886
+ });
10887
+
10749
10888
  // ../theme-core/src/buttons/personalities/pebble.ts
10750
10889
  var pebble = defineButtonPersonality({
10751
10890
  id: "pebble",
@@ -11019,7 +11158,8 @@ var buttonPersonalities = [
11019
11158
  inkStamp,
11020
11159
  brushedWash,
11021
11160
  showtimePill,
11022
- joyStamp
11161
+ joyStamp,
11162
+ ornateRitual
11023
11163
  ];
11024
11164
  var personalitiesById = new Map(
11025
11165
  buttonPersonalities.map((p) => [p.id, p])
@@ -11649,7 +11789,7 @@ function rgbColorValue(token) {
11649
11789
  if (alpha === void 0) {
11650
11790
  return `rgb(var(${cssVar}))`;
11651
11791
  }
11652
- return `rgba(var(${cssVar}), ${alpha})`;
11792
+ return `rgb(var(${cssVar}) / ${alpha})`;
11653
11793
  }
11654
11794
  function backgroundColorStyle(token) {
11655
11795
  return { backgroundColor: rgbColorValue(token) };
@@ -12754,6 +12894,28 @@ var warmDarkEmber = definePaletteVariant({
12754
12894
  { name: "border", hex: "#894e31" }
12755
12895
  ]
12756
12896
  });
12897
+ var warmDarkKirtanGold = definePaletteVariant({
12898
+ id: "warm-dark-kirtan-gold",
12899
+ name: "Warm Dark \u2014 Kirtan Gold",
12900
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
12901
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
12902
+ mode: "dark",
12903
+ colors: [
12904
+ { name: "primary", hex: "#ffcdb2" },
12905
+ { name: "secondary", hex: "#b5838d" },
12906
+ { name: "accent", hex: "#e5989b" },
12907
+ { name: "success", hex: "#8fbf8f" },
12908
+ { name: "warning", hex: "#f2b86b" },
12909
+ { name: "destructive", hex: "#d96b6b" },
12910
+ { name: "background", hex: "#403944" },
12911
+ { name: "surface", hex: "#403944" },
12912
+ { name: "surfaceAlt", hex: "#372f3b" },
12913
+ { name: "muted", hex: "#4d4550" },
12914
+ { name: "text", hex: "#e6d2d5" },
12915
+ { name: "primaryForeground", hex: "#403944" },
12916
+ { name: "border", hex: "#8d747a" }
12917
+ ]
12918
+ });
12757
12919
 
12758
12920
  // ../theme-core/src/palette/variants/index.ts
12759
12921
  var paletteVariants = [
@@ -12777,7 +12939,8 @@ var paletteVariants = [
12777
12939
  softNaturalWatercolor,
12778
12940
  softNaturalLilac,
12779
12941
  // Warm-dark family (dark mode)
12780
- warmDarkEmber
12942
+ warmDarkEmber,
12943
+ warmDarkKirtanGold
12781
12944
  ];
12782
12945
  var paletteVariantsById = new Map(
12783
12946
  paletteVariants.map((v) => [v.id, v])
@@ -14276,9 +14439,125 @@ function headerConfigurationKey(configuration) {
14276
14439
  function asFooterLookId(value) {
14277
14440
  return value;
14278
14441
  }
14279
- var guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
14442
+ function asFooterLayoutId(value) {
14443
+ return value;
14444
+ }
14445
+ function asFooterStyleId(value) {
14446
+ return value;
14447
+ }
14448
+ var guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
14449
+ var footerLayoutCatalog = defineExactCatalog()([
14450
+ {
14451
+ id: asFooterLayoutId("identity"),
14452
+ label: "Identity",
14453
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
14454
+ },
14455
+ {
14456
+ id: asFooterLayoutId("centered"),
14457
+ label: "Centered",
14458
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
14459
+ maxRecommendedNavDensity: "sparse"
14460
+ },
14461
+ {
14462
+ id: asFooterLayoutId("split"),
14463
+ label: "Split",
14464
+ description: "Navigation and brand signoff separated into a wider split footer.",
14465
+ requiresFooterNav: true,
14466
+ maxRecommendedNavDensity: "balanced"
14467
+ },
14468
+ {
14469
+ id: asFooterLayoutId("columns"),
14470
+ label: "Columns",
14471
+ description: "Grouped footer navigation columns with a supporting bottom line.",
14472
+ requiresFooterNav: true,
14473
+ requiresFooterNavGroups: true
14474
+ }
14475
+ ]);
14476
+ var footerStyleCatalog = defineExactCatalog()([
14477
+ {
14478
+ id: asFooterStyleId("quiet"),
14479
+ label: "Quiet",
14480
+ description: "Lightweight, practical footer treatment."
14481
+ },
14482
+ {
14483
+ id: asFooterStyleId("calm"),
14484
+ label: "Calm",
14485
+ description: "Soft centered treatment with restrained dividers."
14486
+ },
14487
+ {
14488
+ id: asFooterStyleId("editorial"),
14489
+ label: "Editorial",
14490
+ description: "Text-forward treatment with fine-line structure."
14491
+ },
14492
+ {
14493
+ id: asFooterStyleId("brand-band"),
14494
+ label: "Brand band",
14495
+ description: "High-contrast brand treatment with a stronger bottom bar."
14496
+ }
14497
+ ]);
14498
+ var footerLayoutsById = new Map(
14499
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
14500
+ );
14501
+ var footerStylesById = new Map(
14502
+ footerStyleCatalog.map((style) => [style.id, style])
14503
+ );
14504
+ function identityQuietFooter(theme) {
14505
+ return {
14506
+ ...theme.footer,
14507
+ variant: "simple",
14508
+ maxWidth: "container",
14509
+ background: {
14510
+ type: "color",
14511
+ color: "surface"
14512
+ },
14513
+ navStyle: "minimal",
14514
+ navWeight: "regular",
14515
+ navColor: "text",
14516
+ navLinkStyle: {
14517
+ typography: "body",
14518
+ fontWeight: "regular",
14519
+ textTransform: "none",
14520
+ italic: false,
14521
+ colorToken: "text",
14522
+ hoverColorToken: "primary",
14523
+ padding: "none",
14524
+ borderRadius: "none"
14525
+ },
14526
+ navLayout: {
14527
+ layout: "inline-wrap",
14528
+ align: "start",
14529
+ gapX: "default",
14530
+ gapY: "tight"
14531
+ },
14532
+ logo: {
14533
+ showLogo: true,
14534
+ showLogoText: true,
14535
+ placement: "left",
14536
+ size: "sm",
14537
+ align: "start"
14538
+ },
14539
+ bottomBar: {
14540
+ enabled: false,
14541
+ fullBleed: false,
14542
+ textAlign: "left",
14543
+ paddingX: "default",
14544
+ paddingY: "compact",
14545
+ borderTop: {
14546
+ width: "none"
14547
+ }
14548
+ }
14549
+ };
14550
+ }
14280
14551
  function mutedGroundingFooter(theme) {
14281
- return theme.footer;
14552
+ return {
14553
+ ...identityQuietFooter(theme),
14554
+ background: theme.footer.background,
14555
+ navStyle: theme.footer.navStyle,
14556
+ navColor: theme.footer.navColor,
14557
+ navWeight: theme.footer.navWeight,
14558
+ navLinkStyle: theme.footer.navLinkStyle,
14559
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
14560
+ };
14282
14561
  }
14283
14562
  function brandTwoBandFooter(theme) {
14284
14563
  return {
@@ -14383,6 +14662,53 @@ function centeredCalmFooter(theme) {
14383
14662
  }
14384
14663
  };
14385
14664
  }
14665
+ function splitEditorialFooter(theme) {
14666
+ return {
14667
+ ...theme.footer,
14668
+ variant: "split",
14669
+ maxWidth: "container",
14670
+ background: {
14671
+ type: "color",
14672
+ color: "surface"
14673
+ },
14674
+ navStyle: "minimal",
14675
+ navWeight: "regular",
14676
+ navColor: "text",
14677
+ navLinkStyle: {
14678
+ typography: "body",
14679
+ fontWeight: "regular",
14680
+ textTransform: "none",
14681
+ italic: false,
14682
+ colorToken: "text",
14683
+ hoverColorToken: "primary",
14684
+ padding: "none",
14685
+ borderRadius: "none"
14686
+ },
14687
+ navLayout: {
14688
+ layout: "inline-wrap",
14689
+ align: "start",
14690
+ gapX: "relaxed",
14691
+ gapY: "tight"
14692
+ },
14693
+ logo: {
14694
+ showLogo: true,
14695
+ showLogoText: true,
14696
+ placement: "right",
14697
+ size: "sm",
14698
+ align: "end"
14699
+ },
14700
+ bottomBar: {
14701
+ enabled: true,
14702
+ fullBleed: false,
14703
+ textAlign: "left",
14704
+ paddingX: "default",
14705
+ paddingY: "compact",
14706
+ borderTop: {
14707
+ width: "thin"
14708
+ }
14709
+ }
14710
+ };
14711
+ }
14386
14712
  function editorialColumnsFooter(theme) {
14387
14713
  return {
14388
14714
  ...theme.footer,
@@ -14425,25 +14751,47 @@ function editorialColumnsFooter(theme) {
14425
14751
  };
14426
14752
  }
14427
14753
  var footerLookCatalog = defineExactCatalog()([
14754
+ {
14755
+ id: asFooterLookId("footer-identity-quiet"),
14756
+ label: "Identity footer",
14757
+ layoutId: asFooterLayoutId("identity"),
14758
+ styleId: asFooterStyleId("quiet"),
14759
+ compile: identityQuietFooter
14760
+ },
14428
14761
  {
14429
14762
  id: asFooterLookId("footer-muted-grounding"),
14430
14763
  label: "Muted grounding footer",
14764
+ layoutId: asFooterLayoutId("identity"),
14765
+ styleId: asFooterStyleId("quiet"),
14766
+ hiddenFromLayoutStyleControls: true,
14431
14767
  compile: mutedGroundingFooter
14432
14768
  },
14433
14769
  {
14434
14770
  id: asFooterLookId("footer-centered-calm"),
14435
14771
  label: "Centered calm footer",
14772
+ layoutId: asFooterLayoutId("centered"),
14773
+ styleId: asFooterStyleId("calm"),
14436
14774
  compile: centeredCalmFooter
14437
14775
  },
14776
+ {
14777
+ id: asFooterLookId("footer-split-editorial"),
14778
+ label: "Split editorial footer",
14779
+ layoutId: asFooterLayoutId("split"),
14780
+ styleId: asFooterStyleId("editorial"),
14781
+ compile: splitEditorialFooter
14782
+ },
14438
14783
  {
14439
14784
  id: asFooterLookId("footer-editorial-columns"),
14440
14785
  label: "Editorial columns footer",
14786
+ layoutId: asFooterLayoutId("columns"),
14787
+ styleId: asFooterStyleId("editorial"),
14441
14788
  compile: editorialColumnsFooter
14442
14789
  },
14443
14790
  {
14444
14791
  id: asFooterLookId("site-footer-brand-two-band"),
14445
14792
  label: "Two-band brand footer",
14446
- maxRecommendedNavDensity: "balanced",
14793
+ layoutId: asFooterLayoutId("split"),
14794
+ styleId: asFooterStyleId("brand-band"),
14447
14795
  allowedContentPresence: ["default-footer", "default-and-blocks"],
14448
14796
  compile: brandTwoBandFooter
14449
14797
  }
@@ -14646,6 +14994,30 @@ var luxeContrastTypography = {
14646
14994
  },
14647
14995
  scale: "spacious"
14648
14996
  };
14997
+ var kirtanOrnateTypography = {
14998
+ body: {
14999
+ family: "Jost, system-ui, sans-serif",
15000
+ size: "md",
15001
+ weight: "regular",
15002
+ lineHeight: "relaxed",
15003
+ letterSpacing: "normal"
15004
+ },
15005
+ headings: {
15006
+ default: {
15007
+ family: "Marcellus, Georgia, serif",
15008
+ weight: "regular",
15009
+ lineHeight: "normal",
15010
+ letterSpacing: "normal",
15011
+ colorToken: "primary",
15012
+ italic: null,
15013
+ case: null
15014
+ },
15015
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15016
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15017
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
15018
+ },
15019
+ scale: "spacious"
15020
+ };
14649
15021
  var boldDisplayTypography = {
14650
15022
  body: {
14651
15023
  family: "Manrope, system-ui, sans-serif",
@@ -14680,16 +15052,16 @@ var originalJoyTypography = {
14680
15052
  },
14681
15053
  headings: {
14682
15054
  default: {
14683
- family: "Bricolage Grotesque, system-ui, sans-serif",
14684
- weight: "bold",
15055
+ family: "Lobster, cursive",
15056
+ weight: "regular",
14685
15057
  lineHeight: "normal",
14686
- letterSpacing: "tight",
15058
+ letterSpacing: "normal",
14687
15059
  italic: null,
14688
15060
  case: null
14689
15061
  },
14690
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14691
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14692
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
15062
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15063
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15064
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
14693
15065
  },
14694
15066
  scale: "balanced"
14695
15067
  };
@@ -14754,6 +15126,32 @@ var typographyPresets = [
14754
15126
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14755
15127
  typography: luxeContrastTypography
14756
15128
  }),
15129
+ defineTypographyPreset({
15130
+ id: "typography-preset:kirtan-ornate",
15131
+ name: "Kirtan Ornate",
15132
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
15133
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
15134
+ recommendedFonts: {
15135
+ body: ["Jost", "Manrope", "Inter"],
15136
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
15137
+ },
15138
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
15139
+ typography: kirtanOrnateTypography,
15140
+ heroTypography: {
15141
+ headlineSize: "6xl",
15142
+ headlineLineHeight: "normal",
15143
+ subheadlineSize: "xl",
15144
+ subheadlineLineHeight: "relaxed",
15145
+ microHeadlineSize: "5xl",
15146
+ microHeadlineLineHeight: "normal",
15147
+ microSubheadlineSize: "lg",
15148
+ microSubheadlineLineHeight: "relaxed",
15149
+ responsive: {
15150
+ tablet: { headlineSize: "5xl" },
15151
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
15152
+ }
15153
+ }
15154
+ }),
14757
15155
  defineTypographyPreset({
14758
15156
  id: "typography-preset:bold-display",
14759
15157
  name: "Bold Display",
@@ -14783,11 +15181,11 @@ var typographyPresets = [
14783
15181
  defineTypographyPreset({
14784
15182
  id: "typography-preset:original-joy",
14785
15183
  name: "Original Joy",
14786
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
14787
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
15184
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
15185
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
14788
15186
  recommendedFonts: {
14789
15187
  body: ["DM Sans", "Inter", "Manrope"],
14790
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
15188
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
14791
15189
  },
14792
15190
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14793
15191
  typography: originalJoyTypography,
@@ -14811,6 +15209,319 @@ var typographyPresetsById = new Map(
14811
15209
  typographyPresets.map((preset2) => [preset2.id, preset2])
14812
15210
  );
14813
15211
 
15212
+ // ../theme-core/src/site-styles/designState.ts
15213
+ import { z as z24 } from "zod";
15214
+ var themeV2DesignStateSchemaVersion = 1;
15215
+ var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
15216
+ var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
15217
+ var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
15218
+ fields3[0],
15219
+ ...fields3.slice(1)
15220
+ ]);
15221
+ var heroLegibilityStrategySchema = z24.enum([
15222
+ "none",
15223
+ "scrim-gradient",
15224
+ "solid-panel"
15225
+ ]);
15226
+ var heroCompositionIntentSchema = z24.enum([
15227
+ "center",
15228
+ "bottom-left"
15229
+ ]);
15230
+ var heroTypographyScaleIntentSchema = z24.enum([
15231
+ "quiet",
15232
+ "editorial",
15233
+ "display",
15234
+ "poster"
15235
+ ]);
15236
+ var sectionHeightIntentSchema = z24.enum([
15237
+ "default",
15238
+ "banner",
15239
+ "hero",
15240
+ "immersive"
15241
+ ]);
15242
+ var imageSurfaceTreatmentIntensitySchema = z24.enum(["soft", "balanced", "strong"]);
15243
+ var imageSurfaceMotionSchema = z24.enum(["static", "fixed-frame"]);
15244
+ var imageSurfaceTreatmentSchema = z24.discriminatedUnion("kind", [
15245
+ z24.object({ kind: z24.literal("none") }).strict(),
15246
+ z24.object({
15247
+ kind: z24.literal("brand-scrim"),
15248
+ token: z24.enum(["primary", "secondary", "accent"]),
15249
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15250
+ }).strict(),
15251
+ z24.object({
15252
+ kind: z24.literal("brand-wash"),
15253
+ token: z24.enum(["primary", "secondary", "accent"]),
15254
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15255
+ }).strict(),
15256
+ z24.object({
15257
+ kind: z24.literal("neutral-scrim"),
15258
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15259
+ }).strict(),
15260
+ z24.object({
15261
+ kind: z24.literal("neutral-wash"),
15262
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15263
+ }).strict(),
15264
+ z24.object({
15265
+ kind: z24.literal("solid-panel"),
15266
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15267
+ }).strict()
15268
+ ]);
15269
+ var testimonialCardTreatmentSchema = z24.enum(["default", "accent-quote"]);
15270
+ var tileTreatmentSchema = z24.enum(tileTreatmentValues);
15271
+ var eventListTreatmentSchema = z24.enum(eventListTreatmentValues);
15272
+ var eyebrowTreatmentSchema = z24.enum(eyebrowTreatmentValues);
15273
+ function uniqueNonEmpty(values) {
15274
+ const uniqueValues = [...new Set(values)];
15275
+ const firstValue = uniqueValues[0];
15276
+ if (!firstValue) {
15277
+ throw new Error("Expected at least one Theme V2 design state option.");
15278
+ }
15279
+ return [firstValue, ...uniqueValues.slice(1)];
15280
+ }
15281
+ var userPanelTreatments = uniqueNonEmpty(
15282
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
15283
+ );
15284
+ var userFlushTreatments = uniqueNonEmpty(
15285
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
15286
+ );
15287
+ var userFlushBleeds = uniqueNonEmpty(
15288
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
15289
+ );
15290
+ var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
15291
+ z24.object({ kind: z24.literal("plain") }).strict(),
15292
+ z24.object({
15293
+ kind: z24.literal("panel"),
15294
+ treatment: z24.enum(userPanelTreatments)
15295
+ }).strict(),
15296
+ z24.object({
15297
+ kind: z24.literal("flush-panel"),
15298
+ treatment: z24.enum(userFlushTreatments),
15299
+ bleed: z24.enum(userFlushBleeds)
15300
+ }).strict()
15301
+ ]);
15302
+ var blockDesignPlanSchema = z24.object({
15303
+ blockId: z24.string().min(1).transform(asDesignBlockId),
15304
+ blockKind: z24.string().min(1),
15305
+ purpose: z24.string().min(1),
15306
+ sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
15307
+ contentFrame: contentFrameIntentSchema,
15308
+ itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
15309
+ transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
15310
+ emphasis: z24.enum(userDesignOptionCatalog.emphases),
15311
+ sectionHeight: sectionHeightIntentSchema.optional(),
15312
+ heroLegibility: heroLegibilityStrategySchema.optional(),
15313
+ heroComposition: heroCompositionIntentSchema.optional(),
15314
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
15315
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
15316
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
15317
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
15318
+ tileTreatment: tileTreatmentSchema.optional(),
15319
+ eventListTreatment: eventListTreatmentSchema.optional(),
15320
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
15321
+ }).strict();
15322
+ var styleAuthoritySchema = z24.discriminatedUnion("kind", [
15323
+ z24.object({
15324
+ kind: z24.literal("theme-v2"),
15325
+ source: designResolutionPolicySchema,
15326
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
15327
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
15328
+ templateVersion: z24.number().int().nonnegative(),
15329
+ resolverVersion: z24.number().int().nonnegative()
15330
+ }).strict(),
15331
+ z24.object({
15332
+ kind: z24.literal("legacy-raw"),
15333
+ reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
15334
+ }).strict(),
15335
+ z24.object({
15336
+ kind: z24.literal("advanced-detached"),
15337
+ reason: z24.literal("detached-custom-runtime-fields")
15338
+ }).strict()
15339
+ ]);
15340
+ var blockRuntimeStyleAuthoritySchema = z24.object({
15341
+ unit: z24.literal("block-runtime-fields"),
15342
+ blockId: z24.string().min(1).transform(asDesignBlockId),
15343
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
15344
+ authority: styleAuthoritySchema
15345
+ }).strict();
15346
+ var persistedPageDesignStateV1Schema = z24.object({
15347
+ schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
15348
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
15349
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
15350
+ templateVersion: z24.number().int().nonnegative(),
15351
+ resolverVersion: z24.number().int().nonnegative(),
15352
+ rhythmPresetId: z24.string().min(1),
15353
+ blocks: z24.array(blockDesignPlanSchema),
15354
+ styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
15355
+ }).strict();
15356
+
15357
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
15358
+ function defineDesignRuntimeRules(rules) {
15359
+ return rules;
15360
+ }
15361
+ function defineComponentRuntimeRules(rules) {
15362
+ return rules;
15363
+ }
15364
+ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
15365
+ sectionSurfaces: {
15366
+ base: {},
15367
+ "muted-band": {
15368
+ background: {
15369
+ type: "color",
15370
+ color: "muted"
15371
+ }
15372
+ },
15373
+ "accent-band": {
15374
+ background: {
15375
+ type: "color",
15376
+ color: "primary"
15377
+ }
15378
+ },
15379
+ "brand-depth-band": {
15380
+ background: {
15381
+ type: "color",
15382
+ color: "primary-800"
15383
+ }
15384
+ },
15385
+ "hero-image": {
15386
+ background: {
15387
+ type: "image",
15388
+ opacity: 1,
15389
+ position: "center center",
15390
+ ...uniformSectionForeground("text")
15391
+ }
15392
+ }
15393
+ },
15394
+ heroLegibility: {
15395
+ "scrim-gradient": {
15396
+ type: "gradient",
15397
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
15398
+ opacity: 1
15399
+ },
15400
+ "solid-panel": {
15401
+ type: "color",
15402
+ color: "surface",
15403
+ opacity: 0.88
15404
+ }
15405
+ },
15406
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
15407
+ });
15408
+ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
15409
+ panelFrames: {
15410
+ inset: {
15411
+ spacing: "comfortable",
15412
+ rounded: "xl",
15413
+ raised: false,
15414
+ background: {
15415
+ type: "color",
15416
+ color: "surfaceAlt",
15417
+ textColor: "text"
15418
+ }
15419
+ },
15420
+ raised: {
15421
+ spacing: "comfortable",
15422
+ rounded: "xl",
15423
+ raised: true,
15424
+ background: {
15425
+ type: "color",
15426
+ color: "surfaceAlt",
15427
+ textColor: "text"
15428
+ }
15429
+ },
15430
+ editorial: {
15431
+ spacing: "medium",
15432
+ rounded: "xl",
15433
+ raised: false,
15434
+ background: {
15435
+ type: "color",
15436
+ color: "surface",
15437
+ textColor: "text"
15438
+ }
15439
+ }
15440
+ },
15441
+ flushFrames: {
15442
+ "media-panel": {
15443
+ fullWidth: true,
15444
+ spacing: "none",
15445
+ rounded: "none",
15446
+ raised: false
15447
+ }
15448
+ },
15449
+ itemSurfaces: {
15450
+ none: null,
15451
+ default: {
15452
+ spacing: "medium",
15453
+ rounded: "lg",
15454
+ raised: false
15455
+ },
15456
+ flat: {
15457
+ spacing: "medium",
15458
+ rounded: "lg",
15459
+ raised: false
15460
+ },
15461
+ outlined: {
15462
+ spacing: "medium",
15463
+ rounded: "lg",
15464
+ raised: false,
15465
+ border: {
15466
+ enabled: true,
15467
+ width: "1",
15468
+ colorToken: "border"
15469
+ }
15470
+ },
15471
+ raised: {
15472
+ spacing: "medium",
15473
+ rounded: "xl",
15474
+ raised: true
15475
+ },
15476
+ inset: {
15477
+ treatment: "soft-panel",
15478
+ spacing: "comfortable",
15479
+ rounded: "xl",
15480
+ raised: false,
15481
+ border: {
15482
+ enabled: false
15483
+ },
15484
+ background: {
15485
+ type: "color",
15486
+ color: "surfaceAlt",
15487
+ textColor: "text"
15488
+ }
15489
+ },
15490
+ editorial: {
15491
+ // Boxless open column with a short rule on top; the visual treatment
15492
+ // lives in blocks-static/card-treatments.css.
15493
+ treatment: "editorial-rule",
15494
+ spacing: "none",
15495
+ rounded: "none",
15496
+ raised: false,
15497
+ border: {
15498
+ enabled: false
15499
+ }
15500
+ },
15501
+ "color-blocked": {
15502
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
15503
+ // (by position) and staggered offset live in
15504
+ // blocks-static/card-treatments.css; here we set the shared shape:
15505
+ // generous padding, large radius, no border, flat (no shadow).
15506
+ treatment: "color-blocked",
15507
+ spacing: "spacious",
15508
+ rounded: "2xl",
15509
+ raised: false,
15510
+ border: {
15511
+ enabled: false
15512
+ }
15513
+ }
15514
+ }
15515
+ });
15516
+ function uniformSectionForeground(token) {
15517
+ return {
15518
+ textColor: token,
15519
+ headingColor: token,
15520
+ linkColor: token,
15521
+ supportingColor: token
15522
+ };
15523
+ }
15524
+
14814
15525
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
14815
15526
  var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
14816
15527
  var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
@@ -14829,6 +15540,7 @@ var curatedSiteStyleIdValues = [
14829
15540
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
14830
15541
  "site-style:bold-launch",
14831
15542
  "site-style:south-west-twerk-school",
15543
+ "site-style:kirtan-ornate",
14832
15544
  "site-style:original-joy"
14833
15545
  ];
14834
15546
  var quietBudget = {
@@ -14855,6 +15567,50 @@ var expressiveBudget = {
14855
15567
  mediaDensity: "high",
14856
15568
  decorativeRepetition: "medium"
14857
15569
  };
15570
+ var kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
15571
+ ...defaultDesignRuntimeRules,
15572
+ defaultEyebrowTreatment: "accent",
15573
+ sectionSurfaces: {
15574
+ ...defaultDesignRuntimeRules.sectionSurfaces,
15575
+ "muted-band": {
15576
+ background: {
15577
+ type: "color",
15578
+ color: "muted"
15579
+ },
15580
+ foreground: {
15581
+ textColor: "text",
15582
+ headingColor: "primary",
15583
+ linkColor: "primary",
15584
+ supportingColor: "text"
15585
+ }
15586
+ },
15587
+ "brand-depth-band": {
15588
+ background: {
15589
+ type: "color",
15590
+ color: "primary-800"
15591
+ },
15592
+ foreground: {
15593
+ textColor: "text",
15594
+ headingColor: "primary",
15595
+ linkColor: "primary",
15596
+ supportingColor: "text"
15597
+ }
15598
+ },
15599
+ "hero-image": {
15600
+ background: {
15601
+ type: "image",
15602
+ opacity: 1,
15603
+ position: "center center"
15604
+ },
15605
+ foreground: {
15606
+ textColor: "text",
15607
+ headingColor: "primary",
15608
+ linkColor: "primary",
15609
+ supportingColor: "text"
15610
+ }
15611
+ }
15612
+ }
15613
+ });
14858
15614
  var expressiveUnderlineInputs = {
14859
15615
  base: {
14860
15616
  background: { type: "transparent" },
@@ -14892,6 +15648,43 @@ var expressiveUnderlineInputs = {
14892
15648
  opacity: 0.6
14893
15649
  }
14894
15650
  };
15651
+ var ornateDarkInputs = {
15652
+ base: {
15653
+ background: { type: "solid", colorToken: "surfaceAlt" },
15654
+ textColorToken: "text",
15655
+ border: {
15656
+ widthClass: "border",
15657
+ colorToken: "primary/45",
15658
+ style: "all"
15659
+ },
15660
+ corners: "square",
15661
+ shadow: null,
15662
+ spacing: "medium",
15663
+ fontSize: "base"
15664
+ },
15665
+ label: {
15666
+ textColorToken: "primary",
15667
+ fontWeight: "semibold",
15668
+ fontSize: "xs",
15669
+ textTransform: "uppercase",
15670
+ letterSpacing: "wider",
15671
+ opacity: 1
15672
+ },
15673
+ focus: {
15674
+ ringColorToken: "primary/18",
15675
+ ringWidth: "2",
15676
+ borderColorToken: "primary/70"
15677
+ },
15678
+ error: {
15679
+ borderColorToken: "destructive",
15680
+ textColorToken: "destructive"
15681
+ },
15682
+ disabled: {
15683
+ backgroundColorToken: "muted",
15684
+ textColorToken: "mutedText",
15685
+ opacity: 0.6
15686
+ }
15687
+ };
14895
15688
  function uniqueContentFrameKinds() {
14896
15689
  const kinds = [
14897
15690
  ...new Set(
@@ -14949,6 +15742,7 @@ function defineCuratedSiteStyle(input) {
14949
15742
  // clean/minimal styles default to none.
14950
15743
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
14951
15744
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
15745
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
14952
15746
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
14953
15747
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
14954
15748
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -15899,6 +16693,80 @@ var curatedSiteStyles = [
15899
16693
  paletteChoice("high-contrast-ink")
15900
16694
  ]
15901
16695
  }),
16696
+ defineCuratedSiteStyle({
16697
+ id: "site-style:kirtan-ornate",
16698
+ name: "Kirtan Ornate",
16699
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
16700
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
16701
+ 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.",
16702
+ selectionKeywordRules: [
16703
+ { kind: "word", value: "kirtan" },
16704
+ { kind: "word", value: "chanting" },
16705
+ { kind: "word", value: "ceremony" },
16706
+ { kind: "word", value: "devotional" }
16707
+ ],
16708
+ tokenRecipes: {
16709
+ palette: "brand-led",
16710
+ contrast: "strong",
16711
+ radius: "soft",
16712
+ shadow: "subtle",
16713
+ typography: "serif-editorial",
16714
+ spacing: "airy",
16715
+ motion: "subtle"
16716
+ },
16717
+ compositionBudget: expressiveBudget,
16718
+ typographyPresetChoices: [
16719
+ typographyChoice("typography-preset:kirtan-ornate"),
16720
+ typographyChoice("typography-preset:luxe-contrast"),
16721
+ typographyChoice("typography-preset:editorial-serif")
16722
+ ],
16723
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
16724
+ themeOverrides: {
16725
+ accordions: warmInsetAccordionSystem,
16726
+ cards: originalJoyCardSystem,
16727
+ testimonialQuote: serifDisplayQuote,
16728
+ bodyText: {
16729
+ intro: {
16730
+ paragraphSize: "editorial",
16731
+ headingSize: "editorial"
16732
+ }
16733
+ },
16734
+ inputs: ornateDarkInputs
16735
+ },
16736
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
16737
+ recommendedAppearancePresetIds: [
16738
+ "hero-brand-scrim-fixed-frame",
16739
+ "media-text-quiet-story",
16740
+ "events-lined-panel",
16741
+ "schedule-details-brand-depth",
16742
+ "testimonials-statement-cards",
16743
+ "contact-form-panel"
16744
+ ],
16745
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
16746
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
16747
+ recommendedHeaderStyleChoicesByLayout: {
16748
+ floating: [
16749
+ headerStyleChoice("minimal-surface"),
16750
+ headerStyleChoice("split-glass"),
16751
+ headerStyleChoice("glass")
16752
+ ]
16753
+ },
16754
+ recommendedHeaderLookIds: ["minimal-transparent"],
16755
+ recommendedFooterLookIds: [
16756
+ "site-footer-brand-two-band",
16757
+ "footer-muted-grounding"
16758
+ ],
16759
+ buttonPersonalityChoices: [
16760
+ buttonChoice("ornate-ritual"),
16761
+ buttonChoice("joy-stamp"),
16762
+ buttonChoice("ink-stamp")
16763
+ ],
16764
+ paletteVariantChoices: [
16765
+ paletteChoice("warm-dark-kirtan-gold"),
16766
+ paletteChoice("warm-dark-ember"),
16767
+ paletteChoice("brand-led-burgundy-gold")
16768
+ ]
16769
+ }),
15902
16770
  defineCuratedSiteStyle({
15903
16771
  id: "site-style:original-joy",
15904
16772
  name: "Original Joy",
@@ -16002,319 +16870,6 @@ var pageFlowPresets = [
16002
16870
  }
16003
16871
  ];
16004
16872
 
16005
- // ../theme-core/src/site-styles/designState.ts
16006
- import { z as z24 } from "zod";
16007
- var themeV2DesignStateSchemaVersion = 1;
16008
- var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
16009
- var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
16010
- var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
16011
- fields3[0],
16012
- ...fields3.slice(1)
16013
- ]);
16014
- var heroLegibilityStrategySchema = z24.enum([
16015
- "none",
16016
- "scrim-gradient",
16017
- "solid-panel"
16018
- ]);
16019
- var heroCompositionIntentSchema = z24.enum([
16020
- "center",
16021
- "bottom-left"
16022
- ]);
16023
- var heroTypographyScaleIntentSchema = z24.enum([
16024
- "quiet",
16025
- "editorial",
16026
- "display",
16027
- "poster"
16028
- ]);
16029
- var sectionHeightIntentSchema = z24.enum([
16030
- "default",
16031
- "banner",
16032
- "hero",
16033
- "immersive"
16034
- ]);
16035
- var imageSurfaceTreatmentIntensitySchema = z24.enum(["soft", "balanced", "strong"]);
16036
- var imageSurfaceMotionSchema = z24.enum(["static", "fixed-frame"]);
16037
- var imageSurfaceTreatmentSchema = z24.discriminatedUnion("kind", [
16038
- z24.object({ kind: z24.literal("none") }).strict(),
16039
- z24.object({
16040
- kind: z24.literal("brand-scrim"),
16041
- token: z24.enum(["primary", "secondary", "accent"]),
16042
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16043
- }).strict(),
16044
- z24.object({
16045
- kind: z24.literal("brand-wash"),
16046
- token: z24.enum(["primary", "secondary", "accent"]),
16047
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16048
- }).strict(),
16049
- z24.object({
16050
- kind: z24.literal("neutral-scrim"),
16051
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16052
- }).strict(),
16053
- z24.object({
16054
- kind: z24.literal("neutral-wash"),
16055
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16056
- }).strict(),
16057
- z24.object({
16058
- kind: z24.literal("solid-panel"),
16059
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16060
- }).strict()
16061
- ]);
16062
- var testimonialCardTreatmentSchema = z24.enum(["default", "accent-quote"]);
16063
- var tileTreatmentSchema = z24.enum(tileTreatmentValues);
16064
- var eventListTreatmentSchema = z24.enum(eventListTreatmentValues);
16065
- var eyebrowTreatmentSchema = z24.enum(eyebrowTreatmentValues);
16066
- function uniqueNonEmpty(values) {
16067
- const uniqueValues = [...new Set(values)];
16068
- const firstValue = uniqueValues[0];
16069
- if (!firstValue) {
16070
- throw new Error("Expected at least one Theme V2 design state option.");
16071
- }
16072
- return [firstValue, ...uniqueValues.slice(1)];
16073
- }
16074
- var userPanelTreatments = uniqueNonEmpty(
16075
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
16076
- );
16077
- var userFlushTreatments = uniqueNonEmpty(
16078
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
16079
- );
16080
- var userFlushBleeds = uniqueNonEmpty(
16081
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
16082
- );
16083
- var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
16084
- z24.object({ kind: z24.literal("plain") }).strict(),
16085
- z24.object({
16086
- kind: z24.literal("panel"),
16087
- treatment: z24.enum(userPanelTreatments)
16088
- }).strict(),
16089
- z24.object({
16090
- kind: z24.literal("flush-panel"),
16091
- treatment: z24.enum(userFlushTreatments),
16092
- bleed: z24.enum(userFlushBleeds)
16093
- }).strict()
16094
- ]);
16095
- var blockDesignPlanSchema = z24.object({
16096
- blockId: z24.string().min(1).transform(asDesignBlockId),
16097
- blockKind: z24.string().min(1),
16098
- purpose: z24.string().min(1),
16099
- sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
16100
- contentFrame: contentFrameIntentSchema,
16101
- itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
16102
- transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
16103
- emphasis: z24.enum(userDesignOptionCatalog.emphases),
16104
- sectionHeight: sectionHeightIntentSchema.optional(),
16105
- heroLegibility: heroLegibilityStrategySchema.optional(),
16106
- heroComposition: heroCompositionIntentSchema.optional(),
16107
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
16108
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
16109
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
16110
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
16111
- tileTreatment: tileTreatmentSchema.optional(),
16112
- eventListTreatment: eventListTreatmentSchema.optional(),
16113
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
16114
- }).strict();
16115
- var styleAuthoritySchema = z24.discriminatedUnion("kind", [
16116
- z24.object({
16117
- kind: z24.literal("theme-v2"),
16118
- source: designResolutionPolicySchema,
16119
- siteStyleId: z24.string().min(1).transform(asSiteStyleId),
16120
- templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
16121
- templateVersion: z24.number().int().nonnegative(),
16122
- resolverVersion: z24.number().int().nonnegative()
16123
- }).strict(),
16124
- z24.object({
16125
- kind: z24.literal("legacy-raw"),
16126
- reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
16127
- }).strict(),
16128
- z24.object({
16129
- kind: z24.literal("advanced-detached"),
16130
- reason: z24.literal("detached-custom-runtime-fields")
16131
- }).strict()
16132
- ]);
16133
- var blockRuntimeStyleAuthoritySchema = z24.object({
16134
- unit: z24.literal("block-runtime-fields"),
16135
- blockId: z24.string().min(1).transform(asDesignBlockId),
16136
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
16137
- authority: styleAuthoritySchema
16138
- }).strict();
16139
- var persistedPageDesignStateV1Schema = z24.object({
16140
- schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
16141
- siteStyleId: z24.string().min(1).transform(asSiteStyleId),
16142
- templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
16143
- templateVersion: z24.number().int().nonnegative(),
16144
- resolverVersion: z24.number().int().nonnegative(),
16145
- rhythmPresetId: z24.string().min(1),
16146
- blocks: z24.array(blockDesignPlanSchema),
16147
- styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
16148
- }).strict();
16149
-
16150
- // ../theme-core/src/site-styles/runtimeCompiler.ts
16151
- function defineDesignRuntimeRules(rules) {
16152
- return rules;
16153
- }
16154
- function defineComponentRuntimeRules(rules) {
16155
- return rules;
16156
- }
16157
- var defaultDesignRuntimeRules = defineDesignRuntimeRules({
16158
- sectionSurfaces: {
16159
- base: {},
16160
- "muted-band": {
16161
- background: {
16162
- type: "color",
16163
- color: "muted"
16164
- }
16165
- },
16166
- "accent-band": {
16167
- background: {
16168
- type: "color",
16169
- color: "primary"
16170
- }
16171
- },
16172
- "brand-depth-band": {
16173
- background: {
16174
- type: "color",
16175
- color: "primary-800"
16176
- }
16177
- },
16178
- "hero-image": {
16179
- background: {
16180
- type: "image",
16181
- opacity: 1,
16182
- position: "center center",
16183
- ...uniformSectionForeground("text")
16184
- }
16185
- }
16186
- },
16187
- heroLegibility: {
16188
- "scrim-gradient": {
16189
- type: "gradient",
16190
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
16191
- opacity: 1
16192
- },
16193
- "solid-panel": {
16194
- type: "color",
16195
- color: "surface",
16196
- opacity: 0.88
16197
- }
16198
- },
16199
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
16200
- });
16201
- var defaultComponentRuntimeRules = defineComponentRuntimeRules({
16202
- panelFrames: {
16203
- inset: {
16204
- spacing: "comfortable",
16205
- rounded: "xl",
16206
- raised: false,
16207
- background: {
16208
- type: "color",
16209
- color: "surfaceAlt",
16210
- textColor: "text"
16211
- }
16212
- },
16213
- raised: {
16214
- spacing: "comfortable",
16215
- rounded: "xl",
16216
- raised: true,
16217
- background: {
16218
- type: "color",
16219
- color: "surfaceAlt",
16220
- textColor: "text"
16221
- }
16222
- },
16223
- editorial: {
16224
- spacing: "medium",
16225
- rounded: "xl",
16226
- raised: false,
16227
- background: {
16228
- type: "color",
16229
- color: "surface",
16230
- textColor: "text"
16231
- }
16232
- }
16233
- },
16234
- flushFrames: {
16235
- "media-panel": {
16236
- fullWidth: true,
16237
- spacing: "none",
16238
- rounded: "none",
16239
- raised: false
16240
- }
16241
- },
16242
- itemSurfaces: {
16243
- none: null,
16244
- default: {
16245
- spacing: "medium",
16246
- rounded: "lg",
16247
- raised: false
16248
- },
16249
- flat: {
16250
- spacing: "medium",
16251
- rounded: "lg",
16252
- raised: false
16253
- },
16254
- outlined: {
16255
- spacing: "medium",
16256
- rounded: "lg",
16257
- raised: false,
16258
- border: {
16259
- enabled: true,
16260
- width: "1",
16261
- colorToken: "border"
16262
- }
16263
- },
16264
- raised: {
16265
- spacing: "medium",
16266
- rounded: "xl",
16267
- raised: true
16268
- },
16269
- inset: {
16270
- treatment: "soft-panel",
16271
- spacing: "comfortable",
16272
- rounded: "xl",
16273
- raised: false,
16274
- border: {
16275
- enabled: false
16276
- },
16277
- background: {
16278
- type: "color",
16279
- color: "surfaceAlt",
16280
- textColor: "text"
16281
- }
16282
- },
16283
- editorial: {
16284
- // Boxless open column with a short rule on top; the visual treatment
16285
- // lives in blocks-static/card-treatments.css.
16286
- treatment: "editorial-rule",
16287
- spacing: "none",
16288
- rounded: "none",
16289
- raised: false,
16290
- border: {
16291
- enabled: false
16292
- }
16293
- },
16294
- "color-blocked": {
16295
- // Bold, flat colour-blocked cards. The per-card background colour cycle
16296
- // (by position) and staggered offset live in
16297
- // blocks-static/card-treatments.css; here we set the shared shape:
16298
- // generous padding, large radius, no border, flat (no shadow).
16299
- treatment: "color-blocked",
16300
- spacing: "spacious",
16301
- rounded: "2xl",
16302
- raised: false,
16303
- border: {
16304
- enabled: false
16305
- }
16306
- }
16307
- }
16308
- });
16309
- function uniformSectionForeground(token) {
16310
- return {
16311
- textColor: token,
16312
- headingColor: token,
16313
- linkColor: token,
16314
- supportingColor: token
16315
- };
16316
- }
16317
-
16318
16873
  // ../theme-core/src/site-styles/generatedSchemas.ts
16319
16874
  import { z as z25 } from "zod";
16320
16875
  function uniqueNonEmpty2(values) {
@@ -17126,6 +17681,31 @@ function cardStylesField(options = {}) {
17126
17681
  return createBoxStylesFieldWithDepth("card", options);
17127
17682
  }
17128
17683
 
17684
+ // ../blocks/src/system/fields/imageShape.ts
17685
+ var standardImageShapeOptions = [
17686
+ { value: "default", label: "Default" },
17687
+ { value: "square", label: "Square corners" },
17688
+ { value: "rounded", label: "Rounded corners" },
17689
+ { value: "circle", label: "Circle" },
17690
+ { value: "arch", label: "Arch" }
17691
+ ];
17692
+ function createImageShapeField(options = {}) {
17693
+ return {
17694
+ id: options.id ?? "imageShape",
17695
+ type: "select",
17696
+ label: options.label ?? "Image shape",
17697
+ ...options.description ? { description: options.description } : {},
17698
+ required: false,
17699
+ defaultValue: options.defaultValue ?? "default",
17700
+ multiple: false,
17701
+ options: [...standardImageShapeOptions],
17702
+ ui: {
17703
+ intent: options.uiIntent ?? "display",
17704
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
17705
+ }
17706
+ };
17707
+ }
17708
+
17129
17709
  // ../blocks/src/utils/env.ts
17130
17710
  function isDevEnvironment() {
17131
17711
  try {
@@ -17940,7 +18520,7 @@ function buildFooterNavAll(common) {
17940
18520
  return stack(
17941
18521
  { className: common.className, gap: common.gap, align: "stretch" },
17942
18522
  [item],
17943
- when(collectionPath)
18523
+ whenCollectionHasItems(collectionPath)
17944
18524
  );
17945
18525
  }
17946
18526
  function buildFooterNavLinksOnly(common) {
@@ -17973,7 +18553,7 @@ function buildFooterNavLinksOnly(common) {
17973
18553
  return stack(
17974
18554
  { className: common.className, gap: common.gap, align: "stretch" },
17975
18555
  [item],
17976
- when(collectionPath)
18556
+ whenCollectionHasItems(collectionPath)
17977
18557
  );
17978
18558
  }
17979
18559
  function buildFooterNavFlatten(common) {
@@ -18022,9 +18602,20 @@ function buildFooterNavFlatten(common) {
18022
18602
  return stack(
18023
18603
  { className: common.className, gap: common.gap, align: "stretch" },
18024
18604
  [item],
18025
- when(collectionPath)
18605
+ whenCollectionHasItems(collectionPath)
18026
18606
  );
18027
18607
  }
18608
+ var whenCollectionHasItems = (collectionPath) => (node) => ({
18609
+ ...node,
18610
+ $when: {
18611
+ when: {
18612
+ from: collectionPath,
18613
+ transforms: [{ id: "array.length" }]
18614
+ },
18615
+ equals: 0,
18616
+ not: true
18617
+ }
18618
+ });
18028
18619
  function footerNav(opts) {
18029
18620
  const mode = opts?.mode ?? "all";
18030
18621
  const collectionPath = opts?.collectionPath ?? "footerMenu.items";
@@ -20596,8 +21187,23 @@ function fragmentsToRepeaterField(id, label, fragments, options = {}) {
20596
21187
  var heroLayoutControlsFragment = defineFragment({
20597
21188
  id: "heroLayoutControls",
20598
21189
  title: "Hero Layout",
20599
- description: "Alignment and content width controls for hero layouts.",
21190
+ description: "Title scale, alignment, and content width controls for hero layouts.",
20600
21191
  fields: [
21192
+ {
21193
+ id: "titleSize",
21194
+ type: "select",
21195
+ label: "Title size",
21196
+ description: "Adjust the visual scale of the hero title.",
21197
+ required: false,
21198
+ ui: { intent: "display" },
21199
+ options: [
21200
+ { value: "auto", label: "Auto" },
21201
+ { value: "quiet", label: "Normal" },
21202
+ { value: "editorial", label: "Large" },
21203
+ { value: "display", label: "Huge" },
21204
+ { value: "poster", label: "Poster" }
21205
+ ]
21206
+ },
20601
21207
  {
20602
21208
  id: "contentAlignment",
20603
21209
  type: "select",
@@ -21392,7 +21998,18 @@ function heroSplitImagePane() {
21392
21998
  return stack(
21393
21999
  {
21394
22000
  gap: "none",
21395
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
22001
+ className: {
22002
+ $bind: {
22003
+ from: "content.imageShape",
22004
+ transforms: [
22005
+ {
22006
+ id: "ui.imageShapeClassName",
22007
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
22008
+ }
22009
+ ],
22010
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
22011
+ }
22012
+ },
21396
22013
  style: {
21397
22014
  minHeight: "clamp(18rem, 36vw, 34rem)"
21398
22015
  }
@@ -21510,6 +22127,12 @@ var heroConfig = {
21510
22127
  label: "Content card",
21511
22128
  renderInHeader: true,
21512
22129
  intent: "style"
22130
+ }),
22131
+ createImageShapeField({
22132
+ id: "imageShape",
22133
+ label: "Image shape",
22134
+ defaultValue: "default",
22135
+ uiIntent: "display"
21513
22136
  })
21514
22137
  ],
21515
22138
  layout: classicLayout,
@@ -21524,6 +22147,15 @@ var heroConfig = {
21524
22147
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
21525
22148
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
21526
22149
  icon: "Sparkles",
22150
+ previewCustomize: {
22151
+ quickFieldPriority: [
22152
+ "titleSize",
22153
+ "contentAlignment",
22154
+ "contentMaxWidth",
22155
+ "verticalAlignment",
22156
+ "imageShape"
22157
+ ]
22158
+ },
21527
22159
  styleTokens: {
21528
22160
  typography: "display",
21529
22161
  spacing: "xl"
@@ -21540,7 +22172,8 @@ var standardAspectRatioOptions = [
21540
22172
  { value: "16/9", label: "16:9 (Landscape)" },
21541
22173
  { value: "4/3", label: "4:3 (Standard)" },
21542
22174
  { value: "1/1", label: "1:1 (Square)" },
21543
- { value: "3/4", label: "3:4 (Portrait)" }
22175
+ { value: "3/4", label: "3:4 (Portrait)" },
22176
+ { value: "9/16", label: "9:16 (Tall portrait)" }
21544
22177
  ];
21545
22178
  function createAspectRatioField(options = {}) {
21546
22179
  return {
@@ -22760,6 +23393,258 @@ var formBlockDefinition = {
22760
23393
  runtime: formBlockRuntime
22761
23394
  };
22762
23395
 
23396
+ // ../blocks/src/system/blocks/contact-newsletter.ts
23397
+ var contactNewsletterLayout = styledSection({
23398
+ children: sectionContainer([
23399
+ el(
23400
+ "div",
23401
+ { className: "contact-newsletter-grid" },
23402
+ [
23403
+ el(
23404
+ "div",
23405
+ { className: "contact-newsletter-column contact-newsletter-contact" },
23406
+ [
23407
+ el(
23408
+ "div",
23409
+ { className: "contact-newsletter-copy" },
23410
+ [
23411
+ text(
23412
+ {
23413
+ as: "h2",
23414
+ className: "form-copy-title"
23415
+ },
23416
+ when("contactTitle"),
23417
+ bind("contactTitle")
23418
+ ),
23419
+ richText(
23420
+ {
23421
+ className: "form-copy-intro rb-prose rb-max-w-none"
23422
+ },
23423
+ when("contactIntro"),
23424
+ bind("contactIntro")
23425
+ )
23426
+ ]
23427
+ ),
23428
+ el(
23429
+ "form",
23430
+ withApiBindings({
23431
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
23432
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
23433
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
23434
+ }),
23435
+ [],
23436
+ bind("data.form")
23437
+ )
23438
+ ]
23439
+ ),
23440
+ el(
23441
+ "div",
23442
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
23443
+ [
23444
+ el(
23445
+ "div",
23446
+ { className: "contact-newsletter-copy" },
23447
+ [
23448
+ text(
23449
+ {
23450
+ as: "h2",
23451
+ className: "newsletter-copy-title"
23452
+ },
23453
+ when("newsletterTitle"),
23454
+ bind("newsletterTitle")
23455
+ ),
23456
+ richText(
23457
+ {
23458
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
23459
+ },
23460
+ when("newsletterSubtitle"),
23461
+ bind("newsletterSubtitle")
23462
+ )
23463
+ ]
23464
+ ),
23465
+ el(
23466
+ "newsletter-form",
23467
+ withApiBindings({
23468
+ listId: { $bind: { from: "listId" } },
23469
+ preset: { $bind: { from: "preset" } },
23470
+ includePhone: { $bind: { from: "includePhone" } },
23471
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
23472
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
23473
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
23474
+ tags: { $bind: { from: "newsletterTags" } },
23475
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
23476
+ }),
23477
+ []
23478
+ )
23479
+ ]
23480
+ )
23481
+ ]
23482
+ )
23483
+ ], {
23484
+ className: "contact-newsletter-container"
23485
+ }),
23486
+ baseClass: "",
23487
+ spacing: "medium",
23488
+ background: "surface"
23489
+ });
23490
+ var contactNewsletterManifest = createBlockManifest({
23491
+ id: "block.contact-newsletter",
23492
+ title: "Contact + Newsletter",
23493
+ titleSource: "contactTitle",
23494
+ description: "Two-column newsletter signup and contact form section.",
23495
+ category: "interactive",
23496
+ layout: contactNewsletterLayout,
23497
+ defaultVariant: "default",
23498
+ variants: {
23499
+ default: contactNewsletterLayout
23500
+ },
23501
+ variantOptions: {
23502
+ default: {
23503
+ label: "Two column",
23504
+ description: "Newsletter and contact form side by side.",
23505
+ icon: "Columns2"
23506
+ }
23507
+ },
23508
+ additionalFields: [
23509
+ {
23510
+ id: "newsletterTitle",
23511
+ type: "text",
23512
+ label: "Newsletter title",
23513
+ defaultValue: "Stay connected"
23514
+ },
23515
+ {
23516
+ id: "newsletterSubtitle",
23517
+ type: "richText",
23518
+ label: "Newsletter intro"
23519
+ },
23520
+ {
23521
+ id: "listId",
23522
+ type: "reference",
23523
+ label: "Newsletter list",
23524
+ description: "Select the list new subscribers should be added to.",
23525
+ required: true,
23526
+ referenceKind: "newsletterList",
23527
+ allowManualEntry: false,
23528
+ ui: { intent: "behavior" }
23529
+ },
23530
+ {
23531
+ id: "preset",
23532
+ type: "select",
23533
+ label: "Newsletter fields",
23534
+ defaultValue: "emailOnly",
23535
+ ui: { intent: "display" },
23536
+ options: [
23537
+ { value: "emailOnly", label: "Email only" },
23538
+ { value: "emailName", label: "Email + Name" },
23539
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
23540
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
23541
+ ]
23542
+ },
23543
+ {
23544
+ id: "includePhone",
23545
+ type: "boolean",
23546
+ label: "Include phone field",
23547
+ defaultValue: false,
23548
+ ui: { intent: "display" }
23549
+ },
23550
+ {
23551
+ id: "newsletterButtonLabel",
23552
+ type: "text",
23553
+ label: "Newsletter button label",
23554
+ defaultValue: "Subscribe",
23555
+ ui: { intent: "display" }
23556
+ },
23557
+ {
23558
+ id: "newsletterSuccessMessage",
23559
+ type: "text",
23560
+ label: "Newsletter success message",
23561
+ defaultValue: "Thanks for subscribing!",
23562
+ ui: { intent: "behavior" }
23563
+ },
23564
+ {
23565
+ id: "newsletterPrivacyNote",
23566
+ type: "text",
23567
+ label: "Privacy note",
23568
+ ui: { intent: "display" }
23569
+ },
23570
+ {
23571
+ id: "newsletterTags",
23572
+ type: "text",
23573
+ label: "Newsletter tags",
23574
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
23575
+ ui: { intent: "behavior" }
23576
+ },
23577
+ {
23578
+ id: "contactTitle",
23579
+ type: "text",
23580
+ label: "Contact title",
23581
+ defaultValue: "Get in touch"
23582
+ },
23583
+ {
23584
+ id: "contactIntro",
23585
+ type: "richText",
23586
+ label: "Contact intro"
23587
+ },
23588
+ {
23589
+ id: "formSlug",
23590
+ type: "reference",
23591
+ label: "Contact form",
23592
+ description: "Pick a saved form to render.",
23593
+ required: true,
23594
+ referenceKind: "form",
23595
+ allowManualEntry: false,
23596
+ ui: { intent: "behavior" }
23597
+ },
23598
+ {
23599
+ id: "contactSubmitLabel",
23600
+ type: "text",
23601
+ label: "Contact button label",
23602
+ defaultValue: "Send message",
23603
+ ui: { intent: "display" }
23604
+ },
23605
+ {
23606
+ id: "contactSuccessMessage",
23607
+ type: "text",
23608
+ label: "Contact success message",
23609
+ defaultValue: "Thanks - we received your message.",
23610
+ ui: { intent: "behavior" }
23611
+ }
23612
+ ],
23613
+ styleTokens: {
23614
+ background: "surface",
23615
+ typography: "body",
23616
+ spacing: "md"
23617
+ },
23618
+ behaviours: {
23619
+ supportsThemeSwitching: true,
23620
+ inlineEditing: true,
23621
+ animation: false,
23622
+ paletteHidden: false
23623
+ },
23624
+ tags: [
23625
+ "contact",
23626
+ "newsletter",
23627
+ "signup",
23628
+ "email",
23629
+ "form",
23630
+ "lead-capture"
23631
+ ],
23632
+ icon: "MailPlus"
23633
+ });
23634
+ var contactNewsletterBlockDefinition = {
23635
+ manifest: contactNewsletterManifest,
23636
+ dataSchemas: { form: formDataSchema.optional() },
23637
+ dataLoaders: {
23638
+ form: {
23639
+ endpoint: "getPublicFormById",
23640
+ params: {
23641
+ formSlug: { $bind: { from: "formSlug" } }
23642
+ },
23643
+ mode: "server"
23644
+ }
23645
+ }
23646
+ };
23647
+
22763
23648
  // ../blocks/src/system/blocks/faq.ts
22764
23649
  function fragmentLayoutNode2(layout) {
22765
23650
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -22988,6 +23873,7 @@ var joinClasses3 = (parts) => parts.filter(
22988
23873
  ).join(" ").replace(/\s+/g, " ").trim();
22989
23874
  var eyebrowTreatmentClassMap = {
22990
23875
  plain: "",
23876
+ accent: "rb-eyebrow-treatment-accent",
22991
23877
  pill: "rb-eyebrow-treatment-pill",
22992
23878
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
22993
23879
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -23014,6 +23900,13 @@ var imageGalleryCornerClassMap = {
23014
23900
  "2xl": "rb-rounded-2xl",
23015
23901
  "3xl": "rb-rounded-3xl"
23016
23902
  };
23903
+ var imageShapeClassMap = {
23904
+ default: "",
23905
+ square: "rb-media-shape-square",
23906
+ rounded: "rb-media-shape-rounded",
23907
+ circle: "rb-media-shape-circle",
23908
+ arch: "rb-media-shape-arch"
23909
+ };
23017
23910
  var parseRatio = (raw) => {
23018
23911
  if (typeof raw !== "string") return null;
23019
23912
  const value = raw.trim();
@@ -23158,6 +24051,10 @@ function resolveHeroContentMaxWidth(content) {
23158
24051
  return "default";
23159
24052
  }
23160
24053
  function resolveHeroTypographyScale(content) {
24054
+ const titleSize = readString(content, "titleSize");
24055
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
24056
+ return titleSize;
24057
+ }
23161
24058
  const raw = readHeroLayoutString(
23162
24059
  content,
23163
24060
  "typographyScale",
@@ -23399,6 +24296,16 @@ var uiTransforms = [
23399
24296
  heroGridClassFromVerticalAlignmentTransform,
23400
24297
  imageFragmentClassTransform,
23401
24298
  imageFragmentSizeTransform,
24299
+ {
24300
+ id: "ui.imageShapeClassName",
24301
+ kind: "string",
24302
+ summary: "Apply a constrained media shape class",
24303
+ run: (value, options) => {
24304
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
24305
+ const shape = typeof value === "string" ? value.trim() : "default";
24306
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
24307
+ }
24308
+ },
23402
24309
  conditionalClassTransform,
23403
24310
  twoColumnContainerClassTransform,
23404
24311
  twoColumnFlexBasisTransform,
@@ -24742,6 +25649,21 @@ var siteHeaderManifest = createBlockManifest({
24742
25649
  id: "block.site-header",
24743
25650
  title: "Site Header",
24744
25651
  category: "layout",
25652
+ additionalFields: [
25653
+ {
25654
+ id: "mode",
25655
+ type: "select",
25656
+ label: "Header display",
25657
+ required: false,
25658
+ multiple: false,
25659
+ defaultValue: "default",
25660
+ options: [
25661
+ { value: "default", label: "Show header" },
25662
+ { value: "hidden", label: "Hide header" }
25663
+ ],
25664
+ ui: { intent: "display" }
25665
+ }
25666
+ ],
24745
25667
  // Skip section styles - this block uses theme-based styling
24746
25668
  skipSectionStyles: true,
24747
25669
  // Block manages its own wrapper - enables sticky positioning
@@ -26144,6 +27066,9 @@ var mediaTextManifest = createBlockManifest({
26144
27066
  category: "layout",
26145
27067
  includeContainerStyles: true,
26146
27068
  titleSource: "title",
27069
+ previewCustomize: {
27070
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
27071
+ },
26147
27072
  additionalFields: [
26148
27073
  {
26149
27074
  id: "images",
@@ -26182,7 +27107,7 @@ var mediaTextManifest = createBlockManifest({
26182
27107
  {
26183
27108
  id: "titleAlignment",
26184
27109
  type: "select",
26185
- label: "Title alignment",
27110
+ label: "Content alignment",
26186
27111
  required: false,
26187
27112
  defaultValue: "left",
26188
27113
  multiple: false,
@@ -26240,7 +27165,18 @@ var mediaTextManifest = createBlockManifest({
26240
27165
  transition: "slide"
26241
27166
  },
26242
27167
  ui: { intent: "behavior" }
26243
- }),
27168
+ }).map((field) => ({
27169
+ ...field,
27170
+ ui: {
27171
+ ...field.ui ?? {},
27172
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
27173
+ allOf: [
27174
+ { field: "images", minItems: 2 },
27175
+ { field: "carouselAutoplay", equals: true }
27176
+ ]
27177
+ } : { field: "images", minItems: 2 }
27178
+ }
27179
+ })),
26244
27180
  createAspectRatioField({
26245
27181
  id: "aspectRatio",
26246
27182
  label: "Media aspect ratio",
@@ -26248,6 +27184,12 @@ var mediaTextManifest = createBlockManifest({
26248
27184
  defaultValue: "auto",
26249
27185
  visibleWhen: { field: "images", notEquals: null }
26250
27186
  }),
27187
+ createImageShapeField({
27188
+ id: "imageShape",
27189
+ label: "Media shape",
27190
+ defaultValue: "default",
27191
+ visibleWhen: { field: "images", notEquals: null }
27192
+ }),
26251
27193
  {
26252
27194
  id: "text",
26253
27195
  type: "richText",
@@ -26281,6 +27223,30 @@ var mediaTextManifest = createBlockManifest({
26281
27223
  ...options?.not ? { not: true } : {}
26282
27224
  }
26283
27225
  });
27226
+ const bodyClassNameFromAlignment = {
27227
+ $bind: {
27228
+ from: "content.titleAlignment",
27229
+ transforms: [
27230
+ {
27231
+ id: "ui.bodyClassFromAlignment",
27232
+ options: { base: "rb-prose rb-max-w-none" }
27233
+ }
27234
+ ],
27235
+ fallback: "rb-prose rb-max-w-none"
27236
+ }
27237
+ };
27238
+ const titleClassNameFromAlignment = {
27239
+ $bind: {
27240
+ from: "content.titleAlignment",
27241
+ transforms: [
27242
+ {
27243
+ id: "ui.headingClassFromAlignment",
27244
+ options: { base: "" }
27245
+ }
27246
+ ],
27247
+ fallback: ""
27248
+ }
27249
+ };
26284
27250
  const defaultTextColumn = el("div", {}, [
26285
27251
  styledCard(
26286
27252
  [
@@ -26305,8 +27271,55 @@ var mediaTextManifest = createBlockManifest({
26305
27271
  bind("content.text")
26306
27272
  )
26307
27273
  ]);
27274
+ const bioTextColumn = el(
27275
+ "div",
27276
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
27277
+ [
27278
+ text(
27279
+ {
27280
+ as: "h2",
27281
+ className: titleClassNameFromAlignment
27282
+ },
27283
+ when("content.title"),
27284
+ bind("content.title")
27285
+ ),
27286
+ styledCard(
27287
+ [
27288
+ richText(
27289
+ {
27290
+ className: bodyClassNameFromAlignment
27291
+ },
27292
+ bind("content.text")
27293
+ )
27294
+ ],
27295
+ {
27296
+ stylesFrom: "content._textCardStyles",
27297
+ backgroundFrom: "content._textCardStyles.background"
27298
+ },
27299
+ when("content.wrapTextInCard")
27300
+ ),
27301
+ richText(
27302
+ {
27303
+ className: bodyClassNameFromAlignment
27304
+ },
27305
+ when("content.wrapTextInCard", { not: true }),
27306
+ bind("content.text")
27307
+ )
27308
+ ]
27309
+ );
26308
27310
  const defaultImageCommonProps = {
26309
- className: "rb-w-full rb-h-auto rb-object-cover",
27311
+ className: {
27312
+ $bind: {
27313
+ from: "content.imageShape",
27314
+ transforms: [
27315
+ {
27316
+ id: "ui.imageShapeClassName",
27317
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
27318
+ }
27319
+ ],
27320
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
27321
+ }
27322
+ },
26310
27323
  style: {
26311
27324
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
26312
27325
  }
@@ -26347,6 +27360,27 @@ var mediaTextManifest = createBlockManifest({
26347
27360
  ],
26348
27361
  whenImagesLength(0, { not: true })
26349
27362
  );
27363
+ const bioImagesLayout = el(
27364
+ "div",
27365
+ {},
27366
+ [
27367
+ responsiveTwoColumn({
27368
+ image: el("div", {}, [
27369
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
27370
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
27371
+ ]),
27372
+ text: bioTextColumn,
27373
+ ratioFrom: "content.ratio",
27374
+ imagePositionFrom: "content.imagePosition",
27375
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
27376
+ gapFrom: "content.gap",
27377
+ gapFallback: "comfortable",
27378
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
27379
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
27380
+ })
27381
+ ],
27382
+ whenImagesLength(0, { not: true })
27383
+ );
26350
27384
  const defaultTextOnlyLayout = el(
26351
27385
  "div",
26352
27386
  {},
@@ -26376,7 +27410,45 @@ var mediaTextManifest = createBlockManifest({
26376
27410
  ],
26377
27411
  whenImagesLength(0)
26378
27412
  );
27413
+ const bioTextOnlyLayout = el(
27414
+ "div",
27415
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
27416
+ [
27417
+ text(
27418
+ {
27419
+ as: "h2",
27420
+ className: titleClassNameFromAlignment
27421
+ },
27422
+ when("content.title"),
27423
+ bind("content.title")
27424
+ ),
27425
+ styledCard(
27426
+ [
27427
+ richText(
27428
+ {
27429
+ className: bodyClassNameFromAlignment
27430
+ },
27431
+ bind("content.text")
27432
+ )
27433
+ ],
27434
+ {
27435
+ stylesFrom: "content._textCardStyles",
27436
+ backgroundFrom: "content._textCardStyles.background"
27437
+ },
27438
+ when("content.wrapTextInCard")
27439
+ ),
27440
+ richText(
27441
+ {
27442
+ className: bodyClassNameFromAlignment
27443
+ },
27444
+ when("content.wrapTextInCard", { not: true }),
27445
+ bind("content.text")
27446
+ )
27447
+ ],
27448
+ whenImagesLength(0)
27449
+ );
26379
27450
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
27451
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
26380
27452
  const defaultLayout2 = styledSection({
26381
27453
  children: styledContainer({
26382
27454
  rootType: "stack",
@@ -26385,18 +27457,7 @@ var mediaTextManifest = createBlockManifest({
26385
27457
  text(
26386
27458
  {
26387
27459
  as: "h2",
26388
- className: {
26389
- $bind: {
26390
- from: "content.titleAlignment",
26391
- transforms: [
26392
- {
26393
- id: "ui.headingClassFromAlignment",
26394
- options: { base: "" }
26395
- }
26396
- ],
26397
- fallback: ""
26398
- }
26399
- }
27460
+ className: titleClassNameFromAlignment
26400
27461
  },
26401
27462
  when("content.title"),
26402
27463
  bind("content.title")
@@ -26408,14 +27469,28 @@ var mediaTextManifest = createBlockManifest({
26408
27469
  baseClass: "",
26409
27470
  spacing: "medium"
26410
27471
  });
27472
+ const bioLayout = styledSection({
27473
+ children: styledContainer({
27474
+ rootType: "stack",
27475
+ rootProps: { gap: "lg" },
27476
+ children: [bioInner]
27477
+ }),
27478
+ baseClass: "",
27479
+ spacing: "medium"
27480
+ });
26411
27481
  return {
26412
27482
  layout: defaultLayout2,
26413
27483
  variants: {
26414
- default: defaultLayout2
27484
+ default: defaultLayout2,
27485
+ bio: bioLayout
26415
27486
  },
26416
27487
  defaultVariant: "default",
26417
27488
  variantOptions: {
26418
- default: { label: "Default" }
27489
+ default: { label: "Default" },
27490
+ bio: {
27491
+ label: "Bio",
27492
+ description: "Vertically centered title and copy beside media."
27493
+ }
26419
27494
  }
26420
27495
  };
26421
27496
  })(),
@@ -27121,6 +28196,126 @@ var occurrenceContextSchema = z43.object({
27121
28196
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
27122
28197
  import { z as z45 } from "zod";
27123
28198
 
28199
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
28200
+ var DEFAULT_EVENT_CURRENCY = "USD";
28201
+ function resolveRuntimeEventPricing(event) {
28202
+ if (isPublicEventPricing(event.pricing)) {
28203
+ return event.pricing;
28204
+ }
28205
+ const legacy = event;
28206
+ const currency = readCurrency(legacy.currency);
28207
+ if (event.requiresRegistration === false) {
28208
+ return {
28209
+ kind: "drop_in",
28210
+ currency,
28211
+ display: { kind: "free", currency }
28212
+ };
28213
+ }
28214
+ if (legacy.pricingMode === "ticket_types") {
28215
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
28216
+ return {
28217
+ kind: "ticket_types",
28218
+ currency,
28219
+ ticketTypes,
28220
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
28221
+ };
28222
+ }
28223
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
28224
+ if (legacy.pricingType === "paid" && amount > 0) {
28225
+ return {
28226
+ kind: "single_paid",
28227
+ amount,
28228
+ currency,
28229
+ display: { kind: "exact", amount, currency }
28230
+ };
28231
+ }
28232
+ return {
28233
+ kind: "free_registration",
28234
+ currency,
28235
+ display: { kind: "free", currency }
28236
+ };
28237
+ }
28238
+ function readCurrency(value) {
28239
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
28240
+ }
28241
+ function isRecord3(value) {
28242
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28243
+ }
28244
+ function isPublicEventPricing(value) {
28245
+ if (!isRecord3(value) || typeof value.kind !== "string") return false;
28246
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
28247
+ }
28248
+ function isPublicEventTicketType(value) {
28249
+ return isRecord3(value) && typeof value.id === "string";
28250
+ }
28251
+ function readTicketTypePriceDisplay(value, currency) {
28252
+ const display = readLegacyPriceDisplay(value, currency);
28253
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
28254
+ }
28255
+ function readLegacyPriceDisplay(value, currency) {
28256
+ if (!isRecord3(value) || typeof value.kind !== "string") {
28257
+ return { kind: "unavailable", currency };
28258
+ }
28259
+ const displayCurrency = readCurrency(value.currency);
28260
+ switch (value.kind) {
28261
+ case "free":
28262
+ return { kind: "free", currency: displayCurrency };
28263
+ case "exact":
28264
+ return readAmount(value.amount) !== null ? {
28265
+ kind: "exact",
28266
+ amount: readAmount(value.amount) ?? 0,
28267
+ currency: displayCurrency
28268
+ } : { kind: "unavailable", currency };
28269
+ case "from":
28270
+ return readAmount(value.amount) !== null ? {
28271
+ kind: "from",
28272
+ amount: readAmount(value.amount) ?? 0,
28273
+ currency: displayCurrency
28274
+ } : { kind: "unavailable", currency };
28275
+ case "mixed":
28276
+ return readAmount(value.paidFromAmount) !== null ? {
28277
+ kind: "mixed",
28278
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
28279
+ currency: displayCurrency
28280
+ } : { kind: "unavailable", currency };
28281
+ case "unavailable":
28282
+ return { kind: "unavailable", currency: displayCurrency };
28283
+ case "course":
28284
+ return isRecord3(value.display) ? {
28285
+ kind: "course",
28286
+ display: readCoursePriceDisplay(value.display, displayCurrency)
28287
+ } : {
28288
+ kind: "course",
28289
+ display: { kind: "unavailable", currency: displayCurrency }
28290
+ };
28291
+ default:
28292
+ return { kind: "unavailable", currency };
28293
+ }
28294
+ }
28295
+ function readCoursePriceDisplay(value, currency) {
28296
+ switch (value.kind) {
28297
+ case "free":
28298
+ return { kind: "free", currency: readCurrency(value.currency) };
28299
+ case "exact":
28300
+ return readAmount(value.amount) !== null ? {
28301
+ kind: "exact",
28302
+ amount: readAmount(value.amount) ?? 0,
28303
+ currency: readCurrency(value.currency)
28304
+ } : { kind: "unavailable", currency };
28305
+ case "from":
28306
+ return readAmount(value.amount) !== null ? {
28307
+ kind: "from",
28308
+ amount: readAmount(value.amount) ?? 0,
28309
+ currency: readCurrency(value.currency)
28310
+ } : { kind: "unavailable", currency };
28311
+ default:
28312
+ return { kind: "unavailable", currency };
28313
+ }
28314
+ }
28315
+ function readAmount(value) {
28316
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
28317
+ }
28318
+
27124
28319
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
27125
28320
  import { z as z44 } from "zod";
27126
28321
 
@@ -27151,11 +28346,21 @@ var filterAutoShowSchema = z44.enum(["auto", "always", "never"]);
27151
28346
  var calendarTabViewsSchema = z44.enum(["both", "month", "week"]);
27152
28347
 
27153
28348
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28349
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
28350
+ var [
28351
+ eventRegistrationGenericDateStepLabel,
28352
+ eventRegistrationGenericTicketsStepLabel,
28353
+ eventRegistrationGenericDetailsStepLabel
28354
+ ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
27154
28355
  var contentEntrySchema = z45.object({
27155
28356
  id: z45.string(),
27156
28357
  slug: z45.string(),
27157
28358
  contentTypeSlug: z45.string()
27158
28359
  });
28360
+ var eventRegistrationPublicEventSchema = z45.preprocess(
28361
+ normalizeEventRegistrationEventInput,
28362
+ publicEventSchema
28363
+ );
27159
28364
  var eventRegistrationSourceSchema = z45.object({
27160
28365
  siteId: z45.string().optional(),
27161
28366
  apiBaseUrl: z45.string().optional(),
@@ -27163,7 +28368,7 @@ var eventRegistrationSourceSchema = z45.object({
27163
28368
  previewToken: z45.string().nullable().optional(),
27164
28369
  occurrenceContext: occurrenceContextSchema.optional(),
27165
28370
  contentEntry: contentEntrySchema.nullable().optional(),
27166
- events: z45.array(publicEventSchema).nullable().optional(),
28371
+ events: z45.array(eventRegistrationPublicEventSchema).nullable().optional(),
27167
28372
  className: z45.string().nullable().optional(),
27168
28373
  buttonText: z45.string().nullable().optional(),
27169
28374
  maxTickets: z45.string().nullable().optional(),
@@ -27178,14 +28383,21 @@ var eventRegistrationSourceSchema = z45.object({
27178
28383
  });
27179
28384
  var eventRegistrationDisplaySchema = z45.object({
27180
28385
  kind: z45.literal("event-registration"),
27181
- state: z45.literal("shell"),
28386
+ state: z45.literal("generic-shell"),
27182
28387
  className: z45.string().nullable(),
28388
+ titleText: z45.string(),
28389
+ bodyText: z45.string(),
28390
+ stepLabels: z45.tuple([
28391
+ z45.literal(eventRegistrationGenericDateStepLabel),
28392
+ z45.literal(eventRegistrationGenericTicketsStepLabel),
28393
+ z45.literal(eventRegistrationGenericDetailsStepLabel)
28394
+ ]),
27183
28395
  summaryButtonText: z45.string()
27184
28396
  });
27185
28397
  var eventRegistrationHydrationSchema = z45.object({
27186
28398
  occurrenceContext: occurrenceContextSchema.optional(),
27187
28399
  contentEntry: contentEntrySchema.nullable().optional(),
27188
- events: z45.array(publicEventSchema).nullable().optional(),
28400
+ events: z45.array(eventRegistrationPublicEventSchema).nullable().optional(),
27189
28401
  maxTickets: z45.string().optional(),
27190
28402
  showVenue: z45.boolean().optional(),
27191
28403
  showCapacity: z45.boolean().optional(),
@@ -27216,8 +28428,11 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
27216
28428
  function buildEventRegistrationDisplay(source) {
27217
28429
  return {
27218
28430
  kind: "event-registration",
27219
- state: "shell",
28431
+ state: "generic-shell",
27220
28432
  className: source.className ?? null,
28433
+ titleText: "Event registration",
28434
+ bodyText: "Preparing dates, tickets, and booking details.",
28435
+ stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
27221
28436
  summaryButtonText: source.buttonText?.trim() || "Register"
27222
28437
  };
27223
28438
  }
@@ -27244,6 +28459,18 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
27244
28459
  }
27245
28460
  })
27246
28461
  });
28462
+ function normalizeEventRegistrationEventInput(value) {
28463
+ if (!isRecord4(value)) {
28464
+ return value;
28465
+ }
28466
+ return {
28467
+ ...value,
28468
+ pricing: resolveRuntimeEventPricing(value)
28469
+ };
28470
+ }
28471
+ function isRecord4(value) {
28472
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28473
+ }
27247
28474
  var eventRegistrationInteractiveIslandPropsCodec = createInteractiveIslandCodec({
27248
28475
  runtime: eventRegistrationBlockRuntime,
27249
28476
  mode: "event-registration",
@@ -29742,7 +30969,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
29742
30969
  return keys.length >= 2 ? keys : [];
29743
30970
  }
29744
30971
  function normalizeOfferingsPreviewContentForWrite(value) {
29745
- if (!isRecord3(value)) return null;
30972
+ if (!isRecord5(value)) return null;
29746
30973
  const groupOrderValue = value.groupOrder;
29747
30974
  if (Array.isArray(groupOrderValue)) {
29748
30975
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -29755,7 +30982,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
29755
30982
  return { ...value, groupOrder: [] };
29756
30983
  }
29757
30984
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
29758
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord3) : []
30985
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
29759
30986
  );
29760
30987
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
29761
30988
  }
@@ -29769,7 +30996,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
29769
30996
  }
29770
30997
  return keys;
29771
30998
  }
29772
- function isRecord3(value) {
30999
+ function isRecord5(value) {
29773
31000
  return typeof value === "object" && value !== null && !Array.isArray(value);
29774
31001
  }
29775
31002
 
@@ -30136,7 +31363,7 @@ function isOfferingsPreviewItemLimit(value) {
30136
31363
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
30137
31364
  }
30138
31365
  function normalizeOfferingsPreviewGroupOverride(value) {
30139
- if (!isRecord4(value)) return [];
31366
+ if (!isRecord6(value)) return [];
30140
31367
  const override = {};
30141
31368
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
30142
31369
  override.sourceKey = value.sourceKey;
@@ -30168,12 +31395,12 @@ function isButtonVariant(value) {
30168
31395
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
30169
31396
  }
30170
31397
  function normalizeCardStylesContent(value) {
30171
- return isRecord4(value) || value === null ? value : void 0;
31398
+ return isRecord6(value) || value === null ? value : void 0;
30172
31399
  }
30173
31400
  function normalizeSectionStylesContent(value) {
30174
- return isRecord4(value) || value === null ? value : void 0;
31401
+ return isRecord6(value) || value === null ? value : void 0;
30175
31402
  }
30176
- function isRecord4(value) {
31403
+ function isRecord6(value) {
30177
31404
  return typeof value === "object" && value !== null && !Array.isArray(value);
30178
31405
  }
30179
31406
 
@@ -34133,11 +35360,13 @@ var heroImageSurfaceMotions = [
34133
35360
  ];
34134
35361
  var standardEyebrowTreatments = [
34135
35362
  "plain",
35363
+ "accent",
34136
35364
  "pill",
34137
35365
  "accent-pill"
34138
35366
  ];
34139
35367
  var animatedEyebrowTreatments = [
34140
35368
  "plain",
35369
+ "accent",
34141
35370
  "pill",
34142
35371
  "accent-pill",
34143
35372
  "pill-bounce",
@@ -34438,6 +35667,17 @@ var systemBlockDefinitionsRaw = [
34438
35667
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
34439
35668
  ]
34440
35669
  })),
35670
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
35671
+ flow: conversionFlow,
35672
+ layoutProfiles: [
35673
+ layoutProfile({
35674
+ variantKey: "default",
35675
+ family: "split",
35676
+ weight: "featured",
35677
+ bias: "soft"
35678
+ })
35679
+ ]
35680
+ })),
34441
35681
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
34442
35682
  sectionSurfaces: "supported",
34443
35683
  contentFrames: ["plain", "panel"],
@@ -34529,6 +35769,12 @@ var systemBlockDefinitionsRaw = [
34529
35769
  family: "media-text",
34530
35770
  weight: "featured",
34531
35771
  bias: "soft"
35772
+ }),
35773
+ layoutProfile({
35774
+ variantKey: "bio",
35775
+ family: "media-text",
35776
+ weight: "featured",
35777
+ bias: "soft"
34532
35778
  })
34533
35779
  ]
34534
35780
  })),
@@ -35561,6 +36807,11 @@ ${root} {
35561
36807
  --er-event-card-bg: rgb(var(--tb-surface));
35562
36808
  --er-event-card-border-width: var(--rb-border-width, 1px);
35563
36809
  --er-event-card-hover-opacity: 1;
36810
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
36811
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
36812
+ --er-radius: var(--rb-block-radius);
36813
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
36814
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
35564
36815
 
35565
36816
  /* Step indicator */
35566
36817
  --er-step-active: rgb(var(--tb-primary));
@@ -36792,7 +38043,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
36792
38043
  }
36793
38044
 
36794
38045
  // ../api/src/utils/isRecord.ts
36795
- function isRecord5(value) {
38046
+ function isRecord7(value) {
36796
38047
  return typeof value === "object" && value !== null && !Array.isArray(value);
36797
38048
  }
36798
38049
 
@@ -37099,7 +38350,7 @@ function sanitizeMarks(marks) {
37099
38350
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
37100
38351
  return [{ type: mark.type }];
37101
38352
  }
37102
- if (mark.type === "link" && isRecord5(mark.attrs) && typeof mark.attrs.href === "string") {
38353
+ if (mark.type === "link" && isRecord7(mark.attrs) && typeof mark.attrs.href === "string") {
37103
38354
  const attrs = { href: mark.attrs.href };
37104
38355
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
37105
38356
  attrs.target = mark.attrs.target;
@@ -37114,10 +38365,10 @@ function sanitizeMarks(marks) {
37114
38365
  return sanitized.length > 0 ? sanitized : void 0;
37115
38366
  }
37116
38367
  function unwrapRichTextValue(value) {
37117
- if (isRecord5(value) && isRecord5(value.doc)) {
38368
+ if (isRecord7(value) && isRecord7(value.doc)) {
37118
38369
  return unwrapRichTextValue(value.doc);
37119
38370
  }
37120
- if (isRecord5(value) && value.type === "doc") {
38371
+ if (isRecord7(value) && value.type === "doc") {
37121
38372
  return {
37122
38373
  type: "doc",
37123
38374
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -37126,7 +38377,7 @@ function unwrapRichTextValue(value) {
37126
38377
  return EMPTY_SITE_BANNER_BODY;
37127
38378
  }
37128
38379
  function isTipTapNodeLike(value) {
37129
- return isRecord5(value) && typeof value.type === "string";
38380
+ return isRecord7(value) && typeof value.type === "string";
37130
38381
  }
37131
38382
  function coerceTipTapNode(value) {
37132
38383
  return {
@@ -37134,9 +38385,9 @@ function coerceTipTapNode(value) {
37134
38385
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
37135
38386
  ...typeof value.text === "string" ? { text: value.text } : {},
37136
38387
  ...Array.isArray(value.marks) ? {
37137
- marks: value.marks.filter((mark) => isRecord5(mark) && typeof mark.type === "string").map((mark) => ({
38388
+ marks: value.marks.filter((mark) => isRecord7(mark) && typeof mark.type === "string").map((mark) => ({
37138
38389
  type: mark.type,
37139
- ...isRecord5(mark.attrs) ? { attrs: mark.attrs } : {}
38390
+ ...isRecord7(mark.attrs) ? { attrs: mark.attrs } : {}
37140
38391
  }))
37141
38392
  } : {}
37142
38393
  };
@@ -37230,7 +38481,7 @@ function collectCartLinkStats(items, depth = 0) {
37230
38481
  return result;
37231
38482
  }
37232
38483
  function isNavigationMenuValidationItem(value) {
37233
- if (!isRecord5(value)) return false;
38484
+ if (!isRecord7(value)) return false;
37234
38485
  return typeof value.label === "string";
37235
38486
  }
37236
38487
 
@@ -37369,6 +38620,7 @@ var SYSTEM_BLOCK_KINDS = [
37369
38620
  "block.site-footer",
37370
38621
  // Form/booking blocks
37371
38622
  "block.form",
38623
+ "block.contact-newsletter",
37372
38624
  "block.appointment-booking",
37373
38625
  "block.event-registration",
37374
38626
  "block.event-details",