{
  "plugins": [
    "react",
    "import"
  ],
  "rules": {
    "react/forbid-elements": [
      "warn",
      {
        "forbid": []
      }
    ],
    "no-restricted-imports": [
      "warn",
      {
        "patterns": [
          {
            "group": [
              "components/content/**",
              "components/core/**",
              "ui_kits/web/**"
            ],
            "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*(?!['\\\"]?(?:Archivo|Source Serif 4|Barlow Condensed))/i]",
        "message": "Font not provided by the design system. Available: Archivo, Source Serif 4, Barlow Condensed."
      },
      {
        "selector": "JSXOpeningElement[name.name='ArticleCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|kicker|title|dek|author|time|onClick|style|key|ref|className|style|children)$/]",
        "message": "<ArticleCard> doesn't accept that prop. Declared props: variant, kicker, title, dek, author, time, onClick, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='ArticleCard'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:hero|standard|compact)$/]",
        "message": "<ArticleCard> variant must be one of 'hero' | 'standard' | 'compact'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|children|style|key|ref|className|style|children)$/]",
        "message": "<Badge> doesn't accept that prop. Declared props: variant, children, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:default|team|live|win|loss|commit)$/]",
        "message": "<Badge> variant must be one of 'default' | 'team' | 'live' | 'win' | 'loss' | 'commit'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|size|disabled|children|key|ref|className|style|children)$/]",
        "message": "<Button> doesn't accept that prop. Declared props: variant, size, disabled, children."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|secondary|ghost|inverse)$/]",
        "message": "<Button> variant must be one of 'primary' | 'secondary' | 'ghost' | 'inverse'."
      },
      {
        "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='Input'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|error|key|ref|className|style|children)$/]",
        "message": "<Input> doesn't accept that prop. Declared props: label, error."
      },
      {
        "selector": "JSXOpeningElement[name.name='RecruitCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:name|position|stars|hometown|school|status|committedTo|style|key|ref|className|style|children)$/]",
        "message": "<RecruitCard> doesn't accept that prop. Declared props: name, position, stars, hometown, school, status, committedTo, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='RecruitCard'] > JSXAttribute[name.name='status'] > Literal[value!=/^(?:committed|flipped|official_visit|decommitted)$/]",
        "message": "<RecruitCard> status must be one of 'committed' | 'flipped' | 'official_visit' | 'decommitted'."
      },
      {
        "selector": "JSXOpeningElement[name.name='ScoreBugTeam'] > JSXAttribute > JSXIdentifier[name!=/^(?:name|abbr|rank|record|score|color|key|ref|className|style|children)$/]",
        "message": "<ScoreBugTeam> doesn't accept that prop. Declared props: name, abbr, rank, record, score, color."
      },
      {
        "selector": "JSXOpeningElement[name.name='Select'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|options|key|ref|className|style|children)$/]",
        "message": "<Select> doesn't accept that prop. Declared props: label, options."
      },
      {
        "selector": "JSXOpeningElement[name.name='Tabs'] > JSXAttribute > JSXIdentifier[name!=/^(?:items|value|onChange|style|key|ref|className|style|children)$/]",
        "message": "<Tabs> doesn't accept that prop. Declared props: items, value, onChange, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute > JSXIdentifier[name!=/^(?:active|onClick|children|style|key|ref|className|style|children)$/]",
        "message": "<Tag> doesn't accept that prop. Declared props: active, onClick, children, style."
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**/index.js"
      ],
      "rules": {
        "no-restricted-imports": "off"
      }
    }
  ],
  "x-omelette": {
    "components": {
      "ArticleCard": {
        "replaces": []
      },
      "Badge": {
        "replaces": []
      },
      "Button": {
        "replaces": []
      },
      "Input": {
        "replaces": []
      },
      "RecruitCard": {
        "replaces": []
      },
      "ScoreBugTeam": {
        "replaces": []
      },
      "Select": {
        "replaces": []
      },
      "Tabs": {
        "replaces": []
      },
      "Tag": {
        "replaces": []
      }
    },
    "tokens": [
      "--border-hairline",
      "--border-rule",
      "--border-width",
      "--commit",
      "--container-max",
      "--dur-fast",
      "--dur-med",
      "--ease-standard",
      "--font-body",
      "--font-headline",
      "--font-stat",
      "--font-ui",
      "--ink-075",
      "--ink-150",
      "--ink-300",
      "--ink-500",
      "--ink-700",
      "--ink-900",
      "--leading-body",
      "--leading-headline",
      "--leading-ui",
      "--link",
      "--link-hover",
      "--live",
      "--loss",
      "--paper",
      "--paper-off",
      "--radius-lg",
      "--radius-md",
      "--radius-pill",
      "--radius-sm",
      "--rule-heavy",
      "--shadow-card",
      "--shadow-overlay",
      "--shadow-raised",
      "--space-1",
      "--space-10",
      "--space-12",
      "--space-16",
      "--space-2",
      "--space-3",
      "--space-4",
      "--space-5",
      "--space-6",
      "--space-8",
      "--star",
      "--surface-card",
      "--surface-inverse",
      "--surface-page",
      "--surface-section",
      "--team-on-primary",
      "--team-on-secondary",
      "--team-primary",
      "--team-primary-dark",
      "--team-primary-tint",
      "--team-secondary",
      "--text-body",
      "--text-body-size",
      "--text-caption",
      "--text-display",
      "--text-h1",
      "--text-h2",
      "--text-h3",
      "--text-headline",
      "--text-lede",
      "--text-muted",
      "--text-on-inverse",
      "--text-overline",
      "--text-stat",
      "--text-ui",
      "--tracking-headline",
      "--tracking-overline",
      "--weight-black",
      "--weight-bold",
      "--weight-regular",
      "--weight-semibold",
      "--win"
    ],
    "tokenKinds": {
      "--team-primary": "color",
      "--team-primary-dark": "color",
      "--team-primary-tint": "color",
      "--team-secondary": "color",
      "--team-on-primary": "color",
      "--team-on-secondary": "color",
      "--ink-900": "color",
      "--ink-700": "color",
      "--ink-500": "color",
      "--ink-300": "color",
      "--ink-150": "color",
      "--ink-075": "color",
      "--paper": "color",
      "--paper-off": "color",
      "--surface-page": "color",
      "--surface-section": "color",
      "--surface-card": "color",
      "--surface-inverse": "color",
      "--text-headline": "font",
      "--text-body": "font",
      "--text-muted": "font",
      "--text-on-inverse": "font",
      "--link": "color",
      "--link-hover": "color",
      "--border-rule": "color",
      "--border-hairline": "color",
      "--live": "color",
      "--win": "color",
      "--loss": "color",
      "--commit": "color",
      "--star": "color",
      "--font-headline": "font",
      "--font-body": "font",
      "--font-ui": "font",
      "--font-stat": "font",
      "--text-display": "font",
      "--text-h1": "font",
      "--text-h2": "font",
      "--text-h3": "font",
      "--text-lede": "font",
      "--text-body-size": "font",
      "--text-ui": "font",
      "--text-caption": "font",
      "--text-overline": "font",
      "--text-stat": "font",
      "--weight-black": "font",
      "--weight-bold": "font",
      "--weight-semibold": "font",
      "--weight-regular": "font",
      "--leading-headline": "font",
      "--leading-body": "font",
      "--leading-ui": "font",
      "--tracking-headline": "font",
      "--tracking-overline": "font",
      "--space-1": "spacing",
      "--space-2": "spacing",
      "--space-3": "spacing",
      "--space-4": "spacing",
      "--space-5": "spacing",
      "--space-6": "spacing",
      "--space-8": "spacing",
      "--space-10": "spacing",
      "--space-12": "spacing",
      "--space-16": "spacing",
      "--radius-sm": "radius",
      "--radius-md": "radius",
      "--radius-lg": "radius",
      "--radius-pill": "radius",
      "--shadow-card": "shadow",
      "--shadow-raised": "shadow",
      "--shadow-overlay": "shadow",
      "--border-width": "spacing",
      "--rule-heavy": "color",
      "--container-max": "spacing",
      "--ease-standard": "other",
      "--dur-fast": "other",
      "--dur-med": "other"
    },
    "fontFamilies": [
      "Archivo",
      "Barlow Condensed",
      "Source Serif 4"
    ]
  }
}