{
  "schemaVersion": "1.0",
  "id": "camellia-overtone",
  "version": "1.1.0",
  "name": "Camellia Overtone",
  "tier": "free",
  "summary": "Clinical-calm music UI: orchid-rose actions on cool slate, dark-first neutrals, Literata titles and legible Nunito Sans text.",
  "tags": {
    "industries": [
      "music",
      "audio-streaming",
      "creator-tools"
    ],
    "moods": [
      "clinical",
      "calm",
      "reassuring"
    ],
    "density": "comfortable",
    "contrast": "standard"
  },
  "rationale": {
    "overview": "Camellia Overtone is for people who spend hours inside music software: listeners, producers, label staff and mixing engineers. The system is built for long sessions, often at night. It uses cool slate neutrals and few decorative elements. One orchid accent (primary) marks the current action, the focus ring and the now-playing indicator. Dark mode is the primary design target. Light mode uses the same tokens with the lightness roles reversed. Hues and contrast pairings are unchanged between the two modes.",
    "color": "Orchid (brand, hue about 325–335) is the only action color. It is used for primary, ring and the now-playing indicator. Light mode uses brand.600 for primary (about 5.9:1 against white). Dark mode uses brand.400 for primary (about 6.4:1 on neutral.950) with brand.950 text. Neutrals are a slate ramp with a low-chroma blue cast, so they read cool next to the warm-pink accent. Dark surfaces stack from background neutral.950 to card neutral.900 to muted and secondary neutral.800. Destructive is a coral-red at roughly 35° in LCh, pushed further from orchid than the previous red. The two stay clearly apart in both modes (ΔE2000 above 20): danger.600 in light mode and danger.400 in dark mode. Success is a deep teal-green and warning is a honey amber. Both share the brand's chroma curve: soft at 50–200, saturated at 400–600 and dense at 800–950. All three scales darken monotonically from 50 to 950.",
    "typography": "The type scale uses a ratio of about 1.25 (major third) from a 16px body: 12, 14, 16, 18, 20, 24 (unused), 30, 38 and 48. Literata is used only for heading-lg (30), display-md (38) and display-lg (48), so album and playlist names stand apart from functional text. Letter spacing tightens as size grows: -0.012em at 30px, -0.018em at 38px and -0.022em at 48px. Nunito Sans sets all functional text: lists, forms, buttons and metadata. Body-md is 16/1.55 and body-lg is 18/1.6, and its large x-height keeps 12–14px labels readable on dark surfaces. Fira Code (400 and 500) is used only for API keys, build IDs, log timestamps and code samples. Every weight listed is shipped by its family on Google Fonts.",
    "layout": "Comfortable density on a 4px base grid. Track-list rows are 48px (space.12) so artwork, title and duration each have room. Content columns cap at 1120px. Player chrome keeps a fixed 8px (space.2) gutter. Controls are 40px tall, and badges are 24px to stay on the grid.",
    "elevation": "Elevation is low by default. Cards separate from the background with a 1px border token and shadow.sm. Popovers and menus use shadow.md. Dialogs and the now-playing sheet use shadow.lg. In dark mode, separation comes mainly from the surface steps (neutral.950, then neutral.900, then neutral.800), because shadows show up weakly on deep backgrounds.",
    "shapes": "Rounding is soft but precise: radius.md (8px) on buttons and inputs, and radius.lg (12px) on cards and artwork containers. radius.full (pill) is used only for status badges such as Live, Explicit and Offline. All other shapes stay rectilinear."
  },
  "primitives": {
    "color": {
      "brand": {
        "50": "#fff1f8",
        "100": "#ffe1f0",
        "200": "#fdc3e2",
        "300": "#f79cce",
        "400": "#e970b5",
        "500": "#d1489a",
        "600": "#b1307c",
        "700": "#8f2462",
        "800": "#6e1b4a",
        "900": "#501235",
        "950": "#33091e"
      },
      "neutral": {
        "50": "#f5f7fa",
        "100": "#e9edf2",
        "200": "#d5dce5",
        "300": "#b5bfcc",
        "400": "#8e9aaa",
        "500": "#6b7789",
        "600": "#535e6f",
        "700": "#3e4959",
        "800": "#2a3341",
        "900": "#1b222e",
        "950": "#10151e"
      },
      "success": {
        "50": "#e8faf2",
        "100": "#c9f2e0",
        "200": "#a2e5ca",
        "300": "#76d3ae",
        "400": "#4cbc92",
        "500": "#2c9f77",
        "600": "#1f8462",
        "700": "#17704f",
        "800": "#115a40",
        "900": "#0b4430",
        "950": "#052a1d"
      },
      "warning": {
        "50": "#fff7e8",
        "100": "#ffecc4",
        "200": "#f8d991",
        "300": "#e9c064",
        "400": "#d1a33e",
        "500": "#b5861c",
        "600": "#956b0e",
        "700": "#775307",
        "800": "#5c3f04",
        "900": "#422c02",
        "950": "#291a01"
      },
      "danger": {
        "50": "#fff4f0",
        "100": "#ffe4db",
        "200": "#ffc6b6",
        "300": "#ffa18a",
        "400": "#f57a62",
        "500": "#e2553b",
        "600": "#c0381f",
        "700": "#9c2a16",
        "800": "#7a2011",
        "900": "#5a160b",
        "950": "#3b0c05"
      }
    },
    "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
        ]
      },
      "mono": {
        "family": "Fira Code",
        "fallback": "ui-monospace, monospace",
        "source": "google",
        "weights": [
          400,
          500
        ]
      }
    },
    "radius": {
      "none": 0,
      "sm": 4,
      "md": 8,
      "lg": 12,
      "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(16, 21, 30, 0.08)",
      "md": "0 4px 12px -2px rgba(16, 21, 30, 0.20)",
      "lg": "0 16px 40px -8px rgba(16, 21, 30, 0.36)"
    }
  },
  "typography": {
    "display-lg": {
      "font": "display",
      "size": 48,
      "lineHeight": 1.08,
      "weight": 600,
      "letterSpacing": -0.022
    },
    "display-md": {
      "font": "display",
      "size": 38,
      "lineHeight": 1.12,
      "weight": 600,
      "letterSpacing": -0.018
    },
    "heading-lg": {
      "font": "display",
      "size": 30,
      "lineHeight": 1.2,
      "weight": 500,
      "letterSpacing": -0.012
    },
    "heading-md": {
      "font": "sans",
      "size": 20,
      "lineHeight": 1.3,
      "weight": 700,
      "letterSpacing": -0.005
    },
    "heading-sm": {
      "font": "sans",
      "size": 16,
      "lineHeight": 1.4,
      "weight": 700,
      "letterSpacing": 0
    },
    "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": 600,
      "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": 40,
      "paddingX": "{space.4}",
      "radius": "{radius.md}",
      "typography": "{typography.label}",
      "fontWeight": 600
    },
    "input": {
      "height": 40,
      "paddingX": "{space.3}",
      "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 the primary token for one filled button per view, the now-playing indicator and the 2px focus ring (ring) only. Render other actions as secondary or ghost buttons.",
      "Set durations and track counts in Nunito Sans with font-feature-settings: 'tnum'. Right-align these columns in 48px track-list rows.",
      "Use Literata only through heading-lg (30px), display-md (38px) and display-lg (48px) for album, playlist and page titles.",
      "Pair every success, warning or destructive badge with an icon or text label (Live, Offline, Failed) so state never depends on color alone.",
      "Design dark mode first: put the page on background (neutral.950), cards and popovers on card (neutral.900), and inset or hover areas on muted (neutral.800).",
      "Use muted-foreground (neutral.600 in light mode, neutral.300 in dark mode) for durations, timestamps and helper text. Both pass 5:1 on background and on muted."
    ],
    "dont": [
      "Don't use primary for errors, delete actions or failed uploads. Use destructive: danger.600 in light mode, danger.400 in dark mode.",
      "Don't set body text in Literata or use the display font below heading-lg (30px).",
      "Don't use #000000 or #ffffff as page backgrounds. Use neutral.950 (dark) and neutral.50 (light). #ffffff is allowed only for card and popover in light mode.",
      "Don't give cards more than shadow.sm. Reserve shadow.md for popovers and menus, and shadow.lg for dialogs and the now-playing sheet.",
      "Don't place more than one line of body text on the accent surface (brand.100 light, brand.900 dark). Accent is for selected rows and highlights.",
      "Don't use Fira Code for labels, buttons or badges. Limit it to the code token for keys, build IDs and code blocks."
    ]
  }
}
