{
  "schemaVersion": "1.0",
  "id": "sonata-whisker",
  "version": "1.1.0",
  "name": "Sonata Whisker",
  "tier": "free",
  "summary": "Near-monochrome pet-care UI: warm stone neutrals, one sapphire accent, IBM Plex Serif headings and a spacious 4px-grid layout.",
  "tags": {
    "industries": [
      "pet-care",
      "wellness",
      "premium-retail"
    ],
    "moods": [
      "restrained",
      "expensive",
      "calm",
      "warm"
    ],
    "density": "spacious",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Sonata Whisker serves premium pet-care services, boutique products and vet-adjacent wellness brands. Many pet brands use bright color, cartoon shapes and playful type. This system uses whitespace, a warm stone neutral ramp, one sapphire accent and precise type instead. Each view has one primary button, one serif headline and at least 80px between major sections.",
    "color": "Warm stone neutrals (hue about 35°, low chroma) carry every surface and text role. Brand sapphire (hue about 222°) keeps its chroma highest at 500 to 600 and tapers toward 50 and 950. It is used only for primary, ring, accent and selected states. Success (sage green), warning (ochre) and danger (brick, hue about 3°) follow the same lightness curve, so equal steps carry equal visual weight. Primary and destructive differ by more than 18 ΔE2000 in both modes. Measured contrast in light mode: primary-foreground on brand.600 is about 6.5:1, white on danger.600 about 6.0:1, white on success.700 about 7:1, muted-foreground (neutral.700) on muted about 6:1, and ring brand.500 on background about 4.1:1. Dark mode uses a deep warm background (neutral.950, #1a1816) with card lifted to #24211e and popover to #2a2723. Primary is brand.400 at about 6:1 against the background, luminous but not neon. Muted-foreground (neutral.300) is about 8:1 on muted.",
    "typography": "Headings step by a ratio of about 1.4: heading-md 20, heading-lg 28, display-md 40, display-lg 56. Body and UI text step by about 1.125: caption 12, label 13, body-sm 14, body-md 16, body-lg 18. IBM Plex Serif (400, 500) is used only at 28px and above, with tracking from -0.01em at 28px to -0.022em at 56px. IBM Plex Sans (400, 500, 600) carries forms, tables, buttons and labels. IBM Plex Mono (400, 500) is limited to order numbers, microchip IDs and code. Body line height is 1.6 at 16px and 1.65 at 18px.",
    "layout": "Spacious density on a 4px base grid. Content columns max out at 1120px. Major sections are separated by space.20 (80px) or space.24 (96px). Cards use space.10 (40px) padding, inputs are 48px tall and buttons are 44px tall.",
    "elevation": "Mostly flat. Cards sit on background with a 1px border token and shadow.sm (5% warm alpha). Popovers use shadow.md and dialogs use shadow.lg. In dark mode, elevation comes from surface lightness (background, then card, then popover), and borders do the separating rather than shadows.",
    "shapes": "radius.md (6px) on buttons and inputs, radius.lg (10px) on cards, radius.xl (16px) on dialogs and large containers. radius.full is reserved for badges. radius.none and radius.sm (4px) are only for table cells and inline code."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#f3f6fc",
        "100": "#e4eaf7",
        "200": "#c8d5ef",
        "300": "#a3b8e3",
        "400": "#7b96d3",
        "500": "#5876bd",
        "600": "#3f5ca3",
        "700": "#334a86",
        "800": "#2a3b6c",
        "900": "#202c50",
        "950": "#141b33"
      },
      "neutral": {
        "50": "#faf8f5",
        "100": "#f3f0eb",
        "200": "#e4dfd8",
        "300": "#cdc7bf",
        "400": "#aea79e",
        "500": "#928b82",
        "600": "#78716a",
        "700": "#5f5953",
        "800": "#47423d",
        "900": "#302c28",
        "950": "#1a1816"
      },
      "success": {
        "50": "#f0f8f3",
        "100": "#dcefe3",
        "200": "#b9dfc8",
        "300": "#8ec8a7",
        "400": "#61ab84",
        "500": "#409268",
        "600": "#307a56",
        "700": "#256346",
        "800": "#1d4e37",
        "900": "#163a29",
        "950": "#0c261a"
      },
      "warning": {
        "50": "#fdf8ec",
        "100": "#f8edd0",
        "200": "#f0dca6",
        "300": "#e3c57a",
        "400": "#d2aa53",
        "500": "#b78b34",
        "600": "#987127",
        "700": "#7b591f",
        "800": "#60451a",
        "900": "#483314",
        "950": "#30210d"
      },
      "danger": {
        "50": "#fdf4f3",
        "100": "#fbe4e1",
        "200": "#f5c6c0",
        "300": "#ec9d93",
        "400": "#e0736a",
        "500": "#cb4f48",
        "600": "#b03a35",
        "700": "#91302a",
        "800": "#742723",
        "900": "#571d1b",
        "950": "#3a1210"
      }
    },
    "font": {
      "display": {
        "family": "IBM Plex Serif",
        "fallback": "Georgia, serif",
        "source": "google",
        "weights": [
          400,
          500
        ]
      },
      "sans": {
        "family": "IBM Plex Sans",
        "fallback": "system-ui, sans-serif",
        "source": "google",
        "weights": [
          400,
          500,
          600
        ]
      },
      "mono": {
        "family": "IBM Plex Mono",
        "fallback": "ui-monospace, monospace",
        "source": "google",
        "weights": [
          400,
          500
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 4,
      "md": 6,
      "lg": 10,
      "xl": 16,
      "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(48, 44, 40, 0.05)",
      "md": "0 6px 16px -4px rgba(48, 44, 40, 0.12)",
      "lg": "0 18px 40px -10px rgba(48, 44, 40, 0.18)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 56,
      "lineHeight": 1.1,
      "weight": 400,
      "letterSpacing": -0.022
    },
    "display-md": {
      "font": "display",
      "size": 40,
      "lineHeight": 1.15,
      "weight": 400,
      "letterSpacing": -0.016
    },
    "heading-lg": {
      "font": "display",
      "size": 28,
      "lineHeight": 1.25,
      "weight": 500,
      "letterSpacing": -0.01
    },
    "heading-md": {
      "font": "sans",
      "size": 20,
      "lineHeight": 1.35,
      "weight": 500,
      "letterSpacing": -0.005
    },
    "heading-sm": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.4,
      "weight": 600,
      "letterSpacing": 0
    },
    "body-lg": {
      "font": "sans",
      "size": 18,
      "lineHeight": 1.65,
      "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.55,
      "weight": 400,
      "letterSpacing": 0
    },
    "label": {
      "font": "sans",
      "size": 13,
      "lineHeight": 1.3,
      "weight": 500,
      "letterSpacing": 0.01
    },
    "caption": {
      "font": "sans",
      "size": 12,
      "lineHeight": 1.45,
      "weight": 400,
      "letterSpacing": 0.02
    },
    "code": {
      "font": "mono",
      "size": 13,
      "lineHeight": 1.55,
      "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": "#24211e",
      "card-foreground": "{color.neutral.50}",
      "popover": "#2a2723",
      "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.900}",
      "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": "#38342f",
      "input": "{color.neutral.700}",
      "ring": "{color.brand.400}"
    }
  },
  "components": {
    "button": {
      "height": 44,
      "paddingX": "{space.6}",
      "radius": "{radius.md}",
      "typography": "{typography.label}",
      "fontWeight": 500
    },
    "input": {
      "height": 48,
      "paddingX": "{space.4}",
      "radius": "{radius.md}",
      "typography": "{typography.body-md}",
      "borderWidth": 1
    },
    "card": {
      "padding": "{space.10}",
      "radius": "{radius.lg}",
      "shadow": "{shadow.sm}",
      "borderWidth": 1
    },
    "badge": {
      "height": 24,
      "paddingX": "{space.3}",
      "radius": "{radius.full}",
      "typography": "{typography.caption}"
    }
  },
  "guidance": {
    "do": [
      "Use the primary token (brand.600 light, brand.400 dark) for one button per view. Render other actions as secondary or ghost buttons.",
      "Set page titles in IBM Plex Serif at heading-lg (28px), display-md (40px) or display-lg (56px). Set everything below 28px in IBM Plex Sans.",
      "Separate major sections with space.20 (80px) or space.24 (96px), and pad cards with space.10 (40px).",
      "Show focus as a 2px ring token with a 2px offset on buttons, inputs, checkboxes and links.",
      "Pair every success, warning and destructive state with an icon or text label so meaning never depends on color alone.",
      "Set prices, order numbers and microchip IDs with font-feature-settings 'tnum', and right-align monetary columns in tables.",
      "In dark mode, stack surfaces as background, then card (#24211e), then popover (#2a2723) instead of adding shadows."
    ],
    "dont": [
      "Don't use primary, ring or any brand step for errors, destructive buttons or negative balances. Use destructive and the danger scale.",
      "Don't place more than one saturated hue on a screen besides status badges. Keep everything else on neutral.50 to neutral.950.",
      "Don't use #000000 or untinted greys. Pick from the warm neutral ramp.",
      "Don't set IBM Plex Serif below 28px or use it in buttons, form labels, badges or table cells.",
      "Don't put anything heavier than shadow.sm on cards. Reserve shadow.md for popovers and shadow.lg for dialogs.",
      "Don't set long-form text below body-sm (14px) or below a 1.5 line height.",
      "Don't place muted-foreground text on brand or status surfaces. Use the matching *-foreground token."
    ]
  }
}
