@riverbankcms/sdk 0.82.0 → 0.84.1

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 (206) hide show
  1. package/README.md +16 -0
  2. package/dist/{PreviewEditorSidebar-LHGK6RIO.mjs → PreviewEditorSidebar-X7RLMEI6.mjs} +330 -11
  3. package/dist/{PreviewEditorUI-AXZG2SDC.mjs → PreviewEditorUI-CT67N4O3.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-EIMQ3S2V.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/EventRegistrationWizard.d.ts +0 -2
  51. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +275 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.override.d.ts +10 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +22 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +3 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +20 -1
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +13 -4
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +1 -1
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +28 -6
  60. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +14 -0
  61. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +1 -1
  62. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +1 -1
  63. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +1 -1
  64. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +1 -1
  65. package/dist/_dts/content-editor/src/controller/useInvalidBlockRecovery.d.ts +1 -1
  66. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +2 -1
  67. package/dist/_dts/content-editor/src/primitives/PreviewTextEditor.d.ts +1 -0
  68. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  69. package/dist/_dts/content-model/src/entry-slots/types.d.ts +356 -0
  70. package/dist/_dts/content-model/src/index.d.ts +1 -0
  71. package/dist/_dts/content-model/src/templates/defaults.d.ts +7 -0
  72. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +100 -5
  73. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +6 -1
  74. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +7 -5
  75. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +3 -2
  76. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +3 -2
  77. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +3 -2
  78. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +27 -0
  79. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  80. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +8 -0
  81. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +37 -3
  82. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  83. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  84. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
  85. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +19 -0
  86. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +8 -0
  87. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  88. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -1
  89. package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +9 -0
  90. package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +9 -8
  91. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +10 -1
  92. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +5 -1
  93. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
  94. package/dist/_dts/sdk/src/bookings/types.d.ts +2 -2
  95. package/dist/_dts/sdk/src/cli/content/reader.d.ts +9 -8
  96. package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -1
  97. package/dist/_dts/sdk/src/cli/helpers.d.ts +10 -5
  98. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +2 -2
  99. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +2 -1
  100. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -2
  101. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  102. package/dist/_dts/sdk/src/client/management/types.d.ts +40 -10
  103. package/dist/_dts/sdk/src/config/field-definitions.d.ts +13 -7
  104. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +26 -3
  105. package/dist/_dts/sdk/src/public-api/contracts.d.ts +13 -0
  106. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  107. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +6 -1
  108. package/dist/_dts/sdk/src/rendering/overrides.d.ts +6 -1
  109. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  110. package/dist/_dts/sdk/src/version.d.ts +1 -1
  111. package/dist/_dts/site-commands/src/commands.d.ts +15 -0
  112. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  113. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  114. package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +16 -0
  115. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  116. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  117. package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
  118. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  119. package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
  120. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +33 -33
  121. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  122. package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +16 -0
  123. package/dist/_dts/theme-core/src/schema.d.ts +30 -25
  124. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  125. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +141 -1
  126. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -0
  127. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +110 -5
  128. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  129. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  130. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +5 -1
  131. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  132. package/dist/_dts/theme-core/src/site-styles/types.d.ts +1 -1
  133. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
  134. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +1 -0
  135. package/dist/_dts/theme-core/src/utils/colorStyles.d.ts +6 -6
  136. package/dist/{chunk-2BUMISSH.mjs → chunk-3LXFQS7T.mjs} +1 -1
  137. package/dist/{chunk-FIREV57T.mjs → chunk-LBBPD2IW.mjs} +40 -0
  138. package/dist/{chunk-XQR6THQJ.mjs → chunk-O62NDCTI.mjs} +3390 -1331
  139. package/dist/{chunk-6FWNF3DJ.mjs → chunk-QRKJDWT7.mjs} +158 -20
  140. package/dist/{chunk-HKB6XVIP.mjs → chunk-RCTJAZSK.mjs} +2 -2
  141. package/dist/{chunk-G35HOQEN.mjs → chunk-X5ZCSU6F.mjs} +132 -46
  142. package/dist/cli/index.mjs +2925 -577
  143. package/dist/cli/init-docs/content/agents-section.md +5 -0
  144. package/dist/cli/init-docs/content/cli-reference.md +13 -0
  145. package/dist/cli/init-docs/content/content-management.md +31 -0
  146. package/dist/cli/init-docs/content/getting-started.md +14 -0
  147. package/dist/cli/init-docs/content/workflow-add-block.md +3 -1
  148. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +81 -0
  149. package/dist/cli/init-docs/content/workflow-create-page.md +13 -3
  150. package/dist/cli/init-docs/content/workflow-custom-block.md +9 -0
  151. package/dist/cli/init-docs/content/workflow-templates.md +107 -2
  152. package/dist/client/{accordion-G34C45TW.mjs → accordion-2UZPBMYM.mjs} +2 -2
  153. package/dist/client/{bookingForm-BLBVKSAQ.mjs → bookingForm-DYXT6YB6.mjs} +5 -5
  154. package/dist/client/bookings.mjs +3477 -186
  155. package/dist/client/{carousel-7ZVTBRMD.mjs → carousel-QH77HR6X.mjs} +3 -3
  156. package/dist/client/{cart-Q6S6LZUO.mjs → cart-X4YK4FTW.mjs} +6 -6
  157. package/dist/client/{checkout-5QJLDE4I.mjs → checkout-OM2BEPWD.mjs} +6 -6
  158. package/dist/client/{chunk-ZF4XEWDM.mjs → chunk-3DTWLTXM.mjs} +1 -1
  159. package/dist/client/{chunk-5PQH4Y75.mjs → chunk-4OXKTA3D.mjs} +2 -2
  160. package/dist/client/{chunk-WJFHDTYF.mjs → chunk-52CGCQ7B.mjs} +5 -5
  161. package/dist/client/{chunk-CHAB5ACD.mjs → chunk-7UCLJ5SP.mjs} +2 -2
  162. package/dist/client/{chunk-U2EW7RSR.mjs → chunk-F5VRX5Y6.mjs} +1 -1
  163. package/dist/client/{chunk-SBBSMFFG.mjs → chunk-SYIJ5JO2.mjs} +1 -1
  164. package/dist/client/{chunk-EQKYMX4N.mjs → chunk-UHDWIXVR.mjs} +180 -157
  165. package/dist/client/{chunk-RJHTCTCZ.mjs → chunk-VGDBVNOO.mjs} +429 -15
  166. package/dist/client/{chunk-S3MKFGOG.mjs → chunk-ZE5G642V.mjs} +1 -1
  167. package/dist/client/{chunk-CSZGLBYR.mjs → chunk-ZKUO52W3.mjs} +1 -1
  168. package/dist/client/client.mjs +2685 -847
  169. package/dist/client/{courseRegistration-VUG2JJDB.mjs → courseRegistration-YBOGURTA.mjs} +5 -5
  170. package/dist/client/{eventCalendar-E7D2LD4N.mjs → eventCalendar-K4QJVCMD.mjs} +7 -7
  171. package/dist/client/{eventCombined-FUZ2Z3CS.mjs → eventCombined-MTXGMTCZ.mjs} +7 -7
  172. package/dist/client/{eventDetails-QRITJAOW.mjs → eventDetails-3PC4NL3U.mjs} +7 -7
  173. package/dist/client/{eventListing-INMQMJZ5.mjs → eventListing-TFJET6DN.mjs} +7 -7
  174. package/dist/client/{eventRegistration-TOOJD4WU.mjs → eventRegistration-QGPBGJTW.mjs} +7 -7
  175. package/dist/client/{form-BOWN7ZNQ.mjs → form-MDKR4FNB.mjs} +2 -2
  176. package/dist/client/{headerSection-HFQNZOUU.mjs → headerSection-Y5TMR3TW.mjs} +3 -3
  177. package/dist/client/hooks.mjs +2077 -546
  178. package/dist/client/{locationMap-VUZGC7Y5.mjs → locationMap-RH2LG7FZ.mjs} +2 -2
  179. package/dist/client/{newsletterForm-X2XQTPCB.mjs → newsletterForm-ZR5UDGBT.mjs} +2 -2
  180. package/dist/client/{productDetail-TA7D2G2B.mjs → productDetail-OIGDR4YE.mjs} +6 -6
  181. package/dist/client/{productList-AZOLOZKM.mjs → productList-4MA5S2CX.mjs} +6 -6
  182. package/dist/client/rendering/client.mjs +2560 -1205
  183. package/dist/client/rendering/islands.mjs +19 -19
  184. package/dist/client/rendering.mjs +2932 -1021
  185. package/dist/client/{shop-ZDLO7IIG.mjs → shop-WXSYV5QO.mjs} +6 -6
  186. package/dist/preview-next/before-render.mjs +40 -0
  187. package/dist/preview-next/client/runtime.mjs +5 -5
  188. package/dist/preview-next/middleware.mjs +40 -0
  189. package/dist/{sdk-runtime-CTWKNBDQ.mjs → sdk-runtime-7HJYPRWQ.mjs} +6 -6
  190. package/dist/server/components.mjs +2232 -534
  191. package/dist/server/config-validation.mjs +2068 -536
  192. package/dist/server/config.mjs +2068 -536
  193. package/dist/server/data.mjs +2077 -546
  194. package/dist/server/index.mjs +42 -1
  195. package/dist/server/next.mjs +2345 -574
  196. package/dist/server/page-converter.mjs +2684 -1220
  197. package/dist/server/prebuild.mjs +1 -1
  198. package/dist/server/rendering/server.mjs +2244 -546
  199. package/dist/server/rendering.mjs +2323 -552
  200. package/dist/server/routing.mjs +2012 -420
  201. package/dist/server/server.mjs +2153 -549
  202. package/dist/server/theme-bridge.mjs +1180 -101
  203. package/dist/server/theme.mjs +92 -1
  204. package/dist/styles/index.css +292 -36
  205. package/package.json +1 -1
  206. package/dist/SdkPreviewModeRuntime-RNVRHFFR.mjs +0 -8
@@ -877,6 +877,21 @@ var selectSourceSchema = z3.discriminatedUnion("kind", [
877
877
  function assertNeverSelectSource(value) {
878
878
  throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
879
879
  }
880
+ var visibleWhenPredicateSchema = z3.object({
881
+ field: z3.string().min(1),
882
+ equals: z3.any().optional(),
883
+ notEquals: z3.any().optional(),
884
+ oneOf: z3.array(z3.any()).optional(),
885
+ notIn: z3.array(z3.any()).optional(),
886
+ minItems: z3.number().int().nonnegative().optional(),
887
+ maxItems: z3.number().int().nonnegative().optional()
888
+ });
889
+ var visibleWhenSchema = z3.union([
890
+ visibleWhenPredicateSchema,
891
+ z3.object({
892
+ allOf: z3.array(visibleWhenPredicateSchema).min(1)
893
+ })
894
+ ]);
880
895
  var uiSchema = z3.object({
881
896
  widget: z3.string().optional(),
882
897
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -909,13 +924,7 @@ var uiSchema = z3.object({
909
924
  showValue: z3.boolean().optional(),
910
925
  pattern: z3.string().optional(),
911
926
  placeholder: z3.string().optional(),
912
- visibleWhen: z3.object({
913
- field: z3.string().min(1),
914
- equals: z3.any().optional(),
915
- notEquals: z3.any().optional(),
916
- oneOf: z3.array(z3.any()).optional(),
917
- notIn: z3.array(z3.any()).optional()
918
- }).optional(),
927
+ visibleWhen: visibleWhenSchema.optional(),
919
928
  // Modal configuration for modal and group fields
920
929
  modalConfig: z3.object({
921
930
  buttonLabel: z3.string().optional(),
@@ -3829,6 +3838,7 @@ var eventListTreatmentValues = [
3829
3838
  ];
3830
3839
  var eyebrowTreatmentValues = [
3831
3840
  "plain",
3841
+ "accent",
3832
3842
  "pill",
3833
3843
  "accent-pill",
3834
3844
  "pill-bounce",
@@ -8167,7 +8177,8 @@ var STRUCTURAL_DECLARATIONS = [
8167
8177
  ["transition", "all 200ms ease-in-out"],
8168
8178
  ["display", "inline-flex"],
8169
8179
  ["align-items", "center"],
8170
- ["justify-content", "center"]
8180
+ ["justify-content", "center"],
8181
+ ["outline", "none"]
8171
8182
  ];
8172
8183
  function generateButtonCss(options) {
8173
8184
  const { themeId, theme, buttonSystem: providedButtonSystem } = options;
@@ -8197,6 +8208,7 @@ function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
8197
8208
  out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
8198
8209
  const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
8199
8210
  if (hoverBg) out.push(hoverBg);
8211
+ out.push(variantFocusVisibleRule(variantId, themeId));
8200
8212
  const effects = variantEffectsCss(variant, themeId, tokens, theme);
8201
8213
  if (effects) out.push({ raw: effects });
8202
8214
  out.push(...variantDisabledRules(variantId, themeId));
@@ -8254,6 +8266,12 @@ function variantHoverBackgroundRule(variant, variantId, global, themeId, tokens)
8254
8266
  ["background-color", tokens.getColor(hoverToken)]
8255
8267
  ]);
8256
8268
  }
8269
+ function variantFocusVisibleRule(variantId, themeId) {
8270
+ return rule(`:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:focus-visible`, [
8271
+ ["outline", "2px solid currentColor"],
8272
+ ["outline-offset", "3px"]
8273
+ ]);
8274
+ }
8257
8275
  function variantEffectsCss(variant, themeId, tokens, theme) {
8258
8276
  if (!variant.effects) return "";
8259
8277
  const elementConfig = {
@@ -8885,6 +8903,95 @@ var joyStamp = defineButtonPersonality({
8885
8903
  }
8886
8904
  });
8887
8905
 
8906
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
8907
+ var ornateRitual = defineButtonPersonality({
8908
+ id: "ornate-ritual",
8909
+ name: "Ornate Ritual",
8910
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
8911
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
8912
+ buttonSystem: {
8913
+ global: {
8914
+ cornerStyle: "rounded",
8915
+ shadow: "none",
8916
+ textTransform: "uppercase",
8917
+ fontWeight: 600,
8918
+ borderWidth: 1,
8919
+ hoverTransform: "none",
8920
+ hoverColor: "none",
8921
+ letterSpacing: "loose"
8922
+ },
8923
+ sizes: {
8924
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
8925
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
8926
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
8927
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
8928
+ },
8929
+ variants: [
8930
+ {
8931
+ id: "primary",
8932
+ name: "Primary",
8933
+ enabled: true,
8934
+ priority: 1,
8935
+ background: { type: "solid", colorToken: "primary" },
8936
+ textColorToken: "primaryForeground",
8937
+ borderRadius: "rounded-md",
8938
+ border: { widthClass: "border", colorToken: "primary" },
8939
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8940
+ effects: {
8941
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
8942
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8943
+ }
8944
+ },
8945
+ {
8946
+ id: "secondary",
8947
+ name: "Secondary",
8948
+ enabled: true,
8949
+ priority: 2,
8950
+ background: { type: "solid", colorToken: "secondary" },
8951
+ textColorToken: "primaryForeground",
8952
+ borderRadius: "rounded-md",
8953
+ border: { widthClass: "border", colorToken: "primary" },
8954
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8955
+ effects: {
8956
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8957
+ }
8958
+ },
8959
+ {
8960
+ id: "outline",
8961
+ name: "Outline",
8962
+ enabled: true,
8963
+ priority: 3,
8964
+ background: { type: "transparent" },
8965
+ textColorToken: "primary",
8966
+ borderRadius: "rounded-md",
8967
+ border: { widthClass: "border", colorToken: "primary" },
8968
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8969
+ effects: {
8970
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
8971
+ }
8972
+ },
8973
+ {
8974
+ id: "ghost",
8975
+ name: "Ghost",
8976
+ enabled: true,
8977
+ priority: 3,
8978
+ background: { type: "transparent" },
8979
+ textColorToken: "accent",
8980
+ borderRadius: "rounded-none",
8981
+ sizes: {
8982
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
8983
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
8984
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
8985
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
8986
+ },
8987
+ effects: {
8988
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
8989
+ }
8990
+ }
8991
+ ]
8992
+ }
8993
+ });
8994
+
8888
8995
  // ../theme-core/src/buttons/personalities/pebble.ts
8889
8996
  var pebble = defineButtonPersonality({
8890
8997
  id: "pebble",
@@ -9158,7 +9265,8 @@ var buttonPersonalities = [
9158
9265
  inkStamp,
9159
9266
  brushedWash,
9160
9267
  showtimePill,
9161
- joyStamp
9268
+ joyStamp,
9269
+ ornateRitual
9162
9270
  ];
9163
9271
  var personalitiesById = new Map(
9164
9272
  buttonPersonalities.map((p) => [p.id, p])
@@ -10153,7 +10261,7 @@ function rgbColorValue(token) {
10153
10261
  if (alpha === void 0) {
10154
10262
  return `rgb(var(${cssVar}))`;
10155
10263
  }
10156
- return `rgba(var(${cssVar}), ${alpha})`;
10264
+ return `rgb(var(${cssVar}) / ${alpha})`;
10157
10265
  }
10158
10266
  function backgroundColorStyle(token) {
10159
10267
  return { backgroundColor: rgbColorValue(token) };
@@ -11282,6 +11390,28 @@ var warmDarkEmber = definePaletteVariant({
11282
11390
  { name: "border", hex: "#894e31" }
11283
11391
  ]
11284
11392
  });
11393
+ var warmDarkKirtanGold = definePaletteVariant({
11394
+ id: "warm-dark-kirtan-gold",
11395
+ name: "Warm Dark \u2014 Kirtan Gold",
11396
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
11397
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
11398
+ mode: "dark",
11399
+ colors: [
11400
+ { name: "primary", hex: "#ffcdb2" },
11401
+ { name: "secondary", hex: "#b5838d" },
11402
+ { name: "accent", hex: "#e5989b" },
11403
+ { name: "success", hex: "#8fbf8f" },
11404
+ { name: "warning", hex: "#f2b86b" },
11405
+ { name: "destructive", hex: "#d96b6b" },
11406
+ { name: "background", hex: "#403944" },
11407
+ { name: "surface", hex: "#403944" },
11408
+ { name: "surfaceAlt", hex: "#372f3b" },
11409
+ { name: "muted", hex: "#4d4550" },
11410
+ { name: "text", hex: "#e6d2d5" },
11411
+ { name: "primaryForeground", hex: "#403944" },
11412
+ { name: "border", hex: "#8d747a" }
11413
+ ]
11414
+ });
11285
11415
 
11286
11416
  // ../theme-core/src/palette/variants/index.ts
11287
11417
  var paletteVariants = [
@@ -11305,7 +11435,8 @@ var paletteVariants = [
11305
11435
  softNaturalWatercolor,
11306
11436
  softNaturalLilac,
11307
11437
  // Warm-dark family (dark mode)
11308
- warmDarkEmber
11438
+ warmDarkEmber,
11439
+ warmDarkKirtanGold
11309
11440
  ];
11310
11441
  var paletteVariantsById = new Map(
11311
11442
  paletteVariants.map((v) => [v.id, v])
@@ -12874,9 +13005,125 @@ function headerConfigurationKey(configuration) {
12874
13005
  function asFooterLookId(value) {
12875
13006
  return value;
12876
13007
  }
12877
- var guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
13008
+ function asFooterLayoutId(value) {
13009
+ return value;
13010
+ }
13011
+ function asFooterStyleId(value) {
13012
+ return value;
13013
+ }
13014
+ var guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
13015
+ var footerLayoutCatalog = defineExactCatalog()([
13016
+ {
13017
+ id: asFooterLayoutId("identity"),
13018
+ label: "Identity",
13019
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
13020
+ },
13021
+ {
13022
+ id: asFooterLayoutId("centered"),
13023
+ label: "Centered",
13024
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
13025
+ maxRecommendedNavDensity: "sparse"
13026
+ },
13027
+ {
13028
+ id: asFooterLayoutId("split"),
13029
+ label: "Split",
13030
+ description: "Navigation and brand signoff separated into a wider split footer.",
13031
+ requiresFooterNav: true,
13032
+ maxRecommendedNavDensity: "balanced"
13033
+ },
13034
+ {
13035
+ id: asFooterLayoutId("columns"),
13036
+ label: "Columns",
13037
+ description: "Grouped footer navigation columns with a supporting bottom line.",
13038
+ requiresFooterNav: true,
13039
+ requiresFooterNavGroups: true
13040
+ }
13041
+ ]);
13042
+ var footerStyleCatalog = defineExactCatalog()([
13043
+ {
13044
+ id: asFooterStyleId("quiet"),
13045
+ label: "Quiet",
13046
+ description: "Lightweight, practical footer treatment."
13047
+ },
13048
+ {
13049
+ id: asFooterStyleId("calm"),
13050
+ label: "Calm",
13051
+ description: "Soft centered treatment with restrained dividers."
13052
+ },
13053
+ {
13054
+ id: asFooterStyleId("editorial"),
13055
+ label: "Editorial",
13056
+ description: "Text-forward treatment with fine-line structure."
13057
+ },
13058
+ {
13059
+ id: asFooterStyleId("brand-band"),
13060
+ label: "Brand band",
13061
+ description: "High-contrast brand treatment with a stronger bottom bar."
13062
+ }
13063
+ ]);
13064
+ var footerLayoutsById = new Map(
13065
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
13066
+ );
13067
+ var footerStylesById = new Map(
13068
+ footerStyleCatalog.map((style) => [style.id, style])
13069
+ );
13070
+ function identityQuietFooter(theme) {
13071
+ return {
13072
+ ...theme.footer,
13073
+ variant: "simple",
13074
+ maxWidth: "container",
13075
+ background: {
13076
+ type: "color",
13077
+ color: "surface"
13078
+ },
13079
+ navStyle: "minimal",
13080
+ navWeight: "regular",
13081
+ navColor: "text",
13082
+ navLinkStyle: {
13083
+ typography: "body",
13084
+ fontWeight: "regular",
13085
+ textTransform: "none",
13086
+ italic: false,
13087
+ colorToken: "text",
13088
+ hoverColorToken: "primary",
13089
+ padding: "none",
13090
+ borderRadius: "none"
13091
+ },
13092
+ navLayout: {
13093
+ layout: "inline-wrap",
13094
+ align: "start",
13095
+ gapX: "default",
13096
+ gapY: "tight"
13097
+ },
13098
+ logo: {
13099
+ showLogo: true,
13100
+ showLogoText: true,
13101
+ placement: "left",
13102
+ size: "sm",
13103
+ align: "start"
13104
+ },
13105
+ bottomBar: {
13106
+ enabled: false,
13107
+ fullBleed: false,
13108
+ textAlign: "left",
13109
+ paddingX: "default",
13110
+ paddingY: "compact",
13111
+ borderTop: {
13112
+ width: "none"
13113
+ }
13114
+ }
13115
+ };
13116
+ }
12878
13117
  function mutedGroundingFooter(theme) {
12879
- return theme.footer;
13118
+ return {
13119
+ ...identityQuietFooter(theme),
13120
+ background: theme.footer.background,
13121
+ navStyle: theme.footer.navStyle,
13122
+ navColor: theme.footer.navColor,
13123
+ navWeight: theme.footer.navWeight,
13124
+ navLinkStyle: theme.footer.navLinkStyle,
13125
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
13126
+ };
12880
13127
  }
12881
13128
  function brandTwoBandFooter(theme) {
12882
13129
  return {
@@ -12981,6 +13228,53 @@ function centeredCalmFooter(theme) {
12981
13228
  }
12982
13229
  };
12983
13230
  }
13231
+ function splitEditorialFooter(theme) {
13232
+ return {
13233
+ ...theme.footer,
13234
+ variant: "split",
13235
+ maxWidth: "container",
13236
+ background: {
13237
+ type: "color",
13238
+ color: "surface"
13239
+ },
13240
+ navStyle: "minimal",
13241
+ navWeight: "regular",
13242
+ navColor: "text",
13243
+ navLinkStyle: {
13244
+ typography: "body",
13245
+ fontWeight: "regular",
13246
+ textTransform: "none",
13247
+ italic: false,
13248
+ colorToken: "text",
13249
+ hoverColorToken: "primary",
13250
+ padding: "none",
13251
+ borderRadius: "none"
13252
+ },
13253
+ navLayout: {
13254
+ layout: "inline-wrap",
13255
+ align: "start",
13256
+ gapX: "relaxed",
13257
+ gapY: "tight"
13258
+ },
13259
+ logo: {
13260
+ showLogo: true,
13261
+ showLogoText: true,
13262
+ placement: "right",
13263
+ size: "sm",
13264
+ align: "end"
13265
+ },
13266
+ bottomBar: {
13267
+ enabled: true,
13268
+ fullBleed: false,
13269
+ textAlign: "left",
13270
+ paddingX: "default",
13271
+ paddingY: "compact",
13272
+ borderTop: {
13273
+ width: "thin"
13274
+ }
13275
+ }
13276
+ };
13277
+ }
12984
13278
  function editorialColumnsFooter(theme) {
12985
13279
  return {
12986
13280
  ...theme.footer,
@@ -13023,25 +13317,47 @@ function editorialColumnsFooter(theme) {
13023
13317
  };
13024
13318
  }
13025
13319
  var footerLookCatalog = defineExactCatalog()([
13320
+ {
13321
+ id: asFooterLookId("footer-identity-quiet"),
13322
+ label: "Identity footer",
13323
+ layoutId: asFooterLayoutId("identity"),
13324
+ styleId: asFooterStyleId("quiet"),
13325
+ compile: identityQuietFooter
13326
+ },
13026
13327
  {
13027
13328
  id: asFooterLookId("footer-muted-grounding"),
13028
13329
  label: "Muted grounding footer",
13330
+ layoutId: asFooterLayoutId("identity"),
13331
+ styleId: asFooterStyleId("quiet"),
13332
+ hiddenFromLayoutStyleControls: true,
13029
13333
  compile: mutedGroundingFooter
13030
13334
  },
13031
13335
  {
13032
13336
  id: asFooterLookId("footer-centered-calm"),
13033
13337
  label: "Centered calm footer",
13338
+ layoutId: asFooterLayoutId("centered"),
13339
+ styleId: asFooterStyleId("calm"),
13034
13340
  compile: centeredCalmFooter
13035
13341
  },
13342
+ {
13343
+ id: asFooterLookId("footer-split-editorial"),
13344
+ label: "Split editorial footer",
13345
+ layoutId: asFooterLayoutId("split"),
13346
+ styleId: asFooterStyleId("editorial"),
13347
+ compile: splitEditorialFooter
13348
+ },
13036
13349
  {
13037
13350
  id: asFooterLookId("footer-editorial-columns"),
13038
13351
  label: "Editorial columns footer",
13352
+ layoutId: asFooterLayoutId("columns"),
13353
+ styleId: asFooterStyleId("editorial"),
13039
13354
  compile: editorialColumnsFooter
13040
13355
  },
13041
13356
  {
13042
13357
  id: asFooterLookId("site-footer-brand-two-band"),
13043
13358
  label: "Two-band brand footer",
13044
- maxRecommendedNavDensity: "balanced",
13359
+ layoutId: asFooterLayoutId("split"),
13360
+ styleId: asFooterStyleId("brand-band"),
13045
13361
  allowedContentPresence: ["default-footer", "default-and-blocks"],
13046
13362
  compile: brandTwoBandFooter
13047
13363
  }
@@ -13244,6 +13560,30 @@ var luxeContrastTypography = {
13244
13560
  },
13245
13561
  scale: "spacious"
13246
13562
  };
13563
+ var kirtanOrnateTypography = {
13564
+ body: {
13565
+ family: "Jost, system-ui, sans-serif",
13566
+ size: "md",
13567
+ weight: "regular",
13568
+ lineHeight: "relaxed",
13569
+ letterSpacing: "normal"
13570
+ },
13571
+ headings: {
13572
+ default: {
13573
+ family: "Marcellus, Georgia, serif",
13574
+ weight: "regular",
13575
+ lineHeight: "normal",
13576
+ letterSpacing: "normal",
13577
+ colorToken: "primary",
13578
+ italic: null,
13579
+ case: null
13580
+ },
13581
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13582
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13583
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
13584
+ },
13585
+ scale: "spacious"
13586
+ };
13247
13587
  var boldDisplayTypography = {
13248
13588
  body: {
13249
13589
  family: "Manrope, system-ui, sans-serif",
@@ -13278,16 +13618,16 @@ var originalJoyTypography = {
13278
13618
  },
13279
13619
  headings: {
13280
13620
  default: {
13281
- family: "Bricolage Grotesque, system-ui, sans-serif",
13282
- weight: "bold",
13621
+ family: "Lobster, cursive",
13622
+ weight: "regular",
13283
13623
  lineHeight: "normal",
13284
- letterSpacing: "tight",
13624
+ letterSpacing: "normal",
13285
13625
  italic: null,
13286
13626
  case: null
13287
13627
  },
13288
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13289
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13290
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
13628
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13629
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13630
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
13291
13631
  },
13292
13632
  scale: "balanced"
13293
13633
  };
@@ -13352,6 +13692,32 @@ var typographyPresets = [
13352
13692
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13353
13693
  typography: luxeContrastTypography
13354
13694
  }),
13695
+ defineTypographyPreset({
13696
+ id: "typography-preset:kirtan-ornate",
13697
+ name: "Kirtan Ornate",
13698
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
13699
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
13700
+ recommendedFonts: {
13701
+ body: ["Jost", "Manrope", "Inter"],
13702
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
13703
+ },
13704
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13705
+ typography: kirtanOrnateTypography,
13706
+ heroTypography: {
13707
+ headlineSize: "6xl",
13708
+ headlineLineHeight: "normal",
13709
+ subheadlineSize: "xl",
13710
+ subheadlineLineHeight: "relaxed",
13711
+ microHeadlineSize: "5xl",
13712
+ microHeadlineLineHeight: "normal",
13713
+ microSubheadlineSize: "lg",
13714
+ microSubheadlineLineHeight: "relaxed",
13715
+ responsive: {
13716
+ tablet: { headlineSize: "5xl" },
13717
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
13718
+ }
13719
+ }
13720
+ }),
13355
13721
  defineTypographyPreset({
13356
13722
  id: "typography-preset:bold-display",
13357
13723
  name: "Bold Display",
@@ -13381,11 +13747,11 @@ var typographyPresets = [
13381
13747
  defineTypographyPreset({
13382
13748
  id: "typography-preset:original-joy",
13383
13749
  name: "Original Joy",
13384
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
13385
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
13750
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
13751
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
13386
13752
  recommendedFonts: {
13387
13753
  body: ["DM Sans", "Inter", "Manrope"],
13388
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
13754
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
13389
13755
  },
13390
13756
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13391
13757
  typography: originalJoyTypography,
@@ -13409,87 +13775,482 @@ var typographyPresetsById = new Map(
13409
13775
  typographyPresets.map((preset2) => [preset2.id, preset2])
13410
13776
  );
13411
13777
 
13412
- // ../theme-core/src/site-styles/curatedSiteStyles.ts
13413
- var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
13414
- var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
13415
- var curatedSiteStyleIdValues = [
13416
- "site-style:calm-studio",
13417
- "site-style:clear-professional",
13418
- "site-style:warm-editorial",
13419
- "site-style:bright-community",
13420
- "site-style:quiet-luxury",
13421
- "site-style:practical-services",
13422
- "site-style:quiet-practice",
13423
- "site-style:personal-retreat-journal",
13424
- "site-style:tactile-workshop",
13425
- "site-style:modern-wellness",
13426
- "site-style:clarity-zen-blue",
13427
- SOFT_EARTH_SITE_STYLE_ID_VALUE,
13428
- "site-style:bold-launch",
13429
- "site-style:south-west-twerk-school",
13430
- "site-style:original-joy"
13431
- ];
13432
- var quietBudget = {
13433
- accentDensity: "low",
13434
- panelDensity: "medium",
13435
- transitionMix: "quiet",
13436
- primaryCtaLimit: 2,
13437
- mediaDensity: "medium",
13438
- decorativeRepetition: "low"
13439
- };
13440
- var balancedBudget = {
13441
- accentDensity: "medium",
13442
- panelDensity: "medium",
13443
- transitionMix: "balanced",
13444
- primaryCtaLimit: 3,
13445
- mediaDensity: "medium",
13446
- decorativeRepetition: "medium"
13447
- };
13448
- var expressiveBudget = {
13449
- accentDensity: "high",
13450
- panelDensity: "high",
13451
- transitionMix: "expressive",
13452
- primaryCtaLimit: 3,
13453
- mediaDensity: "high",
13454
- decorativeRepetition: "medium"
13455
- };
13456
- var expressiveUnderlineInputs = {
13457
- base: {
13458
- background: { type: "transparent" },
13459
- textColorToken: "text",
13460
- border: {
13461
- widthClass: "border-2",
13462
- colorToken: "border",
13463
- style: "underline"
13778
+ // ../theme-core/src/site-styles/designState.ts
13779
+ import { z as z25 } from "zod";
13780
+ var themeV2DesignStateSchemaVersion = 1;
13781
+ var designResolutionPolicySchema = z25.enum(["generated", "user", "admin", "sdk"]);
13782
+ var runtimeStyleFieldNameSchema = z25.enum(themeV2RuntimeStyleFieldNames);
13783
+ var nonEmptyRuntimeStyleFieldNamesSchema = z25.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
13784
+ fields3[0],
13785
+ ...fields3.slice(1)
13786
+ ]);
13787
+ var heroLegibilityStrategySchema = z25.enum([
13788
+ "none",
13789
+ "scrim-gradient",
13790
+ "solid-panel"
13791
+ ]);
13792
+ var heroCompositionIntentSchema = z25.enum([
13793
+ "center",
13794
+ "bottom-left"
13795
+ ]);
13796
+ var heroTypographyScaleIntentSchema = z25.enum([
13797
+ "quiet",
13798
+ "editorial",
13799
+ "display",
13800
+ "poster"
13801
+ ]);
13802
+ var sectionHeightIntentSchema = z25.enum([
13803
+ "default",
13804
+ "banner",
13805
+ "hero",
13806
+ "immersive"
13807
+ ]);
13808
+ var imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
13809
+ var imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
13810
+ var imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
13811
+ z25.object({ kind: z25.literal("none") }).strict(),
13812
+ z25.object({
13813
+ kind: z25.literal("brand-scrim"),
13814
+ token: z25.enum(["primary", "secondary", "accent"]),
13815
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13816
+ }).strict(),
13817
+ z25.object({
13818
+ kind: z25.literal("brand-wash"),
13819
+ token: z25.enum(["primary", "secondary", "accent"]),
13820
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13821
+ }).strict(),
13822
+ z25.object({
13823
+ kind: z25.literal("neutral-scrim"),
13824
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13825
+ }).strict(),
13826
+ z25.object({
13827
+ kind: z25.literal("neutral-wash"),
13828
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13829
+ }).strict(),
13830
+ z25.object({
13831
+ kind: z25.literal("solid-panel"),
13832
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13833
+ }).strict()
13834
+ ]);
13835
+ var testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
13836
+ var tileTreatmentSchema = z25.enum(tileTreatmentValues);
13837
+ var eventListTreatmentSchema = z25.enum(eventListTreatmentValues);
13838
+ var eyebrowTreatmentSchema = z25.enum(eyebrowTreatmentValues);
13839
+ function uniqueNonEmpty(values) {
13840
+ const uniqueValues = [...new Set(values)];
13841
+ const firstValue = uniqueValues[0];
13842
+ if (!firstValue) {
13843
+ throw new Error("Expected at least one Theme V2 design state option.");
13844
+ }
13845
+ return [firstValue, ...uniqueValues.slice(1)];
13846
+ }
13847
+ var userPanelTreatments = uniqueNonEmpty(
13848
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
13849
+ );
13850
+ var userFlushTreatments = uniqueNonEmpty(
13851
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
13852
+ );
13853
+ var userFlushBleeds = uniqueNonEmpty(
13854
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
13855
+ );
13856
+ var contentFrameIntentSchema = z25.discriminatedUnion("kind", [
13857
+ z25.object({ kind: z25.literal("plain") }).strict(),
13858
+ z25.object({
13859
+ kind: z25.literal("panel"),
13860
+ treatment: z25.enum(userPanelTreatments)
13861
+ }).strict(),
13862
+ z25.object({
13863
+ kind: z25.literal("flush-panel"),
13864
+ treatment: z25.enum(userFlushTreatments),
13865
+ bleed: z25.enum(userFlushBleeds)
13866
+ }).strict()
13867
+ ]);
13868
+ var blockDesignPlanSchema = z25.object({
13869
+ blockId: z25.string().min(1).transform(asDesignBlockId),
13870
+ blockKind: z25.string().min(1),
13871
+ purpose: z25.string().min(1),
13872
+ sectionSurface: z25.enum(userDesignOptionCatalog.sectionSurfaces),
13873
+ contentFrame: contentFrameIntentSchema,
13874
+ itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
13875
+ transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
13876
+ emphasis: z25.enum(userDesignOptionCatalog.emphases),
13877
+ sectionHeight: sectionHeightIntentSchema.optional(),
13878
+ heroLegibility: heroLegibilityStrategySchema.optional(),
13879
+ heroComposition: heroCompositionIntentSchema.optional(),
13880
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
13881
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
13882
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
13883
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
13884
+ tileTreatment: tileTreatmentSchema.optional(),
13885
+ eventListTreatment: eventListTreatmentSchema.optional(),
13886
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
13887
+ }).strict();
13888
+ var styleAuthoritySchema = z25.discriminatedUnion("kind", [
13889
+ z25.object({
13890
+ kind: z25.literal("theme-v2"),
13891
+ source: designResolutionPolicySchema,
13892
+ siteStyleId: z25.string().min(1).transform(asSiteStyleId),
13893
+ templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
13894
+ templateVersion: z25.number().int().nonnegative(),
13895
+ resolverVersion: z25.number().int().nonnegative()
13896
+ }).strict(),
13897
+ z25.object({
13898
+ kind: z25.literal("legacy-raw"),
13899
+ reason: z25.enum(["pre-theme-v2", "manual-runtime-fields"])
13900
+ }).strict(),
13901
+ z25.object({
13902
+ kind: z25.literal("advanced-detached"),
13903
+ reason: z25.literal("detached-custom-runtime-fields")
13904
+ }).strict()
13905
+ ]);
13906
+ var blockRuntimeStyleAuthoritySchema = z25.object({
13907
+ unit: z25.literal("block-runtime-fields"),
13908
+ blockId: z25.string().min(1).transform(asDesignBlockId),
13909
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
13910
+ authority: styleAuthoritySchema
13911
+ }).strict();
13912
+ var persistedPageDesignStateV1Schema = z25.object({
13913
+ schemaVersion: z25.literal(themeV2DesignStateSchemaVersion),
13914
+ siteStyleId: z25.string().min(1).transform(asSiteStyleId),
13915
+ templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
13916
+ templateVersion: z25.number().int().nonnegative(),
13917
+ resolverVersion: z25.number().int().nonnegative(),
13918
+ rhythmPresetId: z25.string().min(1),
13919
+ blocks: z25.array(blockDesignPlanSchema),
13920
+ styleAuthorities: z25.array(blockRuntimeStyleAuthoritySchema)
13921
+ }).strict();
13922
+
13923
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
13924
+ function defineDesignRuntimeRules(rules) {
13925
+ return rules;
13926
+ }
13927
+ function defineComponentRuntimeRules(rules) {
13928
+ return rules;
13929
+ }
13930
+ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
13931
+ sectionSurfaces: {
13932
+ base: {},
13933
+ "muted-band": {
13934
+ background: {
13935
+ type: "color",
13936
+ color: "muted"
13937
+ }
13464
13938
  },
13465
- corners: "square",
13466
- shadow: null,
13467
- spacing: "compact",
13468
- fontSize: "base"
13469
- },
13470
- label: {
13471
- textColorToken: "primary",
13472
- fontWeight: "black",
13473
- fontSize: "xs",
13474
- textTransform: "uppercase",
13475
- letterSpacing: "widest",
13476
- opacity: 1
13477
- },
13478
- focus: {
13479
- ringColorToken: "secondary",
13480
- ringWidth: "0",
13481
- borderColorToken: "secondary"
13939
+ "accent-band": {
13940
+ background: {
13941
+ type: "color",
13942
+ color: "primary"
13943
+ }
13944
+ },
13945
+ "brand-depth-band": {
13946
+ background: {
13947
+ type: "color",
13948
+ color: "primary-800"
13949
+ }
13950
+ },
13951
+ "hero-image": {
13952
+ background: {
13953
+ type: "image",
13954
+ opacity: 1,
13955
+ position: "center center",
13956
+ ...uniformSectionForeground("text")
13957
+ }
13958
+ }
13482
13959
  },
13483
- error: {
13484
- borderColorToken: "destructive",
13485
- textColorToken: "destructive"
13960
+ heroLegibility: {
13961
+ "scrim-gradient": {
13962
+ type: "gradient",
13963
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
13964
+ opacity: 1
13965
+ },
13966
+ "solid-panel": {
13967
+ type: "color",
13968
+ color: "surface",
13969
+ opacity: 0.88
13970
+ }
13486
13971
  },
13487
- disabled: {
13488
- backgroundColorToken: "surface",
13972
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
13973
+ });
13974
+ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
13975
+ panelFrames: {
13976
+ inset: {
13977
+ spacing: "comfortable",
13978
+ rounded: "xl",
13979
+ raised: false,
13980
+ background: {
13981
+ type: "color",
13982
+ color: "surfaceAlt",
13983
+ textColor: "text"
13984
+ }
13985
+ },
13986
+ raised: {
13987
+ spacing: "comfortable",
13988
+ rounded: "xl",
13989
+ raised: true,
13990
+ background: {
13991
+ type: "color",
13992
+ color: "surfaceAlt",
13993
+ textColor: "text"
13994
+ }
13995
+ },
13996
+ editorial: {
13997
+ spacing: "medium",
13998
+ rounded: "xl",
13999
+ raised: false,
14000
+ background: {
14001
+ type: "color",
14002
+ color: "surface",
14003
+ textColor: "text"
14004
+ }
14005
+ }
14006
+ },
14007
+ flushFrames: {
14008
+ "media-panel": {
14009
+ fullWidth: true,
14010
+ spacing: "none",
14011
+ rounded: "none",
14012
+ raised: false
14013
+ }
14014
+ },
14015
+ itemSurfaces: {
14016
+ none: null,
14017
+ default: {
14018
+ spacing: "medium",
14019
+ rounded: "lg",
14020
+ raised: false
14021
+ },
14022
+ flat: {
14023
+ spacing: "medium",
14024
+ rounded: "lg",
14025
+ raised: false
14026
+ },
14027
+ outlined: {
14028
+ spacing: "medium",
14029
+ rounded: "lg",
14030
+ raised: false,
14031
+ border: {
14032
+ enabled: true,
14033
+ width: "1",
14034
+ colorToken: "border"
14035
+ }
14036
+ },
14037
+ raised: {
14038
+ spacing: "medium",
14039
+ rounded: "xl",
14040
+ raised: true
14041
+ },
14042
+ inset: {
14043
+ treatment: "soft-panel",
14044
+ spacing: "comfortable",
14045
+ rounded: "xl",
14046
+ raised: false,
14047
+ border: {
14048
+ enabled: false
14049
+ },
14050
+ background: {
14051
+ type: "color",
14052
+ color: "surfaceAlt",
14053
+ textColor: "text"
14054
+ }
14055
+ },
14056
+ editorial: {
14057
+ // Boxless open column with a short rule on top; the visual treatment
14058
+ // lives in blocks-static/card-treatments.css.
14059
+ treatment: "editorial-rule",
14060
+ spacing: "none",
14061
+ rounded: "none",
14062
+ raised: false,
14063
+ border: {
14064
+ enabled: false
14065
+ }
14066
+ },
14067
+ "color-blocked": {
14068
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
14069
+ // (by position) and staggered offset live in
14070
+ // blocks-static/card-treatments.css; here we set the shared shape:
14071
+ // generous padding, large radius, no border, flat (no shadow).
14072
+ treatment: "color-blocked",
14073
+ spacing: "spacious",
14074
+ rounded: "2xl",
14075
+ raised: false,
14076
+ border: {
14077
+ enabled: false
14078
+ }
14079
+ }
14080
+ }
14081
+ });
14082
+ function uniformSectionForeground(token) {
14083
+ return {
14084
+ textColor: token,
14085
+ headingColor: token,
14086
+ linkColor: token,
14087
+ supportingColor: token
14088
+ };
14089
+ }
14090
+
14091
+ // ../theme-core/src/site-styles/curatedSiteStyles.ts
14092
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
14093
+ var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
14094
+ var curatedSiteStyleIdValues = [
14095
+ "site-style:calm-studio",
14096
+ "site-style:clear-professional",
14097
+ "site-style:warm-editorial",
14098
+ "site-style:bright-community",
14099
+ "site-style:quiet-luxury",
14100
+ "site-style:practical-services",
14101
+ "site-style:quiet-practice",
14102
+ "site-style:personal-retreat-journal",
14103
+ "site-style:tactile-workshop",
14104
+ "site-style:modern-wellness",
14105
+ "site-style:clarity-zen-blue",
14106
+ SOFT_EARTH_SITE_STYLE_ID_VALUE,
14107
+ "site-style:bold-launch",
14108
+ "site-style:south-west-twerk-school",
14109
+ "site-style:kirtan-ornate",
14110
+ "site-style:original-joy"
14111
+ ];
14112
+ var quietBudget = {
14113
+ accentDensity: "low",
14114
+ panelDensity: "medium",
14115
+ transitionMix: "quiet",
14116
+ primaryCtaLimit: 2,
14117
+ mediaDensity: "medium",
14118
+ decorativeRepetition: "low"
14119
+ };
14120
+ var balancedBudget = {
14121
+ accentDensity: "medium",
14122
+ panelDensity: "medium",
14123
+ transitionMix: "balanced",
14124
+ primaryCtaLimit: 3,
14125
+ mediaDensity: "medium",
14126
+ decorativeRepetition: "medium"
14127
+ };
14128
+ var expressiveBudget = {
14129
+ accentDensity: "high",
14130
+ panelDensity: "high",
14131
+ transitionMix: "expressive",
14132
+ primaryCtaLimit: 3,
14133
+ mediaDensity: "high",
14134
+ decorativeRepetition: "medium"
14135
+ };
14136
+ var kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
14137
+ ...defaultDesignRuntimeRules,
14138
+ defaultEyebrowTreatment: "accent",
14139
+ sectionSurfaces: {
14140
+ ...defaultDesignRuntimeRules.sectionSurfaces,
14141
+ "muted-band": {
14142
+ background: {
14143
+ type: "color",
14144
+ color: "muted"
14145
+ },
14146
+ foreground: {
14147
+ textColor: "text",
14148
+ headingColor: "primary",
14149
+ linkColor: "primary",
14150
+ supportingColor: "text"
14151
+ }
14152
+ },
14153
+ "brand-depth-band": {
14154
+ background: {
14155
+ type: "color",
14156
+ color: "primary-800"
14157
+ },
14158
+ foreground: {
14159
+ textColor: "text",
14160
+ headingColor: "primary",
14161
+ linkColor: "primary",
14162
+ supportingColor: "text"
14163
+ }
14164
+ },
14165
+ "hero-image": {
14166
+ background: {
14167
+ type: "image",
14168
+ opacity: 1,
14169
+ position: "center center"
14170
+ },
14171
+ foreground: {
14172
+ textColor: "text",
14173
+ headingColor: "primary",
14174
+ linkColor: "primary",
14175
+ supportingColor: "text"
14176
+ }
14177
+ }
14178
+ }
14179
+ });
14180
+ var expressiveUnderlineInputs = {
14181
+ base: {
14182
+ background: { type: "transparent" },
14183
+ textColorToken: "text",
14184
+ border: {
14185
+ widthClass: "border-2",
14186
+ colorToken: "border",
14187
+ style: "underline"
14188
+ },
14189
+ corners: "square",
14190
+ shadow: null,
14191
+ spacing: "compact",
14192
+ fontSize: "base"
14193
+ },
14194
+ label: {
14195
+ textColorToken: "primary",
14196
+ fontWeight: "black",
14197
+ fontSize: "xs",
14198
+ textTransform: "uppercase",
14199
+ letterSpacing: "widest",
14200
+ opacity: 1
14201
+ },
14202
+ focus: {
14203
+ ringColorToken: "secondary",
14204
+ ringWidth: "0",
14205
+ borderColorToken: "secondary"
14206
+ },
14207
+ error: {
14208
+ borderColorToken: "destructive",
14209
+ textColorToken: "destructive"
14210
+ },
14211
+ disabled: {
14212
+ backgroundColorToken: "surface",
13489
14213
  textColorToken: "text",
13490
14214
  opacity: 0.6
13491
14215
  }
13492
14216
  };
14217
+ var ornateDarkInputs = {
14218
+ base: {
14219
+ background: { type: "solid", colorToken: "surfaceAlt" },
14220
+ textColorToken: "text",
14221
+ border: {
14222
+ widthClass: "border",
14223
+ colorToken: "primary/45",
14224
+ style: "all"
14225
+ },
14226
+ corners: "square",
14227
+ shadow: null,
14228
+ spacing: "medium",
14229
+ fontSize: "base"
14230
+ },
14231
+ label: {
14232
+ textColorToken: "primary",
14233
+ fontWeight: "semibold",
14234
+ fontSize: "xs",
14235
+ textTransform: "uppercase",
14236
+ letterSpacing: "wider",
14237
+ opacity: 1
14238
+ },
14239
+ focus: {
14240
+ ringColorToken: "primary/18",
14241
+ ringWidth: "2",
14242
+ borderColorToken: "primary/70"
14243
+ },
14244
+ error: {
14245
+ borderColorToken: "destructive",
14246
+ textColorToken: "destructive"
14247
+ },
14248
+ disabled: {
14249
+ backgroundColorToken: "muted",
14250
+ textColorToken: "mutedText",
14251
+ opacity: 0.6
14252
+ }
14253
+ };
13493
14254
  function uniqueContentFrameKinds() {
13494
14255
  const kinds = [
13495
14256
  ...new Set(
@@ -13547,6 +14308,7 @@ function defineCuratedSiteStyle(input) {
13547
14308
  // clean/minimal styles default to none.
13548
14309
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
13549
14310
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
14311
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
13550
14312
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
13551
14313
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
13552
14314
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -14497,6 +15259,80 @@ var curatedSiteStyles = [
14497
15259
  paletteChoice("high-contrast-ink")
14498
15260
  ]
14499
15261
  }),
15262
+ defineCuratedSiteStyle({
15263
+ id: "site-style:kirtan-ornate",
15264
+ name: "Kirtan Ornate",
15265
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
15266
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
15267
+ 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.",
15268
+ selectionKeywordRules: [
15269
+ { kind: "word", value: "kirtan" },
15270
+ { kind: "word", value: "chanting" },
15271
+ { kind: "word", value: "ceremony" },
15272
+ { kind: "word", value: "devotional" }
15273
+ ],
15274
+ tokenRecipes: {
15275
+ palette: "brand-led",
15276
+ contrast: "strong",
15277
+ radius: "soft",
15278
+ shadow: "subtle",
15279
+ typography: "serif-editorial",
15280
+ spacing: "airy",
15281
+ motion: "subtle"
15282
+ },
15283
+ compositionBudget: expressiveBudget,
15284
+ typographyPresetChoices: [
15285
+ typographyChoice("typography-preset:kirtan-ornate"),
15286
+ typographyChoice("typography-preset:luxe-contrast"),
15287
+ typographyChoice("typography-preset:editorial-serif")
15288
+ ],
15289
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
15290
+ themeOverrides: {
15291
+ accordions: warmInsetAccordionSystem,
15292
+ cards: originalJoyCardSystem,
15293
+ testimonialQuote: serifDisplayQuote,
15294
+ bodyText: {
15295
+ intro: {
15296
+ paragraphSize: "editorial",
15297
+ headingSize: "editorial"
15298
+ }
15299
+ },
15300
+ inputs: ornateDarkInputs
15301
+ },
15302
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
15303
+ recommendedAppearancePresetIds: [
15304
+ "hero-brand-scrim-fixed-frame",
15305
+ "media-text-quiet-story",
15306
+ "events-lined-panel",
15307
+ "schedule-details-brand-depth",
15308
+ "testimonials-statement-cards",
15309
+ "contact-form-panel"
15310
+ ],
15311
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
15312
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
15313
+ recommendedHeaderStyleChoicesByLayout: {
15314
+ floating: [
15315
+ headerStyleChoice("minimal-surface"),
15316
+ headerStyleChoice("split-glass"),
15317
+ headerStyleChoice("glass")
15318
+ ]
15319
+ },
15320
+ recommendedHeaderLookIds: ["minimal-transparent"],
15321
+ recommendedFooterLookIds: [
15322
+ "site-footer-brand-two-band",
15323
+ "footer-muted-grounding"
15324
+ ],
15325
+ buttonPersonalityChoices: [
15326
+ buttonChoice("ornate-ritual"),
15327
+ buttonChoice("joy-stamp"),
15328
+ buttonChoice("ink-stamp")
15329
+ ],
15330
+ paletteVariantChoices: [
15331
+ paletteChoice("warm-dark-kirtan-gold"),
15332
+ paletteChoice("warm-dark-ember"),
15333
+ paletteChoice("brand-led-burgundy-gold")
15334
+ ]
15335
+ }),
14500
15336
  defineCuratedSiteStyle({
14501
15337
  id: "site-style:original-joy",
14502
15338
  name: "Original Joy",
@@ -14603,319 +15439,6 @@ var pageFlowPresets = [
14603
15439
  }
14604
15440
  ];
14605
15441
 
14606
- // ../theme-core/src/site-styles/designState.ts
14607
- import { z as z25 } from "zod";
14608
- var themeV2DesignStateSchemaVersion = 1;
14609
- var designResolutionPolicySchema = z25.enum(["generated", "user", "admin", "sdk"]);
14610
- var runtimeStyleFieldNameSchema = z25.enum(themeV2RuntimeStyleFieldNames);
14611
- var nonEmptyRuntimeStyleFieldNamesSchema = z25.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
14612
- fields3[0],
14613
- ...fields3.slice(1)
14614
- ]);
14615
- var heroLegibilityStrategySchema = z25.enum([
14616
- "none",
14617
- "scrim-gradient",
14618
- "solid-panel"
14619
- ]);
14620
- var heroCompositionIntentSchema = z25.enum([
14621
- "center",
14622
- "bottom-left"
14623
- ]);
14624
- var heroTypographyScaleIntentSchema = z25.enum([
14625
- "quiet",
14626
- "editorial",
14627
- "display",
14628
- "poster"
14629
- ]);
14630
- var sectionHeightIntentSchema = z25.enum([
14631
- "default",
14632
- "banner",
14633
- "hero",
14634
- "immersive"
14635
- ]);
14636
- var imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
14637
- var imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
14638
- var imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
14639
- z25.object({ kind: z25.literal("none") }).strict(),
14640
- z25.object({
14641
- kind: z25.literal("brand-scrim"),
14642
- token: z25.enum(["primary", "secondary", "accent"]),
14643
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14644
- }).strict(),
14645
- z25.object({
14646
- kind: z25.literal("brand-wash"),
14647
- token: z25.enum(["primary", "secondary", "accent"]),
14648
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14649
- }).strict(),
14650
- z25.object({
14651
- kind: z25.literal("neutral-scrim"),
14652
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14653
- }).strict(),
14654
- z25.object({
14655
- kind: z25.literal("neutral-wash"),
14656
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14657
- }).strict(),
14658
- z25.object({
14659
- kind: z25.literal("solid-panel"),
14660
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14661
- }).strict()
14662
- ]);
14663
- var testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
14664
- var tileTreatmentSchema = z25.enum(tileTreatmentValues);
14665
- var eventListTreatmentSchema = z25.enum(eventListTreatmentValues);
14666
- var eyebrowTreatmentSchema = z25.enum(eyebrowTreatmentValues);
14667
- function uniqueNonEmpty(values) {
14668
- const uniqueValues = [...new Set(values)];
14669
- const firstValue = uniqueValues[0];
14670
- if (!firstValue) {
14671
- throw new Error("Expected at least one Theme V2 design state option.");
14672
- }
14673
- return [firstValue, ...uniqueValues.slice(1)];
14674
- }
14675
- var userPanelTreatments = uniqueNonEmpty(
14676
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
14677
- );
14678
- var userFlushTreatments = uniqueNonEmpty(
14679
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
14680
- );
14681
- var userFlushBleeds = uniqueNonEmpty(
14682
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
14683
- );
14684
- var contentFrameIntentSchema = z25.discriminatedUnion("kind", [
14685
- z25.object({ kind: z25.literal("plain") }).strict(),
14686
- z25.object({
14687
- kind: z25.literal("panel"),
14688
- treatment: z25.enum(userPanelTreatments)
14689
- }).strict(),
14690
- z25.object({
14691
- kind: z25.literal("flush-panel"),
14692
- treatment: z25.enum(userFlushTreatments),
14693
- bleed: z25.enum(userFlushBleeds)
14694
- }).strict()
14695
- ]);
14696
- var blockDesignPlanSchema = z25.object({
14697
- blockId: z25.string().min(1).transform(asDesignBlockId),
14698
- blockKind: z25.string().min(1),
14699
- purpose: z25.string().min(1),
14700
- sectionSurface: z25.enum(userDesignOptionCatalog.sectionSurfaces),
14701
- contentFrame: contentFrameIntentSchema,
14702
- itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
14703
- transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
14704
- emphasis: z25.enum(userDesignOptionCatalog.emphases),
14705
- sectionHeight: sectionHeightIntentSchema.optional(),
14706
- heroLegibility: heroLegibilityStrategySchema.optional(),
14707
- heroComposition: heroCompositionIntentSchema.optional(),
14708
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
14709
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
14710
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
14711
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
14712
- tileTreatment: tileTreatmentSchema.optional(),
14713
- eventListTreatment: eventListTreatmentSchema.optional(),
14714
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
14715
- }).strict();
14716
- var styleAuthoritySchema = z25.discriminatedUnion("kind", [
14717
- z25.object({
14718
- kind: z25.literal("theme-v2"),
14719
- source: designResolutionPolicySchema,
14720
- siteStyleId: z25.string().min(1).transform(asSiteStyleId),
14721
- templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
14722
- templateVersion: z25.number().int().nonnegative(),
14723
- resolverVersion: z25.number().int().nonnegative()
14724
- }).strict(),
14725
- z25.object({
14726
- kind: z25.literal("legacy-raw"),
14727
- reason: z25.enum(["pre-theme-v2", "manual-runtime-fields"])
14728
- }).strict(),
14729
- z25.object({
14730
- kind: z25.literal("advanced-detached"),
14731
- reason: z25.literal("detached-custom-runtime-fields")
14732
- }).strict()
14733
- ]);
14734
- var blockRuntimeStyleAuthoritySchema = z25.object({
14735
- unit: z25.literal("block-runtime-fields"),
14736
- blockId: z25.string().min(1).transform(asDesignBlockId),
14737
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
14738
- authority: styleAuthoritySchema
14739
- }).strict();
14740
- var persistedPageDesignStateV1Schema = z25.object({
14741
- schemaVersion: z25.literal(themeV2DesignStateSchemaVersion),
14742
- siteStyleId: z25.string().min(1).transform(asSiteStyleId),
14743
- templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
14744
- templateVersion: z25.number().int().nonnegative(),
14745
- resolverVersion: z25.number().int().nonnegative(),
14746
- rhythmPresetId: z25.string().min(1),
14747
- blocks: z25.array(blockDesignPlanSchema),
14748
- styleAuthorities: z25.array(blockRuntimeStyleAuthoritySchema)
14749
- }).strict();
14750
-
14751
- // ../theme-core/src/site-styles/runtimeCompiler.ts
14752
- function defineDesignRuntimeRules(rules) {
14753
- return rules;
14754
- }
14755
- function defineComponentRuntimeRules(rules) {
14756
- return rules;
14757
- }
14758
- var defaultDesignRuntimeRules = defineDesignRuntimeRules({
14759
- sectionSurfaces: {
14760
- base: {},
14761
- "muted-band": {
14762
- background: {
14763
- type: "color",
14764
- color: "muted"
14765
- }
14766
- },
14767
- "accent-band": {
14768
- background: {
14769
- type: "color",
14770
- color: "primary"
14771
- }
14772
- },
14773
- "brand-depth-band": {
14774
- background: {
14775
- type: "color",
14776
- color: "primary-800"
14777
- }
14778
- },
14779
- "hero-image": {
14780
- background: {
14781
- type: "image",
14782
- opacity: 1,
14783
- position: "center center",
14784
- ...uniformSectionForeground("text")
14785
- }
14786
- }
14787
- },
14788
- heroLegibility: {
14789
- "scrim-gradient": {
14790
- type: "gradient",
14791
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
14792
- opacity: 1
14793
- },
14794
- "solid-panel": {
14795
- type: "color",
14796
- color: "surface",
14797
- opacity: 0.88
14798
- }
14799
- },
14800
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
14801
- });
14802
- var defaultComponentRuntimeRules = defineComponentRuntimeRules({
14803
- panelFrames: {
14804
- inset: {
14805
- spacing: "comfortable",
14806
- rounded: "xl",
14807
- raised: false,
14808
- background: {
14809
- type: "color",
14810
- color: "surfaceAlt",
14811
- textColor: "text"
14812
- }
14813
- },
14814
- raised: {
14815
- spacing: "comfortable",
14816
- rounded: "xl",
14817
- raised: true,
14818
- background: {
14819
- type: "color",
14820
- color: "surfaceAlt",
14821
- textColor: "text"
14822
- }
14823
- },
14824
- editorial: {
14825
- spacing: "medium",
14826
- rounded: "xl",
14827
- raised: false,
14828
- background: {
14829
- type: "color",
14830
- color: "surface",
14831
- textColor: "text"
14832
- }
14833
- }
14834
- },
14835
- flushFrames: {
14836
- "media-panel": {
14837
- fullWidth: true,
14838
- spacing: "none",
14839
- rounded: "none",
14840
- raised: false
14841
- }
14842
- },
14843
- itemSurfaces: {
14844
- none: null,
14845
- default: {
14846
- spacing: "medium",
14847
- rounded: "lg",
14848
- raised: false
14849
- },
14850
- flat: {
14851
- spacing: "medium",
14852
- rounded: "lg",
14853
- raised: false
14854
- },
14855
- outlined: {
14856
- spacing: "medium",
14857
- rounded: "lg",
14858
- raised: false,
14859
- border: {
14860
- enabled: true,
14861
- width: "1",
14862
- colorToken: "border"
14863
- }
14864
- },
14865
- raised: {
14866
- spacing: "medium",
14867
- rounded: "xl",
14868
- raised: true
14869
- },
14870
- inset: {
14871
- treatment: "soft-panel",
14872
- spacing: "comfortable",
14873
- rounded: "xl",
14874
- raised: false,
14875
- border: {
14876
- enabled: false
14877
- },
14878
- background: {
14879
- type: "color",
14880
- color: "surfaceAlt",
14881
- textColor: "text"
14882
- }
14883
- },
14884
- editorial: {
14885
- // Boxless open column with a short rule on top; the visual treatment
14886
- // lives in blocks-static/card-treatments.css.
14887
- treatment: "editorial-rule",
14888
- spacing: "none",
14889
- rounded: "none",
14890
- raised: false,
14891
- border: {
14892
- enabled: false
14893
- }
14894
- },
14895
- "color-blocked": {
14896
- // Bold, flat colour-blocked cards. The per-card background colour cycle
14897
- // (by position) and staggered offset live in
14898
- // blocks-static/card-treatments.css; here we set the shared shape:
14899
- // generous padding, large radius, no border, flat (no shadow).
14900
- treatment: "color-blocked",
14901
- spacing: "spacious",
14902
- rounded: "2xl",
14903
- raised: false,
14904
- border: {
14905
- enabled: false
14906
- }
14907
- }
14908
- }
14909
- });
14910
- function uniformSectionForeground(token) {
14911
- return {
14912
- textColor: token,
14913
- headingColor: token,
14914
- linkColor: token,
14915
- supportingColor: token
14916
- };
14917
- }
14918
-
14919
15442
  // ../theme-core/src/site-styles/generatedSchemas.ts
14920
15443
  import { z as z26 } from "zod";
14921
15444
  function uniqueNonEmpty2(values) {
@@ -15727,6 +16250,31 @@ function cardStylesField(options = {}) {
15727
16250
  return createBoxStylesFieldWithDepth("card", options);
15728
16251
  }
15729
16252
 
16253
+ // ../blocks/src/system/fields/imageShape.ts
16254
+ var standardImageShapeOptions = [
16255
+ { value: "default", label: "Default" },
16256
+ { value: "square", label: "Square corners" },
16257
+ { value: "rounded", label: "Rounded corners" },
16258
+ { value: "circle", label: "Circle" },
16259
+ { value: "arch", label: "Arch" }
16260
+ ];
16261
+ function createImageShapeField(options = {}) {
16262
+ return {
16263
+ id: options.id ?? "imageShape",
16264
+ type: "select",
16265
+ label: options.label ?? "Image shape",
16266
+ ...options.description ? { description: options.description } : {},
16267
+ required: false,
16268
+ defaultValue: options.defaultValue ?? "default",
16269
+ multiple: false,
16270
+ options: [...standardImageShapeOptions],
16271
+ ui: {
16272
+ intent: options.uiIntent ?? "display",
16273
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
16274
+ }
16275
+ };
16276
+ }
16277
+
15730
16278
  // ../blocks/src/utils/env.ts
15731
16279
  function isDevEnvironment() {
15732
16280
  try {
@@ -16541,7 +17089,7 @@ function buildFooterNavAll(common) {
16541
17089
  return stack(
16542
17090
  { className: common.className, gap: common.gap, align: "stretch" },
16543
17091
  [item],
16544
- when(collectionPath)
17092
+ whenCollectionHasItems(collectionPath)
16545
17093
  );
16546
17094
  }
16547
17095
  function buildFooterNavLinksOnly(common) {
@@ -16574,7 +17122,7 @@ function buildFooterNavLinksOnly(common) {
16574
17122
  return stack(
16575
17123
  { className: common.className, gap: common.gap, align: "stretch" },
16576
17124
  [item],
16577
- when(collectionPath)
17125
+ whenCollectionHasItems(collectionPath)
16578
17126
  );
16579
17127
  }
16580
17128
  function buildFooterNavFlatten(common) {
@@ -16623,9 +17171,20 @@ function buildFooterNavFlatten(common) {
16623
17171
  return stack(
16624
17172
  { className: common.className, gap: common.gap, align: "stretch" },
16625
17173
  [item],
16626
- when(collectionPath)
17174
+ whenCollectionHasItems(collectionPath)
16627
17175
  );
16628
17176
  }
17177
+ var whenCollectionHasItems = (collectionPath) => (node) => ({
17178
+ ...node,
17179
+ $when: {
17180
+ when: {
17181
+ from: collectionPath,
17182
+ transforms: [{ id: "array.length" }]
17183
+ },
17184
+ equals: 0,
17185
+ not: true
17186
+ }
17187
+ });
16629
17188
  function footerNav(opts) {
16630
17189
  const mode = opts?.mode ?? "all";
16631
17190
  const collectionPath = opts?.collectionPath ?? "footerMenu.items";
@@ -19340,8 +19899,23 @@ function fragmentsToRepeaterField(id, label, fragments, options = {}) {
19340
19899
  var heroLayoutControlsFragment = defineFragment({
19341
19900
  id: "heroLayoutControls",
19342
19901
  title: "Hero Layout",
19343
- description: "Alignment and content width controls for hero layouts.",
19902
+ description: "Title scale, alignment, and content width controls for hero layouts.",
19344
19903
  fields: [
19904
+ {
19905
+ id: "titleSize",
19906
+ type: "select",
19907
+ label: "Title size",
19908
+ description: "Adjust the visual scale of the hero title.",
19909
+ required: false,
19910
+ ui: { intent: "display" },
19911
+ options: [
19912
+ { value: "auto", label: "Auto" },
19913
+ { value: "quiet", label: "Normal" },
19914
+ { value: "editorial", label: "Large" },
19915
+ { value: "display", label: "Huge" },
19916
+ { value: "poster", label: "Poster" }
19917
+ ]
19918
+ },
19345
19919
  {
19346
19920
  id: "contentAlignment",
19347
19921
  type: "select",
@@ -20136,7 +20710,18 @@ function heroSplitImagePane() {
20136
20710
  return stack(
20137
20711
  {
20138
20712
  gap: "none",
20139
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
20713
+ className: {
20714
+ $bind: {
20715
+ from: "content.imageShape",
20716
+ transforms: [
20717
+ {
20718
+ id: "ui.imageShapeClassName",
20719
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
20720
+ }
20721
+ ],
20722
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
20723
+ }
20724
+ },
20140
20725
  style: {
20141
20726
  minHeight: "clamp(18rem, 36vw, 34rem)"
20142
20727
  }
@@ -20254,6 +20839,12 @@ var heroConfig = {
20254
20839
  label: "Content card",
20255
20840
  renderInHeader: true,
20256
20841
  intent: "style"
20842
+ }),
20843
+ createImageShapeField({
20844
+ id: "imageShape",
20845
+ label: "Image shape",
20846
+ defaultValue: "default",
20847
+ uiIntent: "display"
20257
20848
  })
20258
20849
  ],
20259
20850
  layout: classicLayout,
@@ -20268,6 +20859,15 @@ var heroConfig = {
20268
20859
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
20269
20860
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
20270
20861
  icon: "Sparkles",
20862
+ previewCustomize: {
20863
+ quickFieldPriority: [
20864
+ "titleSize",
20865
+ "contentAlignment",
20866
+ "contentMaxWidth",
20867
+ "verticalAlignment",
20868
+ "imageShape"
20869
+ ]
20870
+ },
20271
20871
  styleTokens: {
20272
20872
  typography: "display",
20273
20873
  spacing: "xl"
@@ -20284,7 +20884,8 @@ var standardAspectRatioOptions = [
20284
20884
  { value: "16/9", label: "16:9 (Landscape)" },
20285
20885
  { value: "4/3", label: "4:3 (Standard)" },
20286
20886
  { value: "1/1", label: "1:1 (Square)" },
20287
- { value: "3/4", label: "3:4 (Portrait)" }
20887
+ { value: "3/4", label: "3:4 (Portrait)" },
20888
+ { value: "9/16", label: "9:16 (Tall portrait)" }
20288
20889
  ];
20289
20890
  function createAspectRatioField(options = {}) {
20290
20891
  return {
@@ -21526,6 +22127,258 @@ var formBlockDefinition = {
21526
22127
  runtime: formBlockRuntime
21527
22128
  };
21528
22129
 
22130
+ // ../blocks/src/system/blocks/contact-newsletter.ts
22131
+ var contactNewsletterLayout = styledSection({
22132
+ children: sectionContainer([
22133
+ el(
22134
+ "div",
22135
+ { className: "contact-newsletter-grid" },
22136
+ [
22137
+ el(
22138
+ "div",
22139
+ { className: "contact-newsletter-column contact-newsletter-contact" },
22140
+ [
22141
+ el(
22142
+ "div",
22143
+ { className: "contact-newsletter-copy" },
22144
+ [
22145
+ text(
22146
+ {
22147
+ as: "h2",
22148
+ className: "form-copy-title"
22149
+ },
22150
+ when("contactTitle"),
22151
+ bind("contactTitle")
22152
+ ),
22153
+ richText(
22154
+ {
22155
+ className: "form-copy-intro rb-prose rb-max-w-none"
22156
+ },
22157
+ when("contactIntro"),
22158
+ bind("contactIntro")
22159
+ )
22160
+ ]
22161
+ ),
22162
+ el(
22163
+ "form",
22164
+ withApiBindings({
22165
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
22166
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
22167
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
22168
+ }),
22169
+ [],
22170
+ bind("data.form")
22171
+ )
22172
+ ]
22173
+ ),
22174
+ el(
22175
+ "div",
22176
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
22177
+ [
22178
+ el(
22179
+ "div",
22180
+ { className: "contact-newsletter-copy" },
22181
+ [
22182
+ text(
22183
+ {
22184
+ as: "h2",
22185
+ className: "newsletter-copy-title"
22186
+ },
22187
+ when("newsletterTitle"),
22188
+ bind("newsletterTitle")
22189
+ ),
22190
+ richText(
22191
+ {
22192
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
22193
+ },
22194
+ when("newsletterSubtitle"),
22195
+ bind("newsletterSubtitle")
22196
+ )
22197
+ ]
22198
+ ),
22199
+ el(
22200
+ "newsletter-form",
22201
+ withApiBindings({
22202
+ listId: { $bind: { from: "listId" } },
22203
+ preset: { $bind: { from: "preset" } },
22204
+ includePhone: { $bind: { from: "includePhone" } },
22205
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
22206
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
22207
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
22208
+ tags: { $bind: { from: "newsletterTags" } },
22209
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
22210
+ }),
22211
+ []
22212
+ )
22213
+ ]
22214
+ )
22215
+ ]
22216
+ )
22217
+ ], {
22218
+ className: "contact-newsletter-container"
22219
+ }),
22220
+ baseClass: "",
22221
+ spacing: "medium",
22222
+ background: "surface"
22223
+ });
22224
+ var contactNewsletterManifest = createBlockManifest({
22225
+ id: "block.contact-newsletter",
22226
+ title: "Contact + Newsletter",
22227
+ titleSource: "contactTitle",
22228
+ description: "Two-column newsletter signup and contact form section.",
22229
+ category: "interactive",
22230
+ layout: contactNewsletterLayout,
22231
+ defaultVariant: "default",
22232
+ variants: {
22233
+ default: contactNewsletterLayout
22234
+ },
22235
+ variantOptions: {
22236
+ default: {
22237
+ label: "Two column",
22238
+ description: "Newsletter and contact form side by side.",
22239
+ icon: "Columns2"
22240
+ }
22241
+ },
22242
+ additionalFields: [
22243
+ {
22244
+ id: "newsletterTitle",
22245
+ type: "text",
22246
+ label: "Newsletter title",
22247
+ defaultValue: "Stay connected"
22248
+ },
22249
+ {
22250
+ id: "newsletterSubtitle",
22251
+ type: "richText",
22252
+ label: "Newsletter intro"
22253
+ },
22254
+ {
22255
+ id: "listId",
22256
+ type: "reference",
22257
+ label: "Newsletter list",
22258
+ description: "Select the list new subscribers should be added to.",
22259
+ required: true,
22260
+ referenceKind: "newsletterList",
22261
+ allowManualEntry: false,
22262
+ ui: { intent: "behavior" }
22263
+ },
22264
+ {
22265
+ id: "preset",
22266
+ type: "select",
22267
+ label: "Newsletter fields",
22268
+ defaultValue: "emailOnly",
22269
+ ui: { intent: "display" },
22270
+ options: [
22271
+ { value: "emailOnly", label: "Email only" },
22272
+ { value: "emailName", label: "Email + Name" },
22273
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
22274
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
22275
+ ]
22276
+ },
22277
+ {
22278
+ id: "includePhone",
22279
+ type: "boolean",
22280
+ label: "Include phone field",
22281
+ defaultValue: false,
22282
+ ui: { intent: "display" }
22283
+ },
22284
+ {
22285
+ id: "newsletterButtonLabel",
22286
+ type: "text",
22287
+ label: "Newsletter button label",
22288
+ defaultValue: "Subscribe",
22289
+ ui: { intent: "display" }
22290
+ },
22291
+ {
22292
+ id: "newsletterSuccessMessage",
22293
+ type: "text",
22294
+ label: "Newsletter success message",
22295
+ defaultValue: "Thanks for subscribing!",
22296
+ ui: { intent: "behavior" }
22297
+ },
22298
+ {
22299
+ id: "newsletterPrivacyNote",
22300
+ type: "text",
22301
+ label: "Privacy note",
22302
+ ui: { intent: "display" }
22303
+ },
22304
+ {
22305
+ id: "newsletterTags",
22306
+ type: "text",
22307
+ label: "Newsletter tags",
22308
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
22309
+ ui: { intent: "behavior" }
22310
+ },
22311
+ {
22312
+ id: "contactTitle",
22313
+ type: "text",
22314
+ label: "Contact title",
22315
+ defaultValue: "Get in touch"
22316
+ },
22317
+ {
22318
+ id: "contactIntro",
22319
+ type: "richText",
22320
+ label: "Contact intro"
22321
+ },
22322
+ {
22323
+ id: "formSlug",
22324
+ type: "reference",
22325
+ label: "Contact form",
22326
+ description: "Pick a saved form to render.",
22327
+ required: true,
22328
+ referenceKind: "form",
22329
+ allowManualEntry: false,
22330
+ ui: { intent: "behavior" }
22331
+ },
22332
+ {
22333
+ id: "contactSubmitLabel",
22334
+ type: "text",
22335
+ label: "Contact button label",
22336
+ defaultValue: "Send message",
22337
+ ui: { intent: "display" }
22338
+ },
22339
+ {
22340
+ id: "contactSuccessMessage",
22341
+ type: "text",
22342
+ label: "Contact success message",
22343
+ defaultValue: "Thanks - we received your message.",
22344
+ ui: { intent: "behavior" }
22345
+ }
22346
+ ],
22347
+ styleTokens: {
22348
+ background: "surface",
22349
+ typography: "body",
22350
+ spacing: "md"
22351
+ },
22352
+ behaviours: {
22353
+ supportsThemeSwitching: true,
22354
+ inlineEditing: true,
22355
+ animation: false,
22356
+ paletteHidden: false
22357
+ },
22358
+ tags: [
22359
+ "contact",
22360
+ "newsletter",
22361
+ "signup",
22362
+ "email",
22363
+ "form",
22364
+ "lead-capture"
22365
+ ],
22366
+ icon: "MailPlus"
22367
+ });
22368
+ var contactNewsletterBlockDefinition = {
22369
+ manifest: contactNewsletterManifest,
22370
+ dataSchemas: { form: formDataSchema.optional() },
22371
+ dataLoaders: {
22372
+ form: {
22373
+ endpoint: "getPublicFormById",
22374
+ params: {
22375
+ formSlug: { $bind: { from: "formSlug" } }
22376
+ },
22377
+ mode: "server"
22378
+ }
22379
+ }
22380
+ };
22381
+
21529
22382
  // ../blocks/src/system/blocks/faq.ts
21530
22383
  function fragmentLayoutNode2(layout) {
21531
22384
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -21754,6 +22607,7 @@ var joinClasses3 = (parts) => parts.filter(
21754
22607
  ).join(" ").replace(/\s+/g, " ").trim();
21755
22608
  var eyebrowTreatmentClassMap = {
21756
22609
  plain: "",
22610
+ accent: "rb-eyebrow-treatment-accent",
21757
22611
  pill: "rb-eyebrow-treatment-pill",
21758
22612
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
21759
22613
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -21780,6 +22634,13 @@ var imageGalleryCornerClassMap = {
21780
22634
  "2xl": "rb-rounded-2xl",
21781
22635
  "3xl": "rb-rounded-3xl"
21782
22636
  };
22637
+ var imageShapeClassMap = {
22638
+ default: "",
22639
+ square: "rb-media-shape-square",
22640
+ rounded: "rb-media-shape-rounded",
22641
+ circle: "rb-media-shape-circle",
22642
+ arch: "rb-media-shape-arch"
22643
+ };
21783
22644
  var parseRatio = (raw) => {
21784
22645
  if (typeof raw !== "string") return null;
21785
22646
  const value = raw.trim();
@@ -21924,6 +22785,10 @@ function resolveHeroContentMaxWidth(content) {
21924
22785
  return "default";
21925
22786
  }
21926
22787
  function resolveHeroTypographyScale(content) {
22788
+ const titleSize = readString(content, "titleSize");
22789
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
22790
+ return titleSize;
22791
+ }
21927
22792
  const raw = readHeroLayoutString(
21928
22793
  content,
21929
22794
  "typographyScale",
@@ -22165,6 +23030,16 @@ var uiTransforms = [
22165
23030
  heroGridClassFromVerticalAlignmentTransform,
22166
23031
  imageFragmentClassTransform,
22167
23032
  imageFragmentSizeTransform,
23033
+ {
23034
+ id: "ui.imageShapeClassName",
23035
+ kind: "string",
23036
+ summary: "Apply a constrained media shape class",
23037
+ run: (value, options) => {
23038
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
23039
+ const shape = typeof value === "string" ? value.trim() : "default";
23040
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
23041
+ }
23042
+ },
22168
23043
  conditionalClassTransform,
22169
23044
  twoColumnContainerClassTransform,
22170
23045
  twoColumnFlexBasisTransform,
@@ -23558,6 +24433,21 @@ var siteHeaderManifest = createBlockManifest({
23558
24433
  id: "block.site-header",
23559
24434
  title: "Site Header",
23560
24435
  category: "layout",
24436
+ additionalFields: [
24437
+ {
24438
+ id: "mode",
24439
+ type: "select",
24440
+ label: "Header display",
24441
+ required: false,
24442
+ multiple: false,
24443
+ defaultValue: "default",
24444
+ options: [
24445
+ { value: "default", label: "Show header" },
24446
+ { value: "hidden", label: "Hide header" }
24447
+ ],
24448
+ ui: { intent: "display" }
24449
+ }
24450
+ ],
23561
24451
  // Skip section styles - this block uses theme-based styling
23562
24452
  skipSectionStyles: true,
23563
24453
  // Block manages its own wrapper - enables sticky positioning
@@ -24970,6 +25860,9 @@ var mediaTextManifest = createBlockManifest({
24970
25860
  category: "layout",
24971
25861
  includeContainerStyles: true,
24972
25862
  titleSource: "title",
25863
+ previewCustomize: {
25864
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
25865
+ },
24973
25866
  additionalFields: [
24974
25867
  {
24975
25868
  id: "images",
@@ -25008,7 +25901,7 @@ var mediaTextManifest = createBlockManifest({
25008
25901
  {
25009
25902
  id: "titleAlignment",
25010
25903
  type: "select",
25011
- label: "Title alignment",
25904
+ label: "Content alignment",
25012
25905
  required: false,
25013
25906
  defaultValue: "left",
25014
25907
  multiple: false,
@@ -25066,7 +25959,18 @@ var mediaTextManifest = createBlockManifest({
25066
25959
  transition: "slide"
25067
25960
  },
25068
25961
  ui: { intent: "behavior" }
25069
- }),
25962
+ }).map((field) => ({
25963
+ ...field,
25964
+ ui: {
25965
+ ...field.ui ?? {},
25966
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
25967
+ allOf: [
25968
+ { field: "images", minItems: 2 },
25969
+ { field: "carouselAutoplay", equals: true }
25970
+ ]
25971
+ } : { field: "images", minItems: 2 }
25972
+ }
25973
+ })),
25070
25974
  createAspectRatioField({
25071
25975
  id: "aspectRatio",
25072
25976
  label: "Media aspect ratio",
@@ -25074,6 +25978,12 @@ var mediaTextManifest = createBlockManifest({
25074
25978
  defaultValue: "auto",
25075
25979
  visibleWhen: { field: "images", notEquals: null }
25076
25980
  }),
25981
+ createImageShapeField({
25982
+ id: "imageShape",
25983
+ label: "Media shape",
25984
+ defaultValue: "default",
25985
+ visibleWhen: { field: "images", notEquals: null }
25986
+ }),
25077
25987
  {
25078
25988
  id: "text",
25079
25989
  type: "richText",
@@ -25107,6 +26017,30 @@ var mediaTextManifest = createBlockManifest({
25107
26017
  ...options?.not ? { not: true } : {}
25108
26018
  }
25109
26019
  });
26020
+ const bodyClassNameFromAlignment = {
26021
+ $bind: {
26022
+ from: "content.titleAlignment",
26023
+ transforms: [
26024
+ {
26025
+ id: "ui.bodyClassFromAlignment",
26026
+ options: { base: "rb-prose rb-max-w-none" }
26027
+ }
26028
+ ],
26029
+ fallback: "rb-prose rb-max-w-none"
26030
+ }
26031
+ };
26032
+ const titleClassNameFromAlignment = {
26033
+ $bind: {
26034
+ from: "content.titleAlignment",
26035
+ transforms: [
26036
+ {
26037
+ id: "ui.headingClassFromAlignment",
26038
+ options: { base: "" }
26039
+ }
26040
+ ],
26041
+ fallback: ""
26042
+ }
26043
+ };
25110
26044
  const defaultTextColumn = el("div", {}, [
25111
26045
  styledCard(
25112
26046
  [
@@ -25131,8 +26065,55 @@ var mediaTextManifest = createBlockManifest({
25131
26065
  bind("content.text")
25132
26066
  )
25133
26067
  ]);
26068
+ const bioTextColumn = el(
26069
+ "div",
26070
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
26071
+ [
26072
+ text(
26073
+ {
26074
+ as: "h2",
26075
+ className: titleClassNameFromAlignment
26076
+ },
26077
+ when("content.title"),
26078
+ bind("content.title")
26079
+ ),
26080
+ styledCard(
26081
+ [
26082
+ richText(
26083
+ {
26084
+ className: bodyClassNameFromAlignment
26085
+ },
26086
+ bind("content.text")
26087
+ )
26088
+ ],
26089
+ {
26090
+ stylesFrom: "content._textCardStyles",
26091
+ backgroundFrom: "content._textCardStyles.background"
26092
+ },
26093
+ when("content.wrapTextInCard")
26094
+ ),
26095
+ richText(
26096
+ {
26097
+ className: bodyClassNameFromAlignment
26098
+ },
26099
+ when("content.wrapTextInCard", { not: true }),
26100
+ bind("content.text")
26101
+ )
26102
+ ]
26103
+ );
25134
26104
  const defaultImageCommonProps = {
25135
- className: "rb-w-full rb-h-auto rb-object-cover",
26105
+ className: {
26106
+ $bind: {
26107
+ from: "content.imageShape",
26108
+ transforms: [
26109
+ {
26110
+ id: "ui.imageShapeClassName",
26111
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
26112
+ }
26113
+ ],
26114
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
26115
+ }
26116
+ },
25136
26117
  style: {
25137
26118
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
25138
26119
  }
@@ -25173,6 +26154,27 @@ var mediaTextManifest = createBlockManifest({
25173
26154
  ],
25174
26155
  whenImagesLength(0, { not: true })
25175
26156
  );
26157
+ const bioImagesLayout = el(
26158
+ "div",
26159
+ {},
26160
+ [
26161
+ responsiveTwoColumn({
26162
+ image: el("div", {}, [
26163
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
26164
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
26165
+ ]),
26166
+ text: bioTextColumn,
26167
+ ratioFrom: "content.ratio",
26168
+ imagePositionFrom: "content.imagePosition",
26169
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
26170
+ gapFrom: "content.gap",
26171
+ gapFallback: "comfortable",
26172
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
26173
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
26174
+ })
26175
+ ],
26176
+ whenImagesLength(0, { not: true })
26177
+ );
25176
26178
  const defaultTextOnlyLayout = el(
25177
26179
  "div",
25178
26180
  {},
@@ -25202,7 +26204,45 @@ var mediaTextManifest = createBlockManifest({
25202
26204
  ],
25203
26205
  whenImagesLength(0)
25204
26206
  );
26207
+ const bioTextOnlyLayout = el(
26208
+ "div",
26209
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
26210
+ [
26211
+ text(
26212
+ {
26213
+ as: "h2",
26214
+ className: titleClassNameFromAlignment
26215
+ },
26216
+ when("content.title"),
26217
+ bind("content.title")
26218
+ ),
26219
+ styledCard(
26220
+ [
26221
+ richText(
26222
+ {
26223
+ className: bodyClassNameFromAlignment
26224
+ },
26225
+ bind("content.text")
26226
+ )
26227
+ ],
26228
+ {
26229
+ stylesFrom: "content._textCardStyles",
26230
+ backgroundFrom: "content._textCardStyles.background"
26231
+ },
26232
+ when("content.wrapTextInCard")
26233
+ ),
26234
+ richText(
26235
+ {
26236
+ className: bodyClassNameFromAlignment
26237
+ },
26238
+ when("content.wrapTextInCard", { not: true }),
26239
+ bind("content.text")
26240
+ )
26241
+ ],
26242
+ whenImagesLength(0)
26243
+ );
25205
26244
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
26245
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
25206
26246
  const defaultLayout2 = styledSection({
25207
26247
  children: styledContainer({
25208
26248
  rootType: "stack",
@@ -25211,18 +26251,7 @@ var mediaTextManifest = createBlockManifest({
25211
26251
  text(
25212
26252
  {
25213
26253
  as: "h2",
25214
- className: {
25215
- $bind: {
25216
- from: "content.titleAlignment",
25217
- transforms: [
25218
- {
25219
- id: "ui.headingClassFromAlignment",
25220
- options: { base: "" }
25221
- }
25222
- ],
25223
- fallback: ""
25224
- }
25225
- }
26254
+ className: titleClassNameFromAlignment
25226
26255
  },
25227
26256
  when("content.title"),
25228
26257
  bind("content.title")
@@ -25234,14 +26263,28 @@ var mediaTextManifest = createBlockManifest({
25234
26263
  baseClass: "",
25235
26264
  spacing: "medium"
25236
26265
  });
26266
+ const bioLayout = styledSection({
26267
+ children: styledContainer({
26268
+ rootType: "stack",
26269
+ rootProps: { gap: "lg" },
26270
+ children: [bioInner]
26271
+ }),
26272
+ baseClass: "",
26273
+ spacing: "medium"
26274
+ });
25237
26275
  return {
25238
26276
  layout: defaultLayout2,
25239
26277
  variants: {
25240
- default: defaultLayout2
26278
+ default: defaultLayout2,
26279
+ bio: bioLayout
25241
26280
  },
25242
26281
  defaultVariant: "default",
25243
26282
  variantOptions: {
25244
- default: { label: "Default" }
26283
+ default: { label: "Default" },
26284
+ bio: {
26285
+ label: "Bio",
26286
+ description: "Vertically centered title and copy beside media."
26287
+ }
25245
26288
  }
25246
26289
  };
25247
26290
  })(),
@@ -25947,10 +26990,8 @@ var occurrenceContextSchema = z44.object({
25947
26990
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
25948
26991
  import { z as z46 } from "zod";
25949
26992
 
25950
- // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
25951
- import { z as z45 } from "zod";
25952
-
25953
26993
  // ../blocks/src/system/constants/events.ts
26994
+ var EVENT_CONTENT_TYPE_SLUGS = ["event", "events"];
25954
26995
  var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
25955
26996
  var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
25956
26997
  var eventCalendarListLayoutOptions = [
@@ -25964,8 +27005,133 @@ function isEventCalendarDisplayMode(value) {
25964
27005
  function isEventCalendarListLayout(value) {
25965
27006
  return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
25966
27007
  }
27008
+ function isEventContentType(slug) {
27009
+ if (!slug) return false;
27010
+ return EVENT_CONTENT_TYPE_SLUGS.includes(slug);
27011
+ }
27012
+
27013
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
27014
+ var DEFAULT_EVENT_CURRENCY = "USD";
27015
+ function resolveRuntimeEventPricing(event) {
27016
+ if (isPublicEventPricing(event.pricing)) {
27017
+ return event.pricing;
27018
+ }
27019
+ const legacy = event;
27020
+ const currency = readCurrency(legacy.currency);
27021
+ if (event.requiresRegistration === false) {
27022
+ return {
27023
+ kind: "drop_in",
27024
+ currency,
27025
+ display: { kind: "free", currency }
27026
+ };
27027
+ }
27028
+ if (legacy.pricingMode === "ticket_types") {
27029
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
27030
+ return {
27031
+ kind: "ticket_types",
27032
+ currency,
27033
+ ticketTypes,
27034
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
27035
+ };
27036
+ }
27037
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
27038
+ if (legacy.pricingType === "paid" && amount > 0) {
27039
+ return {
27040
+ kind: "single_paid",
27041
+ amount,
27042
+ currency,
27043
+ display: { kind: "exact", amount, currency }
27044
+ };
27045
+ }
27046
+ return {
27047
+ kind: "free_registration",
27048
+ currency,
27049
+ display: { kind: "free", currency }
27050
+ };
27051
+ }
27052
+ function readCurrency(value) {
27053
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
27054
+ }
27055
+ function isRecord5(value) {
27056
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27057
+ }
27058
+ function isPublicEventPricing(value) {
27059
+ if (!isRecord5(value) || typeof value.kind !== "string") return false;
27060
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
27061
+ }
27062
+ function isPublicEventTicketType(value) {
27063
+ return isRecord5(value) && typeof value.id === "string";
27064
+ }
27065
+ function readTicketTypePriceDisplay(value, currency) {
27066
+ const display = readLegacyPriceDisplay(value, currency);
27067
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
27068
+ }
27069
+ function readLegacyPriceDisplay(value, currency) {
27070
+ if (!isRecord5(value) || typeof value.kind !== "string") {
27071
+ return { kind: "unavailable", currency };
27072
+ }
27073
+ const displayCurrency = readCurrency(value.currency);
27074
+ switch (value.kind) {
27075
+ case "free":
27076
+ return { kind: "free", currency: displayCurrency };
27077
+ case "exact":
27078
+ return readAmount(value.amount) !== null ? {
27079
+ kind: "exact",
27080
+ amount: readAmount(value.amount) ?? 0,
27081
+ currency: displayCurrency
27082
+ } : { kind: "unavailable", currency };
27083
+ case "from":
27084
+ return readAmount(value.amount) !== null ? {
27085
+ kind: "from",
27086
+ amount: readAmount(value.amount) ?? 0,
27087
+ currency: displayCurrency
27088
+ } : { kind: "unavailable", currency };
27089
+ case "mixed":
27090
+ return readAmount(value.paidFromAmount) !== null ? {
27091
+ kind: "mixed",
27092
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
27093
+ currency: displayCurrency
27094
+ } : { kind: "unavailable", currency };
27095
+ case "unavailable":
27096
+ return { kind: "unavailable", currency: displayCurrency };
27097
+ case "course":
27098
+ return isRecord5(value.display) ? {
27099
+ kind: "course",
27100
+ display: readCoursePriceDisplay(value.display, displayCurrency)
27101
+ } : {
27102
+ kind: "course",
27103
+ display: { kind: "unavailable", currency: displayCurrency }
27104
+ };
27105
+ default:
27106
+ return { kind: "unavailable", currency };
27107
+ }
27108
+ }
27109
+ function readCoursePriceDisplay(value, currency) {
27110
+ switch (value.kind) {
27111
+ case "free":
27112
+ return { kind: "free", currency: readCurrency(value.currency) };
27113
+ case "exact":
27114
+ return readAmount(value.amount) !== null ? {
27115
+ kind: "exact",
27116
+ amount: readAmount(value.amount) ?? 0,
27117
+ currency: readCurrency(value.currency)
27118
+ } : { kind: "unavailable", currency };
27119
+ case "from":
27120
+ return readAmount(value.amount) !== null ? {
27121
+ kind: "from",
27122
+ amount: readAmount(value.amount) ?? 0,
27123
+ currency: readCurrency(value.currency)
27124
+ } : { kind: "unavailable", currency };
27125
+ default:
27126
+ return { kind: "unavailable", currency };
27127
+ }
27128
+ }
27129
+ function readAmount(value) {
27130
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
27131
+ }
25967
27132
 
25968
27133
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
27134
+ import { z as z45 } from "zod";
25969
27135
  var previewStageSchema = z45.enum(["preview", "published"]);
25970
27136
  var registrationButtonVariantSchema = z45.enum(["primary", "secondary", "outline"]);
25971
27137
  var eventButtonVariantSchema = z45.enum(["primary", "secondary", "outline", "link"]);
@@ -25976,12 +27142,73 @@ var weekStartSchema = z45.enum(["sunday", "monday"]);
25976
27142
  var filterAutoShowSchema = z45.enum(["auto", "always", "never"]);
25977
27143
  var calendarTabViewsSchema = z45.enum(["both", "month", "week"]);
25978
27144
 
27145
+ // ../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts
27146
+ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
27147
+ const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : ["select-event", "select-tickets", "enter-details"];
27148
+ if (!needsPaymentStep) {
27149
+ return baseSteps;
27150
+ }
27151
+ return [...baseSteps, "select-payment"];
27152
+ }
27153
+
27154
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
27155
+ function eventMatchesOccurrenceId(event, occurrenceId) {
27156
+ return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
27157
+ }
27158
+ function findPreSelectedEvent(input) {
27159
+ const occurrenceContext = input.occurrenceContext;
27160
+ if (!occurrenceContext) {
27161
+ return null;
27162
+ }
27163
+ const contextDate = getBookingLocalDateKey(toScheduledBookingDateTime({
27164
+ startsAt: occurrenceContext.startsAt,
27165
+ timeZone: occurrenceContext.timeZone
27166
+ }));
27167
+ return input.scopedEvents.find(
27168
+ (event) => eventMatchesOccurrenceId(event, occurrenceContext.id) || getBookingLocalDateKey(toScheduledBookingDateTime({
27169
+ startsAt: event.startsAt,
27170
+ timeZone: event.timeZone
27171
+ })) === contextDate
27172
+ ) ?? null;
27173
+ }
27174
+ function resolveEventRequiresPayment(input) {
27175
+ if (input.eligibility) {
27176
+ return input.eligibility.requiresPayment;
27177
+ }
27178
+ if (input.selectedTicketType) {
27179
+ return input.selectedTicketType.priceAmount > 0;
27180
+ }
27181
+ if (!input.event) {
27182
+ return false;
27183
+ }
27184
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
27185
+ }
27186
+
27187
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts
27188
+ function toRegistrationEvent(event) {
27189
+ return {
27190
+ ...event,
27191
+ pricing: resolveRuntimeEventPricing(event),
27192
+ publicEventId: event.id,
27193
+ registrationOccurrenceId: event.occurrenceId
27194
+ };
27195
+ }
27196
+ function toRegistrationEvents(events) {
27197
+ return events.map(toRegistrationEvent);
27198
+ }
27199
+
25979
27200
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
27201
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
27202
+ var EVENT_REGISTRATION_SHELL_STEP_LABELS = ["Event", "Date", "Tickets", "Details", "Payment"];
25980
27203
  var contentEntrySchema = z46.object({
25981
27204
  id: z46.string(),
25982
27205
  slug: z46.string(),
25983
27206
  contentTypeSlug: z46.string()
25984
27207
  });
27208
+ var eventRegistrationPublicEventSchema = z46.preprocess(
27209
+ normalizeEventRegistrationEventInput,
27210
+ publicEventSchema
27211
+ );
25985
27212
  var eventRegistrationSourceSchema = z46.object({
25986
27213
  siteId: z46.string().optional(),
25987
27214
  apiBaseUrl: z46.string().optional(),
@@ -25989,7 +27216,7 @@ var eventRegistrationSourceSchema = z46.object({
25989
27216
  previewToken: z46.string().nullable().optional(),
25990
27217
  occurrenceContext: occurrenceContextSchema.optional(),
25991
27218
  contentEntry: contentEntrySchema.nullable().optional(),
25992
- events: z46.array(publicEventSchema).nullable().optional(),
27219
+ events: z46.array(eventRegistrationPublicEventSchema).nullable().optional(),
25993
27220
  className: z46.string().nullable().optional(),
25994
27221
  buttonText: z46.string().nullable().optional(),
25995
27222
  maxTickets: z46.string().nullable().optional(),
@@ -26004,14 +27231,17 @@ var eventRegistrationSourceSchema = z46.object({
26004
27231
  });
26005
27232
  var eventRegistrationDisplaySchema = z46.object({
26006
27233
  kind: z46.literal("event-registration"),
26007
- state: z46.literal("shell"),
27234
+ state: z46.literal("generic-shell"),
26008
27235
  className: z46.string().nullable(),
27236
+ titleText: z46.string(),
27237
+ bodyText: z46.string(),
27238
+ stepLabels: z46.array(z46.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
26009
27239
  summaryButtonText: z46.string()
26010
27240
  });
26011
27241
  var eventRegistrationHydrationSchema = z46.object({
26012
27242
  occurrenceContext: occurrenceContextSchema.optional(),
26013
27243
  contentEntry: contentEntrySchema.nullable().optional(),
26014
- events: z46.array(publicEventSchema).nullable().optional(),
27244
+ events: z46.array(eventRegistrationPublicEventSchema).nullable().optional(),
26015
27245
  maxTickets: z46.string().optional(),
26016
27246
  showVenue: z46.boolean().optional(),
26017
27247
  showCapacity: z46.boolean().optional(),
@@ -26040,13 +27270,81 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
26040
27270
  "stage"
26041
27271
  );
26042
27272
  function buildEventRegistrationDisplay(source) {
27273
+ const stepLabels = buildEventRegistrationShellStepLabels(source);
26043
27274
  return {
26044
27275
  kind: "event-registration",
26045
- state: "shell",
27276
+ state: "generic-shell",
26046
27277
  className: source.className ?? null,
27278
+ titleText: "Event registration",
27279
+ bodyText: buildEventRegistrationShellBodyText(stepLabels),
27280
+ stepLabels,
26047
27281
  summaryButtonText: source.buttonText?.trim() || "Register"
26048
27282
  };
26049
27283
  }
27284
+ function buildEventRegistrationShellStepLabels(source) {
27285
+ const scopedEvents = scopeEventRegistrationEvents(source);
27286
+ if (scopedEvents.length === 0) {
27287
+ return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
27288
+ }
27289
+ const preSelectedEvent = findPreSelectedEvent({
27290
+ scopedEvents,
27291
+ occurrenceContext: source.occurrenceContext
27292
+ });
27293
+ const hasPreSelectedContext = Boolean(source.occurrenceContext || preSelectedEvent);
27294
+ const needsPaymentStep = hasPreSelectedContext && preSelectedEvent ? resolveEventRequiresPayment({
27295
+ eligibility: null,
27296
+ selectedTicketType: null,
27297
+ event: preSelectedEvent
27298
+ }) : false;
27299
+ return getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
27300
+ }
27301
+ function scopeEventRegistrationEvents(source) {
27302
+ const events = toRegistrationEvents(source.events ?? []);
27303
+ if (source.occurrenceContext?.seriesId) {
27304
+ return events.filter((event) => event.seriesId === source.occurrenceContext?.seriesId);
27305
+ }
27306
+ const entrySlug = source.contentEntry?.slug;
27307
+ const entryContentType = source.contentEntry?.contentTypeSlug;
27308
+ if (entrySlug && entryContentType && isEventContentType(entryContentType)) {
27309
+ return events.filter((event) => event.slug === entrySlug);
27310
+ }
27311
+ return events;
27312
+ }
27313
+ function shellLabelForRegistrationStep(step, events) {
27314
+ switch (step) {
27315
+ case "select-event":
27316
+ return isDateSelection(events) ? "Date" : "Event";
27317
+ case "select-tickets":
27318
+ return "Tickets";
27319
+ case "enter-details":
27320
+ return "Details";
27321
+ case "select-payment":
27322
+ return "Payment";
27323
+ case "error":
27324
+ case "success":
27325
+ case "submitting":
27326
+ case "redirecting":
27327
+ case "verifying-payment":
27328
+ case "verifying-timeout":
27329
+ case "payment-failed":
27330
+ return "Details";
27331
+ }
27332
+ }
27333
+ function isDateSelection(events) {
27334
+ const firstSeriesId = events[0]?.seriesId;
27335
+ return Boolean(
27336
+ events.length > 1 && firstSeriesId && events.every((event) => event.seriesId === firstSeriesId)
27337
+ );
27338
+ }
27339
+ function buildEventRegistrationShellBodyText(stepLabels) {
27340
+ if (stepLabels.includes("Payment")) {
27341
+ return "Preparing tickets, details, and payment options.";
27342
+ }
27343
+ if (stepLabels[0] === "Tickets") {
27344
+ return "Preparing tickets and booking details.";
27345
+ }
27346
+ return "Preparing dates, tickets, and booking details.";
27347
+ }
26050
27348
  var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
26051
27349
  kind: "client-owned",
26052
27350
  contracts: {
@@ -26070,6 +27368,18 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
26070
27368
  }
26071
27369
  })
26072
27370
  });
27371
+ function normalizeEventRegistrationEventInput(value) {
27372
+ if (!isRecord6(value)) {
27373
+ return value;
27374
+ }
27375
+ return {
27376
+ ...value,
27377
+ pricing: resolveRuntimeEventPricing(value)
27378
+ };
27379
+ }
27380
+ function isRecord6(value) {
27381
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27382
+ }
26073
27383
  var eventRegistrationInteractiveIslandPropsCodec = createInteractiveIslandCodec({
26074
27384
  runtime: eventRegistrationBlockRuntime,
26075
27385
  mode: "event-registration",
@@ -27919,7 +29229,9 @@ function formatPublicEventPriceDisplay(display) {
27919
29229
  }
27920
29230
  }
27921
29231
  function formatEventPrice(event) {
27922
- return formatPublicEventPriceDisplay(publicEventPricingDisplay(event.pricing));
29232
+ return formatPublicEventPriceDisplay(
29233
+ publicEventPricingDisplay(resolveRuntimeEventPricing(event))
29234
+ );
27923
29235
  }
27924
29236
  function resolveEventCta(event, buttonText) {
27925
29237
  const { isFull: isSoldOut } = getEventAvailability(event);
@@ -30982,7 +32294,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
30982
32294
  return keys.length >= 2 ? keys : [];
30983
32295
  }
30984
32296
  function normalizeOfferingsPreviewContentForWrite(value) {
30985
- if (!isRecord5(value)) return null;
32297
+ if (!isRecord7(value)) return null;
30986
32298
  const groupOrderValue = value.groupOrder;
30987
32299
  if (Array.isArray(groupOrderValue)) {
30988
32300
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -30995,7 +32307,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
30995
32307
  return { ...value, groupOrder: [] };
30996
32308
  }
30997
32309
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
30998
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
32310
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord7) : []
30999
32311
  );
31000
32312
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
31001
32313
  }
@@ -31049,7 +32361,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
31049
32361
  }
31050
32362
  return keys;
31051
32363
  }
31052
- function isRecord5(value) {
32364
+ function isRecord7(value) {
31053
32365
  return typeof value === "object" && value !== null && !Array.isArray(value);
31054
32366
  }
31055
32367
  function mergeOrderedKeysWithDefaults(orderedKeys, defaultKeys) {
@@ -31511,7 +32823,7 @@ function isOfferingsPreviewItemLimit(value) {
31511
32823
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
31512
32824
  }
31513
32825
  function normalizeOfferingsPreviewGroupOverride(value) {
31514
- if (!isRecord6(value)) return [];
32826
+ if (!isRecord8(value)) return [];
31515
32827
  const override = {};
31516
32828
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
31517
32829
  override.sourceKey = value.sourceKey;
@@ -31543,12 +32855,12 @@ function isButtonVariant(value) {
31543
32855
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
31544
32856
  }
31545
32857
  function normalizeCardStylesContent(value) {
31546
- return isRecord6(value) || value === null ? value : void 0;
32858
+ return isRecord8(value) || value === null ? value : void 0;
31547
32859
  }
31548
32860
  function normalizeSectionStylesContent(value) {
31549
- return isRecord6(value) || value === null ? value : void 0;
32861
+ return isRecord8(value) || value === null ? value : void 0;
31550
32862
  }
31551
- function isRecord6(value) {
32863
+ function isRecord8(value) {
31552
32864
  return typeof value === "object" && value !== null && !Array.isArray(value);
31553
32865
  }
31554
32866
 
@@ -35627,11 +36939,13 @@ var heroImageSurfaceMotions = [
35627
36939
  ];
35628
36940
  var standardEyebrowTreatments = [
35629
36941
  "plain",
36942
+ "accent",
35630
36943
  "pill",
35631
36944
  "accent-pill"
35632
36945
  ];
35633
36946
  var animatedEyebrowTreatments = [
35634
36947
  "plain",
36948
+ "accent",
35635
36949
  "pill",
35636
36950
  "accent-pill",
35637
36951
  "pill-bounce",
@@ -35932,6 +37246,17 @@ var systemBlockDefinitionsRaw = [
35932
37246
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
35933
37247
  ]
35934
37248
  })),
37249
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
37250
+ flow: conversionFlow,
37251
+ layoutProfiles: [
37252
+ layoutProfile({
37253
+ variantKey: "default",
37254
+ family: "split",
37255
+ weight: "featured",
37256
+ bias: "soft"
37257
+ })
37258
+ ]
37259
+ })),
35935
37260
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
35936
37261
  sectionSurfaces: "supported",
35937
37262
  contentFrames: ["plain", "panel"],
@@ -36023,6 +37348,12 @@ var systemBlockDefinitionsRaw = [
36023
37348
  family: "media-text",
36024
37349
  weight: "featured",
36025
37350
  bias: "soft"
37351
+ }),
37352
+ layoutProfile({
37353
+ variantKey: "bio",
37354
+ family: "media-text",
37355
+ weight: "featured",
37356
+ bias: "soft"
36026
37357
  })
36027
37358
  ]
36028
37359
  })),
@@ -36833,7 +38164,7 @@ import React4 from "react";
36833
38164
  // ../blocks/src/system/data/linkedContentEntries.ts
36834
38165
  var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
36835
38166
  function coerceLinkedContentEntriesPayload(payload) {
36836
- if (!isRecord7(payload)) return payload;
38167
+ if (!isRecord9(payload)) return payload;
36837
38168
  const response = payload;
36838
38169
  if (!Array.isArray(response.entries)) return payload;
36839
38170
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -36841,16 +38172,16 @@ function coerceLinkedContentEntriesPayload(payload) {
36841
38172
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
36842
38173
  }
36843
38174
  function getLinkedContentEntryMeta(value) {
36844
- if (!isRecord7(value)) return null;
38175
+ if (!isRecord9(value)) return null;
36845
38176
  const candidate = value[LINKED_CONTENT_ENTRY_META_KEY];
36846
38177
  return isLinkedContentEntryMeta(candidate) ? candidate : null;
36847
38178
  }
36848
38179
  function buildLinkedContentEditTarget(input) {
36849
38180
  const { entry, sourceBlockId, sourceBlockKind, itemIndex } = input;
36850
- if (!isRecord7(entry)) return null;
38181
+ if (!isRecord9(entry)) return null;
36851
38182
  const meta = getLinkedContentEntryMeta(entry);
36852
38183
  if (!meta || meta.support.kind !== "supported") return null;
36853
- const content = isRecord7(entry.content) ? entry.content : {};
38184
+ const content = isRecord9(entry.content) ? entry.content : {};
36854
38185
  return {
36855
38186
  kind: "linked-content-entry",
36856
38187
  entryId: meta.entryId,
@@ -36900,12 +38231,12 @@ function resolveLinkedEntryInlineFieldEligibility(input) {
36900
38231
  };
36901
38232
  }
36902
38233
  function enrichLinkedContentEntry(entry, contentType) {
36903
- if (!isRecord7(entry)) return entry;
38234
+ if (!isRecord9(entry)) return entry;
36904
38235
  const entryId = typeof entry.id === "string" ? entry.id : null;
36905
38236
  if (!entryId) return entry;
36906
38237
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
36907
38238
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
36908
- const content = isRecord7(entry.content) ? entry.content : {};
38239
+ const content = isRecord9(entry.content) ? entry.content : {};
36909
38240
  const meta = {
36910
38241
  kind: "linked-content-entry",
36911
38242
  entryId,
@@ -37001,7 +38332,7 @@ function capitalize(value) {
37001
38332
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
37002
38333
  }
37003
38334
  function parsePublicContentTypeMeta(value) {
37004
- if (!isRecord7(value)) return null;
38335
+ if (!isRecord9(value)) return null;
37005
38336
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
37006
38337
  return {
37007
38338
  key: value.key,
@@ -37011,7 +38342,7 @@ function parsePublicContentTypeMeta(value) {
37011
38342
  };
37012
38343
  }
37013
38344
  function parsePublicContentTypeLinkedEntryEditing(value) {
37014
- if (!isRecord7(value) || typeof value.kind !== "string") return null;
38345
+ if (!isRecord9(value) || typeof value.kind !== "string") return null;
37015
38346
  switch (value.kind) {
37016
38347
  case "generic":
37017
38348
  return { kind: "generic" };
@@ -37025,7 +38356,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
37025
38356
  }
37026
38357
  }
37027
38358
  function parsePublicContentTypeFieldMeta(value) {
37028
- if (!isRecord7(value)) return [];
38359
+ if (!isRecord9(value)) return [];
37029
38360
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
37030
38361
  return [{
37031
38362
  id: value.id,
@@ -37040,14 +38371,14 @@ function parseStringArray(value) {
37040
38371
  return value.filter((item) => typeof item === "string");
37041
38372
  }
37042
38373
  function isLinkedContentEntryMeta(value) {
37043
- if (!isRecord7(value)) return false;
38374
+ if (!isRecord9(value)) return false;
37044
38375
  if (value.kind !== "linked-content-entry") return false;
37045
38376
  if (typeof value.entryId !== "string") return false;
37046
38377
  if (typeof value.contentTypeKey !== "string") return false;
37047
38378
  if (typeof value.contentTypeLabel !== "string") return false;
37048
38379
  if (typeof value.title !== "string") return false;
37049
38380
  if (!(value.optimisticHash === null || typeof value.optimisticHash === "string")) return false;
37050
- if (!isRecord7(value.contentType)) return false;
38381
+ if (!isRecord9(value.contentType)) return false;
37051
38382
  if (!isLinkedEntryFieldSourceArray(value.fieldSources)) return false;
37052
38383
  return isLinkedContentEditSupport(value.support);
37053
38384
  }
@@ -37055,7 +38386,7 @@ function isLinkedEntryFieldSourceArray(value) {
37055
38386
  return Array.isArray(value) && value.every(isLinkedEntryFieldSource);
37056
38387
  }
37057
38388
  function isLinkedEntryFieldSource(value) {
37058
- if (!isRecord7(value)) return false;
38389
+ if (!isRecord9(value)) return false;
37059
38390
  if (typeof value.displayPath !== "string") return false;
37060
38391
  switch (value.kind) {
37061
38392
  case "content-field":
@@ -37081,7 +38412,7 @@ function isLinkedEntryInlineFieldReadOnlyReason(value) {
37081
38412
  }
37082
38413
  }
37083
38414
  function isLinkedContentEditSupport(value) {
37084
- if (!isRecord7(value) || typeof value.kind !== "string") return false;
38415
+ if (!isRecord9(value) || typeof value.kind !== "string") return false;
37085
38416
  switch (value.kind) {
37086
38417
  case "supported":
37087
38418
  return true;
@@ -37093,7 +38424,7 @@ function isLinkedContentEditSupport(value) {
37093
38424
  return false;
37094
38425
  }
37095
38426
  }
37096
- function isRecord7(value) {
38427
+ function isRecord9(value) {
37097
38428
  return typeof value === "object" && value !== null && !Array.isArray(value);
37098
38429
  }
37099
38430
 
@@ -38620,12 +39951,12 @@ function toTrimmedString(value) {
38620
39951
  return trimmed ? trimmed : void 0;
38621
39952
  }
38622
39953
  function normalizeBookingFormConfig(form2) {
38623
- if (!isRecord8(form2)) return null;
39954
+ if (!isRecord10(form2)) return null;
38624
39955
  const id = readNonEmptyString(form2.id);
38625
39956
  const name = readNonEmptyString(form2.name);
38626
39957
  if (!id || !name) return null;
38627
- const schemaSource = isRecord8(form2.schema) ? form2.schema : isRecord8(form2.schemaJson) ? form2.schemaJson : null;
38628
- const settingsSource = isRecord8(form2.settings) ? form2.settings : isRecord8(form2.settingsJson) ? form2.settingsJson : null;
39958
+ const schemaSource = isRecord10(form2.schema) ? form2.schema : isRecord10(form2.schemaJson) ? form2.schemaJson : null;
39959
+ const settingsSource = isRecord10(form2.settings) ? form2.settings : isRecord10(form2.settingsJson) ? form2.settingsJson : null;
38629
39960
  return {
38630
39961
  id,
38631
39962
  name,
@@ -38649,10 +39980,10 @@ function normalizeBookingServices(services) {
38649
39980
  if (Array.isArray(services)) {
38650
39981
  return services.filter(isBookingFormService).map(normalizeService);
38651
39982
  }
38652
- if (isRecord8(services) && "services" in services) {
39983
+ if (isRecord10(services) && "services" in services) {
38653
39984
  return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
38654
39985
  }
38655
- return isRecord8(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
39986
+ return isRecord10(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
38656
39987
  }
38657
39988
  function normalizeBookingSchema(value) {
38658
39989
  if (!value) return void 0;
@@ -38664,7 +39995,7 @@ function normalizeBookingSchema(value) {
38664
39995
  };
38665
39996
  }
38666
39997
  function readBookingFormField(value) {
38667
- if (!isRecord8(value)) return null;
39998
+ if (!isRecord10(value)) return null;
38668
39999
  const id = readNonEmptyString(value.id);
38669
40000
  const label = readNonEmptyString(value.label);
38670
40001
  const type = readBookingFieldType(value.type);
@@ -38710,7 +40041,7 @@ function readBookingFieldOptions(value) {
38710
40041
  return options.length > 0 ? options : void 0;
38711
40042
  }
38712
40043
  function readBookingFieldOption(value) {
38713
- if (!isRecord8(value)) return null;
40044
+ if (!isRecord10(value)) return null;
38714
40045
  const optionValue = readNonEmptyString(value.value);
38715
40046
  const label = readNonEmptyString(value.label);
38716
40047
  return optionValue && label ? { value: optionValue, label } : null;
@@ -38727,7 +40058,7 @@ function normalizeBookingSettings(value) {
38727
40058
  };
38728
40059
  }
38729
40060
  function isBookingFormService(value) {
38730
- return isRecord8(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
40061
+ return isRecord10(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
38731
40062
  }
38732
40063
  function readNonEmptyString(value) {
38733
40064
  if (typeof value !== "string") return null;
@@ -38745,7 +40076,7 @@ function readStringArray(value) {
38745
40076
  const strings = value.filter((item) => typeof item === "string");
38746
40077
  return strings.length > 0 ? strings : void 0;
38747
40078
  }
38748
- function isRecord8(value) {
40079
+ function isRecord10(value) {
38749
40080
  return typeof value === "object" && value !== null;
38750
40081
  }
38751
40082
 
@@ -39193,8 +40524,9 @@ function EventDetailsView({
39193
40524
  priceCents: selected.course.priceCents,
39194
40525
  currency: selected.course.currency
39195
40526
  }) : null;
39196
- const eventPricingType = publicEventPricingType(selected.pricing);
39197
- const eventPricingCurrency = publicEventPricingCurrency(selected.pricing) ?? "USD";
40527
+ const eventPricing = resolveRuntimeEventPricing(selected);
40528
+ const eventPricingType = publicEventPricingType(eventPricing);
40529
+ const eventPricingCurrency = publicEventPricingCurrency(eventPricing) ?? "USD";
39198
40530
  const isPaid = eventPricingType === "paid";
39199
40531
  const shouldShowCoursePricing = showCost && !isDropIn && coursePricing !== null;
39200
40532
  const shouldShowEventCost = showCost && isPaid && !isDropIn && coursePricing === null;
@@ -41360,8 +42692,14 @@ var EventListingSSR = (props2) => {
41360
42692
  ] });
41361
42693
  };
41362
42694
 
42695
+ // ../blocks/src/system/runtime/nodes/event-registration/constants.ts
42696
+ var EVENT_REGISTRATION_ANCHOR_ID = "event-registration";
42697
+
41363
42698
  // ../blocks/src/system/runtime/nodes/event-registration.server.tsx
41364
42699
  import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
42700
+ function cx(...classes) {
42701
+ return classes.filter((className) => Boolean(className)).join(" ");
42702
+ }
41365
42703
  function EventRegistrationSSR({
41366
42704
  blockId,
41367
42705
  siteId,
@@ -41404,6 +42742,7 @@ function EventRegistrationSSR({
41404
42742
  stage,
41405
42743
  supportEmail
41406
42744
  });
42745
+ const display = islandProps.render.display;
41407
42746
  return /* @__PURE__ */ jsxs34(
41408
42747
  "div",
41409
42748
  {
@@ -41415,12 +42754,61 @@ function EventRegistrationSSR({
41415
42754
  ...getIslandRootProps("event-registration", blockId),
41416
42755
  children: [
41417
42756
  /* @__PURE__ */ jsx48(IslandPropsScript, { value: islandProps }),
41418
- /* @__PURE__ */ jsx48("div", { className: "event-registration__summary", children: /* @__PURE__ */ jsx48("strong", { children: "Loading booking options..." }) }),
42757
+ /* @__PURE__ */ jsx48(EventRegistrationShell, { display }),
41419
42758
  children
41420
42759
  ]
41421
42760
  }
41422
42761
  );
41423
42762
  }
42763
+ function EventRegistrationShell({
42764
+ display
42765
+ }) {
42766
+ return /* @__PURE__ */ jsx48(
42767
+ "div",
42768
+ {
42769
+ id: EVENT_REGISTRATION_ANCHOR_ID,
42770
+ className: "er-container er-registration-shell",
42771
+ "aria-busy": "true",
42772
+ role: "status",
42773
+ children: /* @__PURE__ */ jsxs34("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
42774
+ /* @__PURE__ */ jsxs34("div", { className: "er-payment-layout-main", children: [
42775
+ /* @__PURE__ */ jsx48("div", { className: "er-steps-nav er-registration-shell__steps", "aria-hidden": "true", children: /* @__PURE__ */ jsx48("ol", { className: "er-steps", children: display.stepLabels.map((label, index) => {
42776
+ const isActive = index === 0;
42777
+ return /* @__PURE__ */ jsxs34("li", { className: "er-step", children: [
42778
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-circle", isActive && "er-step-circle--active"), children: index + 1 }),
42779
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-label", isActive && "er-step-label--active"), children: label }),
42780
+ index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx48("span", { className: "er-step-connector" }) : null
42781
+ ] }, label);
42782
+ }) }) }),
42783
+ /* @__PURE__ */ jsxs34("div", { className: "er-stack", children: [
42784
+ /* @__PURE__ */ jsxs34("div", { children: [
42785
+ /* @__PURE__ */ jsx48("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
42786
+ /* @__PURE__ */ jsx48("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
42787
+ /* @__PURE__ */ jsx48("p", { className: "er-text er-text--muted er-registration-shell__copy", children: display.bodyText })
42788
+ ] }),
42789
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
42790
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
42791
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
42792
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
42793
+ ] }),
42794
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
42795
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
42796
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
42797
+ ] })
42798
+ ] })
42799
+ ] })
42800
+ ] }),
42801
+ /* @__PURE__ */ jsx48("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
42802
+ /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar-info", children: [
42803
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
42804
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
42805
+ ] }),
42806
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
42807
+ ] }) })
42808
+ ] })
42809
+ }
42810
+ );
42811
+ }
41424
42812
  var event_registration_server_default = EventRegistrationSSR;
41425
42813
 
41426
42814
  // ../blocks/src/system/runtime/shared/components/FeedbackMessage.tsx
@@ -42006,14 +43394,14 @@ function isDecoratedHeadingBlockKind(blockKind) {
42006
43394
  return blockKind === "block.intro" || blockKind === "block.feature-cards" || blockKind === "block.testimonials" || blockKind === "block.faq";
42007
43395
  }
42008
43396
  function readVariant(blockContent) {
42009
- if (!isRecord9(blockContent)) return void 0;
43397
+ if (!isRecord11(blockContent)) return void 0;
42010
43398
  const variant = blockContent.variant;
42011
43399
  return typeof variant === "string" ? variant : void 0;
42012
43400
  }
42013
43401
  function isFaqDecoratedVariant(variant) {
42014
43402
  return variant === "default" || variant === "question-columns";
42015
43403
  }
42016
- function isRecord9(value) {
43404
+ function isRecord11(value) {
42017
43405
  return typeof value === "object" && value !== null && !Array.isArray(value);
42018
43406
  }
42019
43407
  function buildHeadingDecorationWrapperClassName(className) {
@@ -43521,20 +44909,20 @@ function generateInputCss({
43521
44909
  baseInputRules.push("background-color: transparent");
43522
44910
  } else {
43523
44911
  baseInputRules.push(
43524
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
44912
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
43525
44913
  );
43526
44914
  }
43527
- baseInputRules.push(`color: rgb(var(--tb-${inputSystem.base.textColorToken}))`);
44915
+ baseInputRules.push(`color: ${rgbColorValue(inputSystem.base.textColorToken)}`);
43528
44916
  const borderPx = parseBorderWidth(inputSystem.base.border.widthClass);
43529
44917
  const borderStyle = inputSystem.base.border.style ?? "all";
43530
44918
  if (borderStyle === "underline") {
43531
44919
  baseInputRules.push("border: none");
43532
44920
  baseInputRules.push(
43533
- `border-bottom: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
44921
+ `border-bottom: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
43534
44922
  );
43535
44923
  } else {
43536
44924
  baseInputRules.push(
43537
- `border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
44925
+ `border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
43538
44926
  );
43539
44927
  }
43540
44928
  if (borderStyle === "underline") {
@@ -43561,7 +44949,7 @@ function generateInputCss({
43561
44949
  baseInputRules.push("transition: border-color 0.2s ease, box-shadow 0.2s ease");
43562
44950
  const labelSelector = `${rootSelector} .form-label`;
43563
44951
  const labelRules = [];
43564
- labelRules.push(`color: rgb(var(--tb-${inputSystem.label.textColorToken}))`);
44952
+ labelRules.push(`color: ${rgbColorValue(inputSystem.label.textColorToken)}`);
43565
44953
  labelRules.push(`font-weight: ${FONT_WEIGHT_MAP[inputSystem.label.fontWeight]}`);
43566
44954
  labelRules.push(`font-size: ${LABEL_FONT_SIZE_MAP[inputSystem.label.fontSize]}`);
43567
44955
  if (inputSystem.label.textTransform && inputSystem.label.textTransform !== "none") {
@@ -43602,9 +44990,9 @@ function generateInputCss({
43602
44990
  ];
43603
44991
  const focusRules = [];
43604
44992
  focusRules.push("outline: none");
43605
- focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44993
+ focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43606
44994
  if (inputSystem.focus.borderColorToken) {
43607
- focusRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.borderColorToken}))`);
44995
+ focusRules.push(`border-color: ${rgbColorValue(inputSystem.focus.borderColorToken)}`);
43608
44996
  }
43609
44997
  const errorSelectors = [
43610
44998
  `${inputSelector}[aria-invalid="true"]`,
@@ -43612,16 +45000,16 @@ function generateInputCss({
43612
45000
  `${selectSelector}[aria-invalid="true"]`
43613
45001
  ];
43614
45002
  const errorRules = [];
43615
- errorRules.push(`border-color: rgb(var(--tb-${inputSystem.error.borderColorToken}))`);
43616
- errorRules.push(`color: rgb(var(--tb-${inputSystem.error.textColorToken}))`);
45003
+ errorRules.push(`border-color: ${rgbColorValue(inputSystem.error.borderColorToken)}`);
45004
+ errorRules.push(`color: ${rgbColorValue(inputSystem.error.textColorToken)}`);
43617
45005
  const disabledSelectors = [
43618
45006
  `${inputSelector}:disabled`,
43619
45007
  `${textareaSelector}:disabled`,
43620
45008
  `${selectSelector}:disabled`
43621
45009
  ];
43622
45010
  const disabledRules = [];
43623
- disabledRules.push(`background-color: rgb(var(--tb-${inputSystem.disabled.backgroundColorToken}))`);
43624
- disabledRules.push(`color: rgb(var(--tb-${inputSystem.disabled.textColorToken}))`);
45011
+ disabledRules.push(`background-color: ${rgbColorValue(inputSystem.disabled.backgroundColorToken)}`);
45012
+ disabledRules.push(`color: ${rgbColorValue(inputSystem.disabled.textColorToken)}`);
43625
45013
  disabledRules.push(`opacity: ${inputSystem.disabled.opacity}`);
43626
45014
  disabledRules.push("cursor: not-allowed");
43627
45015
  const checkboxSelector = `${rootSelector} .form-checkbox`;
@@ -43631,12 +45019,12 @@ function generateInputCss({
43631
45019
  checkableRules.push("width: 1rem");
43632
45020
  checkableRules.push("height: 1rem");
43633
45021
  checkableRules.push("flex-shrink: 0");
43634
- checkableRules.push(`border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`);
45022
+ checkableRules.push(`border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`);
43635
45023
  if (inputSystem.base.background.type === "transparent") {
43636
45024
  checkableRules.push("background-color: transparent");
43637
45025
  } else {
43638
45026
  checkableRules.push(
43639
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
45027
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
43640
45028
  );
43641
45029
  }
43642
45030
  checkableRules.push("cursor: pointer");
@@ -43647,22 +45035,22 @@ function generateInputCss({
43647
45035
  radioSpecificRules.push("border-radius: 9999px");
43648
45036
  const checkboxCheckedSelector = `${checkboxSelector}:checked`;
43649
45037
  const checkboxCheckedRules = [];
43650
- checkboxCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
43651
- checkboxCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
45038
+ checkboxCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
45039
+ checkboxCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43652
45040
  checkboxCheckedRules.push(`background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")`);
43653
45041
  checkboxCheckedRules.push("background-size: 100% 100%");
43654
45042
  checkboxCheckedRules.push("background-position: center");
43655
45043
  checkboxCheckedRules.push("background-repeat: no-repeat");
43656
45044
  const radioCheckedSelector = `${radioSelector}:checked`;
43657
45045
  const radioCheckedRules = [];
43658
- radioCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
43659
- radioCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
45046
+ radioCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
45047
+ radioCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43660
45048
  radioCheckedRules.push("background-image: radial-gradient(circle, white 40%, transparent 40%)");
43661
45049
  const checkboxFocusSelector = `${checkboxSelector}:focus-visible`;
43662
45050
  const radioFocusSelector = `${radioSelector}:focus-visible`;
43663
45051
  const checkableFocusRules = [];
43664
45052
  checkableFocusRules.push("outline: none");
43665
- checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
45053
+ checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43666
45054
  const cssBlocks = [];
43667
45055
  cssBlocks.push(`${labelSelector} {
43668
45056
  ${labelRules.join(";\n ")};
@@ -45510,6 +46898,11 @@ ${root} {
45510
46898
  --er-event-card-bg: rgb(var(--tb-surface));
45511
46899
  --er-event-card-border-width: var(--rb-border-width, 1px);
45512
46900
  --er-event-card-hover-opacity: 1;
46901
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
46902
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
46903
+ --er-radius: var(--rb-block-radius);
46904
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
46905
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
45513
46906
 
45514
46907
  /* Step indicator */
45515
46908
  --er-step-active: rgb(var(--tb-primary));
@@ -46510,7 +47903,7 @@ function buildThemeCssVars(theme) {
46510
47903
  // These expose inputStyle/InputSystem values for blocks that can't use .form-* classes
46511
47904
  [THEME_RADIUS_CSS_VARS.input]: inputRadius,
46512
47905
  ["--rb-input-focus-width"]: `${inputSystem.focus.ringWidth}px`,
46513
- ["--rb-input-focus-color"]: `rgb(var(--tb-${inputSystem.focus.ringColorToken}))`,
47906
+ ["--rb-input-focus-color"]: rgbColorValue(inputSystem.focus.ringColorToken),
46514
47907
  // Deprecated compatibility aliases for pre-v2 block/custom CSS. New CSS should
46515
47908
  // consume the semantic --rb-* primitives above.
46516
47909
  [THEME_RADIUS_CSS_VARS.legacyCard]: blockRadius,
@@ -47277,6 +48670,11 @@ var MemoBlockSection = React6.memo(
47277
48670
  siteId: dataContext?.siteId,
47278
48671
  apiBaseUrl: dataContext?.apiBaseUrl,
47279
48672
  portalToken: dataContext?.portalToken ?? null,
48673
+ previewToken: dataContext?.previewToken ?? null,
48674
+ stage: dataContext?.previewStage,
48675
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
48676
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
48677
+ contentEntry: dataContext?.contentEntry ?? null,
47280
48678
  supabaseUrl: dataContext?.supabaseUrl,
47281
48679
  imageResolveContext: resolvedImageResolveContext,
47282
48680
  blockId: block.id ?? null,
@@ -47400,6 +48798,11 @@ var MemoBlockSection = React6.memo(
47400
48798
  siteId: dataContext?.siteId,
47401
48799
  apiBaseUrl: dataContext?.apiBaseUrl,
47402
48800
  portalToken: dataContext?.portalToken ?? null,
48801
+ previewToken: dataContext?.previewToken ?? null,
48802
+ stage: dataContext?.previewStage,
48803
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
48804
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
48805
+ contentEntry: dataContext?.contentEntry ?? null,
47403
48806
  supabaseUrl: dataContext?.supabaseUrl,
47404
48807
  imageResolveContext: resolvedImageResolveContext,
47405
48808
  blockId: block.id ?? null,
@@ -47586,6 +48989,9 @@ var containerResponsiveThemeCss = `/*
47586
48989
  letter-spacing: 0.025em;
47587
48990
  text-transform: uppercase;
47588
48991
  }
48992
+ .rb-eyebrow-treatment-accent {
48993
+ color: rgb(var(--tb-accent));
48994
+ }
47589
48995
  .rb-eyebrow-treatment-pill {
47590
48996
  align-self: center;
47591
48997
  display: inline-flex;
@@ -47640,6 +49046,27 @@ var containerResponsiveThemeCss = `/*
47640
49046
  font-weight: 400;
47641
49047
  }
47642
49048
 
49049
+ /* Media shape treatments */
49050
+ .rb-media-shape-square,
49051
+ .rb-media-shape-rounded,
49052
+ .rb-media-shape-circle,
49053
+ .rb-media-shape-arch {
49054
+ overflow: hidden;
49055
+ }
49056
+ .rb-media-shape-square {
49057
+ border-radius: 0;
49058
+ }
49059
+ .rb-media-shape-rounded {
49060
+ border-radius: var(--rb-media-shape-radius, 1rem);
49061
+ }
49062
+ .rb-media-shape-circle {
49063
+ border-radius: 9999px;
49064
+ }
49065
+ .rb-media-shape-arch {
49066
+ border-radius: 9999px 9999px var(--rb-media-shape-arch-base-radius, 0.125rem)
49067
+ var(--rb-media-shape-arch-base-radius, 0.125rem);
49068
+ }
49069
+
47643
49070
  /* Navigation typography */
47644
49071
  .rb-nav-text {
47645
49072
  font-size: 0.875rem;
@@ -50794,7 +52221,7 @@ var containerResponsiveThemeCss = `/*
50794
52221
  :where(.theme-scope) :where([data-block="event-registration"]) .er-container {
50795
52222
  border-radius: var(--rb-block-radius);
50796
52223
  border: 1px solid var(--er-border);
50797
- padding: 1.5rem;
52224
+ padding: clamp(1rem, 2vw, 1.5rem);
50798
52225
  background: rgb(var(--tb-surface));
50799
52226
  color: var(--er-on-surface);
50800
52227
  transition: border-color var(--rb-block-transition) ease;
@@ -50803,6 +52230,109 @@ var containerResponsiveThemeCss = `/*
50803
52230
  margin-inline: 0;
50804
52231
  }
50805
52232
 
52233
+ /* SSR shell / required-island fallback */
52234
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell {
52235
+ min-height: 24rem;
52236
+ }
52237
+
52238
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__steps {
52239
+ margin-bottom: 1.25rem;
52240
+ }
52241
+
52242
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__eyebrow {
52243
+ margin: 0 0 0.35rem;
52244
+ color: var(--er-on-surface-subtle);
52245
+ font-size: 0.75rem;
52246
+ font-weight: 700;
52247
+ letter-spacing: 0.04em;
52248
+ line-height: 1.2;
52249
+ text-transform: uppercase;
52250
+ }
52251
+
52252
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__title {
52253
+ margin: 0;
52254
+ }
52255
+
52256
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__copy {
52257
+ margin: 0.35rem 0 0;
52258
+ max-width: 36rem;
52259
+ line-height: 1.45;
52260
+ }
52261
+
52262
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__cards {
52263
+ margin-top: 0.25rem;
52264
+ overflow: hidden;
52265
+ border: 1px solid var(--er-border);
52266
+ border-radius: var(--rb-block-radius);
52267
+ background: var(--er-control-bg);
52268
+ }
52269
+
52270
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__card {
52271
+ display: grid;
52272
+ gap: 0.5rem;
52273
+ padding: 1rem;
52274
+ }
52275
+
52276
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line {
52277
+ height: 0.75rem;
52278
+ border-radius: 9999px;
52279
+ background: linear-gradient(
52280
+ 90deg,
52281
+ var(--er-shell-line),
52282
+ rgba(var(--tb-primary), 0.12),
52283
+ var(--er-shell-line)
52284
+ );
52285
+ }
52286
+
52287
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--lg {
52288
+ width: min(26rem, 82%);
52289
+ }
52290
+
52291
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--md {
52292
+ width: min(19rem, 68%);
52293
+ }
52294
+
52295
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--sm {
52296
+ width: min(14rem, 52%);
52297
+ }
52298
+
52299
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--xs {
52300
+ width: min(10rem, 42%);
52301
+ }
52302
+
52303
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__summary {
52304
+ align-items: center;
52305
+ border-radius: calc(var(--rb-block-radius) * 0.75);
52306
+ border: 1px solid var(--er-summary-border);
52307
+ padding: 0.875rem 1rem;
52308
+ }
52309
+
52310
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__button-placeholder {
52311
+ display: inline-flex;
52312
+ min-height: 2.5rem;
52313
+ align-items: center;
52314
+ justify-content: center;
52315
+ border-radius: calc(var(--rb-block-radius) * 0.6);
52316
+ background: rgb(var(--tb-primary));
52317
+ color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
52318
+ padding: 0.625rem 1rem;
52319
+ font-size: 0.875rem;
52320
+ font-weight: 600;
52321
+ line-height: 1.2;
52322
+ text-align: center;
52323
+ white-space: nowrap;
52324
+ }
52325
+
52326
+ :where(.theme-scope) :where([data-block="event-registration"]) .event-registration__hydration-error {
52327
+ border-radius: var(--rb-block-radius);
52328
+ border: 1px solid var(--er-border-error);
52329
+ background: var(--er-error-bg);
52330
+ color: var(--er-error-text);
52331
+ padding: 1rem;
52332
+ font-size: 0.9375rem;
52333
+ line-height: 1.45;
52334
+ }
52335
+
50806
52336
  :where(.theme-scope) :where([data-block="event-registration"].event-registration--embedded) .er-container {
50807
52337
  max-width: none;
50808
52338
  padding: 0;
@@ -50850,6 +52380,7 @@ var containerResponsiveThemeCss = `/*
50850
52380
  padding: 1rem;
50851
52381
  border-radius: calc(var(--rb-block-radius) * 0.75);
50852
52382
  border: 1px solid var(--er-border);
52383
+ background: var(--er-surface-muted);
50853
52384
  }
50854
52385
 
50855
52386
  /* Ticket counter */
@@ -50895,14 +52426,23 @@ var containerResponsiveThemeCss = `/*
50895
52426
  /* Form inputs */
50896
52427
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input {
50897
52428
  width: 100%;
50898
- padding: 0.5rem 0.75rem;
52429
+ min-height: 2.75rem;
52430
+ padding: 0.625rem 0.75rem;
50899
52431
  border-radius: calc(var(--rb-block-radius) * 0.5);
50900
52432
  border: 1px solid var(--er-border);
50901
- background: transparent;
52433
+ background: var(--er-control-bg);
52434
+ color: var(--er-control-text);
52435
+ font: inherit;
52436
+ line-height: 1.4;
50902
52437
  transition: border-color var(--rb-block-transition) ease,
52438
+ background-color var(--rb-block-transition) ease,
50903
52439
  box-shadow var(--rb-block-transition) ease;
50904
52440
  }
50905
52441
 
52442
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-input::placeholder {
52443
+ color: var(--er-on-surface-faint);
52444
+ }
52445
+
50906
52446
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input:focus {
50907
52447
  outline: none;
50908
52448
  border-color: var(--er-border-selected);
@@ -51024,7 +52564,7 @@ var containerResponsiveThemeCss = `/*
51024
52564
  }
51025
52565
 
51026
52566
  :where(.theme-scope) :where([data-block="event-registration"]) .er-event-grid .er-event-card {
51027
- padding: 0.75rem 0;
52567
+ padding: 0.875rem 0;
51028
52568
  border-width: 0 0 var(--rb-event-tile-border-width, var(--rb-border-width, 1px)) 0;
51029
52569
  border-style: solid;
51030
52570
  border-radius: 0;
@@ -51256,21 +52796,24 @@ var containerResponsiveThemeCss = `/*
51256
52796
  align-items: flex-start;
51257
52797
  gap: 0.75rem;
51258
52798
  padding: 1rem;
51259
- border: 2px solid var(--er-payment-border);
52799
+ border: 1px solid var(--er-payment-border);
51260
52800
  border-radius: var(--rb-block-radius);
51261
- background: transparent;
52801
+ background: var(--er-control-bg);
51262
52802
  cursor: pointer;
51263
52803
  transition: border-color var(--rb-block-transition) ease,
52804
+ box-shadow var(--rb-block-transition) ease,
51264
52805
  background-color var(--rb-block-transition) ease;
51265
52806
  }
51266
52807
 
51267
52808
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option:hover {
51268
52809
  border-color: var(--er-payment-border-hover);
52810
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
51269
52811
  }
51270
52812
 
51271
52813
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option--selected {
51272
52814
  border-color: var(--er-payment-border-selected);
51273
52815
  background-color: var(--er-payment-bg-selected);
52816
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
51274
52817
  }
51275
52818
 
51276
52819
  /* Discount code entry */
@@ -51958,22 +53501,25 @@ var containerResponsiveThemeCss = `/*
51958
53501
  justify-content: center;
51959
53502
  gap: 0.25rem;
51960
53503
  padding: 0.75rem 0.625rem;
51961
- border: 2px solid var(--er-payment-border);
53504
+ border: 1px solid var(--er-payment-border);
51962
53505
  border-radius: var(--rb-block-radius);
51963
- background: transparent;
53506
+ background: var(--er-control-bg);
51964
53507
  cursor: pointer;
51965
53508
  text-align: center;
51966
53509
  transition: border-color var(--rb-block-transition) ease,
53510
+ box-shadow var(--rb-block-transition) ease,
51967
53511
  background-color var(--rb-block-transition) ease;
51968
53512
  }
51969
53513
 
51970
53514
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile:hover:not([aria-disabled="true"]) {
51971
53515
  border-color: var(--er-payment-border-hover);
53516
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
51972
53517
  }
51973
53518
 
51974
53519
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--selected {
51975
53520
  border-color: var(--er-payment-border-selected);
51976
53521
  background-color: var(--er-payment-bg-selected);
53522
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
51977
53523
  }
51978
53524
 
51979
53525
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--disabled {
@@ -52076,11 +53622,10 @@ var containerResponsiveThemeCss = `/*
52076
53622
  justify-content: space-between;
52077
53623
  align-items: flex-start;
52078
53624
  gap: 1rem;
52079
- padding: 0.875rem 0;
52080
- background: transparent;
52081
- border-top: 1px solid var(--er-summary-border);
52082
- border-bottom: 1px solid var(--er-summary-border);
52083
- border-radius: 0;
53625
+ padding: 0.875rem 1rem;
53626
+ background: var(--er-surface-muted);
53627
+ border: 1px solid var(--er-summary-border);
53628
+ border-radius: calc(var(--rb-block-radius) * 0.75);
52084
53629
  }
52085
53630
 
52086
53631
  :where(.theme-scope) :where([data-block="event-registration"]) .er-summary-bar-info {
@@ -53852,18 +55397,10 @@ var containerResponsiveThemeCss = `/*
53852
55397
  /* Two-column row (opt-in per field via schema layout) */
53853
55398
  :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
53854
55399
  display: grid;
53855
- grid-template-columns: 1fr;
55400
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
53856
55401
  gap: 1rem;
53857
55402
  }
53858
55403
 
53859
- @container rb-site (min-width: 768px) {
53860
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
53861
- :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
53862
- grid-template-columns: 1fr 1fr;
53863
- }
53864
- }
53865
- }
53866
-
53867
55404
  /* Field wrapper */
53868
55405
  :where(.theme-scope) :where([data-block="form"]) .fb-field {
53869
55406
  display: flex;
@@ -53937,6 +55474,10 @@ var containerResponsiveThemeCss = `/*
53937
55474
  }
53938
55475
 
53939
55476
  /* Subheadline - supporting text below headline */
55477
+ :where(.theme-scope) :where([data-block="hero"]) .hero-headline {
55478
+ text-wrap: balance;
55479
+ }
55480
+
53940
55481
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
53941
55482
  font-size: 1.125rem;
53942
55483
  color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
@@ -53962,8 +55503,8 @@ var containerResponsiveThemeCss = `/*
53962
55503
  }
53963
55504
 
53964
55505
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-headline {
53965
- font-size: clamp(2.5rem, 5vw, 4rem);
53966
- line-height: 1.08;
55506
+ font-size: clamp(2.75rem, 5.6vw, 4.75rem);
55507
+ line-height: 1.06;
53967
55508
  }
53968
55509
 
53969
55510
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-subheadline {
@@ -53972,8 +55513,8 @@ var containerResponsiveThemeCss = `/*
53972
55513
  }
53973
55514
 
53974
55515
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline {
53975
- font-size: clamp(3rem, 6vw, 5rem);
53976
- line-height: 1.04;
55516
+ font-size: clamp(3.5rem, 7.2vw, 6.25rem);
55517
+ line-height: 1;
53977
55518
  }
53978
55519
 
53979
55520
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-subheadline {
@@ -53982,8 +55523,8 @@ var containerResponsiveThemeCss = `/*
53982
55523
  }
53983
55524
 
53984
55525
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline {
53985
- font-size: clamp(3.5rem, 8vw, 6.5rem);
53986
- line-height: 0.98;
55526
+ font-size: clamp(4.25rem, 10vw, 8.5rem);
55527
+ line-height: 0.94;
53987
55528
  }
53988
55529
 
53989
55530
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-subheadline {
@@ -53992,13 +55533,13 @@ var containerResponsiveThemeCss = `/*
53992
55533
  }
53993
55534
 
53994
55535
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-medium.rb-hero-typography-poster .hero-headline {
53995
- font-size: clamp(3rem, 6.5vw, 5rem);
55536
+ font-size: clamp(3.5rem, 7.5vw, 6.5rem);
53996
55537
  }
53997
55538
 
53998
55539
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
53999
55540
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
54000
- font-size: clamp(2.75rem, 5.5vw, 4.5rem);
54001
- line-height: 1.05;
55541
+ font-size: clamp(3rem, 6vw, 5.25rem);
55542
+ line-height: 1.02;
54002
55543
  }
54003
55544
 
54004
55545
  @container rb-site (max-width: 639px) {
@@ -56720,8 +58261,9 @@ var containerResponsiveThemeCss = `/*
56720
58261
  /* Privacy note */
56721
58262
  :where(.theme-scope) .newsletter-privacy-note {
56722
58263
  margin-top: 0.75rem;
56723
- font-size: 0.75rem;
56724
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
58264
+ font-size: 1rem;
58265
+ line-height: 1.6;
58266
+ color: var(--section-text-color, rgb(var(--tb-text)));
56725
58267
  text-align: center;
56726
58268
  }
56727
58269
 
@@ -56776,6 +58318,116 @@ var containerResponsiveThemeCss = `/*
56776
58318
  color: rgb(var(--tb-text));
56777
58319
  }
56778
58320
 
58321
+ /* =============================================================================
58322
+ * Block: Contact + Newsletter
58323
+ * =============================================================================
58324
+ */
58325
+
58326
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
58327
+ display: grid;
58328
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
58329
+ gap: clamp(2.5rem, 6vw, 4rem);
58330
+ align-items: start;
58331
+ }
58332
+
58333
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
58334
+ min-width: 0;
58335
+ }
58336
+
58337
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
58338
+ margin-bottom: 1.5rem;
58339
+ }
58340
+
58341
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
58342
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
58343
+ margin: 0 0 0.75rem;
58344
+ }
58345
+
58346
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
58347
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
58348
+ color: var(--section-text-color, rgb(var(--tb-text)));
58349
+ }
58350
+
58351
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
58352
+ display: flex;
58353
+ flex-direction: column;
58354
+ align-items: flex-start;
58355
+ }
58356
+
58357
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
58358
+ max-width: none;
58359
+ margin-left: 0;
58360
+ margin-right: 0;
58361
+ }
58362
+
58363
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
58364
+ text-align: left;
58365
+ }
58366
+
58367
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
58368
+ display: flex;
58369
+ flex-direction: column;
58370
+ gap: 1rem;
58371
+ }
58372
+
58373
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
58374
+ display: grid;
58375
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
58376
+ gap: 1rem;
58377
+ }
58378
+
58379
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
58380
+ display: flex;
58381
+ flex-direction: column;
58382
+ gap: 0.25rem;
58383
+ }
58384
+
58385
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
58386
+ display: flex;
58387
+ flex-direction: column;
58388
+ gap: 0.5rem;
58389
+ border: none;
58390
+ padding: 0;
58391
+ margin: 0;
58392
+ }
58393
+
58394
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
58395
+ display: flex;
58396
+ align-items: center;
58397
+ gap: 0.5rem;
58398
+ }
58399
+
58400
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
58401
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
58402
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
58403
+ border-radius: var(--rb-block-radius);
58404
+ padding: 1rem;
58405
+ font-size: 0.875rem;
58406
+ }
58407
+
58408
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
58409
+ background-color: var(--fb-success-bg);
58410
+ color: var(--fb-success-text);
58411
+ border: 1px solid var(--fb-success-border);
58412
+ }
58413
+
58414
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
58415
+ background-color: var(--fb-error-bg);
58416
+ color: var(--fb-error-text);
58417
+ border: 1px solid var(--fb-error-border);
58418
+ }
58419
+
58420
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
58421
+ background-color: var(--fb-empty-bg);
58422
+ color: var(--fb-empty-text);
58423
+ border: 1px dashed var(--fb-empty-border);
58424
+ text-align: center;
58425
+ }
58426
+
58427
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
58428
+ margin-top: 0.5rem;
58429
+ }
58430
+
56779
58431
  /* =============================================================================
56780
58432
  * Block: Team Members
56781
58433
  * =============================================================================
@@ -57000,8 +58652,8 @@ var containerResponsiveThemeCss = `/*
57000
58652
  container: event-compact-list / inline-size;
57001
58653
  border: 1px solid var(--event-compact-divider-color);
57002
58654
  border-radius: 1rem;
57003
- background: rgb(var(--tb-background, 255 255 255));
57004
- box-shadow: 0 1.25rem 3.5rem rgba(var(--tb-shadow), 0.08);
58655
+ background: rgb(var(--tb-surface, 255 255 255));
58656
+ box-shadow: none;
57005
58657
  }
57006
58658
 
57007
58659
  :where(.theme-scope) .rb-event-list-treatment-lined-panel .event-listing-compact-container {
@@ -57010,6 +58662,12 @@ var containerResponsiveThemeCss = `/*
57010
58662
  rgb(var(--tb-border, 229 231 235)),
57011
58663
  rgb(var(--tb-text, 17 24 39)) 8%
57012
58664
  );
58665
+ background: rgb(var(--tb-surface, 255 255 255));
58666
+ border-color: color-mix(
58667
+ in oklab,
58668
+ rgb(var(--tb-primary, 0 0 0)),
58669
+ rgb(var(--tb-border, 229 231 235)) 72%
58670
+ );
57013
58671
  }
57014
58672
 
57015
58673
  :where(.theme-scope) .event-compact-row {
@@ -57085,7 +58743,7 @@ var containerResponsiveThemeCss = `/*
57085
58743
 
57086
58744
  :where(.theme-scope) .event-compact-row-title {
57087
58745
  margin: 0;
57088
- color: rgb(var(--tb-text, 17 24 39));
58746
+ color: var(--section-heading-color, rgb(var(--tb-primary, 0 0 0)));
57089
58747
  font-family: var(--font-heading, var(--font-body, inherit));
57090
58748
  font-size: clamp(1.05rem, 1rem + 0.35vw, 1.3rem);
57091
58749
  font-weight: 400;
@@ -57178,8 +58836,6 @@ var containerResponsiveThemeCss = `/*
57178
58836
  min-height: 2.7rem;
57179
58837
  justify-content: space-between;
57180
58838
  gap: 1rem;
57181
- border-radius: 9999px;
57182
- padding-inline: 1.25rem 1rem;
57183
58839
  white-space: nowrap;
57184
58840
  }
57185
58841
 
@@ -58234,6 +59890,7 @@ function PageContent({
58234
59890
  mediaAssets,
58235
59891
  apiBaseUrl,
58236
59892
  portalToken,
59893
+ previewToken,
58237
59894
  dataContext,
58238
59895
  useThemeScope = false
58239
59896
  }) {
@@ -58250,6 +59907,7 @@ function PageContent({
58250
59907
  siteId,
58251
59908
  apiBaseUrl,
58252
59909
  portalToken,
59910
+ previewToken,
58253
59911
  resolvedData,
58254
59912
  routes: routeMap,
58255
59913
  pagesByIdentifier,
@@ -62481,6 +64139,46 @@ var ENDPOINT_DEFINITIONS = {
62481
64139
  auth: "user",
62482
64140
  responseKind: "json"
62483
64141
  },
64142
+ listEntrySlotBlocks: {
64143
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
64144
+ method: "GET",
64145
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
64146
+ auth: "user",
64147
+ responseKind: "json",
64148
+ errors: ["resource:not_found"]
64149
+ },
64150
+ listEntryPageContentSlots: {
64151
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
64152
+ method: "GET",
64153
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
64154
+ auth: "user",
64155
+ responseKind: "json",
64156
+ errors: ["resource:not_found"]
64157
+ },
64158
+ createEntrySlotBlock: {
64159
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
64160
+ method: "POST",
64161
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
64162
+ auth: "user",
64163
+ responseKind: "json",
64164
+ errors: ["validation:invalid_input", "resource:not_found"]
64165
+ },
64166
+ reorderEntrySlotBlocks: {
64167
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
64168
+ method: "POST",
64169
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
64170
+ auth: "user",
64171
+ responseKind: "json",
64172
+ errors: ["validation:invalid_input", "resource:not_found"]
64173
+ },
64174
+ deleteEntrySlotBlock: {
64175
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
64176
+ method: "DELETE",
64177
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
64178
+ auth: "user",
64179
+ responseKind: "json",
64180
+ errors: ["resource:not_found"]
64181
+ },
62484
64182
  createBlock: {
62485
64183
  path: "/sites/{siteId}/pages/{pageId}/blocks",
62486
64184
  method: "POST",
@@ -66304,7 +68002,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
66304
68002
  }
66305
68003
 
66306
68004
  // ../api/src/utils/isRecord.ts
66307
- function isRecord10(value) {
68005
+ function isRecord12(value) {
66308
68006
  return typeof value === "object" && value !== null && !Array.isArray(value);
66309
68007
  }
66310
68008
 
@@ -66611,7 +68309,7 @@ function sanitizeMarks(marks) {
66611
68309
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
66612
68310
  return [{ type: mark.type }];
66613
68311
  }
66614
- if (mark.type === "link" && isRecord10(mark.attrs) && typeof mark.attrs.href === "string") {
68312
+ if (mark.type === "link" && isRecord12(mark.attrs) && typeof mark.attrs.href === "string") {
66615
68313
  const attrs = { href: mark.attrs.href };
66616
68314
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
66617
68315
  attrs.target = mark.attrs.target;
@@ -66626,10 +68324,10 @@ function sanitizeMarks(marks) {
66626
68324
  return sanitized.length > 0 ? sanitized : void 0;
66627
68325
  }
66628
68326
  function unwrapRichTextValue(value) {
66629
- if (isRecord10(value) && isRecord10(value.doc)) {
68327
+ if (isRecord12(value) && isRecord12(value.doc)) {
66630
68328
  return unwrapRichTextValue(value.doc);
66631
68329
  }
66632
- if (isRecord10(value) && value.type === "doc") {
68330
+ if (isRecord12(value) && value.type === "doc") {
66633
68331
  return {
66634
68332
  type: "doc",
66635
68333
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -66638,7 +68336,7 @@ function unwrapRichTextValue(value) {
66638
68336
  return EMPTY_SITE_BANNER_BODY;
66639
68337
  }
66640
68338
  function isTipTapNodeLike(value) {
66641
- return isRecord10(value) && typeof value.type === "string";
68339
+ return isRecord12(value) && typeof value.type === "string";
66642
68340
  }
66643
68341
  function coerceTipTapNode(value) {
66644
68342
  return {
@@ -66646,9 +68344,9 @@ function coerceTipTapNode(value) {
66646
68344
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
66647
68345
  ...typeof value.text === "string" ? { text: value.text } : {},
66648
68346
  ...Array.isArray(value.marks) ? {
66649
- marks: value.marks.filter((mark) => isRecord10(mark) && typeof mark.type === "string").map((mark) => ({
68347
+ marks: value.marks.filter((mark) => isRecord12(mark) && typeof mark.type === "string").map((mark) => ({
66650
68348
  type: mark.type,
66651
- ...isRecord10(mark.attrs) ? { attrs: mark.attrs } : {}
68349
+ ...isRecord12(mark.attrs) ? { attrs: mark.attrs } : {}
66652
68350
  }))
66653
68351
  } : {}
66654
68352
  };
@@ -66831,7 +68529,7 @@ var ENTRY_REF_KEYS = [
66831
68529
  "entryId",
66832
68530
  "slug"
66833
68531
  ];
66834
- function isRecord11(value) {
68532
+ function isRecord13(value) {
66835
68533
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
66836
68534
  }
66837
68535
  function extractManualEntryRef(item) {
@@ -66839,7 +68537,7 @@ function extractManualEntryRef(item) {
66839
68537
  const trimmed = item.trim();
66840
68538
  return trimmed.length > 0 ? trimmed : null;
66841
68539
  }
66842
- if (!isRecord11(item)) return null;
68540
+ if (!isRecord13(item)) return null;
66843
68541
  for (const key of ENTRY_REF_KEYS) {
66844
68542
  const raw = item[key];
66845
68543
  if (typeof raw === "string" && raw.trim().length > 0) {
@@ -67275,15 +68973,15 @@ function defineBlockOverrideRegistrations(registrations) {
67275
68973
  }
67276
68974
 
67277
68975
  // src/rendering/overrideResolution.ts
67278
- function isRecord12(value) {
68976
+ function isRecord14(value) {
67279
68977
  return typeof value === "object" && value !== null;
67280
68978
  }
67281
68979
  function isBlockOutlineLike(value) {
67282
68980
  const id = value.id;
67283
- return typeof value.kind === "string" && (typeof id === "string" || id === null) && (typeof value.purpose === "string" || isRecord12(value.content) || isRecord12(value.draftContent) || isRecord12(value.bindings));
68981
+ return typeof value.kind === "string" && (typeof id === "string" || id === null) && (typeof value.purpose === "string" || isRecord14(value.content) || isRecord14(value.draftContent) || isRecord14(value.bindings));
67284
68982
  }
67285
68983
  function collectBlockKindsFromValue(value, usedKinds, seen) {
67286
- if (!isRecord12(value)) return;
68984
+ if (!isRecord14(value)) return;
67287
68985
  if (seen.has(value)) return;
67288
68986
  seen.add(value);
67289
68987
  if (isBlockOutlineLike(value)) {
@@ -67332,7 +69030,7 @@ function selectOverrideKeysForUsedKinds(usedKinds, entries) {
67332
69030
  return selectedKeys;
67333
69031
  }
67334
69032
  function isLazyRegistration(registration) {
67335
- return isRecord12(registration) && registration[lazyBlockOverrideSymbol] === true;
69033
+ return isRecord14(registration) && registration[lazyBlockOverrideSymbol] === true;
67336
69034
  }
67337
69035
  async function resolveOverrideComponent(registration) {
67338
69036
  if (isLazyRegistration(registration)) {