{
  "plugins": [
    "react",
    "import"
  ],
  "rules": {
    "react/forbid-elements": [
      "warn",
      {
        "forbid": []
      }
    ],
    "no-restricted-imports": [
      "warn",
      {
        "patterns": [
          {
            "group": [
              "components/core/**",
              "components/display/**",
              "components/forms/**",
              "components/navigation/**",
              "ui_kits/guest_site/**"
            ],
            "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*(?!['\\\"]?(?:Lato|Open Sans|Source Sans 3|Zilla Slab|Oswald|Space Grotesk|Archivo|Fredoka|Nunito|Cormorant Garamond|Jost))/i]",
        "message": "Font not provided by the design system. Available: Lato, Open Sans, Source Sans 3, Zilla Slab, Oswald, Space Grotesk, Archivo, Fredoka, Nunito, Cormorant Garamond, Jost."
      },
      {
        "selector": "JSXOpeningElement[name.name='AmenityItem'] > JSXAttribute > JSXIdentifier[name!=/^(?:icon|label|style|key|ref|className|style|children)$/]",
        "message": "<AmenityItem> doesn't accept that prop. Declared props: icon, label, style."
      },
      {
        "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|style|key|ref|className|style|children)$/]",
        "message": "<Badge> doesn't accept that prop. Declared props: children, tone, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:green|soft|coral|neutral)$/]",
        "message": "<Badge> tone must be one of 'green' | 'soft' | 'coral' | 'neutral'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|size|block|disabled|href|icon|style|onClick|key|ref|className|style|children)$/]",
        "message": "<Button> doesn't accept that prop. Declared props: children, variant, size, block, disabled, href, icon, style, onClick."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|secondary|ghost|accent)$/]",
        "message": "<Button> variant must be one of 'primary' | 'secondary' | 'ghost' | 'accent'."
      },
      {
        "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='Card'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|image|title|icon|style|key|ref|className|style|children)$/]",
        "message": "<Card> doesn't accept that prop. Declared props: children, variant, image, title, icon, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:plain|haze|outline|photo)$/]",
        "message": "<Card> variant must be one of 'plain' | 'haze' | 'outline' | 'photo'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Checkbox'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|checked|defaultChecked|onChange|key|ref|className|style|children)$/]",
        "message": "<Checkbox> doesn't accept that prop. Declared props: label, checked, defaultChecked, onChange."
      },
      {
        "selector": "JSXOpeningElement[name.name='Input'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|hint|key|ref|className|style|children)$/]",
        "message": "<Input> doesn't accept that prop. Declared props: label, hint."
      },
      {
        "selector": "JSXOpeningElement[name.name='NavLinkSpec'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|href|highlight|onClick|key|ref|className|style|children)$/]",
        "message": "<NavLinkSpec> doesn't accept that prop. Declared props: label, href, highlight, onClick."
      },
      {
        "selector": "JSXOpeningElement[name.name='PriceCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:title|sub|price|style|key|ref|className|style|children)$/]",
        "message": "<PriceCard> doesn't accept that prop. Declared props: title, sub, price, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='SelectOption'] > JSXAttribute > JSXIdentifier[name!=/^(?:value|label|key|ref|className|style|children)$/]",
        "message": "<SelectOption> doesn't accept that prop. Declared props: value, label."
      },
      {
        "selector": "JSXOpeningElement[name.name='TabSpec'] > JSXAttribute > JSXIdentifier[name!=/^(?:id|label|icon|key|ref|className|style|children)$/]",
        "message": "<TabSpec> doesn't accept that prop. Declared props: id, label, icon."
      },
      {
        "selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|tone|style|key|ref|className|style|children)$/]",
        "message": "<Tag> doesn't accept that prop. Declared props: children, tone, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:green|haze|solid|neutral)$/]",
        "message": "<Tag> tone must be one of 'green' | 'haze' | 'solid' | 'neutral'."
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**/index.js"
      ],
      "rules": {
        "no-restricted-imports": "off"
      }
    }
  ],
  "x-omelette": {
    "components": {
      "AmenityItem": {
        "replaces": []
      },
      "Avatar": {
        "replaces": []
      },
      "Badge": {
        "replaces": []
      },
      "Button": {
        "replaces": []
      },
      "Card": {
        "replaces": []
      },
      "Checkbox": {
        "replaces": []
      },
      "Input": {
        "replaces": []
      },
      "NavLinkSpec": {
        "replaces": []
      },
      "PriceCard": {
        "replaces": []
      },
      "SelectOption": {
        "replaces": []
      },
      "TabSpec": {
        "replaces": []
      },
      "Tag": {
        "replaces": []
      }
    },
    "tokens": [
      "--lv-accent",
      "--lv-accent-warm",
      "--lv-accent-warm-hover",
      "--lv-accent-warm-surface",
      "--lv-bg",
      "--lv-border",
      "--lv-border-brand",
      "--lv-border-soft",
      "--lv-contact",
      "--lv-contact-hover",
      "--lv-container",
      "--lv-container-wide",
      "--lv-coral",
      "--lv-coral-deep",
      "--lv-coral-haze",
      "--lv-focus",
      "--lv-font-body",
      "--lv-font-display",
      "--lv-font-label",
      "--lv-font-ui",
      "--lv-green",
      "--lv-green-deep",
      "--lv-green-haze",
      "--lv-green-ink",
      "--lv-green-light",
      "--lv-grey",
      "--lv-grey-soft",
      "--lv-ink",
      "--lv-leading-base",
      "--lv-leading-body",
      "--lv-leading-h1",
      "--lv-leading-h2",
      "--lv-leading-lg",
      "--lv-leading-sm",
      "--lv-leading-title",
      "--lv-leading-xs",
      "--lv-link",
      "--lv-link-hover",
      "--lv-on-primary",
      "--lv-primary",
      "--lv-primary-hover",
      "--lv-radius-lg",
      "--lv-radius-md",
      "--lv-radius-pill",
      "--lv-radius-round",
      "--lv-radius-sm",
      "--lv-radius-xs",
      "--lv-shadow-card",
      "--lv-shadow-hover",
      "--lv-shadow-nav",
      "--lv-shadow-pop",
      "--lv-shadow-sm",
      "--lv-smoke",
      "--lv-space-1",
      "--lv-space-10",
      "--lv-space-2",
      "--lv-space-3",
      "--lv-space-4",
      "--lv-space-5",
      "--lv-space-6",
      "--lv-space-8",
      "--lv-surface",
      "--lv-surface-muted",
      "--lv-surface-tint",
      "--lv-text",
      "--lv-text-base",
      "--lv-text-body",
      "--lv-text-brand",
      "--lv-text-h1",
      "--lv-text-h2",
      "--lv-text-lg",
      "--lv-text-muted",
      "--lv-text-sm",
      "--lv-text-strong",
      "--lv-text-title",
      "--lv-text-xs",
      "--lv-track-button",
      "--lv-track-label",
      "--lv-track-pill",
      "--lv-weight-bold",
      "--lv-weight-light",
      "--lv-weight-medium",
      "--lv-weight-regular",
      "--lv-white"
    ],
    "tokenKinds": {
      "--lv-green": "color",
      "--lv-green-deep": "color",
      "--lv-green-light": "color",
      "--lv-green-haze": "color",
      "--lv-green-ink": "color",
      "--lv-white": "color",
      "--lv-smoke": "color",
      "--lv-ink": "color",
      "--lv-text": "font",
      "--lv-grey": "color",
      "--lv-grey-soft": "color",
      "--lv-coral": "color",
      "--lv-coral-deep": "color",
      "--lv-coral-haze": "color",
      "--lv-link": "color",
      "--lv-link-hover": "color",
      "--lv-contact": "color",
      "--lv-contact-hover": "color",
      "--lv-bg": "color",
      "--lv-surface": "color",
      "--lv-surface-tint": "color",
      "--lv-surface-muted": "color",
      "--lv-text-strong": "font",
      "--lv-text-body": "font",
      "--lv-text-muted": "font",
      "--lv-text-brand": "font",
      "--lv-primary": "color",
      "--lv-primary-hover": "color",
      "--lv-on-primary": "color",
      "--lv-accent": "color",
      "--lv-accent-warm": "color",
      "--lv-accent-warm-hover": "color",
      "--lv-accent-warm-surface": "color",
      "--lv-border": "color",
      "--lv-border-brand": "color",
      "--lv-border-soft": "color",
      "--lv-focus": "color",
      "--lv-font-display": "font",
      "--lv-font-body": "font",
      "--lv-font-ui": "font",
      "--lv-font-label": "font",
      "--lv-text-h1": "font",
      "--lv-leading-h1": "font",
      "--lv-text-h2": "font",
      "--lv-leading-h2": "font",
      "--lv-text-title": "font",
      "--lv-leading-title": "font",
      "--lv-text-lg": "font",
      "--lv-leading-lg": "font",
      "--lv-leading-body": "font",
      "--lv-text-base": "font",
      "--lv-leading-base": "font",
      "--lv-text-sm": "font",
      "--lv-leading-sm": "font",
      "--lv-text-xs": "font",
      "--lv-leading-xs": "font",
      "--lv-weight-light": "font",
      "--lv-weight-regular": "font",
      "--lv-weight-medium": "font",
      "--lv-weight-bold": "font",
      "--lv-track-label": "spacing",
      "--lv-track-button": "spacing",
      "--lv-track-pill": "spacing",
      "--lv-radius-xs": "radius",
      "--lv-radius-sm": "radius",
      "--lv-radius-md": "radius",
      "--lv-radius-lg": "radius",
      "--lv-radius-pill": "radius",
      "--lv-radius-round": "radius",
      "--lv-shadow-sm": "shadow",
      "--lv-shadow-card": "shadow",
      "--lv-shadow-pop": "shadow",
      "--lv-shadow-nav": "shadow",
      "--lv-shadow-hover": "shadow",
      "--lv-space-1": "spacing",
      "--lv-space-2": "spacing",
      "--lv-space-3": "spacing",
      "--lv-space-4": "spacing",
      "--lv-space-5": "spacing",
      "--lv-space-6": "spacing",
      "--lv-space-8": "spacing",
      "--lv-space-10": "spacing",
      "--lv-container": "spacing",
      "--lv-container-wide": "spacing"
    },
    "fontFamilies": [
      "Archivo",
      "Cormorant Garamond",
      "Fredoka",
      "Jost",
      "Lato",
      "Nunito",
      "Open Sans",
      "Oswald",
      "Source Sans 3",
      "Space Grotesk",
      "Zilla Slab"
    ]
  }
}