@riverbankcms/sdk 0.98.0 → 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/{PreviewEditorSidebar-CG3SSJND.mjs → PreviewEditorSidebar-TPOKCCKY.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-RHNGKAAU.mjs → PreviewEditorUI-Y347GLC2.mjs} +3 -3
  3. package/dist/SdkPreviewModeRuntime-OGTXRQ4M.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +36 -36
  5. package/dist/_dts/api/src/billing.d.ts +2 -0
  6. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +5 -1
  7. package/dist/_dts/api/src/endpoints.d.ts +8 -0
  8. package/dist/_dts/api/src/index.d.ts +1 -1
  9. package/dist/_dts/api/src/siteOperations.d.ts +65 -1
  10. package/dist/_dts/billing/src/site-arrangements.d.ts +151 -0
  11. package/dist/_dts/billing/src/subscriptions/store.d.ts +2 -0
  12. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/resolveThumbnail.d.ts +2 -1
  13. package/dist/_dts/blocks/src/PageRenderer.d.ts +6 -0
  14. package/dist/_dts/blocks/src/system/runtime/components/booking/DatePicker.d.ts +6 -2
  15. package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +3 -1
  16. package/dist/_dts/blocks/src/system/runtime/components/booking/TimeSlotSelector.d.ts +10 -4
  17. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +2 -2
  18. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +11 -0
  19. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/StepIndicator.d.ts +3 -1
  20. package/dist/_dts/blocks/src/system/runtime/shared/components/FeedbackMessage.d.ts +2 -1
  21. package/dist/_dts/blocks/src/system/runtime/{nodes/event-registration → shared/components}/SelectableOptionCard.d.ts +11 -2
  22. package/dist/_dts/blocks/src/system/runtime/shared/components/StepIndicator.d.ts +16 -5
  23. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -0
  24. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  25. package/dist/_dts/blocks/src/utils/date-formatting.d.ts +17 -1
  26. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +274 -30
  27. package/dist/_dts/sdk/src/__mocks__/next-cache.d.ts +1 -1
  28. package/dist/_dts/sdk/src/cli/commands/push.d.ts +13 -0
  29. package/dist/_dts/sdk/src/cli/merge-remote/entryMergeReport.d.ts +6 -18
  30. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -4
  31. package/dist/_dts/sdk/src/cli/merge-remote/pageMergeReport.d.ts +6 -18
  32. package/dist/_dts/sdk/src/cli/merge-remote/pageSnapshots.d.ts +2 -4
  33. package/dist/_dts/sdk/src/cli/merge-remote/sharedBaseSnapshots.d.ts +32 -0
  34. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergePlan.d.ts +27 -0
  35. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergeReport.d.ts +63 -0
  36. package/dist/_dts/sdk/src/client/index.d.ts +6 -0
  37. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +6 -1
  38. package/dist/_dts/sdk/src/next/types.d.ts +19 -0
  39. package/dist/_dts/sdk/src/prebuild/loader.d.ts +8 -1
  40. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  41. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -0
  42. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +6 -0
  43. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +8 -0
  44. package/dist/_dts/sdk/src/rendering/index.d.ts +7 -7
  45. package/dist/_dts/sdk/src/rendering/overrides.d.ts +2 -0
  46. package/dist/_dts/sdk/src/routing/resolveRoute.d.ts +18 -0
  47. package/dist/_dts/sdk/src/test/apiClient.d.ts +17 -0
  48. package/dist/_dts/sdk/src/test/bunDom.setup.d.ts +1 -0
  49. package/dist/_dts/sdk/src/test/env.d.ts +4 -0
  50. package/dist/_dts/sdk/src/version.d.ts +1 -1
  51. package/dist/_dts/site-commands/src/commands.d.ts +3 -3
  52. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  53. package/dist/_dts/theme-core/src/interactive/generateBaseCSS.d.ts +6 -0
  54. package/dist/_dts/theme-core/src/status/contextualColors.d.ts +6 -0
  55. package/dist/_dts/theme-core/src/status/index.d.ts +1 -0
  56. package/dist/{chunk-H24OU7WG.mjs → chunk-4HXF2QLH.mjs} +2 -2
  57. package/dist/{chunk-QPXE2OUZ.mjs → chunk-EMJIT3ZJ.mjs} +1 -1
  58. package/dist/{chunk-PKDPQHB5.mjs → chunk-PM7HGDHM.mjs} +2 -2
  59. package/dist/{chunk-DBRI3PQF.mjs → chunk-XO34WBBP.mjs} +1383 -1143
  60. package/dist/{chunk-6WDBXCPX.mjs → chunk-YGTTEVUM.mjs} +7 -7
  61. package/dist/{chunk-V2BYFSPW.mjs → chunk-YWTCCOSF.mjs} +8 -0
  62. package/dist/cli/index.mjs +1010 -921
  63. package/dist/client/{accordion-Q2BDNL53.mjs → accordion-QSUEYL4L.mjs} +2 -2
  64. package/dist/client/{bookingForm-ZMP4P7EK.mjs → bookingForm-QYGAHPDP.mjs} +364 -300
  65. package/dist/client/bookings.mjs +697 -411
  66. package/dist/client/{carousel-LW3UXPWO.mjs → carousel-SM2LEWAU.mjs} +3 -3
  67. package/dist/client/{cart-Z6D3KS6K.mjs → cart-3N3SFKNQ.mjs} +7 -7
  68. package/dist/client/{checkout-YMT2QJQM.mjs → checkout-YFAYPKPZ.mjs} +7 -7
  69. package/dist/client/{chunk-XNTHVZ25.mjs → chunk-5DLGREUB.mjs} +1 -1
  70. package/dist/client/{chunk-SK2BMD22.mjs → chunk-CLZ7NBSP.mjs} +147 -75
  71. package/dist/client/{chunk-R4XK3CKR.mjs → chunk-CYJ3MUFP.mjs} +6 -5
  72. package/dist/client/{chunk-JNE6UI6U.mjs → chunk-H3H3ODO7.mjs} +1 -1
  73. package/dist/client/{chunk-IEOECM7U.mjs → chunk-HPEQ4YWW.mjs} +28 -73
  74. package/dist/client/{chunk-PCHACQEB.mjs → chunk-IIUIKJ4K.mjs} +15 -7
  75. package/dist/client/{chunk-KDP7ZRZV.mjs → chunk-IOAHWAQG.mjs} +2 -0
  76. package/dist/client/{chunk-26ZBRXFR.mjs → chunk-JTKBF3W2.mjs} +3 -3
  77. package/dist/client/{chunk-OLAOAZEO.mjs → chunk-K7KTSACR.mjs} +1 -1
  78. package/dist/client/{chunk-ET2MDQQT.mjs → chunk-R32M5HFS.mjs} +6 -6
  79. package/dist/client/{chunk-DRRQ7QSL.mjs → chunk-WEVT46PX.mjs} +3 -3
  80. package/dist/client/{chunk-HBQEAOG4.mjs → chunk-ZU65LTI3.mjs} +1 -1
  81. package/dist/client/client.mjs +1875 -1581
  82. package/dist/client/{courseRegistration-DGKCMC77.mjs → courseRegistration-LYBE7VVK.mjs} +7 -7
  83. package/dist/client/{eventCalendar-74Z2NNFM.mjs → eventCalendar-FMTB75X6.mjs} +9 -9
  84. package/dist/client/{eventCombined-GK2ODOX2.mjs → eventCombined-E4LUCJXT.mjs} +9 -9
  85. package/dist/client/{eventDetails-MONAGT3N.mjs → eventDetails-GELSRR4Z.mjs} +9 -9
  86. package/dist/client/{eventListing-SKGAO6PS.mjs → eventListing-TB623B6R.mjs} +9 -9
  87. package/dist/client/{eventRegistration-6KISGXRD.mjs → eventRegistration-NRIKHXTI.mjs} +9 -9
  88. package/dist/client/{form-FXPRTXHI.mjs → form-Y4U4IAXE.mjs} +3 -3
  89. package/dist/client/{headerSection-7NAN5WNB.mjs → headerSection-QSOVV5P7.mjs} +3 -3
  90. package/dist/client/hooks.mjs +115 -21
  91. package/dist/client/{locationMap-UERN74U4.mjs → locationMap-QYCAHH7H.mjs} +3 -3
  92. package/dist/client/{newsletterForm-SGWXMJ7U.mjs → newsletterForm-NWHY5TBY.mjs} +3 -3
  93. package/dist/client/{productDetail-HN3HWZQZ.mjs → productDetail-FYDMU2CE.mjs} +7 -7
  94. package/dist/client/{productList-YT22Z5UR.mjs → productList-D76CGACQ.mjs} +7 -7
  95. package/dist/client/rendering/client.mjs +1209 -975
  96. package/dist/client/rendering/islands.mjs +19 -19
  97. package/dist/client/rendering.mjs +1952 -1638
  98. package/dist/client/{shop-TKEDNWUS.mjs → shop-SOUACT5N.mjs} +7 -7
  99. package/dist/preview-next/before-render.mjs +8 -0
  100. package/dist/preview-next/client/runtime.mjs +5 -5
  101. package/dist/preview-next/middleware.mjs +8 -0
  102. package/dist/{sdk-runtime-LWNYCQF2.mjs → sdk-runtime-XPVE3LBA.mjs} +6 -6
  103. package/dist/server/components.mjs +917 -765
  104. package/dist/server/config-validation.mjs +100 -19
  105. package/dist/server/config.mjs +100 -19
  106. package/dist/server/data.mjs +115 -21
  107. package/dist/server/index.mjs +59 -25
  108. package/dist/server/next.mjs +1017 -816
  109. package/dist/server/page-converter.mjs +92 -19
  110. package/dist/server/prebuild-loader.mjs +42 -23
  111. package/dist/server/prebuild.mjs +1 -1
  112. package/dist/server/rendering/server.mjs +932 -767
  113. package/dist/server/rendering.mjs +968 -776
  114. package/dist/server/routing.mjs +162 -36
  115. package/dist/server/server.mjs +156 -32
  116. package/dist/server/theme-bridge.mjs +597 -505
  117. package/dist/server/theme.mjs +5 -4
  118. package/dist/styles/index.css +499 -490
  119. package/package.json +6 -4
  120. package/dist/SdkPreviewModeRuntime-OV5PNJBB.mjs +0 -8
@@ -6654,6 +6654,79 @@ var TokenResolver = class {
6654
6654
  }
6655
6655
  };
6656
6656
 
6657
+ // ../theme-core/src/interactive/generateBaseCSS.ts
6658
+ var FONT_WEIGHT_MAP = {
6659
+ regular: 400,
6660
+ medium: 500,
6661
+ semibold: 600,
6662
+ bold: 700
6663
+ };
6664
+ function generateBaseInteractiveCSS(options) {
6665
+ const {
6666
+ typography,
6667
+ padding,
6668
+ borderRadius,
6669
+ includeTransition = true,
6670
+ includeFlexCenter = false,
6671
+ borderWidth
6672
+ } = options;
6673
+ const rules = [];
6674
+ if (typography.fontWeight !== void 0) {
6675
+ const weight = typeof typography.fontWeight === "number" ? typography.fontWeight : FONT_WEIGHT_MAP[typography.fontWeight];
6676
+ rules.push(`font-weight: ${weight};`);
6677
+ }
6678
+ if (typography.typography === "heading") {
6679
+ rules.push(`font-family: var(--font-heading);`);
6680
+ rules.push(`letter-spacing: var(--ls-heading);`);
6681
+ } else if (typography.typography === "body") {
6682
+ rules.push(`font-family: var(--font-body);`);
6683
+ }
6684
+ if (typography.italic) {
6685
+ rules.push(`font-style: italic;`);
6686
+ }
6687
+ if (typography.textTransform && typography.textTransform !== "none") {
6688
+ rules.push(`text-transform: ${typography.textTransform};`);
6689
+ }
6690
+ if (padding) {
6691
+ if (borderWidth && borderWidth !== "0px") {
6692
+ const paddingParts = padding.split(" ");
6693
+ const verticalPadding = paddingParts[0] || "0.5rem";
6694
+ const horizontalPadding = paddingParts[1] || paddingParts[0] || "1rem";
6695
+ rules.push(`padding-top: calc(${verticalPadding} - ${borderWidth} - 1px);`);
6696
+ rules.push(`padding-bottom: calc(${verticalPadding} - ${borderWidth} - 1px);`);
6697
+ rules.push(`padding-left: calc(${horizontalPadding} - ${borderWidth});`);
6698
+ rules.push(`padding-right: calc(${horizontalPadding} - ${borderWidth});`);
6699
+ } else {
6700
+ rules.push(`padding: ${padding};`);
6701
+ }
6702
+ }
6703
+ if (borderRadius) {
6704
+ rules.push(`border-radius: ${borderRadius};`);
6705
+ }
6706
+ if (includeTransition) {
6707
+ rules.push(`transition: all 200ms ease;`);
6708
+ }
6709
+ if (includeFlexCenter) {
6710
+ rules.push(`display: inline-flex;`);
6711
+ rules.push(`align-items: center;`);
6712
+ rules.push(`justify-content: center;`);
6713
+ rules.push(`cursor: pointer;`);
6714
+ }
6715
+ return rules;
6716
+ }
6717
+ function generateInteractiveChildInheritanceCSS(selector) {
6718
+ return `
6719
+ ${selector} * {
6720
+ font-family: inherit;
6721
+ font-weight: inherit;
6722
+ font-style: inherit;
6723
+ letter-spacing: inherit;
6724
+ text-transform: inherit;
6725
+ color: inherit;
6726
+ }
6727
+ `;
6728
+ }
6729
+
6657
6730
  // ../theme-core/src/buttons/effects/presets/background.ts
