@riverbankcms/sdk 0.139.0 → 0.140.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 (196) hide show
  1. package/README.md +1 -1
  2. package/dist/{PreviewEditorSidebar-BDeenhi3.mjs → PreviewEditorSidebar-CUyTzd5z.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DSRhgjF5.mjs → PreviewEditorUI-Agkw4v5i.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-D2K8GLUG.mjs → PreviewQueryProvider-CN0ewic5.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CL7wSnYu.mjs → SdkPreviewModeRuntime-DdbeAdS8.mjs} +22 -8
  6. package/dist/{SiteChromeCustomizeContext-BhDn-5ir.mjs → SiteChromeCustomizeContext-CqGOz-Kv.mjs} +2053 -1110
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +165 -165
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +212 -212
  9. package/dist/_dts/api/src/accessAdmin.d.ts +74 -104
  10. package/dist/_dts/api/src/aiEndpoints.d.ts +5 -1
  11. package/dist/_dts/api/src/authSubmission.d.ts +46 -0
  12. package/dist/_dts/api/src/billing.d.ts +8 -4
  13. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +23 -0
  14. package/dist/_dts/api/src/billingEndpointTypes.d.ts +26 -0
  15. package/dist/_dts/api/src/blocks.d.ts +2 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +1 -2
  17. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +8 -1
  18. package/dist/_dts/api/src/communications.d.ts +0 -1
  19. package/dist/_dts/api/src/contentRuntime.d.ts +8 -3
  20. package/dist/_dts/api/src/endpoints.d.ts +93 -64
  21. package/dist/_dts/api/src/event-destination-policy.d.ts +2 -1
  22. package/dist/_dts/api/src/footerSettings.d.ts +9 -6
  23. package/dist/_dts/api/src/index.d.ts +5 -6
  24. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  25. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  26. package/dist/_dts/api/src/mailingListIntegration.d.ts +8 -2
  27. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
  28. package/dist/_dts/api/src/navigation/types.d.ts +1 -1
  29. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +25 -0
  30. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +32 -32
  31. package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +8 -0
  32. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +1 -0
  33. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +11 -3
  34. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +3 -29
  35. package/dist/_dts/api/src/publicOnboardingAttemptEndpointDefinitions.d.ts +65 -0
  36. package/dist/_dts/api/src/saveOutcome.d.ts +20 -0
  37. package/dist/_dts/api/src/sdkContracts.d.ts +3 -22
  38. package/dist/_dts/api/src/sdkPushContracts.d.ts +18 -0
  39. package/dist/_dts/api/src/sdkThemeWire.d.ts +44 -44
  40. package/dist/_dts/api/src/settings/permissions.d.ts +12 -0
  41. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +9 -5
  42. package/dist/_dts/api/src/siteOnboarding.d.ts +2 -9
  43. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +2 -4
  44. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +3 -1
  45. package/dist/_dts/api/src/siteSettings.d.ts +20 -7
  46. package/dist/_dts/api/src/types.d.ts +77 -77
  47. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -37
  48. package/dist/_dts/billing/src/membership/index.d.ts +3 -0
  49. package/dist/_dts/billing/src/plans/types.d.ts +3 -0
  50. package/dist/_dts/billing/src/site-arrangements.d.ts +14 -3
  51. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
  52. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +2 -0
  53. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +5 -0
  54. package/dist/_dts/blocks/src/portal/types.d.ts +2 -4
  55. package/dist/_dts/blocks/src/portal/waitlist-types.d.ts +35 -0
  56. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +2 -0
  57. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
  58. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
  59. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -2
  60. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +2 -1
  61. package/dist/_dts/blocks/src/system/data/types.d.ts +9 -0
  62. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  63. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +0 -28
  64. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  65. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +7 -3
  66. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -2
  68. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +30 -6
  69. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +15 -3
  70. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +43 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +1 -2
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +2 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/checkoutRecovery.d.ts +14 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +56 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -8
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useCheckoutRecovery.d.ts +8 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +8 -7
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +10 -2
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventSourceRecovery.d.ts +18 -0
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.client.d.ts +1 -1
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +24 -6
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +4 -2
  83. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +1 -0
  85. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +1 -0
  86. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -6
  87. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  88. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +2 -0
  89. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  90. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +27 -4
  91. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +2 -1
  92. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +3 -1
  93. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +3 -0
  94. package/dist/_dts/core/src/branded.d.ts +0 -8
  95. package/dist/_dts/core/src/index.d.ts +1 -0
  96. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +1 -1
  97. package/dist/_dts/core/src/mailing-list-setup.d.ts +14 -1
  98. package/dist/_dts/core/src/mailing-list-submission.d.ts +7 -27
  99. package/dist/_dts/core/src/participants.d.ts +2 -29
  100. package/dist/_dts/core/src/public-experience.d.ts +4 -0
  101. package/dist/_dts/core/src/public-profile.d.ts +27 -1
  102. package/dist/_dts/core/src/site-route-target.d.ts +9 -2
  103. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +293 -606
  104. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListGlobalSettingsSummary.d.ts +10 -0
  105. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +3 -2
  106. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/context.d.ts +3 -2
  107. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +3 -2
  108. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +19 -0
  109. package/dist/_dts/sdk/src/public-api/contracts.d.ts +14 -20
  110. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  111. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -0
  112. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +7 -1
  113. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +1 -0
  114. package/dist/_dts/sdk/src/version.d.ts +1 -1
  115. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  116. package/dist/_dts/theme-core/src/cards/types.d.ts +21 -21
  117. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  118. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +8 -2
  119. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -2
  120. package/dist/_dts/theme-core/src/inputs/types.d.ts +2 -2
  121. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +54 -54
  122. package/dist/_dts/theme-core/src/runtime/buildThemeRuntimeFromBridge.d.ts +1 -4
  123. package/dist/_dts/theme-core/src/schema.d.ts +84 -84
  124. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +1 -1
  125. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  126. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +77 -0
  127. package/dist/_dts/theme-core/src/surfaces/index.d.ts +1 -0
  128. package/dist/_dts/theme-core/src/typography/generateTypographyCss.d.ts +2 -2
  129. package/dist/_dts/ui/src/lib/use-delayed-flag.d.ts +9 -0
  130. package/dist/_dts/ui/src/pending-button.d.ts +10 -0
  131. package/dist/client/{BookingConsentAgreement-CZvTDtsK.mjs → BookingConsentAgreement-CuKa82V4.mjs} +4 -4
  132. package/dist/client/{DiscountCodeDisclosure-D-DsLCMU.mjs → DiscountCodeDisclosure-BbYieKWB.mjs} +1 -1
  133. package/dist/client/{EventCombined.client-dWqgd5ZO.mjs → EventCombined.client-LTfR1Aby.mjs} +6 -6
  134. package/dist/client/{EventListing.client-BMRa9IYp.mjs → EventListing.client-DUHpYSuo.mjs} +2 -2
  135. package/dist/client/{LeafletStaticMap-D21W9kBZ.mjs → LeafletStaticMap-CHRupL6m.mjs} +1 -1
  136. package/dist/client/{accordion-FxF_ta47.mjs → accordion-6HiIFxNL.mjs} +1 -1
  137. package/dist/client/{bookingForm-YnwW4TGw.mjs → bookingForm-Dlmid43H.mjs} +7 -7
  138. package/dist/client/bookings.mjs +325 -140
  139. package/dist/client/{carousel-vng7fFT5.mjs → carousel-DmkZRRq_.mjs} +2 -2
  140. package/dist/client/{carousel.client-59G_WMr4.mjs → carousel.client-DQTjCVQT.mjs} +1 -1
  141. package/dist/client/{cart-DEPDsjNk.mjs → cart-CIC24330.mjs} +3 -3
  142. package/dist/client/{checkout-CZRWu9rW.mjs → checkout-D1Zw9imo.mjs} +3 -3
  143. package/dist/client/{checkoutUrls-BuseL0dw.mjs → checkoutUrls-FL6lRkrt.mjs} +1 -1
  144. package/dist/client/client.mjs +1717 -882
  145. package/dist/client/{colorStyles-CrxJrPjJ.mjs → colorStyles-3013aRAY.mjs} +3 -1
  146. package/dist/client/{context-DvU_WUmd.mjs → context-Cy1OayHx.mjs} +6 -19
  147. package/dist/client/{dates-wnPMiRl5.mjs → dates-aDcfoLHr.mjs} +2 -2
  148. package/dist/client/{eventCalendar-BA3Q5L15.mjs → eventCalendar-FQxMPAjf.mjs} +8 -8
  149. package/dist/client/{eventCombined-51wgR-1R.mjs → eventCombined-Dr3ac6Hb.mjs} +3 -3
  150. package/dist/client/{eventDetails-modaetpm.mjs → eventDetails-D-AzUHFQ.mjs} +4 -4
  151. package/dist/client/{eventListing-D8t2J3Kv.mjs → eventListing-B3XxBf3i.mjs} +3 -3
  152. package/dist/client/{eventRegistration-CYqtkCE_.mjs → eventRegistration-I6EaokFD.mjs} +500 -152
  153. package/dist/client/{form-CBKXN5In.mjs → form-BbWckVWY.mjs} +3 -3
  154. package/dist/client/{headerSection-DylDqNrs.mjs → headerSection-C9qU4Y7x.mjs} +2 -2
  155. package/dist/client/hooks.mjs +445 -180
  156. package/dist/client/{locationMap-CvWrG0vZ.mjs → locationMap-CLCShvlG.mjs} +3 -3
  157. package/dist/client/{media-BOHuueS5.mjs → media-DHpfFwd3.mjs} +1 -1
  158. package/dist/client/{newsletterForm-Btwk70zw.mjs → newsletterForm-Briukxzi.mjs} +130 -87
  159. package/dist/client/{pricing-Uzw-GQ6Y.mjs → pricing-Copadu-2.mjs} +1 -1
  160. package/dist/client/{productDetail-JLcUYKnd.mjs → productDetail-oujlRd-r.mjs} +3 -3
  161. package/dist/client/{productList-FM0cbUzj.mjs → productList-BRiIRUcd.mjs} +3 -3
  162. package/dist/client/{propsDecoder-DYzafZb2.mjs → propsDecoder-CB2KS_ko.mjs} +130 -24
  163. package/dist/client/rendering/client.mjs +911 -400
  164. package/dist/client/rendering/islands.mjs +19 -19
  165. package/dist/client/rendering.mjs +1696 -818
  166. package/dist/client/{scrollToBlock-CvXszexS.mjs → scrollToBlock-B1IS1_ua.mjs} +1 -1
  167. package/dist/client/{shop-BIcjvy5a.mjs → shop-Vn6yNFED.mjs} +6 -6
  168. package/dist/client/{shop-commerce-BZQsy7xw.mjs → shop-commerce-BVTqipYp.mjs} +7 -7
  169. package/dist/client/{shop-commerce-store-D5V7XAb5.mjs → shop-commerce-store-BVnJVy7v.mjs} +1 -1
  170. package/dist/client/{shopShared-DowkXevB.mjs → shopShared-COIeK77T.mjs} +4 -4
  171. package/dist/client/{useEventFilters-oMoTw_JE.mjs → useEventFilters-DzIUcS9n.mjs} +7 -7
  172. package/dist/preview-next/before-render.mjs +119 -64
  173. package/dist/preview-next/client/runtime.mjs +4 -4
  174. package/dist/preview-next/keepAlive.mjs +119 -64
  175. package/dist/preview-next/middleware.mjs +119 -64
  176. package/dist/{previewAuthStore-COUyAKaX.mjs → previewAuthStore-Gjb6r6vz.mjs} +119 -64
  177. package/dist/{sdk-runtime-D4k2LSGF.mjs → sdk-runtime-CnCLvZRv.mjs} +2 -2
  178. package/dist/{separator-UGtpag4Z.mjs → separator-DKDRJ1oH.mjs} +1 -1
  179. package/dist/server/components.mjs +787 -323
  180. package/dist/server/config-validation.mjs +328 -79
  181. package/dist/server/config.mjs +332 -83
  182. package/dist/server/data.mjs +441 -180
  183. package/dist/server/index.mjs +126 -66
  184. package/dist/server/next.mjs +1031 -595
  185. package/dist/server/page-converter.mjs +183 -74
  186. package/dist/server/prebuild.mjs +1 -1
  187. package/dist/server/rendering/server.mjs +1068 -592
  188. package/dist/server/rendering.mjs +802 -324
  189. package/dist/server/routing.mjs +506 -214
  190. package/dist/server/server.mjs +468 -244
  191. package/dist/server/theme-bridge.mjs +433 -100
  192. package/dist/server/theme.mjs +8 -2
  193. package/dist/styles/index.css +237 -43
  194. package/package.json +1 -1
  195. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionCompactRow.d.ts +0 -29
  196. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionList.d.ts +0 -13
