@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
@@ -880,6 +880,21 @@ var selectSourceSchema = z3.discriminatedUnion("kind", [
880
880
  function assertNeverSelectSource(value) {
881
881
  throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
882
882
  }
883
+ var visibleWhenPredicateSchema = z3.object({
884
+ field: z3.string().min(1),
885
+ equals: z3.any().optional(),
886
+ notEquals: z3.any().optional(),
887
+ oneOf: z3.array(z3.any()).optional(),
888
+ notIn: z3.array(z3.any()).optional(),
889
+ minItems: z3.number().int().nonnegative().optional(),
890
+ maxItems: z3.number().int().nonnegative().optional()
891
+ });
892
+ var visibleWhenSchema = z3.union([
893
+ visibleWhenPredicateSchema,
894
+ z3.object({
895
+ allOf: z3.array(visibleWhenPredicateSchema).min(1)
896
+ })
897
+ ]);
883
898
  var uiSchema = z3.object({
884
899
  widget: z3.string().optional(),
885
900
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -912,13 +927,7 @@ var uiSchema = z3.object({
912
927
  showValue: z3.boolean().optional(),
913
928
  pattern: z3.string().optional(),
914
929
  placeholder: z3.string().optional(),
915
- visibleWhen: z3.object({
916
- field: z3.string().min(1),
917
- equals: z3.any().optional(),
918
- notEquals: z3.any().optional(),
919
- oneOf: z3.array(z3.any()).optional(),
920
- notIn: z3.array(z3.any()).optional()
921
- }).optional(),
930
+ visibleWhen: visibleWhenSchema.optional(),
922
931
  // Modal configuration for modal and group fields
923
932
  modalConfig: z3.object({
924
933
  buttonLabel: z3.string().optional(),
@@ -3832,6 +3841,7 @@ var eventListTreatmentValues = [
3832
3841
  ];
3833
3842
  var eyebrowTreatmentValues = [
3834
3843
  "plain",
3844
+ "accent",
3835
3845
  "pill",
3836
3846
  "accent-pill",
3837
3847
  "pill-bounce",
@@ -8170,7 +8180,8 @@ var STRUCTURAL_DECLARATIONS = [
8170
8180
  ["transition", "all 200ms ease-in-out"],
8171
8181
  ["display", "inline-flex"],
8172
8182
  ["align-items", "center"],
8173
- ["justify-content", "center"]
8183
+ ["justify-content", "center"],
8184
+ ["outline", "none"]
8174
8185
  ];
8175
8186
  function generateButtonCss(options) {
8176
8187
  const { themeId, theme, buttonSystem: providedButtonSystem } = options;
@@ -8200,6 +8211,7 @@ function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
8200
8211
  out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
8201
8212
  const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
8202
8213
  if (hoverBg) out.push(hoverBg);
8214
+ out.push(variantFocusVisibleRule(variantId, themeId));
8203
8215
  const effects = variantEffectsCss(variant, themeId, tokens, theme);
8204
8216
  if (effects) out.push({ raw: effects });
8205
8217
  out.push(...variantDisabledRules(variantId, themeId));
@@ -8257,6 +8269,12 @@ function variantHoverBackgroundRule(variant, variantId, global, themeId, tokens)
8257
8269
  ["background-color", tokens.getColor(hoverToken)]
8258
8270
  ]);
8259
8271
  }
8272
+ function variantFocusVisibleRule(variantId, themeId) {
8273
+ return rule(`:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:focus-visible`, [
8274
+ ["outline", "2px solid currentColor"],
8275
+ ["outline-offset", "3px"]
8276
+ ]);
8277
+ }
8260
8278
  function variantEffectsCss(variant, themeId, tokens, theme) {
8261
8279
  if (!variant.effects) return "";
8262
8280
  const elementConfig = {
@@ -8888,6 +8906,95 @@ var joyStamp = defineButtonPersonality({
8888
8906
  }
8889
8907
  });
8890
8908
 
8909
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
8910
+ var ornateRitual = defineButtonPersonality({
8911
+ id: "ornate-ritual",
8912
+ name: "Ornate Ritual",
8913
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
8914
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
8915
+ buttonSystem: {
8916
+ global: {
8917
+ cornerStyle: "rounded",
8918
+ shadow: "none",
8919
+ textTransform: "uppercase",
8920
+ fontWeight: 600,
8921
+ borderWidth: 1,
8922
+ hoverTransform: "none",
8923
+ hoverColor: "none",
8924
+ letterSpacing: "loose"
8925
+ },
8926
+ sizes: {
8927
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
8928
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
8929
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
8930
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
8931
+ },
8932
+ variants: [
8933
+ {
8934
+ id: "primary",
8935
+ name: "Primary",
8936
+ enabled: true,
8937
+ priority: 1,
8938
+ background: { type: "solid", colorToken: "primary" },
8939
+ textColorToken: "primaryForeground",
8940
+ borderRadius: "rounded-md",
8941
+ border: { widthClass: "border", colorToken: "primary" },
8942
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8943
+ effects: {
8944
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
8945
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8946
+ }
8947
+ },
8948
+ {
8949
+ id: "secondary",
8950
+ name: "Secondary",
8951
+ enabled: true,
8952
+ priority: 2,
8953
+ background: { type: "solid", colorToken: "secondary" },
8954
+ textColorToken: "primaryForeground",
8955
+ borderRadius: "rounded-md",
8956
+ border: { widthClass: "border", colorToken: "primary" },
8957
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8958
+ effects: {
8959
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8960
+ }
8961
+ },
8962
+ {
8963
+ id: "outline",
8964
+ name: "Outline",
8965
+ enabled: true,
8966
+ priority: 3,
8967
+ background: { type: "transparent" },
8968
+ textColorToken: "primary",
8969
+ borderRadius: "rounded-md",
8970
+ border: { widthClass: "border", colorToken: "primary" },
8971
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8972
+ effects: {
8973
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
8974
+ }
8975
+ },
8976
+ {
8977
+ id: "ghost",
8978
+ name: "Ghost",
8979
+ enabled: true,
8980
+ priority: 3,
8981
+ background: { type: "transparent" },
8982
+ textColorToken: "accent",
8983
+ borderRadius: "rounded-none",
8984
+ sizes: {
8985
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
8986
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
8987
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
8988
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
8989
+ },
8990
+ effects: {
8991
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
8992
+ }
8993
+ }
8994
+ ]
8995
+ }
8996
+ });
8997
+
8891
8998
  // ../theme-core/src/buttons/personalities/pebble.ts
8892
8999
  var pebble = defineButtonPersonality({
8893
9000
  id: "pebble",
@@ -9161,7 +9268,8 @@ var buttonPersonalities = [
9161
9268
  inkStamp,
9162
9269
  brushedWash,
9163
9270
  showtimePill,
9164
- joyStamp
9271
+ joyStamp,
9272
+ ornateRitual
9165
9273
  ];
9166
9274
  var personalitiesById = new Map(
9167
9275
  buttonPersonalities.map((p) => [p.id, p])
@@ -10156,7 +10264,7 @@ function rgbColorValue(token) {
10156
10264
  if (alpha === void 0) {
10157
10265
  return `rgb(var(${cssVar}))`;
10158
10266
  }
10159
- return `rgba(var(${cssVar}), ${alpha})`;
10267
+ return `rgb(var(${cssVar}) / ${alpha})`;
10160
10268
  }
10161
10269
  function backgroundColorStyle(token) {
10162
10270
  return { backgroundColor: rgbColorValue(token) };
@@ -11285,6 +11393,28 @@ var warmDarkEmber = definePaletteVariant({
11285
11393
  { name: "border", hex: "#894e31" }
11286
11394
  ]
11287
11395
  });
11396
+ var warmDarkKirtanGold = definePaletteVariant({
11397
+ id: "warm-dark-kirtan-gold",
11398
+ name: "Warm Dark \u2014 Kirtan Gold",
11399
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
11400
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
11401
+ mode: "dark",
11402
+ colors: [
11403
+ { name: "primary", hex: "#ffcdb2" },
11404
+ { name: "secondary", hex: "#b5838d" },
11405
+ { name: "accent", hex: "#e5989b" },
11406
+ { name: "success", hex: "#8fbf8f" },
11407
+ { name: "warning", hex: "#f2b86b" },
11408
+ { name: "destructive", hex: "#d96b6b" },
11409
+ { name: "background", hex: "#403944" },
11410
+ { name: "surface", hex: "#403944" },
11411
+ { name: "surfaceAlt", hex: "#372f3b" },
11412
+ { name: "muted", hex: "#4d4550" },
11413
+ { name: "text", hex: "#e6d2d5" },
11414
+ { name: "primaryForeground", hex: "#403944" },
11415
+ { name: "border", hex: "#8d747a" }
11416
+ ]
11417
+ });
11288
11418
 
11289
11419
  // ../theme-core/src/palette/variants/index.ts
11290
11420
  var paletteVariants = [
@@ -11308,7 +11438,8 @@ var paletteVariants = [
11308
11438
  softNaturalWatercolor,
11309
11439
  softNaturalLilac,
11310
11440
  // Warm-dark family (dark mode)
11311
- warmDarkEmber
11441
+ warmDarkEmber,
11442
+ warmDarkKirtanGold
11312
11443
  ];
11313
11444
  var paletteVariantsById = new Map(
11314
11445
  paletteVariants.map((v) => [v.id, v])
@@ -12877,9 +13008,125 @@ function headerConfigurationKey(configuration) {
12877
13008
  function asFooterLookId(value) {
12878
13009
  return value;
12879
13010
  }
12880
- var guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
13011
+ function asFooterLayoutId(value) {
13012
+ return value;
13013
+ }
13014
+ function asFooterStyleId(value) {
13015
+ return value;
13016
+ }
13017
+ var guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
13018
+ var footerLayoutCatalog = defineExactCatalog()([
13019
+ {
13020
+ id: asFooterLayoutId("identity"),
13021
+ label: "Identity",
13022
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
13023
+ },
13024
+ {
13025
+ id: asFooterLayoutId("centered"),
13026
+ label: "Centered",
13027
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
13028
+ maxRecommendedNavDensity: "sparse"
13029
+ },
13030
+ {
13031
+ id: asFooterLayoutId("split"),
13032
+ label: "Split",
13033
+ description: "Navigation and brand signoff separated into a wider split footer.",
13034
+ requiresFooterNav: true,
13035
+ maxRecommendedNavDensity: "balanced"
13036
+ },
13037
+ {
13038
+ id: asFooterLayoutId("columns"),
13039
+ label: "Columns",
13040
+ description: "Grouped footer navigation columns with a supporting bottom line.",
13041
+ requiresFooterNav: true,
13042
+ requiresFooterNavGroups: true
13043
+ }
13044
+ ]);
13045
+ var footerStyleCatalog = defineExactCatalog()([
13046
+ {
13047
+ id: asFooterStyleId("quiet"),
13048
+ label: "Quiet",
13049
+ description: "Lightweight, practical footer treatment."
13050
+ },
13051
+ {
13052
+ id: asFooterStyleId("calm"),
13053
+ label: "Calm",
13054
+ description: "Soft centered treatment with restrained dividers."
13055
+ },
13056
+ {
13057
+ id: asFooterStyleId("editorial"),
13058
+ label: "Editorial",
13059
+ description: "Text-forward treatment with fine-line structure."
13060
+ },
13061
+ {
13062
+ id: asFooterStyleId("brand-band"),
13063
+ label: "Brand band",
13064
+ description: "High-contrast brand treatment with a stronger bottom bar."
13065
+ }
13066
+ ]);
13067
+ var footerLayoutsById = new Map(
13068
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
13069
+ );
13070
+ var footerStylesById = new Map(
13071
+ footerStyleCatalog.map((style) => [style.id, style])
13072
+ );
13073
+ function identityQuietFooter(theme) {
13074
+ return {
13075
+ ...theme.footer,
13076
+ variant: "simple",
13077
+ maxWidth: "container",
13078
+ background: {
13079
+ type: "color",
13080
+ color: "surface"
13081
+ },
13082
+ navStyle: "minimal",
13083
+ navWeight: "regular",
13084
+ navColor: "text",
13085
+ navLinkStyle: {
13086
+ typography: "body",
13087
+ fontWeight: "regular",
13088
+ textTransform: "none",
13089
+ italic: false,
13090
+ colorToken: "text",
13091
+ hoverColorToken: "primary",
13092
+ padding: "none",
13093
+ borderRadius: "none"
13094
+ },
13095
+ navLayout: {
13096
+ layout: "inline-wrap",
13097
+ align: "start",
13098
+ gapX: "default",
13099
+ gapY: "tight"
13100
+ },
13101
+ logo: {
13102
+ showLogo: true,
13103
+ showLogoText: true,
13104
+ placement: "left",
13105
+ size: "sm",
13106
+ align: "start"
13107
+ },
13108
+ bottomBar: {
13109
+ enabled: false,
13110
+ fullBleed: false,
13111
+ textAlign: "left",
13112
+ paddingX: "default",
13113
+ paddingY: "compact",
13114
+ borderTop: {
13115
+ width: "none"
13116
+ }
13117
+ }
13118
+ };
13119
+ }
12881
13120
  function mutedGroundingFooter(theme) {
12882
- return theme.footer;
13121
+ return {
13122
+ ...identityQuietFooter(theme),
13123
+ background: theme.footer.background,
13124
+ navStyle: theme.footer.navStyle,
13125
+ navColor: theme.footer.navColor,
13126
+ navWeight: theme.footer.navWeight,
13127
+ navLinkStyle: theme.footer.navLinkStyle,
13128
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
13129
+ };
12883
13130
  }
12884
13131
  function brandTwoBandFooter(theme) {
12885
13132
  return {
@@ -12984,6 +13231,53 @@ function centeredCalmFooter(theme) {
12984
13231
  }
12985
13232
  };
12986
13233
  }
13234
+ function splitEditorialFooter(theme) {
13235
+ return {
13236
+ ...theme.footer,
13237
+ variant: "split",
13238
+ maxWidth: "container",
13239
+ background: {
13240
+ type: "color",
13241
+ color: "surface"
13242
+ },
13243
+ navStyle: "minimal",
13244
+ navWeight: "regular",
13245
+ navColor: "text",
13246
+ navLinkStyle: {
13247
+ typography: "body",
13248
+ fontWeight: "regular",
13249
+ textTransform: "none",
13250
+ italic: false,
13251
+ colorToken: "text",
13252
+ hoverColorToken: "primary",
13253
+ padding: "none",
13254
+ borderRadius: "none"
13255
+ },
13256
+ navLayout: {
13257
+ layout: "inline-wrap",
13258
+ align: "start",
13259
+ gapX: "relaxed",
13260
+ gapY: "tight"
13261
+ },
13262
+ logo: {
13263
+ showLogo: true,
13264
+ showLogoText: true,
13265
+ placement: "right",
13266
+ size: "sm",
13267
+ align: "end"
13268
+ },
13269
+ bottomBar: {
13270
+ enabled: true,
13271
+ fullBleed: false,
13272
+ textAlign: "left",
13273
+ paddingX: "default",
13274
+ paddingY: "compact",
13275
+ borderTop: {
13276
+ width: "thin"
13277
+ }
13278
+ }
13279
+ };
13280
+ }
12987
13281
  function editorialColumnsFooter(theme) {
12988
13282
  return {
12989
13283
  ...theme.footer,
@@ -13026,25 +13320,47 @@ function editorialColumnsFooter(theme) {
13026
13320
  };
13027
13321
  }
13028
13322
  var footerLookCatalog = defineExactCatalog()([
13323
+ {
13324
+ id: asFooterLookId("footer-identity-quiet"),
13325
+ label: "Identity footer",
13326
+ layoutId: asFooterLayoutId("identity"),
13327
+ styleId: asFooterStyleId("quiet"),
13328
+ compile: identityQuietFooter
13329
+ },
13029
13330
  {
13030
13331
  id: asFooterLookId("footer-muted-grounding"),
13031
13332
  label: "Muted grounding footer",
13333
+ layoutId: asFooterLayoutId("identity"),
13334
+ styleId: asFooterStyleId("quiet"),
13335
+ hiddenFromLayoutStyleControls: true,
13032
13336
  compile: mutedGroundingFooter
13033
13337
  },
13034
13338
  {
13035
13339
  id: asFooterLookId("footer-centered-calm"),
13036
13340
  label: "Centered calm footer",
13341
+ layoutId: asFooterLayoutId("centered"),
13342
+ styleId: asFooterStyleId("calm"),
13037
13343
  compile: centeredCalmFooter
13038
13344
  },
13345
+ {
13346
+ id: asFooterLookId("footer-split-editorial"),
13347
+ label: "Split editorial footer",
13348
+ layoutId: asFooterLayoutId("split"),
13349
+ styleId: asFooterStyleId("editorial"),
13350
+ compile: splitEditorialFooter
13351
+ },
13039
13352
  {
13040
13353
  id: asFooterLookId("footer-editorial-columns"),
13041
13354
  label: "Editorial columns footer",
13355
+ layoutId: asFooterLayoutId("columns"),
13356
+ styleId: asFooterStyleId("editorial"),
13042
13357
  compile: editorialColumnsFooter
13043
13358
  },
13044
13359
  {
13045
13360
  id: asFooterLookId("site-footer-brand-two-band"),
13046
13361
  label: "Two-band brand footer",
13047
- maxRecommendedNavDensity: "balanced",
13362
+ layoutId: asFooterLayoutId("split"),
13363
+ styleId: asFooterStyleId("brand-band"),
13048
13364
  allowedContentPresence: ["default-footer", "default-and-blocks"],
13049
13365
  compile: brandTwoBandFooter
13050
13366
  }
@@ -13247,6 +13563,30 @@ var luxeContrastTypography = {
13247
13563
  },
13248
13564
  scale: "spacious"
13249
13565
  };
13566
+ var kirtanOrnateTypography = {
13567
+ body: {
13568
+ family: "Jost, system-ui, sans-serif",
13569
+ size: "md",
13570
+ weight: "regular",
13571
+ lineHeight: "relaxed",
13572
+ letterSpacing: "normal"
13573
+ },
13574
+ headings: {
13575
+ default: {
13576
+ family: "Marcellus, Georgia, serif",
13577
+ weight: "regular",
13578
+ lineHeight: "normal",
13579
+ letterSpacing: "normal",
13580
+ colorToken: "primary",
13581
+ italic: null,
13582
+ case: null
13583
+ },
13584
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13585
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13586
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
13587
+ },
13588
+ scale: "spacious"
13589
+ };
13250
13590
  var boldDisplayTypography = {
13251
13591
  body: {
13252
13592
  family: "Manrope, system-ui, sans-serif",
@@ -13281,16 +13621,16 @@ var originalJoyTypography = {
13281
13621
  },
13282
13622
  headings: {
13283
13623
  default: {
13284
- family: "Bricolage Grotesque, system-ui, sans-serif",
13285
- weight: "bold",
13624
+ family: "Lobster, cursive",
13625
+ weight: "regular",
13286
13626
  lineHeight: "normal",
13287
- letterSpacing: "tight",
13627
+ letterSpacing: "normal",
13288
13628
  italic: null,
13289
13629
  case: null
13290
13630
  },
13291
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13292
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13293
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
13631
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13632
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13633
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
13294
13634
  },
13295
13635
  scale: "balanced"
13296
13636
  };
@@ -13355,6 +13695,32 @@ var typographyPresets = [
13355
13695
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13356
13696
  typography: luxeContrastTypography
13357
13697
  }),
13698
+ defineTypographyPreset({
13699
+ id: "typography-preset:kirtan-ornate",
13700
+ name: "Kirtan Ornate",
13701
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
13702
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
13703
+ recommendedFonts: {
13704
+ body: ["Jost", "Manrope", "Inter"],
13705
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
13706
+ },
13707
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13708
+ typography: kirtanOrnateTypography,
13709
+ heroTypography: {
13710
+ headlineSize: "6xl",
13711
+ headlineLineHeight: "normal",
13712
+ subheadlineSize: "xl",
13713
+ subheadlineLineHeight: "relaxed",
13714
+ microHeadlineSize: "5xl",
13715
+ microHeadlineLineHeight: "normal",
13716
+ microSubheadlineSize: "lg",
13717
+ microSubheadlineLineHeight: "relaxed",
13718
+ responsive: {
13719
+ tablet: { headlineSize: "5xl" },
13720
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
13721
+ }
13722
+ }
13723
+ }),
13358
13724
  defineTypographyPreset({
13359
13725
  id: "typography-preset:bold-display",
13360
13726
  name: "Bold Display",
@@ -13384,11 +13750,11 @@ var typographyPresets = [
13384
13750
  defineTypographyPreset({
13385
13751
  id: "typography-preset:original-joy",
13386
13752
  name: "Original Joy",
13387
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
13388
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
13753
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
13754
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
13389
13755
  recommendedFonts: {
13390
13756
  body: ["DM Sans", "Inter", "Manrope"],
13391
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
13757
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
13392
13758
  },
13393
13759
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13394
13760
  typography: originalJoyTypography,
@@ -13412,87 +13778,482 @@ var typographyPresetsById = new Map(
13412
13778
  typographyPresets.map((preset2) => [preset2.id, preset2])
13413
13779
  );
13414
13780
 
13415
- // ../theme-core/src/site-styles/curatedSiteStyles.ts
13416
- var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
13417
- var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
13418
- var curatedSiteStyleIdValues = [
13419
- "site-style:calm-studio",
13420
- "site-style:clear-professional",
13421
- "site-style:warm-editorial",
13422
- "site-style:bright-community",
13423
- "site-style:quiet-luxury",
13424
- "site-style:practical-services",
13425
- "site-style:quiet-practice",
13426
- "site-style:personal-retreat-journal",
13427
- "site-style:tactile-workshop",
13428
- "site-style:modern-wellness",
13429
- "site-style:clarity-zen-blue",
13430
- SOFT_EARTH_SITE_STYLE_ID_VALUE,
13431
- "site-style:bold-launch",
13432
- "site-style:south-west-twerk-school",
13433
- "site-style:original-joy"
13434
- ];
13435
- var quietBudget = {
13436
- accentDensity: "low",
13437
- panelDensity: "medium",
13438
- transitionMix: "quiet",
13439
- primaryCtaLimit: 2,
13440
- mediaDensity: "medium",
13441
- decorativeRepetition: "low"
13442
- };
13443
- var balancedBudget = {
13444
- accentDensity: "medium",
13445
- panelDensity: "medium",
13446
- transitionMix: "balanced",
13447
- primaryCtaLimit: 3,
13448
- mediaDensity: "medium",
13449
- decorativeRepetition: "medium"
13450
- };
13451
- var expressiveBudget = {
13452
- accentDensity: "high",
13453
- panelDensity: "high",
13454
- transitionMix: "expressive",
13455
- primaryCtaLimit: 3,
13456
- mediaDensity: "high",
13457
- decorativeRepetition: "medium"
13458
- };
13459
- var expressiveUnderlineInputs = {
13460
- base: {
13461
- background: { type: "transparent" },
13462
- textColorToken: "text",
13463
- border: {
13464
- widthClass: "border-2",
13465
- colorToken: "border",
13466
- style: "underline"
13781
+ // ../theme-core/src/site-styles/designState.ts
13782
+ import { z as z25 } from "zod";
13783
+ var themeV2DesignStateSchemaVersion = 1;
13784
+ var designResolutionPolicySchema = z25.enum(["generated", "user", "admin", "sdk"]);
13785
+ var runtimeStyleFieldNameSchema = z25.enum(themeV2RuntimeStyleFieldNames);
13786
+ var nonEmptyRuntimeStyleFieldNamesSchema = z25.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
13787
+ fields3[0],
13788
+ ...fields3.slice(1)
13789
+ ]);
13790
+ var heroLegibilityStrategySchema = z25.enum([
13791
+ "none",
13792
+ "scrim-gradient",
13793
+ "solid-panel"
13794
+ ]);
13795
+ var heroCompositionIntentSchema = z25.enum([
13796
+ "center",
13797
+ "bottom-left"
13798
+ ]);
13799
+ var heroTypographyScaleIntentSchema = z25.enum([
13800
+ "quiet",
13801
+ "editorial",
13802
+ "display",
13803
+ "poster"
13804
+ ]);
13805
+ var sectionHeightIntentSchema = z25.enum([
13806
+ "default",
13807
+ "banner",
13808
+ "hero",
13809
+ "immersive"
13810
+ ]);
13811
+ var imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
13812
+ var imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
13813
+ var imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
13814
+ z25.object({ kind: z25.literal("none") }).strict(),
13815
+ z25.object({
13816
+ kind: z25.literal("brand-scrim"),
13817
+ token: z25.enum(["primary", "secondary", "accent"]),
13818
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13819
+ }).strict(),
13820
+ z25.object({
13821
+ kind: z25.literal("brand-wash"),
13822
+ token: z25.enum(["primary", "secondary", "accent"]),
13823
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13824
+ }).strict(),
13825
+ z25.object({
13826
+ kind: z25.literal("neutral-scrim"),
13827
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13828
+ }).strict(),
13829
+ z25.object({
13830
+ kind: z25.literal("neutral-wash"),
13831
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13832
+ }).strict(),
13833
+ z25.object({
13834
+ kind: z25.literal("solid-panel"),
13835
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13836
+ }).strict()
13837
+ ]);
13838
+ var testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
13839
+ var tileTreatmentSchema = z25.enum(tileTreatmentValues);
13840
+ var eventListTreatmentSchema = z25.enum(eventListTreatmentValues);
13841
+ var eyebrowTreatmentSchema = z25.enum(eyebrowTreatmentValues);
13842
+ function uniqueNonEmpty(values) {
13843
+ const uniqueValues = [...new Set(values)];
13844
+ const firstValue = uniqueValues[0];
13845
+ if (!firstValue) {
13846
+ throw new Error("Expected at least one Theme V2 design state option.");
13847
+ }
13848
+ return [firstValue, ...uniqueValues.slice(1)];
13849
+ }
13850
+ var userPanelTreatments = uniqueNonEmpty(
13851
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
13852
+ );
13853
+ var userFlushTreatments = uniqueNonEmpty(
13854
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
13855
+ );
13856
+ var userFlushBleeds = uniqueNonEmpty(
13857
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
13858
+ );
13859
+ var contentFrameIntentSchema = z25.discriminatedUnion("kind", [
13860
+ z25.object({ kind: z25.literal("plain") }).strict(),
13861
+ z25.object({
13862
+ kind: z25.literal("panel"),
13863
+ treatment: z25.enum(userPanelTreatments)
13864
+ }).strict(),
13865
+ z25.object({
13866
+ kind: z25.literal("flush-panel"),
13867
+ treatment: z25.enum(userFlushTreatments),
13868
+ bleed: z25.enum(userFlushBleeds)
13869
+ }).strict()
13870
+ ]);
13871
+ var blockDesignPlanSchema = z25.object({
13872
+ blockId: z25.string().min(1).transform(asDesignBlockId),
13873
+ blockKind: z25.string().min(1),
13874
+ purpose: z25.string().min(1),
13875
+ sectionSurface: z25.enum(userDesignOptionCatalog.sectionSurfaces),
13876
+ contentFrame: contentFrameIntentSchema,
13877
+ itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
13878
+ transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
13879
+ emphasis: z25.enum(userDesignOptionCatalog.emphases),
13880
+ sectionHeight: sectionHeightIntentSchema.optional(),
13881
+ heroLegibility: heroLegibilityStrategySchema.optional(),
13882
+ heroComposition: heroCompositionIntentSchema.optional(),
13883
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
13884
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
13885
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
13886
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
13887
+ tileTreatment: tileTreatmentSchema.optional(),
13888
+ eventListTreatment: eventListTreatmentSchema.optional(),
13889
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
13890
+ }).strict();
13891
+ var styleAuthoritySchema = z25.discriminatedUnion("kind", [
13892
+ z25.object({
13893
+ kind: z25.literal("theme-v2"),
13894
+ source: designResolutionPolicySchema,
13895
+ siteStyleId: z25.string().min(1).transform(asSiteStyleId),
13896
+ templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
13897
+ templateVersion: z25.number().int().nonnegative(),
13898
+ resolverVersion: z25.number().int().nonnegative()
13899
+ }).strict(),
13900
+ z25.object({
13901
+ kind: z25.literal("legacy-raw"),
13902
+ reason: z25.enum(["pre-theme-v2", "manual-runtime-fields"])
13903
+ }).strict(),
13904
+ z25.object({
13905
+ kind: z25.literal("advanced-detached"),
13906
+ reason: z25.literal("detached-custom-runtime-fields")
13907
+ }).strict()
13908
+ ]);
13909
+ var blockRuntimeStyleAuthoritySchema = z25.object({
13910
+ unit: z25.literal("block-runtime-fields"),
13911
+ blockId: z25.string().min(1).transform(asDesignBlockId),
13912
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
13913
+ authority: styleAuthoritySchema
13914
+ }).strict();
13915
+ var persistedPageDesignStateV1Schema = z25.object({
13916
+ schemaVersion: z25.literal(themeV2DesignStateSchemaVersion),
13917
+ siteStyleId: z25.string().min(1).transform(asSiteStyleId),
13918
+ templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
13919
+ templateVersion: z25.number().int().nonnegative(),
13920
+ resolverVersion: z25.number().int().nonnegative(),
13921
+ rhythmPresetId: z25.string().min(1),
13922
+ blocks: z25.array(blockDesignPlanSchema),
13923
+ styleAuthorities: z25.array(blockRuntimeStyleAuthoritySchema)
13924
+ }).strict();
13925
+
13926
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
13927
+ function defineDesignRuntimeRules(rules) {
13928
+ return rules;
13929
+ }
13930
+ function defineComponentRuntimeRules(rules) {
13931
+ return rules;
13932
+ }
13933
+ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
13934
+ sectionSurfaces: {
13935
+ base: {},
13936
+ "muted-band": {
13937
+ background: {
13938
+ type: "color",
13939
+ color: "muted"
13940
+ }
13467
13941
  },
13468
- corners: "square",
13469
- shadow: null,
13470
- spacing: "compact",
13471
- fontSize: "base"
13472
- },
13473
- label: {
13474
- textColorToken: "primary",
13475
- fontWeight: "black",
13476
- fontSize: "xs",
13477
- textTransform: "uppercase",
13478
- letterSpacing: "widest",
13479
- opacity: 1
13480
- },
13481
- focus: {
13482
- ringColorToken: "secondary",
13483
- ringWidth: "0",
13484
- borderColorToken: "secondary"
13942
+ "accent-band": {
13943
+ background: {
13944
+ type: "color",
13945
+ color: "primary"
13946
+ }
13947
+ },
13948
+ "brand-depth-band": {
13949
+ background: {
13950
+ type: "color",
13951
+ color: "primary-800"
13952
+ }
13953
+ },
13954
+ "hero-image": {
13955
+ background: {
13956
+ type: "image",
13957
+ opacity: 1,
13958
+ position: "center center",
13959
+ ...uniformSectionForeground("text")
13960
+ }
13961
+ }
13485
13962
  },
13486
- error: {
13487
- borderColorToken: "destructive",
13488
- textColorToken: "destructive"
13963
+ heroLegibility: {
13964
+ "scrim-gradient": {
13965
+ type: "gradient",
13966
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
13967
+ opacity: 1
13968
+ },
13969
+ "solid-panel": {
13970
+ type: "color",
13971
+ color: "surface",
13972
+ opacity: 0.88
13973
+ }
13489
13974
  },
13490
- disabled: {
13491
- backgroundColorToken: "surface",
13975
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
13976
+ });
13977
+ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
13978
+ panelFrames: {
13979
+ inset: {
13980
+ spacing: "comfortable",
13981
+ rounded: "xl",
13982
+ raised: false,
13983
+ background: {
13984
+ type: "color",
13985
+ color: "surfaceAlt",
13986
+ textColor: "text"
13987
+ }
13988
+ },
13989
+ raised: {
13990
+ spacing: "comfortable",
13991
+ rounded: "xl",
13992
+ raised: true,
13993
+ background: {
13994
+ type: "color",
13995
+ color: "surfaceAlt",
13996
+ textColor: "text"
13997
+ }
13998
+ },
13999
+ editorial: {
14000
+ spacing: "medium",
14001
+ rounded: "xl",
14002
+ raised: false,
14003
+ background: {
14004
+ type: "color",
14005
+ color: "surface",
14006
+ textColor: "text"
14007
+ }
14008
+ }
14009
+ },
14010
+ flushFrames: {
14011
+ "media-panel": {
14012
+ fullWidth: true,
14013
+ spacing: "none",
14014
+ rounded: "none",
14015
+ raised: false
14016
+ }
14017
+ },
14018
+ itemSurfaces: {
14019
+ none: null,
14020
+ default: {
14021
+ spacing: "medium",
14022
+ rounded: "lg",
14023
+ raised: false
14024
+ },
14025
+ flat: {
14026
+ spacing: "medium",
14027
+ rounded: "lg",
14028
+ raised: false
14029
+ },
14030
+ outlined: {
14031
+ spacing: "medium",
14032
+ rounded: "lg",
14033
+ raised: false,
14034
+ border: {
14035
+ enabled: true,
14036
+ width: "1",
14037
+ colorToken: "border"
14038
+ }
14039
+ },
14040
+ raised: {
14041
+ spacing: "medium",
14042
+ rounded: "xl",
14043
+ raised: true
14044
+ },
14045
+ inset: {
14046
+ treatment: "soft-panel",
14047
+ spacing: "comfortable",
14048
+ rounded: "xl",
14049
+ raised: false,
14050
+ border: {
14051
+ enabled: false
14052
+ },
14053
+ background: {
14054
+ type: "color",
14055
+ color: "surfaceAlt",
14056
+ textColor: "text"
14057
+ }
14058
+ },
14059
+ editorial: {
14060
+ // Boxless open column with a short rule on top; the visual treatment
14061
+ // lives in blocks-static/card-treatments.css.
14062
+ treatment: "editorial-rule",
14063
+ spacing: "none",
14064
+ rounded: "none",
14065
+ raised: false,
14066
+ border: {
14067
+ enabled: false
14068
+ }
14069
+ },
14070
+ "color-blocked": {
14071
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
14072
+ // (by position) and staggered offset live in
14073
+ // blocks-static/card-treatments.css; here we set the shared shape:
14074
+ // generous padding, large radius, no border, flat (no shadow).
14075
+ treatment: "color-blocked",
14076
+ spacing: "spacious",
14077
+ rounded: "2xl",
14078
+ raised: false,
14079
+ border: {
14080
+ enabled: false
14081
+ }
14082
+ }
14083
+ }
14084
+ });
14085
+ function uniformSectionForeground(token) {
14086
+ return {
14087
+ textColor: token,
14088
+ headingColor: token,
14089
+ linkColor: token,
14090
+ supportingColor: token
14091
+ };
14092
+ }
14093
+
14094
+ // ../theme-core/src/site-styles/curatedSiteStyles.ts
14095
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
14096
+ var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
14097
+ var curatedSiteStyleIdValues = [
14098
+ "site-style:calm-studio",
14099
+ "site-style:clear-professional",
14100
+ "site-style:warm-editorial",
14101
+ "site-style:bright-community",
14102
+ "site-style:quiet-luxury",
14103
+ "site-style:practical-services",
14104
+ "site-style:quiet-practice",
14105
+ "site-style:personal-retreat-journal",
14106
+ "site-style:tactile-workshop",
14107
+ "site-style:modern-wellness",
14108
+ "site-style:clarity-zen-blue",
14109
+ SOFT_EARTH_SITE_STYLE_ID_VALUE,
14110
+ "site-style:bold-launch",
14111
+ "site-style:south-west-twerk-school",
14112
+ "site-style:kirtan-ornate",
14113
+ "site-style:original-joy"
14114
+ ];
14115
+ var quietBudget = {
14116
+ accentDensity: "low",
14117
+ panelDensity: "medium",
14118
+ transitionMix: "quiet",
14119
+ primaryCtaLimit: 2,
14120
+ mediaDensity: "medium",
14121
+ decorativeRepetition: "low"
14122
+ };
14123
+ var balancedBudget = {
14124
+ accentDensity: "medium",
14125
+ panelDensity: "medium",
14126
+ transitionMix: "balanced",
14127
+ primaryCtaLimit: 3,
14128
+ mediaDensity: "medium",
14129
+ decorativeRepetition: "medium"
14130
+ };
14131
+ var expressiveBudget = {
14132
+ accentDensity: "high",
14133
+ panelDensity: "high",
14134
+ transitionMix: "expressive",
14135
+ primaryCtaLimit: 3,
14136
+ mediaDensity: "high",
14137
+ decorativeRepetition: "medium"
14138
+ };
14139
+ var kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
14140
+ ...defaultDesignRuntimeRules,
14141
+ defaultEyebrowTreatment: "accent",
14142
+ sectionSurfaces: {
14143
+ ...defaultDesignRuntimeRules.sectionSurfaces,
14144
+ "muted-band": {
14145
+ background: {
14146
+ type: "color",
14147
+ color: "muted"
14148
+ },
14149
+ foreground: {
14150
+ textColor: "text",
14151
+ headingColor: "primary",
14152
+ linkColor: "primary",
14153
+ supportingColor: "text"
14154
+ }
14155
+ },
14156
+ "brand-depth-band": {
14157
+ background: {
14158
+ type: "color",
14159
+ color: "primary-800"
14160
+ },
14161
+ foreground: {
14162
+ textColor: "text",
14163
+ headingColor: "primary",
14164
+ linkColor: "primary",
14165
+ supportingColor: "text"
14166
+ }
14167
+ },
14168
+ "hero-image": {
14169
+ background: {
14170
+ type: "image",
14171
+ opacity: 1,
14172
+ position: "center center"
14173
+ },
14174
+ foreground: {
14175
+ textColor: "text",
14176
+ headingColor: "primary",
14177
+ linkColor: "primary",
14178
+ supportingColor: "text"
14179
+ }
14180
+ }
14181
+ }
14182
+ });
14183
+ var expressiveUnderlineInputs = {
14184
+ base: {
14185
+ background: { type: "transparent" },
14186
+ textColorToken: "text",
14187
+ border: {
14188
+ widthClass: "border-2",
14189
+ colorToken: "border",
14190
+ style: "underline"
14191
+ },
14192
+ corners: "square",
14193
+ shadow: null,
14194
+ spacing: "compact",
14195
+ fontSize: "base"
14196
+ },
14197
+ label: {
14198
+ textColorToken: "primary",
14199
+ fontWeight: "black",
14200
+ fontSize: "xs",
14201
+ textTransform: "uppercase",
14202
+ letterSpacing: "widest",
14203
+ opacity: 1
14204
+ },
14205
+ focus: {
14206
+ ringColorToken: "secondary",
14207
+ ringWidth: "0",
14208
+ borderColorToken: "secondary"
14209
+ },
14210
+ error: {
14211
+ borderColorToken: "destructive",
14212
+ textColorToken: "destructive"
14213
+ },
14214
+ disabled: {
14215
+ backgroundColorToken: "surface",
13492
14216
  textColorToken: "text",
13493
14217
  opacity: 0.6
13494
14218
  }
13495
14219
  };
14220
+ var ornateDarkInputs = {
14221
+ base: {
14222
+ background: { type: "solid", colorToken: "surfaceAlt" },
14223
+ textColorToken: "text",
14224
+ border: {
14225
+ widthClass: "border",
14226
+ colorToken: "primary/45",
14227
+ style: "all"
14228
+ },
14229
+ corners: "square",
14230
+ shadow: null,
14231
+ spacing: "medium",
14232
+ fontSize: "base"
14233
+ },
14234
+ label: {
14235
+ textColorToken: "primary",
14236
+ fontWeight: "semibold",
14237
+ fontSize: "xs",
14238
+ textTransform: "uppercase",
14239
+ letterSpacing: "wider",
14240
+ opacity: 1
14241
+ },
14242
+ focus: {
14243
+ ringColorToken: "primary/18",
14244
+ ringWidth: "2",
14245
+ borderColorToken: "primary/70"
14246
+ },
14247
+ error: {
14248
+ borderColorToken: "destructive",
14249
+ textColorToken: "destructive"
14250
+ },
14251
+ disabled: {
14252
+ backgroundColorToken: "muted",
14253
+ textColorToken: "mutedText",
14254
+ opacity: 0.6
14255
+ }
14256
+ };
13496
14257
  function uniqueContentFrameKinds() {
13497
14258
  const kinds = [
13498
14259
  ...new Set(
@@ -13550,6 +14311,7 @@ function defineCuratedSiteStyle(input) {
13550
14311
  // clean/minimal styles default to none.
13551
14312
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
13552
14313
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
14314
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
13553
14315
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
13554
14316
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
13555
14317
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -14500,6 +15262,80 @@ var curatedSiteStyles = [
14500
15262
  paletteChoice("high-contrast-ink")
14501
15263
  ]
14502
15264
  }),
15265
+ defineCuratedSiteStyle({
15266
+ id: "site-style:kirtan-ornate",
15267
+ name: "Kirtan Ornate",
15268
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
15269
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
15270
+ 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.",
15271
+ selectionKeywordRules: [
15272
+ { kind: "word", value: "kirtan" },
15273
+ { kind: "word", value: "chanting" },
15274
+ { kind: "word", value: "ceremony" },
15275
+ { kind: "word", value: "devotional" }
15276
+ ],
15277
+ tokenRecipes: {
15278
+ palette: "brand-led",
15279
+ contrast: "strong",
15280
+ radius: "soft",
15281
+ shadow: "subtle",
15282
+ typography: "serif-editorial",
15283
+ spacing: "airy",
15284
+ motion: "subtle"
15285
+ },
15286
+ compositionBudget: expressiveBudget,
15287
+ typographyPresetChoices: [
15288
+ typographyChoice("typography-preset:kirtan-ornate"),
15289
+ typographyChoice("typography-preset:luxe-contrast"),
15290
+ typographyChoice("typography-preset:editorial-serif")
15291
+ ],
15292
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
15293
+ themeOverrides: {
15294
+ accordions: warmInsetAccordionSystem,
15295
+ cards: originalJoyCardSystem,
15296
+ testimonialQuote: serifDisplayQuote,
15297
+ bodyText: {
15298
+ intro: {
15299
+ paragraphSize: "editorial",
15300
+ headingSize: "editorial"
15301
+ }
15302
+ },
15303
+ inputs: ornateDarkInputs
15304
+ },
15305
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
15306
+ recommendedAppearancePresetIds: [
15307
+ "hero-brand-scrim-fixed-frame",
15308
+ "media-text-quiet-story",
15309
+ "events-lined-panel",
15310
+ "schedule-details-brand-depth",
15311
+ "testimonials-statement-cards",
15312
+ "contact-form-panel"
15313
+ ],
15314
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
15315
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
15316
+ recommendedHeaderStyleChoicesByLayout: {
15317
+ floating: [
15318
+ headerStyleChoice("minimal-surface"),
15319
+ headerStyleChoice("split-glass"),
15320
+ headerStyleChoice("glass")
15321
+ ]
15322
+ },
15323
+ recommendedHeaderLookIds: ["minimal-transparent"],
15324
+ recommendedFooterLookIds: [
15325
+ "site-footer-brand-two-band",
15326
+ "footer-muted-grounding"
15327
+ ],
15328
+ buttonPersonalityChoices: [
15329
+ buttonChoice("ornate-ritual"),
15330
+ buttonChoice("joy-stamp"),
15331
+ buttonChoice("ink-stamp")
15332
+ ],
15333
+ paletteVariantChoices: [
15334
+ paletteChoice("warm-dark-kirtan-gold"),
15335
+ paletteChoice("warm-dark-ember"),
15336
+ paletteChoice("brand-led-burgundy-gold")
15337
+ ]
15338
+ }),
14503
15339
  defineCuratedSiteStyle({
14504
15340
  id: "site-style:original-joy",
14505
15341
  name: "Original Joy",
@@ -14606,319 +15442,6 @@ var pageFlowPresets = [
14606
15442
  }
14607
15443
  ];
14608
15444
 
14609
- // ../theme-core/src/site-styles/designState.ts
14610
- import { z as z25 } from "zod";
14611
- var themeV2DesignStateSchemaVersion = 1;
14612
- var designResolutionPolicySchema = z25.enum(["generated", "user", "admin", "sdk"]);
14613
- var runtimeStyleFieldNameSchema = z25.enum(themeV2RuntimeStyleFieldNames);
14614
- var nonEmptyRuntimeStyleFieldNamesSchema = z25.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
14615
- fields3[0],
14616
- ...fields3.slice(1)
14617
- ]);
14618
- var heroLegibilityStrategySchema = z25.enum([
14619
- "none",
14620
- "scrim-gradient",
14621
- "solid-panel"
14622
- ]);
14623
- var heroCompositionIntentSchema = z25.enum([
14624
- "center",
14625
- "bottom-left"
14626
- ]);
14627
- var heroTypographyScaleIntentSchema = z25.enum([
14628
- "quiet",
14629
- "editorial",
14630
- "display",
14631
- "poster"
14632
- ]);
14633
- var sectionHeightIntentSchema = z25.enum([
14634
- "default",
14635
- "banner",
14636
- "hero",
14637
- "immersive"
14638
- ]);
14639
- var imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
14640
- var imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
14641
- var imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
14642
- z25.object({ kind: z25.literal("none") }).strict(),
14643
- z25.object({
14644
- kind: z25.literal("brand-scrim"),
14645
- token: z25.enum(["primary", "secondary", "accent"]),
14646
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14647
- }).strict(),
14648
- z25.object({
14649
- kind: z25.literal("brand-wash"),
14650
- token: z25.enum(["primary", "secondary", "accent"]),
14651
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14652
- }).strict(),
14653
- z25.object({
14654
- kind: z25.literal("neutral-scrim"),
14655
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14656
- }).strict(),
14657
- z25.object({
14658
- kind: z25.literal("neutral-wash"),
14659
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14660
- }).strict(),
14661
- z25.object({
14662
- kind: z25.literal("solid-panel"),
14663
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14664
- }).strict()
14665
- ]);
14666
- var testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
14667
- var tileTreatmentSchema = z25.enum(tileTreatmentValues);
14668
- var eventListTreatmentSchema = z25.enum(eventListTreatmentValues);
14669
- var eyebrowTreatmentSchema = z25.enum(eyebrowTreatmentValues);
14670
- function uniqueNonEmpty(values) {
14671
- const uniqueValues = [...new Set(values)];
14672
- const firstValue = uniqueValues[0];
14673
- if (!firstValue) {
14674
- throw new Error("Expected at least one Theme V2 design state option.");
14675
- }
14676
- return [firstValue, ...uniqueValues.slice(1)];
14677
- }
14678
- var userPanelTreatments = uniqueNonEmpty(
14679
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
14680
- );
14681
- var userFlushTreatments = uniqueNonEmpty(
14682
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
14683
- );
14684
- var userFlushBleeds = uniqueNonEmpty(
14685
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
14686
- );
14687
- var contentFrameIntentSchema = z25.discriminatedUnion("kind", [
14688
- z25.object({ kind: z25.literal("plain") }).strict(),
14689
- z25.object({
14690
- kind: z25.literal("panel"),
14691
- treatment: z25.enum(userPanelTreatments)
14692
- }).strict(),
14693
- z25.object({
14694
- kind: z25.literal("flush-panel"),
14695
- treatment: z25.enum(userFlushTreatments),
14696
- bleed: z25.enum(userFlushBleeds)
14697
- }).strict()
14698
- ]);
14699
- var blockDesignPlanSchema = z25.object({
14700
- blockId: z25.string().min(1).transform(asDesignBlockId),
14701
- blockKind: z25.string().min(1),
14702
- purpose: z25.string().min(1),
14703
- sectionSurface: z25.enum(userDesignOptionCatalog.sectionSurfaces),
14704
- contentFrame: contentFrameIntentSchema,
14705
- itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
14706
- transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
14707
- emphasis: z25.enum(userDesignOptionCatalog.emphases),
14708
- sectionHeight: sectionHeightIntentSchema.optional(),
14709
- heroLegibility: heroLegibilityStrategySchema.optional(),
14710
- heroComposition: heroCompositionIntentSchema.optional(),
14711
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
14712
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
14713
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
14714
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
14715
- tileTreatment: tileTreatmentSchema.optional(),
14716
- eventListTreatment: eventListTreatmentSchema.optional(),
14717
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
14718
- }).strict();
14719
- var styleAuthoritySchema = z25.discriminatedUnion("kind", [
14720
- z25.object({
14721
- kind: z25.literal("theme-v2"),
14722
- source: designResolutionPolicySchema,
14723
- siteStyleId: z25.string().min(1).transform(asSiteStyleId),
14724
- templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
14725
- templateVersion: z25.number().int().nonnegative(),
14726
- resolverVersion: z25.number().int().nonnegative()
14727
- }).strict(),
14728
- z25.object({
14729
- kind: z25.literal("legacy-raw"),
14730
- reason: z25.enum(["pre-theme-v2", "manual-runtime-fields"])
14731
- }).strict(),
14732
- z25.object({
14733
- kind: z25.literal("advanced-detached"),
14734
- reason: z25.literal("detached-custom-runtime-fields")
14735
- }).strict()
14736
- ]);
14737
- var blockRuntimeStyleAuthoritySchema = z25.object({
14738
- unit: z25.literal("block-runtime-fields"),
14739
- blockId: z25.string().min(1).transform(asDesignBlockId),
14740
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
14741
- authority: styleAuthoritySchema
14742
- }).strict();
14743
- var persistedPageDesignStateV1Schema = z25.object({
14744
- schemaVersion: z25.literal(themeV2DesignStateSchemaVersion),
14745
- siteStyleId: z25.string().min(1).transform(asSiteStyleId),
14746
- templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
14747
- templateVersion: z25.number().int().nonnegative(),
14748
- resolverVersion: z25.number().int().nonnegative(),
14749
- rhythmPresetId: z25.string().min(1),
14750
- blocks: z25.array(blockDesignPlanSchema),
14751
- styleAuthorities: z25.array(blockRuntimeStyleAuthoritySchema)
14752
- }).strict();
14753
-
14754
- // ../theme-core/src/site-styles/runtimeCompiler.ts
14755
- function defineDesignRuntimeRules(rules) {
14756
- return rules;
14757
- }
14758
- function defineComponentRuntimeRules(rules) {
14759
- return rules;
14760
- }
14761
- var defaultDesignRuntimeRules = defineDesignRuntimeRules({
14762
- sectionSurfaces: {
14763
- base: {},
14764
- "muted-band": {
14765
- background: {
14766
- type: "color",
14767
- color: "muted"
14768
- }
14769
- },
14770
- "accent-band": {
14771
- background: {
14772
- type: "color",
14773
- color: "primary"
14774
- }
14775
- },
14776
- "brand-depth-band": {
14777
- background: {
14778
- type: "color",
14779
- color: "primary-800"
14780
- }
14781
- },
14782
- "hero-image": {
14783
- background: {
14784
- type: "image",
14785
- opacity: 1,
14786
- position: "center center",
14787
- ...uniformSectionForeground("text")
14788
- }
14789
- }
14790
- },
14791
- heroLegibility: {
14792
- "scrim-gradient": {
14793
- type: "gradient",
14794
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
14795
- opacity: 1
14796
- },
14797
- "solid-panel": {
14798
- type: "color",
14799
- color: "surface",
14800
- opacity: 0.88
14801
- }
14802
- },
14803
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
14804
- });
14805
- var defaultComponentRuntimeRules = defineComponentRuntimeRules({
14806
- panelFrames: {
14807
- inset: {
14808
- spacing: "comfortable",
14809
- rounded: "xl",
14810
- raised: false,
14811
- background: {
14812
- type: "color",
14813
- color: "surfaceAlt",
14814
- textColor: "text"
14815
- }
14816
- },
14817
- raised: {
14818
- spacing: "comfortable",
14819
- rounded: "xl",
14820
- raised: true,
14821
- background: {
14822
- type: "color",
14823
- color: "surfaceAlt",
14824
- textColor: "text"
14825
- }
14826
- },
14827
- editorial: {
14828
- spacing: "medium",
14829
- rounded: "xl",
14830
- raised: false,
14831
- background: {
14832
- type: "color",
14833
- color: "surface",
14834
- textColor: "text"
14835
- }
14836
- }
14837
- },
14838
- flushFrames: {
14839
- "media-panel": {
14840
- fullWidth: true,
14841
- spacing: "none",
14842
- rounded: "none",
14843
- raised: false
14844
- }
14845
- },
14846
- itemSurfaces: {
14847
- none: null,
14848
- default: {
14849
- spacing: "medium",
14850
- rounded: "lg",
14851
- raised: false
14852
- },
14853
- flat: {
14854
- spacing: "medium",
14855
- rounded: "lg",
14856
- raised: false
14857
- },
14858
- outlined: {
14859
- spacing: "medium",
14860
- rounded: "lg",
14861
- raised: false,
14862
- border: {
14863
- enabled: true,
14864
- width: "1",
14865
- colorToken: "border"
14866
- }
14867
- },
14868
- raised: {
14869
- spacing: "medium",
14870
- rounded: "xl",
14871
- raised: true
14872
- },
14873
- inset: {
14874
- treatment: "soft-panel",
14875
- spacing: "comfortable",
14876
- rounded: "xl",
14877
- raised: false,
14878
- border: {
14879
- enabled: false
14880
- },
14881
- background: {
14882
- type: "color",
14883
- color: "surfaceAlt",
14884
- textColor: "text"
14885
- }
14886
- },
14887
- editorial: {
14888
- // Boxless open column with a short rule on top; the visual treatment
14889
- // lives in blocks-static/card-treatments.css.
14890
- treatment: "editorial-rule",
14891
- spacing: "none",
14892
- rounded: "none",
14893
- raised: false,
14894
- border: {
14895
- enabled: false
14896
- }
14897
- },
14898
- "color-blocked": {
14899
- // Bold, flat colour-blocked cards. The per-card background colour cycle
14900
- // (by position) and staggered offset live in
14901
- // blocks-static/card-treatments.css; here we set the shared shape:
14902
- // generous padding, large radius, no border, flat (no shadow).
14903
- treatment: "color-blocked",
14904
- spacing: "spacious",
14905
- rounded: "2xl",
14906
- raised: false,
14907
- border: {
14908
- enabled: false
14909
- }
14910
- }
14911
- }
14912
- });
14913
- function uniformSectionForeground(token) {
14914
- return {
14915
- textColor: token,
14916
- headingColor: token,
14917
- linkColor: token,
14918
- supportingColor: token
14919
- };
14920
- }
14921
-
14922
15445
  // ../theme-core/src/site-styles/generatedSchemas.ts
14923
15446
  import { z as z26 } from "zod";
14924
15447
  function uniqueNonEmpty2(values) {
@@ -15730,6 +16253,31 @@ function cardStylesField(options = {}) {
15730
16253
  return createBoxStylesFieldWithDepth("card", options);
15731
16254
  }
15732
16255
 
16256
+ // ../blocks/src/system/fields/imageShape.ts
16257
+ var standardImageShapeOptions = [
16258
+ { value: "default", label: "Default" },
16259
+ { value: "square", label: "Square corners" },
16260
+ { value: "rounded", label: "Rounded corners" },
16261
+ { value: "circle", label: "Circle" },
16262
+ { value: "arch", label: "Arch" }
16263
+ ];
16264
+ function createImageShapeField(options = {}) {
16265
+ return {
16266
+ id: options.id ?? "imageShape",
16267
+ type: "select",
16268
+ label: options.label ?? "Image shape",
16269
+ ...options.description ? { description: options.description } : {},
16270
+ required: false,
16271
+ defaultValue: options.defaultValue ?? "default",
16272
+ multiple: false,
16273
+ options: [...standardImageShapeOptions],
16274
+ ui: {
16275
+ intent: options.uiIntent ?? "display",
16276
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
16277
+ }
16278
+ };
16279
+ }
16280
+
15733
16281
  // ../blocks/src/utils/env.ts
15734
16282
  function isDevEnvironment() {
15735
16283
  try {
@@ -16544,7 +17092,7 @@ function buildFooterNavAll(common) {
16544
17092
  return stack(
16545
17093
  { className: common.className, gap: common.gap, align: "stretch" },
16546
17094
  [item],
16547
- when(collectionPath)
17095
+ whenCollectionHasItems(collectionPath)
16548
17096
  );
16549
17097
  }
16550
17098
  function buildFooterNavLinksOnly(common) {
@@ -16577,7 +17125,7 @@ function buildFooterNavLinksOnly(common) {
16577
17125
  return stack(
16578
17126
  { className: common.className, gap: common.gap, align: "stretch" },
16579
17127
  [item],
16580
- when(collectionPath)
17128
+ whenCollectionHasItems(collectionPath)
16581
17129
  );
16582
17130
  }
16583
17131
  function buildFooterNavFlatten(common) {
@@ -16626,9 +17174,20 @@ function buildFooterNavFlatten(common) {
16626
17174
  return stack(
16627
17175
  { className: common.className, gap: common.gap, align: "stretch" },
16628
17176
  [item],
16629
- when(collectionPath)
17177
+ whenCollectionHasItems(collectionPath)
16630
17178
  );
16631
17179
  }
17180
+ var whenCollectionHasItems = (collectionPath) => (node) => ({
17181
+ ...node,
17182
+ $when: {
17183
+ when: {
17184
+ from: collectionPath,
17185
+ transforms: [{ id: "array.length" }]
17186
+ },
17187
+ equals: 0,
17188
+ not: true
17189
+ }
17190
+ });
16632
17191
  function footerNav(opts) {
16633
17192
  const mode = opts?.mode ?? "all";
16634
17193
  const collectionPath = opts?.collectionPath ?? "footerMenu.items";
@@ -19343,8 +19902,23 @@ function fragmentsToRepeaterField(id, label, fragments, options = {}) {
19343
19902
  var heroLayoutControlsFragment = defineFragment({
19344
19903
  id: "heroLayoutControls",
19345
19904
  title: "Hero Layout",
19346
- description: "Alignment and content width controls for hero layouts.",
19905
+ description: "Title scale, alignment, and content width controls for hero layouts.",
19347
19906
  fields: [
19907
+ {
19908
+ id: "titleSize",
19909
+ type: "select",
19910
+ label: "Title size",
19911
+ description: "Adjust the visual scale of the hero title.",
19912
+ required: false,
19913
+ ui: { intent: "display" },
19914
+ options: [
19915
+ { value: "auto", label: "Auto" },
19916
+ { value: "quiet", label: "Normal" },
19917
+ { value: "editorial", label: "Large" },
19918
+ { value: "display", label: "Huge" },
19919
+ { value: "poster", label: "Poster" }
19920
+ ]
19921
+ },
19348
19922
  {
19349
19923
  id: "contentAlignment",
19350
19924
  type: "select",
@@ -20139,7 +20713,18 @@ function heroSplitImagePane() {
20139
20713
  return stack(
20140
20714
  {
20141
20715
  gap: "none",
20142
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
20716
+ className: {
20717
+ $bind: {
20718
+ from: "content.imageShape",
20719
+ transforms: [
20720
+ {
20721
+ id: "ui.imageShapeClassName",
20722
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
20723
+ }
20724
+ ],
20725
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
20726
+ }
20727
+ },
20143
20728
  style: {
20144
20729
  minHeight: "clamp(18rem, 36vw, 34rem)"
20145
20730
  }
@@ -20257,6 +20842,12 @@ var heroConfig = {
20257
20842
  label: "Content card",
20258
20843
  renderInHeader: true,
20259
20844
  intent: "style"
20845
+ }),
20846
+ createImageShapeField({
20847
+ id: "imageShape",
20848
+ label: "Image shape",
20849
+ defaultValue: "default",
20850
+ uiIntent: "display"
20260
20851
  })
20261
20852
  ],
20262
20853
  layout: classicLayout,
@@ -20271,6 +20862,15 @@ var heroConfig = {
20271
20862
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
20272
20863
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
20273
20864
  icon: "Sparkles",
20865
+ previewCustomize: {
20866
+ quickFieldPriority: [
20867
+ "titleSize",
20868
+ "contentAlignment",
20869
+ "contentMaxWidth",
20870
+ "verticalAlignment",
20871
+ "imageShape"
20872
+ ]
20873
+ },
20274
20874
  styleTokens: {
20275
20875
  typography: "display",
20276
20876
  spacing: "xl"
@@ -20287,7 +20887,8 @@ var standardAspectRatioOptions = [
20287
20887
  { value: "16/9", label: "16:9 (Landscape)" },
20288
20888
  { value: "4/3", label: "4:3 (Standard)" },
20289
20889
  { value: "1/1", label: "1:1 (Square)" },
20290
- { value: "3/4", label: "3:4 (Portrait)" }
20890
+ { value: "3/4", label: "3:4 (Portrait)" },
20891
+ { value: "9/16", label: "9:16 (Tall portrait)" }
20291
20892
  ];
20292
20893
  function createAspectRatioField(options = {}) {
20293
20894
  return {
@@ -21529,6 +22130,258 @@ var formBlockDefinition = {
21529
22130
  runtime: formBlockRuntime
21530
22131
  };
21531
22132
 
22133
+ // ../blocks/src/system/blocks/contact-newsletter.ts
22134
+ var contactNewsletterLayout = styledSection({
22135
+ children: sectionContainer([
22136
+ el(
22137
+ "div",
22138
+ { className: "contact-newsletter-grid" },
22139
+ [
22140
+ el(
22141
+ "div",
22142
+ { className: "contact-newsletter-column contact-newsletter-contact" },
22143
+ [
22144
+ el(
22145
+ "div",
22146
+ { className: "contact-newsletter-copy" },
22147
+ [
22148
+ text(
22149
+ {
22150
+ as: "h2",
22151
+ className: "form-copy-title"
22152
+ },
22153
+ when("contactTitle"),
22154
+ bind("contactTitle")
22155
+ ),
22156
+ richText(
22157
+ {
22158
+ className: "form-copy-intro rb-prose rb-max-w-none"
22159
+ },
22160
+ when("contactIntro"),
22161
+ bind("contactIntro")
22162
+ )
22163
+ ]
22164
+ ),
22165
+ el(
22166
+ "form",
22167
+ withApiBindings({
22168
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
22169
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
22170
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
22171
+ }),
22172
+ [],
22173
+ bind("data.form")
22174
+ )
22175
+ ]
22176
+ ),
22177
+ el(
22178
+ "div",
22179
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
22180
+ [
22181
+ el(
22182
+ "div",
22183
+ { className: "contact-newsletter-copy" },
22184
+ [
22185
+ text(
22186
+ {
22187
+ as: "h2",
22188
+ className: "newsletter-copy-title"
22189
+ },
22190
+ when("newsletterTitle"),
22191
+ bind("newsletterTitle")
22192
+ ),
22193
+ richText(
22194
+ {
22195
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
22196
+ },
22197
+ when("newsletterSubtitle"),
22198
+ bind("newsletterSubtitle")
22199
+ )
22200
+ ]
22201
+ ),
22202
+ el(
22203
+ "newsletter-form",
22204
+ withApiBindings({
22205
+ listId: { $bind: { from: "listId" } },
22206
+ preset: { $bind: { from: "preset" } },
22207
+ includePhone: { $bind: { from: "includePhone" } },
22208
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
22209
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
22210
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
22211
+ tags: { $bind: { from: "newsletterTags" } },
22212
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
22213
+ }),
22214
+ []
22215
+ )
22216
+ ]
22217
+ )
22218
+ ]
22219
+ )
22220
+ ], {
22221
+ className: "contact-newsletter-container"
22222
+ }),
22223
+ baseClass: "",
22224
+ spacing: "medium",
22225
+ background: "surface"
22226
+ });
22227
+ var contactNewsletterManifest = createBlockManifest({
22228
+ id: "block.contact-newsletter",
22229
+ title: "Contact + Newsletter",
22230
+ titleSource: "contactTitle",
22231
+ description: "Two-column newsletter signup and contact form section.",
22232
+ category: "interactive",
22233
+ layout: contactNewsletterLayout,
22234
+ defaultVariant: "default",
22235
+ variants: {
22236
+ default: contactNewsletterLayout
22237
+ },
22238
+ variantOptions: {
22239
+ default: {
22240
+ label: "Two column",
22241
+ description: "Newsletter and contact form side by side.",
22242
+ icon: "Columns2"
22243
+ }
22244
+ },
22245
+ additionalFields: [
22246
+ {
22247
+ id: "newsletterTitle",
22248
+ type: "text",
22249
+ label: "Newsletter title",
22250
+ defaultValue: "Stay connected"
22251
+ },
22252
+ {
22253
+ id: "newsletterSubtitle",
22254
+ type: "richText",
22255
+ label: "Newsletter intro"
22256
+ },
22257
+ {
22258
+ id: "listId",
22259
+ type: "reference",
22260
+ label: "Newsletter list",
22261
+ description: "Select the list new subscribers should be added to.",
22262
+ required: true,
22263
+ referenceKind: "newsletterList",
22264
+ allowManualEntry: false,
22265
+ ui: { intent: "behavior" }
22266
+ },
22267
+ {
22268
+ id: "preset",
22269
+ type: "select",
22270
+ label: "Newsletter fields",
22271
+ defaultValue: "emailOnly",
22272
+ ui: { intent: "display" },
22273
+ options: [
22274
+ { value: "emailOnly", label: "Email only" },
22275
+ { value: "emailName", label: "Email + Name" },
22276
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
22277
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
22278
+ ]
22279
+ },
22280
+ {
22281
+ id: "includePhone",
22282
+ type: "boolean",
22283
+ label: "Include phone field",
22284
+ defaultValue: false,
22285
+ ui: { intent: "display" }
22286
+ },
22287
+ {
22288
+ id: "newsletterButtonLabel",
22289
+ type: "text",
22290
+ label: "Newsletter button label",
22291
+ defaultValue: "Subscribe",
22292
+ ui: { intent: "display" }
22293
+ },
22294
+ {
22295
+ id: "newsletterSuccessMessage",
22296
+ type: "text",
22297
+ label: "Newsletter success message",
22298
+ defaultValue: "Thanks for subscribing!",
22299
+ ui: { intent: "behavior" }
22300
+ },
22301
+ {
22302
+ id: "newsletterPrivacyNote",
22303
+ type: "text",
22304
+ label: "Privacy note",
22305
+ ui: { intent: "display" }
22306
+ },
22307
+ {
22308
+ id: "newsletterTags",
22309
+ type: "text",
22310
+ label: "Newsletter tags",
22311
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
22312
+ ui: { intent: "behavior" }
22313
+ },
22314
+ {
22315
+ id: "contactTitle",
22316
+ type: "text",
22317
+ label: "Contact title",
22318
+ defaultValue: "Get in touch"
22319
+ },
22320
+ {
22321
+ id: "contactIntro",
22322
+ type: "richText",
22323
+ label: "Contact intro"
22324
+ },
22325
+ {
22326
+ id: "formSlug",
22327
+ type: "reference",
22328
+ label: "Contact form",
22329
+ description: "Pick a saved form to render.",
22330
+ required: true,
22331
+ referenceKind: "form",
22332
+ allowManualEntry: false,
22333
+ ui: { intent: "behavior" }
22334
+ },
22335
+ {
22336
+ id: "contactSubmitLabel",
22337
+ type: "text",
22338
+ label: "Contact button label",
22339
+ defaultValue: "Send message",
22340
+ ui: { intent: "display" }
22341
+ },
22342
+ {
22343
+ id: "contactSuccessMessage",
22344
+ type: "text",
22345
+ label: "Contact success message",
22346
+ defaultValue: "Thanks - we received your message.",
22347
+ ui: { intent: "behavior" }
22348
+ }
22349
+ ],
22350
+ styleTokens: {
22351
+ background: "surface",
22352
+ typography: "body",
22353
+ spacing: "md"
22354
+ },
22355
+ behaviours: {
22356
+ supportsThemeSwitching: true,
22357
+ inlineEditing: true,
22358
+ animation: false,
22359
+ paletteHidden: false
22360
+ },
22361
+ tags: [
22362
+ "contact",
22363
+ "newsletter",
22364
+ "signup",
22365
+ "email",
22366
+ "form",
22367
+ "lead-capture"
22368
+ ],
22369
+ icon: "MailPlus"
22370
+ });
22371
+ var contactNewsletterBlockDefinition = {
22372
+ manifest: contactNewsletterManifest,
22373
+ dataSchemas: { form: formDataSchema.optional() },
22374
+ dataLoaders: {
22375
+ form: {
22376
+ endpoint: "getPublicFormById",
22377
+ params: {
22378
+ formSlug: { $bind: { from: "formSlug" } }
22379
+ },
22380
+ mode: "server"
22381
+ }
22382
+ }
22383
+ };
22384
+
21532
22385
  // ../blocks/src/system/blocks/faq.ts
21533
22386
  function fragmentLayoutNode2(layout) {
21534
22387
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -21757,6 +22610,7 @@ var joinClasses3 = (parts) => parts.filter(
21757
22610
  ).join(" ").replace(/\s+/g, " ").trim();
21758
22611
  var eyebrowTreatmentClassMap = {
21759
22612
  plain: "",
22613
+ accent: "rb-eyebrow-treatment-accent",
21760
22614
  pill: "rb-eyebrow-treatment-pill",
21761
22615
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
21762
22616
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -21783,6 +22637,13 @@ var imageGalleryCornerClassMap = {
21783
22637
  "2xl": "rb-rounded-2xl",
21784
22638
  "3xl": "rb-rounded-3xl"
21785
22639
  };
22640
+ var imageShapeClassMap = {
22641
+ default: "",
22642
+ square: "rb-media-shape-square",
22643
+ rounded: "rb-media-shape-rounded",
22644
+ circle: "rb-media-shape-circle",
22645
+ arch: "rb-media-shape-arch"
22646
+ };
21786
22647
  var parseRatio = (raw) => {
21787
22648
  if (typeof raw !== "string") return null;
21788
22649
  const value = raw.trim();
@@ -21927,6 +22788,10 @@ function resolveHeroContentMaxWidth(content) {
21927
22788
  return "default";
21928
22789
  }
21929
22790
  function resolveHeroTypographyScale(content) {
22791
+ const titleSize = readString(content, "titleSize");
22792
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
22793
+ return titleSize;
22794
+ }
21930
22795
  const raw = readHeroLayoutString(
21931
22796
  content,
21932
22797
  "typographyScale",
@@ -22168,6 +23033,16 @@ var uiTransforms = [
22168
23033
  heroGridClassFromVerticalAlignmentTransform,
22169
23034
  imageFragmentClassTransform,
22170
23035
  imageFragmentSizeTransform,
23036
+ {
23037
+ id: "ui.imageShapeClassName",
23038
+ kind: "string",
23039
+ summary: "Apply a constrained media shape class",
23040
+ run: (value, options) => {
23041
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
23042
+ const shape = typeof value === "string" ? value.trim() : "default";
23043
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
23044
+ }
23045
+ },
22171
23046
  conditionalClassTransform,
22172
23047
  twoColumnContainerClassTransform,
22173
23048
  twoColumnFlexBasisTransform,
@@ -23561,6 +24436,21 @@ var siteHeaderManifest = createBlockManifest({
23561
24436
  id: "block.site-header",
23562
24437
  title: "Site Header",
23563
24438
  category: "layout",
24439
+ additionalFields: [
24440
+ {
24441
+ id: "mode",
24442
+ type: "select",
24443
+ label: "Header display",
24444
+ required: false,
24445
+ multiple: false,
24446
+ defaultValue: "default",
24447
+ options: [
24448
+ { value: "default", label: "Show header" },
24449
+ { value: "hidden", label: "Hide header" }
24450
+ ],
24451
+ ui: { intent: "display" }
24452
+ }
24453
+ ],
23564
24454
  // Skip section styles - this block uses theme-based styling
23565
24455
  skipSectionStyles: true,
23566
24456
  // Block manages its own wrapper - enables sticky positioning
@@ -24973,6 +25863,9 @@ var mediaTextManifest = createBlockManifest({
24973
25863
  category: "layout",
24974
25864
  includeContainerStyles: true,
24975
25865
  titleSource: "title",
25866
+ previewCustomize: {
25867
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
25868
+ },
24976
25869
  additionalFields: [
24977
25870
  {
24978
25871
  id: "images",
@@ -25011,7 +25904,7 @@ var mediaTextManifest = createBlockManifest({
25011
25904
  {
25012
25905
  id: "titleAlignment",
25013
25906
  type: "select",
25014
- label: "Title alignment",
25907
+ label: "Content alignment",
25015
25908
  required: false,
25016
25909
  defaultValue: "left",
25017
25910
  multiple: false,
@@ -25069,7 +25962,18 @@ var mediaTextManifest = createBlockManifest({
25069
25962
  transition: "slide"
25070
25963
  },
25071
25964
  ui: { intent: "behavior" }
25072
- }),
25965
+ }).map((field) => ({
25966
+ ...field,
25967
+ ui: {
25968
+ ...field.ui ?? {},
25969
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
25970
+ allOf: [
25971
+ { field: "images", minItems: 2 },
25972
+ { field: "carouselAutoplay", equals: true }
25973
+ ]
25974
+ } : { field: "images", minItems: 2 }
25975
+ }
25976
+ })),
25073
25977
  createAspectRatioField({
25074
25978
  id: "aspectRatio",
25075
25979
  label: "Media aspect ratio",
@@ -25077,6 +25981,12 @@ var mediaTextManifest = createBlockManifest({
25077
25981
  defaultValue: "auto",
25078
25982
  visibleWhen: { field: "images", notEquals: null }
25079
25983
  }),
25984
+ createImageShapeField({
25985
+ id: "imageShape",
25986
+ label: "Media shape",
25987
+ defaultValue: "default",
25988
+ visibleWhen: { field: "images", notEquals: null }
25989
+ }),
25080
25990
  {
25081
25991
  id: "text",
25082
25992
  type: "richText",
@@ -25110,6 +26020,30 @@ var mediaTextManifest = createBlockManifest({
25110
26020
  ...options?.not ? { not: true } : {}
25111
26021
  }
25112
26022
  });
26023
+ const bodyClassNameFromAlignment = {
26024
+ $bind: {
26025
+ from: "content.titleAlignment",
26026
+ transforms: [
26027
+ {
26028
+ id: "ui.bodyClassFromAlignment",
26029
+ options: { base: "rb-prose rb-max-w-none" }
26030
+ }
26031
+ ],
26032
+ fallback: "rb-prose rb-max-w-none"
26033
+ }
26034
+ };
26035
+ const titleClassNameFromAlignment = {
26036
+ $bind: {
26037
+ from: "content.titleAlignment",
26038
+ transforms: [
26039
+ {
26040
+ id: "ui.headingClassFromAlignment",
26041
+ options: { base: "" }
26042
+ }
26043
+ ],
26044
+ fallback: ""
26045
+ }
26046
+ };
25113
26047
  const defaultTextColumn = el("div", {}, [
25114
26048
  styledCard(
25115
26049
  [
@@ -25134,8 +26068,55 @@ var mediaTextManifest = createBlockManifest({
25134
26068
  bind("content.text")
25135
26069
  )
25136
26070
  ]);
26071
+ const bioTextColumn = el(
26072
+ "div",
26073
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
26074
+ [
26075
+ text(
26076
+ {
26077
+ as: "h2",
26078
+ className: titleClassNameFromAlignment
26079
+ },
26080
+ when("content.title"),
26081
+ bind("content.title")
26082
+ ),
26083
+ styledCard(
26084
+ [
26085
+ richText(
26086
+ {
26087
+ className: bodyClassNameFromAlignment
26088
+ },
26089
+ bind("content.text")
26090
+ )
26091
+ ],
26092
+ {
26093
+ stylesFrom: "content._textCardStyles",
26094
+ backgroundFrom: "content._textCardStyles.background"
26095
+ },
26096
+ when("content.wrapTextInCard")
26097
+ ),
26098
+ richText(
26099
+ {
26100
+ className: bodyClassNameFromAlignment
26101
+ },
26102
+ when("content.wrapTextInCard", { not: true }),
26103
+ bind("content.text")
26104
+ )
26105
+ ]
26106
+ );
25137
26107
  const defaultImageCommonProps = {
25138
- className: "rb-w-full rb-h-auto rb-object-cover",
26108
+ className: {
26109
+ $bind: {
26110
+ from: "content.imageShape",
26111
+ transforms: [
26112
+ {
26113
+ id: "ui.imageShapeClassName",
26114
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
26115
+ }
26116
+ ],
26117
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
26118
+ }
26119
+ },
25139
26120
  style: {
25140
26121
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
25141
26122
  }
@@ -25176,6 +26157,27 @@ var mediaTextManifest = createBlockManifest({
25176
26157
  ],
25177
26158
  whenImagesLength(0, { not: true })
25178
26159
  );
26160
+ const bioImagesLayout = el(
26161
+ "div",
26162
+ {},
26163
+ [
26164
+ responsiveTwoColumn({
26165
+ image: el("div", {}, [
26166
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
26167
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
26168
+ ]),
26169
+ text: bioTextColumn,
26170
+ ratioFrom: "content.ratio",
26171
+ imagePositionFrom: "content.imagePosition",
26172
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
26173
+ gapFrom: "content.gap",
26174
+ gapFallback: "comfortable",
26175
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
26176
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
26177
+ })
26178
+ ],
26179
+ whenImagesLength(0, { not: true })
26180
+ );
25179
26181
  const defaultTextOnlyLayout = el(
25180
26182
  "div",
25181
26183
  {},
@@ -25205,7 +26207,45 @@ var mediaTextManifest = createBlockManifest({
25205
26207
  ],
25206
26208
  whenImagesLength(0)
25207
26209
  );
26210
+ const bioTextOnlyLayout = el(
26211
+ "div",
26212
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
26213
+ [
26214
+ text(
26215
+ {
26216
+ as: "h2",
26217
+ className: titleClassNameFromAlignment
26218
+ },
26219
+ when("content.title"),
26220
+ bind("content.title")
26221
+ ),
26222
+ styledCard(
26223
+ [
26224
+ richText(
26225
+ {
26226
+ className: bodyClassNameFromAlignment
26227
+ },
26228
+ bind("content.text")
26229
+ )
26230
+ ],
26231
+ {
26232
+ stylesFrom: "content._textCardStyles",
26233
+ backgroundFrom: "content._textCardStyles.background"
26234
+ },
26235
+ when("content.wrapTextInCard")
26236
+ ),
26237
+ richText(
26238
+ {
26239
+ className: bodyClassNameFromAlignment
26240
+ },
26241
+ when("content.wrapTextInCard", { not: true }),
26242
+ bind("content.text")
26243
+ )
26244
+ ],
26245
+ whenImagesLength(0)
26246
+ );
25208
26247
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
26248
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
25209
26249
  const defaultLayout2 = styledSection({
25210
26250
  children: styledContainer({
25211
26251
  rootType: "stack",
@@ -25214,18 +26254,7 @@ var mediaTextManifest = createBlockManifest({
25214
26254
  text(
25215
26255
  {
25216
26256
  as: "h2",
25217
- className: {
25218
- $bind: {
25219
- from: "content.titleAlignment",
25220
- transforms: [
25221
- {
25222
- id: "ui.headingClassFromAlignment",
25223
- options: { base: "" }
25224
- }
25225
- ],
25226
- fallback: ""
25227
- }
25228
- }
26257
+ className: titleClassNameFromAlignment
25229
26258
  },
25230
26259
  when("content.title"),
25231
26260
  bind("content.title")
@@ -25237,14 +26266,28 @@ var mediaTextManifest = createBlockManifest({
25237
26266
  baseClass: "",
25238
26267
  spacing: "medium"
25239
26268
  });
26269
+ const bioLayout = styledSection({
26270
+ children: styledContainer({
26271
+ rootType: "stack",
26272
+ rootProps: { gap: "lg" },
26273
+ children: [bioInner]
26274
+ }),
26275
+ baseClass: "",
26276
+ spacing: "medium"
26277
+ });
25240
26278
  return {
25241
26279
  layout: defaultLayout2,
25242
26280
  variants: {
25243
- default: defaultLayout2
26281
+ default: defaultLayout2,
26282
+ bio: bioLayout
25244
26283
  },
25245
26284
  defaultVariant: "default",
25246
26285
  variantOptions: {
25247
- default: { label: "Default" }
26286
+ default: { label: "Default" },
26287
+ bio: {
26288
+ label: "Bio",
26289
+ description: "Vertically centered title and copy beside media."
26290
+ }
25248
26291
  }
25249
26292
  };
25250
26293
  })(),
@@ -25950,10 +26993,8 @@ var occurrenceContextSchema = z44.object({
25950
26993
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
25951
26994
  import { z as z46 } from "zod";
25952
26995
 
25953
- // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
25954
- import { z as z45 } from "zod";
25955
-
25956
26996
  // ../blocks/src/system/constants/events.ts
26997
+ var EVENT_CONTENT_TYPE_SLUGS = ["event", "events"];
25957
26998
  var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
25958
26999
  var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
25959
27000
  var eventCalendarListLayoutOptions = [
@@ -25967,8 +27008,133 @@ function isEventCalendarDisplayMode(value) {
25967
27008
  function isEventCalendarListLayout(value) {
25968
27009
  return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
25969
27010
  }
27011
+ function isEventContentType(slug) {
27012
+ if (!slug) return false;
27013
+ return EVENT_CONTENT_TYPE_SLUGS.includes(slug);
27014
+ }
27015
+
27016
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
27017
+ var DEFAULT_EVENT_CURRENCY = "USD";
27018
+ function resolveRuntimeEventPricing(event) {
27019
+ if (isPublicEventPricing(event.pricing)) {
27020
+ return event.pricing;
27021
+ }
27022
+ const legacy = event;
27023
+ const currency = readCurrency(legacy.currency);
27024
+ if (event.requiresRegistration === false) {
27025
+ return {
27026
+ kind: "drop_in",
27027
+ currency,
27028
+ display: { kind: "free", currency }
27029
+ };
27030
+ }
27031
+ if (legacy.pricingMode === "ticket_types") {
27032
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
27033
+ return {
27034
+ kind: "ticket_types",
27035
+ currency,
27036
+ ticketTypes,
27037
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
27038
+ };
27039
+ }
27040
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
27041
+ if (legacy.pricingType === "paid" && amount > 0) {
27042
+ return {
27043
+ kind: "single_paid",
27044
+ amount,
27045
+ currency,
27046
+ display: { kind: "exact", amount, currency }
27047
+ };
27048
+ }
27049
+ return {
27050
+ kind: "free_registration",
27051
+ currency,
27052
+ display: { kind: "free", currency }
27053
+ };
27054
+ }
27055
+ function readCurrency(value) {
27056
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
27057
+ }
27058
+ function isRecord5(value) {
27059
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27060
+ }
27061
+ function isPublicEventPricing(value) {
27062
+ if (!isRecord5(value) || typeof value.kind !== "string") return false;
27063
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
27064
+ }
27065
+ function isPublicEventTicketType(value) {
27066
+ return isRecord5(value) && typeof value.id === "string";
27067
+ }
27068
+ function readTicketTypePriceDisplay(value, currency) {
27069
+ const display = readLegacyPriceDisplay(value, currency);
27070
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
27071
+ }
27072
+ function readLegacyPriceDisplay(value, currency) {
27073
+ if (!isRecord5(value) || typeof value.kind !== "string") {
27074
+ return { kind: "unavailable", currency };
27075
+ }
27076
+ const displayCurrency = readCurrency(value.currency);
27077
+ switch (value.kind) {
27078
+ case "free":
27079
+ return { kind: "free", currency: displayCurrency };
27080
+ case "exact":
27081
+ return readAmount(value.amount) !== null ? {
27082
+ kind: "exact",
27083
+ amount: readAmount(value.amount) ?? 0,
27084
+ currency: displayCurrency
27085
+ } : { kind: "unavailable", currency };
27086
+ case "from":
27087
+ return readAmount(value.amount) !== null ? {
27088
+ kind: "from",
27089
+ amount: readAmount(value.amount) ?? 0,
27090
+ currency: displayCurrency
27091
+ } : { kind: "unavailable", currency };
27092
+ case "mixed":
27093
+ return readAmount(value.paidFromAmount) !== null ? {
27094
+ kind: "mixed",
27095
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
27096
+ currency: displayCurrency
27097
+ } : { kind: "unavailable", currency };
27098
+ case "unavailable":
27099
+ return { kind: "unavailable", currency: displayCurrency };
27100
+ case "course":
27101
+ return isRecord5(value.display) ? {
27102
+ kind: "course",
27103
+ display: readCoursePriceDisplay(value.display, displayCurrency)
27104
+ } : {
27105
+ kind: "course",
27106
+ display: { kind: "unavailable", currency: displayCurrency }
27107
+ };
27108
+ default:
27109
+ return { kind: "unavailable", currency };
27110
+ }
27111
+ }
27112
+ function readCoursePriceDisplay(value, currency) {
27113
+ switch (value.kind) {
27114
+ case "free":
27115
+ return { kind: "free", currency: readCurrency(value.currency) };
27116
+ case "exact":
27117
+ return readAmount(value.amount) !== null ? {
27118
+ kind: "exact",
27119
+ amount: readAmount(value.amount) ?? 0,
27120
+ currency: readCurrency(value.currency)
27121
+ } : { kind: "unavailable", currency };
27122
+ case "from":
27123
+ return readAmount(value.amount) !== null ? {
27124
+ kind: "from",
27125
+ amount: readAmount(value.amount) ?? 0,
27126
+ currency: readCurrency(value.currency)
27127
+ } : { kind: "unavailable", currency };
27128
+ default:
27129
+ return { kind: "unavailable", currency };
27130
+ }
27131
+ }
27132
+ function readAmount(value) {
27133
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
27134
+ }
25970
27135
 
25971
27136
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
27137
+ import { z as z45 } from "zod";
25972
27138
  var previewStageSchema = z45.enum(["preview", "published"]);
25973
27139
  var registrationButtonVariantSchema = z45.enum(["primary", "secondary", "outline"]);
25974
27140
  var eventButtonVariantSchema = z45.enum(["primary", "secondary", "outline", "link"]);
@@ -25979,12 +27145,73 @@ var weekStartSchema = z45.enum(["sunday", "monday"]);
25979
27145
  var filterAutoShowSchema = z45.enum(["auto", "always", "never"]);
25980
27146
  var calendarTabViewsSchema = z45.enum(["both", "month", "week"]);
25981
27147
 
27148
+ // ../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts
27149
+ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
27150
+ const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : ["select-event", "select-tickets", "enter-details"];
27151
+ if (!needsPaymentStep) {
27152
+ return baseSteps;
27153
+ }
27154
+ return [...baseSteps, "select-payment"];
27155
+ }
27156
+
27157
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
27158
+ function eventMatchesOccurrenceId(event, occurrenceId) {
27159
+ return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
27160
+ }
27161
+ function findPreSelectedEvent(input) {
27162
+ const occurrenceContext = input.occurrenceContext;
27163
+ if (!occurrenceContext) {
27164
+ return null;
27165
+ }
27166
+ const contextDate = getBookingLocalDateKey(toScheduledBookingDateTime({
27167
+ startsAt: occurrenceContext.startsAt,
27168
+ timeZone: occurrenceContext.timeZone
27169
+ }));
27170
+ return input.scopedEvents.find(
27171
+ (event) => eventMatchesOccurrenceId(event, occurrenceContext.id) || getBookingLocalDateKey(toScheduledBookingDateTime({
27172
+ startsAt: event.startsAt,
27173
+ timeZone: event.timeZone
27174
+ })) === contextDate
27175
+ ) ?? null;
27176
+ }
27177
+ function resolveEventRequiresPayment(input) {
27178
+ if (input.eligibility) {
27179
+ return input.eligibility.requiresPayment;
27180
+ }
27181
+ if (input.selectedTicketType) {
27182
+ return input.selectedTicketType.priceAmount > 0;
27183
+ }
27184
+ if (!input.event) {
27185
+ return false;
27186
+ }
27187
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
27188
+ }
27189
+
27190
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts
27191
+ function toRegistrationEvent(event) {
27192
+ return {
27193
+ ...event,
27194
+ pricing: resolveRuntimeEventPricing(event),
27195
+ publicEventId: event.id,
27196
+ registrationOccurrenceId: event.occurrenceId
27197
+ };
27198
+ }
27199
+ function toRegistrationEvents(events) {
27200
+ return events.map(toRegistrationEvent);
27201
+ }
27202
+
25982
27203
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
27204
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
27205
+ var EVENT_REGISTRATION_SHELL_STEP_LABELS = ["Event", "Date", "Tickets", "Details", "Payment"];
25983
27206
  var contentEntrySchema = z46.object({
25984
27207
  id: z46.string(),
25985
27208
  slug: z46.string(),
25986
27209
  contentTypeSlug: z46.string()
25987
27210
  });
27211
+ var eventRegistrationPublicEventSchema = z46.preprocess(
27212
+ normalizeEventRegistrationEventInput,
27213
+ publicEventSchema
27214
+ );
25988
27215
  var eventRegistrationSourceSchema = z46.object({
25989
27216
  siteId: z46.string().optional(),
25990
27217
  apiBaseUrl: z46.string().optional(),
@@ -25992,7 +27219,7 @@ var eventRegistrationSourceSchema = z46.object({
25992
27219
  previewToken: z46.string().nullable().optional(),
25993
27220
  occurrenceContext: occurrenceContextSchema.optional(),
25994
27221
  contentEntry: contentEntrySchema.nullable().optional(),
25995
- events: z46.array(publicEventSchema).nullable().optional(),
27222
+ events: z46.array(eventRegistrationPublicEventSchema).nullable().optional(),
25996
27223
  className: z46.string().nullable().optional(),
25997
27224
  buttonText: z46.string().nullable().optional(),
25998
27225
  maxTickets: z46.string().nullable().optional(),
@@ -26007,14 +27234,17 @@ var eventRegistrationSourceSchema = z46.object({
26007
27234
  });
26008
27235
  var eventRegistrationDisplaySchema = z46.object({
26009
27236
  kind: z46.literal("event-registration"),
26010
- state: z46.literal("shell"),
27237
+ state: z46.literal("generic-shell"),
26011
27238
  className: z46.string().nullable(),
27239
+ titleText: z46.string(),
27240
+ bodyText: z46.string(),
27241
+ stepLabels: z46.array(z46.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
26012
27242
  summaryButtonText: z46.string()
26013
27243
  });
26014
27244
  var eventRegistrationHydrationSchema = z46.object({
26015
27245
  occurrenceContext: occurrenceContextSchema.optional(),
26016
27246
  contentEntry: contentEntrySchema.nullable().optional(),
26017
- events: z46.array(publicEventSchema).nullable().optional(),
27247
+ events: z46.array(eventRegistrationPublicEventSchema).nullable().optional(),
26018
27248
  maxTickets: z46.string().optional(),
26019
27249
  showVenue: z46.boolean().optional(),
26020
27250
  showCapacity: z46.boolean().optional(),
@@ -26043,13 +27273,81 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
26043
27273
  "stage"
26044
27274
  );
26045
27275
  function buildEventRegistrationDisplay(source) {
27276
+ const stepLabels = buildEventRegistrationShellStepLabels(source);
26046
27277
  return {
26047
27278
  kind: "event-registration",
26048
- state: "shell",
27279
+ state: "generic-shell",
26049
27280
  className: source.className ?? null,
27281
+ titleText: "Event registration",
27282
+ bodyText: buildEventRegistrationShellBodyText(stepLabels),
27283
+ stepLabels,
26050
27284
  summaryButtonText: source.buttonText?.trim() || "Register"
26051
27285
  };
26052
27286
  }
27287
+ function buildEventRegistrationShellStepLabels(source) {
27288
+ const scopedEvents = scopeEventRegistrationEvents(source);
27289
+ if (scopedEvents.length === 0) {
27290
+ return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
27291
+ }
27292
+ const preSelectedEvent = findPreSelectedEvent({
27293
+ scopedEvents,
27294
+ occurrenceContext: source.occurrenceContext
27295
+ });
27296
+ const hasPreSelectedContext = Boolean(source.occurrenceContext || preSelectedEvent);
27297
+ const needsPaymentStep = hasPreSelectedContext && preSelectedEvent ? resolveEventRequiresPayment({
27298
+ eligibility: null,
27299
+ selectedTicketType: null,
27300
+ event: preSelectedEvent
27301
+ }) : false;
27302
+ return getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
27303
+ }
27304
+ function scopeEventRegistrationEvents(source) {
27305
+ const events = toRegistrationEvents(source.events ?? []);
27306
+ if (source.occurrenceContext?.seriesId) {
27307
+ return events.filter((event) => event.seriesId === source.occurrenceContext?.seriesId);
27308
+ }
27309
+ const entrySlug = source.contentEntry?.slug;
27310
+ const entryContentType = source.contentEntry?.contentTypeSlug;
27311
+ if (entrySlug && entryContentType && isEventContentType(entryContentType)) {
27312
+ return events.filter((event) => event.slug === entrySlug);
27313
+ }
27314
+ return events;
27315
+ }
27316
+ function shellLabelForRegistrationStep(step, events) {
27317
+ switch (step) {
27318
+ case "select-event":
27319
+ return isDateSelection(events) ? "Date" : "Event";
27320
+ case "select-tickets":
27321
+ return "Tickets";
27322
+ case "enter-details":
27323
+ return "Details";
27324
+ case "select-payment":
27325
+ return "Payment";
27326
+ case "error":
27327
+ case "success":
27328
+ case "submitting":
27329
+ case "redirecting":
27330
+ case "verifying-payment":
27331
+ case "verifying-timeout":
27332
+ case "payment-failed":
27333
+ return "Details";
27334
+ }
27335
+ }
27336
+ function isDateSelection(events) {
27337
+ const firstSeriesId = events[0]?.seriesId;
27338
+ return Boolean(
27339
+ events.length > 1 && firstSeriesId && events.every((event) => event.seriesId === firstSeriesId)
27340
+ );
27341
+ }
27342
+ function buildEventRegistrationShellBodyText(stepLabels) {
27343
+ if (stepLabels.includes("Payment")) {
27344
+ return "Preparing tickets, details, and payment options.";
27345
+ }
27346
+ if (stepLabels[0] === "Tickets") {
27347
+ return "Preparing tickets and booking details.";
27348
+ }
27349
+ return "Preparing dates, tickets, and booking details.";
27350
+ }
26053
27351
  var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
26054
27352
  kind: "client-owned",
26055
27353
  contracts: {
@@ -26073,6 +27371,18 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
26073
27371
  }
26074
27372
  })
26075
27373
  });
27374
+ function normalizeEventRegistrationEventInput(value) {
27375
+ if (!isRecord6(value)) {
27376
+ return value;
27377
+ }
27378
+ return {
27379
+ ...value,
27380
+ pricing: resolveRuntimeEventPricing(value)
27381
+ };
27382
+ }
27383
+ function isRecord6(value) {
27384
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27385
+ }
26076
27386
  var eventRegistrationInteractiveIslandPropsCodec = createInteractiveIslandCodec({
26077
27387
  runtime: eventRegistrationBlockRuntime,
26078
27388
  mode: "event-registration",
@@ -27922,7 +29232,9 @@ function formatPublicEventPriceDisplay(display) {
27922
29232
  }
27923
29233
  }
27924
29234
  function formatEventPrice(event) {
27925
- return formatPublicEventPriceDisplay(publicEventPricingDisplay(event.pricing));
29235
+ return formatPublicEventPriceDisplay(
29236
+ publicEventPricingDisplay(resolveRuntimeEventPricing(event))
29237
+ );
27926
29238
  }
27927
29239
  function resolveEventCta(event, buttonText) {
27928
29240
  const { isFull: isSoldOut } = getEventAvailability(event);
@@ -30988,7 +32300,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
30988
32300
  return keys.length >= 2 ? keys : [];
30989
32301
  }
30990
32302
  function normalizeOfferingsPreviewContentForWrite(value) {
30991
- if (!isRecord5(value)) return null;
32303
+ if (!isRecord7(value)) return null;
30992
32304
  const groupOrderValue = value.groupOrder;
30993
32305
  if (Array.isArray(groupOrderValue)) {
30994
32306
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -31001,7 +32313,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
31001
32313
  return { ...value, groupOrder: [] };
31002
32314
  }
31003
32315
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
31004
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
32316
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord7) : []
31005
32317
  );
31006
32318
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
31007
32319
  }
@@ -31055,7 +32367,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
31055
32367
  }
31056
32368
  return keys;
31057
32369
  }
31058
- function isRecord5(value) {
32370
+ function isRecord7(value) {
31059
32371
  return typeof value === "object" && value !== null && !Array.isArray(value);
31060
32372
  }
31061
32373
  function mergeOrderedKeysWithDefaults(orderedKeys, defaultKeys) {
@@ -31517,7 +32829,7 @@ function isOfferingsPreviewItemLimit(value) {
31517
32829
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
31518
32830
  }
31519
32831
  function normalizeOfferingsPreviewGroupOverride(value) {
31520
- if (!isRecord6(value)) return [];
32832
+ if (!isRecord8(value)) return [];
31521
32833
  const override = {};
31522
32834
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
31523
32835
  override.sourceKey = value.sourceKey;
@@ -31549,12 +32861,12 @@ function isButtonVariant(value) {
31549
32861
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
31550
32862
  }
31551
32863
  function normalizeCardStylesContent(value) {
31552
- return isRecord6(value) || value === null ? value : void 0;
32864
+ return isRecord8(value) || value === null ? value : void 0;
31553
32865
  }
31554
32866
  function normalizeSectionStylesContent(value) {
31555
- return isRecord6(value) || value === null ? value : void 0;
32867
+ return isRecord8(value) || value === null ? value : void 0;
31556
32868
  }
31557
- function isRecord6(value) {
32869
+ function isRecord8(value) {
31558
32870
  return typeof value === "object" && value !== null && !Array.isArray(value);
31559
32871
  }
31560
32872
 
@@ -35633,11 +36945,13 @@ var heroImageSurfaceMotions = [
35633
36945
  ];
35634
36946
  var standardEyebrowTreatments = [
35635
36947
  "plain",
36948
+ "accent",
35636
36949
  "pill",
35637
36950
  "accent-pill"
35638
36951
  ];
35639
36952
  var animatedEyebrowTreatments = [
35640
36953
  "plain",
36954
+ "accent",
35641
36955
  "pill",
35642
36956
  "accent-pill",
35643
36957
  "pill-bounce",
@@ -35938,6 +37252,17 @@ var systemBlockDefinitionsRaw = [
35938
37252
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
35939
37253
  ]
35940
37254
  })),
37255
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
37256
+ flow: conversionFlow,
37257
+ layoutProfiles: [
37258
+ layoutProfile({
37259
+ variantKey: "default",
37260
+ family: "split",
37261
+ weight: "featured",
37262
+ bias: "soft"
37263
+ })
37264
+ ]
37265
+ })),
35941
37266
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
35942
37267
  sectionSurfaces: "supported",
35943
37268
  contentFrames: ["plain", "panel"],
@@ -36029,6 +37354,12 @@ var systemBlockDefinitionsRaw = [
36029
37354
  family: "media-text",
36030
37355
  weight: "featured",
36031
37356
  bias: "soft"
37357
+ }),
37358
+ layoutProfile({
37359
+ variantKey: "bio",
37360
+ family: "media-text",
37361
+ weight: "featured",
37362
+ bias: "soft"
36032
37363
  })
36033
37364
  ]
36034
37365
  })),
@@ -36839,16 +38170,16 @@ import React4 from "react";
36839
38170
  // ../blocks/src/system/data/linkedContentEntries.ts
36840
38171
  var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
36841
38172
  function getLinkedContentEntryMeta(value) {
36842
- if (!isRecord7(value)) return null;
38173
+ if (!isRecord9(value)) return null;
36843
38174
  const candidate = value[LINKED_CONTENT_ENTRY_META_KEY];
36844
38175
  return isLinkedContentEntryMeta(candidate) ? candidate : null;
36845
38176
  }
36846
38177
  function buildLinkedContentEditTarget(input) {
36847
38178
  const { entry, sourceBlockId, sourceBlockKind, itemIndex } = input;
36848
- if (!isRecord7(entry)) return null;
38179
+ if (!isRecord9(entry)) return null;
36849
38180
  const meta = getLinkedContentEntryMeta(entry);
36850
38181
  if (!meta || meta.support.kind !== "supported") return null;
36851
- const content = isRecord7(entry.content) ? entry.content : {};
38182
+ const content = isRecord9(entry.content) ? entry.content : {};
36852
38183
  return {
36853
38184
  kind: "linked-content-entry",
36854
38185
  entryId: meta.entryId,
@@ -36906,14 +38237,14 @@ function resolvePreviewLinkedEntryInlineFieldType(fieldType) {
36906
38237
  return null;
36907
38238
  }
36908
38239
  function isLinkedContentEntryMeta(value) {
36909
- if (!isRecord7(value)) return false;
38240
+ if (!isRecord9(value)) return false;
36910
38241
  if (value.kind !== "linked-content-entry") return false;
36911
38242
  if (typeof value.entryId !== "string") return false;
36912
38243
  if (typeof value.contentTypeKey !== "string") return false;
36913
38244
  if (typeof value.contentTypeLabel !== "string") return false;
36914
38245
  if (typeof value.title !== "string") return false;
36915
38246
  if (!(value.optimisticHash === null || typeof value.optimisticHash === "string")) return false;
36916
- if (!isRecord7(value.contentType)) return false;
38247
+ if (!isRecord9(value.contentType)) return false;
36917
38248
  if (!isLinkedEntryFieldSourceArray(value.fieldSources)) return false;
36918
38249
  return isLinkedContentEditSupport(value.support);
36919
38250
  }
@@ -36921,7 +38252,7 @@ function isLinkedEntryFieldSourceArray(value) {
36921
38252
  return Array.isArray(value) && value.every(isLinkedEntryFieldSource);
36922
38253
  }
36923
38254
  function isLinkedEntryFieldSource(value) {
36924
- if (!isRecord7(value)) return false;
38255
+ if (!isRecord9(value)) return false;
36925
38256
  if (typeof value.displayPath !== "string") return false;
36926
38257
  switch (value.kind) {
36927
38258
  case "content-field":
@@ -36947,7 +38278,7 @@ function isLinkedEntryInlineFieldReadOnlyReason(value) {
36947
38278
  }
36948
38279
  }
36949
38280
  function isLinkedContentEditSupport(value) {
36950
- if (!isRecord7(value) || typeof value.kind !== "string") return false;
38281
+ if (!isRecord9(value) || typeof value.kind !== "string") return false;
36951
38282
  switch (value.kind) {
36952
38283
  case "supported":
36953
38284
  return true;
@@ -36959,7 +38290,7 @@ function isLinkedContentEditSupport(value) {
36959
38290
  return false;
36960
38291
  }
36961
38292
  }
36962
- function isRecord7(value) {
38293
+ function isRecord9(value) {
36963
38294
  return typeof value === "object" && value !== null && !Array.isArray(value);
36964
38295
  }
36965
38296
 
@@ -38486,12 +39817,12 @@ function toTrimmedString(value) {
38486
39817
  return trimmed ? trimmed : void 0;
38487
39818
  }
38488
39819
  function normalizeBookingFormConfig(form2) {
38489
- if (!isRecord8(form2)) return null;
39820
+ if (!isRecord10(form2)) return null;
38490
39821
  const id = readNonEmptyString(form2.id);
38491
39822
  const name = readNonEmptyString(form2.name);
38492
39823
  if (!id || !name) return null;
38493
- const schemaSource = isRecord8(form2.schema) ? form2.schema : isRecord8(form2.schemaJson) ? form2.schemaJson : null;
38494
- const settingsSource = isRecord8(form2.settings) ? form2.settings : isRecord8(form2.settingsJson) ? form2.settingsJson : null;
39824
+ const schemaSource = isRecord10(form2.schema) ? form2.schema : isRecord10(form2.schemaJson) ? form2.schemaJson : null;
39825
+ const settingsSource = isRecord10(form2.settings) ? form2.settings : isRecord10(form2.settingsJson) ? form2.settingsJson : null;
38495
39826
  return {
38496
39827
  id,
38497
39828
  name,
@@ -38515,10 +39846,10 @@ function normalizeBookingServices(services) {
38515
39846
  if (Array.isArray(services)) {
38516
39847
  return services.filter(isBookingFormService).map(normalizeService);
38517
39848
  }
38518
- if (isRecord8(services) && "services" in services) {
39849
+ if (isRecord10(services) && "services" in services) {
38519
39850
  return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
38520
39851
  }
38521
- return isRecord8(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
39852
+ return isRecord10(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
38522
39853
  }
38523
39854
  function normalizeBookingSchema(value) {
38524
39855
  if (!value) return void 0;
@@ -38530,7 +39861,7 @@ function normalizeBookingSchema(value) {
38530
39861
  };
38531
39862
  }
38532
39863
  function readBookingFormField(value) {
38533
- if (!isRecord8(value)) return null;
39864
+ if (!isRecord10(value)) return null;
38534
39865
  const id = readNonEmptyString(value.id);
38535
39866
  const label = readNonEmptyString(value.label);
38536
39867
  const type = readBookingFieldType(value.type);
@@ -38576,7 +39907,7 @@ function readBookingFieldOptions(value) {
38576
39907
  return options.length > 0 ? options : void 0;
38577
39908
  }
38578
39909
  function readBookingFieldOption(value) {
38579
- if (!isRecord8(value)) return null;
39910
+ if (!isRecord10(value)) return null;
38580
39911
  const optionValue = readNonEmptyString(value.value);
38581
39912
  const label = readNonEmptyString(value.label);
38582
39913
  return optionValue && label ? { value: optionValue, label } : null;
@@ -38593,7 +39924,7 @@ function normalizeBookingSettings(value) {
38593
39924
  };
38594
39925
  }
38595
39926
  function isBookingFormService(value) {
38596
- return isRecord8(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
39927
+ return isRecord10(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
38597
39928
  }
38598
39929
  function readNonEmptyString(value) {
38599
39930
  if (typeof value !== "string") return null;
@@ -38611,7 +39942,7 @@ function readStringArray(value) {
38611
39942
  const strings = value.filter((item) => typeof item === "string");
38612
39943
  return strings.length > 0 ? strings : void 0;
38613
39944
  }
38614
- function isRecord8(value) {
39945
+ function isRecord10(value) {
38615
39946
  return typeof value === "object" && value !== null;
38616
39947
  }
38617
39948
 
@@ -39059,8 +40390,9 @@ function EventDetailsView({
39059
40390
  priceCents: selected.course.priceCents,
39060
40391
  currency: selected.course.currency
39061
40392
  }) : null;
39062
- const eventPricingType = publicEventPricingType(selected.pricing);
39063
- const eventPricingCurrency = publicEventPricingCurrency(selected.pricing) ?? "USD";
40393
+ const eventPricing = resolveRuntimeEventPricing(selected);
40394
+ const eventPricingType = publicEventPricingType(eventPricing);
40395
+ const eventPricingCurrency = publicEventPricingCurrency(eventPricing) ?? "USD";
39064
40396
  const isPaid = eventPricingType === "paid";
39065
40397
  const shouldShowCoursePricing = showCost && !isDropIn && coursePricing !== null;
39066
40398
  const shouldShowEventCost = showCost && isPaid && !isDropIn && coursePricing === null;
@@ -41226,8 +42558,14 @@ var EventListingSSR = (props2) => {
41226
42558
  ] });
41227
42559
  };
41228
42560
 
42561
+ // ../blocks/src/system/runtime/nodes/event-registration/constants.ts
42562
+ var EVENT_REGISTRATION_ANCHOR_ID = "event-registration";
42563
+
41229
42564
  // ../blocks/src/system/runtime/nodes/event-registration.server.tsx
41230
42565
  import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
42566
+ function cx(...classes) {
42567
+ return classes.filter((className) => Boolean(className)).join(" ");
42568
+ }
41231
42569
  function EventRegistrationSSR({
41232
42570
  blockId,
41233
42571
  siteId,
@@ -41270,6 +42608,7 @@ function EventRegistrationSSR({
41270
42608
  stage,
41271
42609
  supportEmail
41272
42610
  });
42611
+ const display = islandProps.render.display;
41273
42612
  return /* @__PURE__ */ jsxs34(
41274
42613
  "div",
41275
42614
  {
@@ -41281,12 +42620,61 @@ function EventRegistrationSSR({
41281
42620
  ...getIslandRootProps("event-registration", blockId),
41282
42621
  children: [
41283
42622
  /* @__PURE__ */ jsx48(IslandPropsScript, { value: islandProps }),
41284
- /* @__PURE__ */ jsx48("div", { className: "event-registration__summary", children: /* @__PURE__ */ jsx48("strong", { children: "Loading booking options..." }) }),
42623
+ /* @__PURE__ */ jsx48(EventRegistrationShell, { display }),
41285
42624
  children
41286
42625
  ]
41287
42626
  }
41288
42627
  );
41289
42628
  }
42629
+ function EventRegistrationShell({
42630
+ display
42631
+ }) {
42632
+ return /* @__PURE__ */ jsx48(
42633
+ "div",
42634
+ {
42635
+ id: EVENT_REGISTRATION_ANCHOR_ID,
42636
+ className: "er-container er-registration-shell",
42637
+ "aria-busy": "true",
42638
+ role: "status",
42639
+ children: /* @__PURE__ */ jsxs34("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
42640
+ /* @__PURE__ */ jsxs34("div", { className: "er-payment-layout-main", children: [
42641
+ /* @__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) => {
42642
+ const isActive = index === 0;
42643
+ return /* @__PURE__ */ jsxs34("li", { className: "er-step", children: [
42644
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-circle", isActive && "er-step-circle--active"), children: index + 1 }),
42645
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-label", isActive && "er-step-label--active"), children: label }),
42646
+ index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx48("span", { className: "er-step-connector" }) : null
42647
+ ] }, label);
42648
+ }) }) }),
42649
+ /* @__PURE__ */ jsxs34("div", { className: "er-stack", children: [
42650
+ /* @__PURE__ */ jsxs34("div", { children: [
42651
+ /* @__PURE__ */ jsx48("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
42652
+ /* @__PURE__ */ jsx48("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
42653
+ /* @__PURE__ */ jsx48("p", { className: "er-text er-text--muted er-registration-shell__copy", children: display.bodyText })
42654
+ ] }),
42655
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
42656
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
42657
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
42658
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
42659
+ ] }),
42660
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
42661
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
42662
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
42663
+ ] })
42664
+ ] })
42665
+ ] })
42666
+ ] }),
42667
+ /* @__PURE__ */ jsx48("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
42668
+ /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar-info", children: [
42669
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
42670
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
42671
+ ] }),
42672
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
42673
+ ] }) })
42674
+ ] })
42675
+ }
42676
+ );
42677
+ }
41290
42678
  var event_registration_server_default = EventRegistrationSSR;
41291
42679
 
41292
42680
  // ../blocks/src/system/runtime/shared/components/FeedbackMessage.tsx
@@ -41872,14 +43260,14 @@ function isDecoratedHeadingBlockKind(blockKind) {
41872
43260
  return blockKind === "block.intro" || blockKind === "block.feature-cards" || blockKind === "block.testimonials" || blockKind === "block.faq";
41873
43261
  }
41874
43262
  function readVariant(blockContent) {
41875
- if (!isRecord9(blockContent)) return void 0;
43263
+ if (!isRecord11(blockContent)) return void 0;
41876
43264
  const variant = blockContent.variant;
41877
43265
  return typeof variant === "string" ? variant : void 0;
41878
43266
  }
41879
43267
  function isFaqDecoratedVariant(variant) {
41880
43268
  return variant === "default" || variant === "question-columns";
41881
43269
  }
41882
- function isRecord9(value) {
43270
+ function isRecord11(value) {
41883
43271
  return typeof value === "object" && value !== null && !Array.isArray(value);
41884
43272
  }
41885
43273
  function buildHeadingDecorationWrapperClassName(className) {
@@ -43387,20 +44775,20 @@ function generateInputCss({
43387
44775
  baseInputRules.push("background-color: transparent");
43388
44776
  } else {
43389
44777
  baseInputRules.push(
43390
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
44778
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
43391
44779
  );
43392
44780
  }
43393
- baseInputRules.push(`color: rgb(var(--tb-${inputSystem.base.textColorToken}))`);
44781
+ baseInputRules.push(`color: ${rgbColorValue(inputSystem.base.textColorToken)}`);
43394
44782
  const borderPx = parseBorderWidth(inputSystem.base.border.widthClass);
43395
44783
  const borderStyle = inputSystem.base.border.style ?? "all";
43396
44784
  if (borderStyle === "underline") {
43397
44785
  baseInputRules.push("border: none");
43398
44786
  baseInputRules.push(
43399
- `border-bottom: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
44787
+ `border-bottom: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
43400
44788
  );
43401
44789
  } else {
43402
44790
  baseInputRules.push(
43403
- `border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
44791
+ `border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
43404
44792
  );
43405
44793
  }
43406
44794
  if (borderStyle === "underline") {
@@ -43427,7 +44815,7 @@ function generateInputCss({
43427
44815
  baseInputRules.push("transition: border-color 0.2s ease, box-shadow 0.2s ease");
43428
44816
  const labelSelector = `${rootSelector} .form-label`;
43429
44817
  const labelRules = [];
43430
- labelRules.push(`color: rgb(var(--tb-${inputSystem.label.textColorToken}))`);
44818
+ labelRules.push(`color: ${rgbColorValue(inputSystem.label.textColorToken)}`);
43431
44819
  labelRules.push(`font-weight: ${FONT_WEIGHT_MAP[inputSystem.label.fontWeight]}`);
43432
44820
  labelRules.push(`font-size: ${LABEL_FONT_SIZE_MAP[inputSystem.label.fontSize]}`);
43433
44821
  if (inputSystem.label.textTransform && inputSystem.label.textTransform !== "none") {
@@ -43468,9 +44856,9 @@ function generateInputCss({
43468
44856
  ];
43469
44857
  const focusRules = [];
43470
44858
  focusRules.push("outline: none");
43471
- focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44859
+ focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43472
44860
  if (inputSystem.focus.borderColorToken) {
43473
- focusRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.borderColorToken}))`);
44861
+ focusRules.push(`border-color: ${rgbColorValue(inputSystem.focus.borderColorToken)}`);
43474
44862
  }
43475
44863
  const errorSelectors = [
43476
44864
  `${inputSelector}[aria-invalid="true"]`,
@@ -43478,16 +44866,16 @@ function generateInputCss({
43478
44866
  `${selectSelector}[aria-invalid="true"]`
43479
44867
  ];
43480
44868
  const errorRules = [];
43481
- errorRules.push(`border-color: rgb(var(--tb-${inputSystem.error.borderColorToken}))`);
43482
- errorRules.push(`color: rgb(var(--tb-${inputSystem.error.textColorToken}))`);
44869
+ errorRules.push(`border-color: ${rgbColorValue(inputSystem.error.borderColorToken)}`);
44870
+ errorRules.push(`color: ${rgbColorValue(inputSystem.error.textColorToken)}`);
43483
44871
  const disabledSelectors = [
43484
44872
  `${inputSelector}:disabled`,
43485
44873
  `${textareaSelector}:disabled`,
43486
44874
  `${selectSelector}:disabled`
43487
44875
  ];
43488
44876
  const disabledRules = [];
43489
- disabledRules.push(`background-color: rgb(var(--tb-${inputSystem.disabled.backgroundColorToken}))`);
43490
- disabledRules.push(`color: rgb(var(--tb-${inputSystem.disabled.textColorToken}))`);
44877
+ disabledRules.push(`background-color: ${rgbColorValue(inputSystem.disabled.backgroundColorToken)}`);
44878
+ disabledRules.push(`color: ${rgbColorValue(inputSystem.disabled.textColorToken)}`);
43491
44879
  disabledRules.push(`opacity: ${inputSystem.disabled.opacity}`);
43492
44880
  disabledRules.push("cursor: not-allowed");
43493
44881
  const checkboxSelector = `${rootSelector} .form-checkbox`;
@@ -43497,12 +44885,12 @@ function generateInputCss({
43497
44885
  checkableRules.push("width: 1rem");
43498
44886
  checkableRules.push("height: 1rem");
43499
44887
  checkableRules.push("flex-shrink: 0");
43500
- checkableRules.push(`border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`);
44888
+ checkableRules.push(`border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`);
43501
44889
  if (inputSystem.base.background.type === "transparent") {
43502
44890
  checkableRules.push("background-color: transparent");
43503
44891
  } else {
43504
44892
  checkableRules.push(
43505
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
44893
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
43506
44894
  );
43507
44895
  }
43508
44896
  checkableRules.push("cursor: pointer");
@@ -43513,22 +44901,22 @@ function generateInputCss({
43513
44901
  radioSpecificRules.push("border-radius: 9999px");
43514
44902
  const checkboxCheckedSelector = `${checkboxSelector}:checked`;
43515
44903
  const checkboxCheckedRules = [];
43516
- checkboxCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
43517
- checkboxCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44904
+ checkboxCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
44905
+ checkboxCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43518
44906
  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")`);
43519
44907
  checkboxCheckedRules.push("background-size: 100% 100%");
43520
44908
  checkboxCheckedRules.push("background-position: center");
43521
44909
  checkboxCheckedRules.push("background-repeat: no-repeat");
43522
44910
  const radioCheckedSelector = `${radioSelector}:checked`;
43523
44911
  const radioCheckedRules = [];
43524
- radioCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
43525
- radioCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44912
+ radioCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
44913
+ radioCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43526
44914
  radioCheckedRules.push("background-image: radial-gradient(circle, white 40%, transparent 40%)");
43527
44915
  const checkboxFocusSelector = `${checkboxSelector}:focus-visible`;
43528
44916
  const radioFocusSelector = `${radioSelector}:focus-visible`;
43529
44917
  const checkableFocusRules = [];
43530
44918
  checkableFocusRules.push("outline: none");
43531
- checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44919
+ checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43532
44920
  const cssBlocks = [];
43533
44921
  cssBlocks.push(`${labelSelector} {
43534
44922
  ${labelRules.join(";\n ")};
@@ -45376,6 +46764,11 @@ ${root} {
45376
46764
  --er-event-card-bg: rgb(var(--tb-surface));
45377
46765
  --er-event-card-border-width: var(--rb-border-width, 1px);
45378
46766
  --er-event-card-hover-opacity: 1;
46767
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
46768
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
46769
+ --er-radius: var(--rb-block-radius);
46770
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
46771
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
45379
46772
 
45380
46773
  /* Step indicator */
45381
46774
  --er-step-active: rgb(var(--tb-primary));
@@ -46376,7 +47769,7 @@ function buildThemeCssVars(theme) {
46376
47769
  // These expose inputStyle/InputSystem values for blocks that can't use .form-* classes
46377
47770
  [THEME_RADIUS_CSS_VARS.input]: inputRadius,
46378
47771
  ["--rb-input-focus-width"]: `${inputSystem.focus.ringWidth}px`,
46379
- ["--rb-input-focus-color"]: `rgb(var(--tb-${inputSystem.focus.ringColorToken}))`,
47772
+ ["--rb-input-focus-color"]: rgbColorValue(inputSystem.focus.ringColorToken),
46380
47773
  // Deprecated compatibility aliases for pre-v2 block/custom CSS. New CSS should
46381
47774
  // consume the semantic --rb-* primitives above.
46382
47775
  [THEME_RADIUS_CSS_VARS.legacyCard]: blockRadius,
@@ -47143,6 +48536,11 @@ var MemoBlockSection = React6.memo(
47143
48536
  siteId: dataContext?.siteId,
47144
48537
  apiBaseUrl: dataContext?.apiBaseUrl,
47145
48538
  portalToken: dataContext?.portalToken ?? null,
48539
+ previewToken: dataContext?.previewToken ?? null,
48540
+ stage: dataContext?.previewStage,
48541
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
48542
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
48543
+ contentEntry: dataContext?.contentEntry ?? null,
47146
48544
  supabaseUrl: dataContext?.supabaseUrl,
47147
48545
  imageResolveContext: resolvedImageResolveContext,
47148
48546
  blockId: block.id ?? null,
@@ -47266,6 +48664,11 @@ var MemoBlockSection = React6.memo(
47266
48664
  siteId: dataContext?.siteId,
47267
48665
  apiBaseUrl: dataContext?.apiBaseUrl,
47268
48666
  portalToken: dataContext?.portalToken ?? null,
48667
+ previewToken: dataContext?.previewToken ?? null,
48668
+ stage: dataContext?.previewStage,
48669
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
48670
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
48671
+ contentEntry: dataContext?.contentEntry ?? null,
47269
48672
  supabaseUrl: dataContext?.supabaseUrl,
47270
48673
  imageResolveContext: resolvedImageResolveContext,
47271
48674
  blockId: block.id ?? null,
@@ -47452,6 +48855,9 @@ var containerResponsiveThemeCss = `/*
47452
48855
  letter-spacing: 0.025em;
47453
48856
  text-transform: uppercase;
47454
48857
  }
48858
+ .rb-eyebrow-treatment-accent {
48859
+ color: rgb(var(--tb-accent));
48860
+ }
47455
48861
  .rb-eyebrow-treatment-pill {
47456
48862
  align-self: center;
47457
48863
  display: inline-flex;
@@ -47506,6 +48912,27 @@ var containerResponsiveThemeCss = `/*
47506
48912
  font-weight: 400;
47507
48913
  }
47508
48914
 
48915
+ /* Media shape treatments */
48916
+ .rb-media-shape-square,
48917
+ .rb-media-shape-rounded,
48918
+ .rb-media-shape-circle,
48919
+ .rb-media-shape-arch {
48920
+ overflow: hidden;
48921
+ }
48922
+ .rb-media-shape-square {
48923
+ border-radius: 0;
48924
+ }
48925
+ .rb-media-shape-rounded {
48926
+ border-radius: var(--rb-media-shape-radius, 1rem);
48927
+ }
48928
+ .rb-media-shape-circle {
48929
+ border-radius: 9999px;
48930
+ }
48931
+ .rb-media-shape-arch {
48932
+ border-radius: 9999px 9999px var(--rb-media-shape-arch-base-radius, 0.125rem)
48933
+ var(--rb-media-shape-arch-base-radius, 0.125rem);
48934
+ }
48935
+
47509
48936
  /* Navigation typography */
47510
48937
  .rb-nav-text {
47511
48938
  font-size: 0.875rem;
@@ -50660,7 +52087,7 @@ var containerResponsiveThemeCss = `/*
50660
52087
  :where(.theme-scope) :where([data-block="event-registration"]) .er-container {
50661
52088
  border-radius: var(--rb-block-radius);
50662
52089
  border: 1px solid var(--er-border);
50663
- padding: 1.5rem;
52090
+ padding: clamp(1rem, 2vw, 1.5rem);
50664
52091
  background: rgb(var(--tb-surface));
50665
52092
  color: var(--er-on-surface);
50666
52093
  transition: border-color var(--rb-block-transition) ease;
@@ -50669,6 +52096,109 @@ var containerResponsiveThemeCss = `/*
50669
52096
  margin-inline: 0;
50670
52097
  }
50671
52098
 
52099
+ /* SSR shell / required-island fallback */
52100
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell {
52101
+ min-height: 24rem;
52102
+ }
52103
+
52104
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__steps {
52105
+ margin-bottom: 1.25rem;
52106
+ }
52107
+
52108
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__eyebrow {
52109
+ margin: 0 0 0.35rem;
52110
+ color: var(--er-on-surface-subtle);
52111
+ font-size: 0.75rem;
52112
+ font-weight: 700;
52113
+ letter-spacing: 0.04em;
52114
+ line-height: 1.2;
52115
+ text-transform: uppercase;
52116
+ }
52117
+
52118
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__title {
52119
+ margin: 0;
52120
+ }
52121
+
52122
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__copy {
52123
+ margin: 0.35rem 0 0;
52124
+ max-width: 36rem;
52125
+ line-height: 1.45;
52126
+ }
52127
+
52128
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__cards {
52129
+ margin-top: 0.25rem;
52130
+ overflow: hidden;
52131
+ border: 1px solid var(--er-border);
52132
+ border-radius: var(--rb-block-radius);
52133
+ background: var(--er-control-bg);
52134
+ }
52135
+
52136
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__card {
52137
+ display: grid;
52138
+ gap: 0.5rem;
52139
+ padding: 1rem;
52140
+ }
52141
+
52142
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line {
52143
+ height: 0.75rem;
52144
+ border-radius: 9999px;
52145
+ background: linear-gradient(
52146
+ 90deg,
52147
+ var(--er-shell-line),
52148
+ rgba(var(--tb-primary), 0.12),
52149
+ var(--er-shell-line)
52150
+ );
52151
+ }
52152
+
52153
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--lg {
52154
+ width: min(26rem, 82%);
52155
+ }
52156
+
52157
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--md {
52158
+ width: min(19rem, 68%);
52159
+ }
52160
+
52161
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--sm {
52162
+ width: min(14rem, 52%);
52163
+ }
52164
+
52165
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--xs {
52166
+ width: min(10rem, 42%);
52167
+ }
52168
+
52169
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__summary {
52170
+ align-items: center;
52171
+ border-radius: calc(var(--rb-block-radius) * 0.75);
52172
+ border: 1px solid var(--er-summary-border);
52173
+ padding: 0.875rem 1rem;
52174
+ }
52175
+
52176
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__button-placeholder {
52177
+ display: inline-flex;
52178
+ min-height: 2.5rem;
52179
+ align-items: center;
52180
+ justify-content: center;
52181
+ border-radius: calc(var(--rb-block-radius) * 0.6);
52182
+ background: rgb(var(--tb-primary));
52183
+ color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
52184
+ padding: 0.625rem 1rem;
52185
+ font-size: 0.875rem;
52186
+ font-weight: 600;
52187
+ line-height: 1.2;
52188
+ text-align: center;
52189
+ white-space: nowrap;
52190
+ }
52191
+
52192
+ :where(.theme-scope) :where([data-block="event-registration"]) .event-registration__hydration-error {
52193
+ border-radius: var(--rb-block-radius);
52194
+ border: 1px solid var(--er-border-error);
52195
+ background: var(--er-error-bg);
52196
+ color: var(--er-error-text);
52197
+ padding: 1rem;
52198
+ font-size: 0.9375rem;
52199
+ line-height: 1.45;
52200
+ }
52201
+
50672
52202
  :where(.theme-scope) :where([data-block="event-registration"].event-registration--embedded) .er-container {
50673
52203
  max-width: none;
50674
52204
  padding: 0;
@@ -50716,6 +52246,7 @@ var containerResponsiveThemeCss = `/*
50716
52246
  padding: 1rem;
50717
52247
  border-radius: calc(var(--rb-block-radius) * 0.75);
50718
52248
  border: 1px solid var(--er-border);
52249
+ background: var(--er-surface-muted);
50719
52250
  }
50720
52251
 
50721
52252
  /* Ticket counter */
@@ -50761,14 +52292,23 @@ var containerResponsiveThemeCss = `/*
50761
52292
  /* Form inputs */
50762
52293
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input {
50763
52294
  width: 100%;
50764
- padding: 0.5rem 0.75rem;
52295
+ min-height: 2.75rem;
52296
+ padding: 0.625rem 0.75rem;
50765
52297
  border-radius: calc(var(--rb-block-radius) * 0.5);
50766
52298
  border: 1px solid var(--er-border);
50767
- background: transparent;
52299
+ background: var(--er-control-bg);
52300
+ color: var(--er-control-text);
52301
+ font: inherit;
52302
+ line-height: 1.4;
50768
52303
  transition: border-color var(--rb-block-transition) ease,
52304
+ background-color var(--rb-block-transition) ease,
50769
52305
  box-shadow var(--rb-block-transition) ease;
50770
52306
  }
50771
52307
 
52308
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-input::placeholder {
52309
+ color: var(--er-on-surface-faint);
52310
+ }
52311
+
50772
52312
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input:focus {
50773
52313
  outline: none;
50774
52314
  border-color: var(--er-border-selected);
@@ -50890,7 +52430,7 @@ var containerResponsiveThemeCss = `/*
50890
52430
  }
50891
52431
 
50892
52432
  :where(.theme-scope) :where([data-block="event-registration"]) .er-event-grid .er-event-card {
50893
- padding: 0.75rem 0;
52433
+ padding: 0.875rem 0;
50894
52434
  border-width: 0 0 var(--rb-event-tile-border-width, var(--rb-border-width, 1px)) 0;
50895
52435
  border-style: solid;
50896
52436
  border-radius: 0;
@@ -51122,21 +52662,24 @@ var containerResponsiveThemeCss = `/*
51122
52662
  align-items: flex-start;
51123
52663
  gap: 0.75rem;
51124
52664
  padding: 1rem;
51125
- border: 2px solid var(--er-payment-border);
52665
+ border: 1px solid var(--er-payment-border);
51126
52666
  border-radius: var(--rb-block-radius);
51127
- background: transparent;
52667
+ background: var(--er-control-bg);
51128
52668
  cursor: pointer;
51129
52669
  transition: border-color var(--rb-block-transition) ease,
52670
+ box-shadow var(--rb-block-transition) ease,
51130
52671
  background-color var(--rb-block-transition) ease;
51131
52672
  }
51132
52673
 
51133
52674
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option:hover {
51134
52675
  border-color: var(--er-payment-border-hover);
52676
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
51135
52677
  }
51136
52678
 
51137
52679
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option--selected {
51138
52680
  border-color: var(--er-payment-border-selected);
51139
52681
  background-color: var(--er-payment-bg-selected);
52682
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
51140
52683
  }
51141
52684
 
51142
52685
  /* Discount code entry */
@@ -51824,22 +53367,25 @@ var containerResponsiveThemeCss = `/*
51824
53367
  justify-content: center;
51825
53368
  gap: 0.25rem;
51826
53369
  padding: 0.75rem 0.625rem;
51827
- border: 2px solid var(--er-payment-border);
53370
+ border: 1px solid var(--er-payment-border);
51828
53371
  border-radius: var(--rb-block-radius);
51829
- background: transparent;
53372
+ background: var(--er-control-bg);
51830
53373
  cursor: pointer;
51831
53374
  text-align: center;
51832
53375
  transition: border-color var(--rb-block-transition) ease,
53376
+ box-shadow var(--rb-block-transition) ease,
51833
53377
  background-color var(--rb-block-transition) ease;
51834
53378
  }
51835
53379
 
51836
53380
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile:hover:not([aria-disabled="true"]) {
51837
53381
  border-color: var(--er-payment-border-hover);
53382
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
51838
53383
  }
51839
53384
 
51840
53385
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--selected {
51841
53386
  border-color: var(--er-payment-border-selected);
51842
53387
  background-color: var(--er-payment-bg-selected);
53388
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
51843
53389
  }
51844
53390
 
51845
53391
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--disabled {
@@ -51942,11 +53488,10 @@ var containerResponsiveThemeCss = `/*
51942
53488
  justify-content: space-between;
51943
53489
  align-items: flex-start;
51944
53490
  gap: 1rem;
51945
- padding: 0.875rem 0;
51946
- background: transparent;
51947
- border-top: 1px solid var(--er-summary-border);
51948
- border-bottom: 1px solid var(--er-summary-border);
51949
- border-radius: 0;
53491
+ padding: 0.875rem 1rem;
53492
+ background: var(--er-surface-muted);
53493
+ border: 1px solid var(--er-summary-border);
53494
+ border-radius: calc(var(--rb-block-radius) * 0.75);
51950
53495
  }
51951
53496
 
51952
53497
  :where(.theme-scope) :where([data-block="event-registration"]) .er-summary-bar-info {
@@ -53718,18 +55263,10 @@ var containerResponsiveThemeCss = `/*
53718
55263
  /* Two-column row (opt-in per field via schema layout) */
53719
55264
  :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
53720
55265
  display: grid;
53721
- grid-template-columns: 1fr;
55266
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
53722
55267
  gap: 1rem;
53723
55268
  }
53724
55269
 
53725
- @container rb-site (min-width: 768px) {
53726
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
53727
- :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
53728
- grid-template-columns: 1fr 1fr;
53729
- }
53730
- }
53731
- }
53732
-
53733
55270
  /* Field wrapper */
53734
55271
  :where(.theme-scope) :where([data-block="form"]) .fb-field {
53735
55272
  display: flex;
@@ -53803,6 +55340,10 @@ var containerResponsiveThemeCss = `/*
53803
55340
  }
53804
55341
 
53805
55342
  /* Subheadline - supporting text below headline */
55343
+ :where(.theme-scope) :where([data-block="hero"]) .hero-headline {
55344
+ text-wrap: balance;
55345
+ }
55346
+
53806
55347
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
53807
55348
  font-size: 1.125rem;
53808
55349
  color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
@@ -53828,8 +55369,8 @@ var containerResponsiveThemeCss = `/*
53828
55369
  }
53829
55370
 
53830
55371
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-headline {
53831
- font-size: clamp(2.5rem, 5vw, 4rem);
53832
- line-height: 1.08;
55372
+ font-size: clamp(2.75rem, 5.6vw, 4.75rem);
55373
+ line-height: 1.06;
53833
55374
  }
53834
55375
 
53835
55376
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-subheadline {
@@ -53838,8 +55379,8 @@ var containerResponsiveThemeCss = `/*
53838
55379
  }
53839
55380
 
53840
55381
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline {
53841
- font-size: clamp(3rem, 6vw, 5rem);
53842
- line-height: 1.04;
55382
+ font-size: clamp(3.5rem, 7.2vw, 6.25rem);
55383
+ line-height: 1;
53843
55384
  }
53844
55385
 
53845
55386
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-subheadline {
@@ -53848,8 +55389,8 @@ var containerResponsiveThemeCss = `/*
53848
55389
  }
53849
55390
 
53850
55391
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline {
53851
- font-size: clamp(3.5rem, 8vw, 6.5rem);
53852
- line-height: 0.98;
55392
+ font-size: clamp(4.25rem, 10vw, 8.5rem);
55393
+ line-height: 0.94;
53853
55394
  }
53854
55395
 
53855
55396
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-subheadline {
@@ -53858,13 +55399,13 @@ var containerResponsiveThemeCss = `/*
53858
55399
  }
53859
55400
 
53860
55401
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-medium.rb-hero-typography-poster .hero-headline {
53861
- font-size: clamp(3rem, 6.5vw, 5rem);
55402
+ font-size: clamp(3.5rem, 7.5vw, 6.5rem);
53862
55403
  }
53863
55404
 
53864
55405
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
53865
55406
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
53866
- font-size: clamp(2.75rem, 5.5vw, 4.5rem);
53867
- line-height: 1.05;
55407
+ font-size: clamp(3rem, 6vw, 5.25rem);
55408
+ line-height: 1.02;
53868
55409
  }
53869
55410
 
53870
55411
  @container rb-site (max-width: 639px) {
@@ -56586,8 +58127,9 @@ var containerResponsiveThemeCss = `/*
56586
58127
  /* Privacy note */
56587
58128
  :where(.theme-scope) .newsletter-privacy-note {
56588
58129
  margin-top: 0.75rem;
56589
- font-size: 0.75rem;
56590
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
58130
+ font-size: 1rem;
58131
+ line-height: 1.6;
58132
+ color: var(--section-text-color, rgb(var(--tb-text)));
56591
58133
  text-align: center;
56592
58134
  }
56593
58135
 
@@ -56642,6 +58184,116 @@ var containerResponsiveThemeCss = `/*
56642
58184
  color: rgb(var(--tb-text));
56643
58185
  }
56644
58186
 
58187
+ /* =============================================================================
58188
+ * Block: Contact + Newsletter
58189
+ * =============================================================================
58190
+ */
58191
+
58192
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
58193
+ display: grid;
58194
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
58195
+ gap: clamp(2.5rem, 6vw, 4rem);
58196
+ align-items: start;
58197
+ }
58198
+
58199
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
58200
+ min-width: 0;
58201
+ }
58202
+
58203
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
58204
+ margin-bottom: 1.5rem;
58205
+ }
58206
+
58207
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
58208
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
58209
+ margin: 0 0 0.75rem;
58210
+ }
58211
+
58212
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
58213
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
58214
+ color: var(--section-text-color, rgb(var(--tb-text)));
58215
+ }
58216
+
58217
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
58218
+ display: flex;
58219
+ flex-direction: column;
58220
+ align-items: flex-start;
58221
+ }
58222
+
58223
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
58224
+ max-width: none;
58225
+ margin-left: 0;
58226
+ margin-right: 0;
58227
+ }
58228
+
58229
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
58230
+ text-align: left;
58231
+ }
58232
+
58233
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
58234
+ display: flex;
58235
+ flex-direction: column;
58236
+ gap: 1rem;
58237
+ }
58238
+
58239
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
58240
+ display: grid;
58241
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
58242
+ gap: 1rem;
58243
+ }
58244
+
58245
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
58246
+ display: flex;
58247
+ flex-direction: column;
58248
+ gap: 0.25rem;
58249
+ }
58250
+
58251
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
58252
+ display: flex;
58253
+ flex-direction: column;
58254
+ gap: 0.5rem;
58255
+ border: none;
58256
+ padding: 0;
58257
+ margin: 0;
58258
+ }
58259
+
58260
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
58261
+ display: flex;
58262
+ align-items: center;
58263
+ gap: 0.5rem;
58264
+ }
58265
+
58266
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
58267
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
58268
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
58269
+ border-radius: var(--rb-block-radius);
58270
+ padding: 1rem;
58271
+ font-size: 0.875rem;
58272
+ }
58273
+
58274
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
58275
+ background-color: var(--fb-success-bg);
58276
+ color: var(--fb-success-text);
58277
+ border: 1px solid var(--fb-success-border);
58278
+ }
58279
+
58280
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
58281
+ background-color: var(--fb-error-bg);
58282
+ color: var(--fb-error-text);
58283
+ border: 1px solid var(--fb-error-border);
58284
+ }
58285
+
58286
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
58287
+ background-color: var(--fb-empty-bg);
58288
+ color: var(--fb-empty-text);
58289
+ border: 1px dashed var(--fb-empty-border);
58290
+ text-align: center;
58291
+ }
58292
+
58293
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
58294
+ margin-top: 0.5rem;
58295
+ }
58296
+
56645
58297
  /* =============================================================================
56646
58298
  * Block: Team Members
56647
58299
  * =============================================================================
@@ -56866,8 +58518,8 @@ var containerResponsiveThemeCss = `/*
56866
58518
  container: event-compact-list / inline-size;
56867
58519
  border: 1px solid var(--event-compact-divider-color);
56868
58520
  border-radius: 1rem;
56869
- background: rgb(var(--tb-background, 255 255 255));
56870
- box-shadow: 0 1.25rem 3.5rem rgba(var(--tb-shadow), 0.08);
58521
+ background: rgb(var(--tb-surface, 255 255 255));
58522
+ box-shadow: none;
56871
58523
  }
56872
58524
 
56873
58525
  :where(.theme-scope) .rb-event-list-treatment-lined-panel .event-listing-compact-container {
@@ -56876,6 +58528,12 @@ var containerResponsiveThemeCss = `/*
56876
58528
  rgb(var(--tb-border, 229 231 235)),
56877
58529
  rgb(var(--tb-text, 17 24 39)) 8%
56878
58530
  );
58531
+ background: rgb(var(--tb-surface, 255 255 255));
58532
+ border-color: color-mix(
58533
+ in oklab,
58534
+ rgb(var(--tb-primary, 0 0 0)),
58535
+ rgb(var(--tb-border, 229 231 235)) 72%
58536
+ );
56879
58537
  }
56880
58538
 
56881
58539
  :where(.theme-scope) .event-compact-row {
@@ -56951,7 +58609,7 @@ var containerResponsiveThemeCss = `/*
56951
58609
 
56952
58610
  :where(.theme-scope) .event-compact-row-title {
56953
58611
  margin: 0;
56954
- color: rgb(var(--tb-text, 17 24 39));
58612
+ color: var(--section-heading-color, rgb(var(--tb-primary, 0 0 0)));
56955
58613
  font-family: var(--font-heading, var(--font-body, inherit));
56956
58614
  font-size: clamp(1.05rem, 1rem + 0.35vw, 1.3rem);
56957
58615
  font-weight: 400;
@@ -57044,8 +58702,6 @@ var containerResponsiveThemeCss = `/*
57044
58702
  min-height: 2.7rem;
57045
58703
  justify-content: space-between;
57046
58704
  gap: 1rem;
57047
- border-radius: 9999px;
57048
- padding-inline: 1.25rem 1rem;
57049
58705
  white-space: nowrap;
57050
58706
  }
57051
58707
 
@@ -58107,6 +59763,7 @@ function PageContent({
58107
59763
  mediaAssets,
58108
59764
  apiBaseUrl,
58109
59765
  portalToken,
59766
+ previewToken,
58110
59767
  dataContext,
58111
59768
  useThemeScope = false
58112
59769
  }) {
@@ -58123,6 +59780,7 @@ function PageContent({
58123
59780
  siteId,
58124
59781
  apiBaseUrl,
58125
59782
  portalToken,
59783
+ previewToken,
58126
59784
  resolvedData,
58127
59785
  routes: routeMap,
58128
59786
  pagesByIdentifier,
@@ -62021,6 +63679,46 @@ var ENDPOINT_DEFINITIONS = {
62021
63679
  auth: "user",
62022
63680
  responseKind: "json"
62023
63681
  },
63682
+ listEntrySlotBlocks: {
63683
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
63684
+ method: "GET",
63685
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
63686
+ auth: "user",
63687
+ responseKind: "json",
63688
+ errors: ["resource:not_found"]
63689
+ },
63690
+ listEntryPageContentSlots: {
63691
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
63692
+ method: "GET",
63693
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
63694
+ auth: "user",
63695
+ responseKind: "json",
63696
+ errors: ["resource:not_found"]
63697
+ },
63698
+ createEntrySlotBlock: {
63699
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
63700
+ method: "POST",
63701
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
63702
+ auth: "user",
63703
+ responseKind: "json",
63704
+ errors: ["validation:invalid_input", "resource:not_found"]
63705
+ },
63706
+ reorderEntrySlotBlocks: {
63707
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
63708
+ method: "POST",
63709
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
63710
+ auth: "user",
63711
+ responseKind: "json",
63712
+ errors: ["validation:invalid_input", "resource:not_found"]
63713
+ },
63714
+ deleteEntrySlotBlock: {
63715
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
63716
+ method: "DELETE",
63717
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
63718
+ auth: "user",
63719
+ responseKind: "json",
63720
+ errors: ["resource:not_found"]
63721
+ },
62024
63722
  createBlock: {
62025
63723
  path: "/sites/{siteId}/pages/{pageId}/blocks",
62026
63724
  method: "POST",
@@ -65844,7 +67542,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
65844
67542
  }
65845
67543
 
65846
67544
  // ../api/src/utils/isRecord.ts
65847
- function isRecord10(value) {
67545
+ function isRecord12(value) {
65848
67546
  return typeof value === "object" && value !== null && !Array.isArray(value);
65849
67547
  }
65850
67548
 
@@ -66151,7 +67849,7 @@ function sanitizeMarks(marks) {
66151
67849
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
66152
67850
  return [{ type: mark.type }];
66153
67851
  }
66154
- if (mark.type === "link" && isRecord10(mark.attrs) && typeof mark.attrs.href === "string") {
67852
+ if (mark.type === "link" && isRecord12(mark.attrs) && typeof mark.attrs.href === "string") {
66155
67853
  const attrs = { href: mark.attrs.href };
66156
67854
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
66157
67855
  attrs.target = mark.attrs.target;
@@ -66166,10 +67864,10 @@ function sanitizeMarks(marks) {
66166
67864
  return sanitized.length > 0 ? sanitized : void 0;
66167
67865
  }
66168
67866
  function unwrapRichTextValue(value) {
66169
- if (isRecord10(value) && isRecord10(value.doc)) {
67867
+ if (isRecord12(value) && isRecord12(value.doc)) {
66170
67868
  return unwrapRichTextValue(value.doc);
66171
67869
  }
66172
- if (isRecord10(value) && value.type === "doc") {
67870
+ if (isRecord12(value) && value.type === "doc") {
66173
67871
  return {
66174
67872
  type: "doc",
66175
67873
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -66178,7 +67876,7 @@ function unwrapRichTextValue(value) {
66178
67876
  return EMPTY_SITE_BANNER_BODY;
66179
67877
  }
66180
67878
  function isTipTapNodeLike(value) {
66181
- return isRecord10(value) && typeof value.type === "string";
67879
+ return isRecord12(value) && typeof value.type === "string";
66182
67880
  }
66183
67881
  function coerceTipTapNode(value) {
66184
67882
  return {
@@ -66186,9 +67884,9 @@ function coerceTipTapNode(value) {
66186
67884
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
66187
67885
  ...typeof value.text === "string" ? { text: value.text } : {},
66188
67886
  ...Array.isArray(value.marks) ? {
66189
- marks: value.marks.filter((mark) => isRecord10(mark) && typeof mark.type === "string").map((mark) => ({
67887
+ marks: value.marks.filter((mark) => isRecord12(mark) && typeof mark.type === "string").map((mark) => ({
66190
67888
  type: mark.type,
66191
- ...isRecord10(mark.attrs) ? { attrs: mark.attrs } : {}
67889
+ ...isRecord12(mark.attrs) ? { attrs: mark.attrs } : {}
66192
67890
  }))
66193
67891
  } : {}
66194
67892
  };