@riverbankcms/sdk 0.82.0 → 0.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/README.md +16 -0
  2. package/dist/{PreviewEditorSidebar-LHGK6RIO.mjs → PreviewEditorSidebar-HML67UDA.mjs} +330 -11
  3. package/dist/{PreviewEditorUI-AXZG2SDC.mjs → PreviewEditorUI-I4BQUU6K.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-MCKMVDTK.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +200 -0
  6. package/dist/_dts/api/src/blocks.d.ts +36 -0
  7. package/dist/_dts/api/src/contentRuntime.d.ts +46 -0
  8. package/dist/_dts/api/src/endpoints.d.ts +40 -0
  9. package/dist/_dts/api/src/index.d.ts +2 -2
  10. package/dist/_dts/api/src/sdk-event-pricing.d.ts +61 -0
  11. package/dist/_dts/api/src/sdk-event-schedule.d.ts +52 -0
  12. package/dist/_dts/api/src/sdk-event-upsert.d.ts +50 -0
  13. package/dist/_dts/api/src/sdkContracts.d.ts +67 -33
  14. package/dist/_dts/api/src/shared-contracts.d.ts +13 -0
  15. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +22 -36
  16. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +46 -1
  17. package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +6 -1
  18. package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +3 -2
  19. package/dist/_dts/block-form/src/utils/visibleWhen.d.ts +7 -0
  20. package/dist/_dts/blocks/src/PageRenderer.d.ts +11 -0
  21. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
  22. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  23. package/dist/_dts/blocks/src/client.d.ts +4 -0
  24. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
  25. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -2016
  26. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -2016
  27. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -2016
  28. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -2016
  29. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -2016
  30. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +171 -0
  31. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -2016
  32. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -2016
  33. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +3 -2
  34. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  35. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -7
  36. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +2534 -151
  37. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -2016
  38. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -2016
  39. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -2016
  40. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +36 -3
  41. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  42. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  43. package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +4 -1
  44. package/dist/_dts/blocks/src/system/fields/imageShape.d.ts +30 -0
  45. package/dist/_dts/blocks/src/system/fragments/library/heroLayoutControls.d.ts +25 -0
  46. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +35 -161
  47. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -6
  48. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -3
  49. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +33 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +303 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +20 -1
  52. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -3
  53. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +26 -6
  55. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +14 -0
  56. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +1 -1
  57. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +1 -1
  58. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +1 -1
  59. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +1 -1
  60. package/dist/_dts/content-editor/src/controller/useInvalidBlockRecovery.d.ts +1 -1
  61. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +2 -1
  62. package/dist/_dts/content-editor/src/primitives/PreviewTextEditor.d.ts +1 -0
  63. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  64. package/dist/_dts/content-model/src/entry-slots/types.d.ts +356 -0
  65. package/dist/_dts/content-model/src/index.d.ts +1 -0
  66. package/dist/_dts/content-model/src/templates/defaults.d.ts +7 -0
  67. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +100 -5
  68. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +6 -1
  69. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
  70. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +3 -2
  71. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +3 -2
  72. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +3 -2
  73. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +27 -0
  74. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  75. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +8 -0
  76. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +37 -3
  77. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  78. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  79. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
  80. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +19 -0
  81. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +8 -0
  82. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  83. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -1
  84. package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +9 -0
  85. package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +9 -8
  86. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +10 -1
  87. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +5 -1
  88. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
  89. package/dist/_dts/sdk/src/bookings/types.d.ts +2 -2
  90. package/dist/_dts/sdk/src/cli/content/reader.d.ts +9 -8
  91. package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -1
  92. package/dist/_dts/sdk/src/cli/helpers.d.ts +10 -5
  93. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +2 -2
  94. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +2 -1
  95. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -2
  96. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  97. package/dist/_dts/sdk/src/client/management/types.d.ts +40 -10
  98. package/dist/_dts/sdk/src/config/field-definitions.d.ts +13 -7
  99. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +26 -3
  100. package/dist/_dts/sdk/src/public-api/contracts.d.ts +13 -0
  101. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  102. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +6 -1
  103. package/dist/_dts/sdk/src/rendering/overrides.d.ts +6 -1
  104. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  105. package/dist/_dts/sdk/src/version.d.ts +1 -1
  106. package/dist/_dts/site-commands/src/commands.d.ts +15 -0
  107. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  108. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  109. package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +16 -0
  110. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  111. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  112. package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
  113. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  114. package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
  115. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +33 -33
  116. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  117. package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +16 -0
  118. package/dist/_dts/theme-core/src/schema.d.ts +30 -25
  119. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  120. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +141 -1
  121. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -0
  122. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +110 -5
  123. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  124. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  125. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +5 -1
  126. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  127. package/dist/_dts/theme-core/src/site-styles/types.d.ts +1 -1
  128. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
  129. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +1 -0
  130. package/dist/_dts/theme-core/src/utils/colorStyles.d.ts +6 -6
  131. package/dist/{chunk-2BUMISSH.mjs → chunk-3LXFQS7T.mjs} +1 -1
  132. package/dist/{chunk-G35HOQEN.mjs → chunk-5E33VO6J.mjs} +132 -46
  133. package/dist/{chunk-HKB6XVIP.mjs → chunk-6X2OVO3S.mjs} +2 -2
  134. package/dist/{chunk-6FWNF3DJ.mjs → chunk-HFMGVJCE.mjs} +158 -20
  135. package/dist/{chunk-FIREV57T.mjs → chunk-LBBPD2IW.mjs} +40 -0
  136. package/dist/{chunk-XQR6THQJ.mjs → chunk-MSHZO4SL.mjs} +3193 -1216
  137. package/dist/cli/index.mjs +2635 -575
  138. package/dist/cli/init-docs/content/getting-started.md +2 -0
  139. package/dist/cli/init-docs/content/workflow-templates.md +93 -2
  140. package/dist/client/{accordion-G34C45TW.mjs → accordion-ESY65T56.mjs} +2 -2
  141. package/dist/client/{bookingForm-BLBVKSAQ.mjs → bookingForm-JRFNZUHD.mjs} +5 -5
  142. package/dist/client/bookings.mjs +3539 -269
  143. package/dist/client/{carousel-7ZVTBRMD.mjs → carousel-CPR5VWIP.mjs} +3 -3
  144. package/dist/client/{cart-Q6S6LZUO.mjs → cart-ZUX5BA7O.mjs} +6 -6
  145. package/dist/client/{checkout-5QJLDE4I.mjs → checkout-RULGBADZ.mjs} +6 -6
  146. package/dist/client/{chunk-CHAB5ACD.mjs → chunk-52I7BGEK.mjs} +2 -2
  147. package/dist/client/{chunk-CSZGLBYR.mjs → chunk-5ZEAZ33K.mjs} +1 -1
  148. package/dist/client/{chunk-ZF4XEWDM.mjs → chunk-BT6AEIKN.mjs} +1 -1
  149. package/dist/client/{chunk-RJHTCTCZ.mjs → chunk-HXPWP5EN.mjs} +268 -15
  150. package/dist/client/{chunk-5PQH4Y75.mjs → chunk-JWEYB4V6.mjs} +2 -2
  151. package/dist/client/{chunk-EQKYMX4N.mjs → chunk-RDJFCPY3.mjs} +158 -51
  152. package/dist/client/{chunk-SBBSMFFG.mjs → chunk-SYIJ5JO2.mjs} +1 -1
  153. package/dist/client/{chunk-WJFHDTYF.mjs → chunk-URQCZD5W.mjs} +5 -5
  154. package/dist/client/{chunk-U2EW7RSR.mjs → chunk-Z5OBQ5I4.mjs} +1 -1
  155. package/dist/client/{chunk-S3MKFGOG.mjs → chunk-ZE5G642V.mjs} +1 -1
  156. package/dist/client/client.mjs +2391 -673
  157. package/dist/client/{courseRegistration-VUG2JJDB.mjs → courseRegistration-QTUDC35T.mjs} +5 -5
  158. package/dist/client/{eventCalendar-E7D2LD4N.mjs → eventCalendar-Q7NS4XLD.mjs} +7 -7
  159. package/dist/client/{eventCombined-FUZ2Z3CS.mjs → eventCombined-QAO7VUO5.mjs} +7 -7
  160. package/dist/client/{eventDetails-QRITJAOW.mjs → eventDetails-WTNNU6Q3.mjs} +7 -7
  161. package/dist/client/{eventListing-INMQMJZ5.mjs → eventListing-5TA2ELDT.mjs} +7 -7
  162. package/dist/client/{eventRegistration-TOOJD4WU.mjs → eventRegistration-M6USZGRF.mjs} +7 -7
  163. package/dist/client/{form-BOWN7ZNQ.mjs → form-DGVGXLMH.mjs} +2 -2
  164. package/dist/client/{headerSection-HFQNZOUU.mjs → headerSection-O2AGMPCU.mjs} +3 -3
  165. package/dist/client/hooks.mjs +1636 -385
  166. package/dist/client/{locationMap-VUZGC7Y5.mjs → locationMap-EJRNRIKJ.mjs} +2 -2
  167. package/dist/client/{newsletterForm-X2XQTPCB.mjs → newsletterForm-7NTC2DTR.mjs} +2 -2
  168. package/dist/client/{productDetail-TA7D2G2B.mjs → productDetail-HH4LP53D.mjs} +6 -6
  169. package/dist/client/{productList-AZOLOZKM.mjs → productList-YVHYM2AF.mjs} +6 -6
  170. package/dist/client/rendering/client.mjs +2303 -1068
  171. package/dist/client/rendering/islands.mjs +19 -19
  172. package/dist/client/rendering.mjs +2587 -796
  173. package/dist/client/{shop-ZDLO7IIG.mjs → shop-UIFX7XRK.mjs} +6 -6
  174. package/dist/preview-next/before-render.mjs +40 -0
  175. package/dist/preview-next/client/runtime.mjs +5 -5
  176. package/dist/preview-next/middleware.mjs +40 -0
  177. package/dist/{sdk-runtime-CTWKNBDQ.mjs → sdk-runtime-ZENAOYMN.mjs} +6 -6
  178. package/dist/server/components.mjs +2028 -457
  179. package/dist/server/config-validation.mjs +1629 -377
  180. package/dist/server/config.mjs +1629 -377
  181. package/dist/server/data.mjs +1636 -385
  182. package/dist/server/index.mjs +42 -1
  183. package/dist/server/next.mjs +2215 -571
  184. package/dist/server/page-converter.mjs +2068 -884
  185. package/dist/server/prebuild.mjs +1 -1
  186. package/dist/server/rendering/server.mjs +2040 -469
  187. package/dist/server/rendering.mjs +2119 -475
  188. package/dist/server/routing.mjs +1711 -419
  189. package/dist/server/server.mjs +1718 -394
  190. package/dist/server/theme-bridge.mjs +1180 -101
  191. package/dist/server/theme.mjs +92 -1
  192. package/dist/styles/index.css +292 -36
  193. package/package.json +1 -1
  194. package/dist/SdkPreviewModeRuntime-RNVRHFFR.mjs +0 -8
@@ -1974,7 +1974,7 @@ function createSdkSelectField(input) {
1974
1974
  })
1975
1975
  );
1976
1976
  }
