{
  "plugins": [
    "react",
    "import"
  ],
  "rules": {
    "react/forbid-elements": [
      "warn",
      {
        "forbid": []
      }
    ],
    "no-restricted-imports": [
      "warn",
      {
        "patterns": [
          {
            "group": [
              "components/brand/**",
              "components/core/**",
              "components/feedback/**",
              "components/forms/**",
              "components/navigation/**",
              "ui_kits/marketing/**"
            ],
            "message": "Import design-system components from 'index.js', not component internals."
          }
        ]
      }
    ],
    "no-restricted-syntax": [
      "warn",
      {
        "selector": "Literal[value=/#[0-9a-fA-F]{3,8}\\b/]",
        "message": "Raw hex color — use a design-system color token via var()."
      },
      {
        "selector": "Literal[value=/\\b\\d+px\\b/]",
        "message": "Raw px value — use a design-system spacing token via var()."
      },
      {
        "selector": "Literal[value=/font-family\\s*:\\s*(?!['\\\"]?(?:Cormorant Garamond|Mulish))/i]",
        "message": "Font not provided by the design system. Available: Cormorant Garamond, Mulish."
      },
      {
        "selector": "JSXOpeningElement[name.name='Avatar'] > JSXAttribute > JSXIdentifier[name!=/^(?:src|name|size|ring|style|key|ref|className|style|children)$/]",
        "message": "<Avatar> doesn't accept that prop. Declared props: src, name, size, ring, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|tone|soft|style|key|ref|className|style|children)$/]",
        "message": "<Badge> doesn't accept that prop. Declared props: children, tone, soft, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:brand|sky|neutral|success|warning|danger)$/]",
        "message": "<Badge> tone must be one of 'brand' | 'sky' | 'neutral' | 'success' | 'warning' | 'danger'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|size|icon|iconRight|fullWidth|disabled|type|onClick|style|key|ref|className|style|children)$/]",
        "message": "<Button> doesn't accept that prop. Declared props: children, variant, size, icon, iconRight, fullWidth, disabled, type, onClick, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|secondary|ghost|glass|dark)$/]",
        "message": "<Button> variant must be one of 'primary' | 'secondary' | 'ghost' | 'glass' | 'dark'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg)$/]",
        "message": "<Button> size must be one of 'sm' | 'md' | 'lg'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='type'] > Literal[value!=/^(?:button|submit|reset)$/]",
        "message": "<Button> type must be one of 'button' | 'submit' | 'reset'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|padding|radius|hoverable|style|key|ref|className|style|children)$/]",
        "message": "<Card> doesn't accept that prop. Declared props: children, variant, padding, radius, hoverable, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:solid|glass|muted|brand)$/]",
        "message": "<Card> variant must be one of 'solid' | 'glass' | 'muted' | 'brand'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute[name.name='padding'] > Literal[value!=/^(?:none|sm|md|lg|xl)$/]",
        "message": "<Card> padding must be one of 'none' | 'sm' | 'md' | 'lg' | 'xl'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute[name.name='radius'] > Literal[value!=/^(?:md|lg|xl|2xl)$/]",
        "message": "<Card> radius must be one of 'md' | 'lg' | 'xl' | '2xl'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Checkbox'] > JSXAttribute > JSXIdentifier[name!=/^(?:checked|onChange|disabled|label|style|key|ref|className|style|children)$/]",
        "message": "<Checkbox> doesn't accept that prop. Declared props: checked, onChange, disabled, label, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|size|label|disabled|onClick|style|key|ref|className|style|children)$/]",
        "message": "<IconButton> doesn't accept that prop. Declared props: children, variant, size, label, disabled, onClick, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|secondary|ghost|glass)$/]",
        "message": "<IconButton> variant must be one of 'primary' | 'secondary' | 'ghost' | 'glass'."
      },
      {
        "selector": "JSXOpeningElement[name.name='IconButton'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg)$/]",
        "message": "<IconButton> size must be one of 'sm' | 'md' | 'lg'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Input'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|hint|error|icon|size|key|ref|className|style|children)$/]",
        "message": "<Input> doesn't accept that prop. Declared props: label, hint, error, icon, size."
      },
      {
        "selector": "JSXOpeningElement[name.name='Input'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:md|lg)$/]",
        "message": "<Input> size must be one of 'md' | 'lg'."
      },
      {
        "selector": "JSXOpeningElement[name.name='ServiceCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:title|description|duration|price|icon|badge|featured|ctaLabel|onBook|style|key|ref|className|style|children)$/]",
        "message": "<ServiceCard> doesn't accept that prop. Declared props: title, description, duration, price, icon, badge, featured, ctaLabel, onBook, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Switch'] > JSXAttribute > JSXIdentifier[name!=/^(?:checked|onChange|disabled|label|style|key|ref|className|style|children)$/]",
        "message": "<Switch> doesn't accept that prop. Declared props: checked, onChange, disabled, label, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='TabItem'] > JSXAttribute > JSXIdentifier[name!=/^(?:id|label|icon|key|ref|className|style|children)$/]",
        "message": "<TabItem> doesn't accept that prop. Declared props: id, label, icon."
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**/index.js"
      ],
      "rules": {
        "no-restricted-imports": "off"
      }
    }
  ],
  "x-omelette": {
    "components": {
      "Avatar": {
        "replaces": []
      },
      "Badge": {
        "replaces": []
      },
      "Button": {
        "replaces": []
      },
      "Card": {
        "replaces": []
      },
      "Checkbox": {
        "replaces": []
      },
      "IconButton": {
        "replaces": []
      },
      "Input": {
        "replaces": []
      },
      "ServiceCard": {
        "replaces": []
      },
      "Switch": {
        "replaces": []
      },
      "TabItem": {
        "replaces": []
      }
    },
    "tokens": [
      "--accent",
      "--accent-soft",
      "--blue-100",
      "--blue-200",
      "--blue-300",
      "--blue-400",
      "--blue-50",
      "--blue-500",
      "--blue-600",
      "--blue-700",
      "--blue-800",
      "--blue-900",
      "--blue-950",
      "--border-default",
      "--border-strong",
      "--border-subtle",
      "--brand",
      "--brand-hover",
      "--brand-press",
      "--brand-strong",
      "--container-lg",
      "--container-md",
      "--container-sm",
      "--container-xl",
      "--danger-100",
      "--danger-600",
      "--dur-base",
      "--dur-fast",
      "--dur-slow",
      "--ease-out",
      "--ease-soft",
      "--focus-ring",
      "--font-body",
      "--font-display",
      "--font-eyebrow",
      "--font-heading",
      "--font-label",
      "--font-sans",
      "--glass-bg",
      "--glass-bg-strong",
      "--glass-bg-tint",
      "--glass-blur",
      "--glass-blur-lg",
      "--glass-border",
      "--glass-dark-bg",
      "--glass-dark-border",
      "--gray-100",
      "--gray-200",
      "--gray-300",
      "--gray-400",
      "--gray-50",
      "--gray-500",
      "--gray-600",
      "--gray-700",
      "--gray-800",
      "--gray-900",
      "--gray-950",
      "--gutter",
      "--info-100",
      "--info-600",
      "--leading-normal",
      "--leading-relaxed",
      "--leading-snug",
      "--leading-tight",
      "--radius-2xl",
      "--radius-lg",
      "--radius-md",
      "--radius-pill",
      "--radius-sm",
      "--radius-xl",
      "--radius-xs",
      "--section-y",
      "--shadow-glass",
      "--shadow-inset",
      "--shadow-lg",
      "--shadow-md",
      "--shadow-sm",
      "--shadow-xl",
      "--shadow-xs",
      "--space-0",
      "--space-1",
      "--space-10",
      "--space-12",
      "--space-2",
      "--space-3",
      "--space-4",
      "--space-5",
      "--space-6",
      "--space-7",
      "--space-8",
      "--space-9",
      "--success-100",
      "--success-600",
      "--surface-brand",
      "--surface-brand-soft",
      "--surface-card",
      "--surface-card-muted",
      "--surface-page",
      "--surface-page-deep",
      "--surface-sunken",
      "--text-2xl",
      "--text-3xl",
      "--text-4xl",
      "--text-base",
      "--text-body",
      "--text-lg",
      "--text-link",
      "--text-md",
      "--text-muted",
      "--text-on-brand",
      "--text-sm",
      "--text-strong",
      "--text-xl",
      "--text-xs",
      "--tracking-label",
      "--tracking-normal",
      "--tracking-tight",
      "--tracking-wide",
      "--warning-100",
      "--warning-600",
      "--weight-bold",
      "--weight-extra",
      "--weight-medium",
      "--weight-regular",
      "--weight-semibold",
      "--white"
    ],
    "tokenKinds": {
      "--blue-950": "color",
      "--blue-900": "color",
      "--blue-800": "color",
      "--blue-700": "color",
      "--blue-600": "color",
      "--blue-500": "color",
      "--blue-400": "color",
      "--blue-300": "color",
      "--blue-200": "color",
      "--blue-100": "color",
      "--blue-50": "color",
      "--gray-950": "color",
      "--gray-900": "color",
      "--gray-800": "color",
      "--gray-700": "color",
      "--gray-600": "color",
      "--gray-500": "color",
      "--gray-400": "color",
      "--gray-300": "color",
      "--gray-200": "color",
      "--gray-100": "color",
      "--gray-50": "color",
      "--white": "color",
      "--success-600": "color",
      "--success-100": "color",
      "--warning-600": "color",
      "--warning-100": "color",
      "--danger-600": "color",
      "--danger-100": "color",
      "--info-600": "color",
      "--info-100": "color",
      "--text-strong": "font",
      "--text-body": "font",
      "--text-muted": "font",
      "--text-on-brand": "font",
      "--text-link": "font",
      "--surface-page": "color",
      "--surface-page-deep": "color",
      "--surface-card": "color",
      "--surface-card-muted": "color",
      "--surface-sunken": "color",
      "--surface-brand": "color",
      "--surface-brand-soft": "color",
      "--brand": "color",
      "--brand-strong": "color",
      "--brand-hover": "color",
      "--brand-press": "color",
      "--accent": "color",
      "--accent-soft": "color",
      "--border-subtle": "color",
      "--border-default": "color",
      "--border-strong": "color",
      "--focus-ring": "color",
      "--font-display": "font",
      "--font-sans": "font",
      "--font-label": "font",
      "--text-xs": "font",
      "--text-sm": "font",
      "--text-base": "font",
      "--text-md": "font",
      "--text-lg": "font",
      "--text-xl": "font",
      "--text-2xl": "font",
      "--text-3xl": "font",
      "--text-4xl": "font",
      "--weight-regular": "font",
      "--weight-medium": "font",
      "--weight-semibold": "font",
      "--weight-bold": "font",
      "--weight-extra": "font",
      "--leading-tight": "font",
      "--leading-snug": "font",
      "--leading-normal": "font",
      "--leading-relaxed": "font",
      "--tracking-tight": "font",
      "--tracking-normal": "font",
      "--tracking-wide": "font",
      "--tracking-label": "font",
      "--font-heading": "font",
      "--font-body": "font",
      "--font-eyebrow": "font",
      "--space-0": "spacing",
      "--space-1": "spacing",
      "--space-2": "spacing",
      "--space-3": "spacing",
      "--space-4": "spacing",
      "--space-5": "spacing",
      "--space-6": "spacing",
      "--space-7": "spacing",
      "--space-8": "spacing",
      "--space-9": "spacing",
      "--space-10": "spacing",
      "--space-12": "spacing",
      "--container-sm": "spacing",
      "--container-md": "spacing",
      "--container-lg": "spacing",
      "--container-xl": "spacing",
      "--gutter": "color",
      "--section-y": "color",
      "--radius-xs": "radius",
      "--radius-sm": "radius",
      "--radius-md": "radius",
      "--radius-lg": "radius",
      "--radius-xl": "radius",
      "--radius-2xl": "radius",
      "--radius-pill": "radius",
      "--shadow-xs": "shadow",
      "--shadow-sm": "shadow",
      "--shadow-md": "shadow",
      "--shadow-lg": "shadow",
      "--shadow-xl": "shadow",
      "--shadow-glass": "shadow",
      "--shadow-inset": "shadow",
      "--glass-bg": "color",
      "--glass-bg-strong": "color",
      "--glass-bg-tint": "color",
      "--glass-border": "color",
      "--glass-blur": "spacing",
      "--glass-blur-lg": "spacing",
      "--glass-dark-bg": "color",
      "--glass-dark-border": "color",
      "--ease-out": "other",
      "--ease-soft": "other",
      "--dur-fast": "other",
      "--dur-base": "other",
      "--dur-slow": "other"
    },
    "fontFamilies": [
      "Cormorant Garamond",
      "Mulish"
    ]
  }
}