{
  "schemaVersion": "1.0",
  "id": "damson-basket",
  "version": "1.1.0",
  "name": "Damson Basket",
  "tier": "free",
  "summary": "Warm, soft-edged food delivery UI: fig-violet actions on plum-tinted taupe neutrals, rounded shapes and friendly Geist type.",
  "tags": {
    "industries": [
      "food-delivery",
      "restaurants",
      "grocery"
    ],
    "moods": [
      "warm",
      "approachable",
      "earthy",
      "friendly"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Damson Basket is for apps that deliver home-cooked and neighborhood food. Most food delivery UIs default to red and orange. This system uses deep fig violet (brand.600) on plum-tinted taupe neutrals instead. Rounded radii (12/16/24px), 44px controls and comfortable spacing make the UI feel handmade, without decorative textures or illustrations.",
    "color": "Fig (brand, violet) is the only action color. It is used for primary buttons, links, selected states and the focus ring. The brand ramp holds chroma highest at 400–600 and tapers evenly toward 50 and 950, so no step looks greyed out. Neutrals carry a low, constant plum tint, so greys read as warm taupe, which flatters food photography. Success was shifted toward olive and warning is ochre; both lean warm to match Fig. Danger is a crimson that stays well apart from Fig in hue: destructive vs primary ΔE2000 is above 18 in both modes. Light mode: primary brand.600 on white is about 6.4:1, muted-foreground neutral.700 on muted is about 6.3:1, and ring brand.500 on background is about 4.2:1. Dark mode is built on its own tokens, not an inversion. The background is neutral.950, a deep aubergine-black. Card and popover sit one step lighter on neutral.900. Primary is a soft lilac (brand.400, about 6.2:1 on background) with brand.950 text, so it glows gently without looking neon.",
    "typography": "Geist covers display, interface and body text. Geist Mono is reserved for order IDs, promo codes and timestamps. The heading scale steps by about 1.27: heading-sm 18, heading-md 22, heading-lg 28, display-md 36, display-lg 46. Tracking tightens as size grows, from -0.005em at 18px to -0.025em at 46px. Display styles use weight 600 and heading-lg uses 500, so headlines read friendly rather than corporate. Body-md is 16px at line height 1.6 for menus and dish descriptions. Labels are 14px/500 and captions are 12px/500. All weights used (400, 500, 600) ship with Geist and Geist Mono.",
    "layout": "Comfortable density on a 4px base grid (space tokens). Mobile gutters are space.4–space.6 (16–24px); desktop content is capped at 1120px. Menu cards use space.5 (20px) padding. Order rows keep a minimum 44px tap height with space.3 (12px) vertical padding.",
    "elevation": "Mostly flat. Cards sit on the background with a 1px border token and shadow-sm, a plum-tinted shadow at 6% opacity. shadow-md is for the sticky cart bar, popovers and dropdown menus. shadow-lg is only for dialogs and bottom sheets. In dark mode, depth comes mainly from the surface step (neutral.950 to neutral.900) and the border (neutral.800), because shadows barely show on dark surfaces.",
    "shapes": "Generously rounded. Use radius.md (12px) on buttons and inputs, radius.lg (16px) on cards and card images, and radius.xl (24px) on bottom sheets, dialogs and hero images. radius.full (pill) is for badges, filter chips and the courier status tag. radius.sm (6px) is only for small inner elements such as checkboxes and tooltips. radius.none is only for dividers."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#f8f3fc",
        "100": "#f0e7f8",
        "200": "#e0cff0",
        "300": "#cbaee4",
        "400": "#b088d3",
        "500": "#9363bd",
        "600": "#774aa1",
        "700": "#5f3a82",
        "800": "#482c63",
        "900": "#331f46",
        "950": "#1f1229"
      },
      "neutral": {
        "50": "#faf7f9",
        "100": "#f2edf0",
        "200": "#e3dce1",
        "300": "#cdc4cb",
        "400": "#aea3ad",
        "500": "#8f838e",
        "600": "#756a75",
        "700": "#5d535d",
        "800": "#453d45",
        "900": "#2e2830",
        "950": "#1b161d"
      },
      "success": {
        "50": "#f3f7ea",
        "100": "#e3eed0",
        "200": "#c9dfaa",
        "300": "#a6c87e",
        "400": "#82ad58",
        "500": "#63923c",
        "600": "#4c772d",
        "700": "#3b5e24",
        "800": "#2c481b",
        "900": "#1e3212",
        "950": "#111e09"
      },
      "warning": {
        "50": "#fff8e8",
        "100": "#ffedc4",
        "200": "#fbdb92",
        "300": "#ecc065",
        "400": "#d6a232",
        "500": "#b88411",
        "600": "#976a05",
        "700": "#765200",
        "800": "#593d00",
        "900": "#3e2a00",
        "950": "#251800"
      },
      "danger": {
        "50": "#fff3f3",
        "100": "#ffe2e2",
        "200": "#ffc5c7",
        "300": "#ff9a9f",
        "400": "#f56d78",
        "500": "#dc4455",
        "600": "#bb2f40",
        "700": "#98222f",
        "800": "#741720",
        "900": "#530d15",
        "950": "#340509"
      }
    },
    "font": {
      "display": {
        "family": "Geist",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          500,
          600
        ]
      },
      "sans": {
        "family": "Geist",
        "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": 12,
      "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(46, 40, 48, 0.06)",
      "md": "0 6px 16px -4px rgba(46, 40, 48, 0.14)",
      "lg": "0 20px 44px -10px rgba(46, 40, 48, 0.24)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 46,
      "lineHeight": 1.1,
      "weight": 600,
      "letterSpacing": -0.025
    },
    "display-md": {
      "font": "display",
      "size": 36,
      "lineHeight": 1.14,
      "weight": 600,
      "letterSpacing": -0.02
    },
    "heading-lg": {
      "font": "display",
      "size": 28,
      "lineHeight": 1.2,
      "weight": 500,
      "letterSpacing": -0.015
    },
    "heading-md": {
      "font": "sans",
      "size": 22,
      "lineHeight": 1.3,
      "weight": 600,
      "letterSpacing": -0.01
    },
    "heading-sm": {
      "font": "sans",
      "size": 18,
      "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.3,
      "weight": 500,
      "letterSpacing": 0.005
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.4,
      "weight": 500,
      "letterSpacing": 0.01
    },
    "code": {
      "font": "mono",
      "size": 14,
      "lineHeight": 1.5,
      "weight": 400,
      "letterSpacing": 0
    }
  },
  "semantic": {
    "light": {
      "background": "{color.neutral.50}",
      "foreground": "{color.neutral.950}",
      "card": "#ffffff",
      "card-foreground": "{color.neutral.950}",
      "popover": "#ffffff",
      "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": "{color.neutral.900}",
      "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": 44,
      "paddingX": "{space.5}",
      "radius": "{radius.md}",
      "typography": "{typography.label}",
      "fontWeight": 600
    },
    "input": {
      "height": 44,
      "paddingX": "{space.4}",
      "radius": "{radius.md}",
      "typography": "{typography.body-md}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.5}",
      "radius": "{radius.lg}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.2}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Use one primary button per screen for the main action, such as 'Place order' or 'Add to basket'. Style other actions as secondary (neutral.100 surface) or ghost.",
      "Keep buttons and inputs at their 44px height token, and give order rows at least 44px tap height.",
      "Show the focus state as a 2px ring token (brand.500 light, brand.400 dark) with a 2px offset on buttons, inputs, chips and cards.",
      "Round food photos with radius.lg (16px) inside cards and radius.xl (24px) for hero images and bottom sheets.",
      "Set prices and delivery times in label or body-md with font-feature-settings: 'tnum', and right-align them in order summaries.",
      "Use the code style (Geist Mono 14px) only for order IDs, promo codes and timestamps.",
      "Pair every success, warning and destructive badge or banner with an icon and a text label, for example a check icon plus 'Delivered'.",
      "Separate cards from the background with the 1px border token and shadow-sm. Use shadow-md for the sticky cart bar and popovers, and shadow-lg only for dialogs and bottom sheets."
    ],
    "dont": [
      "Don't use destructive (danger.600 / danger.400) for promotions or deals. Reserve it for errors, cancellations and 'Remove item'.",
      "Don't use #000000, a #ffffff page background or untinted greys. Use the neutral ramp, and keep #ffffff for light-mode card and popover only.",
      "Don't apply radius.none or radius.sm to cards, buttons, inputs or images.",
      "Don't set display-lg, display-md or heading-lg below 28px, in all caps, or at weight 400.",
      "Don't run body text longer than one line on the accent surface (brand.100 light / brand.900 dark). Use accent for selected rows, active filter chips and highlights.",
      "Don't put muted-foreground text on brand or status surfaces. Use the matching *-foreground token.",
      "Don't add decorative textures, illustrations or hand-drawn fonts. The warmth comes from the color, radius and spacing tokens."
    ]
  }
}
