@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
@@ -30832,15 +30832,15 @@ function validateStringConstraint(plan, constraint, value) {
30832
30832
  case "maxLength":
30833
30833
  return value.length > constraint.maximum ? [issue(plan, "tooLong", { maximum: constraint.maximum })] : [];
30834
30834
  case "emailFormat":
30835
- return z.email().safeParse(value).success ? [] : [issue(plan, "invalidEmail")];
30835
+ return isCanonicalEmailValue(value) ? [] : [issue(plan, "invalidEmail")];
30836
30836
  case "phoneFormat":
30837
- return TEL_RE.test(value) ? [] : [issue(plan, "invalidPhone")];
30837
+ return isCanonicalPhoneValue(value) ? [] : [issue(plan, "invalidPhone")];
30838
30838
  case "patternFormat": {
30839
30839
  const re2 = compilePattern(constraint.pattern);
30840
30840
  return re2 && !re2.test(value) ? [issue(plan, "invalidPattern")] : [];
30841
30841
  }
30842
30842
  case "urlFormat":
30843
- return isValidUrl(value, constraint.allowRelative) ? [] : [issue(plan, "invalidUrl")];
30843
+ return isCanonicalUrlValue(value, { allowRelative: constraint.allowRelative }) ? [] : [issue(plan, "invalidUrl")];
30844
30844
  case "dateFormat":
30845
30845
  return isValidDateString(value) ? [] : [issue(plan, "invalidDate")];
30846
30846
  case "timeFormat":
@@ -31119,9 +31119,15 @@ function compilePattern(pattern) {
31119
31119
  function isValidNumber(value) {
31120
31120
  return typeof value === "number" && Number.isFinite(value);
31121
31121
  }
31122
- function isValidUrl(value, allowRelative) {
31122
+ function isCanonicalEmailValue(value) {
31123
+ return z.email().safeParse(value).success;
31124
+ }
31125
+ function isCanonicalPhoneValue(value) {
31126
+ return TEL_RE.test(value);
31127
+ }
31128
+ function isCanonicalUrlValue(value, options = {}) {
31123
31129
  if (!value) return false;
31124
- if (allowRelative && value.startsWith("/")) return true;
31130
+ if (options.allowRelative === true && value.startsWith("/")) return true;
31125
31131
  try {
31126
31132
  const parsed = new URL(value);
31127
31133
  return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
@@ -36209,8 +36215,19 @@ var headingTypographyStyleSchema = typographyStyleSchema.extend({
36209
36215
  colorToken: themeColorTokenSchema.nullable().optional()
36210
36216
  });
36211
36217
  var proseLinkUnderlineStyleSchema = z.enum(["solid", "dotted", "dashed"]);
36212
- var proseLinkUnderlineThicknessSchema = z.enum(["auto", "fromFont", "thin", "medium", "thick"]);
36213
- var proseLinkUnderlineOffsetSchema = z.enum(["auto", "tight", "normal", "loose"]);
36218
+ var proseLinkUnderlineThicknessSchema = z.enum([
36219
+ "auto",
36220
+ "fromFont",
36221
+ "thin",
36222
+ "medium",
36223
+ "thick"
36224
+ ]);
36225
+ var proseLinkUnderlineOffsetSchema = z.enum([
36226
+ "auto",
36227
+ "tight",
36228
+ "normal",
36229
+ "loose"
36230
+ ]);
36214
36231
  var proseLinkStyleSchema = z.object({
36215
36232
  colorToken: themeColorTokenSchema.optional(),
36216
36233
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -36221,7 +36238,14 @@ var proseLinkStyleSchema = z.object({
36221
36238
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
36222
36239
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
36223
36240
  });
36224
- var semanticSpacingSchema = z.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
36241
+ var semanticSpacingSchema = z.enum([
36242
+ "none",
36243
+ "compact",
36244
+ "cozy",
36245
+ "medium",
36246
+ "comfortable",
36247
+ "spacious"
36248
+ ]);
36225
36249
  var boxRoundedSchema = z.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
36226
36250
  var boxBackgroundOverlaySchema = z.object({
36227
36251
  type: z.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -36365,9 +36389,17 @@ var inputStyle = z.object({
36365
36389
  focus: z.enum(["glow", "ring", "underline"]),
36366
36390
  label: z.enum(["inside", "above"])
36367
36391
  });
36368
- var headerVariant = z.enum(["classic", "centered", "transparent", "floating", "editorial"]);
36392
+ var headerVariant = z.enum(["classic", "centered", "transparent", "floating"]);
36369
36393
  var headerPositioning = z.enum(["static", "sticky", "fixed"]);
36370
- var headerNavStyle = z.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
36394
+ var headerNavStyle = z.enum([
36395
+ "minimal",
36396
+ "underline",
36397
+ "underline-grow",
36398
+ "capsule",
36399
+ "scale",
36400
+ "frosted",
36401
+ "solid"
36402
+ ]);
36371
36403
  var navFontWeight = z.enum(["regular", "medium", "semibold", "bold"]);
36372
36404
  var headerMaxWidth = z.enum(["container", "full"]);
36373
36405
  var headerContainerSchema = z.object({
@@ -36415,8 +36447,22 @@ var dropdownStyleSchema = z.object({
36415
36447
  textSize: z.enum(["xs", "sm", "base", "lg"]).optional()
36416
36448
  // optional = no override (browser default)
36417
36449
  }).optional();
36418
- var headerCtaGapSchema = z.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
36419
- var headerCtaTreatmentSchema = z.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
36450
+ var headerCtaGapSchema = z.enum([
36451
+ "none",
36452
+ "tight",
36453
+ "compact",
36454
+ "default",
36455
+ "relaxed",
36456
+ "spacious"
36457
+ ]);
36458
+ var headerCtaTreatmentSchema = z.enum([
36459
+ "default",
36460
+ "primary",
36461
+ "secondary",
36462
+ "inverted",
36463
+ "outline",
36464
+ "ghost"
36465
+ ]);
36420
36466
  var navContainerSchema = z.object({
36421
36467
  type: z.enum(["none", "pill", "glass"]).default("none"),
36422
36468
  tint: z.string().nullable().optional(),
@@ -36471,7 +36517,14 @@ var footerMaxWidth = z.enum(["container", "full"]);
36471
36517
  var footerMode = z.enum(["default", "blocks", "default+blocks", "none"]);
36472
36518
  var footerNavLayoutMode = z.enum(["stack", "inline", "inline-wrap"]);
36473
36519
  var footerNavLayoutAlign = z.enum(["start", "center", "end", "space-between"]);
36474
- var footerSpacing = z.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
36520
+ var footerSpacing = z.enum([
36521
+ "none",
36522
+ "tight",
36523
+ "compact",
36524
+ "default",
36525
+ "relaxed",
36526
+ "spacious"
36527
+ ]);
36475
36528
  var footerLogoPlacement = z.enum(["left", "right", "above", "below"]);
36476
36529
  var footerLogoSize = z.enum(["sm", "md", "lg", "xl"]);
36477
36530
  var footerLogoMaxHeight = z.enum(["sm", "md", "lg", "xl"]);
@@ -36536,7 +36589,12 @@ var footerSchema = z.object({
36536
36589
  logo: footerLogoSchema.optional(),
36537
36590
  bottomBar: footerBottomBarSchema.optional()
36538
36591
  });
36539
- var containerPaddingPresetSchema = z.enum(["tight", "compact", "default", "relaxed"]);
36592
+ var containerPaddingPresetSchema = z.enum([
36593
+ "tight",
36594
+ "compact",
36595
+ "default",
36596
+ "relaxed"
36597
+ ]);
36540
36598
  var layoutSchema = z.object({
36541
36599
  containerPadding: z.object({
36542
36600
  mobile: containerPaddingPresetSchema.optional(),
@@ -36544,8 +36602,24 @@ var layoutSchema = z.object({
36544
36602
  desktop: containerPaddingPresetSchema.optional()
36545
36603
  }).optional()
36546
36604
  }).optional();
36547
- var heroTypographySizeSchema = z.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
36548
- var heroTypographyLineHeightSchema = z.enum(["tight", "snug", "normal", "relaxed"]);
36605
+ var heroTypographySizeSchema = z.enum([
36606
+ "sm",
36607
+ "base",
36608
+ "lg",
36609
+ "xl",
36610
+ "2xl",
36611
+ "3xl",
36612
+ "4xl",
36613
+ "5xl",
36614
+ "6xl",
36615
+ "editorial"
36616
+ ]);
36617
+ var heroTypographyLineHeightSchema = z.enum([
36618
+ "tight",
36619
+ "snug",
36620
+ "normal",
36621
+ "relaxed"
36622
+ ]);
36549
36623
  var heroResponsiveTypographySchema = z.object({
36550
36624
  headlineSize: heroTypographySizeSchema.optional(),
36551
36625
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -37217,16 +37291,6 @@ var headerLayoutCatalog = [
37217
37291
  maxRecommendedNavItems: 5,
37218
37292
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
37219
37293
  },
37220
- {
37221
- id: asHeaderLayoutId("editorial"),
37222
- label: "Editorial",
37223
- description: "A composed, magazine-like stacked header treatment.",
37224
- structure: "editorial-stack",
37225
- variant: "editorial",
37226
- defaultPositioning: "static",
37227
- shrinkOnScroll: false,
37228
- maxRecommendedNavItems: 6
37229
- },
37230
37294
  {
37231
37295
  id: asHeaderLayoutId("floating"),
37232
37296
  label: "Floating",
@@ -37247,17 +37311,19 @@ var headerStyleCatalog = [
37247
37311
  id: asHeaderStyleId("minimal"),
37248
37312
  label: "Minimal",
37249
37313
  description: "Quiet surface with simple color-change navigation.",
37250
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
37314
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
37251
37315
  navInteraction: "color-change",
37252
- surface: "neutral"
37316
+ surface: "neutral",
37317
+ navTypography: "plain"
37253
37318
  },
37254
37319
  {
37255
37320
  id: asHeaderStyleId("fine-line"),
37256
37321
  label: "Fine Line",
37257
37322
  description: "Light surface with a crisp lower rule and underline hover.",
37258
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
37323
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
37259
37324
  navInteraction: "underline-grow",
37260
- surface: "bordered"
37325
+ surface: "bordered",
37326
+ navTypography: "plain"
37261
37327
  },
37262
37328
  {
37263
37329
  id: asHeaderStyleId("soft-bar"),
@@ -37265,7 +37331,8 @@ var headerStyleCatalog = [
37265
37331
  description: "Soft tinted surface with gentle pill hover states.",
37266
37332
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
37267
37333
  navInteraction: "pill-background",
37268
- surface: "soft"
37334
+ surface: "soft",
37335
+ navTypography: "plain"
37269
37336
  },
37270
37337
  {
37271
37338
  id: asHeaderStyleId("pill-nav"),
@@ -37273,23 +37340,26 @@ var headerStyleCatalog = [
37273
37340
  description: "A calm pill navigation rail over a neutral header.",
37274
37341
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
37275
37342
  navInteraction: "pill-background",
37276
- surface: "soft"
37343
+ surface: "soft",
37344
+ navTypography: "plain"
37277
37345
  },
37278
37346
  {
37279
37347
  id: asHeaderStyleId("brand-bar"),
37280
37348
  label: "Brand Bar",
37281
37349
  description: "Solid brand surface with high-contrast navigation.",
37282
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
37350
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
37283
37351
  navInteraction: "color-change",
37284
- surface: "brand-solid"
37352
+ surface: "brand-solid",
37353
+ navTypography: "brand-caps"
37285
37354
  },
37286
37355
  {
37287
37356
  id: asHeaderStyleId("brand-underline"),
37288
37357
  label: "Brand Underline",
37289
37358
  description: "Brand surface with underline-grow navigation.",
37290
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
37359
+ supportedLayoutIds: supportedLayouts(["classic"]),
37291
37360
  navInteraction: "underline-grow",
37292
- surface: "brand-solid"
37361
+ surface: "brand-solid",
37362
+ navTypography: "brand-caps"
37293
37363
  },
37294
37364
  {
37295
37365
  id: asHeaderStyleId("brand-pill"),
@@ -37297,41 +37367,44 @@ var headerStyleCatalog = [
37297
37367
  description: "Solid brand surface with rounded active and hover states.",
37298
37368
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
37299
37369
  navInteraction: "pill-background",
37300
- surface: "brand-solid"
37370
+ surface: "brand-solid",
37371
+ navTypography: "brand-caps"
37301
37372
  },
37302
37373
  {
37303
- id: asHeaderStyleId("editorial-line"),
37304
- label: "Editorial Line",
37374
+ id: asHeaderStyleId("serif-line"),
37375
+ label: "Serif Line",
37305
37376
  description: "Typographic logo treatment with understated underline navigation.",
37306
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
37377
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
37307
37378
  navInteraction: "underline-grow",
37308
- surface: "bordered"
37379
+ surface: "bordered",
37380
+ navTypography: "heading"
37309
37381
  },
37310
37382
  {
37311
37383
  id: asHeaderStyleId("flat-tabs"),
37312
37384
  label: "Flat Tabs",
37313
37385
  description: "Flat block hover and active states with a Swiss utility feel.",
37314
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
37386
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
37315
37387
  navInteraction: "flat-block",
37316
- surface: "bordered"
37388
+ surface: "bordered",
37389
+ navTypography: "quiet-caps"
37317
37390
  },
37318
37391
  {
37319
37392
  id: asHeaderStyleId("glass"),
37320
37393
  label: "Glass",
37321
- description: "Floating translucent chrome with frosted navigation backing.",
37322
- supportedLayoutIds: supportedLayouts(["floating"]),
37394
+ description: "Translucent chrome with frosted navigation backing.",
37395
+ supportedLayoutIds: supportedLayouts(["classic", "floating"]),
37323
37396
  navInteraction: "glass-backed",
37324
37397
  surface: "floating",
37325
- requiresFloatingLayout: true
37398
+ navTypography: "plain"
37326
37399
  },
37327
37400
  {
37328
37401
  id: asHeaderStyleId("minimal-surface"),
37329
- label: "Minimal Surface",
37330
- description: "Floating chrome with a restrained translucent surface.",
37402
+ label: "Clear Split",
37403
+ description: "Floating logo with transparent navigation and no shared shell.",
37331
37404
  supportedLayoutIds: supportedLayouts(["floating"]),
37332
37405
  navInteraction: "color-change",
37333
37406
  surface: "floating",
37334
- requiresFloatingLayout: true
37407
+ navTypography: "plain"
37335
37408
  },
37336
37409
  {
37337
37410
  id: asHeaderStyleId("soft-shell"),
@@ -37340,7 +37413,25 @@ var headerStyleCatalog = [
37340
37413
  supportedLayoutIds: supportedLayouts(["floating"]),
37341
37414
  navInteraction: "pill-background",
37342
37415
  surface: "floating",
37343
- requiresFloatingLayout: true
37416
+ navTypography: "plain"
37417
+ },
37418
+ {
37419
+ id: asHeaderStyleId("split-glass"),
37420
+ label: "Split Glass",
37421
+ description: "Logo floats independently while the navigation sits in a glass rail.",
37422
+ supportedLayoutIds: supportedLayouts(["floating"]),
37423
+ navInteraction: "glass-backed",
37424
+ surface: "floating",
37425
+ navTypography: "quiet-caps"
37426
+ },
37427
+ {
37428
+ id: asHeaderStyleId("split-pill"),
37429
+ label: "Split Pill",
37430
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
37431
+ supportedLayoutIds: supportedLayouts(["floating"]),
37432
+ navInteraction: "pill-background",
37433
+ surface: "floating",
37434
+ navTypography: "heading"
37344
37435
  }
37345
37436
  ];
37346
37437
  var headerLayoutsById = new Map(
@@ -37354,13 +37445,14 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
37354
37445
  asHeaderLayoutId("classic"),
37355
37446
  headerStyleRepairChain([
37356
37447
  "minimal",
37448
+ "glass",
37357
37449
  "fine-line",
37358
37450
  "soft-bar",
37359
37451
  "pill-nav",
37360
37452
  "brand-bar",
37361
37453
  "brand-underline",
37362
37454
  "brand-pill",
37363
- "editorial-line",
37455
+ "serif-line",
37364
37456
  "flat-tabs"
37365
37457
  ])
37366
37458
  ],
@@ -37373,19 +37465,7 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
37373
37465
  "pill-nav",
37374
37466
  "brand-bar",
37375
37467
  "brand-pill",
37376
- "editorial-line",
37377
- "flat-tabs"
37378
- ])
37379
- ],
37380
- [
37381
- asHeaderLayoutId("editorial"),
37382
- headerStyleRepairChain([
37383
- "minimal",
37384
- "fine-line",
37385
- "soft-bar",
37386
- "brand-bar",
37387
- "brand-underline",
37388
- "editorial-line",
37468
+ "serif-line",
37389
37469
  "flat-tabs"
37390
37470
  ])
37391
37471
  ],
@@ -37394,6 +37474,8 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
37394
37474
  headerStyleRepairChain([
37395
37475
  "glass",
37396
37476
  "minimal-surface",
37477
+ "split-glass",
37478
+ "split-pill",
37397
37479
  "soft-shell",
37398
37480
  "brand-pill"
37399
37481
  ])
@@ -37402,20 +37484,63 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
37402
37484
  function headerStyleRepairChain(values) {
37403
37485
  return values.map(asHeaderStyleId);
37404
37486
  }
37405
- var headerStyleRepairOrder = /* @__PURE__ */ new Map([
37406
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
37407
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
37408
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
37409
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
37410
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
37411
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
37412
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
37413
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
37414
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
37415
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
37416
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
37417
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
37418
- ]);
37487
+ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
37488
+ [
37489
+ [
37490
+ asHeaderStyleId("brand-bar"),
37491
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
37492
+ ],
37493
+ [
37494
+ asHeaderStyleId("brand-underline"),
37495
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
37496
+ ],
37497
+ [
37498
+ asHeaderStyleId("brand-pill"),
37499
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
37500
+ ],
37501
+ [
37502
+ asHeaderStyleId("pill-nav"),
37503
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
37504
+ ],
37505
+ [
37506
+ asHeaderStyleId("flat-tabs"),
37507
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
37508
+ ],
37509
+ [
37510
+ asHeaderStyleId("serif-line"),
37511
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
37512
+ ],
37513
+ [
37514
+ asHeaderStyleId("glass"),
37515
+ headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
37516
+ ],
37517
+ [
37518
+ asHeaderStyleId("soft-shell"),
37519
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
37520
+ ],
37521
+ [
37522
+ asHeaderStyleId("minimal-surface"),
37523
+ headerStyleRepairChain(["minimal-surface", "minimal"])
37524
+ ],
37525
+ [
37526
+ asHeaderStyleId("split-glass"),
37527
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
37528
+ ],
37529
+ [
37530
+ asHeaderStyleId("split-pill"),
37531
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
37532
+ ],
37533
+ [
37534
+ asHeaderStyleId("fine-line"),
37535
+ headerStyleRepairChain(["fine-line", "minimal"])
37536
+ ],
37537
+ [
37538
+ asHeaderStyleId("soft-bar"),
37539
+ headerStyleRepairChain(["soft-bar", "minimal"])
37540
+ ],
37541
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
37542
+ ]
37543
+ );
37419
37544
  var legacyHeaderLookAliases = [
37420
37545
  {
37421
37546
  lookId: asHeaderLookId("clean-base"),
@@ -37432,10 +37557,10 @@ var legacyHeaderLookAliases = [
37432
37557
  }
37433
37558
  },
37434
37559
  {
37435
- lookId: asHeaderLookId("editorial-line"),
37560
+ lookId: asHeaderLookId("serif-line"),
37436
37561
  selection: {
37437
- layoutId: asHeaderLayoutId("editorial"),
37438
- styleId: asHeaderStyleId("editorial-line")
37562
+ layoutId: asHeaderLayoutId("centered"),
37563
+ styleId: asHeaderStyleId("serif-line")
37439
37564
  }
37440
37565
  },
37441
37566
  {
@@ -37474,9 +37599,7 @@ var legacyHeaderLookAliases = [
37474
37599
  }
37475
37600
  }
37476
37601
  ];
37477
- var legacyHeaderLookAliasesById = new Map(
37478
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
37479
- );
37602
+ var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
37480
37603
  function getHeaderLayout(id) {
37481
37604
  return headerLayoutsById.get(id) ?? null;
37482
37605
  }
@@ -37509,10 +37632,39 @@ function findLegacyHeaderLookIdForSelection(selection) {
37509
37632
  )?.lookId ?? null;
37510
37633
  }
37511
37634
  function getCompatibleHeaderStyleIds(layoutId) {
37512
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
37513
- const style2 = getHeaderStyleOrThrow(styleId);
37514
- return isHeaderStyleCompatibleWithLayout(style2, layoutId);
37515
- });
37635
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
37636
+ (styleId) => {
37637
+ const style2 = getHeaderStyleOrThrow(styleId);
37638
+ return isHeaderStyleCompatibleWithLayout(style2, layoutId);
37639
+ }
37640
+ );
37641
+ }
37642
+ function getOrderedHeaderLayoutIdsForCuration(curation) {
37643
+ return orderUnique(
37644
+ curation.recommendedHeaderLayoutChoices.map((choice) => choice.id),
37645
+ headerLayoutCatalog.map((layout) => layout.id)
37646
+ );
37647
+ }
37648
+ function getOrderedHeaderStyleIdsForLayout(curation, layoutId) {
37649
+ const compatibleHeaderStyleIds = getCompatibleHeaderStyleIds(layoutId);
37650
+ const compatibleStyleIds = new Set(compatibleHeaderStyleIds);
37651
+ const curated = (curation.recommendedHeaderStyleChoicesByLayout[unbrandHeaderLayoutId(layoutId)] ?? []).map((choice) => choice.id).filter((styleId) => compatibleStyleIds.has(styleId));
37652
+ return orderUnique(curated, compatibleHeaderStyleIds);
37653
+ }
37654
+ function unbrandHeaderLayoutId(id) {
37655
+ return id;
37656
+ }
37657
+ function orderUnique(...groups) {
37658
+ const seen = /* @__PURE__ */ new Set();
37659
+ const ordered = [];
37660
+ for (const group of groups) {
37661
+ for (const id of group) {
37662
+ if (seen.has(id)) continue;
37663
+ seen.add(id);
37664
+ ordered.push(id);
37665
+ }
37666
+ }
37667
+ return ordered;
37516
37668
  }
37517
37669
  function deriveNearestCompatibleHeaderStyle(styleId, layoutId) {
37518
37670
  const requestedStyle = getHeaderStyleOrThrow(styleId);
@@ -37542,7 +37694,10 @@ function resolveHeaderLayoutStyleSelection(selection) {
37542
37694
  style: style2
37543
37695
  };
37544
37696
  }
37545
- const resolvedStyleId = deriveNearestCompatibleHeaderStyle(style2.id, layout.id);
37697
+ const resolvedStyleId = deriveNearestCompatibleHeaderStyle(
37698
+ style2.id,
37699
+ layout.id
37700
+ );
37546
37701
  const resolvedStyle = getHeaderStyleOrThrow(resolvedStyleId);
37547
37702
  const resolvedSelection = {
37548
37703
  layoutId: layout.id,
@@ -37606,105 +37761,155 @@ function brandDropdownStyle() {
37606
37761
  textSize: "sm"
37607
37762
  };
37608
37763
  }
37609
- function minimalNavLinkStyle(colorToken, hoverColorToken = "primary") {
37610
- return {
37611
- name: "Minimal",
37612
- typography: "body",
37613
- fontWeight: "medium",
37614
- textTransform: "none",
37615
- italic: false,
37616
- colorToken,
37617
- hoverColorToken,
37618
- padding: "none",
37619
- borderRadius: "none",
37620
- effects: {
37621
- hover: [
37622
- { effectId: "text-color-change", options: { hoverColorToken } }
37623
- ]
37624
- }
37625
- };
37764
+ function applyNavTypography(style2, typography) {
37765
+ switch (typography) {
37766
+ case "plain":
37767
+ return style2;
37768
+ case "heading":
37769
+ return {
37770
+ ...style2,
37771
+ typography: "heading",
37772
+ fontWeight: "medium",
37773
+ letterSpacing: "wide"
37774
+ };
37775
+ case "quiet-caps":
37776
+ return {
37777
+ ...style2,
37778
+ textTransform: "uppercase",
37779
+ textSize: "sm",
37780
+ letterSpacing: "wide"
37781
+ };
37782
+ case "brand-caps":
37783
+ return {
37784
+ ...style2,
37785
+ textTransform: "uppercase",
37786
+ textSize: "sm",
37787
+ letterSpacing: "wider"
37788
+ };
37789
+ default:
37790
+ return assertNever5(typography, "Unhandled header nav typography");
37791
+ }
37626
37792
  }
37627
- function underlineNavLinkStyle(colorToken, underlineColorToken) {
37793
+ function minimalNavLinkStyle(colorToken, hoverColorToken = "primary", typography = "plain") {
37628
37794
  return {
37629
- name: "Underline grow",
37630
- typography: "body",
37631
- fontWeight: "medium",
37632
- textTransform: "none",
37633
- italic: false,
37634
- colorToken,
37635
- padding: "none",
37636
- borderRadius: "none",
37637
- effects: {
37638
- hover: [
37639
- {
37640
- effectId: "nav-underline",
37641
- options: {
37642
- style: "grow",
37643
- ...underlineColorToken ? { colorToken: underlineColorToken } : {}
37644
- }
37795
+ ...applyNavTypography(
37796
+ {
37797
+ name: "Minimal",
37798
+ typography: "body",
37799
+ fontWeight: "medium",
37800
+ textTransform: "none",
37801
+ italic: false,
37802
+ colorToken,
37803
+ hoverColorToken,
37804
+ padding: "compact",
37805
+ paddingX: "compact",
37806
+ borderRadius: "none",
37807
+ effects: {
37808
+ hover: [
37809
+ { effectId: "text-color-change", options: { hoverColorToken } }
37810
+ ]
37645
37811
  }
37646
- ]
37647
- }
37812
+ },
37813
+ typography
37814
+ )
37648
37815
  };
37649
37816
  }
37650
- function pillNavLinkStyle(colorToken, backgroundToken = "primary", opacity = 10) {
37651
- return {
37652
- name: "Pill",
37653
- typography: "body",
37654
- fontWeight: "medium",
37655
- textTransform: "none",
37656
- italic: false,
37657
- colorToken,
37658
- padding: "compact",
37659
- borderRadius: "full",
37660
- effects: {
37661
- hover: [
37662
- {
37663
- effectId: "background-on-hover-alpha",
37664
- options: { colorToken: backgroundToken, opacity }
37665
- }
37666
- ],
37667
- active: [
37668
- {
37669
- effectId: "background-on-hover-alpha",
37670
- options: { colorToken: backgroundToken, opacity: opacity + 5 }
37671
- }
37672
- ]
37673
- }
37674
- };
37817
+ function underlineNavLinkStyle(colorToken, underlineColorToken, typography = "plain") {
37818
+ return applyNavTypography(
37819
+ {
37820
+ name: "Underline grow",
37821
+ typography: "body",
37822
+ fontWeight: "medium",
37823
+ textTransform: "none",
37824
+ italic: false,
37825
+ colorToken,
37826
+ padding: "compact",
37827
+ paddingX: "compact",
37828
+ borderRadius: "none",
37829
+ effects: {
37830
+ hover: [
37831
+ {
37832
+ effectId: "nav-underline",
37833
+ options: {
37834
+ style: "grow",
37835
+ ...underlineColorToken ? { colorToken: underlineColorToken } : {}
37836
+ }
37837
+ }
37838
+ ]
37839
+ }
37840
+ },
37841
+ typography
37842
+ );
37675
37843
  }
37676
- function flatTabNavLinkStyle(colorToken) {
37677
- return {
37678
- name: "Flat tabs",
37679
- typography: "body",
37680
- fontWeight: "semibold",
37681
- textTransform: "none",
37682
- italic: false,
37683
- colorToken,
37684
- padding: "compact",
37685
- paddingX: "default",
37686
- borderRadius: "none",
37687
- effects: {
37688
- hover: [
37689
- {
37690
- effectId: "background-on-hover-alpha",
37691
- options: { colorToken: "primary", opacity: 10 }
37692
- }
37693
- ],
37694
- active: [
37695
- {
37696
- effectId: "background-on-hover-alpha",
37697
- options: { colorToken: "primary", opacity: 16 }
37698
- }
37699
- ]
37700
- }
37701
- };
37844
+ function pillNavLinkStyle(colorToken, backgroundToken = "primary", opacity = 10, typography = "plain") {
37845
+ return applyNavTypography(
37846
+ {
37847
+ name: "Pill",
37848
+ typography: "body",
37849
+ fontWeight: "medium",
37850
+ textTransform: "none",
37851
+ italic: false,
37852
+ colorToken,
37853
+ padding: "compact",
37854
+ borderRadius: "full",
37855
+ effects: {
37856
+ hover: [
37857
+ {
37858
+ effectId: "background-on-hover-alpha",
37859
+ options: { colorToken: backgroundToken, opacity }
37860
+ }
37861
+ ],
37862
+ active: [
37863
+ {
37864
+ effectId: "background-on-hover-alpha",
37865
+ options: { colorToken: backgroundToken, opacity: opacity + 5 }
37866
+ }
37867
+ ]
37868
+ }
37869
+ },
37870
+ typography
37871
+ );
37872
+ }
37873
+ function flatTabNavLinkStyle(colorToken, typography = "plain") {
37874
+ return applyNavTypography(
37875
+ {
37876
+ name: "Flat tabs",
37877
+ typography: "body",
37878
+ fontWeight: "semibold",
37879
+ textTransform: "none",
37880
+ italic: false,
37881
+ colorToken,
37882
+ padding: "compact",
37883
+ paddingX: "default",
37884
+ borderRadius: "none",
37885
+ effects: {
37886
+ hover: [
37887
+ {
37888
+ effectId: "background-on-hover-alpha",
37889
+ options: { colorToken: "primary", opacity: 10 }
37890
+ }
37891
+ ],
37892
+ active: [
37893
+ {
37894
+ effectId: "background-on-hover-alpha",
37895
+ options: { colorToken: "primary", opacity: 16 }
37896
+ }
37897
+ ]
37898
+ }
37899
+ },
37900
+ typography
37901
+ );
37702
37902
  }
37703
37903
  function noHeaderBorder() {
37704
37904
  return { style: "solid", width: "none", position: "none" };
37705
37905
  }
37706
37906
  function bottomHeaderBorder() {
37707
- return { style: "solid", width: "thin", position: "bottom", colorToken: "border" };
37907
+ return {
37908
+ style: "solid",
37909
+ width: "thin",
37910
+ position: "bottom",
37911
+ colorToken: "border"
37912
+ };
37708
37913
  }
37709
37914
  function colorHeaderBackground(color) {
37710
37915
  return { type: "color", color };
@@ -37758,7 +37963,11 @@ function applyHeaderStyle(theme, header, style2) {
37758
37963
  background: colorHeaderBackground("surface"),
37759
37964
  navStyle: "minimal",
37760
37965
  navWeight: "medium",
37761
- navLinkStyle: minimalNavLinkStyle("text"),
37966
+ navLinkStyle: minimalNavLinkStyle(
37967
+ "text",
37968
+ "primary",
37969
+ style2.navTypography
37970
+ ),
37762
37971
  border: noHeaderBorder(),
37763
37972
  ctaTreatment: "default"
37764
37973
  };
@@ -37769,7 +37978,11 @@ function applyHeaderStyle(theme, header, style2) {
37769
37978
  background: colorHeaderBackground("surface"),
37770
37979
  navStyle: "underline-grow",
37771
37980
  navWeight: "medium",
37772
- navLinkStyle: underlineNavLinkStyle("text"),
37981
+ navLinkStyle: underlineNavLinkStyle(
37982
+ "text",
37983
+ void 0,
37984
+ style2.navTypography
37985
+ ),
37773
37986
  border: bottomHeaderBorder(),
37774
37987
  ctaTreatment: "outline",
37775
37988
  ctaVariant: ctaVariant("outline")
@@ -37781,7 +37994,12 @@ function applyHeaderStyle(theme, header, style2) {
37781
37994
  background: colorHeaderBackground("surfaceAlt"),
37782
37995
  navStyle: "capsule",
37783
37996
  navWeight: "medium",
37784
- navLinkStyle: pillNavLinkStyle("text", "primary", 8),
37997
+ navLinkStyle: pillNavLinkStyle(
37998
+ "text",
37999
+ "primary",
38000
+ 8,
38001
+ style2.navTypography
38002
+ ),
37785
38003
  border: bottomHeaderBorder(),
37786
38004
  ctaTreatment: "default"
37787
38005
  };
@@ -37792,7 +38010,12 @@ function applyHeaderStyle(theme, header, style2) {
37792
38010
  background: colorHeaderBackground("surface"),
37793
38011
  navStyle: "capsule",
37794
38012
  navWeight: "medium",
37795
- navLinkStyle: pillNavLinkStyle("text"),
38013
+ navLinkStyle: pillNavLinkStyle(
38014
+ "text",
38015
+ "primary",
38016
+ 10,
38017
+ style2.navTypography
38018
+ ),
37796
38019
  navContainer: {
37797
38020
  type: "pill",
37798
38021
  tint: "surfaceAlt",
@@ -37806,14 +38029,22 @@ function applyHeaderStyle(theme, header, style2) {
37806
38029
  ...brandSurfaceBase(theme, header),
37807
38030
  navStyle: "minimal",
37808
38031
  navWeight: "semibold",
37809
- navLinkStyle: minimalNavLinkStyle("primaryForeground", "secondary")
38032
+ navLinkStyle: minimalNavLinkStyle(
38033
+ "primaryForeground",
38034
+ "secondary",
38035
+ style2.navTypography
38036
+ )
37810
38037
  };
37811
38038
  case "brand-underline":
37812
38039
  return {
37813
38040
  ...brandSurfaceBase(theme, header),
37814
38041
  navStyle: "underline-grow",
37815
38042
  navWeight: "bold",
37816
- navLinkStyle: underlineNavLinkStyle("primaryForeground", "secondary")
38043
+ navLinkStyle: underlineNavLinkStyle(
38044
+ "primaryForeground",
38045
+ "secondary",
38046
+ style2.navTypography
38047
+ )
37817
38048
  };
37818
38049
  case "brand-pill":
37819
38050
  return {
@@ -37829,16 +38060,25 @@ function applyHeaderStyle(theme, header, style2) {
37829
38060
  } : {},
37830
38061
  navStyle: "capsule",
37831
38062
  navWeight: "semibold",
37832
- navLinkStyle: pillNavLinkStyle("primaryForeground", "primaryForeground", 14)
38063
+ navLinkStyle: pillNavLinkStyle(
38064
+ "primaryForeground",
38065
+ "primaryForeground",
38066
+ 14,
38067
+ style2.navTypography
38068
+ )
37833
38069
  };
37834
- case "editorial-line":
38070
+ case "serif-line":
37835
38071
  return {
37836
38072
  ...header,
37837
38073
  ...neutralHeaderBase(),
37838
38074
  background: colorHeaderBackground("background"),
37839
38075
  navStyle: "underline-grow",
37840
38076
  navWeight: "medium",
37841
- navLinkStyle: underlineNavLinkStyle("text"),
38077
+ navLinkStyle: underlineNavLinkStyle(
38078
+ "text",
38079
+ void 0,
38080
+ style2.navTypography
38081
+ ),
37842
38082
  border: bottomHeaderBorder(),
37843
38083
  logo: {
37844
38084
  fontFamily: "heading",
@@ -37856,7 +38096,7 @@ function applyHeaderStyle(theme, header, style2) {
37856
38096
  background: colorHeaderBackground("surface"),
37857
38097
  navStyle: "solid",
37858
38098
  navWeight: "semibold",
37859
- navLinkStyle: flatTabNavLinkStyle("text"),
38099
+ navLinkStyle: flatTabNavLinkStyle("text", style2.navTypography),
37860
38100
  border: bottomHeaderBorder(),
37861
38101
  shadow: { elevation: "sm" },
37862
38102
  ctaTreatment: "primary",
@@ -37864,26 +38104,39 @@ function applyHeaderStyle(theme, header, style2) {
37864
38104
  ctaGap: "compact"
37865
38105
  };
37866
38106
  case "glass":
37867
- return {
38107
+ return header.variant === "floating" ? {
37868
38108
  ...floatingSurfaceBase(header),
37869
- textColor: "background",
37870
- navColor: "background",
38109
+ ...neutralHeaderBase(),
37871
38110
  navStyle: "frosted",
37872
38111
  navWeight: "semibold",
37873
- navLinkStyle: pillNavLinkStyle("background", "neutral-50", 10),
37874
- navContainer: {
37875
- type: "glass",
37876
- tint: "text",
37877
- opacity: 0.16
37878
- },
38112
+ navLinkStyle: pillNavLinkStyle(
38113
+ "text",
38114
+ "primary",
38115
+ 8,
38116
+ style2.navTypography
38117
+ ),
37879
38118
  container: floatingContainer({
37880
38119
  rounded: "2xl",
37881
38120
  padding: "sm",
37882
- tint: "background",
37883
- opacity: 0.12
38121
+ tint: "surface",
38122
+ opacity: 0.88
37884
38123
  }),
37885
- ctaTreatment: "inverted",
37886
- ctaVariant: ctaVariant("inverted")
38124
+ ctaTreatment: "default"
38125
+ } : {
38126
+ ...header,
38127
+ ...neutralHeaderBase(),
38128
+ background: colorHeaderBackground("surface"),
38129
+ navStyle: "frosted",
38130
+ navWeight: "semibold",
38131
+ navLinkStyle: pillNavLinkStyle(
38132
+ "text",
38133
+ "primary",
38134
+ 8,
38135
+ style2.navTypography
38136
+ ),
38137
+ border: bottomHeaderBorder(),
38138
+ shadow: { elevation: "sm" },
38139
+ ctaTreatment: "default"
37887
38140
  };
37888
38141
  case "minimal-surface":
37889
38142
  return {
@@ -37891,13 +38144,11 @@ function applyHeaderStyle(theme, header, style2) {
37891
38144
  ...neutralHeaderBase(),
37892
38145
  navStyle: "minimal",
37893
38146
  navWeight: "medium",
37894
- navLinkStyle: minimalNavLinkStyle("text"),
37895
- container: floatingContainer({
37896
- rounded: "xl",
37897
- padding: "sm",
37898
- tint: "surface",
37899
- opacity: 0.92
37900
- }),
38147
+ navLinkStyle: minimalNavLinkStyle(
38148
+ "text",
38149
+ "primary",
38150
+ style2.navTypography
38151
+ ),
37901
38152
  ctaTreatment: "default"
37902
38153
  };
37903
38154
  case "soft-shell":
@@ -37906,7 +38157,12 @@ function applyHeaderStyle(theme, header, style2) {
37906
38157
  ...neutralHeaderBase(),
37907
38158
  navStyle: "capsule",
37908
38159
  navWeight: "medium",
37909
- navLinkStyle: pillNavLinkStyle("text", "primary", 8),
38160
+ navLinkStyle: pillNavLinkStyle(
38161
+ "text",
38162
+ "primary",
38163
+ 8,
38164
+ style2.navTypography
38165
+ ),
37910
38166
  container: floatingContainer({
37911
38167
  rounded: "2xl",
37912
38168
  padding: "md",
@@ -37915,6 +38171,44 @@ function applyHeaderStyle(theme, header, style2) {
37915
38171
  }),
37916
38172
  ctaTreatment: "default"
37917
38173
  };
38174
+ case "split-glass":
38175
+ return {
38176
+ ...floatingSurfaceBase(header),
38177
+ ...neutralHeaderBase(),
38178
+ navStyle: "frosted",
38179
+ navWeight: "semibold",
38180
+ navLinkStyle: pillNavLinkStyle(
38181
+ "text",
38182
+ "primary",
38183
+ 8,
38184
+ style2.navTypography
38185
+ ),
38186
+ navContainer: {
38187
+ type: "glass",
38188
+ tint: "surface",
38189
+ opacity: 0.88
38190
+ },
38191
+ ctaTreatment: "default"
38192
+ };
38193
+ case "split-pill":
38194
+ return {
38195
+ ...floatingSurfaceBase(header),
38196
+ ...neutralHeaderBase(),
38197
+ navStyle: "capsule",
38198
+ navWeight: "medium",
38199
+ navLinkStyle: pillNavLinkStyle(
38200
+ "text",
38201
+ "primary",
38202
+ 10,
38203
+ style2.navTypography
38204
+ ),
38205
+ navContainer: {
38206
+ type: "pill",
38207
+ tint: "surface",
38208
+ opacity: 0.94
38209
+ },
38210
+ ctaTreatment: "default"
38211
+ };
37918
38212
  default:
37919
38213
  return assertNever5(style2.id, "Unhandled header style id");
37920
38214
  }
@@ -37956,8 +38250,14 @@ function solidBrandHeader(theme) {
37956
38250
  borderRadius: "none",
37957
38251
  effects: {
37958
38252
  hover: [
37959
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
37960
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
38253
+ {
38254
+ effectId: "text-color-change",
38255
+ options: { hoverColorToken: "secondary" }
38256
+ },
38257
+ {
38258
+ effectId: "nav-underline",
38259
+ options: { style: "grow", colorToken: "secondary" }
38260
+ }
37961
38261
  ]
37962
38262
  }
37963
38263
  },
@@ -38013,10 +38313,10 @@ function cleanBaseHeader(theme) {
38013
38313
  ctaGap: "default"
38014
38314
  };
38015
38315
  }
38016
- function editorialLineHeader(theme) {
38316
+ function serifLineHeader(theme) {
38017
38317
  return {
38018
38318
  ...baseHeader(theme),
38019
- variant: "editorial",
38319
+ variant: "centered",
38020
38320
  positioning: "sticky",
38021
38321
  shrinkOnScroll: false,
38022
38322
  background: {
@@ -38185,27 +38485,27 @@ var headerLookCatalog = [
38185
38485
  compile: solidBrandHeader
38186
38486
  },
38187
38487
  {
38188
- id: asHeaderLookId("editorial-line"),
38189
- label: "Editorial line",
38190
- visualTreatment: "light-editorial",
38488
+ id: asHeaderLookId("serif-line"),
38489
+ label: "Serif line",
38490
+ visualTreatment: "light-serif",
38191
38491
  layoutBehavior: "sticky",
38192
38492
  configuration: {
38193
- structure: "editorial-stack",
38194
- treatment: "light-editorial",
38493
+ structure: "centered-stack",
38494
+ treatment: "light-serif",
38195
38495
  behavior: "sticky"
38196
38496
  },
38197
38497
  openingRequirement: "none",
38198
38498
  maxRecommendedNavItems: 6,
38199
- compile: editorialLineHeader
38499
+ compile: serifLineHeader
38200
38500
  },
38201
38501
  {
38202
38502
  id: asHeaderLookId("centered-calm"),
38203
38503
  label: "Centered calm",
38204
- visualTreatment: "light-editorial",
38504
+ visualTreatment: "light-serif",
38205
38505
  layoutBehavior: "normal-flow",
38206
38506
  configuration: {
38207
38507
  structure: "centered-stack",
38208
- treatment: "light-editorial",
38508
+ treatment: "light-serif",
38209
38509
  behavior: "normal-flow"
38210
38510
  },
38211
38511
  openingRequirement: "none",
@@ -38969,12 +39269,16 @@ var expressiveUnderlineInputs = {
38969
39269
  }
38970
39270
  };
38971
39271
  function uniqueContentFrameKinds() {
38972
- const kinds = [...new Set(
38973
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
38974
- )];
39272
+ const kinds = [
39273
+ ...new Set(
39274
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
39275
+ )
39276
+ ];
38975
39277
  const firstKind = kinds[0];
38976
39278
  if (!firstKind) {
38977
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
39279
+ throw new Error(
39280
+ "Expected generated design option catalog to expose at least one content frame kind."
39281
+ );
38978
39282
  }
38979
39283
  return [firstKind, ...kinds.slice(1)];
38980
39284
  }
@@ -38984,7 +39288,9 @@ function defineCuratedSiteStyle(input) {
38984
39288
  const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
38985
39289
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
38986
39290
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
38987
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
39291
+ if (!typographyPresetChoices.some(
39292
+ (choice) => choice.id === defaultTypographyPresetId
39293
+ )) {
38988
39294
  throw new Error(
38989
39295
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
38990
39296
  );
@@ -38995,9 +39301,13 @@ function defineCuratedSiteStyle(input) {
38995
39301
  description: input.description,
38996
39302
  generationBrief: input.generationBrief,
38997
39303
  selectionKeywordRules: input.selectionKeywordRules ?? [],
38998
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
39304
+ siteCreatorSelection: input.siteCreatorSelection ?? {
39305
+ kind: "explicit_only"
39306
+ },
38999
39307
  template: {
39000
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
39308
+ id: asDesignSystemTemplateId(
39309
+ `template:${input.id.replace("site-style:", "")}`
39310
+ ),
39001
39311
  name: input.name,
39002
39312
  version: 1,
39003
39313
  tokenRecipes: input.tokenRecipes,
@@ -39015,13 +39325,17 @@ function defineCuratedSiteStyle(input) {
39015
39325
  } : inferredHeaderCuration.defaultHeaderSelection,
39016
39326
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
39017
39327
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
39018
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
39019
- layoutId: asHeaderLayoutId(selection.layoutId),
39020
- styleId: asHeaderStyleId(selection.styleId)
39021
- })),
39328
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
39329
+ (selection) => ({
39330
+ layoutId: asHeaderLayoutId(selection.layoutId),
39331
+ styleId: asHeaderStyleId(selection.styleId)
39332
+ })
39333
+ ),
39022
39334
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
39023
39335
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
39024
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
39336
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
39337
+ asFooterLookId
39338
+ ),
39025
39339
  buttonPersonalityChoices: input.buttonPersonalityChoices,
39026
39340
  paletteVariantChoices: input.paletteVariantChoices,
39027
39341
  typographyPresetChoices,
@@ -39040,7 +39354,7 @@ function headerLayoutChoice(id, note) {
39040
39354
  function headerStyleChoice(id, note) {
39041
39355
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
39042
39356
  }
39043
- function headerLayoutRecordKey(id) {
39357
+ function unbrandHeaderLayoutId2(id) {
39044
39358
  return id;
39045
39359
  }
39046
39360
  function uniqueHeaderLayoutChoices(choices) {
@@ -39063,7 +39377,9 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
39063
39377
  return [first2, ...choices.slice(1)];
39064
39378
  }
39065
39379
  function inferHeaderCurationFromLegacyLooks(lookIds) {
39066
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
39380
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
39381
+ (selection) => Boolean(selection)
39382
+ );
39067
39383
  const defaultHeaderSelection = selections[0] ?? {
39068
39384
  layoutId: asHeaderLayoutId("classic"),
39069
39385
  styleId: asHeaderStyleId("minimal")
@@ -39074,10 +39390,7 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
39074
39390
  const stylesByLayout = {};
39075
39391
  for (const layoutChoice of layoutChoices) {
39076
39392
  const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
39077
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
39078
- styleChoices,
39079
- layoutChoice.id
39080
- );
39393
+ stylesByLayout[unbrandHeaderLayoutId2(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
39081
39394
  }
39082
39395
  return {
39083
39396
  defaultHeaderSelection,
@@ -39132,7 +39445,11 @@ var curatedSiteStyles = [
39132
39445
  motion: "subtle"
39133
39446
  },
39134
39447
  compositionBudget: quietBudget,
39135
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
39448
+ recommendedHeaderLookIds: [
39449
+ "centered-calm",
39450
+ "minimal-transparent",
39451
+ "clean-base"
39452
+ ],
39136
39453
  buttonPersonalityChoices: [
39137
39454
  buttonChoice("soft-pill"),
39138
39455
  buttonChoice("pebble"),
@@ -39161,7 +39478,11 @@ var curatedSiteStyles = [
39161
39478
  motion: "subtle"
39162
39479
  },
39163
39480
  compositionBudget: balancedBudget,
39164
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
39481
+ recommendedHeaderLookIds: [
39482
+ "practical-utility",
39483
+ "brand-solid",
39484
+ "clean-base"
39485
+ ],
39165
39486
  buttonPersonalityChoices: [
39166
39487
  buttonChoice("confident-chip"),
39167
39488
  buttonChoice("soft-pill"),
@@ -39188,7 +39509,11 @@ var curatedSiteStyles = [
39188
39509
  motion: "subtle"
39189
39510
  },
39190
39511
  compositionBudget: balancedBudget,
39191
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
39512
+ recommendedHeaderLookIds: [
39513
+ "serif-line",
39514
+ "minimal-transparent",
39515
+ "centered-calm"
39516
+ ],
39192
39517
  buttonPersonalityChoices: [
39193
39518
  buttonChoice("editorial-link"),
39194
39519
  buttonChoice("soft-pill"),
@@ -39216,7 +39541,11 @@ var curatedSiteStyles = [
39216
39541
  motion: "expressive"
39217
39542
  },
39218
39543
  compositionBudget: balancedBudget,
39219
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
39544
+ recommendedHeaderLookIds: [
39545
+ "brand-solid",
39546
+ "practical-utility",
39547
+ "clean-base"
39548
+ ],
39220
39549
  buttonPersonalityChoices: [
39221
39550
  buttonChoice("pebble"),
39222
39551
  buttonChoice("brushed-wash"),
@@ -39233,7 +39562,10 @@ var curatedSiteStyles = [
39233
39562
  name: "Quiet Luxury",
39234
39563
  description: "Minimal, confident, and refined for premium experiences and private services.",
39235
39564
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
39236
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
39565
+ siteCreatorSelection: {
39566
+ kind: "site_creator_keyword_heuristic",
39567
+ priority: 20
39568
+ },
39237
39569
  selectionKeywordRules: [
39238
39570
  { kind: "word", value: "luxury" },
39239
39571
  { kind: "word", value: "premium" },
@@ -39251,7 +39583,11 @@ var curatedSiteStyles = [
39251
39583
  motion: "none"
39252
39584
  },
39253
39585
  compositionBudget: quietBudget,
39254
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
39586
+ recommendedHeaderLookIds: [
39587
+ "minimal-transparent",
39588
+ "serif-line",
39589
+ "clean-base"
39590
+ ],
39255
39591
  buttonPersonalityChoices: [
39256
39592
  buttonChoice("editorial-link"),
39257
39593
  buttonChoice("confident-chip"),
@@ -39287,7 +39623,11 @@ var curatedSiteStyles = [
39287
39623
  motion: "none"
39288
39624
  },
39289
39625
  compositionBudget: quietBudget,
39290
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
39626
+ recommendedHeaderLookIds: [
39627
+ "practical-utility",
39628
+ "brand-solid",
39629
+ "clean-base"
39630
+ ],
39291
39631
  buttonPersonalityChoices: [
39292
39632
  buttonChoice("confident-chip"),
39293
39633
  buttonChoice("pebble"),
@@ -39314,7 +39654,11 @@ var curatedSiteStyles = [
39314
39654
  motion: "subtle"
39315
39655
  },
39316
39656
  compositionBudget: balancedBudget,
39317
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
39657
+ recommendedHeaderLookIds: [
39658
+ "centered-calm",
39659
+ "minimal-transparent",
39660
+ "clean-base"
39661
+ ],
39318
39662
  buttonPersonalityChoices: [
39319
39663
  buttonChoice("soft-pill"),
39320
39664
  buttonChoice("pebble"),
@@ -39331,7 +39675,10 @@ var curatedSiteStyles = [
39331
39675
  name: "Quiet Practice",
39332
39676
  description: "Grounded, calm, and practical for small appointment-first practices.",
39333
39677
  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.",
39334
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
39678
+ siteCreatorSelection: {
39679
+ kind: "site_creator_keyword_heuristic",
39680
+ priority: 30
39681
+ },
39335
39682
  selectionKeywordRules: [
39336
39683
  { kind: "substring", value: "massage" },
39337
39684
  { kind: "word", value: "bodywork" },
@@ -39352,7 +39699,11 @@ var curatedSiteStyles = [
39352
39699
  motion: "subtle"
39353
39700
  },
39354
39701
  compositionBudget: quietBudget,
39355
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
39702
+ recommendedHeaderLookIds: [
39703
+ "practical-utility",
39704
+ "clean-base",
39705
+ "centered-calm"
39706
+ ],
39356
39707
  buttonPersonalityChoices: [
39357
39708
  buttonChoice("pebble"),
39358
39709
  buttonChoice("soft-pill"),
@@ -39369,7 +39720,10 @@ var curatedSiteStyles = [
39369
39720
  name: "Personal Retreat Journal",
39370
39721
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
39371
39722
  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.",
39372
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
39723
+ siteCreatorSelection: {
39724
+ kind: "site_creator_keyword_heuristic",
39725
+ priority: 40
39726
+ },
39373
39727
  selectionKeywordRules: [
39374
39728
  { kind: "substring", value: "retreat" },
39375
39729
  { kind: "phrase", value: "solo practitioner" },
@@ -39389,7 +39743,11 @@ var curatedSiteStyles = [
39389
39743
  motion: "subtle"
39390
39744
  },
39391
39745
  compositionBudget: balancedBudget,
39392
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
39746
+ recommendedHeaderLookIds: [
39747
+ "serif-line",
39748
+ "centered-calm",
39749
+ "minimal-transparent"
39750
+ ],
39393
39751
  buttonPersonalityChoices: [
39394
39752
  buttonChoice("editorial-link"),
39395
39753
  buttonChoice("soft-pill"),
@@ -39406,7 +39764,10 @@ var curatedSiteStyles = [
39406
39764
  name: "Tactile Workshop",
39407
39765
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
39408
39766
  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.",
39409
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
39767
+ siteCreatorSelection: {
39768
+ kind: "site_creator_keyword_heuristic",
39769
+ priority: 50
39770
+ },
39410
39771
  selectionKeywordRules: [
39411
39772
  { kind: "substring", value: "ceramic" },
39412
39773
  { kind: "word", value: "pottery" },
@@ -39426,8 +39787,15 @@ var curatedSiteStyles = [
39426
39787
  motion: "subtle"
39427
39788
  },
39428
39789
  compositionBudget: balancedBudget,
39429
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
39430
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
39790
+ recommendedHeaderLookIds: [
39791
+ "brand-solid",
39792
+ "practical-utility",
39793
+ "clean-base"
39794
+ ],
39795
+ recommendedFooterLookIds: [
39796
+ "site-footer-brand-two-band",
39797
+ "footer-muted-grounding"
39798
+ ],
39431
39799
  buttonPersonalityChoices: [
39432
39800
  buttonChoice("pebble"),
39433
39801
  buttonChoice("confident-chip"),
@@ -39446,7 +39814,10 @@ var curatedSiteStyles = [
39446
39814
  name: "Soft Earth",
39447
39815
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
39448
39816
  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.",
39449
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
39817
+ siteCreatorSelection: {
39818
+ kind: "site_creator_keyword_heuristic",
39819
+ priority: 45
39820
+ },
39450
39821
  selectionKeywordRules: [
39451
39822
  { kind: "word", value: "meditation" },
39452
39823
  { kind: "word", value: "wellbeing" },
@@ -39522,8 +39893,15 @@ var curatedSiteStyles = [
39522
39893
  "faq-soft-earth-two-column",
39523
39894
  "contact-form-panel"
39524
39895
  ],
39525
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
39526
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
39896
+ recommendedHeaderLookIds: [
39897
+ "centered-calm",
39898
+ "minimal-transparent",
39899
+ "serif-line"
39900
+ ],
39901
+ recommendedFooterLookIds: [
39902
+ "footer-muted-grounding",
39903
+ "site-footer-brand-two-band"
39904
+ ],
39527
39905
  buttonPersonalityChoices: [
39528
39906
  buttonChoice("earth-pill"),
39529
39907
  buttonChoice("soft-pill"),
@@ -39542,7 +39920,10 @@ var curatedSiteStyles = [
39542
39920
  name: "Bold Launch",
39543
39921
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
39544
39922
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
39545
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
39923
+ siteCreatorSelection: {
39924
+ kind: "site_creator_keyword_heuristic",
39925
+ priority: 10
39926
+ },
39546
39927
  selectionKeywordRules: [
39547
39928
  { kind: "substring", value: "launch" },
39548
39929
  { kind: "substring", value: "campaign" },
@@ -39561,7 +39942,11 @@ var curatedSiteStyles = [
39561
39942
  motion: "expressive"
39562
39943
  },
39563
39944
  compositionBudget: expressiveBudget,
39564
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
39945
+ recommendedHeaderLookIds: [
39946
+ "transparent-overlay",
39947
+ "floating-glass",
39948
+ "brand-solid"
39949
+ ],
39565
39950
  buttonPersonalityChoices: [
39566
39951
  buttonChoice("ink-stamp"),
39567
39952
  buttonChoice("confident-chip"),
@@ -39612,8 +39997,15 @@ var curatedSiteStyles = [
39612
39997
  "testimonials-accent-quote-proof",
39613
39998
  "contact-form-brand-depth-card"
39614
39999
  ],
39615
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
39616
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
40000
+ recommendedHeaderLookIds: [
40001
+ "brand-solid",
40002
+ "transparent-overlay",
40003
+ "practical-utility"
40004
+ ],
40005
+ recommendedFooterLookIds: [
40006
+ "site-footer-brand-two-band",
40007
+ "footer-muted-grounding"
40008
+ ],
39617
40009
  buttonPersonalityChoices: [
39618
40010
  buttonChoice("showtime-pill"),
39619
40011
  buttonChoice("confident-chip"),
@@ -48678,10 +49070,7 @@ var headerRootClassTransform = {
48678
49070
  const navContainerType = header?.navContainer?.type ?? "none";
48679
49071
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
48680
49072
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
48681
- const classes = [
48682
- config.base,
48683
- backgroundClass
48684
- ];
49073
+ const classes = [config.base, backgroundClass];
48685
49074
  if (!hasContainedNav) {
48686
49075
  if (config.blur) classes.push(config.blur);
48687
49076
  if (config.blurSupport) classes.push(config.blurSupport);
@@ -48696,7 +49085,12 @@ var headerRootClassTransform = {
48696
49085
  if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
48697
49086
  classes.push(config.shrink);
48698
49087
  }
48699
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
49088
+ const VALID_VARIANTS = [
49089
+ "classic",
49090
+ "centered",
49091
+ "transparent",
49092
+ "floating"
49093
+ ];
48700
49094
  const variant = header?.variant;
48701
49095
  if (variant && VALID_VARIANTS.includes(variant)) {
48702
49096
  classes.push(`header-variant-${variant}`);
@@ -49342,15 +49736,21 @@ var mobileCta = ctaButton({
49342
49736
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
49343
49737
  {
49344
49738
  type: "div",
49345
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
49739
+ props: {
49740
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
49741
+ }
49346
49742
  },
49347
49743
  {
49348
49744
  type: "div",
49349
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
49745
+ props: {
49746
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
49747
+ }
49350
49748
  },
49351
49749
  {
49352
49750
  type: "div",
49353
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
49751
+ props: {
49752
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
49753
+ }
49354
49754
  }
49355
49755
  ]);
49356
49756
  var mobileToggleButton = {
@@ -49533,28 +49933,6 @@ var floatingLayout = inline(
49533
49933
  ],
49534
49934
  when("$root.theme.header.variant", { equals: "floating" })
49535
49935
  );
49536
- var editorialLayout = stack(
49537
- {
49538
- gap: "md",
49539
- align: "center",
49540
- className: bindProp("$root.theme.header.maxWidth", {
49541
- transforms: pipe(
49542
- tx("layout.maxWidthClass", {
49543
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
49544
- })
49545
- ),
49546
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
49547
- })
49548
- },
49549
- [
49550
- centeredLogoRow,
49551
- createNavRow(
49552
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
49553
- "center"
49554
- )
49555
- ],
49556
- when("$root.theme.header.variant", { equals: "editorial" })
49557
- );
49558
49936
  var headerLayout = headerSection(
49559
49937
  {
49560
49938
  background: bindProp("$root.theme.header", {
@@ -49568,10 +49946,7 @@ var headerLayout = headerSection(
49568
49946
  }),
49569
49947
  style: bindProp("$root.theme.header", {
49570
49948
  transforms: pipe(tx("layout.headerRootStyle")),
49571
- fallback: mergeStyles(
49572
- textColorStyle("text"),
49573
- borderColorStyle("border")
49574
- )
49949
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
49575
49950
  })
49576
49951
  },
49577
49952
  [
@@ -49580,7 +49955,6 @@ var headerLayout = headerSection(
49580
49955
  centeredLayout,
49581
49956
  transparentLayout,
49582
49957
  floatingLayout,
49583
- editorialLayout,
49584
49958
  mobileOverlay
49585
49959
  ],
49586
49960
  props({
@@ -70475,6 +70849,9 @@ function transformSdkBlockToDefinition(sdkBlock) {
70475
70849
  }
70476
70850
 
70477
70851
  // ../blocks/src/customBlockRegistry.ts
70852
+ var defaultCustomBlockSourcePolicy = {
70853
+ kind: "canonical-db-fallback-sdk"
70854
+ };
70478
70855
  function isCustomBlockKind(blockKind) {
70479
70856
  return blockKind.startsWith("custom.");
70480
70857
  }
@@ -70501,39 +70878,86 @@ function toResolvedCustomBlock(manifest, source) {
70501
70878
  )
70502
70879
  };
70503
70880
  }
70881
+ function planCustomBlockRegistryResolution({
70882
+ sdkConfig,
70883
+ customBlocks = [],
70884
+ policy = defaultCustomBlockSourcePolicy
70885
+ }) {
70886
+ switch (policy.kind) {
70887
+ case "canonical-db-fallback-sdk": {
70888
+ const entriesByKind = /* @__PURE__ */ new Map();
70889
+ const conflicts = [];
70890
+ for (const customBlock of customBlocks) {
70891
+ entriesByKind.set(
70892
+ customBlock.manifest.id,
70893
+ toResolvedCustomBlock(customBlock.manifest, customBlock.source)
70894
+ );
70895
+ }
70896
+ for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
70897
+ const existing = entriesByKind.get(sdkBlock.id);
70898
+ if (existing) {
70899
+ conflicts.push({
70900
+ kind: "conflict",
70901
+ blockKind: existing.blockKind,
70902
+ winner: existing.source,
70903
+ loser: { kind: "sdk-config" },
70904
+ reason: "db-canonical-sdk-fallback"
70905
+ });
70906
+ continue;
70907
+ }
70908
+ entriesByKind.set(
70909
+ sdkBlock.id,
70910
+ toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
70911
+ );
70912
+ }
70913
+ return {
70914
+ policy,
70915
+ entries: Array.from(entriesByKind.values()),
70916
+ conflicts
70917
+ };
70918
+ }
70919
+ }
70920
+ }
70504
70921
  function createCustomBlockRegistry({
70505
70922
  sdkConfig,
70506
70923
  customBlocks = [],
70924
+ policy = defaultCustomBlockSourcePolicy,
70507
70925
  onConflict
70508
70926
  }) {
70509
- const entriesByKind = /* @__PURE__ */ new Map();
70510
- for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
70511
- entriesByKind.set(
70512
- sdkBlock.id,
70513
- toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
70514
- );
70515
- }
70516
- for (const customBlock of customBlocks) {
70517
- const existing = entriesByKind.get(customBlock.manifest.id);
70518
- if (existing) {
70519
- onConflict?.(
70520
- `Skipping DB custom block "${customBlock.manifest.id}" - conflicts with SDK config block`
70521
- );
70522
- continue;
70523
- }
70524
- entriesByKind.set(
70525
- customBlock.manifest.id,
70526
- toResolvedCustomBlock(customBlock.manifest, customBlock.source)
70927
+ const plan = planCustomBlockRegistryResolution({
70928
+ sdkConfig,
70929
+ customBlocks,
70930
+ policy
70931
+ });
70932
+ const entriesByKind = new Map(
70933
+ plan.entries.map((entry) => [entry.blockKind, entry])
70934
+ );
70935
+ for (const conflict of plan.conflicts) {
70936
+ onConflict?.(
70937
+ `Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`
70527
70938
  );
70528
70939
  }
70529
70940
  return {
70530
- entries: Array.from(entriesByKind.values()),
70941
+ entries: plan.entries,
70942
+ conflicts: plan.conflicts,
70531
70943
  findManifest: (blockKind) => {
70532
70944
  if (!isCustomBlockKind(blockKind)) return void 0;
70533
70945
  return entriesByKind.get(blockKind);
70534
70946
  }
70535
70947
  };
70536
70948
  }
70949
+ function sourceLabel(source) {
70950
+ switch (source.kind) {
70951
+ case "managed-database":
70952
+ return "DB";
70953
+ case "sdk-synced":
70954
+ return "SDK-synced DB";
70955
+ case "sdk-config":
70956
+ return "SDK config";
70957
+ default:
70958
+ return assertNever3(source);
70959
+ }
70960
+ }
70537
70961
  function mergeBlockDescriptorsWithRegistry(systemBlocks, registry, onConflict) {
70538
70962
  const existingNames = new Set(systemBlocks.map((block) => block.name));
70539
70963
  const result = [...systemBlocks];
@@ -74056,9 +74480,9 @@ var containerResponsiveThemeCss = `/*
74056
74480
  }
74057
74481
 
74058
74482
  @layer rb-theme {
74059
- /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
74060
- :root {
74061
- /* --tb-primary: 17 24 39;
74483
+ /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
74484
+ :root {
74485
+ /* --tb-primary: 17 24 39;
74062
74486
  --tb-text: 17 24 39;
74063
74487
  --tb-muted: 107 114 128;
74064
74488
  --tb-bg: 255 255 255;
@@ -74080,159 +74504,164 @@ var containerResponsiveThemeCss = `/*
74080
74504
 
74081
74505
  --motion-duration: 180ms;
74082
74506
  --motion-ease: cubic-bezier(.2,.8,.2,1); */
74083
- }
74507
+ }
74084
74508
 
74085
- /* -------------------------------------------------------------------------- */
74086
- /* Shared: Modal */
74087
- /* -------------------------------------------------------------------------- */
74509
+ /* -------------------------------------------------------------------------- */
74510
+ /* Shared: Modal */
74511
+ /* -------------------------------------------------------------------------- */
74088
74512
 
74089
- :where(.theme-scope) .rb-modal-overlay {
74090
- position: fixed;
74091
- inset: 0;
74092
- z-index: var(--rb-modal-z-index, 20000);
74093
- display: grid;
74094
- place-items: center;
74095
- padding: 1rem;
74096
- /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
74097
- background-color: rgba(0, 0, 0, 0.6);
74098
- background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
74099
- }
74513
+ :where(.theme-scope) .rb-modal-overlay {
74514
+ position: fixed;
74515
+ inset: 0;
74516
+ z-index: var(--rb-modal-z-index, 20000);
74517
+ display: grid;
74518
+ place-items: center;
74519
+ padding: 1rem;
74520
+ /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
74521
+ background-color: rgba(0, 0, 0, 0.6);
74522
+ background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
74523
+ }
74100
74524
 
74101
- :where(.theme-scope) .rb-modal {
74102
- width: min(var(--rb-modal-max-width, 560px), 100%);
74103
- background: var(--rb-modal-bg, rgb(var(--tb-surface)));
74104
- border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
74105
- border-radius: var(--rb-modal-radius, var(--radius-card));
74106
- box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
74107
- }
74525
+ :where(.theme-scope) .rb-modal {
74526
+ width: min(var(--rb-modal-max-width, 560px), 100%);
74527
+ background: var(--rb-modal-bg, rgb(var(--tb-surface)));
74528
+ border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
74529
+ border-radius: var(--rb-modal-radius, var(--radius-card));
74530
+ box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
74531
+ }
74108
74532
 
74109
- :where(.theme-scope) .rb-modal__header {
74110
- display: flex;
74111
- align-items: center;
74112
- justify-content: space-between;
74113
- gap: 1rem;
74114
- padding: 1rem 1rem 0.75rem;
74115
- border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
74116
- }
74533
+ :where(.theme-scope) .rb-modal__header {
74534
+ display: flex;
74535
+ align-items: center;
74536
+ justify-content: space-between;
74537
+ gap: 1rem;
74538
+ padding: 1rem 1rem 0.75rem;
74539
+ border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
74540
+ }
74117
74541
 
74118
- :where(.theme-scope) .rb-modal__title {
74119
- margin: 0;
74120
- font-family: var(--font-heading);
74121
- font-size: 1.0625rem;
74122
- font-weight: 600;
74123
- color: rgb(var(--tb-text));
74124
- }
74542
+ :where(.theme-scope) .rb-modal__title {
74543
+ margin: 0;
74544
+ font-family: var(--font-heading);
74545
+ font-size: 1.0625rem;
74546
+ font-weight: 600;
74547
+ color: rgb(var(--tb-text));
74548
+ }
74125
74549
 
74126
- :where(.theme-scope) .rb-modal__close {
74127
- background: transparent;
74128
- border: none;
74129
- width: 2.25rem;
74130
- height: 2.25rem;
74131
- padding: 0;
74132
- line-height: 1;
74133
- color: rgb(var(--tb-mutedText));
74134
- cursor: pointer;
74135
- display: grid;
74136
- place-items: center;
74137
- border-radius: var(--radius-control);
74138
- }
74550
+ :where(.theme-scope) .rb-modal__close {
74551
+ background: transparent;
74552
+ border: none;
74553
+ width: 2.25rem;
74554
+ height: 2.25rem;
74555
+ padding: 0;
74556
+ line-height: 1;
74557
+ color: rgb(var(--tb-mutedText));
74558
+ cursor: pointer;
74559
+ display: grid;
74560
+ place-items: center;
74561
+ border-radius: var(--radius-control);
74562
+ }
74139
74563
 
74140
- :where(.theme-scope) .rb-modal__close:hover {
74141
- color: rgb(var(--tb-text));
74142
- background: rgba(var(--tb-border), 0.2);
74143
- }
74564
+ :where(.theme-scope) .rb-modal__close:hover {
74565
+ color: rgb(var(--tb-text));
74566
+ background: rgba(var(--tb-border), 0.2);
74567
+ }
74144
74568
 
74145
- :where(.theme-scope) .rb-modal__close:focus-visible {
74146
- outline: none;
74147
- box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
74148
- }
74569
+ :where(.theme-scope) .rb-modal__close:focus-visible {
74570
+ outline: none;
74571
+ box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
74572
+ }
74149
74573
 
74150
- :where(.theme-scope) .rb-modal__body {
74151
- padding: 0.875rem 1rem 1rem;
74152
- color: rgb(var(--tb-text));
74153
- font-size: 0.9375rem;
74154
- line-height: 1.45;
74155
- }
74574
+ :where(.theme-scope) .rb-modal__body {
74575
+ padding: 0.875rem 1rem 1rem;
74576
+ color: rgb(var(--tb-text));
74577
+ font-size: 0.9375rem;
74578
+ line-height: 1.45;
74579
+ }
74156
74580
 
74157
- /* -------------------------------------------------------------------------- */
74158
- /* Header: Mobile nav overlay transitions */
74159
- /* -------------------------------------------------------------------------- */
74581
+ /* -------------------------------------------------------------------------- */
74582
+ /* Header: Mobile nav overlay transitions */
74583
+ /* -------------------------------------------------------------------------- */
74160
74584
 
74161
- /* Keep the overlay in the DOM so we can transition opacity/transform.
74585
+ /* Keep the overlay in the DOM so we can transition opacity/transform.
74162
74586
  JS toggles \`aria-hidden\` + \`inert\` (via enhancer), and CSS uses pointer-events
74163
74587
  to prevent interaction while closed. */
74164
- .nav-mobile-overlay {
74165
- pointer-events: none;
74166
- /* Prevent transformed children (panel) from creating viewport scrollbars
74588
+ .nav-mobile-overlay {
74589
+ pointer-events: none;
74590
+ /* Prevent transformed children (panel) from creating viewport scrollbars
74167
74591
  during enter/exit transitions. */
74168
- overflow: hidden;
74169
- }
74170
-
74171
- .nav-mobile-overlay[aria-hidden="false"] {
74172
- pointer-events: auto;
74173
- }
74592
+ overflow: hidden;
74593
+ }
74174
74594
 
74175
- .nav-mobile-overlay .nav-mobile-backdrop {
74176
- opacity: 0;
74177
- transition: opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
74178
- }
74595
+ .nav-mobile-overlay[aria-hidden='false'] {
74596
+ pointer-events: auto;
74597
+ }
74179
74598
 
74180
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-backdrop {
74181
- opacity: 1;
74182
- }
74599
+ .nav-mobile-overlay .nav-mobile-backdrop {
74600
+ opacity: 0;
74601
+ transition: opacity var(--motion-duration, 180ms)
74602
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
74603
+ }
74183
74604
 
74184
- .nav-mobile-overlay .nav-mobile-panel {
74185
- opacity: 0;
74186
- transform: translate3d(12px, 0, 0);
74187
- overflow-x: hidden;
74188
- transition:
74189
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
74190
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
74191
- will-change: opacity, transform;
74192
- }
74605
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-backdrop {
74606
+ opacity: 1;
74607
+ }
74193
74608
 
74194
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-panel {
74195
- opacity: 1;
74196
- transform: translate3d(0, 0, 0);
74197
- }
74609
+ .nav-mobile-overlay .nav-mobile-panel {
74610
+ opacity: 0;
74611
+ transform: translate3d(12px, 0, 0);
74612
+ overflow-x: hidden;
74613
+ transition:
74614
+ opacity var(--motion-duration, 180ms)
74615
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
74616
+ transform var(--motion-duration, 180ms)
74617
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
74618
+ will-change: opacity, transform;
74619
+ }
74198
74620
 
74199
- /* -------------------------------------------------------------------------- */
74200
- /* Header: Mobile toggle hamburger -> X */
74201
- /* -------------------------------------------------------------------------- */
74621
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-panel {
74622
+ opacity: 1;
74623
+ transform: translate3d(0, 0, 0);
74624
+ }
74202
74625
 
74203
- .nav-mobile-toggle .nav-mobile-bar {
74204
- transform-origin: center;
74205
- transition:
74206
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
74207
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
74208
- will-change: transform, opacity;
74209
- }
74626
+ /* -------------------------------------------------------------------------- */
74627
+ /* Header: Mobile toggle hamburger -> X */
74628
+ /* -------------------------------------------------------------------------- */
74210
74629
 
74211
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-top {
74212
- transform: translateY(6px) rotate(45deg);
74213
- }
74630
+ .nav-mobile-toggle .nav-mobile-bar {
74631
+ transform-origin: center;
74632
+ transition:
74633
+ transform var(--motion-duration, 180ms)
74634
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
74635
+ opacity var(--motion-duration, 180ms)
74636
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
74637
+ will-change: transform, opacity;
74638
+ }
74214
74639
 
74215
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-middle {
74216
- opacity: 0;
74217
- }
74640
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-top {
74641
+ transform: translateY(6px) rotate(45deg);
74642
+ }
74218
74643
 
74219
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-bottom {
74220
- transform: translateY(-6px) rotate(-45deg);
74221
- }
74644
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-middle {
74645
+ opacity: 0;
74646
+ }
74222
74647
 
74223
- @media (prefers-reduced-motion: reduce) {
74224
- .nav-mobile-overlay .nav-mobile-backdrop,
74225
- .nav-mobile-overlay .nav-mobile-panel {
74226
- transition: none;
74227
- transform: none;
74648
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-bottom {
74649
+ transform: translateY(-6px) rotate(-45deg);
74228
74650
  }
74229
74651
 
74230
- .nav-mobile-toggle .nav-mobile-bar {
74231
- transition: none;
74652
+ @media (prefers-reduced-motion: reduce) {
74653
+ .nav-mobile-overlay .nav-mobile-backdrop,
74654
+ .nav-mobile-overlay .nav-mobile-panel {
74655
+ transition: none;
74656
+ transform: none;
74657
+ }
74658
+
74659
+ .nav-mobile-toggle .nav-mobile-bar {
74660
+ transition: none;
74661
+ }
74232
74662
  }
74233
- }
74234
74663
 
74235
- /*
74664
+ /*
74236
74665
  * Theme Scope Styles
74237
74666
  *
74238
74667
  * IMPORTANT: All :where(.theme-scope) selectors are wrapped in :where() to give them
@@ -74242,790 +74671,838 @@ var containerResponsiveThemeCss = `/*
74242
74671
  * Example: \`h4 { color: white; }\` will override \`:where(:where(.theme-scope)) h4\`
74243
74672
  */
74244
74673
 
74245
- :where(:where(.theme-scope)) {
74246
- font-family: var(--font-body);
74247
- letter-spacing: var(--ls-body);
74248
- line-height: var(--lh-body);
74249
- font-weight: var(--font-weight-body);
74250
-
74251
- & h1,
74252
- & h2,
74253
- & h3,
74254
- & h4,
74255
- & h5,
74256
- & h6 {
74257
- font-family: var(--font-heading);
74258
- /* Color is set by generateTypographyCss.ts with full cascade:
74674
+ :where(:where(.theme-scope)) {
74675
+ font-family: var(--font-body);
74676
+ letter-spacing: var(--ls-body);
74677
+ line-height: var(--lh-body);
74678
+ font-weight: var(--font-weight-body);
74679
+
74680
+ & h1,
74681
+ & h2,
74682
+ & h3,
74683
+ & h4,
74684
+ & h5,
74685
+ & h6 {
74686
+ font-family: var(--font-heading);
74687
+ /* Color is set by generateTypographyCss.ts with full cascade:
74259
74688
  --section-heading-color -> --section-text-color -> --hc-hN -> --hc-heading -> inherit */
74260
- font-weight: var(--font-weight-heading);
74261
- text-transform: var(--tt-heading);
74262
- font-variant-caps: var(--fv-heading);
74689
+ font-weight: var(--font-weight-heading);
74690
+ text-transform: var(--tt-heading);
74691
+ font-variant-caps: var(--fv-heading);
74692
+ }
74263
74693
  }
74264
- }
74265
74694
 
74266
- /* Heading typographic overrides (fallback to defaults when not provided) */
74267
- :where(:where(.theme-scope)) h1 {
74268
- letter-spacing: var(--ls-h1, var(--ls-heading));
74269
- line-height: var(--lh-h1, var(--lh-heading));
74270
- font-weight: var(--fw-h1, var(--font-weight-heading));
74271
- }
74272
- :where(:where(.theme-scope)) h2 {
74273
- letter-spacing: var(--ls-h2, var(--ls-heading));
74274
- line-height: var(--lh-h2, var(--lh-heading));
74275
- font-weight: var(--fw-h2, var(--font-weight-heading));
74276
- }
74277
- :where(:where(.theme-scope)) h3 {
74278
- letter-spacing: var(--ls-h3, var(--ls-heading));
74279
- line-height: var(--lh-h3, var(--lh-heading));
74280
- font-weight: var(--fw-h3, var(--font-weight-heading));
74281
- }
74282
- :where(:where(.theme-scope)) h4,
74283
- :where(:where(.theme-scope)) h5,
74284
- :where(:where(.theme-scope)) h6 {
74285
- letter-spacing: var(--ls-heading);
74286
- line-height: var(--lh-heading);
74287
- }
74288
- :where(:where(.theme-scope)) h4 {
74289
- font-weight: var(--fw-h4, var(--font-weight-heading));
74290
- }
74291
- :where(:where(.theme-scope)) h5 {
74292
- font-weight: var(--fw-h5, var(--font-weight-heading));
74293
- }
74294
- :where(:where(.theme-scope)) h6 {
74295
- font-weight: var(--fw-h6, var(--font-weight-heading));
74296
- }
74695
+ /* Heading typographic overrides (fallback to defaults when not provided) */
74696
+ :where(:where(.theme-scope)) h1 {
74697
+ letter-spacing: var(--ls-h1, var(--ls-heading));
74698
+ line-height: var(--lh-h1, var(--lh-heading));
74699
+ font-weight: var(--fw-h1, var(--font-weight-heading));
74700
+ }
74701
+ :where(:where(.theme-scope)) h2 {
74702
+ letter-spacing: var(--ls-h2, var(--ls-heading));
74703
+ line-height: var(--lh-h2, var(--lh-heading));
74704
+ font-weight: var(--fw-h2, var(--font-weight-heading));
74705
+ }
74706
+ :where(:where(.theme-scope)) h3 {
74707
+ letter-spacing: var(--ls-h3, var(--ls-heading));
74708
+ line-height: var(--lh-h3, var(--lh-heading));
74709
+ font-weight: var(--fw-h3, var(--font-weight-heading));
74710
+ }
74711
+ :where(:where(.theme-scope)) h4,
74712
+ :where(:where(.theme-scope)) h5,
74713
+ :where(:where(.theme-scope)) h6 {
74714
+ letter-spacing: var(--ls-heading);
74715
+ line-height: var(--lh-heading);
74716
+ }
74717
+ :where(:where(.theme-scope)) h4 {
74718
+ font-weight: var(--fw-h4, var(--font-weight-heading));
74719
+ }
74720
+ :where(:where(.theme-scope)) h5 {
74721
+ font-weight: var(--fw-h5, var(--font-weight-heading));
74722
+ }
74723
+ :where(:where(.theme-scope)) h6 {
74724
+ font-weight: var(--fw-h6, var(--font-weight-heading));
74725
+ }
74297
74726
 
74298
- /* Rich text element spacing based on theme rhythm */
74299
- :where(.theme-scope) .rb-prose h1 {
74300
- margin-top: calc(var(--rt-space-y) * 1.6);
74301
- margin-bottom: calc(var(--rt-space-y) * 0.8);
74302
- }
74303
- :where(.theme-scope) .rb-prose h2 {
74304
- margin-top: calc(var(--rt-space-y) * 1.4);
74305
- margin-bottom: calc(var(--rt-space-y) * 0.7);
74306
- }
74307
- :where(.theme-scope) .rb-prose h3 {
74308
- margin-top: calc(var(--rt-space-y) * 1.2);
74309
- margin-bottom: calc(var(--rt-space-y) * 0.6);
74310
- }
74311
- :where(.theme-scope) .rb-prose h4 {
74312
- margin-top: calc(var(--rt-space-y) * 1);
74313
- margin-bottom: calc(var(--rt-space-y) * 0.5);
74314
- }
74315
- :where(.theme-scope) .rb-prose h5 {
74316
- margin-top: calc(var(--rt-space-y) * 0.9);
74317
- margin-bottom: calc(var(--rt-space-y) * 0.45);
74318
- }
74319
- :where(.theme-scope) .rb-prose h6 {
74320
- margin-top: calc(var(--rt-space-y) * 0.8);
74321
- margin-bottom: calc(var(--rt-space-y) * 0.4);
74322
- }
74323
- :where(.theme-scope) .rb-prose p {
74324
- margin: var(--rt-space-y) 0;
74325
- }
74326
- :where(.theme-scope) .rb-prose img {
74327
- display: block;
74328
- max-width: 100%;
74329
- height: auto;
74330
- margin: calc(var(--rt-space-y) * 1) 0;
74331
- }
74332
- :where(.theme-scope) .rb-prose ul,
74333
- :where(.theme-scope) .rb-prose ol {
74334
- margin: var(--rt-space-y) 0;
74335
- padding-left: 1.25rem;
74336
- }
74337
- :where(.theme-scope) .rb-prose ul {
74338
- list-style-type: disc;
74339
- }
74340
- :where(.theme-scope) .rb-prose ol {
74341
- list-style-type: decimal;
74342
- }
74343
- :where(.theme-scope) .rb-prose ul ul {
74344
- list-style-type: circle;
74345
- }
74346
- :where(.theme-scope) .rb-prose ul ul ul {
74347
- list-style-type: square;
74348
- }
74349
- :where(.theme-scope) .rb-prose ol ol {
74350
- list-style-type: lower-alpha;
74351
- }
74352
- :where(.theme-scope) .rb-prose ol ol ol {
74353
- list-style-type: lower-roman;
74354
- }
74355
- :where(.theme-scope) .rb-prose blockquote {
74356
- margin: calc(var(--rt-space-y) * 1) 0;
74357
- padding-left: 1rem;
74358
- border-left: 3px solid rgb(var(--tb-border));
74359
- }
74360
- :where(.theme-scope) .rb-prose > :first-child {
74361
- margin-top: 0;
74362
- }
74363
- :where(.theme-scope) .rb-prose > :last-child {
74364
- margin-bottom: 0;
74365
- }
74727
+ /* Rich text element spacing based on theme rhythm */
74728
+ :where(.theme-scope) .rb-prose h1 {
74729
+ margin-top: calc(var(--rt-space-y) * 1.6);
74730
+ margin-bottom: calc(var(--rt-space-y) * 0.8);
74731
+ }
74732
+ :where(.theme-scope) .rb-prose h2 {
74733
+ margin-top: calc(var(--rt-space-y) * 1.4);
74734
+ margin-bottom: calc(var(--rt-space-y) * 0.7);
74735
+ }
74736
+ :where(.theme-scope) .rb-prose h3 {
74737
+ margin-top: calc(var(--rt-space-y) * 1.2);
74738
+ margin-bottom: calc(var(--rt-space-y) * 0.6);
74739
+ }
74740
+ :where(.theme-scope) .rb-prose h4 {
74741
+ margin-top: calc(var(--rt-space-y) * 1);
74742
+ margin-bottom: calc(var(--rt-space-y) * 0.5);
74743
+ }
74744
+ :where(.theme-scope) .rb-prose h5 {
74745
+ margin-top: calc(var(--rt-space-y) * 0.9);
74746
+ margin-bottom: calc(var(--rt-space-y) * 0.45);
74747
+ }
74748
+ :where(.theme-scope) .rb-prose h6 {
74749
+ margin-top: calc(var(--rt-space-y) * 0.8);
74750
+ margin-bottom: calc(var(--rt-space-y) * 0.4);
74751
+ }
74752
+ :where(.theme-scope) .rb-prose p {
74753
+ margin: var(--rt-space-y) 0;
74754
+ }
74755
+ :where(.theme-scope) .rb-prose img {
74756
+ display: block;
74757
+ max-width: 100%;
74758
+ height: auto;
74759
+ margin: calc(var(--rt-space-y) * 1) 0;
74760
+ }
74761
+ :where(.theme-scope) .rb-prose ul,
74762
+ :where(.theme-scope) .rb-prose ol {
74763
+ margin: var(--rt-space-y) 0;
74764
+ padding-left: 1.25rem;
74765
+ }
74766
+ :where(.theme-scope) .rb-prose ul {
74767
+ list-style-type: disc;
74768
+ }
74769
+ :where(.theme-scope) .rb-prose ol {
74770
+ list-style-type: decimal;
74771
+ }
74772
+ :where(.theme-scope) .rb-prose ul ul {
74773
+ list-style-type: circle;
74774
+ }
74775
+ :where(.theme-scope) .rb-prose ul ul ul {
74776
+ list-style-type: square;
74777
+ }
74778
+ :where(.theme-scope) .rb-prose ol ol {
74779
+ list-style-type: lower-alpha;
74780
+ }
74781
+ :where(.theme-scope) .rb-prose ol ol ol {
74782
+ list-style-type: lower-roman;
74783
+ }
74784
+ :where(.theme-scope) .rb-prose blockquote {
74785
+ margin: calc(var(--rt-space-y) * 1) 0;
74786
+ padding-left: 1rem;
74787
+ border-left: 3px solid rgb(var(--tb-border));
74788
+ }
74789
+ :where(.theme-scope) .rb-prose > :first-child {
74790
+ margin-top: 0;
74791
+ }
74792
+ :where(.theme-scope) .rb-prose > :last-child {
74793
+ margin-bottom: 0;
74794
+ }
74366
74795
 
74367
- /* Prose color overrides - use theme CSS variables instead of hardcoded colors
74796
+ /* Prose color overrides - use theme CSS variables instead of hardcoded colors
74368
74797
  * This makes prose elements automatically adapt to light/dark themes */
74369
- :where(.theme-scope) .rb-prose {
74370
- /* Body text inherits from parent, which should already have theme color */
74371
- color: inherit;
74372
- }
74798
+ :where(.theme-scope) .rb-prose {
74799
+ /* Body text inherits from parent, which should already have theme color */
74800
+ color: inherit;
74801
+ }
74373
74802
 
74374
- /* Prose size variants (theme-aware, CSS-only) */
74375
- :where(.theme-scope) {
74376
- /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
74377
- --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
74378
- --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
74803
+ /* Prose size variants (theme-aware, CSS-only) */
74804
+ :where(.theme-scope) {
74805
+ /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
74806
+ --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
74807
+ --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
74379
74808
 
74380
- --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
74381
- --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
74809
+ --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
74810
+ --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
74382
74811
 
74383
- /* Applied at >= 640px; below that, rb-prose-lg is typically used */
74384
- --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
74385
- --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
74386
- }
74812
+ /* Applied at >= 640px; below that, rb-prose-lg is typically used */
74813
+ --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
74814
+ --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
74815
+ }
74387
74816
 
74388
- :where(.theme-scope) .rb-prose-sm {
74389
- font-size: var(--rb-prose-sm-font-size);
74390
- line-height: var(--rb-prose-sm-line-height);
74391
- }
74392
- :where(.theme-scope) .rb-prose-lg {
74393
- font-size: var(--rb-prose-lg-font-size);
74394
- line-height: var(--rb-prose-lg-line-height);
74395
- }
74396
- @container rb-site (min-width: 640px) {
74817
+ :where(.theme-scope) .rb-prose-sm {
74818
+ font-size: var(--rb-prose-sm-font-size);
74819
+ line-height: var(--rb-prose-sm-line-height);
74820
+ }
74821
+ :where(.theme-scope) .rb-prose-lg {
74822
+ font-size: var(--rb-prose-lg-font-size);
74823
+ line-height: var(--rb-prose-lg-line-height);
74824
+ }
74825
+ @container rb-site (min-width: 640px) {
74397
74826
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
74398
74827
  :where(.theme-scope) .rb-prose-xl-sm {
74399
- font-size: var(--rb-prose-xl-sm-font-size);
74400
- line-height: var(--rb-prose-xl-sm-line-height);
74401
- }
74828
+ font-size: var(--rb-prose-xl-sm-font-size);
74829
+ line-height: var(--rb-prose-xl-sm-line-height);
74830
+ }
74402
74831
  }
74403
74832
  }
74404
74833
 
74405
- /* Neutral prose uses theme text color by default */
74406
- :where(.theme-scope) .rb-prose-neutral {
74407
- color: rgb(var(--tb-text));
74408
- }
74834
+ /* Neutral prose uses theme text color by default */
74835
+ :where(.theme-scope) .rb-prose-neutral {
74836
+ color: rgb(var(--tb-text));
74837
+ }
74409
74838
 
74410
- :where(.theme-scope) .rb-prose p,
74411
- :where(.theme-scope) .rb-prose li {
74412
- /* Body text uses inherited color (set by fragment via textColorStyle) */
74413
- color: inherit;
74414
- }
74839
+ :where(.theme-scope) .rb-prose p,
74840
+ :where(.theme-scope) .rb-prose li {
74841
+ /* Body text uses inherited color (set by fragment via textColorStyle) */
74842
+ color: inherit;
74843
+ }
74415
74844
 
74416
- :where(.theme-scope) .rb-prose h1,
74417
- :where(.theme-scope) .rb-prose h2,
74418
- :where(.theme-scope) .rb-prose h3,
74419
- :where(.theme-scope) .rb-prose h4,
74420
- :where(.theme-scope) .rb-prose h5,
74421
- :where(.theme-scope) .rb-prose h6 {
74422
- /* Headings inherit from parent or use theme text color */
74423
- color: inherit;
74424
- }
74845
+ :where(.theme-scope) .rb-prose h1,
74846
+ :where(.theme-scope) .rb-prose h2,
74847
+ :where(.theme-scope) .rb-prose h3,
74848
+ :where(.theme-scope) .rb-prose h4,
74849
+ :where(.theme-scope) .rb-prose h5,
74850
+ :where(.theme-scope) .rb-prose h6 {
74851
+ /* Headings inherit from parent or use theme text color */
74852
+ color: inherit;
74853
+ }
74425
74854
 
74426
- :where(.theme-scope) .rb-prose strong,
74427
- :where(.theme-scope) .rb-prose b {
74428
- /* Bold text inherits color but increases weight */
74429
- color: inherit;
74430
- font-weight: 600;
74431
- }
74855
+ :where(.theme-scope) .rb-prose strong,
74856
+ :where(.theme-scope) .rb-prose b {
74857
+ /* Bold text inherits color but increases weight */
74858
+ color: inherit;
74859
+ font-weight: 600;
74860
+ }
74432
74861
 
74433
- :where(.theme-scope) .rb-prose em,
74434
- :where(.theme-scope) .rb-prose i {
74435
- /* Italic text inherits color */
74436
- color: inherit;
74437
- }
74862
+ :where(.theme-scope) .rb-prose em,
74863
+ :where(.theme-scope) .rb-prose i {
74864
+ /* Italic text inherits color */
74865
+ color: inherit;
74866
+ }
74438
74867
 
74439
- :where(.theme-scope) .rb-prose a {
74440
- /* Global prose link style with theme-level overrides */
74441
- color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
74442
- text-decoration-line: var(--rb-prose-link-decoration-line, underline);
74443
- text-decoration-style: var(--rb-prose-link-underline-style, solid);
74444
- text-decoration-thickness: var(--rb-prose-link-underline-thickness, from-font);
74445
- text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
74446
- text-decoration-color: var(--rb-prose-link-decoration-color, rgba(var(--tb-primary), 0.3));
74447
- transition:
74448
- color 150ms ease,
74449
- text-decoration-color 150ms ease;
74450
- }
74868
+ :where(.theme-scope) .rb-prose a {
74869
+ /* Global prose link style with theme-level overrides */
74870
+ color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
74871
+ text-decoration-line: var(--rb-prose-link-decoration-line, underline);
74872
+ text-decoration-style: var(--rb-prose-link-underline-style, solid);
74873
+ text-decoration-thickness: var(
74874
+ --rb-prose-link-underline-thickness,
74875
+ from-font
74876
+ );
74877
+ text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
74878
+ text-decoration-color: var(
74879
+ --rb-prose-link-decoration-color,
74880
+ rgba(var(--tb-primary), 0.3)
74881
+ );
74882
+ transition:
74883
+ color 150ms ease,
74884
+ text-decoration-color 150ms ease;
74885
+ }
74451
74886
 
74452
- :where(.theme-scope) .rb-prose a:hover {
74453
- color: var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))));
74454
- text-decoration-color: var(
74455
- --rb-prose-link-hover-decoration-color,
74456
- var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))))
74457
- );
74458
- }
74887
+ :where(.theme-scope) .rb-prose a:hover {
74888
+ color: var(
74889
+ --rb-prose-link-hover-color,
74890
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
74891
+ );
74892
+ text-decoration-color: var(
74893
+ --rb-prose-link-hover-decoration-color,
74894
+ var(
74895
+ --rb-prose-link-hover-color,
74896
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
74897
+ )
74898
+ );
74899
+ }
74459
74900
 
74460
- :where(.theme-scope) .rb-prose blockquote {
74461
- /* Blockquotes use muted text color */
74462
- color: rgb(var(--tb-mutedText));
74463
- border-left-color: rgb(var(--tb-border));
74464
- }
74901
+ :where(.theme-scope) .rb-prose blockquote {
74902
+ /* Blockquotes use muted text color */
74903
+ color: rgb(var(--tb-mutedText));
74904
+ border-left-color: rgb(var(--tb-border));
74905
+ }
74465
74906
 
74466
- :where(.theme-scope) .fragment-quote-body blockquote {
74467
- /* Quote fragment should not get the generic prose blockquote left border/indent. */
74468
- border-left: 0;
74469
- padding-left: 0;
74470
- }
74907
+ :where(.theme-scope) .fragment-quote-body blockquote {
74908
+ /* Quote fragment should not get the generic prose blockquote left border/indent. */
74909
+ border-left: 0;
74910
+ padding-left: 0;
74911
+ }
74471
74912
 
74472
- :where(.theme-scope) .rb-columns-equal-height {
74473
- /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
74474
- container-type: inline-size;
74913
+ :where(.theme-scope) .rb-columns-equal-height {
74914
+ /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
74915
+ container-type: inline-size;
74475
74916
 
74476
- --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
74477
- --rb-columns-gap: var(--rb-semantic-gap, 0px);
74478
- --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
74917
+ --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
74918
+ --rb-columns-gap: var(--rb-semantic-gap, 0px);
74919
+ --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
74479
74920
 
74480
- --rb-columns-tile-w: calc(
74481
- (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) / var(--rb-columns-cols)
74482
- );
74483
- --rb-columns-tile-h: calc(var(--rb-columns-tile-w) * var(--rb-columns-tile-ar));
74484
- }
74921
+ --rb-columns-tile-w: calc(
74922
+ (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) /
74923
+ var(--rb-columns-cols)
74924
+ );
74925
+ --rb-columns-tile-h: calc(
74926
+ var(--rb-columns-tile-w) * var(--rb-columns-tile-ar)
74927
+ );
74928
+ }
74485
74929
 
74486
- @container rb-site (min-width: 768px) {
74930
+ @container rb-site (min-width: 768px) {
74487
74931
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
74488
74932
  :where(.theme-scope) .rb-columns-equal-height {
74489
- --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
74490
- }
74933
+ --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
74934
+ }
74491
74935
  }
74492
74936
  }
74493
74937
 
74494
- @container rb-site (min-width: 1024px) {
74938
+ @container rb-site (min-width: 1024px) {
74495
74939
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
74496
74940
  :where(.theme-scope) .rb-columns-equal-height {
74497
- --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
74498
- }
74941
+ --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
74942
+ }
74499
74943
  }
74500
74944
  }
74501
74945
 
74502
- @container rb-site (min-width: 1280px) {
74946
+ @container rb-site (min-width: 1280px) {
74503
74947
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
74504
74948
  :where(.theme-scope) .rb-columns-equal-height {
74505
- --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
74506
- }
74949
+ --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
74950
+ }
74507
74951
  }
74508
74952
  }
74509
74953
 
74510
- :where(.theme-scope) .rb-columns-equal-height > * {
74511
- height: var(--rb-columns-tile-h);
74512
- }
74954
+ :where(.theme-scope) .rb-columns-equal-height > * {
74955
+ height: var(--rb-columns-tile-h);
74956
+ }
74513
74957
 
74514
- :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
74515
- /*
74958
+ :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
74959
+ /*
74516
74960
  Grid items commonly include \`rb-h-full\` (height: 100%) to stretch within
74517
74961
  their row. In equal-height mode we instead want a fixed tile height so the
74518
74962
  spanning editorial tile doesn't become taller due to its larger width +
74519
74963
  aspect-ratio.
74520
74964
  */
74521
- height: var(--rb-columns-tile-h);
74522
- min-height: var(--rb-columns-tile-h);
74523
- max-height: var(--rb-columns-tile-h);
74524
- }
74965
+ height: var(--rb-columns-tile-h);
74966
+ min-height: var(--rb-columns-tile-h);
74967
+ max-height: var(--rb-columns-tile-h);
74968
+ }
74525
74969
 
74526
- :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
74527
- width: 100%;
74528
- height: 100%;
74529
- overflow: hidden;
74530
- }
74970
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
74971
+ width: 100%;
74972
+ height: 100%;
74973
+ overflow: hidden;
74974
+ }
74531
74975
 
74532
- :where(.theme-scope) .rb-columns-equal-height .fragment-image {
74533
- width: 100%;
74534
- height: 100%;
74535
- object-fit: cover;
74536
- }
74976
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image {
74977
+ width: 100%;
74978
+ height: 100%;
74979
+ object-fit: cover;
74980
+ }
74537
74981
 
74538
- :where(.theme-scope) .rb-prose code {
74539
- /* Inline code uses text color with surface background */
74540
- color: inherit;
74541
- background-color: rgba(var(--tb-surface), 0.5);
74542
- padding: 0.125rem 0.25rem;
74543
- border-radius: 0.25rem;
74544
- font-size: 0.875em;
74545
- }
74982
+ :where(.theme-scope) .rb-prose code {
74983
+ /* Inline code uses text color with surface background */
74984
+ color: inherit;
74985
+ background-color: rgba(var(--tb-surface), 0.5);
74986
+ padding: 0.125rem 0.25rem;
74987
+ border-radius: 0.25rem;
74988
+ font-size: 0.875em;
74989
+ }
74546
74990
 
74547
- :where(.theme-scope) .rb-prose pre {
74548
- /* Code blocks */
74549
- background-color: rgb(var(--tb-surface));
74550
- color: rgb(var(--tb-text));
74551
- border: 1px solid rgb(var(--tb-border));
74552
- border-radius: 0.5rem;
74553
- padding: 1rem;
74554
- overflow-x: auto;
74555
- }
74991
+ :where(.theme-scope) .rb-prose pre {
74992
+ /* Code blocks */
74993
+ background-color: rgb(var(--tb-surface));
74994
+ color: rgb(var(--tb-text));
74995
+ border: 1px solid rgb(var(--tb-border));
74996
+ border-radius: 0.5rem;
74997
+ padding: 1rem;
74998
+ overflow-x: auto;
74999
+ }
74556
75000
 
74557
- :where(.theme-scope) .rb-prose pre code {
74558
- /* Code inside pre blocks */
74559
- background-color: transparent;
74560
- padding: 0;
74561
- color: inherit;
74562
- }
75001
+ :where(.theme-scope) .rb-prose pre code {
75002
+ /* Code inside pre blocks */
75003
+ background-color: transparent;
75004
+ padding: 0;
75005
+ color: inherit;
75006
+ }
74563
75007
 
74564
- :where(.theme-scope) .rb-prose hr {
74565
- /* Horizontal rules */
74566
- border-color: rgb(var(--tb-border));
74567
- }
75008
+ :where(.theme-scope) .rb-prose hr {
75009
+ /* Horizontal rules */
75010
+ border-color: rgb(var(--tb-border));
75011
+ }
74568
75012
 
74569
- :where(.theme-scope) .rb-prose ul > li::marker,
74570
- :where(.theme-scope) .rb-prose ol > li::marker {
74571
- /* List markers use muted text color */
74572
- color: rgb(var(--tb-mutedText));
74573
- }
75013
+ :where(.theme-scope) .rb-prose ul > li::marker,
75014
+ :where(.theme-scope) .rb-prose ol > li::marker {
75015
+ /* List markers use muted text color */
75016
+ color: rgb(var(--tb-mutedText));
75017
+ }
74574
75018
 
74575
- /*
75019
+ /*
74576
75020
  /* Density helpers */
74577
- :where(.theme-scope) .section-pad {
74578
- padding-top: 4rem;
74579
- padding-bottom: 4rem;
74580
- }
74581
- :where(.theme-scope)[data-density="airy"] .section-pad {
74582
- padding-top: 4.5rem;
74583
- padding-bottom: 4.5rem;
74584
- }
74585
- :where(.theme-scope)[data-density="compact"] .section-pad {
74586
- padding-top: 3rem;
74587
- padding-bottom: 3rem;
74588
- }
74589
-
74590
- :where(.theme-scope) .rounded-control {
74591
- border-radius: var(--radius-control);
74592
- }
74593
- :where(.theme-scope) .rounded-card {
74594
- border-radius: var(--radius-card);
74595
- }
75021
+ :where(.theme-scope) .section-pad {
75022
+ padding-top: 4rem;
75023
+ padding-bottom: 4rem;
75024
+ }
75025
+ :where(.theme-scope)[data-density='airy'] .section-pad {
75026
+ padding-top: 4.5rem;
75027
+ padding-bottom: 4.5rem;
75028
+ }
75029
+ :where(.theme-scope)[data-density='compact'] .section-pad {
75030
+ padding-top: 3rem;
75031
+ padding-bottom: 3rem;
75032
+ }
74596
75033
 
74597
- :where(.theme-scope) .shadow-elev {
74598
- box-shadow: var(--shadow-elev);
74599
- }
75034
+ :where(.theme-scope) .rounded-control {
75035
+ border-radius: var(--radius-control);
75036
+ }
75037
+ :where(.theme-scope) .rounded-card {
75038
+ border-radius: var(--radius-card);
75039
+ }
74600
75040
 
74601
- :where(.theme-scope) .font-heading {
74602
- font-family: var(--font-heading);
74603
- }
74604
- :where(.theme-scope) .font-body {
74605
- font-family: var(--font-body);
74606
- }
75041
+ :where(.theme-scope) .shadow-elev {
75042
+ box-shadow: var(--shadow-elev);
75043
+ }
74607
75044
 
74608
- :where(.theme-scope) .text-h1 {
74609
- font-size: var(--fs-h1);
74610
- line-height: 1.1;
74611
- }
74612
- :where(.theme-scope) .text-h2 {
74613
- font-size: var(--fs-h2);
74614
- line-height: 1.15;
74615
- }
74616
- :where(.theme-scope) .text-h3 {
74617
- font-size: var(--fs-h3);
74618
- line-height: 1.2;
74619
- }
74620
- :where(.theme-scope) .text-body-size {
74621
- font-size: var(--fs-body);
74622
- }
75045
+ :where(.theme-scope) .font-heading {
75046
+ font-family: var(--font-heading);
75047
+ }
75048
+ :where(.theme-scope) .font-body {
75049
+ font-family: var(--font-body);
75050
+ }
74623
75051
 
74624
- :where(.theme-scope) .transition-theme {
74625
- transition: all var(--motion-duration) var(--motion-ease);
74626
- }
74627
- :where(.theme-scope) .transition-theme-standard {
74628
- transition: all var(--motion-duration) var(--motion-ease);
74629
- }
74630
- :where(.theme-scope) .transition-theme-subtle {
74631
- transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
74632
- }
74633
- :where(.theme-scope) .transition-theme-expressive {
74634
- transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
74635
- }
75052
+ :where(.theme-scope) .text-h1 {
75053
+ font-size: var(--fs-h1);
75054
+ line-height: 1.1;
75055
+ }
75056
+ :where(.theme-scope) .text-h2 {
75057
+ font-size: var(--fs-h2);
75058
+ line-height: 1.15;
75059
+ }
75060
+ :where(.theme-scope) .text-h3 {
75061
+ font-size: var(--fs-h3);
75062
+ line-height: 1.2;
75063
+ }
75064
+ :where(.theme-scope) .text-body-size {
75065
+ font-size: var(--fs-body);
75066
+ }
74636
75067
 
74637
- /* Shade tokens (50..950) for primary */
74638
- :where(.theme-scope) .from-primary-50 {
74639
- --rb-gradient-from: rgb(var(--tb-primary-50)) var(--rb-gradient-from-position);
74640
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
74641
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74642
- }
74643
- :where(.theme-scope) .to-primary-50 {
74644
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
74645
- }
74646
- :where(.theme-scope) .from-primary-100 {
74647
- --rb-gradient-from: rgb(var(--tb-primary-100))
74648
- var(--rb-gradient-from-position);
74649
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
74650
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74651
- }
74652
- :where(.theme-scope) .to-primary-100 {
74653
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
74654
- }
74655
- :where(.theme-scope) .from-primary-200 {
74656
- --rb-gradient-from: rgb(var(--tb-primary-200))
74657
- var(--rb-gradient-from-position);
74658
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
74659
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74660
- }
74661
- :where(.theme-scope) .to-primary-200 {
74662
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
74663
- }
74664
- :where(.theme-scope) .from-primary-300 {
74665
- --rb-gradient-from: rgb(var(--tb-primary-300))
74666
- var(--rb-gradient-from-position);
74667
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
74668
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74669
- }
74670
- :where(.theme-scope) .to-primary-300 {
74671
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
74672
- }
74673
- :where(.theme-scope) .from-primary-400 {
74674
- --rb-gradient-from: rgb(var(--tb-primary-400))
74675
- var(--rb-gradient-from-position);
74676
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
74677
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74678
- }
74679
- :where(.theme-scope) .to-primary-400 {
74680
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
74681
- }
74682
- :where(.theme-scope) .from-primary-500 {
74683
- --rb-gradient-from: rgb(var(--tb-primary-500))
74684
- var(--rb-gradient-from-position);
74685
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
74686
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74687
- }
74688
- :where(.theme-scope) .to-primary-500 {
74689
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
74690
- }
74691
- :where(.theme-scope) .from-primary-600 {
74692
- --rb-gradient-from: rgb(var(--tb-primary-600))
74693
- var(--rb-gradient-from-position);
74694
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
74695
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74696
- }
74697
- :where(.theme-scope) .to-primary-600 {
74698
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
74699
- }
74700
- :where(.theme-scope) .from-primary-700 {
74701
- --rb-gradient-from: rgb(var(--tb-primary-700))
74702
- var(--rb-gradient-from-position);
74703
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
74704
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74705
- }
74706
- :where(.theme-scope) .to-primary-700 {
74707
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
74708
- }
74709
- :where(.theme-scope) .from-primary-800 {
74710
- --rb-gradient-from: rgb(var(--tb-primary-800))
74711
- var(--rb-gradient-from-position);
74712
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
74713
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74714
- }
74715
- :where(.theme-scope) .to-primary-800 {
74716
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
74717
- }
74718
- :where(.theme-scope) .from-primary-900 {
74719
- --rb-gradient-from: rgb(var(--tb-primary-900))
74720
- var(--rb-gradient-from-position);
74721
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
74722
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74723
- }
74724
- :where(.theme-scope) .to-primary-900 {
74725
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
74726
- }
74727
- :where(.theme-scope) .from-primary-950 {
74728
- --rb-gradient-from: rgb(var(--tb-primary-950))
74729
- var(--rb-gradient-from-position);
74730
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
74731
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74732
- }
74733
- :where(.theme-scope) .to-primary-950 {
74734
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
74735
- }
74736
-
74737
- /* Shade tokens (50..950) for secondary */
74738
- :where(.theme-scope) .from-secondary-50 {
74739
- --rb-gradient-from: rgb(var(--tb-secondary-50))
74740
- var(--rb-gradient-from-position);
74741
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
74742
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74743
- }
74744
- :where(.theme-scope) .to-secondary-50 {
74745
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
74746
- }
74747
- :where(.theme-scope) .from-secondary-100 {
74748
- --rb-gradient-from: rgb(var(--tb-secondary-100))
74749
- var(--rb-gradient-from-position);
74750
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
74751
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74752
- }
74753
- :where(.theme-scope) .to-secondary-100 {
74754
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
74755
- }
74756
- :where(.theme-scope) .from-secondary-200 {
74757
- --rb-gradient-from: rgb(var(--tb-secondary-200))
74758
- var(--rb-gradient-from-position);
74759
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
74760
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74761
- }
74762
- :where(.theme-scope) .to-secondary-200 {
74763
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
74764
- }
74765
- :where(.theme-scope) .from-secondary-300 {
74766
- --rb-gradient-from: rgb(var(--tb-secondary-300))
74767
- var(--rb-gradient-from-position);
74768
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
74769
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74770
- }
74771
- :where(.theme-scope) .to-secondary-300 {
74772
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
74773
- }
74774
- :where(.theme-scope) .from-secondary-400 {
74775
- --rb-gradient-from: rgb(var(--tb-secondary-400))
74776
- var(--rb-gradient-from-position);
74777
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
74778
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74779
- }
74780
- :where(.theme-scope) .to-secondary-400 {
74781
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
74782
- }
74783
- :where(.theme-scope) .from-secondary-500 {
74784
- --rb-gradient-from: rgb(var(--tb-secondary-500))
74785
- var(--rb-gradient-from-position);
74786
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
74787
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74788
- }
74789
- :where(.theme-scope) .to-secondary-500 {
74790
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
74791
- }
74792
- :where(.theme-scope) .from-secondary-600 {
74793
- --rb-gradient-from: rgb(var(--tb-secondary-600))
74794
- var(--rb-gradient-from-position);
74795
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
74796
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74797
- }
74798
- :where(.theme-scope) .to-secondary-600 {
74799
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
74800
- }
74801
- :where(.theme-scope) .from-secondary-700 {
74802
- --rb-gradient-from: rgb(var(--tb-secondary-700))
74803
- var(--rb-gradient-from-position);
74804
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
74805
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74806
- }
74807
- :where(.theme-scope) .to-secondary-700 {
74808
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
74809
- }
74810
- :where(.theme-scope) .from-secondary-800 {
74811
- --rb-gradient-from: rgb(var(--tb-secondary-800))
74812
- var(--rb-gradient-from-position);
74813
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
74814
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74815
- }
74816
- :where(.theme-scope) .to-secondary-800 {
74817
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
74818
- }
74819
- :where(.theme-scope) .from-secondary-900 {
74820
- --rb-gradient-from: rgb(var(--tb-secondary-900))
74821
- var(--rb-gradient-from-position);
74822
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
74823
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74824
- }
74825
- :where(.theme-scope) .to-secondary-900 {
74826
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
74827
- }
74828
- :where(.theme-scope) .from-secondary-950 {
74829
- --rb-gradient-from: rgb(var(--tb-secondary-950))
74830
- var(--rb-gradient-from-position);
74831
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
74832
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74833
- }
74834
- :where(.theme-scope) .to-secondary-950 {
74835
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
74836
- }
74837
-
74838
- /* Shade tokens (50..950) for accent */
74839
- :where(.theme-scope) .from-accent-50 {
74840
- --rb-gradient-from: rgb(var(--tb-accent-50)) var(--rb-gradient-from-position);
74841
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
74842
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74843
- }
74844
- :where(.theme-scope) .to-accent-50 {
74845
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
74846
- }
74847
- :where(.theme-scope) .from-accent-100 {
74848
- --rb-gradient-from: rgb(var(--tb-accent-100)) var(--rb-gradient-from-position);
74849
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
74850
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74851
- }
74852
- :where(.theme-scope) .to-accent-100 {
74853
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
74854
- }
74855
- :where(.theme-scope) .from-accent-200 {
74856
- --rb-gradient-from: rgb(var(--tb-accent-200)) var(--rb-gradient-from-position);
74857
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
74858
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74859
- }
74860
- :where(.theme-scope) .to-accent-200 {
74861
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
74862
- }
74863
- :where(.theme-scope) .from-accent-300 {
74864
- --rb-gradient-from: rgb(var(--tb-accent-300)) var(--rb-gradient-from-position);
74865
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
74866
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74867
- }
74868
- :where(.theme-scope) .to-accent-300 {
74869
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
74870
- }
74871
- :where(.theme-scope) .from-accent-400 {
74872
- --rb-gradient-from: rgb(var(--tb-accent-400)) var(--rb-gradient-from-position);
74873
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
74874
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74875
- }
74876
- :where(.theme-scope) .to-accent-400 {
74877
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
74878
- }
74879
- :where(.theme-scope) .from-accent-500 {
74880
- --rb-gradient-from: rgb(var(--tb-accent-500)) var(--rb-gradient-from-position);
74881
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
74882
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74883
- }
74884
- :where(.theme-scope) .to-accent-500 {
74885
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
74886
- }
74887
- :where(.theme-scope) .from-accent-600 {
74888
- --rb-gradient-from: rgb(var(--tb-accent-600)) var(--rb-gradient-from-position);
74889
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
74890
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74891
- }
74892
- :where(.theme-scope) .to-accent-600 {
74893
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
74894
- }
74895
- :where(.theme-scope) .from-accent-700 {
74896
- --rb-gradient-from: rgb(var(--tb-accent-700)) var(--rb-gradient-from-position);
74897
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
74898
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74899
- }
74900
- :where(.theme-scope) .to-accent-700 {
74901
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
74902
- }
74903
- :where(.theme-scope) .from-accent-800 {
74904
- --rb-gradient-from: rgb(var(--tb-accent-800)) var(--rb-gradient-from-position);
74905
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
74906
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74907
- }
74908
- :where(.theme-scope) .to-accent-800 {
74909
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
74910
- }
74911
- :where(.theme-scope) .from-accent-900 {
74912
- --rb-gradient-from: rgb(var(--tb-accent-900)) var(--rb-gradient-from-position);
74913
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
74914
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74915
- }
74916
- :where(.theme-scope) .to-accent-900 {
74917
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
74918
- }
74919
- :where(.theme-scope) .from-accent-950 {
74920
- --rb-gradient-from: rgb(var(--tb-accent-950)) var(--rb-gradient-from-position);
74921
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
74922
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74923
- }
74924
- :where(.theme-scope) .to-accent-950 {
74925
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
74926
- }
75068
+ :where(.theme-scope) .transition-theme {
75069
+ transition: all var(--motion-duration) var(--motion-ease);
75070
+ }
75071
+ :where(.theme-scope) .transition-theme-standard {
75072
+ transition: all var(--motion-duration) var(--motion-ease);
75073
+ }
75074
+ :where(.theme-scope) .transition-theme-subtle {
75075
+ transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
75076
+ }
75077
+ :where(.theme-scope) .transition-theme-expressive {
75078
+ transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
75079
+ }
74927
75080
 
74928
- /* Shade tokens (50..950) for neutral */
74929
- :where(.theme-scope) .from-neutral-50 {
74930
- --rb-gradient-from: rgb(var(--tb-neutral-50)) var(--rb-gradient-from-position);
74931
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
74932
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74933
- }
74934
- :where(.theme-scope) .to-neutral-50 {
74935
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
74936
- }
74937
- :where(.theme-scope) .from-neutral-100 {
74938
- --rb-gradient-from: rgb(var(--tb-neutral-100))
74939
- var(--rb-gradient-from-position);
74940
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
74941
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74942
- }
74943
- :where(.theme-scope) .to-neutral-100 {
74944
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
74945
- }
74946
- :where(.theme-scope) .from-neutral-200 {
74947
- --rb-gradient-from: rgb(var(--tb-neutral-200))
74948
- var(--rb-gradient-from-position);
74949
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
74950
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74951
- }
74952
- :where(.theme-scope) .to-neutral-200 {
74953
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
74954
- }
74955
- :where(.theme-scope) .from-neutral-300 {
74956
- --rb-gradient-from: rgb(var(--tb-neutral-300))
74957
- var(--rb-gradient-from-position);
74958
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
74959
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74960
- }
74961
- :where(.theme-scope) .to-neutral-300 {
74962
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
74963
- }
74964
- :where(.theme-scope) .from-neutral-400 {
74965
- --rb-gradient-from: rgb(var(--tb-neutral-400))
74966
- var(--rb-gradient-from-position);
74967
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
74968
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74969
- }
74970
- :where(.theme-scope) .to-neutral-400 {
74971
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
74972
- }
74973
- :where(.theme-scope) .from-neutral-500 {
74974
- --rb-gradient-from: rgb(var(--tb-neutral-500))
74975
- var(--rb-gradient-from-position);
74976
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
74977
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74978
- }
74979
- :where(.theme-scope) .to-neutral-500 {
74980
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
74981
- }
74982
- :where(.theme-scope) .from-neutral-600 {
74983
- --rb-gradient-from: rgb(var(--tb-neutral-600))
74984
- var(--rb-gradient-from-position);
74985
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
74986
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74987
- }
74988
- :where(.theme-scope) .to-neutral-600 {
74989
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
74990
- }
74991
- :where(.theme-scope) .from-neutral-700 {
74992
- --rb-gradient-from: rgb(var(--tb-neutral-700))
74993
- var(--rb-gradient-from-position);
74994
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
74995
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
74996
- }
74997
- :where(.theme-scope) .to-neutral-700 {
74998
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
74999
- }
75000
- :where(.theme-scope) .from-neutral-800 {
75001
- --rb-gradient-from: rgb(var(--tb-neutral-800))
75002
- var(--rb-gradient-from-position);
75003
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
75004
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75005
- }
75006
- :where(.theme-scope) .to-neutral-800 {
75007
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
75008
- }
75009
- :where(.theme-scope) .from-neutral-900 {
75010
- --rb-gradient-from: rgb(var(--tb-neutral-900))
75011
- var(--rb-gradient-from-position);
75012
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
75013
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75014
- }
75015
- :where(.theme-scope) .to-neutral-900 {
75016
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
75017
- }
75018
- :where(.theme-scope) .from-neutral-950 {
75019
- --rb-gradient-from: rgb(var(--tb-neutral-950))
75020
- var(--rb-gradient-from-position);
75021
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
75022
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75023
- }
75024
- :where(.theme-scope) .to-neutral-950 {
75025
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
75026
- }
75027
-
75028
- /* =================================================================
75081
+ /* Shade tokens (50..950) for primary */
75082
+ :where(.theme-scope) .from-primary-50 {
75083
+ --rb-gradient-from: rgb(var(--tb-primary-50))
75084
+ var(--rb-gradient-from-position);
75085
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
75086
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75087
+ }
75088
+ :where(.theme-scope) .to-primary-50 {
75089
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
75090
+ }
75091
+ :where(.theme-scope) .from-primary-100 {
75092
+ --rb-gradient-from: rgb(var(--tb-primary-100))
75093
+ var(--rb-gradient-from-position);
75094
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
75095
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75096
+ }
75097
+ :where(.theme-scope) .to-primary-100 {
75098
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
75099
+ }
75100
+ :where(.theme-scope) .from-primary-200 {
75101
+ --rb-gradient-from: rgb(var(--tb-primary-200))
75102
+ var(--rb-gradient-from-position);
75103
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
75104
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75105
+ }
75106
+ :where(.theme-scope) .to-primary-200 {
75107
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
75108
+ }
75109
+ :where(.theme-scope) .from-primary-300 {
75110
+ --rb-gradient-from: rgb(var(--tb-primary-300))
75111
+ var(--rb-gradient-from-position);
75112
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
75113
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75114
+ }
75115
+ :where(.theme-scope) .to-primary-300 {
75116
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
75117
+ }
75118
+ :where(.theme-scope) .from-primary-400 {
75119
+ --rb-gradient-from: rgb(var(--tb-primary-400))
75120
+ var(--rb-gradient-from-position);
75121
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
75122
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75123
+ }
75124
+ :where(.theme-scope) .to-primary-400 {
75125
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
75126
+ }
75127
+ :where(.theme-scope) .from-primary-500 {
75128
+ --rb-gradient-from: rgb(var(--tb-primary-500))
75129
+ var(--rb-gradient-from-position);
75130
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
75131
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75132
+ }
75133
+ :where(.theme-scope) .to-primary-500 {
75134
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
75135
+ }
75136
+ :where(.theme-scope) .from-primary-600 {
75137
+ --rb-gradient-from: rgb(var(--tb-primary-600))
75138
+ var(--rb-gradient-from-position);
75139
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
75140
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75141
+ }
75142
+ :where(.theme-scope) .to-primary-600 {
75143
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
75144
+ }
75145
+ :where(.theme-scope) .from-primary-700 {
75146
+ --rb-gradient-from: rgb(var(--tb-primary-700))
75147
+ var(--rb-gradient-from-position);
75148
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
75149
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75150
+ }
75151
+ :where(.theme-scope) .to-primary-700 {
75152
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
75153
+ }
75154
+ :where(.theme-scope) .from-primary-800 {
75155
+ --rb-gradient-from: rgb(var(--tb-primary-800))
75156
+ var(--rb-gradient-from-position);
75157
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
75158
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75159
+ }
75160
+ :where(.theme-scope) .to-primary-800 {
75161
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
75162
+ }
75163
+ :where(.theme-scope) .from-primary-900 {
75164
+ --rb-gradient-from: rgb(var(--tb-primary-900))
75165
+ var(--rb-gradient-from-position);
75166
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
75167
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75168
+ }
75169
+ :where(.theme-scope) .to-primary-900 {
75170
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
75171
+ }
75172
+ :where(.theme-scope) .from-primary-950 {
75173
+ --rb-gradient-from: rgb(var(--tb-primary-950))
75174
+ var(--rb-gradient-from-position);
75175
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
75176
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75177
+ }
75178
+ :where(.theme-scope) .to-primary-950 {
75179
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
75180
+ }
75181
+
75182
+ /* Shade tokens (50..950) for secondary */
75183
+ :where(.theme-scope) .from-secondary-50 {
75184
+ --rb-gradient-from: rgb(var(--tb-secondary-50))
75185
+ var(--rb-gradient-from-position);
75186
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
75187
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75188
+ }
75189
+ :where(.theme-scope) .to-secondary-50 {
75190
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
75191
+ }
75192
+ :where(.theme-scope) .from-secondary-100 {
75193
+ --rb-gradient-from: rgb(var(--tb-secondary-100))
75194
+ var(--rb-gradient-from-position);
75195
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
75196
+ var(--rb-gradient-to-position);
75197
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75198
+ }
75199
+ :where(.theme-scope) .to-secondary-100 {
75200
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
75201
+ var(--rb-gradient-to-position);
75202
+ }
75203
+ :where(.theme-scope) .from-secondary-200 {
75204
+ --rb-gradient-from: rgb(var(--tb-secondary-200))
75205
+ var(--rb-gradient-from-position);
75206
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
75207
+ var(--rb-gradient-to-position);
75208
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75209
+ }
75210
+ :where(.theme-scope) .to-secondary-200 {
75211
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
75212
+ var(--rb-gradient-to-position);
75213
+ }
75214
+ :where(.theme-scope) .from-secondary-300 {
75215
+ --rb-gradient-from: rgb(var(--tb-secondary-300))
75216
+ var(--rb-gradient-from-position);
75217
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
75218
+ var(--rb-gradient-to-position);
75219
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75220
+ }
75221
+ :where(.theme-scope) .to-secondary-300 {
75222
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
75223
+ var(--rb-gradient-to-position);
75224
+ }
75225
+ :where(.theme-scope) .from-secondary-400 {
75226
+ --rb-gradient-from: rgb(var(--tb-secondary-400))
75227
+ var(--rb-gradient-from-position);
75228
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
75229
+ var(--rb-gradient-to-position);
75230
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75231
+ }
75232
+ :where(.theme-scope) .to-secondary-400 {
75233
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
75234
+ var(--rb-gradient-to-position);
75235
+ }
75236
+ :where(.theme-scope) .from-secondary-500 {
75237
+ --rb-gradient-from: rgb(var(--tb-secondary-500))
75238
+ var(--rb-gradient-from-position);
75239
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
75240
+ var(--rb-gradient-to-position);
75241
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75242
+ }
75243
+ :where(.theme-scope) .to-secondary-500 {
75244
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
75245
+ var(--rb-gradient-to-position);
75246
+ }
75247
+ :where(.theme-scope) .from-secondary-600 {
75248
+ --rb-gradient-from: rgb(var(--tb-secondary-600))
75249
+ var(--rb-gradient-from-position);
75250
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
75251
+ var(--rb-gradient-to-position);
75252
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75253
+ }
75254
+ :where(.theme-scope) .to-secondary-600 {
75255
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
75256
+ var(--rb-gradient-to-position);
75257
+ }
75258
+ :where(.theme-scope) .from-secondary-700 {
75259
+ --rb-gradient-from: rgb(var(--tb-secondary-700))
75260
+ var(--rb-gradient-from-position);
75261
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
75262
+ var(--rb-gradient-to-position);
75263
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75264
+ }
75265
+ :where(.theme-scope) .to-secondary-700 {
75266
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
75267
+ var(--rb-gradient-to-position);
75268
+ }
75269
+ :where(.theme-scope) .from-secondary-800 {
75270
+ --rb-gradient-from: rgb(var(--tb-secondary-800))
75271
+ var(--rb-gradient-from-position);
75272
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
75273
+ var(--rb-gradient-to-position);
75274
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75275
+ }
75276
+ :where(.theme-scope) .to-secondary-800 {
75277
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
75278
+ var(--rb-gradient-to-position);
75279
+ }
75280
+ :where(.theme-scope) .from-secondary-900 {
75281
+ --rb-gradient-from: rgb(var(--tb-secondary-900))
75282
+ var(--rb-gradient-from-position);
75283
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
75284
+ var(--rb-gradient-to-position);
75285
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75286
+ }
75287
+ :where(.theme-scope) .to-secondary-900 {
75288
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
75289
+ var(--rb-gradient-to-position);
75290
+ }
75291
+ :where(.theme-scope) .from-secondary-950 {
75292
+ --rb-gradient-from: rgb(var(--tb-secondary-950))
75293
+ var(--rb-gradient-from-position);
75294
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
75295
+ var(--rb-gradient-to-position);
75296
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75297
+ }
75298
+ :where(.theme-scope) .to-secondary-950 {
75299
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
75300
+ var(--rb-gradient-to-position);
75301
+ }
75302
+
75303
+ /* Shade tokens (50..950) for accent */
75304
+ :where(.theme-scope) .from-accent-50 {
75305
+ --rb-gradient-from: rgb(var(--tb-accent-50))
75306
+ var(--rb-gradient-from-position);
75307
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
75308
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75309
+ }
75310
+ :where(.theme-scope) .to-accent-50 {
75311
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
75312
+ }
75313
+ :where(.theme-scope) .from-accent-100 {
75314
+ --rb-gradient-from: rgb(var(--tb-accent-100))
75315
+ var(--rb-gradient-from-position);
75316
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
75317
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75318
+ }
75319
+ :where(.theme-scope) .to-accent-100 {
75320
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
75321
+ }
75322
+ :where(.theme-scope) .from-accent-200 {
75323
+ --rb-gradient-from: rgb(var(--tb-accent-200))
75324
+ var(--rb-gradient-from-position);
75325
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
75326
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75327
+ }
75328
+ :where(.theme-scope) .to-accent-200 {
75329
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
75330
+ }
75331
+ :where(.theme-scope) .from-accent-300 {
75332
+ --rb-gradient-from: rgb(var(--tb-accent-300))
75333
+ var(--rb-gradient-from-position);
75334
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
75335
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75336
+ }
75337
+ :where(.theme-scope) .to-accent-300 {
75338
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
75339
+ }
75340
+ :where(.theme-scope) .from-accent-400 {
75341
+ --rb-gradient-from: rgb(var(--tb-accent-400))
75342
+ var(--rb-gradient-from-position);
75343
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
75344
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75345
+ }
75346
+ :where(.theme-scope) .to-accent-400 {
75347
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
75348
+ }
75349
+ :where(.theme-scope) .from-accent-500 {
75350
+ --rb-gradient-from: rgb(var(--tb-accent-500))
75351
+ var(--rb-gradient-from-position);
75352
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
75353
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75354
+ }
75355
+ :where(.theme-scope) .to-accent-500 {
75356
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
75357
+ }
75358
+ :where(.theme-scope) .from-accent-600 {
75359
+ --rb-gradient-from: rgb(var(--tb-accent-600))
75360
+ var(--rb-gradient-from-position);
75361
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
75362
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75363
+ }
75364
+ :where(.theme-scope) .to-accent-600 {
75365
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
75366
+ }
75367
+ :where(.theme-scope) .from-accent-700 {
75368
+ --rb-gradient-from: rgb(var(--tb-accent-700))
75369
+ var(--rb-gradient-from-position);
75370
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
75371
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75372
+ }
75373
+ :where(.theme-scope) .to-accent-700 {
75374
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
75375
+ }
75376
+ :where(.theme-scope) .from-accent-800 {
75377
+ --rb-gradient-from: rgb(var(--tb-accent-800))
75378
+ var(--rb-gradient-from-position);
75379
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
75380
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75381
+ }
75382
+ :where(.theme-scope) .to-accent-800 {
75383
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
75384
+ }
75385
+ :where(.theme-scope) .from-accent-900 {
75386
+ --rb-gradient-from: rgb(var(--tb-accent-900))
75387
+ var(--rb-gradient-from-position);
75388
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
75389
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75390
+ }
75391
+ :where(.theme-scope) .to-accent-900 {
75392
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
75393
+ }
75394
+ :where(.theme-scope) .from-accent-950 {
75395
+ --rb-gradient-from: rgb(var(--tb-accent-950))
75396
+ var(--rb-gradient-from-position);
75397
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
75398
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75399
+ }
75400
+ :where(.theme-scope) .to-accent-950 {
75401
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
75402
+ }
75403
+
75404
+ /* Shade tokens (50..950) for neutral */
75405
+ :where(.theme-scope) .from-neutral-50 {
75406
+ --rb-gradient-from: rgb(var(--tb-neutral-50))
75407
+ var(--rb-gradient-from-position);
75408
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
75409
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75410
+ }
75411
+ :where(.theme-scope) .to-neutral-50 {
75412
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
75413
+ }
75414
+ :where(.theme-scope) .from-neutral-100 {
75415
+ --rb-gradient-from: rgb(var(--tb-neutral-100))
75416
+ var(--rb-gradient-from-position);
75417
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
75418
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75419
+ }
75420
+ :where(.theme-scope) .to-neutral-100 {
75421
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
75422
+ }
75423
+ :where(.theme-scope) .from-neutral-200 {
75424
+ --rb-gradient-from: rgb(var(--tb-neutral-200))
75425
+ var(--rb-gradient-from-position);
75426
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
75427
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75428
+ }
75429
+ :where(.theme-scope) .to-neutral-200 {
75430
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
75431
+ }
75432
+ :where(.theme-scope) .from-neutral-300 {
75433
+ --rb-gradient-from: rgb(var(--tb-neutral-300))
75434
+ var(--rb-gradient-from-position);
75435
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
75436
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75437
+ }
75438
+ :where(.theme-scope) .to-neutral-300 {
75439
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
75440
+ }
75441
+ :where(.theme-scope) .from-neutral-400 {
75442
+ --rb-gradient-from: rgb(var(--tb-neutral-400))
75443
+ var(--rb-gradient-from-position);
75444
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
75445
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75446
+ }
75447
+ :where(.theme-scope) .to-neutral-400 {
75448
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
75449
+ }
75450
+ :where(.theme-scope) .from-neutral-500 {
75451
+ --rb-gradient-from: rgb(var(--tb-neutral-500))
75452
+ var(--rb-gradient-from-position);
75453
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
75454
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75455
+ }
75456
+ :where(.theme-scope) .to-neutral-500 {
75457
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
75458
+ }
75459
+ :where(.theme-scope) .from-neutral-600 {
75460
+ --rb-gradient-from: rgb(var(--tb-neutral-600))
75461
+ var(--rb-gradient-from-position);
75462
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
75463
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75464
+ }
75465
+ :where(.theme-scope) .to-neutral-600 {
75466
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
75467
+ }
75468
+ :where(.theme-scope) .from-neutral-700 {
75469
+ --rb-gradient-from: rgb(var(--tb-neutral-700))
75470
+ var(--rb-gradient-from-position);
75471
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
75472
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75473
+ }
75474
+ :where(.theme-scope) .to-neutral-700 {
75475
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
75476
+ }
75477
+ :where(.theme-scope) .from-neutral-800 {
75478
+ --rb-gradient-from: rgb(var(--tb-neutral-800))
75479
+ var(--rb-gradient-from-position);
75480
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
75481
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75482
+ }
75483
+ :where(.theme-scope) .to-neutral-800 {
75484
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
75485
+ }
75486
+ :where(.theme-scope) .from-neutral-900 {
75487
+ --rb-gradient-from: rgb(var(--tb-neutral-900))
75488
+ var(--rb-gradient-from-position);
75489
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
75490
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75491
+ }
75492
+ :where(.theme-scope) .to-neutral-900 {
75493
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
75494
+ }
75495
+ :where(.theme-scope) .from-neutral-950 {
75496
+ --rb-gradient-from: rgb(var(--tb-neutral-950))
75497
+ var(--rb-gradient-from-position);
75498
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
75499
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
75500
+ }
75501
+ :where(.theme-scope) .to-neutral-950 {
75502
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
75503
+ }
75504
+
75505
+ /* =================================================================
75029
75506
  Header System Class Naming Conventions
75030
75507
 
75031
75508
  rb-header-* Utility-style classes set in site-header.ts layouts
@@ -75038,240 +75515,240 @@ var containerResponsiveThemeCss = `/*
75038
75515
  (nav-dropdown, nav-mobile-panel, nav-underline-grow)
75039
75516
  ================================================================= */
75040
75517
 
75041
- /* =================================================================
75518
+ /* =================================================================
75042
75519
  Header Layout Padding
75043
75520
 
75044
75521
  Padding is controlled entirely by CSS based on variant class.
75045
75522
  This ensures shrink headers look identical to non-shrink before scroll.
75046
75523
  ================================================================= */
75047
75524
 
75048
- /* Prevent scroll anchoring feedback loops when the header height transitions.
75525
+ /* Prevent scroll anchoring feedback loops when the header height transitions.
75049
75526
  In some browsers, resizing a sticky header near the top can cause the UA to
75050
75527
  adjust scroll position ("scroll anchoring"), which then flips the
75051
75528
  \`header-scrolled\` threshold logic back and forth. */
75052
- :where(.theme-scope) .block-site-header {
75053
- overflow-anchor: none;
75054
- }
75529
+ :where(.theme-scope) .block-site-header {
75530
+ overflow-anchor: none;
75531
+ }
75055
75532
 
75056
- /* Base padding for horizontal variants (classic, transparent) */
75057
- :where(.theme-scope) .rb-header-layout {
75058
- padding-top: 1rem;
75059
- padding-bottom: 1rem;
75060
- transition: padding 300ms var(--motion-ease, ease);
75061
- }
75533
+ /* Base padding for horizontal variants (classic, transparent) */
75534
+ :where(.theme-scope) .rb-header-layout {
75535
+ padding-top: 1rem;
75536
+ padding-bottom: 1rem;
75537
+ transition: padding 300ms var(--motion-ease, ease);
75538
+ }
75062
75539
 
75063
- /* Vertical variants need more breathing room
75540
+ /* Vertical variants need more breathing room
75064
75541
  Note: header-variant-* is on Section (ancestor), rb-header-layout on inner div */
75065
- :where(.theme-scope) .header-variant-centered .rb-header-layout,
75066
- :where(.theme-scope) .header-variant-editorial .rb-header-layout {
75067
- padding-top: 1.5rem;
75068
- padding-bottom: 1.5rem;
75069
- }
75542
+ :where(.theme-scope) .header-variant-centered .rb-header-layout {
75543
+ padding-top: 1.5rem;
75544
+ padding-bottom: 1.5rem;
75545
+ }
75070
75546
 
75071
- /* Floating variant - compact padding */
75072
- :where(.theme-scope) .header-variant-floating .rb-header-layout {
75073
- padding-top: 0.75rem;
75074
- padding-bottom: 0.75rem;
75075
- }
75547
+ /* Floating variant - compact padding */
75548
+ :where(.theme-scope) .header-variant-floating .rb-header-layout {
75549
+ padding-top: 0.75rem;
75550
+ padding-bottom: 0.75rem;
75551
+ }
75076
75552
 
75077
- /* =================================================================
75553
+ /* =================================================================
75078
75554
  Header Shrink-on-Scroll
75079
75555
 
75080
75556
  Only applies when .rb-header-shrink is present AND user has scrolled.
75081
75557
  No changes until scroll - shrink header = non-shrink header initially.
75082
75558
  ================================================================= */
75083
75559
 
75084
- /* Scrolled state - reduce padding */
75085
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
75086
- padding-top: 0.5rem;
75087
- padding-bottom: 0.5rem;
75088
- }
75560
+ /* Scrolled state - reduce padding */
75561
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
75562
+ padding-top: 0.5rem;
75563
+ padding-bottom: 0.5rem;
75564
+ }
75089
75565
 
75090
- /* Vertical variants get gentler reduction
75566
+ /* Vertical variants get gentler reduction
75091
75567
  Note: Both classes are on Section, rb-header-layout on inner div */
75092
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-centered .rb-header-layout,
75093
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-editorial .rb-header-layout {
75094
- padding-top: 0.75rem;
75095
- padding-bottom: 0.75rem;
75096
- }
75568
+ :where(.theme-scope)
75569
+ .rb-header-shrink.header-scrolled.header-variant-centered
75570
+ .rb-header-layout {
75571
+ padding-top: 0.75rem;
75572
+ padding-bottom: 0.75rem;
75573
+ }
75097
75574
 
75098
- /* Floating variant */
75099
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-floating .rb-header-layout {
75100
- padding-top: 0.25rem;
75101
- padding-bottom: 0.25rem;
75102
- }
75575
+ /* Floating variant */
75576
+ :where(.theme-scope)
75577
+ .rb-header-shrink.header-scrolled.header-variant-floating
75578
+ .rb-header-layout {
75579
+ padding-top: 0.25rem;
75580
+ padding-bottom: 0.25rem;
75581
+ }
75103
75582
 
75104
- /* =================================================================
75583
+ /* =================================================================
75105
75584
  Logo & Title Sizing
75106
75585
 
75107
75586
  Font sizes controlled here, not via utility classes, so shrink
75108
75587
  transitions work (utility classes would override :where()).
75109
75588
  ================================================================= */
75110
75589
 
75111
- /* Logo image sizing */
75112
- :where(.theme-scope) .rb-header-logo-sm {
75113
- height: 2.5rem;
75114
- transition: height 300ms var(--motion-ease, ease);
75115
- }
75116
- :where(.theme-scope) .rb-header-logo-lg {
75117
- height: 3rem;
75118
- transition: height 300ms var(--motion-ease, ease);
75119
- }
75590
+ /* Logo image sizing */
75591
+ :where(.theme-scope) .rb-header-logo-sm {
75592
+ height: 2.5rem;
75593
+ transition: height 300ms var(--motion-ease, ease);
75594
+ }
75595
+ :where(.theme-scope) .rb-header-logo-lg {
75596
+ height: 3rem;
75597
+ transition: height 300ms var(--motion-ease, ease);
75598
+ }
75120
75599
 
75121
- /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
75122
- :where(.theme-scope) .header-logo-text {
75123
- font-size: 1.125rem; /* matches rb-text-lg */
75124
- line-height: 1.75rem;
75125
- transition: font-size 300ms var(--motion-ease, ease);
75126
- }
75600
+ /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
75601
+ :where(.theme-scope) .header-logo-text {
75602
+ font-size: 1.125rem; /* matches rb-text-lg */
75603
+ line-height: 1.75rem;
75604
+ transition: font-size 300ms var(--motion-ease, ease);
75605
+ }
75127
75606
 
75128
- /* Mobile: reduce site title size (~30%) to keep header compact */
75129
- @container rb-site (max-width: 767px) {
75607
+ /* Mobile: reduce site title size (~30%) to keep header compact */
75608
+ @container rb-site (max-width: 767px) {
75130
75609
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
75131
75610
  :where(.theme-scope) .header-logo-text {
75132
- font-size: 0.8rem;
75133
- line-height: 1.25rem;
75134
- }
75611
+ font-size: 0.8rem;
75612
+ line-height: 1.25rem;
75613
+ }
75135
75614
 
75136
- :where(.theme-scope) .header-variant-centered .header-logo-text,
75137
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
75138
- font-size: 0.875rem;
75139
- line-height: 1.25rem;
75140
- }
75615
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
75616
+ font-size: 0.875rem;
75617
+ line-height: 1.25rem;
75618
+ }
75141
75619
  }
75142
75620
  }
75143
75621
 
75144
- /* Centered/editorial variants use larger title */
75145
- :where(.theme-scope) .header-variant-centered .header-logo-text,
75146
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
75147
- font-size: 1.25rem; /* matches rb-text-xl */
75148
- line-height: 1.75rem;
75149
- }
75622
+ /* Centered variant uses larger title */
75623
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
75624
+ font-size: 1.25rem; /* matches rb-text-xl */
75625
+ line-height: 1.75rem;
75626
+ }
75150
75627
 
75151
- /* =================================================================
75628
+ /* =================================================================
75152
75629
  Shrink on Scroll - Logo & Title
75153
75630
  ================================================================= */
75154
75631
 
75155
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
75156
- height: 2rem;
75157
- }
75158
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
75159
- height: 2.5rem;
75160
- }
75161
- :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
75162
- font-size: 0.875rem;
75163
- }
75632
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
75633
+ height: 2rem;
75634
+ }
75635
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
75636
+ height: 2.5rem;
75637
+ }
75638
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
75639
+ font-size: 0.875rem;
75640
+ }
75164
75641
 
75165
- @container rb-site (max-width: 767px) {
75642
+ @container rb-site (max-width: 767px) {
75166
75643
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
75167
75644
  :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
75168
- font-size: 0.75rem;
75169
- }
75645
+ font-size: 0.75rem;
75646
+ }
75170
75647
  }
75171
75648
  }
75172
75649
 
75173
- /* =================================================================
75650
+ /* =================================================================
75174
75651
  Accessibility: Reduced Motion
75175
75652
  ================================================================= */
75176
75653
 
75177
- @media (prefers-reduced-motion: reduce) {
75178
- :where(.theme-scope) .rb-header-layout,
75179
- :where(.theme-scope) .rb-header-logo-sm,
75180
- :where(.theme-scope) .rb-header-logo-lg,
75181
- :where(.theme-scope) .header-logo-text {
75182
- transition: none;
75654
+ @media (prefers-reduced-motion: reduce) {
75655
+ :where(.theme-scope) .rb-header-layout,
75656
+ :where(.theme-scope) .rb-header-logo-sm,
75657
+ :where(.theme-scope) .rb-header-logo-lg,
75658
+ :where(.theme-scope) .header-logo-text {
75659
+ transition: none;
75660
+ }
75183
75661
  }
75184
- }
75185
75662
 
75186
- /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
75187
- :where(.theme-scope) .nav-underline-grow {
75188
- position: relative;
75189
- overflow: visible;
75190
- }
75191
- :where(.theme-scope) .nav-underline-grow::after {
75192
- content: "";
75193
- position: absolute;
75194
- left: 0;
75195
- bottom: var(--nav-underline-offset, -0.35em);
75196
- width: 100%;
75197
- height: 2px;
75198
- background-color: currentColor;
75199
- transform: scaleX(0);
75200
- transform-origin: left center;
75201
- transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
75202
- }
75203
- :where(.theme-scope) .nav-underline-grow:hover::after,
75204
- :where(.theme-scope)
75205
- .nav-underline-grow.nav-underline-active[data-active="true"]::after {
75206
- transform: scaleX(1);
75207
- }
75208
- :where(.theme-scope) .nav-underline-offset-tight {
75209
- --nav-underline-offset: -0.2em;
75210
- }
75211
- :where(.theme-scope) .nav-underline-offset-normal {
75212
- --nav-underline-offset: -0.3em;
75213
- }
75214
- :where(.theme-scope) .nav-underline-offset-loose {
75215
- --nav-underline-offset: -0.45em;
75216
- }
75663
+ /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
75664
+ :where(.theme-scope) .nav-underline-grow {
75665
+ position: relative;
75666
+ overflow: visible;
75667
+ }
75668
+ :where(.theme-scope) .nav-underline-grow::after {
75669
+ content: '';
75670
+ position: absolute;
75671
+ left: 0;
75672
+ bottom: var(--nav-underline-offset, -0.35em);
75673
+ width: 100%;
75674
+ height: 2px;
75675
+ background-color: currentColor;
75676
+ transform: scaleX(0);
75677
+ transform-origin: left center;
75678
+ transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
75679
+ }
75680
+ :where(.theme-scope) .nav-underline-grow:hover::after,
75681
+ :where(.theme-scope)
75682
+ .nav-underline-grow.nav-underline-active[data-active='true']::after {
75683
+ transform: scaleX(1);
75684
+ }
75685
+ :where(.theme-scope) .nav-underline-offset-tight {
75686
+ --nav-underline-offset: -0.2em;
75687
+ }
75688
+ :where(.theme-scope) .nav-underline-offset-normal {
75689
+ --nav-underline-offset: -0.3em;
75690
+ }
75691
+ :where(.theme-scope) .nav-underline-offset-loose {
75692
+ --nav-underline-offset: -0.45em;
75693
+ }
75217
75694
 
75218
- :where(.theme-scope) .card-surface {
75219
- background: rgb(var(--tb-surface));
75220
- color: rgb(var(--tb-onSurface, var(--tb-text)));
75221
- border: 1px solid rgb(var(--tb-border));
75222
- border-radius: var(--radius-card);
75223
- box-shadow: var(--shadow-elev);
75224
- }
75225
- :where(.theme-scope) .media-rounded {
75226
- border-radius: var(--radius-card);
75227
- }
75695
+ :where(.theme-scope) .card-surface {
75696
+ background: rgb(var(--tb-surface));
75697
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
75698
+ border: 1px solid rgb(var(--tb-border));
75699
+ border-radius: var(--radius-card);
75700
+ box-shadow: var(--shadow-elev);
75701
+ }
75702
+ :where(.theme-scope) .media-rounded {
75703
+ border-radius: var(--radius-card);
75704
+ }
75228
75705
 
75229
- :where(.theme-scope) .is-placeholder::after {
75230
- content: "Placeholder";
75231
- position: absolute;
75232
- top: 0.5rem;
75233
- left: 0.5rem;
75234
- font-size: 11px;
75235
- background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
75236
- color: rgb(var(--tb-text));
75237
- padding: 0.15rem 0.35rem;
75238
- border-radius: 4px;
75239
- opacity: 0.85;
75240
- }
75706
+ :where(.theme-scope) .is-placeholder::after {
75707
+ content: 'Placeholder';
75708
+ position: absolute;
75709
+ top: 0.5rem;
75710
+ left: 0.5rem;
75711
+ font-size: 11px;
75712
+ background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
75713
+ color: rgb(var(--tb-text));
75714
+ padding: 0.15rem 0.35rem;
75715
+ border-radius: 4px;
75716
+ opacity: 0.85;
75717
+ }
75241
75718
 
75242
- /* Status badges - theme-aware styling for capacity indicators */
75243
- :where(.theme-scope) .badge-status {
75244
- display: inline-flex;
75245
- align-items: center;
75246
- padding: 0.125rem 0.625rem;
75247
- border-radius: 9999px;
75248
- font-size: 0.75rem;
75249
- font-weight: 500;
75250
- line-height: 1.25rem;
75251
- }
75719
+ /* Status badges - theme-aware styling for capacity indicators */
75720
+ :where(.theme-scope) .badge-status {
75721
+ display: inline-flex;
75722
+ align-items: center;
75723
+ padding: 0.125rem 0.625rem;
75724
+ border-radius: 9999px;
75725
+ font-size: 0.75rem;
75726
+ font-weight: 500;
75727
+ line-height: 1.25rem;
75728
+ }
75252
75729
 
75253
- /* All badges use a subtle theme-aware style by default */
75254
- :where(.theme-scope) .badge-status-available {
75255
- background-color: rgba(var(--tb-secondary), 0.15);
75256
- color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
75257
- }
75730
+ /* All badges use a subtle theme-aware style by default */
75731
+ :where(.theme-scope) .badge-status-available {
75732
+ background-color: rgba(var(--tb-secondary), 0.15);
75733
+ color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
75734
+ }
75258
75735
 
75259
- :where(.theme-scope) .badge-status-low {
75260
- background-color: rgba(var(--tb-accent), 0.15);
75261
- color: rgb(var(--tb-accent-700, var(--tb-accent)));
75262
- }
75736
+ :where(.theme-scope) .badge-status-low {
75737
+ background-color: rgba(var(--tb-accent), 0.15);
75738
+ color: rgb(var(--tb-accent-700, var(--tb-accent)));
75739
+ }
75263
75740
 
75264
- :where(.theme-scope) .badge-status-sold-out {
75265
- background-color: rgba(var(--tb-text), 0.1);
75266
- color: rgb(var(--tb-mutedText));
75267
- }
75741
+ :where(.theme-scope) .badge-status-sold-out {
75742
+ background-color: rgba(var(--tb-text), 0.1);
75743
+ color: rgb(var(--tb-mutedText));
75744
+ }
75268
75745
 
75269
- /* Event list empty state - theme-aware */
75270
- :where(.theme-scope) .event-list-empty {
75271
- background-color: rgb(var(--tb-surface));
75272
- color: rgb(var(--tb-onSurface, var(--tb-text)));
75273
- border-color: rgb(var(--tb-border));
75274
- }
75746
+ /* Event list empty state - theme-aware */
75747
+ :where(.theme-scope) .event-list-empty {
75748
+ background-color: rgb(var(--tb-surface));
75749
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
75750
+ border-color: rgb(var(--tb-border));
75751
+ }
75275
75752
  } /* end @layer rb-theme */
75276
75753
 
75277
75754
  @keyframes accordion-down {
@@ -167767,4 +168244,4 @@ lucide-react/dist/esm/lucide-react.js:
167767
168244
  *)
167768
168245
  */
167769
168246
 
167770
- export { ArrowDown, ArrowUp, BackgroundColorField, BackgroundGradientField, Badge2 as Badge, BlockApiProvider, Box, Button, CSS2 as CSS, CTA_ICON_OPTIONS, Callout, CalloutDescription, CalloutTitle, Card, CardContent, CardHeader, CardTitle, Check, ChevronDown, ChevronLeft, ChevronRight, Collapsible2 as Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ColorPicker, Combobox, Content, ContentFieldsForm, Copy, DEFAULT_LAUNCH_READINESS_INPUT, Dialog2 as Dialog, DialogClose2 as DialogClose, DialogContent2 as DialogContent, DialogDescription2 as DialogDescription, DialogFooter, DialogHeader, DialogTitle2 as DialogTitle, DndContext, DropdownMenu2 as DropdownMenu, DropdownMenuContent2 as DropdownMenuContent, DropdownMenuItem2 as DropdownMenuItem, DropdownMenuLabel2 as DropdownMenuLabel, DropdownMenuSeparator2 as DropdownMenuSeparator, DropdownMenuTrigger2 as DropdownMenuTrigger, EMPTY_DOC, EditableBlockProvider, EditorChrome, EditorProvider, EllipsisVertical, EmptyState2 as EmptyState, EntryControllerProvider, FieldFrame, FixedBottomSurface, FormRenderer, GripVertical, Input, KeyboardCode, Label4 as Label, List2 as List, LoaderCircle, ManifestForm, Maximize2, MediaEditor, MediaEditorProvider, MediaPickerDialog, MediaPickerMini, Monitor, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, PUBLIC_FILE_FIELD_KINDS, PageRenderer, Palette, PaletteProvider, Pencil, Plus, PointerSensor, PreviewRichTextEditor, PreviewTextEditor, ResizableSplitPane, RichText2 as RichText, RichTextEditorSurface, Root2, RotateCcw, SUBROUTE_KINDS, ScrollableDialogContent, Search, Select2 as Select, SelectContent2 as SelectContent, SelectItem2 as SelectItem, SelectTrigger2 as SelectTrigger, SelectValue2 as SelectValue, Separator2 as Separator, Settings, SiteDocumentLayout, Smartphone, Sparkles, Surface, Tablet, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Text2 as Text, ThemeScope, Trash2, TriangleAlert, Trigger, X, applyCompiledRuntimeFieldsToContent, applyPageDesignEditorAction, asDesignBlockId, asEditorBlockId, asEditorBlockValues, asRecord, asSiteId, assertNever3 as assertNever, assertNever5 as assertNever2, augmentManifestWithStyleGroups, buildEditorModelRuntimeFieldsByBlockId, buildThemeRuntime, buttonPersonalities, canRedoHistory, canUndoHistory, classifyHistoryShortcut, clientComponentRegistry, closestCenter, cn, compileSiteThemeFromSelections, createBlock, createCustomBlockRegistry, createEditorInsertBlockCommand, createEditorRemoveBlockCommand, createEditorReorderBlocksCommand, createHistoryState, createManifestFormAdapter, createManifestValidation, createRoutingHelpers, createSnapshotFromPageRecord, createStoreBackend, curatedSiteStyles, deleteBlock, deriveLaunchReadiness, deriveNearestCompatibleHeaderStyle, evaluateTypographyFontSlot, findButtonPersonality, findFooterLook, findLegacyHeaderLookIdForSelection, findPaletteVariant, findTypographyPreset, foldSubroute, footerLookCatalog, footerLookRejectionReasonLabel, getBlockDefinition, getClientRect, getCompatibleHeaderStyleIds, getCtaIconComponent, getCuratedSiteStyle, getDirectImageUrlForMediaAsset, getFieldIntent, getHeaderLayout, getHeaderStyle, getModalConfig, getPageDesignEditorState, getRichTextImagePositionFromTarget, getRouteMetadataManifestForType, headerLayoutCatalog, headerStyleCatalog, insertOrReplaceRichTextImage, isCtaIconName, isHeaderField, isInternalResolvedLinkValue, isKeyboardEvent, isNonEmptyValue, isObjectRecord2 as isObjectRecord, isSvgMimeType, isThemeV2NormalEditorRawStyleFieldName, isThemeV2NormalEditorRawStylePath, listBlockDescriptors, listContentTypes, lucide_react_exports, mergeBlockDescriptorsWithRegistry, mergeManifestWithSdkOptions, mutateBlockContent, normalEditorCuratedPromotedFieldPaths, normalizePickerSearchThreshold, omitRouteTitleFieldFromManifest, paletteOverridesSchema, paletteVariants, parseAspectRatioValue, planPageDesignLayoutLookCompatibility, planSiteDocument, previewAssistantEnabled, pushHistoryEntry, recoveryConflictCopy, redoHistory, renderBlock, reorderBlocks, requireEntriesForCuratedChoices, resolveBlockTitle, resolveImageUrlWithContext, resolveMediaSlotContract, resolvePickerSelectionLabel, resolvePreviewSidebarTab, resolveVisiblePromotedFieldPathsForEditorBlock, shouldShowPickerSearch, siteFooterManifest, siteHeaderManifest, siteStyleIdFromTheme, surfaceResolutionContextFromTheme, systemCustomizeFacetAppliesToLayoutVariant, systemCustomizeFacetApplyContentPatch, systemCustomizeFacetCurrentValue, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetDefinitionsForBlock, systemCustomizeFacetLabelForValue, systemCustomizeFacetNextValue, systemCustomizeFacetRollbackContentPatch, toRoutableLinkPayload, typographyPresets, undoHistory, unfinishedBlockCopy, unwrapResponse, useAsyncPickerOptions, useBackendWatch, useBlockContext, useCombinedRefs, useDebouncedLatestSave, useDndContext, useDraggable, useDroppable, useEditor2 as useEditor, useEditorUiStore, useEditorUiStoreInstance, useEntryController, useEntryEditorController, useField, useIsomorphicLayoutEffect3 as useIsomorphicLayoutEffect, useMediaEditor, useMediaEditorOptional, useMultiAutosave, useOptionalEditorUiStoreInstance, useRichTextEditor, useSdkConfig, useSensor, useSensors, useUISelector, useUniqueId, validateBlockManifestIssues, writePlanForLookCustomizationCommand };
168247
+ export { ArrowDown, ArrowUp, BackgroundColorField, BackgroundGradientField, Badge2 as Badge, BlockApiProvider, Box, Button, CSS2 as CSS, CTA_ICON_OPTIONS, Callout, CalloutDescription, CalloutTitle, Card, CardContent, CardHeader, CardTitle, Check, ChevronDown, ChevronLeft, ChevronRight, Collapsible2 as Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ColorPicker, Combobox, Content, ContentFieldsForm, Copy, DEFAULT_LAUNCH_READINESS_INPUT, Dialog2 as Dialog, DialogClose2 as DialogClose, DialogContent2 as DialogContent, DialogDescription2 as DialogDescription, DialogFooter, DialogHeader, DialogTitle2 as DialogTitle, DndContext, DropdownMenu2 as DropdownMenu, DropdownMenuContent2 as DropdownMenuContent, DropdownMenuItem2 as DropdownMenuItem, DropdownMenuLabel2 as DropdownMenuLabel, DropdownMenuSeparator2 as DropdownMenuSeparator, DropdownMenuTrigger2 as DropdownMenuTrigger, EMPTY_DOC, EditableBlockProvider, EditorChrome, EditorProvider, EllipsisVertical, EmptyState2 as EmptyState, EntryControllerProvider, FieldFrame, FixedBottomSurface, FormRenderer, GripVertical, Input, KeyboardCode, Label4 as Label, List2 as List, LoaderCircle, ManifestForm, Maximize2, MediaEditor, MediaEditorProvider, MediaPickerDialog, MediaPickerMini, Monitor, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, PUBLIC_FILE_FIELD_KINDS, PageRenderer, Palette, PaletteProvider, Pencil, Plus, PointerSensor, PreviewRichTextEditor, PreviewTextEditor, ResizableSplitPane, RichText2 as RichText, RichTextEditorSurface, Root2, RotateCcw, SUBROUTE_KINDS, ScrollableDialogContent, Search, Select2 as Select, SelectContent2 as SelectContent, SelectItem2 as SelectItem, SelectTrigger2 as SelectTrigger, SelectValue2 as SelectValue, Separator2 as Separator, Settings, SiteDocumentLayout, Smartphone, Sparkles, Surface, Tablet, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Text2 as Text, ThemeScope, Trash2, TriangleAlert, Trigger, X, applyCompiledRuntimeFieldsToContent, applyPageDesignEditorAction, asDesignBlockId, asEditorBlockId, asEditorBlockValues, asRecord, asSiteId, assertNever3 as assertNever, assertNever5 as assertNever2, augmentManifestWithStyleGroups, buildEditorModelRuntimeFieldsByBlockId, buildThemeRuntime, buttonPersonalities, canRedoHistory, canUndoHistory, classifyHistoryShortcut, clientComponentRegistry, closestCenter, cn, compileSiteThemeFromSelections, createBlock, createCustomBlockRegistry, createEditorInsertBlockCommand, createEditorRemoveBlockCommand, createEditorReorderBlocksCommand, createHistoryState, createManifestFormAdapter, createManifestValidation, createRoutingHelpers, createSnapshotFromPageRecord, createStoreBackend, curatedSiteStyles, deleteBlock, deriveLaunchReadiness, deriveNearestCompatibleHeaderStyle, evaluateTypographyFontSlot, findButtonPersonality, findFooterLook, findLegacyHeaderLookIdForSelection, findPaletteVariant, findTypographyPreset, foldSubroute, footerLookCatalog, footerLookRejectionReasonLabel, getBlockDefinition, getClientRect, getCtaIconComponent, getCuratedSiteStyle, getDirectImageUrlForMediaAsset, getFieldIntent, getHeaderLayout, getHeaderStyle, getModalConfig, getOrderedHeaderLayoutIdsForCuration, getOrderedHeaderStyleIdsForLayout, getPageDesignEditorState, getRichTextImagePositionFromTarget, getRouteMetadataManifestForType, insertOrReplaceRichTextImage, isCtaIconName, isHeaderField, isInternalResolvedLinkValue, isKeyboardEvent, isNonEmptyValue, isObjectRecord2 as isObjectRecord, isSvgMimeType, isThemeV2NormalEditorRawStyleFieldName, isThemeV2NormalEditorRawStylePath, listBlockDescriptors, listContentTypes, lucide_react_exports, mergeBlockDescriptorsWithRegistry, mergeManifestWithSdkOptions, mutateBlockContent, normalEditorCuratedPromotedFieldPaths, normalizePickerSearchThreshold, omitRouteTitleFieldFromManifest, paletteOverridesSchema, paletteVariants, parseAspectRatioValue, planPageDesignLayoutLookCompatibility, planSiteDocument, previewAssistantEnabled, pushHistoryEntry, recoveryConflictCopy, redoHistory, renderBlock, reorderBlocks, requireEntriesForCuratedChoices, resolveBlockTitle, resolveImageUrlWithContext, resolveMediaSlotContract, resolvePickerSelectionLabel, resolvePreviewSidebarTab, resolveVisiblePromotedFieldPathsForEditorBlock, shouldShowPickerSearch, siteFooterManifest, siteHeaderManifest, siteStyleIdFromTheme, surfaceResolutionContextFromTheme, systemCustomizeFacetAppliesToLayoutVariant, systemCustomizeFacetApplyContentPatch, systemCustomizeFacetCurrentValue, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetDefinitionsForBlock, systemCustomizeFacetLabelForValue, systemCustomizeFacetNextValue, systemCustomizeFacetRollbackContentPatch, toRoutableLinkPayload, typographyPresets, undoHistory, unfinishedBlockCopy, unwrapResponse, useAsyncPickerOptions, useBackendWatch, useBlockContext, useCombinedRefs, useDebouncedLatestSave, useDndContext, useDraggable, useDroppable, useEditor2 as useEditor, useEditorUiStore, useEditorUiStoreInstance, useEntryController, useEntryEditorController, useField, useIsomorphicLayoutEffect3 as useIsomorphicLayoutEffect, useMediaEditor, useMediaEditorOptional, useMultiAutosave, useOptionalEditorUiStoreInstance, useRichTextEditor, useSdkConfig, useSensor, useSensors, useUISelector, useUniqueId, validateBlockManifestIssues, writePlanForLookCustomizationCommand };