@riverbankcms/sdk 0.77.0 → 0.77.1

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 (46) hide show
  1. package/dist/{PreviewEditorSidebar-XSX7QKHQ.mjs → PreviewEditorSidebar-DVUG7GK4.mjs} +2 -2
  2. package/dist/{PreviewEditorUI-YZNEZ3QD.mjs → PreviewEditorUI-P7RN4CDS.mjs} +2 -2
  3. package/dist/SdkPreviewModeRuntime-KLPX47SE.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +40 -30
  5. package/dist/_dts/blocks/src/customBlockRegistry.d.ts +20 -1
  6. package/dist/_dts/blocks/src/index.d.ts +2 -2
  7. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +2 -2
  8. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +5 -0
  9. package/dist/_dts/blocks/src/system/runtime/components/multi-step/runtimeFormValidation.d.ts +28 -0
  10. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +4 -4
  11. package/dist/_dts/sdk/src/contracts/theme.d.ts +1 -1
  12. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -2
  13. package/dist/_dts/sdk/src/version.d.ts +1 -1
  14. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  15. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +27 -27
  16. package/dist/_dts/theme-core/src/schema.d.ts +26 -30
  17. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +1 -1
  18. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +4 -4
  19. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +63 -33
  20. package/dist/{chunk-EAWHBECW.mjs → chunk-2SPENC5M.mjs} +5 -5
  21. package/dist/{chunk-GSQX43EZ.mjs → chunk-IENWFSLO.mjs} +22 -41
  22. package/dist/{chunk-WLQBJN2Z.mjs → chunk-KWJPDZH2.mjs} +1815 -1338
  23. package/dist/{chunk-ANKDYZ2E.mjs → chunk-ZYEJLCTN.mjs} +1 -1
  24. package/dist/cli/index.mjs +381 -176
  25. package/dist/client/client.mjs +1574 -1252
  26. package/dist/client/hooks.mjs +369 -170
  27. package/dist/client/rendering.mjs +1588 -1257
  28. package/dist/preview-next/client/runtime.mjs +3 -3
  29. package/dist/{sdk-runtime-Q6MTR4KL.mjs → sdk-runtime-6UT2S7KZ.mjs} +4 -4
  30. package/dist/server/components.mjs +1561 -1239
  31. package/dist/server/config-validation.mjs +369 -170
  32. package/dist/server/config.mjs +369 -170
  33. package/dist/server/data.mjs +369 -170
  34. package/dist/server/index.mjs +1 -1
  35. package/dist/server/next.mjs +1547 -1234
  36. package/dist/server/page-converter.mjs +362 -165
  37. package/dist/server/prebuild.mjs +1 -1
  38. package/dist/server/rendering/server.mjs +1561 -1239
  39. package/dist/server/rendering.mjs +1561 -1239
  40. package/dist/server/routing.mjs +370 -171
  41. package/dist/server/server.mjs +370 -171
  42. package/dist/server/theme-bridge.mjs +1156 -1035
  43. package/dist/server/theme.mjs +79 -11
  44. package/dist/styles/index.css +1081 -1028
  45. package/package.json +1 -1
  46. package/dist/SdkPreviewModeRuntime-5FS5E6BI.mjs +0 -8
@@ -603,6 +603,16 @@ var init_business_address = __esm({
603
603
  }
604
604
  });
605
605
 
606
+ // ../core/src/assert-never.ts
607
+ function assertNever3(value, message = "Unexpected variant") {
608
+ throw new Error(`${message}: ${String(value)}`);
609
+ }
610
+ var init_assert_never = __esm({
611
+ "../core/src/assert-never.ts"() {
612
+ "use strict";
613
+ }
614
+ });
615
+
606
616
  // ../core/src/narrow-result.ts
