@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
@@ -632,6 +632,16 @@ var init_business_address = __esm({
632
632
  }
633
633
  });
634
634
 
635
+ // ../core/src/assert-never.ts
636
+ function assertNever3(value, message = "Unexpected variant") {
637
+ throw new Error(`${message}: ${String(value)}`);
638
+ }
639
+ var init_assert_never = __esm({
640
+ "../core/src/assert-never.ts"() {
641
+ "use strict";
642
+ }
643
+ });
644
+
635
645
  // ../core/src/narrow-result.ts
636
646
  var init_narrow_result = __esm({
637
647
  "../core/src/narrow-result.ts"() {
@@ -722,6 +732,7 @@ var init_src = __esm({
722
732
  init_location();
723
733
  init_business_address();
724
734
  init_result();
735
+ init_assert_never();
725
736
  init_narrow_result();
726
737
  init_non_empty_array();
727
738
  init_editor_state();
@@ -7977,8 +7988,19 @@ var init_schema2 = __esm({
7977
7988
  colorToken: themeColorTokenSchema.nullable().optional()
7978
7989
  });
7979
7990
  proseLinkUnderlineStyleSchema = z23.enum(["solid", "dotted", "dashed"]);
7980
- proseLinkUnderlineThicknessSchema = z23.enum(["auto", "fromFont", "thin", "medium", "thick"]);
7981
- proseLinkUnderlineOffsetSchema = z23.enum(["auto", "tight", "normal", "loose"]);
7991
+ proseLinkUnderlineThicknessSchema = z23.enum([
7992
+ "auto",
7993
+ "fromFont",
7994
+ "thin",
7995
+ "medium",
7996
+ "thick"
7997
+ ]);
7998
+ proseLinkUnderlineOffsetSchema = z23.enum([
7999
+ "auto",
8000
+ "tight",
8001
+ "normal",
8002
+ "loose"
8003
+ ]);
7982
8004
  proseLinkStyleSchema = z23.object({
7983
8005
  colorToken: themeColorTokenSchema.optional(),
7984
8006
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -7989,7 +8011,14 @@ var init_schema2 = __esm({
7989
8011
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
7990
8012
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
7991
8013
  });
7992
- semanticSpacingSchema = z23.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
8014
+ semanticSpacingSchema = z23.enum([
8015
+ "none",
8016
+ "compact",
8017
+ "cozy",
8018
+ "medium",
8019
+ "comfortable",
8020
+ "spacious"
8021
+ ]);
7993
8022
  boxRoundedSchema = z23.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
7994
8023
  boxBackgroundOverlaySchema = z23.object({
7995
8024
  type: z23.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -8133,9 +8162,17 @@ var init_schema2 = __esm({
8133
8162
  focus: z23.enum(["glow", "ring", "underline"]),
8134
8163
  label: z23.enum(["inside", "above"])
8135
8164
  });
8136
- headerVariant = z23.enum(["classic", "centered", "transparent", "floating", "editorial"]);
8165
+ headerVariant = z23.enum(["classic", "centered", "transparent", "floating"]);
8137
8166
  headerPositioning = z23.enum(["static", "sticky", "fixed"]);
8138
- headerNavStyle = z23.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
8167
+ headerNavStyle = z23.enum([
8168
+ "minimal",
8169
+ "underline",
8170
+ "underline-grow",
8171
+ "capsule",
8172
+ "scale",
8173
+ "frosted",
8174
+ "solid"
8175
+ ]);
8139
8176
  navFontWeight = z23.enum(["regular", "medium", "semibold", "bold"]);
8140
8177
  headerMaxWidth = z23.enum(["container", "full"]);
8141
8178
  headerContainerSchema = z23.object({
@@ -8183,8 +8220,22 @@ var init_schema2 = __esm({
8183
8220
  textSize: z23.enum(["xs", "sm", "base", "lg"]).optional()
8184
8221
  // optional = no override (browser default)
8185
8222
  }).optional();
8186
- headerCtaGapSchema = z23.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
8187
- headerCtaTreatmentSchema = z23.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
8223
+ headerCtaGapSchema = z23.enum([
8224
+ "none",
8225
+ "tight",
8226
+ "compact",
8227
+ "default",
8228
+ "relaxed",
8229
+ "spacious"
8230
+ ]);
8231
+ headerCtaTreatmentSchema = z23.enum([
8232
+ "default",
8233
+ "primary",
8234
+ "secondary",
8235
+ "inverted",
8236
+ "outline",
8237
+ "ghost"
8238
+ ]);
8188
8239
  navContainerSchema = z23.object({
8189
8240
  type: z23.enum(["none", "pill", "glass"]).default("none"),
8190
8241
  tint: z23.string().nullable().optional(),
@@ -8239,7 +8290,14 @@ var init_schema2 = __esm({
8239
8290
  footerMode = z23.enum(["default", "blocks", "default+blocks", "none"]);
8240
8291
  footerNavLayoutMode = z23.enum(["stack", "inline", "inline-wrap"]);
8241
8292
  footerNavLayoutAlign = z23.enum(["start", "center", "end", "space-between"]);
8242
- footerSpacing = z23.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
8293
+ footerSpacing = z23.enum([
8294
+ "none",
8295
+ "tight",
8296
+ "compact",
8297
+ "default",
8298
+ "relaxed",
8299
+ "spacious"
8300
+ ]);
8243
8301
  footerLogoPlacement = z23.enum(["left", "right", "above", "below"]);
8244
8302
  footerLogoSize = z23.enum(["sm", "md", "lg", "xl"]);
8245
8303
  footerLogoMaxHeight = z23.enum(["sm", "md", "lg", "xl"]);
@@ -8304,7 +8362,12 @@ var init_schema2 = __esm({
8304
8362
  logo: footerLogoSchema.optional(),
8305
8363
  bottomBar: footerBottomBarSchema.optional()
8306
8364
  });
8307
- containerPaddingPresetSchema = z23.enum(["tight", "compact", "default", "relaxed"]);
8365
+ containerPaddingPresetSchema = z23.enum([
8366
+ "tight",
8367
+ "compact",
8368
+ "default",
8369
+ "relaxed"
8370
+ ]);
8308
8371
  layoutSchema = z23.object({
8309
8372
  containerPadding: z23.object({
8310
8373
  mobile: containerPaddingPresetSchema.optional(),
@@ -8312,8 +8375,24 @@ var init_schema2 = __esm({
8312
8375
  desktop: containerPaddingPresetSchema.optional()
8313
8376
  }).optional()
8314
8377
  }).optional();
8315
- heroTypographySizeSchema = z23.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
8316
- heroTypographyLineHeightSchema = z23.enum(["tight", "snug", "normal", "relaxed"]);
8378
+ heroTypographySizeSchema = z23.enum([
8379
+ "sm",
8380
+ "base",
8381
+ "lg",
8382
+ "xl",
8383
+ "2xl",
8384
+ "3xl",
8385
+ "4xl",
8386
+ "5xl",
8387
+ "6xl",
8388
+ "editorial"
8389
+ ]);
8390
+ heroTypographyLineHeightSchema = z23.enum([
8391
+ "tight",
8392
+ "snug",
8393
+ "normal",
8394
+ "relaxed"
8395
+ ]);
8317
8396
  heroResponsiveTypographySchema = z23.object({
8318
8397
  headlineSize: heroTypographySizeSchema.optional(),
8319
8398
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -8928,10 +9007,12 @@ function resolveLegacyHeaderLookAlias(lookId) {
8928
9007
  return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
8929
9008
  }
8930
9009
  function getCompatibleHeaderStyleIds(layoutId) {
8931
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
8932
- const style = getHeaderStyleOrThrow(styleId);
8933
- return isHeaderStyleCompatibleWithLayout(style, layoutId);
8934
- });
9010
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
9011
+ (styleId) => {
9012
+ const style = getHeaderStyleOrThrow(styleId);
9013
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
9014
+ }
9015
+ );
8935
9016
  }
8936
9017
  function solidBrandHeader(theme) {
8937
9018
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
@@ -8962,8 +9043,14 @@ function solidBrandHeader(theme) {
8962
9043
  borderRadius: "none",
8963
9044
  effects: {
8964
9045
  hover: [
8965
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
8966
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
9046
+ {
9047
+ effectId: "text-color-change",
9048
+ options: { hoverColorToken: "secondary" }
9049
+ },
9050
+ {
9051
+ effectId: "nav-underline",
9052
+ options: { style: "grow", colorToken: "secondary" }
9053
+ }
8967
9054
  ]
8968
9055
  }
8969
9056
  },
@@ -9019,10 +9106,10 @@ function cleanBaseHeader(theme) {
9019
9106
  ctaGap: "default"
9020
9107
  };
9021
9108
  }
9022
- function editorialLineHeader(theme) {
9109
+ function serifLineHeader(theme) {
9023
9110
  return {
9024
9111
  ...baseHeader(theme),
9025
- variant: "editorial",
9112
+ variant: "centered",
9026
9113
  positioning: "sticky",
9027
9114
  shrinkOnScroll: false,
9028
9115
  background: {
@@ -9194,16 +9281,6 @@ var init_headerLooks = __esm({
9194
9281
  maxRecommendedNavItems: 5,
9195
9282
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
9196
9283
  },
9197
- {
9198
- id: asHeaderLayoutId("editorial"),
9199
- label: "Editorial",
9200
- description: "A composed, magazine-like stacked header treatment.",
9201
- structure: "editorial-stack",
9202
- variant: "editorial",
9203
- defaultPositioning: "static",
9204
- shrinkOnScroll: false,
9205
- maxRecommendedNavItems: 6
9206
- },
9207
9284
  {
9208
9285
  id: asHeaderLayoutId("floating"),
9209
9286
  label: "Floating",
@@ -9221,17 +9298,19 @@ var init_headerLooks = __esm({
9221
9298
  id: asHeaderStyleId("minimal"),
9222
9299
  label: "Minimal",
9223
9300
  description: "Quiet surface with simple color-change navigation.",
9224
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
9301
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
9225
9302
  navInteraction: "color-change",
9226
- surface: "neutral"
9303
+ surface: "neutral",
9304
+ navTypography: "plain"
9227
9305
  },
9228
9306
  {
9229
9307
  id: asHeaderStyleId("fine-line"),
9230
9308
  label: "Fine Line",
9231
9309
  description: "Light surface with a crisp lower rule and underline hover.",
9232
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
9310
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
9233
9311
  navInteraction: "underline-grow",
9234
- surface: "bordered"
9312
+ surface: "bordered",
9313
+ navTypography: "plain"
9235
9314
  },
9236
9315
  {
9237
9316
  id: asHeaderStyleId("soft-bar"),
@@ -9239,7 +9318,8 @@ var init_headerLooks = __esm({
9239
9318
  description: "Soft tinted surface with gentle pill hover states.",
9240
9319
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
9241
9320
  navInteraction: "pill-background",
9242
- surface: "soft"
9321
+ surface: "soft",
9322
+ navTypography: "plain"
9243
9323
  },
9244
9324
  {
9245
9325
  id: asHeaderStyleId("pill-nav"),
@@ -9247,23 +9327,26 @@ var init_headerLooks = __esm({
9247
9327
  description: "A calm pill navigation rail over a neutral header.",
9248
9328
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
9249
9329
  navInteraction: "pill-background",
9250
- surface: "soft"
9330
+ surface: "soft",
9331
+ navTypography: "plain"
9251
9332
  },
9252
9333
  {
9253
9334
  id: asHeaderStyleId("brand-bar"),
9254
9335
  label: "Brand Bar",
9255
9336
  description: "Solid brand surface with high-contrast navigation.",
9256
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
9337
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
9257
9338
  navInteraction: "color-change",
9258
- surface: "brand-solid"
9339
+ surface: "brand-solid",
9340
+ navTypography: "brand-caps"
9259
9341
  },
9260
9342
  {
9261
9343
  id: asHeaderStyleId("brand-underline"),
9262
9344
  label: "Brand Underline",
9263
9345
  description: "Brand surface with underline-grow navigation.",
9264
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
9346
+ supportedLayoutIds: supportedLayouts(["classic"]),
9265
9347
  navInteraction: "underline-grow",
9266
- surface: "brand-solid"
9348
+ surface: "brand-solid",
9349
+ navTypography: "brand-caps"
9267
9350
  },
9268
9351
  {
9269
9352
  id: asHeaderStyleId("brand-pill"),
@@ -9271,41 +9354,44 @@ var init_headerLooks = __esm({
9271
9354
  description: "Solid brand surface with rounded active and hover states.",
9272
9355
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
9273
9356
  navInteraction: "pill-background",
9274
- surface: "brand-solid"
9357
+ surface: "brand-solid",
9358
+ navTypography: "brand-caps"
9275
9359
  },
9276
9360
  {
9277
- id: asHeaderStyleId("editorial-line"),
9278
- label: "Editorial Line",
9361
+ id: asHeaderStyleId("serif-line"),
9362
+ label: "Serif Line",
9279
9363
  description: "Typographic logo treatment with understated underline navigation.",
9280
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
9364
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
9281
9365
  navInteraction: "underline-grow",
9282
- surface: "bordered"
9366
+ surface: "bordered",
9367
+ navTypography: "heading"
9283
9368
  },
9284
9369
  {
9285
9370
  id: asHeaderStyleId("flat-tabs"),
9286
9371
  label: "Flat Tabs",
9287
9372
  description: "Flat block hover and active states with a Swiss utility feel.",
9288
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
9373
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
9289
9374
  navInteraction: "flat-block",
9290
- surface: "bordered"
9375
+ surface: "bordered",
9376
+ navTypography: "quiet-caps"
9291
9377
  },
9292
9378
  {
9293
9379
  id: asHeaderStyleId("glass"),
9294
9380
  label: "Glass",
9295
- description: "Floating translucent chrome with frosted navigation backing.",
9296
- supportedLayoutIds: supportedLayouts(["floating"]),
9381
+ description: "Translucent chrome with frosted navigation backing.",
9382
+ supportedLayoutIds: supportedLayouts(["classic", "floating"]),
9297
9383
  navInteraction: "glass-backed",
9298
9384
  surface: "floating",
9299
- requiresFloatingLayout: true
9385
+ navTypography: "plain"
9300
9386
  },
9301
9387
  {
9302
9388
  id: asHeaderStyleId("minimal-surface"),
9303
- label: "Minimal Surface",
9304
- description: "Floating chrome with a restrained translucent surface.",
9389
+ label: "Clear Split",
9390
+ description: "Floating logo with transparent navigation and no shared shell.",
9305
9391
  supportedLayoutIds: supportedLayouts(["floating"]),
9306
9392
  navInteraction: "color-change",
9307
9393
  surface: "floating",
9308
- requiresFloatingLayout: true
9394
+ navTypography: "plain"
9309
9395
  },
9310
9396
  {
9311
9397
  id: asHeaderStyleId("soft-shell"),
@@ -9314,7 +9400,25 @@ var init_headerLooks = __esm({
9314
9400
  supportedLayoutIds: supportedLayouts(["floating"]),
9315
9401
  navInteraction: "pill-background",
9316
9402
  surface: "floating",
9317
- requiresFloatingLayout: true
9403
+ navTypography: "plain"
9404
+ },
9405
+ {
9406
+ id: asHeaderStyleId("split-glass"),
9407
+ label: "Split Glass",
9408
+ description: "Logo floats independently while the navigation sits in a glass rail.",
9409
+ supportedLayoutIds: supportedLayouts(["floating"]),
9410
+ navInteraction: "glass-backed",
9411
+ surface: "floating",
9412
+ navTypography: "quiet-caps"
9413
+ },
9414
+ {
9415
+ id: asHeaderStyleId("split-pill"),
9416
+ label: "Split Pill",
9417
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
9418
+ supportedLayoutIds: supportedLayouts(["floating"]),
9419
+ navInteraction: "pill-background",
9420
+ surface: "floating",
9421
+ navTypography: "heading"
9318
9422
  }
9319
9423
  ];
9320
9424
  headerLayoutsById = new Map(
@@ -9328,13 +9432,14 @@ var init_headerLooks = __esm({
9328
9432
  asHeaderLayoutId("classic"),
9329
9433
  headerStyleRepairChain([
9330
9434
  "minimal",
9435
+ "glass",
9331
9436
  "fine-line",
9332
9437
  "soft-bar",
9333
9438
  "pill-nav",
9334
9439
  "brand-bar",
9335
9440
  "brand-underline",
9336
9441
  "brand-pill",
9337
- "editorial-line",
9442
+ "serif-line",
9338
9443
  "flat-tabs"
9339
9444
  ])
9340
9445
  ],
@@ -9347,19 +9452,7 @@ var init_headerLooks = __esm({
9347
9452
  "pill-nav",
9348
9453
  "brand-bar",
9349
9454
  "brand-pill",
9350
- "editorial-line",
9351
- "flat-tabs"
9352
- ])
9353
- ],
9354
- [
9355
- asHeaderLayoutId("editorial"),
9356
- headerStyleRepairChain([
9357
- "minimal",
9358
- "fine-line",
9359
- "soft-bar",
9360
- "brand-bar",
9361
- "brand-underline",
9362
- "editorial-line",
9455
+ "serif-line",
9363
9456
  "flat-tabs"
9364
9457
  ])
9365
9458
  ],
@@ -9368,25 +9461,70 @@ var init_headerLooks = __esm({
9368
9461
  headerStyleRepairChain([
9369
9462
  "glass",
9370
9463
  "minimal-surface",
9464
+ "split-glass",
9465
+ "split-pill",
9371
9466
  "soft-shell",
9372
9467
  "brand-pill"
9373
9468
  ])
9374
9469
  ]
9375
9470
  ]);
9376
- headerStyleRepairOrder = /* @__PURE__ */ new Map([
9377
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
9378
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
9379
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
9380
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
9381
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
9382
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
9383
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
9384
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
9385
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
9386
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
9387
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
9388
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
9389
- ]);
9471
+ headerStyleRepairOrder = /* @__PURE__ */ new Map(
9472
+ [
9473
+ [
9474
+ asHeaderStyleId("brand-bar"),
9475
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
9476
+ ],
9477
+ [
9478
+ asHeaderStyleId("brand-underline"),
9479
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
9480
+ ],
9481
+ [
9482
+ asHeaderStyleId("brand-pill"),
9483
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
9484
+ ],
9485
+ [
9486
+ asHeaderStyleId("pill-nav"),
9487
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
9488
+ ],
9489
+ [
9490
+ asHeaderStyleId("flat-tabs"),
9491
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
9492
+ ],
9493
+ [
9494
+ asHeaderStyleId("serif-line"),
9495
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
9496
+ ],
9497
+ [
9498
+ asHeaderStyleId("glass"),
9499
+ headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
9500
+ ],
9501
+ [
9502
+ asHeaderStyleId("soft-shell"),
9503
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
9504
+ ],
9505
+ [
9506
+ asHeaderStyleId("minimal-surface"),
9507
+ headerStyleRepairChain(["minimal-surface", "minimal"])
9508
+ ],
9509
+ [
9510
+ asHeaderStyleId("split-glass"),
9511
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
9512
+ ],
9513
+ [
9514
+ asHeaderStyleId("split-pill"),
9515
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
9516
+ ],
9517
+ [
9518
+ asHeaderStyleId("fine-line"),
9519
+ headerStyleRepairChain(["fine-line", "minimal"])
9520
+ ],
9521
+ [
9522
+ asHeaderStyleId("soft-bar"),
9523
+ headerStyleRepairChain(["soft-bar", "minimal"])
9524
+ ],
9525
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
9526
+ ]
9527
+ );
9390
9528
  legacyHeaderLookAliases = [
9391
9529
  {
9392
9530
  lookId: asHeaderLookId("clean-base"),
@@ -9403,10 +9541,10 @@ var init_headerLooks = __esm({
9403
9541
  }
9404
9542
  },
9405
9543
  {
9406
- lookId: asHeaderLookId("editorial-line"),
9544
+ lookId: asHeaderLookId("serif-line"),
9407
9545
  selection: {
9408
- layoutId: asHeaderLayoutId("editorial"),
9409
- styleId: asHeaderStyleId("editorial-line")
9546
+ layoutId: asHeaderLayoutId("centered"),
9547
+ styleId: asHeaderStyleId("serif-line")
9410
9548
  }
9411
9549
  },
9412
9550
  {
@@ -9445,9 +9583,7 @@ var init_headerLooks = __esm({
9445
9583
  }
9446
9584
  }
9447
9585
  ];
9448
- legacyHeaderLookAliasesById = new Map(
9449
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
9450
- );
9586
+ legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
9451
9587
  headerLookCatalog = [
9452
9588
  {
9453
9589
  id: asHeaderLookId("clean-base"),
@@ -9476,27 +9612,27 @@ var init_headerLooks = __esm({
9476
9612
  compile: solidBrandHeader
9477
9613
  },
9478
9614
  {
9479
- id: asHeaderLookId("editorial-line"),
9480
- label: "Editorial line",
9481
- visualTreatment: "light-editorial",
9615
+ id: asHeaderLookId("serif-line"),
9616
+ label: "Serif line",
9617
+ visualTreatment: "light-serif",
9482
9618
  layoutBehavior: "sticky",
9483
9619
  configuration: {
9484
- structure: "editorial-stack",
9485
- treatment: "light-editorial",
9620
+ structure: "centered-stack",
9621
+ treatment: "light-serif",
9486
9622
  behavior: "sticky"
9487
9623
  },
9488
9624
  openingRequirement: "none",
9489
9625
  maxRecommendedNavItems: 6,
9490
- compile: editorialLineHeader
9626
+ compile: serifLineHeader
9491
9627
  },
9492
9628
  {
9493
9629
  id: asHeaderLookId("centered-calm"),
9494
9630
  label: "Centered calm",
9495
- visualTreatment: "light-editorial",
9631
+ visualTreatment: "light-serif",
9496
9632
  layoutBehavior: "normal-flow",
9497
9633
  configuration: {
9498
9634
  structure: "centered-stack",
9499
- treatment: "light-editorial",
9635
+ treatment: "light-serif",
9500
9636
  behavior: "normal-flow"
9501
9637
  },
9502
9638
  openingRequirement: "none",
@@ -9993,12 +10129,16 @@ var init_typographyPresets = __esm({
9993
10129
 
9994
10130
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
9995
10131
  function uniqueContentFrameKinds() {
9996
- const kinds = [...new Set(
9997
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
9998
- )];
10132
+ const kinds = [
10133
+ ...new Set(
10134
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
10135
+ )
10136
+ ];
9999
10137
  const firstKind = kinds[0];
10000
10138
  if (!firstKind) {
10001
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
10139
+ throw new Error(
10140
+ "Expected generated design option catalog to expose at least one content frame kind."
10141
+ );
10002
10142
  }
10003
10143
  return [firstKind, ...kinds.slice(1)];
10004
10144
  }
@@ -10007,7 +10147,9 @@ function defineCuratedSiteStyle(input) {
10007
10147
  const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
10008
10148
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
10009
10149
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
10010
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
10150
+ if (!typographyPresetChoices.some(
10151
+ (choice) => choice.id === defaultTypographyPresetId
10152
+ )) {
10011
10153
  throw new Error(
10012
10154
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
10013
10155
  );
@@ -10018,9 +10160,13 @@ function defineCuratedSiteStyle(input) {
10018
10160
  description: input.description,
10019
10161
  generationBrief: input.generationBrief,
10020
10162
  selectionKeywordRules: input.selectionKeywordRules ?? [],
10021
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
10163
+ siteCreatorSelection: input.siteCreatorSelection ?? {
10164
+ kind: "explicit_only"
10165
+ },
10022
10166
  template: {
10023
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
10167
+ id: asDesignSystemTemplateId(
10168
+ `template:${input.id.replace("site-style:", "")}`
10169
+ ),
10024
10170
  name: input.name,
10025
10171
  version: 1,
10026
10172
  tokenRecipes: input.tokenRecipes,
@@ -10038,13 +10184,17 @@ function defineCuratedSiteStyle(input) {
10038
10184
  } : inferredHeaderCuration.defaultHeaderSelection,
10039
10185
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
10040
10186
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
10041
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
10042
- layoutId: asHeaderLayoutId(selection.layoutId),
10043
- styleId: asHeaderStyleId(selection.styleId)
10044
- })),
10187
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
10188
+ (selection) => ({
10189
+ layoutId: asHeaderLayoutId(selection.layoutId),
10190
+ styleId: asHeaderStyleId(selection.styleId)
10191
+ })
10192
+ ),
10045
10193
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
10046
10194
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
10047
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
10195
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
10196
+ asFooterLookId
10197
+ ),
10048
10198
  buttonPersonalityChoices: input.buttonPersonalityChoices,
10049
10199
  paletteVariantChoices: input.paletteVariantChoices,
10050
10200
  typographyPresetChoices,
@@ -10063,7 +10213,7 @@ function headerLayoutChoice(id, note) {
10063
10213
  function headerStyleChoice(id, note) {
10064
10214
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
10065
10215
  }
10066
- function headerLayoutRecordKey(id) {
10216
+ function unbrandHeaderLayoutId(id) {
10067
10217
  return id;
10068
10218
  }
10069
10219
  function uniqueHeaderLayoutChoices(choices) {
@@ -10086,7 +10236,9 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
10086
10236
  return [first, ...choices.slice(1)];
10087
10237
  }
10088
10238
  function inferHeaderCurationFromLegacyLooks(lookIds) {
10089
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
10239
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
10240
+ (selection) => Boolean(selection)
10241
+ );
10090
10242
  const defaultHeaderSelection = selections[0] ?? {
10091
10243
  layoutId: asHeaderLayoutId("classic"),
10092
10244
  styleId: asHeaderStyleId("minimal")
@@ -10097,10 +10249,7 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
10097
10249
  const stylesByLayout = {};
10098
10250
  for (const layoutChoice of layoutChoices) {
10099
10251
  const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
10100
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
10101
- styleChoices,
10102
- layoutChoice.id
10103
- );
10252
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
10104
10253
  }
10105
10254
  return {
10106
10255
  defaultHeaderSelection,
@@ -10244,7 +10393,11 @@ var init_curatedSiteStyles = __esm({
10244
10393
  motion: "subtle"
10245
10394
  },
10246
10395
  compositionBudget: quietBudget,
10247
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
10396
+ recommendedHeaderLookIds: [
10397
+ "centered-calm",
10398
+ "minimal-transparent",
10399
+ "clean-base"
10400
+ ],
10248
10401
  buttonPersonalityChoices: [
10249
10402
  buttonChoice("soft-pill"),
10250
10403
  buttonChoice("pebble"),
@@ -10273,7 +10426,11 @@ var init_curatedSiteStyles = __esm({
10273
10426
  motion: "subtle"
10274
10427
  },
10275
10428
  compositionBudget: balancedBudget,
10276
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
10429
+ recommendedHeaderLookIds: [
10430
+ "practical-utility",
10431
+ "brand-solid",
10432
+ "clean-base"
10433
+ ],
10277
10434
  buttonPersonalityChoices: [
10278
10435
  buttonChoice("confident-chip"),
10279
10436
  buttonChoice("soft-pill"),
@@ -10300,7 +10457,11 @@ var init_curatedSiteStyles = __esm({
10300
10457
  motion: "subtle"
10301
10458
  },
10302
10459
  compositionBudget: balancedBudget,
10303
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
10460
+ recommendedHeaderLookIds: [
10461
+ "serif-line",
10462
+ "minimal-transparent",
10463
+ "centered-calm"
10464
+ ],
10304
10465
  buttonPersonalityChoices: [
10305
10466
  buttonChoice("editorial-link"),
10306
10467
  buttonChoice("soft-pill"),
@@ -10328,7 +10489,11 @@ var init_curatedSiteStyles = __esm({
10328
10489
  motion: "expressive"
10329
10490
  },
10330
10491
  compositionBudget: balancedBudget,
10331
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
10492
+ recommendedHeaderLookIds: [
10493
+ "brand-solid",
10494
+ "practical-utility",
10495
+ "clean-base"
10496
+ ],
10332
10497
  buttonPersonalityChoices: [
10333
10498
  buttonChoice("pebble"),
10334
10499
  buttonChoice("brushed-wash"),
@@ -10345,7 +10510,10 @@ var init_curatedSiteStyles = __esm({
10345
10510
  name: "Quiet Luxury",
10346
10511
  description: "Minimal, confident, and refined for premium experiences and private services.",
10347
10512
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
10348
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
10513
+ siteCreatorSelection: {
10514
+ kind: "site_creator_keyword_heuristic",
10515
+ priority: 20
10516
+ },
10349
10517
  selectionKeywordRules: [
10350
10518
  { kind: "word", value: "luxury" },
10351
10519
  { kind: "word", value: "premium" },
@@ -10363,7 +10531,11 @@ var init_curatedSiteStyles = __esm({
10363
10531
  motion: "none"
10364
10532
  },
10365
10533
  compositionBudget: quietBudget,
10366
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
10534
+ recommendedHeaderLookIds: [
10535
+ "minimal-transparent",
10536
+ "serif-line",
10537
+ "clean-base"
10538
+ ],
10367
10539
  buttonPersonalityChoices: [
10368
10540
  buttonChoice("editorial-link"),
10369
10541
  buttonChoice("confident-chip"),
@@ -10399,7 +10571,11 @@ var init_curatedSiteStyles = __esm({
10399
10571
  motion: "none"
10400
10572
  },
10401
10573
  compositionBudget: quietBudget,
10402
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
10574
+ recommendedHeaderLookIds: [
10575
+ "practical-utility",
10576
+ "brand-solid",
10577
+ "clean-base"
10578
+ ],
10403
10579
  buttonPersonalityChoices: [
10404
10580
  buttonChoice("confident-chip"),
10405
10581
  buttonChoice("pebble"),
@@ -10426,7 +10602,11 @@ var init_curatedSiteStyles = __esm({
10426
10602
  motion: "subtle"
10427
10603
  },
10428
10604
  compositionBudget: balancedBudget,
10429
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
10605
+ recommendedHeaderLookIds: [
10606
+ "centered-calm",
10607
+ "minimal-transparent",
10608
+ "clean-base"
10609
+ ],
10430
10610
  buttonPersonalityChoices: [
10431
10611
  buttonChoice("soft-pill"),
10432
10612
  buttonChoice("pebble"),
@@ -10443,7 +10623,10 @@ var init_curatedSiteStyles = __esm({
10443
10623
  name: "Quiet Practice",
10444
10624
  description: "Grounded, calm, and practical for small appointment-first practices.",
10445
10625
  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.",
10446
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
10626
+ siteCreatorSelection: {
10627
+ kind: "site_creator_keyword_heuristic",
10628
+ priority: 30
10629
+ },
10447
10630
  selectionKeywordRules: [
10448
10631
  { kind: "substring", value: "massage" },
10449
10632
  { kind: "word", value: "bodywork" },
@@ -10464,7 +10647,11 @@ var init_curatedSiteStyles = __esm({
10464
10647
  motion: "subtle"
10465
10648
  },
10466
10649
  compositionBudget: quietBudget,
10467
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
10650
+ recommendedHeaderLookIds: [
10651
+ "practical-utility",
10652
+ "clean-base",
10653
+ "centered-calm"
10654
+ ],
10468
10655
  buttonPersonalityChoices: [
10469
10656
  buttonChoice("pebble"),
10470
10657
  buttonChoice("soft-pill"),
@@ -10481,7 +10668,10 @@ var init_curatedSiteStyles = __esm({
10481
10668
  name: "Personal Retreat Journal",
10482
10669
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
10483
10670
  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.",
10484
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
10671
+ siteCreatorSelection: {
10672
+ kind: "site_creator_keyword_heuristic",
10673
+ priority: 40
10674
+ },
10485
10675
  selectionKeywordRules: [
10486
10676
  { kind: "substring", value: "retreat" },
10487
10677
  { kind: "phrase", value: "solo practitioner" },
@@ -10501,7 +10691,11 @@ var init_curatedSiteStyles = __esm({
10501
10691
  motion: "subtle"
10502
10692
  },
10503
10693
  compositionBudget: balancedBudget,
10504
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
10694
+ recommendedHeaderLookIds: [
10695
+ "serif-line",
10696
+ "centered-calm",
10697
+ "minimal-transparent"
10698
+ ],
10505
10699
  buttonPersonalityChoices: [
10506
10700
  buttonChoice("editorial-link"),
10507
10701
  buttonChoice("soft-pill"),
@@ -10518,7 +10712,10 @@ var init_curatedSiteStyles = __esm({
10518
10712
  name: "Tactile Workshop",
10519
10713
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
10520
10714
  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.",
10521
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
10715
+ siteCreatorSelection: {
10716
+ kind: "site_creator_keyword_heuristic",
10717
+ priority: 50
10718
+ },
10522
10719
  selectionKeywordRules: [
10523
10720
  { kind: "substring", value: "ceramic" },
10524
10721
  { kind: "word", value: "pottery" },
@@ -10538,8 +10735,15 @@ var init_curatedSiteStyles = __esm({
10538
10735
  motion: "subtle"
10539
10736
  },
10540
10737
  compositionBudget: balancedBudget,
10541
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
10542
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
10738
+ recommendedHeaderLookIds: [
10739
+ "brand-solid",
10740
+ "practical-utility",
10741
+ "clean-base"
10742
+ ],
10743
+ recommendedFooterLookIds: [
10744
+ "site-footer-brand-two-band",
10745
+ "footer-muted-grounding"
10746
+ ],
10543
10747
  buttonPersonalityChoices: [
10544
10748
  buttonChoice("pebble"),
10545
10749
  buttonChoice("confident-chip"),
@@ -10558,7 +10762,10 @@ var init_curatedSiteStyles = __esm({
10558
10762
  name: "Soft Earth",
10559
10763
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
10560
10764
  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.",
10561
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
10765
+ siteCreatorSelection: {
10766
+ kind: "site_creator_keyword_heuristic",
10767
+ priority: 45
10768
+ },
10562
10769
  selectionKeywordRules: [
10563
10770
  { kind: "word", value: "meditation" },
10564
10771
  { kind: "word", value: "wellbeing" },
@@ -10634,8 +10841,15 @@ var init_curatedSiteStyles = __esm({
10634
10841
  "faq-soft-earth-two-column",
10635
10842
  "contact-form-panel"
10636
10843
  ],
10637
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
10638
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
10844
+ recommendedHeaderLookIds: [
10845
+ "centered-calm",
10846
+ "minimal-transparent",
10847
+ "serif-line"
10848
+ ],
10849
+ recommendedFooterLookIds: [
10850
+ "footer-muted-grounding",
10851
+ "site-footer-brand-two-band"
10852
+ ],
10639
10853
  buttonPersonalityChoices: [
10640
10854
  buttonChoice("earth-pill"),
10641
10855
  buttonChoice("soft-pill"),
@@ -10654,7 +10868,10 @@ var init_curatedSiteStyles = __esm({
10654
10868
  name: "Bold Launch",
10655
10869
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
10656
10870
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
10657
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
10871
+ siteCreatorSelection: {
10872
+ kind: "site_creator_keyword_heuristic",
10873
+ priority: 10
10874
+ },
10658
10875
  selectionKeywordRules: [
10659
10876
  { kind: "substring", value: "launch" },
10660
10877
  { kind: "substring", value: "campaign" },
@@ -10673,7 +10890,11 @@ var init_curatedSiteStyles = __esm({
10673
10890
  motion: "expressive"
10674
10891
  },
10675
10892
  compositionBudget: expressiveBudget,
10676
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
10893
+ recommendedHeaderLookIds: [
10894
+ "transparent-overlay",
10895
+ "floating-glass",
10896
+ "brand-solid"
10897
+ ],
10677
10898
  buttonPersonalityChoices: [
10678
10899
  buttonChoice("ink-stamp"),
10679
10900
  buttonChoice("confident-chip"),
@@ -10724,8 +10945,15 @@ var init_curatedSiteStyles = __esm({
10724
10945
  "testimonials-accent-quote-proof",
10725
10946
  "contact-form-brand-depth-card"
10726
10947
  ],
10727
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
10728
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
10948
+ recommendedHeaderLookIds: [
10949
+ "brand-solid",
10950
+ "transparent-overlay",
10951
+ "practical-utility"
10952
+ ],
10953
+ recommendedFooterLookIds: [
10954
+ "site-footer-brand-two-band",
10955
+ "footer-muted-grounding"
10956
+ ],
10729
10957
  buttonPersonalityChoices: [
10730
10958
  buttonChoice("showtime-pill"),
10731
10959
  buttonChoice("confident-chip"),
@@ -17886,7 +18114,7 @@ function okWith(data) {
17886
18114
  function err2(error) {
17887
18115
  return { ok: false, error };
17888
18116
  }
17889
- function assertNever4(value, message) {
18117
+ function assertNever5(value, message) {
17890
18118
  throw new Error(message ?? `Unexpected value: ${String(value)}`);
17891
18119
  }
17892
18120
  var init_dist = __esm({
@@ -18052,7 +18280,7 @@ function deriveBookingFormViewState(input) {
18052
18280
  resourceName: input.verificationState.resourceName
18053
18281
  };
18054
18282
  default:
18055
- return assertNever4(input.verificationState);
18283
+ return assertNever5(input.verificationState);
18056
18284
  }
18057
18285
  }
18058
18286
  function resolveBookingSiteId(siteId, form2) {
@@ -18222,7 +18450,7 @@ function getBookingServicePaymentSelectionMode(service) {
18222
18450
  case "flexible_balance":
18223
18451
  return "implicit_flexible_balance";
18224
18452
  default:
18225
- return assertNever4(onlyKind);
18453
+ return assertNever5(onlyKind);
18226
18454
  }
18227
18455
  }
18228
18456
  if (allowedKinds.length === 2 && allowedKinds.includes("upfront") && (allowedKinds.includes("deferred_manual") || allowedKinds.includes("instalment_plan") || allowedKinds.includes("flexible_balance"))) {
@@ -18424,7 +18652,7 @@ function formatBookingSubmissionPreparationError(error) {
18424
18652
  case "service-missing-duration":
18425
18653
  return `Service "${error.serviceTitle}" is missing duration. Please update the service in the dashboard to include a duration (e.g., 30 minutes).`;
18426
18654
  default:
18427
- return assertNever4(error);
18655
+ return assertNever5(error);
18428
18656
  }
18429
18657
  }
18430
18658
  function getBookingSuccessMessage(successMessage) {
@@ -22628,7 +22856,7 @@ var init_shared5 = __esm({
22628
22856
  });
22629
22857
 
22630
22858
  // ../blocks/src/system/runtime/api/creditProducts.ts
22631
- function assertNever5(value) {
22859
+ function assertNever6(value) {
22632
22860
  throw new Error(`Unhandled credit product case: ${String(value)}`);
22633
22861
  }
22634
22862
  function useCasesFromModules(modules) {
@@ -22661,7 +22889,7 @@ function getCreditProductCreditUnit(useCase) {
22661
22889
  perCreditSuffix: "credit"
22662
22890
  };
22663
22891
  default:
22664
- return assertNever5(useCase);
22892
+ return assertNever6(useCase);
22665
22893
  }
22666
22894
  }
22667
22895
  function deriveCreditProductLabels(products, options = {}) {
@@ -31998,7 +32226,7 @@ function formSubmissionReducer(_state, action) {
31998
32226
  case "submission-failed":
31999
32227
  return { tag: "failed", message: action.message };
32000
32228
  default:
32001
- return assertNever4(action);
32229
+ return assertNever5(action);
32002
32230
  }
32003
32231
  }
32004
32232
  var initialFormSubmissionState;
@@ -32773,7 +33001,7 @@ function bookingSubmissionReducer(state, action) {
32773
33001
  feedback: { tag: "idle" }
32774
33002
  };
32775
33003
  default:
32776
- return assertNever4(action);
33004
+ return assertNever5(action);
32777
33005
  }
32778
33006
  }
32779
33007
  function selectIsSubmitting(state) {
@@ -33125,7 +33353,7 @@ function buildBookingPaymentOptionViewModel(input) {
33125
33353
  };
33126
33354
  }
33127
33355
  default:
33128
- return assertNever4(input.option);
33356
+ return assertNever5(input.option);
33129
33357
  }
33130
33358
  }
33131
33359
  function buildInstalmentSchedulePreview(input) {
@@ -33182,7 +33410,7 @@ function buildInstalmentSchedulePreview(input) {
33182
33410
  })));
33183
33411
  }
33184
33412
  default:
33185
- return assertNever4(input.option.plan);
33413
+ return assertNever5(input.option.plan);
33186
33414
  }
33187
33415
  }
33188
33416
  function getPaymentCadenceLabel(plan) {
@@ -33414,7 +33642,7 @@ function bookingFlowReducer(state, event) {
33414
33642
  case "reset":
33415
33643
  return event.initial;
33416
33644
  default:
33417
- return assertNever4(event);
33645
+ return assertNever5(event);
33418
33646
  }
33419
33647
  }
33420
33648
  function clearAvailabilityFeedback(feedback) {
@@ -33543,7 +33771,7 @@ function validateBookingStep(input) {
33543
33771
  return Object.keys(errors).length > 0 ? { ok: false, errors: createFieldBookingValidationErrors(errors) } : { ok: true };
33544
33772
  }
33545
33773
  default:
33546
- return assertNever4(input.stepId);
33774
+ return assertNever5(input.stepId);
33547
33775
  }
33548
33776
  }
33549
33777
  function validateBookingFields(input) {
@@ -33837,7 +34065,7 @@ function resolveAppointmentPackagesModel(input) {
33837
34065
  };
33838
34066
  }
33839
34067
  default:
33840
- return assertNever4(input.state);
34068
+ return assertNever5(input.state);
33841
34069
  }
33842
34070
  }
33843
34071
  function toHeadlessEligibleAppointmentPackage(appointmentPackage) {
@@ -34592,7 +34820,7 @@ function pollingReducer(state, action) {
34592
34820
  case "timeout":
34593
34821
  return state;
34594
34822
  default:
34595
- return assertNever4(state);
34823
+ return assertNever5(state);
34596
34824
  }
34597
34825
  case "polling-timed-out":
34598
34826
  return {
@@ -34601,7 +34829,7 @@ function pollingReducer(state, action) {
34601
34829
  error: new Error("Polling timed out")
34602
34830
  };
34603
34831
  default:
34604
- return assertNever4(action);
34832
+ return assertNever5(action);
34605
34833
  }
34606
34834
  }
34607
34835
  var init_usePolling_state = __esm({
@@ -35162,7 +35390,7 @@ function DefaultBookingStepContent({
35162
35390
  case "custom-fields":
35163
35391
  return /* @__PURE__ */ jsx26(DefaultDynamicFields, { fields: booking.fields.items, booking });
35164
35392
  default:
35165
- return assertNever4(stepId);
35393
+ return assertNever5(stepId);
35166
35394
  }
35167
35395
  }
35168
35396
  function DefaultServiceSelectionStep({
@@ -36906,7 +37134,7 @@ function eligibilityLookupReducer(state, action) {
36906
37134
  error: action.message
36907
37135
  };
36908
37136
  default:
36909
- return assertNever4(action);
37137
+ return assertNever5(action);
36910
37138
  }
36911
37139
  }
36912
37140
  function existingRegistrationLookupReducer(state, action) {
@@ -36924,7 +37152,7 @@ function existingRegistrationLookupReducer(state, action) {
36924
37152
  registration: action.registration
36925
37153
  };
36926
37154
  default:
36927
- return assertNever4(action);
37155
+ return assertNever5(action);
36928
37156
  }
36929
37157
  }
36930
37158
  var initialEligibilityLookupState, initialExistingRegistrationLookupState;
@@ -46179,7 +46407,7 @@ function shopCheckoutReducer(state, action) {
46179
46407
  notice: action.notice
46180
46408
  };
46181
46409
  default:
46182
- return assertNever4(action);
46410
+ return assertNever5(action);
46183
46411
  }
46184
46412
  }
46185
46413
  var initialShopCheckoutState;
@@ -46718,7 +46946,7 @@ function shopPassesMembershipsReducer(state, action) {
46718
46946
  returnNotice: null
46719
46947
  };
46720
46948
  default:
46721
- return assertNever4(action);
46949
+ return assertNever5(action);
46722
46950
  }
46723
46951
  }
46724
46952
  function getOpenCheckout(state) {
@@ -47868,7 +48096,7 @@ var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
47868
48096
  var DATE_PATTERN = /^(?<year>[1-9]\d{3})-(?<month>\d{2})-(?<day>\d{2})$/;
47869
48097
  var TIME_PATTERN = /^(?<hours>[01]\d|2[0-3]):(?<minutes>[0-5]\d)$/;
47870
48098
  var DATETIME_PATTERN = /^(?<date>[1-9]\d{3}-\d{2}-\d{2})T(?<time>(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d)(?:\.\d+)?(?<offset>Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/;
47871
- function assertNever6(value) {
48099
+ function assertNever7(value) {
47872
48100
  throw new Error(`Unhandled field validation variant: ${JSON.stringify(value)}`);
47873
48101
  }
47874
48102
  function validationContext(options = {}) {
@@ -47929,7 +48157,7 @@ function fieldIssueToMessage(issue2) {
47929
48157
  case "invalidReference":
47930
48158
  return `${issue2.label} must reference a valid item`;
47931
48159
  default:
47932
- return assertNever6(issue2);
48160
+ return assertNever7(issue2);
47933
48161
  }
47934
48162
  }
47935
48163
  function pluralize(label, count) {
@@ -48044,7 +48272,7 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
48044
48272
  case "entryPicker":
48045
48273
  return makePlan("passthrough", "unknown", field, path, false, []);
48046
48274
  default:
48047
- return assertNever6(field);
48275
+ return assertNever7(field);
48048
48276
  }
48049
48277
  }
48050
48278
  function deriveFieldValidationPlans(fields3, parentPath = []) {
@@ -48117,7 +48345,7 @@ function resolveSelectConstraintSource(field) {
48117
48345
  case "sdk":
48118
48346
  return { kind: "runtime", source: source.kind };
48119
48347
  default:
48120
- return assertNever6(source);
48348
+ return assertNever7(source);
48121
48349
  }
48122
48350
  }
48123
48351
  function normalizeStoredContentValues(plans, content, options = {}) {
@@ -48152,7 +48380,7 @@ function normalizeStoredFieldValueWithContext(plan, value, ctx) {
48152
48380
  case "passthrough":
48153
48381
  return normalizeFieldValue(plan, value, ctx);
48154
48382
  default:
48155
- return assertNever6(plan);
48383
+ return assertNever7(plan);
48156
48384
  }
48157
48385
  }
48158
48386
  function normalizeStoredObjectChildren(children, value, ctx) {
@@ -48203,7 +48431,7 @@ function normalizeFieldValue(plan, value, ctx) {
48203
48431
  case "passthrough":
48204
48432
  return value;
48205
48433
  default:
48206
- return assertNever6(plan);
48434
+ return assertNever7(plan);
48207
48435
  }
48208
48436
  }
48209
48437
  function normalizeObjectChildren(children, value, ctx) {
@@ -48264,7 +48492,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
48264
48492
  case "passthrough":
48265
48493
  return [];
48266
48494
  default:
48267
- return assertNever6(plan);
48495
+ return assertNever7(plan);
48268
48496
  }
48269
48497
  }
48270
48498
  function shouldRequireValue(plan, value, ctx) {
@@ -48295,15 +48523,15 @@ function validateStringConstraint(plan, constraint, value) {
48295
48523
  case "maxLength":
48296
48524
  return value.length > constraint.maximum ? [issue(plan, "tooLong", { maximum: constraint.maximum })] : [];
48297
48525
  case "emailFormat":
48298
- return z51.email().safeParse(value).success ? [] : [issue(plan, "invalidEmail")];
48526
+ return isCanonicalEmailValue(value) ? [] : [issue(plan, "invalidEmail")];
48299
48527
  case "phoneFormat":
48300
- return TEL_RE.test(value) ? [] : [issue(plan, "invalidPhone")];
48528
+ return isCanonicalPhoneValue(value) ? [] : [issue(plan, "invalidPhone")];
48301
48529
  case "patternFormat": {
48302
48530
  const re = compilePattern(constraint.pattern);
48303
48531
  return re && !re.test(value) ? [issue(plan, "invalidPattern")] : [];
48304
48532
  }
48305
48533
  case "urlFormat":
48306
- return isValidUrl(value, constraint.allowRelative) ? [] : [issue(plan, "invalidUrl")];
48534
+ return isCanonicalUrlValue(value, { allowRelative: constraint.allowRelative }) ? [] : [issue(plan, "invalidUrl")];
48307
48535
  case "dateFormat":
48308
48536
  return isValidDateString(value) ? [] : [issue(plan, "invalidDate")];
48309
48537
  case "timeFormat":
@@ -48313,7 +48541,7 @@ function validateStringConstraint(plan, constraint, value) {
48313
48541
  case "slugFormat":
48314
48542
  return SLUG_PATTERN.test(value) ? [] : [issue(plan, "invalidSlug")];
48315
48543
  default:
48316
- return assertNever6(constraint);
48544
+ return assertNever7(constraint);
48317
48545
  }
48318
48546
  }
48319
48547
  function validateNumberPlan(plan, value) {
@@ -48330,7 +48558,7 @@ function validateNumberConstraint(plan, constraint, value) {
48330
48558
  case "numberMax":
48331
48559
  return value > constraint.maximum ? [issue(plan, "tooLarge", { maximum: constraint.maximum })] : [];
48332
48560
  default:
48333
- return assertNever6(constraint);
48561
+ return assertNever7(constraint);
48334
48562
  }
48335
48563
  }
48336
48564
  function validateSelectPlan(plan, value) {
@@ -48360,7 +48588,7 @@ function validateRepeaterPlan(plan, value, ctx) {
48360
48588
  })
48361
48589
  ] : [];
48362
48590
  default:
48363
- return assertNever6(constraint);
48591
+ return assertNever7(constraint);
48364
48592
  }
48365
48593
  });
48366
48594
  return [...constraintIssues, ...value.flatMap((item, index) => validateRepeaterItem(plan, item, index, ctx))];
@@ -48422,7 +48650,7 @@ function rebaseFieldPlanPath(plan, fromPrefix, toPrefix) {
48422
48650
  path
48423
48651
  };
48424
48652
  default:
48425
- return assertNever6(plan);
48653
+ return assertNever7(plan);
48426
48654
  }
48427
48655
  }
48428
48656
  function rebaseFieldPath(path, fromPrefix, toPrefix) {
@@ -48509,7 +48737,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
48509
48737
  zodCtx.addIssue({ ...issuePath, code: "custom", message });
48510
48738
  return;
48511
48739
  default:
48512
- assertNever6(validationIssue);
48740
+ assertNever7(validationIssue);
48513
48741
  }
48514
48742
  }
48515
48743
  function relativeZodIssuePath(path, rootPath) {
@@ -48525,9 +48753,15 @@ function compilePattern(pattern) {
48525
48753
  function isValidNumber(value) {
48526
48754
  return typeof value === "number" && Number.isFinite(value);
48527
48755
  }
48528
- function isValidUrl(value, allowRelative) {
48756
+ function isCanonicalEmailValue(value) {
48757
+ return z51.email().safeParse(value).success;
48758
+ }
48759
+ function isCanonicalPhoneValue(value) {
48760
+ return TEL_RE.test(value);
48761
+ }
48762
+ function isCanonicalUrlValue(value, options = {}) {
48529
48763
  if (!value) return false;
48530
- if (allowRelative && value.startsWith("/")) return true;
48764
+ if (options.allowRelative === true && value.startsWith("/")) return true;
48531
48765
  try {
48532
48766
  const parsed = new URL(value);
48533
48767
  return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
@@ -50617,10 +50851,7 @@ var headerRootClassTransform = {
50617
50851
  const navContainerType = header?.navContainer?.type ?? "none";
50618
50852
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
50619
50853
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
50620
- const classes = [
50621
- config.base,
50622
- backgroundClass
50623
- ];
50854
+ const classes = [config.base, backgroundClass];
50624
50855
  if (!hasContainedNav) {
50625
50856
  if (config.blur) classes.push(config.blur);
50626
50857
  if (config.blurSupport) classes.push(config.blurSupport);
@@ -50635,7 +50866,12 @@ var headerRootClassTransform = {
50635
50866
  if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
50636
50867
  classes.push(config.shrink);
50637
50868
  }
50638
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
50869
+ const VALID_VARIANTS = [
50870
+ "classic",
50871
+ "centered",
50872
+ "transparent",
50873
+ "floating"
50874
+ ];
50639
50875
  const variant = header?.variant;
50640
50876
  if (variant && VALID_VARIANTS.includes(variant)) {
50641
50877
  classes.push(`header-variant-${variant}`);
@@ -51282,15 +51518,21 @@ var mobileCta = ctaButton({
51282
51518
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
51283
51519
  {
51284
51520
  type: "div",
51285
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
51521
+ props: {
51522
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
51523
+ }
51286
51524
  },
51287
51525
  {
51288
51526
  type: "div",
51289
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
51527
+ props: {
51528
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
51529
+ }
51290
51530
  },
51291
51531
  {
51292
51532
  type: "div",
51293
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
51533
+ props: {
51534
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
51535
+ }
51294
51536
  }
51295
51537
  ]);
51296
51538
  var mobileToggleButton = {
@@ -51473,28 +51715,6 @@ var floatingLayout = inline(
51473
51715
  ],
51474
51716
  when("$root.theme.header.variant", { equals: "floating" })
51475
51717
  );
51476
- var editorialLayout = stack(
51477
- {
51478
- gap: "md",
51479
- align: "center",
51480
- className: bindProp("$root.theme.header.maxWidth", {
51481
- transforms: pipe(
51482
- tx("layout.maxWidthClass", {
51483
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
51484
- })
51485
- ),
51486
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
51487
- })
51488
- },
51489
- [
51490
- centeredLogoRow,
51491
- createNavRow(
51492
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
51493
- "center"
51494
- )
51495
- ],
51496
- when("$root.theme.header.variant", { equals: "editorial" })
51497
- );
51498
51718
  var headerLayout = headerSection(
51499
51719
  {
51500
51720
  background: bindProp("$root.theme.header", {
@@ -51508,10 +51728,7 @@ var headerLayout = headerSection(
51508
51728
  }),
51509
51729
  style: bindProp("$root.theme.header", {
51510
51730
  transforms: pipe(tx("layout.headerRootStyle")),
51511
- fallback: mergeStyles(
51512
- textColorStyle("text"),
51513
- borderColorStyle("border")
51514
- )
51731
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
51515
51732
  })
51516
51733
  },
51517
51734
  [
@@ -51520,7 +51737,6 @@ var headerLayout = headerSection(
51520
51737
  centeredLayout,
51521
51738
  transparentLayout,
51522
51739
  floatingLayout,
51523
- editorialLayout,
51524
51740
  mobileOverlay
51525
51741
  ],
51526
51742
  props({
@@ -59742,7 +59958,7 @@ function resolveAccordionIconStyle(iconStyle, iconTreatment) {
59742
59958
  case "minimal-cross":
59743
59959
  return "plus-minus";
59744
59960
  default:
59745
- return assertNever7(iconTreatment.iconSet);
59961
+ return assertNever8(iconTreatment.iconSet);
59746
59962
  }
59747
59963
  }
59748
59964
  return iconStyle && iconStyle in ICON_CONFIG ? iconStyle : "chevron";
@@ -59761,7 +59977,7 @@ function accordionIconColorStyle(iconTreatment) {
59761
59977
  function resolveIconColorToken(token) {
59762
59978
  return token === "muted" ? "mutedText" : token;
59763
59979
  }
59764
- function assertNever7(value) {
59980
+ function assertNever8(value) {
59765
59981
  throw new Error(`Unhandled accordion icon set: ${String(value)}`);
59766
59982
  }
59767
59983
 
@@ -66061,6 +66277,9 @@ function hydrateEntryLink(link2, context) {
66061
66277
  init_fragments2();
66062
66278
  init_colorStyles();
66063
66279
 
66280
+ // ../blocks/src/customBlockRegistry.ts
66281
+ init_src();
66282
+
66064
66283
  // ../blocks/src/sdkBlockTransform.ts
66065
66284
  init_augmentManifest();
66066
66285
  function transformSdkBlockToManifest(sdkBlock) {
@@ -66108,6 +66327,9 @@ function transformSdkBlockToDefinition(sdkBlock) {
66108
66327
  }
66109
66328
 
66110
66329
  // ../blocks/src/customBlockRegistry.ts
66330
+ var defaultCustomBlockSourcePolicy = {
66331
+ kind: "canonical-db-fallback-sdk"
66332
+ };
66111
66333
  function isCustomBlockKind(blockKind) {
66112
66334
  return blockKind.startsWith("custom.");
66113
66335
  }
@@ -66134,39 +66356,86 @@ function toResolvedCustomBlock(manifest, source) {
66134
66356
  )
66135
66357
  };
66136
66358
  }
66359
+ function planCustomBlockRegistryResolution({
66360
+ sdkConfig,
66361
+ customBlocks = [],
66362
+ policy = defaultCustomBlockSourcePolicy
66363
+ }) {
66364
+ switch (policy.kind) {
66365
+ case "canonical-db-fallback-sdk": {
66366
+ const entriesByKind = /* @__PURE__ */ new Map();
66367
+ const conflicts = [];
66368
+ for (const customBlock of customBlocks) {
66369
+ entriesByKind.set(
66370
+ customBlock.manifest.id,
66371
+ toResolvedCustomBlock(customBlock.manifest, customBlock.source)
66372
+ );
66373
+ }
66374
+ for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
66375
+ const existing = entriesByKind.get(sdkBlock.id);
66376
+ if (existing) {
66377
+ conflicts.push({
66378
+ kind: "conflict",
66379
+ blockKind: existing.blockKind,
66380
+ winner: existing.source,
66381
+ loser: { kind: "sdk-config" },
66382
+ reason: "db-canonical-sdk-fallback"
66383
+ });
66384
+ continue;
66385
+ }
66386
+ entriesByKind.set(
66387
+ sdkBlock.id,
66388
+ toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
66389
+ );
66390
+ }
66391
+ return {
66392
+ policy,
66393
+ entries: Array.from(entriesByKind.values()),
66394
+ conflicts
66395
+ };
66396
+ }
66397
+ }
66398
+ }
66137
66399
  function createCustomBlockRegistry({
66138
66400
  sdkConfig,
66139
66401
  customBlocks = [],
66402
+ policy = defaultCustomBlockSourcePolicy,
66140
66403
  onConflict
66141
66404
  }) {
66142
- const entriesByKind = /* @__PURE__ */ new Map();
66143
- for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
66144
- entriesByKind.set(
66145
- sdkBlock.id,
66146
- toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" })
66147
- );
66148
- }
66149
- for (const customBlock of customBlocks) {
66150
- const existing = entriesByKind.get(customBlock.manifest.id);
66151
- if (existing) {
66152
- onConflict?.(
66153
- `Skipping DB custom block "${customBlock.manifest.id}" - conflicts with SDK config block`
66154
- );
66155
- continue;
66156
- }
66157
- entriesByKind.set(
66158
- customBlock.manifest.id,
66159
- toResolvedCustomBlock(customBlock.manifest, customBlock.source)
66405
+ const plan = planCustomBlockRegistryResolution({
66406
+ sdkConfig,
66407
+ customBlocks,
66408
+ policy
66409
+ });
66410
+ const entriesByKind = new Map(
66411
+ plan.entries.map((entry) => [entry.blockKind, entry])
66412
+ );
66413
+ for (const conflict of plan.conflicts) {
66414
+ onConflict?.(
66415
+ `Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`
66160
66416
  );
66161
66417
  }
66162
66418
  return {
66163
- entries: Array.from(entriesByKind.values()),
66419
+ entries: plan.entries,
66420
+ conflicts: plan.conflicts,
66164
66421
  findManifest: (blockKind) => {
66165
66422
  if (!isCustomBlockKind(blockKind)) return void 0;
66166
66423
  return entriesByKind.get(blockKind);
66167
66424
  }
66168
66425
  };
66169
66426
  }
66427
+ function sourceLabel(source) {
66428
+ switch (source.kind) {
66429
+ case "managed-database":
66430
+ return "DB";
66431
+ case "sdk-synced":
66432
+ return "SDK-synced DB";
66433
+ case "sdk-config":
66434
+ return "SDK config";
66435
+ default:
66436
+ return assertNever3(source);
66437
+ }
66438
+ }
66170
66439
 
66171
66440
  // ../blocks/src/PageRenderer.tsx
66172
66441
  init_typeGuards2();
@@ -68269,9 +68538,9 @@ var containerResponsiveThemeCss = `/*
68269
68538
  }
68270
68539
 
68271
68540
  @layer rb-theme {
68272
- /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
68273
- :root {
68274
- /* --tb-primary: 17 24 39;
68541
+ /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
68542
+ :root {
68543
+ /* --tb-primary: 17 24 39;
68275
68544
  --tb-text: 17 24 39;
68276
68545
  --tb-muted: 107 114 128;
68277
68546
  --tb-bg: 255 255 255;
@@ -68293,159 +68562,164 @@ var containerResponsiveThemeCss = `/*
68293
68562
 
68294
68563
  --motion-duration: 180ms;
68295
68564
  --motion-ease: cubic-bezier(.2,.8,.2,1); */
68296
- }
68565
+ }
68297
68566
 
68298
- /* -------------------------------------------------------------------------- */
68299
- /* Shared: Modal */
68300
- /* -------------------------------------------------------------------------- */
68567
+ /* -------------------------------------------------------------------------- */
68568
+ /* Shared: Modal */
68569
+ /* -------------------------------------------------------------------------- */
68301
68570
 
68302
- :where(.theme-scope) .rb-modal-overlay {
68303
- position: fixed;
68304
- inset: 0;
68305
- z-index: var(--rb-modal-z-index, 20000);
68306
- display: grid;
68307
- place-items: center;
68308
- padding: 1rem;
68309
- /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
68310
- background-color: rgba(0, 0, 0, 0.6);
68311
- background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
68312
- }
68571
+ :where(.theme-scope) .rb-modal-overlay {
68572
+ position: fixed;
68573
+ inset: 0;
68574
+ z-index: var(--rb-modal-z-index, 20000);
68575
+ display: grid;
68576
+ place-items: center;
68577
+ padding: 1rem;
68578
+ /* Keep a hard fallback so the overlay never becomes transparent due to invalid vars. */
68579
+ background-color: rgba(0, 0, 0, 0.6);
68580
+ background: var(--rb-modal-overlay-bg, rgba(0, 0, 0, 0.6));
68581
+ }
68313
68582
 
68314
- :where(.theme-scope) .rb-modal {
68315
- width: min(var(--rb-modal-max-width, 560px), 100%);
68316
- background: var(--rb-modal-bg, rgb(var(--tb-surface)));
68317
- border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
68318
- border-radius: var(--rb-modal-radius, var(--radius-card));
68319
- box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
68320
- }
68583
+ :where(.theme-scope) .rb-modal {
68584
+ width: min(var(--rb-modal-max-width, 560px), 100%);
68585
+ background: var(--rb-modal-bg, rgb(var(--tb-surface)));
68586
+ border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
68587
+ border-radius: var(--rb-modal-radius, var(--radius-card));
68588
+ box-shadow: var(--rb-modal-shadow, var(--shadow-lg, var(--shadow-elev)));
68589
+ }
68321
68590
 
68322
- :where(.theme-scope) .rb-modal__header {
68323
- display: flex;
68324
- align-items: center;
68325
- justify-content: space-between;
68326
- gap: 1rem;
68327
- padding: 1rem 1rem 0.75rem;
68328
- border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
68329
- }
68591
+ :where(.theme-scope) .rb-modal__header {
68592
+ display: flex;
68593
+ align-items: center;
68594
+ justify-content: space-between;
68595
+ gap: 1rem;
68596
+ padding: 1rem 1rem 0.75rem;
68597
+ border-bottom: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
68598
+ }
68330
68599
 
68331
- :where(.theme-scope) .rb-modal__title {
68332
- margin: 0;
68333
- font-family: var(--font-heading);
68334
- font-size: 1.0625rem;
68335
- font-weight: 600;
68336
- color: rgb(var(--tb-text));
68337
- }
68600
+ :where(.theme-scope) .rb-modal__title {
68601
+ margin: 0;
68602
+ font-family: var(--font-heading);
68603
+ font-size: 1.0625rem;
68604
+ font-weight: 600;
68605
+ color: rgb(var(--tb-text));
68606
+ }
68338
68607
 
68339
- :where(.theme-scope) .rb-modal__close {
68340
- background: transparent;
68341
- border: none;
68342
- width: 2.25rem;
68343
- height: 2.25rem;
68344
- padding: 0;
68345
- line-height: 1;
68346
- color: rgb(var(--tb-mutedText));
68347
- cursor: pointer;
68348
- display: grid;
68349
- place-items: center;
68350
- border-radius: var(--radius-control);
68351
- }
68608
+ :where(.theme-scope) .rb-modal__close {
68609
+ background: transparent;
68610
+ border: none;
68611
+ width: 2.25rem;
68612
+ height: 2.25rem;
68613
+ padding: 0;
68614
+ line-height: 1;
68615
+ color: rgb(var(--tb-mutedText));
68616
+ cursor: pointer;
68617
+ display: grid;
68618
+ place-items: center;
68619
+ border-radius: var(--radius-control);
68620
+ }
68352
68621
 
68353
- :where(.theme-scope) .rb-modal__close:hover {
68354
- color: rgb(var(--tb-text));
68355
- background: rgba(var(--tb-border), 0.2);
68356
- }
68622
+ :where(.theme-scope) .rb-modal__close:hover {
68623
+ color: rgb(var(--tb-text));
68624
+ background: rgba(var(--tb-border), 0.2);
68625
+ }
68357
68626
 
68358
- :where(.theme-scope) .rb-modal__close:focus-visible {
68359
- outline: none;
68360
- box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
68361
- }
68627
+ :where(.theme-scope) .rb-modal__close:focus-visible {
68628
+ outline: none;
68629
+ box-shadow: 0 0 0 3px rgba(var(--tb-primary), 0.15);
68630
+ }
68362
68631
 
68363
- :where(.theme-scope) .rb-modal__body {
68364
- padding: 0.875rem 1rem 1rem;
68365
- color: rgb(var(--tb-text));
68366
- font-size: 0.9375rem;
68367
- line-height: 1.45;
68368
- }
68632
+ :where(.theme-scope) .rb-modal__body {
68633
+ padding: 0.875rem 1rem 1rem;
68634
+ color: rgb(var(--tb-text));
68635
+ font-size: 0.9375rem;
68636
+ line-height: 1.45;
68637
+ }
68369
68638
 
68370
- /* -------------------------------------------------------------------------- */
68371
- /* Header: Mobile nav overlay transitions */
68372
- /* -------------------------------------------------------------------------- */
68639
+ /* -------------------------------------------------------------------------- */
68640
+ /* Header: Mobile nav overlay transitions */
68641
+ /* -------------------------------------------------------------------------- */
68373
68642
 
68374
- /* Keep the overlay in the DOM so we can transition opacity/transform.
68643
+ /* Keep the overlay in the DOM so we can transition opacity/transform.
68375
68644
  JS toggles \`aria-hidden\` + \`inert\` (via enhancer), and CSS uses pointer-events
68376
68645
  to prevent interaction while closed. */
68377
- .nav-mobile-overlay {
68378
- pointer-events: none;
68379
- /* Prevent transformed children (panel) from creating viewport scrollbars
68646
+ .nav-mobile-overlay {
68647
+ pointer-events: none;
68648
+ /* Prevent transformed children (panel) from creating viewport scrollbars
68380
68649
  during enter/exit transitions. */
68381
- overflow: hidden;
68382
- }
68383
-
68384
- .nav-mobile-overlay[aria-hidden="false"] {
68385
- pointer-events: auto;
68386
- }
68650
+ overflow: hidden;
68651
+ }
68387
68652
 
68388
- .nav-mobile-overlay .nav-mobile-backdrop {
68389
- opacity: 0;
68390
- transition: opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
68391
- }
68653
+ .nav-mobile-overlay[aria-hidden='false'] {
68654
+ pointer-events: auto;
68655
+ }
68392
68656
 
68393
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-backdrop {
68394
- opacity: 1;
68395
- }
68657
+ .nav-mobile-overlay .nav-mobile-backdrop {
68658
+ opacity: 0;
68659
+ transition: opacity var(--motion-duration, 180ms)
68660
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
68661
+ }
68396
68662
 
68397
- .nav-mobile-overlay .nav-mobile-panel {
68398
- opacity: 0;
68399
- transform: translate3d(12px, 0, 0);
68400
- overflow-x: hidden;
68401
- transition:
68402
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
68403
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
68404
- will-change: opacity, transform;
68405
- }
68663
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-backdrop {
68664
+ opacity: 1;
68665
+ }
68406
68666
 
68407
- .nav-mobile-overlay[aria-hidden="false"] .nav-mobile-panel {
68408
- opacity: 1;
68409
- transform: translate3d(0, 0, 0);
68410
- }
68667
+ .nav-mobile-overlay .nav-mobile-panel {
68668
+ opacity: 0;
68669
+ transform: translate3d(12px, 0, 0);
68670
+ overflow-x: hidden;
68671
+ transition:
68672
+ opacity var(--motion-duration, 180ms)
68673
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
68674
+ transform var(--motion-duration, 180ms)
68675
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
68676
+ will-change: opacity, transform;
68677
+ }
68411
68678
 
68412
- /* -------------------------------------------------------------------------- */
68413
- /* Header: Mobile toggle hamburger -> X */
68414
- /* -------------------------------------------------------------------------- */
68679
+ .nav-mobile-overlay[aria-hidden='false'] .nav-mobile-panel {
68680
+ opacity: 1;
68681
+ transform: translate3d(0, 0, 0);
68682
+ }
68415
68683
 
68416
- .nav-mobile-toggle .nav-mobile-bar {
68417
- transform-origin: center;
68418
- transition:
68419
- transform var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1)),
68420
- opacity var(--motion-duration, 180ms) var(--motion-ease, cubic-bezier(.2,.8,.2,1));
68421
- will-change: transform, opacity;
68422
- }
68684
+ /* -------------------------------------------------------------------------- */
68685
+ /* Header: Mobile toggle hamburger -> X */
68686
+ /* -------------------------------------------------------------------------- */
68423
68687
 
68424
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-top {
68425
- transform: translateY(6px) rotate(45deg);
68426
- }
68688
+ .nav-mobile-toggle .nav-mobile-bar {
68689
+ transform-origin: center;
68690
+ transition:
68691
+ transform var(--motion-duration, 180ms)
68692
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
68693
+ opacity var(--motion-duration, 180ms)
68694
+ var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
68695
+ will-change: transform, opacity;
68696
+ }
68427
68697
 
68428
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-middle {
68429
- opacity: 0;
68430
- }
68698
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-top {
68699
+ transform: translateY(6px) rotate(45deg);
68700
+ }
68431
68701
 
68432
- .nav-mobile-toggle[aria-expanded="true"] .nav-mobile-bar-bottom {
68433
- transform: translateY(-6px) rotate(-45deg);
68434
- }
68702
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-middle {
68703
+ opacity: 0;
68704
+ }
68435
68705
 
68436
- @media (prefers-reduced-motion: reduce) {
68437
- .nav-mobile-overlay .nav-mobile-backdrop,
68438
- .nav-mobile-overlay .nav-mobile-panel {
68439
- transition: none;
68440
- transform: none;
68706
+ .nav-mobile-toggle[aria-expanded='true'] .nav-mobile-bar-bottom {
68707
+ transform: translateY(-6px) rotate(-45deg);
68441
68708
  }
68442
68709
 
68443
- .nav-mobile-toggle .nav-mobile-bar {
68444
- transition: none;
68710
+ @media (prefers-reduced-motion: reduce) {
68711
+ .nav-mobile-overlay .nav-mobile-backdrop,
68712
+ .nav-mobile-overlay .nav-mobile-panel {
68713
+ transition: none;
68714
+ transform: none;
68715
+ }
68716
+
68717
+ .nav-mobile-toggle .nav-mobile-bar {
68718
+ transition: none;
68719
+ }
68445
68720
  }
68446
- }
68447
68721
 
68448
- /*
68722
+ /*
68449
68723
  * Theme Scope Styles
68450
68724
  *
68451
68725
  * IMPORTANT: All :where(.theme-scope) selectors are wrapped in :where() to give them
@@ -68455,790 +68729,838 @@ var containerResponsiveThemeCss = `/*
68455
68729
  * Example: \`h4 { color: white; }\` will override \`:where(:where(.theme-scope)) h4\`
68456
68730
  */
68457
68731
 
68458
- :where(:where(.theme-scope)) {
68459
- font-family: var(--font-body);
68460
- letter-spacing: var(--ls-body);
68461
- line-height: var(--lh-body);
68462
- font-weight: var(--font-weight-body);
68463
-
68464
- & h1,
68465
- & h2,
68466
- & h3,
68467
- & h4,
68468
- & h5,
68469
- & h6 {
68470
- font-family: var(--font-heading);
68471
- /* Color is set by generateTypographyCss.ts with full cascade:
68732
+ :where(:where(.theme-scope)) {
68733
+ font-family: var(--font-body);
68734
+ letter-spacing: var(--ls-body);
68735
+ line-height: var(--lh-body);
68736
+ font-weight: var(--font-weight-body);
68737
+
68738
+ & h1,
68739
+ & h2,
68740
+ & h3,
68741
+ & h4,
68742
+ & h5,
68743
+ & h6 {
68744
+ font-family: var(--font-heading);
68745
+ /* Color is set by generateTypographyCss.ts with full cascade:
68472
68746
  --section-heading-color -> --section-text-color -> --hc-hN -> --hc-heading -> inherit */
68473
- font-weight: var(--font-weight-heading);
68474
- text-transform: var(--tt-heading);
68475
- font-variant-caps: var(--fv-heading);
68747
+ font-weight: var(--font-weight-heading);
68748
+ text-transform: var(--tt-heading);
68749
+ font-variant-caps: var(--fv-heading);
68750
+ }
68476
68751
  }
68477
- }
68478
68752
 
68479
- /* Heading typographic overrides (fallback to defaults when not provided) */
68480
- :where(:where(.theme-scope)) h1 {
68481
- letter-spacing: var(--ls-h1, var(--ls-heading));
68482
- line-height: var(--lh-h1, var(--lh-heading));
68483
- font-weight: var(--fw-h1, var(--font-weight-heading));
68484
- }
68485
- :where(:where(.theme-scope)) h2 {
68486
- letter-spacing: var(--ls-h2, var(--ls-heading));
68487
- line-height: var(--lh-h2, var(--lh-heading));
68488
- font-weight: var(--fw-h2, var(--font-weight-heading));
68489
- }
68490
- :where(:where(.theme-scope)) h3 {
68491
- letter-spacing: var(--ls-h3, var(--ls-heading));
68492
- line-height: var(--lh-h3, var(--lh-heading));
68493
- font-weight: var(--fw-h3, var(--font-weight-heading));
68494
- }
68495
- :where(:where(.theme-scope)) h4,
68496
- :where(:where(.theme-scope)) h5,
68497
- :where(:where(.theme-scope)) h6 {
68498
- letter-spacing: var(--ls-heading);
68499
- line-height: var(--lh-heading);
68500
- }
68501
- :where(:where(.theme-scope)) h4 {
68502
- font-weight: var(--fw-h4, var(--font-weight-heading));
68503
- }
68504
- :where(:where(.theme-scope)) h5 {
68505
- font-weight: var(--fw-h5, var(--font-weight-heading));
68506
- }
68507
- :where(:where(.theme-scope)) h6 {
68508
- font-weight: var(--fw-h6, var(--font-weight-heading));
68509
- }
68753
+ /* Heading typographic overrides (fallback to defaults when not provided) */
68754
+ :where(:where(.theme-scope)) h1 {
68755
+ letter-spacing: var(--ls-h1, var(--ls-heading));
68756
+ line-height: var(--lh-h1, var(--lh-heading));
68757
+ font-weight: var(--fw-h1, var(--font-weight-heading));
68758
+ }
68759
+ :where(:where(.theme-scope)) h2 {
68760
+ letter-spacing: var(--ls-h2, var(--ls-heading));
68761
+ line-height: var(--lh-h2, var(--lh-heading));
68762
+ font-weight: var(--fw-h2, var(--font-weight-heading));
68763
+ }
68764
+ :where(:where(.theme-scope)) h3 {
68765
+ letter-spacing: var(--ls-h3, var(--ls-heading));
68766
+ line-height: var(--lh-h3, var(--lh-heading));
68767
+ font-weight: var(--fw-h3, var(--font-weight-heading));
68768
+ }
68769
+ :where(:where(.theme-scope)) h4,
68770
+ :where(:where(.theme-scope)) h5,
68771
+ :where(:where(.theme-scope)) h6 {
68772
+ letter-spacing: var(--ls-heading);
68773
+ line-height: var(--lh-heading);
68774
+ }
68775
+ :where(:where(.theme-scope)) h4 {
68776
+ font-weight: var(--fw-h4, var(--font-weight-heading));
68777
+ }
68778
+ :where(:where(.theme-scope)) h5 {
68779
+ font-weight: var(--fw-h5, var(--font-weight-heading));
68780
+ }
68781
+ :where(:where(.theme-scope)) h6 {
68782
+ font-weight: var(--fw-h6, var(--font-weight-heading));
68783
+ }
68510
68784
 
68511
- /* Rich text element spacing based on theme rhythm */
68512
- :where(.theme-scope) .rb-prose h1 {
68513
- margin-top: calc(var(--rt-space-y) * 1.6);
68514
- margin-bottom: calc(var(--rt-space-y) * 0.8);
68515
- }
68516
- :where(.theme-scope) .rb-prose h2 {
68517
- margin-top: calc(var(--rt-space-y) * 1.4);
68518
- margin-bottom: calc(var(--rt-space-y) * 0.7);
68519
- }
68520
- :where(.theme-scope) .rb-prose h3 {
68521
- margin-top: calc(var(--rt-space-y) * 1.2);
68522
- margin-bottom: calc(var(--rt-space-y) * 0.6);
68523
- }
68524
- :where(.theme-scope) .rb-prose h4 {
68525
- margin-top: calc(var(--rt-space-y) * 1);
68526
- margin-bottom: calc(var(--rt-space-y) * 0.5);
68527
- }
68528
- :where(.theme-scope) .rb-prose h5 {
68529
- margin-top: calc(var(--rt-space-y) * 0.9);
68530
- margin-bottom: calc(var(--rt-space-y) * 0.45);
68531
- }
68532
- :where(.theme-scope) .rb-prose h6 {
68533
- margin-top: calc(var(--rt-space-y) * 0.8);
68534
- margin-bottom: calc(var(--rt-space-y) * 0.4);
68535
- }
68536
- :where(.theme-scope) .rb-prose p {
68537
- margin: var(--rt-space-y) 0;
68538
- }
68539
- :where(.theme-scope) .rb-prose img {
68540
- display: block;
68541
- max-width: 100%;
68542
- height: auto;
68543
- margin: calc(var(--rt-space-y) * 1) 0;
68544
- }
68545
- :where(.theme-scope) .rb-prose ul,
68546
- :where(.theme-scope) .rb-prose ol {
68547
- margin: var(--rt-space-y) 0;
68548
- padding-left: 1.25rem;
68549
- }
68550
- :where(.theme-scope) .rb-prose ul {
68551
- list-style-type: disc;
68552
- }
68553
- :where(.theme-scope) .rb-prose ol {
68554
- list-style-type: decimal;
68555
- }
68556
- :where(.theme-scope) .rb-prose ul ul {
68557
- list-style-type: circle;
68558
- }
68559
- :where(.theme-scope) .rb-prose ul ul ul {
68560
- list-style-type: square;
68561
- }
68562
- :where(.theme-scope) .rb-prose ol ol {
68563
- list-style-type: lower-alpha;
68564
- }
68565
- :where(.theme-scope) .rb-prose ol ol ol {
68566
- list-style-type: lower-roman;
68567
- }
68568
- :where(.theme-scope) .rb-prose blockquote {
68569
- margin: calc(var(--rt-space-y) * 1) 0;
68570
- padding-left: 1rem;
68571
- border-left: 3px solid rgb(var(--tb-border));
68572
- }
68573
- :where(.theme-scope) .rb-prose > :first-child {
68574
- margin-top: 0;
68575
- }
68576
- :where(.theme-scope) .rb-prose > :last-child {
68577
- margin-bottom: 0;
68578
- }
68785
+ /* Rich text element spacing based on theme rhythm */
68786
+ :where(.theme-scope) .rb-prose h1 {
68787
+ margin-top: calc(var(--rt-space-y) * 1.6);
68788
+ margin-bottom: calc(var(--rt-space-y) * 0.8);
68789
+ }
68790
+ :where(.theme-scope) .rb-prose h2 {
68791
+ margin-top: calc(var(--rt-space-y) * 1.4);
68792
+ margin-bottom: calc(var(--rt-space-y) * 0.7);
68793
+ }
68794
+ :where(.theme-scope) .rb-prose h3 {
68795
+ margin-top: calc(var(--rt-space-y) * 1.2);
68796
+ margin-bottom: calc(var(--rt-space-y) * 0.6);
68797
+ }
68798
+ :where(.theme-scope) .rb-prose h4 {
68799
+ margin-top: calc(var(--rt-space-y) * 1);
68800
+ margin-bottom: calc(var(--rt-space-y) * 0.5);
68801
+ }
68802
+ :where(.theme-scope) .rb-prose h5 {
68803
+ margin-top: calc(var(--rt-space-y) * 0.9);
68804
+ margin-bottom: calc(var(--rt-space-y) * 0.45);
68805
+ }
68806
+ :where(.theme-scope) .rb-prose h6 {
68807
+ margin-top: calc(var(--rt-space-y) * 0.8);
68808
+ margin-bottom: calc(var(--rt-space-y) * 0.4);
68809
+ }
68810
+ :where(.theme-scope) .rb-prose p {
68811
+ margin: var(--rt-space-y) 0;
68812
+ }
68813
+ :where(.theme-scope) .rb-prose img {
68814
+ display: block;
68815
+ max-width: 100%;
68816
+ height: auto;
68817
+ margin: calc(var(--rt-space-y) * 1) 0;
68818
+ }
68819
+ :where(.theme-scope) .rb-prose ul,
68820
+ :where(.theme-scope) .rb-prose ol {
68821
+ margin: var(--rt-space-y) 0;
68822
+ padding-left: 1.25rem;
68823
+ }
68824
+ :where(.theme-scope) .rb-prose ul {
68825
+ list-style-type: disc;
68826
+ }
68827
+ :where(.theme-scope) .rb-prose ol {
68828
+ list-style-type: decimal;
68829
+ }
68830
+ :where(.theme-scope) .rb-prose ul ul {
68831
+ list-style-type: circle;
68832
+ }
68833
+ :where(.theme-scope) .rb-prose ul ul ul {
68834
+ list-style-type: square;
68835
+ }
68836
+ :where(.theme-scope) .rb-prose ol ol {
68837
+ list-style-type: lower-alpha;
68838
+ }
68839
+ :where(.theme-scope) .rb-prose ol ol ol {
68840
+ list-style-type: lower-roman;
68841
+ }
68842
+ :where(.theme-scope) .rb-prose blockquote {
68843
+ margin: calc(var(--rt-space-y) * 1) 0;
68844
+ padding-left: 1rem;
68845
+ border-left: 3px solid rgb(var(--tb-border));
68846
+ }
68847
+ :where(.theme-scope) .rb-prose > :first-child {
68848
+ margin-top: 0;
68849
+ }
68850
+ :where(.theme-scope) .rb-prose > :last-child {
68851
+ margin-bottom: 0;
68852
+ }
68579
68853
 
68580
- /* Prose color overrides - use theme CSS variables instead of hardcoded colors
68854
+ /* Prose color overrides - use theme CSS variables instead of hardcoded colors
68581
68855
  * This makes prose elements automatically adapt to light/dark themes */
68582
- :where(.theme-scope) .rb-prose {
68583
- /* Body text inherits from parent, which should already have theme color */
68584
- color: inherit;
68585
- }
68856
+ :where(.theme-scope) .rb-prose {
68857
+ /* Body text inherits from parent, which should already have theme color */
68858
+ color: inherit;
68859
+ }
68586
68860
 
68587
- /* Prose size variants (theme-aware, CSS-only) */
68588
- :where(.theme-scope) {
68589
- /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
68590
- --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
68591
- --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
68861
+ /* Prose size variants (theme-aware, CSS-only) */
68862
+ :where(.theme-scope) {
68863
+ /* Body scale + rhythm come from the active theme runtime (ThemeScope) */
68864
+ --rb-prose-sm-font-size: calc(var(--fs-body, 16px) * 0.875);
68865
+ --rb-prose-sm-line-height: calc(var(--lh-body, 1.65) - 0.05);
68592
68866
 
68593
- --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
68594
- --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
68867
+ --rb-prose-lg-font-size: calc(var(--fs-body, 16px) * 1.125);
68868
+ --rb-prose-lg-line-height: calc(var(--lh-body, 1.65) + 0.1);
68595
68869
 
68596
- /* Applied at >= 640px; below that, rb-prose-lg is typically used */
68597
- --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
68598
- --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
68599
- }
68870
+ /* Applied at >= 640px; below that, rb-prose-lg is typically used */
68871
+ --rb-prose-xl-sm-font-size: calc(var(--fs-body, 16px) * 1.25);
68872
+ --rb-prose-xl-sm-line-height: calc(var(--lh-body, 1.65) + 0.15);
68873
+ }
68600
68874
 
68601
- :where(.theme-scope) .rb-prose-sm {
68602
- font-size: var(--rb-prose-sm-font-size);
68603
- line-height: var(--rb-prose-sm-line-height);
68604
- }
68605
- :where(.theme-scope) .rb-prose-lg {
68606
- font-size: var(--rb-prose-lg-font-size);
68607
- line-height: var(--rb-prose-lg-line-height);
68608
- }
68609
- @container rb-site (min-width: 640px) {
68875
+ :where(.theme-scope) .rb-prose-sm {
68876
+ font-size: var(--rb-prose-sm-font-size);
68877
+ line-height: var(--rb-prose-sm-line-height);
68878
+ }
68879
+ :where(.theme-scope) .rb-prose-lg {
68880
+ font-size: var(--rb-prose-lg-font-size);
68881
+ line-height: var(--rb-prose-lg-line-height);
68882
+ }
68883
+ @container rb-site (min-width: 640px) {
68610
68884
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68611
68885
  :where(.theme-scope) .rb-prose-xl-sm {
68612
- font-size: var(--rb-prose-xl-sm-font-size);
68613
- line-height: var(--rb-prose-xl-sm-line-height);
68614
- }
68886
+ font-size: var(--rb-prose-xl-sm-font-size);
68887
+ line-height: var(--rb-prose-xl-sm-line-height);
68888
+ }
68615
68889
  }
68616
68890
  }
68617
68891
 
68618
- /* Neutral prose uses theme text color by default */
68619
- :where(.theme-scope) .rb-prose-neutral {
68620
- color: rgb(var(--tb-text));
68621
- }
68892
+ /* Neutral prose uses theme text color by default */
68893
+ :where(.theme-scope) .rb-prose-neutral {
68894
+ color: rgb(var(--tb-text));
68895
+ }
68622
68896
 
68623
- :where(.theme-scope) .rb-prose p,
68624
- :where(.theme-scope) .rb-prose li {
68625
- /* Body text uses inherited color (set by fragment via textColorStyle) */
68626
- color: inherit;
68627
- }
68897
+ :where(.theme-scope) .rb-prose p,
68898
+ :where(.theme-scope) .rb-prose li {
68899
+ /* Body text uses inherited color (set by fragment via textColorStyle) */
68900
+ color: inherit;
68901
+ }
68628
68902
 
68629
- :where(.theme-scope) .rb-prose h1,
68630
- :where(.theme-scope) .rb-prose h2,
68631
- :where(.theme-scope) .rb-prose h3,
68632
- :where(.theme-scope) .rb-prose h4,
68633
- :where(.theme-scope) .rb-prose h5,
68634
- :where(.theme-scope) .rb-prose h6 {
68635
- /* Headings inherit from parent or use theme text color */
68636
- color: inherit;
68637
- }
68903
+ :where(.theme-scope) .rb-prose h1,
68904
+ :where(.theme-scope) .rb-prose h2,
68905
+ :where(.theme-scope) .rb-prose h3,
68906
+ :where(.theme-scope) .rb-prose h4,
68907
+ :where(.theme-scope) .rb-prose h5,
68908
+ :where(.theme-scope) .rb-prose h6 {
68909
+ /* Headings inherit from parent or use theme text color */
68910
+ color: inherit;
68911
+ }
68638
68912
 
68639
- :where(.theme-scope) .rb-prose strong,
68640
- :where(.theme-scope) .rb-prose b {
68641
- /* Bold text inherits color but increases weight */
68642
- color: inherit;
68643
- font-weight: 600;
68644
- }
68913
+ :where(.theme-scope) .rb-prose strong,
68914
+ :where(.theme-scope) .rb-prose b {
68915
+ /* Bold text inherits color but increases weight */
68916
+ color: inherit;
68917
+ font-weight: 600;
68918
+ }
68645
68919
 
68646
- :where(.theme-scope) .rb-prose em,
68647
- :where(.theme-scope) .rb-prose i {
68648
- /* Italic text inherits color */
68649
- color: inherit;
68650
- }
68920
+ :where(.theme-scope) .rb-prose em,
68921
+ :where(.theme-scope) .rb-prose i {
68922
+ /* Italic text inherits color */
68923
+ color: inherit;
68924
+ }
68651
68925
 
68652
- :where(.theme-scope) .rb-prose a {
68653
- /* Global prose link style with theme-level overrides */
68654
- color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
68655
- text-decoration-line: var(--rb-prose-link-decoration-line, underline);
68656
- text-decoration-style: var(--rb-prose-link-underline-style, solid);
68657
- text-decoration-thickness: var(--rb-prose-link-underline-thickness, from-font);
68658
- text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
68659
- text-decoration-color: var(--rb-prose-link-decoration-color, rgba(var(--tb-primary), 0.3));
68660
- transition:
68661
- color 150ms ease,
68662
- text-decoration-color 150ms ease;
68663
- }
68926
+ :where(.theme-scope) .rb-prose a {
68927
+ /* Global prose link style with theme-level overrides */
68928
+ color: var(--rb-prose-link-color, rgb(var(--tb-primary)));
68929
+ text-decoration-line: var(--rb-prose-link-decoration-line, underline);
68930
+ text-decoration-style: var(--rb-prose-link-underline-style, solid);
68931
+ text-decoration-thickness: var(
68932
+ --rb-prose-link-underline-thickness,
68933
+ from-font
68934
+ );
68935
+ text-underline-offset: var(--rb-prose-link-underline-offset, 0.14em);
68936
+ text-decoration-color: var(
68937
+ --rb-prose-link-decoration-color,
68938
+ rgba(var(--tb-primary), 0.3)
68939
+ );
68940
+ transition:
68941
+ color 150ms ease,
68942
+ text-decoration-color 150ms ease;
68943
+ }
68664
68944
 
68665
- :where(.theme-scope) .rb-prose a:hover {
68666
- color: var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))));
68667
- text-decoration-color: var(
68668
- --rb-prose-link-hover-decoration-color,
68669
- var(--rb-prose-link-hover-color, var(--rb-prose-link-color, rgb(var(--tb-primary))))
68670
- );
68671
- }
68945
+ :where(.theme-scope) .rb-prose a:hover {
68946
+ color: var(
68947
+ --rb-prose-link-hover-color,
68948
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
68949
+ );
68950
+ text-decoration-color: var(
68951
+ --rb-prose-link-hover-decoration-color,
68952
+ var(
68953
+ --rb-prose-link-hover-color,
68954
+ var(--rb-prose-link-color, rgb(var(--tb-primary)))
68955
+ )
68956
+ );
68957
+ }
68672
68958
 
68673
- :where(.theme-scope) .rb-prose blockquote {
68674
- /* Blockquotes use muted text color */
68675
- color: rgb(var(--tb-mutedText));
68676
- border-left-color: rgb(var(--tb-border));
68677
- }
68959
+ :where(.theme-scope) .rb-prose blockquote {
68960
+ /* Blockquotes use muted text color */
68961
+ color: rgb(var(--tb-mutedText));
68962
+ border-left-color: rgb(var(--tb-border));
68963
+ }
68678
68964
 
68679
- :where(.theme-scope) .fragment-quote-body blockquote {
68680
- /* Quote fragment should not get the generic prose blockquote left border/indent. */
68681
- border-left: 0;
68682
- padding-left: 0;
68683
- }
68965
+ :where(.theme-scope) .fragment-quote-body blockquote {
68966
+ /* Quote fragment should not get the generic prose blockquote left border/indent. */
68967
+ border-left: 0;
68968
+ padding-left: 0;
68969
+ }
68684
68970
 
68685
- :where(.theme-scope) .rb-columns-equal-height {
68686
- /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
68687
- container-type: inline-size;
68971
+ :where(.theme-scope) .rb-columns-equal-height {
68972
+ /* Needed so we can use container query units (\`cqw\`) for width-based tile sizing. */
68973
+ container-type: inline-size;
68688
68974
 
68689
- --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
68690
- --rb-columns-gap: var(--rb-semantic-gap, 0px);
68691
- --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
68975
+ --rb-columns-cols: var(--rb-columns-cols-mobile, 1);
68976
+ --rb-columns-gap: var(--rb-semantic-gap, 0px);
68977
+ --rb-columns-tile-ar: var(--rb-columns-tile-ar, 1);
68692
68978
 
68693
- --rb-columns-tile-w: calc(
68694
- (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) / var(--rb-columns-cols)
68695
- );
68696
- --rb-columns-tile-h: calc(var(--rb-columns-tile-w) * var(--rb-columns-tile-ar));
68697
- }
68979
+ --rb-columns-tile-w: calc(
68980
+ (100cqw - (var(--rb-columns-cols) - 1) * var(--rb-columns-gap)) /
68981
+ var(--rb-columns-cols)
68982
+ );
68983
+ --rb-columns-tile-h: calc(
68984
+ var(--rb-columns-tile-w) * var(--rb-columns-tile-ar)
68985
+ );
68986
+ }
68698
68987
 
68699
- @container rb-site (min-width: 768px) {
68988
+ @container rb-site (min-width: 768px) {
68700
68989
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68701
68990
  :where(.theme-scope) .rb-columns-equal-height {
68702
- --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
68703
- }
68991
+ --rb-columns-cols: var(--rb-columns-cols-md, var(--rb-columns-cols));
68992
+ }
68704
68993
  }
68705
68994
  }
68706
68995
 
68707
- @container rb-site (min-width: 1024px) {
68996
+ @container rb-site (min-width: 1024px) {
68708
68997
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68709
68998
  :where(.theme-scope) .rb-columns-equal-height {
68710
- --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
68711
- }
68999
+ --rb-columns-cols: var(--rb-columns-cols-lg, var(--rb-columns-cols));
69000
+ }
68712
69001
  }
68713
69002
  }
68714
69003
 
68715
- @container rb-site (min-width: 1280px) {
69004
+ @container rb-site (min-width: 1280px) {
68716
69005
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68717
69006
  :where(.theme-scope) .rb-columns-equal-height {
68718
- --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
68719
- }
69007
+ --rb-columns-cols: var(--rb-columns-cols-xl, var(--rb-columns-cols));
69008
+ }
68720
69009
  }
68721
69010
  }
68722
69011
 
68723
- :where(.theme-scope) .rb-columns-equal-height > * {
68724
- height: var(--rb-columns-tile-h);
68725
- }
69012
+ :where(.theme-scope) .rb-columns-equal-height > * {
69013
+ height: var(--rb-columns-tile-h);
69014
+ }
68726
69015
 
68727
- :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
68728
- /*
69016
+ :where(.theme-scope) .rb-columns-equal-height > .rb-h-full {
69017
+ /*
68729
69018
  Grid items commonly include \`rb-h-full\` (height: 100%) to stretch within
68730
69019
  their row. In equal-height mode we instead want a fixed tile height so the
68731
69020
  spanning editorial tile doesn't become taller due to its larger width +
68732
69021
  aspect-ratio.
68733
69022
  */
68734
- height: var(--rb-columns-tile-h);
68735
- min-height: var(--rb-columns-tile-h);
68736
- max-height: var(--rb-columns-tile-h);
68737
- }
69023
+ height: var(--rb-columns-tile-h);
69024
+ min-height: var(--rb-columns-tile-h);
69025
+ max-height: var(--rb-columns-tile-h);
69026
+ }
68738
69027
 
68739
- :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
68740
- width: 100%;
68741
- height: 100%;
68742
- overflow: hidden;
68743
- }
69028
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image-frame {
69029
+ width: 100%;
69030
+ height: 100%;
69031
+ overflow: hidden;
69032
+ }
68744
69033
 
68745
- :where(.theme-scope) .rb-columns-equal-height .fragment-image {
68746
- width: 100%;
68747
- height: 100%;
68748
- object-fit: cover;
68749
- }
69034
+ :where(.theme-scope) .rb-columns-equal-height .fragment-image {
69035
+ width: 100%;
69036
+ height: 100%;
69037
+ object-fit: cover;
69038
+ }
68750
69039
 
68751
- :where(.theme-scope) .rb-prose code {
68752
- /* Inline code uses text color with surface background */
68753
- color: inherit;
68754
- background-color: rgba(var(--tb-surface), 0.5);
68755
- padding: 0.125rem 0.25rem;
68756
- border-radius: 0.25rem;
68757
- font-size: 0.875em;
68758
- }
69040
+ :where(.theme-scope) .rb-prose code {
69041
+ /* Inline code uses text color with surface background */
69042
+ color: inherit;
69043
+ background-color: rgba(var(--tb-surface), 0.5);
69044
+ padding: 0.125rem 0.25rem;
69045
+ border-radius: 0.25rem;
69046
+ font-size: 0.875em;
69047
+ }
68759
69048
 
68760
- :where(.theme-scope) .rb-prose pre {
68761
- /* Code blocks */
68762
- background-color: rgb(var(--tb-surface));
68763
- color: rgb(var(--tb-text));
68764
- border: 1px solid rgb(var(--tb-border));
68765
- border-radius: 0.5rem;
68766
- padding: 1rem;
68767
- overflow-x: auto;
68768
- }
69049
+ :where(.theme-scope) .rb-prose pre {
69050
+ /* Code blocks */
69051
+ background-color: rgb(var(--tb-surface));
69052
+ color: rgb(var(--tb-text));
69053
+ border: 1px solid rgb(var(--tb-border));
69054
+ border-radius: 0.5rem;
69055
+ padding: 1rem;
69056
+ overflow-x: auto;
69057
+ }
68769
69058
 
68770
- :where(.theme-scope) .rb-prose pre code {
68771
- /* Code inside pre blocks */
68772
- background-color: transparent;
68773
- padding: 0;
68774
- color: inherit;
68775
- }
69059
+ :where(.theme-scope) .rb-prose pre code {
69060
+ /* Code inside pre blocks */
69061
+ background-color: transparent;
69062
+ padding: 0;
69063
+ color: inherit;
69064
+ }
68776
69065
 
68777
- :where(.theme-scope) .rb-prose hr {
68778
- /* Horizontal rules */
68779
- border-color: rgb(var(--tb-border));
68780
- }
69066
+ :where(.theme-scope) .rb-prose hr {
69067
+ /* Horizontal rules */
69068
+ border-color: rgb(var(--tb-border));
69069
+ }
68781
69070
 
68782
- :where(.theme-scope) .rb-prose ul > li::marker,
68783
- :where(.theme-scope) .rb-prose ol > li::marker {
68784
- /* List markers use muted text color */
68785
- color: rgb(var(--tb-mutedText));
68786
- }
69071
+ :where(.theme-scope) .rb-prose ul > li::marker,
69072
+ :where(.theme-scope) .rb-prose ol > li::marker {
69073
+ /* List markers use muted text color */
69074
+ color: rgb(var(--tb-mutedText));
69075
+ }
68787
69076
 
68788
- /*
69077
+ /*
68789
69078
  /* Density helpers */
68790
- :where(.theme-scope) .section-pad {
68791
- padding-top: 4rem;
68792
- padding-bottom: 4rem;
68793
- }
68794
- :where(.theme-scope)[data-density="airy"] .section-pad {
68795
- padding-top: 4.5rem;
68796
- padding-bottom: 4.5rem;
68797
- }
68798
- :where(.theme-scope)[data-density="compact"] .section-pad {
68799
- padding-top: 3rem;
68800
- padding-bottom: 3rem;
68801
- }
68802
-
68803
- :where(.theme-scope) .rounded-control {
68804
- border-radius: var(--radius-control);
68805
- }
68806
- :where(.theme-scope) .rounded-card {
68807
- border-radius: var(--radius-card);
68808
- }
69079
+ :where(.theme-scope) .section-pad {
69080
+ padding-top: 4rem;
69081
+ padding-bottom: 4rem;
69082
+ }
69083
+ :where(.theme-scope)[data-density='airy'] .section-pad {
69084
+ padding-top: 4.5rem;
69085
+ padding-bottom: 4.5rem;
69086
+ }
69087
+ :where(.theme-scope)[data-density='compact'] .section-pad {
69088
+ padding-top: 3rem;
69089
+ padding-bottom: 3rem;
69090
+ }
68809
69091
 
68810
- :where(.theme-scope) .shadow-elev {
68811
- box-shadow: var(--shadow-elev);
68812
- }
69092
+ :where(.theme-scope) .rounded-control {
69093
+ border-radius: var(--radius-control);
69094
+ }
69095
+ :where(.theme-scope) .rounded-card {
69096
+ border-radius: var(--radius-card);
69097
+ }
68813
69098
 
68814
- :where(.theme-scope) .font-heading {
68815
- font-family: var(--font-heading);
68816
- }
68817
- :where(.theme-scope) .font-body {
68818
- font-family: var(--font-body);
68819
- }
69099
+ :where(.theme-scope) .shadow-elev {
69100
+ box-shadow: var(--shadow-elev);
69101
+ }
68820
69102
 
68821
- :where(.theme-scope) .text-h1 {
68822
- font-size: var(--fs-h1);
68823
- line-height: 1.1;
68824
- }
68825
- :where(.theme-scope) .text-h2 {
68826
- font-size: var(--fs-h2);
68827
- line-height: 1.15;
68828
- }
68829
- :where(.theme-scope) .text-h3 {
68830
- font-size: var(--fs-h3);
68831
- line-height: 1.2;
68832
- }
68833
- :where(.theme-scope) .text-body-size {
68834
- font-size: var(--fs-body);
68835
- }
69103
+ :where(.theme-scope) .font-heading {
69104
+ font-family: var(--font-heading);
69105
+ }
69106
+ :where(.theme-scope) .font-body {
69107
+ font-family: var(--font-body);
69108
+ }
68836
69109
 
68837
- :where(.theme-scope) .transition-theme {
68838
- transition: all var(--motion-duration) var(--motion-ease);
68839
- }
68840
- :where(.theme-scope) .transition-theme-standard {
68841
- transition: all var(--motion-duration) var(--motion-ease);
68842
- }
68843
- :where(.theme-scope) .transition-theme-subtle {
68844
- transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
68845
- }
68846
- :where(.theme-scope) .transition-theme-expressive {
68847
- transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
68848
- }
69110
+ :where(.theme-scope) .text-h1 {
69111
+ font-size: var(--fs-h1);
69112
+ line-height: 1.1;
69113
+ }
69114
+ :where(.theme-scope) .text-h2 {
69115
+ font-size: var(--fs-h2);
69116
+ line-height: 1.15;
69117
+ }
69118
+ :where(.theme-scope) .text-h3 {
69119
+ font-size: var(--fs-h3);
69120
+ line-height: 1.2;
69121
+ }
69122
+ :where(.theme-scope) .text-body-size {
69123
+ font-size: var(--fs-body);
69124
+ }
68849
69125
 
68850
- /* Shade tokens (50..950) for primary */
68851
- :where(.theme-scope) .from-primary-50 {
68852
- --rb-gradient-from: rgb(var(--tb-primary-50)) var(--rb-gradient-from-position);
68853
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
68854
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68855
- }
68856
- :where(.theme-scope) .to-primary-50 {
68857
- --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
68858
- }
68859
- :where(.theme-scope) .from-primary-100 {
68860
- --rb-gradient-from: rgb(var(--tb-primary-100))
68861
- var(--rb-gradient-from-position);
68862
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
68863
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68864
- }
68865
- :where(.theme-scope) .to-primary-100 {
68866
- --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
68867
- }
68868
- :where(.theme-scope) .from-primary-200 {
68869
- --rb-gradient-from: rgb(var(--tb-primary-200))
68870
- var(--rb-gradient-from-position);
68871
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
68872
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68873
- }
68874
- :where(.theme-scope) .to-primary-200 {
68875
- --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
68876
- }
68877
- :where(.theme-scope) .from-primary-300 {
68878
- --rb-gradient-from: rgb(var(--tb-primary-300))
68879
- var(--rb-gradient-from-position);
68880
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
68881
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68882
- }
68883
- :where(.theme-scope) .to-primary-300 {
68884
- --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
68885
- }
68886
- :where(.theme-scope) .from-primary-400 {
68887
- --rb-gradient-from: rgb(var(--tb-primary-400))
68888
- var(--rb-gradient-from-position);
68889
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
68890
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68891
- }
68892
- :where(.theme-scope) .to-primary-400 {
68893
- --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
68894
- }
68895
- :where(.theme-scope) .from-primary-500 {
68896
- --rb-gradient-from: rgb(var(--tb-primary-500))
68897
- var(--rb-gradient-from-position);
68898
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
68899
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68900
- }
68901
- :where(.theme-scope) .to-primary-500 {
68902
- --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
68903
- }
68904
- :where(.theme-scope) .from-primary-600 {
68905
- --rb-gradient-from: rgb(var(--tb-primary-600))
68906
- var(--rb-gradient-from-position);
68907
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
68908
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68909
- }
68910
- :where(.theme-scope) .to-primary-600 {
68911
- --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
68912
- }
68913
- :where(.theme-scope) .from-primary-700 {
68914
- --rb-gradient-from: rgb(var(--tb-primary-700))
68915
- var(--rb-gradient-from-position);
68916
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
68917
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68918
- }
68919
- :where(.theme-scope) .to-primary-700 {
68920
- --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
68921
- }
68922
- :where(.theme-scope) .from-primary-800 {
68923
- --rb-gradient-from: rgb(var(--tb-primary-800))
68924
- var(--rb-gradient-from-position);
68925
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
68926
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68927
- }
68928
- :where(.theme-scope) .to-primary-800 {
68929
- --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
68930
- }
68931
- :where(.theme-scope) .from-primary-900 {
68932
- --rb-gradient-from: rgb(var(--tb-primary-900))
68933
- var(--rb-gradient-from-position);
68934
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
68935
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68936
- }
68937
- :where(.theme-scope) .to-primary-900 {
68938
- --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
68939
- }
68940
- :where(.theme-scope) .from-primary-950 {
68941
- --rb-gradient-from: rgb(var(--tb-primary-950))
68942
- var(--rb-gradient-from-position);
68943
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
68944
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68945
- }
68946
- :where(.theme-scope) .to-primary-950 {
68947
- --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
68948
- }
68949
-
68950
- /* Shade tokens (50..950) for secondary */
68951
- :where(.theme-scope) .from-secondary-50 {
68952
- --rb-gradient-from: rgb(var(--tb-secondary-50))
68953
- var(--rb-gradient-from-position);
68954
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
68955
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68956
- }
68957
- :where(.theme-scope) .to-secondary-50 {
68958
- --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
68959
- }
68960
- :where(.theme-scope) .from-secondary-100 {
68961
- --rb-gradient-from: rgb(var(--tb-secondary-100))
68962
- var(--rb-gradient-from-position);
68963
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
68964
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68965
- }
68966
- :where(.theme-scope) .to-secondary-100 {
68967
- --rb-gradient-to: rgb(var(--tb-secondary-100)) var(--rb-gradient-to-position);
68968
- }
68969
- :where(.theme-scope) .from-secondary-200 {
68970
- --rb-gradient-from: rgb(var(--tb-secondary-200))
68971
- var(--rb-gradient-from-position);
68972
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
68973
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68974
- }
68975
- :where(.theme-scope) .to-secondary-200 {
68976
- --rb-gradient-to: rgb(var(--tb-secondary-200)) var(--rb-gradient-to-position);
68977
- }
68978
- :where(.theme-scope) .from-secondary-300 {
68979
- --rb-gradient-from: rgb(var(--tb-secondary-300))
68980
- var(--rb-gradient-from-position);
68981
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
68982
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68983
- }
68984
- :where(.theme-scope) .to-secondary-300 {
68985
- --rb-gradient-to: rgb(var(--tb-secondary-300)) var(--rb-gradient-to-position);
68986
- }
68987
- :where(.theme-scope) .from-secondary-400 {
68988
- --rb-gradient-from: rgb(var(--tb-secondary-400))
68989
- var(--rb-gradient-from-position);
68990
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
68991
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
68992
- }
68993
- :where(.theme-scope) .to-secondary-400 {
68994
- --rb-gradient-to: rgb(var(--tb-secondary-400)) var(--rb-gradient-to-position);
68995
- }
68996
- :where(.theme-scope) .from-secondary-500 {
68997
- --rb-gradient-from: rgb(var(--tb-secondary-500))
68998
- var(--rb-gradient-from-position);
68999
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
69000
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69001
- }
69002
- :where(.theme-scope) .to-secondary-500 {
69003
- --rb-gradient-to: rgb(var(--tb-secondary-500)) var(--rb-gradient-to-position);
69004
- }
69005
- :where(.theme-scope) .from-secondary-600 {
69006
- --rb-gradient-from: rgb(var(--tb-secondary-600))
69007
- var(--rb-gradient-from-position);
69008
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
69009
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69010
- }
69011
- :where(.theme-scope) .to-secondary-600 {
69012
- --rb-gradient-to: rgb(var(--tb-secondary-600)) var(--rb-gradient-to-position);
69013
- }
69014
- :where(.theme-scope) .from-secondary-700 {
69015
- --rb-gradient-from: rgb(var(--tb-secondary-700))
69016
- var(--rb-gradient-from-position);
69017
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
69018
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69019
- }
69020
- :where(.theme-scope) .to-secondary-700 {
69021
- --rb-gradient-to: rgb(var(--tb-secondary-700)) var(--rb-gradient-to-position);
69022
- }
69023
- :where(.theme-scope) .from-secondary-800 {
69024
- --rb-gradient-from: rgb(var(--tb-secondary-800))
69025
- var(--rb-gradient-from-position);
69026
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
69027
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69028
- }
69029
- :where(.theme-scope) .to-secondary-800 {
69030
- --rb-gradient-to: rgb(var(--tb-secondary-800)) var(--rb-gradient-to-position);
69031
- }
69032
- :where(.theme-scope) .from-secondary-900 {
69033
- --rb-gradient-from: rgb(var(--tb-secondary-900))
69034
- var(--rb-gradient-from-position);
69035
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
69036
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69037
- }
69038
- :where(.theme-scope) .to-secondary-900 {
69039
- --rb-gradient-to: rgb(var(--tb-secondary-900)) var(--rb-gradient-to-position);
69040
- }
69041
- :where(.theme-scope) .from-secondary-950 {
69042
- --rb-gradient-from: rgb(var(--tb-secondary-950))
69043
- var(--rb-gradient-from-position);
69044
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
69045
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69046
- }
69047
- :where(.theme-scope) .to-secondary-950 {
69048
- --rb-gradient-to: rgb(var(--tb-secondary-950)) var(--rb-gradient-to-position);
69049
- }
69050
-
69051
- /* Shade tokens (50..950) for accent */
69052
- :where(.theme-scope) .from-accent-50 {
69053
- --rb-gradient-from: rgb(var(--tb-accent-50)) var(--rb-gradient-from-position);
69054
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
69055
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69056
- }
69057
- :where(.theme-scope) .to-accent-50 {
69058
- --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
69059
- }
69060
- :where(.theme-scope) .from-accent-100 {
69061
- --rb-gradient-from: rgb(var(--tb-accent-100)) var(--rb-gradient-from-position);
69062
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
69063
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69064
- }
69065
- :where(.theme-scope) .to-accent-100 {
69066
- --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
69067
- }
69068
- :where(.theme-scope) .from-accent-200 {
69069
- --rb-gradient-from: rgb(var(--tb-accent-200)) var(--rb-gradient-from-position);
69070
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
69071
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69072
- }
69073
- :where(.theme-scope) .to-accent-200 {
69074
- --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
69075
- }
69076
- :where(.theme-scope) .from-accent-300 {
69077
- --rb-gradient-from: rgb(var(--tb-accent-300)) var(--rb-gradient-from-position);
69078
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
69079
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69080
- }
69081
- :where(.theme-scope) .to-accent-300 {
69082
- --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
69083
- }
69084
- :where(.theme-scope) .from-accent-400 {
69085
- --rb-gradient-from: rgb(var(--tb-accent-400)) var(--rb-gradient-from-position);
69086
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
69087
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69088
- }
69089
- :where(.theme-scope) .to-accent-400 {
69090
- --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
69091
- }
69092
- :where(.theme-scope) .from-accent-500 {
69093
- --rb-gradient-from: rgb(var(--tb-accent-500)) var(--rb-gradient-from-position);
69094
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
69095
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69096
- }
69097
- :where(.theme-scope) .to-accent-500 {
69098
- --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
69099
- }
69100
- :where(.theme-scope) .from-accent-600 {
69101
- --rb-gradient-from: rgb(var(--tb-accent-600)) var(--rb-gradient-from-position);
69102
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
69103
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69104
- }
69105
- :where(.theme-scope) .to-accent-600 {
69106
- --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
69107
- }
69108
- :where(.theme-scope) .from-accent-700 {
69109
- --rb-gradient-from: rgb(var(--tb-accent-700)) var(--rb-gradient-from-position);
69110
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
69111
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69112
- }
69113
- :where(.theme-scope) .to-accent-700 {
69114
- --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
69115
- }
69116
- :where(.theme-scope) .from-accent-800 {
69117
- --rb-gradient-from: rgb(var(--tb-accent-800)) var(--rb-gradient-from-position);
69118
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
69119
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69120
- }
69121
- :where(.theme-scope) .to-accent-800 {
69122
- --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
69123
- }
69124
- :where(.theme-scope) .from-accent-900 {
69125
- --rb-gradient-from: rgb(var(--tb-accent-900)) var(--rb-gradient-from-position);
69126
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
69127
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69128
- }
69129
- :where(.theme-scope) .to-accent-900 {
69130
- --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
69131
- }
69132
- :where(.theme-scope) .from-accent-950 {
69133
- --rb-gradient-from: rgb(var(--tb-accent-950)) var(--rb-gradient-from-position);
69134
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
69135
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69136
- }
69137
- :where(.theme-scope) .to-accent-950 {
69138
- --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
69139
- }
69126
+ :where(.theme-scope) .transition-theme {
69127
+ transition: all var(--motion-duration) var(--motion-ease);
69128
+ }
69129
+ :where(.theme-scope) .transition-theme-standard {
69130
+ transition: all var(--motion-duration) var(--motion-ease);
69131
+ }
69132
+ :where(.theme-scope) .transition-theme-subtle {
69133
+ transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease);
69134
+ }
69135
+ :where(.theme-scope) .transition-theme-expressive {
69136
+ transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease);
69137
+ }
69140
69138
 
69141
- /* Shade tokens (50..950) for neutral */
69142
- :where(.theme-scope) .from-neutral-50 {
69143
- --rb-gradient-from: rgb(var(--tb-neutral-50)) var(--rb-gradient-from-position);
69144
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
69145
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69146
- }
69147
- :where(.theme-scope) .to-neutral-50 {
69148
- --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
69149
- }
69150
- :where(.theme-scope) .from-neutral-100 {
69151
- --rb-gradient-from: rgb(var(--tb-neutral-100))
69152
- var(--rb-gradient-from-position);
69153
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
69154
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69155
- }
69156
- :where(.theme-scope) .to-neutral-100 {
69157
- --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
69158
- }
69159
- :where(.theme-scope) .from-neutral-200 {
69160
- --rb-gradient-from: rgb(var(--tb-neutral-200))
69161
- var(--rb-gradient-from-position);
69162
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
69163
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69164
- }
69165
- :where(.theme-scope) .to-neutral-200 {
69166
- --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
69167
- }
69168
- :where(.theme-scope) .from-neutral-300 {
69169
- --rb-gradient-from: rgb(var(--tb-neutral-300))
69170
- var(--rb-gradient-from-position);
69171
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
69172
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69173
- }
69174
- :where(.theme-scope) .to-neutral-300 {
69175
- --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
69176
- }
69177
- :where(.theme-scope) .from-neutral-400 {
69178
- --rb-gradient-from: rgb(var(--tb-neutral-400))
69179
- var(--rb-gradient-from-position);
69180
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
69181
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69182
- }
69183
- :where(.theme-scope) .to-neutral-400 {
69184
- --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
69185
- }
69186
- :where(.theme-scope) .from-neutral-500 {
69187
- --rb-gradient-from: rgb(var(--tb-neutral-500))
69188
- var(--rb-gradient-from-position);
69189
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
69190
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69191
- }
69192
- :where(.theme-scope) .to-neutral-500 {
69193
- --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
69194
- }
69195
- :where(.theme-scope) .from-neutral-600 {
69196
- --rb-gradient-from: rgb(var(--tb-neutral-600))
69197
- var(--rb-gradient-from-position);
69198
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
69199
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69200
- }
69201
- :where(.theme-scope) .to-neutral-600 {
69202
- --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
69203
- }
69204
- :where(.theme-scope) .from-neutral-700 {
69205
- --rb-gradient-from: rgb(var(--tb-neutral-700))
69206
- var(--rb-gradient-from-position);
69207
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
69208
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69209
- }
69210
- :where(.theme-scope) .to-neutral-700 {
69211
- --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
69212
- }
69213
- :where(.theme-scope) .from-neutral-800 {
69214
- --rb-gradient-from: rgb(var(--tb-neutral-800))
69215
- var(--rb-gradient-from-position);
69216
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
69217
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69218
- }
69219
- :where(.theme-scope) .to-neutral-800 {
69220
- --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
69221
- }
69222
- :where(.theme-scope) .from-neutral-900 {
69223
- --rb-gradient-from: rgb(var(--tb-neutral-900))
69224
- var(--rb-gradient-from-position);
69225
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
69226
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69227
- }
69228
- :where(.theme-scope) .to-neutral-900 {
69229
- --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
69230
- }
69231
- :where(.theme-scope) .from-neutral-950 {
69232
- --rb-gradient-from: rgb(var(--tb-neutral-950))
69233
- var(--rb-gradient-from-position);
69234
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
69235
- --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69236
- }
69237
- :where(.theme-scope) .to-neutral-950 {
69238
- --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
69239
- }
69240
-
69241
- /* =================================================================
69139
+ /* Shade tokens (50..950) for primary */
69140
+ :where(.theme-scope) .from-primary-50 {
69141
+ --rb-gradient-from: rgb(var(--tb-primary-50))
69142
+ var(--rb-gradient-from-position);
69143
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
69144
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69145
+ }
69146
+ :where(.theme-scope) .to-primary-50 {
69147
+ --rb-gradient-to: rgb(var(--tb-primary-50)) var(--rb-gradient-to-position);
69148
+ }
69149
+ :where(.theme-scope) .from-primary-100 {
69150
+ --rb-gradient-from: rgb(var(--tb-primary-100))
69151
+ var(--rb-gradient-from-position);
69152
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
69153
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69154
+ }
69155
+ :where(.theme-scope) .to-primary-100 {
69156
+ --rb-gradient-to: rgb(var(--tb-primary-100)) var(--rb-gradient-to-position);
69157
+ }
69158
+ :where(.theme-scope) .from-primary-200 {
69159
+ --rb-gradient-from: rgb(var(--tb-primary-200))
69160
+ var(--rb-gradient-from-position);
69161
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
69162
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69163
+ }
69164
+ :where(.theme-scope) .to-primary-200 {
69165
+ --rb-gradient-to: rgb(var(--tb-primary-200)) var(--rb-gradient-to-position);
69166
+ }
69167
+ :where(.theme-scope) .from-primary-300 {
69168
+ --rb-gradient-from: rgb(var(--tb-primary-300))
69169
+ var(--rb-gradient-from-position);
69170
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
69171
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69172
+ }
69173
+ :where(.theme-scope) .to-primary-300 {
69174
+ --rb-gradient-to: rgb(var(--tb-primary-300)) var(--rb-gradient-to-position);
69175
+ }
69176
+ :where(.theme-scope) .from-primary-400 {
69177
+ --rb-gradient-from: rgb(var(--tb-primary-400))
69178
+ var(--rb-gradient-from-position);
69179
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
69180
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69181
+ }
69182
+ :where(.theme-scope) .to-primary-400 {
69183
+ --rb-gradient-to: rgb(var(--tb-primary-400)) var(--rb-gradient-to-position);
69184
+ }
69185
+ :where(.theme-scope) .from-primary-500 {
69186
+ --rb-gradient-from: rgb(var(--tb-primary-500))
69187
+ var(--rb-gradient-from-position);
69188
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
69189
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69190
+ }
69191
+ :where(.theme-scope) .to-primary-500 {
69192
+ --rb-gradient-to: rgb(var(--tb-primary-500)) var(--rb-gradient-to-position);
69193
+ }
69194
+ :where(.theme-scope) .from-primary-600 {
69195
+ --rb-gradient-from: rgb(var(--tb-primary-600))
69196
+ var(--rb-gradient-from-position);
69197
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
69198
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69199
+ }
69200
+ :where(.theme-scope) .to-primary-600 {
69201
+ --rb-gradient-to: rgb(var(--tb-primary-600)) var(--rb-gradient-to-position);
69202
+ }
69203
+ :where(.theme-scope) .from-primary-700 {
69204
+ --rb-gradient-from: rgb(var(--tb-primary-700))
69205
+ var(--rb-gradient-from-position);
69206
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
69207
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69208
+ }
69209
+ :where(.theme-scope) .to-primary-700 {
69210
+ --rb-gradient-to: rgb(var(--tb-primary-700)) var(--rb-gradient-to-position);
69211
+ }
69212
+ :where(.theme-scope) .from-primary-800 {
69213
+ --rb-gradient-from: rgb(var(--tb-primary-800))
69214
+ var(--rb-gradient-from-position);
69215
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
69216
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69217
+ }
69218
+ :where(.theme-scope) .to-primary-800 {
69219
+ --rb-gradient-to: rgb(var(--tb-primary-800)) var(--rb-gradient-to-position);
69220
+ }
69221
+ :where(.theme-scope) .from-primary-900 {
69222
+ --rb-gradient-from: rgb(var(--tb-primary-900))
69223
+ var(--rb-gradient-from-position);
69224
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
69225
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69226
+ }
69227
+ :where(.theme-scope) .to-primary-900 {
69228
+ --rb-gradient-to: rgb(var(--tb-primary-900)) var(--rb-gradient-to-position);
69229
+ }
69230
+ :where(.theme-scope) .from-primary-950 {
69231
+ --rb-gradient-from: rgb(var(--tb-primary-950))
69232
+ var(--rb-gradient-from-position);
69233
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
69234
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69235
+ }
69236
+ :where(.theme-scope) .to-primary-950 {
69237
+ --rb-gradient-to: rgb(var(--tb-primary-950)) var(--rb-gradient-to-position);
69238
+ }
69239
+
69240
+ /* Shade tokens (50..950) for secondary */
69241
+ :where(.theme-scope) .from-secondary-50 {
69242
+ --rb-gradient-from: rgb(var(--tb-secondary-50))
69243
+ var(--rb-gradient-from-position);
69244
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
69245
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69246
+ }
69247
+ :where(.theme-scope) .to-secondary-50 {
69248
+ --rb-gradient-to: rgb(var(--tb-secondary-50)) var(--rb-gradient-to-position);
69249
+ }
69250
+ :where(.theme-scope) .from-secondary-100 {
69251
+ --rb-gradient-from: rgb(var(--tb-secondary-100))
69252
+ var(--rb-gradient-from-position);
69253
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
69254
+ var(--rb-gradient-to-position);
69255
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69256
+ }
69257
+ :where(.theme-scope) .to-secondary-100 {
69258
+ --rb-gradient-to: rgb(var(--tb-secondary-100))
69259
+ var(--rb-gradient-to-position);
69260
+ }
69261
+ :where(.theme-scope) .from-secondary-200 {
69262
+ --rb-gradient-from: rgb(var(--tb-secondary-200))
69263
+ var(--rb-gradient-from-position);
69264
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
69265
+ var(--rb-gradient-to-position);
69266
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69267
+ }
69268
+ :where(.theme-scope) .to-secondary-200 {
69269
+ --rb-gradient-to: rgb(var(--tb-secondary-200))
69270
+ var(--rb-gradient-to-position);
69271
+ }
69272
+ :where(.theme-scope) .from-secondary-300 {
69273
+ --rb-gradient-from: rgb(var(--tb-secondary-300))
69274
+ var(--rb-gradient-from-position);
69275
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
69276
+ var(--rb-gradient-to-position);
69277
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69278
+ }
69279
+ :where(.theme-scope) .to-secondary-300 {
69280
+ --rb-gradient-to: rgb(var(--tb-secondary-300))
69281
+ var(--rb-gradient-to-position);
69282
+ }
69283
+ :where(.theme-scope) .from-secondary-400 {
69284
+ --rb-gradient-from: rgb(var(--tb-secondary-400))
69285
+ var(--rb-gradient-from-position);
69286
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
69287
+ var(--rb-gradient-to-position);
69288
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69289
+ }
69290
+ :where(.theme-scope) .to-secondary-400 {
69291
+ --rb-gradient-to: rgb(var(--tb-secondary-400))
69292
+ var(--rb-gradient-to-position);
69293
+ }
69294
+ :where(.theme-scope) .from-secondary-500 {
69295
+ --rb-gradient-from: rgb(var(--tb-secondary-500))
69296
+ var(--rb-gradient-from-position);
69297
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
69298
+ var(--rb-gradient-to-position);
69299
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69300
+ }
69301
+ :where(.theme-scope) .to-secondary-500 {
69302
+ --rb-gradient-to: rgb(var(--tb-secondary-500))
69303
+ var(--rb-gradient-to-position);
69304
+ }
69305
+ :where(.theme-scope) .from-secondary-600 {
69306
+ --rb-gradient-from: rgb(var(--tb-secondary-600))
69307
+ var(--rb-gradient-from-position);
69308
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
69309
+ var(--rb-gradient-to-position);
69310
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69311
+ }
69312
+ :where(.theme-scope) .to-secondary-600 {
69313
+ --rb-gradient-to: rgb(var(--tb-secondary-600))
69314
+ var(--rb-gradient-to-position);
69315
+ }
69316
+ :where(.theme-scope) .from-secondary-700 {
69317
+ --rb-gradient-from: rgb(var(--tb-secondary-700))
69318
+ var(--rb-gradient-from-position);
69319
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
69320
+ var(--rb-gradient-to-position);
69321
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69322
+ }
69323
+ :where(.theme-scope) .to-secondary-700 {
69324
+ --rb-gradient-to: rgb(var(--tb-secondary-700))
69325
+ var(--rb-gradient-to-position);
69326
+ }
69327
+ :where(.theme-scope) .from-secondary-800 {
69328
+ --rb-gradient-from: rgb(var(--tb-secondary-800))
69329
+ var(--rb-gradient-from-position);
69330
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
69331
+ var(--rb-gradient-to-position);
69332
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69333
+ }
69334
+ :where(.theme-scope) .to-secondary-800 {
69335
+ --rb-gradient-to: rgb(var(--tb-secondary-800))
69336
+ var(--rb-gradient-to-position);
69337
+ }
69338
+ :where(.theme-scope) .from-secondary-900 {
69339
+ --rb-gradient-from: rgb(var(--tb-secondary-900))
69340
+ var(--rb-gradient-from-position);
69341
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
69342
+ var(--rb-gradient-to-position);
69343
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69344
+ }
69345
+ :where(.theme-scope) .to-secondary-900 {
69346
+ --rb-gradient-to: rgb(var(--tb-secondary-900))
69347
+ var(--rb-gradient-to-position);
69348
+ }
69349
+ :where(.theme-scope) .from-secondary-950 {
69350
+ --rb-gradient-from: rgb(var(--tb-secondary-950))
69351
+ var(--rb-gradient-from-position);
69352
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
69353
+ var(--rb-gradient-to-position);
69354
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69355
+ }
69356
+ :where(.theme-scope) .to-secondary-950 {
69357
+ --rb-gradient-to: rgb(var(--tb-secondary-950))
69358
+ var(--rb-gradient-to-position);
69359
+ }
69360
+
69361
+ /* Shade tokens (50..950) for accent */
69362
+ :where(.theme-scope) .from-accent-50 {
69363
+ --rb-gradient-from: rgb(var(--tb-accent-50))
69364
+ var(--rb-gradient-from-position);
69365
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
69366
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69367
+ }
69368
+ :where(.theme-scope) .to-accent-50 {
69369
+ --rb-gradient-to: rgb(var(--tb-accent-50)) var(--rb-gradient-to-position);
69370
+ }
69371
+ :where(.theme-scope) .from-accent-100 {
69372
+ --rb-gradient-from: rgb(var(--tb-accent-100))
69373
+ var(--rb-gradient-from-position);
69374
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
69375
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69376
+ }
69377
+ :where(.theme-scope) .to-accent-100 {
69378
+ --rb-gradient-to: rgb(var(--tb-accent-100)) var(--rb-gradient-to-position);
69379
+ }
69380
+ :where(.theme-scope) .from-accent-200 {
69381
+ --rb-gradient-from: rgb(var(--tb-accent-200))
69382
+ var(--rb-gradient-from-position);
69383
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
69384
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69385
+ }
69386
+ :where(.theme-scope) .to-accent-200 {
69387
+ --rb-gradient-to: rgb(var(--tb-accent-200)) var(--rb-gradient-to-position);
69388
+ }
69389
+ :where(.theme-scope) .from-accent-300 {
69390
+ --rb-gradient-from: rgb(var(--tb-accent-300))
69391
+ var(--rb-gradient-from-position);
69392
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
69393
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69394
+ }
69395
+ :where(.theme-scope) .to-accent-300 {
69396
+ --rb-gradient-to: rgb(var(--tb-accent-300)) var(--rb-gradient-to-position);
69397
+ }
69398
+ :where(.theme-scope) .from-accent-400 {
69399
+ --rb-gradient-from: rgb(var(--tb-accent-400))
69400
+ var(--rb-gradient-from-position);
69401
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
69402
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69403
+ }
69404
+ :where(.theme-scope) .to-accent-400 {
69405
+ --rb-gradient-to: rgb(var(--tb-accent-400)) var(--rb-gradient-to-position);
69406
+ }
69407
+ :where(.theme-scope) .from-accent-500 {
69408
+ --rb-gradient-from: rgb(var(--tb-accent-500))
69409
+ var(--rb-gradient-from-position);
69410
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
69411
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69412
+ }
69413
+ :where(.theme-scope) .to-accent-500 {
69414
+ --rb-gradient-to: rgb(var(--tb-accent-500)) var(--rb-gradient-to-position);
69415
+ }
69416
+ :where(.theme-scope) .from-accent-600 {
69417
+ --rb-gradient-from: rgb(var(--tb-accent-600))
69418
+ var(--rb-gradient-from-position);
69419
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
69420
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69421
+ }
69422
+ :where(.theme-scope) .to-accent-600 {
69423
+ --rb-gradient-to: rgb(var(--tb-accent-600)) var(--rb-gradient-to-position);
69424
+ }
69425
+ :where(.theme-scope) .from-accent-700 {
69426
+ --rb-gradient-from: rgb(var(--tb-accent-700))
69427
+ var(--rb-gradient-from-position);
69428
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
69429
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69430
+ }
69431
+ :where(.theme-scope) .to-accent-700 {
69432
+ --rb-gradient-to: rgb(var(--tb-accent-700)) var(--rb-gradient-to-position);
69433
+ }
69434
+ :where(.theme-scope) .from-accent-800 {
69435
+ --rb-gradient-from: rgb(var(--tb-accent-800))
69436
+ var(--rb-gradient-from-position);
69437
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
69438
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69439
+ }
69440
+ :where(.theme-scope) .to-accent-800 {
69441
+ --rb-gradient-to: rgb(var(--tb-accent-800)) var(--rb-gradient-to-position);
69442
+ }
69443
+ :where(.theme-scope) .from-accent-900 {
69444
+ --rb-gradient-from: rgb(var(--tb-accent-900))
69445
+ var(--rb-gradient-from-position);
69446
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
69447
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69448
+ }
69449
+ :where(.theme-scope) .to-accent-900 {
69450
+ --rb-gradient-to: rgb(var(--tb-accent-900)) var(--rb-gradient-to-position);
69451
+ }
69452
+ :where(.theme-scope) .from-accent-950 {
69453
+ --rb-gradient-from: rgb(var(--tb-accent-950))
69454
+ var(--rb-gradient-from-position);
69455
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
69456
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69457
+ }
69458
+ :where(.theme-scope) .to-accent-950 {
69459
+ --rb-gradient-to: rgb(var(--tb-accent-950)) var(--rb-gradient-to-position);
69460
+ }
69461
+
69462
+ /* Shade tokens (50..950) for neutral */
69463
+ :where(.theme-scope) .from-neutral-50 {
69464
+ --rb-gradient-from: rgb(var(--tb-neutral-50))
69465
+ var(--rb-gradient-from-position);
69466
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
69467
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69468
+ }
69469
+ :where(.theme-scope) .to-neutral-50 {
69470
+ --rb-gradient-to: rgb(var(--tb-neutral-50)) var(--rb-gradient-to-position);
69471
+ }
69472
+ :where(.theme-scope) .from-neutral-100 {
69473
+ --rb-gradient-from: rgb(var(--tb-neutral-100))
69474
+ var(--rb-gradient-from-position);
69475
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
69476
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69477
+ }
69478
+ :where(.theme-scope) .to-neutral-100 {
69479
+ --rb-gradient-to: rgb(var(--tb-neutral-100)) var(--rb-gradient-to-position);
69480
+ }
69481
+ :where(.theme-scope) .from-neutral-200 {
69482
+ --rb-gradient-from: rgb(var(--tb-neutral-200))
69483
+ var(--rb-gradient-from-position);
69484
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
69485
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69486
+ }
69487
+ :where(.theme-scope) .to-neutral-200 {
69488
+ --rb-gradient-to: rgb(var(--tb-neutral-200)) var(--rb-gradient-to-position);
69489
+ }
69490
+ :where(.theme-scope) .from-neutral-300 {
69491
+ --rb-gradient-from: rgb(var(--tb-neutral-300))
69492
+ var(--rb-gradient-from-position);
69493
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
69494
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69495
+ }
69496
+ :where(.theme-scope) .to-neutral-300 {
69497
+ --rb-gradient-to: rgb(var(--tb-neutral-300)) var(--rb-gradient-to-position);
69498
+ }
69499
+ :where(.theme-scope) .from-neutral-400 {
69500
+ --rb-gradient-from: rgb(var(--tb-neutral-400))
69501
+ var(--rb-gradient-from-position);
69502
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
69503
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69504
+ }
69505
+ :where(.theme-scope) .to-neutral-400 {
69506
+ --rb-gradient-to: rgb(var(--tb-neutral-400)) var(--rb-gradient-to-position);
69507
+ }
69508
+ :where(.theme-scope) .from-neutral-500 {
69509
+ --rb-gradient-from: rgb(var(--tb-neutral-500))
69510
+ var(--rb-gradient-from-position);
69511
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
69512
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69513
+ }
69514
+ :where(.theme-scope) .to-neutral-500 {
69515
+ --rb-gradient-to: rgb(var(--tb-neutral-500)) var(--rb-gradient-to-position);
69516
+ }
69517
+ :where(.theme-scope) .from-neutral-600 {
69518
+ --rb-gradient-from: rgb(var(--tb-neutral-600))
69519
+ var(--rb-gradient-from-position);
69520
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
69521
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69522
+ }
69523
+ :where(.theme-scope) .to-neutral-600 {
69524
+ --rb-gradient-to: rgb(var(--tb-neutral-600)) var(--rb-gradient-to-position);
69525
+ }
69526
+ :where(.theme-scope) .from-neutral-700 {
69527
+ --rb-gradient-from: rgb(var(--tb-neutral-700))
69528
+ var(--rb-gradient-from-position);
69529
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
69530
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69531
+ }
69532
+ :where(.theme-scope) .to-neutral-700 {
69533
+ --rb-gradient-to: rgb(var(--tb-neutral-700)) var(--rb-gradient-to-position);
69534
+ }
69535
+ :where(.theme-scope) .from-neutral-800 {
69536
+ --rb-gradient-from: rgb(var(--tb-neutral-800))
69537
+ var(--rb-gradient-from-position);
69538
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
69539
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69540
+ }
69541
+ :where(.theme-scope) .to-neutral-800 {
69542
+ --rb-gradient-to: rgb(var(--tb-neutral-800)) var(--rb-gradient-to-position);
69543
+ }
69544
+ :where(.theme-scope) .from-neutral-900 {
69545
+ --rb-gradient-from: rgb(var(--tb-neutral-900))
69546
+ var(--rb-gradient-from-position);
69547
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
69548
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69549
+ }
69550
+ :where(.theme-scope) .to-neutral-900 {
69551
+ --rb-gradient-to: rgb(var(--tb-neutral-900)) var(--rb-gradient-to-position);
69552
+ }
69553
+ :where(.theme-scope) .from-neutral-950 {
69554
+ --rb-gradient-from: rgb(var(--tb-neutral-950))
69555
+ var(--rb-gradient-from-position);
69556
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
69557
+ --rb-gradient-stops: var(--rb-gradient-from), var(--rb-gradient-to);
69558
+ }
69559
+ :where(.theme-scope) .to-neutral-950 {
69560
+ --rb-gradient-to: rgb(var(--tb-neutral-950)) var(--rb-gradient-to-position);
69561
+ }
69562
+
69563
+ /* =================================================================
69242
69564
  Header System Class Naming Conventions
69243
69565
 
69244
69566
  rb-header-* Utility-style classes set in site-header.ts layouts
@@ -69251,240 +69573,240 @@ var containerResponsiveThemeCss = `/*
69251
69573
  (nav-dropdown, nav-mobile-panel, nav-underline-grow)
69252
69574
  ================================================================= */
69253
69575
 
69254
- /* =================================================================
69576
+ /* =================================================================
69255
69577
  Header Layout Padding
69256
69578
 
69257
69579
  Padding is controlled entirely by CSS based on variant class.
69258
69580
  This ensures shrink headers look identical to non-shrink before scroll.
69259
69581
  ================================================================= */
69260
69582
 
69261
- /* Prevent scroll anchoring feedback loops when the header height transitions.
69583
+ /* Prevent scroll anchoring feedback loops when the header height transitions.
69262
69584
  In some browsers, resizing a sticky header near the top can cause the UA to
69263
69585
  adjust scroll position ("scroll anchoring"), which then flips the
69264
69586
  \`header-scrolled\` threshold logic back and forth. */
69265
- :where(.theme-scope) .block-site-header {
69266
- overflow-anchor: none;
69267
- }
69587
+ :where(.theme-scope) .block-site-header {
69588
+ overflow-anchor: none;
69589
+ }
69268
69590
 
69269
- /* Base padding for horizontal variants (classic, transparent) */
69270
- :where(.theme-scope) .rb-header-layout {
69271
- padding-top: 1rem;
69272
- padding-bottom: 1rem;
69273
- transition: padding 300ms var(--motion-ease, ease);
69274
- }
69591
+ /* Base padding for horizontal variants (classic, transparent) */
69592
+ :where(.theme-scope) .rb-header-layout {
69593
+ padding-top: 1rem;
69594
+ padding-bottom: 1rem;
69595
+ transition: padding 300ms var(--motion-ease, ease);
69596
+ }
69275
69597
 
69276
- /* Vertical variants need more breathing room
69598
+ /* Vertical variants need more breathing room
69277
69599
  Note: header-variant-* is on Section (ancestor), rb-header-layout on inner div */
69278
- :where(.theme-scope) .header-variant-centered .rb-header-layout,
69279
- :where(.theme-scope) .header-variant-editorial .rb-header-layout {
69280
- padding-top: 1.5rem;
69281
- padding-bottom: 1.5rem;
69282
- }
69600
+ :where(.theme-scope) .header-variant-centered .rb-header-layout {
69601
+ padding-top: 1.5rem;
69602
+ padding-bottom: 1.5rem;
69603
+ }
69283
69604
 
69284
- /* Floating variant - compact padding */
69285
- :where(.theme-scope) .header-variant-floating .rb-header-layout {
69286
- padding-top: 0.75rem;
69287
- padding-bottom: 0.75rem;
69288
- }
69605
+ /* Floating variant - compact padding */
69606
+ :where(.theme-scope) .header-variant-floating .rb-header-layout {
69607
+ padding-top: 0.75rem;
69608
+ padding-bottom: 0.75rem;
69609
+ }
69289
69610
 
69290
- /* =================================================================
69611
+ /* =================================================================
69291
69612
  Header Shrink-on-Scroll
69292
69613
 
69293
69614
  Only applies when .rb-header-shrink is present AND user has scrolled.
69294
69615
  No changes until scroll - shrink header = non-shrink header initially.
69295
69616
  ================================================================= */
69296
69617
 
69297
- /* Scrolled state - reduce padding */
69298
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
69299
- padding-top: 0.5rem;
69300
- padding-bottom: 0.5rem;
69301
- }
69618
+ /* Scrolled state - reduce padding */
69619
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-layout {
69620
+ padding-top: 0.5rem;
69621
+ padding-bottom: 0.5rem;
69622
+ }
69302
69623
 
69303
- /* Vertical variants get gentler reduction
69624
+ /* Vertical variants get gentler reduction
69304
69625
  Note: Both classes are on Section, rb-header-layout on inner div */
69305
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-centered .rb-header-layout,
69306
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-editorial .rb-header-layout {
69307
- padding-top: 0.75rem;
69308
- padding-bottom: 0.75rem;
69309
- }
69626
+ :where(.theme-scope)
69627
+ .rb-header-shrink.header-scrolled.header-variant-centered
69628
+ .rb-header-layout {
69629
+ padding-top: 0.75rem;
69630
+ padding-bottom: 0.75rem;
69631
+ }
69310
69632
 
69311
- /* Floating variant */
69312
- :where(.theme-scope) .rb-header-shrink.header-scrolled.header-variant-floating .rb-header-layout {
69313
- padding-top: 0.25rem;
69314
- padding-bottom: 0.25rem;
69315
- }
69633
+ /* Floating variant */
69634
+ :where(.theme-scope)
69635
+ .rb-header-shrink.header-scrolled.header-variant-floating
69636
+ .rb-header-layout {
69637
+ padding-top: 0.25rem;
69638
+ padding-bottom: 0.25rem;
69639
+ }
69316
69640
 
69317
- /* =================================================================
69641
+ /* =================================================================
69318
69642
  Logo & Title Sizing
69319
69643
 
69320
69644
  Font sizes controlled here, not via utility classes, so shrink
69321
69645
  transitions work (utility classes would override :where()).
69322
69646
  ================================================================= */
69323
69647
 
69324
- /* Logo image sizing */
69325
- :where(.theme-scope) .rb-header-logo-sm {
69326
- height: 2.5rem;
69327
- transition: height 300ms var(--motion-ease, ease);
69328
- }
69329
- :where(.theme-scope) .rb-header-logo-lg {
69330
- height: 3rem;
69331
- transition: height 300ms var(--motion-ease, ease);
69332
- }
69648
+ /* Logo image sizing */
69649
+ :where(.theme-scope) .rb-header-logo-sm {
69650
+ height: 2.5rem;
69651
+ transition: height 300ms var(--motion-ease, ease);
69652
+ }
69653
+ :where(.theme-scope) .rb-header-logo-lg {
69654
+ height: 3rem;
69655
+ transition: height 300ms var(--motion-ease, ease);
69656
+ }
69333
69657
 
69334
- /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
69335
- :where(.theme-scope) .header-logo-text {
69336
- font-size: 1.125rem; /* matches rb-text-lg */
69337
- line-height: 1.75rem;
69338
- transition: font-size 300ms var(--motion-ease, ease);
69339
- }
69658
+ /* Site title base font size (replaces rb-text-lg / rb-text-xl utilities) */
69659
+ :where(.theme-scope) .header-logo-text {
69660
+ font-size: 1.125rem; /* matches rb-text-lg */
69661
+ line-height: 1.75rem;
69662
+ transition: font-size 300ms var(--motion-ease, ease);
69663
+ }
69340
69664
 
69341
- /* Mobile: reduce site title size (~30%) to keep header compact */
69342
- @container rb-site (max-width: 767px) {
69665
+ /* Mobile: reduce site title size (~30%) to keep header compact */
69666
+ @container rb-site (max-width: 767px) {
69343
69667
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
69344
69668
  :where(.theme-scope) .header-logo-text {
69345
- font-size: 0.8rem;
69346
- line-height: 1.25rem;
69347
- }
69669
+ font-size: 0.8rem;
69670
+ line-height: 1.25rem;
69671
+ }
69348
69672
 
69349
- :where(.theme-scope) .header-variant-centered .header-logo-text,
69350
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
69351
- font-size: 0.875rem;
69352
- line-height: 1.25rem;
69353
- }
69673
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
69674
+ font-size: 0.875rem;
69675
+ line-height: 1.25rem;
69676
+ }
69354
69677
  }
69355
69678
  }
69356
69679
 
69357
- /* Centered/editorial variants use larger title */
69358
- :where(.theme-scope) .header-variant-centered .header-logo-text,
69359
- :where(.theme-scope) .header-variant-editorial .header-logo-text {
69360
- font-size: 1.25rem; /* matches rb-text-xl */
69361
- line-height: 1.75rem;
69362
- }
69680
+ /* Centered variant uses larger title */
69681
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
69682
+ font-size: 1.25rem; /* matches rb-text-xl */
69683
+ line-height: 1.75rem;
69684
+ }
69363
69685
 
69364
- /* =================================================================
69686
+ /* =================================================================
69365
69687
  Shrink on Scroll - Logo & Title
69366
69688
  ================================================================= */
69367
69689
 
69368
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
69369
- height: 2rem;
69370
- }
69371
- :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
69372
- height: 2.5rem;
69373
- }
69374
- :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
69375
- font-size: 0.875rem;
69376
- }
69690
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-sm {
69691
+ height: 2rem;
69692
+ }
69693
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .rb-header-logo-lg {
69694
+ height: 2.5rem;
69695
+ }
69696
+ :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
69697
+ font-size: 0.875rem;
69698
+ }
69377
69699
 
69378
- @container rb-site (max-width: 767px) {
69700
+ @container rb-site (max-width: 767px) {
69379
69701
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
69380
69702
  :where(.theme-scope) .rb-header-shrink.header-scrolled .header-logo-text {
69381
- font-size: 0.75rem;
69382
- }
69703
+ font-size: 0.75rem;
69704
+ }
69383
69705
  }
69384
69706
  }
69385
69707
 
69386
- /* =================================================================
69708
+ /* =================================================================
69387
69709
  Accessibility: Reduced Motion
69388
69710
  ================================================================= */
69389
69711
 
69390
- @media (prefers-reduced-motion: reduce) {
69391
- :where(.theme-scope) .rb-header-layout,
69392
- :where(.theme-scope) .rb-header-logo-sm,
69393
- :where(.theme-scope) .rb-header-logo-lg,
69394
- :where(.theme-scope) .header-logo-text {
69395
- transition: none;
69712
+ @media (prefers-reduced-motion: reduce) {
69713
+ :where(.theme-scope) .rb-header-layout,
69714
+ :where(.theme-scope) .rb-header-logo-sm,
69715
+ :where(.theme-scope) .rb-header-logo-lg,
69716
+ :where(.theme-scope) .header-logo-text {
69717
+ transition: none;
69718
+ }
69396
69719
  }
69397
- }
69398
69720
 
69399
- /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
69400
- :where(.theme-scope) .nav-underline-grow {
69401
- position: relative;
69402
- overflow: visible;
69403
- }
69404
- :where(.theme-scope) .nav-underline-grow::after {
69405
- content: "";
69406
- position: absolute;
69407
- left: 0;
69408
- bottom: var(--nav-underline-offset, -0.35em);
69409
- width: 100%;
69410
- height: 2px;
69411
- background-color: currentColor;
69412
- transform: scaleX(0);
69413
- transform-origin: left center;
69414
- transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
69415
- }
69416
- :where(.theme-scope) .nav-underline-grow:hover::after,
69417
- :where(.theme-scope)
69418
- .nav-underline-grow.nav-underline-active[data-active="true"]::after {
69419
- transform: scaleX(1);
69420
- }
69421
- :where(.theme-scope) .nav-underline-offset-tight {
69422
- --nav-underline-offset: -0.2em;
69423
- }
69424
- :where(.theme-scope) .nav-underline-offset-normal {
69425
- --nav-underline-offset: -0.3em;
69426
- }
69427
- :where(.theme-scope) .nav-underline-offset-loose {
69428
- --nav-underline-offset: -0.45em;
69429
- }
69721
+ /* Nav underline-grow animation (used by navStyle: "underline-grow" in site-header.ts) */
69722
+ :where(.theme-scope) .nav-underline-grow {
69723
+ position: relative;
69724
+ overflow: visible;
69725
+ }
69726
+ :where(.theme-scope) .nav-underline-grow::after {
69727
+ content: '';
69728
+ position: absolute;
69729
+ left: 0;
69730
+ bottom: var(--nav-underline-offset, -0.35em);
69731
+ width: 100%;
69732
+ height: 2px;
69733
+ background-color: currentColor;
69734
+ transform: scaleX(0);
69735
+ transform-origin: left center;
69736
+ transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
69737
+ }
69738
+ :where(.theme-scope) .nav-underline-grow:hover::after,
69739
+ :where(.theme-scope)
69740
+ .nav-underline-grow.nav-underline-active[data-active='true']::after {
69741
+ transform: scaleX(1);
69742
+ }
69743
+ :where(.theme-scope) .nav-underline-offset-tight {
69744
+ --nav-underline-offset: -0.2em;
69745
+ }
69746
+ :where(.theme-scope) .nav-underline-offset-normal {
69747
+ --nav-underline-offset: -0.3em;
69748
+ }
69749
+ :where(.theme-scope) .nav-underline-offset-loose {
69750
+ --nav-underline-offset: -0.45em;
69751
+ }
69430
69752
 
69431
- :where(.theme-scope) .card-surface {
69432
- background: rgb(var(--tb-surface));
69433
- color: rgb(var(--tb-onSurface, var(--tb-text)));
69434
- border: 1px solid rgb(var(--tb-border));
69435
- border-radius: var(--radius-card);
69436
- box-shadow: var(--shadow-elev);
69437
- }
69438
- :where(.theme-scope) .media-rounded {
69439
- border-radius: var(--radius-card);
69440
- }
69753
+ :where(.theme-scope) .card-surface {
69754
+ background: rgb(var(--tb-surface));
69755
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
69756
+ border: 1px solid rgb(var(--tb-border));
69757
+ border-radius: var(--radius-card);
69758
+ box-shadow: var(--shadow-elev);
69759
+ }
69760
+ :where(.theme-scope) .media-rounded {
69761
+ border-radius: var(--radius-card);
69762
+ }
69441
69763
 
69442
- :where(.theme-scope) .is-placeholder::after {
69443
- content: "Placeholder";
69444
- position: absolute;
69445
- top: 0.5rem;
69446
- left: 0.5rem;
69447
- font-size: 11px;
69448
- background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
69449
- color: rgb(var(--tb-text));
69450
- padding: 0.15rem 0.35rem;
69451
- border-radius: 4px;
69452
- opacity: 0.85;
69453
- }
69764
+ :where(.theme-scope) .is-placeholder::after {
69765
+ content: 'Placeholder';
69766
+ position: absolute;
69767
+ top: 0.5rem;
69768
+ left: 0.5rem;
69769
+ font-size: 11px;
69770
+ background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
69771
+ color: rgb(var(--tb-text));
69772
+ padding: 0.15rem 0.35rem;
69773
+ border-radius: 4px;
69774
+ opacity: 0.85;
69775
+ }
69454
69776
 
69455
- /* Status badges - theme-aware styling for capacity indicators */
69456
- :where(.theme-scope) .badge-status {
69457
- display: inline-flex;
69458
- align-items: center;
69459
- padding: 0.125rem 0.625rem;
69460
- border-radius: 9999px;
69461
- font-size: 0.75rem;
69462
- font-weight: 500;
69463
- line-height: 1.25rem;
69464
- }
69777
+ /* Status badges - theme-aware styling for capacity indicators */
69778
+ :where(.theme-scope) .badge-status {
69779
+ display: inline-flex;
69780
+ align-items: center;
69781
+ padding: 0.125rem 0.625rem;
69782
+ border-radius: 9999px;
69783
+ font-size: 0.75rem;
69784
+ font-weight: 500;
69785
+ line-height: 1.25rem;
69786
+ }
69465
69787
 
69466
- /* All badges use a subtle theme-aware style by default */
69467
- :where(.theme-scope) .badge-status-available {
69468
- background-color: rgba(var(--tb-secondary), 0.15);
69469
- color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
69470
- }
69788
+ /* All badges use a subtle theme-aware style by default */
69789
+ :where(.theme-scope) .badge-status-available {
69790
+ background-color: rgba(var(--tb-secondary), 0.15);
69791
+ color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
69792
+ }
69471
69793
 
69472
- :where(.theme-scope) .badge-status-low {
69473
- background-color: rgba(var(--tb-accent), 0.15);
69474
- color: rgb(var(--tb-accent-700, var(--tb-accent)));
69475
- }
69794
+ :where(.theme-scope) .badge-status-low {
69795
+ background-color: rgba(var(--tb-accent), 0.15);
69796
+ color: rgb(var(--tb-accent-700, var(--tb-accent)));
69797
+ }
69476
69798
 
69477
- :where(.theme-scope) .badge-status-sold-out {
69478
- background-color: rgba(var(--tb-text), 0.1);
69479
- color: rgb(var(--tb-mutedText));
69480
- }
69799
+ :where(.theme-scope) .badge-status-sold-out {
69800
+ background-color: rgba(var(--tb-text), 0.1);
69801
+ color: rgb(var(--tb-mutedText));
69802
+ }
69481
69803
 
69482
- /* Event list empty state - theme-aware */
69483
- :where(.theme-scope) .event-list-empty {
69484
- background-color: rgb(var(--tb-surface));
69485
- color: rgb(var(--tb-onSurface, var(--tb-text)));
69486
- border-color: rgb(var(--tb-border));
69487
- }
69804
+ /* Event list empty state - theme-aware */
69805
+ :where(.theme-scope) .event-list-empty {
69806
+ background-color: rgb(var(--tb-surface));
69807
+ color: rgb(var(--tb-onSurface, var(--tb-text)));
69808
+ border-color: rgb(var(--tb-border));
69809
+ }
69488
69810
  } /* end @layer rb-theme */
69489
69811
 
69490
69812
  @keyframes accordion-down {
@@ -76591,7 +76913,9 @@ async function Layout({
76591
76913
  throw new Error("Layout: must provide either siteData or client");
76592
76914
  }
76593
76915
  if (!siteId && !slug && !domain) {
76594
- throw new Error("Layout: must provide siteId, slug, or domain when using client");
76916
+ throw new Error(
76917
+ "Layout: must provide siteId, slug, or domain when using client"
76918
+ );
76595
76919
  }
76596
76920
  siteData = await client.getSite({ id: siteId, slug, domain });
76597
76921
  }
@@ -76608,7 +76932,11 @@ async function Layout({
76608
76932
  checkoutHref: "/checkout"
76609
76933
  };
76610
76934
  const menuViewModel = buildMenu(navigation, routes, navigationOptions);
76611
- const footerMenuViewModel = buildFooterMenu(navigation, routes, navigationOptions);
76935
+ const footerMenuViewModel = buildFooterMenu(
76936
+ navigation,
76937
+ routes,
76938
+ navigationOptions
76939
+ );
76612
76940
  const logoViewModel = buildLogo(layout.logo ?? null, site.title);
76613
76941
  const headerData = {
76614
76942
  menu: menuViewModel,
@@ -76695,10 +77023,13 @@ async function Layout({
76695
77023
  }
76696
77024
  ) : null;
76697
77025
  if (footerPlan.renderFooterBlocks && !footerBlocksElement && true) {
76698
- console.debug("[sdk] Footer mode renders blocks, but footerBlocks is empty/missing", {
76699
- siteId: site.id,
76700
- mode: footerPlan.mode
76701
- });
77026
+ console.debug(
77027
+ "[sdk] Footer mode renders blocks, but footerBlocks is empty/missing",
77028
+ {
77029
+ siteId: site.id,
77030
+ mode: footerPlan.mode
77031
+ }
77032
+ );
76702
77033
  }
76703
77034
  const defaultFooterElement = footerPlan.renderDefaultFooter ? renderBlock(siteFooterManifest, layout.footer, {
76704
77035
  theme: themeRuntime.tokens,