@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
@@ -877,6 +877,21 @@ var selectSourceSchema = z3.discriminatedUnion("kind", [
877
877
  function assertNeverSelectSource(value) {
878
878
  throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
879
879
  }
880
+ var visibleWhenPredicateSchema = z3.object({
881
+ field: z3.string().min(1),
882
+ equals: z3.any().optional(),
883
+ notEquals: z3.any().optional(),
884
+ oneOf: z3.array(z3.any()).optional(),
885
+ notIn: z3.array(z3.any()).optional(),
886
+ minItems: z3.number().int().nonnegative().optional(),
887
+ maxItems: z3.number().int().nonnegative().optional()
888
+ });
889
+ var visibleWhenSchema = z3.union([
890
+ visibleWhenPredicateSchema,
891
+ z3.object({
892
+ allOf: z3.array(visibleWhenPredicateSchema).min(1)
893
+ })
894
+ ]);
880
895
  var uiSchema = z3.object({
881
896
  widget: z3.string().optional(),
882
897
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -909,13 +924,7 @@ var uiSchema = z3.object({
909
924
  showValue: z3.boolean().optional(),
910
925
  pattern: z3.string().optional(),
911
926
  placeholder: z3.string().optional(),
912
- visibleWhen: z3.object({
913
- field: z3.string().min(1),
914
- equals: z3.any().optional(),
915
- notEquals: z3.any().optional(),
916
- oneOf: z3.array(z3.any()).optional(),
917
- notIn: z3.array(z3.any()).optional()
918
- }).optional(),
927
+ visibleWhen: visibleWhenSchema.optional(),
919
928
  // Modal configuration for modal and group fields
920
929
  modalConfig: z3.object({
921
930
  buttonLabel: z3.string().optional(),
@@ -3829,6 +3838,7 @@ var eventListTreatmentValues = [
3829
3838
  ];
3830
3839
  var eyebrowTreatmentValues = [
3831
3840
  "plain",
3841
+ "accent",
3832
3842
  "pill",
3833
3843
  "accent-pill",
3834
3844
  "pill-bounce",
@@ -8167,7 +8177,8 @@ var STRUCTURAL_DECLARATIONS = [
8167
8177
  ["transition", "all 200ms ease-in-out"],
8168
8178
  ["display", "inline-flex"],
8169
8179
  ["align-items", "center"],
8170
- ["justify-content", "center"]
8180
+ ["justify-content", "center"],
8181
+ ["outline", "none"]
8171
8182
  ];
8172
8183
  function generateButtonCss(options) {
8173
8184
  const { themeId, theme, buttonSystem: providedButtonSystem } = options;
@@ -8197,6 +8208,7 @@ function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
8197
8208
  out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
8198
8209
  const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
8199
8210
  if (hoverBg) out.push(hoverBg);
8211
+ out.push(variantFocusVisibleRule(variantId, themeId));
8200
8212
  const effects = variantEffectsCss(variant, themeId, tokens, theme);
8201
8213
  if (effects) out.push({ raw: effects });
8202
8214
  out.push(...variantDisabledRules(variantId, themeId));
@@ -8254,6 +8266,12 @@ function variantHoverBackgroundRule(variant, variantId, global, themeId, tokens)
8254
8266
  ["background-color", tokens.getColor(hoverToken)]
8255
8267
  ]);
8256
8268
  }
8269
+ function variantFocusVisibleRule(variantId, themeId) {
8270
+ return rule(`:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:focus-visible`, [
8271
+ ["outline", "2px solid currentColor"],
8272
+ ["outline-offset", "3px"]
8273
+ ]);
8274
+ }
8257
8275
  function variantEffectsCss(variant, themeId, tokens, theme) {
8258
8276
  if (!variant.effects) return "";
8259
8277
  const elementConfig = {
@@ -8885,6 +8903,95 @@ var joyStamp = defineButtonPersonality({
8885
8903
  }
8886
8904
  });
8887
8905
 
8906
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
8907
+ var ornateRitual = defineButtonPersonality({
8908
+ id: "ornate-ritual",
8909
+ name: "Ornate Ritual",
8910
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
8911
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
8912
+ buttonSystem: {
8913
+ global: {
8914
+ cornerStyle: "rounded",
8915
+ shadow: "none",
8916
+ textTransform: "uppercase",
8917
+ fontWeight: 600,
8918
+ borderWidth: 1,
8919
+ hoverTransform: "none",
8920
+ hoverColor: "none",
8921
+ letterSpacing: "loose"
8922
+ },
8923
+ sizes: {
8924
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
8925
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
8926
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
8927
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
8928
+ },
8929
+ variants: [
8930
+ {
8931
+ id: "primary",
8932
+ name: "Primary",
8933
+ enabled: true,
8934
+ priority: 1,
8935
+ background: { type: "solid", colorToken: "primary" },
8936
+ textColorToken: "primaryForeground",
8937
+ borderRadius: "rounded-md",
8938
+ border: { widthClass: "border", colorToken: "primary" },
8939
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8940
+ effects: {
8941
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
8942
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8943
+ }
8944
+ },
8945
+ {
8946
+ id: "secondary",
8947
+ name: "Secondary",
8948
+ enabled: true,
8949
+ priority: 2,
8950
+ background: { type: "solid", colorToken: "secondary" },
8951
+ textColorToken: "primaryForeground",
8952
+ borderRadius: "rounded-md",
8953
+ border: { widthClass: "border", colorToken: "primary" },
8954
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8955
+ effects: {
8956
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8957
+ }
8958
+ },
8959
+ {
8960
+ id: "outline",
8961
+ name: "Outline",
8962
+ enabled: true,
8963
+ priority: 3,
8964
+ background: { type: "transparent" },
8965
+ textColorToken: "primary",
8966
+ borderRadius: "rounded-md",
8967
+ border: { widthClass: "border", colorToken: "primary" },
8968
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8969
+ effects: {
8970
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
8971
+ }
8972
+ },
8973
+ {
8974
+ id: "ghost",
8975
+ name: "Ghost",
8976
+ enabled: true,
8977
+ priority: 3,
8978
+ background: { type: "transparent" },
8979
+ textColorToken: "accent",
8980
+ borderRadius: "rounded-none",
8981
+ sizes: {
8982
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
8983
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
8984
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
8985
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
8986
+ },
8987
+ effects: {
8988
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
8989
+ }
8990
+ }
8991
+ ]
8992
+ }
8993
+ });
8994
+
8888
8995
  // ../theme-core/src/buttons/personalities/pebble.ts
8889
8996
  var pebble = defineButtonPersonality({
8890
8997
  id: "pebble",
@@ -9158,7 +9265,8 @@ var buttonPersonalities = [
9158
9265
  inkStamp,
9159
9266
  brushedWash,
9160
9267
  showtimePill,
9161
- joyStamp
9268
+ joyStamp,
9269
+ ornateRitual
9162
9270
  ];
9163
9271
  var personalitiesById = new Map(
9164
9272
  buttonPersonalities.map((p) => [p.id, p])
@@ -10153,7 +10261,7 @@ function rgbColorValue(token) {
10153
10261
  if (alpha === void 0) {
10154
10262
  return `rgb(var(${cssVar}))`;
10155
10263
  }
10156
- return `rgba(var(${cssVar}), ${alpha})`;
10264
+ return `rgb(var(${cssVar}) / ${alpha})`;
10157
10265
  }
10158
10266
  function backgroundColorStyle(token) {
10159
10267
  return { backgroundColor: rgbColorValue(token) };
@@ -11282,6 +11390,28 @@ var warmDarkEmber = definePaletteVariant({
11282
11390
  { name: "border", hex: "#894e31" }
11283
11391
  ]
11284
11392
  });
11393
+ var warmDarkKirtanGold = definePaletteVariant({
11394
+ id: "warm-dark-kirtan-gold",
11395
+ name: "Warm Dark \u2014 Kirtan Gold",
11396
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
11397
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
11398
+ mode: "dark",
11399
+ colors: [
11400
+ { name: "primary", hex: "#ffcdb2" },
11401
+ { name: "secondary", hex: "#b5838d" },
11402
+ { name: "accent", hex: "#e5989b" },
11403
+ { name: "success", hex: "#8fbf8f" },
11404
+ { name: "warning", hex: "#f2b86b" },
11405
+ { name: "destructive", hex: "#d96b6b" },
11406
+ { name: "background", hex: "#403944" },
11407
+ { name: "surface", hex: "#403944" },
11408
+ { name: "surfaceAlt", hex: "#372f3b" },
11409
+ { name: "muted", hex: "#4d4550" },
11410
+ { name: "text", hex: "#e6d2d5" },
11411
+ { name: "primaryForeground", hex: "#403944" },
11412
+ { name: "border", hex: "#8d747a" }
11413
+ ]
11414
+ });
11285
11415
 
11286
11416
  // ../theme-core/src/palette/variants/index.ts
11287
11417
  var paletteVariants = [
@@ -11305,7 +11435,8 @@ var paletteVariants = [
11305
11435
  softNaturalWatercolor,
11306
11436
  softNaturalLilac,
11307
11437
  // Warm-dark family (dark mode)
11308
- warmDarkEmber
11438
+ warmDarkEmber,
11439
+ warmDarkKirtanGold
11309
11440
  ];
11310
11441
  var paletteVariantsById = new Map(
11311
11442
  paletteVariants.map((v) => [v.id, v])
@@ -12874,9 +13005,125 @@ function headerConfigurationKey(configuration) {
12874
13005
  function asFooterLookId(value) {
12875
13006
  return value;
12876
13007
  }
12877
- var guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
13008
+ function asFooterLayoutId(value) {
13009
+ return value;
13010
+ }
13011
+ function asFooterStyleId(value) {
13012
+ return value;
13013
+ }
13014
+ var guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
13015
+ var footerLayoutCatalog = defineExactCatalog()([
13016
+ {
13017
+ id: asFooterLayoutId("identity"),
13018
+ label: "Identity",
13019
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
13020
+ },
13021
+ {
13022
+ id: asFooterLayoutId("centered"),
13023
+ label: "Centered",
13024
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
13025
+ maxRecommendedNavDensity: "sparse"
13026
+ },
13027
+ {
13028
+ id: asFooterLayoutId("split"),
13029
+ label: "Split",
13030
+ description: "Navigation and brand signoff separated into a wider split footer.",
13031
+ requiresFooterNav: true,
13032
+ maxRecommendedNavDensity: "balanced"
13033
+ },
13034
+ {
13035
+ id: asFooterLayoutId("columns"),
13036
+ label: "Columns",
13037
+ description: "Grouped footer navigation columns with a supporting bottom line.",
13038
+ requiresFooterNav: true,
13039
+ requiresFooterNavGroups: true
13040
+ }
13041
+ ]);
13042
+ var footerStyleCatalog = defineExactCatalog()([
13043
+ {
13044
+ id: asFooterStyleId("quiet"),
13045
+ label: "Quiet",
13046
+ description: "Lightweight, practical footer treatment."
13047
+ },
13048
+ {
13049
+ id: asFooterStyleId("calm"),
13050
+ label: "Calm",
13051
+ description: "Soft centered treatment with restrained dividers."
13052
+ },
13053
+ {
13054
+ id: asFooterStyleId("editorial"),
13055
+ label: "Editorial",
13056
+ description: "Text-forward treatment with fine-line structure."
13057
+ },
13058
+ {
13059
+ id: asFooterStyleId("brand-band"),
13060
+ label: "Brand band",
13061
+ description: "High-contrast brand treatment with a stronger bottom bar."
13062
+ }
13063
+ ]);
13064
+ var footerLayoutsById = new Map(
13065
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
13066
+ );
13067
+ var footerStylesById = new Map(
13068
+ footerStyleCatalog.map((style) => [style.id, style])
13069
+ );
13070
+ function identityQuietFooter(theme) {
13071
+ return {
13072
+ ...theme.footer,
13073
+ variant: "simple",
13074
+ maxWidth: "container",
13075
+ background: {
13076
+ type: "color",
13077
+ color: "surface"
13078
+ },
13079
+ navStyle: "minimal",
13080
+ navWeight: "regular",
13081
+ navColor: "text",
13082
+ navLinkStyle: {
13083
+ typography: "body",
13084
+ fontWeight: "regular",
13085
+ textTransform: "none",
13086
+ italic: false,
13087
+ colorToken: "text",
13088
+ hoverColorToken: "primary",
13089
+ padding: "none",
13090
+ borderRadius: "none"
13091
+ },
13092
+ navLayout: {
13093
+ layout: "inline-wrap",
13094
+ align: "start",
13095
+ gapX: "default",
13096
+ gapY: "tight"
13097
+ },
13098
+ logo: {
13099
+ showLogo: true,
13100
+ showLogoText: true,
13101
+ placement: "left",
13102
+ size: "sm",
13103
+ align: "start"
13104
+ },
13105
+ bottomBar: {
13106
+ enabled: false,
13107
+ fullBleed: false,
13108
+ textAlign: "left",
13109
+ paddingX: "default",
13110
+ paddingY: "compact",
13111
+ borderTop: {
13112
+ width: "none"
13113
+ }
13114
+ }
13115
+ };
13116
+ }
12878
13117
  function mutedGroundingFooter(theme) {
12879
- return theme.footer;
13118
+ return {
13119
+ ...identityQuietFooter(theme),
13120
+ background: theme.footer.background,
13121
+ navStyle: theme.footer.navStyle,
13122
+ navColor: theme.footer.navColor,
13123
+ navWeight: theme.footer.navWeight,
13124
+ navLinkStyle: theme.footer.navLinkStyle,
13125
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
13126
+ };
12880
13127
  }
12881
13128
  function brandTwoBandFooter(theme) {
12882
13129
  return {
@@ -12981,6 +13228,53 @@ function centeredCalmFooter(theme) {
12981
13228
  }
12982
13229
  };
12983
13230
  }
13231
+ function splitEditorialFooter(theme) {
13232
+ return {
13233
+ ...theme.footer,
13234
+ variant: "split",
13235
+ maxWidth: "container",
13236
+ background: {
13237
+ type: "color",
13238
+ color: "surface"
13239
+ },
13240
+ navStyle: "minimal",
13241
+ navWeight: "regular",
13242
+ navColor: "text",
13243
+ navLinkStyle: {
13244
+ typography: "body",
13245
+ fontWeight: "regular",
13246
+ textTransform: "none",
13247
+ italic: false,
13248
+ colorToken: "text",
13249
+ hoverColorToken: "primary",
13250
+ padding: "none",
13251
+ borderRadius: "none"
13252
+ },
13253
+ navLayout: {
13254
+ layout: "inline-wrap",
13255
+ align: "start",
13256
+ gapX: "relaxed",
13257
+ gapY: "tight"
13258
+ },
13259
+ logo: {
13260
+ showLogo: true,
13261
+ showLogoText: true,
13262
+ placement: "right",
13263
+ size: "sm",
13264
+ align: "end"
13265
+ },
13266
+ bottomBar: {
13267
+ enabled: true,
13268
+ fullBleed: false,
13269
+ textAlign: "left",
13270
+ paddingX: "default",
13271
+ paddingY: "compact",
13272
+ borderTop: {
13273
+ width: "thin"
13274
+ }
13275
+ }
13276
+ };
13277
+ }
12984
13278
  function editorialColumnsFooter(theme) {
12985
13279
  return {
12986
13280
  ...theme.footer,
@@ -13023,25 +13317,47 @@ function editorialColumnsFooter(theme) {
13023
13317
  };
13024
13318
  }
13025
13319
  var footerLookCatalog = defineExactCatalog()([
13320
+ {
13321
+ id: asFooterLookId("footer-identity-quiet"),
13322
+ label: "Identity footer",
13323
+ layoutId: asFooterLayoutId("identity"),
13324
+ styleId: asFooterStyleId("quiet"),
13325
+ compile: identityQuietFooter
13326
+ },
13026
13327
  {
13027
13328
  id: asFooterLookId("footer-muted-grounding"),
13028
13329
  label: "Muted grounding footer",
13330
+ layoutId: asFooterLayoutId("identity"),
13331
+ styleId: asFooterStyleId("quiet"),
13332
+ hiddenFromLayoutStyleControls: true,
13029
13333
  compile: mutedGroundingFooter
13030
13334
  },
13031
13335
  {
13032
13336
  id: asFooterLookId("footer-centered-calm"),
13033
13337
  label: "Centered calm footer",
13338
+ layoutId: asFooterLayoutId("centered"),
13339
+ styleId: asFooterStyleId("calm"),
13034
13340
  compile: centeredCalmFooter
13035
13341
  },
13342
+ {
13343
+ id: asFooterLookId("footer-split-editorial"),
13344
+ label: "Split editorial footer",
13345
+ layoutId: asFooterLayoutId("split"),
13346
+ styleId: asFooterStyleId("editorial"),
13347
+ compile: splitEditorialFooter
13348
+ },
13036
13349
  {
13037
13350
  id: asFooterLookId("footer-editorial-columns"),
13038
13351
  label: "Editorial columns footer",
13352
+ layoutId: asFooterLayoutId("columns"),
13353
+ styleId: asFooterStyleId("editorial"),
13039
13354
  compile: editorialColumnsFooter
13040
13355
  },
13041
13356
  {
13042
13357
  id: asFooterLookId("site-footer-brand-two-band"),
13043
13358
  label: "Two-band brand footer",
13044
- maxRecommendedNavDensity: "balanced",
13359
+ layoutId: asFooterLayoutId("split"),
13360
+ styleId: asFooterStyleId("brand-band"),
13045
13361
  allowedContentPresence: ["default-footer", "default-and-blocks"],
13046
13362
  compile: brandTwoBandFooter
13047
13363
  }
@@ -13244,6 +13560,30 @@ var luxeContrastTypography = {
13244
13560
  },
13245
13561
  scale: "spacious"
13246
13562
  };
13563
+ var kirtanOrnateTypography = {
13564
+ body: {
13565
+ family: "Jost, system-ui, sans-serif",
13566
+ size: "md",
13567
+ weight: "regular",
13568
+ lineHeight: "relaxed",
13569
+ letterSpacing: "normal"
13570
+ },
13571
+ headings: {
13572
+ default: {
13573
+ family: "Marcellus, Georgia, serif",
13574
+ weight: "regular",
13575
+ lineHeight: "normal",
13576
+ letterSpacing: "normal",
13577
+ colorToken: "primary",
13578
+ italic: null,
13579
+ case: null
13580
+ },
13581
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13582
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13583
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
13584
+ },
13585
+ scale: "spacious"
13586
+ };
13247
13587
  var boldDisplayTypography = {
13248
13588
  body: {
13249
13589
  family: "Manrope, system-ui, sans-serif",
@@ -13278,16 +13618,16 @@ var originalJoyTypography = {
13278
13618
  },
13279
13619
  headings: {
13280
13620
  default: {
13281
- family: "Bricolage Grotesque, system-ui, sans-serif",
13282
- weight: "bold",
13621
+ family: "Lobster, cursive",
13622
+ weight: "regular",
13283
13623
  lineHeight: "normal",
13284
- letterSpacing: "tight",
13624
+ letterSpacing: "normal",
13285
13625
  italic: null,
13286
13626
  case: null
13287
13627
  },
13288
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13289
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13290
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
13628
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13629
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13630
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
13291
13631
  },
13292
13632
  scale: "balanced"
13293
13633
  };
@@ -13352,6 +13692,32 @@ var typographyPresets = [
13352
13692
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13353
13693
  typography: luxeContrastTypography
13354
13694
  }),
13695
+ defineTypographyPreset({
13696
+ id: "typography-preset:kirtan-ornate",
13697
+ name: "Kirtan Ornate",
13698
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
13699
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
13700
+ recommendedFonts: {
13701
+ body: ["Jost", "Manrope", "Inter"],
13702
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
13703
+ },
13704
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13705
+ typography: kirtanOrnateTypography,
13706
+ heroTypography: {
13707
+ headlineSize: "6xl",
13708
+ headlineLineHeight: "normal",
13709
+ subheadlineSize: "xl",
13710
+ subheadlineLineHeight: "relaxed",
13711
+ microHeadlineSize: "5xl",
13712
+ microHeadlineLineHeight: "normal",
13713
+ microSubheadlineSize: "lg",
13714
+ microSubheadlineLineHeight: "relaxed",
13715
+ responsive: {
13716
+ tablet: { headlineSize: "5xl" },
13717
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
13718
+ }
13719
+ }
13720
+ }),
13355
13721
  defineTypographyPreset({
13356
13722
  id: "typography-preset:bold-display",
13357
13723
  name: "Bold Display",
@@ -13381,11 +13747,11 @@ var typographyPresets = [
13381
13747
  defineTypographyPreset({
13382
13748
  id: "typography-preset:original-joy",
13383
13749
  name: "Original Joy",
13384
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
13385
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
13750
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
13751
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
13386
13752
  recommendedFonts: {
13387
13753
  body: ["DM Sans", "Inter", "Manrope"],
13388
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
13754
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
13389
13755
  },
13390
13756
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13391
13757
  typography: originalJoyTypography,
@@ -13409,6 +13775,319 @@ var typographyPresetsById = new Map(
13409
13775
  typographyPresets.map((preset2) => [preset2.id, preset2])
13410
13776
  );
13411
13777
 
13778
+ // ../theme-core/src/site-styles/designState.ts
13779
+ import { z as z25 } from "zod";
13780
+ var themeV2DesignStateSchemaVersion = 1;
13781
+ var designResolutionPolicySchema = z25.enum(["generated", "user", "admin", "sdk"]);
13782
+ var runtimeStyleFieldNameSchema = z25.enum(themeV2RuntimeStyleFieldNames);
13783
+ var nonEmptyRuntimeStyleFieldNamesSchema = z25.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
13784
+ fields3[0],
13785
+ ...fields3.slice(1)
13786
+ ]);
13787
+ var heroLegibilityStrategySchema = z25.enum([
13788
+ "none",
13789
+ "scrim-gradient",
13790
+ "solid-panel"
13791
+ ]);
13792
+ var heroCompositionIntentSchema = z25.enum([
13793
+ "center",
13794
+ "bottom-left"
13795
+ ]);
13796
+ var heroTypographyScaleIntentSchema = z25.enum([
13797
+ "quiet",
13798
+ "editorial",
13799
+ "display",
13800
+ "poster"
13801
+ ]);
13802
+ var sectionHeightIntentSchema = z25.enum([
13803
+ "default",
13804
+ "banner",
13805
+ "hero",
13806
+ "immersive"
13807
+ ]);
13808
+ var imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
13809
+ var imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
13810
+ var imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
13811
+ z25.object({ kind: z25.literal("none") }).strict(),
13812
+ z25.object({
13813
+ kind: z25.literal("brand-scrim"),
13814
+ token: z25.enum(["primary", "secondary", "accent"]),
13815
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13816
+ }).strict(),
13817
+ z25.object({
13818
+ kind: z25.literal("brand-wash"),
13819
+ token: z25.enum(["primary", "secondary", "accent"]),
13820
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13821
+ }).strict(),
13822
+ z25.object({
13823
+ kind: z25.literal("neutral-scrim"),
13824
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13825
+ }).strict(),
13826
+ z25.object({
13827
+ kind: z25.literal("neutral-wash"),
13828
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13829
+ }).strict(),
13830
+ z25.object({
13831
+ kind: z25.literal("solid-panel"),
13832
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13833
+ }).strict()
13834
+ ]);
13835
+ var testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
13836
+ var tileTreatmentSchema = z25.enum(tileTreatmentValues);
13837
+ var eventListTreatmentSchema = z25.enum(eventListTreatmentValues);
13838
+ var eyebrowTreatmentSchema = z25.enum(eyebrowTreatmentValues);
13839
+ function uniqueNonEmpty(values) {
13840
+ const uniqueValues = [...new Set(values)];
13841
+ const firstValue = uniqueValues[0];
13842
+ if (!firstValue) {
13843
+ throw new Error("Expected at least one Theme V2 design state option.");
13844
+ }
13845
+ return [firstValue, ...uniqueValues.slice(1)];
13846
+ }
13847
+ var userPanelTreatments = uniqueNonEmpty(
13848
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
13849
+ );
13850
+ var userFlushTreatments = uniqueNonEmpty(
13851
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
13852
+ );
13853
+ var userFlushBleeds = uniqueNonEmpty(
13854
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
13855
+ );
13856
+ var contentFrameIntentSchema = z25.discriminatedUnion("kind", [
13857
+ z25.object({ kind: z25.literal("plain") }).strict(),
13858
+ z25.object({
13859
+ kind: z25.literal("panel"),
13860
+ treatment: z25.enum(userPanelTreatments)
13861
+ }).strict(),
13862
+ z25.object({
13863
+ kind: z25.literal("flush-panel"),
13864
+ treatment: z25.enum(userFlushTreatments),
13865
+ bleed: z25.enum(userFlushBleeds)
13866
+ }).strict()
13867
+ ]);
13868
+ var blockDesignPlanSchema = z25.object({
13869
+ blockId: z25.string().min(1).transform(asDesignBlockId),
13870
+ blockKind: z25.string().min(1),
13871
+ purpose: z25.string().min(1),
13872
+ sectionSurface: z25.enum(userDesignOptionCatalog.sectionSurfaces),
13873
+ contentFrame: contentFrameIntentSchema,
13874
+ itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
13875
+ transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
13876
+ emphasis: z25.enum(userDesignOptionCatalog.emphases),
13877
+ sectionHeight: sectionHeightIntentSchema.optional(),
13878
+ heroLegibility: heroLegibilityStrategySchema.optional(),
13879
+ heroComposition: heroCompositionIntentSchema.optional(),
13880
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
13881
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
13882
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
13883
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
13884
+ tileTreatment: tileTreatmentSchema.optional(),
13885
+ eventListTreatment: eventListTreatmentSchema.optional(),
13886
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
13887
+ }).strict();
13888
+ var styleAuthoritySchema = z25.discriminatedUnion("kind", [
13889
+ z25.object({
13890
+ kind: z25.literal("theme-v2"),
13891
+ source: designResolutionPolicySchema,
13892
+ siteStyleId: z25.string().min(1).transform(asSiteStyleId),
13893
+ templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
13894
+ templateVersion: z25.number().int().nonnegative(),
13895
+ resolverVersion: z25.number().int().nonnegative()
13896
+ }).strict(),
13897
+ z25.object({
13898
+ kind: z25.literal("legacy-raw"),
13899
+ reason: z25.enum(["pre-theme-v2", "manual-runtime-fields"])
13900
+ }).strict(),
13901
+ z25.object({
13902
+ kind: z25.literal("advanced-detached"),
13903
+ reason: z25.literal("detached-custom-runtime-fields")
13904
+ }).strict()
13905
+ ]);
13906
+ var blockRuntimeStyleAuthoritySchema = z25.object({
13907
+ unit: z25.literal("block-runtime-fields"),
13908
+ blockId: z25.string().min(1).transform(asDesignBlockId),
13909
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
13910
+ authority: styleAuthoritySchema
13911
+ }).strict();
13912
+ var persistedPageDesignStateV1Schema = z25.object({
13913
+ schemaVersion: z25.literal(themeV2DesignStateSchemaVersion),
13914
+ siteStyleId: z25.string().min(1).transform(asSiteStyleId),
13915
+ templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
13916
+ templateVersion: z25.number().int().nonnegative(),
13917
+ resolverVersion: z25.number().int().nonnegative(),
13918
+ rhythmPresetId: z25.string().min(1),
13919
+ blocks: z25.array(blockDesignPlanSchema),
13920
+ styleAuthorities: z25.array(blockRuntimeStyleAuthoritySchema)
13921
+ }).strict();
13922
+
13923
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
13924
+ function defineDesignRuntimeRules(rules) {
13925
+ return rules;
13926
+ }
13927
+ function defineComponentRuntimeRules(rules) {
13928
+ return rules;
13929
+ }
13930
+ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
13931
+ sectionSurfaces: {
13932
+ base: {},
13933
+ "muted-band": {
13934
+ background: {
13935
+ type: "color",
13936
+ color: "muted"
13937
+ }
13938
+ },
13939
+ "accent-band": {
13940
+ background: {
13941
+ type: "color",
13942
+ color: "primary"
13943
+ }
13944
+ },
13945
+ "brand-depth-band": {
13946
+ background: {
13947
+ type: "color",
13948
+ color: "primary-800"
13949
+ }
13950
+ },
13951
+ "hero-image": {
13952
+ background: {
13953
+ type: "image",
13954
+ opacity: 1,
13955
+ position: "center center",
13956
+ ...uniformSectionForeground("text")
13957
+ }
13958
+ }
13959
+ },
13960
+ heroLegibility: {
13961
+ "scrim-gradient": {
13962
+ type: "gradient",
13963
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
13964
+ opacity: 1
13965
+ },
13966
+ "solid-panel": {
13967
+ type: "color",
13968
+ color: "surface",
13969
+ opacity: 0.88
13970
+ }
13971
+ },
13972
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
13973
+ });
13974
+ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
13975
+ panelFrames: {
13976
+ inset: {
13977
+ spacing: "comfortable",
13978
+ rounded: "xl",
13979
+ raised: false,
13980
+ background: {
13981
+ type: "color",
13982
+ color: "surfaceAlt",
13983
+ textColor: "text"
13984
+ }
13985
+ },
13986
+ raised: {
13987
+ spacing: "comfortable",
13988
+ rounded: "xl",
13989
+ raised: true,
13990
+ background: {
13991
+ type: "color",
13992
+ color: "surfaceAlt",
13993
+ textColor: "text"
13994
+ }
13995
+ },
13996
+ editorial: {
13997
+ spacing: "medium",
13998
+ rounded: "xl",
13999
+ raised: false,
14000
+ background: {
14001
+ type: "color",
14002
+ color: "surface",
14003
+ textColor: "text"
14004
+ }
14005
+ }
14006
+ },
14007
+ flushFrames: {
14008
+ "media-panel": {
14009
+ fullWidth: true,
14010
+ spacing: "none",
14011
+ rounded: "none",
14012
+ raised: false
14013
+ }
14014
+ },
14015
+ itemSurfaces: {
14016
+ none: null,
14017
+ default: {
14018
+ spacing: "medium",
14019
+ rounded: "lg",
14020
+ raised: false
14021
+ },
14022
+ flat: {
14023
+ spacing: "medium",
14024
+ rounded: "lg",
14025
+ raised: false
14026
+ },
14027
+ outlined: {
14028
+ spacing: "medium",
14029
+ rounded: "lg",
14030
+ raised: false,
14031
+ border: {
14032
+ enabled: true,
14033
+ width: "1",
14034
+ colorToken: "border"
14035
+ }
14036
+ },
14037
+ raised: {
14038
+ spacing: "medium",
14039
+ rounded: "xl",
14040
+ raised: true
14041
+ },
14042
+ inset: {
14043
+ treatment: "soft-panel",
14044
+ spacing: "comfortable",
14045
+ rounded: "xl",
14046
+ raised: false,
14047
+ border: {
14048
+ enabled: false
14049
+ },
14050
+ background: {
14051
+ type: "color",
14052
+ color: "surfaceAlt",
14053
+ textColor: "text"
14054
+ }
14055
+ },
14056
+ editorial: {
14057
+ // Boxless open column with a short rule on top; the visual treatment
14058
+ // lives in blocks-static/card-treatments.css.
14059
+ treatment: "editorial-rule",
14060
+ spacing: "none",
14061
+ rounded: "none",
14062
+ raised: false,
14063
+ border: {
14064
+ enabled: false
14065
+ }
14066
+ },
14067
+ "color-blocked": {
14068
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
14069
+ // (by position) and staggered offset live in
14070
+ // blocks-static/card-treatments.css; here we set the shared shape:
14071
+ // generous padding, large radius, no border, flat (no shadow).
14072
+ treatment: "color-blocked",
14073
+ spacing: "spacious",
14074
+ rounded: "2xl",
14075
+ raised: false,
14076
+ border: {
14077
+ enabled: false
14078
+ }
14079
+ }
14080
+ }
14081
+ });
14082
+ function uniformSectionForeground(token) {
14083
+ return {
14084
+ textColor: token,
14085
+ headingColor: token,
14086
+ linkColor: token,
14087
+ supportingColor: token
14088
+ };
14089
+ }
14090
+
13412
14091
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
13413
14092
  var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
13414
14093
  var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
@@ -13427,6 +14106,7 @@ var curatedSiteStyleIdValues = [
13427
14106
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
13428
14107
  "site-style:bold-launch",
13429
14108
  "site-style:south-west-twerk-school",
14109
+ "site-style:kirtan-ornate",
13430
14110
  "site-style:original-joy"
13431
14111
  ];
13432
14112
  var quietBudget = {
@@ -13453,6 +14133,50 @@ var expressiveBudget = {
13453
14133
  mediaDensity: "high",
13454
14134
  decorativeRepetition: "medium"
13455
14135
  };
14136
+ var kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
14137
+ ...defaultDesignRuntimeRules,
14138
+ defaultEyebrowTreatment: "accent",
14139
+ sectionSurfaces: {
14140
+ ...defaultDesignRuntimeRules.sectionSurfaces,
14141
+ "muted-band": {
14142
+ background: {
14143
+ type: "color",
14144
+ color: "muted"
14145
+ },
14146
+ foreground: {
14147
+ textColor: "text",
14148
+ headingColor: "primary",
14149
+ linkColor: "primary",
14150
+ supportingColor: "text"
14151
+ }
14152
+ },
14153
+ "brand-depth-band": {
14154
+ background: {
14155
+ type: "color",
14156
+ color: "primary-800"
14157
+ },
14158
+ foreground: {
14159
+ textColor: "text",
14160
+ headingColor: "primary",
14161
+ linkColor: "primary",
14162
+ supportingColor: "text"
14163
+ }
14164
+ },
14165
+ "hero-image": {
14166
+ background: {
14167
+ type: "image",
14168
+ opacity: 1,
14169
+ position: "center center"
14170
+ },
14171
+ foreground: {
14172
+ textColor: "text",
14173
+ headingColor: "primary",
14174
+ linkColor: "primary",
14175
+ supportingColor: "text"
14176
+ }
14177
+ }
14178
+ }
14179
+ });
13456
14180
  var expressiveUnderlineInputs = {
13457
14181
  base: {
13458
14182
  background: { type: "transparent" },
@@ -13490,6 +14214,43 @@ var expressiveUnderlineInputs = {
13490
14214
  opacity: 0.6
13491
14215
  }
13492
14216
  };
14217
+ var ornateDarkInputs = {
14218
+ base: {
14219
+ background: { type: "solid", colorToken: "surfaceAlt" },
14220
+ textColorToken: "text",
14221
+ border: {
14222
+ widthClass: "border",
14223
+ colorToken: "primary/45",
14224
+ style: "all"
14225
+ },
14226
+ corners: "square",
14227
+ shadow: null,
14228
+ spacing: "medium",
14229
+ fontSize: "base"
14230
+ },
14231
+ label: {
14232
+ textColorToken: "primary",
14233
+ fontWeight: "semibold",
14234
+ fontSize: "xs",
14235
+ textTransform: "uppercase",
14236
+ letterSpacing: "wider",
14237
+ opacity: 1
14238
+ },
14239
+ focus: {
14240
+ ringColorToken: "primary/18",
14241
+ ringWidth: "2",
14242
+ borderColorToken: "primary/70"
14243
+ },
14244
+ error: {
14245
+ borderColorToken: "destructive",
14246
+ textColorToken: "destructive"
14247
+ },
14248
+ disabled: {
14249
+ backgroundColorToken: "muted",
14250
+ textColorToken: "mutedText",
14251
+ opacity: 0.6
14252
+ }
14253
+ };
13493
14254
  function uniqueContentFrameKinds() {
13494
14255
  const kinds = [
13495
14256
  ...new Set(
@@ -13547,6 +14308,7 @@ function defineCuratedSiteStyle(input) {
13547
14308
  // clean/minimal styles default to none.
13548
14309
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
13549
14310
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
14311
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
13550
14312
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
13551
14313
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
13552
14314
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -14497,6 +15259,80 @@ var curatedSiteStyles = [
14497
15259
  paletteChoice("high-contrast-ink")
14498
15260
  ]
14499
15261
  }),
15262
+ defineCuratedSiteStyle({
15263
+ id: "site-style:kirtan-ornate",
15264
+ name: "Kirtan Ornate",
15265
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
15266
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
15267
+ generationBrief: "Use a deep plum ground with pale gold as the main brand color, rose accent details, cream text, spacious split hero sections, devotional editorial headings, compact event lists, and framed conversion sections. The mood should feel soulful and ceremonial, not gothic or theatrical.",
15268
+ selectionKeywordRules: [
15269
+ { kind: "word", value: "kirtan" },
15270
+ { kind: "word", value: "chanting" },
15271
+ { kind: "word", value: "ceremony" },
15272
+ { kind: "word", value: "devotional" }
15273
+ ],
15274
+ tokenRecipes: {
15275
+ palette: "brand-led",
15276
+ contrast: "strong",
15277
+ radius: "soft",
15278
+ shadow: "subtle",
15279
+ typography: "serif-editorial",
15280
+ spacing: "airy",
15281
+ motion: "subtle"
15282
+ },
15283
+ compositionBudget: expressiveBudget,
15284
+ typographyPresetChoices: [
15285
+ typographyChoice("typography-preset:kirtan-ornate"),
15286
+ typographyChoice("typography-preset:luxe-contrast"),
15287
+ typographyChoice("typography-preset:editorial-serif")
15288
+ ],
15289
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
15290
+ themeOverrides: {
15291
+ accordions: warmInsetAccordionSystem,
15292
+ cards: originalJoyCardSystem,
15293
+ testimonialQuote: serifDisplayQuote,
15294
+ bodyText: {
15295
+ intro: {
15296
+ paragraphSize: "editorial",
15297
+ headingSize: "editorial"
15298
+ }
15299
+ },
15300
+ inputs: ornateDarkInputs
15301
+ },
15302
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
15303
+ recommendedAppearancePresetIds: [
15304
+ "hero-brand-scrim-fixed-frame",
15305
+ "media-text-quiet-story",
15306
+ "events-lined-panel",
15307
+ "schedule-details-brand-depth",
15308
+ "testimonials-statement-cards",
15309
+ "contact-form-panel"
15310
+ ],
15311
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
15312
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
15313
+ recommendedHeaderStyleChoicesByLayout: {
15314
+ floating: [
15315
+ headerStyleChoice("minimal-surface"),
15316
+ headerStyleChoice("split-glass"),
15317
+ headerStyleChoice("glass")
15318
+ ]
15319
+ },
15320
+ recommendedHeaderLookIds: ["minimal-transparent"],
15321
+ recommendedFooterLookIds: [
15322
+ "site-footer-brand-two-band",
15323
+ "footer-muted-grounding"
15324
+ ],
15325
+ buttonPersonalityChoices: [
15326
+ buttonChoice("ornate-ritual"),
15327
+ buttonChoice("joy-stamp"),
15328
+ buttonChoice("ink-stamp")
15329
+ ],
15330
+ paletteVariantChoices: [
15331
+ paletteChoice("warm-dark-kirtan-gold"),
15332
+ paletteChoice("warm-dark-ember"),
15333
+ paletteChoice("brand-led-burgundy-gold")
15334
+ ]
15335
+ }),
14500
15336
  defineCuratedSiteStyle({
14501
15337
  id: "site-style:original-joy",
14502
15338
  name: "Original Joy",
@@ -14603,319 +15439,6 @@ var pageFlowPresets = [
14603
15439
  }
14604
15440
  ];
14605
15441
 
14606
- // ../theme-core/src/site-styles/designState.ts
14607
- import { z as z25 } from "zod";
14608
- var themeV2DesignStateSchemaVersion = 1;
14609
- var designResolutionPolicySchema = z25.enum(["generated", "user", "admin", "sdk"]);
14610
- var runtimeStyleFieldNameSchema = z25.enum(themeV2RuntimeStyleFieldNames);
14611
- var nonEmptyRuntimeStyleFieldNamesSchema = z25.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
14612
- fields3[0],
14613
- ...fields3.slice(1)
14614
- ]);
14615
- var heroLegibilityStrategySchema = z25.enum([
14616
- "none",
14617
- "scrim-gradient",
14618
- "solid-panel"
14619
- ]);
14620
- var heroCompositionIntentSchema = z25.enum([
14621
- "center",
14622
- "bottom-left"
14623
- ]);
14624
- var heroTypographyScaleIntentSchema = z25.enum([
14625
- "quiet",
14626
- "editorial",
14627
- "display",
14628
- "poster"
14629
- ]);
14630
- var sectionHeightIntentSchema = z25.enum([
14631
- "default",
14632
- "banner",
14633
- "hero",
14634
- "immersive"
14635
- ]);
14636
- var imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
14637
- var imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
14638
- var imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
14639
- z25.object({ kind: z25.literal("none") }).strict(),
14640
- z25.object({
14641
- kind: z25.literal("brand-scrim"),
14642
- token: z25.enum(["primary", "secondary", "accent"]),
14643
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14644
- }).strict(),
14645
- z25.object({
14646
- kind: z25.literal("brand-wash"),
14647
- token: z25.enum(["primary", "secondary", "accent"]),
14648
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14649
- }).strict(),
14650
- z25.object({
14651
- kind: z25.literal("neutral-scrim"),
14652
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14653
- }).strict(),
14654
- z25.object({
14655
- kind: z25.literal("neutral-wash"),
14656
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14657
- }).strict(),
14658
- z25.object({
14659
- kind: z25.literal("solid-panel"),
14660
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14661
- }).strict()
14662
- ]);
14663
- var testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
14664
- var tileTreatmentSchema = z25.enum(tileTreatmentValues);
14665
- var eventListTreatmentSchema = z25.enum(eventListTreatmentValues);
14666
- var eyebrowTreatmentSchema = z25.enum(eyebrowTreatmentValues);
14667
- function uniqueNonEmpty(values) {
14668
- const uniqueValues = [...new Set(values)];
14669
- const firstValue = uniqueValues[0];
14670
- if (!firstValue) {
14671
- throw new Error("Expected at least one Theme V2 design state option.");
14672
- }
14673
- return [firstValue, ...uniqueValues.slice(1)];
14674
- }
14675
- var userPanelTreatments = uniqueNonEmpty(
14676
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
14677
- );
14678
- var userFlushTreatments = uniqueNonEmpty(
14679
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
14680
- );
14681
- var userFlushBleeds = uniqueNonEmpty(
14682
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
14683
- );
14684
- var contentFrameIntentSchema = z25.discriminatedUnion("kind", [
14685
- z25.object({ kind: z25.literal("plain") }).strict(),
14686
- z25.object({
14687
- kind: z25.literal("panel"),
14688
- treatment: z25.enum(userPanelTreatments)
14689
- }).strict(),
14690
- z25.object({
14691
- kind: z25.literal("flush-panel"),
14692
- treatment: z25.enum(userFlushTreatments),
14693
- bleed: z25.enum(userFlushBleeds)
14694
- }).strict()
14695
- ]);
14696
- var blockDesignPlanSchema = z25.object({
14697
- blockId: z25.string().min(1).transform(asDesignBlockId),
14698
- blockKind: z25.string().min(1),
14699
- purpose: z25.string().min(1),
14700
- sectionSurface: z25.enum(userDesignOptionCatalog.sectionSurfaces),
14701
- contentFrame: contentFrameIntentSchema,
14702
- itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
14703
- transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
14704
- emphasis: z25.enum(userDesignOptionCatalog.emphases),
14705
- sectionHeight: sectionHeightIntentSchema.optional(),
14706
- heroLegibility: heroLegibilityStrategySchema.optional(),
14707
- heroComposition: heroCompositionIntentSchema.optional(),
14708
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
14709
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
14710
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
14711
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
14712
- tileTreatment: tileTreatmentSchema.optional(),
14713
- eventListTreatment: eventListTreatmentSchema.optional(),
14714
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
14715
- }).strict();
14716
- var styleAuthoritySchema = z25.discriminatedUnion("kind", [
14717
- z25.object({
14718
- kind: z25.literal("theme-v2"),
14719
- source: designResolutionPolicySchema,
14720
- siteStyleId: z25.string().min(1).transform(asSiteStyleId),
14721
- templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
14722
- templateVersion: z25.number().int().nonnegative(),
14723
- resolverVersion: z25.number().int().nonnegative()
14724
- }).strict(),
14725
- z25.object({
14726
- kind: z25.literal("legacy-raw"),
14727
- reason: z25.enum(["pre-theme-v2", "manual-runtime-fields"])
14728
- }).strict(),
14729
- z25.object({
14730
- kind: z25.literal("advanced-detached"),
14731
- reason: z25.literal("detached-custom-runtime-fields")
14732
- }).strict()
14733
- ]);
14734
- var blockRuntimeStyleAuthoritySchema = z25.object({
14735
- unit: z25.literal("block-runtime-fields"),
14736
- blockId: z25.string().min(1).transform(asDesignBlockId),
14737
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
14738
- authority: styleAuthoritySchema
14739
- }).strict();
14740
- var persistedPageDesignStateV1Schema = z25.object({
14741
- schemaVersion: z25.literal(themeV2DesignStateSchemaVersion),
14742
- siteStyleId: z25.string().min(1).transform(asSiteStyleId),
14743
- templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
14744
- templateVersion: z25.number().int().nonnegative(),
14745
- resolverVersion: z25.number().int().nonnegative(),
14746
- rhythmPresetId: z25.string().min(1),
14747
- blocks: z25.array(blockDesignPlanSchema),
14748
- styleAuthorities: z25.array(blockRuntimeStyleAuthoritySchema)
14749
- }).strict();
14750
-
14751
- // ../theme-core/src/site-styles/runtimeCompiler.ts
14752
- function defineDesignRuntimeRules(rules) {
14753
- return rules;
14754
- }
14755
- function defineComponentRuntimeRules(rules) {
14756
- return rules;
14757
- }
14758
- var defaultDesignRuntimeRules = defineDesignRuntimeRules({
14759
- sectionSurfaces: {
14760
- base: {},
14761
- "muted-band": {
14762
- background: {
14763
- type: "color",
14764
- color: "muted"
14765
- }
14766
- },
14767
- "accent-band": {
14768
- background: {
14769
- type: "color",
14770
- color: "primary"
14771
- }
14772
- },
14773
- "brand-depth-band": {
14774
- background: {
14775
- type: "color",
14776
- color: "primary-800"
14777
- }
14778
- },
14779
- "hero-image": {
14780
- background: {
14781
- type: "image",
14782
- opacity: 1,
14783
- position: "center center",
14784
- ...uniformSectionForeground("text")
14785
- }
14786
- }
14787
- },
14788
- heroLegibility: {
14789
- "scrim-gradient": {
14790
- type: "gradient",
14791
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
14792
- opacity: 1
14793
- },
14794
- "solid-panel": {
14795
- type: "color",
14796
- color: "surface",
14797
- opacity: 0.88
14798
- }
14799
- },
14800
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
14801
- });
14802
- var defaultComponentRuntimeRules = defineComponentRuntimeRules({
14803
- panelFrames: {
14804
- inset: {
14805
- spacing: "comfortable",
14806
- rounded: "xl",
14807
- raised: false,
14808
- background: {
14809
- type: "color",
14810
- color: "surfaceAlt",
14811
- textColor: "text"
14812
- }
14813
- },
14814
- raised: {
14815
- spacing: "comfortable",
14816
- rounded: "xl",
14817
- raised: true,
14818
- background: {
14819
- type: "color",
14820
- color: "surfaceAlt",
14821
- textColor: "text"
14822
- }
14823
- },
14824
- editorial: {
14825
- spacing: "medium",
14826
- rounded: "xl",
14827
- raised: false,
14828
- background: {
14829
- type: "color",
14830
- color: "surface",
14831
- textColor: "text"
14832
- }
14833
- }
14834
- },
14835
- flushFrames: {
14836
- "media-panel": {
14837
- fullWidth: true,
14838
- spacing: "none",
14839
- rounded: "none",
14840
- raised: false
14841
- }
14842
- },
14843
- itemSurfaces: {
14844
- none: null,
14845
- default: {
14846
- spacing: "medium",
14847
- rounded: "lg",
14848
- raised: false
14849
- },
14850
- flat: {
14851
- spacing: "medium",
14852
- rounded: "lg",
14853
- raised: false
14854
- },
14855
- outlined: {
14856
- spacing: "medium",
14857
- rounded: "lg",
14858
- raised: false,
14859
- border: {
14860
- enabled: true,
14861
- width: "1",
14862
- colorToken: "border"
14863
- }
14864
- },
14865
- raised: {
14866
- spacing: "medium",
14867
- rounded: "xl",
14868
- raised: true
14869
- },
14870
- inset: {
14871
- treatment: "soft-panel",
14872
- spacing: "comfortable",
14873
- rounded: "xl",
14874
- raised: false,
14875
- border: {
14876
- enabled: false
14877
- },
14878
- background: {
14879
- type: "color",
14880
- color: "surfaceAlt",
14881
- textColor: "text"
14882
- }
14883
- },
14884
- editorial: {
14885
- // Boxless open column with a short rule on top; the visual treatment
14886
- // lives in blocks-static/card-treatments.css.
14887
- treatment: "editorial-rule",
14888
- spacing: "none",
14889
- rounded: "none",
14890
- raised: false,
14891
- border: {
14892
- enabled: false
14893
- }
14894
- },
14895
- "color-blocked": {
14896
- // Bold, flat colour-blocked cards. The per-card background colour cycle
14897
- // (by position) and staggered offset live in
14898
- // blocks-static/card-treatments.css; here we set the shared shape:
14899
- // generous padding, large radius, no border, flat (no shadow).
14900
- treatment: "color-blocked",
14901
- spacing: "spacious",
14902
- rounded: "2xl",
14903
- raised: false,
14904
- border: {
14905
- enabled: false
14906
- }
14907
- }
14908
- }
14909
- });
14910
- function uniformSectionForeground(token) {
14911
- return {
14912
- textColor: token,
14913
- headingColor: token,
14914
- linkColor: token,
14915
- supportingColor: token
14916
- };
14917
- }
14918
-
14919
15442
  // ../theme-core/src/site-styles/generatedSchemas.ts
14920
15443
  import { z as z26 } from "zod";
14921
15444
  function uniqueNonEmpty2(values) {
@@ -15727,6 +16250,31 @@ function cardStylesField(options = {}) {
15727
16250
  return createBoxStylesFieldWithDepth("card", options);
15728
16251
  }
15729
16252
 
16253
+ // ../blocks/src/system/fields/imageShape.ts
16254
+ var standardImageShapeOptions = [
16255
+ { value: "default", label: "Default" },
16256
+ { value: "square", label: "Square corners" },
16257
+ { value: "rounded", label: "Rounded corners" },
16258
+ { value: "circle", label: "Circle" },
16259
+ { value: "arch", label: "Arch" }
16260
+ ];
16261
+ function createImageShapeField(options = {}) {
16262
+ return {
16263
+ id: options.id ?? "imageShape",
16264
+ type: "select",
16265
+ label: options.label ?? "Image shape",
16266
+ ...options.description ? { description: options.description } : {},
16267
+ required: false,
16268
+ defaultValue: options.defaultValue ?? "default",
16269
+ multiple: false,
16270
+ options: [...standardImageShapeOptions],
16271
+ ui: {
16272
+ intent: options.uiIntent ?? "display",
16273
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
16274
+ }
16275
+ };
16276
+ }
16277
+
15730
16278
  // ../blocks/src/utils/env.ts
15731
16279
  function isDevEnvironment() {
15732
16280
  try {
@@ -16541,7 +17089,7 @@ function buildFooterNavAll(common) {
16541
17089
  return stack(
16542
17090
  { className: common.className, gap: common.gap, align: "stretch" },
16543
17091
  [item],
16544
- when(collectionPath)
17092
+ whenCollectionHasItems(collectionPath)
16545
17093
  );
16546
17094
  }
16547
17095
  function buildFooterNavLinksOnly(common) {
@@ -16574,7 +17122,7 @@ function buildFooterNavLinksOnly(common) {
16574
17122
  return stack(
16575
17123
  { className: common.className, gap: common.gap, align: "stretch" },
16576
17124
  [item],
16577
- when(collectionPath)
17125
+ whenCollectionHasItems(collectionPath)
16578
17126
  );
16579
17127
  }
16580
17128
  function buildFooterNavFlatten(common) {
@@ -16623,9 +17171,20 @@ function buildFooterNavFlatten(common) {
16623
17171
  return stack(
16624
17172
  { className: common.className, gap: common.gap, align: "stretch" },
16625
17173
  [item],
16626
- when(collectionPath)
17174
+ whenCollectionHasItems(collectionPath)
16627
17175
  );
16628
17176
  }
17177
+ var whenCollectionHasItems = (collectionPath) => (node) => ({
17178
+ ...node,
17179
+ $when: {
17180
+ when: {
17181
+ from: collectionPath,
17182
+ transforms: [{ id: "array.length" }]
17183
+ },
17184
+ equals: 0,
17185
+ not: true
17186
+ }
17187
+ });
16629
17188
  function footerNav(opts) {
16630
17189
  const mode = opts?.mode ?? "all";
16631
17190
  const collectionPath = opts?.collectionPath ?? "footerMenu.items";
@@ -19340,8 +19899,23 @@ function fragmentsToRepeaterField(id, label, fragments, options = {}) {
19340
19899
  var heroLayoutControlsFragment = defineFragment({
19341
19900
  id: "heroLayoutControls",
19342
19901
  title: "Hero Layout",
19343
- description: "Alignment and content width controls for hero layouts.",
19902
+ description: "Title scale, alignment, and content width controls for hero layouts.",
19344
19903
  fields: [
19904
+ {
19905
+ id: "titleSize",
19906
+ type: "select",
19907
+ label: "Title size",
19908
+ description: "Adjust the visual scale of the hero title.",
19909
+ required: false,
19910
+ ui: { intent: "display" },
19911
+ options: [
19912
+ { value: "auto", label: "Auto" },
19913
+ { value: "quiet", label: "Normal" },
19914
+ { value: "editorial", label: "Large" },
19915
+ { value: "display", label: "Huge" },
19916
+ { value: "poster", label: "Poster" }
19917
+ ]
19918
+ },
19345
19919
  {
19346
19920
  id: "contentAlignment",
19347
19921
  type: "select",
@@ -20136,7 +20710,18 @@ function heroSplitImagePane() {
20136
20710
  return stack(
20137
20711
  {
20138
20712
  gap: "none",
20139
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
20713
+ className: {
20714
+ $bind: {
20715
+ from: "content.imageShape",
20716
+ transforms: [
20717
+ {
20718
+ id: "ui.imageShapeClassName",
20719
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
20720
+ }
20721
+ ],
20722
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
20723
+ }
20724
+ },
20140
20725
  style: {
20141
20726
  minHeight: "clamp(18rem, 36vw, 34rem)"
20142
20727
  }
@@ -20254,6 +20839,12 @@ var heroConfig = {
20254
20839
  label: "Content card",
20255
20840
  renderInHeader: true,
20256
20841
  intent: "style"
20842
+ }),
20843
+ createImageShapeField({
20844
+ id: "imageShape",
20845
+ label: "Image shape",
20846
+ defaultValue: "default",
20847
+ uiIntent: "display"
20257
20848
  })
20258
20849
  ],
20259
20850
  layout: classicLayout,
@@ -20268,6 +20859,15 @@ var heroConfig = {
20268
20859
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
20269
20860
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
20270
20861
  icon: "Sparkles",
20862
+ previewCustomize: {
20863
+ quickFieldPriority: [
20864
+ "titleSize",
20865
+ "contentAlignment",
20866
+ "contentMaxWidth",
20867
+ "verticalAlignment",
20868
+ "imageShape"
20869
+ ]
20870
+ },
20271
20871
  styleTokens: {
20272
20872
  typography: "display",
20273
20873
  spacing: "xl"
@@ -20284,7 +20884,8 @@ var standardAspectRatioOptions = [
20284
20884
  { value: "16/9", label: "16:9 (Landscape)" },
20285
20885
  { value: "4/3", label: "4:3 (Standard)" },
20286
20886
  { value: "1/1", label: "1:1 (Square)" },
20287
- { value: "3/4", label: "3:4 (Portrait)" }
20887
+ { value: "3/4", label: "3:4 (Portrait)" },
20888
+ { value: "9/16", label: "9:16 (Tall portrait)" }
20288
20889
  ];
20289
20890
  function createAspectRatioField(options = {}) {
20290
20891
  return {
@@ -21526,6 +22127,258 @@ var formBlockDefinition = {
21526
22127
  runtime: formBlockRuntime
21527
22128
  };
21528
22129
 
22130
+ // ../blocks/src/system/blocks/contact-newsletter.ts
22131
+ var contactNewsletterLayout = styledSection({
22132
+ children: sectionContainer([
22133
+ el(
22134
+ "div",
22135
+ { className: "contact-newsletter-grid" },
22136
+ [
22137
+ el(
22138
+ "div",
22139
+ { className: "contact-newsletter-column contact-newsletter-contact" },
22140
+ [
22141
+ el(
22142
+ "div",
22143
+ { className: "contact-newsletter-copy" },
22144
+ [
22145
+ text(
22146
+ {
22147
+ as: "h2",
22148
+ className: "form-copy-title"
22149
+ },
22150
+ when("contactTitle"),
22151
+ bind("contactTitle")
22152
+ ),
22153
+ richText(
22154
+ {
22155
+ className: "form-copy-intro rb-prose rb-max-w-none"
22156
+ },
22157
+ when("contactIntro"),
22158
+ bind("contactIntro")
22159
+ )
22160
+ ]
22161
+ ),
22162
+ el(
22163
+ "form",
22164
+ withApiBindings({
22165
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
22166
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
22167
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
22168
+ }),
22169
+ [],
22170
+ bind("data.form")
22171
+ )
22172
+ ]
22173
+ ),
22174
+ el(
22175
+ "div",
22176
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
22177
+ [
22178
+ el(
22179
+ "div",
22180
+ { className: "contact-newsletter-copy" },
22181
+ [
22182
+ text(
22183
+ {
22184
+ as: "h2",
22185
+ className: "newsletter-copy-title"
22186
+ },
22187
+ when("newsletterTitle"),
22188
+ bind("newsletterTitle")
22189
+ ),
22190
+ richText(
22191
+ {
22192
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
22193
+ },
22194
+ when("newsletterSubtitle"),
22195
+ bind("newsletterSubtitle")
22196
+ )
22197
+ ]
22198
+ ),
22199
+ el(
22200
+ "newsletter-form",
22201
+ withApiBindings({
22202
+ listId: { $bind: { from: "listId" } },
22203
+ preset: { $bind: { from: "preset" } },
22204
+ includePhone: { $bind: { from: "includePhone" } },
22205
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
22206
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
22207
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
22208
+ tags: { $bind: { from: "newsletterTags" } },
22209
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
22210
+ }),
22211
+ []
22212
+ )
22213
+ ]
22214
+ )
22215
+ ]
22216
+ )
22217
+ ], {
22218
+ className: "contact-newsletter-container"
22219
+ }),
22220
+ baseClass: "",
22221
+ spacing: "medium",
22222
+ background: "surface"
22223
+ });
22224
+ var contactNewsletterManifest = createBlockManifest({
22225
+ id: "block.contact-newsletter",
22226
+ title: "Contact + Newsletter",
22227
+ titleSource: "contactTitle",
22228
+ description: "Two-column newsletter signup and contact form section.",
22229
+ category: "interactive",
22230
+ layout: contactNewsletterLayout,
22231
+ defaultVariant: "default",
22232
+ variants: {
22233
+ default: contactNewsletterLayout
22234
+ },
22235
+ variantOptions: {
22236
+ default: {
22237
+ label: "Two column",
22238
+ description: "Newsletter and contact form side by side.",
22239
+ icon: "Columns2"
22240
+ }
22241
+ },
22242
+ additionalFields: [
22243
+ {
22244
+ id: "newsletterTitle",
22245
+ type: "text",
22246
+ label: "Newsletter title",
22247
+ defaultValue: "Stay connected"
22248
+ },
22249
+ {
22250
+ id: "newsletterSubtitle",
22251
+ type: "richText",
22252
+ label: "Newsletter intro"
22253
+ },
22254
+ {
22255
+ id: "listId",
22256
+ type: "reference",
22257
+ label: "Newsletter list",
22258
+ description: "Select the list new subscribers should be added to.",
22259
+ required: true,
22260
+ referenceKind: "newsletterList",
22261
+ allowManualEntry: false,
22262
+ ui: { intent: "behavior" }
22263
+ },
22264
+ {
22265
+ id: "preset",
22266
+ type: "select",
22267
+ label: "Newsletter fields",
22268
+ defaultValue: "emailOnly",
22269
+ ui: { intent: "display" },
22270
+ options: [
22271
+ { value: "emailOnly", label: "Email only" },
22272
+ { value: "emailName", label: "Email + Name" },
22273
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
22274
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
22275
+ ]
22276
+ },
22277
+ {
22278
+ id: "includePhone",
22279
+ type: "boolean",
22280
+ label: "Include phone field",
22281
+ defaultValue: false,
22282
+ ui: { intent: "display" }
22283
+ },
22284
+ {
22285
+ id: "newsletterButtonLabel",
22286
+ type: "text",
22287
+ label: "Newsletter button label",
22288
+ defaultValue: "Subscribe",
22289
+ ui: { intent: "display" }
22290
+ },
22291
+ {
22292
+ id: "newsletterSuccessMessage",
22293
+ type: "text",
22294
+ label: "Newsletter success message",
22295
+ defaultValue: "Thanks for subscribing!",
22296
+ ui: { intent: "behavior" }
22297
+ },
22298
+ {
22299
+ id: "newsletterPrivacyNote",
22300
+ type: "text",
22301
+ label: "Privacy note",
22302
+ ui: { intent: "display" }
22303
+ },
22304
+ {
22305
+ id: "newsletterTags",
22306
+ type: "text",
22307
+ label: "Newsletter tags",
22308
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
22309
+ ui: { intent: "behavior" }
22310
+ },
22311
+ {
22312
+ id: "contactTitle",
22313
+ type: "text",
22314
+ label: "Contact title",
22315
+ defaultValue: "Get in touch"
22316
+ },
22317
+ {
22318
+ id: "contactIntro",
22319
+ type: "richText",
22320
+ label: "Contact intro"
22321
+ },
22322
+ {
22323
+ id: "formSlug",
22324
+ type: "reference",
22325
+ label: "Contact form",
22326
+ description: "Pick a saved form to render.",
22327
+ required: true,
22328
+ referenceKind: "form",
22329
+ allowManualEntry: false,
22330
+ ui: { intent: "behavior" }
22331
+ },
22332
+ {
22333
+ id: "contactSubmitLabel",
22334
+ type: "text",
22335
+ label: "Contact button label",
22336
+ defaultValue: "Send message",
22337
+ ui: { intent: "display" }
22338
+ },
22339
+ {
22340
+ id: "contactSuccessMessage",
22341
+ type: "text",
22342
+ label: "Contact success message",
22343
+ defaultValue: "Thanks - we received your message.",
22344
+ ui: { intent: "behavior" }
22345
+ }
22346
+ ],
22347
+ styleTokens: {
22348
+ background: "surface",
22349
+ typography: "body",
22350
+ spacing: "md"
22351
+ },
22352
+ behaviours: {
22353
+ supportsThemeSwitching: true,
22354
+ inlineEditing: true,
22355
+ animation: false,
22356
+ paletteHidden: false
22357
+ },
22358
+ tags: [
22359
+ "contact",
22360
+ "newsletter",
22361
+ "signup",
22362
+ "email",
22363
+ "form",
22364
+ "lead-capture"
22365
+ ],
22366
+ icon: "MailPlus"
22367
+ });
22368
+ var contactNewsletterBlockDefinition = {
22369
+ manifest: contactNewsletterManifest,
22370
+ dataSchemas: { form: formDataSchema.optional() },
22371
+ dataLoaders: {
22372
+ form: {
22373
+ endpoint: "getPublicFormById",
22374
+ params: {
22375
+ formSlug: { $bind: { from: "formSlug" } }
22376
+ },
22377
+ mode: "server"
22378
+ }
22379
+ }
22380
+ };
22381
+
21529
22382
  // ../blocks/src/system/blocks/faq.ts
21530
22383
  function fragmentLayoutNode2(layout) {
21531
22384
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -21754,6 +22607,7 @@ var joinClasses3 = (parts) => parts.filter(
21754
22607
  ).join(" ").replace(/\s+/g, " ").trim();
21755
22608
  var eyebrowTreatmentClassMap = {
21756
22609
  plain: "",
22610
+ accent: "rb-eyebrow-treatment-accent",
21757
22611
  pill: "rb-eyebrow-treatment-pill",
21758
22612
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
21759
22613
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -21780,6 +22634,13 @@ var imageGalleryCornerClassMap = {
21780
22634
  "2xl": "rb-rounded-2xl",
21781
22635
  "3xl": "rb-rounded-3xl"
21782
22636
  };
22637
+ var imageShapeClassMap = {
22638
+ default: "",
22639
+ square: "rb-media-shape-square",
22640
+ rounded: "rb-media-shape-rounded",
22641
+ circle: "rb-media-shape-circle",
22642
+ arch: "rb-media-shape-arch"
22643
+ };
21783
22644
  var parseRatio = (raw) => {
21784
22645
  if (typeof raw !== "string") return null;
21785
22646
  const value = raw.trim();
@@ -21924,6 +22785,10 @@ function resolveHeroContentMaxWidth(content) {
21924
22785
  return "default";
21925
22786
  }
21926
22787
  function resolveHeroTypographyScale(content) {
22788
+ const titleSize = readString(content, "titleSize");
22789
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
22790
+ return titleSize;
22791
+ }
21927
22792
  const raw = readHeroLayoutString(
21928
22793
  content,
21929
22794
  "typographyScale",
@@ -22165,6 +23030,16 @@ var uiTransforms = [
22165
23030
  heroGridClassFromVerticalAlignmentTransform,
22166
23031
  imageFragmentClassTransform,
22167
23032
  imageFragmentSizeTransform,
23033
+ {
23034
+ id: "ui.imageShapeClassName",
23035
+ kind: "string",
23036
+ summary: "Apply a constrained media shape class",
23037
+ run: (value, options) => {
23038
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
23039
+ const shape = typeof value === "string" ? value.trim() : "default";
23040
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
23041
+ }
23042
+ },
22168
23043
  conditionalClassTransform,
22169
23044
  twoColumnContainerClassTransform,
22170
23045
  twoColumnFlexBasisTransform,
@@ -23558,6 +24433,21 @@ var siteHeaderManifest = createBlockManifest({
23558
24433
  id: "block.site-header",
23559
24434
  title: "Site Header",
23560
24435
  category: "layout",
24436
+ additionalFields: [
24437
+ {
24438
+ id: "mode",
24439
+ type: "select",
24440
+ label: "Header display",
24441
+ required: false,
24442
+ multiple: false,
24443
+ defaultValue: "default",
24444
+ options: [
24445
+ { value: "default", label: "Show header" },
24446
+ { value: "hidden", label: "Hide header" }
24447
+ ],
24448
+ ui: { intent: "display" }
24449
+ }
24450
+ ],
23561
24451
  // Skip section styles - this block uses theme-based styling
23562
24452
  skipSectionStyles: true,
23563
24453
  // Block manages its own wrapper - enables sticky positioning
@@ -24970,6 +25860,9 @@ var mediaTextManifest = createBlockManifest({
24970
25860
  category: "layout",
24971
25861
  includeContainerStyles: true,
24972
25862
  titleSource: "title",
25863
+ previewCustomize: {
25864
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
25865
+ },
24973
25866
  additionalFields: [
24974
25867
  {
24975
25868
  id: "images",
@@ -25008,7 +25901,7 @@ var mediaTextManifest = createBlockManifest({
25008
25901
  {
25009
25902
  id: "titleAlignment",
25010
25903
  type: "select",
25011
- label: "Title alignment",
25904
+ label: "Content alignment",
25012
25905
  required: false,
25013
25906
  defaultValue: "left",
25014
25907
  multiple: false,
@@ -25066,7 +25959,18 @@ var mediaTextManifest = createBlockManifest({
25066
25959
  transition: "slide"
25067
25960
  },
25068
25961
  ui: { intent: "behavior" }
25069
- }),
25962
+ }).map((field) => ({
25963
+ ...field,
25964
+ ui: {
25965
+ ...field.ui ?? {},
25966
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
25967
+ allOf: [
25968
+ { field: "images", minItems: 2 },
25969
+ { field: "carouselAutoplay", equals: true }
25970
+ ]
25971
+ } : { field: "images", minItems: 2 }
25972
+ }
25973
+ })),
25070
25974
  createAspectRatioField({
25071
25975
  id: "aspectRatio",
25072
25976
  label: "Media aspect ratio",
@@ -25074,6 +25978,12 @@ var mediaTextManifest = createBlockManifest({
25074
25978
  defaultValue: "auto",
25075
25979
  visibleWhen: { field: "images", notEquals: null }
25076
25980
  }),
25981
+ createImageShapeField({
25982
+ id: "imageShape",
25983
+ label: "Media shape",
25984
+ defaultValue: "default",
25985
+ visibleWhen: { field: "images", notEquals: null }
25986
+ }),
25077
25987
  {
25078
25988
  id: "text",
25079
25989
  type: "richText",
@@ -25107,6 +26017,30 @@ var mediaTextManifest = createBlockManifest({
25107
26017
  ...options?.not ? { not: true } : {}
25108
26018
  }
25109
26019
  });
26020
+ const bodyClassNameFromAlignment = {
26021
+ $bind: {
26022
+ from: "content.titleAlignment",
26023
+ transforms: [
26024
+ {
26025
+ id: "ui.bodyClassFromAlignment",
26026
+ options: { base: "rb-prose rb-max-w-none" }
26027
+ }
26028
+ ],
26029
+ fallback: "rb-prose rb-max-w-none"
26030
+ }
26031
+ };
26032
+ const titleClassNameFromAlignment = {
26033
+ $bind: {
26034
+ from: "content.titleAlignment",
26035
+ transforms: [
26036
+ {
26037
+ id: "ui.headingClassFromAlignment",
26038
+ options: { base: "" }
26039
+ }
26040
+ ],
26041
+ fallback: ""
26042
+ }
26043
+ };
25110
26044
  const defaultTextColumn = el("div", {}, [
25111
26045
  styledCard(
25112
26046
  [
@@ -25131,8 +26065,55 @@ var mediaTextManifest = createBlockManifest({
25131
26065
  bind("content.text")
25132
26066
  )
25133
26067
  ]);
26068
+ const bioTextColumn = el(
26069
+ "div",
26070
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
26071
+ [
26072
+ text(
26073
+ {
26074
+ as: "h2",
26075
+ className: titleClassNameFromAlignment
26076
+ },
26077
+ when("content.title"),
26078
+ bind("content.title")
26079
+ ),
26080
+ styledCard(
26081
+ [
26082
+ richText(
26083
+ {
26084
+ className: bodyClassNameFromAlignment
26085
+ },
26086
+ bind("content.text")
26087
+ )
26088
+ ],
26089
+ {
26090
+ stylesFrom: "content._textCardStyles",
26091
+ backgroundFrom: "content._textCardStyles.background"
26092
+ },
26093
+ when("content.wrapTextInCard")
26094
+ ),
26095
+ richText(
26096
+ {
26097
+ className: bodyClassNameFromAlignment
26098
+ },
26099
+ when("content.wrapTextInCard", { not: true }),
26100
+ bind("content.text")
26101
+ )
26102
+ ]
26103
+ );
25134
26104
  const defaultImageCommonProps = {
25135
- className: "rb-w-full rb-h-auto rb-object-cover",
26105
+ className: {
26106
+ $bind: {
26107
+ from: "content.imageShape",
26108
+ transforms: [
26109
+ {
26110
+ id: "ui.imageShapeClassName",
26111
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
26112
+ }
26113
+ ],
26114
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
26115
+ }
26116
+ },
25136
26117
  style: {
25137
26118
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
25138
26119
  }
@@ -25173,6 +26154,27 @@ var mediaTextManifest = createBlockManifest({
25173
26154
  ],
25174
26155
  whenImagesLength(0, { not: true })
25175
26156
  );
26157
+ const bioImagesLayout = el(
26158
+ "div",
26159
+ {},
26160
+ [
26161
+ responsiveTwoColumn({
26162
+ image: el("div", {}, [
26163
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
26164
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
26165
+ ]),
26166
+ text: bioTextColumn,
26167
+ ratioFrom: "content.ratio",
26168
+ imagePositionFrom: "content.imagePosition",
26169
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
26170
+ gapFrom: "content.gap",
26171
+ gapFallback: "comfortable",
26172
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
26173
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
26174
+ })
26175
+ ],
26176
+ whenImagesLength(0, { not: true })
26177
+ );
25176
26178
  const defaultTextOnlyLayout = el(
25177
26179
  "div",
25178
26180
  {},
@@ -25202,7 +26204,45 @@ var mediaTextManifest = createBlockManifest({
25202
26204
  ],
25203
26205
  whenImagesLength(0)
25204
26206
  );
26207
+ const bioTextOnlyLayout = el(
26208
+ "div",
26209
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
26210
+ [
26211
+ text(
26212
+ {
26213
+ as: "h2",
26214
+ className: titleClassNameFromAlignment
26215
+ },
26216
+ when("content.title"),
26217
+ bind("content.title")
26218
+ ),
26219
+ styledCard(
26220
+ [
26221
+ richText(
26222
+ {
26223
+ className: bodyClassNameFromAlignment
26224
+ },
26225
+ bind("content.text")
26226
+ )
26227
+ ],
26228
+ {
26229
+ stylesFrom: "content._textCardStyles",
26230
+ backgroundFrom: "content._textCardStyles.background"
26231
+ },
26232
+ when("content.wrapTextInCard")
26233
+ ),
26234
+ richText(
26235
+ {
26236
+ className: bodyClassNameFromAlignment
26237
+ },
26238
+ when("content.wrapTextInCard", { not: true }),
26239
+ bind("content.text")
26240
+ )
26241
+ ],
26242
+ whenImagesLength(0)
26243
+ );
25205
26244
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
26245
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
25206
26246
  const defaultLayout2 = styledSection({
25207
26247
  children: styledContainer({
25208
26248
  rootType: "stack",
@@ -25211,18 +26251,7 @@ var mediaTextManifest = createBlockManifest({
25211
26251
  text(
25212
26252
  {
25213
26253
  as: "h2",
25214
- className: {
25215
- $bind: {
25216
- from: "content.titleAlignment",
25217
- transforms: [
25218
- {
25219
- id: "ui.headingClassFromAlignment",
25220
- options: { base: "" }
25221
- }
25222
- ],
25223
- fallback: ""
25224
- }
25225
- }
26254
+ className: titleClassNameFromAlignment
25226
26255
  },
25227
26256
  when("content.title"),
25228
26257
  bind("content.title")
@@ -25234,14 +26263,28 @@ var mediaTextManifest = createBlockManifest({
25234
26263
  baseClass: "",
25235
26264
  spacing: "medium"
25236
26265
  });
26266
+ const bioLayout = styledSection({
26267
+ children: styledContainer({
26268
+ rootType: "stack",
26269
+ rootProps: { gap: "lg" },
26270
+ children: [bioInner]
26271
+ }),
26272
+ baseClass: "",
26273
+ spacing: "medium"
26274
+ });
25237
26275
  return {
25238
26276
  layout: defaultLayout2,
25239
26277
  variants: {
25240
- default: defaultLayout2
26278
+ default: defaultLayout2,
26279
+ bio: bioLayout
25241
26280
  },
25242
26281
  defaultVariant: "default",
25243
26282
  variantOptions: {
25244
- default: { label: "Default" }
26283
+ default: { label: "Default" },
26284
+ bio: {
26285
+ label: "Bio",
26286
+ description: "Vertically centered title and copy beside media."
26287
+ }
25245
26288
  }
25246
26289
  };
25247
26290
  })(),
@@ -25947,6 +26990,126 @@ var occurrenceContextSchema = z44.object({
25947
26990
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
25948
26991
  import { z as z46 } from "zod";
25949
26992
 
26993
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
26994
+ var DEFAULT_EVENT_CURRENCY = "USD";
26995
+ function resolveRuntimeEventPricing(event) {
26996
+ if (isPublicEventPricing(event.pricing)) {
26997
+ return event.pricing;
26998
+ }
26999
+ const legacy = event;
27000
+ const currency = readCurrency(legacy.currency);
27001
+ if (event.requiresRegistration === false) {
27002
+ return {
27003
+ kind: "drop_in",
27004
+ currency,
27005
+ display: { kind: "free", currency }
27006
+ };
27007
+ }
27008
+ if (legacy.pricingMode === "ticket_types") {
27009
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
27010
+ return {
27011
+ kind: "ticket_types",
27012
+ currency,
27013
+ ticketTypes,
27014
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
27015
+ };
27016
+ }
27017
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
27018
+ if (legacy.pricingType === "paid" && amount > 0) {
27019
+ return {
27020
+ kind: "single_paid",
27021
+ amount,
27022
+ currency,
27023
+ display: { kind: "exact", amount, currency }
27024
+ };
27025
+ }
27026
+ return {
27027
+ kind: "free_registration",
27028
+ currency,
27029
+ display: { kind: "free", currency }
27030
+ };
27031
+ }
27032
+ function readCurrency(value) {
27033
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
27034
+ }
27035
+ function isRecord5(value) {
27036
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27037
+ }
27038
+ function isPublicEventPricing(value) {
27039
+ if (!isRecord5(value) || typeof value.kind !== "string") return false;
27040
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
27041
+ }
27042
+ function isPublicEventTicketType(value) {
27043
+ return isRecord5(value) && typeof value.id === "string";
27044
+ }
27045
+ function readTicketTypePriceDisplay(value, currency) {
27046
+ const display = readLegacyPriceDisplay(value, currency);
27047
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
27048
+ }
27049
+ function readLegacyPriceDisplay(value, currency) {
27050
+ if (!isRecord5(value) || typeof value.kind !== "string") {
27051
+ return { kind: "unavailable", currency };
27052
+ }
27053
+ const displayCurrency = readCurrency(value.currency);
27054
+ switch (value.kind) {
27055
+ case "free":
27056
+ return { kind: "free", currency: displayCurrency };
27057
+ case "exact":
27058
+ return readAmount(value.amount) !== null ? {
27059
+ kind: "exact",
27060
+ amount: readAmount(value.amount) ?? 0,
27061
+ currency: displayCurrency
27062
+ } : { kind: "unavailable", currency };
27063
+ case "from":
27064
+ return readAmount(value.amount) !== null ? {
27065
+ kind: "from",
27066
+ amount: readAmount(value.amount) ?? 0,
27067
+ currency: displayCurrency
27068
+ } : { kind: "unavailable", currency };
27069
+ case "mixed":
27070
+ return readAmount(value.paidFromAmount) !== null ? {
27071
+ kind: "mixed",
27072
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
27073
+ currency: displayCurrency
27074
+ } : { kind: "unavailable", currency };
27075
+ case "unavailable":
27076
+ return { kind: "unavailable", currency: displayCurrency };
27077
+ case "course":
27078
+ return isRecord5(value.display) ? {
27079
+ kind: "course",
27080
+ display: readCoursePriceDisplay(value.display, displayCurrency)
27081
+ } : {
27082
+ kind: "course",
27083
+ display: { kind: "unavailable", currency: displayCurrency }
27084
+ };
27085
+ default:
27086
+ return { kind: "unavailable", currency };
27087
+ }
27088
+ }
27089
+ function readCoursePriceDisplay(value, currency) {
27090
+ switch (value.kind) {
27091
+ case "free":
27092
+ return { kind: "free", currency: readCurrency(value.currency) };
27093
+ case "exact":
27094
+ return readAmount(value.amount) !== null ? {
27095
+ kind: "exact",
27096
+ amount: readAmount(value.amount) ?? 0,
27097
+ currency: readCurrency(value.currency)
27098
+ } : { kind: "unavailable", currency };
27099
+ case "from":
27100
+ return readAmount(value.amount) !== null ? {
27101
+ kind: "from",
27102
+ amount: readAmount(value.amount) ?? 0,
27103
+ currency: readCurrency(value.currency)
27104
+ } : { kind: "unavailable", currency };
27105
+ default:
27106
+ return { kind: "unavailable", currency };
27107
+ }
27108
+ }
27109
+ function readAmount(value) {
27110
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
27111
+ }
27112
+
25950
27113
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
25951
27114
  import { z as z45 } from "zod";
25952
27115
 
@@ -25977,11 +27140,21 @@ var filterAutoShowSchema = z45.enum(["auto", "always", "never"]);
25977
27140
  var calendarTabViewsSchema = z45.enum(["both", "month", "week"]);
25978
27141
 
25979
27142
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
27143
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
27144
+ var [
27145
+ eventRegistrationGenericDateStepLabel,
27146
+ eventRegistrationGenericTicketsStepLabel,
27147
+ eventRegistrationGenericDetailsStepLabel
27148
+ ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
25980
27149
  var contentEntrySchema = z46.object({
25981
27150
  id: z46.string(),
25982
27151
  slug: z46.string(),
25983
27152
  contentTypeSlug: z46.string()
25984
27153
  });
27154
+ var eventRegistrationPublicEventSchema = z46.preprocess(
27155
+ normalizeEventRegistrationEventInput,
27156
+ publicEventSchema
27157
+ );
25985
27158
  var eventRegistrationSourceSchema = z46.object({
25986
27159
  siteId: z46.string().optional(),
25987
27160
  apiBaseUrl: z46.string().optional(),
@@ -25989,7 +27162,7 @@ var eventRegistrationSourceSchema = z46.object({
25989
27162
  previewToken: z46.string().nullable().optional(),
25990
27163
  occurrenceContext: occurrenceContextSchema.optional(),
25991
27164
  contentEntry: contentEntrySchema.nullable().optional(),
25992
- events: z46.array(publicEventSchema).nullable().optional(),
27165
+ events: z46.array(eventRegistrationPublicEventSchema).nullable().optional(),
25993
27166
  className: z46.string().nullable().optional(),
25994
27167
  buttonText: z46.string().nullable().optional(),
25995
27168
  maxTickets: z46.string().nullable().optional(),
@@ -26004,14 +27177,21 @@ var eventRegistrationSourceSchema = z46.object({
26004
27177
  });
26005
27178
  var eventRegistrationDisplaySchema = z46.object({
26006
27179
  kind: z46.literal("event-registration"),
26007
- state: z46.literal("shell"),
27180
+ state: z46.literal("generic-shell"),
26008
27181
  className: z46.string().nullable(),
27182
+ titleText: z46.string(),
27183
+ bodyText: z46.string(),
27184
+ stepLabels: z46.tuple([
27185
+ z46.literal(eventRegistrationGenericDateStepLabel),
27186
+ z46.literal(eventRegistrationGenericTicketsStepLabel),
27187
+ z46.literal(eventRegistrationGenericDetailsStepLabel)
27188
+ ]),
26009
27189
  summaryButtonText: z46.string()
26010
27190
  });
26011
27191
  var eventRegistrationHydrationSchema = z46.object({
26012
27192
  occurrenceContext: occurrenceContextSchema.optional(),
26013
27193
  contentEntry: contentEntrySchema.nullable().optional(),
26014
- events: z46.array(publicEventSchema).nullable().optional(),
27194
+ events: z46.array(eventRegistrationPublicEventSchema).nullable().optional(),
26015
27195
  maxTickets: z46.string().optional(),
26016
27196
  showVenue: z46.boolean().optional(),
26017
27197
  showCapacity: z46.boolean().optional(),
@@ -26042,8 +27222,11 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
26042
27222
  function buildEventRegistrationDisplay(source) {
26043
27223
  return {
26044
27224
  kind: "event-registration",
26045
- state: "shell",
27225
+ state: "generic-shell",
26046
27226
  className: source.className ?? null,
27227
+ titleText: "Event registration",
27228
+ bodyText: "Preparing dates, tickets, and booking details.",
27229
+ stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
26047
27230
  summaryButtonText: source.buttonText?.trim() || "Register"
26048
27231
  };
26049
27232
  }
@@ -26070,6 +27253,18 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
26070
27253
  }
26071
27254
  })
26072
27255
  });
27256
+ function normalizeEventRegistrationEventInput(value) {
27257
+ if (!isRecord6(value)) {
27258
+ return value;
27259
+ }
27260
+ return {
27261
+ ...value,
27262
+ pricing: resolveRuntimeEventPricing(value)
27263
+ };
27264
+ }
27265
+ function isRecord6(value) {
27266
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27267
+ }
26073
27268
  var eventRegistrationInteractiveIslandPropsCodec = createInteractiveIslandCodec({
26074
27269
  runtime: eventRegistrationBlockRuntime,
26075
27270
  mode: "event-registration",
@@ -27919,7 +29114,9 @@ function formatPublicEventPriceDisplay(display) {
27919
29114
  }
27920
29115
  }
27921
29116
  function formatEventPrice(event) {
27922
- return formatPublicEventPriceDisplay(publicEventPricingDisplay(event.pricing));
29117
+ return formatPublicEventPriceDisplay(
29118
+ publicEventPricingDisplay(resolveRuntimeEventPricing(event))
29119
+ );
27923
29120
  }
27924
29121
  function resolveEventCta(event, buttonText) {
27925
29122
  const { isFull: isSoldOut } = getEventAvailability(event);
@@ -30982,7 +32179,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
30982
32179
  return keys.length >= 2 ? keys : [];
30983
32180
  }
30984
32181
  function normalizeOfferingsPreviewContentForWrite(value) {
30985
- if (!isRecord5(value)) return null;
32182
+ if (!isRecord7(value)) return null;
30986
32183
  const groupOrderValue = value.groupOrder;
30987
32184
  if (Array.isArray(groupOrderValue)) {
30988
32185
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -30995,7 +32192,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
30995
32192
  return { ...value, groupOrder: [] };
30996
32193
  }
30997
32194
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
30998
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
32195
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord7) : []
30999
32196
  );
31000
32197
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
31001
32198
  }
@@ -31049,7 +32246,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
31049
32246
  }
31050
32247
  return keys;
31051
32248
  }
31052
- function isRecord5(value) {
32249
+ function isRecord7(value) {
31053
32250
  return typeof value === "object" && value !== null && !Array.isArray(value);
31054
32251
  }
31055
32252
  function mergeOrderedKeysWithDefaults(orderedKeys, defaultKeys) {
@@ -31511,7 +32708,7 @@ function isOfferingsPreviewItemLimit(value) {
31511
32708
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
31512
32709
  }
31513
32710
  function normalizeOfferingsPreviewGroupOverride(value) {
31514
- if (!isRecord6(value)) return [];
32711
+ if (!isRecord8(value)) return [];
31515
32712
  const override = {};
31516
32713
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
31517
32714
  override.sourceKey = value.sourceKey;
@@ -31543,12 +32740,12 @@ function isButtonVariant(value) {
31543
32740
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
31544
32741
  }
31545
32742
  function normalizeCardStylesContent(value) {
31546
- return isRecord6(value) || value === null ? value : void 0;
32743
+ return isRecord8(value) || value === null ? value : void 0;
31547
32744
  }
31548
32745
  function normalizeSectionStylesContent(value) {
31549
- return isRecord6(value) || value === null ? value : void 0;
32746
+ return isRecord8(value) || value === null ? value : void 0;
31550
32747
  }
31551
- function isRecord6(value) {
32748
+ function isRecord8(value) {
31552
32749
  return typeof value === "object" && value !== null && !Array.isArray(value);
31553
32750
  }
31554
32751
 
@@ -35627,11 +36824,13 @@ var heroImageSurfaceMotions = [
35627
36824
  ];
35628
36825
  var standardEyebrowTreatments = [
35629
36826
  "plain",
36827
+ "accent",
35630
36828
  "pill",
35631
36829
  "accent-pill"
35632
36830
  ];
35633
36831
  var animatedEyebrowTreatments = [
35634
36832
  "plain",
36833
+ "accent",
35635
36834
  "pill",
35636
36835
  "accent-pill",
35637
36836
  "pill-bounce",
@@ -35932,6 +37131,17 @@ var systemBlockDefinitionsRaw = [
35932
37131
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
35933
37132
  ]
35934
37133
  })),
37134
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
37135
+ flow: conversionFlow,
37136
+ layoutProfiles: [
37137
+ layoutProfile({
37138
+ variantKey: "default",
37139
+ family: "split",
37140
+ weight: "featured",
37141
+ bias: "soft"
37142
+ })
37143
+ ]
37144
+ })),
35935
37145
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
35936
37146
  sectionSurfaces: "supported",
35937
37147
  contentFrames: ["plain", "panel"],
@@ -36023,6 +37233,12 @@ var systemBlockDefinitionsRaw = [
36023
37233
  family: "media-text",
36024
37234
  weight: "featured",
36025
37235
  bias: "soft"
37236
+ }),
37237
+ layoutProfile({
37238
+ variantKey: "bio",
37239
+ family: "media-text",
37240
+ weight: "featured",
37241
+ bias: "soft"
36026
37242
  })
36027
37243
  ]
36028
37244
  })),
@@ -36833,7 +38049,7 @@ import React4 from "react";
36833
38049
  // ../blocks/src/system/data/linkedContentEntries.ts
36834
38050
  var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
36835
38051
  function coerceLinkedContentEntriesPayload(payload) {
36836
- if (!isRecord7(payload)) return payload;
38052
+ if (!isRecord9(payload)) return payload;
36837
38053
  const response = payload;
36838
38054
  if (!Array.isArray(response.entries)) return payload;
36839
38055
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -36841,16 +38057,16 @@ function coerceLinkedContentEntriesPayload(payload) {
36841
38057
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
36842
38058
  }
36843
38059
  function getLinkedContentEntryMeta(value) {
36844
- if (!isRecord7(value)) return null;
38060
+ if (!isRecord9(value)) return null;
36845
38061
  const candidate = value[LINKED_CONTENT_ENTRY_META_KEY];
36846
38062
  return isLinkedContentEntryMeta(candidate) ? candidate : null;
36847
38063
  }
36848
38064
  function buildLinkedContentEditTarget(input) {
36849
38065
  const { entry, sourceBlockId, sourceBlockKind, itemIndex } = input;
36850
- if (!isRecord7(entry)) return null;
38066
+ if (!isRecord9(entry)) return null;
36851
38067
  const meta = getLinkedContentEntryMeta(entry);
36852
38068
  if (!meta || meta.support.kind !== "supported") return null;
36853
- const content = isRecord7(entry.content) ? entry.content : {};
38069
+ const content = isRecord9(entry.content) ? entry.content : {};
36854
38070
  return {
36855
38071
  kind: "linked-content-entry",
36856
38072
  entryId: meta.entryId,
@@ -36900,12 +38116,12 @@ function resolveLinkedEntryInlineFieldEligibility(input) {
36900
38116
  };
36901
38117
  }
36902
38118
  function enrichLinkedContentEntry(entry, contentType) {
36903
- if (!isRecord7(entry)) return entry;
38119
+ if (!isRecord9(entry)) return entry;
36904
38120
  const entryId = typeof entry.id === "string" ? entry.id : null;
36905
38121
  if (!entryId) return entry;
36906
38122
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
36907
38123
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
36908
- const content = isRecord7(entry.content) ? entry.content : {};
38124
+ const content = isRecord9(entry.content) ? entry.content : {};
36909
38125
  const meta = {
36910
38126
  kind: "linked-content-entry",
36911
38127
  entryId,
@@ -37001,7 +38217,7 @@ function capitalize(value) {
37001
38217
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
37002
38218
  }
37003
38219
  function parsePublicContentTypeMeta(value) {
37004
- if (!isRecord7(value)) return null;
38220
+ if (!isRecord9(value)) return null;
37005
38221
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
37006
38222
  return {
37007
38223
  key: value.key,
@@ -37011,7 +38227,7 @@ function parsePublicContentTypeMeta(value) {
37011
38227
  };
37012
38228
  }
37013
38229
  function parsePublicContentTypeLinkedEntryEditing(value) {
37014
- if (!isRecord7(value) || typeof value.kind !== "string") return null;
38230
+ if (!isRecord9(value) || typeof value.kind !== "string") return null;
37015
38231
  switch (value.kind) {
37016
38232
  case "generic":
37017
38233
  return { kind: "generic" };
@@ -37025,7 +38241,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
37025
38241
  }
37026
38242
  }
37027
38243
  function parsePublicContentTypeFieldMeta(value) {
37028
- if (!isRecord7(value)) return [];
38244
+ if (!isRecord9(value)) return [];
37029
38245
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
37030
38246
  return [{
37031
38247
  id: value.id,
@@ -37040,14 +38256,14 @@ function parseStringArray(value) {
37040
38256
  return value.filter((item) => typeof item === "string");
37041
38257
  }
37042
38258
  function isLinkedContentEntryMeta(value) {
37043
- if (!isRecord7(value)) return false;
38259
+ if (!isRecord9(value)) return false;
37044
38260
  if (value.kind !== "linked-content-entry") return false;
37045
38261
  if (typeof value.entryId !== "string") return false;
37046
38262
  if (typeof value.contentTypeKey !== "string") return false;
37047
38263
  if (typeof value.contentTypeLabel !== "string") return false;
37048
38264
  if (typeof value.title !== "string") return false;
37049
38265
  if (!(value.optimisticHash === null || typeof value.optimisticHash === "string")) return false;
37050
- if (!isRecord7(value.contentType)) return false;
38266
+ if (!isRecord9(value.contentType)) return false;
37051
38267
  if (!isLinkedEntryFieldSourceArray(value.fieldSources)) return false;
37052
38268
  return isLinkedContentEditSupport(value.support);
37053
38269
  }
@@ -37055,7 +38271,7 @@ function isLinkedEntryFieldSourceArray(value) {
37055
38271
  return Array.isArray(value) && value.every(isLinkedEntryFieldSource);
37056
38272
  }
37057
38273
  function isLinkedEntryFieldSource(value) {
37058
- if (!isRecord7(value)) return false;
38274
+ if (!isRecord9(value)) return false;
37059
38275
  if (typeof value.displayPath !== "string") return false;
37060
38276
  switch (value.kind) {
37061
38277
  case "content-field":
@@ -37081,7 +38297,7 @@ function isLinkedEntryInlineFieldReadOnlyReason(value) {
37081
38297
  }
37082
38298
  }
37083
38299
  function isLinkedContentEditSupport(value) {
37084
- if (!isRecord7(value) || typeof value.kind !== "string") return false;
38300
+ if (!isRecord9(value) || typeof value.kind !== "string") return false;
37085
38301
  switch (value.kind) {
37086
38302
  case "supported":
37087
38303
  return true;
@@ -37093,7 +38309,7 @@ function isLinkedContentEditSupport(value) {
37093
38309
  return false;
37094
38310
  }
37095
38311
  }
37096
- function isRecord7(value) {
38312
+ function isRecord9(value) {
37097
38313
  return typeof value === "object" && value !== null && !Array.isArray(value);
37098
38314
  }
37099
38315
 
@@ -38620,12 +39836,12 @@ function toTrimmedString(value) {
38620
39836
  return trimmed ? trimmed : void 0;
38621
39837
  }
38622
39838
  function normalizeBookingFormConfig(form2) {
38623
- if (!isRecord8(form2)) return null;
39839
+ if (!isRecord10(form2)) return null;
38624
39840
  const id = readNonEmptyString(form2.id);
38625
39841
  const name = readNonEmptyString(form2.name);
38626
39842
  if (!id || !name) return null;
38627
- const schemaSource = isRecord8(form2.schema) ? form2.schema : isRecord8(form2.schemaJson) ? form2.schemaJson : null;
38628
- const settingsSource = isRecord8(form2.settings) ? form2.settings : isRecord8(form2.settingsJson) ? form2.settingsJson : null;
39843
+ const schemaSource = isRecord10(form2.schema) ? form2.schema : isRecord10(form2.schemaJson) ? form2.schemaJson : null;
39844
+ const settingsSource = isRecord10(form2.settings) ? form2.settings : isRecord10(form2.settingsJson) ? form2.settingsJson : null;
38629
39845
  return {
38630
39846
  id,
38631
39847
  name,
@@ -38649,10 +39865,10 @@ function normalizeBookingServices(services) {
38649
39865
  if (Array.isArray(services)) {
38650
39866
  return services.filter(isBookingFormService).map(normalizeService);
38651
39867
  }
38652
- if (isRecord8(services) && "services" in services) {
39868
+ if (isRecord10(services) && "services" in services) {
38653
39869
  return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
38654
39870
  }
38655
- return isRecord8(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
39871
+ return isRecord10(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
38656
39872
  }
38657
39873
  function normalizeBookingSchema(value) {
38658
39874
  if (!value) return void 0;
@@ -38664,7 +39880,7 @@ function normalizeBookingSchema(value) {
38664
39880
  };
38665
39881
  }
38666
39882
  function readBookingFormField(value) {
38667
- if (!isRecord8(value)) return null;
39883
+ if (!isRecord10(value)) return null;
38668
39884
  const id = readNonEmptyString(value.id);
38669
39885
  const label = readNonEmptyString(value.label);
38670
39886
  const type = readBookingFieldType(value.type);
@@ -38710,7 +39926,7 @@ function readBookingFieldOptions(value) {
38710
39926
  return options.length > 0 ? options : void 0;
38711
39927
  }
38712
39928
  function readBookingFieldOption(value) {
38713
- if (!isRecord8(value)) return null;
39929
+ if (!isRecord10(value)) return null;
38714
39930
  const optionValue = readNonEmptyString(value.value);
38715
39931
  const label = readNonEmptyString(value.label);
38716
39932
  return optionValue && label ? { value: optionValue, label } : null;
@@ -38727,7 +39943,7 @@ function normalizeBookingSettings(value) {
38727
39943
  };
38728
39944
  }
38729
39945
  function isBookingFormService(value) {
38730
- return isRecord8(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
39946
+ return isRecord10(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
38731
39947
  }
38732
39948
  function readNonEmptyString(value) {
38733
39949
  if (typeof value !== "string") return null;
@@ -38745,7 +39961,7 @@ function readStringArray(value) {
38745
39961
  const strings = value.filter((item) => typeof item === "string");
38746
39962
  return strings.length > 0 ? strings : void 0;
38747
39963
  }
38748
- function isRecord8(value) {
39964
+ function isRecord10(value) {
38749
39965
  return typeof value === "object" && value !== null;
38750
39966
  }
38751
39967
 
@@ -39193,8 +40409,9 @@ function EventDetailsView({
39193
40409
  priceCents: selected.course.priceCents,
39194
40410
  currency: selected.course.currency
39195
40411
  }) : null;
39196
- const eventPricingType = publicEventPricingType(selected.pricing);
39197
- const eventPricingCurrency = publicEventPricingCurrency(selected.pricing) ?? "USD";
40412
+ const eventPricing = resolveRuntimeEventPricing(selected);
40413
+ const eventPricingType = publicEventPricingType(eventPricing);
40414
+ const eventPricingCurrency = publicEventPricingCurrency(eventPricing) ?? "USD";
39198
40415
  const isPaid = eventPricingType === "paid";
39199
40416
  const shouldShowCoursePricing = showCost && !isDropIn && coursePricing !== null;
39200
40417
  const shouldShowEventCost = showCost && isPaid && !isDropIn && coursePricing === null;
@@ -41362,6 +42579,9 @@ var EventListingSSR = (props2) => {
41362
42579
 
41363
42580
  // ../blocks/src/system/runtime/nodes/event-registration.server.tsx
41364
42581
  import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
42582
+ function cx(...classes) {
42583
+ return classes.filter((className) => Boolean(className)).join(" ");
42584
+ }
41365
42585
  function EventRegistrationSSR({
41366
42586
  blockId,
41367
42587
  siteId,
@@ -41404,6 +42624,7 @@ function EventRegistrationSSR({
41404
42624
  stage,
41405
42625
  supportEmail
41406
42626
  });
42627
+ const display = islandProps.render.display;
41407
42628
  return /* @__PURE__ */ jsxs34(
41408
42629
  "div",
41409
42630
  {
@@ -41415,12 +42636,52 @@ function EventRegistrationSSR({
41415
42636
  ...getIslandRootProps("event-registration", blockId),
41416
42637
  children: [
41417
42638
  /* @__PURE__ */ jsx48(IslandPropsScript, { value: islandProps }),
41418
- /* @__PURE__ */ jsx48("div", { className: "event-registration__summary", children: /* @__PURE__ */ jsx48("strong", { children: "Loading booking options..." }) }),
42639
+ /* @__PURE__ */ jsx48(EventRegistrationShell, { display }),
41419
42640
  children
41420
42641
  ]
41421
42642
  }
41422
42643
  );
41423
42644
  }
42645
+ function EventRegistrationShell({
42646
+ display
42647
+ }) {
42648
+ 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: [
42649
+ /* @__PURE__ */ jsxs34("div", { className: "er-payment-layout-main", children: [
42650
+ /* @__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) => {
42651
+ const isActive = index === 0;
42652
+ return /* @__PURE__ */ jsxs34("li", { className: "er-step", children: [
42653
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-circle", isActive && "er-step-circle--active"), children: index + 1 }),
42654
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-label", isActive && "er-step-label--active"), children: label }),
42655
+ index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx48("span", { className: "er-step-connector" }) : null
42656
+ ] }, label);
42657
+ }) }) }),
42658
+ /* @__PURE__ */ jsxs34("div", { className: "er-stack", children: [
42659
+ /* @__PURE__ */ jsxs34("div", { children: [
42660
+ /* @__PURE__ */ jsx48("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
42661
+ /* @__PURE__ */ jsx48("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
42662
+ /* @__PURE__ */ jsx48("p", { className: "er-text er-text--muted er-registration-shell__copy", children: display.bodyText })
42663
+ ] }),
42664
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
42665
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
42666
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
42667
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
42668
+ ] }),
42669
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
42670
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
42671
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
42672
+ ] })
42673
+ ] })
42674
+ ] })
42675
+ ] }),
42676
+ /* @__PURE__ */ jsx48("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
42677
+ /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar-info", children: [
42678
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
42679
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
42680
+ ] }),
42681
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
42682
+ ] }) })
42683
+ ] }) });
42684
+ }
41424
42685
  var event_registration_server_default = EventRegistrationSSR;
41425
42686
 
41426
42687
  // ../blocks/src/system/runtime/shared/components/FeedbackMessage.tsx
@@ -42006,14 +43267,14 @@ function isDecoratedHeadingBlockKind(blockKind) {
42006
43267
  return blockKind === "block.intro" || blockKind === "block.feature-cards" || blockKind === "block.testimonials" || blockKind === "block.faq";
42007
43268
  }
42008
43269
  function readVariant(blockContent) {
42009
- if (!isRecord9(blockContent)) return void 0;
43270
+ if (!isRecord11(blockContent)) return void 0;
42010
43271
  const variant = blockContent.variant;
42011
43272
  return typeof variant === "string" ? variant : void 0;
42012
43273
  }
42013
43274
  function isFaqDecoratedVariant(variant) {
42014
43275
  return variant === "default" || variant === "question-columns";
42015
43276
  }
42016
- function isRecord9(value) {
43277
+ function isRecord11(value) {
42017
43278
  return typeof value === "object" && value !== null && !Array.isArray(value);
42018
43279
  }
42019
43280
  function buildHeadingDecorationWrapperClassName(className) {
@@ -43521,20 +44782,20 @@ function generateInputCss({
43521
44782
  baseInputRules.push("background-color: transparent");
43522
44783
  } else {
43523
44784
  baseInputRules.push(
43524
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
44785
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
43525
44786
  );
43526
44787
  }
43527
- baseInputRules.push(`color: rgb(var(--tb-${inputSystem.base.textColorToken}))`);
44788
+ baseInputRules.push(`color: ${rgbColorValue(inputSystem.base.textColorToken)}`);
43528
44789
  const borderPx = parseBorderWidth(inputSystem.base.border.widthClass);
43529
44790
  const borderStyle = inputSystem.base.border.style ?? "all";
43530
44791
  if (borderStyle === "underline") {
43531
44792
  baseInputRules.push("border: none");
43532
44793
  baseInputRules.push(
43533
- `border-bottom: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
44794
+ `border-bottom: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
43534
44795
  );
43535
44796
  } else {
43536
44797
  baseInputRules.push(
43537
- `border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
44798
+ `border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
43538
44799
  );
43539
44800
  }
43540
44801
  if (borderStyle === "underline") {
@@ -43561,7 +44822,7 @@ function generateInputCss({
43561
44822
  baseInputRules.push("transition: border-color 0.2s ease, box-shadow 0.2s ease");
43562
44823
  const labelSelector = `${rootSelector} .form-label`;
43563
44824
  const labelRules = [];
43564
- labelRules.push(`color: rgb(var(--tb-${inputSystem.label.textColorToken}))`);
44825
+ labelRules.push(`color: ${rgbColorValue(inputSystem.label.textColorToken)}`);
43565
44826
  labelRules.push(`font-weight: ${FONT_WEIGHT_MAP[inputSystem.label.fontWeight]}`);
43566
44827
  labelRules.push(`font-size: ${LABEL_FONT_SIZE_MAP[inputSystem.label.fontSize]}`);
43567
44828
  if (inputSystem.label.textTransform && inputSystem.label.textTransform !== "none") {
@@ -43602,9 +44863,9 @@ function generateInputCss({
43602
44863
  ];
43603
44864
  const focusRules = [];
43604
44865
  focusRules.push("outline: none");
43605
- focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44866
+ focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43606
44867
  if (inputSystem.focus.borderColorToken) {
43607
- focusRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.borderColorToken}))`);
44868
+ focusRules.push(`border-color: ${rgbColorValue(inputSystem.focus.borderColorToken)}`);
43608
44869
  }
43609
44870
  const errorSelectors = [
43610
44871
  `${inputSelector}[aria-invalid="true"]`,
@@ -43612,16 +44873,16 @@ function generateInputCss({
43612
44873
  `${selectSelector}[aria-invalid="true"]`
43613
44874
  ];
43614
44875
  const errorRules = [];
43615
- errorRules.push(`border-color: rgb(var(--tb-${inputSystem.error.borderColorToken}))`);
43616
- errorRules.push(`color: rgb(var(--tb-${inputSystem.error.textColorToken}))`);
44876
+ errorRules.push(`border-color: ${rgbColorValue(inputSystem.error.borderColorToken)}`);
44877
+ errorRules.push(`color: ${rgbColorValue(inputSystem.error.textColorToken)}`);
43617
44878
  const disabledSelectors = [
43618
44879
  `${inputSelector}:disabled`,
43619
44880
  `${textareaSelector}:disabled`,
43620
44881
  `${selectSelector}:disabled`
43621
44882
  ];
43622
44883
  const disabledRules = [];
43623
- disabledRules.push(`background-color: rgb(var(--tb-${inputSystem.disabled.backgroundColorToken}))`);
43624
- disabledRules.push(`color: rgb(var(--tb-${inputSystem.disabled.textColorToken}))`);
44884
+ disabledRules.push(`background-color: ${rgbColorValue(inputSystem.disabled.backgroundColorToken)}`);
44885
+ disabledRules.push(`color: ${rgbColorValue(inputSystem.disabled.textColorToken)}`);
43625
44886
  disabledRules.push(`opacity: ${inputSystem.disabled.opacity}`);
43626
44887
  disabledRules.push("cursor: not-allowed");
43627
44888
  const checkboxSelector = `${rootSelector} .form-checkbox`;
@@ -43631,12 +44892,12 @@ function generateInputCss({
43631
44892
  checkableRules.push("width: 1rem");
43632
44893
  checkableRules.push("height: 1rem");
43633
44894
  checkableRules.push("flex-shrink: 0");
43634
- checkableRules.push(`border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`);
44895
+ checkableRules.push(`border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`);
43635
44896
  if (inputSystem.base.background.type === "transparent") {
43636
44897
  checkableRules.push("background-color: transparent");
43637
44898
  } else {
43638
44899
  checkableRules.push(
43639
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
44900
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
43640
44901
  );
43641
44902
  }
43642
44903
  checkableRules.push("cursor: pointer");
@@ -43647,22 +44908,22 @@ function generateInputCss({
43647
44908
  radioSpecificRules.push("border-radius: 9999px");
43648
44909
  const checkboxCheckedSelector = `${checkboxSelector}:checked`;
43649
44910
  const checkboxCheckedRules = [];
43650
- checkboxCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
43651
- checkboxCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44911
+ checkboxCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
44912
+ checkboxCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43652
44913
  checkboxCheckedRules.push(`background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")`);
43653
44914
  checkboxCheckedRules.push("background-size: 100% 100%");
43654
44915
  checkboxCheckedRules.push("background-position: center");
43655
44916
  checkboxCheckedRules.push("background-repeat: no-repeat");
43656
44917
  const radioCheckedSelector = `${radioSelector}:checked`;
43657
44918
  const radioCheckedRules = [];
43658
- radioCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
43659
- radioCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44919
+ radioCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
44920
+ radioCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43660
44921
  radioCheckedRules.push("background-image: radial-gradient(circle, white 40%, transparent 40%)");
43661
44922
  const checkboxFocusSelector = `${checkboxSelector}:focus-visible`;
43662
44923
  const radioFocusSelector = `${radioSelector}:focus-visible`;
43663
44924
  const checkableFocusRules = [];
43664
44925
  checkableFocusRules.push("outline: none");
43665
- checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44926
+ checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43666
44927
  const cssBlocks = [];
43667
44928
  cssBlocks.push(`${labelSelector} {
43668
44929
  ${labelRules.join(";\n ")};
@@ -45510,6 +46771,11 @@ ${root} {
45510
46771
  --er-event-card-bg: rgb(var(--tb-surface));
45511
46772
  --er-event-card-border-width: var(--rb-border-width, 1px);
45512
46773
  --er-event-card-hover-opacity: 1;
46774
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
46775
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
46776
+ --er-radius: var(--rb-block-radius);
46777
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
46778
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
45513
46779
 
45514
46780
  /* Step indicator */
45515
46781
  --er-step-active: rgb(var(--tb-primary));
@@ -46510,7 +47776,7 @@ function buildThemeCssVars(theme) {
46510
47776
  // These expose inputStyle/InputSystem values for blocks that can't use .form-* classes
46511
47777
  [THEME_RADIUS_CSS_VARS.input]: inputRadius,
46512
47778
  ["--rb-input-focus-width"]: `${inputSystem.focus.ringWidth}px`,
46513
- ["--rb-input-focus-color"]: `rgb(var(--tb-${inputSystem.focus.ringColorToken}))`,
47779
+ ["--rb-input-focus-color"]: rgbColorValue(inputSystem.focus.ringColorToken),
46514
47780
  // Deprecated compatibility aliases for pre-v2 block/custom CSS. New CSS should
46515
47781
  // consume the semantic --rb-* primitives above.
46516
47782
  [THEME_RADIUS_CSS_VARS.legacyCard]: blockRadius,
@@ -47277,6 +48543,11 @@ var MemoBlockSection = React6.memo(
47277
48543
  siteId: dataContext?.siteId,
47278
48544
  apiBaseUrl: dataContext?.apiBaseUrl,
47279
48545
  portalToken: dataContext?.portalToken ?? null,
48546
+ previewToken: dataContext?.previewToken ?? null,
48547
+ stage: dataContext?.previewStage,
48548
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
48549
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
48550
+ contentEntry: dataContext?.contentEntry ?? null,
47280
48551
  supabaseUrl: dataContext?.supabaseUrl,
47281
48552
  imageResolveContext: resolvedImageResolveContext,
47282
48553
  blockId: block.id ?? null,
@@ -47400,6 +48671,11 @@ var MemoBlockSection = React6.memo(
47400
48671
  siteId: dataContext?.siteId,
47401
48672
  apiBaseUrl: dataContext?.apiBaseUrl,
47402
48673
  portalToken: dataContext?.portalToken ?? null,
48674
+ previewToken: dataContext?.previewToken ?? null,
48675
+ stage: dataContext?.previewStage,
48676
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
48677
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
48678
+ contentEntry: dataContext?.contentEntry ?? null,
47403
48679
  supabaseUrl: dataContext?.supabaseUrl,
47404
48680
  imageResolveContext: resolvedImageResolveContext,
47405
48681
  blockId: block.id ?? null,
@@ -47586,6 +48862,9 @@ var containerResponsiveThemeCss = `/*
47586
48862
  letter-spacing: 0.025em;
47587
48863
  text-transform: uppercase;
47588
48864
  }
48865
+ .rb-eyebrow-treatment-accent {
48866
+ color: rgb(var(--tb-accent));
48867
+ }
47589
48868
  .rb-eyebrow-treatment-pill {
47590
48869
  align-self: center;
47591
48870
  display: inline-flex;
@@ -47640,6 +48919,27 @@ var containerResponsiveThemeCss = `/*
47640
48919
  font-weight: 400;
47641
48920
  }
47642
48921
 
48922
+ /* Media shape treatments */
48923
+ .rb-media-shape-square,
48924
+ .rb-media-shape-rounded,
48925
+ .rb-media-shape-circle,
48926
+ .rb-media-shape-arch {
48927
+ overflow: hidden;
48928
+ }
48929
+ .rb-media-shape-square {
48930
+ border-radius: 0;
48931
+ }
48932
+ .rb-media-shape-rounded {
48933
+ border-radius: var(--rb-media-shape-radius, 1rem);
48934
+ }
48935
+ .rb-media-shape-circle {
48936
+ border-radius: 9999px;
48937
+ }
48938
+ .rb-media-shape-arch {
48939
+ border-radius: 9999px 9999px var(--rb-media-shape-arch-base-radius, 0.125rem)
48940
+ var(--rb-media-shape-arch-base-radius, 0.125rem);
48941
+ }
48942
+
47643
48943
  /* Navigation typography */
47644
48944
  .rb-nav-text {
47645
48945
  font-size: 0.875rem;
@@ -50794,7 +52094,7 @@ var containerResponsiveThemeCss = `/*
50794
52094
  :where(.theme-scope) :where([data-block="event-registration"]) .er-container {
50795
52095
  border-radius: var(--rb-block-radius);
50796
52096
  border: 1px solid var(--er-border);
50797
- padding: 1.5rem;
52097
+ padding: clamp(1rem, 2vw, 1.5rem);
50798
52098
  background: rgb(var(--tb-surface));
50799
52099
  color: var(--er-on-surface);
50800
52100
  transition: border-color var(--rb-block-transition) ease;
@@ -50803,6 +52103,109 @@ var containerResponsiveThemeCss = `/*
50803
52103
  margin-inline: 0;
50804
52104
  }
50805
52105
 
52106
+ /* SSR shell / required-island fallback */
52107
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell {
52108
+ min-height: 24rem;
52109
+ }
52110
+
52111
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__steps {
52112
+ margin-bottom: 1.25rem;
52113
+ }
52114
+
52115
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__eyebrow {
52116
+ margin: 0 0 0.35rem;
52117
+ color: var(--er-on-surface-subtle);
52118
+ font-size: 0.75rem;
52119
+ font-weight: 700;
52120
+ letter-spacing: 0.04em;
52121
+ line-height: 1.2;
52122
+ text-transform: uppercase;
52123
+ }
52124
+
52125
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__title {
52126
+ margin: 0;
52127
+ }
52128
+
52129
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__copy {
52130
+ margin: 0.35rem 0 0;
52131
+ max-width: 36rem;
52132
+ line-height: 1.45;
52133
+ }
52134
+
52135
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__cards {
52136
+ margin-top: 0.25rem;
52137
+ overflow: hidden;
52138
+ border: 1px solid var(--er-border);
52139
+ border-radius: var(--rb-block-radius);
52140
+ background: var(--er-control-bg);
52141
+ }
52142
+
52143
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__card {
52144
+ display: grid;
52145
+ gap: 0.5rem;
52146
+ padding: 1rem;
52147
+ }
52148
+
52149
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line {
52150
+ height: 0.75rem;
52151
+ border-radius: 9999px;
52152
+ background: linear-gradient(
52153
+ 90deg,
52154
+ var(--er-shell-line),
52155
+ rgba(var(--tb-primary), 0.12),
52156
+ var(--er-shell-line)
52157
+ );
52158
+ }
52159
+
52160
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--lg {
52161
+ width: min(26rem, 82%);
52162
+ }
52163
+
52164
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--md {
52165
+ width: min(19rem, 68%);
52166
+ }
52167
+
52168
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--sm {
52169
+ width: min(14rem, 52%);
52170
+ }
52171
+
52172
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--xs {
52173
+ width: min(10rem, 42%);
52174
+ }
52175
+
52176
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__summary {
52177
+ align-items: center;
52178
+ border-radius: calc(var(--rb-block-radius) * 0.75);
52179
+ border: 1px solid var(--er-summary-border);
52180
+ padding: 0.875rem 1rem;
52181
+ }
52182
+
52183
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__button-placeholder {
52184
+ display: inline-flex;
52185
+ min-height: 2.5rem;
52186
+ align-items: center;
52187
+ justify-content: center;
52188
+ border-radius: calc(var(--rb-block-radius) * 0.6);
52189
+ background: rgb(var(--tb-primary));
52190
+ color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
52191
+ padding: 0.625rem 1rem;
52192
+ font-size: 0.875rem;
52193
+ font-weight: 600;
52194
+ line-height: 1.2;
52195
+ text-align: center;
52196
+ white-space: nowrap;
52197
+ }
52198
+
52199
+ :where(.theme-scope) :where([data-block="event-registration"]) .event-registration__hydration-error {
52200
+ border-radius: var(--rb-block-radius);
52201
+ border: 1px solid var(--er-border-error);
52202
+ background: var(--er-error-bg);
52203
+ color: var(--er-error-text);
52204
+ padding: 1rem;
52205
+ font-size: 0.9375rem;
52206
+ line-height: 1.45;
52207
+ }
52208
+
50806
52209
  :where(.theme-scope) :where([data-block="event-registration"].event-registration--embedded) .er-container {
50807
52210
  max-width: none;
50808
52211
  padding: 0;
@@ -50850,6 +52253,7 @@ var containerResponsiveThemeCss = `/*
50850
52253
  padding: 1rem;
50851
52254
  border-radius: calc(var(--rb-block-radius) * 0.75);
50852
52255
  border: 1px solid var(--er-border);
52256
+ background: var(--er-surface-muted);
50853
52257
  }
50854
52258
 
50855
52259
  /* Ticket counter */
@@ -50895,14 +52299,23 @@ var containerResponsiveThemeCss = `/*
50895
52299
  /* Form inputs */
50896
52300
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input {
50897
52301
  width: 100%;
50898
- padding: 0.5rem 0.75rem;
52302
+ min-height: 2.75rem;
52303
+ padding: 0.625rem 0.75rem;
50899
52304
  border-radius: calc(var(--rb-block-radius) * 0.5);
50900
52305
  border: 1px solid var(--er-border);
50901
- background: transparent;
52306
+ background: var(--er-control-bg);
52307
+ color: var(--er-control-text);
52308
+ font: inherit;
52309
+ line-height: 1.4;
50902
52310
  transition: border-color var(--rb-block-transition) ease,
52311
+ background-color var(--rb-block-transition) ease,
50903
52312
  box-shadow var(--rb-block-transition) ease;
50904
52313
  }
50905
52314
 
52315
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-input::placeholder {
52316
+ color: var(--er-on-surface-faint);
52317
+ }
52318
+
50906
52319
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input:focus {
50907
52320
  outline: none;
50908
52321
  border-color: var(--er-border-selected);
@@ -51024,7 +52437,7 @@ var containerResponsiveThemeCss = `/*
51024
52437
  }
51025
52438
 
51026
52439
  :where(.theme-scope) :where([data-block="event-registration"]) .er-event-grid .er-event-card {
51027
- padding: 0.75rem 0;
52440
+ padding: 0.875rem 0;
51028
52441
  border-width: 0 0 var(--rb-event-tile-border-width, var(--rb-border-width, 1px)) 0;
51029
52442
  border-style: solid;
51030
52443
  border-radius: 0;
@@ -51256,21 +52669,24 @@ var containerResponsiveThemeCss = `/*
51256
52669
  align-items: flex-start;
51257
52670
  gap: 0.75rem;
51258
52671
  padding: 1rem;
51259
- border: 2px solid var(--er-payment-border);
52672
+ border: 1px solid var(--er-payment-border);
51260
52673
  border-radius: var(--rb-block-radius);
51261
- background: transparent;
52674
+ background: var(--er-control-bg);
51262
52675
  cursor: pointer;
51263
52676
  transition: border-color var(--rb-block-transition) ease,
52677
+ box-shadow var(--rb-block-transition) ease,
51264
52678
  background-color var(--rb-block-transition) ease;
51265
52679
  }
51266
52680
 
51267
52681
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option:hover {
51268
52682
  border-color: var(--er-payment-border-hover);
52683
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
51269
52684
  }
51270
52685
 
51271
52686
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option--selected {
51272
52687
  border-color: var(--er-payment-border-selected);
51273
52688
  background-color: var(--er-payment-bg-selected);
52689
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
51274
52690
  }
51275
52691
 
51276
52692
  /* Discount code entry */
@@ -51958,22 +53374,25 @@ var containerResponsiveThemeCss = `/*
51958
53374
  justify-content: center;
51959
53375
  gap: 0.25rem;
51960
53376
  padding: 0.75rem 0.625rem;
51961
- border: 2px solid var(--er-payment-border);
53377
+ border: 1px solid var(--er-payment-border);
51962
53378
  border-radius: var(--rb-block-radius);
51963
- background: transparent;
53379
+ background: var(--er-control-bg);
51964
53380
  cursor: pointer;
51965
53381
  text-align: center;
51966
53382
  transition: border-color var(--rb-block-transition) ease,
53383
+ box-shadow var(--rb-block-transition) ease,
51967
53384
  background-color var(--rb-block-transition) ease;
51968
53385
  }
51969
53386
 
51970
53387
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile:hover:not([aria-disabled="true"]) {
51971
53388
  border-color: var(--er-payment-border-hover);
53389
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
51972
53390
  }
51973
53391
 
51974
53392
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--selected {
51975
53393
  border-color: var(--er-payment-border-selected);
51976
53394
  background-color: var(--er-payment-bg-selected);
53395
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
51977
53396
  }
51978
53397
 
51979
53398
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--disabled {
@@ -52076,11 +53495,10 @@ var containerResponsiveThemeCss = `/*
52076
53495
  justify-content: space-between;
52077
53496
  align-items: flex-start;
52078
53497
  gap: 1rem;
52079
- padding: 0.875rem 0;
52080
- background: transparent;
52081
- border-top: 1px solid var(--er-summary-border);
52082
- border-bottom: 1px solid var(--er-summary-border);
52083
- border-radius: 0;
53498
+ padding: 0.875rem 1rem;
53499
+ background: var(--er-surface-muted);
53500
+ border: 1px solid var(--er-summary-border);
53501
+ border-radius: calc(var(--rb-block-radius) * 0.75);
52084
53502
  }
52085
53503
 
52086
53504
  :where(.theme-scope) :where([data-block="event-registration"]) .er-summary-bar-info {
@@ -53852,18 +55270,10 @@ var containerResponsiveThemeCss = `/*
53852
55270
  /* Two-column row (opt-in per field via schema layout) */
53853
55271
  :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
53854
55272
  display: grid;
53855
- grid-template-columns: 1fr;
55273
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
53856
55274
  gap: 1rem;
53857
55275
  }
53858
55276
 
53859
- @container rb-site (min-width: 768px) {
53860
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
53861
- :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
53862
- grid-template-columns: 1fr 1fr;
53863
- }
53864
- }
53865
- }
53866
-
53867
55277
  /* Field wrapper */
53868
55278
  :where(.theme-scope) :where([data-block="form"]) .fb-field {
53869
55279
  display: flex;
@@ -53937,6 +55347,10 @@ var containerResponsiveThemeCss = `/*
53937
55347
  }
53938
55348
 
53939
55349
  /* Subheadline - supporting text below headline */
55350
+ :where(.theme-scope) :where([data-block="hero"]) .hero-headline {
55351
+ text-wrap: balance;
55352
+ }
55353
+
53940
55354
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
53941
55355
  font-size: 1.125rem;
53942
55356
  color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
@@ -53962,8 +55376,8 @@ var containerResponsiveThemeCss = `/*
53962
55376
  }
53963
55377
 
53964
55378
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-headline {
53965
- font-size: clamp(2.5rem, 5vw, 4rem);
53966
- line-height: 1.08;
55379
+ font-size: clamp(2.75rem, 5.6vw, 4.75rem);
55380
+ line-height: 1.06;
53967
55381
  }
53968
55382
 
53969
55383
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-subheadline {
@@ -53972,8 +55386,8 @@ var containerResponsiveThemeCss = `/*
53972
55386
  }
53973
55387
 
53974
55388
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline {
53975
- font-size: clamp(3rem, 6vw, 5rem);
53976
- line-height: 1.04;
55389
+ font-size: clamp(3.5rem, 7.2vw, 6.25rem);
55390
+ line-height: 1;
53977
55391
  }
53978
55392
 
53979
55393
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-subheadline {
@@ -53982,8 +55396,8 @@ var containerResponsiveThemeCss = `/*
53982
55396
  }
53983
55397
 
53984
55398
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline {
53985
- font-size: clamp(3.5rem, 8vw, 6.5rem);
53986
- line-height: 0.98;
55399
+ font-size: clamp(4.25rem, 10vw, 8.5rem);
55400
+ line-height: 0.94;
53987
55401
  }
53988
55402
 
53989
55403
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-subheadline {
@@ -53992,13 +55406,13 @@ var containerResponsiveThemeCss = `/*
53992
55406
  }
53993
55407
 
53994
55408
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-medium.rb-hero-typography-poster .hero-headline {
53995
- font-size: clamp(3rem, 6.5vw, 5rem);
55409
+ font-size: clamp(3.5rem, 7.5vw, 6.5rem);
53996
55410
  }
53997
55411
 
53998
55412
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
53999
55413
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
54000
- font-size: clamp(2.75rem, 5.5vw, 4.5rem);
54001
- line-height: 1.05;
55414
+ font-size: clamp(3rem, 6vw, 5.25rem);
55415
+ line-height: 1.02;
54002
55416
  }
54003
55417
 
54004
55418
  @container rb-site (max-width: 639px) {
@@ -56720,8 +58134,9 @@ var containerResponsiveThemeCss = `/*
56720
58134
  /* Privacy note */
56721
58135
  :where(.theme-scope) .newsletter-privacy-note {
56722
58136
  margin-top: 0.75rem;
56723
- font-size: 0.75rem;
56724
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
58137
+ font-size: 1rem;
58138
+ line-height: 1.6;
58139
+ color: var(--section-text-color, rgb(var(--tb-text)));
56725
58140
  text-align: center;
56726
58141
  }
56727
58142
 
@@ -56776,6 +58191,116 @@ var containerResponsiveThemeCss = `/*
56776
58191
  color: rgb(var(--tb-text));
56777
58192
  }
56778
58193
 
58194
+ /* =============================================================================
58195
+ * Block: Contact + Newsletter
58196
+ * =============================================================================
58197
+ */
58198
+
58199
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
58200
+ display: grid;
58201
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
58202
+ gap: clamp(2.5rem, 6vw, 4rem);
58203
+ align-items: start;
58204
+ }
58205
+
58206
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
58207
+ min-width: 0;
58208
+ }
58209
+
58210
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
58211
+ margin-bottom: 1.5rem;
58212
+ }
58213
+
58214
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
58215
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
58216
+ margin: 0 0 0.75rem;
58217
+ }
58218
+
58219
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
58220
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
58221
+ color: var(--section-text-color, rgb(var(--tb-text)));
58222
+ }
58223
+
58224
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
58225
+ display: flex;
58226
+ flex-direction: column;
58227
+ align-items: flex-start;
58228
+ }
58229
+
58230
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
58231
+ max-width: none;
58232
+ margin-left: 0;
58233
+ margin-right: 0;
58234
+ }
58235
+
58236
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
58237
+ text-align: left;
58238
+ }
58239
+
58240
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
58241
+ display: flex;
58242
+ flex-direction: column;
58243
+ gap: 1rem;
58244
+ }
58245
+
58246
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
58247
+ display: grid;
58248
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
58249
+ gap: 1rem;
58250
+ }
58251
+
58252
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
58253
+ display: flex;
58254
+ flex-direction: column;
58255
+ gap: 0.25rem;
58256
+ }
58257
+
58258
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
58259
+ display: flex;
58260
+ flex-direction: column;
58261
+ gap: 0.5rem;
58262
+ border: none;
58263
+ padding: 0;
58264
+ margin: 0;
58265
+ }
58266
+
58267
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
58268
+ display: flex;
58269
+ align-items: center;
58270
+ gap: 0.5rem;
58271
+ }
58272
+
58273
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
58274
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
58275
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
58276
+ border-radius: var(--rb-block-radius);
58277
+ padding: 1rem;
58278
+ font-size: 0.875rem;
58279
+ }
58280
+
58281
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
58282
+ background-color: var(--fb-success-bg);
58283
+ color: var(--fb-success-text);
58284
+ border: 1px solid var(--fb-success-border);
58285
+ }
58286
+
58287
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
58288
+ background-color: var(--fb-error-bg);
58289
+ color: var(--fb-error-text);
58290
+ border: 1px solid var(--fb-error-border);
58291
+ }
58292
+
58293
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
58294
+ background-color: var(--fb-empty-bg);
58295
+ color: var(--fb-empty-text);
58296
+ border: 1px dashed var(--fb-empty-border);
58297
+ text-align: center;
58298
+ }
58299
+
58300
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
58301
+ margin-top: 0.5rem;
58302
+ }
58303
+
56779
58304
  /* =============================================================================
56780
58305
  * Block: Team Members
56781
58306
  * =============================================================================
@@ -57000,8 +58525,8 @@ var containerResponsiveThemeCss = `/*
57000
58525
  container: event-compact-list / inline-size;
57001
58526
  border: 1px solid var(--event-compact-divider-color);
57002
58527
  border-radius: 1rem;
57003
- background: rgb(var(--tb-background, 255 255 255));
57004
- box-shadow: 0 1.25rem 3.5rem rgba(var(--tb-shadow), 0.08);
58528
+ background: rgb(var(--tb-surface, 255 255 255));
58529
+ box-shadow: none;
57005
58530
  }
57006
58531
 
57007
58532
  :where(.theme-scope) .rb-event-list-treatment-lined-panel .event-listing-compact-container {
@@ -57010,6 +58535,12 @@ var containerResponsiveThemeCss = `/*
57010
58535
  rgb(var(--tb-border, 229 231 235)),
57011
58536
  rgb(var(--tb-text, 17 24 39)) 8%
57012
58537
  );
58538
+ background: rgb(var(--tb-surface, 255 255 255));
58539
+ border-color: color-mix(
58540
+ in oklab,
58541
+ rgb(var(--tb-primary, 0 0 0)),
58542
+ rgb(var(--tb-border, 229 231 235)) 72%
58543
+ );
57013
58544
  }
57014
58545
 
57015
58546
  :where(.theme-scope) .event-compact-row {
@@ -57085,7 +58616,7 @@ var containerResponsiveThemeCss = `/*
57085
58616
 
57086
58617
  :where(.theme-scope) .event-compact-row-title {
57087
58618
  margin: 0;
57088
- color: rgb(var(--tb-text, 17 24 39));
58619
+ color: var(--section-heading-color, rgb(var(--tb-primary, 0 0 0)));
57089
58620
  font-family: var(--font-heading, var(--font-body, inherit));
57090
58621
  font-size: clamp(1.05rem, 1rem + 0.35vw, 1.3rem);
57091
58622
  font-weight: 400;
@@ -57178,8 +58709,6 @@ var containerResponsiveThemeCss = `/*
57178
58709
  min-height: 2.7rem;
57179
58710
  justify-content: space-between;
57180
58711
  gap: 1rem;
57181
- border-radius: 9999px;
57182
- padding-inline: 1.25rem 1rem;
57183
58712
  white-space: nowrap;
57184
58713
  }
57185
58714
 
@@ -58234,6 +59763,7 @@ function PageContent({
58234
59763
  mediaAssets,
58235
59764
  apiBaseUrl,
58236
59765
  portalToken,
59766
+ previewToken,
58237
59767
  dataContext,
58238
59768
  useThemeScope = false
58239
59769
  }) {
@@ -58250,6 +59780,7 @@ function PageContent({
58250
59780
  siteId,
58251
59781
  apiBaseUrl,
58252
59782
  portalToken,
59783
+ previewToken,
58253
59784
  resolvedData,
58254
59785
  routes: routeMap,
58255
59786
  pagesByIdentifier,
@@ -62481,6 +64012,46 @@ var ENDPOINT_DEFINITIONS = {
62481
64012
  auth: "user",
62482
64013
  responseKind: "json"
62483
64014
  },
64015
+ listEntrySlotBlocks: {
64016
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
64017
+ method: "GET",
64018
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
64019
+ auth: "user",
64020
+ responseKind: "json",
64021
+ errors: ["resource:not_found"]
64022
+ },
64023
+ listEntryPageContentSlots: {
64024
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
64025
+ method: "GET",
64026
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
64027
+ auth: "user",
64028
+ responseKind: "json",
64029
+ errors: ["resource:not_found"]
64030
+ },
64031
+ createEntrySlotBlock: {
64032
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
64033
+ method: "POST",
64034
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
64035
+ auth: "user",
64036
+ responseKind: "json",
64037
+ errors: ["validation:invalid_input", "resource:not_found"]
64038
+ },
64039
+ reorderEntrySlotBlocks: {
64040
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
64041
+ method: "POST",
64042
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
64043
+ auth: "user",
64044
+ responseKind: "json",
64045
+ errors: ["validation:invalid_input", "resource:not_found"]
64046
+ },
64047
+ deleteEntrySlotBlock: {
64048
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
64049
+ method: "DELETE",
64050
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
64051
+ auth: "user",
64052
+ responseKind: "json",
64053
+ errors: ["resource:not_found"]
64054
+ },
62484
64055
  createBlock: {
62485
64056
  path: "/sites/{siteId}/pages/{pageId}/blocks",
62486
64057
  method: "POST",
@@ -66304,7 +67875,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
66304
67875
  }
66305
67876
 
66306
67877
  // ../api/src/utils/isRecord.ts
66307
- function isRecord10(value) {
67878
+ function isRecord12(value) {
66308
67879
  return typeof value === "object" && value !== null && !Array.isArray(value);
66309
67880
  }
66310
67881
 
@@ -66611,7 +68182,7 @@ function sanitizeMarks(marks) {
66611
68182
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
66612
68183
  return [{ type: mark.type }];
66613
68184
  }
66614
- if (mark.type === "link" && isRecord10(mark.attrs) && typeof mark.attrs.href === "string") {
68185
+ if (mark.type === "link" && isRecord12(mark.attrs) && typeof mark.attrs.href === "string") {
66615
68186
  const attrs = { href: mark.attrs.href };
66616
68187
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
66617
68188
  attrs.target = mark.attrs.target;
@@ -66626,10 +68197,10 @@ function sanitizeMarks(marks) {
66626
68197
  return sanitized.length > 0 ? sanitized : void 0;
66627
68198
  }
66628
68199
  function unwrapRichTextValue(value) {
66629
- if (isRecord10(value) && isRecord10(value.doc)) {
68200
+ if (isRecord12(value) && isRecord12(value.doc)) {
66630
68201
  return unwrapRichTextValue(value.doc);
66631
68202
  }
66632
- if (isRecord10(value) && value.type === "doc") {
68203
+ if (isRecord12(value) && value.type === "doc") {
66633
68204
  return {
66634
68205
  type: "doc",
66635
68206
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -66638,7 +68209,7 @@ function unwrapRichTextValue(value) {
66638
68209
  return EMPTY_SITE_BANNER_BODY;
66639
68210
  }
66640
68211
  function isTipTapNodeLike(value) {
66641
- return isRecord10(value) && typeof value.type === "string";
68212
+ return isRecord12(value) && typeof value.type === "string";
66642
68213
  }
66643
68214
  function coerceTipTapNode(value) {
66644
68215
  return {
@@ -66646,9 +68217,9 @@ function coerceTipTapNode(value) {
66646
68217
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
66647
68218
  ...typeof value.text === "string" ? { text: value.text } : {},
66648
68219
  ...Array.isArray(value.marks) ? {
66649
- marks: value.marks.filter((mark) => isRecord10(mark) && typeof mark.type === "string").map((mark) => ({
68220
+ marks: value.marks.filter((mark) => isRecord12(mark) && typeof mark.type === "string").map((mark) => ({
66650
68221
  type: mark.type,
66651
- ...isRecord10(mark.attrs) ? { attrs: mark.attrs } : {}
68222
+ ...isRecord12(mark.attrs) ? { attrs: mark.attrs } : {}
66652
68223
  }))
66653
68224
  } : {}
66654
68225
  };
@@ -66831,7 +68402,7 @@ var ENTRY_REF_KEYS = [
66831
68402
  "entryId",
66832
68403
  "slug"
66833
68404
  ];
66834
- function isRecord11(value) {
68405
+ function isRecord13(value) {
66835
68406
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
66836
68407
  }
66837
68408
  function extractManualEntryRef(item) {
@@ -66839,7 +68410,7 @@ function extractManualEntryRef(item) {
66839
68410
  const trimmed = item.trim();
66840
68411
  return trimmed.length > 0 ? trimmed : null;
66841
68412
  }
66842
- if (!isRecord11(item)) return null;
68413
+ if (!isRecord13(item)) return null;
66843
68414
  for (const key of ENTRY_REF_KEYS) {
66844
68415
  const raw = item[key];
66845
68416
  if (typeof raw === "string" && raw.trim().length > 0) {
@@ -67275,15 +68846,15 @@ function defineBlockOverrideRegistrations(registrations) {
67275
68846
  }
67276
68847
 
67277
68848
  // src/rendering/overrideResolution.ts
67278
- function isRecord12(value) {
68849
+ function isRecord14(value) {
67279
68850
  return typeof value === "object" && value !== null;
67280
68851
  }
67281
68852
  function isBlockOutlineLike(value) {
67282
68853
  const id = value.id;
67283
- return typeof value.kind === "string" && (typeof id === "string" || id === null) && (typeof value.purpose === "string" || isRecord12(value.content) || isRecord12(value.draftContent) || isRecord12(value.bindings));
68854
+ return typeof value.kind === "string" && (typeof id === "string" || id === null) && (typeof value.purpose === "string" || isRecord14(value.content) || isRecord14(value.draftContent) || isRecord14(value.bindings));
67284
68855
  }
67285
68856
  function collectBlockKindsFromValue(value, usedKinds, seen) {
67286
- if (!isRecord12(value)) return;
68857
+ if (!isRecord14(value)) return;
67287
68858
  if (seen.has(value)) return;
67288
68859
  seen.add(value);
67289
68860
  if (isBlockOutlineLike(value)) {
@@ -67332,7 +68903,7 @@ function selectOverrideKeysForUsedKinds(usedKinds, entries) {
67332
68903
  return selectedKeys;
67333
68904
  }
67334
68905
  function isLazyRegistration(registration) {
67335
- return isRecord12(registration) && registration[lazyBlockOverrideSymbol] === true;
68906
+ return isRecord14(registration) && registration[lazyBlockOverrideSymbol] === true;
67336
68907
  }
67337
68908
  async function resolveOverrideComponent(registration) {
67338
68909
  if (isLazyRegistration(registration)) {