607
617
  var init_narrow_result = __esm({
608
618
  "../core/src/narrow-result.ts"() {
@@ -693,6 +703,7 @@ var init_src = __esm({
693
703
  init_location();
694
704
  init_business_address();
695
705
  init_result();
706
+ init_assert_never();
696
707
  init_narrow_result();
697
708
  init_non_empty_array();
698
709
  init_editor_state();
@@ -7410,8 +7421,19 @@ var init_schema3 = __esm({
7410
7421
  colorToken: themeColorTokenSchema.nullable().optional()
7411
7422
  });
7412
7423
  proseLinkUnderlineStyleSchema = z24.enum(["solid", "dotted", "dashed"]);
7413
- proseLinkUnderlineThicknessSchema = z24.enum(["auto", "fromFont", "thin", "medium", "thick"]);
7414
- proseLinkUnderlineOffsetSchema = z24.enum(["auto", "tight", "normal", "loose"]);
7424
+ proseLinkUnderlineThicknessSchema = z24.enum([
7425
+ "auto",
7426
+ "fromFont",
7427
+ "thin",
7428
+ "medium",
7429
+ "thick"
7430
+ ]);
7431
+ proseLinkUnderlineOffsetSchema = z24.enum([
7432
+ "auto",
7433
+ "tight",
7434
+ "normal",
7435
+ "loose"
7436
+ ]);
7415
7437
  proseLinkStyleSchema = z24.object({
7416
7438
  colorToken: themeColorTokenSchema.optional(),
7417
7439
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -7422,7 +7444,14 @@ var init_schema3 = __esm({
7422
7444
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
7423
7445
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
7424
7446
  });
7425
- semanticSpacingSchema = z24.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
7447
+ semanticSpacingSchema = z24.enum([
7448
+ "none",
7449
+ "compact",
7450
+ "cozy",
7451
+ "medium",
7452
+ "comfortable",
7453
+ "spacious"
7454
+ ]);
7426
7455
  boxRoundedSchema = z24.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
7427
7456
  boxBackgroundOverlaySchema = z24.object({
7428
7457
  type: z24.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -7566,9 +7595,17 @@ var init_schema3 = __esm({
7566
7595
  focus: z24.enum(["glow", "ring", "underline"]),
7567
7596
  label: z24.enum(["inside", "above"])
7568
7597
  });
7569
- headerVariant = z24.enum(["classic", "centered", "transparent", "floating", "editorial"]);
7598
+ headerVariant = z24.enum(["classic", "centered", "transparent", "floating"]);
7570
7599
  headerPositioning = z24.enum(["static", "sticky", "fixed"]);
7571
- headerNavStyle = z24.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
7600
+ headerNavStyle = z24.enum([
7601
+ "minimal",
7602
+ "underline",
7603
+ "underline-grow",
7604
+ "capsule",
7605
+ "scale",
7606
+ "frosted",
7607
+ "solid"
7608
+ ]);
7572
7609
  navFontWeight = z24.enum(["regular", "medium", "semibold", "bold"]);
7573
7610
  headerMaxWidth = z24.enum(["container", "full"]);
7574
7611
  headerContainerSchema = z24.object({
@@ -7616,8 +7653,22 @@ var init_schema3 = __esm({
7616
7653
  textSize: z24.enum(["xs", "sm", "base", "lg"]).optional()
7617
7654
  // optional = no override (browser default)
7618
7655
  }).optional();
7619
- headerCtaGapSchema = z24.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
7620
- headerCtaTreatmentSchema = z24.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
7656
+ headerCtaGapSchema = z24.enum([
7657
+ "none",
7658
+ "tight",
7659
+ "compact",
7660
+ "default",
7661
+ "relaxed",
7662
+ "spacious"
7663
+ ]);
7664
+ headerCtaTreatmentSchema = z24.enum([
7665
+ "default",
7666
+ "primary",
7667
+ "secondary",
7668
+ "inverted",
7669
+ "outline",
7670
+ "ghost"
7671
+ ]);
7621
7672
  navContainerSchema = z24.object({
7622
7673
  type: z24.enum(["none", "pill", "glass"]).default("none"),
7623
7674
  tint: z24.string().nullable().optional(),
@@ -7672,7 +7723,14 @@ var init_schema3 = __esm({
7672
7723
  footerMode = z24.enum(["default", "blocks", "default+blocks", "none"]);
7673
7724
  footerNavLayoutMode = z24.enum(["stack", "inline", "inline-wrap"]);
7674
7725
  footerNavLayoutAlign = z24.enum(["start", "center", "end", "space-between"]);
7675
- footerSpacing = z24.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
7726
+ footerSpacing = z24.enum([
7727
+ "none",
7728
+ "tight",
7729
+ "compact",
7730
+ "default",
7731
+ "relaxed",
7732
+ "spacious"
7733
+ ]);
7676
7734
  footerLogoPlacement = z24.enum(["left", "right", "above", "below"]);
7677
7735
  footerLogoSize = z24.enum(["sm", "md", "lg", "xl"]);
7678
7736
  footerLogoMaxHeight = z24.enum(["sm", "md", "lg", "xl"]);
@@ -7737,7 +7795,12 @@ var init_schema3 = __esm({
7737
7795
  logo: footerLogoSchema.optional(),
7738
7796
  bottomBar: footerBottomBarSchema.optional()
7739
7797
  });
7740
- containerPaddingPresetSchema = z24.enum(["tight", "compact", "default", "relaxed"]);
7798
+ containerPaddingPresetSchema = z24.enum([
7799
+ "tight",
7800
+ "compact",
7801
+ "default",
7802
+ "relaxed"
7803
+ ]);
7741
7804
  layoutSchema = z24.object({
7742
7805
  containerPadding: z24.object({
7743
7806
  mobile: containerPaddingPresetSchema.optional(),
@@ -7745,8 +7808,24 @@ var init_schema3 = __esm({
7745
7808
  desktop: containerPaddingPresetSchema.optional()
7746
7809
  }).optional()
7747
7810
  }).optional();
7748
- heroTypographySizeSchema = z24.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
7749
- heroTypographyLineHeightSchema = z24.enum(["tight", "snug", "normal", "relaxed"]);
7811
+ heroTypographySizeSchema = z24.enum([
7812
+ "sm",
7813
+ "base",
7814
+ "lg",
7815
+ "xl",
7816
+ "2xl",
7817
+ "3xl",
7818
+ "4xl",
7819
+ "5xl",
7820
+ "6xl",
7821
+ "editorial"
7822
+ ]);
7823
+ heroTypographyLineHeightSchema = z24.enum([
7824
+ "tight",
7825
+ "snug",
7826
+ "normal",
7827
+ "relaxed"
7828
+ ]);
7750
7829
  heroResponsiveTypographySchema = z24.object({
7751
7830
  headlineSize: heroTypographySizeSchema.optional(),
7752
7831
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -8361,10 +8440,12 @@ function resolveLegacyHeaderLookAlias(lookId) {
8361
8440
  return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
8362
8441
  }
8363
8442
  function getCompatibleHeaderStyleIds(layoutId) {
8364
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
8365
- const style = getHeaderStyleOrThrow(styleId);
8366
- return isHeaderStyleCompatibleWithLayout(style, layoutId);
8367
- });
8443
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
8444
+ (styleId) => {
8445
+ const style = getHeaderStyleOrThrow(styleId);
8446
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
8447
+ }
8448
+ );
8368
8449
  }
8369
8450
  function solidBrandHeader(theme) {
8370
8451
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
@@ -8395,8 +8476,14 @@ function solidBrandHeader(theme) {
8395
8476
  borderRadius: "none",
8396
8477
  effects: {
8397
8478
  hover: [
8398
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
8399
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
8479
+ {
8480
+ effectId: "text-color-change",
8481
+ options: { hoverColorToken: "secondary" }
8482
+ },
8483
+ {
8484
+ effectId: "nav-underline",
8485
+ options: { style: "grow", colorToken: "secondary" }
8486
+ }
8400
8487
  ]
8401
8488
  }
8402
8489
  },
@@ -8452,10 +8539,10 @@ function cleanBaseHeader(theme) {
8452
8539
  ctaGap: "default"
8453
8540
  };
8454
8541
  }
8455
- function editorialLineHeader(theme) {
8542
+ function serifLineHeader(theme) {
8456
8543
  return {
8457
8544
  ...baseHeader(theme),
8458
- variant: "editorial",
8545
+ variant: "centered",
8459
8546
  positioning: "sticky",
8460
8547
  shrinkOnScroll: false,
8461
8548
  background: {
@@ -8627,16 +8714,6 @@ var init_headerLooks = __esm({
8627
8714
  maxRecommendedNavItems: 5,
8628
8715
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
8629
8716
  },
8630
- {
8631
- id: asHeaderLayoutId("editorial"),
8632
- label: "Editorial",
8633
- description: "A composed, magazine-like stacked header treatment.",
8634
- structure: "editorial-stack",
8635
- variant: "editorial",
8636
- defaultPositioning: "static",
8637
- shrinkOnScroll: false,
8638
- maxRecommendedNavItems: 6
8639
- },
8640
8717
  {
8641
8718
  id: asHeaderLayoutId("floating"),
8642
8719
  label: "Floating",
@@ -8654,17 +8731,19 @@ var init_headerLooks = __esm({
8654
8731
  id: asHeaderStyleId("minimal"),
8655
8732
  label: "Minimal",
8656
8733
  description: "Quiet surface with simple color-change navigation.",
8657
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
8734
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8658
8735
  navInteraction: "color-change",
8659
- surface: "neutral"
8736
+ surface: "neutral",
8737
+ navTypography: "plain"
8660
8738
  },
8661
8739
  {
8662
8740
  id: asHeaderStyleId("fine-line"),
8663
8741
  label: "Fine Line",
8664
8742
  description: "Light surface with a crisp lower rule and underline hover.",
8665
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
8743
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8666
8744
  navInteraction: "underline-grow",
8667
- surface: "bordered"
8745
+ surface: "bordered",
8746
+ navTypography: "plain"
8668
8747
  },
8669
8748
  {
8670
8749
  id: asHeaderStyleId("soft-bar"),
@@ -8672,7 +8751,8 @@ var init_headerLooks = __esm({
8672
8751
  description: "Soft tinted surface with gentle pill hover states.",
8673
8752
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8674
8753
  navInteraction: "pill-background",
8675
- surface: "soft"
8754
+ surface: "soft",
8755
+ navTypography: "plain"
8676
8756
  },
8677
8757
  {
8678
8758
  id: asHeaderStyleId("pill-nav"),
@@ -8680,23 +8760,26 @@ var init_headerLooks = __esm({
8680
8760
  description: "A calm pill navigation rail over a neutral header.",
8681
8761
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8682
8762
  navInteraction: "pill-background",
8683
- surface: "soft"
8763
+ surface: "soft",
8764
+ navTypography: "plain"
8684
8765
  },
8685
8766
  {
8686
8767
  id: asHeaderStyleId("brand-bar"),
8687
8768
  label: "Brand Bar",
8688
8769
  description: "Solid brand surface with high-contrast navigation.",
8689
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
8770
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8690
8771
  navInteraction: "color-change",
8691
- surface: "brand-solid"
8772
+ surface: "brand-solid",
8773
+ navTypography: "brand-caps"
8692
8774
  },
8693
8775
  {
8694
8776
  id: asHeaderStyleId("brand-underline"),
8695
8777
  label: "Brand Underline",
8696
8778
  description: "Brand surface with underline-grow navigation.",
8697
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
8779
+ supportedLayoutIds: supportedLayouts(["classic"]),
8698
8780
  navInteraction: "underline-grow",
8699
- surface: "brand-solid"
8781
+ surface: "brand-solid",
8782
+ navTypography: "brand-caps"
8700
8783
  },
8701
8784
  {
8702
8785
  id: asHeaderStyleId("brand-pill"),
@@ -8704,41 +8787,44 @@ var init_headerLooks = __esm({
8704
8787
  description: "Solid brand surface with rounded active and hover states.",
8705
8788
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
8706
8789
  navInteraction: "pill-background",
8707
- surface: "brand-solid"
8790
+ surface: "brand-solid",
8791
+ navTypography: "brand-caps"
8708
8792
  },
8709
8793
  {
8710
- id: asHeaderStyleId("editorial-line"),
8711
- label: "Editorial Line",
8794
+ id: asHeaderStyleId("serif-line"),
8795
+ label: "Serif Line",
8712
8796
  description: "Typographic logo treatment with understated underline navigation.",
8713
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
8797
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8714
8798
  navInteraction: "underline-grow",
8715
- surface: "bordered"
8799
+ surface: "bordered",
8800
+ navTypography: "heading"
8716
8801
  },
8717
8802
  {
8718
8803
  id: asHeaderStyleId("flat-tabs"),
8719
8804
  label: "Flat Tabs",
8720
8805
  description: "Flat block hover and active states with a Swiss utility feel.",
8721
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
8806
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8722
8807
  navInteraction: "flat-block",
8723
- surface: "bordered"
8808
+ surface: "bordered",
8809
+ navTypography: "quiet-caps"
8724
8810
  },
8725
8811
  {
8726
8812
  id: asHeaderStyleId("glass"),
8727
8813
  label: "Glass",
8728
- description: "Floating translucent chrome with frosted navigation backing.",
8729
- supportedLayoutIds: supportedLayouts(["floating"]),
8814
+ description: "Translucent chrome with frosted navigation backing.",
8815
+ supportedLayoutIds: supportedLayouts(["classic", "floating"]),
8730
8816
  navInteraction: "glass-backed",
8731
8817
  surface: "floating",
8732
- requiresFloatingLayout: true
8818
+ navTypography: "plain"
8733
8819
  },
8734
8820
  {
8735
8821
  id: asHeaderStyleId("minimal-surface"),
8736
- label: "Minimal Surface",
8737
- description: "Floating chrome with a restrained translucent surface.",
8822
+ label: "Clear Split",
8823
+ description: "Floating logo with transparent navigation and no shared shell.",
8738
8824
  supportedLayoutIds: supportedLayouts(["floating"]),
8739
8825
  navInteraction: "color-change",
8740
8826
  surface: "floating",
8741
- requiresFloatingLayout: true
8827
+ navTypography: "plain"
8742
8828
  },
8743
8829
  {
8744
8830
  id: asHeaderStyleId("soft-shell"),
@@ -8747,7 +8833,25 @@ var init_headerLooks = __esm({
8747
8833
  supportedLayoutIds: supportedLayouts(["floating"]),
8748
8834
  navInteraction: "pill-background",
8749
8835
  surface: "floating",
8750
- requiresFloatingLayout: true
8836
+ navTypography: "plain"
8837
+ },
8838
+ {
8839
+ id: asHeaderStyleId("split-glass"),
8840
+ label: "Split Glass",
8841
+ description: "Logo floats independently while the navigation sits in a glass rail.",
8842
+ supportedLayoutIds: supportedLayouts(["floating"]),
8843
+ navInteraction: "glass-backed",
8844
+ surface: "floating",
8845
+ navTypography: "quiet-caps"
8846
+ },
8847
+ {
8848
+ id: asHeaderStyleId("split-pill"),
8849
+ label: "Split Pill",
8850
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
8851
+ supportedLayoutIds: supportedLayouts(["floating"]),
8852
+ navInteraction: "pill-background",
8853
+ surface: "floating",
8854
+ navTypography: "heading"
8751
8855
  }
8752
8856
  ];
8753
8857
  headerLayoutsById = new Map(
@@ -8761,13 +8865,14 @@ var init_headerLooks = __esm({
8761
8865
  asHeaderLayoutId("classic"),
8762
8866
  headerStyleRepairChain([
8763
8867
  "minimal",
8868
+ "glass",
8764
8869
  "fine-line",
8765
8870
  "soft-bar",
8766
8871
  "pill-nav",
8767
8872
  "brand-bar",
8768
8873
  "brand-underline",
8769
8874
  "brand-pill",
8770
- "editorial-line",
8875
+ "serif-line",
8771
8876
  "flat-tabs"
8772
8877
  ])
8773
8878
  ],
@@ -8780,19 +8885,7 @@ var init_headerLooks = __esm({
8780
8885
  "pill-nav",
8781
8886
  "brand-bar",
8782
8887
  "brand-pill",
8783
- "editorial-line",
8784
- "flat-tabs"
8785
- ])
8786
- ],
8787
- [
8788
- asHeaderLayoutId("editorial"),
8789
- headerStyleRepairChain([
8790
- "minimal",
8791
- "fine-line",
8792
- "soft-bar",
8793
- "brand-bar",
8794
- "brand-underline",
8795
- "editorial-line",
8888
+ "serif-line",
8796
8889
  "flat-tabs"
8797
8890
  ])
8798
8891
  ],
@@ -8801,25 +8894,70 @@ var init_headerLooks = __esm({
8801
8894
  headerStyleRepairChain([
8802
8895
  "glass",
8803
8896
  "minimal-surface",
8897
+ "split-glass",
8898
+ "split-pill",
8804
8899
  "soft-shell",
8805
8900
  "brand-pill"
8806
8901
  ])
8807
8902
  ]
8808
8903
  ]);
8809
- headerStyleRepairOrder = /* @__PURE__ */ new Map([
8810
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
8811
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
8812
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
8813
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
8814
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
8815
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
8816
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
8817
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
8818
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
8819
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
8820
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
8821
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
8822
- ]);
8904
+ headerStyleRepairOrder = /* @__PURE__ */ new Map(
8905
+ [
8906
+ [
8907
+ asHeaderStyleId("brand-bar"),
8908
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
8909
+ ],
8910
+ [
8911
+ asHeaderStyleId("brand-underline"),
8912
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
8913
+ ],
8914
+ [
8915
+ asHeaderStyleId("brand-pill"),
8916
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
8917
+ ],
8918
+ [
8919
+ asHeaderStyleId("pill-nav"),
8920
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
8921
+ ],
8922
+ [
8923
+ asHeaderStyleId("flat-tabs"),
8924
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
8925
+ ],
8926
+ [
8927
+ asHeaderStyleId("serif-line"),
8928
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
8929
+ ],
8930
+ [
8931
+ asHeaderStyleId("glass"),
8932
+ headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
8933
+ ],
8934
+ [
8935
+ asHeaderStyleId("soft-shell"),
8936
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
8937
+ ],
8938
+ [
8939
+ asHeaderStyleId("minimal-surface"),
8940
+ headerStyleRepairChain(["minimal-surface", "minimal"])
8941
+ ],
8942
+ [
8943
+ asHeaderStyleId("split-glass"),
8944
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
8945
+ ],
8946
+ [
8947
+ asHeaderStyleId("split-pill"),
8948
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
8949
+ ],
8950
+ [
8951
+ asHeaderStyleId("fine-line"),
8952
+ headerStyleRepairChain(["fine-line", "minimal"])
8953
+ ],
8954
+ [
8955
+ asHeaderStyleId("soft-bar"),
8956
+ headerStyleRepairChain(["soft-bar", "minimal"])
8957
+ ],
8958
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
8959
+ ]
8960
+ );
8823
8961
  legacyHeaderLookAliases = [
8824
8962
  {
8825
8963
  lookId: asHeaderLookId("clean-base"),
@@ -8836,10 +8974,10 @@ var init_headerLooks = __esm({
8836
8974
  }
8837
8975
  },
8838
8976
  {
8839
- lookId: asHeaderLookId("editorial-line"),
8977
+ lookId: asHeaderLookId("serif-line"),
8840
8978
  selection: {
8841
- layoutId: asHeaderLayoutId("editorial"),
8842
- styleId: asHeaderStyleId("editorial-line")
8979
+ layoutId: asHeaderLayoutId("centered"),
8980
+ styleId: asHeaderStyleId("serif-line")
8843
8981
  }
8844
8982
  },
8845
8983
  {
@@ -8878,9 +9016,7 @@ var init_headerLooks = __esm({
8878
9016
  }
8879
9017
  }
8880
9018
  ];
8881
- legacyHeaderLookAliasesById = new Map(
8882
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
8883
- );
9019
+ legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
8884
9020
  headerLookCatalog = [
8885
9021
  {
8886
9022
  id: asHeaderLookId("clean-base"),
@@ -8909,27 +9045,27 @@ var init_headerLooks = __esm({
8909
9045
  compile: solidBrandHeader
8910
9046
  },
8911
9047
  {
8912
- id: asHeaderLookId("editorial-line"),
8913
- label: "Editorial line",
8914
- visualTreatment: "light-editorial",
9048
+ id: asHeaderLookId("serif-line"),
9049
+ label: "Serif line",
9050
+ visualTreatment: "light-serif",
8915
9051
  layoutBehavior: "sticky",
8916
9052
  configuration: {
8917
- structure: "editorial-stack",
8918
- treatment: "light-editorial",
9053
+ structure: "centered-stack",
9054
+ treatment: "light-serif",
8919
9055
  behavior: "sticky"
8920
9056
  },
8921
9057
  openingRequirement: "none",
8922
9058
  maxRecommendedNavItems: 6,
8923
- compile: editorialLineHeader
9059
+ compile: serifLineHeader
8924
9060
  },
8925
9061
  {
8926
9062
  id: asHeaderLookId("centered-calm"),
8927
9063
  label: "Centered calm",
8928
- visualTreatment: "light-editorial",
9064
+ visualTreatment: "light-serif",
8929
9065
  layoutBehavior: "normal-flow",
8930
9066
  configuration: {
8931
9067
  structure: "centered-stack",
8932
- treatment: "light-editorial",
9068
+ treatment: "light-serif",
8933
9069
  behavior: "normal-flow"
8934
9070
  },
8935
9071
  openingRequirement: "none",
@@ -9426,12 +9562,16 @@ var init_typographyPresets = __esm({
9426
9562
 
9427
9563
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
9428
9564
  function uniqueContentFrameKinds() {
9429
- const kinds = [...new Set(
9430
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
9431
- )];
9565
+ const kinds = [
9566
+ ...new Set(
9567
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
9568
+ )
9569
+ ];
9432
9570
  const firstKind = kinds[0];
9433
9571
  if (!firstKind) {
9434
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
9572
+ throw new Error(
9573
+ "Expected generated design option catalog to expose at least one content frame kind."
9574
+ );
9435
9575
  }
9436
9576
  return [firstKind, ...kinds.slice(1)];
9437
9577
  }
@@ -9440,7 +9580,9 @@ function defineCuratedSiteStyle(input) {
9440
9580
  const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
9441
9581
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
9442
9582
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
9443
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
9583
+ if (!typographyPresetChoices.some(
9584
+ (choice) => choice.id === defaultTypographyPresetId
9585
+ )) {
9444
9586
  throw new Error(
9445
9587
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
9446
9588
  );
@@ -9451,9 +9593,13 @@ function defineCuratedSiteStyle(input) {
9451
9593
  description: input.description,
9452
9594
  generationBrief: input.generationBrief,
9453
9595
  selectionKeywordRules: input.selectionKeywordRules ?? [],
9454
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
9596
+ siteCreatorSelection: input.siteCreatorSelection ?? {
9597
+ kind: "explicit_only"
9598
+ },
9455
9599
  template: {
9456
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
9600
+ id: asDesignSystemTemplateId(
9601
+ `template:${input.id.replace("site-style:", "")}`
9602
+ ),
9457
9603
  name: input.name,
9458
9604
  version: 1,
9459
9605
  tokenRecipes: input.tokenRecipes,
@@ -9471,13 +9617,17 @@ function defineCuratedSiteStyle(input) {
9471
9617
  } : inferredHeaderCuration.defaultHeaderSelection,
9472
9618
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
9473
9619
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
9474
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
9475
- layoutId: asHeaderLayoutId(selection.layoutId),
9476
- styleId: asHeaderStyleId(selection.styleId)
9477
- })),
9620
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
9621
+ (selection) => ({
9622
+ layoutId: asHeaderLayoutId(selection.layoutId),
9623
+ styleId: asHeaderStyleId(selection.styleId)
9624
+ })
9625
+ ),
9478
9626
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
9479
9627
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
9480
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
9628
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
9629
+ asFooterLookId
9630
+ ),
9481
9631
  buttonPersonalityChoices: input.buttonPersonalityChoices,
9482
9632
  paletteVariantChoices: input.paletteVariantChoices,
9483
9633
  typographyPresetChoices,
@@ -9496,7 +9646,7 @@ function headerLayoutChoice(id, note) {
9496
9646
  function headerStyleChoice(id, note) {
9497
9647
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
9498
9648
  }
9499
- function headerLayoutRecordKey(id) {
9649
+ function unbrandHeaderLayoutId(id) {
9500
9650
  return id;
9501
9651
  }
9502
9652
  function uniqueHeaderLayoutChoices(choices) {
@@ -9519,7 +9669,9 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
9519
9669
  return [first, ...choices.slice(1)];
9520
9670
  }
9521
9671
  function inferHeaderCurationFromLegacyLooks(lookIds) {
9522
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
9672
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
9673
+ (selection) => Boolean(selection)
9674
+ );
9523
9675
  const defaultHeaderSelection = selections[0] ?? {
9524
9676
  layoutId: asHeaderLayoutId("classic"),
9525
9677
  styleId: asHeaderStyleId("minimal")
@@ -9530,10 +9682,7 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
9530
9682
  const stylesByLayout = {};
9531
9683
  for (const layoutChoice of layoutChoices) {
9532
9684
  const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
9533
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
9534
- styleChoices,
9535
- layoutChoice.id
9536
- );
9685
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
9537
9686
  }
9538
9687
  return {
9539
9688
  defaultHeaderSelection,
@@ -9677,7 +9826,11 @@ var init_curatedSiteStyles = __esm({
9677
9826
  motion: "subtle"
9678
9827
  },
9679
9828
  compositionBudget: quietBudget,
9680
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
9829
+ recommendedHeaderLookIds: [
9830
+ "centered-calm",
9831
+ "minimal-transparent",
9832
+ "clean-base"
9833
+ ],
9681
9834
  buttonPersonalityChoices: [
9682
9835
  buttonChoice("soft-pill"),
9683
9836
  buttonChoice("pebble"),
@@ -9706,7 +9859,11 @@ var init_curatedSiteStyles = __esm({
9706
9859
  motion: "subtle"
9707
9860
  },
9708
9861
  compositionBudget: balancedBudget,
9709
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
9862
+ recommendedHeaderLookIds: [
9863
+ "practical-utility",
9864
+ "brand-solid",
9865
+ "clean-base"
9866
+ ],
9710
9867
  buttonPersonalityChoices: [
9711
9868
  buttonChoice("confident-chip"),
9712
9869
  buttonChoice("soft-pill"),
@@ -9733,7 +9890,11 @@ var init_curatedSiteStyles = __esm({
9733
9890
  motion: "subtle"
9734
9891
  },
9735
9892
  compositionBudget: balancedBudget,
9736
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
9893
+ recommendedHeaderLookIds: [
9894
+ "serif-line",
9895
+ "minimal-transparent",
9896
+ "centered-calm"
9897
+ ],
9737
9898
  buttonPersonalityChoices: [
9738
9899
  buttonChoice("editorial-link"),
9739
9900
  buttonChoice("soft-pill"),
@@ -9761,7 +9922,11 @@ var init_curatedSiteStyles = __esm({
9761
9922
  motion: "expressive"
9762
9923
  },
9763
9924
  compositionBudget: balancedBudget,
9764
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
9925
+ recommendedHeaderLookIds: [
9926
+ "brand-solid",
9927
+ "practical-utility",
9928
+ "clean-base"
9929
+ ],
9765
9930
  buttonPersonalityChoices: [
9766
9931
  buttonChoice("pebble"),
9767
9932
  buttonChoice("brushed-wash"),
@@ -9778,7 +9943,10 @@ var init_curatedSiteStyles = __esm({
9778
9943
  name: "Quiet Luxury",
9779
9944
  description: "Minimal, confident, and refined for premium experiences and private services.",
9780
9945
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
9781
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
9946
+ siteCreatorSelection: {
9947
+ kind: "site_creator_keyword_heuristic",
9948
+ priority: 20
9949
+ },
9782
9950
  selectionKeywordRules: [
9783
9951
  { kind: "word", value: "luxury" },
9784
9952
  { kind: "word", value: "premium" },
@@ -9796,7 +9964,11 @@ var init_curatedSiteStyles = __esm({
9796
9964
  motion: "none"
9797
9965
  },
9798
9966
  compositionBudget: quietBudget,
9799
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
9967
+ recommendedHeaderLookIds: [
9968
+ "minimal-transparent",
9969
+ "serif-line",
9970
+ "clean-base"
9971
+ ],
9800
9972
  buttonPersonalityChoices: [
9801
9973
  buttonChoice("editorial-link"),
9802
9974
  buttonChoice("confident-chip"),
@@ -9832,7 +10004,11 @@ var init_curatedSiteStyles = __esm({
9832
10004
  motion: "none"
9833
10005
  },
9834
10006
  compositionBudget: quietBudget,
9835
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
10007
+ recommendedHeaderLookIds: [
10008
+ "practical-utility",
10009
+ "brand-solid",
10010
+ "clean-base"
10011
+ ],
9836
10012
  buttonPersonalityChoices: [
9837
10013
  buttonChoice("confident-chip"),
9838
10014
  buttonChoice("pebble"),
@@ -9859,7 +10035,11 @@ var init_curatedSiteStyles = __esm({
9859
10035
  motion: "subtle"
9860
10036
  },
9861
10037
  compositionBudget: balancedBudget,
9862
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
10038
+ recommendedHeaderLookIds: [
10039
+ "centered-calm",
10040
+ "minimal-transparent",
10041
+ "clean-base"
10042
+ ],
9863
10043
  buttonPersonalityChoices: [
9864
10044
  buttonChoice("soft-pill"),
9865
10045
  buttonChoice("pebble"),
@@ -9876,7 +10056,10 @@ var init_curatedSiteStyles = __esm({
9876
10056
  name: "Quiet Practice",
9877
10057
  description: "Grounded, calm, and practical for small appointment-first practices.",
9878
10058
  generationBrief: "Make services, practitioner trust, preparation notes, and booking routes easy to scan. Keep the tone warm and specific, with quiet confidence rather than spa cliches or medical claims.",
9879
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
10059
+ siteCreatorSelection: {
10060
+ kind: "site_creator_keyword_heuristic",
10061
+ priority: 30
10062
+ },
9880
10063
  selectionKeywordRules: [
9881
10064
  { kind: "substring", value: "massage" },
9882
10065
  { kind: "word", value: "bodywork" },
@@ -9897,7 +10080,11 @@ var init_curatedSiteStyles = __esm({
9897
10080
  motion: "subtle"
9898
10081
  },
9899
10082
  compositionBudget: quietBudget,
9900
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
10083
+ recommendedHeaderLookIds: [
10084
+ "practical-utility",
10085
+ "clean-base",
10086
+ "centered-calm"
10087
+ ],
9901
10088
  buttonPersonalityChoices: [
9902
10089
  buttonChoice("pebble"),
9903
10090
  buttonChoice("soft-pill"),
@@ -9914,7 +10101,10 @@ var init_curatedSiteStyles = __esm({
9914
10101
  name: "Personal Retreat Journal",
9915
10102
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
9916
10103
  generationBrief: "Center the practitioner as the guide, then make private sessions, classes, retreats, and resources feel like clear pathways. Keep retreat copy grounded and practical, with enough editorial warmth for longer reading.",
9917
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
10104
+ siteCreatorSelection: {
10105
+ kind: "site_creator_keyword_heuristic",
10106
+ priority: 40
10107
+ },
9918
10108
  selectionKeywordRules: [
9919
10109
  { kind: "substring", value: "retreat" },
9920
10110
  { kind: "phrase", value: "solo practitioner" },
@@ -9934,7 +10124,11 @@ var init_curatedSiteStyles = __esm({
9934
10124
  motion: "subtle"
9935
10125
  },
9936
10126
  compositionBudget: balancedBudget,
9937
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
10127
+ recommendedHeaderLookIds: [
10128
+ "serif-line",
10129
+ "centered-calm",
10130
+ "minimal-transparent"
10131
+ ],
9938
10132
  buttonPersonalityChoices: [
9939
10133
  buttonChoice("editorial-link"),
9940
10134
  buttonChoice("soft-pill"),
@@ -9951,7 +10145,10 @@ var init_curatedSiteStyles = __esm({
9951
10145
  name: "Tactile Workshop",
9952
10146
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
9953
10147
  generationBrief: "Lead with objects, materials, studio process, and practical booking detail. Keep the tone warm and direct, with useful mess, clear dates, and enough gallery rhythm to feel like a real creative studio.",
9954
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
10148
+ siteCreatorSelection: {
10149
+ kind: "site_creator_keyword_heuristic",
10150
+ priority: 50
10151
+ },
9955
10152
  selectionKeywordRules: [
9956
10153
  { kind: "substring", value: "ceramic" },
9957
10154
  { kind: "word", value: "pottery" },
@@ -9971,8 +10168,15 @@ var init_curatedSiteStyles = __esm({
9971
10168
  motion: "subtle"
9972
10169
  },
9973
10170
  compositionBudget: balancedBudget,
9974
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
9975
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
10171
+ recommendedHeaderLookIds: [
10172
+ "brand-solid",
10173
+ "practical-utility",
10174
+ "clean-base"
10175
+ ],
10176
+ recommendedFooterLookIds: [
10177
+ "site-footer-brand-two-band",
10178
+ "footer-muted-grounding"
10179
+ ],
9976
10180
  buttonPersonalityChoices: [
9977
10181
  buttonChoice("pebble"),
9978
10182
  buttonChoice("confident-chip"),
@@ -9991,7 +10195,10 @@ var init_curatedSiteStyles = __esm({
9991
10195
  name: "Soft Earth",
9992
10196
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
9993
10197
  generationBrief: "Use cream space, terracotta CTAs, olive proof bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community proof, and a simple two-column FAQ when content allows.",
9994
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
10198
+ siteCreatorSelection: {
10199
+ kind: "site_creator_keyword_heuristic",
10200
+ priority: 45
10201
+ },
9995
10202
  selectionKeywordRules: [
9996
10203
  { kind: "word", value: "meditation" },
9997
10204
  { kind: "word", value: "wellbeing" },
@@ -10067,8 +10274,15 @@ var init_curatedSiteStyles = __esm({
10067
10274
  "faq-soft-earth-two-column",
10068
10275
  "contact-form-panel"
10069
10276
  ],
10070
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
10071
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
10277
+ recommendedHeaderLookIds: [
10278
+ "centered-calm",
10279
+ "minimal-transparent",
10280
+ "serif-line"
10281
+ ],
10282
+ recommendedFooterLookIds: [
10283
+ "footer-muted-grounding",
10284
+ "site-footer-brand-two-band"
10285
+ ],
10072
10286
  buttonPersonalityChoices: [
10073
10287
  buttonChoice("earth-pill"),
10074
10288
  buttonChoice("soft-pill"),
@@ -10087,7 +10301,10 @@ var init_curatedSiteStyles = __esm({
10087
10301
  name: "Bold Launch",
10088
10302
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
10089
10303
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
10090
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
10304
+ siteCreatorSelection: {
10305
+ kind: "site_creator_keyword_heuristic",
10306
+ priority: 10
10307
+ },
10091
10308
  selectionKeywordRules: [
10092
10309
  { kind: "substring", value: "launch" },
10093
10310
  { kind: "substring", value: "campaign" },
@@ -10106,7 +10323,11 @@ var init_curatedSiteStyles = __esm({
10106
10323
  motion: "expressive"
10107
10324
  },
10108
10325
  compositionBudget: expressiveBudget,
10109
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
10326
+ recommendedHeaderLookIds: [
10327
+ "transparent-overlay",
10328
+ "floating-glass",
10329
+ "brand-solid"
10330
+ ],
10110
10331
  buttonPersonalityChoices: [
10111
10332
  buttonChoice("ink-stamp"),
10112
10333
  buttonChoice("confident-chip"),
@@ -10157,8 +10378,15 @@ var init_curatedSiteStyles = __esm({
10157
10378
  "testimonials-accent-quote-proof",
10158
10379
  "contact-form-brand-depth-card"
10159
10380
  ],
10160
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
10161
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
10381
+ recommendedHeaderLookIds: [
10382
+ "brand-solid",
10383
+ "transparent-overlay",
10384
+ "practical-utility"
10385
+ ],
10386
+ recommendedFooterLookIds: [
10387
+ "site-footer-brand-two-band",
10388
+ "footer-muted-grounding"
10389
+ ],
10162
10390
  buttonPersonalityChoices: [
10163
10391
  buttonChoice("showtime-pill"),
10164
10392
  buttonChoice("confident-chip"),
@@ -21244,7 +21472,7 @@ var init_shared5 = __esm({
21244
21472
  });
21245
21473
 
21246
21474
  // ../blocks/src/system/runtime/api/creditProducts.ts
21247
- function assertNever5(value) {
21475
+ function assertNever6(value) {
21248
21476
  throw new Error(`Unhandled credit product case: ${String(value)}`);
21249
21477
  }
21250
21478
  function useCasesFromModules(modules) {
@@ -21277,7 +21505,7 @@ function getCreditProductCreditUnit(useCase) {
21277
21505
  perCreditSuffix: "credit"
21278
21506
  };
21279
21507
  default:
21280
- return assertNever5(useCase);
21508
+ return assertNever6(useCase);
21281
21509
  }
21282
21510
  }
21283
21511
  function deriveCreditProductLabels(products, options = {}) {
@@ -23747,7 +23975,7 @@ function okWith(data) {
23747
23975
  function err2(error) {
23748
23976
  return { ok: false, error };
23749
23977
  }
23750
- function assertNever7(value, message) {
23978
+ function assertNever8(value, message) {
23751
23979
  throw new Error(message ?? `Unexpected value: ${String(value)}`);
23752
23980
  }
23753
23981
  var init_dist = __esm({
@@ -23913,7 +24141,7 @@ function deriveBookingFormViewState(input) {
23913
24141
  resourceName: input.verificationState.resourceName
23914
24142
  };
23915
24143
  default:
23916
- return assertNever7(input.verificationState);
24144
+ return assertNever8(input.verificationState);
23917
24145
  }
23918
24146
  }
23919
24147
  function resolveBookingSiteId(siteId, form2) {
@@ -24083,7 +24311,7 @@ function getBookingServicePaymentSelectionMode(service) {
24083
24311
  case "flexible_balance":
24084
24312
  return "implicit_flexible_balance";
24085
24313
  default:
24086
- return assertNever7(onlyKind);
24314
+ return assertNever8(onlyKind);
24087
24315
  }
24088
24316
  }
24089
24317
  if (allowedKinds.length === 2 && allowedKinds.includes("upfront") && (allowedKinds.includes("deferred_manual") || allowedKinds.includes("instalment_plan") || allowedKinds.includes("flexible_balance"))) {
@@ -24285,7 +24513,7 @@ function formatBookingSubmissionPreparationError(error) {
24285
24513
  case "service-missing-duration":
24286
24514
  return `Service "${error.serviceTitle}" is missing duration. Please update the service in the dashboard to include a duration (e.g., 30 minutes).`;
24287
24515
  default:
24288
- return assertNever7(error);
24516
+ return assertNever8(error);
24289
24517
  }
24290
24518
  }
24291
24519
  function getBookingSuccessMessage(successMessage) {
@@ -33184,7 +33412,7 @@ function formSubmissionReducer(_state, action) {
33184
33412
  case "submission-failed":
33185
33413
  return { tag: "failed", message: action.message };
33186
33414
  default:
33187
- return assertNever7(action);
33415
+ return assertNever8(action);
33188
33416
  }
33189
33417
  }
33190
33418
  var initialFormSubmissionState;
@@ -33922,7 +34150,7 @@ function bookingSubmissionReducer(state, action) {
33922
34150
  feedback: { tag: "idle" }
33923
34151
  };
33924
34152
  default:
33925
- return assertNever7(action);
34153
+ return assertNever8(action);
33926
34154
  }
33927
34155
  }
33928
34156
  function selectIsSubmitting(state) {
@@ -34274,7 +34502,7 @@ function buildBookingPaymentOptionViewModel(input) {
34274
34502
  };
34275
34503
  }
34276
34504
  default:
34277
- return assertNever7(input.option);
34505
+ return assertNever8(input.option);
34278
34506
  }
34279
34507
  }
34280
34508
  function buildInstalmentSchedulePreview(input) {
@@ -34331,7 +34559,7 @@ function buildInstalmentSchedulePreview(input) {
34331
34559
  })));
34332
34560
  }
34333
34561
  default:
34334
- return assertNever7(input.option.plan);
34562
+ return assertNever8(input.option.plan);
34335
34563
  }
34336
34564
  }
34337
34565
  function getPaymentCadenceLabel(plan) {
@@ -34563,7 +34791,7 @@ function bookingFlowReducer(state, event) {
34563
34791
  case "reset":
34564
34792
  return event.initial;
34565
34793
  default:
34566
- return assertNever7(event);
34794
+ return assertNever8(event);
34567
34795
  }
34568
34796
  }
34569
34797
  function clearAvailabilityFeedback(feedback) {
@@ -34692,7 +34920,7 @@ function validateBookingStep(input) {
34692
34920
  return Object.keys(errors).length > 0 ? { ok: false, errors: createFieldBookingValidationErrors(errors) } : { ok: true };
34693
34921
  }
34694
34922
  default:
34695
- return assertNever7(input.stepId);
34923
+ return assertNever8(input.stepId);
34696
34924
  }
34697
34925
  }
34698
34926
  function validateBookingFields(input) {
@@ -34986,7 +35214,7 @@ function resolveAppointmentPackagesModel(input) {
34986
35214
  };
34987
35215
  }
34988
35216
  default:
34989
- return assertNever7(input.state);
35217
+ return assertNever8(input.state);
34990
35218
  }
34991
35219
  }
34992
35220
  function toHeadlessEligibleAppointmentPackage(appointmentPackage) {
@@ -35741,7 +35969,7 @@ function pollingReducer(state, action) {
35741
35969
  case "timeout":
35742
35970
  return state;
35743
35971
  default:
35744
- return assertNever7(state);
35972
+ return assertNever8(state);
35745
35973
  }
35746
35974
  case "polling-timed-out":
35747
35975
  return {
@@ -35750,7 +35978,7 @@ function pollingReducer(state, action) {
35750
35978
  error: new Error("Polling timed out")
35751
35979
  };
35752
35980
  default:
35753
- return assertNever7(action);
35981
+ return assertNever8(action);
35754
35982
  }
35755
35983
  }
35756
35984
  var init_usePolling_state = __esm({
@@ -36233,7 +36461,7 @@ function DefaultBookingStepContent({
36233
36461
  case "custom-fields":
36234
36462
  return /* @__PURE__ */ jsx74(DefaultDynamicFields, { fields: booking.fields.items, booking });
36235
36463
  default:
36236
- return assertNever7(stepId);
36464
+ return assertNever8(stepId);
36237
36465
  }
36238
36466
  }
36239
36467
  function DefaultServiceSelectionStep({
@@ -37977,7 +38205,7 @@ function eligibilityLookupReducer(state, action) {
37977
38205
  error: action.message
37978
38206
  };
37979
38207
  default:
37980
- return assertNever7(action);
38208
+ return assertNever8(action);
37981
38209
  }
37982
38210
  }
37983
38211
  function existingRegistrationLookupReducer(state, action) {
@@ -37995,7 +38223,7 @@ function existingRegistrationLookupReducer(state, action) {
37995
38223
  registration: action.registration
37996
38224
  };
37997
38225
  default:
37998
- return assertNever7(action);
38226
+ return assertNever8(action);
37999
38227
  }
38000
38228
  }
38001
38229
  var initialEligibilityLookupState, initialExistingRegistrationLookupState;
@@ -46177,7 +46405,7 @@ function shopCheckoutReducer(state, action) {
46177
46405
  notice: action.notice
46178
46406
  };
46179
46407
  default:
46180
- return assertNever7(action);
46408
+ return assertNever8(action);
46181
46409
  }
46182
46410
  }
46183
46411
  var initialShopCheckoutState;
@@ -46716,7 +46944,7 @@ function shopPassesMembershipsReducer(state, action) {
46716
46944
  returnNotice: null
46717
46945
  };
46718
46946
  default:
46719
- return assertNever7(action);
46947
+ return assertNever8(action);
46720
46948
  }
46721
46949
  }
46722
46950
  function getOpenCheckout(state) {
@@ -53904,7 +54132,7 @@ var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
53904
54132
  var DATE_PATTERN = /^(?<year>[1-9]\d{3})-(?<month>\d{2})-(?<day>\d{2})$/;
53905
54133
  var TIME_PATTERN = /^(?<hours>[01]\d|2[0-3]):(?<minutes>[0-5]\d)$/;
53906
54134
  var DATETIME_PATTERN = /^(?<date>[1-9]\d{3}-\d{2}-\d{2})T(?<time>(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d)(?:\.\d+)?(?<offset>Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/;
53907
- function assertNever3(value) {
54135
+ function assertNever4(value) {
53908
54136
  throw new Error(`Unhandled field validation variant: ${JSON.stringify(value)}`);
53909
54137
  }
53910
54138
  function validationContext(options = {}) {
@@ -53965,7 +54193,7 @@ function fieldIssueToMessage(issue2) {
53965
54193
  case "invalidReference":
53966
54194
  return `${issue2.label} must reference a valid item`;
53967
54195
  default:
53968
- return assertNever3(issue2);
54196
+ return assertNever4(issue2);
53969
54197
  }
53970
54198
  }
53971
54199
  function pluralize(label, count) {
@@ -54080,7 +54308,7 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
54080
54308
  case "entryPicker":
54081
54309
  return makePlan("passthrough", "unknown", field, path, false, []);
54082
54310
  default:
54083
- return assertNever3(field);
54311
+ return assertNever4(field);
54084
54312
  }
54085
54313
  }
54086
54314
  function deriveFieldValidationPlans(fields3, parentPath = []) {
@@ -54153,7 +54381,7 @@ function resolveSelectConstraintSource(field) {
54153
54381
  case "sdk":
54154
54382
  return { kind: "runtime", source: source.kind };
54155
54383
  default:
54156
- return assertNever3(source);
54384
+ return assertNever4(source);
54157
54385
  }
54158
54386
  }
54159
54387
  function normalizeStoredContentValues(plans, content, options = {}) {
@@ -54188,7 +54416,7 @@ function normalizeStoredFieldValueWithContext(plan, value, ctx) {
54188
54416
  case "passthrough":
54189
54417
  return normalizeFieldValue(plan, value, ctx);
54190
54418
  default:
54191
- return assertNever3(plan);
54419
+ return assertNever4(plan);
54192
54420
  }
54193
54421
  }
54194
54422
  function normalizeStoredObjectChildren(children, value, ctx) {
@@ -54239,7 +54467,7 @@ function normalizeFieldValue(plan, value, ctx) {
54239
54467
  case "passthrough":
54240
54468
  return value;
54241
54469
  default:
54242
- return assertNever3(plan);
54470
+ return assertNever4(plan);
54243
54471
  }
54244
54472
  }
54245
54473
  function normalizeObjectChildren(children, value, ctx) {
@@ -54300,7 +54528,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
54300
54528
  case "passthrough":
54301
54529
  return [];
54302
54530
  default:
54303
- return assertNever3(plan);
54531
+ return assertNever4(plan);
54304
54532
  }
54305
54533
  }
54306
54534
  function shouldRequireValue(plan, value, ctx) {
@@ -54331,15 +54559,15 @@ function validateStringConstraint(plan, constraint, value) {
54331
54559
  case "maxLength":
54332
54560
  return value.length > constraint.maximum ? [issue(plan, "tooLong", { maximum: constraint.maximum })] : [];
54333
54561
  case "emailFormat":
54334
- return z6.email().safeParse(value).success ? [] : [issue(plan, "invalidEmail")];
54562
+ return isCanonicalEmailValue(value) ? [] : [issue(plan, "invalidEmail")];
54335
54563
  case "phoneFormat":
54336
- return TEL_RE.test(value) ? [] : [issue(plan, "invalidPhone")];
54564
+ return isCanonicalPhoneValue(value) ? [] : [issue(plan, "invalidPhone")];
54337
54565
  case "patternFormat": {
54338
54566
  const re = compilePattern(constraint.pattern);
54339
54567
  return re && !re.test(value) ? [issue(plan, "invalidPattern")] : [];
54340
54568
  }
54341
54569
  case "urlFormat":
54342
- return isValidUrl(value, constraint.allowRelative) ? [] : [issue(plan, "invalidUrl")];
54570
+ return isCanonicalUrlValue(value, { allowRelative: constraint.allowRelative }) ? [] : [issue(plan, "invalidUrl")];
54343
54571
  case "dateFormat":
54344
54572
  return isValidDateString(value) ? [] : [issue(plan, "invalidDate")];
54345
54573
  case "timeFormat":
@@ -54349,7 +54577,7 @@ function validateStringConstraint(plan, constraint, value) {
54349
54577
  case "slugFormat":
54350
54578
  return SLUG_PATTERN.test(value) ? [] : [issue(plan, "invalidSlug")];
54351
54579
  default:
54352
- return assertNever3(constraint);
54580
+ return assertNever4(constraint);
54353
54581
  }
54354
54582
  }
54355
54583
  function validateNumberPlan(plan, value) {
@@ -54366,7 +54594,7 @@ function validateNumberConstraint(plan, constraint, value) {
54366
54594
  case "numberMax":
54367
54595
  return value > constraint.maximum ? [issue(plan, "tooLarge", { maximum: constraint.maximum })] : [];
54368
54596
  default:
54369
- return assertNever3(constraint);
54597
+ return assertNever4(constraint);
54370
54598
  }
54371
54599
  }
54372
54600
  function validateSelectPlan(plan, value) {
@@ -54396,7 +54624,7 @@ function validateRepeaterPlan(plan, value, ctx) {
54396
54624
  })
54397
54625
  ] : [];
54398
54626
  default:
54399
- return assertNever3(constraint);
54627
+ return assertNever4(constraint);
54400
54628
  }
54401
54629
  });
54402
54630
  return [...constraintIssues, ...value.flatMap((item, index) => validateRepeaterItem(plan, item, index, ctx))];
@@ -54458,7 +54686,7 @@ function rebaseFieldPlanPath(plan, fromPrefix, toPrefix) {
54458
54686
  path
54459
54687
  };
54460
54688
  default:
54461
- return assertNever3(plan);
54689
+ return assertNever4(plan);
54462
54690
  }
54463
54691
  }
54464
54692
  function rebaseFieldPath(path, fromPrefix, toPrefix) {
@@ -54545,7 +54773,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
54545
54773
  zodCtx.addIssue({ ...issuePath, code: "custom", message });
54546
54774
  return;
54547
54775
  default:
54548
- assertNever3(validationIssue);
54776
+ assertNever4(validationIssue);
54549
54777
  }
54550
54778
  }
54551
54779
  function relativeZodIssuePath(path, rootPath) {
@@ -54561,9 +54789,15 @@ function compilePattern(pattern) {
54561
54789
  function isValidNumber(value) {
54562
54790
  return typeof value === "number" && Number.isFinite(value);
54563
54791
  }
54564
- function isValidUrl(value, allowRelative) {
54792
+ function isCanonicalEmailValue(value) {
54793
+ return z6.email().safeParse(value).success;
54794
+ }
54795
+ function isCanonicalPhoneValue(value) {
54796
+ return TEL_RE.test(value);
54797
+ }
54798
+ function isCanonicalUrlValue(value, options = {}) {
54565
54799
  if (!value) return false;
54566
- if (allowRelative && value.startsWith("/")) return true;
54800
+ if (options.allowRelative === true && value.startsWith("/")) return true;
54567
54801
  try {
54568
54802
  const parsed = new URL(value);
54569
54803
  return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
@@ -56653,10 +56887,7 @@ var headerRootClassTransform = {
56653
56887
  const navContainerType = header?.navContainer?.type ?? "none";
56654
56888
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
56655
56889
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
56656
- const classes = [
56657
- config.base,
56658
- backgroundClass
56659
- ];
56890
+ const classes = [config.base, backgroundClass];
56660
56891
  if (!hasContainedNav) {
56661
56892
  if (config.blur) classes.push(config.blur);
56662
56893
  if (config.blurSupport) classes.push(config.blurSupport);
@@ -56671,7 +56902,12 @@ var headerRootClassTransform = {
56671
56902
  if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
56672
56903
  classes.push(config.shrink);
56673
56904
  }
56674
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
56905
+ const VALID_VARIANTS = [
56906
+ "classic",
56907
+ "centered",
56908
+ "transparent",
56909
+ "floating"
56910
+ ];
56675
56911
  const variant = header?.variant;
56676
56912
  if (variant && VALID_VARIANTS.includes(variant)) {
56677
56913
  classes.push(`header-variant-${variant}`);
@@ -57318,15 +57554,21 @@ var mobileCta = ctaButton({
57318
57554
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
57319
57555
  {
57320
57556
  type: "div",
57321
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
57557
+ props: {
57558
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
57559
+ }
57322
57560
  },
57323
57561
  {
57324
57562
  type: "div",
57325
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
57563
+ props: {
57564
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
57565
+ }
57326
57566
  },
57327
57567
  {
57328
57568
  type: "div",
57329
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
57569
+ props: {
57570
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
57571
+ }
57330
57572
  }
57331
57573
  ]);
57332
57574
  var mobileToggleButton = {
@@ -57509,28 +57751,6 @@ var floatingLayout = inline(
57509
57751
  ],
57510
57752
  when("$root.theme.header.variant", { equals: "floating" })
57511
57753
  );
57512
- var editorialLayout = stack(
57513
- {
57514
- gap: "md",
57515
- align: "center",
57516
- className: bindProp("$root.theme.header.maxWidth", {
57517
- transforms: pipe(
57518
- tx("layout.maxWidthClass", {
57519
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
57520
- })
57521
- ),
57522
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
57523
- })
57524
- },
57525
- [
57526
- centeredLogoRow,
57527
- createNavRow(
57528
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
57529
- "center"
57530
- )
57531
- ],
57532
- when("$root.theme.header.variant", { equals: "editorial" })
57533
- );
57534
57754
  var headerLayout = headerSection(
57535
57755
  {
57536
57756
  background: bindProp("$root.theme.header", {
@@ -57544,10 +57764,7 @@ var headerLayout = headerSection(
57544
57764
  }),
57545
57765
  style: bindProp("$root.theme.header", {
57546
57766
  transforms: pipe(tx("layout.headerRootStyle")),
57547
- fallback: mergeStyles(
57548
- textColorStyle("text"),
57549
- borderColorStyle("border")
57550
- )
57767
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
57551
57768
  })
57552
57769
  },
57553
57770
  [
@@ -57556,7 +57773,6 @@ var headerLayout = headerSection(
57556
57773
  centeredLayout,
57557
57774
  transparentLayout,
57558
57775
  floatingLayout,
57559
- editorialLayout,
57560
57776
  mobileOverlay
57561
57777
  ],
57562
57778
  props({
@@ -65775,7 +65991,7 @@ function resolveAccordionIconStyle(iconStyle, iconTreatment) {
65775
65991
  case "minimal-cross":
65776
65992
  return "plus-minus";
65777
65993
  default:
65778
- return assertNever6(iconTreatment.iconSet);
65994
+ return assertNever7(iconTreatment.iconSet);
65779
65995
  }
65780
65996
  }
65781
65997
  return iconStyle && iconStyle in ICON_CONFIG ? iconStyle : "chevron";
@@ -65794,7 +66010,7 @@ function accordionIconColorStyle(iconTreatment) {
65794
66010
  function resolveIconColorToken(token) {
65795
66011
  return token === "muted" ? "mutedText" : token;
65796
66012
  }
65797
- function assertNever6(value) {
66013
+ function assertNever7(value) {
65798
66014
  throw new Error(`Unhandled accordion icon set: ${String(value)}`);
65799
66015
  }
65800
66016
 
@@ -72053,6 +72269,9 @@ function hydrateEntryLink(link2, context) {
72053
72269
  init_fragments2();
72054
72270
  init_colorStyles();
72055
72271
 
72272
+ // ../blocks/src/customBlockRegistry.ts
72273
+ init_src();
72274
+
72056
72275
  // ../blocks/src/sdkBlockTransform.ts
72057
72276
  init_augmentManifest();
72058
72277
  function transformSdkBlockToManifest(sdkBlock) {
@@ -72100,6 +72319,9 @@ function transformSdkBlockToDefinition(sdkBlock) {
72100
72319
  }
72101
72320
 
72102
72321
  // ../blocks/src/customBlockRegistry.ts
72322
+ var defaultCustomBlockSourcePolicy = {
72323
+ kind: "canonical-db-fallback-sdk"
72324
+ };
72103
72325
  function isCustomBlockKind(blockKind) {
72104
72326
  return blockKind.startsWith("custom.");
72105
72327
  }
@@ -72126,39 +72348,86 @@ function toResolvedCustomBlock(manifest, source) {
72126
72348
  )
72127
72349
  };
72128
72350
  }
72351
+ function planCustomBlockRegistryResolution({
72352
+ sdkConfig,
72353
+ customBlocks = [],
72354
+ policy = defaultCustomBlockSourcePolicy
72355
+ }) {
72356
+ switch (policy.kind) {
72357
+ case "canonical-db-fallback-sdk": {
72358
+ const entriesByKind = /* @__PURE__ */ new Map();
72359
+ const conflicts = [];
72360
+ for (const customBlock of customBlocks) {
72361
+ entriesByKind.set(
72362
+ customBlock.manifest.id,
72363
+ toResolvedCustomBlock(customBlock.manifest, customBlock.source)
72364
+ );
72365
+ }
72366
+ for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
72367
+ const existing = entriesByKind.get(sdkBlock.id);
72368
+ if (existing) {
72369
+ conflicts.push({
72370
+ kind: "conflict",
72371
+ blockKind: existing.blockKind,
72372
+ winner: existing.source,
72373
+ loser: { kind: "sdk-config" },
72374
+ reason: "db-canonical-sdk-fallback"
72375
+ });
72376
+ continue;
72377
+ }
72378
+ entriesByKind.set(
72379
+ sdkBlock.id,
72380
+ toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
72381
+ );
72382
+ }
72383
+ return {
72384
+ policy,
72385
+ entries: Array.from(entriesByKind.values()),
72386
+ conflicts
72387
+ };
72388
+ }
72389
+ }
72390
+ }
72129
72391
  function createCustomBlockRegistry({
72130
72392
  sdkConfig,
72131
72393
  customBlocks = [],
72394
+ policy = defaultCustomBlockSourcePolicy,
72132
72395
  onConflict
72133
72396
  }) {
72134
- const entriesByKind = /* @__PURE__ */ new Map();
72135
- for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
72136
- entriesByKind.set(
72137
- sdkBlock.id,
72138
- toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
72139
- );
72140
- }
72141
- for (const customBlock of customBlocks) {
72142
- const existing = entriesByKind.get(customBlock.manifest.id);
72143
- if (existing) {
72144
- onConflict?.(
72145
- `Skipping DB custom block "${customBlock.manifest.id}" - conflicts with SDK config block`
72146
- );
72147
- continue;
72148
- }
72149
- entriesByKind.set(
72150
- customBlock.manifest.id,
72151
- toResolvedCustomBlock(customBlock.manifest, customBlock.source)
72397
+ const plan = planCustomBlockRegistryResolution({
72398
+ sdkConfig,
72399
+ customBlocks,
72400
+ policy
72401
+ });
72402
+ const entriesByKind = new Map(
72403
+ plan.entries.map((entry) => [entry.blockKind, entry])
72404
+ );
72405
+ for (const conflict of plan.conflicts) {
72406
+ onConflict?.(
72407
+ `Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`
72152
72408
  );
72153
72409
  }
72154
72410
  return {
72155
- entries: Array.from(entriesByKind.values()),
72411
+ entries: plan.entries,
72412
+ conflicts: plan.conflicts,
72156
72413
  findManifest: (blockKind) => {
72157
72414
  if (!isCustomBlockKind(blockKind)) return void 0;
72158
72415
  return entriesByKind.get(blockKind);
72159
72416
  }
72160
72417
  };
72161
72418
  }
72419
+ function sourceLabel(source) {
72420
+ switch (source.kind) {
72421
+ case "managed-database":
72422
+ return "DB";
72423
+ case "sdk-synced":
72424
+ return "SDK-synced DB";
72425
+ case "sdk-config":
72426
+ return "SDK config";
72427
+ default:
72428
+ return assertNever3(source);
72429
+ }
72430
+ }
72162
72431
 
72163
72432
  // ../blocks/src/PageRenderer.tsx
72164
72433
  init_typeGuards2();
@@ -75562,9 +75831,9 @@ var containerResponsiveThemeCss = `/*
75562
75831
  }
75563
75832
 
75564
75833
  @layer rb-theme {
75565
- /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
75566
- :root {
75567
- /* --tb-primary: 17 24 39;
75834
+ /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
75835
+ :root {
75836
+ /* --tb-primary: 17 24 39;
75568
75837
  --tb-text: 17 24 39;
75569
75838
  --tb-muted: 107 114 128;
75570
75839
  --tb-bg: 255 255 255;
@@ -75586,159 +75855,164 @@ var containerResponsiveThemeCss = `/*
75586
75855
 
75587
75856
  --motion-duration: 180ms;
75588
75857
  --motion-ease: cubic-bezier(.2,.8,.2,1); */
75589
- }
75858
+ }
75590
75859
 
75591
- /* -------------------------------------------------------------------------- */
75592
- /* Shared: Modal */
75593
- /* -------------------------------------------------------------------------- */
75860
+ /* -------------------------------------------------------------------------- */
75861
+ /* Shared: Modal */
75862
+ /* -------------------------------------------------------------------------- */
75594
75863
 
75595
- :where(.theme-scope) .rb-modal-overlay {
75596
- position: fixed;
75597
- inset: 0;
75598
- z-index: var(--rb-modal-z-index, 20000);
75599
- display: grid;
75600
- place-items: center;
75601
- padding: 1rem;
75602
- /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
75603
- background-color: rgba(0, 0, 0, 0.6);
75604
- background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
75605
- }
75864
+ :where(.theme-scope) .rb-modal-overlay {
75865
+ position: fixed;
75866
+ inset: 0;
75867
+ z-index: var(--rb-modal-z-index, 20000);
75868
+ display: grid;
75869
+ place-items: center;
75870
+ padding: 1rem;
75871
+ /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
75872
+ background-color: rgba(0, 0, 0, 0.6);
75873
+ background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
75874
+ }
75606
75875
 
75607
- :where(.theme-scope) .rb-modal {
75608
- width: min(var(--rb-modal-max-width, 560px), 100%);
75609
- background: var(--rb-modal-bg, rgb(var(--tb-surface)));
75610
- border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
75611
- border-radius: var(--rb-modal-radius, var(--radius-card));
75612
- box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
75613
- }
75876
+ :where(.theme-scope) .rb-modal {
75877
+ width: min(var(--rb-modal-max-width, 560px), 100%);
75878
+ background: var(--rb-modal-bg, rgb(var(--tb-surface)));
75879
+ border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
75880
+ border-radius: var(--rb-modal-radius, var(--radius-card));
75881
+ box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
75882
+ }
75614
75883
 
75615
- :where(.theme-scope) .rb-modal__header {
75616
- display: flex;
75617
- align-items: center;
75618
- justify-content: space-between;
75619
- gap: 1rem;
75620
- padding: 1rem 1rem 0.75rem;
75621
- border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
75622
- }
75884
+ :where(.theme-scope) .rb-modal__header {
75885
+ display: flex;
75886
+ align-items: center;
75887
+ justify-content: space-between;
75888
+ gap: 1rem;
75889
+ padding: 1rem 1rem 0.75rem;
75890
+ border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
75891
+ }
75623
75892
 
75624
- :where(.theme-scope) .rb-modal__title {
75625
- margin: 0;
75626
- font-family: var(--font-heading);
75627
- font-size: 1.0625rem;
75628
- font-weight: 600;
75629
- color: rgb(var(--tb-text));
75630
- }
75893
+ :where(.theme-scope) .rb-modal__title {
75894
+ margin: 0;
75895
+ font-family: var(--font-heading);
75896
+ font-size: 1.0625rem;
75897
+ font-weight: 600;
75898
+ color: rgb(var(--tb-text));
75899
+ }
75631
75900
 
75632
- :where(.theme-scope) .rb-modal__close {
75633
- background: transparent;
75634
- border: none;
75635
- width: 2.25rem;
75636
- height: 2.25rem;
75637
- padding: 0;
75638
- line-height: 1;
75639
- color: rgb(var(--tb-mutedText));
75640
- cursor: pointer;
75641
- display: grid;
75642
- place-items: center;
75643
- border-radius: var(--radius-control);
75644
- }
75901
+ :where(.theme-scope) .rb-modal__close {
75902
+ background: transparent;
75903
+ border: none;
75904
+ width: 2.25rem;
75905
+ height: 2.25rem;
75906
+ padding: 0;
75907
+ line-height: 1;
75908
+ color: rgb(var(--tb-mutedText));
75909
+ cursor: pointer;
75910
+ display: grid;
75911
+ place-items: center;
75912
+ border-radius: var(--radius-control);
75913
+ }
75645
75914
 
75646
- :where(.theme-scope) .rb-modal__close:hover {
75647
- color: rgb(var(--tb-text));
75648
- background: rgba(var(--tb-border), 0.2);
75649
- }
75915
+ :where(.theme-scope) .rb-modal__close:hover {
75916
+ color: rgb(var(--tb-text));
75917
+ background: rgba(var(--tb-border), 0.2);
75918
+ }
75650
75919
 
75651
- :where(.theme-scope) .rb-modal__close:focus-visible {
75652
- outline: none;
75653
- box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
75654
- }
75920
+ :where(.theme-scope) .rb-modal__close:focus-visible {
75921
+ outline: none;
75922
+ box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
75923
+ }
75655
75924
 
75656
- :where(.theme-scope) .rb-modal__body {
75657
- padding: 0.875rem 1rem 1rem;
75658
- color: rgb(var(--tb-text));
75659
- font-size: 0.9375rem;
75660
- line-height: 1.45;
75661
- }
75925
+ :where(.theme-scope) .rb-modal__body {
75926
+ padding: 0.875rem 1rem 1rem;
75927
+ color: rgb(var(--tb-text));
75928
+ font-size: 0.9375rem;
75929
+ line-height: 1.45;
75930
+ }
75662
75931
 
75663
- /* -------------------------------------------------------------------------- */
75664
- /* Header: Mobile nav overlay transitions */
75665
- /* -------------------------------------------------------------------------- */
75932
+ /* -------------------------------------------------------------------------- */
75933
+ /* Header: Mobile nav overlay transitions */
75934
+ /* -------------------------------------------------------------------------- */
75666
75935
 
75667
- /* Keep the overlay in the DOM so we can transition opacity/transform.
75936
+ /* Keep the overlay in the DOM so we can transition opacity/transform.
75668
75937
  JS toggles \`aria-hidden\` + \`inert\` (via enhancer), and CSS uses pointer-events
75669
75938
  to prevent interaction while closed. */
75670
- .nav-mobile-overlay {
75671
- pointer-events: none;
75672
- /* Prevent transformed children (panel) from creating viewport scrollbars
75939
+ .nav-mobile-overlay {
75940
+ pointer-events: none;
75941
+ /* Prevent transformed children (panel) from creating viewport scrollbars
75673
75942
  during enter/exit transitions. */
75674
- overflow: hidden;
75675
- }
75676
-
75677
- .nav-mobile-overlay[aria-hidden="false"] {
75678
- pointer-events: auto;
75679
- }
75943
+ overflow: hidden;
75944
+ }
75680
75945
 
75681
- .nav-mobile-overlay .nav-mobile-backdrop {
75682
- opacity: 0;
75683
- transition: opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
75684
- }
75946
+ .nav-mobile-overlay[aria-hidden='false'] {
75947
+ pointer-events: auto;
75948
+ }
75685
75949
 
75686
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-backdrop {
75687
- opacity: 1;
75688
- }
75950
+ .nav-mobile-overlay .nav-mobile-backdrop {
75951
+ opacity: 0;
75952
+ transition: opacity var(--motion-duration, 180ms)
75953
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
75954
+ }
75689
75955
 
75690
- .nav-mobile-overlay .nav-mobile-panel {
75691
- opacity: 0;
75692
- transform: translate3d(12px, 0, 0);
75693
- overflow-x: hidden;
75694
- transition:
75695
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
75696
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
75697
- will-change: opacity, transform;
75698
- }
75956
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-backdrop {
75957
+ opacity: 1;
75958
+ }
75699
75959
 
75700
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-panel {
75701
- opacity: 1;
75702
- transform: translate3d(0, 0, 0);
75703
- }
75960
+ .nav-mobile-overlay .nav-mobile-panel {
75961
+ opacity: 0;
75962
+ transform: translate3d(12px, 0, 0);
75963
+ overflow-x: hidden;
75964
+ transition:
75965
+ opacity var(--motion-duration, 180ms)
75966
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
75967
+ transform var(--motion-duration, 180ms)
75968
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
75969
+ will-change: opacity, transform;
75970
+ }
75704
75971
 
75705
- /* -------------------------------------------------------------------------- */
75706
- /* Header: Mobile toggle hamburger -> X */
75707
- /* -------------------------------------------------------------------------- */
75972
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-panel {
75973
+ opacity: 1;
75974
+ transform: translate3d(0, 0, 0);
75975
+ }
75708
75976
 
75709
- .nav-mobile-toggle .nav-mobile-bar {
75710
- transform-origin: center;
75711
- transition:
75712
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
75713
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
75714
- will-change: transform, opacity;
75715
- }
75977
+ /* -------------------------------------------------------------------------- */
75978
+ /* Header: Mobile toggle hamburger -> X */
75979
+ /* -------------------------------------------------------------------------- */
75716
75980
 
75717
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-top {
75718
- transform: translateY(6px) rotate(45deg);
75719
- }
75981
+ .nav-mobile-toggle .nav-mobile-bar {
75982
+ transform-origin: center;
75983
+ transition:
75984
+ transform var(--motion-duration, 180ms)
75985
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
75986
+ opacity var(--motion-duration, 180ms)
75987
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
75988
+ will-change: transform, opacity;
75989
+ }
75720
75990
 
75721
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-middle {
75722
- opacity: 0;
75723
- }
75991
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-top {
75992
+ transform: translateY(6px) rotate(45deg);
75993
+ }
75724
75994
 
75725
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-bottom {
75726
- transform: translateY(-6px) rotate(-45deg);
75727
- }
75995
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-middle {
75996
+ opacity: 0;
75997
+ }
75728
75998
 
75729
- @media (prefers-reduced-motion: reduce) {
75730
- .nav-mobile-overlay .nav-mobile-backdrop,
75731
- .nav-mobile-overlay .nav-mobile-panel {
75732
- transition: none;
75733
- transform: none;
75999
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-bottom {
76000
+ transform: translateY(-6px) rotate(-45deg);
75734
76001
  }
75735
76002
 
75736
- .nav-mobile-toggle .nav-mobile-bar {
75737
- transition: none;
76003
+ @media (prefers-reduced-motion: reduce) {
76004
+ .nav-mobile-overlay .nav-mobile-backdrop,
76005
+ .nav-mobile-overlay .nav-mobile-panel {
76006
+ transition: none;
76007
+ transform: none;
76008
+ }
76009
+
76010
+ .nav-mobile-toggle .nav-mobile-bar {
76011
+ transition: none;
76012
+ }
75738
76013
  }
75739
- }
75740
76014
 
75741
- /*
76015
+ /*
75742
76016
  * Theme Scope Styles
75743
76017
  *
75744
76018
  * IMPORTANT: All :where(.theme-scope) selectors are wrapped in :where() to give them
@@ -75748,790 +76022,838 @@ var containerResponsiveThemeCss = `/*
75748
76022
  * Example: \`h4 { color: white; }\` will override \`:where(:where(.theme-scope)) h4\`
75749
76023
  */
75750
76024
 
75751
- :where(:where(.theme-scope)) {
75752
- font-family: var(--font-body);
75753
- letter-spacing: var(--ls-body);
75754
- line-height: var(--lh-body);
75755
- font-weight: var(--font-weight-body);
75756
-
75757
- & h1,
75758
- & h2,
75759
- & h3,
75760
- & h4,
75761
- & h5,
75762
- & h6 {
75763
- font-family: var(--font-heading);
75764
- /* Color is set by generateTypographyCss.ts with full cascade:
76025
+ :where(:where(.theme-scope)) {
76026
+ font-family: var(--font-body);
76027
+ letter-spacing: var(--ls-body);
76028
+ line-height: var(--lh-body);
76029
+ font-weight: var(--font-weight-body);
76030
+
76031
+ & h1,
76032
+ & h2,
76033
+ & h3,
76034
+ & h4,
76035
+ & h5,
76036
+ & h6 {
76037
+ font-family: var(--font-heading);
76038
+ /* Color is set by generateTypographyCss.ts with full cascade:
75765
76039
  --section-heading-color -> --section-text-color -> --hc-hN -> --hc-heading -> inherit */
75766
- font-weight: var(--font-weight-heading);
75767
- text-transform: var(--tt-heading);
75768
- font-variant-caps: var(--fv-heading);
76040
+ font-weight: var(--font-weight-heading);
76041
+ text-transform: var(--tt-heading);
76042
+ font-variant-caps: var(--fv-heading);
76043
+ }
75769
76044
  }
75770
- }
75771
76045
 
75772
- /* Heading typographic overrides (fallback to defaults when not provided) */
75773
- :where(:where(.theme-scope)) h1 {
75774
- letter-spacing: var(--ls-h1, var(--ls-heading));
75775
- line-height: var(--lh-h1, var(--lh-heading));
75776
- font-weight: var(--fw-h1, var(--font-weight-heading));
75777
- }
75778
- :where(:where(.theme-scope)) h2 {
75779
- letter-spacing: var(--ls-h2, var(--ls-heading));
75780
- line-height: var(--lh-h2, var(--lh-heading));
75781
- font-weight: var(--fw-h2, var(--font-weight-heading));
75782
- }
75783
- :where(:where(.theme-scope)) h3 {
75784
- letter-spacing: var(--ls-h3, var(--ls-heading));
75785
- line-height: var(--lh-h3, var(--lh-heading));
75786
- font-weight: var(--fw-h3, var(--font-weight-heading));
75787
- }
75788
- :where(:where(.theme-scope)) h4,
75789
- :where(:where(.theme-scope)) h5,
75790
- :where(:where(.theme-scope)) h6 {
75791
- letter-spacing: var(--ls-heading);
75792
- line-height: var(--lh-heading);
75793
- }
75794
- :where(:where(.theme-scope)) h4 {
75795
- font-weight: var(--fw-h4, var(--font-weight-heading));
75796
- }
75797
- :where(:where(.theme-scope)) h5 {
75798
- font-weight: var(--fw-h5, var(--font-weight-heading));
75799
- }
75800
- :where(:where(.theme-scope)) h6 {
75801
- font-weight: var(--fw-h6, var(--font-weight-heading));
75802
- }
76046
+ /* Heading typographic overrides (fallback to defaults when not provided) */
76047
+ :where(:where(.theme-scope)) h1 {
76048
+ letter-spacing: var(--ls-h1, var(--ls-heading));
76049
+ line-height: var(--lh-h1, var(--lh-heading));
76050
+ font-weight: var(--fw-h1, var(--font-weight-heading));
76051
+ }
76052
+ :where(:where(.theme-scope)) h2 {
76053
+ letter-spacing: var(--ls-h2, var(--ls-heading));
76054
+ line-height: var(--lh-h2, var(--lh-heading));
76055
+ font-weight: var(--fw-h2, var(--font-weight-heading));
76056
+ }
76057
+ :where(:where(.theme-scope)) h3 {
76058
+ letter-spacing: var(--ls-h3, var(--ls-heading));
76059
+ line-height: var(--lh-h3, var(--lh-heading));
76060
+ font-weight: var(--fw-h3, var(--font-weight-heading));
76061
+ }
76062
+ :where(:where(.theme-scope)) h4,
76063
+ :where(:where(.theme-scope)) h5,
76064
+ :where(:where(.theme-scope)) h6 {
76065
+ letter-spacing: var(--ls-heading);
76066
+ line-height: var(--lh-heading);
76067
+ }
76068
+ :where(:where(.theme-scope)) h4 {
76069
+ font-weight: var(--fw-h4, var(--font-weight-heading));
76070
+ }
76071
+ :where(:where(.theme-scope)) h5 {
76072
+ font-weight: var(--fw-h5, var(--font-weight-heading));
76073
+ }
76074
+ :where(:where(.theme-scope)) h6 {
76075
+ font-weight: var(--fw-h6, var(--font-weight-heading));
76076
+ }
75803
76077
 
75804
- /* Rich text element spacing based on theme rhythm */
75805
- :where(.theme-scope) .rb-prose h1 {
75806
- margin-top: calc(var(--rt-space-y) * 1.6);
75807
- margin-bottom: calc(var(--rt-space-y) * 0.8);
75808
- }
75809
- :where(.theme-scope) .rb-prose h2 {
75810
- margin-top: calc(var(--rt-space-y) * 1.4);
75811
- margin-bottom: calc(var(--rt-space-y) * 0.7);
75812
- }
75813
- :where(.theme-scope) .rb-prose h3 {
75814
- margin-top: calc(var(--rt-space-y) * 1.2);
75815
- margin-bottom: calc(var(--rt-space-y) * 0.6);
75816
- }
75817
- :where(.theme-scope) .rb-prose h4 {
75818
- margin-top: calc(var(--rt-space-y) * 1);
75819
- margin-bottom: calc(var(--rt-space-y) * 0.5);
75820
- }
75821
- :where(.theme-scope) .rb-prose h5 {
75822
- margin-top: calc(var(--rt-space-y) * 0.9);
75823
- margin-bottom: calc(var(--rt-space-y) * 0.45);
75824
- }
75825
- :where(.theme-scope) .rb-prose h6 {
75826
- margin-top: calc(var(--rt-space-y) * 0.8);
75827
- margin-bottom: calc(var(--rt-space-y) * 0.4);
75828
- }
75829
- :where(.theme-scope) .rb-prose p {
75830
- margin: var(--rt-space-y) 0;
75831
- }
75832
- :where(.theme-scope) .rb-prose img {
75833
- display: block;
75834
- max-width: 100%;
75835
- height: auto;
75836
- margin: calc(var(--rt-space-y) * 1) 0;
75837
- }
75838
- :where(.theme-scope) .rb-prose ul,
75839
- :where(.theme-scope) .rb-prose ol {
75840
- margin: var(--rt-space-y) 0;
75841
- padding-left: 1.25rem;
75842
- }
75843
- :where(.theme-scope) .rb-prose ul {
75844
- list-style-type: disc;
75845
- }
75846
- :where(.theme-scope) .rb-prose ol {
75847
- list-style-type: decimal;
75848
- }
75849
- :where(.theme-scope) .rb-prose ul ul {
75850
- list-style-type: circle;
75851
- }
75852
- :where(.theme-scope) .rb-prose ul ul ul {
75853
- list-style-type: square;
75854
- }
75855
- :where(.theme-scope) .rb-prose ol ol {
75856
- list-style-type: lower-alpha;
75857
- }
75858
- :where(.theme-scope) .rb-prose ol ol ol {
75859
- list-style-type: lower-roman;
75860
- }
75861
- :where(.theme-scope) .rb-prose blockquote {
75862
- margin: calc(var(--rt-space-y) * 1) 0;
75863
- padding-left: 1rem;
75864
- border-left: 3px solid rgb(var(--tb-border));
75865
- }
75866
- :where(.theme-scope) .rb-prose > :first-child {
75867
- margin-top: 0;
75868
- }
75869
- :where(.theme-scope) .rb-prose > :last-child {
75870
- margin-bottom: 0;
75871
- }
76078
+ /* Rich text element spacing based on theme rhythm */
76079
+ :where(.theme-scope) .rb-prose h1 {
76080
+ margin-top: calc(var(--rt-space-y) * 1.6);
76081
+ margin-bottom: calc(var(--rt-space-y) * 0.8);
76082
+ }
76083
+ :where(.theme-scope) .rb-prose h2 {
76084
+ margin-top: calc(var(--rt-space-y) * 1.4);
76085
+ margin-bottom: calc(var(--rt-space-y) * 0.7);
76086
+ }
76087
+ :where(.theme-scope) .rb-prose h3 {
76088
+ margin-top: calc(var(--rt-space-y) * 1.2);
76089
+ margin-bottom: calc(var(--rt-space-y) * 0.6);
76090
+ }
76091
+ :where(.theme-scope) .rb-prose h4 {
76092
+ margin-top: calc(var(--rt-space-y) * 1);
76093
+ margin-bottom: calc(var(--rt-space-y) * 0.5);
76094
+ }
76095
+ :where(.theme-scope) .rb-prose h5 {
76096
+ margin-top: calc(var(--rt-space-y) * 0.9);
76097
+ margin-bottom: calc(var(--rt-space-y) * 0.45);
76098
+ }
76099
+ :where(.theme-scope) .rb-prose h6 {
76100
+ margin-top: calc(var(--rt-space-y) * 0.8);
76101
+ margin-bottom: calc(var(--rt-space-y) * 0.4);
76102
+ }
76103
+ :where(.theme-scope) .rb-prose p {
76104
+ margin: var(--rt-space-y) 0;
76105
+ }
76106
+ :where(.theme-scope) .rb-prose img {
76107
+ display: block;
76108
+ max-width: 100%;
76109
+ height: auto;
76110
+ margin: calc(var(--rt-space-y) * 1) 0;
76111
+ }
76112
+ :where(.theme-scope) .rb-prose ul,
76113
+ :where(.theme-scope) .rb-prose ol {
76114
+ margin: var(--rt-space-y) 0;
76115
+ padding-left: 1.25rem;
76116
+ }
76117
+ :where(.theme-scope) .rb-prose ul {
76118
+ list-style-type: disc;
76119
+ }
76120
+ :where(.theme-scope) .rb-prose ol {
76121
+ list-style-type: decimal;
76122
+ }
76123
+ :where(.theme-scope) .rb-prose ul ul {
76124
+ list-style-type: circle;
76125
+ }
76126
+ :where(.theme-scope) .rb-prose ul ul ul {
76127
+ list-style-type: square;
76128
+ }
76129
+ :where(.theme-scope) .rb-prose ol ol {
76130
+ list-style-type: lower-alpha;
76131
+ }
76132
+ :where(.theme-scope) .rb-prose ol ol ol {
76133
+ list-style-type: lower-roman;
76134
+ }
76135
+ :where(.theme-scope) .rb-prose blockquote {
76136
+ margin: calc(var(--rt-space-y) * 1) 0;
76137
+ padding-left: 1rem;
76138
+ border-left: 3px solid rgb(var(--tb-border));
76139
+ }
76140
+ :where(.theme-scope) .rb-prose > :first-child {
76141
+ margin-top: 0;
76142
+ }
76143
+ :where(.theme-scope) .rb-prose > :last-child {
76144
+ margin-bottom: 0;
76145
+ }
75872
76146
 
75873
- /* Prose color overrides - use theme CSS variables instead of hardcoded colors
76147
+ /* Prose color overrides - use theme CSS variables instead of hardcoded colors
75874
76148
  * This makes prose elements automatically adapt to light/dark themes */
75875
- :where(.theme-scope) .rb-prose {
75876
- /* Body text inherits from parent, which should already have theme color */
75877
- color: inherit;
75878
- }
76149
+ :where(.theme-scope) .rb-prose {
76150
+ /* Body text inherits from parent, which should already have theme color */
76151
+ color: inherit;
76152
+ }
75879
76153
 
75880
- /* Prose size variants (theme-aware, CSS-only) */
75881
- :where(.theme-scope) {
75882
- /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
75883
- --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
75884
- --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
76154
+ /* Prose size variants (theme-aware, CSS-only) */
76155
+ :where(.theme-scope) {
76156
+ /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
76157
+ --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
76158
+ --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
75885
76159
 
75886
- --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
75887
- --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
76160
+ --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
76161
+ --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
75888
76162
 
75889
- /* Applied at >= 640px; below that, rb-prose-lg is typically used */
75890
- --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
75891
- --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
75892
- }
76163
+ /* Applied at >= 640px; below that, rb-prose-lg is typically used */
76164
+ --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
76165
+ --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
76166
+ }
75893
76167
 
75894
- :where(.theme-scope) .rb-prose-sm {
75895
- font-size: var(--rb-prose-sm-font-size);
75896
- line-height: var(--rb-prose-sm-line-height);
75897
- }
75898
- :where(.theme-scope) .rb-prose-lg {
75899
- font-size: var(--rb-prose-lg-font-size);
75900
- line-height: var(--rb-prose-lg-line-height);
75901
- }
75902
- @container rb-site (min-width: 640px) {
76168
+ :where(.theme-scope) .rb-prose-sm {
76169
+ font-size: var(--rb-prose-sm-font-size);
76170
+ line-height: var(--rb-prose-sm-line-height);
76171
+ }
76172
+ :where(.theme-scope) .rb-prose-lg {
76173
+ font-size: var(--rb-prose-lg-font-size);
76174
+ line-height: var(--rb-prose-lg-line-height);
76175
+ }
76176
+ @container rb-site (min-width: 640px) {
75903
76177
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
75904
76178
  :where(.theme-scope) .rb-prose-xl-sm {
75905
- font-size: var(--rb-prose-xl-sm-font-size);
75906
- line-height: var(--rb-prose-xl-sm-line-height);
75907
- }
76179
+ font-size: var(--rb-prose-xl-sm-font-size);
76180
+ line-height: var(--rb-prose-xl-sm-line-height);
76181
+ }
75908
76182
  }
75909
76183
  }
75910
76184
 
75911
- /* Neutral prose uses theme text color by default */
75912
- :where(.theme-scope) .rb-prose-neutral {
75913
- color: rgb(var(--tb-text));
75914
- }
76185
+ /* Neutral prose uses theme text color by default */
76186
+ :where(.theme-scope) .rb-prose-neutral {
76187
+ color: rgb(var(--tb-text));
76188
+ }
75915
76189
 
75916
- :where(.theme-scope) .rb-prose p,
75917
- :where(.theme-scope) .rb-prose li {
75918
- /* Body text uses inherited color (set by fragment via textColorStyle) */
75919
- color: inherit;
75920
- }
76190
+ :where(.theme-scope) .rb-prose p,
76191
+ :where(.theme-scope) .rb-prose li {
76192
+ /* Body text uses inherited color (set by fragment via textColorStyle) */
76193
+ color: inherit;
76194
+ }
75921
76195
 
75922
- :where(.theme-scope) .rb-prose h1,
75923
- :where(.theme-scope) .rb-prose h2,
75924
- :where(.theme-scope) .rb-prose h3,
75925
- :where(.theme-scope) .rb-prose h4,
75926
- :where(.theme-scope) .rb-prose h5,
75927
- :where(.theme-scope) .rb-prose h6 {
75928
- /* Headings inherit from parent or use theme text color */
75929
- color: inherit;
75930
- }
76196
+ :where(.theme-scope) .rb-prose h1,
76197
+ :where(.theme-scope) .rb-prose h2,
76198
+ :where(.theme-scope) .rb-prose h3,
76199
+ :where(.theme-scope) .rb-prose h4,
76200
+ :where(.theme-scope) .rb-prose h5,
76201
+ :where(.theme-scope) .rb-prose h6 {
76202
+ /* Headings inherit from parent or use theme text color */
76203
+ color: inherit;
76204
+ }
75931
76205
 
75932
- :where(.theme-scope) .rb-prose strong,
75933
- :where(.theme-scope) .rb-prose b {
75934
- /* Bold text inherits color but increases weight */
75935
- color: inherit;
75936
- font-weight: 600;
75937
- }
76206
+ :where(.theme-scope) .rb-prose strong,
76207
+ :where(.theme-scope) .rb-prose b {
76208
+ /* Bold text inherits color but increases weight */
76209
+ color: inherit;
76210
+ font-weight: 600;
76211
+ }
75938
76212
 
75939
- :where(.theme-scope) .rb-prose em,
75940
- :where(.theme-scope) .rb-prose i {
75941
- /* Italic text inherits color */
75942
- color: inherit;
75943
- }
76213
+ :where(.theme-scope) .rb-prose em,
76214
+ :where(.theme-scope) .rb-prose i {
76215
+ /* Italic text inherits color */
76216
+ color: inherit;
76217
+ }
75944
76218
 
75945
- :where(.theme-scope) .rb-prose a {
75946
- /* Global prose link style with theme-level overrides */
75947
- color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
75948
- text-decoration-line: var(--rb-prose-link-decoration-line, underline);
75949
- text-decoration-style: var(--rb-prose-link-underline-style, solid);
75950
- text-decoration-thickness: var(--rb-prose-link-underline-thickness, from-font);
75951
- text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
75952
- text-decoration-color: var(--rb-prose-link-decoration-color, rgba(var(--tb-primary), 0.3));
75953
- transition:
75954
- color 150ms ease,
75955
- text-decoration-color 150ms ease;
75956
- }
76219
+ :where(.theme-scope) .rb-prose a {
76220
+ /* Global prose link style with theme-level overrides */
76221
+ color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
76222
+ text-decoration-line: var(--rb-prose-link-decoration-line, underline);
76223
+ text-decoration-style: var(--rb-prose-link-underline-style, solid);
76224
+ text-decoration-thickness: var(
76225
+ --rb-prose-link-underline-thickness,
76226
+ from-font
76227
+ );
76228
+ text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
76229
+ text-decoration-color: var(
76230
+ --rb-prose-link-decoration-color,
76231
+ rgba(var(--tb-primary), 0.3)
76232
+ );
76233
+ transition:
76234
+ color 150ms ease,
76235
+ text-decoration-color 150ms ease;
76236
+ }
75957
76237
 
75958
- :where(.theme-scope) .rb-prose a:hover {
75959
- color: var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))));
75960
- text-decoration-color: var(
75961
- --rb-prose-link-hover-decoration-color,
75962
- var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))))
75963
- );
75964
- }
76238
+ :where(.theme-scope) .rb-prose a:hover {
76239
+ color: var(
76240
+ --rb-prose-link-hover-color,
76241
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
76242
+ );
76243
+ text-decoration-color: var(
76244
+ --rb-prose-link-hover-decoration-color,
76245
+ var(
76246
+ --rb-prose-link-hover-color,
76247
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
76248
+ )
76249
+ );
76250
+ }
75965
76251
 
75966
- :where(.theme-scope) .rb-prose blockquote {
75967
- /* Blockquotes use muted text color */
75968
- color: rgb(var(--tb-mutedText));
75969
- border-left-color: rgb(var(--tb-border));
75970
- }
76252
+ :where(.theme-scope) .rb-prose blockquote {
76253
+ /* Blockquotes use muted text color */
76254
+ color: rgb(var(--tb-mutedText));
76255
+ border-left-color: rgb(var(--tb-border));
76256
+ }
75971
76257
 
75972
- :where(.theme-scope) .fragment-quote-body blockquote {
75973
- /* Quote fragment should not get the generic prose blockquote left border/indent. */
75974
- border-left: 0;
75975
- padding-left: 0;
75976
- }
76258
+ :where(.theme-scope) .fragment-quote-body blockquote {
76259
+ /* Quote fragment should not get the generic prose blockquote left border/indent. */
76260
+ border-left: 0;
76261
+ padding-left: 0;
76262
+ }
75977
76263
 
75978
- :where(.theme-scope) .rb-columns-equal-height {
75979
- /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
75980
- container-type: inline-size;
76264
+ :where(.theme-scope) .rb-columns-equal-height {
76265
+ /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
76266
+ container-type: inline-size;
75981
76267
 
75982
- --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
75983
- --rb-columns-gap: var(--rb-semantic-gap, 0px);
75984
- --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
76268
+ --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
76269
+ --rb-columns-gap: var(--rb-semantic-gap, 0px);
76270
+ --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
75985
76271
 
75986
- --rb-columns-tile-w: calc(
75987
- (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) / var(--rb-columns-cols)
75988
- );
75989
- --rb-columns-tile-h: calc(var(--rb-columns-tile-w) * var(--rb-columns-tile-ar));
75990
- }
76272
+ --rb-columns-tile-w: calc(
76273
+ (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) /
76274
+ var(--rb-columns-cols)
76275
+ );
76276
+ --rb-columns-tile-h: calc(
76277
+ var(--rb-columns-tile-w) * var(--rb-columns-tile-ar)
76278
+ );
76279
+ }
75991
76280
 
75992
- @container rb-site (min-width: 768px) {
76281
+ @container rb-site (min-width: 768px) {
75993
76282
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
75994
76283
  :where(.theme-scope) .rb-columns-equal-height {
75995
- --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
75996
- }
76284
+ --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
76285
+ }
75997
76286
  }
75998
76287
  }
75999
76288
 
76000
- @container rb-site (min-width: 1024px) {
76289
+ @container rb-site (min-width: 1024px) {
76001
76290
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
76002
76291
  :where(.theme-scope) .rb-columns-equal-height {
76003
- --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
76004
- }
76292
+ --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
76293
+ }
76005
76294
  }
76006
76295
  }
76007
76296
 
76008
- @container rb-site (min-width: 1280px) {
76297
+ @container rb-site (min-width: 1280px) {
76009
76298
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
76010
76299
  :where(.theme-scope) .rb-columns-equal-height {
76011
- --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
76012
- }
76300
+ --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
76301
+ }
76013
76302
  }
76014
76303
  }
76015
76304
 
76016
- :where(.theme-scope) .rb-columns-equal-height > * {
76017
- height: var(--rb-columns-tile-h);
76018
- }
76305
+ :where(.theme-scope) .rb-columns-equal-height > * {
76306
+ height: var(--rb-columns-tile-h);
76307
+ }
76019
76308
 
76020
- :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
76021
- /*
76309
+ :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
76310
+ /*
76022
76311
  Grid items commonly include \`rb-h-full\` (height: 100%) to stretch within
76023
76312
  their row. In equal-height mode we instead want a fixed tile height so the
76024
76313
  spanning editorial tile doesn't become taller due to its larger width +
76025
76314
  aspect-ratio.
76026
76315
  */
76027
- height: var(--rb-columns-tile-h);
76028
- min-height: var(--rb-columns-tile-h);
76029
- max-height: var(--rb-columns-tile-h);
76030
- }
76316
+ height: var(--rb-columns-tile-h);
76317
+ min-height: var(--rb-columns-tile-h);
76318
+ max-height: var(--rb-columns-tile-h);
76319
+ }
76031
76320
 
76032
- :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
76033
- width: 100%;
76034
- height: 100%;
76035
- overflow: hidden;
76036
- }
76321
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
76322
+ width: 100%;
76323
+ height: 100%;
76324
+ overflow: hidden;
76325
+ }
76037
76326
 
76038
- :where(.theme-scope) .rb-columns-equal-height .fragment-image {
76039
- width: 100%;
76040
- height: 100%;
76041
- object-fit: cover;
76042
- }
76327
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image {
76328
+ width: 100%;
76329
+ height: 100%;
76330
+ object-fit: cover;
76331
+ }
76043
76332
 
76044
- :where(.theme-scope) .rb-prose code {
76045
- /* Inline code uses text color with surface background */
76046
- color: inherit;
76047
- background-color: rgba(var(--tb-surface), 0.5);
76048
- padding: 0.125rem 0.25rem;
76049
- border-radius: 0.25rem;
76050
- font-size: 0.875em;
76051
- }
76333
+ :where(.theme-scope) .rb-prose code {
76334
+ /* Inline code uses text color with surface background */
76335
+ color: inherit;
76336
+ background-color: rgba(var(--tb-surface), 0.5);
76337
+ padding: 0.125rem 0.25rem;
76338
+ border-radius: 0.25rem;
76339
+ font-size: 0.875em;
76340
+ }
76052
76341
 
76053
- :where(.theme-scope) .rb-prose pre {
76054
- /* Code blocks */
76055
- background-color: rgb(var(--tb-surface));
76056
- color: rgb(var(--tb-text));
76057
- border: 1px solid rgb(var(--tb-border));
76058
- border-radius: 0.5rem;
76059
- padding: 1rem;
76060
- overflow-x: auto;
76061
- }
76342
+ :where(.theme-scope) .rb-prose pre {
76343
+ /* Code blocks */
76344
+ background-color: rgb(var(--tb-surface));
76345
+ color: rgb(var(--tb-text));
76346
+ border: 1px solid rgb(var(--tb-border));
76347
+ border-radius: 0.5rem;
76348
+ padding: 1rem;
76349
+ overflow-x: auto;
76350
+ }
76062
76351
 
76063
- :where(.theme-scope) .rb-prose pre code {
76064
- /* Code inside pre blocks */
76065
- background-color: transparent;
76066
- padding: 0;
76067
- color: inherit;
76068
- }
76352
+ :where(.theme-scope) .rb-prose pre code {
76353
+ /* Code inside pre blocks */
76354
+ background-color: transparent;
76355
+ padding: 0;
76356
+ color: inherit;
76357
+ }
76069
76358
 
76070
- :where(.theme-scope) .rb-prose hr {
76071
- /* Horizontal rules */
76072
- border-color: rgb(var(--tb-border));
76073
- }
76359
+ :where(.theme-scope) .rb-prose hr {
76360
+ /* Horizontal rules */
76361
+ border-color: rgb(var(--tb-border));
76362
+ }
76074
76363
 
76075
- :where(.theme-scope) .rb-prose ul > li::marker,
76076
- :where(.theme-scope) .rb-prose ol > li::marker {
76077
- /* List markers use muted text color */
76078
- color: rgb(var(--tb-mutedText));
76079
- }
76364
+ :where(.theme-scope) .rb-prose ul > li::marker,
76365
+ :where(.theme-scope) .rb-prose ol > li::marker {
76366
+ /* List markers use muted text color */
76367
+ color: rgb(var(--tb-mutedText));
76368
+ }
76080
76369
 
76081
- /*
76370
+ /*
76082
76371
  /* Density helpers */
76083
- :where(.theme-scope) .section-pad {
76084
- padding-top: 4rem;
76085
- padding-bottom: 4rem;
76086
- }
76087
- :where(.theme-scope)[data-density="airy"] .section-pad {
76088
- padding-top: 4.5rem;
76089
- padding-bottom: 4.5rem;
76090
- }
76091
- :where(.theme-scope)[data-density="compact"] .section-pad {
76092
- padding-top: 3rem;
76093
- padding-bottom: 3rem;
76094
- }
76095
-
76096
- :where(.theme-scope) .rounded-control {
76097
- border-radius: var(--radius-control);
76098
- }
76099
- :where(.theme-scope) .rounded-card {
76100
- border-radius: var(--radius-card);
76101
- }
76372
+ :where(.theme-scope) .section-pad {
76373
+ padding-top: 4rem;
76374
+ padding-bottom: 4rem;
76375
+ }
76376
+ :where(.theme-scope)[data-density='airy'] .section-pad {
76377
+ padding-top: 4.5rem;
76378
+ padding-bottom: 4.5rem;
76379
+ }
76380
+ :where(.theme-scope)[data-density='compact'] .section-pad {
76381
+ padding-top: 3rem;
76382
+ padding-bottom: 3rem;
76383
+ }
76102
76384
 
76103
- :where(.theme-scope) .shadow-elev {
76104
- box-shadow: var(--shadow-elev);
76105
- }
76385
+ :where(.theme-scope) .rounded-control {
76386
+ border-radius: var(--radius-control);
76387
+ }
76388
+ :where(.theme-scope) .rounded-card {
76389
+ border-radius: var(--radius-card);
76390
+ }
76106
76391
 
76107
- :where(.theme-scope) .font-heading {
76108
- font-family: var(--font-heading);
76109
- }
76110
- :where(.theme-scope) .font-body {
76111
- font-family: var(--font-body);
76112
- }
76392
+ :where(.theme-scope) .shadow-elev {
76393
+ box-shadow: var(--shadow-elev);
76394
+ }
76113
76395
 
76114
- :where(.theme-scope) .text-h1 {
76115
- font-size: var(--fs-h1);
76116
- line-height: 1.1;
76117
- }
76118
- :where(.theme-scope) .text-h2 {
76119
- font-size: var(--fs-h2);
76120
- line-height: 1.15;
76121
- }
76122
- :where(.theme-scope) .text-h3 {
76123
- font-size: var(--fs-h3);
76124
- line-height: 1.2;
76125
- }
76126
- :where(.theme-scope) .text-body-size {
76127
- font-size: var(--fs-body);
76128
- }
76396
+ :where(.theme-scope) .font-heading {
76397
+ font-family: var(--font-heading);
76398
+ }
76399
+ :where(.theme-scope) .font-body {
76400
+ font-family: var(--font-body);
76401
+ }
76129
76402
 
76130
- :where(.theme-scope) .transition-theme {
76131
- transition: all var(--motion-duration) var(--motion-ease);
76132
- }
76133
- :where(.theme-scope) .transition-theme-standard {
76134
- transition: all var(--motion-duration) var(--motion-ease);
76135
- }
76136
- :where(.theme-scope) .transition-theme-subtle {
76137
- transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
76138
- }
76139
- :where(.theme-scope) .transition-theme-expressive {
76140
- transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
76141
- }
76403
+ :where(.theme-scope) .text-h1 {
76404
+ font-size: var(--fs-h1);
76405
+ line-height: 1.1;
76406
+ }
76407
+ :where(.theme-scope) .text-h2 {
76408
+ font-size: var(--fs-h2);
76409
+ line-height: 1.15;
76410
+ }
76411
+ :where(.theme-scope) .text-h3 {
76412
+ font-size: var(--fs-h3);
76413
+ line-height: 1.2;
76414
+ }
76415
+ :where(.theme-scope) .text-body-size {
76416
+ font-size: var(--fs-body);
76417
+ }
76142
76418
 
76143
- /* Shade tokens (50..950) for primary */
76144
- :where(.theme-scope) .from-primary-50 {
76145
- --rb-gradient-from: rgb(var(--tb-primary-50)) var(--rb-gradient-from-position);
76146
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
76147
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76148
- }
76149
- :where(.theme-scope) .to-primary-50 {
76150
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
76151
- }
76152
- :where(.theme-scope) .from-primary-100 {
76153
- --rb-gradient-from: rgb(var(--tb-primary-100))
76154
- var(--rb-gradient-from-position);
76155
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
76156
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76157
- }
76158
- :where(.theme-scope) .to-primary-100 {
76159
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
76160
- }
76161
- :where(.theme-scope) .from-primary-200 {
76162
- --rb-gradient-from: rgb(var(--tb-primary-200))
76163
- var(--rb-gradient-from-position);
76164
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
76165
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76166
- }
76167
- :where(.theme-scope) .to-primary-200 {
76168
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
76169
- }
76170
- :where(.theme-scope) .from-primary-300 {
76171
- --rb-gradient-from: rgb(var(--tb-primary-300))
76172
- var(--rb-gradient-from-position);
76173
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
76174
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76175
- }
76176
- :where(.theme-scope) .to-primary-300 {
76177
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
76178
- }
76179
- :where(.theme-scope) .from-primary-400 {
76180
- --rb-gradient-from: rgb(var(--tb-primary-400))
76181
- var(--rb-gradient-from-position);
76182
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
76183
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76184
- }
76185
- :where(.theme-scope) .to-primary-400 {
76186
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
76187
- }
76188
- :where(.theme-scope) .from-primary-500 {
76189
- --rb-gradient-from: rgb(var(--tb-primary-500))
76190
- var(--rb-gradient-from-position);
76191
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
76192
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76193
- }
76194
- :where(.theme-scope) .to-primary-500 {
76195
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
76196
- }
76197
- :where(.theme-scope) .from-primary-600 {
76198
- --rb-gradient-from: rgb(var(--tb-primary-600))
76199
- var(--rb-gradient-from-position);
76200
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
76201
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76202
- }
76203
- :where(.theme-scope) .to-primary-600 {
76204
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
76205
- }
76206
- :where(.theme-scope) .from-primary-700 {
76207
- --rb-gradient-from: rgb(var(--tb-primary-700))
76208
- var(--rb-gradient-from-position);
76209
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
76210
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76211
- }
76212
- :where(.theme-scope) .to-primary-700 {
76213
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
76214
- }
76215
- :where(.theme-scope) .from-primary-800 {
76216
- --rb-gradient-from: rgb(var(--tb-primary-800))
76217
- var(--rb-gradient-from-position);
76218
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
76219
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76220
- }
76221
- :where(.theme-scope) .to-primary-800 {
76222
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
76223
- }
76224
- :where(.theme-scope) .from-primary-900 {
76225
- --rb-gradient-from: rgb(var(--tb-primary-900))
76226
- var(--rb-gradient-from-position);
76227
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
76228
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76229
- }
76230
- :where(.theme-scope) .to-primary-900 {
76231
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
76232
- }
76233
- :where(.theme-scope) .from-primary-950 {
76234
- --rb-gradient-from: rgb(var(--tb-primary-950))
76235
- var(--rb-gradient-from-position);
76236
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
76237
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76238
- }
76239
- :where(.theme-scope) .to-primary-950 {
76240
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
76241
- }
76242
-
76243
- /* Shade tokens (50..950) for secondary */
76244
- :where(.theme-scope) .from-secondary-50 {
76245
- --rb-gradient-from: rgb(var(--tb-secondary-50))
76246
- var(--rb-gradient-from-position);
76247
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
76248
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76249
- }
76250
- :where(.theme-scope) .to-secondary-50 {
76251
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
76252
- }
76253
- :where(.theme-scope) .from-secondary-100 {
76254
- --rb-gradient-from: rgb(var(--tb-secondary-100))
76255
- var(--rb-gradient-from-position);
76256
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
76257
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76258
- }
76259
- :where(.theme-scope) .to-secondary-100 {
76260
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
76261
- }
76262
- :where(.theme-scope) .from-secondary-200 {
76263
- --rb-gradient-from: rgb(var(--tb-secondary-200))
76264
- var(--rb-gradient-from-position);
76265
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
76266
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76267
- }
76268
- :where(.theme-scope) .to-secondary-200 {
76269
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
76270
- }
76271
- :where(.theme-scope) .from-secondary-300 {
76272
- --rb-gradient-from: rgb(var(--tb-secondary-300))
76273
- var(--rb-gradient-from-position);
76274
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
76275
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76276
- }
76277
- :where(.theme-scope) .to-secondary-300 {
76278
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
76279
- }
76280
- :where(.theme-scope) .from-secondary-400 {
76281
- --rb-gradient-from: rgb(var(--tb-secondary-400))
76282
- var(--rb-gradient-from-position);
76283
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
76284
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76285
- }
76286
- :where(.theme-scope) .to-secondary-400 {
76287
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
76288
- }
76289
- :where(.theme-scope) .from-secondary-500 {
76290
- --rb-gradient-from: rgb(var(--tb-secondary-500))
76291
- var(--rb-gradient-from-position);
76292
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
76293
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76294
- }
76295
- :where(.theme-scope) .to-secondary-500 {
76296
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
76297
- }
76298
- :where(.theme-scope) .from-secondary-600 {
76299
- --rb-gradient-from: rgb(var(--tb-secondary-600))
76300
- var(--rb-gradient-from-position);
76301
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
76302
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76303
- }
76304
- :where(.theme-scope) .to-secondary-600 {
76305
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
76306
- }
76307
- :where(.theme-scope) .from-secondary-700 {
76308
- --rb-gradient-from: rgb(var(--tb-secondary-700))
76309
- var(--rb-gradient-from-position);
76310
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
76311
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76312
- }
76313
- :where(.theme-scope) .to-secondary-700 {
76314
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
76315
- }
76316
- :where(.theme-scope) .from-secondary-800 {
76317
- --rb-gradient-from: rgb(var(--tb-secondary-800))
76318
- var(--rb-gradient-from-position);
76319
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
76320
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76321
- }
76322
- :where(.theme-scope) .to-secondary-800 {
76323
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
76324
- }
76325
- :where(.theme-scope) .from-secondary-900 {
76326
- --rb-gradient-from: rgb(var(--tb-secondary-900))
76327
- var(--rb-gradient-from-position);
76328
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
76329
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76330
- }
76331
- :where(.theme-scope) .to-secondary-900 {
76332
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
76333
- }
76334
- :where(.theme-scope) .from-secondary-950 {
76335
- --rb-gradient-from: rgb(var(--tb-secondary-950))
76336
- var(--rb-gradient-from-position);
76337
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
76338
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76339
- }
76340
- :where(.theme-scope) .to-secondary-950 {
76341
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
76342
- }
76343
-
76344
- /* Shade tokens (50..950) for accent */
76345
- :where(.theme-scope) .from-accent-50 {
76346
- --rb-gradient-from: rgb(var(--tb-accent-50)) var(--rb-gradient-from-position);
76347
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
76348
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76349
- }
76350
- :where(.theme-scope) .to-accent-50 {
76351
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
76352
- }
76353
- :where(.theme-scope) .from-accent-100 {
76354
- --rb-gradient-from: rgb(var(--tb-accent-100)) var(--rb-gradient-from-position);
76355
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
76356
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76357
- }
76358
- :where(.theme-scope) .to-accent-100 {
76359
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
76360
- }
76361
- :where(.theme-scope) .from-accent-200 {
76362
- --rb-gradient-from: rgb(var(--tb-accent-200)) var(--rb-gradient-from-position);
76363
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
76364
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76365
- }
76366
- :where(.theme-scope) .to-accent-200 {
76367
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
76368
- }
76369
- :where(.theme-scope) .from-accent-300 {
76370
- --rb-gradient-from: rgb(var(--tb-accent-300)) var(--rb-gradient-from-position);
76371
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
76372
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76373
- }
76374
- :where(.theme-scope) .to-accent-300 {
76375
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
76376
- }
76377
- :where(.theme-scope) .from-accent-400 {
76378
- --rb-gradient-from: rgb(var(--tb-accent-400)) var(--rb-gradient-from-position);
76379
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
76380
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76381
- }
76382
- :where(.theme-scope) .to-accent-400 {
76383
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
76384
- }
76385
- :where(.theme-scope) .from-accent-500 {
76386
- --rb-gradient-from: rgb(var(--tb-accent-500)) var(--rb-gradient-from-position);
76387
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
76388
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76389
- }
76390
- :where(.theme-scope) .to-accent-500 {
76391
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
76392
- }
76393
- :where(.theme-scope) .from-accent-600 {
76394
- --rb-gradient-from: rgb(var(--tb-accent-600)) var(--rb-gradient-from-position);
76395
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
76396
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76397
- }
76398
- :where(.theme-scope) .to-accent-600 {
76399
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
76400
- }
76401
- :where(.theme-scope) .from-accent-700 {
76402
- --rb-gradient-from: rgb(var(--tb-accent-700)) var(--rb-gradient-from-position);
76403
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
76404
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76405
- }
76406
- :where(.theme-scope) .to-accent-700 {
76407
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
76408
- }
76409
- :where(.theme-scope) .from-accent-800 {
76410
- --rb-gradient-from: rgb(var(--tb-accent-800)) var(--rb-gradient-from-position);
76411
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
76412
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76413
- }
76414
- :where(.theme-scope) .to-accent-800 {
76415
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
76416
- }
76417
- :where(.theme-scope) .from-accent-900 {
76418
- --rb-gradient-from: rgb(var(--tb-accent-900)) var(--rb-gradient-from-position);
76419
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
76420
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76421
- }
76422
- :where(.theme-scope) .to-accent-900 {
76423
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
76424
- }
76425
- :where(.theme-scope) .from-accent-950 {
76426
- --rb-gradient-from: rgb(var(--tb-accent-950)) var(--rb-gradient-from-position);
76427
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
76428
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76429
- }
76430
- :where(.theme-scope) .to-accent-950 {
76431
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
76432
- }
76419
+ :where(.theme-scope) .transition-theme {
76420
+ transition: all var(--motion-duration) var(--motion-ease);
76421
+ }
76422
+ :where(.theme-scope) .transition-theme-standard {
76423
+ transition: all var(--motion-duration) var(--motion-ease);
76424
+ }
76425
+ :where(.theme-scope) .transition-theme-subtle {
76426
+ transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
76427
+ }
76428
+ :where(.theme-scope) .transition-theme-expressive {
76429
+ transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
76430
+ }
76433
76431
 
76434
- /* Shade tokens (50..950) for neutral */
76435
- :where(.theme-scope) .from-neutral-50 {
76436
- --rb-gradient-from: rgb(var(--tb-neutral-50)) var(--rb-gradient-from-position);
76437
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
76438
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76439
- }
76440
- :where(.theme-scope) .to-neutral-50 {
76441
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
76442
- }
76443
- :where(.theme-scope) .from-neutral-100 {
76444
- --rb-gradient-from: rgb(var(--tb-neutral-100))
76445
- var(--rb-gradient-from-position);
76446
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
76447
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76448
- }
76449
- :where(.theme-scope) .to-neutral-100 {
76450
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
76451
- }
76452
- :where(.theme-scope) .from-neutral-200 {
76453
- --rb-gradient-from: rgb(var(--tb-neutral-200))
76454
- var(--rb-gradient-from-position);
76455
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
76456
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76457
- }
76458
- :where(.theme-scope) .to-neutral-200 {
76459
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
76460
- }
76461
- :where(.theme-scope) .from-neutral-300 {
76462
- --rb-gradient-from: rgb(var(--tb-neutral-300))
76463
- var(--rb-gradient-from-position);
76464
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
76465
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76466
- }
76467
- :where(.theme-scope) .to-neutral-300 {
76468
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
76469
- }
76470
- :where(.theme-scope) .from-neutral-400 {
76471
- --rb-gradient-from: rgb(var(--tb-neutral-400))
76472
- var(--rb-gradient-from-position);
76473
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
76474
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76475
- }
76476
- :where(.theme-scope) .to-neutral-400 {
76477
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
76478
- }
76479
- :where(.theme-scope) .from-neutral-500 {
76480
- --rb-gradient-from: rgb(var(--tb-neutral-500))
76481
- var(--rb-gradient-from-position);
76482
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
76483
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76484
- }
76485
- :where(.theme-scope) .to-neutral-500 {
76486
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
76487
- }
76488
- :where(.theme-scope) .from-neutral-600 {
76489
- --rb-gradient-from: rgb(var(--tb-neutral-600))
76490
- var(--rb-gradient-from-position);
76491
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
76492
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76493
- }
76494
- :where(.theme-scope) .to-neutral-600 {
76495
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
76496
- }
76497
- :where(.theme-scope) .from-neutral-700 {
76498
- --rb-gradient-from: rgb(var(--tb-neutral-700))
76499
- var(--rb-gradient-from-position);
76500
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
76501
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76502
- }
76503
- :where(.theme-scope) .to-neutral-700 {
76504
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
76505
- }
76506
- :where(.theme-scope) .from-neutral-800 {
76507
- --rb-gradient-from: rgb(var(--tb-neutral-800))
76508
- var(--rb-gradient-from-position);
76509
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
76510
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76511
- }
76512
- :where(.theme-scope) .to-neutral-800 {
76513
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
76514
- }
76515
- :where(.theme-scope) .from-neutral-900 {
76516
- --rb-gradient-from: rgb(var(--tb-neutral-900))
76517
- var(--rb-gradient-from-position);
76518
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
76519
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76520
- }
76521
- :where(.theme-scope) .to-neutral-900 {
76522
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
76523
- }
76524
- :where(.theme-scope) .from-neutral-950 {
76525
- --rb-gradient-from: rgb(var(--tb-neutral-950))
76526
- var(--rb-gradient-from-position);
76527
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
76528
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76529
- }
76530
- :where(.theme-scope) .to-neutral-950 {
76531
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
76532
- }
76533
-
76534
- /* =================================================================
76432
+ /* Shade tokens (50..950) for primary */
76433
+ :where(.theme-scope) .from-primary-50 {
76434
+ --rb-gradient-from: rgb(var(--tb-primary-50))
76435
+ var(--rb-gradient-from-position);
76436
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
76437
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76438
+ }
76439
+ :where(.theme-scope) .to-primary-50 {
76440
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
76441
+ }
76442
+ :where(.theme-scope) .from-primary-100 {
76443
+ --rb-gradient-from: rgb(var(--tb-primary-100))
76444
+ var(--rb-gradient-from-position);
76445
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
76446
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76447
+ }
76448
+ :where(.theme-scope) .to-primary-100 {
76449
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
76450
+ }
76451
+ :where(.theme-scope) .from-primary-200 {
76452
+ --rb-gradient-from: rgb(var(--tb-primary-200))
76453
+ var(--rb-gradient-from-position);
76454
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
76455
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76456
+ }
76457
+ :where(.theme-scope) .to-primary-200 {
76458
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
76459
+ }
76460
+ :where(.theme-scope) .from-primary-300 {
76461
+ --rb-gradient-from: rgb(var(--tb-primary-300))
76462
+ var(--rb-gradient-from-position);
76463
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
76464
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76465
+ }
76466
+ :where(.theme-scope) .to-primary-300 {
76467
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
76468
+ }
76469
+ :where(.theme-scope) .from-primary-400 {
76470
+ --rb-gradient-from: rgb(var(--tb-primary-400))
76471
+ var(--rb-gradient-from-position);
76472
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
76473
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76474
+ }
76475
+ :where(.theme-scope) .to-primary-400 {
76476
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
76477
+ }
76478
+ :where(.theme-scope) .from-primary-500 {
76479
+ --rb-gradient-from: rgb(var(--tb-primary-500))
76480
+ var(--rb-gradient-from-position);
76481
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
76482
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76483
+ }
76484
+ :where(.theme-scope) .to-primary-500 {
76485
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
76486
+ }
76487
+ :where(.theme-scope) .from-primary-600 {
76488
+ --rb-gradient-from: rgb(var(--tb-primary-600))
76489
+ var(--rb-gradient-from-position);
76490
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
76491
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76492
+ }
76493
+ :where(.theme-scope) .to-primary-600 {
76494
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
76495
+ }
76496
+ :where(.theme-scope) .from-primary-700 {
76497
+ --rb-gradient-from: rgb(var(--tb-primary-700))
76498
+ var(--rb-gradient-from-position);
76499
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
76500
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76501
+ }
76502
+ :where(.theme-scope) .to-primary-700 {
76503
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
76504
+ }
76505
+ :where(.theme-scope) .from-primary-800 {
76506
+ --rb-gradient-from: rgb(var(--tb-primary-800))
76507
+ var(--rb-gradient-from-position);
76508
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
76509
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76510
+ }
76511
+ :where(.theme-scope) .to-primary-800 {
76512
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
76513
+ }
76514
+ :where(.theme-scope) .from-primary-900 {
76515
+ --rb-gradient-from: rgb(var(--tb-primary-900))
76516
+ var(--rb-gradient-from-position);
76517
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
76518
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76519
+ }
76520
+ :where(.theme-scope) .to-primary-900 {
76521
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
76522
+ }
76523
+ :where(.theme-scope) .from-primary-950 {
76524
+ --rb-gradient-from: rgb(var(--tb-primary-950))
76525
+ var(--rb-gradient-from-position);
76526
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
76527
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76528
+ }
76529
+ :where(.theme-scope) .to-primary-950 {
76530
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
76531
+ }
76532
+
76533
+ /* Shade tokens (50..950) for secondary */
76534
+ :where(.theme-scope) .from-secondary-50 {
76535
+ --rb-gradient-from: rgb(var(--tb-secondary-50))
76536
+ var(--rb-gradient-from-position);
76537
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
76538
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76539
+ }
76540
+ :where(.theme-scope) .to-secondary-50 {
76541
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
76542
+ }
76543
+ :where(.theme-scope) .from-secondary-100 {
76544
+ --rb-gradient-from: rgb(var(--tb-secondary-100))
76545
+ var(--rb-gradient-from-position);
76546
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
76547
+ var(--rb-gradient-to-position);
76548
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76549
+ }
76550
+ :where(.theme-scope) .to-secondary-100 {
76551
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
76552
+ var(--rb-gradient-to-position);
76553
+ }
76554
+ :where(.theme-scope) .from-secondary-200 {
76555
+ --rb-gradient-from: rgb(var(--tb-secondary-200))
76556
+ var(--rb-gradient-from-position);
76557
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
76558
+ var(--rb-gradient-to-position);
76559
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76560
+ }
76561
+ :where(.theme-scope) .to-secondary-200 {
76562
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
76563
+ var(--rb-gradient-to-position);
76564
+ }
76565
+ :where(.theme-scope) .from-secondary-300 {
76566
+ --rb-gradient-from: rgb(var(--tb-secondary-300))
76567
+ var(--rb-gradient-from-position);
76568
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
76569
+ var(--rb-gradient-to-position);
76570
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76571
+ }
76572
+ :where(.theme-scope) .to-secondary-300 {
76573
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
76574
+ var(--rb-gradient-to-position);
76575
+ }
76576
+ :where(.theme-scope) .from-secondary-400 {
76577
+ --rb-gradient-from: rgb(var(--tb-secondary-400))
76578
+ var(--rb-gradient-from-position);
76579
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
76580
+ var(--rb-gradient-to-position);
76581
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76582
+ }
76583
+ :where(.theme-scope) .to-secondary-400 {
76584
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
76585
+ var(--rb-gradient-to-position);
76586
+ }
76587
+ :where(.theme-scope) .from-secondary-500 {
76588
+ --rb-gradient-from: rgb(var(--tb-secondary-500))
76589
+ var(--rb-gradient-from-position);
76590
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
76591
+ var(--rb-gradient-to-position);
76592
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76593
+ }
76594
+ :where(.theme-scope) .to-secondary-500 {
76595
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
76596
+ var(--rb-gradient-to-position);
76597
+ }
76598
+ :where(.theme-scope) .from-secondary-600 {
76599
+ --rb-gradient-from: rgb(var(--tb-secondary-600))
76600
+ var(--rb-gradient-from-position);
76601
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
76602
+ var(--rb-gradient-to-position);
76603
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76604
+ }
76605
+ :where(.theme-scope) .to-secondary-600 {
76606
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
76607
+ var(--rb-gradient-to-position);
76608
+ }
76609
+ :where(.theme-scope) .from-secondary-700 {
76610
+ --rb-gradient-from: rgb(var(--tb-secondary-700))
76611
+ var(--rb-gradient-from-position);
76612
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
76613
+ var(--rb-gradient-to-position);
76614
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76615
+ }
76616
+ :where(.theme-scope) .to-secondary-700 {
76617
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
76618
+ var(--rb-gradient-to-position);
76619
+ }
76620
+ :where(.theme-scope) .from-secondary-800 {
76621
+ --rb-gradient-from: rgb(var(--tb-secondary-800))
76622
+ var(--rb-gradient-from-position);
76623
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
76624
+ var(--rb-gradient-to-position);
76625
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76626
+ }
76627
+ :where(.theme-scope) .to-secondary-800 {
76628
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
76629
+ var(--rb-gradient-to-position);
76630
+ }
76631
+ :where(.theme-scope) .from-secondary-900 {
76632
+ --rb-gradient-from: rgb(var(--tb-secondary-900))
76633
+ var(--rb-gradient-from-position);
76634
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
76635
+ var(--rb-gradient-to-position);
76636
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76637
+ }
76638
+ :where(.theme-scope) .to-secondary-900 {
76639
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
76640
+ var(--rb-gradient-to-position);
76641
+ }
76642
+ :where(.theme-scope) .from-secondary-950 {
76643
+ --rb-gradient-from: rgb(var(--tb-secondary-950))
76644
+ var(--rb-gradient-from-position);
76645
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
76646
+ var(--rb-gradient-to-position);
76647
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76648
+ }
76649
+ :where(.theme-scope) .to-secondary-950 {
76650
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
76651
+ var(--rb-gradient-to-position);
76652
+ }
76653
+
76654
+ /* Shade tokens (50..950) for accent */
76655
+ :where(.theme-scope) .from-accent-50 {
76656
+ --rb-gradient-from: rgb(var(--tb-accent-50))
76657
+ var(--rb-gradient-from-position);
76658
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
76659
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76660
+ }
76661
+ :where(.theme-scope) .to-accent-50 {
76662
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
76663
+ }
76664
+ :where(.theme-scope) .from-accent-100 {
76665
+ --rb-gradient-from: rgb(var(--tb-accent-100))
76666
+ var(--rb-gradient-from-position);
76667
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
76668
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76669
+ }
76670
+ :where(.theme-scope) .to-accent-100 {
76671
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
76672
+ }
76673
+ :where(.theme-scope) .from-accent-200 {
76674
+ --rb-gradient-from: rgb(var(--tb-accent-200))
76675
+ var(--rb-gradient-from-position);
76676
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
76677
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76678
+ }
76679
+ :where(.theme-scope) .to-accent-200 {
76680
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
76681
+ }
76682
+ :where(.theme-scope) .from-accent-300 {
76683
+ --rb-gradient-from: rgb(var(--tb-accent-300))
76684
+ var(--rb-gradient-from-position);
76685
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
76686
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76687
+ }
76688
+ :where(.theme-scope) .to-accent-300 {
76689
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
76690
+ }
76691
+ :where(.theme-scope) .from-accent-400 {
76692
+ --rb-gradient-from: rgb(var(--tb-accent-400))
76693
+ var(--rb-gradient-from-position);
76694
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
76695
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76696
+ }
76697
+ :where(.theme-scope) .to-accent-400 {
76698
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
76699
+ }
76700
+ :where(.theme-scope) .from-accent-500 {
76701
+ --rb-gradient-from: rgb(var(--tb-accent-500))
76702
+ var(--rb-gradient-from-position);
76703
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
76704
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76705
+ }
76706
+ :where(.theme-scope) .to-accent-500 {
76707
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
76708
+ }
76709
+ :where(.theme-scope) .from-accent-600 {
76710
+ --rb-gradient-from: rgb(var(--tb-accent-600))
76711
+ var(--rb-gradient-from-position);
76712
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
76713
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76714
+ }
76715
+ :where(.theme-scope) .to-accent-600 {
76716
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
76717
+ }
76718
+ :where(.theme-scope) .from-accent-700 {
76719
+ --rb-gradient-from: rgb(var(--tb-accent-700))
76720
+ var(--rb-gradient-from-position);
76721
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
76722
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76723
+ }
76724
+ :where(.theme-scope) .to-accent-700 {
76725
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
76726
+ }
76727
+ :where(.theme-scope) .from-accent-800 {
76728
+ --rb-gradient-from: rgb(var(--tb-accent-800))
76729
+ var(--rb-gradient-from-position);
76730
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
76731
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76732
+ }
76733
+ :where(.theme-scope) .to-accent-800 {
76734
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
76735
+ }
76736
+ :where(.theme-scope) .from-accent-900 {
76737
+ --rb-gradient-from: rgb(var(--tb-accent-900))
76738
+ var(--rb-gradient-from-position);
76739
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
76740
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76741
+ }
76742
+ :where(.theme-scope) .to-accent-900 {
76743
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
76744
+ }
76745
+ :where(.theme-scope) .from-accent-950 {
76746
+ --rb-gradient-from: rgb(var(--tb-accent-950))
76747
+ var(--rb-gradient-from-position);
76748
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
76749
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76750
+ }
76751
+ :where(.theme-scope) .to-accent-950 {
76752
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
76753
+ }
76754
+
76755
+ /* Shade tokens (50..950) for neutral */
76756
+ :where(.theme-scope) .from-neutral-50 {
76757
+ --rb-gradient-from: rgb(var(--tb-neutral-50))
76758
+ var(--rb-gradient-from-position);
76759
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
76760
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76761
+ }
76762
+ :where(.theme-scope) .to-neutral-50 {
76763
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
76764
+ }
76765
+ :where(.theme-scope) .from-neutral-100 {
76766
+ --rb-gradient-from: rgb(var(--tb-neutral-100))
76767
+ var(--rb-gradient-from-position);
76768
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
76769
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76770
+ }
76771
+ :where(.theme-scope) .to-neutral-100 {
76772
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
76773
+ }
76774
+ :where(.theme-scope) .from-neutral-200 {
76775
+ --rb-gradient-from: rgb(var(--tb-neutral-200))
76776
+ var(--rb-gradient-from-position);
76777
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
76778
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76779
+ }
76780
+ :where(.theme-scope) .to-neutral-200 {
76781
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
76782
+ }
76783
+ :where(.theme-scope) .from-neutral-300 {
76784
+ --rb-gradient-from: rgb(var(--tb-neutral-300))
76785
+ var(--rb-gradient-from-position);
76786
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
76787
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76788
+ }
76789
+ :where(.theme-scope) .to-neutral-300 {
76790
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
76791
+ }
76792
+ :where(.theme-scope) .from-neutral-400 {
76793
+ --rb-gradient-from: rgb(var(--tb-neutral-400))
76794
+ var(--rb-gradient-from-position);
76795
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
76796
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76797
+ }
76798
+ :where(.theme-scope) .to-neutral-400 {
76799
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
76800
+ }
76801
+ :where(.theme-scope) .from-neutral-500 {
76802
+ --rb-gradient-from: rgb(var(--tb-neutral-500))
76803
+ var(--rb-gradient-from-position);
76804
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
76805
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76806
+ }
76807
+ :where(.theme-scope) .to-neutral-500 {
76808
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
76809
+ }
76810
+ :where(.theme-scope) .from-neutral-600 {
76811
+ --rb-gradient-from: rgb(var(--tb-neutral-600))
76812
+ var(--rb-gradient-from-position);
76813
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
76814
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76815
+ }
76816
+ :where(.theme-scope) .to-neutral-600 {
76817
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
76818
+ }
76819
+ :where(.theme-scope) .from-neutral-700 {
76820
+ --rb-gradient-from: rgb(var(--tb-neutral-700))
76821
+ var(--rb-gradient-from-position);
76822
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
76823
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76824
+ }
76825
+ :where(.theme-scope) .to-neutral-700 {
76826
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
76827
+ }
76828
+ :where(.theme-scope) .from-neutral-800 {
76829
+ --rb-gradient-from: rgb(var(--tb-neutral-800))
76830
+ var(--rb-gradient-from-position);
76831
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
76832
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76833
+ }
76834
+ :where(.theme-scope) .to-neutral-800 {
76835
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
76836
+ }
76837
+ :where(.theme-scope) .from-neutral-900 {
76838
+ --rb-gradient-from: rgb(var(--tb-neutral-900))
76839
+ var(--rb-gradient-from-position);
76840
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
76841
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76842
+ }
76843
+ :where(.theme-scope) .to-neutral-900 {
76844
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
76845
+ }
76846
+ :where(.theme-scope) .from-neutral-950 {
76847
+ --rb-gradient-from: rgb(var(--tb-neutral-950))
76848
+ var(--rb-gradient-from-position);
76849
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
76850
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
76851
+ }
76852
+ :where(.theme-scope) .to-neutral-950 {
76853
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
76854
+ }
76855
+
76856
+ /* =================================================================
76535
76857
  Header System Class Naming Conventions
76536
76858
 
76537
76859
  rb-header-* Utility-style classes set in site-header.ts layouts
@@ -76544,240 +76866,240 @@ var containerResponsiveThemeCss = `/*
76544
76866
  (nav-dropdown, nav-mobile-panel, nav-underline-grow)
76545
76867
  ================================================================= */
76546
76868
 
76547
- /* =================================================================
76869
+ /* =================================================================
76548
76870
  Header Layout Padding
76549
76871
 
76550
76872
  Padding is controlled entirely by CSS based on variant class.
76551
76873
  This ensures shrink headers look identical to non-shrink before scroll.
76552
76874
  ================================================================= */
76553
76875
 
76554
- /* Prevent scroll anchoring feedback loops when the header height transitions.
76876
+ /* Prevent scroll anchoring feedback loops when the header height transitions.
76555
76877
  In some browsers, resizing a sticky header near the top can cause the UA to
76556
76878
  adjust scroll position ("scroll anchoring"), which then flips the
76557
76879
  \`header-scrolled\` threshold logic back and forth. */
76558
- :where(.theme-scope) .block-site-header {
76559
- overflow-anchor: none;
76560
- }
76880
+ :where(.theme-scope) .block-site-header {
76881
+ overflow-anchor: none;
76882
+ }
76561
76883
 
76562
- /* Base padding for horizontal variants (classic, transparent) */
76563
- :where(.theme-scope) .rb-header-layout {
76564
- padding-top: 1rem;
76565
- padding-bottom: 1rem;
76566
- transition: padding 300ms var(--motion-ease, ease);
76567
- }
76884
+ /* Base padding for horizontal variants (classic, transparent) */
76885
+ :where(.theme-scope) .rb-header-layout {
76886
+ padding-top: 1rem;
76887
+ padding-bottom: 1rem;
76888
+ transition: padding 300ms var(--motion-ease, ease);
76889
+ }
76568
76890
 
76569
- /* Vertical variants need more breathing room
76891
+ /* Vertical variants need more breathing room
76570
76892
  Note: header-variant-* is on Section (ancestor), rb-header-layout on inner div */
76571
- :where(.theme-scope) .header-variant-centered .rb-header-layout,
76572
- :where(.theme-scope) .header-variant-editorial .rb-header-layout {
76573
- padding-top: 1.5rem;
76574
- padding-bottom: 1.5rem;
76575
- }
76893
+ :where(.theme-scope) .header-variant-centered .rb-header-layout {
76894
+ padding-top: 1.5rem;
76895
+ padding-bottom: 1.5rem;
76896
+ }
76576
76897
 
76577
- /* Floating variant - compact padding */
76578
- :where(.theme-scope) .header-variant-floating .rb-header-layout {
76579
- padding-top: 0.75rem;
76580
- padding-bottom: 0.75rem;
76581
- }
76898
+ /* Floating variant - compact padding */
76899
+ :where(.theme-scope) .header-variant-floating .rb-header-layout {
76900
+ padding-top: 0.75rem;
76901
+ padding-bottom: 0.75rem;
76902
+ }
76582
76903
 
76583
- /* =================================================================
76904
+ /* =================================================================
76584
76905
  Header Shrink-on-Scroll
76585
76906
 
76586
76907
  Only applies when .rb-header-shrink is present AND user has scrolled.
76587
76908
  No changes until scroll - shrink header = non-shrink header initially.
76588
76909
  ================================================================= */
76589
76910
 
76590
- /* Scrolled state - reduce padding */
76591
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
76592
- padding-top: 0.5rem;
76593
- padding-bottom: 0.5rem;
76594
- }
76911
+ /* Scrolled state - reduce padding */
76912
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
76913
+ padding-top: 0.5rem;
76914
+ padding-bottom: 0.5rem;
76915
+ }
76595
76916
 
76596
- /* Vertical variants get gentler reduction
76917
+ /* Vertical variants get gentler reduction
76597
76918
  Note: Both classes are on Section, rb-header-layout on inner div */
76598
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-centered .rb-header-layout,
76599
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-editorial .rb-header-layout {
76600
- padding-top: 0.75rem;
76601
- padding-bottom: 0.75rem;
76602
- }
76919
+ :where(.theme-scope)
76920
+ .rb-header-shrink.header-scrolled.header-variant-centered
76921
+ .rb-header-layout {
76922
+ padding-top: 0.75rem;
76923
+ padding-bottom: 0.75rem;
76924
+ }
76603
76925
 
76604
- /* Floating variant */
76605
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-floating .rb-header-layout {
76606
- padding-top: 0.25rem;
76607
- padding-bottom: 0.25rem;
76608
- }
76926
+ /* Floating variant */
76927
+ :where(.theme-scope)
76928
+ .rb-header-shrink.header-scrolled.header-variant-floating
76929
+ .rb-header-layout {
76930
+ padding-top: 0.25rem;
76931
+ padding-bottom: 0.25rem;
76932
+ }
76609
76933
 
76610
- /* =================================================================
76934
+ /* =================================================================
76611
76935
  Logo & Title Sizing
76612
76936
 
76613
76937
  Font sizes controlled here, not via utility classes, so shrink
76614
76938
  transitions work (utility classes would override :where()).
76615
76939
  ================================================================= */
76616
76940
 
76617
- /* Logo image sizing */
76618
- :where(.theme-scope) .rb-header-logo-sm {
76619
- height: 2.5rem;
76620
- transition: height 300ms var(--motion-ease, ease);
76621
- }
76622
- :where(.theme-scope) .rb-header-logo-lg {
76623
- height: 3rem;
76624
- transition: height 300ms var(--motion-ease, ease);
76625
- }
76941
+ /* Logo image sizing */
76942
+ :where(.theme-scope) .rb-header-logo-sm {
76943
+ height: 2.5rem;
76944
+ transition: height 300ms var(--motion-ease, ease);
76945
+ }
76946
+ :where(.theme-scope) .rb-header-logo-lg {
76947
+ height: 3rem;
76948
+ transition: height 300ms var(--motion-ease, ease);
76949
+ }
76626
76950
 
76627
- /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
76628
- :where(.theme-scope) .header-logo-text {
76629
- font-size: 1.125rem; /* matches rb-text-lg */
76630
- line-height: 1.75rem;
76631
- transition: font-size 300ms var(--motion-ease, ease);
76632
- }
76951
+ /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
76952
+ :where(.theme-scope) .header-logo-text {
76953
+ font-size: 1.125rem; /* matches rb-text-lg */
76954
+ line-height: 1.75rem;
76955
+ transition: font-size 300ms var(--motion-ease, ease);
76956
+ }
76633
76957
 
76634
- /* Mobile: reduce site title size (~30%) to keep header compact */
76635
- @container rb-site (max-width: 767px) {
76958
+ /* Mobile: reduce site title size (~30%) to keep header compact */
76959
+ @container rb-site (max-width: 767px) {
76636
76960
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
76637
76961
  :where(.theme-scope) .header-logo-text {
76638
- font-size: 0.8rem;
76639
- line-height: 1.25rem;
76640
- }
76962
+ font-size: 0.8rem;
76963
+ line-height: 1.25rem;
76964
+ }
76641
76965
 
76642
- :where(.theme-scope) .header-variant-centered .header-logo-text,
76643
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
76644
- font-size: 0.875rem;
76645
- line-height: 1.25rem;
76646
- }
76966
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
76967
+ font-size: 0.875rem;
76968
+ line-height: 1.25rem;
76969
+ }
76647
76970
  }
76648
76971
  }
76649
76972
 
76650
- /* Centered/editorial variants use larger title */
76651
- :where(.theme-scope) .header-variant-centered .header-logo-text,
76652
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
76653
- font-size: 1.25rem; /* matches rb-text-xl */
76654
- line-height: 1.75rem;
76655
- }
76973
+ /* Centered variant uses larger title */
76974
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
76975
+ font-size: 1.25rem; /* matches rb-text-xl */
76976
+ line-height: 1.75rem;
76977
+ }
76656
76978
 
76657
- /* =================================================================
76979
+ /* =================================================================
76658
76980
  Shrink on Scroll - Logo & Title
76659
76981
  ================================================================= */
76660
76982
 
76661
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
76662
- height: 2rem;
76663
- }
76664
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
76665
- height: 2.5rem;
76666
- }
76667
- :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
76668
- font-size: 0.875rem;
76669
- }
76983
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
76984
+ height: 2rem;
76985
+ }
76986
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
76987
+ height: 2.5rem;
76988
+ }
76989
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
76990
+ font-size: 0.875rem;
76991
+ }
76670
76992
 
76671
- @container rb-site (max-width: 767px) {
76993
+ @container rb-site (max-width: 767px) {
76672
76994
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
76673
76995
  :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
76674
- font-size: 0.75rem;
76675
- }
76996
+ font-size: 0.75rem;
76997
+ }
76676
76998
  }
76677
76999
  }
76678
77000
 
76679
- /* =================================================================
77001
+ /* =================================================================
76680
77002
  Accessibility: Reduced Motion
76681
77003
  ================================================================= */
76682
77004
 
76683
- @media (prefers-reduced-motion: reduce) {
76684
- :where(.theme-scope) .rb-header-layout,
76685
- :where(.theme-scope) .rb-header-logo-sm,
76686
- :where(.theme-scope) .rb-header-logo-lg,
76687
- :where(.theme-scope) .header-logo-text {
76688
- transition: none;
77005
+ @media (prefers-reduced-motion: reduce) {
77006
+ :where(.theme-scope) .rb-header-layout,
77007
+ :where(.theme-scope) .rb-header-logo-sm,
77008
+ :where(.theme-scope) .rb-header-logo-lg,
77009
+ :where(.theme-scope) .header-logo-text {
77010
+ transition: none;
77011
+ }
76689
77012
  }
76690
- }
76691
77013
 
76692
- /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
76693
- :where(.theme-scope) .nav-underline-grow {
76694
- position: relative;
76695
- overflow: visible;
76696
- }
76697
- :where(.theme-scope) .nav-underline-grow::after {
76698
- content: "";
76699
- position: absolute;
76700
- left: 0;
76701
- bottom: var(--nav-underline-offset, -0.35em);
76702
- width: 100%;
76703
- height: 2px;
76704
- background-color: currentColor;
76705
- transform: scaleX(0);
76706
- transform-origin: left center;
76707
- transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
76708
- }
76709
- :where(.theme-scope) .nav-underline-grow:hover::after,
76710
- :where(.theme-scope)
76711
- .nav-underline-grow.nav-underline-active[data-active="true"]::after {
76712
- transform: scaleX(1);
76713
- }
76714
- :where(.theme-scope) .nav-underline-offset-tight {
76715
- --nav-underline-offset: -0.2em;
76716
- }
76717
- :where(.theme-scope) .nav-underline-offset-normal {
76718
- --nav-underline-offset: -0.3em;
76719
- }
76720
- :where(.theme-scope) .nav-underline-offset-loose {
76721
- --nav-underline-offset: -0.45em;
76722
- }
77014
+ /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
77015
+ :where(.theme-scope) .nav-underline-grow {
77016
+ position: relative;
77017
+ overflow: visible;
77018
+ }
77019
+ :where(.theme-scope) .nav-underline-grow::after {
77020
+ content: '';
77021
+ position: absolute;
77022
+ left: 0;
77023
+ bottom: var(--nav-underline-offset, -0.35em);
77024
+ width: 100%;
77025
+ height: 2px;
77026
+ background-color: currentColor;
77027
+ transform: scaleX(0);
77028
+ transform-origin: left center;
77029
+ transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
77030
+ }
77031
+ :where(.theme-scope) .nav-underline-grow:hover::after,
77032
+ :where(.theme-scope)
77033
+ .nav-underline-grow.nav-underline-active[data-active='true']::after {
77034
+ transform: scaleX(1);
77035
+ }
77036
+ :where(.theme-scope) .nav-underline-offset-tight {
77037
+ --nav-underline-offset: -0.2em;
77038
+ }
77039
+ :where(.theme-scope) .nav-underline-offset-normal {
77040
+ --nav-underline-offset: -0.3em;
77041
+ }
77042
+ :where(.theme-scope) .nav-underline-offset-loose {
77043
+ --nav-underline-offset: -0.45em;
77044
+ }
76723
77045
 
76724
- :where(.theme-scope) .card-surface {
76725
- background: rgb(var(--tb-surface));
76726
- color: rgb(var(--tb-onSurface, var(--tb-text)));
76727
- border: 1px solid rgb(var(--tb-border));
76728
- border-radius: var(--radius-card);
76729
- box-shadow: var(--shadow-elev);
76730
- }
76731
- :where(.theme-scope) .media-rounded {
76732
- border-radius: var(--radius-card);
76733
- }
77046
+ :where(.theme-scope) .card-surface {
77047
+ background: rgb(var(--tb-surface));
77048
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
77049
+ border: 1px solid rgb(var(--tb-border));
77050
+ border-radius: var(--radius-card);
77051
+ box-shadow: var(--shadow-elev);
77052
+ }
77053
+ :where(.theme-scope) .media-rounded {
77054
+ border-radius: var(--radius-card);
77055
+ }
76734
77056
 
76735
- :where(.theme-scope) .is-placeholder::after {
76736
- content: "Placeholder";
76737
- position: absolute;
76738
- top: 0.5rem;
76739
- left: 0.5rem;
76740
- font-size: 11px;
76741
- background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
76742
- color: rgb(var(--tb-text));
76743
- padding: 0.15rem 0.35rem;
76744
- border-radius: 4px;
76745
- opacity: 0.85;
76746
- }
77057
+ :where(.theme-scope) .is-placeholder::after {
77058
+ content: 'Placeholder';
77059
+ position: absolute;
77060
+ top: 0.5rem;
77061
+ left: 0.5rem;
77062
+ font-size: 11px;
77063
+ background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
77064
+ color: rgb(var(--tb-text));
77065
+ padding: 0.15rem 0.35rem;
77066
+ border-radius: 4px;
77067
+ opacity: 0.85;
77068
+ }
76747
77069
 
76748
- /* Status badges - theme-aware styling for capacity indicators */
76749
- :where(.theme-scope) .badge-status {
76750
- display: inline-flex;
76751
- align-items: center;
76752
- padding: 0.125rem 0.625rem;
76753
- border-radius: 9999px;
76754
- font-size: 0.75rem;
76755
- font-weight: 500;
76756
- line-height: 1.25rem;
76757
- }
77070
+ /* Status badges - theme-aware styling for capacity indicators */
77071
+ :where(.theme-scope) .badge-status {
77072
+ display: inline-flex;
77073
+ align-items: center;
77074
+ padding: 0.125rem 0.625rem;
77075
+ border-radius: 9999px;
77076
+ font-size: 0.75rem;
77077
+ font-weight: 500;
77078
+ line-height: 1.25rem;
77079
+ }
76758
77080
 
76759
- /* All badges use a subtle theme-aware style by default */
76760
- :where(.theme-scope) .badge-status-available {
76761
- background-color: rgba(var(--tb-secondary), 0.15);
76762
- color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
76763
- }
77081
+ /* All badges use a subtle theme-aware style by default */
77082
+ :where(.theme-scope) .badge-status-available {
77083
+ background-color: rgba(var(--tb-secondary), 0.15);
77084
+ color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
77085
+ }
76764
77086
 
76765
- :where(.theme-scope) .badge-status-low {
76766
- background-color: rgba(var(--tb-accent), 0.15);
76767
- color: rgb(var(--tb-accent-700, var(--tb-accent)));
76768
- }
77087
+ :where(.theme-scope) .badge-status-low {
77088
+ background-color: rgba(var(--tb-accent), 0.15);
77089
+ color: rgb(var(--tb-accent-700, var(--tb-accent)));
77090
+ }
76769
77091
 
76770
- :where(.theme-scope) .badge-status-sold-out {
76771
- background-color: rgba(var(--tb-text), 0.1);
76772
- color: rgb(var(--tb-mutedText));
76773
- }
77092
+ :where(.theme-scope) .badge-status-sold-out {
77093
+ background-color: rgba(var(--tb-text), 0.1);
77094
+ color: rgb(var(--tb-mutedText));
77095
+ }
76774
77096
 
76775
- /* Event list empty state - theme-aware */
76776
- :where(.theme-scope) .event-list-empty {
76777
- background-color: rgb(var(--tb-surface));
76778
- color: rgb(var(--tb-onSurface, var(--tb-text)));
76779
- border-color: rgb(var(--tb-border));
76780
- }
77097
+ /* Event list empty state - theme-aware */
77098
+ :where(.theme-scope) .event-list-empty {
77099
+ background-color: rgb(var(--tb-surface));
77100
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
77101
+ border-color: rgb(var(--tb-border));
77102
+ }
76781
77103
  } /* end @layer rb-theme */
76782
77104
 
76783
77105
  @keyframes accordion-down {
@@ -86000,7 +86322,7 @@ var SimpleCache = class {
86000
86322
  };
86001
86323
 
86002
86324
  // src/version.ts
86003
- var SDK_VERSION = "0.77.0";
86325
+ var SDK_VERSION = "0.77.1";
86004
86326
 
86005
86327
  // src/client/error.ts
86006
86328
  var RiverbankApiError = class _RiverbankApiError extends Error {