@riverbankcms/sdk 0.104.0 → 0.104.3

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 (129) hide show
  1. package/dist/{PreviewEditorSidebar-ywqcYjTB.mjs → PreviewEditorSidebar-CBMhU9p_.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-DApUNF6g.mjs → PreviewEditorUI-C5KEw4M8.mjs} +2 -2
  3. package/dist/{SdkPreviewModeRuntime-DmHCcIMO.mjs → SdkPreviewModeRuntime-Iq12HjL7.mjs} +1147 -180
  4. package/dist/{SiteChromeCustomizeContext-BV9GU-3C.mjs → SiteChromeCustomizeContext-Cx0NMdyv.mjs} +1818 -951
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +10 -0
  6. package/dist/_dts/api/src/bookingVerticals.d.ts +64 -1
  7. package/dist/_dts/blocks/src/primitives/layout/Grid.d.ts +12 -8
  8. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +3 -0
  9. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +11 -1
  10. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  11. package/dist/_dts/blocks/src/system/constants/events.d.ts +1 -1
  12. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +12 -0
  13. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +2 -2
  14. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +14 -0
  15. package/dist/_dts/blocks/src/system/runtime/nodes/buttonAffordance.d.ts +33 -0
  16. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +28 -0
  17. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +32 -0
  18. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -0
  19. package/dist/_dts/blocks/src/system/runtime/nodes/svg.d.ts +77 -0
  20. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +2 -0
  21. package/dist/_dts/blocks/src/system/transforms/registry/boxStyles.d.ts +3 -40
  22. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +14 -0
  23. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +11 -0
  24. package/dist/_dts/core/src/branded.d.ts +5 -0
  25. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +18 -0
  26. package/dist/_dts/editor/src/index.d.ts +3 -1
  27. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +14 -6
  28. package/dist/_dts/editor/src/primitives/rich-text/RichTextToolbar.d.ts +23 -4
  29. package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +6 -0
  30. package/dist/_dts/editor/src/primitives/rich-text/extensions/RichTextLink.d.ts +1 -0
  31. package/dist/_dts/editor/src/primitives/rich-text/paste.d.ts +10 -0
  32. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +2 -2
  33. package/dist/_dts/sdk/src/version.d.ts +1 -1
  34. package/dist/_dts/theme-core/src/ThemeScope.d.ts +1 -1
  35. package/dist/_dts/theme-core/src/buttons/affordanceIcons.d.ts +29 -0
  36. package/dist/_dts/theme-core/src/buttons/generateButtonCss.d.ts +6 -0
  37. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  38. package/dist/_dts/theme-core/src/buttons/personalities/flat-ink.d.ts +20 -0
  39. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  40. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +4 -0
  41. package/dist/_dts/theme-core/src/buttons/types.d.ts +34 -0
  42. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  43. package/dist/_dts/theme-core/src/gradients/types.d.ts +27 -3
  44. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +51 -15
  45. package/dist/_dts/theme-core/src/palette/curated/brand-led.d.ts +13 -0
  46. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +12 -0
  47. package/dist/_dts/theme-core/src/palette/historicalThemePalette.d.ts +44 -0
  48. package/dist/_dts/theme-core/src/palette/index.d.ts +1 -0
  49. package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +23 -6
  50. package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +13 -2
  51. package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +0 -9
  52. package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +17 -2
  53. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +3 -4
  54. package/dist/_dts/theme-core/src/runtime/themeCssVarNames.d.ts +1 -0
  55. package/dist/_dts/theme-core/src/schema.d.ts +108 -26
  56. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +2 -1
  57. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +50 -1
  58. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  59. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  60. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +56 -1
  61. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
  62. package/dist/_dts/theme-core/src/status/index.d.ts +0 -1
  63. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +19 -0
  64. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +9 -0
  65. package/dist/_dts/theme-core/src/surfaces/index.d.ts +2 -0
  66. package/dist/_dts/ui/src/button.d.ts +1 -1
  67. package/dist/cli/index.mjs +1567 -470
  68. package/dist/client/{DiscountCodeDisclosure-Dit2aItR.mjs → DiscountCodeDisclosure-BXM73_E5.mjs} +1 -1
  69. package/dist/client/{EventCombined.client-BnREyCjf.mjs → EventCombined.client-DT5elP7j.mjs} +4 -4
  70. package/dist/client/{EventListing.client-0uHld51x.mjs → EventListing.client-pTYGfV9C.mjs} +2 -2
  71. package/dist/client/{LeafletStaticMap-DJcvSfmj.mjs → LeafletStaticMap-dQrhlUe3.mjs} +1 -1
  72. package/dist/client/{MagicLinkForm-EAsIktfw.mjs → MagicLinkForm-u6Dul4j5.mjs} +2 -2
  73. package/dist/client/{StepIndicator-CRR17tYI.mjs → StepIndicator-nWqineJ2.mjs} +2 -2
  74. package/dist/client/{accordion-B47HIuuH.mjs → accordion-CSJcTUyH.mjs} +1 -1
  75. package/dist/client/{bookingForm-I1E-8F9P.mjs → bookingForm-C73wOuVa.mjs} +6 -6
  76. package/dist/client/bookings.mjs +137 -1
  77. package/dist/client/{buttons-BbPn8OKA.mjs → buttons-DfYyqt8C.mjs} +138 -2
  78. package/dist/client/{carousel-OlM7SyBs.mjs → carousel-fMBb0JSc.mjs} +1 -1
  79. package/dist/client/{cart-BKpG5jz6.mjs → cart-BtaCwT3S.mjs} +3 -3
  80. package/dist/client/{checkout-Dmmr6qoU.mjs → checkout-DkTwZSnh.mjs} +3 -3
  81. package/dist/client/client.mjs +2336 -544
  82. package/dist/client/{colorStyles-DuW4Fjqd.mjs → colorStyles-Wyl6JujD.mjs} +45 -4
  83. package/dist/client/{courseRegistration-CflZiqGk.mjs → courseRegistration-DnLmapJu.mjs} +7 -7
  84. package/dist/client/{eventCalendar-BvoLWcp-.mjs → eventCalendar-BvLOc9KY.mjs} +165 -5
  85. package/dist/client/{eventCombined-DsrO8t_t.mjs → eventCombined-kShgJPQr.mjs} +2 -2
  86. package/dist/client/{eventDetails-C3hxgcJm.mjs → eventDetails-C5NTM0Vo.mjs} +3 -3
  87. package/dist/client/{eventListing-C-hb237X.mjs → eventListing-B82ZdKP6.mjs} +2 -2
  88. package/dist/client/{eventRegistration-B0gyzDGi.mjs → eventRegistration-qJVFqBWo.mjs} +7 -7
  89. package/dist/client/{form-C_RUi6oJ.mjs → form-BvAcKiuu.mjs} +2 -2
  90. package/dist/client/{headerSection-IKQiD2U0.mjs → headerSection-NvAiEHAg.mjs} +3 -3
  91. package/dist/client/hooks.mjs +1023 -337
  92. package/dist/client/{locationMap-8ZBrMzRJ.mjs → locationMap-D0j52xfI.mjs} +3 -3
  93. package/dist/client/{media-CZJKL7fi.mjs → media-BCW_g2cQ.mjs} +1 -1
  94. package/dist/client/{newsletterForm-CYk3ucwj.mjs → newsletterForm-B8_i93qH.mjs} +2 -2
  95. package/dist/client/{pricing-B5GmvfIH.mjs → pricing-DIYnyHOk.mjs} +1 -1
  96. package/dist/client/{productDetail-BjS2Dqzo.mjs → productDetail-w0eAHkuQ.mjs} +3 -3
  97. package/dist/client/{productList-BOHvC8My.mjs → productList-Vsguq5Xt.mjs} +3 -3
  98. package/dist/client/{propsDecoder-WS6UEJwZ.mjs → propsDecoder-CD2pJ1WB.mjs} +37 -2
  99. package/dist/client/rendering/client.mjs +1723 -762
  100. package/dist/client/rendering/islands.mjs +19 -19
  101. package/dist/client/rendering.mjs +2312 -520
  102. package/dist/client/{shop-CON03-wN.mjs → shop-Dgxs-Q8F.mjs} +6 -6
  103. package/dist/client/{shop-commerce-DlqrFgH8.mjs → shop-commerce-DJAhsTaT.mjs} +6 -6
  104. package/dist/client/{shop-commerce-store-l74-Kne6.mjs → shop-commerce-store-CfCXltXW.mjs} +1 -1
  105. package/dist/client/{shopShared-CQheEXSg.mjs → shopShared-CmDcPXUt.mjs} +2 -2
  106. package/dist/client/{useDiscountCodeUi-v6OluyWl.mjs → useDiscountCodeUi-CirrT2bM.mjs} +1 -1
  107. package/dist/client/{useEventFilters-BqSTcNOf.mjs → useEventFilters-CNZxlCcO.mjs} +5 -5
  108. package/dist/client/{usePolling-DMfADjIF.mjs → usePolling-Baks_iBI.mjs} +2 -2
  109. package/dist/preview-next/client/runtime.mjs +3 -3
  110. package/dist/{sdk-runtime-DWb08Xaz.mjs → sdk-runtime-BfNiFeNJ.mjs} +1 -1
  111. package/dist/{separator--6yjc914.mjs → separator-BhAR_Xmf.mjs} +1 -1
  112. package/dist/server/components.mjs +2301 -531
  113. package/dist/server/config-validation.mjs +1028 -337
  114. package/dist/server/config.mjs +1028 -337
  115. package/dist/server/data.mjs +1023 -337
  116. package/dist/server/index.mjs +1 -1
  117. package/dist/server/next.mjs +2304 -534
  118. package/dist/server/page-converter.mjs +1018 -324
  119. package/dist/server/prebuild.mjs +1 -1
  120. package/dist/server/rendering/server.mjs +2286 -521
  121. package/dist/server/rendering.mjs +2301 -531
  122. package/dist/server/routing.mjs +1100 -338
  123. package/dist/server/server.mjs +1024 -338
  124. package/dist/server/theme-bridge.mjs +1240 -77
  125. package/dist/server/theme.mjs +165 -5
  126. package/dist/styles/index.css +617 -34
  127. package/package.json +1 -1
  128. package/dist/_dts/blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.d.ts +0 -2
  129. package/dist/_dts/theme-core/src/status/contextualColors.d.ts +0 -6
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { $ as PreviewRichTextEditor, $a as previewStageSchema, $c as rgbColorValue, $d as Copy, $l as createCollapsibleScope, $n as buildEventCalendarListingRender, $r as ctaCopyFragment, $s as MailIcon, $t as deleteEntrySlotBlock, $u as formatCurrencyAmount, Aa as normalizeOfferingsPreviewGroupOrder, Ac as isRotationDimensionSwap, Ad as Pencil, Ai as getCuratedSiteStyle, Al as Input, An as SITE_CHROME_VISIBLE_HEADER_SELECTOR, Ao as formatDate$3, Ar as formatCommercePrice, As as resolveIconPickerPreset, At as createRoutingHelpers, Au as clsx, Ba as eventPageSizeSchema, Bd as ImageOff, Bi as NAV_LINK_LETTER_SPACING_MAP, Bl as Dialog, Bn as isInternalResolvedLinkValue, Bo as resolveEventCta, Br as augmentManifestWithStyleGroups, Bs as ChevronLeftIcon, Bt as ManifestForm, Bu as formatBookingTime, Cc as resolveImageUrlWithContext, Cd as Sparkles, Ci as retargetCompiledBoundaryRuntimeForContentAdjacency, Cl as SelectTrigger, Cn as isSupportedLoaderEndpoint, Co as resolveOnColorForThemeToken, Cr as buildProductDetailInteractiveIslandProps, Cs as getGeneratedBlockIconStyleState, Ct as pushHistoryEntry, Cu as createContextScope, Da as buildOfferingsPreviewRenderStates, Dc as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Dd as RotateCcw, Di as resolveVisiblePromotedFieldPathsForEditorBlock, Dl as Popover, Dn as listBlockDescriptors, Do as buildGoogleMapsDirectionsUrl, Dr as buildCartDisplay, Ds as parseGeneratedIconSetId, Dt as recordsEqual, Du as cva, Ea as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Ec as setContextResolveImageUrlContext, Ed as Search, Ei as planPageDesignLayoutLookCompatibility, El as Badge, En as getBlockDefinition, Eo as featuresFromHex, Er as getShopDisplayForItems, Es as parseGeneratedIconAssetId, Et as unsafeAsLinkedContentEntryId, Eu as Button, Fa as resolveOfferingsPreviewGroups, Fc as asRecord, Fi as getComponentBorderWidthPx, Fl as Content$1, Fn as mediaTransforms, Fo as formatEventTeacherLine, Fr as deriveCommerceCheckoutState, Fs as ArrowLeftIcon, Ft as PaletteProvider, Fu as unsafeAsEditorBlockValues, G as beginAutosaveBatch, Ga as normalizeCsvString, Gc as generateBaseInteractiveCSS, Gd as FilePlay, Gi as INPUT_FONT_SIZE_MAP, Gl as DialogHeader, Gn as productDetailBlockDefinition, Go as resolveRuntimeEventPricing, Gr as faqHeadingFragment, Gs as ClockIcon$1, Gt as createStoreBackend, Gu as toBookingTimeZone, Ha as resolveEventCalendarListPageSize, Hc as generateButtonCss, Hd as File, Hi as NAV_LINK_PADDING_X_MAP, Hl as DialogContent, Hn as useImageResolveContextOptional, Ho as getEventAvailability, Hr as headingFragment, Hs as ChevronUpIcon, Hu as getBookingLocalDateKey, Ia as isSemanticSpacing, Ic as getDirectImageUrlForMediaAsset, Id as LoaderCircle, Ii as getComponentShadowVar, Il as List, In as layoutTransforms, Io as formatTime$3, Ir as parseStoredCommerceCartState, Is as ArrowRightIcon, It as usePalette, Iu as addLocalScheduleDays, J as enqueueTransaction, Ja as columnOptionSchema, Jc as parseThemeButtonVariantId, Jl as CollapsibleContent, Jn as eventListingBlockDefinition, Jo as createInteractiveIslandCodec, Jr as footerBottomTextFragment, Js as FileArchiveIcon, Jt as applyPageDesignEditorAction, Ju as publicEventPricingCurrency, K as confirmAutosaveBatch, Ka as normalizeOptionalId, Kc as generateInteractiveChildInheritanceCSS, Kd as FileHeadphone, Ki as INPUT_SPACING_MAP, Kl as DialogTitle, Kn as newsletterSignupBlockDefinition, Ko as blockBookingPaymentTermsSchema, Kr as blogFeaturedPostFragment, Ks as DownloadIcon, Kt as listContentTypes, Ku as toScheduledBookingDateTime, La as resolveSpacing, Lc as getImageUrl, Ld as Image, Li as parseBlockCustomCssRules, Ll as Root2$1, Ln as uiTransforms, Lo as getCardOrientation, Lr as productItemKey, Ls as CalendarIcon$1, Lt as recoveryConflictCopy, Lu as formatBookingDate, Ma as resolveOfferingsPreviewCoursePath, Mc as formatAspectRatioToken, Mi as isThemeV2NormalEditorRawStyleFieldName, Ml as TabsContent, Mn as planSiteOverlayHeaderClearance, Mo as formatEventDateParts, Mr as EMPTY_COMMERCE_CART_STATE, Ms as getSemanticIconComponent, Mu as createEditorRemoveBlockCommand, Na as resolveOfferingsPreviewGroupCta, Nc as parseAspectRatioValue, Ni as isThemeV2NormalEditorRawStylePath, Nl as TabsList, Nn as visibleHeaderClearancePx, No as formatEventPrice, Nr as buildPassCartItem, Ns as isSemanticIconId, Nu as createEditorReorderBlocksCommand, Oa as inferLegacyOfferingsPreviewGroupOrder, Oc as resolveMediaSlotContract, Ol as PopoverContent, On as siteFooterManifest, Oo as normalizeLocationMapProps, Or as buildProductCardDisplay, Os as parseSiteIconStyleGuideVersionId, Ou as useComposedRefs, Pa as resolveOfferingsPreviewGroupOrderEntries, Pc as resolveMediaTransformForAspect, Pd as Minus, Pi as pageDesignEditorBackgroundOverrideOwner, Pl as TabsTrigger, Pn as contentTransforms, Po as formatEventPriceDisplay, Pr as buildProductCartItem, Ps as ArrowDownIcon, Pu as unsafeAsEditorBlockId, Q as resolvePreviewSidebarTab, Qa as filterAutoShowSchema, Qc as mergeStyles, Qd as CreditCard, Ql as Trigger, Qn as buildEventCalendarListingDisplay, Qo as defineProgressiveBlockRuntime, Qr as testimonialsHeadingFragment, Qs as InfoIcon, Qt as deleteBlock, Qu as publicEventTicketTypes, Ra as buildEventRuntimeFilters, Rc as getAtPath, Rd as ImageUp, Ri as parseCustomCssRules, Rl as Trigger$1, Rn as formattingTransforms, Ro as getContainerClass, Rr as reduceCommerceCart, Rs as CheckIcon$1, Rt as unfinishedBlockCopy, Ru as formatBookingDateTime, Sa as ctaButton, Sc as renderVideo, Sd as Star, Si as compileEditorModelRuntime, Sl as SelectItem, Sn as useUniqueId, So as isCssColorLiteral, Sr as buildCheckoutInteractiveIslandProps, Ss as getBlockIconSemanticId, St as createHistoryState, Su as useControllableState, Tc as resolveMediaStorageUrl, Td as Settings, Ti as normalEditorCuratedPromotedFieldPaths, Tl as Label, Tn as GRADIENT_PRESETS, To as getTextColorForBackground, Tr as buildShopInteractiveIslandProps, Ts as resolveBlockIconRenderValue, Tt as undoHistory, Tu as Primitive, Ua as resolveEventListPaginationAction, Uc as generateEffectsCSS, Ud as FileText, Ui as NAV_LINK_TEXT_SIZE_MAP, Ul as DialogDescription, Un as shopBlockDefinition, Uo as getLocalDateKey, Ur as cardFragment, Us as CircleMinusIcon, Ut as FormRenderer, Uu as parseBookingLocalDate, Va as getEventRuntimeFiltersKey, Vd as GripVertical, Vi as NAV_LINK_PADDING_MAP, Vl as DialogClose, Vn as ImageResolveContextProvider, Vo as resolveEventLinkProps, Vr as richTextFragment, Vs as ChevronRightIcon, Vt as createManifestFormAdapter, Vu as formatLocalScheduleDate, Wa as normalizeCsvIds, Wc as generateShadowValue$1, Wd as FileSpreadsheet, Wi as FONT_WEIGHT_MAP, Wl as DialogFooter, Wn as productListBlockDefinition, Wo as getLocalMinuteOfDay, Wr as faqAccordionFragment, Ws as CirclePlusIcon, Wt as evaluateVisibility, Wu as resolveBookingTimeZoneId, X as rejectAutosaveBatch, Xa as eventCalendarDefaultViewSchema, Xc as backgroundColorStyle, Xd as EllipsisVertical, Xl as Content, Xn as eventCalendarBlockDefinition, Xo as createZodCodec, Xr as formCopyFragment, Xs as FileSpreadsheetIcon, Xt as createBlock, Xu as publicEventPricingType, Y as idleEditorTransactionQueueState, Ya as eventButtonVariantSchema, Yc as themeButtonClassName, Yd as EyeOff, Yn as buildEventListingInteractiveIslandProps, Yo as defineInteractiveIslandMetaKeys, Yr as formEmbedFragment, Ys as FileAudioIcon, Yt as getPageDesignEditorState, Yu as publicEventPricingMode, Za as eventLayoutSchema, Zc as borderColorStyle, Zd as Crop, Zl as Root, Zn as buildEventCalendarInteractiveIslandProps, Zo as defineClientOwnedBlockRuntime, Zr as testimonialsCarouselFragment, Zs as FileTextIcon, Zt as createEntrySlotBlock, Zu as publicEventScalarPrice, _c as MediaPlaceholder, _f as __toESM, _i as mergeHeaderNavTypographyPreference, _l as TooltipProvider, _n as useSensors, _o as generateCardCss, _r as courseRegistrationBlockDefinition, _s as resolveFeatureCardGeneratedIconSizePx, _t as useEditorUiStore, _u as __spreadArray, aa as sectionTransitionFamilyForBoundaryOptionId, ac as ShoppingCartIcon, ad as unsafeAsAppointmentServiceId, af as ChevronsUpDown, ai as PUBLIC_FILE_FIELD_KINDS, al as isNonEmptyValue, an as DEFAULT_LAUNCH_READINESS_INPUT, ao as bindingSchema, ar as findEventByOccurrenceId, as as assertNever$6, at as getRichTextImagePositionFromTarget, au as DropdownMenu, ba as createTransformRegistry, bc as getCurrentResolveImageUrlContext, bd as Ticket, bi as PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, bl as Select, bn as useCombinedRefs, bo as normalizeBoxStylesCardVariant, br as cartBlockDefinition, bs as toFeatureCardIconSuggestionInputs, bt as canRedoHistory, bu as useDirection, ca as backgroundAppearanceColorTokenNames, cc as createRichTextDocFromMarkdown, cd as unsafeAsMediaAssetId, cf as ChevronLeft, ci as MQ_MD_DOWN, cl as useSdkConfig, cn as DndContext, co as eventSurfaceScopeValues, cr as resolveEventRequiresPayment, cs as ACCORDION_TRIGGER_FONT_SCALE, ct as EditorProvider, da as parseBackgroundAppearanceColorToken, dc as isRecord$20, dd as unsafeAsPositiveSeconds, df as Box, di as MQ_TABLET_ONLY, dl as mapOptionValueForSelect, dn as closestCenter, do as normalizeEventScheduleScope, dr as getStepNumber$1, ds as ICON_SIZE_PX, dt as useUISelector, du as __assign, ec as MapPinIcon$1, ed as assertNever$5, ef as Clock3, ei as heroCtaRowFragment, el as textColorStyle, eo as weekStartSchema, er as formBlockDefinition, es as composeHeaderSectionWrapperClassName, et as PreviewInlineTextEditor, eu as Card, fa as defaultThemeTokens, fc as coerceInlineTextWithFallback, fd as err$2, ff as ArrowUp, fi as BACKGROUND_POSITION_PRESET_VALUES, fl as unmapValueFromSelect, fn as getClientRect, fo as normalizeEventStaffMemberId, fr as getWizardStepsForContext$1, fs as PUBLIC_DOWNLOAD_MEDIA_TYPES, ft as EditableBlockProvider, fu as __awaiter, g as PreviewDesignCoordinatorProvider, gc as ImagePresets, gd as Upload, gf as __exportAll, gi as resolveBackgroundColorValue, gl as TooltipContent, gn as useSensor, go as publicEventSchema, gr as buildGiftingInteractiveIslandProps, gs as getFeatureCardIconCompletion, gu as __rest, hc as parseInlineTextFromUnknown, hd as X, hf as __commonJSMin, hi as resolveSectionForegroundStyles, hl as Tooltip, hn as useDroppable, ho as normalizeEventVenueId, hr as giftingBlockDefinition, hs as createFeatureCardIconKey, ht as useEntryEditorController, hu as __read, i as usePreviewDesignHistoryOrder, ia as sectionTransitionFamilies, ic as PlusIcon, id as unsafeAsAppointmentResourceId, if as CircleAlert, ii as defineFragment, il as isHeaderField, in as decodePublicProductCategorySelectorQuery, io as when, ir as toRegistrationEvents, is as asDesignBlockId, it as RichTextEditorSurface, ja as normalizeOfferingsPreviewItemLimit, jc as normalizeRightAngle, ji as surfaceResolutionContextFromTheme, jl as Tabs, jn as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, jo as formatEventCompactDateRail, jr as formatInterval, js as SEMANTIC_ICON_DEFINITIONS, jt as createSnapshotFromPageRecord, ju as createEditorInsertBlockCommand, ka as isOfferingsPreviewSourceKey, kc as attachRenderableMediaAssetFields, kd as Plus, ki as designRuntimeRulesForTheme, kl as PopoverTrigger, kn as siteHeaderManifest, ko as toLocationMapHydrationProps, kr as buildProductDetailDisplay, ks as isIconPickerPreset, kt as useDebouncedLatestSave, ku as cn$1, la as backgroundAppearanceQuickColorTokenNames, lc as unwrapRichTextRoot, ld as unsafeAsPassId, lf as ChevronDown, li as MQ_SM_DOWN, ll as hasEmptyOption, ln as KeyboardCode, lo as normalizeEventBlockKind, lr as resolveRegistrationTarget, ls as ACCORDION_TRIGGER_LETTER_SPACING, lt as useEditor, lu as DropdownMenuSeparator, mc as isInlineTextEmpty, md as lucide_react_exports, mf as Archive, mi as boxStylesTransforms, ml as useField, mn as useDraggable, mo as normalizeEventSurfaceScope, mr as resolveEventRegistrationScopedEvents, ms as FEATURE_CARD_ICON_TREATMENTS, mu as __generator, n as useSiteChromeCustomizeOptional, na as boundaryRuntimeMetricsForTransition, nc as PhoneIcon, nd as parseMediaAssetId, nf as CircleMinus, ni as heroCopyFragment, nl as getFieldIntent, nn as reorderBlocks, no as eventCalendarListLayoutOptions, nr as eventRegistrationBlockDefinition, ns as splitPositioningClasses, nt as useRichTextEditor, nu as CardHeader, oa as sectionTransitionVariantForBoundaryOptionId, oc as UploadIcon, od as unsafeAsCustomerPassId, of as ChevronUp, oi as siteOptionSources, ol as useBlockContext, on as deriveLaunchReadiness, oo as eventBlockKindValues, or as findPreSelectedEvent, os as ACCORDION_OPEN_ACCENT_THICKNESS, ot as insertOrReplaceRichTextImage, ou as DropdownMenuContent, pc as inlineTextToPlainText, pd as ok$3, pf as ArrowDown, pi as getAnchorClasses, pl as FieldFrame, pn as useDndContext, po as normalizeEventSurfacePresetsCsv, pr as normalizeEventRegistrationPageSurfaceSubject, ps as mediaSchema, pt as EntryControllerProvider, pu as __extends, q as deriveTransactionCapabilities, qa as calendarTabViewsSchema, qc as TokenResolver, qd as FileArchive, qi as LABEL_FONT_SIZE_MAP, ql as Collapsible, qn as buildNewsletterFormInteractiveIslandProps, qo as buildInteractiveIslandProps, qr as singleButtonFragment, qs as ExternalLinkIcon, qt as toRoutableLinkPayload, qu as formatBookingPriceDisplay, r as PreviewDesignHistoryOrderProvider, ra as defaultSectionTransitionVariantForFamily, rc as PlayIcon, rd as parseSiteId, rf as CircleCheck, ri as bodyCopyFragment, rl as getModalConfig, rn as reorderEntrySlotBlocks, ro as el, rr as buildEventRegistrationInteractiveIslandProps, rs as planSiteChromePlacement, rt as EMPTY_DOC, ru as CardTitle, sa as BACKGROUND_BODY_TEXT_MIN_CONTRAST_RATIO, sc as XIcon, sd as unsafeAsFormId, sf as ChevronRight, si as MQ_LG_UP, sl as SdkConfigProvider, sn as AMBIENT_BACKGROUND_ROLES$1, so as eventScheduleScopeValues, sr as resolveDiscountContext, ss as ACCORDION_SPACING_MAP, st as InlineTextEditor, su as DropdownMenuItem, t as SiteChromeCustomizeProvider, tc as MinusIcon, td as expectParsedBrandedId, tf as CirclePlus, ti as ctaRowFragment, tl as useBackendWatch, tn as mutateBlockContent, to as eventCalendarListLayoutCompatibleDisplayModeValues, tr as buildFormInteractiveIslandProps, ts as markEditableSurfaceForwarding, tt as PreviewTextEditor, tu as CardContent, ua as foregroundTokenForBackgroundAppearanceColorToken, uc as isObjectRecord, ud as unsafeAsPositiveByteCount$1, uf as Check, ui as MQ_SM_UP, ul as mapCurrentValueForSelect, un as PointerSensor, uo as normalizeEventCategoryIdsCsv, ur as WIZARD_STEPS$1, us as ICON_CONFIG, uu as DropdownMenuTrigger, v as PreviewThemeOverlayProvider, va as expandPalette, vc as buildResolveImageUrlContext, vi as readHeaderNavFontSizePreference, vl as TooltipTrigger, vn as CSS, vo as statusMutedColorDeclaration, vr as buildCourseRegistrationInteractiveIslandProps, vs as shouldReserveFeatureCardIconZone, vt as useEditorUiStoreInstance, vu as __spreadArrays, wc as resolveMediaNodeResponsiveImage, wi as retargetCompiledRuntimeFieldsForContentAdjacency, wl as SelectValue, wn as gradientToCss, wo as resolveTokenOrCssColorValue, wr as buildProductListInteractiveIslandProps, ws as parseBlockIconValue, wt as redoHistory, wu as composeEventHandlers, xa as runTransforms, xc as renderAudio, xi as applyCompiledRuntimeFieldsToContent, xl as SelectContent, xn as useIsomorphicLayoutEffect, xo as normalizeCardVariantRole, xr as buildCartInteractiveIslandProps, xs as buildGeneratedBlockIconRenderAssetLookupFromUnknown, xt as canUndoHistory, xu as createCollection, y as usePreviewThemeOverlay, ya as generateCssVars, yc as computeMediaTransformStyle, yd as Trash2, yi as formatSiteChromeBackgroundTokenLabel, yl as Textarea, yn as isKeyboardEvent, yo as generateShadowValue, yr as checkoutBlockDefinition, ys as suggestSemanticIconForFeatureCard, yt as useOptionalEditorUiStoreInstance, yu as useId$1, za as eventListPaginationActionSchema, zc as siblingPath$1, zd as ImagePlus, zi as NAV_LINK_BORDER_RADIUS_MAP, zl as ScrollableDialogContent, zn as createManifestValidator, zo as groupEventsByDate, zr as augmentManifest, zs as ChevronDownIcon, zt as validateBlockManifestIssues, zu as formatBookingInstant } from "./SiteChromeCustomizeContext-BV9GU-3C.mjs";
2
+ import { $ as PreviewRichTextEditor, $a as previewStageSchema, $c as cssVarValue, $l as CollapsibleContent, $n as buildEventCalendarListingRender, $r as ctaCopyFragment, $s as ClockIcon$1, $t as deleteEntrySlotBlock, $u as publicEventPricingCurrency, Aa as normalizeOfferingsPreviewGroupOrder, Ac as isRotationDimensionSwap, Ad as Settings, Ai as getCuratedSiteStyle, Al as Label, An as SITE_CHROME_VISIBLE_HEADER_SELECTOR, Ao as formatEventCompactDateRail, Ar as formatCommercePrice, As as unwrapRichTextRoot, At as createRoutingHelpers, Au as Primitive, Ba as eventPageSizeSchema, Bi as NAV_LINK_LETTER_SPACING_MAP, Bl as Content$1, Bn as isInternalResolvedLinkValue, Bo as resolveEventLinkProps, Br as augmentManifestWithStyleGroups, Bs as getSemanticIconComponent, Bt as ManifestForm, Bu as unsafeAsEditorBlockValues, Cc as resolveImageUrlWithContext, Ci as retargetCompiledBoundaryRuntimeForContentAdjacency, Cl as TooltipTrigger, Cn as isSupportedLoaderEndpoint, Co as resolveTokenOrCssColorValue, Cr as buildProductDetailInteractiveIslandProps, Cs as getGeneratedBlockIconStyleState, Ct as pushHistoryEntry, Cu as __spreadArrays, Da as buildOfferingsPreviewRenderStates, Dc as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Dd as Star, Di as resolveVisiblePromotedFieldPathsForEditorBlock, Dl as SelectItem, Dn as listBlockDescriptors, Do as normalizeLocationMapProps, Dr as buildCartDisplay, Ds as parseGeneratedIconSetId, Dt as recordsEqual, Du as useControllableState, Ea as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Ec as setContextResolveImageUrlContext, Ei as planPageDesignLayoutLookCompatibility, El as SelectContent, En as getBlockDefinition, Eo as buildGoogleMapsDirectionsUrl, Er as getShopDisplayForItems, Es as parseGeneratedIconAssetId, Et as unsafeAsLinkedContentEntryId, Eu as createCollection, Fa as resolveOfferingsPreviewGroups, Fc as asRecord, Fd as Pencil, Fi as getComponentBorderWidthPx, Fl as Input, Fn as mediaTransforms, Fo as formatTime$3, Fr as deriveCommerceCheckoutState, Fs as isInlineTextEmpty, Ft as PaletteProvider, Fu as clsx, G as beginAutosaveBatch, Ga as normalizeCsvString, Gc as generateShadowValue$1, Gd as ImageOff, Gi as INPUT_FONT_SIZE_MAP, Gl as Dialog, Gn as productDetailBlockDefinition, Go as resolveRuntimeEventPricing, Gr as faqHeadingFragment, Gs as CalendarIcon$1, Gt as createStoreBackend, Gu as formatBookingTime, Ha as resolveEventCalendarListPageSize, Hc as AFFORDANCE_SUPPRESS_CLASS, Hd as Image, Hi as NAV_LINK_PADDING_X_MAP, Hl as Root2$1, Hn as useImageResolveContextOptional, Ho as getEventAvailabilityStatus, Hr as headingFragment, Hs as ArrowDownIcon, Hu as formatBookingDate, Ia as isSemanticSpacing, Ic as getDirectImageUrlForMediaAsset, Ii as getComponentShadowVar, Il as Tabs, In as layoutTransforms, Io as getCardOrientation, Ir as parseStoredCommerceCartState, Is as parseInlineTextFromUnknown, It as usePalette, Iu as createEditorInsertBlockCommand, J as enqueueTransaction, Ja as columnOptionSchema, Jc as TokenResolver, Jd as FileText, Jl as DialogDescription, Jn as eventListingBlockDefinition, Jo as createInteractiveIslandCodec, Jr as footerBottomTextFragment, Js as ChevronLeftIcon, Jt as applyPageDesignEditorAction, Ju as parseBookingLocalDate, K as confirmAutosaveBatch, Ka as normalizeOptionalId, Kc as generateBaseInteractiveCSS, Kd as GripVertical, Ki as INPUT_SPACING_MAP, Kl as DialogClose, Kn as newsletterSignupBlockDefinition, Ko as blockBookingPaymentTermsSchema, Kr as blogFeaturedPostFragment, Ks as CheckIcon$1, Kt as listContentTypes, Ku as formatLocalScheduleDate, La as resolveSpacing, Lc as getImageUrl, Li as parseBlockCustomCssRules, Ll as TabsContent, Ln as uiTransforms, Lo as getContainerClass, Lr as productItemKey, Ls as isIconPickerPreset, Lt as recoveryConflictCopy, Lu as createEditorRemoveBlockCommand, Ma as resolveOfferingsPreviewCoursePath, Mc as formatAspectRatioToken, Md as RotateCcw, Mi as isThemeV2NormalEditorRawStyleFieldName, Ml as Popover, Mn as planSiteOverlayHeaderClearance, Mo as formatEventPrice, Mr as EMPTY_COMMERCE_CART_STATE, Ms as isRecord$20, Mu as cva, Na as resolveOfferingsPreviewGroupCta, Nc as parseAspectRatioValue, Ni as isThemeV2NormalEditorRawStylePath, Nl as PopoverContent, Nn as visibleHeaderClearancePx, No as formatEventPriceDisplay, Nr as buildPassCartItem, Ns as coerceInlineTextWithFallback, Nu as useComposedRefs, Oa as inferLegacyOfferingsPreviewGroupOrder, Oc as resolveMediaSlotContract, Od as Sparkles, Ol as SelectTrigger, On as siteFooterManifest, Oo as toLocationMapHydrationProps, Or as buildProductCardDisplay, Os as parseSiteIconStyleGuideVersionId, Ou as createContextScope, Pa as resolveOfferingsPreviewGroupOrderEntries, Pc as resolveMediaTransformForAspect, Pd as Plus, Pi as pageDesignEditorBackgroundOverrideOwner, Pl as PopoverTrigger, Pn as contentTransforms, Po as formatEventTeacherLine, Pr as buildProductCartItem, Ps as inlineTextToPlainText, Pu as cn$1, Q as resolvePreviewSidebarTab, Qa as filterAutoShowSchema, Qc as borderColorStyle, Qd as FileArchive, Ql as Collapsible, Qn as buildEventCalendarListingDisplay, Qo as defineProgressiveBlockRuntime, Qr as testimonialsHeadingFragment, Qs as CirclePlusIcon, Qt as deleteBlock, Qu as formatBookingPriceDisplay, Ra as buildEventRuntimeFilters, Rc as getAtPath, Ri as parseCustomCssRules, Rl as TabsList, Rn as formattingTransforms, Ro as groupEventsByDate, Rr as reduceCommerceCart, Rs as resolveIconPickerPreset, Rt as unfinishedBlockCopy, Ru as createEditorReorderBlocksCommand, Sa as ctaButton, Sc as renderVideo, Sf as __toESM, Si as compileEditorModelRuntime, Sl as TooltipProvider, Sn as useUniqueId, So as resolveOnColorForThemeToken, Sr as buildCheckoutInteractiveIslandProps, Ss as getBlockIconSemanticId, St as createHistoryState, Su as __spreadArray, Tc as resolveMediaStorageUrl, Td as Ticket, Ti as normalEditorCuratedPromotedFieldPaths, Tl as Select, Tn as GRADIENT_PRESETS, To as featuresFromHex, Tr as buildShopInteractiveIslandProps, Ts as resolveBlockIconRenderValue, Tt as undoHistory, Tu as useDirection, Ua as resolveEventListPaginationAction, Uc as generateButtonCss, Ud as ImageUp, Ui as NAV_LINK_TEXT_SIZE_MAP, Ul as Trigger$1, Un as shopBlockDefinition, Uo as getLocalDateKey, Ur as cardFragment, Us as ArrowLeftIcon, Ut as FormRenderer, Uu as formatBookingDateTime, Va as getEventRuntimeFiltersKey, Vd as LoaderCircle, Vi as NAV_LINK_PADDING_MAP, Vl as List, Vn as ImageResolveContextProvider, Vo as getEventAvailability, Vr as richTextFragment, Vs as isSemanticIconId, Vt as createManifestFormAdapter, Vu as addLocalScheduleDays, Wa as normalizeCsvIds, Wc as generateEffectsCSS, Wd as ImagePlus, Wi as FONT_WEIGHT_MAP, Wl as ScrollableDialogContent, Wn as productListBlockDefinition, Wo as getLocalMinuteOfDay, Wr as faqAccordionFragment, Ws as ArrowRightIcon, Wt as evaluateVisibility, Wu as formatBookingInstant, X as rejectAutosaveBatch, Xa as eventCalendarDefaultViewSchema, Xc as themeButtonClassName, Xd as FilePlay, Xl as DialogHeader, Xn as eventCalendarBlockDefinition, Xo as createZodCodec, Xr as formCopyFragment, Xs as ChevronUpIcon, Xt as createBlock, Xu as toBookingTimeZone, Y as idleEditorTransactionQueueState, Ya as eventButtonVariantSchema, Yc as parseThemeButtonVariantId, Yd as FileSpreadsheet, Yl as DialogFooter, Yn as buildEventListingInteractiveIslandProps, Yo as defineInteractiveIslandMetaKeys, Yr as formEmbedFragment, Ys as ChevronRightIcon, Yt as getPageDesignEditorState, Yu as resolveBookingTimeZoneId, Za as eventLayoutSchema, Zc as backgroundColorStyle, Zd as FileHeadphone, Zl as DialogTitle, Zn as buildEventCalendarInteractiveIslandProps, Zo as defineClientOwnedBlockRuntime, Zr as testimonialsCarouselFragment, Zs as CircleMinusIcon, Zt as createEntrySlotBlock, Zu as toScheduledBookingDateTime, _c as MediaPlaceholder, _d as err$2, _f as ArrowUp, _i as mergeHeaderNavTypographyPreference, _l as unmapValueFromSelect, _n as useSensors, _o as generateCardCss, _r as courseRegistrationBlockDefinition, _s as resolveFeatureCardGeneratedIconSizePx, _t as useEditorUiStore, _u as __awaiter, aa as sectionTransitionFamilyForBoundaryOptionId, ac as FileTextIcon, ad as assertNever$5, af as Clock3, ai as PUBLIC_FILE_FIELD_KINDS, al as surfaceForegroundValue, an as DEFAULT_LAUNCH_READINESS_INPUT, ao as bindingSchema, ar as findEventByOccurrenceId, as as assertNever$6, at as getRichTextImagePositionFromTarget, au as Card, ba as createTransformRegistry, bc as getCurrentResolveImageUrlContext, bd as X, bf as __commonJSMin, bi as PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, bl as Tooltip, bn as useCombinedRefs, bo as normalizeCardVariantRole, br as cartBlockDefinition, bs as toFeatureCardIconSuggestionInputs, bt as canRedoHistory, bu as __read, ca as backgroundAppearanceColorTokenNames, cc as MapPinIcon$1, cd as parseSiteId, cf as CircleCheck, ci as MQ_MD_DOWN, cl as getModalConfig, cn as DndContext, co as eventSurfaceScopeValues, cr as resolveEventRequiresPayment, cs as ACCORDION_TRIGGER_FONT_SCALE, ct as EditorProvider, cu as CardTitle, da as parseBackgroundAppearanceColorToken, dc as PlayIcon, dd as unsafeAsCustomerPassId, df as ChevronUp, di as MQ_TABLET_ONLY, dl as useBlockContext, dn as closestCenter, do as normalizeEventScheduleScope, dr as getStepNumber$1, ds as ICON_SIZE_PX, dt as useUISelector, du as DropdownMenuContent, ec as DownloadIcon, ed as publicEventPricingMode, ef as EyeOff, ei as heroCtaRowFragment, el as mergeStyles, eo as weekStartSchema, er as formBlockDefinition, es as composeHeaderSectionWrapperClassName, et as PreviewInlineTextEditor, fa as defaultThemeTokens, fc as PlusIcon, fd as unsafeAsFormId, ff as ChevronRight, fi as BACKGROUND_POSITION_PRESET_VALUES, fl as SdkConfigProvider, fn as getClientRect, fo as normalizeEventStaffMemberId, fr as getWizardStepsForContext$1, fs as PUBLIC_DOWNLOAD_MEDIA_TYPES, ft as EditableBlockProvider, fu as DropdownMenuItem, g as PreviewDesignCoordinatorProvider, gc as ImagePresets, gd as unsafeAsPositiveSeconds, gf as Box, gi as resolveBackgroundColorValue, gl as mapOptionValueForSelect, gn as useSensor, go as publicEventSchema, gr as buildGiftingInteractiveIslandProps, gs as getFeatureCardIconCompletion, gu as __assign, hc as XIcon, hd as unsafeAsPositiveByteCount$1, hf as Check, hi as resolveSurfaceForegroundStyles, hl as mapCurrentValueForSelect, hn as useDroppable, ho as normalizeEventVenueId, hr as giftingBlockDefinition, hs as createFeatureCardIconKey, ht as useEntryEditorController, hu as DropdownMenuTrigger, i as usePreviewDesignHistoryOrder, ia as sectionTransitionFamilies, ic as FileSpreadsheetIcon, id as formatCurrencyAmount, if as Copy, ii as defineFragment, il as surfaceForegroundDeclarations, in as decodePublicProductCategorySelectorQuery, io as when, ir as toRegistrationEvents, is as asDesignBlockId, it as RichTextEditorSurface, iu as createCollapsibleScope, ja as normalizeOfferingsPreviewItemLimit, jc as normalizeRightAngle, jd as Search, ji as surfaceResolutionContextFromTheme, jl as Badge, jn as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, jo as formatEventDateParts, jr as formatInterval, js as isObjectRecord, jt as createSnapshotFromPageRecord, ju as Button, ka as isOfferingsPreviewSourceKey, kc as attachRenderableMediaAssetFields, ki as designRuntimeRulesForTheme, kl as SelectValue, kn as siteHeaderManifest, ko as formatDate$3, kr as buildProductDetailDisplay, ks as createRichTextDocFromMarkdown, kt as useDebouncedLatestSave, ku as composeEventHandlers, la as backgroundAppearanceQuickColorTokenNames, lc as MinusIcon, ld as unsafeAsAppointmentResourceId, lf as CircleAlert, li as MQ_SM_DOWN, ll as isHeaderField, ln as KeyboardCode, lo as normalizeEventBlockKind, lr as resolveRegistrationTarget, ls as ACCORDION_TRIGGER_LETTER_SPACING, lt as useEditor, mc as UploadIcon, md as unsafeAsPassId, mf as ChevronDown, mi as boxStylesTransforms, ml as hasEmptyOption, mn as useDraggable, mo as normalizeEventSurfaceScope, mr as resolveEventRegistrationScopedEvents, ms as FEATURE_CARD_ICON_TREATMENTS, mu as DropdownMenuSeparator, n as useSiteChromeCustomizeOptional, na as boundaryRuntimeMetricsForTransition, nc as FileArchiveIcon, nd as publicEventScalarPrice, nf as Crop, ni as heroCopyFragment, nl as textColorStyle, nn as reorderBlocks, no as eventCalendarListLayoutOptions, nr as eventRegistrationBlockDefinition, ns as splitPositioningClasses, nt as useRichTextEditor, nu as Root, oa as sectionTransitionVariantForBoundaryOptionId, oc as InfoIcon, od as expectParsedBrandedId, of as CirclePlus, oi as siteOptionSources, ol as useBackendWatch, on as deriveLaunchReadiness, oo as eventBlockKindValues, or as findPreSelectedEvent, os as ACCORDION_OPEN_ACCENT_THICKNESS, ot as insertOrReplaceRichTextImage, ou as CardContent, pc as ShoppingCartIcon, pd as unsafeAsMediaAssetId, pf as ChevronLeft, pi as getAnchorClasses, pl as useSdkConfig, pn as useDndContext, po as normalizeEventSurfacePresetsCsv, pr as normalizeEventRegistrationPageSurfaceSubject, ps as mediaSchema, pt as EntryControllerProvider, q as deriveTransactionCapabilities, qa as calendarTabViewsSchema, qc as generateInteractiveChildInheritanceCSS, qd as File, qi as LABEL_FONT_SIZE_MAP, ql as DialogContent, qn as buildNewsletterFormInteractiveIslandProps, qo as buildInteractiveIslandProps, qr as singleButtonFragment, qs as ChevronDownIcon, qt as toRoutableLinkPayload, qu as getBookingLocalDateKey, r as PreviewDesignHistoryOrderProvider, ra as defaultSectionTransitionVariantForFamily, rc as FileAudioIcon, rd as publicEventTicketTypes, rf as CreditCard, ri as bodyCopyFragment, rl as DEFAULT_SURFACE_TEXT_COLOR, rn as reorderEntrySlotBlocks, ro as el, rr as buildEventRegistrationInteractiveIslandProps, rs as planSiteChromePlacement, rt as EMPTY_DOC, ru as Trigger, sa as BACKGROUND_BODY_TEXT_MIN_CONTRAST_RATIO, sc as MailIcon, sd as parseMediaAssetId, sf as CircleMinus, si as MQ_LG_UP, sl as getFieldIntent, sn as AMBIENT_BACKGROUND_ROLES$1, so as eventScheduleScopeValues, sr as resolveDiscountContext, ss as ACCORDION_SPACING_MAP, st as InlineTextEditor, su as CardHeader, t as SiteChromeCustomizeProvider, tc as ExternalLinkIcon, td as publicEventPricingType, tf as EllipsisVertical, ti as ctaRowFragment, tl as rgbColorValue, tn as mutateBlockContent, to as eventCalendarListLayoutCompatibleDisplayModeValues, tr as buildFormInteractiveIslandProps, ts as markEditableSurfaceForwarding, tt as PreviewTextEditor, tu as Content, ua as foregroundTokenForBackgroundAppearanceColorToken, uc as PhoneIcon, ud as unsafeAsAppointmentServiceId, uf as ChevronsUpDown, ui as MQ_SM_UP, ul as isNonEmptyValue, un as PointerSensor, uo as normalizeEventCategoryIdsCsv, ur as WIZARD_STEPS$1, us as ICON_CONFIG, uu as DropdownMenu, v as PreviewThemeOverlayProvider, va as expandPalette, vc as buildResolveImageUrlContext, vd as ok$3, vf as ArrowDown, vi as readHeaderNavFontSizePreference, vl as FieldFrame, vn as CSS, vo as generateShadowValue, vr as buildCourseRegistrationInteractiveIslandProps, vs as shouldReserveFeatureCardIconZone, vt as useEditorUiStoreInstance, vu as __extends, wc as resolveMediaNodeResponsiveImage, wd as Trash2, wi as retargetCompiledRuntimeFieldsForContentAdjacency, wl as Textarea, wn as gradientToCss, wo as getTextColorForBackground, wr as buildProductListInteractiveIslandProps, ws as parseBlockIconValue, wt as redoHistory, wu as useId$1, xa as runTransforms, xc as renderAudio, xd as Upload, xf as __exportAll, xi as applyCompiledRuntimeFieldsToContent, xl as TooltipContent, xn as useIsomorphicLayoutEffect, xo as isCssColorLiteral, xr as buildCartInteractiveIslandProps, xs as buildGeneratedBlockIconRenderAssetLookupFromUnknown, xt as canUndoHistory, xu as __rest, y as usePreviewThemeOverlay, ya as generateCssVars, yc as computeMediaTransformStyle, yd as lucide_react_exports, yf as Archive, yi as formatSiteChromeBackgroundTokenLabel, yl as useField, yn as isKeyboardEvent, yo as normalizeBoxStylesCardVariant, yr as checkoutBlockDefinition, ys as suggestSemanticIconForFeatureCard, yt as useOptionalEditorUiStoreInstance, yu as __generator, za as eventListPaginationActionSchema, zc as siblingPath$1, zd as Minus, zi as NAV_LINK_BORDER_RADIUS_MAP, zl as TabsTrigger, zn as createManifestValidator, zo as resolveEventCta, zr as augmentManifest, zs as SEMANTIC_ICON_DEFINITIONS, zt as validateBlockManifestIssues, zu as unsafeAsEditorBlockId } from "./SiteChromeCustomizeContext-Cx0NMdyv.mjs";
3
3
  import { i as useOptionalPreviewLayout, t as PreviewQueryProvider } from "./PreviewQueryProvider-CStABBUh.mjs";
