@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
@@ -3243,6 +3243,46 @@ var ENDPOINT_DEFINITIONS = {
3243
3243
  auth: "user",
3244
3244
  responseKind: "json"
3245
3245
  },
3246
+ listEntrySlotBlocks: {
3247
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3248
+ method: "GET",
3249
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3250
+ auth: "user",
3251
+ responseKind: "json",
3252
+ errors: ["resource:not_found"]
3253
+ },
3254
+ listEntryPageContentSlots: {
3255
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
3256
+ method: "GET",
3257
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
3258
+ auth: "user",
3259
+ responseKind: "json",
3260
+ errors: ["resource:not_found"]
3261
+ },
3262
+ createEntrySlotBlock: {
3263
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3264
+ method: "POST",
3265
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3266
+ auth: "user",
3267
+ responseKind: "json",
3268
+ errors: ["validation:invalid_input", "resource:not_found"]
3269
+ },
3270
+ reorderEntrySlotBlocks: {
3271
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
3272
+ method: "POST",
3273
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3274
+ auth: "user",
3275
+ responseKind: "json",
3276
+ errors: ["validation:invalid_input", "resource:not_found"]
3277
+ },
3278
+ deleteEntrySlotBlock: {
3279
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
3280
+ method: "DELETE",
3281
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3282
+ auth: "user",
3283
+ responseKind: "json",
3284
+ errors: ["resource:not_found"]
3285
+ },
3246
3286
  createBlock: {
3247
3287
  path: "/sites/{siteId}/pages/{pageId}/blocks",
3248
3288
  method: "POST",
@@ -6782,6 +6822,21 @@ var selectSourceSchema = z4.discriminatedUnion("kind", [
6782
6822
  function assertNeverSelectSource(value) {
6783
6823
  throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
6784
6824
  }
6825
+ var visibleWhenPredicateSchema = z4.object({
6826
+ field: z4.string().min(1),
6827
+ equals: z4.any().optional(),
6828
+ notEquals: z4.any().optional(),
6829
+ oneOf: z4.array(z4.any()).optional(),
6830
+ notIn: z4.array(z4.any()).optional(),
6831
+ minItems: z4.number().int().nonnegative().optional(),
6832
+ maxItems: z4.number().int().nonnegative().optional()
6833
+ });
6834
+ var visibleWhenSchema = z4.union([
6835
+ visibleWhenPredicateSchema,
6836
+ z4.object({
6837
+ allOf: z4.array(visibleWhenPredicateSchema).min(1)
6838
+ })
6839
+ ]);
6785
6840
  var uiSchema = z4.object({
6786
6841
  widget: z4.string().optional(),
6787
6842
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -6814,13 +6869,7 @@ var uiSchema = z4.object({
6814
6869
  showValue: z4.boolean().optional(),
6815
6870
  pattern: z4.string().optional(),
6816
6871
  placeholder: z4.string().optional(),
6817
- visibleWhen: z4.object({
6818
- field: z4.string().min(1),
6819
- equals: z4.any().optional(),
6820
- notEquals: z4.any().optional(),
6821
- oneOf: z4.array(z4.any()).optional(),
6822
- notIn: z4.array(z4.any()).optional()
6823
- }).optional(),
6872
+ visibleWhen: visibleWhenSchema.optional(),
6824
6873
  // Modal configuration for modal and group fields
6825
6874
  modalConfig: z4.object({
6826
6875
  buttonLabel: z4.string().optional(),
@@ -7587,6 +7636,7 @@ var eventListTreatmentValues = [
7587
7636
  ];
7588
7637
  var eyebrowTreatmentValues = [
7589
7638
  "plain",
7639
+ "accent",
7590
7640
  "pill",
7591
7641
  "accent-pill",
7592
7642
  "pill-bounce",
@@ -10601,6 +10651,95 @@ var joyStamp = defineButtonPersonality({
10601
10651
  }
10602
10652
  });
10603
10653
 
10654
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
10655
+ var ornateRitual = defineButtonPersonality({
10656
+ id: "ornate-ritual",
10657
+ name: "Ornate Ritual",
10658
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
10659
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
10660
+ buttonSystem: {
10661
+ global: {
10662
+ cornerStyle: "rounded",
10663
+ shadow: "none",
10664
+ textTransform: "uppercase",
10665
+ fontWeight: 600,
10666
+ borderWidth: 1,
10667
+ hoverTransform: "none",
10668
+ hoverColor: "none",
10669
+ letterSpacing: "loose"
10670
+ },
10671
+ sizes: {
10672
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
10673
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
10674
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
10675
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
10676
+ },
10677
+ variants: [
10678
+ {
10679
+ id: "primary",
10680
+ name: "Primary",
10681
+ enabled: true,
10682
+ priority: 1,
10683
+ background: { type: "solid", colorToken: "primary" },
10684
+ textColorToken: "primaryForeground",
10685
+ borderRadius: "rounded-md",
10686
+ border: { widthClass: "border", colorToken: "primary" },
10687
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10688
+ effects: {
10689
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
10690
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
10691
+ }
10692
+ },
10693
+ {
10694
+ id: "secondary",
10695
+ name: "Secondary",
10696
+ enabled: true,
10697
+ priority: 2,
10698
+ background: { type: "solid", colorToken: "secondary" },
10699
+ textColorToken: "primaryForeground",
10700
+ borderRadius: "rounded-md",
10701
+ border: { widthClass: "border", colorToken: "primary" },
10702
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10703
+ effects: {
10704
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10705
+ }
10706
+ },
10707
+ {
10708
+ id: "outline",
10709
+ name: "Outline",
10710
+ enabled: true,
10711
+ priority: 3,
10712
+ background: { type: "transparent" },
10713
+ textColorToken: "primary",
10714
+ borderRadius: "rounded-md",
10715
+ border: { widthClass: "border", colorToken: "primary" },
10716
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10717
+ effects: {
10718
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
10719
+ }
10720
+ },
10721
+ {
10722
+ id: "ghost",
10723
+ name: "Ghost",
10724
+ enabled: true,
10725
+ priority: 3,
10726
+ background: { type: "transparent" },
10727
+ textColorToken: "accent",
10728
+ borderRadius: "rounded-none",
10729
+ sizes: {
10730
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
10731
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
10732
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
10733
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
10734
+ },
10735
+ effects: {
10736
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
10737
+ }
10738
+ }
10739
+ ]
10740
+ }
10741
+ });
10742
+
10604
10743
  // ../theme-core/src/buttons/personalities/pebble.ts
10605
10744
  var pebble = defineButtonPersonality({
10606
10745
  id: "pebble",
@@ -10874,7 +11013,8 @@ var buttonPersonalities = [
10874
11013
  inkStamp,
10875
11014
  brushedWash,
10876
11015
  showtimePill,
10877
- joyStamp
11016
+ joyStamp,
11017
+ ornateRitual
10878
11018
  ];
10879
11019
  var personalitiesById = new Map(
10880
11020
  buttonPersonalities.map((p) => [p.id, p])
@@ -11504,7 +11644,7 @@ function rgbColorValue(token) {
11504
11644
  if (alpha === void 0) {
11505
11645
  return `rgb(var(${cssVar}))`;
11506
11646
  }
11507
- return `rgba(var(${cssVar}), ${alpha})`;
11647
+ return `rgb(var(${cssVar}) / ${alpha})`;
11508
11648
  }
11509
11649
  function backgroundColorStyle(token) {
11510
11650
  return { backgroundColor: rgbColorValue(token) };
@@ -12609,6 +12749,28 @@ var warmDarkEmber = definePaletteVariant({
12609
12749
  { name: "border", hex: "#894e31" }
12610
12750
  ]
12611
12751
  });
12752
+ var warmDarkKirtanGold = definePaletteVariant({
12753
+ id: "warm-dark-kirtan-gold",
12754
+ name: "Warm Dark \u2014 Kirtan Gold",
12755
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
12756
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
12757
+ mode: "dark",
12758
+ colors: [
12759
+ { name: "primary", hex: "#ffcdb2" },
12760
+ { name: "secondary", hex: "#b5838d" },
12761
+ { name: "accent", hex: "#e5989b" },
12762
+ { name: "success", hex: "#8fbf8f" },
12763
+ { name: "warning", hex: "#f2b86b" },
12764
+ { name: "destructive", hex: "#d96b6b" },
12765
+ { name: "background", hex: "#403944" },
12766
+ { name: "surface", hex: "#403944" },
12767
+ { name: "surfaceAlt", hex: "#372f3b" },
12768
+ { name: "muted", hex: "#4d4550" },
12769
+ { name: "text", hex: "#e6d2d5" },
12770
+ { name: "primaryForeground", hex: "#403944" },
12771
+ { name: "border", hex: "#8d747a" }
12772
+ ]
12773
+ });
12612
12774
 
12613
12775
  // ../theme-core/src/palette/variants/index.ts
12614
12776
  var paletteVariants = [
@@ -12632,7 +12794,8 @@ var paletteVariants = [
12632
12794
  softNaturalWatercolor,
12633
12795
  softNaturalLilac,
12634
12796
  // Warm-dark family (dark mode)
12635
- warmDarkEmber
12797
+ warmDarkEmber,
12798
+ warmDarkKirtanGold
12636
12799
  ];
12637
12800
  var paletteVariantsById = new Map(
12638
12801
  paletteVariants.map((v) => [v.id, v])
@@ -14201,9 +14364,125 @@ function headerConfigurationKey(configuration) {
14201
14364
  function asFooterLookId(value) {
14202
14365
  return value;
14203
14366
  }
14204
- var guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
14367
+ function asFooterLayoutId(value) {
14368
+ return value;
14369
+ }
14370
+ function asFooterStyleId(value) {
14371
+ return value;
14372
+ }
14373
+ var guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
14374
+ var footerLayoutCatalog = defineExactCatalog()([
14375
+ {
14376
+ id: asFooterLayoutId("identity"),
14377
+ label: "Identity",
14378
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
14379
+ },
14380
+ {
14381
+ id: asFooterLayoutId("centered"),
14382
+ label: "Centered",
14383
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
14384
+ maxRecommendedNavDensity: "sparse"
14385
+ },
14386
+ {
14387
+ id: asFooterLayoutId("split"),
14388
+ label: "Split",
14389
+ description: "Navigation and brand signoff separated into a wider split footer.",
14390
+ requiresFooterNav: true,
14391
+ maxRecommendedNavDensity: "balanced"
14392
+ },
14393
+ {
14394
+ id: asFooterLayoutId("columns"),
14395
+ label: "Columns",
14396
+ description: "Grouped footer navigation columns with a supporting bottom line.",
14397
+ requiresFooterNav: true,
14398
+ requiresFooterNavGroups: true
14399
+ }
14400
+ ]);
14401
+ var footerStyleCatalog = defineExactCatalog()([
14402
+ {
14403
+ id: asFooterStyleId("quiet"),
14404
+ label: "Quiet",
14405
+ description: "Lightweight, practical footer treatment."
14406
+ },
14407
+ {
14408
+ id: asFooterStyleId("calm"),
14409
+ label: "Calm",
14410
+ description: "Soft centered treatment with restrained dividers."
14411
+ },
14412
+ {
14413
+ id: asFooterStyleId("editorial"),
14414
+ label: "Editorial",
14415
+ description: "Text-forward treatment with fine-line structure."
14416
+ },
14417
+ {
14418
+ id: asFooterStyleId("brand-band"),
14419
+ label: "Brand band",
14420
+ description: "High-contrast brand treatment with a stronger bottom bar."
14421
+ }
14422
+ ]);
14423
+ var footerLayoutsById = new Map(
14424
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
14425
+ );
14426
+ var footerStylesById = new Map(
14427
+ footerStyleCatalog.map((style) => [style.id, style])
14428
+ );
14429
+ function identityQuietFooter(theme) {
14430
+ return {
14431
+ ...theme.footer,
14432
+ variant: "simple",
14433
+ maxWidth: "container",
14434
+ background: {
14435
+ type: "color",
14436
+ color: "surface"
14437
+ },
14438
+ navStyle: "minimal",
14439
+ navWeight: "regular",
14440
+ navColor: "text",
14441
+ navLinkStyle: {
14442
+ typography: "body",
14443
+ fontWeight: "regular",
14444
+ textTransform: "none",
14445
+ italic: false,
14446
+ colorToken: "text",
14447
+ hoverColorToken: "primary",
14448
+ padding: "none",
14449
+ borderRadius: "none"
14450
+ },
14451
+ navLayout: {
14452
+ layout: "inline-wrap",
14453
+ align: "start",
14454
+ gapX: "default",
14455
+ gapY: "tight"
14456
+ },
14457
+ logo: {
14458
+ showLogo: true,
14459
+ showLogoText: true,
14460
+ placement: "left",
14461
+ size: "sm",
14462
+ align: "start"
14463
+ },
14464
+ bottomBar: {
14465
+ enabled: false,
14466
+ fullBleed: false,
14467
+ textAlign: "left",
14468
+ paddingX: "default",
14469
+ paddingY: "compact",
14470
+ borderTop: {
14471
+ width: "none"
14472
+ }
14473
+ }
14474
+ };
14475
+ }
14205
14476
  function mutedGroundingFooter(theme) {
14206
- return theme.footer;
14477
+ return {
14478
+ ...identityQuietFooter(theme),
14479
+ background: theme.footer.background,
14480
+ navStyle: theme.footer.navStyle,
14481
+ navColor: theme.footer.navColor,
14482
+ navWeight: theme.footer.navWeight,
14483
+ navLinkStyle: theme.footer.navLinkStyle,
14484
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
14485
+ };
14207
14486
  }
14208
14487
  function brandTwoBandFooter(theme) {
14209
14488
  return {
@@ -14308,6 +14587,53 @@ function centeredCalmFooter(theme) {
14308
14587
  }
14309
14588
  };
14310
14589
  }
14590
+ function splitEditorialFooter(theme) {
14591
+ return {
14592
+ ...theme.footer,
14593
+ variant: "split",
14594
+ maxWidth: "container",
14595
+ background: {
14596
+ type: "color",
14597
+ color: "surface"
14598
+ },
14599
+ navStyle: "minimal",
14600
+ navWeight: "regular",
14601
+ navColor: "text",
14602
+ navLinkStyle: {
14603
+ typography: "body",
14604
+ fontWeight: "regular",
14605
+ textTransform: "none",
14606
+ italic: false,
14607
+ colorToken: "text",
14608
+ hoverColorToken: "primary",
14609
+ padding: "none",
14610
+ borderRadius: "none"
14611
+ },
14612
+ navLayout: {
14613
+ layout: "inline-wrap",
14614
+ align: "start",
14615
+ gapX: "relaxed",
14616
+ gapY: "tight"
14617
+ },
14618
+ logo: {
14619
+ showLogo: true,
14620
+ showLogoText: true,
14621
+ placement: "right",
14622
+ size: "sm",
14623
+ align: "end"
14624
+ },
14625
+ bottomBar: {
14626
+ enabled: true,
14627
+ fullBleed: false,
14628
+ textAlign: "left",
14629
+ paddingX: "default",
14630
+ paddingY: "compact",
14631
+ borderTop: {
14632
+ width: "thin"
14633
+ }
14634
+ }
14635
+ };
14636
+ }
14311
14637
  function editorialColumnsFooter(theme) {
14312
14638
  return {
14313
14639
  ...theme.footer,
@@ -14350,25 +14676,47 @@ function editorialColumnsFooter(theme) {
14350
14676
  };
14351
14677
  }
14352
14678
  var footerLookCatalog = defineExactCatalog()([
14679
+ {
14680
+ id: asFooterLookId("footer-identity-quiet"),
14681
+ label: "Identity footer",
14682
+ layoutId: asFooterLayoutId("identity"),
14683
+ styleId: asFooterStyleId("quiet"),
14684
+ compile: identityQuietFooter
14685
+ },
14353
14686
  {
14354
14687
  id: asFooterLookId("footer-muted-grounding"),
14355
14688
  label: "Muted grounding footer",
14689
+ layoutId: asFooterLayoutId("identity"),
14690
+ styleId: asFooterStyleId("quiet"),
14691
+ hiddenFromLayoutStyleControls: true,
14356
14692
  compile: mutedGroundingFooter
14357
14693
  },
14358
14694
  {
14359
14695
  id: asFooterLookId("footer-centered-calm"),
14360
14696
  label: "Centered calm footer",
14697
+ layoutId: asFooterLayoutId("centered"),
14698
+ styleId: asFooterStyleId("calm"),
14361
14699
  compile: centeredCalmFooter
14362
14700
  },
14701
+ {
14702
+ id: asFooterLookId("footer-split-editorial"),
14703
+ label: "Split editorial footer",
14704
+ layoutId: asFooterLayoutId("split"),
14705
+ styleId: asFooterStyleId("editorial"),
14706
+ compile: splitEditorialFooter
14707
+ },
14363
14708
  {
14364
14709
  id: asFooterLookId("footer-editorial-columns"),
14365
14710
  label: "Editorial columns footer",
14711
+ layoutId: asFooterLayoutId("columns"),
14712
+ styleId: asFooterStyleId("editorial"),
14366
14713
  compile: editorialColumnsFooter
14367
14714
  },
14368
14715
  {
14369
14716
  id: asFooterLookId("site-footer-brand-two-band"),
14370
14717
  label: "Two-band brand footer",
14371
- maxRecommendedNavDensity: "balanced",
14718
+ layoutId: asFooterLayoutId("split"),
14719
+ styleId: asFooterStyleId("brand-band"),
14372
14720
  allowedContentPresence: ["default-footer", "default-and-blocks"],
14373
14721
  compile: brandTwoBandFooter
14374
14722
  }
@@ -14571,6 +14919,30 @@ var luxeContrastTypography = {
14571
14919
  },
14572
14920
  scale: "spacious"
14573
14921
  };
14922
+ var kirtanOrnateTypography = {
14923
+ body: {
14924
+ family: "Jost, system-ui, sans-serif",
14925
+ size: "md",
14926
+ weight: "regular",
14927
+ lineHeight: "relaxed",
14928
+ letterSpacing: "normal"
14929
+ },
14930
+ headings: {
14931
+ default: {
14932
+ family: "Marcellus, Georgia, serif",
14933
+ weight: "regular",
14934
+ lineHeight: "normal",
14935
+ letterSpacing: "normal",
14936
+ colorToken: "primary",
14937
+ italic: null,
14938
+ case: null
14939
+ },
14940
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14941
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14942
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
14943
+ },
14944
+ scale: "spacious"
14945
+ };
14574
14946
  var boldDisplayTypography = {
14575
14947
  body: {
14576
14948
  family: "Manrope, system-ui, sans-serif",
@@ -14605,16 +14977,16 @@ var originalJoyTypography = {
14605
14977
  },
14606
14978
  headings: {
14607
14979
  default: {
14608
- family: "Bricolage Grotesque, system-ui, sans-serif",
14609
- weight: "bold",
14980
+ family: "Lobster, cursive",
14981
+ weight: "regular",
14610
14982
  lineHeight: "normal",
14611
- letterSpacing: "tight",
14983
+ letterSpacing: "normal",
14612
14984
  italic: null,
14613
14985
  case: null
14614
14986
  },
14615
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14616
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14617
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
14987
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14988
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
14989
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
14618
14990
  },
14619
14991
  scale: "balanced"
14620
14992
  };
@@ -14679,6 +15051,32 @@ var typographyPresets = [
14679
15051
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14680
15052
  typography: luxeContrastTypography
14681
15053
  }),
15054
+ defineTypographyPreset({
15055
+ id: "typography-preset:kirtan-ornate",
15056
+ name: "Kirtan Ornate",
15057
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
15058
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
15059
+ recommendedFonts: {
15060
+ body: ["Jost", "Manrope", "Inter"],
15061
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
15062
+ },
15063
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
15064
+ typography: kirtanOrnateTypography,
15065
+ heroTypography: {
15066
+ headlineSize: "6xl",
15067
+ headlineLineHeight: "normal",
15068
+ subheadlineSize: "xl",
15069
+ subheadlineLineHeight: "relaxed",
15070
+ microHeadlineSize: "5xl",
15071
+ microHeadlineLineHeight: "normal",
15072
+ microSubheadlineSize: "lg",
15073
+ microSubheadlineLineHeight: "relaxed",
15074
+ responsive: {
15075
+ tablet: { headlineSize: "5xl" },
15076
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
15077
+ }
15078
+ }
15079
+ }),
14682
15080
  defineTypographyPreset({
14683
15081
  id: "typography-preset:bold-display",
14684
15082
  name: "Bold Display",
@@ -14708,11 +15106,11 @@ var typographyPresets = [
14708
15106
  defineTypographyPreset({
14709
15107
  id: "typography-preset:original-joy",
14710
15108
  name: "Original Joy",
14711
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
14712
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
15109
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
15110
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
14713
15111
  recommendedFonts: {
14714
15112
  body: ["DM Sans", "Inter", "Manrope"],
14715
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
15113
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
14716
15114
  },
14717
15115
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14718
15116
  typography: originalJoyTypography,
@@ -14736,6 +15134,319 @@ var typographyPresetsById = new Map(
14736
15134
  typographyPresets.map((preset2) => [preset2.id, preset2])
14737
15135
  );
14738
15136
 
15137
+ // ../theme-core/src/site-styles/designState.ts
15138
+ import { z as z24 } from "zod";
15139
+ var themeV2DesignStateSchemaVersion = 1;
15140
+ var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
15141
+ var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
15142
+ var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
15143
+ fields3[0],
15144
+ ...fields3.slice(1)
15145
+ ]);
15146
+ var heroLegibilityStrategySchema = z24.enum([
15147
+ "none",
15148
+ "scrim-gradient",
15149
+ "solid-panel"
15150
+ ]);
15151
+ var heroCompositionIntentSchema = z24.enum([
15152
+ "center",
15153
+ "bottom-left"
15154
+ ]);
15155
+ var heroTypographyScaleIntentSchema = z24.enum([
15156
+ "quiet",
15157
+ "editorial",
15158
+ "display",
15159
+ "poster"
15160
+ ]);
15161
+ var sectionHeightIntentSchema = z24.enum([
15162
+ "default",
15163
+ "banner",
15164
+ "hero",
15165
+ "immersive"
15166
+ ]);
15167
+ var imageSurfaceTreatmentIntensitySchema = z24.enum(["soft", "balanced", "strong"]);
15168
+ var imageSurfaceMotionSchema = z24.enum(["static", "fixed-frame"]);
15169
+ var imageSurfaceTreatmentSchema = z24.discriminatedUnion("kind", [
15170
+ z24.object({ kind: z24.literal("none") }).strict(),
15171
+ z24.object({
15172
+ kind: z24.literal("brand-scrim"),
15173
+ token: z24.enum(["primary", "secondary", "accent"]),
15174
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15175
+ }).strict(),
15176
+ z24.object({
15177
+ kind: z24.literal("brand-wash"),
15178
+ token: z24.enum(["primary", "secondary", "accent"]),
15179
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15180
+ }).strict(),
15181
+ z24.object({
15182
+ kind: z24.literal("neutral-scrim"),
15183
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15184
+ }).strict(),
15185
+ z24.object({
15186
+ kind: z24.literal("neutral-wash"),
15187
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15188
+ }).strict(),
15189
+ z24.object({
15190
+ kind: z24.literal("solid-panel"),
15191
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15192
+ }).strict()
15193
+ ]);
15194
+ var testimonialCardTreatmentSchema = z24.enum(["default", "accent-quote"]);
15195
+ var tileTreatmentSchema = z24.enum(tileTreatmentValues);
15196
+ var eventListTreatmentSchema = z24.enum(eventListTreatmentValues);
15197
+ var eyebrowTreatmentSchema = z24.enum(eyebrowTreatmentValues);
15198
+ function uniqueNonEmpty(values) {
15199
+ const uniqueValues = [...new Set(values)];
15200
+ const firstValue = uniqueValues[0];
15201
+ if (!firstValue) {
15202
+ throw new Error("Expected at least one Theme V2 design state option.");
15203
+ }
15204
+ return [firstValue, ...uniqueValues.slice(1)];
15205
+ }
15206
+ var userPanelTreatments = uniqueNonEmpty(
15207
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
15208
+ );
15209
+ var userFlushTreatments = uniqueNonEmpty(
15210
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
15211
+ );
15212
+ var userFlushBleeds = uniqueNonEmpty(
15213
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
15214
+ );
15215
+ var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
15216
+ z24.object({ kind: z24.literal("plain") }).strict(),
15217
+ z24.object({
15218
+ kind: z24.literal("panel"),
15219
+ treatment: z24.enum(userPanelTreatments)
15220
+ }).strict(),
15221
+ z24.object({
15222
+ kind: z24.literal("flush-panel"),
15223
+ treatment: z24.enum(userFlushTreatments),
15224
+ bleed: z24.enum(userFlushBleeds)
15225
+ }).strict()
15226
+ ]);
15227
+ var blockDesignPlanSchema = z24.object({
15228
+ blockId: z24.string().min(1).transform(asDesignBlockId),
15229
+ blockKind: z24.string().min(1),
15230
+ purpose: z24.string().min(1),
15231
+ sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
15232
+ contentFrame: contentFrameIntentSchema,
15233
+ itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
15234
+ transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
15235
+ emphasis: z24.enum(userDesignOptionCatalog.emphases),
15236
+ sectionHeight: sectionHeightIntentSchema.optional(),
15237
+ heroLegibility: heroLegibilityStrategySchema.optional(),
15238
+ heroComposition: heroCompositionIntentSchema.optional(),
15239
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
15240
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
15241
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
15242
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
15243
+ tileTreatment: tileTreatmentSchema.optional(),
15244
+ eventListTreatment: eventListTreatmentSchema.optional(),
15245
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
15246
+ }).strict();
15247
+ var styleAuthoritySchema = z24.discriminatedUnion("kind", [
15248
+ z24.object({
15249
+ kind: z24.literal("theme-v2"),
15250
+ source: designResolutionPolicySchema,
15251
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
15252
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
15253
+ templateVersion: z24.number().int().nonnegative(),
15254
+ resolverVersion: z24.number().int().nonnegative()
15255
+ }).strict(),
15256
+ z24.object({
15257
+ kind: z24.literal("legacy-raw"),
15258
+ reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
15259
+ }).strict(),
15260
+ z24.object({
15261
+ kind: z24.literal("advanced-detached"),
15262
+ reason: z24.literal("detached-custom-runtime-fields")
15263
+ }).strict()
15264
+ ]);
15265
+ var blockRuntimeStyleAuthoritySchema = z24.object({
15266
+ unit: z24.literal("block-runtime-fields"),
15267
+ blockId: z24.string().min(1).transform(asDesignBlockId),
15268
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
15269
+ authority: styleAuthoritySchema
15270
+ }).strict();
15271
+ var persistedPageDesignStateV1Schema = z24.object({
15272
+ schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
15273
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
15274
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
15275
+ templateVersion: z24.number().int().nonnegative(),
15276
+ resolverVersion: z24.number().int().nonnegative(),
15277
+ rhythmPresetId: z24.string().min(1),
15278
+ blocks: z24.array(blockDesignPlanSchema),
15279
+ styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
15280
+ }).strict();
15281
+
15282
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
15283
+ function defineDesignRuntimeRules(rules) {
15284
+ return rules;
15285
+ }
15286
+ function defineComponentRuntimeRules(rules) {
15287
+ return rules;
15288
+ }
15289
+ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
15290
+ sectionSurfaces: {
15291
+ base: {},
15292
+ "muted-band": {
15293
+ background: {
15294
+ type: "color",
15295
+ color: "muted"
15296
+ }
15297
+ },
15298
+ "accent-band": {
15299
+ background: {
15300
+ type: "color",
15301
+ color: "primary"
15302
+ }
15303
+ },
15304
+ "brand-depth-band": {
15305
+ background: {
15306
+ type: "color",
15307
+ color: "primary-800"
15308
+ }
15309
+ },
15310
+ "hero-image": {
15311
+ background: {
15312
+ type: "image",
15313
+ opacity: 1,
15314
+ position: "center center",
15315
+ ...uniformSectionForeground("text")
15316
+ }
15317
+ }
15318
+ },
15319
+ heroLegibility: {
15320
+ "scrim-gradient": {
15321
+ type: "gradient",
15322
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
15323
+ opacity: 1
15324
+ },
15325
+ "solid-panel": {
15326
+ type: "color",
15327
+ color: "surface",
15328
+ opacity: 0.88
15329
+ }
15330
+ },
15331
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
15332
+ });
15333
+ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
15334
+ panelFrames: {
15335
+ inset: {
15336
+ spacing: "comfortable",
15337
+ rounded: "xl",
15338
+ raised: false,
15339
+ background: {
15340
+ type: "color",
15341
+ color: "surfaceAlt",
15342
+ textColor: "text"
15343
+ }
15344
+ },
15345
+ raised: {
15346
+ spacing: "comfortable",
15347
+ rounded: "xl",
15348
+ raised: true,
15349
+ background: {
15350
+ type: "color",
15351
+ color: "surfaceAlt",
15352
+ textColor: "text"
15353
+ }
15354
+ },
15355
+ editorial: {
15356
+ spacing: "medium",
15357
+ rounded: "xl",
15358
+ raised: false,
15359
+ background: {
15360
+ type: "color",
15361
+ color: "surface",
15362
+ textColor: "text"
15363
+ }
15364
+ }
15365
+ },
15366
+ flushFrames: {
15367
+ "media-panel": {
15368
+ fullWidth: true,
15369
+ spacing: "none",
15370
+ rounded: "none",
15371
+ raised: false
15372
+ }
15373
+ },
15374
+ itemSurfaces: {
15375
+ none: null,
15376
+ default: {
15377
+ spacing: "medium",
15378
+ rounded: "lg",
15379
+ raised: false
15380
+ },
15381
+ flat: {
15382
+ spacing: "medium",
15383
+ rounded: "lg",
15384
+ raised: false
15385
+ },
15386
+ outlined: {
15387
+ spacing: "medium",
15388
+ rounded: "lg",
15389
+ raised: false,
15390
+ border: {
15391
+ enabled: true,
15392
+ width: "1",
15393
+ colorToken: "border"
15394
+ }
15395
+ },
15396
+ raised: {
15397
+ spacing: "medium",
15398
+ rounded: "xl",
15399
+ raised: true
15400
+ },
15401
+ inset: {
15402
+ treatment: "soft-panel",
15403
+ spacing: "comfortable",
15404
+ rounded: "xl",
15405
+ raised: false,
15406
+ border: {
15407
+ enabled: false
15408
+ },
15409
+ background: {
15410
+ type: "color",
15411
+ color: "surfaceAlt",
15412
+ textColor: "text"
15413
+ }
15414
+ },
15415
+ editorial: {
15416
+ // Boxless open column with a short rule on top; the visual treatment
15417
+ // lives in blocks-static/card-treatments.css.
15418
+ treatment: "editorial-rule",
15419
+ spacing: "none",
15420
+ rounded: "none",
15421
+ raised: false,
15422
+ border: {
15423
+ enabled: false
15424
+ }
15425
+ },
15426
+ "color-blocked": {
15427
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
15428
+ // (by position) and staggered offset live in
15429
+ // blocks-static/card-treatments.css; here we set the shared shape:
15430
+ // generous padding, large radius, no border, flat (no shadow).
15431
+ treatment: "color-blocked",
15432
+ spacing: "spacious",
15433
+ rounded: "2xl",
15434
+ raised: false,
15435
+ border: {
15436
+ enabled: false
15437
+ }
15438
+ }
15439
+ }
15440
+ });
15441
+ function uniformSectionForeground(token) {
15442
+ return {
15443
+ textColor: token,
15444
+ headingColor: token,
15445
+ linkColor: token,
15446
+ supportingColor: token
15447
+ };
15448
+ }
15449
+
14739
15450
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
14740
15451
  var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
14741
15452
  var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
@@ -14754,6 +15465,7 @@ var curatedSiteStyleIdValues = [
14754
15465
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
14755
15466
  "site-style:bold-launch",
14756
15467
  "site-style:south-west-twerk-school",
15468
+ "site-style:kirtan-ornate",
14757
15469
  "site-style:original-joy"
14758
15470
  ];
14759
15471
  var quietBudget = {
@@ -14780,6 +15492,50 @@ var expressiveBudget = {
14780
15492
  mediaDensity: "high",
14781
15493
  decorativeRepetition: "medium"
14782
15494
  };
15495
+ var kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
15496
+ ...defaultDesignRuntimeRules,
15497
+ defaultEyebrowTreatment: "accent",
15498
+ sectionSurfaces: {
15499
+ ...defaultDesignRuntimeRules.sectionSurfaces,
15500
+ "muted-band": {
15501
+ background: {
15502
+ type: "color",
15503
+ color: "muted"
15504
+ },
15505
+ foreground: {
15506
+ textColor: "text",
15507
+ headingColor: "primary",
15508
+ linkColor: "primary",
15509
+ supportingColor: "text"
15510
+ }
15511
+ },
15512
+ "brand-depth-band": {
15513
+ background: {
15514
+ type: "color",
15515
+ color: "primary-800"
15516
+ },
15517
+ foreground: {
15518
+ textColor: "text",
15519
+ headingColor: "primary",
15520
+ linkColor: "primary",
15521
+ supportingColor: "text"
15522
+ }
15523
+ },
15524
+ "hero-image": {
15525
+ background: {
15526
+ type: "image",
15527
+ opacity: 1,
15528
+ position: "center center"
15529
+ },
15530
+ foreground: {
15531
+ textColor: "text",
15532
+ headingColor: "primary",
15533
+ linkColor: "primary",
15534
+ supportingColor: "text"
15535
+ }
15536
+ }
15537
+ }
15538
+ });
14783
15539
  var expressiveUnderlineInputs = {
14784
15540
  base: {
14785
15541
  background: { type: "transparent" },
@@ -14817,6 +15573,43 @@ var expressiveUnderlineInputs = {
14817
15573
  opacity: 0.6
14818
15574
  }
14819
15575
  };
15576
+ var ornateDarkInputs = {
15577
+ base: {
15578
+ background: { type: "solid", colorToken: "surfaceAlt" },
15579
+ textColorToken: "text",
15580
+ border: {
15581
+ widthClass: "border",
15582
+ colorToken: "primary/45",
15583
+ style: "all"
15584
+ },
15585
+ corners: "square",
15586
+ shadow: null,
15587
+ spacing: "medium",
15588
+ fontSize: "base"
15589
+ },
15590
+ label: {
15591
+ textColorToken: "primary",
15592
+ fontWeight: "semibold",
15593
+ fontSize: "xs",
15594
+ textTransform: "uppercase",
15595
+ letterSpacing: "wider",
15596
+ opacity: 1
15597
+ },
15598
+ focus: {
15599
+ ringColorToken: "primary/18",
15600
+ ringWidth: "2",
15601
+ borderColorToken: "primary/70"
15602
+ },
15603
+ error: {
15604
+ borderColorToken: "destructive",
15605
+ textColorToken: "destructive"
15606
+ },
15607
+ disabled: {
15608
+ backgroundColorToken: "muted",
15609
+ textColorToken: "mutedText",
15610
+ opacity: 0.6
15611
+ }
15612
+ };
14820
15613
  function uniqueContentFrameKinds() {
14821
15614
  const kinds = [
14822
15615
  ...new Set(
@@ -14874,6 +15667,7 @@ function defineCuratedSiteStyle(input) {
14874
15667
  // clean/minimal styles default to none.
14875
15668
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
14876
15669
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
15670
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
14877
15671
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
14878
15672
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
14879
15673
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -15824,6 +16618,80 @@ var curatedSiteStyles = [
15824
16618
  paletteChoice("high-contrast-ink")
15825
16619
  ]
15826
16620
  }),
16621
+ defineCuratedSiteStyle({
16622
+ id: "site-style:kirtan-ornate",
16623
+ name: "Kirtan Ornate",
16624
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
16625
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
16626
+ 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.",
16627
+ selectionKeywordRules: [
16628
+ { kind: "word", value: "kirtan" },
16629
+ { kind: "word", value: "chanting" },
16630
+ { kind: "word", value: "ceremony" },
16631
+ { kind: "word", value: "devotional" }
16632
+ ],
16633
+ tokenRecipes: {
16634
+ palette: "brand-led",
16635
+ contrast: "strong",
16636
+ radius: "soft",
16637
+ shadow: "subtle",
16638
+ typography: "serif-editorial",
16639
+ spacing: "airy",
16640
+ motion: "subtle"
16641
+ },
16642
+ compositionBudget: expressiveBudget,
16643
+ typographyPresetChoices: [
16644
+ typographyChoice("typography-preset:kirtan-ornate"),
16645
+ typographyChoice("typography-preset:luxe-contrast"),
16646
+ typographyChoice("typography-preset:editorial-serif")
16647
+ ],
16648
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
16649
+ themeOverrides: {
16650
+ accordions: warmInsetAccordionSystem,
16651
+ cards: originalJoyCardSystem,
16652
+ testimonialQuote: serifDisplayQuote,
16653
+ bodyText: {
16654
+ intro: {
16655
+ paragraphSize: "editorial",
16656
+ headingSize: "editorial"
16657
+ }
16658
+ },
16659
+ inputs: ornateDarkInputs
16660
+ },
16661
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
16662
+ recommendedAppearancePresetIds: [
16663
+ "hero-brand-scrim-fixed-frame",
16664
+ "media-text-quiet-story",
16665
+ "events-lined-panel",
16666
+ "schedule-details-brand-depth",
16667
+ "testimonials-statement-cards",
16668
+ "contact-form-panel"
16669
+ ],
16670
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
16671
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
16672
+ recommendedHeaderStyleChoicesByLayout: {
16673
+ floating: [
16674
+ headerStyleChoice("minimal-surface"),
16675
+ headerStyleChoice("split-glass"),
16676
+ headerStyleChoice("glass")
16677
+ ]
16678
+ },
16679
+ recommendedHeaderLookIds: ["minimal-transparent"],
16680
+ recommendedFooterLookIds: [
16681
+ "site-footer-brand-two-band",
16682
+ "footer-muted-grounding"
16683
+ ],
16684
+ buttonPersonalityChoices: [
16685
+ buttonChoice("ornate-ritual"),
16686
+ buttonChoice("joy-stamp"),
16687
+ buttonChoice("ink-stamp")
16688
+ ],
16689
+ paletteVariantChoices: [
16690
+ paletteChoice("warm-dark-kirtan-gold"),
16691
+ paletteChoice("warm-dark-ember"),
16692
+ paletteChoice("brand-led-burgundy-gold")
16693
+ ]
16694
+ }),
15827
16695
  defineCuratedSiteStyle({
15828
16696
  id: "site-style:original-joy",
15829
16697
  name: "Original Joy",
@@ -15927,319 +16795,6 @@ var pageFlowPresets = [
15927
16795
  }
15928
16796
  ];
15929
16797
 
15930
- // ../theme-core/src/site-styles/designState.ts
15931
- import { z as z24 } from "zod";
15932
- var themeV2DesignStateSchemaVersion = 1;
15933
- var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
15934
- var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
15935
- var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
15936
- fields3[0],
15937
- ...fields3.slice(1)
15938
- ]);
15939
- var heroLegibilityStrategySchema = z24.enum([
15940
- "none",
15941
- "scrim-gradient",
15942
- "solid-panel"
15943
- ]);
15944
- var heroCompositionIntentSchema = z24.enum([
15945
- "center",
15946
- "bottom-left"
15947
- ]);
15948
- var heroTypographyScaleIntentSchema = z24.enum([
15949
- "quiet",
15950
- "editorial",
15951
- "display",
15952
- "poster"
15953
- ]);
15954
- var sectionHeightIntentSchema = z24.enum([
15955
- "default",
15956
- "banner",
15957
- "hero",
15958
- "immersive"
15959
- ]);
15960
- var imageSurfaceTreatmentIntensitySchema = z24.enum(["soft", "balanced", "strong"]);
15961
- var imageSurfaceMotionSchema = z24.enum(["static", "fixed-frame"]);
15962
- var imageSurfaceTreatmentSchema = z24.discriminatedUnion("kind", [
15963
- z24.object({ kind: z24.literal("none") }).strict(),
15964
- z24.object({
15965
- kind: z24.literal("brand-scrim"),
15966
- token: z24.enum(["primary", "secondary", "accent"]),
15967
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15968
- }).strict(),
15969
- z24.object({
15970
- kind: z24.literal("brand-wash"),
15971
- token: z24.enum(["primary", "secondary", "accent"]),
15972
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15973
- }).strict(),
15974
- z24.object({
15975
- kind: z24.literal("neutral-scrim"),
15976
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15977
- }).strict(),
15978
- z24.object({
15979
- kind: z24.literal("neutral-wash"),
15980
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15981
- }).strict(),
15982
- z24.object({
15983
- kind: z24.literal("solid-panel"),
15984
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
15985
- }).strict()
15986
- ]);
15987
- var testimonialCardTreatmentSchema = z24.enum(["default", "accent-quote"]);
15988
- var tileTreatmentSchema = z24.enum(tileTreatmentValues);
15989
- var eventListTreatmentSchema = z24.enum(eventListTreatmentValues);
15990
- var eyebrowTreatmentSchema = z24.enum(eyebrowTreatmentValues);
15991
- function uniqueNonEmpty(values) {
15992
- const uniqueValues = [...new Set(values)];
15993
- const firstValue = uniqueValues[0];
15994
- if (!firstValue) {
15995
- throw new Error("Expected at least one Theme V2 design state option.");
15996
- }
15997
- return [firstValue, ...uniqueValues.slice(1)];
15998
- }
15999
- var userPanelTreatments = uniqueNonEmpty(
16000
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
16001
- );
16002
- var userFlushTreatments = uniqueNonEmpty(
16003
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
16004
- );
16005
- var userFlushBleeds = uniqueNonEmpty(
16006
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
16007
- );
16008
- var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
16009
- z24.object({ kind: z24.literal("plain") }).strict(),
16010
- z24.object({
16011
- kind: z24.literal("panel"),
16012
- treatment: z24.enum(userPanelTreatments)
16013
- }).strict(),
16014
- z24.object({
16015
- kind: z24.literal("flush-panel"),
16016
- treatment: z24.enum(userFlushTreatments),
16017
- bleed: z24.enum(userFlushBleeds)
16018
- }).strict()
16019
- ]);
16020
- var blockDesignPlanSchema = z24.object({
16021
- blockId: z24.string().min(1).transform(asDesignBlockId),
16022
- blockKind: z24.string().min(1),
16023
- purpose: z24.string().min(1),
16024
- sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
16025
- contentFrame: contentFrameIntentSchema,
16026
- itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
16027
- transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
16028
- emphasis: z24.enum(userDesignOptionCatalog.emphases),
16029
- sectionHeight: sectionHeightIntentSchema.optional(),
16030
- heroLegibility: heroLegibilityStrategySchema.optional(),
16031
- heroComposition: heroCompositionIntentSchema.optional(),
16032
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
16033
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
16034
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
16035
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
16036
- tileTreatment: tileTreatmentSchema.optional(),
16037
- eventListTreatment: eventListTreatmentSchema.optional(),
16038
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
16039
- }).strict();
16040
- var styleAuthoritySchema = z24.discriminatedUnion("kind", [
16041
- z24.object({
16042
- kind: z24.literal("theme-v2"),
16043
- source: designResolutionPolicySchema,
16044
- siteStyleId: z24.string().min(1).transform(asSiteStyleId),
16045
- templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
16046
- templateVersion: z24.number().int().nonnegative(),
16047
- resolverVersion: z24.number().int().nonnegative()
16048
- }).strict(),
16049
- z24.object({
16050
- kind: z24.literal("legacy-raw"),
16051
- reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
16052
- }).strict(),
16053
- z24.object({
16054
- kind: z24.literal("advanced-detached"),
16055
- reason: z24.literal("detached-custom-runtime-fields")
16056
- }).strict()
16057
- ]);
16058
- var blockRuntimeStyleAuthoritySchema = z24.object({
16059
- unit: z24.literal("block-runtime-fields"),
16060
- blockId: z24.string().min(1).transform(asDesignBlockId),
16061
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
16062
- authority: styleAuthoritySchema
16063
- }).strict();
16064
- var persistedPageDesignStateV1Schema = z24.object({
16065
- schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
16066
- siteStyleId: z24.string().min(1).transform(asSiteStyleId),
16067
- templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
16068
- templateVersion: z24.number().int().nonnegative(),
16069
- resolverVersion: z24.number().int().nonnegative(),
16070
- rhythmPresetId: z24.string().min(1),
16071
- blocks: z24.array(blockDesignPlanSchema),
16072
- styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
16073
- }).strict();
16074
-
16075
- // ../theme-core/src/site-styles/runtimeCompiler.ts
16076
- function defineDesignRuntimeRules(rules) {
16077
- return rules;
16078
- }
16079
- function defineComponentRuntimeRules(rules) {
16080
- return rules;
16081
- }
16082
- var defaultDesignRuntimeRules = defineDesignRuntimeRules({
16083
- sectionSurfaces: {
16084
- base: {},
16085
- "muted-band": {
16086
- background: {
16087
- type: "color",
16088
- color: "muted"
16089
- }
16090
- },
16091
- "accent-band": {
16092
- background: {
16093
- type: "color",
16094
- color: "primary"
16095
- }
16096
- },
16097
- "brand-depth-band": {
16098
- background: {
16099
- type: "color",
16100
- color: "primary-800"
16101
- }
16102
- },
16103
- "hero-image": {
16104
- background: {
16105
- type: "image",
16106
- opacity: 1,
16107
- position: "center center",
16108
- ...uniformSectionForeground("text")
16109
- }
16110
- }
16111
- },
16112
- heroLegibility: {
16113
- "scrim-gradient": {
16114
- type: "gradient",
16115
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
16116
- opacity: 1
16117
- },
16118
- "solid-panel": {
16119
- type: "color",
16120
- color: "surface",
16121
- opacity: 0.88
16122
- }
16123
- },
16124
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
16125
- });
16126
- var defaultComponentRuntimeRules = defineComponentRuntimeRules({
16127
- panelFrames: {
16128
- inset: {
16129
- spacing: "comfortable",
16130
- rounded: "xl",
16131
- raised: false,
16132
- background: {
16133
- type: "color",
16134
- color: "surfaceAlt",
16135
- textColor: "text"
16136
- }
16137
- },
16138
- raised: {
16139
- spacing: "comfortable",
16140
- rounded: "xl",
16141
- raised: true,
16142
- background: {
16143
- type: "color",
16144
- color: "surfaceAlt",
16145
- textColor: "text"
16146
- }
16147
- },
16148
- editorial: {
16149
- spacing: "medium",
16150
- rounded: "xl",
16151
- raised: false,
16152
- background: {
16153
- type: "color",
16154
- color: "surface",
16155
- textColor: "text"
16156
- }
16157
- }
16158
- },
16159
- flushFrames: {
16160
- "media-panel": {
16161
- fullWidth: true,
16162
- spacing: "none",
16163
- rounded: "none",
16164
- raised: false
16165
- }
16166
- },
16167
- itemSurfaces: {
16168
- none: null,
16169
- default: {
16170
- spacing: "medium",
16171
- rounded: "lg",
16172
- raised: false
16173
- },
16174
- flat: {
16175
- spacing: "medium",
16176
- rounded: "lg",
16177
- raised: false
16178
- },
16179
- outlined: {
16180
- spacing: "medium",
16181
- rounded: "lg",
16182
- raised: false,
16183
- border: {
16184
- enabled: true,
16185
- width: "1",
16186
- colorToken: "border"
16187
- }
16188
- },
16189
- raised: {
16190
- spacing: "medium",
16191
- rounded: "xl",
16192
- raised: true
16193
- },
16194
- inset: {
16195
- treatment: "soft-panel",
16196
- spacing: "comfortable",
16197
- rounded: "xl",
16198
- raised: false,
16199
- border: {
16200
- enabled: false
16201
- },
16202
- background: {
16203
- type: "color",
16204
- color: "surfaceAlt",
16205
- textColor: "text"
16206
- }
16207
- },
16208
- editorial: {
16209
- // Boxless open column with a short rule on top; the visual treatment
16210
- // lives in blocks-static/card-treatments.css.
16211
- treatment: "editorial-rule",
16212
- spacing: "none",
16213
- rounded: "none",
16214
- raised: false,
16215
- border: {
16216
- enabled: false
16217
- }
16218
- },
16219
- "color-blocked": {
16220
- // Bold, flat colour-blocked cards. The per-card background colour cycle
16221
- // (by position) and staggered offset live in
16222
- // blocks-static/card-treatments.css; here we set the shared shape:
16223
- // generous padding, large radius, no border, flat (no shadow).
16224
- treatment: "color-blocked",
16225
- spacing: "spacious",
16226
- rounded: "2xl",
16227
- raised: false,
16228
- border: {
16229
- enabled: false
16230
- }
16231
- }
16232
- }
16233
- });
16234
- function uniformSectionForeground(token) {
16235
- return {
16236
- textColor: token,
16237
- headingColor: token,
16238
- linkColor: token,
16239
- supportingColor: token
16240
- };
16241
- }
16242
-
16243
16798
  // ../theme-core/src/site-styles/generatedSchemas.ts
16244
16799
  import { z as z25 } from "zod";
16245
16800
  function uniqueNonEmpty2(values) {
@@ -17051,6 +17606,31 @@ function cardStylesField(options = {}) {
17051
17606
  return createBoxStylesFieldWithDepth("card", options);
17052
17607
  }
17053
17608
 
17609
+ // ../blocks/src/system/fields/imageShape.ts
17610
+ var standardImageShapeOptions = [
17611
+ { value: "default", label: "Default" },
17612
+ { value: "square", label: "Square corners" },
17613
+ { value: "rounded", label: "Rounded corners" },
17614
+ { value: "circle", label: "Circle" },
17615
+ { value: "arch", label: "Arch" }
17616
+ ];
17617
+ function createImageShapeField(options = {}) {
17618
+ return {
17619
+ id: options.id ?? "imageShape",
17620
+ type: "select",
17621
+ label: options.label ?? "Image shape",
17622
+ ...options.description ? { description: options.description } : {},
17623
+ required: false,
17624
+ defaultValue: options.defaultValue ?? "default",
17625
+ multiple: false,
17626
+ options: [...standardImageShapeOptions],
17627
+ ui: {
17628
+ intent: options.uiIntent ?? "display",
17629
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
17630
+ }
17631
+ };
17632
+ }
17633
+
17054
17634
  // ../blocks/src/utils/env.ts
17055
17635
  function isDevEnvironment() {
17056
17636
  try {
@@ -17865,7 +18445,7 @@ function buildFooterNavAll(common) {
17865
18445
  return stack(
17866
18446
  { className: common.className, gap: common.gap, align: "stretch" },
17867
18447
  [item],
17868
- when(collectionPath)
18448
+ whenCollectionHasItems(collectionPath)
17869
18449
  );
17870
18450
  }
17871
18451
  function buildFooterNavLinksOnly(common) {
@@ -17898,7 +18478,7 @@ function buildFooterNavLinksOnly(common) {
17898
18478
  return stack(
17899
18479
  { className: common.className, gap: common.gap, align: "stretch" },
17900
18480
  [item],
17901
- when(collectionPath)
18481
+ whenCollectionHasItems(collectionPath)
17902
18482
  );
17903
18483
  }
17904
18484
  function buildFooterNavFlatten(common) {
@@ -17947,9 +18527,20 @@ function buildFooterNavFlatten(common) {
17947
18527
  return stack(
17948
18528
  { className: common.className, gap: common.gap, align: "stretch" },
17949
18529
  [item],
17950
- when(collectionPath)
18530
+ whenCollectionHasItems(collectionPath)
17951
18531
  );
17952
18532
  }
18533
+ var whenCollectionHasItems = (collectionPath) => (node) => ({
18534
+ ...node,
18535
+ $when: {
18536
+ when: {
18537
+ from: collectionPath,
18538
+ transforms: [{ id: "array.length" }]
18539
+ },
18540
+ equals: 0,
18541
+ not: true
18542
+ }
18543
+ });
17953
18544
  function footerNav(opts) {
17954
18545
  const mode = opts?.mode ?? "all";
17955
18546
  const collectionPath = opts?.collectionPath ?? "footerMenu.items";
@@ -20532,8 +21123,23 @@ function fragmentsToRepeaterField(id, label, fragments, options = {}) {
20532
21123
  var heroLayoutControlsFragment = defineFragment({
20533
21124
  id: "heroLayoutControls",
20534
21125
  title: "Hero Layout",
20535
- description: "Alignment and content width controls for hero layouts.",
21126
+ description: "Title scale, alignment, and content width controls for hero layouts.",
20536
21127
  fields: [
21128
+ {
21129
+ id: "titleSize",
21130
+ type: "select",
21131
+ label: "Title size",
21132
+ description: "Adjust the visual scale of the hero title.",
21133
+ required: false,
21134
+ ui: { intent: "display" },
21135
+ options: [
21136
+ { value: "auto", label: "Auto" },
21137
+ { value: "quiet", label: "Normal" },
21138
+ { value: "editorial", label: "Large" },
21139
+ { value: "display", label: "Huge" },
21140
+ { value: "poster", label: "Poster" }
21141
+ ]
21142
+ },
20537
21143
  {
20538
21144
  id: "contentAlignment",
20539
21145
  type: "select",
@@ -21328,7 +21934,18 @@ function heroSplitImagePane() {
21328
21934
  return stack(
21329
21935
  {
21330
21936
  gap: "none",
21331
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
21937
+ className: {
21938
+ $bind: {
21939
+ from: "content.imageShape",
21940
+ transforms: [
21941
+ {
21942
+ id: "ui.imageShapeClassName",
21943
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
21944
+ }
21945
+ ],
21946
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
21947
+ }
21948
+ },
21332
21949
  style: {
21333
21950
  minHeight: "clamp(18rem, 36vw, 34rem)"
21334
21951
  }
@@ -21446,6 +22063,12 @@ var heroConfig = {
21446
22063
  label: "Content card",
21447
22064
  renderInHeader: true,
21448
22065
  intent: "style"
22066
+ }),
22067
+ createImageShapeField({
22068
+ id: "imageShape",
22069
+ label: "Image shape",
22070
+ defaultValue: "default",
22071
+ uiIntent: "display"
21449
22072
  })
21450
22073
  ],
21451
22074
  layout: classicLayout,
@@ -21460,6 +22083,15 @@ var heroConfig = {
21460
22083
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
21461
22084
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
21462
22085
  icon: "Sparkles",
22086
+ previewCustomize: {
22087
+ quickFieldPriority: [
22088
+ "titleSize",
22089
+ "contentAlignment",
22090
+ "contentMaxWidth",
22091
+ "verticalAlignment",
22092
+ "imageShape"
22093
+ ]
22094
+ },
21463
22095
  styleTokens: {
21464
22096
  typography: "display",
21465
22097
  spacing: "xl"
@@ -21476,7 +22108,8 @@ var standardAspectRatioOptions = [
21476
22108
  { value: "16/9", label: "16:9 (Landscape)" },
21477
22109
  { value: "4/3", label: "4:3 (Standard)" },
21478
22110
  { value: "1/1", label: "1:1 (Square)" },
21479
- { value: "3/4", label: "3:4 (Portrait)" }
22111
+ { value: "3/4", label: "3:4 (Portrait)" },
22112
+ { value: "9/16", label: "9:16 (Tall portrait)" }
21480
22113
  ];
21481
22114
  function createAspectRatioField(options = {}) {
21482
22115
  return {
@@ -22696,6 +23329,258 @@ var formBlockDefinition = {
22696
23329
  runtime: formBlockRuntime
22697
23330
  };
22698
23331
 
23332
+ // ../blocks/src/system/blocks/contact-newsletter.ts
23333
+ var contactNewsletterLayout = styledSection({
23334
+ children: sectionContainer([
23335
+ el(
23336
+ "div",
23337
+ { className: "contact-newsletter-grid" },
23338
+ [
23339
+ el(
23340
+ "div",
23341
+ { className: "contact-newsletter-column contact-newsletter-contact" },
23342
+ [
23343
+ el(
23344
+ "div",
23345
+ { className: "contact-newsletter-copy" },
23346
+ [
23347
+ text(
23348
+ {
23349
+ as: "h2",
23350
+ className: "form-copy-title"
23351
+ },
23352
+ when("contactTitle"),
23353
+ bind("contactTitle")
23354
+ ),
23355
+ richText(
23356
+ {
23357
+ className: "form-copy-intro rb-prose rb-max-w-none"
23358
+ },
23359
+ when("contactIntro"),
23360
+ bind("contactIntro")
23361
+ )
23362
+ ]
23363
+ ),
23364
+ el(
23365
+ "form",
23366
+ withApiBindings({
23367
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
23368
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
23369
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
23370
+ }),
23371
+ [],
23372
+ bind("data.form")
23373
+ )
23374
+ ]
23375
+ ),
23376
+ el(
23377
+ "div",
23378
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
23379
+ [
23380
+ el(
23381
+ "div",
23382
+ { className: "contact-newsletter-copy" },
23383
+ [
23384
+ text(
23385
+ {
23386
+ as: "h2",
23387
+ className: "newsletter-copy-title"
23388
+ },
23389
+ when("newsletterTitle"),
23390
+ bind("newsletterTitle")
23391
+ ),
23392
+ richText(
23393
+ {
23394
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
23395
+ },
23396
+ when("newsletterSubtitle"),
23397
+ bind("newsletterSubtitle")
23398
+ )
23399
+ ]
23400
+ ),
23401
+ el(
23402
+ "newsletter-form",
23403
+ withApiBindings({
23404
+ listId: { $bind: { from: "listId" } },
23405
+ preset: { $bind: { from: "preset" } },
23406
+ includePhone: { $bind: { from: "includePhone" } },
23407
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
23408
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
23409
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
23410
+ tags: { $bind: { from: "newsletterTags" } },
23411
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
23412
+ }),
23413
+ []
23414
+ )
23415
+ ]
23416
+ )
23417
+ ]
23418
+ )
23419
+ ], {
23420
+ className: "contact-newsletter-container"
23421
+ }),
23422
+ baseClass: "",
23423
+ spacing: "medium",
23424
+ background: "surface"
23425
+ });
23426
+ var contactNewsletterManifest = createBlockManifest({
23427
+ id: "block.contact-newsletter",
23428
+ title: "Contact + Newsletter",
23429
+ titleSource: "contactTitle",
23430
+ description: "Two-column newsletter signup and contact form section.",
23431
+ category: "interactive",
23432
+ layout: contactNewsletterLayout,
23433
+ defaultVariant: "default",
23434
+ variants: {
23435
+ default: contactNewsletterLayout
23436
+ },
23437
+ variantOptions: {
23438
+ default: {
23439
+ label: "Two column",
23440
+ description: "Newsletter and contact form side by side.",
23441
+ icon: "Columns2"
23442
+ }
23443
+ },
23444
+ additionalFields: [
23445
+ {
23446
+ id: "newsletterTitle",
23447
+ type: "text",
23448
+ label: "Newsletter title",
23449
+ defaultValue: "Stay connected"
23450
+ },
23451
+ {
23452
+ id: "newsletterSubtitle",
23453
+ type: "richText",
23454
+ label: "Newsletter intro"
23455
+ },
23456
+ {
23457
+ id: "listId",
23458
+ type: "reference",
23459
+ label: "Newsletter list",
23460
+ description: "Select the list new subscribers should be added to.",
23461
+ required: true,
23462
+ referenceKind: "newsletterList",
23463
+ allowManualEntry: false,
23464
+ ui: { intent: "behavior" }
23465
+ },
23466
+ {
23467
+ id: "preset",
23468
+ type: "select",
23469
+ label: "Newsletter fields",
23470
+ defaultValue: "emailOnly",
23471
+ ui: { intent: "display" },
23472
+ options: [
23473
+ { value: "emailOnly", label: "Email only" },
23474
+ { value: "emailName", label: "Email + Name" },
23475
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
23476
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
23477
+ ]
23478
+ },
23479
+ {
23480
+ id: "includePhone",
23481
+ type: "boolean",
23482
+ label: "Include phone field",
23483
+ defaultValue: false,
23484
+ ui: { intent: "display" }
23485
+ },
23486
+ {
23487
+ id: "newsletterButtonLabel",
23488
+ type: "text",
23489
+ label: "Newsletter button label",
23490
+ defaultValue: "Subscribe",
23491
+ ui: { intent: "display" }
23492
+ },
23493
+ {
23494
+ id: "newsletterSuccessMessage",
23495
+ type: "text",
23496
+ label: "Newsletter success message",
23497
+ defaultValue: "Thanks for subscribing!",
23498
+ ui: { intent: "behavior" }
23499
+ },
23500
+ {
23501
+ id: "newsletterPrivacyNote",
23502
+ type: "text",
23503
+ label: "Privacy note",
23504
+ ui: { intent: "display" }
23505
+ },
23506
+ {
23507
+ id: "newsletterTags",
23508
+ type: "text",
23509
+ label: "Newsletter tags",
23510
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
23511
+ ui: { intent: "behavior" }
23512
+ },
23513
+ {
23514
+ id: "contactTitle",
23515
+ type: "text",
23516
+ label: "Contact title",
23517
+ defaultValue: "Get in touch"
23518
+ },
23519
+ {
23520
+ id: "contactIntro",
23521
+ type: "richText",
23522
+ label: "Contact intro"
23523
+ },
23524
+ {
23525
+ id: "formSlug",
23526
+ type: "reference",
23527
+ label: "Contact form",
23528
+ description: "Pick a saved form to render.",
23529
+ required: true,
23530
+ referenceKind: "form",
23531
+ allowManualEntry: false,
23532
+ ui: { intent: "behavior" }
23533
+ },
23534
+ {
23535
+ id: "contactSubmitLabel",
23536
+ type: "text",
23537
+ label: "Contact button label",
23538
+ defaultValue: "Send message",
23539
+ ui: { intent: "display" }
23540
+ },
23541
+ {
23542
+ id: "contactSuccessMessage",
23543
+ type: "text",
23544
+ label: "Contact success message",
23545
+ defaultValue: "Thanks - we received your message.",
23546
+ ui: { intent: "behavior" }
23547
+ }
23548
+ ],
23549
+ styleTokens: {
23550
+ background: "surface",
23551
+ typography: "body",
23552
+ spacing: "md"
23553
+ },
23554
+ behaviours: {
23555
+ supportsThemeSwitching: true,
23556
+ inlineEditing: true,
23557
+ animation: false,
23558
+ paletteHidden: false
23559
+ },
23560
+ tags: [
23561
+ "contact",
23562
+ "newsletter",
23563
+ "signup",
23564
+ "email",
23565
+ "form",
23566
+ "lead-capture"
23567
+ ],
23568
+ icon: "MailPlus"
23569
+ });
23570
+ var contactNewsletterBlockDefinition = {
23571
+ manifest: contactNewsletterManifest,
23572
+ dataSchemas: { form: formDataSchema.optional() },
23573
+ dataLoaders: {
23574
+ form: {
23575
+ endpoint: "getPublicFormById",
23576
+ params: {
23577
+ formSlug: { $bind: { from: "formSlug" } }
23578
+ },
23579
+ mode: "server"
23580
+ }
23581
+ }
23582
+ };
23583
+
22699
23584
  // ../blocks/src/system/blocks/faq.ts
22700
23585
  function fragmentLayoutNode2(layout) {
22701
23586
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -22924,6 +23809,7 @@ var joinClasses3 = (parts) => parts.filter(
22924
23809
  ).join(" ").replace(/\s+/g, " ").trim();
22925
23810
  var eyebrowTreatmentClassMap = {
22926
23811
  plain: "",
23812
+ accent: "rb-eyebrow-treatment-accent",
22927
23813
  pill: "rb-eyebrow-treatment-pill",
22928
23814
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
22929
23815
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -22950,6 +23836,13 @@ var imageGalleryCornerClassMap = {
22950
23836
  "2xl": "rb-rounded-2xl",
22951
23837
  "3xl": "rb-rounded-3xl"
22952
23838
  };
23839
+ var imageShapeClassMap = {
23840
+ default: "",
23841
+ square: "rb-media-shape-square",
23842
+ rounded: "rb-media-shape-rounded",
23843
+ circle: "rb-media-shape-circle",
23844
+ arch: "rb-media-shape-arch"
23845
+ };
22953
23846
  var parseRatio = (raw) => {
22954
23847
  if (typeof raw !== "string") return null;
22955
23848
  const value = raw.trim();
@@ -23094,6 +23987,10 @@ function resolveHeroContentMaxWidth(content) {
23094
23987
  return "default";
23095
23988
  }
23096
23989
  function resolveHeroTypographyScale(content) {
23990
+ const titleSize = readString(content, "titleSize");
23991
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
23992
+ return titleSize;
23993
+ }
23097
23994
  const raw = readHeroLayoutString(
23098
23995
  content,
23099
23996
  "typographyScale",
@@ -23335,6 +24232,16 @@ var uiTransforms = [
23335
24232
  heroGridClassFromVerticalAlignmentTransform,
23336
24233
  imageFragmentClassTransform,
23337
24234
  imageFragmentSizeTransform,
24235
+ {
24236
+ id: "ui.imageShapeClassName",
24237
+ kind: "string",
24238
+ summary: "Apply a constrained media shape class",
24239
+ run: (value, options) => {
24240
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
24241
+ const shape = typeof value === "string" ? value.trim() : "default";
24242
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
24243
+ }
24244
+ },
23338
24245
  conditionalClassTransform,
23339
24246
  twoColumnContainerClassTransform,
23340
24247
  twoColumnFlexBasisTransform,
@@ -24681,6 +25588,21 @@ var siteHeaderManifest = createBlockManifest({
24681
25588
  id: "block.site-header",
24682
25589
  title: "Site Header",
24683
25590
  category: "layout",
25591
+ additionalFields: [
25592
+ {
25593
+ id: "mode",
25594
+ type: "select",
25595
+ label: "Header display",
25596
+ required: false,
25597
+ multiple: false,
25598
+ defaultValue: "default",
25599
+ options: [
25600
+ { value: "default", label: "Show header" },
25601
+ { value: "hidden", label: "Hide header" }
25602
+ ],
25603
+ ui: { intent: "display" }
25604
+ }
25605
+ ],
24684
25606
  // Skip section styles - this block uses theme-based styling
24685
25607
  skipSectionStyles: true,
24686
25608
  // Block manages its own wrapper - enables sticky positioning
@@ -26083,6 +27005,9 @@ var mediaTextManifest = createBlockManifest({
26083
27005
  category: "layout",
26084
27006
  includeContainerStyles: true,
26085
27007
  titleSource: "title",
27008
+ previewCustomize: {
27009
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
27010
+ },
26086
27011
  additionalFields: [
26087
27012
  {
26088
27013
  id: "images",
@@ -26121,7 +27046,7 @@ var mediaTextManifest = createBlockManifest({
26121
27046
  {
26122
27047
  id: "titleAlignment",
26123
27048
  type: "select",
26124
- label: "Title alignment",
27049
+ label: "Content alignment",
26125
27050
  required: false,
26126
27051
  defaultValue: "left",
26127
27052
  multiple: false,
@@ -26179,7 +27104,18 @@ var mediaTextManifest = createBlockManifest({
26179
27104
  transition: "slide"
26180
27105
  },
26181
27106
  ui: { intent: "behavior" }
26182
- }),
27107
+ }).map((field) => ({
27108
+ ...field,
27109
+ ui: {
27110
+ ...field.ui ?? {},
27111
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
27112
+ allOf: [
27113
+ { field: "images", minItems: 2 },
27114
+ { field: "carouselAutoplay", equals: true }
27115
+ ]
27116
+ } : { field: "images", minItems: 2 }
27117
+ }
27118
+ })),
26183
27119
  createAspectRatioField({
26184
27120
  id: "aspectRatio",
26185
27121
  label: "Media aspect ratio",
@@ -26187,6 +27123,12 @@ var mediaTextManifest = createBlockManifest({
26187
27123
  defaultValue: "auto",
26188
27124
  visibleWhen: { field: "images", notEquals: null }
26189
27125
  }),
27126
+ createImageShapeField({
27127
+ id: "imageShape",
27128
+ label: "Media shape",
27129
+ defaultValue: "default",
27130
+ visibleWhen: { field: "images", notEquals: null }
27131
+ }),
26190
27132
  {
26191
27133
  id: "text",
26192
27134
  type: "richText",
@@ -26220,6 +27162,30 @@ var mediaTextManifest = createBlockManifest({
26220
27162
  ...options?.not ? { not: true } : {}
26221
27163
  }
26222
27164
  });
27165
+ const bodyClassNameFromAlignment = {
27166
+ $bind: {
27167
+ from: "content.titleAlignment",
27168
+ transforms: [
27169
+ {
27170
+ id: "ui.bodyClassFromAlignment",
27171
+ options: { base: "rb-prose rb-max-w-none" }
27172
+ }
27173
+ ],
27174
+ fallback: "rb-prose rb-max-w-none"
27175
+ }
27176
+ };
27177
+ const titleClassNameFromAlignment = {
27178
+ $bind: {
27179
+ from: "content.titleAlignment",
27180
+ transforms: [
27181
+ {
27182
+ id: "ui.headingClassFromAlignment",
27183
+ options: { base: "" }
27184
+ }
27185
+ ],
27186
+ fallback: ""
27187
+ }
27188
+ };
26223
27189
  const defaultTextColumn = el("div", {}, [
26224
27190
  styledCard(
26225
27191
  [
@@ -26244,8 +27210,55 @@ var mediaTextManifest = createBlockManifest({
26244
27210
  bind("content.text")
26245
27211
  )
26246
27212
  ]);
27213
+ const bioTextColumn = el(
27214
+ "div",
27215
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
27216
+ [
27217
+ text(
27218
+ {
27219
+ as: "h2",
27220
+ className: titleClassNameFromAlignment
27221
+ },
27222
+ when("content.title"),
27223
+ bind("content.title")
27224
+ ),
27225
+ styledCard(
27226
+ [
27227
+ richText(
27228
+ {
27229
+ className: bodyClassNameFromAlignment
27230
+ },
27231
+ bind("content.text")
27232
+ )
27233
+ ],
27234
+ {
27235
+ stylesFrom: "content._textCardStyles",
27236
+ backgroundFrom: "content._textCardStyles.background"
27237
+ },
27238
+ when("content.wrapTextInCard")
27239
+ ),
27240
+ richText(
27241
+ {
27242
+ className: bodyClassNameFromAlignment
27243
+ },
27244
+ when("content.wrapTextInCard", { not: true }),
27245
+ bind("content.text")
27246
+ )
27247
+ ]
27248
+ );
26247
27249
  const defaultImageCommonProps = {
26248
- className: "rb-w-full rb-h-auto rb-object-cover",
27250
+ className: {
27251
+ $bind: {
27252
+ from: "content.imageShape",
27253
+ transforms: [
27254
+ {
27255
+ id: "ui.imageShapeClassName",
27256
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
27257
+ }
27258
+ ],
27259
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
27260
+ }
27261
+ },
26249
27262
  style: {
26250
27263
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
26251
27264
  }
@@ -26286,6 +27299,27 @@ var mediaTextManifest = createBlockManifest({
26286
27299
  ],
26287
27300
  whenImagesLength(0, { not: true })
26288
27301
  );
27302
+ const bioImagesLayout = el(
27303
+ "div",
27304
+ {},
27305
+ [
27306
+ responsiveTwoColumn({
27307
+ image: el("div", {}, [
27308
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
27309
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
27310
+ ]),
27311
+ text: bioTextColumn,
27312
+ ratioFrom: "content.ratio",
27313
+ imagePositionFrom: "content.imagePosition",
27314
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
27315
+ gapFrom: "content.gap",
27316
+ gapFallback: "comfortable",
27317
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
27318
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
27319
+ })
27320
+ ],
27321
+ whenImagesLength(0, { not: true })
27322
+ );
26289
27323
  const defaultTextOnlyLayout = el(
26290
27324
  "div",
26291
27325
  {},
@@ -26315,7 +27349,45 @@ var mediaTextManifest = createBlockManifest({
26315
27349
  ],
26316
27350
  whenImagesLength(0)
26317
27351
  );
27352
+ const bioTextOnlyLayout = el(
27353
+ "div",
27354
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
27355
+ [
27356
+ text(
27357
+ {
27358
+ as: "h2",
27359
+ className: titleClassNameFromAlignment
27360
+ },
27361
+ when("content.title"),
27362
+ bind("content.title")
27363
+ ),
27364
+ styledCard(
27365
+ [
27366
+ richText(
27367
+ {
27368
+ className: bodyClassNameFromAlignment
27369
+ },
27370
+ bind("content.text")
27371
+ )
27372
+ ],
27373
+ {
27374
+ stylesFrom: "content._textCardStyles",
27375
+ backgroundFrom: "content._textCardStyles.background"
27376
+ },
27377
+ when("content.wrapTextInCard")
27378
+ ),
27379
+ richText(
27380
+ {
27381
+ className: bodyClassNameFromAlignment
27382
+ },
27383
+ when("content.wrapTextInCard", { not: true }),
27384
+ bind("content.text")
27385
+ )
27386
+ ],
27387
+ whenImagesLength(0)
27388
+ );
26318
27389
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
27390
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
26319
27391
  const defaultLayout2 = styledSection({
26320
27392
  children: styledContainer({
26321
27393
  rootType: "stack",
@@ -26324,18 +27396,7 @@ var mediaTextManifest = createBlockManifest({
26324
27396
  text(
26325
27397
  {
26326
27398
  as: "h2",
26327
- className: {
26328
- $bind: {
26329
- from: "content.titleAlignment",
26330
- transforms: [
26331
- {
26332
- id: "ui.headingClassFromAlignment",
26333
- options: { base: "" }
26334
- }
26335
- ],
26336
- fallback: ""
26337
- }
26338
- }
27399
+ className: titleClassNameFromAlignment
26339
27400
  },
26340
27401
  when("content.title"),
26341
27402
  bind("content.title")
@@ -26347,14 +27408,28 @@ var mediaTextManifest = createBlockManifest({
26347
27408
  baseClass: "",
26348
27409
  spacing: "medium"
26349
27410
  });
27411
+ const bioLayout = styledSection({
27412
+ children: styledContainer({
27413
+ rootType: "stack",
27414
+ rootProps: { gap: "lg" },
27415
+ children: [bioInner]
27416
+ }),
27417
+ baseClass: "",
27418
+ spacing: "medium"
27419
+ });
26350
27420
  return {
26351
27421
  layout: defaultLayout2,
26352
27422
  variants: {
26353
- default: defaultLayout2
27423
+ default: defaultLayout2,
27424
+ bio: bioLayout
26354
27425
  },
26355
27426
  defaultVariant: "default",
26356
27427
  variantOptions: {
26357
- default: { label: "Default" }
27428
+ default: { label: "Default" },
27429
+ bio: {
27430
+ label: "Bio",
27431
+ description: "Vertically centered title and copy beside media."
27432
+ }
26358
27433
  }
26359
27434
  };
26360
27435
  })(),
@@ -27060,6 +28135,126 @@ var occurrenceContextSchema = z43.object({
27060
28135
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
27061
28136
  import { z as z45 } from "zod";
27062
28137
 
28138
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
28139
+ var DEFAULT_EVENT_CURRENCY = "USD";
28140
+ function resolveRuntimeEventPricing(event) {
28141
+ if (isPublicEventPricing(event.pricing)) {
28142
+ return event.pricing;
28143
+ }
28144
+ const legacy = event;
28145
+ const currency = readCurrency(legacy.currency);
28146
+ if (event.requiresRegistration === false) {
28147
+ return {
28148
+ kind: "drop_in",
28149
+ currency,
28150
+ display: { kind: "free", currency }
28151
+ };
28152
+ }
28153
+ if (legacy.pricingMode === "ticket_types") {
28154
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
28155
+ return {
28156
+ kind: "ticket_types",
28157
+ currency,
28158
+ ticketTypes,
28159
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
28160
+ };
28161
+ }
28162
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
28163
+ if (legacy.pricingType === "paid" && amount > 0) {
28164
+ return {
28165
+ kind: "single_paid",
28166
+ amount,
28167
+ currency,
28168
+ display: { kind: "exact", amount, currency }
28169
+ };
28170
+ }
28171
+ return {
28172
+ kind: "free_registration",
28173
+ currency,
28174
+ display: { kind: "free", currency }
28175
+ };
28176
+ }
28177
+ function readCurrency(value) {
28178
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
28179
+ }
28180
+ function isRecord3(value) {
28181
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28182
+ }
28183
+ function isPublicEventPricing(value) {
28184
+ if (!isRecord3(value) || typeof value.kind !== "string") return false;
28185
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
28186
+ }
28187
+ function isPublicEventTicketType(value) {
28188
+ return isRecord3(value) && typeof value.id === "string";
28189
+ }
28190
+ function readTicketTypePriceDisplay(value, currency) {
28191
+ const display = readLegacyPriceDisplay(value, currency);
28192
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
28193
+ }
28194
+ function readLegacyPriceDisplay(value, currency) {
28195
+ if (!isRecord3(value) || typeof value.kind !== "string") {
28196
+ return { kind: "unavailable", currency };
28197
+ }
28198
+ const displayCurrency = readCurrency(value.currency);
28199
+ switch (value.kind) {
28200
+ case "free":
28201
+ return { kind: "free", currency: displayCurrency };
28202
+ case "exact":
28203
+ return readAmount(value.amount) !== null ? {
28204
+ kind: "exact",
28205
+ amount: readAmount(value.amount) ?? 0,
28206
+ currency: displayCurrency
28207
+ } : { kind: "unavailable", currency };
28208
+ case "from":
28209
+ return readAmount(value.amount) !== null ? {
28210
+ kind: "from",
28211
+ amount: readAmount(value.amount) ?? 0,
28212
+ currency: displayCurrency
28213
+ } : { kind: "unavailable", currency };
28214
+ case "mixed":
28215
+ return readAmount(value.paidFromAmount) !== null ? {
28216
+ kind: "mixed",
28217
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
28218
+ currency: displayCurrency
28219
+ } : { kind: "unavailable", currency };
28220
+ case "unavailable":
28221
+ return { kind: "unavailable", currency: displayCurrency };
28222
+ case "course":
28223
+ return isRecord3(value.display) ? {
28224
+ kind: "course",
28225
+ display: readCoursePriceDisplay(value.display, displayCurrency)
28226
+ } : {
28227
+ kind: "course",
28228
+ display: { kind: "unavailable", currency: displayCurrency }
28229
+ };
28230
+ default:
28231
+ return { kind: "unavailable", currency };
28232
+ }
28233
+ }
28234
+ function readCoursePriceDisplay(value, currency) {
28235
+ switch (value.kind) {
28236
+ case "free":
28237
+ return { kind: "free", currency: readCurrency(value.currency) };
28238
+ case "exact":
28239
+ return readAmount(value.amount) !== null ? {
28240
+ kind: "exact",
28241
+ amount: readAmount(value.amount) ?? 0,
28242
+ currency: readCurrency(value.currency)
28243
+ } : { kind: "unavailable", currency };
28244
+ case "from":
28245
+ return readAmount(value.amount) !== null ? {
28246
+ kind: "from",
28247
+ amount: readAmount(value.amount) ?? 0,
28248
+ currency: readCurrency(value.currency)
28249
+ } : { kind: "unavailable", currency };
28250
+ default:
28251
+ return { kind: "unavailable", currency };
28252
+ }
28253
+ }
28254
+ function readAmount(value) {
28255
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
28256
+ }
28257
+
27063
28258
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
27064
28259
  import { z as z44 } from "zod";
27065
28260
 
@@ -27090,11 +28285,21 @@ var filterAutoShowSchema = z44.enum(["auto", "always", "never"]);
27090
28285
  var calendarTabViewsSchema = z44.enum(["both", "month", "week"]);
27091
28286
 
27092
28287
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28288
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
28289
+ var [
28290
+ eventRegistrationGenericDateStepLabel,
28291
+ eventRegistrationGenericTicketsStepLabel,
28292
+ eventRegistrationGenericDetailsStepLabel
28293
+ ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
27093
28294
  var contentEntrySchema = z45.object({
27094
28295
  id: z45.string(),
27095
28296
  slug: z45.string(),
27096
28297
  contentTypeSlug: z45.string()
27097
28298
  });
28299
+ var eventRegistrationPublicEventSchema = z45.preprocess(
28300
+ normalizeEventRegistrationEventInput,
28301
+ publicEventSchema
28302
+ );
27098
28303
  var eventRegistrationSourceSchema = z45.object({
27099
28304
  siteId: z45.string().optional(),
27100
28305
  apiBaseUrl: z45.string().optional(),
@@ -27102,7 +28307,7 @@ var eventRegistrationSourceSchema = z45.object({
27102
28307
  previewToken: z45.string().nullable().optional(),
27103
28308
  occurrenceContext: occurrenceContextSchema.optional(),
27104
28309
  contentEntry: contentEntrySchema.nullable().optional(),
27105
- events: z45.array(publicEventSchema).nullable().optional(),
28310
+ events: z45.array(eventRegistrationPublicEventSchema).nullable().optional(),
27106
28311
  className: z45.string().nullable().optional(),
27107
28312
  buttonText: z45.string().nullable().optional(),
27108
28313
  maxTickets: z45.string().nullable().optional(),
@@ -27117,14 +28322,21 @@ var eventRegistrationSourceSchema = z45.object({
27117
28322
  });
27118
28323
  var eventRegistrationDisplaySchema = z45.object({
27119
28324
  kind: z45.literal("event-registration"),
27120
- state: z45.literal("shell"),
28325
+ state: z45.literal("generic-shell"),
27121
28326
  className: z45.string().nullable(),
28327
+ titleText: z45.string(),
28328
+ bodyText: z45.string(),
28329
+ stepLabels: z45.tuple([
28330
+ z45.literal(eventRegistrationGenericDateStepLabel),
28331
+ z45.literal(eventRegistrationGenericTicketsStepLabel),
28332
+ z45.literal(eventRegistrationGenericDetailsStepLabel)
28333
+ ]),
27122
28334
  summaryButtonText: z45.string()
27123
28335
  });
27124
28336
  var eventRegistrationHydrationSchema = z45.object({
27125
28337
  occurrenceContext: occurrenceContextSchema.optional(),
27126
28338
  contentEntry: contentEntrySchema.nullable().optional(),
27127
- events: z45.array(publicEventSchema).nullable().optional(),
28339
+ events: z45.array(eventRegistrationPublicEventSchema).nullable().optional(),
27128
28340
  maxTickets: z45.string().optional(),
27129
28341
  showVenue: z45.boolean().optional(),
27130
28342
  showCapacity: z45.boolean().optional(),
@@ -27155,8 +28367,11 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
27155
28367
  function buildEventRegistrationDisplay(source) {
27156
28368
  return {
27157
28369
  kind: "event-registration",
27158
- state: "shell",
28370
+ state: "generic-shell",
27159
28371
  className: source.className ?? null,
28372
+ titleText: "Event registration",
28373
+ bodyText: "Preparing dates, tickets, and booking details.",
28374
+ stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
27160
28375
  summaryButtonText: source.buttonText?.trim() || "Register"
27161
28376
  };
27162
28377
  }
@@ -27183,6 +28398,18 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
27183
28398
  }
27184
28399
  })
27185
28400
  });
28401
+ function normalizeEventRegistrationEventInput(value) {
28402
+ if (!isRecord4(value)) {
28403
+ return value;
28404
+ }
28405
+ return {
28406
+ ...value,
28407
+ pricing: resolveRuntimeEventPricing(value)
28408
+ };
28409
+ }
28410
+ function isRecord4(value) {
28411
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28412
+ }
27186
28413
  var eventRegistrationInteractiveIslandPropsCodec = createInteractiveIslandCodec({
27187
28414
  runtime: eventRegistrationBlockRuntime,
27188
28415
  mode: "event-registration",
@@ -29681,7 +30908,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
29681
30908
  return keys.length >= 2 ? keys : [];
29682
30909
  }
29683
30910
  function normalizeOfferingsPreviewContentForWrite(value) {
29684
- if (!isRecord3(value)) return null;
30911
+ if (!isRecord5(value)) return null;
29685
30912
  const groupOrderValue = value.groupOrder;
29686
30913
  if (Array.isArray(groupOrderValue)) {
29687
30914
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -29694,7 +30921,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
29694
30921
  return { ...value, groupOrder: [] };
29695
30922
  }
29696
30923
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
29697
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord3) : []
30924
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
29698
30925
  );
29699
30926
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
29700
30927
  }
@@ -29708,7 +30935,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
29708
30935
  }
29709
30936
  return keys;
29710
30937
  }
29711
- function isRecord3(value) {
30938
+ function isRecord5(value) {
29712
30939
  return typeof value === "object" && value !== null && !Array.isArray(value);
29713
30940
  }
29714
30941
 
@@ -30075,7 +31302,7 @@ function isOfferingsPreviewItemLimit(value) {
30075
31302
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
30076
31303
  }
30077
31304
  function normalizeOfferingsPreviewGroupOverride(value) {
30078
- if (!isRecord4(value)) return [];
31305
+ if (!isRecord6(value)) return [];
30079
31306
  const override = {};
30080
31307
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
30081
31308
  override.sourceKey = value.sourceKey;
@@ -30107,12 +31334,12 @@ function isButtonVariant(value) {
30107
31334
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
30108
31335
  }
30109
31336
  function normalizeCardStylesContent(value) {
30110
- return isRecord4(value) || value === null ? value : void 0;
31337
+ return isRecord6(value) || value === null ? value : void 0;
30111
31338
  }
30112
31339
  function normalizeSectionStylesContent(value) {
30113
- return isRecord4(value) || value === null ? value : void 0;
31340
+ return isRecord6(value) || value === null ? value : void 0;
30114
31341
  }
30115
- function isRecord4(value) {
31342
+ function isRecord6(value) {
30116
31343
  return typeof value === "object" && value !== null && !Array.isArray(value);
30117
31344
  }
30118
31345
 
@@ -34072,11 +35299,13 @@ var heroImageSurfaceMotions = [
34072
35299
  ];
34073
35300
  var standardEyebrowTreatments = [
34074
35301
  "plain",
35302
+ "accent",
34075
35303
  "pill",
34076
35304
  "accent-pill"
34077
35305
  ];
34078
35306
  var animatedEyebrowTreatments = [
34079
35307
  "plain",
35308
+ "accent",
34080
35309
  "pill",
34081
35310
  "accent-pill",
34082
35311
  "pill-bounce",
@@ -34377,6 +35606,17 @@ var systemBlockDefinitionsRaw = [
34377
35606
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
34378
35607
  ]
34379
35608
  })),
35609
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
35610
+ flow: conversionFlow,
35611
+ layoutProfiles: [
35612
+ layoutProfile({
35613
+ variantKey: "default",
35614
+ family: "split",
35615
+ weight: "featured",
35616
+ bias: "soft"
35617
+ })
35618
+ ]
35619
+ })),
34380
35620
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
34381
35621
  sectionSurfaces: "supported",
34382
35622
  contentFrames: ["plain", "panel"],
@@ -34468,6 +35708,12 @@ var systemBlockDefinitionsRaw = [
34468
35708
  family: "media-text",
34469
35709
  weight: "featured",
34470
35710
  bias: "soft"
35711
+ }),
35712
+ layoutProfile({
35713
+ variantKey: "bio",
35714
+ family: "media-text",
35715
+ weight: "featured",
35716
+ bias: "soft"
34471
35717
  })
34472
35718
  ]
34473
35719
  })),
@@ -35269,7 +36515,7 @@ var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
35269
36515
  // ../blocks/src/system/data/linkedContentEntries.ts
35270
36516
  var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
35271
36517
  function coerceLinkedContentEntriesPayload(payload) {
35272
- if (!isRecord5(payload)) return payload;
36518
+ if (!isRecord7(payload)) return payload;
35273
36519
  const response = payload;
35274
36520
  if (!Array.isArray(response.entries)) return payload;
35275
36521
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -35277,12 +36523,12 @@ function coerceLinkedContentEntriesPayload(payload) {
35277
36523
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
35278
36524
  }
35279
36525
  function enrichLinkedContentEntry(entry, contentType) {
35280
- if (!isRecord5(entry)) return entry;
36526
+ if (!isRecord7(entry)) return entry;
35281
36527
  const entryId = typeof entry.id === "string" ? entry.id : null;
35282
36528
  if (!entryId) return entry;
35283
36529
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
35284
36530
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
35285
- const content = isRecord5(entry.content) ? entry.content : {};
36531
+ const content = isRecord7(entry.content) ? entry.content : {};
35286
36532
  const meta = {
35287
36533
  kind: "linked-content-entry",
35288
36534
  entryId,
@@ -35375,7 +36621,7 @@ function capitalize(value) {
35375
36621
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
35376
36622
  }
35377
36623
  function parsePublicContentTypeMeta(value) {
35378
- if (!isRecord5(value)) return null;
36624
+ if (!isRecord7(value)) return null;
35379
36625
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
35380
36626
  return {
35381
36627
  key: value.key,
@@ -35385,7 +36631,7 @@ function parsePublicContentTypeMeta(value) {
35385
36631
  };
35386
36632
  }
35387
36633
  function parsePublicContentTypeLinkedEntryEditing(value) {
35388
- if (!isRecord5(value) || typeof value.kind !== "string") return null;
36634
+ if (!isRecord7(value) || typeof value.kind !== "string") return null;
35389
36635
  switch (value.kind) {
35390
36636
  case "generic":
35391
36637
  return { kind: "generic" };
@@ -35399,7 +36645,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
35399
36645
  }
35400
36646
  }
35401
36647
  function parsePublicContentTypeFieldMeta(value) {
35402
- if (!isRecord5(value)) return [];
36648
+ if (!isRecord7(value)) return [];
35403
36649
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
35404
36650
  return [{
35405
36651
  id: value.id,
@@ -35413,7 +36659,7 @@ function parseStringArray(value) {
35413
36659
  if (!Array.isArray(value)) return null;
35414
36660
  return value.filter((item) => typeof item === "string");
35415
36661
  }
35416
- function isRecord5(value) {
36662
+ function isRecord7(value) {
35417
36663
  return typeof value === "object" && value !== null && !Array.isArray(value);
35418
36664
  }
35419
36665
 
@@ -35606,6 +36852,11 @@ ${root} {
35606
36852
  --er-event-card-bg: rgb(var(--tb-surface));
35607
36853
  --er-event-card-border-width: var(--rb-border-width, 1px);
35608
36854
  --er-event-card-hover-opacity: 1;
36855
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
36856
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
36857
+ --er-radius: var(--rb-block-radius);
36858
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
36859
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
35609
36860
 
35610
36861
  /* Step indicator */
35611
36862
  --er-step-active: rgb(var(--tb-primary));
@@ -37180,7 +38431,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
37180
38431
  }
37181
38432
 
37182
38433
  // ../api/src/utils/isRecord.ts
37183
- function isRecord6(value) {
38434
+ function isRecord8(value) {
37184
38435
  return typeof value === "object" && value !== null && !Array.isArray(value);
37185
38436
  }
37186
38437
 
@@ -37487,7 +38738,7 @@ function sanitizeMarks(marks) {
37487
38738
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
37488
38739
  return [{ type: mark.type }];
37489
38740
  }
37490
- if (mark.type === "link" && isRecord6(mark.attrs) && typeof mark.attrs.href === "string") {
38741
+ if (mark.type === "link" && isRecord8(mark.attrs) && typeof mark.attrs.href === "string") {
37491
38742
  const attrs = { href: mark.attrs.href };
37492
38743
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
37493
38744
  attrs.target = mark.attrs.target;
@@ -37502,10 +38753,10 @@ function sanitizeMarks(marks) {
37502
38753
  return sanitized.length > 0 ? sanitized : void 0;
37503
38754
  }
37504
38755
  function unwrapRichTextValue(value) {
37505
- if (isRecord6(value) && isRecord6(value.doc)) {
38756
+ if (isRecord8(value) && isRecord8(value.doc)) {
37506
38757
  return unwrapRichTextValue(value.doc);
37507
38758
  }
37508
- if (isRecord6(value) && value.type === "doc") {
38759
+ if (isRecord8(value) && value.type === "doc") {
37509
38760
  return {
37510
38761
  type: "doc",
37511
38762
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -37514,7 +38765,7 @@ function unwrapRichTextValue(value) {
37514
38765
  return EMPTY_SITE_BANNER_BODY;
37515
38766
  }
37516
38767
  function isTipTapNodeLike(value) {
37517
- return isRecord6(value) && typeof value.type === "string";
38768
+ return isRecord8(value) && typeof value.type === "string";
37518
38769
  }
37519
38770
  function coerceTipTapNode(value) {
37520
38771
  return {
@@ -37522,9 +38773,9 @@ function coerceTipTapNode(value) {
37522
38773
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
37523
38774
  ...typeof value.text === "string" ? { text: value.text } : {},
37524
38775
  ...Array.isArray(value.marks) ? {
37525
- marks: value.marks.filter((mark) => isRecord6(mark) && typeof mark.type === "string").map((mark) => ({
38776
+ marks: value.marks.filter((mark) => isRecord8(mark) && typeof mark.type === "string").map((mark) => ({
37526
38777
  type: mark.type,
37527
- ...isRecord6(mark.attrs) ? { attrs: mark.attrs } : {}
38778
+ ...isRecord8(mark.attrs) ? { attrs: mark.attrs } : {}
37528
38779
  }))
37529
38780
  } : {}
37530
38781
  };
@@ -37707,7 +38958,7 @@ var ENTRY_REF_KEYS = [
37707
38958
  "entryId",
37708
38959
  "slug"
37709
38960
  ];
37710
- function isRecord7(value) {
38961
+ function isRecord9(value) {
37711
38962
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
37712
38963
  }
37713
38964
  function extractManualEntryRef(item) {
@@ -37715,7 +38966,7 @@ function extractManualEntryRef(item) {
37715
38966
  const trimmed = item.trim();
37716
38967
  return trimmed.length > 0 ? trimmed : null;
37717
38968
  }
37718
- if (!isRecord7(item)) return null;
38969
+ if (!isRecord9(item)) return null;
37719
38970
  for (const key of ENTRY_REF_KEYS) {
37720
38971
  const raw = item[key];
37721
38972
  if (typeof raw === "string" && raw.trim().length > 0) {