@@ -1634,6 +1634,55 @@ function interpolateHex(startHex, endHex, position) {
1634
1634
  const channel = (from, to) => Math.round(from + (to - from) * position).toString(16).padStart(2, "0");
1635
1635
  return `#${channel(start.r, end.r)}${channel(start.g, end.g)}${channel(start.b, end.b)}`;
1636
1636
  }
1637
+ //#endregion
1638
+ //#region ../theme-core/src/utils/colorStyles.ts
1639
+ const COLOR_VAR_PREFIX = "--tb-";
1640
+ function parseToken(source) {
1641
+ const parts = parseColorTokenParts(source);
1642
+ if (parts.kind === "raw") return {
1643
+ token: source,
1644
+ raw: parts.value
1645
+ };
1646
+ if (parts.kind === "invalid") return { token: source };
1647
+ return {
1648
+ token: parts.token,
1649
+ opacityPercent: parts.opacityPercent === null ? void 0 : parts.opacityPercent
1650
+ };
1651
+ }
1652
+ /**
1653
+ * Converts a theme color token to a CSS rgb value.
1654
+ * This is the primary function for applying theme colors to CSS properties.
1655
+ *
1656
+ * @param token - Theme color token (semantic, with opacity, or raw)
1657
+ * @returns CSS color value (rgb with optional alpha, or raw CSS value)
1658
+ *
1659
+ * @example
1660
+ * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'
1661
+ * rgbColorValue('surface/95') // => 'rgb(var(--tb-surface) / 0.95)'
1662
+ * rgbColorValue('raw:transparent') // => 'transparent'
1663
+ */
1664
+ function rgbColorValue(token) {
1665
+ const { token: baseToken, opacityPercent, raw } = parseToken(token);
1666
+ if (raw) return raw;
1667
+ const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
1668
+ if (opacityPercent === void 0) return `rgb(var(${cssVar}))`;
1669
+ return `rgb(var(${cssVar}) / ${opacityPercent / 100})`;
1670
+ }
1671
+ /**
1672
+ * Converts a theme color token to a CSS variable reference.
1673
+ * Note: This returns the base variable without rgb() wrapper, ignoring opacity.
1674
+ *
1675
+ * @param token - Theme color token
1676
+ * @returns CSS variable reference
1677
+ *
1678
+ * @example
1679
+ * cssVarValue('primary') // => 'var(--tb-primary)'
1680
+ * cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)
1681
+ */
1682
+ function cssVarValue(token) {
1683
+ const { token: baseToken } = parseToken(token);
1684
+ return `var(${COLOR_VAR_PREFIX}${baseToken})`;
1685
+ }
1637
1686
  shadeBackgroundEffect({
1638
1687
  id: "darken-background",
1639
1688
  name: "Darken on Hover",
@@ -1688,55 +1737,6 @@ function shadeBackgroundEffect(config) {
1688
1737
  };
1689
1738
  }
1690
1739
  //#endregion
1691
- //#region ../theme-core/src/utils/colorStyles.ts
1692
- const COLOR_VAR_PREFIX = "--tb-";
1693
- function parseToken(source) {
1694
- const parts = parseColorTokenParts(source);
1695
- if (parts.kind === "raw") return {
1696
- token: source,
1697
- raw: parts.value
1698
- };
1699
- if (parts.kind === "invalid") return { token: source };
1700
- return {
1701
- token: parts.token,
1702
- opacityPercent: parts.opacityPercent === null ? void 0 : parts.opacityPercent
1703
- };
1704
- }
1705
- /**
1706
- * Converts a theme color token to a CSS rgb value.
1707
- * This is the primary function for applying theme colors to CSS properties.
1708
- *
1709
- * @param token - Theme color token (semantic, with opacity, or raw)
1710
- * @returns CSS color value (rgb with optional alpha, or raw CSS value)
1711
- *
1712
- * @example
1713
- * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'
1714
- * rgbColorValue('surface/95') // => 'rgb(var(--tb-surface) / 0.95)'
1715
- * rgbColorValue('raw:transparent') // => 'transparent'
1716
- */
1717
- function rgbColorValue(token) {
1718
- const { token: baseToken, opacityPercent, raw } = parseToken(token);
1719
- if (raw) return raw;
1720
- const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
1721
- if (opacityPercent === void 0) return `rgb(var(${cssVar}))`;
1722
- return `rgb(var(${cssVar}) / ${opacityPercent / 100})`;
1723
- }
1724
- /**
1725
- * Converts a theme color token to a CSS variable reference.
1726
- * Note: This returns the base variable without rgb() wrapper, ignoring opacity.
1727
- *
1728
- * @param token - Theme color token
1729
- * @returns CSS variable reference
1730
- *
1731
- * @example
1732
- * cssVarValue('primary') // => 'var(--tb-primary)'
1733
- * cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)
1734
- */
1735
- function cssVarValue(token) {
1736
- const { token: baseToken } = parseToken(token);
1737
- return `var(${COLOR_VAR_PREFIX}${baseToken})`;
1738
- }
1739
- //#endregion
1740
1740
  //#region ../theme-core/src/utils/tokenOrColor.ts
1741
1741
  /**
1742
1742
  * Runtime color-reference fields intentionally accept any string, including
@@ -5076,8 +5076,14 @@ const headerInteractionPillPaletteValues = [
5076
5076
  "accent"
5077
5077
  ];
5078
5078
  /**
5079
- * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
5080
- * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
5079
+ * "No pill": a colour change on hover rather than a filled background.
5080
+ *
5081
+ * The palette step writes nothing (#1318 Phase 4c decision 2), but on a
5082
+ * foreground-adaptive style that is not the end of the story: the hover colour
5083
+ * is derived from the resolved opening foreground at render time, paired with
5084
+ * the resting colour, so `quiet` resolves to a definite colour rather than to
5085
+ * whatever brand token the recipe happened to name. See
5086
+ * `applyOpeningForeground`.
5081
5087
  *
5082
5088
  * It exists because "a colour change on hover, no filled background" was not
5083
5089
  * expressible in the vocabulary, and it is what
@@ -10921,6 +10927,132 @@ ${root} .step-connector {
10921
10927
  return cssBlocks.join("\n\n");
10922
10928
  }
10923
10929
  //#endregion
10930
+ //#region ../theme-core/src/typography/generateTypographyCss.ts
10931
+ function globalHeadingColorFallback(level) {
10932
+ return `var(--hc-h${level}, var(--hc-heading, ${DEFAULT_SURFACE_TEXT_COLOR}))`;
10933
+ }
10934
+ /**
10935
+ * Generate typography CSS for heading elements.
10936
+ *
10937
+ * Creates scoped CSS that:
10938
+ * - Applies font-size, font-weight, letter-spacing, line-height to h1-h6
10939
+ * - Uses clamp() for fluid responsive sizing
10940
+ * - Provides variant classes (.heading-display, .heading-compact)
10941
+ *
10942
+ * Selectors use :where() for zero specificity, allowing site styles to override easily.
10943
+ */
10944
+ function generateTypographyCss({ themeId }) {
10945
+ const root = `:where([data-theme-scope="${themeId}"])`;
10946
+ const cssBlocks = [];
10947
+ cssBlocks.push(`/* Base heading styles */
10948
+ ${root} :where(h1, h2, h3, h4, h5, h6) {
10949
+ font-family: var(--font-heading);
10950
+ font-style: var(--fi-heading, normal);
10951
+ text-transform: var(--tt-heading, none);
10952
+ font-variant: var(--fv-heading, normal);
10953
+ margin: 0;
10954
+ }`);
10955
+ cssBlocks.push(`/* Heading level styles with fluid typography */
10956
+ ${root} :where(h1) {
10957
+ font-size: var(--fs-h1-fluid, var(--fs-h1));
10958
+ font-weight: var(--fw-h1, var(--font-weight-heading));
10959
+ font-style: var(--fi-h1, var(--fi-heading, normal));
10960
+ letter-spacing: var(--ls-h1, var(--ls-heading));
10961
+ line-height: var(--lh-h1, var(--lh-heading));
10962
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(1))};
10963
+ }
10964
+
10965
+ ${root} :where(h2) {
10966
+ font-size: var(--fs-h2-fluid, var(--fs-h2));
10967
+ font-weight: var(--fw-h2, var(--font-weight-heading));
10968
+ font-style: var(--fi-h2, var(--fi-heading, normal));
10969
+ letter-spacing: var(--ls-h2, var(--ls-heading));
10970
+ line-height: var(--lh-h2, var(--lh-heading));
10971
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(2))};
10972
+ }
10973
+
10974
+ ${root} :where(h3) {
10975
+ font-size: var(--fs-h3-fluid, var(--fs-h3));
10976
+ font-weight: var(--fw-h3, var(--font-weight-heading));
10977
+ font-style: var(--fi-h3, var(--fi-heading, normal));
10978
+ letter-spacing: var(--ls-h3, var(--ls-heading));
10979
+ line-height: var(--lh-h3, var(--lh-heading));
10980
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(3))};
10981
+ }
10982
+
10983
+ ${root} :where(h4) {
10984
+ font-size: var(--fs-h4-fluid, var(--fs-h4, var(--fs-h3)));
10985
+ font-weight: var(--fw-h4, var(--font-weight-heading));
10986
+ font-style: var(--fi-h4, var(--fi-heading, normal));
10987
+ letter-spacing: var(--ls-h4, var(--ls-heading));
10988
+ line-height: var(--lh-h4, var(--lh-heading));
10989
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(4))};
10990
+ }
10991
+
10992
+ ${root} :where(h5) {
10993
+ font-size: var(--fs-h5-fluid, var(--fs-h5, var(--fs-body)));
10994
+ font-weight: var(--fw-h5, var(--font-weight-heading));
10995
+ font-style: var(--fi-h5, var(--fi-heading, normal));
10996
+ letter-spacing: var(--ls-h5, var(--ls-heading));
10997
+ line-height: var(--lh-h5, var(--lh-heading));
10998
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(5))};
10999
+ }
11000
+
11001
+ ${root} :where(h6) {
11002
+ font-size: var(--fs-h6-fluid, var(--fs-h6, var(--fs-body)));
11003
+ font-weight: var(--fw-h6, var(--font-weight-heading));
11004
+ font-style: var(--fi-h6, var(--fi-heading, normal));
11005
+ letter-spacing: var(--ls-h6, var(--ls-heading));
11006
+ line-height: var(--lh-h6, var(--lh-heading));
11007
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(6))};
11008
+ }`);
11009
+ cssBlocks.push(`/* Display variant for hero/splash headings */
11010
+ ${root} :where(.heading-display) {
11011
+ font-size: var(--fs-display-fluid, var(--fs-display));
11012
+ }
11013
+
11014
+ ${root} :where(h1.heading-display) {
11015
+ font-size: var(--fs-h1-display-fluid, var(--fs-h1-display, calc(var(--fs-h1) * 1.5)));
11016
+ }
11017
+
11018
+ ${root} :where(h2.heading-display) {
11019
+ font-size: var(--fs-h2-display-fluid, var(--fs-h2-display, calc(var(--fs-h2) * 1.35)));
11020
+ }`);
11021
+ cssBlocks.push(`/* Compact variant for cards/sidebars */
11022
+ ${root} :where(.heading-compact) {
11023
+ font-size: var(--fs-compact);
11024
+ }
11025
+
11026
+ ${root} :where(h1.heading-compact) {
11027
+ font-size: calc(var(--fs-h1) * 0.75);
11028
+ }
11029
+
11030
+ ${root} :where(h2.heading-compact) {
11031
+ font-size: calc(var(--fs-h2) * 0.8);
11032
+ }
11033
+
11034
+ ${root} :where(h3.heading-compact) {
11035
+ font-size: calc(var(--fs-h3) * 0.85);
11036
+ }`);
11037
+ cssBlocks.push(`/* Body text base styles */
11038
+ ${root} {
11039
+ font-family: var(--font-body);
11040
+ font-weight: var(--font-weight-body);
11041
+ font-size: var(--fs-body);
11042
+ letter-spacing: var(--ls-body);
11043
+ line-height: var(--lh-body);
11044
+ }
11045
+
11046
+ ${root} :where(p, li, td, th, label, span) {
11047
+ font-family: var(--font-body);
11048
+ font-weight: var(--font-weight-body);
11049
+ letter-spacing: var(--ls-body);
11050
+ font-size: inherit;
11051
+ line-height: inherit;
11052
+ }`);
11053
+ return `@layer rb-theme {\n${cssBlocks.join("\n\n")}\n}`;
11054
+ }
11055
+ //#endregion
10924
11056
  //#region ../theme-core/src/blocks/vars/event-registration.ts
10925
11057
  /**
10926
11058
  * Generate CSS variables for the event-registration block.
@@ -21382,7 +21514,9 @@ const containerResponsiveThemeCss = `/*
21382
21514
  text-align: left;
21383
21515
  }
21384
21516
 
21385
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__subtitle {
21517
+ :where(.theme-scope)
21518
+ :where([data-block="customer-portal"])
21519
+ .cp-login__subtitle {
21386
21520
  color: var(--cp-muted);
21387
21521
  font-size: 0.9375rem;
21388
21522
  text-align: left;
@@ -21409,7 +21543,9 @@ const containerResponsiveThemeCss = `/*
21409
21543
  text-align: left;
21410
21544
  }
21411
21545
 
21412
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link {
21546
+ :where(.theme-scope)
21547
+ :where([data-block="customer-portal"])
21548
+ .cp-login__reset-link {
21413
21549
  appearance: none;
21414
21550
  background: none;
21415
21551
  border: 0;
@@ -21423,11 +21559,15 @@ const containerResponsiveThemeCss = `/*
21423
21559
  text-underline-offset: 0.15em;
21424
21560
  }
21425
21561
 
21426
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link:hover {
21562
+ :where(.theme-scope)
21563
+ :where([data-block="customer-portal"])
21564
+ .cp-login__reset-link:hover {
21427
21565
  color: var(--cp-text);
21428
21566
  }
21429
21567
 
21430
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link:focus-visible {
21568
+ :where(.theme-scope)
21569
+ :where([data-block="customer-portal"])
21570
+ .cp-login__reset-link:focus-visible {
21431
21571
  outline: 2px solid currentColor;
21432
21572
  outline-offset: 3px;
21433
21573
  }
@@ -21472,7 +21612,9 @@ const containerResponsiveThemeCss = `/*
21472
21612
  border-bottom: none;
21473
21613
  }
21474
21614
 
21475
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-header__welcome {
21615
+ :where(.theme-scope)
21616
+ :where([data-block="customer-portal"])
21617
+ .cp-header__welcome {
21476
21618
  font-size: 1.125rem;
21477
21619
  font-weight: 500;
21478
21620
  }
@@ -21488,8 +21630,14 @@ const containerResponsiveThemeCss = `/*
21488
21630
  }
21489
21631
 
21490
21632
  @keyframes cp-fade-in {
21491
- from { opacity: 0; transform: translateY(4px); }
21492
- to { opacity: 1; transform: translateY(0); }
21633
+ from {
21634
+ opacity: 0;
21635
+ transform: translateY(4px);
21636
+ }
21637
+ to {
21638
+ opacity: 1;
21639
+ transform: translateY(0);
21640
+ }
21493
21641
  }
21494
21642
 
21495
21643
  /* Empty state */
@@ -21578,6 +21726,77 @@ const containerResponsiveThemeCss = `/*
21578
21726
  margin-top: 1rem;
21579
21727
  }
21580
21728
 
21729
+ /* Event waitlists */
21730
+ :where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-list {
21731
+ display: grid;
21732
+ gap: 1rem;
21733
+ }
21734
+
21735
+ :where(.theme-scope)
21736
+ :where([data-block="customer-portal"])
21737
+ .cp-waitlists
21738
+ > .cp-alert {
21739
+ margin-bottom: 1rem;
21740
+ }
21741
+
21742
+ :where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-card {
21743
+ transition:
21744
+ border-color 180ms ease,
21745
+ box-shadow 180ms ease;
21746
+ }
21747
+
21748
+ :where(.theme-scope)
21749
+ :where([data-block="customer-portal"])
21750
+ .cp-waitlist-card--focused {
21751
+ border-color: var(--cp-primary);
21752
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--cp-primary) 22%, transparent);
21753
+ }
21754
+
21755
+ :where(.theme-scope)
21756
+ :where([data-block="customer-portal"])
21757
+ .cp-waitlist-card__summary,
21758
+ :where(.theme-scope)
21759
+ :where([data-block="customer-portal"])
21760
+ .cp-waitlist-card__position {
21761
+ font-weight: 600;
21762
+ }
21763
+
21764
+ :where(.theme-scope)
21765
+ :where([data-block="customer-portal"])
21766
+ .cp-waitlist-card
21767
+ .cp-card-body
21768
+ p {
21769
+ margin: 0.4rem 0;
21770
+ }
21771
+
21772
+ @container rb-site (max-width: 640px) {
21773
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
21774
+ :where(.theme-scope)
21775
+ :where([data-block="customer-portal"])
21776
+ .cp-waitlist-card
21777
+ .cp-card-header {
21778
+ flex-direction: column-reverse;
21779
+ }
21780
+
21781
+ :where(.theme-scope)
21782
+ :where([data-block="customer-portal"])
21783
+ .cp-waitlist-card
21784
+ .cp-card-actions {
21785
+ align-items: stretch;
21786
+ flex-direction: column;
21787
+ }
21788
+
21789
+ :where(.theme-scope)
21790
+ :where([data-block="customer-portal"])
21791
+ .cp-waitlist-card
21792
+ .cp-card-actions
21793
+ > * {
21794
+ justify-content: center;
21795
+ text-align: center;
21796
+ }
21797
+ }
21798
+ }
21799
+
21581
21800
  /* Badge */
21582
21801
  :where(.theme-scope) :where([data-block="customer-portal"]) .cp-badge {
21583
21802
  display: inline-flex;
@@ -21714,11 +21933,18 @@ const containerResponsiveThemeCss = `/*
21714
21933
  background: rgba(var(--tb-border), 0.2);
21715
21934
  }
21716
21935
 
21717
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table tbody tr:last-child td {
21936
+ :where(.theme-scope)
21937
+ :where([data-block="customer-portal"])
21938
+ .cp-table
21939
+ tbody
21940
+ tr:last-child
21941
+ td {
21718
21942
  border-bottom: none;
21719
21943
  }
21720
21944
 
21721
- :where(.theme-scope) :where([data-block="customer-portal"]) :is(.cp-row--past, .cp-row--muted) {
21945
+ :where(.theme-scope)
21946
+ :where([data-block="customer-portal"])
21947
+ :is(.cp-row--past, .cp-row--muted) {
21722
21948
  opacity: 0.65;
21723
21949
  }
21724
21950
 
@@ -21731,7 +21957,9 @@ const containerResponsiveThemeCss = `/*
21731
21957
  line-height: 1.2;
21732
21958
  }
21733
21959
 
21734
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__badges {
21960
+ :where(.theme-scope)
21961
+ :where([data-block="customer-portal"])
21962
+ .cp-row-title__badges {
21735
21963
  margin-left: auto;
21736
21964
  display: flex;
21737
21965
  flex-wrap: wrap;
@@ -21739,7 +21967,9 @@ const containerResponsiveThemeCss = `/*
21739
21967
  gap: 0.375rem;
21740
21968
  }
21741
21969
 
21742
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__text {
21970
+ :where(.theme-scope)
21971
+ :where([data-block="customer-portal"])
21972
+ .cp-row-title__text {
21743
21973
  min-width: 0;
21744
21974
  }
21745
21975
 
@@ -21759,12 +21989,16 @@ const containerResponsiveThemeCss = `/*
21759
21989
  line-height: 1.35;
21760
21990
  }
21761
21991
 
21762
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-note--success {
21992
+ :where(.theme-scope)
21993
+ :where([data-block="customer-portal"])
21994
+ .cp-row-note--success {
21763
21995
  border-left-color: rgb(var(--tb-success));
21764
21996
  color: rgb(var(--tb-success));
21765
21997
  }
21766
21998
 
21767
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-note--error {
21999
+ :where(.theme-scope)
22000
+ :where([data-block="customer-portal"])
22001
+ .cp-row-note--error {
21768
22002
  border-left-color: rgb(var(--tb-destructive));
21769
22003
  color: rgb(var(--tb-destructive));
21770
22004
  }
@@ -21783,16 +22017,23 @@ const containerResponsiveThemeCss = `/*
21783
22017
  white-space: nowrap;
21784
22018
  }
21785
22019
 
21786
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-col-actions .btn-sm {
22020
+ :where(.theme-scope)
22021
+ :where([data-block="customer-portal"])
22022
+ .cp-col-actions
22023
+ .btn-sm {
21787
22024
  white-space: nowrap;
21788
22025
  }
21789
22026
 
21790
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__link {
22027
+ :where(.theme-scope)
22028
+ :where([data-block="customer-portal"])
22029
+ .cp-row-title__link {
21791
22030
  color: inherit;
21792
22031
  text-decoration: none;
21793
22032
  }
21794
22033
 
21795
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__link:hover {
22034
+ :where(.theme-scope)
22035
+ :where([data-block="customer-portal"])
22036
+ .cp-row-title__link:hover {
21796
22037
  text-decoration: underline;
21797
22038
  text-decoration-thickness: 2px;
21798
22039
  text-underline-offset: 2px;
@@ -21814,7 +22055,9 @@ const containerResponsiveThemeCss = `/*
21814
22055
  }
21815
22056
 
21816
22057
  /* Profile actions */
21817
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-profile__actions {
22058
+ :where(.theme-scope)
22059
+ :where([data-block="customer-portal"])
22060
+ .cp-profile__actions {
21818
22061
  display: flex;
21819
22062
  gap: 0.75rem;
21820
22063
  margin-top: 1rem;
@@ -21881,28 +22124,39 @@ const containerResponsiveThemeCss = `/*
21881
22124
  gap: 0.375rem;
21882
22125
  }
21883
22126
 
21884
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__index {
22127
+ :where(.theme-scope)
22128
+ :where([data-block="customer-portal"])
22129
+ .cp-guest-edit-row__index {
21885
22130
  font-size: 0.75rem;
21886
22131
  font-weight: 500;
21887
22132
  color: var(--cp-muted);
21888
22133
  }
21889
22134
 
21890
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__fields {
22135
+ :where(.theme-scope)
22136
+ :where([data-block="customer-portal"])
22137
+ .cp-guest-edit-row__fields {
21891
22138
  display: flex;
21892
22139
  gap: 0.5rem;
21893
22140
  }
21894
22141
 
21895
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__fields input {
22142
+ :where(.theme-scope)
22143
+ :where([data-block="customer-portal"])
22144
+ .cp-guest-edit-row__fields
22145
+ input {
21896
22146
  flex: 1;
21897
22147
  min-width: 0;
21898
22148
  }
21899
22149
 
21900
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__error {
22150
+ :where(.theme-scope)
22151
+ :where([data-block="customer-portal"])
22152
+ .cp-guest-edit-row__error {
21901
22153
  font-size: 0.75rem;
21902
22154
  color: var(--cp-error);
21903
22155
  }
21904
22156
 
21905
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guests__actions {
22157
+ :where(.theme-scope)
22158
+ :where([data-block="customer-portal"])
22159
+ .cp-guests__actions {
21906
22160
  display: flex;
21907
22161
  gap: 0.5rem;
21908
22162
  margin-top: 0.5rem;
@@ -21916,13 +22170,18 @@ const containerResponsiveThemeCss = `/*
21916
22170
  }
21917
22171
 
21918
22172
  /* In the actions modal, tiles sit on a surface modal, so use "background" for contrast. */
21919
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-actions-list :where(.rb-tile) {
22173
+ :where(.theme-scope)
22174
+ :where([data-block="customer-portal"])
22175
+ .cp-actions-list
22176
+ :where(.rb-tile) {
21920
22177
  --rb-event-tile-bg: rgb(var(--tb-background));
21921
22178
  --rb-event-tile-border: rgb(var(--tb-border));
21922
22179
  }
21923
22180
 
21924
22181
  /* Actions trigger: icon-only kebab button */
21925
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-actions-trigger.btn-sm {
22182
+ :where(.theme-scope)
22183
+ :where([data-block="customer-portal"])
22184
+ .cp-actions-trigger.btn-sm {
21926
22185
  padding: 0.35rem !important;
21927
22186
  line-height: 1 !important;
21928
22187
  min-width: 32px;
@@ -21946,17 +22205,24 @@ const containerResponsiveThemeCss = `/*
21946
22205
  gap: 0.25rem;
21947
22206
  }
21948
22207
 
21949
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile__title {
22208
+ :where(.theme-scope)
22209
+ :where([data-block="customer-portal"])
22210
+ .cp-action-tile__title {
21950
22211
  font-weight: 600;
21951
22212
  font-size: 0.9375rem;
21952
22213
  }
21953
22214
 
21954
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile__desc {
22215
+ :where(.theme-scope)
22216
+ :where([data-block="customer-portal"])
22217
+ .cp-action-tile__desc {
21955
22218
  font-size: 0.875rem;
21956
22219
  line-height: 1.35;
21957
22220
  }
21958
22221
 
21959
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile--danger .cp-action-tile__title {
22222
+ :where(.theme-scope)
22223
+ :where([data-block="customer-portal"])
22224
+ .cp-action-tile--danger
22225
+ .cp-action-tile__title {
21960
22226
  color: rgb(var(--tb-destructive));
21961
22227
  }
21962
22228
 
@@ -21978,7 +22244,9 @@ const containerResponsiveThemeCss = `/*
21978
22244
  text-decoration: underline;
21979
22245
  }
21980
22246
 
21981
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-btn--link:hover {
22247
+ :where(.theme-scope)
22248
+ :where([data-block="customer-portal"])
22249
+ .cp-btn--link:hover {
21982
22250
  color: var(--cp-primary-hover);
21983
22251
  }
21984
22252
 
@@ -22017,34 +22285,48 @@ const containerResponsiveThemeCss = `/*
22017
22285
  margin-top: 0.75rem;
22018
22286
  }
22019
22287
 
22020
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__title {
22288
+ :where(.theme-scope)
22289
+ :where([data-block="customer-portal"])
22290
+ .cp-cancel-confirm__title {
22021
22291
  font-weight: 600;
22022
22292
  margin-bottom: 0.5rem;
22023
22293
  }
22024
22294
 
22025
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__message {
22295
+ :where(.theme-scope)
22296
+ :where([data-block="customer-portal"])
22297
+ .cp-cancel-confirm__message {
22026
22298
  margin-bottom: 0.25rem;
22027
22299
  }
22028
22300
 
22029
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__warning {
22301
+ :where(.theme-scope)
22302
+ :where([data-block="customer-portal"])
22303
+ .cp-cancel-confirm__warning {
22030
22304
  margin-bottom: 0.75rem;
22031
22305
  }
22032
22306
 
22033
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__actions {
22307
+ :where(.theme-scope)
22308
+ :where([data-block="customer-portal"])
22309
+ .cp-cancel-confirm__actions {
22034
22310
  display: flex;
22035
22311
  gap: 0.75rem;
22036
22312
  }
22037
22313
 
22038
22314
  /* Membership actions */
22039
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-membership-actions {
22315
+ :where(.theme-scope)
22316
+ :where([data-block="customer-portal"])
22317
+ .cp-membership-actions {
22040
22318
  margin-top: 0.75rem;
22041
22319
  }
22042
22320
 
22043
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-section-actions {
22321
+ :where(.theme-scope)
22322
+ :where([data-block="customer-portal"])
22323
+ .cp-section-actions {
22044
22324
  margin-top: 1rem;
22045
22325
  }
22046
22326
 
22047
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-card-subtitle--spaced {
22327
+ :where(.theme-scope)
22328
+ :where([data-block="customer-portal"])
22329
+ .cp-card-subtitle--spaced {
22048
22330
  margin-top: 0.75rem;
22049
22331
  }
22050
22332
 
@@ -22068,9 +22350,18 @@ const containerResponsiveThemeCss = `/*
22068
22350
  display: none;
22069
22351
  }
22070
22352
 
22071
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-guests,
22072
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-tickets,
22073
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-actions {
22353
+ :where(.theme-scope)
22354
+ :where([data-block="customer-portal"])
22355
+ .cp-table
22356
+ :is(th, td).cp-col-guests,
22357
+ :where(.theme-scope)
22358
+ :where([data-block="customer-portal"])
22359
+ .cp-table
22360
+ :is(th, td).cp-col-tickets,
22361
+ :where(.theme-scope)
22362
+ :where([data-block="customer-portal"])
22363
+ .cp-table
22364
+ :is(th, td).cp-col-actions {
22074
22365
  display: none;
22075
22366
  }
22076
22367
 
@@ -22079,24 +22370,34 @@ const containerResponsiveThemeCss = `/*
22079
22370
  }
22080
22371
 
22081
22372
  /* Make the cell a positioning context for the kebab */
22082
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row > td:first-child {
22373
+ :where(.theme-scope)
22374
+ :where([data-block="customer-portal"])
22375
+ .cp-row
22376
+ > td:first-child {
22083
22377
  position: relative;
22084
22378
  padding-right: 2.5rem;
22085
22379
  }
22086
22380
 
22087
22381
  /* Position kebab in top-right of the cell */
22088
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-mobile-actions {
22382
+ :where(.theme-scope)
22383
+ :where([data-block="customer-portal"])
22384
+ .cp-row-mobile-actions {
22089
22385
  position: absolute;
22090
22386
  top: 0.5rem;
22091
22387
  right: 0.5rem;
22092
22388
  margin-top: 0;
22093
22389
  }
22094
22390
 
22095
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-mobile-actions .btn-sm {
22391
+ :where(.theme-scope)
22392
+ :where([data-block="customer-portal"])
22393
+ .cp-row-mobile-actions
22394
+ .btn-sm {
22096
22395
  width: auto;
22097
22396
  }
22098
22397
 
22099
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-profile__edit {
22398
+ :where(.theme-scope)
22399
+ :where([data-block="customer-portal"])
22400
+ .cp-profile__edit {
22100
22401
  align-self: stretch;
22101
22402
  }
22102
22403
  }
@@ -22544,6 +22845,30 @@ const containerResponsiveThemeCss = `/*
22544
22845
  gap: 0.25rem;
22545
22846
  }
22546
22847
 
22848
+ /* Topic choices (visitor picks what to hear about). Same treatment as the
22849
+ form block's .fb-fieldset / .fb-inline, defined here because the newsletter
22850
+ form also renders inside contact-newsletter and the site footer. */
22851
+ :where(.theme-scope) .newsletter-topics {
22852
+ display: flex;
22853
+ flex-direction: column;
22854
+ gap: 0.5rem;
22855
+ border: none;
22856
+ padding: 0;
22857
+ margin: 0;
22858
+ min-width: 0;
22859
+ }
22860
+
22861
+ :where(.theme-scope) .newsletter-topics > legend {
22862
+ padding: 0;
22863
+ margin-bottom: 0.25rem;
22864
+ }
22865
+
22866
+ :where(.theme-scope) .newsletter-topic-choice {
22867
+ display: flex;
22868
+ align-items: center;
22869
+ gap: 0.5rem;
22870
+ }
22871
+
22547
22872
  /* Required indicator */
22548
22873
  :where(.theme-scope) .newsletter-required {
22549
22874
  color: rgb(var(--tb-primary));
@@ -22593,6 +22918,10 @@ const containerResponsiveThemeCss = `/*
22593
22918
  flex-shrink: 0;
22594
22919
  }
22595
22920
 
22921
+ :where(.theme-scope) .newsletter-inline .newsletter-topics {
22922
+ flex-basis: 100%;
22923
+ }
22924
+
22596
22925
  /* Mobile fallback for inline variant */
22597
22926
  @container rb-site (max-width: 640px) {
22598
22927
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
@@ -25199,19 +25528,21 @@ function normalizeTokenValue(value) {
25199
25528
  if (trimmedValue.startsWith("#")) return hexToRgbChannels(trimmedValue);
25200
25529
  return trimmedValue;
25201
25530
  }
25202
- function buildThemeBridgeRuntime(config) {
25531
+ function buildThemeRuntimeFromBridge(config) {
25203
25532
  validateThemeBridgeConfig(config);
25533
+ return buildBridgeCssVars(config);
25534
+ }
25535
+ function buildThemeBridgeRuntime(config) {
25536
+ const cssVars = buildThemeRuntimeFromBridge(config);
25204
25537
  const themeId = "sdk";
25205
25538
  const corners = config.corners ?? "rounded";
25206
- const shadows = config.shadows ?? "medium";
25207
- const cssVars = buildBridgeCssVars(config);
25208
25539
  const generatorTheme = buildBridgeGeneratorTheme(corners);
25209
25540
  return {
25210
25541
  themeId,
25211
25542
  cssVars,
25212
- buttonCss: shouldGenerateComponent(config.components?.buttons) ? generateButtonsCss(config, corners, shadows) : void 0,
25213
- cardCss: generateCardsCss(config, corners, shadows),
25214
- inputCss: shouldGenerateComponent(config.components?.inputs) ? generateInputsCss(corners, shadows) : void 0,
25543
+ buttonCss: shouldGenerateComponent(config.components?.buttons) ? generateButtonsCss(config, corners, config.shadows ?? "medium") : void 0,
25544
+ cardCss: generateCardsCss(config, corners, config.shadows ?? "medium"),
25545
+ inputCss: shouldGenerateComponent(config.components?.inputs) ? generateInputsCss(corners, config.shadows ?? "medium") : void 0,
25215
25546
  statusCss: generateStatusCss({
25216
25547
  themeId,
25217
25548
  theme: generatorTheme
@@ -25220,6 +25551,7 @@ function buildThemeBridgeRuntime(config) {
25220
25551
  themeId,
25221
25552
  theme: generatorTheme
25222
25553
  }),
25554
+ typographyCss: generateTypographyCss({ themeId }),
25223
25555
  blockVarsCss: generateAllBlockVarsCss({
25224
25556
  themeId,
25225
25557
  theme: generatorTheme
@@ -25478,7 +25810,7 @@ function shouldGenerateComponent(value) {
25478
25810
  function generateButtonsCss(config, corners, shadows) {
25479
25811
  let variants = getDefaultButtonVariants();
25480
25812
  const buttonConfig = config.components?.buttons;
25481
- if (buttonConfig !== void 0 && buttonConfig !== true && buttonConfig !== false && buttonConfig.variants) {
25813
+ if (typeof buttonConfig === "object" && buttonConfig.variants) {
25482
25814
  const requestedIds = new Set(buttonConfig.variants);
25483
25815
  variants = variants.filter((variant) => requestedIds.has(variant.id));
25484
25816
  }
@@ -25666,6 +25998,7 @@ function ThemeBridgeProvider({ config, children, className = "" }) {
25666
25998
  inputCss: runtime.inputCss,
25667
25999
  statusCss: runtime.statusCss,
25668
26000
  progressCss: runtime.progressCss,
26001
+ typographyCss: runtime.typographyCss,
25669
26002
  blockVarsCss: runtime.blockVarsCss,
25670
26003
  customCss: runtime.customCss,
25671
26004
  children