@riverbankcms/sdk 0.60.3 → 0.60.6

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 (60) hide show
  1. package/dist/_dts/api/src/bookingVerticals.d.ts +1 -0
  2. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -39
  3. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +2 -0
  4. package/dist/_dts/blocks/src/system/node/fragments/ctaButton.d.ts +2 -0
  5. package/dist/_dts/blocks/src/system/runtime/shared/themedButtonClass.d.ts +11 -0
  6. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +10 -2
  7. package/dist/_dts/core/src/participants.d.ts +32 -1
  8. package/dist/_dts/core/src/rectification.d.ts +79 -0
  9. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +6 -6
  10. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +17 -15
  11. package/dist/_dts/sdk/src/client/types.d.ts +1 -0
  12. package/dist/_dts/sdk/src/version.d.ts +1 -1
  13. package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +7 -2
  14. package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +7 -2
  15. package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +7 -2
  16. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +86 -5
  17. package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +7 -2
  18. package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +7 -2
  19. package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +7 -2
  20. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +10 -10
  21. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +33 -9
  22. package/dist/_dts/theme-core/src/palette/variants/high-contrast.d.ts +33 -9
  23. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +200 -4
  24. package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +33 -9
  25. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +10 -10
  26. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +33 -9
  27. package/dist/_dts/theme-core/src/site-styles/curatedChoices.d.ts +27 -0
  28. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +48 -194
  29. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -1
  30. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +12 -14
  31. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +46 -0
  32. package/dist/_dts/ui/src/palette/ColorChooserDialog.d.ts +47 -0
  33. package/dist/_dts/ui/src/palette/ColorSlotButton.d.ts +15 -0
  34. package/dist/_dts/ui/src/palette/ColorSwatchButton.d.ts +15 -0
  35. package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +50 -0
  36. package/dist/_dts/ui/src/palette/hex.d.ts +23 -0
  37. package/dist/_dts/ui/src/palette/index.d.ts +14 -0
  38. package/dist/cli/index.mjs +1023 -923
  39. package/dist/client/client.mjs +3410 -3221
  40. package/dist/client/hooks.mjs +1625 -1564
  41. package/dist/client/rendering/client.mjs +132 -37
  42. package/dist/client/rendering/islands.mjs +91 -30
  43. package/dist/client/rendering.mjs +1237 -1049
  44. package/dist/preview-next/client/runtime.mjs +3095 -2736
  45. package/dist/server/components.mjs +2381 -2255
  46. package/dist/server/config-validation.mjs +1625 -1564
  47. package/dist/server/config.mjs +1625 -1564
  48. package/dist/server/data.mjs +1625 -1564
  49. package/dist/server/index.mjs +4 -3
  50. package/dist/server/next.mjs +3233 -3106
  51. package/dist/server/page-converter.mjs +1625 -1564
  52. package/dist/server/prebuild.mjs +1 -1
  53. package/dist/server/rendering/server.mjs +2381 -2255
  54. package/dist/server/rendering.mjs +2381 -2255
  55. package/dist/server/routing.mjs +2340 -2271
  56. package/dist/server/server.mjs +1629 -1567
  57. package/dist/server/theme-bridge.mjs +130 -126
  58. package/dist/server/theme.mjs +131 -129
  59. package/package.json +1 -1
  60. package/dist/_dts/theme-core/src/site-styles/compatibility.d.ts +0 -109
@@ -6116,7 +6116,7 @@ var SimpleCache = class {
6116
6116
  };
6117
6117
 
6118
6118
  // src/version.ts
6119
- var SDK_VERSION = "0.60.3";
6119
+ var SDK_VERSION = "0.60.6";
6120
6120
 
6121
6121
  // src/client/error.ts
6122
6122
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -6910,19 +6910,20 @@ function createRiverbankClient(config) {
6910
6910
  }
