@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
@@ -6732,6 +6732,11 @@ function toLocationCoordinates(value) {
6732
6732
  };
6733
6733
  }
6734
6734
 
6735
+ // ../core/src/assert-never.ts
6736
+ function assertNever(value, message = "Unexpected variant") {
6737
+ throw new Error(`${message}: ${String(value)}`);
6738
+ }
6739
+
6735
6740
  // ../core/src/planner.ts
6736
6741
  var systemPlanningClock = {
6737
6742
  now: () => Date.now()
@@ -7782,7 +7787,7 @@ var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
7782
7787
  var DATE_PATTERN = /^(?<year>[1-9]\d{3})-(?<month>\d{2})-(?<day>\d{2})$/;
7783
7788
  var TIME_PATTERN = /^(?<hours>[01]\d|2[0-3]):(?<minutes>[0-5]\d)$/;
7784
7789
  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)$/;
7785
- function assertNever(value) {
7790
+ function assertNever2(value) {
7786
7791
  throw new Error(`Unhandled field validation variant: ${JSON.stringify(value)}`);
7787
7792
  }
7788
7793
  function validationContext(options = {}) {
@@ -7843,7 +7848,7 @@ function fieldIssueToMessage(issue2) {
7843
7848
  case "invalidReference":
7844
7849
  return `${issue2.label} must reference a valid item`;
7845
7850
  default:
7846
- return assertNever(issue2);
7851
+ return assertNever2(issue2);
7847
7852
  }
7848
7853
  }
7849
7854
  function pluralize(label, count) {
@@ -7958,7 +7963,7 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
7958
7963
  case "entryPicker":
7959
7964
  return makePlan("passthrough", "unknown", field, path, false, []);
7960
7965
  default:
7961
- return assertNever(field);
7966
+ return assertNever2(field);
7962
7967
  }
7963
7968
  }
7964
7969
  function deriveFieldValidationPlans(fields3, parentPath = []) {
@@ -8031,7 +8036,7 @@ function resolveSelectConstraintSource(field) {
8031
8036
  case "sdk":
8032
8037
  return { kind: "runtime", source: source.kind };
8033
8038
  default:
8034
- return assertNever(source);
8039
+ return assertNever2(source);
8035
8040
  }
8036
8041
  }
8037
8042
  function normalizeStoredContentValues(plans, content, options = {}) {
@@ -8066,7 +8071,7 @@ function normalizeStoredFieldValueWithContext(plan, value, ctx) {
8066
8071
  case "passthrough":
8067
8072
  return normalizeFieldValue(plan, value, ctx);
8068
8073
  default:
8069
- return assertNever(plan);
8074
+ return assertNever2(plan);
8070
8075
  }
8071
8076
  }
8072
8077
  function normalizeStoredObjectChildren(children, value, ctx) {
@@ -8117,7 +8122,7 @@ function normalizeFieldValue(plan, value, ctx) {
8117
8122
  case "passthrough":
8118
8123
  return value;
8119
8124
  default:
8120
- return assertNever(plan);
8125
+ return assertNever2(plan);
8121
8126
  }
8122
8127
  }
8123
8128
  function normalizeObjectChildren(children, value, ctx) {
@@ -8178,7 +8183,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
8178
8183
  case "passthrough":
8179
8184
  return [];
8180
8185
  default:
8181
- return assertNever(plan);
8186
+ return assertNever2(plan);
8182
8187
  }
8183
8188
  }
8184
8189
  function shouldRequireValue(plan, value, ctx) {
@@ -8209,15 +8214,15 @@ function validateStringConstraint(plan, constraint, value) {
8209
8214
  case "maxLength":
8210
8215
  return value.length > constraint.maximum ? [issue(plan, "tooLong", { maximum: constraint.maximum })] : [];
8211
8216
  case "emailFormat":
8212
- return z6.email().safeParse(value).success ? [] : [issue(plan, "invalidEmail")];
8217
+ return isCanonicalEmailValue(value) ? [] : [issue(plan, "invalidEmail")];
8213
8218
  case "phoneFormat":
8214
- return TEL_RE.test(value) ? [] : [issue(plan, "invalidPhone")];
8219
+ return isCanonicalPhoneValue(value) ? [] : [issue(plan, "invalidPhone")];
8215
8220
  case "patternFormat": {
8216
8221
  const re = compilePattern(constraint.pattern);
8217
8222
  return re && !re.test(value) ? [issue(plan, "invalidPattern")] : [];
8218
8223
  }
8219
8224
  case "urlFormat":
8220
- return isValidUrl(value, constraint.allowRelative) ? [] : [issue(plan, "invalidUrl")];
8225
+ return isCanonicalUrlValue(value, { allowRelative: constraint.allowRelative }) ? [] : [issue(plan, "invalidUrl")];
8221
8226
  case "dateFormat":
8222
8227
  return isValidDateString(value) ? [] : [issue(plan, "invalidDate")];
8223
8228
  case "timeFormat":
@@ -8227,7 +8232,7 @@ function validateStringConstraint(plan, constraint, value) {
8227
8232
  case "slugFormat":
8228
8233
  return SLUG_PATTERN.test(value) ? [] : [issue(plan, "invalidSlug")];
8229
8234
  default:
8230
- return assertNever(constraint);
8235
+ return assertNever2(constraint);
8231
8236
  }
8232
8237
  }
8233
8238
  function validateNumberPlan(plan, value) {
@@ -8244,7 +8249,7 @@ function validateNumberConstraint(plan, constraint, value) {
8244
8249
  case "numberMax":
8245
8250
  return value > constraint.maximum ? [issue(plan, "tooLarge", { maximum: constraint.maximum })] : [];
8246
8251
  default:
8247
- return assertNever(constraint);
8252
+ return assertNever2(constraint);
8248
8253
  }
8249
8254
  }
8250
8255
  function validateSelectPlan(plan, value) {
@@ -8274,7 +8279,7 @@ function validateRepeaterPlan(plan, value, ctx) {
8274
8279
  })
8275
8280
  ] : [];
8276
8281
  default:
8277
- return assertNever(constraint);
8282
+ return assertNever2(constraint);
8278
8283
  }
8279
8284
  });
8280
8285
  return [...constraintIssues, ...value.flatMap((item, index) => validateRepeaterItem(plan, item, index, ctx))];
@@ -8336,7 +8341,7 @@ function rebaseFieldPlanPath(plan, fromPrefix, toPrefix) {
8336
8341
  path
8337
8342
  };
8338
8343
  default:
8339
- return assertNever(plan);
8344
+ return assertNever2(plan);
8340
8345
  }
8341
8346
  }
8342
8347
  function rebaseFieldPath(path, fromPrefix, toPrefix) {
@@ -8423,7 +8428,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
8423
8428
  zodCtx.addIssue({ ...issuePath, code: "custom", message });
8424
8429
  return;
8425
8430
  default:
8426
- assertNever(validationIssue);
8431
+ assertNever2(validationIssue);
8427
8432
  }
8428
8433
  }
