{
  "schemaVersion": "1.0",
  "id": "lilac-trellis",
  "version": "1.1.0",
  "name": "Lilac Trellis",
  "tier": "free",
  "summary": "Calm botanical UI for creator tools: wisteria-violet actions on sage-tinted neutrals, soft round shapes, geometric Outfit type.",
  "tags": {
    "industries": [
      "creator-economy",
      "publishing",
      "membership-platforms"
    ],
    "moods": [
      "organic",
      "calm",
      "gentle",
      "natural"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Lilac Trellis is built for tools creators keep open all day: newsletters, memberships, storefronts and content calendars. It uses one muted violet action color on sage-tinted neutrals, rounded shapes and a single geometric typeface. Contrast stays at or above 4.5:1 for all text pairs in both modes, with most pairs above 5.8:1. Surface tones stay soft for long editing sessions. The goal is a quiet working surface, not a promotional one.",
    "color": "brand (wisteria, hue around 245°) is the only action hue. semantic primary is brand.600 #5c54b0 in light mode, with white text at about 6.3:1 and 5.8:1 against background. In dark mode it is brand.400 #9791dc, with brand.950 text at about 6.2:1 and 6.3:1 against background. ring uses brand.500 in light mode (about 4.0:1 on background) and brand.400 in dark mode. Neutrals are sage-tinted (hue around 85–95°, low chroma), so the cool violet reads against a green ground. Status scales share the brand's matte chroma curve. success is a slightly cool leaf green: success.700 with white text at about 7.2:1. warning is ochre with smoothed 300–500 steps. danger is a desaturated rose-crimson around hue 347°: danger.600 with white at about 6.0:1, and danger.400 in dark mode. This keeps destructive far from primary in hue in both modes. Every scale darkens step by step from 50 to 950.",
    "typography": "Outfit handles both display and interface text. Its round geometric forms read as friendly without looking juvenile. The scale is a major third (about 1.25) rounded to even pixels: 12, 14, 16, 18, 20, 24, 30, 38 and 48. Tracking tightens as size grows, from -0.005em at heading-sm (20px) to -0.025em at display-lg (48px). Body text stays at 0 tracking with a 1.6 line height. Weights are limited to 400, 500 and 600, all of which Outfit ships. Geist Mono at 13px (typography.code) is reserved for slugs, API keys, embed codes and numeric IDs.",
    "layout": "Comfortable density on a 4px grid. Cards use space.6 (24px) padding. Sections are separated by space.8–space.12 (32–48px). App content columns max out at 1120px. Long-form editors stay near 680px so body-md lines run about 70 characters.",
    "elevation": "Most surfaces are flat. They separate through a 1px border token and a tonal step, like layered paper. In light mode, background is neutral.50 and card is #fcfdfa. In dark mode, background is neutral.950, card is #1d2119 (a small lift) and popover is neutral.900 (a clearer lift). Shadows are tinted with moss rgba(39, 43, 35, …), never pure black. Cards use shadow.sm only. shadow.md and shadow.lg are reserved for menus, popovers and dialogs.",
    "shapes": "Rounding is generous. Use radius.md (10px) on buttons and inputs, radius.lg (16px) on cards and radius.xl (24px) on large feature panels. Reserve radius.full for badges and tags. radius.sm (6px) is only for small inner elements such as checkboxes and code chips. radius.none is not used on interactive surfaces."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#f5f4ff",
        "100": "#eae9fb",
        "200": "#d6d4f5",
        "300": "#b8b5ea",
        "400": "#9791dc",
        "500": "#766fca",
        "600": "#5c54b0",
        "700": "#494291",
        "800": "#383372",
        "900": "#282454",
        "950": "#181536"
      },
      "neutral": {
        "50": "#f6f7f2",
        "100": "#ecefe7",
        "200": "#dadfd2",
        "300": "#c0c7b6",
        "400": "#a0a995",
        "500": "#828c77",
        "600": "#686f5f",
        "700": "#51574a",
        "800": "#3b4036",
        "900": "#272b23",
        "950": "#161911"
      },
      "success": {
        "50": "#eef9f1",
        "100": "#d7f1de",
        "200": "#b2e2bf",
        "300": "#84cd97",
        "400": "#56b46f",
        "500": "#379a52",
        "600": "#287e44",
        "700": "#1f6337",
        "800": "#174e2b",
        "900": "#0f391f",
        "950": "#082312"
      },
      "warning": {
        "50": "#fdf7e8",
        "100": "#faebc8",
        "200": "#f3d699",
        "300": "#e3b862",
        "400": "#c99a33",
        "500": "#ab7d12",
        "600": "#8d6608",
        "700": "#715104",
        "800": "#563d02",
        "900": "#3d2a01",
        "950": "#261800"
      },
      "danger": {
        "50": "#fdf4f5",
        "100": "#fbe4e8",
        "200": "#f6c8d0",
        "300": "#ee9fae",
        "400": "#e2708a",
        "500": "#cf4a6c",
        "600": "#b23256",
        "700": "#922444",
        "800": "#721733",
        "900": "#530b23",
        "950": "#360313"
      }
    },
    "font": {
      "display": {
        "family": "Outfit",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          500,
          600
        ]
      },
      "sans": {
        "family": "Outfit",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          400,
          500,
          600
        ]
      },
      "mono": {
        "family": "Geist Mono",
        "fallback": "ui-monospace, monospace",
        "source": "google",
        "weights": [
          400,
          500
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 6,
      "md": 10,
      "lg": 16,
      "xl": 24,
      "full": 9999
    },
    "space": {
      "0": 0,
      "1": 4,
      "2": 8,
      "3": 12,
      "4": 16,
      "5": 20,
      "6": 24,
      "8": 32,
      "10": 40,
      "12": 48,
      "16": 64,
      "20": 80,
      "24": 96,
      "0.5": 2,
      "1.5": 6
    },
    "shadow": {
      "sm": "0 1px 2px rgba(39, 43, 35, 0.06)",
      "md": "0 6px 18px -4px rgba(39, 43, 35, 0.12)",
      "lg": "0 20px 48px -12px rgba(39, 43, 35, 0.22)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 48,
      "lineHeight": 1.1,
      "weight": 600,
      "letterSpacing": -0.025
    },
    "display-md": {
      "font": "display",
      "size": 38,
      "lineHeight": 1.14,
      "weight": 600,
      "letterSpacing": -0.02
    },
    "heading-lg": {
      "font": "display",
      "size": 30,
      "lineHeight": 1.2,
      "weight": 500,
      "letterSpacing": -0.015
    },
    "heading-md": {
      "font": "sans",
      "size": 24,
      "lineHeight": 1.3,
      "weight": 500,
      "letterSpacing": -0.01
    },
    "heading-sm": {
      "font": "sans",
      "size": 20,
      "lineHeight": 1.35,
      "weight": 600,
      "letterSpacing": -0.005
    },
    "body-lg": {
      "font": "sans",
      "size": 18,
      "lineHeight": 1.6,
      "weight": 400,
      "letterSpacing": 0
    },
    "body-md": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.6,
      "weight": 400,
      "letterSpacing": 0
    },
    "body-sm": {
      "font": "sans",
      "size": 14,
      "lineHeight": 1.5,
      "weight": 400,
      "letterSpacing": 0
    },
    "label": {
      "font": "sans",
      "size": 14,
      "lineHeight": 1.25,
      "weight": 500,
      "letterSpacing": 0.005
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.4,
      "weight": 500,
      "letterSpacing": 0.015
    },
    "code": {
      "font": "mono",
      "size": 13,
      "lineHeight": 1.55,
      "weight": 400,
      "letterSpacing": 0
    }
  },
  "semantic": {
    "light": {
      "background": "{color.neutral.50}",
      "foreground": "{color.neutral.950}",
      "card": "#fcfdfa",
      "card-foreground": "{color.neutral.950}",
      "popover": "#fcfdfa",
      "popover-foreground": "{color.neutral.950}",
      "primary": "{color.brand.600}",
      "primary-foreground": "#ffffff",
      "secondary": "{color.neutral.100}",
      "secondary-foreground": "{color.neutral.900}",
      "muted": "{color.neutral.100}",
      "muted-foreground": "{color.neutral.700}",
      "accent": "{color.brand.100}",
      "accent-foreground": "{color.brand.900}",
      "destructive": "{color.danger.600}",
      "destructive-foreground": "#ffffff",
      "success": "{color.success.700}",
      "success-foreground": "#ffffff",
      "warning": "{color.warning.200}",
      "warning-foreground": "{color.warning.900}",
      "border": "{color.neutral.200}",
      "input": "{color.neutral.300}",
      "ring": "{color.brand.500}"
    },
    "dark": {
      "background": "{color.neutral.950}",
      "foreground": "{color.neutral.50}",
      "card": "#1d2119",
      "card-foreground": "{color.neutral.50}",
      "popover": "{color.neutral.900}",
      "popover-foreground": "{color.neutral.50}",
      "primary": "{color.brand.400}",
      "primary-foreground": "{color.brand.950}",
      "secondary": "{color.neutral.800}",
      "secondary-foreground": "{color.neutral.100}",
      "muted": "{color.neutral.800}",
      "muted-foreground": "{color.neutral.300}",
      "accent": "{color.brand.900}",
      "accent-foreground": "{color.brand.100}",
      "destructive": "{color.danger.400}",
      "destructive-foreground": "{color.danger.950}",
      "success": "{color.success.400}",
      "success-foreground": "{color.success.950}",
      "warning": "{color.warning.400}",
      "warning-foreground": "{color.warning.950}",
      "border": "{color.neutral.800}",
      "input": "{color.neutral.700}",
      "ring": "{color.brand.400}"
    }
  },
  "components": {
    "button": {
      "height": 42,
      "paddingX": "{space.5}",
      "radius": "{radius.md}",
      "typography": "{typography.label}",
      "fontWeight": 500
    },
    "input": {
      "height": 42,
      "paddingX": "{space.4}",
      "radius": "{radius.md}",
      "typography": "{typography.body-sm}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.6}",
      "radius": "{radius.lg}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.2}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Use one semantic primary button per view for the main action, such as Publish or Send. Style other actions as secondary (neutral.100 fill) or ghost.",
      "Show focus with a 2px ring token (brand.500 in light, brand.400 in dark) on every button, input and selectable row.",
      "Use radius.md (10px) on buttons and inputs, radius.lg (16px) on cards, radius.xl (24px) on feature panels, and radius.full only on badges and tags.",
      "Separate surfaces with the 1px border token and a tonal step before adding shadow: background to card in light, neutral.950 to #1d2119 in dark.",
      "Set body copy in body-md (16px, line-height 1.6) and keep long-form editing columns near 680px wide.",
      "Use popover (neutral.900) in dark mode for menus and dialogs so they sit above cards (#1d2119), and add shadow.md or shadow.lg.",
      "Pair success, warning and destructive colors with an icon or text label so meaning never depends on color alone.",
      "Use typography.code (Geist Mono 13px) only for slugs, API keys, embed snippets and IDs."
    ],
    "dont": [
      "Don't use #000000 text or flat grey surfaces. Use the sage neutral ramp, and use #fcfdfa for light cards.",
      "Don't use brand violet for errors or deletions. Use destructive (danger.600 in light, danger.400 in dark).",
      "Don't add gradients, glows, or brand steps 500 and above as decorative fills. Brand 500 and above is for actions, links and focus only.",
      "Don't place muted-foreground text on brand.100 accent or on warning.200. Use accent-foreground or warning-foreground on those surfaces.",
      "Don't set headings off-scale (allowed sizes: 20, 24, 30, 38, 48px), and don't use Outfit weights above 600.",
      "Don't use radius.none or radius.sm (6px) on cards, buttons or inputs. Reserve radius.sm for checkboxes and inline code chips.",
      "Don't put paragraphs longer than two lines on the accent surface (brand.100 or brand.900). Use it for selected rows and highlights.",
      "Don't put shadow.md or shadow.lg on resting cards, and don't use black or high-opacity shadows anywhere."
    ]
  }
}