4
4
  import { _ as API_ENDPOINTS, a as usePreviewToken, c as createBearerAPIClient, d as unwrapResponse, g as resolveSurfaceDocumentAttributes, h as SURFACE_IDS, i as usePreviewAuthFetch, l as ApiEnvelopeError, m as SURFACE_DOCUMENT_DATA_ATTRIBUTE, n as markPreviewAuthExpired, o as isPreviewRuntimeSessionEditable, r as usePreviewAuth, s as ApiRequestError, t as initPreviewAuth, u as extractApiEnvelopeErrorDetails } from "./previewAuthStore-CfquDtTh.mjs";
5
5
  import * as React$1 from "react";
@@ -2033,21 +2033,53 @@ function Inline({ as: Comp = "div", gap = "md", align = "center", justify = "sta
2033
2033
  }
2034
2034
  //#endregion
2035
2035
  //#region ../blocks/src/primitives/layout/Grid.tsx
2036
+ /** Utility class for a numeric column COUNT at a given breakpoint. */
2037
+ const COL_COUNT_CLASS = {
2038
+ base: (n) => `rb-grid-cols-${n}`,
2039
+ sm: (n) => `rb-sm-grid-cols-${n}`,
2040
+ md: (n) => `rb-md-grid-cols-${n}`,
2041
+ lg: (n) => `rb-lg-grid-cols-${n}`,
2042
+ xl: (n) => `rb-xl-grid-cols-${n}`
2043
+ };
2044
+ /** Inline custom property read by the `.rb-grid-tracks` utility per breakpoint. */
2045
+ const TRACK_VAR = {
2046
+ base: "--rb-gtc-base",
2047
+ sm: "--rb-gtc-sm",
2048
+ md: "--rb-gtc-md",
2049
+ lg: "--rb-gtc-lg",
2050
+ xl: "--rb-gtc-xl"
2051
+ };
2052
+ const GRID_BREAKPOINTS = [
2053
+ "base",
2054
+ "sm",
2055
+ "md",
2056
+ "lg",
2057
+ "xl"
2058
+ ];
2036
2059
  function Grid({ as: Comp = "div", cols = {
2037
2060
  base: 1,
2038
2061
  md: 2
2039
- }, gap = "md", className, children, "data-slot": dataSlot, ...rest }) {
2040
- const colsObj = typeof cols === "number" ? { base: cols } : cols;
2041
- const colClasses = [
2042
- colsObj.base && `rb-grid-cols-${colsObj.base}`,
2043
- colsObj.sm && `rb-sm-grid-cols-${colsObj.sm}`,
2044
- colsObj.md && `rb-md-grid-cols-${colsObj.md}`,
2045
- colsObj.lg && `rb-lg-grid-cols-${colsObj.lg}`,
2046
- colsObj.xl && `rb-xl-grid-cols-${colsObj.xl}`
2047
- ];
2062
+ }, gap = "md", className, style, children, "data-slot": dataSlot, ...rest }) {
2063
+ const colsObj = typeof cols === "number" || typeof cols === "string" ? { base: cols } : cols;
2064
+ const colClasses = [];
2065
+ const trackVars = {};
2066
+ let hasTracks = false;
2067
+ for (const bp of GRID_BREAKPOINTS) {
2068
+ const value = colsObj[bp];
2069
+ if (value == null) continue;
2070
+ if (typeof value === "string") {
2071
+ trackVars[TRACK_VAR[bp]] = value;
2072
+ hasTracks = true;
2073
+ } else colClasses.push(COL_COUNT_CLASS[bp](value));
2074
+ }
2075
+ const mergedStyle = hasTracks ? {
2076
+ ...trackVars,
2077
+ ...style
2078
+ } : style;
2048
2079
  return /* @__PURE__ */ jsx(Comp, {
2049
2080
  ...rest,
2050
- className: clsx("rb-grid", colClasses, {
2081
+ style: mergedStyle,
2082
+ className: clsx("rb-grid", hasTracks && "rb-grid-tracks", colClasses, {
2051
2083
  "rb-gap-0": gap === "none",
2052
2084
  "rb-gap-1": gap === "xs",
2053
2085
  "rb-gap-2": gap === "sm",
@@ -2513,119 +2545,6 @@ function Text$1({ as: Comp = "span", children, className = "", path, maxLength:
2513
2545
  });
2514
2546
  }
2515
2547
  //#endregion
2516
- //#region ../blocks/src/system/runtime/nodes/richText-coerce.ts
2517
- function coerceRichTextDoc(value) {
2518
- const raw = unwrapRichTextRoot(value);
2519
- if (typeof raw === "string") return createRichTextDocFromMarkdown(raw);
2520
- if (isRecord$20(raw) && typeof raw.type === "string") return raw;
2521
- return null;
2522
- }
2523
- //#endregion
2524
- //#region ../blocks/src/system/runtime/nodes/renderInlineText.tsx
2525
- function renderInlineText(value) {
2526
- return value.map((run, index) => renderRun(run, index));
2527
- }
2528
- function renderRun(run, key) {
2529
- return (run.marks ?? []).reduceRight((child, mark, index) => renderMark(mark, `${String(key)}-${index}`, child), run.text);
2530
- }
2531
- function renderMark(mark, key, child) {
2532
- switch (mark.kind) {
2533
- case "strong": return /* @__PURE__ */ jsx("strong", { children: child }, key);
2534
- case "emphasis": return /* @__PURE__ */ jsx("em", { children: child }, key);
2535
- case "accent": return /* @__PURE__ */ jsx("span", {
2536
- className: `rb-inline-text-accent rb-inline-text-accent-${mark.tone}`,
2537
- children: child
2538
- }, key);
2539
- case "highlight": return /* @__PURE__ */ jsx("span", {
2540
- className: `rb-inline-text-highlight rb-inline-text-highlight-${mark.tone}`,
2541
- children: child
2542
- }, key);
2543
- }
2544
- }
2545
- //#endregion
2546
- //#region ../blocks/src/system/runtime/nodes/basic.tsx
2547
- const TextNode = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, inlineTextFallbackPath, ...rest }) => {
2548
- const inlineText = parseInlineTextFromUnknown(value);
2549
- if (inlineText.ok && !isInlineTextEmpty(inlineText.value)) return /* @__PURE__ */ jsx(Text$1, {
2550
- ...rest,
2551
- children: renderInlineText(inlineText.value)
2552
- });
2553
- const fallbackValue = inlineTextFallbackPath ? readStringPath$1(blockContent, inlineTextFallbackPath) : null;
2554
- return /* @__PURE__ */ jsx(Text$1, {
2555
- ...rest,
2556
- children: fallbackValue ?? textNodeContent(value) ?? children
2557
- });
2558
- };
2559
- function textNodeContent(value) {
2560
- if (value === null || value === void 0) return null;
2561
- if (typeof value === "string" || typeof value === "number") return value;
2562
- return null;
2563
- }
2564
- function readStringPath$1(source, path) {
2565
- const value = getAtPath(source, path);
2566
- return typeof value === "string" ? value : null;
2567
- }
2568
- const RichTextNode = ({ value, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {
2569
- return /* @__PURE__ */ jsx(RichText$1, {
2570
- doc: coerceRichTextDoc(value) ?? void 0,
2571
- ...rest
2572
- });
2573
- };
2574
- const ButtonNode = ({ value, children, href, variantId = "primary", size = "md", disabled, type = "button", target, rel, linkRequired = false, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, className, ...rest }) => {
2575
- const content = value ?? children;
2576
- if (!content) {
2577
- console.warn("[ButtonNode] No content to render - value and children are both empty");
2578
- return null;
2579
- }
2580
- const resolvedHref = typeof href === "string" ? href.trim() : "";
2581
- if (linkRequired && resolvedHref.length === 0) {
2582
- console.warn("[ButtonNode] Missing href for link-required button");
2583
- return null;
2584
- }
2585
- const resolvedVariantId = parseThemeButtonVariantId(variantId);
2586
- const combinedClassName = resolvedVariantId ? themeButtonClassName({
2587
- variant: resolvedVariantId,
2588
- size,
2589
- extraClassName: className
2590
- }) : className;
2591
- if (resolvedHref) return /* @__PURE__ */ jsx("a", {
2592
- href: resolvedHref,
2593
- target,
2594
- rel,
2595
- className: combinedClassName,
2596
- ...rest,
2597
- children: content
2598
- });
2599
- return /* @__PURE__ */ jsx("button", {
2600
- type,
2601
- disabled,
2602
- className: combinedClassName,
2603
- ...rest,
2604
- children: content
2605
- });
2606
- };
2607
- const LinkNode = ({ href, children, className, target, rel, linkRequired = false, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {
2608
- if (!children) return null;
2609
- const resolvedHref = typeof href === "string" ? href.trim() : "";
2610
- if (resolvedHref.length === 0) {
2611
- if (linkRequired && true) console.warn("[LinkNode] Missing href for link-required link");
2612
- if (linkRequired) return null;
2613
- return /* @__PURE__ */ jsx("span", {
2614
- className,
2615
- ...rest,
2616
- children
2617
- });
2618
- }
2619
- return /* @__PURE__ */ jsx("a", {
2620
- href: resolvedHref,
2621
- className,
2622
- target,
2623
- rel,
2624
- ...rest,
2625
- children
2626
- });
2627
- };
2628
- //#endregion
2629
2548
  //#region ../blocks/src/system/icons/cta.ts
2630
2549
  /**
2631
2550
  * Curated icon set for CTA/button icons.
@@ -2733,6 +2652,171 @@ function getIconComponent(name) {
2733
2652
  return getCtaIconComponent(name) ?? getSemanticIconComponent(name);
2734
2653
  }
2735
2654
  //#endregion
2655
+ //#region ../blocks/src/system/runtime/nodes/buttonAffordance.ts
2656
+ function normalize(value) {
2657
+ const trimmed = typeof value === "string" ? value.trim() : "";
2658
+ return trimmed.length > 0 ? trimmed : null;
2659
+ }
2660
+ /**
2661
+ * Resolve the trailing affordance a button should render. Node overrides
2662
+ * personality; returns `null` when nothing is configured.
2663
+ */
2664
+ function resolveButtonAffordance(input) {
2665
+ const nodeIcon = normalize(input.trailingIcon);
2666
+ if (nodeIcon) {
2667
+ const colorToken = normalize(input.trailingIconColorToken);
2668
+ return {
2669
+ iconId: nodeIcon,
2670
+ source: "node",
2671
+ ...colorToken ? { colorToken } : {}
2672
+ };
2673
+ }
2674
+ const personality = input.personalityAffordance;
2675
+ const personalityIcon = normalize(personality?.iconId);
2676
+ if (personality && personalityIcon) {
2677
+ const colorToken = normalize(personality.colorToken);
2678
+ return {
2679
+ iconId: personalityIcon,
2680
+ source: "personality",
2681
+ ...colorToken ? { colorToken } : {}
2682
+ };
2683
+ }
2684
+ return null;
2685
+ }
2686
+ //#endregion
2687
+ //#region ../blocks/src/system/runtime/nodes/richText-coerce.ts
2688
+ function coerceRichTextDoc(value) {
2689
+ const raw = unwrapRichTextRoot(value);
2690
+ if (typeof raw === "string") return createRichTextDocFromMarkdown(raw);
2691
+ if (isRecord$20(raw) && typeof raw.type === "string") return raw;
2692
+ return null;
2693
+ }
2694
+ //#endregion
2695
+ //#region ../blocks/src/system/runtime/nodes/renderInlineText.tsx
2696
+ function renderInlineText(value) {
2697
+ return value.map((run, index) => renderRun(run, index));
2698
+ }
2699
+ function renderRun(run, key) {
2700
+ return (run.marks ?? []).reduceRight((child, mark, index) => renderMark(mark, `${String(key)}-${index}`, child), run.text);
2701
+ }
2702
+ function renderMark(mark, key, child) {
2703
+ switch (mark.kind) {
2704
+ case "strong": return /* @__PURE__ */ jsx("strong", { children: child }, key);
2705
+ case "emphasis": return /* @__PURE__ */ jsx("em", { children: child }, key);
2706
+ case "accent": return /* @__PURE__ */ jsx("span", {
2707
+ className: `rb-inline-text-accent rb-inline-text-accent-${mark.tone}`,
2708
+ children: child
2709
+ }, key);
2710
+ case "highlight": return /* @__PURE__ */ jsx("span", {
2711
+ className: `rb-inline-text-highlight rb-inline-text-highlight-${mark.tone}`,
2712
+ children: child
2713
+ }, key);
2714
+ }
2715
+ }
2716
+ //#endregion
2717
+ //#region ../blocks/src/system/runtime/nodes/basic.tsx
2718
+ const TextNode = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, inlineTextFallbackPath, ...rest }) => {
2719
+ const inlineText = parseInlineTextFromUnknown(value);
2720
+ if (inlineText.ok && !isInlineTextEmpty(inlineText.value)) return /* @__PURE__ */ jsx(Text$1, {
2721
+ ...rest,
2722
+ children: renderInlineText(inlineText.value)
2723
+ });
2724
+ const fallbackValue = inlineTextFallbackPath ? readStringPath$1(blockContent, inlineTextFallbackPath) : null;
2725
+ return /* @__PURE__ */ jsx(Text$1, {
2726
+ ...rest,
2727
+ children: fallbackValue ?? textNodeContent(value) ?? children
2728
+ });
2729
+ };
2730
+ function textNodeContent(value) {
2731
+ if (value === null || value === void 0) return null;
2732
+ if (typeof value === "string" || typeof value === "number") return value;
2733
+ return null;
2734
+ }
2735
+ function readStringPath$1(source, path) {
2736
+ const value = getAtPath(source, path);
2737
+ return typeof value === "string" ? value : null;
2738
+ }
2739
+ const RichTextNode = ({ value, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {
2740
+ return /* @__PURE__ */ jsx(RichText$1, {
2741
+ doc: coerceRichTextDoc(value) ?? void 0,
2742
+ ...rest
2743
+ });
2744
+ };
2745
+ /**
2746
+ * Render the resolved trailing affordance icon. Colour is applied via a theme
2747
+ * CSS var so it recolours with the palette; the icon stroke uses `currentColor`.
2748
+ */
2749
+ function renderTrailingAffordanceIcon(affordance) {
2750
+ if (!affordance) return null;
2751
+ const Icon = getIconComponent(affordance.iconId);
2752
+ if (!Icon) return null;
2753
+ return /* @__PURE__ */ jsx(Icon, {
2754
+ "aria-hidden": true,
2755
+ className: "rb-ml-2 rb-h-4 rb-w-4 rb-inline-block",
2756
+ style: affordance.colorToken ? { color: `rgb(var(--tb-${affordance.colorToken}))` } : void 0
2757
+ });
2758
+ }
2759
+ const ButtonNode = ({ value, children, href, variantId = "primary", size = "md", disabled, type = "button", target, rel, linkRequired = false, trailingIcon, trailingIconColorToken, personalityAffordance, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, className, ...rest }) => {
2760
+ const content = value ?? children;
2761
+ if (!content) {
2762
+ console.warn("[ButtonNode] No content to render - value and children are both empty");
2763
+ return null;
2764
+ }
2765
+ const affordanceIcon = renderTrailingAffordanceIcon(resolveButtonAffordance({
2766
+ trailingIcon,
2767
+ trailingIconColorToken,
2768
+ personalityAffordance
2769
+ }));
2770
+ const resolvedHref = typeof href === "string" ? href.trim() : "";
2771
+ if (linkRequired && resolvedHref.length === 0) {
2772
+ console.warn("[ButtonNode] Missing href for link-required button");
2773
+ return null;
2774
+ }
2775
+ const extraClassName = affordanceIcon ? [className, AFFORDANCE_SUPPRESS_CLASS].filter(Boolean).join(" ") : className;
2776
+ const resolvedVariantId = parseThemeButtonVariantId(variantId);
2777
+ const combinedClassName = resolvedVariantId ? themeButtonClassName({
2778
+ variant: resolvedVariantId,
2779
+ size,
2780
+ extraClassName
2781
+ }) : extraClassName;
2782
+ if (resolvedHref) return /* @__PURE__ */ jsxs("a", {
2783
+ href: resolvedHref,
2784
+ target,
2785
+ rel,
2786
+ className: combinedClassName,
2787
+ ...rest,
2788
+ children: [content, affordanceIcon]
2789
+ });
2790
+ return /* @__PURE__ */ jsxs("button", {
2791
+ type,
2792
+ disabled,
2793
+ className: combinedClassName,
2794
+ ...rest,
2795
+ children: [content, affordanceIcon]
2796
+ });
2797
+ };
2798
+ const LinkNode = ({ href, children, className, target, rel, linkRequired = false, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {
2799
+ if (!children) return null;
2800
+ const resolvedHref = typeof href === "string" ? href.trim() : "";
2801
+ if (resolvedHref.length === 0) {
2802
+ if (linkRequired && true) console.warn("[LinkNode] Missing href for link-required link");
2803
+ if (linkRequired) return null;
2804
+ return /* @__PURE__ */ jsx("span", {
2805
+ className,
2806
+ ...rest,
2807
+ children
2808
+ });
2809
+ }
2810
+ return /* @__PURE__ */ jsx("a", {
2811
+ href: resolvedHref,
2812
+ className,
2813
+ target,
2814
+ rel,
2815
+ ...rest,
2816
+ children
2817
+ });
2818
+ };
2819
+ //#endregion
2736
2820
  //#region ../blocks/src/system/runtime/nodes/icon.tsx
2737
2821
  const IconNode = ({ value, title, className, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {
2738
2822
  const parsedValue = parseBlockIconValue(value);
@@ -3526,6 +3610,77 @@ function SpinnerNode({ className, size = "md", color, strokeWidth = 3, srLabel,
3526
3610
  }) : null]
3527
3611
  });
3528
3612
  }
3613
+ //#endregion
3614
+ //#region ../blocks/src/system/runtime/nodes/svg.tsx
3615
+ /**
3616
+ * Turn paint props into a CSS style object. Colour values pass through as-is so
3617
+ * they may reference theme tokens via `var()`, which only resolves in a CSS
3618
+ * property context (not in a bare presentation attribute).
3619
+ */
3620
+ function paintStyle(shape) {
3621
+ const style = {};
3622
+ if (shape.fill !== void 0) style.fill = shape.fill;
3623
+ if (shape.stroke !== void 0) style.stroke = shape.stroke;
3624
+ if (shape.strokeWidth !== void 0) style.strokeWidth = shape.strokeWidth;
3625
+ if (shape.fillOpacity !== void 0) style.fillOpacity = shape.fillOpacity;
3626
+ if (shape.strokeOpacity !== void 0) style.strokeOpacity = shape.strokeOpacity;
3627
+ if (shape.strokeLinecap !== void 0) style.strokeLinecap = shape.strokeLinecap;
3628
+ if (shape.strokeLinejoin !== void 0) style.strokeLinejoin = shape.strokeLinejoin;
3629
+ if (shape.strokeDasharray !== void 0) style.strokeDasharray = shape.strokeDasharray;
3630
+ return style;
3631
+ }
3632
+ function renderShape(shape, key) {
3633
+ const style = paintStyle(shape);
3634
+ switch (shape.kind) {
3635
+ case "path": return /* @__PURE__ */ jsx("path", {
3636
+ d: shape.d,
3637
+ style
3638
+ }, key);
3639
+ case "ellipse": return /* @__PURE__ */ jsx("ellipse", {
3640
+ cx: shape.cx,
3641
+ cy: shape.cy,
3642
+ rx: shape.rx,
3643
+ ry: shape.ry,
3644
+ style
3645
+ }, key);
3646
+ case "circle": return /* @__PURE__ */ jsx("circle", {
3647
+ cx: shape.cx,
3648
+ cy: shape.cy,
3649
+ r: shape.r,
3650
+ style
3651
+ }, key);
3652
+ case "rect": return /* @__PURE__ */ jsx("rect", {
3653
+ x: shape.x,
3654
+ y: shape.y,
3655
+ width: shape.width,
3656
+ height: shape.height,
3657
+ rx: shape.rx,
3658
+ ry: shape.ry,
3659
+ style
3660
+ }, key);
3661
+ case "line": return /* @__PURE__ */ jsx("line", {
3662
+ x1: shape.x1,
3663
+ y1: shape.y1,
3664
+ x2: shape.x2,
3665
+ y2: shape.y2,
3666
+ style
3667
+ }, key);
3668
+ default: return null;
3669
+ }
3670
+ }
3671
+ const SvgNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, viewBox, width, height, className, style, ariaHidden = true, shapes }) => {
3672
+ return /* @__PURE__ */ jsx("svg", {
3673
+ viewBox,
3674
+ width,
3675
+ height,
3676
+ className,
3677
+ style,
3678
+ "aria-hidden": ariaHidden,
3679
+ xmlns: "http://www.w3.org/2000/svg",
3680
+ fill: "none",
3681
+ children: (Array.isArray(shapes) ? shapes : []).map((shape, index) => renderShape(shape, index))
3682
+ });
3683
+ };
3529
3684
  function clearWorkflowFeedback(state) {
3530
3685
  return {
3531
3686
  ...state,
@@ -7803,6 +7958,154 @@ const WeekAgendaView = ({ days, events, showCapacity, emptyMessage = "No events
7803
7958
  });
7804
7959
  };
7805
7960
  //#endregion
7961
+ //#region ../blocks/src/system/runtime/nodes/events/shared/WeekBoardView.tsx
7962
+ const SHORT_DAY_NAMES = [
7963
+ "Sun",
7964
+ "Mon",
7965
+ "Tue",
7966
+ "Wed",
7967
+ "Thu",
7968
+ "Fri",
7969
+ "Sat"
7970
+ ];
7971
+ const LEGEND_ITEMS = [
7972
+ {
7973
+ status: "available",
7974
+ label: "Places available"
7975
+ },
7976
+ {
7977
+ status: "filling",
7978
+ label: "Filling up"
7979
+ },
7980
+ {
7981
+ status: "waitlist",
7982
+ label: "Waitlist"
7983
+ }
7984
+ ];
7985
+ /**
7986
+ * Format an event's start–end as a compact range, merging the shared meridiem.
7987
+ * "6:00 PM" + "7:00 PM" -> "6:00 – 7:00 PM"; "9:30 AM" + "10:15 AM" -> "9:30 – 10:15 AM".
7988
+ */
7989
+ function formatCompactTimeRange(event) {
7990
+ const timeZone = event.timeZone ?? null;
7991
+ const start = formatTime$3(event.startsAt, { timeZone });
7992
+ const end = formatTime$3(event.endsAt, { timeZone });
7993
+ const startMeridiem = start.slice(-2);
7994
+ const endMeridiem = end.slice(-2);
7995
+ if ((startMeridiem === "AM" || startMeridiem === "PM") && startMeridiem === endMeridiem) return `${start.slice(0, -3).trim()} – ${end}`;
7996
+ return `${start} – ${end}`;
7997
+ }
7998
+ const WeekBoardCard = ({ event, showCapacity }) => {
7999
+ const linkProps = resolveEventLinkProps(event);
8000
+ const { status, label } = getEventAvailabilityStatus(event);
8001
+ const pill = showCapacity ? label : null;
8002
+ return /* @__PURE__ */ jsxs("a", {
8003
+ ...linkProps,
8004
+ className: "event-week-board-card",
8005
+ "data-status": status,
8006
+ children: [
8007
+ /* @__PURE__ */ jsx("span", {
8008
+ className: "event-week-board-card-title",
8009
+ children: event.title
8010
+ }),
8011
+ /* @__PURE__ */ jsx("span", {
8012
+ className: "event-week-board-card-time",
8013
+ children: formatCompactTimeRange(event)
8014
+ }),
8015
+ pill ? /* @__PURE__ */ jsx("span", {
8016
+ className: "event-week-board-card-pill",
8017
+ "data-status": status,
8018
+ children: pill
8019
+ }) : null
8020
+ ]
8021
+ });
8022
+ };
8023
+ /**
8024
+ * WeekBoardView
8025
+ *
8026
+ * Compact "class day-board": day columns side by side (one card per class per
8027
+ * day), a legend of the three availability states, and a footer CTA. Collapses
8028
+ * to a stacked list on mobile. Repurposes the week-grouped agenda data as a
8029
+ * board rather than an hour-positioned timetable grid.
8030
+ */
8031
+ const WeekBoardView = ({ days, events, showCapacity, emptyMessage = "No classes scheduled this week", title = "The week ahead", footerNote = "New to a class? We'll check it's right for you first.", ctaLabel = "Reserve a place", ctaHref = null, buttonVariant = "outline" }) => {
8032
+ const eventsByDate = groupEventsByDate(events);
8033
+ const hasAnyEvents = days.some((date) => (eventsByDate.get(formatDateKey(date)) ?? []).length > 0);
8034
+ const ctaClassName = themeButtonClassName({
8035
+ variant: buttonVariant,
8036
+ size: "sm"
8037
+ });
8038
+ return /* @__PURE__ */ jsx("div", {
8039
+ className: "event-calendar event-calendar--week-board",
8040
+ "data-block": "event-calendar",
8041
+ children: /* @__PURE__ */ jsxs("div", {
8042
+ className: "event-week-board",
8043
+ style: { "--event-week-board-cols": String(days.length) },
8044
+ children: [
8045
+ /* @__PURE__ */ jsxs("div", {
8046
+ className: "event-week-board-top",
8047
+ children: [/* @__PURE__ */ jsx("span", {
8048
+ className: "event-week-board-title",
8049
+ children: title
8050
+ }), /* @__PURE__ */ jsx("div", {
8051
+ className: "event-week-board-legend",
8052
+ "aria-hidden": "true",
8053
+ children: LEGEND_ITEMS.map((item) => /* @__PURE__ */ jsxs("span", {
8054
+ className: "event-week-board-legend-item",
8055
+ children: [/* @__PURE__ */ jsx("i", {
8056
+ className: "event-week-board-legend-dot",
8057
+ "data-status": item.status
8058
+ }), item.label]
8059
+ }, item.status))
8060
+ })]
8061
+ }),
8062
+ /* @__PURE__ */ jsx("div", {
8063
+ className: "event-week-board-grid",
8064
+ children: days.map((date) => {
8065
+ const dateKey = formatDateKey(date);
8066
+ const dayEvents = eventsByDate.get(dateKey) ?? [];
8067
+ const today = isToday(date);
8068
+ return /* @__PURE__ */ jsxs("div", {
8069
+ className: clsx("event-week-board-day", dayEvents.length === 0 && "event-week-board-day--empty", today && "event-week-board-day--today"),
8070
+ children: [/* @__PURE__ */ jsxs("div", {
8071
+ className: "event-week-board-day-head",
8072
+ children: [/* @__PURE__ */ jsx("span", {
8073
+ className: "event-week-board-day-abbr",
8074
+ children: SHORT_DAY_NAMES[date.getDay()]
8075
+ }), /* @__PURE__ */ jsx("span", {
8076
+ className: "event-week-board-day-num",
8077
+ children: date.getDate()
8078
+ })]
8079
+ }), /* @__PURE__ */ jsx("div", {
8080
+ className: "event-week-board-day-body",
8081
+ children: dayEvents.map((event) => /* @__PURE__ */ jsx(WeekBoardCard, {
8082
+ event,
8083
+ showCapacity
8084
+ }, event.occurrenceId || event.id))
8085
+ })]
8086
+ }, dateKey);
8087
+ })
8088
+ }),
8089
+ /* @__PURE__ */ jsxs("div", {
8090
+ className: "event-week-board-foot",
8091
+ children: [/* @__PURE__ */ jsx("p", {
8092
+ className: "event-week-board-foot-note",
8093
+ children: hasAnyEvents ? footerNote : emptyMessage
8094
+ }), ctaHref ? /* @__PURE__ */ jsx("a", {
8095
+ className: ctaClassName,
8096
+ href: ctaHref,
8097
+ children: ctaLabel
8098
+ }) : /* @__PURE__ */ jsx("button", {
8099
+ type: "button",
8100
+ className: ctaClassName,
8101
+ children: ctaLabel
8102
+ })]
8103
+ })
8104
+ ]
8105
+ })
8106
+ });
8107
+ };
8108
+ //#endregion
7806
8109
  //#region ../blocks/src/system/runtime/nodes/events/shared/timetableModel.ts
7807
8110
  /**
7808
8111
  * Event-domain adapter over @riverbankcms/calendar.
@@ -8237,6 +8540,16 @@ function renderTimetableSsr(display) {
8237
8540
  })]
8238
8541
  });
8239
8542
  }
8543
+ function renderWeekBoardSsr(display) {
8544
+ return /* @__PURE__ */ jsx(WeekBoardView, {
8545
+ days: getWeekCalendarDayTuple(/* @__PURE__ */ new Date(), display.startOfWeek),
8546
+ events: [...display.events],
8547
+ showCapacity: display.showCapacity,
8548
+ emptyMessage: display.emptyMessage,
8549
+ ctaLabel: display.buttonText,
8550
+ buttonVariant: display.buttonVariant
8551
+ });
8552
+ }
8240
8553
  function formatHourLabel$1(hour) {
8241
8554
  if (hour === 0) return "12 AM";
8242
8555
  if (hour === 12) return "12 PM";
@@ -8263,6 +8576,9 @@ const EventCalendarSSR = (props) => {
8263
8576
  case "timetable":
8264
8577
  content = renderTimetableSsr(display);
8265
8578
  break;
8579
+ case "week-board":
8580
+ content = renderWeekBoardSsr(display);
8581
+ break;
8266
8582
  case "calendar":
8267
8583
  content = renderCalendarSsr(display);
8268
8584
  break;
@@ -8848,6 +9164,7 @@ typedObjectKeys(runtimeBackedBlockServerEntries);
8848
9164
  const serverComponentRegistry = {
8849
9165
  div: DivNode,
8850
9166
  figure: FigureNode,
9167
+ svg: SvgNode,
8851
9168
  section: SectionNode,
8852
9169
  headerSection: header_section_server_default,
8853
9170
  stack: StackNode,
@@ -26255,8 +26572,19 @@ const EventCalendarClient = ({ render }) => {
26255
26572
  });
26256
26573
  if (display.displayMode === "list") return /* @__PURE__ */ jsx(EventListingController, { render: buildEventCalendarListingRender(render) });
26257
26574
  if (display.displayMode === "timetable") return /* @__PURE__ */ jsx(EventCalendarTimetableClient, { render });
26575
+ if (display.displayMode === "week-board") return /* @__PURE__ */ jsx(EventCalendarWeekBoardClient, { display });
26258
26576
  return /* @__PURE__ */ jsx(EventCalendarGridClient, { render });
26259
26577
  };
26578
+ const EventCalendarWeekBoardClient = ({ display }) => {
26579
+ return /* @__PURE__ */ jsx(WeekBoardView, {
26580
+ days: useMemo(() => getWeekCalendarDayTuple(/* @__PURE__ */ new Date(), display.startOfWeek), [display.startOfWeek]),
26581
+ events: [...display.events],
26582
+ showCapacity: display.showCapacity,
26583
+ emptyMessage: display.emptyMessage,
26584
+ ctaLabel: display.buttonText,
26585
+ buttonVariant: display.buttonVariant
26586
+ });
26587
+ };
26260
26588
  const EventCalendarTimetableClient = ({ render }) => {
26261
26589
  const { display, hydration } = render;
26262
26590
  const { filtersNode, listFilters } = useEventCalendarFilterState(display);
@@ -27477,8 +27805,8 @@ const backgroundTransforms = [
27477
27805
  {
27478
27806
  id: "background.resolveColorsStyle",
27479
27807
  kind: "formatter",
27480
- summary: "Resolve section foreground colors from a background object into scoped CSS vars",
27481
- run: (value, _options, context) => resolveSectionForegroundStyles(value, context)
27808
+ summary: "Resolve surface foreground colors from a background object into scoped CSS vars",
27809
+ run: (value, _options, context) => resolveSurfaceForegroundStyles(value, context)
27482
27810
  },
27483
27811
  {
27484
27812
  id: "background.resolveAllowOverflow",
@@ -29422,6 +29750,8 @@ function formatFontFamily(family, fallback = "sans-serif") {
29422
29750
  function generateShadowCssVars(theme) {
29423
29751
  const level = theme.shadow.elevation;
29424
29752
  const soft = theme.shadow.softness !== "crisp";
29753
+ const tintVar = theme.shadow.colorToken ? cssVarValue(theme.shadow.colorToken) : null;
29754
+ const shadowColor = (a) => tintVar ? `rgb(${tintVar} / ${a})` : `rgba(0, 0, 0, ${a})`;
29425
29755
  const base = {
29426
29756
  sm: [{
29427
29757
  y: 1,
@@ -29481,7 +29811,7 @@ function generateShadowCssVars(theme) {
29481
29811
  const blurMul = soft ? 1.2 : 1;
29482
29812
  const alphaMul = soft ? .9 : 1.05;
29483
29813
  const fmt = (layers) => layers.map((l) => {
29484
- return `0 ${Math.round(l.y * scale)}px ${Math.round(l.blur * scale * blurMul)}px ${Math.round(l.spread * scale)}px rgba(0, 0, 0, ${Math.max(0, Math.min(1, +(l.a * alphaMul).toFixed(3)))})`;
29814
+ return `0 ${Math.round(l.y * scale)}px ${Math.round(l.blur * scale * blurMul)}px ${Math.round(l.spread * scale)}px ${shadowColor(Math.max(0, Math.min(1, +(l.a * alphaMul).toFixed(3))))}`;
29485
29815
  }).join(", ");
29486
29816
  return {
29487
29817
  "--shadow-sm": fmt(base.sm),
@@ -29547,7 +29877,13 @@ function generateAccordionCss({ themeId, theme, accordionSystem }) {
29547
29877
  const questionColumnsLastItemSelector = `${questionColumnsItemSelector}:last-child`;
29548
29878
  const questionColumnsTriggerSelector = `${questionColumnsItemSelector} .accordion-trigger`;
29549
29879
  const rootRules = [];
29550
- if (accordionSystem.background) rootRules.push(`background-color: ${rgbColorValue(accordionSystem.background.colorToken)}`);
29880
+ if (accordionSystem.background) {
29881
+ rootRules.push(`background-color: ${rgbColorValue(accordionSystem.background.colorToken)}`);
29882
+ rootRules.push(...surfaceForegroundDeclarations({
29883
+ text: rgbColorValue(accordionSystem.content.textColorToken),
29884
+ heading: rgbColorValue(accordionSystem.trigger.textColorToken)
29885
+ }));
29886
+ }
29551
29887
  const borderRadius = CORNER_MAP$2[accordionSystem.corners ?? theme.corners];
29552
29888
  rootRules.push(`border-radius: ${borderRadius}`);
29553
29889
  if (accordionSystem.border) {
@@ -31125,7 +31461,7 @@ ${root} .status-error { color: rgb(var(--tb-destructive)); }
31125
31461
  ${root} .status-success { color: rgb(var(--tb-success)); }
31126
31462
  ${root} .status-warning { color: rgb(var(--tb-warning)); }
31127
31463
  ${root} .status-info { color: rgb(var(--tb-info)); }
31128
- ${root} .status-muted { ${statusMutedColorDeclaration()} }`);
31464
+ ${root} .status-muted { color: ${surfaceForegroundValue("supporting")}; }`);
31129
31465
  cssBlocks.push(`/* Alert containers */
31130
31466
  ${root} .alert {
31131
31467
  padding: 1rem;
@@ -31263,6 +31599,9 @@ ${root} .step-connector {
31263
31599
  }
31264
31600
  //#endregion
31265
31601
  //#region ../theme-core/src/typography/generateTypographyCss.ts
31602
+ function globalHeadingColorFallback(level) {
31603
+ return `var(--hc-h${level}, var(--hc-heading, ${DEFAULT_SURFACE_TEXT_COLOR}))`;
31604
+ }
31266
31605
  /**
31267
31606
  * Generate typography CSS for heading elements.
31268
31607
  *
@@ -31291,7 +31630,7 @@ ${root} :where(h1) {
31291
31630
  font-style: var(--fi-h1, var(--fi-heading, normal));
31292
31631
  letter-spacing: var(--ls-h1, var(--ls-heading));
31293
31632
  line-height: var(--lh-h1, var(--lh-heading));
31294
- color: var(--section-heading-color, var(--section-text-color, var(--hc-h1, var(--hc-heading, inherit))));
31633
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(1))};
31295
31634
  }
31296
31635
 
31297
31636
  ${root} :where(h2) {
@@ -31300,7 +31639,7 @@ ${root} :where(h2) {
31300
31639
  font-style: var(--fi-h2, var(--fi-heading, normal));
31301
31640
  letter-spacing: var(--ls-h2, var(--ls-heading));
31302
31641
  line-height: var(--lh-h2, var(--lh-heading));
31303
- color: var(--section-heading-color, var(--section-text-color, var(--hc-h2, var(--hc-heading, inherit))));
31642
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(2))};
31304
31643
  }
31305
31644
 
31306
31645
  ${root} :where(h3) {
@@ -31309,7 +31648,7 @@ ${root} :where(h3) {
31309
31648
  font-style: var(--fi-h3, var(--fi-heading, normal));
31310
31649
  letter-spacing: var(--ls-h3, var(--ls-heading));
31311
31650
  line-height: var(--lh-h3, var(--lh-heading));
31312
- color: var(--section-heading-color, var(--section-text-color, var(--hc-h3, var(--hc-heading, inherit))));
31651
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(3))};
31313
31652
  }
31314
31653
 
31315
31654
  ${root} :where(h4) {
@@ -31318,7 +31657,7 @@ ${root} :where(h4) {
31318
31657
  font-style: var(--fi-h4, var(--fi-heading, normal));
31319
31658
  letter-spacing: var(--ls-h4, var(--ls-heading));
31320
31659
  line-height: var(--lh-h4, var(--lh-heading));
31321
- color: var(--section-heading-color, var(--section-text-color, var(--hc-h4, var(--hc-heading, inherit))));
31660
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(4))};
31322
31661
  }
31323
31662
 
31324
31663
  ${root} :where(h5) {
@@ -31327,7 +31666,7 @@ ${root} :where(h5) {
31327
31666
  font-style: var(--fi-h5, var(--fi-heading, normal));
31328
31667
  letter-spacing: var(--ls-h5, var(--ls-heading));
31329
31668
  line-height: var(--lh-h5, var(--lh-heading));
31330
- color: var(--section-heading-color, var(--section-text-color, var(--hc-h5, var(--hc-heading, inherit))));
31669
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(5))};
31331
31670
  }
31332
31671
 
31333
31672
  ${root} :where(h6) {
@@ -31336,7 +31675,7 @@ ${root} :where(h6) {
31336
31675
  font-style: var(--fi-h6, var(--fi-heading, normal));
31337
31676
  letter-spacing: var(--ls-h6, var(--ls-heading));
31338
31677
  line-height: var(--lh-h6, var(--lh-heading));
31339
- color: var(--section-heading-color, var(--section-text-color, var(--hc-h6, var(--hc-heading, inherit))));
31678
+ color: ${surfaceForegroundValue("heading", globalHeadingColorFallback(6))};
31340
31679
  }`);
31341
31680
  cssBlocks.push(`/* Display variant for hero/splash headings */
31342
31681
  ${root} :where(.heading-display) {
@@ -31735,6 +32074,7 @@ const THEME_RADIUS_CSS_VARS = {
31735
32074
  block: "--rb-block-radius",
31736
32075
  button: "--rb-button-radius",
31737
32076
  input: "--rb-input-radius",
32077
+ panel: "--rb-panel-radius",
31738
32078
  legacyCard: "--radius-card",
31739
32079
  legacyControl: "--radius-control"
31740
32080
  };
@@ -31816,6 +32156,10 @@ ${`:where([data-theme-scope="${themeId}"]) :where([data-block="customer-portal"]
31816
32156
  /* Modal (shared rb-modal classes) */
31817
32157
  --rb-modal-overlay-bg: rgb(var(--tb-text, 0 0 0) / 0.35);
31818
32158
  --rb-modal-bg: var(--cp-card-bg);
32159
+ --rb-modal-text: var(--cp-text);
32160
+ --rb-modal-heading: var(--cp-text);
32161
+ --rb-modal-link: var(--cp-primary);
32162
+ --rb-modal-supporting: var(--cp-muted);
31819
32163
  --rb-modal-border: var(--cp-card-border);
31820
32164
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
31821
32165
  --rb-modal-radius: var(--cp-card-radius);
@@ -32530,6 +32874,7 @@ function buildThemeCssVars(theme) {
32530
32874
  const inputSystem = resolveThemeInputSystem(theme);
32531
32875
  const blockRadius = mapBlockRadius(theme.corners);
32532
32876
  const buttonRadius = mapButtonRadius(theme.corners);
32877
+ const panelRadius = mapPanelRadius(theme.corners);
32533
32878
  const inputRadius = mapInputRadius(inputSystem.base.corners, theme.corners);
32534
32879
  return {
32535
32880
  ...generateCssVars(theme.palette),
@@ -32538,6 +32883,7 @@ function buildThemeCssVars(theme) {
32538
32883
  ...generateShadowCssVars(theme),
32539
32884
  ["--font-heading"]: formatFontFamily(typography.headings.default.family),
32540
32885
  ["--font-body"]: formatFontFamily(typography.body.family),
32886
+ ["--font-eyebrow"]: typography.eyebrow?.family ? formatFontFamily(typography.eyebrow.family) : "var(--font-body)",
32541
32887
  ["--font-weight-heading"]: mapWeight(typography.headings.default.weight),
32542
32888
  ["--font-weight-body"]: mapWeight(typography.body.weight),
32543
32889
  ...typography.headings.h1.weight ? { ["--fw-h1"]: mapWeight(typography.headings.h1.weight) } : {},
@@ -32588,12 +32934,13 @@ function buildThemeCssVars(theme) {
32588
32934
  ["--fs-h3-fluid"]: sized.h3Fluid,
32589
32935
  ["--fs-h1-display"]: sized.h1Display,
32590
32936
  ["--fs-h1-display-fluid"]: sized.h1DisplayFluid,
32591
- ["--shadow-elev"]: mapShadow(shadow.elevation, shadow.softness, shadow.position || "bottom"),
32937
+ ["--shadow-elev"]: mapShadow(shadow.elevation, shadow.softness, shadow.position || "bottom", shadow.colorToken),
32592
32938
  ["--space-mult"]: mapSpaceMult(space),
32593
32939
  ["--motion-duration"]: mapMotionDuration(motion.level),
32594
32940
  ["--motion-ease"]: mapMotionEasing(motion.easing ?? "standard"),
32595
32941
  ["--rt-space-y"]: mapRhythm(space),
32596
32942
  [THEME_RADIUS_CSS_VARS.block]: blockRadius,
32943
+ [THEME_RADIUS_CSS_VARS.panel]: panelRadius,
32597
32944
  ["--rb-block-transition"]: mapBlockTransition(motion.level),
32598
32945
  [THEME_RADIUS_CSS_VARS.button]: buttonRadius,
32599
32946
  ["--rb-border-width"]: mapBorderWidth(border.width),
@@ -32647,20 +32994,22 @@ function mapWeight(w) {
32647
32994
  bold: 700
32648
32995
  }[w];
32649
32996
  }
32650
- function mapShadow(level, softness, position = "bottom") {
32997
+ function mapShadow(level, softness, position = "bottom", colorToken) {
32651
32998
  if (level === "none") return "none";
32999
+ const tintVar = colorToken ? cssVarValue(colorToken) : null;
33000
+ const shadowColor = (a) => tintVar ? `rgb(${tintVar} / ${a})` : `rgba(0,0,0,${a})`;
32652
33001
  const offset = {
32653
33002
  low: 2,
32654
33003
  medium: 4,
32655
33004
  high: 6
32656
33005
  }[level];
32657
33006
  const xOffset = position === "bottom-right" ? offset : 0;
32658
- if (softness === "hard") return `${xOffset}px ${offset}px 0 0 rgba(0,0,0,1)`;
33007
+ if (softness === "hard") return `${xOffset}px ${offset}px 0 0 ${shadowColor("1")}`;
32659
33008
  const soft = softness !== "crisp";
32660
33009
  switch (level) {
32661
- case "low": return soft ? `${xOffset}px 1px 2px rgba(0,0,0,.06)` : `${xOffset}px 1px 1px rgba(0,0,0,.12)`;
32662
- case "medium": return soft ? `${xOffset}px 10px 20px rgba(0,0,0,.08)` : `${xOffset}px 6px 12px rgba(0,0,0,.16)`;
32663
- case "high": return soft ? `${xOffset}px 25px 50px rgba(0,0,0,.18)` : `${xOffset}px 20px 30px rgba(0,0,0,.28)`;
33010
+ case "low": return soft ? `${xOffset}px 1px 2px ${shadowColor(".06")}` : `${xOffset}px 1px 1px ${shadowColor(".12")}`;
33011
+ case "medium": return soft ? `${xOffset}px 10px 20px ${shadowColor(".08")}` : `${xOffset}px 6px 12px ${shadowColor(".16")}`;
33012
+ case "high": return soft ? `${xOffset}px 25px 50px ${shadowColor(".18")}` : `${xOffset}px 20px 30px ${shadowColor(".28")}`;
32664
33013
  }
32665
33014
  }
32666
33015
  function mapSpaceMult(space) {
@@ -32707,6 +33056,21 @@ function mapBlockRadius(corners) {
32707
33056
  }[corners];
32708
33057
  }
32709
33058
  /**
33059
+ * Map corner style to large-panel radius CSS value (Tier 2 `--rb-panel-radius`).
33060
+ * Derived from the same `corners` enum, one step more generous than the
33061
+ * block/card radius so large surfaces can carry a softer corner without a new
33062
+ * schema field. `rounded` lands on 20px (1.25rem), matching the physio mockup's
33063
+ * large-panel radius.
33064
+ */
33065
+ function mapPanelRadius(corners) {
33066
+ return {
33067
+ square: "0",
33068
+ soft: "0.75rem",
33069
+ rounded: "1.25rem",
33070
+ pill: "2rem"
33071
+ }[corners];
33072
+ }
33073
+ /**
32710
33074
  * Map motion level to block transition duration.
32711
33075
  * These are Tier 2 vars used consistently across blocks.
32712
33076
  */
@@ -33703,8 +34067,12 @@ const containerResponsiveThemeCss = `/*
33703
34067
  text-transform: uppercase;
33704
34068
  }
33705
34069
 
33706
- /* Eyebrow text - small uppercase labels for section introductions */
34070
+ /* Eyebrow text - small uppercase labels for section introductions.
34071
+ font-family resolves to the optional eyebrow/mono font role, falling back
34072
+ to the body font when the theme sets none (so existing themes are
34073
+ unchanged). */
33707
34074
  .rb-eyebrow {
34075
+ font-family: var(--font-eyebrow, var(--font-body));
33708
34076
  font-size: 0.875rem;
33709
34077
  font-weight: 600;
33710
34078
  letter-spacing: 0.025em;
@@ -33719,11 +34087,11 @@ const containerResponsiveThemeCss = `/*
33719
34087
  width: fit-content;
33720
34088
  align-items: center;
33721
34089
  justify-content: center;
33722
- border: 1px solid color-mix(in srgb, var(--section-text-color, rgb(var(--tb-text))) 46%, transparent);
34090
+ border: 1px solid color-mix(in srgb, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))) 46%, transparent);
33723
34091
  border-radius: 9999px;
33724
- background: color-mix(in srgb, var(--section-text-color, rgb(var(--tb-text))) 14%, transparent);
34092
+ background: color-mix(in srgb, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))) 14%, transparent);
33725
34093
  padding: 0.5rem 1rem;
33726
- color: var(--section-text-color, rgb(var(--tb-text)));
34094
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
33727
34095
  line-height: 1;
33728
34096
  }
33729
34097
  .rb-eyebrow-treatment-pill.rb-eyebrow-treatment-accent {
@@ -34225,6 +34593,58 @@ const containerResponsiveThemeCss = `/*
34225
34593
  }
34226
34594
  }
34227
34595
 
34596
+ }
34597
+
34598
+ /*
34599
+ * Responsive fractional grid tracks (rb-grid-tracks).
34600
+ *
34601
+ * Asymmetric AND responsive grid-template-columns, driven by inline custom
34602
+ * properties the Grid primitive sets per breakpoint from string track
34603
+ * templates:
34604
+ * --rb-gtc-base / --rb-gtc-sm / --rb-gtc-md / --rb-gtc-lg / --rb-gtc-xl
34605
+ * Each breakpoint falls back to the next smaller one, so only the breakpoints
34606
+ * an author actually sets take effect (e.g. base '1fr' + lg '1fr 0.9fr'
34607
+ * collapses to a single column below lg). Authored here (not per node) so the
34608
+ * @media -> @container conversion (container responsive mode) applies too.
34609
+ */
34610
+ .rb-grid-tracks {
34611
+ grid-template-columns: var(--rb-gtc-base, 1fr);
34612
+ }
34613
+ @container rb-site (min-width: 640px) {
34614
+
34615
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
34616
+ .rb-grid-tracks {
34617
+ grid-template-columns: var(--rb-gtc-sm, var(--rb-gtc-base, 1fr));
34618
+ }
34619
+ }
34620
+
34621
+ }
34622
+ @container rb-site (min-width: 768px) {
34623
+
34624
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
34625
+ .rb-grid-tracks {
34626
+ grid-template-columns: var(--rb-gtc-md, var(--rb-gtc-sm, var(--rb-gtc-base, 1fr)));
34627
+ }
34628
+ }
34629
+
34630
+ }
34631
+ @container rb-site (min-width: 1024px) {
34632
+
34633
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
34634
+ .rb-grid-tracks {
34635
+ grid-template-columns: var(--rb-gtc-lg, var(--rb-gtc-md, var(--rb-gtc-sm, var(--rb-gtc-base, 1fr))));
34636
+ }
34637
+ }
34638
+
34639
+ }
34640
+ @container rb-site (min-width: 1280px) {
34641
+
34642
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
34643
+ .rb-grid-tracks {
34644
+ grid-template-columns: var(--rb-gtc-xl, var(--rb-gtc-lg, var(--rb-gtc-md, var(--rb-gtc-sm, var(--rb-gtc-base, 1fr)))));
34645
+ }
34646
+ }
34647
+
34228
34648
  }
34229
34649
 
34230
34650
  /* Alignment */
@@ -35429,6 +35849,11 @@ const containerResponsiveThemeCss = `/*
35429
35849
  :where(.theme-scope) .rb-modal {
35430
35850
  width: min(var(--rb-modal-max-width, 560px), 100%);
35431
35851
  background: var(--rb-modal-bg, rgb(var(--tb-surface)));
35852
+ color: var(--rb-modal-text, rgb(var(--tb-text, 17 24 39)));
35853
+ --rb-surface-text-color: var(--rb-modal-text, rgb(var(--tb-text, 17 24 39)));
35854
+ --rb-surface-heading-color: var(--rb-modal-heading, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
35855
+ --rb-surface-link-color: var(--rb-modal-link, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
35856
+ --rb-surface-supporting-color: var(--rb-modal-supporting, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
35432
35857
  border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
35433
35858
  border-radius: var(--rb-modal-radius, var(--radius-card));
35434
35859
  box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
@@ -35448,7 +35873,7 @@ const containerResponsiveThemeCss = `/*
35448
35873
  font-family: var(--font-heading);
35449
35874
  font-size: 1.0625rem;
35450
35875
  font-weight: 600;
35451
- color: rgb(var(--tb-text));
35876
+ color: var(--rb-surface-heading-color, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))));
35452
35877
  }
35453
35878
 
35454
35879
  :where(.theme-scope) .rb-modal__close {
@@ -35458,7 +35883,7 @@ const containerResponsiveThemeCss = `/*
35458
35883
  height: 2.25rem;
35459
35884
  padding: 0;
35460
35885
  line-height: 1;
35461
- color: rgb(var(--tb-mutedText));
35886
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText, 100 116 139))));
35462
35887
  cursor: pointer;
35463
35888
  display: grid;
35464
35889
  place-items: center;
@@ -35466,7 +35891,7 @@ const containerResponsiveThemeCss = `/*
35466
35891
  }
35467
35892
 
35468
35893
  :where(.theme-scope) .rb-modal__close:hover {
35469
- color: rgb(var(--tb-text));
35894
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
35470
35895
  background: rgba(var(--tb-border), 0.2);
35471
35896
  }
35472
35897
 
@@ -35477,7 +35902,7 @@ const containerResponsiveThemeCss = `/*
35477
35902
 
35478
35903
  :where(.theme-scope) .rb-modal__body {
35479
35904
  padding: 0.875rem 1rem 1rem;
35480
- color: rgb(var(--tb-text));
35905
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
35481
35906
  font-size: 0.9375rem;
35482
35907
  line-height: 1.45;
35483
35908
  }
@@ -35637,7 +36062,7 @@ const containerResponsiveThemeCss = `/*
35637
36062
  & h6 {
35638
36063
  font-family: var(--font-heading);
35639
36064
  /* Color is set by generateTypographyCss.ts with full cascade:
35640
- --section-heading-color -> --section-text-color -> --hc-hN -> --hc-heading -> inherit */
36065
+ --rb-surface-heading-color -> --rb-surface-text-color -> --hc-hN -> --hc-heading -> global text */
35641
36066
  font-weight: var(--font-weight-heading);
35642
36067
  text-transform: var(--tt-heading);
35643
36068
  font-variant-caps: var(--fv-heading);
@@ -35785,7 +36210,7 @@ const containerResponsiveThemeCss = `/*
35785
36210
 
35786
36211
  /* Neutral prose uses theme text color by default */
35787
36212
  :where(.theme-scope) .rb-prose-neutral {
35788
- color: var(--section-text-color, rgb(var(--tb-text)));
36213
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
35789
36214
  }
35790
36215
 
35791
36216
  :where(.theme-scope) .rb-prose p,
@@ -35819,8 +36244,14 @@ const containerResponsiveThemeCss = `/*
35819
36244
 
35820
36245
  :where(.theme-scope) .rb-prose a {
35821
36246
  --rb-prose-effective-link-color: var(
35822
- --section-link-color,
35823
- var(--rb-prose-link-color, rgb(var(--tb-primary)))
36247
+ --rb-surface-link-color,
36248
+ var(
36249
+ --rb-surface-text-color,
36250
+ var(
36251
+ --rb-prose-link-color,
36252
+ rgb(var(--tb-primary, var(--tb-text, 17 24 39)))
36253
+ )
36254
+ )
35824
36255
  );
35825
36256
  color: var(--rb-prose-effective-link-color);
35826
36257
  text-decoration-line: var(--rb-prose-link-decoration-line, underline);
@@ -35831,14 +36262,11 @@ const containerResponsiveThemeCss = `/*
35831
36262
  );
35832
36263
  text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
35833
36264
  text-decoration-color: var(
35834
- --section-link-decoration-color,
35835
- var(
35836
- --rb-prose-link-decoration-color,
35837
- color-mix(
35838
- in srgb,
35839
- var(--rb-prose-effective-link-color) 35%,
35840
- transparent
35841
- )
36265
+ --rb-prose-link-decoration-color,
36266
+ color-mix(
36267
+ in srgb,
36268
+ var(--rb-prose-effective-link-color) 35%,
36269
+ transparent
35842
36270
  )
35843
36271
  );
35844
36272
  transition:
@@ -35862,7 +36290,7 @@ const containerResponsiveThemeCss = `/*
35862
36290
 
35863
36291
  :where(.theme-scope) .rb-prose blockquote {
35864
36292
  /* Blockquotes use muted text color */
35865
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
36293
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText, 100 116 139))));
35866
36294
  border-left-color: rgb(var(--tb-border));
35867
36295
  }
35868
36296
 
@@ -36896,6 +37324,10 @@ const containerResponsiveThemeCss = `/*
36896
37324
  :where(.theme-scope) .card-surface {
36897
37325
  background: rgb(var(--tb-surface));
36898
37326
  color: rgb(var(--tb-onSurface, var(--tb-text)));
37327
+ --rb-surface-text-color: rgb(var(--tb-onSurface, var(--tb-text)));
37328
+ --rb-surface-heading-color: rgb(var(--tb-onSurface, var(--tb-text)));
37329
+ --rb-surface-link-color: rgb(var(--tb-onSurface, var(--tb-text)));
37330
+ --rb-surface-supporting-color: rgb(var(--tb-onSurface, var(--tb-text)));
36899
37331
  border: 1px solid rgb(var(--tb-border));
36900
37332
  border-radius: var(--radius-card);
36901
37333
  box-shadow: var(--shadow-elev);
@@ -37039,6 +37471,10 @@ const containerResponsiveThemeCss = `/*
37039
37471
  padding: clamp(1rem, 2vw, 1.5rem);
37040
37472
  background: var(--rb-reg-surface-bg, rgb(var(--tb-surface, 248 250 252)));
37041
37473
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
37474
+ --rb-surface-text-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
37475
+ --rb-surface-heading-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
37476
+ --rb-surface-link-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
37477
+ --rb-surface-supporting-color: var(--rb-reg-on-surface-muted, var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42)))));
37042
37478
  transition: border-color var(--rb-block-transition, 150ms) ease;
37043
37479
  width: 100%;
37044
37480
  max-width: 800px;
@@ -40126,6 +40562,350 @@ const containerResponsiveThemeCss = `/*
40126
40562
  }
40127
40563
  }
40128
40564
 
40565
+ /* -----------------------------------------------------------------------------
40566
+ * Week Board View
40567
+ * Compact "class day-board": day columns side by side, one card per class,
40568
+ * three-state availability (available / filling / waitlist), and a footer CTA.
40569
+ * ----------------------------------------------------------------------------- */
40570
+
40571
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board {
40572
+ /* Status accent tokens — map the three availability states onto theme colours.
40573
+ * available -> secondary, filling -> accent, waitlist -> muted text. */
40574
+ --ec-status-available: rgb(var(--tb-secondary));
40575
+ --ec-status-filling: rgb(var(--tb-accent));
40576
+ --ec-status-waitlist: rgba(var(--tb-text), 0.4);
40577
+ --event-week-board-cols: 7;
40578
+
40579
+ border: 1px solid var(--ec-border);
40580
+ border-radius: var(--rb-block-radius);
40581
+ background-color: var(--ec-surface);
40582
+ color: var(--ec-text);
40583
+ overflow: hidden;
40584
+ box-shadow: 0 14px 34px -24px rgba(var(--tb-text), 0.35);
40585
+ }
40586
+
40587
+ /* Top bar: title + legend */
40588
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-top {
40589
+ display: flex;
40590
+ align-items: center;
40591
+ justify-content: space-between;
40592
+ gap: 1rem;
40593
+ flex-wrap: wrap;
40594
+ padding: 1.1rem 1.5rem;
40595
+ background-color: var(--ec-header-bg);
40596
+ border-bottom: 1px solid var(--ec-border-subtle);
40597
+ }
40598
+
40599
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-title {
40600
+ font-size: 0.8125rem;
40601
+ font-weight: 600;
40602
+ letter-spacing: 0.12em;
40603
+ text-transform: uppercase;
40604
+ color: rgb(var(--tb-primary));
40605
+ }
40606
+
40607
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend {
40608
+ display: flex;
40609
+ align-items: center;
40610
+ gap: 1.1rem;
40611
+ flex-wrap: wrap;
40612
+ font-size: 0.6875rem;
40613
+ letter-spacing: 0.03em;
40614
+ opacity: 0.75;
40615
+ }
40616
+
40617
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-item {
40618
+ display: inline-flex;
40619
+ align-items: center;
40620
+ gap: 0.4rem;
40621
+ }
40622
+
40623
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot {
40624
+ width: 0.55rem;
40625
+ height: 0.55rem;
40626
+ border-radius: 50%;
40627
+ display: inline-block;
40628
+ }
40629
+
40630
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="available"] {
40631
+ background-color: var(--ec-status-available);
40632
+ }
40633
+
40634
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="filling"] {
40635
+ background-color: var(--ec-status-filling);
40636
+ }
40637
+
40638
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend-dot[data-status="waitlist"] {
40639
+ background-color: var(--ec-status-waitlist);
40640
+ }
40641
+
40642
+ /* Day columns grid */
40643
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-grid {
40644
+ display: grid;
40645
+ grid-template-columns: repeat(var(--event-week-board-cols), minmax(0, 1fr));
40646
+ }
40647
+
40648
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day {
40649
+ display: flex;
40650
+ flex-direction: column;
40651
+ min-height: 15rem;
40652
+ /* Tabular column rule. Driven by the theme border tokens so borderless site
40653
+ * styles (border.width: 'none' -> --rb-border-width: 0) render no grid at all,
40654
+ * while hairline/thin/thick themes get a crisp full-strength divider. */
40655
+ border-right: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
40656
+ }
40657
+
40658
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day:last-child {
40659
+ border-right: none;
40660
+ }
40661
+
40662
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-head {
40663
+ display: flex;
40664
+ align-items: baseline;
40665
+ gap: 0.4rem;
40666
+ padding: 0.9rem 0.9rem 0.65rem;
40667
+ /* Header-row underline — same border-token gating as the column rules. */
40668
+ border-bottom: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
40669
+ }
40670
+
40671
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--today .event-week-board-day-head {
40672
+ background-color: var(--ec-today-bg);
40673
+ }
40674
+
40675
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-abbr {
40676
+ font-size: 0.6875rem;
40677
+ font-weight: 600;
40678
+ letter-spacing: 0.1em;
40679
+ text-transform: uppercase;
40680
+ opacity: 0.65;
40681
+ }
40682
+
40683
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--today .event-week-board-day-abbr {
40684
+ opacity: 1;
40685
+ color: var(--ec-today-text);
40686
+ }
40687
+
40688
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-num {
40689
+ font-size: 0.8125rem;
40690
+ font-weight: 600;
40691
+ opacity: 0.5;
40692
+ }
40693
+
40694
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-body {
40695
+ display: flex;
40696
+ flex-direction: column;
40697
+ gap: 0.65rem;
40698
+ padding: 0.9rem;
40699
+ flex: 1;
40700
+ }
40701
+
40702
+ /* Class card */
40703
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
40704
+ display: flex;
40705
+ flex-direction: column;
40706
+ gap: 0.45rem;
40707
+ padding: 0.8rem 0.85rem;
40708
+ border: 1px solid var(--ec-border-subtle);
40709
+ border-left: 3px solid var(--ec-status-available);
40710
+ border-radius: calc(var(--rb-block-radius) / 1.5);
40711
+ background-color: var(--ec-surface);
40712
+ color: inherit;
40713
+ text-decoration: none;
40714
+ transition:
40715
+ transform var(--rb-block-transition) ease,
40716
+ box-shadow var(--rb-block-transition) ease,
40717
+ border-color var(--rb-block-transition) ease;
40718
+ }
40719
+
40720
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card[data-status="filling"] {
40721
+ border-left-color: var(--ec-status-filling);
40722
+ }
40723
+
40724
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card[data-status="waitlist"] {
40725
+ border-left-color: var(--ec-status-waitlist);
40726
+ }
40727
+
40728
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card:hover {
40729
+ transform: translateY(-2px);
40730
+ box-shadow: 0 6px 16px -8px rgba(var(--tb-text), 0.28);
40731
+ border-color: rgba(var(--tb-primary), 0.4);
40732
+ }
40733
+
40734
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card:focus-visible {
40735
+ outline: 2px solid rgb(var(--tb-primary));
40736
+ outline-offset: 2px;
40737
+ }
40738
+
40739
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-title {
40740
+ font-family: var(--font-heading, inherit);
40741
+ font-size: 0.9375rem;
40742
+ font-weight: 600;
40743
+ line-height: 1.2;
40744
+ }
40745
+
40746
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-time {
40747
+ font-size: 0.75rem;
40748
+ letter-spacing: 0.01em;
40749
+ opacity: 0.7;
40750
+ }
40751
+
40752
+ /* Capacity pill */
40753
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill {
40754
+ align-self: flex-start;
40755
+ display: inline-flex;
40756
+ align-items: center;
40757
+ padding: 0.15rem 0.6rem;
40758
+ border-radius: 999px;
40759
+ font-size: 0.6875rem;
40760
+ font-weight: 600;
40761
+ letter-spacing: 0.02em;
40762
+ /* Available (default): a calm neutral/muted pill — not a coloured outline.
40763
+ * Filling -> amber and waitlist -> muted outline are handled by the
40764
+ * data-status overrides below. */
40765
+ border: 1px solid var(--ec-border);
40766
+ background-color: rgba(var(--tb-text), 0.06);
40767
+ color: rgba(var(--tb-text), 0.62);
40768
+ border-color: var(--ec-border);
40769
+ }
40770
+
40771
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill[data-status="filling"] {
40772
+ background-color: rgba(var(--tb-accent), 0.14);
40773
+ color: var(--ec-status-filling);
40774
+ border-color: rgba(var(--tb-accent), 0.32);
40775
+ }
40776
+
40777
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card-pill[data-status="waitlist"] {
40778
+ background-color: transparent;
40779
+ color: rgba(var(--tb-text), 0.6);
40780
+ border-color: var(--ec-border);
40781
+ }
40782
+
40783
+ /* Footer */
40784
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-foot {
40785
+ display: flex;
40786
+ align-items: center;
40787
+ justify-content: space-between;
40788
+ gap: 1rem;
40789
+ flex-wrap: wrap;
40790
+ padding: 1.1rem 1.5rem;
40791
+ background-color: var(--ec-header-bg);
40792
+ border-top: 1px solid var(--ec-border-subtle);
40793
+ }
40794
+
40795
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-foot-note {
40796
+ margin: 0;
40797
+ font-size: 0.875rem;
40798
+ opacity: 0.75;
40799
+ }
40800
+
40801
+ /* Responsive: collapse day columns to a stacked list on narrow viewports */
40802
+ @container rb-site (max-width: 1023px) {
40803
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
40804
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-grid {
40805
+ grid-template-columns: 1fr;
40806
+ }
40807
+
40808
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day {
40809
+ min-height: 0;
40810
+ border-right: none;
40811
+ border-bottom: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
40812
+ }
40813
+
40814
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day:last-child {
40815
+ border-bottom: none;
40816
+ }
40817
+
40818
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day--empty {
40819
+ display: none;
40820
+ }
40821
+
40822
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-head {
40823
+ border-bottom: none;
40824
+ padding-bottom: 0.25rem;
40825
+ }
40826
+
40827
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-day-body {
40828
+ flex-direction: row;
40829
+ flex-wrap: wrap;
40830
+ padding-top: 0.35rem;
40831
+ }
40832
+
40833
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
40834
+ flex: 1 1 14rem;
40835
+ }
40836
+ }
40837
+ }
40838
+
40839
+ @container rb-site (max-width: 639px) {
40840
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
40841
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-legend {
40842
+ display: none;
40843
+ }
40844
+
40845
+ :where(.theme-scope) :where([data-block="event-calendar"]) .event-week-board-card {
40846
+ flex: 1 1 100%;
40847
+ }
40848
+ }
40849
+ }
40850
+
40851
+ /* -----------------------------------------------------------------------------
40852
+ * Week-board section band
40853
+ * Give the whole week-board section (head + panel) a subtle surface band so it
40854
+ * reads as a distinct zone from the page — the "testimonials band" pattern.
40855
+ * Painted as a pseudo-element above the section's fallback background layer
40856
+ * (z-index -10) but behind the content, so no block-content wiring is needed.
40857
+ * Surface + hairline rules are token-referenced: on a borderless site style
40858
+ * (--rb-border-width: 0) the band keeps its surface tint but drops the rules.
40859
+ * ----------------------------------------------------------------------------- */
40860
+ :where(.theme-scope) [data-slot="section"]:has(.event-calendar--week-board)::before {
40861
+ content: "";
40862
+ position: absolute;
40863
+ inset: 0;
40864
+ z-index: -9;
40865
+ background-color: rgb(var(--tb-surfaceAlt));
40866
+ border-block: var(--rb-border-width, 1px) solid rgb(var(--tb-border));
40867
+ pointer-events: none;
40868
+ }
40869
+
40870
+ /* -----------------------------------------------------------------------------
40871
+ * Event section head — split (heading left, intro right)
40872
+ * Rendered by the block frame (outside [data-block="event-calendar"]) via
40873
+ * eventSectionHeaderLayoutNodes({ splitClassName }). Lays the heading and its
40874
+ * supporting intro out as a two-column head on wide viewports, stacking on
40875
+ * narrow ones. The section band above provides the distinct background.
40876
+ * ----------------------------------------------------------------------------- */
40877
+ :where(.theme-scope) .event-section-head--split {
40878
+ display: flex;
40879
+ align-items: flex-end;
40880
+ justify-content: space-between;
40881
+ gap: clamp(1.5rem, 4vw, 3.5rem);
40882
+ flex-wrap: wrap;
40883
+ }
40884
+
40885
+ :where(.theme-scope) .event-section-head--split > :where(h1, h2, h3) {
40886
+ margin: 0;
40887
+ }
40888
+
40889
+ :where(.theme-scope) .event-section-head--split > .rb-prose {
40890
+ flex: 1 1 22rem;
40891
+ max-width: 34rem;
40892
+ margin: 0;
40893
+ }
40894
+
40895
+ @container rb-site (max-width: 767px) {
40896
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
40897
+ :where(.theme-scope) .event-section-head--split {
40898
+ flex-direction: column;
40899
+ align-items: flex-start;
40900
+ gap: 0.75rem;
40901
+ }
40902
+
40903
+ :where(.theme-scope) .event-section-head--split > .rb-prose {
40904
+ flex-basis: auto;
40905
+ }
40906
+ }
40907
+ }
40908
+
40129
40909
  /* -----------------------------------------------------------------------------
40130
40910
  * Event Calendar Modals
40131
40911
  * Modal overlays for event details and day events list
@@ -40553,7 +41333,7 @@ const containerResponsiveThemeCss = `/*
40553
41333
  }
40554
41334
 
40555
41335
  :where(.theme-scope) .rb-inline-text-accent-contrast {
40556
- color: var(--section-text-color, rgb(var(--tb-text)));
41336
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
40557
41337
  }
40558
41338
 
40559
41339
  :where(.theme-scope) .rb-inline-text-highlight {
@@ -40564,7 +41344,7 @@ const containerResponsiveThemeCss = `/*
40564
41344
  }
40565
41345
 
40566
41346
  :where(.theme-scope) .rb-inline-text-highlight-soft {
40567
- background: color-mix(in oklab, var(--section-text-color, rgb(var(--tb-text))) 14%, transparent);
41347
+ background: color-mix(in oklab, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))) 14%, transparent);
40568
41348
  }
40569
41349
 
40570
41350
  :where(.theme-scope) .rb-inline-text-highlight-accent {
@@ -40583,7 +41363,7 @@ const containerResponsiveThemeCss = `/*
40583
41363
 
40584
41364
  /* Eyebrow - color only (typography via .rb-eyebrow) */
40585
41365
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow:not(.rb-eyebrow-treatment-accent) {
40586
- color: var(--section-text-color, rgb(var(--tb-text)));
41366
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
40587
41367
  }
40588
41368
 
40589
41369
  /* Subheadline - supporting text below headline */
@@ -40593,7 +41373,7 @@ const containerResponsiveThemeCss = `/*
40593
41373
 
40594
41374
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
40595
41375
  font-size: 1.125rem;
40596
- color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
41376
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText, 100 116 139))));
40597
41377
  }
40598
41378
 
40599
41379
  @container rb-site (min-width: 640px) {
@@ -40684,7 +41464,7 @@ const containerResponsiveThemeCss = `/*
40684
41464
 
40685
41465
  /* CTA content/body text */
40686
41466
  :where(.theme-scope) :where([data-block="cta-full"]) .cta-content {
40687
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
41467
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-mutedText, 100 116 139))));
40688
41468
  }
40689
41469
 
40690
41470
  /* CTA button row container */
@@ -40784,7 +41564,7 @@ const containerResponsiveThemeCss = `/*
40784
41564
  /* Form intro text */
40785
41565
  :where(.theme-scope) :where([data-block="form"]) .form-copy-intro {
40786
41566
  font-size: 1rem;
40787
- color: var(--section-text-color, rgb(var(--tb-text)));
41567
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
40788
41568
  }
40789
41569
 
40790
41570
  /* =============================================================================
@@ -41143,6 +41923,10 @@ const containerResponsiveThemeCss = `/*
41143
41923
  --rb-modal-overlay-bg: rgb(var(--tb-text, 0 0 0) / 0.6);
41144
41924
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
41145
41925
  --rb-modal-z-index: 20000;
41926
+ --rb-modal-text: rgb(var(--tb-text, 17 24 39));
41927
+ --rb-modal-heading: rgb(var(--tb-text, 17 24 39));
41928
+ --rb-modal-link: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
41929
+ --rb-modal-supporting: rgb(var(--tb-mutedText, 100 116 139));
41146
41930
  --shop-card-radius: var(--rb-block-radius, var(--radius-card, 0.75rem));
41147
41931
  --shop-control-radius: var(--rb-input-radius, var(--radius-control, 0.375rem));
41148
41932
  }
@@ -41200,6 +41984,11 @@ const containerResponsiveThemeCss = `/*
41200
41984
  /* Product card */
41201
41985
  :where(.theme-scope) .shop__card {
41202
41986
  background: rgb(var(--tb-surface));
41987
+ color: rgb(var(--tb-text, 17 24 39));
41988
+ --rb-surface-text-color: rgb(var(--tb-text, 17 24 39));
41989
+ --rb-surface-heading-color: rgb(var(--tb-text, 17 24 39));
41990
+ --rb-surface-link-color: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
41991
+ --rb-surface-supporting-color: rgb(var(--tb-mutedText, 100 116 139));
41203
41992
  border: 1px solid rgb(var(--tb-border));
41204
41993
  border-radius: var(--shop-card-radius);
41205
41994
  padding: 1.5rem;
@@ -41354,6 +42143,11 @@ const containerResponsiveThemeCss = `/*
41354
42143
  border: 1px solid rgb(var(--tb-border));
41355
42144
  border-radius: var(--shop-card-radius);
41356
42145
  background: rgb(var(--tb-surface));
42146
+ color: rgb(var(--tb-text, 17 24 39));
42147
+ --rb-surface-text-color: rgb(var(--tb-text, 17 24 39));
42148
+ --rb-surface-heading-color: rgb(var(--tb-text, 17 24 39));
42149
+ --rb-surface-link-color: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
42150
+ --rb-surface-supporting-color: rgb(var(--tb-mutedText, 100 116 139));
41357
42151
  }
41358
42152
 
41359
42153
  :where(.theme-scope) :where([data-block="shop"]) .rb-state-icon--success {
@@ -41426,6 +42220,11 @@ const containerResponsiveThemeCss = `/*
41426
42220
  margin: 0 auto;
41427
42221
  padding: 2rem;
41428
42222
  background: var(--cp-card-bg);
42223
+ color: var(--cp-text);
42224
+ --rb-surface-text-color: var(--cp-text);
42225
+ --rb-surface-heading-color: var(--cp-text);
42226
+ --rb-surface-link-color: var(--cp-primary);
42227
+ --rb-surface-supporting-color: var(--cp-muted);
41429
42228
  border: 1px solid var(--cp-card-border);
41430
42229
  border-radius: var(--cp-card-radius);
41431
42230
  }
@@ -41554,6 +42353,11 @@ const containerResponsiveThemeCss = `/*
41554
42353
  padding: 3rem 2rem;
41555
42354
  text-align: center;
41556
42355
  background: var(--cp-card-bg);
42356
+ color: var(--cp-text);
42357
+ --rb-surface-text-color: var(--cp-text);
42358
+ --rb-surface-heading-color: var(--cp-text);
42359
+ --rb-surface-link-color: var(--cp-primary);
42360
+ --rb-surface-supporting-color: var(--cp-muted);
41557
42361
  border: 1px dashed var(--cp-card-border);
41558
42362
  border-radius: var(--cp-card-radius);
41559
42363
  }
@@ -41566,6 +42370,11 @@ const containerResponsiveThemeCss = `/*
41566
42370
  /* Card */
41567
42371
  :where(.theme-scope) :where([data-block="customer-portal"]) .cp-card {
41568
42372
  background: var(--cp-card-bg);
42373
+ color: var(--cp-text);
42374
+ --rb-surface-text-color: var(--cp-text);
42375
+ --rb-surface-heading-color: var(--cp-text);
42376
+ --rb-surface-link-color: var(--cp-primary);
42377
+ --rb-surface-supporting-color: var(--cp-muted);
41569
42378
  border: 1px solid var(--cp-card-border);
41570
42379
  border-radius: var(--cp-card-radius);
41571
42380
  padding: 1.25rem;
@@ -41730,6 +42539,11 @@ const containerResponsiveThemeCss = `/*
41730
42539
  /* Table */
41731
42540
  :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table-wrap {
41732
42541
  background: var(--cp-card-bg);
42542
+ color: var(--cp-text);
42543
+ --rb-surface-text-color: var(--cp-text);
42544
+ --rb-surface-heading-color: var(--cp-text);
42545
+ --rb-surface-link-color: var(--cp-primary);
42546
+ --rb-surface-supporting-color: var(--cp-muted);
41733
42547
  border: 1px solid var(--cp-card-border);
41734
42548
  border-radius: var(--cp-card-radius);
41735
42549
  }
@@ -42291,6 +43105,143 @@ const containerResponsiveThemeCss = `/*
42291
43105
  }
42292
43106
 
42293
43107
 
43108
+ /* =============================================================================
43109
+ * Variant: featured-editorial
43110
+ *
43111
+ * An asymmetric layout: a large featured (spruce-ink) quote card beside a
43112
+ * column of stacked white cards. Renders NO avatars. Colours are palette
43113
+ * tokens only. Node structure is built in testimonialsCarousel.ts.
43114
+ * ============================================================================= */
43115
+
43116
+ /* Section head: heading left, lead-in line to the right; stacks on mobile. */
43117
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-head {
43118
+ display: flex;
43119
+ flex-direction: column;
43120
+ align-items: flex-start;
43121
+ gap: 0.875rem;
43122
+ }
43123
+
43124
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-leadin {
43125
+ max-width: 30rem;
43126
+ }
43127
+
43128
+ @container rb-site (min-width: 768px) {
43129
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
43130
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-head {
43131
+ flex-direction: row;
43132
+ align-items: flex-end;
43133
+ justify-content: space-between;
43134
+ gap: 1.5rem;
43135
+ }
43136
+ }
43137
+ }
43138
+
43139
+ /* Card grid: featured (wider) beside the stacked column. Single column on
43140
+ * small screens. */
43141
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-grid {
43142
+ display: grid;
43143
+ grid-template-columns: minmax(0, 1fr);
43144
+ gap: 1.25rem;
43145
+ align-items: stretch;
43146
+ }
43147
+
43148
+ @container rb-site (min-width: 1024px) {
43149
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
43150
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-grid {
43151
+ grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
43152
+ }
43153
+ }
43154
+ }
43155
+
43156
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-col {
43157
+ display: grid;
43158
+ gap: 1.25rem;
43159
+ align-content: start;
43160
+ }
43161
+
43162
+ /* Base card (white surface) */
43163
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card {
43164
+ display: flex;
43165
+ flex-direction: column;
43166
+ height: 100%;
43167
+ border-radius: var(--rb-block-radius);
43168
+ padding: 1.875rem 1.875rem 1.625rem;
43169
+ background: rgb(var(--tb-surface));
43170
+ border: 1px solid rgba(var(--tb-border), 0.9);
43171
+ box-shadow: 0 1px 2px rgba(var(--tb-shadow, 0 0 0), 0.05);
43172
+ }
43173
+
43174
+ /* Featured (spruce-ink) card */
43175
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card--feature {
43176
+ padding: 2.5rem;
43177
+ background: rgb(var(--tb-primary));
43178
+ border-color: transparent;
43179
+ color: rgb(var(--tb-onPrimary));
43180
+ }
43181
+
43182
+ /* Amber quote mark, oversized serif */
43183
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-qmark {
43184
+ display: block;
43185
+ height: 1.6rem;
43186
+ font-family: var(--font-heading, Georgia, serif);
43187
+ font-style: italic;
43188
+ font-size: 3.375rem;
43189
+ line-height: 0.6;
43190
+ color: rgb(var(--tb-secondary));
43191
+ }
43192
+
43193
+ /* Quote body. The inner <p> is targeted directly (not via :where) so the
43194
+ * serif display font and sizing win over the theme's base paragraph rule. */
43195
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-quote {
43196
+ flex: 1 1 auto;
43197
+ margin-top: 1.25rem;
43198
+ }
43199
+
43200
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-quote p {
43201
+ margin: 0;
43202
+ font-family: var(--font-heading, Georgia, serif);
43203
+ font-size: 1.15rem;
43204
+ line-height: 1.5;
43205
+ color: rgb(var(--tb-text));
43206
+ }
43207
+
43208
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card--feature .rb-testimonials-fe-quote p {
43209
+ color: rgb(var(--tb-onPrimary));
43210
+ font-size: clamp(1.375rem, 2.4vw, 1.6875rem);
43211
+ line-height: 1.42;
43212
+ letter-spacing: -0.01em;
43213
+ }
43214
+
43215
+ /* Attribution: name (bold) + context line, no avatar */
43216
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-meta {
43217
+ display: flex;
43218
+ flex-direction: column;
43219
+ gap: 0.25rem;
43220
+ margin-top: 1.625rem;
43221
+ }
43222
+
43223
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-name {
43224
+ font-weight: 600;
43225
+ font-size: 0.97rem;
43226
+ color: rgb(var(--tb-text));
43227
+ }
43228
+
43229
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-context {
43230
+ font-size: 0.78rem;
43231
+ letter-spacing: 0.02em;
43232
+ color: rgb(var(--tb-mutedText));
43233
+ }
43234
+
43235
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card--feature .rb-testimonials-fe-name {
43236
+ color: rgb(var(--tb-onPrimary));
43237
+ }
43238
+
43239
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-fe-card--feature .rb-testimonials-fe-context {
43240
+ color: rgb(var(--tb-onPrimary));
43241
+ opacity: 0.7;
43242
+ }
43243
+
43244
+
42294
43245
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
42295
43246
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
42296
43247
  height: var(--rb-testimonial-carousel-arrow-size);
@@ -43437,7 +44388,7 @@ const containerResponsiveThemeCss = `/*
43437
44388
 
43438
44389
  :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
43439
44390
  font-size: 1rem;
43440
- color: var(--section-text-color, rgb(var(--tb-text)));
44391
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
43441
44392
  opacity: 0.85;
43442
44393
  }
43443
44394
 
@@ -43486,7 +44437,7 @@ const containerResponsiveThemeCss = `/*
43486
44437
  margin-top: 0.75rem;
43487
44438
  font-size: 1rem;
43488
44439
  line-height: 1.6;
43489
- color: var(--section-text-color, rgb(var(--tb-text)));
44440
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
43490
44441
  text-align: center;
43491
44442
  }
43492
44443
 
@@ -43568,7 +44519,7 @@ const containerResponsiveThemeCss = `/*
43568
44519
 
43569
44520
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
43570
44521
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
43571
- color: var(--section-text-color, rgb(var(--tb-text)));
44522
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
43572
44523
  }
43573
44524
 
43574
44525
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
@@ -43966,7 +44917,7 @@ const containerResponsiveThemeCss = `/*
43966
44917
 
43967
44918
  :where(.theme-scope) .event-compact-row-title {
43968
44919
  margin: 0;
43969
- color: var(--section-heading-color, rgb(var(--tb-primary, 0 0 0)));
44920
+ color: var(--rb-surface-heading-color, var(--rb-surface-text-color, rgb(var(--tb-primary, var(--tb-text, 17 24 39)))));
43970
44921
  font-family: var(--font-heading, var(--font-body, inherit));
43971
44922
  font-size: clamp(1.05rem, 1rem + 0.35vw, 1.3rem);
43972
44923
  font-weight: 400;
@@ -44628,27 +45579,41 @@ const containerResponsiveThemeCss = `/*
44628
45579
  background: rgb(var(--tb-surface));
44629
45580
  }
44630
45581
  :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 1) {
45582
+ background: rgb(var(--tb-surface));
44631
45583
  color: rgb(var(--tb-onSurface));
45584
+ --rb-surface-text-color: rgb(var(--tb-onSurface));
45585
+ --rb-surface-heading-color: rgb(var(--tb-onSurface));
45586
+ --rb-surface-link-color: rgb(var(--tb-onSurface));
45587
+ --rb-surface-supporting-color: rgb(var(--tb-onSurface));
44632
45588
  }
44633
45589
 
44634
45590
  :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 2) > .rb-bg-surface {
44635
45591
  background: rgb(var(--tb-secondary));
44636
45592
  }
44637
45593
  :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 2) {
45594
+ background: rgb(var(--tb-secondary));
44638
45595
  color: rgb(var(--tb-onSecondary));
45596
+ --rb-surface-text-color: rgb(var(--tb-onSecondary));
45597
+ --rb-surface-heading-color: rgb(var(--tb-onSecondary));
45598
+ --rb-surface-link-color: rgb(var(--tb-onSecondary));
45599
+ --rb-surface-supporting-color: rgb(var(--tb-onSecondary));
44639
45600
  }
44640
45601
 
44641
45602
  :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 3) > .rb-bg-surface {
44642
45603
  background: rgb(var(--tb-primary));
44643
45604
  }
44644
45605
  :where(.theme-scope) .rb-card-treatment-color-blocked:nth-child(3n + 3) {
45606
+ background: rgb(var(--tb-primary));
44645
45607
  color: rgb(var(--tb-onPrimary));
45608
+ --rb-surface-text-color: rgb(var(--tb-onPrimary));
45609
+ --rb-surface-heading-color: rgb(var(--tb-onPrimary));
45610
+ --rb-surface-link-color: rgb(var(--tb-onPrimary));
45611
+ --rb-surface-supporting-color: rgb(var(--tb-onPrimary));
44646
45612
  }
44647
45613
 
44648
- /* Body copy carries an inline muted colour from the block; force it to the
44649
- * card's on-colour so it reads on every block (inline style needs !important). */
45614
+ /* Keep the intended visual hierarchy; the body color itself now resolves via
45615
+ * the nearest surface provider instead of requiring an inline override. */
44650
45616
  :where(.theme-scope) .rb-card-treatment-color-blocked .rb-feature-card-body {
44651
- color: inherit !important;
44652
45617
  opacity: 0.9;
44653
45618
  }
44654
45619
 
@@ -59141,9 +60106,11 @@ function RichTextField({ path, backend, config }) {
59141
60106
  onPickImage,
59142
60107
  linkItems,
59143
60108
  onRequestLinkItems: loadLinkItems,
59144
- toolbarTone: "light",
59145
- toolbarPortalToChrome: false,
59146
- toolbarAlwaysVisible: true,
60109
+ toolbarLayout: {
60110
+ kind: "inline",
60111
+ tone: "light",
60112
+ visibility: { kind: "always" }
60113
+ },
59147
60114
  renderContent: (content) => theme ? /* @__PURE__ */ jsx(ThemeScope, {
59148
60115
  theme,
59149
60116
  children: /* @__PURE__ */ jsx("div", {
@@ -65503,10 +66470,10 @@ function LinkedEntryEditEventBridge() {
65503
66470
  //#region ../preview-next/src/client/preview/PreviewShellLayout.tsx
65504
66471
  const previewContainerResponsiveEnabled = process.env.NEXT_PUBLIC_ENABLE_PREVIEW_CONTAINER_RESPONSIVE !== "false";
65505
66472
  const PreviewEditorSidebar = React.lazy(async () => {
65506
- return { default: (await import("./PreviewEditorSidebar-ywqcYjTB.mjs")).PreviewEditorSidebar };
66473
+ return { default: (await import("./PreviewEditorSidebar-CBMhU9p_.mjs")).PreviewEditorSidebar };
65507
66474
  });
65508
66475
  const PreviewEditorUI = React.lazy(async () => {
65509
- return { default: (await import("./PreviewEditorUI-DApUNF6g.mjs")).PreviewEditorUI };
66476
+ return { default: (await import("./PreviewEditorUI-C5KEw4M8.mjs")).PreviewEditorUI };
65510
66477
  });
65511
66478
  const previewPaneContainmentStyle = {
65512
66479
  contain: "layout paint",