@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
@@ -371,6 +371,11 @@ function toLocationCoordinates(value) {
371
371
  };
372
372
  }
373
373
 
374
+ // ../core/src/assert-never.ts
375
+ function assertNever(value, message = "Unexpected variant") {
376
+ throw new Error(`${message}: ${String(value)}`);
377
+ }
378
+
374
379
  // ../core/src/planner.ts
375
380
  var systemPlanningClock = {
376
381
  now: () => Date.now()
@@ -1421,7 +1426,7 @@ var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
1421
1426
  var DATE_PATTERN = /^(?<year>[1-9]\d{3})-(?<month>\d{2})-(?<day>\d{2})$/;
1422
1427
  var TIME_PATTERN = /^(?<hours>[01]\d|2[0-3]):(?<minutes>[0-5]\d)$/;
1423
1428
  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)$/;
1424
- function assertNever(value) {
1429
+ function assertNever2(value) {
1425
1430
  throw new Error(`Unhandled field validation variant: ${JSON.stringify(value)}`);
1426
1431
  }
1427
1432
  function validationContext(options = {}) {
@@ -1482,7 +1487,7 @@ function fieldIssueToMessage(issue2) {
1482
1487
  case "invalidReference":
1483
1488
  return `${issue2.label} must reference a valid item`;
1484
1489
  default:
1485
- return assertNever(issue2);
1490
+ return assertNever2(issue2);
1486
1491
  }
1487
1492
  }
1488
1493
  function pluralize(label, count) {
@@ -1597,7 +1602,7 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
1597
1602
  case "entryPicker":
1598
1603
  return makePlan("passthrough", "unknown", field, path, false, []);
1599
1604
  default:
1600
- return assertNever(field);
1605
+ return assertNever2(field);
1601
1606
  }
1602
1607
  }
1603
1608
  function deriveFieldValidationPlans(fields3, parentPath = []) {
@@ -1670,7 +1675,7 @@ function resolveSelectConstraintSource(field) {
1670
1675
  case "sdk":
1671
1676
  return { kind: "runtime", source: source.kind };
1672
1677
  default:
1673
- return assertNever(source);
1678
+ return assertNever2(source);
1674
1679
  }
1675
1680
  }
1676
1681
  function normalizeStoredContentValues(plans, content, options = {}) {
@@ -1705,7 +1710,7 @@ function normalizeStoredFieldValueWithContext(plan, value, ctx) {
1705
1710
  case "passthrough":
1706
1711
  return normalizeFieldValue(plan, value, ctx);
1707
1712
  default:
1708
- return assertNever(plan);
1713
+ return assertNever2(plan);
1709
1714
  }
1710
1715
  }
1711
1716
  function normalizeStoredObjectChildren(children, value, ctx) {
@@ -1756,7 +1761,7 @@ function normalizeFieldValue(plan, value, ctx) {
1756
1761
  case "passthrough":
1757
1762
  return value;
1758
1763
  default:
1759
- return assertNever(plan);
1764
+ return assertNever2(plan);
1760
1765
  }
1761
1766
  }
1762
1767
  function normalizeObjectChildren(children, value, ctx) {
@@ -1817,7 +1822,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
1817
1822
  case "passthrough":
1818
1823
  return [];
1819
1824
  default:
1820
- return assertNever(plan);
1825
+ return assertNever2(plan);
1821
1826
  }
1822
1827
  }
1823
1828
  function shouldRequireValue(plan, value, ctx) {
@@ -1848,15 +1853,15 @@ function validateStringConstraint(plan, constraint, value) {
1848
1853
  case "maxLength":
1849
1854
  return value.length > constraint.maximum ? [issue(plan, "tooLong", { maximum: constraint.maximum })] : [];
1850
1855
  case "emailFormat":
1851
- return z4.email().safeParse(value).success ? [] : [issue(plan, "invalidEmail")];
1856
+ return isCanonicalEmailValue(value) ? [] : [issue(plan, "invalidEmail")];
1852
1857
  case "phoneFormat":
1853
- return TEL_RE.test(value) ? [] : [issue(plan, "invalidPhone")];
1858
+ return isCanonicalPhoneValue(value) ? [] : [issue(plan, "invalidPhone")];
1854
1859
  case "patternFormat": {
1855
1860
  const re = compilePattern(constraint.pattern);
1856
1861
  return re && !re.test(value) ? [issue(plan, "invalidPattern")] : [];
1857
1862
  }
1858
1863
  case "urlFormat":
1859
- return isValidUrl(value, constraint.allowRelative) ? [] : [issue(plan, "invalidUrl")];
1864
+ return isCanonicalUrlValue(value, { allowRelative: constraint.allowRelative }) ? [] : [issue(plan, "invalidUrl")];
1860
1865
  case "dateFormat":
1861
1866
  return isValidDateString(value) ? [] : [issue(plan, "invalidDate")];
1862
1867
  case "timeFormat":
@@ -1866,7 +1871,7 @@ function validateStringConstraint(plan, constraint, value) {
1866
1871
  case "slugFormat":
1867
1872
  return SLUG_PATTERN.test(value) ? [] : [issue(plan, "invalidSlug")];
1868
1873
  default:
1869
- return assertNever(constraint);
1874
+ return assertNever2(constraint);
1870
1875
  }
1871
1876
  }
1872
1877
  function validateNumberPlan(plan, value) {
@@ -1883,7 +1888,7 @@ function validateNumberConstraint(plan, constraint, value) {
1883
1888
  case "numberMax":
1884
1889
  return value > constraint.maximum ? [issue(plan, "tooLarge", { maximum: constraint.maximum })] : [];
1885
1890
  default:
1886
- return assertNever(constraint);
1891
+ return assertNever2(constraint);
1887
1892
  }
1888
1893
  }
1889
1894
  function validateSelectPlan(plan, value) {
@@ -1913,7 +1918,7 @@ function validateRepeaterPlan(plan, value, ctx) {
1913
1918
  })
1914
1919
  ] : [];
1915
1920
  default:
1916
- return assertNever(constraint);
1921
+ return assertNever2(constraint);
1917
1922
  }
1918
1923
  });
1919
1924
  return [...constraintIssues, ...value.flatMap((item, index) => validateRepeaterItem(plan, item, index, ctx))];
@@ -1975,7 +1980,7 @@ function rebaseFieldPlanPath(plan, fromPrefix, toPrefix) {
1975
1980
  path
1976
1981
  };
1977
1982
  default:
1978
- return assertNever(plan);
1983
+ return assertNever2(plan);
1979
1984
  }
1980
1985
  }
1981
1986
  function rebaseFieldPath(path, fromPrefix, toPrefix) {
@@ -2062,7 +2067,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
2062
2067
  zodCtx.addIssue({ ...issuePath, code: "custom", message });
2063
2068
  return;
2064
2069
  default:
2065
- assertNever(validationIssue);
2070
+ assertNever2(validationIssue);
2066
2071
  }
2067
2072
  }
