{
  "schemaVersion": "1.0",
  "id": "sequin-streamer",
  "version": "1.1.0",
  "name": "Sequin Streamer",
  "tier": "free",
  "summary": "Dark-first, bouncy fashion UI: saturated indigo actions on deep blue-slate neutrals, rounded Outfit type and pill shapes with AA contrast.",
  "tags": {
    "industries": [
      "fashion",
      "retail",
      "e-commerce"
    ],
    "moods": [
      "playful",
      "friendly",
      "bold",
      "energetic"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Sequin Streamer is for fashion shopping and wardrobe tools. It is built dark-first: background neutral.950 (#0d1019) and card neutral.900 (#181c28) are blue-tinted, so the indigo primary and rounded shapes stand out without glare. The playful tone comes from radii of 12–24px, springy motion and one saturated hue, not from extra decoration. Every status or selected state pairs color with shape, a label or an icon.",
    "color": "One brand hue, Velvet Indigo (OKLCH hue about 265), drives primary, accent and ring. In light mode primary is brand.600 (#3d4ddb, 6.4:1 with white). In dark mode it is brand.400 (#7189fb, 6.0:1 on background, 5.3:1 with its brand.950 label). Neutrals carry a small amount of the same blue hue, so surfaces and brand read as one family. Chroma rises from 50 to 500–600 and falls toward 950 on every scale, so mid-steps stay clean. Destructive is a magenta-leaning crimson: danger.600 in light mode and danger.400 in dark mode. Its hue is about 80° away from primary (ΔE2000 > 30 in both modes), so an error never reads as a brand action. Success leans cool emerald-teal to match the blue temperature. Warning stays a golden amber and is reserved for status, never decoration.",
    "typography": "Outfit is the single voice for display and interface text; its round geometric terminals match the shapes. Headings and display sizes follow a perfect-fourth scale (×1.333): 18 → 24 → 32 → 42 → 56px. Tracking tightens as size grows, from -0.005em at 18px to -0.025em at 56px. Body text uses 16px at a 1.55 line height, with 18px and 14px variants. Display uses Outfit 600 and 700, and the UI uses 400, 500 and 600, all shipped by Google Fonts. Geist Mono 400 at 14px is reserved for SKUs, sizes, order IDs and code.",
    "layout": "Comfortable density on a 4px grid (space.1 = 4px). Product grids use space.6 (24px) gutters. Cards use space.6 (24px) padding, or space.4 (16px) on compact tiles. Buttons and inputs are 44px tall, and table or list rows are at least 44px, so touch targets meet the 44px minimum.",
    "elevation": "Dark surfaces separate by ramp step first: background neutral.950, then card and popover neutral.900, then secondary and muted neutral.800. A 1px border comes next, and shadow comes last. Shadows are tinted with near-black blue (rgba 3, 5, 15). Use shadow.sm on cards, shadow.md on menus and popovers, and shadow.lg on dialogs and sheets only.",
    "shapes": "Rounding is core to the personality. Use radius.md (12px) on small controls such as checkboxes and segmented items. Use radius.lg (16px) on buttons and inputs, with radius.full available for pill buttons. Use radius.xl (24px) on product cards and sheets. Badges and avatars use radius.full. radius.none and radius.sm are only for inline code and table cells."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#eff3ff",
        "100": "#dfe7ff",
        "200": "#c3d1ff",
        "300": "#9bb1ff",
        "400": "#7189fb",
        "500": "#5566f0",
        "600": "#3d4ddb",
        "700": "#3139b5",
        "800": "#29308f",
        "900": "#21276a",
        "950": "#151846"
      },
      "neutral": {
        "50": "#f5f7fb",
        "100": "#e8ecf4",
        "200": "#d3d9e6",
        "300": "#aeb7c9",
        "400": "#8590a6",
        "500": "#646e84",
        "600": "#4b5468",
        "700": "#373f52",
        "800": "#252b3b",
        "900": "#181c28",
        "950": "#0d1019"
      },
      "success": {
        "50": "#ebfcf5",
        "100": "#d0f7e8",
        "200": "#a3edd2",
        "300": "#67dbb4",
        "400": "#2fc293",
        "500": "#16a47a",
        "600": "#0d8763",
        "700": "#0a6d51",
        "800": "#095641",
        "900": "#073f31",
        "950": "#03241c"
      },
      "warning": {
        "50": "#fffbeb",
        "100": "#fef3c7",
        "200": "#fde68a",
        "300": "#fcd34d",
        "400": "#f5b82e",
        "500": "#d99a0b",
        "600": "#b57c07",
        "700": "#8f5f05",
        "800": "#6c4704",
        "900": "#4a3103",
        "950": "#2b1c02"
      },
      "danger": {
        "50": "#fff1f4",
        "100": "#ffe0e7",
        "200": "#fec2cf",
        "300": "#fd94aa",
        "400": "#f0587a",
        "500": "#de3a5f",
        "600": "#c42a4d",
        "700": "#a31f3d",
        "800": "#7e1830",
        "900": "#5a1224",
        "950": "#3a0a17"
      }
    },
    "font": {
      "display": {
        "family": "Outfit",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          600,
          700
        ]
      },
      "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": 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(3, 5, 15, 0.30)",
      "md": "0 6px 16px -4px rgba(3, 5, 15, 0.40)",
      "lg": "0 20px 44px -10px rgba(3, 5, 15, 0.55)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 56,
      "lineHeight": 1.05,
      "weight": 700,
      "letterSpacing": -0.025
    },
    "display-md": {
      "font": "display",
      "size": 42,
      "lineHeight": 1.1,
      "weight": 700,
      "letterSpacing": -0.02
    },
    "heading-lg": {
      "font": "display",
      "size": 32,
      "lineHeight": 1.2,
      "weight": 600,
      "letterSpacing": -0.015
    },
    "heading-md": {
      "font": "sans",
      "size": 24,
      "lineHeight": 1.25,
      "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.55,
      "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": 600,
      "letterSpacing": 0.01
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.4,
      "weight": 500,
      "letterSpacing": 0.02
    },
    "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.600}",
      "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.lg}",
      "typography": "{typography.label}",
      "fontWeight": 600
    },
    "input": {
      "height": 44,
      "paddingX": "{space.4}",
      "radius": "{radius.lg}",
      "typography": "{typography.body-md}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.6}",
      "radius": "{radius.xl}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.3}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Use one primary button per view (e.g. Add to bag). Set other actions to secondary (neutral.100 light / neutral.800 dark) or ghost buttons.",
      "Use radius.lg (16px) on buttons and inputs and radius.xl (24px) on product cards and sheets. Use radius.full only for pill buttons, badges and avatars.",
      "Layer dark screens as background neutral.950, then card/popover neutral.900, then muted neutral.800. Add a 1px border token before reaching for shadow.md or shadow.lg.",
      "Show focus as a 2px ring token outline with a 2px offset on every button, input, swatch and card link. Never rely on a color change alone.",
      "Pair success, warning and destructive with an icon and a text label, such as a check icon with 'In stock' or an alert icon with 'Only 2 left'.",
      "Set SKUs, sizes and order IDs in the code style (Geist Mono 14px/1.5, weight 400) with letterSpacing 0."
    ],
    "dont": [
      "Don't use primary for delete, remove-from-bag or error text. Use destructive with destructive-foreground instead.",
      "Don't set text below body-sm (14px) on muted or accent surfaces. Keep muted-foreground for secondary copy only, not for prices or button labels.",
      "Don't use #000000 for dark-mode surfaces. Use neutral.950 for background and neutral.900 for cards, and keep #ffffff for light-mode card and popover only.",
      "Don't use radius below radius.md (12px) on buttons, inputs, cards or badges.",
      "Don't add a second saturated accent hue. Keep success, warning and destructive for status messages and badges, never decoration.",
      "Don't apply negative letterSpacing to body-md, body-sm, label or caption. Tight tracking is only for heading-sm and larger."
    ]
  }
}
