{
  "schemaVersion": "1.0",
  "id": "sherbet-courier",
  "version": "1.1.0",
  "name": "Sherbet Courier",
  "tier": "free",
  "summary": "Rounded logistics UI: raspberry actions, rose-tinted paper and plum-ink neutrals, and a Literata serif voice for parcel tracking.",
  "tags": {
    "industries": [
      "logistics",
      "delivery",
      "e-commerce"
    ],
    "moods": [
      "playful",
      "friendly",
      "bouncy",
      "warm"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Sherbet Courier is for logistics products used by ordinary people: parcel tracking, courier apps, local delivery and returns. It replaces the usual navy-and-orange utility look with rounded shapes, saturated raspberry and rose-tinted paper. Status, timing and addresses stay legible: every text pairing clears 4.5:1 in both modes, and most clear 5:1.",
    "color": "Raspberry (brand, hue ~350) is the only action color. It is used for primary buttons, links, focus rings (ring = brand.500 light, brand.400 dark) and the active tracking step. Neutrals carry a deliberate rose tint in light steps that deepens to plum in neutral.900/950, so dark surfaces read as plum-ink, not grey. Status scales follow the same curve as brand: pale 50–200 tints, peak chroma at 400–600, and dark steps that stay saturated rather than going brown. Danger is shifted to a clear vermilion-orange (danger.600 #c4450c light, danger.400 #fb7a3c dark), well apart from raspberry in hue in both modes, so errors and primary actions are never confused. Success is a warm mint and warning is honey amber. The muddy olive mid-steps were removed from warning 400–600. Light contrast: primary/white ≈5.7:1, destructive/white ≈5.0:1, success.700/white ≈6.6:1, muted-foreground (neutral.700) on muted ≈6.8:1. Dark mode uses a neutral.950 plum background, neutral.900 cards one step lifted, and brand.400 primary with brand.950 text ≈5.7:1.",
    "typography": "The scale is built on roughly a 1.25 ratio (major third) from a 16px body: 20, 24, 30, 38, 48. Literata (600–700) covers display-lg 48, display-md 38 and heading-lg 30. Its sturdy serif gives the bright palette a bookish, trustworthy voice. Tracking tightens as size grows, from -0.025em at 48px to -0.005em at 20px. Nunito Sans (400/600/700/800) handles all functional UI: heading-md 24/800, heading-sm 20/700, body at 1.5–1.6 line height, label 14/700 and caption 12/600. Fira Code 400/500 is reserved for tracking numbers, order IDs and API snippets.",
    "layout": "Comfortable density on a 4px grid. Cards use 24px padding (space.6). Buttons and inputs are 44px tall for thumb taps, with at least 8px (space.2) between adjacent targets. Content columns are capped at 1200px. Tracking timelines use space.6 (24px) between steps and space.3 (12px) between a step title and its timestamp.",
    "elevation": "Cards sit just above the page: a 1px border (neutral.200 light, neutral.800 dark) plus shadow.sm, tinted with brand.900 plum. Floating layers get more lift: shadow.md for menus and popovers, shadow.lg for dialogs and bottom sheets. In dark mode, cards are lifted by a lighter surface (neutral.900 on neutral.950) rather than by shadow.",
    "shapes": "Large, friendly rounding: radius.md 12px on inputs, radius.lg 20px on cards, radius.xl 28px on dialogs and bottom sheets, and radius.full on buttons, badges and tracking-step chips. radius.sm 8px is for small inner elements such as checkboxes and tooltips. radius.none is only for full-bleed images and dividers."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#fff1f4",
        "100": "#ffe0e7",
        "200": "#ffc2d0",
        "300": "#ff93ac",
        "400": "#f65f88",
        "500": "#e03468",
        "600": "#c41f55",
        "700": "#a01545",
        "800": "#7c0f37",
        "900": "#5a0a29",
        "950": "#3a0418"
      },
      "neutral": {
        "50": "#fcf7f8",
        "100": "#f6edf0",
        "200": "#e9dde1",
        "300": "#d4c5ca",
        "400": "#b1a0a6",
        "500": "#907f85",
        "600": "#74646b",
        "700": "#5c4d54",
        "800": "#45373e",
        "900": "#30242a",
        "950": "#1e1519"
      },
      "success": {
        "50": "#ecfdf3",
        "100": "#d2f7e1",
        "200": "#a6ecc4",
        "300": "#74d9a1",
        "400": "#45c07e",
        "500": "#26a263",
        "600": "#18854f",
        "700": "#106b40",
        "800": "#0c5233",
        "900": "#083b25",
        "950": "#032416"
      },
      "warning": {
        "50": "#fffbeb",
        "100": "#fff2c4",
        "200": "#ffe38a",
        "300": "#fccd4d",
        "400": "#f0b323",
        "500": "#d69510",
        "600": "#b0740a",
        "700": "#8a580b",
        "800": "#66410c",
        "900": "#47300b",
        "950": "#2b1c05"
      },
      "danger": {
        "50": "#fff4ed",
        "100": "#ffe4d3",
        "200": "#ffc6a5",
        "300": "#ffa070",
        "400": "#fb7a3c",
        "500": "#ea5a17",
        "600": "#c4450c",
        "700": "#9f360c",
        "800": "#7d2a0c",
        "900": "#5a1f0a",
        "950": "#3a1205"
      }
    },
    "font": {
      "display": {
        "family": "Literata",
        "fallback": "Georgia, serif",
        "source": "google",
        "weights": [
          500,
          600,
          700
        ]
      },
      "sans": {
        "family": "Nunito Sans",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          400,
          600,
          700,
          800
        ]
      },
      "mono": {
        "family": "Fira Code",
        "fallback": "ui-monospace, monospace",
        "source": "google",
        "weights": [
          400,
          500
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 8,
      "md": 12,
      "lg": 20,
      "xl": 28,
      "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(90, 10, 41, 0.05), 0 2px 6px rgba(90, 10, 41, 0.06)",
      "md": "0 8px 20px -4px rgba(90, 10, 41, 0.16)",
      "lg": "0 20px 44px -10px rgba(90, 10, 41, 0.28)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 48,
      "lineHeight": 1.08,
      "weight": 700,
      "letterSpacing": -0.025
    },
    "display-md": {
      "font": "display",
      "size": 38,
      "lineHeight": 1.12,
      "weight": 700,
      "letterSpacing": -0.02
    },
    "heading-lg": {
      "font": "display",
      "size": 30,
      "lineHeight": 1.2,
      "weight": 600,
      "letterSpacing": -0.015
    },
    "heading-md": {
      "font": "sans",
      "size": 24,
      "lineHeight": 1.3,
      "weight": 800,
      "letterSpacing": -0.01
    },
    "heading-sm": {
      "font": "sans",
      "size": 20,
      "lineHeight": 1.35,
      "weight": 700,
      "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": 700,
      "letterSpacing": 0.005
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.4,
      "weight": 600,
      "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.full}",
      "typography": "{typography.label}",
      "fontWeight": 700
    },
    "input": {
      "height": 44,
      "paddingX": "{space.4}",
      "radius": "{radius.md}",
      "typography": "{typography.body-md}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.6}",
      "radius": "{radius.lg}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.3}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Use primary (brand.600 light, brand.400 dark) for exactly one main button per view, such as 'Track parcel' or 'Schedule pickup'. Render other actions as secondary (neutral.100 / neutral.800) or ghost buttons.",
      "Use radius.full on buttons, badges and tracking-step chips, radius.md (12px) on inputs, radius.lg (20px) on cards and radius.xl (28px) on dialogs and bottom sheets.",
      "Set tracking numbers, order IDs and API keys in typography.code (Fira Code 14/400) so 0/O and 1/l are unambiguous. Use weight 500 when an ID appears inside a 14px label row.",
      "Use Literata only for display-lg (48), display-md (38) and heading-lg (30). Use Nunito Sans for heading-md (24/800) and below, including table cells, form labels and button text.",
      "Show the focus state as a 2px ring token outline with a 2px offset on every interactive element. Ring contrast is about 4.1:1 on the light background and above 5:1 on the dark background.",
      "Pair every delivery status (success = delivered, warning = delayed, destructive = failed) with an icon and a text label in the badge so meaning never relies on color alone.",
      "Lift dark-mode cards with the card surface (neutral.900 on neutral.950 background) plus a neutral.800 border. Keep shadow.md and shadow.lg for menus and dialogs only."
    ],
    "dont": [
      "Don't use primary raspberry for failed deliveries or form errors. Use destructive (danger.600 light, danger.400 dark) with destructive-foreground text.",
      "Don't use radius.none on cards, buttons or inputs. Reserve it for full-bleed images and dividers.",
      "Don't set Literata below 30px, in all caps, or in button labels, badges and table text.",
      "Don't use pure black text, pure white page backgrounds or untinted grey. Use neutral.50 for the page, white for cards, and neutral.950 for text.",
      "Don't set body text longer than one line on the accent surface (brand.100 light, brand.900 dark). It is only for selected rows, highlights and the active tracking chip.",
      "Don't place more than one saturated fill (primary, destructive, success) in the same card. Combine raspberry with neutrals, not with success or warning fills.",
      "Don't use warning.400–600 as text on light surfaces. Use warning-foreground (warning.900) on the warning (warning.200) surface, and use muted-foreground (neutral.700) for secondary text, never neutral.500."
    ]
  }
}