2068
2073
  function relativeZodIssuePath(path, rootPath) {
@@ -2078,9 +2083,15 @@ function compilePattern(pattern) {
2078
2083
  function isValidNumber(value) {
2079
2084
  return typeof value === "number" && Number.isFinite(value);
2080
2085
  }
2081
- function isValidUrl(value, allowRelative) {
2086
+ function isCanonicalEmailValue(value) {
2087
+ return z4.email().safeParse(value).success;
2088
+ }
2089
+ function isCanonicalPhoneValue(value) {
2090
+ return TEL_RE.test(value);
2091
+ }
2092
+ function isCanonicalUrlValue(value, options = {}) {
2082
2093
  if (!value) return false;
2083
- if (allowRelative && value.startsWith("/")) return true;
2094
+ if (options.allowRelative === true && value.startsWith("/")) return true;
2084
2095
  try {
2085
2096
  const parsed = new URL(value);
2086
2097
  return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
@@ -6952,8 +6963,19 @@ var headingTypographyStyleSchema = typographyStyleSchema.extend({
6952
6963
  colorToken: themeColorTokenSchema.nullable().optional()
6953
6964
  });
6954
6965
  var proseLinkUnderlineStyleSchema = z22.enum(["solid", "dotted", "dashed"]);
6955
- var proseLinkUnderlineThicknessSchema = z22.enum(["auto", "fromFont", "thin", "medium", "thick"]);
6956
- var proseLinkUnderlineOffsetSchema = z22.enum(["auto", "tight", "normal", "loose"]);
6966
+ var proseLinkUnderlineThicknessSchema = z22.enum([
6967
+ "auto",
6968
+ "fromFont",
6969
+ "thin",
6970
+ "medium",
6971
+ "thick"
6972
+ ]);
6973
+ var proseLinkUnderlineOffsetSchema = z22.enum([
6974
+ "auto",
6975
+ "tight",
6976
+ "normal",
6977
+ "loose"
6978
+ ]);
6957
6979
  var proseLinkStyleSchema = z22.object({
6958
6980
  colorToken: themeColorTokenSchema.optional(),
6959
6981
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -6964,7 +6986,14 @@ var proseLinkStyleSchema = z22.object({
6964
6986
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
6965
6987
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
6966
6988
  });
6967
- var semanticSpacingSchema = z22.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
6989
+ var semanticSpacingSchema = z22.enum([
6990
+ "none",
6991
+ "compact",
6992
+ "cozy",
6993
+ "medium",
6994
+ "comfortable",
6995
+ "spacious"
6996
+ ]);
6968
6997
  var boxRoundedSchema = z22.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
6969
6998
  var boxBackgroundOverlaySchema = z22.object({
6970
6999
  type: z22.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -7108,9 +7137,17 @@ var inputStyle = z22.object({
7108
7137
  focus: z22.enum(["glow", "ring", "underline"]),
7109
7138
  label: z22.enum(["inside", "above"])
7110
7139
  });
7111
- var headerVariant = z22.enum(["classic", "centered", "transparent", "floating", "editorial"]);
7140
+ var headerVariant = z22.enum(["classic", "centered", "transparent", "floating"]);
7112
7141
  var headerPositioning = z22.enum(["static", "sticky", "fixed"]);
7113
- var headerNavStyle = z22.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
7142
+ var headerNavStyle = z22.enum([
7143
+ "minimal",
7144
+ "underline",
7145
+ "underline-grow",
7146
+ "capsule",
7147
+ "scale",
7148
+ "frosted",
7149
+ "solid"
7150
+ ]);
7114
7151
  var navFontWeight = z22.enum(["regular", "medium", "semibold", "bold"]);
7115
7152
  var headerMaxWidth = z22.enum(["container", "full"]);
7116
7153
  var headerContainerSchema = z22.object({
@@ -7158,8 +7195,22 @@ var dropdownStyleSchema = z22.object({
7158
7195
  textSize: z22.enum(["xs", "sm", "base", "lg"]).optional()
7159
7196
  // optional = no override (browser default)
7160
7197
  }).optional();
7161
- var headerCtaGapSchema = z22.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
7162
- var headerCtaTreatmentSchema = z22.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
7198
+ var headerCtaGapSchema = z22.enum([
7199
+ "none",
7200
+ "tight",
7201
+ "compact",
7202
+ "default",
7203
+ "relaxed",
7204
+ "spacious"
7205
+ ]);
7206
+ var headerCtaTreatmentSchema = z22.enum([
7207
+ "default",
7208
+ "primary",
7209
+ "secondary",
7210
+ "inverted",
7211
+ "outline",
7212
+ "ghost"
7213
+ ]);
7163
7214
  var navContainerSchema = z22.object({
7164
7215
  type: z22.enum(["none", "pill", "glass"]).default("none"),
7165
7216
  tint: z22.string().nullable().optional(),
@@ -7214,7 +7265,14 @@ var footerMaxWidth = z22.enum(["container", "full"]);
7214
7265
  var footerMode = z22.enum(["default", "blocks", "default+blocks", "none"]);
7215
7266
  var footerNavLayoutMode = z22.enum(["stack", "inline", "inline-wrap"]);
7216
7267
  var footerNavLayoutAlign = z22.enum(["start", "center", "end", "space-between"]);
7217
- var footerSpacing = z22.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
7268
+ var footerSpacing = z22.enum([
7269
+ "none",
7270
+ "tight",
7271
+ "compact",
7272
+ "default",
7273
+ "relaxed",
7274
+ "spacious"
7275
+ ]);
7218
7276
  var footerLogoPlacement = z22.enum(["left", "right", "above", "below"]);
7219
7277
  var footerLogoSize = z22.enum(["sm", "md", "lg", "xl"]);
7220
7278
  var footerLogoMaxHeight = z22.enum(["sm", "md", "lg", "xl"]);
@@ -7279,7 +7337,12 @@ var footerSchema = z22.object({
7279
7337
  logo: footerLogoSchema.optional(),
7280
7338
  bottomBar: footerBottomBarSchema.optional()
7281
7339
  });
7282
- var containerPaddingPresetSchema = z22.enum(["tight", "compact", "default", "relaxed"]);
7340
+ var containerPaddingPresetSchema = z22.enum([
7341
+ "tight",
7342
+ "compact",
7343
+ "default",
7344
+ "relaxed"
7345
+ ]);
7283
7346
  var layoutSchema = z22.object({
7284
7347
  containerPadding: z22.object({
7285
7348
  mobile: containerPaddingPresetSchema.optional(),
@@ -7287,8 +7350,24 @@ var layoutSchema = z22.object({
7287
7350
  desktop: containerPaddingPresetSchema.optional()
7288
7351
  }).optional()
7289
7352
  }).optional();
7290
- var heroTypographySizeSchema = z22.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
7291
- var heroTypographyLineHeightSchema = z22.enum(["tight", "snug", "normal", "relaxed"]);
7353
+ var heroTypographySizeSchema = z22.enum([
7354
+ "sm",
7355
+ "base",
7356
+ "lg",
7357
+ "xl",
7358
+ "2xl",
7359
+ "3xl",
7360
+ "4xl",
7361
+ "5xl",
7362
+ "6xl",
7363
+ "editorial"
7364
+ ]);
7365
+ var heroTypographyLineHeightSchema = z22.enum([
7366
+ "tight",
7367
+ "snug",
7368
+ "normal",
7369
+ "relaxed"
7370
+ ]);
7292
7371
  var heroResponsiveTypographySchema = z22.object({
7293
7372
  headlineSize: heroTypographySizeSchema.optional(),
7294
7373
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -7842,16 +7921,6 @@ var headerLayoutCatalog = [
7842
7921
  maxRecommendedNavItems: 5,
7843
7922
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
7844
7923
  },
7845
- {
7846
- id: asHeaderLayoutId("editorial"),
7847
- label: "Editorial",
7848
- description: "A composed, magazine-like stacked header treatment.",
7849
- structure: "editorial-stack",
7850
- variant: "editorial",
7851
- defaultPositioning: "static",
7852
- shrinkOnScroll: false,
7853
- maxRecommendedNavItems: 6
7854
- },
7855
7924
  {
7856
7925
  id: asHeaderLayoutId("floating"),
7857
7926
  label: "Floating",
@@ -7872,17 +7941,19 @@ var headerStyleCatalog = [
7872
7941
  id: asHeaderStyleId("minimal"),
7873
7942
  label: "Minimal",
7874
7943
  description: "Quiet surface with simple color-change navigation.",
7875
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
7944
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
7876
7945
  navInteraction: "color-change",
7877
- surface: "neutral"
7946
+ surface: "neutral",
7947
+ navTypography: "plain"
7878
7948
  },
7879
7949
  {
7880
7950
  id: asHeaderStyleId("fine-line"),
7881
7951
  label: "Fine Line",
7882
7952
  description: "Light surface with a crisp lower rule and underline hover.",
7883
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
7953
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
7884
7954
  navInteraction: "underline-grow",
7885
- surface: "bordered"
7955
+ surface: "bordered",
7956
+ navTypography: "plain"
7886
7957
  },
7887
7958
  {
7888
7959
  id: asHeaderStyleId("soft-bar"),
@@ -7890,7 +7961,8 @@ var headerStyleCatalog = [
7890
7961
  description: "Soft tinted surface with gentle pill hover states.",
7891
7962
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
7892
7963
  navInteraction: "pill-background",
7893
- surface: "soft"
7964
+ surface: "soft",
7965
+ navTypography: "plain"
7894
7966
  },
7895
7967
  {
7896
7968
  id: asHeaderStyleId("pill-nav"),
@@ -7898,23 +7970,26 @@ var headerStyleCatalog = [
7898
7970
  description: "A calm pill navigation rail over a neutral header.",
7899
7971
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
7900
7972
  navInteraction: "pill-background",
7901
- surface: "soft"
7973
+ surface: "soft",
7974
+ navTypography: "plain"
7902
7975
  },
7903
7976
  {
7904
7977
  id: asHeaderStyleId("brand-bar"),
7905
7978
  label: "Brand Bar",
7906
7979
  description: "Solid brand surface with high-contrast navigation.",
7907
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
7980
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
7908
7981
  navInteraction: "color-change",
7909
- surface: "brand-solid"
7982
+ surface: "brand-solid",
7983
+ navTypography: "brand-caps"
7910
7984
  },
7911
7985
  {
7912
7986
  id: asHeaderStyleId("brand-underline"),
7913
7987
  label: "Brand Underline",
7914
7988
  description: "Brand surface with underline-grow navigation.",
7915
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
7989
+ supportedLayoutIds: supportedLayouts(["classic"]),
7916
7990
  navInteraction: "underline-grow",
7917
- surface: "brand-solid"
7991
+ surface: "brand-solid",
7992
+ navTypography: "brand-caps"
7918
7993
  },
7919
7994
  {
7920
7995
  id: asHeaderStyleId("brand-pill"),
@@ -7922,41 +7997,44 @@ var headerStyleCatalog = [
7922
7997
  description: "Solid brand surface with rounded active and hover states.",
7923
7998
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
7924
7999
  navInteraction: "pill-background",
7925
- surface: "brand-solid"
8000
+ surface: "brand-solid",
8001
+ navTypography: "brand-caps"
7926
8002
  },
7927
8003
  {
7928
- id: asHeaderStyleId("editorial-line"),
7929
- label: "Editorial Line",
8004
+ id: asHeaderStyleId("serif-line"),
8005
+ label: "Serif Line",
7930
8006
  description: "Typographic logo treatment with understated underline navigation.",
7931
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
8007
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
7932
8008
  navInteraction: "underline-grow",
7933
- surface: "bordered"
8009
+ surface: "bordered",
8010
+ navTypography: "heading"
7934
8011
  },
7935
8012
  {
7936
8013
  id: asHeaderStyleId("flat-tabs"),
7937
8014
  label: "Flat Tabs",
7938
8015
  description: "Flat block hover and active states with a Swiss utility feel.",
7939
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
8016
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
7940
8017
  navInteraction: "flat-block",
7941
- surface: "bordered"
8018
+ surface: "bordered",
8019
+ navTypography: "quiet-caps"
7942
8020
  },
7943
8021
  {
7944
8022
  id: asHeaderStyleId("glass"),
7945
8023
  label: "Glass",
7946
- description: "Floating translucent chrome with frosted navigation backing.",
7947
- supportedLayoutIds: supportedLayouts(["floating"]),
8024
+ description: "Translucent chrome with frosted navigation backing.",
8025
+ supportedLayoutIds: supportedLayouts(["classic", "floating"]),
7948
8026
  navInteraction: "glass-backed",
7949
8027
  surface: "floating",
7950
- requiresFloatingLayout: true
8028
+ navTypography: "plain"
7951
8029
  },
7952
8030
  {
7953
8031
  id: asHeaderStyleId("minimal-surface"),
7954
- label: "Minimal Surface",
7955
- description: "Floating chrome with a restrained translucent surface.",
8032
+ label: "Clear Split",
8033
+ description: "Floating logo with transparent navigation and no shared shell.",
7956
8034
  supportedLayoutIds: supportedLayouts(["floating"]),
7957
8035
  navInteraction: "color-change",
7958
8036
  surface: "floating",
7959
- requiresFloatingLayout: true
8037
+ navTypography: "plain"
7960
8038
  },
7961
8039
  {
7962
8040
  id: asHeaderStyleId("soft-shell"),
@@ -7965,7 +8043,25 @@ var headerStyleCatalog = [
7965
8043
  supportedLayoutIds: supportedLayouts(["floating"]),
7966
8044
  navInteraction: "pill-background",
7967
8045
  surface: "floating",
7968
- requiresFloatingLayout: true
8046
+ navTypography: "plain"
8047
+ },
8048
+ {
8049
+ id: asHeaderStyleId("split-glass"),
8050
+ label: "Split Glass",
8051
+ description: "Logo floats independently while the navigation sits in a glass rail.",
8052
+ supportedLayoutIds: supportedLayouts(["floating"]),
8053
+ navInteraction: "glass-backed",
8054
+ surface: "floating",
8055
+ navTypography: "quiet-caps"
8056
+ },
8057
+ {
8058
+ id: asHeaderStyleId("split-pill"),
8059
+ label: "Split Pill",
8060
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
8061
+ supportedLayoutIds: supportedLayouts(["floating"]),
8062
+ navInteraction: "pill-background",
8063
+ surface: "floating",
8064
+ navTypography: "heading"
7969
8065
  }
7970
8066
  ];
7971
8067
  var headerLayoutsById = new Map(
@@ -7979,13 +8075,14 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
7979
8075
  asHeaderLayoutId("classic"),
7980
8076
  headerStyleRepairChain([
7981
8077
  "minimal",
8078
+ "glass",
7982
8079
  "fine-line",
7983
8080
  "soft-bar",
7984
8081
  "pill-nav",
7985
8082
  "brand-bar",
7986
8083
  "brand-underline",
7987
8084
  "brand-pill",
7988
- "editorial-line",
8085
+ "serif-line",
7989
8086
  "flat-tabs"
7990
8087
  ])
7991
8088
  ],
@@ -7998,19 +8095,7 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
7998
8095
  "pill-nav",
7999
8096
  "brand-bar",
8000
8097
  "brand-pill",
8001
- "editorial-line",
8002
- "flat-tabs"
8003
- ])
8004
- ],
8005
- [
8006
- asHeaderLayoutId("editorial"),
8007
- headerStyleRepairChain([
8008
- "minimal",
8009
- "fine-line",
8010
- "soft-bar",
8011
- "brand-bar",
8012
- "brand-underline",
8013
- "editorial-line",
8098
+ "serif-line",
8014
8099
  "flat-tabs"
8015
8100
  ])
8016
8101
  ],
@@ -8019,6 +8104,8 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
8019
8104
  headerStyleRepairChain([
8020
8105
  "glass",
8021
8106
  "minimal-surface",
8107
+ "split-glass",
8108
+ "split-pill",
8022
8109
  "soft-shell",
8023
8110
  "brand-pill"
8024
8111
  ])
@@ -8027,20 +8114,63 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
8027
8114
  function headerStyleRepairChain(values) {
8028
8115
  return values.map(asHeaderStyleId);
8029
8116
  }
8030
- var headerStyleRepairOrder = /* @__PURE__ */ new Map([
8031
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
8032
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
8033
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
8034
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
8035
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
8036
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
8037
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
8038
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
8039
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
8040
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
8041
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
8042
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
8043
- ]);
8117
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
8118
+ [
8119
+ [
8120
+ asHeaderStyleId("brand-bar"),
8121
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
8122
+ ],
8123
+ [
8124
+ asHeaderStyleId("brand-underline"),
8125
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
8126
+ ],
8127
+ [
8128
+ asHeaderStyleId("brand-pill"),
8129
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
8130
+ ],
8131
+ [
8132
+ asHeaderStyleId("pill-nav"),
8133
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
8134
+ ],
8135
+ [
8136
+ asHeaderStyleId("flat-tabs"),
8137
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
8138
+ ],
8139
+ [
8140
+ asHeaderStyleId("serif-line"),
8141
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
8142
+ ],
8143
+ [
8144
+ asHeaderStyleId("glass"),
8145
+ headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
8146
+ ],
8147
+ [
8148
+ asHeaderStyleId("soft-shell"),
8149
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
8150
+ ],
8151
+ [
8152
+ asHeaderStyleId("minimal-surface"),
8153
+ headerStyleRepairChain(["minimal-surface", "minimal"])
8154
+ ],
8155
+ [
8156
+ asHeaderStyleId("split-glass"),
8157
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
8158
+ ],
8159
+ [
8160
+ asHeaderStyleId("split-pill"),
8161
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
8162
+ ],
8163
+ [
8164
+ asHeaderStyleId("fine-line"),
8165
+ headerStyleRepairChain(["fine-line", "minimal"])
8166
+ ],
8167
+ [
8168
+ asHeaderStyleId("soft-bar"),
8169
+ headerStyleRepairChain(["soft-bar", "minimal"])
8170
+ ],
8171
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
8172
+ ]
8173
+ );
8044
8174
  var legacyHeaderLookAliases = [
8045
8175
  {
8046
8176
  lookId: asHeaderLookId("clean-base"),
@@ -8057,10 +8187,10 @@ var legacyHeaderLookAliases = [
8057
8187
  }
8058
8188
  },
8059
8189
  {
8060
- lookId: asHeaderLookId("editorial-line"),
8190
+ lookId: asHeaderLookId("serif-line"),
8061
8191
  selection: {
8062
- layoutId: asHeaderLayoutId("editorial"),
8063
- styleId: asHeaderStyleId("editorial-line")
8192
+ layoutId: asHeaderLayoutId("centered"),
8193
+ styleId: asHeaderStyleId("serif-line")
8064
8194
  }
8065
8195
  },
8066
8196
  {
@@ -8099,9 +8229,7 @@ var legacyHeaderLookAliases = [
8099
8229
  }
8100
8230
  }
8101
8231
  ];
8102
- var legacyHeaderLookAliasesById = new Map(
8103
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
8104
- );
8232
+ var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
8105
8233
  function getHeaderStyle(id) {
8106
8234
  return headerStylesById.get(id) ?? null;
8107
8235
  }
@@ -8119,10 +8247,12 @@ function resolveLegacyHeaderLookAlias(lookId) {
8119
8247
  return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
8120
8248
  }
8121
8249
  function getCompatibleHeaderStyleIds(layoutId) {
8122
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
8123
- const style = getHeaderStyleOrThrow(styleId);
8124
- return isHeaderStyleCompatibleWithLayout(style, layoutId);
8125
- });
8250
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
8251
+ (styleId) => {
8252
+ const style = getHeaderStyleOrThrow(styleId);
8253
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
8254
+ }
8255
+ );
8126
8256
  }
8127
8257
  function solidBrandHeader(theme) {
8128
8258
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
@@ -8153,8 +8283,14 @@ function solidBrandHeader(theme) {
8153
8283
  borderRadius: "none",
8154
8284
  effects: {
8155
8285
  hover: [
8156
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
8157
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
8286
+ {
8287
+ effectId: "text-color-change",
8288
+ options: { hoverColorToken: "secondary" }
8289
+ },
8290
+ {
8291
+ effectId: "nav-underline",
8292
+ options: { style: "grow", colorToken: "secondary" }
8293
+ }
8158
8294
  ]
8159
8295
  }
8160
8296
  },
@@ -8210,10 +8346,10 @@ function cleanBaseHeader(theme) {
8210
8346
  ctaGap: "default"
8211
8347
  };
8212
8348
  }
8213
- function editorialLineHeader(theme) {
8349
+ function serifLineHeader(theme) {
8214
8350
  return {
8215
8351
  ...baseHeader(theme),
8216
- variant: "editorial",
8352
+ variant: "centered",
8217
8353
  positioning: "sticky",
8218
8354
  shrinkOnScroll: false,
8219
8355
  background: {
@@ -8382,27 +8518,27 @@ var headerLookCatalog = [
8382
8518
  compile: solidBrandHeader
8383
8519
  },
8384
8520
  {
8385
- id: asHeaderLookId("editorial-line"),
8386
- label: "Editorial line",
8387
- visualTreatment: "light-editorial",
8521
+ id: asHeaderLookId("serif-line"),
8522
+ label: "Serif line",
8523
+ visualTreatment: "light-serif",
8388
8524
  layoutBehavior: "sticky",
8389
8525
  configuration: {
8390
- structure: "editorial-stack",
8391
- treatment: "light-editorial",
8526
+ structure: "centered-stack",
8527
+ treatment: "light-serif",
8392
8528
  behavior: "sticky"
8393
8529
  },
8394
8530
  openingRequirement: "none",
8395
8531
  maxRecommendedNavItems: 6,
8396
- compile: editorialLineHeader
8532
+ compile: serifLineHeader
8397
8533
  },
8398
8534
  {
8399
8535
  id: asHeaderLookId("centered-calm"),
8400
8536
  label: "Centered calm",
8401
- visualTreatment: "light-editorial",
8537
+ visualTreatment: "light-serif",
8402
8538
  layoutBehavior: "normal-flow",
8403
8539
  configuration: {
8404
8540
  structure: "centered-stack",
8405
- treatment: "light-editorial",
8541
+ treatment: "light-serif",
8406
8542
  behavior: "normal-flow"
8407
8543
  },
8408
8544
  openingRequirement: "none",
@@ -8948,12 +9084,16 @@ var expressiveUnderlineInputs = {
8948
9084
  }
8949
9085
  };
8950
9086
  function uniqueContentFrameKinds() {
8951
- const kinds = [...new Set(
8952
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
8953
- )];
9087
+ const kinds = [
9088
+ ...new Set(
9089
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
9090
+ )
9091
+ ];
8954
9092
  const firstKind = kinds[0];
8955
9093
  if (!firstKind) {
8956
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
9094
+ throw new Error(
9095
+ "Expected generated design option catalog to expose at least one content frame kind."
9096
+ );
8957
9097
  }
8958
9098
  return [firstKind, ...kinds.slice(1)];
8959
9099
  }
@@ -8963,7 +9103,9 @@ function defineCuratedSiteStyle(input) {
8963
9103
  const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
8964
9104
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
8965
9105
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
8966
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
9106
+ if (!typographyPresetChoices.some(
9107
+ (choice) => choice.id === defaultTypographyPresetId
9108
+ )) {
8967
9109
  throw new Error(
8968
9110
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
8969
9111
  );
@@ -8974,9 +9116,13 @@ function defineCuratedSiteStyle(input) {
8974
9116
  description: input.description,
8975
9117
  generationBrief: input.generationBrief,
8976
9118
  selectionKeywordRules: input.selectionKeywordRules ?? [],
8977
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
9119
+ siteCreatorSelection: input.siteCreatorSelection ?? {
9120
+ kind: "explicit_only"
9121
+ },
8978
9122
  template: {
8979
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
9123
+ id: asDesignSystemTemplateId(
9124
+ `template:${input.id.replace("site-style:", "")}`
9125
+ ),
8980
9126
  name: input.name,
8981
9127
  version: 1,
8982
9128
  tokenRecipes: input.tokenRecipes,
@@ -8994,13 +9140,17 @@ function defineCuratedSiteStyle(input) {
8994
9140
  } : inferredHeaderCuration.defaultHeaderSelection,
8995
9141
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
8996
9142
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
8997
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
8998
- layoutId: asHeaderLayoutId(selection.layoutId),
8999
- styleId: asHeaderStyleId(selection.styleId)
9000
- })),
9143
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
9144
+ (selection) => ({
9145
+ layoutId: asHeaderLayoutId(selection.layoutId),
9146
+ styleId: asHeaderStyleId(selection.styleId)
9147
+ })
9148
+ ),
9001
9149
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
9002
9150
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
9003
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
9151
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
9152
+ asFooterLookId
9153
+ ),
9004
9154
  buttonPersonalityChoices: input.buttonPersonalityChoices,
9005
9155
  paletteVariantChoices: input.paletteVariantChoices,
9006
9156
  typographyPresetChoices,
@@ -9019,7 +9169,7 @@ function headerLayoutChoice(id, note) {
9019
9169
  function headerStyleChoice(id, note) {
9020
9170
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
9021
9171
  }
9022
- function headerLayoutRecordKey(id) {
9172
+ function unbrandHeaderLayoutId(id) {
9023
9173
  return id;
9024
9174
  }
9025
9175
  function uniqueHeaderLayoutChoices(choices) {
@@ -9042,7 +9192,9 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
9042
9192
  return [first, ...choices.slice(1)];
9043
9193
  }
9044
9194
  function inferHeaderCurationFromLegacyLooks(lookIds) {
9045
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
9195
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
9196
+ (selection) => Boolean(selection)
9197
+ );
9046
9198
  const defaultHeaderSelection = selections[0] ?? {
9047
9199
  layoutId: asHeaderLayoutId("classic"),
9048
9200
  styleId: asHeaderStyleId("minimal")
@@ -9053,10 +9205,7 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
9053
9205
  const stylesByLayout = {};
9054
9206
  for (const layoutChoice of layoutChoices) {
9055
9207
  const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
9056
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
9057
- styleChoices,
9058
- layoutChoice.id
9059
- );
9208
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
9060
9209
  }
9061
9210
  return {
9062
9211
  defaultHeaderSelection,
@@ -9111,7 +9260,11 @@ var curatedSiteStyles = [
9111
9260
  motion: "subtle"
9112
9261
  },
9113
9262
  compositionBudget: quietBudget,
9114
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
9263
+ recommendedHeaderLookIds: [
9264
+ "centered-calm",
9265
+ "minimal-transparent",
9266
+ "clean-base"
9267
+ ],
9115
9268
  buttonPersonalityChoices: [
9116
9269
  buttonChoice("soft-pill"),
9117
9270
  buttonChoice("pebble"),
@@ -9140,7 +9293,11 @@ var curatedSiteStyles = [
9140
9293
  motion: "subtle"
9141
9294
  },
9142
9295
  compositionBudget: balancedBudget,
9143
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
9296
+ recommendedHeaderLookIds: [
9297
+ "practical-utility",
9298
+ "brand-solid",
9299
+ "clean-base"
9300
+ ],
9144
9301
  buttonPersonalityChoices: [
9145
9302
  buttonChoice("confident-chip"),
9146
9303
  buttonChoice("soft-pill"),
@@ -9167,7 +9324,11 @@ var curatedSiteStyles = [
9167
9324
  motion: "subtle"
9168
9325
  },
9169
9326
  compositionBudget: balancedBudget,
9170
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
9327
+ recommendedHeaderLookIds: [
9328
+ "serif-line",
9329
+ "minimal-transparent",
9330
+ "centered-calm"
9331
+ ],
9171
9332
  buttonPersonalityChoices: [
9172
9333
  buttonChoice("editorial-link"),
9173
9334
  buttonChoice("soft-pill"),
@@ -9195,7 +9356,11 @@ var curatedSiteStyles = [
9195
9356
  motion: "expressive"
9196
9357
  },
9197
9358
  compositionBudget: balancedBudget,
9198
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
9359
+ recommendedHeaderLookIds: [
9360
+ "brand-solid",
9361
+ "practical-utility",
9362
+ "clean-base"
9363
+ ],
9199
9364
  buttonPersonalityChoices: [
9200
9365
  buttonChoice("pebble"),
9201
9366
  buttonChoice("brushed-wash"),
@@ -9212,7 +9377,10 @@ var curatedSiteStyles = [
9212
9377
  name: "Quiet Luxury",
9213
9378
  description: "Minimal, confident, and refined for premium experiences and private services.",
9214
9379
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
9215
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
9380
+ siteCreatorSelection: {
9381
+ kind: "site_creator_keyword_heuristic",
9382
+ priority: 20
9383
+ },
9216
9384
  selectionKeywordRules: [
9217
9385
  { kind: "word", value: "luxury" },
9218
9386
  { kind: "word", value: "premium" },
@@ -9230,7 +9398,11 @@ var curatedSiteStyles = [
9230
9398
  motion: "none"
9231
9399
  },
9232
9400
  compositionBudget: quietBudget,
9233
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
9401
+ recommendedHeaderLookIds: [
9402
+ "minimal-transparent",
9403
+ "serif-line",
9404
+ "clean-base"
9405
+ ],
9234
9406
  buttonPersonalityChoices: [
9235
9407
  buttonChoice("editorial-link"),
9236
9408
  buttonChoice("confident-chip"),
@@ -9266,7 +9438,11 @@ var curatedSiteStyles = [
9266
9438
  motion: "none"
9267
9439
  },
9268
9440
  compositionBudget: quietBudget,
9269
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
9441
+ recommendedHeaderLookIds: [
9442
+ "practical-utility",
9443
+ "brand-solid",
9444
+ "clean-base"
9445
+ ],
9270
9446
  buttonPersonalityChoices: [
9271
9447
  buttonChoice("confident-chip"),
9272
9448
  buttonChoice("pebble"),
@@ -9293,7 +9469,11 @@ var curatedSiteStyles = [
9293
9469
  motion: "subtle"
9294
9470
  },
9295
9471
  compositionBudget: balancedBudget,
9296
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
9472
+ recommendedHeaderLookIds: [
9473
+ "centered-calm",
9474
+ "minimal-transparent",
9475
+ "clean-base"
9476
+ ],
9297
9477
  buttonPersonalityChoices: [
9298
9478
  buttonChoice("soft-pill"),
9299
9479
  buttonChoice("pebble"),
@@ -9310,7 +9490,10 @@ var curatedSiteStyles = [
9310
9490
  name: "Quiet Practice",
9311
9491
  description: "Grounded, calm, and practical for small appointment-first practices.",
9312
9492
  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.",
9313
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
9493
+ siteCreatorSelection: {
9494
+ kind: "site_creator_keyword_heuristic",
9495
+ priority: 30
9496
+ },
9314
9497
  selectionKeywordRules: [
9315
9498
  { kind: "substring", value: "massage" },
9316
9499
  { kind: "word", value: "bodywork" },
@@ -9331,7 +9514,11 @@ var curatedSiteStyles = [
9331
9514
  motion: "subtle"
9332
9515
  },
9333
9516
  compositionBudget: quietBudget,
9334
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
9517
+ recommendedHeaderLookIds: [
9518
+ "practical-utility",
9519
+ "clean-base",
9520
+ "centered-calm"
9521
+ ],
9335
9522
  buttonPersonalityChoices: [
9336
9523
  buttonChoice("pebble"),
9337
9524
  buttonChoice("soft-pill"),
@@ -9348,7 +9535,10 @@ var curatedSiteStyles = [
9348
9535
  name: "Personal Retreat Journal",
9349
9536
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
9350
9537
  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.",
9351
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
9538
+ siteCreatorSelection: {
9539
+ kind: "site_creator_keyword_heuristic",
9540
+ priority: 40
9541
+ },
9352
9542
  selectionKeywordRules: [
9353
9543
  { kind: "substring", value: "retreat" },
9354
9544
  { kind: "phrase", value: "solo practitioner" },
@@ -9368,7 +9558,11 @@ var curatedSiteStyles = [
9368
9558
  motion: "subtle"
9369
9559
  },
9370
9560
  compositionBudget: balancedBudget,
9371
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
9561
+ recommendedHeaderLookIds: [
9562
+ "serif-line",
9563
+ "centered-calm",
9564
+ "minimal-transparent"
9565
+ ],
9372
9566
  buttonPersonalityChoices: [
9373
9567
  buttonChoice("editorial-link"),
9374
9568
  buttonChoice("soft-pill"),
@@ -9385,7 +9579,10 @@ var curatedSiteStyles = [
9385
9579
  name: "Tactile Workshop",
9386
9580
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
9387
9581
  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.",
9388
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
9582
+ siteCreatorSelection: {
9583
+ kind: "site_creator_keyword_heuristic",
9584
+ priority: 50
9585
+ },
9389
9586
  selectionKeywordRules: [
9390
9587
  { kind: "substring", value: "ceramic" },
9391
9588
  { kind: "word", value: "pottery" },
@@ -9405,8 +9602,15 @@ var curatedSiteStyles = [
9405
9602
  motion: "subtle"
9406
9603
  },
9407
9604
  compositionBudget: balancedBudget,
9408
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
9409
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
9605
+ recommendedHeaderLookIds: [
9606
+ "brand-solid",
9607
+ "practical-utility",
9608
+ "clean-base"
9609
+ ],
9610
+ recommendedFooterLookIds: [
9611
+ "site-footer-brand-two-band",
9612
+ "footer-muted-grounding"
9613
+ ],
9410
9614
  buttonPersonalityChoices: [
9411
9615
  buttonChoice("pebble"),
9412
9616
  buttonChoice("confident-chip"),
@@ -9425,7 +9629,10 @@ var curatedSiteStyles = [
9425
9629
  name: "Soft Earth",
9426
9630
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
9427
9631
  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.",
9428
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
9632
+ siteCreatorSelection: {
9633
+ kind: "site_creator_keyword_heuristic",
9634
+ priority: 45
9635
+ },
9429
9636
  selectionKeywordRules: [
9430
9637
  { kind: "word", value: "meditation" },
9431
9638
  { kind: "word", value: "wellbeing" },
@@ -9501,8 +9708,15 @@ var curatedSiteStyles = [
9501
9708
  "faq-soft-earth-two-column",
9502
9709
  "contact-form-panel"
9503
9710
  ],
9504
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
9505
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
9711
+ recommendedHeaderLookIds: [
9712
+ "centered-calm",
9713
+ "minimal-transparent",
9714
+ "serif-line"
9715
+ ],
9716
+ recommendedFooterLookIds: [
9717
+ "footer-muted-grounding",
9718
+ "site-footer-brand-two-band"
9719
+ ],
9506
9720
  buttonPersonalityChoices: [
9507
9721
  buttonChoice("earth-pill"),
9508
9722
  buttonChoice("soft-pill"),
@@ -9521,7 +9735,10 @@ var curatedSiteStyles = [
9521
9735
  name: "Bold Launch",
9522
9736
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
9523
9737
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
9524
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
9738
+ siteCreatorSelection: {
9739
+ kind: "site_creator_keyword_heuristic",
9740
+ priority: 10
9741
+ },
9525
9742
  selectionKeywordRules: [
9526
9743
  { kind: "substring", value: "launch" },
9527
9744
  { kind: "substring", value: "campaign" },
@@ -9540,7 +9757,11 @@ var curatedSiteStyles = [
9540
9757
  motion: "expressive"
9541
9758
  },
9542
9759
  compositionBudget: expressiveBudget,
9543
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
9760
+ recommendedHeaderLookIds: [
9761
+ "transparent-overlay",
9762
+ "floating-glass",
9763
+ "brand-solid"
9764
+ ],
9544
9765
  buttonPersonalityChoices: [
9545
9766
  buttonChoice("ink-stamp"),
9546
9767
  buttonChoice("confident-chip"),
@@ -9591,8 +9812,15 @@ var curatedSiteStyles = [
9591
9812
  "testimonials-accent-quote-proof",
9592
9813
  "contact-form-brand-depth-card"
9593
9814
  ],
9594
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
9595
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
9815
+ recommendedHeaderLookIds: [
9816
+ "brand-solid",
9817
+ "transparent-overlay",
9818
+ "practical-utility"
9819
+ ],
9820
+ recommendedFooterLookIds: [
9821
+ "site-footer-brand-two-band",
9822
+ "footer-muted-grounding"
9823
+ ],
9596
9824
  buttonPersonalityChoices: [
9597
9825
  buttonChoice("showtime-pill"),
9598
9826
  buttonChoice("confident-chip"),
@@ -17357,10 +17585,7 @@ var headerRootClassTransform = {
17357
17585
  const navContainerType = header?.navContainer?.type ?? "none";
17358
17586
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
17359
17587
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
17360
- const classes = [
17361
- config.base,
17362
- backgroundClass
17363
- ];
17588
+ const classes = [config.base, backgroundClass];
17364
17589
  if (!hasContainedNav) {
17365
17590
  if (config.blur) classes.push(config.blur);
17366
17591
  if (config.blurSupport) classes.push(config.blurSupport);
@@ -17375,7 +17600,12 @@ var headerRootClassTransform = {
17375
17600
  if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
17376
17601
  classes.push(config.shrink);
17377
17602
  }
17378
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
17603
+ const VALID_VARIANTS = [
17604
+ "classic",
17605
+ "centered",
17606
+ "transparent",
17607
+ "floating"
17608
+ ];
17379
17609
  const variant = header?.variant;
17380
17610
  if (variant && VALID_VARIANTS.includes(variant)) {
17381
17611
  classes.push(`header-variant-${variant}`);
@@ -18027,15 +18257,21 @@ var mobileCta = ctaButton({
18027
18257
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
18028
18258
  {
18029
18259
  type: "div",
18030
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
18260
+ props: {
18261
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
18262
+ }
18031
18263
  },
18032
18264
  {
18033
18265
  type: "div",
18034
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
18266
+ props: {
18267
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
18268
+ }
18035
18269
  },
18036
18270
  {
18037
18271
  type: "div",
18038
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
18272
+ props: {
18273
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
18274
+ }
18039
18275
  }
18040
18276
  ]);
18041
18277
  var mobileToggleButton = {
@@ -18218,28 +18454,6 @@ var floatingLayout = inline(
18218
18454
  ],
18219
18455
  when("$root.theme.header.variant", { equals: "floating" })
18220
18456
  );
18221
- var editorialLayout = stack(
18222
- {
18223
- gap: "md",
18224
- align: "center",
18225
- className: bindProp("$root.theme.header.maxWidth", {
18226
- transforms: pipe(
18227
- tx("layout.maxWidthClass", {
18228
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
18229
- })
18230
- ),
18231
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
18232
- })
18233
- },
18234
- [
18235
- centeredLogoRow,
18236
- createNavRow(
18237
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
18238
- "center"
18239
- )
18240
- ],
18241
- when("$root.theme.header.variant", { equals: "editorial" })
18242
- );
18243
18457
  var headerLayout = headerSection(
18244
18458
  {
18245
18459
  background: bindProp("$root.theme.header", {
@@ -18253,10 +18467,7 @@ var headerLayout = headerSection(
18253
18467
  }),
18254
18468
  style: bindProp("$root.theme.header", {
18255
18469
  transforms: pipe(tx("layout.headerRootStyle")),
18256
- fallback: mergeStyles(
18257
- textColorStyle("text"),
18258
- borderColorStyle("border")
18259
- )
18470
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
18260
18471
  })
18261
18472
  },
18262
18473
  [
@@ -18265,7 +18476,6 @@ var headerLayout = headerSection(
18265
18476
  centeredLayout,
18266
18477
  transparentLayout,
18267
18478
  floatingLayout,
18268
- editorialLayout,
18269
18479
  mobileOverlay
18270
18480
  ],
18271
18481
  props({
@@ -26596,7 +26806,7 @@ var publicProductsResponseSchema = z53.object({
26596
26806
  });
26597
26807
 
26598
26808
  // ../blocks/src/system/runtime/api/creditProducts.ts
26599
- function assertNever3(value) {
26809
+ function assertNever4(value) {
26600
26810
  throw new Error(`Unhandled credit product case: ${String(value)}`);
26601
26811
  }
26602
26812
  function useCasesFromModules(modules) {
@@ -26629,7 +26839,7 @@ function getCreditProductCreditUnit(useCase) {
26629
26839
  perCreditSuffix: "credit"
26630
26840
  };
26631
26841
  default:
26632
- return assertNever3(useCase);
26842
+ return assertNever4(useCase);
26633
26843
  }
26634
26844
  }
26635
26845
  function deriveCreditProductLabels(products, options = {}) {
@@ -31810,7 +32020,7 @@ function resolveAccordionIconStyle(iconStyle, iconTreatment) {
31810
32020
  case "minimal-cross":
31811
32021
  return "plus-minus";
31812
32022
  default:
31813
- return assertNever4(iconTreatment.iconSet);
32023
+ return assertNever5(iconTreatment.iconSet);
31814
32024
  }
31815
32025
  }
31816
32026
  return iconStyle && iconStyle in ICON_CONFIG ? iconStyle : "chevron";
@@ -31829,7 +32039,7 @@ function accordionIconColorStyle(iconTreatment) {
31829
32039
  function resolveIconColorToken(token) {
31830
32040
  return token === "muted" ? "mutedText" : token;
31831
32041
  }
31832
- function assertNever4(value) {
32042
+ function assertNever5(value) {
31833
32043
  throw new Error(`Unhandled accordion icon set: ${String(value)}`);
31834
32044
  }
31835
32045
 
@@ -39334,6 +39544,9 @@ function transformSdkBlockToDefinition(sdkBlock) {
39334
39544
  }
39335
39545
 
39336
39546
  // ../blocks/src/customBlockRegistry.ts
39547
+ var defaultCustomBlockSourcePolicy = {
39548
+ kind: "canonical-db-fallback-sdk"
39549
+ };
39337
39550
  function isCustomBlockKind(blockKind) {
39338
39551
  return blockKind.startsWith("custom.");
39339
39552
  }
@@ -39360,39 +39573,86 @@ function toResolvedCustomBlock(manifest, source) {
39360
39573
  )
39361
39574
  };
39362
39575
  }
39576
+ function planCustomBlockRegistryResolution({
39577
+ sdkConfig,
39578
+ customBlocks = [],
39579
+ policy = defaultCustomBlockSourcePolicy
39580
+ }) {
39581
+ switch (policy.kind) {
39582
+ case "canonical-db-fallback-sdk": {
39583
+ const entriesByKind = /* @__PURE__ */ new Map();
39584
+ const conflicts = [];
39585
+ for (const customBlock of customBlocks) {
39586
+ entriesByKind.set(
39587
+ customBlock.manifest.id,
39588
+ toResolvedCustomBlock(customBlock.manifest, customBlock.source)
39589
+ );
39590
+ }
39591
+ for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
39592
+ const existing = entriesByKind.get(sdkBlock.id);
39593
+ if (existing) {
39594
+ conflicts.push({
39595
+ kind: "conflict",
39596
+ blockKind: existing.blockKind,
39597
+ winner: existing.source,
39598
+ loser: { kind: "sdk-config" },
39599
+ reason: "db-canonical-sdk-fallback"
39600
+ });
39601
+ continue;
39602
+ }
39603
+ entriesByKind.set(
39604
+ sdkBlock.id,
39605
+ toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
39606
+ );
39607
+ }
39608
+ return {
39609
+ policy,
39610
+ entries: Array.from(entriesByKind.values()),
39611
+ conflicts
39612
+ };
39613
+ }
39614
+ }
39615
+ }
39363
39616
  function createCustomBlockRegistry({
39364
39617
  sdkConfig,
39365
39618
  customBlocks = [],
39619
+ policy = defaultCustomBlockSourcePolicy,
39366
39620
  onConflict
39367
39621
  }) {
39368
- const entriesByKind = /* @__PURE__ */ new Map();
39369
- for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
39370
- entriesByKind.set(
39371
- sdkBlock.id,
39372
- toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
39373
- );
39374
- }
39375
- for (const customBlock of customBlocks) {
39376
- const existing = entriesByKind.get(customBlock.manifest.id);
39377
- if (existing) {
39378
- onConflict?.(
39379
- `Skipping DB custom block "${customBlock.manifest.id}" - conflicts with SDK config block`
39380
- );
39381
- continue;
39382
- }
39383
- entriesByKind.set(
39384
- customBlock.manifest.id,
39385
- toResolvedCustomBlock(customBlock.manifest, customBlock.source)
39622
+ const plan = planCustomBlockRegistryResolution({
39623
+ sdkConfig,
39624
+ customBlocks,
39625
+ policy
39626
+ });
39627
+ const entriesByKind = new Map(
39628
+ plan.entries.map((entry) => [entry.blockKind, entry])
39629
+ );
39630
+ for (const conflict of plan.conflicts) {
39631
+ onConflict?.(
39632
+ `Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`
39386
39633
  );
39387
39634
  }
39388
39635
  return {
39389
- entries: Array.from(entriesByKind.values()),
39636
+ entries: plan.entries,
39637
+ conflicts: plan.conflicts,
39390
39638
  findManifest: (blockKind) => {
39391
39639
  if (!isCustomBlockKind(blockKind)) return void 0;
39392
39640
  return entriesByKind.get(blockKind);
39393
39641
  }
39394
39642
  };
39395
39643
  }
39644
+ function sourceLabel(source) {
39645
+ switch (source.kind) {
39646
+ case "managed-database":
39647
+ return "DB";
39648
+ case "sdk-synced":
39649
+ return "SDK-synced DB";
39650
+ case "sdk-config":
39651
+ return "SDK config";
39652
+ default:
39653
+ return assertNever(source);
39654
+ }
39655
+ }
39396
39656
 
39397
39657
  // ../blocks/src/PageRenderer.tsx
39398
39658
  import { Fragment as Fragment6, jsx as jsx52 } from "react/jsx-runtime";
@@ -41493,9 +41753,9 @@ var containerResponsiveThemeCss = `/*
41493
41753
  }
41494
41754
 
41495
41755
  @layer rb-theme {
41496
- /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
41497
- :root {
41498
- /* --tb-primary: 17 24 39;
41756
+ /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
41757
+ :root {
41758
+ /* --tb-primary: 17 24 39;
41499
41759
  --tb-text: 17 24 39;
41500
41760
  --tb-muted: 107 114 128;
41501
41761
  --tb-bg: 255 255 255;
@@ -41517,159 +41777,164 @@ var containerResponsiveThemeCss = `/*
41517
41777
 
41518
41778
  --motion-duration: 180ms;
41519
41779
  --motion-ease: cubic-bezier(.2,.8,.2,1); */
41520
- }
41780
+ }
41521
41781
 
41522
- /* -------------------------------------------------------------------------- */
41523
- /* Shared: Modal */
41524
- /* -------------------------------------------------------------------------- */
41782
+ /* -------------------------------------------------------------------------- */
41783
+ /* Shared: Modal */
41784
+ /* -------------------------------------------------------------------------- */
41525
41785
 
41526
- :where(.theme-scope) .rb-modal-overlay {
41527
- position: fixed;
41528
- inset: 0;
41529
- z-index: var(--rb-modal-z-index, 20000);
41530
- display: grid;
41531
- place-items: center;
41532
- padding: 1rem;
41533
- /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
41534
- background-color: rgba(0, 0, 0, 0.6);
41535
- background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
41536
- }
41786
+ :where(.theme-scope) .rb-modal-overlay {
41787
+ position: fixed;
41788
+ inset: 0;
41789
+ z-index: var(--rb-modal-z-index, 20000);
41790
+ display: grid;
41791
+ place-items: center;
41792
+ padding: 1rem;
41793
+ /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
41794
+ background-color: rgba(0, 0, 0, 0.6);
41795
+ background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
41796
+ }
41537
41797
 
41538
- :where(.theme-scope) .rb-modal {
41539
- width: min(var(--rb-modal-max-width, 560px), 100%);
41540
- background: var(--rb-modal-bg, rgb(var(--tb-surface)));
41541
- border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
41542
- border-radius: var(--rb-modal-radius, var(--radius-card));
41543
- box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
41544
- }
41798
+ :where(.theme-scope) .rb-modal {
41799
+ width: min(var(--rb-modal-max-width, 560px), 100%);
41800
+ background: var(--rb-modal-bg, rgb(var(--tb-surface)));
41801
+ border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
41802
+ border-radius: var(--rb-modal-radius, var(--radius-card));
41803
+ box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
41804
+ }
41545
41805
 
41546
- :where(.theme-scope) .rb-modal__header {
41547
- display: flex;
41548
- align-items: center;
41549
- justify-content: space-between;
41550
- gap: 1rem;
41551
- padding: 1rem 1rem 0.75rem;
41552
- border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
41553
- }
41806
+ :where(.theme-scope) .rb-modal__header {
41807
+ display: flex;
41808
+ align-items: center;
41809
+ justify-content: space-between;
41810
+ gap: 1rem;
41811
+ padding: 1rem 1rem 0.75rem;
41812
+ border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
41813
+ }
41554
41814
 
41555
- :where(.theme-scope) .rb-modal__title {
41556
- margin: 0;
41557
- font-family: var(--font-heading);
41558
- font-size: 1.0625rem;
41559
- font-weight: 600;
41560
- color: rgb(var(--tb-text));
41561
- }
41815
+ :where(.theme-scope) .rb-modal__title {
41816
+ margin: 0;
41817
+ font-family: var(--font-heading);
41818
+ font-size: 1.0625rem;
41819
+ font-weight: 600;
41820
+ color: rgb(var(--tb-text));
41821
+ }
41562
41822
 
41563
- :where(.theme-scope) .rb-modal__close {
41564
- background: transparent;
41565
- border: none;
41566
- width: 2.25rem;
41567
- height: 2.25rem;
41568
- padding: 0;
41569
- line-height: 1;
41570
- color: rgb(var(--tb-mutedText));
41571
- cursor: pointer;
41572
- display: grid;
41573
- place-items: center;
41574
- border-radius: var(--radius-control);
41575
- }
41823
+ :where(.theme-scope) .rb-modal__close {
41824
+ background: transparent;
41825
+ border: none;
41826
+ width: 2.25rem;
41827
+ height: 2.25rem;
41828
+ padding: 0;
41829
+ line-height: 1;
41830
+ color: rgb(var(--tb-mutedText));
41831
+ cursor: pointer;
41832
+ display: grid;
41833
+ place-items: center;
41834
+ border-radius: var(--radius-control);
41835
+ }
41576
41836
 
41577
- :where(.theme-scope) .rb-modal__close:hover {
41578
- color: rgb(var(--tb-text));
41579
- background: rgba(var(--tb-border), 0.2);
41580
- }
41837
+ :where(.theme-scope) .rb-modal__close:hover {
41838
+ color: rgb(var(--tb-text));
41839
+ background: rgba(var(--tb-border), 0.2);
41840
+ }
41581
41841
 
41582
- :where(.theme-scope) .rb-modal__close:focus-visible {
41583
- outline: none;
41584
- box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
41585
- }
41842
+ :where(.theme-scope) .rb-modal__close:focus-visible {
41843
+ outline: none;
41844
+ box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
41845
+ }
41586
41846
 
41587
- :where(.theme-scope) .rb-modal__body {
41588
- padding: 0.875rem 1rem 1rem;
41589
- color: rgb(var(--tb-text));
41590
- font-size: 0.9375rem;
41591
- line-height: 1.45;
41592
- }
41847
+ :where(.theme-scope) .rb-modal__body {
41848
+ padding: 0.875rem 1rem 1rem;
41849
+ color: rgb(var(--tb-text));
41850
+ font-size: 0.9375rem;
41851
+ line-height: 1.45;
41852
+ }
41593
41853
 
41594
- /* -------------------------------------------------------------------------- */
41595
- /* Header: Mobile nav overlay transitions */
41596
- /* -------------------------------------------------------------------------- */
41854
+ /* -------------------------------------------------------------------------- */
41855
+ /* Header: Mobile nav overlay transitions */
41856
+ /* -------------------------------------------------------------------------- */
41597
41857
 
41598
- /* Keep the overlay in the DOM so we can transition opacity/transform.
41858
+ /* Keep the overlay in the DOM so we can transition opacity/transform.
41599
41859
  JS toggles \`aria-hidden\` + \`inert\` (via enhancer), and CSS uses pointer-events
41600
41860
  to prevent interaction while closed. */
41601
- .nav-mobile-overlay {
41602
- pointer-events: none;
41603
- /* Prevent transformed children (panel) from creating viewport scrollbars
41861
+ .nav-mobile-overlay {
41862
+ pointer-events: none;
41863
+ /* Prevent transformed children (panel) from creating viewport scrollbars
41604
41864
  during enter/exit transitions. */
41605
- overflow: hidden;
41606
- }
41607
-
41608
- .nav-mobile-overlay[aria-hidden="false"] {
41609
- pointer-events: auto;
41610
- }
41865
+ overflow: hidden;
41866
+ }
41611
41867
 
41612
- .nav-mobile-overlay .nav-mobile-backdrop {
41613
- opacity: 0;
41614
- transition: opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
41615
- }
41868
+ .nav-mobile-overlay[aria-hidden='false'] {
41869
+ pointer-events: auto;
41870
+ }
41616
41871
 
41617
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-backdrop {
41618
- opacity: 1;
41619
- }
41872
+ .nav-mobile-overlay .nav-mobile-backdrop {
41873
+ opacity: 0;
41874
+ transition: opacity var(--motion-duration, 180ms)
41875
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
41876
+ }
41620
41877
 
41621
- .nav-mobile-overlay .nav-mobile-panel {
41622
- opacity: 0;
41623
- transform: translate3d(12px, 0, 0);
41624
- overflow-x: hidden;
41625
- transition:
41626
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
41627
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
41628
- will-change: opacity, transform;
41629
- }
41878
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-backdrop {
41879
+ opacity: 1;
41880
+ }
41630
41881
 
41631
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-panel {
41632
- opacity: 1;
41633
- transform: translate3d(0, 0, 0);
41634
- }
41882
+ .nav-mobile-overlay .nav-mobile-panel {
41883
+ opacity: 0;
41884
+ transform: translate3d(12px, 0, 0);
41885
+ overflow-x: hidden;
41886
+ transition:
41887
+ opacity var(--motion-duration, 180ms)
41888
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
41889
+ transform var(--motion-duration, 180ms)
41890
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
41891
+ will-change: opacity, transform;
41892
+ }
41635
41893
 
41636
- /* -------------------------------------------------------------------------- */
41637
- /* Header: Mobile toggle hamburger -> X */
41638
- /* -------------------------------------------------------------------------- */
41894
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-panel {
41895
+ opacity: 1;
41896
+ transform: translate3d(0, 0, 0);
41897
+ }
41639
41898
 
41640
- .nav-mobile-toggle .nav-mobile-bar {
41641
- transform-origin: center;
41642
- transition:
41643
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
41644
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
41645
- will-change: transform, opacity;
41646
- }
41899
+ /* -------------------------------------------------------------------------- */
41900
+ /* Header: Mobile toggle hamburger -> X */
41901
+ /* -------------------------------------------------------------------------- */
41647
41902
 
41648
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-top {
41649
- transform: translateY(6px) rotate(45deg);
41650
- }
41903
+ .nav-mobile-toggle .nav-mobile-bar {
41904
+ transform-origin: center;
41905
+ transition:
41906
+ transform var(--motion-duration, 180ms)
41907
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
41908
+ opacity var(--motion-duration, 180ms)
41909
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
41910
+ will-change: transform, opacity;
41911
+ }
41651
41912
 
41652
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-middle {
41653
- opacity: 0;
41654
- }
41913
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-top {
41914
+ transform: translateY(6px) rotate(45deg);
41915
+ }
41655
41916
 
41656
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-bottom {
41657
- transform: translateY(-6px) rotate(-45deg);
41658
- }
41917
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-middle {
41918
+ opacity: 0;
41919
+ }
41659
41920
 
41660
- @media (prefers-reduced-motion: reduce) {
41661
- .nav-mobile-overlay .nav-mobile-backdrop,
41662
- .nav-mobile-overlay .nav-mobile-panel {
41663
- transition: none;
41664
- transform: none;
41921
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-bottom {
41922
+ transform: translateY(-6px) rotate(-45deg);
41665
41923
  }
41666
41924
 
41667
- .nav-mobile-toggle .nav-mobile-bar {
41668
- transition: none;
41925
+ @media (prefers-reduced-motion: reduce) {
41926
+ .nav-mobile-overlay .nav-mobile-backdrop,
41927
+ .nav-mobile-overlay .nav-mobile-panel {
41928
+ transition: none;
41929
+ transform: none;
41930
+ }
41931
+
41932
+ .nav-mobile-toggle .nav-mobile-bar {
41933
+ transition: none;
41934
+ }
41669
41935
  }
41670
- }
41671
41936
 
41672
- /*
41937
+ /*
41673
41938
  * Theme Scope Styles
41674
41939
  *
41675
41940
  * IMPORTANT: All :where(.theme-scope) selectors are wrapped in :where() to give them
@@ -41679,790 +41944,838 @@ var containerResponsiveThemeCss = `/*
41679
41944
  * Example: \`h4 { color: white; }\` will override \`:where(:where(.theme-scope)) h4\`
41680
41945
  */
41681
41946
 
41682
- :where(:where(.theme-scope)) {
41683
- font-family: var(--font-body);
41684
- letter-spacing: var(--ls-body);
41685
- line-height: var(--lh-body);
41686
- font-weight: var(--font-weight-body);
41687
-
41688
- & h1,
41689
- & h2,
41690
- & h3,
41691
- & h4,
41692
- & h5,
41693
- & h6 {
41694
- font-family: var(--font-heading);
41695
- /* Color is set by generateTypographyCss.ts with full cascade:
41947
+ :where(:where(.theme-scope)) {
41948
+ font-family: var(--font-body);
41949
+ letter-spacing: var(--ls-body);
41950
+ line-height: var(--lh-body);
41951
+ font-weight: var(--font-weight-body);
41952
+
41953
+ & h1,
41954
+ & h2,
41955
+ & h3,
41956
+ & h4,
41957
+ & h5,
41958
+ & h6 {
41959
+ font-family: var(--font-heading);
41960
+ /* Color is set by generateTypographyCss.ts with full cascade:
41696
41961
  --section-heading-color -> --section-text-color -> --hc-hN -> --hc-heading -> inherit */
41697
- font-weight: var(--font-weight-heading);
41698
- text-transform: var(--tt-heading);
41699
- font-variant-caps: var(--fv-heading);
41962
+ font-weight: var(--font-weight-heading);
41963
+ text-transform: var(--tt-heading);
41964
+ font-variant-caps: var(--fv-heading);
41965
+ }
41700
41966
  }
41701
- }
41702
41967
 
41703
- /* Heading typographic overrides (fallback to defaults when not provided) */
41704
- :where(:where(.theme-scope)) h1 {
41705
- letter-spacing: var(--ls-h1, var(--ls-heading));
41706
- line-height: var(--lh-h1, var(--lh-heading));
41707
- font-weight: var(--fw-h1, var(--font-weight-heading));
41708
- }
41709
- :where(:where(.theme-scope)) h2 {
41710
- letter-spacing: var(--ls-h2, var(--ls-heading));
41711
- line-height: var(--lh-h2, var(--lh-heading));
41712
- font-weight: var(--fw-h2, var(--font-weight-heading));
41713
- }
41714
- :where(:where(.theme-scope)) h3 {
41715
- letter-spacing: var(--ls-h3, var(--ls-heading));
41716
- line-height: var(--lh-h3, var(--lh-heading));
41717
- font-weight: var(--fw-h3, var(--font-weight-heading));
41718
- }
41719
- :where(:where(.theme-scope)) h4,
41720
- :where(:where(.theme-scope)) h5,
41721
- :where(:where(.theme-scope)) h6 {
41722
- letter-spacing: var(--ls-heading);
41723
- line-height: var(--lh-heading);
41724
- }
41725
- :where(:where(.theme-scope)) h4 {
41726
- font-weight: var(--fw-h4, var(--font-weight-heading));
41727
- }
41728
- :where(:where(.theme-scope)) h5 {
41729
- font-weight: var(--fw-h5, var(--font-weight-heading));
41730
- }
41731
- :where(:where(.theme-scope)) h6 {
41732
- font-weight: var(--fw-h6, var(--font-weight-heading));
41733
- }
41968
+ /* Heading typographic overrides (fallback to defaults when not provided) */
41969
+ :where(:where(.theme-scope)) h1 {
41970
+ letter-spacing: var(--ls-h1, var(--ls-heading));
41971
+ line-height: var(--lh-h1, var(--lh-heading));
41972
+ font-weight: var(--fw-h1, var(--font-weight-heading));
41973
+ }
41974
+ :where(:where(.theme-scope)) h2 {
41975
+ letter-spacing: var(--ls-h2, var(--ls-heading));
41976
+ line-height: var(--lh-h2, var(--lh-heading));
41977
+ font-weight: var(--fw-h2, var(--font-weight-heading));
41978
+ }
41979
+ :where(:where(.theme-scope)) h3 {
41980
+ letter-spacing: var(--ls-h3, var(--ls-heading));
41981
+ line-height: var(--lh-h3, var(--lh-heading));
41982
+ font-weight: var(--fw-h3, var(--font-weight-heading));
41983
+ }
41984
+ :where(:where(.theme-scope)) h4,
41985
+ :where(:where(.theme-scope)) h5,
41986
+ :where(:where(.theme-scope)) h6 {
41987
+ letter-spacing: var(--ls-heading);
41988
+ line-height: var(--lh-heading);
41989
+ }
41990
+ :where(:where(.theme-scope)) h4 {
41991
+ font-weight: var(--fw-h4, var(--font-weight-heading));
41992
+ }
41993
+ :where(:where(.theme-scope)) h5 {
41994
+ font-weight: var(--fw-h5, var(--font-weight-heading));
41995
+ }
41996
+ :where(:where(.theme-scope)) h6 {
41997
+ font-weight: var(--fw-h6, var(--font-weight-heading));
41998
+ }
41734
41999
 
41735
- /* Rich text element spacing based on theme rhythm */
41736
- :where(.theme-scope) .rb-prose h1 {
41737
- margin-top: calc(var(--rt-space-y) * 1.6);
41738
- margin-bottom: calc(var(--rt-space-y) * 0.8);
41739
- }
41740
- :where(.theme-scope) .rb-prose h2 {
41741
- margin-top: calc(var(--rt-space-y) * 1.4);
41742
- margin-bottom: calc(var(--rt-space-y) * 0.7);
41743
- }
41744
- :where(.theme-scope) .rb-prose h3 {
41745
- margin-top: calc(var(--rt-space-y) * 1.2);
41746
- margin-bottom: calc(var(--rt-space-y) * 0.6);
41747
- }
41748
- :where(.theme-scope) .rb-prose h4 {
41749
- margin-top: calc(var(--rt-space-y) * 1);
41750
- margin-bottom: calc(var(--rt-space-y) * 0.5);
41751
- }
41752
- :where(.theme-scope) .rb-prose h5 {
41753
- margin-top: calc(var(--rt-space-y) * 0.9);
41754
- margin-bottom: calc(var(--rt-space-y) * 0.45);
41755
- }
41756
- :where(.theme-scope) .rb-prose h6 {
41757
- margin-top: calc(var(--rt-space-y) * 0.8);
41758
- margin-bottom: calc(var(--rt-space-y) * 0.4);
41759
- }
41760
- :where(.theme-scope) .rb-prose p {
41761
- margin: var(--rt-space-y) 0;
41762
- }
41763
- :where(.theme-scope) .rb-prose img {
41764
- display: block;
41765
- max-width: 100%;
41766
- height: auto;
41767
- margin: calc(var(--rt-space-y) * 1) 0;
41768
- }
41769
- :where(.theme-scope) .rb-prose ul,
41770
- :where(.theme-scope) .rb-prose ol {
41771
- margin: var(--rt-space-y) 0;
41772
- padding-left: 1.25rem;
41773
- }
41774
- :where(.theme-scope) .rb-prose ul {
41775
- list-style-type: disc;
41776
- }
41777
- :where(.theme-scope) .rb-prose ol {
41778
- list-style-type: decimal;
41779
- }
41780
- :where(.theme-scope) .rb-prose ul ul {
41781
- list-style-type: circle;
41782
- }
41783
- :where(.theme-scope) .rb-prose ul ul ul {
41784
- list-style-type: square;
41785
- }
41786
- :where(.theme-scope) .rb-prose ol ol {
41787
- list-style-type: lower-alpha;
41788
- }
41789
- :where(.theme-scope) .rb-prose ol ol ol {
41790
- list-style-type: lower-roman;
41791
- }
41792
- :where(.theme-scope) .rb-prose blockquote {
41793
- margin: calc(var(--rt-space-y) * 1) 0;
41794
- padding-left: 1rem;
41795
- border-left: 3px solid rgb(var(--tb-border));
41796
- }
41797
- :where(.theme-scope) .rb-prose > :first-child {
41798
- margin-top: 0;
41799
- }
41800
- :where(.theme-scope) .rb-prose > :last-child {
41801
- margin-bottom: 0;
41802
- }
42000
+ /* Rich text element spacing based on theme rhythm */
42001
+ :where(.theme-scope) .rb-prose h1 {
42002
+ margin-top: calc(var(--rt-space-y) * 1.6);
42003
+ margin-bottom: calc(var(--rt-space-y) * 0.8);
42004
+ }
42005
+ :where(.theme-scope) .rb-prose h2 {
42006
+ margin-top: calc(var(--rt-space-y) * 1.4);
42007
+ margin-bottom: calc(var(--rt-space-y) * 0.7);
42008
+ }
42009
+ :where(.theme-scope) .rb-prose h3 {
42010
+ margin-top: calc(var(--rt-space-y) * 1.2);
42011
+ margin-bottom: calc(var(--rt-space-y) * 0.6);
42012
+ }
42013
+ :where(.theme-scope) .rb-prose h4 {
42014
+ margin-top: calc(var(--rt-space-y) * 1);
42015
+ margin-bottom: calc(var(--rt-space-y) * 0.5);
42016
+ }
42017
+ :where(.theme-scope) .rb-prose h5 {
42018
+ margin-top: calc(var(--rt-space-y) * 0.9);
42019
+ margin-bottom: calc(var(--rt-space-y) * 0.45);
42020
+ }
42021
+ :where(.theme-scope) .rb-prose h6 {
42022
+ margin-top: calc(var(--rt-space-y) * 0.8);
42023
+ margin-bottom: calc(var(--rt-space-y) * 0.4);
42024
+ }
42025
+ :where(.theme-scope) .rb-prose p {
42026
+ margin: var(--rt-space-y) 0;
42027
+ }
42028
+ :where(.theme-scope) .rb-prose img {
42029
+ display: block;
42030
+ max-width: 100%;
42031
+ height: auto;
42032
+ margin: calc(var(--rt-space-y) * 1) 0;
42033
+ }
42034
+ :where(.theme-scope) .rb-prose ul,
42035
+ :where(.theme-scope) .rb-prose ol {
42036
+ margin: var(--rt-space-y) 0;
42037
+ padding-left: 1.25rem;
42038
+ }
42039
+ :where(.theme-scope) .rb-prose ul {
42040
+ list-style-type: disc;
42041
+ }
42042
+ :where(.theme-scope) .rb-prose ol {
42043
+ list-style-type: decimal;
42044
+ }
42045
+ :where(.theme-scope) .rb-prose ul ul {
42046
+ list-style-type: circle;
42047
+ }
42048
+ :where(.theme-scope) .rb-prose ul ul ul {
42049
+ list-style-type: square;
42050
+ }
42051
+ :where(.theme-scope) .rb-prose ol ol {
42052
+ list-style-type: lower-alpha;
42053
+ }
42054
+ :where(.theme-scope) .rb-prose ol ol ol {
42055
+ list-style-type: lower-roman;
42056
+ }
42057
+ :where(.theme-scope) .rb-prose blockquote {
42058
+ margin: calc(var(--rt-space-y) * 1) 0;
42059
+ padding-left: 1rem;
42060
+ border-left: 3px solid rgb(var(--tb-border));
42061
+ }
42062
+ :where(.theme-scope) .rb-prose > :first-child {
42063
+ margin-top: 0;
42064
+ }
42065
+ :where(.theme-scope) .rb-prose > :last-child {
42066
+ margin-bottom: 0;
42067
+ }
41803
42068
 
41804
- /* Prose color overrides - use theme CSS variables instead of hardcoded colors
42069
+ /* Prose color overrides - use theme CSS variables instead of hardcoded colors
41805
42070
  * This makes prose elements automatically adapt to light/dark themes */
41806
- :where(.theme-scope) .rb-prose {
41807
- /* Body text inherits from parent, which should already have theme color */
41808
- color: inherit;
41809
- }
42071
+ :where(.theme-scope) .rb-prose {
42072
+ /* Body text inherits from parent, which should already have theme color */
42073
+ color: inherit;
42074
+ }
41810
42075
 
41811
- /* Prose size variants (theme-aware, CSS-only) */
41812
- :where(.theme-scope) {
41813
- /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
41814
- --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
41815
- --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
42076
+ /* Prose size variants (theme-aware, CSS-only) */
42077
+ :where(.theme-scope) {
42078
+ /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
42079
+ --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
42080
+ --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
41816
42081
 
41817
- --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
41818
- --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
42082
+ --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
42083
+ --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
41819
42084
 
41820
- /* Applied at >= 640px; below that, rb-prose-lg is typically used */
41821
- --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
41822
- --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
41823
- }
42085
+ /* Applied at >= 640px; below that, rb-prose-lg is typically used */
42086
+ --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
42087
+ --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
42088
+ }
41824
42089
 
41825
- :where(.theme-scope) .rb-prose-sm {
41826
- font-size: var(--rb-prose-sm-font-size);
41827
- line-height: var(--rb-prose-sm-line-height);
41828
- }
41829
- :where(.theme-scope) .rb-prose-lg {
41830
- font-size: var(--rb-prose-lg-font-size);
41831
- line-height: var(--rb-prose-lg-line-height);
41832
- }
41833
- @container rb-site (min-width: 640px) {
42090
+ :where(.theme-scope) .rb-prose-sm {
42091
+ font-size: var(--rb-prose-sm-font-size);
42092
+ line-height: var(--rb-prose-sm-line-height);
42093
+ }
42094
+ :where(.theme-scope) .rb-prose-lg {
42095
+ font-size: var(--rb-prose-lg-font-size);
42096
+ line-height: var(--rb-prose-lg-line-height);
42097
+ }
42098
+ @container rb-site (min-width: 640px) {
41834
42099
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
41835
42100
  :where(.theme-scope) .rb-prose-xl-sm {
41836
- font-size: var(--rb-prose-xl-sm-font-size);
41837
- line-height: var(--rb-prose-xl-sm-line-height);
41838
- }
42101
+ font-size: var(--rb-prose-xl-sm-font-size);
42102
+ line-height: var(--rb-prose-xl-sm-line-height);
42103
+ }
41839
42104
  }
41840
42105
  }
41841
42106
 
41842
- /* Neutral prose uses theme text color by default */
41843
- :where(.theme-scope) .rb-prose-neutral {
41844
- color: rgb(var(--tb-text));
41845
- }
42107
+ /* Neutral prose uses theme text color by default */
42108
+ :where(.theme-scope) .rb-prose-neutral {
42109
+ color: rgb(var(--tb-text));
42110
+ }
41846
42111
 
41847
- :where(.theme-scope) .rb-prose p,
41848
- :where(.theme-scope) .rb-prose li {
41849
- /* Body text uses inherited color (set by fragment via textColorStyle) */
41850
- color: inherit;
41851
- }
42112
+ :where(.theme-scope) .rb-prose p,
42113
+ :where(.theme-scope) .rb-prose li {
42114
+ /* Body text uses inherited color (set by fragment via textColorStyle) */
42115
+ color: inherit;
42116
+ }
41852
42117
 
41853
- :where(.theme-scope) .rb-prose h1,
41854
- :where(.theme-scope) .rb-prose h2,
41855
- :where(.theme-scope) .rb-prose h3,
41856
- :where(.theme-scope) .rb-prose h4,
41857
- :where(.theme-scope) .rb-prose h5,
41858
- :where(.theme-scope) .rb-prose h6 {
41859
- /* Headings inherit from parent or use theme text color */
41860
- color: inherit;
41861
- }
42118
+ :where(.theme-scope) .rb-prose h1,
42119
+ :where(.theme-scope) .rb-prose h2,
42120
+ :where(.theme-scope) .rb-prose h3,
42121
+ :where(.theme-scope) .rb-prose h4,
42122
+ :where(.theme-scope) .rb-prose h5,
42123
+ :where(.theme-scope) .rb-prose h6 {
42124
+ /* Headings inherit from parent or use theme text color */
42125
+ color: inherit;
42126
+ }
41862
42127
 
41863
- :where(.theme-scope) .rb-prose strong,
41864
- :where(.theme-scope) .rb-prose b {
41865
- /* Bold text inherits color but increases weight */
41866
- color: inherit;
41867
- font-weight: 600;
41868
- }
42128
+ :where(.theme-scope) .rb-prose strong,
42129
+ :where(.theme-scope) .rb-prose b {
42130
+ /* Bold text inherits color but increases weight */
42131
+ color: inherit;
42132
+ font-weight: 600;
42133
+ }
41869
42134
 
41870
- :where(.theme-scope) .rb-prose em,
41871
- :where(.theme-scope) .rb-prose i {
41872
- /* Italic text inherits color */
41873
- color: inherit;
41874
- }
42135
+ :where(.theme-scope) .rb-prose em,
42136
+ :where(.theme-scope) .rb-prose i {
42137
+ /* Italic text inherits color */
42138
+ color: inherit;
42139
+ }
41875
42140
 
41876
- :where(.theme-scope) .rb-prose a {
41877
- /* Global prose link style with theme-level overrides */
41878
- color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
41879
- text-decoration-line: var(--rb-prose-link-decoration-line, underline);
41880
- text-decoration-style: var(--rb-prose-link-underline-style, solid);
41881
- text-decoration-thickness: var(--rb-prose-link-underline-thickness, from-font);
41882
- text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
41883
- text-decoration-color: var(--rb-prose-link-decoration-color, rgba(var(--tb-primary), 0.3));
41884
- transition:
41885
- color 150ms ease,
41886
- text-decoration-color 150ms ease;
41887
- }
42141
+ :where(.theme-scope) .rb-prose a {
42142
+ /* Global prose link style with theme-level overrides */
42143
+ color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
42144
+ text-decoration-line: var(--rb-prose-link-decoration-line, underline);
42145
+ text-decoration-style: var(--rb-prose-link-underline-style, solid);
42146
+ text-decoration-thickness: var(
42147
+ --rb-prose-link-underline-thickness,
42148
+ from-font
42149
+ );
42150
+ text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
42151
+ text-decoration-color: var(
42152
+ --rb-prose-link-decoration-color,
42153
+ rgba(var(--tb-primary), 0.3)
42154
+ );
42155
+ transition:
42156
+ color 150ms ease,
42157
+ text-decoration-color 150ms ease;
42158
+ }
41888
42159
 
41889
- :where(.theme-scope) .rb-prose a:hover {
41890
- color: var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))));
41891
- text-decoration-color: var(
41892
- --rb-prose-link-hover-decoration-color,
41893
- var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))))
41894
- );
41895
- }
42160
+ :where(.theme-scope) .rb-prose a:hover {
42161
+ color: var(
42162
+ --rb-prose-link-hover-color,
42163
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
42164
+ );
42165
+ text-decoration-color: var(
42166
+ --rb-prose-link-hover-decoration-color,
42167
+ var(
42168
+ --rb-prose-link-hover-color,
42169
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
42170
+ )
42171
+ );
42172
+ }
41896
42173
 
41897
- :where(.theme-scope) .rb-prose blockquote {
41898
- /* Blockquotes use muted text color */
41899
- color: rgb(var(--tb-mutedText));
41900
- border-left-color: rgb(var(--tb-border));
41901
- }
42174
+ :where(.theme-scope) .rb-prose blockquote {
42175
+ /* Blockquotes use muted text color */
42176
+ color: rgb(var(--tb-mutedText));
42177
+ border-left-color: rgb(var(--tb-border));
42178
+ }
41902
42179
 
41903
- :where(.theme-scope) .fragment-quote-body blockquote {
41904
- /* Quote fragment should not get the generic prose blockquote left border/indent. */
41905
- border-left: 0;
41906
- padding-left: 0;
41907
- }
42180
+ :where(.theme-scope) .fragment-quote-body blockquote {
42181
+ /* Quote fragment should not get the generic prose blockquote left border/indent. */
42182
+ border-left: 0;
42183
+ padding-left: 0;
42184
+ }
41908
42185
 
41909
- :where(.theme-scope) .rb-columns-equal-height {
41910
- /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
41911
- container-type: inline-size;
42186
+ :where(.theme-scope) .rb-columns-equal-height {
42187
+ /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
42188
+ container-type: inline-size;
41912
42189
 
41913
- --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
41914
- --rb-columns-gap: var(--rb-semantic-gap, 0px);
41915
- --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
42190
+ --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
42191
+ --rb-columns-gap: var(--rb-semantic-gap, 0px);
42192
+ --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
41916
42193
 
41917
- --rb-columns-tile-w: calc(
41918
- (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) / var(--rb-columns-cols)
41919
- );
41920
- --rb-columns-tile-h: calc(var(--rb-columns-tile-w) * var(--rb-columns-tile-ar));
41921
- }
42194
+ --rb-columns-tile-w: calc(
42195
+ (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) /
42196
+ var(--rb-columns-cols)
42197
+ );
42198
+ --rb-columns-tile-h: calc(
42199
+ var(--rb-columns-tile-w) * var(--rb-columns-tile-ar)
42200
+ );
42201
+ }
41922
42202
 
41923
- @container rb-site (min-width: 768px) {
42203
+ @container rb-site (min-width: 768px) {
41924
42204
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
41925
42205
  :where(.theme-scope) .rb-columns-equal-height {
41926
- --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
41927
- }
42206
+ --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
42207
+ }
41928
42208
  }
41929
42209
  }
41930
42210
 
41931
- @container rb-site (min-width: 1024px) {
42211
+ @container rb-site (min-width: 1024px) {
41932
42212
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
41933
42213
  :where(.theme-scope) .rb-columns-equal-height {
41934
- --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
41935
- }
42214
+ --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
42215
+ }
41936
42216
  }
41937
42217
  }
41938
42218
 
41939
- @container rb-site (min-width: 1280px) {
42219
+ @container rb-site (min-width: 1280px) {
41940
42220
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
41941
42221
  :where(.theme-scope) .rb-columns-equal-height {
41942
- --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
41943
- }
42222
+ --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
42223
+ }
41944
42224
  }
41945
42225
  }
41946
42226
 
41947
- :where(.theme-scope) .rb-columns-equal-height > * {
41948
- height: var(--rb-columns-tile-h);
41949
- }
42227
+ :where(.theme-scope) .rb-columns-equal-height > * {
42228
+ height: var(--rb-columns-tile-h);
42229
+ }
41950
42230
 
41951
- :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
41952
- /*
42231
+ :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
42232
+ /*
41953
42233
  Grid items commonly include \`rb-h-full\` (height: 100%) to stretch within
41954
42234
  their row. In equal-height mode we instead want a fixed tile height so the
41955
42235
  spanning editorial tile doesn't become taller due to its larger width +
41956
42236
  aspect-ratio.
41957
42237
  */
41958
- height: var(--rb-columns-tile-h);
41959
- min-height: var(--rb-columns-tile-h);
41960
- max-height: var(--rb-columns-tile-h);
41961
- }
42238
+ height: var(--rb-columns-tile-h);
42239
+ min-height: var(--rb-columns-tile-h);
42240
+ max-height: var(--rb-columns-tile-h);
42241
+ }
41962
42242
 
41963
- :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
41964
- width: 100%;
41965
- height: 100%;
41966
- overflow: hidden;
41967
- }
42243
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
42244
+ width: 100%;
42245
+ height: 100%;
42246
+ overflow: hidden;
42247
+ }
41968
42248
 
41969
- :where(.theme-scope) .rb-columns-equal-height .fragment-image {
41970
- width: 100%;
41971
- height: 100%;
41972
- object-fit: cover;
41973
- }
42249
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image {
42250
+ width: 100%;
42251
+ height: 100%;
42252
+ object-fit: cover;
42253
+ }
41974
42254
 
41975
- :where(.theme-scope) .rb-prose code {
41976
- /* Inline code uses text color with surface background */
41977
- color: inherit;
41978
- background-color: rgba(var(--tb-surface), 0.5);
41979
- padding: 0.125rem 0.25rem;
41980
- border-radius: 0.25rem;
41981
- font-size: 0.875em;
41982
- }
42255
+ :where(.theme-scope) .rb-prose code {
42256
+ /* Inline code uses text color with surface background */
42257
+ color: inherit;
42258
+ background-color: rgba(var(--tb-surface), 0.5);
42259
+ padding: 0.125rem 0.25rem;
42260
+ border-radius: 0.25rem;
42261
+ font-size: 0.875em;
42262
+ }
41983
42263
 
41984
- :where(.theme-scope) .rb-prose pre {
41985
- /* Code blocks */
41986
- background-color: rgb(var(--tb-surface));
41987
- color: rgb(var(--tb-text));
41988
- border: 1px solid rgb(var(--tb-border));
41989
- border-radius: 0.5rem;
41990
- padding: 1rem;
41991
- overflow-x: auto;
41992
- }
42264
+ :where(.theme-scope) .rb-prose pre {
42265
+ /* Code blocks */
42266
+ background-color: rgb(var(--tb-surface));
42267
+ color: rgb(var(--tb-text));
42268
+ border: 1px solid rgb(var(--tb-border));
42269
+ border-radius: 0.5rem;
42270
+ padding: 1rem;
42271
+ overflow-x: auto;
42272
+ }
41993
42273
 
41994
- :where(.theme-scope) .rb-prose pre code {
41995
- /* Code inside pre blocks */
41996
- background-color: transparent;
41997
- padding: 0;
41998
- color: inherit;
41999
- }
42274
+ :where(.theme-scope) .rb-prose pre code {
42275
+ /* Code inside pre blocks */
42276
+ background-color: transparent;
42277
+ padding: 0;
42278
+ color: inherit;
42279
+ }
42000
42280
 
42001
- :where(.theme-scope) .rb-prose hr {
42002
- /* Horizontal rules */
42003
- border-color: rgb(var(--tb-border));
42004
- }
42281
+ :where(.theme-scope) .rb-prose hr {
42282
+ /* Horizontal rules */
42283
+ border-color: rgb(var(--tb-border));
42284
+ }
42005
42285
 
42006
- :where(.theme-scope) .rb-prose ul > li::marker,
42007
- :where(.theme-scope) .rb-prose ol > li::marker {
42008
- /* List markers use muted text color */
42009
- color: rgb(var(--tb-mutedText));
42010
- }
42286
+ :where(.theme-scope) .rb-prose ul > li::marker,
42287
+ :where(.theme-scope) .rb-prose ol > li::marker {
42288
+ /* List markers use muted text color */
42289
+ color: rgb(var(--tb-mutedText));
42290
+ }
42011
42291
 
42012
- /*
42292
+ /*
42013
42293
  /* Density helpers */
42014
- :where(.theme-scope) .section-pad {
42015
- padding-top: 4rem;
42016
- padding-bottom: 4rem;
42017
- }
42018
- :where(.theme-scope)[data-density="airy"] .section-pad {
42019
- padding-top: 4.5rem;
42020
- padding-bottom: 4.5rem;
42021
- }
42022
- :where(.theme-scope)[data-density="compact"] .section-pad {
42023
- padding-top: 3rem;
42024
- padding-bottom: 3rem;
42025
- }
42026
-
42027
- :where(.theme-scope) .rounded-control {
42028
- border-radius: var(--radius-control);
42029
- }
42030
- :where(.theme-scope) .rounded-card {
42031
- border-radius: var(--radius-card);
42032
- }
42294
+ :where(.theme-scope) .section-pad {
42295
+ padding-top: 4rem;
42296
+ padding-bottom: 4rem;
42297
+ }
42298
+ :where(.theme-scope)[data-density='airy'] .section-pad {
42299
+ padding-top: 4.5rem;
42300
+ padding-bottom: 4.5rem;
42301
+ }
42302
+ :where(.theme-scope)[data-density='compact'] .section-pad {
42303
+ padding-top: 3rem;
42304
+ padding-bottom: 3rem;
42305
+ }
42033
42306
 
42034
- :where(.theme-scope) .shadow-elev {
42035
- box-shadow: var(--shadow-elev);
42036
- }
42307
+ :where(.theme-scope) .rounded-control {
42308
+ border-radius: var(--radius-control);
42309
+ }
42310
+ :where(.theme-scope) .rounded-card {
42311
+ border-radius: var(--radius-card);
42312
+ }
42037
42313
 
42038
- :where(.theme-scope) .font-heading {
42039
- font-family: var(--font-heading);
42040
- }
42041
- :where(.theme-scope) .font-body {
42042
- font-family: var(--font-body);
42043
- }
42314
+ :where(.theme-scope) .shadow-elev {
42315
+ box-shadow: var(--shadow-elev);
42316
+ }
42044
42317
 
42045
- :where(.theme-scope) .text-h1 {
42046
- font-size: var(--fs-h1);
42047
- line-height: 1.1;
42048
- }
42049
- :where(.theme-scope) .text-h2 {
42050
- font-size: var(--fs-h2);
42051
- line-height: 1.15;
42052
- }
42053
- :where(.theme-scope) .text-h3 {
42054
- font-size: var(--fs-h3);
42055
- line-height: 1.2;
42056
- }
42057
- :where(.theme-scope) .text-body-size {
42058
- font-size: var(--fs-body);
42059
- }
42318
+ :where(.theme-scope) .font-heading {
42319
+ font-family: var(--font-heading);
42320
+ }
42321
+ :where(.theme-scope) .font-body {
42322
+ font-family: var(--font-body);
42323
+ }
42060
42324
 
42061
- :where(.theme-scope) .transition-theme {
42062
- transition: all var(--motion-duration) var(--motion-ease);
42063
- }
42064
- :where(.theme-scope) .transition-theme-standard {
42065
- transition: all var(--motion-duration) var(--motion-ease);
42066
- }
42067
- :where(.theme-scope) .transition-theme-subtle {
42068
- transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
42069
- }
42070
- :where(.theme-scope) .transition-theme-expressive {
42071
- transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
42072
- }
42325
+ :where(.theme-scope) .text-h1 {
42326
+ font-size: var(--fs-h1);
42327
+ line-height: 1.1;
42328
+ }
42329
+ :where(.theme-scope) .text-h2 {
42330
+ font-size: var(--fs-h2);
42331
+ line-height: 1.15;
42332
+ }
42333
+ :where(.theme-scope) .text-h3 {
42334
+ font-size: var(--fs-h3);
42335
+ line-height: 1.2;
42336
+ }
42337
+ :where(.theme-scope) .text-body-size {
42338
+ font-size: var(--fs-body);
42339
+ }
42073
42340
 
42074
- /* Shade tokens (50..950) for primary */
42075
- :where(.theme-scope) .from-primary-50 {
42076
- --rb-gradient-from: rgb(var(--tb-primary-50)) var(--rb-gradient-from-position);
42077
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
42078
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42079
- }
42080
- :where(.theme-scope) .to-primary-50 {
42081
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
42082
- }
42083
- :where(.theme-scope) .from-primary-100 {
42084
- --rb-gradient-from: rgb(var(--tb-primary-100))
42085
- var(--rb-gradient-from-position);
42086
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
42087
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42088
- }
42089
- :where(.theme-scope) .to-primary-100 {
42090
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
42091
- }
42092
- :where(.theme-scope) .from-primary-200 {
42093
- --rb-gradient-from: rgb(var(--tb-primary-200))
42094
- var(--rb-gradient-from-position);
42095
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
42096
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42097
- }
42098
- :where(.theme-scope) .to-primary-200 {
42099
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
42100
- }
42101
- :where(.theme-scope) .from-primary-300 {
42102
- --rb-gradient-from: rgb(var(--tb-primary-300))
42103
- var(--rb-gradient-from-position);
42104
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
42105
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42106
- }
42107
- :where(.theme-scope) .to-primary-300 {
42108
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
42109
- }
42110
- :where(.theme-scope) .from-primary-400 {
42111
- --rb-gradient-from: rgb(var(--tb-primary-400))
42112
- var(--rb-gradient-from-position);
42113
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
42114
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42115
- }
42116
- :where(.theme-scope) .to-primary-400 {
42117
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
42118
- }
42119
- :where(.theme-scope) .from-primary-500 {
42120
- --rb-gradient-from: rgb(var(--tb-primary-500))
42121
- var(--rb-gradient-from-position);
42122
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
42123
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42124
- }
42125
- :where(.theme-scope) .to-primary-500 {
42126
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
42127
- }
42128
- :where(.theme-scope) .from-primary-600 {
42129
- --rb-gradient-from: rgb(var(--tb-primary-600))
42130
- var(--rb-gradient-from-position);
42131
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
42132
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42133
- }
42134
- :where(.theme-scope) .to-primary-600 {
42135
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
42136
- }
42137
- :where(.theme-scope) .from-primary-700 {
42138
- --rb-gradient-from: rgb(var(--tb-primary-700))
42139
- var(--rb-gradient-from-position);
42140
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
42141
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42142
- }
42143
- :where(.theme-scope) .to-primary-700 {
42144
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
42145
- }
42146
- :where(.theme-scope) .from-primary-800 {
42147
- --rb-gradient-from: rgb(var(--tb-primary-800))
42148
- var(--rb-gradient-from-position);
42149
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
42150
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42151
- }
42152
- :where(.theme-scope) .to-primary-800 {
42153
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
42154
- }
42155
- :where(.theme-scope) .from-primary-900 {
42156
- --rb-gradient-from: rgb(var(--tb-primary-900))
42157
- var(--rb-gradient-from-position);
42158
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
42159
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42160
- }
42161
- :where(.theme-scope) .to-primary-900 {
42162
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
42163
- }
42164
- :where(.theme-scope) .from-primary-950 {
42165
- --rb-gradient-from: rgb(var(--tb-primary-950))
42166
- var(--rb-gradient-from-position);
42167
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
42168
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42169
- }
42170
- :where(.theme-scope) .to-primary-950 {
42171
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
42172
- }
42173
-
42174
- /* Shade tokens (50..950) for secondary */
42175
- :where(.theme-scope) .from-secondary-50 {
42176
- --rb-gradient-from: rgb(var(--tb-secondary-50))
42177
- var(--rb-gradient-from-position);
42178
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
42179
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42180
- }
42181
- :where(.theme-scope) .to-secondary-50 {
42182
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
42183
- }
42184
- :where(.theme-scope) .from-secondary-100 {
42185
- --rb-gradient-from: rgb(var(--tb-secondary-100))
42186
- var(--rb-gradient-from-position);
42187
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
42188
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42189
- }
42190
- :where(.theme-scope) .to-secondary-100 {
42191
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
42192
- }
42193
- :where(.theme-scope) .from-secondary-200 {
42194
- --rb-gradient-from: rgb(var(--tb-secondary-200))
42195
- var(--rb-gradient-from-position);
42196
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
42197
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42198
- }
42199
- :where(.theme-scope) .to-secondary-200 {
42200
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
42201
- }
42202
- :where(.theme-scope) .from-secondary-300 {
42203
- --rb-gradient-from: rgb(var(--tb-secondary-300))
42204
- var(--rb-gradient-from-position);
42205
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
42206
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42207
- }
42208
- :where(.theme-scope) .to-secondary-300 {
42209
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
42210
- }
42211
- :where(.theme-scope) .from-secondary-400 {
42212
- --rb-gradient-from: rgb(var(--tb-secondary-400))
42213
- var(--rb-gradient-from-position);
42214
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
42215
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42216
- }
42217
- :where(.theme-scope) .to-secondary-400 {
42218
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
42219
- }
42220
- :where(.theme-scope) .from-secondary-500 {
42221
- --rb-gradient-from: rgb(var(--tb-secondary-500))
42222
- var(--rb-gradient-from-position);
42223
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
42224
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42225
- }
42226
- :where(.theme-scope) .to-secondary-500 {
42227
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
42228
- }
42229
- :where(.theme-scope) .from-secondary-600 {
42230
- --rb-gradient-from: rgb(var(--tb-secondary-600))
42231
- var(--rb-gradient-from-position);
42232
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
42233
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42234
- }
42235
- :where(.theme-scope) .to-secondary-600 {
42236
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
42237
- }
42238
- :where(.theme-scope) .from-secondary-700 {
42239
- --rb-gradient-from: rgb(var(--tb-secondary-700))
42240
- var(--rb-gradient-from-position);
42241
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
42242
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42243
- }
42244
- :where(.theme-scope) .to-secondary-700 {
42245
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
42246
- }
42247
- :where(.theme-scope) .from-secondary-800 {
42248
- --rb-gradient-from: rgb(var(--tb-secondary-800))
42249
- var(--rb-gradient-from-position);
42250
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
42251
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42252
- }
42253
- :where(.theme-scope) .to-secondary-800 {
42254
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
42255
- }
42256
- :where(.theme-scope) .from-secondary-900 {
42257
- --rb-gradient-from: rgb(var(--tb-secondary-900))
42258
- var(--rb-gradient-from-position);
42259
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
42260
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42261
- }
42262
- :where(.theme-scope) .to-secondary-900 {
42263
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
42264
- }
42265
- :where(.theme-scope) .from-secondary-950 {
42266
- --rb-gradient-from: rgb(var(--tb-secondary-950))
42267
- var(--rb-gradient-from-position);
42268
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
42269
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42270
- }
42271
- :where(.theme-scope) .to-secondary-950 {
42272
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
42273
- }
42274
-
42275
- /* Shade tokens (50..950) for accent */
42276
- :where(.theme-scope) .from-accent-50 {
42277
- --rb-gradient-from: rgb(var(--tb-accent-50)) var(--rb-gradient-from-position);
42278
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
42279
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42280
- }
42281
- :where(.theme-scope) .to-accent-50 {
42282
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
42283
- }
42284
- :where(.theme-scope) .from-accent-100 {
42285
- --rb-gradient-from: rgb(var(--tb-accent-100)) var(--rb-gradient-from-position);
42286
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
42287
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42288
- }
42289
- :where(.theme-scope) .to-accent-100 {
42290
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
42291
- }
42292
- :where(.theme-scope) .from-accent-200 {
42293
- --rb-gradient-from: rgb(var(--tb-accent-200)) var(--rb-gradient-from-position);
42294
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
42295
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42296
- }
42297
- :where(.theme-scope) .to-accent-200 {
42298
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
42299
- }
42300
- :where(.theme-scope) .from-accent-300 {
42301
- --rb-gradient-from: rgb(var(--tb-accent-300)) var(--rb-gradient-from-position);
42302
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
42303
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42304
- }
42305
- :where(.theme-scope) .to-accent-300 {
42306
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
42307
- }
42308
- :where(.theme-scope) .from-accent-400 {
42309
- --rb-gradient-from: rgb(var(--tb-accent-400)) var(--rb-gradient-from-position);
42310
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
42311
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42312
- }
42313
- :where(.theme-scope) .to-accent-400 {
42314
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
42315
- }
42316
- :where(.theme-scope) .from-accent-500 {
42317
- --rb-gradient-from: rgb(var(--tb-accent-500)) var(--rb-gradient-from-position);
42318
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
42319
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42320
- }
42321
- :where(.theme-scope) .to-accent-500 {
42322
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
42323
- }
42324
- :where(.theme-scope) .from-accent-600 {
42325
- --rb-gradient-from: rgb(var(--tb-accent-600)) var(--rb-gradient-from-position);
42326
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
42327
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42328
- }
42329
- :where(.theme-scope) .to-accent-600 {
42330
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
42331
- }
42332
- :where(.theme-scope) .from-accent-700 {
42333
- --rb-gradient-from: rgb(var(--tb-accent-700)) var(--rb-gradient-from-position);
42334
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
42335
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42336
- }
42337
- :where(.theme-scope) .to-accent-700 {
42338
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
42339
- }
42340
- :where(.theme-scope) .from-accent-800 {
42341
- --rb-gradient-from: rgb(var(--tb-accent-800)) var(--rb-gradient-from-position);
42342
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
42343
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42344
- }
42345
- :where(.theme-scope) .to-accent-800 {
42346
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
42347
- }
42348
- :where(.theme-scope) .from-accent-900 {
42349
- --rb-gradient-from: rgb(var(--tb-accent-900)) var(--rb-gradient-from-position);
42350
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
42351
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42352
- }
42353
- :where(.theme-scope) .to-accent-900 {
42354
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
42355
- }
42356
- :where(.theme-scope) .from-accent-950 {
42357
- --rb-gradient-from: rgb(var(--tb-accent-950)) var(--rb-gradient-from-position);
42358
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
42359
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42360
- }
42361
- :where(.theme-scope) .to-accent-950 {
42362
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
42363
- }
42341
+ :where(.theme-scope) .transition-theme {
42342
+ transition: all var(--motion-duration) var(--motion-ease);
42343
+ }
42344
+ :where(.theme-scope) .transition-theme-standard {
42345
+ transition: all var(--motion-duration) var(--motion-ease);
42346
+ }
42347
+ :where(.theme-scope) .transition-theme-subtle {
42348
+ transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
42349
+ }
42350
+ :where(.theme-scope) .transition-theme-expressive {
42351
+ transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
42352
+ }
42364
42353
 
42365
- /* Shade tokens (50..950) for neutral */
42366
- :where(.theme-scope) .from-neutral-50 {
42367
- --rb-gradient-from: rgb(var(--tb-neutral-50)) var(--rb-gradient-from-position);
42368
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
42369
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42370
- }
42371
- :where(.theme-scope) .to-neutral-50 {
42372
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
42373
- }
42374
- :where(.theme-scope) .from-neutral-100 {
42375
- --rb-gradient-from: rgb(var(--tb-neutral-100))
42376
- var(--rb-gradient-from-position);
42377
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
42378
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42379
- }
42380
- :where(.theme-scope) .to-neutral-100 {
42381
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
42382
- }
42383
- :where(.theme-scope) .from-neutral-200 {
42384
- --rb-gradient-from: rgb(var(--tb-neutral-200))
42385
- var(--rb-gradient-from-position);
42386
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
42387
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42388
- }
42389
- :where(.theme-scope) .to-neutral-200 {
42390
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
42391
- }
42392
- :where(.theme-scope) .from-neutral-300 {
42393
- --rb-gradient-from: rgb(var(--tb-neutral-300))
42394
- var(--rb-gradient-from-position);
42395
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
42396
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42397
- }
42398
- :where(.theme-scope) .to-neutral-300 {
42399
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
42400
- }
42401
- :where(.theme-scope) .from-neutral-400 {
42402
- --rb-gradient-from: rgb(var(--tb-neutral-400))
42403
- var(--rb-gradient-from-position);
42404
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
42405
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42406
- }
42407
- :where(.theme-scope) .to-neutral-400 {
42408
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
42409
- }
42410
- :where(.theme-scope) .from-neutral-500 {
42411
- --rb-gradient-from: rgb(var(--tb-neutral-500))
42412
- var(--rb-gradient-from-position);
42413
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
42414
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42415
- }
42416
- :where(.theme-scope) .to-neutral-500 {
42417
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
42418
- }
42419
- :where(.theme-scope) .from-neutral-600 {
42420
- --rb-gradient-from: rgb(var(--tb-neutral-600))
42421
- var(--rb-gradient-from-position);
42422
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
42423
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42424
- }
42425
- :where(.theme-scope) .to-neutral-600 {
42426
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
42427
- }
42428
- :where(.theme-scope) .from-neutral-700 {
42429
- --rb-gradient-from: rgb(var(--tb-neutral-700))
42430
- var(--rb-gradient-from-position);
42431
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
42432
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42433
- }
42434
- :where(.theme-scope) .to-neutral-700 {
42435
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
42436
- }
42437
- :where(.theme-scope) .from-neutral-800 {
42438
- --rb-gradient-from: rgb(var(--tb-neutral-800))
42439
- var(--rb-gradient-from-position);
42440
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
42441
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42442
- }
42443
- :where(.theme-scope) .to-neutral-800 {
42444
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
42445
- }
42446
- :where(.theme-scope) .from-neutral-900 {
42447
- --rb-gradient-from: rgb(var(--tb-neutral-900))
42448
- var(--rb-gradient-from-position);
42449
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
42450
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42451
- }
42452
- :where(.theme-scope) .to-neutral-900 {
42453
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
42454
- }
42455
- :where(.theme-scope) .from-neutral-950 {
42456
- --rb-gradient-from: rgb(var(--tb-neutral-950))
42457
- var(--rb-gradient-from-position);
42458
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
42459
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42460
- }
42461
- :where(.theme-scope) .to-neutral-950 {
42462
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
42463
- }
42464
-
42465
- /* =================================================================
42354
+ /* Shade tokens (50..950) for primary */
42355
+ :where(.theme-scope) .from-primary-50 {
42356
+ --rb-gradient-from: rgb(var(--tb-primary-50))
42357
+ var(--rb-gradient-from-position);
42358
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
42359
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42360
+ }
42361
+ :where(.theme-scope) .to-primary-50 {
42362
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
42363
+ }
42364
+ :where(.theme-scope) .from-primary-100 {
42365
+ --rb-gradient-from: rgb(var(--tb-primary-100))
42366
+ var(--rb-gradient-from-position);
42367
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
42368
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42369
+ }
42370
+ :where(.theme-scope) .to-primary-100 {
42371
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
42372
+ }
42373
+ :where(.theme-scope) .from-primary-200 {
42374
+ --rb-gradient-from: rgb(var(--tb-primary-200))
42375
+ var(--rb-gradient-from-position);
42376
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
42377
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42378
+ }
42379
+ :where(.theme-scope) .to-primary-200 {
42380
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
42381
+ }
42382
+ :where(.theme-scope) .from-primary-300 {
42383
+ --rb-gradient-from: rgb(var(--tb-primary-300))
42384
+ var(--rb-gradient-from-position);
42385
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
42386
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42387
+ }
42388
+ :where(.theme-scope) .to-primary-300 {
42389
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
42390
+ }
42391
+ :where(.theme-scope) .from-primary-400 {
42392
+ --rb-gradient-from: rgb(var(--tb-primary-400))
42393
+ var(--rb-gradient-from-position);
42394
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
42395
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42396
+ }
42397
+ :where(.theme-scope) .to-primary-400 {
42398
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
42399
+ }
42400
+ :where(.theme-scope) .from-primary-500 {
42401
+ --rb-gradient-from: rgb(var(--tb-primary-500))
42402
+ var(--rb-gradient-from-position);
42403
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
42404
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42405
+ }
42406
+ :where(.theme-scope) .to-primary-500 {
42407
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
42408
+ }
42409
+ :where(.theme-scope) .from-primary-600 {
42410
+ --rb-gradient-from: rgb(var(--tb-primary-600))
42411
+ var(--rb-gradient-from-position);
42412
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
42413
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42414
+ }
42415
+ :where(.theme-scope) .to-primary-600 {
42416
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
42417
+ }
42418
+ :where(.theme-scope) .from-primary-700 {
42419
+ --rb-gradient-from: rgb(var(--tb-primary-700))
42420
+ var(--rb-gradient-from-position);
42421
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
42422
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42423
+ }
42424
+ :where(.theme-scope) .to-primary-700 {
42425
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
42426
+ }
42427
+ :where(.theme-scope) .from-primary-800 {
42428
+ --rb-gradient-from: rgb(var(--tb-primary-800))
42429
+ var(--rb-gradient-from-position);
42430
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
42431
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42432
+ }
42433
+ :where(.theme-scope) .to-primary-800 {
42434
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
42435
+ }
42436
+ :where(.theme-scope) .from-primary-900 {
42437
+ --rb-gradient-from: rgb(var(--tb-primary-900))
42438
+ var(--rb-gradient-from-position);
42439
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
42440
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42441
+ }
42442
+ :where(.theme-scope) .to-primary-900 {
42443
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
42444
+ }
42445
+ :where(.theme-scope) .from-primary-950 {
42446
+ --rb-gradient-from: rgb(var(--tb-primary-950))
42447
+ var(--rb-gradient-from-position);
42448
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
42449
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42450
+ }
42451
+ :where(.theme-scope) .to-primary-950 {
42452
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
42453
+ }
42454
+
42455
+ /* Shade tokens (50..950) for secondary */
42456
+ :where(.theme-scope) .from-secondary-50 {
42457
+ --rb-gradient-from: rgb(var(--tb-secondary-50))
42458
+ var(--rb-gradient-from-position);
42459
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
42460
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42461
+ }
42462
+ :where(.theme-scope) .to-secondary-50 {
42463
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
42464
+ }
42465
+ :where(.theme-scope) .from-secondary-100 {
42466
+ --rb-gradient-from: rgb(var(--tb-secondary-100))
42467
+ var(--rb-gradient-from-position);
42468
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
42469
+ var(--rb-gradient-to-position);
42470
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42471
+ }
42472
+ :where(.theme-scope) .to-secondary-100 {
42473
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
42474
+ var(--rb-gradient-to-position);
42475
+ }
42476
+ :where(.theme-scope) .from-secondary-200 {
42477
+ --rb-gradient-from: rgb(var(--tb-secondary-200))
42478
+ var(--rb-gradient-from-position);
42479
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
42480
+ var(--rb-gradient-to-position);
42481
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42482
+ }
42483
+ :where(.theme-scope) .to-secondary-200 {
42484
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
42485
+ var(--rb-gradient-to-position);
42486
+ }
42487
+ :where(.theme-scope) .from-secondary-300 {
42488
+ --rb-gradient-from: rgb(var(--tb-secondary-300))
42489
+ var(--rb-gradient-from-position);
42490
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
42491
+ var(--rb-gradient-to-position);
42492
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42493
+ }
42494
+ :where(.theme-scope) .to-secondary-300 {
42495
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
42496
+ var(--rb-gradient-to-position);
42497
+ }
42498
+ :where(.theme-scope) .from-secondary-400 {
42499
+ --rb-gradient-from: rgb(var(--tb-secondary-400))
42500
+ var(--rb-gradient-from-position);
42501
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
42502
+ var(--rb-gradient-to-position);
42503
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42504
+ }
42505
+ :where(.theme-scope) .to-secondary-400 {
42506
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
42507
+ var(--rb-gradient-to-position);
42508
+ }
42509
+ :where(.theme-scope) .from-secondary-500 {
42510
+ --rb-gradient-from: rgb(var(--tb-secondary-500))
42511
+ var(--rb-gradient-from-position);
42512
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
42513
+ var(--rb-gradient-to-position);
42514
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42515
+ }
42516
+ :where(.theme-scope) .to-secondary-500 {
42517
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
42518
+ var(--rb-gradient-to-position);
42519
+ }
42520
+ :where(.theme-scope) .from-secondary-600 {
42521
+ --rb-gradient-from: rgb(var(--tb-secondary-600))
42522
+ var(--rb-gradient-from-position);
42523
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
42524
+ var(--rb-gradient-to-position);
42525
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42526
+ }
42527
+ :where(.theme-scope) .to-secondary-600 {
42528
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
42529
+ var(--rb-gradient-to-position);
42530
+ }
42531
+ :where(.theme-scope) .from-secondary-700 {
42532
+ --rb-gradient-from: rgb(var(--tb-secondary-700))
42533
+ var(--rb-gradient-from-position);
42534
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
42535
+ var(--rb-gradient-to-position);
42536
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42537
+ }
42538
+ :where(.theme-scope) .to-secondary-700 {
42539
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
42540
+ var(--rb-gradient-to-position);
42541
+ }
42542
+ :where(.theme-scope) .from-secondary-800 {
42543
+ --rb-gradient-from: rgb(var(--tb-secondary-800))
42544
+ var(--rb-gradient-from-position);
42545
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
42546
+ var(--rb-gradient-to-position);
42547
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42548
+ }
42549
+ :where(.theme-scope) .to-secondary-800 {
42550
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
42551
+ var(--rb-gradient-to-position);
42552
+ }
42553
+ :where(.theme-scope) .from-secondary-900 {
42554
+ --rb-gradient-from: rgb(var(--tb-secondary-900))
42555
+ var(--rb-gradient-from-position);
42556
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
42557
+ var(--rb-gradient-to-position);
42558
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42559
+ }
42560
+ :where(.theme-scope) .to-secondary-900 {
42561
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
42562
+ var(--rb-gradient-to-position);
42563
+ }
42564
+ :where(.theme-scope) .from-secondary-950 {
42565
+ --rb-gradient-from: rgb(var(--tb-secondary-950))
42566
+ var(--rb-gradient-from-position);
42567
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
42568
+ var(--rb-gradient-to-position);
42569
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42570
+ }
42571
+ :where(.theme-scope) .to-secondary-950 {
42572
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
42573
+ var(--rb-gradient-to-position);
42574
+ }
42575
+
42576
+ /* Shade tokens (50..950) for accent */
42577
+ :where(.theme-scope) .from-accent-50 {
42578
+ --rb-gradient-from: rgb(var(--tb-accent-50))
42579
+ var(--rb-gradient-from-position);
42580
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
42581
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42582
+ }
42583
+ :where(.theme-scope) .to-accent-50 {
42584
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
42585
+ }
42586
+ :where(.theme-scope) .from-accent-100 {
42587
+ --rb-gradient-from: rgb(var(--tb-accent-100))
42588
+ var(--rb-gradient-from-position);
42589
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
42590
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42591
+ }
42592
+ :where(.theme-scope) .to-accent-100 {
42593
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
42594
+ }
42595
+ :where(.theme-scope) .from-accent-200 {
42596
+ --rb-gradient-from: rgb(var(--tb-accent-200))
42597
+ var(--rb-gradient-from-position);
42598
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
42599
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42600
+ }
42601
+ :where(.theme-scope) .to-accent-200 {
42602
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
42603
+ }
42604
+ :where(.theme-scope) .from-accent-300 {
42605
+ --rb-gradient-from: rgb(var(--tb-accent-300))
42606
+ var(--rb-gradient-from-position);
42607
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
42608
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42609
+ }
42610
+ :where(.theme-scope) .to-accent-300 {
42611
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
42612
+ }
42613
+ :where(.theme-scope) .from-accent-400 {
42614
+ --rb-gradient-from: rgb(var(--tb-accent-400))
42615
+ var(--rb-gradient-from-position);
42616
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
42617
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42618
+ }
42619
+ :where(.theme-scope) .to-accent-400 {
42620
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
42621
+ }
42622
+ :where(.theme-scope) .from-accent-500 {
42623
+ --rb-gradient-from: rgb(var(--tb-accent-500))
42624
+ var(--rb-gradient-from-position);
42625
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
42626
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42627
+ }
42628
+ :where(.theme-scope) .to-accent-500 {
42629
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
42630
+ }
42631
+ :where(.theme-scope) .from-accent-600 {
42632
+ --rb-gradient-from: rgb(var(--tb-accent-600))
42633
+ var(--rb-gradient-from-position);
42634
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
42635
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42636
+ }
42637
+ :where(.theme-scope) .to-accent-600 {
42638
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
42639
+ }
42640
+ :where(.theme-scope) .from-accent-700 {
42641
+ --rb-gradient-from: rgb(var(--tb-accent-700))
42642
+ var(--rb-gradient-from-position);
42643
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
42644
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42645
+ }
42646
+ :where(.theme-scope) .to-accent-700 {
42647
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
42648
+ }
42649
+ :where(.theme-scope) .from-accent-800 {
42650
+ --rb-gradient-from: rgb(var(--tb-accent-800))
42651
+ var(--rb-gradient-from-position);
42652
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
42653
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42654
+ }
42655
+ :where(.theme-scope) .to-accent-800 {
42656
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
42657
+ }
42658
+ :where(.theme-scope) .from-accent-900 {
42659
+ --rb-gradient-from: rgb(var(--tb-accent-900))
42660
+ var(--rb-gradient-from-position);
42661
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
42662
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42663
+ }
42664
+ :where(.theme-scope) .to-accent-900 {
42665
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
42666
+ }
42667
+ :where(.theme-scope) .from-accent-950 {
42668
+ --rb-gradient-from: rgb(var(--tb-accent-950))
42669
+ var(--rb-gradient-from-position);
42670
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
42671
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42672
+ }
42673
+ :where(.theme-scope) .to-accent-950 {
42674
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
42675
+ }
42676
+
42677
+ /* Shade tokens (50..950) for neutral */
42678
+ :where(.theme-scope) .from-neutral-50 {
42679
+ --rb-gradient-from: rgb(var(--tb-neutral-50))
42680
+ var(--rb-gradient-from-position);
42681
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
42682
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42683
+ }
42684
+ :where(.theme-scope) .to-neutral-50 {
42685
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
42686
+ }
42687
+ :where(.theme-scope) .from-neutral-100 {
42688
+ --rb-gradient-from: rgb(var(--tb-neutral-100))
42689
+ var(--rb-gradient-from-position);
42690
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
42691
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42692
+ }
42693
+ :where(.theme-scope) .to-neutral-100 {
42694
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
42695
+ }
42696
+ :where(.theme-scope) .from-neutral-200 {
42697
+ --rb-gradient-from: rgb(var(--tb-neutral-200))
42698
+ var(--rb-gradient-from-position);
42699
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
42700
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42701
+ }
42702
+ :where(.theme-scope) .to-neutral-200 {
42703
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
42704
+ }
42705
+ :where(.theme-scope) .from-neutral-300 {
42706
+ --rb-gradient-from: rgb(var(--tb-neutral-300))
42707
+ var(--rb-gradient-from-position);
42708
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
42709
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42710
+ }
42711
+ :where(.theme-scope) .to-neutral-300 {
42712
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
42713
+ }
42714
+ :where(.theme-scope) .from-neutral-400 {
42715
+ --rb-gradient-from: rgb(var(--tb-neutral-400))
42716
+ var(--rb-gradient-from-position);
42717
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
42718
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42719
+ }
42720
+ :where(.theme-scope) .to-neutral-400 {
42721
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
42722
+ }
42723
+ :where(.theme-scope) .from-neutral-500 {
42724
+ --rb-gradient-from: rgb(var(--tb-neutral-500))
42725
+ var(--rb-gradient-from-position);
42726
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
42727
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42728
+ }
42729
+ :where(.theme-scope) .to-neutral-500 {
42730
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
42731
+ }
42732
+ :where(.theme-scope) .from-neutral-600 {
42733
+ --rb-gradient-from: rgb(var(--tb-neutral-600))
42734
+ var(--rb-gradient-from-position);
42735
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
42736
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42737
+ }
42738
+ :where(.theme-scope) .to-neutral-600 {
42739
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
42740
+ }
42741
+ :where(.theme-scope) .from-neutral-700 {
42742
+ --rb-gradient-from: rgb(var(--tb-neutral-700))
42743
+ var(--rb-gradient-from-position);
42744
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
42745
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42746
+ }
42747
+ :where(.theme-scope) .to-neutral-700 {
42748
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
42749
+ }
42750
+ :where(.theme-scope) .from-neutral-800 {
42751
+ --rb-gradient-from: rgb(var(--tb-neutral-800))
42752
+ var(--rb-gradient-from-position);
42753
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
42754
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42755
+ }
42756
+ :where(.theme-scope) .to-neutral-800 {
42757
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
42758
+ }
42759
+ :where(.theme-scope) .from-neutral-900 {
42760
+ --rb-gradient-from: rgb(var(--tb-neutral-900))
42761
+ var(--rb-gradient-from-position);
42762
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
42763
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42764
+ }
42765
+ :where(.theme-scope) .to-neutral-900 {
42766
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
42767
+ }
42768
+ :where(.theme-scope) .from-neutral-950 {
42769
+ --rb-gradient-from: rgb(var(--tb-neutral-950))
42770
+ var(--rb-gradient-from-position);
42771
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
42772
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
42773
+ }
42774
+ :where(.theme-scope) .to-neutral-950 {
42775
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
42776
+ }
42777
+
42778
+ /* =================================================================
42466
42779
  Header System Class Naming Conventions
42467
42780
 
42468
42781
  rb-header-* Utility-style classes set in site-header.ts layouts
@@ -42475,240 +42788,240 @@ var containerResponsiveThemeCss = `/*
42475
42788
  (nav-dropdown, nav-mobile-panel, nav-underline-grow)
42476
42789
  ================================================================= */
42477
42790
 
42478
- /* =================================================================
42791
+ /* =================================================================
42479
42792
  Header Layout Padding
42480
42793
 
42481
42794
  Padding is controlled entirely by CSS based on variant class.
42482
42795
  This ensures shrink headers look identical to non-shrink before scroll.
42483
42796
  ================================================================= */
42484
42797
 
42485
- /* Prevent scroll anchoring feedback loops when the header height transitions.
42798
+ /* Prevent scroll anchoring feedback loops when the header height transitions.
42486
42799
  In some browsers, resizing a sticky header near the top can cause the UA to
42487
42800
  adjust scroll position ("scroll anchoring"), which then flips the
42488
42801
  \`header-scrolled\` threshold logic back and forth. */
42489
- :where(.theme-scope) .block-site-header {
42490
- overflow-anchor: none;
42491
- }
42802
+ :where(.theme-scope) .block-site-header {
42803
+ overflow-anchor: none;
42804
+ }
42492
42805
 
42493
- /* Base padding for horizontal variants (classic, transparent) */
42494
- :where(.theme-scope) .rb-header-layout {
42495
- padding-top: 1rem;
42496
- padding-bottom: 1rem;
42497
- transition: padding 300ms var(--motion-ease, ease);
42498
- }
42806
+ /* Base padding for horizontal variants (classic, transparent) */
42807
+ :where(.theme-scope) .rb-header-layout {
42808
+ padding-top: 1rem;
42809
+ padding-bottom: 1rem;
42810
+ transition: padding 300ms var(--motion-ease, ease);
42811
+ }
42499
42812
 
42500
- /* Vertical variants need more breathing room
42813
+ /* Vertical variants need more breathing room
42501
42814
  Note: header-variant-* is on Section (ancestor), rb-header-layout on inner div */
42502
- :where(.theme-scope) .header-variant-centered .rb-header-layout,
42503
- :where(.theme-scope) .header-variant-editorial .rb-header-layout {
42504
- padding-top: 1.5rem;
42505
- padding-bottom: 1.5rem;
42506
- }
42815
+ :where(.theme-scope) .header-variant-centered .rb-header-layout {
42816
+ padding-top: 1.5rem;
42817
+ padding-bottom: 1.5rem;
42818
+ }
42507
42819
 
42508
- /* Floating variant - compact padding */
42509
- :where(.theme-scope) .header-variant-floating .rb-header-layout {
42510
- padding-top: 0.75rem;
42511
- padding-bottom: 0.75rem;
42512
- }
42820
+ /* Floating variant - compact padding */
42821
+ :where(.theme-scope) .header-variant-floating .rb-header-layout {
42822
+ padding-top: 0.75rem;
42823
+ padding-bottom: 0.75rem;
42824
+ }
42513
42825
 
42514
- /* =================================================================
42826
+ /* =================================================================
42515
42827
  Header Shrink-on-Scroll
42516
42828
 
42517
42829
  Only applies when .rb-header-shrink is present AND user has scrolled.
42518
42830
  No changes until scroll - shrink header = non-shrink header initially.
42519
42831
  ================================================================= */
42520
42832
 
42521
- /* Scrolled state - reduce padding */
42522
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
42523
- padding-top: 0.5rem;
42524
- padding-bottom: 0.5rem;
42525
- }
42833
+ /* Scrolled state - reduce padding */
42834
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
42835
+ padding-top: 0.5rem;
42836
+ padding-bottom: 0.5rem;
42837
+ }
42526
42838
 
42527
- /* Vertical variants get gentler reduction
42839
+ /* Vertical variants get gentler reduction
42528
42840
  Note: Both classes are on Section, rb-header-layout on inner div */
42529
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-centered .rb-header-layout,
42530
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-editorial .rb-header-layout {
42531
- padding-top: 0.75rem;
42532
- padding-bottom: 0.75rem;
42533
- }
42841
+ :where(.theme-scope)
42842
+ .rb-header-shrink.header-scrolled.header-variant-centered
42843
+ .rb-header-layout {
42844
+ padding-top: 0.75rem;
42845
+ padding-bottom: 0.75rem;
42846
+ }
42534
42847
 
42535
- /* Floating variant */
42536
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-floating .rb-header-layout {
42537
- padding-top: 0.25rem;
42538
- padding-bottom: 0.25rem;
42539
- }
42848
+ /* Floating variant */
42849
+ :where(.theme-scope)
42850
+ .rb-header-shrink.header-scrolled.header-variant-floating
42851
+ .rb-header-layout {
42852
+ padding-top: 0.25rem;
42853
+ padding-bottom: 0.25rem;
42854
+ }
42540
42855
 
42541
- /* =================================================================
42856
+ /* =================================================================
42542
42857
  Logo & Title Sizing
42543
42858
 
42544
42859
  Font sizes controlled here, not via utility classes, so shrink
42545
42860
  transitions work (utility classes would override :where()).
42546
42861
  ================================================================= */
42547
42862
 
42548
- /* Logo image sizing */
42549
- :where(.theme-scope) .rb-header-logo-sm {
42550
- height: 2.5rem;
42551
- transition: height 300ms var(--motion-ease, ease);
42552
- }
42553
- :where(.theme-scope) .rb-header-logo-lg {
42554
- height: 3rem;
42555
- transition: height 300ms var(--motion-ease, ease);
42556
- }
42863
+ /* Logo image sizing */
42864
+ :where(.theme-scope) .rb-header-logo-sm {
42865
+ height: 2.5rem;
42866
+ transition: height 300ms var(--motion-ease, ease);
42867
+ }
42868
+ :where(.theme-scope) .rb-header-logo-lg {
42869
+ height: 3rem;
42870
+ transition: height 300ms var(--motion-ease, ease);
42871
+ }
42557
42872
 
42558
- /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
42559
- :where(.theme-scope) .header-logo-text {
42560
- font-size: 1.125rem; /* matches rb-text-lg */
42561
- line-height: 1.75rem;
42562
- transition: font-size 300ms var(--motion-ease, ease);
42563
- }
42873
+ /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
42874
+ :where(.theme-scope) .header-logo-text {
42875
+ font-size: 1.125rem; /* matches rb-text-lg */
42876
+ line-height: 1.75rem;
42877
+ transition: font-size 300ms var(--motion-ease, ease);
42878
+ }
42564
42879
 
42565
- /* Mobile: reduce site title size (~30%) to keep header compact */
42566
- @container rb-site (max-width: 767px) {
42880
+ /* Mobile: reduce site title size (~30%) to keep header compact */
42881
+ @container rb-site (max-width: 767px) {
42567
42882
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
42568
42883
  :where(.theme-scope) .header-logo-text {
42569
- font-size: 0.8rem;
42570
- line-height: 1.25rem;
42571
- }
42884
+ font-size: 0.8rem;
42885
+ line-height: 1.25rem;
42886
+ }
42572
42887
 
42573
- :where(.theme-scope) .header-variant-centered .header-logo-text,
42574
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
42575
- font-size: 0.875rem;
42576
- line-height: 1.25rem;
42577
- }
42888
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
42889
+ font-size: 0.875rem;
42890
+ line-height: 1.25rem;
42891
+ }
42578
42892
  }
42579
42893
  }
42580
42894
 
42581
- /* Centered/editorial variants use larger title */
42582
- :where(.theme-scope) .header-variant-centered .header-logo-text,
42583
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
42584
- font-size: 1.25rem; /* matches rb-text-xl */
42585
- line-height: 1.75rem;
42586
- }
42895
+ /* Centered variant uses larger title */
42896
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
42897
+ font-size: 1.25rem; /* matches rb-text-xl */
42898
+ line-height: 1.75rem;
42899
+ }
42587
42900
 
42588
- /* =================================================================
42901
+ /* =================================================================
42589
42902
  Shrink on Scroll - Logo & Title
42590
42903
  ================================================================= */
42591
42904
 
42592
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
42593
- height: 2rem;
42594
- }
42595
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
42596
- height: 2.5rem;
42597
- }
42598
- :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
42599
- font-size: 0.875rem;
42600
- }
42905
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
42906
+ height: 2rem;
42907
+ }
42908
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
42909
+ height: 2.5rem;
42910
+ }
42911
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
42912
+ font-size: 0.875rem;
42913
+ }
42601
42914
 
42602
- @container rb-site (max-width: 767px) {
42915
+ @container rb-site (max-width: 767px) {
42603
42916
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
42604
42917
  :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
42605
- font-size: 0.75rem;
42606
- }
42918
+ font-size: 0.75rem;
42919
+ }
42607
42920
  }
42608
42921
  }
42609
42922
 
42610
- /* =================================================================
42923
+ /* =================================================================
42611
42924
  Accessibility: Reduced Motion
42612
42925
  ================================================================= */
42613
42926
 
42614
- @media (prefers-reduced-motion: reduce) {
42615
- :where(.theme-scope) .rb-header-layout,
42616
- :where(.theme-scope) .rb-header-logo-sm,
42617
- :where(.theme-scope) .rb-header-logo-lg,
42618
- :where(.theme-scope) .header-logo-text {
42619
- transition: none;
42927
+ @media (prefers-reduced-motion: reduce) {
42928
+ :where(.theme-scope) .rb-header-layout,
42929
+ :where(.theme-scope) .rb-header-logo-sm,
42930
+ :where(.theme-scope) .rb-header-logo-lg,
42931
+ :where(.theme-scope) .header-logo-text {
42932
+ transition: none;
42933
+ }
42620
42934
  }
42621
- }
42622
42935
 
42623
- /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
42624
- :where(.theme-scope) .nav-underline-grow {
42625
- position: relative;
42626
- overflow: visible;
42627
- }
42628
- :where(.theme-scope) .nav-underline-grow::after {
42629
- content: "";
42630
- position: absolute;
42631
- left: 0;
42632
- bottom: var(--nav-underline-offset, -0.35em);
42633
- width: 100%;
42634
- height: 2px;
42635
- background-color: currentColor;
42636
- transform: scaleX(0);
42637
- transform-origin: left center;
42638
- transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
42639
- }
42640
- :where(.theme-scope) .nav-underline-grow:hover::after,
42641
- :where(.theme-scope)
42642
- .nav-underline-grow.nav-underline-active[data-active="true"]::after {
42643
- transform: scaleX(1);
42644
- }
42645
- :where(.theme-scope) .nav-underline-offset-tight {
42646
- --nav-underline-offset: -0.2em;
42647
- }
42648
- :where(.theme-scope) .nav-underline-offset-normal {
42649
- --nav-underline-offset: -0.3em;
42650
- }
42651
- :where(.theme-scope) .nav-underline-offset-loose {
42652
- --nav-underline-offset: -0.45em;
42653
- }
42936
+ /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
42937
+ :where(.theme-scope) .nav-underline-grow {
42938
+ position: relative;
42939
+ overflow: visible;
42940
+ }
42941
+ :where(.theme-scope) .nav-underline-grow::after {
42942
+ content: '';
42943
+ position: absolute;
42944
+ left: 0;
42945
+ bottom: var(--nav-underline-offset, -0.35em);
42946
+ width: 100%;
42947
+ height: 2px;
42948
+ background-color: currentColor;
42949
+ transform: scaleX(0);
42950
+ transform-origin: left center;
42951
+ transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
42952
+ }
42953
+ :where(.theme-scope) .nav-underline-grow:hover::after,
42954
+ :where(.theme-scope)
42955
+ .nav-underline-grow.nav-underline-active[data-active='true']::after {
42956
+ transform: scaleX(1);
42957
+ }
42958
+ :where(.theme-scope) .nav-underline-offset-tight {
42959
+ --nav-underline-offset: -0.2em;
42960
+ }
42961
+ :where(.theme-scope) .nav-underline-offset-normal {
42962
+ --nav-underline-offset: -0.3em;
42963
+ }
42964
+ :where(.theme-scope) .nav-underline-offset-loose {
42965
+ --nav-underline-offset: -0.45em;
42966
+ }
42654
42967
 
42655
- :where(.theme-scope) .card-surface {
42656
- background: rgb(var(--tb-surface));
42657
- color: rgb(var(--tb-onSurface, var(--tb-text)));
42658
- border: 1px solid rgb(var(--tb-border));
42659
- border-radius: var(--radius-card);
42660
- box-shadow: var(--shadow-elev);
42661
- }
42662
- :where(.theme-scope) .media-rounded {
42663
- border-radius: var(--radius-card);
42664
- }
42968
+ :where(.theme-scope) .card-surface {
42969
+ background: rgb(var(--tb-surface));
42970
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
42971
+ border: 1px solid rgb(var(--tb-border));
42972
+ border-radius: var(--radius-card);
42973
+ box-shadow: var(--shadow-elev);
42974
+ }
42975
+ :where(.theme-scope) .media-rounded {
42976
+ border-radius: var(--radius-card);
42977
+ }
42665
42978
 
42666
- :where(.theme-scope) .is-placeholder::after {
42667
- content: "Placeholder";
42668
- position: absolute;
42669
- top: 0.5rem;
42670
- left: 0.5rem;
42671
- font-size: 11px;
42672
- background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
42673
- color: rgb(var(--tb-text));
42674
- padding: 0.15rem 0.35rem;
42675
- border-radius: 4px;
42676
- opacity: 0.85;
42677
- }
42979
+ :where(.theme-scope) .is-placeholder::after {
42980
+ content: 'Placeholder';
42981
+ position: absolute;
42982
+ top: 0.5rem;
42983
+ left: 0.5rem;
42984
+ font-size: 11px;
42985
+ background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
42986
+ color: rgb(var(--tb-text));
42987
+ padding: 0.15rem 0.35rem;
42988
+ border-radius: 4px;
42989
+ opacity: 0.85;
42990
+ }
42678
42991
 
42679
- /* Status badges - theme-aware styling for capacity indicators */
42680
- :where(.theme-scope) .badge-status {
42681
- display: inline-flex;
42682
- align-items: center;
42683
- padding: 0.125rem 0.625rem;
42684
- border-radius: 9999px;
42685
- font-size: 0.75rem;
42686
- font-weight: 500;
42687
- line-height: 1.25rem;
42688
- }
42992
+ /* Status badges - theme-aware styling for capacity indicators */
42993
+ :where(.theme-scope) .badge-status {
42994
+ display: inline-flex;
42995
+ align-items: center;
42996
+ padding: 0.125rem 0.625rem;
42997
+ border-radius: 9999px;
42998
+ font-size: 0.75rem;
42999
+ font-weight: 500;
43000
+ line-height: 1.25rem;
43001
+ }
42689
43002
 
42690
- /* All badges use a subtle theme-aware style by default */
42691
- :where(.theme-scope) .badge-status-available {
42692
- background-color: rgba(var(--tb-secondary), 0.15);
42693
- color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
42694
- }
43003
+ /* All badges use a subtle theme-aware style by default */
43004
+ :where(.theme-scope) .badge-status-available {
43005
+ background-color: rgba(var(--tb-secondary), 0.15);
43006
+ color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
43007
+ }
42695
43008
 
42696
- :where(.theme-scope) .badge-status-low {
42697
- background-color: rgba(var(--tb-accent), 0.15);
42698
- color: rgb(var(--tb-accent-700, var(--tb-accent)));
42699
- }
43009
+ :where(.theme-scope) .badge-status-low {
43010
+ background-color: rgba(var(--tb-accent), 0.15);
43011
+ color: rgb(var(--tb-accent-700, var(--tb-accent)));
43012
+ }
42700
43013
 
42701
- :where(.theme-scope) .badge-status-sold-out {
42702
- background-color: rgba(var(--tb-text), 0.1);
42703
- color: rgb(var(--tb-mutedText));
42704
- }
43014
+ :where(.theme-scope) .badge-status-sold-out {
43015
+ background-color: rgba(var(--tb-text), 0.1);
43016
+ color: rgb(var(--tb-mutedText));
43017
+ }
42705
43018
 
42706
- /* Event list empty state - theme-aware */
42707
- :where(.theme-scope) .event-list-empty {
42708
- background-color: rgb(var(--tb-surface));
42709
- color: rgb(var(--tb-onSurface, var(--tb-text)));
42710
- border-color: rgb(var(--tb-border));
42711
- }
43019
+ /* Event list empty state - theme-aware */
43020
+ :where(.theme-scope) .event-list-empty {
43021
+ background-color: rgb(var(--tb-surface));
43022
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
43023
+ border-color: rgb(var(--tb-border));
43024
+ }
42712
43025
  } /* end @layer rb-theme */
42713
43026
 
42714
43027
  @keyframes accordion-down {
@@ -49736,7 +50049,9 @@ async function Layout({
49736
50049
  throw new Error("Layout: must provide either siteData or client");
49737
50050
  }
49738
50051
  if (!siteId && !slug && !domain) {
49739
- throw new Error("Layout: must provide siteId, slug, or domain when using client");
50052
+ throw new Error(
50053
+ "Layout: must provide siteId, slug, or domain when using client"
50054
+ );
49740
50055
  }
49741
50056
  siteData = await client.getSite({ id: siteId, slug, domain });
49742
50057
  }
@@ -49753,7 +50068,11 @@ async function Layout({
49753
50068
  checkoutHref: "/checkout"
49754
50069
  };
49755
50070
  const menuViewModel = buildMenu(navigation, routes, navigationOptions);
49756
- const footerMenuViewModel = buildFooterMenu(navigation, routes, navigationOptions);
50071
+ const footerMenuViewModel = buildFooterMenu(
50072
+ navigation,
50073
+ routes,
50074
+ navigationOptions
50075
+ );
49757
50076
  const logoViewModel = buildLogo(layout.logo ?? null, site.title);
49758
50077
  const headerData = {
49759
50078
  menu: menuViewModel,
@@ -49840,10 +50159,13 @@ async function Layout({
49840
50159
  }
49841
50160
  ) : null;
49842
50161
  if (footerPlan.renderFooterBlocks && !footerBlocksElement && process.env.NODE_ENV !== "production") {
49843
- console.debug("[sdk] Footer mode renders blocks, but footerBlocks is empty/missing", {
49844
- siteId: site.id,
49845
- mode: footerPlan.mode
49846
- });
50162
+ console.debug(
50163
+ "[sdk] Footer mode renders blocks, but footerBlocks is empty/missing",
50164
+ {
50165
+ siteId: site.id,
50166
+ mode: footerPlan.mode
50167
+ }
50168
+ );
49847
50169
  }
49848
50170
  const defaultFooterElement = footerPlan.renderDefaultFooter ? renderBlock(siteFooterManifest, layout.footer, {
49849
50171
  theme: themeRuntime.tokens,