6911
6911
  return {
6912
6912
  async getSite(params) {
6913
- const { slug, domain, id, signal, force } = params;
6913
+ const { slug, domain, id, signal, force, currentPath } = params;
6914
6914
  if (!slug && !domain && !id) {
6915
6915
  throw new Error(
6916
6916
  `getSite() requires at least one identifier: slug, domain, or id. Received: ${JSON.stringify(params)}`
6917
6917
  );
6918
6918
  }
6919
- const cacheKey = `site:${slug || domain || id}`;
6919
+ const cacheKey = `site:${slug || domain || id}:${currentPath ?? ""}`;
6920
6920
  const siteId = id || slug || domain;
6921
6921
  return resilientFetch(cacheKey, async (sig) => {
6922
6922
  const apiParams = {};
6923
6923
  if (params.slug) apiParams.slug = params.slug;
6924
6924
  if (params.domain) apiParams.domain = params.domain;
6925
6925
  if (params.id) apiParams.id = params.id;
6926
+ if (currentPath) apiParams.currentPath = currentPath;
6926
6927
  if (force) apiParams.force = "true";
6927
6928
  return await apiClient({
6928
6929
  endpoint: "getSite",
@@ -9407,861 +9408,482 @@ function assertUniqueLayoutProfileKeys(profiles) {
9407
9408
  }
9408
9409
  }
9409
9410
 
9410
- // ../theme-core/src/site-styles/compatibility.ts
9411
+ // ../theme-core/src/buttons/personalities/types.ts
9412
+ import { z as z11 } from "zod";
9413
+
9414
+ // ../theme-core/src/buttons/types.ts
9411
9415
  import { z as z9 } from "zod";
9416
+ var VARIANT_ROLES = [
9417
+ "primary",
9418
+ "secondary",
9419
+ "outline",
9420
+ "ghost",
9421
+ "link",
9422
+ "tertiary",
9423
+ "accent"
9424
+ ];
9425
+ var cornerStyleSchema = z9.enum(["square", "rounded", "pill"]);
9426
+ var shadowSizeSchema = z9.enum(["none", "low", "medium", "high"]);
9427
+ var textTransformSchema = z9.enum(["none", "uppercase", "lowercase", "capitalize"]);
9428
+ var fontWeightSchema = z9.union([z9.literal(500), z9.literal(600), z9.literal(700)]);
9429
+ var buttonTypographySchema = z9.enum(["body", "heading"]);
9430
+ var letterSpacingSchema = z9.enum(["tight", "normal", "loose"]);
9431
+ var hoverTransformSchema = z9.enum(["none", "lift", "scale", "press"]);
9432
+ var hoverColorSchema = z9.enum(["none", "brighten", "darken", "saturate", "token"]);
9433
+ var buttonPaddingPresetSchema = z9.enum(["compact", "default", "spacious"]);
9434
+ var gradientStyleSchema = z9.enum(["linear", "radial", "conic"]);
9435
+ var gradientSharpnessSchema = z9.enum(["smooth", "medium", "hard"]);
9436
+ var prioritySchema = z9.union([z9.literal(1), z9.literal(2), z9.literal(3)]);
9437
+ var variantRoleSchema = z9.enum(VARIANT_ROLES);
9438
+ var buttonSizeNameSchema = z9.enum(["sm", "md", "lg", "xl"]);
9439
+ var PADDING_TOKEN_PATTERN = /^(?:0|\d+(?:\.\d+)?(?:rem|em|px|%))$/;
9440
+ var paddingShorthandSchema = z9.string().refine(
9441
+ (value) => {
9442
+ const parts = value.split(/\s+/).filter(Boolean);
9443
+ return parts.length === 2 && parts.every((token) => PADDING_TOKEN_PATTERN.test(token));
9444
+ },
9445
+ {
9446
+ message: 'Padding must be two space-separated CSS length tokens (e.g. "0.5rem 1rem"). Use `0` for zero.'
9447
+ }
9448
+ );
9449
+ var buttonSizeConfigSchema = z9.object({
9450
+ padding: paddingShorthandSchema,
9451
+ fontSize: z9.string().optional()
9452
+ });
9453
+ var buttonSizesSchema = z9.object({
9454
+ sm: buttonSizeConfigSchema,
9455
+ md: buttonSizeConfigSchema,
9456
+ lg: buttonSizeConfigSchema,
9457
+ xl: buttonSizeConfigSchema.optional()
9458
+ }).transform(({ sm, md, lg, xl }) => ({
9459
+ sm,
9460
+ md,
9461
+ lg,
9462
+ xl: xl ?? lg
9463
+ }));
9464
+ var buttonGlobalSettingsSchema = z9.object({
9465
+ cornerStyle: cornerStyleSchema,
9466
+ cornerRadius: z9.number().min(0).max(24).optional(),
9467
+ shadow: shadowSizeSchema,
9468
+ textTransform: textTransformSchema,
9469
+ fontWeight: fontWeightSchema,
9470
+ /**
9471
+ * @deprecated Set per-variant via `variant.border.widthClass` instead.
9472
+ * Schema field is preserved so existing presets parse; the value is unread
9473
+ * by the current generator and will be removed once the legacy
9474
+ * `primitives/content/components/Button.tsx` slot exports are deleted.
9475
+ */
9476
+ borderWidth: z9.union([z9.literal(1), z9.literal(2), z9.literal(3)]),
9477
+ // === Family-level typography ===
9478
+ // Typography source (body or heading) — selects which theme typography pool to inherit
9479
+ typography: buttonTypographySchema.optional(),
9480
+ // Font size for all variants in the family (Tailwind token, e.g. "text-xs", "text-sm")
9481
+ // Sized variants get this as default; fixed variants inherit unless they override.
9482
+ // Size class CSS may still override at run time for sized variants.
9483
+ fontSize: z9.string().optional(),
9484
+ // Letter spacing applied to all variants
9485
+ letterSpacing: letterSpacingSchema.optional(),
9486
+ // Italic style
9487
+ italic: z9.boolean().optional(),
9488
+ // Padding preset (applies to sized variants without a sizes config)
9489
+ paddingPreset: buttonPaddingPresetSchema.optional(),
9490
+ hoverTransform: hoverTransformSchema,
9491
+ hoverColor: hoverColorSchema,
9492
+ // When hoverColor is 'token', this specifies which token to use
9493
+ hoverColorToken: z9.string().optional(),
9494
+ // Gradient settings (if any variant uses gradients)
9495
+ gradientStyle: gradientStyleSchema.optional(),
9496
+ gradientAngle: z9.number().min(0).max(360).optional(),
9497
+ gradientSharpness: gradientSharpnessSchema.optional()
9498
+ });
9499
+ var gradientDirectionSchema = z9.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
9500
+ var buttonBackgroundSchema = z9.discriminatedUnion("type", [
9501
+ z9.object({ type: z9.literal("solid"), colorToken: z9.string() }),
9502
+ z9.object({
9503
+ type: z9.literal("gradient"),
9504
+ stops: z9.array(z9.string()).min(2),
9505
+ direction: gradientDirectionSchema
9506
+ }),
9507
+ z9.object({ type: z9.literal("transparent") })
9508
+ ]);
9509
+ var effectApplicationSchema = z9.object({
9510
+ effectId: z9.string(),
9511
+ options: z9.record(z9.string(), z9.any()).optional()
9512
+ });
9513
+ var buttonBorderSchema = z9.object({
9514
+ widthClass: z9.string(),
9515
+ colorToken: z9.string()
9516
+ });
9517
+ var variantShadowSchema = z9.object({
9518
+ elevation: z9.enum(["none", "low", "medium", "high"]),
9519
+ softness: z9.enum(["crisp", "soft", "hard"]).nullable(),
9520
+ position: z9.enum(["bottom", "bottom-right"]).default("bottom")
9521
+ });
9522
+ var variantEffectsSchema = z9.object({
9523
+ base: z9.array(effectApplicationSchema).optional(),
9524
+ hover: z9.array(effectApplicationSchema).optional(),
9525
+ active: z9.array(effectApplicationSchema).optional(),
9526
+ focus: z9.array(effectApplicationSchema).optional()
9527
+ });
9528
+ var variantSizeOverridesSchema = z9.object({
9529
+ sm: buttonSizeConfigSchema.optional(),
9530
+ md: buttonSizeConfigSchema.optional(),
9531
+ lg: buttonSizeConfigSchema.optional(),
9532
+ xl: buttonSizeConfigSchema.optional()
9533
+ });
9534
+ var buttonVariantSchema = z9.object({
9535
+ id: z9.string(),
9536
+ name: z9.string().min(1).max(20),
9537
+ enabled: z9.boolean(),
9538
+ priority: prioritySchema,
9539
+ // Base appearance (token-based)
9540
+ background: buttonBackgroundSchema,
9541
+ textColorToken: z9.string(),
9542
+ /** Tailwind radius token (e.g. `'rounded-md'`). Omit to inherit from `global.cornerStyle`. */
9543
+ borderRadius: z9.string().optional(),
9544
+ // Optional shadow override (uses theme.shadow if not specified)
9545
+ shadow: variantShadowSchema.optional(),
9546
+ // Border (optional)
9547
+ border: buttonBorderSchema.optional(),
9548
+ // Hover background token (per-variant override, takes precedence over global hoverColorToken)
9549
+ hoverBackgroundToken: z9.string().optional(),
9550
+ // Effect composition
9551
+ effects: variantEffectsSchema.optional(),
9552
+ // Per-variant size overrides — see VariantSizeOverrides
9553
+ sizes: variantSizeOverridesSchema.optional()
9554
+ });
9555
+ var buttonSystemSchema = z9.object({
9556
+ global: buttonGlobalSettingsSchema,
9557
+ variants: z9.array(buttonVariantSchema).min(1).max(6),
9558
+ sizes: buttonSizesSchema.optional()
9559
+ });
9560
+
9561
+ // ../theme-core/src/site-styles/styleTags.ts
9562
+ import { z as z10 } from "zod";
9412
9563
  var STYLE_AXIS_VALUES = {
9413
9564
  tone: ["minimal", "classic", "bold"],
9414
9565
  energy: ["calm", "vibrant"],
9415
9566
  motion: ["subtle", "standard", "expressive"],
9416
9567
  era: ["editorial", "modern", "organic", "technical", "retro"]
9417
9568
  };
9418
- var styleTagsSchema = z9.object({
9419
- tone: z9.enum(STYLE_AXIS_VALUES.tone).optional(),
9420
- energy: z9.enum(STYLE_AXIS_VALUES.energy).optional(),
9421
- motion: z9.enum(STYLE_AXIS_VALUES.motion).optional(),
9422
- era: z9.enum(STYLE_AXIS_VALUES.era).optional()
9569
+ var styleTagsSchema = z10.object({
9570
+ tone: z10.enum(STYLE_AXIS_VALUES.tone).optional(),
9571
+ energy: z10.enum(STYLE_AXIS_VALUES.energy).optional(),
9572
+ motion: z10.enum(STYLE_AXIS_VALUES.motion).optional(),
9573
+ era: z10.enum(STYLE_AXIS_VALUES.era).optional()
9423
9574
  });
9424
9575
 
9425
- // ../theme-core/src/site-styles/sourceCatalogs.ts
9426
- var generatedContentFrames = [
9427
- plainFrame,
9428
- panelFrame("inset"),
9429
- panelFrame("raised"),
9430
- flushPanelFrame({ bleed: "start" })
9431
- ];
9432
- var userContentFrames = [
9433
- ...generatedContentFrames,
9434
- panelFrame("editorial"),
9435
- flushPanelFrame({ bleed: "end" }),
9436
- flushPanelFrame({ bleed: "both" })
9437
- ];
9438
- var generatedDesignOptionCatalog = {
9439
- source: "generated",
9440
- sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
9441
- contentFrames: generatedContentFrames,
9442
- itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
9443
- transitions: ["none", "soft-fade-short", "soft-fade-long"],
9444
- emphases: ["low", "medium", "high"],
9445
- detachedCustom: false
9446
- };
9447
- var userDesignOptionCatalog = {
9448
- source: "user",
9449
- sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
9450
- contentFrames: userContentFrames,
9451
- itemSurfaces: [
9452
- ...generatedDesignOptionCatalog.itemSurfaces,
9453
- "inset",
9454
- "editorial"
9455
- ],
9456
- transitions: [
9457
- ...generatedDesignOptionCatalog.transitions,
9458
- "wave-edge",
9459
- "angle-edge"
9460
- ],
9461
- emphases: generatedDesignOptionCatalog.emphases,
9462
- detachedCustom: false
9463
- };
9464
- var advancedDesignOptionCatalog = {
9465
- source: "advanced",
9466
- sectionSurfaces: userDesignOptionCatalog.sectionSurfaces,
9467
- contentFrames: userDesignOptionCatalog.contentFrames,
9468
- itemSurfaces: userDesignOptionCatalog.itemSurfaces,
9469
- transitions: userDesignOptionCatalog.transitions,
9470
- emphases: userDesignOptionCatalog.emphases,
9471
- detachedCustom: true
9472
- };
9473
-
9474
- // ../theme-core/src/site-styles/curatedSiteStyles.ts
9475
- var curatedSiteStyleIdValues = [
9476
- "site-style:calm-studio",
9477
- "site-style:clear-professional",
9478
- "site-style:warm-editorial",
9479
- "site-style:bright-community",
9480
- "site-style:quiet-luxury",
9481
- "site-style:practical-services",
9482
- "site-style:modern-wellness",
9483
- "site-style:bold-launch"
9484
- ];
9485
- var quietBudget = {
9486
- accentDensity: "low",
9487
- panelDensity: "medium",
9488
- transitionMix: "quiet",
9489
- primaryCtaLimit: 2,
9490
- mediaDensity: "medium",
9491
- decorativeRepetition: "low"
9492
- };
9493
- var balancedBudget = {
9494
- accentDensity: "medium",
9495
- panelDensity: "medium",
9496
- transitionMix: "balanced",
9497
- primaryCtaLimit: 3,
9498
- mediaDensity: "medium",
9499
- decorativeRepetition: "medium"
9500
- };
9501
- var expressiveBudget = {
9502
- accentDensity: "high",
9503
- panelDensity: "high",
9504
- transitionMix: "expressive",
9505
- primaryCtaLimit: 3,
9506
- mediaDensity: "high",
9507
- decorativeRepetition: "medium"
9508
- };
9509
- function uniqueContentFrameKinds() {
9510
- const kinds = [...new Set(
9511
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
9512
- )];
9513
- const firstKind = kinds[0];
9514
- if (!firstKind) {
9515
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
9576
+ // ../theme-core/src/buttons/personalities/types.ts
9577
+ function asButtonPersonalityId(value) {
9578
+ if (value.length === 0) {
9579
+ throw new Error("ButtonPersonalityId must be a non-empty string");
9516
9580
  }
9517
- return [firstKind, ...kinds.slice(1)];
9581
+ return value;
9518
9582
  }
9519
- var generatedContentFrameKinds = uniqueContentFrameKinds();
9520
- function defineCuratedSiteStyle(input) {
9583
+ var buttonPersonalityIdSchema = z11.string().min(1).transform((value) => asButtonPersonalityId(value));
9584
+ var buttonPersonalitySchema = z11.object({
9585
+ id: buttonPersonalityIdSchema,
9586
+ name: z11.string().min(1),
9587
+ description: z11.string().min(1),
9588
+ tags: styleTagsSchema,
9589
+ buttonSystem: buttonSystemSchema
9590
+ });
9591
+ function defineButtonPersonality(input) {
9521
9592
  return {
9522
- id: asSiteStyleId(input.id),
9593
+ id: asButtonPersonalityId(input.id),
9523
9594
  name: input.name,
9524
9595
  description: input.description,
9525
- generationBrief: input.generationBrief,
9526
- selectionKeywords: input.selectionKeywords ?? [],
9527
- template: {
9528
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
9529
- name: input.name,
9530
- version: 1,
9531
- tokenRecipes: input.tokenRecipes,
9532
- compositionBudget: input.compositionBudget,
9533
- supportedSectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
9534
- supportedContentFrames: generatedContentFrameKinds,
9535
- supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
9536
- supportedTransitions: generatedDesignOptionCatalog.transitions
9537
- },
9538
- // The library IDs are already branded at construction (`asButtonPersonalityId`
9539
- // / `asPaletteVariantId`); the closed-union input type guarantees only
9540
- // shipped IDs reach this branch.
9541
- defaultButtonPersonalityId: input.defaultButtonPersonalityId,
9542
- acceptedButtons: input.acceptedButtons,
9543
- defaultPaletteVariantId: input.defaultPaletteVariantId,
9544
- acceptedPalettes: input.acceptedPalettes
9596
+ tags: input.tags,
9597
+ buttonSystem: input.buttonSystem
9545
9598
  };
9546
9599
  }
9547
- var curatedSiteStyles = [
9548
- defineCuratedSiteStyle({
9549
- id: "site-style:calm-studio",
9550
- name: "Calm Studio",
9551
- description: "Soft, measured, and spacious for intimate appointment or class businesses.",
9552
- generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
9553
- tokenRecipes: {
9554
- palette: "soft-natural",
9555
- contrast: "standard",
9556
- radius: "soft",
9557
- shadow: "subtle",
9558
- typography: "friendly-sans",
9559
- spacing: "airy",
9560
- motion: "subtle"
9561
- },
9562
- compositionBudget: quietBudget,
9563
- defaultButtonPersonalityId: "soft-pill",
9564
- acceptedButtons: { tone: ["minimal", "classic"], era: ["organic", "editorial"] },
9565
- defaultPaletteVariantId: "soft-natural-sage",
9566
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["organic"] }
9567
- }),
9568
- defineCuratedSiteStyle({
9569
- id: "site-style:clear-professional",
9570
- name: "Clear Professional",
9571
- description: "Crisp, trustworthy, and direct for local services and consultancies.",
9572
- generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
9573
- tokenRecipes: {
9574
- palette: "brand-led",
9575
- contrast: "strong",
9576
- radius: "soft",
9577
- shadow: "subtle",
9578
- typography: "clean-sans",
9579
- spacing: "regular",
9580
- motion: "subtle"
9600
+
9601
+ // ../theme-core/src/buttons/personalities/brushed-wash.ts
9602
+ var brushedWash = defineButtonPersonality({
9603
+ id: "brushed-wash",
9604
+ name: "Brushed Wash",
9605
+ description: "Watercolour-gradient buttons with soft shadows and generous padding.",
9606
+ tags: { tone: "classic", energy: "vibrant", motion: "standard", era: "organic" },
9607
+ buttonSystem: {
9608
+ global: {
9609
+ cornerStyle: "rounded",
9610
+ shadow: "low",
9611
+ textTransform: "none",
9612
+ fontWeight: 500,
9613
+ borderWidth: 1,
9614
+ hoverTransform: "none",
9615
+ hoverColor: "none"
9581
9616
  },
9582
- compositionBudget: balancedBudget,
9583
- defaultButtonPersonalityId: "confident-chip",
9584
- acceptedButtons: { tone: ["minimal", "classic"], era: ["modern", "editorial"] },
9585
- defaultPaletteVariantId: "brand-led-cool",
9586
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["modern", "editorial"] }
9587
- }),
9588
- defineCuratedSiteStyle({
9589
- id: "site-style:warm-editorial",
9590
- name: "Warm Editorial",
9591
- description: "Story-led and textured for educators, makers, venues, and retreats.",
9592
- generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
9593
- tokenRecipes: {
9594
- palette: "warm-neutral",
9595
- contrast: "standard",
9596
- radius: "square",
9597
- shadow: "none",
9598
- typography: "serif-editorial",
9599
- spacing: "airy",
9600
- motion: "subtle"
9617
+ sizes: {
9618
+ sm: { padding: "0.75rem 2rem", fontSize: "text-sm" },
9619
+ md: { padding: "1rem 2.5rem" },
9620
+ lg: { padding: "1.25rem 3rem", fontSize: "text-lg" },
9621
+ xl: { padding: "1.625rem 3.75rem", fontSize: "text-xl" }
9601
9622
  },
9602
- compositionBudget: balancedBudget,
9603
- defaultButtonPersonalityId: "editorial-link",
9604
- acceptedButtons: { tone: ["minimal", "classic"], era: ["editorial", "organic"] },
9605
- defaultPaletteVariantId: "warm-neutral-cream",
9606
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["editorial", "organic"] }
9607
- }),
9608
- defineCuratedSiteStyle({
9609
- id: "site-style:bright-community",
9610
- name: "Bright Community",
9611
- description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
9612
- generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
9613
- tokenRecipes: {
9614
- palette: "brand-led",
9615
- contrast: "standard",
9616
- radius: "rounded",
9617
- shadow: "subtle",
9618
- typography: "friendly-sans",
9619
- spacing: "regular",
9620
- motion: "expressive"
9623
+ variants: [
9624
+ {
9625
+ id: "primary",
9626
+ name: "Primary",
9627
+ enabled: true,
9628
+ priority: 1,
9629
+ background: {
9630
+ type: "gradient",
9631
+ stops: ["primary", "accent"],
9632
+ direction: "to-r"
9633
+ },
9634
+ textColorToken: "primaryForeground",
9635
+ borderRadius: "rounded-lg",
9636
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
9637
+ effects: {
9638
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
9639
+ }
9640
+ },
9641
+ {
9642
+ id: "secondary",
9643
+ name: "Secondary",
9644
+ enabled: true,
9645
+ priority: 2,
9646
+ background: {
9647
+ type: "gradient",
9648
+ stops: ["secondary", "accent"],
9649
+ direction: "to-br"
9650
+ },
9651
+ textColorToken: "primaryForeground",
9652
+ borderRadius: "rounded-lg",
9653
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
9654
+ effects: {
9655
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
9656
+ }
9657
+ },
9658
+ {
9659
+ id: "outline",
9660
+ name: "Outline",
9661
+ enabled: true,
9662
+ priority: 3,
9663
+ background: { type: "transparent" },
9664
+ textColorToken: "primary",
9665
+ borderRadius: "rounded-lg",
9666
+ border: { widthClass: "border", colorToken: "primary" },
9667
+ effects: {
9668
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
9669
+ }
9670
+ },
9671
+ {
9672
+ id: "ghost",
9673
+ name: "Ghost",
9674
+ enabled: true,
9675
+ priority: 3,
9676
+ background: { type: "transparent" },
9677
+ textColorToken: "text",
9678
+ borderRadius: "rounded-lg",
9679
+ effects: {
9680
+ hover: [
9681
+ { effectId: "background-on-hover", options: { colorToken: "surface" } }
9682
+ ]
9683
+ }
9684
+ }
9685
+ ]
9686
+ }
9687
+ });
9688
+
9689
+ // ../theme-core/src/buttons/personalities/confident-chip.ts
9690
+ var confidentChip = defineButtonPersonality({
9691
+ id: "confident-chip",
9692
+ name: "Confident Chip",
9693
+ description: "Mid-radius solid buttons with a crisp hover.",
9694
+ tags: { tone: "classic", energy: "calm", motion: "standard", era: "modern" },
9695
+ buttonSystem: {
9696
+ global: {
9697
+ cornerStyle: "rounded",
9698
+ shadow: "medium",
9699
+ textTransform: "none",
9700
+ fontWeight: 600,
9701
+ borderWidth: 1,
9702
+ hoverTransform: "none",
9703
+ hoverColor: "none"
9621
9704
  },
9622
- compositionBudget: balancedBudget,
9623
- defaultButtonPersonalityId: "pebble",
9624
- acceptedButtons: { tone: ["classic", "bold"], era: ["organic", "modern"] },
9625
- defaultPaletteVariantId: "brand-led-warm",
9626
- acceptedPalettes: { tone: ["classic", "bold"], era: ["modern", "organic"] }
9627
- }),
9628
- defineCuratedSiteStyle({
9629
- id: "site-style:quiet-luxury",
9630
- name: "Quiet Luxury",
9631
- description: "Minimal, confident, and refined for premium experiences and private services.",
9632
- generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
9633
- selectionKeywords: [
9634
- "luxury",
9635
- "premium",
9636
- "boutique",
9637
- "bespoke",
9638
- "exclusive"
9639
- ],
9640
- tokenRecipes: {
9641
- palette: "high-contrast",
9642
- contrast: "strong",
9643
- radius: "square",
9705
+ variants: [
9706
+ {
9707
+ id: "primary",
9708
+ name: "Primary",
9709
+ enabled: true,
9710
+ priority: 1,
9711
+ background: { type: "solid", colorToken: "primary" },
9712
+ textColorToken: "primaryForeground",
9713
+ borderRadius: "rounded-md",
9714
+ shadow: { elevation: "medium", softness: "soft", position: "bottom" },
9715
+ effects: {
9716
+ hover: [{ effectId: "darken-background", options: { amount: 60 } }],
9717
+ active: [{ effectId: "scale-down", options: { scale: "0.97" } }]
9718
+ }
9719
+ },
9720
+ {
9721
+ id: "secondary",
9722
+ name: "Secondary",
9723
+ enabled: true,
9724
+ priority: 2,
9725
+ background: { type: "solid", colorToken: "surface" },
9726
+ textColorToken: "text",
9727
+ borderRadius: "rounded-md",
9728
+ border: { widthClass: "border", colorToken: "border" },
9729
+ effects: {
9730
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
9731
+ }
9732
+ },
9733
+ {
9734
+ id: "outline",
9735
+ name: "Outline",
9736
+ enabled: true,
9737
+ priority: 3,
9738
+ background: { type: "transparent" },
9739
+ textColorToken: "primary",
9740
+ borderRadius: "rounded-md",
9741
+ border: { widthClass: "border", colorToken: "primary" },
9742
+ effects: {
9743
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
9744
+ }
9745
+ },
9746
+ {
9747
+ id: "ghost",
9748
+ name: "Ghost",
9749
+ enabled: true,
9750
+ priority: 3,
9751
+ background: { type: "transparent" },
9752
+ textColorToken: "primary",
9753
+ borderRadius: "rounded-md",
9754
+ effects: {
9755
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
9756
+ }
9757
+ }
9758
+ ]
9759
+ }
9760
+ });
9761
+
9762
+ // ../theme-core/src/buttons/personalities/editorial-link.ts
9763
+ var editorialLink = defineButtonPersonality({
9764
+ id: "editorial-link",
9765
+ name: "Editorial Link",
9766
+ description: "Link-style with a growing underline. Refined, typographic.",
9767
+ tags: { tone: "minimal", energy: "calm", motion: "subtle", era: "editorial" },
9768
+ buttonSystem: {
9769
+ global: {
9770
+ cornerStyle: "square",
9644
9771
  shadow: "none",
9645
- typography: "classic-serif",
9646
- spacing: "airy",
9647
- motion: "none"
9648
- },
9649
- compositionBudget: quietBudget,
9650
- defaultButtonPersonalityId: "editorial-link",
9651
- acceptedButtons: { tone: ["minimal", "classic"], era: ["editorial", "organic"] },
9652
- defaultPaletteVariantId: "high-contrast-charcoal",
9653
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["editorial", "organic"] }
9654
- }),
9655
- defineCuratedSiteStyle({
9656
- id: "site-style:practical-services",
9657
- name: "Practical Services",
9658
- description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
9659
- generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
9660
- selectionKeywords: [
9661
- "repair",
9662
- "plumb",
9663
- "electric",
9664
- "cleaning",
9665
- "landscap",
9666
- "contractor"
9667
- ],
9668
- tokenRecipes: {
9669
- palette: "brand-led",
9670
- contrast: "maximum",
9671
- radius: "soft",
9672
- shadow: "subtle",
9673
- typography: "clean-sans",
9674
- spacing: "compact",
9675
- motion: "none"
9676
- },
9677
- compositionBudget: quietBudget,
9678
- defaultButtonPersonalityId: "confident-chip",
9679
- acceptedButtons: { tone: ["minimal", "classic", "bold"], era: ["modern", "editorial"] },
9680
- defaultPaletteVariantId: "brand-led-cool",
9681
- acceptedPalettes: { tone: ["minimal", "classic", "bold"], era: ["modern", "editorial"] }
9682
- }),
9683
- defineCuratedSiteStyle({
9684
- id: "site-style:modern-wellness",
9685
- name: "Modern Wellness",
9686
- description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
9687
- generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
9688
- tokenRecipes: {
9689
- palette: "soft-natural",
9690
- contrast: "standard",
9691
- radius: "rounded",
9692
- shadow: "subtle",
9693
- typography: "clean-sans",
9694
- spacing: "airy",
9695
- motion: "subtle"
9772
+ textTransform: "none",
9773
+ fontWeight: 500,
9774
+ borderWidth: 1,
9775
+ hoverTransform: "none",
9776
+ hoverColor: "none"
9696
9777
  },
9697
- compositionBudget: balancedBudget,
9698
- defaultButtonPersonalityId: "soft-pill",
9699
- acceptedButtons: { tone: ["minimal", "classic"], era: ["organic", "modern"] },
9700
- defaultPaletteVariantId: "soft-natural-sage",
9701
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["organic"] }
9702
- }),
9703
- defineCuratedSiteStyle({
9704
- id: "site-style:bold-launch",
9705
- name: "Bold Launch",
9706
- description: "High-energy and punchy for launches, campaigns, and creative offers.",
9707
- generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
9708
- selectionKeywords: [
9709
- "launch",
9710
- "campaign",
9711
- "preorder",
9712
- "pre-order",
9713
- "waitlist",
9714
- "drop"
9715
- ],
9716
- tokenRecipes: {
9717
- palette: "high-contrast",
9718
- contrast: "maximum",
9719
- radius: "pill",
9720
- shadow: "layered",
9721
- typography: "clean-sans",
9722
- spacing: "regular",
9723
- motion: "expressive"
9724
- },
9725
- compositionBudget: expressiveBudget,
9726
- defaultButtonPersonalityId: "ink-stamp",
9727
- acceptedButtons: { tone: ["classic", "bold"], era: ["editorial", "organic", "modern"] },
9728
- defaultPaletteVariantId: "high-contrast-monochrome",
9729
- acceptedPalettes: { tone: ["bold"], era: ["editorial", "modern"] }
9730
- })
9731
- ];
9732
- var curatedSiteStylesById = new Map(
9733
- curatedSiteStyles.map((style) => [style.id, style])
9734
- );
9735
-
9736
- // ../theme-core/src/site-styles/designState.ts
9737
- import { z as z10 } from "zod";
9738
-
9739
- // ../theme-core/src/site-styles/rawStyleFields.ts
9740
- var themeV2RuntimeStyleFieldNames = [
9741
- "_frameStyles",
9742
- "_sectionStyles",
9743
- "_containerStyles",
9744
- "_cardStyles",
9745
- // styleGroup is legacy runtime transition wiring rather than a nested
9746
- // override object, but normal editors should still never see it directly.
9747
- "styleGroup"
9748
- ];
9749
- var themeV2BlockSpecificRawStyleFieldNames = [
9750
- "_contentCardStyles",
9751
- "_textCardStyles"
9752
- ];
9753
- var themeV2NormalEditorRawStyleFieldNames = [
9754
- ...themeV2RuntimeStyleFieldNames,
9755
- ...themeV2BlockSpecificRawStyleFieldNames
9756
- ];
9757
- var themeV2NormalEditorRawStyleFieldNameSet = new Set(
9758
- themeV2NormalEditorRawStyleFieldNames
9759
- );
9760
-
9761
- // ../theme-core/src/site-styles/designState.ts
9762
- var themeV2DesignStateSchemaVersion = 1;
9763
- var designResolutionPolicySchema = z10.enum(["generated", "user", "admin", "sdk"]);
9764
- var runtimeStyleFieldNameSchema = z10.enum(themeV2RuntimeStyleFieldNames);
9765
- var nonEmptyRuntimeStyleFieldNamesSchema = z10.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
9766
- fields3[0],
9767
- ...fields3.slice(1)
9768
- ]);
9769
- var heroLegibilityStrategySchema = z10.enum([
9770
- "none",
9771
- "scrim-gradient",
9772
- "solid-panel"
9773
- ]);
9774
- function uniqueNonEmpty(values) {
9775
- const uniqueValues = [...new Set(values)];
9776
- const firstValue = uniqueValues[0];
9777
- if (!firstValue) {
9778
- throw new Error("Expected at least one Theme V2 design state option.");
9779
- }
9780
- return [firstValue, ...uniqueValues.slice(1)];
9781
- }
9782
- var userPanelTreatments = uniqueNonEmpty(
9783
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
9784
- );
9785
- var userFlushTreatments = uniqueNonEmpty(
9786
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
9787
- );
9788
- var userFlushBleeds = uniqueNonEmpty(
9789
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
9790
- );
9791
- var contentFrameIntentSchema = z10.discriminatedUnion("kind", [
9792
- z10.object({ kind: z10.literal("plain") }).strict(),
9793
- z10.object({
9794
- kind: z10.literal("panel"),
9795
- treatment: z10.enum(userPanelTreatments)
9796
- }).strict(),
9797
- z10.object({
9798
- kind: z10.literal("flush-panel"),
9799
- treatment: z10.enum(userFlushTreatments),
9800
- bleed: z10.enum(userFlushBleeds)
9801
- }).strict()
9802
- ]);
9803
- var blockDesignPlanSchema = z10.object({
9804
- blockId: z10.string().min(1).transform(asDesignBlockId),
9805
- blockKind: z10.string().min(1),
9806
- purpose: z10.string().min(1),
9807
- sectionSurface: z10.enum(userDesignOptionCatalog.sectionSurfaces),
9808
- contentFrame: contentFrameIntentSchema,
9809
- itemSurface: z10.enum(userDesignOptionCatalog.itemSurfaces),
9810
- transitionAfter: z10.enum(userDesignOptionCatalog.transitions),
9811
- emphasis: z10.enum(userDesignOptionCatalog.emphases),
9812
- heroLegibility: heroLegibilityStrategySchema.optional()
9813
- }).strict();
9814
- var styleAuthoritySchema = z10.discriminatedUnion("kind", [
9815
- z10.object({
9816
- kind: z10.literal("theme-v2"),
9817
- source: designResolutionPolicySchema,
9818
- siteStyleId: z10.string().min(1).transform(asSiteStyleId),
9819
- templateId: z10.string().min(1).transform(asDesignSystemTemplateId),
9820
- templateVersion: z10.number().int().nonnegative(),
9821
- resolverVersion: z10.number().int().nonnegative()
9822
- }).strict(),
9823
- z10.object({
9824
- kind: z10.literal("legacy-raw"),
9825
- reason: z10.enum(["pre-theme-v2", "manual-runtime-fields"])
9826
- }).strict(),
9827
- z10.object({
9828
- kind: z10.literal("advanced-detached"),
9829
- reason: z10.literal("detached-custom-runtime-fields")
9830
- }).strict()
9831
- ]);
9832
- var blockRuntimeStyleAuthoritySchema = z10.object({
9833
- unit: z10.literal("block-runtime-fields"),
9834
- blockId: z10.string().min(1).transform(asDesignBlockId),
9835
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
9836
- authority: styleAuthoritySchema
9837
- }).strict();
9838
- var persistedPageDesignStateV1Schema = z10.object({
9839
- schemaVersion: z10.literal(themeV2DesignStateSchemaVersion),
9840
- siteStyleId: z10.string().min(1).transform(asSiteStyleId),
9841
- templateId: z10.string().min(1).transform(asDesignSystemTemplateId),
9842
- templateVersion: z10.number().int().nonnegative(),
9843
- resolverVersion: z10.number().int().nonnegative(),
9844
- rhythmPresetId: z10.string().min(1),
9845
- blocks: z10.array(blockDesignPlanSchema),
9846
- styleAuthorities: z10.array(blockRuntimeStyleAuthoritySchema)
9847
- }).strict();
9848
-
9849
- // ../theme-core/src/site-styles/generatedSchemas.ts
9850
- import { z as z11 } from "zod";
9851
- function uniqueNonEmpty2(values) {
9852
- const uniqueValues = [...new Set(values)];
9853
- const firstValue = uniqueValues[0];
9854
- if (!firstValue) {
9855
- throw new Error("Expected at least one generated schema option.");
9856
- }
9857
- return [firstValue, ...uniqueValues.slice(1)];
9858
- }
9859
- var generatedPanelTreatments = uniqueNonEmpty2(
9860
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
9861
- );
9862
- var generatedFlushTreatments = uniqueNonEmpty2(
9863
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
9864
- );
9865
- var generatedFlushBleeds = uniqueNonEmpty2(
9866
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
9867
- );
9868
- var generatedPanelFrameSchema = z11.object({
9869
- kind: z11.literal("panel"),
9870
- treatment: z11.enum(generatedPanelTreatments)
9871
- }).strict();
9872
- var generatedFlushPanelFrameSchema = z11.object({
9873
- kind: z11.literal("flush-panel"),
9874
- treatment: z11.enum(generatedFlushTreatments),
9875
- bleed: z11.enum(generatedFlushBleeds)
9876
- }).strict();
9877
- var generatedContentFrameIntentSchema = z11.discriminatedUnion("kind", [
9878
- z11.object({ kind: z11.literal("plain") }).strict(),
9879
- generatedPanelFrameSchema,
9880
- generatedFlushPanelFrameSchema
9881
- ]);
9882
- var generatedSiteStyleIdSchema = z11.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
9883
- function generatedChoiceSchema(valueSchema) {
9884
- return z11.discriminatedUnion("kind", [
9885
- z11.object({
9886
- source: z11.literal("generated"),
9887
- kind: z11.literal("auto")
9888
- }).strict(),
9889
- z11.object({
9890
- source: z11.literal("generated"),
9891
- kind: z11.literal("explicit"),
9892
- value: valueSchema
9893
- }).strict()
9894
- ]);
9895
- }
9896
- var generatedBlockDesignIntentSchema = z11.object({
9897
- sectionSurface: generatedChoiceSchema(
9898
- z11.enum(generatedDesignOptionCatalog.sectionSurfaces)
9899
- ),
9900
- contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
9901
- itemSurface: generatedChoiceSchema(
9902
- z11.enum(generatedDesignOptionCatalog.itemSurfaces)
9903
- ),
9904
- transitionAfter: generatedChoiceSchema(
9905
- z11.enum(generatedDesignOptionCatalog.transitions)
9906
- ),
9907
- emphasis: generatedChoiceSchema(
9908
- z11.enum(generatedDesignOptionCatalog.emphases)
9909
- )
9910
- }).strict();
9911
- var generatedMediaCompositionIntentSchema = z11.enum([
9912
- "none",
9913
- "supporting",
9914
- "dominant"
9915
- ]);
9916
- var generatedDecorativeCompositionIntentSchema = z11.enum([
9917
- "none",
9918
- "supporting"
9919
- ]);
9920
- var generatedHeroLegibilityStrategySchema = z11.enum([
9921
- "none",
9922
- "scrim-gradient"
9923
- ]);
9924
- var generatedBlockMediaIntentSchema = z11.object({
9925
- media: generatedMediaCompositionIntentSchema,
9926
- decorative: generatedDecorativeCompositionIntentSchema,
9927
- heroLegibility: generatedChoiceSchema(generatedHeroLegibilityStrategySchema)
9928
- }).strict();
9929
- var generatedBoundaryIntentSchema = z11.object({
9930
- transitionAfter: generatedChoiceSchema(
9931
- z11.enum(generatedDesignOptionCatalog.transitions)
9932
- )
9933
- }).strict();
9934
- var generatedPageDesignBlockIntentSchema = z11.object({
9935
- blockId: z11.string().min(1),
9936
- blockKind: z11.string().min(1),
9937
- purpose: z11.string().min(1),
9938
- design: generatedBlockDesignIntentSchema,
9939
- mediaIntent: generatedBlockMediaIntentSchema,
9940
- boundaryIntent: generatedBoundaryIntentSchema
9941
- }).strict();
9942
- var generatedPageDesignIntentSchema = z11.object({
9943
- siteStyleId: generatedSiteStyleIdSchema,
9944
- blocks: z11.array(generatedPageDesignBlockIntentSchema)
9945
- }).strict();
9946
-
9947
- // ../theme-core/src/site-styles/pageDesignIntent.ts
9948
- import { z as z12 } from "zod";
9949
- var pageDesignIntentSchemaVersion = 1;
9950
- var pageDesignUserPinnedAppearanceChoiceSchema = z12.object({
9951
- kind: z12.literal("user-pinned"),
9952
- value: z12.string().min(1).transform(asAppearancePresetId)
9953
- }).strict();
9954
- var pageDesignUserPinnedBoundaryChoiceSchema = z12.object({
9955
- kind: z12.literal("user-pinned"),
9956
- value: z12.string().min(1).transform(asBoundaryOptionId)
9957
- }).strict();
9958
- var pageDesignBlockLookPinSchema = z12.object({
9959
- blockId: z12.string().min(1).transform(asDesignBlockId),
9960
- blockKind: z12.string().min(1),
9961
- choice: pageDesignUserPinnedAppearanceChoiceSchema
9962
- }).strict();
9963
- var pageDesignBoundaryPinSchema = z12.object({
9964
- boundaryId: z12.string().min(1).transform(asDesignBoundaryId),
9965
- previousBlockId: z12.string().min(1).transform(asDesignBlockId),
9966
- nextBlockId: z12.string().min(1).transform(asDesignBlockId),
9967
- choice: pageDesignUserPinnedBoundaryChoiceSchema
9968
- }).strict().superRefine((pin, ctx) => {
9969
- const expectedBoundaryId = makeBoundaryId(
9970
- pin.previousBlockId,
9971
- pin.nextBlockId
9972
- );
9973
- if (pin.boundaryId !== expectedBoundaryId) {
9974
- ctx.addIssue({
9975
- code: z12.ZodIssueCode.custom,
9976
- path: ["boundaryId"],
9977
- message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
9978
- });
9778
+ variants: [
9779
+ {
9780
+ id: "primary",
9781
+ name: "Primary",
9782
+ enabled: true,
9783
+ priority: 1,
9784
+ background: { type: "transparent" },
9785
+ textColorToken: "text",
9786
+ borderRadius: "rounded-none",
9787
+ shadow: { elevation: "none", softness: null, position: "bottom" },
9788
+ sizes: {
9789
+ sm: { padding: "0.25rem 0" },
9790
+ md: { padding: "0.5rem 0" },
9791
+ lg: { padding: "0.625rem 0" },
9792
+ xl: { padding: "0.75rem 0" }
9793
+ },
9794
+ effects: {
9795
+ base: [
9796
+ { effectId: "border-bottom-grow", options: { height: 2, colorToken: "text", origin: "left" } }
9797
+ ]
9798
+ }
9799
+ },
9800
+ {
9801
+ id: "secondary",
9802
+ name: "Secondary",
9803
+ enabled: true,
9804
+ priority: 2,
9805
+ background: { type: "transparent" },
9806
+ textColorToken: "mutedText",
9807
+ borderRadius: "rounded-none",
9808
+ shadow: { elevation: "none", softness: null, position: "bottom" },
9809
+ sizes: {
9810
+ sm: { padding: "0.25rem 0" },
9811
+ md: { padding: "0.5rem 0" },
9812
+ lg: { padding: "0.625rem 0" },
9813
+ xl: { padding: "0.75rem 0" }
9814
+ },
9815
+ effects: {
9816
+ base: [
9817
+ { effectId: "border-bottom-grow", options: { height: 1, colorToken: "mutedText", origin: "left" } }
9818
+ ]
9819
+ }
9820
+ },
9821
+ {
9822
+ id: "outline",
9823
+ name: "Outline",
9824
+ enabled: true,
9825
+ priority: 3,
9826
+ background: { type: "transparent" },
9827
+ textColorToken: "accent",
9828
+ borderRadius: "rounded-none",
9829
+ shadow: { elevation: "none", softness: null, position: "bottom" },
9830
+ sizes: {
9831
+ sm: { padding: "0.25rem 0" },
9832
+ md: { padding: "0.5rem 0" },
9833
+ lg: { padding: "0.625rem 0" },
9834
+ xl: { padding: "0.75rem 0" }
9835
+ },
9836
+ effects: {
9837
+ base: [
9838
+ { effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }
9839
+ ]
9840
+ }
9841
+ },
9842
+ {
9843
+ id: "ghost",
9844
+ name: "Ghost",
9845
+ enabled: true,
9846
+ priority: 3,
9847
+ background: { type: "transparent" },
9848
+ textColorToken: "mutedText",
9849
+ borderRadius: "rounded-none",
9850
+ shadow: { elevation: "none", softness: null, position: "bottom" },
9851
+ sizes: {
9852
+ sm: { padding: "0.25rem 0" },
9853
+ md: { padding: "0.5rem 0" },
9854
+ lg: { padding: "0.625rem 0" },
9855
+ xl: { padding: "0.75rem 0" }
9856
+ },
9857
+ effects: {
9858
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -20 } }]
9859
+ }
9860
+ }
9861
+ ]
9979
9862
  }
9980
9863
  });
9981
- var pageDesignIntentV1Schema = z12.object({
9982
- schemaVersion: z12.literal(pageDesignIntentSchemaVersion),
9983
- siteStyleId: z12.string().min(1).transform(asSiteStyleId),
9984
- pageFlowPresetId: z12.string().min(1).transform(asPageFlowPresetId),
9985
- blockLookPins: z12.array(pageDesignBlockLookPinSchema),
9986
- boundaryPins: z12.array(pageDesignBoundaryPinSchema)
9987
- }).strict().superRefine((intent, ctx) => {
9988
- addDuplicateStringIssues(ctx, {
9989
- values: intent.blockLookPins.map((pin) => pin.blockId),
9990
- path: ["blockLookPins"],
9991
- label: "block Look pin"
9992
- });
9993
- addDuplicateStringIssues(ctx, {
9994
- values: intent.boundaryPins.map(
9995
- (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
9996
- ),
9997
- path: ["boundaryPins"],
9998
- label: "boundary pin"
9999
- });
10000
- });
10001
- function addDuplicateStringIssues(ctx, input) {
10002
- const seen = /* @__PURE__ */ new Set();
10003
- const duplicates = /* @__PURE__ */ new Set();
10004
- for (const value of input.values) {
10005
- if (seen.has(value)) {
10006
- duplicates.add(value);
10007
- }
10008
- seen.add(value);
10009
- }
10010
- for (const duplicate of duplicates) {
10011
- ctx.addIssue({
10012
- code: z12.ZodIssueCode.custom,
10013
- path: [...input.path],
10014
- message: `Duplicate ${input.label}: ${duplicate}.`
10015
- });
10016
- }
10017
- }
10018
- function boundaryKey(previousBlockId, nextBlockId) {
10019
- return makeBoundaryId(previousBlockId, nextBlockId);
10020
- }
10021
-
10022
- // ../theme-core/src/schema.ts
10023
- import { z as z25 } from "zod";
10024
-
10025
- // ../theme-core/src/lib/media.ts
10026
- import z13 from "zod";
10027
- var hotspotSchema = z13.object({
10028
- x: z13.number().min(0).max(1),
10029
- y: z13.number().min(0).max(1),
10030
- radius: z13.number().optional()
10031
- });
10032
- var rotationSchema = z13.union([z13.literal(0), z13.literal(90), z13.literal(180), z13.literal(270)]);
10033
- var rectSchema = z13.tuple([z13.number(), z13.number(), z13.number(), z13.number()]);
10034
- var aspectCropSchema = z13.object({
10035
- aspect: z13.preprocess((value) => value == null ? void 0 : value, z13.string().optional()),
10036
- rect: z13.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
10037
- hotspot: z13.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
10038
- rotation: z13.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
10039
- });
10040
- var transformSchema = z13.object({
10041
- aspectCrops: z13.preprocess((value) => {
10042
- if (!value || typeof value !== "object" || Array.isArray(value)) {
10043
- return void 0;
10044
- }
10045
- return value;
10046
- }, z13.record(z13.string(), aspectCropSchema.catch({}))).optional(),
10047
- rect: rectSchema.optional(),
10048
- hotspot: hotspotSchema.optional(),
10049
- rotation: rotationSchema.optional()
10050
- });
10051
- var mediaSchema = z13.object({
10052
- type: z13.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
10053
- purpose: z13.string().optional(),
10054
- placeholder: z13.boolean().default(true).optional(),
10055
- assetId: z13.string().optional(),
10056
- identifier: z13.string().optional(),
10057
- src: z13.string().optional(),
10058
- alt: z13.string().optional(),
10059
- filename: z13.string().optional(),
10060
- mimeType: z13.string().optional(),
10061
- width: z13.number().optional(),
10062
- height: z13.number().optional(),
10063
- storageBucket: z13.string().optional(),
10064
- storagePath: z13.string().optional(),
10065
- transform: transformSchema.optional()
10066
- });
10067
-
10068
- // ../theme-core/src/buttons/types.ts
10069
- import { z as z14 } from "zod";
10070
- var VARIANT_ROLES = [
10071
- "primary",
10072
- "secondary",
10073
- "outline",
10074
- "ghost",
10075
- "link",
10076
- "tertiary",
10077
- "accent"
10078
- ];
10079
- var cornerStyleSchema = z14.enum(["square", "rounded", "pill"]);
10080
- var shadowSizeSchema = z14.enum(["none", "low", "medium", "high"]);
10081
- var textTransformSchema = z14.enum(["none", "uppercase", "lowercase", "capitalize"]);
10082
- var fontWeightSchema = z14.union([z14.literal(500), z14.literal(600), z14.literal(700)]);
10083
- var buttonTypographySchema = z14.enum(["body", "heading"]);
10084
- var letterSpacingSchema = z14.enum(["tight", "normal", "loose"]);
10085
- var hoverTransformSchema = z14.enum(["none", "lift", "scale", "press"]);
10086
- var hoverColorSchema = z14.enum(["none", "brighten", "darken", "saturate", "token"]);
10087
- var buttonPaddingPresetSchema = z14.enum(["compact", "default", "spacious"]);
10088
- var gradientStyleSchema = z14.enum(["linear", "radial", "conic"]);
10089
- var gradientSharpnessSchema = z14.enum(["smooth", "medium", "hard"]);
10090
- var prioritySchema = z14.union([z14.literal(1), z14.literal(2), z14.literal(3)]);
10091
- var variantRoleSchema = z14.enum(VARIANT_ROLES);
10092
- var buttonSizeNameSchema = z14.enum(["sm", "md", "lg", "xl"]);
10093
- var PADDING_TOKEN_PATTERN = /^(?:0|\d+(?:\.\d+)?(?:rem|em|px|%))$/;
10094
- var paddingShorthandSchema = z14.string().refine(
10095
- (value) => {
10096
- const parts = value.split(/\s+/).filter(Boolean);
10097
- return parts.length === 2 && parts.every((token) => PADDING_TOKEN_PATTERN.test(token));
10098
- },
10099
- {
10100
- message: 'Padding must be two space-separated CSS length tokens (e.g. "0.5rem 1rem"). Use `0` for zero.'
10101
- }
10102
- );
10103
- var buttonSizeConfigSchema = z14.object({
10104
- padding: paddingShorthandSchema,
10105
- fontSize: z14.string().optional()
10106
- });
10107
- var buttonSizesSchema = z14.object({
10108
- sm: buttonSizeConfigSchema,
10109
- md: buttonSizeConfigSchema,
10110
- lg: buttonSizeConfigSchema,
10111
- xl: buttonSizeConfigSchema.optional()
10112
- }).transform(({ sm, md, lg, xl }) => ({
10113
- sm,
10114
- md,
10115
- lg,
10116
- xl: xl ?? lg
10117
- }));
10118
- var buttonGlobalSettingsSchema = z14.object({
10119
- cornerStyle: cornerStyleSchema,
10120
- cornerRadius: z14.number().min(0).max(24).optional(),
10121
- shadow: shadowSizeSchema,
10122
- textTransform: textTransformSchema,
10123
- fontWeight: fontWeightSchema,
10124
- /**
10125
- * @deprecated Set per-variant via `variant.border.widthClass` instead.
10126
- * Schema field is preserved so existing presets parse; the value is unread
10127
- * by the current generator and will be removed once the legacy
10128
- * `primitives/content/components/Button.tsx` slot exports are deleted.
10129
- */
10130
- borderWidth: z14.union([z14.literal(1), z14.literal(2), z14.literal(3)]),
10131
- // === Family-level typography ===
10132
- // Typography source (body or heading) — selects which theme typography pool to inherit
10133
- typography: buttonTypographySchema.optional(),
10134
- // Font size for all variants in the family (Tailwind token, e.g. "text-xs", "text-sm")
10135
- // Sized variants get this as default; fixed variants inherit unless they override.
10136
- // Size class CSS may still override at run time for sized variants.
10137
- fontSize: z14.string().optional(),
10138
- // Letter spacing applied to all variants
10139
- letterSpacing: letterSpacingSchema.optional(),
10140
- // Italic style
10141
- italic: z14.boolean().optional(),
10142
- // Padding preset (applies to sized variants without a sizes config)
10143
- paddingPreset: buttonPaddingPresetSchema.optional(),
10144
- hoverTransform: hoverTransformSchema,
10145
- hoverColor: hoverColorSchema,
10146
- // When hoverColor is 'token', this specifies which token to use
10147
- hoverColorToken: z14.string().optional(),
10148
- // Gradient settings (if any variant uses gradients)
10149
- gradientStyle: gradientStyleSchema.optional(),
10150
- gradientAngle: z14.number().min(0).max(360).optional(),
10151
- gradientSharpness: gradientSharpnessSchema.optional()
10152
- });
10153
- var gradientDirectionSchema = z14.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
10154
- var buttonBackgroundSchema = z14.discriminatedUnion("type", [
10155
- z14.object({ type: z14.literal("solid"), colorToken: z14.string() }),
10156
- z14.object({
10157
- type: z14.literal("gradient"),
10158
- stops: z14.array(z14.string()).min(2),
10159
- direction: gradientDirectionSchema
10160
- }),
10161
- z14.object({ type: z14.literal("transparent") })
10162
- ]);
10163
- var effectApplicationSchema = z14.object({
10164
- effectId: z14.string(),
10165
- options: z14.record(z14.string(), z14.any()).optional()
10166
- });
10167
- var buttonBorderSchema = z14.object({
10168
- widthClass: z14.string(),
10169
- colorToken: z14.string()
10170
- });
10171
- var variantShadowSchema = z14.object({
10172
- elevation: z14.enum(["none", "low", "medium", "high"]),
10173
- softness: z14.enum(["crisp", "soft", "hard"]).nullable(),
10174
- position: z14.enum(["bottom", "bottom-right"]).default("bottom")
10175
- });
10176
- var variantEffectsSchema = z14.object({
10177
- base: z14.array(effectApplicationSchema).optional(),
10178
- hover: z14.array(effectApplicationSchema).optional(),
10179
- active: z14.array(effectApplicationSchema).optional(),
10180
- focus: z14.array(effectApplicationSchema).optional()
10181
- });
10182
- var variantSizeOverridesSchema = z14.object({
10183
- sm: buttonSizeConfigSchema.optional(),
10184
- md: buttonSizeConfigSchema.optional(),
10185
- lg: buttonSizeConfigSchema.optional(),
10186
- xl: buttonSizeConfigSchema.optional()
10187
- });
10188
- var buttonVariantSchema = z14.object({
10189
- id: z14.string(),
10190
- name: z14.string().min(1).max(20),
10191
- enabled: z14.boolean(),
10192
- priority: prioritySchema,
10193
- // Base appearance (token-based)
10194
- background: buttonBackgroundSchema,
10195
- textColorToken: z14.string(),
10196
- /** Tailwind radius token (e.g. `'rounded-md'`). Omit to inherit from `global.cornerStyle`. */
10197
- borderRadius: z14.string().optional(),
10198
- // Optional shadow override (uses theme.shadow if not specified)
10199
- shadow: variantShadowSchema.optional(),
10200
- // Border (optional)
10201
- border: buttonBorderSchema.optional(),
10202
- // Hover background token (per-variant override, takes precedence over global hoverColorToken)
10203
- hoverBackgroundToken: z14.string().optional(),
10204
- // Effect composition
10205
- effects: variantEffectsSchema.optional(),
10206
- // Per-variant size overrides — see VariantSizeOverrides
10207
- sizes: variantSizeOverridesSchema.optional()
10208
- });
10209
- var buttonSystemSchema = z14.object({
10210
- global: buttonGlobalSettingsSchema,
10211
- variants: z14.array(buttonVariantSchema).min(1).max(6),
10212
- sizes: buttonSizesSchema.optional()
10213
- });
10214
-
10215
- // ../theme-core/src/buttons/generateButtonCss.ts
10216
- var BUTTON_SIZE_NAMES = buttonSizeNameSchema.options;
10217
-
10218
- // ../theme-core/src/buttons/personalities/types.ts
10219
- import { z as z15 } from "zod";
10220
- function asButtonPersonalityId(value) {
10221
- if (value.length === 0) {
10222
- throw new Error("ButtonPersonalityId must be a non-empty string");
10223
- }
10224
- return value;
10225
- }
10226
- var buttonPersonalityIdSchema = z15.string().min(1).transform((value) => asButtonPersonalityId(value));
10227
- var buttonPersonalitySchema = z15.object({
10228
- id: buttonPersonalityIdSchema,
10229
- name: z15.string().min(1),
10230
- description: z15.string().min(1),
10231
- tags: styleTagsSchema,
10232
- buttonSystem: buttonSystemSchema
10233
- });
10234
- function defineButtonPersonality(input) {
10235
- return {
10236
- id: asButtonPersonalityId(input.id),
10237
- name: input.name,
10238
- description: input.description,
10239
- tags: input.tags,
10240
- buttonSystem: input.buttonSystem
10241
- };
10242
- }
10243
9864
 
10244
- // ../theme-core/src/buttons/personalities/brushed-wash.ts
10245
- var brushedWash = defineButtonPersonality({
10246
- id: "brushed-wash",
10247
- name: "Brushed Wash",
10248
- description: "Watercolour-gradient buttons with soft shadows and generous padding.",
10249
- tags: { tone: "classic", energy: "vibrant", motion: "standard", era: "organic" },
9865
+ // ../theme-core/src/buttons/personalities/ink-stamp.ts
9866
+ var inkStamp = defineButtonPersonality({
9867
+ id: "ink-stamp",
9868
+ name: "Ink Stamp",
9869
+ description: "Hand-stamped block-print buttons with a slight lift on hover.",
9870
+ tags: { tone: "bold", energy: "vibrant", motion: "standard", era: "organic" },
10250
9871
  buttonSystem: {
10251
9872
  global: {
10252
9873
  cornerStyle: "rounded",
10253
- shadow: "low",
10254
- textTransform: "none",
10255
- fontWeight: 500,
9874
+ shadow: "none",
9875
+ textTransform: "uppercase",
9876
+ fontWeight: 600,
10256
9877
  borderWidth: 1,
10257
9878
  hoverTransform: "none",
10258
- hoverColor: "none"
9879
+ hoverColor: "none",
9880
+ letterSpacing: "loose"
10259
9881
  },
10260
9882
  sizes: {
10261
- sm: { padding: "0.75rem 2rem", fontSize: "text-sm" },
10262
- md: { padding: "1rem 2.5rem" },
10263
- lg: { padding: "1.25rem 3rem", fontSize: "text-lg" },
10264
- xl: { padding: "1.625rem 3.75rem", fontSize: "text-xl" }
9883
+ sm: { padding: "0.5rem 1.25rem", fontSize: "text-xs" },
9884
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-sm" },
9885
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-base" },
9886
+ xl: { padding: "1.125rem 2.75rem", fontSize: "text-lg" }
10265
9887
  },
10266
9888
  variants: [
10267
9889
  {
@@ -10269,16 +9891,15 @@ var brushedWash = defineButtonPersonality({
10269
9891
  name: "Primary",
10270
9892
  enabled: true,
10271
9893
  priority: 1,
10272
- background: {
10273
- type: "gradient",
10274
- stops: ["primary", "accent"],
10275
- direction: "to-r"
10276
- },
9894
+ background: { type: "solid", colorToken: "primary" },
10277
9895
  textColorToken: "primaryForeground",
10278
- borderRadius: "rounded-lg",
10279
- shadow: { elevation: "low", softness: "soft", position: "bottom" },
9896
+ borderRadius: "rounded-md",
10280
9897
  effects: {
10281
- hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
9898
+ hover: [
9899
+ { effectId: "drop-shadow", options: { intensity: "medium" } },
9900
+ { effectId: "scale-up", options: { scale: "1.02" } }
9901
+ ],
9902
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
10282
9903
  }
10283
9904
  },
10284
9905
  {
@@ -10286,16 +9907,12 @@ var brushedWash = defineButtonPersonality({
10286
9907
  name: "Secondary",
10287
9908
  enabled: true,
10288
9909
  priority: 2,
10289
- background: {
10290
- type: "gradient",
10291
- stops: ["secondary", "accent"],
10292
- direction: "to-br"
10293
- },
10294
- textColorToken: "primaryForeground",
10295
- borderRadius: "rounded-lg",
10296
- shadow: { elevation: "low", softness: "soft", position: "bottom" },
9910
+ background: { type: "transparent" },
9911
+ textColorToken: "primary",
9912
+ borderRadius: "rounded-md",
9913
+ border: { widthClass: "border-2", colorToken: "primary" },
10297
9914
  effects: {
10298
- hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
9915
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10299
9916
  }
10300
9917
  },
10301
9918
  {
@@ -10304,9 +9921,9 @@ var brushedWash = defineButtonPersonality({
10304
9921
  enabled: true,
10305
9922
  priority: 3,
10306
9923
  background: { type: "transparent" },
10307
- textColorToken: "primary",
10308
- borderRadius: "rounded-lg",
10309
- border: { widthClass: "border", colorToken: "primary" },
9924
+ textColorToken: "text",
9925
+ borderRadius: "rounded-md",
9926
+ border: { widthClass: "border-2", colorToken: "border" },
10310
9927
  effects: {
10311
9928
  hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10312
9929
  }
@@ -10317,216 +9934,43 @@ var brushedWash = defineButtonPersonality({
10317
9934
  enabled: true,
10318
9935
  priority: 3,
10319
9936
  background: { type: "transparent" },
10320
- textColorToken: "text",
10321
- borderRadius: "rounded-lg",
9937
+ textColorToken: "accent",
9938
+ borderRadius: "rounded-none",
9939
+ sizes: {
9940
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
9941
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
9942
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
9943
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
9944
+ },
10322
9945
  effects: {
10323
- hover: [
10324
- { effectId: "background-on-hover", options: { colorToken: "surface" } }
10325
- ]
9946
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
10326
9947
  }
10327
9948
  }
10328
9949
  ]
10329
9950
  }
10330
9951
  });
10331
9952
 
10332
- // ../theme-core/src/buttons/personalities/confident-chip.ts
10333
- var confidentChip = defineButtonPersonality({
10334
- id: "confident-chip",
10335
- name: "Confident Chip",
10336
- description: "Mid-radius solid buttons with a crisp hover.",
10337
- tags: { tone: "classic", energy: "calm", motion: "standard", era: "modern" },
9953
+ // ../theme-core/src/buttons/personalities/pebble.ts
9954
+ var pebble = defineButtonPersonality({
9955
+ id: "pebble",
9956
+ name: "Pebble",
9957
+ description: "Generous pill buttons with a soft hover lift.",
9958
+ tags: { tone: "classic", energy: "calm", motion: "standard", era: "organic" },
10338
9959
  buttonSystem: {
10339
9960
  global: {
10340
- cornerStyle: "rounded",
10341
- shadow: "medium",
9961
+ cornerStyle: "pill",
9962
+ shadow: "none",
10342
9963
  textTransform: "none",
10343
- fontWeight: 600,
10344
- borderWidth: 1,
9964
+ fontWeight: 500,
9965
+ borderWidth: 2,
10345
9966
  hoverTransform: "none",
10346
9967
  hoverColor: "none"
10347
9968
  },
10348
- variants: [
10349
- {
10350
- id: "primary",
10351
- name: "Primary",
10352
- enabled: true,
10353
- priority: 1,
10354
- background: { type: "solid", colorToken: "primary" },
10355
- textColorToken: "primaryForeground",
10356
- borderRadius: "rounded-md",
10357
- shadow: { elevation: "medium", softness: "soft", position: "bottom" },
10358
- effects: {
10359
- hover: [{ effectId: "darken-background", options: { amount: 60 } }],
10360
- active: [{ effectId: "scale-down", options: { scale: "0.97" } }]
10361
- }
10362
- },
10363
- {
10364
- id: "secondary",
10365
- name: "Secondary",
10366
- enabled: true,
10367
- priority: 2,
10368
- background: { type: "solid", colorToken: "surface" },
10369
- textColorToken: "text",
10370
- borderRadius: "rounded-md",
10371
- border: { widthClass: "border", colorToken: "border" },
10372
- effects: {
10373
- hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
10374
- }
10375
- },
10376
- {
10377
- id: "outline",
10378
- name: "Outline",
10379
- enabled: true,
10380
- priority: 3,
10381
- background: { type: "transparent" },
10382
- textColorToken: "primary",
10383
- borderRadius: "rounded-md",
10384
- border: { widthClass: "border", colorToken: "primary" },
10385
- effects: {
10386
- hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10387
- }
10388
- },
10389
- {
10390
- id: "ghost",
10391
- name: "Ghost",
10392
- enabled: true,
10393
- priority: 3,
10394
- background: { type: "transparent" },
10395
- textColorToken: "primary",
10396
- borderRadius: "rounded-md",
10397
- effects: {
10398
- hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10399
- }
10400
- }
10401
- ]
10402
- }
10403
- });
10404
-
10405
- // ../theme-core/src/buttons/personalities/editorial-link.ts
10406
- var editorialLink = defineButtonPersonality({
10407
- id: "editorial-link",
10408
- name: "Editorial Link",
10409
- description: "Link-style with a growing underline. Refined, typographic.",
10410
- tags: { tone: "minimal", energy: "calm", motion: "subtle", era: "editorial" },
10411
- buttonSystem: {
10412
- global: {
10413
- cornerStyle: "square",
10414
- shadow: "none",
10415
- textTransform: "none",
10416
- fontWeight: 500,
10417
- borderWidth: 1,
10418
- hoverTransform: "none",
10419
- hoverColor: "none"
10420
- },
10421
- variants: [
10422
- {
10423
- id: "primary",
10424
- name: "Primary",
10425
- enabled: true,
10426
- priority: 1,
10427
- background: { type: "transparent" },
10428
- textColorToken: "text",
10429
- borderRadius: "rounded-none",
10430
- shadow: { elevation: "none", softness: null, position: "bottom" },
10431
- sizes: {
10432
- sm: { padding: "0.25rem 0" },
10433
- md: { padding: "0.5rem 0" },
10434
- lg: { padding: "0.625rem 0" },
10435
- xl: { padding: "0.75rem 0" }
10436
- },
10437
- effects: {
10438
- base: [
10439
- { effectId: "border-bottom-grow", options: { height: 2, colorToken: "text", origin: "left" } }
10440
- ]
10441
- }
10442
- },
10443
- {
10444
- id: "secondary",
10445
- name: "Secondary",
10446
- enabled: true,
10447
- priority: 2,
10448
- background: { type: "transparent" },
10449
- textColorToken: "mutedText",
10450
- borderRadius: "rounded-none",
10451
- shadow: { elevation: "none", softness: null, position: "bottom" },
10452
- sizes: {
10453
- sm: { padding: "0.25rem 0" },
10454
- md: { padding: "0.5rem 0" },
10455
- lg: { padding: "0.625rem 0" },
10456
- xl: { padding: "0.75rem 0" }
10457
- },
10458
- effects: {
10459
- base: [
10460
- { effectId: "border-bottom-grow", options: { height: 1, colorToken: "mutedText", origin: "left" } }
10461
- ]
10462
- }
10463
- },
10464
- {
10465
- id: "outline",
10466
- name: "Outline",
10467
- enabled: true,
10468
- priority: 3,
10469
- background: { type: "transparent" },
10470
- textColorToken: "accent",
10471
- borderRadius: "rounded-none",
10472
- shadow: { elevation: "none", softness: null, position: "bottom" },
10473
- sizes: {
10474
- sm: { padding: "0.25rem 0" },
10475
- md: { padding: "0.5rem 0" },
10476
- lg: { padding: "0.625rem 0" },
10477
- xl: { padding: "0.75rem 0" }
10478
- },
10479
- effects: {
10480
- base: [
10481
- { effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }
10482
- ]
10483
- }
10484
- },
10485
- {
10486
- id: "ghost",
10487
- name: "Ghost",
10488
- enabled: true,
10489
- priority: 3,
10490
- background: { type: "transparent" },
10491
- textColorToken: "mutedText",
10492
- borderRadius: "rounded-none",
10493
- shadow: { elevation: "none", softness: null, position: "bottom" },
10494
- sizes: {
10495
- sm: { padding: "0.25rem 0" },
10496
- md: { padding: "0.5rem 0" },
10497
- lg: { padding: "0.625rem 0" },
10498
- xl: { padding: "0.75rem 0" }
10499
- },
10500
- effects: {
10501
- hover: [{ effectId: "opacity-reduce", options: { reduction: -20 } }]
10502
- }
10503
- }
10504
- ]
10505
- }
10506
- });
10507
-
10508
- // ../theme-core/src/buttons/personalities/ink-stamp.ts
10509
- var inkStamp = defineButtonPersonality({
10510
- id: "ink-stamp",
10511
- name: "Ink Stamp",
10512
- description: "Hand-stamped block-print buttons with a slight lift on hover.",
10513
- tags: { tone: "bold", energy: "vibrant", motion: "standard", era: "organic" },
10514
- buttonSystem: {
10515
- global: {
10516
- cornerStyle: "rounded",
10517
- shadow: "none",
10518
- textTransform: "uppercase",
10519
- fontWeight: 600,
10520
- borderWidth: 1,
10521
- hoverTransform: "none",
10522
- hoverColor: "none",
10523
- letterSpacing: "loose"
10524
- },
10525
9969
  sizes: {
10526
- sm: { padding: "0.5rem 1.25rem", fontSize: "text-xs" },
10527
- md: { padding: "0.75rem 1.75rem", fontSize: "text-sm" },
10528
- lg: { padding: "0.875rem 2.25rem", fontSize: "text-base" },
10529
- xl: { padding: "1.125rem 2.75rem", fontSize: "text-lg" }
9970
+ sm: { padding: "0.625rem 1.75rem", fontSize: "text-sm" },
9971
+ md: { padding: "0.875rem 2.25rem" },
9972
+ lg: { padding: "1.125rem 2.75rem", fontSize: "text-lg" },
9973
+ xl: { padding: "1.5rem 3.5rem", fontSize: "text-xl" }
10530
9974
  },
10531
9975
  variants: [
10532
9976
  {
@@ -10536,13 +9980,12 @@ var inkStamp = defineButtonPersonality({
10536
9980
  priority: 1,
10537
9981
  background: { type: "solid", colorToken: "primary" },
10538
9982
  textColorToken: "primaryForeground",
10539
- borderRadius: "rounded-md",
9983
+ borderRadius: "rounded-full",
10540
9984
  effects: {
10541
9985
  hover: [
10542
- { effectId: "drop-shadow", options: { intensity: "medium" } },
10543
- { effectId: "scale-up", options: { scale: "1.02" } }
10544
- ],
10545
- active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
9986
+ { effectId: "scale-up", options: { scale: "1.03" } },
9987
+ { effectId: "drop-shadow", options: { intensity: "medium" } }
9988
+ ]
10546
9989
  }
10547
9990
  },
10548
9991
  {
@@ -10552,10 +9995,10 @@ var inkStamp = defineButtonPersonality({
10552
9995
  priority: 2,
10553
9996
  background: { type: "transparent" },
10554
9997
  textColorToken: "primary",
10555
- borderRadius: "rounded-md",
10556
- border: { widthClass: "border-2", colorToken: "primary" },
9998
+ borderRadius: "rounded-full",
9999
+ border: { widthClass: "border-2", colorToken: "accent" },
10557
10000
  effects: {
10558
- hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10001
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "accent" } }]
10559
10002
  }
10560
10003
  },
10561
10004
  {
@@ -10565,8 +10008,8 @@ var inkStamp = defineButtonPersonality({
10565
10008
  priority: 3,
10566
10009
  background: { type: "transparent" },
10567
10010
  textColorToken: "text",
10568
- borderRadius: "rounded-md",
10569
- border: { widthClass: "border-2", colorToken: "border" },
10011
+ borderRadius: "rounded-full",
10012
+ border: { widthClass: "border", colorToken: "border" },
10570
10013
  effects: {
10571
10014
  hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10572
10015
  }
@@ -10577,44 +10020,38 @@ var inkStamp = defineButtonPersonality({
10577
10020
  enabled: true,
10578
10021
  priority: 3,
10579
10022
  background: { type: "transparent" },
10580
- textColorToken: "accent",
10581
- borderRadius: "rounded-none",
10023
+ textColorToken: "primary",
10024
+ borderRadius: "rounded-full",
10582
10025
  sizes: {
10583
- sm: { padding: "0.375rem 0", fontSize: "text-xs" },
10584
- md: { padding: "0.5rem 0", fontSize: "text-sm" },
10585
- lg: { padding: "0.625rem 0", fontSize: "text-base" },
10586
- xl: { padding: "0.75rem 0", fontSize: "text-lg" }
10026
+ sm: { padding: "0.375rem 0.875rem", fontSize: "text-sm" },
10027
+ md: { padding: "0.5rem 1rem" },
10028
+ lg: { padding: "0.625rem 1.25rem", fontSize: "text-lg" },
10029
+ xl: { padding: "0.75rem 1.5rem", fontSize: "text-xl" }
10587
10030
  },
10588
10031
  effects: {
10589
- base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
10032
+ hover: [{ effectId: "opacity-reduce", options: { reduction: 30 } }]
10590
10033
  }
10591
10034
  }
10592
10035
  ]
10593
10036
  }
10594
10037
  });
10595
10038
 
10596
- // ../theme-core/src/buttons/personalities/pebble.ts
10597
- var pebble = defineButtonPersonality({
10598
- id: "pebble",
10599
- name: "Pebble",
10600
- description: "Generous pill buttons with a soft hover lift.",
10601
- tags: { tone: "classic", energy: "calm", motion: "standard", era: "organic" },
10039
+ // ../theme-core/src/buttons/personalities/soft-pill.ts
10040
+ var softPill = defineButtonPersonality({
10041
+ id: "soft-pill",
10042
+ name: "Soft Pill",
10043
+ description: "Rounded pills with a gentle lift on hover. Quietly modern.",
10044
+ tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
10602
10045
  buttonSystem: {
10603
10046
  global: {
10604
10047
  cornerStyle: "pill",
10605
- shadow: "none",
10048
+ shadow: "low",
10606
10049
  textTransform: "none",
10607
10050
  fontWeight: 500,
10608
10051
  borderWidth: 2,
10609
- hoverTransform: "none",
10052
+ hoverTransform: "lift",
10610
10053
  hoverColor: "none"
10611
10054
  },
10612
- sizes: {
10613
- sm: { padding: "0.625rem 1.75rem", fontSize: "text-sm" },
10614
- md: { padding: "0.875rem 2.25rem" },
10615
- lg: { padding: "1.125rem 2.75rem", fontSize: "text-lg" },
10616
- xl: { padding: "1.5rem 3.5rem", fontSize: "text-xl" }
10617
- },
10618
10055
  variants: [
10619
10056
  {
10620
10057
  id: "primary",
@@ -10624,11 +10061,10 @@ var pebble = defineButtonPersonality({
10624
10061
  background: { type: "solid", colorToken: "primary" },
10625
10062
  textColorToken: "primaryForeground",
10626
10063
  borderRadius: "rounded-full",
10064
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
10627
10065
  effects: {
10628
- hover: [
10629
- { effectId: "scale-up", options: { scale: "1.03" } },
10630
- { effectId: "drop-shadow", options: { intensity: "medium" } }
10631
- ]
10066
+ hover: [{ effectId: "lift", options: { translateY: "-1px" } }],
10067
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
10632
10068
  }
10633
10069
  },
10634
10070
  {
@@ -10639,9 +10075,9 @@ var pebble = defineButtonPersonality({
10639
10075
  background: { type: "transparent" },
10640
10076
  textColorToken: "primary",
10641
10077
  borderRadius: "rounded-full",
10642
- border: { widthClass: "border-2", colorToken: "accent" },
10078
+ border: { widthClass: "border-2", colorToken: "primary" },
10643
10079
  effects: {
10644
- hover: [{ effectId: "background-on-hover", options: { colorToken: "accent" } }]
10080
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10645
10081
  }
10646
10082
  },
10647
10083
  {
@@ -10663,86 +10099,7 @@ var pebble = defineButtonPersonality({
10663
10099
  enabled: true,
10664
10100
  priority: 3,
10665
10101
  background: { type: "transparent" },
10666
- textColorToken: "primary",
10667
- borderRadius: "rounded-full",
10668
- sizes: {
10669
- sm: { padding: "0.375rem 0.875rem", fontSize: "text-sm" },
10670
- md: { padding: "0.5rem 1rem" },
10671
- lg: { padding: "0.625rem 1.25rem", fontSize: "text-lg" },
10672
- xl: { padding: "0.75rem 1.5rem", fontSize: "text-xl" }
10673
- },
10674
- effects: {
10675
- hover: [{ effectId: "opacity-reduce", options: { reduction: 30 } }]
10676
- }
10677
- }
10678
- ]
10679
- }
10680
- });
10681
-
10682
- // ../theme-core/src/buttons/personalities/soft-pill.ts
10683
- var softPill = defineButtonPersonality({
10684
- id: "soft-pill",
10685
- name: "Soft Pill",
10686
- description: "Rounded pills with a gentle lift on hover. Quietly modern.",
10687
- tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
10688
- buttonSystem: {
10689
- global: {
10690
- cornerStyle: "pill",
10691
- shadow: "low",
10692
- textTransform: "none",
10693
- fontWeight: 500,
10694
- borderWidth: 2,
10695
- hoverTransform: "lift",
10696
- hoverColor: "none"
10697
- },
10698
- variants: [
10699
- {
10700
- id: "primary",
10701
- name: "Primary",
10702
- enabled: true,
10703
- priority: 1,
10704
- background: { type: "solid", colorToken: "primary" },
10705
- textColorToken: "primaryForeground",
10706
- borderRadius: "rounded-full",
10707
- shadow: { elevation: "low", softness: "soft", position: "bottom" },
10708
- effects: {
10709
- hover: [{ effectId: "lift", options: { translateY: "-1px" } }],
10710
- active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
10711
- }
10712
- },
10713
- {
10714
- id: "secondary",
10715
- name: "Secondary",
10716
- enabled: true,
10717
- priority: 2,
10718
- background: { type: "transparent" },
10719
- textColorToken: "primary",
10720
- borderRadius: "rounded-full",
10721
- border: { widthClass: "border-2", colorToken: "primary" },
10722
- effects: {
10723
- hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10724
- }
10725
- },
10726
- {
10727
- id: "outline",
10728
- name: "Outline",
10729
- enabled: true,
10730
- priority: 3,
10731
- background: { type: "transparent" },
10732
- textColorToken: "text",
10733
- borderRadius: "rounded-full",
10734
- border: { widthClass: "border", colorToken: "border" },
10735
- effects: {
10736
- hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10737
- }
10738
- },
10739
- {
10740
- id: "ghost",
10741
- name: "Ghost",
10742
- enabled: true,
10743
- priority: 3,
10744
- background: { type: "transparent" },
10745
- textColorToken: "text",
10102
+ textColorToken: "text",
10746
10103
  borderRadius: "rounded-full",
10747
10104
  effects: {
10748
10105
  hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
@@ -10765,49 +10122,101 @@ var personalitiesById = new Map(
10765
10122
  buttonPersonalities.map((p) => [p.id, p])
10766
10123
  );
10767
10124
 
10125
+ // ../theme-core/src/palette/variants/types.ts
10126
+ import { z as z23 } from "zod";
10127
+
10128
+ // ../theme-core/src/schema.ts
10129
+ import { z as z22 } from "zod";
10130
+
10131
+ // ../theme-core/src/lib/media.ts
10132
+ import z12 from "zod";
10133
+ var hotspotSchema = z12.object({
10134
+ x: z12.number().min(0).max(1),
10135
+ y: z12.number().min(0).max(1),
10136
+ radius: z12.number().optional()
10137
+ });
10138
+ var rotationSchema = z12.union([z12.literal(0), z12.literal(90), z12.literal(180), z12.literal(270)]);
10139
+ var rectSchema = z12.tuple([z12.number(), z12.number(), z12.number(), z12.number()]);
10140
+ var aspectCropSchema = z12.object({
10141
+ aspect: z12.preprocess((value) => value == null ? void 0 : value, z12.string().optional()),
10142
+ rect: z12.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
10143
+ hotspot: z12.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
10144
+ rotation: z12.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
10145
+ });
10146
+ var transformSchema = z12.object({
10147
+ aspectCrops: z12.preprocess((value) => {
10148
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
10149
+ return void 0;
10150
+ }
10151
+ return value;
10152
+ }, z12.record(z12.string(), aspectCropSchema.catch({}))).optional(),
10153
+ rect: rectSchema.optional(),
10154
+ hotspot: hotspotSchema.optional(),
10155
+ rotation: rotationSchema.optional()
10156
+ });
10157
+ var mediaSchema = z12.object({
10158
+ type: z12.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
10159
+ purpose: z12.string().optional(),
10160
+ placeholder: z12.boolean().default(true).optional(),
10161
+ assetId: z12.string().optional(),
10162
+ identifier: z12.string().optional(),
10163
+ src: z12.string().optional(),
10164
+ alt: z12.string().optional(),
10165
+ filename: z12.string().optional(),
10166
+ mimeType: z12.string().optional(),
10167
+ width: z12.number().optional(),
10168
+ height: z12.number().optional(),
10169
+ storageBucket: z12.string().optional(),
10170
+ storagePath: z12.string().optional(),
10171
+ transform: transformSchema.optional()
10172
+ });
10173
+
10174
+ // ../theme-core/src/buttons/generateButtonCss.ts
10175
+ var BUTTON_SIZE_NAMES = buttonSizeNameSchema.options;
10176
+
10768
10177
  // ../theme-core/src/cards/types.ts
10769
- import { z as z16 } from "zod";
10770
- var cardSpacingSchema = z16.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
10771
- var gradientDirectionSchema2 = z16.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
10772
- var cardBackgroundSchema = z16.discriminatedUnion("type", [
10773
- z16.object({ type: z16.literal("solid"), colorToken: z16.string() }),
10774
- z16.object({
10775
- type: z16.literal("gradient"),
10776
- fromToken: z16.string(),
10777
- toToken: z16.string(),
10178
+ import { z as z13 } from "zod";
10179
+ var cardSpacingSchema = z13.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
10180
+ var gradientDirectionSchema2 = z13.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
10181
+ var cardBackgroundSchema = z13.discriminatedUnion("type", [
10182
+ z13.object({ type: z13.literal("solid"), colorToken: z13.string() }),
10183
+ z13.object({
10184
+ type: z13.literal("gradient"),
10185
+ fromToken: z13.string(),
10186
+ toToken: z13.string(),
10778
10187
  direction: gradientDirectionSchema2
10779
10188
  }),
10780
- z16.object({ type: z16.literal("transparent") })
10189
+ z13.object({ type: z13.literal("transparent") })
10781
10190
  ]);
10782
- var cardBorderSchema = z16.object({
10783
- widthClass: z16.string(),
10784
- colorToken: z16.string()
10785
- });
10786
- var cardVariantSchema = z16.object({
10787
- id: z16.string(),
10788
- name: z16.string().min(1).max(20),
10789
- enabled: z16.boolean(),
10790
- priority: z16.union([z16.literal(1), z16.literal(2), z16.literal(3)]),
10191
+ var cardBorderSchema = z13.object({
10192
+ widthClass: z13.string(),
10193
+ colorToken: z13.string()
10194
+ });
10195
+ var cardVariantSchema = z13.object({
10196
+ id: z13.string(),
10197
+ name: z13.string().min(1).max(20),
10198
+ enabled: z13.boolean(),
10199
+ priority: z13.union([z13.literal(1), z13.literal(2), z13.literal(3)]),
10791
10200
  // Appearance (token-based)
10792
10201
  background: cardBackgroundSchema,
10793
10202
  spacing: cardSpacingSchema,
10794
10203
  // Optional overrides (uses theme defaults if not specified)
10795
- shadow: z16.object({
10796
- elevation: z16.enum(["none", "low", "medium", "high"]),
10797
- softness: z16.enum(["crisp", "soft", "hard"]).nullable(),
10798
- position: z16.enum(["bottom", "bottom-right"]).default("bottom")
10204
+ shadow: z13.object({
10205
+ elevation: z13.enum(["none", "low", "medium", "high"]),
10206
+ softness: z13.enum(["crisp", "soft", "hard"]).nullable(),
10207
+ position: z13.enum(["bottom", "bottom-right"]).default("bottom")
10799
10208
  }).optional(),
10800
- corners: z16.enum(["square", "soft", "rounded", "pill"]).optional(),
10209
+ corners: z13.enum(["square", "soft", "rounded", "pill"]).optional(),
10801
10210
  // Border (optional)
10802
10211
  border: cardBorderSchema.optional()
10803
10212
  });
10804
- var cardSystemSchema = z16.object({
10805
- variants: z16.array(cardVariantSchema).min(1).max(3)
10213
+ var cardSystemSchema = z13.object({
10214
+ variants: z13.array(cardVariantSchema).min(1).max(3)
10806
10215
  });
10807
10216
 
10808
10217
  // ../theme-core/src/accordions/types.ts
10809
- import { z as z17 } from "zod";
10810
- var accordionIconSchema = z17.enum([
10218
+ import { z as z14 } from "zod";
10219
+ var accordionIconSchema = z14.enum([
10811
10220
  "plus-minus",
10812
10221
  // + becomes - (swap or rotate 90°)
10813
10222
  "chevron",
@@ -10819,180 +10228,180 @@ var accordionIconSchema = z17.enum([
10819
10228
  "circle-plus-minus"
10820
10229
  // ⊕ becomes ⊖ (swap with fade)
10821
10230
  ]);
10822
- var accordionSystemSchema = z17.object({
10231
+ var accordionSystemSchema = z14.object({
10823
10232
  // Visual styling (solid color only - gradients can be added later if needed)
10824
- background: z17.object({
10825
- type: z17.literal("solid"),
10826
- colorToken: z17.string()
10233
+ background: z14.object({
10234
+ type: z14.literal("solid"),
10235
+ colorToken: z14.string()
10827
10236
  }),
10828
10237
  // Spacing (padding inside items)
10829
- spacing: z17.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
10238
+ spacing: z14.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
10830
10239
  // Border radius (null = inherit from theme.corners)
10831
- corners: z17.enum(["square", "soft", "rounded", "pill"]).nullable(),
10240
+ corners: z14.enum(["square", "soft", "rounded", "pill"]).nullable(),
10832
10241
  // Border styling (null = inherit from theme.border)
10833
- border: z17.object({
10834
- widthClass: z17.string(),
10242
+ border: z14.object({
10243
+ widthClass: z14.string(),
10835
10244
  // e.g., 'border', 'border-2', 'border-0'
10836
- colorToken: z17.string()
10245
+ colorToken: z14.string()
10837
10246
  }).nullable(),
10838
10247
  // Shadow (null = inherit from theme.shadow)
10839
- shadow: z17.object({
10840
- elevation: z17.enum(["none", "low", "medium", "high"]),
10841
- softness: z17.enum(["soft", "crisp", "hard"]).nullable(),
10842
- position: z17.enum(["bottom", "bottom-right"])
10248
+ shadow: z14.object({
10249
+ elevation: z14.enum(["none", "low", "medium", "high"]),
10250
+ softness: z14.enum(["soft", "crisp", "hard"]).nullable(),
10251
+ position: z14.enum(["bottom", "bottom-right"])
10843
10252
  }).nullable(),
10844
10253
  // Icon style and animation
10845
- icon: z17.object({
10254
+ icon: z14.object({
10846
10255
  style: accordionIconSchema,
10847
- position: z17.enum(["left", "right"]),
10848
- size: z17.enum(["sm", "md", "lg"])
10256
+ position: z14.enum(["left", "right"]),
10257
+ size: z14.enum(["sm", "md", "lg"])
10849
10258
  }),
10850
10259
  // Trigger (question) styling
10851
- trigger: z17.object({
10852
- textColorToken: z17.string(),
10853
- fontWeight: z17.enum(["regular", "medium", "semibold", "bold"]).nullable()
10260
+ trigger: z14.object({
10261
+ textColorToken: z14.string(),
10262
+ fontWeight: z14.enum(["regular", "medium", "semibold", "bold"]).nullable()
10854
10263
  // null = inherit from theme
10855
10264
  }),
10856
10265
  // Hover state styling
10857
- hover: z17.object({
10858
- backgroundColorToken: z17.string().optional(),
10859
- textColorToken: z17.string().optional(),
10860
- borderColorToken: z17.string().optional()
10266
+ hover: z14.object({
10267
+ backgroundColorToken: z14.string().optional(),
10268
+ textColorToken: z14.string().optional(),
10269
+ borderColorToken: z14.string().optional()
10861
10270
  }),
10862
10271
  // Content (answer) styling
10863
- content: z17.object({
10864
- textColorToken: z17.string()
10272
+ content: z14.object({
10273
+ textColorToken: z14.string()
10865
10274
  })
10866
10275
  });
10867
10276
 
10868
10277
  // ../theme-core/src/inputs/types.ts
10869
- import { z as z18 } from "zod";
10870
- var inputSystemSchema = z18.object({
10278
+ import { z as z15 } from "zod";
10279
+ var inputSystemSchema = z15.object({
10871
10280
  // Base styling (applied to all inputs)
10872
- base: z18.object({
10873
- background: z18.union([
10874
- z18.object({
10875
- type: z18.literal("solid"),
10876
- colorToken: z18.string()
10281
+ base: z15.object({
10282
+ background: z15.union([
10283
+ z15.object({
10284
+ type: z15.literal("solid"),
10285
+ colorToken: z15.string()
10877
10286
  }),
10878
- z18.object({
10879
- type: z18.literal("transparent")
10287
+ z15.object({
10288
+ type: z15.literal("transparent")
10880
10289
  })
10881
10290
  ]),
10882
- textColorToken: z18.string(),
10883
- border: z18.object({
10884
- widthClass: z18.string(),
10291
+ textColorToken: z15.string(),
10292
+ border: z15.object({
10293
+ widthClass: z15.string(),
10885
10294
  // e.g., 'border', 'border-2'
10886
- colorToken: z18.string(),
10887
- style: z18.enum(["all", "underline"]).optional()
10295
+ colorToken: z15.string(),
10296
+ style: z15.enum(["all", "underline"]).optional()
10888
10297
  }),
10889
- corners: z18.enum(["square", "soft", "rounded", "pill"]).nullable(),
10298
+ corners: z15.enum(["square", "soft", "rounded", "pill"]).nullable(),
10890
10299
  // null = inherit from theme.corners
10891
- shadow: z18.object({
10892
- elevation: z18.enum(["none", "low", "medium"]),
10893
- softness: z18.enum(["soft", "crisp", "hard"]).nullable()
10300
+ shadow: z15.object({
10301
+ elevation: z15.enum(["none", "low", "medium"]),
10302
+ softness: z15.enum(["soft", "crisp", "hard"]).nullable()
10894
10303
  }).nullable(),
10895
- spacing: z18.enum(["compact", "cozy", "medium", "comfortable"]),
10304
+ spacing: z15.enum(["compact", "cozy", "medium", "comfortable"]),
10896
10305
  // padding inside inputs
10897
- fontSize: z18.enum(["sm", "base", "lg"])
10306
+ fontSize: z15.enum(["sm", "base", "lg"])
10898
10307
  }),
10899
10308
  // Label styling
10900
- label: z18.object({
10901
- textColorToken: z18.string(),
10902
- fontWeight: z18.enum(["regular", "medium", "semibold", "bold", "black"]),
10903
- fontSize: z18.enum(["2xs", "xs", "sm", "base"]),
10904
- textTransform: z18.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
10905
- letterSpacing: z18.enum(["normal", "wide", "wider", "widest"]).optional(),
10906
- opacity: z18.number().min(0.2).max(1).optional()
10309
+ label: z15.object({
10310
+ textColorToken: z15.string(),
10311
+ fontWeight: z15.enum(["regular", "medium", "semibold", "bold", "black"]),
10312
+ fontSize: z15.enum(["2xs", "xs", "sm", "base"]),
10313
+ textTransform: z15.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
10314
+ letterSpacing: z15.enum(["normal", "wide", "wider", "widest"]).optional(),
10315
+ opacity: z15.number().min(0.2).max(1).optional()
10907
10316
  }),
10908
10317
  // Focus state
10909
- focus: z18.object({
10910
- ringColorToken: z18.string(),
10911
- ringWidth: z18.enum(["0", "1", "2", "3"]),
10912
- borderColorToken: z18.string().optional()
10318
+ focus: z15.object({
10319
+ ringColorToken: z15.string(),
10320
+ ringWidth: z15.enum(["0", "1", "2", "3"]),
10321
+ borderColorToken: z15.string().optional()
10913
10322
  // Change border color on focus
10914
10323
  }),
10915
10324
  // Error state (for validation feedback)
10916
- error: z18.object({
10917
- borderColorToken: z18.string(),
10918
- textColorToken: z18.string()
10325
+ error: z15.object({
10326
+ borderColorToken: z15.string(),
10327
+ textColorToken: z15.string()
10919
10328
  }),
10920
10329
  // Disabled state
10921
- disabled: z18.object({
10922
- backgroundColorToken: z18.string(),
10923
- textColorToken: z18.string(),
10924
- opacity: z18.number().min(0.3).max(0.7)
10330
+ disabled: z15.object({
10331
+ backgroundColorToken: z15.string(),
10332
+ textColorToken: z15.string(),
10333
+ opacity: z15.number().min(0.3).max(0.7)
10925
10334
  })
10926
10335
  });
10927
10336
 
10928
10337
  // ../theme-core/src/gradients/types.ts
10929
- import { z as z19 } from "zod";
10930
- var gradientStopSchema = z19.object({
10931
- color: z19.string(),
10338
+ import { z as z16 } from "zod";
10339
+ var gradientStopSchema = z16.object({
10340
+ color: z16.string(),
10932
10341
  // Theme color token name (e.g., 'primary-500')
10933
- position: z19.number().min(0).max(100)
10342
+ position: z16.number().min(0).max(100)
10934
10343
  // Percentage 0-100
10935
10344
  });
10936
- var gradientConfigSchema = z19.object({
10937
- type: z19.enum(["linear", "radial"]),
10938
- angle: z19.number().min(0).max(360).optional(),
10345
+ var gradientConfigSchema = z16.object({
10346
+ type: z16.enum(["linear", "radial"]),
10347
+ angle: z16.number().min(0).max(360).optional(),
10939
10348
  // For linear gradients (degrees)
10940
- position: z19.string().optional(),
10349
+ position: z16.string().optional(),
10941
10350
  // For radial gradients ('center', 'top left', etc.)
10942
- stops: z19.array(gradientStopSchema).min(2)
10351
+ stops: z16.array(gradientStopSchema).min(2)
10943
10352
  });
10944
10353
 
10945
10354
  // ../theme-core/src/navigation/types.ts
10946
- import { z as z21 } from "zod";
10355
+ import { z as z18 } from "zod";
10947
10356
 
10948
10357
  // ../theme-core/src/interactive/baseSchema.ts
10949
- import { z as z20 } from "zod";
10950
- var interactiveTypographySchema = z20.object({
10358
+ import { z as z17 } from "zod";
10359
+ var interactiveTypographySchema = z17.object({
10951
10360
  /** Font family source */
10952
- typography: z20.enum(["body", "heading"]).default("body"),
10361
+ typography: z17.enum(["body", "heading"]).default("body"),
10953
10362
  /** Font weight */
10954
- fontWeight: z20.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
10363
+ fontWeight: z17.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
10955
10364
  /** Text transform */
10956
- textTransform: z20.enum(["none", "uppercase", "capitalize"]).default("none"),
10365
+ textTransform: z17.enum(["none", "uppercase", "capitalize"]).default("none"),
10957
10366
  /** Italic style */
10958
- italic: z20.boolean().default(false)
10367
+ italic: z17.boolean().default(false)
10959
10368
  });
10960
- var effectApplicationSchema2 = z20.object({
10369
+ var effectApplicationSchema2 = z17.object({
10961
10370
  /** Effect preset ID */
10962
- effectId: z20.string(),
10371
+ effectId: z17.string(),
10963
10372
  /** User-provided customization options */
10964
- options: z20.record(z20.string(), z20.any()).optional()
10373
+ options: z17.record(z17.string(), z17.any()).optional()
10965
10374
  });
10966
- var effectCompositionSchema = z20.object({
10375
+ var effectCompositionSchema = z17.object({
10967
10376
  /** Effects always applied */
10968
- base: z20.array(effectApplicationSchema2).optional(),
10377
+ base: z17.array(effectApplicationSchema2).optional(),
10969
10378
  /** Effects applied on hover */
10970
- hover: z20.array(effectApplicationSchema2).optional(),
10379
+ hover: z17.array(effectApplicationSchema2).optional(),
10971
10380
  /** Effects applied on active/pressed */
10972
- active: z20.array(effectApplicationSchema2).optional(),
10381
+ active: z17.array(effectApplicationSchema2).optional(),
10973
10382
  /** Effects applied on focus */
10974
- focus: z20.array(effectApplicationSchema2).optional()
10383
+ focus: z17.array(effectApplicationSchema2).optional()
10975
10384
  });
10976
10385
 
10977
10386
  // ../theme-core/src/navigation/types.ts
10978
- var navLinkPaddingSchema = z21.enum(["none", "compact", "default"]);
10979
- var navLinkPaddingXSchema = z21.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10980
- var navLinkBorderRadiusSchema = z21.enum(["none", "sm", "md", "full"]);
10981
- var navLinkTextSizeSchema = z21.enum(["xs", "sm", "base", "lg"]);
10982
- var navLinkLetterSpacingSchema = z21.enum(["normal", "wide", "wider", "widest"]);
10983
- var navLinkStyleSchema = z21.object({
10387
+ var navLinkPaddingSchema = z18.enum(["none", "compact", "default"]);
10388
+ var navLinkPaddingXSchema = z18.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10389
+ var navLinkBorderRadiusSchema = z18.enum(["none", "sm", "md", "full"]);
10390
+ var navLinkTextSizeSchema = z18.enum(["xs", "sm", "base", "lg"]);
10391
+ var navLinkLetterSpacingSchema = z18.enum(["normal", "wide", "wider", "widest"]);
10392
+ var navLinkStyleSchema = z18.object({
10984
10393
  /** Display name for the style */
10985
- name: z21.string().min(1).max(30).optional(),
10394
+ name: z18.string().min(1).max(30).optional(),
10986
10395
  /** Typography settings (inherited from interactive base) */
10987
10396
  ...interactiveTypographySchema.shape,
10988
10397
  /** Text color token */
10989
- colorToken: z21.string().default("text"),
10398
+ colorToken: z18.string().default("text"),
10990
10399
  /** Optional text size override */
10991
10400
  textSize: navLinkTextSizeSchema.optional(),
10992
10401
  /** Optional letter spacing override */
10993
10402
  letterSpacing: navLinkLetterSpacingSchema.optional(),
10994
10403
  /** Hover/active color token (for color-change effects) */
10995
- hoverColorToken: z21.string().nullable().optional(),
10404
+ hoverColorToken: z18.string().nullable().optional(),
10996
10405
  /** Padding preset */
10997
10406
  padding: navLinkPaddingSchema.default("compact"),
10998
10407
  /** Horizontal padding override (overrides horizontal component of padding preset) */
@@ -11004,7 +10413,7 @@ var navLinkStyleSchema = z21.object({
11004
10413
  });
11005
10414
 
11006
10415
  // ../theme-core/src/customCss/validation.ts
11007
- import { z as z22 } from "zod";
10416
+ import { z as z19 } from "zod";
11008
10417
  var FORBIDDEN_SELECTORS = [":root", "html", "body"];
11009
10418
  var UNIVERSAL_SELECTOR = "*";
11010
10419
  var REMOTE_URL_PATTERN = /url\s*\(\s*['"]?(https?:|\/\/)/i;
@@ -11046,7 +10455,7 @@ function containsForbiddenSelector(selector) {
11046
10455
  }
11047
10456
  return false;
11048
10457
  }
11049
- var selectorSchema = z22.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
10458
+ var selectorSchema = z19.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
11050
10459
  (s) => !containsForbiddenSelector(s),
11051
10460
  { message: "Global selectors (:root, html, body, *) are not allowed" }
11052
10461
  );
@@ -11056,38 +10465,38 @@ function containsRemoteUrl(value) {
11056
10465
  function containsJavascriptUrl(value) {
11057
10466
  return JAVASCRIPT_URL_PATTERN.test(value);
11058
10467
  }
11059
- var declarationValueSchema = z22.string().max(500, "Declaration value too long (max 500 characters)").refine(
10468
+ var declarationValueSchema = z19.string().max(500, "Declaration value too long (max 500 characters)").refine(
11060
10469
  (v) => !containsRemoteUrl(v),
11061
10470
  { message: "Remote url() references are not allowed. Use local paths, data URIs, or fragment IDs." }
11062
10471
  ).refine(
11063
10472
  (v) => !containsJavascriptUrl(v),
11064
10473
  { message: "javascript: URLs are not allowed" }
11065
10474
  );
11066
- var declarationsSchema = z22.record(
11067
- z22.string().min(1).max(100),
10475
+ var declarationsSchema = z19.record(
10476
+ z19.string().min(1).max(100),
11068
10477
  // property name
11069
10478
  declarationValueSchema
11070
10479
  // property value
11071
10480
  );
11072
- var customCssRuleSchema = z22.object({
11073
- id: z22.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
10481
+ var customCssRuleSchema = z19.object({
10482
+ id: z19.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
11074
10483
  selector: selectorSchema,
11075
10484
  declarations: declarationsSchema
11076
10485
  });
11077
10486
  var blockCustomCssRuleSchema = customCssRuleSchema.extend({
11078
- blockKind: z22.string().min(1, "Block kind is required").max(50, "Block kind too long")
10487
+ blockKind: z19.string().min(1, "Block kind is required").max(50, "Block kind too long")
11079
10488
  });
11080
- var customCssRulesSchema = z22.array(customCssRuleSchema).optional();
11081
- var blockCustomCssRulesSchema = z22.array(blockCustomCssRuleSchema).optional();
10489
+ var customCssRulesSchema = z19.array(customCssRuleSchema).optional();
10490
+ var blockCustomCssRulesSchema = z19.array(blockCustomCssRuleSchema).optional();
11082
10491
 
11083
10492
  // ../theme-core/src/customCss/atRuleValidation.ts
11084
- import { z as z23 } from "zod";
10493
+ import { z as z20 } from "zod";
11085
10494
  var KEYFRAME_OFFSET_PATTERN = /^(from|to|\d{1,3}%)$/i;
11086
10495
  var ANIMATION_NAME_PATTERN = /^[a-zA-Z_-][a-zA-Z0-9_-]*$/;
11087
10496
  var BLOCKED_AT_RULES = ["@import", "@charset"];
11088
10497
  var BLOCKED_AT_RULE_PATTERN = /@(?:import|charset)\b/i;
11089
- var ruleIdSchema = z23.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
11090
- var nestedRuleSchema = z23.object({
10498
+ var ruleIdSchema = z20.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
10499
+ var nestedRuleSchema = z20.object({
11091
10500
  selector: selectorSchema,
11092
10501
  declarations: declarationsSchema
11093
10502
  });
@@ -11099,146 +10508,146 @@ function isValidKeyframeOffset(offset) {
11099
10508
  const value = parseInt(match[1], 10);
11100
10509
  return value >= 0 && value <= 100;
11101
10510
  }
11102
- var keyframeOffsetSchema = z23.string().transform((offset) => offset.trim()).refine(
10511
+ var keyframeOffsetSchema = z20.string().transform((offset) => offset.trim()).refine(
11103
10512
  (offset) => KEYFRAME_OFFSET_PATTERN.test(offset),
11104
10513
  { message: 'Invalid keyframe offset. Use percentages (0%, 50%, 100%) or "from"/"to"' }
11105
10514
  ).refine(
11106
10515
  isValidKeyframeOffset,
11107
10516
  { message: "Keyframe offset must be between 0% and 100%" }
11108
10517
  );
11109
- var animationNameSchema = z23.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
10518
+ var animationNameSchema = z20.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
11110
10519
  (name) => ANIMATION_NAME_PATTERN.test(name),
11111
10520
  { message: "Invalid animation name. Use letters, numbers, dashes, underscores (start with letter, dash, or underscore)" }
11112
10521
  );
11113
- var keyframeSchema = z23.object({
10522
+ var keyframeSchema = z20.object({
11114
10523
  offset: keyframeOffsetSchema,
11115
10524
  declarations: declarationsSchema
11116
10525
  });
11117
- var keyframesAtRuleSchema = z23.object({
10526
+ var keyframesAtRuleSchema = z20.object({
11118
10527
  id: ruleIdSchema,
11119
- type: z23.literal("keyframes"),
10528
+ type: z20.literal("keyframes"),
11120
10529
  name: animationNameSchema,
11121
- frames: z23.array(keyframeSchema).min(1, "At least one keyframe is required")
10530
+ frames: z20.array(keyframeSchema).min(1, "At least one keyframe is required")
11122
10531
  });
11123
- var fontFaceDeclarationsSchema = z23.record(z23.string().min(1).max(100), declarationValueSchema).refine(
10532
+ var fontFaceDeclarationsSchema = z20.record(z20.string().min(1).max(100), declarationValueSchema).refine(
11124
10533
  (decls) => "fontFamily" in decls || "font-family" in decls,
11125
10534
  { message: "font-family is required in @font-face" }
11126
10535
  );
11127
- var fontFaceAtRuleSchema = z23.object({
10536
+ var fontFaceAtRuleSchema = z20.object({
11128
10537
  id: ruleIdSchema,
11129
- type: z23.literal("font-face"),
10538
+ type: z20.literal("font-face"),
11130
10539
  declarations: fontFaceDeclarationsSchema
11131
10540
  });
11132
- var mediaQuerySchema = z23.string().min(1, "Media query is required").max(200, "Media query too long");
11133
- var mediaAtRuleSchema = z23.object({
10541
+ var mediaQuerySchema = z20.string().min(1, "Media query is required").max(200, "Media query too long");
10542
+ var mediaAtRuleSchema = z20.object({
11134
10543
  id: ruleIdSchema,
11135
- type: z23.literal("media"),
10544
+ type: z20.literal("media"),
11136
10545
  query: mediaQuerySchema,
11137
- rules: z23.array(nestedRuleSchema).min(1, "At least one rule is required")
10546
+ rules: z20.array(nestedRuleSchema).min(1, "At least one rule is required")
11138
10547
  });
11139
- var supportsConditionSchema = z23.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
11140
- var supportsAtRuleSchema = z23.object({
10548
+ var supportsConditionSchema = z20.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
10549
+ var supportsAtRuleSchema = z20.object({
11141
10550
  id: ruleIdSchema,
11142
- type: z23.literal("supports"),
10551
+ type: z20.literal("supports"),
11143
10552
  condition: supportsConditionSchema,
11144
- rules: z23.array(nestedRuleSchema).min(1, "At least one rule is required")
10553
+ rules: z20.array(nestedRuleSchema).min(1, "At least one rule is required")
11145
10554
  });
11146
10555
  function containsBlockedAtRule(css) {
11147
10556
  return BLOCKED_AT_RULE_PATTERN.test(css);
11148
10557
  }
11149
- var rawCssSchema = z23.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
10558
+ var rawCssSchema = z20.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
11150
10559
  (css) => css.trim().startsWith("@"),
11151
10560
  { message: "Raw at-rule must start with @" }
11152
10561
  ).refine(
11153
10562
  (css) => !containsBlockedAtRule(css),
11154
10563
  { message: `Blocked at-rules: ${BLOCKED_AT_RULES.join(", ")}. Use typed at-rules or local assets instead.` }
11155
10564
  );
11156
- var rawAtRuleSchema = z23.object({
10565
+ var rawAtRuleSchema = z20.object({
11157
10566
  id: ruleIdSchema,
11158
- type: z23.literal("raw"),
10567
+ type: z20.literal("raw"),
11159
10568
  css: rawCssSchema
11160
10569
  });
11161
- var customCssAtRuleSchema = z23.discriminatedUnion("type", [
10570
+ var customCssAtRuleSchema = z20.discriminatedUnion("type", [
11162
10571
  keyframesAtRuleSchema,
11163
10572
  fontFaceAtRuleSchema,
11164
10573
  mediaAtRuleSchema,
11165
10574
  supportsAtRuleSchema,
11166
10575
  rawAtRuleSchema
11167
10576
  ]);
11168
- var customCssAtRulesSchema = z23.array(customCssAtRuleSchema).optional();
10577
+ var customCssAtRulesSchema = z20.array(customCssAtRuleSchema).optional();
11169
10578
 
11170
10579
  // ../theme-core/src/shared/componentStyles.ts
11171
- import { z as z24 } from "zod";
11172
- var componentBorderSchema = z24.object({
11173
- width: z24.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
11174
- style: z24.enum(["solid", "dashed"]).default("solid"),
11175
- colorToken: z24.string().optional()
10580
+ import { z as z21 } from "zod";
10581
+ var componentBorderSchema = z21.object({
10582
+ width: z21.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
10583
+ style: z21.enum(["solid", "dashed"]).default("solid"),
10584
+ colorToken: z21.string().optional()
11176
10585
  // defaults to "border" if not set
11177
10586
  });
11178
- var componentShadowSchema = z24.object({
11179
- elevation: z24.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
10587
+ var componentShadowSchema = z21.object({
10588
+ elevation: z21.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
11180
10589
  });
11181
10590
 
11182
10591
  // ../theme-core/src/schema.ts
11183
- var axesSchema = z25.object({
11184
- tone: z25.enum(["minimal", "classic", "bold"]),
11185
- energy: z25.enum(["calm", "vibrant"]),
11186
- density: z25.enum(["airy", "regular", "compact"]),
11187
- mediaBias: z25.enum(["text", "media", "mixed"]),
11188
- conversionBias: z25.enum(["low", "med", "high"]),
11189
- motion: z25.enum(["subtle", "standard", "expressive"])
11190
- });
11191
- var colourHexString = z25.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
11192
- var paletteColorSchema = z25.object({
11193
- name: z25.string().min(1),
10592
+ var axesSchema = z22.object({
10593
+ tone: z22.enum(["minimal", "classic", "bold"]),
10594
+ energy: z22.enum(["calm", "vibrant"]),
10595
+ density: z22.enum(["airy", "regular", "compact"]),
10596
+ mediaBias: z22.enum(["text", "media", "mixed"]),
10597
+ conversionBias: z22.enum(["low", "med", "high"]),
10598
+ motion: z22.enum(["subtle", "standard", "expressive"])
10599
+ });
10600
+ var colourHexString = z22.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
10601
+ var paletteColorSchema = z22.object({
10602
+ name: z22.string().min(1),
11194
10603
  hex: colourHexString
11195
10604
  });
11196
- var paletteMetaSchema = z25.object({
11197
- mode: z25.enum(["light", "dark"])
10605
+ var paletteMetaSchema = z22.object({
10606
+ mode: z22.enum(["light", "dark"])
11198
10607
  });
11199
- var paletteSchema = z25.object({
11200
- colors: z25.array(paletteColorSchema),
10608
+ var paletteSchema = z22.object({
10609
+ colors: z22.array(paletteColorSchema),
11201
10610
  meta: paletteMetaSchema
11202
10611
  });
11203
- var typographyStyleSchema = z25.object({
11204
- family: z25.string().min(1),
11205
- weight: z25.enum(["light", "regular", "medium", "semibold", "bold"]),
11206
- letterSpacing: z25.enum(["tight", "normal", "loose"]),
11207
- lineHeight: z25.enum(["normal", "relaxed", "loose"])
10612
+ var typographyStyleSchema = z22.object({
10613
+ family: z22.string().min(1),
10614
+ weight: z22.enum(["light", "regular", "medium", "semibold", "bold"]),
10615
+ letterSpacing: z22.enum(["tight", "normal", "loose"]),
10616
+ lineHeight: z22.enum(["normal", "relaxed", "loose"])
11208
10617
  });
11209
10618
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
11210
- size: z25.enum(["md", "lg", "xl"])
10619
+ size: z22.enum(["md", "lg", "xl"])
11211
10620
  });
11212
- var headingSizeSchema = z25.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
11213
- var headingTypographyOverridesSchema = z25.object({
11214
- weight: z25.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
11215
- letterSpacing: z25.enum(["tight", "normal", "loose"]).nullable().optional(),
10621
+ var headingSizeSchema = z22.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
10622
+ var headingTypographyOverridesSchema = z22.object({
10623
+ weight: z22.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
10624
+ letterSpacing: z22.enum(["tight", "normal", "loose"]).nullable().optional(),
11216
10625
  size: headingSizeSchema.nullable().optional(),
11217
- lineHeight: z25.enum(["normal", "relaxed", "loose"]).nullable().optional(),
11218
- italic: z25.boolean().nullable().optional(),
11219
- colorToken: z25.string().min(1).nullable().optional()
10626
+ lineHeight: z22.enum(["normal", "relaxed", "loose"]).nullable().optional(),
10627
+ italic: z22.boolean().nullable().optional(),
10628
+ colorToken: z22.string().min(1).nullable().optional()
11220
10629
  // Palette token name for heading color
11221
10630
  });
11222
10631
  var headingTypographyStyleSchema = typographyStyleSchema.extend({
11223
- case: z25.enum(["uppercase", "normal", "smallCaps"]).nullable(),
11224
- italic: z25.boolean().nullable(),
11225
- colorToken: z25.string().min(1).nullable().optional()
10632
+ case: z22.enum(["uppercase", "normal", "smallCaps"]).nullable(),
10633
+ italic: z22.boolean().nullable(),
10634
+ colorToken: z22.string().min(1).nullable().optional()
11226
10635
  // Palette token name for heading color
11227
10636
  });
11228
- var proseLinkUnderlineStyleSchema = z25.enum(["solid", "dotted", "dashed"]);
11229
- var proseLinkUnderlineThicknessSchema = z25.enum(["auto", "fromFont", "thin", "medium", "thick"]);
11230
- var proseLinkUnderlineOffsetSchema = z25.enum(["auto", "tight", "normal", "loose"]);
11231
- var proseLinkStyleSchema = z25.object({
11232
- colorToken: z25.string().min(1).optional(),
11233
- hoverColorToken: z25.string().min(1).optional(),
11234
- underline: z25.boolean().optional(),
11235
- decorationColorToken: z25.string().min(1).optional(),
11236
- hoverDecorationColorToken: z25.string().min(1).optional(),
10637
+ var proseLinkUnderlineStyleSchema = z22.enum(["solid", "dotted", "dashed"]);
10638
+ var proseLinkUnderlineThicknessSchema = z22.enum(["auto", "fromFont", "thin", "medium", "thick"]);
10639
+ var proseLinkUnderlineOffsetSchema = z22.enum(["auto", "tight", "normal", "loose"]);
10640
+ var proseLinkStyleSchema = z22.object({
10641
+ colorToken: z22.string().min(1).optional(),
10642
+ hoverColorToken: z22.string().min(1).optional(),
10643
+ underline: z22.boolean().optional(),
10644
+ decorationColorToken: z22.string().min(1).optional(),
10645
+ hoverDecorationColorToken: z22.string().min(1).optional(),
11237
10646
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
11238
10647
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
11239
10648
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
11240
10649
  });
11241
- var semanticSpacingSchema = z25.enum([
10650
+ var semanticSpacingSchema = z22.enum([
11242
10651
  "none",
11243
10652
  "compact",
11244
10653
  "cozy",
@@ -11246,62 +10655,62 @@ var semanticSpacingSchema = z25.enum([
11246
10655
  "comfortable",
11247
10656
  "spacious"
11248
10657
  ]);
11249
- var boxRoundedSchema = z25.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
11250
- var boxBackgroundOverlaySchema = z25.object({
11251
- type: z25.enum(["none", "color", "gradient"]).nullable().optional(),
11252
- color: z25.string().nullable().optional(),
11253
- gradient: z25.string().nullable().optional(),
11254
- opacity: z25.number().min(0).max(1).nullable().optional()
11255
- });
11256
- var boxBackgroundSchema = z25.object({
11257
- type: z25.enum(["color", "gradient", "image"]).optional(),
11258
- color: z25.string().nullable().optional(),
11259
- gradient: z25.string().nullable().optional(),
10658
+ var boxRoundedSchema = z22.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
10659
+ var boxBackgroundOverlaySchema = z22.object({
10660
+ type: z22.enum(["none", "color", "gradient"]).nullable().optional(),
10661
+ color: z22.string().nullable().optional(),
10662
+ gradient: z22.string().nullable().optional(),
10663
+ opacity: z22.number().min(0).max(1).nullable().optional()
10664
+ });
10665
+ var boxBackgroundSchema = z22.object({
10666
+ type: z22.enum(["color", "gradient", "image"]).optional(),
10667
+ color: z22.string().nullable().optional(),
10668
+ gradient: z22.string().nullable().optional(),
11260
10669
  image: mediaSchema.nullable().optional(),
11261
- objectFit: z25.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
11262
- scale: z25.string().nullable().optional(),
11263
- position: z25.string().nullable().optional(),
11264
- opacity: z25.number().min(0).max(1).nullable().optional(),
10670
+ objectFit: z22.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
10671
+ scale: z22.string().nullable().optional(),
10672
+ position: z22.string().nullable().optional(),
10673
+ opacity: z22.number().min(0).max(1).nullable().optional(),
11265
10674
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
11266
- textColor: z25.string().nullable().optional(),
11267
- headingColor: z25.string().nullable().optional()
10675
+ textColor: z22.string().nullable().optional(),
10676
+ headingColor: z22.string().nullable().optional()
11268
10677
  });
11269
- var sectionStylesOverrideSchema = z25.object({
10678
+ var sectionStylesOverrideSchema = z22.object({
11270
10679
  background: boxBackgroundSchema.nullable().optional(),
11271
10680
  spacing: semanticSpacingSchema.nullable().optional(),
11272
- minHeight: z25.enum(["none", "hero", "immersive"]).nullable().optional()
10681
+ minHeight: z22.enum(["none", "hero", "immersive"]).nullable().optional()
11273
10682
  });
11274
- var containerStylesOverrideSchema = z25.object({
10683
+ var containerStylesOverrideSchema = z22.object({
11275
10684
  background: boxBackgroundSchema.nullable().optional(),
11276
10685
  spacing: semanticSpacingSchema.nullable().optional(),
11277
- raised: z25.boolean().nullable().optional(),
10686
+ raised: z22.boolean().nullable().optional(),
11278
10687
  rounded: boxRoundedSchema.nullable().optional(),
11279
- fullWidth: z25.boolean().nullable().optional()
10688
+ fullWidth: z22.boolean().nullable().optional()
11280
10689
  });
11281
- var cardBorderOverrideSchema = z25.object({
11282
- enabled: z25.boolean().nullable().optional(),
11283
- width: z25.enum(["none", "1", "2", "3"]).nullable().optional(),
11284
- colorToken: z25.string().nullable().optional()
10690
+ var cardBorderOverrideSchema = z22.object({
10691
+ enabled: z22.boolean().nullable().optional(),
10692
+ width: z22.enum(["none", "1", "2", "3"]).nullable().optional(),
10693
+ colorToken: z22.string().nullable().optional()
11285
10694
  });
11286
- var cardStylesOverrideSchema = z25.object({
10695
+ var cardStylesOverrideSchema = z22.object({
11287
10696
  background: boxBackgroundSchema.nullable().optional(),
11288
10697
  border: cardBorderOverrideSchema.nullable().optional(),
11289
10698
  spacing: semanticSpacingSchema.nullable().optional(),
11290
- raised: z25.boolean().nullable().optional(),
10699
+ raised: z22.boolean().nullable().optional(),
11291
10700
  rounded: boxRoundedSchema.nullable().optional()
11292
10701
  });
11293
- var blockStyleOverridesSchema = z25.object({
10702
+ var blockStyleOverridesSchema = z22.object({
11294
10703
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
11295
10704
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
11296
10705
  cardStyles: cardStylesOverrideSchema.nullable().optional()
11297
10706
  });
11298
- var blockThemeOverrideSchema = z25.object({
11299
- typography: z25.object({
10707
+ var blockThemeOverrideSchema = z22.object({
10708
+ typography: z22.object({
11300
10709
  proseLinkStyle: proseLinkStyleSchema.optional()
11301
10710
  }).optional(),
11302
10711
  styles: blockStyleOverridesSchema.optional()
11303
10712
  });
11304
- var typographyScaleSchema = z25.enum([
10713
+ var typographyScaleSchema = z22.enum([
11305
10714
  // New intuitive names
11306
10715
  "compact",
11307
10716
  // ratio 1.2 (was minorThird)
@@ -11314,9 +10723,9 @@ var typographyScaleSchema = z25.enum([
11314
10723
  "majorThird",
11315
10724
  "perfectFourth"
11316
10725
  ]);
11317
- var typographySchema = z25.object({
10726
+ var typographySchema = z22.object({
11318
10727
  body: bodyTypographyStyleSchema,
11319
- headings: z25.object({
10728
+ headings: z22.object({
11320
10729
  default: headingTypographyStyleSchema,
11321
10730
  h1: headingTypographyOverridesSchema,
11322
10731
  h2: headingTypographyOverridesSchema,
@@ -11329,41 +10738,41 @@ var typographySchema = z25.object({
11329
10738
  scale: typographyScaleSchema,
11330
10739
  proseLinkStyle: proseLinkStyleSchema.optional()
11331
10740
  });
11332
- var spaceSchema = z25.enum(["comfortable", "standard", "dense"]);
11333
- var corners = z25.enum(["square", "soft", "rounded", "pill"]);
11334
- var shadow = z25.object({
11335
- elevation: z25.enum(["none", "low", "medium", "high"]),
11336
- softness: z25.enum(["crisp", "soft", "hard"]).nullable(),
11337
- position: z25.enum(["bottom", "bottom-right"]).default("bottom")
10741
+ var spaceSchema = z22.enum(["comfortable", "standard", "dense"]);
10742
+ var corners = z22.enum(["square", "soft", "rounded", "pill"]);
10743
+ var shadow = z22.object({
10744
+ elevation: z22.enum(["none", "low", "medium", "high"]),
10745
+ softness: z22.enum(["crisp", "soft", "hard"]).nullable(),
10746
+ position: z22.enum(["bottom", "bottom-right"]).default("bottom")
11338
10747
  });
11339
- var border = z25.object({
11340
- width: z25.enum(["none", "hairline", "thin", "thick"]),
11341
- style: z25.enum(["solid", "dashed"])
10748
+ var border = z22.object({
10749
+ width: z22.enum(["none", "hairline", "thin", "thick"]),
10750
+ style: z22.enum(["solid", "dashed"])
11342
10751
  });
11343
- var motion = z25.object({
11344
- level: z25.enum(["off", "low", "medium", "high"]),
11345
- easing: z25.enum(["standard", "snappy", "gentle"]).nullable()
10752
+ var motion = z22.object({
10753
+ level: z22.enum(["off", "low", "medium", "high"]),
10754
+ easing: z22.enum(["standard", "snappy", "gentle"]).nullable()
11346
10755
  });
11347
- var buttonStyle = z25.object({
10756
+ var buttonStyle = z22.object({
11348
10757
  shape: corners
11349
10758
  // Used for --radius-control CSS variable
11350
10759
  });
11351
- var cardStyle = z25.object({
11352
- elevation: z25.enum(["none", "low", "medium", "high"]),
11353
- border: z25.enum(["none", "subtle", "defined"]),
10760
+ var cardStyle = z22.object({
10761
+ elevation: z22.enum(["none", "low", "medium", "high"]),
10762
+ border: z22.enum(["none", "subtle", "defined"]),
11354
10763
  shape: corners,
11355
- headerStyle: z25.enum(["plain", "accentBar", "subtleBg"]).nullable(),
11356
- mediaTreatment: z25.enum(["square", "rounded", "bleed"]).nullable()
10764
+ headerStyle: z22.enum(["plain", "accentBar", "subtleBg"]).nullable(),
10765
+ mediaTreatment: z22.enum(["square", "rounded", "bleed"]).nullable()
11357
10766
  });
11358
- var inputStyle = z25.object({
10767
+ var inputStyle = z22.object({
11359
10768
  shape: corners,
11360
- border: z25.enum(["subtle", "defined", "underline"]),
11361
- focus: z25.enum(["glow", "ring", "underline"]),
11362
- label: z25.enum(["inside", "above"])
10769
+ border: z22.enum(["subtle", "defined", "underline"]),
10770
+ focus: z22.enum(["glow", "ring", "underline"]),
10771
+ label: z22.enum(["inside", "above"])
11363
10772
  });
11364
- var headerVariant = z25.enum(["classic", "centered", "transparent", "floating", "editorial"]);
11365
- var headerPositioning = z25.enum(["static", "sticky", "fixed"]);
11366
- var headerNavStyle = z25.enum([
10773
+ var headerVariant = z22.enum(["classic", "centered", "transparent", "floating", "editorial"]);
10774
+ var headerPositioning = z22.enum(["static", "sticky", "fixed"]);
10775
+ var headerNavStyle = z22.enum([
11367
10776
  "minimal",
11368
10777
  "underline",
11369
10778
  "underline-grow",
@@ -11372,82 +10781,82 @@ var headerNavStyle = z25.enum([
11372
10781
  "frosted",
11373
10782
  "solid"
11374
10783
  ]);
11375
- var navFontWeight = z25.enum(["regular", "medium", "semibold", "bold"]);
11376
- var headerMaxWidth = z25.enum(["container", "full"]);
11377
- var headerContainerSchema = z25.object({
11378
- rounded: z25.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
11379
- border: z25.boolean().default(true),
11380
- shadow: z25.boolean().default(true),
11381
- padding: z25.enum(["sm", "md", "lg"]).default("md"),
11382
- tint: z25.string().nullable().optional(),
11383
- opacity: z25.number().min(0).max(1).default(0.12)
10784
+ var navFontWeight = z22.enum(["regular", "medium", "semibold", "bold"]);
10785
+ var headerMaxWidth = z22.enum(["container", "full"]);
10786
+ var headerContainerSchema = z22.object({
10787
+ rounded: z22.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
10788
+ border: z22.boolean().default(true),
10789
+ shadow: z22.boolean().default(true),
10790
+ padding: z22.enum(["sm", "md", "lg"]).default("md"),
10791
+ tint: z22.string().nullable().optional(),
10792
+ opacity: z22.number().min(0).max(1).default(0.12)
11384
10793
  }).optional();
11385
10794
  var headerBorderSchema = componentBorderSchema.extend({
11386
- position: z25.enum(["bottom", "top", "both", "none"]).default("bottom")
10795
+ position: z22.enum(["bottom", "top", "both", "none"]).default("bottom")
11387
10796
  }).optional();
11388
- var logoStyleSchema = z25.object({
11389
- fontFamily: z25.enum(["heading", "body"]).default("heading"),
11390
- letterSpacing: z25.enum(["normal", "wide", "wider", "widest"]).default("normal"),
11391
- gradient: z25.boolean().default(false)
10797
+ var logoStyleSchema = z22.object({
10798
+ fontFamily: z22.enum(["heading", "body"]).default("heading"),
10799
+ letterSpacing: z22.enum(["normal", "wide", "wider", "widest"]).default("normal"),
10800
+ gradient: z22.boolean().default(false)
11392
10801
  }).optional();
11393
- var headerLogoTextSchema = z25.object({
11394
- mobileWrapLines: z25.union([z25.literal(1), z25.literal(2)]).optional(),
11395
- mobileMaxWidth: z25.enum(["xs", "sm", "md"]).optional(),
11396
- hideOnShrink: z25.boolean().optional()
10802
+ var headerLogoTextSchema = z22.object({
10803
+ mobileWrapLines: z22.union([z22.literal(1), z22.literal(2)]).optional(),
10804
+ mobileMaxWidth: z22.enum(["xs", "sm", "md"]).optional(),
10805
+ hideOnShrink: z22.boolean().optional()
11397
10806
  }).optional();
11398
- var navEffectsSchema = z25.object({
11399
- underlineGradient: z25.boolean().default(false),
11400
- glow: z25.boolean().default(false),
11401
- glowColor: z25.string().optional(),
11402
- neumorphic: z25.boolean().default(false)
10807
+ var navEffectsSchema = z22.object({
10808
+ underlineGradient: z22.boolean().default(false),
10809
+ glow: z22.boolean().default(false),
10810
+ glowColor: z22.string().optional(),
10811
+ neumorphic: z22.boolean().default(false)
11403
10812
  }).optional();
11404
- var dropdownStyleSchema = z25.object({
10813
+ var dropdownStyleSchema = z22.object({
11405
10814
  // Container styling
11406
- background: z25.string().default("surface"),
10815
+ background: z22.string().default("surface"),
11407
10816
  // color token
11408
- textColor: z25.string().default("text"),
10817
+ textColor: z22.string().default("text"),
11409
10818
  // color token
11410
- borderColor: z25.string().nullable().default("border"),
10819
+ borderColor: z22.string().nullable().default("border"),
11411
10820
  // null = no border
11412
- shadow: z25.enum(["none", "sm", "md", "lg"]).default("md"),
11413
- borderRadius: z25.enum(["none", "sm", "md", "lg"]).default("md"),
10821
+ shadow: z22.enum(["none", "sm", "md", "lg"]).default("md"),
10822
+ borderRadius: z22.enum(["none", "sm", "md", "lg"]).default("md"),
11414
10823
  // Link hover states (explicit control)
11415
- hoverBackground: z25.string().nullable().optional(),
10824
+ hoverBackground: z22.string().nullable().optional(),
11416
10825
  // color token, null = transparent
11417
- hoverTextColor: z25.string().nullable().optional(),
10826
+ hoverTextColor: z22.string().nullable().optional(),
11418
10827
  // color token, null = inherit
11419
10828
  // Typography
11420
- textTransform: z25.enum(["none", "uppercase", "capitalize"]).default("none"),
11421
- letterSpacing: z25.enum(["normal", "wide", "wider"]).default("normal"),
11422
- fontWeight: z25.enum(["regular", "medium", "semibold", "bold"]).optional(),
10829
+ textTransform: z22.enum(["none", "uppercase", "capitalize"]).default("none"),
10830
+ letterSpacing: z22.enum(["normal", "wide", "wider"]).default("normal"),
10831
+ fontWeight: z22.enum(["regular", "medium", "semibold", "bold"]).optional(),
11423
10832
  // optional = inherit from navWeight
11424
- textSize: z25.enum(["xs", "sm", "base", "lg"]).optional()
10833
+ textSize: z22.enum(["xs", "sm", "base", "lg"]).optional()
11425
10834
  // optional = no override (browser default)
11426
10835
  }).optional();
11427
- var headerCtaGapSchema = z25.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
11428
- var navContainerSchema = z25.object({
11429
- type: z25.enum(["none", "pill", "glass"]).default("none"),
11430
- tint: z25.string().nullable().optional(),
11431
- opacity: z25.number().min(0).max(1).default(0.15)
10836
+ var headerCtaGapSchema = z22.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10837
+ var navContainerSchema = z22.object({
10838
+ type: z22.enum(["none", "pill", "glass"]).default("none"),
10839
+ tint: z22.string().nullable().optional(),
10840
+ opacity: z22.number().min(0).max(1).default(0.15)
11432
10841
  }).default({ type: "none", tint: null, opacity: 0.15 });
11433
- var headerBackgroundSchema = z25.object({
11434
- type: z25.enum(["color", "gradient", "image"]),
11435
- color: z25.string().nullable().optional(),
10842
+ var headerBackgroundSchema = z22.object({
10843
+ type: z22.enum(["color", "gradient", "image"]),
10844
+ color: z22.string().nullable().optional(),
11436
10845
  gradient: gradientConfigSchema.nullable().optional(),
11437
10846
  image: mediaSchema.nullable().optional(),
11438
- textColor: z25.string().nullable().optional()
10847
+ textColor: z22.string().nullable().optional()
11439
10848
  });
11440
- var headerSchema = z25.object({
10849
+ var headerSchema = z22.object({
11441
10850
  variant: headerVariant,
11442
10851
  positioning: headerPositioning,
11443
- shrinkOnScroll: z25.boolean(),
10852
+ shrinkOnScroll: z22.boolean(),
11444
10853
  maxWidth: headerMaxWidth,
11445
10854
  logoOverride: mediaSchema.nullable().optional(),
11446
10855
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
11447
- textColor: z25.string().nullable().optional(),
10856
+ textColor: z22.string().nullable().optional(),
11448
10857
  // Site title and general header text
11449
10858
  navStyle: headerNavStyle,
11450
- navColor: z25.string().nullable().optional(),
10859
+ navColor: z22.string().nullable().optional(),
11451
10860
  // Nav links (inherits textColor if not set)
11452
10861
  navWeight: navFontWeight.default("medium"),
11453
10862
  // New fields for header system enhancement
@@ -11466,50 +10875,50 @@ var headerSchema = z25.object({
11466
10875
  // Dropdown menu styling (nav dropdowns and mobile drawer)
11467
10876
  dropdownStyle: dropdownStyleSchema
11468
10877
  });
11469
- var footerVariant = z25.enum(["simple", "columns", "split"]);
11470
- var footerMaxWidth = z25.enum(["container", "full"]);
11471
- var footerMode = z25.enum(["default", "blocks", "default+blocks", "none"]);
11472
- var footerNavLayoutMode = z25.enum(["stack", "inline", "inline-wrap"]);
11473
- var footerNavLayoutAlign = z25.enum(["start", "center", "end", "space-between"]);
11474
- var footerSpacing = z25.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
11475
- var footerLogoPlacement = z25.enum(["left", "right", "above", "below"]);
11476
- var footerLogoSize = z25.enum(["sm", "md", "lg", "xl"]);
11477
- var footerLogoMaxHeight = z25.enum(["sm", "md", "lg", "xl"]);
11478
- var footerBottomTextLinkStyleSchema = z25.object({
11479
- colorToken: z25.string().optional(),
11480
- hoverColorToken: z25.string().nullable().optional(),
11481
- decorationColorToken: z25.string().nullable().optional(),
11482
- underline: z25.boolean().optional()
11483
- });
11484
- var footerBottomBarSchema = z25.object({
11485
- enabled: z25.boolean().optional(),
11486
- fullBleed: z25.boolean().optional(),
10878
+ var footerVariant = z22.enum(["simple", "columns", "split"]);
10879
+ var footerMaxWidth = z22.enum(["container", "full"]);
10880
+ var footerMode = z22.enum(["default", "blocks", "default+blocks", "none"]);
10881
+ var footerNavLayoutMode = z22.enum(["stack", "inline", "inline-wrap"]);
10882
+ var footerNavLayoutAlign = z22.enum(["start", "center", "end", "space-between"]);
10883
+ var footerSpacing = z22.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
10884
+ var footerLogoPlacement = z22.enum(["left", "right", "above", "below"]);
10885
+ var footerLogoSize = z22.enum(["sm", "md", "lg", "xl"]);
10886
+ var footerLogoMaxHeight = z22.enum(["sm", "md", "lg", "xl"]);
10887
+ var footerBottomTextLinkStyleSchema = z22.object({
10888
+ colorToken: z22.string().optional(),
10889
+ hoverColorToken: z22.string().nullable().optional(),
10890
+ decorationColorToken: z22.string().nullable().optional(),
10891
+ underline: z22.boolean().optional()
10892
+ });
10893
+ var footerBottomBarSchema = z22.object({
10894
+ enabled: z22.boolean().optional(),
10895
+ fullBleed: z22.boolean().optional(),
11487
10896
  background: headerBackgroundSchema.optional(),
11488
- textColor: z25.string().nullable().optional(),
11489
- textAlign: z25.enum(["left", "center", "right"]).optional(),
10897
+ textColor: z22.string().nullable().optional(),
10898
+ textAlign: z22.enum(["left", "center", "right"]).optional(),
11490
10899
  paddingY: footerSpacing.optional(),
11491
10900
  paddingX: footerSpacing.optional(),
11492
- borderTop: z25.object({
11493
- colorToken: z25.string().nullable().optional(),
11494
- width: z25.enum(["none", "thin", "medium", "thick"]).optional()
10901
+ borderTop: z22.object({
10902
+ colorToken: z22.string().nullable().optional(),
10903
+ width: z22.enum(["none", "thin", "medium", "thick"]).optional()
11495
10904
  }).optional()
11496
10905
  });
11497
- var footerNavLayoutSchema = z25.object({
10906
+ var footerNavLayoutSchema = z22.object({
11498
10907
  layout: footerNavLayoutMode.optional(),
11499
10908
  align: footerNavLayoutAlign.optional(),
11500
10909
  gapX: footerSpacing.optional(),
11501
10910
  gapY: footerSpacing.optional(),
11502
- columns: z25.number().int().min(1).max(6).optional()
10911
+ columns: z22.number().int().min(1).max(6).optional()
11503
10912
  });
11504
- var footerLogoSchema = z25.object({
11505
- showLogo: z25.boolean().default(true),
11506
- showLogoText: z25.boolean().optional(),
10913
+ var footerLogoSchema = z22.object({
10914
+ showLogo: z22.boolean().default(true),
10915
+ showLogoText: z22.boolean().optional(),
11507
10916
  placement: footerLogoPlacement.optional(),
11508
10917
  size: footerLogoSize.optional(),
11509
10918
  maxHeight: footerLogoMaxHeight.optional(),
11510
- align: z25.enum(["start", "center", "end"]).optional()
10919
+ align: z22.enum(["start", "center", "end"]).optional()
11511
10920
  });
11512
- var footerSchema = z25.object({
10921
+ var footerSchema = z22.object({
11513
10922
  /**
11514
10923
  * SDK-only footer rendering mode.
11515
10924
  *
@@ -11518,11 +10927,11 @@ var footerSchema = z25.object({
11518
10927
  mode: footerMode.optional(),
11519
10928
  variant: footerVariant,
11520
10929
  maxWidth: footerMaxWidth,
11521
- showLogoText: z25.boolean().optional(),
10930
+ showLogoText: z22.boolean().optional(),
11522
10931
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
11523
10932
  // Footer nav styling (independent from header)
11524
10933
  navStyle: headerNavStyle.default("minimal"),
11525
- navColor: z25.string().nullable().optional(),
10934
+ navColor: z22.string().nullable().optional(),
11526
10935
  navWeight: navFontWeight.default("medium"),
11527
10936
  // Full nav link customization (overrides navStyle if set)
11528
10937
  navLinkStyle: navLinkStyleSchema.optional(),
@@ -11533,15 +10942,15 @@ var footerSchema = z25.object({
11533
10942
  logo: footerLogoSchema.optional(),
11534
10943
  bottomBar: footerBottomBarSchema.optional()
11535
10944
  });
11536
- var containerPaddingPresetSchema = z25.enum(["tight", "compact", "default", "relaxed"]);
11537
- var layoutSchema = z25.object({
11538
- containerPadding: z25.object({
10945
+ var containerPaddingPresetSchema = z22.enum(["tight", "compact", "default", "relaxed"]);
10946
+ var layoutSchema = z22.object({
10947
+ containerPadding: z22.object({
11539
10948
  mobile: containerPaddingPresetSchema.optional(),
11540
10949
  tablet: containerPaddingPresetSchema.optional(),
11541
10950
  desktop: containerPaddingPresetSchema.optional()
11542
10951
  }).optional()
11543
10952
  }).optional();
11544
- var heroTypographySizeSchema = z25.enum([
10953
+ var heroTypographySizeSchema = z22.enum([
11545
10954
  "sm",
11546
10955
  "base",
11547
10956
  "lg",
@@ -11552,14 +10961,14 @@ var heroTypographySizeSchema = z25.enum([
11552
10961
  "5xl",
11553
10962
  "6xl"
11554
10963
  ]);
11555
- var heroTypographyLineHeightSchema = z25.enum(["tight", "snug", "normal", "relaxed"]);
11556
- var heroResponsiveTypographySchema = z25.object({
10964
+ var heroTypographyLineHeightSchema = z22.enum(["tight", "snug", "normal", "relaxed"]);
10965
+ var heroResponsiveTypographySchema = z22.object({
11557
10966
  headlineSize: heroTypographySizeSchema.optional(),
11558
10967
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
11559
10968
  subheadlineSize: heroTypographySizeSchema.optional(),
11560
10969
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
11561
10970
  });
11562
- var heroTypographySchema = z25.object({
10971
+ var heroTypographySchema = z22.object({
11563
10972
  headlineSize: heroTypographySizeSchema.optional(),
11564
10973
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
11565
10974
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -11568,24 +10977,24 @@ var heroTypographySchema = z25.object({
11568
10977
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
11569
10978
  microSubheadlineSize: heroTypographySizeSchema.optional(),
11570
10979
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
11571
- responsive: z25.object({
10980
+ responsive: z22.object({
11572
10981
  tablet: heroResponsiveTypographySchema.optional(),
11573
10982
  mobile: heroResponsiveTypographySchema.optional()
11574
10983
  }).optional()
11575
10984
  });
11576
- var heroSchema = z25.object({
10985
+ var heroSchema = z22.object({
11577
10986
  typography: heroTypographySchema.optional()
11578
10987
  }).optional();
11579
- var gradientsSchema = z25.object({
11580
- button: z25.string().min(1).nullable().optional(),
11581
- hero: z25.string().min(1).nullable().optional(),
11582
- background: z25.string().min(1).nullable().optional()
11583
- });
11584
- var themeSchema = z25.object({
11585
- name: z25.string().min(1).max(30),
11586
- description: z25.string().min(1).max(400),
11587
- rationale: z25.string().min(1).max(400),
11588
- siteStyleId: z25.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
10988
+ var gradientsSchema = z22.object({
10989
+ button: z22.string().min(1).nullable().optional(),
10990
+ hero: z22.string().min(1).nullable().optional(),
10991
+ background: z22.string().min(1).nullable().optional()
10992
+ });
10993
+ var themeSchema = z22.object({
10994
+ name: z22.string().min(1).max(30),
10995
+ description: z22.string().min(1).max(400),
10996
+ rationale: z22.string().min(1).max(400),
10997
+ siteStyleId: z22.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
11589
10998
  axes: axesSchema,
11590
10999
  palette: paletteSchema,
11591
11000
  typography: typographySchema,
@@ -11612,16 +11021,16 @@ var themeSchema = z25.object({
11612
11021
  // Block-specific customization (Tier 3)
11613
11022
  // blockCustomVars: Per-block CSS variable overrides as bare values
11614
11023
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
11615
- blockCustomVars: z25.record(
11616
- z25.string(),
11024
+ blockCustomVars: z22.record(
11025
+ z22.string(),
11617
11026
  // block kind (matches data-block attribute)
11618
- z25.record(z25.string(), z25.string())
11027
+ z22.record(z22.string(), z22.string())
11619
11028
  // { '--var-name': 'value' }
11620
11029
  ).optional(),
11621
11030
  // Structured block-kind theme overrides (v1: typography prose-link style only)
11622
11031
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
11623
- blockOverrides: z25.record(
11624
- z25.string(),
11032
+ blockOverrides: z22.record(
11033
+ z22.string(),
11625
11034
  blockThemeOverrideSchema
11626
11035
  ).optional(),
11627
11036
  // Structured custom CSS rules
@@ -11657,22 +11066,21 @@ var themeSchema = z25.object({
11657
11066
  * }
11658
11067
  * ```
11659
11068
  */
11660
- styleGroups: z25.record(z25.string(), z25.array(z25.string())).optional()
11069
+ styleGroups: z22.record(z22.string(), z22.array(z22.string())).optional()
11661
11070
  });
11662
- var themesTurnSchema = z25.object({
11663
- message: z25.string().min(1),
11664
- themes: z25.array(themeSchema).length(3)
11071
+ var themesTurnSchema = z22.object({
11072
+ message: z22.string().min(1),
11073
+ themes: z22.array(themeSchema).length(3)
11665
11074
  });
11666
11075
 
11667
11076
  // ../theme-core/src/palette/variants/types.ts
11668
- import { z as z26 } from "zod";
11669
11077
  function asPaletteVariantId(value) {
11670
11078
  if (value.length === 0) {
11671
11079
  throw new Error("PaletteVariantId must be a non-empty string");
11672
11080
  }
11673
11081
  return value;
11674
11082
  }
11675
- var paletteVariantIdSchema = z26.string().min(1).transform((value) => asPaletteVariantId(value));
11083
+ var paletteVariantIdSchema = z23.string().min(1).transform((value) => asPaletteVariantId(value));
11676
11084
  var PALETTE_TOKEN_NAMES = [
11677
11085
  "primary",
11678
11086
  "primaryForeground",
@@ -11688,19 +11096,19 @@ var PALETTE_TOKEN_NAMES = [
11688
11096
  "text",
11689
11097
  "border"
11690
11098
  ];
11691
- var paletteTokenNameSchema = z26.enum(PALETTE_TOKEN_NAMES);
11099
+ var paletteTokenNameSchema = z23.enum(PALETTE_TOKEN_NAMES);
11692
11100
  var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
11693
- var hexColorSchema = z26.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
11101
+ var hexColorSchema = z23.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
11694
11102
  var variantPaletteColorSchema = paletteColorSchema.extend({
11695
11103
  name: paletteTokenNameSchema
11696
11104
  });
11697
- var paletteVariantSchema = z26.object({
11105
+ var paletteVariantSchema = z23.object({
11698
11106
  id: paletteVariantIdSchema,
11699
- name: z26.string().min(1),
11700
- description: z26.string().min(1),
11107
+ name: z23.string().min(1),
11108
+ description: z23.string().min(1),
11701
11109
  tags: styleTagsSchema,
11702
- mode: z26.enum(["light", "dark"]),
11703
- colors: z26.array(variantPaletteColorSchema).min(1)
11110
+ mode: z23.enum(["light", "dark"]),
11111
+ colors: z23.array(variantPaletteColorSchema).min(1)
11704
11112
  });
11705
11113
  function definePaletteVariant(input) {
11706
11114
  return {
@@ -11712,7 +11120,7 @@ function definePaletteVariant(input) {
11712
11120
  colors: input.colors
11713
11121
  };
11714
11122
  }
11715
- var paletteOverridesSchema = z26.object({
11123
+ var paletteOverridesSchema = z23.object({
11716
11124
  primary: hexColorSchema.optional(),
11717
11125
  primaryForeground: hexColorSchema.optional(),
11718
11126
  secondary: hexColorSchema.optional(),
@@ -12000,28 +11408,679 @@ var warmNeutralForest = definePaletteVariant({
12000
11408
  ]
12001
11409
  });
12002
11410
 
12003
- // ../theme-core/src/palette/variants/index.ts
12004
- var paletteVariants = [
12005
- // Brand-led family
12006
- brandLedCool,
12007
- brandLedWarm,
12008
- brandLedJewel,
12009
- // Warm-neutral family
12010
- warmNeutralClay,
12011
- warmNeutralCream,
12012
- warmNeutralForest,
12013
- // High-contrast family
12014
- highContrastInk,
12015
- highContrastCharcoal,
12016
- highContrastMonochrome,
12017
- // Soft-natural family
12018
- softNaturalSage,
12019
- softNaturalStone,
12020
- softNaturalWatercolor
11411
+ // ../theme-core/src/palette/variants/index.ts
11412
+ var paletteVariants = [
11413
+ // Brand-led family
11414
+ brandLedCool,
11415
+ brandLedWarm,
11416
+ brandLedJewel,
11417
+ // Warm-neutral family
11418
+ warmNeutralClay,
11419
+ warmNeutralCream,
11420
+ warmNeutralForest,
11421
+ // High-contrast family
11422
+ highContrastInk,
11423
+ highContrastCharcoal,
11424
+ highContrastMonochrome,
11425
+ // Soft-natural family
11426
+ softNaturalSage,
11427
+ softNaturalStone,
11428
+ softNaturalWatercolor
11429
+ ];
11430
+ var paletteVariantsById = new Map(
11431
+ paletteVariants.map((v) => [v.id, v])
11432
+ );
11433
+
11434
+ // ../theme-core/src/site-styles/sourceCatalogs.ts
11435
+ var generatedContentFrames = [
11436
+ plainFrame,
11437
+ panelFrame("inset"),
11438
+ panelFrame("raised"),
11439
+ flushPanelFrame({ bleed: "start" })
11440
+ ];
11441
+ var userContentFrames = [
11442
+ ...generatedContentFrames,
11443
+ panelFrame("editorial"),
11444
+ flushPanelFrame({ bleed: "end" }),
11445
+ flushPanelFrame({ bleed: "both" })
11446
+ ];
11447
+ var generatedDesignOptionCatalog = {
11448
+ source: "generated",
11449
+ sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
11450
+ contentFrames: generatedContentFrames,
11451
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
11452
+ transitions: ["none", "soft-fade-short", "soft-fade-long"],
11453
+ emphases: ["low", "medium", "high"],
11454
+ detachedCustom: false
11455
+ };
11456
+ var userDesignOptionCatalog = {
11457
+ source: "user",
11458
+ sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
11459
+ contentFrames: userContentFrames,
11460
+ itemSurfaces: [
11461
+ ...generatedDesignOptionCatalog.itemSurfaces,
11462
+ "inset",
11463
+ "editorial"
11464
+ ],
11465
+ transitions: [
11466
+ ...generatedDesignOptionCatalog.transitions,
11467
+ "wave-edge",
11468
+ "angle-edge"
11469
+ ],
11470
+ emphases: generatedDesignOptionCatalog.emphases,
11471
+ detachedCustom: false
11472
+ };
11473
+ var advancedDesignOptionCatalog = {
11474
+ source: "advanced",
11475
+ sectionSurfaces: userDesignOptionCatalog.sectionSurfaces,
11476
+ contentFrames: userDesignOptionCatalog.contentFrames,
11477
+ itemSurfaces: userDesignOptionCatalog.itemSurfaces,
11478
+ transitions: userDesignOptionCatalog.transitions,
11479
+ emphases: userDesignOptionCatalog.emphases,
11480
+ detachedCustom: true
11481
+ };
11482
+
11483
+ // ../theme-core/src/site-styles/curatedSiteStyles.ts
11484
+ var curatedSiteStyleIdValues = [
11485
+ "site-style:calm-studio",
11486
+ "site-style:clear-professional",
11487
+ "site-style:warm-editorial",
11488
+ "site-style:bright-community",
11489
+ "site-style:quiet-luxury",
11490
+ "site-style:practical-services",
11491
+ "site-style:modern-wellness",
11492
+ "site-style:bold-launch"
11493
+ ];
11494
+ var quietBudget = {
11495
+ accentDensity: "low",
11496
+ panelDensity: "medium",
11497
+ transitionMix: "quiet",
11498
+ primaryCtaLimit: 2,
11499
+ mediaDensity: "medium",
11500
+ decorativeRepetition: "low"
11501
+ };
11502
+ var balancedBudget = {
11503
+ accentDensity: "medium",
11504
+ panelDensity: "medium",
11505
+ transitionMix: "balanced",
11506
+ primaryCtaLimit: 3,
11507
+ mediaDensity: "medium",
11508
+ decorativeRepetition: "medium"
11509
+ };
11510
+ var expressiveBudget = {
11511
+ accentDensity: "high",
11512
+ panelDensity: "high",
11513
+ transitionMix: "expressive",
11514
+ primaryCtaLimit: 3,
11515
+ mediaDensity: "high",
11516
+ decorativeRepetition: "medium"
11517
+ };
11518
+ function uniqueContentFrameKinds() {
11519
+ const kinds = [...new Set(
11520
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
11521
+ )];
11522
+ const firstKind = kinds[0];
11523
+ if (!firstKind) {
11524
+ throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
11525
+ }
11526
+ return [firstKind, ...kinds.slice(1)];
11527
+ }
11528
+ var generatedContentFrameKinds = uniqueContentFrameKinds();
11529
+ function defineCuratedSiteStyle(input) {
11530
+ return {
11531
+ id: asSiteStyleId(input.id),
11532
+ name: input.name,
11533
+ description: input.description,
11534
+ generationBrief: input.generationBrief,
11535
+ selectionKeywords: input.selectionKeywords ?? [],
11536
+ template: {
11537
+ id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
11538
+ name: input.name,
11539
+ version: 1,
11540
+ tokenRecipes: input.tokenRecipes,
11541
+ compositionBudget: input.compositionBudget,
11542
+ supportedSectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
11543
+ supportedContentFrames: generatedContentFrameKinds,
11544
+ supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
11545
+ supportedTransitions: generatedDesignOptionCatalog.transitions
11546
+ },
11547
+ buttonPersonalityChoices: input.buttonPersonalityChoices,
11548
+ paletteVariantChoices: input.paletteVariantChoices
11549
+ };
11550
+ }
11551
+ function buttonChoice(id, note) {
11552
+ return note ? { id: asButtonPersonalityId(id), note } : { id: asButtonPersonalityId(id) };
11553
+ }
11554
+ function paletteChoice(id, note) {
11555
+ return note ? { id: asPaletteVariantId(id), note } : { id: asPaletteVariantId(id) };
11556
+ }
11557
+ var curatedSiteStyles = [
11558
+ defineCuratedSiteStyle({
11559
+ id: "site-style:calm-studio",
11560
+ name: "Calm Studio",
11561
+ description: "Soft, measured, and spacious for intimate appointment or class businesses.",
11562
+ generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
11563
+ tokenRecipes: {
11564
+ palette: "soft-natural",
11565
+ contrast: "standard",
11566
+ radius: "soft",
11567
+ shadow: "subtle",
11568
+ typography: "friendly-sans",
11569
+ spacing: "airy",
11570
+ motion: "subtle"
11571
+ },
11572
+ compositionBudget: quietBudget,
11573
+ buttonPersonalityChoices: [
11574
+ buttonChoice("soft-pill"),
11575
+ buttonChoice("pebble"),
11576
+ buttonChoice("editorial-link"),
11577
+ buttonChoice("brushed-wash")
11578
+ ],
11579
+ paletteVariantChoices: [
11580
+ paletteChoice("soft-natural-sage"),
11581
+ paletteChoice("soft-natural-stone"),
11582
+ paletteChoice("warm-neutral-clay"),
11583
+ paletteChoice("soft-natural-watercolor")
11584
+ ]
11585
+ }),
11586
+ defineCuratedSiteStyle({
11587
+ id: "site-style:clear-professional",
11588
+ name: "Clear Professional",
11589
+ description: "Crisp, trustworthy, and direct for local services and consultancies.",
11590
+ generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
11591
+ tokenRecipes: {
11592
+ palette: "brand-led",
11593
+ contrast: "strong",
11594
+ radius: "soft",
11595
+ shadow: "subtle",
11596
+ typography: "clean-sans",
11597
+ spacing: "regular",
11598
+ motion: "subtle"
11599
+ },
11600
+ compositionBudget: balancedBudget,
11601
+ buttonPersonalityChoices: [
11602
+ buttonChoice("confident-chip"),
11603
+ buttonChoice("soft-pill"),
11604
+ buttonChoice("editorial-link")
11605
+ ],
11606
+ paletteVariantChoices: [
11607
+ paletteChoice("brand-led-cool"),
11608
+ paletteChoice("high-contrast-ink"),
11609
+ paletteChoice("brand-led-jewel")
11610
+ ]
11611
+ }),
11612
+ defineCuratedSiteStyle({
11613
+ id: "site-style:warm-editorial",
11614
+ name: "Warm Editorial",
11615
+ description: "Story-led and textured for educators, makers, venues, and retreats.",
11616
+ generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
11617
+ tokenRecipes: {
11618
+ palette: "warm-neutral",
11619
+ contrast: "standard",
11620
+ radius: "square",
11621
+ shadow: "none",
11622
+ typography: "serif-editorial",
11623
+ spacing: "airy",
11624
+ motion: "subtle"
11625
+ },
11626
+ compositionBudget: balancedBudget,
11627
+ buttonPersonalityChoices: [
11628
+ buttonChoice("editorial-link"),
11629
+ buttonChoice("soft-pill"),
11630
+ buttonChoice("brushed-wash")
11631
+ ],
11632
+ paletteVariantChoices: [
11633
+ paletteChoice("warm-neutral-cream"),
11634
+ paletteChoice("warm-neutral-clay"),
11635
+ paletteChoice("warm-neutral-forest"),
11636
+ paletteChoice("soft-natural-stone")
11637
+ ]
11638
+ }),
11639
+ defineCuratedSiteStyle({
11640
+ id: "site-style:bright-community",
11641
+ name: "Bright Community",
11642
+ description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
11643
+ generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
11644
+ tokenRecipes: {
11645
+ palette: "brand-led",
11646
+ contrast: "standard",
11647
+ radius: "rounded",
11648
+ shadow: "subtle",
11649
+ typography: "friendly-sans",
11650
+ spacing: "regular",
11651
+ motion: "expressive"
11652
+ },
11653
+ compositionBudget: balancedBudget,
11654
+ buttonPersonalityChoices: [
11655
+ buttonChoice("pebble"),
11656
+ buttonChoice("brushed-wash"),
11657
+ buttonChoice("confident-chip")
11658
+ ],
11659
+ paletteVariantChoices: [
11660
+ paletteChoice("brand-led-warm"),
11661
+ paletteChoice("brand-led-jewel"),
11662
+ paletteChoice("soft-natural-watercolor")
11663
+ ]
11664
+ }),
11665
+ defineCuratedSiteStyle({
11666
+ id: "site-style:quiet-luxury",
11667
+ name: "Quiet Luxury",
11668
+ description: "Minimal, confident, and refined for premium experiences and private services.",
11669
+ generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
11670
+ selectionKeywords: [
11671
+ "luxury",
11672
+ "premium",
11673
+ "boutique",
11674
+ "bespoke",
11675
+ "exclusive"
11676
+ ],
11677
+ tokenRecipes: {
11678
+ palette: "high-contrast",
11679
+ contrast: "strong",
11680
+ radius: "square",
11681
+ shadow: "none",
11682
+ typography: "classic-serif",
11683
+ spacing: "airy",
11684
+ motion: "none"
11685
+ },
11686
+ compositionBudget: quietBudget,
11687
+ buttonPersonalityChoices: [
11688
+ buttonChoice("editorial-link"),
11689
+ buttonChoice("confident-chip"),
11690
+ buttonChoice("soft-pill")
11691
+ ],
11692
+ paletteVariantChoices: [
11693
+ paletteChoice("high-contrast-charcoal"),
11694
+ paletteChoice("high-contrast-ink"),
11695
+ paletteChoice("warm-neutral-cream")
11696
+ ]
11697
+ }),
11698
+ defineCuratedSiteStyle({
11699
+ id: "site-style:practical-services",
11700
+ name: "Practical Services",
11701
+ description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
11702
+ generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
11703
+ selectionKeywords: [
11704
+ "repair",
11705
+ "plumb",
11706
+ "electric",
11707
+ "cleaning",
11708
+ "landscap",
11709
+ "contractor"
11710
+ ],
11711
+ tokenRecipes: {
11712
+ palette: "brand-led",
11713
+ contrast: "maximum",
11714
+ radius: "soft",
11715
+ shadow: "subtle",
11716
+ typography: "clean-sans",
11717
+ spacing: "compact",
11718
+ motion: "none"
11719
+ },
11720
+ compositionBudget: quietBudget,
11721
+ buttonPersonalityChoices: [
11722
+ buttonChoice("confident-chip"),
11723
+ buttonChoice("pebble"),
11724
+ buttonChoice("ink-stamp")
11725
+ ],
11726
+ paletteVariantChoices: [
11727
+ paletteChoice("brand-led-cool"),
11728
+ paletteChoice("high-contrast-ink"),
11729
+ paletteChoice("brand-led-warm")
11730
+ ]
11731
+ }),
11732
+ defineCuratedSiteStyle({
11733
+ id: "site-style:modern-wellness",
11734
+ name: "Modern Wellness",
11735
+ description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
11736
+ generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
11737
+ tokenRecipes: {
11738
+ palette: "soft-natural",
11739
+ contrast: "standard",
11740
+ radius: "rounded",
11741
+ shadow: "subtle",
11742
+ typography: "clean-sans",
11743
+ spacing: "airy",
11744
+ motion: "subtle"
11745
+ },
11746
+ compositionBudget: balancedBudget,
11747
+ buttonPersonalityChoices: [
11748
+ buttonChoice("soft-pill"),
11749
+ buttonChoice("pebble"),
11750
+ buttonChoice("confident-chip")
11751
+ ],
11752
+ paletteVariantChoices: [
11753
+ paletteChoice("soft-natural-sage"),
11754
+ paletteChoice("soft-natural-stone"),
11755
+ paletteChoice("warm-neutral-forest")
11756
+ ]
11757
+ }),
11758
+ defineCuratedSiteStyle({
11759
+ id: "site-style:bold-launch",
11760
+ name: "Bold Launch",
11761
+ description: "High-energy and punchy for launches, campaigns, and creative offers.",
11762
+ generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
11763
+ selectionKeywords: [
11764
+ "launch",
11765
+ "campaign",
11766
+ "preorder",
11767
+ "pre-order",
11768
+ "waitlist",
11769
+ "drop"
11770
+ ],
11771
+ tokenRecipes: {
11772
+ palette: "high-contrast",
11773
+ contrast: "maximum",
11774
+ radius: "pill",
11775
+ shadow: "layered",
11776
+ typography: "clean-sans",
11777
+ spacing: "regular",
11778
+ motion: "expressive"
11779
+ },
11780
+ compositionBudget: expressiveBudget,
11781
+ buttonPersonalityChoices: [
11782
+ buttonChoice("ink-stamp"),
11783
+ buttonChoice("confident-chip"),
11784
+ buttonChoice("brushed-wash"),
11785
+ buttonChoice("pebble")
11786
+ ],
11787
+ paletteVariantChoices: [
11788
+ paletteChoice("high-contrast-monochrome"),
11789
+ paletteChoice("high-contrast-ink"),
11790
+ paletteChoice("brand-led-jewel"),
11791
+ paletteChoice("brand-led-warm")
11792
+ ]
11793
+ })
11794
+ ];
11795
+ var curatedSiteStylesById = new Map(
11796
+ curatedSiteStyles.map((style) => [style.id, style])
11797
+ );
11798
+
11799
+ // ../theme-core/src/site-styles/designState.ts
11800
+ import { z as z24 } from "zod";
11801
+
11802
+ // ../theme-core/src/site-styles/rawStyleFields.ts
11803
+ var themeV2RuntimeStyleFieldNames = [
11804
+ "_frameStyles",
11805
+ "_sectionStyles",
11806
+ "_containerStyles",
11807
+ "_cardStyles",
11808
+ // styleGroup is legacy runtime transition wiring rather than a nested
11809
+ // override object, but normal editors should still never see it directly.
11810
+ "styleGroup"
12021
11811
  ];
12022
- var paletteVariantsById = new Map(
12023
- paletteVariants.map((v) => [v.id, v])
11812
+ var themeV2BlockSpecificRawStyleFieldNames = [
11813
+ "_contentCardStyles",
11814
+ "_textCardStyles"
11815
+ ];
11816
+ var themeV2NormalEditorRawStyleFieldNames = [
11817
+ ...themeV2RuntimeStyleFieldNames,
11818
+ ...themeV2BlockSpecificRawStyleFieldNames
11819
+ ];
11820
+ var themeV2NormalEditorRawStyleFieldNameSet = new Set(
11821
+ themeV2NormalEditorRawStyleFieldNames
11822
+ );
11823
+
11824
+ // ../theme-core/src/site-styles/designState.ts
11825
+ var themeV2DesignStateSchemaVersion = 1;
11826
+ var designResolutionPolicySchema = z24.enum(["generated", "user", "admin", "sdk"]);
11827
+ var runtimeStyleFieldNameSchema = z24.enum(themeV2RuntimeStyleFieldNames);
11828
+ var nonEmptyRuntimeStyleFieldNamesSchema = z24.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
11829
+ fields3[0],
11830
+ ...fields3.slice(1)
11831
+ ]);
11832
+ var heroLegibilityStrategySchema = z24.enum([
11833
+ "none",
11834
+ "scrim-gradient",
11835
+ "solid-panel"
11836
+ ]);
11837
+ function uniqueNonEmpty(values) {
11838
+ const uniqueValues = [...new Set(values)];
11839
+ const firstValue = uniqueValues[0];
11840
+ if (!firstValue) {
11841
+ throw new Error("Expected at least one Theme V2 design state option.");
11842
+ }
11843
+ return [firstValue, ...uniqueValues.slice(1)];
11844
+ }
11845
+ var userPanelTreatments = uniqueNonEmpty(
11846
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
11847
+ );
11848
+ var userFlushTreatments = uniqueNonEmpty(
11849
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
11850
+ );
11851
+ var userFlushBleeds = uniqueNonEmpty(
11852
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
11853
+ );
11854
+ var contentFrameIntentSchema = z24.discriminatedUnion("kind", [
11855
+ z24.object({ kind: z24.literal("plain") }).strict(),
11856
+ z24.object({
11857
+ kind: z24.literal("panel"),
11858
+ treatment: z24.enum(userPanelTreatments)
11859
+ }).strict(),
11860
+ z24.object({
11861
+ kind: z24.literal("flush-panel"),
11862
+ treatment: z24.enum(userFlushTreatments),
11863
+ bleed: z24.enum(userFlushBleeds)
11864
+ }).strict()
11865
+ ]);
11866
+ var blockDesignPlanSchema = z24.object({
11867
+ blockId: z24.string().min(1).transform(asDesignBlockId),
11868
+ blockKind: z24.string().min(1),
11869
+ purpose: z24.string().min(1),
11870
+ sectionSurface: z24.enum(userDesignOptionCatalog.sectionSurfaces),
11871
+ contentFrame: contentFrameIntentSchema,
11872
+ itemSurface: z24.enum(userDesignOptionCatalog.itemSurfaces),
11873
+ transitionAfter: z24.enum(userDesignOptionCatalog.transitions),
11874
+ emphasis: z24.enum(userDesignOptionCatalog.emphases),
11875
+ heroLegibility: heroLegibilityStrategySchema.optional()
11876
+ }).strict();
11877
+ var styleAuthoritySchema = z24.discriminatedUnion("kind", [
11878
+ z24.object({
11879
+ kind: z24.literal("theme-v2"),
11880
+ source: designResolutionPolicySchema,
11881
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
11882
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
11883
+ templateVersion: z24.number().int().nonnegative(),
11884
+ resolverVersion: z24.number().int().nonnegative()
11885
+ }).strict(),
11886
+ z24.object({
11887
+ kind: z24.literal("legacy-raw"),
11888
+ reason: z24.enum(["pre-theme-v2", "manual-runtime-fields"])
11889
+ }).strict(),
11890
+ z24.object({
11891
+ kind: z24.literal("advanced-detached"),
11892
+ reason: z24.literal("detached-custom-runtime-fields")
11893
+ }).strict()
11894
+ ]);
11895
+ var blockRuntimeStyleAuthoritySchema = z24.object({
11896
+ unit: z24.literal("block-runtime-fields"),
11897
+ blockId: z24.string().min(1).transform(asDesignBlockId),
11898
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
11899
+ authority: styleAuthoritySchema
11900
+ }).strict();
11901
+ var persistedPageDesignStateV1Schema = z24.object({
11902
+ schemaVersion: z24.literal(themeV2DesignStateSchemaVersion),
11903
+ siteStyleId: z24.string().min(1).transform(asSiteStyleId),
11904
+ templateId: z24.string().min(1).transform(asDesignSystemTemplateId),
11905
+ templateVersion: z24.number().int().nonnegative(),
11906
+ resolverVersion: z24.number().int().nonnegative(),
11907
+ rhythmPresetId: z24.string().min(1),
11908
+ blocks: z24.array(blockDesignPlanSchema),
11909
+ styleAuthorities: z24.array(blockRuntimeStyleAuthoritySchema)
11910
+ }).strict();
11911
+
11912
+ // ../theme-core/src/site-styles/generatedSchemas.ts
11913
+ import { z as z25 } from "zod";
11914
+ function uniqueNonEmpty2(values) {
11915
+ const uniqueValues = [...new Set(values)];
11916
+ const firstValue = uniqueValues[0];
11917
+ if (!firstValue) {
11918
+ throw new Error("Expected at least one generated schema option.");
11919
+ }
11920
+ return [firstValue, ...uniqueValues.slice(1)];
11921
+ }
11922
+ var generatedPanelTreatments = uniqueNonEmpty2(
11923
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
12024
11924
  );
11925
+ var generatedFlushTreatments = uniqueNonEmpty2(
11926
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
11927
+ );
11928
+ var generatedFlushBleeds = uniqueNonEmpty2(
11929
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
11930
+ );
11931
+ var generatedPanelFrameSchema = z25.object({
11932
+ kind: z25.literal("panel"),
11933
+ treatment: z25.enum(generatedPanelTreatments)
11934
+ }).strict();
11935
+ var generatedFlushPanelFrameSchema = z25.object({
11936
+ kind: z25.literal("flush-panel"),
11937
+ treatment: z25.enum(generatedFlushTreatments),
11938
+ bleed: z25.enum(generatedFlushBleeds)
11939
+ }).strict();
11940
+ var generatedContentFrameIntentSchema = z25.discriminatedUnion("kind", [
11941
+ z25.object({ kind: z25.literal("plain") }).strict(),
11942
+ generatedPanelFrameSchema,
11943
+ generatedFlushPanelFrameSchema
11944
+ ]);
11945
+ var generatedSiteStyleIdSchema = z25.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
11946
+ function generatedChoiceSchema(valueSchema) {
11947
+ return z25.discriminatedUnion("kind", [
11948
+ z25.object({
11949
+ source: z25.literal("generated"),
11950
+ kind: z25.literal("auto")
11951
+ }).strict(),
11952
+ z25.object({
11953
+ source: z25.literal("generated"),
11954
+ kind: z25.literal("explicit"),
11955
+ value: valueSchema
11956
+ }).strict()
11957
+ ]);
11958
+ }
11959
+ var generatedBlockDesignIntentSchema = z25.object({
11960
+ sectionSurface: generatedChoiceSchema(
11961
+ z25.enum(generatedDesignOptionCatalog.sectionSurfaces)
11962
+ ),
11963
+ contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
11964
+ itemSurface: generatedChoiceSchema(
11965
+ z25.enum(generatedDesignOptionCatalog.itemSurfaces)
11966
+ ),
11967
+ transitionAfter: generatedChoiceSchema(
11968
+ z25.enum(generatedDesignOptionCatalog.transitions)
11969
+ ),
11970
+ emphasis: generatedChoiceSchema(
11971
+ z25.enum(generatedDesignOptionCatalog.emphases)
11972
+ )
11973
+ }).strict();
11974
+ var generatedMediaCompositionIntentSchema = z25.enum([
11975
+ "none",
11976
+ "supporting",
11977
+ "dominant"
11978
+ ]);
11979
+ var generatedDecorativeCompositionIntentSchema = z25.enum([
11980
+ "none",
11981
+ "supporting"
11982
+ ]);
11983
+ var generatedHeroLegibilityStrategySchema = z25.enum([
11984
+ "none",
11985
+ "scrim-gradient"
11986
+ ]);
11987
+ var generatedBlockMediaIntentSchema = z25.object({
11988
+ media: generatedMediaCompositionIntentSchema,
11989
+ decorative: generatedDecorativeCompositionIntentSchema,
11990
+ heroLegibility: generatedChoiceSchema(generatedHeroLegibilityStrategySchema)
11991
+ }).strict();
11992
+ var generatedBoundaryIntentSchema = z25.object({
11993
+ transitionAfter: generatedChoiceSchema(
11994
+ z25.enum(generatedDesignOptionCatalog.transitions)
11995
+ )
11996
+ }).strict();
11997
+ var generatedPageDesignBlockIntentSchema = z25.object({
11998
+ blockId: z25.string().min(1),
11999
+ blockKind: z25.string().min(1),
12000
+ purpose: z25.string().min(1),
12001
+ design: generatedBlockDesignIntentSchema,
12002
+ mediaIntent: generatedBlockMediaIntentSchema,
12003
+ boundaryIntent: generatedBoundaryIntentSchema
12004
+ }).strict();
12005
+ var generatedPageDesignIntentSchema = z25.object({
12006
+ siteStyleId: generatedSiteStyleIdSchema,
12007
+ blocks: z25.array(generatedPageDesignBlockIntentSchema)
12008
+ }).strict();
12009
+
12010
+ // ../theme-core/src/site-styles/pageDesignIntent.ts
12011
+ import { z as z26 } from "zod";
12012
+ var pageDesignIntentSchemaVersion = 1;
12013
+ var pageDesignUserPinnedAppearanceChoiceSchema = z26.object({
12014
+ kind: z26.literal("user-pinned"),
12015
+ value: z26.string().min(1).transform(asAppearancePresetId)
12016
+ }).strict();
12017
+ var pageDesignUserPinnedBoundaryChoiceSchema = z26.object({
12018
+ kind: z26.literal("user-pinned"),
12019
+ value: z26.string().min(1).transform(asBoundaryOptionId)
12020
+ }).strict();
12021
+ var pageDesignBlockLookPinSchema = z26.object({
12022
+ blockId: z26.string().min(1).transform(asDesignBlockId),
12023
+ blockKind: z26.string().min(1),
12024
+ choice: pageDesignUserPinnedAppearanceChoiceSchema
12025
+ }).strict();
12026
+ var pageDesignBoundaryPinSchema = z26.object({
12027
+ boundaryId: z26.string().min(1).transform(asDesignBoundaryId),
12028
+ previousBlockId: z26.string().min(1).transform(asDesignBlockId),
12029
+ nextBlockId: z26.string().min(1).transform(asDesignBlockId),
12030
+ choice: pageDesignUserPinnedBoundaryChoiceSchema
12031
+ }).strict().superRefine((pin, ctx) => {
12032
+ const expectedBoundaryId = makeBoundaryId(
12033
+ pin.previousBlockId,
12034
+ pin.nextBlockId
12035
+ );
12036
+ if (pin.boundaryId !== expectedBoundaryId) {
12037
+ ctx.addIssue({
12038
+ code: z26.ZodIssueCode.custom,
12039
+ path: ["boundaryId"],
12040
+ message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
12041
+ });
12042
+ }
12043
+ });
12044
+ var pageDesignIntentV1Schema = z26.object({
12045
+ schemaVersion: z26.literal(pageDesignIntentSchemaVersion),
12046
+ siteStyleId: z26.string().min(1).transform(asSiteStyleId),
12047
+ pageFlowPresetId: z26.string().min(1).transform(asPageFlowPresetId),
12048
+ blockLookPins: z26.array(pageDesignBlockLookPinSchema),
12049
+ boundaryPins: z26.array(pageDesignBoundaryPinSchema)
12050
+ }).strict().superRefine((intent, ctx) => {
12051
+ addDuplicateStringIssues(ctx, {
12052
+ values: intent.blockLookPins.map((pin) => pin.blockId),
12053
+ path: ["blockLookPins"],
12054
+ label: "block Look pin"
12055
+ });
12056
+ addDuplicateStringIssues(ctx, {
12057
+ values: intent.boundaryPins.map(
12058
+ (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
12059
+ ),
12060
+ path: ["boundaryPins"],
12061
+ label: "boundary pin"
12062
+ });
12063
+ });
12064
+ function addDuplicateStringIssues(ctx, input) {
12065
+ const seen = /* @__PURE__ */ new Set();
12066
+ const duplicates = /* @__PURE__ */ new Set();
12067
+ for (const value of input.values) {
12068
+ if (seen.has(value)) {
12069
+ duplicates.add(value);
12070
+ }
12071
+ seen.add(value);
12072
+ }
12073
+ for (const duplicate of duplicates) {
12074
+ ctx.addIssue({
12075
+ code: z26.ZodIssueCode.custom,
12076
+ path: [...input.path],
12077
+ message: `Duplicate ${input.label}: ${duplicate}.`
12078
+ });
12079
+ }
12080
+ }
12081
+ function boundaryKey(previousBlockId, nextBlockId) {
12082
+ return makeBoundaryId(previousBlockId, nextBlockId);
12083
+ }
12025
12084
 
12026
12085
  // ../theme-core/src/site-styles/runtimeCompiler.ts
12027
12086
  function defineDesignRuntimeRules(rules) {
@@ -13366,7 +13425,8 @@ function ctaButton(opts) {
13366
13425
  },
13367
13426
  size: {
13368
13427
  $bind: {
13369
- from: sizePath
13428
+ from: sizePath,
13429
+ fallback: opts?.sizeFallback ?? "md"
13370
13430
  }
13371
13431
  },
13372
13432
  ...opts?.className ? { className: opts.className } : {},
@@ -19406,14 +19466,16 @@ var headerCta = ctaButton({
19406
19466
  whenPath: "menu.ctaItem.label",
19407
19467
  variantPath: "menu.ctaItem.variant",
19408
19468
  linkPath: "menu.ctaItem.link",
19409
- className: `header-cta btn-sm ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
19469
+ sizeFallback: "sm",
19470
+ className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
19410
19471
  });
19411
19472
  var mobileCta = ctaButton({
19412
19473
  basePath: "menu.ctaItem",
19413
19474
  whenPath: "menu.ctaItem.label",
19414
19475
  variantPath: "menu.ctaItem.variant",
19415
19476
  linkPath: "menu.ctaItem.link",
19416
- className: "nav-mobile-cta btn-md rb-w-full"
19477
+ sizeFallback: "md",
19478
+ className: "nav-mobile-cta rb-w-full"
19417
19479
  });
19418
19480
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
19419
19481
  {