@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
@@ -880,6 +880,21 @@ var selectSourceSchema = z3.discriminatedUnion("kind", [
880
880
  function assertNeverSelectSource(value) {
881
881
  throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
882
882
  }
883
+ var visibleWhenPredicateSchema = z3.object({
884
+ field: z3.string().min(1),
885
+ equals: z3.any().optional(),
886
+ notEquals: z3.any().optional(),
887
+ oneOf: z3.array(z3.any()).optional(),
888
+ notIn: z3.array(z3.any()).optional(),
889
+ minItems: z3.number().int().nonnegative().optional(),
890
+ maxItems: z3.number().int().nonnegative().optional()
891
+ });
892
+ var visibleWhenSchema = z3.union([
893
+ visibleWhenPredicateSchema,
894
+ z3.object({
895
+ allOf: z3.array(visibleWhenPredicateSchema).min(1)
896
+ })
897
+ ]);
883
898
  var uiSchema = z3.object({
884
899
  widget: z3.string().optional(),
885
900
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -912,13 +927,7 @@ var uiSchema = z3.object({
912
927
  showValue: z3.boolean().optional(),
913
928
  pattern: z3.string().optional(),
914
929
  placeholder: z3.string().optional(),
915
- visibleWhen: z3.object({
916
- field: z3.string().min(1),
917
- equals: z3.any().optional(),
918
- notEquals: z3.any().optional(),
919
- oneOf: z3.array(z3.any()).optional(),
920
- notIn: z3.array(z3.any()).optional()
921
- }).optional(),
930
+ visibleWhen: visibleWhenSchema.optional(),
922
931
  // Modal configuration for modal and group fields
923
932
  modalConfig: z3.object({
924
933
  buttonLabel: z3.string().optional(),
@@ -3832,6 +3841,7 @@ var eventListTreatmentValues = [
3832
3841
  ];
3833
3842
  var eyebrowTreatmentValues = [
3834
3843
  "plain",
3844
+ "accent",
3835
3845
  "pill",
3836
3846
  "accent-pill",
3837
3847
  "pill-bounce",
@@ -8170,7 +8180,8 @@ var STRUCTURAL_DECLARATIONS = [
8170
8180
  ["transition", "all 200ms ease-in-out"],
8171
8181
  ["display", "inline-flex"],
8172
8182
  ["align-items", "center"],
8173
- ["justify-content", "center"]
8183
+ ["justify-content", "center"],
8184
+ ["outline", "none"]
8174
8185
  ];
8175
8186
  function generateButtonCss(options) {
8176
8187
  const { themeId, theme, buttonSystem: providedButtonSystem } = options;
@@ -8200,6 +8211,7 @@ function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
8200
8211
  out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
8201
8212
  const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
8202
8213
  if (hoverBg) out.push(hoverBg);
8214
+ out.push(variantFocusVisibleRule(variantId, themeId));
8203
8215
  const effects = variantEffectsCss(variant, themeId, tokens, theme);
8204
8216
  if (effects) out.push({ raw: effects });
8205
8217
  out.push(...variantDisabledRules(variantId, themeId));
@@ -8257,6 +8269,12 @@ function variantHoverBackgroundRule(variant, variantId, global, themeId, tokens)
8257
8269
  ["background-color", tokens.getColor(hoverToken)]
8258
8270
  ]);
8259
8271
  }
8272
+ function variantFocusVisibleRule(variantId, themeId) {
8273
+ return rule(`:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:focus-visible`, [
8274
+ ["outline", "2px solid currentColor"],
8275
+ ["outline-offset", "3px"]
8276
+ ]);
8277
+ }
8260
8278
  function variantEffectsCss(variant, themeId, tokens, theme) {
8261
8279
  if (!variant.effects) return "";
8262
8280
  const elementConfig = {
@@ -8888,6 +8906,95 @@ var joyStamp = defineButtonPersonality({
8888
8906
  }
8889
8907
  });
8890
8908
 
8909
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
8910
+ var ornateRitual = defineButtonPersonality({
8911
+ id: "ornate-ritual",
8912
+ name: "Ornate Ritual",
8913
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
8914
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
8915
+ buttonSystem: {
8916
+ global: {
8917
+ cornerStyle: "rounded",
8918
+ shadow: "none",
8919
+ textTransform: "uppercase",
8920
+ fontWeight: 600,
8921
+ borderWidth: 1,
8922
+ hoverTransform: "none",
8923
+ hoverColor: "none",
8924
+ letterSpacing: "loose"
8925
+ },
8926
+ sizes: {
8927
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
8928
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
8929
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
8930
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
8931
+ },
8932
+ variants: [
8933
+ {
8934
+ id: "primary",
8935
+ name: "Primary",
8936
+ enabled: true,
8937
+ priority: 1,
8938
+ background: { type: "solid", colorToken: "primary" },
8939
+ textColorToken: "primaryForeground",
8940
+ borderRadius: "rounded-md",
8941
+ border: { widthClass: "border", colorToken: "primary" },
8942
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8943
+ effects: {
8944
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
8945
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8946
+ }
8947
+ },
8948
+ {
8949
+ id: "secondary",
8950
+ name: "Secondary",
8951
+ enabled: true,
8952
+ priority: 2,
8953
+ background: { type: "solid", colorToken: "secondary" },
8954
+ textColorToken: "primaryForeground",
8955
+ borderRadius: "rounded-md",
8956
+ border: { widthClass: "border", colorToken: "primary" },
8957
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8958
+ effects: {
8959
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8960
+ }
8961
+ },
8962
+ {
8963
+ id: "outline",
8964
+ name: "Outline",
8965
+ enabled: true,
8966
+ priority: 3,
8967
+ background: { type: "transparent" },
8968
+ textColorToken: "primary",
8969
+ borderRadius: "rounded-md",
8970
+ border: { widthClass: "border", colorToken: "primary" },
8971
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8972
+ effects: {
8973
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
8974
+ }
8975
+ },
8976
+ {
8977
+ id: "ghost",
8978
+ name: "Ghost",
8979
+ enabled: true,
8980
+ priority: 3,
8981
+ background: { type: "transparent" },
8982
+ textColorToken: "accent",
8983
+ borderRadius: "rounded-none",
8984
+ sizes: {
8985
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
8986
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
8987
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
8988
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
8989
+ },
8990
+ effects: {
8991
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
8992
+ }
8993
+ }
8994
+ ]
8995
+ }
8996
+ });
8997
+
8891
8998
  // ../theme-core/src/buttons/personalities/pebble.ts
8892
8999
  var pebble = defineButtonPersonality({
8893
9000
  id: "pebble",
@@ -9161,7 +9268,8 @@ var buttonPersonalities = [
9161
9268
  inkStamp,
9162
9269
  brushedWash,
9163
9270
  showtimePill,
9164
- joyStamp
9271
+ joyStamp,
9272
+ ornateRitual
9165
9273
  ];
9166
9274
  var personalitiesById = new Map(
9167
9275
  buttonPersonalities.map((p) => [p.id, p])
@@ -10156,7 +10264,7 @@ function rgbColorValue(token) {
10156
10264
  if (alpha === void 0) {
10157
10265
  return `rgb(var(${cssVar}))`;
10158
10266
  }
10159
- return `rgba(var(${cssVar}), ${alpha})`;
10267
+ return `rgb(var(${cssVar}) / ${alpha})`;
10160
10268
  }
10161
10269
  function backgroundColorStyle(token) {
10162
10270
  return { backgroundColor: rgbColorValue(token) };
@@ -11285,6 +11393,28 @@ var warmDarkEmber = definePaletteVariant({
11285
11393
  { name: "border", hex: "#894e31" }
11286
11394
  ]
11287
11395
  });
11396
+ var warmDarkKirtanGold = definePaletteVariant({
11397
+ id: "warm-dark-kirtan-gold",
11398
+ name: "Warm Dark \u2014 Kirtan Gold",
11399
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
11400
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
11401
+ mode: "dark",
11402
+ colors: [
11403
+ { name: "primary", hex: "#ffcdb2" },
11404
+ { name: "secondary", hex: "#b5838d" },
11405
+ { name: "accent", hex: "#e5989b" },
11406
+ { name: "success", hex: "#8fbf8f" },
11407
+ { name: "warning", hex: "#f2b86b" },
11408
+ { name: "destructive", hex: "#d96b6b" },
11409
+ { name: "background", hex: "#403944" },
11410
+ { name: "surface", hex: "#403944" },
11411
+ { name: "surfaceAlt", hex: "#372f3b" },
11412
+ { name: "muted", hex: "#4d4550" },
11413
+ { name: "text", hex: "#e6d2d5" },
11414
+ { name: "primaryForeground", hex: "#403944" },
11415
+ { name: "border", hex: "#8d747a" }
11416
+ ]
11417
+ });
11288
11418
 
11289
11419
  // ../theme-core/src/palette/variants/index.ts
11290
11420
  var paletteVariants = [
@@ -11308,7 +11438,8 @@ var paletteVariants = [
11308
11438
  softNaturalWatercolor,
11309
11439
  softNaturalLilac,
11310
11440
  // Warm-dark family (dark mode)
11311
- warmDarkEmber
11441
+ warmDarkEmber,
11442
+ warmDarkKirtanGold
11312
11443
  ];
11313
11444
  var paletteVariantsById = new Map(
11314
11445
  paletteVariants.map((v) => [v.id, v])
@@ -12877,9 +13008,125 @@ function headerConfigurationKey(configuration) {
12877
13008
  function asFooterLookId(value) {
12878
13009
  return value;
12879
13010
  }
12880
- var guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
13011
+ function asFooterLayoutId(value) {
13012
+ return value;
13013
+ }
13014
+ function asFooterStyleId(value) {
13015
+ return value;
13016
+ }
13017
+ var guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
13018
+ var footerLayoutCatalog = defineExactCatalog()([
13019
+ {
13020
+ id: asFooterLayoutId("identity"),
13021
+ label: "Identity",
13022
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
13023
+ },
13024
+ {
13025
+ id: asFooterLayoutId("centered"),
13026
+ label: "Centered",
13027
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
13028
+ maxRecommendedNavDensity: "sparse"
13029
+ },
13030
+ {
13031
+ id: asFooterLayoutId("split"),
13032
+ label: "Split",
13033
+ description: "Navigation and brand signoff separated into a wider split footer.",
13034
+ requiresFooterNav: true,
13035
+ maxRecommendedNavDensity: "balanced"
13036
+ },
13037
+ {
13038
+ id: asFooterLayoutId("columns"),
13039
+ label: "Columns",
13040
+ description: "Grouped footer navigation columns with a supporting bottom line.",
13041
+ requiresFooterNav: true,
13042
+ requiresFooterNavGroups: true
13043
+ }
13044
+ ]);
13045
+ var footerStyleCatalog = defineExactCatalog()([
13046
+ {
13047
+ id: asFooterStyleId("quiet"),
13048
+ label: "Quiet",
13049
+ description: "Lightweight, practical footer treatment."
13050
+ },
13051
+ {
13052
+ id: asFooterStyleId("calm"),
13053
+ label: "Calm",
13054
+ description: "Soft centered treatment with restrained dividers."
13055
+ },
13056
+ {
13057
+ id: asFooterStyleId("editorial"),
13058
+ label: "Editorial",
13059
+ description: "Text-forward treatment with fine-line structure."
13060
+ },
13061
+ {
13062
+ id: asFooterStyleId("brand-band"),
13063
+ label: "Brand band",
13064
+ description: "High-contrast brand treatment with a stronger bottom bar."
13065
+ }
13066
+ ]);
13067
+ var footerLayoutsById = new Map(
13068
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
13069
+ );
13070
+ var footerStylesById = new Map(
13071
+ footerStyleCatalog.map((style) => [style.id, style])
13072
+ );
13073
+ function identityQuietFooter(theme) {
13074
+ return {
13075
+ ...theme.footer,
13076
+ variant: "simple",
13077
+ maxWidth: "container",
13078
+ background: {
13079
+ type: "color",
13080
+ color: "surface"
13081
+ },
13082
+ navStyle: "minimal",
13083
+ navWeight: "regular",
13084
+ navColor: "text",
13085
+ navLinkStyle: {
13086
+ typography: "body",
13087
+ fontWeight: "regular",
13088
+ textTransform: "none",
13089
+ italic: false,
13090
+ colorToken: "text",
13091
+ hoverColorToken: "primary",
13092
+ padding: "none",
13093
+ borderRadius: "none"
13094
+ },
13095
+ navLayout: {
13096
+ layout: "inline-wrap",
13097
+ align: "start",
13098
+ gapX: "default",
13099
+ gapY: "tight"
13100
+ },
13101
+ logo: {
13102
+ showLogo: true,
13103
+ showLogoText: true,
13104
+ placement: "left",
13105
+ size: "sm",
13106
+ align: "start"
13107
+ },
13108
+ bottomBar: {
13109
+ enabled: false,
13110
+ fullBleed: false,
13111
+ textAlign: "left",
13112
+ paddingX: "default",
13113
+ paddingY: "compact",
13114
+ borderTop: {
13115
+ width: "none"
13116
+ }
13117
+ }
13118
+ };
13119
+ }
12881
13120
  function mutedGroundingFooter(theme) {
12882
- return theme.footer;
13121
+ return {
13122
+ ...identityQuietFooter(theme),
13123
+ background: theme.footer.background,
13124
+ navStyle: theme.footer.navStyle,
13125
+ navColor: theme.footer.navColor,
13126
+ navWeight: theme.footer.navWeight,
13127
+ navLinkStyle: theme.footer.navLinkStyle,
13128
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
13129
+ };
12883
13130
  }
12884
13131
  function brandTwoBandFooter(theme) {
12885
13132
  return {
@@ -12984,6 +13231,53 @@ function centeredCalmFooter(theme) {
12984
13231
  }
12985
13232
  };
12986
13233
  }
13234
+ function splitEditorialFooter(theme) {
13235
+ return {
13236
+ ...theme.footer,
13237
+ variant: "split",
13238
+ maxWidth: "container",
13239
+ background: {
13240
+ type: "color",
13241
+ color: "surface"
13242
+ },
13243
+ navStyle: "minimal",
13244
+ navWeight: "regular",
13245
+ navColor: "text",
13246
+ navLinkStyle: {
13247
+ typography: "body",
13248
+ fontWeight: "regular",
13249
+ textTransform: "none",
13250
+ italic: false,
13251
+ colorToken: "text",
13252
+ hoverColorToken: "primary",
13253
+ padding: "none",
13254
+ borderRadius: "none"
13255
+ },
13256
+ navLayout: {
13257
+ layout: "inline-wrap",
13258
+ align: "start",
13259
+ gapX: "relaxed",
13260
+ gapY: "tight"
13261
+ },
13262
+ logo: {
13263
+ showLogo: true,
13264
+ showLogoText: true,
13265
+ placement: "right",
13266
+ size: "sm",
13267
+ align: "end"
13268
+ },
13269
+ bottomBar: {
13270
+ enabled: true,
13271
+ fullBleed: false,
13272
+ textAlign: "left",
13273
+ paddingX: "default",
13274
+ paddingY: "compact",
13275
+ borderTop: {
13276
+ width: "thin"
13277
+ }
13278
+ }
13279
+ };
13280
+ }
12987
13281
  function editorialColumnsFooter(theme) {
12988
13282
  return {
12989
13283
  ...theme.footer,
@@ -13026,25 +13320,47 @@ function editorialColumnsFooter(theme) {
13026
13320
  };
13027
13321
  }
13028
13322
  var footerLookCatalog = defineExactCatalog()([
13323
+ {
13324
+ id: asFooterLookId("footer-identity-quiet"),
13325
+ label: "Identity footer",
13326
+ layoutId: asFooterLayoutId("identity"),
13327
+ styleId: asFooterStyleId("quiet"),
13328
+ compile: identityQuietFooter
13329
+ },
13029
13330
  {
13030
13331
  id: asFooterLookId("footer-muted-grounding"),
13031
13332
  label: "Muted grounding footer",
13333
+ layoutId: asFooterLayoutId("identity"),
13334
+ styleId: asFooterStyleId("quiet"),
13335
+ hiddenFromLayoutStyleControls: true,
13032
13336
  compile: mutedGroundingFooter
13033
13337
  },
13034
13338
  {
13035
13339
  id: asFooterLookId("footer-centered-calm"),
13036
13340
  label: "Centered calm footer",
13341
+ layoutId: asFooterLayoutId("centered"),
13342
+ styleId: asFooterStyleId("calm"),
13037
13343
  compile: centeredCalmFooter
13038
13344
  },
13345
+ {
13346
+ id: asFooterLookId("footer-split-editorial"),
13347
+ label: "Split editorial footer",
13348
+ layoutId: asFooterLayoutId("split"),
13349
+ styleId: asFooterStyleId("editorial"),
13350
+ compile: splitEditorialFooter
13351
+ },
13039
13352
  {
13040
13353
  id: asFooterLookId("footer-editorial-columns"),
13041
13354
  label: "Editorial columns footer",
13355
+ layoutId: asFooterLayoutId("columns"),
13356
+ styleId: asFooterStyleId("editorial"),
13042
13357
  compile: editorialColumnsFooter
13043
13358
  },
13044
13359
  {
13045
13360
  id: asFooterLookId("site-footer-brand-two-band"),
13046
13361
  label: "Two-band brand footer",
13047
- maxRecommendedNavDensity: "balanced",
13362
+ layoutId: asFooterLayoutId("split"),
13363
+ styleId: asFooterStyleId("brand-band"),
13048
13364
  allowedContentPresence: ["default-footer", "default-and-blocks"],
13049
13365
  compile: brandTwoBandFooter
13050
13366
  }
@@ -13247,6 +13563,30 @@ var luxeContrastTypography = {
13247
13563
  },
13248
13564
  scale: "spacious"
13249
13565
  };
13566
+ var kirtanOrnateTypography = {
13567
+ body: {
13568
+ family: "Jost, system-ui, sans-serif",
13569
+ size: "md",
13570
+ weight: "regular",
13571
+ lineHeight: "relaxed",
13572
+ letterSpacing: "normal"
13573
+ },
13574
+ headings: {
13575
+ default: {
13576
+ family: "Marcellus, Georgia, serif",
13577
+ weight: "regular",
13578
+ lineHeight: "normal",
13579
+ letterSpacing: "normal",
13580
+ colorToken: "primary",
13581
+ italic: null,
13582
+ case: null
13583
+ },
13584
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13585
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13586
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
13587
+ },
13588
+ scale: "spacious"
13589
+ };
13250
13590
  var boldDisplayTypography = {
13251
13591
  body: {
13252
13592
  family: "Manrope, system-ui, sans-serif",
@@ -13281,16 +13621,16 @@ var originalJoyTypography = {
13281
13621
  },
13282
13622
  headings: {
13283
13623
  default: {
13284
- family: "Bricolage Grotesque, system-ui, sans-serif",
13285
- weight: "bold",
13624
+ family: "Lobster, cursive",
13625
+ weight: "regular",
13286
13626
  lineHeight: "normal",
13287
- letterSpacing: "tight",
13627
+ letterSpacing: "normal",
13288
13628
  italic: null,
13289
13629
  case: null
13290
13630
  },
13291
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13292
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13293
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
13631
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13632
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
13633
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
13294
13634
  },
13295
13635
  scale: "balanced"
13296
13636
  };
@@ -13355,6 +13695,32 @@ var typographyPresets = [
13355
13695
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13356
13696
  typography: luxeContrastTypography
13357
13697
  }),
13698
+ defineTypographyPreset({
13699
+ id: "typography-preset:kirtan-ornate",
13700
+ name: "Kirtan Ornate",
13701
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
13702
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
13703
+ recommendedFonts: {
13704
+ body: ["Jost", "Manrope", "Inter"],
13705
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
13706
+ },
13707
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13708
+ typography: kirtanOrnateTypography,
13709
+ heroTypography: {
13710
+ headlineSize: "6xl",
13711
+ headlineLineHeight: "normal",
13712
+ subheadlineSize: "xl",
13713
+ subheadlineLineHeight: "relaxed",
13714
+ microHeadlineSize: "5xl",
13715
+ microHeadlineLineHeight: "normal",
13716
+ microSubheadlineSize: "lg",
13717
+ microSubheadlineLineHeight: "relaxed",
13718
+ responsive: {
13719
+ tablet: { headlineSize: "5xl" },
13720
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
13721
+ }
13722
+ }
13723
+ }),
13358
13724
  defineTypographyPreset({
13359
13725
  id: "typography-preset:bold-display",
13360
13726
  name: "Bold Display",
@@ -13384,11 +13750,11 @@ var typographyPresets = [
13384
13750
  defineTypographyPreset({
13385
13751
  id: "typography-preset:original-joy",
13386
13752
  name: "Original Joy",
13387
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
13388
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
13753
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
13754
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
13389
13755
  recommendedFonts: {
13390
13756
  body: ["DM Sans", "Inter", "Manrope"],
13391
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
13757
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
13392
13758
  },
13393
13759
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13394
13760
  typography: originalJoyTypography,
@@ -13412,6 +13778,319 @@ var typographyPresetsById = new Map(
13412
13778
  typographyPresets.map((preset2) => [preset2.id, preset2])
13413
13779
  );
13414
13780
 
13781
+ // ../theme-core/src/site-styles/designState.ts
13782
+ import { z as z25 } from "zod";
13783
+ var themeV2DesignStateSchemaVersion = 1;
13784
+ var designResolutionPolicySchema = z25.enum(["generated", "user", "admin", "sdk"]);
13785
+ var runtimeStyleFieldNameSchema = z25.enum(themeV2RuntimeStyleFieldNames);
13786
+ var nonEmptyRuntimeStyleFieldNamesSchema = z25.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
13787
+ fields3[0],
13788
+ ...fields3.slice(1)
13789
+ ]);
13790
+ var heroLegibilityStrategySchema = z25.enum([
13791
+ "none",
13792
+ "scrim-gradient",
13793
+ "solid-panel"
13794
+ ]);
13795
+ var heroCompositionIntentSchema = z25.enum([
13796
+ "center",
13797
+ "bottom-left"
13798
+ ]);
13799
+ var heroTypographyScaleIntentSchema = z25.enum([
13800
+ "quiet",
13801
+ "editorial",
13802
+ "display",
13803
+ "poster"
13804
+ ]);
13805
+ var sectionHeightIntentSchema = z25.enum([
13806
+ "default",
13807
+ "banner",
13808
+ "hero",
13809
+ "immersive"
13810
+ ]);
13811
+ var imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
13812
+ var imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
13813
+ var imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
13814
+ z25.object({ kind: z25.literal("none") }).strict(),
13815
+ z25.object({
13816
+ kind: z25.literal("brand-scrim"),
13817
+ token: z25.enum(["primary", "secondary", "accent"]),
13818
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13819
+ }).strict(),
13820
+ z25.object({
13821
+ kind: z25.literal("brand-wash"),
13822
+ token: z25.enum(["primary", "secondary", "accent"]),
13823
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13824
+ }).strict(),
13825
+ z25.object({
13826
+ kind: z25.literal("neutral-scrim"),
13827
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13828
+ }).strict(),
13829
+ z25.object({
13830
+ kind: z25.literal("neutral-wash"),
13831
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13832
+ }).strict(),
13833
+ z25.object({
13834
+ kind: z25.literal("solid-panel"),
13835
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
13836
+ }).strict()
13837
+ ]);
13838
+ var testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
13839
+ var tileTreatmentSchema = z25.enum(tileTreatmentValues);
13840
+ var eventListTreatmentSchema = z25.enum(eventListTreatmentValues);
13841
+ var eyebrowTreatmentSchema = z25.enum(eyebrowTreatmentValues);
13842
+ function uniqueNonEmpty(values) {
13843
+ const uniqueValues = [...new Set(values)];
13844
+ const firstValue = uniqueValues[0];
13845
+ if (!firstValue) {
13846
+ throw new Error("Expected at least one Theme V2 design state option.");
13847
+ }
13848
+ return [firstValue, ...uniqueValues.slice(1)];
13849
+ }
13850
+ var userPanelTreatments = uniqueNonEmpty(
13851
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
13852
+ );
13853
+ var userFlushTreatments = uniqueNonEmpty(
13854
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
13855
+ );
13856
+ var userFlushBleeds = uniqueNonEmpty(
13857
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
13858
+ );
13859
+ var contentFrameIntentSchema = z25.discriminatedUnion("kind", [
13860
+ z25.object({ kind: z25.literal("plain") }).strict(),
13861
+ z25.object({
13862
+ kind: z25.literal("panel"),
13863
+ treatment: z25.enum(userPanelTreatments)
13864
+ }).strict(),
13865
+ z25.object({
13866
+ kind: z25.literal("flush-panel"),
13867
+ treatment: z25.enum(userFlushTreatments),
13868
+ bleed: z25.enum(userFlushBleeds)
13869
+ }).strict()
13870
+ ]);
13871
+ var blockDesignPlanSchema = z25.object({
13872
+ blockId: z25.string().min(1).transform(asDesignBlockId),
13873
+ blockKind: z25.string().min(1),
13874
+ purpose: z25.string().min(1),
13875
+ sectionSurface: z25.enum(userDesignOptionCatalog.sectionSurfaces),
13876
+ contentFrame: contentFrameIntentSchema,
13877
+ itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
13878
+ transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
13879
+ emphasis: z25.enum(userDesignOptionCatalog.emphases),
13880
+ sectionHeight: sectionHeightIntentSchema.optional(),
13881
+ heroLegibility: heroLegibilityStrategySchema.optional(),
13882
+ heroComposition: heroCompositionIntentSchema.optional(),
13883
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
13884
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
13885
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
13886
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
13887
+ tileTreatment: tileTreatmentSchema.optional(),
13888
+ eventListTreatment: eventListTreatmentSchema.optional(),
13889
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
13890
+ }).strict();
13891
+ var styleAuthoritySchema = z25.discriminatedUnion("kind", [
13892
+ z25.object({
13893
+ kind: z25.literal("theme-v2"),
13894
+ source: designResolutionPolicySchema,
13895
+ siteStyleId: z25.string().min(1).transform(asSiteStyleId),
13896
+ templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
13897
+ templateVersion: z25.number().int().nonnegative(),
13898
+ resolverVersion: z25.number().int().nonnegative()
13899
+ }).strict(),
13900
+ z25.object({
13901
+ kind: z25.literal("legacy-raw"),
13902
+ reason: z25.enum(["pre-theme-v2", "manual-runtime-fields"])
13903
+ }).strict(),
13904
+ z25.object({
13905
+ kind: z25.literal("advanced-detached"),
13906
+ reason: z25.literal("detached-custom-runtime-fields")
13907
+ }).strict()
13908
+ ]);
13909
+ var blockRuntimeStyleAuthoritySchema = z25.object({
13910
+ unit: z25.literal("block-runtime-fields"),
13911
+ blockId: z25.string().min(1).transform(asDesignBlockId),
13912
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
13913
+ authority: styleAuthoritySchema
13914
+ }).strict();
13915
+ var persistedPageDesignStateV1Schema = z25.object({
13916
+ schemaVersion: z25.literal(themeV2DesignStateSchemaVersion),
13917
+ siteStyleId: z25.string().min(1).transform(asSiteStyleId),
13918
+ templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
13919
+ templateVersion: z25.number().int().nonnegative(),
13920
+ resolverVersion: z25.number().int().nonnegative(),
13921
+ rhythmPresetId: z25.string().min(1),
13922
+ blocks: z25.array(blockDesignPlanSchema),
13923
+ styleAuthorities: z25.array(blockRuntimeStyleAuthoritySchema)
13924
+ }).strict();
13925
+
13926
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
13927
+ function defineDesignRuntimeRules(rules) {
13928
+ return rules;
13929
+ }
13930
+ function defineComponentRuntimeRules(rules) {
13931
+ return rules;
13932
+ }
13933
+ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
13934
+ sectionSurfaces: {
13935
+ base: {},
13936
+ "muted-band": {
13937
+ background: {
13938
+ type: "color",
13939
+ color: "muted"
13940
+ }
13941
+ },
13942
+ "accent-band": {
13943
+ background: {
13944
+ type: "color",
13945
+ color: "primary"
13946
+ }
13947
+ },
13948
+ "brand-depth-band": {
13949
+ background: {
13950
+ type: "color",
13951
+ color: "primary-800"
13952
+ }
13953
+ },
13954
+ "hero-image": {
13955
+ background: {
13956
+ type: "image",
13957
+ opacity: 1,
13958
+ position: "center center",
13959
+ ...uniformSectionForeground("text")
13960
+ }
13961
+ }
13962
+ },
13963
+ heroLegibility: {
13964
+ "scrim-gradient": {
13965
+ type: "gradient",
13966
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
13967
+ opacity: 1
13968
+ },
13969
+ "solid-panel": {
13970
+ type: "color",
13971
+ color: "surface",
13972
+ opacity: 0.88
13973
+ }
13974
+ },
13975
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
13976
+ });
13977
+ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
13978
+ panelFrames: {
13979
+ inset: {
13980
+ spacing: "comfortable",
13981
+ rounded: "xl",
13982
+ raised: false,
13983
+ background: {
13984
+ type: "color",
13985
+ color: "surfaceAlt",
13986
+ textColor: "text"
13987
+ }
13988
+ },
13989
+ raised: {
13990
+ spacing: "comfortable",
13991
+ rounded: "xl",
13992
+ raised: true,
13993
+ background: {
13994
+ type: "color",
13995
+ color: "surfaceAlt",
13996
+ textColor: "text"
13997
+ }
13998
+ },
13999
+ editorial: {
14000
+ spacing: "medium",
14001
+ rounded: "xl",
14002
+ raised: false,
14003
+ background: {
14004
+ type: "color",
14005
+ color: "surface",
14006
+ textColor: "text"
14007
+ }
14008
+ }
14009
+ },
14010
+ flushFrames: {
14011
+ "media-panel": {
14012
+ fullWidth: true,
14013
+ spacing: "none",
14014
+ rounded: "none",
14015
+ raised: false
14016
+ }
14017
+ },
14018
+ itemSurfaces: {
14019
+ none: null,
14020
+ default: {
14021
+ spacing: "medium",
14022
+ rounded: "lg",
14023
+ raised: false
14024
+ },
14025
+ flat: {
14026
+ spacing: "medium",
14027
+ rounded: "lg",
14028
+ raised: false
14029
+ },
14030
+ outlined: {
14031
+ spacing: "medium",
14032
+ rounded: "lg",
14033
+ raised: false,
14034
+ border: {
14035
+ enabled: true,
14036
+ width: "1",
14037
+ colorToken: "border"
14038
+ }
14039
+ },
14040
+ raised: {
14041
+ spacing: "medium",
14042
+ rounded: "xl",
14043
+ raised: true
14044
+ },
14045
+ inset: {
14046
+ treatment: "soft-panel",
14047
+ spacing: "comfortable",
14048
+ rounded: "xl",
14049
+ raised: false,
14050
+ border: {
14051
+ enabled: false
14052
+ },
14053
+ background: {
14054
+ type: "color",
14055
+ color: "surfaceAlt",
14056
+ textColor: "text"
14057
+ }
14058
+ },
14059
+ editorial: {
14060
+ // Boxless open column with a short rule on top; the visual treatment
14061
+ // lives in blocks-static/card-treatments.css.
14062
+ treatment: "editorial-rule",
14063
+ spacing: "none",
14064
+ rounded: "none",
14065
+ raised: false,
14066
+ border: {
14067
+ enabled: false
14068
+ }
14069
+ },
14070
+ "color-blocked": {
14071
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
14072
+ // (by position) and staggered offset live in
14073
+ // blocks-static/card-treatments.css; here we set the shared shape:
14074
+ // generous padding, large radius, no border, flat (no shadow).
14075
+ treatment: "color-blocked",
14076
+ spacing: "spacious",
14077
+ rounded: "2xl",
14078
+ raised: false,
14079
+ border: {
14080
+ enabled: false
14081
+ }
14082
+ }
14083
+ }
14084
+ });
14085
+ function uniformSectionForeground(token) {
14086
+ return {
14087
+ textColor: token,
14088
+ headingColor: token,
14089
+ linkColor: token,
14090
+ supportingColor: token
14091
+ };
14092
+ }
14093
+
13415
14094
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
13416
14095
  var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
13417
14096
  var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
@@ -13430,6 +14109,7 @@ var curatedSiteStyleIdValues = [
13430
14109
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
13431
14110
  "site-style:bold-launch",
13432
14111
  "site-style:south-west-twerk-school",
14112
+ "site-style:kirtan-ornate",
13433
14113
  "site-style:original-joy"
13434
14114
  ];
13435
14115
  var quietBudget = {
@@ -13456,6 +14136,50 @@ var expressiveBudget = {
13456
14136
  mediaDensity: "high",
13457
14137
  decorativeRepetition: "medium"
13458
14138
  };
14139
+ var kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
14140
+ ...defaultDesignRuntimeRules,
14141
+ defaultEyebrowTreatment: "accent",
14142
+ sectionSurfaces: {
14143
+ ...defaultDesignRuntimeRules.sectionSurfaces,
14144
+ "muted-band": {
14145
+ background: {
14146
+ type: "color",
14147
+ color: "muted"
14148
+ },
14149
+ foreground: {
14150
+ textColor: "text",
14151
+ headingColor: "primary",
14152
+ linkColor: "primary",
14153
+ supportingColor: "text"
14154
+ }
14155
+ },
14156
+ "brand-depth-band": {
14157
+ background: {
14158
+ type: "color",
14159
+ color: "primary-800"
14160
+ },
14161
+ foreground: {
14162
+ textColor: "text",
14163
+ headingColor: "primary",
14164
+ linkColor: "primary",
14165
+ supportingColor: "text"
14166
+ }
14167
+ },
14168
+ "hero-image": {
14169
+ background: {
14170
+ type: "image",
14171
+ opacity: 1,
14172
+ position: "center center"
14173
+ },
14174
+ foreground: {
14175
+ textColor: "text",
14176
+ headingColor: "primary",
14177
+ linkColor: "primary",
14178
+ supportingColor: "text"
14179
+ }
14180
+ }
14181
+ }
14182
+ });
13459
14183
  var expressiveUnderlineInputs = {
13460
14184
  base: {
13461
14185
  background: { type: "transparent" },
@@ -13493,6 +14217,43 @@ var expressiveUnderlineInputs = {
13493
14217
  opacity: 0.6
13494
14218
  }
13495
14219
  };
14220
+ var ornateDarkInputs = {
14221
+ base: {
14222
+ background: { type: "solid", colorToken: "surfaceAlt" },
14223
+ textColorToken: "text",
14224
+ border: {
14225
+ widthClass: "border",
14226
+ colorToken: "primary/45",
14227
+ style: "all"
14228
+ },
14229
+ corners: "square",
14230
+ shadow: null,
14231
+ spacing: "medium",
14232
+ fontSize: "base"
14233
+ },
14234
+ label: {
14235
+ textColorToken: "primary",
14236
+ fontWeight: "semibold",
14237
+ fontSize: "xs",
14238
+ textTransform: "uppercase",
14239
+ letterSpacing: "wider",
14240
+ opacity: 1
14241
+ },
14242
+ focus: {
14243
+ ringColorToken: "primary/18",
14244
+ ringWidth: "2",
14245
+ borderColorToken: "primary/70"
14246
+ },
14247
+ error: {
14248
+ borderColorToken: "destructive",
14249
+ textColorToken: "destructive"
14250
+ },
14251
+ disabled: {
14252
+ backgroundColorToken: "muted",
14253
+ textColorToken: "mutedText",
14254
+ opacity: 0.6
14255
+ }
14256
+ };
13496
14257
  function uniqueContentFrameKinds() {
13497
14258
  const kinds = [
13498
14259
  ...new Set(
@@ -13550,6 +14311,7 @@ function defineCuratedSiteStyle(input) {
13550
14311
  // clean/minimal styles default to none.
13551
14312
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
13552
14313
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
14314
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
13553
14315
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
13554
14316
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
13555
14317
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -14500,6 +15262,80 @@ var curatedSiteStyles = [
14500
15262
  paletteChoice("high-contrast-ink")
14501
15263
  ]
14502
15264
  }),
15265
+ defineCuratedSiteStyle({
15266
+ id: "site-style:kirtan-ornate",
15267
+ name: "Kirtan Ornate",
15268
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
15269
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
15270
+ generationBrief: "Use a deep plum ground with pale gold as the main brand color, rose accent details, cream text, spacious split hero sections, devotional editorial headings, compact event lists, and framed conversion sections. The mood should feel soulful and ceremonial, not gothic or theatrical.",
15271
+ selectionKeywordRules: [
15272
+ { kind: "word", value: "kirtan" },
15273
+ { kind: "word", value: "chanting" },
15274
+ { kind: "word", value: "ceremony" },
15275
+ { kind: "word", value: "devotional" }
15276
+ ],
15277
+ tokenRecipes: {
15278
+ palette: "brand-led",
15279
+ contrast: "strong",
15280
+ radius: "soft",
15281
+ shadow: "subtle",
15282
+ typography: "serif-editorial",
15283
+ spacing: "airy",
15284
+ motion: "subtle"
15285
+ },
15286
+ compositionBudget: expressiveBudget,
15287
+ typographyPresetChoices: [
15288
+ typographyChoice("typography-preset:kirtan-ornate"),
15289
+ typographyChoice("typography-preset:luxe-contrast"),
15290
+ typographyChoice("typography-preset:editorial-serif")
15291
+ ],
15292
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
15293
+ themeOverrides: {
15294
+ accordions: warmInsetAccordionSystem,
15295
+ cards: originalJoyCardSystem,
15296
+ testimonialQuote: serifDisplayQuote,
15297
+ bodyText: {
15298
+ intro: {
15299
+ paragraphSize: "editorial",
15300
+ headingSize: "editorial"
15301
+ }
15302
+ },
15303
+ inputs: ornateDarkInputs
15304
+ },
15305
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
15306
+ recommendedAppearancePresetIds: [
15307
+ "hero-brand-scrim-fixed-frame",
15308
+ "media-text-quiet-story",
15309
+ "events-lined-panel",
15310
+ "schedule-details-brand-depth",
15311
+ "testimonials-statement-cards",
15312
+ "contact-form-panel"
15313
+ ],
15314
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
15315
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
15316
+ recommendedHeaderStyleChoicesByLayout: {
15317
+ floating: [
15318
+ headerStyleChoice("minimal-surface"),
15319
+ headerStyleChoice("split-glass"),
15320
+ headerStyleChoice("glass")
15321
+ ]
15322
+ },
15323
+ recommendedHeaderLookIds: ["minimal-transparent"],
15324
+ recommendedFooterLookIds: [
15325
+ "site-footer-brand-two-band",
15326
+ "footer-muted-grounding"
15327
+ ],
15328
+ buttonPersonalityChoices: [
15329
+ buttonChoice("ornate-ritual"),
15330
+ buttonChoice("joy-stamp"),
15331
+ buttonChoice("ink-stamp")
15332
+ ],
15333
+ paletteVariantChoices: [
15334
+ paletteChoice("warm-dark-kirtan-gold"),
15335
+ paletteChoice("warm-dark-ember"),
15336
+ paletteChoice("brand-led-burgundy-gold")
15337
+ ]
15338
+ }),
14503
15339
  defineCuratedSiteStyle({
14504
15340
  id: "site-style:original-joy",
14505
15341
  name: "Original Joy",
@@ -14606,319 +15442,6 @@ var pageFlowPresets = [
14606
15442
  }
14607
15443
  ];
14608
15444
 
14609
- // ../theme-core/src/site-styles/designState.ts
14610
- import { z as z25 } from "zod";
14611
- var themeV2DesignStateSchemaVersion = 1;
14612
- var designResolutionPolicySchema = z25.enum(["generated", "user", "admin", "sdk"]);
14613
- var runtimeStyleFieldNameSchema = z25.enum(themeV2RuntimeStyleFieldNames);
14614
- var nonEmptyRuntimeStyleFieldNamesSchema = z25.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
14615
- fields3[0],
14616
- ...fields3.slice(1)
14617
- ]);
14618
- var heroLegibilityStrategySchema = z25.enum([
14619
- "none",
14620
- "scrim-gradient",
14621
- "solid-panel"
14622
- ]);
14623
- var heroCompositionIntentSchema = z25.enum([
14624
- "center",
14625
- "bottom-left"
14626
- ]);
14627
- var heroTypographyScaleIntentSchema = z25.enum([
14628
- "quiet",
14629
- "editorial",
14630
- "display",
14631
- "poster"
14632
- ]);
14633
- var sectionHeightIntentSchema = z25.enum([
14634
- "default",
14635
- "banner",
14636
- "hero",
14637
- "immersive"
14638
- ]);
14639
- var imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
14640
- var imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
14641
- var imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
14642
- z25.object({ kind: z25.literal("none") }).strict(),
14643
- z25.object({
14644
- kind: z25.literal("brand-scrim"),
14645
- token: z25.enum(["primary", "secondary", "accent"]),
14646
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14647
- }).strict(),
14648
- z25.object({
14649
- kind: z25.literal("brand-wash"),
14650
- token: z25.enum(["primary", "secondary", "accent"]),
14651
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14652
- }).strict(),
14653
- z25.object({
14654
- kind: z25.literal("neutral-scrim"),
14655
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14656
- }).strict(),
14657
- z25.object({
14658
- kind: z25.literal("neutral-wash"),
14659
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14660
- }).strict(),
14661
- z25.object({
14662
- kind: z25.literal("solid-panel"),
14663
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
14664
- }).strict()
14665
- ]);
14666
- var testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
14667
- var tileTreatmentSchema = z25.enum(tileTreatmentValues);
14668
- var eventListTreatmentSchema = z25.enum(eventListTreatmentValues);
14669
- var eyebrowTreatmentSchema = z25.enum(eyebrowTreatmentValues);
14670
- function uniqueNonEmpty(values) {
14671
- const uniqueValues = [...new Set(values)];
14672
- const firstValue = uniqueValues[0];
14673
- if (!firstValue) {
14674
- throw new Error("Expected at least one Theme V2 design state option.");
14675
- }
14676
- return [firstValue, ...uniqueValues.slice(1)];
14677
- }
14678
- var userPanelTreatments = uniqueNonEmpty(
14679
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
14680
- );
14681
- var userFlushTreatments = uniqueNonEmpty(
14682
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
14683
- );
14684
- var userFlushBleeds = uniqueNonEmpty(
14685
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
14686
- );
14687
- var contentFrameIntentSchema = z25.discriminatedUnion("kind", [
14688
- z25.object({ kind: z25.literal("plain") }).strict(),
14689
- z25.object({
14690
- kind: z25.literal("panel"),
14691
- treatment: z25.enum(userPanelTreatments)
14692
- }).strict(),
14693
- z25.object({
14694
- kind: z25.literal("flush-panel"),
14695
- treatment: z25.enum(userFlushTreatments),
14696
- bleed: z25.enum(userFlushBleeds)
14697
- }).strict()
14698
- ]);
14699
- var blockDesignPlanSchema = z25.object({
14700
- blockId: z25.string().min(1).transform(asDesignBlockId),
14701
- blockKind: z25.string().min(1),
14702
- purpose: z25.string().min(1),
14703
- sectionSurface: z25.enum(userDesignOptionCatalog.sectionSurfaces),
14704
- contentFrame: contentFrameIntentSchema,
14705
- itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
14706
- transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
14707
- emphasis: z25.enum(userDesignOptionCatalog.emphases),
14708
- sectionHeight: sectionHeightIntentSchema.optional(),
14709
- heroLegibility: heroLegibilityStrategySchema.optional(),
14710
- heroComposition: heroCompositionIntentSchema.optional(),
14711
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
14712
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
14713
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
14714
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
14715
- tileTreatment: tileTreatmentSchema.optional(),
14716
- eventListTreatment: eventListTreatmentSchema.optional(),
14717
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
14718
- }).strict();
14719
- var styleAuthoritySchema = z25.discriminatedUnion("kind", [
14720
- z25.object({
14721
- kind: z25.literal("theme-v2"),
14722
- source: designResolutionPolicySchema,
14723
- siteStyleId: z25.string().min(1).transform(asSiteStyleId),
14724
- templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
14725
- templateVersion: z25.number().int().nonnegative(),
14726
- resolverVersion: z25.number().int().nonnegative()
14727
- }).strict(),
14728
- z25.object({
14729
- kind: z25.literal("legacy-raw"),
14730
- reason: z25.enum(["pre-theme-v2", "manual-runtime-fields"])
14731
- }).strict(),
14732
- z25.object({
14733
- kind: z25.literal("advanced-detached"),
14734
- reason: z25.literal("detached-custom-runtime-fields")
14735
- }).strict()
14736
- ]);
14737
- var blockRuntimeStyleAuthoritySchema = z25.object({
14738
- unit: z25.literal("block-runtime-fields"),
14739
- blockId: z25.string().min(1).transform(asDesignBlockId),
14740
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
14741
- authority: styleAuthoritySchema
14742
- }).strict();
14743
- var persistedPageDesignStateV1Schema = z25.object({
14744
- schemaVersion: z25.literal(themeV2DesignStateSchemaVersion),
14745
- siteStyleId: z25.string().min(1).transform(asSiteStyleId),
14746
- templateId: z25.string().min(1).transform(asDesignSystemTemplateId),
14747
- templateVersion: z25.number().int().nonnegative(),
14748
- resolverVersion: z25.number().int().nonnegative(),
14749
- rhythmPresetId: z25.string().min(1),
14750
- blocks: z25.array(blockDesignPlanSchema),
14751
- styleAuthorities: z25.array(blockRuntimeStyleAuthoritySchema)
14752
- }).strict();
14753
-
14754
- // ../theme-core/src/site-styles/runtimeCompiler.ts
14755
- function defineDesignRuntimeRules(rules) {
14756
- return rules;
14757
- }
14758
- function defineComponentRuntimeRules(rules) {
14759
- return rules;
14760
- }
14761
- var defaultDesignRuntimeRules = defineDesignRuntimeRules({
14762
- sectionSurfaces: {
14763
- base: {},
14764
- "muted-band": {
14765
- background: {
14766
- type: "color",
14767
- color: "muted"
14768
- }
14769
- },
14770
- "accent-band": {
14771
- background: {
14772
- type: "color",
14773
- color: "primary"
14774
- }
14775
- },
14776
- "brand-depth-band": {
14777
- background: {
14778
- type: "color",
14779
- color: "primary-800"
14780
- }
14781
- },
14782
- "hero-image": {
14783
- background: {
14784
- type: "image",
14785
- opacity: 1,
14786
- position: "center center",
14787
- ...uniformSectionForeground("text")
14788
- }
14789
- }
14790
- },
14791
- heroLegibility: {
14792
- "scrim-gradient": {
14793
- type: "gradient",
14794
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
14795
- opacity: 1
14796
- },
14797
- "solid-panel": {
14798
- type: "color",
14799
- color: "surface",
14800
- opacity: 0.88
14801
- }
14802
- },
14803
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
14804
- });
14805
- var defaultComponentRuntimeRules = defineComponentRuntimeRules({
14806
- panelFrames: {
14807
- inset: {
14808
- spacing: "comfortable",
14809
- rounded: "xl",
14810
- raised: false,
14811
- background: {
14812
- type: "color",
14813
- color: "surfaceAlt",
14814
- textColor: "text"
14815
- }
14816
- },
14817
- raised: {
14818
- spacing: "comfortable",
14819
- rounded: "xl",
14820
- raised: true,
14821
- background: {
14822
- type: "color",
14823
- color: "surfaceAlt",
14824
- textColor: "text"
14825
- }
14826
- },
14827
- editorial: {
14828
- spacing: "medium",
14829
- rounded: "xl",
14830
- raised: false,
14831
- background: {
14832
- type: "color",
14833
- color: "surface",
14834
- textColor: "text"
14835
- }
14836
- }
14837
- },
14838
- flushFrames: {
14839
- "media-panel": {
14840
- fullWidth: true,
14841
- spacing: "none",
14842
- rounded: "none",
14843
- raised: false
14844
- }
14845
- },
14846
- itemSurfaces: {
14847
- none: null,
14848
- default: {
14849
- spacing: "medium",
14850
- rounded: "lg",
14851
- raised: false
14852
- },
14853
- flat: {
14854
- spacing: "medium",
14855
- rounded: "lg",
14856
- raised: false
14857
- },
14858
- outlined: {
14859
- spacing: "medium",
14860
- rounded: "lg",
14861
- raised: false,
14862
- border: {
14863
- enabled: true,
14864
- width: "1",
14865
- colorToken: "border"
14866
- }
14867
- },
14868
- raised: {
14869
- spacing: "medium",
14870
- rounded: "xl",
14871
- raised: true
14872
- },
14873
- inset: {
14874
- treatment: "soft-panel",
14875
- spacing: "comfortable",
14876
- rounded: "xl",
14877
- raised: false,
14878
- border: {
14879
- enabled: false
14880
- },
14881
- background: {
14882
- type: "color",
14883
- color: "surfaceAlt",
14884
- textColor: "text"
14885
- }
14886
- },
14887
- editorial: {
14888
- // Boxless open column with a short rule on top; the visual treatment
14889
- // lives in blocks-static/card-treatments.css.
14890
- treatment: "editorial-rule",
14891
- spacing: "none",
14892
- rounded: "none",
14893
- raised: false,
14894
- border: {
14895
- enabled: false
14896
- }
14897
- },
14898
- "color-blocked": {
14899
- // Bold, flat colour-blocked cards. The per-card background colour cycle
14900
- // (by position) and staggered offset live in
14901
- // blocks-static/card-treatments.css; here we set the shared shape:
14902
- // generous padding, large radius, no border, flat (no shadow).
14903
- treatment: "color-blocked",
14904
- spacing: "spacious",
14905
- rounded: "2xl",
14906
- raised: false,
14907
- border: {
14908
- enabled: false
14909
- }
14910
- }
14911
- }
14912
- });
14913
- function uniformSectionForeground(token) {
14914
- return {
14915
- textColor: token,
14916
- headingColor: token,
14917
- linkColor: token,
14918
- supportingColor: token
14919
- };
14920
- }
14921
-
14922
15445
  // ../theme-core/src/site-styles/generatedSchemas.ts
14923
15446
  import { z as z26 } from "zod";
14924
15447
  function uniqueNonEmpty2(values) {
@@ -15730,6 +16253,31 @@ function cardStylesField(options = {}) {
15730
16253
  return createBoxStylesFieldWithDepth("card", options);
15731
16254
  }
15732
16255
 
16256
+ // ../blocks/src/system/fields/imageShape.ts
16257
+ var standardImageShapeOptions = [
16258
+ { value: "default", label: "Default" },
16259
+ { value: "square", label: "Square corners" },
16260
+ { value: "rounded", label: "Rounded corners" },
16261
+ { value: "circle", label: "Circle" },
16262
+ { value: "arch", label: "Arch" }
16263
+ ];
16264
+ function createImageShapeField(options = {}) {
16265
+ return {
16266
+ id: options.id ?? "imageShape",
16267
+ type: "select",
16268
+ label: options.label ?? "Image shape",
16269
+ ...options.description ? { description: options.description } : {},
16270
+ required: false,
16271
+ defaultValue: options.defaultValue ?? "default",
16272
+ multiple: false,
16273
+ options: [...standardImageShapeOptions],
16274
+ ui: {
16275
+ intent: options.uiIntent ?? "display",
16276
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
16277
+ }
16278
+ };
16279
+ }
16280
+
15733
16281
  // ../blocks/src/utils/env.ts
15734
16282
  function isDevEnvironment() {
15735
16283
  try {
@@ -16544,7 +17092,7 @@ function buildFooterNavAll(common) {
16544
17092
  return stack(
16545
17093
  { className: common.className, gap: common.gap, align: "stretch" },
16546
17094
  [item],
16547
- when(collectionPath)
17095
+ whenCollectionHasItems(collectionPath)
16548
17096
  );
16549
17097
  }
16550
17098
  function buildFooterNavLinksOnly(common) {
@@ -16577,7 +17125,7 @@ function buildFooterNavLinksOnly(common) {
16577
17125
  return stack(
16578
17126
  { className: common.className, gap: common.gap, align: "stretch" },
16579
17127
  [item],
16580
- when(collectionPath)
17128
+ whenCollectionHasItems(collectionPath)
16581
17129
  );
16582
17130
  }
16583
17131
  function buildFooterNavFlatten(common) {
@@ -16626,9 +17174,20 @@ function buildFooterNavFlatten(common) {
16626
17174
  return stack(
16627
17175
  { className: common.className, gap: common.gap, align: "stretch" },
16628
17176
  [item],
16629
- when(collectionPath)
17177
+ whenCollectionHasItems(collectionPath)
16630
17178
  );
16631
17179
  }
17180
+ var whenCollectionHasItems = (collectionPath) => (node) => ({
17181
+ ...node,
17182
+ $when: {
17183
+ when: {
17184
+ from: collectionPath,
17185
+ transforms: [{ id: "array.length" }]
17186
+ },
17187
+ equals: 0,
17188
+ not: true
17189
+ }
17190
+ });
16632
17191
  function footerNav(opts) {
16633
17192
  const mode = opts?.mode ?? "all";
16634
17193
  const collectionPath = opts?.collectionPath ?? "footerMenu.items";
@@ -19343,8 +19902,23 @@ function fragmentsToRepeaterField(id, label, fragments, options = {}) {
19343
19902
  var heroLayoutControlsFragment = defineFragment({
19344
19903
  id: "heroLayoutControls",
19345
19904
  title: "Hero Layout",
19346
- description: "Alignment and content width controls for hero layouts.",
19905
+ description: "Title scale, alignment, and content width controls for hero layouts.",
19347
19906
  fields: [
19907
+ {
19908
+ id: "titleSize",
19909
+ type: "select",
19910
+ label: "Title size",
19911
+ description: "Adjust the visual scale of the hero title.",
19912
+ required: false,
19913
+ ui: { intent: "display" },
19914
+ options: [
19915
+ { value: "auto", label: "Auto" },
19916
+ { value: "quiet", label: "Normal" },
19917
+ { value: "editorial", label: "Large" },
19918
+ { value: "display", label: "Huge" },
19919
+ { value: "poster", label: "Poster" }
19920
+ ]
19921
+ },
19348
19922
  {
19349
19923
  id: "contentAlignment",
19350
19924
  type: "select",
@@ -20139,7 +20713,18 @@ function heroSplitImagePane() {
20139
20713
  return stack(
20140
20714
  {
20141
20715
  gap: "none",
20142
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
20716
+ className: {
20717
+ $bind: {
20718
+ from: "content.imageShape",
20719
+ transforms: [
20720
+ {
20721
+ id: "ui.imageShapeClassName",
20722
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
20723
+ }
20724
+ ],
20725
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
20726
+ }
20727
+ },
20143
20728
  style: {
20144
20729
  minHeight: "clamp(18rem, 36vw, 34rem)"
20145
20730
  }
@@ -20257,6 +20842,12 @@ var heroConfig = {
20257
20842
  label: "Content card",
20258
20843
  renderInHeader: true,
20259
20844
  intent: "style"
20845
+ }),
20846
+ createImageShapeField({
20847
+ id: "imageShape",
20848
+ label: "Image shape",
20849
+ defaultValue: "default",
20850
+ uiIntent: "display"
20260
20851
  })
20261
20852
  ],
20262
20853
  layout: classicLayout,
@@ -20271,6 +20862,15 @@ var heroConfig = {
20271
20862
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
20272
20863
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
20273
20864
  icon: "Sparkles",
20865
+ previewCustomize: {
20866
+ quickFieldPriority: [
20867
+ "titleSize",
20868
+ "contentAlignment",
20869
+ "contentMaxWidth",
20870
+ "verticalAlignment",
20871
+ "imageShape"
20872
+ ]
20873
+ },
20274
20874
  styleTokens: {
20275
20875
  typography: "display",
20276
20876
  spacing: "xl"
@@ -20287,7 +20887,8 @@ var standardAspectRatioOptions = [
20287
20887
  { value: "16/9", label: "16:9 (Landscape)" },
20288
20888
  { value: "4/3", label: "4:3 (Standard)" },
20289
20889
  { value: "1/1", label: "1:1 (Square)" },
20290
- { value: "3/4", label: "3:4 (Portrait)" }
20890
+ { value: "3/4", label: "3:4 (Portrait)" },
20891
+ { value: "9/16", label: "9:16 (Tall portrait)" }
20291
20892
  ];
20292
20893
  function createAspectRatioField(options = {}) {
20293
20894
  return {
@@ -21529,6 +22130,258 @@ var formBlockDefinition = {
21529
22130
  runtime: formBlockRuntime
21530
22131
  };
21531
22132
 
22133
+ // ../blocks/src/system/blocks/contact-newsletter.ts
22134
+ var contactNewsletterLayout = styledSection({
22135
+ children: sectionContainer([
22136
+ el(
22137
+ "div",
22138
+ { className: "contact-newsletter-grid" },
22139
+ [
22140
+ el(
22141
+ "div",
22142
+ { className: "contact-newsletter-column contact-newsletter-contact" },
22143
+ [
22144
+ el(
22145
+ "div",
22146
+ { className: "contact-newsletter-copy" },
22147
+ [
22148
+ text(
22149
+ {
22150
+ as: "h2",
22151
+ className: "form-copy-title"
22152
+ },
22153
+ when("contactTitle"),
22154
+ bind("contactTitle")
22155
+ ),
22156
+ richText(
22157
+ {
22158
+ className: "form-copy-intro rb-prose rb-max-w-none"
22159
+ },
22160
+ when("contactIntro"),
22161
+ bind("contactIntro")
22162
+ )
22163
+ ]
22164
+ ),
22165
+ el(
22166
+ "form",
22167
+ withApiBindings({
22168
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
22169
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
22170
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
22171
+ }),
22172
+ [],
22173
+ bind("data.form")
22174
+ )
22175
+ ]
22176
+ ),
22177
+ el(
22178
+ "div",
22179
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
22180
+ [
22181
+ el(
22182
+ "div",
22183
+ { className: "contact-newsletter-copy" },
22184
+ [
22185
+ text(
22186
+ {
22187
+ as: "h2",
22188
+ className: "newsletter-copy-title"
22189
+ },
22190
+ when("newsletterTitle"),
22191
+ bind("newsletterTitle")
22192
+ ),
22193
+ richText(
22194
+ {
22195
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
22196
+ },
22197
+ when("newsletterSubtitle"),
22198
+ bind("newsletterSubtitle")
22199
+ )
22200
+ ]
22201
+ ),
22202
+ el(
22203
+ "newsletter-form",
22204
+ withApiBindings({
22205
+ listId: { $bind: { from: "listId" } },
22206
+ preset: { $bind: { from: "preset" } },
22207
+ includePhone: { $bind: { from: "includePhone" } },
22208
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
22209
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
22210
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
22211
+ tags: { $bind: { from: "newsletterTags" } },
22212
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
22213
+ }),
22214
+ []
22215
+ )
22216
+ ]
22217
+ )
22218
+ ]
22219
+ )
22220
+ ], {
22221
+ className: "contact-newsletter-container"
22222
+ }),
22223
+ baseClass: "",
22224
+ spacing: "medium",
22225
+ background: "surface"
22226
+ });
22227
+ var contactNewsletterManifest = createBlockManifest({
22228
+ id: "block.contact-newsletter",
22229
+ title: "Contact + Newsletter",
22230
+ titleSource: "contactTitle",
22231
+ description: "Two-column newsletter signup and contact form section.",
22232
+ category: "interactive",
22233
+ layout: contactNewsletterLayout,
22234
+ defaultVariant: "default",
22235
+ variants: {
22236
+ default: contactNewsletterLayout
22237
+ },
22238
+ variantOptions: {
22239
+ default: {
22240
+ label: "Two column",
22241
+ description: "Newsletter and contact form side by side.",
22242
+ icon: "Columns2"
22243
+ }
22244
+ },
22245
+ additionalFields: [
22246
+ {
22247
+ id: "newsletterTitle",
22248
+ type: "text",
22249
+ label: "Newsletter title",
22250
+ defaultValue: "Stay connected"
22251
+ },
22252
+ {
22253
+ id: "newsletterSubtitle",
22254
+ type: "richText",
22255
+ label: "Newsletter intro"
22256
+ },
22257
+ {
22258
+ id: "listId",
22259
+ type: "reference",
22260
+ label: "Newsletter list",
22261
+ description: "Select the list new subscribers should be added to.",
22262
+ required: true,
22263
+ referenceKind: "newsletterList",
22264
+ allowManualEntry: false,
22265
+ ui: { intent: "behavior" }
22266
+ },
22267
+ {
22268
+ id: "preset",
22269
+ type: "select",
22270
+ label: "Newsletter fields",
22271
+ defaultValue: "emailOnly",
22272
+ ui: { intent: "display" },
22273
+ options: [
22274
+ { value: "emailOnly", label: "Email only" },
22275
+ { value: "emailName", label: "Email + Name" },
22276
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
22277
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
22278
+ ]
22279
+ },
22280
+ {
22281
+ id: "includePhone",
22282
+ type: "boolean",
22283
+ label: "Include phone field",
22284
+ defaultValue: false,
22285
+ ui: { intent: "display" }
22286
+ },
22287
+ {
22288
+ id: "newsletterButtonLabel",
22289
+ type: "text",
22290
+ label: "Newsletter button label",
22291
+ defaultValue: "Subscribe",
22292
+ ui: { intent: "display" }
22293
+ },
22294
+ {
22295
+ id: "newsletterSuccessMessage",
22296
+ type: "text",
22297
+ label: "Newsletter success message",
22298
+ defaultValue: "Thanks for subscribing!",
22299
+ ui: { intent: "behavior" }
22300
+ },
22301
+ {
22302
+ id: "newsletterPrivacyNote",
22303
+ type: "text",
22304
+ label: "Privacy note",
22305
+ ui: { intent: "display" }
22306
+ },
22307
+ {
22308
+ id: "newsletterTags",
22309
+ type: "text",
22310
+ label: "Newsletter tags",
22311
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
22312
+ ui: { intent: "behavior" }
22313
+ },
22314
+ {
22315
+ id: "contactTitle",
22316
+ type: "text",
22317
+ label: "Contact title",
22318
+ defaultValue: "Get in touch"
22319
+ },
22320
+ {
22321
+ id: "contactIntro",
22322
+ type: "richText",
22323
+ label: "Contact intro"
22324
+ },
22325
+ {
22326
+ id: "formSlug",
22327
+ type: "reference",
22328
+ label: "Contact form",
22329
+ description: "Pick a saved form to render.",
22330
+ required: true,
22331
+ referenceKind: "form",
22332
+ allowManualEntry: false,
22333
+ ui: { intent: "behavior" }
22334
+ },
22335
+ {
22336
+ id: "contactSubmitLabel",
22337
+ type: "text",
22338
+ label: "Contact button label",
22339
+ defaultValue: "Send message",
22340
+ ui: { intent: "display" }
22341
+ },
22342
+ {
22343
+ id: "contactSuccessMessage",
22344
+ type: "text",
22345
+ label: "Contact success message",
22346
+ defaultValue: "Thanks - we received your message.",
22347
+ ui: { intent: "behavior" }
22348
+ }
22349
+ ],
22350
+ styleTokens: {
22351
+ background: "surface",
22352
+ typography: "body",
22353
+ spacing: "md"
22354
+ },
22355
+ behaviours: {
22356
+ supportsThemeSwitching: true,
22357
+ inlineEditing: true,
22358
+ animation: false,
22359
+ paletteHidden: false
22360
+ },
22361
+ tags: [
22362
+ "contact",
22363
+ "newsletter",
22364
+ "signup",
22365
+ "email",
22366
+ "form",
22367
+ "lead-capture"
22368
+ ],
22369
+ icon: "MailPlus"
22370
+ });
22371
+ var contactNewsletterBlockDefinition = {
22372
+ manifest: contactNewsletterManifest,
22373
+ dataSchemas: { form: formDataSchema.optional() },
22374
+ dataLoaders: {
22375
+ form: {
22376
+ endpoint: "getPublicFormById",
22377
+ params: {
22378
+ formSlug: { $bind: { from: "formSlug" } }
22379
+ },
22380
+ mode: "server"
22381
+ }
22382
+ }
22383
+ };
22384
+
21532
22385
  // ../blocks/src/system/blocks/faq.ts
21533
22386
  function fragmentLayoutNode2(layout) {
21534
22387
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -21757,6 +22610,7 @@ var joinClasses3 = (parts) => parts.filter(
21757
22610
  ).join(" ").replace(/\s+/g, " ").trim();
21758
22611
  var eyebrowTreatmentClassMap = {
21759
22612
  plain: "",
22613
+ accent: "rb-eyebrow-treatment-accent",
21760
22614
  pill: "rb-eyebrow-treatment-pill",
21761
22615
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
21762
22616
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -21783,6 +22637,13 @@ var imageGalleryCornerClassMap = {
21783
22637
  "2xl": "rb-rounded-2xl",
21784
22638
  "3xl": "rb-rounded-3xl"
21785
22639
  };
22640
+ var imageShapeClassMap = {
22641
+ default: "",
22642
+ square: "rb-media-shape-square",
22643
+ rounded: "rb-media-shape-rounded",
22644
+ circle: "rb-media-shape-circle",
22645
+ arch: "rb-media-shape-arch"
22646
+ };
21786
22647
  var parseRatio = (raw) => {
21787
22648
  if (typeof raw !== "string") return null;
21788
22649
  const value = raw.trim();
@@ -21927,6 +22788,10 @@ function resolveHeroContentMaxWidth(content) {
21927
22788
  return "default";
21928
22789
  }
21929
22790
  function resolveHeroTypographyScale(content) {
22791
+ const titleSize = readString(content, "titleSize");
22792
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
22793
+ return titleSize;
22794
+ }
21930
22795
  const raw = readHeroLayoutString(
21931
22796
  content,
21932
22797
  "typographyScale",
@@ -22168,6 +23033,16 @@ var uiTransforms = [
22168
23033
  heroGridClassFromVerticalAlignmentTransform,
22169
23034
  imageFragmentClassTransform,
22170
23035
  imageFragmentSizeTransform,
23036
+ {
23037
+ id: "ui.imageShapeClassName",
23038
+ kind: "string",
23039
+ summary: "Apply a constrained media shape class",
23040
+ run: (value, options) => {
23041
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
23042
+ const shape = typeof value === "string" ? value.trim() : "default";
23043
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
23044
+ }
23045
+ },
22171
23046
  conditionalClassTransform,
22172
23047
  twoColumnContainerClassTransform,
22173
23048
  twoColumnFlexBasisTransform,
@@ -23561,6 +24436,21 @@ var siteHeaderManifest = createBlockManifest({
23561
24436
  id: "block.site-header",
23562
24437
  title: "Site Header",
23563
24438
  category: "layout",
24439
+ additionalFields: [
24440
+ {
24441
+ id: "mode",
24442
+ type: "select",
24443
+ label: "Header display",
24444
+ required: false,
24445
+ multiple: false,
24446
+ defaultValue: "default",
24447
+ options: [
24448
+ { value: "default", label: "Show header" },
24449
+ { value: "hidden", label: "Hide header" }
24450
+ ],
24451
+ ui: { intent: "display" }
24452
+ }
24453
+ ],
23564
24454
  // Skip section styles - this block uses theme-based styling
23565
24455
  skipSectionStyles: true,
23566
24456
  // Block manages its own wrapper - enables sticky positioning
@@ -24973,6 +25863,9 @@ var mediaTextManifest = createBlockManifest({
24973
25863
  category: "layout",
24974
25864
  includeContainerStyles: true,
24975
25865
  titleSource: "title",
25866
+ previewCustomize: {
25867
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
25868
+ },
24976
25869
  additionalFields: [
24977
25870
  {
24978
25871
  id: "images",
@@ -25011,7 +25904,7 @@ var mediaTextManifest = createBlockManifest({
25011
25904
  {
25012
25905
  id: "titleAlignment",
25013
25906
  type: "select",
25014
- label: "Title alignment",
25907
+ label: "Content alignment",
25015
25908
  required: false,
25016
25909
  defaultValue: "left",
25017
25910
  multiple: false,
@@ -25069,7 +25962,18 @@ var mediaTextManifest = createBlockManifest({
25069
25962
  transition: "slide"
25070
25963
  },
25071
25964
  ui: { intent: "behavior" }
25072
- }),
25965
+ }).map((field) => ({
25966
+ ...field,
25967
+ ui: {
25968
+ ...field.ui ?? {},
25969
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
25970
+ allOf: [
25971
+ { field: "images", minItems: 2 },
25972
+ { field: "carouselAutoplay", equals: true }
25973
+ ]
25974
+ } : { field: "images", minItems: 2 }
25975
+ }
25976
+ })),
25073
25977
  createAspectRatioField({
25074
25978
  id: "aspectRatio",
25075
25979
  label: "Media aspect ratio",
@@ -25077,6 +25981,12 @@ var mediaTextManifest = createBlockManifest({
25077
25981
  defaultValue: "auto",
25078
25982
  visibleWhen: { field: "images", notEquals: null }
25079
25983
  }),
25984
+ createImageShapeField({
25985
+ id: "imageShape",
25986
+ label: "Media shape",
25987
+ defaultValue: "default",
25988
+ visibleWhen: { field: "images", notEquals: null }
25989
+ }),
25080
25990
  {
25081
25991
  id: "text",
25082
25992
  type: "richText",
@@ -25110,6 +26020,30 @@ var mediaTextManifest = createBlockManifest({
25110
26020
  ...options?.not ? { not: true } : {}
25111
26021
  }
25112
26022
  });
26023
+ const bodyClassNameFromAlignment = {
26024
+ $bind: {
26025
+ from: "content.titleAlignment",
26026
+ transforms: [
26027
+ {
26028
+ id: "ui.bodyClassFromAlignment",
26029
+ options: { base: "rb-prose rb-max-w-none" }
26030
+ }
26031
+ ],
26032
+ fallback: "rb-prose rb-max-w-none"
26033
+ }
26034
+ };
26035
+ const titleClassNameFromAlignment = {
26036
+ $bind: {
26037
+ from: "content.titleAlignment",
26038
+ transforms: [
26039
+ {
26040
+ id: "ui.headingClassFromAlignment",
26041
+ options: { base: "" }
26042
+ }
26043
+ ],
26044
+ fallback: ""
26045
+ }
26046
+ };
25113
26047
  const defaultTextColumn = el("div", {}, [
25114
26048
  styledCard(
25115
26049
  [
@@ -25134,8 +26068,55 @@ var mediaTextManifest = createBlockManifest({
25134
26068
  bind("content.text")
25135
26069
  )
25136
26070
  ]);
26071
+ const bioTextColumn = el(
26072
+ "div",
26073
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
26074
+ [
26075
+ text(
26076
+ {
26077
+ as: "h2",
26078
+ className: titleClassNameFromAlignment
26079
+ },
26080
+ when("content.title"),
26081
+ bind("content.title")
26082
+ ),
26083
+ styledCard(
26084
+ [
26085
+ richText(
26086
+ {
26087
+ className: bodyClassNameFromAlignment
26088
+ },
26089
+ bind("content.text")
26090
+ )
26091
+ ],
26092
+ {
26093
+ stylesFrom: "content._textCardStyles",
26094
+ backgroundFrom: "content._textCardStyles.background"
26095
+ },
26096
+ when("content.wrapTextInCard")
26097
+ ),
26098
+ richText(
26099
+ {
26100
+ className: bodyClassNameFromAlignment
26101
+ },
26102
+ when("content.wrapTextInCard", { not: true }),
26103
+ bind("content.text")
26104
+ )
26105
+ ]
26106
+ );
25137
26107
  const defaultImageCommonProps = {
25138
- className: "rb-w-full rb-h-auto rb-object-cover",
26108
+ className: {
26109
+ $bind: {
26110
+ from: "content.imageShape",
26111
+ transforms: [
26112
+ {
26113
+ id: "ui.imageShapeClassName",
26114
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
26115
+ }
26116
+ ],
26117
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
26118
+ }
26119
+ },
25139
26120
  style: {
25140
26121
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
25141
26122
  }
@@ -25176,6 +26157,27 @@ var mediaTextManifest = createBlockManifest({
25176
26157
  ],
25177
26158
  whenImagesLength(0, { not: true })
25178
26159
  );
26160
+ const bioImagesLayout = el(
26161
+ "div",
26162
+ {},
26163
+ [
26164
+ responsiveTwoColumn({
26165
+ image: el("div", {}, [
26166
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
26167
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
26168
+ ]),
26169
+ text: bioTextColumn,
26170
+ ratioFrom: "content.ratio",
26171
+ imagePositionFrom: "content.imagePosition",
26172
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
26173
+ gapFrom: "content.gap",
26174
+ gapFallback: "comfortable",
26175
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
26176
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
26177
+ })
26178
+ ],
26179
+ whenImagesLength(0, { not: true })
26180
+ );
25179
26181
  const defaultTextOnlyLayout = el(
25180
26182
  "div",
25181
26183
  {},
@@ -25205,7 +26207,45 @@ var mediaTextManifest = createBlockManifest({
25205
26207
  ],
25206
26208
  whenImagesLength(0)
25207
26209
  );
26210
+ const bioTextOnlyLayout = el(
26211
+ "div",
26212
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
26213
+ [
26214
+ text(
26215
+ {
26216
+ as: "h2",
26217
+ className: titleClassNameFromAlignment
26218
+ },
26219
+ when("content.title"),
26220
+ bind("content.title")
26221
+ ),
26222
+ styledCard(
26223
+ [
26224
+ richText(
26225
+ {
26226
+ className: bodyClassNameFromAlignment
26227
+ },
26228
+ bind("content.text")
26229
+ )
26230
+ ],
26231
+ {
26232
+ stylesFrom: "content._textCardStyles",
26233
+ backgroundFrom: "content._textCardStyles.background"
26234
+ },
26235
+ when("content.wrapTextInCard")
26236
+ ),
26237
+ richText(
26238
+ {
26239
+ className: bodyClassNameFromAlignment
26240
+ },
26241
+ when("content.wrapTextInCard", { not: true }),
26242
+ bind("content.text")
26243
+ )
26244
+ ],
26245
+ whenImagesLength(0)
26246
+ );
25208
26247
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
26248
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
25209
26249
  const defaultLayout2 = styledSection({
25210
26250
  children: styledContainer({
25211
26251
  rootType: "stack",
@@ -25214,18 +26254,7 @@ var mediaTextManifest = createBlockManifest({
25214
26254
  text(
25215
26255
  {
25216
26256
  as: "h2",
25217
- className: {
25218
- $bind: {
25219
- from: "content.titleAlignment",
25220
- transforms: [
25221
- {
25222
- id: "ui.headingClassFromAlignment",
25223
- options: { base: "" }
25224
- }
25225
- ],
25226
- fallback: ""
25227
- }
25228
- }
26257
+ className: titleClassNameFromAlignment
25229
26258
  },
25230
26259
  when("content.title"),
25231
26260
  bind("content.title")
@@ -25237,14 +26266,28 @@ var mediaTextManifest = createBlockManifest({
25237
26266
  baseClass: "",
25238
26267
  spacing: "medium"
25239
26268
  });
26269
+ const bioLayout = styledSection({
26270
+ children: styledContainer({
26271
+ rootType: "stack",
26272
+ rootProps: { gap: "lg" },
26273
+ children: [bioInner]
26274
+ }),
26275
+ baseClass: "",
26276
+ spacing: "medium"
26277
+ });
25240
26278
  return {
25241
26279
  layout: defaultLayout2,
25242
26280
  variants: {
25243
- default: defaultLayout2
26281
+ default: defaultLayout2,
26282
+ bio: bioLayout
25244
26283
  },
25245
26284
  defaultVariant: "default",
25246
26285
  variantOptions: {
25247
- default: { label: "Default" }
26286
+ default: { label: "Default" },
26287
+ bio: {
26288
+ label: "Bio",
26289
+ description: "Vertically centered title and copy beside media."
26290
+ }
25248
26291
  }
25249
26292
  };
25250
26293
  })(),
@@ -25950,6 +26993,126 @@ var occurrenceContextSchema = z44.object({
25950
26993
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
25951
26994
  import { z as z46 } from "zod";
25952
26995
 
26996
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
26997
+ var DEFAULT_EVENT_CURRENCY = "USD";
26998
+ function resolveRuntimeEventPricing(event) {
26999
+ if (isPublicEventPricing(event.pricing)) {
27000
+ return event.pricing;
27001
+ }
27002
+ const legacy = event;
27003
+ const currency = readCurrency(legacy.currency);
27004
+ if (event.requiresRegistration === false) {
27005
+ return {
27006
+ kind: "drop_in",
27007
+ currency,
27008
+ display: { kind: "free", currency }
27009
+ };
27010
+ }
27011
+ if (legacy.pricingMode === "ticket_types") {
27012
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
27013
+ return {
27014
+ kind: "ticket_types",
27015
+ currency,
27016
+ ticketTypes,
27017
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
27018
+ };
27019
+ }
27020
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
27021
+ if (legacy.pricingType === "paid" && amount > 0) {
27022
+ return {
27023
+ kind: "single_paid",
27024
+ amount,
27025
+ currency,
27026
+ display: { kind: "exact", amount, currency }
27027
+ };
27028
+ }
27029
+ return {
27030
+ kind: "free_registration",
27031
+ currency,
27032
+ display: { kind: "free", currency }
27033
+ };
27034
+ }
27035
+ function readCurrency(value) {
27036
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
27037
+ }
27038
+ function isRecord5(value) {
27039
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27040
+ }
27041
+ function isPublicEventPricing(value) {
27042
+ if (!isRecord5(value) || typeof value.kind !== "string") return false;
27043
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
27044
+ }
27045
+ function isPublicEventTicketType(value) {
27046
+ return isRecord5(value) && typeof value.id === "string";
27047
+ }
27048
+ function readTicketTypePriceDisplay(value, currency) {
27049
+ const display = readLegacyPriceDisplay(value, currency);
27050
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
27051
+ }
27052
+ function readLegacyPriceDisplay(value, currency) {
27053
+ if (!isRecord5(value) || typeof value.kind !== "string") {
27054
+ return { kind: "unavailable", currency };
27055
+ }
27056
+ const displayCurrency = readCurrency(value.currency);
27057
+ switch (value.kind) {
27058
+ case "free":
27059
+ return { kind: "free", currency: displayCurrency };
27060
+ case "exact":
27061
+ return readAmount(value.amount) !== null ? {
27062
+ kind: "exact",
27063
+ amount: readAmount(value.amount) ?? 0,
27064
+ currency: displayCurrency
27065
+ } : { kind: "unavailable", currency };
27066
+ case "from":
27067
+ return readAmount(value.amount) !== null ? {
27068
+ kind: "from",
27069
+ amount: readAmount(value.amount) ?? 0,
27070
+ currency: displayCurrency
27071
+ } : { kind: "unavailable", currency };
27072
+ case "mixed":
27073
+ return readAmount(value.paidFromAmount) !== null ? {
27074
+ kind: "mixed",
27075
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
27076
+ currency: displayCurrency
27077
+ } : { kind: "unavailable", currency };
27078
+ case "unavailable":
27079
+ return { kind: "unavailable", currency: displayCurrency };
27080
+ case "course":
27081
+ return isRecord5(value.display) ? {
27082
+ kind: "course",
27083
+ display: readCoursePriceDisplay(value.display, displayCurrency)
27084
+ } : {
27085
+ kind: "course",
27086
+ display: { kind: "unavailable", currency: displayCurrency }
27087
+ };
27088
+ default:
27089
+ return { kind: "unavailable", currency };
27090
+ }
27091
+ }
27092
+ function readCoursePriceDisplay(value, currency) {
27093
+ switch (value.kind) {
27094
+ case "free":
27095
+ return { kind: "free", currency: readCurrency(value.currency) };
27096
+ case "exact":
27097
+ return readAmount(value.amount) !== null ? {
27098
+ kind: "exact",
27099
+ amount: readAmount(value.amount) ?? 0,
27100
+ currency: readCurrency(value.currency)
27101
+ } : { kind: "unavailable", currency };
27102
+ case "from":
27103
+ return readAmount(value.amount) !== null ? {
27104
+ kind: "from",
27105
+ amount: readAmount(value.amount) ?? 0,
27106
+ currency: readCurrency(value.currency)
27107
+ } : { kind: "unavailable", currency };
27108
+ default:
27109
+ return { kind: "unavailable", currency };
27110
+ }
27111
+ }
27112
+ function readAmount(value) {
27113
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
27114
+ }
27115
+
25953
27116
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
25954
27117
  import { z as z45 } from "zod";
25955
27118
 
@@ -25980,11 +27143,21 @@ var filterAutoShowSchema = z45.enum(["auto", "always", "never"]);
25980
27143
  var calendarTabViewsSchema = z45.enum(["both", "month", "week"]);
25981
27144
 
25982
27145
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
27146
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
27147
+ var [
27148
+ eventRegistrationGenericDateStepLabel,
27149
+ eventRegistrationGenericTicketsStepLabel,
27150
+ eventRegistrationGenericDetailsStepLabel
27151
+ ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
25983
27152
  var contentEntrySchema = z46.object({
25984
27153
  id: z46.string(),
25985
27154
  slug: z46.string(),
25986
27155
  contentTypeSlug: z46.string()
25987
27156
  });
27157
+ var eventRegistrationPublicEventSchema = z46.preprocess(
27158
+ normalizeEventRegistrationEventInput,
27159
+ publicEventSchema
27160
+ );
25988
27161
  var eventRegistrationSourceSchema = z46.object({
25989
27162
  siteId: z46.string().optional(),
25990
27163
  apiBaseUrl: z46.string().optional(),
@@ -25992,7 +27165,7 @@ var eventRegistrationSourceSchema = z46.object({
25992
27165
  previewToken: z46.string().nullable().optional(),
25993
27166
  occurrenceContext: occurrenceContextSchema.optional(),
25994
27167
  contentEntry: contentEntrySchema.nullable().optional(),
25995
- events: z46.array(publicEventSchema).nullable().optional(),
27168
+ events: z46.array(eventRegistrationPublicEventSchema).nullable().optional(),
25996
27169
  className: z46.string().nullable().optional(),
25997
27170
  buttonText: z46.string().nullable().optional(),
25998
27171
  maxTickets: z46.string().nullable().optional(),
@@ -26007,14 +27180,21 @@ var eventRegistrationSourceSchema = z46.object({
26007
27180
  });
26008
27181
  var eventRegistrationDisplaySchema = z46.object({
26009
27182
  kind: z46.literal("event-registration"),
26010
- state: z46.literal("shell"),
27183
+ state: z46.literal("generic-shell"),
26011
27184
  className: z46.string().nullable(),
27185
+ titleText: z46.string(),
27186
+ bodyText: z46.string(),
27187
+ stepLabels: z46.tuple([
27188
+ z46.literal(eventRegistrationGenericDateStepLabel),
27189
+ z46.literal(eventRegistrationGenericTicketsStepLabel),
27190
+ z46.literal(eventRegistrationGenericDetailsStepLabel)
27191
+ ]),
26012
27192
  summaryButtonText: z46.string()
26013
27193
  });
26014
27194
  var eventRegistrationHydrationSchema = z46.object({
26015
27195
  occurrenceContext: occurrenceContextSchema.optional(),
26016
27196
  contentEntry: contentEntrySchema.nullable().optional(),
26017
- events: z46.array(publicEventSchema).nullable().optional(),
27197
+ events: z46.array(eventRegistrationPublicEventSchema).nullable().optional(),
26018
27198
  maxTickets: z46.string().optional(),
26019
27199
  showVenue: z46.boolean().optional(),
26020
27200
  showCapacity: z46.boolean().optional(),
@@ -26045,8 +27225,11 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
26045
27225
  function buildEventRegistrationDisplay(source) {
26046
27226
  return {
26047
27227
  kind: "event-registration",
26048
- state: "shell",
27228
+ state: "generic-shell",
26049
27229
  className: source.className ?? null,
27230
+ titleText: "Event registration",
27231
+ bodyText: "Preparing dates, tickets, and booking details.",
27232
+ stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
26050
27233
  summaryButtonText: source.buttonText?.trim() || "Register"
26051
27234
  };
26052
27235
  }
@@ -26073,6 +27256,18 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
26073
27256
  }
26074
27257
  })
26075
27258
  });
27259
+ function normalizeEventRegistrationEventInput(value) {
27260
+ if (!isRecord6(value)) {
27261
+ return value;
27262
+ }
27263
+ return {
27264
+ ...value,
27265
+ pricing: resolveRuntimeEventPricing(value)
27266
+ };
27267
+ }
27268
+ function isRecord6(value) {
27269
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27270
+ }
26076
27271
  var eventRegistrationInteractiveIslandPropsCodec = createInteractiveIslandCodec({
26077
27272
  runtime: eventRegistrationBlockRuntime,
26078
27273
  mode: "event-registration",
@@ -27922,7 +29117,9 @@ function formatPublicEventPriceDisplay(display) {
27922
29117
  }
27923
29118
  }
27924
29119
  function formatEventPrice(event) {
27925
- return formatPublicEventPriceDisplay(publicEventPricingDisplay(event.pricing));
29120
+ return formatPublicEventPriceDisplay(
29121
+ publicEventPricingDisplay(resolveRuntimeEventPricing(event))
29122
+ );
27926
29123
  }
27927
29124
  function resolveEventCta(event, buttonText) {
27928
29125
  const { isFull: isSoldOut } = getEventAvailability(event);
@@ -30988,7 +32185,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
30988
32185
  return keys.length >= 2 ? keys : [];
30989
32186
  }
30990
32187
  function normalizeOfferingsPreviewContentForWrite(value) {
30991
- if (!isRecord5(value)) return null;
32188
+ if (!isRecord7(value)) return null;
30992
32189
  const groupOrderValue = value.groupOrder;
30993
32190
  if (Array.isArray(groupOrderValue)) {
30994
32191
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -31001,7 +32198,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
31001
32198
  return { ...value, groupOrder: [] };
31002
32199
  }
31003
32200
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
31004
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
32201
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord7) : []
31005
32202
  );
31006
32203
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
31007
32204
  }
@@ -31055,7 +32252,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
31055
32252
  }
31056
32253
  return keys;
31057
32254
  }
31058
- function isRecord5(value) {
32255
+ function isRecord7(value) {
31059
32256
  return typeof value === "object" && value !== null && !Array.isArray(value);
31060
32257
  }
31061
32258
  function mergeOrderedKeysWithDefaults(orderedKeys, defaultKeys) {
@@ -31517,7 +32714,7 @@ function isOfferingsPreviewItemLimit(value) {
31517
32714
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
31518
32715
  }
31519
32716
  function normalizeOfferingsPreviewGroupOverride(value) {
31520
- if (!isRecord6(value)) return [];
32717
+ if (!isRecord8(value)) return [];
31521
32718
  const override = {};
31522
32719
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
31523
32720
  override.sourceKey = value.sourceKey;
@@ -31549,12 +32746,12 @@ function isButtonVariant(value) {
31549
32746
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
31550
32747
  }
31551
32748
  function normalizeCardStylesContent(value) {
31552
- return isRecord6(value) || value === null ? value : void 0;
32749
+ return isRecord8(value) || value === null ? value : void 0;
31553
32750
  }
31554
32751
  function normalizeSectionStylesContent(value) {
31555
- return isRecord6(value) || value === null ? value : void 0;
32752
+ return isRecord8(value) || value === null ? value : void 0;
31556
32753
  }
31557
- function isRecord6(value) {
32754
+ function isRecord8(value) {
31558
32755
  return typeof value === "object" && value !== null && !Array.isArray(value);
31559
32756
  }
31560
32757
 
@@ -35633,11 +36830,13 @@ var heroImageSurfaceMotions = [
35633
36830
  ];
35634
36831
  var standardEyebrowTreatments = [
35635
36832
  "plain",
36833
+ "accent",
35636
36834
  "pill",
35637
36835
  "accent-pill"
35638
36836
  ];
35639
36837
  var animatedEyebrowTreatments = [
35640
36838
  "plain",
36839
+ "accent",
35641
36840
  "pill",
35642
36841
  "accent-pill",
35643
36842
  "pill-bounce",
@@ -35938,6 +37137,17 @@ var systemBlockDefinitionsRaw = [
35938
37137
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
35939
37138
  ]
35940
37139
  })),
37140
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
37141
+ flow: conversionFlow,
37142
+ layoutProfiles: [
37143
+ layoutProfile({
37144
+ variantKey: "default",
37145
+ family: "split",
37146
+ weight: "featured",
37147
+ bias: "soft"
37148
+ })
37149
+ ]
37150
+ })),
35941
37151
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
35942
37152
  sectionSurfaces: "supported",
35943
37153
  contentFrames: ["plain", "panel"],
@@ -36029,6 +37239,12 @@ var systemBlockDefinitionsRaw = [
36029
37239
  family: "media-text",
36030
37240
  weight: "featured",
36031
37241
  bias: "soft"
37242
+ }),
37243
+ layoutProfile({
37244
+ variantKey: "bio",
37245
+ family: "media-text",
37246
+ weight: "featured",
37247
+ bias: "soft"
36032
37248
  })
36033
37249
  ]
36034
37250
  })),
@@ -36839,16 +38055,16 @@ import React4 from "react";
36839
38055
  // ../blocks/src/system/data/linkedContentEntries.ts
36840
38056
  var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
36841
38057
  function getLinkedContentEntryMeta(value) {
36842
- if (!isRecord7(value)) return null;
38058
+ if (!isRecord9(value)) return null;
36843
38059
  const candidate = value[LINKED_CONTENT_ENTRY_META_KEY];
36844
38060
  return isLinkedContentEntryMeta(candidate) ? candidate : null;
36845
38061
  }
36846
38062
  function buildLinkedContentEditTarget(input) {
36847
38063
  const { entry, sourceBlockId, sourceBlockKind, itemIndex } = input;
36848
- if (!isRecord7(entry)) return null;
38064
+ if (!isRecord9(entry)) return null;
36849
38065
  const meta = getLinkedContentEntryMeta(entry);
36850
38066
  if (!meta || meta.support.kind !== "supported") return null;
36851
- const content = isRecord7(entry.content) ? entry.content : {};
38067
+ const content = isRecord9(entry.content) ? entry.content : {};
36852
38068
  return {
36853
38069
  kind: "linked-content-entry",
36854
38070
  entryId: meta.entryId,
@@ -36906,14 +38122,14 @@ function resolvePreviewLinkedEntryInlineFieldType(fieldType) {
36906
38122
  return null;
36907
38123
  }
36908
38124
  function isLinkedContentEntryMeta(value) {
36909
- if (!isRecord7(value)) return false;
38125
+ if (!isRecord9(value)) return false;
36910
38126
  if (value.kind !== "linked-content-entry") return false;
36911
38127
  if (typeof value.entryId !== "string") return false;
36912
38128
  if (typeof value.contentTypeKey !== "string") return false;
36913
38129
  if (typeof value.contentTypeLabel !== "string") return false;
36914
38130
  if (typeof value.title !== "string") return false;
36915
38131
  if (!(value.optimisticHash === null || typeof value.optimisticHash === "string")) return false;
36916
- if (!isRecord7(value.contentType)) return false;
38132
+ if (!isRecord9(value.contentType)) return false;
36917
38133
  if (!isLinkedEntryFieldSourceArray(value.fieldSources)) return false;
36918
38134
  return isLinkedContentEditSupport(value.support);
36919
38135
  }
@@ -36921,7 +38137,7 @@ function isLinkedEntryFieldSourceArray(value) {
36921
38137
  return Array.isArray(value) && value.every(isLinkedEntryFieldSource);
36922
38138
  }
36923
38139
  function isLinkedEntryFieldSource(value) {
36924
- if (!isRecord7(value)) return false;
38140
+ if (!isRecord9(value)) return false;
36925
38141
  if (typeof value.displayPath !== "string") return false;
36926
38142
  switch (value.kind) {
36927
38143
  case "content-field":
@@ -36947,7 +38163,7 @@ function isLinkedEntryInlineFieldReadOnlyReason(value) {
36947
38163
  }
36948
38164
  }
36949
38165
  function isLinkedContentEditSupport(value) {
36950
- if (!isRecord7(value) || typeof value.kind !== "string") return false;
38166
+ if (!isRecord9(value) || typeof value.kind !== "string") return false;
36951
38167
  switch (value.kind) {
36952
38168
  case "supported":
36953
38169
  return true;
@@ -36959,7 +38175,7 @@ function isLinkedContentEditSupport(value) {
36959
38175
  return false;
36960
38176
  }
36961
38177
  }
36962
- function isRecord7(value) {
38178
+ function isRecord9(value) {
36963
38179
  return typeof value === "object" && value !== null && !Array.isArray(value);
36964
38180
  }
36965
38181
 
@@ -38486,12 +39702,12 @@ function toTrimmedString(value) {
38486
39702
  return trimmed ? trimmed : void 0;
38487
39703
  }
38488
39704
  function normalizeBookingFormConfig(form2) {
38489
- if (!isRecord8(form2)) return null;
39705
+ if (!isRecord10(form2)) return null;
38490
39706
  const id = readNonEmptyString(form2.id);
38491
39707
  const name = readNonEmptyString(form2.name);
38492
39708
  if (!id || !name) return null;
38493
- const schemaSource = isRecord8(form2.schema) ? form2.schema : isRecord8(form2.schemaJson) ? form2.schemaJson : null;
38494
- const settingsSource = isRecord8(form2.settings) ? form2.settings : isRecord8(form2.settingsJson) ? form2.settingsJson : null;
39709
+ const schemaSource = isRecord10(form2.schema) ? form2.schema : isRecord10(form2.schemaJson) ? form2.schemaJson : null;
39710
+ const settingsSource = isRecord10(form2.settings) ? form2.settings : isRecord10(form2.settingsJson) ? form2.settingsJson : null;
38495
39711
  return {
38496
39712
  id,
38497
39713
  name,
@@ -38515,10 +39731,10 @@ function normalizeBookingServices(services) {
38515
39731
  if (Array.isArray(services)) {
38516
39732
  return services.filter(isBookingFormService).map(normalizeService);
38517
39733
  }
38518
- if (isRecord8(services) && "services" in services) {
39734
+ if (isRecord10(services) && "services" in services) {
38519
39735
  return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
38520
39736
  }
38521
- return isRecord8(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
39737
+ return isRecord10(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
38522
39738
  }
38523
39739
  function normalizeBookingSchema(value) {
38524
39740
  if (!value) return void 0;
@@ -38530,7 +39746,7 @@ function normalizeBookingSchema(value) {
38530
39746
  };
38531
39747
  }
38532
39748
  function readBookingFormField(value) {
38533
- if (!isRecord8(value)) return null;
39749
+ if (!isRecord10(value)) return null;
38534
39750
  const id = readNonEmptyString(value.id);
38535
39751
  const label = readNonEmptyString(value.label);
38536
39752
  const type = readBookingFieldType(value.type);
@@ -38576,7 +39792,7 @@ function readBookingFieldOptions(value) {
38576
39792
  return options.length > 0 ? options : void 0;
38577
39793
  }
38578
39794
  function readBookingFieldOption(value) {
38579
- if (!isRecord8(value)) return null;
39795
+ if (!isRecord10(value)) return null;
38580
39796
  const optionValue = readNonEmptyString(value.value);
38581
39797
  const label = readNonEmptyString(value.label);
38582
39798
  return optionValue && label ? { value: optionValue, label } : null;
@@ -38593,7 +39809,7 @@ function normalizeBookingSettings(value) {
38593
39809
  };
38594
39810
  }
38595
39811
  function isBookingFormService(value) {
38596
- return isRecord8(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
39812
+ return isRecord10(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
38597
39813
  }
38598
39814
  function readNonEmptyString(value) {
38599
39815
  if (typeof value !== "string") return null;
@@ -38611,7 +39827,7 @@ function readStringArray(value) {
38611
39827
  const strings = value.filter((item) => typeof item === "string");
38612
39828
  return strings.length > 0 ? strings : void 0;
38613
39829
  }
38614
- function isRecord8(value) {
39830
+ function isRecord10(value) {
38615
39831
  return typeof value === "object" && value !== null;
38616
39832
  }
38617
39833
 
@@ -39059,8 +40275,9 @@ function EventDetailsView({
39059
40275
  priceCents: selected.course.priceCents,
39060
40276
  currency: selected.course.currency
39061
40277
  }) : null;
39062
- const eventPricingType = publicEventPricingType(selected.pricing);
39063
- const eventPricingCurrency = publicEventPricingCurrency(selected.pricing) ?? "USD";
40278
+ const eventPricing = resolveRuntimeEventPricing(selected);
40279
+ const eventPricingType = publicEventPricingType(eventPricing);
40280
+ const eventPricingCurrency = publicEventPricingCurrency(eventPricing) ?? "USD";
39064
40281
  const isPaid = eventPricingType === "paid";
39065
40282
  const shouldShowCoursePricing = showCost && !isDropIn && coursePricing !== null;
39066
40283
  const shouldShowEventCost = showCost && isPaid && !isDropIn && coursePricing === null;
@@ -41228,6 +42445,9 @@ var EventListingSSR = (props2) => {
41228
42445
 
41229
42446
  // ../blocks/src/system/runtime/nodes/event-registration.server.tsx
41230
42447
  import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
42448
+ function cx(...classes) {
42449
+ return classes.filter((className) => Boolean(className)).join(" ");
42450
+ }
41231
42451
  function EventRegistrationSSR({
41232
42452
  blockId,
41233
42453
  siteId,
@@ -41270,6 +42490,7 @@ function EventRegistrationSSR({
41270
42490
  stage,
41271
42491
  supportEmail
41272
42492
  });
42493
+ const display = islandProps.render.display;
41273
42494
  return /* @__PURE__ */ jsxs34(
41274
42495
  "div",
41275
42496
  {
@@ -41281,12 +42502,52 @@ function EventRegistrationSSR({
41281
42502
  ...getIslandRootProps("event-registration", blockId),
41282
42503
  children: [
41283
42504
  /* @__PURE__ */ jsx48(IslandPropsScript, { value: islandProps }),
41284
- /* @__PURE__ */ jsx48("div", { className: "event-registration__summary", children: /* @__PURE__ */ jsx48("strong", { children: "Loading booking options..." }) }),
42505
+ /* @__PURE__ */ jsx48(EventRegistrationShell, { display }),
41285
42506
  children
41286
42507
  ]
41287
42508
  }
41288
42509
  );
41289
42510
  }
42511
+ function EventRegistrationShell({
42512
+ display
42513
+ }) {
42514
+ 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: [
42515
+ /* @__PURE__ */ jsxs34("div", { className: "er-payment-layout-main", children: [
42516
+ /* @__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) => {
42517
+ const isActive = index === 0;
42518
+ return /* @__PURE__ */ jsxs34("li", { className: "er-step", children: [
42519
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-circle", isActive && "er-step-circle--active"), children: index + 1 }),
42520
+ /* @__PURE__ */ jsx48("span", { className: cx("er-step-label", isActive && "er-step-label--active"), children: label }),
42521
+ index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx48("span", { className: "er-step-connector" }) : null
42522
+ ] }, label);
42523
+ }) }) }),
42524
+ /* @__PURE__ */ jsxs34("div", { className: "er-stack", children: [
42525
+ /* @__PURE__ */ jsxs34("div", { children: [
42526
+ /* @__PURE__ */ jsx48("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
42527
+ /* @__PURE__ */ jsx48("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
42528
+ /* @__PURE__ */ jsx48("p", { className: "er-text er-text--muted er-registration-shell__copy", children: display.bodyText })
42529
+ ] }),
42530
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
42531
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
42532
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
42533
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
42534
+ ] }),
42535
+ /* @__PURE__ */ jsxs34("div", { className: "er-event-card er-registration-shell__card", children: [
42536
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
42537
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
42538
+ ] })
42539
+ ] })
42540
+ ] })
42541
+ ] }),
42542
+ /* @__PURE__ */ jsx48("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
42543
+ /* @__PURE__ */ jsxs34("div", { className: "er-summary-bar-info", children: [
42544
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
42545
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
42546
+ ] }),
42547
+ /* @__PURE__ */ jsx48("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
42548
+ ] }) })
42549
+ ] }) });
42550
+ }
41290
42551
  var event_registration_server_default = EventRegistrationSSR;
41291
42552
 
41292
42553
  // ../blocks/src/system/runtime/shared/components/FeedbackMessage.tsx
@@ -41872,14 +43133,14 @@ function isDecoratedHeadingBlockKind(blockKind) {
41872
43133
  return blockKind === "block.intro" || blockKind === "block.feature-cards" || blockKind === "block.testimonials" || blockKind === "block.faq";
41873
43134
  }
41874
43135
  function readVariant(blockContent) {
41875
- if (!isRecord9(blockContent)) return void 0;
43136
+ if (!isRecord11(blockContent)) return void 0;
41876
43137
  const variant = blockContent.variant;
41877
43138
  return typeof variant === "string" ? variant : void 0;
41878
43139
  }
41879
43140
  function isFaqDecoratedVariant(variant) {
41880
43141
  return variant === "default" || variant === "question-columns";
41881
43142
  }
41882
- function isRecord9(value) {
43143
+ function isRecord11(value) {
41883
43144
  return typeof value === "object" && value !== null && !Array.isArray(value);
41884
43145
  }
41885
43146
  function buildHeadingDecorationWrapperClassName(className) {
@@ -43387,20 +44648,20 @@ function generateInputCss({
43387
44648
  baseInputRules.push("background-color: transparent");
43388
44649
  } else {
43389
44650
  baseInputRules.push(
43390
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
44651
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
43391
44652
  );
43392
44653
  }
43393
- baseInputRules.push(`color: rgb(var(--tb-${inputSystem.base.textColorToken}))`);
44654
+ baseInputRules.push(`color: ${rgbColorValue(inputSystem.base.textColorToken)}`);
43394
44655
  const borderPx = parseBorderWidth(inputSystem.base.border.widthClass);
43395
44656
  const borderStyle = inputSystem.base.border.style ?? "all";
43396
44657
  if (borderStyle === "underline") {
43397
44658
  baseInputRules.push("border: none");
43398
44659
  baseInputRules.push(
43399
- `border-bottom: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
44660
+ `border-bottom: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
43400
44661
  );
43401
44662
  } else {
43402
44663
  baseInputRules.push(
43403
- `border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`
44664
+ `border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`
43404
44665
  );
43405
44666
  }
43406
44667
  if (borderStyle === "underline") {
@@ -43427,7 +44688,7 @@ function generateInputCss({
43427
44688
  baseInputRules.push("transition: border-color 0.2s ease, box-shadow 0.2s ease");
43428
44689
  const labelSelector = `${rootSelector} .form-label`;
43429
44690
  const labelRules = [];
43430
- labelRules.push(`color: rgb(var(--tb-${inputSystem.label.textColorToken}))`);
44691
+ labelRules.push(`color: ${rgbColorValue(inputSystem.label.textColorToken)}`);
43431
44692
  labelRules.push(`font-weight: ${FONT_WEIGHT_MAP[inputSystem.label.fontWeight]}`);
43432
44693
  labelRules.push(`font-size: ${LABEL_FONT_SIZE_MAP[inputSystem.label.fontSize]}`);
43433
44694
  if (inputSystem.label.textTransform && inputSystem.label.textTransform !== "none") {
@@ -43468,9 +44729,9 @@ function generateInputCss({
43468
44729
  ];
43469
44730
  const focusRules = [];
43470
44731
  focusRules.push("outline: none");
43471
- focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44732
+ focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43472
44733
  if (inputSystem.focus.borderColorToken) {
43473
- focusRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.borderColorToken}))`);
44734
+ focusRules.push(`border-color: ${rgbColorValue(inputSystem.focus.borderColorToken)}`);
43474
44735
  }
43475
44736
  const errorSelectors = [
43476
44737
  `${inputSelector}[aria-invalid="true"]`,
@@ -43478,16 +44739,16 @@ function generateInputCss({
43478
44739
  `${selectSelector}[aria-invalid="true"]`
43479
44740
  ];
43480
44741
  const errorRules = [];
43481
- errorRules.push(`border-color: rgb(var(--tb-${inputSystem.error.borderColorToken}))`);
43482
- errorRules.push(`color: rgb(var(--tb-${inputSystem.error.textColorToken}))`);
44742
+ errorRules.push(`border-color: ${rgbColorValue(inputSystem.error.borderColorToken)}`);
44743
+ errorRules.push(`color: ${rgbColorValue(inputSystem.error.textColorToken)}`);
43483
44744
  const disabledSelectors = [
43484
44745
  `${inputSelector}:disabled`,
43485
44746
  `${textareaSelector}:disabled`,
43486
44747
  `${selectSelector}:disabled`
43487
44748
  ];
43488
44749
  const disabledRules = [];
43489
- disabledRules.push(`background-color: rgb(var(--tb-${inputSystem.disabled.backgroundColorToken}))`);
43490
- disabledRules.push(`color: rgb(var(--tb-${inputSystem.disabled.textColorToken}))`);
44750
+ disabledRules.push(`background-color: ${rgbColorValue(inputSystem.disabled.backgroundColorToken)}`);
44751
+ disabledRules.push(`color: ${rgbColorValue(inputSystem.disabled.textColorToken)}`);
43491
44752
  disabledRules.push(`opacity: ${inputSystem.disabled.opacity}`);
43492
44753
  disabledRules.push("cursor: not-allowed");
43493
44754
  const checkboxSelector = `${rootSelector} .form-checkbox`;
@@ -43497,12 +44758,12 @@ function generateInputCss({
43497
44758
  checkableRules.push("width: 1rem");
43498
44759
  checkableRules.push("height: 1rem");
43499
44760
  checkableRules.push("flex-shrink: 0");
43500
- checkableRules.push(`border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`);
44761
+ checkableRules.push(`border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`);
43501
44762
  if (inputSystem.base.background.type === "transparent") {
43502
44763
  checkableRules.push("background-color: transparent");
43503
44764
  } else {
43504
44765
  checkableRules.push(
43505
- `background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`
44766
+ `background-color: ${rgbColorValue(inputSystem.base.background.colorToken)}`
43506
44767
  );
43507
44768
  }
43508
44769
  checkableRules.push("cursor: pointer");
@@ -43513,22 +44774,22 @@ function generateInputCss({
43513
44774
  radioSpecificRules.push("border-radius: 9999px");
43514
44775
  const checkboxCheckedSelector = `${checkboxSelector}:checked`;
43515
44776
  const checkboxCheckedRules = [];
43516
- checkboxCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
43517
- checkboxCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44777
+ checkboxCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
44778
+ checkboxCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43518
44779
  checkboxCheckedRules.push(`background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")`);
43519
44780
  checkboxCheckedRules.push("background-size: 100% 100%");
43520
44781
  checkboxCheckedRules.push("background-position: center");
43521
44782
  checkboxCheckedRules.push("background-repeat: no-repeat");
43522
44783
  const radioCheckedSelector = `${radioSelector}:checked`;
43523
44784
  const radioCheckedRules = [];
43524
- radioCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
43525
- radioCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44785
+ radioCheckedRules.push(`background-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
44786
+ radioCheckedRules.push(`border-color: ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43526
44787
  radioCheckedRules.push("background-image: radial-gradient(circle, white 40%, transparent 40%)");
43527
44788
  const checkboxFocusSelector = `${checkboxSelector}:focus-visible`;
43528
44789
  const radioFocusSelector = `${radioSelector}:focus-visible`;
43529
44790
  const checkableFocusRules = [];
43530
44791
  checkableFocusRules.push("outline: none");
43531
- checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);
44792
+ checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px ${rgbColorValue(inputSystem.focus.ringColorToken)}`);
43532
44793
  const cssBlocks = [];
43533
44794
  cssBlocks.push(`${labelSelector} {
43534
44795
  ${labelRules.join(";\n ")};
@@ -45376,6 +46637,11 @@ ${root} {
45376
46637
  --er-event-card-bg: rgb(var(--tb-surface));
45377
46638
  --er-event-card-border-width: var(--rb-border-width, 1px);
45378
46639
  --er-event-card-hover-opacity: 1;
46640
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
46641
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
46642
+ --er-radius: var(--rb-block-radius);
46643
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
46644
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
45379
46645
 
45380
46646
  /* Step indicator */
45381
46647
  --er-step-active: rgb(var(--tb-primary));
@@ -46376,7 +47642,7 @@ function buildThemeCssVars(theme) {
46376
47642
  // These expose inputStyle/InputSystem values for blocks that can't use .form-* classes
46377
47643
  [THEME_RADIUS_CSS_VARS.input]: inputRadius,
46378
47644
  ["--rb-input-focus-width"]: `${inputSystem.focus.ringWidth}px`,
46379
- ["--rb-input-focus-color"]: `rgb(var(--tb-${inputSystem.focus.ringColorToken}))`,
47645
+ ["--rb-input-focus-color"]: rgbColorValue(inputSystem.focus.ringColorToken),
46380
47646
  // Deprecated compatibility aliases for pre-v2 block/custom CSS. New CSS should
46381
47647
  // consume the semantic --rb-* primitives above.
46382
47648
  [THEME_RADIUS_CSS_VARS.legacyCard]: blockRadius,
@@ -47143,6 +48409,11 @@ var MemoBlockSection = React6.memo(
47143
48409
  siteId: dataContext?.siteId,
47144
48410
  apiBaseUrl: dataContext?.apiBaseUrl,
47145
48411
  portalToken: dataContext?.portalToken ?? null,
48412
+ previewToken: dataContext?.previewToken ?? null,
48413
+ stage: dataContext?.previewStage,
48414
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
48415
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
48416
+ contentEntry: dataContext?.contentEntry ?? null,
47146
48417
  supabaseUrl: dataContext?.supabaseUrl,
47147
48418
  imageResolveContext: resolvedImageResolveContext,
47148
48419
  blockId: block.id ?? null,
@@ -47266,6 +48537,11 @@ var MemoBlockSection = React6.memo(
47266
48537
  siteId: dataContext?.siteId,
47267
48538
  apiBaseUrl: dataContext?.apiBaseUrl,
47268
48539
  portalToken: dataContext?.portalToken ?? null,
48540
+ previewToken: dataContext?.previewToken ?? null,
48541
+ stage: dataContext?.previewStage,
48542
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
48543
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
48544
+ contentEntry: dataContext?.contentEntry ?? null,
47269
48545
  supabaseUrl: dataContext?.supabaseUrl,
47270
48546
  imageResolveContext: resolvedImageResolveContext,
47271
48547
  blockId: block.id ?? null,
@@ -47452,6 +48728,9 @@ var containerResponsiveThemeCss = `/*
47452
48728
  letter-spacing: 0.025em;
47453
48729
  text-transform: uppercase;
47454
48730
  }
48731
+ .rb-eyebrow-treatment-accent {
48732
+ color: rgb(var(--tb-accent));
48733
+ }
47455
48734
  .rb-eyebrow-treatment-pill {
47456
48735
  align-self: center;
47457
48736
  display: inline-flex;
@@ -47506,6 +48785,27 @@ var containerResponsiveThemeCss = `/*
47506
48785
  font-weight: 400;
47507
48786
  }
47508
48787
 
48788
+ /* Media shape treatments */
48789
+ .rb-media-shape-square,
48790
+ .rb-media-shape-rounded,
48791
+ .rb-media-shape-circle,
48792
+ .rb-media-shape-arch {
48793
+ overflow: hidden;
48794
+ }
48795
+ .rb-media-shape-square {
48796
+ border-radius: 0;
48797
+ }
48798
+ .rb-media-shape-rounded {
48799
+ border-radius: var(--rb-media-shape-radius, 1rem);
48800
+ }
48801
+ .rb-media-shape-circle {
48802
+ border-radius: 9999px;
48803
+ }
48804
+ .rb-media-shape-arch {
48805
+ border-radius: 9999px 9999px var(--rb-media-shape-arch-base-radius, 0.125rem)
48806
+ var(--rb-media-shape-arch-base-radius, 0.125rem);
48807
+ }
48808
+
47509
48809
  /* Navigation typography */
47510
48810
  .rb-nav-text {
47511
48811
  font-size: 0.875rem;
@@ -50660,7 +51960,7 @@ var containerResponsiveThemeCss = `/*
50660
51960
  :where(.theme-scope) :where([data-block="event-registration"]) .er-container {
50661
51961
  border-radius: var(--rb-block-radius);
50662
51962
  border: 1px solid var(--er-border);
50663
- padding: 1.5rem;
51963
+ padding: clamp(1rem, 2vw, 1.5rem);
50664
51964
  background: rgb(var(--tb-surface));
50665
51965
  color: var(--er-on-surface);
50666
51966
  transition: border-color var(--rb-block-transition) ease;
@@ -50669,6 +51969,109 @@ var containerResponsiveThemeCss = `/*
50669
51969
  margin-inline: 0;
50670
51970
  }
50671
51971
 
51972
+ /* SSR shell / required-island fallback */
51973
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell {
51974
+ min-height: 24rem;
51975
+ }
51976
+
51977
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__steps {
51978
+ margin-bottom: 1.25rem;
51979
+ }
51980
+
51981
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__eyebrow {
51982
+ margin: 0 0 0.35rem;
51983
+ color: var(--er-on-surface-subtle);
51984
+ font-size: 0.75rem;
51985
+ font-weight: 700;
51986
+ letter-spacing: 0.04em;
51987
+ line-height: 1.2;
51988
+ text-transform: uppercase;
51989
+ }
51990
+
51991
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__title {
51992
+ margin: 0;
51993
+ }
51994
+
51995
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__copy {
51996
+ margin: 0.35rem 0 0;
51997
+ max-width: 36rem;
51998
+ line-height: 1.45;
51999
+ }
52000
+
52001
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__cards {
52002
+ margin-top: 0.25rem;
52003
+ overflow: hidden;
52004
+ border: 1px solid var(--er-border);
52005
+ border-radius: var(--rb-block-radius);
52006
+ background: var(--er-control-bg);
52007
+ }
52008
+
52009
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__card {
52010
+ display: grid;
52011
+ gap: 0.5rem;
52012
+ padding: 1rem;
52013
+ }
52014
+
52015
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line {
52016
+ height: 0.75rem;
52017
+ border-radius: 9999px;
52018
+ background: linear-gradient(
52019
+ 90deg,
52020
+ var(--er-shell-line),
52021
+ rgba(var(--tb-primary), 0.12),
52022
+ var(--er-shell-line)
52023
+ );
52024
+ }
52025
+
52026
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--lg {
52027
+ width: min(26rem, 82%);
52028
+ }
52029
+
52030
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--md {
52031
+ width: min(19rem, 68%);
52032
+ }
52033
+
52034
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--sm {
52035
+ width: min(14rem, 52%);
52036
+ }
52037
+
52038
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--xs {
52039
+ width: min(10rem, 42%);
52040
+ }
52041
+
52042
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__summary {
52043
+ align-items: center;
52044
+ border-radius: calc(var(--rb-block-radius) * 0.75);
52045
+ border: 1px solid var(--er-summary-border);
52046
+ padding: 0.875rem 1rem;
52047
+ }
52048
+
52049
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__button-placeholder {
52050
+ display: inline-flex;
52051
+ min-height: 2.5rem;
52052
+ align-items: center;
52053
+ justify-content: center;
52054
+ border-radius: calc(var(--rb-block-radius) * 0.6);
52055
+ background: rgb(var(--tb-primary));
52056
+ color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
52057
+ padding: 0.625rem 1rem;
52058
+ font-size: 0.875rem;
52059
+ font-weight: 600;
52060
+ line-height: 1.2;
52061
+ text-align: center;
52062
+ white-space: nowrap;
52063
+ }
52064
+
52065
+ :where(.theme-scope) :where([data-block="event-registration"]) .event-registration__hydration-error {
52066
+ border-radius: var(--rb-block-radius);
52067
+ border: 1px solid var(--er-border-error);
52068
+ background: var(--er-error-bg);
52069
+ color: var(--er-error-text);
52070
+ padding: 1rem;
52071
+ font-size: 0.9375rem;
52072
+ line-height: 1.45;
52073
+ }
52074
+
50672
52075
  :where(.theme-scope) :where([data-block="event-registration"].event-registration--embedded) .er-container {
50673
52076
  max-width: none;
50674
52077
  padding: 0;
@@ -50716,6 +52119,7 @@ var containerResponsiveThemeCss = `/*
50716
52119
  padding: 1rem;
50717
52120
  border-radius: calc(var(--rb-block-radius) * 0.75);
50718
52121
  border: 1px solid var(--er-border);
52122
+ background: var(--er-surface-muted);
50719
52123
  }
50720
52124
 
50721
52125
  /* Ticket counter */
@@ -50761,14 +52165,23 @@ var containerResponsiveThemeCss = `/*
50761
52165
  /* Form inputs */
50762
52166
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input {
50763
52167
  width: 100%;
50764
- padding: 0.5rem 0.75rem;
52168
+ min-height: 2.75rem;
52169
+ padding: 0.625rem 0.75rem;
50765
52170
  border-radius: calc(var(--rb-block-radius) * 0.5);
50766
52171
  border: 1px solid var(--er-border);
50767
- background: transparent;
52172
+ background: var(--er-control-bg);
52173
+ color: var(--er-control-text);
52174
+ font: inherit;
52175
+ line-height: 1.4;
50768
52176
  transition: border-color var(--rb-block-transition) ease,
52177
+ background-color var(--rb-block-transition) ease,
50769
52178
  box-shadow var(--rb-block-transition) ease;
50770
52179
  }
50771
52180
 
52181
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-input::placeholder {
52182
+ color: var(--er-on-surface-faint);
52183
+ }
52184
+
50772
52185
  :where(.theme-scope) :where([data-block="event-registration"]) .er-input:focus {
50773
52186
  outline: none;
50774
52187
  border-color: var(--er-border-selected);
@@ -50890,7 +52303,7 @@ var containerResponsiveThemeCss = `/*
50890
52303
  }
50891
52304
 
50892
52305
  :where(.theme-scope) :where([data-block="event-registration"]) .er-event-grid .er-event-card {
50893
- padding: 0.75rem 0;
52306
+ padding: 0.875rem 0;
50894
52307
  border-width: 0 0 var(--rb-event-tile-border-width, var(--rb-border-width, 1px)) 0;
50895
52308
  border-style: solid;
50896
52309
  border-radius: 0;
@@ -51122,21 +52535,24 @@ var containerResponsiveThemeCss = `/*
51122
52535
  align-items: flex-start;
51123
52536
  gap: 0.75rem;
51124
52537
  padding: 1rem;
51125
- border: 2px solid var(--er-payment-border);
52538
+ border: 1px solid var(--er-payment-border);
51126
52539
  border-radius: var(--rb-block-radius);
51127
- background: transparent;
52540
+ background: var(--er-control-bg);
51128
52541
  cursor: pointer;
51129
52542
  transition: border-color var(--rb-block-transition) ease,
52543
+ box-shadow var(--rb-block-transition) ease,
51130
52544
  background-color var(--rb-block-transition) ease;
51131
52545
  }
51132
52546
 
51133
52547
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option:hover {
51134
52548
  border-color: var(--er-payment-border-hover);
52549
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
51135
52550
  }
51136
52551
 
51137
52552
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-option--selected {
51138
52553
  border-color: var(--er-payment-border-selected);
51139
52554
  background-color: var(--er-payment-bg-selected);
52555
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
51140
52556
  }
51141
52557
 
51142
52558
  /* Discount code entry */
@@ -51824,22 +53240,25 @@ var containerResponsiveThemeCss = `/*
51824
53240
  justify-content: center;
51825
53241
  gap: 0.25rem;
51826
53242
  padding: 0.75rem 0.625rem;
51827
- border: 2px solid var(--er-payment-border);
53243
+ border: 1px solid var(--er-payment-border);
51828
53244
  border-radius: var(--rb-block-radius);
51829
- background: transparent;
53245
+ background: var(--er-control-bg);
51830
53246
  cursor: pointer;
51831
53247
  text-align: center;
51832
53248
  transition: border-color var(--rb-block-transition) ease,
53249
+ box-shadow var(--rb-block-transition) ease,
51833
53250
  background-color var(--rb-block-transition) ease;
51834
53251
  }
51835
53252
 
51836
53253
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile:hover:not([aria-disabled="true"]) {
51837
53254
  border-color: var(--er-payment-border-hover);
53255
+ box-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
51838
53256
  }
51839
53257
 
51840
53258
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--selected {
51841
53259
  border-color: var(--er-payment-border-selected);
51842
53260
  background-color: var(--er-payment-bg-selected);
53261
+ box-shadow: 0 0 0 1px var(--er-payment-border-selected);
51843
53262
  }
51844
53263
 
51845
53264
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-tile--disabled {
@@ -51942,11 +53361,10 @@ var containerResponsiveThemeCss = `/*
51942
53361
  justify-content: space-between;
51943
53362
  align-items: flex-start;
51944
53363
  gap: 1rem;
51945
- padding: 0.875rem 0;
51946
- background: transparent;
51947
- border-top: 1px solid var(--er-summary-border);
51948
- border-bottom: 1px solid var(--er-summary-border);
51949
- border-radius: 0;
53364
+ padding: 0.875rem 1rem;
53365
+ background: var(--er-surface-muted);
53366
+ border: 1px solid var(--er-summary-border);
53367
+ border-radius: calc(var(--rb-block-radius) * 0.75);
51950
53368
  }
51951
53369
 
51952
53370
  :where(.theme-scope) :where([data-block="event-registration"]) .er-summary-bar-info {
@@ -53718,18 +55136,10 @@ var containerResponsiveThemeCss = `/*
53718
55136
  /* Two-column row (opt-in per field via schema layout) */
53719
55137
  :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
53720
55138
  display: grid;
53721
- grid-template-columns: 1fr;
55139
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
53722
55140
  gap: 1rem;
53723
55141
  }
53724
55142
 
53725
- @container rb-site (min-width: 768px) {
53726
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
53727
- :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
53728
- grid-template-columns: 1fr 1fr;
53729
- }
53730
- }
53731
- }
53732
-
53733
55143
  /* Field wrapper */
53734
55144
  :where(.theme-scope) :where([data-block="form"]) .fb-field {
53735
55145
  display: flex;
@@ -53803,6 +55213,10 @@ var containerResponsiveThemeCss = `/*
53803
55213
  }
53804
55214
 
53805
55215
  /* Subheadline - supporting text below headline */
55216
+ :where(.theme-scope) :where([data-block="hero"]) .hero-headline {
55217
+ text-wrap: balance;
55218
+ }
55219
+
53806
55220
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
53807
55221
  font-size: 1.125rem;
53808
55222
  color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
@@ -53828,8 +55242,8 @@ var containerResponsiveThemeCss = `/*
53828
55242
  }
53829
55243
 
53830
55244
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-headline {
53831
- font-size: clamp(2.5rem, 5vw, 4rem);
53832
- line-height: 1.08;
55245
+ font-size: clamp(2.75rem, 5.6vw, 4.75rem);
55246
+ line-height: 1.06;
53833
55247
  }
53834
55248
 
53835
55249
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-subheadline {
@@ -53838,8 +55252,8 @@ var containerResponsiveThemeCss = `/*
53838
55252
  }
53839
55253
 
53840
55254
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline {
53841
- font-size: clamp(3rem, 6vw, 5rem);
53842
- line-height: 1.04;
55255
+ font-size: clamp(3.5rem, 7.2vw, 6.25rem);
55256
+ line-height: 1;
53843
55257
  }
53844
55258
 
53845
55259
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-subheadline {
@@ -53848,8 +55262,8 @@ var containerResponsiveThemeCss = `/*
53848
55262
  }
53849
55263
 
53850
55264
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline {
53851
- font-size: clamp(3.5rem, 8vw, 6.5rem);
53852
- line-height: 0.98;
55265
+ font-size: clamp(4.25rem, 10vw, 8.5rem);
55266
+ line-height: 0.94;
53853
55267
  }
53854
55268
 
53855
55269
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-subheadline {
@@ -53858,13 +55272,13 @@ var containerResponsiveThemeCss = `/*
53858
55272
  }
53859
55273
 
53860
55274
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-medium.rb-hero-typography-poster .hero-headline {
53861
- font-size: clamp(3rem, 6.5vw, 5rem);
55275
+ font-size: clamp(3.5rem, 7.5vw, 6.5rem);
53862
55276
  }
53863
55277
 
53864
55278
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
53865
55279
  :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
53866
- font-size: clamp(2.75rem, 5.5vw, 4.5rem);
53867
- line-height: 1.05;
55280
+ font-size: clamp(3rem, 6vw, 5.25rem);
55281
+ line-height: 1.02;
53868
55282
  }
53869
55283
 
53870
55284
  @container rb-site (max-width: 639px) {
@@ -56586,8 +58000,9 @@ var containerResponsiveThemeCss = `/*
56586
58000
  /* Privacy note */
56587
58001
  :where(.theme-scope) .newsletter-privacy-note {
56588
58002
  margin-top: 0.75rem;
56589
- font-size: 0.75rem;
56590
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
58003
+ font-size: 1rem;
58004
+ line-height: 1.6;
58005
+ color: var(--section-text-color, rgb(var(--tb-text)));
56591
58006
  text-align: center;
56592
58007
  }
56593
58008
 
@@ -56642,6 +58057,116 @@ var containerResponsiveThemeCss = `/*
56642
58057
  color: rgb(var(--tb-text));
56643
58058
  }
56644
58059
 
58060
+ /* =============================================================================
58061
+ * Block: Contact + Newsletter
58062
+ * =============================================================================
58063
+ */
58064
+
58065
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
58066
+ display: grid;
58067
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
58068
+ gap: clamp(2.5rem, 6vw, 4rem);
58069
+ align-items: start;
58070
+ }
58071
+
58072
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
58073
+ min-width: 0;
58074
+ }
58075
+
58076
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
58077
+ margin-bottom: 1.5rem;
58078
+ }
58079
+
58080
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
58081
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
58082
+ margin: 0 0 0.75rem;
58083
+ }
58084
+
58085
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
58086
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
58087
+ color: var(--section-text-color, rgb(var(--tb-text)));
58088
+ }
58089
+
58090
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
58091
+ display: flex;
58092
+ flex-direction: column;
58093
+ align-items: flex-start;
58094
+ }
58095
+
58096
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
58097
+ max-width: none;
58098
+ margin-left: 0;
58099
+ margin-right: 0;
58100
+ }
58101
+
58102
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
58103
+ text-align: left;
58104
+ }
58105
+
58106
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
58107
+ display: flex;
58108
+ flex-direction: column;
58109
+ gap: 1rem;
58110
+ }
58111
+
58112
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
58113
+ display: grid;
58114
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
58115
+ gap: 1rem;
58116
+ }
58117
+
58118
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
58119
+ display: flex;
58120
+ flex-direction: column;
58121
+ gap: 0.25rem;
58122
+ }
58123
+
58124
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
58125
+ display: flex;
58126
+ flex-direction: column;
58127
+ gap: 0.5rem;
58128
+ border: none;
58129
+ padding: 0;
58130
+ margin: 0;
58131
+ }
58132
+
58133
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
58134
+ display: flex;
58135
+ align-items: center;
58136
+ gap: 0.5rem;
58137
+ }
58138
+
58139
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
58140
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
58141
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
58142
+ border-radius: var(--rb-block-radius);
58143
+ padding: 1rem;
58144
+ font-size: 0.875rem;
58145
+ }
58146
+
58147
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
58148
+ background-color: var(--fb-success-bg);
58149
+ color: var(--fb-success-text);
58150
+ border: 1px solid var(--fb-success-border);
58151
+ }
58152
+
58153
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
58154
+ background-color: var(--fb-error-bg);
58155
+ color: var(--fb-error-text);
58156
+ border: 1px solid var(--fb-error-border);
58157
+ }
58158
+
58159
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
58160
+ background-color: var(--fb-empty-bg);
58161
+ color: var(--fb-empty-text);
58162
+ border: 1px dashed var(--fb-empty-border);
58163
+ text-align: center;
58164
+ }
58165
+
58166
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
58167
+ margin-top: 0.5rem;
58168
+ }
58169
+
56645
58170
  /* =============================================================================
56646
58171
  * Block: Team Members
56647
58172
  * =============================================================================
@@ -56866,8 +58391,8 @@ var containerResponsiveThemeCss = `/*
56866
58391
  container: event-compact-list / inline-size;
56867
58392
  border: 1px solid var(--event-compact-divider-color);
56868
58393
  border-radius: 1rem;
56869
- background: rgb(var(--tb-background, 255 255 255));
56870
- box-shadow: 0 1.25rem 3.5rem rgba(var(--tb-shadow), 0.08);
58394
+ background: rgb(var(--tb-surface, 255 255 255));
58395
+ box-shadow: none;
56871
58396
  }
56872
58397
 
56873
58398
  :where(.theme-scope) .rb-event-list-treatment-lined-panel .event-listing-compact-container {
@@ -56876,6 +58401,12 @@ var containerResponsiveThemeCss = `/*
56876
58401
  rgb(var(--tb-border, 229 231 235)),
56877
58402
  rgb(var(--tb-text, 17 24 39)) 8%
56878
58403
  );
58404
+ background: rgb(var(--tb-surface, 255 255 255));
58405
+ border-color: color-mix(
58406
+ in oklab,
58407
+ rgb(var(--tb-primary, 0 0 0)),
58408
+ rgb(var(--tb-border, 229 231 235)) 72%
58409
+ );
56879
58410
  }
56880
58411
 
56881
58412
  :where(.theme-scope) .event-compact-row {
@@ -56951,7 +58482,7 @@ var containerResponsiveThemeCss = `/*
56951
58482
 
56952
58483
  :where(.theme-scope) .event-compact-row-title {
56953
58484
  margin: 0;
56954
- color: rgb(var(--tb-text, 17 24 39));
58485
+ color: var(--section-heading-color, rgb(var(--tb-primary, 0 0 0)));
56955
58486
  font-family: var(--font-heading, var(--font-body, inherit));
56956
58487
  font-size: clamp(1.05rem, 1rem + 0.35vw, 1.3rem);
56957
58488
  font-weight: 400;
@@ -57044,8 +58575,6 @@ var containerResponsiveThemeCss = `/*
57044
58575
  min-height: 2.7rem;
57045
58576
  justify-content: space-between;
57046
58577
  gap: 1rem;
57047
- border-radius: 9999px;
57048
- padding-inline: 1.25rem 1rem;
57049
58578
  white-space: nowrap;
57050
58579
  }
57051
58580
 
@@ -58107,6 +59636,7 @@ function PageContent({
58107
59636
  mediaAssets,
58108
59637
  apiBaseUrl,
58109
59638
  portalToken,
59639
+ previewToken,
58110
59640
  dataContext,
58111
59641
  useThemeScope = false
58112
59642
  }) {
@@ -58123,6 +59653,7 @@ function PageContent({
58123
59653
  siteId,
58124
59654
  apiBaseUrl,
58125
59655
  portalToken,
59656
+ previewToken,
58126
59657
  resolvedData,
58127
59658
  routes: routeMap,
58128
59659
  pagesByIdentifier,
@@ -62021,6 +63552,46 @@ var ENDPOINT_DEFINITIONS = {
62021
63552
  auth: "user",
62022
63553
  responseKind: "json"
62023
63554
  },
63555
+ listEntrySlotBlocks: {
63556
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
63557
+ method: "GET",
63558
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
63559
+ auth: "user",
63560
+ responseKind: "json",
63561
+ errors: ["resource:not_found"]
63562
+ },
63563
+ listEntryPageContentSlots: {
63564
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
63565
+ method: "GET",
63566
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
63567
+ auth: "user",
63568
+ responseKind: "json",
63569
+ errors: ["resource:not_found"]
63570
+ },
63571
+ createEntrySlotBlock: {
63572
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
63573
+ method: "POST",
63574
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
63575
+ auth: "user",
63576
+ responseKind: "json",
63577
+ errors: ["validation:invalid_input", "resource:not_found"]
63578
+ },
63579
+ reorderEntrySlotBlocks: {
63580
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
63581
+ method: "POST",
63582
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
63583
+ auth: "user",
63584
+ responseKind: "json",
63585
+ errors: ["validation:invalid_input", "resource:not_found"]
63586
+ },
63587
+ deleteEntrySlotBlock: {
63588
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
63589
+ method: "DELETE",
63590
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
63591
+ auth: "user",
63592
+ responseKind: "json",
63593
+ errors: ["resource:not_found"]
63594
+ },
62024
63595
  createBlock: {
62025
63596
  path: "/sites/{siteId}/pages/{pageId}/blocks",
62026
63597
  method: "POST",
@@ -65844,7 +67415,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
65844
67415
  }
65845
67416
 
65846
67417
  // ../api/src/utils/isRecord.ts
65847
- function isRecord10(value) {
67418
+ function isRecord12(value) {
65848
67419
  return typeof value === "object" && value !== null && !Array.isArray(value);
65849
67420
  }
65850
67421
 
@@ -66151,7 +67722,7 @@ function sanitizeMarks(marks) {
66151
67722
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
66152
67723
  return [{ type: mark.type }];
66153
67724
  }
66154
- if (mark.type === "link" && isRecord10(mark.attrs) && typeof mark.attrs.href === "string") {
67725
+ if (mark.type === "link" && isRecord12(mark.attrs) && typeof mark.attrs.href === "string") {
66155
67726
  const attrs = { href: mark.attrs.href };
66156
67727
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
66157
67728
  attrs.target = mark.attrs.target;
@@ -66166,10 +67737,10 @@ function sanitizeMarks(marks) {
66166
67737
  return sanitized.length > 0 ? sanitized : void 0;
66167
67738
  }
66168
67739
  function unwrapRichTextValue(value) {
66169
- if (isRecord10(value) && isRecord10(value.doc)) {
67740
+ if (isRecord12(value) && isRecord12(value.doc)) {
66170
67741
  return unwrapRichTextValue(value.doc);
66171
67742
  }
66172
- if (isRecord10(value) && value.type === "doc") {
67743
+ if (isRecord12(value) && value.type === "doc") {
66173
67744
  return {
66174
67745
  type: "doc",
66175
67746
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -66178,7 +67749,7 @@ function unwrapRichTextValue(value) {
66178
67749
  return EMPTY_SITE_BANNER_BODY;
66179
67750
  }
66180
67751
  function isTipTapNodeLike(value) {
66181
- return isRecord10(value) && typeof value.type === "string";
67752
+ return isRecord12(value) && typeof value.type === "string";
66182
67753
  }
66183
67754
  function coerceTipTapNode(value) {
66184
67755
  return {
@@ -66186,9 +67757,9 @@ function coerceTipTapNode(value) {
66186
67757
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
66187
67758
  ...typeof value.text === "string" ? { text: value.text } : {},
66188
67759
  ...Array.isArray(value.marks) ? {
66189
- marks: value.marks.filter((mark) => isRecord10(mark) && typeof mark.type === "string").map((mark) => ({
67760
+ marks: value.marks.filter((mark) => isRecord12(mark) && typeof mark.type === "string").map((mark) => ({
66190
67761
  type: mark.type,
66191
- ...isRecord10(mark.attrs) ? { attrs: mark.attrs } : {}
67762
+ ...isRecord12(mark.attrs) ? { attrs: mark.attrs } : {}
66192
67763
  }))
66193
67764
  } : {}
66194
67765
  };