6658
6731
  var darkenBackgroundEffect = {
6659
6732
  id: "darken-background",
@@ -8148,7 +8221,9 @@ function resolveAliasSource(enabled) {
8148
8221
  function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
8149
8222
  const out = [];
8150
8223
  const variantId = parseButtonVariantIdForCss(variant.id);
8151
- out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
8224
+ const selector = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}`;
8225
+ out.push(variantBaseRule(variant, selector, global, tokens, theme));
8226
+ out.push({ raw: generateInteractiveChildInheritanceCSS(selector) });
8152
8227
  const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
8153
8228
  if (hoverBg) out.push(hoverBg);
8154
8229
  out.push(variantFocusVisibleRule(variantId, themeId));
@@ -8165,8 +8240,7 @@ function parseButtonVariantIdForCss(value) {
8165
8240
  }
8166
8241
  return variantId;
8167
8242
  }
8168
- function variantBaseRule(variant, variantId, global, themeId, tokens, theme) {
8169
- const selector = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}`;
8243
+ function variantBaseRule(variant, selector, global, tokens, theme) {
8170
8244
  const decls = [];
8171
8245
  decls.push(["font-weight", String(global.fontWeight)]);
8172
8246
  decls.push(["font-family", resolveFontFamily(global)]);
@@ -8802,15 +8876,16 @@ var joyStamp = defineButtonPersonality({
8802
8876
  // 700, matching the mockup's chunky button labels.
8803
8877
  typography: "heading",
8804
8878
  fontWeight: 700,
8879
+ fontSize: "text-lg",
8805
8880
  borderWidth: 2,
8806
8881
  hoverTransform: "none",
8807
8882
  hoverColor: "none"
8808
8883
  },
8809
8884
  sizes: {
8810
- sm: { padding: "0.625rem 1.25rem", fontSize: "text-sm" },
8811
- md: { padding: "0.875rem 1.75rem", fontSize: "text-base" },
8812
- lg: { padding: "1.125rem 2.25rem", fontSize: "text-lg" },
8813
- xl: { padding: "1.25rem 2.75rem", fontSize: "text-xl" }
8885
+ sm: { padding: "0.625rem 1.25rem", fontSize: "text-base" },
8886
+ md: { padding: "0.875rem 1.75rem", fontSize: "text-lg" },
8887
+ lg: { padding: "1.125rem 2.25rem", fontSize: "text-xl" },
8888
+ xl: { padding: "1.25rem 2.75rem", fontSize: "text-2xl" }
8814
8889
  },
8815
8890
  variants: [
8816
8891
  {
@@ -9388,6 +9463,20 @@ function generateDefaultCardSystem(theme) {
9388
9463
  };
9389
9464
  }
9390
9465
 
9466
+ // ../theme-core/src/status/contextualColors.ts
9467
+ var STATUS_MUTED_COLOR_VAR = "--rb-status-muted-color";
9468
+ var DEFAULT_STATUS_MUTED_COLOR = "rgb(var(--tb-mutedText))";
9469
+ var SURFACE_MUTED_STATUS_COLOR = "color-mix(in oklab, currentColor, transparent 18%)";
9470
+ function statusMutedColorValue() {
9471
+ return `var(${STATUS_MUTED_COLOR_VAR}, ${DEFAULT_STATUS_MUTED_COLOR})`;
9472
+ }
9473
+ function statusMutedColorDeclaration() {
9474
+ return `color: ${statusMutedColorValue()};`;
9475
+ }
9476
+ function contextualMutedStatusColorDeclaration(value) {
9477
+ return `${STATUS_MUTED_COLOR_VAR}: ${value}`;
9478
+ }
9479
+
9391
9480
  // ../theme-core/src/cards/generateCardCss.ts
9392
9481
  var PER_CORNER_RADIUS_MAP = {
9393
9482
  square: "0",
@@ -9461,6 +9550,7 @@ function generateVariantCSS(variant, themeId, tokens, theme) {
9461
9550
  if (variant.foregroundToken) {
9462
9551
  rules.push(`color: ${tokens.getColor(variant.foregroundToken)}`);
9463
9552
  }
9553
+ rules.push(contextualMutedStatusColorDeclaration(SURFACE_MUTED_STATUS_COLOR));
9464
9554
  if (variant.accentEdge) {
9465
9555
  const side = ACCENT_EDGE_SIDE_MAP[variant.accentEdge.edge];
9466
9556
  const width = ACCENT_EDGE_WIDTH_MAP[variant.accentEdge.width];
@@ -9719,7 +9809,7 @@ var LABEL_FONT_SIZE_MAP = {
9719
9809
  base: "1rem"
9720
9810
  // 16px
9721
9811
  };
9722
- var FONT_WEIGHT_MAP = {
9812
+ var FONT_WEIGHT_MAP2 = {
9723
9813
  regular: "400",
9724
9814
  medium: "500",
9725
9815
  semibold: "600",
@@ -40903,14 +40993,27 @@ function BookingFormSSR({
40903
40993
  return /* @__PURE__ */ jsxs15(
40904
40994
  "div",
40905
40995
  {
40906
- className: `booking-form-ssr ${className ?? ""}`.trim(),
40996
+ className: `rb-reg-surface booking-form-ssr ${display.state === "missing" ? "" : "ab-shell "}${className ?? ""}`.trim(),
40907
40997
  ...getIslandRootProps("booking-form", blockId),
40998
+ "aria-busy": display.state === "missing" ? void 0 : true,
40999
+ "aria-label": display.state === "missing" ? void 0 : "Loading booking form",
41000
+ role: display.state === "missing" ? void 0 : "status",
40908
41001
  children: [
40909
41002
  /* @__PURE__ */ jsx29(IslandPropsScript, { value: islandProps }),
40910
- /* @__PURE__ */ jsx29("div", { className: "booking-form-ssr__summary", children: display.state === "missing" ? /* @__PURE__ */ jsx29("p", { className: "booking-form-ssr__error", children: display.message }) : /* @__PURE__ */ jsxs15(Fragment3, { children: [
40911
- /* @__PURE__ */ jsx29("strong", { children: display.submitLabel }),
40912
- display.successMessage ? /* @__PURE__ */ jsx29("p", { className: "booking-form-ssr__success", children: display.successMessage }) : null
40913
- ] }) }),
41003
+ display.state === "missing" ? /* @__PURE__ */ jsx29("div", { className: "alert alert-error", role: "alert", children: /* @__PURE__ */ jsx29("p", { className: "ab-text", children: display.message }) }) : /* @__PURE__ */ jsxs15(Fragment3, { children: [
41004
+ /* @__PURE__ */ jsx29("span", { className: "rb-sr-only", children: "Loading booking form..." }),
41005
+ /* @__PURE__ */ jsxs15("div", { className: "rb-reg-stack", "aria-hidden": "true", children: [
41006
+ /* @__PURE__ */ jsx29("div", { className: "rb-reg-summary", children: /* @__PURE__ */ jsxs15("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
41007
+ /* @__PURE__ */ jsx29("div", { className: "rb-shell-line rb-shell-line--md" }),
41008
+ /* @__PURE__ */ jsx29("div", { className: "rb-shell-line rb-shell-line--sm" })
41009
+ ] }) }),
41010
+ /* @__PURE__ */ jsxs15("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
41011
+ /* @__PURE__ */ jsx29("div", { className: "rb-shell-line rb-shell-line--lg" }),
41012
+ /* @__PURE__ */ jsx29("div", { className: "rb-shell-line rb-shell-line--xs" })
41013
+ ] }),
41014
+ /* @__PURE__ */ jsx29("div", { className: "rb-wizard-actions", children: /* @__PURE__ */ jsx29("div", { className: "ab-shell-button", children: display.submitLabel }) })
41015
+ ] })
41016
+ ] }),
40914
41017
  children
40915
41018
  ]
40916
41019
  }
@@ -43562,20 +43665,38 @@ function EventRegistrationShell({
43562
43665
  "div",
43563
43666
  {
43564
43667
  id: EVENT_REGISTRATION_ANCHOR_ID,
43565
- className: "er-container er-registration-shell",
43668
+ className: "rb-reg-surface er-container er-registration-shell",
43566
43669
  "aria-busy": "true",
43567
43670
  role: "status",
43568
43671
  children: /* @__PURE__ */ jsxs38("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
43569
43672
  /* @__PURE__ */ jsxs38("div", { className: "er-payment-layout-main", children: [
43570
- /* @__PURE__ */ jsx54("div", { className: "er-steps-nav er-registration-shell__steps", "aria-hidden": "true", children: /* @__PURE__ */ jsx54("ol", { className: "er-steps", children: display.stepLabels.map((label, index) => {
43673
+ /* @__PURE__ */ jsx54("div", { className: "rb-steps-nav er-steps-nav er-registration-shell__steps", "aria-hidden": "true", children: /* @__PURE__ */ jsx54("ol", { className: "rb-steps er-steps", children: display.stepLabels.map((label, index) => {
43571
43674
  const isActive = index === 0;
43572
- return /* @__PURE__ */ jsxs38("li", { className: "er-step", children: [
43573
- /* @__PURE__ */ jsx54("span", { className: cx("er-step-circle", isActive && "er-step-circle--active"), children: index + 1 }),
43574
- /* @__PURE__ */ jsx54("span", { className: cx("er-step-label", isActive && "er-step-label--active"), children: label }),
43575
- index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx54("span", { className: "er-step-connector" }) : null
43675
+ return /* @__PURE__ */ jsxs38("li", { className: "rb-step er-step", children: [
43676
+ /* @__PURE__ */ jsx54(
43677
+ "span",
43678
+ {
43679
+ className: cx(
43680
+ "rb-step-circle er-step-circle",
43681
+ isActive && "rb-step-circle--active er-step-circle--active"
43682
+ ),
43683
+ children: index + 1
43684
+ }
43685
+ ),
43686
+ /* @__PURE__ */ jsx54(
43687
+ "span",
43688
+ {
43689
+ className: cx(
43690
+ "rb-step-label er-step-label",
43691
+ isActive && "rb-step-label--active er-step-label--active"
43692
+ ),
43693
+ children: label
43694
+ }
43695
+ ),
43696
+ index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx54("span", { className: "rb-step-connector er-step-connector" }) : null
43576
43697
  ] }, label);
43577
43698
  }) }) }),
43578
- /* @__PURE__ */ jsxs38("div", { className: "er-stack", children: [
43699
+ /* @__PURE__ */ jsxs38("div", { className: "rb-reg-stack er-stack", children: [
43579
43700
  /* @__PURE__ */ jsxs38("div", { children: [
43580
43701
  /* @__PURE__ */ jsx54("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
43581
43702
  /* @__PURE__ */ jsx54("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
@@ -43583,20 +43704,20 @@ function EventRegistrationShell({
43583
43704
  ] }),
43584
43705
  /* @__PURE__ */ jsxs38("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
43585
43706
  /* @__PURE__ */ jsxs38("div", { className: "er-event-card er-registration-shell__card", children: [
43586
- /* @__PURE__ */ jsx54("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
43587
- /* @__PURE__ */ jsx54("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
43707
+ /* @__PURE__ */ jsx54("div", { className: "rb-shell-line rb-shell-line--lg er-registration-shell__line er-registration-shell__line--lg" }),
43708
+ /* @__PURE__ */ jsx54("div", { className: "rb-shell-line rb-shell-line--sm er-registration-shell__line er-registration-shell__line--sm" })
43588
43709
  ] }),
43589
43710
  /* @__PURE__ */ jsxs38("div", { className: "er-event-card er-registration-shell__card", children: [
43590
- /* @__PURE__ */ jsx54("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
43591
- /* @__PURE__ */ jsx54("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
43711
+ /* @__PURE__ */ jsx54("div", { className: "rb-shell-line rb-shell-line--md er-registration-shell__line er-registration-shell__line--md" }),
43712
+ /* @__PURE__ */ jsx54("div", { className: "rb-shell-line rb-shell-line--xs er-registration-shell__line er-registration-shell__line--xs" })
43592
43713
  ] })
43593
43714
  ] })
43594
43715
  ] })
43595
43716
  ] }),
43596
43717
  /* @__PURE__ */ jsx54("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs38("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
43597
43718
  /* @__PURE__ */ jsxs38("div", { className: "er-summary-bar-info", children: [
43598
- /* @__PURE__ */ jsx54("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
43599
- /* @__PURE__ */ jsx54("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
43719
+ /* @__PURE__ */ jsx54("div", { className: "rb-shell-line rb-shell-line--md er-registration-shell__line er-registration-shell__line--md" }),
43720
+ /* @__PURE__ */ jsx54("div", { className: "rb-shell-line rb-shell-line--xs er-registration-shell__line er-registration-shell__line--xs" })
43600
43721
  ] }),
43601
43722
  /* @__PURE__ */ jsx54("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
43602
43723
  ] }) })
@@ -43615,6 +43736,7 @@ function FeedbackMessage({
43615
43736
  tone,
43616
43737
  children,
43617
43738
  className,
43739
+ id,
43618
43740
  title,
43619
43741
  titleClassName,
43620
43742
  bodyClassName,
@@ -43626,6 +43748,7 @@ function FeedbackMessage({
43626
43748
  return /* @__PURE__ */ jsxs39(
43627
43749
  "div",
43628
43750
  {
43751
+ id,
43629
43752
  className,
43630
43753
  "data-feedback-tone": tone,
43631
43754
  role,
@@ -45846,7 +45969,7 @@ function generateInputCss({
45846
45969
  const labelSelector = `${rootSelector} .form-label`;
45847
45970
  const labelRules = [];
45848
45971
  labelRules.push(`color: ${rgbColorValue(inputSystem.label.textColorToken)}`);
45849
- labelRules.push(`font-weight: ${FONT_WEIGHT_MAP[inputSystem.label.fontWeight]}`);
45972
+ labelRules.push(`font-weight: ${FONT_WEIGHT_MAP2[inputSystem.label.fontWeight]}`);
45850
45973
  labelRules.push(`font-size: ${LABEL_FONT_SIZE_MAP[inputSystem.label.fontSize]}`);
45851
45974
  if (inputSystem.label.textTransform && inputSystem.label.textTransform !== "none") {
45852
45975
  labelRules.push(`text-transform: ${inputSystem.label.textTransform}`);
@@ -46087,67 +46210,6 @@ function generateDefaultInputSystem(theme) {
46087
46210
  };
46088
46211
  }
46089
46212
 
46090
- // ../theme-core/src/interactive/generateBaseCSS.ts
46091
- var FONT_WEIGHT_MAP2 = {
46092
- regular: 400,
46093
- medium: 500,
46094
- semibold: 600,
46095
- bold: 700
46096
- };
46097
- function generateBaseInteractiveCSS(options) {
46098
- const {
46099
- typography,
46100
- padding,
46101
- borderRadius,
46102
- includeTransition = true,
46103
- includeFlexCenter = false,
46104
- borderWidth
46105
- } = options;
46106
- const rules = [];
46107
- if (typography.fontWeight !== void 0) {
46108
- const weight = typeof typography.fontWeight === "number" ? typography.fontWeight : FONT_WEIGHT_MAP2[typography.fontWeight];
46109
- rules.push(`font-weight: ${weight};`);
46110
- }
46111
- if (typography.typography === "heading") {
46112
- rules.push(`font-family: var(--font-heading);`);
46113
- rules.push(`letter-spacing: var(--ls-heading);`);
46114
- } else if (typography.typography === "body") {
46115
- rules.push(`font-family: var(--font-body);`);
46116
- }
46117
- if (typography.italic) {
46118
- rules.push(`font-style: italic;`);
46119
- }
46120
- if (typography.textTransform && typography.textTransform !== "none") {
46121
- rules.push(`text-transform: ${typography.textTransform};`);
46122
- }
46123
- if (padding) {
46124
- if (borderWidth && borderWidth !== "0px") {
46125
- const paddingParts = padding.split(" ");
46126
- const verticalPadding = paddingParts[0] || "0.5rem";
46127
- const horizontalPadding = paddingParts[1] || paddingParts[0] || "1rem";
46128
- rules.push(`padding-top: calc(${verticalPadding} - ${borderWidth} - 1px);`);
46129
- rules.push(`padding-bottom: calc(${verticalPadding} - ${borderWidth} - 1px);`);
46130
- rules.push(`padding-left: calc(${horizontalPadding} - ${borderWidth});`);
46131
- rules.push(`padding-right: calc(${horizontalPadding} - ${borderWidth});`);
46132
- } else {
46133
- rules.push(`padding: ${padding};`);
46134
- }
46135
- }
46136
- if (borderRadius) {
46137
- rules.push(`border-radius: ${borderRadius};`);
46138
- }
46139
- if (includeTransition) {
46140
- rules.push(`transition: all 200ms ease;`);
46141
- }
46142
- if (includeFlexCenter) {
46143
- rules.push(`display: inline-flex;`);
46144
- rules.push(`align-items: center;`);
46145
- rules.push(`justify-content: center;`);
46146
- rules.push(`cursor: pointer;`);
46147
- }
46148
- return rules;
46149
- }
46150
-
46151
46213
  // ../theme-core/src/navigation/generateNavLinkCSS.ts
46152
46214
  function generateNavLinkCSS(options) {
46153
46215
  const { themeId, tokens, theme, style, className } = options;
@@ -46234,14 +46296,7 @@ ${activeSelector} {
46234
46296
  }
46235
46297
  `);
46236
46298
  }
46237
- cssChunks.push(`
46238
- ${selector} * {
46239
- font-family: inherit;
46240
- font-weight: inherit;
46241
- letter-spacing: inherit;
46242
- color: inherit;
46243
- }
46244
- `);
46299
+ cssChunks.push(generateInteractiveChildInheritanceCSS(selector));
46245
46300
  return cssChunks.join("");
46246
46301
  }
46247
46302
  function buildTextContrastShadow(input) {
@@ -47538,7 +47593,7 @@ ${root} .status-error { color: rgb(var(--tb-destructive)); }
47538
47593
  ${root} .status-success { color: rgb(var(--tb-success)); }
47539
47594
  ${root} .status-warning { color: rgb(var(--tb-warning)); }
47540
47595
  ${root} .status-info { color: rgb(var(--tb-info)); }
47541
- ${root} .status-muted { color: rgb(var(--tb-mutedText)); }`);
47596
+ ${root} .status-muted { ${statusMutedColorDeclaration()} }`);
47542
47597
  cssBlocks.push(`/* Alert containers */
47543
47598
  ${root} .alert {
47544
47599
  padding: 1rem;
@@ -47854,6 +47909,34 @@ ${root} {
47854
47909
  /* Order summary */
47855
47910
  --er-summary-bg: rgba(var(--tb-primary), 0.1);
47856
47911
  --er-summary-border: rgb(var(--tb-border));
47912
+
47913
+ /* Shared registration-surface mappings (issue 1174).
47914
+ Route the shared --rb-reg-* contract through this block's documented
47915
+ Tier 3 vars so existing --er-* overrides keep working unchanged. */
47916
+ --rb-reg-radius: var(--er-radius);
47917
+ --rb-reg-border: var(--er-border);
47918
+ --rb-reg-border-hover: var(--er-border-hover);
47919
+ --rb-reg-border-selected: var(--er-border-selected);
47920
+ --rb-reg-bg-selected: var(--er-payment-bg-selected);
47921
+ --rb-reg-option-bg: var(--er-control-bg);
47922
+ --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
47923
+ --rb-reg-surface-bg: rgb(var(--tb-surface));
47924
+ --rb-reg-on-surface: var(--er-on-surface);
47925
+ --rb-reg-on-surface-muted: var(--er-on-surface-muted);
47926
+ --rb-reg-on-surface-subtle: var(--er-on-surface-subtle);
47927
+ --rb-reg-on-surface-faint: var(--er-on-surface-faint);
47928
+ --rb-reg-check-bg: var(--er-check-bg);
47929
+ --rb-reg-check-text: var(--er-check-text);
47930
+ --rb-reg-step-active: var(--er-step-active);
47931
+ --rb-reg-step-completed: var(--er-step-completed);
47932
+ --rb-reg-step-inactive: var(--er-step-inactive);
47933
+ --rb-reg-step-text: var(--er-step-text);
47934
+ --rb-reg-step-text-active: var(--er-step-text-active);
47935
+ --rb-reg-step-connector: var(--er-step-connector);
47936
+ --rb-reg-summary-bg: var(--er-surface-muted);
47937
+ --rb-reg-summary-border: var(--er-border);
47938
+ --rb-reg-focus-ring: var(--er-focus-ring);
47939
+ --rb-reg-shell-line: var(--er-shell-line);
47857
47940
  }
47858
47941
  `;
47859
47942
  }
@@ -47986,25 +48069,40 @@ ${root} {
47986
48069
  --ab-info-bg: rgba(var(--tb-info), 0.1);
47987
48070
  --ab-info-text: rgb(var(--tb-info));
47988
48071
 
47989
- /* Loading/muted states */
48072
+ /* Muted summary state */
47990
48073
  --ab-muted-bg: rgba(var(--tb-text), 0.05);
47991
- --ab-muted-text: rgba(var(--tb-text), 0.6);
47992
- --ab-spinner-color: rgb(var(--tb-primary));
47993
48074
 
47994
- /* Form elements */
47995
- --ab-input-border: rgb(var(--tb-border));
48075
+ /* Focus ring used by shared registration-surface controls */
47996
48076
  --ab-input-focus-ring: rgba(var(--tb-primary), 0.3);
47997
48077
 
47998
- /* Buttons */
47999
- --ab-btn-primary-bg: rgb(var(--tb-primary));
48000
- --ab-btn-primary-text: rgb(var(--tb-background));
48001
- --ab-btn-primary-hover: rgba(var(--tb-primary), 0.9);
48002
- --ab-btn-secondary-border: rgb(var(--tb-border));
48003
- --ab-btn-secondary-hover: rgba(var(--tb-text), 0.05);
48004
-
48005
- /* Text opacity levels */
48006
- --ab-text-muted-opacity: 0.6;
48007
- --ab-text-faint-opacity: 0.4;
48078
+ /* Shared registration-surface mappings (issue 1174).
48079
+ Route the shared --rb-reg-* contract through this block's Tier 3 vars
48080
+ (palette tokens where no --ab-* var exists) so --ab-* overrides keep
48081
+ working as the block adopts the shared classes. */
48082
+ --rb-reg-radius: var(--ab-card-radius, var(--rb-block-radius));
48083
+ --rb-reg-border: var(--ab-card-border);
48084
+ --rb-reg-border-hover: var(--ab-card-border-hover);
48085
+ --rb-reg-border-selected: var(--ab-card-border-selected);
48086
+ --rb-reg-bg-selected: var(--ab-card-bg-selected);
48087
+ --rb-reg-option-bg: transparent;
48088
+ --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
48089
+ --rb-reg-surface-bg: rgb(var(--tb-surface));
48090
+ --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
48091
+ --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
48092
+ --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
48093
+ --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
48094
+ --rb-reg-check-bg: var(--ab-check-bg);
48095
+ --rb-reg-check-text: var(--ab-check-text);
48096
+ --rb-reg-step-active: rgb(var(--tb-primary));
48097
+ --rb-reg-step-completed: rgb(var(--tb-success));
48098
+ --rb-reg-step-inactive: rgb(var(--tb-mutedText));
48099
+ --rb-reg-step-text: rgb(255 255 255);
48100
+ --rb-reg-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
48101
+ --rb-reg-step-connector: rgba(var(--tb-border), 0.5);
48102
+ --rb-reg-summary-bg: var(--ab-muted-bg);
48103
+ --rb-reg-summary-border: var(--ab-card-border);
48104
+ --rb-reg-focus-ring: var(--ab-input-focus-ring);
48105
+ --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
48008
48106
  }
48009
48107
  `;
48010
48108
  }
@@ -48295,6 +48393,35 @@ ${root} {
48295
48393
  /* Summary */
48296
48394
  --cr-summary-bg: rgba(var(--tb-primary), 0.1);
48297
48395
  --cr-summary-border: rgb(var(--tb-border));
48396
+
48397
+ /* Shared registration-surface mappings (issue 1174).
48398
+ Route the shared --rb-reg-* contract through this block's Tier 3 vars
48399
+ (palette tokens where no --cr-* var exists) so existing --cr-* overrides
48400
+ keep working unchanged. */
48401
+ --rb-reg-radius: var(--rb-block-radius);
48402
+ --rb-reg-border: var(--cr-border);
48403
+ --rb-reg-border-hover: var(--cr-border-hover);
48404
+ --rb-reg-border-selected: var(--cr-border-selected);
48405
+ --rb-reg-bg-selected: var(--cr-payment-bg-selected);
48406
+ --rb-reg-option-bg: rgb(var(--tb-background));
48407
+ --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
48408
+ --rb-reg-surface-bg: rgb(var(--tb-surface));
48409
+ --rb-reg-on-surface: var(--cr-on-surface);
48410
+ --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
48411
+ --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
48412
+ --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
48413
+ --rb-reg-check-bg: var(--cr-check-bg);
48414
+ --rb-reg-check-text: var(--cr-check-text);
48415
+ --rb-reg-step-active: var(--cr-step-active);
48416
+ --rb-reg-step-completed: var(--cr-step-completed);
48417
+ --rb-reg-step-inactive: var(--cr-step-inactive);
48418
+ --rb-reg-step-text: var(--cr-step-text);
48419
+ --rb-reg-step-text-active: var(--cr-step-text-active);
48420
+ --rb-reg-step-connector: var(--cr-step-connector);
48421
+ --rb-reg-summary-bg: var(--cr-summary-bg);
48422
+ --rb-reg-summary-border: var(--cr-summary-border);
48423
+ --rb-reg-focus-ring: var(--cr-focus-ring);
48424
+ --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
48298
48425
  }
48299
48426
  `;
48300
48427
  }
@@ -49574,6 +49701,8 @@ var MemoBlockSection = React6.memo(
49574
49701
  occurrenceContext: dataContext?.occurrenceContext ?? null,
49575
49702
  entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
49576
49703
  contentEntry: dataContext?.contentEntry ?? null,
49704
+ pageSurface: dataContext?.pageSurface ?? null,
49705
+ subject: dataContext?.subject ?? null,
49577
49706
  supabaseUrl: dataContext?.supabaseUrl,
49578
49707
  imageResolveContext: resolvedImageResolveContext,
49579
49708
  blockId: block.id ?? null,
@@ -49702,6 +49831,8 @@ var MemoBlockSection = React6.memo(
49702
49831
  occurrenceContext: dataContext?.occurrenceContext ?? null,
49703
49832
  entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
49704
49833
  contentEntry: dataContext?.contentEntry ?? null,
49834
+ pageSurface: dataContext?.pageSurface ?? null,
49835
+ subject: dataContext?.subject ?? null,
49705
49836
  supabaseUrl: dataContext?.supabaseUrl,
49706
49837
  imageResolveContext: resolvedImageResolveContext,
49707
49838
  blockId: block.id ?? null,
@@ -49729,7 +49860,9 @@ var MemoBlockSection = React6.memo(
49729
49860
  // Occurrence and content entry context for template pages
49730
49861
  occurrenceContext: dataContext?.occurrenceContext ?? null,
49731
49862
  entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
49732
- contentEntry: dataContext?.contentEntry ?? null
49863
+ contentEntry: dataContext?.contentEntry ?? null,
49864
+ pageSurface: dataContext?.pageSurface ?? null,
49865
+ subject: dataContext?.subject ?? null
49733
49866
  }
49734
49867
  };
49735
49868
  const blockBindings = block.bindings;
@@ -53074,13 +53207,36 @@ var containerResponsiveThemeCss = `/*
53074
53207
  */
53075
53208
 
53076
53209
  /* =============================================================================
53077
- * Shared: Registration Terminal State Icons
53078
- * Used by event-registration and course-registration blocks.
53210
+ * Shared: Registration Surface (issue 1174)
53079
53211
  *
53080
- * Layout rules only \u2014 block-specific colors are defined in each block's CSS
53081
- * via scoped \`.rb-state-icon--{variant}\` rules.
53212
+ * Wizard-surface primitives shared by the event-registration,
53213
+ * course-registration and appointment-booking blocks: surface container,
53214
+ * selectable option cards, step indicator, wizard actions row, on-surface
53215
+ * text ramp, layout stacks, summary box and skeleton shell lines.
53216
+ *
53217
+ * Uses:
53218
+ * - Tier 1 vars: --tb-* (from theme palette) as inline fallbacks
53219
+ * - Tier 2 vars: --rb-block-radius, --rb-block-transition (from theme scope)
53220
+ * - Shared vars: --rb-reg-* (mapped per block by the Tier 3 var generators;
53221
+ * canonical name list in blocks/registrationSurfaceVars.ts)
53222
+ *
53223
+ * Defaults intentionally match the event-registration (issue 1089) values; blocks
53224
+ * that need to preserve a different look override in their own block CSS,
53225
+ * which is imported after this file (cascade order is the override contract \u2014
53226
+ * all selectors here are zero-specificity \`:where()\`).
53227
+ *
53228
+ * Layout-only \`.rb-state-icon\` rules (formerly registration-shared.css) live
53229
+ * here too; block CSS provides the \`.rb-state-icon--{variant}\` colors.
53230
+ *
53231
+ * Naming: component-like primitives follow the existing bare \`rb-\` shared
53232
+ * precedent (\`.rb-state-icon\`, \`.rb-tile\`): \`.rb-option-card\`, \`.rb-step-*\`,
53233
+ * \`.rb-wizard-actions\`, \`.rb-on-surface\`, \`.rb-shell-*\`. Container/layout
53234
+ * pieces that would otherwise collide with the global \`.rb-*\` utility layer
53235
+ * are namespaced \`rb-reg-*\` (\`.rb-reg-surface\`, \`.rb-reg-stack\`, ...). All of
53236
+ * them are scoped to the three registration blocks either way.
53082
53237
  * ============================================================================= */
53083
53238
 
53239
+ /* Terminal state icon (layout only \u2014 colors are per-block) */
53084
53240
  :where(.theme-scope) .rb-state-icon {
53085
53241
  width: 4rem;
53086
53242
  height: 4rem;
@@ -53096,112 +53252,346 @@ var containerResponsiveThemeCss = `/*
53096
53252
  height: 2rem;
53097
53253
  }
53098
53254
 
53099
- /* =============================================================================
53100
- * Block: Event Registration (pilot #76)
53101
- * Uses CSS vars: --er-* (Tier 3) and --rb-block-* (Tier 2)
53102
- * =============================================================================
53103
- */
53104
-
53105
- :where(.theme-scope) :where([data-block="event-registration"]) {
53106
- --rb-modal-overlay-bg: rgb(var(--tb-text, 0 0 0) / 0.6);
53107
- --rb-event-tile-bg: var(--er-event-card-bg);
53108
- --rb-event-tile-border: var(--er-border);
53109
- --rb-event-tile-border-width: var(--er-event-card-border-width);
53110
- --rb-event-tile-border-hover: var(--er-border-hover);
53111
- --rb-event-tile-border-selected: var(--er-border-selected);
53112
- --rb-event-tile-hover-opacity: var(--er-event-card-hover-opacity);
53113
- --rb-event-tile-bg-selected: rgba(var(--tb-primary), 0.1);
53114
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
53115
- --er-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
53116
- --er-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
53117
- --er-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
53118
- --er-on-surface-disabled: rgba(var(--tb-onSurface, var(--tb-text)), 0.78);
53119
- --er-on-surface-disabled-detail: rgba(var(--tb-onSurface, var(--tb-text)), 0.68);
53120
- }
53121
-
53122
- /* Container */
53123
- :where(.theme-scope) :where([data-block="event-registration"]) .er-container {
53124
- border-radius: var(--rb-block-radius);
53125
- border: 1px solid var(--er-border);
53255
+ /* Surface container */
53256
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
53257
+ border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
53258
+ border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
53126
53259
  padding: clamp(1rem, 2vw, 1.5rem);
53127
- background: rgb(var(--tb-surface));
53128
- color: var(--er-on-surface);
53129
- transition: border-color var(--rb-block-transition) ease;
53260
+ background: var(--rb-reg-surface-bg, rgb(var(--tb-surface, 248 250 252)));
53261
+ color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
53262
+ transition: border-color var(--rb-block-transition, 150ms) ease;
53130
53263
  width: 100%;
53131
53264
  max-width: 800px;
53132
53265
  margin-inline: 0;
53133
53266
  }
53134
53267
 
53135
- /* SSR shell / required-island fallback */
53136
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell {
53137
- min-height: 24rem;
53268
+ /* Selectable option card */
53269
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
53270
+ position: relative;
53271
+ display: flex;
53272
+ align-items: flex-start;
53273
+ gap: 0.75rem;
53274
+ padding: 1rem;
53275
+ border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
53276
+ border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
53277
+ background: var(--rb-reg-option-bg, transparent);
53278
+ color: inherit;
53279
+ cursor: pointer;
53280
+ text-align: left;
53281
+ transition: border-color var(--rb-block-transition, 150ms) ease,
53282
+ background-color var(--rb-block-transition, 150ms) ease,
53283
+ box-shadow var(--rb-block-transition, 150ms) ease;
53138
53284
  }
53139
53285
 
53140
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__steps {
53141
- margin-bottom: 1.25rem;
53286
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
53287
+ border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
53288
+ box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
53142
53289
  }
53143
53290
 
53144
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__eyebrow {
53145
- margin: 0 0 0.35rem;
53146
- color: var(--er-on-surface-subtle);
53147
- font-size: 0.75rem;
53148
- font-weight: 700;
53149
- letter-spacing: 0.04em;
53150
- line-height: 1.2;
53151
- text-transform: uppercase;
53291
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
53292
+ outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
53293
+ outline-offset: 2px;
53152
53294
  }
53153
53295
 
53154
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__title {
53296
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
53297
+ border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
53298
+ background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
53299
+ box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
53300
+ }
53301
+
53302
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
53303
+ cursor: not-allowed;
53304
+ opacity: 0.7;
53305
+ }
53306
+
53307
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
53308
+ border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
53309
+ box-shadow: none;
53310
+ }
53311
+
53312
+ /* Check indicator */
53313
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
53314
+ flex-shrink: 0;
53315
+ width: 1.25rem;
53316
+ height: 1.25rem;
53317
+ border-radius: 50%;
53318
+ background: var(--rb-reg-check-bg, rgb(var(--tb-primary, 17 24 39)));
53319
+ display: flex;
53320
+ align-items: center;
53321
+ justify-content: center;
53322
+ }
53323
+
53324
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
53325
+ width: 0.75rem;
53326
+ height: 0.75rem;
53327
+ color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
53328
+ }
53329
+
53330
+ /* Step indicator */
53331
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
53332
+ margin-bottom: 1.5rem;
53333
+ }
53334
+
53335
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
53336
+ display: flex;
53337
+ align-items: center;
53338
+ justify-content: center;
53339
+ gap: 0.5rem;
53340
+ list-style: none;
53341
+ padding: 0;
53155
53342
  margin: 0;
53156
53343
  }
53157
53344
 
53158
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__copy {
53159
- margin: 0.35rem 0 0;
53160
- max-width: 36rem;
53161
- line-height: 1.45;
53345
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
53346
+ display: flex;
53347
+ align-items: center;
53348
+ gap: 0.5rem;
53162
53349
  }
53163
53350
 
53164
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__cards {
53165
- margin-top: 0.25rem;
53166
- overflow: hidden;
53167
- border: 1px solid var(--er-border);
53168
- border-radius: var(--rb-block-radius);
53169
- background: var(--er-control-bg);
53351
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
53352
+ width: 1.75rem;
53353
+ height: 1.75rem;
53354
+ border-radius: 50%;
53355
+ display: flex;
53356
+ align-items: center;
53357
+ justify-content: center;
53358
+ font-size: 0.75rem;
53359
+ font-weight: 600;
53360
+ background: var(--rb-reg-step-inactive, rgb(var(--tb-mutedText, 100 116 139)));
53361
+ color: var(--rb-reg-step-text, rgb(var(--tb-primaryForeground, 255 255 255)));
53362
+ transition: background-color var(--rb-block-transition, 150ms) ease;
53170
53363
  }
53171
53364
 
53172
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__card {
53365
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
53366
+ background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
53367
+ color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
53368
+ }
53369
+
53370
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
53371
+ background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
53372
+ color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
53373
+ }
53374
+
53375
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
53376
+ width: 0.75rem;
53377
+ height: 0.75rem;
53378
+ }
53379
+
53380
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
53381
+ width: 2rem;
53382
+ height: 2px;
53383
+ background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
53384
+ }
53385
+
53386
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
53387
+ font-size: 0.75rem;
53388
+ color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
53389
+ display: none;
53390
+ }
53391
+
53392
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
53393
+ font-weight: 500;
53394
+ }
53395
+
53396
+ @container rb-site (min-width: 640px) {
53397
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
53398
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
53399
+ display: inline;
53400
+ }
53401
+ }
53402
+ }
53403
+
53404
+ /* Wizard actions row */
53405
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
53406
+ display: flex;
53407
+ justify-content: space-between;
53408
+ align-items: center;
53409
+ gap: 1rem;
53410
+ margin-top: 1.5rem;
53411
+ }
53412
+
53413
+ /* When there's only one action (no back button), push it to the right */
53414
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
53415
+ margin-inline-start: auto;
53416
+ }
53417
+
53418
+ /* On-surface text ramp */
53419
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
53420
+ color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
53421
+ }
53422
+
53423
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
53424
+ color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
53425
+ }
53426
+
53427
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
53428
+ color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
53429
+ }
53430
+
53431
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
53432
+ color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
53433
+ }
53434
+
53435
+ /* Layout stacks */
53436
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
53437
+ display: flex;
53438
+ flex-direction: column;
53439
+ gap: 1rem;
53440
+ }
53441
+
53442
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
53443
+ gap: 0.75rem;
53444
+ }
53445
+
53446
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
53447
+ display: flex;
53448
+ align-items: center;
53449
+ gap: 1rem;
53450
+ }
53451
+
53452
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
53453
+ justify-content: space-between;
53454
+ align-items: flex-start;
53455
+ }
53456
+
53457
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
53173
53458
  display: grid;
53174
- gap: 0.5rem;
53459
+ gap: 0.75rem;
53460
+ }
53461
+
53462
+ /* Summary box */
53463
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
53175
53464
  padding: 1rem;
53465
+ border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
53466
+ border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
53467
+ background: var(--rb-reg-summary-bg, rgba(var(--tb-muted, 241 245 249), 0.42));
53176
53468
  }
53177
53469
 
53178
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line {
53470
+ /* Skeleton shell lines */
53471
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
53179
53472
  height: 0.75rem;
53180
53473
  border-radius: 9999px;
53181
53474
  background: linear-gradient(
53182
53475
  90deg,
53183
- var(--er-shell-line),
53184
- rgba(var(--tb-primary), 0.12),
53185
- var(--er-shell-line)
53476
+ var(--rb-reg-shell-line, rgba(var(--tb-mutedText, 100 116 139), 0.22)),
53477
+ rgba(var(--tb-primary, 17 24 39), 0.12),
53478
+ var(--rb-reg-shell-line, rgba(var(--tb-mutedText, 100 116 139), 0.22))
53186
53479
  );
53187
53480
  }
53188
53481
 
53189
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--lg {
53482
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
53190
53483
  width: min(26rem, 82%);
53191
53484
  }
53192
53485
 
53193
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--md {
53486
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
53194
53487
  width: min(19rem, 68%);
53195
53488
  }
53196
53489
 
53197
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--sm {
53490
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
53198
53491
  width: min(14rem, 52%);
53199
53492
  }
53200
53493
 
53201
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--xs {
53494
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
53202
53495
  width: min(10rem, 42%);
53203
53496
  }
53204
53497
 
53498
+ /* Skeleton block (rectangular placeholder, pulses) */
53499
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
53500
+ height: 2.5rem;
53501
+ width: 100%;
53502
+ border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
53503
+ background: var(--rb-reg-shell-line, rgba(var(--tb-mutedText, 100 116 139), 0.22));
53504
+ animation: rb-reg-pulse 1.5s ease-in-out infinite;
53505
+ }
53506
+
53507
+ @keyframes rb-reg-pulse {
53508
+ 0%, 100% {
53509
+ opacity: 1;
53510
+ }
53511
+ 50% {
53512
+ opacity: 0.5;
53513
+ }
53514
+ }
53515
+
53516
+ @media (prefers-reduced-motion: reduce) {
53517
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
53518
+ animation: none;
53519
+ }
53520
+ }
53521
+
53522
+ /* =============================================================================
53523
+ * Block: Event Registration (pilot #76)
53524
+ * Uses CSS vars: --er-* (Tier 3) and --rb-block-* (Tier 2)
53525
+ * =============================================================================
53526
+ */
53527
+
53528
+ :where(.theme-scope) :where([data-block="event-registration"]) {
53529
+ --rb-modal-overlay-bg: rgb(var(--tb-text, 0 0 0) / 0.6);
53530
+ --rb-event-tile-bg: var(--er-event-card-bg);
53531
+ --rb-event-tile-border: var(--er-border);
53532
+ --rb-event-tile-border-width: var(--er-event-card-border-width);
53533
+ --rb-event-tile-border-hover: var(--er-border-hover);
53534
+ --rb-event-tile-border-selected: var(--er-border-selected);
53535
+ --rb-event-tile-hover-opacity: var(--er-event-card-hover-opacity);
53536
+ --rb-event-tile-bg-selected: rgba(var(--tb-primary), 0.1);
53537
+ --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
53538
+ --er-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
53539
+ --er-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
53540
+ --er-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
53541
+ --er-on-surface-disabled: rgba(var(--tb-onSurface, var(--tb-text)), 0.78);
53542
+ --er-on-surface-disabled-detail: rgba(var(--tb-onSurface, var(--tb-text)), 0.68);
53543
+ }
53544
+
53545
+ /* Container: styled by the shared .rb-reg-surface (registration-surface.css);
53546
+ .er-container remains in markup as a hook and for the overlay/embedded
53547
+ variants below. */
53548
+
53549
+ /* SSR shell / required-island fallback */
53550
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell {
53551
+ min-height: 24rem;
53552
+ }
53553
+
53554
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__steps {
53555
+ margin-bottom: 1.25rem;
53556
+ }
53557
+
53558
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__eyebrow {
53559
+ margin: 0 0 0.35rem;
53560
+ color: var(--er-on-surface-subtle);
53561
+ font-size: 0.75rem;
53562
+ font-weight: 700;
53563
+ letter-spacing: 0.04em;
53564
+ line-height: 1.2;
53565
+ text-transform: uppercase;
53566
+ }
53567
+
53568
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__title {
53569
+ margin: 0;
53570
+ }
53571
+
53572
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__copy {
53573
+ margin: 0.35rem 0 0;
53574
+ max-width: 36rem;
53575
+ line-height: 1.45;
53576
+ }
53577
+
53578
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__cards {
53579
+ margin-top: 0.25rem;
53580
+ overflow: hidden;
53581
+ border: 1px solid var(--er-border);
53582
+ border-radius: var(--rb-block-radius);
53583
+ background: var(--er-control-bg);
53584
+ }
53585
+
53586
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__card {
53587
+ display: grid;
53588
+ gap: 0.5rem;
53589
+ padding: 1rem;
53590
+ }
53591
+
53592
+ /* Shell skeleton lines: styled by the shared .rb-shell-line family
53593
+ (registration-surface.css); legacy classes remain in markup as hooks. */
53594
+
53205
53595
  :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__summary {
53206
53596
  align-items: center;
53207
53597
  border-radius: calc(var(--rb-block-radius) * 0.75);
@@ -53277,13 +53667,8 @@ var containerResponsiveThemeCss = `/*
53277
53667
  color: var(--er-capacity-soldout-text);
53278
53668
  }
53279
53669
 
53280
- /* Selected event summary */
53281
- :where(.theme-scope) :where([data-block="event-registration"]) .er-event-summary {
53282
- padding: 1rem;
53283
- border-radius: calc(var(--rb-block-radius) * 0.75);
53284
- border: 1px solid var(--er-border);
53285
- background: var(--er-surface-muted);
53286
- }
53670
+ /* Selected event summary: superseded by the shared .rb-reg-summary
53671
+ (registration-surface.css); no markup emitted .er-event-summary anymore. */
53287
53672
 
53288
53673
  /* Ticket counter */
53289
53674
  :where(.theme-scope) :where([data-block="event-registration"]) .er-ticket-counter-group {
@@ -53489,7 +53874,7 @@ var containerResponsiveThemeCss = `/*
53489
53874
  opacity: 1;
53490
53875
  }
53491
53876
 
53492
- /* State icon color variants (layout from registration-shared.css) */
53877
+ /* State icon color variants (layout from registration-surface.css) */
53493
53878
  :where(.theme-scope) :where([data-block="event-registration"]) .rb-state-icon--success {
53494
53879
  background: var(--er-success-bg);
53495
53880
  color: var(--er-success-text);
@@ -53645,16 +54030,8 @@ var containerResponsiveThemeCss = `/*
53645
54030
  text-align: center;
53646
54031
  }
53647
54032
 
53648
- /* Layout */
53649
- :where(.theme-scope) :where([data-block="event-registration"]) .er-stack {
53650
- display: flex;
53651
- flex-direction: column;
53652
- gap: 1rem;
53653
- }
53654
-
53655
- :where(.theme-scope) :where([data-block="event-registration"]) .er-stack--sm {
53656
- gap: 0.75rem;
53657
- }
54033
+ /* Layout stacks/rows: styled by the shared .rb-reg-stack / .rb-reg-row
54034
+ (registration-surface.css); legacy classes remain in markup as hooks. */
53658
54035
 
53659
54036
  /* Event/date selection rows */
53660
54037
  :where(.theme-scope) :where([data-block="event-registration"]) .er-event-grid {
@@ -53663,17 +54040,6 @@ var containerResponsiveThemeCss = `/*
53663
54040
  gap: 0;
53664
54041
  }
53665
54042
 
53666
- :where(.theme-scope) :where([data-block="event-registration"]) .er-row {
53667
- display: flex;
53668
- align-items: center;
53669
- gap: 1rem;
53670
- }
53671
-
53672
- :where(.theme-scope) :where([data-block="event-registration"]) .er-row--between {
53673
- justify-content: space-between;
53674
- align-items: flex-start;
53675
- }
53676
-
53677
54043
  :where(.theme-scope) :where([data-block="event-registration"]) .er-center {
53678
54044
  text-align: center;
53679
54045
  padding: 2rem;
@@ -53685,18 +54051,8 @@ var containerResponsiveThemeCss = `/*
53685
54051
  margin-bottom: 1rem;
53686
54052
  }
53687
54053
 
53688
- :where(.theme-scope) :where([data-block="event-registration"]) .er-actions {
53689
- display: flex;
53690
- justify-content: space-between;
53691
- align-items: center;
53692
- gap: 1rem;
53693
- margin-top: 1.5rem;
53694
- }
53695
-
53696
- /* When there's only one button (no back), push to the right */
53697
- :where(.theme-scope) :where([data-block="event-registration"]) .er-actions > :only-child {
53698
- margin-inline-start: auto;
53699
- }
54054
+ /* Actions row: styled by the shared .rb-wizard-actions (registration-surface.css);
54055
+ .er-actions remains in markup as a hook. */
53700
54056
 
53701
54057
  :where(.theme-scope) :where([data-block="event-registration"]) .er-button-with-spinner {
53702
54058
  display: inline-flex;
@@ -53948,23 +54304,8 @@ var containerResponsiveThemeCss = `/*
53948
54304
  color: var(--er-on-surface-faint);
53949
54305
  }
53950
54306
 
53951
- /* Checkmark indicator */
53952
- :where(.theme-scope) :where([data-block="event-registration"]) .er-check {
53953
- flex-shrink: 0;
53954
- width: 1.25rem;
53955
- height: 1.25rem;
53956
- border-radius: 50%;
53957
- background: var(--er-check-bg);
53958
- display: flex;
53959
- align-items: center;
53960
- justify-content: center;
53961
- }
53962
-
53963
- :where(.theme-scope) :where([data-block="event-registration"]) .er-check svg {
53964
- width: 0.75rem;
53965
- height: 0.75rem;
53966
- color: var(--er-check-text);
53967
- }
54307
+ /* Checkmark indicator: styled by the shared .rb-option-check
54308
+ (registration-surface.css); .er-check remains in markup as a hook. */
53968
54309
 
53969
54310
  /* Payment summary */
53970
54311
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-summary {
@@ -54012,78 +54353,12 @@ var containerResponsiveThemeCss = `/*
54012
54353
  margin-bottom: 1.5rem;
54013
54354
  }
54014
54355
 
54015
- :where(.theme-scope) :where([data-block="event-registration"]) .er-steps {
54016
- display: flex;
54017
- align-items: center;
54018
- justify-content: center;
54019
- gap: 0.5rem;
54020
- list-style: none;
54021
- padding: 0;
54022
- margin: 0;
54023
- }
54024
-
54025
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step {
54026
- display: flex;
54027
- align-items: center;
54028
- gap: 0.5rem;
54029
- }
54030
-
54031
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-circle {
54032
- width: 1.75rem;
54033
- height: 1.75rem;
54034
- border-radius: 50%;
54035
- display: flex;
54036
- align-items: center;
54037
- justify-content: center;
54038
- font-size: 0.75rem;
54039
- font-weight: 600;
54040
- background: var(--er-step-inactive);
54041
- color: var(--er-step-text);
54042
- transition: background-color var(--rb-block-transition) ease;
54043
- }
54044
-
54045
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-circle--active {
54046
- background: var(--er-step-active);
54047
- color: var(--er-step-text-active);
54048
- }
54049
-
54050
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-circle--completed {
54051
- background: var(--er-step-completed);
54052
- color: var(--er-step-text-active);
54053
- }
54054
-
54055
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-check {
54056
- width: 0.75rem;
54057
- height: 0.75rem;
54058
- }
54059
-
54060
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-connector {
54061
- width: 2rem;
54062
- height: 2px;
54063
- background: var(--er-step-connector);
54064
- }
54065
-
54066
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-connector--completed {
54067
- background: var(--er-step-connector);
54068
- }
54069
-
54070
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-label {
54071
- font-size: 0.75rem;
54072
- color: var(--er-on-surface);
54073
- display: none;
54074
- }
54075
-
54076
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-label--active {
54077
- font-weight: 500;
54078
- }
54079
-
54080
- @container rb-site (min-width: 640px) {
54081
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
54082
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-label {
54083
- display: inline;
54084
- }
54085
- }
54086
- }
54356
+ /* Step indicator internals: styled by the shared .rb-steps / .rb-step-*
54357
+ family (registration-surface.css) via the --rb-reg-step-* mappings in the
54358
+ event-registration var generator; er-* classes remain in markup as hooks.
54359
+ Note: .er-steps-nav above is intentionally retained \u2014 its source position
54360
+ keeps the wizard's 1.5rem step margin winning over the SSR shell's
54361
+ 1.25rem .er-registration-shell__steps override. */
54087
54362
 
54088
54363
  /* Sticky order summary */
54089
54364
  :where(.theme-scope) :where([data-block="event-registration"]) .er-summary {
@@ -56316,295 +56591,420 @@ var containerResponsiveThemeCss = `/*
56316
56591
 
56317
56592
  /* =============================================================================
56318
56593
  * Block: Appointment Booking
56594
+ *
56595
+ * Structural styling comes from the shared registration-surface layer
56596
+ * (registration-surface.css): surface container, option cards + check,
56597
+ * step indicator, wizard actions, on-surface text ramp, stacks, summary box
56598
+ * and skeleton shell. Colors flow through the --rb-reg-* contract, mapped
56599
+ * from this block's --ab-* Tier 3 vars by its var generator.
56600
+ *
56601
+ * Inputs use the theme-generated form-* classes; feedback boxes use the
56602
+ * theme-generated alert / alert-{tone} classes. Only genuinely
56603
+ * booking-specific rules live here.
56604
+ *
56319
56605
  * Uses:
56320
- * - Tier 1 vars: --tb-border, --tb-text, --tb-primary (from theme palette)
56321
- * - Tier 2 vars: --rb-block-radius, --rb-block-transition (from theme scope)
56606
+ * - Tier 1 vars: --tb-* (from theme palette)
56322
56607
  * - Tier 3 vars: --ab-* (from appointment-booking var generator)
56323
56608
  * =============================================================================
56324
56609
  */
56325
56610
 
56326
- /* Main container */
56327
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-container {
56328
- width: 100%;
56611
+ /* Typography helpers */
56612
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-title {
56613
+ font-size: 1.5rem;
56614
+ font-weight: 600;
56615
+ line-height: 1.3;
56329
56616
  }
56330
56617
 
56331
- /* Stack layout utilities */
56332
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-stack {
56333
- display: flex;
56334
- flex-direction: column;
56335
- gap: 1.5rem;
56618
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-subtitle {
56619
+ font-size: 0.9375rem;
56620
+ font-weight: 600;
56621
+ line-height: 1.3;
56336
56622
  }
56337
56623
 
56338
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-stack--sm {
56339
- display: flex;
56340
- flex-direction: column;
56341
- gap: 0.75rem;
56624
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text {
56625
+ font-size: 0.875rem;
56342
56626
  }
56343
56627
 
56344
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-stack--xs {
56345
- display: flex;
56346
- flex-direction: column;
56347
- gap: 0.5rem;
56628
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text--sm {
56629
+ font-size: 0.75rem;
56348
56630
  }
56349
56631
 
56350
- /* Row layout */
56351
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-row {
56352
- display: flex;
56353
- align-items: center;
56354
- gap: 0.75rem;
56632
+ /* Centered state (loading / terminal panels) */
56633
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-center {
56634
+ text-align: center;
56635
+ padding: 2rem;
56355
56636
  }
56356
56637
 
56357
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-row--between {
56358
- justify-content: space-between;
56638
+ /* Terminal state title (below the state icon) */
56639
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-terminal-title {
56640
+ margin: 0.75rem 0 0.5rem 0;
56641
+ font-size: 1.125rem;
56642
+ font-weight: 700;
56643
+ }
56644
+
56645
+ /* State icon color variants (layout from registration-surface.css) */
56646
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .rb-state-icon--success {
56647
+ background: var(--ab-success-bg, rgba(var(--tb-success, 22 163 74), 0.1));
56648
+ color: var(--ab-success-text, rgb(var(--tb-success, 22 163 74)));
56649
+ }
56650
+
56651
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .rb-state-icon--error {
56652
+ background: var(--ab-error-bg, rgba(var(--tb-destructive, 220 38 38), 0.1));
56653
+ color: var(--ab-error-text, rgb(var(--tb-destructive, 220 38 38)));
56359
56654
  }
56360
56655
 
56361
- /* Grid layout */
56362
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-grid {
56656
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .rb-state-icon--info {
56657
+ background: var(--ab-info-bg, rgba(var(--tb-info, 14 165 233), 0.1));
56658
+ color: var(--ab-info-text, rgb(var(--tb-info, 14 165 233)));
56659
+ }
56660
+
56661
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .rb-state-icon--warning {
56662
+ background: var(--ab-warning-bg, rgba(var(--tb-warning, 245 158 11), 0.1));
56663
+ color: var(--ab-warning-text, rgb(var(--tb-warning, 245 158 11)));
56664
+ }
56665
+
56666
+ /* Payment option summary rows (label/value lines inside an option card) */
56667
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-option-rows {
56363
56668
  display: grid;
56364
- gap: 0.75rem;
56669
+ gap: 0.125rem;
56365
56670
  }
56366
56671
 
56367
- /* Center layout */
56368
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-center {
56369
- text-align: center;
56370
- padding: 2rem;
56672
+ /* Date/time pill grids (selection pills extend .rb-option-card) */
56673
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-pill-grid {
56674
+ display: flex;
56675
+ flex-wrap: wrap;
56676
+ gap: 0.5rem;
56371
56677
  }
56372
56678
 
56373
- /* Typography */
56374
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-title {
56375
- font-size: 1.5rem;
56376
- font-weight: 700;
56679
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-date-pill {
56680
+ flex-direction: column;
56681
+ align-items: center;
56682
+ gap: 0.125rem;
56683
+ padding: 0.5rem 0.875rem;
56684
+ min-width: 4.25rem;
56685
+ text-align: center;
56377
56686
  }
56378
56687
 
56379
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-subtitle {
56688
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-time-pill {
56689
+ align-items: center;
56690
+ justify-content: center;
56691
+ padding: 0.5rem 0.875rem;
56692
+ min-width: 5.5rem;
56380
56693
  font-size: 0.875rem;
56381
56694
  font-weight: 500;
56695
+ text-align: center;
56382
56696
  }
56383
56697
 
56384
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text {
56385
- font-size: 0.875rem;
56698
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-pill-caption {
56699
+ font-size: 0.6875rem;
56700
+ font-weight: 600;
56701
+ letter-spacing: 0;
56702
+ line-height: 1.2;
56703
+ text-transform: uppercase;
56704
+ color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
56386
56705
  }
56387
56706
 
56388
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text--sm {
56389
- font-size: 0.75rem;
56707
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-pill-value {
56708
+ font-size: 1.125rem;
56709
+ font-weight: 600;
56710
+ line-height: 1.2;
56390
56711
  }
56391
56712
 
56392
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text--muted {
56393
- opacity: var(--ab-text-muted-opacity, 0.6);
56713
+ /* SSR shell skeleton (mirrors the hydrated layout to reduce hydration jump) */
56714
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-shell {
56715
+ min-height: 18rem;
56394
56716
  }
56395
56717
 
56396
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text--faint {
56397
- opacity: var(--ab-text-faint-opacity, 0.4);
56718
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-shell-button {
56719
+ display: inline-flex;
56720
+ min-height: 2.5rem;
56721
+ align-items: center;
56722
+ justify-content: center;
56723
+ border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.6);
56724
+ background: rgb(var(--tb-primary, 17 24 39));
56725
+ color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
56726
+ padding: 0.625rem 1rem;
56727
+ font-size: 0.875rem;
56728
+ font-weight: 600;
56729
+ line-height: 1.2;
56730
+ text-align: center;
56731
+ white-space: nowrap;
56398
56732
  }
56399
56733
 
56400
- /* Selection cards (service, resource, time slot) */
56401
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card {
56402
- position: relative;
56403
- padding: 1rem;
56404
- border: 2px solid var(--ab-card-border, rgb(var(--tb-border, 226 232 240)));
56405
- border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
56406
- text-align: left;
56407
- background: transparent;
56734
+ /* Inline text-link button (e.g. "Load more dates") */
56735
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-link {
56736
+ display: inline;
56737
+ color: rgb(var(--tb-primary, 17 24 39));
56738
+ background: none;
56739
+ border: none;
56740
+ padding: 0;
56741
+ font: inherit;
56742
+ text-decoration: underline;
56408
56743
  cursor: pointer;
56409
- transition: border-color var(--rb-block-transition, 150ms) ease, background-color var(--rb-block-transition, 150ms) ease;
56410
56744
  }
56411
56745
 
56412
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card:hover {
56413
- border-color: var(--ab-card-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
56746
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-link:hover {
56747
+ text-decoration: none;
56414
56748
  }
56415
56749
 
56416
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card--selected {
56417
- border-color: var(--ab-card-border-selected, rgb(var(--tb-primary, 17 24 39)));
56418
- background-color: var(--ab-card-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.05));
56750
+ /* Altcha wrapper */
56751
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-altcha {
56752
+ margin-top: 1rem;
56419
56753
  }
56420
56754
 
56421
- /* Checkmark indicator */
56422
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-check {
56423
- flex-shrink: 0;
56424
- width: 1.25rem;
56425
- height: 1.25rem;
56426
- border-radius: 50%;
56427
- background-color: var(--ab-check-bg, rgb(var(--tb-primary, 17 24 39)));
56428
- display: flex;
56429
- align-items: center;
56430
- justify-content: center;
56755
+ /* =============================================================================
56756
+ * Shared: Inline Text Marks
56757
+ * =============================================================================
56758
+ */
56759
+
56760
+ :where(.theme-scope) .rb-inline-text-accent,
56761
+ :where(.theme-scope) .rb-inline-text-highlight {
56762
+ font: inherit;
56763
+ letter-spacing: inherit;
56764
+ text-transform: inherit;
56431
56765
  }
56432
56766
 
56433
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-check svg {
56434
- width: 0.75rem;
56435
- height: 0.75rem;
56436
- color: var(--ab-check-text, rgb(var(--tb-background, 255 255 255)));
56767
+ :where(.theme-scope) .rb-inline-text-accent-accent {
56768
+ color: rgb(var(--tb-accent));
56437
56769
  }
56438
56770
 
56439
- /* Info box (service summary) */
56440
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-info-box {
56441
- padding: 1rem;
56442
- border: 1px solid var(--ab-card-border, rgb(var(--tb-border, 226 232 240)));
56443
- border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
56444
- background-color: var(--ab-muted-bg, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
56771
+ :where(.theme-scope) .rb-inline-text-accent-brand {
56772
+ color: rgb(var(--tb-primary));
56445
56773
  }
56446
56774
 
56447
- /* Alert states */
56448
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert {
56449
- padding: 0.75rem 1rem;
56450
- border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
56451
- font-size: 0.875rem;
56775
+ :where(.theme-scope) .rb-inline-text-accent-contrast {
56776
+ color: var(--section-text-color, rgb(var(--tb-text)));
56452
56777
  }
56453
56778
 
56454
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--success {
56455
- background-color: var(--ab-success-bg, rgba(var(--tb-success, 22 163 74), 0.1));
56456
- color: var(--ab-success-text, rgb(var(--tb-success, 22 163 74)));
56779
+ :where(.theme-scope) .rb-inline-text-highlight {
56780
+ border-radius: 0.22em;
56781
+ box-decoration-break: clone;
56782
+ -webkit-box-decoration-break: clone;
56783
+ padding: 0.02em 0.12em;
56457
56784
  }
56458
56785
 
56459
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--error {
56460
- background-color: var(--ab-error-bg, rgba(var(--tb-destructive, 220 38 38), 0.1));
56461
- color: var(--ab-error-text, rgb(var(--tb-destructive, 220 38 38)));
56786
+ :where(.theme-scope) .rb-inline-text-highlight-soft {
56787
+ background: color-mix(in oklab, var(--section-text-color, rgb(var(--tb-text))) 14%, transparent);
56462
56788
  }
56463
56789
 
56464
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--warning {
56465
- background-color: var(--ab-warning-bg, rgba(var(--tb-warning, 245 158 11), 0.1));
56466
- color: var(--ab-warning-text, rgb(var(--tb-warning, 245 158 11)));
56790
+ :where(.theme-scope) .rb-inline-text-highlight-accent {
56791
+ background: color-mix(in oklab, rgb(var(--tb-accent)) 28%, transparent);
56467
56792
  }
56468
56793
 
56469
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--info {
56470
- background-color: var(--ab-info-bg, rgba(var(--tb-info, 14 165 233), 0.1));
56471
- color: var(--ab-info-text, rgb(var(--tb-info, 14 165 233)));
56794
+ :where(.theme-scope) .rb-inline-text-highlight-brand {
56795
+ background: color-mix(in oklab, rgb(var(--tb-primary)) 24%, transparent);
56472
56796
  }
56473
56797
 
56474
- /* Form elements */
56475
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-label {
56476
- display: block;
56477
- font-size: 0.875rem;
56478
- font-weight: 500;
56479
- margin-bottom: 0.5rem;
56798
+ /* =============================================================================
56799
+ * Block: Hero (Phase 2)
56800
+ * Uses theme palette vars directly (no Tier 3 vars needed)
56801
+ * =============================================================================
56802
+ */
56803
+
56804
+ /* Eyebrow - color only (typography via .rb-eyebrow) */
56805
+ :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow:not(.rb-eyebrow-treatment-accent) {
56806
+ color: var(--section-text-color, rgb(var(--tb-text)));
56480
56807
  }
56481
56808
 
56482
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-required {
56483
- color: var(--ab-error-text, rgb(var(--tb-destructive, 220 38 38)));
56484
- margin-left: 0.125rem;
56809
+ /* Subheadline - supporting text below headline */
56810
+ :where(.theme-scope) :where([data-block="hero"]) .hero-headline {
56811
+ text-wrap: balance;
56485
56812
  }
56486
56813
 
56487
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-input,
56488
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-select,
56489
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-textarea {
56490
- width: 100%;
56491
- padding: 0.5rem 0.75rem;
56492
- border: 1px solid var(--ab-input-border, rgb(var(--tb-border, 226 232 240)));
56493
- border-radius: var(--ab-input-radius, var(--rb-input-radius, var(--radius-control, var(--rb-block-radius, 1rem))));
56494
- background: transparent;
56495
- font-size: 0.875rem;
56496
- transition: border-color var(--rb-block-transition, 150ms) ease, box-shadow var(--rb-block-transition, 150ms) ease;
56814
+ :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
56815
+ font-size: 1.125rem;
56816
+ color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
56497
56817
  }
56498
56818
 
56499
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-input:focus,
56500
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-select:focus,
56501
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-textarea:focus {
56502
- outline: none;
56503
- border-color: var(--ab-card-border-selected, rgb(var(--tb-primary, 17 24 39)));
56504
- box-shadow: 0 0 0 3px var(--ab-input-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
56819
+ @container rb-site (min-width: 640px) {
56820
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56821
+ :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
56822
+ font-size: 1.25rem;
56823
+ }
56824
+ }
56505
56825
  }
56506
56826
 
56507
- /* Buttons */
56508
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn {
56509
- display: inline-flex;
56510
- align-items: center;
56511
- justify-content: center;
56512
- padding: 0.5rem 1.5rem;
56513
- border-radius: var(--ab-button-radius, var(--rb-button-radius, var(--rb-block-radius, 1rem)));
56514
- font-size: 0.875rem;
56515
- font-weight: 500;
56516
- cursor: pointer;
56517
- transition: background-color var(--rb-block-transition, 150ms) ease, border-color var(--rb-block-transition, 150ms) ease;
56827
+ /* Hero typography scales. These classes are emitted by Theme V2 hero looks. */
56828
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-quiet .hero-headline {
56829
+ font-size: clamp(2rem, 4vw, 3rem);
56830
+ line-height: 1.12;
56518
56831
  }
56519
56832
 
56520
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--primary {
56521
- flex: 1;
56522
- background-color: var(--ab-btn-primary-bg, rgb(var(--tb-primary, 17 24 39)));
56523
- color: var(--ab-btn-primary-text, rgb(var(--tb-primaryForeground, 255 255 255)));
56524
- border: none;
56833
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-quiet .hero-subheadline {
56834
+ font-size: clamp(1rem, 1.2vw, 1.25rem);
56835
+ line-height: 1.55;
56525
56836
  }
56526
56837
 
56527
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--primary:hover:not(:disabled) {
56528
- background-color: var(--ab-btn-primary-hover, rgba(var(--tb-primary, 17 24 39), 0.9));
56838
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-headline {
56839
+ font-size: clamp(2.75rem, 5.6vw, 4.75rem);
56840
+ line-height: 1.06;
56529
56841
  }
56530
56842
 
56531
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--secondary {
56532
- background: transparent;
56533
- border: 1px solid var(--ab-btn-secondary-border, rgb(var(--tb-border, 226 232 240)));
56843
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-subheadline {
56844
+ font-size: clamp(1.0625rem, 1.4vw, 1.375rem);
56845
+ line-height: 1.55;
56534
56846
  }
56535
56847
 
56536
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--secondary:hover:not(:disabled) {
56537
- background-color: var(--ab-btn-secondary-hover, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
56848
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline {
56849
+ font-size: clamp(3.5rem, 7.2vw, 6.25rem);
56850
+ line-height: 1;
56538
56851
  }
56539
56852
 
56540
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--link {
56541
- background: transparent;
56542
- border: none;
56543
- padding: 0;
56544
- text-decoration: underline;
56853
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-subheadline {
56854
+ font-size: clamp(1.125rem, 1.5vw, 1.5rem);
56855
+ line-height: 1.5;
56545
56856
  }
56546
56857
 
56547
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--link:hover {
56548
- text-decoration: none;
56858
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline {
56859
+ font-size: clamp(4.25rem, 10vw, 8.5rem);
56860
+ line-height: 0.94;
56549
56861
  }
56550
56862
 
56551
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn:disabled {
56552
- opacity: 0.5;
56553
- cursor: not-allowed;
56863
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-subheadline {
56864
+ font-size: clamp(1.125rem, 1.4vw, 1.5rem);
56865
+ line-height: 1.45;
56554
56866
  }
56555
56867
 
56556
- /* Actions row */
56557
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-actions {
56558
- display: flex;
56559
- gap: 0.75rem;
56560
- margin-top: 1.5rem;
56868
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-medium.rb-hero-typography-poster .hero-headline {
56869
+ font-size: clamp(3.5rem, 7.5vw, 6.5rem);
56561
56870
  }
56562
56871
 
56563
- /* Skeleton loading */
56564
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-skeleton {
56565
- height: 2.5rem;
56566
- width: 100%;
56567
- background-color: var(--ab-muted-bg, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
56568
- border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
56569
- animation: ab-pulse 1.5s ease-in-out infinite;
56872
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
56873
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
56874
+ font-size: clamp(3rem, 6vw, 5.25rem);
56875
+ line-height: 1.02;
56570
56876
  }
56571
56877
 
56572
- @keyframes ab-pulse {
56573
- 0%, 100% {
56574
- opacity: 1;
56575
- }
56576
- 50% {
56577
- opacity: 0.5;
56878
+ @container rb-site (max-width: 639px) {
56879
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56880
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline,
56881
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline,
56882
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
56883
+ :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
56884
+ font-size: clamp(2.5rem, 11vw, 3.5rem);
56885
+ line-height: 1.05;
56578
56886
  }
56579
56887
  }
56888
+ }
56580
56889
 
56581
- /* Field wrapper */
56582
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-field {
56890
+ /* =============================================================================
56891
+ * Shared: Heading Group (used by CTA, single-button, etc.)
56892
+ * =============================================================================
56893
+ */
56894
+
56895
+ /* Eyebrow - color only (typography via .rb-eyebrow) */
56896
+ :where(.theme-scope) .heading-eyebrow:not(.rb-eyebrow-treatment-accent) {
56897
+ color: rgb(var(--tb-mutedText));
56898
+ }
56899
+
56900
+ /* =============================================================================
56901
+ * Block: CTA (Phase 2)
56902
+ * =============================================================================
56903
+ */
56904
+
56905
+ /* CTA content/body text */
56906
+ :where(.theme-scope) :where([data-block="cta-full"]) .cta-content {
56907
+ color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
56908
+ }
56909
+
56910
+ /* CTA button row container */
56911
+ :where(.theme-scope) :where([data-block="cta-full"]) .cta-row {
56583
56912
  display: flex;
56584
- flex-direction: column;
56585
- gap: 0.5rem;
56913
+ flex-wrap: wrap;
56586
56914
  }
56587
56915
 
56588
- /* Altcha wrapper */
56589
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-altcha {
56590
- margin-top: 1rem;
56916
+ /* =============================================================================
56917
+ * Block: Body Text (content block, Phase 2)
56918
+ *
56919
+ * Style contract:
56920
+ * - Variant styling is keyed off \`data-block-variant\` on the PageRenderer wrapper.
56921
+ * - Prose sizing comes from \`rb-prose-*\` (theme-aware) in \`packages/blocks/src/theme/styles.css\`.
56922
+ * =============================================================================
56923
+ */
56924
+
56925
+ /* Body copy rich text container */
56926
+ :where(.theme-scope) :where([data-block="body-text"]) .body-copy-container {
56927
+ max-width: 48rem;
56928
+ margin-left: 0;
56929
+ margin-right: auto;
56591
56930
  }
56592
56931
 
56593
- /* Link button (inline text link) */
56594
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-link {
56595
- display: inline;
56596
- margin-left: 0.5rem;
56597
- color: rgb(var(--tb-primary, 17 24 39));
56598
- background: none;
56599
- border: none;
56600
- padding: 0;
56601
- font: inherit;
56602
- text-decoration: underline;
56603
- cursor: pointer;
56932
+ :where(.theme-scope) :where([data-block="body-text"]) .body-copy-container.rb-items-center {
56933
+ margin-left: auto;
56934
+ margin-right: auto;
56604
56935
  }
56605
56936
 
56606
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-link:hover {
56607
- text-decoration: none;
56937
+ /* Body copy rich text */
56938
+ :where(.theme-scope) :where([data-block="body-text"]) .body-copy-body {
56939
+ color: inherit;
56940
+ }
56941
+
56942
+ /* Ensure editing mode doesn't silently change typography inside ProseMirror */
56943
+ :where(.theme-scope) :where([data-block="body-text"]) .body-copy-body :where(.ProseMirror) {
56944
+ font-size: inherit;
56945
+ line-height: inherit;
56946
+ }
56947
+
56948
+ /* Variant: Intro (centered, wider container, larger text, relaxed leading) */
56949
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-container {
56950
+ max-width: 60rem;
56951
+ }
56952
+
56953
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
56954
+ font-size: var(--rb-prose-lg-font-size);
56955
+ line-height: var(--rb-prose-lg-line-height);
56956
+ }
56957
+
56958
+ @container rb-site (min-width: 640px) {
56959
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56960
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
56961
+ font-size: var(--rb-prose-xl-sm-font-size);
56962
+ line-height: var(--rb-prose-xl-sm-line-height);
56963
+ }
56964
+ }
56965
+ }
56966
+
56967
+ /* Variant: Narrow (left-aligned, shorter line length) */
56968
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
56969
+ max-width: 34rem;
56970
+ margin-left: 0;
56971
+ margin-right: auto;
56972
+ }
56973
+
56974
+ /* Override prose sizing via theme-aware vars (see styles.css) */
56975
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) {
56976
+ /* Mobile-first: use rb-prose-lg sizing below 640px */
56977
+ --rb-prose-lg-font-size: clamp(
56978
+ calc(var(--fs-body, 16px) * 1.35),
56979
+ calc(var(--fs-body, 16px) * 1.1 + 1.25vw),
56980
+ calc(var(--fs-body, 16px) * 1.6)
56981
+ );
56982
+ --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.2);
56983
+
56984
+ /* At >= 640px, rb-prose-xl-sm applies and becomes the dominant size */
56985
+ --rb-prose-xl-sm-font-size: clamp(
56986
+ calc(var(--fs-body, 16px) * 1.55),
56987
+ calc(var(--fs-body, 16px) * 1.25 + 1.5vw),
56988
+ calc(var(--fs-body, 16px) * 1.8)
56989
+ );
56990
+ --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.2);
56991
+ }
56992
+
56993
+ /* =============================================================================
56994
+ * Block: Form (formCopy fragment, Phase 2)
56995
+ * =============================================================================
56996
+ */
56997
+
56998
+ /* Form title */
56999
+ :where(.theme-scope) :where([data-block="form"]) .form-copy-title {
57000
+ font-size: 1.5rem;
57001
+ font-weight: 600;
57002
+ }
57003
+
57004
+ /* Form intro text */
57005
+ :where(.theme-scope) :where([data-block="form"]) .form-copy-intro {
57006
+ font-size: 1rem;
57007
+ color: var(--section-text-color, rgb(var(--tb-text)));
56608
57008
  }
56609
57009
 
56610
57010
  /* =============================================================================
@@ -56694,261 +57094,6 @@ var containerResponsiveThemeCss = `/*
56694
57094
  margin-top: 0.5rem;
56695
57095
  }
56696
57096
 
56697
- /* =============================================================================
56698
- * Shared: Inline Text Marks
56699
- * =============================================================================
56700
- */
56701
-
56702
- :where(.theme-scope) .rb-inline-text-accent,
56703
- :where(.theme-scope) .rb-inline-text-highlight {
56704
- font: inherit;
56705
- letter-spacing: inherit;
56706
- text-transform: inherit;
56707
- }
56708
-
56709
- :where(.theme-scope) .rb-inline-text-accent-accent {
56710
- color: rgb(var(--tb-accent));
56711
- }
56712
-
56713
- :where(.theme-scope) .rb-inline-text-accent-brand {
56714
- color: rgb(var(--tb-primary));
56715
- }
56716
-
56717
- :where(.theme-scope) .rb-inline-text-accent-contrast {
56718
- color: var(--section-text-color, rgb(var(--tb-text)));
56719
- }
56720
-
56721
- :where(.theme-scope) .rb-inline-text-highlight {
56722
- border-radius: 0.22em;
56723
- box-decoration-break: clone;
56724
- -webkit-box-decoration-break: clone;
56725
- padding: 0.02em 0.12em;
56726
- }
56727
-
56728
- :where(.theme-scope) .rb-inline-text-highlight-soft {
56729
- background: color-mix(in oklab, var(--section-text-color, rgb(var(--tb-text))) 14%, transparent);
56730
- }
56731
-
56732
- :where(.theme-scope) .rb-inline-text-highlight-accent {
56733
- background: color-mix(in oklab, rgb(var(--tb-accent)) 28%, transparent);
56734
- }
56735
-
56736
- :where(.theme-scope) .rb-inline-text-highlight-brand {
56737
- background: color-mix(in oklab, rgb(var(--tb-primary)) 24%, transparent);
56738
- }
56739
-
56740
- /* =============================================================================
56741
- * Block: Hero (Phase 2)
56742
- * Uses theme palette vars directly (no Tier 3 vars needed)
56743
- * =============================================================================
56744
- */
56745
-
56746
- /* Eyebrow - color only (typography via .rb-eyebrow) */
56747
- :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow:not(.rb-eyebrow-treatment-accent) {
56748
- color: var(--section-text-color, rgb(var(--tb-text)));
56749
- }
56750
-
56751
- /* Subheadline - supporting text below headline */
56752
- :where(.theme-scope) :where([data-block="hero"]) .hero-headline {
56753
- text-wrap: balance;
56754
- }
56755
-
56756
- :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
56757
- font-size: 1.125rem;
56758
- color: var(--section-supporting-color, var(--section-text-color, rgb(var(--tb-text))));
56759
- }
56760
-
56761
- @container rb-site (min-width: 640px) {
56762
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56763
- :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
56764
- font-size: 1.25rem;
56765
- }
56766
- }
56767
- }
56768
-
56769
- /* Hero typography scales. These classes are emitted by Theme V2 hero looks. */
56770
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-quiet .hero-headline {
56771
- font-size: clamp(2rem, 4vw, 3rem);
56772
- line-height: 1.12;
56773
- }
56774
-
56775
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-quiet .hero-subheadline {
56776
- font-size: clamp(1rem, 1.2vw, 1.25rem);
56777
- line-height: 1.55;
56778
- }
56779
-
56780
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-headline {
56781
- font-size: clamp(2.75rem, 5.6vw, 4.75rem);
56782
- line-height: 1.06;
56783
- }
56784
-
56785
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-editorial .hero-subheadline {
56786
- font-size: clamp(1.0625rem, 1.4vw, 1.375rem);
56787
- line-height: 1.55;
56788
- }
56789
-
56790
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline {
56791
- font-size: clamp(3.5rem, 7.2vw, 6.25rem);
56792
- line-height: 1;
56793
- }
56794
-
56795
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-subheadline {
56796
- font-size: clamp(1.125rem, 1.5vw, 1.5rem);
56797
- line-height: 1.5;
56798
- }
56799
-
56800
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline {
56801
- font-size: clamp(4.25rem, 10vw, 8.5rem);
56802
- line-height: 0.94;
56803
- }
56804
-
56805
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-subheadline {
56806
- font-size: clamp(1.125rem, 1.4vw, 1.5rem);
56807
- line-height: 1.45;
56808
- }
56809
-
56810
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-medium.rb-hero-typography-poster .hero-headline {
56811
- font-size: clamp(3.5rem, 7.5vw, 6.5rem);
56812
- }
56813
-
56814
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
56815
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
56816
- font-size: clamp(3rem, 6vw, 5.25rem);
56817
- line-height: 1.02;
56818
- }
56819
-
56820
- @container rb-site (max-width: 639px) {
56821
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56822
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-poster .hero-headline,
56823
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-typography-display .hero-headline,
56824
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-poster .hero-headline,
56825
- :where(.theme-scope) :where([data-block="hero"]) .rb-hero-title-long.rb-hero-typography-display .hero-headline {
56826
- font-size: clamp(2.5rem, 11vw, 3.5rem);
56827
- line-height: 1.05;
56828
- }
56829
- }
56830
- }
56831
-
56832
- /* =============================================================================
56833
- * Shared: Heading Group (used by CTA, single-button, etc.)
56834
- * =============================================================================
56835
- */
56836
-
56837
- /* Eyebrow - color only (typography via .rb-eyebrow) */
56838
- :where(.theme-scope) .heading-eyebrow:not(.rb-eyebrow-treatment-accent) {
56839
- color: rgb(var(--tb-mutedText));
56840
- }
56841
-
56842
- /* =============================================================================
56843
- * Block: CTA (Phase 2)
56844
- * =============================================================================
56845
- */
56846
-
56847
- /* CTA content/body text */
56848
- :where(.theme-scope) :where([data-block="cta-full"]) .cta-content {
56849
- color: var(--section-supporting-color, rgb(var(--tb-mutedText)));
56850
- }
56851
-
56852
- /* CTA button row container */
56853
- :where(.theme-scope) :where([data-block="cta-full"]) .cta-row {
56854
- display: flex;
56855
- flex-wrap: wrap;
56856
- }
56857
-
56858
- /* =============================================================================
56859
- * Block: Body Text (content block, Phase 2)
56860
- *
56861
- * Style contract:
56862
- * - Variant styling is keyed off \`data-block-variant\` on the PageRenderer wrapper.
56863
- * - Prose sizing comes from \`rb-prose-*\` (theme-aware) in \`packages/blocks/src/theme/styles.css\`.
56864
- * =============================================================================
56865
- */
56866
-
56867
- /* Body copy rich text container */
56868
- :where(.theme-scope) :where([data-block="body-text"]) .body-copy-container {
56869
- max-width: 48rem;
56870
- margin-left: 0;
56871
- margin-right: auto;
56872
- }
56873
-
56874
- :where(.theme-scope) :where([data-block="body-text"]) .body-copy-container.rb-items-center {
56875
- margin-left: auto;
56876
- margin-right: auto;
56877
- }
56878
-
56879
- /* Body copy rich text */
56880
- :where(.theme-scope) :where([data-block="body-text"]) .body-copy-body {
56881
- color: inherit;
56882
- }
56883
-
56884
- /* Ensure editing mode doesn't silently change typography inside ProseMirror */
56885
- :where(.theme-scope) :where([data-block="body-text"]) .body-copy-body :where(.ProseMirror) {
56886
- font-size: inherit;
56887
- line-height: inherit;
56888
- }
56889
-
56890
- /* Variant: Intro (centered, wider container, larger text, relaxed leading) */
56891
- :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-container {
56892
- max-width: 60rem;
56893
- }
56894
-
56895
- :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
56896
- font-size: var(--rb-prose-lg-font-size);
56897
- line-height: var(--rb-prose-lg-line-height);
56898
- }
56899
-
56900
- @container rb-site (min-width: 640px) {
56901
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56902
- :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
56903
- font-size: var(--rb-prose-xl-sm-font-size);
56904
- line-height: var(--rb-prose-xl-sm-line-height);
56905
- }
56906
- }
56907
- }
56908
-
56909
- /* Variant: Narrow (left-aligned, shorter line length) */
56910
- :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
56911
- max-width: 34rem;
56912
- margin-left: 0;
56913
- margin-right: auto;
56914
- }
56915
-
56916
- /* Override prose sizing via theme-aware vars (see styles.css) */
56917
- :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) {
56918
- /* Mobile-first: use rb-prose-lg sizing below 640px */
56919
- --rb-prose-lg-font-size: clamp(
56920
- calc(var(--fs-body, 16px) * 1.35),
56921
- calc(var(--fs-body, 16px) * 1.1 + 1.25vw),
56922
- calc(var(--fs-body, 16px) * 1.6)
56923
- );
56924
- --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.2);
56925
-
56926
- /* At >= 640px, rb-prose-xl-sm applies and becomes the dominant size */
56927
- --rb-prose-xl-sm-font-size: clamp(
56928
- calc(var(--fs-body, 16px) * 1.55),
56929
- calc(var(--fs-body, 16px) * 1.25 + 1.5vw),
56930
- calc(var(--fs-body, 16px) * 1.8)
56931
- );
56932
- --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.2);
56933
- }
56934
-
56935
- /* =============================================================================
56936
- * Block: Form (formCopy fragment, Phase 2)
56937
- * =============================================================================
56938
- */
56939
-
56940
- /* Form title */
56941
- :where(.theme-scope) :where([data-block="form"]) .form-copy-title {
56942
- font-size: 1.5rem;
56943
- font-weight: 600;
56944
- }
56945
-
56946
- /* Form intro text */
56947
- :where(.theme-scope) :where([data-block="form"]) .form-copy-intro {
56948
- font-size: 1rem;
56949
- color: var(--section-text-color, rgb(var(--tb-text)));
56950
- }
56951
-
56952
57097
  /* =============================================================================
56953
57098
  * Block-Level Override Utilities
56954
57099
  *
@@ -58565,14 +58710,11 @@ var containerResponsiveThemeCss = `/*
58565
58710
  --cr-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
58566
58711
  }
58567
58712
 
58568
- /* Container */
58713
+ /* Container: base styling comes from the shared .rb-reg-surface
58714
+ (registration-surface.css); these overrides preserve course
58715
+ registration's pre-extraction look (fixed padding, centered). */
58569
58716
  :where(.theme-scope) :where([data-block="course-registration"]) .cr-container {
58570
- border-radius: var(--rb-block-radius);
58571
- border: 1px solid var(--cr-border);
58572
58717
  padding: 1.5rem;
58573
- background: rgb(var(--tb-surface));
58574
- color: var(--cr-on-surface);
58575
- max-width: 50rem; /* 800px */
58576
58718
  margin-inline: auto;
58577
58719
  }
58578
58720
 
@@ -59249,7 +59391,7 @@ var containerResponsiveThemeCss = `/*
59249
59391
  padding: 2rem 1rem;
59250
59392
  }
59251
59393
 
59252
- /* State icon color variants (layout from registration-shared.css) */
59394
+ /* State icon color variants (layout from registration-surface.css) */
59253
59395
  :where(.theme-scope) :where([data-block="course-registration"]) .rb-state-icon--success {
59254
59396
  background: var(--cr-success-bg);
59255
59397
  color: var(--cr-success-text);
@@ -61301,6 +61443,8 @@ function PageContent({
61301
61443
  occurrenceContext: dataContext?.occurrenceContext ?? null,
61302
61444
  entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
61303
61445
  contentEntry: dataContext?.contentEntry ?? null,
61446
+ pageSurface: dataContext?.pageSurface ?? null,
61447
+ subject: dataContext?.subject ?? null,
61304
61448
  editableRouteMetadataFieldIds: dataContext?.editableRouteMetadataFieldIds ?? null,
61305
61449
  previewStage: dataContext?.previewStage,
61306
61450
  supabaseUrl,
@@ -67965,6 +68109,14 @@ var ENDPOINT_DEFINITIONS = {
67965
68109
  responseKind: "json",
67966
68110
  errors: []
67967
68111
  },
68112
+ adminResolveSiteBillingManualReview: {
68113
+ path: "/admin/sites/{siteId}/billing/manual-reviews/{reviewId}/resolve",
68114
+ method: "POST",
68115
+ tags: ["admin", "site-{siteId}", "billing"],
68116
+ auth: "admin",
68117
+ responseKind: "json",
68118
+ errors: []
68119
+ },
67968
68120
  // Admin GSC/SEO endpoints
67969
68121
  adminGscVerifyStart: {
67970
68122
  path: "/admin/seo/gsc/properties/verify/start",
@@ -70149,6 +70301,10 @@ var MultiPageUpdateResponse = z76.object({
70149
70301
  function isSupportedLoaderEndpoint2(endpoint) {
70150
70302
  return SUPPORTED_LOADER_ENDPOINTS.includes(endpoint);
70151
70303
  }
70304
+ var defaultPrefetchBlockDataDeps = {
70305
+ prefetchBlockDataCore: prefetchBlockData,
70306
+ normalizeLoaderParams
70307
+ };
70152
70308
  var ENTRY_REF_KEYS = [
70153
70309
  "identifier",
70154
70310
  "entryIdentifier",
@@ -70411,18 +70567,27 @@ async function getPublicWeeklySlotAvailability({ client, params }) {
70411
70567
  });
70412
70568
  }
70413
70569
  async function prefetchBlockData2(page, context, client, options) {
70570
+ return prefetchBlockDataWithDeps(
70571
+ defaultPrefetchBlockDataDeps,
70572
+ page,
70573
+ context,
70574
+ client,
70575
+ options
70576
+ );
70577
+ }
70578
+ async function prefetchBlockDataWithDeps(deps, page, context, client, options) {
70414
70579
  const { customBlocks } = options ?? {};
70415
70580
  const customBlockMap = new Map(
70416
70581
  (customBlocks ?? []).map((block) => [block.id, block])
70417
70582
  );
70418
- return prefetchBlockData(page, context, {
70583
+ return deps.prefetchBlockDataCore(page, context, {
70419
70584
  apiClient: async ({ endpoint, params }) => {
70420
70585
  if (!isSupportedLoaderEndpoint2(endpoint)) {
70421
70586
  throw new Error(
70422
70587
  `Unsupported loader endpoint: ${endpoint}. SDK only supports: ${SUPPORTED_LOADER_ENDPOINTS.join(", ")}`
70423
70588
  );
70424
70589
  }
70425
- const resolvedParams = normalizeLoaderParams(endpoint, params, context);
70590
+ const resolvedParams = deps.normalizeLoaderParams(endpoint, params, context);
70426
70591
  return await loaderAdapters[endpoint]({ client, params: resolvedParams });
70427
70592
  },
70428
70593
  isValidEndpoint: isSupportedLoaderEndpoint2,
@@ -70746,7 +70911,15 @@ function sanitizeNullableSdkRuntimeBlockContent(blockKind, content) {
70746
70911
  }
70747
70912
 
70748
70913
  // src/rendering/helpers/loadPage.ts
70914
+ var defaultLoadPageDeps = {
70915
+ prefetchBlockData: prefetchBlockData2,
70916
+ executeCodeLoaders,
70917
+ mergeLoaderResults
70918
+ };
70749
70919
  async function loadPage(params) {
70920
+ return loadPageWithDeps(defaultLoadPageDeps, params);
70921
+ }
70922
+ async function loadPageWithDeps(deps, params) {
70750
70923
  const {
70751
70924
  client,
70752
70925
  siteId,
@@ -70789,7 +70962,7 @@ async function loadPage(params) {
70789
70962
  previewStage: preview ? "preview" : "published",
70790
70963
  searchParams
70791
70964
  };
70792
- const configData = await prefetchBlockData2(
70965
+ const configData = await deps.prefetchBlockData(
70793
70966
  pageOutline,
70794
70967
  prefetchContext,
70795
70968
  client,
@@ -70800,12 +70973,12 @@ async function loadPage(params) {
70800
70973
  );
70801
70974
  let resolvedData = configData;
70802
70975
  if (dataLoaderOverrides && Object.keys(dataLoaderOverrides).length > 0) {
70803
- const codeData = await executeCodeLoaders(
70976
+ const codeData = await deps.executeCodeLoaders(
70804
70977
  pageOutline,
70805
70978
  prefetchContext,
70806
70979
  dataLoaderOverrides
70807
70980
  );
70808
- resolvedData = mergeLoaderResults(configData, codeData);
70981
+ resolvedData = deps.mergeLoaderResults(configData, codeData);
70809
70982
  }
70810
70983
  return {
70811
70984
  page: pageOutline,
@@ -71093,12 +71266,18 @@ function selectBlocksForDeclaredEntrySlot(input) {
71093
71266
  }
71094
71267
 
71095
71268
  // src/rendering/helpers/loadContent.ts
71269
+ var defaultLoadContentDeps = {
71270
+ prefetchBlockData: prefetchBlockData2
71271
+ };
71096
71272
  function isPageContent(result) {
71097
71273
  return result.type === "page";
71098
71274
  }
71099
71275
  function isEntryContent(result) {
71100
71276
  return result.type === "entry";
71101
71277
  }
71278
+ function isPageSurfaceContent(result) {
71279
+ return result.type === "pageSurface";
71280
+ }
71102
71281
  function isContentLoadNotFoundError(error) {
71103
71282
  if (typeof error !== "object" || error === null || !("status" in error)) {
71104
71283
  return false;
@@ -71109,6 +71288,9 @@ function getRejectedReason(result) {
71109
71288
  return result.reason;
71110
71289
  }
71111
71290
  async function loadContent(params) {
71291
+ return loadContentWithDeps(defaultLoadContentDeps, params);
71292
+ }
71293
+ async function loadContentWithDeps(deps, params) {
71112
71294
  const {
71113
71295
  client,
71114
71296
  siteId,
@@ -71137,7 +71319,7 @@ async function loadContent(params) {
71137
71319
  }
71138
71320
  const site = siteResult.value;
71139
71321
  const contentResponse = contentResult.value;
71140
- return loadContentFromContentResponse({
71322
+ return loadContentFromContentResponseWithDeps(deps, {
71141
71323
  client,
71142
71324
  siteId,
71143
71325
  site,
@@ -71145,8 +71327,14 @@ async function loadContent(params) {
71145
71327
  preview
71146
71328
  });
71147
71329
  }
71148
- async function loadContentFromContentResponse(params) {
71149
- const { client, siteId, site, contentResponse, preview = false } = params;
71330
+ async function loadContentFromContentResponseWithDeps(deps, params) {
71331
+ const {
71332
+ client,
71333
+ siteId,
71334
+ site,
71335
+ contentResponse,
71336
+ preview = false
71337
+ } = params;
71150
71338
  const support = buildSiteRenderSupport(
71151
71339
  site,
71152
71340
  collectMediaAssetSidecar(contentResponse.mediaAssets)
@@ -71176,6 +71364,7 @@ async function loadContentFromContentResponse(params) {
71176
71364
  entry,
71177
71365
  { siteId, preview },
71178
71366
  client,
71367
+ deps,
71179
71368
  { customBlocks: support.customBlocks }
71180
71369
  );
71181
71370
  return {
@@ -71247,6 +71436,7 @@ async function loadContentFromContentResponse(params) {
71247
71436
  pagePurpose: "page-surface-template",
71248
71437
  context: { siteId, preview },
71249
71438
  client,
71439
+ deps,
71250
71440
  options: { customBlocks: support.customBlocks }
71251
71441
  });
71252
71442
  return {
@@ -71289,7 +71479,7 @@ async function loadContentFromContentResponse(params) {
71289
71479
  purpose: pageData.purpose,
71290
71480
  blocks: pageData.blocks
71291
71481
  });
71292
- const resolvedData = await prefetchBlockData2(
71482
+ const resolvedData = await deps.prefetchBlockData(
71293
71483
  pageOutline,
71294
71484
  {
71295
71485
  siteId,
@@ -71338,7 +71528,7 @@ function isEntryResponse(response) {
71338
71528
  function isPageSurfaceResponse(response) {
71339
71529
  return response.type === "pageSurface";
71340
71530
  }
71341
- async function processEntryTemplate(templates, entrySlots, entry, context, client, options) {
71531
+ async function processEntryTemplate(templates, entrySlots, entry, context, client, deps, options) {
71342
71532
  return processTemplatePage({
71343
71533
  templates,
71344
71534
  slotContent: entrySlots,
@@ -71360,6 +71550,7 @@ async function processEntryTemplate(templates, entrySlots, entry, context, clien
71360
71550
  pagePurpose: "entry-template",
71361
71551
  context,
71362
71552
  client,
71553
+ deps,
71363
71554
  options
71364
71555
  });
71365
71556
  }
@@ -71380,7 +71571,7 @@ async function processTemplatePage(input) {
71380
71571
  purpose: input.pagePurpose,
71381
71572
  blocks
71382
71573
  };
71383
- const resolvedData = await prefetchBlockData2(
71574
+ const resolvedData = await input.deps.prefetchBlockData(
71384
71575
  templatePage,
71385
71576
  {
71386
71577
  siteId: input.context.siteId,
@@ -71510,6 +71701,7 @@ export {
71510
71701
  defineLazyBlockOverride,
71511
71702
  isEntryContent,
71512
71703
  isPageContent,
71704
+ isPageSurfaceContent,
71513
71705
  loadContent,
71514
71706
  loadPage,
71515
71707
  resolveImageSourceSetWithContext2 as resolveImageSourceSetWithContext,