1977
- var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum, manifestSchema;
1977
+ var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, visibleWhenPredicateSchema, visibleWhenSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum, manifestSchema;
1978
1978
  var init_schema2 = __esm({
1979
1979
  "../blocks/src/system/manifest/schema.ts"() {
1980
1980
  "use strict";
@@ -2033,6 +2033,21 @@ var init_schema2 = __esm({
2033
2033
  kind: z5.literal("sdk")
2034
2034
  })
2035
2035
  ]);
2036
+ visibleWhenPredicateSchema = z5.object({
2037
+ field: z5.string().min(1),
2038
+ equals: z5.any().optional(),
2039
+ notEquals: z5.any().optional(),
2040
+ oneOf: z5.array(z5.any()).optional(),
2041
+ notIn: z5.array(z5.any()).optional(),
2042
+ minItems: z5.number().int().nonnegative().optional(),
2043
+ maxItems: z5.number().int().nonnegative().optional()
2044
+ });
2045
+ visibleWhenSchema = z5.union([
2046
+ visibleWhenPredicateSchema,
2047
+ z5.object({
2048
+ allOf: z5.array(visibleWhenPredicateSchema).min(1)
2049
+ })
2050
+ ]);
2036
2051
  uiSchema = z5.object({
2037
2052
  widget: z5.string().optional(),
2038
2053
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -2065,13 +2080,7 @@ var init_schema2 = __esm({
2065
2080
  showValue: z5.boolean().optional(),
2066
2081
  pattern: z5.string().optional(),
2067
2082
  placeholder: z5.string().optional(),
2068
- visibleWhen: z5.object({
2069
- field: z5.string().min(1),
2070
- equals: z5.any().optional(),
2071
- notEquals: z5.any().optional(),
2072
- oneOf: z5.array(z5.any()).optional(),
2073
- notIn: z5.array(z5.any()).optional()
2074
- }).optional(),
2083
+ visibleWhen: visibleWhenSchema.optional(),
2075
2084
  // Modal configuration for modal and group fields
2076
2085
  modalConfig: z5.object({
2077
2086
  buttonLabel: z5.string().optional(),
@@ -4155,6 +4164,7 @@ var init_types2 = __esm({
4155
4164
  ];
4156
4165
  eyebrowTreatmentValues = [
4157
4166
  "plain",
4167
+ "accent",
4158
4168
  "pill",
4159
4169
  "accent-pill",
4160
4170
  "pill-bounce",
@@ -9148,6 +9158,7 @@ function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
9148
9158
  out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
9149
9159
  const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
9150
9160
  if (hoverBg) out.push(hoverBg);
9161
+ out.push(variantFocusVisibleRule(variantId, themeId));
9151
9162
  const effects = variantEffectsCss(variant, themeId, tokens, theme);
9152
9163
  if (effects) out.push({ raw: effects });
9153
9164
  out.push(...variantDisabledRules(variantId, themeId));
@@ -9205,6 +9216,12 @@ function variantHoverBackgroundRule(variant, variantId, global, themeId, tokens)
9205
9216
  ["background-color", tokens.getColor(hoverToken)]
9206
9217
  ]);
9207
9218
  }
9219
+ function variantFocusVisibleRule(variantId, themeId) {
9220
+ return rule(`:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:focus-visible`, [
9221
+ ["outline", "2px solid currentColor"],
9222
+ ["outline-offset", "3px"]
9223
+ ]);
9224
+ }
9208
9225
  function variantEffectsCss(variant, themeId, tokens, theme) {
9209
9226
  if (!variant.effects) return "";
9210
9227
  const elementConfig = {
@@ -9328,7 +9345,8 @@ var init_generateButtonCss = __esm({
9328
9345
  ["transition", "all 200ms ease-in-out"],
9329
9346
  ["display", "inline-flex"],
9330
9347
  ["align-items", "center"],
9331
- ["justify-content", "center"]
9348
+ ["justify-content", "center"],
9349
+ ["outline", "none"]
9332
9350
  ];
9333
9351
  }
9334
9352
  });
@@ -9918,6 +9936,102 @@ var init_joy_stamp = __esm({
9918
9936
  }
9919
9937
  });
9920
9938
 
9939
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
9940
+ var ornateRitual;
9941
+ var init_ornate_ritual = __esm({
9942
+ "../theme-core/src/buttons/personalities/ornate-ritual.ts"() {
9943
+ "use strict";
9944
+ init_types5();
9945
+ ornateRitual = defineButtonPersonality({
9946
+ id: "ornate-ritual",
9947
+ name: "Ornate Ritual",
9948
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
9949
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
9950
+ buttonSystem: {
9951
+ global: {
9952
+ cornerStyle: "rounded",
9953
+ shadow: "none",
9954
+ textTransform: "uppercase",
9955
+ fontWeight: 600,
9956
+ borderWidth: 1,
9957
+ hoverTransform: "none",
9958
+ hoverColor: "none",
9959
+ letterSpacing: "loose"
9960
+ },
9961
+ sizes: {
9962
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
9963
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
9964
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
9965
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
9966
+ },
9967
+ variants: [
9968
+ {
9969
+ id: "primary",
9970
+ name: "Primary",
9971
+ enabled: true,
9972
+ priority: 1,
9973
+ background: { type: "solid", colorToken: "primary" },
9974
+ textColorToken: "primaryForeground",
9975
+ borderRadius: "rounded-md",
9976
+ border: { widthClass: "border", colorToken: "primary" },
9977
+ shadow: { elevation: "none", softness: null, position: "bottom" },
9978
+ effects: {
9979
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
9980
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
9981
+ }
9982
+ },
9983
+ {
9984
+ id: "secondary",
9985
+ name: "Secondary",
9986
+ enabled: true,
9987
+ priority: 2,
9988
+ background: { type: "solid", colorToken: "secondary" },
9989
+ textColorToken: "primaryForeground",
9990
+ borderRadius: "rounded-md",
9991
+ border: { widthClass: "border", colorToken: "primary" },
9992
+ shadow: { elevation: "none", softness: null, position: "bottom" },
9993
+ effects: {
9994
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
9995
+ }
9996
+ },
9997
+ {
9998
+ id: "outline",
9999
+ name: "Outline",
10000
+ enabled: true,
10001
+ priority: 3,
10002
+ background: { type: "transparent" },
10003
+ textColorToken: "primary",
10004
+ borderRadius: "rounded-md",
10005
+ border: { widthClass: "border", colorToken: "primary" },
10006
+ shadow: { elevation: "none", softness: null, position: "bottom" },
10007
+ effects: {
10008
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
10009
+ }
10010
+ },
10011
+ {
10012
+ id: "ghost",
10013
+ name: "Ghost",
10014
+ enabled: true,
10015
+ priority: 3,
10016
+ background: { type: "transparent" },
10017
+ textColorToken: "accent",
10018
+ borderRadius: "rounded-none",
10019
+ sizes: {
10020
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
10021
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
10022
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
10023
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
10024
+ },
10025
+ effects: {
10026
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
10027
+ }
10028
+ }
10029
+ ]
10030
+ }
10031
+ });
10032
+ }
10033
+ });
10034
+
9921
10035
  // ../theme-core/src/buttons/personalities/pebble.ts
9922
10036
  var pebble;
9923
10037
  var init_pebble = __esm({
@@ -10213,6 +10327,7 @@ var init_personalities = __esm({
10213
10327
  init_editorial_link();
10214
10328
  init_ink_stamp();
10215
10329
  init_joy_stamp();
10330
+ init_ornate_ritual();
10216
10331
  init_pebble();
10217
10332
  init_showtime_pill();
10218
10333
  init_soft_pill();
@@ -10226,7 +10341,8 @@ var init_personalities = __esm({
10226
10341
  inkStamp,
10227
10342
  brushedWash,
10228
10343
  showtimePill,
10229
- joyStamp
10344
+ joyStamp,
10345
+ ornateRitual
10230
10346
  ];
10231
10347
  personalitiesById = new Map(
10232
10348
  buttonPersonalities.map((p) => [p.id, p])
@@ -11371,7 +11487,7 @@ function rgbColorValue(token) {
11371
11487
  if (alpha === void 0) {
11372
11488
  return `rgb(var(${cssVar}))`;
11373
11489
  }
11374
- return `rgba(var(${cssVar}), ${alpha})`;
11490
+ return `rgb(var(${cssVar}) / ${alpha})`;
11375
11491
  }
11376
11492
  function backgroundColorStyle(token) {
11377
11493
  return { backgroundColor: rgbColorValue(token) };
@@ -12556,7 +12672,7 @@ var init_warm_neutral = __esm({
12556
12672
  });
12557
12673
 
12558
12674
  // ../theme-core/src/palette/variants/warm-dark.ts
12559
- var warmDarkEmber;
12675
+ var warmDarkEmber, warmDarkKirtanGold;
12560
12676
  var init_warm_dark = __esm({
12561
12677
  "../theme-core/src/palette/variants/warm-dark.ts"() {
12562
12678
  "use strict";
@@ -12583,6 +12699,28 @@ var init_warm_dark = __esm({
12583
12699
  { name: "border", hex: "#894e31" }
12584
12700
  ]
12585
12701
  });
12702
+ warmDarkKirtanGold = definePaletteVariant({
12703
+ id: "warm-dark-kirtan-gold",
12704
+ name: "Warm Dark \u2014 Kirtan Gold",
12705
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
12706
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
12707
+ mode: "dark",
12708
+ colors: [
12709
+ { name: "primary", hex: "#ffcdb2" },
12710
+ { name: "secondary", hex: "#b5838d" },
12711
+ { name: "accent", hex: "#e5989b" },
12712
+ { name: "success", hex: "#8fbf8f" },
12713
+ { name: "warning", hex: "#f2b86b" },
12714
+ { name: "destructive", hex: "#d96b6b" },
12715
+ { name: "background", hex: "#403944" },
12716
+ { name: "surface", hex: "#403944" },
12717
+ { name: "surfaceAlt", hex: "#372f3b" },
12718
+ { name: "muted", hex: "#4d4550" },
12719
+ { name: "text", hex: "#e6d2d5" },
12720
+ { name: "primaryForeground", hex: "#403944" },
12721
+ { name: "border", hex: "#8d747a" }
12722
+ ]
12723
+ });
12586
12724
  }
12587
12725
  });
12588
12726
 
@@ -12618,7 +12756,8 @@ var init_variants = __esm({
12618
12756
  softNaturalWatercolor,
12619
12757
  softNaturalLilac,
12620
12758
  // Warm-dark family (dark mode)
12621
- warmDarkEmber
12759
+ warmDarkEmber,
12760
+ warmDarkKirtanGold
12622
12761
  ];
12623
12762
  paletteVariantsById = new Map(
12624
12763
  paletteVariants.map((v) => [v.id, v])
@@ -14312,8 +14451,69 @@ var init_headerLooks = __esm({
14312
14451
  function asFooterLookId(value) {
14313
14452
  return value;
14314
14453
  }
14454
+ function asFooterLayoutId(value) {
14455
+ return value;
14456
+ }
14457
+ function asFooterStyleId(value) {
14458
+ return value;
14459
+ }
14460
+ function identityQuietFooter(theme) {
14461
+ return {
14462
+ ...theme.footer,
14463
+ variant: "simple",
14464
+ maxWidth: "container",
14465
+ background: {
14466
+ type: "color",
14467
+ color: "surface"
14468
+ },
14469
+ navStyle: "minimal",
14470
+ navWeight: "regular",
14471
+ navColor: "text",
14472
+ navLinkStyle: {
14473
+ typography: "body",
14474
+ fontWeight: "regular",
14475
+ textTransform: "none",
14476
+ italic: false,
14477
+ colorToken: "text",
14478
+ hoverColorToken: "primary",
14479
+ padding: "none",
14480
+ borderRadius: "none"
14481
+ },
14482
+ navLayout: {
14483
+ layout: "inline-wrap",
14484
+ align: "start",
14485
+ gapX: "default",
14486
+ gapY: "tight"
14487
+ },
14488
+ logo: {
14489
+ showLogo: true,
14490
+ showLogoText: true,
14491
+ placement: "left",
14492
+ size: "sm",
14493
+ align: "start"
14494
+ },
14495
+ bottomBar: {
14496
+ enabled: false,
14497
+ fullBleed: false,
14498
+ textAlign: "left",
14499
+ paddingX: "default",
14500
+ paddingY: "compact",
14501
+ borderTop: {
14502
+ width: "none"
14503
+ }
14504
+ }
14505
+ };
14506
+ }
14315
14507
  function mutedGroundingFooter(theme) {
14316
- return theme.footer;
14508
+ return {
14509
+ ...identityQuietFooter(theme),
14510
+ background: theme.footer.background,
14511
+ navStyle: theme.footer.navStyle,
14512
+ navColor: theme.footer.navColor,
14513
+ navWeight: theme.footer.navWeight,
14514
+ navLinkStyle: theme.footer.navLinkStyle,
14515
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
14516
+ };
14317
14517
  }
14318
14518
  function brandTwoBandFooter(theme) {
14319
14519
  return {
@@ -14418,6 +14618,53 @@ function centeredCalmFooter(theme) {
14418
14618
  }
14419
14619
  };
14420
14620
  }
14621
+ function splitEditorialFooter(theme) {
14622
+ return {
14623
+ ...theme.footer,
14624
+ variant: "split",
14625
+ maxWidth: "container",
14626
+ background: {
14627
+ type: "color",
14628
+ color: "surface"
14629
+ },
14630
+ navStyle: "minimal",
14631
+ navWeight: "regular",
14632
+ navColor: "text",
14633
+ navLinkStyle: {
14634
+ typography: "body",
14635
+ fontWeight: "regular",
14636
+ textTransform: "none",
14637
+ italic: false,
14638
+ colorToken: "text",
14639
+ hoverColorToken: "primary",
14640
+ padding: "none",
14641
+ borderRadius: "none"
14642
+ },
14643
+ navLayout: {
14644
+ layout: "inline-wrap",
14645
+ align: "start",
14646
+ gapX: "relaxed",
14647
+ gapY: "tight"
14648
+ },
14649
+ logo: {
14650
+ showLogo: true,
14651
+ showLogoText: true,
14652
+ placement: "right",
14653
+ size: "sm",
14654
+ align: "end"
14655
+ },
14656
+ bottomBar: {
14657
+ enabled: true,
14658
+ fullBleed: false,
14659
+ textAlign: "left",
14660
+ paddingX: "default",
14661
+ paddingY: "compact",
14662
+ borderTop: {
14663
+ width: "thin"
14664
+ }
14665
+ }
14666
+ };
14667
+ }
14421
14668
  function editorialColumnsFooter(theme) {
14422
14669
  return {
14423
14670
  ...theme.footer,
@@ -14459,33 +14706,110 @@ function editorialColumnsFooter(theme) {
14459
14706
  }
14460
14707
  };
14461
14708
  }
14462
- var guaranteedFallbackFooterLookId, footerLookCatalog, footerLooksById;
14709
+ var guaranteedFallbackFooterLookId, footerLayoutCatalog, footerStyleCatalog, footerLayoutsById, footerStylesById, footerLookCatalog, footerLooksById;
14463
14710
  var init_footerLooks = __esm({
14464
14711
  "../theme-core/src/site-styles/footerLooks.ts"() {
14465
14712
  "use strict";
14466
14713
  init_customizableSurfaces();
14467
14714
  init_types2();
14468
- guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
14715
+ guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
14716
+ footerLayoutCatalog = defineExactCatalog()([
14717
+ {
14718
+ id: asFooterLayoutId("identity"),
14719
+ label: "Identity",
14720
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
14721
+ },
14722
+ {
14723
+ id: asFooterLayoutId("centered"),
14724
+ label: "Centered",
14725
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
14726
+ maxRecommendedNavDensity: "sparse"
14727
+ },
14728
+ {
14729
+ id: asFooterLayoutId("split"),
14730
+ label: "Split",
14731
+ description: "Navigation and brand signoff separated into a wider split footer.",
14732
+ requiresFooterNav: true,
14733
+ maxRecommendedNavDensity: "balanced"
14734
+ },
14735
+ {
14736
+ id: asFooterLayoutId("columns"),
14737
+ label: "Columns",
14738
+ description: "Grouped footer navigation columns with a supporting bottom line.",
14739
+ requiresFooterNav: true,
14740
+ requiresFooterNavGroups: true
14741
+ }
14742
+ ]);
14743
+ footerStyleCatalog = defineExactCatalog()([
14744
+ {
14745
+ id: asFooterStyleId("quiet"),
14746
+ label: "Quiet",
14747
+ description: "Lightweight, practical footer treatment."
14748
+ },
14749
+ {
14750
+ id: asFooterStyleId("calm"),
14751
+ label: "Calm",
14752
+ description: "Soft centered treatment with restrained dividers."
14753
+ },
14754
+ {
14755
+ id: asFooterStyleId("editorial"),
14756
+ label: "Editorial",
14757
+ description: "Text-forward treatment with fine-line structure."
14758
+ },
14759
+ {
14760
+ id: asFooterStyleId("brand-band"),
14761
+ label: "Brand band",
14762
+ description: "High-contrast brand treatment with a stronger bottom bar."
14763
+ }
14764
+ ]);
14765
+ footerLayoutsById = new Map(
14766
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
14767
+ );
14768
+ footerStylesById = new Map(
14769
+ footerStyleCatalog.map((style) => [style.id, style])
14770
+ );
14469
14771
  footerLookCatalog = defineExactCatalog()([
14772
+ {
14773
+ id: asFooterLookId("footer-identity-quiet"),
14774
+ label: "Identity footer",
14775
+ layoutId: asFooterLayoutId("identity"),
14776
+ styleId: asFooterStyleId("quiet"),
14777
+ compile: identityQuietFooter
14778
+ },
14470
14779
  {
14471
14780
  id: asFooterLookId("footer-muted-grounding"),
14472
14781
  label: "Muted grounding footer",
14782
+ layoutId: asFooterLayoutId("identity"),
14783
+ styleId: asFooterStyleId("quiet"),
14784
+ hiddenFromLayoutStyleControls: true,
14473
14785
  compile: mutedGroundingFooter
14474
14786
  },
14475
14787
  {
14476
14788
  id: asFooterLookId("footer-centered-calm"),
14477
14789
  label: "Centered calm footer",
14790
+ layoutId: asFooterLayoutId("centered"),
14791
+ styleId: asFooterStyleId("calm"),
14478
14792
  compile: centeredCalmFooter
14479
14793
  },
14794
+ {
14795
+ id: asFooterLookId("footer-split-editorial"),
14796
+ label: "Split editorial footer",
14797
+ layoutId: asFooterLayoutId("split"),
14798
+ styleId: asFooterStyleId("editorial"),
14799
+ compile: splitEditorialFooter
14800
+ },
14480
14801
  {
14481
14802
  id: asFooterLookId("footer-editorial-columns"),
14482
14803
  label: "Editorial columns footer",
14804
+ layoutId: asFooterLayoutId("columns"),
14805
+ styleId: asFooterStyleId("editorial"),
14483
14806
  compile: editorialColumnsFooter
14484
14807
  },
14485
14808
  {
14486
14809
  id: asFooterLookId("site-footer-brand-two-band"),
14487
14810
  label: "Two-band brand footer",
14488
- maxRecommendedNavDensity: "balanced",
14811
+ layoutId: asFooterLayoutId("split"),
14812
+ styleId: asFooterStyleId("brand-band"),
14489
14813
  allowedContentPresence: ["default-footer", "default-and-blocks"],
14490
14814
  compile: brandTwoBandFooter
14491
14815
  }
@@ -14575,7 +14899,7 @@ function defineTypographyPreset(preset2) {
14575
14899
  id: asTypographyPresetId(preset2.id)
14576
14900
  };
14577
14901
  }
14578
- var bodyReadablePolicy, headingFlexiblePolicy, displayHeadingPolicy, modernSansTypography, warmRoundedTypography, editorialSerifTypography, classicSerifTypography, luxeContrastTypography, boldDisplayTypography, originalJoyTypography, typographyPresets, typographyPresetsById;
14902
+ var bodyReadablePolicy, headingFlexiblePolicy, displayHeadingPolicy, modernSansTypography, warmRoundedTypography, editorialSerifTypography, classicSerifTypography, luxeContrastTypography, kirtanOrnateTypography, boldDisplayTypography, originalJoyTypography, typographyPresets, typographyPresetsById;
14579
14903
  var init_typographyPresets = __esm({
14580
14904
  "../theme-core/src/site-styles/typographyPresets.ts"() {
14581
14905
  "use strict";
@@ -14708,6 +15032,30 @@ var init_typographyPresets = __esm({
14708
15032
  },
14709
15033
  scale: "spacious"
14710
15034
  };
15035
+ kirtanOrnateTypography = {
15036
+ body: {
15037
+ family: "Jost, system-ui, sans-serif",
15038
+ size: "md",
15039
+ weight: "regular",
15040
+ lineHeight: "relaxed",
15041
+ letterSpacing: "normal"
15042
+ },
15043
+ headings: {
15044
+ default: {
15045
+ family: "Marcellus, Georgia, serif",
15046
+ weight: "regular",
15047
+ lineHeight: "normal",
15048
+ letterSpacing: "normal",
15049
+ colorToken: "primary",
15050
+ italic: null,
15051
+ case: null
15052
+ },
15053
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15054
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15055
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
15056
+ },
15057
+ scale: "spacious"
15058
+ };
14711
15059
  boldDisplayTypography = {
14712
15060
  body: {
14713
15061
  family: "Manrope, system-ui, sans-serif",
@@ -14742,16 +15090,16 @@ var init_typographyPresets = __esm({
14742
15090
  },
14743
15091
  headings: {
14744
15092
  default: {
14745
- family: "Bricolage Grotesque, system-ui, sans-serif",
14746
- weight: "bold",
15093
+ family: "Lobster, cursive",
15094
+ weight: "regular",
14747
15095
  lineHeight: "normal",
14748
- letterSpacing: "tight",
15096
+ letterSpacing: "normal",
14749
15097
  italic: null,
14750
15098
  case: null
14751
15099
  },
14752
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14753
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
14754
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
15100
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15101
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
15102
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
14755
15103
  },
14756
15104
  scale: "balanced"
14757
15105
  };
@@ -14816,6 +15164,32 @@ var init_typographyPresets = __esm({
14816
15164
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14817
15165
  typography: luxeContrastTypography
14818
15166
  }),
15167
+ defineTypographyPreset({
15168
+ id: "typography-preset:kirtan-ornate",
15169
+ name: "Kirtan Ornate",
15170
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
15171
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
15172
+ recommendedFonts: {
15173
+ body: ["Jost", "Manrope", "Inter"],
15174
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
15175
+ },
15176
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
15177
+ typography: kirtanOrnateTypography,
15178
+ heroTypography: {
15179
+ headlineSize: "6xl",
15180
+ headlineLineHeight: "normal",
15181
+ subheadlineSize: "xl",
15182
+ subheadlineLineHeight: "relaxed",
15183
+ microHeadlineSize: "5xl",
15184
+ microHeadlineLineHeight: "normal",
15185
+ microSubheadlineSize: "lg",
15186
+ microSubheadlineLineHeight: "relaxed",
15187
+ responsive: {
15188
+ tablet: { headlineSize: "5xl" },
15189
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
15190
+ }
15191
+ }
15192
+ }),
14819
15193
  defineTypographyPreset({
14820
15194
  id: "typography-preset:bold-display",
14821
15195
  name: "Bold Display",
@@ -14845,11 +15219,11 @@ var init_typographyPresets = __esm({
14845
15219
  defineTypographyPreset({
14846
15220
  id: "typography-preset:original-joy",
14847
15221
  name: "Original Joy",
14848
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
14849
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
15222
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
15223
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
14850
15224
  recommendedFonts: {
14851
15225
  body: ["DM Sans", "Inter", "Manrope"],
14852
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
15226
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
14853
15227
  },
14854
15228
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
14855
15229
  typography: originalJoyTypography,
@@ -14875,6 +15249,344 @@ var init_typographyPresets = __esm({
14875
15249
  }
14876
15250
  });
14877
15251
 
15252
+ // ../theme-core/src/site-styles/designState.ts
15253
+ import { z as z27 } from "zod";
15254
+ function uniqueNonEmpty(values) {
15255
+ const uniqueValues = [...new Set(values)];
15256
+ const firstValue = uniqueValues[0];
15257
+ if (!firstValue) {
15258
+ throw new Error("Expected at least one Theme V2 design state option.");
15259
+ }
15260
+ return [firstValue, ...uniqueValues.slice(1)];
15261
+ }
15262
+ var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, heroCompositionIntentSchema, heroTypographyScaleIntentSchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, tileTreatmentSchema, eventListTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema, persistedPageDesignStateV1Schema;
15263
+ var init_designState = __esm({
15264
+ "../theme-core/src/site-styles/designState.ts"() {
15265
+ "use strict";
15266
+ init_sourceCatalogs();
15267
+ init_types2();
15268
+ init_schemaVersionedJson();
15269
+ init_rawStyleFields();
15270
+ init_rawStyleFields();
15271
+ themeV2DesignStateSchemaVersion = 1;
15272
+ designResolutionPolicySchema = z27.enum(["generated", "user", "admin", "sdk"]);
15273
+ runtimeStyleFieldNameSchema = z27.enum(themeV2RuntimeStyleFieldNames);
15274
+ nonEmptyRuntimeStyleFieldNamesSchema = z27.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
15275
+ fields3[0],
15276
+ ...fields3.slice(1)
15277
+ ]);
15278
+ heroLegibilityStrategySchema = z27.enum([
15279
+ "none",
15280
+ "scrim-gradient",
15281
+ "solid-panel"
15282
+ ]);
15283
+ heroCompositionIntentSchema = z27.enum([
15284
+ "center",
15285
+ "bottom-left"
15286
+ ]);
15287
+ heroTypographyScaleIntentSchema = z27.enum([
15288
+ "quiet",
15289
+ "editorial",
15290
+ "display",
15291
+ "poster"
15292
+ ]);
15293
+ sectionHeightIntentSchema = z27.enum([
15294
+ "default",
15295
+ "banner",
15296
+ "hero",
15297
+ "immersive"
15298
+ ]);
15299
+ imageSurfaceTreatmentIntensitySchema = z27.enum(["soft", "balanced", "strong"]);
15300
+ imageSurfaceMotionSchema = z27.enum(["static", "fixed-frame"]);
15301
+ imageSurfaceTreatmentSchema = z27.discriminatedUnion("kind", [
15302
+ z27.object({ kind: z27.literal("none") }).strict(),
15303
+ z27.object({
15304
+ kind: z27.literal("brand-scrim"),
15305
+ token: z27.enum(["primary", "secondary", "accent"]),
15306
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15307
+ }).strict(),
15308
+ z27.object({
15309
+ kind: z27.literal("brand-wash"),
15310
+ token: z27.enum(["primary", "secondary", "accent"]),
15311
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15312
+ }).strict(),
15313
+ z27.object({
15314
+ kind: z27.literal("neutral-scrim"),
15315
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15316
+ }).strict(),
15317
+ z27.object({
15318
+ kind: z27.literal("neutral-wash"),
15319
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15320
+ }).strict(),
15321
+ z27.object({
15322
+ kind: z27.literal("solid-panel"),
15323
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
15324
+ }).strict()
15325
+ ]);
15326
+ testimonialCardTreatmentSchema = z27.enum(["default", "accent-quote"]);
15327
+ tileTreatmentSchema = z27.enum(tileTreatmentValues);
15328
+ eventListTreatmentSchema = z27.enum(eventListTreatmentValues);
15329
+ eyebrowTreatmentSchema = z27.enum(eyebrowTreatmentValues);
15330
+ userPanelTreatments = uniqueNonEmpty(
15331
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
15332
+ );
15333
+ userFlushTreatments = uniqueNonEmpty(
15334
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
15335
+ );
15336
+ userFlushBleeds = uniqueNonEmpty(
15337
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
15338
+ );
15339
+ contentFrameIntentSchema = z27.discriminatedUnion("kind", [
15340
+ z27.object({ kind: z27.literal("plain") }).strict(),
15341
+ z27.object({
15342
+ kind: z27.literal("panel"),
15343
+ treatment: z27.enum(userPanelTreatments)
15344
+ }).strict(),
15345
+ z27.object({
15346
+ kind: z27.literal("flush-panel"),
15347
+ treatment: z27.enum(userFlushTreatments),
15348
+ bleed: z27.enum(userFlushBleeds)
15349
+ }).strict()
15350
+ ]);
15351
+ blockDesignPlanSchema = z27.object({
15352
+ blockId: z27.string().min(1).transform(asDesignBlockId),
15353
+ blockKind: z27.string().min(1),
15354
+ purpose: z27.string().min(1),
15355
+ sectionSurface: z27.enum(userDesignOptionCatalog.sectionSurfaces),
15356
+ contentFrame: contentFrameIntentSchema,
15357
+ itemSurface: z27.enum(userDesignOptionCatalog.itemSurfaces),
15358
+ transitionAfter: z27.enum(userDesignOptionCatalog.transitions),
15359
+ emphasis: z27.enum(userDesignOptionCatalog.emphases),
15360
+ sectionHeight: sectionHeightIntentSchema.optional(),
15361
+ heroLegibility: heroLegibilityStrategySchema.optional(),
15362
+ heroComposition: heroCompositionIntentSchema.optional(),
15363
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
15364
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
15365
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
15366
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
15367
+ tileTreatment: tileTreatmentSchema.optional(),
15368
+ eventListTreatment: eventListTreatmentSchema.optional(),
15369
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
15370
+ }).strict();
15371
+ styleAuthoritySchema = z27.discriminatedUnion("kind", [
15372
+ z27.object({
15373
+ kind: z27.literal("theme-v2"),
15374
+ source: designResolutionPolicySchema,
15375
+ siteStyleId: z27.string().min(1).transform(asSiteStyleId),
15376
+ templateId: z27.string().min(1).transform(asDesignSystemTemplateId),
15377
+ templateVersion: z27.number().int().nonnegative(),
15378
+ resolverVersion: z27.number().int().nonnegative()
15379
+ }).strict(),
15380
+ z27.object({
15381
+ kind: z27.literal("legacy-raw"),
15382
+ reason: z27.enum(["pre-theme-v2", "manual-runtime-fields"])
15383
+ }).strict(),
15384
+ z27.object({
15385
+ kind: z27.literal("advanced-detached"),
15386
+ reason: z27.literal("detached-custom-runtime-fields")
15387
+ }).strict()
15388
+ ]);
15389
+ blockRuntimeStyleAuthoritySchema = z27.object({
15390
+ unit: z27.literal("block-runtime-fields"),
15391
+ blockId: z27.string().min(1).transform(asDesignBlockId),
15392
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
15393
+ authority: styleAuthoritySchema
15394
+ }).strict();
15395
+ persistedPageDesignStateV1Schema = z27.object({
15396
+ schemaVersion: z27.literal(themeV2DesignStateSchemaVersion),
15397
+ siteStyleId: z27.string().min(1).transform(asSiteStyleId),
15398
+ templateId: z27.string().min(1).transform(asDesignSystemTemplateId),
15399
+ templateVersion: z27.number().int().nonnegative(),
15400
+ resolverVersion: z27.number().int().nonnegative(),
15401
+ rhythmPresetId: z27.string().min(1),
15402
+ blocks: z27.array(blockDesignPlanSchema),
15403
+ styleAuthorities: z27.array(blockRuntimeStyleAuthoritySchema)
15404
+ }).strict();
15405
+ }
15406
+ });
15407
+
15408
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
15409
+ function defineDesignRuntimeRules(rules) {
15410
+ return rules;
15411
+ }
15412
+ function defineComponentRuntimeRules(rules) {
15413
+ return rules;
15414
+ }
15415
+ function uniformSectionForeground(token) {
15416
+ return {
15417
+ textColor: token,
15418
+ headingColor: token,
15419
+ linkColor: token,
15420
+ supportingColor: token
15421
+ };
15422
+ }
15423
+ var defaultDesignRuntimeRules, defaultComponentRuntimeRules;
15424
+ var init_runtimeCompiler = __esm({
15425
+ "../theme-core/src/site-styles/runtimeCompiler.ts"() {
15426
+ "use strict";
15427
+ init_schema3();
15428
+ init_modern_minimal();
15429
+ init_expandPalette();
15430
+ init_personalities();
15431
+ init_variants();
15432
+ init_designState();
15433
+ init_types2();
15434
+ init_accessibleSurfaces();
15435
+ defaultDesignRuntimeRules = defineDesignRuntimeRules({
15436
+ sectionSurfaces: {
15437
+ base: {},
15438
+ "muted-band": {
15439
+ background: {
15440
+ type: "color",
15441
+ color: "muted"
15442
+ }
15443
+ },
15444
+ "accent-band": {
15445
+ background: {
15446
+ type: "color",
15447
+ color: "primary"
15448
+ }
15449
+ },
15450
+ "brand-depth-band": {
15451
+ background: {
15452
+ type: "color",
15453
+ color: "primary-800"
15454
+ }
15455
+ },
15456
+ "hero-image": {
15457
+ background: {
15458
+ type: "image",
15459
+ opacity: 1,
15460
+ position: "center center",
15461
+ ...uniformSectionForeground("text")
15462
+ }
15463
+ }
15464
+ },
15465
+ heroLegibility: {
15466
+ "scrim-gradient": {
15467
+ type: "gradient",
15468
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
15469
+ opacity: 1
15470
+ },
15471
+ "solid-panel": {
15472
+ type: "color",
15473
+ color: "surface",
15474
+ opacity: 0.88
15475
+ }
15476
+ },
15477
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
15478
+ });
15479
+ defaultComponentRuntimeRules = defineComponentRuntimeRules({
15480
+ panelFrames: {
15481
+ inset: {
15482
+ spacing: "comfortable",
15483
+ rounded: "xl",
15484
+ raised: false,
15485
+ background: {
15486
+ type: "color",
15487
+ color: "surfaceAlt",
15488
+ textColor: "text"
15489
+ }
15490
+ },
15491
+ raised: {
15492
+ spacing: "comfortable",
15493
+ rounded: "xl",
15494
+ raised: true,
15495
+ background: {
15496
+ type: "color",
15497
+ color: "surfaceAlt",
15498
+ textColor: "text"
15499
+ }
15500
+ },
15501
+ editorial: {
15502
+ spacing: "medium",
15503
+ rounded: "xl",
15504
+ raised: false,
15505
+ background: {
15506
+ type: "color",
15507
+ color: "surface",
15508
+ textColor: "text"
15509
+ }
15510
+ }
15511
+ },
15512
+ flushFrames: {
15513
+ "media-panel": {
15514
+ fullWidth: true,
15515
+ spacing: "none",
15516
+ rounded: "none",
15517
+ raised: false
15518
+ }
15519
+ },
15520
+ itemSurfaces: {
15521
+ none: null,
15522
+ default: {
15523
+ spacing: "medium",
15524
+ rounded: "lg",
15525
+ raised: false
15526
+ },
15527
+ flat: {
15528
+ spacing: "medium",
15529
+ rounded: "lg",
15530
+ raised: false
15531
+ },
15532
+ outlined: {
15533
+ spacing: "medium",
15534
+ rounded: "lg",
15535
+ raised: false,
15536
+ border: {
15537
+ enabled: true,
15538
+ width: "1",
15539
+ colorToken: "border"
15540
+ }
15541
+ },
15542
+ raised: {
15543
+ spacing: "medium",
15544
+ rounded: "xl",
15545
+ raised: true
15546
+ },
15547
+ inset: {
15548
+ treatment: "soft-panel",
15549
+ spacing: "comfortable",
15550
+ rounded: "xl",
15551
+ raised: false,
15552
+ border: {
15553
+ enabled: false
15554
+ },
15555
+ background: {
15556
+ type: "color",
15557
+ color: "surfaceAlt",
15558
+ textColor: "text"
15559
+ }
15560
+ },
15561
+ editorial: {
15562
+ // Boxless open column with a short rule on top; the visual treatment
15563
+ // lives in blocks-static/card-treatments.css.
15564
+ treatment: "editorial-rule",
15565
+ spacing: "none",
15566
+ rounded: "none",
15567
+ raised: false,
15568
+ border: {
15569
+ enabled: false
15570
+ }
15571
+ },
15572
+ "color-blocked": {
15573
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
15574
+ // (by position) and staggered offset live in
15575
+ // blocks-static/card-treatments.css; here we set the shared shape:
15576
+ // generous padding, large radius, no border, flat (no shadow).
15577
+ treatment: "color-blocked",
15578
+ spacing: "spacious",
15579
+ rounded: "2xl",
15580
+ raised: false,
15581
+ border: {
15582
+ enabled: false
15583
+ }
15584
+ }
15585
+ }
15586
+ });
15587
+ }
15588
+ });
15589
+
14878
15590
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
14879
15591
  function uniqueContentFrameKinds() {
14880
15592
  const kinds = [
@@ -14932,6 +15644,7 @@ function defineCuratedSiteStyle(input) {
14932
15644
  // clean/minimal styles default to none.
14933
15645
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
14934
15646
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
15647
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
14935
15648
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
14936
15649
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
14937
15650
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -15116,7 +15829,7 @@ function defaultTypographyPresetChoicesForRecipe(recipe) {
15116
15829
  function getCuratedSiteStyle(id) {
15117
15830
  return curatedSiteStylesById.get(id) ?? null;
15118
15831
  }
15119
- var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, balancedBudget, expressiveBudget, expressiveUnderlineInputs, generatedContentFrameKinds, curatedSiteStyles, curatedSiteStylesById;
15832
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, balancedBudget, expressiveBudget, kirtanOrnateDesignRuntimeRules, expressiveUnderlineInputs, ornateDarkInputs, generatedContentFrameKinds, curatedSiteStyles, curatedSiteStylesById;
15120
15833
  var init_curatedSiteStyles = __esm({
15121
15834
  "../theme-core/src/site-styles/curatedSiteStyles.ts"() {
15122
15835
  "use strict";
@@ -15131,6 +15844,7 @@ var init_curatedSiteStyles = __esm({
15131
15844
  init_sourceCatalogs();
15132
15845
  init_types2();
15133
15846
  init_typographyPresets();
15847
+ init_runtimeCompiler();
15134
15848
  SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
15135
15849
  SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
15136
15850
  curatedSiteStyleIdValues = [
@@ -15148,6 +15862,7 @@ var init_curatedSiteStyles = __esm({
15148
15862
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
15149
15863
  "site-style:bold-launch",
15150
15864
  "site-style:south-west-twerk-school",
15865
+ "site-style:kirtan-ornate",
15151
15866
  "site-style:original-joy"
15152
15867
  ];
15153
15868
  quietBudget = {
@@ -15174,6 +15889,50 @@ var init_curatedSiteStyles = __esm({
15174
15889
  mediaDensity: "high",
15175
15890
  decorativeRepetition: "medium"
15176
15891
  };
15892
+ kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
15893
+ ...defaultDesignRuntimeRules,
15894
+ defaultEyebrowTreatment: "accent",
15895
+ sectionSurfaces: {
15896
+ ...defaultDesignRuntimeRules.sectionSurfaces,
15897
+ "muted-band": {
15898
+ background: {
15899
+ type: "color",
15900
+ color: "muted"
15901
+ },
15902
+ foreground: {
15903
+ textColor: "text",
15904
+ headingColor: "primary",
15905
+ linkColor: "primary",
15906
+ supportingColor: "text"
15907
+ }
15908
+ },
15909
+ "brand-depth-band": {
15910
+ background: {
15911
+ type: "color",
15912
+ color: "primary-800"
15913
+ },
15914
+ foreground: {
15915
+ textColor: "text",
15916
+ headingColor: "primary",
15917
+ linkColor: "primary",
15918
+ supportingColor: "text"
15919
+ }
15920
+ },
15921
+ "hero-image": {
15922
+ background: {
15923
+ type: "image",
15924
+ opacity: 1,
15925
+ position: "center center"
15926
+ },
15927
+ foreground: {
15928
+ textColor: "text",
15929
+ headingColor: "primary",
15930
+ linkColor: "primary",
15931
+ supportingColor: "text"
15932
+ }
15933
+ }
15934
+ }
15935
+ });
15177
15936
  expressiveUnderlineInputs = {
15178
15937
  base: {
15179
15938
  background: { type: "transparent" },
@@ -15211,6 +15970,43 @@ var init_curatedSiteStyles = __esm({
15211
15970
  opacity: 0.6
15212
15971
  }
15213
15972
  };
15973
+ ornateDarkInputs = {
15974
+ base: {
15975
+ background: { type: "solid", colorToken: "surfaceAlt" },
15976
+ textColorToken: "text",
15977
+ border: {
15978
+ widthClass: "border",
15979
+ colorToken: "primary/45",
15980
+ style: "all"
15981
+ },
15982
+ corners: "square",
15983
+ shadow: null,
15984
+ spacing: "medium",
15985
+ fontSize: "base"
15986
+ },
15987
+ label: {
15988
+ textColorToken: "primary",
15989
+ fontWeight: "semibold",
15990
+ fontSize: "xs",
15991
+ textTransform: "uppercase",
15992
+ letterSpacing: "wider",
15993
+ opacity: 1
15994
+ },
15995
+ focus: {
15996
+ ringColorToken: "primary/18",
15997
+ ringWidth: "2",
15998
+ borderColorToken: "primary/70"
15999
+ },
16000
+ error: {
16001
+ borderColorToken: "destructive",
16002
+ textColorToken: "destructive"
16003
+ },
16004
+ disabled: {
16005
+ backgroundColorToken: "muted",
16006
+ textColorToken: "mutedText",
16007
+ opacity: 0.6
16008
+ }
16009
+ };
15214
16010
  generatedContentFrameKinds = uniqueContentFrameKinds();
15215
16011
  curatedSiteStyles = [
15216
16012
  defineCuratedSiteStyle({
@@ -15982,486 +16778,222 @@ var init_curatedSiteStyles = __esm({
15982
16778
  ]
15983
16779
  }),
15984
16780
  defineCuratedSiteStyle({
15985
- id: "site-style:original-joy",
15986
- name: "Original Joy",
15987
- headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
15988
- description: "Warm, dark, and editorial: deep clay grounds, cream type, and bold burnt-orange accents for soulful community brands.",
15989
- generationBrief: "Use a deep brown ground with cream text and burnt-orange accents, large display headings, generous spacing, organic rounded shapes, and bold colour-blocked feature sections. Lead with warmth and belonging; calls to action should feel strong but unhurried.",
16781
+ id: "site-style:kirtan-ornate",
16782
+ name: "Kirtan Ornate",
16783
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
16784
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
16785
+ 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.",
16786
+ selectionKeywordRules: [
16787
+ { kind: "word", value: "kirtan" },
16788
+ { kind: "word", value: "chanting" },
16789
+ { kind: "word", value: "ceremony" },
16790
+ { kind: "word", value: "devotional" }
16791
+ ],
15990
16792
  tokenRecipes: {
15991
16793
  palette: "brand-led",
15992
- contrast: "maximum",
15993
- radius: "rounded",
16794
+ contrast: "strong",
16795
+ radius: "soft",
15994
16796
  shadow: "subtle",
15995
- typography: "clean-sans",
16797
+ typography: "serif-editorial",
15996
16798
  spacing: "airy",
15997
- motion: "expressive"
16799
+ motion: "subtle"
15998
16800
  },
15999
16801
  compositionBudget: expressiveBudget,
16000
16802
  typographyPresetChoices: [
16001
- typographyChoice("typography-preset:original-joy"),
16002
- typographyChoice("typography-preset:bold-display"),
16003
- typographyChoice("typography-preset:modern-sans")
16803
+ typographyChoice("typography-preset:kirtan-ornate"),
16804
+ typographyChoice("typography-preset:luxe-contrast"),
16805
+ typographyChoice("typography-preset:editorial-serif")
16004
16806
  ],
16005
- defaultTypographyPresetId: "typography-preset:original-joy",
16807
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
16006
16808
  themeOverrides: {
16007
- accordions: boldBorderedAccordionSystem,
16008
- // Shared card system: warm rounded brown cards (event + testimonial cards
16009
- // pick this up automatically) with a burnt-orange statement variant.
16809
+ accordions: warmInsetAccordionSystem,
16010
16810
  cards: originalJoyCardSystem,
16011
- testimonialQuote: accentGlyphQuote,
16811
+ testimonialQuote: serifDisplayQuote,
16012
16812
  bodyText: {
16013
16813
  intro: {
16014
16814
  paragraphSize: "editorial",
16015
- headingSize: "editorial"
16016
- }
16017
- }
16018
- },
16019
- // Recommended block looks: the bold colour-blocked feature cards, a calm
16020
- // band for the events spotlight, and statement testimonial cards.
16021
- recommendedAppearancePresetIds: [
16022
- "feature-cards-bold-colors",
16023
- "offerings-calm-list",
16024
- "testimonials-statement-cards"
16025
- ],
16026
- // Floating, transparent "Clear Split" header (no fill behind the nav links).
16027
- defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
16028
- recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
16029
- recommendedHeaderStyleChoicesByLayout: {
16030
- floating: [
16031
- headerStyleChoice("minimal-surface"),
16032
- headerStyleChoice("split-glass"),
16033
- headerStyleChoice("glass")
16034
- ]
16035
- },
16036
- // Legacy bridge only (the real curation is the explicit selection above).
16037
- // Kept to a reserved-space, non-overlay look on purpose: the split hero
16038
- // flows below the Clear Split header, so we must NOT trigger the immersive
16039
- // overlay-hero promotion that looks like `floating-glass` would force.
16040
- recommendedHeaderLookIds: ["minimal-transparent"],
16041
- recommendedFooterLookIds: [
16042
- "site-footer-brand-two-band",
16043
- "footer-muted-grounding"
16044
- ],
16045
- buttonPersonalityChoices: [
16046
- buttonChoice("joy-stamp"),
16047
- buttonChoice("ink-stamp"),
16048
- buttonChoice("showtime-pill")
16049
- ],
16050
- paletteVariantChoices: [paletteChoice("warm-dark-ember")]
16051
- })
16052
- ];
16053
- curatedSiteStylesById = new Map(
16054
- curatedSiteStyles.map((style) => [style.id, style])
16055
- );
16056
- }
16057
- });
16058
-
16059
- // ../theme-core/src/site-styles/lookResolution.ts
16060
- var init_lookResolution = __esm({
16061
- "../theme-core/src/site-styles/lookResolution.ts"() {
16062
- "use strict";
16063
- init_appearancePresets();
16064
- init_types2();
16065
- }
16066
- });
16067
-
16068
- // ../theme-core/src/site-styles/siteStyleBlockPolicies.ts
16069
- var defaultPolicyPageFlowPresetId, southWestTwerkSchoolSiteStyleId, heroBrandScrimFixedFrameLookId, classicHeroLayoutVariantKey, microHeroLayoutVariantKey, waveBoundaryOptionId;
16070
- var init_siteStyleBlockPolicies = __esm({
16071
- "../theme-core/src/site-styles/siteStyleBlockPolicies.ts"() {
16072
- "use strict";
16073
- init_lookResolution();
16074
- init_appearancePresets();
16075
- init_pageDesignIntent();
16076
- init_types2();
16077
- init_sectionTransitions();
16078
- defaultPolicyPageFlowPresetId = asPageFlowPresetId("generated-default");
16079
- southWestTwerkSchoolSiteStyleId = asSiteStyleId("site-style:south-west-twerk-school");
16080
- heroBrandScrimFixedFrameLookId = asAppearancePresetId("hero-brand-scrim-fixed-frame");
16081
- classicHeroLayoutVariantKey = asLayoutVariantKey("classic");
16082
- microHeroLayoutVariantKey = asLayoutVariantKey("micro");
16083
- waveBoundaryOptionId = asBoundaryOptionId("break:wave");
16084
- }
16085
- });
16086
-
16087
- // ../theme-core/src/site-styles/pageDesignEditorModel.ts
16088
- var pageFlowPresets;
16089
- var init_pageDesignEditorModel = __esm({
16090
- "../theme-core/src/site-styles/pageDesignEditorModel.ts"() {
16091
- "use strict";
16092
- init_curatedSiteStyles();
16093
- init_lookResolution();
16094
- init_siteStyleBlockPolicies();
16095
- init_pageDesignIntent();
16096
- init_types2();
16097
- init_sectionTransitions();
16098
- init_sectionTransitions();
16099
- pageFlowPresets = [
16100
- {
16101
- id: asPageFlowPresetId("flow:quiet"),
16102
- label: "Quiet",
16103
- boundaryStrategy: "quiet",
16104
- defaultBoundaryOptionId: noneBoundaryOption.id
16105
- },
16106
- {
16107
- id: asPageFlowPresetId("flow:balanced"),
16108
- label: "Balanced",
16109
- boundaryStrategy: "balanced",
16110
- defaultBoundaryOptionId: softBoundaryOption.id
16111
- },
16112
- {
16113
- id: asPageFlowPresetId("flow:expressive"),
16114
- label: "Expressive",
16115
- boundaryStrategy: "expressive",
16116
- defaultBoundaryOptionId: spaciousBoundaryOption.id
16117
- }
16118
- ];
16119
- }
16120
- });
16121
-
16122
- // ../theme-core/src/site-styles/resolver.ts
16123
- var init_resolver2 = __esm({
16124
- "../theme-core/src/site-styles/resolver.ts"() {
16125
- "use strict";
16126
- init_types2();
16127
- }
16128
- });
16129
-
16130
- // ../theme-core/src/site-styles/designState.ts
16131
- import { z as z27 } from "zod";
16132
- function uniqueNonEmpty(values) {
16133
- const uniqueValues = [...new Set(values)];
16134
- const firstValue = uniqueValues[0];
16135
- if (!firstValue) {
16136
- throw new Error("Expected at least one Theme V2 design state option.");
16137
- }
16138
- return [firstValue, ...uniqueValues.slice(1)];
16139
- }
16140
- var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, heroCompositionIntentSchema, heroTypographyScaleIntentSchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, tileTreatmentSchema, eventListTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema, persistedPageDesignStateV1Schema;
16141
- var init_designState = __esm({
16142
- "../theme-core/src/site-styles/designState.ts"() {
16143
- "use strict";
16144
- init_sourceCatalogs();
16145
- init_types2();
16146
- init_schemaVersionedJson();
16147
- init_rawStyleFields();
16148
- init_rawStyleFields();
16149
- themeV2DesignStateSchemaVersion = 1;
16150
- designResolutionPolicySchema = z27.enum(["generated", "user", "admin", "sdk"]);
16151
- runtimeStyleFieldNameSchema = z27.enum(themeV2RuntimeStyleFieldNames);
16152
- nonEmptyRuntimeStyleFieldNamesSchema = z27.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
16153
- fields3[0],
16154
- ...fields3.slice(1)
16155
- ]);
16156
- heroLegibilityStrategySchema = z27.enum([
16157
- "none",
16158
- "scrim-gradient",
16159
- "solid-panel"
16160
- ]);
16161
- heroCompositionIntentSchema = z27.enum([
16162
- "center",
16163
- "bottom-left"
16164
- ]);
16165
- heroTypographyScaleIntentSchema = z27.enum([
16166
- "quiet",
16167
- "editorial",
16168
- "display",
16169
- "poster"
16170
- ]);
16171
- sectionHeightIntentSchema = z27.enum([
16172
- "default",
16173
- "banner",
16174
- "hero",
16175
- "immersive"
16176
- ]);
16177
- imageSurfaceTreatmentIntensitySchema = z27.enum(["soft", "balanced", "strong"]);
16178
- imageSurfaceMotionSchema = z27.enum(["static", "fixed-frame"]);
16179
- imageSurfaceTreatmentSchema = z27.discriminatedUnion("kind", [
16180
- z27.object({ kind: z27.literal("none") }).strict(),
16181
- z27.object({
16182
- kind: z27.literal("brand-scrim"),
16183
- token: z27.enum(["primary", "secondary", "accent"]),
16184
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16185
- }).strict(),
16186
- z27.object({
16187
- kind: z27.literal("brand-wash"),
16188
- token: z27.enum(["primary", "secondary", "accent"]),
16189
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16190
- }).strict(),
16191
- z27.object({
16192
- kind: z27.literal("neutral-scrim"),
16193
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16194
- }).strict(),
16195
- z27.object({
16196
- kind: z27.literal("neutral-wash"),
16197
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16198
- }).strict(),
16199
- z27.object({
16200
- kind: z27.literal("solid-panel"),
16201
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
16202
- }).strict()
16203
- ]);
16204
- testimonialCardTreatmentSchema = z27.enum(["default", "accent-quote"]);
16205
- tileTreatmentSchema = z27.enum(tileTreatmentValues);
16206
- eventListTreatmentSchema = z27.enum(eventListTreatmentValues);
16207
- eyebrowTreatmentSchema = z27.enum(eyebrowTreatmentValues);
16208
- userPanelTreatments = uniqueNonEmpty(
16209
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
16210
- );
16211
- userFlushTreatments = uniqueNonEmpty(
16212
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
16213
- );
16214
- userFlushBleeds = uniqueNonEmpty(
16215
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
16216
- );
16217
- contentFrameIntentSchema = z27.discriminatedUnion("kind", [
16218
- z27.object({ kind: z27.literal("plain") }).strict(),
16219
- z27.object({
16220
- kind: z27.literal("panel"),
16221
- treatment: z27.enum(userPanelTreatments)
16222
- }).strict(),
16223
- z27.object({
16224
- kind: z27.literal("flush-panel"),
16225
- treatment: z27.enum(userFlushTreatments),
16226
- bleed: z27.enum(userFlushBleeds)
16227
- }).strict()
16228
- ]);
16229
- blockDesignPlanSchema = z27.object({
16230
- blockId: z27.string().min(1).transform(asDesignBlockId),
16231
- blockKind: z27.string().min(1),
16232
- purpose: z27.string().min(1),
16233
- sectionSurface: z27.enum(userDesignOptionCatalog.sectionSurfaces),
16234
- contentFrame: contentFrameIntentSchema,
16235
- itemSurface: z27.enum(userDesignOptionCatalog.itemSurfaces),
16236
- transitionAfter: z27.enum(userDesignOptionCatalog.transitions),
16237
- emphasis: z27.enum(userDesignOptionCatalog.emphases),
16238
- sectionHeight: sectionHeightIntentSchema.optional(),
16239
- heroLegibility: heroLegibilityStrategySchema.optional(),
16240
- heroComposition: heroCompositionIntentSchema.optional(),
16241
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
16242
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
16243
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
16244
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
16245
- tileTreatment: tileTreatmentSchema.optional(),
16246
- eventListTreatment: eventListTreatmentSchema.optional(),
16247
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
16248
- }).strict();
16249
- styleAuthoritySchema = z27.discriminatedUnion("kind", [
16250
- z27.object({
16251
- kind: z27.literal("theme-v2"),
16252
- source: designResolutionPolicySchema,
16253
- siteStyleId: z27.string().min(1).transform(asSiteStyleId),
16254
- templateId: z27.string().min(1).transform(asDesignSystemTemplateId),
16255
- templateVersion: z27.number().int().nonnegative(),
16256
- resolverVersion: z27.number().int().nonnegative()
16257
- }).strict(),
16258
- z27.object({
16259
- kind: z27.literal("legacy-raw"),
16260
- reason: z27.enum(["pre-theme-v2", "manual-runtime-fields"])
16261
- }).strict(),
16262
- z27.object({
16263
- kind: z27.literal("advanced-detached"),
16264
- reason: z27.literal("detached-custom-runtime-fields")
16265
- }).strict()
16266
- ]);
16267
- blockRuntimeStyleAuthoritySchema = z27.object({
16268
- unit: z27.literal("block-runtime-fields"),
16269
- blockId: z27.string().min(1).transform(asDesignBlockId),
16270
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
16271
- authority: styleAuthoritySchema
16272
- }).strict();
16273
- persistedPageDesignStateV1Schema = z27.object({
16274
- schemaVersion: z27.literal(themeV2DesignStateSchemaVersion),
16275
- siteStyleId: z27.string().min(1).transform(asSiteStyleId),
16276
- templateId: z27.string().min(1).transform(asDesignSystemTemplateId),
16277
- templateVersion: z27.number().int().nonnegative(),
16278
- resolverVersion: z27.number().int().nonnegative(),
16279
- rhythmPresetId: z27.string().min(1),
16280
- blocks: z27.array(blockDesignPlanSchema),
16281
- styleAuthorities: z27.array(blockRuntimeStyleAuthoritySchema)
16282
- }).strict();
16283
- }
16284
- });
16285
-
16286
- // ../theme-core/src/site-styles/runtimeCompiler.ts
16287
- function defineDesignRuntimeRules(rules) {
16288
- return rules;
16289
- }
16290
- function defineComponentRuntimeRules(rules) {
16291
- return rules;
16292
- }
16293
- function uniformSectionForeground(token) {
16294
- return {
16295
- textColor: token,
16296
- headingColor: token,
16297
- linkColor: token,
16298
- supportingColor: token
16299
- };
16300
- }
16301
- var defaultDesignRuntimeRules, defaultComponentRuntimeRules;
16302
- var init_runtimeCompiler = __esm({
16303
- "../theme-core/src/site-styles/runtimeCompiler.ts"() {
16304
- "use strict";
16305
- init_schema3();
16306
- init_modern_minimal();
16307
- init_expandPalette();
16308
- init_personalities();
16309
- init_variants();
16310
- init_designState();
16311
- init_types2();
16312
- init_accessibleSurfaces();
16313
- defaultDesignRuntimeRules = defineDesignRuntimeRules({
16314
- sectionSurfaces: {
16315
- base: {},
16316
- "muted-band": {
16317
- background: {
16318
- type: "color",
16319
- color: "muted"
16320
- }
16321
- },
16322
- "accent-band": {
16323
- background: {
16324
- type: "color",
16325
- color: "primary"
16326
- }
16815
+ headingSize: "editorial"
16816
+ }
16817
+ },
16818
+ inputs: ornateDarkInputs
16327
16819
  },
16328
- "brand-depth-band": {
16329
- background: {
16330
- type: "color",
16331
- color: "primary-800"
16332
- }
16820
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
16821
+ recommendedAppearancePresetIds: [
16822
+ "hero-brand-scrim-fixed-frame",
16823
+ "media-text-quiet-story",
16824
+ "events-lined-panel",
16825
+ "schedule-details-brand-depth",
16826
+ "testimonials-statement-cards",
16827
+ "contact-form-panel"
16828
+ ],
16829
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
16830
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
16831
+ recommendedHeaderStyleChoicesByLayout: {
16832
+ floating: [
16833
+ headerStyleChoice("minimal-surface"),
16834
+ headerStyleChoice("split-glass"),
16835
+ headerStyleChoice("glass")
16836
+ ]
16333
16837
  },
16334
- "hero-image": {
16335
- background: {
16336
- type: "image",
16337
- opacity: 1,
16338
- position: "center center",
16339
- ...uniformSectionForeground("text")
16340
- }
16341
- }
16342
- },
16343
- heroLegibility: {
16344
- "scrim-gradient": {
16345
- type: "gradient",
16346
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
16347
- opacity: 1
16838
+ recommendedHeaderLookIds: ["minimal-transparent"],
16839
+ recommendedFooterLookIds: [
16840
+ "site-footer-brand-two-band",
16841
+ "footer-muted-grounding"
16842
+ ],
16843
+ buttonPersonalityChoices: [
16844
+ buttonChoice("ornate-ritual"),
16845
+ buttonChoice("joy-stamp"),
16846
+ buttonChoice("ink-stamp")
16847
+ ],
16848
+ paletteVariantChoices: [
16849
+ paletteChoice("warm-dark-kirtan-gold"),
16850
+ paletteChoice("warm-dark-ember"),
16851
+ paletteChoice("brand-led-burgundy-gold")
16852
+ ]
16853
+ }),
16854
+ defineCuratedSiteStyle({
16855
+ id: "site-style:original-joy",
16856
+ name: "Original Joy",
16857
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
16858
+ description: "Warm, dark, and editorial: deep clay grounds, cream type, and bold burnt-orange accents for soulful community brands.",
16859
+ generationBrief: "Use a deep brown ground with cream text and burnt-orange accents, large display headings, generous spacing, organic rounded shapes, and bold colour-blocked feature sections. Lead with warmth and belonging; calls to action should feel strong but unhurried.",
16860
+ tokenRecipes: {
16861
+ palette: "brand-led",
16862
+ contrast: "maximum",
16863
+ radius: "rounded",
16864
+ shadow: "subtle",
16865
+ typography: "clean-sans",
16866
+ spacing: "airy",
16867
+ motion: "expressive"
16348
16868
  },
16349
- "solid-panel": {
16350
- type: "color",
16351
- color: "surface",
16352
- opacity: 0.88
16353
- }
16354
- },
16355
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
16356
- });
16357
- defaultComponentRuntimeRules = defineComponentRuntimeRules({
16358
- panelFrames: {
16359
- inset: {
16360
- spacing: "comfortable",
16361
- rounded: "xl",
16362
- raised: false,
16363
- background: {
16364
- type: "color",
16365
- color: "surfaceAlt",
16366
- textColor: "text"
16869
+ compositionBudget: expressiveBudget,
16870
+ typographyPresetChoices: [
16871
+ typographyChoice("typography-preset:original-joy"),
16872
+ typographyChoice("typography-preset:bold-display"),
16873
+ typographyChoice("typography-preset:modern-sans")
16874
+ ],
16875
+ defaultTypographyPresetId: "typography-preset:original-joy",
16876
+ themeOverrides: {
16877
+ accordions: boldBorderedAccordionSystem,
16878
+ // Shared card system: warm rounded brown cards (event + testimonial cards
16879
+ // pick this up automatically) with a burnt-orange statement variant.
16880
+ cards: originalJoyCardSystem,
16881
+ testimonialQuote: accentGlyphQuote,
16882
+ bodyText: {
16883
+ intro: {
16884
+ paragraphSize: "editorial",
16885
+ headingSize: "editorial"
16886
+ }
16367
16887
  }
16368
16888
  },
16369
- raised: {
16370
- spacing: "comfortable",
16371
- rounded: "xl",
16372
- raised: true,
16373
- background: {
16374
- type: "color",
16375
- color: "surfaceAlt",
16376
- textColor: "text"
16377
- }
16889
+ // Recommended block looks: the bold colour-blocked feature cards, a calm
16890
+ // band for the events spotlight, and statement testimonial cards.
16891
+ recommendedAppearancePresetIds: [
16892
+ "feature-cards-bold-colors",
16893
+ "offerings-calm-list",
16894
+ "testimonials-statement-cards"
16895
+ ],
16896
+ // Floating, transparent "Clear Split" header (no fill behind the nav links).
16897
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
16898
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
16899
+ recommendedHeaderStyleChoicesByLayout: {
16900
+ floating: [
16901
+ headerStyleChoice("minimal-surface"),
16902
+ headerStyleChoice("split-glass"),
16903
+ headerStyleChoice("glass")
16904
+ ]
16378
16905
  },
16379
- editorial: {
16380
- spacing: "medium",
16381
- rounded: "xl",
16382
- raised: false,
16383
- background: {
16384
- type: "color",
16385
- color: "surface",
16386
- textColor: "text"
16387
- }
16388
- }
16906
+ // Legacy bridge only (the real curation is the explicit selection above).
16907
+ // Kept to a reserved-space, non-overlay look on purpose: the split hero
16908
+ // flows below the Clear Split header, so we must NOT trigger the immersive
16909
+ // overlay-hero promotion that looks like `floating-glass` would force.
16910
+ recommendedHeaderLookIds: ["minimal-transparent"],
16911
+ recommendedFooterLookIds: [
16912
+ "site-footer-brand-two-band",
16913
+ "footer-muted-grounding"
16914
+ ],
16915
+ buttonPersonalityChoices: [
16916
+ buttonChoice("joy-stamp"),
16917
+ buttonChoice("ink-stamp"),
16918
+ buttonChoice("showtime-pill")
16919
+ ],
16920
+ paletteVariantChoices: [paletteChoice("warm-dark-ember")]
16921
+ })
16922
+ ];
16923
+ curatedSiteStylesById = new Map(
16924
+ curatedSiteStyles.map((style) => [style.id, style])
16925
+ );
16926
+ }
16927
+ });
16928
+
16929
+ // ../theme-core/src/site-styles/lookResolution.ts
16930
+ var init_lookResolution = __esm({
16931
+ "../theme-core/src/site-styles/lookResolution.ts"() {
16932
+ "use strict";
16933
+ init_appearancePresets();
16934
+ init_types2();
16935
+ }
16936
+ });
16937
+
16938
+ // ../theme-core/src/site-styles/siteStyleBlockPolicies.ts
16939
+ var defaultPolicyPageFlowPresetId, southWestTwerkSchoolSiteStyleId, heroBrandScrimFixedFrameLookId, classicHeroLayoutVariantKey, microHeroLayoutVariantKey, waveBoundaryOptionId;
16940
+ var init_siteStyleBlockPolicies = __esm({
16941
+ "../theme-core/src/site-styles/siteStyleBlockPolicies.ts"() {
16942
+ "use strict";
16943
+ init_lookResolution();
16944
+ init_appearancePresets();
16945
+ init_pageDesignIntent();
16946
+ init_types2();
16947
+ init_sectionTransitions();
16948
+ defaultPolicyPageFlowPresetId = asPageFlowPresetId("generated-default");
16949
+ southWestTwerkSchoolSiteStyleId = asSiteStyleId("site-style:south-west-twerk-school");
16950
+ heroBrandScrimFixedFrameLookId = asAppearancePresetId("hero-brand-scrim-fixed-frame");
16951
+ classicHeroLayoutVariantKey = asLayoutVariantKey("classic");
16952
+ microHeroLayoutVariantKey = asLayoutVariantKey("micro");
16953
+ waveBoundaryOptionId = asBoundaryOptionId("break:wave");
16954
+ }
16955
+ });
16956
+
16957
+ // ../theme-core/src/site-styles/pageDesignEditorModel.ts
16958
+ var pageFlowPresets;
16959
+ var init_pageDesignEditorModel = __esm({
16960
+ "../theme-core/src/site-styles/pageDesignEditorModel.ts"() {
16961
+ "use strict";
16962
+ init_curatedSiteStyles();
16963
+ init_lookResolution();
16964
+ init_siteStyleBlockPolicies();
16965
+ init_pageDesignIntent();
16966
+ init_types2();
16967
+ init_sectionTransitions();
16968
+ init_sectionTransitions();
16969
+ pageFlowPresets = [
16970
+ {
16971
+ id: asPageFlowPresetId("flow:quiet"),
16972
+ label: "Quiet",
16973
+ boundaryStrategy: "quiet",
16974
+ defaultBoundaryOptionId: noneBoundaryOption.id
16389
16975
  },
16390
- flushFrames: {
16391
- "media-panel": {
16392
- fullWidth: true,
16393
- spacing: "none",
16394
- rounded: "none",
16395
- raised: false
16396
- }
16976
+ {
16977
+ id: asPageFlowPresetId("flow:balanced"),
16978
+ label: "Balanced",
16979
+ boundaryStrategy: "balanced",
16980
+ defaultBoundaryOptionId: softBoundaryOption.id
16397
16981
  },
16398
- itemSurfaces: {
16399
- none: null,
16400
- default: {
16401
- spacing: "medium",
16402
- rounded: "lg",
16403
- raised: false
16404
- },
16405
- flat: {
16406
- spacing: "medium",
16407
- rounded: "lg",
16408
- raised: false
16409
- },
16410
- outlined: {
16411
- spacing: "medium",
16412
- rounded: "lg",
16413
- raised: false,
16414
- border: {
16415
- enabled: true,
16416
- width: "1",
16417
- colorToken: "border"
16418
- }
16419
- },
16420
- raised: {
16421
- spacing: "medium",
16422
- rounded: "xl",
16423
- raised: true
16424
- },
16425
- inset: {
16426
- treatment: "soft-panel",
16427
- spacing: "comfortable",
16428
- rounded: "xl",
16429
- raised: false,
16430
- border: {
16431
- enabled: false
16432
- },
16433
- background: {
16434
- type: "color",
16435
- color: "surfaceAlt",
16436
- textColor: "text"
16437
- }
16438
- },
16439
- editorial: {
16440
- // Boxless open column with a short rule on top; the visual treatment
16441
- // lives in blocks-static/card-treatments.css.
16442
- treatment: "editorial-rule",
16443
- spacing: "none",
16444
- rounded: "none",
16445
- raised: false,
16446
- border: {
16447
- enabled: false
16448
- }
16449
- },
16450
- "color-blocked": {
16451
- // Bold, flat colour-blocked cards. The per-card background colour cycle
16452
- // (by position) and staggered offset live in
16453
- // blocks-static/card-treatments.css; here we set the shared shape:
16454
- // generous padding, large radius, no border, flat (no shadow).
16455
- treatment: "color-blocked",
16456
- spacing: "spacious",
16457
- rounded: "2xl",
16458
- raised: false,
16459
- border: {
16460
- enabled: false
16461
- }
16462
- }
16982
+ {
16983
+ id: asPageFlowPresetId("flow:expressive"),
16984
+ label: "Expressive",
16985
+ boundaryStrategy: "expressive",
16986
+ defaultBoundaryOptionId: spaciousBoundaryOption.id
16463
16987
  }
16464
- });
16988
+ ];
16989
+ }
16990
+ });
16991
+
16992
+ // ../theme-core/src/site-styles/resolver.ts
16993
+ var init_resolver2 = __esm({
16994
+ "../theme-core/src/site-styles/resolver.ts"() {
16995
+ "use strict";
16996
+ init_types2();
16465
16997
  }
16466
16998
  });
16467
16999
 
@@ -16656,6 +17188,7 @@ var init_generatedDesignPipeline = __esm({
16656
17188
  init_designState();
16657
17189
  init_generatedSchemas();
16658
17190
  init_siteStyleBlockPolicies();
17191
+ init_curatedSiteStyles();
16659
17192
  init_lookResolution();
16660
17193
  init_headerOpeningSection();
16661
17194
  init_resolver2();
@@ -18374,7 +18907,7 @@ function buildFooterNavAll(common) {
18374
18907
  return stack(
18375
18908
  { className: common.className, gap: common.gap, align: "stretch" },
18376
18909
  [item],
18377
- when(collectionPath)
18910
+ whenCollectionHasItems(collectionPath)
18378
18911
  );
18379
18912
  }
18380
18913
  function buildFooterNavLinksOnly(common) {
@@ -18407,7 +18940,7 @@ function buildFooterNavLinksOnly(common) {
18407
18940
  return stack(
18408
18941
  { className: common.className, gap: common.gap, align: "stretch" },
18409
18942
  [item],
18410
- when(collectionPath)
18943
+ whenCollectionHasItems(collectionPath)
18411
18944
  );
18412
18945
  }
18413
18946
  function buildFooterNavFlatten(common) {
@@ -18456,7 +18989,7 @@ function buildFooterNavFlatten(common) {
18456
18989
  return stack(
18457
18990
  { className: common.className, gap: common.gap, align: "stretch" },
18458
18991
  [item],
18459
- when(collectionPath)
18992
+ whenCollectionHasItems(collectionPath)
18460
18993
  );
18461
18994
  }
18462
18995
  function footerNav(opts) {
@@ -18478,10 +19011,22 @@ function footerNav(opts) {
18478
19011
  if (mode === "flatten") return buildFooterNavFlatten(common);
18479
19012
  return buildFooterNavAll(common);
18480
19013
  }
19014
+ var whenCollectionHasItems;
18481
19015
  var init_footerNav = __esm({
18482
19016
  "../blocks/src/system/node/fragments/footerNav.ts"() {
18483
19017
  "use strict";
18484
19018
  init_builder2();
19019
+ whenCollectionHasItems = (collectionPath) => (node) => ({
19020
+ ...node,
19021
+ $when: {
19022
+ when: {
19023
+ from: collectionPath,
19024
+ transforms: [{ id: "array.length" }]
19025
+ },
19026
+ equals: 0,
19027
+ not: true
19028
+ }
19029
+ });
18485
19030
  }
18486
19031
  });
18487
19032
 
@@ -21532,8 +22077,23 @@ var init_heroLayoutControls = __esm({
21532
22077
  heroLayoutControlsFragment = defineFragment({
21533
22078
  id: "heroLayoutControls",
21534
22079
  title: "Hero Layout",
21535
- description: "Alignment and content width controls for hero layouts.",
22080
+ description: "Title scale, alignment, and content width controls for hero layouts.",
21536
22081
  fields: [
22082
+ {
22083
+ id: "titleSize",
22084
+ type: "select",
22085
+ label: "Title size",
22086
+ description: "Adjust the visual scale of the hero title.",
22087
+ required: false,
22088
+ ui: { intent: "display" },
22089
+ options: [
22090
+ { value: "auto", label: "Auto" },
22091
+ { value: "quiet", label: "Normal" },
22092
+ { value: "editorial", label: "Large" },
22093
+ { value: "display", label: "Huge" },
22094
+ { value: "poster", label: "Poster" }
22095
+ ]
22096
+ },
21537
22097
  {
21538
22098
  id: "contentAlignment",
21539
22099
  type: "select",
@@ -23582,6 +24142,132 @@ var init_event_registration_shared = __esm({
23582
24142
  }
23583
24143
  });
23584
24144
 
24145
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
24146
+ function resolveRuntimeEventPricing(event) {
24147
+ if (isPublicEventPricing(event.pricing)) {
24148
+ return event.pricing;
24149
+ }
24150
+ const legacy = event;
24151
+ const currency = readCurrency(legacy.currency);
24152
+ if (event.requiresRegistration === false) {
24153
+ return {
24154
+ kind: "drop_in",
24155
+ currency,
24156
+ display: { kind: "free", currency }
24157
+ };
24158
+ }
24159
+ if (legacy.pricingMode === "ticket_types") {
24160
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
24161
+ return {
24162
+ kind: "ticket_types",
24163
+ currency,
24164
+ ticketTypes,
24165
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
24166
+ };
24167
+ }
24168
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
24169
+ if (legacy.pricingType === "paid" && amount > 0) {
24170
+ return {
24171
+ kind: "single_paid",
24172
+ amount,
24173
+ currency,
24174
+ display: { kind: "exact", amount, currency }
24175
+ };
24176
+ }
24177
+ return {
24178
+ kind: "free_registration",
24179
+ currency,
24180
+ display: { kind: "free", currency }
24181
+ };
24182
+ }
24183
+ function readCurrency(value) {
24184
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
24185
+ }
24186
+ function isRecord5(value) {
24187
+ return typeof value === "object" && value !== null && !Array.isArray(value);
24188
+ }
24189
+ function isPublicEventPricing(value) {
24190
+ if (!isRecord5(value) || typeof value.kind !== "string") return false;
24191
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
24192
+ }
24193
+ function isPublicEventTicketType(value) {
24194
+ return isRecord5(value) && typeof value.id === "string";
24195
+ }
24196
+ function readTicketTypePriceDisplay(value, currency) {
24197
+ const display = readLegacyPriceDisplay(value, currency);
24198
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
24199
+ }
24200
+ function readLegacyPriceDisplay(value, currency) {
24201
+ if (!isRecord5(value) || typeof value.kind !== "string") {
24202
+ return { kind: "unavailable", currency };
24203
+ }
24204
+ const displayCurrency = readCurrency(value.currency);
24205
+ switch (value.kind) {
24206
+ case "free":
24207
+ return { kind: "free", currency: displayCurrency };
24208
+ case "exact":
24209
+ return readAmount(value.amount) !== null ? {
24210
+ kind: "exact",
24211
+ amount: readAmount(value.amount) ?? 0,
24212
+ currency: displayCurrency
24213
+ } : { kind: "unavailable", currency };
24214
+ case "from":
24215
+ return readAmount(value.amount) !== null ? {
24216
+ kind: "from",
24217
+ amount: readAmount(value.amount) ?? 0,
24218
+ currency: displayCurrency
24219
+ } : { kind: "unavailable", currency };
24220
+ case "mixed":
24221
+ return readAmount(value.paidFromAmount) !== null ? {
24222
+ kind: "mixed",
24223
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
24224
+ currency: displayCurrency
24225
+ } : { kind: "unavailable", currency };
24226
+ case "unavailable":
24227
+ return { kind: "unavailable", currency: displayCurrency };
24228
+ case "course":
24229
+ return isRecord5(value.display) ? {
24230
+ kind: "course",
24231
+ display: readCoursePriceDisplay(value.display, displayCurrency)
24232
+ } : {
24233
+ kind: "course",
24234
+ display: { kind: "unavailable", currency: displayCurrency }
24235
+ };
24236
+ default:
24237
+ return { kind: "unavailable", currency };
24238
+ }
24239
+ }
24240
+ function readCoursePriceDisplay(value, currency) {
24241
+ switch (value.kind) {
24242
+ case "free":
24243
+ return { kind: "free", currency: readCurrency(value.currency) };
24244
+ case "exact":
24245
+ return readAmount(value.amount) !== null ? {
24246
+ kind: "exact",
24247
+ amount: readAmount(value.amount) ?? 0,
24248
+ currency: readCurrency(value.currency)
24249
+ } : { kind: "unavailable", currency };
24250
+ case "from":
24251
+ return readAmount(value.amount) !== null ? {
24252
+ kind: "from",
24253
+ amount: readAmount(value.amount) ?? 0,
24254
+ currency: readCurrency(value.currency)
24255
+ } : { kind: "unavailable", currency };
24256
+ default:
24257
+ return { kind: "unavailable", currency };
24258
+ }
24259
+ }
24260
+ function readAmount(value) {
24261
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
24262
+ }
24263
+ var DEFAULT_EVENT_CURRENCY;
24264
+ var init_pricing = __esm({
24265
+ "../blocks/src/system/runtime/nodes/events/shared/pricing.ts"() {
24266
+ "use strict";
24267
+ DEFAULT_EVENT_CURRENCY = "USD";
24268
+ }
24269
+ });
24270
+
23585
24271
  // ../blocks/src/system/constants/events.ts
23586
24272
  function isEventCalendarDisplayMode(value) {
23587
24273
  return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
@@ -23632,11 +24318,26 @@ import { z as z48 } from "zod";
23632
24318
  function buildEventRegistrationDisplay(source) {
23633
24319
  return {
23634
24320
  kind: "event-registration",
23635
- state: "shell",
24321
+ state: "generic-shell",
23636
24322
  className: source.className ?? null,
24323
+ titleText: "Event registration",
24324
+ bodyText: "Preparing dates, tickets, and booking details.",
24325
+ stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
23637
24326
  summaryButtonText: source.buttonText?.trim() || "Register"
23638
24327
  };
23639
24328
  }
24329
+ function normalizeEventRegistrationEventInput(value) {
24330
+ if (!isRecord6(value)) {
24331
+ return value;
24332
+ }
24333
+ return {
24334
+ ...value,
24335
+ pricing: resolveRuntimeEventPricing(value)
24336
+ };
24337
+ }
24338
+ function isRecord6(value) {
24339
+ return typeof value === "object" && value !== null && !Array.isArray(value);
24340
+ }
23640
24341
  function buildEventRegistrationInteractiveIslandProps(props2) {
23641
24342
  return buildInteractiveIslandProps({
23642
24343
  runtime: eventRegistrationBlockRuntime,
@@ -23651,20 +24352,31 @@ function buildEventRegistrationInteractiveIslandProps(props2) {
23651
24352
  source: props2
23652
24353
  });
23653
24354
  }
23654
- var contentEntrySchema, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationIslandMetaCodec, eventRegistrationIslandMetaKeys, eventRegistrationBlockRuntime, eventRegistrationInteractiveIslandPropsCodec;
24355
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS, eventRegistrationGenericDateStepLabel, eventRegistrationGenericTicketsStepLabel, eventRegistrationGenericDetailsStepLabel, contentEntrySchema, eventRegistrationPublicEventSchema, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationIslandMetaCodec, eventRegistrationIslandMetaKeys, eventRegistrationBlockRuntime, eventRegistrationInteractiveIslandPropsCodec;
23655
24356
  var init_event_registration_interactive = __esm({
23656
24357
  "../blocks/src/system/runtime/nodes/event-registration.interactive.ts"() {
23657
24358
  "use strict";
23658
24359
  init_schemas2();
23659
24360
  init_event_registration_shared();
24361
+ init_pricing();
23660
24362
  init_islands();
23661
24363
  init_runtime();
23662
24364
  init_contract_schemas();
24365
+ EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
24366
+ [
24367
+ eventRegistrationGenericDateStepLabel,
24368
+ eventRegistrationGenericTicketsStepLabel,
24369
+ eventRegistrationGenericDetailsStepLabel
24370
+ ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
23663
24371
  contentEntrySchema = z48.object({
23664
24372
  id: z48.string(),
23665
24373
  slug: z48.string(),
23666
24374
  contentTypeSlug: z48.string()
23667
24375
  });
24376
+ eventRegistrationPublicEventSchema = z48.preprocess(
24377
+ normalizeEventRegistrationEventInput,
24378
+ publicEventSchema
24379
+ );
23668
24380
  eventRegistrationSourceSchema = z48.object({
23669
24381
  siteId: z48.string().optional(),
23670
24382
  apiBaseUrl: z48.string().optional(),
@@ -23672,7 +24384,7 @@ var init_event_registration_interactive = __esm({
23672
24384
  previewToken: z48.string().nullable().optional(),
23673
24385
  occurrenceContext: occurrenceContextSchema.optional(),
23674
24386
  contentEntry: contentEntrySchema.nullable().optional(),
23675
- events: z48.array(publicEventSchema).nullable().optional(),
24387
+ events: z48.array(eventRegistrationPublicEventSchema).nullable().optional(),
23676
24388
  className: z48.string().nullable().optional(),
23677
24389
  buttonText: z48.string().nullable().optional(),
23678
24390
  maxTickets: z48.string().nullable().optional(),
@@ -23687,14 +24399,21 @@ var init_event_registration_interactive = __esm({
23687
24399
  });
23688
24400
  eventRegistrationDisplaySchema = z48.object({
23689
24401
  kind: z48.literal("event-registration"),
23690
- state: z48.literal("shell"),
24402
+ state: z48.literal("generic-shell"),
23691
24403
  className: z48.string().nullable(),
24404
+ titleText: z48.string(),
24405
+ bodyText: z48.string(),
24406
+ stepLabels: z48.tuple([
24407
+ z48.literal(eventRegistrationGenericDateStepLabel),
24408
+ z48.literal(eventRegistrationGenericTicketsStepLabel),
24409
+ z48.literal(eventRegistrationGenericDetailsStepLabel)
24410
+ ]),
23692
24411
  summaryButtonText: z48.string()
23693
24412
  });
23694
24413
  eventRegistrationHydrationSchema = z48.object({
23695
24414
  occurrenceContext: occurrenceContextSchema.optional(),
23696
24415
  contentEntry: contentEntrySchema.nullable().optional(),
23697
- events: z48.array(publicEventSchema).nullable().optional(),
24416
+ events: z48.array(eventRegistrationPublicEventSchema).nullable().optional(),
23698
24417
  maxTickets: z48.string().optional(),
23699
24418
  showVenue: z48.boolean().optional(),
23700
24419
  showCapacity: z48.boolean().optional(),
@@ -23902,7 +24621,7 @@ function formatCoursePriceAmount(amount, currency, locale) {
23902
24621
  locale
23903
24622
  );
23904
24623
  }
23905
- var init_pricing = __esm({
24624
+ var init_pricing2 = __esm({
23906
24625
  "../blocks/src/system/blocks/courses/shared/pricing.ts"() {
23907
24626
  "use strict";
23908
24627
  init_src();
@@ -23915,7 +24634,7 @@ var init_shared3 = __esm({
23915
24634
  "use strict";
23916
24635
  init_types16();
23917
24636
  init_schemas();
23918
- init_pricing();
24637
+ init_pricing2();
23919
24638
  }
23920
24639
  });
23921
24640
 
@@ -25011,7 +25730,9 @@ function formatPublicEventPriceDisplay(display) {
25011
25730
  }
25012
25731
  }
25013
25732
  function formatEventPrice(event) {
25014
- return formatPublicEventPriceDisplay(publicEventPricingDisplay(event.pricing));
25733
+ return formatPublicEventPriceDisplay(
25734
+ publicEventPricingDisplay(resolveRuntimeEventPricing(event))
25735
+ );
25015
25736
  }
25016
25737
  function resolveEventCta(event, buttonText) {
25017
25738
  const { isFull: isSoldOut } = getEventAvailability(event);
@@ -25032,6 +25753,7 @@ var init_utils3 = __esm({
25032
25753
  init_src3();
25033
25754
  init_shared3();
25034
25755
  init_eventCapacity();
25756
+ init_pricing();
25035
25757
  init_src3();
25036
25758
  init_src3();
25037
25759
  COLUMN_CLASSES = {
@@ -29299,12 +30021,12 @@ function resolveBookingSiteId(siteId, form2) {
29299
30021
  return siteId || form2?.siteId || "";
29300
30022
  }
29301
30023
  function normalizeBookingFormConfig(form2) {
29302
- if (!isRecord8(form2)) return null;
30024
+ if (!isRecord10(form2)) return null;
29303
30025
  const id = readNonEmptyString(form2.id);
29304
30026
  const name = readNonEmptyString(form2.name);
29305
30027
  if (!id || !name) return null;
29306
- const schemaSource = isRecord8(form2.schema) ? form2.schema : isRecord8(form2.schemaJson) ? form2.schemaJson : null;
29307
- const settingsSource = isRecord8(form2.settings) ? form2.settings : isRecord8(form2.settingsJson) ? form2.settingsJson : null;
30028
+ const schemaSource = isRecord10(form2.schema) ? form2.schema : isRecord10(form2.schemaJson) ? form2.schemaJson : null;
30029
+ const settingsSource = isRecord10(form2.settings) ? form2.settings : isRecord10(form2.settingsJson) ? form2.settingsJson : null;
29308
30030
  return {
29309
30031
  id,
29310
30032
  name,
@@ -29328,10 +30050,10 @@ function normalizeBookingServices(services) {
29328
30050
  if (Array.isArray(services)) {
29329
30051
  return services.filter(isBookingFormService).map(normalizeService);
29330
30052
  }
29331
- if (isRecord8(services) && "services" in services) {
30053
+ if (isRecord10(services) && "services" in services) {
29332
30054
  return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
29333
30055
  }
29334
- return isRecord8(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
30056
+ return isRecord10(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
29335
30057
  }
29336
30058
  function normalizeBookingSchema(value) {
29337
30059
  if (!value) return void 0;
@@ -29343,7 +30065,7 @@ function normalizeBookingSchema(value) {
29343
30065
  };
29344
30066
  }
29345
30067
  function readBookingFormField(value) {
29346
- if (!isRecord8(value)) return null;
30068
+ if (!isRecord10(value)) return null;
29347
30069
  const id = readNonEmptyString(value.id);
29348
30070
  const label = readNonEmptyString(value.label);
29349
30071
  const type = readBookingFieldType(value.type);
@@ -29389,7 +30111,7 @@ function readBookingFieldOptions(value) {
29389
30111
  return options.length > 0 ? options : void 0;
29390
30112
  }
29391
30113
  function readBookingFieldOption(value) {
29392
- if (!isRecord8(value)) return null;
30114
+ if (!isRecord10(value)) return null;
29393
30115
  const optionValue = readNonEmptyString(value.value);
29394
30116
  const label = readNonEmptyString(value.label);
29395
30117
  return optionValue && label ? { value: optionValue, label } : null;
@@ -29406,7 +30128,7 @@ function normalizeBookingSettings(value) {
29406
30128
  };
29407
30129
  }
29408
30130
  function isBookingFormService(value) {
29409
- return isRecord8(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
30131
+ return isRecord10(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
29410
30132
  }
29411
30133
  function collectBookingCustomFields(data) {
29412
30134
  const customFields = {};
@@ -29436,7 +30158,7 @@ function readStringArray(value) {
29436
30158
  const strings = value.filter((item) => typeof item === "string");
29437
30159
  return strings.length > 0 ? strings : void 0;
29438
30160
  }
29439
- function isRecord8(value) {
30161
+ function isRecord10(value) {
29440
30162
  return typeof value === "object" && value !== null;
29441
30163
  }
29442
30164
  function getBookingServicePaymentSelectionMode(service) {
@@ -30108,8 +30830,9 @@ function EventDetailsView({
30108
30830
  priceCents: selected.course.priceCents,
30109
30831
  currency: selected.course.currency
30110
30832
  }) : null;
30111
- const eventPricingType = publicEventPricingType(selected.pricing);
30112
- const eventPricingCurrency = publicEventPricingCurrency(selected.pricing) ?? "USD";
30833
+ const eventPricing = resolveRuntimeEventPricing(selected);
30834
+ const eventPricingType = publicEventPricingType(eventPricing);
30835
+ const eventPricingCurrency = publicEventPricingCurrency(eventPricing) ?? "USD";
30113
30836
  const isPaid = eventPricingType === "paid";
30114
30837
  const shouldShowCoursePricing = showCost && !isDropIn && coursePricing !== null;
30115
30838
  const shouldShowEventCost = showCost && isPaid && !isDropIn && coursePricing === null;
@@ -30207,6 +30930,7 @@ var init_view = __esm({
30207
30930
  "use strict";
30208
30931
  init_src();
30209
30932
  init_shared3();
30933
+ init_pricing();
30210
30934
  init_utils3();
30211
30935
  init_DateTimeTile();
30212
30936
  init_CoursePricingDisplay();
@@ -32473,7 +33197,7 @@ var init_embla_carousel_autoplay_esm = __esm({
32473
33197
  function isObject(subject) {
32474
33198
  return Object.prototype.toString.call(subject) === "[object Object]";
32475
33199
  }
32476
- function isRecord12(subject) {
33200
+ function isRecord14(subject) {
32477
33201
  return isObject(subject) || Array.isArray(subject);
32478
33202
  }
32479
33203
  function canUseDOM() {
@@ -32490,7 +33214,7 @@ function areOptionsEqual(optionsA, optionsB) {
32490
33214
  const valueA = optionsA[key];
32491
33215
  const valueB = optionsB[key];
32492
33216
  if (typeof valueA === "function") return `${valueA}` === `${valueB}`;
32493
- if (!isRecord12(valueA) || !isRecord12(valueB)) return valueA === valueB;
33217
+ if (!isRecord14(valueA) || !isRecord14(valueB)) return valueA === valueB;
32494
33218
  return areOptionsEqual(valueA, valueB);
32495
33219
  });
32496
33220
  }
@@ -35028,7 +35752,7 @@ function encodePublicProductCategorySelector2(selector) {
35028
35752
  };
35029
35753
  }
35030
35754
  }
35031
- function isRecord13(value) {
35755
+ function isRecord15(value) {
35032
35756
  return typeof value === "object" && value !== null;
35033
35757
  }
35034
35758
  function isJsonResponseContentType(contentType) {
@@ -35051,10 +35775,10 @@ async function parseJsonBody(response) {
35051
35775
  }
35052
35776
  }
35053
35777
  function getBlockApiErrorDetails(data) {
35054
- if (!isRecord13(data)) {
35778
+ if (!isRecord15(data)) {
35055
35779
  return {};
35056
35780
  }
35057
- const nestedError = isRecord13(data.error) ? data.error : void 0;
35781
+ const nestedError = isRecord15(data.error) ? data.error : void 0;
35058
35782
  const message = typeof nestedError?.message === "string" ? nestedError.message : typeof data.message === "string" ? data.message : void 0;
35059
35783
  const code = typeof nestedError?.code === "string" ? nestedError.code : typeof data.code === "string" ? data.code : void 0;
35060
35784
  return { message, code };
@@ -43427,6 +44151,87 @@ var init_registrationStateMachine = __esm({
43427
44151
  }
43428
44152
  });
43429
44153
 
44154
+ // ../blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.ts
44155
+ function getRegistrableStatuses(isPreview) {
44156
+ return isPreview ? ["active", "draft"] : ["active"];
44157
+ }
44158
+ function normalizeEventRegistrationMaxTickets(value) {
44159
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
44160
+ return Math.floor(value);
44161
+ }
44162
+ if (typeof value === "string") {
44163
+ const parsed = Number.parseInt(value, 10);
44164
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_EVENT_REGISTRATION_MAX_TICKETS;
44165
+ }
44166
+ return DEFAULT_EVENT_REGISTRATION_MAX_TICKETS;
44167
+ }
44168
+ function resolveEventRegistrationSubmitPlan(input) {
44169
+ const selection = input.paymentSelection.method ? input.paymentSelection : void 0;
44170
+ if (input.canJoinWaitlist) {
44171
+ return { ok: true, args: withOptionalSelection({ method: "free" }, selection) };
44172
+ }
44173
+ switch (input.paymentSelection.method) {
44174
+ case "pass":
44175
+ return input.paymentSelection.passId ? {
44176
+ ok: true,
44177
+ args: withOptionalSelection(
44178
+ { method: "pass", passId: input.paymentSelection.passId },
44179
+ selection
44180
+ )
44181
+ } : missingPaymentSelection();
44182
+ case "membership":
44183
+ return input.paymentSelection.membershipId ? {
44184
+ ok: true,
44185
+ args: withOptionalSelection(
44186
+ { method: "membership", membershipId: input.paymentSelection.membershipId },
44187
+ selection
44188
+ )
44189
+ } : missingPaymentSelection();
44190
+ case "free":
44191
+ return { ok: true, args: withOptionalSelection({ method: "free" }, selection) };
44192
+ case null:
44193
+ return input.eventRequiresPayment ? missingPaymentSelection() : { ok: true, args: { method: "free" } };
44194
+ case "pass_bundle":
44195
+ return input.paymentSelection.bundlePassId ? {
44196
+ ok: true,
44197
+ args: withOptionalSelection(
44198
+ { method: "pass_bundle", passId: input.paymentSelection.bundlePassId },
44199
+ selection
44200
+ )
44201
+ } : missingPaymentSelection();
44202
+ case "membership_bundle":
44203
+ return input.paymentSelection.bundleMembershipId ? {
44204
+ ok: true,
44205
+ args: withOptionalSelection(
44206
+ {
44207
+ method: "membership_bundle",
44208
+ membershipId: input.paymentSelection.bundleMembershipId
44209
+ },
44210
+ selection
44211
+ )
44212
+ } : missingPaymentSelection();
44213
+ case "stripe":
44214
+ return { ok: true, args: withOptionalSelection({ method: "stripe" }, selection) };
44215
+ }
44216
+ }
44217
+ function withOptionalSelection(args, selection) {
44218
+ return selection ? { ...args, selection } : args;
44219
+ }
44220
+ function missingPaymentSelection() {
44221
+ return {
44222
+ ok: false,
44223
+ reason: "payment-selection-required",
44224
+ message: "Select a payment option to continue."
44225
+ };
44226
+ }
44227
+ var DEFAULT_EVENT_REGISTRATION_MAX_TICKETS;
44228
+ var init_event_registration_headless_state = __esm({
44229
+ "../blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.ts"() {
44230
+ "use strict";
44231
+ DEFAULT_EVENT_REGISTRATION_MAX_TICKETS = 5;
44232
+ }
44233
+ });
44234
+
43430
44235
  // ../blocks/src/system/runtime/nodes/event-registration/types.ts
43431
44236
  var init_types18 = __esm({
43432
44237
  "../blocks/src/system/runtime/nodes/event-registration/types.ts"() {
@@ -43492,7 +44297,7 @@ function transformEligibilityResponse(response) {
43492
44297
  waitlistEnabled: eligibility.waitlistEnabled,
43493
44298
  canJoinWaitlist: eligibility.canJoinWaitlist,
43494
44299
  price: eligibility.eventPrice,
43495
- currency: eligibility.eventPriceCurrency ?? DEFAULT_EVENT_CURRENCY,
44300
+ currency: eligibility.eventPriceCurrency ?? DEFAULT_EVENT_CURRENCY2,
43496
44301
  requiresAuthForPasses: eligibility.requiresAuthForPasses,
43497
44302
  requiresAuthForMemberships: eligibility.requiresAuthForMemberships,
43498
44303
  eligiblePasses,
@@ -43523,7 +44328,7 @@ function getTicketTypeAvailabilityLabel(ticketType) {
43523
44328
  }
43524
44329
  function getVisibleTicketTypes(input) {
43525
44330
  const eligibilityTicketTypes = input.eligibility?.ticketTypes;
43526
- const eventTicketTypes = input.event ? publicEventTicketTypes(input.event.pricing) : [];
44331
+ const eventTicketTypes = input.event ? publicEventTicketTypes(resolveRuntimeEventPricing(input.event)) : [];
43527
44332
  const source = eligibilityTicketTypes && eligibilityTicketTypes.length > 0 ? eligibilityTicketTypes : eventTicketTypes;
43528
44333
  return source.filter(
43529
44334
  (ticketType) => ticketType.isActive && (!input.selectedAttendanceMode || (ticketType.attendanceScope ?? "both") === "both" || (ticketType.attendanceScope ?? "both") === input.selectedAttendanceMode)
@@ -43542,13 +44347,14 @@ function findSelectedTicketType(input) {
43542
44347
  selectedAttendanceMode: input.selectedAttendanceMode
43543
44348
  }).find((ticketType) => ticketType.id === input.selectedTicketTypeId) ?? null;
43544
44349
  }
43545
- var DEFAULT_EVENT_CURRENCY, ENTITLEMENT_SINGLE_TICKET_TOOLTIP;
44350
+ var DEFAULT_EVENT_CURRENCY2, ENTITLEMENT_SINGLE_TICKET_TOOLTIP;
43546
44351
  var init_utils5 = __esm({
43547
44352
  "../blocks/src/system/runtime/nodes/event-registration/utils.ts"() {
43548
44353
  "use strict";
43549
44354
  init_src();
44355
+ init_pricing();
43550
44356
  init_shared6();
43551
- DEFAULT_EVENT_CURRENCY = "usd";
44357
+ DEFAULT_EVENT_CURRENCY2 = "usd";
43552
44358
  ENTITLEMENT_SINGLE_TICKET_TOOLTIP = "Only available for single-ticket bookings";
43553
44359
  }
43554
44360
  });
@@ -44124,6 +44930,7 @@ var init_TicketSelectionStep = __esm({
44124
44930
  "use strict";
44125
44931
  "use client";
44126
44932
  init_src();
44933
+ init_pricing();
44127
44934
  init_utils5();
44128
44935
  TicketSelectionStep = ({
44129
44936
  event,
@@ -44143,8 +44950,9 @@ var init_TicketSelectionStep = __esm({
44143
44950
  const waitlistEnabled = selectedModeAvailability?.waitlistEnabled ?? event?.waitlistEnabled ?? false;
44144
44951
  const isSoldOut = availableSpots === 0;
44145
44952
  const canJoinWaitlist = isSoldOut && waitlistEnabled === true;
44146
- const eventPricingMode = event ? publicEventPricingMode(event.pricing) : void 0;
44147
- const eventPricingCurrency = event ? publicEventPricingCurrency(event.pricing) : null;
44953
+ const eventPricing = event ? resolveRuntimeEventPricing(event) : null;
44954
+ const eventPricingMode = eventPricing ? publicEventPricingMode(eventPricing) : void 0;
44955
+ const eventPricingCurrency = eventPricing ? publicEventPricingCurrency(eventPricing) : null;
44148
44956
  const usesTicketTypes = eventPricingMode === "ticket_types" && !canJoinWaitlist;
44149
44957
  const visibleTicketTypes = usesTicketTypes ? getVisibleTicketTypes({
44150
44958
  event,
@@ -44209,7 +45017,7 @@ var init_TicketSelectionStep = __esm({
44209
45017
  const availabilityLabel = getTicketTypeAvailabilityLabel(ticketType);
44210
45018
  const disabled = ticketType.availability.kind === "unavailable";
44211
45019
  const isSelected = selectedTicketTypeId === ticketType.id;
44212
- const priceLabel = ticketType.priceAmount > 0 ? formatPrice(ticketType.priceAmount, eventPricingCurrency ?? DEFAULT_EVENT_CURRENCY) : "Free";
45020
+ const priceLabel = ticketType.priceAmount > 0 ? formatPrice(ticketType.priceAmount, eventPricingCurrency ?? DEFAULT_EVENT_CURRENCY2) : "Free";
44213
45021
  return /* @__PURE__ */ jsx90("div", { role: "listitem", children: /* @__PURE__ */ jsxs62(
44214
45022
  "button",
44215
45023
  {
@@ -45258,18 +46066,8 @@ function EventRegistrationWizardActions(props2) {
45258
46066
  }
45259
46067
  case "select-payment": {
45260
46068
  const { status, canContinue, buttonText } = wizard.paymentStepState;
45261
- const selection = wizard.paymentSelection;
45262
46069
  const handlePaymentContinue = () => {
45263
- if (!selection.method) return;
45264
- if (selection.method === "free") {
45265
- void wizard.handlePaymentSelect("free");
45266
- return;
45267
- }
45268
- void wizard.handlePaymentSelect(
45269
- selection.method,
45270
- selection.passId ?? selection.bundlePassId,
45271
- selection.membershipId ?? selection.bundleMembershipId
45272
- );
46070
+ void wizard.handlePaymentSelect();
45273
46071
  };
45274
46072
  return /* @__PURE__ */ jsxs72("div", { className: "er-actions", children: [
45275
46073
  /* @__PURE__ */ jsx102("button", { type: "button", onClick: () => wizard.setStep("enter-details"), className: "er-back-btn", children: "\u2190 Back" }),
@@ -45310,7 +46108,7 @@ function EventRegistrationSummaryBar(props2) {
45310
46108
  const occurrenceOverrideTitle = wizard.occurrenceContext?.overrides?.title;
45311
46109
  const summaryTitle = occurrenceOverrideTitle ?? summaryEvent?.title ?? "";
45312
46110
  const summaryPrice = wizard.selectedTicketType?.priceAmount ?? wizard.eligibility?.price ?? (summaryEvent ? publicEventScalarPrice(summaryEvent.pricing) : null) ?? 0;
45313
- const summaryCurrency = (summaryEvent ? publicEventPricingCurrency(summaryEvent.pricing) : null) ?? DEFAULT_EVENT_CURRENCY;
46111
+ const summaryCurrency = (summaryEvent ? publicEventPricingCurrency(summaryEvent.pricing) : null) ?? DEFAULT_EVENT_CURRENCY2;
45314
46112
  const teamMemberNames = (summaryEvent?.teamMembers ?? []).map((teamMember) => teamMember.name).filter(Boolean);
45315
46113
  const subtotalCents = Math.max(0, summaryPrice * wizard.ticketsCount);
45316
46114
  const autoAppliedDiscount = wizard.discountCode.trim().length > 0 ? null : wizard.autoAppliedDiscount;
@@ -45333,7 +46131,7 @@ function EventRegistrationSummaryBar(props2) {
45333
46131
  ),
45334
46132
  wizard.paymentSelection.productInterval && /* @__PURE__ */ jsx103("div", { className: "er-summary-bar-product-detail", children: wizard.paymentSelection.productInterval })
45335
46133
  ] }),
45336
- /* @__PURE__ */ jsx103("div", { className: "er-summary-bar-product-price", children: wizard.paymentSelection.method === "pass" || wizard.paymentSelection.method === "membership" ? /* @__PURE__ */ jsx103("span", { className: "er-summary-bar-included", children: "Included" }) : wizard.paymentSelection.productPrice ? formatPrice(wizard.paymentSelection.productPrice, wizard.paymentSelection.productCurrency ?? DEFAULT_EVENT_CURRENCY) : null })
46134
+ /* @__PURE__ */ jsx103("div", { className: "er-summary-bar-product-price", children: wizard.paymentSelection.method === "pass" || wizard.paymentSelection.method === "membership" ? /* @__PURE__ */ jsx103("span", { className: "er-summary-bar-included", children: "Included" }) : wizard.paymentSelection.productPrice ? formatPrice(wizard.paymentSelection.productPrice, wizard.paymentSelection.productCurrency ?? DEFAULT_EVENT_CURRENCY2) : null })
45337
46135
  ] }),
45338
46136
  /* @__PURE__ */ jsxs73("div", { className: "er-summary-bar", children: [
45339
46137
  /* @__PURE__ */ jsxs73("div", { className: "er-summary-bar-info", children: [
@@ -45655,9 +46453,15 @@ var init_useEventRegistrationStripeReturn = __esm({
45655
46453
 
45656
46454
  // ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.ts
45657
46455
  function useEventRegistrationSubmit(options) {
45658
- return async (method, passId, membershipId, selection) => {
46456
+ return async (method, passId, membershipId, selection, submitOptions) => {
45659
46457
  const submitOccurrenceId = options.registrationTarget?.occurrenceId;
45660
- if (!submitOccurrenceId) return;
46458
+ if (!submitOccurrenceId) {
46459
+ return {
46460
+ ok: false,
46461
+ reason: "missing-target",
46462
+ message: "Select an event to continue."
46463
+ };
46464
+ }
45661
46465
  options.setStep("submitting");
45662
46466
  try {
45663
46467
  const isBundle = method === "pass_bundle" || method === "membership_bundle";
@@ -45725,7 +46529,7 @@ function useEventRegistrationSubmit(options) {
45725
46529
  if (checkoutResult.bypassed) {
45726
46530
  options.setRegistrationResult({ status: "confirmed" });
45727
46531
  options.setStep("success");
45728
- return;
46532
+ return { ok: true, outcome: { kind: "completed" } };
45729
46533
  }
45730
46534
  if (!checkoutResult.checkoutUrl) {
45731
46535
  throw new Error("Checkout URL missing");
@@ -45742,8 +46546,17 @@ function useEventRegistrationSubmit(options) {
45742
46546
  paymentSelection: selectionSnapshot
45743
46547
  });
45744
46548
  }
46549
+ if (submitOptions?.redirect === "manual") {
46550
+ return {
46551
+ ok: true,
46552
+ outcome: {
46553
+ kind: "checkout_redirect",
46554
+ checkoutUrl: checkoutResult.checkoutUrl
46555
+ }
46556
+ };
46557
+ }
45745
46558
  window.location.href = checkoutResult.checkoutUrl;
45746
- return;
46559
+ return { ok: true, outcome: { kind: "checkout_redirect", checkoutUrl: checkoutResult.checkoutUrl } };
45747
46560
  }
45748
46561
  if (result.alreadyRegistered) {
45749
46562
  const title = result.status === "waitlist" ? "Already waitlisted" : "Already registered";
@@ -45765,9 +46578,16 @@ function useEventRegistrationSubmit(options) {
45765
46578
  options.setRegistrationResult({ status: result.status });
45766
46579
  }
45767
46580
  options.setStep("success");
46581
+ return { ok: true, outcome: { kind: "completed" } };
45768
46582
  } catch (error) {
45769
- options.setErrorMessage(error instanceof Error ? error.message : "Registration failed");
46583
+ const message = error instanceof Error ? error.message : "Registration failed";
46584
+ options.setErrorMessage(message);
45770
46585
  options.setStep("error");
46586
+ return {
46587
+ ok: false,
46588
+ reason: "submission-failed",
46589
+ message
46590
+ };
45771
46591
  }
45772
46592
  };
45773
46593
  }
@@ -45822,7 +46642,7 @@ function resolveEventRequiresPayment(input) {
45822
46642
  if (!input.event) {
45823
46643
  return false;
45824
46644
  }
45825
- return publicEventPricingType(input.event.pricing) !== "free";
46645
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
45826
46646
  }
45827
46647
  function resolveDiscountContext(input) {
45828
46648
  const selection = input.paymentSelection.method ? input.paymentSelection : null;
@@ -45852,6 +46672,7 @@ var init_registrationDerivations = __esm({
45852
46672
  "../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts"() {
45853
46673
  "use strict";
45854
46674
  init_src();
46675
+ init_pricing();
45855
46676
  }
45856
46677
  });
45857
46678
 
@@ -45859,6 +46680,7 @@ var init_registrationDerivations = __esm({
45859
46680
  function toRegistrationEvent(event) {
45860
46681
  return {
45861
46682
  ...event,
46683
+ pricing: resolveRuntimeEventPricing(event),
45862
46684
  publicEventId: event.id,
45863
46685
  registrationOccurrenceId: event.occurrenceId
45864
46686
  };
@@ -45869,6 +46691,7 @@ function toRegistrationEvents(events) {
45869
46691
  var init_registrationEventAdapter = __esm({
45870
46692
  "../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts"() {
45871
46693
  "use strict";
46694
+ init_pricing();
45872
46695
  }
45873
46696
  });
45874
46697
 
@@ -46091,7 +46914,7 @@ function useEventRegistrationWizard(options) {
46091
46914
  );
46092
46915
  const ticketTypeSelectionRequired = useMemo12(() => {
46093
46916
  const event = selectedEvent ?? preSelectedEvent;
46094
- if (!event || publicEventPricingMode(event.pricing) !== "ticket_types") {
46917
+ if (!event || publicEventPricingMode(resolveRuntimeEventPricing(event)) !== "ticket_types") {
46095
46918
  return false;
46096
46919
  }
46097
46920
  if ((event.deliveryMode ?? "in_person") === "hybrid" && !selectedAttendanceMode) {
@@ -46106,7 +46929,7 @@ function useEventRegistrationWizard(options) {
46106
46929
  );
46107
46930
  useEffect17(() => {
46108
46931
  const event = selectedEvent ?? preSelectedEvent;
46109
- if (!event || publicEventPricingMode(event.pricing) !== "ticket_types") {
46932
+ if (!event || publicEventPricingMode(resolveRuntimeEventPricing(event)) !== "ticket_types") {
46110
46933
  if (selectedTicketTypeId !== null) {
46111
46934
  setSelectedTicketTypeId(null);
46112
46935
  }
@@ -46179,30 +47002,45 @@ function useEventRegistrationWizard(options) {
46179
47002
  setStep("error");
46180
47003
  return;
46181
47004
  }
46182
- if (eligibility?.canJoinWaitlist) {
46183
- await handleSubmit("free", void 0, void 0, paymentSelection.method ? paymentSelection : void 0);
46184
- return;
46185
- }
46186
- if (paymentSelection.method === "pass" && paymentSelection.passId) {
46187
- await handleSubmit("pass", paymentSelection.passId, void 0, paymentSelection);
47005
+ const shouldCollectPayment = !eligibility?.canJoinWaitlist && requiresPaymentStep({ eventRequiresPayment, paymentSelection });
47006
+ if (shouldCollectPayment) {
47007
+ setStep("select-payment");
46188
47008
  return;
46189
47009
  }
46190
- if (paymentSelection.method === "membership" && paymentSelection.membershipId) {
46191
- await handleSubmit("membership", void 0, paymentSelection.membershipId, paymentSelection);
47010
+ const submitPlan = resolveEventRegistrationSubmitPlan({
47011
+ paymentSelection,
47012
+ eventRequiresPayment,
47013
+ canJoinWaitlist: eligibility?.canJoinWaitlist
47014
+ });
47015
+ if (!submitPlan.ok) {
47016
+ setErrorMessage(submitPlan.message);
47017
+ setStep("error");
46192
47018
  return;
46193
47019
  }
46194
- if (paymentSelection.method === "free" || !eventRequiresPayment) {
46195
- await handleSubmit("free", void 0, void 0, paymentSelection.method ? paymentSelection : void 0);
47020
+ await handleSubmit(
47021
+ submitPlan.args.method,
47022
+ submitPlan.args.passId,
47023
+ submitPlan.args.membershipId,
47024
+ submitPlan.args.selection
47025
+ );
47026
+ };
47027
+ const handlePaymentSelect = async () => {
47028
+ const submitPlan = resolveEventRegistrationSubmitPlan({
47029
+ paymentSelection,
47030
+ eventRequiresPayment,
47031
+ canJoinWaitlist: eligibility?.canJoinWaitlist
47032
+ });
47033
+ if (!submitPlan.ok) {
47034
+ setErrorMessage(submitPlan.message);
47035
+ setStep("error");
46196
47036
  return;
46197
47037
  }
46198
- if (requiresPaymentStep({ eventRequiresPayment: true, paymentSelection })) {
46199
- setStep("select-payment");
46200
- } else {
46201
- await handleSubmit("stripe", void 0, void 0, paymentSelection.method ? paymentSelection : void 0);
46202
- }
46203
- };
46204
- const handlePaymentSelect = async (method, passId, membershipId) => {
46205
- await handleSubmit(method, passId, membershipId, paymentSelection.method ? paymentSelection : void 0);
47038
+ await handleSubmit(
47039
+ submitPlan.args.method,
47040
+ submitPlan.args.passId,
47041
+ submitPlan.args.membershipId,
47042
+ submitPlan.args.selection
47043
+ );
46206
47044
  };
46207
47045
  const handleUseCardInsteadOfPass = () => {
46208
47046
  dispatchFlow({ type: "use-card-instead-of-pass" });
@@ -46226,7 +47064,7 @@ function useEventRegistrationWizard(options) {
46226
47064
  const discountSubtotalCents = useMemo12(() => {
46227
47065
  if (discountContext?.type !== "event") return void 0;
46228
47066
  const event = selectedEvent ?? preSelectedEvent;
46229
- const eventPriceCents = selectedTicketType?.priceAmount ?? eligibility?.price ?? (event ? publicEventScalarPrice(event.pricing) : null) ?? 0;
47067
+ const eventPriceCents = selectedTicketType?.priceAmount ?? eligibility?.price ?? (event ? publicEventScalarPrice(resolveRuntimeEventPricing(event)) : null) ?? 0;
46230
47068
  return Math.max(0, eventPriceCents * ticketsCount);
46231
47069
  }, [discountContext, selectedTicketType, eligibility, selectedEvent, preSelectedEvent, ticketsCount]);
46232
47070
  const discountUi = useDiscountCodeUi({ api, discountContext, subtotalCents: discountSubtotalCents });
@@ -46314,6 +47152,7 @@ function useEventRegistrationWizard(options) {
46314
47152
  altchaSolution,
46315
47153
  setAltchaSolution,
46316
47154
  portalAuthState,
47155
+ portalProfile,
46317
47156
  showMagicLinkModal,
46318
47157
  setShowMagicLinkModal,
46319
47158
  handleLogout,
@@ -46328,6 +47167,7 @@ function useEventRegistrationWizard(options) {
46328
47167
  eligibilityError,
46329
47168
  existingRegistration: existingRegistrationResult.registration,
46330
47169
  existingRegistrationLoading: existingRegistrationResult.isLoading,
47170
+ existingRegistrationState: existingRegistrationResult.state,
46331
47171
  hasEligibility,
46332
47172
  hasMembershipEligibility,
46333
47173
  requireGuestDetails,
@@ -46358,6 +47198,7 @@ var init_useEventRegistrationWizard = __esm({
46358
47198
  init_src();
46359
47199
  init_api();
46360
47200
  init_events();
47201
+ init_pricing();
46361
47202
  init_validation3();
46362
47203
  init_hooks();
46363
47204
  init_portalLogout();
@@ -46367,6 +47208,7 @@ var init_useEventRegistrationWizard = __esm({
46367
47208
  init_useDiscountCodeUi();
46368
47209
  init_utils5();
46369
47210
  init_registrationStateMachine();
47211
+ init_event_registration_headless_state();
46370
47212
  init_registrationDerivations();
46371
47213
  init_registrationEventAdapter();
46372
47214
  }
@@ -46493,7 +47335,7 @@ function EventRegistrationWizard(props2) {
46493
47335
  spamProtectionEnabled,
46494
47336
  supportEmail
46495
47337
  } = props2;
46496
- const maxTicketsNum = parseInt(maxTickets, 10) || 5;
47338
+ const maxTicketsNum = normalizeEventRegistrationMaxTickets(maxTickets);
46497
47339
  const showSpamProtection = spamProtectionEnabled ?? isSpamProtectionEnabled();
46498
47340
  const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
46499
47341
  const wizard = useEventRegistrationWizard({
@@ -46506,7 +47348,7 @@ function EventRegistrationWizard(props2) {
46506
47348
  if (wizard.scopedEvents.length === 0 && !wizard.occurrenceContext) {
46507
47349
  return /* @__PURE__ */ jsx105("div", { id: EVENT_REGISTRATION_ANCHOR_ID, className: `event-registration ${className || ""}`, "data-block": "event-registration", children: /* @__PURE__ */ jsx105("div", { className: "er-empty", children: /* @__PURE__ */ jsx105("p", { className: "er-empty__text", children: "No events available for registration." }) }) });
46508
47350
  }
46509
- const allowedStatuses = wizard.api.config.isPreview ? ["active", "draft"] : ["active"];
47351
+ const allowedStatuses = getRegistrableStatuses(wizard.api.config.isPreview);
46510
47352
  const hasRegistrableEvents = wizard.scopedEvents.some((event) => !event.status || allowedStatuses.includes(event.status));
46511
47353
  if (!hasRegistrableEvents && !wizard.occurrenceContext) {
46512
47354
  return /* @__PURE__ */ jsx105("div", { id: EVENT_REGISTRATION_ANCHOR_ID, className: `event-registration ${className || ""}`, "data-block": "event-registration", children: /* @__PURE__ */ jsx105("div", { className: "er-empty", children: /* @__PURE__ */ jsx105("p", { className: "er-empty__text", children: "Registration is not currently available for this event." }) }) });
@@ -46637,6 +47479,7 @@ var init_EventRegistrationWizard = __esm({
46637
47479
  init_StepIndicator2();
46638
47480
  init_wizardSteps2();
46639
47481
  init_registrationStateMachine();
47482
+ init_event_registration_headless_state();
46640
47483
  init_EventRegistrationWizardContent();
46641
47484
  init_EventRegistrationWizardActions();
46642
47485
  init_EventRegistrationSummaryBar();
@@ -56889,6 +57732,46 @@ var ENDPOINT_DEFINITIONS = {
56889
57732
  auth: "user",
56890
57733
  responseKind: "json"
56891
57734
  },
57735
+ listEntrySlotBlocks: {
57736
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
57737
+ method: "GET",
57738
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
57739
+ auth: "user",
57740
+ responseKind: "json",
57741
+ errors: ["resource:not_found"]
57742
+ },
57743
+ listEntryPageContentSlots: {
57744
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
57745
+ method: "GET",
57746
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
57747
+ auth: "user",
57748
+ responseKind: "json",
57749
+ errors: ["resource:not_found"]
57750
+ },
57751
+ createEntrySlotBlock: {
57752
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
57753
+ method: "POST",
57754
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
57755
+ auth: "user",
57756
+ responseKind: "json",
57757
+ errors: ["validation:invalid_input", "resource:not_found"]
57758
+ },
57759
+ reorderEntrySlotBlocks: {
57760
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
57761
+ method: "POST",
57762
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
57763
+ auth: "user",
57764
+ responseKind: "json",
57765
+ errors: ["validation:invalid_input", "resource:not_found"]
57766
+ },
57767
+ deleteEntrySlotBlock: {
57768
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
57769
+ method: "DELETE",
57770
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
57771
+ auth: "user",
57772
+ responseKind: "json",
57773
+ errors: ["resource:not_found"]
57774
+ },
56892
57775
  createBlock: {
56893
57776
  path: "/sites/{siteId}/pages/{pageId}/blocks",
56894
57777
  method: "POST",
@@ -61551,6 +62434,33 @@ function declareNoBlockDesignCapability(reason) {
61551
62434
 
61552
62435
  // ../blocks/src/system/blocks/hero.ts
61553
62436
  init_boxStyles();
62437
+
62438
+ // ../blocks/src/system/fields/imageShape.ts
62439
+ var standardImageShapeOptions = [
62440
+ { value: "default", label: "Default" },
62441
+ { value: "square", label: "Square corners" },
62442
+ { value: "rounded", label: "Rounded corners" },
62443
+ { value: "circle", label: "Circle" },
62444
+ { value: "arch", label: "Arch" }
62445
+ ];
62446
+ function createImageShapeField(options = {}) {
62447
+ return {
62448
+ id: options.id ?? "imageShape",
62449
+ type: "select",
62450
+ label: options.label ?? "Image shape",
62451
+ ...options.description ? { description: options.description } : {},
62452
+ required: false,
62453
+ defaultValue: options.defaultValue ?? "default",
62454
+ multiple: false,
62455
+ options: [...standardImageShapeOptions],
62456
+ ui: {
62457
+ intent: options.uiIntent ?? "display",
62458
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
62459
+ }
62460
+ };
62461
+ }
62462
+
62463
+ // ../blocks/src/system/blocks/hero.ts
61554
62464
  init_fragments();
61555
62465
  init_styledSection();
61556
62466
  init_defineBlock();
@@ -61618,7 +62528,18 @@ function heroSplitImagePane() {
61618
62528
  return stack(
61619
62529
  {
61620
62530
  gap: "none",
61621
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
62531
+ className: {
62532
+ $bind: {
62533
+ from: "content.imageShape",
62534
+ transforms: [
62535
+ {
62536
+ id: "ui.imageShapeClassName",
62537
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
62538
+ }
62539
+ ],
62540
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
62541
+ }
62542
+ },
61622
62543
  style: {
61623
62544
  minHeight: "clamp(18rem, 36vw, 34rem)"
61624
62545
  }
@@ -61736,6 +62657,12 @@ var heroConfig = {
61736
62657
  label: "Content card",
61737
62658
  renderInHeader: true,
61738
62659
  intent: "style"
62660
+ }),
62661
+ createImageShapeField({
62662
+ id: "imageShape",
62663
+ label: "Image shape",
62664
+ defaultValue: "default",
62665
+ uiIntent: "display"
61739
62666
  })
61740
62667
  ],
61741
62668
  layout: classicLayout,
@@ -61750,6 +62677,15 @@ var heroConfig = {
61750
62677
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
61751
62678
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
61752
62679
  icon: "Sparkles",
62680
+ previewCustomize: {
62681
+ quickFieldPriority: [
62682
+ "titleSize",
62683
+ "contentAlignment",
62684
+ "contentMaxWidth",
62685
+ "verticalAlignment",
62686
+ "imageShape"
62687
+ ]
62688
+ },
61753
62689
  styleTokens: {
61754
62690
  typography: "display",
61755
62691
  spacing: "xl"
@@ -61769,7 +62705,8 @@ var standardAspectRatioOptions = [
61769
62705
  { value: "16/9", label: "16:9 (Landscape)" },
61770
62706
  { value: "4/3", label: "4:3 (Standard)" },
61771
62707
  { value: "1/1", label: "1:1 (Square)" },
61772
- { value: "3/4", label: "3:4 (Portrait)" }
62708
+ { value: "3/4", label: "3:4 (Portrait)" },
62709
+ { value: "9/16", label: "9:16 (Tall portrait)" }
61773
62710
  ];
61774
62711
  function createAspectRatioField(options = {}) {
61775
62712
  return {
@@ -62743,6 +63680,263 @@ var formBlockDefinition = {
62743
63680
  runtime: formBlockRuntime
62744
63681
  };
62745
63682
 
63683
+ // ../blocks/src/system/blocks/contact-newsletter.ts
63684
+ init_fragments();
63685
+ init_styledSection();
63686
+ init_builder2();
63687
+ init_defineBlock();
63688
+ init_api_bindings();
63689
+ var contactNewsletterLayout = styledSection({
63690
+ children: sectionContainer([
63691
+ el(
63692
+ "div",
63693
+ { className: "contact-newsletter-grid" },
63694
+ [
63695
+ el(
63696
+ "div",
63697
+ { className: "contact-newsletter-column contact-newsletter-contact" },
63698
+ [
63699
+ el(
63700
+ "div",
63701
+ { className: "contact-newsletter-copy" },
63702
+ [
63703
+ text(
63704
+ {
63705
+ as: "h2",
63706
+ className: "form-copy-title"
63707
+ },
63708
+ when("contactTitle"),
63709
+ bind("contactTitle")
63710
+ ),
63711
+ richText(
63712
+ {
63713
+ className: "form-copy-intro rb-prose rb-max-w-none"
63714
+ },
63715
+ when("contactIntro"),
63716
+ bind("contactIntro")
63717
+ )
63718
+ ]
63719
+ ),
63720
+ el(
63721
+ "form",
63722
+ withApiBindings({
63723
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
63724
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
63725
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
63726
+ }),
63727
+ [],
63728
+ bind("data.form")
63729
+ )
63730
+ ]
63731
+ ),
63732
+ el(
63733
+ "div",
63734
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
63735
+ [
63736
+ el(
63737
+ "div",
63738
+ { className: "contact-newsletter-copy" },
63739
+ [
63740
+ text(
63741
+ {
63742
+ as: "h2",
63743
+ className: "newsletter-copy-title"
63744
+ },
63745
+ when("newsletterTitle"),
63746
+ bind("newsletterTitle")
63747
+ ),
63748
+ richText(
63749
+ {
63750
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
63751
+ },
63752
+ when("newsletterSubtitle"),
63753
+ bind("newsletterSubtitle")
63754
+ )
63755
+ ]
63756
+ ),
63757
+ el(
63758
+ "newsletter-form",
63759
+ withApiBindings({
63760
+ listId: { $bind: { from: "listId" } },
63761
+ preset: { $bind: { from: "preset" } },
63762
+ includePhone: { $bind: { from: "includePhone" } },
63763
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
63764
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
63765
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
63766
+ tags: { $bind: { from: "newsletterTags" } },
63767
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
63768
+ }),
63769
+ []
63770
+ )
63771
+ ]
63772
+ )
63773
+ ]
63774
+ )
63775
+ ], {
63776
+ className: "contact-newsletter-container"
63777
+ }),
63778
+ baseClass: "",
63779
+ spacing: "medium",
63780
+ background: "surface"
63781
+ });
63782
+ var contactNewsletterManifest = createBlockManifest({
63783
+ id: "block.contact-newsletter",
63784
+ title: "Contact + Newsletter",
63785
+ titleSource: "contactTitle",
63786
+ description: "Two-column newsletter signup and contact form section.",
63787
+ category: "interactive",
63788
+ layout: contactNewsletterLayout,
63789
+ defaultVariant: "default",
63790
+ variants: {
63791
+ default: contactNewsletterLayout
63792
+ },
63793
+ variantOptions: {
63794
+ default: {
63795
+ label: "Two column",
63796
+ description: "Newsletter and contact form side by side.",
63797
+ icon: "Columns2"
63798
+ }
63799
+ },
63800
+ additionalFields: [
63801
+ {
63802
+ id: "newsletterTitle",
63803
+ type: "text",
63804
+ label: "Newsletter title",
63805
+ defaultValue: "Stay connected"
63806
+ },
63807
+ {
63808
+ id: "newsletterSubtitle",
63809
+ type: "richText",
63810
+ label: "Newsletter intro"
63811
+ },
63812
+ {
63813
+ id: "listId",
63814
+ type: "reference",
63815
+ label: "Newsletter list",
63816
+ description: "Select the list new subscribers should be added to.",
63817
+ required: true,
63818
+ referenceKind: "newsletterList",
63819
+ allowManualEntry: false,
63820
+ ui: { intent: "behavior" }
63821
+ },
63822
+ {
63823
+ id: "preset",
63824
+ type: "select",
63825
+ label: "Newsletter fields",
63826
+ defaultValue: "emailOnly",
63827
+ ui: { intent: "display" },
63828
+ options: [
63829
+ { value: "emailOnly", label: "Email only" },
63830
+ { value: "emailName", label: "Email + Name" },
63831
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
63832
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
63833
+ ]
63834
+ },
63835
+ {
63836
+ id: "includePhone",
63837
+ type: "boolean",
63838
+ label: "Include phone field",
63839
+ defaultValue: false,
63840
+ ui: { intent: "display" }
63841
+ },
63842
+ {
63843
+ id: "newsletterButtonLabel",
63844
+ type: "text",
63845
+ label: "Newsletter button label",
63846
+ defaultValue: "Subscribe",
63847
+ ui: { intent: "display" }
63848
+ },
63849
+ {
63850
+ id: "newsletterSuccessMessage",
63851
+ type: "text",
63852
+ label: "Newsletter success message",
63853
+ defaultValue: "Thanks for subscribing!",
63854
+ ui: { intent: "behavior" }
63855
+ },
63856
+ {
63857
+ id: "newsletterPrivacyNote",
63858
+ type: "text",
63859
+ label: "Privacy note",
63860
+ ui: { intent: "display" }
63861
+ },
63862
+ {
63863
+ id: "newsletterTags",
63864
+ type: "text",
63865
+ label: "Newsletter tags",
63866
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
63867
+ ui: { intent: "behavior" }
63868
+ },
63869
+ {
63870
+ id: "contactTitle",
63871
+ type: "text",
63872
+ label: "Contact title",
63873
+ defaultValue: "Get in touch"
63874
+ },
63875
+ {
63876
+ id: "contactIntro",
63877
+ type: "richText",
63878
+ label: "Contact intro"
63879
+ },
63880
+ {
63881
+ id: "formSlug",
63882
+ type: "reference",
63883
+ label: "Contact form",
63884
+ description: "Pick a saved form to render.",
63885
+ required: true,
63886
+ referenceKind: "form",
63887
+ allowManualEntry: false,
63888
+ ui: { intent: "behavior" }
63889
+ },
63890
+ {
63891
+ id: "contactSubmitLabel",
63892
+ type: "text",
63893
+ label: "Contact button label",
63894
+ defaultValue: "Send message",
63895
+ ui: { intent: "display" }
63896
+ },
63897
+ {
63898
+ id: "contactSuccessMessage",
63899
+ type: "text",
63900
+ label: "Contact success message",
63901
+ defaultValue: "Thanks - we received your message.",
63902
+ ui: { intent: "behavior" }
63903
+ }
63904
+ ],
63905
+ styleTokens: {
63906
+ background: "surface",
63907
+ typography: "body",
63908
+ spacing: "md"
63909
+ },
63910
+ behaviours: {
63911
+ supportsThemeSwitching: true,
63912
+ inlineEditing: true,
63913
+ animation: false,
63914
+ paletteHidden: false
63915
+ },
63916
+ tags: [
63917
+ "contact",
63918
+ "newsletter",
63919
+ "signup",
63920
+ "email",
63921
+ "form",
63922
+ "lead-capture"
63923
+ ],
63924
+ icon: "MailPlus"
63925
+ });
63926
+ var contactNewsletterBlockDefinition = {
63927
+ manifest: contactNewsletterManifest,
63928
+ dataSchemas: { form: formDataSchema.optional() },
63929
+ dataLoaders: {
63930
+ form: {
63931
+ endpoint: "getPublicFormById",
63932
+ params: {
63933
+ formSlug: { $bind: { from: "formSlug" } }
63934
+ },
63935
+ mode: "server"
63936
+ }
63937
+ }
63938
+ };
63939
+
62746
63940
  // ../blocks/src/system/blocks/faq.ts
62747
63941
  init_fragments();
62748
63942
  init_styledSection();
@@ -62987,6 +64181,7 @@ var joinClasses3 = (parts) => parts.filter(
62987
64181
  ).join(" ").replace(/\s+/g, " ").trim();
62988
64182
  var eyebrowTreatmentClassMap = {
62989
64183
  plain: "",
64184
+ accent: "rb-eyebrow-treatment-accent",
62990
64185
  pill: "rb-eyebrow-treatment-pill",
62991
64186
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
62992
64187
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -63013,6 +64208,13 @@ var imageGalleryCornerClassMap = {
63013
64208
  "2xl": "rb-rounded-2xl",
63014
64209
  "3xl": "rb-rounded-3xl"
63015
64210
  };
64211
+ var imageShapeClassMap = {
64212
+ default: "",
64213
+ square: "rb-media-shape-square",
64214
+ rounded: "rb-media-shape-rounded",
64215
+ circle: "rb-media-shape-circle",
64216
+ arch: "rb-media-shape-arch"
64217
+ };
63016
64218
  var parseRatio = (raw) => {
63017
64219
  if (typeof raw !== "string") return null;
63018
64220
  const value = raw.trim();
@@ -63157,6 +64359,10 @@ function resolveHeroContentMaxWidth(content) {
63157
64359
  return "default";
63158
64360
  }
63159
64361
  function resolveHeroTypographyScale(content) {
64362
+ const titleSize = readString(content, "titleSize");
64363
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
64364
+ return titleSize;
64365
+ }
63160
64366
  const raw = readHeroLayoutString(
63161
64367
  content,
63162
64368
  "typographyScale",
@@ -63398,6 +64604,16 @@ var uiTransforms = [
63398
64604
  heroGridClassFromVerticalAlignmentTransform,
63399
64605
  imageFragmentClassTransform,
63400
64606
  imageFragmentSizeTransform,
64607
+ {
64608
+ id: "ui.imageShapeClassName",
64609
+ kind: "string",
64610
+ summary: "Apply a constrained media shape class",
64611
+ run: (value, options) => {
64612
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
64613
+ const shape = typeof value === "string" ? value.trim() : "default";
64614
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
64615
+ }
64616
+ },
63401
64617
  conditionalClassTransform,
63402
64618
  twoColumnContainerClassTransform,
63403
64619
  twoColumnFlexBasisTransform,
@@ -64792,6 +66008,21 @@ var siteHeaderManifest = createBlockManifest({
64792
66008
  id: "block.site-header",
64793
66009
  title: "Site Header",
64794
66010
  category: "layout",
66011
+ additionalFields: [
66012
+ {
66013
+ id: "mode",
66014
+ type: "select",
66015
+ label: "Header display",
66016
+ required: false,
66017
+ multiple: false,
66018
+ defaultValue: "default",
66019
+ options: [
66020
+ { value: "default", label: "Show header" },
66021
+ { value: "hidden", label: "Hide header" }
66022
+ ],
66023
+ ui: { intent: "display" }
66024
+ }
66025
+ ],
64795
66026
  // Skip section styles - this block uses theme-based styling
64796
66027
  skipSectionStyles: true,
64797
66028
  // Block manages its own wrapper - enables sticky positioning
@@ -66255,6 +67486,9 @@ var mediaTextManifest = createBlockManifest({
66255
67486
  category: "layout",
66256
67487
  includeContainerStyles: true,
66257
67488
  titleSource: "title",
67489
+ previewCustomize: {
67490
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
67491
+ },
66258
67492
  additionalFields: [
66259
67493
  {
66260
67494
  id: "images",
@@ -66293,7 +67527,7 @@ var mediaTextManifest = createBlockManifest({
66293
67527
  {
66294
67528
  id: "titleAlignment",
66295
67529
  type: "select",
66296
- label: "Title alignment",
67530
+ label: "Content alignment",
66297
67531
  required: false,
66298
67532
  defaultValue: "left",
66299
67533
  multiple: false,
@@ -66351,7 +67585,18 @@ var mediaTextManifest = createBlockManifest({
66351
67585
  transition: "slide"
66352
67586
  },
66353
67587
  ui: { intent: "behavior" }
66354
- }),
67588
+ }).map((field) => ({
67589
+ ...field,
67590
+ ui: {
67591
+ ...field.ui ?? {},
67592
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
67593
+ allOf: [
67594
+ { field: "images", minItems: 2 },
67595
+ { field: "carouselAutoplay", equals: true }
67596
+ ]
67597
+ } : { field: "images", minItems: 2 }
67598
+ }
67599
+ })),
66355
67600
  createAspectRatioField({
66356
67601
  id: "aspectRatio",
66357
67602
  label: "Media aspect ratio",
@@ -66359,6 +67604,12 @@ var mediaTextManifest = createBlockManifest({
66359
67604
  defaultValue: "auto",
66360
67605
  visibleWhen: { field: "images", notEquals: null }
66361
67606
  }),
67607
+ createImageShapeField({
67608
+ id: "imageShape",
67609
+ label: "Media shape",
67610
+ defaultValue: "default",
67611
+ visibleWhen: { field: "images", notEquals: null }
67612
+ }),
66362
67613
  {
66363
67614
  id: "text",
66364
67615
  type: "richText",
@@ -66392,6 +67643,30 @@ var mediaTextManifest = createBlockManifest({
66392
67643
  ...options?.not ? { not: true } : {}
66393
67644
  }
66394
67645
  });
67646
+ const bodyClassNameFromAlignment = {
67647
+ $bind: {
67648
+ from: "content.titleAlignment",
67649
+ transforms: [
67650
+ {
67651
+ id: "ui.bodyClassFromAlignment",
67652
+ options: { base: "rb-prose rb-max-w-none" }
67653
+ }
67654
+ ],
67655
+ fallback: "rb-prose rb-max-w-none"
67656
+ }
67657
+ };
67658
+ const titleClassNameFromAlignment = {
67659
+ $bind: {
67660
+ from: "content.titleAlignment",
67661
+ transforms: [
67662
+ {
67663
+ id: "ui.headingClassFromAlignment",
67664
+ options: { base: "" }
67665
+ }
67666
+ ],
67667
+ fallback: ""
67668
+ }
67669
+ };
66395
67670
  const defaultTextColumn = el("div", {}, [
66396
67671
  styledCard(
66397
67672
  [
@@ -66416,8 +67691,55 @@ var mediaTextManifest = createBlockManifest({
66416
67691
  bind("content.text")
66417
67692
  )
66418
67693
  ]);
67694
+ const bioTextColumn = el(
67695
+ "div",
67696
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
67697
+ [
67698
+ text(
67699
+ {
67700
+ as: "h2",
67701
+ className: titleClassNameFromAlignment
67702
+ },
67703
+ when("content.title"),
67704
+ bind("content.title")
67705
+ ),
67706
+ styledCard(
67707
+ [
67708
+ richText(
67709
+ {
67710
+ className: bodyClassNameFromAlignment
67711
+ },
67712
+ bind("content.text")
67713
+ )
67714
+ ],
67715
+ {
67716
+ stylesFrom: "content._textCardStyles",
67717
+ backgroundFrom: "content._textCardStyles.background"
67718
+ },
67719
+ when("content.wrapTextInCard")
67720
+ ),
67721
+ richText(
67722
+ {
67723
+ className: bodyClassNameFromAlignment
67724
+ },
67725
+ when("content.wrapTextInCard", { not: true }),
67726
+ bind("content.text")
67727
+ )
67728
+ ]
67729
+ );
66419
67730
  const defaultImageCommonProps = {
66420
- className: "rb-w-full rb-h-auto rb-object-cover",
67731
+ className: {
67732
+ $bind: {
67733
+ from: "content.imageShape",
67734
+ transforms: [
67735
+ {
67736
+ id: "ui.imageShapeClassName",
67737
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
67738
+ }
67739
+ ],
67740
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
67741
+ }
67742
+ },
66421
67743
  style: {
66422
67744
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
66423
67745
  }
@@ -66458,6 +67780,27 @@ var mediaTextManifest = createBlockManifest({
66458
67780
  ],
66459
67781
  whenImagesLength(0, { not: true })
66460
67782
  );
67783
+ const bioImagesLayout = el(
67784
+ "div",
67785
+ {},
67786
+ [
67787
+ responsiveTwoColumn({
67788
+ image: el("div", {}, [
67789
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
67790
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
67791
+ ]),
67792
+ text: bioTextColumn,
67793
+ ratioFrom: "content.ratio",
67794
+ imagePositionFrom: "content.imagePosition",
67795
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
67796
+ gapFrom: "content.gap",
67797
+ gapFallback: "comfortable",
67798
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
67799
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
67800
+ })
67801
+ ],
67802
+ whenImagesLength(0, { not: true })
67803
+ );
66461
67804
  const defaultTextOnlyLayout = el(
66462
67805
  "div",
66463
67806
  {},
@@ -66487,7 +67830,45 @@ var mediaTextManifest = createBlockManifest({
66487
67830
  ],
66488
67831
  whenImagesLength(0)
66489
67832
  );
67833
+ const bioTextOnlyLayout = el(
67834
+ "div",
67835
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
67836
+ [
67837
+ text(
67838
+ {
67839
+ as: "h2",
67840
+ className: titleClassNameFromAlignment
67841
+ },
67842
+ when("content.title"),
67843
+ bind("content.title")
67844
+ ),
67845
+ styledCard(
67846
+ [
67847
+ richText(
67848
+ {
67849
+ className: bodyClassNameFromAlignment
67850
+ },
67851
+ bind("content.text")
67852
+ )
67853
+ ],
67854
+ {
67855
+ stylesFrom: "content._textCardStyles",
67856
+ backgroundFrom: "content._textCardStyles.background"
67857
+ },
67858
+ when("content.wrapTextInCard")
67859
+ ),
67860
+ richText(
67861
+ {
67862
+ className: bodyClassNameFromAlignment
67863
+ },
67864
+ when("content.wrapTextInCard", { not: true }),
67865
+ bind("content.text")
67866
+ )
67867
+ ],
67868
+ whenImagesLength(0)
67869
+ );
66490
67870
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
67871
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
66491
67872
  const defaultLayout2 = styledSection({
66492
67873
  children: styledContainer({
66493
67874
  rootType: "stack",
@@ -66496,18 +67877,7 @@ var mediaTextManifest = createBlockManifest({
66496
67877
  text(
66497
67878
  {
66498
67879
  as: "h2",
66499
- className: {
66500
- $bind: {
66501
- from: "content.titleAlignment",
66502
- transforms: [
66503
- {
66504
- id: "ui.headingClassFromAlignment",
66505
- options: { base: "" }
66506
- }
66507
- ],
66508
- fallback: ""
66509
- }
66510
- }
67880
+ className: titleClassNameFromAlignment
66511
67881
  },
66512
67882
  when("content.title"),
66513
67883
  bind("content.title")
@@ -66519,14 +67889,28 @@ var mediaTextManifest = createBlockManifest({
66519
67889
  baseClass: "",
66520
67890
  spacing: "medium"
66521
67891
  });
67892
+ const bioLayout = styledSection({
67893
+ children: styledContainer({
67894
+ rootType: "stack",
67895
+ rootProps: { gap: "lg" },
67896
+ children: [bioInner]
67897
+ }),
67898
+ baseClass: "",
67899
+ spacing: "medium"
67900
+ });
66522
67901
  return {
66523
67902
  layout: defaultLayout2,
66524
67903
  variants: {
66525
- default: defaultLayout2
67904
+ default: defaultLayout2,
67905
+ bio: bioLayout
66526
67906
  },
66527
67907
  defaultVariant: "default",
66528
67908
  variantOptions: {
66529
- default: { label: "Default" }
67909
+ default: { label: "Default" },
67910
+ bio: {
67911
+ label: "Bio",
67912
+ description: "Vertically centered title and copy beside media."
67913
+ }
66530
67914
  }
66531
67915
  };
66532
67916
  })(),
@@ -68475,7 +69859,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
68475
69859
  return keys.length >= 2 ? keys : [];
68476
69860
  }
68477
69861
  function normalizeOfferingsPreviewContentForWrite(value) {
68478
- if (!isRecord5(value)) return null;
69862
+ if (!isRecord7(value)) return null;
68479
69863
  const groupOrderValue = value.groupOrder;
68480
69864
  if (Array.isArray(groupOrderValue)) {
68481
69865
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -68488,7 +69872,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
68488
69872
  return { ...value, groupOrder: [] };
68489
69873
  }
68490
69874
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
68491
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
69875
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord7) : []
68492
69876
  );
68493
69877
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
68494
69878
  }
@@ -68542,7 +69926,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
68542
69926
  }
68543
69927
  return keys;
68544
69928
  }
68545
- function isRecord5(value) {
69929
+ function isRecord7(value) {
68546
69930
  return typeof value === "object" && value !== null && !Array.isArray(value);
68547
69931
  }
68548
69932
  function mergeOrderedKeysWithDefaults(orderedKeys, defaultKeys) {
@@ -69004,7 +70388,7 @@ function isOfferingsPreviewItemLimit(value) {
69004
70388
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
69005
70389
  }
69006
70390
  function normalizeOfferingsPreviewGroupOverride(value) {
69007
- if (!isRecord6(value)) return [];
70391
+ if (!isRecord8(value)) return [];
69008
70392
  const override = {};
69009
70393
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
69010
70394
  override.sourceKey = value.sourceKey;
@@ -69036,12 +70420,12 @@ function isButtonVariant(value) {
69036
70420
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
69037
70421
  }
69038
70422
  function normalizeCardStylesContent(value) {
69039
- return isRecord6(value) || value === null ? value : void 0;
70423
+ return isRecord8(value) || value === null ? value : void 0;
69040
70424
  }
69041
70425
  function normalizeSectionStylesContent(value) {
69042
- return isRecord6(value) || value === null ? value : void 0;
70426
+ return isRecord8(value) || value === null ? value : void 0;
69043
70427
  }
69044
- function isRecord6(value) {
70428
+ function isRecord8(value) {
69045
70429
  return typeof value === "object" && value !== null && !Array.isArray(value);
69046
70430
  }
69047
70431
 
@@ -71954,11 +73338,13 @@ var heroImageSurfaceMotions = [
71954
73338
  ];
71955
73339
  var standardEyebrowTreatments = [
71956
73340
  "plain",
73341
+ "accent",
71957
73342
  "pill",
71958
73343
  "accent-pill"
71959
73344
  ];
71960
73345
  var animatedEyebrowTreatments = [
71961
73346
  "plain",
73347
+ "accent",
71962
73348
  "pill",
71963
73349
  "accent-pill",
71964
73350
  "pill-bounce",
@@ -72259,6 +73645,17 @@ var systemBlockDefinitionsRaw = [
72259
73645
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
72260
73646
  ]
72261
73647
  })),
73648
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
73649
+ flow: conversionFlow,
73650
+ layoutProfiles: [
73651
+ layoutProfile({
73652
+ variantKey: "default",
73653
+ family: "split",
73654
+ weight: "featured",
73655
+ bias: "soft"
73656
+ })
73657
+ ]
73658
+ })),
72262
73659
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
72263
73660
  sectionSurfaces: "supported",
72264
73661
  contentFrames: ["plain", "panel"],
@@ -72350,6 +73747,12 @@ var systemBlockDefinitionsRaw = [
72350
73747
  family: "media-text",
72351
73748
  weight: "featured",
72352
73749
  bias: "soft"
73750
+ }),
73751
+ layoutProfile({
73752
+ variantKey: "bio",
73753
+ family: "media-text",
73754
+ weight: "featured",
73755
+ bias: "soft"
72353
73756
  })
72354
73757
  ]
72355
73758
  })),
@@ -73176,7 +74579,7 @@ import React4 from "react";
73176
74579
  init_src();
73177
74580
  var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
73178
74581
  function coerceLinkedContentEntriesPayload(payload) {
73179
- if (!isRecord7(payload)) return payload;
74582
+ if (!isRecord9(payload)) return payload;
73180
74583
  const response = payload;
73181
74584
  if (!Array.isArray(response.entries)) return payload;
73182
74585
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -73184,16 +74587,16 @@ function coerceLinkedContentEntriesPayload(payload) {
73184
74587
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
73185
74588
  }
73186
74589
  function getLinkedContentEntryMeta(value) {
73187
- if (!isRecord7(value)) return null;
74590
+ if (!isRecord9(value)) return null;
73188
74591
  const candidate = value[LINKED_CONTENT_ENTRY_META_KEY];
73189
74592
  return isLinkedContentEntryMeta(candidate) ? candidate : null;
73190
74593
  }
73191
74594
  function buildLinkedContentEditTarget(input) {
73192
74595
  const { entry, sourceBlockId, sourceBlockKind, itemIndex } = input;
73193
- if (!isRecord7(entry)) return null;
74596
+ if (!isRecord9(entry)) return null;
73194
74597
  const meta = getLinkedContentEntryMeta(entry);
73195
74598
  if (!meta || meta.support.kind !== "supported") return null;
73196
- const content = isRecord7(entry.content) ? entry.content : {};
74599
+ const content = isRecord9(entry.content) ? entry.content : {};
73197
74600
  return {
73198
74601
  kind: "linked-content-entry",
73199
74602
  entryId: meta.entryId,
@@ -73243,12 +74646,12 @@ function resolveLinkedEntryInlineFieldEligibility(input) {
73243
74646
  };
73244
74647
  }
73245
74648
  function enrichLinkedContentEntry(entry, contentType) {
73246
- if (!isRecord7(entry)) return entry;
74649
+ if (!isRecord9(entry)) return entry;
73247
74650
  const entryId = typeof entry.id === "string" ? entry.id : null;
73248
74651
  if (!entryId) return entry;
73249
74652
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
73250
74653
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
73251
- const content = isRecord7(entry.content) ? entry.content : {};
74654
+ const content = isRecord9(entry.content) ? entry.content : {};
73252
74655
  const meta = {
73253
74656
  kind: "linked-content-entry",
73254
74657
  entryId,
@@ -73344,7 +74747,7 @@ function capitalize(value) {
73344
74747
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
73345
74748
  }
73346
74749
  function parsePublicContentTypeMeta(value) {
73347
- if (!isRecord7(value)) return null;
74750
+ if (!isRecord9(value)) return null;
73348
74751
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
73349
74752
  return {
73350
74753
  key: value.key,
@@ -73354,7 +74757,7 @@ function parsePublicContentTypeMeta(value) {
73354
74757
  };
73355
74758
  }
73356
74759
  function parsePublicContentTypeLinkedEntryEditing(value) {
73357
- if (!isRecord7(value) || typeof value.kind !== "string") return null;
74760
+ if (!isRecord9(value) || typeof value.kind !== "string") return null;
73358
74761
  switch (value.kind) {
73359
74762
  case "generic":
73360
74763
  return { kind: "generic" };
@@ -73368,7 +74771,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
73368
74771
  }
73369
74772
  }
73370
74773
  function parsePublicContentTypeFieldMeta(value) {
73371
- if (!isRecord7(value)) return [];
74774
+ if (!isRecord9(value)) return [];
73372
74775
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
73373
74776
  return [{
73374
74777
  id: value.id,
@@ -73383,14 +74786,14 @@ function parseStringArray(value) {
73383
74786
  return value.filter((item) => typeof item === "string");
73384
74787
  }
73385
74788
  function isLinkedContentEntryMeta(value) {
73386
- if (!isRecord7(value)) return false;
74789
+ if (!isRecord9(value)) return false;
73387
74790
  if (value.kind !== "linked-content-entry") return false;
73388
74791
  if (typeof value.entryId !== "string") return false;
73389
74792
  if (typeof value.contentTypeKey !== "string") return false;
73390
74793
  if (typeof value.contentTypeLabel !== "string") return false;
73391
74794
  if (typeof value.title !== "string") return false;
73392
74795
  if (!(value.optimisticHash === null || typeof value.optimisticHash === "string")) return false;
73393
- if (!isRecord7(value.contentType)) return false;
74796
+ if (!isRecord9(value.contentType)) return false;
73394
74797
  if (!isLinkedEntryFieldSourceArray(value.fieldSources)) return false;
73395
74798
  return isLinkedContentEditSupport(value.support);
73396
74799
  }
@@ -73398,7 +74801,7 @@ function isLinkedEntryFieldSourceArray(value) {
73398
74801
  return Array.isArray(value) && value.every(isLinkedEntryFieldSource);
73399
74802
  }
73400
74803
  function isLinkedEntryFieldSource(value) {
73401
- if (!isRecord7(value)) return false;
74804
+ if (!isRecord9(value)) return false;
73402
74805
  if (typeof value.displayPath !== "string") return false;
73403
74806
  switch (value.kind) {
73404
74807
  case "content-field":
@@ -73424,7 +74827,7 @@ function isLinkedEntryInlineFieldReadOnlyReason(value) {
73424
74827
  }
73425
74828
  }
73426
74829
  function isLinkedContentEditSupport(value) {
73427
- if (!isRecord7(value) || typeof value.kind !== "string") return false;
74830
+ if (!isRecord9(value) || typeof value.kind !== "string") return false;
73428
74831
  switch (value.kind) {
73429
74832
  case "supported":
73430
74833
  return true;
@@ -73436,7 +74839,7 @@ function isLinkedContentEditSupport(value) {
73436
74839
  return false;
73437
74840
  }
73438
74841
  }
73439
- function isRecord7(value) {
74842
+ function isRecord9(value) {
73440
74843
  return typeof value === "object" && value !== null && !Array.isArray(value);
73441
74844
  }
73442
74845
 
@@ -76306,6 +77709,9 @@ var EventListingSSR = (props2) => {
76306
77709
  // ../blocks/src/system/runtime/nodes/event-registration.server.tsx
76307
77710
  init_event_registration_interactive();
76308
77711
  import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
77712
+ function cx(...classes) {
77713
+ return classes.filter((className) => Boolean(className)).join(" ");
77714
+ }
76309
77715
  function EventRegistrationSSR({
76310
77716
  blockId,
76311
77717
  siteId,
@@ -76348,6 +77754,7 @@ function EventRegistrationSSR({
76348
77754
  stage,
76349
77755
  supportEmail
76350
77756
  });
77757
+ const display = islandProps.render.display;
76351
77758
  return /* @__PURE__ */ jsxs34(
76352
77759
  "div",
76353
77760
  {
@@ -76359,12 +77766,52 @@ function EventRegistrationSSR({
76359
77766
  ...getIslandRootProps("event-registration", blockId),
76360
77767
  children: [
76361
77768
  /* @__PURE__ */ jsx48(IslandPropsScript, { value: islandProps }),
76362
- /* @__PURE__ */ jsx48("div", { className: "event-registration__summary", children: /* @__PURE__ */ jsx48("strong", { children: "Loading booking options..." }) }),
77769
+ /* @__PURE__ */ jsx48(EventRegistrationShell, { display }),
76363
77770
  children
76364
77771
  ]
76365
77772
  }
76366
77773
  );
76367
77774
  }
77775
+ function EventRegistrationShell({
77776
+ display
77777
+ }) {
77778
+ return /* @__PURE__ */ jsx48("div", { className: "er-container er-registration-shell", "aria-busy": "true", role: "status", children: /* @__PURE__ */ jsxs34("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
77779
+ /* @__PURE__ */ jsxs34("div", { className: "er-payment-layout-main", children: [
77780
+ /* @__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) => {
77781
+ const isActive = index === 0;
77782
+ return /* @__PURE__ */ jsxs34("li", { className: "er-step", children: [
77783
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-circle", isActive && "er-step-circle--active"), children: index + 1 }),
77784
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-label", isActive && "er-step-label--active"), children: label }),
77785
+ index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx48("span", { className: "er-step-connector" }) : null
77786
+ ] }, label);
77787
+ }) }) }),
77788
+ /* @__PURE__ */ jsxs34("div", { className: "er-stack", children: [
77789
+ /* @__PURE__ */ jsxs34("div", { children: [
77790
+ /* @__PURE__ */ jsx48("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
77791
+ /* @__PURE__ */ jsx48("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
77792
+ /* @__PURE__ */ jsx48("p", { className: "er-text er-text--muted er-registration-shell__copy", children: display.bodyText })
77793
+ ] }),
77794
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
77795
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
77796
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
77797
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
77798
+ ] }),
77799
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
77800
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
77801
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
77802
+ ] })
77803
+ ] })
77804
+ ] })
77805
+ ] }),
77806
+ /* @__PURE__ */ jsx48("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
77807
+ /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar-info", children: [
77808
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
77809
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
77810
+ ] }),
77811
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
77812
+ ] }) })
77813
+ ] }) });
77814
+ }
76368
77815
  var event_registration_server_default = EventRegistrationSSR;
76369
77816
 
76370
77817
  // ../blocks/src/system/runtime/nodes/form.server.tsx
@@ -76930,14 +78377,14 @@ function isDecoratedHeadingBlockKind(blockKind) {
76930
78377
  return blockKind === "block.intro" || blockKind === "block.feature-cards" || blockKind === "block.testimonials" || blockKind === "block.faq";
76931
78378
  }
76932
78379
  function readVariant(blockContent) {
76933
- if (!isRecord9(blockContent)) return void 0;
78380
+ if (!isRecord11(blockContent)) return void 0;
76934
78381
  const variant = blockContent.variant;
76935
78382
  return typeof variant === "string" ? variant : void 0;
76936
78383
  }
76937
78384
  function isFaqDecoratedVariant(variant) {
76938
78385
  return variant === "default" || variant === "question-columns";
76939
78386
  }
76940
- function isRecord9(value) {
78387
+ function isRecord11(value) {
76941
78388
  return typeof value === "object" && value !== null && !Array.isArray(value);
76942
78389
  }
76943
78390
  function buildHeadingDecorationWrapperClassName(className) {
@@ -78404,6 +79851,7 @@ function generateAccordionCss({
78404
79851
  // ../theme-core/src/inputs/generateInputCss.ts
78405
79852
  init_types9();
78406
79853
  init_constants();
79854
+ init_colorStyles();
78407
79855
  var CORNER_MAP2 = {
78408
79856
  square: "0",
78409
79857
  soft: "0.5rem",
@@ -78421,20 +79869,20 @@ function generateInputCss({
78421
79869
  baseInputRules.push("background-color: transparent");
78422
79870
  } else {
78423
79871
  baseInputRules.push(
78424
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
79872
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
78425
79873
  );
78426
79874
  }
78427
- baseInputRules.push(`color: rgb(var(--tb-${inputSystem.base.textColorToken}))`);
79875
+ baseInputRules.push(`color: ${rgbColorValue(inputSystem.base.textColorToken)}`);
78428
79876
  const borderPx = parseBorderWidth(inputSystem.base.border.widthClass);
78429
79877
  const borderStyle = inputSystem.base.border.style ?? "all";
78430
79878
  if (borderStyle === "underline") {
78431
79879
  baseInputRules.push("border: none");
78432
79880
  baseInputRules.push(
78433
- `border-bottom: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
79881
+ `border-bottom: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
78434
79882
  );
78435
79883
  } else {
78436
79884
  baseInputRules.push(
78437
- `border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
79885
+ `border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
78438
79886
  );
78439
79887
  }
78440
79888
  if (borderStyle === "underline") {
@@ -78461,7 +79909,7 @@ function generateInputCss({
78461
79909
  baseInputRules.push("transition: border-color 0.2s ease, box-shadow 0.2s ease");
78462
79910
  const labelSelector = `${rootSelector} .form-label`;
78463
79911
  const labelRules = [];
78464
- labelRules.push(`color: rgb(var(--tb-${inputSystem.label.textColorToken}))`);
79912
+ labelRules.push(`color: ${rgbColorValue(inputSystem.label.textColorToken)}`);
78465
79913
  labelRules.push(`font-weight: ${FONT_WEIGHT_MAP[inputSystem.label.fontWeight]}`);
78466
79914
  labelRules.push(`font-size: ${LABEL_FONT_SIZE_MAP[inputSystem.label.fontSize]}`);
78467
79915
  if (inputSystem.label.textTransform && inputSystem.label.textTransform !== "none") {
@@ -78502,9 +79950,9 @@ function generateInputCss({
78502
79950
  ];
78503
79951
  const focusRules = [];
78504
79952
  focusRules.push("outline: none");
78505
- focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
79953
+ focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
78506
79954
  if (inputSystem.focus.borderColorToken) {
78507
- focusRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.borderColorToken}))`);
79955
+ focusRules.push(`border-color: ${rgbColorValue(inputSystem.focus.borderColorToken)}`);
78508
79956
  }
78509
79957
  const errorSelectors = [
78510
79958
  `${inputSelector}[aria-invalid="true"]`,
@@ -78512,16 +79960,16 @@ function generateInputCss({
78512
79960
  `${selectSelector}[aria-invalid="true"]`
78513
79961
  ];
78514
79962
  const errorRules = [];
78515
- errorRules.push(`border-color: rgb(var(--tb-${inputSystem.error.borderColorToken}))`);
78516
- errorRules.push(`color: rgb(var(--tb-${inputSystem.error.textColorToken}))`);
79963
+ errorRules.push(`border-color: ${rgbColorValue(inputSystem.error.borderColorToken)}`);
79964
+ errorRules.push(`color: ${rgbColorValue(inputSystem.error.textColorToken)}`);
78517
79965
  const disabledSelectors = [
78518
79966
  `${inputSelector}:disabled`,
78519
79967
  `${textareaSelector}:disabled`,
78520
79968
  `${selectSelector}:disabled`
78521
79969
  ];
78522
79970
  const disabledRules = [];
78523
- disabledRules.push(`background-color: rgb(var(--tb-${inputSystem.disabled.backgroundColorToken}))`);
78524
- disabledRules.push(`color: rgb(var(--tb-${inputSystem.disabled.textColorToken}))`);
79971
+ disabledRules.push(`background-color: ${rgbColorValue(inputSystem.disabled.backgroundColorToken)}`);
79972
+ disabledRules.push(`color: ${rgbColorValue(inputSystem.disabled.textColorToken)}`);
78525
79973
  disabledRules.push(`opacity: ${inputSystem.disabled.opacity}`);
78526
79974
  disabledRules.push("cursor: not-allowed");
78527
79975
  const checkboxSelector = `${rootSelector} .form-checkbox`;
@@ -78531,12 +79979,12 @@ function generateInputCss({
78531
79979
  checkableRules.push("width: 1rem");
78532
79980
  checkableRules.push("height: 1rem");
78533
79981
  checkableRules.push("flex-shrink: 0");
78534
- checkableRules.push(`border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`);
79982
+ checkableRules.push(`border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`);
78535
79983
  if (inputSystem.base.background.type === "transparent") {
78536
79984
  checkableRules.push("background-color: transparent");
78537
79985
  } else {
78538
79986
  checkableRules.push(
78539
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
79987
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
78540
79988
  );
78541
79989
  }
78542
79990
  checkableRules.push("cursor: pointer");
@@ -78547,22 +79995,22 @@ function generateInputCss({
78547
79995
  radioSpecificRules.push("border-radius: 9999px");
78548
79996
  const checkboxCheckedSelector = `${checkboxSelector}:checked`;
78549
79997
  const checkboxCheckedRules = [];
78550
- checkboxCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
78551
- checkboxCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
79998
+ checkboxCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
79999
+ checkboxCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
78552
80000
  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")`);
78553
80001
  checkboxCheckedRules.push("background-size: 100% 100%");
78554
80002
  checkboxCheckedRules.push("background-position: center");
78555
80003
  checkboxCheckedRules.push("background-repeat: no-repeat");
78556
80004
  const radioCheckedSelector = `${radioSelector}:checked`;
78557
80005
  const radioCheckedRules = [];
78558
- radioCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
78559
- radioCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
80006
+ radioCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
80007
+ radioCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
78560
80008
  radioCheckedRules.push("background-image: radial-gradient(circle, white 40%, transparent 40%)");
78561
80009
  const checkboxFocusSelector = `${checkboxSelector}:focus-visible`;
78562
80010
  const radioFocusSelector = `${radioSelector}:focus-visible`;
78563
80011
  const checkableFocusRules = [];
78564
80012
  checkableFocusRules.push("outline: none");
78565
- checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
80013
+ checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
78566
80014
  const cssBlocks = [];
78567
80015
  cssBlocks.push(`${labelSelector} {
78568
80016
  ${labelRules.join(";\n ")};
@@ -80414,6 +81862,11 @@ ${root} {
80414
81862
  --er-event-card-bg: rgb(var(--tb-surface));
80415
81863
  --er-event-card-border-width: var(--rb-border-width, 1px);
80416
81864
  --er-event-card-hover-opacity: 1;
81865
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
81866
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
81867
+ --er-radius: var(--rb-block-radius);
81868
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
81869
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
80417
81870
 
80418
81871
  /* Step indicator */
80419
81872
  --er-step-active: rgb(var(--tb-primary));
@@ -81422,7 +82875,7 @@ function buildThemeCssVars(theme) {
81422
82875
  // These expose inputStyle/InputSystem values for blocks that can't use .form-* classes
81423
82876
  [THEME_RADIUS_CSS_VARS.input]: inputRadius,
81424
82877
  ["--rb-input-focus-width"]: `${inputSystem.focus.ringWidth}px`,
81425
- ["--rb-input-focus-color"]: `rgb(var(--tb-${inputSystem.focus.ringColorToken}))`,
82878
+ ["--rb-input-focus-color"]: rgbColorValue(inputSystem.focus.ringColorToken),
81426
82879
  // Deprecated compatibility aliases for pre-v2 block/custom CSS. New CSS should
81427
82880
  // consume the semantic --rb-* primitives above.
81428
82881
  [THEME_RADIUS_CSS_VARS.legacyCard]: blockRadius,
@@ -82200,6 +83653,11 @@ var MemoBlockSection = React6.memo(
82200
83653
  siteId: dataContext?.siteId,
82201
83654
  apiBaseUrl: dataContext?.apiBaseUrl,
82202
83655
  portalToken: dataContext?.portalToken ?? null,
83656
+ previewToken: dataContext?.previewToken ?? null,
83657
+ stage: dataContext?.previewStage,
83658
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
83659
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
83660
+ contentEntry: dataContext?.contentEntry ?? null,
82203
83661
  supabaseUrl: dataContext?.supabaseUrl,
82204
83662
  imageResolveContext: resolvedImageResolveContext,
82205
83663
  blockId: block.id ?? null,
@@ -82323,6 +83781,11 @@ var MemoBlockSection = React6.memo(
82323
83781
  siteId: dataContext?.siteId,
82324
83782
  apiBaseUrl: dataContext?.apiBaseUrl,
82325
83783
  portalToken: dataContext?.portalToken ?? null,
83784
+ previewToken: dataContext?.previewToken ?? null,
83785
+ stage: dataContext?.previewStage,
83786
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
83787
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
83788
+ contentEntry: dataContext?.contentEntry ?? null,
82326
83789
  supabaseUrl: dataContext?.supabaseUrl,
82327
83790
  imageResolveContext: resolvedImageResolveContext,
82328
83791
  blockId: block.id ?? null,
@@ -82534,6 +83997,9 @@ var containerResponsiveThemeCss = `/*
82534
83997
  letter-spacing: 0.025em;
82535
83998
  text-transform: uppercase;
82536
83999
  }
84000
+ .rb-eyebrow-treatment-accent {
84001
+ color: rgb(var(--tb-accent));
84002
+ }
82537
84003
  .rb-eyebrow-treatment-pill {
82538
84004
  align-self: center;
82539
84005
  display: inline-flex;
@@ -82588,6 +84054,27 @@ var containerResponsiveThemeCss = `/*
82588
84054
  font-weight: 400;
82589
84055
  }
82590
84056
 
84057
+ /* Media shape treatments */
84058
+ .rb-media-shape-square,
84059
+ .rb-media-shape-rounded,
84060
+ .rb-media-shape-circle,
84061
+ .rb-media-shape-arch {
84062
+ overflow: hidden;
84063
+ }
84064
+ .rb-media-shape-square {
84065
+ border-radius: 0;
84066
+ }
84067
+ .rb-media-shape-rounded {
84068
+ border-radius: var(--rb-media-shape-radius, 1rem);
84069
+ }
84070
+ .rb-media-shape-circle {
84071
+ border-radius: 9999px;
84072
+ }
84073
+ .rb-media-shape-arch {
84074
+ border-radius: 9999px 9999px var(--rb-media-shape-arch-base-radius, 0.125rem)
84075
+ var(--rb-media-shape-arch-base-radius, 0.125rem);
84076
+ }
84077
+
82591
84078
  /* Navigation typography */
82592
84079
  .rb-nav-text {
82593
84080
  font-size: 0.875rem;
@@ -85742,7 +87229,7 @@ var containerResponsiveThemeCss = `/*
85742
87229
  :where(.theme-scope) :where([data-block="event-registration"]) .er-container {
85743
87230
  border-radius: var(--rb-block-radius);
85744
87231
  border: 1px solid var(--er-border);
85745
- padding: 1.5rem;
87232
+ padding: clamp(1rem, 2vw, 1.5rem);
85746
87233
  background: rgb(var(--tb-surface));
85747
87234
  color: var(--er-on-surface);
85748
87235
  transition: border-color var(--rb-block-transition) ease;
@@ -85751,6 +87238,109 @@ var containerResponsiveThemeCss = `/*
85751
87238
  margin-inline: 0;
85752
87239
  }
85753
87240
 
87241
+ /* SSR shell / required-island fallback */
87242
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell {
87243
+ min-height: 24rem;
87244
+ }
87245
+
87246
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__steps {
87247
+ margin-bottom: 1.25rem;
87248
+ }
87249
+
87250
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__eyebrow {
87251
+ margin: 0 0 0.35rem;
87252
+ color: var(--er-on-surface-subtle);
87253
+ font-size: 0.75rem;
87254
+ font-weight: 700;
87255
+ letter-spacing: 0.04em;
87256
+ line-height: 1.2;
87257
+ text-transform: uppercase;
87258
+ }
87259
+
87260
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__title {
87261
+ margin: 0;
87262
+ }
87263
+
87264
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__copy {
87265
+ margin: 0.35rem 0 0;
87266
+ max-width: 36rem;
87267
+ line-height: 1.45;
87268
+ }
87269
+
87270
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__cards {
87271
+ margin-top: 0.25rem;
87272
+ overflow: hidden;
87273
+ border: 1px solid var(--er-border);
87274
+ border-radius: var(--rb-block-radius);
87275
+ background: var(--er-control-bg);
87276
+ }
87277
+
87278
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__card {
87279
+ display: grid;
87280
+ gap: 0.5rem;
87281
+ padding: 1rem;
87282
+ }
87283
+
87284
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line {
87285
+ height: 0.75rem;
87286
+ border-radius: 9999px;
87287
+ background: linear-gradient(
87288
+ 90deg,
87289
+ var(--er-shell-line),
87290
+ rgba(var(--tb-primary), 0.12),
87291
+ var(--er-shell-line)
87292
+ );
87293
+ }
87294
+
87295
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--lg {
87296
+ width: min(26rem, 82%);
87297
+ }
87298
+
87299
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--md {
87300
+ width: min(19rem, 68%);
87301
+ }
87302
+
87303
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--sm {
87304
+ width: min(14rem, 52%);
87305
+ }
87306
+
87307
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--xs {
87308
+ width: min(10rem, 42%);
87309
+ }
87310
+
87311
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__summary {
87312
+ align-items: center;
87313
+ border-radius: calc(var(--rb-block-radius) * 0.75);
87314
+ border: 1px solid var(--er-summary-border);
87315
+ padding: 0.875rem 1rem;
87316
+ }
87317
+
87318
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__button-placeholder {
87319
+ display: inline-flex;
87320
+ min-height: 2.5rem;
87321
+ align-items: center;
87322
+ justify-content: center;
87323
+ border-radius: calc(var(--rb-block-radius) * 0.6);
87324
+ background: rgb(var(--tb-primary));
87325
+ color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
87326
+ padding: 0.625rem 1rem;
87327
+ font-size: 0.875rem;
87328
+ font-weight: 600;
87329
+ line-height: 1.2;
87330
+ text-align: center;
87331
+ white-space: nowrap;
87332
+ }
87333
+
87334
+ :where(.theme-scope) :where([data-block="event-registration"]) .event-registration__hydration-error {
87335
+ border-radius: var(--rb-block-radius);
87336
+ border: 1px solid var(--er-border-error);
87337
+ background: var(--er-error-bg);
87338
+ color: var(--er-error-text);
87339
+ padding: 1rem;
87340
+ font-size: 0.9375rem;
87341
+ line-height: 1.45;
87342
+ }
87343
+
85754
87344
  :where(.theme-scope) :where([data-block="event-registration"].event-registration--embedded) .er-container {
85755
87345
  max-width: none;
85756
87346
  padding: 0;
@@ -85798,6 +87388,7 @@ var containerResponsiveThemeCss = `/*
85798
87388
  padding: 1rem;
85799
87389
  border-radius: calc(var(--rb-block-radius) * 0.75);
85800
87390
  border: 1px solid var(--er-border);
87391
+ background: var(--er-surface-muted);
85801
87392
  }
85802
87393
 
85803
87394
  /* Ticket counter */
@@ -85843,14 +87434,23 @@ var containerResponsiveThemeCss = `/*
85843
87434
  /* Form inputs */
85844
87435
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input {
85845
87436
  width: 100%;
85846
- padding: 0.5rem 0.75rem;
87437
+ min-height: 2.75rem;
87438
+ padding: 0.625rem 0.75rem;
85847
87439
  border-radius: calc(var(--rb-block-radius) * 0.5);
85848
87440
  border: 1px solid var(--er-border);
85849
- background: transparent;
87441
+ background: var(--er-control-bg);
87442
+ color: var(--er-control-text);
87443
+ font: inherit;
87444
+ line-height: 1.4;
85850
87445
  transition: border-color var(--rb-block-transition) ease,
87446
+ background-color var(--rb-block-transition) ease,
85851
87447
  box-shadow var(--rb-block-transition) ease;
85852
87448
  }
85853
87449
 
87450
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-input::placeholder {
87451
+ color: var(--er-on-surface-faint);
87452
+ }
87453
+
85854
87454
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input:focus {
85855
87455
  outline: none;
85856
87456
  border-color: var(--er-border-selected);
@@ -85972,7 +87572,7 @@ var containerResponsiveThemeCss = `/*
85972
87572
  }
85973
87573
 
85974
87574
  :where(.theme-scope) :where([data-block="event-registration"]) .er-event-grid .er-event-card {
85975
- padding: 0.75rem 0;
87575
+ padding: 0.875rem 0;
85976
87576
  border-width: 0 0 var(--rb-event-tile-border-width, var(--rb-border-width, 1px)) 0;
85977
87577
  border-style: solid;
85978
87578
  border-radius: 0;
@@ -86204,21 +87804,24 @@ var containerResponsiveThemeCss = `/*
86204
87804
  align-items: flex-start;
86205
87805
  gap: 0.75rem;
86206
87806
  padding: 1rem;
86207
- border: 2px solid var(--er-payment-border);
87807
+ border: 1px solid var(--er-payment-border);
86208
87808
  border-radius: var(--rb-block-radius);
86209
- background: transparent;
87809
+ background: var(--er-control-bg);
86210
87810
  cursor: pointer;
86211
87811
  transition: border-color var(--rb-block-transition) ease,
87812
+ box-shadow var(--rb-block-transition) ease,
86212
87813
  background-color var(--rb-block-transition) ease;
86213
87814
  }
86214
87815
 
86215
87816
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option:hover {
86216
87817
  border-color: var(--er-payment-border-hover);
87818
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
86217
87819
  }
86218
87820
 
86219
87821
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option--selected {
86220
87822
  border-color: var(--er-payment-border-selected);
86221
87823
  background-color: var(--er-payment-bg-selected);
87824
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
86222
87825
  }
86223
87826
 
86224
87827
  /* Discount code entry */
@@ -86906,22 +88509,25 @@ var containerResponsiveThemeCss = `/*
86906
88509
  justify-content: center;
86907
88510
  gap: 0.25rem;
86908
88511
  padding: 0.75rem 0.625rem;
86909
- border: 2px solid var(--er-payment-border);
88512
+ border: 1px solid var(--er-payment-border);
86910
88513
  border-radius: var(--rb-block-radius);
86911
- background: transparent;
88514
+ background: var(--er-control-bg);
86912
88515
  cursor: pointer;
86913
88516
  text-align: center;
86914
88517
  transition: border-color var(--rb-block-transition) ease,
88518
+ box-shadow var(--rb-block-transition) ease,
86915
88519
  background-color var(--rb-block-transition) ease;
86916
88520
  }
86917
88521
 
86918
88522
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile:hover:not([aria-disabled="true"]) {
86919
88523
  border-color: var(--er-payment-border-hover);
88524
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
86920
88525
  }
86921
88526
 
86922
88527
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--selected {
86923
88528
  border-color: var(--er-payment-border-selected);
86924
88529
  background-color: var(--er-payment-bg-selected);
88530
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
86925
88531
  }
86926
88532
 
86927
88533
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--disabled {
@@ -87024,11 +88630,10 @@ var containerResponsiveThemeCss = `/*
87024
88630
  justify-content: space-between;
87025
88631
  align-items: flex-start;
87026
88632
  gap: 1rem;
87027
- padding: 0.875rem 0;
87028
- background: transparent;
87029
- border-top: 1px solid var(--er-summary-border);
87030
- border-bottom: 1px solid var(--er-summary-border);
87031
- border-radius: 0;
88633
+ padding: 0.875rem 1rem;
88634
+ background: var(--er-surface-muted);
88635
+ border: 1px solid var(--er-summary-border);
88636
+ border-radius: calc(var(--rb-block-radius) * 0.75);
87032
88637
  }
87033
88638
 
87034
88639
  :where(.theme-scope) :where([data-block="event-registration"]) .er-summary-bar-info {
@@ -88800,18 +90405,10 @@ var containerResponsiveThemeCss = `/*
88800
90405
  /* Two-column row (opt-in per field via schema layout) */
88801
90406
  :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
88802
90407
  display: grid;
88803
- grid-template-columns: 1fr;
90408
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
88804
90409
  gap: 1rem;
88805
90410
  }
88806
90411
 
88807
- @container rb-site (min-width: 768px) {
88808
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
88809
- :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
88810
- grid-template-columns: 1fr 1fr;
88811
- }
88812
- }
88813
- }
88814
-
88815
90412
  /* Field wrapper */
88816
90413
  :where(.theme-scope) :where([data-block="form"]) .fb-field {
88817
90414
  display: flex;
@@ -88885,6 +90482,10 @@ var containerResponsiveThemeCss = `/*
88885
90482
  }
88886
90483
 
88887
90484
  /* Subheadline - supporting text below headline */
90485
+ :where(.theme-scope) :where([data-block="hero"]) .hero-headline {
90486
+ text-wrap: balance;
90487
+ }
90488
+
88888
90489
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
88889
90490
  font-size: 1.125rem;
88890
90491
  color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
@@ -88910,8 +90511,8 @@ var containerResponsiveThemeCss = `/*
88910
90511
  }
88911
90512
 
88912
90513
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-headline {
88913
- font-size: clamp(2.5rem, 5vw, 4rem);
88914
- line-height: 1.08;
90514
+ font-size: clamp(2.75rem, 5.6vw, 4.75rem);
90515
+ line-height: 1.06;
88915
90516
  }
88916
90517
 
88917
90518
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-subheadline {
@@ -88920,8 +90521,8 @@ var containerResponsiveThemeCss = `/*
88920
90521
  }
88921
90522
 
88922
90523
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline {
88923
- font-size: clamp(3rem, 6vw, 5rem);
88924
- line-height: 1.04;
90524
+ font-size: clamp(3.5rem, 7.2vw, 6.25rem);
90525
+ line-height: 1;
88925
90526
  }
88926
90527
 
88927
90528
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-subheadline {
@@ -88930,8 +90531,8 @@ var containerResponsiveThemeCss = `/*
88930
90531
  }
88931
90532
 
88932
90533
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline {
88933
- font-size: clamp(3.5rem, 8vw, 6.5rem);
88934
- line-height: 0.98;
90534
+ font-size: clamp(4.25rem, 10vw, 8.5rem);
90535
+ line-height: 0.94;
88935
90536
  }
88936
90537
 
88937
90538
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-subheadline {
@@ -88940,13 +90541,13 @@ var containerResponsiveThemeCss = `/*
88940
90541
  }
88941
90542
 
88942
90543
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-medium.rb-hero-typography-poster .hero-headline {
88943
- font-size: clamp(3rem, 6.5vw, 5rem);
90544
+ font-size: clamp(3.5rem, 7.5vw, 6.5rem);
88944
90545
  }
88945
90546
 
88946
90547
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
88947
90548
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
88948
- font-size: clamp(2.75rem, 5.5vw, 4.5rem);
88949
- line-height: 1.05;
90549
+ font-size: clamp(3rem, 6vw, 5.25rem);
90550
+ line-height: 1.02;
88950
90551
  }
88951
90552
 
88952
90553
  @container rb-site (max-width: 639px) {
@@ -91668,8 +93269,9 @@ var containerResponsiveThemeCss = `/*
91668
93269
  /* Privacy note */
91669
93270
  :where(.theme-scope) .newsletter-privacy-note {
91670
93271
  margin-top: 0.75rem;
91671
- font-size: 0.75rem;
91672
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
93272
+ font-size: 1rem;
93273
+ line-height: 1.6;
93274
+ color: var(--section-text-color, rgb(var(--tb-text)));
91673
93275
  text-align: center;
91674
93276
  }
91675
93277
 
@@ -91724,6 +93326,116 @@ var containerResponsiveThemeCss = `/*
91724
93326
  color: rgb(var(--tb-text));
91725
93327
  }
91726
93328
 
93329
+ /* =============================================================================
93330
+ * Block: Contact + Newsletter
93331
+ * =============================================================================
93332
+ */
93333
+
93334
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
93335
+ display: grid;
93336
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
93337
+ gap: clamp(2.5rem, 6vw, 4rem);
93338
+ align-items: start;
93339
+ }
93340
+
93341
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
93342
+ min-width: 0;
93343
+ }
93344
+
93345
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
93346
+ margin-bottom: 1.5rem;
93347
+ }
93348
+
93349
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
93350
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
93351
+ margin: 0 0 0.75rem;
93352
+ }
93353
+
93354
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
93355
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
93356
+ color: var(--section-text-color, rgb(var(--tb-text)));
93357
+ }
93358
+
93359
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
93360
+ display: flex;
93361
+ flex-direction: column;
93362
+ align-items: flex-start;
93363
+ }
93364
+
93365
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
93366
+ max-width: none;
93367
+ margin-left: 0;
93368
+ margin-right: 0;
93369
+ }
93370
+
93371
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
93372
+ text-align: left;
93373
+ }
93374
+
93375
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
93376
+ display: flex;
93377
+ flex-direction: column;
93378
+ gap: 1rem;
93379
+ }
93380
+
93381
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
93382
+ display: grid;
93383
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
93384
+ gap: 1rem;
93385
+ }
93386
+
93387
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
93388
+ display: flex;
93389
+ flex-direction: column;
93390
+ gap: 0.25rem;
93391
+ }
93392
+
93393
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
93394
+ display: flex;
93395
+ flex-direction: column;
93396
+ gap: 0.5rem;
93397
+ border: none;
93398
+ padding: 0;
93399
+ margin: 0;
93400
+ }
93401
+
93402
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
93403
+ display: flex;
93404
+ align-items: center;
93405
+ gap: 0.5rem;
93406
+ }
93407
+
93408
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
93409
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
93410
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
93411
+ border-radius: var(--rb-block-radius);
93412
+ padding: 1rem;
93413
+ font-size: 0.875rem;
93414
+ }
93415
+
93416
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
93417
+ background-color: var(--fb-success-bg);
93418
+ color: var(--fb-success-text);
93419
+ border: 1px solid var(--fb-success-border);
93420
+ }
93421
+
93422
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
93423
+ background-color: var(--fb-error-bg);
93424
+ color: var(--fb-error-text);
93425
+ border: 1px solid var(--fb-error-border);
93426
+ }
93427
+
93428
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
93429
+ background-color: var(--fb-empty-bg);
93430
+ color: var(--fb-empty-text);
93431
+ border: 1px dashed var(--fb-empty-border);
93432
+ text-align: center;
93433
+ }
93434
+
93435
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
93436
+ margin-top: 0.5rem;
93437
+ }
93438
+
91727
93439
  /* =============================================================================
91728
93440
  * Block: Team Members
91729
93441
  * =============================================================================
@@ -91948,8 +93660,8 @@ var containerResponsiveThemeCss = `/*
91948
93660
  container: event-compact-list / inline-size;
91949
93661
  border: 1px solid var(--event-compact-divider-color);
91950
93662
  border-radius: 1rem;
91951
- background: rgb(var(--tb-background, 255 255 255));
91952
- box-shadow: 0 1.25rem 3.5rem rgba(var(--tb-shadow), 0.08);
93663
+ background: rgb(var(--tb-surface, 255 255 255));
93664
+ box-shadow: none;
91953
93665
  }
91954
93666
 
91955
93667
  :where(.theme-scope) .rb-event-list-treatment-lined-panel .event-listing-compact-container {
@@ -91958,6 +93670,12 @@ var containerResponsiveThemeCss = `/*
91958
93670
  rgb(var(--tb-border, 229 231 235)),
91959
93671
  rgb(var(--tb-text, 17 24 39)) 8%
91960
93672
  );
93673
+ background: rgb(var(--tb-surface, 255 255 255));
93674
+ border-color: color-mix(
93675
+ in oklab,
93676
+ rgb(var(--tb-primary, 0 0 0)),
93677
+ rgb(var(--tb-border, 229 231 235)) 72%
93678
+ );
91961
93679
  }
91962
93680
 
91963
93681
  :where(.theme-scope) .event-compact-row {
@@ -92033,7 +93751,7 @@ var containerResponsiveThemeCss = `/*
92033
93751
 
92034
93752
  :where(.theme-scope) .event-compact-row-title {
92035
93753
  margin: 0;
92036
- color: rgb(var(--tb-text, 17 24 39));
93754
+ color: var(--section-heading-color, rgb(var(--tb-primary, 0 0 0)));
92037
93755
  font-family: var(--font-heading, var(--font-body, inherit));
92038
93756
  font-size: clamp(1.05rem, 1rem + 0.35vw, 1.3rem);
92039
93757
  font-weight: 400;
@@ -92126,8 +93844,6 @@ var containerResponsiveThemeCss = `/*
92126
93844
  min-height: 2.7rem;
92127
93845
  justify-content: space-between;
92128
93846
  gap: 1rem;
92129
- border-radius: 9999px;
92130
- padding-inline: 1.25rem 1rem;
92131
93847
  white-space: nowrap;
92132
93848
  }
92133
93849
 
@@ -94461,7 +96177,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
94461
96177
  }
94462
96178
 
94463
96179
  // ../api/src/utils/isRecord.ts
94464
- function isRecord10(value) {
96180
+ function isRecord12(value) {
94465
96181
  return typeof value === "object" && value !== null && !Array.isArray(value);
94466
96182
  }
94467
96183
 
@@ -94768,7 +96484,7 @@ function sanitizeMarks(marks) {
94768
96484
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
94769
96485
  return [{ type: mark.type }];
94770
96486
  }
94771
- if (mark.type === "link" && isRecord10(mark.attrs) && typeof mark.attrs.href === "string") {
96487
+ if (mark.type === "link" && isRecord12(mark.attrs) && typeof mark.attrs.href === "string") {
94772
96488
  const attrs = { href: mark.attrs.href };
94773
96489
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
94774
96490
  attrs.target = mark.attrs.target;
@@ -94783,10 +96499,10 @@ function sanitizeMarks(marks) {
94783
96499
  return sanitized.length > 0 ? sanitized : void 0;
94784
96500
  }
94785
96501
  function unwrapRichTextValue(value) {
94786
- if (isRecord10(value) && isRecord10(value.doc)) {
96502
+ if (isRecord12(value) && isRecord12(value.doc)) {
94787
96503
  return unwrapRichTextValue(value.doc);
94788
96504
  }
94789
- if (isRecord10(value) && value.type === "doc") {
96505
+ if (isRecord12(value) && value.type === "doc") {
94790
96506
  return {
94791
96507
  type: "doc",
94792
96508
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -94795,7 +96511,7 @@ function unwrapRichTextValue(value) {
94795
96511
  return EMPTY_SITE_BANNER_BODY;
94796
96512
  }
94797
96513
  function isTipTapNodeLike(value) {
94798
- return isRecord10(value) && typeof value.type === "string";
96514
+ return isRecord12(value) && typeof value.type === "string";
94799
96515
  }
94800
96516
  function coerceTipTapNode(value) {
94801
96517
  return {
@@ -94803,9 +96519,9 @@ function coerceTipTapNode(value) {
94803
96519
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
94804
96520
  ...typeof value.text === "string" ? { text: value.text } : {},
94805
96521
  ...Array.isArray(value.marks) ? {
94806
- marks: value.marks.filter((mark) => isRecord10(mark) && typeof mark.type === "string").map((mark) => ({
96522
+ marks: value.marks.filter((mark) => isRecord12(mark) && typeof mark.type === "string").map((mark) => ({
94807
96523
  type: mark.type,
94808
- ...isRecord10(mark.attrs) ? { attrs: mark.attrs } : {}
96524
+ ...isRecord12(mark.attrs) ? { attrs: mark.attrs } : {}
94809
96525
  }))
94810
96526
  } : {}
94811
96527
  };
@@ -95008,7 +96724,7 @@ var ENTRY_REF_KEYS = [
95008
96724
  "entryId",
95009
96725
  "slug"
95010
96726
  ];
95011
- function isRecord11(value) {
96727
+ function isRecord13(value) {
95012
96728
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
95013
96729
  }
95014
96730
  function extractManualEntryRef(item) {
@@ -95016,7 +96732,7 @@ function extractManualEntryRef(item) {
95016
96732
  const trimmed = item.trim();
95017
96733
  return trimmed.length > 0 ? trimmed : null;
95018
96734
  }
95019
- if (!isRecord11(item)) return null;
96735
+ if (!isRecord13(item)) return null;
95020
96736
  for (const key of ENTRY_REF_KEYS) {
95021
96737
  const raw = item[key];
95022
96738
  if (typeof raw === "string" && raw.trim().length > 0) {
@@ -95989,6 +97705,7 @@ function PageContent({
95989
97705
  mediaAssets,
95990
97706
  apiBaseUrl,
95991
97707
  portalToken,
97708
+ previewToken,
95992
97709
  dataContext,
95993
97710
  useThemeScope = false
95994
97711
  }) {
@@ -96005,6 +97722,7 @@ function PageContent({
96005
97722
  siteId,
96006
97723
  apiBaseUrl,
96007
97724
  portalToken,
97725
+ previewToken,
96008
97726
  resolvedData,
96009
97727
  routes: routeMap,
96010
97728
  pagesByIdentifier,
@@ -96159,7 +97877,7 @@ var SimpleCache = class {
96159
97877
  };
96160
97878
 
96161
97879
  // src/version.ts
96162
- var SDK_VERSION = "0.82.0";
97880
+ var SDK_VERSION = "0.84.0";
96163
97881
 
96164
97882
  // src/client/error.ts
96165
97883
  var RiverbankApiError = class _RiverbankApiError extends Error {