@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
@@ -3250,6 +3250,46 @@ var ENDPOINT_DEFINITIONS = {
3250
3250
  auth: "user",
3251
3251
  responseKind: "json"
3252
3252
  },
3253
+ listEntrySlotBlocks: {
3254
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3255
+ method: "GET",
3256
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3257
+ auth: "user",
3258
+ responseKind: "json",
3259
+ errors: ["resource:not_found"]
3260
+ },
3261
+ listEntryPageContentSlots: {
3262
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
3263
+ method: "GET",
3264
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
3265
+ auth: "user",
3266
+ responseKind: "json",
3267
+ errors: ["resource:not_found"]
3268
+ },
3269
+ createEntrySlotBlock: {
3270
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3271
+ method: "POST",
3272
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3273
+ auth: "user",
3274
+ responseKind: "json",
3275
+ errors: ["validation:invalid_input", "resource:not_found"]
3276
+ },
3277
+ reorderEntrySlotBlocks: {
3278
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
3279
+ method: "POST",
3280
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3281
+ auth: "user",
3282
+ responseKind: "json",
3283
+ errors: ["validation:invalid_input", "resource:not_found"]
3284
+ },
3285
+ deleteEntrySlotBlock: {
3286
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
3287
+ method: "DELETE",
3288
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3289
+ auth: "user",
3290
+ responseKind: "json",
3291
+ errors: ["resource:not_found"]
3292
+ },
3253
3293
  createBlock: {
3254
3294
  path: "/sites/{siteId}/pages/{pageId}/blocks",
3255
3295
  method: "POST",
@@ -6789,6 +6829,21 @@ var selectSourceSchema = z4.discriminatedUnion("kind", [
6789
6829
  function assertNeverSelectSource(value) {
6790
6830
  throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
6791
6831
  }
6832
+ var visibleWhenPredicateSchema = z4.object({
6833
+ field: z4.string().min(1),
6834
+ equals: z4.any().optional(),
6835
+ notEquals: z4.any().optional(),
6836
+ oneOf: z4.array(z4.any()).optional(),
6837
+ notIn: z4.array(z4.any()).optional(),
6838
+ minItems: z4.number().int().nonnegative().optional(),
6839
+ maxItems: z4.number().int().nonnegative().optional()
6840
+ });
6841
+ var visibleWhenSchema = z4.union([
6842
+ visibleWhenPredicateSchema,
6843
+ z4.object({
6844
+ allOf: z4.array(visibleWhenPredicateSchema).min(1)
6845
+ })
6846
+ ]);
6792
6847
  var uiSchema = z4.object({
6793
6848
  widget: z4.string().optional(),
6794
6849
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -6821,13 +6876,7 @@ var uiSchema = z4.object({
6821
6876
  showValue: z4.boolean().optional(),
6822
6877
  pattern: z4.string().optional(),
6823
6878
  placeholder: z4.string().optional(),
6824
- visibleWhen: z4.object({
6825
- field: z4.string().min(1),
6826
- equals: z4.any().optional(),
6827
- notEquals: z4.any().optional(),
6828
- oneOf: z4.array(z4.any()).optional(),
6829
- notIn: z4.array(z4.any()).optional()
6830
- }).optional(),
6879
+ visibleWhen: visibleWhenSchema.optional(),
6831
6880
  // Modal configuration for modal and group fields
6832
6881
  modalConfig: z4.object({
6833
6882
  buttonLabel: z4.string().optional(),
@@ -7594,6 +7643,7 @@ var eventListTreatmentValues = [
7594
7643
  ];
7595
7644
  var eyebrowTreatmentValues = [
7596
7645
  "plain",
7646
+ "accent",
7597
7647
  "pill",
7598
7648
  "accent-pill",
7599
7649
  "pill-bounce",
@@ -10608,6 +10658,95 @@ var joyStamp = defineButtonPersonality({
10608
10658
  }
10609
10659
  });
10610
10660
 
10661
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
10662
+ var ornateRitual = defineButtonPersonality({
10663
+ id: "ornate-ritual",
10664
+ name: "Ornate Ritual",
10665
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
10666
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
10667
+ buttonSystem: {
10668
+ global: {
10669
+ cornerStyle: "rounded",
10670
+ shadow: "none",
10671
+ textTransform: "uppercase",
10672
+ fontWeight: 600,
10673
+ borderWidth: 1,
10674
+ hoverTransform: "none",
10675
+ hoverColor: "none",
10676
+ letterSpacing: "loose"
10677
+ },
10678
+ sizes: {
10679
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
10680
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
10681
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
10682
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
10683
+ },
10684
+ variants: [
10685
+ {
10686
+ id: "primary",
10687
+ name: "Primary",
10688
+ enabled: true,
10689
+ priority: 1,
10690
+ background: { type: "solid", colorToken: "primary" },
10691
+ textColorToken: "primaryForeground",
10692
+ borderRadius: "rounded-md",
10693
+ border: { widthClass: "border", colorToken: "primary" },
10694
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10695
+ effects: {
10696
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
10697
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
10698
+ }
10699
+ },
10700
+ {
10701
+ id: "secondary",
10702
+ name: "Secondary",
10703
+ enabled: true,
10704
+ priority: 2,
10705
+ background: { type: "solid", colorToken: "secondary" },
10706
+ textColorToken: "primaryForeground",
10707
+ borderRadius: "rounded-md",
10708
+ border: { widthClass: "border", colorToken: "primary" },
10709
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10710
+ effects: {
10711
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10712
+ }
10713
+ },
10714
+ {
10715
+ id: "outline",
10716
+ name: "Outline",
10717
+ enabled: true,
10718
+ priority: 3,
10719
+ background: { type: "transparent" },
10720
+ textColorToken: "primary",
10721
+ borderRadius: "rounded-md",
10722
+ border: { widthClass: "border", colorToken: "primary" },
10723
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10724
+ effects: {
10725
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
10726
+ }
10727
+ },
10728
+ {
10729
+ id: "ghost",
10730
+ name: "Ghost",
10731
+ enabled: true,
10732
+ priority: 3,
10733
+ background: { type: "transparent" },
10734
+ textColorToken: "accent",
10735
+ borderRadius: "rounded-none",
10736
+ sizes: {
10737
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
10738
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
10739
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
10740
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
10741
+ },
10742
+ effects: {
10743
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
10744
+ }
10745
+ }
10746
+ ]
10747
+ }
10748
+ });
10749
+
10611
10750
  // ../theme-core/src/buttons/personalities/pebble.ts
10612
10751
  var pebble = defineButtonPersonality({
10613
10752
  id: "pebble",
@@ -10881,7 +11020,8 @@ var buttonPersonalities = [
10881
11020
  inkStamp,
10882
11021
  brushedWash,
10883
11022
  showtimePill,
10884
- joyStamp
11023
+ joyStamp,
11024
+ ornateRitual
10885
11025
  ];
10886
11026
  var personalitiesById = new Map(
10887
11027
  buttonPersonalities.map((p) => [p.id, p])
@@ -11511,7 +11651,7 @@ function rgbColorValue(token) {
11511
11651
  if (alpha === void 0) {
11512
11652
  return `rgb(var(${cssVar}))`;
11513
11653
  }
11514
- return `rgba(var(${cssVar}), ${alpha})`;
11654
+ return `rgb(var(${cssVar}) / ${alpha})`;
11515
11655
  }
11516
11656
  function backgroundColorStyle(token) {
11517
11657
  return { backgroundColor: rgbColorValue(token) };
@@ -12616,6 +12756,28 @@ var warmDarkEmber = definePaletteVariant({
12616
12756
  { name: "border", hex: "#894e31" }
12617
12757
  ]
12618
12758
  });
12759
+ var warmDarkKirtanGold = definePaletteVariant({
12760
+ id: "warm-dark-kirtan-gold",
12761
+ name: "Warm Dark \u2014 Kirtan Gold",
12762
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
12763
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
12764
+ mode: "dark",
12765
+ colors: [
12766
+ { name: "primary", hex: "#ffcdb2" },
12767
+ { name: "secondary", hex: "#b5838d" },
12768
+ { name: "accent", hex: "#e5989b" },
12769
+ { name: "success", hex: "#8fbf8f" },
12770
+ { name: "warning", hex: "#f2b86b" },
12771
+ { name: "destructive", hex: "#d96b6b" },
12772
+ { name: "background", hex: "#403944" },
12773
+ { name: "surface", hex: "#403944" },
12774
+ { name: "surfaceAlt", hex: "#372f3b" },
12775
+ { name: "muted", hex: "#4d4550" },
12776
+ { name: "text", hex: "#e6d2d5" },
12777
+ { name: "primaryForeground", hex: "#403944" },
12778
+ { name: "border", hex: "#8d747a" }
12779
+ ]
12780
+ });
12619
12781
 
12620
12782
  // ../theme-core/src/palette/variants/index.ts
12621
12783
  var paletteVariants = [
@@ -12639,7 +12801,8 @@ var paletteVariants = [
12639
12801
  softNaturalWatercolor,
12640
12802
  softNaturalLilac,
12641
12803
  // Warm-dark family (dark mode)
12642
- warmDarkEmber
12804
+ warmDarkEmber,
12805
+ warmDarkKirtanGold
12643
12806
  ];
12644
12807
  var paletteVariantsById = new Map(
12645
12808
  paletteVariants.map((v) => [v.id, v])
@@ -14208,9 +14371,125 @@ function headerConfigurationKey(configuration) {
14208
14371
  function asFooterLookId(value) {
14209
14372
  return value;
14210
14373
  }
14211
- var guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
14374
+ function asFooterLayoutId(value) {
14375
+ return value;
14376
+ }
14377
+ function asFooterStyleId(value) {
14378
+ return value;
14379
+ }
14380
+ var guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
14381
+ var footerLayoutCatalog = defineExactCatalog()([
14382
+ {
14383
+ id: asFooterLayoutId("identity"),
14384
+ label: "Identity",
14385
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
14386
+ },
14387
+ {
14388
+ id: asFooterLayoutId("centered"),
14389
+ label: "Centered",
14390
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
14391
+ maxRecommendedNavDensity: "sparse"
14392
+ },
14393
+ {
14394
+ id: asFooterLayoutId("split"),
14395
+ label: "Split",
14396
+ description: "Navigation and brand signoff separated into a wider split footer.",
14397
+ requiresFooterNav: true,
14398
+ maxRecommendedNavDensity: "balanced"
14399
+ },
14400
+ {
14401
+ id: asFooterLayoutId("columns"),
14402
+ label: "Columns",
14403
+ description: "Grouped footer navigation columns with a supporting bottom line.",
14404
+ requiresFooterNav: true,
14405
+ requiresFooterNavGroups: true
14406
+ }
14407
+ ]);
14408
+ var footerStyleCatalog = defineExactCatalog()([
14409
+ {
14410
+ id: asFooterStyleId("quiet"),
14411
+ label: "Quiet",
14412
+ description: "Lightweight, practical footer treatment."
14413
+ },
14414
+ {
14415
+ id: asFooterStyleId("calm"),
14416
+ label: "Calm",
14417
+ description: "Soft centered treatment with restrained dividers."
14418
+ },
14419
+ {
14420
+ id: asFooterStyleId("editorial"),
14421
+ label: "Editorial",
14422
+ description: "Text-forward treatment with fine-line structure."
14423
+ },
14424
+ {
14425
+ id: asFooterStyleId("brand-band"),
14426
+ label: "Brand band",
14427
+ description: "High-contrast brand treatment with a stronger bottom bar."
14428
+ }
14429
+ ]);
14430
+ var footerLayoutsById = new Map(
14431
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
14432
+ );
14433
+ var footerStylesById = new Map(
14434
+ footerStyleCatalog.map((style) => [style.id, style])
14435
+ );
14436
+ function identityQuietFooter(theme) {
14437
+ return {
14438
+ ...theme.footer,
14439
+ variant: "simple",
14440
+ maxWidth: "container",
14441
+ background: {
14442
+ type: "color",
14443
+ color: "surface"
14444
+ },
14445
+ navStyle: "minimal",
14446
+ navWeight: "regular",
14447
+ navColor: "text",
14448
+ navLinkStyle: {
14449
+ typography: "body",
14450
+ fontWeight: "regular",
14451
+ textTransform: "none",
14452
+ italic: false,
14453
+ colorToken: "text",
14454
+ hoverColorToken: "primary",
14455
+ padding: "none",
14456
+ borderRadius: "none"
14457
+ },
14458
+ navLayout: {
14459
+ layout: "inline-wrap",
14460
+ align: "start",
14461
+ gapX: "default",
14462
+ gapY: "tight"
14463
+ },
14464
+ logo: {
14465
+ showLogo: true,
14466
+ showLogoText: true,
14467
+ placement: "left",
14468
+ size: "sm",
14469
+ align: "start"
14470
+ },
14471
+ bottomBar: {
14472
+ enabled: false,
14473
+ fullBleed: false,
14474
+ textAlign: "left",
14475
+ paddingX: "default",
14476
+ paddingY: "compact",
14477
+ borderTop: {
14478
+ width: "none"
14479
+ }
14480
+ }
14481
+ };
14482
+ }
14212
14483
  function mutedGroundingFooter(theme) {
14213
- return theme.footer;
14484
+ return {
14485
+ ...identityQuietFooter(theme),
14486
+ background: theme.footer.background,
14487
+ navStyle: theme.footer.navStyle,
14488
+ navColor: theme.footer.navColor,
14489
+ navWeight: theme.footer.navWeight,
14490
+ navLinkStyle: theme.footer.navLinkStyle,
14491
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
14492
+ };
14214
14493
  }
14215
14494
  function brandTwoBandFooter(theme) {
14216
14495
  return {
@@ -14315,6 +14594,53 @@ function centeredCalmFooter(theme) {
14315
14594
  }
14316
14595
  };
14317
14596
  }
14597
+ function splitEditorialFooter(theme) {
14598
+ return {
14599
+ ...theme.footer,
14600
+ variant: "split",
14601
+ maxWidth: "container",
14602
+ background: {
14603
+ type: "color",
14604
+ color: "surface"
14605
+ },
14606
+ navStyle: "minimal",
14607
+ navWeight: "regular",
14608
+ navColor: "text",
14609
+ navLinkStyle: {
14610
+ typography: "body",
14611
+ fontWeight: "regular",
14612
+ textTransform: "none",
14613
+ italic: false,
14614
+ colorToken: "text",
14615
+ hoverColorToken: "primary",
14616
+ padding: "none",
14617
+ borderRadius: "none"
14618
+ },
14619
+ navLayout: {
14620
+ layout: "inline-wrap",
14621
+ align: "start",
14622
+ gapX: "relaxed",
14623
+ gapY: "tight"
14624
+ },
14625
+ logo: {
14626
+ showLogo: true,
14627
+ showLogoText: true,
14628
+ placement: "right",
14629
+ size: "sm",
14630
+ align: "end"
14631
+ },
14632
+ bottomBar: {
14633
+ enabled: true,
14634
+ fullBleed: false,
14635
+ textAlign: "left",
14636
+ paddingX: "default",
14637
+ paddingY: "compact",
14638
+ borderTop: {
14639
+ width: "thin"
14640
+ }
14641
+ }
14642
+ };
14643
+ }
14318
14644
  function editorialColumnsFooter(theme) {
14319
14645
  return {
14320
14646
  ...theme.footer,
@@ -14357,25 +14683,47 @@ function editorialColumnsFooter(theme) {
14357
14683
  };
14358
14684
  }
14359
14685
  var footerLookCatalog = defineExactCatalog()([
14686
+ {
14687
+ id: asFooterLookId("footer-identity-quiet"),
14688
+ label: "Identity footer",
14689
+ layoutId: asFooterLayoutId("identity"),
14690
+ styleId: asFooterStyleId("quiet"),
14691
+ compile: identityQuietFooter
14692
+ },
14360
14693
  {
14361
14694
  id: asFooterLookId("footer-muted-grounding"),
14362
14695
  label: "Muted grounding footer",
14696
+ layoutId: asFooterLayoutId("identity"),
14697
+ styleId: asFooterStyleId("quiet"),
14698
+ hiddenFromLayoutStyleControls: true,
14363
14699
  compile: mutedGroundingFooter
14364
14700
  },
14365
14701
  {
14366
14702
  id: asFooterLookId("footer-centered-calm"),
14367
14703
  label: "Centered calm footer",
14704
+ layoutId: asFooterLayoutId("centered"),
14705
+ styleId: asFooterStyleId("calm"),
14368
14706
  compile: centeredCalmFooter
14369
14707
  },
14708
+ {
14709
+ id: asFooterLookId("footer-split-editorial"),
14710
+ label: "Split editorial footer",
14711
+ layoutId: asFooterLayoutId("split"),
14712
+ styleId: asFooterStyleId("editorial"),
14713
+ compile: splitEditorialFooter
14714
+ },
14370
14715
  {
14371
14716
  id: asFooterLookId("footer-editorial-columns"),
14372
14717
  label: "Editorial columns footer",
14718
+ layoutId: asFooterLayoutId("columns"),
14719
+ styleId: asFooterStyleId("editorial"),
14373
14720
  compile: editorialColumnsFooter
14374
14721
  },
14375
14722
  {
14376
14723
  id: asFooterLookId("site-footer-brand-two-band"),
14377
14724
  label: "Two-band brand footer",
14378
- maxRecommendedNavDensity: "balanced",
14725
+ layoutId: asFooterLayoutId("split"),
14726
+ styleId: asFooterStyleId("brand-band"),
14379
14727
  allowedContentPresence: ["default-footer", "default-and-blocks"],
14380
14728
  compile: brandTwoBandFooter
14381
14729
  }
@@ -14578,6 +14926,30 @@ var luxeContrastTypography = {
14578
14926
  },
14579
14927
  scale: "spacious"
14580
14928
  };
14929
+ var kirtanOrnateTypography = {
14930
+ body: {
14931
+ family: "Jost, system-ui, sans-serif",
14932
+ size: "md",
14933
+ weight: "regular",
14934
+ lineHeight: "relaxed",
14935
+ letterSpacing: "normal"
14936
+ },
14937
+ headings: {
14938
+ default: {
14939
+ family: "Marcellus, Georgia, serif",
14940
+ weight: "regular",
14941
+ lineHeight: "normal",
14942
+ letterSpacing: "normal",
14943
+ colorToken: "primary",
14944
+ italic: null,
14945
+ case: null
14946
+ },
14947
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14948
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14949
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
14950
+ },
14951
+ scale: "spacious"
14952
+ };
14581
14953
  var boldDisplayTypography = {
14582
14954
  body: {
14583
14955
  family: "Manrope, system-ui, sans-serif",
@@ -14612,16 +14984,16 @@ var originalJoyTypography = {
14612
14984
  },
14613
14985
  headings: {
14614
14986
  default: {
14615
- family: "Bricolage Grotesque, system-ui, sans-serif",
14616
- weight: "bold",
14987
+ family: "Lobster, cursive",
14988
+ weight: "regular",
14617
14989
  lineHeight: "normal",
14618
- letterSpacing: "tight",
14990
+ letterSpacing: "normal",
14619
14991
  italic: null,
14620
14992
  case: null
14621
14993
  },
14622
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14623
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14624
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
14994
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14995
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14996
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
14625
14997
  },
14626
14998
  scale: "balanced"
14627
14999
  };
@@ -14686,6 +15058,32 @@ var typographyPresets = [
14686
15058
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14687
15059
  typography: luxeContrastTypography
14688
15060
  }),
15061
+ defineTypographyPreset({
15062
+ id: "typography-preset:kirtan-ornate",
15063
+ name: "Kirtan Ornate",
15064
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
15065
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
15066
+ recommendedFonts: {
15067
+ body: ["Jost", "Manrope", "Inter"],
15068
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
15069
+ },
15070
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
15071
+ typography: kirtanOrnateTypography,
15072
+ heroTypography: {
15073
+ headlineSize: "6xl",
15074
+ headlineLineHeight: "normal",
15075
+ subheadlineSize: "xl",
15076
+ subheadlineLineHeight: "relaxed",
15077
+ microHeadlineSize: "5xl",
15078
+ microHeadlineLineHeight: "normal",
15079
+ microSubheadlineSize: "lg",
15080
+ microSubheadlineLineHeight: "relaxed",
15081
+ responsive: {
15082
+ tablet: { headlineSize: "5xl" },
15083
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
15084
+ }
15085
+ }
15086
+ }),
14689
15087
  defineTypographyPreset({
14690
15088
  id: "typography-preset:bold-display",
14691
15089
  name: "Bold Display",
@@ -14715,11 +15113,11 @@ var typographyPresets = [
14715
15113
  defineTypographyPreset({
14716
15114
  id: "typography-preset:original-joy",
14717
15115
  name: "Original Joy",
14718
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
14719
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
15116
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
15117
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
14720
15118
  recommendedFonts: {
14721
15119
  body: ["DM Sans", "Inter", "Manrope"],
14722
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
15120
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
14723
15121
  },
14724
15122
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14725
15123
  typography: originalJoyTypography,
@@ -14743,6 +15141,319 @@ var typographyPresetsById = new Map(
14743
15141
  typographyPresets.map((preset2) => [preset2.id, preset2])
14744
15142
  );
14745
15143
 
15144
+ // ../theme-core/src/site-styles/designState.ts
15145
+ import { z as z24 } from "zod";
15146
+ var themeV2DesignStateSchemaVersion = 1;
15147
+ var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
15148
+ var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
15149
+ var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
15150
+ fields3[0],
15151
+ ...fields3.slice(1)
15152
+ ]);
15153
+ var heroLegibilityStrategySchema = z24.enum([
15154
+ "none",
15155
+ "scrim-gradient",
15156
+ "solid-panel"
15157
+ ]);
15158
+ var heroCompositionIntentSchema = z24.enum([
15159
+ "center",
15160
+ "bottom-left"
15161
+ ]);
15162
+ var heroTypographyScaleIntentSchema = z24.enum([
15163
+ "quiet",
15164
+ "editorial",
15165
+ "display",
15166
+ "poster"
15167
+ ]);
15168
+ var sectionHeightIntentSchema = z24.enum([
15169
+ "default",
15170
+ "banner",
15171
+ "hero",
15172
+ "immersive"
15173
+ ]);
15174
+ var imageSurfaceTreatmentIntensitySchema = z24.enum(["soft", "balanced", "strong"]);
15175
+ var imageSurfaceMotionSchema = z24.enum(["static", "fixed-frame"]);
15176
+ var imageSurfaceTreatmentSchema = z24.discriminatedUnion("kind", [
15177
+ z24.object({ kind: z24.literal("none") }).strict(),
15178
+ z24.object({
15179
+ kind: z24.literal("brand-scrim"),
15180
+ token: z24.enum(["primary", "secondary", "accent"]),
15181
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15182
+ }).strict(),
15183
+ z24.object({
15184
+ kind: z24.literal("brand-wash"),
15185
+ token: z24.enum(["primary", "secondary", "accent"]),
15186
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15187
+ }).strict(),
15188
+ z24.object({
15189
+ kind: z24.literal("neutral-scrim"),
15190
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15191
+ }).strict(),
15192
+ z24.object({
15193
+ kind: z24.literal("neutral-wash"),
15194
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15195
+ }).strict(),
15196
+ z24.object({
15197
+ kind: z24.literal("solid-panel"),
15198
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15199
+ }).strict()
15200
+ ]);
15201
+ var testimonialCardTreatmentSchema = z24.enum(["default", "accent-quote"]);
15202
+ var tileTreatmentSchema = z24.enum(tileTreatmentValues);
15203
+ var eventListTreatmentSchema = z24.enum(eventListTreatmentValues);
15204
+ var eyebrowTreatmentSchema = z24.enum(eyebrowTreatmentValues);
15205
+ function uniqueNonEmpty(values) {
15206
+ const uniqueValues = [...new Set(values)];
15207
+ const firstValue = uniqueValues[0];
15208
+ if (!firstValue) {
15209
+ throw new Error("Expected at least one Theme V2 design state option.");
15210
+ }
15211
+ return [firstValue, ...uniqueValues.slice(1)];
15212
+ }
15213
+ var userPanelTreatments = uniqueNonEmpty(
15214
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
15215
+ );
15216
+ var userFlushTreatments = uniqueNonEmpty(
15217
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
15218
+ );
15219
+ var userFlushBleeds = uniqueNonEmpty(
15220
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
15221
+ );
15222
+ var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
15223
+ z24.object({ kind: z24.literal("plain") }).strict(),
15224
+ z24.object({
15225
+ kind: z24.literal("panel"),
15226
+ treatment: z24.enum(userPanelTreatments)
15227
+ }).strict(),
15228
+ z24.object({
15229
+ kind: z24.literal("flush-panel"),
15230
+ treatment: z24.enum(userFlushTreatments),
15231
+ bleed: z24.enum(userFlushBleeds)
15232
+ }).strict()
15233
+ ]);
15234
+ var blockDesignPlanSchema = z24.object({
15235
+ blockId: z24.string().min(1).transform(asDesignBlockId),
15236
+ blockKind: z24.string().min(1),
15237
+ purpose: z24.string().min(1),
15238
+ sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
15239
+ contentFrame: contentFrameIntentSchema,
15240
+ itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
15241
+ transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
15242
+ emphasis: z24.enum(userDesignOptionCatalog.emphases),
15243
+ sectionHeight: sectionHeightIntentSchema.optional(),
15244
+ heroLegibility: heroLegibilityStrategySchema.optional(),
15245
+ heroComposition: heroCompositionIntentSchema.optional(),
15246
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
15247
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
15248
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
15249
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
15250
+ tileTreatment: tileTreatmentSchema.optional(),
15251
+ eventListTreatment: eventListTreatmentSchema.optional(),
15252
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
15253
+ }).strict();
15254
+ var styleAuthoritySchema = z24.discriminatedUnion("kind", [
15255
+ z24.object({
15256
+ kind: z24.literal("theme-v2"),
15257
+ source: designResolutionPolicySchema,
15258
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
15259
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
15260
+ templateVersion: z24.number().int().nonnegative(),
15261
+ resolverVersion: z24.number().int().nonnegative()
15262
+ }).strict(),
15263
+ z24.object({
15264
+ kind: z24.literal("legacy-raw"),
15265
+ reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
15266
+ }).strict(),
15267
+ z24.object({
15268
+ kind: z24.literal("advanced-detached"),
15269
+ reason: z24.literal("detached-custom-runtime-fields")
15270
+ }).strict()
15271
+ ]);
15272
+ var blockRuntimeStyleAuthoritySchema = z24.object({
15273
+ unit: z24.literal("block-runtime-fields"),
15274
+ blockId: z24.string().min(1).transform(asDesignBlockId),
15275
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
15276
+ authority: styleAuthoritySchema
15277
+ }).strict();
15278
+ var persistedPageDesignStateV1Schema = z24.object({
15279
+ schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
15280
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
15281
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
15282
+ templateVersion: z24.number().int().nonnegative(),
15283
+ resolverVersion: z24.number().int().nonnegative(),
15284
+ rhythmPresetId: z24.string().min(1),
15285
+ blocks: z24.array(blockDesignPlanSchema),
15286
+ styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
15287
+ }).strict();
15288
+
15289
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
15290
+ function defineDesignRuntimeRules(rules) {
15291
+ return rules;
15292
+ }
15293
+ function defineComponentRuntimeRules(rules) {
15294
+ return rules;
15295
+ }
15296
+ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
15297
+ sectionSurfaces: {
15298
+ base: {},
15299
+ "muted-band": {
15300
+ background: {
15301
+ type: "color",
15302
+ color: "muted"
15303
+ }
15304
+ },
15305
+ "accent-band": {
15306
+ background: {
15307
+ type: "color",
15308
+ color: "primary"
15309
+ }
15310
+ },
15311
+ "brand-depth-band": {
15312
+ background: {
15313
+ type: "color",
15314
+ color: "primary-800"
15315
+ }
15316
+ },
15317
+ "hero-image": {
15318
+ background: {
15319
+ type: "image",
15320
+ opacity: 1,
15321
+ position: "center center",
15322
+ ...uniformSectionForeground("text")
15323
+ }
15324
+ }
15325
+ },
15326
+ heroLegibility: {
15327
+ "scrim-gradient": {
15328
+ type: "gradient",
15329
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
15330
+ opacity: 1
15331
+ },
15332
+ "solid-panel": {
15333
+ type: "color",
15334
+ color: "surface",
15335
+ opacity: 0.88
15336
+ }
15337
+ },
15338
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
15339
+ });
15340
+ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
15341
+ panelFrames: {
15342
+ inset: {
15343
+ spacing: "comfortable",
15344
+ rounded: "xl",
15345
+ raised: false,
15346
+ background: {
15347
+ type: "color",
15348
+ color: "surfaceAlt",
15349
+ textColor: "text"
15350
+ }
15351
+ },
15352
+ raised: {
15353
+ spacing: "comfortable",
15354
+ rounded: "xl",
15355
+ raised: true,
15356
+ background: {
15357
+ type: "color",
15358
+ color: "surfaceAlt",
15359
+ textColor: "text"
15360
+ }
15361
+ },
15362
+ editorial: {
15363
+ spacing: "medium",
15364
+ rounded: "xl",
15365
+ raised: false,
15366
+ background: {
15367
+ type: "color",
15368
+ color: "surface",
15369
+ textColor: "text"
15370
+ }
15371
+ }
15372
+ },
15373
+ flushFrames: {
15374
+ "media-panel": {
15375
+ fullWidth: true,
15376
+ spacing: "none",
15377
+ rounded: "none",
15378
+ raised: false
15379
+ }
15380
+ },
15381
+ itemSurfaces: {
15382
+ none: null,
15383
+ default: {
15384
+ spacing: "medium",
15385
+ rounded: "lg",
15386
+ raised: false
15387
+ },
15388
+ flat: {
15389
+ spacing: "medium",
15390
+ rounded: "lg",
15391
+ raised: false
15392
+ },
15393
+ outlined: {
15394
+ spacing: "medium",
15395
+ rounded: "lg",
15396
+ raised: false,
15397
+ border: {
15398
+ enabled: true,
15399
+ width: "1",
15400
+ colorToken: "border"
15401
+ }
15402
+ },
15403
+ raised: {
15404
+ spacing: "medium",
15405
+ rounded: "xl",
15406
+ raised: true
15407
+ },
15408
+ inset: {
15409
+ treatment: "soft-panel",
15410
+ spacing: "comfortable",
15411
+ rounded: "xl",
15412
+ raised: false,
15413
+ border: {
15414
+ enabled: false
15415
+ },
15416
+ background: {
15417
+ type: "color",
15418
+ color: "surfaceAlt",
15419
+ textColor: "text"
15420
+ }
15421
+ },
15422
+ editorial: {
15423
+ // Boxless open column with a short rule on top; the visual treatment
15424
+ // lives in blocks-static/card-treatments.css.
15425
+ treatment: "editorial-rule",
15426
+ spacing: "none",
15427
+ rounded: "none",
15428
+ raised: false,
15429
+ border: {
15430
+ enabled: false
15431
+ }
15432
+ },
15433
+ "color-blocked": {
15434
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
15435
+ // (by position) and staggered offset live in
15436
+ // blocks-static/card-treatments.css; here we set the shared shape:
15437
+ // generous padding, large radius, no border, flat (no shadow).
15438
+ treatment: "color-blocked",
15439
+ spacing: "spacious",
15440
+ rounded: "2xl",
15441
+ raised: false,
15442
+ border: {
15443
+ enabled: false
15444
+ }
15445
+ }
15446
+ }
15447
+ });
15448
+ function uniformSectionForeground(token) {
15449
+ return {
15450
+ textColor: token,
15451
+ headingColor: token,
15452
+ linkColor: token,
15453
+ supportingColor: token
15454
+ };
15455
+ }
15456
+
14746
15457
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
14747
15458
  var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
14748
15459
  var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
@@ -14761,6 +15472,7 @@ var curatedSiteStyleIdValues = [
14761
15472
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
14762
15473
  "site-style:bold-launch",
14763
15474
  "site-style:south-west-twerk-school",
15475
+ "site-style:kirtan-ornate",
14764
15476
  "site-style:original-joy"
14765
15477
  ];
14766
15478
  var quietBudget = {
@@ -14787,6 +15499,50 @@ var expressiveBudget = {
14787
15499
  mediaDensity: "high",
14788
15500
  decorativeRepetition: "medium"
14789
15501
  };
15502
+ var kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
15503
+ ...defaultDesignRuntimeRules,
15504
+ defaultEyebrowTreatment: "accent",
15505
+ sectionSurfaces: {
15506
+ ...defaultDesignRuntimeRules.sectionSurfaces,
15507
+ "muted-band": {
15508
+ background: {
15509
+ type: "color",
15510
+ color: "muted"
15511
+ },
15512
+ foreground: {
15513
+ textColor: "text",
15514
+ headingColor: "primary",
15515
+ linkColor: "primary",
15516
+ supportingColor: "text"
15517
+ }
15518
+ },
15519
+ "brand-depth-band": {
15520
+ background: {
15521
+ type: "color",
15522
+ color: "primary-800"
15523
+ },
15524
+ foreground: {
15525
+ textColor: "text",
15526
+ headingColor: "primary",
15527
+ linkColor: "primary",
15528
+ supportingColor: "text"
15529
+ }
15530
+ },
15531
+ "hero-image": {
15532
+ background: {
15533
+ type: "image",
15534
+ opacity: 1,
15535
+ position: "center center"
15536
+ },
15537
+ foreground: {
15538
+ textColor: "text",
15539
+ headingColor: "primary",
15540
+ linkColor: "primary",
15541
+ supportingColor: "text"
15542
+ }
15543
+ }
15544
+ }
15545
+ });
14790
15546
  var expressiveUnderlineInputs = {
14791
15547
  base: {
14792
15548
  background: { type: "transparent" },
@@ -14824,6 +15580,43 @@ var expressiveUnderlineInputs = {
14824
15580
  opacity: 0.6
14825
15581
  }
14826
15582
  };
15583
+ var ornateDarkInputs = {
15584
+ base: {
15585
+ background: { type: "solid", colorToken: "surfaceAlt" },
15586
+ textColorToken: "text",
15587
+ border: {
15588
+ widthClass: "border",
15589
+ colorToken: "primary/45",
15590
+ style: "all"
15591
+ },
15592
+ corners: "square",
15593
+ shadow: null,
15594
+ spacing: "medium",
15595
+ fontSize: "base"
15596
+ },
15597
+ label: {
15598
+ textColorToken: "primary",
15599
+ fontWeight: "semibold",
15600
+ fontSize: "xs",
15601
+ textTransform: "uppercase",
15602
+ letterSpacing: "wider",
15603
+ opacity: 1
15604
+ },
15605
+ focus: {
15606
+ ringColorToken: "primary/18",
15607
+ ringWidth: "2",
15608
+ borderColorToken: "primary/70"
15609
+ },
15610
+ error: {
15611
+ borderColorToken: "destructive",
15612
+ textColorToken: "destructive"
15613
+ },
15614
+ disabled: {
15615
+ backgroundColorToken: "muted",
15616
+ textColorToken: "mutedText",
15617
+ opacity: 0.6
15618
+ }
15619
+ };
14827
15620
  function uniqueContentFrameKinds() {
14828
15621
  const kinds = [
14829
15622
  ...new Set(
@@ -14881,6 +15674,7 @@ function defineCuratedSiteStyle(input) {
14881
15674
  // clean/minimal styles default to none.
14882
15675
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
14883
15676
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
15677
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
14884
15678
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
14885
15679
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
14886
15680
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -15831,6 +16625,80 @@ var curatedSiteStyles = [
15831
16625
  paletteChoice("high-contrast-ink")
15832
16626
  ]
15833
16627
  }),
16628
+ defineCuratedSiteStyle({
16629
+ id: "site-style:kirtan-ornate",
16630
+ name: "Kirtan Ornate",
16631
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
16632
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
16633
+ 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.",
16634
+ selectionKeywordRules: [
16635
+ { kind: "word", value: "kirtan" },
16636
+ { kind: "word", value: "chanting" },
16637
+ { kind: "word", value: "ceremony" },
16638
+ { kind: "word", value: "devotional" }
16639
+ ],
16640
+ tokenRecipes: {
16641
+ palette: "brand-led",
16642
+ contrast: "strong",
16643
+ radius: "soft",
16644
+ shadow: "subtle",
16645
+ typography: "serif-editorial",
16646
+ spacing: "airy",
16647
+ motion: "subtle"
16648
+ },
16649
+ compositionBudget: expressiveBudget,
16650
+ typographyPresetChoices: [
16651
+ typographyChoice("typography-preset:kirtan-ornate"),
16652
+ typographyChoice("typography-preset:luxe-contrast"),
16653
+ typographyChoice("typography-preset:editorial-serif")
16654
+ ],
16655
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
16656
+ themeOverrides: {
16657
+ accordions: warmInsetAccordionSystem,
16658
+ cards: originalJoyCardSystem,
16659
+ testimonialQuote: serifDisplayQuote,
16660
+ bodyText: {
16661
+ intro: {
16662
+ paragraphSize: "editorial",
16663
+ headingSize: "editorial"
16664
+ }
16665
+ },
16666
+ inputs: ornateDarkInputs
16667
+ },
16668
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
16669
+ recommendedAppearancePresetIds: [
16670
+ "hero-brand-scrim-fixed-frame",
16671
+ "media-text-quiet-story",
16672
+ "events-lined-panel",
16673
+ "schedule-details-brand-depth",
16674
+ "testimonials-statement-cards",
16675
+ "contact-form-panel"
16676
+ ],
16677
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
16678
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
16679
+ recommendedHeaderStyleChoicesByLayout: {
16680
+ floating: [
16681
+ headerStyleChoice("minimal-surface"),
16682
+ headerStyleChoice("split-glass"),
16683
+ headerStyleChoice("glass")
16684
+ ]
16685
+ },
16686
+ recommendedHeaderLookIds: ["minimal-transparent"],
16687
+ recommendedFooterLookIds: [
16688
+ "site-footer-brand-two-band",
16689
+ "footer-muted-grounding"
16690
+ ],
16691
+ buttonPersonalityChoices: [
16692
+ buttonChoice("ornate-ritual"),
16693
+ buttonChoice("joy-stamp"),
16694
+ buttonChoice("ink-stamp")
16695
+ ],
16696
+ paletteVariantChoices: [
16697
+ paletteChoice("warm-dark-kirtan-gold"),
16698
+ paletteChoice("warm-dark-ember"),
16699
+ paletteChoice("brand-led-burgundy-gold")
16700
+ ]
16701
+ }),
15834
16702
  defineCuratedSiteStyle({
15835
16703
  id: "site-style:original-joy",
15836
16704
  name: "Original Joy",
@@ -15934,319 +16802,6 @@ var pageFlowPresets = [
15934
16802
  }
15935
16803
  ];
15936
16804
 
15937
- // ../theme-core/src/site-styles/designState.ts
15938
- import { z as z24 } from "zod";
15939
- var themeV2DesignStateSchemaVersion = 1;
15940
- var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
15941
- var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
15942
- var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
15943
- fields3[0],
15944
- ...fields3.slice(1)
15945
- ]);
15946
- var heroLegibilityStrategySchema = z24.enum([
15947
- "none",
15948
- "scrim-gradient",
15949
- "solid-panel"
15950
- ]);
15951
- var heroCompositionIntentSchema = z24.enum([
15952
- "center",
15953
- "bottom-left"
15954
- ]);
15955
- var heroTypographyScaleIntentSchema = z24.enum([
15956
- "quiet",
15957
- "editorial",
15958
- "display",
15959
- "poster"
15960
- ]);
15961
- var sectionHeightIntentSchema = z24.enum([
15962
- "default",
15963
- "banner",
15964
- "hero",
15965
- "immersive"
15966
- ]);
15967
- var imageSurfaceTreatmentIntensitySchema = z24.enum(["soft", "balanced", "strong"]);
15968
- var imageSurfaceMotionSchema = z24.enum(["static", "fixed-frame"]);
15969
- var imageSurfaceTreatmentSchema = z24.discriminatedUnion("kind", [
15970
- z24.object({ kind: z24.literal("none") }).strict(),
15971
- z24.object({
15972
- kind: z24.literal("brand-scrim"),
15973
- token: z24.enum(["primary", "secondary", "accent"]),
15974
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15975
- }).strict(),
15976
- z24.object({
15977
- kind: z24.literal("brand-wash"),
15978
- token: z24.enum(["primary", "secondary", "accent"]),
15979
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15980
- }).strict(),
15981
- z24.object({
15982
- kind: z24.literal("neutral-scrim"),
15983
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15984
- }).strict(),
15985
- z24.object({
15986
- kind: z24.literal("neutral-wash"),
15987
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15988
- }).strict(),
15989
- z24.object({
15990
- kind: z24.literal("solid-panel"),
15991
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15992
- }).strict()
15993
- ]);
15994
- var testimonialCardTreatmentSchema = z24.enum(["default", "accent-quote"]);
15995
- var tileTreatmentSchema = z24.enum(tileTreatmentValues);
15996
- var eventListTreatmentSchema = z24.enum(eventListTreatmentValues);
15997
- var eyebrowTreatmentSchema = z24.enum(eyebrowTreatmentValues);
15998
- function uniqueNonEmpty(values) {
15999
- const uniqueValues = [...new Set(values)];
16000
- const firstValue = uniqueValues[0];
16001
- if (!firstValue) {
16002
- throw new Error("Expected at least one Theme V2 design state option.");
16003
- }
16004
- return [firstValue, ...uniqueValues.slice(1)];
16005
- }
16006
- var userPanelTreatments = uniqueNonEmpty(
16007
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
16008
- );
16009
- var userFlushTreatments = uniqueNonEmpty(
16010
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
16011
- );
16012
- var userFlushBleeds = uniqueNonEmpty(
16013
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
16014
- );
16015
- var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
16016
- z24.object({ kind: z24.literal("plain") }).strict(),
16017
- z24.object({
16018
- kind: z24.literal("panel"),
16019
- treatment: z24.enum(userPanelTreatments)
16020
- }).strict(),
16021
- z24.object({
16022
- kind: z24.literal("flush-panel"),
16023
- treatment: z24.enum(userFlushTreatments),
16024
- bleed: z24.enum(userFlushBleeds)
16025
- }).strict()
16026
- ]);
16027
- var blockDesignPlanSchema = z24.object({
16028
- blockId: z24.string().min(1).transform(asDesignBlockId),
16029
- blockKind: z24.string().min(1),
16030
- purpose: z24.string().min(1),
16031
- sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
16032
- contentFrame: contentFrameIntentSchema,
16033
- itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
16034
- transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
16035
- emphasis: z24.enum(userDesignOptionCatalog.emphases),
16036
- sectionHeight: sectionHeightIntentSchema.optional(),
16037
- heroLegibility: heroLegibilityStrategySchema.optional(),
16038
- heroComposition: heroCompositionIntentSchema.optional(),
16039
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
16040
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
16041
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
16042
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
16043
- tileTreatment: tileTreatmentSchema.optional(),
16044
- eventListTreatment: eventListTreatmentSchema.optional(),
16045
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
16046
- }).strict();
16047
- var styleAuthoritySchema = z24.discriminatedUnion("kind", [
16048
- z24.object({
16049
- kind: z24.literal("theme-v2"),
16050
- source: designResolutionPolicySchema,
16051
- siteStyleId: z24.string().min(1).transform(asSiteStyleId),
16052
- templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
16053
- templateVersion: z24.number().int().nonnegative(),
16054
- resolverVersion: z24.number().int().nonnegative()
16055
- }).strict(),
16056
- z24.object({
16057
- kind: z24.literal("legacy-raw"),
16058
- reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
16059
- }).strict(),
16060
- z24.object({
16061
- kind: z24.literal("advanced-detached"),
16062
- reason: z24.literal("detached-custom-runtime-fields")
16063
- }).strict()
16064
- ]);
16065
- var blockRuntimeStyleAuthoritySchema = z24.object({
16066
- unit: z24.literal("block-runtime-fields"),
16067
- blockId: z24.string().min(1).transform(asDesignBlockId),
16068
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
16069
- authority: styleAuthoritySchema
16070
- }).strict();
16071
- var persistedPageDesignStateV1Schema = z24.object({
16072
- schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
16073
- siteStyleId: z24.string().min(1).transform(asSiteStyleId),
16074
- templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
16075
- templateVersion: z24.number().int().nonnegative(),
16076
- resolverVersion: z24.number().int().nonnegative(),
16077
- rhythmPresetId: z24.string().min(1),
16078
- blocks: z24.array(blockDesignPlanSchema),
16079
- styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
16080
- }).strict();
16081
-
16082
- // ../theme-core/src/site-styles/runtimeCompiler.ts
16083
- function defineDesignRuntimeRules(rules) {
16084
- return rules;
16085
- }
16086
- function defineComponentRuntimeRules(rules) {
16087
- return rules;
16088
- }
16089
- var defaultDesignRuntimeRules = defineDesignRuntimeRules({
16090
- sectionSurfaces: {
16091
- base: {},
16092
- "muted-band": {
16093
- background: {
16094
- type: "color",
16095
- color: "muted"
16096
- }
16097
- },
16098
- "accent-band": {
16099
- background: {
16100
- type: "color",
16101
- color: "primary"
16102
- }
16103
- },
16104
- "brand-depth-band": {
16105
- background: {
16106
- type: "color",
16107
- color: "primary-800"
16108
- }
16109
- },
16110
- "hero-image": {
16111
- background: {
16112
- type: "image",
16113
- opacity: 1,
16114
- position: "center center",
16115
- ...uniformSectionForeground("text")
16116
- }
16117
- }
16118
- },
16119
- heroLegibility: {
16120
- "scrim-gradient": {
16121
- type: "gradient",
16122
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
16123
- opacity: 1
16124
- },
16125
- "solid-panel": {
16126
- type: "color",
16127
- color: "surface",
16128
- opacity: 0.88
16129
- }
16130
- },
16131
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
16132
- });
16133
- var defaultComponentRuntimeRules = defineComponentRuntimeRules({
16134
- panelFrames: {
16135
- inset: {
16136
- spacing: "comfortable",
16137
- rounded: "xl",
16138
- raised: false,
16139
- background: {
16140
- type: "color",
16141
- color: "surfaceAlt",
16142
- textColor: "text"
16143
- }
16144
- },
16145
- raised: {
16146
- spacing: "comfortable",
16147
- rounded: "xl",
16148
- raised: true,
16149
- background: {
16150
- type: "color",
16151
- color: "surfaceAlt",
16152
- textColor: "text"
16153
- }
16154
- },
16155
- editorial: {
16156
- spacing: "medium",
16157
- rounded: "xl",
16158
- raised: false,
16159
- background: {
16160
- type: "color",
16161
- color: "surface",
16162
- textColor: "text"
16163
- }
16164
- }
16165
- },
16166
- flushFrames: {
16167
- "media-panel": {
16168
- fullWidth: true,
16169
- spacing: "none",
16170
- rounded: "none",
16171
- raised: false
16172
- }
16173
- },
16174
- itemSurfaces: {
16175
- none: null,
16176
- default: {
16177
- spacing: "medium",
16178
- rounded: "lg",
16179
- raised: false
16180
- },
16181
- flat: {
16182
- spacing: "medium",
16183
- rounded: "lg",
16184
- raised: false
16185
- },
16186
- outlined: {
16187
- spacing: "medium",
16188
- rounded: "lg",
16189
- raised: false,
16190
- border: {
16191
- enabled: true,
16192
- width: "1",
16193
- colorToken: "border"
16194
- }
16195
- },
16196
- raised: {
16197
- spacing: "medium",
16198
- rounded: "xl",
16199
- raised: true
16200
- },
16201
- inset: {
16202
- treatment: "soft-panel",
16203
- spacing: "comfortable",
16204
- rounded: "xl",
16205
- raised: false,
16206
- border: {
16207
- enabled: false
16208
- },
16209
- background: {
16210
- type: "color",
16211
- color: "surfaceAlt",
16212
- textColor: "text"
16213
- }
16214
- },
16215
- editorial: {
16216
- // Boxless open column with a short rule on top; the visual treatment
16217
- // lives in blocks-static/card-treatments.css.
16218
- treatment: "editorial-rule",
16219
- spacing: "none",
16220
- rounded: "none",
16221
- raised: false,
16222
- border: {
16223
- enabled: false
16224
- }
16225
- },
16226
- "color-blocked": {
16227
- // Bold, flat colour-blocked cards. The per-card background colour cycle
16228
- // (by position) and staggered offset live in
16229
- // blocks-static/card-treatments.css; here we set the shared shape:
16230
- // generous padding, large radius, no border, flat (no shadow).
16231
- treatment: "color-blocked",
16232
- spacing: "spacious",
16233
- rounded: "2xl",
16234
- raised: false,
16235
- border: {
16236
- enabled: false
16237
- }
16238
- }
16239
- }
16240
- });
16241
- function uniformSectionForeground(token) {
16242
- return {
16243
- textColor: token,
16244
- headingColor: token,
16245
- linkColor: token,
16246
- supportingColor: token
16247
- };
16248
- }
16249
-
16250
16805
  // ../theme-core/src/site-styles/generatedSchemas.ts
16251
16806
  import { z as z25 } from "zod";
16252
16807
  function uniqueNonEmpty2(values) {
@@ -17058,6 +17613,31 @@ function cardStylesField(options = {}) {
17058
17613
  return createBoxStylesFieldWithDepth("card", options);
17059
17614
  }
17060
17615
 
17616
+ // ../blocks/src/system/fields/imageShape.ts
17617
+ var standardImageShapeOptions = [
17618
+ { value: "default", label: "Default" },
17619
+ { value: "square", label: "Square corners" },
17620
+ { value: "rounded", label: "Rounded corners" },
17621
+ { value: "circle", label: "Circle" },
17622
+ { value: "arch", label: "Arch" }
17623
+ ];
17624
+ function createImageShapeField(options = {}) {
17625
+ return {
17626
+ id: options.id ?? "imageShape",
17627
+ type: "select",
17628
+ label: options.label ?? "Image shape",
17629
+ ...options.description ? { description: options.description } : {},
17630
+ required: false,
17631
+ defaultValue: options.defaultValue ?? "default",
17632
+ multiple: false,
17633
+ options: [...standardImageShapeOptions],
17634
+ ui: {
17635
+ intent: options.uiIntent ?? "display",
17636
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
17637
+ }
17638
+ };
17639
+ }
17640
+
17061
17641
  // ../blocks/src/utils/env.ts
17062
17642
  function isDevEnvironment() {
17063
17643
  try {
@@ -17872,7 +18452,7 @@ function buildFooterNavAll(common) {
17872
18452
  return stack(
17873
18453
  { className: common.className, gap: common.gap, align: "stretch" },
17874
18454
  [item],
17875
- when(collectionPath)
18455
+ whenCollectionHasItems(collectionPath)
17876
18456
  );
17877
18457
  }
17878
18458
  function buildFooterNavLinksOnly(common) {
@@ -17905,7 +18485,7 @@ function buildFooterNavLinksOnly(common) {
17905
18485
  return stack(
17906
18486
  { className: common.className, gap: common.gap, align: "stretch" },
17907
18487
  [item],
17908
- when(collectionPath)
18488
+ whenCollectionHasItems(collectionPath)
17909
18489
  );
17910
18490
  }
17911
18491
  function buildFooterNavFlatten(common) {
@@ -17954,9 +18534,20 @@ function buildFooterNavFlatten(common) {
17954
18534
  return stack(
17955
18535
  { className: common.className, gap: common.gap, align: "stretch" },
17956
18536
  [item],
17957
- when(collectionPath)
18537
+ whenCollectionHasItems(collectionPath)
17958
18538
  );
17959
18539
  }
18540
+ var whenCollectionHasItems = (collectionPath) => (node) => ({
18541
+ ...node,
18542
+ $when: {
18543
+ when: {
18544
+ from: collectionPath,
18545
+ transforms: [{ id: "array.length" }]
18546
+ },
18547
+ equals: 0,
18548
+ not: true
18549
+ }
18550
+ });
17960
18551
  function footerNav(opts) {
17961
18552
  const mode = opts?.mode ?? "all";
17962
18553
  const collectionPath = opts?.collectionPath ?? "footerMenu.items";
@@ -20539,8 +21130,23 @@ function fragmentsToRepeaterField(id, label, fragments, options = {}) {
20539
21130
  var heroLayoutControlsFragment = defineFragment({
20540
21131
  id: "heroLayoutControls",
20541
21132
  title: "Hero Layout",
20542
- description: "Alignment and content width controls for hero layouts.",
21133
+ description: "Title scale, alignment, and content width controls for hero layouts.",
20543
21134
  fields: [
21135
+ {
21136
+ id: "titleSize",
21137
+ type: "select",
21138
+ label: "Title size",
21139
+ description: "Adjust the visual scale of the hero title.",
21140
+ required: false,
21141
+ ui: { intent: "display" },
21142
+ options: [
21143
+ { value: "auto", label: "Auto" },
21144
+ { value: "quiet", label: "Normal" },
21145
+ { value: "editorial", label: "Large" },
21146
+ { value: "display", label: "Huge" },
21147
+ { value: "poster", label: "Poster" }
21148
+ ]
21149
+ },
20544
21150
  {
20545
21151
  id: "contentAlignment",
20546
21152
  type: "select",
@@ -21335,7 +21941,18 @@ function heroSplitImagePane() {
21335
21941
  return stack(
21336
21942
  {
21337
21943
  gap: "none",
21338
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
21944
+ className: {
21945
+ $bind: {
21946
+ from: "content.imageShape",
21947
+ transforms: [
21948
+ {
21949
+ id: "ui.imageShapeClassName",
21950
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
21951
+ }
21952
+ ],
21953
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
21954
+ }
21955
+ },
21339
21956
  style: {
21340
21957
  minHeight: "clamp(18rem, 36vw, 34rem)"
21341
21958
  }
@@ -21453,6 +22070,12 @@ var heroConfig = {
21453
22070
  label: "Content card",
21454
22071
  renderInHeader: true,
21455
22072
  intent: "style"
22073
+ }),
22074
+ createImageShapeField({
22075
+ id: "imageShape",
22076
+ label: "Image shape",
22077
+ defaultValue: "default",
22078
+ uiIntent: "display"
21456
22079
  })
21457
22080
  ],
21458
22081
  layout: classicLayout,
@@ -21467,6 +22090,15 @@ var heroConfig = {
21467
22090
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
21468
22091
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
21469
22092
  icon: "Sparkles",
22093
+ previewCustomize: {
22094
+ quickFieldPriority: [
22095
+ "titleSize",
22096
+ "contentAlignment",
22097
+ "contentMaxWidth",
22098
+ "verticalAlignment",
22099
+ "imageShape"
22100
+ ]
22101
+ },
21470
22102
  styleTokens: {
21471
22103
  typography: "display",
21472
22104
  spacing: "xl"
@@ -21483,7 +22115,8 @@ var standardAspectRatioOptions = [
21483
22115
  { value: "16/9", label: "16:9 (Landscape)" },
21484
22116
  { value: "4/3", label: "4:3 (Standard)" },
21485
22117
  { value: "1/1", label: "1:1 (Square)" },
21486
- { value: "3/4", label: "3:4 (Portrait)" }
22118
+ { value: "3/4", label: "3:4 (Portrait)" },
22119
+ { value: "9/16", label: "9:16 (Tall portrait)" }
21487
22120
  ];
21488
22121
  function createAspectRatioField(options = {}) {
21489
22122
  return {
@@ -22703,6 +23336,258 @@ var formBlockDefinition = {
22703
23336
  runtime: formBlockRuntime
22704
23337
  };
22705
23338
 
23339
+ // ../blocks/src/system/blocks/contact-newsletter.ts
23340
+ var contactNewsletterLayout = styledSection({
23341
+ children: sectionContainer([
23342
+ el(
23343
+ "div",
23344
+ { className: "contact-newsletter-grid" },
23345
+ [
23346
+ el(
23347
+ "div",
23348
+ { className: "contact-newsletter-column contact-newsletter-contact" },
23349
+ [
23350
+ el(
23351
+ "div",
23352
+ { className: "contact-newsletter-copy" },
23353
+ [
23354
+ text(
23355
+ {
23356
+ as: "h2",
23357
+ className: "form-copy-title"
23358
+ },
23359
+ when("contactTitle"),
23360
+ bind("contactTitle")
23361
+ ),
23362
+ richText(
23363
+ {
23364
+ className: "form-copy-intro rb-prose rb-max-w-none"
23365
+ },
23366
+ when("contactIntro"),
23367
+ bind("contactIntro")
23368
+ )
23369
+ ]
23370
+ ),
23371
+ el(
23372
+ "form",
23373
+ withApiBindings({
23374
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
23375
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
23376
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
23377
+ }),
23378
+ [],
23379
+ bind("data.form")
23380
+ )
23381
+ ]
23382
+ ),
23383
+ el(
23384
+ "div",
23385
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
23386
+ [
23387
+ el(
23388
+ "div",
23389
+ { className: "contact-newsletter-copy" },
23390
+ [
23391
+ text(
23392
+ {
23393
+ as: "h2",
23394
+ className: "newsletter-copy-title"
23395
+ },
23396
+ when("newsletterTitle"),
23397
+ bind("newsletterTitle")
23398
+ ),
23399
+ richText(
23400
+ {
23401
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
23402
+ },
23403
+ when("newsletterSubtitle"),
23404
+ bind("newsletterSubtitle")
23405
+ )
23406
+ ]
23407
+ ),
23408
+ el(
23409
+ "newsletter-form",
23410
+ withApiBindings({
23411
+ listId: { $bind: { from: "listId" } },
23412
+ preset: { $bind: { from: "preset" } },
23413
+ includePhone: { $bind: { from: "includePhone" } },
23414
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
23415
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
23416
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
23417
+ tags: { $bind: { from: "newsletterTags" } },
23418
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
23419
+ }),
23420
+ []
23421
+ )
23422
+ ]
23423
+ )
23424
+ ]
23425
+ )
23426
+ ], {
23427
+ className: "contact-newsletter-container"
23428
+ }),
23429
+ baseClass: "",
23430
+ spacing: "medium",
23431
+ background: "surface"
23432
+ });
23433
+ var contactNewsletterManifest = createBlockManifest({
23434
+ id: "block.contact-newsletter",
23435
+ title: "Contact + Newsletter",
23436
+ titleSource: "contactTitle",
23437
+ description: "Two-column newsletter signup and contact form section.",
23438
+ category: "interactive",
23439
+ layout: contactNewsletterLayout,
23440
+ defaultVariant: "default",
23441
+ variants: {
23442
+ default: contactNewsletterLayout
23443
+ },
23444
+ variantOptions: {
23445
+ default: {
23446
+ label: "Two column",
23447
+ description: "Newsletter and contact form side by side.",
23448
+ icon: "Columns2"
23449
+ }
23450
+ },
23451
+ additionalFields: [
23452
+ {
23453
+ id: "newsletterTitle",
23454
+ type: "text",
23455
+ label: "Newsletter title",
23456
+ defaultValue: "Stay connected"
23457
+ },
23458
+ {
23459
+ id: "newsletterSubtitle",
23460
+ type: "richText",
23461
+ label: "Newsletter intro"
23462
+ },
23463
+ {
23464
+ id: "listId",
23465
+ type: "reference",
23466
+ label: "Newsletter list",
23467
+ description: "Select the list new subscribers should be added to.",
23468
+ required: true,
23469
+ referenceKind: "newsletterList",
23470
+ allowManualEntry: false,
23471
+ ui: { intent: "behavior" }
23472
+ },
23473
+ {
23474
+ id: "preset",
23475
+ type: "select",
23476
+ label: "Newsletter fields",
23477
+ defaultValue: "emailOnly",
23478
+ ui: { intent: "display" },
23479
+ options: [
23480
+ { value: "emailOnly", label: "Email only" },
23481
+ { value: "emailName", label: "Email + Name" },
23482
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
23483
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
23484
+ ]
23485
+ },
23486
+ {
23487
+ id: "includePhone",
23488
+ type: "boolean",
23489
+ label: "Include phone field",
23490
+ defaultValue: false,
23491
+ ui: { intent: "display" }
23492
+ },
23493
+ {
23494
+ id: "newsletterButtonLabel",
23495
+ type: "text",
23496
+ label: "Newsletter button label",
23497
+ defaultValue: "Subscribe",
23498
+ ui: { intent: "display" }
23499
+ },
23500
+ {
23501
+ id: "newsletterSuccessMessage",
23502
+ type: "text",
23503
+ label: "Newsletter success message",
23504
+ defaultValue: "Thanks for subscribing!",
23505
+ ui: { intent: "behavior" }
23506
+ },
23507
+ {
23508
+ id: "newsletterPrivacyNote",
23509
+ type: "text",
23510
+ label: "Privacy note",
23511
+ ui: { intent: "display" }
23512
+ },
23513
+ {
23514
+ id: "newsletterTags",
23515
+ type: "text",
23516
+ label: "Newsletter tags",
23517
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
23518
+ ui: { intent: "behavior" }
23519
+ },
23520
+ {
23521
+ id: "contactTitle",
23522
+ type: "text",
23523
+ label: "Contact title",
23524
+ defaultValue: "Get in touch"
23525
+ },
23526
+ {
23527
+ id: "contactIntro",
23528
+ type: "richText",
23529
+ label: "Contact intro"
23530
+ },
23531
+ {
23532
+ id: "formSlug",
23533
+ type: "reference",
23534
+ label: "Contact form",
23535
+ description: "Pick a saved form to render.",
23536
+ required: true,
23537
+ referenceKind: "form",
23538
+ allowManualEntry: false,
23539
+ ui: { intent: "behavior" }
23540
+ },
23541
+ {
23542
+ id: "contactSubmitLabel",
23543
+ type: "text",
23544
+ label: "Contact button label",
23545
+ defaultValue: "Send message",
23546
+ ui: { intent: "display" }
23547
+ },
23548
+ {
23549
+ id: "contactSuccessMessage",
23550
+ type: "text",
23551
+ label: "Contact success message",
23552
+ defaultValue: "Thanks - we received your message.",
23553
+ ui: { intent: "behavior" }
23554
+ }
23555
+ ],
23556
+ styleTokens: {
23557
+ background: "surface",
23558
+ typography: "body",
23559
+ spacing: "md"
23560
+ },
23561
+ behaviours: {
23562
+ supportsThemeSwitching: true,
23563
+ inlineEditing: true,
23564
+ animation: false,
23565
+ paletteHidden: false
23566
+ },
23567
+ tags: [
23568
+ "contact",
23569
+ "newsletter",
23570
+ "signup",
23571
+ "email",
23572
+ "form",
23573
+ "lead-capture"
23574
+ ],
23575
+ icon: "MailPlus"
23576
+ });
23577
+ var contactNewsletterBlockDefinition = {
23578
+ manifest: contactNewsletterManifest,
23579
+ dataSchemas: { form: formDataSchema.optional() },
23580
+ dataLoaders: {
23581
+ form: {
23582
+ endpoint: "getPublicFormById",
23583
+ params: {
23584
+ formSlug: { $bind: { from: "formSlug" } }
23585
+ },
23586
+ mode: "server"
23587
+ }
23588
+ }
23589
+ };
23590
+
22706
23591
  // ../blocks/src/system/blocks/faq.ts
22707
23592
  function fragmentLayoutNode2(layout) {
22708
23593
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -22931,6 +23816,7 @@ var joinClasses3 = (parts) => parts.filter(
22931
23816
  ).join(" ").replace(/\s+/g, " ").trim();
22932
23817
  var eyebrowTreatmentClassMap = {
22933
23818
  plain: "",
23819
+ accent: "rb-eyebrow-treatment-accent",
22934
23820
  pill: "rb-eyebrow-treatment-pill",
22935
23821
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
22936
23822
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -22957,6 +23843,13 @@ var imageGalleryCornerClassMap = {
22957
23843
  "2xl": "rb-rounded-2xl",
22958
23844
  "3xl": "rb-rounded-3xl"
22959
23845
  };
23846
+ var imageShapeClassMap = {
23847
+ default: "",
23848
+ square: "rb-media-shape-square",
23849
+ rounded: "rb-media-shape-rounded",
23850
+ circle: "rb-media-shape-circle",
23851
+ arch: "rb-media-shape-arch"
23852
+ };
22960
23853
  var parseRatio = (raw) => {
22961
23854
  if (typeof raw !== "string") return null;
22962
23855
  const value = raw.trim();
@@ -23101,6 +23994,10 @@ function resolveHeroContentMaxWidth(content) {
23101
23994
  return "default";
23102
23995
  }
23103
23996
  function resolveHeroTypographyScale(content) {
23997
+ const titleSize = readString(content, "titleSize");
23998
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
23999
+ return titleSize;
24000
+ }
23104
24001
  const raw = readHeroLayoutString(
23105
24002
  content,
23106
24003
  "typographyScale",
@@ -23342,6 +24239,16 @@ var uiTransforms = [
23342
24239
  heroGridClassFromVerticalAlignmentTransform,
23343
24240
  imageFragmentClassTransform,
23344
24241
  imageFragmentSizeTransform,
24242
+ {
24243
+ id: "ui.imageShapeClassName",
24244
+ kind: "string",
24245
+ summary: "Apply a constrained media shape class",
24246
+ run: (value, options) => {
24247
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
24248
+ const shape = typeof value === "string" ? value.trim() : "default";
24249
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
24250
+ }
24251
+ },
23345
24252
  conditionalClassTransform,
23346
24253
  twoColumnContainerClassTransform,
23347
24254
  twoColumnFlexBasisTransform,
@@ -24688,6 +25595,21 @@ var siteHeaderManifest = createBlockManifest({
24688
25595
  id: "block.site-header",
24689
25596
  title: "Site Header",
24690
25597
  category: "layout",
25598
+ additionalFields: [
25599
+ {
25600
+ id: "mode",
25601
+ type: "select",
25602
+ label: "Header display",
25603
+ required: false,
25604
+ multiple: false,
25605
+ defaultValue: "default",
25606
+ options: [
25607
+ { value: "default", label: "Show header" },
25608
+ { value: "hidden", label: "Hide header" }
25609
+ ],
25610
+ ui: { intent: "display" }
25611
+ }
25612
+ ],
24691
25613
  // Skip section styles - this block uses theme-based styling
24692
25614
  skipSectionStyles: true,
24693
25615
  // Block manages its own wrapper - enables sticky positioning
@@ -26090,6 +27012,9 @@ var mediaTextManifest = createBlockManifest({
26090
27012
  category: "layout",
26091
27013
  includeContainerStyles: true,
26092
27014
  titleSource: "title",
27015
+ previewCustomize: {
27016
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
27017
+ },
26093
27018
  additionalFields: [
26094
27019
  {
26095
27020
  id: "images",
@@ -26128,7 +27053,7 @@ var mediaTextManifest = createBlockManifest({
26128
27053
  {
26129
27054
  id: "titleAlignment",
26130
27055
  type: "select",
26131
- label: "Title alignment",
27056
+ label: "Content alignment",
26132
27057
  required: false,
26133
27058
  defaultValue: "left",
26134
27059
  multiple: false,
@@ -26186,7 +27111,18 @@ var mediaTextManifest = createBlockManifest({
26186
27111
  transition: "slide"
26187
27112
  },
26188
27113
  ui: { intent: "behavior" }
26189
- }),
27114
+ }).map((field) => ({
27115
+ ...field,
27116
+ ui: {
27117
+ ...field.ui ?? {},
27118
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
27119
+ allOf: [
27120
+ { field: "images", minItems: 2 },
27121
+ { field: "carouselAutoplay", equals: true }
27122
+ ]
27123
+ } : { field: "images", minItems: 2 }
27124
+ }
27125
+ })),
26190
27126
  createAspectRatioField({
26191
27127
  id: "aspectRatio",
26192
27128
  label: "Media aspect ratio",
@@ -26194,6 +27130,12 @@ var mediaTextManifest = createBlockManifest({
26194
27130
  defaultValue: "auto",
26195
27131
  visibleWhen: { field: "images", notEquals: null }
26196
27132
  }),
27133
+ createImageShapeField({
27134
+ id: "imageShape",
27135
+ label: "Media shape",
27136
+ defaultValue: "default",
27137
+ visibleWhen: { field: "images", notEquals: null }
27138
+ }),
26197
27139
  {
26198
27140
  id: "text",
26199
27141
  type: "richText",
@@ -26227,6 +27169,30 @@ var mediaTextManifest = createBlockManifest({
26227
27169
  ...options?.not ? { not: true } : {}
26228
27170
  }
26229
27171
  });
27172
+ const bodyClassNameFromAlignment = {
27173
+ $bind: {
27174
+ from: "content.titleAlignment",
27175
+ transforms: [
27176
+ {
27177
+ id: "ui.bodyClassFromAlignment",
27178
+ options: { base: "rb-prose rb-max-w-none" }
27179
+ }
27180
+ ],
27181
+ fallback: "rb-prose rb-max-w-none"
27182
+ }
27183
+ };
27184
+ const titleClassNameFromAlignment = {
27185
+ $bind: {
27186
+ from: "content.titleAlignment",
27187
+ transforms: [
27188
+ {
27189
+ id: "ui.headingClassFromAlignment",
27190
+ options: { base: "" }
27191
+ }
27192
+ ],
27193
+ fallback: ""
27194
+ }
27195
+ };
26230
27196
  const defaultTextColumn = el("div", {}, [
26231
27197
  styledCard(
26232
27198
  [
@@ -26251,8 +27217,55 @@ var mediaTextManifest = createBlockManifest({
26251
27217
  bind("content.text")
26252
27218
  )
26253
27219
  ]);
27220
+ const bioTextColumn = el(
27221
+ "div",
27222
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
27223
+ [
27224
+ text(
27225
+ {
27226
+ as: "h2",
27227
+ className: titleClassNameFromAlignment
27228
+ },
27229
+ when("content.title"),
27230
+ bind("content.title")
27231
+ ),
27232
+ styledCard(
27233
+ [
27234
+ richText(
27235
+ {
27236
+ className: bodyClassNameFromAlignment
27237
+ },
27238
+ bind("content.text")
27239
+ )
27240
+ ],
27241
+ {
27242
+ stylesFrom: "content._textCardStyles",
27243
+ backgroundFrom: "content._textCardStyles.background"
27244
+ },
27245
+ when("content.wrapTextInCard")
27246
+ ),
27247
+ richText(
27248
+ {
27249
+ className: bodyClassNameFromAlignment
27250
+ },
27251
+ when("content.wrapTextInCard", { not: true }),
27252
+ bind("content.text")
27253
+ )
27254
+ ]
27255
+ );
26254
27256
  const defaultImageCommonProps = {
26255
- className: "rb-w-full rb-h-auto rb-object-cover",
27257
+ className: {
27258
+ $bind: {
27259
+ from: "content.imageShape",
27260
+ transforms: [
27261
+ {
27262
+ id: "ui.imageShapeClassName",
27263
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
27264
+ }
27265
+ ],
27266
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
27267
+ }
27268
+ },
26256
27269
  style: {
26257
27270
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
26258
27271
  }
@@ -26293,6 +27306,27 @@ var mediaTextManifest = createBlockManifest({
26293
27306
  ],
26294
27307
  whenImagesLength(0, { not: true })
26295
27308
  );
27309
+ const bioImagesLayout = el(
27310
+ "div",
27311
+ {},
27312
+ [
27313
+ responsiveTwoColumn({
27314
+ image: el("div", {}, [
27315
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
27316
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
27317
+ ]),
27318
+ text: bioTextColumn,
27319
+ ratioFrom: "content.ratio",
27320
+ imagePositionFrom: "content.imagePosition",
27321
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
27322
+ gapFrom: "content.gap",
27323
+ gapFallback: "comfortable",
27324
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
27325
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
27326
+ })
27327
+ ],
27328
+ whenImagesLength(0, { not: true })
27329
+ );
26296
27330
  const defaultTextOnlyLayout = el(
26297
27331
  "div",
26298
27332
  {},
@@ -26322,7 +27356,45 @@ var mediaTextManifest = createBlockManifest({
26322
27356
  ],
26323
27357
  whenImagesLength(0)
26324
27358
  );
27359
+ const bioTextOnlyLayout = el(
27360
+ "div",
27361
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
27362
+ [
27363
+ text(
27364
+ {
27365
+ as: "h2",
27366
+ className: titleClassNameFromAlignment
27367
+ },
27368
+ when("content.title"),
27369
+ bind("content.title")
27370
+ ),
27371
+ styledCard(
27372
+ [
27373
+ richText(
27374
+ {
27375
+ className: bodyClassNameFromAlignment
27376
+ },
27377
+ bind("content.text")
27378
+ )
27379
+ ],
27380
+ {
27381
+ stylesFrom: "content._textCardStyles",
27382
+ backgroundFrom: "content._textCardStyles.background"
27383
+ },
27384
+ when("content.wrapTextInCard")
27385
+ ),
27386
+ richText(
27387
+ {
27388
+ className: bodyClassNameFromAlignment
27389
+ },
27390
+ when("content.wrapTextInCard", { not: true }),
27391
+ bind("content.text")
27392
+ )
27393
+ ],
27394
+ whenImagesLength(0)
27395
+ );
26325
27396
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
27397
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
26326
27398
  const defaultLayout2 = styledSection({
26327
27399
  children: styledContainer({
26328
27400
  rootType: "stack",
@@ -26331,18 +27403,7 @@ var mediaTextManifest = createBlockManifest({
26331
27403
  text(
26332
27404
  {
26333
27405
  as: "h2",
26334
- className: {
26335
- $bind: {
26336
- from: "content.titleAlignment",
26337
- transforms: [
26338
- {
26339
- id: "ui.headingClassFromAlignment",
26340
- options: { base: "" }
26341
- }
26342
- ],
26343
- fallback: ""
26344
- }
26345
- }
27406
+ className: titleClassNameFromAlignment
26346
27407
  },
26347
27408
  when("content.title"),
26348
27409
  bind("content.title")
@@ -26354,14 +27415,28 @@ var mediaTextManifest = createBlockManifest({
26354
27415
  baseClass: "",
26355
27416
  spacing: "medium"
26356
27417
  });
27418
+ const bioLayout = styledSection({
27419
+ children: styledContainer({
27420
+ rootType: "stack",
27421
+ rootProps: { gap: "lg" },
27422
+ children: [bioInner]
27423
+ }),
27424
+ baseClass: "",
27425
+ spacing: "medium"
27426
+ });
26357
27427
  return {
26358
27428
  layout: defaultLayout2,
26359
27429
  variants: {
26360
- default: defaultLayout2
27430
+ default: defaultLayout2,
27431
+ bio: bioLayout
26361
27432
  },
26362
27433
  defaultVariant: "default",
26363
27434
  variantOptions: {
26364
- default: { label: "Default" }
27435
+ default: { label: "Default" },
27436
+ bio: {
27437
+ label: "Bio",
27438
+ description: "Vertically centered title and copy beside media."
27439
+ }
26365
27440
  }
26366
27441
  };
26367
27442
  })(),
@@ -27067,6 +28142,126 @@ var occurrenceContextSchema = z43.object({
27067
28142
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
27068
28143
  import { z as z45 } from "zod";
27069
28144
 
28145
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
28146
+ var DEFAULT_EVENT_CURRENCY = "USD";
28147
+ function resolveRuntimeEventPricing(event) {
28148
+ if (isPublicEventPricing(event.pricing)) {
28149
+ return event.pricing;
28150
+ }
28151
+ const legacy = event;
28152
+ const currency = readCurrency(legacy.currency);
28153
+ if (event.requiresRegistration === false) {
28154
+ return {
28155
+ kind: "drop_in",
28156
+ currency,
28157
+ display: { kind: "free", currency }
28158
+ };
28159
+ }
28160
+ if (legacy.pricingMode === "ticket_types") {
28161
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
28162
+ return {
28163
+ kind: "ticket_types",
28164
+ currency,
28165
+ ticketTypes,
28166
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
28167
+ };
28168
+ }
28169
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
28170
+ if (legacy.pricingType === "paid" && amount > 0) {
28171
+ return {
28172
+ kind: "single_paid",
28173
+ amount,
28174
+ currency,
28175
+ display: { kind: "exact", amount, currency }
28176
+ };
28177
+ }
28178
+ return {
28179
+ kind: "free_registration",
28180
+ currency,
28181
+ display: { kind: "free", currency }
28182
+ };
28183
+ }
28184
+ function readCurrency(value) {
28185
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
28186
+ }
28187
+ function isRecord3(value) {
28188
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28189
+ }
28190
+ function isPublicEventPricing(value) {
28191
+ if (!isRecord3(value) || typeof value.kind !== "string") return false;
28192
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
28193
+ }
28194
+ function isPublicEventTicketType(value) {
28195
+ return isRecord3(value) && typeof value.id === "string";
28196
+ }
28197
+ function readTicketTypePriceDisplay(value, currency) {
28198
+ const display = readLegacyPriceDisplay(value, currency);
28199
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
28200
+ }
28201
+ function readLegacyPriceDisplay(value, currency) {
28202
+ if (!isRecord3(value) || typeof value.kind !== "string") {
28203
+ return { kind: "unavailable", currency };
28204
+ }
28205
+ const displayCurrency = readCurrency(value.currency);
28206
+ switch (value.kind) {
28207
+ case "free":
28208
+ return { kind: "free", currency: displayCurrency };
28209
+ case "exact":
28210
+ return readAmount(value.amount) !== null ? {
28211
+ kind: "exact",
28212
+ amount: readAmount(value.amount) ?? 0,
28213
+ currency: displayCurrency
28214
+ } : { kind: "unavailable", currency };
28215
+ case "from":
28216
+ return readAmount(value.amount) !== null ? {
28217
+ kind: "from",
28218
+ amount: readAmount(value.amount) ?? 0,
28219
+ currency: displayCurrency
28220
+ } : { kind: "unavailable", currency };
28221
+ case "mixed":
28222
+ return readAmount(value.paidFromAmount) !== null ? {
28223
+ kind: "mixed",
28224
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
28225
+ currency: displayCurrency
28226
+ } : { kind: "unavailable", currency };
28227
+ case "unavailable":
28228
+ return { kind: "unavailable", currency: displayCurrency };
28229
+ case "course":
28230
+ return isRecord3(value.display) ? {
28231
+ kind: "course",
28232
+ display: readCoursePriceDisplay(value.display, displayCurrency)
28233
+ } : {
28234
+ kind: "course",
28235
+ display: { kind: "unavailable", currency: displayCurrency }
28236
+ };
28237
+ default:
28238
+ return { kind: "unavailable", currency };
28239
+ }
28240
+ }
28241
+ function readCoursePriceDisplay(value, currency) {
28242
+ switch (value.kind) {
28243
+ case "free":
28244
+ return { kind: "free", currency: readCurrency(value.currency) };
28245
+ case "exact":
28246
+ return readAmount(value.amount) !== null ? {
28247
+ kind: "exact",
28248
+ amount: readAmount(value.amount) ?? 0,
28249
+ currency: readCurrency(value.currency)
28250
+ } : { kind: "unavailable", currency };
28251
+ case "from":
28252
+ return readAmount(value.amount) !== null ? {
28253
+ kind: "from",
28254
+ amount: readAmount(value.amount) ?? 0,
28255
+ currency: readCurrency(value.currency)
28256
+ } : { kind: "unavailable", currency };
28257
+ default:
28258
+ return { kind: "unavailable", currency };
28259
+ }
28260
+ }
28261
+ function readAmount(value) {
28262
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
28263
+ }
28264
+
27070
28265
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
27071
28266
  import { z as z44 } from "zod";
27072
28267
 
@@ -27097,11 +28292,21 @@ var filterAutoShowSchema = z44.enum(["auto", "always", "never"]);
27097
28292
  var calendarTabViewsSchema = z44.enum(["both", "month", "week"]);
27098
28293
 
27099
28294
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28295
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
28296
+ var [
28297
+ eventRegistrationGenericDateStepLabel,
28298
+ eventRegistrationGenericTicketsStepLabel,
28299
+ eventRegistrationGenericDetailsStepLabel
28300
+ ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
27100
28301
  var contentEntrySchema = z45.object({
27101
28302
  id: z45.string(),
27102
28303
  slug: z45.string(),
27103
28304
  contentTypeSlug: z45.string()
27104
28305
  });
28306
+ var eventRegistrationPublicEventSchema = z45.preprocess(
28307
+ normalizeEventRegistrationEventInput,
28308
+ publicEventSchema
28309
+ );
27105
28310
  var eventRegistrationSourceSchema = z45.object({
27106
28311
  siteId: z45.string().optional(),
27107
28312
  apiBaseUrl: z45.string().optional(),
@@ -27109,7 +28314,7 @@ var eventRegistrationSourceSchema = z45.object({
27109
28314
  previewToken: z45.string().nullable().optional(),
27110
28315
  occurrenceContext: occurrenceContextSchema.optional(),
27111
28316
  contentEntry: contentEntrySchema.nullable().optional(),
27112
- events: z45.array(publicEventSchema).nullable().optional(),
28317
+ events: z45.array(eventRegistrationPublicEventSchema).nullable().optional(),
27113
28318
  className: z45.string().nullable().optional(),
27114
28319
  buttonText: z45.string().nullable().optional(),
27115
28320
  maxTickets: z45.string().nullable().optional(),
@@ -27124,14 +28329,21 @@ var eventRegistrationSourceSchema = z45.object({
27124
28329
  });
27125
28330
  var eventRegistrationDisplaySchema = z45.object({
27126
28331
  kind: z45.literal("event-registration"),
27127
- state: z45.literal("shell"),
28332
+ state: z45.literal("generic-shell"),
27128
28333
  className: z45.string().nullable(),
28334
+ titleText: z45.string(),
28335
+ bodyText: z45.string(),
28336
+ stepLabels: z45.tuple([
28337
+ z45.literal(eventRegistrationGenericDateStepLabel),
28338
+ z45.literal(eventRegistrationGenericTicketsStepLabel),
28339
+ z45.literal(eventRegistrationGenericDetailsStepLabel)
28340
+ ]),
27129
28341
  summaryButtonText: z45.string()
27130
28342
  });
27131
28343
  var eventRegistrationHydrationSchema = z45.object({
27132
28344
  occurrenceContext: occurrenceContextSchema.optional(),
27133
28345
  contentEntry: contentEntrySchema.nullable().optional(),
27134
- events: z45.array(publicEventSchema).nullable().optional(),
28346
+ events: z45.array(eventRegistrationPublicEventSchema).nullable().optional(),
27135
28347
  maxTickets: z45.string().optional(),
27136
28348
  showVenue: z45.boolean().optional(),
27137
28349
  showCapacity: z45.boolean().optional(),
@@ -27162,8 +28374,11 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
27162
28374
  function buildEventRegistrationDisplay(source) {
27163
28375
  return {
27164
28376
  kind: "event-registration",
27165
- state: "shell",
28377
+ state: "generic-shell",
27166
28378
  className: source.className ?? null,
28379
+ titleText: "Event registration",
28380
+ bodyText: "Preparing dates, tickets, and booking details.",
28381
+ stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
27167
28382
  summaryButtonText: source.buttonText?.trim() || "Register"
27168
28383
  };
27169
28384
  }
@@ -27190,6 +28405,18 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
27190
28405
  }
27191
28406
  })
27192
28407
  });
28408
+ function normalizeEventRegistrationEventInput(value) {
28409
+ if (!isRecord4(value)) {
28410
+ return value;
28411
+ }
28412
+ return {
28413
+ ...value,
28414
+ pricing: resolveRuntimeEventPricing(value)
28415
+ };
28416
+ }
28417
+ function isRecord4(value) {
28418
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28419
+ }
27193
28420
  var eventRegistrationInteractiveIslandPropsCodec = createInteractiveIslandCodec({
27194
28421
  runtime: eventRegistrationBlockRuntime,
27195
28422
  mode: "event-registration",
@@ -29688,7 +30915,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
29688
30915
  return keys.length >= 2 ? keys : [];
29689
30916
  }
29690
30917
  function normalizeOfferingsPreviewContentForWrite(value) {
29691
- if (!isRecord3(value)) return null;
30918
+ if (!isRecord5(value)) return null;
29692
30919
  const groupOrderValue = value.groupOrder;
29693
30920
  if (Array.isArray(groupOrderValue)) {
29694
30921
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -29701,7 +30928,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
29701
30928
  return { ...value, groupOrder: [] };
29702
30929
  }
29703
30930
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
29704
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord3) : []
30931
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
29705
30932
  );
29706
30933
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
29707
30934
  }
@@ -29715,7 +30942,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
29715
30942
  }
29716
30943
  return keys;
29717
30944
  }
29718
- function isRecord3(value) {
30945
+ function isRecord5(value) {
29719
30946
  return typeof value === "object" && value !== null && !Array.isArray(value);
29720
30947
  }
29721
30948
 
@@ -30082,7 +31309,7 @@ function isOfferingsPreviewItemLimit(value) {
30082
31309
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
30083
31310
  }
30084
31311
  function normalizeOfferingsPreviewGroupOverride(value) {
30085
- if (!isRecord4(value)) return [];
31312
+ if (!isRecord6(value)) return [];
30086
31313
  const override = {};
30087
31314
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
30088
31315
  override.sourceKey = value.sourceKey;
@@ -30114,12 +31341,12 @@ function isButtonVariant(value) {
30114
31341
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
30115
31342
  }
30116
31343
  function normalizeCardStylesContent(value) {
30117
- return isRecord4(value) || value === null ? value : void 0;
31344
+ return isRecord6(value) || value === null ? value : void 0;
30118
31345
  }
30119
31346
  function normalizeSectionStylesContent(value) {
30120
- return isRecord4(value) || value === null ? value : void 0;
31347
+ return isRecord6(value) || value === null ? value : void 0;
30121
31348
  }
30122
- function isRecord4(value) {
31349
+ function isRecord6(value) {
30123
31350
  return typeof value === "object" && value !== null && !Array.isArray(value);
30124
31351
  }
30125
31352
 
@@ -34079,11 +35306,13 @@ var heroImageSurfaceMotions = [
34079
35306
  ];
34080
35307
  var standardEyebrowTreatments = [
34081
35308
  "plain",
35309
+ "accent",
34082
35310
  "pill",
34083
35311
  "accent-pill"
34084
35312
  ];
34085
35313
  var animatedEyebrowTreatments = [
34086
35314
  "plain",
35315
+ "accent",
34087
35316
  "pill",
34088
35317
  "accent-pill",
34089
35318
  "pill-bounce",
@@ -34384,6 +35613,17 @@ var systemBlockDefinitionsRaw = [
34384
35613
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
34385
35614
  ]
34386
35615
  })),
35616
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
35617
+ flow: conversionFlow,
35618
+ layoutProfiles: [
35619
+ layoutProfile({
35620
+ variantKey: "default",
35621
+ family: "split",
35622
+ weight: "featured",
35623
+ bias: "soft"
35624
+ })
35625
+ ]
35626
+ })),
34387
35627
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
34388
35628
  sectionSurfaces: "supported",
34389
35629
  contentFrames: ["plain", "panel"],
@@ -34475,6 +35715,12 @@ var systemBlockDefinitionsRaw = [
34475
35715
  family: "media-text",
34476
35716
  weight: "featured",
34477
35717
  bias: "soft"
35718
+ }),
35719
+ layoutProfile({
35720
+ variantKey: "bio",
35721
+ family: "media-text",
35722
+ weight: "featured",
35723
+ bias: "soft"
34478
35724
  })
34479
35725
  ]
34480
35726
  })),
@@ -35276,7 +36522,7 @@ var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
35276
36522
  // ../blocks/src/system/data/linkedContentEntries.ts
35277
36523
  var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
35278
36524
  function coerceLinkedContentEntriesPayload(payload) {
35279
- if (!isRecord5(payload)) return payload;
36525
+ if (!isRecord7(payload)) return payload;
35280
36526
  const response = payload;
35281
36527
  if (!Array.isArray(response.entries)) return payload;
35282
36528
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -35284,12 +36530,12 @@ function coerceLinkedContentEntriesPayload(payload) {
35284
36530
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
35285
36531
  }
35286
36532
  function enrichLinkedContentEntry(entry, contentType) {
35287
- if (!isRecord5(entry)) return entry;
36533
+ if (!isRecord7(entry)) return entry;
35288
36534
  const entryId = typeof entry.id === "string" ? entry.id : null;
35289
36535
  if (!entryId) return entry;
35290
36536
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
35291
36537
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
35292
- const content = isRecord5(entry.content) ? entry.content : {};
36538
+ const content = isRecord7(entry.content) ? entry.content : {};
35293
36539
  const meta = {
35294
36540
  kind: "linked-content-entry",
35295
36541
  entryId,
@@ -35382,7 +36628,7 @@ function capitalize(value) {
35382
36628
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
35383
36629
  }
35384
36630
  function parsePublicContentTypeMeta(value) {
35385
- if (!isRecord5(value)) return null;
36631
+ if (!isRecord7(value)) return null;
35386
36632
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
35387
36633
  return {
35388
36634
  key: value.key,
@@ -35392,7 +36638,7 @@ function parsePublicContentTypeMeta(value) {
35392
36638
  };
35393
36639
  }
35394
36640
  function parsePublicContentTypeLinkedEntryEditing(value) {
35395
- if (!isRecord5(value) || typeof value.kind !== "string") return null;
36641
+ if (!isRecord7(value) || typeof value.kind !== "string") return null;
35396
36642
  switch (value.kind) {
35397
36643
  case "generic":
35398
36644
  return { kind: "generic" };
@@ -35406,7 +36652,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
35406
36652
  }
35407
36653
  }
35408
36654
  function parsePublicContentTypeFieldMeta(value) {
35409
- if (!isRecord5(value)) return [];
36655
+ if (!isRecord7(value)) return [];
35410
36656
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
35411
36657
  return [{
35412
36658
  id: value.id,
@@ -35420,7 +36666,7 @@ function parseStringArray(value) {
35420
36666
  if (!Array.isArray(value)) return null;
35421
36667
  return value.filter((item) => typeof item === "string");
35422
36668
  }
35423
- function isRecord5(value) {
36669
+ function isRecord7(value) {
35424
36670
  return typeof value === "object" && value !== null && !Array.isArray(value);
35425
36671
  }
35426
36672
 
@@ -35613,6 +36859,11 @@ ${root} {
35613
36859
  --er-event-card-bg: rgb(var(--tb-surface));
35614
36860
  --er-event-card-border-width: var(--rb-border-width, 1px);
35615
36861
  --er-event-card-hover-opacity: 1;
36862
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
36863
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
36864
+ --er-radius: var(--rb-block-radius);
36865
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
36866
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
35616
36867
 
35617
36868
  /* Step indicator */
35618
36869
  --er-step-active: rgb(var(--tb-primary));
@@ -37187,7 +38438,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
37187
38438
  }
37188
38439
 
37189
38440
  // ../api/src/utils/isRecord.ts
37190
- function isRecord6(value) {
38441
+ function isRecord8(value) {
37191
38442
  return typeof value === "object" && value !== null && !Array.isArray(value);
37192
38443
  }
37193
38444
 
@@ -37494,7 +38745,7 @@ function sanitizeMarks(marks) {
37494
38745
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
37495
38746
  return [{ type: mark.type }];
37496
38747
  }
37497
- if (mark.type === "link" && isRecord6(mark.attrs) && typeof mark.attrs.href === "string") {
38748
+ if (mark.type === "link" && isRecord8(mark.attrs) && typeof mark.attrs.href === "string") {
37498
38749
  const attrs = { href: mark.attrs.href };
37499
38750
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
37500
38751
  attrs.target = mark.attrs.target;
@@ -37509,10 +38760,10 @@ function sanitizeMarks(marks) {
37509
38760
  return sanitized.length > 0 ? sanitized : void 0;
37510
38761
  }
37511
38762
  function unwrapRichTextValue(value) {
37512
- if (isRecord6(value) && isRecord6(value.doc)) {
38763
+ if (isRecord8(value) && isRecord8(value.doc)) {
37513
38764
  return unwrapRichTextValue(value.doc);
37514
38765
  }
37515
- if (isRecord6(value) && value.type === "doc") {
38766
+ if (isRecord8(value) && value.type === "doc") {
37516
38767
  return {
37517
38768
  type: "doc",
37518
38769
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -37521,7 +38772,7 @@ function unwrapRichTextValue(value) {
37521
38772
  return EMPTY_SITE_BANNER_BODY;
37522
38773
  }
37523
38774
  function isTipTapNodeLike(value) {
37524
- return isRecord6(value) && typeof value.type === "string";
38775
+ return isRecord8(value) && typeof value.type === "string";
37525
38776
  }
37526
38777
  function coerceTipTapNode(value) {
37527
38778
  return {
@@ -37529,9 +38780,9 @@ function coerceTipTapNode(value) {
37529
38780
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
37530
38781
  ...typeof value.text === "string" ? { text: value.text } : {},
37531
38782
  ...Array.isArray(value.marks) ? {
37532
- marks: value.marks.filter((mark) => isRecord6(mark) && typeof mark.type === "string").map((mark) => ({
38783
+ marks: value.marks.filter((mark) => isRecord8(mark) && typeof mark.type === "string").map((mark) => ({
37533
38784
  type: mark.type,
37534
- ...isRecord6(mark.attrs) ? { attrs: mark.attrs } : {}
38785
+ ...isRecord8(mark.attrs) ? { attrs: mark.attrs } : {}
37535
38786
  }))
37536
38787
  } : {}
37537
38788
  };
@@ -37714,7 +38965,7 @@ var ENTRY_REF_KEYS = [
37714
38965
  "entryId",
37715
38966
  "slug"
37716
38967
  ];
37717
- function isRecord7(value) {
38968
+ function isRecord9(value) {
37718
38969
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
37719
38970
  }
37720
38971
  function extractManualEntryRef(item) {
@@ -37722,7 +38973,7 @@ function extractManualEntryRef(item) {
37722
38973
  const trimmed = item.trim();
37723
38974
  return trimmed.length > 0 ? trimmed : null;
37724
38975
  }
37725
- if (!isRecord7(item)) return null;
38976
+ if (!isRecord9(item)) return null;
37726
38977
  for (const key of ENTRY_REF_KEYS) {
37727
38978
  const raw = item[key];
37728
38979
  if (typeof raw === "string" && raw.trim().length > 0) {