8429
8434
  function relativeZodIssuePath(path, rootPath) {
@@ -8439,9 +8444,15 @@ function compilePattern(pattern) {
8439
8444
  function isValidNumber(value) {
8440
8445
  return typeof value === "number" && Number.isFinite(value);
8441
8446
  }
8442
- function isValidUrl(value, allowRelative) {
8447
+ function isCanonicalEmailValue(value) {
8448
+ return z6.email().safeParse(value).success;
8449
+ }
8450
+ function isCanonicalPhoneValue(value) {
8451
+ return TEL_RE.test(value);
8452
+ }
8453
+ function isCanonicalUrlValue(value, options = {}) {
8443
8454
  if (!value) return false;
8444
- if (allowRelative && value.startsWith("/")) return true;
8455
+ if (options.allowRelative === true && value.startsWith("/")) return true;
8445
8456
  try {
8446
8457
  const parsed = new URL(value);
8447
8458
  return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
@@ -13313,8 +13324,19 @@ var headingTypographyStyleSchema = typographyStyleSchema.extend({
13313
13324
  colorToken: themeColorTokenSchema.nullable().optional()
13314
13325
  });
13315
13326
  var proseLinkUnderlineStyleSchema = z24.enum(["solid", "dotted", "dashed"]);
13316
- var proseLinkUnderlineThicknessSchema = z24.enum(["auto", "fromFont", "thin", "medium", "thick"]);
13317
- var proseLinkUnderlineOffsetSchema = z24.enum(["auto", "tight", "normal", "loose"]);
13327
+ var proseLinkUnderlineThicknessSchema = z24.enum([
13328
+ "auto",
13329
+ "fromFont",
13330
+ "thin",
13331
+ "medium",
13332
+ "thick"
13333
+ ]);
13334
+ var proseLinkUnderlineOffsetSchema = z24.enum([
13335
+ "auto",
13336
+ "tight",
13337
+ "normal",
13338
+ "loose"
13339
+ ]);
13318
13340
  var proseLinkStyleSchema = z24.object({
13319
13341
  colorToken: themeColorTokenSchema.optional(),
13320
13342
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -13325,7 +13347,14 @@ var proseLinkStyleSchema = z24.object({
13325
13347
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
13326
13348
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
13327
13349
  });
13328
- var semanticSpacingSchema = z24.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
13350
+ var semanticSpacingSchema = z24.enum([
13351
+ "none",
13352
+ "compact",
13353
+ "cozy",
13354
+ "medium",
13355
+ "comfortable",
13356
+ "spacious"
13357
+ ]);
13329
13358
  var boxRoundedSchema = z24.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
13330
13359
  var boxBackgroundOverlaySchema = z24.object({
13331
13360
  type: z24.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -13469,9 +13498,17 @@ var inputStyle = z24.object({
13469
13498
  focus: z24.enum(["glow", "ring", "underline"]),
13470
13499
  label: z24.enum(["inside", "above"])
13471
13500
  });
13472
- var headerVariant = z24.enum(["classic", "centered", "transparent", "floating", "editorial"]);
13501
+ var headerVariant = z24.enum(["classic", "centered", "transparent", "floating"]);
13473
13502
  var headerPositioning = z24.enum(["static", "sticky", "fixed"]);
13474
- var headerNavStyle = z24.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
13503
+ var headerNavStyle = z24.enum([
13504
+ "minimal",
13505
+ "underline",
13506
+ "underline-grow",
13507
+ "capsule",
13508
+ "scale",
13509
+ "frosted",
13510
+ "solid"
13511
+ ]);
13475
13512
  var navFontWeight = z24.enum(["regular", "medium", "semibold", "bold"]);
13476
13513
  var headerMaxWidth = z24.enum(["container", "full"]);
13477
13514
  var headerContainerSchema = z24.object({
@@ -13519,8 +13556,22 @@ var dropdownStyleSchema = z24.object({
13519
13556
  textSize: z24.enum(["xs", "sm", "base", "lg"]).optional()
13520
13557
  // optional = no override (browser default)
13521
13558
  }).optional();
13522
- var headerCtaGapSchema = z24.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
13523
- var headerCtaTreatmentSchema = z24.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
13559
+ var headerCtaGapSchema = z24.enum([
13560
+ "none",
13561
+ "tight",
13562
+ "compact",
13563
+ "default",
13564
+ "relaxed",
13565
+ "spacious"
13566
+ ]);
13567
+ var headerCtaTreatmentSchema = z24.enum([
13568
+ "default",
13569
+ "primary",
13570
+ "secondary",
13571
+ "inverted",
13572
+ "outline",
13573
+ "ghost"
13574
+ ]);
13524
13575
  var navContainerSchema = z24.object({
13525
13576
  type: z24.enum(["none", "pill", "glass"]).default("none"),
13526
13577
  tint: z24.string().nullable().optional(),
@@ -13575,7 +13626,14 @@ var footerMaxWidth = z24.enum(["container", "full"]);
13575
13626
  var footerMode = z24.enum(["default", "blocks", "default+blocks", "none"]);
13576
13627
  var footerNavLayoutMode = z24.enum(["stack", "inline", "inline-wrap"]);
13577
13628
  var footerNavLayoutAlign = z24.enum(["start", "center", "end", "space-between"]);
13578
- var footerSpacing = z24.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
13629
+ var footerSpacing = z24.enum([
13630
+ "none",
13631
+ "tight",
13632
+ "compact",
13633
+ "default",
13634
+ "relaxed",
13635
+ "spacious"
13636
+ ]);
13579
13637
  var footerLogoPlacement = z24.enum(["left", "right", "above", "below"]);
13580
13638
  var footerLogoSize = z24.enum(["sm", "md", "lg", "xl"]);
13581
13639
  var footerLogoMaxHeight = z24.enum(["sm", "md", "lg", "xl"]);
@@ -13640,7 +13698,12 @@ var footerSchema = z24.object({
13640
13698
  logo: footerLogoSchema.optional(),
13641
13699
  bottomBar: footerBottomBarSchema.optional()
13642
13700
  });
13643
- var containerPaddingPresetSchema = z24.enum(["tight", "compact", "default", "relaxed"]);
13701
+ var containerPaddingPresetSchema = z24.enum([
13702
+ "tight",
13703
+ "compact",
13704
+ "default",
13705
+ "relaxed"
13706
+ ]);
13644
13707
  var layoutSchema = z24.object({
13645
13708
  containerPadding: z24.object({
13646
13709
  mobile: containerPaddingPresetSchema.optional(),
@@ -13648,8 +13711,24 @@ var layoutSchema = z24.object({
13648
13711
  desktop: containerPaddingPresetSchema.optional()
13649
13712
  }).optional()
13650
13713
  }).optional();
13651
- var heroTypographySizeSchema = z24.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
13652
- var heroTypographyLineHeightSchema = z24.enum(["tight", "snug", "normal", "relaxed"]);
13714
+ var heroTypographySizeSchema = z24.enum([
13715
+ "sm",
13716
+ "base",
13717
+ "lg",
13718
+ "xl",
13719
+ "2xl",
13720
+ "3xl",
13721
+ "4xl",
13722
+ "5xl",
13723
+ "6xl",
13724
+ "editorial"
13725
+ ]);
13726
+ var heroTypographyLineHeightSchema = z24.enum([
13727
+ "tight",
13728
+ "snug",
13729
+ "normal",
13730
+ "relaxed"
13731
+ ]);
13653
13732
  var heroResponsiveTypographySchema = z24.object({
13654
13733
  headlineSize: heroTypographySizeSchema.optional(),
13655
13734
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -14203,16 +14282,6 @@ var headerLayoutCatalog = [
14203
14282
  maxRecommendedNavItems: 5,
14204
14283
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
14205
14284
  },
14206
- {
14207
- id: asHeaderLayoutId("editorial"),
14208
- label: "Editorial",
14209
- description: "A composed, magazine-like stacked header treatment.",
14210
- structure: "editorial-stack",
14211
- variant: "editorial",
14212
- defaultPositioning: "static",
14213
- shrinkOnScroll: false,
14214
- maxRecommendedNavItems: 6
14215
- },
14216
14285
  {
14217
14286
  id: asHeaderLayoutId("floating"),
14218
14287
  label: "Floating",
@@ -14233,17 +14302,19 @@ var headerStyleCatalog = [
14233
14302
  id: asHeaderStyleId("minimal"),
14234
14303
  label: "Minimal",
14235
14304
  description: "Quiet surface with simple color-change navigation.",
14236
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
14305
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14237
14306
  navInteraction: "color-change",
14238
- surface: "neutral"
14307
+ surface: "neutral",
14308
+ navTypography: "plain"
14239
14309
  },
14240
14310
  {
14241
14311
  id: asHeaderStyleId("fine-line"),
14242
14312
  label: "Fine Line",
14243
14313
  description: "Light surface with a crisp lower rule and underline hover.",
14244
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
14314
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14245
14315
  navInteraction: "underline-grow",
14246
- surface: "bordered"
14316
+ surface: "bordered",
14317
+ navTypography: "plain"
14247
14318
  },
14248
14319
  {
14249
14320
  id: asHeaderStyleId("soft-bar"),
@@ -14251,7 +14322,8 @@ var headerStyleCatalog = [
14251
14322
  description: "Soft tinted surface with gentle pill hover states.",
14252
14323
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14253
14324
  navInteraction: "pill-background",
14254
- surface: "soft"
14325
+ surface: "soft",
14326
+ navTypography: "plain"
14255
14327
  },
14256
14328
  {
14257
14329
  id: asHeaderStyleId("pill-nav"),
@@ -14259,23 +14331,26 @@ var headerStyleCatalog = [
14259
14331
  description: "A calm pill navigation rail over a neutral header.",
14260
14332
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14261
14333
  navInteraction: "pill-background",
14262
- surface: "soft"
14334
+ surface: "soft",
14335
+ navTypography: "plain"
14263
14336
  },
14264
14337
  {
14265
14338
  id: asHeaderStyleId("brand-bar"),
14266
14339
  label: "Brand Bar",
14267
14340
  description: "Solid brand surface with high-contrast navigation.",
14268
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
14341
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14269
14342
  navInteraction: "color-change",
14270
- surface: "brand-solid"
14343
+ surface: "brand-solid",
14344
+ navTypography: "brand-caps"
14271
14345
  },
14272
14346
  {
14273
14347
  id: asHeaderStyleId("brand-underline"),
14274
14348
  label: "Brand Underline",
14275
14349
  description: "Brand surface with underline-grow navigation.",
14276
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
14350
+ supportedLayoutIds: supportedLayouts(["classic"]),
14277
14351
  navInteraction: "underline-grow",
14278
- surface: "brand-solid"
14352
+ surface: "brand-solid",
14353
+ navTypography: "brand-caps"
14279
14354
  },
14280
14355
  {
14281
14356
  id: asHeaderStyleId("brand-pill"),
@@ -14283,41 +14358,44 @@ var headerStyleCatalog = [
14283
14358
  description: "Solid brand surface with rounded active and hover states.",
14284
14359
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
14285
14360
  navInteraction: "pill-background",
14286
- surface: "brand-solid"
14361
+ surface: "brand-solid",
14362
+ navTypography: "brand-caps"
14287
14363
  },
14288
14364
  {
14289
- id: asHeaderStyleId("editorial-line"),
14290
- label: "Editorial Line",
14365
+ id: asHeaderStyleId("serif-line"),
14366
+ label: "Serif Line",
14291
14367
  description: "Typographic logo treatment with understated underline navigation.",
14292
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
14368
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14293
14369
  navInteraction: "underline-grow",
14294
- surface: "bordered"
14370
+ surface: "bordered",
14371
+ navTypography: "heading"
14295
14372
  },
14296
14373
  {
14297
14374
  id: asHeaderStyleId("flat-tabs"),
14298
14375
  label: "Flat Tabs",
14299
14376
  description: "Flat block hover and active states with a Swiss utility feel.",
14300
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
14377
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
14301
14378
  navInteraction: "flat-block",
14302
- surface: "bordered"
14379
+ surface: "bordered",
14380
+ navTypography: "quiet-caps"
14303
14381
  },
14304
14382
  {
14305
14383
  id: asHeaderStyleId("glass"),
14306
14384
  label: "Glass",
14307
- description: "Floating translucent chrome with frosted navigation backing.",
14308
- supportedLayoutIds: supportedLayouts(["floating"]),
14385
+ description: "Translucent chrome with frosted navigation backing.",
14386
+ supportedLayoutIds: supportedLayouts(["classic", "floating"]),
14309
14387
  navInteraction: "glass-backed",
14310
14388
  surface: "floating",
14311
- requiresFloatingLayout: true
14389
+ navTypography: "plain"
14312
14390
  },
14313
14391
  {
14314
14392
  id: asHeaderStyleId("minimal-surface"),
14315
- label: "Minimal Surface",
14316
- description: "Floating chrome with a restrained translucent surface.",
14393
+ label: "Clear Split",
14394
+ description: "Floating logo with transparent navigation and no shared shell.",
14317
14395
  supportedLayoutIds: supportedLayouts(["floating"]),
14318
14396
  navInteraction: "color-change",
14319
14397
  surface: "floating",
14320
- requiresFloatingLayout: true
14398
+ navTypography: "plain"
14321
14399
  },
14322
14400
  {
14323
14401
  id: asHeaderStyleId("soft-shell"),
@@ -14326,7 +14404,25 @@ var headerStyleCatalog = [
14326
14404
  supportedLayoutIds: supportedLayouts(["floating"]),
14327
14405
  navInteraction: "pill-background",
14328
14406
  surface: "floating",
14329
- requiresFloatingLayout: true
14407
+ navTypography: "plain"
14408
+ },
14409
+ {
14410
+ id: asHeaderStyleId("split-glass"),
14411
+ label: "Split Glass",
14412
+ description: "Logo floats independently while the navigation sits in a glass rail.",
14413
+ supportedLayoutIds: supportedLayouts(["floating"]),
14414
+ navInteraction: "glass-backed",
14415
+ surface: "floating",
14416
+ navTypography: "quiet-caps"
14417
+ },
14418
+ {
14419
+ id: asHeaderStyleId("split-pill"),
14420
+ label: "Split Pill",
14421
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
14422
+ supportedLayoutIds: supportedLayouts(["floating"]),
14423
+ navInteraction: "pill-background",
14424
+ surface: "floating",
14425
+ navTypography: "heading"
14330
14426
  }
14331
14427
  ];
14332
14428
  var headerLayoutsById = new Map(
@@ -14340,13 +14436,14 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
14340
14436
  asHeaderLayoutId("classic"),
14341
14437
  headerStyleRepairChain([
14342
14438
  "minimal",
14439
+ "glass",
14343
14440
  "fine-line",
14344
14441
  "soft-bar",
14345
14442
  "pill-nav",
14346
14443
  "brand-bar",
14347
14444
  "brand-underline",
14348
14445
  "brand-pill",
14349
- "editorial-line",
14446
+ "serif-line",
14350
14447
  "flat-tabs"
14351
14448
  ])
14352
14449
  ],
@@ -14359,19 +14456,7 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
14359
14456
  "pill-nav",
14360
14457
  "brand-bar",
14361
14458
  "brand-pill",
14362
- "editorial-line",
14363
- "flat-tabs"
14364
- ])
14365
- ],
14366
- [
14367
- asHeaderLayoutId("editorial"),
14368
- headerStyleRepairChain([
14369
- "minimal",
14370
- "fine-line",
14371
- "soft-bar",
14372
- "brand-bar",
14373
- "brand-underline",
14374
- "editorial-line",
14459
+ "serif-line",
14375
14460
  "flat-tabs"
14376
14461
  ])
14377
14462
  ],
@@ -14380,6 +14465,8 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
14380
14465
  headerStyleRepairChain([
14381
14466
  "glass",
14382
14467
  "minimal-surface",
14468
+ "split-glass",
14469
+ "split-pill",
14383
14470
  "soft-shell",
14384
14471
  "brand-pill"
14385
14472
  ])
@@ -14388,20 +14475,63 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
14388
14475
  function headerStyleRepairChain(values) {
14389
14476
  return values.map(asHeaderStyleId);
14390
14477
  }
14391
- var headerStyleRepairOrder = /* @__PURE__ */ new Map([
14392
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
14393
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
14394
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
14395
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
14396
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
14397
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
14398
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
14399
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
14400
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
14401
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
14402
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
14403
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
14404
- ]);
14478
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
14479
+ [
14480
+ [
14481
+ asHeaderStyleId("brand-bar"),
14482
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
14483
+ ],
14484
+ [
14485
+ asHeaderStyleId("brand-underline"),
14486
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
14487
+ ],
14488
+ [
14489
+ asHeaderStyleId("brand-pill"),
14490
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
14491
+ ],
14492
+ [
14493
+ asHeaderStyleId("pill-nav"),
14494
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
14495
+ ],
14496
+ [
14497
+ asHeaderStyleId("flat-tabs"),
14498
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
14499
+ ],
14500
+ [
14501
+ asHeaderStyleId("serif-line"),
14502
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
14503
+ ],
14504
+ [
14505
+ asHeaderStyleId("glass"),
14506
+ headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
14507
+ ],
14508
+ [
14509
+ asHeaderStyleId("soft-shell"),
14510
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
14511
+ ],
14512
+ [
14513
+ asHeaderStyleId("minimal-surface"),
14514
+ headerStyleRepairChain(["minimal-surface", "minimal"])
14515
+ ],
14516
+ [
14517
+ asHeaderStyleId("split-glass"),
14518
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
14519
+ ],
14520
+ [
14521
+ asHeaderStyleId("split-pill"),
14522
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
14523
+ ],
14524
+ [
14525
+ asHeaderStyleId("fine-line"),
14526
+ headerStyleRepairChain(["fine-line", "minimal"])
14527
+ ],
14528
+ [
14529
+ asHeaderStyleId("soft-bar"),
14530
+ headerStyleRepairChain(["soft-bar", "minimal"])
14531
+ ],
14532
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
14533
+ ]
14534
+ );
14405
14535
  var legacyHeaderLookAliases = [
14406
14536
  {
14407
14537
  lookId: asHeaderLookId("clean-base"),
@@ -14418,10 +14548,10 @@ var legacyHeaderLookAliases = [
14418
14548
  }
14419
14549
  },
14420
14550
  {
14421
- lookId: asHeaderLookId("editorial-line"),
14551
+ lookId: asHeaderLookId("serif-line"),
14422
14552
  selection: {
14423
- layoutId: asHeaderLayoutId("editorial"),
14424
- styleId: asHeaderStyleId("editorial-line")
14553
+ layoutId: asHeaderLayoutId("centered"),
14554
+ styleId: asHeaderStyleId("serif-line")
14425
14555
  }
14426
14556
  },
14427
14557
  {
@@ -14460,9 +14590,7 @@ var legacyHeaderLookAliases = [
14460
14590
  }
14461
14591
  }
14462
14592
  ];
14463
- var legacyHeaderLookAliasesById = new Map(
14464
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
14465
- );
14593
+ var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
14466
14594
  function getHeaderStyle(id) {
14467
14595
  return headerStylesById.get(id) ?? null;
14468
14596
  }
@@ -14480,10 +14608,12 @@ function resolveLegacyHeaderLookAlias(lookId) {
14480
14608
  return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
14481
14609
  }
14482
14610
  function getCompatibleHeaderStyleIds(layoutId) {
14483
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
14484
- const style = getHeaderStyleOrThrow(styleId);
14485
- return isHeaderStyleCompatibleWithLayout(style, layoutId);
14486
- });
14611
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
14612
+ (styleId) => {
14613
+ const style = getHeaderStyleOrThrow(styleId);
14614
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
14615
+ }
14616
+ );
14487
14617
  }
14488
14618
  function solidBrandHeader(theme) {
14489
14619
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
@@ -14514,8 +14644,14 @@ function solidBrandHeader(theme) {
14514
14644
  borderRadius: "none",
14515
14645
  effects: {
14516
14646
  hover: [
14517
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
14518
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
14647
+ {
14648
+ effectId: "text-color-change",
14649
+ options: { hoverColorToken: "secondary" }
14650
+ },
14651
+ {
14652
+ effectId: "nav-underline",
14653
+ options: { style: "grow", colorToken: "secondary" }
14654
+ }
14519
14655
  ]
14520
14656
  }
14521
14657
  },
@@ -14571,10 +14707,10 @@ function cleanBaseHeader(theme) {
14571
14707
  ctaGap: "default"
14572
14708
  };
14573
14709
  }
14574
- function editorialLineHeader(theme) {
14710
+ function serifLineHeader(theme) {
14575
14711
  return {
14576
14712
  ...baseHeader(theme),
14577
- variant: "editorial",
14713
+ variant: "centered",
14578
14714
  positioning: "sticky",
14579
14715
  shrinkOnScroll: false,
14580
14716
  background: {
@@ -14743,27 +14879,27 @@ var headerLookCatalog = [
14743
14879
  compile: solidBrandHeader
14744
14880
  },
14745
14881
  {
14746
- id: asHeaderLookId("editorial-line"),
14747
- label: "Editorial line",
14748
- visualTreatment: "light-editorial",
14882
+ id: asHeaderLookId("serif-line"),
14883
+ label: "Serif line",
14884
+ visualTreatment: "light-serif",
14749
14885
  layoutBehavior: "sticky",
14750
14886
  configuration: {
14751
- structure: "editorial-stack",
14752
- treatment: "light-editorial",
14887
+ structure: "centered-stack",
14888
+ treatment: "light-serif",
14753
14889
  behavior: "sticky"
14754
14890
  },
14755
14891
  openingRequirement: "none",
14756
14892
  maxRecommendedNavItems: 6,
14757
- compile: editorialLineHeader
14893
+ compile: serifLineHeader
14758
14894
  },
14759
14895
  {
14760
14896
  id: asHeaderLookId("centered-calm"),
14761
14897
  label: "Centered calm",
14762
- visualTreatment: "light-editorial",
14898
+ visualTreatment: "light-serif",
14763
14899
  layoutBehavior: "normal-flow",
14764
14900
  configuration: {
14765
14901
  structure: "centered-stack",
14766
- treatment: "light-editorial",
14902
+ treatment: "light-serif",
14767
14903
  behavior: "normal-flow"
14768
14904
  },
14769
14905
  openingRequirement: "none",
@@ -15309,12 +15445,16 @@ var expressiveUnderlineInputs = {
15309
15445
  }
15310
15446
  };
15311
15447
  function uniqueContentFrameKinds() {
15312
- const kinds = [...new Set(
15313
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
15314
- )];
15448
+ const kinds = [
15449
+ ...new Set(
15450
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
15451
+ )
15452
+ ];
15315
15453
  const firstKind = kinds[0];
15316
15454
  if (!firstKind) {
15317
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
15455
+ throw new Error(
15456
+ "Expected generated design option catalog to expose at least one content frame kind."
15457
+ );
15318
15458
  }
15319
15459
  return [firstKind, ...kinds.slice(1)];
15320
15460
  }
@@ -15324,7 +15464,9 @@ function defineCuratedSiteStyle(input) {
15324
15464
  const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
15325
15465
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
15326
15466
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
15327
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
15467
+ if (!typographyPresetChoices.some(
15468
+ (choice) => choice.id === defaultTypographyPresetId
15469
+ )) {
15328
15470
  throw new Error(
15329
15471
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
15330
15472
  );
@@ -15335,9 +15477,13 @@ function defineCuratedSiteStyle(input) {
15335
15477
  description: input.description,
15336
15478
  generationBrief: input.generationBrief,
15337
15479
  selectionKeywordRules: input.selectionKeywordRules ?? [],
15338
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
15480
+ siteCreatorSelection: input.siteCreatorSelection ?? {
15481
+ kind: "explicit_only"
15482
+ },
15339
15483
  template: {
15340
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
15484
+ id: asDesignSystemTemplateId(
15485
+ `template:${input.id.replace("site-style:", "")}`
15486
+ ),
15341
15487
  name: input.name,
15342
15488
  version: 1,
15343
15489
  tokenRecipes: input.tokenRecipes,
@@ -15355,13 +15501,17 @@ function defineCuratedSiteStyle(input) {
15355
15501
  } : inferredHeaderCuration.defaultHeaderSelection,
15356
15502
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
15357
15503
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
15358
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
15359
- layoutId: asHeaderLayoutId(selection.layoutId),
15360
- styleId: asHeaderStyleId(selection.styleId)
15361
- })),
15504
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
15505
+ (selection) => ({
15506
+ layoutId: asHeaderLayoutId(selection.layoutId),
15507
+ styleId: asHeaderStyleId(selection.styleId)
15508
+ })
15509
+ ),
15362
15510
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
15363
15511
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
15364
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
15512
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
15513
+ asFooterLookId
15514
+ ),
15365
15515
  buttonPersonalityChoices: input.buttonPersonalityChoices,
15366
15516
  paletteVariantChoices: input.paletteVariantChoices,
15367
15517
  typographyPresetChoices,
@@ -15380,7 +15530,7 @@ function headerLayoutChoice(id, note) {
15380
15530
  function headerStyleChoice(id, note) {
15381
15531
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
15382
15532
  }
15383
- function headerLayoutRecordKey(id) {
15533
+ function unbrandHeaderLayoutId(id) {
15384
15534
  return id;
15385
15535
  }
15386
15536
  function uniqueHeaderLayoutChoices(choices) {
@@ -15403,7 +15553,9 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
15403
15553
  return [first, ...choices.slice(1)];
15404
15554
  }
15405
15555
  function inferHeaderCurationFromLegacyLooks(lookIds) {
15406
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
15556
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
15557
+ (selection) => Boolean(selection)
15558
+ );
15407
15559
  const defaultHeaderSelection = selections[0] ?? {
15408
15560
  layoutId: asHeaderLayoutId("classic"),
15409
15561
  styleId: asHeaderStyleId("minimal")
@@ -15414,10 +15566,7 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
15414
15566
  const stylesByLayout = {};
15415
15567
  for (const layoutChoice of layoutChoices) {
15416
15568
  const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
15417
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
15418
- styleChoices,
15419
- layoutChoice.id
15420
- );
15569
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
15421
15570
  }
15422
15571
  return {
15423
15572
  defaultHeaderSelection,
@@ -15472,7 +15621,11 @@ var curatedSiteStyles = [
15472
15621
  motion: "subtle"
15473
15622
  },
15474
15623
  compositionBudget: quietBudget,
15475
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
15624
+ recommendedHeaderLookIds: [
15625
+ "centered-calm",
15626
+ "minimal-transparent",
15627
+ "clean-base"
15628
+ ],
15476
15629
  buttonPersonalityChoices: [
15477
15630
  buttonChoice("soft-pill"),
15478
15631
  buttonChoice("pebble"),
@@ -15501,7 +15654,11 @@ var curatedSiteStyles = [
15501
15654
  motion: "subtle"
15502
15655
  },
15503
15656
  compositionBudget: balancedBudget,
15504
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
15657
+ recommendedHeaderLookIds: [
15658
+ "practical-utility",
15659
+ "brand-solid",
15660
+ "clean-base"
15661
+ ],
15505
15662
  buttonPersonalityChoices: [
15506
15663
  buttonChoice("confident-chip"),
15507
15664
  buttonChoice("soft-pill"),
@@ -15528,7 +15685,11 @@ var curatedSiteStyles = [
15528
15685
  motion: "subtle"
15529
15686
  },
15530
15687
  compositionBudget: balancedBudget,
15531
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
15688
+ recommendedHeaderLookIds: [
15689
+ "serif-line",
15690
+ "minimal-transparent",
15691
+ "centered-calm"
15692
+ ],
15532
15693
  buttonPersonalityChoices: [
15533
15694
  buttonChoice("editorial-link"),
15534
15695
  buttonChoice("soft-pill"),
@@ -15556,7 +15717,11 @@ var curatedSiteStyles = [
15556
15717
  motion: "expressive"
15557
15718
  },
15558
15719
  compositionBudget: balancedBudget,
15559
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
15720
+ recommendedHeaderLookIds: [
15721
+ "brand-solid",
15722
+ "practical-utility",
15723
+ "clean-base"
15724
+ ],
15560
15725
  buttonPersonalityChoices: [
15561
15726
  buttonChoice("pebble"),
15562
15727
  buttonChoice("brushed-wash"),
@@ -15573,7 +15738,10 @@ var curatedSiteStyles = [
15573
15738
  name: "Quiet Luxury",
15574
15739
  description: "Minimal, confident, and refined for premium experiences and private services.",
15575
15740
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
15576
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
15741
+ siteCreatorSelection: {
15742
+ kind: "site_creator_keyword_heuristic",
15743
+ priority: 20
15744
+ },
15577
15745
  selectionKeywordRules: [
15578
15746
  { kind: "word", value: "luxury" },
15579
15747
  { kind: "word", value: "premium" },
@@ -15591,7 +15759,11 @@ var curatedSiteStyles = [
15591
15759
  motion: "none"
15592
15760
  },
15593
15761
  compositionBudget: quietBudget,
15594
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
15762
+ recommendedHeaderLookIds: [
15763
+ "minimal-transparent",
15764
+ "serif-line",
15765
+ "clean-base"
15766
+ ],
15595
15767
  buttonPersonalityChoices: [
15596
15768
  buttonChoice("editorial-link"),
15597
15769
  buttonChoice("confident-chip"),
@@ -15627,7 +15799,11 @@ var curatedSiteStyles = [
15627
15799
  motion: "none"
15628
15800
  },
15629
15801
  compositionBudget: quietBudget,
15630
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
15802
+ recommendedHeaderLookIds: [
15803
+ "practical-utility",
15804
+ "brand-solid",
15805
+ "clean-base"
15806
+ ],
15631
15807
  buttonPersonalityChoices: [
15632
15808
  buttonChoice("confident-chip"),
15633
15809
  buttonChoice("pebble"),
@@ -15654,7 +15830,11 @@ var curatedSiteStyles = [
15654
15830
  motion: "subtle"
15655
15831
  },
15656
15832
  compositionBudget: balancedBudget,
15657
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
15833
+ recommendedHeaderLookIds: [
15834
+ "centered-calm",
15835
+ "minimal-transparent",
15836
+ "clean-base"
15837
+ ],
15658
15838
  buttonPersonalityChoices: [
15659
15839
  buttonChoice("soft-pill"),
15660
15840
  buttonChoice("pebble"),
@@ -15671,7 +15851,10 @@ var curatedSiteStyles = [
15671
15851
  name: "Quiet Practice",
15672
15852
  description: "Grounded, calm, and practical for small appointment-first practices.",
15673
15853
  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.",
15674
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
15854
+ siteCreatorSelection: {
15855
+ kind: "site_creator_keyword_heuristic",
15856
+ priority: 30
15857
+ },
15675
15858
  selectionKeywordRules: [
15676
15859
  { kind: "substring", value: "massage" },
15677
15860
  { kind: "word", value: "bodywork" },
@@ -15692,7 +15875,11 @@ var curatedSiteStyles = [
15692
15875
  motion: "subtle"
15693
15876
  },
15694
15877
  compositionBudget: quietBudget,
15695
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
15878
+ recommendedHeaderLookIds: [
15879
+ "practical-utility",
15880
+ "clean-base",
15881
+ "centered-calm"
15882
+ ],
15696
15883
  buttonPersonalityChoices: [
15697
15884
  buttonChoice("pebble"),
15698
15885
  buttonChoice("soft-pill"),
@@ -15709,7 +15896,10 @@ var curatedSiteStyles = [
15709
15896
  name: "Personal Retreat Journal",
15710
15897
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
15711
15898
  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.",
15712
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
15899
+ siteCreatorSelection: {
15900
+ kind: "site_creator_keyword_heuristic",
15901
+ priority: 40
15902
+ },
15713
15903
  selectionKeywordRules: [
15714
15904
  { kind: "substring", value: "retreat" },
15715
15905
  { kind: "phrase", value: "solo practitioner" },
@@ -15729,7 +15919,11 @@ var curatedSiteStyles = [
15729
15919
  motion: "subtle"
15730
15920
  },
15731
15921
  compositionBudget: balancedBudget,
15732
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
15922
+ recommendedHeaderLookIds: [
15923
+ "serif-line",
15924
+ "centered-calm",
15925
+ "minimal-transparent"
15926
+ ],
15733
15927
  buttonPersonalityChoices: [
15734
15928
  buttonChoice("editorial-link"),
15735
15929
  buttonChoice("soft-pill"),
@@ -15746,7 +15940,10 @@ var curatedSiteStyles = [
15746
15940
  name: "Tactile Workshop",
15747
15941
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
15748
15942
  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.",
15749
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
15943
+ siteCreatorSelection: {
15944
+ kind: "site_creator_keyword_heuristic",
15945
+ priority: 50
15946
+ },
15750
15947
  selectionKeywordRules: [
15751
15948
  { kind: "substring", value: "ceramic" },
15752
15949
  { kind: "word", value: "pottery" },
@@ -15766,8 +15963,15 @@ var curatedSiteStyles = [
15766
15963
  motion: "subtle"
15767
15964
  },
15768
15965
  compositionBudget: balancedBudget,
15769
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
15770
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
15966
+ recommendedHeaderLookIds: [
15967
+ "brand-solid",
15968
+ "practical-utility",
15969
+ "clean-base"
15970
+ ],
15971
+ recommendedFooterLookIds: [
15972
+ "site-footer-brand-two-band",
15973
+ "footer-muted-grounding"
15974
+ ],
15771
15975
  buttonPersonalityChoices: [
15772
15976
  buttonChoice("pebble"),
15773
15977
  buttonChoice("confident-chip"),
@@ -15786,7 +15990,10 @@ var curatedSiteStyles = [
15786
15990
  name: "Soft Earth",
15787
15991
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
15788
15992
  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.",
15789
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
15993
+ siteCreatorSelection: {
15994
+ kind: "site_creator_keyword_heuristic",
15995
+ priority: 45
15996
+ },
15790
15997
  selectionKeywordRules: [
15791
15998
  { kind: "word", value: "meditation" },
15792
15999
  { kind: "word", value: "wellbeing" },
@@ -15862,8 +16069,15 @@ var curatedSiteStyles = [
15862
16069
  "faq-soft-earth-two-column",
15863
16070
  "contact-form-panel"
15864
16071
  ],
15865
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
15866
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
16072
+ recommendedHeaderLookIds: [
16073
+ "centered-calm",
16074
+ "minimal-transparent",
16075
+ "serif-line"
16076
+ ],
16077
+ recommendedFooterLookIds: [
16078
+ "footer-muted-grounding",
16079
+ "site-footer-brand-two-band"
16080
+ ],
15867
16081
  buttonPersonalityChoices: [
15868
16082
  buttonChoice("earth-pill"),
15869
16083
  buttonChoice("soft-pill"),
@@ -15882,7 +16096,10 @@ var curatedSiteStyles = [
15882
16096
  name: "Bold Launch",
15883
16097
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
15884
16098
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
15885
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
16099
+ siteCreatorSelection: {
16100
+ kind: "site_creator_keyword_heuristic",
16101
+ priority: 10
16102
+ },
15886
16103
  selectionKeywordRules: [
15887
16104
  { kind: "substring", value: "launch" },
15888
16105
  { kind: "substring", value: "campaign" },
@@ -15901,7 +16118,11 @@ var curatedSiteStyles = [
15901
16118
  motion: "expressive"
15902
16119
  },
15903
16120
  compositionBudget: expressiveBudget,
15904
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
16121
+ recommendedHeaderLookIds: [
16122
+ "transparent-overlay",
16123
+ "floating-glass",
16124
+ "brand-solid"
16125
+ ],
15905
16126
  buttonPersonalityChoices: [
15906
16127
  buttonChoice("ink-stamp"),
15907
16128
  buttonChoice("confident-chip"),
@@ -15952,8 +16173,15 @@ var curatedSiteStyles = [
15952
16173
  "testimonials-accent-quote-proof",
15953
16174
  "contact-form-brand-depth-card"
15954
16175
  ],
15955
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
15956
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
16176
+ recommendedHeaderLookIds: [
16177
+ "brand-solid",
16178
+ "transparent-overlay",
16179
+ "practical-utility"
16180
+ ],
16181
+ recommendedFooterLookIds: [
16182
+ "site-footer-brand-two-band",
16183
+ "footer-muted-grounding"
16184
+ ],
15957
16185
  buttonPersonalityChoices: [
15958
16186
  buttonChoice("showtime-pill"),
15959
16187
  buttonChoice("confident-chip"),
@@ -23718,10 +23946,7 @@ var headerRootClassTransform = {
23718
23946
  const navContainerType = header?.navContainer?.type ?? "none";
23719
23947
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
23720
23948
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
23721
- const classes = [
23722
- config.base,
23723
- backgroundClass
23724
- ];
23949
+ const classes = [config.base, backgroundClass];
23725
23950
  if (!hasContainedNav) {
23726
23951
  if (config.blur) classes.push(config.blur);
23727
23952
  if (config.blurSupport) classes.push(config.blurSupport);
@@ -23736,7 +23961,12 @@ var headerRootClassTransform = {
23736
23961
  if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
23737
23962
  classes.push(config.shrink);
23738
23963
  }
23739
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
23964
+ const VALID_VARIANTS = [
23965
+ "classic",
23966
+ "centered",
23967
+ "transparent",
23968
+ "floating"
23969
+ ];
23740
23970
  const variant = header?.variant;
23741
23971
  if (variant && VALID_VARIANTS.includes(variant)) {
23742
23972
  classes.push(`header-variant-${variant}`);
@@ -24388,15 +24618,21 @@ var mobileCta = ctaButton({
24388
24618
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
24389
24619
  {
24390
24620
  type: "div",
24391
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
24621
+ props: {
24622
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
24623
+ }
24392
24624
  },
24393
24625
  {
24394
24626
  type: "div",
24395
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
24627
+ props: {
24628
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
24629
+ }
24396
24630
  },
24397
24631
  {
24398
24632
  type: "div",
24399
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
24633
+ props: {
24634
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
24635
+ }
24400
24636
  }
24401
24637
  ]);
24402
24638
  var mobileToggleButton = {
@@ -24579,28 +24815,6 @@ var floatingLayout = inline(
24579
24815
  ],
24580
24816
  when("$root.theme.header.variant", { equals: "floating" })
24581
24817
  );
24582
- var editorialLayout = stack(
24583
- {
24584
- gap: "md",
24585
- align: "center",
24586
- className: bindProp("$root.theme.header.maxWidth", {
24587
- transforms: pipe(
24588
- tx("layout.maxWidthClass", {
24589
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
24590
- })
24591
- ),
24592
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
24593
- })
24594
- },
24595
- [
24596
- centeredLogoRow,
24597
- createNavRow(
24598
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
24599
- "center"
24600
- )
24601
- ],
24602
- when("$root.theme.header.variant", { equals: "editorial" })
24603
- );
24604
24818
  var headerLayout = headerSection(
24605
24819
  {
24606
24820
  background: bindProp("$root.theme.header", {
@@ -24614,10 +24828,7 @@ var headerLayout = headerSection(
24614
24828
  }),
24615
24829
  style: bindProp("$root.theme.header", {
24616
24830
  transforms: pipe(tx("layout.headerRootStyle")),
24617
- fallback: mergeStyles(
24618
- textColorStyle("text"),
24619
- borderColorStyle("border")
24620
- )
24831
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
24621
24832
  })
24622
24833
  },
24623
24834
  [
@@ -24626,7 +24837,6 @@ var headerLayout = headerSection(
24626
24837
  centeredLayout,
24627
24838
  transparentLayout,
24628
24839
  floatingLayout,
24629
- editorialLayout,
24630
24840
  mobileOverlay
24631
24841
  ],
24632
24842
  props({
@@ -32954,7 +33164,7 @@ var publicProductsResponseSchema = z55.object({
32954
33164
  });
32955
33165
 
32956
33166
  // ../blocks/src/system/runtime/api/creditProducts.ts
32957
- function assertNever3(value) {
33167
+ function assertNever4(value) {
32958
33168
  throw new Error(`Unhandled credit product case: ${String(value)}`);
32959
33169
  }
32960
33170
  function useCasesFromModules(modules) {
@@ -32987,7 +33197,7 @@ function getCreditProductCreditUnit(useCase) {
32987
33197
  perCreditSuffix: "credit"
32988
33198
  };
32989
33199
  default:
32990
- return assertNever3(useCase);
33200
+ return assertNever4(useCase);
32991
33201
  }
32992
33202
  }
32993
33203
  function deriveCreditProductLabels(products, options = {}) {
@@ -38165,7 +38375,7 @@ function resolveAccordionIconStyle(iconStyle, iconTreatment) {
38165
38375
  case "minimal-cross":
38166
38376
  return "plus-minus";
38167
38377
  default:
38168
- return assertNever4(iconTreatment.iconSet);
38378
+ return assertNever5(iconTreatment.iconSet);
38169
38379
  }
38170
38380
  }
38171
38381
  return iconStyle && iconStyle in ICON_CONFIG ? iconStyle : "chevron";
@@ -38184,7 +38394,7 @@ function accordionIconColorStyle(iconTreatment) {
38184
38394
  function resolveIconColorToken(token) {
38185
38395
  return token === "muted" ? "mutedText" : token;
38186
38396
  }
38187
- function assertNever4(value) {
38397
+ function assertNever5(value) {
38188
38398
  throw new Error(`Unhandled accordion icon set: ${String(value)}`);
38189
38399
  }
38190
38400
 
@@ -45648,6 +45858,9 @@ function transformSdkBlockToDefinition(sdkBlock) {
45648
45858
  }
45649
45859
 
45650
45860
  // ../blocks/src/customBlockRegistry.ts
45861
+ var defaultCustomBlockSourcePolicy = {
45862
+ kind: "canonical-db-fallback-sdk"
45863
+ };
45651
45864
  function isCustomBlockKind(blockKind) {
45652
45865
  return blockKind.startsWith("custom.");
45653
45866
  }
@@ -45674,39 +45887,86 @@ function toResolvedCustomBlock(manifest, source) {
45674
45887
  )
45675
45888
  };
45676
45889
  }
45890
+ function planCustomBlockRegistryResolution({
45891
+ sdkConfig,
45892
+ customBlocks = [],
45893
+ policy = defaultCustomBlockSourcePolicy
45894
+ }) {
45895
+ switch (policy.kind) {
45896
+ case "canonical-db-fallback-sdk": {
45897
+ const entriesByKind = /* @__PURE__ */ new Map();
45898
+ const conflicts = [];
45899
+ for (const customBlock of customBlocks) {
45900
+ entriesByKind.set(
45901
+ customBlock.manifest.id,
45902
+ toResolvedCustomBlock(customBlock.manifest, customBlock.source)
45903
+ );
45904
+ }
45905
+ for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
45906
+ const existing = entriesByKind.get(sdkBlock.id);
45907
+ if (existing) {
45908
+ conflicts.push({
45909
+ kind: "conflict",
45910
+ blockKind: existing.blockKind,
45911
+ winner: existing.source,
45912
+ loser: { kind: "sdk-config" },
45913
+ reason: "db-canonical-sdk-fallback"
45914
+ });
45915
+ continue;
45916
+ }
45917
+ entriesByKind.set(
45918
+ sdkBlock.id,
45919
+ toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
45920
+ );
45921
+ }
45922
+ return {
45923
+ policy,
45924
+ entries: Array.from(entriesByKind.values()),
45925
+ conflicts
45926
+ };
45927
+ }
45928
+ }
45929
+ }
45677
45930
  function createCustomBlockRegistry({
45678
45931
  sdkConfig,
45679
45932
  customBlocks = [],
45933
+ policy = defaultCustomBlockSourcePolicy,
45680
45934
  onConflict
45681
45935
  }) {
45682
- const entriesByKind = /* @__PURE__ */ new Map();
45683
- for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
45684
- entriesByKind.set(
45685
- sdkBlock.id,
45686
- toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
45687
- );
45688
- }
45689
- for (const customBlock of customBlocks) {
45690
- const existing = entriesByKind.get(customBlock.manifest.id);
45691
- if (existing) {
45692
- onConflict?.(
45693
- `Skipping DB custom block "${customBlock.manifest.id}" - conflicts with SDK config block`
45694
- );
45695
- continue;
45696
- }
45697
- entriesByKind.set(
45698
- customBlock.manifest.id,
45699
- toResolvedCustomBlock(customBlock.manifest, customBlock.source)
45936
+ const plan = planCustomBlockRegistryResolution({
45937
+ sdkConfig,
45938
+ customBlocks,
45939
+ policy
45940
+ });
45941
+ const entriesByKind = new Map(
45942
+ plan.entries.map((entry) => [entry.blockKind, entry])
45943
+ );
45944
+ for (const conflict of plan.conflicts) {
45945
+ onConflict?.(
45946
+ `Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`
45700
45947
  );
45701
45948
  }
45702
45949
  return {
45703
- entries: Array.from(entriesByKind.values()),
45950
+ entries: plan.entries,
45951
+ conflicts: plan.conflicts,
45704
45952
  findManifest: (blockKind) => {
45705
45953
  if (!isCustomBlockKind(blockKind)) return void 0;
45706
45954
  return entriesByKind.get(blockKind);
45707
45955
  }
45708
45956
  };
45709
45957
  }
45958
+ function sourceLabel(source) {
45959
+ switch (source.kind) {
45960
+ case "managed-database":
45961
+ return "DB";
45962
+ case "sdk-synced":
45963
+ return "SDK-synced DB";
45964
+ case "sdk-config":
45965
+ return "SDK config";
45966
+ default:
45967
+ return assertNever(source);
45968
+ }
45969
+ }
45710
45970
 
45711
45971
  // ../blocks/src/PageRenderer.tsx
45712
45972
  import { Fragment as Fragment6, jsx as jsx52 } from "react/jsx-runtime";
@@ -49014,9 +49274,9 @@ var containerResponsiveThemeCss = `/*
49014
49274
  }
49015
49275
 
49016
49276
  @layer rb-theme {
49017
- /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
49018
- :root {
49019
- /* --tb-primary: 17 24 39;
49277
+ /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
49278
+ :root {
49279
+ /* --tb-primary: 17 24 39;
49020
49280
  --tb-text: 17 24 39;
49021
49281
  --tb-muted: 107 114 128;
49022
49282
  --tb-bg: 255 255 255;
@@ -49038,159 +49298,164 @@ var containerResponsiveThemeCss = `/*
49038
49298
 
49039
49299
  --motion-duration: 180ms;
49040
49300
  --motion-ease: cubic-bezier(.2,.8,.2,1); */
49041
- }
49301
+ }
49042
49302
 
49043
- /* -------------------------------------------------------------------------- */
49044
- /* Shared: Modal */
49045
- /* -------------------------------------------------------------------------- */
49303
+ /* -------------------------------------------------------------------------- */
49304
+ /* Shared: Modal */
49305
+ /* -------------------------------------------------------------------------- */
49046
49306
 
49047
- :where(.theme-scope) .rb-modal-overlay {
49048
- position: fixed;
49049
- inset: 0;
49050
- z-index: var(--rb-modal-z-index, 20000);
49051
- display: grid;
49052
- place-items: center;
49053
- padding: 1rem;
49054
- /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
49055
- background-color: rgba(0, 0, 0, 0.6);
49056
- background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
49057
- }
49307
+ :where(.theme-scope) .rb-modal-overlay {
49308
+ position: fixed;
49309
+ inset: 0;
49310
+ z-index: var(--rb-modal-z-index, 20000);
49311
+ display: grid;
49312
+ place-items: center;
49313
+ padding: 1rem;
49314
+ /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
49315
+ background-color: rgba(0, 0, 0, 0.6);
49316
+ background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
49317
+ }
49058
49318
 
49059
- :where(.theme-scope) .rb-modal {
49060
- width: min(var(--rb-modal-max-width, 560px), 100%);
49061
- background: var(--rb-modal-bg, rgb(var(--tb-surface)));
49062
- border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
49063
- border-radius: var(--rb-modal-radius, var(--radius-card));
49064
- box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
49065
- }
49319
+ :where(.theme-scope) .rb-modal {
49320
+ width: min(var(--rb-modal-max-width, 560px), 100%);
49321
+ background: var(--rb-modal-bg, rgb(var(--tb-surface)));
49322
+ border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
49323
+ border-radius: var(--rb-modal-radius, var(--radius-card));
49324
+ box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
49325
+ }
49066
49326
 
49067
- :where(.theme-scope) .rb-modal__header {
49068
- display: flex;
49069
- align-items: center;
49070
- justify-content: space-between;
49071
- gap: 1rem;
49072
- padding: 1rem 1rem 0.75rem;
49073
- border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
49074
- }
49327
+ :where(.theme-scope) .rb-modal__header {
49328
+ display: flex;
49329
+ align-items: center;
49330
+ justify-content: space-between;
49331
+ gap: 1rem;
49332
+ padding: 1rem 1rem 0.75rem;
49333
+ border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
49334
+ }
49075
49335
 
49076
- :where(.theme-scope) .rb-modal__title {
49077
- margin: 0;
49078
- font-family: var(--font-heading);
49079
- font-size: 1.0625rem;
49080
- font-weight: 600;
49081
- color: rgb(var(--tb-text));
49082
- }
49336
+ :where(.theme-scope) .rb-modal__title {
49337
+ margin: 0;
49338
+ font-family: var(--font-heading);
49339
+ font-size: 1.0625rem;
49340
+ font-weight: 600;
49341
+ color: rgb(var(--tb-text));
49342
+ }
49083
49343
 
49084
- :where(.theme-scope) .rb-modal__close {
49085
- background: transparent;
49086
- border: none;
49087
- width: 2.25rem;
49088
- height: 2.25rem;
49089
- padding: 0;
49090
- line-height: 1;
49091
- color: rgb(var(--tb-mutedText));
49092
- cursor: pointer;
49093
- display: grid;
49094
- place-items: center;
49095
- border-radius: var(--radius-control);
49096
- }
49344
+ :where(.theme-scope) .rb-modal__close {
49345
+ background: transparent;
49346
+ border: none;
49347
+ width: 2.25rem;
49348
+ height: 2.25rem;
49349
+ padding: 0;
49350
+ line-height: 1;
49351
+ color: rgb(var(--tb-mutedText));
49352
+ cursor: pointer;
49353
+ display: grid;
49354
+ place-items: center;
49355
+ border-radius: var(--radius-control);
49356
+ }
49097
49357
 
49098
- :where(.theme-scope) .rb-modal__close:hover {
49099
- color: rgb(var(--tb-text));
49100
- background: rgba(var(--tb-border), 0.2);
49101
- }
49358
+ :where(.theme-scope) .rb-modal__close:hover {
49359
+ color: rgb(var(--tb-text));
49360
+ background: rgba(var(--tb-border), 0.2);
49361
+ }
49102
49362
 
49103
- :where(.theme-scope) .rb-modal__close:focus-visible {
49104
- outline: none;
49105
- box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
49106
- }
49363
+ :where(.theme-scope) .rb-modal__close:focus-visible {
49364
+ outline: none;
49365
+ box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
49366
+ }
49107
49367
 
49108
- :where(.theme-scope) .rb-modal__body {
49109
- padding: 0.875rem 1rem 1rem;
49110
- color: rgb(var(--tb-text));
49111
- font-size: 0.9375rem;
49112
- line-height: 1.45;
49113
- }
49368
+ :where(.theme-scope) .rb-modal__body {
49369
+ padding: 0.875rem 1rem 1rem;
49370
+ color: rgb(var(--tb-text));
49371
+ font-size: 0.9375rem;
49372
+ line-height: 1.45;
49373
+ }
49114
49374
 
49115
- /* -------------------------------------------------------------------------- */
49116
- /* Header: Mobile nav overlay transitions */
49117
- /* -------------------------------------------------------------------------- */
49375
+ /* -------------------------------------------------------------------------- */
49376
+ /* Header: Mobile nav overlay transitions */
49377
+ /* -------------------------------------------------------------------------- */
49118
49378
 
49119
- /* Keep the overlay in the DOM so we can transition opacity/transform.
49379
+ /* Keep the overlay in the DOM so we can transition opacity/transform.
49120
49380
  JS toggles \`aria-hidden\` + \`inert\` (via enhancer), and CSS uses pointer-events
49121
49381
  to prevent interaction while closed. */
49122
- .nav-mobile-overlay {
49123
- pointer-events: none;
49124
- /* Prevent transformed children (panel) from creating viewport scrollbars
49382
+ .nav-mobile-overlay {
49383
+ pointer-events: none;
49384
+ /* Prevent transformed children (panel) from creating viewport scrollbars
49125
49385
  during enter/exit transitions. */
49126
- overflow: hidden;
49127
- }
49128
-
49129
- .nav-mobile-overlay[aria-hidden="false"] {
49130
- pointer-events: auto;
49131
- }
49386
+ overflow: hidden;
49387
+ }
49132
49388
 
49133
- .nav-mobile-overlay .nav-mobile-backdrop {
49134
- opacity: 0;
49135
- transition: opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
49136
- }
49389
+ .nav-mobile-overlay[aria-hidden='false'] {
49390
+ pointer-events: auto;
49391
+ }
49137
49392
 
49138
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-backdrop {
49139
- opacity: 1;
49140
- }
49393
+ .nav-mobile-overlay .nav-mobile-backdrop {
49394
+ opacity: 0;
49395
+ transition: opacity var(--motion-duration, 180ms)
49396
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
49397
+ }
49141
49398
 
49142
- .nav-mobile-overlay .nav-mobile-panel {
49143
- opacity: 0;
49144
- transform: translate3d(12px, 0, 0);
49145
- overflow-x: hidden;
49146
- transition:
49147
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
49148
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
49149
- will-change: opacity, transform;
49150
- }
49399
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-backdrop {
49400
+ opacity: 1;
49401
+ }
49151
49402
 
49152
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-panel {
49153
- opacity: 1;
49154
- transform: translate3d(0, 0, 0);
49155
- }
49403
+ .nav-mobile-overlay .nav-mobile-panel {
49404
+ opacity: 0;
49405
+ transform: translate3d(12px, 0, 0);
49406
+ overflow-x: hidden;
49407
+ transition:
49408
+ opacity var(--motion-duration, 180ms)
49409
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
49410
+ transform var(--motion-duration, 180ms)
49411
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
49412
+ will-change: opacity, transform;
49413
+ }
49156
49414
 
49157
- /* -------------------------------------------------------------------------- */
49158
- /* Header: Mobile toggle hamburger -> X */
49159
- /* -------------------------------------------------------------------------- */
49415
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-panel {
49416
+ opacity: 1;
49417
+ transform: translate3d(0, 0, 0);
49418
+ }
49160
49419
 
49161
- .nav-mobile-toggle .nav-mobile-bar {
49162
- transform-origin: center;
49163
- transition:
49164
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
49165
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
49166
- will-change: transform, opacity;
49167
- }
49420
+ /* -------------------------------------------------------------------------- */
49421
+ /* Header: Mobile toggle hamburger -> X */
49422
+ /* -------------------------------------------------------------------------- */
49168
49423
 
49169
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-top {
49170
- transform: translateY(6px) rotate(45deg);
49171
- }
49424
+ .nav-mobile-toggle .nav-mobile-bar {
49425
+ transform-origin: center;
49426
+ transition:
49427
+ transform var(--motion-duration, 180ms)
49428
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
49429
+ opacity var(--motion-duration, 180ms)
49430
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
49431
+ will-change: transform, opacity;
49432
+ }
49172
49433
 
49173
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-middle {
49174
- opacity: 0;
49175
- }
49434
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-top {
49435
+ transform: translateY(6px) rotate(45deg);
49436
+ }
49176
49437
 
49177
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-bottom {
49178
- transform: translateY(-6px) rotate(-45deg);
49179
- }
49438
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-middle {
49439
+ opacity: 0;
49440
+ }
49180
49441
 
49181
- @media (prefers-reduced-motion: reduce) {
49182
- .nav-mobile-overlay .nav-mobile-backdrop,
49183
- .nav-mobile-overlay .nav-mobile-panel {
49184
- transition: none;
49185
- transform: none;
49442
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-bottom {
49443
+ transform: translateY(-6px) rotate(-45deg);
49186
49444
  }
49187
49445
 
49188
- .nav-mobile-toggle .nav-mobile-bar {
49189
- transition: none;
49446
+ @media (prefers-reduced-motion: reduce) {
49447
+ .nav-mobile-overlay .nav-mobile-backdrop,
49448
+ .nav-mobile-overlay .nav-mobile-panel {
49449
+ transition: none;
49450
+ transform: none;
49451
+ }
49452
+
49453
+ .nav-mobile-toggle .nav-mobile-bar {
49454
+ transition: none;
49455
+ }
49190
49456
  }
49191
- }
49192
49457
 
49193
- /*
49458
+ /*
49194
49459
  * Theme Scope Styles
49195
49460
  *
49196
49461
  * IMPORTANT: All :where(.theme-scope) selectors are wrapped in :where() to give them
@@ -49200,790 +49465,838 @@ var containerResponsiveThemeCss = `/*
49200
49465
  * Example: \`h4 { color: white; }\` will override \`:where(:where(.theme-scope)) h4\`
49201
49466
  */
49202
49467
 
49203
- :where(:where(.theme-scope)) {
49204
- font-family: var(--font-body);
49205
- letter-spacing: var(--ls-body);
49206
- line-height: var(--lh-body);
49207
- font-weight: var(--font-weight-body);
49208
-
49209
- & h1,
49210
- & h2,
49211
- & h3,
49212
- & h4,
49213
- & h5,
49214
- & h6 {
49215
- font-family: var(--font-heading);
49216
- /* Color is set by generateTypographyCss.ts with full cascade:
49468
+ :where(:where(.theme-scope)) {
49469
+ font-family: var(--font-body);
49470
+ letter-spacing: var(--ls-body);
49471
+ line-height: var(--lh-body);
49472
+ font-weight: var(--font-weight-body);
49473
+
49474
+ & h1,
49475
+ & h2,
49476
+ & h3,
49477
+ & h4,
49478
+ & h5,
49479
+ & h6 {
49480
+ font-family: var(--font-heading);
49481
+ /* Color is set by generateTypographyCss.ts with full cascade:
49217
49482
  --section-heading-color -> --section-text-color -> --hc-hN -> --hc-heading -> inherit */
49218
- font-weight: var(--font-weight-heading);
49219
- text-transform: var(--tt-heading);
49220
- font-variant-caps: var(--fv-heading);
49483
+ font-weight: var(--font-weight-heading);
49484
+ text-transform: var(--tt-heading);
49485
+ font-variant-caps: var(--fv-heading);
49486
+ }
49221
49487
  }
49222
- }
49223
49488
 
49224
- /* Heading typographic overrides (fallback to defaults when not provided) */
49225
- :where(:where(.theme-scope)) h1 {
49226
- letter-spacing: var(--ls-h1, var(--ls-heading));
49227
- line-height: var(--lh-h1, var(--lh-heading));
49228
- font-weight: var(--fw-h1, var(--font-weight-heading));
49229
- }
49230
- :where(:where(.theme-scope)) h2 {
49231
- letter-spacing: var(--ls-h2, var(--ls-heading));
49232
- line-height: var(--lh-h2, var(--lh-heading));
49233
- font-weight: var(--fw-h2, var(--font-weight-heading));
49234
- }
49235
- :where(:where(.theme-scope)) h3 {
49236
- letter-spacing: var(--ls-h3, var(--ls-heading));
49237
- line-height: var(--lh-h3, var(--lh-heading));
49238
- font-weight: var(--fw-h3, var(--font-weight-heading));
49239
- }
49240
- :where(:where(.theme-scope)) h4,
49241
- :where(:where(.theme-scope)) h5,
49242
- :where(:where(.theme-scope)) h6 {
49243
- letter-spacing: var(--ls-heading);
49244
- line-height: var(--lh-heading);
49245
- }
49246
- :where(:where(.theme-scope)) h4 {
49247
- font-weight: var(--fw-h4, var(--font-weight-heading));
49248
- }
49249
- :where(:where(.theme-scope)) h5 {
49250
- font-weight: var(--fw-h5, var(--font-weight-heading));
49251
- }
49252
- :where(:where(.theme-scope)) h6 {
49253
- font-weight: var(--fw-h6, var(--font-weight-heading));
49254
- }
49489
+ /* Heading typographic overrides (fallback to defaults when not provided) */
49490
+ :where(:where(.theme-scope)) h1 {
49491
+ letter-spacing: var(--ls-h1, var(--ls-heading));
49492
+ line-height: var(--lh-h1, var(--lh-heading));
49493
+ font-weight: var(--fw-h1, var(--font-weight-heading));
49494
+ }
49495
+ :where(:where(.theme-scope)) h2 {
49496
+ letter-spacing: var(--ls-h2, var(--ls-heading));
49497
+ line-height: var(--lh-h2, var(--lh-heading));
49498
+ font-weight: var(--fw-h2, var(--font-weight-heading));
49499
+ }
49500
+ :where(:where(.theme-scope)) h3 {
49501
+ letter-spacing: var(--ls-h3, var(--ls-heading));
49502
+ line-height: var(--lh-h3, var(--lh-heading));
49503
+ font-weight: var(--fw-h3, var(--font-weight-heading));
49504
+ }
49505
+ :where(:where(.theme-scope)) h4,
49506
+ :where(:where(.theme-scope)) h5,
49507
+ :where(:where(.theme-scope)) h6 {
49508
+ letter-spacing: var(--ls-heading);
49509
+ line-height: var(--lh-heading);
49510
+ }
49511
+ :where(:where(.theme-scope)) h4 {
49512
+ font-weight: var(--fw-h4, var(--font-weight-heading));
49513
+ }
49514
+ :where(:where(.theme-scope)) h5 {
49515
+ font-weight: var(--fw-h5, var(--font-weight-heading));
49516
+ }
49517
+ :where(:where(.theme-scope)) h6 {
49518
+ font-weight: var(--fw-h6, var(--font-weight-heading));
49519
+ }
49255
49520
 
49256
- /* Rich text element spacing based on theme rhythm */
49257
- :where(.theme-scope) .rb-prose h1 {
49258
- margin-top: calc(var(--rt-space-y) * 1.6);
49259
- margin-bottom: calc(var(--rt-space-y) * 0.8);
49260
- }
49261
- :where(.theme-scope) .rb-prose h2 {
49262
- margin-top: calc(var(--rt-space-y) * 1.4);
49263
- margin-bottom: calc(var(--rt-space-y) * 0.7);
49264
- }
49265
- :where(.theme-scope) .rb-prose h3 {
49266
- margin-top: calc(var(--rt-space-y) * 1.2);
49267
- margin-bottom: calc(var(--rt-space-y) * 0.6);
49268
- }
49269
- :where(.theme-scope) .rb-prose h4 {
49270
- margin-top: calc(var(--rt-space-y) * 1);
49271
- margin-bottom: calc(var(--rt-space-y) * 0.5);
49272
- }
49273
- :where(.theme-scope) .rb-prose h5 {
49274
- margin-top: calc(var(--rt-space-y) * 0.9);
49275
- margin-bottom: calc(var(--rt-space-y) * 0.45);
49276
- }
49277
- :where(.theme-scope) .rb-prose h6 {
49278
- margin-top: calc(var(--rt-space-y) * 0.8);
49279
- margin-bottom: calc(var(--rt-space-y) * 0.4);
49280
- }
49281
- :where(.theme-scope) .rb-prose p {
49282
- margin: var(--rt-space-y) 0;
49283
- }
49284
- :where(.theme-scope) .rb-prose img {
49285
- display: block;
49286
- max-width: 100%;
49287
- height: auto;
49288
- margin: calc(var(--rt-space-y) * 1) 0;
49289
- }
49290
- :where(.theme-scope) .rb-prose ul,
49291
- :where(.theme-scope) .rb-prose ol {
49292
- margin: var(--rt-space-y) 0;
49293
- padding-left: 1.25rem;
49294
- }
49295
- :where(.theme-scope) .rb-prose ul {
49296
- list-style-type: disc;
49297
- }
49298
- :where(.theme-scope) .rb-prose ol {
49299
- list-style-type: decimal;
49300
- }
49301
- :where(.theme-scope) .rb-prose ul ul {
49302
- list-style-type: circle;
49303
- }
49304
- :where(.theme-scope) .rb-prose ul ul ul {
49305
- list-style-type: square;
49306
- }
49307
- :where(.theme-scope) .rb-prose ol ol {
49308
- list-style-type: lower-alpha;
49309
- }
49310
- :where(.theme-scope) .rb-prose ol ol ol {
49311
- list-style-type: lower-roman;
49312
- }
49313
- :where(.theme-scope) .rb-prose blockquote {
49314
- margin: calc(var(--rt-space-y) * 1) 0;
49315
- padding-left: 1rem;
49316
- border-left: 3px solid rgb(var(--tb-border));
49317
- }
49318
- :where(.theme-scope) .rb-prose > :first-child {
49319
- margin-top: 0;
49320
- }
49321
- :where(.theme-scope) .rb-prose > :last-child {
49322
- margin-bottom: 0;
49323
- }
49521
+ /* Rich text element spacing based on theme rhythm */
49522
+ :where(.theme-scope) .rb-prose h1 {
49523
+ margin-top: calc(var(--rt-space-y) * 1.6);
49524
+ margin-bottom: calc(var(--rt-space-y) * 0.8);
49525
+ }
49526
+ :where(.theme-scope) .rb-prose h2 {
49527
+ margin-top: calc(var(--rt-space-y) * 1.4);
49528
+ margin-bottom: calc(var(--rt-space-y) * 0.7);
49529
+ }
49530
+ :where(.theme-scope) .rb-prose h3 {
49531
+ margin-top: calc(var(--rt-space-y) * 1.2);
49532
+ margin-bottom: calc(var(--rt-space-y) * 0.6);
49533
+ }
49534
+ :where(.theme-scope) .rb-prose h4 {
49535
+ margin-top: calc(var(--rt-space-y) * 1);
49536
+ margin-bottom: calc(var(--rt-space-y) * 0.5);
49537
+ }
49538
+ :where(.theme-scope) .rb-prose h5 {
49539
+ margin-top: calc(var(--rt-space-y) * 0.9);
49540
+ margin-bottom: calc(var(--rt-space-y) * 0.45);
49541
+ }
49542
+ :where(.theme-scope) .rb-prose h6 {
49543
+ margin-top: calc(var(--rt-space-y) * 0.8);
49544
+ margin-bottom: calc(var(--rt-space-y) * 0.4);
49545
+ }
49546
+ :where(.theme-scope) .rb-prose p {
49547
+ margin: var(--rt-space-y) 0;
49548
+ }
49549
+ :where(.theme-scope) .rb-prose img {
49550
+ display: block;
49551
+ max-width: 100%;
49552
+ height: auto;
49553
+ margin: calc(var(--rt-space-y) * 1) 0;
49554
+ }
49555
+ :where(.theme-scope) .rb-prose ul,
49556
+ :where(.theme-scope) .rb-prose ol {
49557
+ margin: var(--rt-space-y) 0;
49558
+ padding-left: 1.25rem;
49559
+ }
49560
+ :where(.theme-scope) .rb-prose ul {
49561
+ list-style-type: disc;
49562
+ }
49563
+ :where(.theme-scope) .rb-prose ol {
49564
+ list-style-type: decimal;
49565
+ }
49566
+ :where(.theme-scope) .rb-prose ul ul {
49567
+ list-style-type: circle;
49568
+ }
49569
+ :where(.theme-scope) .rb-prose ul ul ul {
49570
+ list-style-type: square;
49571
+ }
49572
+ :where(.theme-scope) .rb-prose ol ol {
49573
+ list-style-type: lower-alpha;
49574
+ }
49575
+ :where(.theme-scope) .rb-prose ol ol ol {
49576
+ list-style-type: lower-roman;
49577
+ }
49578
+ :where(.theme-scope) .rb-prose blockquote {
49579
+ margin: calc(var(--rt-space-y) * 1) 0;
49580
+ padding-left: 1rem;
49581
+ border-left: 3px solid rgb(var(--tb-border));
49582
+ }
49583
+ :where(.theme-scope) .rb-prose > :first-child {
49584
+ margin-top: 0;
49585
+ }
49586
+ :where(.theme-scope) .rb-prose > :last-child {
49587
+ margin-bottom: 0;
49588
+ }
49324
49589
 
49325
- /* Prose color overrides - use theme CSS variables instead of hardcoded colors
49590
+ /* Prose color overrides - use theme CSS variables instead of hardcoded colors
49326
49591
  * This makes prose elements automatically adapt to light/dark themes */
49327
- :where(.theme-scope) .rb-prose {
49328
- /* Body text inherits from parent, which should already have theme color */
49329
- color: inherit;
49330
- }
49592
+ :where(.theme-scope) .rb-prose {
49593
+ /* Body text inherits from parent, which should already have theme color */
49594
+ color: inherit;
49595
+ }
49331
49596
 
49332
- /* Prose size variants (theme-aware, CSS-only) */
49333
- :where(.theme-scope) {
49334
- /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
49335
- --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
49336
- --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
49597
+ /* Prose size variants (theme-aware, CSS-only) */
49598
+ :where(.theme-scope) {
49599
+ /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
49600
+ --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
49601
+ --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
49337
49602
 
49338
- --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
49339
- --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
49603
+ --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
49604
+ --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
49340
49605
 
49341
- /* Applied at >= 640px; below that, rb-prose-lg is typically used */
49342
- --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
49343
- --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
49344
- }
49606
+ /* Applied at >= 640px; below that, rb-prose-lg is typically used */
49607
+ --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
49608
+ --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
49609
+ }
49345
49610
 
49346
- :where(.theme-scope) .rb-prose-sm {
49347
- font-size: var(--rb-prose-sm-font-size);
49348
- line-height: var(--rb-prose-sm-line-height);
49349
- }
49350
- :where(.theme-scope) .rb-prose-lg {
49351
- font-size: var(--rb-prose-lg-font-size);
49352
- line-height: var(--rb-prose-lg-line-height);
49353
- }
49354
- @container rb-site (min-width: 640px) {
49611
+ :where(.theme-scope) .rb-prose-sm {
49612
+ font-size: var(--rb-prose-sm-font-size);
49613
+ line-height: var(--rb-prose-sm-line-height);
49614
+ }
49615
+ :where(.theme-scope) .rb-prose-lg {
49616
+ font-size: var(--rb-prose-lg-font-size);
49617
+ line-height: var(--rb-prose-lg-line-height);
49618
+ }
49619
+ @container rb-site (min-width: 640px) {
49355
49620
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
49356
49621
  :where(.theme-scope) .rb-prose-xl-sm {
49357
- font-size: var(--rb-prose-xl-sm-font-size);
49358
- line-height: var(--rb-prose-xl-sm-line-height);
49359
- }
49622
+ font-size: var(--rb-prose-xl-sm-font-size);
49623
+ line-height: var(--rb-prose-xl-sm-line-height);
49624
+ }
49360
49625
  }
49361
49626
  }
49362
49627
 
49363
- /* Neutral prose uses theme text color by default */
49364
- :where(.theme-scope) .rb-prose-neutral {
49365
- color: rgb(var(--tb-text));
49366
- }
49628
+ /* Neutral prose uses theme text color by default */
49629
+ :where(.theme-scope) .rb-prose-neutral {
49630
+ color: rgb(var(--tb-text));
49631
+ }
49367
49632
 
49368
- :where(.theme-scope) .rb-prose p,
49369
- :where(.theme-scope) .rb-prose li {
49370
- /* Body text uses inherited color (set by fragment via textColorStyle) */
49371
- color: inherit;
49372
- }
49633
+ :where(.theme-scope) .rb-prose p,
49634
+ :where(.theme-scope) .rb-prose li {
49635
+ /* Body text uses inherited color (set by fragment via textColorStyle) */
49636
+ color: inherit;
49637
+ }
49373
49638
 
49374
- :where(.theme-scope) .rb-prose h1,
49375
- :where(.theme-scope) .rb-prose h2,
49376
- :where(.theme-scope) .rb-prose h3,
49377
- :where(.theme-scope) .rb-prose h4,
49378
- :where(.theme-scope) .rb-prose h5,
49379
- :where(.theme-scope) .rb-prose h6 {
49380
- /* Headings inherit from parent or use theme text color */
49381
- color: inherit;
49382
- }
49639
+ :where(.theme-scope) .rb-prose h1,
49640
+ :where(.theme-scope) .rb-prose h2,
49641
+ :where(.theme-scope) .rb-prose h3,
49642
+ :where(.theme-scope) .rb-prose h4,
49643
+ :where(.theme-scope) .rb-prose h5,
49644
+ :where(.theme-scope) .rb-prose h6 {
49645
+ /* Headings inherit from parent or use theme text color */
49646
+ color: inherit;
49647
+ }
49383
49648
 
49384
- :where(.theme-scope) .rb-prose strong,
49385
- :where(.theme-scope) .rb-prose b {
49386
- /* Bold text inherits color but increases weight */
49387
- color: inherit;
49388
- font-weight: 600;
49389
- }
49649
+ :where(.theme-scope) .rb-prose strong,
49650
+ :where(.theme-scope) .rb-prose b {
49651
+ /* Bold text inherits color but increases weight */
49652
+ color: inherit;
49653
+ font-weight: 600;
49654
+ }
49390
49655
 
49391
- :where(.theme-scope) .rb-prose em,
49392
- :where(.theme-scope) .rb-prose i {
49393
- /* Italic text inherits color */
49394
- color: inherit;
49395
- }
49656
+ :where(.theme-scope) .rb-prose em,
49657
+ :where(.theme-scope) .rb-prose i {
49658
+ /* Italic text inherits color */
49659
+ color: inherit;
49660
+ }
49396
49661
 
49397
- :where(.theme-scope) .rb-prose a {
49398
- /* Global prose link style with theme-level overrides */
49399
- color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
49400
- text-decoration-line: var(--rb-prose-link-decoration-line, underline);
49401
- text-decoration-style: var(--rb-prose-link-underline-style, solid);
49402
- text-decoration-thickness: var(--rb-prose-link-underline-thickness, from-font);
49403
- text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
49404
- text-decoration-color: var(--rb-prose-link-decoration-color, rgba(var(--tb-primary), 0.3));
49405
- transition:
49406
- color 150ms ease,
49407
- text-decoration-color 150ms ease;
49408
- }
49662
+ :where(.theme-scope) .rb-prose a {
49663
+ /* Global prose link style with theme-level overrides */
49664
+ color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
49665
+ text-decoration-line: var(--rb-prose-link-decoration-line, underline);
49666
+ text-decoration-style: var(--rb-prose-link-underline-style, solid);
49667
+ text-decoration-thickness: var(
49668
+ --rb-prose-link-underline-thickness,
49669
+ from-font
49670
+ );
49671
+ text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
49672
+ text-decoration-color: var(
49673
+ --rb-prose-link-decoration-color,
49674
+ rgba(var(--tb-primary), 0.3)
49675
+ );
49676
+ transition:
49677
+ color 150ms ease,
49678
+ text-decoration-color 150ms ease;
49679
+ }
49409
49680
 
49410
- :where(.theme-scope) .rb-prose a:hover {
49411
- color: var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))));
49412
- text-decoration-color: var(
49413
- --rb-prose-link-hover-decoration-color,
49414
- var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))))
49415
- );
49416
- }
49681
+ :where(.theme-scope) .rb-prose a:hover {
49682
+ color: var(
49683
+ --rb-prose-link-hover-color,
49684
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
49685
+ );
49686
+ text-decoration-color: var(
49687
+ --rb-prose-link-hover-decoration-color,
49688
+ var(
49689
+ --rb-prose-link-hover-color,
49690
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
49691
+ )
49692
+ );
49693
+ }
49417
49694
 
49418
- :where(.theme-scope) .rb-prose blockquote {
49419
- /* Blockquotes use muted text color */
49420
- color: rgb(var(--tb-mutedText));
49421
- border-left-color: rgb(var(--tb-border));
49422
- }
49695
+ :where(.theme-scope) .rb-prose blockquote {
49696
+ /* Blockquotes use muted text color */
49697
+ color: rgb(var(--tb-mutedText));
49698
+ border-left-color: rgb(var(--tb-border));
49699
+ }
49423
49700
 
49424
- :where(.theme-scope) .fragment-quote-body blockquote {
49425
- /* Quote fragment should not get the generic prose blockquote left border/indent. */
49426
- border-left: 0;
49427
- padding-left: 0;
49428
- }
49701
+ :where(.theme-scope) .fragment-quote-body blockquote {
49702
+ /* Quote fragment should not get the generic prose blockquote left border/indent. */
49703
+ border-left: 0;
49704
+ padding-left: 0;
49705
+ }
49429
49706
 
49430
- :where(.theme-scope) .rb-columns-equal-height {
49431
- /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
49432
- container-type: inline-size;
49707
+ :where(.theme-scope) .rb-columns-equal-height {
49708
+ /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
49709
+ container-type: inline-size;
49433
49710
 
49434
- --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
49435
- --rb-columns-gap: var(--rb-semantic-gap, 0px);
49436
- --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
49711
+ --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
49712
+ --rb-columns-gap: var(--rb-semantic-gap, 0px);
49713
+ --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
49437
49714
 
49438
- --rb-columns-tile-w: calc(
49439
- (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) / var(--rb-columns-cols)
49440
- );
49441
- --rb-columns-tile-h: calc(var(--rb-columns-tile-w) * var(--rb-columns-tile-ar));
49442
- }
49715
+ --rb-columns-tile-w: calc(
49716
+ (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) /
49717
+ var(--rb-columns-cols)
49718
+ );
49719
+ --rb-columns-tile-h: calc(
49720
+ var(--rb-columns-tile-w) * var(--rb-columns-tile-ar)
49721
+ );
49722
+ }
49443
49723
 
49444
- @container rb-site (min-width: 768px) {
49724
+ @container rb-site (min-width: 768px) {
49445
49725
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
49446
49726
  :where(.theme-scope) .rb-columns-equal-height {
49447
- --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
49448
- }
49727
+ --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
49728
+ }
49449
49729
  }
49450
49730
  }
49451
49731
 
49452
- @container rb-site (min-width: 1024px) {
49732
+ @container rb-site (min-width: 1024px) {
49453
49733
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
49454
49734
  :where(.theme-scope) .rb-columns-equal-height {
49455
- --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
49456
- }
49735
+ --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
49736
+ }
49457
49737
  }
49458
49738
  }
49459
49739
 
49460
- @container rb-site (min-width: 1280px) {
49740
+ @container rb-site (min-width: 1280px) {
49461
49741
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
49462
49742
  :where(.theme-scope) .rb-columns-equal-height {
49463
- --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
49464
- }
49743
+ --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
49744
+ }
49465
49745
  }
49466
49746
  }
49467
49747
 
49468
- :where(.theme-scope) .rb-columns-equal-height > * {
49469
- height: var(--rb-columns-tile-h);
49470
- }
49748
+ :where(.theme-scope) .rb-columns-equal-height > * {
49749
+ height: var(--rb-columns-tile-h);
49750
+ }
49471
49751
 
49472
- :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
49473
- /*
49752
+ :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
49753
+ /*
49474
49754
  Grid items commonly include \`rb-h-full\` (height: 100%) to stretch within
49475
49755
  their row. In equal-height mode we instead want a fixed tile height so the
49476
49756
  spanning editorial tile doesn't become taller due to its larger width +
49477
49757
  aspect-ratio.
49478
49758
  */
49479
- height: var(--rb-columns-tile-h);
49480
- min-height: var(--rb-columns-tile-h);
49481
- max-height: var(--rb-columns-tile-h);
49482
- }
49759
+ height: var(--rb-columns-tile-h);
49760
+ min-height: var(--rb-columns-tile-h);
49761
+ max-height: var(--rb-columns-tile-h);
49762
+ }
49483
49763
 
49484
- :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
49485
- width: 100%;
49486
- height: 100%;
49487
- overflow: hidden;
49488
- }
49764
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
49765
+ width: 100%;
49766
+ height: 100%;
49767
+ overflow: hidden;
49768
+ }
49489
49769
 
49490
- :where(.theme-scope) .rb-columns-equal-height .fragment-image {
49491
- width: 100%;
49492
- height: 100%;
49493
- object-fit: cover;
49494
- }
49770
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image {
49771
+ width: 100%;
49772
+ height: 100%;
49773
+ object-fit: cover;
49774
+ }
49495
49775
 
49496
- :where(.theme-scope) .rb-prose code {
49497
- /* Inline code uses text color with surface background */
49498
- color: inherit;
49499
- background-color: rgba(var(--tb-surface), 0.5);
49500
- padding: 0.125rem 0.25rem;
49501
- border-radius: 0.25rem;
49502
- font-size: 0.875em;
49503
- }
49776
+ :where(.theme-scope) .rb-prose code {
49777
+ /* Inline code uses text color with surface background */
49778
+ color: inherit;
49779
+ background-color: rgba(var(--tb-surface), 0.5);
49780
+ padding: 0.125rem 0.25rem;
49781
+ border-radius: 0.25rem;
49782
+ font-size: 0.875em;
49783
+ }
49504
49784
 
49505
- :where(.theme-scope) .rb-prose pre {
49506
- /* Code blocks */
49507
- background-color: rgb(var(--tb-surface));
49508
- color: rgb(var(--tb-text));
49509
- border: 1px solid rgb(var(--tb-border));
49510
- border-radius: 0.5rem;
49511
- padding: 1rem;
49512
- overflow-x: auto;
49513
- }
49785
+ :where(.theme-scope) .rb-prose pre {
49786
+ /* Code blocks */
49787
+ background-color: rgb(var(--tb-surface));
49788
+ color: rgb(var(--tb-text));
49789
+ border: 1px solid rgb(var(--tb-border));
49790
+ border-radius: 0.5rem;
49791
+ padding: 1rem;
49792
+ overflow-x: auto;
49793
+ }
49514
49794
 
49515
- :where(.theme-scope) .rb-prose pre code {
49516
- /* Code inside pre blocks */
49517
- background-color: transparent;
49518
- padding: 0;
49519
- color: inherit;
49520
- }
49795
+ :where(.theme-scope) .rb-prose pre code {
49796
+ /* Code inside pre blocks */
49797
+ background-color: transparent;
49798
+ padding: 0;
49799
+ color: inherit;
49800
+ }
49521
49801
 
49522
- :where(.theme-scope) .rb-prose hr {
49523
- /* Horizontal rules */
49524
- border-color: rgb(var(--tb-border));
49525
- }
49802
+ :where(.theme-scope) .rb-prose hr {
49803
+ /* Horizontal rules */
49804
+ border-color: rgb(var(--tb-border));
49805
+ }
49526
49806
 
49527
- :where(.theme-scope) .rb-prose ul > li::marker,
49528
- :where(.theme-scope) .rb-prose ol > li::marker {
49529
- /* List markers use muted text color */
49530
- color: rgb(var(--tb-mutedText));
49531
- }
49807
+ :where(.theme-scope) .rb-prose ul > li::marker,
49808
+ :where(.theme-scope) .rb-prose ol > li::marker {
49809
+ /* List markers use muted text color */
49810
+ color: rgb(var(--tb-mutedText));
49811
+ }
49532
49812
 
49533
- /*
49813
+ /*
49534
49814
  /* Density helpers */
49535
- :where(.theme-scope) .section-pad {
49536
- padding-top: 4rem;
49537
- padding-bottom: 4rem;
49538
- }
49539
- :where(.theme-scope)[data-density="airy"] .section-pad {
49540
- padding-top: 4.5rem;
49541
- padding-bottom: 4.5rem;
49542
- }
49543
- :where(.theme-scope)[data-density="compact"] .section-pad {
49544
- padding-top: 3rem;
49545
- padding-bottom: 3rem;
49546
- }
49547
-
49548
- :where(.theme-scope) .rounded-control {
49549
- border-radius: var(--radius-control);
49550
- }
49551
- :where(.theme-scope) .rounded-card {
49552
- border-radius: var(--radius-card);
49553
- }
49815
+ :where(.theme-scope) .section-pad {
49816
+ padding-top: 4rem;
49817
+ padding-bottom: 4rem;
49818
+ }
49819
+ :where(.theme-scope)[data-density='airy'] .section-pad {
49820
+ padding-top: 4.5rem;
49821
+ padding-bottom: 4.5rem;
49822
+ }
49823
+ :where(.theme-scope)[data-density='compact'] .section-pad {
49824
+ padding-top: 3rem;
49825
+ padding-bottom: 3rem;
49826
+ }
49554
49827
 
49555
- :where(.theme-scope) .shadow-elev {
49556
- box-shadow: var(--shadow-elev);
49557
- }
49828
+ :where(.theme-scope) .rounded-control {
49829
+ border-radius: var(--radius-control);
49830
+ }
49831
+ :where(.theme-scope) .rounded-card {
49832
+ border-radius: var(--radius-card);
49833
+ }
49558
49834
 
49559
- :where(.theme-scope) .font-heading {
49560
- font-family: var(--font-heading);
49561
- }
49562
- :where(.theme-scope) .font-body {
49563
- font-family: var(--font-body);
49564
- }
49835
+ :where(.theme-scope) .shadow-elev {
49836
+ box-shadow: var(--shadow-elev);
49837
+ }
49565
49838
 
49566
- :where(.theme-scope) .text-h1 {
49567
- font-size: var(--fs-h1);
49568
- line-height: 1.1;
49569
- }
49570
- :where(.theme-scope) .text-h2 {
49571
- font-size: var(--fs-h2);
49572
- line-height: 1.15;
49573
- }
49574
- :where(.theme-scope) .text-h3 {
49575
- font-size: var(--fs-h3);
49576
- line-height: 1.2;
49577
- }
49578
- :where(.theme-scope) .text-body-size {
49579
- font-size: var(--fs-body);
49580
- }
49839
+ :where(.theme-scope) .font-heading {
49840
+ font-family: var(--font-heading);
49841
+ }
49842
+ :where(.theme-scope) .font-body {
49843
+ font-family: var(--font-body);
49844
+ }
49581
49845
 
49582
- :where(.theme-scope) .transition-theme {
49583
- transition: all var(--motion-duration) var(--motion-ease);
49584
- }
49585
- :where(.theme-scope) .transition-theme-standard {
49586
- transition: all var(--motion-duration) var(--motion-ease);
49587
- }
49588
- :where(.theme-scope) .transition-theme-subtle {
49589
- transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
49590
- }
49591
- :where(.theme-scope) .transition-theme-expressive {
49592
- transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
49593
- }
49846
+ :where(.theme-scope) .text-h1 {
49847
+ font-size: var(--fs-h1);
49848
+ line-height: 1.1;
49849
+ }
49850
+ :where(.theme-scope) .text-h2 {
49851
+ font-size: var(--fs-h2);
49852
+ line-height: 1.15;
49853
+ }
49854
+ :where(.theme-scope) .text-h3 {
49855
+ font-size: var(--fs-h3);
49856
+ line-height: 1.2;
49857
+ }
49858
+ :where(.theme-scope) .text-body-size {
49859
+ font-size: var(--fs-body);
49860
+ }
49594
49861
 
49595
- /* Shade tokens (50..950) for primary */
49596
- :where(.theme-scope) .from-primary-50 {
49597
- --rb-gradient-from: rgb(var(--tb-primary-50)) var(--rb-gradient-from-position);
49598
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
49599
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49600
- }
49601
- :where(.theme-scope) .to-primary-50 {
49602
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
49603
- }
49604
- :where(.theme-scope) .from-primary-100 {
49605
- --rb-gradient-from: rgb(var(--tb-primary-100))
49606
- var(--rb-gradient-from-position);
49607
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
49608
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49609
- }
49610
- :where(.theme-scope) .to-primary-100 {
49611
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
49612
- }
49613
- :where(.theme-scope) .from-primary-200 {
49614
- --rb-gradient-from: rgb(var(--tb-primary-200))
49615
- var(--rb-gradient-from-position);
49616
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
49617
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49618
- }
49619
- :where(.theme-scope) .to-primary-200 {
49620
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
49621
- }
49622
- :where(.theme-scope) .from-primary-300 {
49623
- --rb-gradient-from: rgb(var(--tb-primary-300))
49624
- var(--rb-gradient-from-position);
49625
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
49626
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49627
- }
49628
- :where(.theme-scope) .to-primary-300 {
49629
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
49630
- }
49631
- :where(.theme-scope) .from-primary-400 {
49632
- --rb-gradient-from: rgb(var(--tb-primary-400))
49633
- var(--rb-gradient-from-position);
49634
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
49635
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49636
- }
49637
- :where(.theme-scope) .to-primary-400 {
49638
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
49639
- }
49640
- :where(.theme-scope) .from-primary-500 {
49641
- --rb-gradient-from: rgb(var(--tb-primary-500))
49642
- var(--rb-gradient-from-position);
49643
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
49644
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49645
- }
49646
- :where(.theme-scope) .to-primary-500 {
49647
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
49648
- }
49649
- :where(.theme-scope) .from-primary-600 {
49650
- --rb-gradient-from: rgb(var(--tb-primary-600))
49651
- var(--rb-gradient-from-position);
49652
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
49653
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49654
- }
49655
- :where(.theme-scope) .to-primary-600 {
49656
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
49657
- }
49658
- :where(.theme-scope) .from-primary-700 {
49659
- --rb-gradient-from: rgb(var(--tb-primary-700))
49660
- var(--rb-gradient-from-position);
49661
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
49662
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49663
- }
49664
- :where(.theme-scope) .to-primary-700 {
49665
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
49666
- }
49667
- :where(.theme-scope) .from-primary-800 {
49668
- --rb-gradient-from: rgb(var(--tb-primary-800))
49669
- var(--rb-gradient-from-position);
49670
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
49671
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49672
- }
49673
- :where(.theme-scope) .to-primary-800 {
49674
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
49675
- }
49676
- :where(.theme-scope) .from-primary-900 {
49677
- --rb-gradient-from: rgb(var(--tb-primary-900))
49678
- var(--rb-gradient-from-position);
49679
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
49680
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49681
- }
49682
- :where(.theme-scope) .to-primary-900 {
49683
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
49684
- }
49685
- :where(.theme-scope) .from-primary-950 {
49686
- --rb-gradient-from: rgb(var(--tb-primary-950))
49687
- var(--rb-gradient-from-position);
49688
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
49689
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49690
- }
49691
- :where(.theme-scope) .to-primary-950 {
49692
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
49693
- }
49694
-
49695
- /* Shade tokens (50..950) for secondary */
49696
- :where(.theme-scope) .from-secondary-50 {
49697
- --rb-gradient-from: rgb(var(--tb-secondary-50))
49698
- var(--rb-gradient-from-position);
49699
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
49700
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49701
- }
49702
- :where(.theme-scope) .to-secondary-50 {
49703
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
49704
- }
49705
- :where(.theme-scope) .from-secondary-100 {
49706
- --rb-gradient-from: rgb(var(--tb-secondary-100))
49707
- var(--rb-gradient-from-position);
49708
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
49709
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49710
- }
49711
- :where(.theme-scope) .to-secondary-100 {
49712
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
49713
- }
49714
- :where(.theme-scope) .from-secondary-200 {
49715
- --rb-gradient-from: rgb(var(--tb-secondary-200))
49716
- var(--rb-gradient-from-position);
49717
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
49718
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49719
- }
49720
- :where(.theme-scope) .to-secondary-200 {
49721
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
49722
- }
49723
- :where(.theme-scope) .from-secondary-300 {
49724
- --rb-gradient-from: rgb(var(--tb-secondary-300))
49725
- var(--rb-gradient-from-position);
49726
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
49727
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49728
- }
49729
- :where(.theme-scope) .to-secondary-300 {
49730
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
49731
- }
49732
- :where(.theme-scope) .from-secondary-400 {
49733
- --rb-gradient-from: rgb(var(--tb-secondary-400))
49734
- var(--rb-gradient-from-position);
49735
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
49736
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49737
- }
49738
- :where(.theme-scope) .to-secondary-400 {
49739
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
49740
- }
49741
- :where(.theme-scope) .from-secondary-500 {
49742
- --rb-gradient-from: rgb(var(--tb-secondary-500))
49743
- var(--rb-gradient-from-position);
49744
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
49745
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49746
- }
49747
- :where(.theme-scope) .to-secondary-500 {
49748
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
49749
- }
49750
- :where(.theme-scope) .from-secondary-600 {
49751
- --rb-gradient-from: rgb(var(--tb-secondary-600))
49752
- var(--rb-gradient-from-position);
49753
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
49754
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49755
- }
49756
- :where(.theme-scope) .to-secondary-600 {
49757
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
49758
- }
49759
- :where(.theme-scope) .from-secondary-700 {
49760
- --rb-gradient-from: rgb(var(--tb-secondary-700))
49761
- var(--rb-gradient-from-position);
49762
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
49763
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49764
- }
49765
- :where(.theme-scope) .to-secondary-700 {
49766
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
49767
- }
49768
- :where(.theme-scope) .from-secondary-800 {
49769
- --rb-gradient-from: rgb(var(--tb-secondary-800))
49770
- var(--rb-gradient-from-position);
49771
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
49772
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49773
- }
49774
- :where(.theme-scope) .to-secondary-800 {
49775
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
49776
- }
49777
- :where(.theme-scope) .from-secondary-900 {
49778
- --rb-gradient-from: rgb(var(--tb-secondary-900))
49779
- var(--rb-gradient-from-position);
49780
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
49781
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49782
- }
49783
- :where(.theme-scope) .to-secondary-900 {
49784
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
49785
- }
49786
- :where(.theme-scope) .from-secondary-950 {
49787
- --rb-gradient-from: rgb(var(--tb-secondary-950))
49788
- var(--rb-gradient-from-position);
49789
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
49790
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49791
- }
49792
- :where(.theme-scope) .to-secondary-950 {
49793
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
49794
- }
49795
-
49796
- /* Shade tokens (50..950) for accent */
49797
- :where(.theme-scope) .from-accent-50 {
49798
- --rb-gradient-from: rgb(var(--tb-accent-50)) var(--rb-gradient-from-position);
49799
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
49800
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49801
- }
49802
- :where(.theme-scope) .to-accent-50 {
49803
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
49804
- }
49805
- :where(.theme-scope) .from-accent-100 {
49806
- --rb-gradient-from: rgb(var(--tb-accent-100)) var(--rb-gradient-from-position);
49807
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
49808
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49809
- }
49810
- :where(.theme-scope) .to-accent-100 {
49811
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
49812
- }
49813
- :where(.theme-scope) .from-accent-200 {
49814
- --rb-gradient-from: rgb(var(--tb-accent-200)) var(--rb-gradient-from-position);
49815
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
49816
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49817
- }
49818
- :where(.theme-scope) .to-accent-200 {
49819
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
49820
- }
49821
- :where(.theme-scope) .from-accent-300 {
49822
- --rb-gradient-from: rgb(var(--tb-accent-300)) var(--rb-gradient-from-position);
49823
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
49824
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49825
- }
49826
- :where(.theme-scope) .to-accent-300 {
49827
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
49828
- }
49829
- :where(.theme-scope) .from-accent-400 {
49830
- --rb-gradient-from: rgb(var(--tb-accent-400)) var(--rb-gradient-from-position);
49831
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
49832
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49833
- }
49834
- :where(.theme-scope) .to-accent-400 {
49835
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
49836
- }
49837
- :where(.theme-scope) .from-accent-500 {
49838
- --rb-gradient-from: rgb(var(--tb-accent-500)) var(--rb-gradient-from-position);
49839
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
49840
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49841
- }
49842
- :where(.theme-scope) .to-accent-500 {
49843
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
49844
- }
49845
- :where(.theme-scope) .from-accent-600 {
49846
- --rb-gradient-from: rgb(var(--tb-accent-600)) var(--rb-gradient-from-position);
49847
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
49848
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49849
- }
49850
- :where(.theme-scope) .to-accent-600 {
49851
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
49852
- }
49853
- :where(.theme-scope) .from-accent-700 {
49854
- --rb-gradient-from: rgb(var(--tb-accent-700)) var(--rb-gradient-from-position);
49855
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
49856
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49857
- }
49858
- :where(.theme-scope) .to-accent-700 {
49859
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
49860
- }
49861
- :where(.theme-scope) .from-accent-800 {
49862
- --rb-gradient-from: rgb(var(--tb-accent-800)) var(--rb-gradient-from-position);
49863
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
49864
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49865
- }
49866
- :where(.theme-scope) .to-accent-800 {
49867
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
49868
- }
49869
- :where(.theme-scope) .from-accent-900 {
49870
- --rb-gradient-from: rgb(var(--tb-accent-900)) var(--rb-gradient-from-position);
49871
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
49872
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49873
- }
49874
- :where(.theme-scope) .to-accent-900 {
49875
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
49876
- }
49877
- :where(.theme-scope) .from-accent-950 {
49878
- --rb-gradient-from: rgb(var(--tb-accent-950)) var(--rb-gradient-from-position);
49879
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
49880
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49881
- }
49882
- :where(.theme-scope) .to-accent-950 {
49883
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
49884
- }
49862
+ :where(.theme-scope) .transition-theme {
49863
+ transition: all var(--motion-duration) var(--motion-ease);
49864
+ }
49865
+ :where(.theme-scope) .transition-theme-standard {
49866
+ transition: all var(--motion-duration) var(--motion-ease);
49867
+ }
49868
+ :where(.theme-scope) .transition-theme-subtle {
49869
+ transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
49870
+ }
49871
+ :where(.theme-scope) .transition-theme-expressive {
49872
+ transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
49873
+ }
49885
49874
 
49886
- /* Shade tokens (50..950) for neutral */
49887
- :where(.theme-scope) .from-neutral-50 {
49888
- --rb-gradient-from: rgb(var(--tb-neutral-50)) var(--rb-gradient-from-position);
49889
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
49890
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49891
- }
49892
- :where(.theme-scope) .to-neutral-50 {
49893
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
49894
- }
49895
- :where(.theme-scope) .from-neutral-100 {
49896
- --rb-gradient-from: rgb(var(--tb-neutral-100))
49897
- var(--rb-gradient-from-position);
49898
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
49899
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49900
- }
49901
- :where(.theme-scope) .to-neutral-100 {
49902
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
49903
- }
49904
- :where(.theme-scope) .from-neutral-200 {
49905
- --rb-gradient-from: rgb(var(--tb-neutral-200))
49906
- var(--rb-gradient-from-position);
49907
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
49908
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49909
- }
49910
- :where(.theme-scope) .to-neutral-200 {
49911
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
49912
- }
49913
- :where(.theme-scope) .from-neutral-300 {
49914
- --rb-gradient-from: rgb(var(--tb-neutral-300))
49915
- var(--rb-gradient-from-position);
49916
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
49917
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49918
- }
49919
- :where(.theme-scope) .to-neutral-300 {
49920
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
49921
- }
49922
- :where(.theme-scope) .from-neutral-400 {
49923
- --rb-gradient-from: rgb(var(--tb-neutral-400))
49924
- var(--rb-gradient-from-position);
49925
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
49926
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49927
- }
49928
- :where(.theme-scope) .to-neutral-400 {
49929
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
49930
- }
49931
- :where(.theme-scope) .from-neutral-500 {
49932
- --rb-gradient-from: rgb(var(--tb-neutral-500))
49933
- var(--rb-gradient-from-position);
49934
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
49935
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49936
- }
49937
- :where(.theme-scope) .to-neutral-500 {
49938
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
49939
- }
49940
- :where(.theme-scope) .from-neutral-600 {
49941
- --rb-gradient-from: rgb(var(--tb-neutral-600))
49942
- var(--rb-gradient-from-position);
49943
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
49944
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49945
- }
49946
- :where(.theme-scope) .to-neutral-600 {
49947
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
49948
- }
49949
- :where(.theme-scope) .from-neutral-700 {
49950
- --rb-gradient-from: rgb(var(--tb-neutral-700))
49951
- var(--rb-gradient-from-position);
49952
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
49953
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49954
- }
49955
- :where(.theme-scope) .to-neutral-700 {
49956
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
49957
- }
49958
- :where(.theme-scope) .from-neutral-800 {
49959
- --rb-gradient-from: rgb(var(--tb-neutral-800))
49960
- var(--rb-gradient-from-position);
49961
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
49962
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49963
- }
49964
- :where(.theme-scope) .to-neutral-800 {
49965
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
49966
- }
49967
- :where(.theme-scope) .from-neutral-900 {
49968
- --rb-gradient-from: rgb(var(--tb-neutral-900))
49969
- var(--rb-gradient-from-position);
49970
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
49971
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49972
- }
49973
- :where(.theme-scope) .to-neutral-900 {
49974
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
49975
- }
49976
- :where(.theme-scope) .from-neutral-950 {
49977
- --rb-gradient-from: rgb(var(--tb-neutral-950))
49978
- var(--rb-gradient-from-position);
49979
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
49980
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49981
- }
49982
- :where(.theme-scope) .to-neutral-950 {
49983
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
49984
- }
49985
-
49986
- /* =================================================================
49875
+ /* Shade tokens (50..950) for primary */
49876
+ :where(.theme-scope) .from-primary-50 {
49877
+ --rb-gradient-from: rgb(var(--tb-primary-50))
49878
+ var(--rb-gradient-from-position);
49879
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
49880
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49881
+ }
49882
+ :where(.theme-scope) .to-primary-50 {
49883
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
49884
+ }
49885
+ :where(.theme-scope) .from-primary-100 {
49886
+ --rb-gradient-from: rgb(var(--tb-primary-100))
49887
+ var(--rb-gradient-from-position);
49888
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
49889
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49890
+ }
49891
+ :where(.theme-scope) .to-primary-100 {
49892
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
49893
+ }
49894
+ :where(.theme-scope) .from-primary-200 {
49895
+ --rb-gradient-from: rgb(var(--tb-primary-200))
49896
+ var(--rb-gradient-from-position);
49897
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
49898
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49899
+ }
49900
+ :where(.theme-scope) .to-primary-200 {
49901
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
49902
+ }
49903
+ :where(.theme-scope) .from-primary-300 {
49904
+ --rb-gradient-from: rgb(var(--tb-primary-300))
49905
+ var(--rb-gradient-from-position);
49906
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
49907
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49908
+ }
49909
+ :where(.theme-scope) .to-primary-300 {
49910
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
49911
+ }
49912
+ :where(.theme-scope) .from-primary-400 {
49913
+ --rb-gradient-from: rgb(var(--tb-primary-400))
49914
+ var(--rb-gradient-from-position);
49915
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
49916
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49917
+ }
49918
+ :where(.theme-scope) .to-primary-400 {
49919
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
49920
+ }
49921
+ :where(.theme-scope) .from-primary-500 {
49922
+ --rb-gradient-from: rgb(var(--tb-primary-500))
49923
+ var(--rb-gradient-from-position);
49924
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
49925
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49926
+ }
49927
+ :where(.theme-scope) .to-primary-500 {
49928
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
49929
+ }
49930
+ :where(.theme-scope) .from-primary-600 {
49931
+ --rb-gradient-from: rgb(var(--tb-primary-600))
49932
+ var(--rb-gradient-from-position);
49933
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
49934
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49935
+ }
49936
+ :where(.theme-scope) .to-primary-600 {
49937
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
49938
+ }
49939
+ :where(.theme-scope) .from-primary-700 {
49940
+ --rb-gradient-from: rgb(var(--tb-primary-700))
49941
+ var(--rb-gradient-from-position);
49942
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
49943
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49944
+ }
49945
+ :where(.theme-scope) .to-primary-700 {
49946
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
49947
+ }
49948
+ :where(.theme-scope) .from-primary-800 {
49949
+ --rb-gradient-from: rgb(var(--tb-primary-800))
49950
+ var(--rb-gradient-from-position);
49951
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
49952
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49953
+ }
49954
+ :where(.theme-scope) .to-primary-800 {
49955
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
49956
+ }
49957
+ :where(.theme-scope) .from-primary-900 {
49958
+ --rb-gradient-from: rgb(var(--tb-primary-900))
49959
+ var(--rb-gradient-from-position);
49960
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
49961
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49962
+ }
49963
+ :where(.theme-scope) .to-primary-900 {
49964
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
49965
+ }
49966
+ :where(.theme-scope) .from-primary-950 {
49967
+ --rb-gradient-from: rgb(var(--tb-primary-950))
49968
+ var(--rb-gradient-from-position);
49969
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
49970
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49971
+ }
49972
+ :where(.theme-scope) .to-primary-950 {
49973
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
49974
+ }
49975
+
49976
+ /* Shade tokens (50..950) for secondary */
49977
+ :where(.theme-scope) .from-secondary-50 {
49978
+ --rb-gradient-from: rgb(var(--tb-secondary-50))
49979
+ var(--rb-gradient-from-position);
49980
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
49981
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49982
+ }
49983
+ :where(.theme-scope) .to-secondary-50 {
49984
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
49985
+ }
49986
+ :where(.theme-scope) .from-secondary-100 {
49987
+ --rb-gradient-from: rgb(var(--tb-secondary-100))
49988
+ var(--rb-gradient-from-position);
49989
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
49990
+ var(--rb-gradient-to-position);
49991
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
49992
+ }
49993
+ :where(.theme-scope) .to-secondary-100 {
49994
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
49995
+ var(--rb-gradient-to-position);
49996
+ }
49997
+ :where(.theme-scope) .from-secondary-200 {
49998
+ --rb-gradient-from: rgb(var(--tb-secondary-200))
49999
+ var(--rb-gradient-from-position);
50000
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
50001
+ var(--rb-gradient-to-position);
50002
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50003
+ }
50004
+ :where(.theme-scope) .to-secondary-200 {
50005
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
50006
+ var(--rb-gradient-to-position);
50007
+ }
50008
+ :where(.theme-scope) .from-secondary-300 {
50009
+ --rb-gradient-from: rgb(var(--tb-secondary-300))
50010
+ var(--rb-gradient-from-position);
50011
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
50012
+ var(--rb-gradient-to-position);
50013
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50014
+ }
50015
+ :where(.theme-scope) .to-secondary-300 {
50016
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
50017
+ var(--rb-gradient-to-position);
50018
+ }
50019
+ :where(.theme-scope) .from-secondary-400 {
50020
+ --rb-gradient-from: rgb(var(--tb-secondary-400))
50021
+ var(--rb-gradient-from-position);
50022
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
50023
+ var(--rb-gradient-to-position);
50024
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50025
+ }
50026
+ :where(.theme-scope) .to-secondary-400 {
50027
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
50028
+ var(--rb-gradient-to-position);
50029
+ }
50030
+ :where(.theme-scope) .from-secondary-500 {
50031
+ --rb-gradient-from: rgb(var(--tb-secondary-500))
50032
+ var(--rb-gradient-from-position);
50033
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
50034
+ var(--rb-gradient-to-position);
50035
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50036
+ }
50037
+ :where(.theme-scope) .to-secondary-500 {
50038
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
50039
+ var(--rb-gradient-to-position);
50040
+ }
50041
+ :where(.theme-scope) .from-secondary-600 {
50042
+ --rb-gradient-from: rgb(var(--tb-secondary-600))
50043
+ var(--rb-gradient-from-position);
50044
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
50045
+ var(--rb-gradient-to-position);
50046
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50047
+ }
50048
+ :where(.theme-scope) .to-secondary-600 {
50049
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
50050
+ var(--rb-gradient-to-position);
50051
+ }
50052
+ :where(.theme-scope) .from-secondary-700 {
50053
+ --rb-gradient-from: rgb(var(--tb-secondary-700))
50054
+ var(--rb-gradient-from-position);
50055
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
50056
+ var(--rb-gradient-to-position);
50057
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50058
+ }
50059
+ :where(.theme-scope) .to-secondary-700 {
50060
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
50061
+ var(--rb-gradient-to-position);
50062
+ }
50063
+ :where(.theme-scope) .from-secondary-800 {
50064
+ --rb-gradient-from: rgb(var(--tb-secondary-800))
50065
+ var(--rb-gradient-from-position);
50066
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
50067
+ var(--rb-gradient-to-position);
50068
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50069
+ }
50070
+ :where(.theme-scope) .to-secondary-800 {
50071
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
50072
+ var(--rb-gradient-to-position);
50073
+ }
50074
+ :where(.theme-scope) .from-secondary-900 {
50075
+ --rb-gradient-from: rgb(var(--tb-secondary-900))
50076
+ var(--rb-gradient-from-position);
50077
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
50078
+ var(--rb-gradient-to-position);
50079
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50080
+ }
50081
+ :where(.theme-scope) .to-secondary-900 {
50082
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
50083
+ var(--rb-gradient-to-position);
50084
+ }
50085
+ :where(.theme-scope) .from-secondary-950 {
50086
+ --rb-gradient-from: rgb(var(--tb-secondary-950))
50087
+ var(--rb-gradient-from-position);
50088
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
50089
+ var(--rb-gradient-to-position);
50090
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50091
+ }
50092
+ :where(.theme-scope) .to-secondary-950 {
50093
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
50094
+ var(--rb-gradient-to-position);
50095
+ }
50096
+
50097
+ /* Shade tokens (50..950) for accent */
50098
+ :where(.theme-scope) .from-accent-50 {
50099
+ --rb-gradient-from: rgb(var(--tb-accent-50))
50100
+ var(--rb-gradient-from-position);
50101
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
50102
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50103
+ }
50104
+ :where(.theme-scope) .to-accent-50 {
50105
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
50106
+ }
50107
+ :where(.theme-scope) .from-accent-100 {
50108
+ --rb-gradient-from: rgb(var(--tb-accent-100))
50109
+ var(--rb-gradient-from-position);
50110
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
50111
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50112
+ }
50113
+ :where(.theme-scope) .to-accent-100 {
50114
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
50115
+ }
50116
+ :where(.theme-scope) .from-accent-200 {
50117
+ --rb-gradient-from: rgb(var(--tb-accent-200))
50118
+ var(--rb-gradient-from-position);
50119
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
50120
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50121
+ }
50122
+ :where(.theme-scope) .to-accent-200 {
50123
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
50124
+ }
50125
+ :where(.theme-scope) .from-accent-300 {
50126
+ --rb-gradient-from: rgb(var(--tb-accent-300))
50127
+ var(--rb-gradient-from-position);
50128
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
50129
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50130
+ }
50131
+ :where(.theme-scope) .to-accent-300 {
50132
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
50133
+ }
50134
+ :where(.theme-scope) .from-accent-400 {
50135
+ --rb-gradient-from: rgb(var(--tb-accent-400))
50136
+ var(--rb-gradient-from-position);
50137
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
50138
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50139
+ }
50140
+ :where(.theme-scope) .to-accent-400 {
50141
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
50142
+ }
50143
+ :where(.theme-scope) .from-accent-500 {
50144
+ --rb-gradient-from: rgb(var(--tb-accent-500))
50145
+ var(--rb-gradient-from-position);
50146
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
50147
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50148
+ }
50149
+ :where(.theme-scope) .to-accent-500 {
50150
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
50151
+ }
50152
+ :where(.theme-scope) .from-accent-600 {
50153
+ --rb-gradient-from: rgb(var(--tb-accent-600))
50154
+ var(--rb-gradient-from-position);
50155
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
50156
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50157
+ }
50158
+ :where(.theme-scope) .to-accent-600 {
50159
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
50160
+ }
50161
+ :where(.theme-scope) .from-accent-700 {
50162
+ --rb-gradient-from: rgb(var(--tb-accent-700))
50163
+ var(--rb-gradient-from-position);
50164
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
50165
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50166
+ }
50167
+ :where(.theme-scope) .to-accent-700 {
50168
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
50169
+ }
50170
+ :where(.theme-scope) .from-accent-800 {
50171
+ --rb-gradient-from: rgb(var(--tb-accent-800))
50172
+ var(--rb-gradient-from-position);
50173
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
50174
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50175
+ }
50176
+ :where(.theme-scope) .to-accent-800 {
50177
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
50178
+ }
50179
+ :where(.theme-scope) .from-accent-900 {
50180
+ --rb-gradient-from: rgb(var(--tb-accent-900))
50181
+ var(--rb-gradient-from-position);
50182
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
50183
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50184
+ }
50185
+ :where(.theme-scope) .to-accent-900 {
50186
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
50187
+ }
50188
+ :where(.theme-scope) .from-accent-950 {
50189
+ --rb-gradient-from: rgb(var(--tb-accent-950))
50190
+ var(--rb-gradient-from-position);
50191
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
50192
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50193
+ }
50194
+ :where(.theme-scope) .to-accent-950 {
50195
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
50196
+ }
50197
+
50198
+ /* Shade tokens (50..950) for neutral */
50199
+ :where(.theme-scope) .from-neutral-50 {
50200
+ --rb-gradient-from: rgb(var(--tb-neutral-50))
50201
+ var(--rb-gradient-from-position);
50202
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
50203
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50204
+ }
50205
+ :where(.theme-scope) .to-neutral-50 {
50206
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
50207
+ }
50208
+ :where(.theme-scope) .from-neutral-100 {
50209
+ --rb-gradient-from: rgb(var(--tb-neutral-100))
50210
+ var(--rb-gradient-from-position);
50211
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
50212
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50213
+ }
50214
+ :where(.theme-scope) .to-neutral-100 {
50215
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
50216
+ }
50217
+ :where(.theme-scope) .from-neutral-200 {
50218
+ --rb-gradient-from: rgb(var(--tb-neutral-200))
50219
+ var(--rb-gradient-from-position);
50220
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
50221
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50222
+ }
50223
+ :where(.theme-scope) .to-neutral-200 {
50224
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
50225
+ }
50226
+ :where(.theme-scope) .from-neutral-300 {
50227
+ --rb-gradient-from: rgb(var(--tb-neutral-300))
50228
+ var(--rb-gradient-from-position);
50229
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
50230
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50231
+ }
50232
+ :where(.theme-scope) .to-neutral-300 {
50233
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
50234
+ }
50235
+ :where(.theme-scope) .from-neutral-400 {
50236
+ --rb-gradient-from: rgb(var(--tb-neutral-400))
50237
+ var(--rb-gradient-from-position);
50238
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
50239
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50240
+ }
50241
+ :where(.theme-scope) .to-neutral-400 {
50242
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
50243
+ }
50244
+ :where(.theme-scope) .from-neutral-500 {
50245
+ --rb-gradient-from: rgb(var(--tb-neutral-500))
50246
+ var(--rb-gradient-from-position);
50247
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
50248
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50249
+ }
50250
+ :where(.theme-scope) .to-neutral-500 {
50251
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
50252
+ }
50253
+ :where(.theme-scope) .from-neutral-600 {
50254
+ --rb-gradient-from: rgb(var(--tb-neutral-600))
50255
+ var(--rb-gradient-from-position);
50256
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
50257
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50258
+ }
50259
+ :where(.theme-scope) .to-neutral-600 {
50260
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
50261
+ }
50262
+ :where(.theme-scope) .from-neutral-700 {
50263
+ --rb-gradient-from: rgb(var(--tb-neutral-700))
50264
+ var(--rb-gradient-from-position);
50265
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
50266
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50267
+ }
50268
+ :where(.theme-scope) .to-neutral-700 {
50269
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
50270
+ }
50271
+ :where(.theme-scope) .from-neutral-800 {
50272
+ --rb-gradient-from: rgb(var(--tb-neutral-800))
50273
+ var(--rb-gradient-from-position);
50274
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
50275
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50276
+ }
50277
+ :where(.theme-scope) .to-neutral-800 {
50278
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
50279
+ }
50280
+ :where(.theme-scope) .from-neutral-900 {
50281
+ --rb-gradient-from: rgb(var(--tb-neutral-900))
50282
+ var(--rb-gradient-from-position);
50283
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
50284
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50285
+ }
50286
+ :where(.theme-scope) .to-neutral-900 {
50287
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
50288
+ }
50289
+ :where(.theme-scope) .from-neutral-950 {
50290
+ --rb-gradient-from: rgb(var(--tb-neutral-950))
50291
+ var(--rb-gradient-from-position);
50292
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
50293
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
50294
+ }
50295
+ :where(.theme-scope) .to-neutral-950 {
50296
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
50297
+ }
50298
+
50299
+ /* =================================================================
49987
50300
  Header System Class Naming Conventions
49988
50301
 
49989
50302
  rb-header-* Utility-style classes set in site-header.ts layouts
@@ -49996,240 +50309,240 @@ var containerResponsiveThemeCss = `/*
49996
50309
  (nav-dropdown, nav-mobile-panel, nav-underline-grow)
49997
50310
  ================================================================= */
49998
50311
 
49999
- /* =================================================================
50312
+ /* =================================================================
50000
50313
  Header Layout Padding
50001
50314
 
50002
50315
  Padding is controlled entirely by CSS based on variant class.
50003
50316
  This ensures shrink headers look identical to non-shrink before scroll.
50004
50317
  ================================================================= */
50005
50318
 
50006
- /* Prevent scroll anchoring feedback loops when the header height transitions.
50319
+ /* Prevent scroll anchoring feedback loops when the header height transitions.
50007
50320
  In some browsers, resizing a sticky header near the top can cause the UA to
50008
50321
  adjust scroll position ("scroll anchoring"), which then flips the
50009
50322
  \`header-scrolled\` threshold logic back and forth. */
50010
- :where(.theme-scope) .block-site-header {
50011
- overflow-anchor: none;
50012
- }
50323
+ :where(.theme-scope) .block-site-header {
50324
+ overflow-anchor: none;
50325
+ }
50013
50326
 
50014
- /* Base padding for horizontal variants (classic, transparent) */
50015
- :where(.theme-scope) .rb-header-layout {
50016
- padding-top: 1rem;
50017
- padding-bottom: 1rem;
50018
- transition: padding 300ms var(--motion-ease, ease);
50019
- }
50327
+ /* Base padding for horizontal variants (classic, transparent) */
50328
+ :where(.theme-scope) .rb-header-layout {
50329
+ padding-top: 1rem;
50330
+ padding-bottom: 1rem;
50331
+ transition: padding 300ms var(--motion-ease, ease);
50332
+ }
50020
50333
 
50021
- /* Vertical variants need more breathing room
50334
+ /* Vertical variants need more breathing room
50022
50335
  Note: header-variant-* is on Section (ancestor), rb-header-layout on inner div */
50023
- :where(.theme-scope) .header-variant-centered .rb-header-layout,
50024
- :where(.theme-scope) .header-variant-editorial .rb-header-layout {
50025
- padding-top: 1.5rem;
50026
- padding-bottom: 1.5rem;
50027
- }
50336
+ :where(.theme-scope) .header-variant-centered .rb-header-layout {
50337
+ padding-top: 1.5rem;
50338
+ padding-bottom: 1.5rem;
50339
+ }
50028
50340
 
50029
- /* Floating variant - compact padding */
50030
- :where(.theme-scope) .header-variant-floating .rb-header-layout {
50031
- padding-top: 0.75rem;
50032
- padding-bottom: 0.75rem;
50033
- }
50341
+ /* Floating variant - compact padding */
50342
+ :where(.theme-scope) .header-variant-floating .rb-header-layout {
50343
+ padding-top: 0.75rem;
50344
+ padding-bottom: 0.75rem;
50345
+ }
50034
50346
 
50035
- /* =================================================================
50347
+ /* =================================================================
50036
50348
  Header Shrink-on-Scroll
50037
50349
 
50038
50350
  Only applies when .rb-header-shrink is present AND user has scrolled.
50039
50351
  No changes until scroll - shrink header = non-shrink header initially.
50040
50352
  ================================================================= */
50041
50353
 
50042
- /* Scrolled state - reduce padding */
50043
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
50044
- padding-top: 0.5rem;
50045
- padding-bottom: 0.5rem;
50046
- }
50354
+ /* Scrolled state - reduce padding */
50355
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
50356
+ padding-top: 0.5rem;
50357
+ padding-bottom: 0.5rem;
50358
+ }
50047
50359
 
50048
- /* Vertical variants get gentler reduction
50360
+ /* Vertical variants get gentler reduction
50049
50361
  Note: Both classes are on Section, rb-header-layout on inner div */
50050
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-centered .rb-header-layout,
50051
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-editorial .rb-header-layout {
50052
- padding-top: 0.75rem;
50053
- padding-bottom: 0.75rem;
50054
- }
50362
+ :where(.theme-scope)
50363
+ .rb-header-shrink.header-scrolled.header-variant-centered
50364
+ .rb-header-layout {
50365
+ padding-top: 0.75rem;
50366
+ padding-bottom: 0.75rem;
50367
+ }
50055
50368
 
50056
- /* Floating variant */
50057
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-floating .rb-header-layout {
50058
- padding-top: 0.25rem;
50059
- padding-bottom: 0.25rem;
50060
- }
50369
+ /* Floating variant */
50370
+ :where(.theme-scope)
50371
+ .rb-header-shrink.header-scrolled.header-variant-floating
50372
+ .rb-header-layout {
50373
+ padding-top: 0.25rem;
50374
+ padding-bottom: 0.25rem;
50375
+ }
50061
50376
 
50062
- /* =================================================================
50377
+ /* =================================================================
50063
50378
  Logo & Title Sizing
50064
50379
 
50065
50380
  Font sizes controlled here, not via utility classes, so shrink
50066
50381
  transitions work (utility classes would override :where()).
50067
50382
  ================================================================= */
50068
50383
 
50069
- /* Logo image sizing */
50070
- :where(.theme-scope) .rb-header-logo-sm {
50071
- height: 2.5rem;
50072
- transition: height 300ms var(--motion-ease, ease);
50073
- }
50074
- :where(.theme-scope) .rb-header-logo-lg {
50075
- height: 3rem;
50076
- transition: height 300ms var(--motion-ease, ease);
50077
- }
50384
+ /* Logo image sizing */
50385
+ :where(.theme-scope) .rb-header-logo-sm {
50386
+ height: 2.5rem;
50387
+ transition: height 300ms var(--motion-ease, ease);
50388
+ }
50389
+ :where(.theme-scope) .rb-header-logo-lg {
50390
+ height: 3rem;
50391
+ transition: height 300ms var(--motion-ease, ease);
50392
+ }
50078
50393
 
50079
- /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
50080
- :where(.theme-scope) .header-logo-text {
50081
- font-size: 1.125rem; /* matches rb-text-lg */
50082
- line-height: 1.75rem;
50083
- transition: font-size 300ms var(--motion-ease, ease);
50084
- }
50394
+ /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
50395
+ :where(.theme-scope) .header-logo-text {
50396
+ font-size: 1.125rem; /* matches rb-text-lg */
50397
+ line-height: 1.75rem;
50398
+ transition: font-size 300ms var(--motion-ease, ease);
50399
+ }
50085
50400
 
50086
- /* Mobile: reduce site title size (~30%) to keep header compact */
50087
- @container rb-site (max-width: 767px) {
50401
+ /* Mobile: reduce site title size (~30%) to keep header compact */
50402
+ @container rb-site (max-width: 767px) {
50088
50403
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
50089
50404
  :where(.theme-scope) .header-logo-text {
50090
- font-size: 0.8rem;
50091
- line-height: 1.25rem;
50092
- }
50405
+ font-size: 0.8rem;
50406
+ line-height: 1.25rem;
50407
+ }
50093
50408
 
50094
- :where(.theme-scope) .header-variant-centered .header-logo-text,
50095
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
50096
- font-size: 0.875rem;
50097
- line-height: 1.25rem;
50098
- }
50409
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
50410
+ font-size: 0.875rem;
50411
+ line-height: 1.25rem;
50412
+ }
50099
50413
  }
50100
50414
  }
50101
50415
 
50102
- /* Centered/editorial variants use larger title */
50103
- :where(.theme-scope) .header-variant-centered .header-logo-text,
50104
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
50105
- font-size: 1.25rem; /* matches rb-text-xl */
50106
- line-height: 1.75rem;
50107
- }
50416
+ /* Centered variant uses larger title */
50417
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
50418
+ font-size: 1.25rem; /* matches rb-text-xl */
50419
+ line-height: 1.75rem;
50420
+ }
50108
50421
 
50109
- /* =================================================================
50422
+ /* =================================================================
50110
50423
  Shrink on Scroll - Logo & Title
50111
50424
  ================================================================= */
50112
50425
 
50113
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
50114
- height: 2rem;
50115
- }
50116
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
50117
- height: 2.5rem;
50118
- }
50119
- :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
50120
- font-size: 0.875rem;
50121
- }
50426
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
50427
+ height: 2rem;
50428
+ }
50429
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
50430
+ height: 2.5rem;
50431
+ }
50432
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
50433
+ font-size: 0.875rem;
50434
+ }
50122
50435
 
50123
- @container rb-site (max-width: 767px) {
50436
+ @container rb-site (max-width: 767px) {
50124
50437
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
50125
50438
  :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
50126
- font-size: 0.75rem;
50127
- }
50439
+ font-size: 0.75rem;
50440
+ }
50128
50441
  }
50129
50442
  }
50130
50443
 
50131
- /* =================================================================
50444
+ /* =================================================================
50132
50445
  Accessibility: Reduced Motion
50133
50446
  ================================================================= */
50134
50447
 
50135
- @media (prefers-reduced-motion: reduce) {
50136
- :where(.theme-scope) .rb-header-layout,
50137
- :where(.theme-scope) .rb-header-logo-sm,
50138
- :where(.theme-scope) .rb-header-logo-lg,
50139
- :where(.theme-scope) .header-logo-text {
50140
- transition: none;
50448
+ @media (prefers-reduced-motion: reduce) {
50449
+ :where(.theme-scope) .rb-header-layout,
50450
+ :where(.theme-scope) .rb-header-logo-sm,
50451
+ :where(.theme-scope) .rb-header-logo-lg,
50452
+ :where(.theme-scope) .header-logo-text {
50453
+ transition: none;
50454
+ }
50141
50455
  }
50142
- }
50143
50456
 
50144
- /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
50145
- :where(.theme-scope) .nav-underline-grow {
50146
- position: relative;
50147
- overflow: visible;
50148
- }
50149
- :where(.theme-scope) .nav-underline-grow::after {
50150
- content: "";
50151
- position: absolute;
50152
- left: 0;
50153
- bottom: var(--nav-underline-offset, -0.35em);
50154
- width: 100%;
50155
- height: 2px;
50156
- background-color: currentColor;
50157
- transform: scaleX(0);
50158
- transform-origin: left center;
50159
- transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
50160
- }
50161
- :where(.theme-scope) .nav-underline-grow:hover::after,
50162
- :where(.theme-scope)
50163
- .nav-underline-grow.nav-underline-active[data-active="true"]::after {
50164
- transform: scaleX(1);
50165
- }
50166
- :where(.theme-scope) .nav-underline-offset-tight {
50167
- --nav-underline-offset: -0.2em;
50168
- }
50169
- :where(.theme-scope) .nav-underline-offset-normal {
50170
- --nav-underline-offset: -0.3em;
50171
- }
50172
- :where(.theme-scope) .nav-underline-offset-loose {
50173
- --nav-underline-offset: -0.45em;
50174
- }
50457
+ /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
50458
+ :where(.theme-scope) .nav-underline-grow {
50459
+ position: relative;
50460
+ overflow: visible;
50461
+ }
50462
+ :where(.theme-scope) .nav-underline-grow::after {
50463
+ content: '';
50464
+ position: absolute;
50465
+ left: 0;
50466
+ bottom: var(--nav-underline-offset, -0.35em);
50467
+ width: 100%;
50468
+ height: 2px;
50469
+ background-color: currentColor;
50470
+ transform: scaleX(0);
50471
+ transform-origin: left center;
50472
+ transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
50473
+ }
50474
+ :where(.theme-scope) .nav-underline-grow:hover::after,
50475
+ :where(.theme-scope)
50476
+ .nav-underline-grow.nav-underline-active[data-active='true']::after {
50477
+ transform: scaleX(1);
50478
+ }
50479
+ :where(.theme-scope) .nav-underline-offset-tight {
50480
+ --nav-underline-offset: -0.2em;
50481
+ }
50482
+ :where(.theme-scope) .nav-underline-offset-normal {
50483
+ --nav-underline-offset: -0.3em;
50484
+ }
50485
+ :where(.theme-scope) .nav-underline-offset-loose {
50486
+ --nav-underline-offset: -0.45em;
50487
+ }
50175
50488
 
50176
- :where(.theme-scope) .card-surface {
50177
- background: rgb(var(--tb-surface));
50178
- color: rgb(var(--tb-onSurface, var(--tb-text)));
50179
- border: 1px solid rgb(var(--tb-border));
50180
- border-radius: var(--radius-card);
50181
- box-shadow: var(--shadow-elev);
50182
- }
50183
- :where(.theme-scope) .media-rounded {
50184
- border-radius: var(--radius-card);
50185
- }
50489
+ :where(.theme-scope) .card-surface {
50490
+ background: rgb(var(--tb-surface));
50491
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
50492
+ border: 1px solid rgb(var(--tb-border));
50493
+ border-radius: var(--radius-card);
50494
+ box-shadow: var(--shadow-elev);
50495
+ }
50496
+ :where(.theme-scope) .media-rounded {
50497
+ border-radius: var(--radius-card);
50498
+ }
50186
50499
 
50187
- :where(.theme-scope) .is-placeholder::after {
50188
- content: "Placeholder";
50189
- position: absolute;
50190
- top: 0.5rem;
50191
- left: 0.5rem;
50192
- font-size: 11px;
50193
- background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
50194
- color: rgb(var(--tb-text));
50195
- padding: 0.15rem 0.35rem;
50196
- border-radius: 4px;
50197
- opacity: 0.85;
50198
- }
50500
+ :where(.theme-scope) .is-placeholder::after {
50501
+ content: 'Placeholder';
50502
+ position: absolute;
50503
+ top: 0.5rem;
50504
+ left: 0.5rem;
50505
+ font-size: 11px;
50506
+ background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
50507
+ color: rgb(var(--tb-text));
50508
+ padding: 0.15rem 0.35rem;
50509
+ border-radius: 4px;
50510
+ opacity: 0.85;
50511
+ }
50199
50512
 
50200
- /* Status badges - theme-aware styling for capacity indicators */
50201
- :where(.theme-scope) .badge-status {
50202
- display: inline-flex;
50203
- align-items: center;
50204
- padding: 0.125rem 0.625rem;
50205
- border-radius: 9999px;
50206
- font-size: 0.75rem;
50207
- font-weight: 500;
50208
- line-height: 1.25rem;
50209
- }
50513
+ /* Status badges - theme-aware styling for capacity indicators */
50514
+ :where(.theme-scope) .badge-status {
50515
+ display: inline-flex;
50516
+ align-items: center;
50517
+ padding: 0.125rem 0.625rem;
50518
+ border-radius: 9999px;
50519
+ font-size: 0.75rem;
50520
+ font-weight: 500;
50521
+ line-height: 1.25rem;
50522
+ }
50210
50523
 
50211
- /* All badges use a subtle theme-aware style by default */
50212
- :where(.theme-scope) .badge-status-available {
50213
- background-color: rgba(var(--tb-secondary), 0.15);
50214
- color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
50215
- }
50524
+ /* All badges use a subtle theme-aware style by default */
50525
+ :where(.theme-scope) .badge-status-available {
50526
+ background-color: rgba(var(--tb-secondary), 0.15);
50527
+ color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
50528
+ }
50216
50529
 
50217
- :where(.theme-scope) .badge-status-low {
50218
- background-color: rgba(var(--tb-accent), 0.15);
50219
- color: rgb(var(--tb-accent-700, var(--tb-accent)));
50220
- }
50530
+ :where(.theme-scope) .badge-status-low {
50531
+ background-color: rgba(var(--tb-accent), 0.15);
50532
+ color: rgb(var(--tb-accent-700, var(--tb-accent)));
50533
+ }
50221
50534
 
50222
- :where(.theme-scope) .badge-status-sold-out {
50223
- background-color: rgba(var(--tb-text), 0.1);
50224
- color: rgb(var(--tb-mutedText));
50225
- }
50535
+ :where(.theme-scope) .badge-status-sold-out {
50536
+ background-color: rgba(var(--tb-text), 0.1);
50537
+ color: rgb(var(--tb-mutedText));
50538
+ }
50226
50539
 
50227
- /* Event list empty state - theme-aware */
50228
- :where(.theme-scope) .event-list-empty {
50229
- background-color: rgb(var(--tb-surface));
50230
- color: rgb(var(--tb-onSurface, var(--tb-text)));
50231
- border-color: rgb(var(--tb-border));
50232
- }
50540
+ /* Event list empty state - theme-aware */
50541
+ :where(.theme-scope) .event-list-empty {
50542
+ background-color: rgb(var(--tb-surface));
50543
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
50544
+ border-color: rgb(var(--tb-border));
50545
+ }
50233
50546
  } /* end @layer rb-theme */
50234
50547
 
50235
50548
  @keyframes accordion-down {
@@ -60276,7 +60589,7 @@ var SimpleCache = class {
60276
60589
  };
60277
60590
 
60278
60591
  // src/version.ts
60279
- var SDK_VERSION = "0.77.0";
60592
+ var SDK_VERSION = "0.77.1";
60280
60593
 
60281
60594
  // src/client/error.ts
60282
60595
  var RiverbankApiError = class _RiverbankApiError extends Error {